=== New features in 1.20 ===
* Added TitleIsAlwaysKnown hook which gets called when determining if a page exists.
+* Added NamespaceIsMovable hook which gets called when determining if pages in a
+ certain namespace can be moved.
* (bug 32341) Add upload by URL domain limitation.
* &useskin=default will now always display the default skin. Useful for users with a
preference for the non-default skin to look at something using the default skin.
* QUnit.newMwEnvironment now supports passing a custom setup and/or teardown function.
Arguments signature has changed. First arguments is now an options object of which
'config' can be a property. Previously 'config' itself was the first and only argument.
+* New getCreator and getOldestRevision methods added to WikiPage class
=== Bug fixes in 1.20 ===
* (bug 30245) Use the correct way to construct a log page title.
* (bug 30410) Removed deprecated $wgFilterCallback and the 'filtered' API error.
* (bug 32604) Some messages needs escaping of wikitext inside username
* (bug 36537) Rename wfArrayToCGI to wfArrayToCgi for consistency with wfCgiToArray.
+* (bug 25946) The message on the top of Special:RecentChanges is now displayed
+ in user language instead of content language
=== API changes in 1.20 ===
* (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
regularly. Below only new and removed languages are listed, as well as
changes to languages because of Bugzilla reports.
+* Tornedalen Finnish (fit) added.
* Mizo (lus) added.
* Santali (sat) added.
* (bug 34192) Namespace gender aliases for Albanian languages (sq & aln).
<?php
-
/**
- * API for MediaWiki 1.8+
+ * This file is the entry point for all API queries.
+ *
+ * It begins by checking whether the API is enabled on this wiki; if not,
+ * it informs the user that s/he should set $wgEnableAPI to true and exits.
+ * Otherwise, it constructs a new ApiMain using the parameter passed to it
+ * as an argument in the URL ('?action=') and with write-enabled set to the
+ * value of $wgEnableWriteAPI as specified in LocalSettings.php.
+ * It then invokes "execute()" on the ApiMain object instance, which
+ * produces output in the format sepecified in the URL.
*
- * Copyright (C) 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
+ * Copyright © 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* @file
*/
-/**
- * This file is the entry point for all API queries. It begins by checking
- * whether the API is enabled on this wiki; if not, it informs the user that
- * s/he should set $wgEnableAPI to true and exits. Otherwise, it constructs
- * a new ApiMain using the parameter passed to it as an argument in the URL
- * ('?action=') and with write-enabled set to the value of $wgEnableWriteAPI
- * as specified in LocalSettings.php. It then invokes "execute()" on the
- * ApiMain object instance, which produces output in the format sepecified
- * in the URL.
- */
-
// So extensions (and other code) can check whether they're running in API mode
define( 'MW_API', true );
-<?php require 'api.php';
+<?php
+/**
+ * Version of api.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+require 'api.php';
mail().
== Updates ==
+
The correct way for updating a wiki is to update the files and then run from
command line the maintenance/update.php script (with appropriate parameters if
files were moved). It will perform all the needed steps to update the database
BaseTemplate::makeListItem for details on the format of individual
items inside of this array
+'NamespaceIsMovable': Called when determining if it is possible to pages in a namespace.
+$index: Integer; the index of the namespace being checked.
+$result: Boolean; whether MediaWiki currently thinks that pages in this namespace are movable.
+Hooks may change this value to override the return value of MWNamespace::isMovable()
+
'NewRevisionFromEditComplete': called when a revision was inserted
due to an edit
$article: the WikiPage edited
<?php
-
/**
* Image authorisation script
*
*
* Your server needs to support PATH_INFO; CGI-based configurations usually don't.
*
- * @file
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
- **/
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
if ( isset( $_SERVER['MW_COMPILED'] ) ) {
-<?php require './img_auth.php';
\ No newline at end of file
+<?php
+/**
+ * Version of img_auth.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+require './img_auth.php';
<?php
/**
- * @defgroup Actions Action done on pages
- */
-
-/**
- * Actions are things which can be done to pages (edit, delete, rollback, etc). They
- * are distinct from Special Pages because an action must apply to exactly one page.
- *
- * To add an action in an extension, create a subclass of Action, and add the key to
- * $wgActions. There is also the deprecated UnknownAction hook
- *
+ * Base classes for actions done on pages.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*
* @file
*/
+
+/**
+ * @defgroup Actions Action done on pages
+ */
+
+/**
+ * Actions are things which can be done to pages (edit, delete, rollback, etc). They
+ * are distinct from Special Pages because an action must apply to exactly one page.
+ *
+ * To add an action in an extension, create a subclass of Action, and add the key to
+ * $wgActions. There is also the deprecated UnknownAction hook
+ *
+ * Actions generally fall into two groups: the show-a-form-then-do-something-with-the-input
+ * format (protect, delete, move, etc), and the just-do-something format (watch, rollback,
+ * patrol, etc). The FormAction and FormlessAction classes respresent these two groups.
+ */
abstract class Action {
/**
* Page on which we're performing the action
- * @var Page
+ * @var Page $page
*/
protected $page;
/**
* IContextSource if specified; otherwise we'll use the Context from the Page
- * @var IContextSource
+ * @var IContextSource $context
*/
protected $context;
/**
* The fields used to create the HTMLForm
- * @var Array
+ * @var Array $fields
*/
protected $fields;
public abstract function execute();
}
+/**
+ * An action which shows a form and does something based on the input from the form
+ */
abstract class FormAction extends Action {
/**
/**
* @see Action::execute()
* @throws ErrorPageError
- * @param array|null $data
- * @param bool $captureErrors
+ * @param $data array|null
+ * @param $captureErrors bool
* @return bool
*/
public function execute( array $data = null, $captureErrors = true ) {
}
/**
- * Actions generally fall into two groups: the show-a-form-then-do-something-with-the-input
- * format (protect, delete, move, etc), and the just-do-something format (watch, rollback,
- * patrol, etc).
+ * An action which just does something, without showing a form first.
*/
abstract class FormlessAction extends Action {
return false;
}
+ /**
+ * @param $data Array
+ * @return bool
+ */
public function onSubmit( $data ) {
return false;
}
+ /**
+ * @return bool
+ */
public function onSuccess() {
return false;
}
<?php
/**
- * @defgroup Ajax Ajax
+ * Handle ajax requests and send them to the proper handler.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Ajax
- * Handle ajax requests and send them to the proper handler.
+ */
+
+/**
+ * @defgroup Ajax Ajax
*/
/**
* @ingroup Ajax
*/
class AjaxDispatcher {
- /** The way the request was made, either a 'get' or a 'post' */
+ /**
+ * The way the request was made, either a 'get' or a 'post'
+ * @var string $mode
+ */
private $mode;
- /** Name of the requested handler */
+ /**
+ * Name of the requested handler
+ * @var string $func_name
+ */
private $func_name;
- /** Arguments passed */
+ /** Arguments passed
+ * @var array $args
+ */
private $args;
- /** Load up our object with user supplied data */
+ /**
+ * Load up our object with user supplied data
+ */
function __construct() {
wfProfileIn( __METHOD__ );
wfProfileOut( __METHOD__ );
}
- /** Pass the request to our internal function.
+ /**
+ * Pass the request to our internal function.
* BEWARE! Data are passed as they have been supplied by the user,
* they should be carefully handled in the function processing the
* request.
<?php
/**
- * Response handler for Ajax requests
+ * Response handler for Ajax requests.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Ajax
* @ingroup Ajax
*/
class AjaxResponse {
- /** Number of seconds to get the response cached by a proxy */
+
+ /**
+ * Number of seconds to get the response cached by a proxy
+ * @var int $mCacheDuration
+ */
private $mCacheDuration;
- /** HTTP header Content-Type */
+ /**
+ * HTTP header Content-Type
+ * @var string $mContentType
+ */
private $mContentType;
- /** Disables output. Can be set by calling $AjaxResponse->disable() */
+ /**
+ * Disables output. Can be set by calling $AjaxResponse->disable()
+ * @var bool $mDisabled
+ */
private $mDisabled;
- /** Date for the HTTP header Last-modified */
+ /**
+ * Date for the HTTP header Last-modified
+ * @var string|false $mLastModified
+ */
private $mLastModified;
- /** HTTP response code */
+ /**
+ * HTTP response code
+ * @var string $mResponseCode
+ */
private $mResponseCode;
- /** HTTP Vary header */
+ /**
+ * HTTP Vary header
+ * @var string $mVary
+ */
private $mVary;
- /** Content of our HTTP response */
+ /**
+ * Content of our HTTP response
+ * @var string $mText
+ */
private $mText;
/**
}
}
+ /**
+ * Set the number of seconds to get the response cached by a proxy
+ * @param $duration int
+ */
function setCacheDuration( $duration ) {
$this->mCacheDuration = $duration;
}
+ /**
+ * Set the HTTP Vary header
+ * @param $vary string
+ */
function setVary( $vary ) {
$this->mVary = $vary;
}
+ /**
+ * Set the HTTP response code
+ * @param $code string
+ */
function setResponseCode( $code ) {
$this->mResponseCode = $code;
}
+ /**
+ * Set the HTTP header Content-Type
+ * @param $type string
+ */
function setContentType( $type ) {
$this->mContentType = $type;
}
+ /**
+ * Disable output.
+ */
function disable() {
$this->mDisabled = true;
}
}
/**
- * @param $mckey
- * @param $touched
+ * @param $mckey string
+ * @param $touched int
* @return bool
*/
function loadFromMemcached( $mckey, $touched ) {
}
/**
- * @param $mckey
+ * @param $mckey string
* @param $expiry int
* @return bool
*/
<?php
/**
- * File for articles
+ * User interface for page actions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
*
* This maintains WikiPage functions for backwards compatibility.
*
- * @TODO: move and rewrite code to an Action class
+ * @todo move and rewrite code to an Action class
*
* See design.txt for an overview.
* Note: edit user interface and cache support functions have been
*/
/**
- * @var IContextSource
+ * The context this Article is executed in
+ * @var IContextSource $mContext
*/
protected $mContext;
/**
- * @var WikiPage
+ * The WikiPage object of this instance
+ * @var WikiPage $mPage
*/
protected $mPage;
/**
- * @var ParserOptions: ParserOptions object for $wgUser articles
+ * ParserOptions object for $wgUser articles
+ * @var ParserOptions $mParserOptions
*/
public $mParserOptions;
+ /**
+ * Content of the revision we are working on
+ * @var string $mContent
+ */
var $mContent; // !<
+
+ /**
+ * Is the content ($mContent) already loaded?
+ * @var bool $mContentLoaded
+ */
var $mContentLoaded = false; // !<
+
+ /**
+ * The oldid of the article that is to be shown, 0 for the
+ * current revision
+ * @var int|null $mOldId
+ */
var $mOldId; // !<
/**
- * @var Title
+ * Title from which we were redirected here
+ * @var Title $mRedirectedFrom
*/
var $mRedirectedFrom = null;
/**
- * @var mixed: boolean false or URL string
+ * URL to redirect to or false if none
+ * @var string|false $mRedirectUrl
*/
var $mRedirectUrl = false; // !<
+
+ /**
+ * Revision ID of revision we are working on
+ * @var int $mRevIdFetched
+ */
var $mRevIdFetched = 0; // !<
/**
- * @var Revision
+ * Revision we are working on
+ * @var Revision $mRevision
*/
var $mRevision = null;
/**
- * @var ParserOutput
+ * ParserOutput object
+ * @var ParserOutput $mParserOutput
*/
var $mParserOutput;
* merging of several policies using array_merge().
* @param $policy Mixed, returns empty array on null/false/'', transparent
* to already-converted arrays, converts String.
- * @return Array: 'index' => <indexpolicy>, 'follow' => <followpolicy>
+ * @return Array: 'index' => \<indexpolicy\>, 'follow' => \<followpolicy\>
*/
public static function formatRobotPolicy( $policy ) {
if ( is_array( $policy ) ) {
/**
* Handle action=purge
* @deprecated since 1.19
+ * @return Action|bool|null false if the action is disabled, null if it is not recognised
*/
public function purge() {
return Action::factory( 'purge', $this )->show();
/**
* If you want to munge the case of an account name before the final
* check, now is your chance.
+ * @param $username string
+ * @return string
*/
public function getCanonicalName( $username ) {
return $username;
/**
* This defines autoloading handler for whole MediaWiki framework
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
'DerivativeRequest' => 'includes/WebRequest.php',
'DeviceDetection' => 'includes/DeviceDetection.php',
+ 'DeviceProperties' => 'includes/DeviceDetection.php',
'DiffHistoryBlob' => 'includes/HistoryBlob.php',
-
'DoubleReplacer' => 'includes/StringUtils.php',
'DummyLinker' => 'includes/Linker.php',
'Dump7ZipOutput' => 'includes/Export.php',
'HttpRequest' => 'includes/HttpFunctions.old.php',
'ICacheHelper' => 'includes/CacheHelper.php',
'IcuCollation' => 'includes/Collation.php',
+ 'IDeviceProperties' => 'includes/DeviceDetection.php',
+ 'IDeviceDetector' => 'includes/DeviceDetection.php',
'IdentityCollation' => 'includes/Collation.php',
'ImageGallery' => 'includes/ImageGallery.php',
'ImageHistoryList' => 'includes/ImagePage.php',
'Linker' => 'includes/Linker.php',
'LinkFilter' => 'includes/LinkFilter.php',
'LinksUpdate' => 'includes/LinksUpdate.php',
+ 'LinksDeletionUpdate' => 'includes/LinksUpdate.php',
'LocalisationCache' => 'includes/LocalisationCache.php',
'LocalisationCache_BulkLoad' => 'includes/LocalisationCache.php',
'MagicWord' => 'includes/MagicWord.php',
'RevisionList' => 'includes/RevisionList.php',
'RSSFeed' => 'includes/Feed.php',
'Sanitizer' => 'includes/Sanitizer.php',
+ 'DataUpdate' => 'includes/DataUpdate.php',
+ 'SqlDataUpdate' => 'includes/SqlDataUpdate.php',
'ScopedPHPTimeout' => 'includes/ScopedPHPTimeout.php',
'SiteConfiguration' => 'includes/SiteConfiguration.php',
'SiteStats' => 'includes/SiteStats.php',
'HashBagOStuff' => 'includes/objectcache/HashBagOStuff.php',
'MediaWikiBagOStuff' => 'includes/objectcache/SqlBagOStuff.php',
'MemCachedClientforWiki' => 'includes/objectcache/MemcachedClient.php',
+ 'MemcachedBagOStuff' => 'includes/objectcache/MemcachedBagOStuff.php',
+ 'MemcachedPeclBagOStuff' => 'includes/objectcache/MemcachedPeclBagOStuff.php',
'MemcachedPhpBagOStuff' => 'includes/objectcache/MemcachedPhpBagOStuff.php',
'MultiWriteBagOStuff' => 'includes/objectcache/MultiWriteBagOStuff.php',
'MWMemcached' => 'includes/objectcache/MemcachedClient.php',
static function autoload( $className ) {
global $wgAutoloadClasses, $wgAutoloadLocalClasses;
+ // Workaround for PHP bug <https://bugs.php.net/bug.php?id=49143> (5.3.2. is broken, it's fixed in 5.3.6).
+ // Strip leading backslashes from class names. When namespaces are used, leading backslashes are used to indicate
+ // the top-level namespace, e.g. \foo\Bar. When used like this in the code, the leading backslash isn't passed to
+ // the auto-loader ($className would be 'foo\Bar'). However, if a class is accessed using a string instead of a
+ // class literal (e.g. $class = '\foo\Bar'; new $class()), then some versions of PHP do not strip the leading
+ // backlash in this case, causing autoloading to fail.
+ $className = ltrim( $className, '\\' );
+
if ( isset( $wgAutoloadLocalClasses[$className] ) ) {
$filename = $wgAutoloadLocalClasses[$className];
} elseif ( isset( $wgAutoloadClasses[$className] ) ) {
* Sanitizer that have define()s outside of their class definition. Of course
* this wouldn't be necessary if everything in MediaWiki was class-based. Sigh.
*
+ * @param $class string
* @return Boolean Return the results of class_exists() so we know if we were successful
*/
static function loadClass( $class ) {
<?php
+/**
+ * Automatic user rights promotion based on conditions specified
+ * in $wgAutopromote.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
/**
* This class checks if user can get extra rights
* because of conditions specified in $wgAutopromote
*/
-
class Autopromote {
/**
* Get the groups for the given user based on $wgAutopromote.
<?php
/**
- * File for BacklinkCache class
+ * Class for fetching backlink lists, approximate backlink counts and
+ * partitions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
+ * @author Tim Starling
+ * @copyright © 2009, Tim Starling, Domas Mituzas
+ * @copyright © 2010, Max Sem
+ * @copyright © 2011, Antoine Musso
*/
/**
* Introduced by r47317
*
* @internal documentation reviewed on 18 Mar 2011 by hashar
- *
- * @author Tim Starling
- * @copyright © 2009, Tim Starling, Domas Mituzas
- * @copyright © 2010, Max Sem
- * @copyright © 2011, Antoine Musso
*/
class BacklinkCache {
<?php
-
/**
- * Interface for all classes implementing CacheHelper functionality.
+ * Cache of various elements in a single cache entry.
*
- * @since 1.20
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
* @licence GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
+
+/**
+ * Interface for all classes implementing CacheHelper functionality.
+ *
+ * @since 1.20
+ */
interface ICacheHelper {
/**
* After adding the last HTML that should be cached, call $this->saveCache();
*
* @since 1.20
- *
- * @file CacheHelper.php
- *
- * @licence GNU GPL v2 or later
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class CacheHelper implements ICacheHelper {
$this->onInitHandler = $handlerFunction;
}
-}
\ No newline at end of file
+}
<?php
+/**
+ * Representation for a category.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Simetrical
+ */
+
/**
* Category objects are immutable, strictly speaking. If you call methods that change the database,
* like to refresh link counts, the objects will be appropriately reinitialized.
* Member variables are lazy-initialized.
*
* TODO: Move some stuff from CategoryPage.php to here, and use that.
- *
- * @author Simetrical
*/
-
class Category {
/** Name of the category, normalized to DB-key form */
private $mName = null;
<?php
/**
- * Class for viewing MediaWiki category description pages.
+ * Special handling for category description pages.
* Modelled after ImagePage.php.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
-if ( !defined( 'MEDIAWIKI' ) )
- die( 1 );
-
/**
* Special handling for category description pages, showing pages,
* subcategories and file that belong to the category
<?php
-
-if ( !defined( 'MEDIAWIKI' ) )
- die( 1 );
+/**
+ * List and paging of category members.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
class CategoryViewer extends ContextSource {
var $limit, $from, $until,
<?php
+/**
+ * Recent changes filtering by category.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
/**
* The "Categoryfinder" class takes a list of articles, creates an internal
* representation of all their parent categories (as well as parents of
<?php
/**
- * Native CDB file reader and writer
+ * Native CDB file reader and writer.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
* * Exception thrown if sizes or offsets are between 2GB and 4GB
* * Some variables renamed
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
<?php
/**
- * Functions related to change tags.
+ * Recent changes tagging.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
+
class ChangeTags {
/**
<?php
+/**
+ * Feed for list of changes.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
/**
* Feed to Special:RecentChanges and Special:RecentChangesLiked
<?php
/**
- * Classes to show various lists of changes:
+ * Classes to show lists of changes.
+ *
+ * These can be:
* - watchlist
* - related changes
* - recent changes
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
<?php
+/**
+ * Database row sorting.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
abstract class Collation {
static $instance;
<?php
+/**
+ * Configuration file editor.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
/**
* This is a state machine style parser with two internal stacks:
<?php
/**
- * @defgroup HTTP HTTP
+ * Cookie for HTTP requests.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup HTTP
*/
class Cookie {
* This is based in part on Drupal code as well as what we used in our own code
* prior to introduction of this class.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @author Daniel Friesen
* @file
*/
--- /dev/null
+<?php
+/**
+ * Base code for update jobs that do something with some secondary
+ * data extracted from article.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Abstract base class for update jobs that do something with some secondary
+ * data extracted from article.
+ */
+abstract class DataUpdate implements DeferrableUpdate {
+
+ /**
+ * Constructor
+ */
+ public function __construct( ) {
+ # noop
+ }
+
+ /**
+ * Begin an appropriate transaction, if any.
+ * This default implementation does nothing.
+ */
+ public function beginTransaction() {
+ //noop
+ }
+
+ /**
+ * Commit the transaction started via beginTransaction, if any.
+ * This default implementation does nothing.
+ */
+ public function commitTransaction() {
+ //noop
+ }
+
+ /**
+ * Abort / roll back the transaction started via beginTransaction, if any.
+ * This default implementation does nothing.
+ */
+ public function rollbackTransaction() {
+ //noop
+ }
+
+ /**
+ * Convenience method, calls doUpdate() on every DataUpdate in the array.
+ *
+ * This methods supports transactions logic by first calling beginTransaction()
+ * on all updates in the array, then calling doUpdate() on each, and, if all goes well,
+ * then calling commitTransaction() on each update. If an error occurrs,
+ * rollbackTransaction() will be called on any update object that had beginTranscation()
+ * called but not yet commitTransaction().
+ *
+ * This allows for limited transactional logic across multiple backends for storing
+ * secondary data.
+ *
+ * @static
+ * @param $updates array a list of DataUpdate instances
+ */
+ public static function runUpdates( $updates ) {
+ if ( empty( $updates ) ) return; # nothing to do
+
+ $open_transactions = array();
+ $exception = null;
+
+ /**
+ * @var $update StorageUpdate
+ * @var $trans StorageUpdate
+ */
+
+ try {
+ // begin transactions
+ foreach ( $updates as $update ) {
+ $update->beginTransaction();
+ $open_transactions[] = $update;
+ }
+
+ // do work
+ foreach ( $updates as $update ) {
+ $update->doUpdate();
+ }
+
+ // commit transactions
+ while ( count( $open_transactions ) > 0 ) {
+ $trans = array_pop( $open_transactions );
+ $trans->commitTransaction();
+ }
+ } catch ( Exception $ex ) {
+ $exception = $ex;
+ wfDebug( "Caught exception, will rethrow after rollback: " . $ex->getMessage() );
+ }
+
+ // rollback remaining transactions
+ while ( count( $open_transactions ) > 0 ) {
+ $trans = array_pop( $open_transactions );
+ $trans->rollbackTransaction();
+ }
+
+ if ( $exception ) {
+ throw $exception; // rethrow after cleanup
+ }
+ }
+
+}
<?php
/**
- * @file
+ * Default values for configuration settings.
+ *
*
* NEVER EDIT THIS FILE
*
*
* Documentation is in the source and on:
* http://www.mediawiki.org/wiki/Manual:Configuration_settings
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
*/
/**
* - zones Associative array of zone names that each map to an array with:
* container : backend container name the zone is in
* directory : root path within container for the zone
- * Zones default to using <repo name>-<zone> as the
- * container name and the container root as the zone directory.
- * - url Base public URL
+ * url : base URL to the root of the zone
+ * Zones default to using <repo name>-<zone name> as the container name
+ * and default to using the container root as the zone's root directory.
+ * Nesting of zone locations within other zones should be avoided.
+ * - url Public zone URL. The 'zones' settings take precedence.
* - hashLevels The number of directory levels for hash-based division of files
* - thumbScriptUrl The URL for thumb.php (optional, not recommended)
* - transformVia404 Whether to skip media file transformation on parse and rely on a 404
* - DBO_TRX -- wrap entire request in a transaction
* - DBO_IGNORE -- ignore errors (not useful in LocalSettings.php)
* - DBO_NOBUFFER -- turn off buffering (not useful in LocalSettings.php)
+ * - DBO_PERSISTENT -- enables persistent database connections
*
* - max lag: (optional) Maximum replication lag before a slave will taken out of rotation
* - max threads: (optional) Maximum number of running threads
'xcache' => array( 'class' => 'XCacheBagOStuff' ),
'wincache' => array( 'class' => 'WinCacheBagOStuff' ),
'memcached-php' => array( 'class' => 'MemcachedPhpBagOStuff' ),
+ 'memcached-pecl' => array( 'class' => 'MemcachedPeclBagOStuff' ),
'hash' => array( 'class' => 'HashBagOStuff' ),
);
/** @} */ # End of HipHop compilation }
+/************************************************************************//**
+ * @name Mobile support
+ * @{
+ */
+
+/**
+ * Name of the class used for mobile device detection, must be inherited from
+ * IDeviceDetector.
+ */
+$wgDeviceDetectionClass = 'DeviceDetection';
+
+/** @} */ # End of Mobile support }
+
/************************************************************************//**
* @name Miscellaneous
* @{
<?php
+/**
+ * Interface and manager for deferred updates.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
/**
* Interface that deferrable updates should implement. Basically required so we
* can validate input on DeferredUpdates::addUpdate()
* since this file will not be executed during request startup for a compiled
* MediaWiki.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
<?php
+/**
+ * Delayed loading of deprecated global objects.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
/**
* Class to allow throwing wfDeprecated warnings
* when people use globals that we do not want them to.
<?php
/**
- * Device detection class
+ * Mobile device detection code
*
* Copyright © 2011 Patrick Reilly
* http://www.mediawiki.org/
* @file
*/
+/**
+ * Base for classes describing devices and their capabilities
+ * @since 1.20
+ */
+interface IDeviceProperties {
+ /**
+ * @return string: 'html' or 'wml'
+ */
+ function format();
+
+ /**
+ * @return bool
+ */
+ function supportsJavaScript();
+
+ /**
+ * @return bool
+ */
+ function supportsJQuery();
+
+ /**
+ * @return bool
+ */
+ function disableZoom();
+}
+
+/**
+ * @since 1.20
+ */
+interface IDeviceDetector {
+ /**
+ * @param $userAgent
+ * @param string $acceptHeader
+ * @return IDeviceProperties
+ */
+ function detectDeviceProperties( $userAgent, $acceptHeader = '' );
+
+ /**
+ * @param $deviceName
+ * @return IDeviceProperties
+ */
+ function getDeviceProperties( $deviceName );
+
+ /**
+ * @param $userAgent string
+ * @param $acceptHeader string
+ * @return string
+ */
+ function detectDeviceName( $userAgent, $acceptHeader = '' );
+}
+
+/**
+ * MediaWiki's default IDeviceProperties implementation
+ */
+final class DeviceProperties implements IDeviceProperties {
+ private $device;
+
+ public function __construct( array $deviceCapabilities ) {
+ $this->device = $deviceCapabilities;
+ }
+
+ /**
+ * @return string
+ */
+ function format() {
+ return $this->device['view_format'];
+ }
+
+ /**
+ * @return bool
+ */
+ function supportsJavaScript() {
+ return $this->device['supports_javascript'];
+ }
+
+ /**
+ * @return bool
+ */
+ function supportsJQuery() {
+ return $this->device['supports_jquery'];
+ }
+
+ /**
+ * @return bool
+ */
+ function disableZoom() {
+ return $this->device['disable_zoom'];
+ }
+}
+
/**
* Provides abstraction for a device.
* A device can select which format a request should receive and
* may be extended to provide access to particular device functionality.
* @since 1.20
*/
-class DeviceDetection {
+class DeviceDetection implements IDeviceDetector {
- /**
- * @return array
- */
- public function getAvailableFormats() {
- $formats = array (
+ private static $formats = array (
'html' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'default',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'capable' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'default',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'webkit' => array (
'view_format' => 'html',
- 'search_bar' => 'webkit',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'webkit',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => false,
- 'parser' => 'html',
- 'disable_links' => true,
),
'ie' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'default',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => false,
- 'parser' => 'html',
- 'disable_links' => true,
),
'android' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'android',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => false,
- 'parser' => 'html',
- 'disable_links' => true,
),
'iphone' => array (
'view_format' => 'html',
- 'search_bar' => 'webkit',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'iphone',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => false,
- 'parser' => 'html',
- 'disable_links' => true,
),
'iphone2' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'iphone2',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'native_iphone' => array (
'view_format' => 'html',
- 'search_bar' => false,
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'default',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => false,
- 'parser' => 'html',
- 'disable_links' => false,
),
'palm_pre' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'palm_pre',
'supports_javascript' => true,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'kindle' => array (
'view_format' => 'html',
- 'search_bar' => 'kindle',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'kindle',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'kindle2' => array (
'view_format' => 'html',
- 'search_bar' => 'kindle',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'kindle',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'blackberry' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'blackberry',
'supports_javascript' => true,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'blackberry-lt5' => array (
'view_format' => 'html',
- 'search_bar' => 'default',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'blackberry',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'netfront' => array (
'view_format' => 'html',
- 'search_bar' => 'simple',
- 'footmenu' => 'simple',
- 'with_layout' => 'application',
'css_file_name' => 'simple',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'wap2' => array (
'view_format' => 'html',
- 'search_bar' => 'simple',
- 'footmenu' => 'simple',
- 'with_layout' => 'application',
'css_file_name' => 'simple',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'psp' => array (
'view_format' => 'html',
- 'search_bar' => 'simple',
- 'footmenu' => 'simple',
- 'with_layout' => 'application',
'css_file_name' => 'psp',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'ps3' => array (
'view_format' => 'html',
- 'search_bar' => 'simple',
- 'footmenu' => 'simple',
- 'with_layout' => 'application',
'css_file_name' => 'simple',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'wii' => array (
'view_format' => 'html',
- 'search_bar' => 'wii',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'wii',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'operamini' => array (
'view_format' => 'html',
- 'search_bar' => 'simple',
- 'footmenu' => 'simple',
- 'with_layout' => 'application',
'css_file_name' => 'operamini',
'supports_javascript' => false,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'operamobile' => array (
'view_format' => 'html',
- 'search_bar' => 'simple',
- 'footmenu' => 'simple',
- 'with_layout' => 'application',
'css_file_name' => 'operamobile',
'supports_javascript' => true,
'supports_jquery' => true,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'nokia' => array (
'view_format' => 'html',
- 'search_bar' => 'webkit',
- 'footmenu' => 'default',
- 'with_layout' => 'application',
'css_file_name' => 'nokia',
'supports_javascript' => true,
'supports_jquery' => false,
'disable_zoom' => true,
- 'parser' => 'html',
- 'disable_links' => true,
),
'wml' => array (
'view_format' => 'wml',
- 'search_bar' => 'wml',
+ 'css_file_name' => null,
'supports_javascript' => false,
'supports_jquery' => false,
- 'parser' => 'wml',
+ 'disable_zoom' => true,
),
);
- return $formats;
+
+ /**
+ * Returns an instance of detection class, overridable by extensions
+ * @return IDeviceDetector
+ */
+ public static function factory() {
+ global $wgDeviceDetectionClass;
+
+ static $instance = null;
+ if ( !$instance ) {
+ $instance = new $wgDeviceDetectionClass();
+ }
+ return $instance;
}
/**
+ * @deprecated: Deprecated, will be removed once detectDeviceProperties() will be deployed everywhere on WMF
* @param $userAgent
* @param string $acceptHeader
* @return array
}
/**
+ * @param $userAgent
+ * @param string $acceptHeader
+ * @return IDeviceProperties
+ */
+ public function detectDeviceProperties( $userAgent, $acceptHeader = '' ) {
+ $deviceName = $this->detectDeviceName( $userAgent, $acceptHeader );
+ return $this->getDeviceProperties( $deviceName );
+ }
+
+ /**
+ * @deprecated: Deprecated, will be removed once detectDeviceProperties() will be deployed everywhere on WMF
* @param $formatName
* @return array
*/
public function getDevice( $formatName ) {
- $format = $this->getAvailableFormats();
- return ( isset( $format[$formatName] ) ) ? $format[$formatName] : array();
+ return ( isset( self::$formats[$formatName] ) ) ? self::$formats[$formatName] : array();
+ }
+
+ /**
+ * @param $deviceName
+ * @return IDeviceProperties
+ */
+ public function getDeviceProperties( $deviceName ) {
+ if ( isset( self::$formats[$deviceName] ) ) {
+ return new DeviceProperties( self::$formats[$deviceName] );
+ } else {
+ return new DeviceProperties( array(
+ 'view_format' => 'html',
+ 'css_file_name' => 'default',
+ 'supports_javascript' => true,
+ 'supports_jquery' => true,
+ 'disable_zoom' => true,
+ ) );
+ }
}
/**
+ * @deprecated: Renamed to detectDeviceName()
* @param $userAgent string
* @param $acceptHeader string
* @return string
*/
public function detectFormatName( $userAgent, $acceptHeader = '' ) {
- $formatName = '';
+ return $this->detectDeviceName( $userAgent, $acceptHeader );
+ }
+ /**
+ * @param $userAgent string
+ * @param $acceptHeader string
+ * @return string
+ */
+ public function detectDeviceName( $userAgent, $acceptHeader = '' ) {
+ wfProfileIn( __METHOD__ );
+
+ $deviceName = '';
if ( preg_match( '/Android/', $userAgent ) ) {
- $formatName = 'android';
+ $deviceName = 'android';
if ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
- $formatName = 'operamini';
+ $deviceName = 'operamini';
}
} else if ( preg_match( '/MSIE 9.0/', $userAgent ) ||
preg_match( '/MSIE 8.0/', $userAgent ) ) {
- $formatName = 'ie';
+ $deviceName = 'ie';
} else if( preg_match( '/MSIE/', $userAgent ) ) {
- $formatName = 'html';
+ $deviceName = 'html';
} else if ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
- $formatName = 'operamobile';
+ $deviceName = 'operamobile';
} elseif ( preg_match( '/iPad.* Safari/', $userAgent ) ) {
- $formatName = 'iphone';
+ $deviceName = 'iphone';
} elseif ( preg_match( '/iPhone.* Safari/', $userAgent ) ) {
if ( strpos( $userAgent, 'iPhone OS 2' ) !== false ) {
- $formatName = 'iphone2';
+ $deviceName = 'iphone2';
} else {
- $formatName = 'iphone';
+ $deviceName = 'iphone';
}
} elseif ( preg_match( '/iPhone/', $userAgent ) ) {
if ( strpos( $userAgent, 'Opera' ) !== false ) {
- $formatName = 'operamini';
+ $deviceName = 'operamini';
} else {
- $formatName = 'native_iphone';
+ $deviceName = 'native_iphone';
}
} elseif ( preg_match( '/WebKit/', $userAgent ) ) {
if ( preg_match( '/Series60/', $userAgent ) ) {
- $formatName = 'nokia';
+ $deviceName = 'nokia';
} elseif ( preg_match( '/webOS/', $userAgent ) ) {
- $formatName = 'palm_pre';
+ $deviceName = 'palm_pre';
} else {
- $formatName = 'webkit';
+ $deviceName = 'webkit';
}
} elseif ( preg_match( '/Opera/', $userAgent ) ) {
if ( strpos( $userAgent, 'Nintendo Wii' ) !== false ) {
- $formatName = 'wii';
+ $deviceName = 'wii';
} elseif ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
- $formatName = 'operamini';
+ $deviceName = 'operamini';
} elseif ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
- $formatName = 'iphone';
+ $deviceName = 'iphone';
} else {
- $formatName = 'webkit';
+ $deviceName = 'webkit';
}
} elseif ( preg_match( '/Kindle\/1.0/', $userAgent ) ) {
- $formatName = 'kindle';
+ $deviceName = 'kindle';
} elseif ( preg_match( '/Kindle\/2.0/', $userAgent ) ) {
- $formatName = 'kindle2';
+ $deviceName = 'kindle2';
} elseif ( preg_match( '/Firefox/', $userAgent ) ) {
- $formatName = 'capable';
+ $deviceName = 'capable';
} elseif ( preg_match( '/NetFront/', $userAgent ) ) {
- $formatName = 'netfront';
+ $deviceName = 'netfront';
} elseif ( preg_match( '/SEMC-Browser/', $userAgent ) ) {
- $formatName = 'wap2';
+ $deviceName = 'wap2';
} elseif ( preg_match( '/Series60/', $userAgent ) ) {
- $formatName = 'wap2';
+ $deviceName = 'wap2';
} elseif ( preg_match( '/PlayStation Portable/', $userAgent ) ) {
- $formatName = 'psp';
+ $deviceName = 'psp';
} elseif ( preg_match( '/PLAYSTATION 3/', $userAgent ) ) {
- $formatName = 'ps3';
+ $deviceName = 'ps3';
} elseif ( preg_match( '/SAMSUNG/', $userAgent ) ) {
- $formatName = 'capable';
+ $deviceName = 'capable';
} elseif ( preg_match( '/BlackBerry/', $userAgent ) ) {
if( preg_match( '/BlackBerry[^\/]*\/[1-4]\./', $userAgent ) ) {
- $formatName = 'blackberry-lt5';
+ $deviceName = 'blackberry-lt5';
} else {
- $formatName = 'blackberry';
+ $deviceName = 'blackberry';
}
}
- if ( $formatName === '' ) {
+ if ( $deviceName === '' ) {
if ( strpos( $acceptHeader, 'application/vnd.wap.xhtml+xml' ) !== false ) {
// Should be wap2
- $formatName = 'html';
+ $deviceName = 'html';
} elseif ( strpos( $acceptHeader, 'vnd.wap.wml' ) !== false ) {
- $formatName = 'wml';
+ $deviceName = 'wml';
} else {
- $formatName = 'html';
+ $deviceName = 'html';
}
}
- return $formatName;
+ wfProfileOut( __METHOD__ );
+ return $deviceName;
}
/**
* @return array: List of all device-specific stylesheets
*/
public function getCssFiles() {
- $devices = $this->getAvailableFormats();
$files = array();
- foreach ( $devices as $dev ) {
+
+ foreach ( self::$formats as $dev ) {
if ( isset( $dev['css_file_name'] ) ) {
$files[] = $dev['css_file_name'];
}
<?php
/**
- * Contains the EditPage class
+ * Page edition user interface.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
$bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
$status = $this->internalAttemptSave( $resultDetails, $bot );
// FIXME: once the interface for internalAttemptSave() is made nicer, this should use the message in $status
-
if ( $status->value == self::AS_SUCCESS_UPDATE || $status->value == self::AS_SUCCESS_NEW_ARTICLE ) {
$this->didSave = true;
}
$permission = $this->mTitle->isTalkPage() ? 'createtalk' : 'createpage';
throw new PermissionsError( $permission );
+ default:
+ // We don't recognize $status->value. The only way that can happen
+ // is if an extension hook aborted from inside ArticleSave.
+ // Render the status object into $this->hookError
+ // FIXME this sucks, we should just use the Status object throughout
+ $this->hookError = '<div class="error">' . $status->getWikitext() .
+ '</div>';
+ return true;
}
return false;
}
wfProfileOut( __METHOD__ );
return $status;
} else {
- $this->isConflict = true;
- $doEditStatus->value = self::AS_END; // Destroys data doEdit() put in $status->value but who cares
+ // Failure from doEdit()
+ // Show the edit conflict page for certain recognized errors from doEdit(),
+ // but don't show it for errors from extension hooks
+ $errors = $doEditStatus->getErrorsArray();
+ if ( in_array( $errors[0][0], array( 'edit-gone-missing', 'edit-conflict',
+ 'edit-already-exists' ) ) )
+ {
+ $this->isConflict = true;
+ // Destroys data doEdit() put in $status->value but who cares
+ $doEditStatus->value = self::AS_END;
+ }
wfProfileOut( __METHOD__ );
return $doEditStatus;
}
<?php
/**
- * Exception class and handler
+ * Exception class and handler.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
$this->content = $content;
}
- public function reportHTML() {
+ public function report() {
$httpMessage = HttpStatus::getMessage( $this->httpCode );
header( "Status: {$this->httpCode} {$httpMessage}" );
} elseif ( $this->history & WikiExporter::RANGE ) {
# Dump of revisions within a specified range
$join['revision'] = array( 'INNER JOIN', 'page_id=rev_page' );
- $opts['ORDER BY'] = 'rev_page ASC, rev_id ASC';
+ $opts['ORDER BY'] = array( 'rev_page ASC', 'rev_id ASC' );
} else {
# Uknown history specification parameter?
wfProfileOut( __METHOD__ );
<?php
+/**
+ * Data storage in external repositories.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
/**
* @defgroup ExternalStorage ExternalStorage
*/
<?php
+/**
+ * External storage in SQL database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
/**
* DB accessable external objects
<?php
+/**
+ * External storage using HTTP requests.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
/**
* Example class for HTTP accessable external objects.
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
*/
/**
<?php
+/**
+ * Fake title class that triggers an error if any members are called.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
/**
* Fake title class that triggers an error if any members are called
function moveNoAuth( &$nt ) { $this->error(); }
function isValidMoveOperation( &$nt, $auth = true, $reason = '' ) { $this->error(); }
function moveTo( &$nt, $auth = true, $reason = '', $createRedirect = true ) { $this->error(); }
- function moveOverExistingRedirect( &$nt, $reason = '', $createRedirect = true ) { $this->error(); }
- function moveToNewTitle( &$nt, $reason = '', $createRedirect = true ) { $this->error(); }
function moveSubpages( $nt, $auth = true, $reason = '', $createRedirect = true ) { $this->error(); }
function isSingleRevRedirect() { $this->error(); }
function isValidMoveTarget( $nt ) { $this->error(); }
<?php
-
/**
+ * Fallback functions for PHP installed without mbstring support.
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
+ * @file
*/
/**
<?php
+/**
+ * Helper functions for feeds.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Feed
+ */
/**
* Helper functions for feeds
<?php
+/**
+ * File deletion user interface.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Rob Church <robchur@gmail.com>
+ * @ingroup Media
+ */
/**
* File deletion user interface
*
* @ingroup Media
- * @author Rob Church <robchur@gmail.com>
*/
class FileDeleteForm {
<?php
+/**
+ * Class for managing forking command line scripts.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
/**
* Class for managing forking command line scripts.
<?php
/**
* Helper class to keep track of options when mixing links and form elements.
- * @todo This badly need some examples and tests :-)
*
* Copyright © 2008, Niklas Laxstiröm
- *
* Copyright © 2011, Antoine Musso
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
* @author Niklas Laxström
* @author Antoine Musso
*/
+/**
+ * Helper class to keep track of options when mixing links and form elements.
+ *
+ * @todo This badly need some examples and tests :-)
+ */
class FormOptions implements ArrayAccess {
/** @name Type constants
* Used internally to map an option value to a WebRequest accessor
* of anyone working on large branches in git to setup config that show up only
* when specific branches are currently checked out.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
<?php
/**
- * Global functions used everywhere
+ * Global functions used everywhere.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
<?php
+/**
+ * HTML form generation and submission handling.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
/**
* Object handling generic submission, CSRF protection, layout and
* other logic for UI forms. in a reusable manner.
<?php
-
+/**
+ * Efficient concatenated text storage.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
/**
* Base class for general text storage via the "object" flag in old_flags, or
* two-part external storage URLs. Used for represent efficient concatenated
<?php
+/**
+ * Class alias kept for backward compatibility.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup HTTP
+ */
/**
* HttpRequest was renamed to MWHttpRequest in order
<?php
+/**
+ * Various HTTP related functions.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup HTTP
+ */
+
/**
* @defgroup HTTP HTTP
*/
$this->parseHeader();
$this->setStatus();
- if ( isset( $this->respHeaders['content-length'] ) ) {
- if ( strlen( $this->content ) < $this->getResponseHeader( 'content-length' ) ) {
- $this->status->fatal( 'http-truncated-body' );
- }
- }
-
return $this->status;
}
}
/**
- * Convert an IP into a nice standard form.
+ * Convert an IP into a verbose, uppercase, normalized form.
* IPv6 addresses in octet notation are expanded to 8 words.
* IPv4 addresses are just trimmed.
*
return $ip;
}
+ /**
+ * Prettify an IP for display to end users.
+ * This will make it more compact and lower-case.
+ *
+ * @param $ip string
+ * @return string
+ */
+ public static function prettifyIP( $ip ) {
+ $ip = self::sanitizeIP( $ip ); // normalize (removes '::')
+ if ( self::isIPv6( $ip ) ) {
+ // Split IP into an address and a CIDR
+ if ( strpos( $ip, '/' ) !== false ) {
+ list( $ip, $cidr ) = explode( '/', $ip, 2 );
+ } else {
+ list( $ip, $cidr ) = array( $ip, '' );
+ }
+ // Get the largest slice of words with multiple zeros
+ $offset = 0;
+ $longest = $longestPos = false;
+ while ( preg_match(
+ '!(?:^|:)0(?::0)+(?:$|:)!', $ip, $m, PREG_OFFSET_CAPTURE, $offset
+ ) ) {
+ list( $match, $pos ) = $m[0]; // full match
+ if ( strlen( $match ) > strlen( $longest ) ) {
+ $longest = $match;
+ $longestPos = $pos;
+ }
+ $offset += ( $pos + strlen( $match ) ); // advance
+ }
+ if ( $longest !== false ) {
+ // Replace this portion of the string with the '::' abbreviation
+ $ip = substr_replace( $ip, '::', $longestPos, strlen( $longest ) );
+ }
+ // Add any CIDR back on
+ if ( $cidr !== '' ) {
+ $ip = "{$ip}/{$cidr}";
+ }
+ // Convert to lower case to make it more readable
+ $ip = strtolower( $ip );
+ }
+ return $ip;
+ }
+
/**
* Given a host/port string, like one might find in the host part of a URL
* per RFC 2732, split the hostname part and the port part and return an
* @file
*/
-if ( ! defined( 'MEDIAWIKI' ) )
- die( 1 );
-
/**
* Image gallery
*
* Include body text only; none of the image extras
*/
public function render() {
- $this->getContext()->setArticleBodyOnly( true );
+ $this->getContext()->getOutput()->setArticleBodyOnly( true );
parent::view();
}
*
* @todo document (e.g. one-sentence top-level class description).
*/
-class LinksUpdate {
+class LinksUpdate extends SqlDataUpdate {
- /**@{{
- * @private
- */
- var $mId, //!< Page ID of the article linked from
+ // @todo: make members protected, but make sure extensions don't break
+
+ public $mId, //!< Page ID of the article linked from
$mTitle, //!< Title object of the article linked from
$mParserOutput, //!< Parser output
$mLinks, //!< Map of title strings to IDs for the links in the document
$mDb, //!< Database connection reference
$mOptions, //!< SELECT options to be used (array)
$mRecursive; //!< Whether to queue jobs for recursive updates
- /**@}}*/
/**
* Constructor
* @param $recursive Boolean: queue jobs for recursive updates?
*/
function __construct( $title, $parserOutput, $recursive = true ) {
- global $wgAntiLockFlags;
+ parent::__construct( );
- if ( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) {
- $this->mOptions = array();
- } else {
- $this->mOptions = array( 'FOR UPDATE' );
+ if ( !( $title instanceof Title ) ) {
+ throw new MWException( "The calling convention to LinksUpdate::LinksUpdate() has changed. " .
+ "Please see Article::editUpdates() for an invocation example.\n" );
}
- $this->mDb = wfGetDB( DB_MASTER );
- if ( !is_object( $title ) ) {
+ if ( !( $parserOutput instanceof ParserOutput ) ) {
throw new MWException( "The calling convention to LinksUpdate::__construct() has changed. " .
"Please see WikiPage::doEditUpdates() for an invocation example.\n" );
}
+
$this->mTitle = $title;
$this->mId = $title->getArticleID();
wfProfileOut( __METHOD__ );
}
- /**
- * Invalidate the cache of a list of pages from a single namespace
- *
- * @param $namespace Integer
- * @param $dbkeys Array
- */
- function invalidatePages( $namespace, $dbkeys ) {
- if ( !count( $dbkeys ) ) {
- return;
- }
-
- /**
- * Determine which pages need to be updated
- * This is necessary to prevent the job queue from smashing the DB with
- * large numbers of concurrent invalidations of the same page
- */
- $now = $this->mDb->timestamp();
- $ids = array();
- $res = $this->mDb->select( 'page', array( 'page_id' ),
- array(
- 'page_namespace' => $namespace,
- 'page_title IN (' . $this->mDb->makeList( $dbkeys ) . ')',
- 'page_touched < ' . $this->mDb->addQuotes( $now )
- ), __METHOD__
- );
- foreach ( $res as $row ) {
- $ids[] = $row->page_id;
- }
- if ( !count( $ids ) ) {
- return;
- }
-
- /**
- * Do the update
- * We still need the page_touched condition, in case the row has changed since
- * the non-locking select above.
- */
- $this->mDb->update( 'page', array( 'page_touched' => $now ),
- array(
- 'page_id IN (' . $this->mDb->makeList( $ids ) . ')',
- 'page_touched < ' . $this->mDb->addQuotes( $now )
- ), __METHOD__
- );
- }
-
/**
* @param $cats
*/
}
}
}
+
+/**
+ * Update object handling the cleanup of links tables after a page was deleted.
+ **/
+class LinksDeletionUpdate extends SqlDataUpdate {
+
+ protected $mPage; //!< WikiPage the wikipage that was deleted
+
+ /**
+ * Constructor
+ *
+ * @param $title Title of the page we're updating
+ * @param $parserOutput ParserOutput: output from a full parse of this page
+ * @param $recursive Boolean: queue jobs for recursive updates?
+ */
+ function __construct( WikiPage $page ) {
+ parent::__construct( );
+
+ $this->mPage = $page;
+ }
+
+ /**
+ * Do some database updates after deletion
+ */
+ public function doUpdate() {
+ $title = $this->mPage->getTitle();
+ $id = $this->mPage->getId();
+
+ # Delete restrictions for it
+ $this->mDb->delete( 'page_restrictions', array ( 'pr_page' => $id ), __METHOD__ );
+
+ # Fix category table counts
+ $cats = array();
+ $res = $this->mDb->select( 'categorylinks', 'cl_to', array( 'cl_from' => $id ), __METHOD__ );
+
+ foreach ( $res as $row ) {
+ $cats [] = $row->cl_to;
+ }
+
+ $this->mPage->updateCategoryCounts( array(), $cats );
+
+ # If using cascading deletes, we can skip some explicit deletes
+ if ( !$this->mDb->cascadingDeletes() ) {
+ $this->mDb->delete( 'revision', array( 'rev_page' => $id ), __METHOD__ );
+
+ # Delete outgoing links
+ $this->mDb->delete( 'pagelinks', array( 'pl_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'imagelinks', array( 'il_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'categorylinks', array( 'cl_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'templatelinks', array( 'tl_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'externallinks', array( 'el_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'langlinks', array( 'll_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'iwlinks', array( 'iwl_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ );
+ $this->mDb->delete( 'page_props', array( 'pp_page' => $id ), __METHOD__ );
+ }
+
+ # If using cleanup triggers, we can skip some manual deletes
+ if ( !$this->mDb->cleanupTriggers() ) {
+ # Clean up recentchanges entries...
+ $this->mDb->delete( 'recentchanges',
+ array( 'rc_type != ' . RC_LOG,
+ 'rc_namespace' => $title->getNamespace(),
+ 'rc_title' => $title->getDBkey() ),
+ __METHOD__ );
+ $this->mDb->delete( 'recentchanges',
+ array( 'rc_type != ' . RC_LOG, 'rc_cur_id' => $id ),
+ __METHOD__ );
+ }
+ }
+}
*/
public static function isMovable( $index ) {
global $wgAllowImageMoving;
- return !( $index < NS_MAIN || ( $index == NS_FILE && !$wgAllowImageMoving ) || $index == NS_CATEGORY );
+
+ $result = !( $index < NS_MAIN || ( $index == NS_FILE && !$wgAllowImageMoving ) || $index == NS_CATEGORY );
+
+ /**
+ * @since 1.20
+ */
+ wfRunHooks( 'NamespaceIsMovable', array( $index, &$result ) );
+
+ return $result;
}
/**
* @file
*/
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 1 );
-}
-
/**
* This class should be covered by a general architecture document which does
* not exist as of January 2011. This is one of the Core classes and should
return $cookies;
}
- /**
- * Return whether this page is not cacheable because "useskin" or "uselang"
- * URL parameters were passed.
- *
- * @return Boolean
- */
- function uncacheableBecauseRequestVars() {
- $request = $this->getRequest();
- return $request->getText( 'useskin', false ) === false
- && $request->getText( 'uselang', false ) === false;
- }
-
/**
* Check if the request has a cache-varying cookie header
* If it does, it's very important that we don't allow public caching
$response->header( $this->getXVO() );
}
- if( !$this->uncacheableBecauseRequestVars() && $this->mEnableClientCache ) {
+ if( $this->mEnableClientCache ) {
if(
$wgUseSquid && session_id() == '' && !$this->isPrintable() &&
$this->mSquidMaxage != 0 && !$this->haveCacheVaryCookies()
$join_conds = isset( $info['join_conds'] ) ? $info['join_conds'] : array();
$sortColumns = array_merge( array( $this->mIndexField ), $this->mExtraSortFields );
if ( $descending ) {
- $options['ORDER BY'] = implode( ',', $sortColumns );
+ $options['ORDER BY'] = $sortColumns;
$operator = '>';
} else {
$orderBy = array();
foreach ( $sortColumns as $col ) {
$orderBy[] = $col . ' DESC';
}
- $options['ORDER BY'] = implode( ',', $orderBy );
+ $options['ORDER BY'] = $orderBy;
$operator = '<';
}
if ( $offset != '' ) {
$options = isset( $query['options'] ) ? (array)$query['options'] : array();
$join_conds = isset( $query['join_conds'] ) ? (array)$query['join_conds'] : array();
if ( count( $order ) ) {
- $options['ORDER BY'] = implode( ', ', $order );
+ $options['ORDER BY'] = $order;
}
if ( $limit !== false ) {
$options['LIMIT'] = intval( $limit );
$updateddate = $lang->userDate( $ts, $user );
$updatedtime = $lang->userTime( $ts, $user );
$out->addMeta( 'Data-Cache-Time', $ts );
- $out->addInlineScript( "var dataCacheTime = '$ts';" );
+ $out->addJsConfigVars( 'dataCacheTime', $ts );
$out->addWikiMsg( 'perfcachedts', $updated, $updateddate, $updatedtime, $maxResults );
} else {
$out->addWikiMsg( 'perfcached', $maxResults );
# If updates on this page have been disabled, let the user know
# that the data set won't be refreshed for now
if ( is_array( $wgDisableQueryPageUpdate ) && in_array( $this->getName(), $wgDisableQueryPageUpdate ) ) {
- $out->addWikiMsg( 'querypage-no-updates' );
+ $out->wrapWikiMsg( "<div class=\"mw-querypage-no-updates\">\n$1\n</div>", 'querypage-no-updates' );
}
}
}
* @defgroup Skins Skins
*/
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 1 );
-}
-
/**
* The main skin class that provide methods and properties for all other skins.
* This base class is also the "Standard" skin.
* @file
*/
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 1 );
-}
-
class SkinLegacy extends SkinTemplate {
var $useHeadElement = true;
protected $mWatchLinkNum = 0; // Appended to end of watch link id's
* @file
*/
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 1 );
-}
-
/**
* Wrapper object for MediaWiki's localization functions,
* to be passed to the template engine.
--- /dev/null
+<?php
+/**
+ * Base code for update jobs that put some secondary data extracted
+ * from article content into the database.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Abstract base class for update jobs that put some secondary data extracted
+ * from article content into the database.
+ */
+abstract class SqlDataUpdate extends DataUpdate {
+
+ protected $mDb; //!< Database connection reference
+ protected $mOptions; //!< SELECT options to be used (array)
+
+ private $mHasTransaction; //!< bool whether a transaction is open on this object (internal use only!)
+
+ /**
+ * Constructor
+ **/
+ public function __construct( ) {
+ global $wgAntiLockFlags;
+
+ parent::__construct( );
+
+ if ( $wgAntiLockFlags & ALF_NO_LINK_LOCK ) {
+ $this->mOptions = array();
+ } else {
+ $this->mOptions = array( 'FOR UPDATE' );
+ }
+
+ // @todo: get connection only when it's needed? make sure that doesn't break anything, especially transactions!
+ $this->mDb = wfGetDB( DB_MASTER );
+ $this->mHasTransaction = false;
+ }
+
+ /**
+ * Begin a database transaction.
+ *
+ * Because nested transactions are not supportred by the Database class, this implementation
+ * checkes Database::trxLevel() and only opens a transaction if none is yet active.
+ */
+ public function beginTransaction() {
+ // NOTE: nested transactions are not supported, only start a transaction if none is open
+ if ( $this->mDb->trxLevel() === 0 ) {
+ $this->mDb->begin( get_class( $this ) . '::beginTransaction' );
+ $this->mHasTransaction = true;
+ }
+ }
+
+ /**
+ * Commit the database transaction started via beginTransaction (if any).
+ */
+ public function commitTransaction() {
+ if ( $this->mHasTransaction ) {
+ $this->mDb->commit( get_class( $this ) . '::commitTransaction' );
+ }
+ }
+
+ /**
+ * Abort the database transaction started via beginTransaction (if any).
+ */
+ public function abortTransaction() {
+ if ( $this->mHasTransaction ) {
+ $this->mDb->rollback( get_class( $this ) . '::abortTransaction' );
+ }
+ }
+
+ /**
+ * Invalidate the cache of a list of pages from a single namespace.
+ * This is intended for use by subclasses.
+ *
+ * @param $namespace Integer
+ * @param $dbkeys Array
+ */
+ protected function invalidatePages( $namespace, Array $dbkeys ) {
+ if ( !count( $dbkeys ) ) {
+ return;
+ }
+
+ /**
+ * Determine which pages need to be updated
+ * This is necessary to prevent the job queue from smashing the DB with
+ * large numbers of concurrent invalidations of the same page
+ */
+ $now = $this->mDb->timestamp();
+ $ids = array();
+ $res = $this->mDb->select( 'page', array( 'page_id' ),
+ array(
+ 'page_namespace' => $namespace,
+ 'page_title' => $dbkeys,
+ 'page_touched < ' . $this->mDb->addQuotes( $now )
+ ), __METHOD__
+ );
+ foreach ( $res as $row ) {
+ $ids[] = $row->page_id;
+ }
+ if ( !count( $ids ) ) {
+ return;
+ }
+
+ /**
+ * Do the update
+ * We still need the page_touched condition, in case the row has changed since
+ * the non-locking select above.
+ */
+ $this->mDb->update( 'page', array( 'page_touched' => $now ),
+ array(
+ 'page_id' => $ids,
+ 'page_touched < ' . $this->mDb->addQuotes( $now )
+ ), __METHOD__
+ );
+ }
+
+}
$this->mRestrictions['edit'] = explode( ',', trim( $temp[0] ) );
$this->mRestrictions['move'] = explode( ',', trim( $temp[0] ) );
} else {
- $this->mRestrictions[$temp[0]] = explode( ',', trim( $temp[1] ) );
+ $restriction = trim( $temp[1] );
+ if( $restriction != '' ) { //some old entries are empty
+ $this->mRestrictions[$temp[0]] = explode( ',', $restriction );
+ }
}
}
$protected = $this->isProtected();
// Do the actual move
- $err = $this->moveToInternal( $nt, $reason, $createRedirect );
- if ( is_array( $err ) ) {
- # @todo FIXME: What about the File we have already moved?
- $dbw->rollback( __METHOD__ );
- return $err;
- }
+ $this->moveToInternal( $nt, $reason, $createRedirect );
// Refresh the sortkey for this row. Be careful to avoid resetting
// cl_timestamp, which may disturb time-based lists on some sites.
* @param $reason String The reason for the move
* @param $createRedirect Bool Whether to leave a redirect at the old title. Ignored
* if the user doesn't have the suppressredirect right
+ * @throws MWException
*/
private function moveToInternal( &$nt, $reason = '', $createRedirect = true ) {
global $wgUser, $wgContLang;
# Proxy blocking
if ( !$block instanceof Block && $ip !== null && !$this->isAllowed( 'proxyunbannable' )
- && !in_array( $ip, $wgProxyWhitelist ) )
+ && !in_array( $ip, $wgProxyWhitelist ) )
{
# Local list
if ( self::isLocallyBlockedProxy( $ip ) ) {
$this->mTouched = self::newTouchedTimestamp();
$dbw = wfGetDB( DB_MASTER );
- $dbw->update( 'user',
- array( 'user_touched' => $dbw->timestamp( $this->mTouched ) ),
- array( 'user_id' => $this->mId ),
- __METHOD__ );
+
+ // Prevent contention slams by checking user_touched first
+ $now = $dbw->timestamp( $this->mTouched );
+ $needsPurge = $dbw->selectField( 'user', '1',
+ array( 'user_id' => $this->mId, 'user_touched < ' . $dbw->addQuotes( $now ) )
+ );
+ if ( $needsPurge ) {
+ $dbw->update( 'user',
+ array( 'user_touched' => $now ),
+ array( 'user_id' => $this->mId, 'user_touched < ' . $dbw->addQuotes( $now ) ),
+ __METHOD__
+ );
+ }
$this->clearSharedCache();
}
*/
public function getPageRenderingHash() {
wfDeprecated( __METHOD__, '1.17' );
-
+
global $wgUseDynamicDates, $wgRenderHashAppend, $wgLang, $wgContLang;
if( $this->mHash ){
return $this->mHash;
$parserCache->save( $editInfo->output, $this, $editInfo->popts );
}
- # Update the links tables
- $u = new LinksUpdate( $this->mTitle, $editInfo->output );
- $u->doUpdate();
+ # Update the links tables and other secondary data
+ $updates = $editInfo->output->getSecondaryDataUpdates( $this->mTitle );
+ DataUpdate::runUpdates( $updates );
wfRunHooks( 'ArticleEditUpdates', array( &$this, &$editInfo, $options['changed'] ) );
/**
* Do some database updates after deletion
*
- * @param $id Int: page_id value of the page being deleted
+ * @param $id Int: page_id value of the page being deleted (B/C, currently unused)
*/
public function doDeleteUpdates( $id ) {
+ # update site status
DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, - (int)$this->isCountable(), -1 ) );
- $dbw = wfGetDB( DB_MASTER );
-
- # Delete restrictions for it
- $dbw->delete( 'page_restrictions', array ( 'pr_page' => $id ), __METHOD__ );
-
- # Fix category table counts
- $cats = array();
- $res = $dbw->select( 'categorylinks', 'cl_to', array( 'cl_from' => $id ), __METHOD__ );
-
- foreach ( $res as $row ) {
- $cats [] = $row->cl_to;
- }
-
- $this->updateCategoryCounts( array(), $cats );
-
- # If using cascading deletes, we can skip some explicit deletes
- if ( !$dbw->cascadingDeletes() ) {
- $dbw->delete( 'revision', array( 'rev_page' => $id ), __METHOD__ );
-
- # Delete outgoing links
- $dbw->delete( 'pagelinks', array( 'pl_from' => $id ), __METHOD__ );
- $dbw->delete( 'imagelinks', array( 'il_from' => $id ), __METHOD__ );
- $dbw->delete( 'categorylinks', array( 'cl_from' => $id ), __METHOD__ );
- $dbw->delete( 'templatelinks', array( 'tl_from' => $id ), __METHOD__ );
- $dbw->delete( 'externallinks', array( 'el_from' => $id ), __METHOD__ );
- $dbw->delete( 'langlinks', array( 'll_from' => $id ), __METHOD__ );
- $dbw->delete( 'iwlinks', array( 'iwl_from' => $id ), __METHOD__ );
- $dbw->delete( 'redirect', array( 'rd_from' => $id ), __METHOD__ );
- $dbw->delete( 'page_props', array( 'pp_page' => $id ), __METHOD__ );
- }
-
- # If using cleanup triggers, we can skip some manual deletes
- if ( !$dbw->cleanupTriggers() ) {
- # Clean up recentchanges entries...
- $dbw->delete( 'recentchanges',
- array( 'rc_type != ' . RC_LOG,
- 'rc_namespace' => $this->mTitle->getNamespace(),
- 'rc_title' => $this->mTitle->getDBkey() ),
- __METHOD__ );
- $dbw->delete( 'recentchanges',
- array( 'rc_type != ' . RC_LOG, 'rc_cur_id' => $id ),
- __METHOD__ );
- }
+ # remove secondary indexes, etc
+ $updates = $this->getDeletionUpdates( );
+ DataUpdate::runUpdates( $updates );
# Clear caches
- self::onArticleDelete( $this->mTitle );
+ WikiPage::onArticleDelete( $this->mTitle );
# Reset this object
$this->clear();
if ( count( $templates_diff ) > 0 ) {
# Whee, link updates time.
+ # Note: we are only interested in links here. We don't need to get other DataUpdate items from the parser output.
$u = new LinksUpdate( $this->mTitle, $parserOutput, false );
$u->doUpdate();
}
global $wgUser;
return $this->isParserCacheUsed( ParserOptions::newFromUser( $wgUser ), $oldid );
}
+
+ public function getDeletionUpdates() {
+ $updates = array(
+ new LinksDeletionUpdate( $this ),
+ );
+
+ //@todo: make a hook to add update objects
+ //NOTE: deletion updates will be determined by the ContentHandler in the future
+ return $updates;
+ }
}
class PoolWorkArticleView extends PoolCounterWork {
public function show(){
global $wgSquidMaxage;
- $this->getOutput()->setSquidMaxage( $wgSquidMaxage );
+ $request = $this->getRequest();
+ if ( $request->getFullRequestURL() == $this->getTitle()->getInternalURL() ) {
+ $this->getOutput()->setSquidMaxage( $wgSquidMaxage );
+ }
+
$this->page->view();
}
$block = Block::newFromTarget( $target );
if( $block instanceof Block ){
- $res['expiry'] = $block->mExpiry == wfGetDB( DB_SLAVE )->getInfinity()
+ $res['expiry'] = $block->mExpiry == $this->getDB()->getInfinity()
? 'infinite'
: wfTimestamp( TS_ISO_8601, $block->mExpiry );
$res['id'] = $block->getId();
$this->dieUsageMsg( 'summaryrequired' );
case EditPage::AS_END:
+ default:
// $status came from WikiPage::doEdit()
$errors = $status->getErrorsArray();
$this->dieUsageMsg( $errors[0] ); // TODO: Add new errors to message map
break;
- default:
- if ( is_string( $status->value ) && strlen( $status->value ) ) {
- $this->dieUsage( "An unknown return value was returned by Editpage. The code returned was \"{$status->value}\"" , $status->value );
- } else {
- $this->dieUsageMsg( array( 'unknownerror', $status->value ) );
- }
}
$apiResult->addValue( null, $this->getModuleName(), $r );
}
$module->profileOut();
if ( !$this->mInternalMode ) {
+ //append Debug information
+ MWDebug::appendDebugInfoToApiResult( $this->getContext(), $this->getResult() );
+
// Print result data
$this->printResult( false );
}
ApiBase::dieDebug( __METHOD__, 'Missing $processTitles parameter when $remaining is provided' );
}
+ $usernames = array();
if ( $res ) {
foreach ( $res as $row ) {
$pageId = intval( $row->page_id );
// Store any extra fields requested by modules
$this->processDbRow( $row );
+
+ // Need gender information
+ if( MWNamespace::hasGenderDistinction( $row->page_namespace ) ) {
+ $usernames[] = $row->page_title;
+ }
}
}
$this->mMissingTitles[$this->mFakePageId] = $title;
$this->mFakePageId--;
$this->mTitles[] = $title;
+
+ // need gender information
+ if( MWNamespace::hasGenderDistinction( $ns ) ) {
+ $usernames[] = $dbkey;
+ }
}
}
} else {
}
}
}
+
+ // Get gender information
+ $genderCache = GenderCache::singleton();
+ $genderCache->doQuery( $usernames, __METHOD__ );
}
/**
* @return LinkBatch
*/
private function processTitlesArray( $titles ) {
+ $genderCache = GenderCache::singleton();
+ $genderCache->doTitlesArray( $titles, __METHOD__ );
+
$linkBatch = new LinkBatch();
foreach ( $titles as $title ) {
}
$restrictionTypes = $titleObj->getRestrictionTypes();
- $dbr = wfGetDB( DB_SLAVE );
+ $db = $this->getDB();
$protections = array();
$expiryarray = array();
}
if ( in_array( $expiry[$i], array( 'infinite', 'indefinite', 'never' ) ) ) {
- $expiryarray[$p[0]] = $dbr->getInfinity();
+ $expiryarray[$p[0]] = $db->getInfinity();
} else {
$exp = strtotime( $expiry[$i] );
if ( $exp < 0 || !$exp ) {
$expiryarray[$p[0]] = $exp;
}
$resultProtections[] = array( $p[0] => $protections[$p[0]],
- 'expiry' => ( $expiryarray[$p[0]] == $dbr->getInfinity() ?
+ 'expiry' => ( $expiryarray[$p[0]] == $db->getInfinity() ?
'infinite' :
wfTimestamp( TS_ISO_8601, $expiryarray[$p[0]] ) ) );
}
true, true, $page->getLatest() );
# Update the links tables
- $u = new LinksUpdate( $title, $p_result );
- $u->doUpdate();
+ $updates = $p_result->getSecondaryDataUpdates( $title );
+ DataUpdate::runUpdates( $updates );
$r['linkupdate'] = '';
$this->dieUsage( 'alcontinue and alfrom cannot be used together', 'params' );
}
if ( !is_null( $params['continue'] ) ) {
- $arr = explode( '|', $params['continue'] );
- if ( count( $arr ) != 2 ) {
+ $continueArr = explode( '|', $params['continue'] );
+ if ( count( $continueArr ) != 2 ) {
$this->dieUsage( 'Invalid continue parameter', 'badcontinue' );
}
- $from = $this->getDB()->strencode( $this->titleToKey( $arr[0] ) );
- $id = intval( $arr[1] );
+ $continueTitle = $db->addQuotes( $this->titleToKey( $continueArr[0] ) );
+ $continueFrom = intval( $continueArr[1] );
$this->addWhere(
- "pl_title > '$from' OR " .
- "(pl_title = '$from' AND " .
- "pl_from > $id)"
+ "pl_title > $continueTitle OR " .
+ "(pl_title = $continueTitle AND " .
+ "pl_from > $continueFrom)"
);
}
$this->addFields( 'COUNT(*) AS recentedits' );
- $this->addWhere( "rc_log_type IS NULL OR rc_log_type != 'newusers'" );
+ $this->addWhere( 'rc_log_type IS NULL OR rc_log_type != ' . $db->addQuotes( 'newusers' ) );
$timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 );
- $this->addWhere( "rc_timestamp >= {$db->addQuotes( $timestamp )}" );
+ $this->addWhere( 'rc_timestamp >= ' . $db->addQuotes( $timestamp ) );
$this->addOption( 'GROUP BY', $userFieldToSort );
}
$titleWhere = array();
foreach ( $this->redirTitles as $t ) {
$titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $t->getDBkey() ) .
- ( $this->hasNS ? " AND {$this->bl_ns} = '{$t->getNamespace()}'" : '' );
+ ( $this->hasNS ? " AND {$this->bl_ns} = {$t->getNamespace()}" : '' );
}
$this->addWhere( $db->makeList( $titleWhere, LIST_OR ) );
$this->addWhereFld( 'page_namespace', $this->params['namespace'] );
if ( !is_null( $this->redirID ) ) {
$first = $this->redirTitles[0];
- $title = $db->strencode( $first->getDBkey() );
+ $title = $db->addQuotes( $first->getDBkey() );
$ns = $first->getNamespace();
$from = $this->redirID;
if ( $this->hasNS ) {
$this->addWhere( "{$this->bl_ns} > $ns OR " .
"({$this->bl_ns} = $ns AND " .
- "({$this->bl_title} > '$title' OR " .
- "({$this->bl_title} = '$title' AND " .
+ "({$this->bl_title} > $title OR " .
+ "({$this->bl_title} = $title AND " .
"{$this->bl_from} >= $from)))" );
} else {
- $this->addWhere( "{$this->bl_title} > '$title' OR " .
- "({$this->bl_title} = '$title' AND " .
+ $this->addWhere( "{$this->bl_title} > $title OR " .
+ "({$this->bl_title} = $title AND " .
"{$this->bl_from} >= $from)" );
}
}
}
$prefix = substr( $lower, 0, 4 );
+ # Fairly hard to make a malicious SQL statement out of hex characters,
+ # but it is good practice to add quotes
+ $lower = $db->addQuotes( $lower );
+ $upper = $db->addQuotes( $upper );
+
$this->addWhere( array(
'ipb_range_start' . $db->buildLike( $prefix, $db->anyString() ),
- "ipb_range_start <= '$lower'",
- "ipb_range_end >= '$upper'",
+ 'ipb_range_start <= ' . $lower,
+ 'ipb_range_end >= ' . $upper,
'ipb_auto' => 0
) );
}
$dir = in_array( $params['dir'], array( 'asc', 'ascending', 'newer' ) ) ? 'newer' : 'older';
if ( $params['sort'] == 'timestamp' ) {
- $this->addWhereRange( 'cl_timestamp',
+ $this->addTimestampWhereRange( 'cl_timestamp',
$dir,
$params['start'],
$params['end'] );
$this->addWhereFld( 'ar_user_text', $params['user'] );
} elseif ( !is_null( $params['excludeuser'] ) ) {
$this->addWhere( 'ar_user_text != ' .
- $this->getDB()->addQuotes( $params['excludeuser'] ) );
+ $db->addQuotes( $params['excludeuser'] ) );
}
if ( !is_null( $params['continue'] ) && ( $mode == 'all' || $mode == 'revs' ) ) {
$this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', 'badcontinue' );
}
$ns = intval( $cont[0] );
- $title = $this->getDB()->strencode( $this->titleToKey( $cont[1] ) );
- $ts = $this->getDB()->strencode( $cont[2] );
+ $title = $db->addQuotes( $this->titleToKey( $cont[1] ) );
+ $ts = $db->addQuotes( $db->timestamp( $cont[2] ) );
$op = ( $dir == 'newer' ? '>' : '<' );
$this->addWhere( "ar_namespace $op $ns OR " .
"(ar_namespace = $ns AND " .
- "(ar_title $op '$title' OR " .
- "(ar_title = '$title' AND " .
- "ar_timestamp $op= '$ts')))" );
+ "(ar_title $op $title OR " .
+ "(ar_title = $title AND " .
+ "ar_timestamp $op= $ts)))" );
}
$this->addOption( 'LIMIT', $limit + 1 );
'original value returned by the previous query', '_badcontinue' );
}
- $prefix = $this->getDB()->strencode( $cont[0] );
- $title = $this->getDB()->strencode( $this->titleToKey( $cont[1] ) );
+ $db = $this->getDB();
+ $prefix = $db->addQuotes( $cont[0] );
+ $title = $db->addQuotes( $this->titleToKey( $cont[1] ) );
$from = intval( $cont[2] );
$this->addWhere(
- "iwl_prefix > '$prefix' OR " .
- "(iwl_prefix = '$prefix' AND " .
- "(iwl_title > '$title' OR " .
- "(iwl_title = '$title' AND " .
+ "iwl_prefix > $prefix OR " .
+ "(iwl_prefix = $prefix AND " .
+ "(iwl_title > $title OR " .
+ "(iwl_title = $title AND " .
"iwl_from >= $from)))"
);
}
'original value returned by the previous query', '_badcontinue' );
}
- $prefix = $this->getDB()->strencode( $cont[0] );
- $title = $this->getDB()->strencode( $this->titleToKey( $cont[1] ) );
+ $db = $this->getDB();
+ $prefix = $db->addQuotes( $cont[0] );
+ $title = $db->addQuotes( $this->titleToKey( $cont[1] ) );
$from = intval( $cont[2] );
$this->addWhere(
- "ll_lang > '$prefix' OR " .
- "(ll_lang = '$prefix' AND " .
- "(ll_title > '$title' OR " .
- "(ll_title = '$title' AND " .
+ "ll_lang > $prefix OR " .
+ "(ll_lang = $prefix AND " .
+ "(ll_title > $title OR " .
+ "(ll_title = $title AND " .
"ll_from >= $from)))"
);
}
/* Build our basic query. Namely, something along the lines of:
* SELECT * FROM recentchanges WHERE rc_timestamp > $start
* AND rc_timestamp < $end AND rc_namespace = $namespace
- * AND rc_deleted = '0'
+ * AND rc_deleted = 0
*/
$this->addTables( 'recentchanges' );
$index = array( 'recentchanges' => 'rc_timestamp' ); // May change
}
}
+ // add user name, if needed
+ if ( $this->fld_user ) {
+ $this->addTables( 'user' );
+ $this->addJoinConds( array( 'user' => Revision::userJoinCond() ) );
+ $this->addFields( Revision::selectUserFields() );
+ }
+
// Bug 24166 - API error when using rvprop=tags
$this->addTables( 'revision' );
$this->addWhereFld( 'rev_id', array_keys( $revs ) );
if ( !is_null( $params['continue'] ) ) {
- $this->addWhere( "rev_id >= '" . intval( $params['continue'] ) . "'" );
+ $this->addWhere( 'rev_id >= ' . intval( $params['continue'] ) );
}
$this->addOption( 'ORDER BY', 'rev_id' );
$pageid = intval( $cont[0] );
$revid = intval( $cont[1] );
$this->addWhere(
- "rev_page > '$pageid' OR " .
- "(rev_page = '$pageid' AND " .
- "rev_id >= '$revid')"
+ "rev_page > $pageid OR " .
+ "(rev_page = $pageid AND " .
+ "rev_id >= $revid)"
);
}
$this->addOption( 'ORDER BY', array(
$this->dieUsage( 'Invalid continue param. You should pass the original ' .
'value returned by the previous query', '_badcontinue' );
}
- $encUser = $this->getDB()->strencode( $continue[0] );
- $encTS = wfTimestamp( TS_MW, $continue[1] );
+ $db = $this->getDB();
+ $encUser = $db->addQuotes( $continue[0] );
+ $encTS = $db->addQuotes( $db->timestamp( $continue[1] ) );
$op = ( $this->params['dir'] == 'older' ? '<' : '>' );
$this->addWhere(
- "rev_user_text $op '$encUser' OR " .
- "(rev_user_text = '$encUser' AND " .
- "rev_timestamp $op= '$encTS')"
+ "rev_user_text $op $encUser OR " .
+ "(rev_user_text = $encUser AND " .
+ "rev_timestamp $op= $encTS)"
);
}
"original value returned by the previous query", "_badcontinue" );
}
$ns = intval( $cont[0] );
- $title = $this->getDB()->strencode( $this->titleToKey( $cont[1] ) );
+ $title = $this->getDB()->addQuotes( $this->titleToKey( $cont[1] ) );
$op = $params['dir'] == 'ascending' ? '>' : '<';
$this->addWhere(
- "wl_namespace $op '$ns' OR " .
- "(wl_namespace = '$ns' AND " .
- "wl_title $op= '$title')"
+ "wl_namespace $op $ns OR " .
+ "(wl_namespace = $ns AND " .
+ "wl_title $op= $title)"
);
}
$this->doQuery( array_keys( $users ), $caller );
}
+ /**
+ * Wrapper for doQuery that processes a title or string array.
+ *
+ * @since 1.20
+ * @param $titles List: array of Title objects or strings
+ * @param $caller String: the calling method
+ */
+ public function doTitlesArray( $titles, $caller = '' ) {
+ $users = array();
+ foreach ( $titles as $title ) {
+ $titleObj = is_string( $title ) ? Title::newFromText( $title ) : $title;
+ if ( !$titleObj ) {
+ continue;
+ }
+ if ( !MWNamespace::hasGenderDistinction( $titleObj->getNamespace() ) ) {
+ continue;
+ }
+ $users[] = $titleObj->getText();
+ }
+
+ $this->doQuery( $users, $caller );
+ }
+
/**
* Preloads genders for given list of users.
* @param $users List|String: usernames
function getParserOptions() {
if ( !$this->mParserOptions ) {
$this->mParserOptions = new ParserOptions;
+ $this->mParserOptions->setEditSection( false );
}
return $this->mParserOptions;
}
* to explicitly call MWDebug::init() to enabled them.
*
* @todo Profiler support
+ *
+ * @since 1.19
*/
class MWDebug {
/**
* Enabled the debugger and load resource module.
* This is called by Setup.php when $wgDebugToolbar is true.
+ *
+ * @since 1.19
*/
public static function init() {
self::$enabled = true;
* Add ResourceLoader modules to the OutputPage object if debugging is
* enabled.
*
+ * @since 1.19
* @param $out OutputPage
*/
public static function addModules( OutputPage $out ) {
*
* @todo Add support for passing objects
*
+ * @since 1.19
* @param $str string
*/
public static function log( $str ) {
/**
* Returns internal log array
+ * @since 1.19
* @return array
*/
public static function getLog() {
/**
* Clears internal log array and deprecation tracking
+ * @since 1.19
*/
public static function clearLog() {
self::$log = array();
/**
* Adds a warning entry to the log
*
+ * @since 1.19
* @param $msg
* @param int $callerOffset
* @return mixed
/**
* Adds a depreciation entry to the log, along with a backtrace
*
+ * @since 1.19
* @param $function
* @param $version
* @param $component
* This is a method to pass messages from wfDebug to the pretty debugger.
* Do NOT use this method, use MWDebug::log or wfDebug()
*
+ * @since 1.19
* @param $str string
*/
public static function debugMsg( $str ) {
/**
* Begins profiling on a database query
*
+ * @since 1.19
* @param $sql string
* @param $function string
* @param $isMaster bool
/**
* Calculates how long a query took.
*
+ * @since 1.19
* @param $id int
*/
public static function queryTime( $id ) {
/**
* Returns the HTML to add to the page for the toolbar
*
+ * @since 1.19
* @param $context IContextSource
* @return string
*/
return '';
}
- global $wgVersion, $wgRequestTime;
MWDebug::log( 'MWDebug output complete' );
+ $debugInfo = self::getDebugInfo( $context );
+
+ // Cannot use OutputPage::addJsConfigVars because those are already outputted
+ // by the time this method is called.
+ $html = Html::inlineScript(
+ ResourceLoader::makeLoaderConditionalScript(
+ ResourceLoader::makeConfigSetScript( array( 'debugInfo' => $debugInfo ) )
+ )
+ );
+
+ return $html;
+ }
+
+ /**
+ * Append the debug info to given ApiResult
+ *
+ * @param $context IContextSource
+ * @param $result ApiResult
+ */
+ public static function appendDebugInfoToApiResult( IContextSource $context, ApiResult $result ) {
+ if ( !self::$enabled ) {
+ return;
+ }
+
+ MWDebug::log( 'MWDebug output complete' );
+ $debugInfo = self::getDebugInfo( $context );
+
+ $result->setIndexedTagName( $debugInfo, 'debuginfo' );
+ $result->setIndexedTagName( $debugInfo['log'], 'line' );
+ foreach( $debugInfo['debugLog'] as $index => $debugLogText ) {
+ $vals = array();
+ ApiResult::setContent( $vals, $debugLogText );
+ $debugInfo['debugLog'][$index] = $vals; //replace
+ }
+ $result->setIndexedTagName( $debugInfo['debugLog'], 'msg' );
+ $result->setIndexedTagName( $debugInfo['queries'], 'query' );
+ $result->setIndexedTagName( $debugInfo['includes'], 'queries' );
+ $result->addValue( array(), 'debuginfo', $debugInfo );
+ }
+
+ /**
+ * Returns the HTML to add to the page for the toolbar
+ *
+ * @param $context IContextSource
+ * @return array
+ */
+ public static function getDebugInfo( IContextSource $context ) {
+ if ( !self::$enabled ) {
+ return array();
+ }
+
+ global $wgVersion, $wgRequestTime;
$request = $context->getRequest();
- $debugInfo = array(
+ return array(
'mwVersion' => $wgVersion,
'phpVersion' => PHP_VERSION,
'gitRevision' => GitInfo::headSHA1(),
'memoryPeak' => $context->getLanguage()->formatSize( memory_get_peak_usage() ),
'includes' => self::getFilesIncluded( $context ),
);
-
- // Cannot use OutputPage::addJsConfigVars because those are already outputted
- // by the time this method is called.
- $html = Html::inlineScript(
- ResourceLoader::makeLoaderConditionalScript(
- ResourceLoader::makeConfigSetScript( array( 'debugInfo' => $debugInfo ) )
- )
- );
-
- return $html;
}
}
* @deprecated since 1.19
*/
class FSRepo extends FileRepo {
+
+ /**
+ * @param $info array
+ * @throws MWException
+ */
function __construct( array $info ) {
if ( !isset( $info['backend'] ) ) {
// B/C settings...
var $oldFileFactory = false;
var $fileFactoryKey = false, $oldFileFactoryKey = false;
- function __construct( array $info = null ) {
+ /**
+ * @param $info array|null
+ * @throws MWException
+ */
+ public function __construct( array $info = null ) {
// Verify required settings presence
if(
$info === null
: array();
// Give defaults for the basic zones...
foreach ( array( 'public', 'thumb', 'temp', 'deleted' ) as $zone ) {
- if ( !isset( $this->zones[$zone] ) ) {
- $this->zones[$zone] = array(
- 'container' => "{$this->name}-{$zone}",
- 'directory' => '' // container root
- );
+ if ( !isset( $this->zones[$zone]['container'] ) ) {
+ $this->zones[$zone]['container'] = "{$this->name}-{$zone}";
+ }
+ if ( !isset( $this->zones[$zone]['directory'] ) ) {
+ $this->zones[$zone]['directory'] = '';
}
}
}
* Check if a single zone or list of zones is defined for usage
*
* @param $doZones Array Only do a particular zones
+ * @throws MWException
* @return Status
*/
protected function initZones( $doZones = array() ) {
* The suffix, if supplied, is considered to be unencoded, and will be
* URL-encoded before being returned.
*
- * @param $suffix string
+ * @param $suffix string|bool
* @return string
*/
public function getVirtualUrl( $suffix = false ) {
* @return String or false
*/
public function getZoneUrl( $zone ) {
+ if ( isset( $this->zones[$zone]['url'] )
+ && in_array( $zone, array( 'public', 'temp', 'thumb' ) ) )
+ {
+ return $this->zones[$zone]['url']; // custom URL
+ }
switch ( $zone ) {
case 'public':
return $this->url;
* Use this function wisely.
*
* @param $url string
+ * @throws MWException
* @return string
*/
public function resolveVirtualUrl( $url ) {
* SHA-1 content hash.
*
* STUB
+ * @param $hash
* @return array
*/
public function findBySha1( $hash ) {
/**
* Get the public root URL of the repository
*
+ * @deprecated since 1.20
* @return string
*/
public function getRootUrl() {
- return $this->url;
+ return $this->getZoneUrl( 'public' );
}
/**
* self::OVERWRITE_SAME Overwrite the file if the destination exists and has the
* same contents as the source
* self::SKIP_LOCKING Skip any file locking when doing the store
+ * @throws MWException
* @return FileRepoStatus
*/
public function storeBatch( array $triplets, $flags = 0 ) {
* Each file can be a (zone, rel) pair, virtual url, storage path.
* It will try to delete each file, but ignores any errors that may occur.
*
- * @param $pairs array List of files to delete
+ * @param $files array List of files to delete
* @param $flags Integer: bitwise combination of the following flags:
* self::SKIP_LOCKING Skip any file locking when doing the deletions
* @return FileRepoStatus
* This function can be used to write to otherwise read-only foreign repos.
* This is intended for copying generated thumbnails into the repo.
*
- * @param $src Array List of tuples (file system path, virtual URL or storage path)
+ * @param $pairs Array List of tuples (file system path, virtual URL or storage path)
* @return FileRepoStatus
*/
public function quickImportBatch( array $pairs ) {
$operations[] = array(
'op' => 'store',
'src' => $src,
- 'dst' => $this->resolveToStoragePath( $dst ),
- 'overwrite' => true
+ 'dst' => $this->resolveToStoragePath( $dst )
);
$this->backend->prepare( array( 'dir' => dirname( $dst ) ) );
}
- $status->merge( $this->backend->doOperations( $operations,
- array( 'force' => 1, 'nonLocking' => 1, 'allowStale' => 1, 'nonJournaled' => 1 )
- ) );
+ $status->merge( $this->backend->doQuickOperations( $operations ) );
return $status;
}
* This function can be used to write to otherwise read-only foreign repos.
* This does no locking nor journaling and is intended for purging thumbnails.
*
- * @param $path Array List of virtual URLs or storage paths
+ * @param $paths Array List of virtual URLs or storage paths
* @return FileRepoStatus
*/
public function quickPurgeBatch( array $paths ) {
'ignoreMissingSource' => true
);
}
- $status->merge( $this->backend->doOperations( $operations,
- array( 'force' => 1, 'nonLocking' => 1, 'allowStale' => 1, 'nonJournaled' => 1 )
- ) );
+ $status->merge( $this->backend->doQuickOperations( $operations ) );
return $status;
}
* @param $triplets Array: (source, dest, archive) triplets as per publish()
* @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate
* that the source files should be deleted if possible
+ * @throws MWException
* @return FileRepoStatus
*/
public function publishBatch( array $triplets, $flags = 0 ) {
* is a two-element array containing the source file path relative to the
* public root in the first element, and the archive file path relative
* to the deleted zone root in the second element.
+ * @throws MWException
* @return FileRepoStatus
*/
public function deleteBatch( array $sourceDestPairs ) {
* Get a relative path for a deletion archive key,
* e.g. s/z/a/ for sza251lrxrc1jad41h5mgilp8nysje52.jpg
*
+ * @param $key string
* @return string
*/
public function getDeletedHashPath( $key ) {
/**
* Create a new good result
*
+ * @param $value null|string
* @return FileRepoStatus
*/
public function newGood( $value = null ) {
protected $mQueryCache = array();
protected $mFileExists = array();
+ /**
+ * @param $info array|null
+ */
function __construct( $info ) {
global $wgLocalFileRepo;
parent::__construct( $info );
* Per docs in FileRepo, this needs to return false if we don't support versioned
* files. Well, we don't.
*
+ * @param $title Title
+ * @param $time string|bool
* @return File
*/
function newFile( $title, $time = false ) {
return parent::newFile( $title, $time );
}
+ /**
+ * @param $files array
+ * @return array
+ */
function fileExistsBatch( array $files ) {
$results = array();
foreach ( $files as $k => $f ) {
return $results;
}
+ /**
+ * @param $virtualUrl string
+ * @return bool
+ */
function getFileProps( $virtualUrl ) {
return false;
}
+ /**
+ * @param $query array
+ * @return string
+ */
function fetchImageQuery( $query ) {
global $wgMemc;
return FormatJson::decode( $this->mQueryCache[$url], true );
}
+ /**
+ * @param $data array
+ * @return bool|array
+ */
function getImageInfo( $data ) {
if( $data && isset( $data['query']['pages'] ) ) {
foreach( $data['query']['pages'] as $info ) {
return false;
}
+ /**
+ * @param $hash string
+ * @return array
+ */
function findBySha1( $hash ) {
$results = $this->fetchImageQuery( array(
'aisha1base36' => $hash,
return $ret;
}
+ /**
+ * @param $name string
+ * @param $width int
+ * @param $height int
+ * @param $result null
+ * @param $otherParams string
+ * @return bool
+ */
function getThumbUrl( $name, $width = -1, $height = -1, &$result = null, $otherParams = '' ) {
$data = $this->fetchImageQuery( array(
'titles' => 'File:' . $name,
* @param $name String is a dbkey form of a title
* @param $width
* @param $height
- * @param String $param Other rendering parameters (page number, etc) from handler's makeParamString.
+ * @param String $params Other rendering parameters (page number, etc) from handler's makeParamString.
* @return bool|string
*/
- function getThumbUrlFromCache( $name, $width, $height, $params="" ) {
+ function getThumbUrlFromCache( $name, $width, $height, $params = "" ) {
global $wgMemc;
// We can't check the local cache using FileRepo functions because
// we override fileExistsBatch(). We have to use the FileBackend directly.
$op = array( 'op' => 'create', 'dst' => $localFilename, 'content' => $thumb );
if( !$backend->doOperation( $op )->isOK() ) {
wfRestoreWarnings();
- wfDebug( __METHOD__ . " could not write to thumb path\n" );
+ wfDebug( __METHOD__ . " could not write to thumb path '$localFilename'\n" );
return $foreignUrl;
}
$knownThumbUrls[$sizekey] = $localUrl;
/**
* @see FileRepo::getZoneUrl()
+ * @param $zone String
* @return String
*/
function getZoneUrl( $zone ) {
/**
* Get the local directory corresponding to one of the basic zones
+ * @param $zone string
* @return bool|null|string
*/
function getZonePath( $zone ) {
/**
* Like a Http:get request, but with custom User-Agent.
* @see Http:get
+ * @param $url string
+ * @param $timeout string
+ * @param $options array
* @return bool|String
*/
public static function httpGet( $url, $timeout = 'default', $options = array() ) {
}
}
+ /**
+ * @param $callback Array|string
+ * @throws MWException
+ */
function enumFiles( $callback ) {
throw new MWException( 'enumFiles is not supported by ' . get_class( $this ) );
}
+ /**
+ * @throws MWException
+ */
protected function assertWritableRepo() {
throw new MWException( get_class( $this ) . ': write operations are not supported.' );
}
var $fileFactory = array( 'ForeignDBFile', 'newFromTitle' );
var $fileFromRowFactory = array( 'ForeignDBFile', 'newFromRow' );
+ /**
+ * @param $info array|null
+ */
function __construct( $info ) {
parent::__construct( $info );
$this->dbType = $info['dbType'];
$this->hasSharedCache = $info['hasSharedCache'];
}
+ /**
+ * @return DatabaseBase
+ */
function getMasterDB() {
if ( !isset( $this->dbConn ) ) {
$this->dbConn = DatabaseBase::factory( $this->dbType,
return $this->dbConn;
}
+ /**
+ * @return DatabaseBase
+ */
function getSlaveDB() {
return $this->getMasterDB();
}
+ /**
+ * @return bool
+ */
function hasSharedCache() {
return $this->hasSharedCache;
}
var $fileFactory = array( 'ForeignDBFile', 'newFromTitle' );
var $fileFromRowFactory = array( 'ForeignDBFile', 'newFromRow' );
+ /**
+ * @param $info array|null
+ */
function __construct( $info ) {
parent::__construct( $info );
$this->wiki = $info['wiki'];
$this->hasSharedCache = $info['hasSharedCache'];
}
+ /**
+ * @return DatabaseBase
+ */
function getMasterDB() {
return wfGetDB( DB_MASTER, array(), $this->wiki );
}
+ /**
+ * @return DatabaseBase
+ */
function getSlaveDB() {
return wfGetDB( DB_SLAVE, array(), $this->wiki );
}
* @ingroup FileRepo
*/
class NullRepo extends FileRepo {
+
+ /**
+ * @param $info array|null
+ */
function __construct( $info ) {}
protected function assertWritableRepo() {
return $image;
}
+ /**
+ * @param $inputItems array
+ * @return array
+ */
function findFiles( $inputItems ) {
if ( !$this->reposInitialised ) {
$this->initialiseRepos();
/**
* Interface for FileRepo::checkRedirect()
+ * @param $title Title
* @return bool
*/
function checkRedirect( Title $title ) {
/**
* Get the repo instance with a given key.
+ * @param $index string|int
* @return bool|LocalRepo
*/
function getRepo( $index ) {
return false;
}
}
+
/**
* Get the repo instance by its name
+ * @param $name string
* @return bool
*/
function getRepoByName( $name ) {
$this->initialiseRepos();
}
foreach ( $this->foreignRepos as $repo ) {
- if ( $repo->name == $name)
+ if ( $repo->name == $name ) {
return $repo;
+ }
}
return false;
}
/**
* Split a virtual URL into repo, zone and rel parts
* @param $url string
+ * @throws MWException
* @return array containing repo, zone and rel
*/
function splitVirtualUrl( $url ) {
return $bits;
}
+ /**
+ * @param $fileName string
+ * @return array
+ */
function getFileProps( $fileName ) {
if ( FileRepo::isVirtualUrl( $fileName ) ) {
list( $repoName, /* $zone */, /* $rel */ ) = $this->splitVirtualUrl( $fileName );
/**
* Sets up the file object
*
- * @param String $path Path to temporary file on local disk
+ * @param $path string Path to temporary file on local disk
+ * @throws MWException
*/
public function __construct( $path ) {
if ( FileBackend::isStoragePath( $path ) ) {
/**
* Exract image size information
*
+ * @param $gis array
* @return Array
*/
protected function extractImageSizeInfo( array $gis ) {
/**
* @see FileBackendStore::resolveContainerPath()
+ * @param $container string
+ * @param $relStoragePath string
* @return null|string
*/
protected function resolveContainerPath( $container, $relStoragePath ) {
return array_pop( $this->hadWarningErrors ); // pop from stack
}
+ /**
+ * @return bool
+ */
private function handleWarning() {
$this->hadWarningErrors[count( $this->hadWarningErrors ) - 1] = true;
return true; // suppress from PHP handler
public $cmd; // string; shell command
public $chmodPath; // string; file to chmod
+ /**
+ * @param $backend
+ * @param $params array
+ * @param $call
+ * @param $cmd
+ * @param $chmodPath null
+ */
public function __construct( $backend, array $params, $call, $cmd, $chmodPath = null ) {
$this->backend = $backend;
$this->params = $params;
/**
* @param $dir string file system directory
+ * @param $params array
*/
public function __construct( $dir, array $params ) {
$dir = realpath( $dir ); // normalize
* 'concurrency' : How many file operations can be done in parallel.
*
* @param $config Array
+ * @throws MWException
*/
public function __construct( array $config ) {
$this->name = $config['name'];
* @return Status
*/
final public function create( array $params, array $opts = array() ) {
- $params['op'] = 'create';
- return $this->doOperation( $params, $opts );
+ return $this->doOperation( array( 'op' => 'create' ) + $params, $opts );
}
/**
* @return Status
*/
final public function store( array $params, array $opts = array() ) {
- $params['op'] = 'store';
- return $this->doOperation( $params, $opts );
+ return $this->doOperation( array( 'op' => 'store' ) + $params, $opts );
}
/**
* @return Status
*/
final public function copy( array $params, array $opts = array() ) {
- $params['op'] = 'copy';
- return $this->doOperation( $params, $opts );
+ return $this->doOperation( array( 'op' => 'copy' ) + $params, $opts );
}
/**
* @return Status
*/
final public function move( array $params, array $opts = array() ) {
- $params['op'] = 'move';
- return $this->doOperation( $params, $opts );
+ return $this->doOperation( array( 'op' => 'move' ) + $params, $opts );
}
/**
* @return Status
*/
final public function delete( array $params, array $opts = array() ) {
- $params['op'] = 'delete';
- return $this->doOperation( $params, $opts );
+ return $this->doOperation( array( 'op' => 'delete' ) + $params, $opts );
}
+ /**
+ * Perform a set of independent file operations on some files.
+ *
+ * This does no locking, nor journaling, and possibly no stat calls.
+ * Any destination files that already exist will be overwritten.
+ * This should *only* be used on non-original files, like cache files.
+ *
+ * Supported operations and their parameters:
+ * a) Create a new file in storage with the contents of a string
+ * array(
+ * 'op' => 'create',
+ * 'dst' => <storage path>,
+ * 'content' => <string of new file contents>
+ * )
+ * b) Copy a file system file into storage
+ * array(
+ * 'op' => 'store',
+ * 'src' => <file system path>,
+ * 'dst' => <storage path>
+ * )
+ * c) Copy a file within storage
+ * array(
+ * 'op' => 'copy',
+ * 'src' => <storage path>,
+ * 'dst' => <storage path>
+ * )
+ * d) Move a file within storage
+ * array(
+ * 'op' => 'move',
+ * 'src' => <storage path>,
+ * 'dst' => <storage path>
+ * )
+ * e) Delete a file within storage
+ * array(
+ * 'op' => 'delete',
+ * 'src' => <storage path>,
+ * 'ignoreMissingSource' => <boolean>
+ * )
+ * f) Do nothing (no-op)
+ * array(
+ * 'op' => 'null',
+ * )
+ *
+ * Boolean flags for operations (operation-specific):
+ * 'ignoreMissingSource' : The operation will simply succeed and do
+ * nothing if the source file does not exist.
+ *
+ * Return value:
+ * This returns a Status, which contains all warnings and fatals that occured
+ * during the operation. The 'failCount', 'successCount', and 'success' members
+ * will reflect each operation attempted for the given files. The status will be
+ * considered "OK" as long as no fatal errors occured.
+ *
+ * @param $ops Array Set of operations to execute
+ * @return Status
+ */
+ final public function doQuickOperations( array $ops ) {
+ if ( $this->isReadOnly() ) {
+ return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
+ }
+ foreach ( $ops as &$op ) {
+ $op['overwrite'] = true; // avoids RTTs in key/value stores
+ }
+ return $this->doQuickOperationsInternal( $ops );
+ }
+
+ /**
+ * @see FileBackend::doQuickOperations()
+ */
+ abstract protected function doQuickOperationsInternal( array $ops );
+
/**
* Concatenate a list of storage files into a single file system file.
* The target path should refer to a file that is already locked or
* $params include:
* dir : storage directory
*
+ * @param $params array
* @return bool|null Returns null on failure
* @since 1.20
*/
* dir : storage directory
* topOnly : only return direct child dirs of the directory
*
+ * @param $params array
* @return Traversable|Array|null Returns null on failure
* @since 1.20
*/
* $params include:
* dir : storage directory
*
+ * @param $params array
* @return Traversable|Array|null Returns null on failure
* @since 1.20
*/
* dir : storage directory
* topOnly : only return direct child files of the directory (@since 1.20)
*
+ * @param $params array
* @return Traversable|Array|null Returns null on failure
*/
abstract public function getFileList( array $params );
* $params include:
* dir : storage directory
*
+ * @param $params array
* @return Traversable|Array|null Returns null on failure
* @since 1.20
*/
return "mwstore://{$this->name}";
}
+ /**
+ * Get the file journal object for this backend
+ *
+ * @return FileJournal
+ */
+ final public function getJournal() {
+ return $this->fileJournal;
+ }
+
/**
* Check if a given path is a "mwstore://" path.
* This does not do any further validation or any existence checks.
return $this->backends[$name]['instance'];
}
+ /**
+ * Get the config array for a backend object with a given name
+ *
+ * @param $name string
+ * @return Array
+ * @throws MWException
+ */
+ public function config( $name ) {
+ if ( !isset( $this->backends[$name] ) ) {
+ throw new MWException( "No backend defined with the name `$name`." );
+ }
+ $class = $this->backends[$name]['class'];
+ return array( 'class' => $class ) + $this->backends[$name]['config'];
+ }
+
/**
* Get an appropriate backend object from a storage path
*
* FileBackendStore class, but with these additional settings:
* 'class' : The name of the backend class
* 'isMultiMaster' : This must be set for one backend.
+ * 'template: : If given a backend name, this will use
+ * the config of that backend as a template.
+ * Values specified here take precedence.
* 'syncChecks' : Integer bitfield of internal backend sync checks to perform.
* Possible bits include self::CHECK_SIZE and self::CHECK_TIME.
* The checks are done before allowing any file operations.
// Construct backends here rather than via registration
// to keep these backends hidden from outside the proxy.
foreach ( $config['backends'] as $index => $config ) {
+ if ( isset( $config['template'] ) ) {
+ // Config is just a modified version of a registered backend's.
+ // This should only be used when that config is used only be this backend.
+ $config = $config + FileBackendGroup::singleton()->config( $config['template'] );
+ }
$name = $config['name'];
if ( isset( $namesUsed[$name] ) ) { // don't break FileOp predicates
throw new MWException( "Two or more backends defined with the name $name." );
/**
* Same as substOpBatchPaths() but for a single operation
*
- * @param $op File operation array
+ * @param $ops array File operation array
* @param $backend FileBackendStore
* @return Array
*/
);
}
+ /**
+ * @see FileBackend::doQuickOperationsInternal()
+ * @return Status
+ */
+ public function doQuickOperationsInternal( array $ops ) {
+ // Do the operations on the master backend; setting Status fields...
+ $realOps = $this->substOpBatchPaths( $ops, $this->backends[$this->masterIndex] );
+ $status = $this->backends[$this->masterIndex]->doQuickOperations( $realOps );
+ // Propagate the operations to the clone backends...
+ foreach ( $this->backends as $index => $backend ) {
+ if ( $index !== $this->masterIndex ) { // not done already
+ $realOps = $this->substOpBatchPaths( $ops, $backend );
+ $status->merge( $backend->doQuickOperations( $realOps ) );
+ }
+ }
+ return $status;
+ }
+
/**
* @see FileBackend::doPrepare()
* @return Status
/**
* @see FileBackend::doSecure()
+ * @param $params array
* @return Status
*/
protected function doSecure( array $params ) {
/**
* @see FileBackend::doClean()
+ * @param $params array
* @return Status
*/
protected function doClean( array $params ) {
/**
* @see FileBackend::concatenate()
+ * @param $params array
+ * @return Status
*/
public function concatenate( array $params ) {
// We are writing to an FS file, so we don't need to do this per-backend
/**
* @see FileBackend::fileExists()
+ * @param $params array
*/
public function fileExists( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getFileTimestamp()
+ * @param $params array
+ * @return bool|string
*/
public function getFileTimestamp( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getFileSize()
+ * @param $params array
+ * @return bool|int
*/
public function getFileSize( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getFileStat()
+ * @param $params array
+ * @return Array|bool|null
*/
public function getFileStat( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getFileContents()
+ * @param $params array
+ * @return bool|string
*/
public function getFileContents( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getFileSha1Base36()
+ * @param $params array
+ * @return bool|string
*/
public function getFileSha1Base36( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getFileProps()
+ * @param $params array
+ * @return Array
*/
public function getFileProps( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::streamFile()
+ * @param $params array
+ * @return \Status
*/
public function streamFile( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getLocalReference()
+ * @param $params array
+ * @return FSFile|null
*/
public function getLocalReference( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getLocalCopy()
+ * @param $params array
+ * @return null|TempFSFile
*/
public function getLocalCopy( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::directoryExists()
+ * @param $params array
+ * @return bool|null
*/
public function directoryExists( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getSubdirectoryList()
+ * @param $params array
+ * @return Array|null|Traversable
*/
public function getDirectoryList( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
/**
* @see FileBackend::getFileList()
+ * @param $params array
+ * @return Array|null|\Traversable
*/
public function getFileList( array $params ) {
$realParams = $this->substOpPaths( $params, $this->backends[$this->masterIndex] );
wfProfileIn( __METHOD__ );
wfProfileIn( __METHOD__ . '-' . $this->name );
if ( filesize( $params['src'] ) > $this->maxFileSizeInternal() ) {
- $status = Status::newFatal( 'backend-fail-store', $params['dst'] );
+ $status = Status::newFatal( 'backend-fail-maxsize',
+ $params['dst'], $this->maxFileSizeInternal() );
} else {
$status = $this->doStoreInternal( $params );
$this->clearCache( array( $params['dst'] ) );
return $status;
}
+ /**
+ * No-op file operation that does nothing.
+ * Do not call this function from places outside FileBackend and FileOp.
+ *
+ * @param $params Array
+ * @return Status
+ */
+ final public function nullInternal( array $params ) {
+ return Status::newGood();
+ }
+
/**
* @see FileBackend::concatenate()
* @return Status
$this->trimCache(); // limit memory
$this->cache[$path]['stat'] = $stat;
$this->setFileCache( $path, $stat ); // update persistent cache
+ } else {
+ wfDebug( __METHOD__ . ": File $path does not exist.\n" );
}
wfProfileOut( __METHOD__ . '-' . $this->name );
wfProfileOut( __METHOD__ );
*/
abstract public function getFileListInternal( $container, $dir, array $params );
- /**
- * Get the list of supported operations and their corresponding FileOp classes.
- *
- * @return Array
- */
- protected function supportedOperations() {
- return array(
- 'store' => 'StoreFileOp',
- 'copy' => 'CopyFileOp',
- 'move' => 'MoveFileOp',
- 'delete' => 'DeleteFileOp',
- 'create' => 'CreateFileOp',
- 'null' => 'NullFileOp'
- );
- }
-
/**
* Return a list of FileOp objects from a list of operations.
* Do not call this function from places outside FileBackend.
* @throws MWException
*/
final public function getOperationsInternal( array $ops ) {
- $supportedOps = $this->supportedOperations();
+ $supportedOps = array(
+ 'store' => 'StoreFileOp',
+ 'copy' => 'CopyFileOp',
+ 'move' => 'MoveFileOp',
+ 'delete' => 'DeleteFileOp',
+ 'create' => 'CreateFileOp',
+ 'null' => 'NullFileOp'
+ );
$performOps = array(); // array of FileOp objects
// Build up ordered array of FileOps...
return $status;
}
+ /**
+ * @see FileBackend::doQuickOperationsInternal()
+ * @return Status
+ * @throws MWException
+ */
+ final protected function doQuickOperationsInternal( array $ops ) {
+ wfProfileIn( __METHOD__ );
+ wfProfileIn( __METHOD__ . '-' . $this->name );
+ $status = Status::newGood();
+
+ $supportedOps = array( 'create', 'store', 'copy', 'move', 'delete', 'null' );
+ $async = ( $this->parallelize === 'implicit' );
+ $maxConcurrency = $this->concurrency; // throttle
+
+ $statuses = array(); // array of (index => Status)
+ $fileOpHandles = array(); // list of (index => handle) arrays
+ $curFileOpHandles = array(); // current handle batch
+ // Perform the sync-only ops and build up op handles for the async ops...
+ foreach ( $ops as $index => $params ) {
+ if ( !in_array( $params['op'], $supportedOps ) ) {
+ wfProfileOut( __METHOD__ . '-' . $this->name );
+ wfProfileOut( __METHOD__ );
+ throw new MWException( "Operation '{$params['op']}' is not supported." );
+ }
+ $method = $params['op'] . 'Internal'; // e.g. "storeInternal"
+ $subStatus = $this->$method( array( 'async' => $async ) + $params );
+ if ( $subStatus->value instanceof FileBackendStoreOpHandle ) { // async
+ if ( count( $curFileOpHandles ) >= $maxConcurrency ) {
+ $fileOpHandles[] = $curFileOpHandles; // push this batch
+ $curFileOpHandles = array();
+ }
+ $curFileOpHandles[$index] = $subStatus->value; // keep index
+ } else { // error or completed
+ $statuses[$index] = $subStatus; // keep index
+ }
+ }
+ if ( count( $curFileOpHandles ) ) {
+ $fileOpHandles[] = $curFileOpHandles; // last batch
+ }
+ // Do all the async ops that can be done concurrently...
+ foreach ( $fileOpHandles as $fileHandleBatch ) {
+ $statuses = $statuses + $this->executeOpHandlesInternal( $fileHandleBatch );
+ }
+ // Marshall and merge all the responses...
+ foreach ( $statuses as $index => $subStatus ) {
+ $status->merge( $subStatus );
+ if ( $subStatus->isOK() ) {
+ $status->success[$index] = true;
+ ++$status->successCount;
+ } else {
+ $status->success[$index] = false;
+ ++$status->failCount;
+ }
+ }
+
+ wfProfileOut( __METHOD__ . '-' . $this->name );
+ wfProfileOut( __METHOD__ );
+ return $status;
+ }
+
/**
* Execute a list of FileBackendStoreOpHandle handles in parallel.
* The resulting Status object fields will correspond
*
* @param $handles Array List of FileBackendStoreOpHandle objects
* @return Array Map of Status objects
+ * @throws MWException
*/
final public function executeOpHandlesInternal( array $fileOpHandles ) {
wfProfileIn( __METHOD__ );
}
}
$res = $this->doExecuteOpHandlesInternal( $fileOpHandles );
+ foreach ( $fileOpHandles as $fileOpHandle ) {
+ $fileOpHandle->closeResources();
+ }
wfProfileOut( __METHOD__ . '-' . $this->name );
wfProfileOut( __METHOD__ );
return $res;
* Any empty suffix means the container is not sharded.
*
* @param $container string Container name
- * @param $relStoragePath string Storage path relative to the container
+ * @param $relPath string Storage path relative to the container
* @return string|null Returns null if shard could not be determined
*/
final protected function getContainerShard( $container, $relPath ) {
/**
* Get the cache key for a container
*
- * @param $container Resolved container name
+ * @param $container string Resolved container name
* @return string
*/
private function containerCacheKey( $container ) {
/**
* Set the cached info for a container
*
- * @param $container Resolved container name
+ * @param $container string Resolved container name
* @param $val mixed Information to cache
- * @return void
*/
final protected function setContainerCache( $container, $val ) {
$this->memCache->set( $this->containerCacheKey( $container ), $val, 14*86400 );
/**
* Delete the cached info for a container
*
- * @param $container Resolved container name
- * @return void
+ * @param $container string Resolved container name
*/
final protected function deleteContainerCache( $container ) {
- for ( $attempts=1; $attempts <= 3; $attempts++ ) {
- if ( $this->memCache->delete( $this->containerCacheKey( $container ) ) ) {
- return; // done!
- }
+ if ( !$this->memCache->delete( $this->containerCacheKey( $container ) ) ) {
+ trigger_error( "Unable to delete stat cache for container $container." );
}
- trigger_error( "Unable to delete stat cache for container $container." );
}
/**
$contInfo = array(); // (resolved container name => cache value)
// Get all cache entries for these container cache keys...
- $values = $this->memCache->getBatch( array_keys( $contNames ) );
+ $values = $this->memCache->getMulti( array_keys( $contNames ) );
foreach ( $values as $cacheKey => $val ) {
$contInfo[$contNames[$cacheKey]] = $val;
}
/**
* Get the cache key for a file path
*
- * @param $path Storage path
+ * @param $path string Storage path
* @return string
*/
private function fileCacheKey( $path ) {
/**
* Set the cached stat info for a file path
*
- * @param $path Storage path
+ * @param $path string Storage path
* @param $val mixed Information to cache
- * @return void
*/
final protected function setFileCache( $path, $val ) {
$this->memCache->set( $this->fileCacheKey( $path ), $val, 7*86400 );
/**
* Delete the cached stat info for a file path
*
- * @param $path Storage path
- * @return void
+ * @param $path string Storage path
*/
final protected function deleteFileCache( $path ) {
- for ( $attempts=1; $attempts <= 3; $attempts++ ) {
- if ( $this->memCache->delete( $this->fileCacheKey( $path ) ) ) {
- return; // done!
- }
+ if ( !$this->memCache->delete( $this->fileCacheKey( $path ) ) ) {
+ trigger_error( "Unable to delete stat cache for file $path." );
}
- trigger_error( "Unable to delete stat cache for file $path." );
}
/**
}
}
// Get all cache entries for these container cache keys...
- $values = $this->memCache->getBatch( array_keys( $pathNames ) );
+ $values = $this->memCache->getMulti( array_keys( $pathNames ) );
foreach ( $values as $cacheKey => $val ) {
if ( is_array( $val ) ) {
$this->trimCache(); // limit memory
* Iterator for listing directories
*/
class FileBackendStoreShardDirIterator extends FileBackendStoreShardListIterator {
+ /**
+ * @param string $container
+ * @param string $dir
+ * @param array $params
+ * @return Array|null|Traversable
+ */
protected function listFromShard( $container, $dir, array $params ) {
return $this->backend->getDirectoryListInternal( $container, $dir, $params );
}
* Iterator for listing regular files
*/
class FileBackendStoreShardFileIterator extends FileBackendStoreShardListIterator {
+ /**
+ * @param string $container
+ * @param string $dir
+ * @param array $params
+ * @return Array|null|Traversable
+ */
protected function listFromShard( $container, $dir, array $params ) {
return $this->backend->getFileListInternal( $container, $dir, $params );
}
* overwriteSame : override any existing file at destination
*/
class StoreFileOp extends FileOp {
+
+ /**
+ * @return array
+ */
protected function allowedParams() {
return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
}
+ /**
+ * @param $predicates array
+ * @return Status
+ */
protected function doPrecheck( array &$predicates ) {
$status = Status::newGood();
// Check if the source file exists on the file system
return $status;
// Check if the source file is too big
} elseif ( filesize( $this->params['src'] ) > $this->backend->maxFileSizeInternal() ) {
+ $status->fatal( 'backend-fail-maxsize',
+ $this->params['dst'], $this->backend->maxFileSizeInternal() );
$status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
return $status;
// Check if a file can be placed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
+ $status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
return $status;
}
return $status; // safe to call attempt()
}
+ /**
+ * @return Status
+ */
protected function doAttempt() {
// Store the file at the destination
if ( !$this->destSameAsSource ) {
return Status::newGood();
}
+ /**
+ * @return bool|string
+ */
protected function getSourceSha1Base36() {
wfSuppressWarnings();
$hash = sha1_file( $this->params['src'] );
$status = Status::newGood();
// Check if the source data is too big
if ( strlen( $this->getParam( 'content' ) ) > $this->backend->maxFileSizeInternal() ) {
+ $status->fatal( 'backend-fail-maxsize',
+ $this->params['dst'], $this->backend->maxFileSizeInternal() );
$status->fatal( 'backend-fail-create', $this->params['dst'] );
return $status;
// Check if a file can be placed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
+ $status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-create', $this->params['dst'] );
return $status;
}
return $status; // safe to call attempt()
}
+ /**
+ * @return Status
+ */
protected function doAttempt() {
if ( !$this->destSameAsSource ) {
// Create the file at the destination
return Status::newGood();
}
+ /**
+ * @return bool|String
+ */
protected function getSourceSha1Base36() {
return wfBaseConvert( sha1( $this->params['content'] ), 16, 36, 31 );
}
+ /**
+ * @return array
+ */
protected function doStoragePathsChanged() {
return array( $this->params['dst'] );
}
* overwriteSame : override any existing file at destination
*/
class CopyFileOp extends FileOp {
+
+ /**
+ * @return array
+ */
protected function allowedParams() {
return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
}
+ /**
+ * @param $predicates array
+ * @return Status
+ */
protected function doPrecheck( array &$predicates ) {
$status = Status::newGood();
// Check if the source file exists
return $status;
// Check if a file can be placed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
+ $status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-copy', $this->params['src'], $this->params['dst'] );
return $status;
}
return $status; // safe to call attempt()
}
+ /**
+ * @return Status
+ */
protected function doAttempt() {
// Do nothing if the src/dst paths are the same
if ( $this->params['src'] !== $this->params['dst'] ) {
return Status::newGood();
}
+ /**
+ * @return array
+ */
protected function doStoragePathsRead() {
return array( $this->params['src'] );
}
+ /**
+ * @return array
+ */
protected function doStoragePathsChanged() {
return array( $this->params['dst'] );
}
* overwriteSame : override any existing file at destination
*/
class MoveFileOp extends FileOp {
+ /**
+ * @return array
+ */
protected function allowedParams() {
return array( array( 'src', 'dst' ), array( 'overwrite', 'overwriteSame' ) );
}
+ /**
+ * @param $predicates array
+ * @return Status
+ */
protected function doPrecheck( array &$predicates ) {
$status = Status::newGood();
// Check if the source file exists
return $status;
// Check if a file can be placed at the destination
} elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
+ $status->fatal( 'backend-fail-usable', $this->params['dst'] );
$status->fatal( 'backend-fail-move', $this->params['src'], $this->params['dst'] );
return $status;
}
return $status; // safe to call attempt()
}
+ /**
+ * @return Status
+ */
protected function doAttempt() {
// Do nothing if the src/dst paths are the same
if ( $this->params['src'] !== $this->params['dst'] ) {
return Status::newGood();
}
+ /**
+ * @return array
+ */
protected function doStoragePathsRead() {
return array( $this->params['src'] );
}
+ /**
+ * @return array
+ */
protected function doStoragePathsChanged() {
return array( $this->params['src'], $this->params['dst'] );
}
* ignoreMissingSource : don't return an error if the file does not exist
*/
class DeleteFileOp extends FileOp {
+ /**
+ * @return array
+ */
protected function allowedParams() {
return array( array( 'src' ), array( 'ignoreMissingSource' ) );
}
protected $needsDelete = true;
+ /**
+ * @param array $predicates
+ * @return Status
+ */
protected function doPrecheck( array &$predicates ) {
$status = Status::newGood();
// Check if the source file exists
return $status; // safe to call attempt()
}
+ /**
+ * @return Status
+ */
protected function doAttempt() {
if ( $this->needsDelete ) {
// Delete the source file
return Status::newGood();
}
+ /**
+ * @return array
+ */
protected function doStoragePathsChanged() {
return array( $this->params['src'] );
}
<?php
/**
+ * Helper class for representing batch file operations.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
* @ingroup FileBackend
* @author Aaron Schulz
* within any given sub-batch do not depend on each other.
* This will abort remaining ops on failure.
*
- * @param $performOps Array
+ * @param $pPerformOps Array
* @param $status Status
* @return bool Success
*/
protected $auth; // Swift authentication handler
protected $authTTL; // integer seconds
protected $swiftAnonUser; // string; username to handle unauthenticated requests
+ protected $swiftUseCDN; // boolean; whether CloudFiles CDN is enabled
protected $maxContCacheSize = 300; // integer; max containers with entries
/** @var CF_Connection */
protected $conn; // Swift connection handle
protected $connStarted = 0; // integer UNIX timestamp
protected $connContainers = array(); // container object cache
+ protected $connException; // CloudFiles exception
/**
* @see FileBackendStore::__construct()
* swiftKey : Swift authentication key for the above user
* swiftAuthTTL : Swift authentication TTL (seconds)
* swiftAnonUser : Swift user used for end-user requests (account:username)
+ * swiftUseCDN : Whether a Cloud Files Content Delivery Network is set up
* shardViaHashLevels : Map of container names to sharding config with:
* 'base' : base of hash characters, 16 or 36
* 'levels' : the number of hash levels (and digits)
$this->shardViaHashLevels = isset( $config['shardViaHashLevels'] )
? $config['shardViaHashLevels']
: '';
+ $this->swiftUseCDN = isset( $config['swiftUseCDN'] )
+ ? $config['swiftUseCDN']
+ : false;
// Cache container info to mask latency
$this->memCache = wfGetMainCache();
}
if ( !empty( $params['async'] ) ) { // deferred
$handle = $obj->write_async( $params['content'] );
$status->value = new SwiftFileOpHandle( $this, $params, 'Create', $handle );
+ $status->value->affectedObjects[] = $obj;
} else { // actually write the object in Swift
$obj->write( $params['content'] );
+ $this->purgeCDNCache( array( $obj ) );
}
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
} catch ( BadContentTypeException $e ) {
$status->fatal( 'backend-fail-contenttype', $params['dst'] );
} catch ( CloudFilesException $e ) { // some other exception?
$handle = $obj->write_async( $fp, filesize( $params['src'] ), true );
$status->value = new SwiftFileOpHandle( $this, $params, 'Store', $handle );
$status->value->resourcesToClose[] = $fp;
+ $status->value->affectedObjects[] = $obj;
}
} else { // actually write the object in Swift
$obj->load_from_filename( $params['src'], true ); // calls $obj->write()
+ $this->purgeCDNCache( array( $obj ) );
}
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
} catch ( BadContentTypeException $e ) {
$status->fatal( 'backend-fail-contenttype', $params['dst'] );
} catch ( IOException $e ) {
// (b) Actually copy the file to the destination
try {
+ $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
if ( !empty( $params['async'] ) ) { // deferred
$handle = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel );
$status->value = new SwiftFileOpHandle( $this, $params, 'Copy', $handle );
+ $status->value->affectedObjects[] = $dstObj;
} else { // actually write the object in Swift
$sContObj->copy_object_to( $srcRel, $dContObj, $dstRel );
+ $this->purgeCDNCache( array( $dstObj ) );
}
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
} catch ( NoSuchObjectException $e ) { // source object does not exist
$status->fatal( 'backend-fail-copy', $params['src'], $params['dst'] );
} catch ( CloudFilesException $e ) { // some other exception?
// (b) Actually move the file to the destination
try {
+ $srcObj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
+ $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
if ( !empty( $params['async'] ) ) { // deferred
$handle = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel );
$status->value = new SwiftFileOpHandle( $this, $params, 'Move', $handle );
+ $status->value->affectedObjects[] = $srcObj;
+ $status->value->affectedObjects[] = $dstObj;
} else { // actually write the object in Swift
$sContObj->move_object_to( $srcRel, $dContObj, $dstRel );
+ $this->purgeCDNCache( array( $srcObj, $dstObj ) );
}
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
} catch ( NoSuchObjectException $e ) { // source object does not exist
$status->fatal( 'backend-fail-move', $params['src'], $params['dst'] );
} catch ( CloudFilesException $e ) { // some other exception?
try {
$sContObj = $this->getContainer( $srcCont );
+ $srcObj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
if ( !empty( $params['async'] ) ) { // deferred
$handle = $sContObj->delete_object_async( $srcRel );
$status->value = new SwiftFileOpHandle( $this, $params, 'Delete', $handle );
+ $status->value->affectedObjects[] = $srcObj;
} else { // actually write the object in Swift
$sContObj->delete_object( $srcRel );
+ $this->purgeCDNCache( array( $srcObj ) );
}
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
} catch ( NoSuchContainerException $e ) {
$status->fatal( 'backend-fail-delete', $params['src'] );
} catch ( NoSuchObjectException $e ) {
// (b) Create container as needed
try {
$contObj = $this->createContainer( $fullCont );
+ // Make container public to end-users...
if ( $this->swiftAnonUser != '' ) {
- // Make container public to end-users...
$status->merge( $this->setContainerAccess(
$contObj,
array( $this->auth->username, $this->swiftAnonUser ), // read
array( $this->auth->username ) // write
) );
}
+ if ( $this->swiftUseCDN ) { // Rackspace style CDN
+ $contObj->make_public();
+ }
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
return $status;
protected function doSecureInternal( $fullCont, $dir, array $params ) {
$status = Status::newGood();
- if ( $this->swiftAnonUser != '' ) {
- // Restrict container from end-users...
- try {
- // doPrepareInternal() should have been called,
- // so the Swift container should already exist...
- $contObj = $this->getContainer( $fullCont ); // normally a cache hit
- // NoSuchContainerException not thrown: container must exist
- if ( !isset( $contObj->mw_wasSecured ) ) {
- $status->merge( $this->setContainerAccess(
- $contObj,
- array( $this->auth->username ), // read
- array( $this->auth->username ) // write
- ) );
- // @TODO: when php-cloudfiles supports container
- // metadata, we can make use of that to avoid RTTs
- $contObj->mw_wasSecured = true; // avoid useless RTTs
- }
- } catch ( CloudFilesException $e ) { // some other exception?
- $this->handleException( $e, $status, __METHOD__, $params );
+ // Restrict container from end-users...
+ try {
+ // doPrepareInternal() should have been called,
+ // so the Swift container should already exist...
+ $contObj = $this->getContainer( $fullCont ); // normally a cache hit
+ // NoSuchContainerException not thrown: container must exist
+
+ // Make container private to end-users...
+ if ( $this->swiftAnonUser != '' && !isset( $contObj->mw_wasSecured ) ) {
+ $status->merge( $this->setContainerAccess(
+ $contObj,
+ array( $this->auth->username ), // read
+ array( $this->auth->username ) // write
+ ) );
+ // @TODO: when php-cloudfiles supports container
+ // metadata, we can make use of that to avoid RTTs
+ $contObj->mw_wasSecured = true; // avoid useless RTTs
+ }
+ if ( $this->swiftUseCDN && $contObj->is_public() ) { // Rackspace style CDN
+ $contObj->make_private();
}
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
+ } catch ( CloudFilesException $e ) { // some other exception?
+ $this->handleException( $e, $status, __METHOD__, $params );
}
return $status;
$status = Status::newGood();
$scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
if ( $status->isOK() ) {
- $tmpFile = $this->getLocalCopy( array( 'src' => $path, 'latest' => 1 ) );
+ # Do not stat the file in getLocalCopy() to avoid infinite loops
+ $tmpFile = $this->getLocalCopy( array( 'src' => $path, 'latest' => 1, 'nostat' => 1 ) );
if ( $tmpFile ) {
$hash = $tmpFile->getSha1Base36();
if ( $hash !== false ) {
$data = false;
try {
$sContObj = $this->getContainer( $srcCont );
- $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD request
+ $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
$data = $obj->read( $this->headersFromParams( $params ) );
} catch ( NoSuchContainerException $e ) {
} catch ( CloudFilesException $e ) { // some other exception?
*/
public function getDirListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
$dirs = array();
+ if ( $after === INF ) {
+ return $dirs; // nothing more
+ }
+ wfProfileIn( __METHOD__ . '-' . $this->name );
try {
$container = $this->getContainer( $fullCont );
if ( substr( $object, -1 ) === '/' ) {
$dirs[] = $object; // directories end in '/'
}
- $after = $object; // update last item
}
// Recursive: list all dirs under $dir and its subdirs
} else {
}
$lastDir = $objectDir;
}
- $after = $object; // update last item
}
}
+ if ( count( $objects ) < $limit ) {
+ $after = INF; // avoid a second RTT
+ } else {
+ $after = end( $objects ); // update last item
+ }
} catch ( NoSuchContainerException $e ) {
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, null, __METHOD__,
array( 'cont' => $fullCont, 'dir' => $dir ) );
}
+ wfProfileOut( __METHOD__ . '-' . $this->name );
return $dirs;
}
*/
public function getFileListPageInternal( $fullCont, $dir, &$after, $limit, array $params ) {
$files = array();
+ if ( $after === INF ) {
+ return $files; // nothing more
+ }
+ wfProfileIn( __METHOD__ . '-' . $this->name );
try {
$container = $this->getContainer( $fullCont );
}
// Recursive: list all files under $dir and its subdirs
} else { // files
- $files = $container->list_objects( $limit, $after, $prefix );
+ $objects = $container->list_objects( $limit, $after, $prefix );
+ $files = $objects;
+ }
+ if ( count( $objects ) < $limit ) {
+ $after = INF; // avoid a second RTT
+ } else {
+ $after = end( $objects ); // update last item
}
- $after = end( $files ); // update last item
- reset( $files ); // reset pointer
} catch ( NoSuchContainerException $e ) {
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, null, __METHOD__,
array( 'cont' => $fullCont, 'dir' => $dir ) );
}
+ wfProfileOut( __METHOD__ . '-' . $this->name );
return $files;
}
try {
$output = fopen( 'php://output', 'wb' );
- $obj = new CF_Object( $cont, $srcRel, false, false ); // skip HEAD request
+ $obj = new CF_Object( $cont, $srcRel, false, false ); // skip HEAD
$obj->stream( $output, $this->headersFromParams( $params ) );
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status, __METHOD__, $params );
return null;
}
- if ( !$this->fileExists( $params ) ) {
+ # Check the recursion guard to avoid loops when filling metadata
+ if ( empty( $params['nostat'] ) && !$this->fileExists( $params ) ) {
return null;
}
try { // catch exceptions; update status
$function = '_getResponse' . $fileOpHandles[$index]->call;
$this->$function( $cfOp, $status, $fileOpHandles[$index]->params );
+ $this->purgeCDNCache( $fileOpHandles[$index]->affectedObjects );
} catch ( CloudFilesException $e ) { // some other exception?
$this->handleException( $e, $status,
__CLASS__ . ":$function", $fileOpHandles[$index]->params );
$statuses[$index] = $status;
}
- foreach ( $fileOpHandles as $fileOpHandle ) {
- $fileOpHandle->closeResources();
- }
-
return $statuses;
}
return $req->execute(); // should return 204
}
+ /**
+ * Purge the CDN cache of affected objects if CDN caching is enabled
+ *
+ * @param $objects Array List of CF_Object items
+ * @return void
+ */
+ public function purgeCDNCache( array $objects ) {
+ if ( $this->swiftUseCDN ) { // Rackspace style CDN
+ foreach ( $objects as $object ) {
+ try {
+ $object->purge_from_cdn();
+ } catch ( CDNNotEnabledException $e ) {
+ // CDN not enabled; nothing to see here
+ } catch ( CloudFilesException $e ) {
+ $this->handleException( $e, null, __METHOD__,
+ array( 'cont' => $object->container->name, 'obj' => $object->name ) );
+ }
+ }
+ }
+ }
+
/**
* Get a connection to the Swift proxy
*
* @return CF_Connection|bool False on failure
- * @throws InvalidResponseException
+ * @throws CloudFilesException
*/
protected function getConnection() {
- if ( $this->conn === false ) {
- throw new InvalidResponseException; // failed last attempt
+ if ( $this->connException instanceof Exception ) {
+ throw $this->connException; // failed last attempt
}
// Session keys expire after a while, so we renew them periodically
if ( $this->conn && ( time() - $this->connStarted ) > $this->authTTL ) {
$this->conn = null;
}
// Authenticate with proxy and get a session key...
- if ( $this->conn === null ) {
+ if ( !$this->conn ) {
+ $this->connStarted = 0;
$this->connContainers = array();
try {
$this->auth->authenticate();
$this->conn = new CF_Connection( $this->auth );
$this->connStarted = time();
- } catch ( AuthenticationException $e ) {
- $this->conn = false; // don't keep re-trying
- } catch ( InvalidResponseException $e ) {
- $this->conn = false; // don't keep re-trying
+ } catch ( CloudFilesException $e ) {
+ $this->connException = $e; // don't keep re-trying
+ throw $e; // throw it back
}
}
- if ( !$this->conn ) {
- throw new InvalidResponseException; // auth/connection problem
- }
return $this->conn;
}
* @param $container string Container name
* @param $bypassCache bool Bypass all caches and load from Swift
* @return CF_Container
- * @throws NoSuchContainerException
- * @throws InvalidResponseException
+ * @throws CloudFilesException
*/
protected function getContainer( $container, $bypassCache = false ) {
$conn = $this->getConnection(); // Swift proxy connection
class SwiftFileOpHandle extends FileBackendStoreOpHandle {
/** @var CF_Async_Op */
public $cfOp;
+ /** @var Array */
+ public $affectedObjects = array();
public function __construct( $backend, array $params, $call, CF_Async_Op $cfOp ) {
$this->backend = $backend;
/**
* @see FileJournal::logChangeBatch()
- * @return Status
+ * @return Status
*/
protected function doLogChangeBatch( array $entries, $batchId ) {
$status = Status::newGood();
- $dbw = $this->getMasterDB();
- if ( !$dbw ) {
+ try {
+ $dbw = $this->getMasterDB();
+ } catch ( DBError $e ) {
$status->fatal( 'filejournal-fail-dbconnect', $this->backend );
return $status;
}
+
$now = wfTimestamp( TS_UNIX );
$data = array();
return $status;
}
+ /**
+ * @see FileJournal::doGetChangeEntries()
+ * @return Array
+ * @throws DBError
+ */
+ protected function doGetChangeEntries( $start, $limit ) {
+ $dbw = $this->getMasterDB();
+
+ $res = $dbw->select( 'filejournal', '*',
+ array(
+ 'fj_backend' => $this->backend,
+ 'fj_id >= ' . $dbw->addQuotes( (int)$start ) ), // $start may be 0
+ __METHOD__,
+ array_merge( array( 'ORDER BY' => 'fj_id ASC' ),
+ $limit ? array( 'LIMIT' => $limit ) : array() )
+ );
+
+ $entries = array();
+ foreach ( $res as $row ) {
+ $item = array();
+ foreach ( (array)$row as $key => $value ) {
+ $item[substr( $key, 3 )] = $value; // "fj_op" => "op"
+ }
+ $entries[] = $item;
+ }
+
+ return $entries;
+ }
+
/**
* @see FileJournal::purgeOldLogs()
* @return Status
+ * @throws DBError
*/
protected function doPurgeOldLogs() {
$status = Status::newGood();
}
$dbw = $this->getMasterDB();
- if ( !$dbw ) {
- $status->fatal( 'filejournal-fail-dbconnect', $this->backend );
- return $status;
- }
$dbCutoff = $dbw->timestamp( time() - 86400 * $this->ttlDays );
- try {
- $dbw->begin();
- $dbw->delete( 'filejournal',
- array( 'fj_timestamp < ' . $dbw->addQuotes( $dbCutoff ) ),
- __METHOD__
- );
- $dbw->commit();
- } catch ( DBError $e ) {
- $status->fatal( 'filejournal-fail-dbquery', $this->backend );
- return $status;
- }
+ $dbw->begin();
+ $dbw->delete( 'filejournal',
+ array( 'fj_timestamp < ' . $dbw->addQuotes( $dbCutoff ) ),
+ __METHOD__
+ );
+ $dbw->commit();
return $status;
}
/**
* Get a master connection to the logging DB
- *
- * @return DatabaseBase|null
+ *
+ * @return DatabaseBase
+ * @throws DBError
*/
protected function getMasterDB() {
- try {
- $lb = wfGetLBFactory()->newMainLB();
- return $lb->getConnection( DB_MASTER, array(), $this->wiki );
- } catch ( DBConnectionError $e ) {
- return null;
- }
+ $lb = wfGetLBFactory()->newMainLB();
+ return $lb->getConnection( DB_MASTER, array(), $this->wiki );
}
}
/**
* Create an appropriate FileJournal object from config
- *
+ *
* @param $config Array
* @param $backend string A registered file backend name
+ * @throws MWException
* @return FileJournal
*/
final public static function factory( array $config, $backend ) {
*/
abstract protected function doLogChangeBatch( array $entries, $batchId );
+ /**
+ * Get an array of file change log entries.
+ * A starting change ID and/or limit can be specified.
+ *
+ * The result as a list of associative arrays, each having:
+ * id : unique, monotonic, ID for this change
+ * batch_uuid : UUID for an operation batch
+ * backend : the backend name
+ * op : primitive operation (create,update,delete)
+ * path : affected storage path
+ * path_sha1 : base 36 sha1 of the affected storage path
+ * timestamp : TS_MW timestamp of the batch change
+
+ * Also, $next is updated to the ID of the next entry.
+ *
+ * @param $start integer Starting change ID or null
+ * @param $limit integer Maximum number of items to return
+ * @param &$next string
+ * @return Array
+ */
+ final public function getChangeEntries( $start = null, $limit = 0, &$next = null ) {
+ $entries = $this->doGetChangeEntries( $start, $limit ? $limit + 1 : 0 );
+ if ( $limit && count( $entries ) > $limit ) {
+ $last = array_pop( $entries ); // remove the extra entry
+ $next = $last['id']; // update for next call
+ } else {
+ $next = null; // end of list
+ }
+ return $entries;
+ }
+
+ /**
+ * @see FileJournal::getChangeEntries()
+ * @return Array
+ */
+ abstract protected function doGetChangeEntries( $start, $limit );
+
/**
* Purge any old log entries
- *
- * @return Status
+ *
+ * @return Status
*/
final public function purgeOldLogs() {
return $this->doPurgeOldLogs();
class NullFileJournal extends FileJournal {
/**
* @see FileJournal::logChangeBatch()
- * @return Status
+ * @param $entries array
+ * @param $batchId string
+ * @return Status
*/
protected function doLogChangeBatch( array $entries, $batchId ) {
return Status::newGood();
}
+ /**
+ * @see FileJournal::doGetChangeEntries()
+ * @return Array
+ */
+ protected function doGetChangeEntries( $start, $limit ) {
+ return array();
+ }
+
/**
* @see FileJournal::purgeOldLogs()
* @return Status
/**
* @see LockManager::doLock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doLock( array $paths, $type ) {
/**
* @see LockManager::doUnlock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doUnlock( array $paths, $type ) {
self::LOCK_EX => self::LOCK_EX
);
+ /**
+ * @param $lockDb string
+ * @param $db DatabaseBase
+ */
protected function initConnection( $lockDb, DatabaseBase $db ) {
# Let this transaction see lock rows from other transactions
$db->query( "SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;" );
}
+ /**
+ * @param $lockDb string
+ * @param $paths array
+ * @param $type int
+ * @return bool
+ */
protected function doLockingQuery( $lockDb, array $paths, $type ) {
$db = $this->getConnection( $lockDb );
if ( !$db ) {
/**
* @see LockManager::doLock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doLock( array $paths, $type ) {
/**
* @see LockManager::doUnlock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doUnlock( array $paths, $type ) {
return $status;
}
+ /**
+ * @param $path string
+ * @param $handlesToClose array
+ * @return Status
+ */
private function closeLockHandles( $path, array $handlesToClose ) {
$status = Status::newGood();
foreach ( $handlesToClose as $handle ) {
return $status;
}
+ /**
+ * @param $path string
+ * @return Status
+ */
private function pruneKeyLockFiles( $path ) {
$status = Status::newGood();
if ( !count( $this->locksHeld[$path] ) ) {
/**
* @see LockManager::doLock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doLock( array $paths, $type ) {
/**
* @see LockManager::doUnlock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doUnlock( array $paths, $type ) {
class NullLockManager extends LockManager {
/**
* @see LockManager::doLock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doLock( array $paths, $type ) {
/**
* @see LockManager::doUnlock()
+ * @param $paths array
+ * @param $type int
* @return Status
*/
protected function doUnlock( array $paths, $type ) {
protected $managers = array();
protected function __construct() {}
+
/**
* @return LockManagerGroup
*/
*/
protected $url, $extension, $name, $path, $hashPath, $pageCount, $transformScript;
+ protected $redirectTitle;
+
/**
* @var bool
*/
*
* @param $title Title|string
* @param $exception string|bool Use 'exception' to throw an error on bad titles
+ * @throws MWException
* @return Title|null
*/
static function normalizeTitle( $title, $exception = false ) {
*
* @return array
*/
- function getHistory($limit = null, $start = null, $end = null, $inc=true) {
+ function getHistory( $limit = null, $start = null, $end = null, $inc=true ) {
return array();
}
}
// Dummy functions...
+
+ /**
+ * @return bool
+ */
public function exists() {
return $this->mExists;
}
+ /**
+ * @return bool
+ */
public function getPath() {
return false;
}
+ /**
+ * @param Array $params
+ * @param int $flags
+ * @return bool|MediaTransformOutput
+ */
function transform( $params, $flags = 0 ) {
if( !$this->canRender() ) {
// show icon
}
// Info we can get from API...
+
+ /**
+ * @param $page int
+ * @return int|number
+ */
public function getWidth( $page = 1 ) {
return isset( $this->mInfo['width'] ) ? intval( $this->mInfo['width'] ) : 0;
}
return isset( $this->mInfo['height'] ) ? intval( $this->mInfo['height'] ) : 0;
}
+ /**
+ * @return bool|null|string
+ */
public function getMetadata() {
if ( isset( $this->mInfo['metadata'] ) ) {
return serialize( self::parseMetadata( $this->mInfo['metadata'] ) );
return null;
}
+ /**
+ * @param $metadata array
+ * @return array
+ */
public static function parseMetadata( $metadata ) {
if( !is_array( $metadata ) ) {
return $metadata;
return $ret;
}
+ /**
+ * @return bool|int|null
+ */
public function getSize() {
return isset( $this->mInfo['size'] ) ? intval( $this->mInfo['size'] ) : null;
}
+ /**
+ * @return null|string
+ */
public function getUrl() {
return isset( $this->mInfo['url'] ) ? strval( $this->mInfo['url'] ) : null;
}
+ /**
+ * @param string $method
+ * @return int|null|string
+ */
public function getUser( $method='text' ) {
return isset( $this->mInfo['user'] ) ? strval( $this->mInfo['user'] ) : null;
}
+ /**
+ * @return null|string
+ */
public function getDescription() {
return isset( $this->mInfo['comment'] ) ? strval( $this->mInfo['comment'] ) : null;
}
+ /**
+ * @return null|String
+ */
function getSha1() {
return isset( $this->mInfo['sha1'] )
? wfBaseConvert( strval( $this->mInfo['sha1'] ), 16, 36, 31 )
: null;
}
+ /**
+ * @return bool|Mixed|string
+ */
function getTimestamp() {
return wfTimestamp( TS_MW,
isset( $this->mInfo['timestamp'] )
);
}
+ /**
+ * @return string
+ */
function getMimeType() {
if( !isset( $this->mInfo['mime'] ) ) {
$magic = MimeMagic::singleton();
return $this->mInfo['mime'];
}
- /// @todo FIXME: May guess wrong on file types that can be eg audio or video
+ /**
+ * @todo FIXME: May guess wrong on file types that can be eg audio or video
+ * @return int|string
+ */
function getMediaType() {
$magic = MimeMagic::singleton();
return $magic->getMediaType( null, $this->getMimeType() );
}
+ /**
+ * @return bool|string
+ */
function getDescriptionUrl() {
return isset( $this->mInfo['descriptionurl'] )
? $this->mInfo['descriptionurl']
/**
* Only useful if we're locally caching thumbs anyway...
+ * @param $suffix string
* @return null|string
*/
function getThumbPath( $suffix = '' ) {
}
}
+ /**
+ * @return array
+ */
function getThumbnails() {
$dir = $this->getThumbPath( $this->getName() );
$iter = $this->repo->getBackend()->getFileList( array( 'dir' => $dir ) );
$wgMemc->delete( $key );
}
+ /**
+ * @param $options array
+ */
function purgeThumbnails( $options = array() ) {
global $wgMemc;
return $file;
}
+ /**
+ * @param $srcPath String
+ * @param $flags int
+ * @throws MWException
+ */
function publish( $srcPath, $flags = 0 ) {
$this->readOnlyError();
}
+ /**
+ * @param $oldver
+ * @param $desc string
+ * @param $license string
+ * @param $copyStatus string
+ * @param $source string
+ * @param $watch bool
+ * @param $timestamp bool|string
+ * @throws MWException
+ */
function recordUpload( $oldver, $desc, $license = '', $copyStatus = '', $source = '',
$watch = false, $timestamp = false ) {
$this->readOnlyError();
}
+ /**
+ * @param $versions array
+ * @param $unsuppress bool
+ * @throws MWException
+ */
function restore( $versions = array(), $unsuppress = false ) {
$this->readOnlyError();
}
+ /**
+ * @param $reason string
+ * @param $suppress bool
+ * @throws MWException
+ */
function delete( $reason, $suppress = false ) {
$this->readOnlyError();
}
+ /**
+ * @param $target Title
+ * @throws MWException
+ */
function move( $target ) {
$this->readOnlyError();
}
$dbw->update( 'image',
array(
+ 'img_size' => $this->size, // sanity
'img_width' => $this->width,
'img_height' => $this->height,
'img_bits' => $this->bits,
/**
* Fix thumbnail files from 1.4 or before, with extreme prejudice
+ * @TODO: do we still care about this? Perhaps a maintenance script
+ * can be made instead. Enabling this code results in a serious
+ * RTT regression for wikis without 404 handling.
*/
function migrateThumbFile( $thumbName ) {
$thumbDir = $this->getThumbPath();
}
*/
+ /*
if ( $this->repo->fileExists( $thumbDir ) ) {
// Delete file where directory should be
$this->repo->cleanupBatch( array( $thumbDir ) );
}
+ */
}
/** getHandler inherited */
* @return array first element is the base dir, then files in that base dir.
*/
function getThumbnails( $archiveName = false ) {
- $this->load();
-
if ( $archiveName ) {
$dir = $this->getArchiveThumbPath( $archiveName );
} else {
*/
function purgeOldThumbnails( $archiveName ) {
global $wgUseSquid;
+ wfProfileIn( __METHOD__ );
+
// Get a list of old thumbnails and URLs
$files = $this->getThumbnails( $archiveName );
$dir = array_shift( $files );
}
SquidUpdate::purge( $urls );
}
+
+ wfProfileOut( __METHOD__ );
}
/**
*/
function purgeThumbnails( $options = array() ) {
global $wgUseSquid;
+ wfProfileIn( __METHOD__ );
// Delete thumbnails
$files = $this->getThumbnails();
}
SquidUpdate::purge( $urls );
}
+
+ wfProfileOut( __METHOD__ );
}
/**
function recordUpload2(
$oldver, $comment, $pageText, $props = false, $timestamp = false, $user = null
) {
+ wfProfileIn( __METHOD__ );
+
if ( is_null( $user ) ) {
global $wgUser;
$user = $wgUser;
$dbw->begin( __METHOD__ );
if ( !$props ) {
+ wfProfileIn( __METHOD__ . '-getProps' );
$props = $this->repo->getFileProps( $this->getVirtualUrl() );
+ wfProfileOut( __METHOD__ . -'getProps' );
}
if ( $timestamp === false ) {
$props['timestamp'] = wfTimestamp( TS_MW, $timestamp ); // DB -> TS_MW
$this->setProps( $props );
- # Delete thumbnails
- $this->purgeThumbnails();
-
- # The file is already on its final location, remove it from the squid cache
- SquidUpdate::purge( array( $this->getURL() ) );
-
# Fail now if the file isn't there
if ( !$this->fileExists ) {
wfDebug( __METHOD__ . ": File " . $this->getRel() . " went missing!\n" );
+ wfProfileOut( __METHOD__ );
return false;
}
__METHOD__,
'IGNORE'
);
-
if ( $dbw->affectedRows() == 0 ) {
# (bug 34993) Note: $oldver can be empty here, if the previous
# version of the file was broken. Allow registration of the new
$action = $reupload ? 'overwrite' : 'upload';
$log->addEntry( $action, $descTitle, $comment, array(), $user );
+ wfProfileIn( __METHOD__ . '-edit' );
if ( $descTitle->exists() ) {
# Create a null revision
$latest = $descTitle->getLatestRevID();
# Squid and file cache for the description page are purged by doEdit.
$wikiPage->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
}
+ wfProfileOut( __METHOD__ . '-edit' );
# Commit the transaction now, in case something goes wrong later
# The most important thing is that files don't get lost, especially archives
# which in fact doesn't really exist (bug 24978)
$this->saveToCache();
+ if ( $reupload ) {
+ # Delete old thumbnails
+ wfProfileIn( __METHOD__ . '-purge' );
+ $this->purgeThumbnails();
+ wfProfileOut( __METHOD__ . '-purge' );
+
+ # Remove the old file from the squid cache
+ SquidUpdate::purge( array( $this->getURL() ) );
+ }
+
# Hooks, hooks, the magic of hooks...
+ wfProfileIn( __METHOD__ . '-hooks' );
wfRunHooks( 'FileUpload', array( $this, $reupload, $descTitle->exists() ) );
+ wfProfileOut( __METHOD__ . '-hooks' );
# Invalidate cache for all pages using this file
$update = new HTMLCacheUpdate( $this->getTitle(), 'imagelinks' );
$update->doUpdate();
}
+ wfProfileOut( __METHOD__ );
return true;
}
const CACHE_VERSION = 1;
const MAX_CACHE_ROWS = 20;
+ /**
+ * @param $title Title
+ * @param $repo FileRepo
+ * @param $time null
+ * @return OldLocalFile
+ * @throws MWException
+ */
static function newFromTitle( $title, $repo, $time = null ) {
# The null default value is only here to avoid an E_STRICT
if ( $time === null ) {
return new self( $title, $repo, $time, null );
}
+ /**
+ * @param $title Title
+ * @param $repo FileRepo
+ * @param $archiveName
+ * @return OldLocalFile
+ */
static function newFromArchiveName( $title, $repo, $archiveName ) {
return new self( $title, $repo, null, $archiveName );
}
+ /**
+ * @param $row
+ * @param $repo FileRepo
+ * @return OldLocalFile
+ */
static function newFromRow( $row, $repo ) {
$title = Title::makeTitle( NS_FILE, $row->oi_name );
$file = new self( $title, $repo, null, $row->oi_archive_name );
return false;
}
}
-
+
/**
* Fields in the oldimage table
* @return array
* @param $repo FileRepo
* @param $time String: timestamp or null to load by archive name
* @param $archiveName String: archive name or null to load by timestamp
+ * @throws MWException
*/
function __construct( $title, $repo, $time, $archiveName ) {
parent::__construct( $title, $repo );
}
}
+ /**
+ * @return bool
+ */
function getCacheKey() {
return false;
}
+ /**
+ * @return String
+ */
function getArchiveName() {
if ( !isset( $this->archive_name ) ) {
$this->load();
return $this->archive_name;
}
+ /**
+ * @return bool
+ */
function isOld() {
return true;
}
+ /**
+ * @return bool
+ */
function isVisible() {
return $this->exists() && !$this->isDeleted(File::DELETED_FILE);
}
wfProfileOut( __METHOD__ );
}
+ /**
+ * @param $prefix string
+ * @return array
+ */
function getCacheFields( $prefix = 'img_' ) {
$fields = parent::getCacheFields( $prefix );
$fields[] = $prefix . 'archive_name';
return $fields;
}
+ /**
+ * @return string
+ */
function getRel() {
return 'archive/' . $this->getHashPath() . $this->getArchiveName();
}
+ /**
+ * @return string
+ */
function getUrlRel() {
return 'archive/' . $this->getHashPath() . rawurlencode( $this->getArchiveName() );
}
wfDebug(__METHOD__.': upgrading '.$this->archive_name." to the current schema\n");
$dbw->update( 'oldimage',
array(
- 'oi_width' => $this->width,
- 'oi_height' => $this->height,
- 'oi_bits' => $this->bits,
+ 'oi_size' => $this->size, // sanity
+ 'oi_width' => $this->width,
+ 'oi_height' => $this->height,
+ 'oi_bits' => $this->bits,
'oi_media_type' => $this->media_type,
'oi_major_mime' => $major,
'oi_minor_mime' => $minor,
- 'oi_metadata' => $this->metadata,
- 'oi_sha1' => $this->sha1,
+ 'oi_metadata' => $this->metadata,
+ 'oi_sha1' => $this->sha1,
), array(
'oi_name' => $this->getName(),
'oi_archive_name' => $this->archive_name ),
$this->load();
return Revision::userCanBitfield( $this->deleted, $field, $user );
}
-
+
/**
* Upload a file directly into archive. Generally for Special:Import.
- *
+ *
* @param $srcPath string File system path of the source file
- * @param $archiveName string Full archive name of the file, in the form
- * $timestamp!$filename, where $filename must match $this->getName()
+ * @param $archiveName string Full archive name of the file, in the form
+ * $timestamp!$filename, where $filename must match $this->getName()
*
+ * @param $timestamp string
+ * @param $comment string
+ * @param $user
+ * @param $flags int
* @return FileRepoStatus
*/
function uploadOld( $srcPath, $archiveName, $timestamp, $comment, $user, $flags = 0 ) {
$this->lock();
-
+
$dstRel = 'archive/' . $this->getHashPath() . $archiveName;
$status = $this->publishTo( $srcPath, $dstRel,
$flags & File::DELETE_SOURCE ? FileRepo::DELETE_SOURCE : 0
);
-
+
if ( $status->isGood() ) {
if ( !$this->recordOldUpload( $srcPath, $archiveName, $timestamp, $comment, $user ) ) {
$status->fatal( 'filenotfound', $srcPath );
}
}
-
+
$this->unlock();
-
+
return $status;
}
-
+
/**
* Record a file upload in the oldimage table, without adding log entries.
- *
+ *
* @param $srcPath string File system path to the source file
* @param $archiveName string The archive name of the file
+ * @param $timestamp string
* @param $comment string Upload comment
* @param $user User User who did this upload
* @return bool
* @ingroup FileAbstraction
*/
class UnregisteredLocalFile extends File {
- var $title, $path, $mime, $dims;
+ var $title, $path, $mime, $dims, $metadata;
/**
* @var MediaHandler
/**
* Create an UnregisteredLocalFile based on a path or a (title,repo) pair.
* A FileRepo object is not required here, unlike most other File classes.
- *
+ *
* @throws MWException
* @param $title Title|bool
- * @param $repo FileRepo
- * @param $path string
- * @param $mime string
+ * @param $repo FileRepo|bool
+ * @param $path string|bool
+ * @param $mime string|bool
*/
function __construct( $title = false, $repo = false, $path = false, $mime = false ) {
if ( !( $title && $repo ) && !$path ) {
$this->dims = array();
}
+ /**
+ * @param $page int
+ * @return bool
+ */
private function cachePageDimensions( $page = 1 ) {
if ( !isset( $this->dims[$page] ) ) {
if ( !$this->getHandler() ) {
return $this->dims[$page];
}
+ /**
+ * @param $page int
+ * @return number
+ */
function getWidth( $page = 1 ) {
$dim = $this->cachePageDimensions( $page );
return $dim['width'];
}
+ /**
+ * @param $page int
+ * @return number
+ */
function getHeight( $page = 1 ) {
$dim = $this->cachePageDimensions( $page );
return $dim['height'];
}
+ /**
+ * @return bool|string
+ */
function getMimeType() {
if ( !isset( $this->mime ) ) {
$magic = MimeMagic::singleton();
return $this->mime;
}
+ /**
+ * @param $filename String
+ * @return Array|bool
+ */
function getImageSize( $filename ) {
if ( !$this->getHandler() ) {
return false;
return $this->handler->getImageSize( $this, $this->getLocalRefPath() );
}
+ /**
+ * @return bool
+ */
function getMetadata() {
if ( !isset( $this->metadata ) ) {
if ( !$this->getHandler() ) {
return $this->metadata;
}
+ /**
+ * @return bool|string
+ */
function getURL() {
if ( $this->repo ) {
return $this->repo->getZoneUrl( 'public' ) . '/' .
}
}
+ /**
+ * @return bool|int
+ */
function getSize() {
$this->assertRepoDefined();
$props = $this->repo->getFileProps( $this->path );
// Don't access the database
$GLOBALS['wgUseDatabaseMessages'] = false;
+ // Don't cache langconv tables
+ $GLOBALS['wgLanguageConverterCacheType'] = CACHE_NONE;
// Debug-friendly
$GLOBALS['wgShowExceptionDetails'] = true;
// Don't break forms
* @defgroup JobQueue JobQueue
*/
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( "This file is part of MediaWiki, it is not a valid entry point\n" );
-}
-
/**
* Class to both describe a background job and handle jobs.
*
$parserOutput = $wgParser->parse( $revision->getText(), $this->title, $options, true, true, $revision->getId() );
wfProfileOut( __METHOD__.'-parse' );
wfProfileIn( __METHOD__.'-update' );
- $update = new LinksUpdate( $this->title, $parserOutput, false );
- $update->doUpdate();
+
+ $updates = $parserOutput->getSecondaryDataUpdates( $this->title, false );
+ DataUpdate::runUpdates( $updates );
+
wfProfileOut( __METHOD__.'-update' );
wfProfileOut( __METHOD__ );
return true;
$parserOutput = $wgParser->parse( $revision->getText(), $title, $options, true, true, $revision->getId() );
wfProfileOut( __METHOD__.'-parse' );
wfProfileIn( __METHOD__.'-update' );
- $update = new LinksUpdate( $title, $parserOutput, false );
- $update->doUpdate();
+
+ $updates = $parserOutput->getSecondaryDataUpdates( $title, false );
+ DataUpdate::runUpdates( $updates );
+
wfProfileOut( __METHOD__.'-update' );
wfWaitForSlaves();
}
* @file
*/
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( 1 );
-}
-
require_once dirname( __FILE__ ) . '/Services_JSON.php';
/**
* @param $keys Array List of strings
* @return Array
*/
- public function getBatch( array $keys ) {
+ public function getMulti( array $keys ) {
$res = array();
foreach ( $keys as $key ) {
$res[$key] = $this->get( $key );
* Delete an item.
* @param $key string
* @param $time int Amount of time to delay the operation (mostly memcached-specific)
- * @return bool success
+ * @return bool True if the item was deleted or not found, false on failure
*/
abstract public function delete( $key, $time = 0 );
--- /dev/null
+<?php
+/**
+ * Base class for memcached clients.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Base class for memcached clients.
+ *
+ * @ingroup Cache
+ */
+class MemcachedBagOStuff extends BagOStuff {
+ protected $client;
+
+ /**
+ * Fill in the defaults for any parameters missing from $params, using the
+ * backwards-compatible global variables
+ */
+ protected function applyDefaultParams( $params ) {
+ if ( !isset( $params['servers'] ) ) {
+ $params['servers'] = $GLOBALS['wgMemCachedServers'];
+ }
+ if ( !isset( $params['debug'] ) ) {
+ $params['debug'] = $GLOBALS['wgMemCachedDebug'];
+ }
+ if ( !isset( $params['persistent'] ) ) {
+ $params['persistent'] = $GLOBALS['wgMemCachedPersistent'];
+ }
+ if ( !isset( $params['compress_threshold'] ) ) {
+ $params['compress_threshold'] = 1500;
+ }
+ if ( !isset( $params['timeout'] ) ) {
+ $params['timeout'] = $GLOBALS['wgMemCachedTimeout'];
+ }
+ if ( !isset( $params['connect_timeout'] ) ) {
+ $params['connect_timeout'] = 0.1;
+ }
+ return $params;
+ }
+
+ /**
+ * @param $key string
+ * @return Mixed
+ */
+ public function get( $key ) {
+ return $this->client->get( $this->encodeKey( $key ) );
+ }
+
+ /**
+ * @param $key string
+ * @param $value
+ * @param $exptime int
+ * @return bool
+ */
+ public function set( $key, $value, $exptime = 0 ) {
+ return $this->client->set( $this->encodeKey( $key ), $value,
+ $this->fixExpiry( $exptime ) );
+ }
+
+ /**
+ * @param $key string
+ * @param $time int
+ * @return bool
+ */
+ public function delete( $key, $time = 0 ) {
+ return $this->client->delete( $this->encodeKey( $key ), $time );
+ }
+
+ /**
+ * @param $key string
+ * @param $value int
+ * @return Mixed
+ */
+ public function add( $key, $value, $exptime = 0 ) {
+ return $this->client->add( $this->encodeKey( $key ), $value,
+ $this->fixExpiry( $exptime ) );
+ }
+
+ /**
+ * @param $key string
+ * @param $value int
+ * @param $exptime
+ * @return Mixed
+ */
+ public function replace( $key, $value, $exptime = 0 ) {
+ return $this->client->replace( $this->encodeKey( $key ), $value,
+ $this->fixExpiry( $exptime ) );
+ }
+
+ /**
+ * Get the underlying client object. This is provided for debugging
+ * purposes.
+ */
+ public function getClient() {
+ return $this->client;
+ }
+
+ /**
+ * Encode a key for use on the wire inside the memcached protocol.
+ *
+ * We encode spaces and line breaks to avoid protocol errors. We encode
+ * the other control characters for compatibility with libmemcached
+ * verify_key. We leave other punctuation alone, to maximise backwards
+ * compatibility.
+ * @return string
+ */
+ public function encodeKey( $key ) {
+ return preg_replace_callback( '/[\x00-\x20\x25\x7f]+/',
+ array( $this, 'encodeKeyCallback' ), $key );
+ }
+
+ protected function encodeKeyCallback( $m ) {
+ return rawurlencode( $m[0] );
+ }
+
+ /**
+ * TTLs higher than 30 days will be detected as absolute TTLs
+ * (UNIX timestamps), and will result in the cache entry being
+ * discarded immediately because the expiry is in the past.
+ * Clamp expiries >30d at 30d, unless they're >=1e9 in which
+ * case they are likely to really be absolute (1e9 = 2011-09-09)
+ */
+ function fixExpiry( $expiry ) {
+ if ( $expiry > 2592000 && $expiry < 1000000000 ) {
+ $expiry = 2592000;
+ }
+ return $expiry;
+ }
+
+ /**
+ * Decode a key encoded with encodeKey(). This is provided as a convenience
+ * function for debugging.
+ *
+ * @param $key string
+ *
+ * @return string
+ */
+ public function decodeKey( $key ) {
+ return urldecode( $key );
+ }
+
+ /**
+ * Send a debug message to the log
+ */
+ protected function debugLog( $text ) {
+ global $wgDebugLogGroups;
+ if( !isset( $wgDebugLogGroups['memcached'] ) ) {
+ # Prefix message since it will end up in main debug log file
+ $text = "memcached: $text";
+ }
+ if ( substr( $text, -1 ) !== "\n" ) {
+ $text .= "\n";
+ }
+ wfDebugLog( 'memcached', $text );
+ }
+}
+
* @access private
*/
function _hashfunc( $key ) {
- # Hash function must on [0,0x7ffffff]
+ # Hash function must be in [0,0x7ffffff]
# We take the first 31 bits of the MD5 hash, which unlike the hash
# function used in a previous version of this client, works
return hexdec( substr( md5( $key ), 0, 8 ) ) & 0x7fffffff;
$this->stats[$cmd] = 1;
}
- // TTLs higher than 30 days will be detected as absolute TTLs
- // (UNIX timestamps), and will result in the cache entry being
- // discarded immediately because the expiry is in the past.
- // Clamp expiries >30d at 30d, unless they're >=1e9 in which
- // case they are likely to really be absolute (1e9 = 2011-09-09)
- if ( $exp > 2592000 && $exp < 1000000000 ) {
- $exp = 2592000;
- }
-
$flags = 0;
if ( !is_scalar( $val ) ) {
--- /dev/null
+<?php
+/**
+ * Object caching using memcached.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * A wrapper class for the PECL memcached client
+ *
+ * @ingroup Cache
+ */
+class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
+
+ /**
+ * Constructor
+ *
+ * Available parameters are:
+ * - servers: The list of IP:port combinations holding the memcached servers.
+ * - persistent: Whether to use a persistent connection
+ * - compress_threshold: The minimum size an object must be before it is compressed
+ * - timeout: The read timeout in microseconds
+ * - connect_timeout: The connect timeout in seconds
+ * - serializer: May be either "php" or "igbinary". Igbinary produces more compact
+ * values, but serialization is much slower unless the php.ini option
+ * igbinary.compact_strings is off.
+ */
+ function __construct( $params ) {
+ $params = $this->applyDefaultParams( $params );
+
+ if ( $params['persistent'] ) {
+ $this->client = new Memcached( __CLASS__ );
+ } else {
+ $this->client = new Memcached;
+ }
+
+ if ( !isset( $params['serializer'] ) ) {
+ $params['serializer'] = 'php';
+ }
+
+ // The compression threshold is an undocumented php.ini option for some
+ // reason. There's probably not much harm in setting it globally, for
+ // compatibility with the settings for the PHP client.
+ ini_set( 'memcached.compression_threshold', $params['compress_threshold'] );
+
+ // Set timeouts
+ $this->client->setOption( Memcached::OPT_CONNECT_TIMEOUT, $params['connect_timeout'] * 1000 );
+ $this->client->setOption( Memcached::OPT_SEND_TIMEOUT, $params['timeout'] );
+ $this->client->setOption( Memcached::OPT_RECV_TIMEOUT, $params['timeout'] );
+ $this->client->setOption( Memcached::OPT_POLL_TIMEOUT, $params['timeout'] / 1000 );
+
+ // Set libketama mode since it's recommended by the documentation and
+ // is as good as any. There's no way to configure libmemcached to use
+ // hashes identical to the ones currently in use by the PHP client, and
+ // even implementing one of the libmemcached hashes in pure PHP for
+ // forwards compatibility would require MWMemcached::get_sock() to be
+ // rewritten.
+ $this->client->setOption( Memcached::OPT_LIBKETAMA_COMPATIBLE, true );
+
+ // Set the serializer
+ switch ( $params['serializer'] ) {
+ case 'php':
+ $this->client->setOption( Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_PHP );
+ break;
+ case 'igbinary':
+ if ( !Memcached::HAVE_IGBINARY ) {
+ throw new MWException( __CLASS__.': the igbinary extension is not available ' .
+ 'but igbinary serialization was requested.' );
+ }
+ $this->client->setOption( Memcached::OPT_SERIALIZER, Memcached::SERIALIZER_IGBINARY );
+ break;
+ default:
+ throw new MWException( __CLASS__.': invalid value for serializer parameter' );
+ }
+ foreach ( $params['servers'] as $host ) {
+ list( $ip, $port ) = IP::splitHostAndPort( $host );
+ $this->client->addServer( $ip, $port );
+ }
+ }
+
+ /**
+ * @param $key string
+ * @return Mixed
+ */
+ public function get( $key ) {
+ $this->debugLog( "get($key)" );
+ return $this->checkResult( $key, parent::get( $key ) );
+ }
+
+ /**
+ * @param $key string
+ * @param $value
+ * @param $exptime int
+ * @return bool
+ */
+ public function set( $key, $value, $exptime = 0 ) {
+ $this->debugLog( "set($key)" );
+ return $this->checkResult( $key, parent::set( $key, $value, $exptime ) );
+ }
+
+ /**
+ * @param $key string
+ * @param $time int
+ * @return bool
+ */
+ public function delete( $key, $time = 0 ) {
+ $this->debugLog( "delete($key)" );
+ $result = parent::delete( $key, $time );
+ if ( $result === false && $this->client->getResultCode() === Memcached::RES_NOTFOUND ) {
+ // "Not found" is counted as success in our interface
+ return true;
+ } else {
+ return $this->checkResult( $key, $result );
+ }
+ }
+
+ /**
+ * @param $key string
+ * @param $value int
+ * @return Mixed
+ */
+ public function add( $key, $value, $exptime = 0 ) {
+ $this->debugLog( "add($key)" );
+ return $this->checkResult( $key, parent::add( $key, $value, $exptime ) );
+ }
+
+ /**
+ * @param $key string
+ * @param $value int
+ * @param $exptime
+ * @return Mixed
+ */
+ public function replace( $key, $value, $exptime = 0 ) {
+ $this->debugLog( "replace($key)" );
+ return $this->checkResult( $key, parent::replace( $key, $value, $exptime ) );
+ }
+
+ /**
+ * @param $key string
+ * @param $value int
+ * @return Mixed
+ */
+ public function incr( $key, $value = 1 ) {
+ $this->debugLog( "incr($key)" );
+ $result = $this->client->increment( $key, $value );
+ return $this->checkResult( $key, $result );
+ }
+
+ /**
+ * @param $key string
+ * @param $value int
+ * @return Mixed
+ */
+ public function decr( $key, $value = 1 ) {
+ $this->debugLog( "decr($key)" );
+ $result = $this->client->decrement( $key, $value );
+ return $this->checkResult( $key, $result );
+ }
+
+ /**
+ * Check the return value from a client method call and take any necessary
+ * action. Returns the value that the wrapper function should return. At
+ * present, the return value is always the same as the return value from
+ * the client, but some day we might find a case where it should be
+ * different.
+ *
+ * @param $key The key used by the caller, or false if there wasn't one.
+ * @param $result The return value
+ */
+ protected function checkResult( $key, $result ) {
+ if ( $result !== false ) {
+ return $result;
+ }
+ switch ( $this->client->getResultCode() ) {
+ case Memcached::RES_SUCCESS:
+ break;
+ case Memcached::RES_DATA_EXISTS:
+ case Memcached::RES_NOTSTORED:
+ case Memcached::RES_NOTFOUND:
+ $this->debugLog( "result: " . $this->client->getResultMessage() );
+ break;
+ default:
+ $msg = $this->client->getResultMessage();
+ if ( $key !== false ) {
+ $server = $this->client->getServerByKey( $key );
+ $serverName = "{$server['host']}:{$server['port']}";
+ $msg = "Memcached error for key \"$key\" on server \"$serverName\": $msg";
+ } else {
+ $msg = "Memcached error: $msg";
+ }
+ wfDebugLog( 'memcached-serious', $msg );
+ }
+ return $result;
+ }
+
+ /**
+ * @param $keys Array
+ * @return Array
+ */
+ public function getMulti( array $keys ) {
+ $this->debugLog( 'getMulti(' . implode( ', ', $keys ) . ')' );
+ $callback = array( $this, 'encodeKey' );
+ $result = $this->client->getMulti( array_map( $callback, $keys ) );
+ return $this->checkResult( false, $result );
+ }
+
+ /* NOTE: there is no cas() method here because it is currently not supported
+ * by the BagOStuff interface and other BagOStuff subclasses, such as
+ * SqlBagOStuff.
+ */
+}
*
* @ingroup Cache
*/
-class MemcachedPhpBagOStuff extends BagOStuff {
-
- /**
- * @var MemCachedClientforWiki
- */
- protected $client;
+class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
/**
* Constructor.
* @param $params array
*/
function __construct( $params ) {
- if ( !isset( $params['servers'] ) ) {
- $params['servers'] = $GLOBALS['wgMemCachedServers'];
- }
- if ( !isset( $params['debug'] ) ) {
- $params['debug'] = $GLOBALS['wgMemCachedDebug'];
- }
- if ( !isset( $params['persistent'] ) ) {
- $params['persistent'] = $GLOBALS['wgMemCachedPersistent'];
- }
- if ( !isset( $params['compress_threshold'] ) ) {
- $params['compress_threshold'] = 1500;
- }
- if ( !isset( $params['timeout'] ) ) {
- $params['timeout'] = $GLOBALS['wgMemCachedTimeout'];
- }
- if ( !isset( $params['connect_timeout'] ) ) {
- $params['connect_timeout'] = 0.1;
- }
+ $params = $this->applyDefaultParams( $params );
$this->client = new MemCachedClientforWiki( $params );
$this->client->set_servers( $params['servers'] );
$this->client->set_debug( $debug );
}
- /**
- * @param $key string
- * @return Mixed
- */
- public function get( $key ) {
- return $this->client->get( $this->encodeKey( $key ) );
- }
-
/**
* @param $keys Array
* @return Array
*/
- public function getBatch( array $keys ) {
+ public function getMulti( array $keys ) {
$callback = array( $this, 'encodeKey' );
return $this->client->get_multi( array_map( $callback, $keys ) );
}
- /**
- * @param $key string
- * @param $value
- * @param $exptime int
- * @return bool
- */
- public function set( $key, $value, $exptime = 0 ) {
- return $this->client->set( $this->encodeKey( $key ), $value, $exptime );
- }
-
- /**
- * @param $key string
- * @param $time int
- * @return bool
- */
- public function delete( $key, $time = 0 ) {
- return $this->client->delete( $this->encodeKey( $key ), $time );
- }
-
/**
* @param $key
* @param $timeout int
public function unlock( $key ) {
return $this->client->unlock( $this->encodeKey( $key ) );
}
-
- /**
- * @param $key string
- * @param $value int
- * @return Mixed
- */
- public function add( $key, $value, $exptime = 0 ) {
- return $this->client->add( $this->encodeKey( $key ), $value, $exptime );
- }
-
- /**
- * @param $key string
- * @param $value int
- * @param $exptime
- * @return Mixed
- */
- public function replace( $key, $value, $exptime = 0 ) {
- return $this->client->replace( $this->encodeKey( $key ), $value, $exptime );
- }
-
+
/**
* @param $key string
* @param $value int
public function decr( $key, $value = 1 ) {
return $this->client->decr( $this->encodeKey( $key ), $value );
}
-
- /**
- * Get the underlying client object. This is provided for debugging
- * purposes.
- *
- * @return MemCachedClientforWiki
- */
- public function getClient() {
- return $this->client;
- }
-
- /**
- * Encode a key for use on the wire inside the memcached protocol.
- *
- * We encode spaces and line breaks to avoid protocol errors. We encode
- * the other control characters for compatibility with libmemcached
- * verify_key. We leave other punctuation alone, to maximise backwards
- * compatibility.
- * @return string
- */
- public function encodeKey( $key ) {
- return preg_replace_callback( '/[\x00-\x20\x25\x7f]+/',
- array( $this, 'encodeKeyCallback' ), $key );
- }
-
- protected function encodeKeyCallback( $m ) {
- return rawurlencode( $m[0] );
- }
-
- /**
- * Decode a key encoded with encodeKey(). This is provided as a convenience
- * function for debugging.
- *
- * @param $key string
- *
- * @return string
- */
- public function decodeKey( $key ) {
- return urldecode( $key );
- }
}
/**
* Factory function that creates a memcached client object.
- * The idea of this is that it might eventually detect and automatically
- * support the PECL extension, assuming someone can get it to compile.
+ *
+ * This always uses the PHP client, since the PECL client has a different
+ * hashing scheme and a different interpretation of the flags bitfield, so
+ * switching between the two clients randomly would be disasterous.
*
* @param $params array
*
}
public function get( $key ) {
- $values = $this->getBatch( array( $key ) );
+ $values = $this->getMulti( array( $key ) );
return $values[$key];
}
- public function getBatch( array $keys ) {
+ public function getMulti( array $keys ) {
$values = array(); // array of (key => value)
$keysByTableName = array();
}
# Replace raw HTML by a placeholder
- # Add a blank line preceding, to prevent it from mucking up
- # immediately preceding headings
if ( $isHTML ) {
- $text = "\n\n" . $this->insertStripItem( $text );
+ $text = $this->insertStripItem( $text );
} elseif ( $nowiki && ( $this->ot['html'] || $this->ot['pre'] ) ) {
# Escape nowiki-style return values
$text = wfEscapeWikiText( $text );
$mProperties = array(), # Name/value pairs to be cached in the DB
$mTOCHTML = '', # HTML of the TOC
$mTimestamp; # Timestamp of the revision
- private $mIndexPolicy = ''; # 'index' or 'noindex'? Any other value will result in no change.
- private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
+ private $mIndexPolicy = ''; # 'index' or 'noindex'? Any other value will result in no change.
+ private $mAccessedOptions = array(); # List of ParserOptions (stored in the keys)
+ private $mSecondaryDataUpdates = array(); # List of instances of SecondaryDataObject(), used to cause some information extracted from the page in a custom place.
const EDITSECTION_REGEX = '#<(?:mw:)?editsection page="(.*?)" section="(.*?)"(?:/>|>(.*?)(</(?:mw:)?editsection>))#';
function recordOption( $option ) {
$this->mAccessedOptions[$option] = true;
}
+
+ /**
+ * Adds an update job to the output. Any update jobs added to the output will eventually bexecuted in order to
+ * store any secondary information extracted from the page's content.
+ *
+ * @param StorageUpdate $update
+ */
+ public function addSecondaryDataUpdate( DataUpdate $update ) {
+ $this->mSecondaryDataUpdates[] = $update;
+ }
+
+ /**
+ * Returns any DataUpdate jobs to be executed in order to store secondary information
+ * extracted from the page's content, including a LinksUpdate object for all links stored in
+ * this ParserOutput object.
+ *
+ * @param $title Title of the page we're updating. If not given, a title object will be created based on $this->getTitleText()
+ * @param $recursive Boolean: queue jobs for recursive updates?
+ *
+ * @return Array. An array of instances of DataUpdate
+ */
+ public function getSecondaryDataUpdates( Title $title = null, $recursive = true ) {
+ if ( !$title ) {
+ $title = Title::newFromText( $this->getTitleText() );
+ }
+
+ $linksUpdate = new LinksUpdate( $title, $this, $recursive );
+
+ if ( !$this->mSecondaryDataUpdates ) {
+ return array( $linksUpdate );
+ } else {
+ $updates = array_merge( $this->mSecondaryDataUpdates, array( $linksUpdate ) );
+ }
+
+ return $updates;
+ }
}
}
/**
- * @param $args
+ * @param $args array
* @return PPCustomFrame_DOM
*/
function newCustomFrame( $args ) {
}
/**
- * @param $args
+ * @param $args array
* @return PPCustomFrame_Hash
*/
function newCustomFrame( $args ) {
const CACHE_VERSION = 1;
+ /**
+ * @param $parser Parser
+ */
function __construct( $parser ) {
$this->parser = $parser;
}
}
/**
- * @param $args
+ * @param $args array
* @return PPCustomFrame_HipHop
*/
function newCustomFrame( array $args ) {
* cache may be implemented at a later date which takes further advantage of these strict
* dependency requirements.
*
+ * @throws MWException
* @return PPNode_HipHop_Tree
*/
function preprocessToObj( string $text, int $flags = 0 ) {
* @ingroup Parser
*/
class PPDStackElement_HipHop {
- var $open, // Opening character (\n for heading)
- $close, // Matching closing character
+ var $open, // Opening character (\n for heading)
+ $close, // Matching closing character
$count, // Number of opening characters found (number of "=" for heading)
$parts, // Array of PPDPart objects describing pipe-separated parts.
$lineStart; // True if the open char appeared at the start of the input line. Not set for headings.
+ /**
+ * @param $obj PPDStackElement_HipHop
+ * @return PPDStackElement_HipHop
+ */
static function cast( PPDStackElement_HipHop $obj ) {
return $obj;
}
+ /**
+ * @param $data array
+ */
function __construct( $data = array() ) {
$this->parts = array( new PPDPart_HipHop );
}
}
+ /**
+ * @return PPDAccum_HipHop
+ */
function getAccum() {
return PPDAccum_HipHop::cast( $this->parts[count($this->parts) - 1]->out );
}
+ /**
+ * @param $s string
+ */
function addPart( $s = '' ) {
$this->parts[] = new PPDPart_HipHop( $s );
}
+ /**
+ * @return PPDPart_HipHop
+ */
function getCurrentPart() {
return PPDPart_HipHop::cast( $this->parts[count($this->parts) - 1] );
}
/**
* Get the accumulator that would result if the close is not found.
*
+ * @param $openingCount bool
* @return PPDAccum_HipHop
*/
function breakSyntax( $openingCount = false ) {
* Create a new child frame
* $args is optionally a multi-root PPNode or array containing the template arguments
*
- * @param $args PPNode_HipHop_Array|array
- * @param $title Title|false
+ * @param $args PPNode_HipHop_Array|array|bool
+ * @param $title Title|bool
*
+ * @throws MWException
* @return PPTemplateFrame_HipHop
*/
function newChild( $args = false, $title = false ) {
/**
* Implode with no flags specified
* This previously called implodeWithFlags but has now been inlined to reduce stack depth
+ * @param $sep
* @return string
*/
function implode( $sep /*, ... */ ) {
* Makes an object that, when expand()ed, will be the same as one obtained
* with implode()
*
+ * @param $sep
* @return PPNode_HipHop_Array
*/
function virtualImplode( $sep /*, ... */ ) {
/**
* Virtual implode with brackets
*
+ * @param $start
+ * @param $sep
+ * @param $end
* @return PPNode_HipHop_Array
*/
function virtualBracketedImplode( $start, $sep, $end /*, ... */ ) {
var $numberedExpansionCache, $namedExpansionCache;
/**
- * @param $preprocessor
- * @param $parent
+ * @param $preprocessor Preprocessor_HipHop
+ * @param $parent bool
* @param $numberedArgs array
* @param $namedArgs array
- * @param $title Title
+ * @param $title Title|bool
*/
function __construct( $preprocessor, $parent = false, $numberedArgs = array(), $namedArgs = array(), $title = false ) {
parent::__construct( $preprocessor );
return $this->nextSibling;
}
+ /**
+ * @param $name string
+ * @return array
+ */
function getChildrenOfType( $name ) {
$children = array();
for ( $child = $this->firstChild; $child; $child = $child->nextSibling ) {
* index String index
* value PPNode value
*
+ * @throws MWException
* @return array
*/
function splitArg() {
* Split an <ext> node into an associative array containing name, attr, inner and close
* All values in the resulting array are PPNodes. Inner and close are optional.
*
+ * @throws MWException
* @return array
*/
function splitExt() {
/**
* Split an <h> node
*
+ * @throws MWException
* @return array
*/
function splitHeading() {
}
// Generate output
+ $isRaw = false;
foreach ( $modules as $name => $module ) {
/**
* @var $module ResourceLoaderModule
$missing[] = $name;
unset( $modules[$name] );
}
+ $isRaw |= $module->isRaw();
wfProfileOut( __METHOD__ . '-' . $name );
}
// Update module states
- if ( $context->shouldIncludeScripts() ) {
+ if ( $context->shouldIncludeScripts() && !$context->getRaw() && !$isRaw ) {
// Set the state of modules loaded as only scripts to ready
- if ( count( $modules ) && $context->getOnly() === 'scripts'
- && !isset( $modules['startup'] ) )
- {
+ if ( count( $modules ) && $context->getOnly() === 'scripts' ) {
$out .= self::makeLoaderStateScript(
array_fill_keys( array_keys( $modules ), 'ready' ) );
}
protected $only;
protected $version;
protected $hash;
+ protected $raw;
/* Methods */
$this->debug = $request->getFuzzyBool( 'debug', $wgResourceLoaderDebug );
$this->only = $request->getVal( 'only' );
$this->version = $request->getVal( 'version' );
+ $this->raw = $request->getFuzzyBool( 'raw' );
$skinnames = Skin::getSkinNames();
// If no skin is specified, or we don't recognize the skin, use the default skin
return $this->version;
}
+ /**
+ * @return bool
+ */
+ public function getRaw() {
+ return $this->raw;
+ }
+
/**
* @return bool
*/
protected $position = 'bottom';
/** Boolean: Link to raw files in debug mode */
protected $debugRaw = true;
+ /** Boolean: Whether mw.loader.state() call should be omitted */
+ protected $raw = false;
/**
* Array: Cache for mtime
* @par Usage:
break;
// Single booleans
case 'debugRaw':
+ case 'raw':
$this->{$member} = (bool) $option;
break;
}
return $this->dependencies;
}
+ /**
+ * @return bool
+ */
+ public function isRaw() {
+ return $this->raw;
+ }
+
/**
* Get the last modified timestamp of this module.
*
return 'bottom';
}
+ /**
+ * Whether this module's JS expects to work without the client-side ResourceLoader module.
+ * Returning true from this function will prevent mw.loader.state() call from being
+ * appended to the bottom of the script.
+ *
+ * @return bool
+ */
+ public function isRaw() {
+ return false;
+ }
+
/**
* Get the loader JS for this module, if set.
*
/* Methods */
+ /**
+ * @return bool
+ */
+ public function isRaw() {
+ return true;
+ }
+
/**
* @param $context ResourceLoaderContext
* @return string
* @author Roan Kattouw
*/
-defined( 'MEDIAWIKI' ) || die( 1 );
-
/**
* Abstraction for resource loader modules which pull from wiki pages
*
'MAX(ipb_user) AS blocked'
),
'options' => array(
- 'GROUP BY' => 'rc_user_text, user_id',
+ 'GROUP BY' => array( 'rc_user_text', 'user_id' ),
'USE INDEX' => array( 'recentchanges' => 'rc_user_text' )
),
'join_conds' => array(
array( 'wl_namespace', 'wl_title' ),
array( 'wl_user' => $this->getUser()->getId() ),
__METHOD__,
- array( 'ORDER BY' => 'wl_namespace, wl_title' )
+ array( 'ORDER BY' => array( 'wl_namespace', 'wl_title' ) )
);
$lb = new LinkBatch();
// useful to remove this. People _do_ create pages
// and never revise them, they aren't necessarily
// redirects.
- 'GROUP BY' => 'page_namespace, page_title, page_is_redirect' )
+ 'GROUP BY' => array( 'page_namespace', 'page_title', 'page_is_redirect' ) )
);
}
if( $dbr->implicitGroupby() ) {
$options = array( 'GROUP BY' => 'img_name' );
} else {
- $columnlist = implode( ',',
- preg_grep( '/^img/', array_keys( $this->getFieldNames() ) ) );
- $options = array( 'GROUP BY' => "img_user, $columnlist" );
+ $columnlist = preg_grep( '/^img/', array_keys( $this->getFieldNames() ) );
+ $options = array( 'GROUP BY' => array_merge( array( 'img_user' ), $columnlist ) );
}
$join_conds = array( 'oldimage' => array( 'LEFT JOIN', 'oi_name = img_name' ) );
}
'COUNT(*) AS value' ),
'conds' => array ( 'page_namespace' => MWNamespace::getContentNamespaces() ),
'options' => array ( 'HAVING' => 'COUNT(*) > 1',
- 'GROUP BY' => 'page_namespace, page_title' ),
+ 'GROUP BY' => array( 'page_namespace', 'page_title' ) ),
'join_conds' => array ( 'page' => array ( 'LEFT JOIN',
'page_id = cl_from' ) )
);
}
+ /**
+ * @param $db DatabaseBase
+ * @param $res
+ */
+ function preprocessResults( $db, $res ) {
+ # There's no point doing a batch check if we aren't caching results;
+ # the page must exist for it to have been pulled out of the table
+ if ( !$this->isCached() || !$res->numRows() ) {
+ return;
+ }
+
+ $batch = new LinkBatch();
+ foreach ( $res as $row ) {
+ $batch->add( $row->namespace, $row->title );
+ }
+ $batch->execute();
+
+ $res->seek( 0 );
+ }
+
/**
* @param $skin Skin
* @param $result
*/
function formatResult( $skin, $result ) {
$title = Title::makeTitleSafe( $result->namespace, $result->title );
+ if ( !$title ) {
+ return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+ Linker::getInvalidTitleDescription( $this->getContext(), $result->namespace, $result->title ) );
+ }
+
+ if ( $this->isCached() ) {
+ $link = Linker::link( $title );
+ } else {
+ $link = Linker::linkKnown( $title );
+ }
$count = $this->msg( 'ncategories' )->numParams( $result->value )->escaped();
- $link = Linker::link( $title );
+
return $this->getLanguage()->specialList( $link, $count );
}
}
'COUNT(*) AS value',
'page_namespace' ),
'options' => array ( 'HAVING' => 'COUNT(*) > 1',
- 'GROUP BY' => 'pl_namespace, pl_title, '.
- 'page_namespace' ),
+ 'GROUP BY' => array( 'pl_namespace', 'pl_title',
+ 'page_namespace' ) ),
'join_conds' => array ( 'page' => array ( 'LEFT JOIN',
array ( 'page_namespace = pl_namespace',
'page_title = pl_title' ) ) )
* @param $res
*/
function preprocessResults( $db, $res ) {
- if( $db->numRows( $res ) > 0 ) {
+ if ( $res->numRows() > 0 ) {
$linkBatch = new LinkBatch();
foreach ( $res as $row ) {
$linkBatch->add( $row->namespace, $row->title );
}
- $db->dataSeek( $res, 0 );
+ $res->seek( 0 );
$linkBatch->execute();
}
}
function formatResult( $skin, $result ) {
$title = Title::makeTitleSafe( $result->namespace, $result->title );
if ( !$title ) {
- return '<!-- ' . htmlspecialchars( "Invalid title: [[$title]]" ) . ' -->';
+ return Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+ Linker::getInvalidTitleDescription( $this->getContext(), $result->namespace, $result->title ) );
}
$link = Linker::link( $title );
$wlh = $this->makeWlhLink( $title,
'tl_title AS title',
'COUNT(*) AS value' ),
'conds' => array ( 'tl_namespace' => NS_TEMPLATE ),
- 'options' => array( 'GROUP BY' => 'tl_namespace, tl_title' )
+ 'options' => array( 'GROUP BY' => array( 'tl_namespace', 'tl_title' ) )
);
}
// Byte limit (not string length limit) for wpReason and wpNewTitleMain
// is enforced in the mediawiki.special.movePage module
+ $immovableNamespaces = array();
+
+ foreach ( array_keys( $this->getLanguage()->getNamespaces() ) as $nsId ) {
+ if ( !MWNamespace::isMovable( $nsId ) ) {
+ $immovableNamespaces[] = $nsId;
+ }
+ }
+
$out->addHTML(
Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), 'id' => 'movepage' ) ) .
Xml::openElement( 'fieldset' ) .
"</td>
<td class='mw-input'>" .
Html::namespaceSelector(
- array( 'selected' => $newTitle->getNamespace() ),
+ array(
+ 'selected' => $newTitle->getNamespace(),
+ 'exclude' => $immovableNamespaces
+ ),
array( 'name' => 'wpNewTitleNs', 'id' => 'wpNewTitleNs' )
) .
Xml::input( 'wpNewTitleMain', 60, $wgContLang->recodeForEdit( $newTitle->getText() ), array(
*/
function setTopText( FormOptions $opts ) {
global $wgContLang;
- $this->getOutput()->addWikiText(
- Html::rawElement( 'p',
- array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ),
- "\n" . $this->msg( 'recentchangestext' )->inContentLanguage()->plain() . "\n"
- ),
- /* $lineStart */ false,
- /* $interface */ false
- );
+
+ $message = $this->msg( 'recentchangestext' )->inContentLanguage();
+ if ( $message->exists() ) {
+ $this->getOutput()->addWikiText(
+ Html::rawElement( 'p',
+ array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ),
+ "\n" . $message->plain() . "\n"
+ ),
+ /* $lineStart */ false,
+ /* $interface */ false
+ );
+ }
}
/**
* @ingroup SpecialPage
*/
-if (!defined('MEDIAWIKI'))
- die;
-
/**
* A special page that lists tags for edits
*
$condition,
__METHOD__,
array(
- 'GROUP BY' => 'ar_namespace,ar_title',
- 'ORDER BY' => 'ar_namespace,ar_title',
+ 'GROUP BY' => array( 'ar_namespace', 'ar_title' ),
+ 'ORDER BY' => array( 'ar_namespace', 'ar_title' ),
'LIMIT' => 100,
)
)
),
'options' => array(
'HAVING' => "COUNT(*) > $count",
- 'GROUP BY' => 'pl_namespace, pl_title'
+ 'GROUP BY' => array( 'pl_namespace', 'pl_title' )
),
'join_conds' => array(
'pg1' => array(
'conds' => array ( 'page_title IS NULL',
'tl_namespace' => NS_TEMPLATE ),
'options' => array (
- 'GROUP BY' => 'tl_namespace, tl_title' ),
+ 'GROUP BY' => array( 'tl_namespace', 'tl_title' ) ),
'join_conds' => array ( 'page' => array ( 'LEFT JOIN',
array ( 'page_namespace = tl_namespace',
'page_title = tl_title' ) ) )
* @return stringthe real path if it was a virtual URL
*/
function getRealPath( $srcPath ) {
+ wfProfileIn( __METHOD__ );
$repo = RepoGroup::singleton()->getLocalRepo();
if ( $repo->isVirtualUrl( $srcPath ) ) {
// @TODO: just make uploads work with storage paths
// UploadFromStash loads files via virtuals URLs
$tmpFile = $repo->getLocalCopy( $srcPath );
$tmpFile->bind( $this ); // keep alive with $thumb
+ wfProfileOut( __METHOD__ );
return $tmpFile->getPath();
}
+ wfProfileOut( __METHOD__ );
return $srcPath;
}
* @return mixed self::OK or else an array with error information
*/
public function verifyUpload() {
+ wfProfileIn( __METHOD__ );
+
/**
* If there was no filename or a zero size given, give up quick.
*/
if( $this->isEmptyFile() ) {
+ wfProfileOut( __METHOD__ );
return array( 'status' => self::EMPTY_FILE );
}
*/
$maxSize = self::getMaxUploadSize( $this->getSourceType() );
if( $this->mFileSize > $maxSize ) {
+ wfProfileOut( __METHOD__ );
return array(
'status' => self::FILE_TOO_LARGE,
'max' => $maxSize,
*/
$verification = $this->verifyFile();
if( $verification !== true ) {
+ wfProfileOut( __METHOD__ );
return array(
'status' => self::VERIFICATION_ERROR,
'details' => $verification
*/
$result = $this->validateName();
if( $result !== true ) {
+ wfProfileOut( __METHOD__ );
return $result;
}
$error = '';
if( !wfRunHooks( 'UploadVerification',
- array( $this->mDestName, $this->mTempPath, &$error ) ) ) {
+ array( $this->mDestName, $this->mTempPath, &$error ) ) )
+ {
+ wfProfileOut( __METHOD__ );
return array( 'status' => self::HOOK_ABORTED, 'error' => $error );
}
+ wfProfileOut( __METHOD__ );
return array( 'status' => self::OK );
}
*/
protected function verifyMimeType( $mime ) {
global $wgVerifyMimeType;
+ wfProfileIn( __METHOD__ );
if ( $wgVerifyMimeType ) {
wfDebug ( "\n\nmime: <$mime> extension: <{$this->mFinalExtension}>\n\n");
global $wgMimeTypeBlacklist;
if ( $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
+ wfProfileOut( __METHOD__ );
return array( 'filetype-badmime', $mime );
}
# XXX: Missing extension will be caught by validateName() via getTitle()
if ( $this->mFinalExtension != '' && !$this->verifyExtension( $mime, $this->mFinalExtension ) ) {
+ wfProfileOut( __METHOD__ );
return array( 'filetype-mime-mismatch', $this->mFinalExtension, $mime );
}
$ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
foreach ( $ieTypes as $ieType ) {
if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
+ wfProfileOut( __METHOD__ );
return array( 'filetype-bad-ie-mime', $ieType );
}
}
}
+ wfProfileOut( __METHOD__ );
return true;
}
*/
protected function verifyFile() {
global $wgAllowJavaUploads, $wgDisableUploadScriptChecks;
+ wfProfileIn( __METHOD__ );
+
# get the title, even though we are doing nothing with it, because
# we need to populate mFinalExtension
$this->getTitle();
$mime = $this->mFileProps[ 'file-mime' ];
$status = $this->verifyMimeType( $mime );
if ( $status !== true ) {
+ wfProfileOut( __METHOD__ );
return $status;
}
# check for htmlish code and javascript
if ( !$wgDisableUploadScriptChecks ) {
if( self::detectScript( $this->mTempPath, $mime, $this->mFinalExtension ) ) {
+ wfProfileOut( __METHOD__ );
return array( 'uploadscripted' );
}
if( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
if( $this->detectScriptInSvg( $this->mTempPath ) ) {
+ wfProfileOut( __METHOD__ );
return array( 'uploadscripted' );
}
}
$errors = $zipStatus->getErrorsArray();
$error = reset( $errors );
if ( $error[0] !== 'zip-wrong-format' ) {
+ wfProfileOut( __METHOD__ );
return $error;
}
}
if ( $this->mJavaDetected ) {
+ wfProfileOut( __METHOD__ );
return array( 'uploadjava' );
}
}
# Scan the uploaded file for viruses
$virus = $this->detectVirus( $this->mTempPath );
if ( $virus ) {
+ wfProfileOut( __METHOD__ );
return array( 'uploadvirus', $virus );
}
$handlerStatus = $handler->verifyUpload( $this->mTempPath );
if ( !$handlerStatus->isOK() ) {
$errors = $handlerStatus->getErrorsArray();
+ wfProfileOut( __METHOD__ );
return reset( $errors );
}
}
wfRunHooks( 'UploadVerifyFile', array( $this, $mime, &$status ) );
if ( $status !== true ) {
+ wfProfileOut( __METHOD__ );
return $status;
}
wfDebug( __METHOD__ . ": all clear; passing.\n" );
+ wfProfileOut( __METHOD__ );
return true;
}
*/
public function checkWarnings() {
global $wgLang;
+ wfProfileIn( __METHOD__ );
$warnings = array();
$warnings['duplicate-archive'] = $archivedImage->getName();
}
+ wfProfileOut( __METHOD__ );
return $warnings;
}
* @return Status indicating the whether the upload succeeded.
*/
public function performUpload( $comment, $pageText, $watch, $user ) {
+ wfProfileIn( __METHOD__ );
+
$status = $this->getLocalFile()->upload(
$this->mTempPath,
$comment,
if ( $watch ) {
$user->addWatch( $this->getLocalFile()->getTitle() );
}
-
wfRunHooks( 'UploadComplete', array( &$this ) );
}
+ wfProfileOut( __METHOD__ );
return $status;
}
*/
public function stashFile() {
// was stashSessionFile
+ wfProfileIn( __METHOD__ );
+
$stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash();
$file = $stash->stashFile( $this->mTempPath, $this->getSourceType() );
$this->mLocalFile = $file;
+
+ wfProfileOut( __METHOD__ );
return $file;
}
*/
public static function detectScript( $file, $mime, $extension ) {
global $wgAllowTitlesInSVG;
+ wfProfileIn( __METHOD__ );
# ugly hack: for text files, always look at the entire file.
# For binary field, just check the first K.
$chunk = strtolower( $chunk );
if( !$chunk ) {
+ wfProfileOut( __METHOD__ );
return false;
}
# check for HTML doctype
if ( preg_match( "/<!DOCTYPE *X?HTML/i", $chunk ) ) {
+ wfProfileOut( __METHOD__ );
return true;
}
foreach( $tags as $tag ) {
if( false !== strpos( $chunk, $tag ) ) {
wfDebug( __METHOD__ . ": found something that may make it be mistaken for html: $tag\n" );
+ wfProfileOut( __METHOD__ );
return true;
}
}
# look for script-types
if( preg_match( '!type\s*=\s*[\'"]?\s*(?:\w*/)?(?:ecma|java)!sim', $chunk ) ) {
wfDebug( __METHOD__ . ": found script types\n" );
+ wfProfileOut( __METHOD__ );
return true;
}
# look for html-style script-urls
if( preg_match( '!(?:href|src|data)\s*=\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) ) {
wfDebug( __METHOD__ . ": found html-style script urls\n" );
+ wfProfileOut( __METHOD__ );
return true;
}
# look for css-style script-urls
if( preg_match( '!url\s*\(\s*[\'"]?\s*(?:ecma|java)script:!sim', $chunk ) ) {
wfDebug( __METHOD__ . ": found css-style script urls\n" );
+ wfProfileOut( __METHOD__ );
return true;
}
wfDebug( __METHOD__ . ": no scripts found\n" );
+ wfProfileOut( __METHOD__ );
return false;
}
}
- # use handler attribute with remote / data / script
+ # use handler attribute with remote / data / script
if( $stripped == 'handler' && preg_match( '!(http|https|data|script):!sim', $value ) ) {
wfDebug( __METHOD__ . ": Found svg setting handler with remote/data/script '$attrib'='$value' in uploaded file.\n" );
return true;
*/
public static function detectVirus( $file ) {
global $wgAntivirus, $wgAntivirusSetup, $wgAntivirusRequired, $wgOut;
+ wfProfileIn( __METHOD__ );
if ( !$wgAntivirus ) {
wfDebug( __METHOD__ . ": virus scanner disabled\n" );
+ wfProfileOut( __METHOD__ );
return null;
}
wfDebug( __METHOD__ . ": unknown virus scanner: $wgAntivirus\n" );
$wgOut->wrapWikiMsg( "<div class=\"error\">\n$1\n</div>",
array( 'virus-badscanner', $wgAntivirus ) );
+ wfProfileOut( __METHOD__ );
return wfMsg( 'virus-unknownscanner' ) . " $wgAntivirus";
}
wfDebug( __METHOD__ . ": failed to scan $file (code $exitCode).\n" );
if ( $wgAntivirusRequired ) {
+ wfProfileOut( __METHOD__ );
return wfMsg( 'virus-scanfailed', array( $exitCode ) );
} else {
+ wfProfileOut( __METHOD__ );
return null;
}
} elseif ( $mappedCode === AV_SCAN_ABORTED ) {
# scan failed because filetype is unknown (probably imune)
wfDebug( __METHOD__ . ": unsupported file type $file (code $exitCode).\n" );
+ wfProfileOut( __METHOD__ );
return null;
} elseif ( $mappedCode === AV_NO_VIRUS ) {
# no virus found
wfDebug( __METHOD__ . ": file passed virus scan.\n" );
+ wfProfileOut( __METHOD__ );
return false;
} else {
$output = trim( $output );
}
wfDebug( __METHOD__ . ": FOUND VIRUS! scanner feedback: $output \n" );
+ wfProfileOut( __METHOD__ );
return $output;
}
}
--- /dev/null
+*.zip
+*.tar.gz
+*.tgz
-#!/usr/bin/python
+#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @author Philip
import tarfile as tf
def download( url, dest ):
if os.path.isfile( dest ):
- print( 'File %s up to date.' % dest )
+ print( 'File %s is up to date.' % dest )
return
global islinux
if islinux:
+ PHPArray( toSG ) \
+ '\n);'
- f = open( 'ZhConversion.php', 'wb', encoding = 'utf8' )
+ f = open( os.path.join( '..', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
print ('Writing ZhConversion.php ... ')
f.write( php )
f.close()
- #Remove temp files
- print ('Deleting temp files ... ')
+ # Remove temporary files
+ print ('Deleting temporary files ... ')
os.remove('EZ-Big.txt.in')
os.remove('phrase_lib.txt')
os.remove('tsi.src')
-<?php require './index.php';
+<?php
+/**
+ * Version of index.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+require './index.php';
* @return bool
*/
public static function isValidBuiltInCode( $code ) {
+
+ if( !is_string($code) ) {
+ $type = gettype( $code );
+ if( $type === 'object' ) {
+ $addmsg = " of class " . get_class( $code );
+ } else {
+ $addmsg = '';
+ }
+ throw new MWException( __METHOD__ . " must be passed a string, $type given$addmsg" );
+ }
+
return preg_match( '/^[a-z0-9-]+$/i', $code );
}
* Use null for autonyms (native names)
* @param $include string:
* 'all' all available languages
- * 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames
+ * 'mw' only if the language is defined in MediaWiki or wgExtraLanguageNames (default)
* 'mwfile' only if the language is in 'mw' *and* has a message file
- * @return array|bool: language code => language name, false if $include is wrong
+ * @return array: language code => language name
* @since 1.20
*/
public static function fetchLanguageNames( $inLanguage = null, $include = 'mw' ) {
$returnMw[$coreCode] = $names[$coreCode];
}
- if( $include === 'mw' ) {
- return $returnMw;
- } elseif( $include === 'mwfile' ) {
+ if( $include === 'mwfile' ) {
$namesMwFile = array();
# We do this using a foreach over the codes instead of a directory
# loop so that messages files in extensions will work correctly.
}
return $namesMwFile;
}
- return false;
+ # 'mw' option; default if it's not one of the other two options (all/mwfile)
+ return $returnMw;
}
/**
}
/**
- * An arrow, depending on the language direction
+ * An arrow, depending on the language direction.
*
+ * @param $direction String: the direction of the arrow: forwards (default), backwards, left, right, up, down.
* @return string
*/
- function getArrow() {
- return $this->isRTL() ? '←' : '→';
+ function getArrow( $direction = 'forwards' ) {
+ switch ( $direction ) {
+ case 'forwards':
+ return $this->isRTL() ? '←' : '→';
+ case 'backwards':
+ return $this->isRTL() ? '→' : '←';
+ case 'left':
+ return '←';
+ case 'right':
+ return '→';
+ case 'up':
+ return '↑';
+ case 'down':
+ return '↓';
+ }
}
/**
'bm' => 'Bamanankan', # Bambara
'bn' => 'বাংলা', # Bengali
'bo' => 'བོད་ཡིག', # Tibetan
- 'bpy' => 'à¦\87মার ঠার/বিষà§\8dণà§\81পà§\8dরিয়া মণিপà§\81রà§\80', # Bishnupriya Manipuri
+ 'bpy' => 'বিষà§\8dণà§\81পà§\8dরিয়া মণিপà§\81রà§\80', # Bishnupriya Manipuri
'bqi' => 'بختياري', # Bakthiari
'br' => 'Brezhoneg', # Breton
'brh' => 'Bráhuí', # Brahui
'fa' => 'فارسی', # Persian
'ff' => 'Fulfulde', # Fulfulde, Maasina
'fi' => 'Suomi', # Finnish
+ 'fit' => 'Meänkieli', # Tornedalen Finnish
'fiu-vro' => 'Võro', # Võro (deprecated code, 'vro' in ISO 639-3 since 2009-01-16)
'fj' => 'Na Vosa Vakaviti', # Fijian
'fo' => 'Føroyskt', # Faroese
'nchanges' => '{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}',
'recentchanges' => 'أحدث التغييرات',
'recentchanges-legend' => 'خيارات أحدث التغييرات',
-'recentchangestext' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.',
+'recentchanges-summary' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.',
'recentchanges-feed-description' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.',
'recentchanges-label-newpage' => 'أنشأ هذا التعديل صفحة جديدة',
'recentchanges-label-minor' => 'هذا تعديل طفيف',
'nchanges' => '$1 {{PLURAL:$1|wysiging|wysigings}}',
'recentchanges' => 'Onlangse wysigings',
'recentchanges-legend' => 'Opsies vir onlangse wysigings',
-'recentchangestext' => 'Volg die mees onlangse wysigings aan die wiki op die bladsy.',
+'recentchanges-summary' => 'Volg die mees onlangse wysigings aan die wiki op die bladsy.',
'recentchanges-feed-description' => 'Spoor die mees onlangse wysigings op die wiki na in die voer.',
'recentchanges-label-newpage' => "Met die wysiging is 'n nuwe bladsy geskep",
'recentchanges-label-minor' => "Hierdie is 'n klein wysiging",
'backend-fail-writetemp' => 'Kon nie na tydelike lêer skryf nie.',
'backend-fail-closetemp' => 'Kon nie tydelike lêer sluit nie.',
'backend-fail-read' => 'Kon nie lêer $1 lees nie.',
-'backend-fail-create' => 'Kon nie lêer $1 skep nie.',
+'backend-fail-create' => 'Kon nie lêer $1 uitskryf nie.',
# ZipDirectoryReader
'zip-file-open-error' => "'n Fout het voorgekom met die opening van die lêer vir ZIP toetsing.",
# JavaScriptTest
'javascripttest' => 'JavaScript toetsing',
-'javascripttest-disabled' => 'Die funksie is gedeaktiveer.',
+'javascripttest-disabled' => 'Die funksie is nie op hierdie wiki geaktiveer nie.',
'javascripttest-title' => 'Voer toetse uit vir $1',
# Tooltip help for the actions
'version-software' => 'Geïnstalleerde sagteware',
'version-software-product' => 'Produk',
'version-software-version' => 'Weergawe',
+'version-entrypoints' => "URL's vir ingange",
+'version-entrypoints-header-entrypoint' => 'Ingang',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => 'Lêerpad',
'api-error-uploaddisabled' => 'Oplaai is afgeskakel op hierdie wiki.',
'api-error-verification-error' => 'Hierdie lêer kan beskadig of het die verkeerde uitbreiding.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekonde|sekondes}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuut|minute}}',
+'duration-hours' => '$1 {{PLURAL:$1|uur|ure}}',
+'duration-days' => '$1 {{PLURAL:$1|dag|dae}}',
+'duration-weeks' => '$1 {{PLURAL:$1|week|weke}}',
+'duration-years' => '$1 {{PLURAL:$1|jaar|jare}}',
+'duration-decades' => '$1 {{PLURAL:$1|dekade|dekades}}',
+'duration-centuries' => '$1 {{PLURAL:$1|eeu|eeue}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
+
);
'nchanges' => '$1 {{PLURAL:$1|cambeo|cambeos}}',
'recentchanges' => 'Zaguers cambeos',
'recentchanges-legend' => 'Opcions sobre a pachina de zaguers cambeos',
-'recentchangestext' => "Siga os cambeos más recients d'a wiki en ista pachina.",
+'recentchanges-summary' => "Siga os cambeos más recients d'a wiki en ista pachina.",
'recentchanges-feed-description' => "Seguir os cambios más recients d'o wiki en ista fuent de noticias.",
'recentchanges-label-newpage' => 'Ista edición ha creyau una nueva pachina',
'recentchanges-label-minor' => 'Ista ye una edición menor',
* @author Ouda
* @author Oxydo
* @author Rami.Awad
+ * @author Reedy
* @author Riadismet
* @author Samer
* @author Sami Lab
'ns-specialprotected' => 'الصفحات الخاصة لا يمكن تعديلها.',
'titleprotected' => "{{GENDER:$1|حمى|حمت}} [[User:$1|$1]] هذا العنوان من الإنشاء.
السبب المعطى هو ''$2''.",
+'invalidtitle-knownnamespace' => 'عنوان غير صالح في النطاق «$2» مع نص «$3»',
+'invalidtitle-unknownnamespace' => 'عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»',
# Virus scanner
'virus-badscanner' => "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
'nocookieslogin' => 'يستخدم {{SITENAME}} الكوكيز لتسجيل الدخول.
الكوكيز معطلة لديك.
من فضلك فعلها ثم حاول مرة أخرى.',
-'nocookiesfornew' => 'لم يتم إنشاء حساب المستخدم ، ونحن لا يستطيع تأكيد مصدره.
-تأكد من أن ملفات تعريف الارتباط (كوكيز) مفعلة، ثم أعد تحديث الصفحة وحاول مرة أخرى.',
+'nocookiesfornew' => 'لم يتم إنشاء حساب المستخدم، لأننا لم نستطع تأكيد مصدره.
+تأكد من أن ملفات تعريف الارتباط (الكوكيز) مفعلة عندك، ثم أعد تحميل الصفحة وحاول مرة أخرى.',
'noname' => 'لم تحدد اسم مستخدم صحيح.',
'loginsuccesstitle' => 'تم الدخول بشكل صحيح',
'loginsuccess' => "'''لقد قمت بتسجيل الدخول ل{{SITENAME}} باسم \"\$1\".'''",
'invalidemailaddress' => 'لا يمكن قبول عنوان البريد الإلكتروني حيث تبدو صيغته خاطئة.
ضع عنوانا مضبوطا أو أفرغ هذا الحقل.',
'cannotchangeemail' => 'تغيير عنوان البريد الإلكتروني لهذا الحساب غير ممكن على هذا الويكي',
+'emaildisabled' => 'لا يمكن إرسال رسائل البريد الإلكتروني من هذا الموقع.',
'accountcreated' => 'تم إنشاء الحساب',
'accountcreatedtext' => 'تم إنشاء الحساب الخاص ب$1.',
'createaccount-title' => 'إنشاء حساب في {{SITENAME}}',
هذا يحدث أحيانا عندما تستخدم خدمة بروكسي مجهول معيبة مبنية على الوب.'''",
'edit_form_incomplete' => "'''بعض أجزاء من نموذج التعديل لم تصل إلى الخادم؛ تأكد من أن تعديلاتك لم تمس وحاول مجددا.'''",
'editing' => 'تحرير $1',
-'creating' => 'إنشاء $1',
+'creating' => 'إنشاء «$1»',
'editingsection' => 'تحرير $1 (قسم)',
'editingcomment' => 'تعديل $1 (قسم جديد)',
'editconflict' => 'تضارب في التحرير: $1',
'edit-no-change' => 'تعديلك تم تجاهله، لأنه لم يحدث أي تعديل للنص.',
'edit-already-exists' => 'لم يمكن إنشاء صفحة جديدة.
هي موجودة بالفعل.',
+'defaultmessagetext' => 'نص الرسالة الافتراضي',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.
'parser-template-loop-warning' => 'تم كشف حلقة قالب: [[$1]]',
'parser-template-recursion-depth-warning' => 'تم تجاوز حد عمق فرد القوالب ($1)',
'language-converter-depth-warning' => 'تم تخطي حد عمق محول اللغة ($1)',
+'node-count-exceeded-category' => 'الصفحات التي حدث فيها تجاوز تعداد العقد',
+'expansion-depth-exceeded-category' => 'الصفحات التي حدث فيها تجاوز عمق التوسيع',
+'expansion-depth-exceeded-warning' => 'الصفحة تجاوزت عمق التوسيع',
# "Undo" feature
'undo-success' => 'يمكن استرجاع التعديل.
# Diffs
'history-title' => 'تاريخ مراجعة "$1"',
+'difference-title' => 'الفرق بين المراجعتين في «$1»',
+'difference-title-multipage' => 'الفرق بين الصفحتين «$1» و«$2»',
'difference-multipage' => '(الفرق بين الصفحتين)',
'lineno' => 'سطر $1:',
'compareselectedversions' => 'قارن بين النسختين المختارتين',
'nchanges' => '{{PLURAL:$1|لا تغييرات|تغيير واحد|تغييران|$1 تغييرات|$1 تغييرا|$1 تغيير}}',
'recentchanges' => 'أحدث التغييرات',
'recentchanges-legend' => 'خيارات أحدث التغييرات',
-'recentchangestext' => 'تابع آخر التغييرات في الويكي من هذه الصفحة.',
+'recentchanges-summary' => 'تابع آخر التغييرات في الويكي من هذه الصفحة.',
'recentchanges-feed-description' => 'تابع أحدث التغييرات للويكي عبر هذه التلقيمة.',
'recentchanges-label-newpage' => 'أنشأ هذا التعديل صفحة جديدة',
'recentchanges-label-minor' => 'هذا تعديل طفيف',
'windows-nonascii-filename' => 'هذا ويكي لا يعتمد أسماء الملفات مع الأحرف الخاصة.',
'fileexists' => "هناك ملف موجود يحمل نفس هذا الاسم الرجاء التأكد من هذا الملف باتباع الوصلة التالية '''<tt>[[:$1]]</tt>''' قبل القيام بتغييره.
[[$1|thumb]]",
-'filepageexists' => "أنشئت صفحة وصف هذا الملف في '''<tt>[[:$1]]</tt>'''، لكن لا يوجد ملف بهذا الاسم حاليا.
+'filepageexists' => "أنشئت صفحة وصف هذا الملف في '''<tt>[[:$1]]</tt>'''، لكن لا يوجد ملف بهذا الاسم حالياً.
لن يظهر الملخص الذي تدخله على صفحة الوصف.
-لجعل ملخصك يظهر هناك، ستحتاج إلى تعديله يدويا.
+لجعل ملخصك يظهر هناك، ستحتاج إلى تعديله يدوياً.
[[$1|thumb]]",
'fileexists-extension' => "يوجد ملف باسم مشابه: [[$2|thumb]]
* اسم الملف المراد رفعه: '''<tt>[[:$1]]</tt>'''
* اسم الملف الموجود: '''<tt>[[:$2]]</tt>'''
-من فضلك اختر اسما مختلفا.",
+من فضلك اختر اسماً مختلفاً.",
'fileexists-thumbnail-yes' => "يبدو أن الملف مصغرا لحجم أعلى ''(تصغير)''. [[$1|thumb]]
من فضلك افحص الملف '''<tt>[[:$1]]</tt>'''.
إن كان هو نفس الملف بالحجم الأصلي فلا داعي لرفع تصغير إضافي.",
يبدو أن الملف مصغرا لحجم أعلى ''(تصغير)''.
إذا كانت لديك الصورة في درجة دقة كاملة قم برفعها، أو قم بتغيير اسم الملف من فضلك.",
'fileexists-forbidden' => 'هناك ملف موجود بهذا الاسم بالفعل، ولا يمكن إعادة الكتابة عليه.
-لو أنك مازلت تريد رفع ملفك، من فضلك عد واستخدم اسما جديدا. [[File:$1|thumb|center|$1]]',
+لو أنك مازلت تريد رفع ملفك، من فضلك عد واستخدم اسماً جديداً. [[File:$1|thumb|center|$1]]',
'fileexists-shared-forbidden' => 'يوجد ملف بنفس الاسم بالفعل في مستودع الملفات المشترك.
-لو كنت مازلت تريد رفع ملفك، من فضلك ارجع واستخدم اسما جديدا.
+لو كنت مازلت تريد رفع ملفك، من فضلك ارجع واستخدم اسماً جديداً.
[[File:$1|thumb|center|$1]]',
'file-exists-duplicate' => 'هذا الملف مكرر {{PLURAL:$1|للملف|للملفات}} التالية:',
'file-deleted-duplicate' => 'ملف مطابق لهذه الملف ([[:$1]]) تم حذفه من قبل. ينبغي أن تتحقق من تاريخ الحذف لهذا الملف قبل المتابعة بإعادة رفعه.',
'watchthisupload' => 'راقب هذا الملف',
'filewasdeleted' => 'تم رفع ثم حذف ملف بهذا الاسم من قبل.
من الأفضل مراجعة $1 قبل رفعه مرة أخرى.',
-'filename-bad-prefix' => "اسÙ\85 اÙ\84Ù\85Ù\84Ù\81 اÙ\84Ø°Ù\8a ترÙ\81عÙ\87 Ù\8aبدأ ب'''\"\$1\"'''Ø\8c Ù\88Ù\87Ù\88 اسÙ\85 غÙ\8aر Ù\88صÙ\81Ù\8a عادة Ù\8aÙ\88ضع تÙ\84Ù\82ائÙ\8aا Ù\85Ù\86 اÙ\84Ù\83اÙ\85Ù\8aرات اÙ\84رÙ\82Ù\85Ù\8aØ©.
-من فضلك اختر اسما أكثر وصفا لملفك.",
+'filename-bad-prefix' => "اسÙ\85 اÙ\84Ù\85Ù\84Ù\81 اÙ\84Ø°Ù\8a ترÙ\81عÙ\87 Ù\8aبدأ ب'''\"\$1\"'''Ø\8c Ù\88Ù\87Ù\88 اسÙ\85 غÙ\8aر Ù\88صÙ\81Ù\8a غاÙ\84باÙ\8b Ù\85ا تخصصÙ\87 اÙ\84Ù\83اÙ\85Ù\8aرات اÙ\84رÙ\82Ù\85Ù\8aØ© تÙ\84Ù\82ائÙ\8aاÙ\8b.
+من فضلك اختر اسماً يصف ملفك بوضوح أكثر.",
'filename-prefix-blacklist' => ' #<!-- اترك هذا السطر تماما كما هو --> <pre>
# الصيغة كالتالي:
# * كل شيء من علامة "#" إلى آخر السطر هو تعليق
'upload-warning-msg' => 'ثمة مشكلة في مرفوعك من [$2]. يمكنك الرجوع إلى [[Special:Upload/stash/$1|نموذج الرفع]] لتصحيح المشكلة.',
'upload-proto-error' => 'بروتوكول غير صحيح',
-'upload-proto-error-text' => 'الرفع عن بعد يتطلب مسارا يبدأ بـ <code>http://</code> أو <code>ftp://</code>.',
+'upload-proto-error-text' => 'الرفع عن بعد يتطلب مساراً يبدأ بـ <code>http://</code> أو <code>ftp://</code>.',
'upload-file-error' => 'خطأ داخلي',
'upload-file-error-text' => 'حدث خطأ داخلي عند محاولة إنشاء ملف مؤقت على الخادوم.
من فضلك اتصل [[Special:ListUsers/sysop|بإداري]].',
'upload-too-many-redirects' => 'احتوى المسار تحويلات كثيرة جدا',
'upload-unknown-size' => 'حجم غير معروف',
'upload-http-error' => 'صودف خطأ HTTP: $1',
+'upload-copy-upload-invalid-domain' => 'رفع النسخ غير متاح من هذا الموقع',
# File backend
'backend-fail-stream' => 'لا يمكن عرض الملف $1.',
'backend-fail-backup' => 'لا يمكن صنع نسخة أحتياطية للملف $1.',
'backend-fail-notexists' => 'الملف $1 غير موجود.',
+'backend-fail-hashes' => 'لم يمكن الحصول على هاش الملف من أجل المقارنة',
'backend-fail-notsame' => 'يوجد بالفعل ملف غير متطابق في $1.',
-'backend-fail-invalidpath' => '$1 ليس مسارا صالحا للتخزين.',
+'backend-fail-invalidpath' => '$1 ليس مساراً صالحاً للتخزين.',
'backend-fail-delete' => 'لم يمكن حذف الملف $1.',
'backend-fail-alreadyexists' => 'الملف $1 موجود بالفعل.',
'backend-fail-store' => 'لا يمكن تخزين الملف $1 في $2 .',
# img_auth script messages
'img-auth-accessdenied' => 'رفض الوصول',
'img-auth-nopathinfo' => 'PATH_INFO مفقود.
-خادÙ\85Ù\83 Ù\84Ù\8aس Ù\85ضبÙ\88طا لتمرير هذه المعلومة.
-قد يكون مبنيا على نظام CGI ولا يمكنه دعم img_auth.
+خادÙ\88Ù\85Ù\83 Ù\84Ù\8aس Ù\85ضبÙ\88طاÙ\8b لتمرير هذه المعلومة.
+قد يكون مبنياً على نظام CGI ولا يمكنه دعم img_auth.
راجع https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
'img-auth-notindir' => 'المسار المطلوب غير موجود في مجلد الرفع المضبوط.',
'img-auth-badtitle' => 'تعذر تشكيل عنوان صالح من "$1".',
-'img-auth-nologinnWL' => 'لست والجا و"$1" ليست في القائمة البيضاء.',
+'img-auth-nologinnWL' => 'لست والجاً و"$1" ليست في القائمة البيضاء.',
'img-auth-nofile' => 'الملف "$1" غير موجود.',
'img-auth-isdir' => 'أنت تحاول الوصول إلى الدليل "$1".
يسمح بوصول الملفات فقط.',
# MIME search
'mimesearch' => 'بحث MIME',
-'mimesearch-summary' => 'تمكنك هذه الصفحة من ترشيح الملفات طبقا لنوع MIME الخاص بها.
+'mimesearch-summary' => 'تمكنك هذه الصفحة من ترشيح الملفات وفق نوع MIME الخاص بها.
المدخل: نوع المحتوى/النوع الفرعي، كمثال <tt>image/jpeg</tt>.',
'mimetype' => 'نوع الملف:',
'download' => 'تنزيل',
'log' => 'سجلات',
'all-logs-page' => 'كل السجلات العامة',
'alllogstext' => 'عرض شامل لكل السجلات المتوفرة في {{SITENAME}}.
-باستطاعتك جعل القائمة أكثر تحديدا وذلك باختيار نوع السجل، اسم المستخدم (حساس لحالة الحروف)، أو الصفحة المتأثرة (أيضا حساس لحالة الحروف).',
+باستطاعتك جعل القائمة أكثر تحديداً، وذلك باختيار نوع السجل واسم المستخدم (حساس لحالة الحروف)، أو الصفحة المتأثرة (أيضاً حساس لحالة الحروف).',
'logempty' => 'لا توجد مدخلات مطابقة في السجل.',
'log-title-wildcard' => 'ابحث عن عناوين تبدأ بهذا النص',
'alphaindexline' => '$1 إلى $2',
'nextpage' => 'الصفحة التالية ($1)',
'prevpage' => 'الصفحة السابقة ($1)',
-'allpagesfrom' => 'اعرض الصفحات بدءا من:',
+'allpagesfrom' => 'اعرض الصفحات بدءاً من:',
'allpagesto' => 'اعرض الصفحات المنتهية عند:',
'allarticles' => 'كل الصفحات',
'allinnamespace' => 'كل الصفحات (في نطاق $1)',
'allpagessubmit' => 'اذهب',
'allpagesprefix' => 'عرض الصفحات التي تبدأ بـ:',
'allpagesbadtitle' => 'العنوان المقترح للصفحة غير مقبول أو يضم لغات أخرى أو سابقة إنترويكي.
-يمكن أن يتضمن حروفا لا يمكن استعمالها للعناوين.',
+أو ربما فيه أحرف لا يمكن استعمالها في العناوين.',
'allpages-bad-ns' => '{{SITENAME}} لا يوجد بها نطاق "$1".',
'allpages-hide-redirects' => 'أخفِ التحويلات',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'أنت تستعرض نسخة مخبأة من هذه الصفحة، وقدمها قد يصل إلى $1.',
+'cachedspecial-viewing-cached-ts' => 'أنت تستعرض نسخة مخبأة من هذه الصفحة، وقد لا تكون مطابقة للنسخة الحالية.',
+'cachedspecial-refresh-now' => 'استعرض آخر نسخة',
+
# Special:Categories
'categories' => 'تصنيفات',
'categoriespagetext' => '{{PLURAL:$1|التصنيف التالي يحتوي|التصنيفات التالية تحتوي}} على صفحات أو وسائط.
[[Special:UnusedCategories|التصنيفات غير المستخدمة]] غير معروضة هنا.
-Ø£Ù\8aضا اÙ\86ظر [[Special:WantedCategories|التصنيفات المطلوبة]].',
-'categoriesfrom' => 'أظهر التصنيفات بدءا من:',
+اÙ\86ظر Ø£Ù\8aضاÙ\8b [[Special:WantedCategories|التصنيفات المطلوبة]].',
+'categoriesfrom' => 'أظهر التصنيفات بدءاً من:',
'special-categories-sort-count' => 'رتب بالعدد',
-'special-categories-sort-abc' => 'رتب هجائيا',
+'special-categories-sort-abc' => 'رتب هجائياً',
# Special:DeletedContributions
'deletedcontributions' => 'مساهمات المستخدم المحذوفة',
'linksearch-error' => 'الكروت الخاصة يمكن أن تظهر فقط في بداية اسم المضيف.',
# Special:ListUsers
-'listusersfrom' => 'اعرض المستخدمين بدءا من:',
+'listusersfrom' => 'اعرض المستخدمين بدءاً من:',
'listusers-submit' => 'اعرض',
'listusers-noresult' => 'لم يتم إيجاد مستخدم.',
'listusers-blocked' => '(ممنوع)',
# Special:ActiveUsers
'activeusers' => 'قائمة المستخدمين النشطين',
-'activeusers-intro' => 'هذه قائمة بالمستخدمين الذين مارسوا نوعا من النشاط خلال {{PLURAL:$1||اليوم الماضي|اليومين الماضيين|ال$1 أيام الماضية|ال$1 يوما ماضيا|ال$1 يوم ماضي}}.',
-'activeusers-count' => '{{PLURAL:$1|لا تعديلات حديثة|تعديل حديث واحد|تعديلان حديثان|$1 تعديلات حديثة|$1 تعديلا حديثا|$1 تعديل حديث}} في {{PLURAL:$3||اليوم الماضي|اليومين الماضيين|$3 أيام ماضية|$3 يوما ماضية|ال$1 يوم ماضي}}',
-'activeusers-from' => 'اعرض المستخدمين بدءا من:',
+'activeusers-intro' => 'هذه قائمة بالمستخدمين الذين مارسوا نوعاً من النشاط خلال {{PLURAL:$1||اليوم الماضي|اليومين الماضيين|ال$1 أيام الماضية|ال$1 يوماً ماضياً|ال$1 يوم ماضي}}.',
+'activeusers-count' => '{{PLURAL:$1|لا تعديلات حديثة|تعديل حديث واحد|تعديلان حديثان|$1 تعديلات حديثة|$1 تعديلاً حديثاً|$1 تعديل حديث}} خلال {{PLURAL:$3||اليوم الماضي|اليومين الماضيين|$3 أيام ماضية|$3 يوماً ماضية|ال$1 يوم ماضي}}',
+'activeusers-from' => 'اعرض المستخدمين بدءاً من:',
'activeusers-hidebots' => 'أخف البوتات',
'activeusers-hidesysops' => 'أخف الإداريين',
-'activeusers-noresult' => 'لا مستخدمون تم إيجادهم.',
+'activeusers-noresult' => 'لم يعثر على أي مستخدمين',
# Special:Log/newusers
'newuserlogpage' => 'سجل إنشاء المستخدمين',
'emailuser' => 'إرسال رسالة لهذا المستخدم',
'emailpage' => 'إرسال رسالة للمستخدم',
'emailpagetext' => 'يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى هذا المستخدم.
-عÙ\86Ù\88اÙ\86 اÙ\84برÙ\8aد اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a اÙ\84Ø°Ù\8a Ù\82Ù\85ت Ø£Ù\86ت بإدخاÙ\84Ù\87 Ù\81Ù\8a [[Special:Preferences|تÙ\81ضÙ\8aÙ\84اتÙ\83]]Ø\8c سÙ\8aظÙ\87ر Ù\83عÙ\86Ù\88اÙ\86 اÙ\84Ù\85رسÙ\84 Ù\81Ù\8a اÙ\84برÙ\8aد اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8aØ\8c ØتÙ\89 Ù\8aØµØ¨Ø Ø§Ù\84Ù\85تÙ\84Ù\82Ù\8a Ù\82ادرا عÙ\84Ù\89 الرد عليك مباشرة.',
+سÙ\8aظÙ\87ر عÙ\86Ù\88اÙ\86 اÙ\84برÙ\8aد اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a اÙ\84Ø°Ù\8a أدخÙ\84تÙ\87 Ù\81Ù\8a [[Special:Preferences|تÙ\81ضÙ\8aÙ\84اتÙ\83]] Ù\83عÙ\86Ù\88اÙ\86 اÙ\84Ù\85رسÙ\84 Ù\81Ù\8a اÙ\84برÙ\8aد اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8aØ\8c Ù\83Ù\8a Ù\8aستطÙ\8aع اÙ\84Ù\85تÙ\84Ù\82Ù\8a الرد عليك مباشرة.',
'usermailererror' => 'جسم البريد أرجع خطأ:',
'defemailsubject' => 'رسالة {{SITENAME}} من المستخدم "$1"',
'usermaildisabled' => 'بريد المستخدم الإلكتروني معطل',
'nowatchlist' => 'لا توجد مدخلات في قائمة مراقبتك.',
'watchlistanontext' => 'الرجاء $1 لعرض أو تعديل الصفحات في قائمة مراقبتك.',
'watchnologin' => 'غير مسجل',
-'watchnologintext' => 'يجب أن تكون [[Special:UserLogin|مسجلا الدخول]] لتعدل قائمة مراقبتك.',
+'watchnologintext' => 'يجب أن تكون [[Special:UserLogin|مسجل الدخول]] لتعدل قائمة مراقبتك.',
'addwatch' => 'إضافة إلى قائمة المراقبة',
'addedwatchtext' => "أضيفت الصفحة \"[[:\$1]]\" إلى [[Special:Watchlist|قائمة مراقبتك]].
التغييرات القادمة على هذه الصفحة وصفحة نقاشها سيتم وضعها هناك، وسيتم إظهار اسم الصفحة بخط '''غليظ''' في صفحة [[Special:RecentChanges|أحدث التغييرات]] لتسهيل تحديدها واكتشافها.",
'watchmethod-list' => 'فحص الصفحات المراقبة للتعديلات الحديثة',
'watchlistcontains' => 'تحتوي قائمة مراقبتك على {{PLURAL:$1|لا صفحات|صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}}.',
'iteminvalidname' => "مشكلة في المدخل '$1'، اسم غير صحيح...",
-'wlnote' => "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''الساعة''' الماضية|'''الساعتين''' الماضيتين|ال'''$2''' ساعات الماضية|ال'''$2''' ساعة الماضية}} وفقا ل$3، $4.",
+'wlnote' => "بالأسفل {{PLURAL:$1|لا توجد تغييرات|التغيير الأخير|آخر تغييرين|آخر '''$1''' تغييرات|آخر '''$1''' تغييرا|آخر '''$1''' تغيير}} في {{PLURAL:$2||'''الساعة''' الماضية|'''الساعتين''' الماضيتين|ال'''$2''' ساعات الماضية|ال'''$2''' ساعة الماضية}} وفقاً ل$3، $4.",
'wlshowlast' => 'عرض آخر $1 ساعات $2 أيام $3',
'watchlist-options' => 'خيارات قائمة المراقبة',
ويكي: $PAGEEDITOR_WIKI
لن يكون هناك إخطارات أخرى في حالة حدوث مزيد من التغييرات إلا إذا قمت بزيارة تلك الصفحة.
-يمكن أيضا تعيين إشارات الإعلام لجميع صفحات شاهد على هيئة الرصد الخاصة بك.
+يمكنك أيضاً إزالة العلامات عن جميع الصفحات في قائمة مراقبتك.
- {{SITENAME}} إعلام البريد الإلكتروني لموقع
+ نظام {{SITENAME}} للإعلام بالبريد الإلكتروني
--
-Ù\84تغÙ\8aÙ\8aر إعدادات إعÙ\84اÙ\85 البريد الإلكتروني الخاص بك، قم بزيارة
+Ù\84تغÙ\8aÙ\8aر إعدادات اÙ\84إعÙ\84اÙ\85 بالبريد الإلكتروني الخاص بك، قم بزيارة
{{canonicalurl:{{#special:Preferences}}}}
-لتغيير إعدادات المراقبة الخاصة بك، قم بزيارة
+لتغيير إعدادات قائمة مراقبتك، قم بزيارة
{{canonicalurl:{{#special:EditWatchlist}}}}
-لحذف الصفحة من قائمة المراقبة الخاصة بك، قم بزيارة
+لحذف الصفحة من قائمة مراقبتك، قم بزيارة
$UNWATCHURL
التغذية المرتدة، والحصول على مساعدة إضافية:
'exblank' => 'الصفحة كانت فارغة',
'delete-confirm' => 'حذف "$1"',
'delete-legend' => 'حذف',
-'historywarning' => "'''تحذير:''' للصفحة التي توشك على حذفها تاريخ فيه تقريبا {{PLURAL:$1||مراجعة واحدة|مراجعتين|$1 مراجعات|$1 مراجعة}}:",
+'historywarning' => "'''تحذير:''' الصفحة التي توشك على حذفها لها تاريخ فيه {{PLURAL:$1||مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}} تقريباً:",
'confirmdeletetext' => 'أنت على وشك أن تقوم بحذف صفحة بالإضافة إلى كل تاريخها.
من فضلك التأكد من عزمك على الحذف، وبأنك مدرك للعواقب، وبأنك تقوم بهذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].',
'actioncomplete' => 'انتهاء العملية',
'undelete-search-submit' => 'ابحث',
'undelete-no-results' => 'لم يتم العثور على صفحات مطابقة في أرشيف المحذوفات.',
'undelete-filename-mismatch' => 'لم يمكن استرجاع مراجعة الملف بتاريخ $1: اسم الملف لا يطابق',
-'undelete-bad-store-key' => 'لم يمكن استرجاع مراجعة الملف بتاريخ $1: الملف كان مفقودا قبل الحذف',
+'undelete-bad-store-key' => 'لم يمكن استرجاع مراجعة الملف بتاريخ $1: الملف كان مفقوداً قبل الحذف',
'undelete-cleanup-error' => 'خطأ حذف ملف أرشيف غير مستخدم "$1".',
'undelete-missing-filearchive' => 'غير قادر على استرجاع ملف الأرشيف رقم $1 لأنه ليس في قاعدة البيانات.
ربما يكون قد تم استرجاعه.',
'ipbotherreason' => 'سبب إضافي/آخر:',
'ipbhidename' => 'أخف اسم المستخدم من التعديلات والقوائم',
'ipbwatchuser' => 'راقب صفحتي المستخدم والنقاش لهذا المستخدم',
-'ipb-disableusertalk' => 'امنع هذا المستخدم من تعديل صفحة نقاشه ما دام ممنوعا',
+'ipb-disableusertalk' => 'امنع هذا المستخدم من تعديل صفحة نقاشه ما دام ممنوعاً',
'ipb-change-block' => 'أعد منع المستخدم بهذه الإعدادات',
'ipb-confirm' => 'أكّد المنع',
'badipaddress' => 'عنوان أيبي غير صحيح',
'change-blocklink' => 'تغيير المنع',
'contribslink' => 'مساهمات',
'emaillink' => 'أرسل بريدًا إلكترونيًا',
-'autoblocker' => 'تم منعك تلقائيا لأن الأيبي الخاص بك تم استخدامه مؤخرا بواسطة "[[User:$1|$1]]".
+'autoblocker' => 'تم منعك تلقائيا لأن الأيبي الخاص بك تم استخدامه مؤخراً بواسطة "[[User:$1|$1]]".
السبب المعطى لمنع $1 هو: "$2"',
'blocklogpage' => 'سجل المنع',
'blocklog-showlog' => 'سبق منع هذا المستخدم.
'ipb_expiry_invalid' => 'تاريخ الانتهاء غير صحيح.',
'ipb_expiry_temp' => 'عمليات منع أسماء المستخدمين المخفية يجب أن تكون دائمة.',
'ipb_hide_invalid' => 'غير قادر على إخفاء هذا الحساب؛ ربما يكون قد قام بالكثير من التعديلات.',
-'ipb_already_blocked' => '"$1" Ù\85Ù\85Ù\86Ù\88ع باÙ\84Ù\81عÙ\84',
-'ipb-needreblock' => '$1 Ù\85Ù\85Ù\86Ù\88ع باÙ\84Ù\81عÙ\84. هل تريد تغيير الإعدادات؟',
+'ipb_already_blocked' => '"$1" Ù\85Ù\85Ù\86Ù\88ع ØاÙ\84Ù\8aاÙ\8b',
+'ipb-needreblock' => '$1 Ù\85Ù\85Ù\86Ù\88ع ØاÙ\84Ù\8aاÙ\8b. هل تريد تغيير الإعدادات؟',
'ipb-otherblocks-header' => '{{PLURAL:$1||المنع الآخر|المنعان الآخران|المنوعات الأخرى}}',
'unblock-hideuser' => 'لا يمكنك إلغاء منع هذا المستخدم لأن اسم مستخدمه أُخفي.',
'ipb_cant_unblock' => 'خطأ: لم يتم إيجاد الممنوع $1.
ربما تم رفع منعه بالفعل.',
-'ipb_blocked_as_range' => 'خطأ: الأيبي $1 ليس ممنوعا مباشرة ولا يمكن رفع المنع عنه.
-لكنه، على أية حال، ممنوع كجزء من النطاق $2، والذي يمكن رفع المنع عنه.',
+'ipb_blocked_as_range' => 'خطأ: الأيبي $1 ليس ممنوعاً مباشرة ولا يمكن رفع المنع عنه.
+لكنه ممنوع كجزء من النطاق $2، والذي يمكن رفع المنع عنه.',
'ip_range_invalid' => 'نطاق عناوين الأيبي المدخل غير صحيح.',
'ip_range_toolarge' => 'لا يسمح بنطاقات المنع الأكبر من /$1',
'blockme' => 'منعي',
'sorbs_create_account_reason' => 'عنوان الأيبي الخاص بك موجود كبروكسي مفتوح في DNSBL المستخدم بواسطة {{SITENAME}}.
لا يمكنك إنشاء حساب.',
'cant-block-while-blocked' => 'أنت لا يمكنك منع المستخدمين الآخرين بينما أنت ممنوع.',
-'cant-see-hidden-user' => 'المستخدم الذي تحاول منعه تم منعه مسبقا وإخفائه. بما أنك لا تمتلك صلاحية إخفاء المستخدم ، لا يمكنك مشاهدة المنع أو تعديله.',
+'cant-see-hidden-user' => 'المستخدم الذي تحاول منعه تم منعه سابقاً وإخفاؤه. بما أنك لا تمتلك صلاحية إخفاء المستخدم، لا يمكنك مشاهدة المنع أو تعديله.',
'ipbblocked' => 'لا يمكنك منع أو رفع منع مستخدمين آخرين لأنك ممنوع',
'ipbnounblockself' => 'لا يسمح لك برفع المنع عن نفسك',
# Developer tools
'lockdb' => 'قفل قاعدة البيانات',
'unlockdb' => 'فتح قاعدة البيانات',
-'lockdbtext' => 'إغلاق قاعدة البيانات سوف يمنع جميع المستخدمين من تحرير الصفحات وتغيير التفضيلات الخاصة بهم وتعديل قائمة المراقبة وغير ذلك من الأمور المتطلبة التعديل على قاعدة البيانات.
-من فضلك تأكد من أن هذا حقا ما ترغب القيام به، ومن أنك سوف تقوم بإزالة الغلق بعد الانتهاء من الصيانة.',
+'lockdbtext' => 'إغلاق قاعدة البيانات سوف يمنع جميع المستخدمين من تحرير الصفحات وتغيير التفضيلات الخاصة بهم وتعديل قائمة المراقبة وغير ذلك من الأمور التي تتطلب تعديل قاعدة البيانات.
+من فضلك تأكد من أن هذا حقاً ما ترغب القيام به، ومن أنك سوف تقوم بإزالة الغلق بعد الانتهاء من الصيانة.',
'unlockdbtext' => 'فتح قاعدة البيانات سيسترجع قدرة كل المستخدمين على تحرير الصفحات، تغيير تفضيلاتهم، تعديل قوائم المراقبة الخاصة بهم، وأشياء أخرى تحتاج التغيير في قاعدة البيانات.
من فضلك أكد أن هذا هو ما تريده.',
-'lockconfirm' => 'Ù\86عÙ\85Ø\8c أرÙ\8aد Ù\81عÙ\84ا Ù\82Ù\81Ù\84 Ù\82اعدة اÙ\84بÙ\8aاÙ\86ات.',
-'unlockconfirm' => 'Ù\86عÙ\85Ø\8c أرÙ\8aد Ù\81عÙ\84ا Ù\81ØªØ Ù\82اعدة اÙ\84بÙ\8aاÙ\86ات.',
+'lockconfirm' => 'Ù\86عÙ\85Ø\8c أرÙ\8aد Ù\82Ù\81Ù\84 Ù\82اعدة اÙ\84بÙ\8aاÙ\86ات Ù\81عÙ\84اÙ\8b.',
+'unlockconfirm' => 'Ù\86عÙ\85Ø\8c أرÙ\8aد Ù\81ØªØ Ù\82اعدة اÙ\84بÙ\8aاÙ\86ات Ù\81عÙ\84اÙ\8b.',
'lockbtn' => 'قفل قاعدة البيانات',
'unlockbtn' => 'رفع غلق قاعدة البيانات',
'locknoconfirm' => 'لم تقم بتعليم صندوق التأكيد.',
تذكر أن [[Special:UnlockDB|تزيل الغلق]] بعد اكتمال أعمال الصيانة.',
'unlockdbsuccesstext' => 'تم إعادة فتح قاعدة البيانات',
'lockfilenotwritable' => 'ملف غلق قاعدة البيانات لا يمكن الكتابة عليه.
-لغلق قاعدة البيانات أو إزالة الغلق يجب أن يكون هذا الملف قابلا للكتابة من قبل خادوم الوب.',
+لغلق قاعدة البيانات أو إزالة الغلق يجب أن يكون هذا الملف قابلاً للكتابة من قبل خادوم الويب.',
'databasenotlocked' => 'قاعدة البيانات ليست مغلقة.',
'lockedbyandtime' => '(من $1 على $2 في $3 )',
# Move page
'move-page' => 'نقل $1',
'move-page-legend' => 'نقل صفحة',
-'movepagetext' => "باستخدام الاستمارة بالأسفل بإمكانك أن تغير اسم الصفحة، وأن تنقل تاريخها للاسم الجديد.
+'movepagetext' => "باستخدام الاستمارة بالأسفل بإمكانك أن تغير اسم الصفحة، وأن تنقل تاريخها إلى لاسم الجديد.
العنوان القديم سيصبح تحويلة للعنوان الجديد.
-يمكنك تحديث التحويلات التي تشير إلى العنوان الأصلي تلقائيا.
+يمكنك تحديث التحويلات التي تشير إلى العنوان الأصلي تلقائياً.
لو اخترت ألا تفعل، تأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]].
-Ø£Ù\86ت Ù\85سؤÙ\88Ù\84 عÙ\86 اÙ\84تأÙ\83د Ù\85Ù\86 Ø£Ù\86 اÙ\84Ù\88صÙ\84ات تتصÙ\84 Ù\85ع بعضÙ\87ا بشÙ\83Ù\84 Ù\85Ù\86اسب.
+Ø£Ù\86ت Ù\85سؤÙ\88Ù\84 عÙ\86 اÙ\84تأÙ\83د Ù\85Ù\86 Ø£Ù\86 اÙ\84Ù\88صÙ\84ات تصÙ\84 Ø¥Ù\84Ù\89 اÙ\84صÙ\81Øات اÙ\84تÙ\8a Ù\8aÙ\81ترض Ø£Ù\86 تصÙ\84 Ø¥Ù\84Ù\8aÙ\87ا.
-لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة بالعنوان الجديد، إلا إذا كانت فارغة، أو تحويلة ولا تاريخ لها.
-هذا يعني أنك يمكنك استرجاع الصفحة لمكانها لو قمت بخطأ، وأنك لا يمكنك الكتابة على صفحة موجودة.
+لاحظ أنه '''لن يتم''' نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت فارغة، أو تحويلة ولا تاريخ لها.
+هذا يعني أنك تستطيع استرجاع الصفحة إلى مكانها لو قمت بخطأ، وأنك لا يمكنك الكتابة على صفحة موجودة.
'''تحذير!'''
-هذا قد يكون تغييرا كارثيا وغير متوقع لصفحة مشهورة؛
-من فضلك تأكد من فهم عواقب هذا قبل المتابعة.",
-'movepagetext-noredirectfixer' => "باستخدام الاستمارة بالأسفل بإمكانك أن تغير اسم الصفحة، وأن تنقل تاريخها للاسم الجديد.
+هذا قد يكون تغييراً كارثياً وغير متوقع لصفحة مشهورة؛
+من فضلك تأكد أنك تفهم عواقب هذا الفعل قبل أن تستمر.",
+'movepagetext-noredirectfixer' => "باستخدام الاستمارة بالأسفل بإمكانك أن تغير اسم الصفحة، وأن تنقل تاريخها إلى الاسم الجديد.
العنوان القديم سيصبح تحويلة للعنوان الجديد.
-يمكنك تحديث التحويلات التي تشير إلى العنوان الأصلي تلقائيا.
+يمكنك تحديث التحويلات التي تشير إلى العنوان الأصلي تلقائياً.
لو اخترت ألا تفعل، تأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]].
-أنت مسؤول عن التأكد من أن الوصلات تتصل مع بعضها بشكل مناسب.
+أنت المسؤول عن التأكد من أن الوصلات تصل إلى الصفحات التي يفترض أن تصل إليها.
-Ù\84اØظ Ø£Ù\86Ù\87 '''Ù\84Ù\86 Ù\8aتÙ\85''' Ù\86Ù\82Ù\84 اÙ\84صÙ\81ØØ© إذا Ù\83اÙ\86 Ù\87Ù\86اÙ\83 صÙ\81ØØ© بÙ\86Ù\81س اÙ\84عÙ\86Ù\88اÙ\86 اÙ\84جدÙ\8aدØ\8c Ø¥Ù\84ا إذا Ù\83اÙ\86ت Ù\81ارغةØ\8c Ø£Ù\88 تØÙ\88Ù\8aÙ\84Ø© Ù\88Ù\84ا تارÙ\8aØ® Ù\84Ù\87ا.
-هذا يعني أنك يمكنك استرجاع الصفحة لمكانها لو قمت بخطأ، وأنك لا يمكنك الكتابة على صفحة موجودة.
+لاحظ أنه '''لن يتم''' نقل الصفحة إذا كان هناك صفحة بنفس العنوان الجديد، إلا إذا كانت فارغة، أو تحويلة لا تاريخ لها.
+هذا يعني أنك تستطيع استرجاع الصفحة إلى مكانها لو قمت بخطأ، وأنك لا يمكنك الكتابة على صفحة موجودة.
'''تحذير!'''
-هذا قد يكون تغييرا كارثيا وغير متوقع لصفحة مشهورة؛
-من فضلك تأكد من فهم عواقب هذا قبل المتابعة",
+هذا قد يكون تغييراً كارثياً وغير متوقع لصفحة مشهورة؛
+من فضلك تأكد أنك تفهم عواقب هذا الفعل قبل أن تستمر.",
'movepagetalktext' => "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''':
* توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو
* قمت بإزالة اختيار الصندوق بالأسفل.
وفي هذه الحالات، يجب عليك نقل أو دمج محتويات الصفحة يدويا، إذا رغب في ذلك.",
'movearticle' => 'انقل الصفحة:',
-'moveuserpage-warning' => "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم <u>لن</u> يعاد تسميته.'''",
+'moveuserpage-warning' => "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم لن يعاد تسميته.'''",
'movenologin' => 'غير مسجل',
-'movenologintext' => 'يجب أن تكون مستخدما مسجلا وأن تقوم [[Special:UserLogin|بالدخول]] لكي تنقل صفحة.',
+'movenologintext' => 'يجب أن تكون مستخدماً مسجلاً وأن [[Special:UserLogin|تسجل دخولك]] لكي تنقل صفحة.',
'movenotallowed' => 'أنت لا تمتلك الصلاحية لنقل الصفحات.',
'movenotallowedfile' => 'أنت لا تمتلك الصلاحية لنقل الملفات.',
'cant-move-user-page' => 'أنت لا تمتلك الصلاحية لنقل صفحات المستخدم الرئيسية.',
'articleexists' => 'توجد صفحة بهذا الاسم، أو أن الاسم الذي تم اختياره غير صالح.
من فضلك اختر اسم آخر.',
'cantmove-titleprotected' => 'لا يمكنك نقل صفحة إلى هذا الموقع، لأن العنوان الجديد تمت حمايته ضد الإنشاء',
-'talkexists' => "'''الصفحة نفسها تم نقلها بنجاح، ولكن صفحة النقاش لم يمكن نقلها لوجود صفحة مسبقا تحت العنوان الجديد.
-من فضلك ادمجهما يدويا.'''",
+'talkexists' => "'''الصفحة نفسها تم نقلها بنجاح، ولكن صفحة النقاش لم يمكن نقلها لوجود صفحة مسبقاً تحت العنوان الجديد.
+من فضلك ادمجهما يدوياً.'''",
'movedto' => 'نُقِلت إلى',
'movetalk' => 'انقل صفحة النقاش المرفقة',
'move-subpages' => 'انقل الصفحات الفرعية (حتى $1)',
'move-talk-subpages' => 'انقل الصفحات الفرعية لصفحة النقاش (حتى $1)',
-'movepage-page-exists' => 'الصفحة $1 موجودة بالفعل ولا يمكن الكتابة عليها تلقائيا.',
+'movepage-page-exists' => 'الصفحة $1 موجودة بالفعل ولا يمكن الكتابة عليها تلقائياً.',
'movepage-page-moved' => 'نُقِلت صفحة $1 إلى $2.',
'movepage-page-unmoved' => 'لم يمكن نقل صفحة $1 إلى $2.',
-'movepage-max-pages' => 'تم نقل الحد الأقصى وهو {{PLURAL:$1||صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} ولن يتم نقل المزيد تلقائيا.',
+'movepage-max-pages' => 'تم نقل الحد الأقصى وهو {{PLURAL:$1||صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} ولن يتم نقل المزيد تلقائياً.',
'movelogpage' => 'سجل النقل',
'movelogpagetext' => 'بالأسفل قائمة بالصفحات التي تم نقلها.',
'movesubpage' => '{{PLURAL:$1||الصفحة الفرعية|الصفحتان الفرعيتان|الصفحات الفرعية}}',
لا يمكن نقل الصفحة على نفسها.',
'immobile-source-namespace' => 'غير قادر على نقل الصفحات في النطاق "$1"',
'immobile-target-namespace' => 'غير قادر على نقل الصفحات إلى النطاق "$1"',
-'immobile-target-namespace-iw' => 'وصلة الإنترويكي ليست هدفا صحيحا لنقل صفحة.',
+'immobile-target-namespace-iw' => 'وصلة الإنترويكي ليست هدفاً صالحاً لنقل صفحة.',
'immobile-source-page' => 'هذه الصفحة غير قابلة للنقل.',
'immobile-target-page' => 'غير قادر على النقل إلى العنوان الوجهة هذا.',
'imagenocrossnamespace' => 'لا يمكن نقل الملف إلى نطاق غير نطاق الملفات',
'move-over-sharedrepo' => '== الملف موجود ==
[[:$1]] موجود في مستودع مشترك. نقل الملف إلى هذا العنوان سوف يلغي الملف المشترك.',
'file-exists-sharedrepo' => 'اسم الملف الذي اخترته مستخدم من قبل في مستودع مشترك.
-من فضلك اختر اسما آخرا.',
+من فضلك اختر اسماً آخر.',
# Export
'export' => 'تصدير صفحات',
-'exporttext' => 'يمكنك تصدير النص وتاريخ تعديلات صفحة أو مجموعة صفحات في صيغة XML. هذا يمكن استيراده في ويكي آخر يستعمل ميدياويكي بواسطة الصفحة [[Special:Import|صفحة الاستيراد]].
+'exporttext' => 'يمكنك تصدير النص وتاريخ تعديلات صفحة أو مجموعة صفحات في صيغة XML.
+هذا يمكن استيراده إلى ويكي آخر يستعمل ميدياويكي بواسطة [[Special:Import|صفحة الاستيراد]].
-Ù\84تصدÙ\8aر صÙ\81ØاتØ\8c أدخÙ\84 اÙ\84عÙ\86اÙ\88Ù\8aÙ\86 Ù\81Ù\8a اÙ\84صÙ\86دÙ\88Ù\82 أسÙ\81Ù\84Ù\87Ø\8c عÙ\86Ù\88اÙ\86 Ù\88اØد Ù\81Ù\8a Ù\83Ù\84 سطرØ\8c Ù\85ع اختÙ\8aار Ù\85ا إذا Ù\83Ù\86ت ترغب Ù\81Ù\8a اÙ\84Ù\86سخة اÙ\84ØاÙ\84Ù\8aØ© باÙ\84إضاÙ\81Ø© Ø¥Ù\84Ù\89 اÙ\84Ù\86سخ اÙ\84Ù\82دÙ\8aÙ\85Ø© Ù\83اÙ\85Ù\84Ø©Ø\8c Ø£Ù\88 Ù\85ع Ù\85عÙ\84Ù\88Ù\85ات تارÙ\8aØ® اÙ\84صÙ\81ØØ© عÙ\86Ù\87ا، أو فقط النسخة الحالية مع معلومات عن التعديل الأخير.
+Ù\84تصدÙ\8aر اÙ\84صÙ\81ØاتØ\8c أدخÙ\84 عÙ\86اÙ\88Ù\8aÙ\86Ù\87ا Ù\81Ù\8a اÙ\84صÙ\86دÙ\88Ù\82 أسÙ\81Ù\84Ù\87Ø\8c عÙ\86Ù\88اÙ\86اÙ\8b Ù\88اØداÙ\8b Ù\81Ù\8a Ù\83Ù\84 سطرØ\8c Ù\85ع اختÙ\8aار Ù\85ا إذا Ù\83Ù\86ت ترغب بتصدÙ\8aر اÙ\84Ù\86سخة اÙ\84ØاÙ\84Ù\8aØ© Ù\85ع جÙ\85Ù\8aع اÙ\84Ù\86سخ اÙ\84Ù\82دÙ\8aÙ\85Ø©Ø\8c Ø£Ù\8a Ù\85ع Ù\83اÙ\85Ù\84 Ù\85عÙ\84Ù\88Ù\85ات تارÙ\8aØ® اÙ\84صÙ\81ØØ©، أو فقط النسخة الحالية مع معلومات عن التعديل الأخير.
-في الحالة الأخيرة يمكنك أيضا استخدام وصلة، على سبيل المثال [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] للصفحة "[[{{MediaWiki:Mainpage}}]]".',
+في الحالة الأخيرة يمكنك أيضاً استخدام وصلة، على سبيل المثال [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] للصفحة «[[{{MediaWiki:Mainpage}}]]».',
'exportall' => 'صدّر كل الصفحات',
'exportcuronly' => 'ضمن المراجعة الحالية فقط، وليس التاريخ الكامل',
'exportnohistory' => "----
'importnofile' => 'لم يتم رفع ملف استيراد.',
'importuploaderrorsize' => 'رفع ملف الاستيراد فشل.
الملف أكبر من حجم الرفع المسموح.',
-'importuploaderrorpartial' => 'رفع ملف الاستيراد فشل. الملف تم رفعه جزئيا.',
+'importuploaderrorpartial' => 'فشل رفع ملف الاستيراد. لم يتم رفع الملف إلا جزئياً.',
'importuploaderrortemp' => 'رفع ملف الاستيراد فشل.
هناك مجلد مؤقت مفقود.',
'import-parse-failure' => 'فشل تحليل استيراد XML',
'CreateAccount' => array( 'ܒܪܝ_ܚܘܫܒܢܐ' ),
'DeletedContributions' => array( 'ܫܘܬܦܘܝܬ̈ܐ_ܫܝܦܬ̈ܐ' ),
'Filepath' => array( 'ܫܒܝܠܐ_ܕܦܐܬܐ' ),
- 'Log' => array( 'ܣܓܠ̈ܐ' ),
+ 'Log' => array( 'ܣܓܠܐ', 'ܣܓܠ̈ܐ' ),
+ 'Lonelypages' => array( 'ܦܐܬܬ̈ܐ_ܝܬܡܬ̈ܐ' ),
'Longpages' => array( 'ܦܐܬܬ̈ܐ_ܐܪ̈ܝܟܬܐ' ),
'Movepage' => array( 'ܫܢܝ_ܦܐܬܐ' ),
'Mycontributions' => array( 'ܫܘܬܦܘܝܬ̈ܝ' ),
+ 'Mypage' => array( 'ܦܐܬܐ_ܕܝܠܝ' ),
+ 'Mytalk' => array( 'ܡܡܠܠܐ_ܕܝܠܝ' ),
+ 'Newimages' => array( 'ܠܦܦ̈ܐ_ܚܕ̈ܬܐ', 'ܨܘܪ̈ܬܐ_ܚܕ̈ܬܬܐ' ),
'Newpages' => array( 'ܦܐܬܬ̈ܐ_ܚܕ̈ܬܬܐ' ),
+ 'PermanentLink' => array( 'ܐܣܘܪܐ_ܦܝܘܫܐ' ),
'Preferences' => array( 'ܓܒܝܬ̈ܐ' ),
'Protectedpages' => array( 'ܦܐܬܬ̈ܐ_ܢܛܝܪ̈ܬܐ' ),
'Protectedtitles' => array( 'ܟܘܢܝ̈ܐ_ܢܛܝܪ̈ܐ' ),
'jumpto' => 'ܫܘܪ ܠ:',
'jumptonavigation' => 'ܐܠܦܪܘܬܐ',
'jumptosearch' => 'ܒܨܝܐ',
-'view-pool-error' => 'ܬÜ\98Ü\9dÜ\9aÜ\90Ø\8c Ü\9aÜ\95Ü¡Ì\88Ü\90 Ü\97Ü\98Ü\90 Ü\93Ü\97̈ܝܐ ܗܫܐܝܬ
-Ü£Ü\93Ü\9d Ü¡Ü¦Ü Ü\9aÜ¢Ì\88Ü\90 Ü©Ü«Ü\95Ü\98ܪÜ\90 Ü Ü¡Ü\9bÜ\90 Ü Ü\97Ü¢Ü\90 ܦÜ\90ܬܐ
-ܦÜ\9dÜ£Ü\90 Ü¡Ü¢Ü\9f Ü£Ü\9fÜ\9d Ü©Ü Ü\9dÜ Ü¡Ü¢ Ü©Ü\95Ü¡ Ü\95Ü\93ܪÜ\92ܬ Ü Ü¡Ü\9bÜ\9dÜ\90 Ü Ü\90Ü\97Ü\90 ܦÜ\90ܬÜ\90 ܬܢÜ\9dÜ¢Ü\98ܬ.
+'view-pool-error' => 'ܬÜ\98Ü\9dÜ\9aÜ\90Ø\8c ܬܫܡܫܬÌ\88Ü\90 Ü\90Ü¢Ü\98Ü¢ Ü Ü\90̈ܝܐ ܗܫܐܝܬ
+Ü£Ü\93Ü\9d Ü¡Ü¦Ü Ü\9aÜ¢Ì\88Ü\90 ܢܣÜ\9dÜ¢ Ü Ü\9aÜ\99Ü\9dÜ\90 Ü\95Ü\97Ü¢Ü\90 Ü\95ܦܐ
+ܦÜ\9dÜ£Ü\90 Ü¡Ü¢Ü\9f Ü£Ü\9fÜ\9d Ü©Ü Ü\9dÜ Ü¡Ü¢ Ü©Ü\95Ü¡ Ü\95ܬܢܣÜ\90 Ü Ü¡Ü\9bÜ\9dÜ\90 Ü Ü\97Ü¢Ü\90 Ü\95ܦÜ\90 Ü\99Ü\92ܢܬÜ\90 Ü\90Ü\9aܪܬÜ\90.
$1',
'pool-timeout' => 'ܫܠܡ ܥܕܢܐ ܣܒܪܬܐ ܠܚܠܩܐ',
'actionthrottled' => 'ܠܐ ܡܬܡܨܝܢܬܐ ܐܝܬܝܗܝ ܠܡܥܒܕ ܝܬܝܪ ܡܢ ܗܢܐ ܥܒܕܐ',
'viewsourcetext' => 'ܡܨܐ ܐܢܬ ܕܢܚܙܐ ܘܢܣܚܐ ܠܡܒܘ̈ܥܐ ܕܗܕܐ ܦܐܬܐ:',
'protectedinterface' => 'ܗܕܐ ܦܐܬܐ ܡܘܬܪܐ ܟܬܝܒܬܐ ܕܦܐܬܐ ܠܚܘܪܙܐ, ܘܐܝܬܝܗܝ ܢܛܪܬܐ ܠܡܘܢܥ ܚܘܒܠܐ.',
-'editinginterface' => "''ܙܘܗܪܐ:''' ܐܢܬ ܥܒܕܬ ܫܚܠܦܬܐ ܒܦܐܬܐ ܡܬܦܠܚܬ ܠܡܘܬܘܪ̈ܐ ܦܐܬܘܬ̈ܐ ܟܬܝܒ̈ܐ ܠܚܘܪܙܐ.
-Ü\9fÜ Ü«Ü\98Ü\9aÜ Ü¦Ü\90 Ü\92Ü\90Ü\97Ü\90 ܦÜ\90ܬÜ\90 Ü\92Ü\95 Ü¥Ü\92Ü\95 Ü\9fܪ Ü¥Ü Ü¡Ü\9aÜ\99Ü\9dܬÜ\90 ܦÜ\90ܬÜ\90 Ü\95Ü¡Ü¦Ü Ü\9aÜ¢Ü\90 Ü Ü¡Ü¦Ü Ü\9aÜ¢Ì\88Ü\90 Ü\90Ü\9aܪÌ\88Ü\9dܢܐ.
-Ü Ü¬Ü\98ܪÌ\88Ü\93Ü¡Ü\90Ø\8c Ü¡Ü¦Ü Ü\9a ܬܪܡÜ\9dܬÜ\90 ܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
+'editinginterface' => "'''ܙܘܗܪܐ:''' ܐܢܬ ܫܚܠܦܬ ܕܦܐ ܕܡܬܦܠܚ ܒܚܙܝܐ ܟܬܝܒܝܐ ܕܚܘܪܙܐ.
+Ü\9fÜ Ü«Ü\98Ü\9aÜ Ü¦Ü\90 Ü\92Ü\97Ü¢Ü\90 Ü\95ܦÜ\90 Ü¢Ü\97Ü\98Ü\90 Ü Ü\97 Ü¡Ü¥Ü\92Ü\95Ü¢Ü\98ܬÜ\90 Ü¥Ü Ü\90Ü£Ü\9fÜ¡Ü\90 Ü\95Ü\95ܦÜ\90 Ü\95Ü¡Ü¦Ü Ü\9aÜ¢Ü\90 Ü\95Ü¡Ü¦Ü Ü\9aÜ¢Ì\88Ü\90 Ü\90Ü\9aܪÌ\88ܢܐ.
+Ü Ü¬Ü\98ܪÌ\88Ü\93Ü¡Ü\90Ø\8c Ü\90Ü¦Ü Ü\9a ܬܪܡÜ\9dܬÜ\90 Ü\95ܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
'sqlhidden' => '(ܒܘܬܬܐ SQL ܛܫܝܐ)',
'namespaceprotected' => "ܠܝܬ ܠܟ ܦܣܣܐ ܠܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܚܩܠܐ ܕ'''$1'''.",
ܡܨܐ ܐܢܬ ܕܐܬܚܫܚ {{SITENAME}} ܐܝܟ ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ ܐܘ ܡܨܐ ܐܢܬ ܕ[[Special:UserLogin|ܬܥܘܠ]] ܒܚܘܫܒܢܐ ܥܝܢܗ ܐܘ ܐܝܟ ܡܦܠܚܢܐ ܐܚܪܢܐ.
-Ü\9aÜ\95 Ü\9fÜ¡Ü\90 Ü¡Ü¢ ܦÜ\90ܬܬÌ\88Ü\90 ܡܬÜ\9aÜ\99Ü\9dÜ¢ Ü\90Ü\9dÜ\9f Ü\95Ü\97Ü\98 Ü\90ܢܬ Ü¥Ü Ü\9dÜ Ü\90 Ü¥Ü\95Ü¡Ü\90 Ü\95Ü\90ܣܦܩܬ Ü Ü¦Ü\90ܬܬÌ\88ܐ ܠܒܝܟ̈ܐ ܕܡܦܐܬܢܐ ܕܝܠܟ",
+Ü\9aÜ\95 Ü\9fÜ¡Ü\90 Ü¡Ü¢ Ü\95Ì\88ܦÜ\90 ܡܬÜ\9aÜ\99Ü\9dÜ¢ Ü\90Ü\9dÜ\9f Ü\95Ü\97Ü\98 Ü\90ܢܬ Ü¥Ü Ü\9dÜ Ü\90 Ü¥Ü\95Ü¡Ü\90 Ü\95Ü\90ܣܦܩܬ Ü Ü\95Ì\88ܦܐ ܠܒܝܟ̈ܐ ܕܡܦܐܬܢܐ ܕܝܠܟ",
'welcomecreation' => '== ܒܫܝܢܐ, $1! ==
ܐܬܒܪܝ ܚܘܫܒܢܟ.
ܠܐ ܢܫܐ ܐܢܬ ܠܫܚܠܦܬܐ ܕ[[Special:Preferences|ܓܒܝܬ̈ܐ ܒ {{SITENAME}}]].',
'note' => "'''ܡܥܝܪܢܘܬܐ:'''",
'previewnote' => "'''ܕܟܪ ܕܗܢܘ ܚܝܪܐ ܩܕܡܝܐ ܒܠܚܘܕ'''.
ܫܘܚܠܦ̈ܐ ܕܝܠܟ ܠܐ ܐܬܠܒܟܘ ܥܕܡܐ ܠܗܫܐ!",
+'continue-editing' => 'ܐܓܡܪ ܠܫܘܚܠܦܐ',
'editing' => 'ܫܚܠܦܬܐ ܕ $1',
'creating' => 'ܣܘܝܡܐ ܕ $1',
'editingsection' => 'ܫܚܠܦܬܐ ܕ $1 (ܡܢܬܐ)',
'editingcomment' => 'ܫܚܠܦܬܐ ܕ $1 (ܡܢܬܐ ܚܕܬܐ)',
'yourtext' => 'ܟܬܒܬܐ ܕܝܠܟ',
+'storedversion' => 'ܬܢܝܬ̈ܐ ܐܣܝܢ̈ܐ',
'editingold' => "'''ܙܘܗܪܐ: ܫܚܠܦ ܐܢܬ ܬܢܝܬܐ ܥܬܝܩܬܐ ܕܕܦܐ ܗܢܐ.'''
ܐܢ ܠܒܟ ܐܢܬ ܕܦܐ ܗܢܐ, ܟܠ ܫܘ̈ܚܠܦܐ ܕܐܬܥܒܕܘ ܒܬܪ ܗܕܐ ܬܢܝܬܐ ܢܬܛܠܩܘܢ.",
'yourdiff' => 'ܦܪ̈ܝܫܘܝܬܐ',
'nchanges' => '$1 {{PLURAL:$1|ܫܘܚܠܦܐ|ܫܘܚܠܦ̈ܐ}}',
'recentchanges' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
'recentchanges-legend' => 'ܓܒܝܬ̈ܐ ܕܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ',
-'recentchangestext' => 'ܥܩܒ ܫܘܚܠܦ̈ܐ ܚܕܬ ܡܢ ܟܠ ܕܘܝܩܝ ܒܦܐܬܐ ܗܕܐ.',
+'recentchanges-summary' => 'ܥܩܒ ܫܘܚܠܦ̈ܐ ܚܕܬ ܡܢ ܟܠ ܕܘܝܩܝ ܒܦܐܬܐ ܗܕܐ.',
'recentchanges-label-newpage' => 'ܫܘܚܠܦܐ ܗܢܐ ܐܬܬܣܝܡ ܕܦܐ ܚܕܬܐ',
'recentchanges-label-minor' => 'ܗܢܘ ܫܘܚܠܦܐ ܙܥܘܪܐ',
'recentchanges-label-bot' => 'ܒܘܬ (bot) ܥܒܕ ܗܢܐ ܫܘܚܠܦܐ',
'nchanges' => '{{PLURAL:$1|kalekünuy|kalekünuy}} $1',
'recentchanges' => 'Weke kalekünun',
'recentchanges-legend' => 'Weke kalekünun ñi dullin',
-'recentchangestext' => 'Inayafin doy weke kalekünun tüfa mew.',
+'recentchanges-summary' => 'Inayafin doy weke kalekünun tüfa mew.',
'recentchanges-feed-description' => 'Inayafin doy weke kalekünun wiki ñi amuldungu mew',
'recentchanges-label-newpage' => 'Tüfachi wirin dewmakey kiñe we wülngiñ.',
'recentchanges-label-minor' => 'Tüfachi ta kiñe pichi wirin',
'padleft' => array( '0', 'باد_يسار', 'PADLEFT' ),
'padright' => array( '0', 'باد_يمين', 'PADRIGHT' ),
'special' => array( '0', 'خاص', 'special' ),
- 'defaultsort' => array( '1', 'ترتيب_قياسى:', 'ترتيب_افتراضى:', 'مفتاح_ترتيب_قياسى:', 'مفتاح_ترتيب_افتراضى:', 'ترتيب_تصنيف_قياسى:', 'ترتيب_تصنيف_افتراضى:', 'ترتيب_قياسي:', 'ترتيب_افتراضي:', 'مفتاح_ترتيب_قياسي:', 'مفتاح_ترتيب_افتراضي:', 'ترتيب_تصنيف_قياسي:', 'ترتيب_تصنيف_افتراضي:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+ 'defaultsort' => array( '1', 'ترتيب_قياسى:', 'ترتيب_افتراضى:', 'مفتاح_ترتيب_قياسى:', 'مفتاح_ترتيب_افتراضى:', 'ترتيب_تصنيف_قياسى:', 'ترتيب_تصنيف_افتراضى:', 'ترتيب_قياسي:', 'ترتيب_افتراضي:', 'مفتاح_ترتيب_قياسي:', 'مفتاح_ترتيب_افتراضي:', 'ترتيب_تصنيف_قياسي:', 'ترتيب_تصنيف_افتراضي:', 'ترتيب_غيابي:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'مسار_الملف:', 'FILEPATH:' ),
'tag' => array( '0', 'وسم', 'tag' ),
'hiddencat' => array( '1', '__تصنيف_مخفي__', '__HIDDENCAT__' ),
'nchanges' => '$1 {{PLURAL:$1|সাল-সলনি|সাল-সলনি}}',
'recentchanges' => 'শেহতীয়া সাল-সলনি',
'recentchanges-legend' => 'সাম্প্ৰতিক সালসলনিৰ পছন্দসমূহ',
-'recentchangestext' => 'ৱিকিত হোৱা শেহতীয়া সাল-সলনি এই পৃষ্ঠাত অনুসৰণ কৰক।',
+'recentchanges-summary' => 'ৱিকিত হোৱা শেহতীয়া সাল-সলনি এই পৃষ্ঠাত অনুসৰণ কৰক।',
'recentchanges-feed-description' => 'ৱিকিত হোৱা শেহতীয়া সাল-সলনি এই ফীডত অনুসৰণ কৰক।',
'recentchanges-label-newpage' => 'এই সম্পাদনাই এখন নতুন পৃষ্ঠা তৈয়াৰ কৰিছে',
'recentchanges-label-minor' => 'এইটো অগুৰুত্বপূৰ্ণ সম্পাদনা',
'nchanges' => '{{PLURAL:$1|un cambiu|$1 cambios}}',
'recentchanges' => 'Cambios recientes',
'recentchanges-legend' => 'Opciones de cambios recientes',
-'recentchangestext' => 'Sigui los últimos cambios de la wiki nesta páxina.',
+'recentchanges-summary' => 'Sigui los cambios más recientes na wiki nesta páxina.',
'recentchanges-feed-description' => 'Sigui nesta canal los últimos cambios de la wiki.',
'recentchanges-label-newpage' => 'Esta edición creó una páxina nueva',
'recentchanges-label-minor' => 'Esta ye una edición menor',
'http-curl-error' => 'Error al baxar la URL: $1',
'http-host-unreachable' => 'Nun se pudo acceder a la URL.',
'http-bad-status' => 'Hebo un problema demientres la llamada HTTP: $1 $2',
-'http-truncated-body' => 'El cuerpu solicitáu recibióse namái parcialmente.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Nun se pudo acceder a la URL',
'nchanges' => '$1 {{PLURAL:$1|dəyişiklik|dəyişiklik}}',
'recentchanges' => 'Son dəyişikliklər',
'recentchanges-legend' => 'Son dəyişiklik seçimləri',
-'recentchangestext' => "'''Ən son dəyişiklikləri bu səhifədən izləyin:'''",
+'recentchanges-summary' => "'''Ən son dəyişiklikləri bu səhifədən izləyin:'''",
'recentchanges-feed-description' => 'Vikidəki ən son dəyişiklikləri bu yayım kanalından izləyin.',
'recentchanges-label-newpage' => 'Bu dəyişiklik yeni səhifə yaratdı',
'recentchanges-label-minor' => 'Bu kiçik redaktədir',
* @author Timming
* @author Рустам Нурыев
* @author ҒатаУлла
+ * @author Ҡамыр Батыр
*/
$fallback = 'ru';
$namespaceNames = array(
NS_MEDIA => 'Медиа',
NS_SPECIAL => 'Ярҙамсы',
- NS_TALK => 'Фекер_алышыу',
+ NS_TALK => 'Фекерләшеү',
NS_USER => 'Ҡатнашыусы',
- NS_USER_TALK => 'Ҡатнашыусы_м-н_фекер_алышыу',
- NS_PROJECT_TALK => '$1_б-са_фекер_алышыу',
+ NS_USER_TALK => 'Ҡатнашыусы_менән_һөйләшеү',
+ NS_PROJECT_TALK => '$1_буйынса_фекерләшеү',
NS_FILE => 'Рәсем',
- NS_FILE_TALK => 'Рәсем_б-са_фекер_алышыу',
+ NS_FILE_TALK => 'Рәсем_буйынса_фекерләшеү',
NS_MEDIAWIKI => 'MediaWiki',
- NS_MEDIAWIKI_TALK => 'MediaWiki_б-са_фекер_алышыу',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_буйынса_фекерләшеү',
NS_TEMPLATE => 'Ҡалып',
- NS_TEMPLATE_TALK => 'Ҡалып_б-са_фекер_алышыу',
+ NS_TEMPLATE_TALK => 'Ҡалып_буйынса_фекерләшеү',
NS_HELP => 'Белешмә',
- NS_HELP_TALK => 'Белешмә_б-са_фекер_алышыу',
- NS_CATEGORY => 'Категория',
- NS_CATEGORY_TALK => 'Категория_б-са_фекер_алышыу',
+ NS_HELP_TALK => 'Белешмә_буйынса_фекерләшеү',
+ NS_CATEGORY => 'Төркөм',
+ NS_CATEGORY_TALK => 'Төркөм_буйынса_фекерләшеү',
+);
+
+$namespaceAliases = array(
+ 'Фекер_алышыу' => NS_TALK,
+ 'Ҡатнашыусы_м-н_фекер_алышыу' => NS_USER_TALK,
+ '$1_б-са_фекер_алышыу' => NS_PROJECT_TALK,
+ 'Рәсем_б-са_фекер_алышыу' => NS_FILE_TALK,
+ 'MediaWiki_б-са_фекер_алышыу' => NS_MEDIAWIKI_TALK,
+ 'Ҡалып_б-са_фекер_алышыу' => NS_TEMPLATE_TALK,
+ 'Белешмә_б-са_фекер_алышыу' => NS_HELP_TALK,
+ 'Категория' => NS_CATEGORY,
+ 'Категория_б-са_фекер_алышыу' => NS_CATEGORY_TALK,
+);
+
+$specialPageAliases = array(
+ 'Activeusers' => array( 'ӘүҙемҠатнашыусылар', 'АктивҠатнашыусылар' ),
);
// Remove Russian aliases
'nchanges' => '$1 {{PLURAL:$1|үҙгәртеү|үҙгәртеү}}',
'recentchanges' => 'Һуңғы үҙгәртеүҙәр',
'recentchanges-legend' => 'Һуңғы үҙгәртеүҙәр көйләүҙәре',
-'recentchangestext' => '{{grammar:genitive|{{SITENAME}}}}. биттәрендә индерелгән һуңғы үҙгәртеүҙәр исемлеге',
+'recentchanges-summary' => '{{grammar:genitive|{{SITENAME}}}}. биттәрендә индерелгән һуңғы үҙгәртеүҙәр исемлеге',
'recentchanges-feed-description' => 'Был таҫмалағы һуңғы үҙгәртеүҙәрҙе күҙәтеп барырға',
'recentchanges-label-newpage' => 'Был үҙгәртеү яңы бит яһаны',
'recentchanges-label-minor' => 'Был әҙ үҙгәреш',
'backend-fail-writetemp' => 'Ваҡытлы файлға яҙып булмай.',
'backend-fail-closetemp' => 'Ваҡытлы файлды ябып булмай.',
'backend-fail-read' => '«$1» файлын уҡып булмай.',
-'backend-fail-create' => '«$1» Ñ\84айлÑ\8bн Ñ\8fһап булмай.',
+'backend-fail-create' => '«$1» Ñ\84айлÑ\8bн Ñ\8fÒ\99Ñ\8bп булмай.',
'backend-fail-readonly' => '$1 һаҡлағысы әлегә уҡыу өсөн генә асыҡ. Сәбәбе: $2',
'backend-fail-synced' => '$1 файлы эске һаҡлағыста ярашһыҙ хәлдә тора.',
'backend-fail-connect' => '"$1" һаҡлағысы менән бәйләнеш яһап булманы.',
'api-error-verification-error' => 'Был файл боҙолған, йәки дөрөҫ булмаған ҡушымтаһы бар.',
# Durations
-'duration-seconds' => 'секунд',
+'duration-seconds' => '$1 {{PLURAL:$1|секунд|секунд}}',
'duration-minutes' => 'минут',
'duration-hours' => 'сәғәт',
'duration-days' => 'көн',
-'duration-weeks' => 'аҙна',
-'duration-years' => 'йыл',
-'duration-decades' => 'декада',
-'duration-centuries' => 'быуат',
-'duration-millennia' => 'меңйыллыҡ',
+'duration-weeks' => '$1 {{PLURAL:$1|аҙна|аҙналар|аҙна}}',
+'duration-years' => '$1 {{PLURAL:$1|йыл|йылдар}}',
+'duration-decades' => '$1 {{PLURAL:$1|ун көнлөк|ун көнлөктәр}}',
+'duration-centuries' => '$1 {{PLURAL:$1|быуат|быуаттар}}',
+'duration-millennia' => '$1 {{PLURAL:$1|меңйыллыҡ|меңйыллыҡтар}}',
);
'nchanges' => '$1 {{PLURAL:$1|Änderrung|Änderrungen}}',
'recentchanges' => 'Létzde Änderrungen',
'recentchanges-legend' => 'Åzoagopziónen',
-'recentchangestext' => "Auf derer Seiten kåst d' létzden Änderrungen auf '''{{SITENAME}}''' nochévavóing.",
+'recentchanges-summary' => "Auf derer Seiten kåst d' létzden Änderrungen auf '''{{SITENAME}}''' nochévavóing.",
'recentchanges-feed-description' => 'Vafóig mid dém Feed dé létzden Änderrungen in {{SITENAME}}.',
'recentchanges-label-newpage' => 'Neiche Seiten',
'recentchanges-label-minor' => 'Kloane Änderrungen',
'tog-hideminor' => 'Tagóon an mga saradít na paghirá sa nakakaági pa sanáng pagbabàgo',
'tog-hidepatrolled' => 'Tagóon an mga saradít na paghirá sa nakakaági pa sanáng pagbabàgo',
'tog-newpageshidepatrolled' => 'Tagóon an mga pigbabantayán na pahina sa lista nin mga bàgong pahina',
-'tog-extendwatchlist' => 'Palakbangón an lista kan pigbabantayan tangarig mahiling an gabos na angay na pagbabàgo',
-'tog-usenewrc' => 'Paorogón an kaaging pagbabàgo (JavaScript)',
+'tog-extendwatchlist' => 'Palakbangón an taytáy kan babantayan tanganing mahilíng an gabós na angay na pagbàgo',
+'tog-usenewrc' => 'Gamiton an pinauróg na mga nakaaging pagbàgo (kaipohan nin JavaScript)',
'tog-numberheadings' => 'Tolos na pagbílang sa mga pamayohán',
'tog-showtoolbar' => 'Ipahilíng an toolbar nin paghirá (JavaScript)',
'tog-editondblclick' => 'Hirahón sa dobleng paglagatík an mga pahina (JavaScript)',
'tog-editsection' => 'Togótan an paghirá kan seksyon sa paági kan mga takód na [hirá]',
'tog-editsectiononrightclick' => 'Togotan an paghirá kan seksyon sa pag-lagatik sa walá sa mga titulo nin seksyon (JavaScript)',
'tog-showtoc' => 'Ipahilíng an indise kan mga laog (para sa mga pahinang igwang sobra sa 3 pamayohan)',
-'tog-rememberpassword' => 'Giromdomón an mga paglaóg ko sa kompyuter na iní (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'tog-rememberpassword' => 'Giromdomón an mga paglaóg ko sa panlibotlibot na iní (sa nakaaging $1 {{PLURAL:$1|aldaw|mga aldaw}})',
'tog-watchcreations' => 'Idúgang an mga pahinang ginigíbo ko sa pigbabantayan ko',
'tog-watchdefault' => 'Idúgang an mga pahinang pighíhirá ko sa pigbabantayan ko',
'tog-watchmoves' => 'Idúgang an mga pahinang piglilípat ko sa pigbabantayan ko',
'tog-minordefault' => 'Markahán an gabos na paghirá nin sadit na paghirá',
'tog-previewontop' => 'Ipahilíng an patànaw bàgo an kahon nin paghirá',
'tog-previewonfirst' => 'Ipahilíng an patànaw sa enot na paghirá',
-'tog-nocache' => 'Pogólon an pag-abang nin mga pahina',
+'tog-nocache' => 'Pugolon an pag-abáng nin mga pahina',
'tog-enotifwatchlistpages' => 'E-koreohan ako pag pigribayan an pahinang pigbabantayan ko',
'tog-enotifusertalkpages' => 'E-koreohan ako pag pigribáyan an pahina kan sakóng olay',
'tog-enotifminoredits' => 'E-koreohan man giraray ako para sa saradit na paghirá kan mga pahina',
'vector-view-view' => 'Basáhon',
'vector-view-viewsource' => 'Hilingón an ginikánan',
'actions' => 'Mga paghiro',
+'namespaces' => 'Liang-liang',
'errorpagetitle' => 'Salâ',
'returnto' => 'Magbwelta sa $1.',
'page-rss-feed' => '"$1" Hungit na RSS',
'page-atom-feed' => '"$1" Hungit na Atomo',
'feed-atom' => 'Atomo',
-'red-link-title' => '$1 (dai pa naisusurat)',
+'red-link-title' => '$1 (daí pa naisusurat)',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Pahina',
'nextn' => 'sunód na {{PLURAL:$1|$1}}',
'viewprevnext' => 'Hilingón ($1 {{int:pipe-separator}} $2) ($3)',
'searchhelp-url' => 'Help:Mga laog',
+'searchprofile-everything' => 'Gabós',
+'searchprofile-articles-tooltip' => 'Hanapon sa $1',
'search-result-size' => '$1 ({{PLURAL:$2|1 tatarámon|$2 mga tatarámon}})',
'search-suggest' => 'Boót mo iyó: $1',
'search-interwiki-more' => '(dakol pa)',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|pagbabâgo|mga pagbabâgo}}',
'recentchanges' => 'Mga nakakaági pa sanáng pagbabàgo',
-'recentchangestext' => 'Hanápon an mga pinahúring pagbabàgo sa wiki digdí sa pahinang iní.',
+'recentchanges-summary' => 'Hanapon an mga pinahuring pagbabâgo sa wiki digdi sa páhinang ini.',
'recentchanges-feed-description' => 'Hanápon an mga pinakahuring pagbabàgo sa wiki sa hungit na ini.',
'rcnote' => "Mahihiling sa babâ an {{PLURAL:$1| '''1''' pagbabàgo|'''$1''' pagbabàgo}} sa huring {{PLURAL:$2|na aldaw|'''$2''' na aldaw}}, sa $3.",
'rcnotefrom' => "Mahihiling sa babâ an mga pagbabàgo poon kan '''$2''' (hasta '''$1''' ipinapahiling).",
'mostcategories' => 'Mga artikulong may pinaka dakol na kategorya',
'mostimages' => 'Pinakapigtatakodan na files',
'mostrevisions' => 'Mga artikulong may pinakadakol na pagpakarháy',
-'prefixindex' => 'Murô nin prefiho',
+'prefixindex' => 'Gabós na pahinang igwáng katakód',
'shortpages' => 'Haralìpot na pahina',
'longpages' => 'Mga halabang pahina',
'deadendpages' => 'Mga pahinang mayong luwasan',
# What links here
'whatlinkshere' => 'An nakatakód digdí',
-'whatlinkshere-title' => 'Mga pahinang nakatakod sa $1',
+'whatlinkshere-title' => 'Mga pahinang nakatakód sa $1',
'whatlinkshere-page' => 'Pahina:',
'linkshere' => "An mga minasunod na pahina nakatakod sa '''[[:$1]]''':",
'nolinkshere' => "Mayong pahinang nakatakod sa '''[[:$1]]'''.",
'ipblocklist-no-results' => 'Dai nabagat an hinagad na direccion nin IP o ngaran nin paragamit.',
'blocklink' => 'bagáton',
'unblocklink' => 'paagihon',
+'change-blocklink' => 'sanglián an pagbagat',
'contribslink' => 'mga ambág',
'autoblocker' => 'Enseguidang binagat an saimong direccion nin IP ta kaaaging ginamit ini ni "[[User:$1|$1]]". An rason nin pagbagat ni $1: "$2"',
'blocklogpage' => 'Usip nin pagbagat',
'tooltip-pt-anontalk' => 'Mga olay manonongod sa mga hira halî sa ip na ini',
'tooltip-pt-preferences' => 'Mga kabòtan ko',
'tooltip-pt-watchlist' => 'Lista nin mga pahina na pigbabantayan an mga pagbabàgo',
-'tooltip-pt-mycontris' => 'Lista kan mga kabòtan ko',
+'tooltip-pt-mycontris' => 'Taytáy kan mga kabòtan ko',
'tooltip-pt-login' => 'Pigaagda kang maglaog, alagad, bako man ining piriritan.',
'tooltip-pt-anonlogin' => 'Pig-aagda kang maglaog, alagad, bakô man ining piriritan.',
'tooltip-pt-logout' => 'Magluwas',
'tooltip-ca-talk' => 'Olay sa pahina nin laog',
'tooltip-ca-edit' => 'Pwede mong hirahón ining pahina. Gamiton tabi an patànaw na butones bago an pagtagama.',
-'tooltip-ca-addsection' => 'Magdugang nin komento sa orólay na ini.',
+'tooltip-ca-addsection' => 'Magdugang nin komento sa urulay na iní.',
'tooltip-ca-viewsource' => 'Sinagangán ining pahina. Mahihilíng mo an ginikanan.',
'tooltip-ca-history' => 'Mga nakaaging bersyon kaining pahina',
'tooltip-ca-protect' => 'Protektahán ining pahina',
'filedelete-archive-read-only' => 'An direktoryong archibo na "$1" dai nasusuratan kan webserver.',
# Browsing diffs
-'previousdiff' => '← Nakaáging kaibhán',
+'previousdiff' => '← Nakaaging kaibhán',
'nextdiff' => 'Kaibhán pa→',
# Media information
'sp-newimages-showfrom' => 'Hilingón an mga retratong nagpopoon sa $1',
# Bad image list
-'bad_image_list' => 'An pormato iyo an minasunod:
+'bad_image_list' => 'An husay iyó an minasunód:
-An mga nakalista sana (mga linyang nagpopoon sa *) an pigkokonsiderar.
-An enot na takod sa linya seguradong sarong takod sa sarong salang file.
-Ano man na takod sa parehong linyang ini pigkokonsiderar na eksepsyon, i.e. mga pahina na may file sa laog nin linya.',
+An mga nakataytáy saná (mga taytáy na nagpopoón sa *) iyó an kaayon.
+An inot na takód sa taytáy kaipohan na saróng takód sa saróng saláng file.
+Anó man na minasunód na takód sa ginikanan na taytáy iyó an kaayon sa mga paglain, i.e. mga pahina na may file na maluwás sa laog kan taytáy.',
# Metadata
'metadata' => 'Metadatos',
NS_TALK => 'Размовы',
NS_USER => 'Удзельнік',
NS_USER_TALK => 'Размовы_з_удзельнікам',
- NS_PROJECT_TALK => '$1_размовы',
+ NS_PROJECT_TALK => 'Размовы_пра_{{GRAMMAR:вінавальны|$1}}',
NS_FILE => 'Выява',
NS_FILE_TALK => 'Размовы_пра_выяву',
NS_MEDIAWIKI => 'MediaWiki',
NS_CATEGORY_TALK => 'Размовы_пра_катэгорыю',
);
+$namespaceAliases = array(
+ '$1_размовы' => NS_PROJECT_TALK,
+);
+
$magicWords = array(
'img_thumbnail' => array( '1', 'міні', 'мініяцюра', 'thumbnail', 'thumb' ),
'img_manualthumb' => array( '1', 'міні=$1', 'мініяцюра=$1', 'thumbnail=$1', 'thumb=$1' ),
'nchanges' => '$1 {{PLURAL:$1|мена|менаў}}',
'recentchanges' => 'Нядаўнія змяненні',
'recentchanges-legend' => 'Магчымасці паказу',
-'recentchangestext' => 'Гэта апошнія мены на пляцоўцы {{SITENAME}}.',
+'recentchanges-summary' => 'Гэта апошнія мены на пляцоўцы {{SITENAME}}.',
'recentchanges-feed-description' => 'Сачыць за найбольш актуальнымі змяненнямі ў віксе праз гэты струмень навін.',
'recentchanges-label-newpage' => 'Гэтай праўкай была створана новая старонка',
'recentchanges-label-minor' => 'Гэта дробная па значэнні праўка',
NS_TALK => 'Абмеркаваньне',
NS_USER => 'Удзельнік',
NS_USER_TALK => 'Гутаркі_ўдзельніка',
- NS_PROJECT_TALK => 'Абмеркаваньне_$1',
+ NS_PROJECT_TALK => 'Абмеркаваньне_{{GRAMMAR:родны|$1}}',
NS_FILE => 'Файл',
NS_FILE_TALK => 'Абмеркаваньне_файла',
NS_MEDIAWIKI => 'MediaWiki',
$namespaceAliases = array(
'Удзельніца' => NS_USER,
'Гутаркі ўдзельніцы' => NS_USER_TALK,
+ 'Абмеркаваньне_$1' => NS_PROJECT_TALK,
'Выява' => NS_FILE,
'Абмеркаваньне выявы' => NS_FILE_TALK,
);
'nchanges' => '$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}',
'recentchanges' => 'Апошнія зьмены',
'recentchanges-legend' => 'Налады апошніх зьменаў',
-'recentchangestext' => 'Сачыце за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} на гэтай старонцы.',
+'recentchanges-summary' => 'Сачыце за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} на гэтай старонцы.',
'recentchanges-feed-description' => 'Сачыце за апошнімі зьменамі ў {{GRAMMAR:месны|{{SITENAME}}}} праз гэтую стужку.',
'recentchanges-label-newpage' => 'Гэтым рэдагаваньнем была створаная новая старонка',
'recentchanges-label-minor' => 'Гэтае рэдагаваньне — дробнае',
'backend-fail-writetemp' => 'Немагчыма запісаць часовы файл.',
'backend-fail-closetemp' => 'Немагчыма закрыць часовы файл.',
'backend-fail-read' => 'Немагчыма прачытаць файл $1.',
-'backend-fail-create' => 'Немагчыма стварыць файл $1.',
+'backend-fail-create' => 'Немагчыма запісаць файл $1.',
'backend-fail-maxsize' => 'Не атрымалася стварыць файл $1, бо яго памер перавышае {{PLURAL:$2|$2 байт|$2 байта|$2 байтаў}}',
'backend-fail-readonly' => 'Сэрвэр сховішча «$1» у рэжыме толькі чытаньня. Прычына: «$2»',
'backend-fail-synced' => 'Стан файла «$1» адрозьніваецца ад стану на ўнутраным сэрвэры сховішча',
'http-curl-error' => 'Памылка выбаркі URL-адрасу: $1',
'http-host-unreachable' => 'Немагчыма дасягнуць URL-адрас',
'http-bad-status' => 'Адбылася памылка пад час выкананьня HTTP-запыту: $1 $2',
-'http-truncated-body' => 'Цела запыту было атрымана часткова.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Немагчыма дасягнуць URL-адрас',
'nchanges' => '$1 {{PLURAL:$1|промяна|промени}}',
'recentchanges' => 'Последни промени',
'recentchanges-legend' => 'Опции на списъка с последни промени',
-'recentchangestext' => "Проследяване на последните промени в {{SITENAME}}.
+'recentchanges-summary' => "Проследяване на последните промени в {{SITENAME}}.
Легенда: '''тек''' = разлика на текущата версия,
'''ист''' = история на версиите",
'revdelete-uname-hid' => 'скрито потребителско име',
'revdelete-restricted' => 'добавени ограничения за администраторите',
'revdelete-unrestricted' => 'премахнати ограничения за администраторите',
-'logentry-move-move' => '$1 премести страницата $3 към заглавие $4',
-'logentry-move-move-noredirect' => '$1 премести страницата $3 към заглавие $4 без да оставя пренасочване',
+'logentry-move-move' => '$1 премести „$3“ като „$4“',
+'logentry-move-move-noredirect' => '$1 премести „$3“ като „$4“ без пренасочване',
'logentry-move-move_redir' => '$1 премести страницата $3 като $4 (върху пренасочване)',
-'logentry-move-move_redir-noredirect' => '$1 премести върху пренасочване страницата $3 към заглавие $4 (без пренасочване)',
+'logentry-move-move_redir-noredirect' => '$1 премести върху пренасочване „$3“ като „$4“ без пренасочване',
'logentry-patrol-patrol' => '$1 отбеляза като патрулирана версия $4 на страницата „$3“',
'logentry-patrol-patrol-auto' => '$1 автоматично отбеляза като патрулирана версия $4 на страницата $3',
'logentry-newusers-newusers' => '$1 създаде потребителска сметка',
* @author Ezagren
* @author J Subhi
* @author Kaganer
+ * @author Riemogerz
*/
$fallback = 'id';
'Pembicaraan_Kategori' => NS_CATEGORY_TALK,
);
+$specialPageAliases = array(
+ 'Activeusers' => array( 'Pamakai_aktip' ),
+ 'Allmessages' => array( 'Pasan_sistim' ),
+ 'Allpages' => array( 'Daptar_tungkaran' ),
+ 'Ancientpages' => array( 'Tungkaran_lawas' ),
+ 'Badtitle' => array( 'Judul_nang_buruk' ),
+ 'Blankpage' => array( 'Tungkaran_kusung' ),
+ 'Booksources' => array( 'Sumbar_buku' ),
+ 'Categories' => array( 'Daptar_tumbung' ),
+ 'ChangeEmail' => array( 'Ganti_suril' ),
+ 'ComparePages' => array( 'Bandingakan_tungkaran' ),
+ 'Confirmemail' => array( 'Kunpirmasi_suril' ),
+ 'Contributions' => array( 'Kuntribusi_pamakai' ),
+ 'CreateAccount' => array( 'Ulah_akun' ),
+ 'Deadendpages' => array( 'Tungkaran_buntu' ),
+ 'DeletedContributions' => array( 'Kuntribusi_nang_dihapus' ),
+ 'EditWatchlist' => array( 'Babak_daptan_pantauan' ),
+ 'Fewestrevisions' => array( 'Parubahan_tasadikit' ),
+ 'Filepath' => array( 'Lukasi_barakas' ),
+ 'Listadmins' => array( 'Daptar_pambakal' ),
+ 'Listbots' => array( 'Daptar_bot' ),
+ 'Listfiles' => array( 'Daptar_barakas' ),
+ 'Listgrouprights' => array( 'Daptar_hak_kalumpuk' ),
+ 'Listredirects' => array( 'Daptar_paalihan' ),
+ 'Listusers' => array( 'Daptar_pamakai' ),
+ 'Log' => array( 'Catatan' ),
+ 'Longpages' => array( 'Tungkaran_panjang' ),
+ 'Mostcategories' => array( 'Tumbung_tabanyak' ),
+ 'Mostlinked' => array( 'Tungkaran_paling_dipakai' ),
+ 'Mostlinkedcategories' => array( 'Tumbung_paling_dipakai' ),
+ 'Mostlinkedtemplates' => array( 'Citakan_paling_dipakai' ),
+ 'Mostrevisions' => array( 'Paubahan_tabanyak' ),
+ 'Movepage' => array( 'Pindahakan_tungkaran' ),
+ 'Mycontributions' => array( 'Kuntribusi_ulun' ),
+ 'Mypage' => array( 'Tungkaran_ulun' ),
+ 'Mytalk' => array( 'Pamandiran_ulun' ),
+ 'Newimages' => array( 'Barakas_hanyar' ),
+ 'Newpages' => array( 'Tungkaran_hanyar' ),
+ 'Protectedpages' => array( 'Tungkaran_nang_dilindungi' ),
+ 'Protectedtitles' => array( 'Judul_nang_dilindungi' ),
+ 'Randompage' => array( 'Tungkaran_babarang' ),
+ 'Recentchanges' => array( 'Paubahan_tahanyar' ),
+);
+
$messages = array(
# User preference toggles
'tog-underline' => 'Garisi di bawah tautan',
'tog-showhiddencats' => 'Tampaiakan tutumbung tasungkup',
'tog-norollbackdiff' => 'Kada usah manampaiakan lainan imbah mambulikakan',
-'underline-always' => 'Salalu',
+'underline-always' => 'Tarus',
'underline-never' => 'Kada suah',
'underline-default' => 'Default Panjalajahan web',
'editfont-serif' => 'Tulisan Serif',
# Dates
-'sunday' => 'Ahat',
+'sunday' => 'Ahad',
'monday' => 'Sanayan',
'tuesday' => 'Salasa',
'wednesday' => 'Arba',
-'thursday' => 'Kemés',
+'thursday' => 'Kamis',
'friday' => 'Jumahat',
'saturday' => 'Saptu',
'sun' => 'Aha',
'mon' => 'San',
'tue' => 'Sal',
'wed' => 'Arb',
-'thu' => 'Kem',
+'thu' => 'Kam',
'fri' => 'Jum',
'sat' => 'Sap',
'january' => 'Januari',
'december' => 'Disimbir',
'january-gen' => 'Januari',
'february-gen' => 'Pibuari',
-'march-gen' => 'Marat',
+'march-gen' => 'Marit',
'april-gen' => 'April',
'may-gen' => 'Mai',
'june-gen' => 'Juni',
'august-gen' => 'Agustus',
'september-gen' => 'Siptimbir',
'october-gen' => 'Uktubir',
-'november-gen' => 'Nopember',
+'november-gen' => 'Nupimbir',
'december-gen' => 'Disimbir',
'jan' => 'Jan',
'feb' => 'Pib',
'ns-specialprotected' => 'Tungkaran istimiwa kada kawa dibabak.',
'titleprotected' => "Judul ngini dilindungi matan paulahan ulih [[User:$1|$1]].
Alasan nang dibariakan adalah ''$2''.",
+'filereadonlyerror' => 'Kada kawa mamudipikasi data "$1" marga repositori data "$2" ada di modus read-only.
+
+Administrator nang takunci nintu manawarakan panjalasan: "$3".',
# Virus scanner
'virus-badscanner' => "Konpigurasi buruk: pamindai virus kada dipinandui: ''$1''",
'invalidemailaddress' => 'Alamat suril ini kada kawa ditarima karana pormat kada sah.
Muhun buati sabuting alamat suril nang bujur pormatnya atawa puangkan haja isian itu.',
'cannotchangeemail' => 'Akun alamat suril kada kawa diganti pada wiki ngini.',
+'emaildisabled' => 'Situs naya kada kawa mangirim suril.',
'accountcreated' => 'Akun diulah',
'accountcreatedtext' => 'Akun pamakai gasan $1 sudah diulah.',
'createaccount-title' => 'Paulahan akun gasan {{SITENAME}}',
'updated' => '(Dihanyarakan)',
'note' => "'''Catatan:'''",
'previewnote' => "'''Ingatakanlah bahwasa ngini titilikan haja''' Parubahan Pian nang baluman disimpan!",
+'continue-editing' => 'Lanjutakan mambabak',
'previewconflict' => 'Titilikan ini mancarminakan naskah dalam naskah wilayah atas babakan sawagai mana ini akan mancungul amun disimpan.',
'session_fail_preview' => "'''Ampun! Kami kada kawa manarusakan babakan Pian karana kahilangan sési data.'''
Cubai pang sa'asa pulang.
'parser-template-loop-warning' => 'Citakan baulang takantup: [[$1]]',
'parser-template-recursion-depth-warning' => 'Citakan batas kadalaman recursi limpuar ($1)',
'language-converter-depth-warning' => 'Batas kadalaman pakonversi bahasa limpuar ($1)',
+'node-count-exceeded-category' => 'Tungkaran di mana node-count tarlalui',
+'node-count-exceeded-warning' => 'Tungkaran malabihi node-count',
+'expansion-depth-exceeded-category' => 'Tungkaran dimana kadalaman ikspansi talalui',
+'expansion-depth-exceeded-warning' => 'Tungkaran malabihi kadalaman ikspansi',
+'parser-unstrip-loop-warning' => 'Lingkaran unstrip taditiksi',
# "Undo" feature
'undo-success' => 'Babakan kawa diwalangi.
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|parubahan|parubahan}}',
-'recentchanges' => 'Parubahan tahanyar',
-'recentchanges-legend' => 'Pilihan parubahan tahanyar',
-'recentchangestext' => 'Jajak parubahan wiki pahanyarnya pada tungkaran ngini',
+'recentchanges' => 'Paubahan pahanyarnya',
+'recentchanges-legend' => 'Pilihan paubahan pahanyarnya',
+'recentchanges-summary' => 'Jajak parubahan wiki pahanyarnya pada tungkaran ngini',
'recentchanges-feed-description' => 'Susuri parubahan pahanyarnya dalam wiki di kitihan ini',
'recentchanges-label-newpage' => 'Babakan ngini maulah sabuah tungkaran hanyar',
'recentchanges-label-minor' => 'Ngini adalah sabuah babakan sapalih',
'recentchanges-label-bot' => 'Babakan ngini digawi ulih saikung bot',
'recentchanges-label-unpatrolled' => "Babakan ngini baluman ta'awasi",
-'rcnote' => "Di bawah ni {{PLURAL:$1|'''1'''|'''$1'''}} parubahan tahanyar dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} tauncit, sampai $4 pukul $5.",
+'rcnote' => "Di bawah ni {{PLURAL:$1|'''1'''|'''$1'''}} paubahan pahanyarnya dalam {{PLURAL:$2|'''1''' hari|'''$2''' hari}} tauncit, sampai $4 pukul $5.",
'rcnotefrom' => "Di bawah ngini parubahan tumatan '''$2''' (ditampaiakan sampai '''$1''' parubahan)",
-'rclistfrom' => 'Tampaiakan parubahan tahanyar matan $1',
+'rclistfrom' => 'Tampaiakan paubahan pahanyarnya matan $1',
'rcshowhideminor' => '$1 pambabakan sapalih',
'rcshowhidebots' => '$1 bot',
'rcshowhideliu' => '$1 pamakai nang babuat di log',
'rcshowhideanons' => '$1 pamakai kada bangaran',
'rcshowhidepatr' => "$1 babakan ta'awasi",
'rcshowhidemine' => '$1 babakan ulun',
-'rclinks' => 'Tampaiakan $1 parubahan tahanyar dalam $2 hari tauncit<br />$3',
+'rclinks' => 'Tampaiakan $1 paubahan pahanyarnya dalam $2 hari tauncit<br />$3',
'diff' => 'bida',
'hist' => 'halam',
'hide' => 'Sungkupakan',
'wantedpages' => 'Tutungkaran nang dihandaki',
'wantedpages-badtitle' => 'Judul kada sah dalam setelan kulihan: $1',
'wantedfiles' => 'Barakas nang dihandaki',
+'wantedfiletext-nocat' => 'Data-data naya dipakai tagal kada ada. Data matan ripusituri asing kawa tadaptar biar haja ada. Satiap
+File-file berikut digunakan tapi tidak ada. File dari repositori asing dapat terdaftar meskipun ada. Any such false positives will be <del>manyarang</del>.',
'wantedtemplates' => 'Citakan nang dihandaki',
'mostlinked' => 'Tutungkaran tatuju tautan pambanyaknya',
'mostlinkedcategories' => 'Tutumbung tatuju tautan pambanyaknya',
'allpagesbadtitle' => 'Judul tungkaran nang dibari kada sah atawa baisi sabuah awalan antar-bahasa atawa antar-wiki.
Nangini bisa baisi satu atawa labih karaktir nang saharusnya kadada di judul.',
'allpages-bad-ns' => '{{SITENAME}} kada baisi ngaran-kamar "$1".',
+'allpages-hide-redirects' => 'Sambunyiakan paalihan',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Itihi tahanyar.',
# Special:Categories
'categories' => 'Tutumbung',
'import-logentry-interwiki' => 'ditranswiki $1',
'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|ralatan|raralatan}} matan $2',
+# JavaScriptTest
+'javascripttest' => 'Mantis JavaScript',
+'javascripttest-pagetext-skins' => 'Pilih kulit nang cagar Pian cubai:',
+
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Tungkaran pamakai Pian',
'tooltip-pt-anonuserpage' => 'Tungkaran pamuruk matan alamat IP Pian mambabak sawagai',
'tooltip-n-mainpage-description' => 'Ilangi Tungkaran Tatambaian',
'tooltip-n-portal' => 'Pasal rangka-gawian, apa nang kawa pian gawi, di mana maugai sasuatu',
'tooltip-n-currentevents' => 'Gagai panjalasan prihal paristiwa damini',
-'tooltip-n-recentchanges' => 'Daptar parubahan tahanyar dalam wiki',
+'tooltip-n-recentchanges' => 'Daptar paubahan pahanyarnya dalam wiki',
'tooltip-n-randompage' => 'Tampaiakan sabuah babarang tungkaran',
'tooltip-n-help' => 'Wadah maugai patulung',
'tooltip-t-whatlinkshere' => 'Daptar samunyaan tungkaran wiki nang ada tautan ka sia',
-'tooltip-t-recentchangeslinked' => 'Parubahan tahanyar dalam tutungkaran tataut matan tungkaran ngini',
+'tooltip-t-recentchangeslinked' => 'Paubahan pahanyarnya dalam tutungkaran tataut matan tungkaran ngini',
'tooltip-feed-rss' => 'Kitihan RSS gasan tungkaran ini',
'tooltip-feed-atom' => 'Kitihan Atum gasan tungkaran ngini',
'tooltip-t-contributions' => 'Sabuah daptar sumbangan pamakai ngini',
'feedback-bugcheck' => 'Harat! hanyar dipariksa bahwasa ngini lainan salah asa [$1 bug nang dipinandui].',
'feedback-bugnew' => 'Ulun mamariksa. Malapurakan sabuah bug hanyar',
+# API errors
+'api-error-missingresult' => 'Kasalahan intarnal: kada kawa manantuakan napakah panyalinan tuntung.',
+'api-error-mustbeloggedin' => 'Pian harus babuat ka log gasan maunggah barakas.',
+'api-error-mustbeposted' => 'Ada bug di parangkat lamah naya; kada mamakai mituda HTTP nang bujur.',
+'api-error-noimageinfo' => 'Paunggahan tuntung, tagal paladen kada mambarii inpurmasi napa haja masalah barakas.',
+'api-error-nomodule' => 'Kasalahan intarnal: kada ada modul unggahan nang ditatapakan.',
+'api-error-ok-but-empty' => 'Kasalahan intarnal: kada ada tanggapan matan paladen.',
+'api-error-overwrite' => 'Kada dibariakan manindihi barakas nang sudah ada.',
+'api-error-stashfailed' => 'Kasalahan intarnal: server gagal manyimban barakas samantara.',
+'api-error-timeout' => 'Peladen kada marispun di waktu nang diharapakan',
+'api-error-unclassified' => 'Tajadi kasalahan nang kada dikatahui.',
+'api-error-unknown-code' => 'Kasalahan kada dipinandui: "$1".',
+'api-error-unknown-error' => 'Kasalahan intarnal: tajadi kasalahan pas mancuba maunggah barakas Pian.',
+'api-error-unknown-warning' => 'Paringatan kada dipinandui: "$1".',
+'api-error-unknownerror' => 'Kasalahan kada dipinandui: "$1".',
+'api-error-uploaddisabled' => 'Paunggahan dinunaktipakan di wiki naya.',
+'api-error-verification-error' => 'Barakas naya kira-kira rusak atawa baisi ikstinsi nang salah.',
+
);
'nchanges' => '$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}',
'recentchanges' => 'সাম্প্রতিক পরিবর্তনসমূহ',
'recentchanges-legend' => 'সাম্প্রতিক পরিবর্তনের পছন্দসমূহ',
-'recentchangestext' => 'এই পাতায় উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।',
+'recentchanges-summary' => 'এই পাতায় উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।',
'recentchanges-feed-description' => 'এই ফিডে উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।',
'recentchanges-label-newpage' => 'এই সম্পাদনায় একটি নতুন পাতা তৈরি হয়েছে',
'recentchanges-label-minor' => 'এটি একটি অনুল্লেখিত সম্পাদনা',
'intentionallyblankpage' => 'এই পাতাটি ইচ্ছা করে খালি রাখা হয়েছে',
# External image whitelist
-'external_image_whitelist' => ' #এই লাইন ঠিক যেমন আছে<প্রাক> তেমন রাখুন
+'external_image_whitelist' => ' #এই লাইন ঠিক যেমন আছে<প্রাক> তেমন রাখুন<pre>
#রেগুলার এক্সপ্রেশনের টুকরা নীচে (শুধুমাত্র অংশ / / মধ্যে যে যায়) বসান
#এইগুলি এক্সটার্নাল (hotlinked) ইমেজের URL-এর সাথে মেলানো হবে
#যেগুলি মিলবে, সেগুলি চিত্র হিসাবে প্রদর্শিত হবে, অন্যথায় শুধুমাত্র ইমেজ লিঙ্ক প্রদর্শিত হবে
#যে লাইনের প্রারম্ভে # আছে সেই লাইনগুলি মন্তব্যসমূহ হিসাবে ব্যবহার করা হয়
#এটি কেস-অসংবেদী
-#এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</ প্রাক>',
+#এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</pre>',
# Special:Tags
'tag-filter' => '[[Special:Tags|ট্যাগ]] ছাকনী:',
'nchanges' => '$1 {{PLURAL:$1|kemm|kemm}}',
'recentchanges' => 'Kemmoù diwezhañ',
'recentchanges-legend' => "Dibarzhioù ar c'hemmoù diwezhañ",
-'recentchangestext' => "Dre ar bajenn-mañ e c'hallit heuliañ ar c'hemmoù diwezhañ bet degaset d'ar wiki.",
+'recentchanges-summary' => "Dre ar bajenn-mañ e c'hallit heuliañ ar c'hemmoù diwezhañ bet degaset d'ar wiki.",
'recentchanges-feed-description' => "Heuilhit ar c'hemmoù diwezhañ er wiki el lusk-mañ.",
'recentchanges-label-newpage' => "Gant ar c'hemm-mañ e vo krouet ur bajenn nevez.",
'recentchanges-label-minor' => "Ur c'hemm dister eo hemañ",
'note' => "'''Pažnja:'''",
'previewnote' => "'''Ne zaboravite da je ovo samo pregled'''
Izmjene stranice nisu još sačuvane!",
+'continue-editing' => 'Nastavi uređivati',
'previewconflict' => 'Ovaj pregled reflektuje tekst u gornjem polju
kako će izgledati ako pritisnete "Sačuvaj članak".',
'session_fail_preview' => "'''Izvinjavamo se! Nismo mogli obraditi vašu izmjenu zbog gubitka podataka o prijavi. Molimo pokušajte ponovno. Ako i dalje ne bude radilo, pokušajte se [[Special:UserLogout|odjaviti]] i ponovno prijaviti.'''",
'nchanges' => '$1 {{PLURAL:$1|promjena|promjene|promjena}}',
'recentchanges' => 'Nedavne izmjene',
'recentchanges-legend' => 'Postavke nedavnih izmjena',
-'recentchangestext' => 'Na ovoj stranici možete pratiti nedavne izmjene.',
+'recentchanges-summary' => 'Na ovoj stranici možete pratiti nedavne izmjene.',
'recentchanges-feed-description' => 'Na ovoj stranici možete pratiti nedavne izmjene.',
'recentchanges-label-newpage' => 'Ovom izmjenom se pravi nova stranica',
'recentchanges-label-minor' => 'Ovo je mala izmjena',
'allpagesbadtitle' => 'Dati naziv stranice je nepravilan ili ima međujezički ili interwiki prefiks.
Možda sadrži jedan ili više znakova koji se ne mogu koristiti u naslovima.',
'allpages-bad-ns' => '{{SITENAME}} nema imenski prostor "$1".',
+'allpages-hide-redirects' => 'Sakrij preusmjerenja',
# Special:Categories
'categories' => 'Kategorije',
);
$specialPageAliases = array(
+ 'Activeusers' => array( 'Usuaris_actius' ),
'Allmessages' => array( 'Missatges', 'MediaWiki' ),
- 'Allpages' => array( 'Llista de pàgines' ),
- 'Ancientpages' => array( 'Pàgines velles' ),
- 'Blankpage' => array( 'Pàgina en blanc', 'Blanc' ),
+ 'Allpages' => array( 'Llista_de_pàgines' ),
+ 'Ancientpages' => array( 'Pàgines_velles' ),
+ 'Badtitle' => array( 'Títol_incorrecte' ),
+ 'Blankpage' => array( 'Pàgina_en_blanc', 'Blanc' ),
'Block' => array( 'Bloca' ),
'Blockme' => array( 'Bloca\'m' ),
- 'Booksources' => array( 'Fonts bibliogràfiques' ),
- 'BrokenRedirects' => array( 'Redireccions rompudes' ),
- 'ChangePassword' => array( 'Reinicia contrasenya' ),
- 'Confirmemail' => array( 'Confirma adreça' ),
+ 'Booksources' => array( 'Fonts_bibliogràfiques' ),
+ 'BrokenRedirects' => array( 'Redireccions_rompudes' ),
+ 'ChangeEmail' => array( 'Canvia_adreça_electrònica' ),
+ 'ChangePassword' => array( 'Reinicia_contrasenya' ),
+ 'Confirmemail' => array( 'Confirma_adreça' ),
'Contributions' => array( 'Contribucions' ),
- 'CreateAccount' => array( 'Crea compte' ),
+ 'CreateAccount' => array( 'Crea_compte' ),
'Deadendpages' => array( 'Atzucacs' ),
- 'DeletedContributions' => array( 'Contribucions esborrades' ),
+ 'DeletedContributions' => array( 'Contribucions_esborrades' ),
'Disambiguations' => array( 'Desambiguacions' ),
- 'DoubleRedirects' => array( 'Redireccions dobles' ),
- 'Emailuser' => array( 'Envia missatge' ),
+ 'DoubleRedirects' => array( 'Redireccions_dobles' ),
+ 'Emailuser' => array( 'Envia_missatge' ),
'Export' => array( 'Exporta' ),
- 'Fewestrevisions' => array( 'Pàgines menys editades' ),
- 'FileDuplicateSearch' => array( 'Cerca fitxers duplicats' ),
+ 'Fewestrevisions' => array( 'Pàgines_menys_editades' ),
+ 'FileDuplicateSearch' => array( 'Cerca_fitxers_duplicats' ),
'Import' => array( 'Importa' ),
- 'BlockList' => array( 'Usuaris blocats' ),
- 'LinkSearch' => array( 'Enllaços web', 'Busca enllaços', 'Recerca d\'enllaços web' ),
+ 'BlockList' => array( 'Usuaris_blocats' ),
+ 'LinkSearch' => array( 'Enllaços_web', 'Busca_enllaços', 'Recerca_d\'enllaços_web' ),
'Listadmins' => array( 'Administradors' ),
'Listbots' => array( 'Bots' ),
'Listfiles' => array( 'Imatges' ),
- 'Listgrouprights' => array( 'Drets dels grups d\'usuaris' ),
+ 'Listgrouprights' => array( 'Drets_dels_grups_d\'usuaris' ),
'Listredirects' => array( 'Redireccions' ),
'Listusers' => array( 'Usuaris' ),
- 'Lockdb' => array( 'Bloca bd' ),
+ 'Lockdb' => array( 'Bloca_bd' ),
'Log' => array( 'Registre' ),
- 'Lonelypages' => array( 'Pàgines òrfenes' ),
- 'Longpages' => array( 'Pàgines llargues' ),
- 'MergeHistory' => array( 'Fusiona historial' ),
- 'MIMEsearch' => array( 'Cerca MIME' ),
- 'Mostcategories' => array( 'Pàgines amb més categories' ),
- 'Mostimages' => array( 'Imatges més útils' ),
- 'Mostlinked' => array( 'Pàgines més enllaçades' ),
- 'Mostlinkedcategories' => array( 'Categories més útils' ),
- 'Mostlinkedtemplates' => array( 'Plantilles més útils' ),
- 'Mostrevisions' => array( 'Pàgines més editades' ),
+ 'Lonelypages' => array( 'Pàgines_òrfenes' ),
+ 'Longpages' => array( 'Pàgines_llargues' ),
+ 'MergeHistory' => array( 'Fusiona_historial' ),
+ 'MIMEsearch' => array( 'Cerca_MIME' ),
+ 'Mostcategories' => array( 'Pàgines_amb_més_categories' ),
+ 'Mostimages' => array( 'Imatges_més_útils' ),
+ 'Mostlinked' => array( 'Pàgines_més_enllaçades' ),
+ 'Mostlinkedcategories' => array( 'Categories_més_útils' ),
+ 'Mostlinkedtemplates' => array( 'Plantilles_més_útils' ),
+ 'Mostrevisions' => array( 'Pàgines_més_editades' ),
'Movepage' => array( 'Reanomena' ),
- 'Mycontributions' => array( 'Contribucions pròpies' ),
- 'Mypage' => array( 'Pàgina personal' ),
- 'Mytalk' => array( 'Discussió personal' ),
- 'Newimages' => array( 'Imatges noves' ),
- 'Newpages' => array( 'Pàgines noves' ),
- 'Popularpages' => array( 'Pàgines populars' ),
+ 'Mycontributions' => array( 'Contribucions_pròpies' ),
+ 'Mypage' => array( 'Pàgina_personal' ),
+ 'Mytalk' => array( 'Discussió_personal' ),
+ 'Newimages' => array( 'Imatges_noves' ),
+ 'Newpages' => array( 'Pàgines_noves' ),
+ 'Popularpages' => array( 'Pàgines_populars' ),
'Preferences' => array( 'Preferències' ),
- 'Prefixindex' => array( 'Cerca per prefix' ),
- 'Protectedpages' => array( 'Pàgines protegides' ),
- 'Protectedtitles' => array( 'Títols protegits' ),
- 'Randompage' => array( 'Article aleatori', 'Atzar', 'Aleatori' ),
- 'Randomredirect' => array( 'Redirecció aleatòria' ),
- 'Recentchanges' => array( 'Canvis recents' ),
+ 'Prefixindex' => array( 'Cerca_per_prefix' ),
+ 'Protectedpages' => array( 'Pàgines_protegides' ),
+ 'Protectedtitles' => array( 'Títols_protegits' ),
+ 'Randompage' => array( 'Article_aleatori', 'Atzar', 'Aleatori' ),
+ 'Randomredirect' => array( 'Redirecció_aleatòria' ),
+ 'Recentchanges' => array( 'Canvis_recents' ),
'Recentchangeslinked' => array( 'Seguiment' ),
- 'Revisiondelete' => array( 'Esborra versió' ),
+ 'Revisiondelete' => array( 'Esborra_versió' ),
+ 'RevisionMove' => array( 'Mou_versió' ),
'Search' => array( 'Cerca' ),
- 'Shortpages' => array( 'Pàgines curtes' ),
- 'Specialpages' => array( 'Pàgines especials' ),
+ 'Shortpages' => array( 'Pàgines_curtes' ),
+ 'Specialpages' => array( 'Pàgines_especials' ),
'Statistics' => array( 'Estadístiques' ),
- 'Uncategorizedcategories' => array( 'Categories sense categoria' ),
- 'Uncategorizedimages' => array( 'Imatges sense categoria' ),
- 'Uncategorizedpages' => array( 'Pàgines sense categoria' ),
- 'Uncategorizedtemplates' => array( 'Plantilles sense categoria' ),
+ 'Unblock' => array( 'Desbloca', 'Desbloqueja' ),
+ 'Uncategorizedcategories' => array( 'Categories_sense_categoria' ),
+ 'Uncategorizedimages' => array( 'Imatges_sense_categoria' ),
+ 'Uncategorizedpages' => array( 'Pàgines_sense_categoria' ),
+ 'Uncategorizedtemplates' => array( 'Plantilles_sense_categoria' ),
'Undelete' => array( 'Restaura' ),
- 'Unlockdb' => array( 'Desbloca bd' ),
- 'Unusedcategories' => array( 'Categories no usades' ),
- 'Unusedimages' => array( 'Imatges no usades' ),
- 'Unusedtemplates' => array( 'Plantilles no usades' ),
- 'Unwatchedpages' => array( 'Pàgines desateses' ),
+ 'Unlockdb' => array( 'Desbloca_bd' ),
+ 'Unusedcategories' => array( 'Categories_no_usades' ),
+ 'Unusedimages' => array( 'Imatges_no_usades' ),
+ 'Unusedtemplates' => array( 'Plantilles_no_usades' ),
+ 'Unwatchedpages' => array( 'Pàgines_desateses' ),
'Upload' => array( 'Carrega' ),
- 'Userlogin' => array( 'Registre i entrada' ),
- 'Userlogout' => array( 'Finalitza sessió' ),
+ 'Userlogin' => array( 'Registre_i_entrada' ),
+ 'Userlogout' => array( 'Finalitza_sessió' ),
'Userrights' => array( 'Drets' ),
'Version' => array( 'Versió' ),
- 'Wantedcategories' => array( 'Categories demanades' ),
- 'Wantedfiles' => array( 'Arxius demanats' ),
- 'Wantedpages' => array( 'Pàgines demanades' ),
- 'Watchlist' => array( 'Llista de seguiment' ),
+ 'Wantedcategories' => array( 'Categories_demanades' ),
+ 'Wantedfiles' => array( 'Arxius_demanats' ),
+ 'Wantedpages' => array( 'Pàgines_demanades' ),
+ 'Wantedtemplates' => array( 'Plantilles_demanades' ),
+ 'Watchlist' => array( 'Llista_de_seguiment' ),
'Whatlinkshere' => array( 'Enllaços' ),
- 'Withoutinterwiki' => array( 'Sense interwiki' ),
+ 'Withoutinterwiki' => array( 'Sense_interwiki' ),
);
$linkTrail = "/^((?:[a-zàèéíòóúç·ïü]|'(?!'))+)(.*)$/sDu";
'nchanges' => '$1 {{PLURAL:$1|canvi|canvis}}',
'recentchanges' => 'Canvis recents',
'recentchanges-legend' => 'Opcions de canvis recents',
-'recentchangestext' => 'Seguiu els canvis recents del projecte {{SITENAME}} en aquesta pàgina.',
+'recentchanges-summary' => 'Seguiu els canvis recents del projecte {{SITENAME}} en aquesta pàgina.',
'recentchanges-feed-description' => 'Segueix en aquest canal els canvis més recents del wiki.',
'recentchanges-label-newpage' => 'Aquesta modificació inicià una pàgina',
'recentchanges-label-minor' => 'Aquesta és una modificació menor',
'http-curl-error' => "Error en recuperar l'URL: $1",
'http-host-unreachable' => "No s'ha pogut accedir a l'URL.",
'http-bad-status' => 'Hi ha hagut un problema durant la petició HTTP: $1 $2',
-'http-truncated-body' => "El cos de la sol·licitud només s'ha rebut parcialment.",
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => "No s'ha pogut accedir a l'URL",
'nchanges' => '$1 {{PLURAL:$1|گۆڕانکاری|گۆڕانکاری}}',
'recentchanges' => 'دوایین گۆڕانکارییەکان',
'recentchanges-legend' => 'ھەڵبژاردەکانی دوایین گۆڕانکارییەکان',
-'recentchangestext' => 'دÙ\88اÛ\8c دÙ\88اÛ\8cÛ\8cÙ\86 Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95کاÙ\86Û\8c ئÛ\95Ù\85 Ù\88Û\8cÚ©Û\8cÛ\95 بکÛ\95Ù\88Û\95 Ù\84Û\95Ù\85 ئÛ\95Ù\85 Ù¾Û\95Ú\95Ù\88Û\95.',
+'recentchanges-summary' => 'Ù\84Û\95Ù\85 Ù¾Û\95Ú\95Û\95دا بÛ\95 دÙ\88اÛ\8c دÙ\88اÛ\8cÛ\8cÙ\86 Ú¯Û\86Ú\95اÙ\86کارÛ\8cÛ\8cÛ\95کاÙ\86 Ù\84Û\95Ù\85 Ù\88Û\8cÚ©Û\8cÛ\95دا بکÛ\95Ù\88Û\95.',
'recentchanges-feed-description' => 'دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.',
'recentchanges-label-newpage' => 'ئەم دەستکاریە لاپەڕەیەکی نوێی درووستکرد',
'recentchanges-label-minor' => 'ئەمە دەستکاریەکی بچووکە',
# Diffs
'history-title' => 'Historie verzí stránky „$1“',
+'difference-title' => 'Porovnání verzí stránky „$1“',
+'difference-title-multipage' => 'Porovnání stránek „$1“ a „$2“',
'difference-multipage' => '(Rozdíly mezi stránkami)',
'lineno' => 'Řádka $1:',
'compareselectedversions' => 'Porovnat vybrané verze',
'nchanges' => '$1 {{PLURAL:$1|změna|změny|změn}}',
'recentchanges' => 'Poslední změny',
'recentchanges-legend' => 'Možnosti posledních změn',
-'recentchangestext' => 'Sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}} na této stránce.',
+'recentchanges-summary' => 'Sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}} na této stránce.',
'recentchanges-feed-description' => 'Na tomto kanále sledujte poslední změny na {{grammar:6sg|{{SITENAME}}}}.',
'recentchanges-label-newpage' => 'Touto editací byla založena nová stránka',
'recentchanges-label-minor' => 'Toto je malá editace',
'backend-fail-writetemp' => 'Do dočasného souboru nelze zapisovat.',
'backend-fail-closetemp' => 'Dočasný soubor nelze zavřít.',
'backend-fail-read' => 'Soubor $1 nelze číst.',
-'backend-fail-create' => 'Soubor $1 nelze vytvořit.',
-'backend-fail-maxsize' => 'Nelze vytvořit soubor $1, protože je větší než {{PLURAL:$2|$2 bajt|$2 bajty|$2 bajtů}}.',
+'backend-fail-create' => 'Nepodařilo se zapsat do souboru $1.',
+'backend-fail-maxsize' => 'Nepodařilo se zapsat do souboru $1, protože je větší než {{PLURAL:$2|$2 bajt|$2 bajty|$2 bajtů}}.',
'backend-fail-readonly' => 'Koncový úložný systém „$1“ je momentálně pouze pro čtení. Udaným důvodem je: „$2“',
'backend-fail-synced' => 'Soubor „$1“ je v interních koncových úložných systémech v nekonzistentním stavu',
'backend-fail-connect' => 'Nepodařilo se připojit ke koncovému úložnému systému „$1“.',
'backend-fail-internal' => 'V koncovém úložném systému „$1“ došlo k neznámé chybě.',
'backend-fail-contenttype' => 'Nelze určit typ obsahu souboru k uložení do „$1“.',
'backend-fail-batchsize' => 'Koncový úložný systém přijal dávku s $1 {{PLURAL:souborovou operací|souborovými operacemi}}; maximum je {{PLURAL:$2|$2}}.',
+'backend-fail-usable' => 'Nepodařilo se zapsat do souboru $1 kvůli nedostatečným oprávněním nebo chybějícím adresářům/kontejnerům.',
# File journal errors
'filejournal-fail-dbconnect' => 'Nelze se připojit k žurnálové databázi pro koncový úložný systém „$1“.',
'http-curl-error' => 'Chyba při čtení z URL: $1',
'http-host-unreachable' => 'Nepodařilo se kontaktovat URL',
'http-bad-status' => 'Při provádění HTTP požadavku nastal problém: $1 $2',
-'http-truncated-body' => 'Přijaté tělo požadavku bylo neúplné.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Z URL nelze číst',
'filereadonlyerror' => 'Nid oes modd newid y ffeil "$1" oherwydd nad oes modd gwneud dim heblaw darllen storfa\'r ffeil yn "$2" yn unig.
Y rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw "\'\'$3\'\'".',
+'invalidtitle-knownnamespace' => 'Teitl annilys o\'r enw "$3" yn y parth "$2"',
# Virus scanner
'virus-badscanner' => "Cyfluniad gwael: sganiwr firysau anhysbys: ''$1''",
'rev-deleted-comment' => '(dilëwyd crynodeb y golygiad)',
'rev-deleted-user' => '(enw defnyddiwr wedi ei ddiddymu)',
'rev-deleted-event' => '(tynnwyd gweithred y lòg)',
-'rev-deleted-user-contribs' => '[tynnwyd enw defnyddiwr neu gyfeiriad IP i ffwrdd - ni ddangosir y golygiad ar y rhestr cyfraniadau]',
+'rev-deleted-user-contribs' => '[tynnwyd enw defnyddiwr neu gyfeiriad IP i ffwrdd - ni ddangosir y golygiad ar y rhestr gyfraniadau]',
'rev-deleted-text-permission' => "'''Dilëwyd''' y diwygiad hwn o'r dudalen.
Mae manylion ar gael yn y [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} lòg dileuon].",
'rev-deleted-text-unhide' => "Cafodd y diwygiad hwn o'r dudalen ei '''ddileu'''.
# Diffs
'history-title' => "Hanes golygu '$1'",
+'difference-title' => 'Y gwahaniaeth rhwng diwygiadau o "$1"',
+'difference-title-multipage' => 'Y gwahaniaeth rhwng y tudalennau "$1" a "$2"',
'difference-multipage' => '(Y gwahaniaeth rhwng y tudalennau)',
'lineno' => 'Llinell $1:',
'compareselectedversions' => 'Cymharer y fersiynau dewisedig',
'nchanges' => '$1 {{PLURAL:$1|newid|newid|newid|newid|newid|o newidiadau}}',
'recentchanges' => 'Newidiadau diweddar',
'recentchanges-legend' => "Dewisiadau'r newidiadau diweddar",
-'recentchangestext' => "Dilynwch y newidiadau diweddaraf i'r wici ar y dudalen hon.",
+'recentchanges-summary' => "Dilynwch y newidiadau diweddaraf i'r wici ar y dudalen hon.",
'recentchanges-feed-description' => "Dilynwch y newidiadau diweddaraf i'r wici gyda'r porthiant hwn.",
'recentchanges-label-newpage' => 'Dechreuwyd tudalen newydd wrth olygu',
'recentchanges-label-minor' => 'Mân olygiad',
'filehist-missing' => 'Y ffeil yn eisiau',
'imagelinks' => 'Defnydd y ffeil',
'linkstoimage' => "Mae'r {{PLURAL:$1|tudalen|dudalen|tudalennau|tudalennau|tudalennau|tudalennau}} isod yn cysylltu i'r ddelwedd hon:",
-'linkstoimage-more' => "Mae rhagor na $1 {{PLURAL:$1|tudalen yn|dudalen yn|dudalen yn|o dudalennau'n|o dudalennau'n|o dudalennau'n}} cysylltu at y ffeil hon.
-Mae'r rhestr canlynol yn dangos y {{PLURAL:$1|$1 cysylltiad cyntaf}} at y ffeil hon yn unig. Mae [[Special:WhatLinksHere/$2|rhestr lawn]] ar gael.",
+'linkstoimage-more' => "Mae mwy na $1 {{PLURAL:$1|tudalen yn|dudalen yn|dudalen yn|o dudalennau'n|o dudalennau'n|o dudalennau'n}} cysylltu at y ffeil hon.
+Mae'r rhestr ganlynol yn dangos y {{PLURAL:$1|$1 cysylltiad cyntaf}} at y ffeil hon yn unig. Mae [[Special:WhatLinksHere/$2|rhestr lawn]] ar gael.",
'nolinkstoimage' => 'Nid oes cyswllt ar unrhyw dudalen yn arwain at y ffeil hon.',
'morelinkstoimage' => 'Gweld [[Special:WhatLinksHere/$1|rhagor o gysylltiadau]] at y ffeil hon.',
'linkstoimage-redirect' => "$1 (tudalen ffeil sy'n ailgyfeirio) $2",
# Spam protection
'spamprotectiontitle' => 'Hidlydd amddiffyn rhag sbam',
'spamprotectiontext' => 'Ataliwyd y dudalen rhag ei rhoi ar gadw gan yr hidlydd sbam.
-Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr gwaharddedig.',
+Achos hyn yn fwy na thebyg yw presenoldeb cysylltiad i wefan ar y rhestr waharddedig.',
'spamprotectionmatch' => "Dyma'r testun gyneuodd ein hidlydd amddiffyn rhag sbam: $1",
'spambot_username' => 'Teclyn clirio sbam MediaWiki',
'spam_reverting' => "Yn troi nôl i'r diwygiad diweddaraf sydd ddim yn cynnwys cysylltiadau i $1",
# Special:NewFiles
'newimages' => 'Oriel y ffeiliau newydd',
-'imagelisttext' => "Isod mae rhestr {{PLURAL:$1|gwag o ffeiliau|o '''$1''' ffeil|o '''$1''' ffeil wedi'u trefnu $2|o '''$1''' ffeil wedi'u trefnu $2|o '''$1''' o ffeiliau wedi'u trefnu $2|o '''$1''' o ffeiliau wedi'u trefnu $2|}}.",
+'imagelisttext' => "Isod mae rhestr {{PLURAL:$1|wag o ffeiliau|o '''$1''' ffeil|o '''$1''' ffeil wedi'u trefnu $2|o '''$1''' ffeil wedi'u trefnu $2|o '''$1''' o ffeiliau wedi'u trefnu $2|o '''$1''' o ffeiliau wedi'u trefnu $2|}}.",
'newimages-summary' => "Mae'r dudalen arbennig hon yn dangos y ffeiliau a uwchlwythwyd yn ddiweddar.",
'newimages-legend' => 'Hidlo',
'newimages-label' => "Enw'r ffeil (neu ran ohono):",
# Diffs
'history-title' => 'Versionshistorik for "$1"',
+'difference-title' => 'Forskel mellem versioner af "$1"',
+'difference-title-multipage' => '$1 og $2: Forskellen på siderne',
'difference-multipage' => '(Forskel mellem sider)',
'lineno' => 'Linje $1:',
'compareselectedversions' => 'Sammenlign valgte versioner',
'nchanges' => '$1 {{PLURAL:$1|ændring|ændringer}}',
'recentchanges' => 'Seneste ændringer',
'recentchanges-legend' => 'Indstillinger for seneste ændringer',
-'recentchangestext' => "På denne side kan du følge de seneste ændringer på '''{{SITENAME}}'''.",
+'recentchanges-summary' => "På denne side kan du følge de seneste ændringer på '''{{SITENAME}}'''.",
'recentchanges-feed-description' => 'Med dette feed kan du følge de seneste ændringer på {{SITENAME}}.',
'recentchanges-label-newpage' => 'Denne redigering oprettede en ny side',
'recentchanges-label-minor' => 'Dette er en mindre ændring',
'backend-fail-writetemp' => 'Kunne ikke skrive til midlertidig fil.',
'backend-fail-closetemp' => 'Kunne ikke lukke midlertidig fil.',
'backend-fail-read' => 'Kunne ikke læse filen $1.',
-'backend-fail-create' => 'Kunne ikke oprette filen $1.',
-'backend-fail-maxsize' => 'Kunne ikke oprette filen $1, da den er større end {{PLURAL:$2|$2 byte|$2 bytes}}.',
+'backend-fail-create' => 'Kunne ikke gemme filen $1.',
+'backend-fail-maxsize' => 'Kunne ikke gemme filen $1, da den er større end {{PLURAL:$2|en byte|$2 bytes}}.',
'backend-fail-readonly' => 'Lagrings-backend "$1" er i øjeblikket skrivebeskyttet. Den angivne begrundelse var: " $2 "',
'backend-fail-synced' => 'Filen "$1" er i en inkonsistent tilstand inden for de interne lagringsbackends',
'backend-fail-connect' => 'Kunne ikke forbinde til lagringsbackend "$1".',
* @author Purodha
* @author Raimond Spekking (Raymond) <raimond.spekking@gmail.com> since January 2007
* @author Red Baron
+ * @author Reedy
* @author Remember the dot
* @author Revolus
* @author Rillke
'Block' => array( 'Sperren' ),
'Blockme' => array( 'Proxy-Sperre' ),
'Booksources' => array( 'ISBN-Suche' ),
- 'BrokenRedirects' => array( 'Kaputte_Weiterleitungen' ),
+ 'BrokenRedirects' => array( 'Defekte_Weiterleitungen', 'Kaputte_Weiterleitungen' ),
'Categories' => array( 'Kategorien' ),
'ChangeEmail' => array( 'E-Mail-Adresse_ändern' ),
'ChangePassword' => array( 'Passwort_ändern', 'Passwort_zurücksetzen' ),
'ComparePages' => array( 'Seiten_vergleichen' ),
- 'Confirmemail' => array( 'E-Mail_bestaetigen', 'E-Mail_bestätigen' ),
+ 'Confirmemail' => array( 'E-Mail_bestätigen', 'E-Mail_bestaetigen' ),
'Contributions' => array( 'Beiträge' ),
'CreateAccount' => array( 'Benutzerkonto_anlegen' ),
'Deadendpages' => array( 'Sackgassenseiten' ),
'Disambiguations' => array( 'Begriffsklärungsverweise' ),
'DoubleRedirects' => array( 'Doppelte_Weiterleitungen' ),
'EditWatchlist' => array( 'Beobachtungsliste_bearbeiten' ),
- 'Emailuser' => array( 'E-Mail' ),
+ 'Emailuser' => array( 'E-Mail_senden', 'Mailen', 'E-Mail' ),
'Export' => array( 'Exportieren' ),
'Fewestrevisions' => array( 'Wenigstbearbeitete_Seiten' ),
'FileDuplicateSearch' => array( 'Dateiduplikatsuche', 'Datei-Duplikat-Suche' ),
'Filepath' => array( 'Dateipfad' ),
'Import' => array( 'Importieren' ),
- 'Invalidateemail' => array( 'E-Mail_nicht_bestaetigen', 'E-Mail_nicht_bestätigen' ),
- 'BlockList' => array( 'Liste_der_Sperren', 'Gesperrte_IP-Adressen', 'Gesperrte_IPs' ),
+ 'Invalidateemail' => array( 'E-Mail_nicht_bestätigen', 'E-Mail_nicht_bestaetigen' ),
+ 'JavaScriptTest' => array( 'JavaScript-Test' ),
+ 'BlockList' => array( 'Liste_der_Sperren', 'Gesperrte_IP-Adressen', 'Gesperrte_IPs', 'Sperrliste' ),
'LinkSearch' => array( 'Weblinksuche', 'Weblink-Suche' ),
'Listadmins' => array( 'Administratoren' ),
'Listbots' => array( 'Bots' ),
'Userlogout' => array( 'Abmelden' ),
'Userrights' => array( 'Benutzerrechte' ),
'Wantedcategories' => array( 'Gewünschte_Kategorien' ),
- 'Wantedfiles' => array( 'Fehlende_Dateien' ),
+ 'Wantedfiles' => array( 'Gewünschte_Dateien', 'Fehlende_Dateien' ),
'Wantedpages' => array( 'Gewünschte_Seiten' ),
- 'Wantedtemplates' => array( 'Fehlende_Vorlagen' ),
+ 'Wantedtemplates' => array( 'Gewünschte_Vorlagen', 'Fehlende_Vorlagen' ),
'Watchlist' => array( 'Beobachtungsliste' ),
'Whatlinkshere' => array( 'Linkliste', 'Verweisliste' ),
'Withoutinterwiki' => array( 'Fehlende_Interwikis' ),
$magicWords = array(
'redirect' => array( '0', '#WEITERLEITUNG', '#REDIRECT' ),
- 'notoc' => array( '0', '__KEIN_INHALTSVERZEICHNIS__', '__NOTOC__' ),
- 'nogallery' => array( '0', '__KEINE_GALERIE__', '__NOGALLERY__' ),
+ 'notoc' => array( '0', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
+ 'nogallery' => array( '0', '__KEINE_GALERIE__', '__KEINEGALERIE__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
'toc' => array( '0', '__INHALTSVERZEICHNIS__', '__TOC__' ),
'noeditsection' => array( '0', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
- 'noheader' => array( '0', '__KEINKOPF__', '__NOHEADER__' ),
+ 'noheader' => array( '0', '__KEINKOPF__', '__KEIN_HEADER__', '__KEIN_KOPF__', '__KEINHEADER__', '__NOHEADER__' ),
'currentmonth' => array( '1', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonth1' => array( '1', 'JETZIGER_MONAT_1', 'CURRENTMONTH1' ),
'currentmonthname' => array( '1', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
'subjectpagename' => array( '1', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
'subjectpagenamee' => array( '1', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
'subst' => array( '0', 'ERS:', 'SUBST:' ),
- 'img_thumbnail' => array( '1', 'miniatur', 'thumbnail', 'thumb' ),
- 'img_manualthumb' => array( '1', 'miniatur=$1', 'thumbnail=$1', 'thumb=$1' ),
+ 'safesubst' => array( '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ),
+ 'img_thumbnail' => array( '1', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
+ 'img_manualthumb' => array( '1', 'miniatur=$1', 'mini=$1', 'thumbnail=$1', 'thumb=$1' ),
'img_right' => array( '1', 'rechts', 'right' ),
'img_left' => array( '1', 'links', 'left' ),
'img_none' => array( '1', 'ohne', 'none' ),
'img_center' => array( '1', 'zentriert', 'center', 'centre' ),
'img_framed' => array( '1', 'gerahmt', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'rahmenlos', 'frameless' ),
- 'img_page' => array( '1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ),
+ 'img_page' => array( '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ),
'img_upright' => array( '1', 'hochkant', 'hochkant=$1', 'hochkant $1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'rand', 'border' ),
- 'img_sub' => array( '1', 'tiefgestellt', 'sub' ),
- 'img_super' => array( '1', 'hochgestellt', 'super', 'sup' ),
+ 'img_baseline' => array( '1', 'grundlinie', 'baseline' ),
+ 'img_sub' => array( '1', 'tiefgestellt', 'tief', 'sub' ),
+ 'img_super' => array( '1', 'hochgestellt', 'hoch', 'super', 'sup' ),
+ 'img_top' => array( '1', 'oben', 'top' ),
+ 'img_text_top' => array( '1', 'text-oben', 'text-top' ),
+ 'img_middle' => array( '1', 'mitte', 'middle' ),
+ 'img_bottom' => array( '1', 'unten', 'bottom' ),
+ 'img_text_bottom' => array( '1', 'text-unten', 'text-bottom' ),
'img_link' => array( '1', 'verweis=$1', 'link=$1' ),
'img_alt' => array( '1', 'alternativtext=$1', 'alt=$1' ),
'int' => array( '0', 'NACHRICHT:', 'INT:' ),
'ns' => array( '0', 'NR:', 'NS:' ),
'nse' => array( '0', 'NR_URL:', 'NSE:' ),
'localurl' => array( '0', 'LOKALE_URL:', 'LOCALURL:' ),
+ 'localurle' => array( '0', 'LOKALE_URL_C:', 'LOCALURLE:' ),
'articlepath' => array( '0', 'ARTIKELPFAD', 'ARTICLEPATH' ),
- 'pageid' => array( '0', 'SEITENID', 'PAGEID' ),
'scriptpath' => array( '0', 'SKRIPTPFAD', 'SCRIPTPATH' ),
- 'stylepath' => array( '0', 'STYLEPFAD', 'STYLEPATH' ),
+ 'stylepath' => array( '0', 'STILPFAD', 'STYLEPFAD', 'STYLEPATH' ),
'grammar' => array( '0', 'GRAMMATIK:', 'GRAMMAR:' ),
'gender' => array( '0', 'GESCHLECHT:', 'GENDER:' ),
+ 'notitleconvert' => array( '0', '__KEINE_TITELKONVERTIERUNG__', '__NOTITLECONVERT__', '__NOTC__' ),
+ 'nocontentconvert' => array( '0', '__KEINE_INHALTSKONVERTIERUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
'currentweek' => array( '1', 'JETZIGE_KALENDERWOCHE', 'CURRENTWEEK' ),
'currentdow' => array( '1', 'JETZIGER_WOCHENTAG_ZAHL', 'CURRENTDOW' ),
'localweek' => array( '1', 'LOKALE_KALENDERWOCHE', 'LOCALWEEK' ),
'revisiontimestamp' => array( '1', 'REVISIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
'revisionuser' => array( '1', 'REVISIONSBENUTZER', 'REVISIONUSER' ),
'fullurl' => array( '0', 'VOLLSTÄNDIGE_URL:', 'FULLURL:' ),
+ 'fullurle' => array( '0', 'VOLLSTÄNDIGE_URL_C:', 'FULLURLE:' ),
'canonicalurl' => array( '0', 'KANONISCHE_URL:', 'CANONICALURL:' ),
+ 'canonicalurle' => array( '0', 'KANONISCHE_URL_C:', 'CANONICALURLE:' ),
'lcfirst' => array( '0', 'INITIAL_KLEIN:', 'LCFIRST:' ),
'ucfirst' => array( '0', 'INITIAL_GROSS:', 'UCFIRST:' ),
'lc' => array( '0', 'KLEIN:', 'LC:' ),
'nonewsectionlink' => array( '1', '__KEIN_NEUER_ABSCHNITTSLINK__', '__KEIN_PLUS_LINK__', '__NONEWSECTIONLINK__' ),
'currentversion' => array( '1', 'JETZIGE_VERSION', 'CURRENTVERSION' ),
'urlencode' => array( '0', 'URLENKODIERT:', 'URLENCODE:' ),
- 'anchorencode' => array( '0', 'SPRUNGMARKEENKODIERT:', 'ANCHORENCODE' ),
+ 'anchorencode' => array( '0', 'ANKERENKODIERT:', 'SPRUNGMARKEENKODIERT:', 'ANCHORENCODE' ),
'currenttimestamp' => array( '1', 'JETZIGER_ZEITSTEMPEL', 'CURRENTTIMESTAMP' ),
'localtimestamp' => array( '1', 'LOKALER_ZEITSTEMPEL', 'LOCALTIMESTAMP' ),
'directionmark' => array( '1', 'TEXTAUSRICHTUNG', 'DIRECTIONMARK', 'DIRMARK' ),
'language' => array( '0', '#SPRACHE:', '#LANGUAGE:' ),
'contentlanguage' => array( '1', 'INHALTSSPRACHE', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
- 'pagesinnamespace' => array( '1', 'SEITEN_IM_NAMENSRAUM:', 'SEITEN_NR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+ 'pagesinnamespace' => array( '1', 'SEITEN_IM_NAMENSRAUM:', 'SEITEN_IN_NR:', 'SEITEN_NR:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
'numberofadmins' => array( '1', 'ADMINANZAHL', 'NUMBEROFADMINS' ),
'formatnum' => array( '0', 'ZAHLENFORMAT', 'FORMATNUM' ),
'padleft' => array( '0', 'FÜLLENLINKS', 'PADLEFT' ),
'special' => array( '0', 'spezial', 'special' ),
'defaultsort' => array( '1', 'SORTIERUNG:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'DATEIPFAD:', 'FILEPATH:' ),
+ 'tag' => array( '0', 'markierung', 'tag' ),
'hiddencat' => array( '1', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
'pagesincategory' => array( '1', 'SEITEN_IN_KATEGORIE', 'SEITEN_KAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
'pagesize' => array( '1', 'SEITENGRÖSSE', 'PAGESIZE' ),
'staticredirect' => array( '1', '__PERMANENTE_WEITERLEITUNG__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', 'SCHUTZSTATUS', 'PROTECTIONLEVEL' ),
'formatdate' => array( '0', 'DATUMSFORMAT', 'formatdate', 'dateformat' ),
+ 'url_path' => array( '0', 'PFAD', 'PATH' ),
+ 'url_query' => array( '0', 'ABFRAGE', 'QUERY' ),
+ 'defaultsort_noerror' => array( '0', 'keinfehler', 'noerror' ),
+ 'defaultsort_noreplace' => array( '0', 'keineersetzung', 'noreplace' ),
);
$imageFiles = array(
'badtitle' => 'Ungültiger Titel',
'badtitletext' => 'Der Titel der angeforderten Seite ist ungültig, leer oder ein ungültiger Sprachlink von einem anderen Wiki.',
'perfcached' => 'Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell. Maximal {{PLURAL:$1|ein Ergebnis ist|$1 Ergebnisse sind}} im Cache verfügbar.',
-'perfcachedts' => 'Diese Daten stammen aus dem Cache. Der Zeitpunkt der letzten Aktualisierung: $1. Maximal {{PLURAL:$4|ein Ergebnis ist|$4 Ergebnisse sind}} im Cache verfügbar.',
-'querypage-no-updates' => "'''Die Aktualisierungsfunktion dieser Seite ist zurzeit deaktiviert. Die Daten werden bis auf Weiteres nicht erneuert.'''",
+'perfcachedts' => 'Diese Daten stammen aus dem Cache. Der Zeitpunkt der letzten Aktualisierung: $2, $3 Uhr. Maximal {{PLURAL:$4|ein Ergebnis ist|$4 Ergebnisse sind}} im Cache verfügbar.',
+'querypage-no-updates' => 'Die Aktualisierungsfunktion dieser Seite ist zurzeit deaktiviert.
+Die Daten werden bis auf Weiteres nicht erneuert.',
'wrong_wfQuery_params' => 'Falsche Parameter für wfQuery()<br />
Funktion: $1<br />
Abfrage: $2',
Überprüfe die Schreibweise (Groß-/Kleinschreibung beachten) oder [[Special:UserLogin/signup|melde dich als neuer Benutzer an]].',
'nosuchusershort' => 'Der Benutzername „$1“ ist nicht vorhanden. Bitte überprüfe die Schreibweise.',
'nouserspecified' => 'Bitte gib einen Benutzernamen an.',
-'login-userblocked' => '{{GENDER:$1|Dieser Benutzer|Dieser Benutzerin|Dieser Benutzer}} ist gesperrt. Anmeldung nicht erlaubt.',
+'login-userblocked' => '{{GENDER:$1|Dieser Benutzer|Diese Benutzerin|Dieser Benutzer}} ist gesperrt. Die Anmeldung ist nicht erlaubt.',
'wrongpassword' => 'Das Passwort ist falsch. Bitte versuche es erneut.',
'wrongpasswordempty' => 'Es wurde kein Passwort eingegeben. Bitte versuche es erneut.',
'passwordtooshort' => 'Passwörter müssen mindestens {{PLURAL:$1|1 Zeichen|$1 Zeichen}} lang sein.',
'gender-unknown' => 'Nicht angegeben',
'gender-male' => 'Männlich',
'gender-female' => 'Weiblich',
-'prefs-help-gender' => 'Optional: Wird unter anderem von der Software für die geschlechtsspezifische Anrede genutzt. Diese Information ist <u>öffentlich</u>.',
+'prefs-help-gender' => 'Optional: Wird unter anderem von der Software für die geschlechtsspezifische Anrede genutzt. Diese Information ist öffentlich.',
'email' => 'E-Mail',
'prefs-help-realname' => 'Optional. Damit kann dein bürgerlicher Name deinen Beiträgen zugeordnet werden.',
'prefs-help-email' => 'Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern du dein Passwort vergessen hast.',
'saveusergroups' => 'Gruppenzugehörigkeit ändern',
'userrights-groupsmember' => 'Mitglied von:',
'userrights-groupsmember-auto' => 'Automatisch Mitglied von:',
-'userrights-groups-help' => 'Du kannst die Gruppenzugehörigkeit dieses Benutzers ändern:
-* Ein markiertes Kästchen bedeutet, dass der Benutzer Mitglied dieser Gruppe ist.
-* Ein nichtmarkiertes Kästchen bedeutet, dass der Benutzer nicht Mitglied dieser Gruppe ist.
+'userrights-groups-help' => 'Du kannst die Gruppenzugehörigkeit {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} ändern:
+* Ein markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} Mitglied dieser Gruppe ist.
+* Ein nichtmarkiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} nicht Mitglied dieser Gruppe ist.
* Ein * bedeutet, dass du das Benutzerrecht nach Erteilung nicht wieder zurücknehmen kannst (oder umgekehrt).',
'userrights-reason' => 'Grund:',
'userrights-no-interwiki' => 'Du hast nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.',
'nchanges' => '$1 {{PLURAL:$1|Änderung|Änderungen}}',
'recentchanges' => 'Letzte Änderungen',
'recentchanges-legend' => 'Anzeigeoptionen',
-'recentchangestext' => "Auf dieser Seite kannst du die letzten Änderungen auf '''{{SITENAME}}''' nachverfolgen.",
+'recentchanges-summary' => 'Auf dieser Seite kannst du die letzten Änderungen in diesem Wiki nachverfolgen.',
'recentchanges-feed-description' => 'Verfolge mit diesem Feed die letzten Änderungen in {{SITENAME}}.',
'recentchanges-label-newpage' => 'Neue Seite',
'recentchanges-label-minor' => 'Kleine Änderung',
'destfilename' => 'Zielname:',
'upload-maxfilesize' => 'Maximale Dateigröße: $1',
'upload-description' => 'Dateibeschreibung',
-'upload-options' => 'Hochlade-Optionen',
+'upload-options' => 'Hochladeoptionen',
'watchthisupload' => 'Diese Datei beobachten',
'filewasdeleted' => 'Eine Datei mit diesem Namen wurde schon einmal hochgeladen und zwischenzeitlich wieder gelöscht. Bitte prüfe zuerst den Eintrag im $1, bevor du die Datei wirklich speicherst.',
'filename-bad-prefix' => "Der Dateiname beginnt mit '''„$1“'''. Dies ist im allgemeinen der von einer Digitalkamera vorgegebene Dateiname und daher nicht sehr aussagekräftig.
'backend-fail-writetemp' => 'Die temporäre Datei konnte nicht geschrieben werden.',
'backend-fail-closetemp' => 'Die temporäre Datei konnte nicht geschlossen werden.',
'backend-fail-read' => 'Die Datei $1 konnte nicht gelesen werden.',
-'backend-fail-create' => 'Die Datei $1 konnte nicht erstellt werden.',
-'backend-fail-maxsize' => 'Die Datei $1 konnte nicht erstellt werden, da sie größer als {{PLURAL:$2|ein Byte|$2 Byte}} ist.',
+'backend-fail-create' => 'Die Datei $1 konnte nicht gespeichert werden.',
+'backend-fail-maxsize' => 'Die Datei $1 konnte nicht gespeichert werden, da sie größer als {{PLURAL:$2|ein Byte|$2 Byte}} ist.',
'backend-fail-readonly' => 'Das Speicher-Backend „$1“ befindet sich derzeit im Lesemodus. Der angegebene Grund lautet: „$2“',
'backend-fail-synced' => 'Die Datei „$1“ befindet sich, innerhalb des internen Speicher-Backends, in einem inkonsistenten Zustand.',
'backend-fail-connect' => 'Es konnte keine Verbindung zum Speicher-Backend „$1“ hergestellt werden.',
'backend-fail-internal' => 'Im Speicher-Backend „$1“ ist ein unbekannter Fehler aufgetreten.',
'backend-fail-contenttype' => 'Der Inhaltstyp, der im Pfad „$1“ zu speichernden Datei, konnte nicht bestimmt werden.',
'backend-fail-batchsize' => 'Eine Stapelverarbeitungsdatei, die {{PLURAL:$1|eine Operation|$1 Operationen}} enthält, wurde an das Speicher-Backend gesandt. Die Begrenzung liegt allerdings bei {{PLURAL:$2|einer Operation|$2 Operationen}}.',
+'backend-fail-usable' => 'Die Datei $1 konnte, entweder aufgrund eines nicht vorhandenen Verzeichnisses oder aufgrund unzureichender Berechtigungen, nicht gespeichert werden.',
# File journal errors
'filejournal-fail-dbconnect' => 'Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends „$1“ hergestellt werden.',
'http-curl-error' => 'Fehler beim Abruf der URL: $1',
'http-host-unreachable' => 'URL konnte nicht erreicht werden.',
'http-bad-status' => 'Während der HTTP-Anfrage ist ein Fehler aufgetreten: $1 $2',
-'http-truncated-body' => 'Der Inhalt der Anforderung wurde nicht vollständig empfangen.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'URL ist nicht erreichbar',
'size-gigabytes' => '$1 GB',
# Live preview
-'livepreview-loading' => 'Am Laden …',
+'livepreview-loading' => 'Lade …',
'livepreview-ready' => 'Laden … Fertig!',
'livepreview-failed' => 'Die sofortige Vorschau ist nicht möglich!
Bitte die normale Vorschau nutzen.',
* @author Xoser
*/
+$namespaceNames = array(
+ NS_MEDIA => 'Medya',
+ NS_SPECIAL => 'Xısusi',
+ NS_TALK => 'Werênayış',
+ NS_USER => 'Karber',
+ NS_USER_TALK => 'Karber_mesac',
+ NS_PROJECT_TALK => '$1_werênayış',
+ NS_FILE => 'Dosya',
+ NS_FILE_TALK => 'Dosya_werênayış',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_werênayış',
+ NS_TEMPLATE => 'Şablon',
+ NS_TEMPLATE_TALK => 'Şablon_werênayış',
+ NS_HELP => 'Desteg',
+ NS_HELP_TALK => 'Desteg_werênayış',
+ NS_CATEGORY => 'Kategori',
+ NS_CATEGORY_TALK => 'Kategori_werênayış',
+);
+
+$specialPageAliases = array(
+ 'Activeusers' => array( 'Karbereaktiv' ),
+ 'Allmessages' => array( 'MesaciPero' ),
+ 'Categories' => array( 'Kategoriy' ),
+ 'Longpages' => array( 'PeleDergi' ),
+ 'Mycontributions' => array( 'İştırakeMe' ),
+ 'Recentchanges' => array( 'VurnayışePeyeni' ),
+ 'Specialpages' => array( 'PeleyXısusi' ),
+ 'Statistics' => array( 'İstatistiki' ),
+ 'Tags' => array( 'Etiketi' ),
+ 'Upload' => array( 'Barke' ),
+ 'Version' => array( 'Versiyon' ),
+ 'Watchlist' => array( 'Listeyseyri' ),
+);
+
+$magicWords = array(
+ 'redirect' => array( '0', '#HETENAYIŞ', '#REDIRECT' ),
+ 'nogallery' => array( '0', '#GALERİÇINO', '__NOGALLERY__' ),
+ 'msg' => array( '0', 'MSC', 'MSG:' ),
+ 'language' => array( '0', '#ZIWAN', '#LANGUAGE:' ),
+ 'special' => array( '0', 'xısusi', 'special' ),
+ 'speciale' => array( '0', 'xısusiye', 'speciale' ),
+ 'tag' => array( '0', 'etiket', 'tag' ),
+);
+
$messages = array(
# User preference toggles
'tog-underline' => 'Bınê gırey de xete bance:',
# Vector skin
'vector-action-addsection' => 'Qal berze cı',
-'vector-action-delete' => 'Bestere',
-'vector-action-move' => 'Bere',
+'vector-action-delete' => 'Besterne',
+'vector-action-move' => 'Ahûln',
'vector-action-protect' => 'Bıpawe',
'vector-action-undelete' => 'Esterıtışi peyser bıgê',
'vector-action-unprotect' => 'Starkerdışi bıvurne',
'create' => 'Vırazê',
'editthispage' => 'Ena pele bıvurne',
'create-this-page' => 'Na pele bınuse',
-'delete' => 'Bestere',
+'delete' => 'Besterne',
'deletethispage' => 'Ena pele bestere',
'undelete_short' => '{{PLURAL:$1|Yew vurnayışi|$1 Vurnayışan}} mestere',
'viewdeleted_short' => '{{PLURAL:$1|Yew vurnayışo esterıte|$1 Vurnayışanê esterıtan}} bımocne',
'mailerror' => 'Erşawıtışe xetayê e-posta: $1',
'acct_creation_throttle_hit' => 'Yew ten IP adresê şıma xebıtnayo u kewto no wiki, roco peyin de {{PLURAL:$1|1 hesab|$1 hesab}} vıraşto.
xulasa ney kesê ke IP adresê şıma xebıtneni hini nêeşkeni ney ra zêdêr hesab akeri.',
-'emailauthenticated' => 'E-posta şıma ney tarixi de $2 $3 tarihinde tesdiq biyo.',
+'emailauthenticated' => "Adresê E-posta da şıma '''$2''' seate $3 dı kerdo araşt.",
'emailnotauthenticated' => 'No format de nuştışê e-postayi qebul nêbeno.
Yew formato meqbul de adresê e-posta bınuse ya zi veng bıverde.',
'noemailprefs' => 'Hesab biyo a.',
# Suppression log
'suppressionlog' => 'qeydê pinani kerdışi',
-'suppressionlogtext' => "Cêrdı, kahyayan ra zerreko nımıte u merdumê bloke kerdışi tede estê.
-listey xelati u bloki re [[Special:BlockList|IP'yê ke bloke biyê]] bivinê.",
+'suppressionlogtext' => "Cêr de, kahyayan ra zerreko nımıte esto,eno listey besterneya u merdumê bloke kerdışiyo.
+Listey xırabi u bloki re pelay [[Special:BlockList|IP'yê ke bloke biyê]] bivinê.",
# History merging
'mergehistory' => 'vere cûye pelan bıhewelın',
# Preferences page
'preferences' => 'Tercihi',
-'mypreferences' => 'Tercihê mı',
+'mypreferences' => 'Tercihi',
'prefs-edits' => 'Amarê vurnayışan:',
'prefsnologin' => 'Şıma cıkewtış nêvıraşto',
'prefsnologintext' => 'Şıma gani be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} cikewte]</span> ke tercihanê karberi xo eyar bıkerê.',
'prefs-setemail' => 'E-posta adresiyê xo saz kerê',
'prefs-email' => 'Tercihê e-maili',
'prefs-rendering' => 'Asayış',
-'saveprefs' => 'Qeyd ke',
+'saveprefs' => 'Star ke',
'resetprefs' => 'Vurnayışê ke qeyd nêbiy, pak ke',
-'restoreprefs' => 'Eyaranê standardan pêroine peyser bia',
+'restoreprefs' => 'Sazanê standardan pêron newe dere barke',
'prefs-editing' => 'Cay pela nustısi',
'prefs-edit-boxsize' => 'Ebatê pencereyê vurnayîşî.',
'rows' => 'Xeti:',
'prefs-common-css-js' => 'CSS/JavaScript pê şablonanê peran de pay biya:',
'prefs-reset-intro' => 'ena pele de şıma tercihanê xo şenê bıçarnê be tercihanê keyepelê ke verê coy eyar biy.
Na game tepeya nêerziyena.',
-'prefs-emailconfirm-label' => 'Konfirmasyonê e-maili',
+'prefs-emailconfirm-label' => 'Tesdiqiya E-posta:',
'prefs-textboxsize' => 'Ebatê pencerey vurnayışi',
'youremail' => 'E-Mail (mecbur niyo) *:',
'username' => 'Namey karberi:',
'uid' => 'Namey karberi:',
-'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grup|grupan}}:',
+'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grub|grubi}}:',
'prefs-registration' => 'Wextê qeydbiyayışi',
-'yourrealname' => 'Nameyo raştıkên:',
+'yourrealname' => 'Nameyo raştay',
'yourlanguage' => 'Zıwan:',
'yourvariant' => 'Varyante miyandê zuwani:',
'yournick' => 'imza:',
Etiketê HTMLî kontrol bike.',
'badsiglength' => 'İmzayê şıma zaf dergo.
$1 gani bınê no {{PLURAL:$1|karakter|karakter}}de bıbo.',
-'yourgender' => 'Cınsiyetê to:',
+'yourgender' => 'Neri makey:',
'gender-unknown' => 'Cınsiyet nêvato',
'gender-male' => 'cıwamêrd',
'gender-female' => 'Cenıke',
'prefs-help-gender' => 'keyfiyo: sofware qey adersê cinsiyet şuxulneno, no malumat umumiyo.',
-'email' => 'E-mail',
+'email' => 'E-posta',
'prefs-help-realname' => 'Nameyo raşt waştena şıma rê mendo.
Eka tu wazene ke nameyo raşt xo bide, ma nameyo raşt ti iştirakanê ti de mocnenê.',
'prefs-help-email' => 'Dayışê adresa e-postey keyfiyo, labelê seba eyarê parola lazıma, wexto ke şıma naye xo vira kerê.',
'prefs-help-email-others' => 'Şıma şenê weçinê ke ê bini be yew gırey pela şımaya karberi ya zi pela werênayışi sera şıma de ebe e-poste irtıbat kewê.
Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena.',
'prefs-help-email-required' => 'E-mail adrese mecburiya.',
-'prefs-info' => 'Enformasyonê temelî',
+'prefs-info' => 'Seron zanayış',
'prefs-i18n' => 'Şaryayış kerdış',
'prefs-signature' => 'İmza',
'prefs-dateformat' => 'Formatê tarixi',
'nchanges' => '$1 {{PLURAL:$1|vurnayış|vurnayışan}}',
'recentchanges' => 'Vurnayışê peyêni',
'recentchanges-legend' => 'Tercihê vurnayışanê peniyan',
-'recentchangestext' => 'eno pele de ser wîkî de vurnayîşî penîyî teqib bike',
+'recentchanges-summary' => 'Ena pele de wiki sero vurnayışê peyêni teqib ke',
'recentchanges-feed-description' => 'Ena feed dı vurnayişanê tewr peniyan teqip bık.',
'recentchanges-label-newpage' => 'Ena edît yew pela newî viraşt',
'recentchanges-label-minor' => 'Eno yew edîto qickek o',
'uploadvirus' => 'Ena dosya de yew virus estê: Qe detayan: $1',
'upload-source' => 'Dosyayê henî',
'sourcefilename' => 'Nameyê dosyaye çimeyî',
-'sourceurl' => 'URLê henî',
+'sourceurl' => "URL'yê Çımi",
'destfilename' => 'Destînasyonê nameyêdosya',
'upload-maxfilesize' => 'Ebatêî dosya tewr girdî: $1',
'upload-description' => 'Deskripsiyonê dosyayî',
'imgfile' => 'dosya',
'listfiles' => 'Lista Dosya',
'listfiles_thumb' => 'Resmo qıckek',
-'listfiles_date' => 'Tarix',
+'listfiles_date' => 'Deme',
'listfiles_name' => 'Name',
'listfiles_user' => 'Karber',
-'listfiles_size' => 'Ebat',
+'listfiles_size' => 'Gırdiye',
'listfiles_description' => 'Vatiş/deskripsiyon',
'listfiles_count' => 'Versiyoni',
'filehist-user' => 'Karber',
'filehist-dimensions' => 'Dimensiyoni',
'filehist-filesize' => 'Ebatê dosyayî',
-'filehist-comment' => 'Rexne',
+'filehist-comment' => 'Vatış',
'filehist-missing' => 'Dosya nieseno',
'imagelinks' => 'Gurenayışê dosya',
'linkstoimage' => 'Ena {{PLURAL:$1|pela|$1 pela}} gıreye ena dosya:',
# Statistics
'statistics' => 'İstatistiki',
'statistics-header-pages' => 'İstatistikê pele',
-'statistics-header-edits' => 'Îstatistiksê vurnayîşî',
+'statistics-header-edits' => 'Îstatistikê vurnayîşî',
'statistics-header-views' => 'Îstatistiksê vînayîşî',
'statistics-header-users' => 'Îstatistiksê karberî',
'statistics-header-hooks' => 'Îstatistiksê binî',
# Special:Log
'specialloguserlabel' => 'Weskedar:',
'speciallogtitlelabel' => 'Menzil (sernuşte yana karber):',
-'log' => 'Logan',
+'log' => 'Qeydi',
'all-logs-page' => 'Loganê umum yê hemî',
'alllogstext' => 'qey {{SITENAME}}i mocnayişê heme rocaneyani.
tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyna hessasiyê herfa pil u qıciyi) bıweçine u esayiş qıc kerê.',
'emailusername' => 'Nameyê karberi:',
'emailusernamesubmit' => 'Stare dı',
'email-legend' => 'karberê {{SITENAME}} binan re e-posta bıerşaw',
-'emailfrom' => 'Kam ra',
-'emailto' => 'Kam rê',
+'emailfrom' => 'Rışten:',
+'emailto' => 'Geren:',
'emailsubject' => 'behs/mesela:',
'emailmessage' => 'Mesaj',
'emailsend' => 'bıerşawê/bıruşnê',
# Watchlist
'watchlist' => 'lista mına seyr-kerdışi',
-'mywatchlist' => 'Lista mına seyrkerdışi',
+'mywatchlist' => 'Listey seyri',
'watchlistfor2' => 'Semedê $1 ($2)',
'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.',
'watchlistanontext' => 'qey vurnayişê maddeya listeya temaşakerdişi $1.',
# Restrictions (nouns)
'restriction-edit' => 'Bıvurne',
-'restriction-move' => 'Bere',
+'restriction-move' => 'Ahûln',
'restriction-create' => 'Viraze',
-'restriction-upload' => 'Bar bike',
+'restriction-upload' => 'Barke',
# Restriction levels
'restriction-level-sysop' => 'pawıtışê tamamîye',
'undelete-search-title' => 'Bıgeyre pelanê eserıtiyan',
'undelete-search-box' => 'bıgêr pelê hewn a biyayeyani',
'undelete-search-prefix' => 'pel ê ke pê ney destpêkenî, ramocın',
-'undelete-search-submit' => 'bigêre',
+'undelete-search-submit' => 'Cı geyre',
'undelete-no-results' => 'Zerre arşîvê esterayîşî de peleyan match nibiyê.',
'undelete-filename-mismatch' => 'Vurnayîşê ke pê wextê puli ye $1î nieşkenî biyare: nameyê dosyayî match nibeno',
'undelete-bad-store-key' => 'Vurnayîşê ke pê wextê puli ye $1î nieşkenî biyare: verniyê esterayîşî de dosyayî vînî biya.',
$1',
'undelete-show-file-confirm' => '"<nowiki>$1</nowiki>" şıma emin î dosyaya revizyonê no $2 $3 tarixi bıvini?',
-'undelete-show-file-submit' => 'Ya',
+'undelete-show-file-submit' => 'E',
# Namespace form on various pages
'namespace' => 'Cayê namey:',
'invert' => 'seleksiyon peyser biya',
+'namespace_association' => 'Pineyê cadê naman',
'blanknamespace' => '(Ser)',
# Contributions
'contributions' => 'İştirakê karberi',
'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştırakê mı',
+'mycontris' => 'İştıraxê mı',
'contribsub2' => 'Semedê $1 ($2)',
'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
'uctop' => '(ser)',
'ipb-confirm' => 'Bloke kerdışi tesdik ke',
'badipaddress' => 'Adresê IPî raşt niyo',
'blockipsuccesssub' => 'Blok biyo',
-'blockipsuccesstext' => 'verniyê [[Special:Contributions/$1|$1]] geriya.
-<br />qey çım ra viyarnayişê verni-grewtışi bıewnê[[Special:BlockList|Ê yê ke verniyê IPadresê inan geriyayê]].',
+'blockipsuccesstext' => 'Verniya [[Special:Contributions/$1|$1]] gêriyaya.
+<br />Qey çım ra viyarnayişê verni-grewtışi bewni [[Special:BlockList|Ê yê ke verniyê IP adresê cı gêriyaya]].',
'ipb-edit-dropdown' => 'Sebebê blokî bivurne',
'ipb-unblock-addr' => '$1 a bik',
'ipb-unblock' => 'Yew adresê IPî ya zi nameyê karberî blok bike',
'unblockiptext' => 'eke şıma qayili ê yê ke verniyê IPadesê inan geriyayê akeri formê cêrıni dekerê.',
'ipusubmit' => 'Ena blok wedarne',
'unblocked' => '[[User:$1|$1]] blok biyo',
+'unblocked-range' => "Blokey $1'i wederya",
'unblocked-id' => 'Blokê $1î wedariyayo',
'blocklist' => 'Karberê kılitbiyaey',
'ipblocklist' => 'Karberê kılitbiyaey',
'ipblocklist-legend' => 'Yew karberê blok biyaye bivîne',
+'blocklist-userblocks' => 'Wederneyanê hesaba bınımne',
+'blocklist-tempblocks' => 'Wederneyanê idaretan bınımne',
'blocklist-addressblocks' => 'Nêverdışanê IP bınımne',
'blocklist-rangeblocks' => 'Nêverdışanê gırda bınımne',
'blocklist-timestamp' => 'İmzay demi',
'blocklist-target' => 'Menzil',
'blocklist-expiry' => 'Wahdey qedyayışi',
'blocklist-by' => 'hizmetdarê blokê',
+'blocklist-params' => 'Parametreyê wedernayışi',
'blocklist-reason' => 'Sebeb:',
'ipblocklist-submit' => 'Cı geyre',
'ipblocklist-localblock' => 'blokê mehelli',
'blocklog-showsuppresslog' => 'verniyê no/na karberi cıwa ver geriyayo/ya.',
'blocklogentry' => '[[$1]] block kerd, hetani $2 $3',
'reblock-logentry' => 'qey [[$1]]i tarixê qediyayişi $2 $3 pa ninan a eyarê ver-grewtışan vurna.',
-'blocklogtext' => 'No kuliyatê kılitkerdış u rakerdışê fealiyetê karberano.
-Adresê IPyê ke otomatikmen kılit biyê lista de çıniyê.
-Seba lista karberanê ke heta nıka kılit biyê [[Special:BlockList|lista kılitkerdışê IPy]] bıvênên.',
+'blocklogtext' => "No kuliyatê kılitkerdış u rakerdışê fealiyetê karberano.
+Adresê IP'ya ke otomatikmen kılit biyê lista de çıniya.
+Seba lista karberanê ke heta nıka kılit biyê [[Special:BlockList|lista kılitkerdışê IPy]] bıvinê.",
'unblocklogentry' => '$1 ake',
'block-log-flags-anononly' => 'teyna karberê anonîmî',
'block-log-flags-nocreate' => 'akerdışê hesabi qapan bi',
'allmessages' => 'Mesacê sistemi',
'allmessagesname' => 'Name',
'allmessagesdefault' => 'nuşteyo orjinal',
-'allmessagescurrent' => 'nuşte yo ke şuxuliyeno',
+'allmessagescurrent' => 'nuşte yo ke Karyayo',
'allmessagestext' => 'na liste, listeya mesajê cayê nameyê wikimedya yo.
eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [//www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' qefelnaye yo u ey ra '''{{ns:special}}:Allmessages''' karkerdışi re akerde niyo.",
'exif-source' => 'Çıme',
'exif-urgency' => 'Aciliyet',
'exif-fixtureidentifier' => 'Namey fiksturi',
+'exif-locationdest' => 'Tarifê cay',
+'exif-contact' => 'Zanışiya irtibati',
'exif-writer' => 'Nuştekar',
'exif-languagecode' => 'Zıwan',
'exif-iimversion' => 'Verqaydê IIM',
'exif-giffilecomment' => "vatena dosya da GIF'i",
'exif-intellectualgenre' => 'Babeta çêki',
'exif-subjectnewscode' => 'Kodê muhtewa',
+'exif-scenecode' => 'IPTC kodê sahni',
'exif-event' => 'Weqaya ke nameycıyo ravreno',
'exif-organisationinimage' => 'Organizasyono ke ravêreno',
'exif-personinimage' => 'Merdumo ke nameycıyo ravêreno',
'version-software' => 'Softwareyê ronayi',
'version-software-product' => 'Mal',
'version-software-version' => 'Versiyon',
+'version-entrypoints' => "heruna dekewtış de GRE'i",
+'version-entrypoints-header-entrypoint' => 'Heruna dekewtışi',
+'version-entrypoints-header-url' => 'GRE',
# Special:FilePath
'filepath' => 'Raherê dosyayi',
'fileduplicatesearch-summary' => 'Dosyanê çıftan bınê têmiyankewteyan de bıgeyre.',
'fileduplicatesearch-legend' => 'kopyayê ena dosya bigêre',
'fileduplicatesearch-filename' => 'Nameyê dosyayi',
-'fileduplicatesearch-submit' => 'bigêre',
+'fileduplicatesearch-submit' => 'Cı geyre',
'fileduplicatesearch-info' => '$1 × $2 piksel<br />Ebatê dosyayî: $3<br />Tipê MIMEî: $4',
'fileduplicatesearch-result-1' => "Dosyayê ''$1î'' de hem-kopya çini yo.",
'fileduplicatesearch-result-n' => "Dosyayê ''$1î'' de {{PLURAL:$2|1 hem-kopya|$2 hem-kopyayî'}} esto.",
'logentry-newusers-newusers' => '$1 deye namey karberi vıraziya',
'logentry-newusers-create' => '$1 deye namey karberi vıraziya',
'logentry-newusers-create2' => "$1'i $3 rê hesab vıraşt",
+'logentry-newusers-autocreate' => 'Hesabê $1 Otomatikmen vıraziya',
'newuserlog-byemail' => 'pê e-mail ra paralo şiravt',
# Feedback
'api-error-duplicate-archive' => 'Ena {{PLURAL:$1|vurneyaya [$2 zey na dosya]| [zerrey cı zey $2 dosya]}} aseno,feqet {{PLURAL:$1|ena dosya|tewr veri}} besterneyaya.',
'api-error-duplicate-archive-popup-title' => 'Ena {{PLURAL:$1|Dosya besterneyaya|dosya}} xora besterneyaya.',
'api-error-duplicate-popup-title' => '{{PLURAL:$1|dosyaya|dosyaya}} dılet',
+'api-error-filetype-banned' => 'Tipê ena dosya qedexe biya.',
+'api-error-illegal-filename' => 'Ena nameyê dosyayi kebul nibena.',
'api-error-unknown-code' => "$1'dı jew xeta vıciye",
'api-error-unknown-warning' => "$1'dı ikazo xırab:",
'api-error-unknownerror' => "$1'dı jew xeta vıciye",
'duration-days' => '($1 {{PLURAL:$1|roce|roci}})',
'duration-weeks' => '$1 {{PLURAL: $1|hefte|heftey}}',
'duration-years' => '$1 {{PLURAL:$1|serre|serri}}',
+'duration-decades' => '$1 {{PLURAL:$1|dades|dadesi}}',
'duration-centuries' => '$1 {{PLURAL:$1|seserre|seserri}}',
'duration-millennia' => '$1 {{PLURAL:$1|milenyum|milenyumi}}',
'nchanges' => '$1 {{PLURAL:$1|změna|změnje|změny}}',
'recentchanges' => 'Aktualne změny',
'recentchanges-legend' => 'Opcije aktualnych změnow',
-'recentchangestext' => "How móžoš slědne změny we '''{{GRAMMAR:lokatiw|{{SITENAME}}}}''' slědowaś.",
+'recentchanges-summary' => "How móžoš slědne změny we '''{{GRAMMAR:lokatiw|{{SITENAME}}}}''' slědowaś.",
'recentchanges-feed-description' => 'Slěduj z toś tym zapódaśim nejaktualnjejše změny we {{GRAMMAR:lokatiw|{{SITENAME}}}}.',
'recentchanges-label-newpage' => 'Toś ta změna jo nowy bok napórała.',
'recentchanges-label-minor' => 'To jo snadna změna',
'http-curl-error' => 'Zmólka pśi wótwółowanju URL: $1',
'http-host-unreachable' => 'URL njejo był pśistupny.',
'http-bad-status' => 'Wob cas HTTP-napšašowanje jo problem był: $1 $2',
-'http-truncated-body' => 'Wopśimjeśe napšašowanja jo se jano pó źělach pśiwzeło.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'URL njejo pśistupna.',
# Diffs
'history-title' => 'Ιστορικό εκδόσεων για τη σελίδα "$1"',
+'difference-title' => 'Διαφορά μεταξύ των αναθεωρήσεων του "$1"',
+'difference-title-multipage' => 'Διαφορά μεταξύ των σελίδων "$1" και "$2"',
'difference-multipage' => '(Διαφορές μεταξύ των σελίδων)',
'lineno' => 'Γραμμή $1:',
'compareselectedversions' => 'Σύγκριση των εκδόσεων που έχουν επιλεγεί',
'nchanges' => '$1 {{PLURAL:$1|αλλαγή|αλλαγές}}',
'recentchanges' => 'Πρόσφατες αλλαγές',
'recentchanges-legend' => 'Επιλογές των πρόσφατων αλλαγών',
-'recentchangestext' => 'Παρακολουθήστε σε αυτή τη σελίδα τις πιο πρόσφατες αλλαγές στο Wiki.',
+'recentchanges-summary' => 'Παρακολουθείστε σε αυτή τη σελίδα τις πιο πρόσφατες αλλαγές στο Wiki.',
'recentchanges-feed-description' => 'Παρακολουθήστε τις πιο πρόσφατες αλλαγές στο wiki σε αυτή τη ροή δεδομένων.',
'recentchanges-label-newpage' => 'Αυτή η επεξεργασία δημιούργησε μια νέα σελίδα',
'recentchanges-label-minor' => 'Αυτή είναι μια αλλαγή μικρής κλίμακας',
'proxyblocker-disabled' => 'Η λειτουργία αυτή έχει απενεργοποιηθεί.',
'proxyblockreason' => 'Η διεύθυνση IP σας έχει υποστεί φραγή γιατί είναι open proxy. Παρακαλούμε επικοινωνείστε με τον παροχέα υπηρεσιών Διαδικτύου που χρησιμοποιείτε ή με την τεχνική υποστήριξη, για να θέσετε υπ΄ όψη τους αυτό το σοβαρό θέμα ασφάλειας.',
'proxyblocksuccess' => 'Ολοκληρώθηκε!',
-'sorbsreason' => 'Η διεύθνυση IP σας έχει χαρακτηρισθεί ως open proxy στο DNSBL.',
+'sorbsreason' => 'Η διεύθυνση IP σας έχει χαρακτηρισθεί ως open proxy στο DNSBL.',
'sorbs_create_account_reason' => 'Η διεύθυνση IP σας έχει χαρακτηρισθεί open proxy στο DNSBL. Δεν μπορείτε να δημιουργήσετε λογαριασμό χρήστη.',
'cant-block-while-blocked' => 'Δεν μπορείτε να φράξετε άλλους χρήστες ενώ είστε φραγμένος/η.',
'cant-see-hidden-user' => 'Ο χρήστης που προσπαθείτε να αποκλείσετε έχει ήδη αποκλειστεί και αποκρυφτεί.
'mergelogpagetext' => 'Below is a list of the most recent merges of one page history into another.',
# Diffs
-'history-title' => 'Revision history of "$1"',
-'difference-title' => 'Difference between revisions of "$1"',
-'difference-title-multipage' => 'Difference between pages "$1" and "$2"',
+'history-title' => '$1: Revision history',
+'difference-title' => '$1: Difference between revisions',
+'difference-title-multipage' => '$1 and $2: Difference between pages',
'difference-multipage' => '(Difference between pages)',
'lineno' => 'Line $1:',
'compareselectedversions' => 'Compare selected revisions',
'recentchanges' => 'Recent changes',
'recentchanges-url' => 'Special:RecentChanges', # do not translate or duplicate this message to other languages
'recentchanges-legend' => 'Recent changes options',
-'recentchangestext' => 'Track the most recent changes to the wiki on this page.',
+'recentchanges-summary' => 'Track the most recent changes to the wiki on this page.',
+'recentchangestext' => '-', # do not translate or duplicate this message to other languages
'recentchanges-feed-description' => 'Track the most recent changes to the wiki in this feed.',
'recentchanges-label-newpage' => 'This edit created a new page',
'recentchanges-label-minor' => 'This is a minor edit',
'backend-fail-writetemp' => 'Could not write to temporary file.',
'backend-fail-closetemp' => 'Could not close temporary file.',
'backend-fail-read' => 'Could not read file $1.',
-'backend-fail-create' => 'Could not create file $1.',
-'backend-fail-maxsize' => 'Could not create file $1 because it is larger than {{PLURAL:$2|one byte|$2 bytes}}.',
+'backend-fail-create' => 'Could not write file $1.',
+'backend-fail-maxsize' => 'Could not write file $1 because it is larger than {{PLURAL:$2|one byte|$2 bytes}}.',
+'backend-fail-usable' => 'Could not write file $1 due to insufficient permissions or missing directories/containers.',
'backend-fail-readonly' => 'The storage backend "$1" is currently read-only. The reason given is: "\'\'$2\'\'"',
'backend-fail-synced' => 'The file "$1" is in an inconsistent state within the internal storage backends',
'backend-fail-connect' => 'Could not connect to storage backend "$1".',
'http-curl-error' => 'Error fetching URL: $1',
'http-host-unreachable' => 'Could not reach URL.',
'http-bad-status' => 'There was a problem during the HTTP request: $1 $2',
-'http-truncated-body' => 'The request body was only partially received.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Could not reach URL',
'parser-template-loop-warning' => 'Rekursiva ŝablono estis trovita: [[$1]]',
'parser-template-recursion-depth-warning' => 'Limo de ŝablona profundeco pligrandiĝis ($1)',
'language-converter-depth-warning' => 'Profundo de lingvo-konvertilo preterpasis limon ($1)',
-'node-count-exceeded-category' => 'Paĝoj kie la nombro da nodoj estis preterpasita',
+'node-count-exceeded-category' => 'Paĝoj kie la nombro da nodoj estas preterpasita',
'node-count-exceeded-warning' => 'Paĝo preterpasis la nombron da nodoj.',
-'expansion-depth-exceeded-category' => 'Paĝoj en kiuj la ekpansiprofundo estis preterpasita.',
+'expansion-depth-exceeded-category' => 'Paĝoj en kiuj la ekpansiprofundo estas preterpasita',
'expansion-depth-exceeded-warning' => 'Paĝo preterpasis la ekpansiprofundon.',
# "Undo" feature
'nchanges' => '$1 {{PLURAL:$1|ŝanĝo|ŝanĝoj}}',
'recentchanges' => 'Lastaj ŝanĝoj',
'recentchanges-legend' => 'Opcioj pri lastaj ŝanĝoj',
-'recentchangestext' => 'Per ĉi tiu paĝo vi povas sekvi la plej lastajn ŝanĝojn en la {{SITENAME}}.',
+'recentchanges-summary' => 'Per ĉi tiu paĝo vi povas sekvi la plej lastajn ŝanĝojn en la {{SITENAME}}.',
'recentchanges-feed-description' => 'Sekvi la plej lastatempajn ŝanĝojn al la vikio en ĉi tiu fonto.',
'recentchanges-label-newpage' => 'Ĉi tiu redakto kreis novan paĝon',
'recentchanges-label-minor' => 'Ĉi tiu estas eta redakto',
'currentmonth' => array( '1', 'MESACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonth1' => array( '1', 'MESACTUAL1', 'CURRENTMONTH1' ),
'currentmonthname' => array( '1', 'MESACTUALCOMPLETO', 'NOMBREMESACTUAL', 'CURRENTMONTHNAME' ),
- 'currentmonthnamegen' => array( '1', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN', 'GENERADORNOMBREMESACTUAL' ),
- 'currentmonthabbrev' => array( '1', 'MESACTUALABREVIADO', 'CURRENTMONTHABBREV', 'ABREVIACIONNOMBREMESACTUAL' ),
+ 'currentmonthnamegen' => array( '1', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
+ 'currentmonthabbrev' => array( '1', 'MESACTUALABREVIADO', 'CURRENTMONTHABBREV' ),
'currentday' => array( '1', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ),
'currentday2' => array( '1', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ),
'currentdayname' => array( '1', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
'currentyear' => array( '1', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
'currenttime' => array( '1', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
- 'currenthour' => array( '1', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR', 'HORA_MINUTOS_ACTUAL' ),
+ 'currenthour' => array( '1', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTHOUR' ),
'localmonth' => array( '1', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
'localmonth1' => array( '1', 'MESLOCAL1', 'LOCALMONTH1' ),
'localmonthname' => array( '1', 'MESLOCALCOMPLETO', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ),
- 'localmonthnamegen' => array( '1', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN', 'GENERADORNOMBREMESLOCAL' ),
- 'localmonthabbrev' => array( '1', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV', 'ABREVIACIONMESLOCAL' ),
+ 'localmonthnamegen' => array( '1', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
+ 'localmonthabbrev' => array( '1', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
'localday' => array( '1', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
'localday2' => array( '1', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
'localdayname' => array( '1', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
'localyear' => array( '1', 'AÑOLOCAL', 'LOCALYEAR' ),
- 'localtime' => array( '1', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME', 'HORALOCAL' ),
- 'localhour' => array( '1', 'HORALOCAL', 'LOCALHOUR', 'HORAMINUTOSLOCAL' ),
+ 'localtime' => array( '1', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
+ 'localhour' => array( '1', 'HORALOCAL', 'LOCALHOUR' ),
'numberofpages' => array( '1', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', 'NÚMERODEARCHIVOS', 'NUMERODEARCHIVOS', 'NUMBEROFFILES' ),
'img_center' => array( '1', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
'img_framed' => array( '1', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'sinmarco', 'sin_enmarcar', 'sinenmarcar', 'frameless' ),
- 'img_page' => array( '1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página $1', 'page=$1', 'page $1' ),
+ 'img_page' => array( '1', 'pagina=$1', 'página=$1', 'pagina_$1', 'página_$1', 'page=$1', 'page $1' ),
'img_border' => array( '1', 'borde', 'border' ),
'img_link' => array( '1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
- 'sitename' => array( '1', 'NOMBREDELSITIO', 'SITENAME', 'NOMBREDESITIO' ),
+ 'sitename' => array( '1', 'NOMBREDELSITIO', 'SITENAME' ),
'ns' => array( '0', 'EN:', 'NS:' ),
'localurl' => array( '0', 'URLLOCAL', 'LOCALURL:' ),
'localurle' => array( '0', 'URLLOCALC:', 'LOCALURLE:' ),
'userrights-groups-help' => 'Puedes modificar los grupos a los que pertenece {{GENDER:$1|este usuario|esta usuaria}}:
* Un recuadro marcado significa que {{GENDER:$1|el usuario|la usuaria}} está en ese grupo.
* Un recuadro no marcado significa que {{GENDER:$1|el usuario|la usuaria}} no está en ese grupo.
-* Un * indica que no podrás retirar el grupo una vez que lo concedas, o viceversa.',
+* Un * indica que no podrás eliminar el grupo una vez que lo agregues, o viceversa.',
'userrights-reason' => 'Motivo:',
'userrights-no-interwiki' => 'No tienes permiso para editar los grupos a los que pertenece un usuario en otros wikis.',
'userrights-nodatabase' => 'La base de datos $1 no existe o no es local.',
'nchanges' => '$1 {{PLURAL:$1|cambio|cambios}}',
'recentchanges' => 'Cambios recientes',
'recentchanges-legend' => 'Opciones sobre cambios recientes',
-'recentchangestext' => 'Realiza un seguimiento de los cambios más recientes en el wiki en esta página.',
+'recentchanges-summary' => 'Sigue los cambios más recientes de la wiki en esta página.',
'recentchanges-feed-description' => 'Realiza un seguimiento de los cambios más recientes en el wiki en este canal.',
'recentchanges-label-newpage' => 'Esta edición creó una nueva página',
'recentchanges-label-minor' => 'Esta es una edición menor',
'backend-fail-writetemp' => 'No se pudo escribir en el archivo temporal.',
'backend-fail-closetemp' => 'No se pudo cerrar el archivo temporal.',
'backend-fail-read' => 'No se pudo leer el archivo «$1».',
-'backend-fail-create' => 'No se pudo crear el archivo «$1».',
-'backend-fail-maxsize' => 'No se pudo crear el archivo $1 porque es mayor de {{PLURAL:$2|$2 bytes|$2 bytes}}.',
+'backend-fail-create' => 'No se pudo escribir el archivo $1.',
+'backend-fail-maxsize' => 'No se pudo escribir el archivo $1 porque es mayor de {{PLURAL:$2|un byte|$2 bytes}}.',
'backend-fail-readonly' => 'El servidor (back-end) de almacenamiento "$1" está actualmente en estado de sólo lectura. La razón aducida fue: "$2"',
'backend-fail-synced' => 'El archivo "$1" se encuentra en un estado incoherente dentro de los servidores (backends) de almacenamiento interno',
'backend-fail-connect' => 'No se pudo conectar al servidor (backend) de almacenamiento "$1".',
'backend-fail-internal' => 'Se ha producido un error desconocido en el servidor (backend) de almacenamiento "$1".',
'backend-fail-contenttype' => 'No se pudo determinar el tipo de contenido del archivo a guardar en " $1 ".',
'backend-fail-batchsize' => 'El servidor (back-end) de almacenamiento ha suministrado un lote de $1 {{PLURAL:$1|operación|operaciones}} de archivo; el límite es de $2 {{PLURAL:$2|operación|operaciones}}.',
+'backend-fail-usable' => 'No se pudo escribir el archivo $1 debido a permisos insuficientes o directorios/contenedores desaparecidos.',
# File journal errors
'filejournal-fail-dbconnect' => 'No se pudo conectar a la base de datos del registro del sistema de almacenamiento "$1".',
'http-curl-error' => 'Error al recuperar el URL: $1',
'http-host-unreachable' => 'No fue posible acceder a la URL.',
'http-bad-status' => 'Ha habido un problema durante la solicitud HTTP: $1 $2',
-'http-truncated-body' => 'El cuerpo solicitado sólo fue recibido parcialmente.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'No se pudo alcanzar la URL',
'DeletedContributions' => array( 'Kustutatud_kaastöö' ),
'Disambiguations' => array( 'Täpsustusleheküljed' ),
'DoubleRedirects' => array( 'Kahekordsed_ümbersuunamised' ),
+ 'EditWatchlist' => array( 'Jälgimisloendi_redigeerimine' ),
'Emailuser' => array( 'E-kirja_saatmine' ),
'Export' => array( 'Lehekülgede_eksport' ),
'Fewestrevisions' => array( 'Vähim_muudatusi' ),
'Filepath' => array( 'Failitee' ),
'Import' => array( 'Lehekülgede_import' ),
'Invalidateemail' => array( 'E-posti_kinnituse_tühistamine', 'Tühista_e-posti_kinnitus' ),
+ 'JavaScriptTest' => array( 'JavaScripti_katsetamine' ),
'BlockList' => array( 'Blokeerimisloend' ),
'LinkSearch' => array( 'Välislinkide_otsimine', 'Otsi_välislinke' ),
'Listadmins' => array( 'Ülemaloend' ),
'Mycontributions' => array( 'Minu_kaastöö' ),
'Mypage' => array( 'Minu_lehekülg' ),
'Mytalk' => array( 'Minu_aruteluleht' ),
+ 'Myuploads' => array( 'Minu_üleslaaditu' ),
'Newimages' => array( 'Uued_failid' ),
'Newpages' => array( 'Uued_leheküljed' ),
'PasswordReset' => array( 'Parooli_lähtestamine' ),
'Specialpages' => array( 'Erileheküljed' ),
'Statistics' => array( 'Arvandmestik' ),
'Tags' => array( 'Märgised' ),
+ 'Unblock' => array( 'Blokeerimise_eemaldamine' ),
'Uncategorizedcategories' => array( 'Kategoriseerimata_kategooriad' ),
'Uncategorizedimages' => array( 'Kategoriseerimata_failid' ),
'Uncategorizedpages' => array( 'Kategoriseerimata_leheküljed' ),
'Unusedtemplates' => array( 'Kasutamata_mallid' ),
'Unwatchedpages' => array( 'Jälgimata_leheküljed' ),
'Upload' => array( 'Faili_üleslaadimine' ),
+ 'UploadStash' => array( 'Üleslaaditu_alghoidla' ),
'Userlogin' => array( 'Sisselogimine' ),
'Userlogout' => array( 'Väljalogimine' ),
'Userrights' => array( 'Kasutaja_õigused' ),
'filereadonlyerror' => 'Faili "$1" ei saa muuta, sest hoidla "$2" on kirjutuskaitstud.
Administraator lukustas selle järgmisel põhjusel: "$3".',
+'invalidtitle-knownnamespace' => 'Vigane pealkiri nimeruumis "$2" tekstiga "$3"',
+'invalidtitle-unknownnamespace' => 'Vigane pealkiri nimeruuminumbriga $1 ja tekstiga "$2"',
# Virus scanner
'virus-badscanner' => "Viga konfiguratsioonis: tundmatu viirusetõrje: ''$1''",
# Diffs
'history-title' => 'Lehekülje "$1" muudatuste ajalugu',
+'difference-title' => 'Erinevus lehekülje "$1" redaktsioonide vahel',
+'difference-title-multipage' => 'Erinevus lehekülgede "$1" ja "$2" vahel',
'difference-multipage' => '(Lehekülgede erinevus)',
'lineno' => 'Rida $1:',
'compareselectedversions' => 'Võrdle valitud redaktsioone',
'nchanges' => '$1 {{PLURAL:$1|muudatus|muudatust}}',
'recentchanges' => 'Viimased muudatused',
'recentchanges-legend' => 'Viimaste muudatuste seaded',
-'recentchangestext' => 'Jälgi sellel leheküljel viimaseid muudatusi.',
+'recentchanges-summary' => 'Jälgi sellel leheküljel viimaseid muudatusi.',
'recentchanges-feed-description' => 'Jälgi vikisse tehtud viimaseid muudatusi.',
'recentchanges-label-newpage' => 'See muudatus lõi uue lehekülje',
'recentchanges-label-minor' => 'See on pisiparandus',
'backend-fail-writetemp' => 'Ajutist faili ei saa kirjutada.',
'backend-fail-closetemp' => 'Ajutist faili ei saa sulgeda.',
'backend-fail-read' => 'Faili $1 ei saa lugeda.',
-'backend-fail-create' => 'Faili $1 ei saa luua.',
-'backend-fail-maxsize' => 'Faili $1 ei saa luua, sest see on {{PLURAL:$2|ühest baidist|$2 baidist}} suurem.',
+'backend-fail-create' => 'Faili $1 ei saa kirjutada.',
+'backend-fail-maxsize' => 'Faili $1 ei saa kirjutada, sest see on {{PLURAL:$2|ühest baidist|$2 baidist}} suurem.',
'backend-fail-contenttype' => 'Faili, mida soovitakse talletada asukohas "$1", sisutüüpi saanud kindlaks teha.',
+'backend-fail-usable' => 'Faili $1 ei saa ebapiisavate õiguste või puuduvate kataloogide/konteinerite tõttu kirjutada.',
# Lock manager
'lockmanager-notlocked' => 'Rada "$1" ei saa lukust lahti teha, sest see pole lukus.',
'filedelete-otherreason' => 'Muu või täiendav põhjus:',
'filedelete-reason-otherlist' => 'Muu põhjus',
'filedelete-reason-dropdown' => '*Harilikud kustutamise põhjused
-** Autoriõiguste rikkumine
+** Autoriõiguse rikkumine
** Duplikaat',
'filedelete-edit-reasonlist' => 'Redigeeri kustutamise põhjuseid',
'filedelete-maintenance' => 'Failide kustutamine ja taastamine on hoolduse ajaks keelatud.',
# EXIF attributes
'exif-compression-1' => 'Pakkimata',
-'exif-copyrighted-true' => 'Autoriõigustega kaitstud',
+'exif-copyrighted-true' => 'Kaitstud',
'exif-copyrighted-false' => 'Avalikus omandis',
'exif-unknowndate' => 'Kuupäev teadmata',
'Booksources' => array( 'منابع_کتاب' ),
'BrokenRedirects' => array( 'تغییرمسیرهای_خراب' ),
'Categories' => array( 'ردهها' ),
- 'ChangeEmail' => array( 'تغییر_پست_الکترونیکی' ),
+ 'ChangeEmail' => array( 'تغییر_رایانامه', 'تغییر_پست_الکترونیکی' ),
'ChangePassword' => array( 'از_نو_کردن_گذرواژه' ),
'ComparePages' => array( 'مقایسه_صفحات' ),
- 'Confirmemail' => array( 'تایید_پست_الکترونیکی' ),
+ 'Confirmemail' => array( 'تایید_رایانامه', 'تایید_پست_الکترونیکی' ),
'Contributions' => array( 'مشارکتها' ),
'CreateAccount' => array( 'ایجاد_حساب_کاربری' ),
'Deadendpages' => array( 'صفحههای_بنبست' ),
'FileDuplicateSearch' => array( 'جستجوی_پرونده_تکراری' ),
'Filepath' => array( 'مسیر_پرونده' ),
'Import' => array( 'درون_ریزی_صفحه' ),
- 'Invalidateemail' => array( 'باطل_کردن_پست_الکترونیکی' ),
+ 'Invalidateemail' => array( 'باطل_کردن_رایانامه', 'باطل_کردن_پست_الکترونیکی' ),
'BlockList' => array( 'فهرست_بستن_نشانی_آیپی' ),
'LinkSearch' => array( 'جستجوی_پیوند' ),
'Listadmins' => array( 'فهرست_مدیران' ),
);
$magicWords = array(
- 'redirect' => array( '0', '#تغییرمسیر', '#REDIRECT' ),
+ 'redirect' => array( '0', '#تغییر_مسیر', '#تغییرمسیر', '#تغییرمسیر', '#REDIRECT' ),
'notoc' => array( '0', '__بیفهرست__', '__NOTOC__' ),
'nogallery' => array( '0', '__بینگارخانه__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__بافهرست__', '__FORCETOC__' ),
'pagenamee' => array( '1', 'نامصفحهکد', 'نام_صفحه_کد', 'PAGENAMEE' ),
'namespace' => array( '1', 'فضاینام', 'فضای_نام', 'NAMESPACE' ),
'namespacee' => array( '1', 'فضاینامکد', 'فضای_نام_کد', 'NAMESPACEE' ),
+ 'namespacenumber' => array( '1', 'شماره_فضای_نام', 'شمارهفضاینام', 'NAMESPACENUMBER' ),
'talkspace' => array( '1', 'فضایبحث', 'فضای_بحث', 'TALKSPACE' ),
'talkspacee' => array( '1', 'فضایبحثکد', 'فضای_بحث_کد', 'TALKSPACEE' ),
'subjectspace' => array( '1', 'فضایموضوع', 'فضایمقاله', 'فضای_موضوع', 'فضای_مقاله', 'SUBJECTSPACE', 'ARTICLESPACE' ),
'plural' => array( '0', 'جمع:', 'PLURAL:' ),
'fullurl' => array( '0', 'نشانیکامل:', 'نشانی_کامل:', 'FULLURL:' ),
'fullurle' => array( '0', 'نشانیکاملکد:', 'نشانی_کامل_کد:', 'FULLURLE:' ),
+ 'canonicalurl' => array( '0', 'نشانی_استاندارد:', 'نشانیاستاندارد:', 'CANONICALURL:' ),
'lcfirst' => array( '0', 'ابتداکوچک:', 'ابتدا_کوچک:', 'LCFIRST:' ),
'ucfirst' => array( '0', 'ابتدابزرگ:', 'ابتدا_بزرگ:', 'UCFIRST:' ),
'lc' => array( '0', 'ک:', 'LC:' ),
'url_path' => array( '0', 'مسیر', 'PATH' ),
'url_wiki' => array( '0', 'ویکی', 'WIKI' ),
'url_query' => array( '0', 'دستور', 'QUERY' ),
- 'defaultsort_noerror' => array( '0', 'بدونخطا', 'noerror' ),
- 'defaultsort_noreplace' => array( '0', 'جایگزیننکن', 'noreplace' ),
+ 'defaultsort_noerror' => array( '0', 'بدونخطا', 'بدون_خطا', 'noerror' ),
+ 'defaultsort_noreplace' => array( '0', 'جایگزیننکن', 'جایگزین_نکن', 'noreplace' ),
);
# Harakat are intentionally not included in the linkTrail. Their addition should
'semiprotectedpagewarning' => "'''توجه:''' این صفحه قفل شدهاست تا تنها کاربران ثبتنامکرده قادر به ویرایش آن باشند.
آخرین موارد سیاهه در زیر آمدهاست:",
'cascadeprotectedwarning' => "'''هشدار:''' این صفحه به علت قرارگرفتن در {{PLURAL:$1|صفحهٔ|صفحههای}} آبشاری-محافظتشدهٔ زیر قفل شدهاست تا فقط مدیران بتوانند ویرایشش کنند.",
-'titleprotectedwarning' => "'''هشدار: این صفحه قفل شدهاست به شکلی که برای ایجاد آن [[Special:ListGroupRights|اختیارات خاصی]] لازم است.'''
-ٱحرین موارد سیاهه در زیر آمده است:",
+'titleprotectedwarning' => "'''هشدار: این صفحه به شکلی قفل شدهاست که برای ایجاد آن [[Special:ListGroupRights|اختیارات خاصی]] لازم است.'''
+آخرین موارد سیاهه در زیر آمده است:",
'templatesused' => '{{PLURAL:$1|الگوی|الگوهای}} بهکاررفته در این صفحه:',
'templatesusedpreview' => '{{PLURAL:$1|الگوی|الگوهای}} استفاده شده در این پیشنمایش:',
'templatesusedsection' => '{{PLURAL:$1|الگوی|الگوهای}} استفاده شده در این بخش:',
'nchanges' => '$1 تغییر',
'recentchanges' => 'تغییرات اخیر',
'recentchanges-legend' => 'گزینههای تغییرات اخیر',
-'recentchangestext' => 'آخرین تغییرات ویکی را در این صفحه پیگیری کنید.',
+'recentchanges-summary' => 'آخرین تغییرات ویکی را در این صفحه پیگیری کنید.',
'recentchanges-feed-description' => 'آخرین تغییرات ویکی را در این خوراک پیگیری کنید.',
'recentchanges-label-newpage' => 'این ویرایش صفحهای جدید ایجاد کرد',
'recentchanges-label-minor' => 'این ویرایش جزئیاست',
'nchanges' => '$1 {{PLURAL:$1|muutos|muutosta}}',
'recentchanges' => 'Tuoreet muutokset',
'recentchanges-legend' => 'Tuoreiden muutosten asetukset',
-'recentchangestext' => 'Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.',
+'recentchanges-summary' => 'Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.',
'recentchanges-feed-description' => 'Tällä sivulla voi seurata tuoreita {{GRAMMAR:illative|{{SITENAME}}}} tehtyjä muutoksia.',
'recentchanges-label-newpage' => 'Tämä muutos loi uuden sivun',
'recentchanges-label-minor' => 'Tämä on pieni muutos',
--- /dev/null
+<?php
+/** Meänkieli (Meänkieli)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Kaganer
+ * @author Mestos
+ */
+
+$fallback = 'fi';
+
+$messages = array(
+# User preference toggles
+'tog-underline' => 'Linkitten alleviivaus',
+'tog-justify' => 'Tassaa kappalheet',
+'tog-hideminor' => 'Piilota pienet muutokset vereksen muutoksitten listasta',
+'tog-hidepatrolled' => 'Piilota tarkastetut muutokset vereksen muutoksitten listasta',
+'tog-newpageshidepatrolled' => 'Piilota tarkastetut sivut uusitten sivuitten listalta',
+'tog-extendwatchlist' => 'Laajena valvontalistaa näyttämhään kaikki tehtyt muutokset eikä vain viimisimät.',
+'tog-usenewrc' => 'Käytä avanseerattu verekset muutokset (vaatii JavaScript)',
+'tog-numberheadings' => 'Nymreeraa rypriikit',
+'tog-showtoolbar' => 'Näytä työneuvopalkki (JavaScript)',
+'tog-editondblclick' => 'Mookkaa sivuja kaksoisknapituksella (JavaScript)',
+'tog-editsection' => 'Aktiveeraa seksuuni mookkaus [mookkaus]-linkilä',
+'tog-editsectiononrightclick' => 'Aktiveeraa seksuuni mookkaus oikeapuolen klikkauksella seksuuni tittelhiin (JavaScript)',
+'tog-showtoc' => 'Näytä sisältölista (sivuile, joila on yli 3 rypriikkiä)',
+'tog-rememberpassword' => 'Muista minun lokkauksen tässä weppilukijassa (eninthään $1 {{PLURAL:$1|päivä|päivää}})',
+'tog-watchcreations' => 'Lissää sivut mitä luon valvontasivule',
+'tog-watchdefault' => 'Lissää sivut mitä mie mookkaan valvontasivule',
+'tog-watchmoves' => 'Lissää sivut mitä mie siirän minun valvontasivule',
+'tog-watchdeletion' => 'Lissää sivut mitä otan poies valvontasivule',
+'tog-minordefault' => 'Markeeraa auttomaattisesti kaikki muutokset pieneks',
+'tog-previewontop' => 'Näytä esitarkastelu mookkauspaikan yläpuolela',
+'tog-previewonfirst' => 'Näytä esitarkastelu kun mookkaus alethaan',
+'tog-nocache' => 'Älä säästä sivuja weppilukijan välimuisthiin',
+'tog-enotifwatchlistpages' => 'Lähätä e-postipreivi mulle kun sivu minun valvontalistala on muutettu',
+'tog-enotifusertalkpages' => 'Lähätä sähköposti, kun käyttäjäsivun keskustelusivu muuttuu',
+'tog-enotifminoredits' => 'Lähätä epostieto pienistäki muutoksista',
+'tog-enotifrevealaddr' => 'Näytä minun eposti atressin muile lähetetyissä ilmoituksissa',
+'tog-shownumberswatching' => 'Näytä kuinka moni käyttäjä valvoo sivua',
+'tog-oldsig' => 'Nykynen allekirjotus',
+'tog-fancysig' => 'Mookkaamaton allekirjotus ilman auttomaattista linkkiä',
+'tog-externaleditor' => 'Käytä ekterniä tekstiedituuria stantartina. Vain kokenheile käyttäjile, vaatii taattorin asetuksitten muuttamista. Käytä eksterniä tekstiedituuria oletuksena. Vain kokeneille käyttäjille, vaatii selaimen asetusten muuttamista. (<span class="plainlinks">[[//www.mediawiki.org/wiki/Manual:External_editors Ohje]</span>)',
+
+# Dates
+'sunday' => 'pyhä',
+'monday' => 'maanantai',
+'tuesday' => 'tiistai',
+'wednesday' => 'keskiviikko',
+'thursday' => 'tuorestai',
+'friday' => 'perjantai',
+'saturday' => 'lauantai',
+'sun' => 'py',
+'mon' => 'ma',
+'tue' => 'ti',
+'wed' => 'ke',
+'thu' => 'tuo',
+'fri' => 'pe',
+'sat' => 'la',
+'january' => 'tammikuu',
+'february' => 'helmikuu',
+'march' => 'maaliskuu',
+'april' => 'huhtikuu',
+'may_long' => 'toukokuu',
+'june' => 'kesäkuu',
+'july' => 'heinäkuu',
+'august' => 'elokuu',
+'september' => 'syyskuu',
+'october' => 'lokakuu',
+'november' => 'marraskuu',
+'december' => 'joulukuu',
+'january-gen' => 'tammikuun',
+'february-gen' => 'helmikuun',
+'march-gen' => 'maaliskuun',
+'april-gen' => 'huhtikuun',
+'may-gen' => 'toukokuun',
+'june-gen' => 'kesäkuun',
+'july-gen' => 'heinäkuun',
+'august-gen' => 'elokuun',
+'september-gen' => 'syyskuun',
+'october-gen' => 'lokakuun',
+'november-gen' => 'marraskuun',
+'december-gen' => 'joulukuun',
+'jan' => 'tammikuu',
+'feb' => 'helmikuu',
+'mar' => 'maaliskuu',
+'apr' => 'huhtikuu',
+'may' => 'toukokuu',
+'jun' => 'kesäkuu',
+'jul' => 'heinäkuu',
+'aug' => 'elokuu',
+'sep' => 'syyskuu',
+'oct' => 'lokakuu',
+'nov' => 'marraskuu',
+'dec' => 'joulukuu',
+
+# Categories related messages
+'pagecategories' => '{{PLURAL:$1|Katekuurit|Katekuurit}}',
+'category_header' => 'Sivut, jokka on katekuurissa "$1"',
+'subcategories' => 'Alakatekuurit',
+'category-media-header' => 'Katekuurin ”$1” sisältämät fiilit',
+'category-empty' => "''Tässä katekuuriassa ei ole sivuja eikä fiiliä.''",
+'hidden-categories' => '{{PLURAL:$1|Piilotettu katekuuri|Piilotetut katekuurit}}',
+'category-subcat-count' => '{{PLURAL:$2|Tässä katekuurissa on vain seuraava alakatekuuri.|{{PLURAL:$1|Seuraava alakatekuuri kuuluu|Seuraavat $1 alakatekuuria kuuluvat}} tähhään katekuurihaan. Alakatekuuritten kokonaismäärä katekuurissa on $2.}}',
+'category-article-count' => '{{PLURAL:$2|Tässä katekuurissa on vain seuraava sivu.|Seuraava {{PLURAL:$1|sivu on|$1 sivut on}} tässä katekuurissa, kahen joukosta $2 }}',
+'category-file-count' => '{{PLURAL:$2|Tässä katekuurissa on vain seuraava sivu.|Seuraava {{PLURAL:$1|fiili|$1 fiilit}} (kaikkians $2) on tässä katekuurissa.}}',
+'listingcontinuesabbrev' => 'jatkuu',
+'noindex-category' => 'Ei-indekseerattuja sivuja',
+
+'about' => 'Tietoja',
+'newwindow' => '(aukasee uuessa klasissa)',
+'cancel' => 'Lopeta',
+'mytalk' => 'Minun keskustelu',
+'navigation' => 'Navikeerinki',
+
+# Cologne Blue skin
+'qbedit' => 'Mookkaa',
+'qbpageoptions' => 'Tämä sivu',
+'qbpageinfo' => 'Sisältö',
+'qbmyoptions' => 'Minun inställninkit',
+'qbspecialpages' => 'Spesiaali sivut',
+'faq' => 'Useasti kysytyt kysymykset',
+'faqpage' => 'Project:Useasti kysytyt kysymykset',
+
+# Vector skin
+'vector-action-addsection' => 'Lissää aine',
+'vector-action-delete' => 'Ota poies',
+'vector-action-move' => 'Siirä',
+'vector-action-protect' => 'Suojaa',
+'vector-action-undelete' => 'Pane takashiin',
+'vector-action-unprotect' => 'Muuta suojaa',
+'vector-simplesearch-preference' => 'Ota käythöön paranetut hakuehotukset (vain Vector-ulkoasu)',
+'vector-view-create' => 'Luo',
+'vector-view-edit' => 'Mookkaa',
+'vector-view-history' => 'Näytä histuuria',
+'vector-view-view' => 'Lue',
+'vector-view-viewsource' => 'Näytä lähekooti',
+'actions' => 'Toiminat',
+'namespaces' => 'Nimityhjyyet',
+'variants' => 'Varianttia',
+
+'errorpagetitle' => 'Virhe',
+'returnto' => 'Takashiin sivule $1.',
+'tagline' => 'Asiasta {{SITENAME}}',
+'help' => 'Apua',
+'search' => 'Haku',
+'searchbutton' => 'Hae',
+'searcharticle' => 'Mene',
+'history' => 'Sivun histuuria',
+'history_short' => 'Histuuria',
+'printableversion' => 'Printtausmaholinen versuuni',
+'permalink' => 'Ikunen linkki',
+'edit' => 'Mookkaa',
+'create' => 'Luo sivu',
+'delete' => 'Ota poies',
+'protect' => 'Suojaa',
+'protect_change' => 'muuta',
+'newpage' => 'Uusi sivu',
+'talkpagelinktext' => 'Keskustelu',
+'personaltools' => 'Henkilökohtaiset työneuvot',
+'talk' => 'Keskustelu',
+'views' => 'Näyttöjä',
+'toolbox' => 'Työneuvot',
+'otherlanguages' => 'Muila kielilä',
+'redirectedfrom' => '(Ohjattu sivulta $1)',
+'lastmodifiedat' => 'Sivua on viimeksi muutettu $1 kello $2.',
+'jumpto' => 'Hyppää:',
+'jumptonavigation' => 'Navikeerinki',
+'jumptosearch' => 'Hae',
+
+# 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' => 'Asiasta {{GRAMMAR:elative|{{SITENAME}}}}',
+'aboutpage' => 'Project: Tioista',
+'copyrightpage' => '{{ns:project}}:Tekijänoikeuet',
+'currentevents' => 'Vereksiä tapahtumia',
+'currentevents-url' => 'Project: Vereksiä tapahtumia',
+'disclaimers' => 'Vastuuvaphaus',
+'disclaimerpage' => 'Project: Ylheinen varoitus',
+'edithelp' => 'Mookkausapua',
+'edithelppage' => 'Help: Kuinka sivuja mookathaan',
+'helppage' => 'Help: Sisältö',
+'mainpage' => 'Alkusivu',
+'mainpage-description' => 'Alkusivu',
+'portal' => 'Kaikitten purthaali',
+'portal-url' => 'Project: Kaikitten purthaali',
+'privacy' => 'Tietosuojakäytäntö',
+'privacypage' => 'Project: Intekriteettisääntö',
+
+'retrievedfrom' => 'Nouettu osoitheesta $1',
+'youhavenewmessages' => 'Sulla on $1 ($2).',
+'newmessageslink' => 'uusia meiliä',
+'newmessagesdifflink' => 'viiminen muutos',
+'editsection' => 'mookkaa',
+'editold' => 'mookkaa',
+'viewsourceold' => 'näytä lähekooti',
+'editlink' => 'mookkaa',
+'viewsourcelink' => 'näytä lähekooti',
+'editsectionhint' => 'Mookkaa seksuunia $1',
+'toc' => 'Sisältö',
+'site-atom-feed' => '$1-Atom-syöttö',
+'page-atom-feed' => '$1 (Atom-syöttö)',
+'red-link-title' => '$1 (sivua ei ole)',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'Sivu',
+'nstab-user' => 'Käyttäjäsivu',
+'nstab-special' => 'Spesiaali sivut',
+'nstab-project' => 'Prujektisivu',
+'nstab-image' => 'Fiili',
+'nstab-template' => 'Malli',
+'nstab-category' => 'Katekuuri',
+
+# General errors
+'missing-article' => 'Sivun sisältöä ei löytyny taattapaasista: $1 $2.
+
+Useimiten tämä johtuu vanhentuneesta vertailu- tai histuuriasivulinkistä poistethuun sivhuun.
+
+Jos kysheessä ei ole poistettu sivu, olet piian löytäny virheen ohjelmassa.
+Ilmota tämän sivun atressi wikin [[Special:ListUsers/sysop|atministratöörile]].',
+'missingarticle-rev' => '(versuuni: $1)',
+'badtitle' => 'Virheelinen titteli',
+'badtitletext' => 'Pyytämästi sivurypriikki oli virheelinen, tyhjä eli titteli on väärin linkitetty muusta wikistä. Se saattaa sisältää yhen eli monta sympoolia, joita ei saa käyttää sivutittelissä.',
+'viewsource' => 'Näytä lähekooti',
+
+# Login and logout pages
+'yourname' => 'Käyttäjänimi',
+'yourpassword' => 'Salasana',
+'yourpasswordagain' => 'Salasana uuesti',
+'remembermypassword' => 'Muista minun lokkauksen tässä taattorissa (korkeinthaans $1 {{PLURAL:$1|päivä|päivää}})',
+'login' => 'Lokkaa sisäle',
+'nav-login-createaccount' => 'Lokkaa sisäle / luo konttu',
+'loginprompt' => 'Lokkauksheen tähhään {{SITENAME}} tarvithaan ette olet aktiveeranu kuukit .',
+'userlogin' => 'Lokkaa sisäle/ luo konttu',
+'userlogout' => 'Lokkaa ulos',
+'nologin' => "Eikos sulla ole käyttäjäkonttua, '''$1'''.",
+'nologinlink' => 'Luo käyttäjäkonttu',
+'createaccount' => 'Luo käyttäjäkonttu',
+'gotaccount' => "Jos sulla on käyttäjäkonttu, voit '''$1'''.",
+'gotaccountlink' => 'Lokkaa sisäle',
+'userlogin-resetlink' => 'Unhoutitko sinun salasanan?',
+'mailmypassword' => 'Lähätä e-postissa uusi salasana',
+'loginlanguagelabel' => 'Kieli: $1',
+
+# Edit page toolbar
+'bold_sample' => 'Lihava teksti',
+'bold_tip' => 'Lihava teksti',
+'italic_sample' => 'Kyrsiveerattu teksti',
+'italic_tip' => 'Kyrsiveerattu',
+'link_sample' => 'linkin nimi',
+'link_tip' => 'Sisäinen linkki',
+'extlink_sample' => 'http://www.example.com linkin rypriikki',
+'extlink_tip' => 'Eksterni linkki (muista http:// eessä)',
+'headline_sample' => 'Rypriikkiteksti',
+'headline_tip' => 'Aste 2 rypriikki',
+'nowiki_sample' => 'Lissää muotoilematon teksti tähhään',
+'nowiki_tip' => 'Iknureeraa wiki formateerinkin',
+'image_tip' => 'Piilotettu fiili',
+'media_tip' => 'Linkki fiilhiin',
+'sig_tip' => 'Allekirjotus aikaleimala',
+'hr_tip' => 'Horisontaali linja (käytethään säästävästi)',
+
+# Edit pages
+'summary' => 'Yhteenveto',
+'minoredit' => 'Tämä on pieni muutos',
+'watchthis' => 'Valvo tätä sivua',
+'savearticle' => 'Säästä sivu',
+'preview' => 'Etukätheen katto',
+'showpreview' => 'Näytä esikuvvaus',
+'showdiff' => 'Näytä muutokset',
+'anoneditwarning' => "'''Varotus:''' Et ole lokanu sisäle.
+IP-atressi säästethään tämän sivun muutoshistuuriassa.",
+'newarticle' => '(Uusi)',
+'newarticletext' => 'Linkki vei sinun sivule, joka ei vielä ole.
+Saatat luoa sivun kirjottamalla alla olehvaan kenthään (katto [[{{MediaWiki:Helppage}}|apusivu]] lisää tietoja).
+Jos et halua luoa sivua, käytä browserin "takashiin" knappia.',
+'noarticletext' => 'Tällä hetkellä tällä sivulla ei ole tekstiä.
+Tällä hetkelä tällä sivula ei ole tekstiä.
+Saatat [[Special:Search/{{PAGENAME}}|hakea sivun nimelä]] muilta sivuilta,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheesheen liittyviä lokkia]
+eli [{{fullurl:{{FULLPAGENAME}}|action=edit}} mookata tätä sivua]</span>.',
+'noarticletext-nopermission' => 'Tällä hetkelä tällä sivula ei ole tekstiä.
+Saatat [[Special:Search/{{PAGENAME}}|hakea sivun nimelä]] muilta sivuilta,
+eli <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea relevantista lokista]
+eli [{{fullurl:{{FULLPAGENAME}}|action=edit}} mookata tätä sivua]</span>.',
+'previewnote' => "'''Tämä on vasta sivun etukattelu. Sivua ei ole vielä säästetty!'''",
+'editing' => 'Mookathaan sivua $1',
+'editingsection' => 'Mookathaan $1 (seksuuni)',
+'templatesused' => 'Tällä sivula {{PLURAL:$1|käytetty malli|käytetyt mallit}}:',
+'template-protected' => '(suojattu)',
+'template-semiprotected' => '(osittain suojattu)',
+'hiddencategories' => 'Tämä sivu kuuluu {{PLURAL:$1|seuraavhaan piilotethuun katekuurihaan|seuraavhiin piilotethuin katekuurhiin}}:',
+'permissionserrorstext-withaction' => 'Sulla ei ole luppaa {{lcfirst:$2}} {{PLURAL:$1|seuraavasta syystä|seuraavista syistä}} johtuen:',
+'recreate-moveddeleted-warn' => "''Varotus: Olet luomassa sivua, joka on vasta otettu poies.'''",
+'moveddeleted-notice' => 'Tämä sivu on otettu poies. Alla on tämän sivun poistotieto ja lokkaushistuuria referensinä',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => 'Varotus: Tämä sivu sisältää liian suurta mallikootia.
+Joitakin mallia ei tulta säästämhään.',
+'post-expand-template-inclusion-category' => 'Sivut missä mallikootin sisältö on liian suuri',
+'post-expand-template-argument-warning' => 'Varotus: Tällä sivula on ainaki yks malliparameetteri, jonka koko on liian suuri ekspansuunissa.
+Nämät parameetterit on poistettu.',
+'post-expand-template-argument-category' => 'Sivut missä on poistettuja malliparameetteria',
+
+# History pages
+'viewpagelogs' => 'Näytä tämän sivun lokit',
+'currentrev-asof' => 'Nykynen versuuni $1',
+'revisionasof' => 'Versuuni $1',
+'revision-info' => 'Versuuni hetkelä $1 – tehny $2',
+'previousrevision' => 'Vanheempi versuuni',
+'nextrevision' => 'Uuempi versuuni',
+'currentrevisionlink' => 'Nykynen versuuni',
+'cur' => 'nyk.',
+'last' => 'eel.',
+'histlegend' => 'Eron valinta: markkeeraa klikkiruuissa ette pääset vertaamhaan versuunia, ja paina enter eli knaphiin kaikhiin alla.
+Merkinät: (nyk.) = eroavaisuuet nykyisheen versuunhiin, (eel.) = eroavaisuuet eelisheen versuunhiin, <span class="minor">p</span> = pieni muutos',
+'history-fieldset-title' => 'Plaavaa muutoshistuuriaa',
+'history-show-deleted' => 'Vain poistetut',
+'histfirst' => 'Ensimäiset',
+'histlast' => 'Viimisimät',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 ($2)',
+
+# Revision deletion
+'rev-delundel' => 'näytä/piilota',
+'revdel-restore' => 'muuta näkyvyyttä',
+'revdel-restore-deleted' => 'poistetut muutokset',
+'revdel-restore-visible' => 'Näkyvät muutokset',
+
+# Merge log
+'revertmerge' => 'Pane takashiin yhistäminen',
+
+# Diffs
+'history-title' => 'Sivun $1 muutoshistuuria',
+'lineno' => 'Rivi $1:',
+'compareselectedversions' => 'Vertaile valittuja sivu versuunia',
+'editundo' => 'kumota',
+'diff-multi' => '(Näytetyitten versuunitten välissä on {{PLURAL:$1|yks mookkaus|$1 versuunit, jokka on {{PLURAL:$2|yhen käyttäjän tekemiä|$2 eri käyttäjän tekemiä}}}}.)',
+
+# Search results
+'searchresults' => 'Hakutulokset',
+'searchresults-title' => 'Hakutulokset hakusanale ”$1”',
+'prevn' => 'eelinen {{PLURAL:$1|$1}}',
+'nextn' => '{{PLURAL:$1|seuraava|$1 seuraavaa}} →',
+'prevn-title' => 'eelinen$1 {{PLURAL:$1|resyltaatit|resyltaatit}}',
+'nextn-title' => 'eelinen$1 {{PLURAL:$1|resyltaatit|resyltaatit}}',
+'shown-title' => 'Näytä $1 {{PLURAL:$1|resyltaatti|resyltaatti}} sivu sivulta',
+'viewprevnext' => 'Näytä ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''Sivu [[:$1]] löytyy tästä wikistä.'''",
+'searchmenu-new' => "'''Luo sivu ''[[:$1]]'' tähhaän wikhiin.'''",
+'searchprofile-articles' => 'Sisältösivut',
+'searchprofile-project' => 'Apu ja prujektisivut',
+'searchprofile-images' => 'Mylttimeetia',
+'searchprofile-everything' => 'Kaikki',
+'searchprofile-advanced' => 'Avanseerattu',
+'searchprofile-articles-tooltip' => 'Hae nimityhjyyestä $1',
+'searchprofile-project-tooltip' => 'Hae nimityhjyyestä $1',
+'searchprofile-images-tooltip' => 'Hae fiiliä',
+'searchprofile-everything-tooltip' => 'Hae kaikesta (keskustelusivut kans)',
+'searchprofile-advanced-tooltip' => 'Hae tietyissä nimityhjyissä',
+'search-result-size' => '$1 ({{PLURAL:$2|1 sana|$2 sannaa}})',
+'search-result-category-size' => '{{PLURAL:$1|1 jäsen|$1 jäsentä}} ({{PLURAL:$2|1 alakatekuuria|$2 alakatekuuriaa}}, {{PLURAL:$3|1 fiili|$3 fiiliä}})',
+'search-redirect' => '(ohjaus $1)',
+'search-section' => '(seksuuni $1)',
+'search-suggest' => 'Tarkoititko: $1',
+'searchrelated' => 'relateerattu',
+'searchall' => 'kaikki',
+'showingresultsheader' => "{{PLURAL:$5|Resyltaatit'''$1'''–'''$3'''|Resyltaatit'''$1'''–'''$2''' kaiken joukosta '''$3''' }} haule '''$4'''",
+'search-nonefound' => 'Ei yhtään resyltaattia sinun kysymyksheen',
+
+# Preferences page
+'mypreferences' => 'Omat inställninkit',
+'youremail' => 'E-posti:',
+'yourrealname' => 'Oikea nimi',
+'prefs-help-email' => 'E-postin atressi on vapa, mutta tekkee maholiseks ette lähättää sulle salasanan meilissä, jos unhoutat sen.',
+'prefs-help-email-others' => 'Saatat kans antaa muitten käyttäjitten ottaa ottaa yhteyttä sinhuun sähköpostila. Sin atressi ei näy toisen käyttäjän ottaessa sinhuun yhteyttä.',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'mookkaa tätä sivua',
+
+# Recent changes
+'nchanges' => '$1 {{PLURAL:$1|muutos|muutosta}}',
+'recentchanges' => 'Verekset muutokset',
+'recentchanges-legend' => 'Vereksitten muutoksitten inställninkit',
+'recentchanges-summary' => 'Seuraa viimiset muutokset wikin tällä sivula',
+'recentchanges-feed-description' => 'Tällä sivula saatat seurata wikin vereksiä muutoksia',
+'recentchanges-label-newpage' => 'Tämä mookkaus loi uuen sivun',
+'recentchanges-label-minor' => 'Tämä on pieni muutos',
+'recentchanges-label-bot' => 'Tämän muutoksen teki botti',
+'recentchanges-label-unpatrolled' => 'Tätä muutosta ei ole vielä tarkistettu',
+'rcnote' => 'Alla on {{PLURAL:$1|yks muutos|$1 vereksimät muutokset}} {{PLURAL:$2|yhen päivän|$2 viimi päivän}} ajalta $4 kello $5 asti.',
+'rcnotefrom' => "Alla on muutokset '''$2'''lähtien. (korkeinthaans '''$1''' näytethään).",
+'rclistfrom' => 'Näytä uuet muutokset jälkhiin $1',
+'rcshowhideminor' => '$1 pienet muutokset',
+'rcshowhidebots' => '$1 ropootit',
+'rcshowhideliu' => '
+$1 sisäle lokaattuja käyttäjiä',
+'rcshowhideanons' => '$1 anonyymit käyttäjät',
+'rcshowhidepatr' => '$1 tarkistetut muutokset',
+'rcshowhidemine' => '$1 omat muutokset',
+'rclinks' => 'Näytä $1 verestä muutosta viimisitten $2 päivitten aikana.<br />$3',
+'diff' => 'ero',
+'hist' => 'histuuria',
+'hide' => 'Piilota',
+'show' => 'Näytä',
+'minoreditletter' => 'p',
+'newpageletter' => 'U',
+'boteditletter' => 'b',
+'rc-enhanced-expand' => 'Näytä detaljit (JavaScript)',
+'rc-enhanced-hide' => 'Piilota detaljit',
+
+# Recent changes linked
+'recentchangeslinked' => 'Relateerattuja muutoksia',
+'recentchangeslinked-toolbox' => 'Relateerattuja muutoksia',
+'recentchangeslinked-title' => 'Muutokset relatterattuja "$1"',
+'recentchangeslinked-noresult' => 'Ei muutoksia linkathuin sivhuin annetulla aikakauela',
+'recentchangeslinked-summary' => 'Tämä on lista vereksistä muutoksista sivhuin, joihin on linkattu erikoiselta sivulta. Sivut sinun [[Special:Watchlist|valvontalistala]] on markeerattu lihavala tyylilä',
+'recentchangeslinked-page' => 'Sivun nimi',
+'recentchangeslinked-to' => 'Näytä muutokset sivhuin, jolla sen eestä on linkki annethuun sivhuun',
+
+# Upload
+'upload' => 'Lattaa ylös fiili',
+'uploadlogpage' => 'Ylöslattauksen loki',
+'filedesc' => 'Yhteenveto',
+'uploadedimage' => 'lattasi ylös [[$1]]',
+
+'license' => 'Lisensi',
+'license-header' => 'Lisensi',
+
+# File description page
+'file-anchor-link' => 'Fiili',
+'filehist' => 'Fiilin histuuria',
+'filehist-help' => 'Klikkaa taattymia/aikaa niin näet fiilin kuinka se oli siihen aikhaan',
+'filehist-revert' => 'pane takashiin',
+'filehist-current' => 'nykynen',
+'filehist-datetime' => 'Päivä/Aika',
+'filehist-thumb' => 'Peukalokuva',
+'filehist-thumbtext' => 'Peukalokuva säästetystä versuunista $1',
+'filehist-user' => 'Käyttäjä',
+'filehist-dimensions' => 'Timensuunit',
+'filehist-comment' => 'Komentti',
+'imagelinks' => 'Fiilin käyttö',
+'linkstoimage' => 'Seuraava {{PLURAL:$1|sivu |$1 sivut }} länkkaavat tähhään fiilhiin:',
+'nolinkstoimage' => 'Ei ole yhtään sivua joka linkkaa tähhään fiilhiin.',
+'sharedupload-desc-here' => 'Tämä fiili on jaettu kohtheesta $1 ja muut prujektit saattavat käyttää sitä.
+Tiot [$2 fiilin kuvvaussivulta] näkyvät tässä alla.',
+
+# Random page
+'randompage' => 'Satunhainen sivu',
+
+# Statistics
+'statistics' => 'Statistiikkaa',
+
+'disambiguationspage' => 'Template:Haarainsivu',
+
+# Miscellaneous special pages
+'nbytes' => '$1 {{PLURAL:$1|tavu|tavua}}',
+'nmembers' => '$1 {{PLURAL:$1|jäsen|jäsentä}}',
+'prefixindex' => 'Kaikki sivut prefiksilä',
+'usercreated' => 'Luottu $1 $2',
+'newpages' => 'Uuet sivut',
+'move' => 'Siirä',
+'pager-newer-n' => '← {{PLURAL:$1|1 uuempi|$1 uuempaa}}',
+'pager-older-n' => '{{PLURAL:$1|1 vanheempi|$1 vanheempaa}} →',
+
+# Book sources
+'booksources' => 'Kirjalähteet',
+'booksources-search-legend' => 'Hae kirjalähtheitä',
+'booksources-go' => 'Mene',
+
+# Special:Log
+'log' => 'Lokit',
+
+# Special:AllPages
+'allpages' => 'Kaikki sivut',
+'alphaindexline' => '$1…$2',
+'allarticles' => 'Kaikki sivut',
+'allpagessubmit' => 'Mene',
+
+# Special:Categories
+'categories' => 'Katekuurit',
+
+# Special:LinkSearch
+'linksearch-line' => '$1 on linkattu sivulta $2',
+
+# Special:Log/newusers
+'newuserlogpage' => 'Uuitten käyttäjitten loki',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(jäsenlista)',
+
+# E-mail user
+'emailuser' => 'Lähätä e-posti tälle käyttäjälle',
+
+# Watchlist
+'watchlist' => 'Valvontalista',
+'mywatchlist' => 'Minun valvontasivu',
+'watchlistfor2' => 'Käyttäjälle $1 $2',
+'watch' => 'Valvo',
+'unwatch' => 'Lopeta valvonta',
+'watchlist-details' => 'Valvontalistala on {{PLURAL:$1|$1 sivu|$1 sivua}} (keskustelusivuja mukhaan laskematta)',
+'wlshowlast' => 'Näytä viimiset $1 tiimat eli $2 päivät$3',
+'watchlist-options' => 'Valvontalistan altternatiivit',
+
+# Delete
+'actioncomplete' => 'Tehty',
+'actionfailed' => 'Tehty epäonnistui',
+'dellogpage' => 'Poistoloki',
+
+# Rollback
+'rollbacklink' => 'rullaa takashiin',
+
+# Protect
+'protectlogpage' => 'Suojausloki',
+'protectedarticle' => 'suojasi sivun [[$1]]',
+
+# Undelete
+'undeletelink' => 'näytä/ota takashiin',
+'undeleteviewlink' => 'näytä',
+
+# Namespace form on various pages
+'namespace' => 'Nimityhjyys:',
+'invert' => 'Jätä pois valinta',
+'blanknamespace' => '(Päätyhjyys)',
+
+# Contributions
+'contributions' => 'Omat mookkaukset',
+'contributions-title' => 'Käyttäjän $1 mookkaukset',
+'mycontris' => 'Omat mookkaukset',
+'contribsub2' => 'Käyttäjän $1 ($2) mookkaukset',
+'uctop' => '(viiminen)',
+'month' => 'Kuukauesta (ja aiemin)',
+'year' => 'Vuoesta (ja aiemin)',
+
+'sp-contributions-newbies' => 'Näytä uusitten tulokhaitten muutokset',
+'sp-contributions-blocklog' => 'blokeerinkiloki',
+'sp-contributions-uploads' => 'Ylöslattauksia',
+'sp-contributions-logs' => 'lokit',
+'sp-contributions-talk' => 'keskustelu',
+'sp-contributions-search' => 'Hae käyttäjitten bitraakia',
+'sp-contributions-username' => 'IP-atressi eli käyttäjänimi',
+'sp-contributions-toponly' => 'Näytä vain mookkaukset, jokka on vasta tehtyjä versuunia',
+'sp-contributions-submit' => 'Hae',
+
+# What links here
+'whatlinkshere' => 'Mitä linkkaa tänne',
+'whatlinkshere-title' => 'Sivut jokka länkathaan "$1"',
+'whatlinkshere-page' => 'Sivu',
+'linkshere' => 'Seuraavila sivuila on linkki sivule <strong>[[:$1]]</strong>:',
+'nolinkshere' => "Sivule \"'[[:\$1]]''' ei ole linkkiä.",
+'isredirect' => 'ohjaussivu',
+'istemplate' => 'sisäletty mallina',
+'isimage' => 'linkki fiilhiin',
+'whatlinkshere-prev' => '← {{PLURAL:$1|eelinen sivu|$1 eelistä sivua}}',
+'whatlinkshere-next' => '{{PLURAL:$1|seuraava sivu|$1 seuraava sivu}} →',
+'whatlinkshere-links' => 'linkit',
+'whatlinkshere-hideredirs' => '$1 ohjaukset',
+'whatlinkshere-hidetrans' => '$1 mallin inklyteerinkiä',
+'whatlinkshere-hidelinks' => '$1 linkit',
+'whatlinkshere-hideimages' => '$1 fiililinkit',
+'whatlinkshere-filters' => 'Filtterit',
+
+# Block/unblock
+'ipboptions' => '2 tiimaa:2 hours,1 päivä:1 day,3 päivää:3 days,1 viikko:1 week,2 viikkoa:2 weeks,1 kuukausi:1 month,3 kuukautta:3 months,6 kuukautta:6 months,1 vuosi:1 year,ikunen:infinite',
+'ipblocklist' => 'Plokeeratut käyttäjät',
+'blocklink' => 'blokeeraa',
+'unblocklink' => 'ota poies blokeerinki',
+'change-blocklink' => 'muuta blokeerinki',
+'contribslink' => 'mookkaukset',
+'blocklogpage' => 'Blokeerinki lokkaus',
+'blocklogentry' => 'blokeerattu [[$1]] blokeerausaika $2 $3',
+'block-log-flags-nocreate' => 'toppaa kontturejistreerinkiä',
+
+# Move page
+'movelogpage' => 'Siirtoloki',
+'revertmove' => 'siirä takashiin',
+
+# Export
+'export' => 'Eksporteeraa sivuja',
+
+# Namespace 8 related
+'allmessagesname' => 'Nimi',
+'allmessagesdefault' => 'Stantartiteksti',
+
+# Thumbnails
+'thumbnail-more' => 'Isona',
+'thumbnail_error' => 'Pienoiskuvan luominen epäonnistui: $1',
+
+# Tooltip help for the actions
+'tooltip-pt-userpage' => 'Oma käyttäjäsivu',
+'tooltip-pt-mytalk' => 'Oma keskustelusivu',
+'tooltip-pt-preferences' => 'Omat inställninkit',
+'tooltip-pt-watchlist' => 'Lista sivuista, joitten mookkauksia valvot',
+'tooltip-pt-mycontris' => 'Lista omista mookkauksista',
+'tooltip-pt-login' => 'Lokkaa mielelhään sisäle, mutta ei ole pakko',
+'tooltip-pt-logout' => 'Lokkaa ulos',
+'tooltip-ca-talk' => 'Keskustelu sisälöstä',
+'tooltip-ca-edit' => 'Voit mookata tätä sivua, mutta käytä esitarkastusknappia ennen kun säästät',
+'tooltip-ca-addsection' => 'Alota keskustelu uuesta asiasta',
+'tooltip-ca-viewsource' => 'Tämä sivu on suojattu. Saatat nähhä lähekootin',
+'tooltip-ca-history' => 'Sivun aiemat versuunit',
+'tooltip-ca-protect' => 'Suojaa tämä sivu',
+'tooltip-ca-delete' => 'Ota poies tämä sivu',
+'tooltip-ca-move' => 'Siirä tämä sivu',
+'tooltip-ca-watch' => 'Lissää tämä sivu sinun valvontalistale',
+'tooltip-ca-unwatch' => 'Ota poies tämä sivu sinun valvontalistasta',
+'tooltip-search' => 'Hae {{GRAMMAR:elative|{{SITENAME}}}}',
+'tooltip-search-go' => 'Siiry sivule joka on justhiins tällä nimelä',
+'tooltip-search-fulltext' => 'Hae sivuja tälle tekstile',
+'tooltip-p-logo' => 'Alkusivu',
+'tooltip-n-mainpage' => 'Mene alkusivule',
+'tooltip-n-mainpage-description' => 'Mene alkusivule',
+'tooltip-n-portal' => 'Keskustelua projektista',
+'tooltip-n-currentevents' => 'Löyä taustatietoja vereksistä tapahtumisista',
+'tooltip-n-recentchanges' => 'Lista vereksistä muutoksista',
+'tooltip-n-randompage' => 'Aukase satunhaisen sivun',
+'tooltip-n-help' => 'Apua ja informasuunia',
+'tooltip-t-whatlinkshere' => 'Lista wikisivuista jokka on länkattu tänne',
+'tooltip-t-recentchangeslinked' => 'Verekset mookkaukset sivuissa, jokka on länkattu tästä sivusta',
+'tooltip-feed-atom' => 'Atom-syöte tälle sivule',
+'tooltip-t-contributions' => 'Näytä lista tämän käyttäjän mookkauksista',
+'tooltip-t-emailuser' => 'Lähätä sähköposti tälle käyttäjälle',
+'tooltip-t-upload' => 'Lattaa ylös fiiliä',
+'tooltip-t-specialpages' => 'Lista kaikista spesiaalisivuista',
+'tooltip-t-print' => 'Printtausmaholinen versuuni',
+'tooltip-t-permalink' => 'Ikunen linkki tämän sivun versuunhiin',
+'tooltip-ca-nstab-main' => 'Näytä sisältösivu',
+'tooltip-ca-nstab-user' => 'Näytä käyttäjäsivu',
+'tooltip-ca-nstab-special' => 'Tämä on spesiaalisivu; sie et saata mookata itteä sivua',
+'tooltip-ca-nstab-project' => 'Näytä prujektisivu',
+'tooltip-ca-nstab-image' => 'Näytä fiilisivu',
+'tooltip-ca-nstab-template' => 'Näytä mallia',
+'tooltip-ca-nstab-category' => 'Näytä katekuurisivu',
+'tooltip-minoredit' => 'Merkitte tämä pieneksi muutokseksi',
+'tooltip-save' => 'Säästä mookkaukset',
+'tooltip-preview' => 'Esikuvvaa sinun muutokset, käytä tätä ennen kun säästät',
+'tooltip-diff' => 'Näytä sinun muutokset tekstistä',
+'tooltip-compareselectedversions' => 'Vertaile valitut sivuversuunit',
+'tooltip-watch' => 'Lissää tämä sivu sinun valvontalistale',
+'tooltip-rollback' => '"Rullaa takashiin" kaataa yhelä klikilä viimisen mookkaajan muutokset',
+'tooltip-undo' => '"Kumota" palauttaa tämän muutoksen ja aukasee artikkelin mookkausruutun esitarkastuksen kansa. Antaa maholisuuen kirjottaa mutiveerinkin mookkaajan yhteenvethoon',
+'tooltip-summary' => 'Kirjota lyhy yhteenveto',
+
+# Browsing diffs
+'previousdiff' => 'Vanheempi muutos',
+'nextdiff' => 'Uuempi muutos',
+
+# Media information
+'file-info-size' => '$1 × $2 pikseliä, fiilin koko: $3, MIME-tyyppi: $4',
+'file-nohires' => 'Tarkempaa kuvvaa ei ole saatavissa.',
+'svg-long-desc' => 'SVG-fiili; peruskoko $1 × $2 pikseliä, fiilikoko: $3',
+'show-big-image' => 'Korkearesulusuuni versuuni',
+
+# Bad image list
+'bad_image_list' => 'Listan muoto on seuraava:
+
+Vain *-merkilä alkavat rivit otethaan huomihoon.
+Rivin ensimäinen linkki häätyy mennä kehnoon fiilhiin.
+Kaikki muut linkit samala rivilä.käsitelthään poikkeuksena, eli toisin sanoen sivuja missä fiilin saapi käyttää.',
+
+# Metadata
+'metadata' => 'Meettataatta',
+'metadata-help' => 'Tämä fiili sisältää lisätietoja esimerkiks kuvanlukijan, eli kuvakäsittelyprukrammin lisätietoja. Kaikki tiot ei en´nää välttämättä vastaa toelisuutheen, jos kuvvaa on mookattu sen alkuperäisen luomisen jälkhiin.',
+'metadata-fields' => 'Seuraavaa meettataatta kentät listattu tässä informasuunissa, sisälethään näkyvänä kuvasivussa, kun meettataatta taulukko kolapsaa. Muut piilotethaan stantartina.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude',
+
+# External editor support
+'edit-externally' => 'Mookkaa tätä fiiliä käyttämällä eksterniä aplikasuunia',
+'edit-externally-help' => '(Katto [//www.mediawiki.org/wiki/Manual:External_editors ohjeet], jos haluat lissää tietoja.)',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'kaikki',
+'namespacesall' => 'kaikki',
+'monthsall' => 'kaikki',
+
+# Watchlist editing tools
+'watchlisttools-view' => 'Näytä muutokset',
+'watchlisttools-edit' => 'Näytä ja mookkaa valvontalistaa',
+'watchlisttools-raw' => 'Mookkaa valvontalistaa raakamuoossa',
+
+# Core parser functions
+'duplicate-defaultsort' => 'Varotus: Stantartisortteerausavvain ”$2” korvaa aieman stantartisortteerausavvaimen”$1”.',
+
+# Special:SpecialPages
+'specialpages' => 'Spesiaali sivut',
+
+# External image whitelist
+'external_image_whitelist' => '#Älä muuta tätä riviä ollenkhaan.<pre>
+#Kirjota rekyljääri frakmentitten meininkit (vain osa, joka mennee //-merkkitten välhiin) tähhään alle
+#Niitä verrathaan ulkoisitten (suoralinkitetyitten) kuvitten URLhin
+#Net jokka sopivat, näytethään kuvina, muuten kuvhiin näytethään vain linkit
+#Rivit, jokka alkavat #-merkilä on komentaaria
+#Tämä on riippumaton puukstavitten kokosta',
+
+# Special:Tags
+'tag-filter' => '[[Special:Tags|Merkki]] filtteri:',
+
+);
'nchanges' => '$1 {{PLURAL:$1|broyting|broytingar}}',
'recentchanges' => 'Seinastu broytingar',
'recentchanges-legend' => 'Nýligar broytingar møguleikar',
-'recentchangestext' => 'Á hesi síðu kanst tú fylgja teimum nýggjastu broytingunum á hesi wiki.',
+'recentchanges-summary' => 'Á hesi síðu kanst tú fylgja teimum nýggjastu broytingunum á hesi wiki.',
'recentchanges-feed-description' => "Við hesum feed'inum kanst tú fylgja teimum seinastu broytingunum á hesi wiki'ini.",
'recentchanges-label-newpage' => 'Henda rætting upprættaði eina nýggja síðu',
'recentchanges-label-minor' => 'Hetta er ein lítil rætting',
* @author Yumeki
* @author Zebulon84
* @author Zetud
+ * @author Zolo
* @author Горан Анђелковић
* @author לערי ריינהארט
*/
'staticredirect' => array( '1', '__REDIRECTIONSTATIQUE__', '__STATICREDIRECT__' ),
'protectionlevel' => array( '1', 'NIVEAUDEPROTECTION', 'PROTECTIONLEVEL' ),
'url_path' => array( '0', 'CHEMIN', 'PATH' ),
+ 'url_query' => array( '0', 'QUESTION', 'QUERY' ),
);
$specialPageAliases = array(
'userrights-groupsmember-auto' => 'Membre implicite de :',
'userrights-groups-help' => 'Vous pouvez modifier les groupes auxquels appartient cet utilisateur:
* Une case cochée signifie que l’utilisateur se trouve dans ce groupe.
-* Une case non cochée signifie qu’il ne s’y trouve pas.
+* Une case non cochée signifie qu’{{GENDER:$1|il|elle}} ne s’y trouve pas.
* Un astérisque (*) indique que vous ne pouvez pas retirer ce groupe une fois que vous l’avez ajouté, ou vice-versa.',
'userrights-reason' => 'Motif :',
'userrights-no-interwiki' => 'Vous n’avez pas la permission de modifier des droits d’utilisateurs sur d’autres wikis.',
'nchanges' => '$1 modification{{PLURAL:$1||s}}',
'recentchanges' => 'Modifications récentes',
'recentchanges-legend' => 'Options des modifications récentes',
-'recentchangestext' => 'Piste les changements les plus récents du wiki sur cette page.',
+'recentchanges-summary' => 'Piste les changements les plus récents du wiki sur cette page.',
'recentchanges-feed-description' => 'Suivre les dernières modifications de ce wiki dans un flux.',
'recentchanges-label-newpage' => 'Cette modification a créé une nouvelle page',
'recentchanges-label-minor' => 'Cette modification est mineure',
'backend-fail-writetemp' => "Impossible d'écrire dans le fichier temporaire.",
'backend-fail-closetemp' => 'Impossible de fermer le fichier temporaire.',
'backend-fail-read' => 'Impossible de lire le fichier $1.',
-'backend-fail-create' => 'Impossible de créer le fichier $1.',
-'backend-fail-maxsize' => "Impossible de créer le fichier $1 parce qu'il est plus grand que {{PLURAL:$2|$2 octet| $2 octets}}.",
+'backend-fail-create' => 'Impossible d’écrire le fichier $1.',
+'backend-fail-maxsize' => "Impossible d’écrire le fichier $1 parce qu'il est plus grand {{PLURAL:$2|qu'un octet|que $2 octets}}.",
'backend-fail-readonly' => 'Le support de stockage "$1" est actuellement en lecture seule. La raison indiquée est: "$2"',
'backend-fail-synced' => 'Le fichier "$1" est dans un état incohérent dans les supports de stockage internes',
'backend-fail-connect' => 'Impossible de se connecter au support de stockage "$1".',
'backend-fail-internal' => 'Une erreur inconnue s\'est produite dans le support de stockage "$1".',
'backend-fail-contenttype' => 'Impossible de déterminer le type de contenu du fichier à stocker en "$1".',
'backend-fail-batchsize' => 'Le support de stockage a fourni un lot de $1 {{PLURAL:$1|opération|opérations}} de fichier; la limite est $2 {{PLURAL:$2|opération|opérations}}.',
+'backend-fail-usable' => 'Impossible d’écrire le fichier $1 en raison de droits insuffisants ou répertoires/conteneurs manquants.',
# File journal errors
'filejournal-fail-dbconnect' => 'Impossible de se connecter à la base de données du journal pour le terminal de stockage "$1".',
'http-curl-error' => 'Erreur lors de la récupération de l’URL : $1',
'http-host-unreachable' => 'Impossible d’atteindre l’URL.',
'http-bad-status' => 'Il y a eu un problème lors de la requête HTTP : $1 $2',
-'http-truncated-body' => 'Le corps de la requête n’a été reçu que partiellement.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'URL injoignable',
'upload-curl-error28-text' => 'Le site a mis trop longtemps à répondre. Vérifiez que le site est en ligne, attendez un peu et réessayez. Vous pouvez aussi réessayer à une heure de moindre affluence.',
'license' => 'Licence',
-'license-header' => 'Publié sous licence(s)',
+'license-header' => "Conditions d'utilisation",
'nolicense' => 'Aucune licence sélectionnée',
'license-nopreview' => '(Prévisualisation non disponible)',
'upload_source_url' => ' (une URL valide et accessible publiquement)',
NS_MEDIA => 'Mèdia',
NS_SPECIAL => 'Spèciâl',
NS_TALK => 'Discussion',
- NS_USER => 'Usanciér',
- NS_USER_TALK => 'Discussion_usanciér',
+ NS_USER => 'Utilisator',
+ NS_USER_TALK => 'Discussion_utilisator',
NS_PROJECT_TALK => 'Discussion_$1',
NS_FILE => 'Fichiér',
NS_FILE_TALK => 'Discussion_fichiér',
$namespaceAliases = array(
'Discutar' => NS_TALK,
- 'Utilisator' => NS_USER,
- 'Discussion_Utilisator' => NS_USER_TALK,
+ 'Usanciér' => NS_USER,
+ 'Discussion_usanciér' => NS_USER_TALK,
'Émâge' => NS_FILE,
'Discussion_Émâge' => NS_FILE_TALK,
'Discussion_Modèlo' => NS_TEMPLATE_TALK,
'nchanges' => '$1 changement{{PLURAL:$1||s}}',
'recentchanges' => 'Dèrriérs changements',
'recentchanges-legend' => 'Chouèx des dèrriérs changements',
-'recentchangestext' => 'Siude los dèrriérs changements du vouiqui sur ceta pâge.',
+'recentchanges-summary' => 'Siude los dèrriérs changements du vouiqui sur ceta pâge.',
'recentchanges-feed-description' => 'Siude los dèrriérs changements du vouiqui dens ceti flux.',
'recentchanges-label-newpage' => 'Ceti changement at fêt una pâge novèla.',
'recentchanges-label-minor' => 'Ceti changement est petiôt.',
'ok' => 'OK',
'pagetitle' => '$1 – {{SITENAME}}',
'pagetitle-view-mainpage' => '{{SITENAME}}',
+'backlinksubtitle' => '← $1',
'retrievedfrom' => 'Foon „$1“',
'youhavenewmessages' => 'Dü hääst $1 aw din diskusjoonssid ($2).',
'newmessageslink' => 'naie tisinge',
'viewsourcetext' => 'Dü koost jü kwäle foon jüdeer sid bekiike än kopiire.',
'viewyourtext' => "Dü könst di code faan '''din feranerang''' faan detheer sidj uunluke an kopiare:",
'protectedinterface' => 'Jüdeer sid önjthålt takst for ju brükerouerfläche foon e software än as späred, am masbrük tu ferhanern.',
-'editinginterface' => "'''Woorschauing:''' Jüdeer sid önjthålt foon jü MesiaWiki-software bënjüteden takst.
-Änringe wirke jam aw jü brükerouerfläche üt.
-For ouerseetinge tånk deeram, jü önj di [//translatewiki.net/wiki/Main_Page?setlang=frr Translatewiki], dåt MediaWiki lokalisiiringsprojekt, döörtufäären.",
+'editinginterface' => "'''Paase üüb:''' Üüb detdiar sidj stäänt tekst, diar faan't MediaWiki software brükt woort. Wan dü diar wat feranerst, feranerst dü di skak faan't Nuurdfresk Wikipedia.
+Wan dü wat auersaat wel, maage det mä [//translatewiki.net/wiki/Main_Page?setlang=frr Translatewiki], det as det MediaWiki lokalisiarangsprojekt.",
'sqlhidden' => 'SCL-ouffrååg ferstäägen',
'cascadeprotected' => 'Jüdeer sid as for beårbing spärd. Jü as önj {{PLURAL:$1|e füliende sid|da füliende side}}
önjbünen, {{PLURAL:$1|jü|da}} madels e kaskaadespäropsjoon önj febading hüüljen {{PLURAL:$1|as|san}}:
'subject' => 'Bedrååwet:',
'minoredit' => 'Bloot kleenihäide wörden feränred',
'watchthis' => 'Kiike eefter jüdeer sid',
-'savearticle' => 'Sid spikre',
+'savearticle' => 'Sidj seekre',
'preview' => 'Forlök',
'showpreview' => 'Forlök wise',
'showlivepreview' => 'Live-forkiik',
'searchdisabled' => 'Jü {{SITENAME}}-säkj as deaktiviird. Dü koost intwasche ma Google säke. Betånk, dåt di säkindäks for {{SITENAME}} ferüüljet weese koon.',
# Quickbar
+'qbsettings' => 'Sidjenliist',
'qbsettings-none' => 'Niinj',
+'qbsettings-fixedleft' => 'Lachts, fääst',
+'qbsettings-fixedright' => 'Rochts, fääst',
+'qbsettings-floatingleft' => 'Lachts, auergung',
+'qbsettings-floatingright' => 'Rochts, auergung',
+'qbsettings-directionality' => 'Fääst, hinget faan di skriiwwai faan det spriak uf',
# Preferences page
'preferences' => 'Önjstalinge',
'mypreferences' => 'Önjstalinge',
+'prefs-edits' => 'Taal faan feranerangen:',
'prefsnologin' => 'Ai önjmälded',
+'prefsnologintext' => 'Dü skel <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} uunmeldet]</span> wees, am din iinstelangen tu feranerin.',
'changepassword' => 'Pååsuurd änre',
+'prefs-skin' => 'Skak',
'skin-preview' => 'Forlök',
'datedefault' => 'Foor-önjstaling',
+'prefs-beta' => 'Beta mögelkhaiden',
+'prefs-datetime' => 'Dai an klooktidj',
+'prefs-labs' => 'Alpha mögelkhaiden',
'prefs-personal' => 'Brüker dooten',
'prefs-rc' => 'Leeste änringe',
+'prefs-watchlist' => "Uun't uug behual",
+'prefs-watchlist-days' => "So föl daar uun't uug behual:",
'prefs-watchlist-days-max' => 'Ei muar üs {{PLURAL:$1|ään dai|$1 daar}}',
+'prefs-watchlist-edits' => 'Ei muar feranerangen üs:',
'prefs-watchlist-edits-max' => 'Ai mör as 1000',
+'prefs-watchlist-token' => "Token för uun't uug behualen:",
'prefs-misc' => 'Dit än dat',
'prefs-resetpass' => 'Pååsuurd änre',
+'prefs-changeemail' => 'Feranere det E-Mail-adres',
+'prefs-setemail' => 'E-Mail-adres fäästlei:',
+'prefs-email' => 'E-Mail iinstelangen',
+'prefs-rendering' => 'Skak',
'saveprefs' => 'Önjstalinge sääkere',
+'resetprefs' => 'Wech diarmä',
+'restoreprefs' => 'Normool iinstelangen weder haale',
+'prefs-editing' => 'Bewerke',
+'prefs-edit-boxsize' => "Grate faan't wönang tu't bewerkin:",
+'rows' => 'Räen:',
+'columns' => 'Spleder:',
+'searchresultshead' => 'Sjük',
+'resultsperpage' => 'So fölsis komt det föör per sidj:',
+'stub-threshold' => 'Formatiarang faan links <a href="#" class="stub">för letj sidjen</a> (uun Byte):',
+'stub-threshold-disabled' => 'Ufsteld',
+'recentchangesdays' => 'Soföl daar skel a „leetst feranerangen“ uunwise:',
+'recentchangesdays-max' => 'Ei muar üs {{PLURAL:$1|ään dai|$1 daar}}',
+'recentchangescount' => 'Soföl feranerangen skel uunwiset wurd:',
+'prefs-help-recentchangescount' => 'Det san a leetst feranerangen, wersjuunen an logbuken.',
+'prefs-help-watchlist-token' => "Wan dü detdiar fial mä en hiamelken code ütjfalst, woort en RSS-feed iinracht. Arken mä didiar code koon do sä, wat dü uun't uug behual wel. Diaram skul hi ei so ianfach wees, nem dach didiar: $1",
+'savedprefs' => 'Di iinstelangen san seekerd wurden.',
'localtime' => 'lokaal tid',
'timezoneregion-africa' => 'Afrikaa',
'timezoneregion-america' => 'Ameerikaa',
'defaultns' => 'Ouers säk önj jüheer noomerüme:',
'default' => 'Forinstaling',
'prefs-files' => 'Dååtäie',
+'prefs-custom-css' => 'Salew maaget CSS',
+'prefs-custom-js' => 'Salew maaget JavaScript',
+'prefs-common-css-js' => 'CSS / JavaScript för arke skak:',
+'prefs-reset-intro' => 'Üüb detdiar sidj könst dü weder a normool iinstelangen iinracht.
+Do san jo ual iinstelangen wech.',
+'prefs-emailconfirm-label' => 'E-Mail gudkäänd:',
+'prefs-textboxsize' => "Grate faan't wönang tu bewerkin",
'youremail' => 'E-mail:',
'username' => 'Brükernoome:',
+'uid' => 'Brüker ID:',
+'prefs-memberingroups' => 'Lasmoot faan {{PLURAL:$1|brükerskööl|brükersköölen}}:',
+'prefs-registration' => 'Uunmeldetidj',
'yourrealname' => 'Rocht nööm:',
'yourlanguage' => 'Spräke:',
+'yourvariant' => 'Spriak:',
+'prefs-help-variant' => 'Uun hün skriiwwiis skel a sidjen uunwiset wurd:',
'yournick' => 'Nai signatuur:',
+'prefs-help-signature' => 'Wees so gud an onerskriiw üüb diskusjuunssidjen mä „<nowiki>~~~~</nowiki>“. Diar komt do dan brükernööm an det klooktidj bi ütj.',
'email' => 'E-mail',
'prefs-help-email' => 'Dü säärst din e-mail-adres ei uundu, oober do könst dü uk nian mädialangen fu, wan dü ans din paaswurd ferjiden heest.',
'prefs-help-email-others' => 'Mä ööder brükern könst dü uk auer hör an din brükersidj kontakt apnem. Diarför woort din e-mail-adres ei brükt.',
'nchanges' => '$1 {{PLURAL:$1|änring|änringe}}',
'recentchanges' => 'Leeste änringe',
'recentchanges-legend' => 'Wis-opsjoone',
-'recentchangestext' => "Üüb detheer sidj könst dü a leetst feranerangen faan '''{{SITENAME}}''' ferfulge.",
+'recentchanges-summary' => "Üüb detheer sidj könst dü a leetst feranerangen faan '''{{SITENAME}}''' ferfulge.",
'recentchanges-feed-description' => 'Ferfülie ma dåtheer feed da leeste änringe önj {{SITENAME}}.',
'recentchanges-label-newpage' => 'Nei sidj uunlaanj',
'recentchanges-label-minor' => 'Letj feranerang',
# Delete
'deletepage' => 'Sid tunintemååge',
+'exblank' => 'sidj wiar leesag',
+'delete-confirm' => 'Strik "$1"',
'delete-legend' => 'Strike',
+'historywarning' => "'''Paase üüb:''' Det sidj, wat dü strik wel, hää amanbi $1 {{PLURAL:$1|wersjuun|wersjuunen}}:",
'confirmdeletetext' => 'Dü bast deerbai, en sid ma åle tuhiirende ålere färsjoone tuninte tu måågen. Bestääsie hål deertu, dåt dü de foon da konsekwänse bewust bast, än dåt dü önj oueriinjstiming ma da [[{{MediaWiki:Policy-url}}|ruchtliinjen]] hoonelst.',
'actioncomplete' => 'Aksjoon beånd',
'actionfailed' => 'Diar ging wat skiaf',
'deletedtext' => '„$1“ wörd tunintemååged. In e $2 fanst dü en list foon da tuleest tunintemåågede side.',
'dellogpage' => 'Tunintemååg-Logbök',
+'dellogpagetext' => 'Diar stun a leetst stregen sidjen an datein.',
+'deletionlog' => "logbuk faan't striken",
+'reverted' => 'Tu en ual wersjuun turagsaat',
'deletecomment' => 'Grün:',
'deleteotherreason' => 'Ouderen/tubaikaamenden grün:',
'deletereasonotherlist' => 'Ouderen grün',
+'deletereason-dropdown' => "*Algemian grünjer för't striken
+** Di skriiwer wul det so
+** Copyright as ei beaachtet
+** Wandaalen onerwais",
+'delete-edit-reasonlist' => "Grünjer för't striken bewerke",
+'delete-toobig' => 'Detdiar sidj hää muar üs $1 {{PLURAL:$1|wersjuun|wersjuunen}} . Sok sidjen kön ei so gau stregen wurd, ööders san a servers plaat.',
+'delete-warning-toobig' => "Detdiar sidj hää muar üs $1 {{PLURAL:$1|wersjuun|wersjuunen}} . Det striken koon komer maage bi't dootenbeenk.",
# Rollback
'rollbacklink' => 'tubäägseete',
'protectlogpage' => 'Sideschütse-logbök',
'protectedarticle' => 'schütsed „[[$1]]“',
'modifiedarticleprotection' => 'änred e schüts for "[[$1]]"',
+'prot_1movedto2' => 'hää „[[$1]]“ efter „[[$2]]“ fersköwen',
'protectcomment' => 'Grün:',
'protectexpiry' => 'Spärduur:',
'protect_expiry_invalid' => 'Jü önjjääwen duur as üngülti.',
'protect-cantedit' => 'Dü koost jü späre foon jüheer sid ai änre, deer dü niinj beruchtiging tu beårben foon jü sid hääst.',
'restriction-type' => 'Schütsstatus',
'restriction-level' => 'Schütshöögde',
+'minimum-size' => 'Minimaal grate:',
+'maximum-size' => 'Maksimaal grate:',
+'pagesize' => '(bytes)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Bewerke',
+'restriction-move' => 'Fersküüw',
+'restriction-create' => 'Maage',
+'restriction-upload' => 'Huuchsjüür',
+
+# Restriction levels
+'restriction-level-sysop' => 'seekerd (bluas för administratooren)',
+'restriction-level-autoconfirmed' => 'hualew seekerd (bluas för gudkäänd brükern)',
+'restriction-level-all' => 'aaltumaal',
# Undelete
+'undelete' => 'Stregen sidjen uunwise',
+'undeletepage' => 'Stregen sidjen uunwise an weder iinstel',
+'undeletepagetitle' => "'''Detdiar wiset a stregen wersjuunen faan [[:$1|$1]]'''.",
+'viewdeletedpage' => 'Stregen sidjen uunwise',
+'undeletepagetext' => "{{PLURAL:$1|Detdiar sidj as stregen wurden, oober koon|Jodiar $1 sidjen san stregen wurden, oober kön}} faan administratooren weder iinsteld wurd, wan jo noch uun't archiif san.",
+'undelete-fieldset-title' => 'Weder iinstel',
+'undeleteextrahelp' => '* Am det sidj mä aal jo wersjuunen weder iintustelen, sjük nian enkelt wersjuun ütj, du en grünj uun an trak do üüb „{{int:undeletebtn}}“.*
+* Am en was wersjuun weder iintustelen, sjük det wersjuun ütj, du en grünj uun an trak do üüb „{{int:undeletebtn}}“.',
+'undeleterevisions' => '{{PLURAL:$1|1 wersjuun|$1 wersjuunen}} archiwiaret',
+'undeletehistory' => 'Wan dü detdiar sidj weder iinstelst, wurd uk jo ual wersjuunen weder iinsteld.
+Wan sant det striken en nei sidj mä di salew nööm iinsteld wurden as, wurd jo ual wersjuunen bi det nei sidj mä iinwerket.',
+'undeleterevdel' => 'Det weder iinstelen woort ei maaget, wan det leetst wersjuun ferstäächt as.
+Wan det so as, skal det leetst wersjuun iarst weder üüb normool steld wurd.',
+'undeletehistorynoadmin' => 'Detdiar sidj as stregen wurden.
+Oner könst dü sä, hoker det maaget hää an huaram.
+Di tekst faan det stregen sidj fu bluas administratooren uunwiset.',
+'undelete-revision' => 'Stregen wersjuun faan $1 (di $4 am a klook $5 ), $3:',
+'undeleterevision-missing' => 'Mä detdiar wersjuun stemet wat ei. Ferlicht as di link ferkiard of det wersjuun as ei muar diar.',
+'undelete-nodiff' => 'Nian föörgunger wersjuun diar.',
+'undeletebtn' => 'Weder iinstel',
'undeletelink' => 'wise/widermååge',
'undeleteviewlink' => 'Uunluke',
+'undeletereset' => 'Turag saat',
+'undeleteinvert' => 'Ütjwool amdrei',
+'undeletecomment' => 'Grünj:',
+'undeletedrevisions' => '{{PLURAL:$1|1 wersjuun|$1 wersjuunen}} weder iinsteld',
+'undeletedrevisions-files' => '{{PLURAL:$1|1 wersjuun|$1 wersjuunen}} an {{PLURAL:$2|1 datei|$2 datein}} weder iinsteld',
+'undeletedfiles' => '{{PLURAL:$1|1 datei|$1 datein }} weder iinsteld',
+'cannotundelete' => 'Weder iinstelen hää ei loket; ferlicht hää hoker ööders det al weder iinsteld.',
+'undeletedpage' => "'''„$1“''' as weder iinsteld wurden.
+Uun't [[Special:Log/delete|logbuk faan stregen sidjen]] stun a stregen an weder iinsteld sidjen.",
+'undelete-header' => "Luke uun't [[Special:Log/delete|logbuk för stregen sidjen]] efter stregen sidjen faan a leetst tidj.",
+'undelete-search-title' => 'Sjük stregen sidjen',
+'undelete-search-box' => 'Sjük stregen sidjen',
+'undelete-search-prefix' => 'Sjük sidjen, diar began mä:',
+'undelete-search-submit' => 'Sjük',
+'undelete-no-results' => "Uun't archiif wiar nian paasen sidjen.",
+'undelete-filename-mismatch' => 'Det wersjuun faan $1 koon ei weder iinsteld wurd. Di dateinööm paaset ei.',
+'undelete-bad-store-key' => "Det dateiwersjuun faan $1 koon ei weder iinsteld wurd. Det datei wiar al föör't striken ei muar diar.",
+'undelete-error' => "Bi't weder iinstelen faan det sidj as wat skiaf gingen.",
+'undelete-error-short' => "Bi't weder iinstelen faan det datei $1 as wat skiaf gingen.",
+'undelete-error-long' => "Bi't weder iinstelen faan en datei as wat skiaf gingen:
+
+$1",
+'undelete-show-file-confirm' => 'Wel dü würelk det stregen wersjuun faan det datei „<nowiki>$1</nowiki>“ faan di $2, am a klook $3 uunluke?',
+'undelete-show-file-submit' => 'Ja',
# Namespace form on various pages
'namespace' => 'Noomerüm:',
# Block/unblock
'blockip' => 'IP-adräs/brüker späre',
'ipboptions' => '2 stüne:2 hours,1 däi:1 day,3 deege:3 days,1 wääg:1 week,2 wääge:2 weeks,1 moune:1 month,3 moune:3 months,6 moune:6 months,1 iir:1 year,suner iinje:infinite',
+'unblocked-id' => 'Sperang $1 as apheewen',
'blocklist' => 'Spärd brükere',
'ipblocklist' => 'Spärd brükere',
'ipblocklist-legend' => 'Spärd brükere fine',
'blocklogpage' => 'Brükerspär-logbök',
'blocklogentry' => 'spärd „[[$1]]“ for di tidrüm: $2 $3',
'reblock-logentry' => 'änerd jü spär for „[[$1]]“ for di tidrüm: $2 $3',
-'blocklogtext' => 'Dåtdeer as dåt logbök ouer späringe än önjtspäringe foon brükere än IP-adräse.
-Automatisch spärd IP-adräse wårde ai footed.
-Sii jü [[Special:BlockList|list foon da spärd IP-adräse än brükernoome]] for ål da aktive späre.',
+'blocklogtext' => "Detdiar as det logbuk auer sperangen an apheewen sperangen faan brükernöömer an IP-adresen.
+Automaatisk sperd IP-adresen wurd ei uunwiset.
+Luke bi't [[Special:BlockList|sperlist]] för aal jo aktuel speren.",
'unblocklogentry' => 'heet jü späre foon „$1“ aphääwen',
'block-log-flags-anononly' => 'bloot anonyme',
'block-log-flags-nocreate' => 'Måågen foon brükerkonte spärd',
'talkexists' => 'Jü sid seelew wörd erfolchrik ferschääwen, ouers jü deertu hiirende diskusjoonssid ai, deer ål iinj ma di nai tiitel bestoont. Glik hål da önjhålte foon hönj ouf.',
'movedto' => 'ferschääwen eefter',
'movetalk' => 'Jü diskusjoonssid maferschüwe, wan möölik',
+'movepage-page-moved' => 'Det sidj $1 as efter $2 fersköwen wurden.',
+'movepage-page-unmoved' => 'Det sidj $1 küd ei efter $2 fersköwen wurd.',
+'movepage-max-pages' => 'Diar kön ei muar üs {{PLURAL:$1|sidj|sidjen}} fersköwen wurd. Muar sidjen kön ei automaatisk fersköwen wurd.',
'movelogpage' => 'Ferschüwingslogbök',
'movereason' => 'Begrüning:',
'revertmove' => 'tubääg ferschüwe',
'tooltip-ca-nstab-help' => 'Heelpsid wise',
'tooltip-ca-nstab-category' => 'Kategoriisid wise',
'tooltip-minoredit' => 'Jüdeer änring as latj markiire.',
-'tooltip-save' => 'Änringe spikre',
+'tooltip-save' => 'Feranerangen seekre',
'tooltip-preview' => 'Forlök foon da änringe bai jüdeer sid. Hål for dåt spikern brüke!',
'tooltip-diff' => 'Änringe bai di täkst wise',
'tooltip-compareselectedversions' => 'Ferschääl twasche tou ütwäälde färsjoone foon jüdeer sid wise.',
'revdelete-uname-unhid' => 'brükernoome frijääwen',
'revdelete-restricted' => 'gränse jüle uk for administratoore',
'revdelete-unrestricted' => 'gränse for administratoore wächnümen',
+'logentry-move-move' => '$1 hää det sidj $3 efter $4 fersköwen.',
+'logentry-move-move-noredirect' => '$1 hää det sidj $3 efter $4 saner widjerfeerang fersköwen.',
+'logentry-move-move_redir' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen.',
+'logentry-move-move_redir-noredirect' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen saner salew en widjerfeerang uuntuleien.',
);
* @author Kaganer
* @author Klenje
* @author MF-Warburg
+ * @author Reedy
* @author Urhixidur
* @author לערי ריינהארט
*/
'nchanges' => '$1 {{PLURAL:$1|cambiament|cambiaments}}',
'recentchanges' => 'Ultins cambiaments',
'recentchanges-legend' => 'Opzions dai ultins cambiaments',
-'recentchangestext' => 'Cheste pagjine e mostre i plui recents cambiaments inte {{SITENAME}}.',
+'recentchanges-summary' => 'Cheste pagjine e mostre i plui recents cambiaments inte {{SITENAME}}.',
'recentchanges-feed-description' => 'Chest canâl al ripuarte i cambiaments plui recents ai contignûts di cheste wiki.',
'recentchanges-label-newpage' => 'Chest cambiament al à creât une gnove pagjine',
'recentchanges-label-minor' => 'Chest al è un piçul cambiament',
In chescj câs, tu varâs di movi o unî a man lis informazions contignudis te pagjine di discussion, se tu lu desideris.",
'movearticle' => 'Môf la vôs',
'movenologin' => 'No tu sês jentrât',
-'movenologintext' => 'Tu âs di jessi un utent regjistrât e <a href="{{localurl:Special:UserLogin}}">jentrât</a> par movi une pagjine.',
+'movenologintext' => 'Tu âs di jessi un utent regjistrât e [[Special:UserLogin|jentrât]] par movi une pagjine.',
'movenotallowed' => 'No tu âs i permès che a coventin par movi lis pagjinis.',
'newtitle' => 'Al gnûf titul',
'move-watch' => 'Ten di voli cheste pagjine',
* @author Kwekubo
* @author Moilleadóir
* @author Moydow
+ * @author Reedy
* @author Spacebirdy
* @author Stifle
* @author Tameamseo
'nchanges' => '{{PLURAL:$1|Athrú amháin|$1 athruithe}}',
'recentchanges' => 'Athruithe is déanaí',
'recentchanges-legend' => 'Roghanna do na hathruithe is déanaí',
-'recentchangestext' => 'Déan faire ar na hathruithe is déanaí sa vicí ar an leathanach seo.',
+'recentchanges-summary' => 'Déan faire ar na hathruithe is déanaí sa vicí ar an leathanach seo.',
'recentchanges-feed-description' => 'Rianaigh na n-athruite vicí is déanaí sa fotha seo.',
'recentchanges-label-bot' => 'Chomhlíon róbó an t-athrú seo',
'rcnote' => "Is {{PLURAL:$1|é seo a leanas <strong>an t-athrú amháin</strong>|iad seo a leanas na <strong>$1</strong> athruithe is déanaí}} {{PLURAL:$2|ar feadh an lae dheireanaigh|ar feadh na '''$2''' lá deireanacha}}, as $5, $4.",
Tabhair faoi deara '''nach''' n-athainmneofar an leathanach má tá leathanach ann cheana féin faoin teideal nua, ach amháin más folamh nó atreorú é nó mura bhfuil aon stair athraithe aige cheana.
Mar sin, is féidir leathanach a athainmniú ar ais chuig an teideal a raibh air roimhe má tá botún déanta agat, agus ní féidir leathanach atá ann cheana a fhorscríobh.
-<font color=\"red\">'''Rabhadh!'''</font>
+'''Rabhadh!'''
Is féidir gur dianbheart gan choinne é athrú a dhéanamh ar leathanach móréilimh;
cinntigh go dtuigeann tú na hiarmhairtí go léir roimh dul ar aghaigh.",
'movepagetalktext' => "Aistreofar an leathanach plé go huathoibríoch '''ach ní tharlófar sin''':
* @author לערי ריינהארט
*/
+$namespaceNames = array(
+ NS_MEDIA => 'Meadhan',
+ NS_SPECIAL => 'Sònraichte',
+ NS_TALK => 'Deasbaireachd',
+ NS_USER => 'Cleachdaiche',
+ NS_USER_TALK => 'Deasbaireachd_a\'_chleachdaiche',
+ NS_PROJECT_TALK => 'An_deasbaireachd_aig_$1',
+ NS_FILE => 'Faidhle',
+ NS_FILE_TALK => 'Deasbaireachd_an_fhaidhle',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'Deasbaireachd_MediaWiki',
+ NS_TEMPLATE => 'Teamplaid',
+ NS_TEMPLATE_TALK => 'Deasbaireachd_na_teamplaid',
+ NS_HELP => 'Cobhair',
+ NS_HELP_TALK => 'Deasbaireachd_na_cobharach',
+ NS_CATEGORY => 'Roinn-seòrsa',
+ NS_CATEGORY_TALK => 'Deasbaireachd_na_roinn-seòrsa',
+);
+
$messages = array(
# User preference toggles
'tog-underline' => 'Fo-loidhneadh nan ceanglaichean:',
'notoc' => array( '0', '__SENÍNDICE__', '__SEMTDC__', '__SEMSUMÁRIO__', '__NOTOC__' ),
'nogallery' => array( '0', '__SENGALERÍA__', '__SEMGALERIA__', '__NOGALLERY__' ),
'forcetoc' => array( '0', '__FORZAROÍNDICE__', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
- 'toc' => array( '0', '__ÍNDICE__', '__TDC__', '__SUMÁRIO__', '__TOC__' ),
- 'noeditsection' => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NOEDITSECTION__' ),
+ 'toc' => array( '0', '__ÍNDICE__', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
+ 'noeditsection' => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
'noheader' => array( '0', '___SENCABECEIRA__', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
'currentmonth' => array( '1', 'MESACTUAL', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonth1' => array( '1', 'MESACTUAL1', 'MESATUAL1', 'CURRENTMONTH1' ),
'language' => array( '0', '#LINGUA:', '#IDIOMA:', '#LANGUAGE:' ),
'numberofadmins' => array( '1', 'NÚMERODEADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMBEROFADMINS' ),
'special' => array( '0', 'especial', 'special' ),
+ 'defaultsort' => array( '1', 'ORDENAR:', 'ORDENACAOPADRAO', 'ORDENAÇÃOPADRÃO', 'ORDEMPADRAO', 'ORDEMPADRÃO', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'tag' => array( '0', 'etiqueta', 'tag' ),
'hiddencat' => array( '1', '__CATEGORÍAOCULTA__', '__CATEGORIAOCULTA__', '__CATOCULTA__', '__HIDDENCAT__' ),
'pagesincategory' => array( '1', 'PÁXINASNACATEGORÍA', 'PAGINASNACATEGORIA', 'PÁGINASNACATEGORIA', 'PAGINASNACAT', 'PÁGINASNACAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
Estes argumentos foron omitidos.",
'post-expand-template-argument-category' => 'Páxinas que conteñen argumentos de modelo omitidos',
'parser-template-loop-warning' => 'Detectouse un modelo en bucle: [[$1]]',
-'parser-template-recursion-depth-warning' => 'Excedeuse o límite da profundidade do recurso do modelo ($1)',
+'parser-template-recursion-depth-warning' => 'Excedeuse o límite de profundidade de recursión do modelo ($1)',
'language-converter-depth-warning' => 'Excedeuse o límite de profundidade do convertedor de lingua ($1)',
'node-count-exceeded-category' => 'Páxinas nas que se supera o número de nodos',
'node-count-exceeded-warning' => 'Páxina que supera o número de nodos',
'expansion-depth-exceeded-category' => 'Páxinas nas que se supera a profundidade de expansión',
'expansion-depth-exceeded-warning' => 'Páxina que supera a profundidade de expansión',
+'parser-unstrip-loop-warning' => 'Detectouse un bucle inamovible',
+'parser-unstrip-recursion-limit' => 'Excedeuse o límite de recursión inamovible ($1)',
# "Undo" feature
'undo-success' => 'A edición pódese desfacer.
# Diffs
'history-title' => 'Historial de revisións de "$1"',
+'difference-title' => 'Diferenzas entre revisións de "$1"',
+'difference-title-multipage' => 'Diferenzas entre as páxinas "$1" e "$2"',
'difference-multipage' => '(Diferenzas entre páxinas)',
'lineno' => 'Liña $1:',
'compareselectedversions' => 'Comparar as versións seleccionadas',
'notextmatches' => 'Non se atopou o texto en ningunha páxina',
'prevn' => '{{PLURAL:$1|$1}} previas',
'nextn' => '{{PLURAL:$1|$1}} seguintes',
-'prevn-title' => '$1 {{PLURAL:$1|resultado previo|resultados previos}}',
-'nextn-title' => '$1 {{PLURAL:$1|resultado seguinte|resultados seguintes}}',
+'prevn-title' => '{{PLURAL:$1|O resultado anterior|Os anteriores $1 resultados}}',
+'nextn-title' => '{{PLURAL:$1|O seguinte resultado|Os seguintes $1 resultados}}',
'shown-title' => 'Mostrar $1 {{PLURAL:$1|resultado|resultados}} por páxina',
'viewprevnext' => 'Ver as ($1 {{int:pipe-separator}} $2) ($3)',
'searchmenu-legend' => 'Opcións de busca',
'nchanges' => '$1 {{PLURAL:$1|cambio|cambios}}',
'recentchanges' => 'Cambios recentes',
'recentchanges-legend' => 'Opcións dos cambios',
-'recentchangestext' => 'Nesta páxina pode seguir os cambios máis recentes no wiki.',
+'recentchanges-summary' => 'Siga, nesta páxina, as modificacións máis recentes no wiki.',
'recentchanges-feed-description' => 'Nesta fonte de novas pode seguir os cambios máis recentes no wiki.',
'recentchanges-label-newpage' => 'Esta edición creou unha nova páxina',
'recentchanges-label-minor' => 'Esta é unha edición pequena',
'backend-fail-writetemp' => 'Non se puido escribir no ficheiro temporal.',
'backend-fail-closetemp' => 'Non se puido pechar o ficheiro temporal.',
'backend-fail-read' => 'Non se puido ler o ficheiro "$1".',
-'backend-fail-create' => 'Non se puido crear o ficheiro "$1".',
-'backend-fail-maxsize' => 'Non se puido crear o ficheiro "$1" porque {{PLURAL:$2|é de máis de $2 byte|supera os $2 bytes}}.',
+'backend-fail-create' => 'Non se puido escribir o ficheiro "$1".',
+'backend-fail-maxsize' => 'Non se puido escribir o ficheiro "$1" porque {{PLURAL:$2|é de máis de $2 byte|supera os $2 bytes}}.',
'backend-fail-readonly' => 'Nestes intres, o sistema de almacenamento "$1" está en modo de só lectura. A razón dada é: "$2"',
'backend-fail-synced' => 'O ficheiro "$1" está nun estado inconsistente dentro do sistema de almacenamento interno',
'backend-fail-connect' => 'Non se puido conectar co sistema de almacenamento "$1".',
'backend-fail-internal' => 'Houbo un erro descoñecido no sistema de almacenamento "$1".',
'backend-fail-contenttype' => 'Non se puido determinar o tipo de contido do ficheiro a almacenar en "$1".',
'backend-fail-batchsize' => 'O sistema de almacenamento recibiu un feixe de $1 {{PLURAL:$1|operación|operacións}} de ficheiro; o límite está en $2 {{PLURAL:$2|operación|operacións}}.',
+'backend-fail-usable' => 'Non se puido escribir o ficheiro "$1" debido a que os permisos son insuficientes ou faltan os directorios/contenedores.',
# File journal errors
'filejournal-fail-dbconnect' => 'Non se pode conectar coa base de datos do rexistro do sistema de almacenamento "$1".',
'http-curl-error' => 'Ocorreu un erro ao acceder ao URL: $1',
'http-host-unreachable' => 'Non se puido acceder ao URL.',
'http-bad-status' => 'Houbo un problema durante a solicitude HTTP: $1 $2',
-'http-truncated-body' => 'O corpo de solicitude recibiuse parcialmente.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Non se logrou acceder a ese URL',
$fallback = 'de';
$specialPageAliases = array(
- 'Allmessages' => array( 'Alli Nochrichte' ),
- 'Allpages' => array( 'Alli Syte' ),
- 'Ancientpages' => array( 'Veralteti Syte' ),
+ 'Allmessages' => array( 'Alli_Nochrichte' ),
+ 'Allpages' => array( 'Alli_Syte' ),
+ 'Ancientpages' => array( 'Veralteti_Syte' ),
+ 'Badtitle' => array( 'Nit-gültige_Sytename' ),
'Blankpage' => array( 'Läärsyte' ),
'Block' => array( 'Sperre' ),
'Blockme' => array( 'Proxy-Sperre' ),
'Booksources' => array( 'ISBN-Suech' ),
- 'BrokenRedirects' => array( 'Kaputti Wyterlaitige' ),
+ 'BrokenRedirects' => array( 'Kaputti_Wyterlaitige' ),
'Categories' => array( 'Kategorie' ),
- 'ChangePassword' => array( 'Passwort ändre' ),
- 'Confirmemail' => array( 'E-Mail bstetige' ),
+ 'ChangeEmail' => array( 'E-Mai-Adräss_ändere' ),
+ 'ChangePassword' => array( 'Passwort_ändre' ),
+ 'ComparePages' => array( 'Syte_verglyyche' ),
+ 'Confirmemail' => array( 'E-Mail_bstetige' ),
'Contributions' => array( 'Byytreeg' ),
- 'CreateAccount' => array( 'Benutzerchonto aaleege' ),
+ 'CreateAccount' => array( 'Benutzerchonto_aaleege' ),
'Deadendpages' => array( 'Sackgassesyte' ),
- 'DeletedContributions' => array( 'Gleschti Byytreeg' ),
+ 'DeletedContributions' => array( 'Gleschti_Byytreeg' ),
'Disambiguations' => array( 'Begriffschlärigsverwyys' ),
- 'DoubleRedirects' => array( 'Doppleti Wyterlaitige' ),
+ 'DoubleRedirects' => array( 'Doppleti_Wyterlaitige' ),
+ 'EditWatchlist' => array( 'Bearbeitigslischt_bearbeite' ),
'Emailuser' => array( 'E-Mail' ),
'Export' => array( 'Exportiere' ),
- 'Fewestrevisions' => array( 'Syte wo am wenigschte bearbeitet sin' ),
+ 'Fewestrevisions' => array( 'Syte_wo_am_wenigschte_bearbeitet_sin' ),
'FileDuplicateSearch' => array( 'Datei-Duplikat-Suech' ),
'Filepath' => array( 'Dateipfad' ),
'Import' => array( 'Importiere' ),
- 'Invalidateemail' => array( 'E-Mail nit bstetige' ),
- 'BlockList' => array( 'Gsperrti IP' ),
- 'LinkSearch' => array( 'Suech no Gleicher' ),
+ 'Invalidateemail' => array( 'E-Mail_nit_bstetige' ),
+ 'BlockList' => array( 'Gsperrti_IP' ),
+ 'LinkSearch' => array( 'Suech_no_Links' ),
'Listadmins' => array( 'Ammanne' ),
'Listbots' => array( 'Bötli' ),
'Listfiles' => array( 'Dateie' ),
'Listgrouprights' => array( 'Grupperächt' ),
'Listredirects' => array( 'Wyterleitige' ),
'Listusers' => array( 'Benutzerlischte' ),
- 'Lockdb' => array( 'Datebank sperre' ),
+ 'Lockdb' => array( 'Datebank_sperre' ),
'Log' => array( 'Logbuech' ),
- 'Lonelypages' => array( 'Verwaisti Syte' ),
- 'Longpages' => array( 'Langi Syte' ),
- 'MergeHistory' => array( 'Versionsgschichte zämefiere' ),
+ 'Lonelypages' => array( 'Verwaisti_Syte' ),
+ 'Longpages' => array( 'Langi_Syte' ),
+ 'MergeHistory' => array( 'Versionsgschichte_zämefiere' ),
'MIMEsearch' => array( 'MIME-Suech' ),
- 'Mostcategories' => array( 'Syte wo am meischte kategorisiert sin' ),
- 'Mostimages' => array( 'Dateie wo am meischte brucht wäre' ),
- 'Mostlinked' => array( 'Syte wo am meischte vergleicht sin' ),
- 'Mostlinkedcategories' => array( 'Kategorie wo am meischte brucht wäre' ),
- 'Mostlinkedtemplates' => array( 'Vorlage wo am meischte brucht wäre' ),
- 'Mostrevisions' => array( 'Syte wo am meischte bearbeitet sin' ),
+ 'Mostcategories' => array( 'Syte_wo_am_meischte_kategorisiert_sin' ),
+ 'Mostimages' => array( 'Dateie_wo_am_meischte_brucht_wäre' ),
+ 'Mostlinked' => array( 'Syte_wo_am_meischte_druff_verlinkt_isch' ),
+ 'Mostlinkedcategories' => array( 'Kategorie_wo_am_meischte_brucht_wäre' ),
+ 'Mostlinkedtemplates' => array( 'Vorlage_wo_am_meischte_brucht_wäre' ),
+ 'Mostrevisions' => array( 'Syte_wo_am_meischte_bearbeitet_sin' ),
'Movepage' => array( 'Verschiebe' ),
- 'Mycontributions' => array( 'Myyni Byytreeg' ),
- 'Mypage' => array( 'Myyni Benutzersyte' ),
- 'Mytalk' => array( 'Myyni Diskussionssyte' ),
- 'Newimages' => array( 'Neji Dateie' ),
- 'Newpages' => array( 'Neji Syte' ),
- 'Popularpages' => array( 'Beliebteschti Syte' ),
+ 'Mycontributions' => array( 'Myyni_Byytreeg' ),
+ 'Mypage' => array( 'Myyni_Benutzersyte' ),
+ 'Mytalk' => array( 'Myyni_Diskussionssyte' ),
+ 'Myuploads' => array( 'Dateie_wonni_uffeglade_han' ),
+ 'Newimages' => array( 'Neji_Dateie' ),
+ 'Newpages' => array( 'Neji_Syte' ),
+ 'PasswordReset' => array( 'Passwort_zruggsetze' ),
+ 'PermanentLink' => array( 'Permalink' ),
+ 'Popularpages' => array( 'Beliebteschti_Syte' ),
'Preferences' => array( 'Ystellige' ),
'Prefixindex' => array( 'Vorsilbeverzeichnis' ),
- 'Protectedpages' => array( 'Gschitzti Syte' ),
- 'Protectedtitles' => array( 'Gsperrti Titel' ),
- 'Randompage' => array( 'Zuefelligi Syte' ),
- 'Randomredirect' => array( 'Zuefelligi Wyterleitig' ),
- 'Recentchanges' => array( 'Letschti Änderige' ),
- 'Recentchangeslinked' => array( 'Änderige an vergleichte Syte' ),
+ 'Protectedpages' => array( 'Gschitzti_Syte' ),
+ 'Protectedtitles' => array( 'Gsperrti_Titel' ),
+ 'Randompage' => array( 'Zuefelligi_Syte' ),
+ 'Randomredirect' => array( 'Zuefelligi_Wyterleitig' ),
+ 'Recentchanges' => array( 'Letschti_Änderige' ),
+ 'Recentchangeslinked' => array( 'Änderige_an_verlinkte_Syte' ),
'Revisiondelete' => array( 'Versionsleschig' ),
+ 'RevisionMove' => array( 'Version_verschiebe' ),
'Search' => array( 'Suech' ),
- 'Shortpages' => array( 'Churzi Syte' ),
+ 'Shortpages' => array( 'Churzi_Syte' ),
'Specialpages' => array( 'Spezialsyte' ),
'Statistics' => array( 'Statischtik' ),
- 'Uncategorizedcategories' => array( 'Kategorie wo nit kategorisiert sin' ),
- 'Uncategorizedimages' => array( 'Dateie wo nit kategorisiert sin' ),
- 'Uncategorizedpages' => array( 'Syte wo nit kategorisiert sin' ),
- 'Uncategorizedtemplates' => array( 'Vorlage wo nit kategorisiert sin' ),
+ 'Tags' => array( 'Markierige' ),
+ 'Unblock' => array( 'Freigee' ),
+ 'Uncategorizedcategories' => array( 'Kategorie_wo_nit_kategorisiert_sin' ),
+ 'Uncategorizedimages' => array( 'Dateie_wo_nit_kategorisiert_sin' ),
+ 'Uncategorizedpages' => array( 'Syte_wo_nit_kategorisiert_sin' ),
+ 'Uncategorizedtemplates' => array( 'Vorlage_wo_nit_kategorisiert_sin' ),
'Undelete' => array( 'Widerhärstelle' ),
- 'Unlockdb' => array( 'Sperrig vu dr Datebank ufhebe' ),
- 'Unusedcategories' => array( 'Kategorie wo nit brucht wäre' ),
- 'Unusedimages' => array( 'Dateie wo nit brucht wäre' ),
- 'Unusedtemplates' => array( 'Vorlage wo nit brucht wäre' ),
- 'Unwatchedpages' => array( 'Syte wu nit beobachtet wäre' ),
+ 'Unlockdb' => array( 'Sperrig_vu_dr_Datebank_ufhebe' ),
+ 'Unusedcategories' => array( 'Kategorie_wo_nit_brucht_wäre' ),
+ 'Unusedimages' => array( 'Dateie_wo_nit_brucht_wäre' ),
+ 'Unusedtemplates' => array( 'Vorlage_wo_nit_brucht_wäre' ),
+ 'Unwatchedpages' => array( 'Syte_wu_nit_beobachtet_wäre' ),
'Upload' => array( 'Uffelade' ),
'Userlogin' => array( 'Amälde' ),
'Userlogout' => array( 'Abmälde' ),
'Userrights' => array( 'Benutzerrächt' ),
- 'Wantedcategories' => array( 'Kategorie wo gwinscht sin' ),
- 'Wantedfiles' => array( 'Dateie wo fähle' ),
- 'Wantedpages' => array( 'Syte wo gwinscht sin' ),
- 'Wantedtemplates' => array( 'Vorlage wo fähle' ),
+ 'Wantedcategories' => array( 'Kategorie_wo_gwinscht_sin' ),
+ 'Wantedfiles' => array( 'Dateie_wo_fähle' ),
+ 'Wantedpages' => array( 'Syte_wo_gwinscht_sin' ),
+ 'Wantedtemplates' => array( 'Vorlage_wo_fähle' ),
'Watchlist' => array( 'Beobachtigslischte' ),
- 'Whatlinkshere' => array( 'Was gleicht do ane?' ),
- 'Withoutinterwiki' => array( 'Ohni Interwiki' ),
+ 'Whatlinkshere' => array( 'Was_verwyyst_do_druff?' ),
+ 'Withoutinterwiki' => array( 'Ohni_Interwiki' ),
);
$magicWords = array(
'nchanges' => '$1 {{PLURAL:$1|Änderig|Änderige}}',
'recentchanges' => 'Letschti Änderige',
'recentchanges-legend' => 'Optione vu dr Aazeig',
-'recentchangestext' => 'Uff däre Syte chönne Si die letschte Änderige in däm Wiki aaluege.',
+'recentchanges-summary' => 'Uff däre Syte chönne Si die letschte Änderige in däm Wiki aaluege.',
'recentchanges-feed-description' => 'Di letschten Änderige vo {{SITENAME}} i däm Feed abonniere.',
'recentchanges-label-newpage' => 'Die Bearbeitig het e neji Syte aagleit',
'recentchanges-label-minor' => 'Des isch e chleini Änderig',
'nchanges' => '$1 {{PLURAL:$1|ફેરફાર|ફેરફારો}}',
'recentchanges' => 'તાજા ફેરફારો',
'recentchanges-legend' => 'હાલમાં થયેલા ફેરફારોના વિકલ્પ',
-'recentchangestext' => 'આ પાના દ્વારા વિકિમાં થયેલા તાજા ફેરફારો પર ધ્યાન રાખો.',
+'recentchanges-summary' => 'આ પાના દ્વારા વિકિમાં થયેલા તાજા ફેરફારો પર ધ્યાન રાખો.',
'recentchanges-feed-description' => 'આ ફીડ દ્વારા વિકિમાં થયેલા તાજા ફેરફારો પર ધ્યાન રાખો.',
'recentchanges-label-newpage' => 'આ ફેરફાર દ્વારા નવું પાનું નિર્મિત થયું',
'recentchanges-label-minor' => 'આ એક નાનો સુધારો છે.',
'localurl' => array( '0', 'כתובת יחסית:', 'LOCALURL:' ),
'localurle' => array( '0', 'כתובת יחסית מקודד:', 'LOCALURLE:' ),
'articlepath' => array( '0', 'נתיב הדפים', 'ARTICLEPATH' ),
- 'pageid' => array( '0', 'מזהה הדף', 'PAGEID' ),
'server' => array( '0', 'כתובת השרת', 'שרת', 'SERVER' ),
'servername' => array( '0', 'שם השרת', 'SERVERNAME' ),
'scriptpath' => array( '0', 'נתיב הקבצים', 'SCRIPTPATH' ),
'BrokenRedirects' => array( 'הפניות_לא_תקינות', 'הפניות_שבורות' ),
'Categories' => array( 'קטגוריות', 'רשימת_קטגוריות' ),
'ChangeEmail' => array( 'שינוי_דואר_אלקטרוני', 'שינוי_דואל' ),
- 'ChangePassword' => array( 'שינוי_סיסמה' ),
+ 'ChangePassword' => array( 'שינוי_סיסמה', 'איפוס_סיסמה' ),
'ComparePages' => array( 'השוואת_דפים' ),
'Confirmemail' => array( 'אימות_כתובת_דואר' ),
'Contributions' => array( 'תרומות', 'תרומות_המשתמש' ),
'nchanges' => '{{PLURAL:$1|שינוי אחד|$1 שינויים}}',
'recentchanges' => 'שינויים אחרונים',
'recentchanges-legend' => 'אפשרויות בשינויים האחרונים',
-'recentchangestext' => 'ניתן לעקוב אחרי השינויים האחרונים באתר בדף זה.',
+'recentchanges-summary' => 'ניתן לעקוב אחרי השינויים האחרונים באתר בדף זה.',
'recentchanges-feed-description' => 'ניתן לעקוב אחרי השינויים האחרונים באתר בדף זה.',
'recentchanges-label-newpage' => 'בעריכה זו נוצר דף חדש',
'recentchanges-label-minor' => 'זוהי עריכה משנית',
'backend-fail-writetemp' => 'לא הייתה אפשרות לכתוב אל הקובץ הזמני.',
'backend-fail-closetemp' => 'לא הייתה אפשרות לסגור את הקובץ הזמני.',
'backend-fail-read' => 'קריאת הקובץ $1 לא הצליחה',
-'backend-fail-create' => '×\99צ×\99רת הקובץ $1 לא הצליחה',
-'backend-fail-maxsize' => '×\99צ×\99רת הקובץ $1 לא הצליחה כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.',
+'backend-fail-create' => '×\9bת×\99×\91ת הקובץ $1 לא הצליחה',
+'backend-fail-maxsize' => '×\9bת×\99×\91ת הקובץ $1 לא הצליחה כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.',
'backend-fail-readonly' => 'מאגר האחסון לקבצים "$1" הוא כרגע במצב קריאה בלבד. הסיבה שניתנה לכך היא: "\'\'\'$2\'\'\'"',
'backend-fail-synced' => 'הקובץ "$1" נמצא במצב לא עקבי בתוך מאגרי אחסון הקבצים הפנימיים',
'backend-fail-connect' => 'לא ניתן היה להתחבר למאגר אחסון הקבצים הפנימי "$1".',
'backend-fail-internal' => 'אירעה שגיאה בלתי־ידועה במאגר אחסון הקבצים הפנימי "$1".',
'backend-fail-contenttype' => 'לא ניתן היה לקבוע את סוג התוכן של הקובץ לאחסון ב־"$1".',
'backend-fail-batchsize' => 'למאגר אחסון הקבצים הפנימי הועבר אוסף של {{PLURAL:$1|פעולת קובץ אחת|$1 פעולות קובץ}}; המגבלה היא {{PLURAL:$2|פעולה אחת|$2 פעולות}}.',
+'backend-fail-usable' => 'כתיבת הקובץ $1 לא הצליחה כיוון שההרשאות אינן מספיקות או כיוון שהספריות/המכלים חסרים.',
# File journal errors
'filejournal-fail-dbconnect' => 'לא ניתן היה להתחבר לבסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי "$1".',
'http-curl-error' => 'שגיאה בקבלת כתובת ה־URL: $1',
'http-host-unreachable' => 'לא ניתן להגיע לכתובת ה־URL.',
'http-bad-status' => 'הייתה בעיה בשליחת בקשת ה־HTTP: $1 $2',
-'http-truncated-body' => 'גוף הבקשה התקבל רק באופן חלקי.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'לא ניתן להגיע ל־URL',
'watcherrortext' => 'אירעה שגיאה בעת שינוי הגדרות רשימת המעקב של "$1".',
'enotif_mailer' => 'הודעות {{SITENAME}}',
-'enotif_reset' => '×\9cס×\9e×\9f ×\90ת כל הדפים כאילו נצפו',
+'enotif_reset' => 'ס×\99×\9e×\95×\9f כל הדפים כאילו נצפו',
'enotif_newpagetext' => 'זהו דף חדש.',
'enotif_impersonal_salutation' => 'משתמש של {{SITENAME}}',
'changed' => 'שונה',
NS_CATEGORY_TALK => 'श्रेणी_वार्ता',
);
+$specialPageAliases = array(
+ 'Activeusers' => array( 'सक्रिय_सदस्य' ),
+ 'Allmessages' => array( 'सभी_सन्देश', 'सभी_संदेश' ),
+ 'Allpages' => array( 'सभी_पृष्ठ', 'सभी_पन्ने' ),
+ 'Ancientpages' => array( 'पुराने_पृष्ठ', 'पुराने_पन्ने' ),
+ 'Badtitle' => array( 'खराब_शीर्षक' ),
+ 'Blankpage' => array( 'रिक्त_पृष्ठ', 'खाली_पृष्ठ' ),
+ 'Block' => array( 'अवरोधन', 'आइ_पी_अवरोधन', 'सदस्य_अवरोधन' ),
+ 'Blockme' => array( 'स्वावरोधन', 'स्व_अवरोधन', 'मुझे_रोकिये' ),
+ 'Booksources' => array( 'पुस्तक_स्रोत', 'किताब_स्रोत' ),
+ 'BrokenRedirects' => array( 'टूटे_पुनर्निर्देश', 'टूटे_अनुप्रेष' ),
+ 'Categories' => array( 'श्रेणियाँ' ),
+ 'ChangeEmail' => array( 'ईमेल_बदलें' ),
+ 'ChangePassword' => array( 'कूटशब्द_बदलें' ),
+ 'ComparePages' => array( 'पृष्ठ_तुलना' ),
+ 'Confirmemail' => array( 'ईमेल_पुष्टि', 'ईमेल_पुष्टि_करें' ),
+ 'Contributions' => array( 'योगदान' ),
+ 'CreateAccount' => array( 'खाता_बनाएँ', 'खाता_बनायें', 'खाता_खोलें' ),
+ 'Deadendpages' => array( 'बन्द_पृष्ठ', 'बन्द_पन्ने' ),
+ 'DeletedContributions' => array( 'हटाए_गए_योगदान', 'हटाये_गये_योगदान' ),
+ 'Disambiguations' => array( 'बहुविकल्पी_कड़ियाँ', 'बहुविकल्पित' ),
+ 'DoubleRedirects' => array( 'दुगुने_पुनर्निर्देश', 'दुगुने_अनुप्रेष' ),
+ 'EditWatchlist' => array( 'ध्यानसूची_सम्पादन', 'ध्यानसूची_संपादन', 'ध्यानसूची_सम्पादन_करें' ),
+ 'Emailuser' => array( 'ईमेल_करें', 'सदस्य_को_ईमेल_करें' ),
+ 'Export' => array( 'निर्यात' ),
+ 'Fewestrevisions' => array( 'न्यूनतम_अवतरण', 'कम_सम्पादित_पृष्ठ' ),
+ 'FileDuplicateSearch' => array( 'फ़ाइल_प्रति_खोज', 'फाइल_प्रति_खोज', 'संचिका_प्रति_खोज' ),
+ 'Filepath' => array( 'फ़ाइल_पथ', 'फाइल_पथ', 'संचिका_पथ' ),
+ 'Import' => array( 'आयात' ),
+ 'Invalidateemail' => array( 'अप्रमाणित_ईमेल', 'अमान्य_ईमेल', 'ईमेल_अमान्य_करें' ),
+ 'BlockList' => array( 'अवरोध_सूची', 'अवरोधित_सदस्य_सूची', 'अवरोधित_आइ_पी_सूची' ),
+ 'LinkSearch' => array( 'बाहरी_कड़ी_खोज' ),
+ 'Listadmins' => array( 'प्रबन्धक_सूची', 'प्रबंधक_सूची' ),
+ 'Listbots' => array( 'बॉट_सूची', 'बौट_सूची' ),
+ 'Listfiles' => array( 'फ़ाइल_सूची', 'फाइल_सूची' ),
+ 'Listgrouprights' => array( 'सदस्य_समूह_अधिकार', 'अधिकार_सूची' ),
+ 'Listredirects' => array( 'पुनर्निर्देश_सूची', 'अनुप्रेष_सूची' ),
+ 'Listusers' => array( 'सदस्य_सूची' ),
+ 'Lockdb' => array( 'डाटाबेस_पर_ताला_लगाएँ' ),
+ 'Log' => array( 'लॉग', 'लौग' ),
+ 'Lonelypages' => array( 'एकाकी_पृष्ठ', 'अकेले_पृष्ठ' ),
+ 'Longpages' => array( 'लम्बे_पृष्ठ', 'लंबे_पृष्ठ' ),
+ 'MergeHistory' => array( 'इतिहास_विलय' ),
+ 'MIMEsearch' => array( 'माइम_खोज' ),
+ 'Mostcategories' => array( 'सर्वाधिक_श्रेणीकृत', 'सर्वाधिक_श्रेणियाँ' ),
+ 'Mostimages' => array( 'सर्वाधिक_प्रयुक्त_फ़ाइलें', 'सर्वाधिक_प्रयुक्त_फाइलें' ),
+ 'Mostlinked' => array( 'सर्वाधिक_जुड़े_पृष्ठ' ),
+ 'Mostlinkedcategories' => array( 'सर्वाधिक_प्रयुक्त_श्रेणियाँ' ),
+ 'Mostlinkedtemplates' => array( 'सर्वाधिक_प्रयुक्त_साँचे' ),
+ 'Mostrevisions' => array( 'सर्वाधिक_अवतरण', 'अधिकतम_सम्पादित_पृष्ठ', 'अधिकतम_संपादित_पृष्ठ' ),
+ 'Movepage' => array( 'स्थानान्तरण', 'स्थानांतरण', 'नाम_बदलें' ),
+ 'Mycontributions' => array( 'मेरे_योगदान', 'मेरा_योगदान' ),
+ 'Mypage' => array( 'मेरा_पृष्ठ', 'मेरा_सदस्य_पृष्ठ' ),
+ 'Mytalk' => array( 'मेरी_वार्ता', 'मेरी_सदस्य_वार्ता' ),
+ 'Myuploads' => array( 'मेरे_अपलोड' ),
+ 'Newimages' => array( 'नई_फ़ाइलें', 'नई_फाइलें', 'नये_चित्र' ),
+ 'Newpages' => array( 'नए_पृष्ठ', 'नए_पन्ने', 'नये_पृष्ठ' ),
+ 'PasswordReset' => array( 'कूटशब्द_पुनर्स्थापन' ),
+ 'PermanentLink' => array( 'स्थाई_कड़ी', 'स्थायी_कड़ी' ),
+ 'Preferences' => array( 'वरीयताएँ' ),
+ 'Prefixindex' => array( 'उपसर्ग_अनुसार_पृष्ठ', 'उपसर्ग_खोज', 'उपसर्ग_सूचकांक' ),
+ 'Protectedpages' => array( 'सुरक्षित_पृष्ठ' ),
+ 'Protectedtitles' => array( 'सुरक्षित_शीर्षक' ),
+ 'Search' => array( 'खोज', 'खोजें' ),
+ 'Shortpages' => array( 'छोटे_पृष्ठ', 'छोटे_पन्ने' ),
+ 'Specialpages' => array( 'विशेष_पृष्ठ', 'विशेष_पन्ने' ),
+ 'Tags' => array( 'टैग', 'चिप्पियाँ' ),
+ 'Unblock' => array( 'अवरोध_हटाएँ', 'अवरोध_हटायें' ),
+ 'Uncategorizedcategories' => array( 'श्रेणीहीन_श्रेणियाँ' ),
+ 'Uncategorizedimages' => array( 'श्रेणीहीन_फ़ाइलें', 'श्रेणीहीन_फाइलें' ),
+ 'Uncategorizedpages' => array( 'श्रेणीहीन_पृष्ठ', 'श्रेणीहीन_पन्ने' ),
+ 'Uncategorizedtemplates' => array( 'श्रेणीहीन_साँचे' ),
+ 'Undelete' => array( 'पुनर्स्थापन' ),
+ 'Unlockdb' => array( 'डाटाबेस_से_ताला_हटाएँ' ),
+ 'Unusedcategories' => array( 'अप्रयुक्त_श्रेणियाँ' ),
+ 'Unusedimages' => array( 'अप्रयुक्त_फ़ाइलें', 'अप्रयुक्त_फाइलें' ),
+ 'Unusedtemplates' => array( 'अप्रयुक्त_साँचे' ),
+ 'Upload' => array( 'अपलोड' ),
+ 'Userlogin' => array( 'लॉगिन', 'लौगिन', 'सत्रारम्भ', 'सत्रारंभ' ),
+ 'Userlogout' => array( 'सत्रांत', 'लॉग_आउट', 'लौग_आउट' ),
+ 'Userrights' => array( 'सदस्य_अधिकार' ),
+ 'Version' => array( 'संस्करण', 'वर्ज़न', 'वर्जन' ),
+ 'Wantedcategories' => array( 'वांछित_श्रेणियाँ' ),
+ 'Wantedfiles' => array( 'वांछित_फ़ाइलें', 'वांछित_फाइलें' ),
+ 'Wantedpages' => array( 'वांछित_पृष्ठ', 'वांछित_पन्ने' ),
+ 'Wantedtemplates' => array( 'वांछित_साँचे' ),
+ 'Watchlist' => array( 'ध्यानसूची' ),
+ 'Whatlinkshere' => array( 'कड़ियाँ', 'यहाँ_की_कड़ियाँ', 'यहाँ_क्या_जुड़ता_है' ),
+ 'Withoutinterwiki' => array( 'अन्तरविकि_रहित', 'अंतरविकि_रहित' ),
+);
+
$digitTransformTable = array(
'0' => '०', # ०
'1' => '१', # १
'nchanges' => '$1 {{PLURAL:$1|बदलाव}}',
'recentchanges' => 'हाल में हुए बदलाव',
'recentchanges-legend' => 'हाल के परिवर्तन संबंधी विकल्प',
-'recentchangestext' => 'इस विकि पर हाल में हुए बदलाव इस पृष्ठ पर देखे जा सकते हैं।',
+'recentchanges-summary' => 'इस विकिपर हाल में हुए बदलाव इस पन्ने पर देखें जा सकतें हैं।',
'recentchanges-feed-description' => 'इस विकि पर हाल में हुए बदलाव इस फ़ीड में देखे जा सकते हैं।',
'recentchanges-label-newpage' => 'इस संपादन से नया पृष्ठ बना',
'recentchanges-label-minor' => 'यह एक छोटा सम्पादन है',
'whatlinkshere-prev' => '{{PLURAL:$1|पिछला|पिछले $1}}',
'whatlinkshere-next' => '{{PLURAL:$1|अगला|अगले $1}}',
'whatlinkshere-links' => '← कड़ियाँ',
-'whatlinkshere-hideredirs' => '$1 à¤\85नà¥\81पà¥\8dरà¥\87षितà¥\87à¤\82',
+'whatlinkshere-hideredirs' => '$1 पà¥\81नरà¥\8dनिरà¥\8dदà¥\87श',
'whatlinkshere-hidetrans' => '$1 ट्रान्स्क्ल्युजन्स',
-'whatlinkshere-hidelinks' => '$1 à¤\95ड़ियाà¤\82',
-'whatlinkshere-hideimages' => '$1 à¤\9aितà¥\8dर à¤\95ड़ियाà¤\82',
+'whatlinkshere-hidelinks' => '$1 à¤\95ड़ियाà¤\81',
+'whatlinkshere-hideimages' => '$1 à¤\9aितà¥\8dर à¤\95ड़ियाà¤\81',
'whatlinkshere-filters' => 'छन्ने',
# Block/unblock
'move-subpages' => 'उप पृष्ठ भी ले जाएँ ($1 तक)',
'move-talk-subpages' => 'वार्ता पृष्ठ के उप पृष्ठ भी ले जाएँ ($1 तक)',
'movepage-page-exists' => '$1 पृष्ठ पहले से अस्तित्वमें हैं और उसपर अपनेआप पुनर्लेखन नहीं कर सकतें।',
-'movepage-page-moved' => '$1 यह पà¥\83षà¥\8dठ$2 à¤\87स नामपर सà¥\8dथानाà¤\82तरित à¤\95र दिया à¤\97या।',
-'movepage-page-unmoved' => '$1 यह पà¥\83षà¥\8dठ$2 à¤\87स नामपर सà¥\8dथानाà¤\82तरित नहà¥\80à¤\82 à¤\95र पायà¥\87à¤\82।',
-'movepage-max-pages' => 'ज्यादासे ज्यादा $1 पृष्ठ स्थानांतरित कर {{PLURAL:$1|दिया गया है|दिये गये हैं}}, अब और पृष्ठ अपनेआप स्थानांतरित नहीं होंगे।',
-'movelogpage' => 'सà¥\8dथानानà¥\8dतरण सà¥\82à¤\9aà¥\80',
-'movelogpagetext' => 'नाम बदलà¥\87 à¤\97यà¥\87 लà¥\87à¤\96à¥\8bà¤\82à¤\95à¥\80 सà¥\82à¤\9aà¥\80 नà¥\80à¤\9aà¥\87 दà¥\80 à¤\97à¤\88 हà¥\88à¤\82।',
+'movepage-page-moved' => '$1 पà¥\83षà¥\8dठ$2 नाम पर सà¥\8dथानाà¤\82तरित à¤\95र दिया à¤\97या हà¥\88।',
+'movepage-page-unmoved' => '$1 पà¥\83षà¥\8dठ$2 नाम पर सà¥\8dथानाà¤\82तरित नहà¥\80à¤\82 à¤\95िया à¤\9cा सà¤\95ा।',
+'movepage-max-pages' => '$1 की अधिकतम सीमा तक पृष्ठ स्थानांतरित कर {{PLURAL:$1|दिया गया है|दिये गये हैं}}, अब और पृष्ठ अपने-आप स्थानांतरित नहीं होंगे।',
+'movelogpage' => 'सà¥\8dथानानà¥\8dतरण लà¥\89à¤\97',
+'movelogpagetext' => 'नà¥\80à¤\9aà¥\87 सà¤à¥\80 सà¥\8dथानानà¥\8dतरणà¥\8bà¤\82 à¤\95à¥\80 सà¥\82à¤\9aà¥\80 दà¥\80 à¤\97à¤\88 हà¥\88।',
'movesubpage' => '{{PLURAL:$1|उप पृष्ठ|उप पृष्ठ}}',
'movesubpagetext' => 'नीचे $1 {{PLURAL:$1|पृष्ठ दिखाया गया है, जो इस पृष्ठ का उप पृष्ठ है|पृष्ठ दिखाया गया है, जो इस पृष्ठ के उप पृष्ठ हैं}}।',
'movenosubpage' => 'इस पृष्ठ के कोई उपपृष्ठ नहीं हैं।',
'movereason' => 'कारण:',
'revertmove' => 'पुराने अवतरण पर ले जाएं',
-'delete_and_move' => 'हà¤\9fाया à¤\94र नाम बदला',
+'delete_and_move' => 'हà¤\9fाà¤\8fà¤\81 à¤\94र नाम बदलà¥\87à¤\82',
'delete_and_move_text' => '==हटाने की जरूरत==
लक्ष्य पृष्ठ "[[:$1]]" पहले से अस्तित्वमें हैं।
नाम बदलने के लिये क्या आप इसे हटाना चाहतें हैं?',
'nchanges' => '$1 {{PLURAL:$1|badlao|badlao}}',
'recentchanges' => 'Nawaa badlao',
'recentchanges-legend' => 'Nawaa badlao options',
-'recentchangestext' => 'Wiki me ii panna ke nawaa badlao pe dhyan rakho.',
+'recentchanges-summary' => 'Wiki me ii panna ke nawaa badlao pe dhyan rakho.',
'recentchanges-feed-description' => 'Abhi haali me bhae ii wiki ke feed me ke track karo.',
'recentchanges-label-newpage' => 'Ii badlao ek nawaa panna banais hae',
'recentchanges-label-minor' => 'Ii ek chhota badlao hae',
'updated' => '(Ažurirano)',
'note' => "'''Napomena:'''",
'previewnote' => "'''Ne zaboravite da je ovo samo pregled kako će stranica izgledati i da stranica još nije snimljena!'''",
+'continue-editing' => 'Nastavi uređivati',
'previewconflict' => 'Ovaj pregled odražava stanje u gornjem polju za unos koje će biti sačuvano
ako pritisnete "Sačuvaj stranicu".',
'session_fail_preview' => "'''Ispričavamo se! Nismo mogli obraditi Vašu izmjenu zbog gubitka podataka o prijavi.
'nchanges' => '$1 {{PLURAL:$1|změna|změnje|změny|změnow}}',
'recentchanges' => 'Aktualne změny',
'recentchanges-legend' => 'Opcije aktualnych změnow',
-'recentchangestext' => 'Na tutej stronje móžeš najaktualniše změny w {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.',
+'recentchanges-summary' => 'Na tutej stronje móžeš najaktualniše změny w {{GRAMMAR:lokatiw|{{SITENAME}}}} wobkedźbować.',
'recentchanges-feed-description' => 'Slěduj najaktualniše změny {{GRAMMAR:genitiw|{{SITENAME}}}} w tutym kanalu.',
'recentchanges-label-newpage' => 'Tuta změna je nowu stronu wutworiła',
'recentchanges-label-minor' => 'To je snadna změna',
'http-curl-error' => 'Zmylk při wołanju URL: $1',
'http-host-unreachable' => 'URL njeda so docpěć.',
'http-bad-status' => 'Problem je za HTTP-naprašowanje wustupił: $1 $2',
-'http-truncated-body' => 'Wobsah naprašowanja je so jenož zdźěla přijał.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'URL docpějomny njeje.',
'nchanges' => '{{PLURAL:$1|egy|$1}} változtatás',
'recentchanges' => 'Friss változtatások',
'recentchanges-legend' => 'A friss változások beállításai',
-'recentchangestext' => 'Ezen a lapon a wikiben történt legutóbbi változásokat lehet nyomonkövetni.',
+'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',
'recentchanges-label-minor' => 'Ez egy apró szerkesztés',
'exif-subsectimedigitized' => 'DateTimeDigitized almásodpercek',
'exif-exposuretime' => 'Expozíciós idő',
'exif-exposuretime-format' => '$1 mp. ($2)',
-'exif-fnumber' => 'F szám',
+'exif-fnumber' => 'Rekesznyílás',
'exif-exposureprogram' => 'Expozíciós program',
'exif-spectralsensitivity' => 'Színkép érzékenysége',
-'exif-isospeedratings' => 'ISO érzékenység minősítése',
+'exif-isospeedratings' => 'ISO érzékenység értéke',
'exif-shutterspeedvalue' => 'APEX zársebesség',
'exif-aperturevalue' => 'APEX lencsenyílás',
'exif-brightnessvalue' => 'APEX fényerő',
-'exif-exposurebiasvalue' => 'Expozíciós dőltség',
-'exif-maxaperturevalue' => 'Legnagyobb földi lencsenyílás',
+'exif-exposurebiasvalue' => 'Expozíciós eltolás',
+'exif-maxaperturevalue' => 'Legnagyobb rekesznyílás',
'exif-subjectdistance' => 'Tárgy távolsága',
'exif-meteringmode' => 'Fénymérési mód',
'exif-lightsource' => 'Fényforrás',
'exif-flash-return-2' => 'strobe return light nincs érzékelve',
'exif-flash-return-3' => 'strobe return light érzékelve',
'exif-flash-mode-1' => 'Kötelező vaku',
-'exif-flash-mode-2' => 'Kötelező vakuelnyomás',
+'exif-flash-mode-2' => 'Kötelező vakukikapcsolás',
'exif-flash-mode-3' => 'automatikus mód',
'exif-flash-function-1' => 'Nincs vakufunkció',
'exif-flash-redeye-1' => 'Vörös szem eltávolító mód',
# Associated actions - in the sentence "You do not have permission to X"
'action-edit' => 'խմբագրել այս էջը',
+'action-upload' => 'Բեռնել այս ֆայլը',
+'action-upload_by_url' => 'Բեռնել այս ֆայլը URL-ից',
'action-delete' => 'Ջնջել այս էջը',
'action-deleterevision' => 'Ջնջել այս փոփոխությունը',
'action-deletedhistory' => 'Դիտել այս էջի ջնջված պատմությունը',
'nchanges' => '$1 {{PLURAL:$1|փոփոխություն|փոփոխություն}}',
'recentchanges' => 'Վերջին փոփոխություններ',
'recentchanges-legend' => 'Վերջին փոփոխությունների նախընտրություններ',
-'recentchangestext' => 'Հետևեք վիքիում կատարված վերջին փոփոխություններին այս էջում։',
+'recentchanges-summary' => 'Հետևեք վիքիում կատարված վերջին փոփոխություններին այս էջում։',
'recentchanges-feed-description' => 'Հետևեք վիքիում կատարված վերջին փոփոխություններին այս սնուցման մեջ։',
'recentchanges-label-newpage' => 'Այս խմբագրմամբ ստեղծվել է նոր էջ',
'recentchanges-label-minor' => 'Սա չնչին խմբագրում է',
'nchanges' => '$1 {{PLURAL:$1|modification|modificationes}}',
'recentchanges' => 'Modificationes recente',
'recentchanges-legend' => 'Optiones del modificationes recente',
-'recentchangestext' => 'Seque le plus recente modificationes a {{SITENAME}} in iste pagina.',
+'recentchanges-summary' => 'Seque le plus recente modificationes a {{SITENAME}} in iste pagina.',
'recentchanges-feed-description' => 'Seque le modificationes le plus recente al wiki in iste syndication.',
'recentchanges-label-newpage' => 'Iste modification creava un nove pagina',
'recentchanges-label-minor' => 'Isto es un modification minor',
'backend-fail-writetemp' => 'Non poteva scriber in file temporari.',
'backend-fail-closetemp' => 'Non poteva clauder file temporari.',
'backend-fail-read' => 'Non poteva leger le file $1',
-'backend-fail-create' => 'Non poteva crear le file $1',
-'backend-fail-maxsize' => 'Impossibile crear le file $1 perque illo es plus grande que {{PLURAL:$2|$2 byte|$2 bytes}}.',
+'backend-fail-create' => 'Non poteva crear le file $1.',
+'backend-fail-maxsize' => 'Impossibile scriber le file $1 perque illo es plus grande que {{PLURAL:$2|un byte|$2 bytes}}.',
'backend-fail-readonly' => 'Le systema de immagazinage "$1" es actualmente in lectura sol. Le sequente motivo esseva specificate: "$2"',
'backend-fail-synced' => 'Le file "$1" es in un stato inconsistente inter le systemas interne de immagazinage',
'backend-fail-connect' => 'Impossibile connecter al systema de immagazinage "$1".',
'backend-fail-internal' => 'Un error incognite occurreva in le systema de immagazinage "$1".',
'backend-fail-contenttype' => 'Non poteva determinar le typo de contento del file a immagazinar in "$1".',
'backend-fail-batchsize' => 'Le systema de immagazinage ha recipite un lot de $1 {{PLURAL:$1|operation|operationes}} de file; le limite es $2 {{PLURAL:$2|operation|operationes}}.',
+'backend-fail-usable' => 'Non poteva scriber le file $1 a causa de permissiones insufficiente o directorios/contentores mancante.',
# File journal errors
'filejournal-fail-dbconnect' => 'Non poteva connecter al base de datos de jornal pro le systema de immagazinage "$1".',
'http-curl-error' => 'Error al obtener datos del URL: $1',
'http-host-unreachable' => 'Non poteva acceder al URL',
'http-bad-status' => 'Un problema occurreva durante le requesta HTTP: $1 $2',
-'http-truncated-body' => 'Le corpore del requesta ha essite solo partialmente recipite.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Non poteva acceder al URL',
'edit-no-change' => 'Suntingan diabaikan, karena Anda tidak melakukan perubahan atas teks.',
'edit-already-exists' => 'Tidak dapat membuat halaman baru
karena telah ada.',
+'defaultmessagetext' => 'Teks baku',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Peringatan: Halaman ini mengandung terlalu banyak panggilan fungsi parser.
# Diffs
'history-title' => 'Riwayat revisi dari "$1"',
+'difference-title' => 'Perbedaan antarrevisi "$1"',
+'difference-title-multipage' => 'Perbedaan antara halaman "$1" dan "$2"',
'difference-multipage' => '(Perbedaan antarhalaman)',
'lineno' => 'Baris $1:',
'compareselectedversions' => 'Bandingkan versi terpilih',
'nchanges' => '$1 {{PLURAL:$1|perubahan|perubahan}}',
'recentchanges' => 'Perubahan terbaru',
'recentchanges-legend' => 'Opsi perubahan terbaru',
-'recentchangestext' => "Temukan perubahan terbaru dalam wiki di halaman ini. Keterangan: (beda) = perubahan, (versi) = sejarah revisi, '''B''' = halaman baru, '''k''' = suntingan kecil, '''b''' = suntingan bot, (± ''bita'') = jumlah penambahan/pengurangan isi, → = suntingan bagian, ← = ringkasan otomatis.
+'recentchanges-summary' => "Temukan perubahan terbaru dalam wiki di halaman ini. Keterangan: (beda) = perubahan, (versi) = sejarah revisi, '''B''' = halaman baru, '''k''' = suntingan kecil, '''b''' = suntingan bot, (± ''bita'') = jumlah penambahan/pengurangan isi, → = suntingan bagian, ← = ringkasan otomatis.
----",
'recentchanges-feed-description' => 'Temukan perubahan terbaru dalam wiki di umpan ini.',
'recentchanges-label-newpage' => 'Suntingan ini membuat halaman baru',
* @author לערי ריינהארט
*/
+$namespaceNames = array(
+ NS_MEDIA => 'Midia',
+ NS_SPECIAL => 'Espesial',
+ NS_TALK => 'Tungtungan',
+ NS_USER => 'Agar-aramat',
+ NS_USER_TALK => 'Agar-aramat_tungtungan',
+ NS_PROJECT_TALK => '$1_tungtungan',
+ NS_FILE => 'Papeles',
+ NS_FILE_TALK => 'Papeles_tungtungan',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_tungtungan',
+ NS_TEMPLATE => 'Plantilia',
+ NS_TEMPLATE_TALK => 'Plantilia_tungtungan',
+ NS_HELP => 'Tulong',
+ NS_HELP_TALK => 'Tulong_tungtungan',
+ NS_CATEGORY => 'Kategoria',
+ NS_CATEGORY_TALK => 'Kategoria_tungtungan',
+);
+
$messages = array(
# User preference toggles
'tog-underline' => 'Pinag-ugisan ti silpo:',
'nchanges' => '$1 {{PLURAL:$1|sinukatan|dagiti sinukatan}}',
'recentchanges' => 'Kaudian a balbaliw',
'recentchanges-legend' => 'Pagpilian kadagiti kaudian a balbaliw',
-'recentchangestext' => 'Bantayan daytoy a panid dagiti kaudian a panakabalbaliw ti wiki.',
+'recentchanges-summary' => 'Bantayan iti daytoy a panid dagiti kauudian a panakabalbaliw ti wiki.',
'recentchanges-feed-description' => 'Siputen dagiti kakaudian a panamalbaliw iti wiki iti daytoy a pakan.',
'recentchanges-label-newpage' => 'Daytoy nga inurnos ket nakaaramid ti baro a panid',
'recentchanges-label-minor' => 'Bassit a panag-urnos laeng daytoy',
* @file
*
* @author Amire80
+ * @author Reedy
* @author Sapral Mikail
* @author Tagir
*/
'nchanges' => '$1 {{PLURAL:$1|хувцам|хувцамаш}}',
'recentchanges' => 'Керда хувцамаш',
'recentchanges-legend' => 'Керда хувцамий оттамаш',
-'recentchangestext' => 'КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да{{grammar:genitive|{{SITENAME}}}}.',
+'recentchanges-summary' => 'КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да{{grammar:genitive|{{SITENAME}}}}.',
'recentchanges-feed-description' => 'Укх ларамца тIехьара викихувцамашт теркам бе.',
'recentchanges-label-newpage' => 'Укх хувцамаца керда оагIув даь хиннад',
'recentchanges-label-minor' => 'ЗIамига хувцам я',
#Укх # тамагIалгаца дIадувлаш дола мугIанаш, оалам мо лоархаш да.
#МугIанаш яздaтакха каьда да
-#Каст-каста оаламаш укх мугIа лакхе дIаязаде. Из мугI ший долаш тайпара дита<pre>',
+#Каст-каста оаламаш укх мугIа лакхе дIаязаде. Из мугI ший долаш тайпара дита</pre>',
# Special:Tags
'tag-filter' => '[[Special:Tags|Йоазоний]] цIенаярг:',
'columns' => 'Dálkar',
'searchresultshead' => 'Leit',
'resultsperpage' => 'Niðurstöður á síðu',
-'stub-threshold' => 'Þröskuldur fyrir sniði <a href="#" class="stub">stubbatengla</a> (bæt):',
+'stub-threshold' => 'Þröskuldur fyrir <a href="#" class="stub">stubbatengla</a> (bæt):',
'stub-threshold-disabled' => 'Óvirkt',
'recentchangesdays' => 'Fjöldi daga sem nýlegar breytingar ná yfir:',
'recentchangesdays-max' => '(hámark $1 {{PLURAL:$1|dag|daga}})',
'nchanges' => '$1 {{PLURAL:$1|breyting|breytingar}}',
'recentchanges' => 'Nýlegar breytingar',
'recentchanges-legend' => 'Stillingar nýlegra breytinga',
-'recentchangestext' => 'Hér geturðu fylgst með nýjustu breytingunum.',
+'recentchanges-summary' => 'Hér geturðu fylgst með nýjustu breytingunum.',
'recentchanges-feed-description' => 'Hér er hægt að fylgjast með nýlegum breytingum á {{SITENAME}}.',
'recentchanges-label-newpage' => 'Þessi breyting skapaði nýja síðu',
'recentchanges-label-minor' => 'Þetta er minniháttar breyting',
'Booksources' => array( 'RicercaISBN' ),
'BrokenRedirects' => array( 'RedirectErrati' ),
'Categories' => array( 'Categorie' ),
+ 'ChangeEmail' => array( 'CambiaEmail' ),
'ChangePassword' => array( 'CambiaPassword' ),
'ComparePages' => array( 'ComparaPagine' ),
'Confirmemail' => array( 'ConfermaEMail' ),
- 'Contributions' => array( 'Contributi', 'ContributiUtente' ),
+ 'Contributions' => array( 'Contributi', 'ContributiUtente', 'Edit' ),
'CreateAccount' => array( 'CreaAccount' ),
'Deadendpages' => array( 'PagineSenzaUscita' ),
'DeletedContributions' => array( 'ContributiCancellati' ),
- 'Disambiguations' => array( 'Disambigua', 'Disambigue' ),
+ 'Disambiguations' => array( 'Disambigua' ),
'DoubleRedirects' => array( 'RedirectDoppi' ),
'EditWatchlist' => array( 'ModifcaListaSeguiti' ),
'Emailuser' => array( 'InviaEMail' ),
'Import' => array( 'Importa' ),
'Invalidateemail' => array( 'InvalidaEMail' ),
'BlockList' => array( 'IPBloccati', 'ElencoBlocchi', 'Blocchi' ),
- 'LinkSearch' => array( 'CercaCollegamenti' ),
- 'Listadmins' => array( 'Amministratori', 'ElencoAmministratori', 'Admin' ),
+ 'LinkSearch' => array( 'CercaCollegamenti', 'CercaLink' ),
+ 'Listadmins' => array( 'Amministratori', 'ElencoAmministratori', 'Admin', 'Sysop', 'Cricca' ),
'Listbots' => array( 'Bot', 'ElencoBot' ),
'Listfiles' => array( 'File', 'Immagini' ),
- 'Listgrouprights' => array( 'ElencoPermessiGruppi' ),
+ 'Listgrouprights' => array( 'ElencoPermessiGruppi', 'Privilegi' ),
'Listredirects' => array( 'Redirect', 'ElencoRedirect' ),
'Listusers' => array( 'Utenti', 'ElencoUtenti' ),
'Lockdb' => array( 'BloccaDB' ),
'Mycontributions' => array( 'MieiContributi' ),
'Mypage' => array( 'MiaPaginaUtente', 'MiaPagina' ),
'Mytalk' => array( 'MieDiscussioni' ),
- 'Myuploads' => array( 'MieiUpload' ),
+ 'Myuploads' => array( 'MieiUpload', 'MieiEdit' ),
'Newimages' => array( 'ImmaginiRecenti' ),
'Newpages' => array( 'PaginePiùRecenti' ),
'PasswordReset' => array( 'ReimpostaPassword' ),
+ 'PermanentLink' => array( 'LinkPermanente' ),
'Popularpages' => array( 'PaginePiùVisitate' ),
'Preferences' => array( 'Preferenze' ),
'Prefixindex' => array( 'Prefissi' ),
'Recentchanges' => array( 'UltimeModifiche' ),
'Recentchangeslinked' => array( 'ModificheCorrelate' ),
'Revisiondelete' => array( 'CancellaRevisione' ),
- 'Search' => array( 'Ricerca', 'Cerca' ),
+ 'Search' => array( 'Ricerca', 'Cerca', 'Trova' ),
'Shortpages' => array( 'PaginePiùCorte' ),
'Specialpages' => array( 'PagineSpeciali' ),
'Statistics' => array( 'Statistiche' ),
- 'Tags' => array( 'Etichette' ),
+ 'Tags' => array( 'Etichette', 'Tag' ),
'Unblock' => array( 'ElencoSblocchi', 'Sblocchi' ),
'Uncategorizedcategories' => array( 'CategorieSenzaCategorie' ),
'Uncategorizedimages' => array( 'ImmaginiSenzaCategorie' ),
'tog-externaleditor' => "Usa per default un editor di testi esterno (solo per utenti esperti, richiede l'uso di impostazioni particolari sul proprio computer. [//www.mediawiki.org/wiki/Manual:External_editors Ulteriori informazioni.])",
'tog-externaldiff' => "Usa per default un programma di diff esterno (solo per utenti esperti, richiede l'uso di impostazioni particolari sul proprio computer. [//www.mediawiki.org/wiki/Manual:External_editors Ulteriori informazioni.])",
'tog-showjumplinks' => 'Attiva i collegamenti accessibili "vai a"',
-'tog-uselivepreview' => "Attiva la funzione ''Live preview'' (anteprima in diretta - richiede JavaScript; sperimentale)",
+'tog-uselivepreview' => "Abilita la funzione ''Live preview'' (anteprima in diretta - richiede JavaScript; sperimentale)",
'tog-forceeditsummary' => 'Chiedi conferma se il campo oggetto è vuoto',
'tog-watchlisthideown' => 'Nascondi le mie modifiche negli osservati speciali',
'tog-watchlisthidebots' => 'Nascondi le modifiche dei bot negli osservati speciali',
'otherlanguages' => 'Altre lingue',
'redirectedfrom' => '(Reindirizzamento da <b>$1</b>)',
'redirectpagesub' => 'Pagina di reindirizzamento',
-'lastmodifiedat' => 'Ultima modifica per la pagina: $2, $1.',
+'lastmodifiedat' => "Questa pagina è stata modificata per l'ultima volta il $1 alle $2.",
'viewcount' => 'Questa pagina è stata letta {{PLURAL:$1|una volta|$1 volte}}.',
'protectedpage' => 'Pagina bloccata',
'jumpto' => 'Vai a:',
'summary-preview' => "Anteprima dell'oggetto:",
'subject-preview' => 'Anteprima oggetto/intestazione:',
'blockedtitle' => 'Utente bloccato.',
-'blockedtext' => "'''Questo nome utente o indirizzo IP sono stati bloccati.'''
+'blockedtext' => "'''Il tuo nome utente o indirizzo IP è stato bloccato.'''
Il blocco è stato imposto da $1. La motivazione del blocco è la seguente: ''$2''
'previewconflict' => 'L\'anteprima corrisponde al testo presente nella casella di modifica superiore e rappresenta la pagina come apparirà se si sceglie di premere "Salva la pagina" in questo momento.',
'session_fail_preview' => "'''Non è stato possibile elaborare la modifica perché sono andati persi i dati relativi alla sessione.
Riprovare.
-Se il problema persiste, si può provare a [[Special:UserLogout|scollegarsi]] ed effettuare un nuovo accesso.'''",
+Se il problema persiste, si può tentare di [[Special:UserLogout|scollegarsi]] ed effettuare un nuovo accesso.'''",
'session_fail_preview_html' => "'''Non è stato possibile elaborare la modifica perché sono andati persi i dati relativi alla sessione.'''
''Poiché in {{SITENAME}} è abilitato l'uso di HTML senza limitazioni, l'anteprima non viene visualizzata; si tratta di una misura di sicurezza contro gli attacchi JavaScript.''
# Diffs
'history-title' => 'Cronologia delle modifiche di "$1"',
-'difference-title' => 'Differenza tra le revisioni di " $1 "',
-'difference-title-multipage' => 'Differenza tra le pagine " $1 "e" $2 "',
+'difference-title' => 'Differenza tra le versioni di "$1"',
+'difference-title-multipage' => 'Differenza tra le pagine "$1" e "$2"',
'difference-multipage' => '(Differenze fra le pagine)',
'lineno' => 'Riga $1:',
'compareselectedversions' => 'Confronta le versioni selezionate',
'right-editusercssjs' => 'Modifica i file CSS e JS di altri utenti',
'right-editusercss' => 'Modifica i file CSS di altri utenti',
'right-edituserjs' => 'Modifica i file JS di altri utenti',
-'right-rollback' => "Annullamento rapido delle modifiche dell'ultimo utente che ha modificato una particolare pagina",
+'right-rollback' => "Annulla rapidamente le modifiche dell'ultimo utente che ha modificato una particolare pagina",
'right-markbotedits' => 'Segna le modifiche soggette a rollback come effettuate da bot',
'right-noratelimit' => 'Non soggetto al limite di azioni',
'right-import' => 'Importa pagine da altri wiki',
'action-suppressionlog' => 'visionare questo log privato',
'action-block' => 'bloccare questo utente in scrittura',
'action-protect' => 'modificare i livelli di protezione per questa pagina',
-'action-rollback' => "Annullamento rapido delle modifiche dell'ultimo utente che ha modificato una determinata pagina",
+'action-rollback' => "annullare rapidamente le modifiche dell'ultimo utente che ha modificato una determinata pagina",
'action-import' => "importare questa pagina da un'altra wiki",
'action-importupload' => 'importare questa pagina tramite upload da file',
'action-patrol' => 'segnare le modifiche degli altri utenti come verificate',
'nchanges' => '$1 {{PLURAL:$1|modifica|modifiche}}',
'recentchanges' => 'Ultime modifiche',
'recentchanges-legend' => 'Opzioni ultime modifiche',
-'recentchangestext' => 'Questa pagina presenta le modifiche più recenti ai contenuti del sito.',
+'recentchanges-summary' => 'Questa pagina presenta le modifiche più recenti ai contenuti del sito.',
'recentchanges-feed-description' => 'Questo feed riporta le modifiche più recenti ai contenuti del sito.',
'recentchanges-label-newpage' => 'Questa modifica ha creato una nuova pagina',
'recentchanges-label-minor' => 'Questa è una modifica minore',
'backend-fail-hashes' => 'Impossibile ottenere hash dei file per confronto.',
'backend-fail-notsame' => 'Esiste già un file non identico a $1 .',
'backend-fail-invalidpath' => '$1 non è un percorso di archiviazione valido.',
-'backend-fail-delete' => 'Impossibile eliminare il file $1 .',
+'backend-fail-delete' => 'Impossibile cancellare il file $1.',
'backend-fail-alreadyexists' => 'Il file $1 esiste già.',
'backend-fail-store' => 'Impossibilie memorizzare file $1 in $2 .',
'backend-fail-copy' => 'Impossibile copiare il file $1 in $2 .',
'backend-fail-writetemp' => 'Impossibile creare il file temporaneo.',
'backend-fail-closetemp' => 'Impossibile chiudere il file temporaneo.',
'backend-fail-read' => 'Impossibile leggere il file $1 .',
-'backend-fail-create' => 'Impossibile creare il file $1 .',
+'backend-fail-create' => 'Impossibile creare il file $1.',
'backend-fail-maxsize' => 'Impossibile creare il file $1 perché è più grande di {{PLURAL:$2|un|$2}} byte.',
'backend-fail-readonly' => 'Il backend "$1" è attualmente di sola lettura. La ragione indicata è: "$2"',
'backend-fail-synced' => 'Il file "$1" è in uno stato non coerente nei backend di memoria interna.',
'backend-fail-internal' => 'Si è verificato un errore sconosciuto nel backend di memoria "$1".',
'backend-fail-contenttype' => 'Impossibile determinare la tipologia del file da archiviare in "$1".',
'backend-fail-batchsize' => 'Il backend di memoria ha programmato una serie di $1 {{PLURAL:$1|operazione|operazioni}} su file; il limite è di $2 {{PLURAL:$2|operazione|operazioni}}.',
+'backend-fail-usable' => 'Impossibile scrivere il file $1 a causa di autorizzazione insufficienti o directory/recipienti mancanti.',
# File journal errors
'filejournal-fail-dbconnect' => 'Impossibile connettersi al database journal per l\'archiviazione back-end "$1".',
'http-curl-error' => "Errore durante il recupero dell'URL: $1",
'http-host-unreachable' => 'URL non raggiungibile.',
'http-bad-status' => "C'è stato un problema durante la richiesta HTTP: $1 $2",
-'http-truncated-body' => 'Il corpo della richiesta è stato ricevuto solo parzialmente.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'URL non raggiungibile',
'anonymous' => '{{PLURAL:$1|Utente anonimo|Utenti anonimi}} di {{SITENAME}}',
'siteuser' => '$1, utente di {{SITENAME}}',
'anonuser' => '$1, utente anonimo di {{SITENAME}}',
-'lastmodifiedatby' => "Questa pagina è stata modificata per l'ultima volta il $2, $1 da $3.",
+'lastmodifiedatby' => "Questa pagina è stata modificata per l'ultima volta il $1 alle $2 da $3.",
'othercontribs' => 'Il testo attuale è basato su contributi di $1.',
'others' => 'altri',
'siteusers' => '$1, {{PLURAL:$2|utente|utenti}} di {{SITENAME}}',
'Newimages' => array( '新着ファイル', '新しいファイルの一覧', '新着画像展示室' ),
'Newpages' => array( '新しいページ', '新規項目' ),
'PasswordReset' => array( 'パスワード再設定', 'パスワードの再設定', 'パスワードのリセット', 'パスワードリセット' ),
- 'PermanentLink' => array( '固定リンク' ),
+ 'PermanentLink' => array( '固定リンク', 'パーマリンク' ),
'Popularpages' => array( '人気ページ' ),
'Preferences' => array( '個人設定', 'オプション' ),
'Prefixindex' => array( '前方一致ページ一覧', '始点指定ページ一覧' ),
'Uncategorizedimages' => array( 'カテゴリ未導入のファイル' ),
'Uncategorizedpages' => array( 'カテゴリ未導入のページ' ),
'Uncategorizedtemplates' => array( 'カテゴリ未導入のテンプレート' ),
- 'Undelete' => array( '復帰' ),
+ 'Undelete' => array( '復å\85\83', '復帰' ),
'Unlockdb' => array( 'データベースロック解除', 'データベース解除' ),
'Unusedcategories' => array( '使われていないカテゴリ', '未使用カテゴリ' ),
'Unusedimages' => array( '使われていないファイル', '未使用ファイル', '未使用画像' ),
IP アドレスは複数の利用者で共有されている場合があります。
もし、あなたが匿名利用者であり、自分に関係のないコメントが寄せられている考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。''",
'noarticletext' => '現在このページには内容がありません。
-他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索する]]か、
+他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]するか、
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]するか、
-あるいは、[{{fullurl:{{FULLPAGENAME}}|action=edit}} このページを編集]</span>できます。',
+[{{fullurl:{{FULLPAGENAME}}|action=edit}} このページを編集]</span>することができます。',
'noarticletext-nopermission' => '現在このページには内容がありません。他のページに含まれる[[Special:Search/{{PAGENAME}}|このページ名を検索する]]か、もしくは<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連記録を検索する]</span>ことができます。',
'userpage-userdoesnotexist' => '「$1」という利用者アカウントは登録されていません。
このページの作成/編集が適切かどうか確認してください。',
'node-count-exceeded-warning' => 'ページがノード数の制限を超えました',
'expansion-depth-exceeded-category' => '展開の深さ制限を超えたページ',
'expansion-depth-exceeded-warning' => 'ページが展開の深さ制限を超えました',
+'parser-unstrip-loop-warning' => 'Unstrip のループが検出されました',
+'parser-unstrip-recursion-limit' => 'Unstrip の再帰($1)が上限を超えました',
# "Undo" feature
'undo-success' => 'この編集を取り消せます。
# Diffs
'history-title' => '「$1」の変更履歴',
+'difference-title' => '「$1」の版間の差分',
+'difference-title-multipage' => 'ページ「$1」と「$2」間の差分',
'difference-multipage' => '(ページ間の差分)',
'lineno' => '$1行:',
'compareselectedversions' => '選択した版同士を比較',
'nchanges' => '$1回の変更',
'recentchanges' => '最近の更新',
'recentchanges-legend' => '最近の更新のオプション',
-'recentchangestext' => 'このウィキにおける最近の更新はこのページから確認できます。',
+'recentchanges-summary' => 'このページで最近の更新を確認できます。',
'recentchanges-feed-description' => 'このフィードでそのウィキへの最近の更新を追跡。',
'recentchanges-label-newpage' => 'この編集で新しいページが作成されました',
'recentchanges-label-minor' => 'これは細部の編集です',
'backend-fail-writetemp' => '一時ファイルに書き込めませんでした。',
'backend-fail-closetemp' => '一時ファイルを閉じることができませんでした。',
'backend-fail-read' => 'ファイル $1 を読み込めませんでした。',
-'backend-fail-create' => 'ã\83\95ã\82¡ã\82¤ã\83« $1 ã\82\92ä½\9cæ\88\90ã\81§ã\81\8dませんでした。',
-'backend-fail-maxsize' => '{{PLURAL:$2|$2 ã\83\90ã\82¤ã\83\88}}ã\82\88ã\82\8aã\82\82大ã\81\8dã\81\84ã\81\9fã\82\81ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\82\92ä½\9cæ\88\90ã\81§ã\81\8dませんでした。',
+'backend-fail-create' => 'ã\83\95ã\82¡ã\82¤ã\83« $1 ã\81«æ\9b¸ã\81\8dè¾¼ã\82\81ませんでした。',
+'backend-fail-maxsize' => '{{PLURAL:$2|$2 ã\83\90ã\82¤ã\83\88}}ã\82\88ã\82\8aã\82\82大ã\81\8dã\81\84ã\81\9fã\82\81ã\80\81ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\81«æ\9b¸ã\81\8dè¾¼ã\82\81ませんでした。',
'backend-fail-readonly' => 'ストレージバックエンド「$1」は現在読み取り専用です。理由:「$2」',
'backend-fail-synced' => 'ファイル「$1」は、ストレージバックエンド内部において不一致の状態にあります。',
'backend-fail-connect' => 'ストレージバックエンドに接続できませんでした。「$1」',
'mywatchlist' => 'ウォッチリスト',
'watchlistfor2' => '利用者: $1 $2',
'nowatchlist' => 'ウォッチリストに項目がありません。',
-'watchlistanontext' => 'ウォッチリストに入っている項目を表示または編集するには、$1してください。',
+'watchlistanontext' => 'ウォッチリストにある項目を閲覧または編集するには、$1してください。',
'watchnologin' => 'ログインしていません',
'watchnologintext' => 'ウォッチリストを変更するためには、[[Special:UserLogin|ログイン]]している必要があります。',
'addwatch' => 'ウォッチリストに追加',
'tooltip-n-mainpage' => 'メインページに移動',
'tooltip-n-mainpage-description' => 'メインページに移動する',
'tooltip-n-portal' => 'このプロジェクトについて、できること、情報を入手する場所',
-'tooltip-n-currentevents' => 'æ\9c\80è¿\91ã\81®å\87ºæ\9d¥äº\8bã\81«ã\81¤ã\81\84ã\81¦äº\88å\82\99ç\9f¥è\98ã\82\92å¾\97る',
+'tooltip-n-currentevents' => 'æ\9c\80è¿\91ã\81®å\87ºæ\9d¥äº\8bã\81®è\83\8cæ\99¯ã\82\92ç\9f¥る',
'tooltip-n-recentchanges' => 'このウィキにおける最近の更新の一覧',
-'tooltip-n-randompage' => '無作為に抽出されたページの読み込み',
+'tooltip-n-randompage' => '無作為に選ばれたページを読み込む',
'tooltip-n-help' => '情報を得る場所',
'tooltip-t-whatlinkshere' => 'ここにリンクしている全ウィキページの一覧',
'tooltip-t-recentchangeslinked' => 'このページからリンクしているページの最近の更新',
'Activeusers' => array( 'აქტიური_მომხმარებლები' ),
'Allmessages' => array( 'ყველა_შეტყობინება' ),
'Allpages' => array( 'ყველა_გვერდი' ),
- 'Ancientpages' => array( 'მხცოვანიგვერდები' ),
+ 'Ancientpages' => array( 'მხცოვანი_გვერდები' ),
+ 'Badtitle' => array( 'ცუდი_სათაური' ),
'Blankpage' => array( 'ცარიელი_გვერდი' ),
'Block' => array( 'დაბლოკვა' ),
'Blockme' => array( 'დამბლოკე' ),
- 'BrokenRedirects' => array( 'გაწყვეტილიგადამისამართება' ),
+ 'BrokenRedirects' => array( 'გაწყვეტილი_გადამისამართება' ),
'Categories' => array( 'კატეგორიები' ),
+ 'ChangeEmail' => array( 'ელ-ფოსტის_შეცვლა' ),
'ChangePassword' => array( 'პაროლის_შეცვლა' ),
'ComparePages' => array( 'გვერდების_შედარება' ),
'Confirmemail' => array( 'ელ-ფოსტის_დადასტურება' ),
'Contributions' => array( 'წვლილი' ),
'CreateAccount' => array( 'ანგარიშის_შექმნა' ),
'Disambiguations' => array( 'მრავალმნიშვნელოვნება' ),
- 'DoubleRedirects' => array( 'ორმაგიგადამისამართება' ),
+ 'DoubleRedirects' => array( 'ორმაგი_გადამისამართება' ),
+ 'EditWatchlist' => array( 'კონტროლის_სიის_რედაქტირება' ),
'Emailuser' => array( 'მიწერა_მომხმარებელს' ),
'Export' => array( 'ექსპორტი' ),
'FileDuplicateSearch' => array( 'ფაილის_დუბლიკატის_ძიება' ),
'Import' => array( 'იმპორტი' ),
'BlockList' => array( 'ბლოკირებების_სია' ),
- 'LinkSearch' => array( 'á\83\91á\83\9bá\83£á\83\9aá\83\98á\83¡_á\83«á\83\94ება' ),
+ 'LinkSearch' => array( 'á\83\91á\83\9bá\83£á\83\9aá\83\98á\83¡_á\83«á\83\98ება' ),
'Listadmins' => array( 'ადმინისტრატორების_სია' ),
'Listbots' => array( 'ბოტების_სია' ),
- 'Listfiles' => array( 'სურსია' ),
+ 'Listfiles' => array( 'ფაილების_სია' ),
+ 'Listgrouprights' => array( 'ჯგუფის_უფლებათა_სია' ),
+ 'Listredirects' => array( 'გადამისამართებების_სია' ),
'Listusers' => array( 'მომხმარებელთა_სია' ),
'Lonelypages' => array( 'ობოლიგვერდები' ),
'Longpages' => array( 'გრძელიგვერდები' ),
'img_thumbnail' => array( '1', 'მინიატიურა', 'მინი', 'მინიასლი', 'ცეროდენა', 'thumbnail', 'thumb' ),
'img_right' => array( '1', 'მარჯვნივ', 'right' ),
'img_left' => array( '1', 'მარცხნივ', 'left' ),
+ 'img_none' => array( '1', 'არა', 'none' ),
'img_width' => array( '1', '$1პქ', '$1px' ),
- 'img_center' => array( '1', 'ცენტრი', 'center', 'centre' ),
+ 'img_center' => array( '1', 'ცენტრი', 'ცენტრში', 'center', 'centre' ),
'img_border' => array( '1', 'საზღვარი', 'border' ),
+ 'img_top' => array( '1', 'ზედა', 'top' ),
+ 'img_middle' => array( '1', 'შუა', 'middle' ),
+ 'img_bottom' => array( '1', 'ქვედა', 'bottom' ),
'special' => array( '0', 'სპეციალური', 'special' ),
);
'nchanges' => '$1 ცვლილება',
'recentchanges' => 'ბოლო ცვლილებები',
'recentchanges-legend' => 'ბოლო ცვლილებების პარამეტრები',
-'recentchangestext' => 'უთვალთვალეთ ვიკიში ბოლო ცვლილებებს ამ გვერდზე.',
+'recentchanges-summary' => 'უთვალთვალეთ ვიკიში ბოლო ცვლილებებს ამ გვერდზე.',
'recentchanges-feed-description' => 'ვიკის უახლესი ცვლილებების მეთვალყურეობა ამ არხში.',
'recentchanges-label-newpage' => 'ამ რედაქტირებით შეიქმნა ახალი გვერდი',
'recentchanges-label-minor' => 'ეს არის მცირე შესწორება',
'last' => 'aqır.',
'page_first' => 'birinshi',
'page_last' => "aqırg'ı",
-'histlegend' => "Tu'sindirme: salıstırajaq nusqaların'ızdı saylan' ha'mde <Enter> knopkasın yamasa to'mendegi knopkani basın'.<br />
+'histlegend' => "Tu'sindirme: salıstırajaq nusqaların'ızdı saylan' ha'mde Enter knopkasın yamasa to'mendegi knopkani basın'.<br />
Sha'rtli belgiler: (ha'z.) = ha'zirgi nusqasi menen parqı,
(aqır.) = aldıng'ı nusqasi menen parqı, k = kishi o'zgeris",
'history-fieldset-title' => 'Tariyxınan izlew',
'nchanges' => "{{PLURAL:$1|1 o'zgeris|$1 o'zgeris}}",
'recentchanges' => "Aqırg'ı o'zgerisler",
'recentchanges-legend' => "Aqırg'ı o'zgerisler sazlawları",
-'recentchangestext' => "Bul bette usı wikidegi ha'zirgi o'zgerisler baqlanadı.",
+'recentchanges-summary' => "Bul bette usı wikidegi ha'zirgi o'zgerisler baqlanadı.",
'recentchanges-feed-description' => "Wikidin' usı ag'ımındag'ı en' aqırg'ı o'zgerislerin baqlaw.",
'recentchanges-label-newpage' => "Bul o'zgeris arqalı taza bet jaratıldı",
'recentchanges-label-minor' => "Bul kishi o'zgeris",
'nchanges' => '$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}',
'recentchanges' => 'حالیہ تبدیلی',
'recentchanges-legend' => 'حالیہ تبدیلیان اختیارات',
-'recentchangestext' => 'ھیہ صفحا کھوار ویکیپیڈیا باک تازہ تریں تبدیلیان مشاہدہ کورے',
+'recentchanges-summary' => 'ھیہ صفحا کھوار ویکیپیڈیا باک تازہ تریں تبدیلیان مشاہدہ کورے',
'recentchanges-feed-description' => 'کھوارا ترجمہ',
'recentchanges-label-newpage' => 'ھیہ ترمیم نوغ صفحہ تخلیق آریر',
'recentchanges-label-minor' => 'ھیہ ای معمولی ترمیم شیر',
'protectedpages' => 'محفوظ شدہ صفحہ',
'protectedtitles' => 'محفوظ شدہ صفحہ',
'listusers' => 'فہرست ارکان',
-'usercreated' => 'ساوزینو ھوی $1 at $2',
+'usercreated' => '
+{{GENDER:$3|تخلیق شدہ}} بتاریخ $1 بوقت $2',
'newpages' => 'نوغ صفحات',
'newpages-username' => 'اسمِ رکنیت',
'move' => 'منتقل',
'nchanges' => '$1 {{PLURAL:$1|tedil|tedili}}',
'recentchanges' => 'Vurnaisê peyêni',
'recentchanges-legend' => 'Alternatifê vurnaisunê peyênu',
-'recentchangestext' => 'Na weiyekerdena wiki de vurnaisê tewrpeyêne ke biyê ine teqib ke.',
+'recentchanges-summary' => 'Na weiyekerdena wiki de vurnaisê tewrpeyêne ke biyê ine teqib ke.',
'recentchanges-feed-description' => 'Na weiyekerdena wiki de vurnaisê tewrpeyêne ke biyê ine teqib ke.',
'recentchanges-label-newpage' => 'Nê vurnaişi pelê da newiye afernê.',
'recentchanges-label-minor' => 'No zu vurnaiso qıckeko',
# Contributions
'contributions' => 'İştırakê karberi',
'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştırakê mı',
+'mycontris' => 'İştıraxê mı',
'contribsub2' => 'Serba $1 ($2)',
'uctop' => '(ser)',
'month' => 'Asme ra (u ravêr):',
'errorpagetitle' => 'Қате',
'returnto' => '$1 дегенге қайта келу.',
-'tagline' => '{{SITENAME}} жобасынан',
+'tagline' => '{{SITENAME}} жобасынан алынған мәлімет',
'help' => 'Анықтама',
'search' => 'Іздеу',
'searchbutton' => 'Іздеу',
'nchanges' => '$1 өзгеріс',
'recentchanges' => 'Жуықтағы өзгерістер',
'recentchanges-legend' => 'Жуықтағы өзгерістер баптаулары',
-'recentchangestext' => 'Бұл бетте осы уикидегі болған жуықтағы өзгерістер байқалады.',
+'recentchanges-summary' => 'Бұл бетте осы уикидегі болған жуықтағы өзгерістер байқалады.',
'recentchanges-feed-description' => 'Бұл арнаменен уикидегі ең соңғы өзгерістер қадағаланады.',
'recentchanges-label-newpage' => 'Бұл өңдеме арқылы жаңа бет басталды',
'recentchanges-label-minor' => 'Бұл шағын өңдеме',
'userinvalidcssjstitle' => "'''ប្រយ័ត្ន៖''' គ្មានសំបក \"\$1\"។ ចងចាំថា ទំព័រផ្ទាល់ខ្លួន .css និង .js ប្រើប្រាស់ ចំណងជើង ជាអក្សរតូច, ឧទាហរណ៍ {{ns:user}}:Foo/vector.css ត្រឹមត្រូវ, រីឯ {{ns:user}}:Foo/Vector.css មិនត្រឹមត្រូវ។",
'updated' => '(បានបន្ទាន់សម័យ)',
'note' => "'''ចំណាំ៖'''",
-'previewnote' => "'''á\9e\93á\9f\81á\9f\87á\9e\82á\9f\92á\9e\9aá\9e¶á\9e\93á\9f\8bá\9e\8fá\9f\82á\9e\87á\9e¶â\80\8bá\9e\80á\9e¶á\9e\9aá\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¾á\9e\9bá\9e\87á\9e¶á\9e\98á\9e»á\9e\93á\9e\94á\9f\89á\9e»á\9e\8eá\9f\92á\9e\8eá\9f\84á\9f\87á\9f\94 á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bមិនទាន់បានរក្សាទុកទេ!'''",
+'previewnote' => "'''á\9e\9fá\9e¼á\9e\98á\9e\85á\9e¶á\9f\86á\9e\90á\9e¶á\9e\93á\9f\81á\9f\87á\9e\82á\9f\92á\9e\9aá\9e¶á\9e\93á\9f\8bá\9e\8fá\9f\82á\9e\87á\9e¶â\80\8bá\9e\80á\9e¶á\9e\9aá\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¾á\9e\9bá\9e\87á\9e¶á\9e\98á\9e»á\9e\93á\9e\94á\9f\89á\9e»á\9e\8eá\9f\92á\9e\8eá\9f\84á\9f\87á\9f\94 á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80មិនទាន់បានរក្សាទុកទេ!'''",
'previewconflict' => 'ការមើលមុននេះយោងតាមអត្ថបទក្នុងប្រអប់កែប្រែខាងលើ។ ទំព័រអត្ថបទនឹងបង្ហាញចេញបែបនេះប្រសិនបើអ្នកជ្រើសរើសរក្សាទុក។',
'session_fail_preview' => "'''សូមអភ័យទោស! យើងមិនអាចរក្សាទុកការកែប្រែរបស់អ្នកបានទេ ដោយសារបាត់ទិន្នន័យវេនការងារ។
'nchanges' => '$1 {{PLURAL:$1|បំលាស់ប្ដូរ|បំលាស់ប្ដូរ}}',
'recentchanges' => 'បំលាស់ប្ដូរថ្មីៗ',
'recentchanges-legend' => 'ជម្រើសនានា សម្រាប់ការបង្ហាញបន្លាស់ប្ដូរថ្មីៗ',
-'recentchangestext' => 'តាមដានរាល់បន្លាស់ប្ដូររថ្មីៗបំផុត ចំពោះវិគីនៅលើទំព័រនេះ។',
+'recentchanges-summary' => 'តាមដានរាល់បំលាស់ប្ដូរថ្មីៗបំផុតចំពោះវិគីនៅលើទំព័រនេះ។',
'recentchanges-feed-description' => 'តាមដានបន្លាស់ប្ដូរថ្មីៗបំផុតនៃវិគីនេះក្នុងមតិព័ត៌មាននេះ។',
'recentchanges-label-newpage' => 'ការកែប្រែនេះបានបង្កើតទំព័រថ្មីមួយ',
'recentchanges-label-minor' => 'នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ',
'Allmessages' => array( '모든메시지' ),
'Allpages' => array( '모든문서' ),
'Ancientpages' => array( '오래된문서' ),
+ 'Badtitle' => array( '잘못된이름', '인식불가이름', '잘못된제목', '인식불가제목' ),
'Blankpage' => array( '빈문서' ),
'Block' => array( '차단' ),
'Blockme' => array( '자가차단' ),
'Booksources' => array( '책찾기' ),
'BrokenRedirects' => array( '끊긴넘겨주기' ),
'Categories' => array( '분류' ),
+ 'ChangeEmail' => array( '이메일변경', '이메일바꾸기' ),
'ChangePassword' => array( '비밀번호변경', '비밀번호바꾸기' ),
'ComparePages' => array( '문서비교' ),
'Confirmemail' => array( '이메일인증' ),
'DeletedContributions' => array( '삭제된기여' ),
'Disambiguations' => array( '동음이의', '동음이의문서' ),
'DoubleRedirects' => array( '이중넘겨주기' ),
+ 'EditWatchlist' => array( '주시문서목록편집' ),
'Emailuser' => array( '이메일보내기' ),
'Export' => array( '내보내기' ),
'Fewestrevisions' => array( '역사짧은문서' ),
'Filepath' => array( '파일경로', '그림경로' ),
'Import' => array( '가져오기' ),
'Invalidateemail' => array( '이메일인증취소', '이메일인증해제' ),
+ 'JavaScriptTest' => array( '자바스크립트시험' ),
'BlockList' => array( '차단된사용자', '차단목록' ),
'LinkSearch' => array( '외부링크찾기', '외부링크검색' ),
'Listadmins' => array( '관리자', '관리자목록' ),
'Newimages' => array( '새파일', '새그림' ),
'Newpages' => array( '새문서' ),
'PasswordReset' => array( '암호변경' ),
+ 'PermanentLink' => array( '고유링크', '영구링크' ),
'Popularpages' => array( '인기있는문서' ),
'Preferences' => array( '환경설정' ),
'Prefixindex' => array( '접두어찾기' ),
'Recentchanges' => array( '최근바뀜' ),
'Recentchangeslinked' => array( '링크최근바뀜' ),
'Revisiondelete' => array( '특정판삭제' ),
+ 'RevisionMove' => array( '특정판이동' ),
'Search' => array( '찾기', '검색' ),
'Shortpages' => array( '짧은문서' ),
'Specialpages' => array( '특수문서', '특수기능' ),
'Unusedtemplates' => array( '안쓰는틀' ),
'Unwatchedpages' => array( '주시안되는문서' ),
'Upload' => array( '파일올리기', '그림올리기' ),
+ 'UploadStash' => array( '올린비공개파일' ),
'Userlogin' => array( '로그인' ),
'Userlogout' => array( '로그아웃' ),
'Userrights' => array( '권한조정' ),
'nse' => array( '0', '이름E:', '이름공간E:', 'NSE:' ),
'localurl' => array( '0', '지역주소:', 'LOCALURL:' ),
'localurle' => array( '0', '지역주소E:', 'LOCALURLE:' ),
+ 'articlepath' => array( '0', '항목경로', '기사경로', 'ARTICLEPATH' ),
'server' => array( '0', '서버', 'SERVER' ),
'servername' => array( '0', '서버이름', 'SERVERNAME' ),
'scriptpath' => array( '0', '스크립트경로', 'SCRIPTPATH' ),
'nchanges' => '$1개 바뀜',
'recentchanges' => '최근 바뀜',
'recentchanges-legend' => '최근 바뀜 설정',
-'recentchangestext' => '위키의 최근 바뀜 내역이 나와 있습니다.',
+'recentchanges-summary' => '위키의 최근 바뀜 내역이 나와 있습니다.',
'recentchanges-feed-description' => '위키의 최근 바뀜',
'recentchanges-label-newpage' => '새로운 문서',
'recentchanges-label-minor' => '사소한 편집',
'note' => "'''Белги:'''",
'previewnote' => "'''Бу къуру ал къарауду.'''
Сиз этген тюрлениуле алкъын сакъланмагъандыла!",
+'continue-editing' => 'Тюрлендириуню бардырыгъыз',
'previewconflict' => 'Бу ал къарау, башындагъы тюрлендириу терезеде текстни сакъланнганча кёргюзеди.',
'session_fail_preview' => "'''Джарсыугъа, сессияны идентификаторуну тас этгени себебли, сервер сизни тюрлендириуюгюзни сакълаталмагъанды.
Энтдада кёрюгюз.
'nchanges' => '$1 {{PLURAL:$1|тюрлениу|тюрлениу}}',
'recentchanges' => 'Ахыр тюрлениуле',
'recentchanges-legend' => 'Ахыр тюрлениулени джарашдырыулары',
-'recentchangestext' => 'Тюбюнде, Википедияда этилген ахыр тюрлениуле хронология бла тизилиб турадыла.',
+'recentchanges-summary' => 'Тюбюнде, Википедияда этилген ахыр тюрлениуле хронология бла тизилиб турадыла.',
'recentchanges-feed-description' => 'Викиде бу лентада тюрлениулени кёзде тут.',
'recentchanges-label-newpage' => 'Бу тюрлендириу бла джангы бет къуралгъанды',
'recentchanges-label-minor' => 'Бу гитче тюрлениудю',
Et künnt ussinn, wie ene InterWikiLink,
dat jeiht ävver nit.
Muss De repareere.',
-'perfcached' => 'Di Daate heh noh kumme usem Zweschespeicher (<l lang="en">cache</i>) un künnte nit mieh janz de allerneuste sin.
+'perfcached' => 'Di Daate heh noh kumme usem Zweschespeicher (cache) un künnte nit mieh janz de allerneuste sin.
{{PLURAL:$1|Bloß ein Antwoot es|Nit mieh wi $1 Antwoote sin|Kein Antwoot es}} doh faßjehallde un ze han.',
'perfcachedts' => 'De Daate heenoh kumme usem Zweschespeicher (Cache) un woodte aam $2 öm $3 opjenumme. Se künnte nit janz de allerneuste sin.
{{PLURAL:$4|Bloß ein Antwoot es|Nit mieh wi $4 Antwoote sind|Kein Antwoot es}} doh ze han.',
'nchanges' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Kein Änderung}}',
'recentchanges' => 'Neuste Änderunge',
'recentchanges-legend' => 'Enstellunge',
-'recentchangestext' => 'Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.',
+'recentchanges-summary' => 'Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.',
'recentchanges-feed-description' => 'Op dämm Abonnomang-Kannal (<i lang="en">Feed</i>) kannze de {{int:recentchanges}} aam Wiki en Laif un en Färve metloore.',
'recentchanges-label-newpage' => 'Heh di Sigg es neu dobei jekumme met dä Änderung',
'recentchanges-label-minor' => 'Heh dat es en Mini-Änderung',
* @author Erdal Ronahi
* @author Ferhengvan
* @author George Animal
+ * @author Ghybu
* @author Gomada
* @author Kaganer
* @author Krinkle
'cancel' => 'Betalkirin',
'moredotdotdot' => 'Bêhtir...',
'mypage' => 'Rûpela min',
-'mytalk' => 'Rûpela gotûbêja min',
+'mytalk' => 'Gotûbêja min',
'anontalk' => "Gotûbêj ji bo vê IP'ê",
'navigation' => 'Navîgasyon',
'and' => ' û',
'unprotectthispage' => 'Parastina vê rûpelê rake',
'newpage' => 'Rûpela nû',
'talkpage' => 'Vê rûpelê gotûbêj bike',
-'talkpagelinktext' => 'Nîqaş',
+'talkpagelinktext' => 'gotûbêj',
'specialpage' => 'Rûpela taybet',
'personaltools' => 'Amûrên kesane',
'postcomment' => 'Beşeke nû',
'showlivepreview' => 'Pêşdîtina zindî',
'showdiff' => 'Guherandinê nîşan bide',
'anoneditwarning' => "'''Hişyarî:''' Tu netêketî yî! Navnîşana IP'ya te wê di dîroka guherandina vê rûpelê de bê tomarkirin.",
+'anonpreviewwarning' => "''Tu ne têketî yî. Tomarkirin wê navnîşana IP'ya te di dîroka guhertinan de nîşan bide.''",
'missingsummary' => "<span style=\"color:#990000;\">'''Zanibe:'''</span> Te nivîsekî kurt ji bo guherandinê ra nenivîsand. Eger tu niha carekî din li Tomar xê, guherandinê te vê nivîsekî kurt yê were tomarkirin.",
'missingcommenttext' => 'Ji kerema xwe kurteya naverokê li jêr binivisîne.',
'missingcommentheader' => "<span style=\"color:#990000;\">'''Zanibe:'''</span> Te sernavek nenivîsandiye. Heke tu niha carekî din li ser ''tomar bike'' bitikînî, ev guherandina vê sernavê wê were tomarkirin.",
'updated' => '(Hate rojanekirin)',
'note' => "'''Nîşe:'''",
'previewnote' => "'''Ji bîr neke ku ev bi tenê çavdêriyek e, ev rûpel hîn nehatiye tomarkirin!'''",
+'continue-editing' => 'Guhertinê bidomîne',
'editing' => 'Biguherîne: "$1"',
+'creating' => '$1 tê çêkirin',
'editingsection' => 'Tê guherandin: $1 (beş)',
'editingcomment' => '$1 (şîrove) tê guherandin.',
'editconflict' => 'Têkçûna guherandinan: $1',
Tu soz didî ku te ev bi xwe nivîsand an jî ji çavkaniyekê azad an geliyane ''(public domain)'' girt.
'''BERHEMÊN MAFÊN WAN PARASTÎ (©) BÊ DESTÛR NEWEŞÎNE!'''",
'protectedpagewarning' => "'''Hişyarî: Ev rûpel tê parastin. Bi tenê bikarhênerên ku xwediyên mafên \"koordînatoriyê\" ne, dikarin vê rûpelê biguherînin.'''",
+'semiprotectedpagewarning' => "'''Hişyarî:''' Ev rûpel tê parastin, lewma bes bikarhênerên tomarkirî dikarin vê biguherînin.
+Guhertina herî dawî bi referansa li jêr hatiye piştrastkirin:",
'templatesused' => 'Şablon di van rûpelan da tê bikaranîn',
'templatesusedpreview' => 'Şablon yê di vê pêşdîtinê da tên bikaranîn:',
'templatesusedsection' => 'Şablon yê di vê perçê da tên bikaranîn:',
Zanibe ku nuhçêkirinê vê rûpelê hêja ye ya na.
Înformasyon li ser jêbirinê vê rûpelê li vir e:",
'moveddeleted-notice' => 'Ev rûpel hatiye jêbirin.
-The deletion and move log for the page are provided below for reference.',
+Sedema jêbirina rûpelê bi referansa li jêr hatiye piştrastkirin.',
'log-fulllog' => 'Tevahiya wê bibîne',
'edit-conflict' => 'Têkçûna guherandinan.',
'edit-no-change' => 'Guherandina te nehate hesibandin, ji ber ku guherandinên nivîsê tune bûn.',
'nextn-title' => '$1 {{PLURAL:$1|encama|encamên}} pêştir',
'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3).',
'searchmenu-legend' => 'Vebijartinên lêgerrînê',
+'searchmenu-exists' => "'''Rûpeleke bi navê \"[[:\$1]]\" li ser vê wîkiyê heye.'''",
'searchmenu-new' => 'Rûpela "[[:$1]]" li ser vê derê çêke!',
'searchhelp-url' => 'Help:Alîkarî',
'searchprofile-articles' => 'Rûpelên naverokê',
'searchprofile-project' => 'Rûpelên alîkariyê û projeyê',
-'searchprofile-images' => 'Multimedia',
+'searchprofile-images' => 'Multîmedya',
'searchprofile-everything' => 'Her tişt',
'searchprofile-advanced' => 'Pêşketî',
'searchprofile-articles-tooltip' => 'Di $1 da lêbigere',
'searchall' => 'hemû',
'showingresults' => "{{PLURAL:$1|Encamek|'''$1''' encam}}, bi #'''$2''' dest pê dike.",
'showingresultsnum' => "{{PLURAL:$3|'''1'''|'''$3'''}} encam, bi #<b>$2</b> dest pê dike.",
+'showingresultsheader' => "{{PLURAL:$5|Encam '''$1''' ên '''$3'''|Encam '''$1 - $2''' ên '''$3'''}} ji bo '''$4'''",
'search-nonefound' => 'Ti rûpelên wek ya daxwazkirî nînin.',
'powersearch' => 'Lê bigere',
'powersearch-legend' => 'Lê bigere',
-'powersearch-ns' => "Di namespace'an da lêbigere:",
+'powersearch-ns' => 'Di valahiya navan de lêbigere:',
'powersearch-redir' => "Lîsteya redirect'an",
'powersearch-field' => 'Bigere li',
'powersearch-togglelabel' => 'Kontrol bike:',
'linkstoimage' => 'Di van rûpelan de lînkek ji vî wêneyî re heye:',
'nolinkstoimage' => 'Rûpelekî ku ji vî wêneyî re girêdankê çêdike nîne.',
'linkstoimage-redirect' => '$1 (beralîkirina pelê) $2',
+'sharedupload-desc-here' => 'Ev pel ji $1 û dibe ku ji aliyê projeyên din ve jî hatibe bikaranîn.
+Agahdariya li ser [$2 rûpela danasîna pelê] li jêr tê nîşandan.',
'uploadnewversion-linktext' => 'Versyonekî nû yê vê datayê barbike',
'shared-repo-from' => 'ji $1',
'statistics-header-hooks' => 'Statîstîkên din',
'statistics-articles' => 'Rûpelên naverokê',
'statistics-pages' => 'Rûpel',
-'statistics-pages-desc' => 'Hemû rûpelên di vê wîkiyê de, bi hemû rûpelên nîqaş, beralîkirin, hwd.',
+'statistics-pages-desc' => 'Hemû rûpelên di vê wîkiyê de, bi hemû rûpelên gotûbêj, beralîkirin, hwd.',
'statistics-files' => 'Wêneyên barkirî',
'statistics-views-total' => 'Hemû nîşandan',
'statistics-users' => '[[Special:ListUsers|Bikarhênerên tomarkirî]]',
'sp-contributions-deleted' => 'Guherandinên bikarhênerekî yê jêbirî',
'sp-contributions-uploads' => 'yên barkirî',
'sp-contributions-logs' => 'têketin',
-'sp-contributions-talk' => 'nîqaş',
+'sp-contributions-talk' => 'gotûbêj',
'sp-contributions-userrights' => 'Îdarekirina mafên bikarhêneran',
'sp-contributions-search' => 'Li beşdariyan bigere',
'sp-contributions-username' => 'Adresê IP ya navî bikarhêner:',
'articleexists' => 'Rûpela bi vî navî heye, an navê ku te hilbijart derbas nabe. Navekî din hilbijêre.',
'cantmove-titleprotected' => 'Tu nikanê vê rûpelê bervê vê cihê bigerînê ji ber ku sernava nuh tê parastin ji bo çêkirinê',
'movedto' => 'bû',
-'movetalk' => "Rûpela '''gotûbêj'''a wê jî bigerîne, eger gengaz be.",
+'movetalk' => "Heke gengaz be, rûpela '''gotûbêj'''a wê jî bigerîne.",
'movepage-page-exists' => 'Rûpela $1 berê heye û ew nikane otomatîk were jêbirin.',
'movepage-page-moved' => 'Rûpela $1 çû cihê $2.',
'movepage-page-unmoved' => 'Rûpela $1 nikanî çûba ciha $2.',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Rûpela min',
'tooltip-pt-anonuserpage' => 'The user page for the ip you',
-'tooltip-pt-mytalk' => 'Rûpela min a gotûbêjê',
+'tooltip-pt-mytalk' => 'Gotûbêja min',
'tooltip-pt-preferences' => 'Tercîhên min',
'tooltip-pt-watchlist' => 'The list of pages you',
'tooltip-pt-mycontris' => 'Lîsteya beşdariyên min',
'pageinfo-header-watchlist' => 'Lîsteya şopandinê',
'pageinfo-header-views' => 'Dîtin',
'pageinfo-subjectpage' => 'Rûpel',
-'pageinfo-talkpage' => 'Rûpela nîqaşê',
+'pageinfo-talkpage' => 'Rûpela gotûbêjê',
'pageinfo-watchers' => 'Hejmara kesên dişopînin',
'pageinfo-edits' => 'Hejmara guherandinan',
'pageinfo-views' => 'Hejmara dîtinê',
# Delete conflict
'deletedwhileediting' => 'Hîşyar: Piştî te guherandinê xwe dest pê kir ev rûpela hate jêbirin!',
-'confirmrecreate' => "Bikarhêner [[User:$1|$1]] ([[User talk:$1|nîqaş]]) vê rûpelê jêbir, piştî te destpêkir bi guherandinê. Sedemê jêbirinê ev bû:
+'confirmrecreate' => "Piştî te dest bi guherandinê kir, bikarhêner [[User:$1|$1]] ([[User talk:$1|gotûbêj]]) ev rûpel jê bir. Sedema jêbirinê ev bû:
: ''$2''
-Xêra xwe zanibe ku tu bi rastî dixwazê vê rûpelê dîsa çêkê",
+Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
'recreate' => 'Dîsa çêke',
# action=purge
'watchlisttools-edit' => 'Lîsteya şopandinê bibîne û biguherîne',
# Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|nîqaş]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|gotûbêj]])',
# Special:Version
'version' => 'Versiyon',
$fallback = 'ru';
+$namespaceNames = array(
+ NS_SPECIAL => 'Отсасян',
+ NS_TALK => 'Сёрнитанiн',
+ NS_USER => 'Пырысь',
+ NS_USER_TALK => 'Пырыськӧд_сёрнитанiн',
+ NS_FILE => 'Файл',
+ NS_FILE_TALK => 'Файл_донъялӧм',
+ NS_MEDIAWIKI => 'МедиаВики',
+ NS_MEDIAWIKI_TALK => 'МедиаВики_донъялӧм',
+ NS_TEMPLATE => 'Шаблон',
+ NS_TEMPLATE_TALK => 'Шаблон_донъялӧм',
+);
+
+$namespaceAliases = array(
+ // Backward compat. Fallbacks from 'ru'.
+ 'Медиа' => NS_MEDIA,
+ 'Служебная' => NS_SPECIAL,
+ 'Обсуждение' => NS_TALK,
+ 'Участник' => NS_USER,
+ 'Обсуждение_участника' => NS_USER_TALK,
+ 'Обсуждение_{{GRAMMAR:genitive|$1}}' => NS_PROJECT_TALK,
+ 'Файл' => NS_FILE,
+ 'Обсуждение_файла' => NS_FILE_TALK,
+ 'Обсуждение_MediaWiki' => NS_MEDIAWIKI_TALK,
+ 'Шаблон' => NS_TEMPLATE,
+ 'Обсуждение_шаблона' => NS_TEMPLATE_TALK,
+ 'Справка' => NS_HELP,
+ 'Обсуждение_справки' => NS_HELP_TALK,
+ 'Категория' => NS_CATEGORY,
+ 'Обсуждение_категории' => NS_CATEGORY_TALK
+);
+
$messages = array(
# Dates
'sunday' => 'вежалун',
$specialPageAliases = array(
'Allmessages' => array( 'OllMessajow' ),
- 'Allpages' => array( 'OllFolennow' ),
- 'Ancientpages' => array( 'FolennowCoth' ),
+ 'Allpages' => array( 'OllFolednow' ),
+ 'Ancientpages' => array( 'FolednowKoth' ),
+ 'Badtitle' => array( 'TitelDrog' ),
+ 'Blankpage' => array( 'FolenWag' ),
'Block' => array( 'Lettya' ),
- 'Categories' => array( 'Classys' ),
+ 'Booksources' => array( 'PednfentynyowLyver' ),
+ 'Categories' => array( 'Klassys' ),
+ 'ChangeEmail' => array( 'ChanjyaEbost' ),
+ 'ChangePassword' => array( 'ChanjyaGerTremena' ),
'Contributions' => array( 'Kevrohow' ),
+ 'CreateAccount' => array( 'FormyaAkont' ),
+ 'DeletedContributions' => array( 'KevrohowDiles' ),
+ 'EditWatchlist' => array( 'ChanjyaRolGolyas' ),
'Emailuser' => array( 'EbostyaDevnydhyer' ),
- 'Export' => array( 'Esperthy' ),
- 'Import' => array( 'Ymperthy' ),
+ 'Export' => array( 'Esperthi' ),
+ 'Import' => array( 'Ymperthi' ),
+ 'MIMEsearch' => array( 'HwilansMIME' ),
'Movepage' => array( 'GwayaFolen' ),
'Mycontributions' => array( 'OwHevrohow' ),
'Mypage' => array( 'OwFolen' ),
'Mytalk' => array( 'OwHows' ),
- 'Newpages' => array( 'FolennowNowyth' ),
- 'Preferences' => array( 'Dewisyansow' ),
+ 'Myuploads' => array( 'OwUghkargansow' ),
+ 'Newimages' => array( 'RestrednowNowyth' ),
+ 'Newpages' => array( 'FolednowNowyth' ),
+ 'PasswordReset' => array( 'DassetyaGerTremena' ),
+ 'Preferences' => array( 'Dowisyansow' ),
'Randompage' => array( 'FolenDreJons' ),
'Recentchanges' => array( 'Chanjyow_a-dhiwedhes' ),
- 'Search' => array( 'Whilans' ),
- 'Specialpages' => array( 'FolennowArbennek' ),
- 'Upload' => array( 'Ughcarga' ),
+ 'Search' => array( 'Hwilas' ),
+ 'Specialpages' => array( 'FolednowArbednek' ),
+ 'Uncategorizedcategories' => array( 'KlassysHebKlass' ),
+ 'Uncategorizedimages' => array( 'RestrednowHebKlass' ),
+ 'Uncategorizedpages' => array( 'FolednowHebKlass' ),
+ 'Uncategorizedtemplates' => array( 'SkantlynsHebKlass' ),
+ 'Upload' => array( 'Ughkarga' ),
+ 'Userlogin' => array( 'Omgelmi' ),
+ 'Userlogout' => array( 'Digelmi' ),
+ 'Userrights' => array( 'GwiryowDevnydhyer' ),
'Version' => array( 'Versyon' ),
- 'Wantedcategories' => array( 'ClassysWhansus' ),
- 'Wantedfiles' => array( 'RestrennowWhansus' ),
- 'Wantedpages' => array( 'FolennowWhansus' ),
- 'Wantedtemplates' => array( 'ScantlynsWhansus' ),
+ 'Wantedcategories' => array( 'KlassysHwansus' ),
+ 'Wantedfiles' => array( 'RestrednowHwansus' ),
+ 'Wantedpages' => array( 'FolednowHwansus' ),
+ 'Wantedtemplates' => array( 'SkantlynsHwansus' ),
'Watchlist' => array( 'Rol_golyas' ),
+ 'Whatlinkshere' => array( 'OwKevrednaObma' ),
);
$messages = array(
* @author Ztimur
*/
+$namespaceNames = array(
+ NS_MEDIA => 'Медиа',
+ NS_SPECIAL => 'Атайын',
+ NS_TALK => 'Баарлашуу',
+ NS_USER => 'Колдонуучу',
+ NS_USER_TALK => 'Колдонуучунун_баарлашуулары',
+ NS_PROJECT_TALK => '$1_баарлашуу',
+ NS_FILE => 'Файл',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_TEMPLATE => 'Калып',
+ NS_HELP => 'Жардам',
+ NS_CATEGORY => 'Категория',
+);
+
$messages = array(
# User preference toggles
'tog-underline' => 'Шилтемелердин алдын сызуу:',
'nchanges' => '$1 {{PLURAL:$1|өзгөрүү|өзгөрүү}}',
'recentchanges' => 'Соңку өзгөрүүлөр',
'recentchanges-legend' => 'Соңку өзгөртүүлөрдүн ырастоолору',
-'recentchangestext' => 'Уикидеги соңку өзгөрүүлөрдү ушул барактан көзөмөлдө.',
+'recentchanges-summary' => 'Уикидеги соңку өзгөрүүлөрдү ушул барактан көзөмөлдө.',
'recentchanges-feed-description' => 'Ушул агымдагы уикидеги соңку өзгөрүүлөрдү көзөмөлдө.',
'recentchanges-label-newpage' => 'Бул оңдоо жаңы баракты ачты',
'recentchanges-label-minor' => 'Бул майда оңдоо',
$magicWords = array(
'redirect' => array( '0', '#DIRIJAR', '#DIRECCIÓN', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
- 'fullpagename' => array( '1', 'NOMBREDEHOJACOMPLETA', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'FULLPAGENAME' ),
+ 'fullpagename' => array( '1', 'NOMBREDEHOJACOMPLETA', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
'subpagename' => array( '1', 'NOMBREDEHOJICA', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
'msg' => array( '0', 'MSJ:', 'MSG:' ),
'img_left' => array( '1', 'cierda', 'izquierda', 'izda', 'izq', 'left' ),
'Allmessages' => array( 'All_Systemmessagen' ),
'Allpages' => array( 'All_Säiten' ),
'Ancientpages' => array( 'Al_Säiten' ),
+ 'Badtitle' => array( 'Falschen_Titel' ),
'Blankpage' => array( 'Eidel_Säit' ),
'Block' => array( 'Spären' ),
'Blockme' => array( 'Mech_spären' ),
'Booksources' => array( 'Bicher_mat_hirer_ISBN_sichen' ),
'BrokenRedirects' => array( 'Futtis_Viruleedungen' ),
'Categories' => array( 'Kategorien' ),
+ 'ChangeEmail' => array( 'E-Mailadress_änneren' ),
'ChangePassword' => array( 'Passwuert_zrécksetzen' ),
'ComparePages' => array( 'Säite_vergkäichen' ),
'Confirmemail' => array( 'E-Mail_confirméieren' ),
'Filepath' => array( 'Pad_bäi_de_Fichier' ),
'Import' => array( 'Importéieren' ),
'Invalidateemail' => array( 'E-Mailadress_net_confirméieren' ),
+ 'JavaScriptTest' => array( 'JavaScript-Test' ),
'BlockList' => array( 'Lëscht_vu_gespaarten_IPen_a_Benotzer' ),
'LinkSearch' => array( 'Weblink-Sichen' ),
'Listadmins' => array( 'Lëscht_vun_den_Administrateuren' ),
$magicWords = array(
'redirect' => array( '0', '#VIRULEEDUNG', '#WEITERLEITUNG', '#REDIRECT' ),
+ 'numberofpages' => array( '1', 'Säitenzuel', 'SEITENANZAHL', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', 'Artikelen', 'ARTIKELANZAHL', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', 'Fichieren', 'DATEIANZAHL', 'NUMBEROFFILES' ),
'numberofusers' => array( '1', 'Benotzerzuel', 'BENUTZERANZAHL', 'NUMBEROFUSERS' ),
'namespace' => array( '1', 'Nummraum', 'NAMENSRAUM', 'NAMESPACE' ),
'subjectspace' => array( '1', 'Haaptnummraum', 'HAUPTNAMENSRAUM', 'SUBJECTSPACE', 'ARTICLESPACE' ),
'subjectpagename' => array( '1', 'Haaptsäit', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+ 'img_thumbnail' => array( '1', 'Miniatur', 'miniatur', 'thumbnail', 'thumb' ),
'img_right' => array( '1', 'riets', 'rechts', 'right' ),
'img_left' => array( '1', 'lénks', 'links', 'left' ),
'img_none' => array( '1', 'ouni', 'ohne', 'none' ),
'img_center' => array( '1', 'zentréiert', 'zentriert', 'center', 'centre' ),
'img_framed' => array( '1', 'gerummt', 'gerahmt', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'net_gerummt', 'rahmenlos', 'frameless' ),
+ 'img_page' => array( '1', 'Säit=$1', 'Säit_$1', 'seite=$1', 'seite $1', 'page=$1', 'page $1' ),
'img_border' => array( '1', 'bord', 'rand', 'border' ),
+ 'img_top' => array( '1', 'uewen', 'top' ),
'grammar' => array( '0', 'GRAMMAIRE', 'GRAMMATIK:', 'GRAMMAR:' ),
'plural' => array( '0', 'PLURAL', 'PLURAL:' ),
'formatnum' => array( '0', 'ZUELEFORMAT', 'ZAHLENFORMAT', 'FORMATNUM' ),
'special' => array( '0', 'spezial', 'special' ),
- 'hiddencat' => array( '1', '__VERSTOPPTE_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
+ 'hiddencat' => array( '1', '__VERSTOPPT_KATEGORIE__', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
);
$messages = array(
'revdelete-no-file' => 'De Fichier deen ugi war gëtt et net.',
'revdelete-show-file-confirm' => 'Sidd Dir sécher datt Dir déi geläschte Versioun vum Fichier "<nowiki>$1</nowiki>" vum $2 ëm $3 gesi wëllt?',
'revdelete-show-file-submit' => 'Jo',
-'revdelete-selected' => "'''{{PLURAL:$2|Gewielte Versioun|Gewielte Versioune}} vu(n) '''$1''' :'''",
+'revdelete-selected' => "'''{{PLURAL:$2|Gewielt Versioun|Gewielt Versioune}} vu(n) [[:$1]] :'''",
'logdelete-selected' => "'''Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:'''",
'revdelete-text' => "'''Geläschte Versiounen oder aner geläschte Bestanddeeler sinn net méi ëffentlech zougänglech, si stinn awer weiderhin an der Versiounsgeschicht vun der Säit.'''
Aner {{SITENAME}}-Administrateure kënnen de geläschten Inhalt oder aner geläschte Bestanddeeler weiderhi gesinn a restauréieren, et sief, et gouf festgeluecht, datt déi Limitatioune vum Accès och fir Administrateure gëllen.",
'revdelete-suppress' => 'Grond vum Läschen och fir Administrateure verstoppt',
'revdelete-unsuppress' => 'Limitatiounen fir restauréiert Versiounen ophiewen',
'revdelete-log' => 'Grond:',
-'revdelete-submit' => 'Op déi gewielte {{PLURAL:$1|Versioun|Versiounen}} uwenden',
+'revdelete-submit' => 'Op déi gewielt {{PLURAL:$1|Versioun|Versiounen}} uwenden',
'revdelete-success' => "'''Sichtbarkeet vun de Versioune gouf aktualiséiert.''''",
'revdelete-failure' => "'''Sichtbarkeet vun der Versioun konnt net aktualiséiert ginn:'''
$1",
'nchanges' => '$1 {{PLURAL:$1|Ännerung|Ännerungen}}',
'recentchanges' => 'Rezent Ännerungen',
'recentchanges-legend' => 'Optioune vun de rezenten Ännerungen',
-'recentchangestext' => "Op dëser Säit kënnt Dir déi rezent Ännerungen op '''{{SITENAME}}''' gesinn.",
+'recentchanges-summary' => "Op dëser Säit kënnt Dir déi rezent Ännerungen op '''{{SITENAME}}''' gesinn.",
'recentchanges-feed-description' => 'Verfollegt mat dësem Feed déi rezent Ännerungen op {{SITENAME}}.',
'recentchanges-label-newpage' => 'Dës Ännerung huet eng nei Säit ugeluecht',
'recentchanges-label-minor' => 'Dëst ass eng kleng Ännerung',
'backend-fail-writetemp' => 'Den temporäre Fichier konnt net geännert ginn.',
'backend-fail-closetemp' => 'Den temporäre Fichier konnt net zougemaach ginn.',
'backend-fail-read' => 'De Fichier $1 konnt net geliest ginn.',
-'backend-fail-create' => 'De Fichier $1 konnt net ugeluecht ginn.',
-'backend-fail-maxsize' => 'De Fichier $1 konnt net generéiert gi well e méi grouss ass wéi {{PLURAL:$2|ee Byte|$2 Byten}}.',
+'backend-fail-create' => 'De Fichier $1 konnt net geschriwwe ginn.',
+'backend-fail-maxsize' => 'De Fichier $1 konnt net geschriwwe gi well e méi grouss ass wéi {{PLURAL:$2|ee Byte|$2 Byten}}.',
'backend-fail-readonly' => 'De Späicher-Backend "$1" kann elo nëmme geliest ginn (read-only). De Grond deen ugi gouf war: "$2"',
# Lock manager
'markaspatrolleddiff' => 'Als nogekuckt markéieren',
'markaspatrolledtext' => 'Dës Säit als nogekuckt markéieren',
'markedaspatrolled' => 'ass als nogekuckt markéiert',
-'markedaspatrolledtext' => 'Déi gewielte Versioun vu(n) [[:$1]] gouf als nogekuckt markéiert.',
+'markedaspatrolledtext' => 'Déi gewielt Versioun vu(n) [[:$1]] gouf als nogekuckt markéiert.',
'rcpatroldisabled' => 'Rezent Ännerungskontroll ausgeschalt.',
'rcpatroldisabledtext' => "D'Kontroll vun de leschten Ännerungen ass elo ausgeschalt.",
'markedaspatrollederror' => 'Kann net als "nogekuckt" markéiert ginn.',
* @author Namik
* @author Nemo bis
* @author Reedy
+ * @author Soul Train
*/
$fallback = 'ru';
'tog-hideminor' => 'Мукьвара хьайи дегишвилера авай гъвечIи дуьзар хъувунар чуьнуьхун',
'tog-hidepatrolled' => 'Мукьвара хьайи дегишвилера авай къаравулвал авунвай дуьзар хъувунар чуьнуьхун',
'tog-newpageshidepatrolled' => 'ЦIийи ччинрин сиягьда къаравулвал авунвай ччинар чуьнуьхун',
-'tog-extendwatchlist' => 'Чlехи сиягь килигунин, кутазвай вири дегишунар, амма са эхирбур туш',
+'tog-extendwatchlist' => 'ЧӀехи сиягь килигунин, кутазвай вири дегишунар, амма са эхирбур туш',
'tog-usenewrc' => 'ЦIийи дегишвилерин сиягь кардик кутун (JavaScript герекзава)',
'tog-numberheadings' => 'КЬилин цIарариз автоматдаказ номерар эцигун',
'tog-showtoolbar' => 'Дуьзар хъувунин алатрин кьвати къалура (JavaScript)',
'tog-watchdeletion' => 'За алуднавай ччинар зи гуьзетунин сиягьдиз алава авун',
'tog-previewontop' => 'Сифтедин килигун дуьзар хъувундин дакIардин вилик эцига',
'tog-previewonfirst' => 'Дуьзар хъувундиз эгечIайла сифтедин килигун къалурун',
+'tog-enotifwatchlistpages' => 'Зи гуьзетунин ччин масакIа хьайила заз эмейл ракъура.',
'tog-enotifusertalkpages' => 'КЬилди жуван веревирдрин ччина хьанвай дегишвилерикай э-почтадиз чар ракъурун.',
'tog-oldsig' => 'Алай къул:',
'tog-showhiddencats' => 'Чуьнуьхай категорияр къалурун',
'thu' => 'Xем',
'fri' => 'Жум',
'sat' => 'Киш',
-'january' => 'СÑ\83Ñ\8cл',
-'february' => 'Чила',
-'march' => 'ТIÑ\83л',
-'april' => 'Ð\92ил',
-'may_long' => 'мукал',
+'january' => 'гÑ\8cеÑ\80',
+'february' => 'эхен',
+'march' => 'ибне',
+'april' => 'нава',
+'may_long' => 'тӀул',
'june' => 'Кьамуг',
'july' => 'БаскIум',
'august' => 'Нава',
'february-gen' => 'Эхем',
'march-gen' => 'Ибне',
'april-gen' => 'Нава',
-'may-gen' => 'ТӀул',
+'may-gen' => 'тӀул',
'june-gen' => 'Къамуг',
'july-gen' => 'Чиле',
'august-gen' => 'Пахун',
'feb' => 'Эхе',
'mar' => 'Ибн',
'apr' => 'Нав',
-'may' => 'Тlул',
+'may' => 'тӀул',
'jun' => 'Къа',
'jul' => 'Чил',
'aug' => 'Пахун',
'pagecategories' => '{{PLURAL:$1|Категория|Категории}}',
'category_header' => '"$1" категориядин ччинар',
'subcategories' => 'агъакатегорияр',
-'category-media-header' => '"$1" каÑ\82егоÑ\80иÑ\8fда медиа',
+'category-media-header' => '"$1" каÑ\82егоÑ\80иÑ\8fдин медиа',
'category-empty' => "''Алай чIава и категория ичIи я.\"",
'hidden-categories' => '{{PLURAL:$1|Чуьнуьхай категория |Чуьнуьхай категорияр }}',
'hidden-category-category' => 'Чуьнуьхай категорияр',
'missingarticle-rev' => '(жуьре#: $1)',
'internalerror' => 'КЪенепатан гъалатI',
'internalerror_info' => 'КЪенепатан гъалатI $1',
+'filerenameerror' => '«$1» файл «$2» -з тIвар эхцигиз жезвач..',
'badarticleerror' => 'И ччина и кар кьилиз акъудиз мумкин ттуш.',
'cannotdelete-title' => ' "$1" ччин алудиз жезвач',
'badtitle' => 'Ииже текъвер тIвар',
'wrongpasswordempty' => 'Тавакъу ийида, ичIи тушир парол ттур.',
'mailmypassword' => 'ЦIийи парол Э-мейлдиз къачун',
'mailerror' => 'Чар ракъурунин гъалатI: $1',
+'emailconfirmlink' => 'Куь электрон почтунин адрес тестикьун.',
'accountcreated' => 'Аккаунт туькIуьрнава',
'usernamehasherror' => 'Уртахдин тIвар "диез"дин лишан квачиз хьана кIанзава',
'loginlanguagelabel' => 'ЧIал: $1',
'showdiff' => 'МасакIавилер къалурун',
'anoneditwarning' => "'''Дикъет:''' Куьне системадиз жув вуж ятIа лагьанвач. Куь IP-адрес и ччинин масакIавилерин тарихдиз кхьида.",
'summary-preview' => 'Сифте килигун паталди:',
+'subject-preview' => 'КьилинцIарцIин сифтедин килигун:',
'blockedtitle' => 'Иштиракчи блокарнава',
'blockednoreason' => 'Са себебни ганвач',
'nosuchsectiontitle' => 'Пай жугъуриз жезвач',
'noarticletext-nopermission' => 'Исятда и ччина са текстни авач.
Квевай [[Special:Search/{{PAGENAME}}| и тlвар алай ччин]] муькуь ччинра жугъуриз ва я
<span class="plainlinks"> [{{fullurl: {{# Special:Log}} | page = {{FULLPAGENAMEE}}}} журналрин талукь тир кхьей затIар жугъуриз] жеда.',
+'blocked-notice-logextract' => 'И уртах алайчIава блокарнава.
+Агъадихъ блокарунин журналдикай эхиримжи кхьинар къалурнава:',
'previewnote' => "'''Рикlел хуьх хьи, им анжах сифтедин килигун я.'''
Куь масакIавилер гьеле хвенвач!",
'editing' => '$1 Дуьзар хъувун',
'editingsection' => 'Дуьзар хъувун $1 (пай)',
+'editingcomment' => '$1 дуьзар хъувун (цIийи пай)',
'editconflict' => 'Дуьзар хъувунрин акьунар: $1',
'yourtext' => 'Зи текст',
'yourdiff' => 'Тафаватар',
'nchanges' => '$1 {{PLURAL:$1|масакIавал|масакIавилер}}',
'recentchanges' => 'Mукьвара хьайи масакIавилер',
'recentchanges-legend' => 'Цlийи масакIавилерин низамарунар',
-'recentchangestext' => 'Викида хьанвай эхиримжи масакIавилер и ччина гуьзетун',
+'recentchanges-summary' => 'Викида хьанвай эхиримжи масакIавилер и ччина гуьзетун',
'recentchanges-feed-description' => 'И хвала викида хьанвай эхиримжи масакIавилер гуьзетун',
'recentchanges-label-newpage' => 'И дуьзар хъувун цlийи ччин туькlуьрна',
'recentchanges-label-minor' => 'Им гъвечlи дуьзар хъувун я',
'Allmessages' => array( 'Alle_berichte' ),
'Allpages' => array( 'Alle_pagina\'s' ),
'Ancientpages' => array( 'Audste_pagina\'s' ),
- 'Blankpage' => array( 'Laege_pagina\'s' ),
+ 'Blankpage' => array( 'Laeg_pagina\'s' ),
'Block' => array( 'Blokkere' ),
'Blockme' => array( 'Blokkeer_mich' ),
'Booksources' => array( 'Bookwinkele' ),
'updated' => '(Biegewèrk)',
'note' => "'''Opmirking:'''",
'previewnote' => "'''Lèt op: dit is 'n controlepagina; dien teks is nog neet opgesjlage!'''",
+'continue-editing' => 'Gank dórch mit bewirke',
'previewconflict' => "Dees versie toent wie de tèks in 't bôvesjte vèld oet git zeen es e zouws opsjlaon.",
'session_fail_preview' => "'''Sorry! Dien bewerking is neet verwerkt omdat sessiegegevens verlaore zeen gegaon.
Probeer 't opnieuw. Als 't dan nog neet lukt, meldt dich dan aaf en weer aan.'''",
# Diffs
'history-title' => 'Gesjiedenis van "$1"',
+'difference-title' => 'Versjèl tösje versies van "$1"',
+'difference-title-multipage' => 'Versjèl tösje pagina\'s "$1" en "$2"',
'difference-multipage' => '(Versjil tösje paazjes)',
'lineno' => 'Tekslien $1:',
'compareselectedversions' => 'Vergeliek geselecteerde versies',
'nchanges' => '$1 {{PLURAL:$1|bewerking|bewerkinge}}',
'recentchanges' => 'Lètste verangeringe',
'recentchanges-legend' => 'Opties veur recènte verangeringe',
-'recentchangestext' => 'op dees pagina kins doe de recènte verangeringe in deze wiki bekieke.',
+'recentchanges-summary' => 'op dees pagina kins doe de recènte verangeringe in deze wiki bekieke.',
'recentchanges-feed-description' => 'Volg de meis recente bewerkinge in deze wiki via deze feed.',
'recentchanges-label-newpage' => "Mit dees verangering is 'n nuuj pagina aangemaak",
'recentchanges-label-minor' => "Dit is 'n klein bewirking",
# Media information
'mediawarning' => "'''Waorsjuwing''': Dit bestandj kin 'n anger kood höbbe, door 't te doorveure in dien systeem kin 't gecompromeerde dinger oplevere.",
-'imagemaxsize' => "Meximale aafbeildjingsaafmaeting:<br/>''(veur besjrievingspaasj)''",
+'imagemaxsize' => "Meximaal aafbeildjingsaafmaeting:<br />''(veur besjrievingspaasj)''",
'thumbsize' => 'Gruutde vanne thumbnail:',
'widthheightpage' => "$1 × $2, $3 {{PLURAL:$3|pazjena|pazjena's}}",
'file-info' => 'bestandsgruutde: $1, MIME-type: $2',
'nchanges' => '$1 {{PLURAL:$1|modiffica|modiffiche}}',
'recentchanges' => 'Ùrtimi cangiamenti',
'recentchanges-legend' => 'Inpostaçioìn de lìùrtimi cangiaménti',
-'recentchangestext' => "Questa pàgina a g'ha di càngi ciù reçenti a-i contegnûi do scîto.",
+'recentchanges-summary' => "Questa pàgina a g'ha di càngi ciù reçenti a-i contegnûi do scîto.",
'recentchanges-feed-description' => "Questo feed o g'ha di cangiaménti ciù reçenti a-i contegnûi do scîto.",
'recentchanges-label-newpage' => "Sto cangiaménto o l'à creòu 'na pàgina nêuva",
'recentchanges-label-minor' => 'Cangiamento minô (m)',
'nchanges' => '$1 {{PLURAL:$1|mõitõks|mõitõkst}}',
'recentchanges' => 'Perrizt mõitõkst',
'recentchanges-legend' => 'Perrizt mõitõkst',
-'recentchangestext' => 'Vaņ sīe līed pǟl tīedõd perīži mõitõkši.',
+'recentchanges-summary' => 'Vaņ sīe līed pǟl tīedõd perīži mõitõkši.',
'recentchanges-feed-description' => 'Vaņ iļ vikipēdijõz tīedõd perīži mõitõkši.',
'recentchanges-label-newpage' => 'Se mõitõks luoi ūd līed',
'recentchanges-label-minor' => 'Se um ikš piški parāmtimi',
'nchanges' => '$1 {{PLURAL:$1|pakeitimas|pakeitimai|pakeitimų}}',
'recentchanges' => 'Naujausi keitimai',
'recentchanges-legend' => 'Naujausių keitimų parinktys',
-'recentchangestext' => 'Šiame puslapyje yra patys naujausi pakeitimai šiame projekte.',
+'recentchanges-summary' => 'Šiame puslapyje yra patys naujausi pakeitimai šiame projekte.',
'recentchanges-feed-description' => 'Sekite pačius naujausius projekto keitimus šiame šaltinyje.',
'recentchanges-label-newpage' => 'Šiuo keitimu sukurtas naujas puslapis',
'recentchanges-label-minor' => 'Tai smulkus pakeitimas',
'underline-always' => 'Ziah/ngei ngei',
'underline-never' => 'Ngai lo',
-'underline-default' => 'Browser duhdàn',
+'underline-default' => 'Rängpuifanna duhdàn',
# Font style option in Special:Preferences
'editfont-style' => 'Siamţhatna hmun hawrawp pian',
-'editfont-default' => 'Browser duhdàn',
+'editfont-default' => 'Rängpuifanna duhdàn',
'editfont-monospace' => 'Hawrawp inkar rualkhai',
'editfont-sansserif' => 'Sans-serif hawrawp',
'editfont-serif' => 'Serif hawrawp',
'january' => 'Pawlkut',
'february' => 'Ramtuk',
'march' => 'Vau',
-'april' => 'Ţau',
-'may_long' => 'Ţomir',
+'april' => 'Ṭau',
+'may_long' => 'Ṭomir',
'june' => 'Nikir',
'july' => 'Vawkhniahzawn',
-'august' => 'Thiţin',
+'august' => 'Thiṭin',
'september' => 'Mimkut',
'october' => 'Khuangchawi',
'november' => 'Sahmulphah',
'errorpagetitle' => 'Dik lo',
'returnto' => '$1 phekah kir leh rawh.',
-'tagline' => '{{SITENAME}} aţangin',
-'help' => 'Ţanpuina',
+'tagline' => '{{SITENAME}} aṭangin',
+'help' => 'Ṭanpuina',
'search' => 'Zawnna',
'searchbutton' => 'Zawng rawh le',
'go' => 'Kal rawh le',
'nchanges' => 'Tihdanglam {{PLURAL:$1||$1-te}}',
'recentchanges' => 'Tihdanglam thar',
'recentchanges-legend' => 'Tihdanglam thar duhdàn',
-'recentchangestext' => 'He phek wiki-a tihdanglamna thar deuh deuhte chhui rawh.',
+'recentchanges-summary' => 'He phek wiki-a tihdanglamna thar deuh deuhte chhui rawh.',
'recentchanges-feed-description' => 'He chawm-a wiki tihdanglamna thar deuh deuhte chhui rawh.',
'recentchanges-label-newpage' => 'He siamţhat hian phêk thar a siam',
'recentchanges-label-minor' => 'Hei hi siamţhatna tenau a ni',
'minoreditletter' => 't',
'newpageletter' => 'T',
'boteditletter' => 'k',
+'newsectionsummary' => '/* $1 */ hläwm thar',
'rc-enhanced-expand' => 'Tilang kim rawh (JavaScript a ngai)',
'rc-enhanced-hide' => 'Thup ţhenna',
'rc-old-title' => 'Atìra "&1" tih hming pú-a siam.',
'upload-recreate-warning' => "'''Vaukhànna: Hemi hming pu taksa hi sawn tawh emaw paih tawh a ni.'''
I ràwnah paihna leh sawnna chhinchhiahna thuziak kan rawn chhawpchhuak e:",
+'uploadtext' => "Taksa hlankai nan a hnuaia lehkha hi hmang rawh.
+Ahmaa taksa hlankaisaho en tùr emaw zawng tùr chuan [[Special:FileList|taksa hlankai tawh zawng zawng tlarna]] tihah hian kal rawh; hlankai (nawn)ho pawh [[Special:Log/upload|hlankai chhinchhiahna]]-ah vawnfel an ni a, paih tawhho pawh [[Special:Log/delete|paihho chhinchhiahna]]-ah chhinchhiah fel vek an ni.
+
+Phêka taksa hmang tùrin ahnuaia tihphung engemaw ni ber hmang khuan zawmna i siam thei ang:
+*A taksa pumpui hmang tùr chuan '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' tiin. Heti hi chuan taksa hi i sezawl chhuah a ni.
+*Phêk veilam síra 'Sawifiahna' hmanga 200px-a liana i tàrlan duh chuan '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|Sawifiahna]]</nowiki></tt>''' tiin.
+*A taksa tárlang lova zawm ringawt i duh chuan '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>''' tiin.",
'upload-permitted' => 'Taksa phal chiho: $1.',
'upload-preferred' => 'Taksa duh deuh bîk: $1.',
'upload-prohibited' => 'Taksa khap: $1.',
-'uploadlog' => 'chanchin hlankaina',
+'uploadlog' => 'hlankai chhinchhiahna',
'uploadlogpage' => 'Hlankai chhinchhiahna',
+'uploadlogpagetext' => 'Taksa hlankai thar deuh deuh kan rawn tlar chhuak e.
+A aia hmuhnawm deuh zâwka i thlìr duh chuan [[Special:NewFiles|taksa hlankai thar tàrhmunpui]]-ah i kal thei ang.',
'filename' => 'Taksahming',
-'filedesc' => 'Laktawi',
-'fileuploadsummary' => 'Kaihtawi:',
+'filedesc' => 'Sawifiahna täwi',
+'fileuploadsummary' => 'Sawifiahna täwi:',
'filereuploadsummary' => 'Taksa tihdanglamna:',
-'filestatus' => 'Copyright dinhmun:',
+'filestatus' => 'Lâkchhàwn phalphung dinhmun:',
'filesource' => 'Hnar:',
'uploadedfiles' => 'Taksa hlankai tawhte',
'ignorewarning' => 'Vaukhanna ngaihthah la taksa dahţha lui rawh',
A hming thlâk la bei ţha leh rawh.',
'filename-toolong' => 'Taksahming 240 bytes aiin a sei tùr a ni lo.',
'badfilename' => 'Taksahming "$1"-ah thlâk a ni.',
-'filetype-missing' => 'Taksa in tawpna a nei lo (entirna ".jpg").',
+'filetype-missing' => 'Taksain tawpna a nei lo (entirna ".jpg").',
'empty-file' => 'I taksa thehluh kha a ruak.',
'file-too-large' => 'A lian leh lutuk.',
'filename-tooshort' => 'Taksahming a sawi leh lutuk.',
'illegal-filename' => 'Taksahming phal loh.',
'overwrite' => 'Taksa awmsa ziah hnan khap a ni.',
'unknown-error' => 'Dikhlelhna hriat loh a lo thleng.',
+'tmp-create-error' => 'Taksa lailâwk a siam theih loh.',
+'tmp-write-error' => 'Taksa lailâwk ziah a tlawlh',
+'large-file' => 'Taksa rëng rëng $1 aia lian lo tùra duh a ni;
+he taksa hi $2 lái a ni.',
+'largefileserver' => 'Hë taksa hi rawngbawltu phaltir zât aia ritsak a ni.',
+'windows-nonascii-filename' => 'Hë wiki hian taksahminga chhinchhiahna bîk tel a pawm thei lo.',
+'savefile' => 'Taksa dahṭhatna',
'uploadedimage' => 'hlankai: "[[$1]]"',
+'upload-source' => 'Hnar taksa',
+'sourcefilename' => 'Hnar taksahming:',
+'sourceurl' => 'Hnar URL:',
+'destfilename' => 'Tumhmun taksahming:',
+'upload-maxfilesize' => 'Taksa lenzáwng bituk: $1 aia lian lo.',
+'upload-description' => 'Taksa sawifiahna',
+'upload-options' => 'Hlankai duhdàn thlanna',
+'watchthisupload' => 'Hë taksa hi vil rawh',
+'filewasdeleted' => 'He hming pu taksa hi ahmaah lo hlankai tawh a ni a, paihbo leh nghâl a ni.
+Hlankai leh i tum hmain $1 i thlïthläi deuh dawn nia.',
+'upload-success-subj' => 'Hlawhtling taka hlankai a ni',
+'upload-success-msg' => '[$2] aṭangin i hlangkai hlawhtling ta e. Hetah hian hman theihin a awm ta: [[:{{ns:file}}:$1]]',
+'upload-failure-subj' => 'Hlankai rokhawlhna',
+'upload-failure-msg' => '[$2] aṭanga i hlankai tumnaah rokhawlhna a awm tlat:
+
+$1',
+'upload-warning-subj' => 'Hlankai vauhkhànna',
+'upload-warning-msg' => '[$2] aṭanga i hlankaiah rokhawlhna a awm tlat. [[Special:Upload/stash/$1|Hlankaina lehkha]]-ah chingfel tùrin i lêt leh thei ang.',
+
+'upload-proto-error' => 'Inpawhphung dikhlel',
+'upload-file-error' => 'Chhúnglam dik lohna',
-'license' => 'Phalna:',
-'license-header' => 'Phalna:',
+'license' => 'Phalphung:',
+'license-header' => 'Phalphung:',
+'nolicense' => 'I la thlang lo',
+'license-nopreview' => '(Endik chhin theih loh)',
+'upload_source_url' => '(URL tláng pawh theih, nung bawk)',
+'upload_source_file' => '(i khawlthlûakneia mi taksa)',
# Special:ListFiles
-'imgfile' => 'taksa (file)',
+'listfiles-summary' => 'Hë vohbîk phêk hian taksa hlankai tawh zawng zawng a pholang.
+Hmangtu azira i thliarhran erawh chuan a hmangtuina a hlankai hnuhnüng ber taksa chauh pholan a ni.',
+'listfiles_search_for' => 'Media hming zawnna:',
+'imgfile' => 'taksa',
'listfiles' => 'Taksa tlarna',
'listfiles_thumb' => 'Kutbï',
'listfiles_date' => 'Ni',
'filehist-missing' => 'Taksa a awm lo',
'imagelinks' => 'Bungraw hmanna',
'linkstoimage' => 'A hnuai {{PLURAL:$1|phek 1|phek $1-te}} hian he taksa hi a hmang:',
+'linkstoimage-more' => 'Hë taksa hi phêk {{PLURAL:$1||}} $1 aia tamin a zawm/hmang.
+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}}.',
+'linkstoimage-redirect' => '$1 (taksa hruailuhna) $2',
+'sharedupload' => 'Hë taksa hi $1-a mi a ni a, hna-hmachhawp dangin a hmang vè mai thei.',
+'sharedupload-desc-there' => 'Hë taksa hi $1-a mi a ni a, hna-hmachhawp dangin a hmang ve mai thei.
+Hriattirna dang chu [$2 taksa sawifiahna phêk]-ah hian i en thei ang.',
'sharedupload-desc-here' => 'He taksa hi $1-a mi a ni a, hna-hmachhawp dangin an hmang ve mai thei.
-[Taksa sawifiahna phek $2]-a sawifiahna lang hetah hian kan rawh chhawp chhuak e.',
+[$2 Taksa sawifiahna phek]-a sawifiahna lang hetah hian kan rawh chhawp chhuak e.',
+'sharedupload-desc-edit' => 'Hë taksa hi $1-a mi a ni a, hna-hmachhawp dangin a hmang vè mai thei.
+Taksa sawifiahna hi i siamṭha duh a nih chuan [$2 taksa sawifiahna phêk] aṭang hian i siamṭha thei ang.',
+'sharedupload-desc-create' => 'Hë taksa hi $1-a mi a ni a, hna-hmachhawp dangin a hmang vè mai thei.
+Taksa sawifiahna hi i siamṭha duh a nih chuan [$2 taksa sawifiahna phêk] aṭang hian i siamṭha thei ang.',
'filepage-nofile' => 'He hmingpu taksa a awm lo',
'filepage-nofile-link' => 'He hming pu taksa hi a awm lo va, mahsé i [$1 hlangkai thei] ang.',
'uploadnewversion-linktext' => 'He taksa chhuah thar hi hlangkai rawh',
'filerevert' => '$1 tilêt rawh',
'filerevert-legend' => 'Taksa tilêt rawh',
+# MIME search
+'mimetype' => 'MIME chî:',
+'download' => 'hnuhthlâkna',
+
+# Unwatched pages
+'unwatchedpages' => 'Vèn loh phêkte',
+
+# List redirects
+'listredirects' => 'Hruailuhna phêkte',
+
+# Unused templates
+'unusedtemplates' => 'Siamsa hman lohte',
+'unusedtemplateswlh' => 'zawmna dang',
+
# Random page
'randompage' => 'Phêk kahpah',
+'randompage-nopages' => "{{PLURAL:$2|Hë hminghmunah hian|Hê'ng hminghmunahte hian}} phêk pakhat mah a awm lo: $1.",
+
+# Random redirect
+'randomredirect' => 'Hruailuhna kahpah',
+'randomredirect-nopages' => '"$1" hminghmunah hian hruailuhna phêk pakhat mah a awm lo.',
# Statistics
'statistics' => 'Lepsena',
+'statistics-header-pages' => 'Phêk lepsena',
+'statistics-header-edits' => 'Siamṭhatphung lepsena',
+'statistics-header-views' => 'Tlawhna lepsèna',
+'statistics-header-users' => 'Hmangtute chanchin kimchang',
+'statistics-header-hooks' => 'Chanchin dang',
+'statistics-articles' => 'Thuziakna phêkte',
'statistics-pages' => 'Phekte',
-
+'statistics-pages-desc' => 'Hë wiki-a phêk awm zawng zawng, sawihona phêk, hruailuhna phêk ladt. tel vekin.',
+'statistics-files' => 'Taksa hlankaite',
+'statistics-edits' => '{{SITENAME}} din achina phêk khawih danglam zât',
+'statistics-edits-average' => 'Phêk khat zëla siamṭhat zât chawhrual',
+'statistics-views-total' => 'Tlawh zât',
+'statistics-views-total-desc' => 'Phêk awm lo leh phêk vohbîkte tlawhna chu chhiar tel a ni lo',
+'statistics-views-peredit' => 'Siamṭhat pakhat zël tlawh zât',
+'statistics-users' => '[[Special:ListUsers|Hmangtu]] inziaklût zât',
+'statistics-users-active' => 'Hmangtu aktif zât',
+'statistics-users-active-desc' => 'Ni {{PLURAL:$1|khat|$1}} kaltâ chhunga thiltih nei hmangtuho',
+'statistics-mostpopular' => 'Phêk thlir zin deuh deuhte',
+
+'disambiguations' => 'Thliarfelna phêk zawmtu phêkte',
'disambiguationspage' => 'Template:thliar',
+'doubleredirects' => 'Hruailuhna phír',
+'double-redirect-fixed-move' => '[[$1]] sawn a ni ta.
+[[$2]] lama hruailuhna siam nghâl a ni.',
+'double-redirect-fixed-maintenance' => '[[$1]] aṭanga [[$2]] hruailuhna phír chinfel.',
+'double-redirect-fixer' => 'Hruailuhna chingfeltu',
+
+'brokenredirects' => 'Hruailuhna kehchhia',
+'brokenredirectstext' => 'Ahnuaia hruailuhnate hian phêk awm lova hruailuh an tum:',
'brokenredirects-edit' => 'siamţhatna',
'brokenredirects-delete' => 'paihna',
# Miscellaneous special pages
'nbytes' => 'Bait {{PLURAL:$1||}} $1',
-'nmembers' => 'Tel (a chhunga awm) {{PLURAL:$1||$1}}',
+'nmembers' => 'A chhungah {{PLURAL:$1||$1}} a awm.',
+'nrevisions' => 'siamṭhatna $1 {{PLURAL:$1||}}',
+'nviews' => 'vawi $1 {{PLURAL:$1||}} ràwn a ni tawh.',
+'nimagelinks' => 'Phêk $1-ah {{PLURAL:$1||}} hman a ni.',
+'ntransclusions' => 'phêk $1-ah {{PLURAL:$1||}} hman a ni.',
+'specialpage-empty' => 'Thuhawn a awm lo tlat.',
+'lonelypages' => 'Phêk fahrahte',
+'uncategorizedpages' => 'Páwl nei lo phêkte',
+'uncategorizedcategories' => 'Páwl nei lo páwlte',
+'uncategorizedimages' => 'Páwl nei lo taksate',
+'uncategorizedtemplates' => 'Páwl nei lo siamsâte',
+'unusedcategories' => 'Páwl hman lohte',
+'unusedimages' => 'Taksa hman hlawh lote',
'popularpages' => 'Phêk lärte',
-'prefixindex' => 'Hmabet nei phek zawng zawng',
+'wantedcategories' => 'Páwl mamawhte',
+'wantedpages' => 'Phêk mamawhte',
+'wantedpages-badtitle' => 'Phêk hming dik lo: $1',
+'wantedfiles' => 'Taksa mamawhte',
+'wantedtemplates' => 'Siamsa mamawhte',
+'mostlinked' => 'Phêk zawm hlawh berte',
+'mostlinkedcategories' => 'Pawl zawm hlawh berte',
+'mostlinkedtemplates' => 'Siamsa hman hlawh berte',
+'mostcategories' => 'Telna páwl ngah ber phêkte',
+'mostimages' => 'Taksa hman hlawh berte',
+'mostrevisions' => 'Phêk siam danglam zin berte',
+'prefixindex' => 'Hemi hmabet nei phek zawng zawng',
+'prefixindex-namespace' => 'Hemi ($1 hminghmun) hmabeta neih phêk zawng zawngte',
+'shortpages' => 'Phêk täwite',
+'longpages' => 'Phêk seite',
+'deadendpages' => 'Phêk ralthümte',
+'deadendpagestext' => 'A hnuaia phêkte hian {{SITENAME}}-a phêk dang pakhat mah zawmpui an nei lo.',
+'protectedpages' => 'Phêk vènhimte',
+'protectedpages-indef' => 'Phêk vènhim kumhlunho chauh',
+'protectedpagestext' => 'A hnuaia phêkte hi sawn emaw siam danglam theih loh tùra vènhim an ni',
+'protectedtitles' => 'Hming vènhimte',
+'listusers' => 'Hmangtu tlarna',
+'listusers-editsonly' => 'Siam danglam nei hmangtu chauh pholang rawh',
+'listusers-creationsort' => 'Siam ni indawtin tlar rawh',
+'usereditcount' => 'Siam danglam {{PLURAL:||}} $1',
'usercreated' => '{{GENDER:$3|}} Ni $1, dar $2-a siam',
'newpages' => 'Phek tharte',
'newpages-username' => 'Hmangtu hming:',
'ancientpages' => 'Phek hluiho',
'move' => 'Sawnna',
+'movethispage' => 'Hë phêk hi sawn rawh',
+'notargettitle' => 'Tumhmun nei lo',
+'nopagetitle' => 'Hetiang tumhmun phêk hi a awm lo',
+'nopagetext' => 'I tumhmun sawi kher kha a awm lo niin a lang.',
'pager-newer-n' => '{{PLURAL:$1|thar zawk 1|thar zawk $1}}',
'pager-older-n' => '{{PLURAL:$1|hlui 1|hlui $1}}',
+'suppress' => 'Hmuh hmaih',
# Book sources
'booksources' => 'Lehkhabu rawnte',
'booksources-go' => 'Kal rawh le',
# Special:Log
+'specialloguserlabel' => 'Buatsaihtu:',
+'speciallogtitlelabel' => 'Tumhmun (hming emaw hmangtu):',
'log' => 'Chanchin-ziak',
+'all-logs-page' => 'Chanchin-ziak vàntlang thilte:',
+'log-title-wildcard' => 'Hë thüa inṭan hmingte hi zawng rawh',
# Special:AllPages
'allpages' => 'Phek zawng zawngte',
-'alphaindexline' => '$1 aţanga $2',
+'alphaindexline' => '$1 aṭanga $2',
'nextpage' => 'Phek dawt ($1)',
'prevpage' => 'Phêk hmasa ($1)',
+'allpagesfrom' => 'Hemi aṭanga inṭan hian pholang rawh:',
+'allpagesto' => 'Hemi chin thleng hian:',
'allarticles' => 'Phek zawng zawngte',
'allinnamespace' => 'Phêk zawng zawng (hminghmun $1-a mi)',
'allnotinnamespace' => 'Phêk zawng zawng (hminghmun $1-a awm lo)',
'allpagesprefix' => 'Hemi thuhmabeta neih zawng hi pholang rawh:',
'allpagesbadtitle' => 'Phêk hming dik lo emaw ţawng dang/wiki dang thuhmabet a hmang palh a nih hmel.
Phêk hminga hman awih loh hawrawp a hmang palh a ni mai thei bawk.',
+'allpages-bad-ns' => '{{SITENAME}} hian "$1" tih hminghmun a nei lo.',
+'allpages-hide-redirects' => 'Hruailuhna phêkho thup rawh',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'A thar ber thlirna.',
# Special:Categories
'categories' => 'Pawlte',
+'categoriespagetext' => 'A hnuaia pawl{{PLURAL:$1||te}} hian phêk emaw media a{{PLURAL:$1||n}} nei.
+Hetah hian [[Special:UnusedCategories|pawl hman lohho]] pholan tel a ni lo.
+[[Special:WantedCategories|Pawl mamawhho]] en bawk la.',
+'categoriesfrom' => 'Hemi-a inṭan pawlho hi pholang rawh:',
+'special-categories-sort-count' => 'a chhúnga thil awm zât azirin thliar rawh',
'special-categories-sort-abc' => 'a-aw-b indawtin',
# Special:DeletedContributions
+'deletedcontributions' => 'Hmangtu kutthawhna paihbo tawhte',
+'deletedcontributions-title' => 'Hmangtu kutthawhna paihbo tawhte',
'sp-deletedcontributions-contribs' => 'kutthawhnate',
# Special:LinkSearch
+'linksearch' => 'Zawmchhuahna zawnna',
+'linksearch-pat' => 'Thu zawn:',
'linksearch-ns' => 'Hminghmun:',
-'linksearch-ok' => 'Zawng rawh',
+'linksearch-ok' => 'Zawng rawh le',
'linksearch-line' => '$1 hi $2 aţanga thlunzawm a ni',
+# Special:ListUsers
+'listusersfrom' => 'Hemi-a inṭanin hmangtuho pholang rawh:',
+'listusers-submit' => 'Pholanna',
+'listusers-noresult' => 'Hmangtu an awm lo.',
+'listusers-blocked' => '(danbeh)',
+
+# Special:ActiveUsers
+'activeusers' => 'Hmangtu hlun tlarna',
+'activeusers-hidebots' => 'Khawlmi thupna',
+'activeusers-hidesysops' => 'Roreltu thupna',
+'activeusers-noresult' => 'Hmangtu awm lo.',
+
# Special:Log/newusers
'newuserlogpage' => 'Hmangtu siamna chanchin-ziak',
+'newuserlogpagetext' => 'Hei hi hmangtu siangchan siam chhinchhiahna a ni.',
# Special:ListGroupRights
+'listgrouprights' => 'Hmangtu pawl dikna-chanvote',
+'listgrouprights-key' => '* <span class="listgrouprights-granted">Dikna-chanvo phalsak</span>
+* <span class="listgrouprights-revoked">Dikna-chanvo hnuhkirsak</span>',
+'listgrouprights-group' => 'Pawl',
+'listgrouprights-rights' => 'Dikna-chanvo',
+'listgrouprights-helppage' => 'Help:Pawl dikna-chanvo',
'listgrouprights-members' => '(tel zawng zawng)',
+'listgrouprights-addgroup' => '{{PLURAL:$2|Pawl|Pawl}} belhna: $1',
# E-mail user
'emailuser' => 'He hmangtu hi e-lehkha thawn rawh',
'watchlist' => 'Ka ralvèn',
'mywatchlist' => 'Ka ralvèn',
'watchlistfor2' => '$1 tan $2',
-'nowatchlist' => 'I ràlvènah engmah i nei lo.',
-'watchlistanontext' => 'I ralvèn en tùrin emaw siamţha tùrin $1 rawh.',
+'nowatchlist' => 'Rálvèn i nei lo',
+'watchlistanontext' => 'I ralvèn en tùrin emaw siamṭha tùrin $1 rawh.',
'watchnologin' => 'I la lût lo',
'watchnologintext' => 'I ralvèn tidanglam tùrin i [[Special:UserLogin|inziahluh]] a ngai.',
'addwatch' => 'Ràlvèn zingah telh rawh',
'unwatch' => 'Vil tihtawpna',
'unwatchthispage' => 'Vil tihtawpna',
'notanarticle' => 'Phêk dikdawh a ni lo.',
+'notvisiblerev' => 'Hmangtu dang tihdanglamna thar paihbo a ni.',
'watchnochange' => 'I hun sawi chhungah khan i ralvèn khawih buai a ni lo.',
'watchlist-details' => 'I ralvèn zing aţanga {{PLURAL:$1| phêk $1 |phêk $1}}, sawihona phêk chhiar lohvin.',
'wlheader-enotif' => '*E-lehkha inhriattirna tihnun a ni.',
'wlshowlast' => 'Darkar $1 kalta-a tihdanglam tilang rawh , ni $2 kalta-a tihdanglam tilang rawh, $3 tilang rawh',
'watchlist-options' => 'Ralvèn duhdàn',
+'enotif_impersonal_salutation' => '{{SITENAME}} hmangtu',
+'changed' => 'tihdanglam a ni ta',
+'created' => 'siam a ni ta',
+'enotif_subject' => '{{SITENAME}} phêk $PAGETITLE tih hi $CHANGEDORCREATED, $PAGEEDITOR bultum a ni.',
+'enotif_lastvisited' => 'I tlawh hnuhnùn ber hnu lama tihdanglam zawng zawng en i duh chuan $1 en rawh.',
+'enotif_lastdiff' => 'Hë tihdanglamna hi en tùrin $1 thlír rawh.',
+'enotif_anon_editor' => 'hmangtu hriat loh $1',
+
# Delete
+'deletepage' => 'Hë phêk hi paih rawh',
+'confirm' => 'Tihchianna',
+'excontent' => 'kentel: "$1"',
+'excontentauthor' => 'kentel: "$1" (kutthawhtu awm chhun "[[Special:Contributions/$2|$2]])',
+'exbeforeblank' => 'tihruah hmaa a thufùn: $1',
+'exblank' => 'phêk ruak a ni',
+'delete-confirm' => '"$1" paihbona',
+'delete-legend' => 'Nuaibona',
+'historywarning' => "'''Vàukhànna:''' I nuaibo tum phêk hian khawih danglam vawi $1{{PLURAL:$1||}} vêl zet a lo tâwk tawh.",
+'confirmdeletetext' => 'Phêk pakhat leh a chanchin-ziak zawng zawng i nuaibo vek dawn mék a ni.
+Hei hi i tih tum rëng a ni a, a hnuleh i hre chiang a, [[{{MediaWiki:Policy-url}}|rèlphung]] dàn zúl i zui ngèi a ni tih finfiah phawt rawh le.',
'actioncomplete' => 'A zo ta',
'actionfailed' => 'A tlawlh',
+'deletedtext' => '"$1" nuaibo a ni ta.
+Tün hnäia nuaibo thar chhinchhiahna $2-ah i en thei ang.',
'dellogpage' => 'Nuaibo chhinchhiahna',
+'dellogpagetext' => 'A hnuaiah hian tün hnaia nuaibo tharho kan rawn chhawp chhuak e.',
+'deletionlog' => 'nuaibo chhinchhiahna',
+'reverted' => 'Awmphung hluiah dah lêt a ni',
+'deletecomment' => 'Chhan:',
+'deleteotherreason' => 'Chhan dang:',
+'deletereasonotherlist' => 'Chhan dang',
+'deletereason-dropdown' => '*Nuaibo chhan hluar zualte
+**Phêk siamtu ngenna
+**Lâkchhàwn phalphung bawhpelhna
+**Inchirhthehna',
+'delete-edit-reasonlist' => 'Nuaibo chhan siamṭhatna',
+'delete-toobig' => 'Hë phêk hian siam danglam a tâwk ngun mangkhèng, vawi $1 {{PLURAL:$1||}} chüang zet.
+Hetiang phêk nuaibo hi hrêk deuh hlek a ni, tum loh puia {{SITENAME}} tihchingpen däl tùrin.',
+'delete-warning-toobig' => 'Hë phêk hian tihdanglam a lo tâwk nasa tawh mangkhèng, vawi $1 {{PLURAL:$1||}} chüang zet.
+Hemi nuaibo hian {{SITENAME}} hriatna-khawlpui hnathawh a tisukuk palh thei;
+fimkhur zui hräm ang che.',
# Rollback
+'rollback' => 'Siamṭhatna sûtna',
+'rollback_short' => 'Sûtlêtna',
'rollbacklink' => 'sûtlêtna',
+'rollbackfailed' => 'Sûtlêt a tlawlh',
+'cantrollback' => 'Siamṭhatna a sûtlêt theih loh;
+a siamṭhatu hnuhnüng ber hi hë phêk tawktu awm chhun a la ni tlat.',
+'editcomment' => "Siamṭhatna kaihtawi: \"''\$1''\".",
+'rollback-success' => '$1-in siamṭhana a sûtlêt a;
+$2-in a awmphung ngäiah a dahlêt leh.',
+
+# Edit tokens
+'sessionfailure-title' => 'Hun hman tlawlh!',
# Protect
'protectlogpage' => 'Venhim chhinchhiahna',
'protectedarticle' => 'venhim: "[[$1]]"',
+'modifiedarticleprotection' => '"[[$1]]" vènhimphung a thlâk',
+'unprotectedarticle' => '"[[$1]]" laka vènhimna a nuaibo',
+'movedarticleprotection' => 'vènhimna herremphung "[[$2]]" aṭang "[[$1]]"-ah a sawn',
+'protect-title' => '"$1" vènhimphung thlâkna',
+'protect-title-notallowed' => '"$1" vènhimphung thlìrna',
+'prot_1movedto2' => '[[$1]] kha [[$2]]-ah sawn a ni',
+'protect-badnamespace-title' => 'Hminghmun vènhim theih loh',
+'protect-badnamespace-text' => 'Hë hminghmuna phêkte hi vènhim theih a ni lo.',
+'protect-legend' => 'Vènhim tihchianna',
+'protectcomment' => 'Chhan:',
+'protectexpiry' => 'Tàwp hun:',
+'protect_expiry_invalid' => 'A tàwp hun i sawi kha a hman theih loh.',
+'protect_expiry_old' => 'A tàwp hun i thlan kha a thleng tawh!',
+'protect-unchain-permissions' => 'Vènhimna duhthlan dang chhuah zalenna',
+'protect-expiring' => '$1 (UTC) thleng',
+'protect-expiring-local' => '$1 thleng',
+'protect-expiry-indefinite' => 'tiamchin awm lo',
+'protect-cascade' => 'Hë phêka ziahhnanho pawh vénghim vek rawh (vènhim inkhaidiat)',
+'protect-cantedit' => 'Hë phêk vènhimphung hi i thlâk thei lo, siamṭhat phalna i neih loh vàng a ni.',
+'protect-othertime' => 'Hun dang:',
+'protect-othertime-op' => 'hun dang',
+'protect-existing-expiry' => 'Tàwphun awm sa: $3, $2',
+'protect-otherreason' => 'Chhan dang:',
+'protect-otherreason-op' => 'Chhan dang',
+'protect-dropdown' => '*Vènhim chhan lär zualte
+**Inchirhthehna hlüar lutuk
+**Infakmawina hleihlûak
+**Siamṭhat inchuhna pawi tham
+̆**Phêk tlawh nasat',
+'protect-edit-reasonlist' => 'Vènhim chhan siamṭhatna',
+'protect-expiry-options' => 'darkar 1:1 hour, ni 1:1 day, kar 1:1 week, kar 2:2 weeks, thla 1:1 month, thla 3:3 months, thla 6:6 months, kum 1:1 year, tiam chin awm lo:infinite',
+'restriction-type' => 'Phalna:',
+'restriction-level' => 'Hrêkphung:',
+'minimum-size' => 'Têtzáwng tiamchin',
+'maximum-size' => 'Lenzáwng bituk:',
+'pagesize' => '(bait)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Siamṭhatna',
+'restriction-move' => 'Sawnna',
+'restriction-create' => 'Siamna',
+'restriction-upload' => 'Hlànkàina',
+
+# Restriction levels
+'restriction-level-sysop' => 'vènhim pumhlùm',
+'restriction-level-autoconfirmed' => 'hualna',
+'restriction-level-all' => 'a enga pawh',
# Undelete
+'undelete' => 'Phêk nuaibo tawhho thlìrna',
'undeletelink' => 'enna/ngaiawhtirna',
'undeleteviewlink' => 'enna',
'undelete-search-submit' => 'Zawnna',
'ipbreasonotherlist' => 'Chhan dang',
'ipbsubmit' => 'Hmangtu dangbet rawh',
'ipboptions' => 'darkar 2:2 hours, ni 1:1 day, ni 3:3 days, kar 1:1 week, kar 2:2 weeks, thla 1:1 month, thla 3:3 months, thla 6:6 months, kum 1:1 year, tiam chin awm lo:infinite',
+'ipb-blockingself' => 'Nangmah leh nangmah i indäl dáwn! I duh chiah maw?',
'ipblocklist' => 'Hmangtu danbeh-ho',
'ipblocklist-legend' => 'Hmangtu danbeh zawng rawh',
'blocklink' => 'danbehna',
Chu tlara zawmna dang awm reng reng chu bîk-thil-a ngaih a ni ang; tlar chhunga taksa awmna tùr phek kan tihna a nih chu.',
# Metadata
-'metadata' => 'Nepnawi (metadata)',
-'metadata-help' => 'He taksa hian hriatna dang a keng tel, thlalakna emaw ami siamna sekrek ilo aţanga lo awm a ni mai thei.
-He taksa hi a tira a nihphung tihdanglam tawh a nih chuan a chanchin ziah khuan a danglam hnu chanchin a huam tel lo mai thei.',
+'metadata' => 'Nepnawi',
+'metadata-help' => 'He taksa hian hriatna dang a keng tel; thlalakna emaw thlachhuina amah siamna sekrek ilo aṭanga lo awm a ni mai thei.
+He taksa hi a tira a nihphung tihdanglam tawh a nih chuan a chanchin ziah khuan a danglam hnu chanchin a hril kim lo mai thei.',
+'metadata-expand' => 'Chanchin kimchang tihlanna',
+'metadata-collapse' => 'Chanchin kimchang thup ṭhenna',
'metadata-fields' => 'Thlalâk chanchin nepnawi he thuthawna tihlante hi thlalâk phek pholan huna chanchin nepnawi dawhkan thleh a nihin tihlan a ni ang.
A bak zawng chu thuhrûk sa vek a ni ang.
* make
* gpsaltitude',
# EXIF tags
+'exif-imagewidth' => 'Zàuzáwng',
+'exif-imagelength' => 'Sànzáwng',
+'exif-bitspersample' => 'Péng khata mal(bit) awm zât',
+'exif-compression' => 'Sàwrtêtphung',
+'exif-photometricinterpretation' => 'Rawng inpawlhphung',
+'exif-orientation' => 'Hawizáwng',
+'exif-samplesperpixel' => 'Péng zât',
+'exif-planarconfiguration' => 'Hriatna inremphung',
+'exif-ycbcrsubsampling' => 'Y leh C inthlauhbï',
+'exif-ycbcrpositioning' => 'Y leh C ṭhuthmun',
+'exif-xresolution' => 'Pheizáwnga tihfiahphung',
+'exif-yresolution' => 'Tungzáwnga tihfiahphung',
+'exif-stripoffsets' => 'Thlalâk hriattirna awmna',
+'exif-rowsperstrip' => 'Ṭhuang khata tlar zât',
+'exif-stripbytecounts' => 'Ṭhuang zàwr zìmtina byte awm zât',
+'exif-jpeginterchangeformat' => 'JPEG SOI dahhmun',
+'exif-jpeginterchangeformatlength' => 'JPEG hriattirna lenzawng (Byte-in)',
+'exif-whitepoint' => 'Hmun vár rawng nihphung',
+'exif-primarychromaticities' => 'Rawng bulbälte nihphung',
+'exif-datetime' => 'Taksa tihdanglam hun leh ni',
+'exif-imagedescription' => 'Lem hming',
+'exif-make' => 'Thlalâkna siamtu',
+'exif-model' => 'Thlalâkna sìamphung',
+'exif-software' => 'Khawlthlûak hman',
+'exif-artist' => 'Buatsaihtu',
+'exif-copyright' => 'Phalna kawltu',
+'exif-exifversion' => 'EXIF chhuah',
+'exif-flashpixversion' => 'Flashpix chhuah chhawmdàwl theih',
+'exif-colorspace' => 'Rawng hmun',
+'exif-componentsconfiguration' => 'Péngtinte awmzia',
+'exif-compressedbitsperpixel' => 'Lem sàwrzìmphung',
+'exif-pixelydimension' => 'Lem zauzáwng',
+'exif-pixelxdimension' => 'Lem sànzáwng',
+'exif-usercomment' => 'Hmangtu kamchhuak',
+'exif-relatedsoundfile' => 'Ritaksa laichinte',
+'exif-datetimeoriginal' => 'Hriattirna siamchhuah hun leh ni',
+'exif-datetimedigitized' => 'Tihkhàwl hun leh ní',
+'exif-subsectime' => 'Tihdanglam hun leh ni',
+'exif-exposuretime' => 'Phochhuah hun',
+'exif-fnumber' => 'F zât',
'exif-source' => 'Hnar:',
'exif-writer' => 'Ziaktu',
'exif-languagecode' => 'Ţawng',
#Tbchb zawng zawng hemi tlar chungah hian dah tùr. He tlar hi a nih ang ngai ngaia hnutchhiah tùr </pre>',
# Special:Tags
-'tag-filter' => '[[Special:Tags|Tag]] thlitfimna:',
+'tag-filter' => '[[Special:Tags|Sawirelh]] thlitfimna:',
+'tag-filter-submit' => 'Thlitfimna',
+'tags-title' => 'Sawirelh',
+'tags-tag' => 'Sawirelh hming',
+'tags-display-header' => 'Tihdanglam tlarna-a landàn',
+'tags-description-header' => 'Awmze sawifiahna kimchang',
+'tags-hitcount-header' => 'Tihdanglam sawirelhte',
+'tags-edit' => 'siamṭhatna',
# New logging system
'logentry-move-move' => '$3 tih phêk kha $4-ah $1 hian a thlâk.',
'nchanges' => '$1 {{PLURAL:$1|izmaiņa|izmaiņas}}',
'recentchanges' => 'Pēdējās izmaiņas',
'recentchanges-legend' => 'Pēdējo izmaiņu iespējas',
-'recentchangestext' => 'Šajā lapā ir šitajā viki izdarītās pēdējās izmaiņas.',
+'recentchanges-summary' => 'Šajā lapā ir šitajā viki izdarītās pēdējās izmaiņas.',
'recentchanges-feed-description' => 'Sekojiet līdzi jaunākajām izmaiņām vikijā izmantojot šo barotni.',
'recentchanges-label-newpage' => 'Šī ir jaunizveidota lapa',
'recentchanges-label-minor' => 'Šī ir maznozīmīga izmaiņa',
* @author Shinjiman
*/
+$specialPageAliases = array(
+ 'Activeusers' => array( '躍簿' ),
+ 'Allmessages' => array( '官話' ),
+ 'Allpages' => array( '全典' ),
+ 'Ancientpages' => array( '陳年' ),
+ 'Blankpage' => array( '白頁' ),
+ 'Booksources' => array( '書海' ),
+ 'BrokenRedirects' => array( '斷渡' ),
+ 'Categories' => array( '類' ),
+ 'ChangePassword' => array( '易符節' ),
+ 'ComparePages' => array( '較頁' ),
+ 'Confirmemail' => array( '核郵驛' ),
+ 'Contributions' => array( '功績' ),
+ 'CreateAccount' => array( '增簿' ),
+ 'Deadendpages' => array( '此無路也' ),
+ 'DeletedContributions' => array( '已刪之積' ),
+ 'Disambiguations' => array( '釋義' ),
+ 'DoubleRedirects' => array( '窮渡' ),
+ 'EditWatchlist' => array( '治哨站' ),
+ 'Emailuser' => array( '遺書' ),
+ 'Export' => array( '出匯' ),
+ 'Fewestrevisions' => array( '鮮察' ),
+ 'FileDuplicateSearch' => array( '擇重檔' ),
+ 'Filepath' => array( '檔路' ),
+ 'Import' => array( '圖入匯' ),
+ 'Invalidateemail' => array( '消核郵驛' ),
+ 'BlockList' => array( '列禁簿、禁址' ),
+ 'LinkSearch' => array( '尋網連' ),
+ 'Listfiles' => array( '見檔' ),
+ 'Listgrouprights' => array( '權任一覽' ),
+ 'Listredirects' => array( '表轉' ),
+ 'Listusers' => array( '點簿' ),
+ 'Lockdb' => array( '閉庫' ),
+ 'Log' => array( '誌' ),
+ 'Lonelypages' => array( '孤寡' ),
+ 'Longpages' => array( '長言' ),
+ 'MergeHistory' => array( '併頁之誌' ),
+ 'MIMEsearch' => array( '篩檔' ),
+ 'Mostcategories' => array( '跨船' ),
+ 'Mostimages' => array( '名檔' ),
+ 'Mostlinked' => array( '好料' ),
+ 'Mostlinkedcategories' => array( '豪門' ),
+ 'Mostlinkedtemplates' => array( '美模' ),
+ 'Mostrevisions' => array( '屢審' ),
+ 'Movepage' => array( '遷' ),
+ 'Mycontributions' => array( '吾績' ),
+ 'Newimages' => array( '新圖之廊' ),
+ 'Newpages' => array( '新灶' ),
+ 'Preferences' => array( '簿註' ),
+ 'Prefixindex' => array( '依名索引' ),
+ 'Protectedpages' => array( '頁錮' ),
+ 'Randompage' => array( '清風翻書' ),
+ 'Randomredirect' => array( '任渡' ),
+ 'Recentchanges' => array( '近易' ),
+ 'Recentchangeslinked' => array( '援引' ),
+ 'Search' => array( '尋' ),
+ 'Shortpages' => array( '短篇' ),
+ 'Specialpages' => array( '特查' ),
+ 'Statistics' => array( '彙統' ),
+ 'Uncategorizedcategories' => array( '問栓' ),
+ 'Uncategorizedimages' => array( '候裱' ),
+ 'Uncategorizedpages' => array( '欲訂' ),
+ 'Uncategorizedtemplates' => array( '待蘸' ),
+ 'Undelete' => array( '覽刪' ),
+ 'Unlockdb' => array( '開庫' ),
+ 'Unusedcategories' => array( '樞鏽' ),
+ 'Unusedimages' => array( '色褪' ),
+ 'Unusedtemplates' => array( '墨乾' ),
+ 'Unwatchedpages' => array( '無哨頁' ),
+ 'Upload' => array( '進獻' ),
+ 'UploadStash' => array( '貢貯' ),
+ 'Userlogin' => array( '登簿' ),
+ 'Userlogout' => array( '去簿' ),
+ 'Userrights' => array( '秉治權任' ),
+ 'Version' => array( '版' ),
+ 'Wantedcategories' => array( '求門' ),
+ 'Wantedfiles' => array( '求檔' ),
+ 'Wantedpages' => array( '徵頁' ),
+ 'Wantedtemplates' => array( '徵模' ),
+ 'Watchlist' => array( '哨站' ),
+ 'Whatlinkshere' => array( '取佐' ),
+ 'Withoutinterwiki' => array( '孤語' ),
+);
+
/**
* A list of date format preference keys which can be selected in user
* preferences. New preference keys can be added, provided they are supported
',' => '',
);
-# -------------------------------------------------------------------
-# Default messages
-# -------------------------------------------------------------------
-# Allowed characters in keys are: A-Z, a-z, 0-9, underscore (_) and
-# hyphen (-). If you need more characters, you may be able to change
-# the regex in MagicWord::initRegex
-
$messages = array(
# User preference toggles
'tog-underline' => '鏈墊線:',
* @author Bombola
* @author Dato deutschland
* @author Dawid Deutschland
+ * @author Erdemaslancan
* @author Ibero-kolxi
* @author Reedy
* @author The Evil IP address
# Vector skin
'vector-action-delete' => 'Jili',
+'vector-action-protect' => 'İçvi',
+'vector-view-create' => 'dokʼidi',
'vector-view-edit' => 'Doktiri',
+'variants' => "Variant'epe",
'errorpagetitle' => 'Çilata',
'returnto' => '$1 butʼkʼaşa goikti.',
'search-interwiki-more' => '(çkva)',
'search-mwsuggest-enabled' => 'okʼvandupete',
'search-mwsuggest-disabled' => 'okʼvandu varen',
+'searchall' => 'mteli',
'nonefound' => "'''Notʼi''': Xvala, namtini svacoxope maartani oqʼopinot igoren.
Ogoruşi dudis '''all:''' pʼrefiksi okʼatute doloçʼareli na ren iri şeyi (oğarğaluşi butʼkʼape, şablonepe, doçkva şeyepeti iqʼvasen) mgori varna pʼrefiksi oqʼopinot na igoren svacoxo ixmarit.",
'powersearch' => 'Mordineri ogoru',
'uploadlogpage' => 'Dosya oncğonu kʼayitʼepe',
'uploadedimage' => 'Siteşa na incğonen resimi: "[[$1]]"',
+'license-header' => 'Lisans',
+
# File description page
+'file-anchor-link' => 'Dosya',
'filehist' => 'Dosyaşi tarixi',
'filehist-help' => 'Dosyaşi tarixi oz*iru şeni Ndğa/Ora burme-muşis na renan tarixepes o3ʼkʼedi.',
'filehist-deleteall' => 'mteli jili',
'sp-contributions-newbies' => 'Xvala ağani maxmarepeşi meşvelape ko3ʼiri',
'sp-contributions-blocklog' => 'Bloğiş kʼayitʼi',
+'sp-contributions-talk' => 'Mesaji',
'sp-contributions-search' => 'Meşvelape mgori',
'sp-contributions-username' => 'IP varna maxmare:',
'sp-contributions-submit' => 'Mgori',
# Export
'export' => 'Butʼkʼa ikʼayitʼi',
+# Namespace 8 related
+'allmessagesname' => 'Coxo',
+
# Thumbnails
'thumbnail-more' => 'Didi qʼvi',
* @author Meno25
* @author Priyanka.rachna.jha
* @author Rajesh
+ * @author Reedy
* @author Umeshberma
* @author Vinitutpal
*/
अहाँ सार्वत्रिक विभव संकेतक गलत टंकण केने हएब, वा कोनो गलत लिंकक पाछाँ गेल हएब।
ई {{अन्तर्जाल}} प्रयोक्ता द्वारा प्रयुक्त तंत्रांशमे स्थित कोनो दोषक संकेत सेहो कऽ सकैए।',
'nosuchspecialpage' => 'एहेन कोनो विशेष पन्ना नै',
-'nospecialpagetext' => '<गाढ़> अहाँ एकटा अमान्य पन्नाक आग्रह केने छी। </गाढ़>
+'nospecialpagetext' => '<strong> अहाँ एकटा अमान्य पन्नाक आग्रह केने छी। </strong>
मान्य विशेष पन्नाक सूची एतए अछि [[Special:SpecialPages|{{int:specialpages}}]]।',
# General errors
'nchanges' => '$1 {{PLURAL:$1|परिवर्त्तन|परिवर्त्तन}}',
'recentchanges' => 'लगक परिवर्तन सभ',
'recentchanges-legend' => 'नव परिवर्तन सभक विकल्प सभ',
-'recentchangestext' => 'ऐ पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।',
+'recentchanges-summary' => 'ऐ पन्नापर विकीमे भेल सभसँ अद्यतन परिवर्तनपर नजरि राखू।',
'recentchanges-feed-description' => 'ऐ सूचना-तंत्रांशमे विकीमे भेल सभसँ लगक परिवर्तन ताकू',
'recentchanges-label-newpage' => 'ई सम्पादन एकटा नव पन्नाक निर्माण केलक।',
'recentchanges-label-minor' => 'ई एकटा लघु सम्पादन छी',
'file-info' => 'संचिका आकार: $1, माइम प्रकार: $2',
'file-info-size' => '$1 × $2 चित्राणु, फाइल आकार: $3, माइम प्रकार: $4',
'file-info-size-pages' => '$1 × $2 चित्रकण, संचिका आकार : $3, माइम प्रकार: $4, $5 {{PLURAL:$5|पन्ना|पन्ना सभ}}',
-'file-nohires' => '<छोट>ऐसँ बेशी आनन्तर्य उपलब्ध नै अछि।</छोट>',
+'file-nohires' => 'ऐसँ बेशी आनन्तर्य उपलब्ध नै अछि।',
'svg-long-desc' => 'एस.वी.जी. फाइल, मामूली रूपमे $1 × $2 चित्रकण, फाइलक आकार: $3',
'show-big-image' => 'पूर्ण आनन्तर्य',
'show-big-image-preview' => 'ऐ पूर्वदृश्यक आकार: $1.',
'nchanges' => '$1 {{PLURAL:$1|pangowahan|owah-owahan}}',
'recentchanges' => 'Pengobahan',
'recentchanges-legend' => 'Opsi owahan anyar',
-'recentchangestext' => 'Runutna owah-owahan anyare wiki nang kaca kiye.',
+'recentchanges-summary' => 'Runutna owah-owahan anyare wiki nang kaca kiye.',
'recentchanges-feed-description' => "Urutna owah-owahan anyare wiki nang ''feed'' kiye.",
'recentchanges-label-newpage' => 'Suntingan kiye gawé kaca anyar',
'recentchanges-label-minor' => 'Kiye suntingan cilik',
Misy io olana io rehefa mamppiasa serveur mandataire tsy manana anarana sy manan-olana eo amin'ny tranonkala ianao.",
'edit_form_incomplete' => "'''Misy tsy tonga tany amin'ny lohamilina ny singan'ity pejy fenoina ity. Azonao ampiana ny mpandika hafa amin'ny famoronana ny fanazavana ity pejy ity.",
'editing' => "Manova an'i $1",
+'creating' => "Famoronana an'i $1",
'editingsection' => 'Fanovana $1 (fizarana)',
'editingcomment' => 'Fanovana $1 (fizarana vaovao)',
'editconflict' => 'Fanovana mifandona : $1',
'nchanges' => '{{PLURAL:$1|fanovana|fanovana}} $1',
'recentchanges' => 'Fanovana farany',
'recentchanges-legend' => 'Safidy ny fanovàna farany',
-'recentchangestext' => "Jereo eto amin'ity pejy ity izay vao niova vao haingana teto amin'ity wiki ity.",
+'recentchanges-summary' => "Jereo eto amin'ity pejy ity izay vao niova vao haingana teto amin'ity wiki ity.",
'recentchanges-feed-description' => "Arao ny fanovàna farany amin'ity wiki ity anaty topa",
'recentchanges-label-newpage' => 'Namorona pejy vaovao io fanovana io',
'recentchanges-label-minor' => 'Kely fotsiny ity fanovana ity',
'nchanges' => '$1 {{PLURAL:$1|parubahan|parubahan}}',
'recentchanges' => 'Parubahan baru',
'recentchanges-legend' => 'Pilihan parubahan baru',
-'recentchangestext' => 'Manjajak parubahan terbaru dalam wiki di laman ko.',
+'recentchanges-summary' => 'Manjajak parubahan terbaru dalam wiki di laman ko.',
'recentchanges-feed-description' => 'Temukan parubahan baru dalam umpan wiki ko',
'recentchanges-label-newpage' => 'Suntiang ko mambuek laman baru',
'recentchanges-label-minor' => 'Iko di suntiang saketek',
'Filepath' => array( 'ПатДоПодатотека' ),
'Import' => array( 'Увоз' ),
'Invalidateemail' => array( 'ПогрешнаЕпошта' ),
+ 'JavaScriptTest' => array( 'ПробаНаJavaСкрипта' ),
'BlockList' => array( 'СписокНаБлокираниIP' ),
'LinkSearch' => array( 'ПребарајВрска' ),
'Listadmins' => array( 'СписокНаАдминистратори' ),
'Wantedtemplates' => array( 'ПотребниШаблони' ),
'Watchlist' => array( 'СписокНаНабљудувања' ),
'Whatlinkshere' => array( 'ШтоВодиОвде' ),
- 'Withoutinterwiki' => array( 'Ð\91езÐ\98нÑ\82еÑ\80вики' ),
+ 'Withoutinterwiki' => array( 'Ð\91езÐ\9cеÑ\93Ñ\83вики' ),
);
$magicWords = array(
'nchanges' => '$1 {{PLURAL:$1|промена|промени}}',
'recentchanges' => 'Скорешни промени',
'recentchanges-legend' => 'Нагодувања за скорешни промени',
-'recentchangestext' => 'На оваа страница ги следите скорешните промени на викито.',
+'recentchanges-summary' => 'На оваа страница ги следите скорешните промени на викито.',
'recentchanges-feed-description' => 'Следење на најскорешните промени на викито во овие емитувања.',
'recentchanges-label-newpage' => 'Ова уредување создаде нова страница',
'recentchanges-label-minor' => 'Ова е ситно уредување',
'backend-fail-writetemp' => 'Не можев да запишам во привремената податотека.',
'backend-fail-closetemp' => 'Не можев да ја затворам привремената податотека.',
'backend-fail-read' => 'Не можев да ја прочитам податотеката $1',
-'backend-fail-create' => 'Не можев да ја создадам податотеката $1',
-'backend-fail-maxsize' => 'Не можев да ја создадам податотеката $1 бидејќи е поголема од {{PLURAL:$2|$2 бајт|$2 бајти}}.',
+'backend-fail-create' => 'Не можев да ја запишам податотеката $1.',
+'backend-fail-maxsize' => 'Не можев да ја запишам податотеката $1 бидејќи е поголема од {{PLURAL:$2|еден бајт|$2 бајти}}.',
'backend-fail-readonly' => 'Складишната основа „$1“ моментално не може да се запишува. Наведената причина гласи: „$2“',
'backend-fail-synced' => 'Податотеката „$1“ е во состојба недоследна во рамките на внатрешните складишни основи',
'backend-fail-connect' => 'Не можев да се поврзам со складишната основа „$1“.',
'backend-fail-internal' => 'Се појави непозната грешка во складишната основа „$1“.',
'backend-fail-contenttype' => 'Не можев да утврдам каква содржина има податотеката што треба да ја складирам во „$1“.',
'backend-fail-batchsize' => 'Складишната основа доби блок од $1 податочна {{PLURAL:$1|операција|операции}}, а ограничувањето е $2 {{PLURAL:$2|операција|операции}}.',
+'backend-fail-usable' => 'Не можев да ја запишам податотеката $1 бидејќи немате доволно дозволи или поради тоа што недостасуваат именици/содржатели.',
# File journal errors
'filejournal-fail-dbconnect' => 'Не можев да се поврзам со дневничката база за складишната основа „$1“.',
'http-curl-error' => 'Грешка при добивањето на URL: $1',
'http-host-unreachable' => 'Не можев да пристапам до URL-адресата',
'http-bad-status' => 'Се појави проблем во текот на обработката на HTTP-барањето: $1 $2',
-'http-truncated-body' => 'Содржината на барањето не е примена во целост.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Не може да се пристапи до URL-то',
'Allmessages' => array( 'സർവ്വസന്ദേശങ്ങൾ' ),
'Allpages' => array( 'എല്ലാതാളുകളും' ),
'Ancientpages' => array( 'പുരാതന_താളുകൾ' ),
+ 'Badtitle' => array( 'മോശംതലക്കെട്ട്' ),
'Blankpage' => array( 'ശൂന്യതാൾ' ),
'Block' => array( 'തടയുക', 'ഐ.പി.തടയുക', 'ഉപയോക്തൃതടയൽ' ),
'Blockme' => array( 'എന്നെതടയുക' ),
'Filepath' => array( 'പ്രമാണവിലാസം' ),
'Import' => array( 'ഇറക്കുമതി' ),
'Invalidateemail' => array( 'ഇമെയിൽഅസാധുവാക്കുക' ),
+ 'JavaScriptTest' => array( 'ജാവാസ്ക്രിപ്റ്റ്പരീക്ഷണം' ),
'BlockList' => array( 'തടയൽപട്ടിക', 'ഐപികളുടെ_തടയൽപട്ടിക' ),
'LinkSearch' => array( 'കണ്ണികൾ_തിരയുക' ),
'Listadmins' => array( 'കാര്യനിർവാഹകപട്ടിക' ),
'pagenamee' => array( '1', 'താളിന്റെപേര്സമഗ്രം', 'PAGENAMEE' ),
'namespace' => array( '1', 'നാമമേഖല', 'NAMESPACE' ),
'namespacee' => array( '1', 'നാമമേഖലസമഗ്രം', 'NAMESPACEE' ),
+ 'namespacenumber' => array( '1', 'നാമമേഖലാസംഖ്യ', 'NAMESPACENUMBER' ),
'talkspace' => array( '1', 'സംവാദമേഖല', 'TALKSPACE' ),
'talkspacee' => array( '1', 'സംവാദമേഖലസമഗ്രം', 'TALKSPACEE' ),
'subjectspace' => array( '1', 'വിഷയമേഖല', 'ലേഖനമേഖല', 'SUBJECTSPACE', 'ARTICLESPACE' ),
'url_path' => array( '0', 'പഥം', 'PATH' ),
'url_wiki' => array( '0', 'വിക്കി', 'WIKI' ),
'url_query' => array( '0', 'ക്വറി', 'QUERY' ),
+ 'defaultsort_noerror' => array( '0', 'പിഴവില്ല', 'noerror' ),
+ 'defaultsort_noreplace' => array( '0', 'മാറ്റേണ്ടതില്ല', 'noreplace' ),
);
$digitGroupingPattern = "##,##,###";
# Diffs
'history-title' => '"$1" എന്ന താളിന്റെ നാൾവഴി',
+'difference-title' => '"$1" എന്ന താളിന്റെ പതിപ്പുകൾ തമ്മിലുള്ള മാറ്റം',
+'difference-title-multipage' => '"$1", "$2" എന്നീ താളുകൾ തമ്മിലുള്ള വ്യത്യാസം',
'difference-multipage' => '(താളുകൾ തമ്മിലുള്ള വ്യത്യാസം)',
'lineno' => 'വരി $1:',
'compareselectedversions' => 'തിരഞ്ഞെടുത്ത പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം കാണുക',
'nchanges' => '{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}',
'recentchanges' => 'സമീപകാല മാറ്റങ്ങൾ',
'recentchanges-legend' => 'സമീപകാല മാറ്റങ്ങളുടെ ക്രമീകരണം',
-'recentchangestext' => '{{SITENAME}} സംരംഭത്തിലെ ഏറ്റവും പുതിയ മാറ്റങ്ങൾ ഇവിടെ കാണാം.',
+'recentchanges-summary' => '{{SITENAME}} സംരംഭത്തിലെ ഏറ്റവും പുതിയ മാറ്റങ്ങൾ ഇവിടെ കാണാം.',
'recentchanges-feed-description' => 'ഈ ഫീഡ് ഉപയോഗിച്ച് വിക്കിയിലെ പുതിയ മാറ്റങ്ങൾ നിരീക്ഷിക്കുക.',
'recentchanges-label-newpage' => 'ഒരു പുതിയ താൾ സൃഷ്ടിച്ചിരിക്കുന്നു',
'recentchanges-label-minor' => 'ഇതൊരു ചെറിയ തിരുത്താണ്',
'allpagesprev' => 'മുമ്പത്തെ',
'allpagesnext' => 'അടുത്തത്',
'allpagessubmit' => 'പോകൂ',
-'allpagesprefix' => 'à´ªàµ\82ർവàµ\8dവപദമàµ\81à´³àµ\8dà´³ താളുകൾ പ്രദർശിപ്പിക്കുക:',
+'allpagesprefix' => 'à´\87à´\99àµ\8dà´\99à´¨àµ\86 à´¤àµ\81à´\9fà´\99àµ\8dà´\99àµ\81à´¨àµ\8dà´¨ താളുകൾ പ്രദർശിപ്പിക്കുക:',
'allpagesbadtitle' => 'താളിനു നൽകിയ തലക്കെട്ട് അസാധുവാണ് അല്ലെങ്കിൽ അന്തർഭാഷയ്ക്കുള്ളതോ അന്തർവിക്കിയ്ക്കുള്ളതോ ആയ പൂർവ്വപദം ഉപയോഗിച്ചിരിക്കുന്നു.
തലക്കെട്ടിൽ ഉപയോഗിക്കാൻ പാടില്ലാത്ത ഒന്നോ അതിലധികമോ ലിപികൾ ഇതിലുണ്ടാകാം.',
'allpages-bad-ns' => '{{SITENAME}} സംരംഭത്തിൽ "$1" എന്ന നാമമേഖല നിലവിലില്ല.',
'nchanges' => '$1 өөрчлөлт',
'recentchanges' => 'Сүүлийн өөрчлөлтүүд',
'recentchanges-legend' => 'Сүүлийн өөрчлөлтүүдийн сонголтууд',
-'recentchangestext' => 'Энэхүү хуудсанд викид хийсэн хамгийн сүүлийн өөрчлөлтүүдийг үзүүлж байна.',
+'recentchanges-summary' => 'Энэхүү хуудсанд викид хийсэн хамгийн сүүлийн өөрчлөлтүүдийг үзүүлж байна.',
'recentchanges-feed-description' => 'Вики дахь хамгийн сүүлийн өөрчлөлтүүдийг хянах.',
'recentchanges-label-newpage' => 'Энэ засвар шинэ хуудсыг үүсгэсэн байна',
'recentchanges-label-minor' => 'Энэ нь бага зэргийн засвар байна',
# !!# sqlविचारा is not in normalised form, which is Sqlविचारा or Sqlविचारा
$specialPageAliases = array(
- 'Activeusers' => array( 'à¤\95ारà¥\8dयरतसदस्य' ),
+ 'Activeusers' => array( 'सà¤\95à¥\8dरिय_सदस्य' ),
'Allmessages' => array( 'सर्व_निरोप' ),
'Allpages' => array( 'सर्व_पाने' ),
'Ancientpages' => array( 'जुनी_पाने' ),
- 'Blankpage' => array( 'कोरेपान' ),
- 'Block' => array( 'प्रतिबंध', 'अंकपत्ताप्रतिबंध', 'सदस्यप्रतिबंध' ),
- 'Blockme' => array( 'मलाप्रतिबंधकरा' ),
- 'Booksources' => array( 'पुस्तकस्रोत' ),
+ 'Blankpage' => array( 'कोरे_पान' ),
+ 'Block' => array( 'प्रतिबंध', 'अंकपत्ता_प्रतिबंध', 'सदस्य_प्रतिबंध' ),
+ 'Blockme' => array( 'मला_प्रतिबंध_करा' ),
+ 'Booksources' => array( 'पुस्तक_स्रोत' ),
'BrokenRedirects' => array( 'चुकीची_पुनर्निर्देशने' ),
'Categories' => array( 'वर्ग' ),
- 'ChangePassword' => array( 'परवलीचाशब्दबदला' ),
- 'Confirmemail' => array( 'विपत्रनक्कीकरा' ),
+ 'ChangeEmail' => array( 'विपत्र_बदला' ),
+ 'ChangePassword' => array( 'परवलीचा_शब्द_बदला' ),
+ 'ComparePages' => array( 'पानांची_तुलना' ),
+ 'Confirmemail' => array( 'विपत्र_नक्की_करा' ),
'Contributions' => array( 'योगदान' ),
- 'CreateAccount' => array( 'सदस्यनोंद' ),
+ 'CreateAccount' => array( 'सदस्य_नोंद' ),
'Deadendpages' => array( 'टोकाची_पाने' ),
- 'DeletedContributions' => array( 'वगळलेलीयोगदाने' ),
- 'Disambiguations' => array( 'नि:संदिग्धीकरण' ),
+ 'DeletedContributions' => array( 'वगळलेली_योगदाने' ),
+ 'Disambiguations' => array( 'निःसंदिग्धीकरण' ),
'DoubleRedirects' => array( 'दुहेरी_पुनर्निर्देशने' ),
- 'Emailuser' => array( 'विपत्रवापरकर्ता' ),
+ 'Emailuser' => array( 'विपत्र_वापरकर्ता' ),
'Export' => array( 'निर्यात' ),
- 'Fewestrevisions' => array( 'कमीतकमीआवर्तने' ),
- 'FileDuplicateSearch' => array( 'दुहेरीसंचिकाशोध' ),
+ 'Fewestrevisions' => array( 'कमीत_कमी_आवर्तने' ),
+ 'FileDuplicateSearch' => array( 'दुहेरी_संचिका_शोध' ),
'Filepath' => array( 'संचिकेचा_पत्ता_(पाथ)' ),
'Import' => array( 'आयात' ),
- 'Invalidateemail' => array( 'चूकदिनांकविपत्र' ),
- 'BlockList' => array( 'प्रतिबंधनसुची' ),
+ 'Invalidateemail' => array( 'à¤\85à¤\97à¥\8dराहà¥\8dय_विपतà¥\8dर', 'à¤\9aà¥\82à¤\95दिनाà¤\82à¤\95विपतà¥\8dर' ),
+ 'BlockList' => array( 'प्रतिबंधन_सुची' ),
'LinkSearch' => array( 'दुवाशोध' ),
'Listadmins' => array( 'प्रबंधकांची_यादी' ),
'Listbots' => array( 'सांगकाम्यांची_यादी' ),
'Listfiles' => array( 'चित्रयादी' ),
'Listgrouprights' => array( 'गट_अधिकार_यादी' ),
- 'Listredirects' => array( 'पुर्ननिर्देशनसुची' ),
+ 'Listredirects' => array( 'पुर्ननिर्देशन_सुची' ),
'Listusers' => array( 'सदस्यांची_यादी' ),
- 'Lockdb' => array( 'à¤\95à¥\81लà¥\81पबà¤\82द_à¤\95रा_(डà¥\87à¤\9fाबà¥\87स)' ),
+ 'Lockdb' => array( 'डà¥\87à¤\9fाबà¥\87स_à¤\95à¥\81लà¥\81पबà¤\82द_à¤\95रा' ),
'Log' => array( 'नोंद', 'नोंदी' ),
- 'Lonelypages' => array( 'à¤\8fà¤\95लपाने' ),
+ 'Lonelypages' => array( 'à¤\8fà¤\95ाà¤\95à¥\80_पाने' ),
'Longpages' => array( 'मोठी_पाने' ),
'MergeHistory' => array( 'इतिहास_एकत्र_करा' ),
- 'MIMEsearch' => array( 'माईमशोध' ),
+ 'MIMEsearch' => array( 'माईम_शोध' ),
'Mostcategories' => array( 'सर्वात_जास्त_वर्ग' ),
- 'Mostimages' => array( 'सर्वाधिकसांधलेलीसंचिका' ),
+ 'Mostimages' => array( 'सर्वाधिक_सांधलेली_संचिका' ),
'Mostlinked' => array( 'सर्वात_जास्त_जोडलेली' ),
'Mostlinkedcategories' => array( 'सर्वात_जास्त_जोडलेले_वर्ग', 'सर्वात_जास्त_वापरलेले_वर्ग' ),
'Mostlinkedtemplates' => array( 'सर्वात_जास्त_जोडलेले_साचे', 'सर्वात_जास्त_वापरलेले_साचे' ),
'Mycontributions' => array( 'माझे_योगदान' ),
'Mypage' => array( 'माझे_पान' ),
'Mytalk' => array( 'माझ्या_चर्चा' ),
- 'Newimages' => array( 'नवीन_चित्रे' ),
+ 'Newimages' => array( 'नवà¥\80न_सà¤\82à¤\9aिà¤\95ा', 'नवà¥\80न_à¤\9aितà¥\8dरà¥\87' ),
'Newpages' => array( 'नवीन_पाने' ),
'Popularpages' => array( 'प्रसिद्ध_पाने' ),
'Preferences' => array( 'पसंती' ),
'Prefixindex' => array( 'उपसर्गसुची' ),
'Protectedpages' => array( 'सुरक्षित_पाने' ),
'Protectedtitles' => array( 'सुरक्षित_शीर्षके' ),
- 'Randompage' => array( 'अविशिष्ट', 'अविशिष्ट_पृष्ठ' ),
- 'Randomredirect' => array( 'अविशिष्ट्पुर्ननिर्देशन' ),
+ 'Randompage' => array( 'à¤\95à¥\8bणतà¥\87हà¥\80', 'à¤\95à¥\8bणतà¥\87हà¥\80_पà¥\83षà¥\8dठ', 'à¤\85विशिषà¥\8dà¤\9f', 'à¤\85विशिषà¥\8dà¤\9f_पà¥\83षà¥\8dठ' ),
+ 'Randomredirect' => array( 'अविशिष्ट_पुर्ननिर्देशन' ),
'Recentchanges' => array( 'अलीकडील_बदल' ),
'Recentchangeslinked' => array( 'सांधलेलेअलिकडीलबदल' ),
'Revisiondelete' => array( 'आवर्तनवगळा' ),
'Statistics' => array( 'सांख्यिकी' ),
'Tags' => array( 'खूणा' ),
'Uncategorizedcategories' => array( 'अवर्गीकृत_वर्ग' ),
- 'Uncategorizedimages' => array( 'अवर्गीकृत_चित्रे' ),
+ 'Uncategorizedimages' => array( 'à¤\85वरà¥\8dà¤\97à¥\80à¤\95à¥\83त_सà¤\82à¤\9aिà¤\95ा', 'à¤\85वरà¥\8dà¤\97à¥\80à¤\95à¥\83त_à¤\9aितà¥\8dरà¥\87' ),
'Uncategorizedpages' => array( 'अवर्गीकृत_पाने' ),
'Uncategorizedtemplates' => array( 'अवर्गीकृत_साचे' ),
'Undelete' => array( 'काढणे_रद्द_करा' ),
'Unlockdb' => array( 'विदागारताळेउघडा' ),
'Unusedcategories' => array( 'न_वापरलेले_वर्ग' ),
'Unusedimages' => array( 'न_वापरलेली_चित्रे' ),
- 'Unusedtemplates' => array( 'नà¤\89पयà¥\8bà¤\97ातà¤\86णलà¥\87लासाà¤\9aा' ),
- 'Unwatchedpages' => array( 'अप्रेक्षीतपाने' ),
+ 'Unusedtemplates' => array( 'à¤\89पयà¥\8bà¤\97ात_नसलà¥\87लà¥\87_साà¤\9aà¥\87' ),
+ 'Unwatchedpages' => array( 'अप्रेक्षीत_पाने' ),
'Upload' => array( 'चढवा' ),
- 'Userlogin' => array( 'सदस्यप्रवेश' ),
- 'Userlogout' => array( 'सदस्यबहिर्गमन' ),
+ 'Userlogin' => array( 'सदस्य_प्रवेश' ),
+ 'Userlogout' => array( 'सदस्य_बहिर्गमन' ),
'Userrights' => array( 'खातेदाराचे_अधिकार' ),
'Version' => array( 'आवृत्ती' ),
'Wantedcategories' => array( 'हवे_असलेले_वर्ग' ),
- 'Wantedfiles' => array( 'संचिकाहवी' ),
+ 'Wantedfiles' => array( 'संचिका_हवी' ),
'Wantedpages' => array( 'हवे_असलेले_लेख' ),
- 'Wantedtemplates' => array( 'साचाहवा' ),
- 'Watchlist' => array( 'पहार्याची_सूची' ),
+ 'Wantedtemplates' => array( 'साचा_हवा' ),
+ 'Watchlist' => array( 'नितà¥\8dयâ\80\8c_पहाणà¥\8dयाà¤\9aà¥\80_सà¥\82à¤\9aà¥\80', 'पहारà¥\8dâ\80\8dयाà¤\9aà¥\80_सà¥\82à¤\9aà¥\80' ),
'Whatlinkshere' => array( 'येथे_काय_जोडले_आहे' ),
- 'Withoutinterwiki' => array( 'विनाà¤\86à¤\82तरविà¤\95ि' ),
+ 'Withoutinterwiki' => array( 'à¤\86à¤\82तरविà¤\95ि_शिवाय' ),
);
$magicWords = array(
'nchanges' => '$1 {{PLURAL:$1|बदल|बदल}}',
'recentchanges' => 'अलीकडील बदल',
'recentchanges-legend' => 'अलीकडील बदल पर्याय',
-'recentchangestext' => 'विकितील अलीकडील बदल या पानावर दिसतात.',
+'recentchanges-summary' => 'विकितील अलीकडील बदल या पानावर दिसतात.',
'recentchanges-feed-description' => 'या रसदीमधील विकीवर झालेले सर्वात अलीकडील बदल पहा.',
'recentchanges-label-newpage' => 'या संपादनाने नवीन पान तयार झाले',
'recentchanges-label-minor' => 'हा एक छोटा बदल आहे',
विपत्र: $PAGEEDITOR_EMAIL
विकि: $PAGEEDITOR_WIKI
-तà¥\81मà¥\8dहà¥\80 पानास à¤à¥\87à¤\9f दà¥\87त नाहà¥\80 तà¥\8bपरà¥\8dयà¤\82त पà¥\81ढà¥\87 हà¥\8bणाऱà¥\8dया बदलाà¤\82à¤\9aà¥\80 à¤\87तर à¤\95à¥\8bणतà¥\80हà¥\80 वà¥\87à¤\97ळà¥\80 सà¥\82à¤\9aना नसà¥\87ल. तà¥\81मà¥\8dहà¥\80 पहाऱà¥\8dयाà¤\9aà¥\80 सà¥\82à¤\9aà¥\80मधà¥\80ल पहारा ठà¥\87वलेल्या पानांकरिताच्या सूचना पताकांचे पुर्नयोजन करु शकता.
+तà¥\81मà¥\8dहà¥\80 पानास à¤à¥\87à¤\9f दà¥\87त नाहà¥\80 तà¥\8bपरà¥\8dयà¤\82त पà¥\81ढà¥\87 हà¥\8bणाऱà¥\8dया बदलाà¤\82à¤\9aà¥\80 à¤\87तर à¤\95à¥\8bणतà¥\80हà¥\80 वà¥\87à¤\97ळà¥\80 सà¥\82à¤\9aना नसà¥\87ल. तà¥\81मà¤\9aà¥\8dया नितà¥\8dय पहाणà¥\8dयाà¤\9aà¥\8dया सà¥\82à¤\9aà¥\80मधà¥\80ल à¤\85सलेल्या पानांकरिताच्या सूचना पताकांचे पुर्नयोजन करु शकता.
-तà¥\81मà¤\9aà¥\80 मà¥\88तà¥\8dरà¥\80पà¥\82रà¥\8dण {{SITENAME}} सà¥\81चना प्रणाली
+तà¥\81मà¤\9aà¥\80 मà¥\88तà¥\8dरà¥\80पà¥\82रà¥\8dण {{SITENAME}} सà¥\82चना प्रणाली
--
-तà¥\81मà¤\9aà¥\87 पहाऱà¥\8dयातà¥\80ल पानांची मांडणावळ (कोंदण) बदलू शकता, {{canonicalurl:{{#special:EditWatchlist}}}} ला भेट द्या
+तà¥\81मà¤\9aà¥\8dया नितà¥\8dय पहाणà¥\8dयाà¤\9aà¥\8dया पानांची मांडणावळ (कोंदण) बदलू शकता, {{canonicalurl:{{#special:EditWatchlist}}}} ला भेट द्या
-हà¥\87 पान तà¥\81मà¤\9aà¥\8dया पहाऱà¥\8dयाà¤\9aà¥\8dया सà¥\81à¤\9aà¥\80तà¥\81न à¤\95ाधà¥\81न à¤\9fाà¤\95णà¥\8dयासाठà¥\80 à¤\96लील दुव्यावर टिचकी मारा.
+हà¥\87 पान तà¥\81मà¤\9aà¥\8dया नितà¥\8dय पहाणà¥\8dयाà¤\9aà¥\8dया सà¥\82à¤\9aà¥\80तà¥\81न à¤\95ाढà¥\82न à¤\9fाà¤\95णà¥\8dयासाठà¥\80 à¤\96ालील दुव्यावर टिचकी मारा.
$UNWATCHURL
-पà¥\81ढà¥\80ल सहायà¥\8dय à¤\86णि पà¥\8dरतिà¤\95à¥\8dरà¥\80या:
+पà¥\81ढà¥\80ल साहायà¥\8dय à¤\86णि पà¥\8dरतिà¤\95à¥\8dरिया:
{{canonicalurl:{{MediaWiki:Helppage}}}}',
# Delete
'nchanges' => '$1 perubahan',
'recentchanges' => 'Perubahan terkini',
'recentchanges-legend' => 'Pilihan perubahan terkini',
-'recentchangestext' => 'Jejaki perubahan terkini dalam {{SITENAME}} pada laman ini.',
+'recentchanges-summary' => 'Jejaki perubahan terkini dalam {{SITENAME}} pada laman ini.',
'recentchanges-feed-description' => 'Jejaki perubahan terkini dalam {{SITENAME}} pada suapan ini.',
'recentchanges-label-newpage' => 'Suntingan ini mencipta laman baru',
'recentchanges-label-minor' => 'Ini ialah suntingan kecil',
'backend-fail-writetemp' => 'Fail sementara tidak dapat ditulisi.',
'backend-fail-closetemp' => 'Fail sementara tidak dapat ditutup.',
'backend-fail-read' => 'Fail $1 tidak dapat dibaca.',
-'backend-fail-create' => 'Fail $1 tidak dapat diwujudkan.',
-'backend-fail-maxsize' => 'Fail $1 tidak boleh dibuat kerana melebihi $2 bait.',
+'backend-fail-create' => 'Fail $1 tidak dapat ditulis.',
+'backend-fail-maxsize' => 'Fail $1 tidak boleh ditulis kerana melebihi $2 bait.',
'backend-fail-readonly' => 'Backend storan "$1" kini dalam mod baca sahaja. Sebab yang diberikan ialah: "$2"',
'backend-fail-synced' => 'Fail "$1" berada dalam keadaan yang tidak sejajar dalam backend storan dalaman',
'backend-fail-connect' => 'Tidak dapat bersambung dengan backend storan "$1".',
'backend-fail-internal' => 'Berlakunya ralat yang tidak dikenali dalam backend storan "$1".',
'backend-fail-contenttype' => 'Jenis kandungan fail untuk disimpan di "$1" tidak dapat ditentukan.',
'backend-fail-batchsize' => 'Backend storan diberi $1 operasi fail dalam satu kelompok; hadnya ialah $2 operasi.',
+'backend-fail-usable' => 'Fail $1 tidak boleh ditulis kerana kebenaran tidak memadai atau tertinggal direktori/penyimpan.',
# File journal errors
'filejournal-fail-dbconnect' => 'Tidak dapat bersambung dengan pangkalan data jurnal untuk backend storan "$1".',
'http-curl-error' => 'Ralat mendapatkan URL: $1',
'http-host-unreachable' => 'URL tidak dapat dicapai.',
'http-bad-status' => 'Berlaku masalah ketika permintaan HTTP: $1 $2',
-'http-truncated-body' => 'Jasad permohonan diterima separa-separa sahaja.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'URL tidak dapat dicapai',
'nchanges' => '$1 {{PLURAL:$1|полавтнема|полавтнемат}}',
'recentchanges' => 'Чыяконь полавтнемат-лиякстомтомат',
'recentchanges-legend' => 'Улконь полавтнематнень аравтнемаст',
-'recentchangestext' => '',
+'recentchanges-summary' => '',
'recentchanges-feed-description' => 'Мельга ваннынк кода ульнесть витьнемат-петнемат wiki-сэ те максовксонть.',
'recentchanges-label-newpage' => 'Те витнемась-петнемась од лопа тейсь',
'recentchanges-label-minor' => 'Те а покшкэ витнемась-петнемась',
'readonly' => 'پایگاه داده زلفن بزهبیّه',
'enterlockreason' => 'دلیلی زلفین بزوئن وسّه بارین، که حاوی تقریبی از زمونی بائه که زلفین بَیته وانه',
'missingarticle-rev' => '(نسخهٔ شماره: $1)',
-'missingarticle-diff' => '(فرق و فـَسِل: $1، $2)',
+'missingarticle-diff' => '(فرق: $1، $2)',
'readonly_lag' => 'پایگاه داده به طور خودکار زلفین بزهبیّه تا پشتیبون ِنسخهئون با اصلی نسخه هماهنگ بواشِن',
'internalerror' => 'خطای دلهیی',
'internalerror_info' => 'خطای دلهیی: $1',
# Edit pages
'summary' => 'گوزارش کار:',
'subject' => 'موضوع یا عنوان:',
-'minoredit' => 'اینتا اتّا پـچیک دچییه هسته',
+'minoredit' => 'اینتا ویرایش خله جزئی بیه',
'watchthis' => 'این صفحه ره دمبال هـاکاردن',
'savearticle' => 'جادکتن ِصفحه',
'preview' => 'پیش نمایش',
شِمه دگاردستهئون جانـَکِته که ونه، ونه اِسا ذخیرهبیّـِن دوکمه ره بَزنین!',
'editing' => 'دچیین => $1',
'editingsection' => 'دچیین $1 (تیکه)',
+'editingcomment' => '$1 دچیین(نو تیکه)',
'yourtext' => 'شمه بنویشته',
'copyrightwarning' => 'خـاهش بونه شمه یاد دواشه که همه چیزایی که {{SITENAME}} دله وانه، تحت $2 حیساب وونه. (ویشتر بخوندستن وسه $1 ره هارشین)<br />
اگه نخانّی شمه بنویشتهئون اینجه دس بزه یا ات نفر دیگه شمه بنویشته ره کوپی نکانه، اصلأ شه بنویشته ره اینجه نییلین.',
# Revision deletion
'rev-delundel' => 'نشون هدائن/فرو بوردن',
+'revdelete-text' => "'''نسخهئون و حذف بئی موارد ره بشنه سیاهه جا و صفحه تاریخچه دله بدین، ولی اتی قسمت از وشونه محتواره بقیه کارورون نتوننه بوینن.'''
+{{SITENAME}} بقیه مدیرون بتوننه اینتا پنهون بئیه محتوا ره هارشن و وشونه حذف بئیون ره احیاء هاکنن، مگر اینکه اتی سری محدودیت ونه رو اعمال بئی باشه.",
'revdel-restore' => 'دیاری تغییر هدائن',
+# History merging
+'mergehistory' => 'صفحهئون تاریخچه ره اتا هاکردن',
+
# Merge log
'revertmerge' => 'سِوا هاکردن',
# Recent changes
'recentchanges' => 'تازه دگاردستهئون',
+'recentchanges-legend' => 'تازه دگاردستهئون گوزینهها',
+'recentchanges-label-newpage' => 'اینتا ویرایش اته نو صفحه ایجاد هاکرده',
+'recentchanges-label-minor' => 'اینتا ویرایش خله جزئی بیه',
+'recentchanges-label-bot' => 'اینتا ویرایشره اته ربات انجام هدائه',
'rcnote' => "اینجه {{PLURAL:$1|دگاردستهیی|'''$1''' دگاردستهئونی}} که $4، $5 جه، '''$2''' روز پیشتر دچییه بینه ره اشنّی",
'rclistfrom' => 'نِمایش تازهدگاردستهئون با شروع از $1',
'rcshowhideminor' => 'پچیک دچییهئون $1',
'rcshowhideliu' => 'ثبتنوم هاکرده کارورون $1',
'rcshowhideanons' => 'ناشناس ِکارورون $1',
'rcshowhidepatr' => 'گشتبخارد ِدچییهئون $1',
-'rcshowhidemine' => 'Ù\85Ù\86Ù\87 دÚ\86Û\8câ\80\8cÛ\8cÙ\87â\80\8cئÙ\88Ù\86 $1',
+'rcshowhidemine' => 'مه دچییهئون $1',
'rclinks' => 'نـِشون هـِدائن $1 پایانی دَچییهئون، $2 اِسـا روز ره دلـه؛ $3',
-'diff' => 'فرق و فـَسِل',
+'diff' => 'فرق',
'hist' => 'تاریخچه',
-'hide' => 'Ù\81Ù\80Ù\90رÙ\88 بÙ\88ردن',
+'hide' => 'Ù¾Ù\86Ù\87Ù\88Ù\86 Ù\87اکن',
'show' => 'نـِشـون هـاده',
-'minoreditletter' => 'Ø®Ù\88رد',
+'minoreditletter' => 'جز',
'newpageletter' => 'نو',
'boteditletter' => 'ربات',
+'newsectionsummary' => '/* $1 */ نو تیکه',
# Recent changes linked
'recentchangeslinked' => 'واری دأچیـهنئون',
'wlheader-enotif' => '*تونی ایمیل جه مطلع بواشین.',
'wlheader-showupdated' => "*صفحهئونی که بعد از آخرین سربزوئنتون عوض بینه '''پر رنگ''' نشون هدائه بیّه.",
'wlnote' => "ایجه {{PLURAL:$1|پایانی دأچیهن|پایانی '''$1''' دأچیهنئونی}} هأسه که ای $2 ساعت دهله دأکهته.",
+'watchlist-options' => 'دمبال هاکردن گوزینهها',
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'دهمـبـال هـهکـاردهن...',
# Delete
'deletepage' => 'صفحه پاک هاکردن',
+'excontent' => 'صفحه محتوا وِ بیه: «$1»',
+'excontentauthor' => 'صفحه محتوا وِ بیه: «$1» (فقط «[[Special:Contributions/$2|$2]]» وِنه کایر بیه)',
+'exbeforeblank' => 'قبل اینکه صفحه محتوا خالی بوه ونه محتوا وِ بیه: «$1»',
'dellogpage' => 'وه ره بییتهئون گوزارش',
# Rollback
# Namespace form on various pages
'namespace' => 'نومجا:',
+'invert' => 'برعکس انتخاب هاکن',
'blanknamespace' => '(مـار)',
# Contributions
# User preference toggles
'tog-underline' => 'Liân-kiat oē té-sûn:',
'tog-hideminor' => 'Am chòe-kīn ê sió kái-piàn',
-'tog-extendwatchlist' => 'Tián-khui kàm-sī-toaⁿ khoàⁿ só͘-ū ê kái-piàn, m̄-chí sī choè-kīn--ê',
-'tog-usenewrc' => 'Ēng ka-kiông pán khoàⁿ chòe-kīn ê kái-piàn (su-iàu JavaScript)',
+'tog-extendwatchlist' => 'Khok-chhiong kàm-sī-toaⁿ kàu hián-sī só͘-ū ê kái-piàn',
+'tog-usenewrc' => 'Ka-kiông pán ê chòe-kīn-ê-kái-piàn (su-iàu JavaScript)',
'tog-numberheadings' => 'Phiau-tê chū-tōng pian-hō',
'tog-showtoolbar' => 'Hián-sī pian-chi̍p ke-si-tiâu (su-iàu JavaScript)',
'tog-editondblclick' => 'Siang-ji̍h ia̍h-bīn to̍h ē-tàng pian-chi̍p (su-iàu JavaScript)',
'tog-editsection' => 'Ji̍h [siu-kái] chit-ê liân-kiat to̍h ē-tàng pian-chi̍p toāⁿ-lo̍h',
'tog-editsectiononrightclick' => 'Chiàⁿ-ji̍h (right click) toāⁿ-lo̍h (section) phiau-tê to̍h ē-tàng pian-chi̍p toāⁿ-lo̍h (su-iàu JavaScript)',
'tog-showtoc' => 'Hián-sī bo̍k-chhù (3-ê phiau-tê í-siōng ê ia̍h)',
-'tog-rememberpassword' => 'Kì tiâu bi̍t-bé, āu-chōa iōng ( $1 {{PLURAL:$1|day|kang}} lāi)',
+'tog-rememberpassword' => 'Kì tiâu bi̍t-bé, āu-chōa iōng (for a maximum of $1 {{PLURAL:$1|day|days}})',
'tog-watchcreations' => 'Kā goá khui ê ia̍h ka-ji̍p kàm-sī-toaⁿ lāi-té',
'tog-watchdefault' => 'Kā goá pian-chi̍p kòe ê ia̍h ka-ji̍p kàm-sī-toaⁿ lāi-té',
'tog-watchmoves' => 'Kā goá soá ê ia̍h ka-ji̍p kàm-sī-toaⁿ',
'tog-previewonfirst' => 'Thâu-pái pian-chi̍p seng khoàⁿ-māi',
'tog-nocache' => 'Koaiⁿ-tiāu ia̍h ê cache',
'tog-fancysig' => 'Chhiam-miâ mài chò liân-kiat',
-'tog-externaleditor' => 'Iōng gōa-pō· pian-chi̍p-khì (kan-na hō͘ ko-chhiú, he ài tī lí ê tiān-náu koh siat-tēng. [//www.mediawiki.org/wiki/Manual:External_editors Siông-chêng.])',
-'tog-externaldiff' => 'Iōng gōa-pō· diff (kan-na hō͘ ko-chhiú, he ài tī lí ê tiān-noá koh siat-tēng. [//www.mediawiki.org/wiki/Manual:External_editors Siông-chêng.])',
+'tog-externaleditor' => 'Iōng gōa-pō· pian-chi̍p-khì',
+'tog-externaldiff' => 'Iōng gōa-pō· diff',
'tog-forceeditsummary' => 'Pian-chi̍p khài-iàu bô thiⁿ ê sî-chūn, kā goá thê-chhéⁿ',
'tog-watchlisthideown' => 'Kàm-sī-toaⁿ bián hián-sī goá ê pian-chi̍p',
'tog-watchlisthidebots' => 'Kàm-sī-toaⁿ bián hián-sī ki-khì pian-chi̍p',
'dec' => '12g',
# Categories related messages
-'pagecategories' => '{{PLURAL:$1|Lūi-pia̍t|ê lūi-pia̍t}}',
+'pagecategories' => '{{PLURAL:$1|Lūi-pia̍t|Lūi-pia̍t}}',
'category_header' => 'Tī "$1" chit ê lūi-pia̍t ê bûn-chiuⁿ',
'subcategories' => 'Ē-lūi-pia̍t',
'category-media-header' => 'Tī lūi-pia̍t "$1" ê mûi-thé',
'create-this-page' => 'Khai-sí siá chit ia̍h',
'delete' => 'Thâi',
'deletethispage' => 'Thâi chit ia̍h',
-'undelete_short' => 'Kiù {{PLURAL:$1| ê siu-káit|$1 ê siu-kái}}',
+'undelete_short' => 'Kiù $1 ê siu-kái',
'viewdeleted_short' => 'Khoàⁿ {{PLURAL:$1|chi̍t-ê thâi tiàu--ê pian-chi̍p|$1 ê thâi tiàu--ê pian-chi̍p}}',
'protect' => 'Pó-hō·',
'protect_change' => 'kái-piàn',
'redirectedfrom' => '(Tùi $1 choán--lâi)',
'redirectpagesub' => 'Choán-ia̍h',
'lastmodifiedat' => 'Chit ia̍h tī $1, $2 ū kái--koè',
-'viewcount' => 'Pún-ia̍h kàu taⁿ ū {{PLURAL:$1| pái|$1 pái}} ê sú-iōng.',
+'viewcount' => 'Pún-ia̍h kàu taⁿ ū $1 pái access.',
'protectedpage' => 'Siū pó-hō͘ ê ia̍h',
'jumpto' => 'Thiàu khì:',
'jumptonavigation' => 'Se̍h chām',
'thisisdeleted' => 'Khoàⁿ a̍h-sī kiù $1?',
'viewdeleted' => 'Beh khoàⁿ $1?',
'restorelink' => '{{PLURAL:$1|chi̍t ê thâi-tiàu ê pian-chi̍p|$1 thâi-tiàu ê pian-chi̍p}}',
-'feedlinks' => 'Tēng khoàⁿ:',
+'feedlinks' => 'Chhī-liāu:',
'feed-invalid' => 'Bô-hāu ê tēng khoàⁿ lūi-hêng.',
'feed-unavailable' => 'Bô thê-kiong liân-ha̍p tēng khoàⁿ.',
'site-rss-feed' => '$1 ê RSS tēng khoàⁿ',
'unexpected' => 'Koài-koài ê pió-tat: "$1"="$2"。',
'formerror' => 'Chhò-gō·: bô-hoat-tō· kā pió sàng chhut khì.',
'badarticleerror' => 'Bē-tàng tiàm chit ia̍h chip-hêng chit ê tōng-chok.',
-'cannotdelete' => 'Bô-hoat-tō· kā "$1" hit ê ia̍h a̍h-sī iáⁿ-siōng thâi tiāu. (Khó-lêng pa̍t-lâng í-keng kā thâi tiāu ah.)',
+'cannotdelete' => 'Bô-hoat-tō· kā hit ê ia̍h a̍h-sī iáⁿ-siōng thâi tiāu. (Khó-lêng pa̍t-lâng í-keng kā thâi tiāu ah.)',
'badtitle' => 'M̄-chiâⁿ piau-tê',
'badtitletext' => 'Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.',
-'perfcached' => 'Ē-kha ê chu-liāu ùi khoài-chhú(cache) lâi--ê, só·-í khó-lêng m̄-sī siōng sin ê. Khoài-chhú lāi-té siōng chē khǹg {{PLURAL:$1| chi̍t tiâu|$1 tiâu}}.',
-'perfcachedts' => 'Ē-kha ê chu-liāu ùi khoài-chhú(cache) lâi--ê, tī $1 keng-sin--koè. Khoài-chhú lāi-té siōng chē khǹg {{PLURAL:$4| chi̍t tiâu |$4 tiâu}}.',
+'perfcached' => 'Ē-kha ê chu-liāu tùi lâi--ê, só·-í bī-pit oân-choân hoán-èng siōng sin ê chōng-hóng. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'perfcachedts' => 'Ē-kha ê chu-liāu tùi lâi--ê, tī $1 keng-sin--koè. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
'querypage-no-updates' => 'Chit-má bē-sái kái chit ia̍h.
Chia ê chu-liāu bē-tàng sui tiông-sin chéng-lí.',
'wrong_wfQuery_params' => 'Chhò-ngō͘ ê chham-sò͘ chhoân hō͘ wfQuery()<br />
'protectedpagetext' => 'Chit ia̍h hông só tiâu leh, bē pian-chi̍p tit.',
'viewsourcetext' => 'Lí ē-sái khoàⁿ ia̍h khó͘-pih chit ia̍h ê goân-sú loē-iông:',
'protectedinterface' => 'Chit ia̍h thê-kiong nńg-thé kài-bīn ēng ê bûn-jī. Ūi beh ī-hông lâng chau-that, só͘-í ū siū tio̍h pó-hō͘.',
-'editinginterface' => "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h.
-Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn.
-Nā ūi-tio̍h hoan-e̍k, chhiáⁿ khó-lū sú-iōng [//translatewiki.net/wiki/Main_Page?setlang=nan translatewiki.net], MediaWiki ê chāi-tē hoà sū-kang.",
+'editinginterface' => "'''Sè-jī:''' Lí tng teh siu-kái 1 bīn thê-kiong nńg-thé kài-bīn bûn-jī ê ia̍h. Jīn-hô kái-piàn to ē éng-hióng tio̍h kî-thaⁿ iōng-chiá ê sú-iōng kài-bīn.",
'sqlhidden' => '(Tshàng SQL tsa-sûn)',
'cascadeprotected' => 'Chit-ê ia̍h í-keng hông pó-hō͘ bē kái tit. In-ūi i tī ē-bīn {{PLURAL:$1|ê|ê}} liân-só pó-hō͘ lāi-té:
$2',
# Login and logout pages
'logouttext' => "'''Lí í-keng teng-chhut.'''
-Lí ē-sái mài kì-miâ kè-siok sú-iōng {{SITENAME}}, mā ē-sái iōng kāng-ê a̍h-sī pa̍t-ê sin-hūn [[Special:UserLogin|têng teng-ji̍p]].
+Lí ē-sái mài kì-miâ kè-siok sú-iōng {{SITENAME}}, mā ē-sái iōng kāng-ê a̍h-sī pa̍t-ê sin-hūn têng teng-ji̍p.
Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-goân teng-ji̍p tiong; che chi-iàu piàⁿ tiāu lí ê browser ê cache chiū ē chèng-siông.",
'welcomecreation' => '==Hoan-gêng $1!==
-Í-keng khui hó lí ê kháu-chō. M̄-hó bē-kì-tit chhiâu lí tī [[Special:Preferences|{{SITENAME}} ê iōng-chiá siat-tēng]].',
+Í-keng khui hó lí ê kháu-chō. M̄-hó bē-kì-tit chhiâu lí ê iōng-chiá siat-tēng.',
'yourname' => 'Lí ê iōng-chiá miâ-chheng:',
'yourpassword' => 'Lí ê bi̍t-bé:',
'yourpasswordagain' => 'Têng phah bi̍t-bé:',
-'remembermypassword' => 'Kì tiâu góa ê bi̍t-bé (āu-chhiú teng-ji̍p iōng) (tī $1 {{PLURAL:$1|day|days}} kang lāi)',
+'remembermypassword' => 'Kì tiâu góa ê bi̍t-bé (āu-chhiú teng-ji̍p iōng) (for a maximum of $1 {{PLURAL:$1|day|days}})',
'login' => 'Teng-ji̍p',
'nav-login-createaccount' => 'Teng-ji̍p / khui sin kháu-chō',
'loginprompt' => 'Thiⁿ ē-kha ê chu-liāu thang khui sin hō·-thâu a̍h-sī teng-ji̍p {{SITENAME}}.',
'logout' => 'Teng-chhut',
'userlogout' => 'Teng-chhut',
'notloggedin' => 'Bô teng-ji̍p',
-'nologin' => "Bô poàⁿ ê kháu-chō? '''$1'''.",
+'nologin' => "Bô-thang teng-ji̍p? '''$1'''.",
'nologinlink' => 'Khui 1 ê kháu-chō',
'createaccount' => 'Khui sin kháu-chō',
'gotaccount' => "Í-keng ū kháu-chō? '''$1'''.",
'createaccounterror' => 'Bô hoat-tō͘ khui kháu-chō: $1',
'loginsuccesstitle' => 'Teng-ji̍p sêng-kong',
'loginsuccess' => 'Lí hiān-chhú-sî í-keng teng-ji̍p {{SITENAME}} chò "$1".',
-'nosuchuser' => 'Chia bô iōng-chiá hō-chò "$1". Miâ-jī ū hun toā-siá, sio-siá . Chhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī [[Special:UserLogin/signup|khui sin káu-chō]].',
+'nosuchuser' => 'Chia bô iōng-chiá hō-chò "$1". Chhiáⁿ kiám-cha lí ê phèng-im, a̍h-sī iōng ē-kha ê pió lâi khui sin iōng-chiá ê kháu-chō.',
'nosuchusershort' => 'Bô "$1" chit ê iōng-chiá miâ.
Tùi khoàⁿ-māi, lí phah--ê.',
'nouserspecified' => 'Lí ài chí-tēng chi̍t ê iōng-chiá miâ.',
'noemail' => 'Kì-lo̍k bô iōng-chiá "$1" ê e-mail chū-chí.',
'passwordsent' => 'Ū kià sin bi̍t-bé khì "$1" chù-chheh ê e-mail chū-chí. Siu--tio̍h liáu-āu chhiáⁿ têng teng-ji̍p.',
'mailerror' => 'Kià phoe tú tio̍h chhò-gō·: $1',
-'acct_creation_throttle_hit' => 'Tī koè-khì 24 tiám-cheng lāi, ū chit ê iōng lí IP bāng-chí ê lâng í-keng khui {{PLURAL:$1|1 account|$1 kháu-chō}}. He sī hit ê sî-kan lāi thang chò ê.
-Tiō-sī kóng, tī chit-má iōng chit ê IP bāng-chí ê lâng bē-sái koh khui jīm-hô kháu-chō.',
-'emailauthenticated' => 'Lí ê e-mail chū-chí tī $2 $3 khak-jīn sêng-kong.',
+'acct_creation_throttle_hit' => 'Pháiⁿ-sè, lí taⁿ í-keng khui $1 ê kháu-chō ā. Bē-sái koh-chài khui.',
+'emailauthenticated' => 'Lí ê e-mail chū-chí tī $1 khak-jīn sêng-kong.',
'emailnotauthenticated' => 'Lí ê e-mail chū-chí iáu-bōe khak-jīn ū-hāu, só·-í ē--kha ê e-mail kong-lêng bē-ēng-tit.',
'noemailprefs' => 'Tī lí ê siat-piān chí-tēng chi̍t ê tiān-chú-phoe tē-chí thang hō͘ chia ê kong-lêng ē-tàng ēng.',
'emailconfirmlink' => 'Chhiáⁿ khak-jīn lí ê e-mail chū-chí ū-hāu',
'loginreqlink' => 'Teng-ji̍p',
'loginreqpagetext' => 'Lí ài $1 chiah thang khoàⁿ pat ia̍h.',
'accmailtitle' => 'Bi̍t-bé kià chhut khì ah.',
-'accmailtext' => "Hō͘ [[User talk:$1|$1]] ê chi̍t ê iōng loān-sò͘ sán-seng ê bi̍t-bé í-keng kìa khì $2.
-
-Kháu-chō ê sin bi̍t-bé thang tī teng-ji̍p liáu tī ''[[Special:ChangePassword|siu-kái bi̍t-bé]]'' ia̍h kái tiāu.",
+'accmailtext' => '$1 ê bi̍t-bé í-keng kìa khì $2.',
'newarticle' => '(Sin)',
'newarticletext' => "Lí tòe 1 ê liân-kiat lâi kàu 1 bīn iáu-bōe chûn-chāi ê ia̍h. Beh khai-sí pian-chi̍p chit ia̍h, chhiáⁿ tī ē-kha ê bûn-jī keh-á lāi-té phah-jī. ([[{{MediaWiki:Helppage}}|Bo̍k-lio̍k]] kà lí án-choáⁿ chìn-hêng.) Ká-sú lí bô-tiuⁿ-tî lâi kàu chia, ē-sai chhi̍h liû-lám-khì ê '''téng-1-ia̍h''' tńg--khì.",
-'anontalkpagetext' => "''Pún thó-lūn-ia̍h bô kò·-tēng ê kháu-chō/hō·-thâu, kan-na ū 1 ê IP chū-chí (chhin-chhiūⁿ 123.456.789.123). In-ūi bô kāng lâng tī bô kāng sî-chūn ū khó-lêng tú-hó kong-ke kāng-ê IP, lâu tī chia ê oē ū khó-lêng hō· bô kāng lâng ê! Beh pī-bián chit khoán būn-tê, ē-sái khì [[Special:UserLogin/signup|khui 1 ê hō·-thâu a̍h-sī teng-ji̍p]].''",
-'clearyourcache' => "'''Chù-ì:''' Pó-chûn liáu-āu, tio̍h ē-kì leh kā liû-lám-khì ê cache piàⁿ tiāu chiah khoàⁿ-ē-tio̍h kái-piàn.
-*'''Firefox / Safari:''' chhi̍h tiâu \"Shift\" kâng-sî-chūn tiám-kik ''Reload/têng-sin chài-ji̍p'' a̍h-sī chhi̍h ''Ctrl-F5'' \"Ctrl-R\" kî-tiong chi̍t ê (''⌘-R'' tī Mac)
-* '''Google Chrome:''' chhi̍h ''Ctrl-Shift-R'' (''⌘-R-Shift-R'' tī Mac)
-'''Internet Explorer :'''chhi̍h tiâu \"Ctrl\" kâng-sî-chūn tiám-kek ''Refresh/têng-sin chài-ji̍p'' a̍h-sī chhi̍h \"Ctrl-F5\"
+'anontalkpagetext' => "----''Pún thó-lūn-ia̍h bô kò·-tēng ê kháu-chō/hō·-thâu, kan-na ū 1 ê IP chū-chí (chhin-chhiūⁿ 123.456.789.123). In-ūi bô kāng lâng tī bô kāng sî-chūn ū khó-lêng tú-hó kong-ke kāng-ê IP, lâu tī chia ê oē ū khó-lêng hō· bô kāng lâng ê! Beh pī-bián chit khoán būn-tê, ē-sái khì [[Special:UserLogin|khui 1 ê hō·-thâu a̍h-sī teng-ji̍p]].''",
+'clearyourcache' => "'''Chù-ì:''' Pó-chûn liáu-āu, tio̍h ē-kì leh kā liû-lám-khì ê cache piàⁿ tiāu chiah khoàⁿ-ē-tio̍h kái-piàn: *'''Firefox / Safari:''' chhi̍h tiâu \"Shift\" kâng-sî-chūn tiám-kik ''Reload/têng-sin chài-ji̍p'' a̍h-sī chhi̍h ''Ctrl-F5'' \"Ctrl-R\" kî-tiong chi̍t ê (''Command-R'' tī Mac)
+* '''Google Chrome:''' chhi̍h ''Ctrl-Shift-R'' (''Command-Shift-R'' tī Mac)
+'''Internet Explorer :'''chhi̍h tiâu \"Ctrl\" kâng-sî-chūn tiám-kek ''Refresh/têng-sin chài-ji̍p'' a̍h-sī chhi̍h \"Ctrl-F5\"
* '''Konqueror:''' tiám-kek ''Reload/têng-sin chài-ji̍p'' a̍h-sī chhi̍h ''F5''
* '''Opera:''' piàⁿ-tiāu cache tī ''Tools(ke-si) → Preferences(siat-piān)''",
-'usercssyoucanpreview' => "'''Phiat-pō·''': Pó-chûn chìn-chêng ē-sái chhi̍h 'Seng khoàⁿ-māi' kiám-cha sin ê CSS.",
-'userjsyoucanpreview' => "'''Phiat-pō·''': Pó-chûn chìn-chêng ē-sái tiám-kek \"{{int:showpreview}}\" ; chhì lí ê sin JavaScript.",
-'usercsspreview' => "'''Thê-chhíⁿ lí, che chí-sī sian khoàⁿ-māi lí ê su-jîn CSS'''
-'''Che iáu-bōe pó-chûn--khí-lâi !'''",
+'usercssyoucanpreview' => "'''Phiat-pō·''': Pó-chûn chìn-chêng ē-sái chhi̍h 'Seng khoàⁿ-māi' kiám-cha sin ê CSS a̍h-sī JavaScript.",
+'userjsyoucanpreview' => "'''Phiat-pō·''': Pó-chûn chìn-chêng ē-sái chhi̍h 'Seng khoàⁿ-māi' kiám-cha sin ê CSS a̍h-sī JavaScript.",
+'usercsspreview' => "'''Sè-jī! Lí hiān-chú-sî khoàⁿ--ê sī lí ê su-jîn css ê preview; che iáu-bōe pó-chûn--khí-lâi!'''",
'userjspreview' => "'''Sè-jī! Lí hiān-chú-sî chhì khoàⁿ--ê sī lí ka-kī ê javascript; che iáu-bōe pó-chûn--khí-lâi!'''",
'note' => "'''Chù-ì:'''",
-'previewnote' => "'''Thê-chhéⁿ lí, che chí-sī hō͘ lí sian khoàⁿ chi̍t-ē.'''
-Lí kái--ê iáu-bōe pó-chûn--khí-lâi !",
+'previewnote' => "'''Thê-chhéⁿ lí che sī 1 bīn kiám-cha chho͘-phe ēng--ê \"seng-khoàⁿ-ia̍h\", iáu-bōe pó-chûn--khí-lâi!'''",
'session_fail_preview' => "'''Pháiⁿ-sè! Gún chiām-sî bô hoat-tō͘ chhú-lí lí ê pian-chi̍p (goân-in: \"phàng-kiàn sú-iōng kî-kan ê chu-liāu\"). Lô-hoân têng chhì khoàⁿ-māi. Ká-sú iû-goân bô-hāu, ē-sái teng-chhut koh-chài teng-ji̍p hoān-sè tō ē-tit kái-koat.'''",
'editing' => 'Siu-kái $1',
'editingsection' => 'Pian-chi̍p $1 (section)',
'storedversion' => 'Chu-liāu-khò· ê pán-pún',
'editingold' => "'''KÉNG-KÒ: Lí tng teh siu-kái chit ia̍h ê 1 ê kū siu-tēng-pún. Lí nā kā pó-chûn khí lâi, chit ê siu-tēng-pún sòa-āu ê jīm-hô kái-piàn ē bô khì.'''",
'yourdiff' => 'Chha-pia̍t',
-'readonlywarning' => "'''CHÙ-Ì: Chu-liāu-khò· taⁿ só tiâu leh thang pān î-siu khang-khòe, só·-í lí hiān-chú-sî bô thang pó-chûn jīn-hô phian-chi̍p hāng-bo̍k. Lí ē-sái kā siong-koan pō·-hūn tah--ji̍p-khì 1-ê bûn-jī tóng-àn pó-chûn, āu-chhiú chiah koh kè-sio̍k.'''
-
-Kā só tiâu ê koán-lí-goân ū lâu oē: $1",
-'protectedpagewarning' => "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái siu-kái.'''
-Ē-kha ū choè-kīn ê kì-lo̍k thang chham-khó:",
-'templatesused' => 'Chit ia̍h iōng {{PLURAL:$1|Template|Templates}} chia ê pang-bô· :',
-'templatesusedpreview' => 'Chit ê preview iōng chia ê {{PLURAL:$1|Template|pang-bô͘}}',
-'templatesusedsection' => 'Chit ê toāⁿ-lo̍k iōng chia ê {{PLURAL:$1|Template|pang-bô͘}}',
+'readonlywarning' => "'''CHÙ-Ì: Chu-liāu-khò· taⁿ só tiâu leh thang pān î-siu khang-khòe, só·-í lí hiān-chú-sî bô thang pó-chûn jīn-hô phian-chi̍p hāng-bo̍k. Lí ē-sái kā siong-koan pō·-hūn tah--ji̍p-khì 1-ê bûn-jī tóng-àn pó-chûn, āu-chhiú chiah koh kè-sio̍k.'''",
+'protectedpagewarning' => "'''KÉNG-KÒ: Pún ia̍h só tiâu leh. Kan-taⁿ ū hêng-chèng te̍k-koân ê iōng-chiá (sysop) ē-sái siu-kái.'''",
+'templatesused' => 'Chit ia̍h iōng chia ê pang-bô·:',
+'templatesusedpreview' => 'Chit ê preview iōng chia ê pang-bô͘:',
+'templatesusedsection' => 'Chit ê section iōng chia ê pang-bô͘:',
'template-protected' => '(pó-hō͘)',
'template-semiprotected' => '(poàⁿ pó-hō͘)',
'permissionserrorstext-withaction' => 'Lí bô ún-chún chò $2, in-ūi ē-kha
{{PLURAL:$1|iân-kò͘|iân-kò͘}}:',
-'recreate-moveddeleted-warn' => "'''Sè-jī: Lí taⁿ chún-pī beh khui ê ia̍h, chêng bat hō͘ lâng thâi tiāu koè.'''
-
-Lí tio̍h chim-chiok soà-chiap pian-chi̍p chit ia̍h ê pit-iàu-sèng.
-Chia ū chit ia̍h ê san-tû kì-lo̍k hō͘ lí chham-khó:",
+'recreate-moveddeleted-warn' => "'''Sè-jī: Lí taⁿ chún-pī beh khui ê ia̍h, chêng bat hō͘ lâng thâi tiāu koè.''' Lí tio̍h chim-chiok soà-chiap pian-chi̍p chit ia̍h ê pit-iàu-sèng. Chia ū chit ia̍h ê san-tû kì-lo̍k (deletion log) hō͘ lí chham-khó:",
'edit-conflict' => 'Siu-kái sio-chhiong',
'defaultmessagetext' => 'Siat piān ê bûn-jī',
'searchprofile-images-tooltip' => 'Chhoé tóng-àn',
'search-section' => '(toān-lo̍h $1)',
'searchall' => 'choân-pō·',
-'showingresults' => "Ē-kha tùi #'''$2''' khai-sí hián-sī {{PLURAL:$1| hāng| hāng}} kiat-kó.",
-'showingresultsnum' => "Ē-kha tùi #'''$2''' khai-sí hián-sī {{PLURAL:$3| hāng| hāng}} kiat-kó.",
+'showingresults' => 'Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$1</b> hāng kiat-kó.',
+'showingresultsnum' => 'Ē-kha tùi #<b>$2</b> khai-sí hián-sī <b>$3</b> hāng kiat-kó.',
'powersearch' => 'Kiám-sek',
'powersearch-legend' => 'Kiám-sek',
'preferences' => 'Siat-tēng',
'mypreferences' => 'Góa ê siat-tēng',
'prefsnologin' => 'Bô teng-ji̍p',
-'prefsnologintext' => 'Lí it-tēng ài <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} teng-ji̍p]</span> chiah ē-tàng chhiâu iōng-chiá ê siat-tēng.',
+'prefsnologintext' => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng chhiâu iōng-chiá ê siat-tēng.',
'changepassword' => 'Oāⁿ bi̍t-bé',
'prefs-skin' => 'Phôe',
'skin-preview' => 'Chhì khoàⁿ',
'resultsperpage' => '1 ia̍h hián-sī kúi kiāⁿ:',
'recentchangesdays' => 'Hián-sī kúi ji̍t chòe-kīn ê kái-piàn:',
'recentchangesdays-max' => 'siōng-choē $1 {{PLURAL:$1|kang|kang}}',
-'recentchangescount' => 'Beh hián-sī kúi tiâu chòe-kīn kái--ê:',
+'recentchangescount' => 'Hián-sī kúi tiâu chòe-kīn ê kái-piàn:',
'savedprefs' => 'Lí ê iōng-chiá siat-tēng í-keng pó-chûn khí lâi ah.',
'timezonelegend' => 'Sî-khu',
-'localtime' => 'Chāi-tē sî-kan sī:',
-'timezoneoffset' => 'Sî-chha¹:',
-'servertime' => 'Server sî-kan hiān-chāi sī:',
+'localtime' => 'Chāi-tē sî-kan sī',
+'timezoneoffset' => 'Sî-chha¹',
+'servertime' => 'Server sî-kan hiān-chāi sī',
'guesstimezone' => 'Tùi liû-lám-khì chhau--lâi',
'allowemail' => 'Ún-chún pa̍t-ê iōng-chiá kià email kòe-lâi',
'defaultns' => 'Tī chiah ê miâ-khong-kan chhiau-chhōe:',
'uploaddisabled' => 'Pháiⁿ-sè, sàng chiūⁿ-bāng ê kong-lêng bô khui.',
'sourcefilename' => 'Tóng-àn goân miâ:',
'destfilename' => 'Tóng-àn sin miâ:',
-'watchthisupload' => 'Kàm-sī chit ê tóng-àn',
+'watchthisupload' => 'Kàm-sī chit ia̍h',
'upload-success-subj' => 'Sàng-chiūⁿ-bāng sêng-kong',
# File backend
'filehist' => 'Tóng-àn ê le̍k-sú',
'filehist-current' => 'hiān-chāi',
'filehist-datetime' => 'Ji̍t-kî/ Sî-kan',
-'imagelinks' => 'Ēng tio̍h ê tóng-àn',
-'linkstoimage' => 'Ē-bīn ê {{PLURAL:$1|ia̍h liân kàu|$1 ia̍h liân kàu}} chit ê tóng-àn:',
+'imagelinks' => 'Iáⁿ-siōng liân-kiat',
+'linkstoimage' => 'Í-hā ê ia̍h liân kàu chit ê iáⁿ-siōng:',
'nolinkstoimage' => 'Bô poàⁿ ia̍h liân kàu chit tiuⁿ iáⁿ-siōng.',
# MIME search
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|jī-goân|jī-goân}}',
'ncategories' => '$1 {{PLURAL:$1|ê lūi-pia̍t |ê lūi-pia̍t}}',
-'nlinks' => '$1 {{PLURAL:$1|ê|ê}} liân-kiat',
+'nlinks' => '$1 ê liân-kiat',
'nmembers' => '$1 ê sêng-oân',
-'nrevisions' => '$1 {{PLURAL:$1|ê|ê}} siu-tēng-pún',
+'nrevisions' => '$1 ê siu-tēng-pún',
'lonelypages' => 'Ko·-ia̍h',
'uncategorizedpages' => 'Bô lūi-pia̍t ê ia̍h',
'uncategorizedcategories' => 'Bô lūi-pia̍t ê lūi-pia̍t',
'mostcategories' => 'Siōng chē lūi-pia̍t ê ia̍h',
'mostimages' => 'Siōng chia̍p liân-kiat ê iáⁿ-siōng',
'mostrevisions' => 'Siōng chia̍p siu-kái ê ia̍h',
-'prefixindex' => 'SóÍ\98-Å« chià u sû-thâu sek-Ãn liáu ê iaÌ\8dh',
+'prefixindex' => 'Sû-thâu sek-Ãn',
'shortpages' => 'Té-ia̍h',
'deadendpages' => 'Khu̍t-thâu-ia̍h',
'deadendpagestext' => 'Ē-kha ê ia̍h bô liân kàu wiki lāi-té ê kî-thaⁿ ia̍h.',
'ancientpages' => 'Kó·-ia̍h',
'move' => 'Sóa khì',
'movethispage' => 'Sóa chit ia̍h',
-'unusedimagestext' => 'Ē-kha ê tóng-àn bô poàⁿ ia̍h ū teh iōng. M̄-koh ia̍h lâu leh.
-Chhiáⁿ chù-ì: kî-thaⁿ ê bāng-chām ū khó-lêng iōng URL ti̍t-chiap liân kàu iáⁿ-siōng, só·-í sui-jiân bô teh iōng, mā sī ē lia̍t tī chia.',
+'unusedimagestext' => '<p>Chhiáⁿ chù-ì: kî-thaⁿ ê bāng-chām ū khó-lêng iōng URL ti̍t-chiap liân kàu iáⁿ-siōng, só·-í sui-jiân chhiâng-chāi teh iōng, mā sī ē lia̍t tī chia.</p>',
'unusedcategoriestext' => 'Ū ē-kha chiah-ê lūi-pia̍t-ia̍h, m̄-koh bô kî-thaⁿ ê bûn-chiuⁿ a̍h-sī lūi-pia̍t lī-iōng.',
# Book sources
# Special:Log
'specialloguserlabel' => 'Iōng-chiá:',
-'speciallogtitlelabel' => 'Bo̍k-piau (sû-tiâu ia̍h iōng-chiá) :',
+'speciallogtitlelabel' => 'Sû-tiâu:',
'logempty' => 'Log lāi-bīn bô sio-tùi ê hāng-bo̍k.',
# Special:AllPages
# Special:Categories
'categories' => 'Lūi-pia̍t',
-'categoriespagetext' => 'Ē-kha {{PLURAL:$1| ê ūi-pia̍t|ê ūi-pia̍t}} ū ia̍h ia̍h-sī mûi-thé.
-[[Special:UnusedCategories|Bô iōng tio̍h ê ūi-pia̍t]] tō bô tī chiah hián-sī.
-Lēng-goā thang chham-khó [[Special:WantedCategories|beh ti̍h ê lūi-pia̍t]].',
+'categoriespagetext' => 'Chit ê wiki ū ē-kha chia ê lūi-pia̍t.
+[[Special:UnusedCategories|Unused categories]] are not shown here.
+Also see [[Special:WantedCategories|wanted categories]].',
'categoriesfrom' => 'Tùi chit ê lūi-pia̍t khai-sí hián-sī:',
# Special:DeletedContributions
'deletedcontributions-title' => 'Hō͘ lâng thâi tiāu ê kòng-hiàn',
# Special:LinkSearch
-'linksearch' => 'Chhoē chām-goā ê liân-kiat',
+'linksearch' => 'Chhiau-chhoē chām-goā liân-kiat',
# E-mail user
'mailnologin' => 'Bô siu-phoe ê chū-chí',
'mailnologintext' => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] jī-chhiáⁿ ū 1 ê ū-hāu ê e-mail chū-chí tī lí ê [[Special:Preferences|iōng-chiá siat-tēng]] chiah ē-tàng kià e-mail hō· pa̍t-ūi iōng-chiá.',
'emailuser' => 'Kià e-mail hō· iōng-chiá',
'emailpage' => 'E-mail iōng-chiá',
-'emailpagetext' => 'Lí ē-tàng iōng ē-kha ê pió kià chi̍t tiuⁿ phe hō͘ chit ê iōng-chiá.
-Lí ê [[Special:Preferences|siat-tēng]] ê tiān-chú-phe tē-chí ē chhut-hiān tī tiān-chú-phe ê "Kià-phe-chiá" (From) hit ūi. Án-ne siu-phe-chiá chiah ū hoat-tō· kā lí hôe-phe.',
+'emailpagetext' => 'Ká-sú chit ê iōng-chiá ū siat-tēng 1 ê ū-hāu ê e-mail chū-chí, lí tō ē-tàng ēng ē-kha chit tiuⁿ FORM hoat sìn-sek hō· i. Lí siat-tēng ê e-mail chū-chí ē chhut-hiān tī e-mail ê "Kià-phoe-jîn" (From) hit ūi. Án-ne siu-phoe-jîn chiah ū hoat-tō· kā lí hôe-phoe.',
'noemailtitle' => 'Bô e-mail chū-chí',
-'noemailtext' => 'Chit ūi iōng-chiá pēng-bô lâu ū-hāu ê e-mail chū-chí.',
-'emailfrom' => 'Lâi chū:',
-'emailto' => 'Khì hō·:',
-'emailsubject' => 'Tê-bo̍k:',
+'noemailtext' => 'Chit ūi iōng-chiá pēng-bô lâu ū-hāu ê e-mail chū-chí, bô tio̍h-sī i bô beh chiap-siū pat-ūi iōng-chiá ê e-mail.',
+'emailfrom' => 'Lâi chū',
+'emailto' => 'Khì hō·',
+'emailsubject' => 'Tê-bo̍k',
'emailmessage' => 'Sìn-sit:',
'emailsend' => 'Sàng chhut-khì',
'emailsent' => 'E-mail sàng chhut-khì ah',
'watchnologin' => 'Bô teng-ji̍p',
'watchnologintext' => 'Lí it-tēng ài [[Special:UserLogin|teng-ji̍p]] chiah ē-tàng siu-kái lí ê kàm-sī-toaⁿ.',
'addedwatchtext' => "\"[[:\$1]]\" chit ia̍h í-keng ka-ji̍p lí ê [[Special:Watchlist|kàm-sī-toaⁿ]]. Bī-lâi chit ia̍h a̍h-sī siong-koan ê thó-lūn-ia̍h nā ū kái-piàn, ē lia̍t tī hia. Tông-sî tī [[Special:RecentChanges|Chòe-kīn ê kái-piàn]] ē iōng '''chho·-thé''' hián-sī ia̍h ê piau-tê, án-ne khah bêng-hián. Ká-sú lí beh chiōng chit ia̍h tùi lí ê kàm-sī-toaⁿ tû tiāu, khì khòng-chè-tiâu chhi̍h \"Mài kàm-sī\" chiū ē-sái-tit.",
-'removedwatchtext' => '"[[:$1]]" chit ia̍h í-keng tùi lí ê [[Special:Watchlist|kàm-sī-toaⁿ]] soá cháu.',
+'removedwatchtext' => '"[[:$1]]" chit ia̍h í-keng tùi lí ê kàm-sī-toaⁿ tû tiāu.',
'watch' => 'kàm-sī',
'watchthispage' => 'Kàm-sī chit ia̍h',
'unwatch' => 'Mài kàm-sī',
'watchlist-details' => 'Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.',
'watchmethod-recent' => 'tng teh kíam-cha choè-kīn ê siu-kái, khoàⁿ ū kàm-sī ê ia̍h bô',
'watchmethod-list' => 'tng teh kiám-cha kàm-sī ê ia̍h khoàⁿ chòe-kīn ū siu-kái bô',
-'watchlistcontains' => 'Lí ê kàm-sī-toaⁿ siu {{PLURAL:$1|ia̍h|ia̍h}} .',
-'wlnote' => "Ē-kha sī tī $3, $4 chìn-chêng {{PLURAL:chi tiám-cheng|'''$2''' tiám-cheng}} í-lâi ê {{PLURAL:$1| chi̍t piàn|'''$1''' piàn}} siu-kái.",
+'watchlistcontains' => 'Lí ê kàm-sī-toaⁿ siu $1 ia̍h.',
+'wlnote' => "Ē-kha sī '''$2''' tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.",
'wlshowlast' => 'Hián-sī chêng $1 tiám-cheng $2 ji̍t $3',
# Delete
'excontentauthor' => "loē-iông sī: '$1' (î-it ê kòng-hiàn-chiá sī '[[Special:Contributions/$2|$2]]')",
'exbeforeblank' => "chìn-chêng ê lōe-iông sī: '$1'",
'exblank' => 'ia̍h khang-khang',
-'historywarning' => 'Kéng-kò: Lí beh thâi ê ia̍h ū {{PLURAL:$1| ê siu-tèng le̍k-sú|ê siu-tèng le̍k-sú}}:',
+'historywarning' => 'Kéng-kò: Lí beh thâi ê ia̍h ū le̍k-sú:',
'confirmdeletetext' => 'Lí tih-beh kā 1 ê ia̍h a̍h-sī iáⁿ-siōng (pau-koat siong-koan ê le̍k-sú) éng-kiú tùi chu-liāu-khò· thâi tiāu. Chhiáⁿ khak-tēng lí àn-sǹg án-ne chò, jī-chhiáⁿ liáu-kái hiō-kó, jī-chhiáⁿ bô ûi-hoán [[{{MediaWiki:Policy-url}}]].',
'actioncomplete' => 'Chip-hêng sêng-kong',
'deletedtext' => '"$1" í-keng thâi tiāu. Tùi $2 khoàⁿ-ē-tio̍h chòe-kīn thâi ê kì-lo̍k.',
'rollbacklink' => 'ká tńg khì',
'rollbackfailed' => 'Ká bē tńg khì',
'cantrollback' => 'Bô-hoat-tō· kā siu-kái ká-tńg--khì; téng ūi kòng-hiàn-chiá sī chit ia̍h î-it ê chok-chiá.',
-'alreadyrolled' => 'Bô-hoat-tō· kā [[User:$2|$2]] ([[User talk:$2|Thó-lūn]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tùi [[:$1]] ê siu-kái ká-tńg-khì;
-í-keng ū lâng siu-kái a̍h-sī ká-tńg chit ia̍h.
-Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
-'editcomment' => "Pian-chi̍p kài-iàu sī: \"''\$1''\".",
+'alreadyrolled' => 'Bô-hoat-tō· kā [[User:$2|$2]] ([[User talk:$2|Thó-lūn]]) tùi [[:$1]] ê siu-kái ká-tńg-khì; í-keng ū lâng siu-kái a̍h-sī ká-tńg chit ia̍h. Téng 1 ūi siu-kái-chiá sī [[User:$3|$3]] ([[User talk:$3|Thó-lūn]]).',
+'editcomment' => "Siu-kái phêng-lūn sī: \"''\$1''\".",
# Protect
'protectedarticle' => 'pó-hō͘ "[[$1]]"',
-'protect-title' => 'Kái "$1" ê pó-hō· tíng-kip.',
+'protect-title' => 'Pó-hō· "$1"',
'prot_1movedto2' => '[[$1]] sóa khì tī [[$2]]',
'protect-legend' => 'Khak-tēng beh pó-hō·',
'protectcomment' => 'Lí-iû:',
'ipbsubmit' => 'Hong-só chit ūi iōng-chiá',
'badipaddress' => 'Bô-hāu ê IP chū-chí',
'blockipsuccesssub' => 'Hong-só sêng-kong',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] í-keng pī hong-só. <br />Khì [[Special:BlockList|hong-só lia̍t-toaⁿ]] thang khoàⁿ pī hong-só ê .',
-'ipusubmit' => 'Chhú-siau chit ê hong-só',
-'ipblocklist' => 'Siū hong-só ê iōng-chiá',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] í-keng pī hong-só. <br />Khì [[Special:BlockList|IP hong-só lia̍t-toaⁿ]] review hong-só ê IP.',
+'ipusubmit' => 'Chhú-siau hong-só chit ê chū-chí',
+'ipblocklist' => 'Siū hong-só ê IP chū-chí kap iōng-chiá miâ-chheng',
'blocklink' => 'hong-só',
'contribslink' => 'kòng-hiàn',
-'autoblocker' => 'Chū-tōng kìm-chí lí sú-iōng, in-ūi lí kap "[[User:$1|$1]]" kong-ke kāng 1 ê IP chū-chí.
-$1 ê kìm-chí lí-iû sī in-ūi "$2".',
+'autoblocker' => 'Chū-tōng kìm-chí lí sú-iōng, in-ūi lí kap "$1" kong-ke kāng 1 ê IP chū-chí (kìm-chí lí-iû "$2").',
'blocklogentry' => 'hong-só [[$1]], siat kî-hān chì $2 $3',
-'blocklogtext' => 'Chit-ê kì-lio̍k lia̍t-chhut hong-só/khui-só ê tōng-chok. Chū-tōng block ê IP tē-chí bô lia̍t--chhut-lâi ([[Special:BlockList|hong-só chheng-toaⁿ]] ū hiān-chú-sî ū-hāu ê kìm-chí hong-só o·-miâ-toaⁿ).',
+'blocklogtext' => 'Chit-ê log lia̍t-chhut block/unblock ê tōng-chok. Chū-tōng block ê IP chū-chí bô lia̍t--chhut-lâi ([[Special:BlockList]] ū hiān-chú-sî ū-hāu ê block/ban o·-miâ-toaⁿ).',
'block-log-flags-nocreate' => 'Khui kháu-chō thêng-iōng ah',
# Developer tools
# Move page
'move-page' => '徙$1',
'move-page-legend' => 'Sóa ia̍h',
-'movepagetext' => "Ē-kha chit ê pió iōng lâi kái 1 ê ia̍h ê piau-tê (miâ-chheng); só·-ū siong-koan ê le̍k-sú ē tòe leh sóa khì sin piau-tê.
+'movepagetext' => "Ē-kha chit ê form> iōng lâi kái 1 ê ia̍h ê piau-tê (miâ-chheng); só·-ū siong-koan ê le̍k-sú ē tòe leh sóa khì sin piau-tê.
Kū piau-tê ē chiâⁿ-chò 1 ia̍h choán khì sin piau-tê ê choán-ia̍h.
-Liân khì kū piau-tê ê liân-kiat (link) bē khì tāng--tio̍h; ē-kì-tit chhiau-chhōe [[Special:DoubleRedirects|siang-thâu (double)]] ê a̍h-sī [[Special:BrokenRedirects|kò·-chiòng ê choán-ia̍h]].
+Liân khì kū piau-tê ê liân-kiat (link) bē khì tāng--tio̍h; ē-kì-tit chhiau-chhōe siang-thâu (double) ê a̍h-sī kò·-chiòng ê choán-ia̍h.
Lí ū chek-jīm khak-tēng liân-kiat kè-sio̍k liân tio̍h ūi.
Sin piau-tê nā í-keng tī leh (bô phian-chi̍p koè ê khang ia̍h, choán-ia̍h bô chún-sǹg), tō bô-hoat-tō· soá khì hia.
'allmessagesname' => 'Miâ',
'allmessagesdefault' => 'Siat piān ê bûn-jī',
'allmessagescurrent' => 'Bo̍k-chêng ê bûn-jī',
-'allmessagestext' => 'Che sī MediaWiki: miâ-khong-kan lāi-té ê hē-thóng sìn-sit chheng-toaⁿ.
-Lí nā beh tàu saⁿ-kang hoan-e̍k. Chhiáⁿ kàu [//www.mediawiki.org/wiki/Localisation MediaWiki chāi-tè-hoà] kap [//translatewiki.net translatewiki.net] bāng-chām.',
+'allmessagestext' => 'Chia lia̍t chhut só·-ū tī MediaWiki: miâ-khong-kan ê hē-thóng sìn-sit.',
# Thumbnails
'thumbnail-more' => 'Hòng-tōa',
'tooltip-summary' => 'Siá chi̍t-ê kán-tan soat-bêng',
# Attribution
-'anonymous' => '{{SITENAME}} ê {{PLURAL:$1|ê bô kì-miâ ê iōng-chiá|ê bô kì-miâ ê iōng-chiá}} .',
+'anonymous' => '{{SITENAME}} bô kì-miâ ê iōng-chiá',
'siteuser' => '{{SITENAME}} iōng-chiá $1',
'othercontribs' => 'Kin-kù $1 ê kòng-hiàn.',
-'siteusers' => '{{SITENAME}} {{PLURAL:$2|iōng-chiá|iōng-chiá}} $1',
+'siteusers' => '{{SITENAME}} iōng-chiá $1',
# Patrolling
'markaspatrolleddiff' => 'Phiau-sī sûn--kòe',
-'markedaspatrolledtext' => 'Soán-te̍k ê siu-tēng-pún [[:$1]] í-keng kì-hō chò sûn--kòe.',
+'markedaspatrolledtext' => 'Í-keng phiau-sī chit ê siu-tēng-pún ū lâng sûn--kòe.',
# Image deletion
'deletedrevision' => 'Kū siu-tēng-pún $1 thâi-tiāu ā.',
# Browsing diffs
-'previousdiff' => '← Khì chêng 1 ê siu-kái',
-'nextdiff' => 'Khì āu 1 ê siu-kái →',
+'previousdiff' => '← Khì chêng 1 ê diff',
+'nextdiff' => 'Khì āu 1 ê diff →',
# Media information
-'imagemaxsize' => "Iáⁿ-siōng toā-sè ê hān-chè:<br />''(ēng tī tóng-àn soeh-bêng-ia̍h)''",
+'imagemaxsize' => 'Iáⁿ-siōng biô-su̍t-ia̍h ê tô· ke̍k-ke hián-sī jōa tōa tiuⁿ:',
'thumbsize' => 'Sok-tô· (thumbnail) jōa tōa tiuⁿ:',
'file-nohires' => 'Bô khah koân ê kái-sek-tō͘.',
# Special:NewFiles
'newimages' => 'Sin iáⁿ-siōng oē-lóng',
-'imagelisttext' => "Í-hā sī '''$1''' {{PLURAL:$1|tiuⁿ|tiuⁿ}} iáⁿ-siōng ê lia̍t-toaⁿ, chiàu $2 pâi-lia̍t.",
+'imagelisttext' => "Í-hā sī '''$1''' tiuⁿ iáⁿ-siōng ê lia̍t-toaⁿ, $2 pâi-lia̍t.",
'ilsubmit' => 'Kiám-sek',
'bydate' => 'chiàu ji̍t-kî',
# External editor support
'edit-externally' => 'Iōng gōa-pō· èng-iōng nńg-thé pian-chi̍p chit-ê tóng-àn',
-'edit-externally-help' => '(Khoàⁿ [//www.mediawiki.org/wiki/Manual:External_editors siat-tēng soat-bêng] ê chu-liāu.)',
+'edit-externally-help' => 'Chham-khó [http://www.mediawiki.org/wiki/Manual:External_editors Help:External_editors] ê soat-bêng.',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'choân-pō͘',
$3
-Nā-chún *m̄-sī* lí, chhiáⁿ khui ē-kha chit-ê liân-kiat, chhú-siau khak-jīn ê e-mail.
-
-$5
-
-Chit tiuⁿ phoe ê khak-jīn-bé ē chū-tōng tī $4 kòe-kî.',
+Nā-chún *m̄-sī* lí, chhiáⁿ mài tòe liân-kiat khì. Chit tiuⁿ phoe ê khak-jīn-bé ē chū-tōng tī $4 kòe-kî.',
'confirmemail_body_changed' => 'Ū lâng (IP $1, tāi-khài sī lí pún-lâng) tī {{SITENAME}} ēng chit-ê e-mail chū-chí chù-chheh 1 ê kháu-chō "$2".
Chhiáⁿ khui ē-kha chit-ê liân-kiat, thang khak-jīn chit-ê kháu-chō si̍t-chāi sī lí ê:
# Auto-summaries
'autosumm-blank' => 'Kā ia̍h ê loē-iông the̍h tiāu',
'autoredircomment' => 'Choán khì [[$1]]',
-'autosumm-new' => 'Sin ia̍h: $1...',
+'autosumm-new' => 'Sin ia̍h: $1',
# Watchlist editor
-'watchlistedit-numitems' => 'Lí ê kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.',
+'watchlistedit-numitems' => 'Lí ê kàm-sī-toaⁿ ū $1 ia̍h, thó-lūn-ia̍h bô sǹg chāi-lāi.',
'watchlistedit-normal-submit' => 'Mài kàm-sī',
-'watchlistedit-normal-done' => 'Í-keng ū {{PLURAL:$1| ia̍h| ia̍h}} ùi lí ê kám-sī-toaⁿ soá cháu:',
+'watchlistedit-normal-done' => 'Í-keng ū $1 ia̍h ùi lí ê kám-sī-toaⁿ soá cháu:',
# Watchlist editing tools
'watchlisttools-edit' => 'Khoàⁿ koh kái kàm-sī-toaⁿ',
'Booksources' => array( 'Bokkilder' ),
'BrokenRedirects' => array( 'Ødelagte_omdirigeringer' ),
'Categories' => array( 'Kategorier' ),
+ 'ChangeEmail' => array( 'Endre_e-post' ),
'ChangePassword' => array( 'Endre_passord', 'TIlbakestill_passord' ),
'ComparePages' => array( 'Sammenlign_sider' ),
'Confirmemail' => array( 'Bekreft_e-postadresse' ),
'DeletedContributions' => array( 'Slettede_bidrag' ),
'Disambiguations' => array( 'Pekere' ),
'DoubleRedirects' => array( 'Doble_omdirigeringer' ),
+ 'EditWatchlist' => array( 'Rediger_overvåkningsliste' ),
'Emailuser' => array( 'E-post' ),
'Export' => array( 'Eksporter' ),
'Fewestrevisions' => array( 'Færrest_revisjoner' ),
'Mycontributions' => array( 'Mine_bidrag' ),
'Mypage' => array( 'Min_side' ),
'Mytalk' => array( 'Min_diskusjon' ),
+ 'Myuploads' => array( 'Mine_opplastinger' ),
'Newimages' => array( 'Nye_filer', 'Nye_bilder' ),
'Newpages' => array( 'Nye_sider' ),
'PasswordReset' => array( 'Nullstill_passord' ),
+ 'PermanentLink' => array( 'Permanent_lenke' ),
'Popularpages' => array( 'Populære_sider' ),
'Preferences' => array( 'Innstillinger' ),
'Prefixindex' => array( 'Prefiksindeks' ),
'revisiontimestamp' => array( '1', 'REVISIETIEDSTEMPEL', 'VERSIETIJD', 'REVISIONTIMESTAMP' ),
'revisionuser' => array( '1', 'VERSIEGEBRUKER', 'VERSIEGEBRUIKER', 'REVISIONUSER' ),
'plural' => array( '0', 'MEERVOUD:', 'PLURAL:' ),
- 'fullurl' => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'FULLURL:' ),
- 'fullurle' => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'FULLURLE:' ),
+ 'fullurl' => array( '0', 'HELEURL', 'VOLLEDIGEURL', 'VOLLEDIGEURL:', 'FULLURL:' ),
+ 'fullurle' => array( '0', 'HELEURLE', 'VOLLEDIGEURLE', 'VOLLEDIGEURLE:', 'FULLURLE:' ),
'lcfirst' => array( '0', 'KLEERSTE:', 'LCFIRST:' ),
'ucfirst' => array( '0', 'GLEERSTE:', 'HLEERSTE:', 'UCFIRST:' ),
'lc' => array( '0', 'KL:', 'LC:' ),
'uc' => array( '0', 'HL:', 'UC:' ),
'raw' => array( '0', 'RAUW:', 'RUW:', 'RAW:' ),
- 'displaytitle' => array( '1', 'TEUNTITEL', 'TOONTITEL', 'TITELTONEN', 'DISPLAYTITLE' ),
+ 'displaytitle' => array( '1', 'TEUNTITEL', 'TOONTITEL', 'TITELTONEN', 'WEERGEGEVENTITEL', 'DISPLAYTITLE' ),
'newsectionlink' => array( '1', '__NIEJESECTIEVERWIEZING__', '__NIEUWESECTIELINK__', '__NIEUWESECTIEKOPPELING__', '__NEWSECTIONLINK__' ),
'nonewsectionlink' => array( '1', '__GIENNIEJKOPJENVERWIEZING__', '__GEENNIEUWKOPJEVERWIJZING__', '__GEENNIEUWESECTIELINK__', '__NONEWSECTIONLINK__' ),
'currentversion' => array( '1', 'DISSEVERSIE', 'HUIDIGEVERSIE', 'CURRENTVERSION' ),
'nchanges' => '$1 {{PLURAL:$1|wieziging|wiezigingen}}',
'recentchanges' => 'Leste wiezigingen',
'recentchanges-legend' => 'Opsies veur leste wiezigingen',
-'recentchangestext' => "Op disse pagina ku'j de leste wiezigingen van disse wiki bekieken.",
+'recentchanges-summary' => 'Op disse pagina ku-j de leste wiezigingen van disse wiki bekieken.',
'recentchanges-feed-description' => 'Zeuk naor de alderleste wiezingen op disse wiki in disse voer.',
'recentchanges-label-newpage' => 'Mit disse bewarking is n nieje pagina an-emaakt',
'recentchanges-label-minor' => 'Dit is n kleine wieziging',
'nchanges' => '$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरु}}',
'recentchanges' => 'नयाँ परिवर्तनहरु',
'recentchanges-legend' => 'हालैको परिवर्तन विकल्पहरु',
-'recentchangestext' => 'विकिका भर्खरका परिवर्तनहरुलाई यस पृष्ठमा पहिल्याउने',
+'recentchanges-summary' => 'विकिका भर्खरका परिवर्तनहरुलाई यस पृष्ठमा पहिल्याउने',
'recentchanges-feed-description' => 'यो फिडमा रहेको विकीको सवैभन्दा अन्तिम परिवर्तनहरुको जानकारी राख्नुहोस्',
'recentchanges-label-newpage' => 'यो सम्पादनले नयाँ पृष्ठ निर्माण गरेको छ',
'recentchanges-label-minor' => 'यो साधारण सम्पादन हो',
'localurl' => array( '0', 'LOKALEURL', 'LOCALURL:' ),
'localurle' => array( '0', 'LOKALEURLE', 'LOCALURLE:' ),
'articlepath' => array( '0', 'ARTIKELPAD', 'ARTICLEPATH' ),
- 'pageid' => array( '0', 'PAGINAID', 'PAGEID' ),
'servername' => array( '0', 'SERVERNAAM', 'SERVERNAME' ),
'scriptpath' => array( '0', 'SCRIPTPAD', 'SCRIPTPATH' ),
'stylepath' => array( '0', 'STIJLPAD', 'STYLEPATH' ),
'nchanges' => '$1 {{PLURAL:$1|bewerking|bewerkingen}}',
'recentchanges' => 'Recente wijzigingen',
'recentchanges-legend' => 'Opties voor recente wijzigingen',
-'recentchangestext' => 'Op deze pagina kunt u de recente wijzigingen in deze wiki bekijken.',
+'recentchanges-summary' => 'Op deze pagina kunt u de recentste wijzigingen in deze wiki bekijken.',
'recentchanges-feed-description' => 'Met deze feed kunt u de recentste wijzigingen in deze wiki bekijken.',
'recentchanges-label-newpage' => 'Met deze bewerking is een nieuwe pagina aangemaakt',
'recentchanges-label-minor' => 'Dit is een kleine bewerking',
'backend-fail-writetemp' => 'Het was niet mogelijk naar een tijdelijk bestand te schrijven.',
'backend-fail-closetemp' => 'Het was niet mogelijk een tijdelijk bestand te sluiten.',
'backend-fail-read' => 'Het was niet mogelijk het bestand $1 te lezen.',
-'backend-fail-create' => 'Het was niet mogelijk het bestand $1 aan te maken.',
-'backend-fail-maxsize' => 'Het was niet mogelijk het bestand $1 aan te maken omdat het groter is dan {{PLURAL:$2|één byte|$2 bytes}}.',
+'backend-fail-create' => 'Het was niet mogelijk naar het bestand $1 te schrijven.',
+'backend-fail-maxsize' => 'Het was niet mogelijk naar het bestand $1 te schrijven omdat het groter is dan {{PLURAL:$2|één byte|$2 bytes}}.',
'backend-fail-readonly' => 'Het opslagbackend "$1" kan op dit moment alleen gelezen worden. De opgegeven reden was: "$2"',
'backend-fail-synced' => 'Het bestand "$1" bevindt zich in een inconsistente toestand in de interne opslagbackends.',
'backend-fail-connect' => 'Het was niet mogelijk een verbinding te maken met het opslagbackend "$1".',
'backend-fail-internal' => 'Er is een onbekende fout opgetreden in het opslagbackend "$1".',
'backend-fail-contenttype' => 'Het inhoudstype van het bestand om in de opslag "$1" op te slaan kon niet bepaald worden.',
'backend-fail-batchsize' => 'Taak met $1 {{PLURAL:$1|bestandshandeling|bestandshandelingen}} in het opslagbackend; de limiet is $2 {{PLURAL:$2|handeling|handelingen}}.',
+'backend-fail-usable' => 'Het was niet mogelijk naar het bestand $1 te schrijven vanwege onvoldoende rechten of niet-aanwezige mappen of containers.',
# File journal errors
'filejournal-fail-dbconnect' => 'Het was niet mogelijk een verbinding te maken met de journaldatabase voor het opslagbackend "$1".',
'http-curl-error' => 'Fout bij het ophalen van URL: $1',
'http-host-unreachable' => 'De URL is niet bereikbaar.',
'http-bad-status' => 'Er is een probleem opgetreden bij het HTTP-verzoek: $1 $2',
-'http-truncated-body' => 'De inhoud van het verzoek is slechts gedeeltelijk ontvangen.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Kon de URL niet bereiken',
# Diffs
'history-title' => 'Historikken til «$1»',
+'difference-title' => 'Skilnad mellom versjonar av «$1»',
+'difference-title-multipage' => 'Skilnad mellom sidene «$1» og «$2»',
'difference-multipage' => '(Skilnad mellom sider)',
'lineno' => 'Line $1:',
'compareselectedversions' => 'Samanlikn valde versjonar',
'nchanges' => '{{PLURAL:$1|Éi endring|$1 endringar}}',
'recentchanges' => 'Siste endringar',
'recentchanges-legend' => 'Alternativ for siste endringar',
-'recentchangestext' => 'På denne sida ser du dei sist endra sidene i {{SITENAME}}.',
+'recentchanges-summary' => 'På denne sida ser du dei sist endra sidene i {{SITENAME}}.',
'recentchanges-feed-description' => 'Fylg med på dei siste endringane på denne wikien med dette abonnementet.',
'recentchanges-label-newpage' => 'Denne redigeringa oppretta ei ny side',
'recentchanges-label-minor' => 'Dette er ei mindre endring',
'deadendpages' => 'Blindvegsider',
'deadendpagestext' => 'Desse sidene har ikkje lenkjer til andre sider på {{SITENAME}}.',
'protectedpages' => 'Verna sider',
-'protectedpages-indef' => 'Berre vern på ubestemt tid',
+'protectedpages-indef' => 'Berre vern på uavgrensa tid',
'protectedpages-cascade' => 'Berre djupvern',
'protectedpagestext' => 'Desse sidene er verna mot flytting og endring',
'protectedpagesempty' => 'Ingen sider er verna på den valde måten akkurat no.',
'protect-level-sysop' => 'Berre administratorar',
'protect-summary-cascade' => 'djupvern',
'protect-expiring' => 'endar $1 (UTC)',
-'protect-expiry-indefinite' => 'ubestemt',
+'protect-expiring-local' => 'endar $1',
+'protect-expiry-indefinite' => 'uavgrensa',
'protect-cascade' => 'Vern alle sidene som er inkludert på denne sida (djupvern)',
'protect-cantedit' => 'Du kan ikkje endre vernenivået på sida fordi du ikkje har tilgang til å endre henne.',
'protect-othertime' => 'Anna tid:',
Sjå [[Special:Log/delete|sletteloggen]] for eit oversyn over sider som nyleg er sletta eller attoppretta.",
'undelete-header' => 'Sjå [[Special:Log/delete|sletteloggen]] for dei sist sletta sidene.',
+'undelete-search-title' => 'Søk i sletta sider',
'undelete-search-box' => 'Søk i sletta sider',
'undelete-search-prefix' => 'Vis sider frå og med:',
'undelete-search-submit' => 'Søk',
'nchanges' => '$1 {{PLURAL:$1|endring|endringer}}',
'recentchanges' => 'Siste endringer',
'recentchanges-legend' => 'Alternativ for siste endringer',
-'recentchangestext' => 'Vis de siste endringene til denne siden',
+'recentchanges-summary' => 'Vis de siste endringene til denne siden',
'recentchanges-feed-description' => 'Følg med på siste endringer i denne wikien med denne matingen.',
'recentchanges-label-newpage' => 'Denne redigeringen opprettet en ny side',
'recentchanges-label-minor' => 'Dette er en mindre endring',
'nchanges' => '$1 {{PLURAL:$1|phetogo|diphetogo}}',
'recentchanges' => 'Diphetogo tša bjale',
'recentchanges-legend' => 'Dikgetho tša diphetogo tša bjale',
-'recentchangestext' => 'Lebalana diphetogo tše di mphsa-mphsa go wiki letlakaleng le.',
+'recentchanges-summary' => 'Lebalana diphetogo tše di mphsa-mphsa go wiki letlakaleng le.',
'recentchanges-feed-description' => "Lebalana diphetogo tše di mphsa-mphsa go wiki ka ''feed'' ye.",
'recentchanges-label-newpage' => 'Phetogo ye e hlomile letlala le lefsa',
'recentchanges-label-minor' => 'Ye ke phetogo ye nnyenyane',
);
$specialPageAliases = array(
- 'Activeusers' => array( 'ସଚଳ_ସଭ୍ୟ' ),
- 'Allmessages' => array( 'ସବୁ_ମେସେଜ' ),
- 'Allpages' => array( 'ସବୁ_ପୃଷ୍ଠା' ),
- 'Ancientpages' => array( 'ପୁରୁଣା_' ),
- 'Blankpage' => array( 'ଖାଲି_ପୃଷ୍ଠା' ),
- 'Block' => array( 'ଅଟକାଇଦେବେ', 'ଆଇପି_ଅଟକାଇଦେବେ', 'ଇଉଜରକୁ_ଅଟକାଇଦେବେ' ),
- 'Blockme' => array( 'ମୋତେ_ଅଟକାଇଦିଅନ୍ତୁ' ),
- 'Booksources' => array( 'ଲେଖା_ନିଆଯାଇଥିବା_ବହି' ),
- 'BrokenRedirects' => array( 'ଭଙ୍ଗା_ଲେଉଟାଣି' ),
+ 'Activeusers' => array( 'ସଚଳସଭ୍ୟ' ),
+ 'Allmessages' => array( 'ସବୁସନ୍ଦେଶ' ),
+ 'Allpages' => array( 'ସବୁପୃଷ୍ଠା' ),
+ 'Ancientpages' => array( 'ପୁରୁଣାପୃଷ୍ଠା' ),
+ 'Badtitle' => array( 'ଖରାପନାମ' ),
+ 'Blankpage' => array( 'ଖାଲିପୃଷ୍ଠା' ),
+ 'Block' => array( 'ଅଟକାଇବେ', 'ଆଇପିଅଟକାଇବେ', 'ସଭ୍ୟଅଟକାଇବେ' ),
+ 'Blockme' => array( 'ମୋତେଅଟକାଇବେ' ),
+ 'Booksources' => array( 'ବହିସ୍ରୋତ' ),
+ 'BrokenRedirects' => array( 'ଭଙ୍ଗାଲେଉଟାଣି' ),
'Categories' => array( 'ଶ୍ରେଣୀ' ),
- 'ChangeEmail' => array( 'ଇମେଲ_ବଦଳାଇବେ' ),
- 'ChangePassword' => array( 'ପାସବାରà\8dଡ଼_ବଦଳାà¬\87ବେ' ),
- 'ComparePages' => array( 'ପୃଷ୍ଠାକୁ_ତଉଲିବେ' ),
- 'Confirmemail' => array( 'ଇମେଲ_ଥୟ_କରିବେ' ),
+ 'ChangeEmail' => array( 'ଇମେଲବଦଳାଇବେ' ),
+ 'ChangePassword' => array( 'ପାସà±à¬¾à¬°à\8dଡ଼ବଦଳାà¬\87ବà\87', 'ପାସà±à¬¾à¬°à\8dଡ଼ସà\87à¬\9fà¬\95ରିବେ' ),
+ 'ComparePages' => array( 'ପୃଷ୍ଠାକୁତଉଲିବେ' ),
+ 'Confirmemail' => array( 'ଇମେଲଥୟକରିବେ' ),
'Contributions' => array( 'ଅବଦାନ' ),
- 'CreateAccount' => array( 'ଖାତା_ଖୋଲିବେ' ),
- 'Deadendpages' => array( 'ଆଗକୁ_ରାହା_ନଥିବା_ପୃଷ୍ଠା' ),
- 'DeletedContributions' => array( 'ହଟାଇ_ଦିଆଯାଇଥିବା_ଅବଦାନ' ),
- 'Disambiguations' => array( 'ଆବୁରୁଜାବୁରୁ_କଥା' ),
- 'DoubleRedirects' => array( 'ଦୁଇଥର_ଲେଉଟାଣି' ),
- 'Emailuser' => array( 'ସଭ୍ୟଙ୍କୁ_ମେଲ_କରନ୍ତୁ' ),
- 'Export' => array( 'ରପ୍ତାନି_କରିବା' ),
- 'Fewestrevisions' => array( 'ସବୁଠୁ_କମ_ସଙ୍କଳନ' ),
- 'FileDuplicateSearch' => array( 'ନକଲି_ଫାଇଲ_ଖୋଜା' ),
+ 'CreateAccount' => array( 'ଖାତାଖୋଲିବେ' ),
+ 'Deadendpages' => array( 'ଆଗକୁରାହାନଥିବାପୃଷ୍ଠା' ),
+ 'DeletedContributions' => array( 'ହଟାଇଦିଆଯାଇଥିବାଅବଦାନ' ),
+ 'Disambiguations' => array( 'ବହୁବିକଳ୍ପୀ' ),
+ 'DoubleRedirects' => array( 'ଦୁଇଥରଲେଉଟାଣି' ),
+ 'EditWatchlist' => array( 'ଧ୍ୟାନସୂଚୀବଦଳାଇବେ' ),
+ 'Emailuser' => array( 'ସଭ୍ୟଙ୍କୁମେଲକରିବେ' ),
+ 'Export' => array( 'ରପ୍ତାନି' ),
+ 'Fewestrevisions' => array( 'ସବୁଠୁକମସଙ୍କଳନ' ),
+ 'FileDuplicateSearch' => array( 'ଫାଇଲନକଲିଖୋଜା' ),
'Filepath' => array( 'ଫାଇଲରାସ୍ତା' ),
'Import' => array( 'ଆମଦାନି' ),
- 'Invalidateemail' => array( 'କାମକରୁନଥିବା_ଇମେଲ' ),
- 'BlockList' => array( 'ତାଲିକାକୁ__ଅଟକାଇଦେବା' ),
- 'LinkSearch' => array( 'ଲିଙ୍କ_ଖୋଜା' ),
- 'Listadmins' => array( 'ପରିଛା_ତାଲିକା' ),
- 'Listbots' => array( 'ବଟ_ମାନଙ୍କ_ତାଲିକା' ),
- 'Listfiles' => array( 'ଫାଇଲ_ତାଲିକା' ),
- 'Listgrouprights' => array( 'ଗୋଠ_ନିୟମ_ତାଲିକା' ),
- 'Listredirects' => array( 'ଲେଉଟାଣି_ତାଲିକା' ),
- 'Listusers' => array( 'ଇଉଜର_ତାଲିକା' ),
- 'Lockdb' => array( 'ଡାଟାବେସ_କିଳିଦେବା' ),
+ 'Invalidateemail' => array( 'କାମକରୁନଥିବାଇମେଲ' ),
+ 'JavaScriptTest' => array( 'ଜାଭାସ୍କ୍ରିପ୍ଟଟେଷ୍ଟ' ),
+ 'BlockList' => array( 'ତାଲିକାଅଟକାଇବେ' ),
+ 'LinkSearch' => array( 'ଲିଙ୍କଖୋଜା' ),
+ 'Listadmins' => array( 'ପରିଛାତାଲିକା' ),
+ 'Listbots' => array( 'ବଟତାଲିକା' ),
+ 'Listfiles' => array( 'ଫାଇଲତାଲିକା' ),
+ 'Listgrouprights' => array( 'ଗୋଠନିୟମତାଲିକା' ),
+ 'Listredirects' => array( 'ଲେଉଟାଣିତାଲିକା' ),
+ 'Listusers' => array( 'ସଭ୍ୟତାଲିକା' ),
+ 'Lockdb' => array( 'ଡାଟାବେସକିଳିଦେବା' ),
'Log' => array( 'ଲଗ' ),
- 'Lonelypages' => array( 'ଏକୁଟିଆ_ପୃଷ୍ଠା' ),
- 'Longpages' => array( 'ଲମ୍ବା_ପୃଷ୍ଠା' ),
- 'MergeHistory' => array( 'ଇତିହାସକୁ_ମିଶାଇଦେବା' ),
+ 'Lonelypages' => array( 'ଏକୁଟିଆପୃଷ୍ଠା' ),
+ 'Longpages' => array( 'ଲମ୍ବାପୃଷ୍ଠା' ),
+ 'MergeHistory' => array( 'ଇତିହାସକୁମିଶାଇବେ' ),
'MIMEsearch' => array( 'MIME_ଖୋଜା' ),
- 'Mostcategories' => array( 'ଅଧିକ_ଶ୍ରେଣୀ' ),
- 'Mostimages' => array( 'ଅଧିକ_ଯୋଡ଼ା_ଫାଇଲ' ),
- 'Mostlinked' => array( 'ଅଧିକ_ଯୋଡ଼ା_ପୃଷ୍ଠା' ),
- 'Mostlinkedcategories' => array( 'ଅଧିକ_ଯୋଡ଼ା_ଶ୍ରେଣୀ' ),
- 'Mostlinkedtemplates' => array( 'ଅଧିକ_ଯୋଡ଼ା_ଛାଞ୍ଚ' ),
- 'Mostrevisions' => array( 'ଅଧିକ_ସଙ୍କଳନ' ),
- 'Movepage' => array( 'ପà\83ଷà\8dଠାà¬\95à\81_à¬\98à\81à¬\9eà\8dà¬\9aାà¬\87ବା' ),
- 'Mycontributions' => array( 'ମୋ_ଅବଦାନ' ),
- 'Mypage' => array( 'ମୋ_ପୃଷ୍ଠା' ),
- 'Mytalk' => array( 'ମୋ_ଆଲୋଚନା' ),
- 'Myuploads' => array( 'ମୋ_ଅପଲୋଡ଼' ),
- 'Newimages' => array( 'ନୂଆ_ଫାଇଲ' ),
- 'Newpages' => array( 'ନୂଆ_ପୃଷ୍ଠା' ),
- 'PermanentLink' => array( 'à¬\9aିରà¬\95ାଳର_ଲିà¬\99à\8dà¬\95' ),
- 'Popularpages' => array( 'ଜଣାଶୁଣା_ପୃଷ୍ଠା' ),
- 'Preferences' => array( 'ପସନ୍ଦସବୁ' ),
- 'Prefixindex' => array( 'ଆଗରେ_ଯୋଡ଼ାହେବା_ଇଣ୍ଡେକ୍ସ' ),
- 'Protectedpages' => array( 'କିଳାଯାଇଥିବା_ପୃଷ୍ଠା' ),
- 'Protectedtitles' => array( 'କିଳାଯାଇଥିବା_ନାଆଁ' ),
- 'Randompage' => array( 'à¬\87à¬\86ଡà\81_à¬\87à¬\86ଡà\81' ),
- 'Randomredirect' => array( 'ଜାହିତାହି_ଫେରଣାଲେଉଟାଣି' ),
- 'Recentchanges' => array( 'ନଗଦ_ବଦଳ' ),
- 'Recentchangeslinked' => array( 'ଜୋଡ଼ାଥିବା_ନଗଦ_ବଦଳ' ),
+ 'Mostcategories' => array( 'ଅଧିକଶ୍ରେଣୀଥିବା' ),
+ 'Mostimages' => array( 'ଅଧିକଯୋଡ଼ାଫାଇଲ' ),
+ 'Mostlinked' => array( 'ଅଧିକଯୋଡ଼ାପୃଷ୍ଠା' ),
+ 'Mostlinkedcategories' => array( 'ଅଧିକଯୋଡ଼ାଶ୍ରେଣୀ' ),
+ 'Mostlinkedtemplates' => array( 'ଅଧିକଯୋଡ଼ାଛାଞ୍ଚ' ),
+ 'Mostrevisions' => array( 'ଅଧିକସଙ୍କଳନ' ),
+ 'Movepage' => array( 'ପà\83ଷà\8dଠାà¬\98à\81à¬\9eà\8dà¬\9aାà¬\87ବà\87' ),
+ 'Mycontributions' => array( 'ମୋଅବଦାନ' ),
+ 'Mypage' => array( 'ମୋପୃଷ୍ଠା' ),
+ 'Mytalk' => array( 'ମୋଆଲୋଚନା' ),
+ 'Myuploads' => array( 'ମୋଅପଲୋଡ଼' ),
+ 'Newimages' => array( 'ନୂଆଫାଇଲ' ),
+ 'Newpages' => array( 'ନୂଆପୃଷ୍ଠା' ),
+ 'PermanentLink' => array( 'ଚିରକାଳଲିଙ୍କ' ),
+ 'Popularpages' => array( 'ଜଣାଶୁଣାପୃଷ୍ଠା' ),
+ 'Preferences' => array( 'ପସନ୍ଦ' ),
+ 'Prefixindex' => array( 'ଆଗରେଯୋଡ଼ାହେବାଇଣ୍ଡେକ୍ସ' ),
+ 'Protectedpages' => array( 'କିଳାଯାଇଥିବାପୃଷ୍ଠା' ),
+ 'Protectedtitles' => array( 'କିଳାଯାଇଥିବାନାମ' ),
+ 'Randompage' => array( 'à¬\9cାହିତାହି', 'à¬\9cାହିତାହିପà\83ଷà\8dଠା' ),
+ 'Randomredirect' => array( 'ଜାହିତାହିଲେଉଟାଣି' ),
+ 'Recentchanges' => array( 'ନଗଦବଦଳ' ),
+ 'Recentchangeslinked' => array( 'ଜୋଡ଼ାଥିବାନଗଦବଦଳ', 'ପାଖାପାଖିବଦଳ' ),
'Revisiondelete' => array( 'ସଙ୍କଳନଲିଭାଇଦିଅଦେବେ' ),
'RevisionMove' => array( 'ସଙ୍କଳନ' ),
'Search' => array( 'ଖୋଜନ୍ତୁ' ),
- 'Shortpages' => array( 'ଛୋଟ_ପୃଷ୍ଠା' ),
- 'Specialpages' => array( 'ବିଶେଷ_ପୃଷ୍ଠା' ),
+ 'Shortpages' => array( 'ଛୋଟପୃଷ୍ଠା' ),
+ 'Specialpages' => array( 'ବିଶେଷପୃଷ୍ଠା' ),
'Statistics' => array( 'ଗଣନା' ),
'Tags' => array( 'ଚିହ୍ନସମୂହ' ),
'Unblock' => array( 'ଫିଟାଇଦେବେ' ),
- 'Uncategorizedcategories' => array( 'ଅସଜଡ଼ା_ଶ୍ରେଣୀ' ),
- 'Uncategorizedimages' => array( 'ସà¬\9cଡ଼ା_ଶà\8dରà\87ଣà\80ର_ଫାଇଲ' ),
+ 'Uncategorizedcategories' => array( 'ଅସଜଡ଼ାଶ୍ରେଣୀ' ),
+ 'Uncategorizedimages' => array( 'à¬\85ସà¬\9cଡ଼ାଶà\8dରà\87ଣà\80ରଫାଇଲ' ),
'Uncategorizedpages' => array( 'ଅସଜଡ଼ା_ଫାଇଲସବୁ' ),
- 'Uncategorizedtemplates' => array( 'ଅସଜଡ଼ା_ଛାଞ୍ଚ' ),
- 'Undelete' => array( 'ଲିà¬à¬¾à¬¨à\8dତà\81_ନାହିà¬\81' ),
+ 'Uncategorizedtemplates' => array( 'ଅସଜଡ଼ାଛାଞ୍ଚ' ),
+ 'Undelete' => array( 'à¬\85ଣଲିà¬à¬¾' ),
'Unlockdb' => array( 'DBଖୋଲିବା' ),
- 'Unusedcategories' => array( 'ବ୍ୟବହାର_ହୋଇନଥିବା_ଶ୍ରେଣୀ' ),
- 'Unusedimages' => array( 'ବ୍ୟବହାର_ହୋଇନଥିବା_ଫାଇଲ' ),
- 'Unusedtemplates' => array( 'ବ୍ୟବହାର_ହୋଇନଥିବା_ଛାଞ୍ଚ' ),
- 'Unwatchedpages' => array( 'ଦେଖାଯାଇନଥିବା_ପୃଷ୍ଠାସବୁ' ),
+ 'Unusedcategories' => array( 'ବ୍ୟବହାରହୋଇନଥିବାଶ୍ରେଣୀ' ),
+ 'Unusedimages' => array( 'ବ୍ୟବହାରହୋଇନଥିବାଫାଇଲ' ),
+ 'Unusedtemplates' => array( 'ବ୍ୟବହାରହୋଇନଥିବାଛାଞ୍ଚ' ),
+ 'Unwatchedpages' => array( 'ଦେଖାଯାଇନଥିବାପୃଷ୍ଠାସବୁ' ),
'Upload' => array( 'ଅପଲୋଡ଼' ),
- 'UploadStash' => array( 'ଷ୍ଟାସ_ଅପଲୋଡ଼_କରନ୍ତୁ' ),
- 'Userlogin' => array( 'ସଭ୍ୟ_ଲଗ_ଇନ' ),
- 'Userlogout' => array( 'ସଭ୍ୟ_ଲଗ_ଆଉଟ' ),
- 'Userrights' => array( 'ସଭ୍ୟ_ଅଧିକାର' ),
+ 'UploadStash' => array( 'ଷ୍ଟାସଅପଲୋଡ଼' ),
+ 'Userlogin' => array( 'ସଭ୍ୟଲଗଇନ' ),
+ 'Userlogout' => array( 'ସଭ୍ୟଲଗଆଉଟ' ),
+ 'Userrights' => array( 'ସଭ୍ୟଅଧିକାର' ),
'Version' => array( 'ସଂସ୍କରଣ' ),
- 'Wantedcategories' => array( 'ଦରକାରି_ଶ୍ରେଣୀ' ),
- 'Wantedfiles' => array( 'ଦରକାରି_ଫାଇଲ' ),
- 'Wantedpages' => array( 'ଦରକାରି_ପୃଷ୍ଠା' ),
- 'Wantedtemplates' => array( 'ଦରକାରି_ଛାଞ୍ଚ' ),
- 'Watchlist' => array( 'ଦେଖଣା_ତାଲିକା' ),
- 'Whatlinkshere' => array( 'ଏଠାରେ_କଣ_ଲିଙ୍କ_ଅଛି' ),
- 'Withoutinterwiki' => array( 'ଇଣ୍ଟରଉଇକି_ବିନା' ),
+ 'Wantedcategories' => array( 'ଦରକାରିଶ୍ରେଣୀ' ),
+ 'Wantedfiles' => array( 'ଦରକାରିଫାଇଲ' ),
+ 'Wantedpages' => array( 'ଦରକାରିପୃଷ୍ଠା' ),
+ 'Wantedtemplates' => array( 'ଦରକାରିଛାଞ୍ଚ' ),
+ 'Watchlist' => array( 'ଦେଖଣାତାଲିକା' ),
+ 'Whatlinkshere' => array( 'ଏଠାରେକଣଲିଙ୍କଅଛି' ),
+ 'Withoutinterwiki' => array( 'ଇଣ୍ଟରଉଇକିବିନା' ),
);
$magicWords = array(
'february' => 'ଫେବୃଆରୀ',
'march' => 'ମାର୍ଚ୍ଚ',
'april' => 'ଅପ୍ରେଲ',
-'may_long' => 'ମà\87',
+'may_long' => 'ମà¬\87',
'june' => 'ଜୁନ',
'july' => 'ଜୁଲାଇ',
'august' => 'ଅଗଷ୍ଟ',
'february-gen' => 'ଫେବୃଆରୀ',
'march-gen' => 'ମାର୍ଚ୍ଚ',
'april-gen' => 'ଅପ୍ରେଲ',
-'may-gen' => 'ମà\87',
+'may-gen' => 'ମà¬\87',
'june-gen' => 'ଜୁନ',
'july-gen' => 'ଜୁଲାଇ',
'august-gen' => 'ଅଗଷ୍ଟ',
'feb' => 'ଫେବୃଆରୀ',
'mar' => 'ମାର୍ଚ୍ଚ',
'apr' => 'ଅପ୍ରେଲ',
-'may' => 'ମà\87',
+'may' => 'ମà¬\87',
'jun' => 'ଜୁନ',
'jul' => 'ଜୁଲାଇ',
'aug' => 'ଅଗଷ୍ଟ',
# User rights log
'rightslog' => 'ସଭ୍ୟଙ୍କ ଅଧିକାରର ଲଗ',
-'rightslogtext' => 'ସଭ୍ୟଙ୍କ ଅଧିକାରର ବଦଳର ଏହା ଏକ ଇତିହାସ ।',
+'rightslogtext' => 'ସଭ୍ୟଙ୍କ ଅଧିକାର ବଦଳର ଏହା ଏକ ଇତିହାସ ।',
'rightslogentry' => '$1 ପାଇଁ ଗୋଠ ସଭ୍ୟପଦର ଅବସ୍ଥା $2 ରୁ $3କୁ ବଦଳାଇଦିଆଗଲା',
'rightslogentry-autopromote' => '$2 ରୁ $3କୁ ଆପେଆପେ ଉନ୍ନୀତ କରାଗଲା',
'rightsnone' => '(କିଛି ନାହିଁ)',
'nchanges' => '$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}',
'recentchanges' => 'ନଗଦ ବଦଳ',
'recentchanges-legend' => 'ଏବେ କରାଯାଇଥିବା ଅଦଳବଦଳ',
-'recentchangestext' => 'ଏହି ପୃଷ୍ଠାରେ ଏହି ଉଇକିରେ ନଗଦ ବଦଳର ନିଘା ରଖିବେ',
+'recentchanges-summary' => 'ଏହି ପୃଷ୍ଠାରେ ଏହି ଉଇକିରେ ନଗଦ ବଦଳର ନିଘା ରଖିବେ',
'recentchanges-feed-description' => 'ଏହି ଉଇକିରେ ଏହି ଫିଡ଼ଟିର ନଗଦ ବଦଳ ଦେଖାଇବେ ।',
'recentchanges-label-newpage' => 'ଏହି ବଦଳ ନୂଆ ଫରଦଟିଏ ତିଆରିକଲା',
'recentchanges-label-minor' => 'ଏହା ଗୋଟିଏ ଛୋଟ ବଦଳ',
'watchlisttools-raw' => 'ଫାଙ୍କା ଦେଖଣା ତାଲିକାଟିର ସମ୍ପାଦନା କରିବେ',
# Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ଆଲୋଚନା]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ମà\8b à¬\86ଲà\8bà¬\9aନା]])',
# Core parser functions
'unknown_extension_tag' => 'ଅଜଣା ଏକ୍ସଟେନସନ ଚିହ୍ନ "$1"',
'template-semiprotected' => '(ਅਰਧ-ਸੁਰੱਖਿਅਤ)',
'permissionserrors' => 'ਅਧਿਕਾਰ ਗਲਤੀਆਂ',
'permissionserrorstext' => 'ਤੁਹਾਨੂੰ ਇੰਝ ਕਰਨ ਦੇ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ। ਹੇਠ ਦਿੱਤੇ {{PLURAL:$1|ਕਾਰਨ|ਕਾਰਨ}} ਨੇ:',
+'recreate-moveddeleted-warn' => "'''ਖ਼ਬਰਦਾਰ: ਤੁਸੀਂ ਐਸ ਪੰਨਾ ਰਚ ਰਹੇ ਹੋ ਜਿਸ ਨੂੰ ਪਹਿਲੇ ਹਟਾਇਆ ਜਾ ਚੁੱਕ ਹੈ।'''
+ਖਿਆਲ ਕਰੋ ਕਿ ਕੀ ਇਸ ਪੰਨੇ ਦਾ ਕਾਇਮ ਰਹਿਣਾ ਠੀਕ ਹੈ।
+ਇਸ ਪੰਨੇ ਨੂੰ ਹਟਾਉਣ ਯਾ ਜਘ੍ਹਾ ਬਦਲੀ ਦਾ ਚਿੱਠਾ ਹੇਠਾਂ ਦਿੱਤਾ ਹੈ।",
+'moveddeleted-notice' => 'ਇਹ ਪੰਨਾ ਹਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ।
+ਪੰਨੇ ਦੇ ਹਟਾਣ ਯਾ ਜਗ੍ਹਾ ਬਦਲੀ ਦਾ ਚਿੱਠਾ,ਹਵਾਲੇ ਲਈ ਹੇਠ ਦਿੱਤਾ ਹੈ।',
# Parser/template warnings
'post-expand-template-inclusion-warning' => "'''ਖ਼ਬਰਦਾਰ: ਸੰਚੇ ਦਾ ਅਕਾਰ ਬਹੁਤ ਵੱਡਾ ਹੈ।ਕੁਝ ਸੰਚੇ ਛੁਟ ਜਾਣਗੇ।",
# Recent changes
'recentchanges' => 'ਤਾਜ਼ਾ ਬਦਲਾਅ',
'recentchanges-legend' => 'ਤਾਜ਼ਾ ਬਦਲਾਅ ਚੋਣਾਂ',
-'recentchangestext' => 'ਇਸ ਵਿਕੀ ਪਰ ਹਾਲ ਵਿਚ ਹੋਏ ਬਦਲਾਅਦੇਖੇ ਜਾ ਸਕਦੇ ਹਨ।',
+'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ਪਰ ਹਾਲ ਵਿਚ ਹੋਏ ਬਦਲਾਅਦੇਖੇ ਜਾ ਸਕਦੇ ਹਨ।',
+'recentchanges-feed-description' => 'ਇਸ ਵਿਕੀ ਪਰ ਹਾਲ ਵਿਚ ਹੋਏ ਬਦਲਾਅ ਇਸ ਫ਼ੀਡ ਵਿਚ ਦੇਖੇ ਜਾ ਸਕਦੇ ਹਨ।',
'recentchanges-label-newpage' => 'ਇਹ ਸੋਧ ਨੇ ਨਵਾਂ ਸਫ਼ਾ ਬਣਾਇਆ ਹੈ',
'recentchanges-label-minor' => 'ਇਹ ਛੋਟੀ ਸੋਧ ਹੈ',
'recentchanges-label-bot' => 'ਇਹ ਸੋਧ ਨੂੰ ਬੋਟ ਵਲੋਂ ਕੀਤਾ ਗਿਆ ਹੈ',
'prefixindex' => 'ਇਸ ਅਗੇਤਰ ਵਾਲੇ ਸਾਰੇ ਪੰਨੇ',
'shortpages' => 'ਛੋਟੇ ਪੇਜ',
'listusers' => 'ਯੂਜ਼ਰ ਲਿਸਟ',
+'usercreated' => ' $1 ਨੂੰ $2 ਵਜੇ {{GENDER:$3|ਮੈਂਬਰ ਨੇ ਰਚਿਆ}}',
'newpages' => 'ਨਵੇਂ ਪੇਜ',
'newpages-username' => 'ਯੂਜ਼ਰ ਨਾਂ:',
'ancientpages' => 'ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਪੇਜ',
'listusers-submit' => 'ਵੇਖੋ',
'listusers-noresult' => 'ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ ਲੱਭਿਆ।',
+# Special:Log/newusers
+'newuserlogpage' => 'ਮੈਂਬਰ ਖਾਤਾ ਉਸਾਰੀ ਚਿੱਠਾ',
+
# Special:ListGroupRights
'listgrouprights-group' => 'ਗਰੁੱਪ',
'listgrouprights-members' => '(ਮੈਂਬਰਾਂ ਦੀ ਲਿਸਟ)',
# Contributions
'contributions' => 'ਯੂਜ਼ਰ ਯੋਗਦਾਨ',
-'contributions-title' => '$੧ ਦਾ ਯà©\8bà¨\97ਦਾਨ',
+'contributions-title' => '$੧ ਦà©\80 ਰà¨\9aਨਾ',
'mycontris' => 'ਮੇਰਾ ਯੋਗਦਾਨ',
'contribsub2' => '$1 ($2) ਲਈ',
'uctop' => '(ਉੱਤੇ)',
'sp-contributions-talk' => 'ਗੱਲਬਾਤ',
'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
'sp-contributions-username' => 'IP ਐਡਰੈੱਸ ਜਾਂ ਯੂਜ਼ਰ ਨਾਂ:',
+'sp-contributions-toponly' => 'ਕੇਵਲ ਉਹੀ ਸੰਪਾਦਨ ਦਿਖਾਓ ਜੋ ਨਵੀਨਤਮ ਸੋਧਾਂ ਹਨ।',
'sp-contributions-submit' => 'ਖੋਜ',
# What links here
* @author Kaganer
* @author Lajsikonik
* @author Lampak
+ * @author Lazowik
* @author Leinad
* @author Maikking
* @author Marcin Łukasz Kiejzik
'filereadonlyerror' => 'Nie można zmodyfikować pliku "$1" ponieważ repozytorium plików "$2" jest w trybie tylko do odczytu.
Administrator blokujący go podał następujący powód "\'\'$3\'\'".',
+'invalidtitle-knownnamespace' => 'Nieprawidłowa nazwa w obszarze nazw "$2" o treści "$3"',
+'invalidtitle-unknownnamespace' => 'Nieprawidłowa nazwa z nieznaną liczbą przestrzeni nazw $1 o treści "$2"',
# Virus scanner
'virus-badscanner' => "Zła konfiguracja – nieznany skaner antywirusowy ''$1''",
'parser-template-loop-warning' => 'Wykryto pętlę w szablonie [[$1]]',
'parser-template-recursion-depth-warning' => 'Przekroczno limit głębokości rekurencji szablonu ($1)',
'language-converter-depth-warning' => 'Przekroczono ograniczenie ($1) głębokości zagnieżdżenia konwersji językowej',
+'node-count-exceeded-category' => 'Strony, gdzie przekroczono liczbę węzłów',
+'node-count-exceeded-warning' => 'Strona przekroczyła liczbę węzłów',
# "Undo" feature
'undo-success' => 'Edycja może zostać wycofana. Porównaj ukazane poniżej różnice między wersjami, a następnie zapisz zmiany.',
# Diffs
'history-title' => 'Historia edycji „$1”',
+'difference-title' => 'Różnica pomiędzy wersjami strony "$1"',
+'difference-title-multipage' => 'Różnica pomiędzy stronami "$1" i "$2"',
'difference-multipage' => '(Różnica między stronami)',
'lineno' => 'Linia $1:',
'compareselectedversions' => 'porównaj wybrane wersje',
'nchanges' => '$1 {{PLURAL:$1|zmiana|zmiany|zmian}}',
'recentchanges' => 'Ostatnie zmiany',
'recentchanges-legend' => 'Opcje ostatnich zmian',
-'recentchangestext' => 'Ta strona przedstawia historię ostatnich zmian w tej wiki.',
+'recentchanges-summary' => 'Ta strona przedstawia historię ostatnich zmian w tej wiki.',
'recentchanges-feed-description' => 'Obserwuj najświeższe zmiany w tej wiki.',
'recentchanges-label-newpage' => 'W tej edycji utworzono nową stronę',
'recentchanges-label-minor' => 'To jest drobna zmiana',
'backend-fail-closetemp' => 'Nie można zamknąć pliku tymczasowego.',
'backend-fail-read' => 'Nie można odczytać pliku $1.',
'backend-fail-create' => 'Nie można utworzyć pliku $1.',
-'backend-fail-maxsize' => 'Nie udało utworzyć pliku $1 ponieważ jest on większy niż {{PLURAL:$2|$2 bajt| $2 bajty| $2 bajtów}}.',
+'backend-fail-maxsize' => 'Nie udało zapisać pliku $1 ponieważ jest on większy niż {{PLURAL:$2|jeden bajt| $2 bajty| $2 bajtów}}.',
'backend-fail-readonly' => 'Interfejs magazynowania "$1" jest obecnie tylko do odczytu. Powód: "$2"',
'backend-fail-synced' => 'Plik "$1" jest w niespójnym stanie w ramach wewnętrznych funkcji magazynowania',
'backend-fail-connect' => 'Nie można nawiązać połączenia do wewnętrznych funkcji magazynowania "$1".',
'backend-fail-internal' => 'Wystąpił nieznany błąd w wewnętrznych funkcjach magazynowania "$1".',
'backend-fail-contenttype' => 'Nie można określić typ zawartości pliku do przechowywania w "$1".',
'backend-fail-batchsize' => 'Wewnętrzne funkcje magazynowania otrzymały $1 {{PLURAL:$1|operację|operacje|operacji}} na pliku; limit wynosi $2 {{PLURAL:$2| operacja|operacje|operacji}}.',
+'backend-fail-usable' => 'Nie można zapisać pliku $1 ze względu na niewystarczające uprawnienia lub brak katalogów/kontenerów.',
# File journal errors
'filejournal-fail-dbconnect' => 'Nie można połączyć się z bazą danych dziennika dla backendu magazynowania "$1".',
Więcej informacji odnajdziesz na [$2 stronie opisu pliku].',
'sharedupload-desc-here' => 'Ten plik znajduje się na $1 i może być używany w innych projektach.
Poniżej znajdują się informacje ze [$2 strony opisu] tego pliku.',
+'sharedupload-desc-edit' => 'Plik ten pochodzi z $1 i może być wykorzystany w innych projektach.
+Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
+'sharedupload-desc-create' => 'Plik ten pochodzi z $1 i może być wykorzystany w innych projektach.
+Być może zechcesz zmienić opis na tej [$2 stronie opisu pliku].',
'filepage-nofile' => 'Plik o tej nazwie nie istnieje.',
'filepage-nofile-link' => 'Plik o tej nazwie nie istnieje, ale możesz go [$1 przesłać].',
'uploadnewversion-linktext' => 'Załaduj nowszą wersję tego pliku',
'version-software' => 'Zainstalowane oprogramowanie',
'version-software-product' => 'Nazwa',
'version-software-version' => 'Wersja',
+'version-entrypoints' => 'Adres URL punktu wejścia',
+'version-entrypoints-header-entrypoint' => 'Punkt wejścia',
'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'nchanges' => '$1 {{PLURAL:$1|modìfica|modìfiche}}',
'recentchanges' => 'Ùltime modìfiche',
'recentchanges-legend' => "Opsion dj'ùltime modìfiche",
-'recentchangestext' => 'An costa pàgina as ten cont dle modìfiche pì recente a la wiki.',
+'recentchanges-summary' => 'An costa pàgina as ten cont dle modìfiche pì recente a la wiki.',
'recentchanges-feed-description' => 'Trassé le modìfiche dla wiki pì davzin-e ant ël temp an cost fluss.',
'recentchanges-label-newpage' => "Sta modìfica-sì a l'ha creà na neuva pàgina",
'recentchanges-label-minor' => "Costa a l'é na modìfica cita",
'movelogpagetext' => 'Ambelessì sota a-i é na lista ëd tute le pàgine che a son ëstàite tramudà.',
'movesubpage' => '{{PLURAL:$1|Sot-pàgina|Sot-pàgine}}',
'movesubpagetext' => "Costa pàgina-sì a l'ha $1 {{PLURAL:$1|sot-pàgina|sot-pàgine}} smonùe sì-sota.",
-'movenosubpage' => "Sta pàgina-sì a l'ha pa ëd sotpàgine.",
+'movenosubpage' => "Sta pàgina-sì a l'ha gnun-e sot-pàgine.",
'movereason' => 'Rason:',
-'revertmove' => "buta torna coma a l'era",
-'delete_and_move' => 'Scancela e tramuda',
-'delete_and_move_text' => '==A fa da manca dë scancelé==
+'revertmove' => "buté torna coma a l'era",
+'delete_and_move' => 'Scancelé e tramudé',
+'delete_and_move_text' => "==A fa da manca dë scancelé==
-L\'artìcol ëd destinassion "[[:$1]]" a-i é già. Veul-lo scancelelo për avej ëd pòst për tramudé l\'àutr?',
-'delete_and_move_confirm' => 'É, scancela la pàgina',
-'delete_and_move_reason' => 'Scancelà për liberé ël pòst për tramudé "[[$1]]"',
+L'artìcol ëd destinassion «[[:$1]]» a-i é già. Veul-lo scancelelo për avèj ëd pòst për tramudé l'àutr?",
+'delete_and_move_confirm' => 'É, scancelé la pàgina',
+'delete_and_move_reason' => 'Scancelà për liberé ël pòst për tramudé «[[$1]]»',
'selfmove' => "Tìtol neuv e tìtol vej a resto midem antra lor; as peul pa tramudesse na pàgina butand-la andoa che a l'é già.",
'immobile-source-namespace' => 'As peul pa tramudé ëd pàgine ant ël namespace "$1"',
'immobile-target-namespace' => 'As peul pa tramudé ëd pàgine ant ël namespace "$1"',
'api-error-uploaddisabled' => "Ël cariagi a l'é disabilità su sta wiki.",
'api-error-verification-error' => "Cost archivi a peul esse danegià, o avèj l'estension sbalià.",
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|second|second}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minute}}',
+'duration-hours' => '$1 {{PLURAL:$1|ora|ore}}',
+'duration-days' => '$1 {{PLURAL:$1|di|di}}',
+'duration-weeks' => '$1 {{PLURAL:$1|sman-a|sman-e}}',
+'duration-years' => '$1 {{PLURAL:$1|ann|agn}}',
+'duration-decades' => "$1 {{PLURAL:$1|desen-a d'agn|desen-e d'agn}}",
+'duration-centuries' => '$1 {{PLURAL:$1|sécol|sécoj}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenari|milenari}}',
+
);
'nchanges' => '$1 {{PLURAL:$1|change|تبدیلیاں}}',
'recentchanges' => 'نویاں تبدیلیاں',
'recentchanges-legend' => 'نویاں تبدیلیاں دیاں راواں',
-'recentchangestext' => 'ایس وکی تے نیڑے نیڑے ہون والیاں تبدیلیاں ایس صفے تے دسو۔',
+'recentchanges-summary' => 'ایس وکی تے نیڑے نیڑے ہون والیاں تبدیلیاں ایس صفے تے دسو۔',
'recentchanges-feed-description' => 'اس فیڈ وچ وکی تے ہوئیاں نویاں تبدیلیاں نو ویکھو۔',
'recentchanges-label-newpage' => 'ایس تبدیلی نے نواں صفہ بنایا اے۔',
'recentchanges-label-minor' => 'اے اک چھوٹی تبدیلی اے۔',
'undelete-error-short' => 'فاغل واپس کرن چ غلطی: $1',
'undelete-error-long' => 'فائل واپس کرن لگیاں غلطیاں ہوئیاں:
$1',
-'undelete-show-file-confirm' => 'تساں نوں کیا پک اے جے تسیں فائل "<نوکی>$1</نوکی>" دی مٹائی ریوین $2 توں $3 تک ویکھنا چاندے او؟',
+'undelete-show-file-confirm' => 'تساں نوں کیا پک اے جے تسیں فائل "<nowiki>$1</nowiki>" دی مٹائی ریوین $2 توں $3 تک ویکھنا چاندے او؟',
'undelete-show-file-submit' => 'ہاں جی',
# Namespace form on various pages
'import-revision-count' => '$1 {{PLURAL:$1|ریوین}}',
'importnopages' => 'لانے آسطے کوئی صفحہ نئیں۔',
'imported-log-entries' => '{{PLURAL:$1|لاگ انٹریلاگ انٹریاں}}!!لیاندی گئی $1 {{PLURAL:$1|لاگ انٹری}}.',
-'importfailed' => 'لیانا فیل: <نوکی>$1</نوکی>',
+'importfailed' => 'لیانا فیل: <nowiki>$1</nowiki>',
'importunknownsource' => 'انجان لیان سورس ٹائپ',
'importcantopen' => 'لیاندی گئی فائل نئیں کھولی جاسکی',
'importbadinterwiki' => 'پیڑا انٹروکی لنک',
'nchanges' => '$1 {{PLURAL:$1|بدلون|بدلونونه}}',
'recentchanges' => 'وروستي بدلونونه',
'recentchanges-legend' => 'د ورستي بدلونو خوښنې',
-'recentchangestext' => 'په همدې مخ باندې د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.',
+'recentchanges-summary' => 'په همدې مخ باندې د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ.',
'recentchanges-feed-description' => 'همدلته د ويکي ترټولو تازه وروستي بدلونونه وڅارۍ او وګورۍ چې څه پېښ شوي.',
'recentchanges-label-newpage' => 'دغه سمون يو نوی مخ جوړ کړی',
'recentchanges-label-minor' => 'دا يوه وړه سمونه ده',
'nchanges' => '$1 {{PLURAL:$1|alteração|alterações}}',
'recentchanges' => 'Mudanças recentes',
'recentchanges-legend' => 'Opções das mudanças recentes',
-'recentchangestext' => 'Acompanhe nesta página as mudanças mais recentes da wiki.',
+'recentchanges-summary' => 'Acompanhe nesta página as mudanças mais recentes da wiki.',
'recentchanges-feed-description' => "Acompanhe neste ''feed'' as mudanças mais recentes da wiki.",
'recentchanges-label-newpage' => 'Esta edição criou uma página nova',
'recentchanges-label-minor' => 'Esta é uma edição menor',
'http-curl-error' => 'Ocorreu um erro ao aceder à URL: $1',
'http-host-unreachable' => 'Não foi possível aceder à URL',
'http-bad-status' => 'Ocorreu um problema durante o pedido HTTP: $1 $2',
-'http-truncated-body' => 'O corpo da solicitação foi recebido apenas parcialmente.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Não foi possível aceder à URL',
O registo de bloqueios é fornecido abaixo para referência:',
'blocklog-showsuppresslog' => 'Este utilizador foi bloqueado e ocultado anteriomente.
O registo de supressão é fornecido abaixo para referência:',
-'blocklogentry' => 'bloqueou "[[$1]]" $3. O bloqueio expira em $2.',
-'reblock-logentry' => 'modificou parâmetros de bloqueio de [[$1]] $3. O bloqueio expira em $2.',
+'blocklogentry' => 'bloqueou "[[$1]]" por $2. $3',
+'reblock-logentry' => 'modificou parâmetros de bloqueio de [[$1]] com expiração em $2. $3',
'blocklogtext' => 'Este é um registo de ações de bloqueio e desbloqueio.
Endereços IP sujeitos a bloqueio automático não estão listados.
Consulte a [[Special:BlockList|lista de bloqueios]] para obter a lista de bloqueios e banimentos atualmente válidos.',
'Allmessages' => array( 'Todas_as_mensagens', 'Todas_mensagens' ),
'Allpages' => array( 'Todas_as_páginas', 'Todos_os_artigos', 'Todas_páginas', 'Todos_artigos' ),
'Ancientpages' => array( 'Páginas_inativas', 'Artigos_inativos' ),
+ 'Badtitle' => array( 'Título_inválido' ),
'Blankpage' => array( 'Página_em_branco' ),
'Block' => array( 'Bloquear', 'Bloquear_IP', 'Bloquear_utilizador', 'Bloquear_usuário' ),
'Blockme' => array( 'Bloquear-me', 'Auto-bloqueio' ),
'BrokenRedirects' => array( 'Redirecionamentos_quebrados' ),
'Categories' => array( 'Categorias' ),
'ChangePassword' => array( 'Trocar_senha', 'Repor_senha' ),
+ 'ComparePages' => array( 'Comparar_páginas' ),
'Confirmemail' => array( 'Confirmar_e-mail', 'Confirmar_email' ),
'Contributions' => array( 'Contribuições' ),
'CreateAccount' => array( 'Criar_conta' ),
'DeletedContributions' => array( 'Contribuições_eliminadas', 'Edições_eliminadas' ),
'Disambiguations' => array( 'Páginas_de_desambiguação', 'Desambiguar', 'Desambiguações' ),
'DoubleRedirects' => array( 'Redirecionamentos_duplos' ),
+ 'EditWatchlist' => array( 'Editar_lista_de_páginas_vigiadas' ),
'Emailuser' => array( 'Contatar_usuário', 'Contactar_usuário', 'Contactar_utilizador' ),
'Export' => array( 'Exportar' ),
'Fewestrevisions' => array( 'Páginas_com_menos_edições', 'Artigos_com_menos_edições', 'Artigos_menos_editados' ),
'nchanges' => '$1 {{PLURAL:$1|alteração|alterações}}',
'recentchanges' => 'Mudanças recentes',
'recentchanges-legend' => 'Opções das mudanças recentes',
-'recentchangestext' => 'Acompanhe, a partir desta página, as alterações recentes no wiki {{SITENAME}}.',
+'recentchanges-summary' => 'Veja as mais novas mudanças na {{SITENAME}} nesta página.',
'recentchanges-feed-description' => 'Acompanhe neste feed as mudanças mais recentes do wiki.',
'recentchanges-label-newpage' => 'Esta edição criou uma nova página',
'recentchanges-label-minor' => 'Esta é uma edição menor',
'blocklog-showsuppresslog' => 'O usuário foi bloqueado e ocultado anteriormente.
O registro de supressão é fornecido abaixo para referência:',
'blocklogentry' => 'bloqueou "[[$1]]" por $2. $3',
-'reblock-logentry' => 'modificou parâmetros de bloqueio de [[$1]] $3. O bloqueio expira em $2.',
+'reblock-logentry' => 'modificou parâmetros de bloqueio de [[$1]] com expiração em $2. $3',
'blocklogtext' => 'Este é um registro de ações de bloqueio e desbloqueio.
Endereços IP sujeitos a bloqueio automático não são listados.
Consulte a [[Special:BlockList|lista de bloqueios]] para obter a lista de bloqueios e banimentos em efeito neste momento.',
* @file
*
* @author *Surak*
+ * @author Abanima
* @author Ahonc
* @author Aleator
* @author AlexSm
* @author Sherbrooke
* @author Shirayuki
* @author Shushruth
+ * @author Siddhartha Ghai
* @author Siebrand
* @author Singularity
* @author Sionnach
{{Identical|Recent changes}}',
'recentchanges-legend' => 'Legend of the fieldset of [[Special:RecentChanges]]',
-'recentchangestext' => 'Text in recent changes',
+'recentchanges-summary' => 'Summary of [[Special:RecentChanges]].',
'recentchanges-label-newpage' => 'Tooltip for {{msg-mw|newpageletter}}',
'recentchanges-label-minor' => 'Tooltip for {{msg-mw|newpageletter}}',
'recentchanges-label-bot' => 'Tooltip for {{msg-mw|boteditletter}}',
Parameters:
* $1 is the number of operations attempted at once in this case.
* $2 is the maximum number of operations that can be attempted at once.',
+'backend-fail-usable' => 'Parameters:
+* $1 is the file name, including the path, formatted for the storage backend used',
# File journal errors
'filejournal-fail-dbconnect' => 'Parameters:
If \'scheme\' is difficult to translate, then you could use \'prefix\' instead.',
'http-bad-status' => '$1 is an HTTP error code (e.g. 404), $2 is the HTTP error message (e.g. File Not Found)',
-'http-truncated-body' => 'This is a standard HTTP error message. → Seems the connection closed prematurely. The HTTP response contained a content-length greater than the received body.',
'license' => 'This appears in the upload form for the license drop-down. The header in the file description page is now at {{msg-mw|License-header}}.',
'nolicense' => '{{Identical|None selected}}',
'movetalk' => 'The text of the checkbox to watch the associated talk page to the page you are moving. This only appears when the talk page is not empty.',
'move-subpages' => 'The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any subpages will be moved with the main page to a new title.',
'move-talk-subpages' => 'The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any talk subpages will be moved with the talk page to a new title.',
+'movepage-max-pages' => 'PROBABLY (A GUESS): when moving a page, you can select an option of moving its subpages, but there is a maximum that can be moved automatically.',
'movelogpage' => 'Title of [[Special:Log/move]]. Used as heading on that page, and in the dropdown menu on log pages.',
'movelogpagetext' => "Text on the special page 'Move log'.",
'movesubpage' => "This is a section header on [[Special:MovePage]], below is a list of subpages.
{{Identical|Reason}}',
'revertmove' => '{{Identical|Revert}}',
+'delete_and_move' => 'Button text on the move page when the target page already exists.',
'delete_and_move_text' => 'Used when moving a page, but the destination page already exists and needs deletion. This message is to confirm that you really want to delete the page. See also {{msg|delete and move confirm}}.',
'delete_and_move_confirm' => 'Used when moving a page, but the destination page already exists and needs deletion. This message is for a checkbox to confirm that you really want to delete the page. See also {{msg|delete and move text}}.',
'delete_and_move_reason' => 'Shown as reason in content language in the deletion log. Parameter:
'noeditsection' => array( '0', '__AMARAKITAHUKCHAYCHU__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
'noheader' => array( '0', '__UMANNAQ__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
'currentmonth' => array( '1', 'KUNANKILLA', 'MESACTUAL', 'MES_ACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
- 'currentmonthname' => array( '1', 'KUNANKILLASUTI', 'NOMBREMESACTUAL', 'NOMBRE_MES_ACTUAL', 'CURRENTMONTHNAME' ),
- 'currentmonthnamegen' => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'CURRENTMONTHNAMEGEN' ),
- 'currentmonthabbrev' => array( '1', 'KUNANKILLAPISI', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'CURRENTMONTHABBREV' ),
+ 'currentmonthname' => array( '1', 'KUNANKILLASUTI', 'NOMBREMESACTUAL', 'NOMBRE_MES_ACTUAL', 'MESACTUALCOMPLETO', 'CURRENTMONTHNAME' ),
+ 'currentmonthnamegen' => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
+ 'currentmonthabbrev' => array( '1', 'KUNANKILLAPISI', 'ABREVIACIONNOMBREMESACTUAL', 'ABREVIACIÓNNOMBREMESACTUAL', 'MESACTUALABREVIADO', 'CURRENTMONTHABBREV' ),
'currentday' => array( '1', 'KUNANPUNCHAW', 'DÍAACTUAL', 'DIAACTUAL', 'DÍA_ACTUAL', 'DIA_ACTUAL', 'CURRENTDAY' ),
'currentday2' => array( '1', 'KUNANPUNCHAW2', 'DÍAACTUAL2', 'DIAACTUAL2', 'DÍA_ACTUAL2', 'DIA_ACTUAL2', 'CURRENTDAY2' ),
'currentdayname' => array( '1', 'KUNANPUNCHAWSUTI', 'NOMBREDÍAACTUAL', 'NOMBREDIAACTUAL', 'CURRENTDAYNAME' ),
'currentyear' => array( '1', 'KUNANWATA', 'AÑOACTUAL', 'AÑO_ACTUAL', 'CURRENTYEAR' ),
- 'currenttime' => array( '1', 'KUNANPACHA', 'HORAACTUAL', 'HORA_ACTUAL', 'CURRENTTIME' ),
+ 'currenttime' => array( '1', 'KUNANPACHA', 'HORAACTUAL', 'HORA_ACTUAL', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'TIEMPOACTUAL', 'CURRENTTIME' ),
'currenthour' => array( '1', 'KUNANURA', 'HORA_ACTUAL', 'HORAACTUAL', 'HORA_MINUTOS_ACTUAL', 'HORAMINUTOSACTUAL', 'CURRENTHOUR' ),
- 'localmonth' => array( '1', 'KAYPIKILLA', 'MESLOCAL', 'LOCALMONTH', 'LOCALMONTH2' ),
- 'localmonthname' => array( '1', 'KAYPIKILLASUTI', 'NOMBREMESLOCAL', 'LOCALMONTHNAME' ),
- 'localmonthnamegen' => array( '1', 'KAYPIKILLASUTIP', 'GENERADORNOMBREMESLOCAL', 'LOCALMONTHNAMEGEN' ),
- 'localmonthabbrev' => array( '1', 'KAYPIKILLAPISI', 'ABREVIACIONMESLOCAL', 'LOCALMONTHABBREV' ),
+ 'localmonth' => array( '1', 'KAYPIKILLA', 'MESLOCAL', 'MESLOCAL2', 'LOCALMONTH', 'LOCALMONTH2' ),
+ 'localmonthname' => array( '1', 'KAYPIKILLASUTI', 'NOMBREMESLOCAL', 'MESLOCALCOMPLETO', 'LOCALMONTHNAME' ),
+ 'localmonthnamegen' => array( '1', 'KAYPIKILLASUTIP', 'GENERADORNOMBREMESLOCAL', 'MESLOCALGENITIVO', 'LOCALMONTHNAMEGEN' ),
+ 'localmonthabbrev' => array( '1', 'KAYPIKILLAPISI', 'ABREVIACIONMESLOCAL', 'MESLOCALABREVIADO', 'LOCALMONTHABBREV' ),
'localday' => array( '1', 'KAYPIPUNCHAW', 'DÍALOCAL', 'DIALOCAL', 'LOCALDAY' ),
'localday2' => array( '1', 'KAYPIPUNCHAW2', 'DIALOCAL2', 'DÍALOCAL2', 'LOCALDAY2' ),
'localdayname' => array( '1', 'KAYPIPUNCHAWSUTI', 'NOMBREDIALOCAL', 'NOMBREDÍALOCAL', 'LOCALDAYNAME' ),
'localyear' => array( '1', 'KAYPIWATA', 'AÑOLOCAL', 'LOCALYEAR' ),
- 'localtime' => array( '1', 'KAYPIPACHA', 'HORALOCAL', 'LOCALTIME' ),
+ 'localtime' => array( '1', 'KAYPIPACHA', 'HORALOCAL', 'HORAMINUTOSLOCAL', 'TIEMPOLOCAL', 'LOCALTIME' ),
'localhour' => array( '1', 'KAYPIURA', 'HORALOCAL', 'HORAMINUTOSLOCAL', 'LOCALHOUR' ),
'numberofpages' => array( '1', 'HAYKAPANQA', 'NÚMERODEPÁGINAS', 'NUMERODEPAGINAS', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', 'HAYKAQILLQA', 'NÚMERODEARTÍCULOS', 'NUMERODEARTICULOS', 'NUMBEROFARTICLES' ),
'talkspacee' => array( '1', 'RIMANAKUYKITIE', 'RIMAYKITIE', 'ESPACIODEDISCUSIONC', 'TALKSPACEE' ),
'subjectspace' => array( '1', 'QILLQAKITI', 'ESPACIODEASUNTO', 'ESPACIODETEMA', 'ESPACIODEARTÍCULO', 'ESPACIODEARTICULO', 'SUBJECTSPACE', 'ARTICLESPACE' ),
'subjectspacee' => array( '1', 'QILLQAKITIE', 'ESPACIODETEMAC', 'ESPACIODEASUNTOC', 'ESPACIODEARTICULOC', 'ESPACIODEARTÍCULOC', 'SUBJECTSPACEE', 'ARTICLESPACEE' ),
- 'fullpagename' => array( '1', 'HUNTAPANQASUTI', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'FULLPAGENAME' ),
+ 'fullpagename' => array( '1', 'HUNTAPANQASUTI', 'NOMBREDEPÁGINACOMPLETA', 'NOMBREDEPAGINACOMPLETA', 'NOMBREDEPÁGINAENTERA', 'NOMBREDEPAGINAENTERA', 'NOMBRECOMPLETODEPÁGINA', 'NOMBRECOMPLETODEPAGINA', 'FULLPAGENAME' ),
'fullpagenamee' => array( '1', 'HUNTAPANQASUTIE', 'NOMBRECOMPLETODEPAGINAC', 'NOMBRECOMPLETODEPÁGINAC', 'FULLPAGENAMEE' ),
'subpagename' => array( '1', 'URINPANQASUTI', 'NOMBREDESUBPAGINA', 'NOMBREDESUBPÁGINA', 'SUBPAGENAME' ),
'subpagenamee' => array( '1', 'URINPANQASUTIE', 'NOMBREDESUBPAGINAC', 'NOMBREDESUBPÁGINAC', 'SUBPAGENAMEE' ),
'img_center' => array( '1', 'chawpi', 'centro', 'centrado', 'centrada', 'centrar', 'center', 'centre' ),
'img_framed' => array( '1', 'inchuyuq', 'inchu', 'marco', 'enmarcado', 'enmarcada', 'framed', 'enframed', 'frame' ),
'img_frameless' => array( '1', 'inchunnaq', 'sinmarco', 'sin_embarcar', 'sinenmarcar', 'sin_enmarcar', 'frameless' ),
- 'img_page' => array( '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'page=$1', 'page $1' ),
+ 'img_page' => array( '1', 'panqa=$1', 'pagina=$1', 'página=$1', 'pagina $1', 'página $1', 'pagina_$1', 'page=$1', 'page $1' ),
'img_upright' => array( '1', 'sayaq', 'sayaq=$1', 'upright', 'upright=$1', 'upright $1' ),
'img_border' => array( '1', 'saywa', 'borde', 'border' ),
'img_baseline' => array( '1', 'tiksisiqi', 'baseline' ),
'img_link' => array( '1', 'tinki=$1', 'vínculo=$1', 'vinculo=$1', 'enlace=$1', 'link=$1' ),
'img_alt' => array( '1', 'wak=$1', 'alt=$1' ),
'int' => array( '0', 'WILLAY:', 'INT:' ),
- 'sitename' => array( '1', 'TIYAYSUTI', 'NOMBREDESITIO', 'SITENAME' ),
+ 'sitename' => array( '1', 'TIYAYSUTI', 'NOMBREDESITIO', 'NOMBREDELSITIO', 'SITENAME' ),
'ns' => array( '0', 'SKITI:', 'EN:', 'NS:' ),
'localurl' => array( '0', 'KAYLLAURL:', 'URLLOCAL', 'LOCALURL:' ),
'localurle' => array( '0', 'KAYLLAURLE:', 'URLLOCALC:', 'LOCALURLE:' ),
'nchanges' => '$1 {{PLURAL:$1|hukchasqa|hukchasqakuna}}',
'recentchanges' => 'Ñaqha hukchasqa',
'recentchanges-legend' => 'Ñaqha hukchasqapaq allinkachinakuna',
-'recentchangestext' => "Kay p'anqapiqa aswan qhipaq ñaqha hukchasqakunam.",
+'recentchanges-summary' => "Kay p'anqapiqa aswan qhipaq ñaqha hukchasqakunam.",
'recentchanges-feed-description' => 'Kay mikhuchinapi wikipi qhipaq ñaqha hukchasqakunata qatiy.',
'recentchanges-label-newpage' => "Kayta llamk'apuptiykim musuq p'anqam tukukurqun",
'recentchanges-label-minor' => "Kayqa aslla llamk'apuymi",
'nchanges' => '$1 {{PLURAL:$1|killkay|killkaykuna}}',
'recentchanges' => 'Mushuk killkaykuna',
'recentchanges-legend' => 'Mushuk killkaykunamanta akllaykuna',
-'recentchangestext' => 'Kay pankapi tukuy mushuk killkaykunata rikukuna',
+'recentchanges-summary' => 'Kay pankapi tukuy mushuk killkaykunata rikukuna',
'recentchanges-feed-description' => 'Kay willay mayupi ashtawan mushuk killkaykunata rikukuna',
'recentchanges-label-newpage' => 'Kay killkayka shuk mushuk pankata kamachirka.',
'recentchanges-label-minor' => 'Kay killkayka uchillami kan',
'contentlanguage' => array( '1', 'LIMBACONTINUT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
'pagesinnamespace' => array( '1', 'PANIGIINSPATIULDENUME:', 'PAGINIINSN:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
'numberofadmins' => array( '1', 'NUMARADMINI', 'NUMBEROFADMINS' ),
+ 'formatnum' => array( '0', 'FORMATNR', 'FORMATNUM' ),
'defaultsort' => array( '1', 'SORTAREIMPLICITA:', 'CHEIESORTAREIMPLICITA:', 'CATEGORIESORTAREIMPLICITA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'filepath' => array( '0', 'CALEAFISIERULUI:', 'FILEPATH:' ),
'tag' => array( '0', 'eticheta', 'tag' ),
'nchanges' => '$1 {{PLURAL:$1|modificare|modificări|de modificări}}',
'recentchanges' => 'Schimbări recente',
'recentchanges-legend' => 'Opțiuni schimbări recente',
-'recentchangestext' => 'Urmăriți în această pagină cele mai recente modificări de pe site.',
+'recentchanges-summary' => 'Schimbări recente ... (Log)',
'recentchanges-feed-description' => 'Urmărește cele mai recente schimbări folosind acest flux.',
'recentchanges-label-newpage' => 'Această modificare a creat o pagină nouă',
'recentchanges-label-minor' => 'Aceasta este o modificare minoră',
'backend-fail-writetemp' => 'Imposibil de scris în fișierul temporar.',
'backend-fail-closetemp' => 'Imposibil de închis fișierul temporar.',
'backend-fail-read' => 'Imposibil de citit fișierul $1.',
-'backend-fail-create' => 'Imposibil de creat fișierul $1.',
-'backend-fail-maxsize' => 'Nu s-a putut crea fișierul $1 pentru că acesta este mai mare de {{PLURAL:$2|un octet|$2 octeți|$2 de octeți}}.',
+'backend-fail-create' => 'Imposibil de scris fișierul $1.',
+'backend-fail-maxsize' => 'Nu s-a putut scrie fișierul $1 pentru că acesta este mai mare de {{PLURAL:$2|un octet|$2 octeți|$2 de octeți}}.',
'backend-fail-contenttype' => 'Nu s-a putut determina tipul de conținut al fișierului de stocat la „$1”.',
# Lock manager
'http-curl-error' => 'Eroare la preluarea adresei URL: $1',
'http-host-unreachable' => 'Adresa URL nu a putut fi accesată.',
'http-bad-status' => 'A apărut o problemă în timpul solicitării HTTP: $1 $2',
-'http-truncated-body' => 'Corpul cererii a fost recepționat doar parțial.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Nu pot găsi adresa URL',
'file-info-size-pages' => '$1 × $2 pixeli, mărime fișier: $3, tip MIME: $4, $5 {{PLURAL:$5|pagină|pagini}}',
'file-nohires' => 'Rezoluții mai mari nu sunt disponibile.',
'svg-long-desc' => 'fișier SVG, cu dimensiunea nominală de $1 × $2 pixeli, mărime fișier: $3',
-'show-big-image' => 'Mărește rezoluția imaginii',
+'show-big-image' => 'Rezoluție maximă',
'show-big-image-preview' => 'Mărimea acestei previzualizări: $1.',
'show-big-image-other' => '{{PLURAL:$2|Altă rezoluție|Alte rezoluții}}: $1.',
'show-big-image-size' => '$1 × $2 pixeli',
'parser-template-recursion-depth-warning' => "Ha state supranete 'u limite di ricorsione de le template ($1)",
'language-converter-depth-warning' => "'U convertitore de lènghe ha subranate 'u limite de profonnetà ($1)",
'node-count-exceeded-category' => "Pàggene addò 'u cunde de le node ha sbunnate",
+'node-count-exceeded-warning' => "Pagene ha sbunnate 'u condegge de le node",
'expansion-depth-exceeded-category' => "Pàggene addò 'a profonnetà de l'espanzione jè supranate",
'expansion-depth-exceeded-warning' => "Pàggene ca sbonnane 'a profonnetà de espanzione",
# Diffs
'history-title' => 'Liste de le versiune de "$1"',
+'difference-title' => 'Differenze \'mbrà revisiune de "$1"',
+'difference-title-multipage' => 'Differenze \'mbrà le pàggene "$1" e "$2"',
'difference-multipage' => "(Differenze 'mbrà le pàggene)",
'lineno' => 'Linea $1:',
'compareselectedversions' => 'Combronde le versiune selezionete',
'nchanges' => '$1 {{PLURAL:$1|cangiaminde|cangiaminde}}',
'recentchanges' => 'Cangiaminde recende',
'recentchanges-legend' => 'Opzione pe le cangiaminde recende',
-'recentchangestext' => 'Tracce le cchiù recednde cangiaminde de Uicchi sus a sta pàgene.',
+'recentchanges-summary' => 'Tracce le cchiù recednde cangiaminde de Uicchi sus a sta pàgene.',
'recentchanges-feed-description' => "Tracce le urteme cangiaminde sus 'a sta Uicchipedie jndr'à quiste feed.",
'recentchanges-label-newpage' => "Stu cangiamende ha ccrejate 'na pàgena nove",
'recentchanges-label-minor' => "Quiste ète 'nu cangiamende stuèdeche",
'backend-fail-writetemp' => 'Non ge pozze scrivere sus a file temboranèe.',
'backend-fail-closetemp' => 'Non ge pozze achiudere file temboranèe.',
'backend-fail-read' => "Non ge pozze leggere 'u file $1.",
-'backend-fail-create' => "Non ge pozze ccrejà 'u file $1.",
+'backend-fail-create' => "Non ge pozze scrivere 'u file $1.",
'backend-fail-readonly' => 'L\'archivije de rete "$1" jè pe stu mumende in sole letture. \'U mutive ha state: "$2"',
+'backend-fail-synced' => "'U file \"\$1\" jè jndr'à 'nu state ingonsistende jndr'à l'archivije inderne",
'backend-fail-connect' => 'Non ge pozze connettere \'a memorie de rrete "$1".',
'backend-fail-internal' => "'N'errore scanusciute s'à verificate jndr'à l'archivije de rrete \"\$1\".",
'backend-fail-contenttype' => 'Non ge pozze capìe \'u tipe de condenute d\'u file da reggistrà sus a "$1".',
'import-invalid-interwiki' => "Non ge pozze 'mbortà da 'a Uicchi specificate.",
'import-error-edit' => 'Pàgene "$1" non g\' \'mbortate purcé tu non ge tìne le permesse pe cangiarle.',
'import-error-create' => 'Pàgene "$1" non g\' \'mbortate purcé tu non ge tìne le permesse pe ccrejarle.',
+'import-error-interwiki' => 'Pagene "$1" non g\'ha state \'mbortate purcé \'u nome sue jè riservate pe collegaminde esterne (interuicchi).',
'import-error-invalid' => "'A pàgene \"\$1\" non g'ha state 'mbortate purcé 'u nome jè invalide.",
# Import log
'api-error-badaccess-groups' => 'Tu non ge puè carecà file sus a sta Uicchi.',
'api-error-badtoken' => 'Errore inderne: Gettone errate.',
'api-error-copyuploaddisabled' => "'U carecamende da URL jè disabbilitate sus a stu server.",
+'api-error-duplicate-archive-popup-title' => "Dupliche {{PLURAL:$1|'u file ca ha state|le file ca onne state}} scangellate.",
'api-error-duplicate-popup-title' => 'Dupleche {{PLURAL:$1|file|file}}',
'api-error-empty-file' => "'U file ca tu è confermate ere vacande.",
'api-error-emptypage' => 'Quanne se ne ccreje une, le pàggene vacande non ge sò permesse.',
'api-error-hookaborted' => "'U cangiamende ca tu stè pruève a ffà ha state inderrotte da 'n'estenzione.",
'api-error-http' => "Errore inderne: Non ge se riesce a collegà a 'u server",
'api-error-illegal-filename' => "'U nome d'u file non g'è permesse.",
+'api-error-internal-error' => "Errore inderne: Quaccheccose ha sciute male mendre ca ste processamme 'u carecamende tune sus 'a uicchi.",
'api-error-invalid-file-key' => "Errore inderne: 'U file non ge se iacchie jndr'à memorie temboranèe.",
'api-error-missingparam' => 'Errore inderne: Parametre mangande sus a richieste.',
'api-error-missingresult' => "Errore inderne: Non ge se pò determinà ce 'a copie ha state fatte.",
* @author გიორგიმელა
*/
-/**
- * Изменения сделанные в этом файле будут потеряны при обновлении MediaWiki.
- *
- * Если необходимо внести изменения в перевод отдельных строк интерфейса,
- * сделайте это посредством редактирования страниц вида «MediaWiki:*».
- * Их список можно найти на странице «Special:Allmessages».
- */
-
-$separatorTransformTable = array(
- ',' => "\xc2\xa0", # nbsp
- '.' => ','
-);
-
-$fallback8bitEncoding = 'windows-1251';
-$linkPrefixExtension = false;
-
$namespaceNames = array(
NS_MEDIA => 'Медиа',
NS_SPECIAL => 'Служебная',
NS_USER_TALK => array( 'male' => 'Обсуждение_участника', 'female' => 'Обсуждение_участницы' ),
);
-$dateFormats = array(
- 'mdy time' => 'H:i',
- 'mdy date' => 'xg j, Y',
- 'mdy both' => 'H:i, xg j, Y',
-
- 'dmy time' => 'H:i',
- 'dmy date' => 'j xg Y',
- 'dmy both' => 'H:i, j xg Y',
-
- 'ymd time' => 'H:i',
- 'ymd date' => 'Y xg j',
- 'ymd both' => 'H:i, Y xg j',
-
- 'ISO 8601 time' => 'xnH:xni:xns',
- 'ISO 8601 date' => 'xnY-xnm-xnd',
- 'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
-
-);
-
-$bookstoreList = array(
- 'Поиск по библиотекам «Сигла»' => 'http://www.sigla.ru/results.jsp?f=7&t=3&v0=$1',
- 'Findbook.ru' => 'http://findbook.ru/search/d0?ptype=4&pvalue=$1',
- 'Яндекс.Маркет' => 'http://market.yandex.ru/search.xml?text=$1',
- 'ОЗОН' => 'http://www.ozon.ru/?context=advsearch_book&isbn=$1',
- 'Books.Ru' => 'http://www.books.ru/shop/search?query=$1',
- 'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+$specialPageAliases = array(
+ 'Activeusers' => array( 'Активные_участники' ),
+ 'Allmessages' => array( 'Системные_сообщения' ),
+ 'Allpages' => array( 'Все_страницы' ),
+ 'Blankpage' => array( 'Пустая_страница' ),
+ 'Block' => array( 'Заблокировать' ),
+ 'Blockme' => array( 'Заблокируй_меня' ),
+ 'Booksources' => array( 'Источники_книг' ),
+ 'BrokenRedirects' => array( 'Разорванные_перенаправления' ),
+ 'Categories' => array( 'Категории' ),
+ 'ChangeEmail' => array( 'Сменить_e-mail' ),
+ 'ChangePassword' => array( 'Сменить_пароль' ),
+ 'ComparePages' => array( 'Сравнение_страниц' ),
+ 'Confirmemail' => array( 'Подтвердить_e-mail' ),
+ 'Contributions' => array( 'Вклад' ),
+ 'CreateAccount' => array( 'Создать_учётную_запись', 'Создать_пользователя', 'Зарегистрироваться' ),
+ 'Deadendpages' => array( 'Тупиковые_страницы' ),
+ 'DeletedContributions' => array( 'Удалённый_вклад' ),
+ 'Disambiguations' => array( 'Неоднозначные_ссылки' ),
+ 'DoubleRedirects' => array( 'Двойные_перенаправления' ),
+ 'EditWatchlist' => array( 'Править_список_наблюдения' ),
+ 'Emailuser' => array( 'Письмо', 'Письмо_участнику', 'Отправить_письмо' ),
+ 'Export' => array( 'Экспорт', 'Выгрузка' ),
+ 'FileDuplicateSearch' => array( 'Поиск_дубликатов_файлов' ),
+ 'Filepath' => array( 'Путь_к_файлу' ),
+ 'Import' => array( 'Импорт' ),
+ 'BlockList' => array( 'Список_блокировок', 'Блокировки' ),
+ 'LinkSearch' => array( 'Поиск_ссылок' ),
+ 'Listadmins' => array( 'Список_администраторов' ),
+ 'Listbots' => array( 'Список_ботов' ),
+ 'Listfiles' => array( 'Список_файлов', 'Список_изображений' ),
+ 'Listgrouprights' => array( 'Список_прав_групп', 'Права_групп_участников' ),
+ 'Listredirects' => array( 'Список_перенаправлений' ),
+ 'Listusers' => array( 'Список_участников' ),
+ 'Lockdb' => array( 'Заблокировать_БД', 'Заблокировать_базу_данных' ),
+ 'Log' => array( 'Журналы', 'Журнал' ),
+ 'Lonelypages' => array( 'Изолированные_страницы' ),
+ 'Longpages' => array( 'Длинные_страницы' ),
+ 'MergeHistory' => array( 'Объединение_истории' ),
+ 'MIMEsearch' => array( 'Поиск_по_MIME' ),
+ 'Mostimages' => array( 'Самые_используемые_файлы' ),
+ 'Movepage' => array( 'Переименовать_страницу', 'Переименование', 'Переименовать' ),
+ 'Mycontributions' => array( 'Мой_вклад' ),
+ 'Mypage' => array( 'Моя_страница' ),
+ 'Mytalk' => array( 'Моё_обсуждение' ),
+ 'Myuploads' => array( 'Мои_загрузки' ),
+ 'Newimages' => array( 'Новые_файлы' ),
+ 'Newpages' => array( 'Новые_страницы' ),
+ 'PasswordReset' => array( 'Сброс_пароля' ),
+ 'PermanentLink' => array( 'Постоянная_ссылка' ),
+ 'Popularpages' => array( 'Популярные_страницы' ),
+ 'Preferences' => array( 'Настройки' ),
+ 'Protectedpages' => array( 'Защищённые_страницы' ),
+ 'Protectedtitles' => array( 'Защищённые_названия' ),
+ 'Randompage' => array( 'Случаная_страница', 'Случайная' ),
+ 'Recentchanges' => array( 'Свежие_правки' ),
+ 'Recentchangeslinked' => array( 'Связанные_правки' ),
+ 'Search' => array( 'Поиск' ),
+ 'Shortpages' => array( 'Короткие_страницы' ),
+ 'Specialpages' => array( 'Спецстраницы' ),
+ 'Statistics' => array( 'Статистика' ),
+ 'Tags' => array( 'Метки' ),
+ 'Unblock' => array( 'Разблокировка' ),
+ 'Uncategorizedcategories' => array( 'Некатегоризованные_категории' ),
+ 'Uncategorizedimages' => array( 'Некатегоризованные_файлы' ),
+ 'Uncategorizedpages' => array( 'Некатегоризованные_страницы' ),
+ 'Uncategorizedtemplates' => array( 'Некатегоризованные_шаблоны' ),
+ 'Unusedcategories' => array( 'Неиспользуемые_категории' ),
+ 'Unusedimages' => array( 'Неиспользуемые_файлы' ),
+ 'Unusedtemplates' => array( 'Неиспользуемые_шаблоны' ),
+ 'Upload' => array( 'Загрузка' ),
+ 'UploadStash' => array( 'Скрытная_загрузка' ),
+ 'Userlogin' => array( 'Вход', 'Авторизация' ),
+ 'Userlogout' => array( 'Выход', 'Завершение_сеанса' ),
+ 'Userrights' => array( 'Управление_правами' ),
+ 'Version' => array( 'Версия' ),
+ 'Wantedcategories' => array( 'Требуемые_категории' ),
+ 'Wantedfiles' => array( 'Требуемые_файлы' ),
+ 'Wantedpages' => array( 'Требуемые_страницы' ),
+ 'Wantedtemplates' => array( 'Требуемые_шаблоны' ),
+ 'Watchlist' => array( 'Список_наблюдения' ),
+ 'Whatlinkshere' => array( 'Ссылки_сюда' ),
);
$magicWords = array(
'url_query' => array( '0', 'ЗАПРОС', 'QUERY' ),
);
+
+$dateFormats = array(
+ 'mdy time' => 'H:i',
+ 'mdy date' => 'xg j, Y',
+ 'mdy both' => 'H:i, xg j, Y',
+
+ 'dmy time' => 'H:i',
+ 'dmy date' => 'j xg Y',
+ 'dmy both' => 'H:i, j xg Y',
+
+ 'ymd time' => 'H:i',
+ 'ymd date' => 'Y xg j',
+ 'ymd both' => 'H:i, Y xg j',
+
+ 'ISO 8601 time' => 'xnH:xni:xns',
+ 'ISO 8601 date' => 'xnY-xnm-xnd',
+ 'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+
+);
+
+$bookstoreList = array(
+ 'Поиск по библиотекам «Сигла»' => 'http://www.sigla.ru/results.jsp?f=7&t=3&v0=$1',
+ 'Findbook.ru' => 'http://findbook.ru/search/d0?ptype=4&pvalue=$1',
+ 'Яндекс.Маркет' => 'http://market.yandex.ru/search.xml?text=$1',
+ 'ОЗОН' => 'http://www.ozon.ru/?context=advsearch_book&isbn=$1',
+ 'Books.Ru' => 'http://www.books.ru/shop/search?query=$1',
+ 'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+/**
+ * Изменения сделанные в этом файле будут потеряны при обновлении MediaWiki.
+ *
+ * Если необходимо внести изменения в перевод отдельных строк интерфейса,
+ * сделайте это посредством редактирования страниц вида «MediaWiki:*».
+ * Их список можно найти на странице «Special:Allmessages».
+ */
+
+$separatorTransformTable = array(
+ ',' => "\xc2\xa0", # nbsp
+ '.' => ','
+);
+
+$fallback8bitEncoding = 'windows-1251';
+$linkPrefixExtension = false;
+
$imageFiles = array(
'button-bold' => 'cyrl/button_bold.png',
'button-italic' => 'cyrl/button_italic.png',
'tog-ccmeonemails' => 'Отправлять мне копии писем, которые я посылаю другим участникам',
'tog-diffonly' => 'Не показывать содержание страницы под сравнением двух версий',
'tog-showhiddencats' => 'Показывать скрытые категории',
+'tog-noconvertlink' => 'Отключить ссылку на преобразование заголовка',
'tog-norollbackdiff' => 'Не показывать разницу версий после выполнения отката',
'underline-always' => 'Всегда',
'searchbutton' => 'Найти',
'go' => 'Перейти',
'searcharticle' => 'Перейти',
-'history' => 'история',
+'history' => 'Ð\98стория',
'history_short' => 'история',
'updatedmarker' => 'обновлено после моего последнего посещения',
'printableversion' => 'Версия для печати',
# Diffs
'history-title' => '$1 — история изменений',
-'difference-title' => 'РазниÑ\86а междÑ\83 пеÑ\80еÑ\81моÑ\82Ñ\80ов " $1 "',
-'difference-title-multipage' => 'Разница между страницами " $1 «и» $2 "',
+'difference-title' => 'РазлиÑ\87иÑ\8f междÑ\83 веÑ\80Ñ\81иÑ\8fми «$1»',
+'difference-title-multipage' => 'Разница между страницами «$1» и «$2»',
'difference-multipage' => '(Различия между страницами)',
'lineno' => 'Строка $1:',
'compareselectedversions' => 'Сравнить выбранные версии',
'showhideselectedversions' => 'Показать/скрыть выбранные версии',
'editundo' => 'отменить',
-'diff-multi' => '({{PLURAL:$1|не показана $1 промежуточная версия|не показаны $1 промежуточные версии|не показаны $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников|$2 участников}})',
+'diff-multi' => '({{PLURAL:$1|не показана $1 промежуточная версия|не показаны $1 промежуточные версии|не показаны $1 промежуточных версий}} {{PLURAL:$2|$2 участника|$2 участников}})',
'diff-multi-manyusers' => '(не {{PLURAL:$1|показана $1 промежуточная версия|показаны $1 промежуточные версии|показаны $1 промежуточных версий}}, сделанные более чем $2 {{PLURAL:$2|участником|участниками}})',
# Search results
'nchanges' => '$1 {{PLURAL:$1|изменение|изменения|изменений}}',
'recentchanges' => 'Свежие правки',
'recentchanges-legend' => 'Настройки свежих правок',
-'recentchangestext' => 'Ниже в хронологическом порядке перечислены последние изменения на страницах {{grammar:genitive|{{SITENAME}}}}.',
+'recentchanges-summary' => 'Ниже в хронологическом порядке перечислены последние изменения на страницах {{grammar:genitive|{{SITENAME}}}}.',
'recentchanges-feed-description' => 'Отслеживать последние изменения в вики в этом потоке.',
'recentchanges-label-newpage' => 'Этой правкой была создана новая страница.',
'recentchanges-label-minor' => 'Это незначительное изменение',
'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|наблюдающий участник|наблюдающих участника|наблюдающих участников}}]',
'rc_categories' => 'Только из категорий (разделитель «|»)',
'rc_categories_any' => 'Любой',
-'rc-change-size-new' => 'Размер после изменения: {{PLURAL:$1|байт|байта|байт}}',
+'rc-change-size-new' => 'Размер после изменения: $1 {{PLURAL:$1|байт|байта|байт}}',
'newsectionsummary' => '/* $1 */ новая тема',
'rc-enhanced-expand' => 'Показать подробности (используется JavaScript)',
'rc-enhanced-hide' => 'Скрыть подробности',
'backend-fail-writetemp' => 'Не удалось записать во временный файл.',
'backend-fail-closetemp' => 'Не удаётся закрыть временный файл.',
'backend-fail-read' => 'Не удалось прочитать файл $1.',
-'backend-fail-create' => 'Не удалось создать файл $1.',
-'backend-fail-maxsize' => 'Не удалось создать файл $1, так как его размер превышает {{PLURAL:$2|$2 байт|$2 байта|$2 байт}}.',
+'backend-fail-create' => 'Не удалось записать файл $1.',
+'backend-fail-maxsize' => 'Не удалось записать файл $1, так как его размер превышает {{PLURAL:$2|$2 байт|$2 байта|$2 байт}}.',
'backend-fail-readonly' => 'Хранилище «$1» сейчас находится в режиме «только чтение». Причина: «$2»',
'backend-fail-synced' => 'Файл «$1» находится в несогласованном состоянии во внутреннем хранилище',
'backend-fail-connect' => 'Не удалось подключиться к хранилищу «$1».',
'backend-fail-internal' => 'Произошла неизвестная ошибка в хранилище «$1».',
'backend-fail-contenttype' => 'Не удалось определить тип содержимого файла, чтобы сохранить его в «$1».',
'backend-fail-batchsize' => 'Хранилище получило блок из $1 {{PLURAL:$1|файловой операции|файловых операций|файловых операций}}, ограничение составляет $2 {{PLURAL:$1|операцию|операции|файловых операций}}.',
+'backend-fail-usable' => 'Не удалось записать файл $1 из-за нехватки прав или отсутствия нужных папок.',
# File journal errors
'filejournal-fail-dbconnect' => 'Не удалось подключиться к базе данных журнала для хранилища «$1».',
'http-curl-error' => 'Ошибка обращения к URL: $1',
'http-host-unreachable' => 'Невозможно обратиться по указанному URL.',
'http-bad-status' => 'Во время обработки HTTP-запроса обнаружена проблема: $1 $2',
-'http-truncated-body' => 'Тело запроса было получено лишь частично.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Невозможно обратить по указанному адресу.',
'group-bureaucrat.css' => '/* Размещённый здесь CSS будет применяться только для бюрократов */',
# Scripts
-'common.js' => '/* Размещённый здесь JavaScript код будет загружаться всем пользователям при обращении к каждой странице */',
-'standard.js' => '/* Размещённый здесь JavaScript код будет загружаться пользователям использующих тему оформления Standard */',
-'nostalgia.js' => '/* Размещённый здесь JavaScript код будет загружаться пользователям использующих тему оформления Nostalgia */',
-'cologneblue.js' => '/* Размещённый здесь JavaScript код будет загружаться пользователям использующих тему оформления Cologne Blue */',
-'monobook.js' => '/* Размещённый здесь JavaScript код будет загружаться пользователям использующих тему оформления MonoBook */',
-'vector.js' => '/* Указанный здесь JavaScript будет загружен всем участникам, использующим векторную тему оформления */',
+'common.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */',
+'standard.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Standard */',
+'nostalgia.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Nostalgia */',
+'cologneblue.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Cologne Blue */',
+'monobook.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления MonoBook */',
+'myskin.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления MySkin */',
+'chick.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Chick */',
+'simple.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Simple */',
+'modern.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Modern */',
+'vector.js' => '/* Размещённый здесь код JavaScript будет загружаться пользователям, использующим тему оформления Vector */',
+'group-autoconfirmed.js' => '/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус автоподтверждённых (autoconfirmed) */',
+'group-bot.js' => '/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус ботов (bots) */',
+'group-sysop.js' => '/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус администраторов (sysops) */',
+'group-bureaucrat.js' => '/* Размещённый здесь код JavaScript будет загружаться только участникам, имеющим статус бюрократов (bureaucrats) */',
# Metadata
'notacceptable' => "Вики-сервер не может предоставить данные в формате, который мог бы прочитать ваш браузер.<br />
'iranian-calendar-m11' => 'Бахман',
'iranian-calendar-m12' => 'Эсфанд',
+# Hijri month names
+'hijri-calendar-m1' => 'Мухаррам',
+'hijri-calendar-m2' => 'Сафар',
+'hijri-calendar-m3' => 'Рабиуль-Аввал',
+'hijri-calendar-m4' => 'Раби ас-сани',
+'hijri-calendar-m5' => 'Джумада аль-уля',
+'hijri-calendar-m6' => 'Джумада ас-сани',
+'hijri-calendar-m7' => 'Раджаб',
+'hijri-calendar-m8' => 'Шаабан',
+'hijri-calendar-m9' => 'Рамадан',
+'hijri-calendar-m10' => 'Шавваль',
+'hijri-calendar-m11' => 'Зулькада',
+'hijri-calendar-m12' => 'Зуль-Хиджа',
+
# Hebrew month names
'hebrew-calendar-m1' => 'Тишрей',
'hebrew-calendar-m2' => 'Хешван',
+'hebrew-calendar-m3' => 'Кислев',
'hebrew-calendar-m4' => 'Тевет',
'hebrew-calendar-m5' => 'Шват',
'hebrew-calendar-m6' => 'Адар',
'userinvalidcssjstitle' => "'''Увага:''' Тема взгляду „$1“ не екзістує. Не забудьте, же хосновательске .css і .js файлы хоснують малы писмена, наприклад {{ns:user}}:{{BASEPAGENAME}}/vector.css, а не {{ns:user}}:{{BASEPAGENAME}}/Vector.css.",
'updated' => '(Зміна уложена)',
'note' => "'''Позначка:''' ",
-'previewnote' => "'''Ð\9fамÑ\8fÑ\82айÑ\82е, же Ñ\82о лем попеÑ\80еднÑ\97й пеÑ\80еглÑ\8fд,
-текст іщі не є уложеный!'''",
+'previewnote' => "'''Ð\9fамÑ\8fÑ\82айÑ\82е, же Ñ\82о лем наглÑ\8fд.'''
+Зміны іщі не суть уложены!",
'previewconflict' => 'Тот нагляд зображує текст так, як буде вызерати по уложіню сторінкы.',
'session_fail_preview' => "'''Вашу пожадавку ся не подарило зпрацовати, бо были страчены дата сеансу.
Просиме, спробуйте то зясь.
'nchanges' => '$1 {{PLURAL:$1|зміна|зміны|змін}}',
'recentchanges' => 'Послїднї зміны',
'recentchanges-legend' => 'Можности послїднїх змін',
-'recentchangestext' => 'Слїдуйте послїднї зміны на {{grammar:genitive|{{SITENAME}}}} на тій сторінцї.',
+'recentchanges-summary' => 'Слїдуйте послїднї зміны на {{grammar:genitive|{{SITENAME}}}} на тій сторінцї.',
'recentchanges-feed-description' => 'На тотїм каналу слїдуєте послїднї зміны на {{grammar:6sg|{{SITENAME}}}}.',
'recentchanges-label-newpage' => 'Тым едітованём была створена нова сторінка',
'recentchanges-label-minor' => 'Тото є мала зміна',
'api-error-uploaddisabled' => 'Начітаваня файлів є на тій вікі выпнуте.',
'api-error-verification-error' => 'Файл є може пошкодженый, або мать плане росшырїня.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|секунда|секунды|секунд}}',
+'duration-minutes' => '$1 {{PLURAL:$1|минуту|минуты|минут}}',
+'duration-hours' => '$1 {{PLURAL:$1|година|годины|годин}}',
+'duration-days' => '$1 {{PLURAL:$1|день|днї|днів}}',
+'duration-weeks' => '$1 {{PLURAL:$1|тыждень|тыжднї|тыжднїв}}',
+'duration-years' => '$1 {{PLURAL:$1|рік|рокы|років}}',
+'duration-decades' => '$1 {{PLURAL:$1|декада|декады|декад}}',
+'duration-centuries' => '$1 {{PLURAL:$1|стороча|стороча|стороч}}',
+
);
'nchanges' => '$1 {{PLURAL:$1|परिवर्तनम्|परिवर्तनानि}}',
'recentchanges' => 'सद्योजातानि परिवर्तनानि',
'recentchanges-legend' => 'सद्योजातानां परिवर्तनानां विकल्पाः',
-'recentchangestext' => 'अस्मिन् विकियोजनायां सद्योजातानि परिवर्तनानि दर्श्यन्ताम्',
+'recentchanges-summary' => 'अस्मिन् विकियोजनायां सद्योजातानि परिवर्तनानि दर्श्यन्ताम्',
'recentchanges-feed-description' => 'अस्मिन् विकियोजनायां सद्योजातानि परिवर्तनानि दर्श्यन्ताम्',
'recentchanges-label-newpage' => 'एतस्मात् सम्पादनात् नूतनं पृष्ठं सृष्टमस्ति',
'recentchanges-label-minor' => 'इदं लघु परिवर्तनम्',
'userinvalidcssjstitle' => "'''Болҕой:''' Бу тиэмэ «$1» суох. Кыттааччы .css и .js сирэйдэрэ кыра буукубаннан суруллуохтаахтар, холобур «{{ns:user}}:Ньургун/vector.css», маннык буолуо суохтаах «{{ns:user}}:Ньургун/Vector.css».",
'updated' => '(Саҥардылынна)',
'note' => "'''Хос быһаарыы:'''",
-'previewnote' => "'''Бу көрүү эрэ; уларытыылар бигэргэтиллэ иликтэр!'''",
+'previewnote' => "'''Бу барыллаан көрүү эрэ.'''
+Атын уларытыы бигэргэтиллэ илик!",
'previewconflict' => 'Этот предварительный просмотр отражает текст в верхнем окне редактирования так, как он будет выглядеть, если вы решите записать его.',
'session_fail_preview' => "'''Сиэрбэр сессия идентификаторын сүтэрэн кэбиһэн эн уларытыыгын кыайан киллэрбэтэ.
Өссө холонон көр.
'nchanges' => '$1 {{PLURAL:$1|уларытыы|уларытыылар}}',
'recentchanges' => 'Кэнники уларытыылар',
'recentchanges-legend' => 'Кэлиҥҥи уларытыылар хайдах көстөллөрүн туруоруу',
-'recentchangestext' => 'Манна хаһан оҥоһуллубуттарынан сааһыланан {{SITENAME}} кэнники уларыытыылара көстөллөр.',
+'recentchanges-summary' => 'Манна хаһан оҥоһуллубуттарынан сааһыланан {{SITENAME}} кэнники уларыытыылара көстөллөр.',
'recentchanges-feed-description' => 'Бу ботуокка биики бүтэһик уларыйыыларын кэтииргэ.',
'recentchanges-label-newpage' => 'Бу уларытыы түмүгэр саҥа сирэй айыллыбыт.',
'recentchanges-label-minor' => 'Бу улахан суолтата суох уларытыы',
* @author Albinus
* @author David Baskey
* @author Ghonokuashabaskey
+ * @author Joseph Mardy
* @author Nipon087
* @author Salvator
* @author Samar88
$messages = array(
# User preference toggles
+'tog-underline' => 'Joṛaoko latarre dag udugoḱma:',
+'tog-justify' => 'Olaḱ kạli mońjte sajao:',
'tog-hideminor' => 'Nitaḱ bodolaḱre huḍiṅ kạmi danaṅme',
+'tog-hidepatrolled' => 'Joṛaoakanaḱko nãwã bodolaḱte danaṅkam',
+'tog-newpageshidepatrolled' => 'Biḍạakanaḱ sakamko nãwã sakamreaḱ talikare danȧkam',
+'tog-extendwatchlist' => 'Khạli nitoḱ bodolko do baṅ, joto bodolkodo ńeloḱ tạlikare phaylaomẽ.',
+'tog-usenewrc' => 'Cetan darja reaḱ nãwã bodolakanaḱko beoharme',
+'tog-numberheadings' => 'Mukhiạ kathako do actege piṛhipiṛhite sajaḱma',
+'tog-showtoolbar' => 'Joṛaoakanaḱ ṭulbar udugoḱma',
+'tog-editondblclick' => 'Bar dhao lin kate sakam torjomão reaḱ ạidari emogoḱma',
+'tog-editsection' => '[Joṛao] Pahaṭako do joṛao hotete aćtege hoyoḱ lạgit aidạri em ocoḱma',
+'tog-editsectiononrightclick' => 'Pahaṭa reaḱ pahaṭa guṭkathare jojom seć lin hotete <br /> pahaṭa sompadon lạgitte ektiạr em hoyoḱma (JavaScript)',
'tog-showtoc' => 'Ṭibilre menaḱako ńel ( sakamkore 3 khon jạti hedlayenko)',
+'tog-rememberpassword' => 'Noa sendrare amaḱ boloḱ reaḱ katha (katha cạbi) disạimẽ (jạstite $1 {{PLURAL:$1din reaḱ din reaḱ}} lạgit)',
'tog-watchcreations' => 'Sakamko songe Ińaḱ ńelok tạlikare benao',
'tog-watchdefault' => 'Sakam tońgey me Iń do ińaḱ ńeloḱ tạlikare joṛaokeda',
'tog-watchmoves' => 'Sakamko tońgeyme Ińaḱ ńelok tạlikare kulme',
'tog-watchdeletion' => 'Sakamko tońgeyme Ińaḱ ńeloḱ tạlika khon get́ giḍikam',
+'tog-minordefault' => 'Etohoṕre sanam joṛao purạoanaḱko do bekor unuduḱ lekate cinhạkma',
+'tog-previewontop' => 'Joṛao bakso purạo lahare unuduḱ hoyoḱma',
+'tog-previewonfirst' => 'Pạhil joṛao purạore unuduḱ hoyoḱma',
+'tog-nocache' => 'Brajar sakam reaḱ kasiṅ bondoemẽ',
'tog-enotifwatchlistpages' => 'E-mailạńme one tinre in̕aḱ n̕eloḱ tạlika do bodolok',
'tog-enotifusertalkpages' => 'E-mailạn̕me one tinre in̕aḱ roṛaḱ laṛcaṛ sakam do bodoloḱa',
'tog-enotifminoredits' => 'E-mailạn̕me arhõ one tinre in̕aḱ sakamre huḍiń kạmi hoyoḱ',
+'tog-enotifrevealaddr' => 'Dhạrwạk reaḱ sakamre ińaḱ e-mail ṭhikạna sodor hoyoḱma',
'tog-shownumberswatching' => 'Ńelok laṛcaṛkoaḱ songkha uduḱme',
'tog-oldsig' => 'Menaḱ signạtar',
+'tog-fancysig' => 'Signạcar do wikiṭesk hisạbte moneyemẽ (jahan acte hoyoḱ joṛao bạgikate)',
+'tog-externaleditor' => 'Etohoṕre bahre reaḱ sompadonićaḱ beohar hoyoḱma (khali sẽṛa beoharić lạgit́te, kompeuṭare asokae seṭing jạruṛa. [//www.mediawiki.org/wiki/manual:External_editors More information.])',
+'tog-externaldiff' => 'Etohoṕre bahre reaḱ sompadonićaḱ beohar hoyoḱma (khali sẽṛa beoharić lạgit́te, kompeuṭare asokae seṭing jạruṛa. [//www.mediawiki.org/wiki/manual:External_editors More information.])',
+'tog-showjumplinks' => '"Calaḱmẽ" beohar joṛao ehop hoyoḱma',
'tog-uselivepreview' => 'Jewet́ ńeloḱ beoharme (JavaScript jaruṛ menaḱa)',
+'tog-forceeditsummary' => 'Khạli sompadon guṭkatha em oktere iń baḍae ocoyiń hoyoḱma',
'tog-watchlisthideown' => 'Ńeloḱ talikare ińaḱ joṛao kamiko danaṅme',
+'tog-watchlisthidebots' => 'Boṭreaḱ sompadon kạmiko do ńeloḱ tạlika khon danaṅmẽ',
'tog-watchlisthideminor' => 'Ńeloḱ tạlikare ińak huḍiṅ joṛao kạmiko danaṅme',
+'tog-watchlisthideliu' => 'Ńeloḱ tạlikareaḱ ekaunṭ bolok beoharkoaḱ sompadon danaṅ hoyoḱma',
+'tog-watchlisthideanons' => 'Ńeloḱ tạlikare baṅ ńutamanić beoharićaḱ sompadonko danaṅ hoyoḱma',
+'tog-watchlisthidepatrolled' => 'Biḍạen sompadonko do ńeloḱ sakamre danaṅmẽ',
'tog-ccmeonemails' => 'E-mail reaḱ kopy kulạńme Eṭaḱ laṛcaṛko kulakome',
+'tog-diffonly' => 'Farak reaḱ latar sakamre babotko baṅ udugoḱma',
+'tog-showhiddencats' => 'Danaṅ rokom sokomko uduḱmẽ',
+'tog-norollbackdiff' => 'rollback tayomte farak alom uduga',
'underline-always' => 'Sanam okte',
'underline-never' => 'Tis hõ ban̕',
+'underline-default' => 'Browjarre cetlekate em hoy akana',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'Sompadon ṭhại reaḱ fonṭ sṭayel:',
+'editfont-default' => 'Sendra do sedaere ṭhikakana',
+'editfont-monospace' => 'Monoespeć fonṭ',
+'editfont-sansserif' => 'Sans-serif fonṭ',
+'editfont-serif' => 'Serif fonṭ',
# Dates
'sunday' => 'Aṭhowar',
'pagecategories' => '{{PLURAL:$1|Bivag|Bivagko}}',
'category_header' => 'Sakam korenaḱ rokom sokom "$1"',
'subcategories' => 'Huḍiń rokom sokomko',
+'category-media-header' => '"$1" babot reaḱ rokom sokomte emen meḍiya rẽtko',
+'category-empty' => '"Noa rokom sokom sakamre do nit jahan sakam se miḍiya rẽt do bạnuḱa."',
'hidden-categories' => '{{PLURAL:$1|Dãnań renaḱ|Dãnań renaḱ ko}}',
+'hidden-category-category' => 'Uku akan rokom sokom ko',
'category-subcat-count' => '{{PLURAL:$2| keṭagorire eken tayom hudińkeṭagori menaḱa. |Noa keṭagorire tayom menaḱa {{PLURAL:$1 hudińkeṭagoriko}}, jotokote $2}}',
+'category-subcat-count-limited' => 'Noa rokom sokomre latar reaḱ {{PLURAL:$1 gan kạṭic rokom sokom $1gan kạtic rokom sokom menaḱa}}',
'category-article-count' => '{{PLURAL:$2| Noa keṭagoriredo eken tayomtenaḱ sakam menaḱa.| Tayom {{PLURAL:$2| sakam do |$1 sakamko kana}} nia keṭagorire, sanamkote hoyoḱkana $2 .}}',
+'category-article-count-limited' => 'Noa {{PLURAL:$1 sakam sakamko}} rokom sokomre menaḱa.',
+'category-file-count' => '{{PLURAL:$2 Noa babot reaḱ rokom sokomre do eken latar reaḱ sakam menaḱa. Noa babot reaḱ rokom sokomre emakan moṭhe $2 gan sakam mudre {{PLURAL:$1 gan sakam $1 gan sakam}} latarre uduḱ hoena}}',
+'category-file-count-limited' => 'Latar reaḱ {{PLURAL:$1 rẽt rẽtko}} noa rokom sokomre menaḱa.',
'listingcontinuesabbrev' => 'Calaḱa',
+'index-category' => 'Unuduḱ sakam ko do bạnuḱa',
'noindex-category' => 'Unuduḱ sakamkodo bạnuḱa',
+'broken-file-category' => 'Baṅ kạmi daṛeaḱ chubi joṛao soho sakamko',
'about' => 'Lạgitte, Lạgti',
+'article' => 'Menaḱakat́ sakam',
'newwindow' => 'Nãwã khiṛki jhijme',
'cancel' => 'Badme',
'moredotdotdot' => 'Aema',
'mypage' => 'In̕aḱ sakam',
'mytalk' => 'Iñaḱ́ ro̠ṛ',
+'anontalk' => 'Nui baṅ ńutumanić beoharićaḱ galmarao sakam',
'navigation' => 'Ñamme',
+'and' => 'ar',
# Cologne Blue skin
'qbfind' => 'N̕am',
'qbbrowse' => 'Sendra',
'qbedit' => 'Tońge',
'qbpageoptions' => 'Noa sakam',
+'qbpageinfo' => 'Sakam reaḱ thuti',
'qbmyoptions' => 'In̕anḱ sakamko',
'qbspecialpages' => 'Asokay teaḱ sakamko',
'faq' => 'Baḍae kupuliko',
+'faqpage' => 'Project:FAQ',
# Vector skin
'vector-action-addsection' => 'Asol katha joṛaome',
'vector-action-delete' => 'Giḍi',
-'vector-action-move' => 'Ocok',
+'vector-action-move' => 'Ocoḱ́me',
'vector-action-protect' => 'Bańcao',
'vector-action-undelete' => 'Bań getgiḍi',
'vector-action-unprotect' => 'Bodol rukhiyạ',
+'vector-simplesearch-preference' => 'Arhõ jạsti sendra poramorso keṭećmẽ (khali vecṭor skinre lạgit)',
'vector-view-create' => 'Tearme',
'vector-view-edit' => 'So̠mpado̠n',
'vector-view-history' => 'Jạṛ ńelme',
'searcharticle' => 'Calaḱme',
'history' => 'Sakam reaḱ jạṛ',
'history_short' => 'Jạṛ',
+'updatedmarker' => 'Ińaḱ mucạt hiripor khon nitaḱ halot',
'printableversion' => 'Chapai lekan version',
'permalink' => 'Terejuge joṛao',
'print' => 'Chapa',
'create-this-page' => 'Noa sakam benao me',
'delete' => 'muchau me',
'deletethispage' => 'Noa sakam do get giḍikam',
-'undelete_short' => 'Baṅ get giḍik',
+'undelete_short' => 'Baṅ getgiḍilena {{PLURAL:$1 1ṭen joṛao $ joṛaoko}}',
+'viewdeleted_short' => '{{PLURAL:$1 gan ocoḱ sompadok $1 gan ocoḱ sompadon}} udugmẽ',
'protect' => "banchao'",
'protect_change' => 'Judạ',
'protectthispage' => 'Noa sakam ban̕caome',
'unprotect' => 'Bodol ban̕cao',
+'unprotectthispage' => 'Noa sakam reaḱ rukhiyạ bodolmẽ',
'newpage' => 'Nãwã sakam',
'talkpage' => 'Noa sakam galmaraome',
'talkpagelinktext' => 'Ro̠ṛme',
'projectpage' => 'Porjakṭ sakam uduḱme',
'imagepage' => 'Rẽt sakam uduḱme',
'mediawikipage' => 'Mesag sakam uduḱme',
+'templatepage' => 'Ṭempleṭ sakam udugmẽ',
'viewhelppage' => 'Goṛoaḱ sakam n̕elme',
+'categorypage' => 'Babot reaḱ rokom sokom udugmẽ',
'viewtalkpage' => 'Galmarao ńelme',
'otherlanguages' => 'Eṭagak pạrsi',
'redirectedfrom' => '$1 khon ạcur heć akana',
'redirectpagesub' => 'Bań sojhe sakam',
'lastmodifiedat' => 'Noa sakam do sạjao hoena $1, $2 te',
+'viewcount' => 'Noa sakamdo {{PLURAL:$1 dhom $1 dhom}} udug hoena.',
'protectedpage' => 'Rukhíạ sakamko',
'jumpto' => 'Calaḱme :',
'jumptonavigation' => 'Ñamme',
'jumptosearch' => 'Sendra',
+'view-pool-error' => 'Ikạkańmẽ, sarvarre nitoḱ do aḍi cap menaḱa.
+Ạḍi aema beoharko noa sakam ńel lạgit́ko kurumuṭueda.
+Nãwate noa sakam ńel kurumuṭuy lạgit́te dayakate mit́ghạṛi tạṅgiymẽ.
+$1',
'pool-timeout' => 'Somoy paromena cạbi lạgit́te tạṅgi hoyoḱkana',
+'pool-queuefull' => 'Pul reaḱ sakam perećena',
'pool-errorunknown' => 'Bań baḍayaḱ bhul',
# 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' => 'babo̠tre',
'aboutpage' => 'Project: Babo̠t',
+'copyright' => '$1 re bhitrire ńamoḱa.',
'copyrightpage' => '{{ns:project}}: Eḱteạr',
'currentevents' => 'Cạlit ghoṭnako',
'currentevents-url' => 'Project: Nitaḱ evenṭ ko',
'privacy' => 'Nijaḱ eḱtear',
'privacypage' => 'Project: Nijaḱ eḱteạr',
+'badaccess' => 'Ektiạr vul',
+'badaccess-group0' => 'Am do oka kạmi lạgit́em aroj akat́, ona kạmi purạo lạgit́te ạidạri do bạnuḱa.',
+'badaccess-groups' => 'Am do oka kạmim menjoṅkan ona do khạli {{PLURAL:$2 rạsiạkore noa rạsiạreaḱ mit́ṭenre}} mitṭen beoharić sompadon daṛeyaḱa: $1.',
+
+'versionrequired' => 'Meḍiawiki reaḱ $1 nãwã aroe jạruṛa',
+'versionrequiredtext' => 'Noa sakam do beohar lạgit́te meḍiawikire $1 nãwã araoe jạruṛa. [[Special:Version version page]] ńelmẽ.',
+
'ok' => 'Ṭhik gea',
'retrievedfrom' => '"$1" khon ñam ạgui',
'youhavenewmessages' => 'Amaḱ do $1 ($2) menaḱa',
'editold' => 'So̠mpado̠n',
'viewsourceold' => 'Ńamoḱ jayga',
'editlink' => 'Tońge',
-'viewsourcelink' => '̕Ńel renaḱ ḍahar',
+'viewsourcelink' => 'vitrireaḱ́ jo̠to̠ ńelme',
'editsectionhint' => 'Sapṛao dhara: $1',
'toc' => 'Menaḱaḱko',
'showtoc' => 'Uduḱme',
'hidetoc' => 'uku, Danaṅ',
'collapsible-collapse' => 'Murchạo caba',
'collapsible-expand' => 'Phaylao',
-'thisisdeleted' => 'N̕el se doho ruạṛ',
+'thisisdeleted' => '$1 Ńel se nãwã aroe hoyukma?',
'viewdeleted' => '$1 Ńelme',
+'restorelink' => '{{PLURAL:$1 mit́ṭen ocoḱgiḍi sompadon $1 gan udug giḍi sompadon}}',
'feedlinks' => 'Jom oco',
+'feed-invalid' => 'Garhak feed reaḱ rokom do ạnlekate baṅkana',
+'feed-unavailable' => 'Sinḍikason feed do baṅ ńamoḱkana',
+'site-rss-feed' => '$1 RSS feed',
'site-atom-feed' => ' $1 Jom oco',
+'page-rss-feed' => '"$1" RSS feed',
'page-atom-feed' => '"$1" khon khudri jom',
'red-link-title' => '$1 (niạ sakamdo bạnuḱa)',
+'sort-descending' => 'Ulṭạo horop lekate sajao',
+'sort-ascending' => 'Horop lekate sajao',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Sakam',
# Main script and global functions
'nosuchaction' => 'Noṅkanaḱ kạmi bạnuḱa',
+'nosuchactiontext' => 'Noa URL re goṭa akan kạmi do ạnlekate baṅkana.
+Am do paseć mit́ṭen vul joṛaoem emakada se URL oltem vul akada.
+Noa do noṅkanaḱ menkana je {{SITENAME}} sayeṭre beoharen sofṭower re mit́ṭen vul menaḱa.',
'nosuchspecialpage' => 'Noṅkanaḱ asokay sakam do banuḱa',
+'nospecialpagetext' => '<strong> am do mit́ṭen ạnlekate baṅkan asokae sakamem koe akada.</strong>
+[[Special:SpecialPages {{int:specialpages}}]] re ạn lekate asokaete sakamkore mit́ṭen tạlikam ńama.',
# General errors
'error' => 'bhul',
+'databaseerror' => 'Ḍaṭabase vul',
+'dberrortext' => 'Database query syntexre vul hoeakana.
+Sofṭoyerre jahan bag karonte noa do hoe daṛeyaḱa.
+Joto khon mucạt́ database query do tahẽkana noṅka:
+<blockquote><tt>$1<//tt><blockquote>
+"<tt>$2</tt>" bhitrire tahẽna.
+Database okaṭaḱ vule em akada:"<tt>$3: $4</tt>".',
+'dberrortextcl' => 'Ḍaṭabes query sintxexṭre vul hoeakana.
+Mucạt́ ḍaṭabes query do tahẽkana:
+"$1"
+"$2" faṅson reaḱ bhitri khon.
+Ḍatabes okaṭaḱ vule kulakaḱ: "$3: $4:',
'laggedslavemode' => "'''Sontoroḱme:''' sakamre do nahaḱ nãwãnaḱko paseć bạnuḱa.",
-'missing-article' => '"$1" $2 noa ńutumanaḱ sakhiyaxt sakamre olakanaḱ do bań ṅamoka.
-Noa hoy renaḱ karon do hoyoḱkana cabak tạrik pharak se noare joṛao sakam do get giḍi akana.
-Judi noa do karon bań hoylen khan, noa do am sopṭoyer re kạtictem ńam daṛeyaḱa.
+'readonly' => 'Ḍaṭabes do talagea',
+'enterlockreason' => 'Cạbie reaḱ karon do cet́kana ma lạimẽ, Saõte tinre tala cạbim jhija ona okte hõ lạimẽ',
+'readonlytext' => 'Nãwã hataen ar eṭagaḱ sompadon lạgit́te ḍaṭabes do nit bondo gea. Paseć ḍaṭabes rukhiyạre niyom lekate kạmi calaḱ kana. Thoṛa ghạrịić porte laha obosthare acur hạjuḱa.
+Sasetić do noa kathae roṛ keda: $1',
+'missing-article' => '"$1" $2 noa ńutumanaḱ sakhiyạ̣t sakamre olakanaḱ do bań ṅamoka.
+Noa hoy renaḱ karon do hoyoḱkana cabak tạrik pharak se noare joṛao sakam do get́ giḍi akana.
+Judi noa do karon bań hoylen khan, noa do am sopṭoyer re kạtićtem ńam daṛeyaḱa.
Daya katet́ noa do nonde [[Special:ListUsers/sysop|administrator]], ṭhen lạime, URL hotete.',
'missingarticle-rev' => '(Nãwã aro#: $1)',
'missingarticle-diff' => '(Pharak: $1, $2)',
+'readonly_lag' => 'Ḍaṭabes do aćhote tege bondo hoe akana, je lekate udhin reaḱ ḍaṭabes sarvarkor mukhiạ ḍaṭabes sarvar lekate heć daṛeaḱ.',
'internalerror' => 'Bhitri reaḱ bhul',
-'internalerror_info' => 'Bhitri reaḱ bhul:',
-'filedeleteerror' => '1 sakam do baṅ get́ giḍiḱ lena',
+'internalerror_info' => 'Bhitri reaḱ vul: $1',
+'fileappenderrorread' => 'Jońṛao oktere "$1" baṅ paṛhaolena.',
+'fileappenderror' => '"$1" do "$2" saõte joṛao baṅ ganoḱ kana.',
+'filecopyerror' => '"$1" rẽt khon "$2" rẽt baṅ kopilena.',
+'filerenameerror' => '"$1" rẽt reaḱ ńutum bodol kate "$2" em baṅ hoyoḱ kana.',
+'filedeleteerror' => '$1 sakam do baṅ get́ giḍiḱ lena',
+'directorycreateerror' => '"$1" dayrekṭori do baṅ tearlena.',
+'filenotfound' => '"$1" rẽt do baṅ sendra ńamoḱ kana.',
+'fileexistserror' => '"$1" rẽtre baṅ oloḱ kana: Rẽt do lahare menaḱa.',
+'unexpected' => 'Baṅ asakan mạn: "$1"="$2".',
+'formerror' => 'Vul: forom do baṅ jimạlena.',
'badarticleerror' => 'Noa sakamre kạmiko do baṅ puraolena.',
-'cannotdelete' => 'Nao sakam se rẽt do baṅ get giḍilena.
-Noa do pasec eṭaḱ hoṛ hotete lahare get giḍi akana.',
-'cannotdelete-title' => 'Sakam do baṅ get giḍiḱkana',
+'cannotdelete' => '$1 sakam se rẽt do baṅ get giḍilena.
+Pasec eṭaḱ hoṛ noa do lahareko get giḍi akada.',
+'cannotdelete-title' => '"$1" Sakam do baṅ get giḍiḱkana',
'badtitle' => "barich' bishó́́́́y",
'badtitletext' => 'Amaḱ nehorakaḱ sakam ńutum do bań puraoa, bạnuka, se be sudhrạo joṛao bhitri katha se bhitri wiki ńutum.
Noa re do mit se aema bisó menaḱa oka do ńutumre bań beoharok.',
-'viewsource' => 'Ńamoḱaḱ ńelme',
+'querypage-no-updates' => 'Noa sakam reaḱ nahaḱ halot bondo gea. Nonḍe doho akana ḍaṭako do baṅ saphaḱa.',
+'wrong_wfQuery_params' => 'wfQuery ()-re vul perameṭar em hoeakana<br />
+Fańson: $1<br />
+Query: $2',
+'viewsource' => 'Vitrireaḱ ńelme',
+'viewsource-title' => '$1 renaḱ ńamoḱ ṭhại ńelmẽ',
+'actionthrottled' => 'Kạmi reaḱ dhara bại',
'protectedpagetext' => 'Noa sakam do ol toṅge lạgit́te do bańcao gea.',
+'viewsourcetext' => 'Noa sakam do am ńel ar ńamoḱaḱ ṭhạiem kopi hatao daṛeaḱa:',
+'viewyourtext' => "Am do '''Amaḱ sompadon''' noa sakam ńel arem kopi hatao daṛeaḱa:",
+'protectedinterface' => 'Noa sakam reaḱ babotko do wiki sofṭoyer reaḱ mit́ṭen inṭarfes khobore ema, onate noa do rukhiyạ doho hoeakana.',
+'sqlhidden' => '(SQL query do ukure menaḱa)',
+'cascadeprotected' => 'Noa sakam do sompadon khon rukhiyạre menaḱa, karon sakam do latar reaḱ {{PLURAL:$1 gan sakam reaḱ gan sakam reaḱ}} bhitrire, oka sakam do (cascading) te rukhiyạ menaḱa:
+$2',
'namespaceprotected' => "Amaḱ do sakamko joṛao lạgit́te ạidạri banuḱ tama '''$1''' ńutumjayga.",
'ns-specialprotected' => 'Asokay teaḱ sakamkodo baṅ oltoṅgea.',
# Virus scanner
+'virus-badscanner' => 'Vul konfigareson: baṅ orom vairas skenar: "$1"',
'virus-scanfailed' => 'Esken baṅ hoelena (Code $1)',
'virus-unknownscanner' => 'Baṅ urum anṭvayras:',
# Login and logout pages
-'welcomecreation' => '==Johar,==
+'welcomecreation' => '== Johar, $1!==
Amaḱ ekaunṭ do tearena.
-Amaḱ [Asokaete:Pasindko {{SITENAME}} pasindko]] bodol alom hiṛińa.',
+Menkhan do amaḱ [[Special:Preferance {{SITENAME}} pạsindko]] thir dohoe lạgit́te alom hiṛińa.',
'yourname' => 'Beoboharicaḱ ńutum',
'yourpassword' => 'Uku namber',
'yourpasswordagain' => 'Arhõ oku namber olme',
-'remembermypassword' => 'In̕aḱ boloḱaḱ disạyme',
+'remembermypassword' => 'Mitṭen khon bạṛti khata reaḱ cạbi disạ dohoḱma (Jạsti $1 {{PLURAL:$1 din reaḱ din reaḱ}} lạgit)',
'securelogin-stick-https' => 'Bhitri bolo kate HTTPS re soṅge tãhenme',
+'yourdomainname' => 'Amaḱ ḍomen:',
+'externaldberror' => 'Hoe daṛeyaḱa jahan bahre reaḱ jacaeaḱ ḍaṭabes vul hoeakana se amaḱ bahre reaḱ ekaunṭ do nahaḱ halot aguire ạidạri bạnuḱa.',
'login' => "bolok' duar",
'nav-login-createaccount' => 'Boloḱ́ duạr / ekaunt tearme',
+'loginprompt' => '{{SITENAME}}-re boloḱem meneḱ khan amaḱ sendrare kuki kạmi ehoṕ hoyoḱtama.',
'userlogin' => 'Bhitri bolon / ekaunṭ tear',
'userloginnocreate' => 'Bhitri bolo',
'logout' => 'Bahre oḍoń',
'userlogout' => 'Bahre oḍoń',
'notloggedin' => 'Bhitri baṅ bolokana',
-'nologin' => 'Ekaunṭ bạnuḱtama?',
+'nologin' => "Amaḱ do cet́ wikipeḍiare ekaunṭ banuḱtama? Ado '''$1'''",
'nologinlink' => 'account tear me',
'createaccount' => 'Ṭhai benaome',
-'gotaccount' => 'Ekaunṭ menaḱgeya?',
+'gotaccount' => 'Amaḱ do cet́ miṭten ekaunṭ tear menaḱtama? $1 tearmẽ.',
'gotaccountlink' => 'Bhitri bolon',
'userlogin-resetlink' => 'Amaḱ boloḱ talam cạbi sanamem hiṛińkeda?',
'createaccountmail' => 'E-mail hotete',
'userexists' => 'Laṛcaṛicaḱ ńutum em hoyena ona do beohar hoyakana.
Dayakatet́ eṭagaḱ ńutum bachaome.',
'loginerror' => 'Bhitri bolok do vulgea',
-'createaccounterror' => 'Ekaunṭ do baṅ benao lena:',
+'createaccounterror' => 'Ekaunṭ do baṅ tear lena: $1',
+'nocookiesnew' => 'Beoharićaḱ ekaunṭ tear hoe akana, menkhan am do nit hạbićte ekaunṭre bam boloakana. {{SITENAME}} re kuki beohar kate beoharićaḱ ekaunṭre boloa.
+Amaḱ sendrare kukiko bondo hoeakana. Dayakate kukiko kạmi hoe ocoemẽ ar amaḱ nãwã beohar ńutum ar uku nambar beohar hotete noa ekaunṭre boloḱmẽ.',
+'nocookieslogin' => '{{SITENAME}} re kuki hotete beoharićaḱ bhitri boloḱ do hoyoḱa. Amaḱ sendrare kuki bondo menaḱa. Kuki cạlu kate arhõ kurumuṭuimẽ.',
+'nocookiesfornew' => 'Beoharićaḱ ekaunṭ do baṅ tear akana, Cedaḱ je noa ńamoḱ jaega babote ale do bale uruma.
+Ale do baḍae ocolem amaḱ kuki doe kạmikana, sakam do arhõ rakaṕ lạgit́te kurumuṭuemẽ.',
+'noname' => 'Am do asol beoharićaḱ ńutum ṭhikte bam emakada.',
'loginsuccesstitle' => 'Bhitri boloḱ do moctege puraoena',
-'loginsuccess' => "'''Am do nitoḱ bolo menama {{SITENAME}} re",
+'loginsuccess' => '\'\'\'Am do nitge "$1" ńutumte {{SITENAME}} rem bolo akana.',
+'nosuchuser' => '"$1" ńutumte jahan beoharko bạnuḱkoa.
+Beoharićaḱ ńutum do bukṛogea.
+Amaḱ bananko ńelmẽ, se [[Special:Userlogin/signup nãwã mit́ṭen ekaunṭ tearmẽ]].',
+'nosuchusershort' => '"$1" ńutuman jahãe beoharko do banuḱkoa. Ńutum reaḱ banan biḍaomẽ.',
'nouserspecified' => 'Am do pusṭaote laṛcaṛićaḱ ńutum em hoyoḱtama.',
'login-userblocked' => 'Nui laṛcaṛic doe esetgea. bhitri boloḱ ạidạri bań emoḱ kana.',
'wrongpassword' => 'Bań milaoaḱ oku nambar em hoyakana.
'password-login-forbidden' => 'Noa laṛcaṛicaḱ ńutum ar oku nambar do ạnlekate baṅkana.',
'mailmypassword' => 'E-mail reaḱ nãwã uko katha',
'passwordremindertitle' => 'Nãwã nitlạgit oku nambar {{SITENAME}} lạgit́te',
-'noemail' => 'Nonḍe do laṛcaṛlạgit́te jahan oku nambar sap doho bạnuḱa.',
+'noemail' => '"$1" beoharić lạgit́te do jahan e-mail ṭhikana rukhiyạ doho bạnuḱa.',
'noemailcreate' => 'Am do mitṭen jewet e-mail ṭhikạna em jaruṛ menaḱtama.',
'passwordsent' => '"$1" ṭhikạnate resṭariyen e-mail lạgit́te mitṭen oku nambar em hoyena.
Daya kate ńam porte arhõ bhitri boloḱme.',
-'mailerror' => 'Vulte kulakan mail:',
+'blocked-mailpassword' => 'Amaḱ IP ṭhikạna khon sompadon do bondo menaḱa, Onate noa ṭhikạna baṅ beohar kate uku nambar ruạṛ baṅ hoyoḱa.',
+'mailerror' => 'E-mail kulte eṭkẽṭõrẽ: $1',
+'emailauthenticated' => 'Amaḱ e-mail ṭhikạna do $2 tạrikh reaḱ $3 re jạhirena.',
+'emailnotauthenticated' => 'Amaḱ e-mail reaḱ ṭhikạna do <strong> nit hõ baṅ jacay akana</strong> latar reaḱ features lạgit́te jahan e-mail do baṅkuloḱa.',
+'noemailprefs' => 'Noa features ko kạmie ocoy lạgit́te mit́ṭen e-mail ṭhikạna dohoe hoyoḱa.',
'emailconfirmlink' => 'Amaḱ e-mail ṭhikana do sạriyme.',
+'invalidemailaddress' => 'Noa e-mail ṭhikạna do baṅ hataoa, karon noa formeṭ do pusṭạote baṅ em akana. Dayakate pusṭao formeṭte ṭhikạna emmẽ, se khet do khạliemẽ.',
'cannotchangeemail' => 'Ekaunṭ e-mail ṭhikạnakodo noa wiki re baṅ bodoloḱ kana.',
+'emaildisabled' => 'Noa sayeṭre do e-mail em subita bạnuḱa.',
'accountcreated' => 'Ekaunṭ do teyarena',
'accountcreatedtext' => '$1 lạgit́te ekaunṭ do benaoena.',
'createaccount-title' => '{{SITENAME}} lạgit́te ekaunṭ benao',
'createaccount-text' => 'Okoe co am lạgit́te mitṭen ekaunṭko amaḱ e-mail ṭhikạna lạgit {{SITENAME}} re ($4) ńutum "$2", oku nambar "$3".
Am do mesagem baṅ daṛeyaḱa, judi noa ekaunṭ do vulge benaolen khan.',
+'usernamehasherror' => 'Beoharićaḱ ńutumre hes horop baṅ tahẽdaṛeaḱa',
+'login-throttled' => 'Am do mitghạri lahare por por aema dhao boloḱem kurumuṭu keda.
+Arhõ kurumuṭue lahare dayakate thoṛagan tạṅgiemẽ.',
'login-abort-generic' => 'Amaḱ bhitri boloḱ do baṅ hoylena - batena.',
'loginlanguagelabel' => 'katha: $1',
'resetpass-no-info' => 'Noa sakam sojhete laṛcaṛ lạgit́te am do bhitri boloḱ hoyoḱtama.',
'resetpass-submit-loggedin' => 'Oku namber bodol',
'resetpass-submit-cancel' => 'Bạgi',
+'resetpass-temp-password' => 'Nit lạgit uku nambar:',
# Special:PasswordReset
'passwordreset' => 'Nãwãte oku nambar emme',
+'passwordreset-text' => 'Amaḱ ekaunṭ reaḱ purapuri thuti e-mail hotete ńam lạgit́te latar reaḱ forom purạomẽ.',
'passwordreset-legend' => 'Nãwãte oku nambar emme',
+'passwordreset-disabled' => 'Noa wikire amaḱ uku nambar nãwãte em lạgit subita do bando gea.',
+'passwordreset-pretext' => '{{PLURAL:$1 latar re menaḱ ḍaṭako khon mit́ṭen emmẽ}}',
'passwordreset-username' => 'Beoharicaḱ ńutum:',
+'passwordreset-domain' => 'Ḍomen:',
+'passwordreset-capture' => 'Sendra fol reaḱ e-mail ńelmẽ?',
+'passwordreset-capture-help' => 'Am do judi noa jacạy baksom lin lekhan, tobe nit lạgit́te em akan uku nambar são mit́ṭen e-mail ame uduḱama ar ona sãote beoharić ṭhen ona kuluḱa.',
'passwordreset-email' => 'E-mail ṭhikạna:',
+'passwordreset-emailtitle' => '{{SITENAME}} sayeṭre beoharićaḱ purạo thutiko',
'passwordreset-emailelement' => 'Beoharicaḱ ńutum:
Nit lạgit oku nambar:',
'passwordreset-emailsent' => 'Mitṭen disạ ruaṛ e-mail do kulena.',
'link_sample' => 'Joṛaotet́ reaḱ bohoḱ',
'link_tip' => 'Bhitri reak joṛaotet́',
'extlink_sample' => 'http://www.nạmuna.makaṛgạṭi ạmạli',
-'extlink_tip' => 'Baherenaḱ jońṛao (disạyme htt://prefix)',
+'extlink_tip' => 'Baherenaḱ jońṛao (disạyme http://prefix)',
'headline_sample' => 'Bohok katha',
'headline_tip' => 'level 2 guḍkatha',
'nowiki_sample' => 'Begor format olko bhoraome',
'anoneditwarning' => "'''Sabdhan:''' amdo begor logkatem bolowakana.
Amaḱ IP ṭhikana do noa sakam sompadon jạṛre rekorḍoḱa.",
'anonpreviewwarning' => '"Am do bhitri bam bolo akana. Noa sakamre amaḱ kạmiko jạre IP ṭhiikạ̣nare rukhiyạ ḱa."',
+'loginreqlink' => 'Bhitri boloḱ',
+'loginreqpagetext' => 'Eṭagaḱ sakamko ńel lạgit́te do am $1 hoyoḱ jạruṛtama.',
+'accmailtitle' => 'Uku nambar do kulena.',
+'accmailtext' => '[[User talk:$1 $1]] lạgit́te aćte benaoen uku nambar do $2 kul hoena.
+Bhitri bolo kateḱ noa nãwã ekaunṭ lạgit uku nambar "[[Special:ChangePassword Change password]]" sakam khonem bodol daṛyakya.',
'newarticle' => '(Nãwa)',
-'newarticletext' => 'Am do okaṭaḱ somporko sakamem pańjayetkan ona do nito hạbic banuka.
-Sakam benao lạgitte, noa latar baksore ol ehoṕme
-Am do judim vul lekahan, amaḱ sendray jaygare "ruạṛ" baṭon linme.',
+'newarticletext' => "Am do oka mitṭen joṛaoem pańja akada, onaṭak do bạnuḱa.
+Ona sakam tear lạgit́te, latar reaḱ baksore ol ehoṕmẽ (arhõ jạsti baḍae lạgit́te [[{{mediaWiki:Helppage}}help page]] pańjaemẽ).
+Am do judi nonḍe vulkatem heć akan khan, tobe amaḱ sendrakore '''back''' baṭon linmẽ.",
'noarticletext' => 'Nitoḱ noa sakamre do ol bạnuḱa.
You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.',
-'previewnote' => "'''Disạyme noa do eken ńeln̕am lạgit.'''
-Amaḱ bodolaḱ kodo nit habićte bań ban̕cao akana!",
+'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" ńutuman jahãe beoharićaḱ ekaunṭ do baṅ resṭri hoeakana. Daya kate biḍạo katet́ ńelmẽ noa sakam do benoa/sompadonem menet́ kana se baṅ.',
+'userpage-userdoesnotexist-view' => 'Beoharićaḱ "$1" ekaunṭ do baṅ resṭire akana.',
+'blocked-notice-logextract' => 'Nui beoharić do nitoḱe esetgea.
+Refarens lạgit́te nahaḱ boloḱ do latare em hoena:',
+'previewnote' => "'''kheyalmẽ, noa do eken ńeloḱ lạgit.'''
+Amaḱ bodolaḱ kodo nit habićte bań rukhíạakana!",
'continue-editing' => 'Toṅge calaḱkana',
-'editing' => 'Sampadon; joṛao',
+'editing' => 'Joṛao do purạena: $1',
'creating' => 'Benao',
'editingsection' => 'Joṛao $1 (hạṭiń)',
'editingcomment' => 'Joṛao',
'yourtext' => 'Amaḱ ol',
-'templatesused' => 'Noa sakamre beoharen phormat se phormatko',
+'yourdiff' => 'Farak',
+'templatesused' => 'Noa sakamre beoharen {{PLURAL:$1 ṭempeleṭ ṭempeleṭko}}:',
'template-protected' => 'Rukhiạ',
'template-semiprotected' => '(Kạṭic-rukhiyạ)',
-'hiddencategories' => 'Noa sakam do mitṭen hoṛkanay',
-'permissionserrorstext-withaction' => 'Amaḱ do aydạri bạnuḱtama, Noa karon pan̕jay lạgitte',
+'hiddencategories' => 'Noa sakam do {{PLURAL:$1 1 ukuakan bhag $1 uku akan bhagkorenaḱ}} gaõtarenge:',
+'permissionserrorstext-withaction' => 'Amaḱ $2 kạmire ạydạri do bạnuḱa, Ona reaḱ {{PLURAL:$1 Karon/ Karonko}}:',
'recreate-moveddeleted-warn' => "'''Sontorokme: am do arhõ doṛhate sakamem teyareda oka do sedayre get giḍiyen.
Am do gunạnme cet́ noa joṛao kạmi am lạgit́te ganoḱ ase bań.
Noa get ar tala ocok sakam nonḍe em hoyena dhok lagit́te.",
'post-expand-template-inclusion-warning' => '"Sontoroḱme" Noa format do lạṭu geya.
Thoṛa format do noare banuḱana.',
'post-expand-template-inclusion-category' => 'Sakamko oka borḍre noa tahẽna ona doe paromkeda',
+'post-expand-template-argument-warning' => "'''Sontoroḱmẽ:''' Noa sakamre komse kom mitṭen forma joṛao menaḱa ạḍi lạṭute pasnao akana.
+Onate noa ạrgumenṭkodo bạgi giḍi hoena.",
+'post-expand-template-argument-category' => 'Bagi forma ạrgumenṭ sapdoho sakam',
# Account creation failure
'cantcreateaccounttitle' => 'Ekaunṭ do baṅ tearlena',
# History pages
'viewpagelogs' => 'Noa sakam reaḱ cạbi udukme',
'currentrev-asof' => 'Mucạt nãwã aroy',
-'revisionasof' => 'Nãwã aro sakam 1',
+'revisionasof' => 'Nãwã aro sakam $1 leka',
'revision-info' => 'Ńel/pańja ruạṛ $1 khon $2',
'previousrevision' => 'Pạhilaḱ paṛhao ruạṛ',
'nextrevision' => "nãwate n'el ruar",
'last' => 'Laha renaḱ',
'page_first' => 'Pahilaḱ',
'page_last' => 'Mucạt́aḱ',
+'histlegend' => "Farak bachao: oka nãwã aroeko tulạoem menet́kan, onako cinhạ em kate boloḱ se latar baṭon linmẽ.<br/>
+Unuduḱ: '''({{int:cur}})''' = nahaḱ nãwã aroeko saõte tulạo, '''({{int:last}})''' = laha reaḱ nãwã aroe sãote tulạo, '''{{int:minoreditletter}}''' = huḍiń sompadon.",
'history-fieldset-title' => 'Sendray jaṛ',
'history-show-deleted' => 'khạli get giḍiyaḱ koge',
'histfirst' => "adi laha-ak'",
'lineno' => 'Sạr $1:',
'compareselectedversions' => 'Noa barea nãwã bachawanaḱ talare tolonayme',
'editundo' => 'ruạṛ',
+'diff-multi' => '({{PLURAL:$2 mit́ṭen beoharic $2 hoṛ beoharkin}} Sompadon hoena {{PLURAL:$1 mit́ṭen do mitghạṛi lạgit sudhrạo mit́ṭen do mitghạṛi lạgit sudhrạo}} baṅ uduḱlena.)',
# Search results
'searchresults' => 'Se̠ndra fo̠l',
'searchprofile-articles' => 'Menaḱaḱ sakamko',
'searchprofile-project' => 'Go̠ṛo ar Project sakam',
'searchprofile-images' => 'Multimedia',
-'searchprofile-everything' => 'Sanamak koge',
+'searchprofile-everything' => 'Sanamaḱ koge',
'searchprofile-advanced' => 'Sompadon',
-'searchprofile-articles-tooltip' => '$1 re ñelme',
+'searchprofile-articles-tooltip' => '$1 re ńelme',
'searchprofile-project-tooltip' => '$1 re sẽndraeme',
'searchprofile-images-tooltip' => 'File sendra',
'searchprofile-everything-tooltip' => 'Sanam ko modre sẽndra ( roṛ sakam modre hõ)',
'searchprofile-advanced-tooltip' => 'Judạ ńutum re sẽndra',
-'search-result-size' => 'Katha Kathako',
+'search-result-size' => '$1 ({{PLURAL:$2 1 Aṛaṅ$2 Aṛaṅko}})',
+'search-result-category-size' => '{{PLURAL: $1 1 gãoren $1 gãota renko}} ({{PLURAL: $2 1 kạṭic rokom sokom $ 2 goṭen}}, {{PLURAL:$3 1 rẽt $3 rẽtko}})',
'search-redirect' => '($1 te sujhi doṛha )',
'search-section' => '(Pahaṭa $1)',
'search-suggest' => 'Am do cet́ $1 em menocoyet tãhẽkana',
'youremail' => 'E-mail:',
'username' => 'Beoharićaḱ ńutum:',
'uid' => 'Beoharićaḱ cinhạo nombor',
-'yourrealname' => 'Sạ̣ri ńutum',
+'yourrealname' => 'Sạri ńutum',
'gender-male' => 'Baba hoṛ',
'gender-female' => 'Gogo hoṛ, Kuṛi, Kuṛi gidrạ',
'email' => 'E-mail',
'action-edit' => 'noa sakam joṛao',
# Recent changes
+'nchanges' => '$1 {{PLURAL:$1 bodol bodolko}}',
'recentchanges' => 'Nãwã bo̠do̠lko',
'recentchanges-legend' => 'Nahaḱ bodol teaḱko',
+'recentchanges-summary' => 'Noa sakamre wiki reaḱ joto khon nãwã bodolko paṅjaṅjaymẽ.',
+'recentchanges-feed-description' => 'Noa feedre wiki reaḱ joto khon nãwã bodolko paṅjaymẽ',
'recentchanges-label-newpage' => 'Noa sompadon do nãwã mint́ṭen sakame tearkeda',
'recentchanges-label-minor' => 'Noado hudiń mạchi sompadonkana',
'recentchanges-label-bot' => 'Noa sompadon do bot darate purauena',
'recentchanges-label-unpatrolled' => 'Noa sompadon do ńit́ hạbić baṅ ńel ńamakana',
+'rcnote' => "Latar reaḱ {{PLURAL:$2 dinre '''$2''' dinre}} hoyena {{PLURAL:$1 '''1''' '''$1'''}}gan bodol latare uduḱena ((okare nitaḱ okte ar tạrikh do $5, $4).",
'rcnotefrom' => '$2 habić bodolak ko do latare ńeloḱkana',
'rclistfrom' => 'Nãwã bodolko uduḱme $1 khon ehoṕkate',
'rcshowhideminor' => '$1 kaṭic culuń tońge',
'rcshowhidebots' => ' boṭko $1',
'rcshowhideliu' => 'Beoharićaḱ boloḱ $1',
'rcshowhideanons' => '$1 Nũtum bańa bebohariḱ',
+'rcshowhidepatr' => '$1 Biḍạen sompadonko',
'rcshowhidemine' => '$1 ińaḱ tońge',
'rclinks' => '$2 din lahare $1 bodol unuduḱme <br />$3',
'diff' => 'Judạ',
'filedesc' => 'Guṭ katha',
'fileuploadsummary' => 'Guṭ katha',
'savefile' => 'Rẽt rukhiyaymẽ',
-'uploadedimage' => 'Rakaṕ hoyena',
+'uploadedimage' => '"[[$1]]" rakaṕ huyena',
'upload-description' => 'Rẽt reaḱ jạṛ',
'watchthisupload' => 'Noa rẽt ńelmẽ',
'filehist-dimensions' => 'Maṕ',
'filehist-comment' => 'Roṛ',
'imagelinks' => 'Fael bebohar',
-'linkstoimage' => 'Noa sakam do niạ rẽtre/fayel joṛao menaḱa',
+'linkstoimage' => 'Latar reaḱ {{PLURAL:$1 sakam $1 sakam}} khon noa rẽtre joṛao menaḱa:',
'nolinkstoimage' => 'Nonḍe do noa são joṛao sakam banuka',
'sharedupload-desc-here' => 'Noa rẽt do nonḍe khon- $1 ar paseć eṭaḱaḱ porjekṭko beoharakana.
Noa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|baiṭ|baiṭ}}',
-'nmembers' => 'Sãoten/ Sãotenko',
+'nmembers' => '$1 {{PLURAL:$1 Gaõtaren Gaõtarenko}}',
'prefixindex' => 'Sanam sakam re joṛao menaḱ',
'shortpages' => 'Huḍiń sakamko',
'longpages' => 'Jiliń sakamko',
'listusers' => 'beoharićaḱ tạlika',
-'usercreated' => 'Ayo baba: tạrikh okte',
+'usercreated' => '{{GENDER: $3 | benawakan}} $1 tarikre $2 okte',
'newpages' => 'Nãwa Patako',
'newpages-username' => 'Beoharićaḱ ńutum:',
'ancientpages' => 'Mare sakamko',
'move' => 'Ocoḱme, Kulme',
'movethispage' => 'Noa sakam ocogmẽ',
+'pager-newer-n' => '{{PLURAL:$1 nãwaw aroyen 1ṭen nãwã aroyen $1ṭen}}',
+'pager-older-n' => '{{PLURAL:$1 arhõ mare 1ṭen arhõ mare $1ṭen}}',
# Book sources
'booksources' => 'Puthi ńamoḱ ṭhại/jayga',
'categories' => 'rokom sokom',
# Special:LinkSearch
-'linksearch-line' => '$2 joṛao menaḱa $2re',
+'linksearch-line' => '$2 khon $1 re joṛao hoeakana',
# Special:ListUsers
'listusers-submit' => 'Udugmẽ',
# Watchlist
'watchlist' => "Inak' n'el ko",
'mywatchlist' => 'Iñak jagarna tạlikạ',
-'watchlistfor2' => 'Lạgit',
+'watchlistfor2' => '$1 ($2) lạ̣gitte',
'watch' => 'Ńelme',
'unwatch' => "bang nelok' a",
-'wlshowlast' => 'Mucạt 1 ghonta mucạt 2 maha uduḱme',
+'watchlist-details' => 'Baṅ purạo tạlikare {{PLURAL:$1ṭen sakam $1 ṭen sakam}} menaḱa (roṛ sakamko lekhare baṅ sapkate)',
+'wlshowlast' => 'Mucạtet́ udukmẽ $1 baje $2 maha $3',
'watchlist-options' => 'Ńelok tạlika reak sonketko',
# Displayed when you click the "watch" button and it is in the process of watching
# Protect
'protectlogpage' => 'Rukhiyạy tala cạbi',
-'protectedarticle' => 'Rukhiyạre menaḱa',
+'protectedarticle' => 'Rukhiyạgeya "[[$1]]"',
'protectcomment' => 'karon',
'protectexpiry' => 'Cabaḱ',
# Contributions
'contributions' => 'Beharićaḱ Kạmiko',
-'contributions-title' => 'Laṛcaṛicaḱ kạmiko lạgit',
+'contributions-title' => '$1 Beoharićaḱ kạmiko',
'mycontris' => 'Ińaḱ kạmiko',
'contribsub2' => '$1 ($2) lạgitte',
'uctop' => '(coṭ utạr)',
# What links here
'whatlinkshere' => 'Cet́ link ko no̠nḍe do',
-'whatlinkshere-title' => 'Noa sakam do 1 sakam tuluc joṛao menaḱa',
+'whatlinkshere-title' => 'Oka sakam ko do "$1"-re joṛao menaḱa',
'whatlinkshere-page' => 'Sakam',
-'linkshere' => 'Noa sakam do joṛao menaka:',
-'nolinkshere' => 'Sakamko joṛao bạnuḱa',
+'linkshere' => "Latar reaḱ sakamko do '''[[:$1]]''' sakamre joṛao menaḱa:",
+'nolinkshere' => "Jahan sakam khon '''[[:$1]]''' sakamre joṛao bạnuḱa",
'isredirect' => 'Bań sojhe sakam',
'istemplate' => 'Ar mit́ teć sãote joṛao',
'isimage' => 'Ret joṛao',
-'whatlinkshere-prev' => 'Tayom renaḱ Táoy renaḱko',
-'whatlinkshere-next' => 'Laha renaḱ Laha renaḱko',
+'whatlinkshere-prev' => '{{PLURAL:$1 Laha reaḱ Laha reaḱ$1ṭen}}',
+'whatlinkshere-next' => '{{PLURAL:$1 |Laha renaḱ | Laha renaḱko $1}}',
'whatlinkshere-links' => 'Joṛaoko',
'whatlinkshere-hideredirs' => '$1 acurgeya',
-'whatlinkshere-hidetrans' => 'Bodolaḱ danaṅ',
-'whatlinkshere-hidelinks' => 'Joṛao danaṅ se uduḱme',
-'whatlinkshere-hideimages' => 'phoṭo em',
+'whatlinkshere-hidetrans' => '$1 ṭarnskuleson uduḱme',
+'whatlinkshere-hidelinks' => '$1 joṛao',
+'whatlinkshere-hideimages' => '$1 Chubi joṛaoko',
'whatlinkshere-filters' => 'Sapha',
# Block/unblock
'ipblocklist' => 'Beoharic esetgeyay',
'ipblocklist-submit' => 'Sendra',
'emailblock' => 'E-mail do esetgea',
-'blocklink' => 'Eset',
+'blocklink' => 'Eset́',
'unblocklink' => 'bań block',
'change-blocklink' => 'block judạ',
'contribslink' => 'em daṛeaḱ',
# Thumbnails
'thumbnail-more' => 'Lạṭui mẽ',
+'thumbnail_error' => 'Benawakan unuduḱ kạṭuṕ do baṅ ṭhika: $1',
# Special:Import
'import-upload-filename' => 'Rẽt ńutum',
# Tooltip help for the actions
-'tooltip-pt-userpage' => 'Amak bebohar sakam',
-'tooltip-pt-mytalk' => 'Amaḱ katha ro̠ṛrenaḱ́ pata',
-'tooltip-pt-preferences' => 'Amaḱ Kusíyaḱ',
-'tooltip-pt-watchlist' => 'Mit́ṭen tạlika okaṭak am do nãwã aroy lạgitem ńeleḱkan',
+'tooltip-pt-userpage' => 'Amaḱ́ bebo̠harić sakam',
+'tooltip-pt-mytalk' => 'Amaḱ katha ro̠ṛrenaḱ́ sakam',
+'tooltip-pt-preferences' => 'Amaḱ pạsindko',
+'tooltip-pt-watchlist' => 'Sakam tạlika okaṭak̕katet́ am do nãwã aroy lạgitem ńeleḱkan',
'tooltip-pt-mycontris' => 'Amaḱ kạmi reaḱ tạlika',
'tooltip-pt-login' => 'Am do log in lagit́ metao am kana; menkhan noa do jarur bań kana',
-'tooltip-pt-logout' => 'Onḍńme',
+'tooltip-pt-logout' => 'O̠nḍo̠ńme',
'tooltip-ca-talk' => 'Galmãrao bhitri renaḱ sakam lạgit́',
'tooltip-ca-edit' => 'Noa sakam em edit daṛeaḱ. Daya kateć save laha re preview batton bebohar me.',
'tooltip-ca-addsection' => 'Nãwã sekson sạrdi',
'tooltip-p-logo' => 'Mukhiạ sakamre calaḱme',
'tooltip-n-mainpage' => 'Mukhiạ sakamre calaḱme',
'tooltip-n-mainpage-description' => 'Mukhiạ sakamre calaḱme',
-'tooltip-n-portal' => 'Niạ pro̠je̠ḱ́ṭreaḱ Biso̠yko, Cet́́em ceka daṛia,Okare̠ sendra ñamoḱ́a',
+'tooltip-n-portal' => 'Niạ pro̠je̠ḱ́ṭreaḱ Biso̠yko, Cet́em ceka daṛia,Okare̠ sendra ñamoḱ́a',
'tooltip-n-currentevents' => 'Nitaḱ events re jos hudis ńãm me',
'tooltip-n-recentchanges' => 'Uiki nãhaḱ palaṭrenaḱ́ tạlikạ',
'tooltip-n-randompage' => 'Ãr hõ sakam ko agui mẽ',
# Media information
'file-info-size' => '$1 x $2 pixels, file size: $3, MIME type: $4',
'file-nohires' => 'Aema resulation nondḍe banuḱa',
+'svg-long-desc' => 'SVG rẽt, normalte $1 x $2 pixels, rẽt sayej: $3',
'show-big-image' => 'Purạo resulation',
# Special:NewFiles
# Watchlist editing tools
'watchlisttools-view' => 'Jońgṛao bodolaḱko ńel',
'watchlisttools-edit' => 'Ńelok tạlika ńel ar joṛao',
+'watchlisttools-raw' => 'Baṇ purạo akan ńelok tạlika purạomẽ',
+
+# Core parser functions
+'duplicate-defaultsort' => "'''Sontoroḱmẽ:''' ḍifolṭ sajao reaḱ cạbi: $2 lahare ḍifolṭ sajao reaḱ sakam: ''$1'' e bae luturaḱ kana.",
# Special:SpecialPages
'specialpages' => 'Jạruṛ patako',
+# External image whitelist
+'external_image_whitelist' => '#Noa sakam do cet leka menaḱa oṅkage dohoemẽ
+#Sanam okte re jạhiren kuṭrạ latar re (khạli hạtiń //talare) bạisạomẽ
+#Noako do bahre reaḱ (hotlinked) chubi reaḱ URL saõte milạo hoyoḱa
+#Okako milạḱa, onako do chubi lekate udugoḱa, baṅkhan do khali chubi joṛao udugoḱa
+#Noa layen reaḱ ehoṕre # menaḱa ona layenko menko hisapte beohar hoyoḱka
+#Noa do kas-baṅ rimjhạoaḱge
+#Noa dag cetanre regex kuṭrạ bạsạomẽ. Noa layen cetleka menaḱa oṅkage dohoemẽ</pre>',
+
# Special:Tags
'tag-filter' => '[[Special:Tags|Tag]] saphay:',
* @author לערי ריינהארט
*/
+$namespaceNames = array(
+ NS_MEDIA => 'Media',
+ NS_SPECIAL => 'Doaimmat',
+ NS_TALK => 'Ságastallan',
+ NS_USER => 'Geavaheaddji',
+ NS_USER_TALK => 'Geavaheaddjeságastallan',
+ NS_PROJECT_TALK => '$1-ságastallan',
+ NS_FILE => 'Fiila',
+ NS_FILE_TALK => 'Fiilaságastallan',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki-ságastallan',
+ NS_TEMPLATE => 'Málle',
+ NS_TEMPLATE_TALK => 'Málleságastallan',
+ NS_HELP => 'Veahkki',
+ NS_HELP_TALK => 'Veahkkeságastallan',
+ NS_CATEGORY => 'Kategoriija',
+ NS_CATEGORY_TALK => 'Kategoriijaságastallan',
+);
+
+$specialPageAliases = array(
+ 'Recentchanges' => array( 'Varas_rievdadusat' ),
+);
+
$linkTrail = '/^(:?[a-zàáâçčʒǯđðéèêëǧǥȟíìîïıǩŋñóòôõßšŧúùûýÿüžþæøåäö]+)(.*)$/sDu';
$messages = array(
'nchanges' => '$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}',
'recentchanges' => 'Nedavne izmjene',
'recentchanges-legend' => 'Postavke za Nedavne promjene',
-'recentchangestext' => 'Na ovoj stranici možete pratiti nedavne izmjene.',
+'recentchanges-summary' => 'Na ovoj stranici možete pratiti nedavne izmjene.',
'recentchanges-feed-description' => 'Praćenje nedavnih izmjena na ovom wikiju u ovom feedu.',
'recentchanges-label-newpage' => 'Ovom izmjenom je stvorena nova stranica',
'recentchanges-label-minor' => 'Ovo je manja izmjena',
'nchanges' => '$1 imbddln {{PLURAL:$1||s}}',
'recentchanges' => 'Imbddeln imggura',
'recentchanges-legend' => 'Tixtiɣitin (options) n imbddl imaynutn',
-'recentchangestext' => 'Ml imbddln imaynutn n wiki ɣ tasna yad',
+'recentchanges-summary' => 'Ml imbddln imaynutn n wiki ɣ tasna yad',
'recentchanges-feed-description' => 'Tfr imbddln imggura n wiki yad ɣ usuddm',
'recentchanges-label-newpage' => 'Ambddl ad ar iskar yakka yat tasna tamaynut.',
'recentchanges-label-minor' => 'Imbddl ifssusn',
'nchanges' => '$1 {{PLURAL:$1|වෙනස්වීම|වෙනස්වීම්}}',
'recentchanges' => 'මෑත වෙනස්කිරීම්',
'recentchanges-legend' => 'නව වෙනස්වීම් සැකසුම් තෝරාගැනීම',
-'recentchangestext' => 'මෙම පිටුවේ විකියට සිදුකල ඉතා මෑත වෙනස්වීම් පසුහඹන්න.',
+'recentchanges-summary' => 'මෙම පිටුවේ විකියට සිදුකල ඉතා මෑත වෙනස්වීම් පසුහඹන්න.',
'recentchanges-feed-description' => 'මෙම පෝෂකයෙහි විකියට බොහෝ මෑතදී සිදුකල වෙනස්වීම් හෙළිකරන්න.',
'recentchanges-label-newpage' => 'මෙම සංස්කරණය නව පිටුවක් නිර්මාණය කරන ලදී',
'recentchanges-label-minor' => 'මෙය සුළු සංස්කරණයකි',
'filereadonlyerror' => 'Nebolo možné modifikovať súbor „$1“, pretože úložisko „$2“ je momentálne v režime len na čítanie.
Správca, ktorý ho zamkol ponúkol toto vysvetlenie: „$3“.',
+'invalidtitle-knownnamespace' => 'Neplatný názov s menným priestorom „$2“ a textom „$3“',
+'invalidtitle-unknownnamespace' => 'Neplatný názov s neznámym číslom menného priestoru „$1“ a textom „$2“',
# Virus scanner
'virus-badscanner' => "Chybná konfigurácia: neznámy antivírus: ''$1''",
'node-count-exceeded-warning' => 'Stránka prekročila povolený počet uzlov',
'expansion-depth-exceeded-category' => 'Stránky s priveľkou hĺbkou expanzie',
'expansion-depth-exceeded-warning' => 'Stránka prekročila povolenú hĺbku expanzie',
+'parser-unstrip-loop-warning' => 'Zistené zacyklenie volania rozširovacej značky',
+'parser-unstrip-recursion-limit' => 'Prektočený limit rekurzie volania rozširovacej značky ($1)',
# "Undo" feature
'undo-success' => 'Úpravu je možné vrátiť. Prosím skontrolujte tento rozdiel, čím overíte, že táto úprava je tá, ktorú chcete, a následne uložte zmeny, čím ukončíte vrátenie.',
# Diffs
'history-title' => 'História revízií „$1“',
+'difference-title' => 'Rozdiel medzi revíziami „$1“',
+'difference-title-multipage' => 'Rozdiel medzi stránkami „$1“ a „$2“',
'difference-multipage' => '(Rozdiel medzi stránkami)',
'lineno' => 'Riadok $1:',
'compareselectedversions' => 'Porovnať označené verzie',
'nchanges' => '$1 {{PLURAL:$1|zmena|zmeny|zmien}}',
'recentchanges' => 'Posledné úpravy',
'recentchanges-legend' => 'Možnosti posledných zmien',
-'recentchangestext' => 'Pomocou tejto stránky sledujete posledné úpravy wiki.',
+'recentchanges-summary' => 'Pomocou tejto stránky sledujete posledné úpravy wiki.',
'recentchanges-feed-description' => 'Sledovať posledné úpravy tejto wiki týmto kanálom.',
'recentchanges-label-newpage' => 'Táto úprava vytvorila novú stránku.',
'recentchanges-label-minor' => 'Toto je drobná úprava',
'vector.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Vector */',
'print.css' => '/* Tu umiestnené CSS bude ovplyvňovať tlačový výstup */',
'handheld.css' => '/* Tu umiestnené CSS bude ovplyvňovať prenosné zariadenia vychádzajúceho zo štýlu nastaveného v $wgHandheldStyle */',
+'noscript.css' => '/* Tu umiestnené CSS bude ovplyvňovať používateľov s vypnutým JavaScriptom */',
+'group-autoconfirmed.css' => '/* Tu umiestnené CSS bude ovplyvňovať iba používateľov s overenou emailovou adresou */',
+'group-bot.css' => '/* Tu umiestnené CSS bude ovplyvňovať iba robotov */',
+'group-sysop.css' => '/* Tu umiestnené CSS bude ovplyvňovať iba správcov */',
+'group-bureaucrat.css' => '/* Tu umiestnené CSS bude ovplyvňovať iba byrokratov */',
# Scripts
'common.js' => '/* Tu uvedený JavaScript sa nahrá všetkým používateľom pri každom nahraní stránky. */',
'simple.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Jednoduchý */',
'modern.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Moderný */',
'vector.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom vzhľadu Vector */',
+'group-autoconfirmed.js' => '/* Tu sa nachádzajúci JavaScript sa načíta používateľom s potvrdenou emailovou adresou */',
+'group-bot.js' => '/* Tu sa nachádzajúci JavaScript sa načíta len robotom */',
+'group-sysop.js' => '/* Tu sa nachádzajúci JavaScript sa načíta len správcom */',
+'group-bureaucrat.js' => '/* Tu sa nachádzajúci JavaScript sa načíta len byrokratom */',
# Metadata
'notacceptable' => 'Wiki server nedokáže poskytovať dáta vo formáte, v akom ich váš klient vie čítať.',
'skinname-chick' => 'Kuriatko',
'skinname-simple' => 'Jednoduchý',
'skinname-modern' => 'Moderný',
+'skinname-vector' => 'Vector',
# Patrolling
'markaspatrolleddiff' => 'Označiť ako stráženú',
'nchanges' => '$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb|sprememb}}',
'recentchanges' => 'Zadnje spremembe',
'recentchanges-legend' => 'Možnosti zadnjih sprememb',
-'recentchangestext' => 'Na tej strani lahko spremljajte najnedavnejše spremembe wikija.',
+'recentchanges-summary' => 'Na tej strani lahko spremljajte najnedavnejše spremembe wikija.',
'recentchanges-feed-description' => 'Spremljajte najnovejše spremembe wikija prek tega vira.',
'recentchanges-label-newpage' => 'S tem urejanjem je bila ustvarjena nova stran',
'recentchanges-label-minor' => 'Manjše urejanje',
'backend-fail-writetemp' => 'Ne morem pisati v začasno datoteko.',
'backend-fail-closetemp' => 'Ne morem zapreti začasne datoteke.',
'backend-fail-read' => 'Ne morem brati datoteke $1.',
-'backend-fail-create' => 'Ne morem ustvariti datoteke $1.',
-'backend-fail-maxsize' => 'Ne morem ustvariti datoteke $1, kjer je večja od {{PLURAL:$2|$2 bajta|$2 bajtov}}.',
+'backend-fail-create' => 'Ne morem zapisati datoteke $1.',
+'backend-fail-maxsize' => 'Ne morem zapisati datoteke $1, ker je večja od $2 {{PLURAL:$2|bajta|bajtov}}.',
'backend-fail-readonly' => 'Skladiščno zaledje »$1« je trenutno označeno samo za branje. Podan razlog je: »$2«',
'backend-fail-synced' => 'Datoteka »$1« je v neskladnem stanju z notranjimi skladiščnimi zaledji',
'backend-fail-connect' => 'Ne morem se povezati s skladiščnim zaledjem »$1«.',
'backend-fail-internal' => 'V skladiščnem zaledju »$1« je prišlo do neznane napake.',
'backend-fail-contenttype' => 'Ne morem določiti vrsto vsebine datoteke za shranjevanje pri »$1«.',
'backend-fail-batchsize' => 'Skladiščnemu zaledju je dana vrsta $1 {{PLURAL:$1|datotečne operacije|datotečnih operacij}}; omejitev {{PLURAL:$2|je $2 operacija|sta $2 operaciji|so $2 operacije|je $2 operacij}}.',
+'backend-fail-usable' => 'Ne morem zapisati datoteke $1 zaradi nezadostnih dovoljenj ali manjkajočega imenika/vsebnika.',
# File journal errors
'filejournal-fail-dbconnect' => 'Ne morem se povezati z listovno zbirko podatkov za skladiščno zaledje »$1«.',
'http-curl-error' => 'Napaka pri doseganju URL: $1',
'http-host-unreachable' => 'Ni mogoče doseči URL.',
'http-bad-status' => 'Med zahtevo HTTP je prišlo do težave: $1 $2',
-'http-truncated-body' => 'Prejeli smo samo del telesa zahteve.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Ni možno doseči URL',
);
$specialPageAliases = array(
+ 'Activeusers' => array( 'PërdoruesitAktivë' ),
'Allmessages' => array( 'TëgjithaMesazhet' ),
'Allpages' => array( 'TëgjithaFaqet' ),
'Ancientpages' => array( 'FaqetAntike' ),
'Blockme' => array( 'BllokomMua' ),
'Booksources' => array( 'BurimeteLibrave' ),
'Categories' => array( 'Kategori' ),
+ 'ChangeEmail' => array( 'NdryshoEmail' ),
'ChangePassword' => array( 'NdryshoFjalëkalimin' ),
+ 'ComparePages' => array( 'KrahasoFaqet' ),
'Confirmemail' => array( 'KonfirmoEmail' ),
'Contributions' => array( 'Kontributet' ),
'CreateAccount' => array( 'HapLlogari' ),
$magicWords = array(
'redirect' => array( '0', '#RIDREJTO', '#REDIRECT' ),
+ 'notoc' => array( '0', '__JOTP__', '__NOTOC__' ),
+ 'nogallery' => array( '0', '__JOGALERI__', '__NOGALLERY__' ),
+ 'toc' => array( '0', '__TP__', '__TOC__' ),
+ 'noeditsection' => array( '0', '__JOREDAKTIMSEKSIONI__', '__NOEDITSECTION__' ),
'currentmonth' => array( '1', 'MUAJIMOMENTAL', 'MUAJIMOMENTAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
'currentmonth1' => array( '1', 'MUAJIMOMENTAL1', 'CURRENTMONTH1' ),
'currentmonthname' => array( '1', 'EMRIIMUAJITMOMENTAL', 'CURRENTMONTHNAME' ),
'numberofpages' => array( '1', 'NUMRIFAQEVE', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', 'NUMRIIARTIKUJVE', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', 'NUMRIISKEDAVE', 'NUMBEROFFILES' ),
- 'numberofusers' => array( '1', 'NUMRIPËRDORUESVE', 'NUMBEROFUSERS' ),
+ 'numberofusers' => array( '1', 'NUMRIIPËRDORUESVE', 'NUMRIPËRDORUESVE', 'NUMBEROFUSERS' ),
+ 'numberofactiveusers' => array( '1', 'NUMRIIPËRDORUESVEAKTIVË', 'NUMBEROFACTIVEUSERS' ),
'numberofedits' => array( '1', 'NUMRIREDAKTIMEVE', 'NUMBEROFEDITS' ),
'numberofviews' => array( '1', 'NUMRIISHIKIMEVE', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', 'EMRIFAQES', 'PAGENAME' ),
+ 'namespace' => array( '1', 'HAPËSIRA', 'NAMESPACE' ),
'fullpagename' => array( '1', 'EMRIIPLOTËIFAQES', 'FULLPAGENAME' ),
'fullpagenamee' => array( '1', 'EMRIIPLOTËIFAQESE', 'FULLPAGENAMEE' ),
'subpagename' => array( '1', 'EMRIINËNFAQES', 'SUBPAGENAME' ),
'img_right' => array( '1', 'djathtas', 'right' ),
'img_left' => array( '1', 'majtas', 'left' ),
'img_none' => array( '1', 's\'ka', 'none' ),
- 'img_center' => array( '1', 'qëndër', 'qëndrore', 'center', 'centre' ),
+ 'img_center' => array( '1', 'qendër', 'qendrore', 'center', 'centre' ),
'img_framed' => array( '1', 'i_kornizuar', 'pa_kornizë', 'kornizë', 'framed', 'enframed', 'frame' ),
'img_page' => array( '1', 'faqja=$1', 'faqja $1', 'page=$1', 'page $1' ),
'img_upright' => array( '1', 'lartdjathtas', 'lartdjathtas=$1', 'lartdjathtas $1', 'upright', 'upright=$1', 'upright $1' ),
'img_bottom' => array( '1', 'fund', 'bottom' ),
'img_text_bottom' => array( '1', 'tekst-fund', 'text-bottom' ),
'img_link' => array( '1', 'lidhje=$1', 'link=$1' ),
- 'sitename' => array( '1', 'EMRIIFAQES', 'SITENAME' ),
+ 'sitename' => array( '1', 'EMRIISAJTIT', 'SITENAME' ),
'localurl' => array( '0', 'URLLOKALE', 'LOCALURL:' ),
'server' => array( '0', 'SERVERI', 'SERVER' ),
'servername' => array( '0', 'EMRIISERVERIT', 'SERVERNAME' ),
'grammar' => array( '0', 'GRAMATIKA:', 'GRAMMAR:' ),
+ 'gender' => array( '0', 'GJINIA:', 'GENDER:' ),
'currentweek' => array( '1', 'JAVAMOMENTALE', 'CURRENTWEEK' ),
'plural' => array( '0', 'SHUMËS:', 'PLURAL:' ),
+ 'fullurl' => array( '0', 'URLEPLOTË', 'FULLURL:' ),
'language' => array( '0', '#GJUHA:', '#LANGUAGE:' ),
+ 'numberofadmins' => array( '1', 'NUMRIIADMINISTRUESVE', 'NUMBEROFADMINS' ),
'special' => array( '0', 'speciale', 'special' ),
+ 'hiddencat' => array( '1', '__KATEGORIEFSHEHUR__', '__HIDDENCAT__' ),
+ 'pagesize' => array( '1', 'MADHËSIAEFAQES', 'PAGESIZE' ),
);
$datePreferences = array(
'nchanges' => '$1 {{PLURAL:$1|ndryshim|ndryshime}}',
'recentchanges' => 'Ndryshime së fundmi',
'recentchanges-legend' => 'Zgjedhjet e ndryshimeve momentale',
-'recentchangestext' => 'Ndiqni ndryshime së fundmi tek kjo faqe.',
+'recentchanges-summary' => 'Ndiqni ndryshime së fundmi tek kjo faqe.',
'recentchanges-feed-description' => 'Ndjek ndryshimet më të fundit në wiki tek kjo fushë.',
'recentchanges-label-newpage' => 'Ky redaktim krijoi një faqe të re',
'recentchanges-label-minor' => 'Ky është një editim i vogël',
*/
$namespaceNames = array(
- NS_MEDIA => 'Медија',
+ NS_MEDIA => 'Медиј',
NS_SPECIAL => 'Посебно',
NS_TALK => 'Разговор',
NS_USER => 'Корисник',
'Kategorija' => NS_CATEGORY,
'Razgovor_o_kategoriji' => NS_CATEGORY_TALK,
+ 'Медија' => NS_MEDIA,
'Слика' => NS_FILE,
'Разговор_о_слици' => NS_FILE_TALK,
'МедијаВики' => NS_MEDIAWIKI,
# General errors
'error' => 'Грешка',
'databaseerror' => 'Грешка у бази података',
-'dberrortext' => 'Ð\94оÑ\88ло Ñ\98е до Ñ\81инÑ\82акÑ\81не грешке у бази.
+'dberrortext' => 'Ð\94оÑ\88ло Ñ\98е до Ñ\81инÑ\82акÑ\82иÑ\87ке грешке у бази.
Можда се ради о грешци у софтверу.
Последњи покушај упита је гласио:
<blockquote><tt>$1</tt></blockquote>
унутар функције „<tt>$2</tt>“.
База података је пријавила грешку „<tt>$3: $4</tt>“.',
-'dberrortextcl' => 'Ð\94оÑ\88ло Ñ\98е до Ñ\81инÑ\82акÑ\81не грешке у бази.
+'dberrortextcl' => 'Ð\94оÑ\88ло Ñ\98е до Ñ\81инÑ\82акÑ\82иÑ\87ке грешке у бази.
Последњи покушај упита је гласио:
„$1“
унутар функције „$2“.
'filereadonlyerror' => 'Не могу да изменим датотеку „$1“ јер је ризница „$2“ у режиму за читање.
Администратор који ју је закључао понудио је следеће објашњење: „$3“.',
+'invalidtitle-knownnamespace' => 'Неисправан наслов с именским простором „$2“ и текстом „$3“',
+'invalidtitle-unknownnamespace' => 'Неисправан наслов с именским простором бр. $1 и текстом „$2“',
# Virus scanner
'virus-badscanner' => "Неисправна поставка: непознати скенер за вирусе: ''$1''",
'minoredit' => 'мања измена',
'watchthis' => 'надгледај ову страницу',
'savearticle' => 'Сачувај страницу',
-'preview' => 'Претпреглед',
+'preview' => 'Преглед',
'showpreview' => 'Прикажи претпреглед',
'showlivepreview' => 'Тренутни преглед',
'showdiff' => 'Прикажи измене',
'parser-template-loop-warning' => 'Откривена је петља шаблона: [[$1]]',
'parser-template-recursion-depth-warning' => 'Дубина укључивања шаблона је прекорачена ($1)',
'language-converter-depth-warning' => 'Прекорачена је граница дубине језичког претварача ($1)',
+'node-count-exceeded-category' => 'Странице у којима је прекорачен број чворова',
+'node-count-exceeded-warning' => 'Страница у којој је прекорачен број чворова',
+'expansion-depth-exceeded-category' => 'Странице у којима је прекорачена дубина проширења',
+'expansion-depth-exceeded-warning' => 'Страница у којој је прекорачена дубина проширења',
+'parser-unstrip-loop-warning' => 'Утврђена је петља',
+'parser-unstrip-recursion-limit' => 'Прекорачено је ограничење рекурзије ($1)',
# "Undo" feature
'undo-success' => 'Измена се може вратити.
# Revision feed
'history-feed-title' => 'Историја измена',
-'history-feed-description' => 'Историја измена ове странице',
+'history-feed-description' => 'Историја измена ове странице на викију',
'history-feed-item-nocomment' => '$1 у $2',
'history-feed-empty' => 'Тражена страница не постоји.
Могуће да је обрисана с викија или је преименована.
# Diffs
'history-title' => 'Историја измена за „$1“',
+'difference-title' => 'Разлика између измена странице „$1“',
+'difference-title-multipage' => 'Разлика између страница „$1“ и „$2“',
'difference-multipage' => '(разлике између страница)',
'lineno' => 'Ред $1:',
'compareselectedversions' => 'Упореди изабране измене',
'nchanges' => '$1 {{PLURAL:$1|измена|измене|измена}}',
'recentchanges' => 'Скорашње измене',
'recentchanges-legend' => 'Поставке скорашњих измена',
-'recentchangestext' => 'Пратите скорашње измене на овој страници.',
+'recentchanges-summary' => 'Пратите скорашње измене на овој страници.',
'recentchanges-feed-description' => 'Пратите скорашње измене уз помоћ овог довода.',
'recentchanges-label-newpage' => 'Нова страница',
'recentchanges-label-minor' => 'Мања измена',
# Patrol log
'patrol-log-page' => 'Дневник патролирања',
-'patrol-log-header' => 'Ð\9eво Ñ\98е иÑ\81Ñ\82оÑ\80иÑ\98а пÑ\80егледаних измена.',
+'patrol-log-header' => 'Ð\9eво Ñ\98е дневник паÑ\82Ñ\80олиÑ\80аних измена.',
'log-show-hide-patrol' => '$1 дневник патролирања',
# Image deletion
# Delete conflict
'deletedwhileediting' => "'''Упозорење''': ова страница је обрисана након што сте почели с уређивањем!",
-'confirmrecreate' => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|обриса}} ову страницу након што сте почели да је уређујете, са следећим разлогом:
+'confirmrecreate' => "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|је обрисао}} ову страницу након што сте почели да је уређујете из следећег разлога:
: ''$2''
Потврдите да стварно желите да направите страницу.",
'confirmrecreate-noreason' => 'Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да га уређујете. Потврдите да стварно желите да поново направите ову страницу.',
*/
$namespaceNames = array(
- NS_MEDIA => 'Medija',
+ NS_MEDIA => 'Medij',
NS_SPECIAL => 'Posebno',
NS_TALK => 'Razgovor',
NS_USER => 'Korisnik',
NS_USER_TALK => 'Razgovor_sa_korisnikom',
NS_PROJECT_TALK => 'Razgovor_o_$1',
- NS_FILE => 'Slika',
- NS_FILE_TALK => 'Razgovor_o_slici',
- NS_MEDIAWIKI => 'MedijaViki',
- NS_MEDIAWIKI_TALK => 'Razgovor_o_MedijaVikiju',
+ NS_FILE => 'Datoteka',
+ NS_FILE_TALK => 'Razgovor_o_datoteci',
+ NS_MEDIAWIKI => 'Medijaviki',
+ NS_MEDIAWIKI_TALK => 'Razgovor_o_Medijavikiju',
NS_TEMPLATE => 'Šablon',
NS_TEMPLATE_TALK => 'Razgovor_o_šablonu',
NS_HELP => 'Pomoć',
'Разговор_о_помоћи' => NS_HELP_TALK,
'Категорија' => NS_CATEGORY,
'Разговор_о_категорији' => NS_CATEGORY_TALK,
+
+ 'Medija' => NS_MEDIA,
+ 'Slika' => NS_FILE,
+ 'Razgovor_o_slici' => NS_FILE_TALK,
);
$extraUserToggles = array(
'filereadonlyerror' => 'Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.
Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.',
+'invalidtitle-knownnamespace' => 'Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“',
+'invalidtitle-unknownnamespace' => 'Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“',
# Virus scanner
'virus-badscanner' => "Neispravna postavka: nepoznati skener za viruse: ''$1''",
'note' => "'''Napomena:'''",
'previewnote' => "'''Imajte u vidu da je ovo samo pregled.'''
Vaše izmene još nisu sačuvane!",
+'continue-editing' => 'Nastavi uređivanje',
'previewconflict' => 'Ovaj pregled oslikava kako će tekst u tekstualnom okviru izgledati.',
'session_fail_preview' => "'''Nismo mogli da obradimo vašu izmenu zbog gubitka podataka sesije.'''
Pokušajte ponovo.
'parser-template-loop-warning' => 'Otkrivena je petlja šablona: [[$1]]',
'parser-template-recursion-depth-warning' => 'Dubina uključivanja šablona je prekoračena ($1)',
'language-converter-depth-warning' => 'Prekoračena je granica dubine jezičkog pretvarača ($1)',
+'node-count-exceeded-category' => 'Stranice u kojima je prekoračen broj čvorova',
+'node-count-exceeded-warning' => 'Stranica u kojoj je prekoračen broj čvorova',
+'expansion-depth-exceeded-category' => 'Stranice u kojima je prekoračena dubina proširenja',
+'expansion-depth-exceeded-warning' => 'Stranica u kojoj je prekoračena dubina proširenja',
+'parser-unstrip-loop-warning' => 'Utvrđena je petlja',
+'parser-unstrip-recursion-limit' => 'Prekoračeno je ograničenje rekurzije ($1)',
# "Undo" feature
'undo-success' => 'Izmena se može vratiti.
# Suppression log
'suppressionlog' => 'Istorija sakrivanja',
-'suppressionlogtext' => 'Ispod se nalazi spisak brisanja i blokiranja koji uključuje sadržaj sakriven od administratora. Pogledajte [[Special:BlockList|spisak blokiranih IP adresa]] za pregled važećih zabrana i blokiranja.',
+'suppressionlogtext' => 'Ispod se nalazi spisak brisanja i blokiranja koji uključuje sadržaj sakriven od administratora. Tekuće zabrane i blokiranja možete naći [[Special:BlockList|ovde]].',
# History merging
'mergehistory' => 'Spoji istorije stranica',
# Diffs
'history-title' => 'Istorija izmena za „$1“',
+'difference-title' => 'Razlika između izmena stranice „$1“',
+'difference-title-multipage' => 'Razlika između stranica „$1“ i „$2“',
'difference-multipage' => '(razlike između stranica)',
'lineno' => 'Red $1:',
'compareselectedversions' => 'Uporedi izabrane izmene',
'nchanges' => '$1 {{PLURAL:$1|izmena|izmene|izmena}}',
'recentchanges' => 'Skorašnje izmene',
'recentchanges-legend' => 'Postavke skorašnjih izmena',
-'recentchangestext' => 'Pratite skorašnje izmene na ovoj stranici.',
+'recentchanges-summary' => 'Ovde pratite najskorije izmene na vikiju.',
'recentchanges-feed-description' => 'Pratite skorašnje izmene uz pomoć ovog dovoda.',
'recentchanges-label-newpage' => 'Nova stranica',
'recentchanges-label-minor' => 'Manja izmena',
'allpages-bad-ns' => '{{SITENAME}} nema imenski prostor „$1“.',
'allpages-hide-redirects' => 'Sakrij preusmerenja',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Gledate keširanu verziju ove stranice, koja može biti stara i do $1.',
+'cachedspecial-viewing-cached-ts' => 'Gledate keširanu verziju ove stranice, koja može da se razlikuje od trenutne.',
+'cachedspecial-refresh-now' => 'Pogledaj najnoviju.',
+
# Special:Categories
'categories' => 'Kategorije',
'categoriespagetext' => '{{PLURAL:$1|Sledeća kategorija sadrži|Sledeće kategorije sadrže}} stranice ili datoteke.
'badipaddress' => 'Neispravna IP adresa',
'blockipsuccesssub' => 'Blokiranje je uspelo',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran}}.<br />
-Pogledajte [[Special:BlockList|spisak blokiranih IP adresa]] za pregled blokiranja.',
+Blokiranja možete da pogledate [[Special:BlockList|ovde]].',
'ipb-blockingself' => 'Ovom radnjom ćete blokirati sebe! Jeste li sigurni da to želite?',
'ipb-confirmhideuser' => 'Upravo ćete blokirati korisnika s uključenom mogućnošću „sakrij korisnika“. Ovim će korisničko ime biti sakriveno u svim spiskovima i izveštajima. Želite li to da uradite?',
'ipb-edit-dropdown' => 'Uredi razloge blokiranja',
'reblock-logentry' => '{{GENDER:|je promenio|je promenila|je promenio}} podešavanja za blokiranje {{GENDER:$1|korisnika|korisnice|korisnika}} [[$1]] s rokom isteka od $2 ($3)',
'blocklogtext' => 'Ovo je dnevnik blokiranja i deblokiranja korisnika.
Automatski blokirane IP adrese nisu navedene.
-Pogledajte [[Special:BlockList|spisak blokiranih IP adresa]].',
+Tekuće zabrane i blokiranja možete naći [[Special:BlockList|ovde]].',
'unblocklogentry' => '{{GENDER:|je deblokirao|je deblokirala|je deblokirao}} „$1“',
'block-log-flags-anononly' => 'samo anonimni korisnici',
'block-log-flags-nocreate' => 'onemogućeno otvaranje naloga',
'version-software' => 'Instalirani softver',
'version-software-product' => 'Proizvod',
'version-software-version' => 'Verzija',
+'version-entrypoints' => 'Adrese ulazne tačke',
+'version-entrypoints-header-entrypoint' => 'Ulazna tačka',
+'version-entrypoints-header-url' => 'Adresa',
# Special:FilePath
'filepath' => 'Putanja datoteke',
'api-error-uploaddisabled' => 'Otpremanje je onemogućeno na ovom vikiju.',
'api-error-verification-error' => 'Datoteka je oštećena ili ima neispravan nastavak.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunde|sekundi}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minut|minuta|minuta}}',
+'duration-hours' => '$1 {{PLURAL:$1|sat|sata|sati}}',
+'duration-days' => '$1 {{PLURAL:$1|dan|dana|dana}}',
+'duration-weeks' => '$1 {{PLURAL:$1|nedelja|nedelje|nedelja}}',
+'duration-years' => '$1 {{PLURAL:$1|godina|godine|godina}}',
+'duration-decades' => '$1 {{PLURAL:$1|decenija|decenije|decenija}}',
+'duration-centuries' => '$1 {{PLURAL:$1|vek|veka|vekova}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenijum|milenijuma|milenijuma}}',
+
);
* @author Kandar
* @author Meursault2004
* @author Mssetiadi
+ * @author Reedy
* @author Urhixidur
* @author לערי ריינהארט
*/
* Sasaran nudipeungpeuk : \$7
Anjeun bisa nepungan \$1 atawa salasahiji [[{{MediaWiki:Grouppage-sysop}}|kuncén]] séjén pikeun nyawalakeun hal ieu.
-'''<u>Catet</u>''': yén anjeun teu bisa maké fungsi \"surélékan pamaké ieu\" mun anjeun teu ngadaptarkeun alamat surélék nu sah kana [[Special:Preferences|préferénsi pamaké]] anjeun.
+'''Catet''': yén anjeun teu bisa maké fungsi \"surélékan pamaké ieu\" mun anjeun teu ngadaptarkeun alamat surélék nu sah kana [[Special:Preferences|préferénsi pamaké]] anjeun.
Alamat IP anjeun \$3 jeung ID na #\$5.
Lampirkeun informasi ieu dina unggal ''query'' anjeun.",
'nchanges' => '$1 {{PLURAL:$1|parobahan|parobahan}}',
'recentchanges' => 'Anyar robah',
'recentchanges-legend' => 'Pilihan parobahan anyar',
-'recentchangestext' => 'Lacak parobahan ka wiki panganyarna na kaca ieu.',
+'recentchanges-summary' => 'Lacak parobahan ka wiki panganyarna na kaca ieu.',
'recentchanges-feed-description' => 'Manggihan parobahan panganyarna dina wiki di asupan ieu.',
'recentchanges-label-newpage' => 'Ieu parobahan bakal ngahasillkeun kaca anyar',
'recentchanges-label-minor' => 'Ieu éditan minor',
# Diffs
'history-title' => 'Versionshistorik för "$1"',
-'difference-title' => 'Skillnader mellan revideringar av "$1"',
+'difference-title' => 'Skillnad mellan versioner av "$1"',
'difference-title-multipage' => 'Skillnader mellan sidorna "$1" och "$2"',
'difference-multipage' => '(Skillnad mellan sidor)',
'lineno' => 'Rad $1:',
'nchanges' => '$1 {{PLURAL:$1|ändring|ändringar}}',
'recentchanges' => 'Senaste ändringarna',
'recentchanges-legend' => 'Alternativ för senaste ändringarna',
-'recentchangestext' => 'Följ de senaste ändringarna i wikin på denna sida.',
+'recentchanges-summary' => 'Följ de senaste ändringarna i wikin på denna sida.',
'recentchanges-feed-description' => 'Följ de senaste ändringarna i wikin genom den här matningen.',
'recentchanges-label-newpage' => 'Denna redigering skapade en ny sida',
'recentchanges-label-minor' => 'Detta är en mindre ändring',
'nchanges' => '{{PLURAL:$1|ஓர் மாற்றம்|$1 மாற்றங்கள்}}',
'recentchanges' => 'அண்மைய மாற்றங்கள்',
'recentchanges-legend' => 'அண்மைய மாற்றங்களின் தேர்வுகள்',
-'recentchangestext' => 'இந்த விக்கிக்கு மிக அண்மையில் செய்யப்பட்ட மாற்றங்களை, இந்தப் பக்கத்தில் காணலாம்.',
+'recentchanges-summary' => 'இந்த விக்கிக்கு மிக அண்மையில் செய்யப்பட்ட மாற்றங்களை, இந்தப் பக்கத்தில் காணலாம்.',
'recentchanges-feed-description' => 'இவ்வுள்ளீட்டில் இந்த விக்கியில் செய்யப்பட்ட் மிக அண்மைய மாற்றங்கள் கவனிக்கப்படுகின்றன.',
'recentchanges-label-newpage' => 'இந்தத் தொகுப்பு ஒரு புதிய பக்கத்தை உருவாக்கியுள்ளது',
'recentchanges-label-minor' => 'இது ஒரு சிறு தொகுப்பு',
'nchanges' => '$1 {{PLURAL:$1|ಬದಲಾವಣೆ|ಬದಲಾವಣೆಲು}}',
'recentchanges' => 'ಇಂಚಿಪದ ಬದಲಾವಣೆಲು',
'recentchanges-legend' => 'ಇಂಚಿಪದ ಬದಲಾವಣೆಲು ಆಯ್ಕೆಲು',
-'recentchangestext' => 'ಈ ವಿಕಿಟ್ ಇಂಚಿಪ್ಪ ಆತಿನ ಬದಲಾವಣೆನ್ ಟ್ರಾಕ್ ಮಲ್ಪುಲೆ',
+'recentchanges-summary' => 'ಈ ವಿಕಿಟ್ ಇಂಚಿಪ್ಪ ಆತಿನ ಬದಲಾವಣೆನ್ ಟ್ರಾಕ್ ಮಲ್ಪುಲೆ',
'recentchanges-feed-description' => 'ಈ ಫೀಡ್’ಡ್ ವಿಕಿಕ್ ಇಂಚಿಪ್ಪ ಆತಿನಂಚಿನ ಬದಲಾವಣೆಲೆನ್ ಟ್ರ್ಯಾಕ್ ಮಲ್ಪುಲೆ.',
'recentchanges-label-newpage' => 'ಇರ್ನ ಈ ಬದಲಾವಣೆ ಪೊಸ ಪುಟೊನು ಸುರು ಮಲ್ಪುಂಡು',
'recentchanges-label-minor' => 'ಉಂದು ಎಲ್ಯ ಬದಲಾವಣೆ',
'nchanges' => '$1 {{PLURAL:$1|การแก้ไข|การแก้ไข}}',
'recentchanges' => 'ปรับปรุงล่าสุด',
'recentchanges-legend' => 'ตัวเลือกปรับปรุงล่าสุด',
-'recentchangestext' => 'ในหน้านี้เป็นรายการล่าสุดที่มีการปรับปรุง',
+'recentchanges-summary' => 'ในหน้านี้เป็นรายการล่าสุดที่มีการปรับปรุง',
'recentchanges-feed-description' => 'ฟีดนี้แสดงการเปลี่ยนแปลงล่าสุด',
'recentchanges-label-newpage' => 'การแก้ไขนี้เป็นการสร้างหน้าใหม่',
'recentchanges-label-minor' => 'เป็นการแก้ไขเล็กน้อย',
* @ingroup Language
* @file
*
+ * @author Erdemaslancan
* @author Ganbarzada
* @author Tuzkozbir
* @author Гусейн
*/
+$namespaceNames = array(
+ NS_MEDIA => 'Medja',
+ NS_SPECIAL => 'Xususi',
+ NS_TALK => 'Nopegət',
+ NS_USER => 'Okoədə',
+ NS_USER_TALK => 'Okoədəj_nopegət',
+ NS_PROJECT_TALK => '$1_Nopegətəti',
+ NS_FILE => 'Fajl',
+ NS_FILE_TALK => 'Fajli_nopegət',
+ NS_MEDIAWIKI => 'MediaWiki',
+ NS_MEDIAWIKI_TALK => 'MediaWiki_nopegət',
+ NS_TEMPLATE => 'Numunə',
+ NS_TEMPLATE_TALK => 'Numunə_nopegət',
+ NS_HELP => 'Koməg',
+ NS_HELP_TALK => 'Koməgi_nopegət',
+ NS_CATEGORY => 'Tispir',
+ NS_CATEGORY_TALK => 'Tispiron_nopegət',
+);
+
$messages = array(
# User preference toggles
'tog-underline' => 'Линки жинтоно ријә быкәш:',
'tog-numberheadings' => 'Автоматик башлығон нумрәләмиш быкә',
'tog-showtoc' => 'Мындәриҹоти сијоһи нишо быдә (3 сәрловһәсә веј быә сәһифон)',
'tog-watchcreations' => 'Зијод кардеј чымы офәјә быә сәһифон бә ноғо доә сијоһи',
+'tog-watchdefault' => 'Зијод кардеј демы дәгиш кардә быә сәһифон бә ноғо доә сијоһи',
+'tog-watchmoves' => 'Зијод кардеј ном дәгиш кардә быә сәһифон бә ноғо доә сијоһи',
+'tog-watchdeletion' => 'Зијод кардеј сәһифон комон аз рәдд кардәме бә ноғо доә сијоһи',
'tog-enotifwatchlistpages' => 'Ноғо доә сијоһиәдә сәһифон кејнә дәгиш бәбен бәмы е-номә бывығанд',
'tog-watchlisthideown' => 'Чымы дәгишон ноғо доә сијһиәдә нијо кардеј',
+'tog-watchlisthidebots' => 'Нијо кардеј ботон дәгишон ноғо доә сијоһиәдә',
'tog-watchlisthideminor' => 'Нијо кардеј гәдә дәгишон ноғо доә сијоһиәдә',
# Dates
'viewtalkpage' => 'Мызокирә дијә кардеј',
'otherlanguages' => 'Ҹо зывононәдә',
'redirectedfrom' => '($1 чыјо унвон дәгиш кардә быә)',
+'redirectpagesub' => 'Увони дәгиш кардә сәһифәје',
'lastmodifiedat' => 'Ын сәһифә охонә кәрә дәгиш беј: $2, $1.',
'protectedpage' => 'Мыдофијә кардә быә сәһифә',
'jumpto' => 'Дәвардеј бә:',
'nchanges' => '$1 {{PLURAL:$1|дәгиши|дәгишон}}',
'recentchanges' => 'Ән нујә дәгишон',
'recentchanges-legend' => 'Ән нујә дәгишон печыније',
-'recentchangestext' => 'Тәмшо быкән бы сәһифәдә че вики охоминә дәгишон нишо доә быән.',
+'recentchanges-summary' => 'Тәмшо быкән бы сәһифәдә че вики охоминә дәгишон нишо доә быән.',
'recentchanges-feed-description' => 'Ым каналәдә быә охонә дәгишон дығғәтәдә огәт.',
'recentchanges-label-newpage' => 'Де ым дәгиши тожә сәһифә сохтә бе',
'recentchanges-label-minor' => 'Ым гадә дәгишије',
# Undelete
'undeletelink' => 'чәшику дәвонијеј/бәрпо кардеј',
'undeleteviewlink' => 'тәмшо кардеј',
+'undelete-search-submit' => 'Нәве',
+'undelete-show-file-submit' => 'Бәле',
# Namespace form on various pages
'namespace' => 'Номон мәкон:',
'tooltip-undo' => 'Дәғандә дәгиши рәдд кардеј ијән "сыфтәнә нишо дој" окардеј, де ләғви сәбәби нышон дој имкони.',
'tooltip-summary' => 'Кыртә тәсвир бынывыштән',
+# Info page
+'pageinfo-header-edits' => 'Сәрост кардеј',
+'pageinfo-header-views' => 'Тәмшо',
+'pageinfo-subjectpage' => 'Сәһифә',
+
# Browsing diffs
'previousdiff' => '← Навынәни дәгиши',
'nextdiff' => 'Думотоно шә дәгиши →',
'svg-long-desc' => 'SVG фајл, номинәләдә $1 × $2 пиксел, фајли памјә: $3',
'show-big-image' => 'Тикәјән јолә кејфијјәтинә шикил',
+# Special:NewFiles
+'ilsubmit' => 'Нәве',
+
# Bad image list
'bad_image_list' => 'Формат бәпе быбу жыго:
* gpslongitude
* gpsaltitude',
+'exif-gaincontrol-0' => 'Ни',
+
+'exif-saturation-0' => 'Ади',
+
# External editor support
'edit-externally' => 'Редактә кардеј ым фајли де заһири програм',
'edit-externally-help' => '(Бо мыффәссәлә мәлумотон бә [//www.mediawiki.org/wiki/Manual:External_editors дәрсәвон бо сохтәј] дијә быкан)',
# Core parser functions
'duplicate-defaultsort' => '\'\'\'Дыггәт:\'\'\' Еһтимал кардә быә "$2" классификасијә ачари нафконә "$1" классификасијә ачари етиборсоз кардә',
+# Special:Version
+'version-entrypoints-header-url' => 'URL',
+
+# Special:FilePath
+'filepath-page' => 'Фајл:',
+'filepath-submit' => 'Давард',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch-submit' => 'Нәве',
+
# Special:SpecialPages
'specialpages' => 'Хысусиә сәһифон',
* @author Myildirim2007
* @author Reedy
* @author Runningfridgesrule
+ * @author Sadrettin
* @author Srhat
* @author Stultiwikia
* @author Suelnur
'note' => "'''Not: '''",
'previewnote' => "'''Bunun yalnızca bir ön izleme olduğunu unutmayın.'''
Yaptığınız değişiklikler henüz kaydedilmedi!",
+'continue-editing' => 'Düzenlemeye devam et',
'previewconflict' => 'Bu önizleme metin düzenleme kutucuğunun üstünde, maddenin eğer değişikliklerinizi kaydetmeyi seçerseniz nasıl görüneceğini yansıtır.',
'session_fail_preview' => 'Özür dileriz. Oturum açılması ile ilgili veri kaybından kaynaklı değişikliğinizi kaydedemedik. Lütfen tekrar deneyiniz. Eğer bu yöntem işe yaramazsa oturumu kapatıp tekrar sisteme geri giriş yapınız.',
'session_fail_preview_html' => "'''Üzgünüz! Oturum verisinin kaybolmasından dolayı düzenlemenizi işleme geçiremeyeceğiz.'''
'nchanges' => '$1 {{PLURAL:$1|değişiklik|değişiklik}}',
'recentchanges' => 'Son değişiklikler',
'recentchanges-legend' => 'Son değişiklikler seçenekleri',
-'recentchangestext' => 'Yapılan en son değişiklikleri bu sayfadan izleyin.',
+'recentchanges-summary' => 'Yapılan en son değişiklikleri bu sayfadan izleyin.',
'recentchanges-feed-description' => "Bu beslemede, viki'de yapılan en son değişiklikleri takip edin.",
'recentchanges-label-newpage' => 'Bu değişiklik yeni bir sayfa oluşturdu',
'recentchanges-label-minor' => 'Bu küçük bir değişiklik',
'exif-subjectnewscode' => 'Konu kodu',
'exif-event' => 'Adı geçen olay',
'exif-personinimage' => 'Adı geçen kişi',
+'exif-originalimageheight' => 'Resmin kırpılmadan önceki yükseliği',
+'exif-originalimagewidth' => 'Resmin kırpılmadan önceki genişliği',
# EXIF attributes
'exif-compression-1' => 'Sıkıştırılmamış',
'api-error-mustbeposted' => 'İç hata: İstek HTTP POST gerektiriyor.',
'api-error-nomodule' => 'İç hata: Yükleme modülü ayarı yapılmadı.',
'api-error-ok-but-empty' => 'İç hata: Sunucu yanıt vermiyor.',
+'api-error-overwrite' => 'Varolan dosyanın üzerine yazmaya izin verilmiyor.',
'api-error-stashfailed' => 'İç hata: Sunucu, geçici dosyaları kaybetti.',
'api-error-unclassified' => 'Bilinmeyen bir hata oluştu.',
'api-error-unknown-code' => 'Bilinmeyen hata: "$1"',
'api-error-unknown-warning' => 'Bilinmeyen uyarı: $1',
'api-error-unknownerror' => 'Bilinmeyen hata: "$1".',
'api-error-uploaddisabled' => 'Yükleme bu vikide devre dışı bırakılmıştır.',
+'api-error-verification-error' => 'Dosya bozuk veya yanlış uzantıya sahip olabilir.',
);
'tog-enotifminoredits' => 'ndzurhumele e-mail loko ku endleka mindzulamiso leyi ntsongo',
'tog-enotifrevealaddr' => 'Paluxa e-mail yamina eka mapapila lawa ndzimarhumelaka',
'tog-shownumberswatching' => 'Komba ntsengo wa vatirhisi lava hlaleleke tluka',
+'tog-externaleditor' => 'Tirhisa xilulamisi xalehandle hikukongoma (Nhlawulo lowu i wavatirhisi lavangani ntokoto ntsena, wu lava ku cinca kokarhi eka khompuyuta yawena. [//www.mediawiki.org/wiki/Manual:External_editors vuxokoxoko hi mhakaleyi.])',
+'tog-externaldiff' => 'Tirhisa phurogiremi yalehandle hikukongoma (Nhlawulo lowu i wavatirhisi lavangani ntokoto ntsena, wu lava ku cinca kokarhi eka khompuyuta yawena. [//www.mediawiki.org/wiki/Manual:External_editors vuxokoxoko hi mhakaleyi.])',
'tog-forceeditsummary' => 'Ndzivutisisi loko ndzinga hoxi nkomiso wa ndzulamiso lowu ndzi wu endleke',
'tog-watchlisthideown' => 'Tumbeta mindzulamiso ya mina eka leswi ndzi swi languteke',
'tog-watchlisthidebots' => 'Tumbeta mindzulamiso ya rhobhoti eka leswi ndzi swi languteke',
'tog-watchlisthideminor' => 'Tumbeta mindzulamiso leyi tsongo eka leswi ndzi swi languteke',
'tog-watchlisthideliu' => 'Tumbeta mindzulamiso ya vatirhisiwa lava ngheneke eka leswi ndzi swi languteke',
'tog-watchlisthideanons' => 'Tumbeta mindzulamiso ya vatirhisiwa lavanga tivekiki eka leswi ndzi swi languteke',
+'tog-watchlisthidepatrolled' => 'Tumbeta mindzulamiso leyi languteriweke eka leswilangutiweke',
'tog-ccmeonemails' => "Ndzirhumele khopi ya ti e-mail leti ndzi ti rhumelaka van'wana",
+'tog-showhiddencats' => 'Komba mintlawa leyi tumbetiweke',
'underline-always' => 'Nkarhi hinkwawo',
'underline-never' => "Swinga endleki ni kan'we",
'category-media-header' => 'Matluka ya xifaniso kumbe mpfumawulo eka ntlawa wa "$1"',
'category-empty' => "''Ntlawa lowu eka nkarhi wa sweswi, wuhava matluka kumbe swifaniso.''",
'hidden-categories' => '{{PLURAL:$1|Ntlawa lowu tumbetiweke|Mintlawa leyi tumbetiweke}}',
+'hidden-category-category' => 'Mintlawa leyi tumbetiweke',
'category-subcat-count' => '{{PLURAL:$2|Ntlawa lowu wukhome mintlawa-ntsongo leyi landzelaka.|Ntlawa lowu wuni {{PLURAL:$1|ntlwa-ntsongo|$1 wa mintlaw-ntsongo}}, eka $2 wa mintlawa-ntsongo.}}',
+'category-subcat-count-limited' => 'Ntlawa lowu wuna {{PLURAL:$1|ntlawa-ntsongo lowu|$1 mintlawa-ntsongo leyi}} landzelaka.',
'category-article-count' => '{{PLURAL:$2|Ntlawa lowu wukhome matluka lamalandzelaka ntsena.| {{PLURAL:$1|Tluka leri ri le|$1 matluka lawa male}} ndzeni ka ntlawa lowu, eka $2 wamintlawa.}}',
+'category-article-count-limited' => '{{PLURAL:$1|Tluka leri rile|$1 Matluka lawa male}} ndzeni ka ntlawa lowu.',
'category-file-count' => '{{PLURAL:$2|Ntlawa lowu wukhome matluka lamalandzelaka ntsena.| {{PLURAL:$1|Tluka leri ri le|$1 matluka lawa male}} ndzeni ka ntlawa lowu, eka $2 wamintlawa.}}',
+'category-file-count-limited' => '{{PLURAL:$1|Fayili leyi yile|$1 Tifayili leti tile}} ndzeni ka ntlawa lowu.',
'listingcontinuesabbrev' => 'Mahlwe.',
'noindex-category' => 'Matluka lama kayivelaka xikombandlela xa tinhlokomhaka',
+'broken-file-category' => 'Matluka lamangana minkhwekelo ya tifayili leyi tshovekeke',
'about' => 'Timhaka hi',
'article' => 'Matluka lama tsariweke',
'vector-action-delete' => 'Sula',
'vector-action-move' => 'Yi sa kunwana',
'vector-action-protect' => 'Sirhelela',
+'vector-action-undelete' => 'Cinca kusula',
+'vector-action-unprotect' => 'Cinca kusirhelela',
'vector-view-create' => 'Tumbuluxa',
'vector-view-edit' => 'Lulamisa',
'vector-view-history' => 'Languta matimu',
'searcharticle' => 'Nghena',
'history' => 'Matimu yaTluka',
'history_short' => 'Matimu',
+'updatedmarker' => 'leswi lunghisiweke kusukela loko nihetelela nxaxamelo lowu',
'printableversion' => 'Vona Ngangliso',
'permalink' => 'Xithlavinyeti xa nkarhi hinkwawo',
+'print' => 'Gandlisa',
'edit' => 'Lulamisa',
'create' => 'Tumbuluxa',
'editthispage' => 'Lulamisa Tluka leri',
'create-this-page' => 'Tumbuluxa tluka leri',
'delete' => 'Sula',
'deletethispage' => 'Sula tluka leri',
+'undelete_short' => 'Cinca kusula {{PLURAL:$1|ndzulamiso|$1 mindzulamiso}}',
'viewdeleted_short' => 'Vona {{PLURAL:$1|ndzulamiso lowu suriweke|$1 mindzulamiso leyi suriweke}}',
'protect' => 'Sirhelela',
'protect_change' => 'Cinca',
'protectthispage' => 'Sirhelela tluka leri',
+'unprotect' => 'Cinca kusirhelela',
+'unprotectthispage' => 'Cinca kusirhelela tluka leri',
'newpage' => 'Tluka rintswa',
+'talkpage' => 'Burisana hi tluka leri',
'talkpagelinktext' => 'Mbulavulo',
'specialpage' => 'Tluka ro hlawuleka',
'personaltools' => "Switirhisi swa n'wini",
+'postcomment' => 'Xiyenge xintswa',
'talk' => 'Mbulavuriswano',
'views' => 'Kulanguteka',
'toolbox' => 'Bokisi ra switirhisiwa',
+'userpage' => 'Vona tluka ramutirhisi',
+'projectpage' => 'Vona tluka ra phurojeki',
+'imagepage' => 'Vona tluka ra fayili',
+'mediawikipage' => 'Vona tluka ra hungu',
+'templatepage' => 'Vona tluka ra xivumbiwa-ntirho',
+'viewhelppage' => 'Vona tluka ra mpfuno',
+'categorypage' => 'Vona tluka ra ntlawa',
+'viewtalkpage' => 'Vona bulo',
'otherlanguages' => "Hi ti ndzimi tin'wana",
'redirectedfrom' => '(Ritlerisewe kusuka e $1)',
'redirectpagesub' => 'Tluka ro kongomisa',
'lastmodifiedat' => 'Tluka leri rihetelele ku lulamisiwa hi $1, nkarhi kuri $2.',
+'protectedpage' => 'Tluka leri sirheleriweke',
'jumpto' => 'Tlulela eka:',
'jumptonavigation' => 'Xikomba-ndlela',
'jumptosearch' => 'Lava',
+'pool-errorunknown' => 'xiphiqo xoka xingativeki',
# 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' => 'ta {{SITENAME}}',
'toc' => 'Leswinga ndzeni',
'showtoc' => 'Kombisa',
'hidetoc' => 'Tumbeta',
+'collapsible-collapse' => 'Tsongahata',
+'collapsible-expand' => 'Ndlandlamuxa',
'thisisdeleted' => 'Langutisa kumbe Thlerisela $1?',
'viewdeleted' => 'Langutisa $1?',
'restorelink' => '{{PLURAL:$1|ndzulamiso lowu suriweke|$1 mindzulamiso leyi suriweke}}',
# Main script and global functions
'nosuchaction' => 'Kuhava xiendlo xo tano',
-'nosuchactiontext' => 'Xikombelo xa URL a xitwisisiwi hi wiki',
+'nosuchactiontext' => 'Xikombelo xa URL a xitwisisiwi hi wiki.
+Ungava uhoxise kupeleta, kumbe u landze nkhwekelo lowu hoxeke.
+Xiphiqo lixe xingava xikomba xigalana eka software ya {{SITENAME}}.',
'nosuchspecialpage' => 'Ku hava Tluka rero rohlawuleka',
'nospecialpagetext' => '<strong>U kombele tluka ro hlawuleka ro ka ri nga ri kona.</strong>
'readonly_lag' => 'The database has been automatically locked while the slave database servers catch up to the master',
'internalerror' => 'Xihoxo xa le ndzeni',
'internalerror_info' => 'Internal error: $1',
+'fileappenderrorread' => 'Hitsandzeke ku hlaya "$1" eku lulamiseni loku.',
+'fileappenderror' => 'Hintsndzeke ku lulamisa "$1" leswaku yiva "$2".',
'filecopyerror' => 'Could not copy file "$1" to "$2".',
'filerenameerror' => 'Could not rename file "$1" to "$2".',
'filedeleteerror' => 'Could not delete file "$1".',
'badarticleerror' => 'This action cannot be performed on this page.',
'cannotdelete' => 'Could not delete the page or file specified.
It may have already been deleted by someone else.',
+'cannotdelete-title' => 'Tluka "$1", ari suleki',
'badtitle' => 'Bad title',
'badtitletext' => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
It may contain one or more characters which cannot be used in titles.',
'nav-login-createaccount' => 'Pfula unghena / Tumbuluxa akhawunti',
'loginprompt' => 'U fanele ku pfumelela swipfuneti leswaku u pfula unghena eka {{SITENAME}}.',
'userlogin' => 'Pfula unghena / Tumbuluxa akhawunti',
+'userloginnocreate' => 'Pfula unghena',
'logout' => 'Pfala u famba',
'userlogout' => 'Pfala u famba',
'nologin' => 'Xana upfumala akhawunti? $1.',
'gotaccount' => 'Xna una akhawunti hi khale? $1.',
'gotaccountlink' => 'Pfula unghena',
'userlogin-resetlink' => 'Xana u rivele vuxokoxoko bya wena byo pfula unghena?',
+'createaccountreason' => 'Xivangelo:',
'loginsuccess' => "'''Ule ndzeni ka {{SITENAME}} tani hi \"\$1\".'''",
'mailmypassword' => 'Rhumela vito-mpfungulo lerintwsa',
'loginlanguagelabel' => 'Ririmi: $1',
'nchanges' => '$1 {{PLURAL:$1|wa ndzulamiso|wa mindzulamiso}}',
'recentchanges' => 'Ku cinca ka sweswi-nyana',
'recentchanges-legend' => 'Tindlela to langutisa ku cinca ka sweswinyana',
-'recentchangestext' => 'Landzelela mindzulamiso ya sweswinyana ya wiki leyi eka tluka leri.',
+'recentchanges-summary' => 'Landzelela mindzulamiso ya sweswinyana ya wiki leyi eka tluka leri.',
'recentchanges-feed-description' => 'Landzelela mindzulamiso ya sweswinyana eka wiki leyi hi xiphameri-hungu lexi.',
'recentchanges-label-newpage' => 'Ndzulamiso lowu wu tumbuluxe tluka rintswa',
'recentchanges-label-minor' => 'Lowu i ndzulamiso wu tsongo',
'nchanges' => '$1 {{PLURAL:$1|өскерлиишкин}}',
'recentchanges' => 'Амгы өскерлиишкиннер',
'recentchanges-legend' => 'Амгы өскерлиишкиннерниң эдиглери',
-'recentchangestext' => 'Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.',
+'recentchanges-summary' => 'Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.',
'recentchanges-feed-description' => 'Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.',
'recentchanges-label-newpage' => 'Бо өскерлиишкин чаа арынны чогааткан.',
'recentchanges-label-minor' => 'Бо өскерлиишкин бичии-дир',
* @author Sodmy
* @author Urhixidur
* @author VolodymyrF
+ * @author Vox
* @author Yuriy Apostol
* @author Дар'я Козлова
* @author Тест
# Suppression log
'suppressionlog' => 'Журнал приховувань',
-'suppressionlogtext' => 'Ð\9dижÑ\87е наведений Ñ\81пиÑ\81ок вилÑ\83Ñ\87енÑ\8c Ñ\82а блокÑ\83ванÑ\8c, Ñ\8fкÑ\96 Ñ\81Ñ\82оÑ\81Ñ\83Ñ\8eÑ\82Ñ\8cÑ\81Ñ\8f маÑ\82еÑ\80Ñ\96алÑ\96в, пÑ\80иÑ\85ованиÑ\85 від адміністраторів.
-У [[Special:BlockList|Ñ\81пиÑ\81кÑ\83 блокÑ\83ванÑ\8c]] можна пеÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\81пиÑ\81ок поточних блокувань.',
+'suppressionlogtext' => 'Ð\9dижÑ\87е наведено Ñ\81пиÑ\81ок вилÑ\83Ñ\87енÑ\8c Ñ\82а блокÑ\83ванÑ\8c, вклÑ\8eÑ\87аÑ\8eÑ\87и маÑ\82еÑ\80Ñ\96али, пÑ\80иÑ\85ованÑ\96 від адміністраторів.
+Ð\94ивÑ\96Ñ\82Ñ\8cÑ\81Ñ\8f [[Special:BlockList|Ñ\81пиÑ\81ок блокÑ\83ванÑ\8c]] длÑ\8f пеÑ\80еглÑ\8fдÑ\83 поточних блокувань.',
# History merging
'mergehistory' => "Об'єднання історій редагувань",
# Diffs
'history-title' => 'Історія змін сторінки «$1»',
+'difference-title' => 'Відмінності між версіями «$1»',
+'difference-title-multipage' => 'Відмінності між сторінками «$1» і «$2»',
'difference-multipage' => '(Різниця між сторінками)',
'lineno' => 'Рядок $1:',
'compareselectedversions' => 'Порівняти вибрані версії',
'nchanges' => '$1 {{PLURAL:$1|зміна|зміни|змін}}',
'recentchanges' => 'Нові редагування',
'recentchanges-legend' => 'Налаштування нових редагувань',
-'recentchangestext' => 'На цій сторінці показані останні зміни на сторінках {{grammar:genitive|{{SITENAME}}}}.',
+'recentchanges-summary' => 'На цій сторінці показані останні зміни на сторінках {{grammar:genitive|{{SITENAME}}}}.',
'recentchanges-feed-description' => 'Відстежувати останні зміни у вікі в цьому потоці.',
'recentchanges-label-newpage' => 'Цим редагуванням створена нова сторінка',
'recentchanges-label-minor' => 'Це незначна зміна',
'backend-fail-writetemp' => 'Не вдалося записати до тимчасового файлу.',
'backend-fail-closetemp' => 'Не вдалося закрити тимчасовий файл.',
'backend-fail-read' => 'Не вдалося прочитати файл $1.',
-'backend-fail-create' => 'Не вдалося створити файл $1.',
-'backend-fail-maxsize' => 'Неможливо створити файл $1, бо він більший, ніж {{PLURAL:$2|$2 байт|$2 байти|$2 байтів}}.',
+'backend-fail-create' => 'Не вдалося зберегти файл $1.',
+'backend-fail-maxsize' => 'Неможливо зберегти файл $1, бо він більший, ніж {{PLURAL:$2|$2 байт|$2 байти|$2 байтів}}.',
'backend-fail-readonly' => 'Інтерфейс сховища "$1" зараз доступний тільки для читання. Причина: "$2"',
'backend-fail-synced' => 'Файл "$1" у внутрішньому сховищі рушія перебуває в неузгодженому стані',
'backend-fail-connect' => 'Неможливо підключитися до сховища рушія "$1".',
'badipaddress' => 'IP-адреса записана в невірному форматі, або користувача з таким іменем не існує.',
'blockipsuccesssub' => 'Блокування проведено',
'blockipsuccesstext' => '[[Special:Contributions/$1|«$1»]] заблоковано.<br />
-Див. [[Special:BlockList|список заблокованих IP-адрес]].',
+Див. [[Special:BlockList|список заблокованих IP-адрес]] для перегляду блокувань.',
'ipb-blockingself' => 'Ви збираєтеся заблокувати себе! Ви дійсно бажаєте це зробити?',
'ipb-confirmhideuser' => "Ви збираєтеся заблокувати користувача з опцією приховання імені. Це вилучить його ім'я з усіх списків та журналів. Ви точно хочете це зробити?",
'ipb-edit-dropdown' => 'Редагувати причини блокувань',
'nchanges' => '$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}',
'recentchanges' => 'حالیہ تبدیلیاں',
'recentchanges-legend' => 'اِختیاراتِ حالیہ تبدیلیاں',
-'recentchangestext' => 'اس صفحے پر ویکی میں ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کیجیۓ۔',
+'recentchanges-summary' => 'اس صفحے پر ویکی میں ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کیجیۓ۔',
'recentchanges-feed-description' => 'اس خورد میں ویکی پر ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کیجیۓ۔',
'recentchanges-label-newpage' => 'اِس ترمیم نے نیا صفحہ تخلیق کردیا',
'recentchanges-label-minor' => 'یہ ایک معمولی ترمیم ہے',
'history-feed-empty' => 'La pàxena richiesta no la esiste; la podarìa èssar stà scancełà dal sito o rinominà. Verifica con la [[Special:Search|pàxena de riserca]] se ghe xè nove pàxene.',
# Revision deletion
-'rev-deleted-comment' => '(comento cavà)',
+'rev-deleted-comment' => 'Comento cavà',
'rev-deleted-user' => '(nome utente cavà)',
'rev-deleted-event' => '(elemento cavà)',
'rev-deleted-user-contribs' => '[nome utente o indirisso IP cavà - modifica sconta dai contributi]',
I aministradori i połe uncora [$1 vixualixare el confronto] se i vołe.",
'rev-deleted-diff-view' => "Una dełe revixion de sto confronto de version ła xe stà '''scancelà'''.
Te połi uncora vixuałixare sto confronto; controłare el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistro dełe scancełasion] par ulteriori detaji.",
-'rev-suppressed-diff-view' => "Una dele revision de sta difarensa la xe stà '''sopressa'''.
-Come aminitrador, te pol vardar el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de sopression] par ulteriori detagli.",
+'rev-suppressed-diff-view' => "Una dełe revixion de sto confronto de version ła xe stà '''rimosa'''.
+Te połi uncora vixuałixare sto confronto; controłare el [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistro dełe rimosion] par ulteriori detaji.",
'rev-delundel' => 'mostra/scondi',
'rev-showdeleted' => 'mostra',
'revisiondelete' => 'Scanceła o ripristina version',
# Suppression log
'suppressionlog' => 'Registro dei ocultamenti',
-'suppressionlogtext' => "Qua soto se cata na lista de le ultime scancelazioni e blochi che riguarda contenuti sconti dai aministradori. Varda la [[Special:IPBlockList|lista dei IP blocà]] par védar l'elenco dei blochi atualmente ativi.",
+'suppressionlogtext' => "Cua soto se cata na lista de łe ultime scancełasion e rimosion che riguarda contenuti sconti dai aministradori. Varda ła [[Special:BlockList|lista dei IP blocadi]] par vedare l'elenco de łe operasion de bloco atualmente ative.",
# History merging
'mergehistory' => 'Union cronologie',
'prefs-watchlist-days' => 'Nùmaro de giòrni da far védar nei osservati speciali:',
'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
'prefs-watchlist-edits' => 'Nùmaro de modifiche da far védar con le funzion avanzade:',
-'prefs-watchlist-edits-max' => '(nùmaro massimo: 1000)',
+'prefs-watchlist-edits-max' => 'Numaro massimo: 1000',
'prefs-watchlist-token' => "Segnal par le pagine tegnùe d'ocio:",
'prefs-misc' => 'Preferense varie',
'prefs-resetpass' => 'Cànbia password',
'prefs-displaywatchlist' => 'Opzioni de visualixassion',
'prefs-diffs' => 'Difarense',
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => "L'indiriso de posta eletronega pararìa vałido",
+'email-address-validity-invalid' => 'Inserisi un indiriso de posta eletronega vałido',
+
# User rights
'userrights' => 'Gestion dei parmessi relativi ai utenti',
'userrights-lookup-user' => 'Gestion de i gruppi utente',
'userrights-no-interwiki' => 'No te ghè i parmessi necessari par modificar i diriti dei utenti su altri siti.',
'userrights-nodatabase' => "El database $1 no l'esiste mìa o no l'è un database local.",
'userrights-nologin' => "Par assegnarghe diriti ai utenti te ghè da [[Special:UserLogin|efetuar l'acesso]] come aministrador.",
-'userrights-notallowed' => 'No te ghè i parmessi necessari par assegnarghe diriti ai utenti.',
+'userrights-notallowed' => 'No te ghe i parmesi necesari par xontarghe o cavarghe diriti ai utenti.',
'userrights-changeable-col' => 'Grupi che te pol canbiar',
'userrights-unchangeable-col' => 'Grupi che no te pol canbiar',
'nchanges' => '$1 {{PLURAL:$1|canbiamento|canbiamenti}}',
'recentchanges' => 'Ultimi canbiamenti',
'recentchanges-legend' => 'Prefarense par i ultimi canbiamenti',
-'recentchangestext' => 'Qua se vede i ultimi canbiamenti fati a sto sito.',
+'recentchanges-summary' => 'Qua se vede i ultimi canbiamenti fati a sto sito.',
'recentchanges-feed-description' => 'Tien tracia dei ultimi canbiamenti fati a sto sito',
'recentchanges-label-newpage' => 'Sta modifica la ga creà na pagina nova',
'recentchanges-label-minor' => 'Sto qua el xe un canbiamento picenin',
Sta wiki la xe configurà come pùblica.
Par na major sicuressa, img_auth.php el xe disabilità.',
'img-auth-noread' => 'L\'utente no\'l gà mia dirito de lèzar "$1".',
+'img-auth-bad-query-string' => "L'indiriso URL contien na stringa de query invałida.",
# HTTP errors
'http-invalid-url' => 'URL mia valido: $1',
'upload_source_file' => ' (un file sul to computer)',
# Special:ListFiles
-'listfiles-summary' => "Sta pagina speciale la fa védar tuti i file caricài.
-I file caricài piessè de recente i vien mostrà a l'inizio de la lista.
-Par modificar l'ordinamento, struca su l'intestazion de la colona presièlta.",
+'listfiles-summary' => "Sta pajina speciałe ła fa vedare tuti i file caricadi.
+Se l'utente modifega l'ordenamento, vien mostradi soło i file caricadi pi de recente da l'utente.",
'listfiles_search_for' => 'Serca file par nome:',
'imgfile' => 'file',
'listfiles' => 'Lista dei file',
'statistics-users-active-desc' => "Utenti che gà fato almanco un'azion in {{PLURAL:$1|tel'ultimo zorno|in tei ultimi $1 zorni}}",
'statistics-mostpopular' => 'Pagine piassè visità',
-'disambiguations' => 'Pagine de disanbigua',
+'disambiguations' => 'Pajine cołegade a pajine de dixanbiguasion',
'disambiguationspage' => 'Template:Disambigua',
'disambiguations-text' => "Le pagine ne la lista che segue le contien dei colegamenti a '''pagine de disanbiguazion''' e no a l'argomento a cui le dovarìà far riferimento.<br />
Vien considerà pagine de disanbiguazion tute quele che contien i modèi elencà in [[MediaWiki:Disambiguationspage]]",
'booksources-invalid-isbn' => "El nùmaro ISBN inserìo no'l xe mia valido: controla de novo se te lo ghè copià justo da la fonte originale.",
# Special:Log
-'specialloguserlabel' => 'Utente:',
-'speciallogtitlelabel' => 'Titolo:',
+'specialloguserlabel' => 'Asion efetuà da:',
+'speciallogtitlelabel' => 'Asion efetuà so:',
'log' => 'Registri',
'all-logs-page' => 'Tuti i registri pùblici',
'alllogstext' => 'Vixualixazion unificà de tuti i registri disponibili de {{SITENAME}}.
'sp-deletedcontributions-contribs' => 'contributi',
# Special:LinkSearch
-'linksearch' => 'Colegamenti foresti',
+'linksearch' => 'Riçerca cołegamenti esterni',
'linksearch-pat' => 'Espression de riserca:',
'linksearch-ns' => 'Namespace:',
'linksearch-ok' => 'Serca',
-'linksearch-text' => 'Se pol doparar dei metacaràteri, par es. "*.wikipedia.org".<br />
-Protocòli suportè: <tt>$1</tt>',
+'linksearch-text' => 'Xe posibiłe doparare metacarateri, come "*.wikipedia.org".<br />
+Xe necesario almanco un dominio de primo liveło, tipo "*.org".<br />
+Protocołi suportadi: <tt>$1</tt> (no sta xontare nesuno de sti cuà inte ła to riçerca).',
'linksearch-line' => '$1 presente ne la pagina $2',
'linksearch-error' => "I metacaràteri i pode vegner doparài solo a l'inizio del nome de l'host.",
# Protect
'protectlogpage' => 'Protesion',
-'protectlogtext' => 'De seguito xe elencàe le azion de protezion e sbloco de le pagine.',
+'protectlogtext' => "De seguito xe elencade łe modifeghe ałe protesion dełe pajine.
+Vedi ła [[Special:ProtectedPages|lista dełe pajine protete]] pa l'elenco de łe protesion de pajina atualmente ative.",
'protectedarticle' => 'ga proteto "[[$1]]"',
'modifiedarticleprotection' => "gà canbià el livèl de protession de ''[[$1]]''",
'unprotectedarticle' => 'gà sblocà "[[$1]]"',
'ipb-confirm' => 'Conferma el bloco',
'badipaddress' => "L'indirisso IP indicà no'l xè mìa coreto.",
'blockipsuccesssub' => 'Bloco eseguìo',
-'blockipsuccesstext' => "[[Special:Contributions/$1|$1]] l'è sta bloccà.<br />
-Varda [[Special:BlockList|lista IP bloccati]] par védar tuti i blochi.",
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] xe stà blocà.<br />
+Varda [[Special:BlockList|lista IP blocadi]] par vedare tuti i blochi.',
'ipb-blockingself' => 'Sito drio blocar te steso! Sito sicuro de voerlo fare?',
'ipb-edit-dropdown' => 'Motivi par el bloco',
'ipb-unblock-addr' => 'Sbloca $1',
Qua soto ghe xe el registro de le sopression:',
'blocklogentry' => 'ga blocà [[$1]] par un periodo de $2 $3',
'reblock-logentry' => "gà canbià le inpostassion del bloco par [[$1]] co' na scadensa de $2 $3",
-'blocklogtext' => "Sto qua xè un elenco de azioni de bloco e sbloco dei indirizi IP. I indirizi blocai in automatico no i xè mìa elencai. Varda l'[[Special:BlockList|elenco dei IP blocà]] par la lista dei indirizi el cui bloco el xè operativo.",
+'blocklogtext' => "Sto cua xe un elenco de asion de bloco e sbloco de indirizi IP de utenti. I indirisi blocadi in automatego no xe elencadi. Varda l'[[Special:BlockList|elenco dei IP blocadi]] pa ła lista dei indirisi che ga un bloco operativo.",
'unblocklogentry' => 'ga sblocà $1',
'block-log-flags-anononly' => 'solo utenti anonimi',
'block-log-flags-nocreate' => 'creasion acount blocà',
'import-interwiki-namespace' => 'Namespace de destinassion:',
'import-upload-filename' => 'Nome del file:',
'import-comment' => 'Comento:',
-'importtext' => 'Par piaser, esporta el file da la wiki de origine doparando la [[Special:Export|funsion de esportassion]].
-Salvalo sul to computer e càrghelo qua.',
+'importtext' => "Se połe esportare el file da ła fonte wiki doparando ła [[Special:Export|funsion de esportasion]].
+Salveło so'l to conpiuter e carghelo cuà.",
'importstart' => 'Inportazion de łe pàxene in corso...',
'import-revision-count' => '{{PLURAL:$1|una revixion importà|$1 revixion importae}}',
'importnopages' => 'Nissuna pàxena da inportar.',
'tooltip-ca-viewsource' => 'Sta pagina la xe proteta, ma te poli vardar el so testo',
'tooltip-ca-history' => 'Version vece de sta pagina',
'tooltip-ca-protect' => 'Protezi sta pagina',
-'tooltip-ca-unprotect' => 'Cava la protession a sta pagina',
+'tooltip-ca-unprotect' => 'Canbia ła protesion de sta pajina',
'tooltip-ca-delete' => 'Scansela sta pagina',
'tooltip-ca-undelete' => "Ripristina la pàxena come l'era prima de la scancelassion",
'tooltip-ca-move' => 'Sposta sta pagina',
'exif-colorspace' => 'Spazio de i cołori',
'exif-componentsconfiguration' => 'Significato de ciascuna componente',
'exif-compressedbitsperpixel' => 'Modalità de compression imagine',
-'exif-pixelydimension' => 'Largheza efetiva imagine',
-'exif-pixelxdimension' => 'Alteza efetiva imagine',
+'exif-pixelydimension' => 'Larghesa imajine',
+'exif-pixelxdimension' => 'Altesa imajine',
'exif-usercomment' => "Note de l'utente",
'exif-relatedsoundfile' => 'File audio cołegà',
'exif-datetimeoriginal' => 'Data e ora de creassion de i dati',
'exif-exposureprogram' => 'Programa de esposission',
'exif-spectralsensitivity' => 'Sensibilità spetrałe',
'exif-isospeedratings' => 'Sensibiłità ISO',
-'exif-shutterspeedvalue' => 'Tenpo de esposission',
-'exif-aperturevalue' => 'Apertura',
-'exif-brightnessvalue' => 'Luminosità',
+'exif-shutterspeedvalue' => "Vełoçità de l'oturatore APEX",
+'exif-aperturevalue' => 'Apertura APEX',
+'exif-brightnessvalue' => 'Luminoxità APEX',
'exif-exposurebiasvalue' => 'Coression esposission',
'exif-maxaperturevalue' => 'Massima apertura',
'exif-subjectdistance' => 'Distansa de el sojeto',
'exif-gpsareainformation' => 'Nome de ła xòna GPS',
'exif-gpsdatestamp' => 'Data GPS',
'exif-gpsdifferential' => 'Corezion diferensiałe GPS',
+'exif-objectname' => 'Titoło curto',
# EXIF attributes
'exif-compression-1' => 'No conpresso',
'exif-orientation-3' => 'Ruotà de 180°',
'exif-orientation-4' => 'Roersà verticalmente',
'exif-orientation-5' => 'Ruotà 90° in senso antiorario e roersà verticalmente',
-'exif-orientation-6' => 'Ruotà 90° in senso orario',
+'exif-orientation-6' => 'Jirare de 90° in senso antiorario',
'exif-orientation-7' => 'Ruotà 90° in senso orario e capovolto verticalmente',
-'exif-orientation-8' => 'Ruotà 90° in senso antiorario',
+'exif-orientation-8' => 'Jirà de 90° in senso orario',
'exif-planarconfiguration-1' => 'a blochi (chunky)',
'exif-planarconfiguration-2' => 'lineare (planar)',
'exif-sensingmethod-7' => 'Sensore triłineare',
'exif-sensingmethod-8' => 'Sensor łinear cołor sequensiałe',
+'exif-filesource-3' => 'Fotocamara dijitałe',
+
'exif-scenetype-1' => 'Fotografia direta',
'exif-customrendered-0' => 'Processo normałe',
Se l\'acount *no* te o ghe rejistrà ti, verzi st\'altro cołegamento par anułar ła conferma de l\'indiriso e-mail:
$5
El codexe de conferma el scadrà en automatego a łe $4.',
+'confirmemail_body_set' => 'Qualcheduni, probabilmente ti steso da l\'indiriso IP $1, el ga rejistrà n\'acount "$2" con sto indiriso de posta eletronega so {{SITENAME}}.
+
+Par confermare che sto acount el xe veramente tuo e poder riativar łe funsion rełative a l\'e-mail so {{SITENAME}} verxi sto cołegamento ntel to browser:
+
+$3
+
+Se l\'acount *no* te o ghe rejistrà ti, verxi st\'altro cołegamento par anułar ła conferma de l\'indiriso de posta eletronega:
+
+$5
+
+El codexe de conferma el scadarà en automatego a łe $4.',
'confirmemail_invalidated' => 'Richiesta de conferma indirizo e-mail anulà',
'invalidateemail' => 'Anula richiesta de conferma e-mail',
'version-specialpages' => 'Pagine speciali',
'version-parserhooks' => 'Hook del parser',
'version-variables' => 'Variabili',
+'version-skins' => 'Aspeto grafego',
'version-other' => 'Altro',
'version-mediahandlers' => 'Gestori de contenuti multimediài',
'version-hooks' => 'Hook',
'nchanges' => '$1 {{PLURAL:$1|toižetuz|toižetust}}',
'recentchanges' => 'Tantoižed toižetused',
'recentchanges-legend' => 'Tantoižiden toižetusiden järgendused',
-'recentchangestext' => 'Necil lehtpolil om tantoižid toižetusid {{SITENAME}}-saital.',
+'recentchanges-summary' => 'Necil lehtpolil om tantoižid toižetusid {{SITENAME}}-saital.',
'recentchanges-feed-description' => "Kacelta jäl'gmäižid toižetusid wikiš neciš valus.",
'recentchanges-label-newpage' => 'Nece redakcii sädi uden lehtpolen',
'recentchanges-label-minor' => 'Nece redakcii om penikaine',
'Allmessages' => array( 'Mọi_thông_báo' ),
'Allpages' => array( 'Mọi_bài' ),
'Ancientpages' => array( 'Trang_cũ' ),
+ 'Badtitle' => array( 'Tựa_đề_hỏng' ),
'Blankpage' => array( 'Trang_trắng' ),
'Block' => array( 'Cấm_IP' ),
'Blockme' => array( 'Khóa_tôi', 'Khoá_tôi' ),
'Booksources' => array( 'Nguồn_sách' ),
'BrokenRedirects' => array( 'Đổi_hướng_sai' ),
'Categories' => array( 'Thể_loại' ),
+ 'ChangeEmail' => array( 'Đổi_thư_điện_tử' ),
'ChangePassword' => array( 'Đổi_mật_khẩu' ),
'ComparePages' => array( 'So_sánh_trang' ),
'Confirmemail' => array( 'Xác_nhận_thư' ),
'Filepath' => array( 'Đường_dẫn_tập_tin', 'Đường_dẫn_file' ),
'Import' => array( 'Nhập' ),
'Invalidateemail' => array( 'Hủy_thư', 'Hủy_thư_điện_tử', 'Huỷ_thư', 'Huỷ_thư_điện_tử', 'Tắt_thư' ),
+ 'JavaScriptTest' => array( 'Thử_JavaScript' ),
'BlockList' => array( 'Danh_sách_cấm' ),
'LinkSearch' => array( 'Tìm_liên_kết' ),
'Listadmins' => array( 'Danh_sách_bảo_quản_viên', 'Danh_sách_admin' ),
'Listbots' => array( 'Danh_sách_bot', 'Danh_sách_robot' ),
- 'Listfiles' => array( 'Danh_sách_hình', 'Danh_sách_tập_tin' ),
+ 'Listfiles' => array( 'Danh_sách_tập_tin', 'Danh_sách_hình' ),
'Listgrouprights' => array( 'Quyền_nhóm_người_dùng' ),
'Listredirects' => array( 'Trang_đổi_hướng' ),
'Listusers' => array( 'Danh_sách_thành_viên' ),
Điều này thường xảy ra khi bạn sử dụng một dịch vụ proxy vô danh trên web có vấn đề.'''",
'edit_form_incomplete' => "'''Một số phần của biểu mẫu sửa đổi không tới được máy chủ. Hãy kiểm tra rằng các sửa đổi của bạn còn nguyên và thử lại.'''",
'editing' => 'Sửa đổi $1',
-'creating' => 'Đang tạo $1',
+'creating' => 'Tạo $1',
'editingsection' => 'Sửa đổi $1 (đề mục)',
'editingcomment' => 'Sửa đổi $1 (đề mục mới)',
'editconflict' => 'Sửa đổi mâu thuẫn: $1',
# Diffs
'history-title' => 'Lịch sử sửa đổi của “$1”',
+'difference-title' => 'Khác biệt giữa các bản “$1”',
+'difference-title-multipage' => 'Khác biệt giữa các trang “$1” và “$2”',
'difference-multipage' => '(Khác biệt giữa các trang)',
'lineno' => 'Dòng $1:',
'compareselectedversions' => 'So sánh các bản đã chọn',
'nchanges' => '$1 {{PLURAL:$1|thay đổi|thay đổi}}',
'recentchanges' => 'Thay đổi gần đây',
'recentchanges-legend' => 'Tùy chọn thay đổi gần đây',
-'recentchangestext' => 'Xem các thay đổi gần đây nhất tại wiki trên trang này.',
+'recentchanges-summary' => 'Xem các thay đổi gần đây nhất tại wiki trên trang này.',
'recentchanges-feed-description' => 'Theo dõi các thay đổi gần đây nhất của wiki dùng nguồn tin này.',
'recentchanges-label-newpage' => 'Bản sửa này tạo ra trang mới',
'recentchanges-label-minor' => 'Đây là một sửa đổi nhỏ',
'backend-fail-writetemp' => 'Không thể ghi vào tập tin tạm thời.',
'backend-fail-closetemp' => 'Không thể đóng tập tin tạm thời.',
'backend-fail-read' => 'Không thể đọc tập tin $1.',
-'backend-fail-create' => 'Không thể tạo tập tin $1.',
-'backend-fail-maxsize' => 'Không thể tạo tập tin $1 vì nó lớn hơn $2 byte.',
+'backend-fail-create' => 'Không thể ghi tập tin $1.',
+'backend-fail-maxsize' => 'Không thể ghi tập tin $1 vì nó lớn hơn $2 byte.',
'backend-fail-readonly' => 'Phía sau lưu trữ “$1” đang ở chế độ chỉ-đọc. Lý do đưa ra là: “$2”',
'backend-fail-synced' => 'Tập tin “$1” đang có trạng thái không nhất quán đối với các phía sau lưu trữ nội bộ',
'backend-fail-connect' => 'Không thể kết nối đến phía sau lưu trữ “$1”.',
'backend-fail-internal' => 'Lỗi không rõ xuất hiện trong phía sau lưu trữ “$1”.',
'backend-fail-contenttype' => 'Không thể xác định kiểu nội dung của tập tin để lưu giữ tại “$1”.',
'backend-fail-batchsize' => 'Phía sau lưu trữ đã nhận một loạt $1 thao tác tập tin; mức hạn là $2 thao tác.',
+'backend-fail-usable' => 'Không thể ghi tập tin $1 vì không có đủ quyền hoặc những thư mục hay nơi đựng bị thiếu.',
# File journal errors
'filejournal-fail-dbconnect' => 'Không thể kết nối với cơ sở dữ liệu nhật ký của phía sau lưu trữ “$1”.',
'http-curl-error' => 'Có lỗi khi truy xuất URL: $1',
'http-host-unreachable' => 'Không thể truy cập URL',
'http-bad-status' => 'Có vấn đề khi yêu cầu HTTP: $1 $2',
-'http-truncated-body' => 'Chỉ nhận được một phần của thân yêu cầu.',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => 'Không thể truy cập URL',
'nchanges' => '$1 {{PLURAL:$1|muutminõ|muutmiisi}}',
'recentchanges' => 'Viimädseq muutmisõq',
'recentchanges-legend' => 'Viimätside muutmiisi säädmine',
-'recentchangestext' => 'Kaeq seo lehe päält viimätsit muutmiisi.',
+'recentchanges-summary' => 'Kaeq seo lehe päält viimätsit muutmiisi.',
'recentchanges-feed-description' => 'Kaeq seo lehe pääl {{SITENAME}} viimätsit muutmiisi.',
'rcnote' => 'Tan ommaq {{PLURAL:$1|üts muutus|$1 viimäst muutmist}}, miä ommaq tettüq {{PLURAL:$2|üte viimädse päävä|$2 viimädse päävä}} seen (kuupääväst $5, $4 lugõma naatõn).',
'rcnotefrom' => "Tan ommaq muutmisõq kuupääväst '''$2''' pääle (näüdätäs kooniq '''$1''' muutmist).",
'scarytranscludetoolong' => "[Võrgoaadrõs om pall'o pikk]",
# Delete conflict
-'deletedwhileediting' => "<center>'''Hoiatus''': taa leht om ärq kistutõt päält tuud, ku sa taad toimõndama naksit!</center>",
+'deletedwhileediting' => "'''Hoiatus''': taa leht om ärq kistutõt päält tuud, ku sa taad toimõndama naksit!",
'confirmrecreate' => "Pruukja '''[[User:$1|$1]]''' ([[User talk:$1|arotus]]) kistut' taa lehe ärq päält tuud, ku sa naksit taad toimõndama. Põhjus oll':
: ''$2''
Olõq hää, kinnüdäq, et tahat taad lehte vahtsõst luvvaq.",
NS_USER => 'Gumaramit',
NS_USER_TALK => 'Hiruhimangaw_hiton_gumaramit',
NS_PROJECT_TALK => 'Hiruhimangraw_hiton_$1',
- NS_FILE => 'Fayl',
- NS_FILE_TALK => 'Hiruhimangraw_hiton_fayl',
- NS_MEDIAWIKI => 'MediaWiki',
- NS_MEDIAWIKI_TALK => 'Hiruhimangraw_hiton_MediaWiki',
+ NS_FILE => 'Paypay',
+ NS_FILE_TALK => 'Hiruhimangraw_hiton_paypay',
+ NS_MEDIAWIKI => 'MedyaWiki',
+ NS_MEDIAWIKI_TALK => 'Hiruhimangraw_hiton_MedyaWiki',
NS_TEMPLATE => 'Batakan',
NS_TEMPLATE_TALK => 'Hiruhimangraw_hiton_batakan',
NS_HELP => 'Bulig',
NS_CATEGORY_TALK => 'Hiruhimangraw_hiton_kaarangay',
);
+$namespaceAliases = array(
+ 'Fayl' => NS_FILE,
+ 'Hiruhimangraw_hiton_fayl' => NS_FILE_TALK,
+ 'Hiruhimangraw_hiton_MediaWiki' => NS_MEDIAWIKI_TALK,
+);
+
$specialPageAliases = array(
'Allpages' => array( 'NgatananngaPakli' ),
'Categories' => array( 'Mga_kaarangay' ),
'nchanges' => '$1 {{PLURAL:$1|pagbag-o|mga pagbabag-o}}',
'recentchanges' => 'Mga kabag-ohan',
'recentchanges-legend' => 'Mga pirilion han mga lab-as nga pagbag-o',
-'recentchangestext' => 'Nasubay han pinakalab-as nga pagbag-o ha wiki dinhi nga pakli.',
+'recentchanges-summary' => 'Nasubay han pinakalab-as nga pagbag-o ha wiki dinhi nga pakli.',
'recentchanges-feed-description' => 'Panultol han pinakalab-as nga pagbabag-o ha wiki dinhi nga panubong.',
'recentchanges-label-newpage' => 'Ini nga pagliwat hin naghimo hin bag-o nga pakli',
'recentchanges-label-minor' => 'Gutiay ini nga pagliwat',
'nchanges' => '$1 {{PLURAL:$1|თირაფა|თირაფეფ}}',
'recentchanges' => 'ასეიანი თირაფეფი',
'recentchanges-legend' => 'ასერდენ თირაფეფიშ ოფციეფ',
-'recentchangestext' => 'თე ხასჷლას ქაძირი ვიკიშა მიშაღალირ არძოშ უახალაშ თირაფეფი.',
+'recentchanges-summary' => 'თე ხასჷლას ქაძირი ვიკიშა მიშაღალირ არძოშ უახალაშ თირაფეფი.',
'recentchanges-feed-description' => "ვიკიშ უახალაშ თირაფეფიშა თოლყ'უჯიშ მეყ'უნაფა თე არხის",
'recentchanges-label-newpage' => 'ათე რედაქტირაფას მაჸუნ ახალ ხასჷლაშ დორსხუაფაქ.',
'recentchanges-label-minor' => 'თენა რე ციქა რედაქტირაფა',
'BrokenRedirects' => array( 'צעבראכענע_ווייטערפירונגען' ),
'Categories' => array( 'קאטעגאריעס' ),
'ChangePassword' => array( 'ענדערן_פאסווארט' ),
+ 'ComparePages' => array( 'פארגלייהן_בלעטער' ),
'Confirmemail' => array( 'באשטעטיגן_ע-פאסט' ),
'Contributions' => array( 'בײַשטײַערונגען' ),
'CreateAccount' => array( 'שאפֿן_קאנטע' ),
'Deadendpages' => array( 'בלעטער_אן_פארבינדונגען' ),
+ 'DeletedContributions' => array( 'אויסגעמעקעטע_בײַשטײַערונגען' ),
'Disambiguations' => array( 'באדייטן' ),
'DoubleRedirects' => array( 'פארטאפלטע_ווייטערפירונגען' ),
'Emailuser' => array( 'שיקן_אן_ע-פאסט_צום_באניצער' ),
'Listfiles' => array( 'בילדער' ),
'Listredirects' => array( 'ווייטערפירונגען' ),
'Listusers' => array( 'ליסטע_פון_באניצערס' ),
+ 'Lockdb' => array( 'פארשליסן_דאטנבאזע' ),
'Log' => array( 'לאגביכער' ),
'Lonelypages' => array( 'פאר\'יתומ\'טע_בלעטער' ),
'Longpages' => array( 'לאנגע_בלעטער' ),
'Specialpages' => array( 'באזונדערע_בלעטער' ),
'Statistics' => array( 'סטאטיסטיק' ),
'Tags' => array( 'טאגן' ),
+ 'Unblock' => array( 'אויפבלאקירן' ),
'Uncategorizedcategories' => array( 'קאטעגאריעס_אן_קאטעגאריעס' ),
'Uncategorizedimages' => array( 'בילדער_אן_קאטעגאריעס' ),
'Uncategorizedpages' => array( 'בלעטער_אן_קאטעגאריעס' ),
'raw' => array( '0', 'רוי:', 'ללא עיבוד:', 'RAW:' ),
'displaytitle' => array( '1', 'ווייזן_קעפל', 'כותרת תצוגה', 'DISPLAYTITLE' ),
'language' => array( '0', '#שפראך:', '#שפה:', '#LANGUAGE:' ),
+ 'special' => array( '0', 'באזונדער', 'מיוחד', 'special' ),
'defaultsort' => array( '1', 'גרונטסארטיר:', 'מיון רגיל:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
'hiddencat' => array( '1', '__באהאלטענע_קאטעגאריע__', '__באהאלטענע_קאט__', '__קטגוריה_מוסתרת__', '__HIDDENCAT__' ),
'pagesize' => array( '1', 'בלאטגרייס', 'גודל דף', 'PAGESIZE' ),
# Diffs
'history-title' => 'רעוויזיע היסטאריע פֿון $1',
+'difference-title' => 'אונטערשייד צווישן ווערסיעס פון "$1"',
+'difference-title-multipage' => 'אונטערשייד צווישן בלעטער "$1" און "$2"',
'difference-multipage' => '(אונטערשייד צווישן בלעטער)',
'lineno' => 'שורה $1:',
'compareselectedversions' => 'פארגלייך סעלעקטירטע ווערסיעס',
'right-reupload' => 'איבערשרײַבן עקסיסטירנדע טעקע',
'right-reupload-own' => "איבערשרײַבן עקזיסטירנדע טעקעס וואָס מ'האט אַליין אַרויפֿגעלאָדן",
'right-upload_by_url' => 'ארויפֿלאָדן טעקעס פֿון אַ URL',
+'right-purge' => 'ליידיקן דעם זייטל־זאפאס פאר א בלאט אן באשטעטיקונג',
'right-autoconfirmed' => 'רעדאקטירן האלב-געשיצטע בלעטער',
'right-bot' => 'באַהאַנדלונג ווי אַן אויטאמאַטישער פראצעס',
+'right-nominornewtalk' => 'מינערדיקע רעדאקטירונגען צו שמועס בלעטער זאלן נישט שאפן די "נייע מודעות" מעלדונג',
'right-writeapi' => 'ניצן דעם שרײַבן API',
'right-delete' => 'מעקן בלעטער',
'right-bigdelete' => 'אויסמעקן בלעטער מיט לאַנגע היסטאריעס',
'nchanges' => '{{PLURAL:$1|ענדערונג|$1 ענדערונגען}}',
'recentchanges' => 'לעצטע ענדערונגען',
'recentchanges-legend' => 'ברירות פאר לעצטע ענדערונגען',
-'recentchangestext' => 'גיי נאך די לעצטע ענדערונגען צו דער וויקי אויף דעם בלאט.',
+'recentchanges-summary' => 'גיי נאך די לעצטע ענדערונגען צו דער וויקי אויף דעם בלאט.',
'recentchanges-feed-description' => 'גייט נאך די לעצטע ענדערונגען צו דער וויקי אין דעם בלאט.',
'recentchanges-label-newpage' => 'די רעדאַקטירונג האט באשאפֿן א נײַעם בלאַט',
'recentchanges-label-minor' => 'דאָס איז אַ מינערדיקע רעדאַקטירונג',
'uploadnologintext' => 'איר מוזט זײַן [[Special:UserLogin| אַרײַנלאָָגירט]] כדי ארויפֿצולאָדן טעקעס',
'upload_directory_read_only' => 'דער וועבסארווער קען נישט שרייבן צום ארויפלאדן ארכיוו "$1".',
'uploaderror' => 'אַרויפֿלאָדן פֿעלער',
+'upload-recreate-warning' => "'''ווארענונג: א טעקע מיט דעם נאמען איז געווארן אויסגעמעקט אדער באוועגט.'''
+
+דאס אויסמעקן־ און באוועגן־לאגבוך פאר דעם בלאט זענען געוויזן דא:",
'uploadtext' => "באניצט דעם פֿארעם אַרויפֿצולאָדן טעקעס.
כדי צו זען אדער זוכן טעקעס וואס זענען שוין אַרויפֿגעלאָדן ווענדט זיך צו דער [[Special:FileList|ליסטע פֿון אַרויפֿגעלאָדענע טעקעס]]; (ווידער)אַרויפֿלאָדונגען ווערן אויך לאגירט אינעם [[Special:Log/upload| אַרויפֿלאָדן לאג-בוך]], אויסמעקונגען אינעם [[Special:Log/delete|אויסמעקן לאג-בוך]].
ביטע גיט דער טעקע א נײַעם נאמען און פּרובירט ארויפֿלאָדן נאכאַמאָל.',
'filename-toolong' => 'טעקע נעמען קען נישט זײַן לענגער ווי 240 בייטן.',
'badfilename' => 'טעקע נאמען איז געטוישט צו "$1".',
+'filetype-mime-mismatch' => 'טעקע סופֿיקס ".$1" שטימט נישט מיטן MIME טיפ פון דער טעקע($2).',
+'filetype-badmime' => 'טעקעס מיטן MIME טיפ "$1" טאר מען נישט ארויפלאדן.',
'filetype-missing' => 'די טעקע האט נישט קיין פארברייטערונג (למשל ".jpg").',
'empty-file' => 'די טעקע וואָס איר האט אײַנגעגעבן איז ליידיג.',
'file-too-large' => 'די טעקע וואָס איר האט אײַנגעגעבן איז צו גרויס.',
'upload-http-error' => 'א HTTP גרײַז האט פאַסירט: $1',
# File backend
+'backend-fail-stream' => 'קען נישט מאכן שטראמען טעקע $1.',
'backend-fail-notexists' => 'נישט פֿאראן די טעקע $1.',
'backend-fail-invalidpath' => '$1 איז נישט קיין גילטיקער שפייכלערן שטעג.',
'backend-fail-delete' => 'קען נישט אויסמעקן טעקע $1.',
# HTTP errors
'http-invalid-url' => 'אומגילטיג URL: $1',
+'http-invalid-scheme' => 'URL אדרעסן מיט דער "$1" סכעמע ווערן נישט געשטיצט.',
'http-request-error' => 'HTTP בקשה דורכגעפאלן צוליב אומבאוואוסטער פעלער.',
'http-read-error' => 'HTTP לייענען גרײַז.',
'http-timed-out' => 'HTTP בקשה אויסגעגאַנגען.',
# SpecialCachedPage
'cachedspecial-viewing-cached-ttl' => 'איר באקוקט א ווערסיע פון דעם בלאט פונעם זאפאס, וואס קען אבער זיין פֿארעלטערט ביז $1.',
+'cachedspecial-refresh-now' => 'באקוקן די לעצטע.',
# Special:Categories
'categories' => 'קאַטעגאָריעס',
'exif-gpslongitude-e' => 'מזרח לענג',
'exif-gpslongitude-w' => 'מערב לענג',
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|ngמעטער|מעטער}} איבערן ים־שפיגלl',
+'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|מעטער|מעטער}} אונטערן ים־שפיגל',
+
# Pseudotags used for GPSSpeedRef
'exif-gpsspeed-k' => 'ק"מ אין א שעה',
'exif-gpsspeed-m' => 'מייל פער שעה',
'version-software' => 'אינסטאַלירט ווייכוואַרג',
'version-software-product' => 'פראדוקט',
'version-software-version' => 'ווערסיע',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => 'טעקע שטעג',
'nchanges' => '{{PLURAL:$1|àtúnṣe|àwọn àtúnṣe}} $1',
'recentchanges' => 'Àwọn àtúnṣe tuntun',
'recentchanges-legend' => 'Àwọn àṣàyàn fún àtúnṣe tuntun',
-'recentchangestext' => 'Ẹ tẹ̀ lé àwọn àtúnṣe tuntun sí wiki lórí ojúewé yìí.',
+'recentchanges-summary' => 'Ẹ tẹ̀ lé àwọn àtúnṣe tuntun sí wiki lórí ojúewé yìí.',
'recentchanges-feed-description' => 'Ẹ tẹ̀ lé àwọn àtúnṣe àìpẹ́ ọjọ́ sí wiki nínú àkótán feed yìí.',
'recentchanges-label-newpage' => 'Àtúnṣe yìí dá ojúewé tuntun',
'recentchanges-label-minor' => 'Àtùnṣe kékeré nìyí',
'Allmessages' => array( '所有信息' ),
'Allpages' => array( '所有页面' ),
'Ancientpages' => array( '最早页面' ),
+ 'Badtitle' => array( '无效标题' ),
'Blankpage' => array( '空白页面' ),
'Block' => array( '封禁用户' ),
'Blockme' => array( '自我封禁' ),
'Filepath' => array( '文件路径' ),
'Import' => array( '导入页面' ),
'Invalidateemail' => array( '无效电邮地址' ),
+ 'JavaScriptTest' => array( 'JavaScript测试' ),
'BlockList' => array( '封禁列表' ),
'LinkSearch' => array( '搜索网页链接' ),
'Listadmins' => array( '管理员列表' ),
'Mycontributions' => array( '我的贡献' ),
'Mypage' => array( '我的用户页' ),
'Mytalk' => array( '我的讨论页' ),
- 'Myuploads' => array( '我上传的文件', '我的上传' ),
+ 'Myuploads' => array( '我上传的文件' ),
'Newimages' => array( '新建文件' ),
'Newpages' => array( '新建页面' ),
'PasswordReset' => array( '重设密码' ),
'Randomredirect' => array( '随机重定向页' ),
'Recentchanges' => array( '最近更改' ),
'Recentchangeslinked' => array( '链出更改' ),
- 'Revisiondelete' => array( '删除或恢复版本' ),
+ 'Revisiondelete' => array( '删除或恢复修订' ),
'RevisionMove' => array( '修订版本移动' ),
'Search' => array( '搜索' ),
'Shortpages' => array( '短页面' ),
'Wantedtemplates' => array( '需要的模板' ),
'Watchlist' => array( '监视列表' ),
'Whatlinkshere' => array( '链入页面' ),
- 'Withoutinterwiki' => array( '无跨Wiki链接的页面', '无跨维基链接页面' ),
+ 'Withoutinterwiki' => array( '无跨维基链接页面' ),
);
$magicWords = array(
'currentday' => array( '1', '今天', 'CURRENTDAY' ),
'currentday2' => array( '1', '今天2', 'CURRENTDAY2' ),
'currentyear' => array( '1', '今年', 'CURRENTYEAR' ),
+ 'currenttime' => array( '1', '此时', '当前时间', 'CURRENTTIME' ),
'numberofpages' => array( '1', '页数', 'NUMBEROFPAGES' ),
'numberofarticles' => array( '1', '条目数', 'NUMBEROFARTICLES' ),
'numberoffiles' => array( '1', '文件数', 'NUMBEROFFILES' ),
'numberofedits' => array( '1', '编辑数', 'NUMBEROFEDITS' ),
'numberofviews' => array( '1', '访问数', 'NUMBEROFVIEWS' ),
'pagename' => array( '1', '页名', 'PAGENAME' ),
+ 'fullpagename' => array( '1', '全页名', 'FULLPAGENAME' ),
+ 'newsectionlink' => array( '1', '_新段落链接_', '__NEWSECTIONLINK__' ),
+ 'nonewsectionlink' => array( '1', '_无新段落链接_', '__NONEWSECTIONLINK__' ),
+ 'language' => array( '0', '#语言:', '#LANGUAGE:' ),
+ 'pagesize' => array( '1', '页面大小', 'PAGESIZE' ),
);
$linkTrail = '/^()(.*)$/sD';
'node-count-exceeded-category' => '页面的节点数超出限制',
'node-count-exceeded-warning' => '页面超出了节点数',
'expansion-depth-exceeded-category' => '扩展深度超出限制的页面',
+'expansion-depth-exceeded-warning' => '页面超过了扩展深度',
+'parser-unstrip-loop-warning' => '检测到回圈',
+'parser-unstrip-recursion-limit' => '递归超过限制 ($1)',
# "Undo" feature
'undo-success' => '此编辑可以被撤销。请检查以下比较以核实这正是您想做的,然后保存以下更改完成撤销编辑。',
# Diffs
'history-title' => '“$1”的版本历史',
+'difference-title' => '"$1"不同修订版本之间的差异',
+'difference-title-multipage' => '页面"$1"与"$2"之间的差异',
'difference-multipage' => '(页面间的差异)',
'lineno' => '第$1行:',
'compareselectedversions' => '对比选择的版本',
'nchanges' => '$1次更改',
'recentchanges' => '最近更改',
'recentchanges-legend' => '最近更改选项',
-'recentchangestext' => '本页面跟踪本wiki的最近更改。',
+'recentchanges-summary' => '跟踪这个wiki上的最新更改。',
'recentchanges-feed-description' => '跟踪订阅本wiki的最近更改。',
'recentchanges-label-newpage' => '这次编辑建立了一个新页面',
'recentchanges-label-minor' => '这是一个小编辑',
'backend-fail-writetemp' => '无法写临时文件。',
'backend-fail-closetemp' => '无法创建临时文件。',
'backend-fail-read' => '找不到文件“$1”。',
-'backend-fail-create' => 'æ\89¾ä¸\8då\88°æ\96\87件â\80\9c$1â\80\9d。',
-'backend-fail-maxsize' => 'æ\97 æ³\95å\88\9b建文件 $1,因为它大于$2字节。',
+'backend-fail-create' => 'æ\97 æ³\95å\86\99å\85¥æ\96\87件 $1 。',
+'backend-fail-maxsize' => 'æ\97 æ³\95å\86\99å\85¥文件 $1,因为它大于$2字节。',
'backend-fail-readonly' => '“$1”存储后端目前在只读模式,因为:“$2”',
'backend-fail-synced' => '文件"$1"在内部存储后端之中处于不一致状态',
'backend-fail-connect' => '无法连接到存储后端“$1。',
'http-curl-error' => '撷取URL时出错:$1',
'http-host-unreachable' => '无法到达URL。',
'http-bad-status' => '进行HTTP请求时出现问题:$1 $2',
-'http-truncated-body' => '只收到部分请求的正文。',
# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
'upload-curl-error6' => '无法访问URL',
'emailuser' => '电邮联系',
'emailpage' => '电邮联系',
'emailpagetext' => '您可以用下面的表格去寄一封电邮给这位用户。
-您在[[Special:Preferences|您参数设置]]中所输入的电子邮箱地址将出现在邮件"发件人"一栏中,这样该用户就可以回复您。',
+您在[[Special:Preferences|您的参数设置]]中所输入的电子邮箱地址将出现在邮件“发件人”一栏中,这样该用户就可以回复您。',
'usermailererror' => 'Mail 对象返回错误:',
-'defemailsubject' => "{{SITENAME}} 来自用户''$1''的电子邮件",
+'defemailsubject' => '{{SITENAME}}来自用户“$1”的电子邮件',
'usermaildisabled' => '用户电邮已停用',
'usermaildisabledtext' => '您不可以发送电邮到这个wiki上的其他用户',
'noemailtitle' => '无电子邮件地址',
'titleprotected' => "這個標題已經被[[User:$1|$1]]保護以防止建立。理由是''$2''。",
'filereadonlyerror' => '無法修改文件" $1 "因為文件庫" $2 "處於唯讀模式。 !
管理員鎖定它的解釋是:" $3 "。',
+'invalidtitle-knownnamespace' => '使用名字空間“$2”和文本“$3”的無效標題',
+'invalidtitle-unknownnamespace' => '使用未知名字空間編號$1和文本“$2”的無效標題',
# Virus scanner
'virus-badscanner' => "損壞設定: 未知的病毒掃瞄器: ''$1''",
'node-count-exceeded-warning' => '頁面超出節點數',
'expansion-depth-exceeded-category' => '擴展深度超出限制的頁面',
'expansion-depth-exceeded-warning' => '頁面超出擴展深度',
+'parser-unstrip-loop-warning' => '檢測到迴圈',
+'parser-unstrip-recursion-limit' => '遞歸超過限制 ($1)',
# "Undo" feature
'undo-success' => '該編輯可以被撤銷。請檢查以下對比以核實這正是您想做的,然後儲存以下更改以完成撤銷編輯。',
# Diffs
'history-title' => '「$1」的修訂歷史',
+'difference-title' => '"$1"修訂版本之間的差異',
+'difference-title-multipage' => '"$1"和"$2"頁面之間的差異',
'difference-multipage' => '(頁面間的差異)',
'lineno' => '第$1行:',
'compareselectedversions' => '比較選定的修訂版本',
'nchanges' => '$1次更改',
'recentchanges' => '近期變動',
'recentchanges-legend' => '最近更改選項',
-'recentchangestext' => '跟蹤這個wiki上的最新更改。',
+'recentchanges-summary' => '跟蹤這個wiki上的最新更改。',
'recentchanges-feed-description' => '追蹤此訂閱在 wiki 上的最近更改。',
'recentchanges-label-newpage' => '這次編輯建立了一個新頁面',
'recentchanges-label-minor' => '這是一個小編輯',
'backend-fail-writetemp' => '無法寫臨時文件。',
'backend-fail-closetemp' => '無法創建臨時文件。',
'backend-fail-read' => '找不到文件“$1”。',
-'backend-fail-create' => '找不到「$1」檔案。',
-'backend-fail-maxsize' => 'ç\84¡æ³\95å\89µå»º檔𣗈$1,因為它大於$2字節。',
+'backend-fail-create' => '無法寫入檔案 $1。',
+'backend-fail-maxsize' => 'ç\84¡æ³\95寫å\85¥檔𣗈$1,因為它大於$2字節。',
'backend-fail-readonly' => '「$1」儲存後端目前是唯讀模式,因為:「$2」',
'backend-fail-synced' => '文件"$1"在內部存儲後端是不一致的區域。',
'backend-fail-connect' => '無法連結至存儲後方“$1”。',
'backend-fail-internal' => '存儲後方“$1”發生了一個未知錯誤。',
'backend-fail-contenttype' => '無法確定檔案的內容類型以存儲於“$1”。',
'backend-fail-batchsize' => '存儲後端被給予了$1次檔𣗈 {{PLURAL:$1|操作|操作}} ;限制是$2次{{PLURAL:$2|操作|操作}}。',
+'backend-fail-usable' => '由於沒有足夠的權限或缺少路徑/容器,所以無法寫入檔𣗈 $1 。',
# File journal errors
'filejournal-fail-dbconnect' => '無法連接到後端存儲的日誌資料庫" $1 "。',
'emailuser' => 'E-mail該用戶',
'emailpage' => 'E-mail用戶',
'emailpagetext' => '您可以用下面的表格去寄一封電郵給這位用戶。
-您在[[Special:Preferences|您參數設置]]中所輸入的e-mail地址將出現在郵件「發件人」一欄中,這樣該用戶就可以回覆您。',
+您在[[Special:Preferences|您的參數設置]]中所輸入的電子郵件地址將出現在郵件「發件人」一欄中,這樣該用戶就可以回覆您。',
'usermailererror' => '目標郵件地址返回錯誤:',
-'defemailsubject' => '{{SITENAME}}用戶 $1 發送電子郵件',
+'defemailsubject' => '{{SITENAME}}來自用戶“$1”的電子郵件',
'usermaildisabled' => '用戶電郵已停用',
'usermaildisabledtext' => '您不可以發送電郵到這個wiki上的其他用戶',
'noemailtitle' => '無e-mail地址',
* @file
* @author Roan Kattouw
* @author Trevor Parscal
- *
*/
// Bail if PHP is too low
-<?php require './load.php';
\ No newline at end of file
+<?php
+/**
+ * Version of load.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+require './load.php';
fj_new_sha1 varbinary(32) NOT NULL default '',
-- Timestamp of the batch operation
fj_timestamp varbinary(14) NOT NULL default ''
-);
+) /*$wgDBTableOptions*/;
CREATE INDEX /*i*/fj_batch_id ON /*_*/filejournal (fj_batch_uuid);
CREATE INDEX /*i*/fj_timestamp ON /*_*/filejournal (fj_timestamp);
'pubmedurl',
'randompage-url',
'recentchanges-url',
+ 'recentchangestext',
'revision-info-current',
'revision-nav',
'rfcurl',
'recentchanges',
'recentchanges-url',
'recentchanges-legend',
+ 'recentchanges-summary',
'recentchangestext',
'recentchanges-feed-description',
'recentchanges-label-newpage',
'backend-fail-connect',
'backend-fail-internal',
'backend-fail-contenttype',
- 'backend-fail-batchsize'
+ 'backend-fail-batchsize',
+ 'backend-fail-usable'
),
'filejournal-errors' => array(
'http-curl-error',
'http-host-unreachable',
'http-bad-status',
- 'http-truncated-body',
),
'upload-curl-errors' => array(
public function doDBUpdates() {
$method = $this->getOption( 'method', 'normal' );
- $file = $this->getOption( 'file' );
+ $file = $this->getOption( 'file', '' );
$force = $this->getOption( 'force' );
+ $isRegen = ( $force || $file != '' ); // forced recalculation?
$t = -microtime( true );
$dbw = wfGetDB( DB_MASTER );
- if ( $file ) {
+ if ( $file != '' ) {
$res = $dbw->select(
'image',
array( 'img_name' ),
$oldImageTable = $dbw->tableName( 'oldimage' );
if ( $method == 'pipe' ) {
- // Opening a pipe allows the SHA-1 operation to be done in parallel
+ // Opening a pipe allows the SHA-1 operation to be done in parallel
// with the database write operation, because the writes are queued
- // in the pipe buffer. This can improve performance by up to a
- // factor of 2.
+ // in the pipe buffer. This can improve performance by up to a
+ // factor of 2.
global $wgDBuser, $wgDBserver, $wgDBpassword, $wgDBname;
$cmd = 'mysql -u' . wfEscapeShellArg( $wgDBuser ) .
' -h' . wfEscapeShellArg( $wgDBserver ) .
// Upgrade the current file version...
$sha1 = $file->getRepo()->getFileSha1( $file->getPath() );
if ( strval( $sha1 ) !== '' ) { // file on disk and hashed properly
- $sql = "UPDATE $imageTable SET img_sha1=" . $dbw->addQuotes( $sha1 ) .
- " WHERE img_name=" . $dbw->addQuotes( $file->getName() );
- if ( $method == 'pipe' ) {
- fwrite( $pipe, "$sql;\n" );
+ if ( $isRegen && $file->getSha1() !== $sha1 ) {
+ // The population was probably done already. If the old SHA1
+ // does not match, then both fix the SHA1 and the metadata.
+ $file->upgradeRow();
} else {
- $dbw->query( $sql, __METHOD__ );
+ $sql = "UPDATE $imageTable SET img_sha1=" . $dbw->addQuotes( $sha1 ) .
+ " WHERE img_name=" . $dbw->addQuotes( $file->getName() );
+ if ( $method == 'pipe' ) {
+ fwrite( $pipe, "$sql;\n" );
+ } else {
+ $dbw->query( $sql, __METHOD__ );
+ }
}
}
// Upgrade the old file versions...
foreach ( $file->getHistory() as $oldFile ) {
$sha1 = $oldFile->getRepo()->getFileSha1( $oldFile->getPath() );
if ( strval( $sha1 ) !== '' ) { // file on disk and hashed properly
- $sql = "UPDATE $oldImageTable SET oi_sha1=" . $dbw->addQuotes( $sha1 ) .
- " WHERE (oi_name=" . $dbw->addQuotes( $oldFile->getName() ) . " AND" .
- " oi_archive_name=" . $dbw->addQuotes( $oldFile->getArchiveName() ) . ")";
- if ( $method == 'pipe' ) {
- fwrite( $pipe, "$sql;\n" );
+ if ( $isRegen && $oldFile->getSha1() !== $sha1 ) {
+ // The population was probably done already. If the old SHA1
+ // does not match, then both fix the SHA1 and the metadata.
+ $oldFile->upgradeRow();
} else {
- $dbw->query( $sql, __METHOD__ );
+ $sql = "UPDATE $oldImageTable SET oi_sha1=" . $dbw->addQuotes( $sha1 ) .
+ " WHERE (oi_name=" . $dbw->addQuotes( $oldFile->getName() ) . " AND" .
+ " oi_archive_name=" . $dbw->addQuotes( $oldFile->getArchiveName() ) . ")";
+ if ( $method == 'pipe' ) {
+ fwrite( $pipe, "$sql;\n" );
+ } else {
+ $dbw->query( $sql, __METHOD__ );
+ }
}
}
}
protected function doSha1LegacyUpdates() {
$count = 0;
$db = $this->getDB( DB_MASTER );
- $res = $db->select( 'archive', '*', array( 'ar_rev_id IS NULL' ), __METHOD__ );
+ $res = $db->select( 'archive', '*',
+ array( 'ar_rev_id IS NULL', 'ar_sha1' => '' ), __METHOD__ );
$updateSize = 0;
$db->begin( __METHOD__ );
$db->update( $table,
array( "{$prefix}_sha1" => Revision::base36Sha1( $text ) ),
array( $idCol => $row->$idCol ),
- __METHOD__
+ __METHOD__
);
return true;
}
*/
protected function upgradeLegacyArchiveRow( $row ) {
$db = $this->getDB( DB_MASTER );
- $rev = Revision::newFromArchiveRow( $row );
+ try {
+ $rev = Revision::newFromArchiveRow( $row );
+ } catch ( MWException $e ) {
+ return false; // bug 22624?
+ }
$text = $rev->getRawText();
if ( !is_string( $text ) ) {
# This should not happen, but sometimes does (bug 20757)
'ar_timestamp' => $row->ar_timestamp,
'ar_len' => $row->ar_len // extra sanity
),
- __METHOD__
+ __METHOD__
);
return true;
}
--- /dev/null
+<?php
+/**
+ * Sync one file backend to another based on the journal of later.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @ingroup Maintenance
+ */
+
+require_once( dirname( __FILE__ ) . '/Maintenance.php' );
+
+class SyncFileBackend extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->mDescription = "Sync one file backend with another using the journal";
+ $this->addOption( 'src', 'Name of backend to sync from', true, true );
+ $this->addOption( 'dst', 'Name of destination backend to sync', true, true );
+ $this->addOption( 'start', 'Starting journal ID', false, true );
+ $this->addOption( 'end', 'Ending journal ID', false, true );
+ $this->addOption( 'posdir', 'Directory to read/record journal positions', false, true );
+ $this->addOption( 'verbose', 'Verbose mode', false, false, 'v' );
+ $this->setBatchSize( 50 );
+ }
+
+ public function execute() {
+ $src = FileBackendGroup::singleton()->get( $this->getOption( 'src' ) );
+ $dst = FileBackendGroup::singleton()->get( $this->getOption( 'dst' ) );
+
+ $posFile = $this->getOption( 'posdir' )
+ ? $this->getOption( 'posdir' ) . '/' . wfWikiID()
+ : false;
+
+ $start = $this->getOption( 'start', 0 );
+ if ( !$start && $posFile ) {
+ $start = is_file( $posFile )
+ ? (int)trim( file_get_contents( $posFile ) )
+ : 0;
+ ++$start; // we already did this ID, start with the next one
+ $startFromPosFile = true;
+ } else {
+ $startFromPosFile = false;
+ }
+ $end = $this->getOption( 'end', INF );
+
+ $this->output( "Synchronizing backend '{$dst->getName()}' to '{$src->getName()}'...\n" );
+ $this->output( "Starting journal position is $start.\n" );
+ if ( is_finite( $end ) ) {
+ $this->output( "Ending journal position is $end.\n" );
+ }
+
+ // Actually sync the dest backend with the reference backend
+ $lastOKPos = $this->syncBackends( $src, $dst, $start, $end );
+
+ // Update the sync position file
+ if ( $startFromPosFile && $lastOKPos >= $start ) { // successfully advanced
+ file_put_contents( $posFile, $lastOKPos, LOCK_EX );
+ $this->output( "Updated journal position file.\n" );
+ }
+
+ if ( $lastOKPos === false ) {
+ if ( !$start ) {
+ $this->output( "No journal entries found.\n" );
+ } else {
+ $this->output( "No new journal entries found.\n" );
+ }
+ } else {
+ $this->output( "Stopped synchronization at journal position $lastOKPos.\n" );
+ }
+
+ if ( $this->isQuiet() ) {
+ print $lastOKPos; // give a single machine-readable number
+ }
+ }
+
+ /**
+ * Sync $dst backend to $src backend based on the $src logs given after $start.
+ * Returns the journal entry ID this advanced to and handled (inclusive).
+ *
+ * @param $src FileBackend
+ * @param $dst FileBackend
+ * @param $start integer Starting journal position
+ * @param $end integer Starting journal position
+ * @return integer|false Journal entry ID or false if there are none
+ */
+ protected function syncBackends( FileBackend $src, FileBackend $dst, $start, $end ) {
+ $lastOKPos = 0; // failed
+ $first = true; // first batch
+
+ if ( $start > $end ) { // sanity
+ $this->error( "Error: given starting ID greater than ending ID.", 1 );
+ }
+
+ do {
+ $limit = min( $this->mBatchSize, $end - $start + 1 ); // don't go pass ending ID
+ $this->output( "Doing id $start to " . ( $start + $limit - 1 ) . "...\n" );
+
+ $entries = $src->getJournal()->getChangeEntries( $start, $limit, $next );
+ $start = $next; // start where we left off next time
+ if ( $first && !count( $entries ) ) {
+ return false; // nothing to do
+ }
+ $first = false;
+
+ $lastPosInBatch = 0;
+ $pathsInBatch = array(); // changed paths
+ foreach ( $entries as $entry ) {
+ if ( $entry['op'] !== 'null' ) { // null ops are just for reference
+ $pathsInBatch[$entry['path']] = 1; // remove duplicates
+ }
+ $lastPosInBatch = $entry['id'];
+ }
+
+ $status = $this->syncFileBatch( array_keys( $pathsInBatch ), $src, $dst );
+ if ( $status->isOK() ) {
+ $lastOKPos = max( $lastOKPos, $lastPosInBatch );
+ } else {
+ $this->output( print_r( $status->getErrorsArray(), true ) );
+ break; // no gaps; everything up to $lastPos must be OK
+ }
+
+ if ( !$start ) {
+ $this->output( "End of journal entries.\n" );
+ }
+ } while ( $start && $start <= $end );
+
+ return $lastOKPos;
+ }
+
+ /**
+ * Sync particular files of backend $src to the corresponding $dst backend files
+ *
+ * @param $paths Array
+ * @param $src FileBackend
+ * @param $dst FileBackend
+ * @return Status
+ */
+ protected function syncFileBatch( array $paths, FileBackend $src, FileBackend $dst ) {
+ $status = Status::newGood();
+ if ( !count( $paths ) ) {
+ return $status; // nothing to do
+ }
+
+ // Source: convert internal backend names (FileBackendMultiWrite) to the public one
+ $sPaths = $this->replaceNamePaths( $paths, $src );
+ // Destination: get corresponding path name
+ $dPaths = $this->replaceNamePaths( $paths, $dst );
+
+ // Lock the live backend paths from modification
+ $sLock = $src->getScopedFileLocks( $sPaths, LockManager::LOCK_UW, $status );
+ $eLock = $dst->getScopedFileLocks( $dPaths, LockManager::LOCK_EX, $status );
+ if ( !$status->isOK() ) {
+ return $status;
+ }
+
+ $ops = array();
+ $fsFiles = array();
+ foreach ( $sPaths as $i => $sPath ) {
+ $dPath = $dPaths[$i]; // destination
+ $sExists = $src->fileExists( array( 'src' => $sPath, 'latest' => 1 ) );
+ if ( $sExists === true ) { // exists in source
+ if ( $this->filesAreSame( $src, $dst, $sPath, $dPath ) ) {
+ continue; // avoid local copies for non-FS backends
+ }
+ // Note: getLocalReference() is fast for FS backends
+ $fsFile = $src->getLocalReference( array( 'src' => $sPath, 'latest' => 1 ) );
+ if ( !$fsFile ) {
+ $this->error( "Unable to sync '$dPath': could not get local copy." );
+ $status->fatal( 'backend-fail-internal', $src->getName() );
+ return $status;
+ }
+ $fsFiles[] = $fsFile; // keep TempFSFile objects alive as needed
+ // Note: prepare() is usually fast for key/value backends
+ $status->merge( $dst->prepare( array( 'dir' => dirname( $dPath ) ) ) );
+ if ( !$status->isOK() ) {
+ return $status;
+ }
+ $ops[] = array( 'op' => 'store',
+ 'src' => $fsFile->getPath(), 'dst' => $dPath, 'overwrite' => 1 );
+ } elseif ( $sExists === false ) { // does not exist in source
+ $ops[] = array( 'op' => 'delete', 'src' => $dPath, 'ignoreMissingSource' => 1 );
+ } else { // error
+ $this->error( "Unable to sync '$dPath': could not stat file." );
+ $status->fatal( 'backend-fail-internal', $src->getName() );
+ return $status;
+ }
+ }
+
+ $status->merge( $dst->doOperations( $ops,
+ array( 'nonLocking' => 1, 'nonJournaled' => 1 ) ) );
+ if ( $status->isOK() && $this->getOption( 'verbose' ) ) {
+ $this->output( "Synchronized these file(s):\n" . implode( "\n", $dPaths ) . "\n" );
+ }
+
+ return $status;
+ }
+
+ /**
+ * Substitute the backend name of storage paths with that of a given one
+ *
+ * @param $paths Array|string List of paths or single string path
+ * @return Array|string
+ */
+ protected function replaceNamePaths( $paths, FileBackend $backend ) {
+ return preg_replace(
+ '!^mwstore://([^/]+)!',
+ StringUtils::escapeRegexReplacement( "mwstore://" . $backend->getName() ),
+ $paths // string or array
+ );
+ }
+
+ protected function filesAreSame( FileBackend $src, FileBackend $dst, $sPath, $dPath ) {
+ return (
+ ( $src->getFileSize( array( 'src' => $sPath ) )
+ === $dst->getFileSize( array( 'src' => $dPath ) ) // short-circuit
+ ) && ( $src->getFileSha1Base36( array( 'src' => $sPath ) )
+ === $dst->getFileSha1Base36( array( 'src' => $dPath ) )
+ )
+ );
+ }
+}
+
+$maintClass = "SyncFileBackend";
+require_once( RUN_MAINTENANCE_IF_MAIN );
<?php
-
/**
- * Generate an OpenSearch description file
+ * Generate an OpenSearch description file.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
-<?php require './opensearch_desc.php';
\ No newline at end of file
+<?php
+/**
+ * Version of opensearch_desc.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+require './opensearch_desc.php';
<?php
-
/**
* Script that redirects to the article passed in the "wpDropdown" parameter.
* This is used by the nostalgia skin for the special pages drop-down
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
*/
+
if ( isset( $_SERVER['MW_COMPILED'] ) ) {
require ( 'phase3/includes/WebStart.php' );
} else {
-<?php require './redirect.php';
\ No newline at end of file
+<?php
+/**
+ * Version of redirect.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+require './redirect.php';
* Get address to a script in the wiki root.
* For index.php use mw.config.get( 'wgScript' )
*
+ * @since 1.18
* @param str string Name of script (eg. 'api'), defaults to 'index'
* @return string Address to script (eg. '/w/api.php' )
*/
!! input
{{Special:Prefixindex/Xyzzyx}}
!! result
-<p><br />
-</p>
<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
!! end
{{Special:Prefixindex/Xyzzyx}}
{{Special:Prefixindex/Xyzzyx}}
!! result
-<p><br />
-</p>
<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
-<p><br />
-</p>
<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
!! end
<?php
/**
* Tests for IP validity functions. Ported from /t/inc/IP.t by avar.
+ * @group IP
*/
class IPTest extends MediaWikiTestCase {
array( '0:c1:A2:3:4:5:c6:7', '0:C1:A2:3:4:5:C6:7', 'IPv6 non range' ),
);
}
+
+ /**
+ * Test for IP::prettifyIP()
+ * @dataProvider provideIPsToPrettify
+ */
+ function testPrettifyIP( $ip, $prettified ) {
+ $this->assertEquals( $prettified, IP::prettifyIP( $ip ), "Prettify of $ip" );
+ }
+
+ /**
+ * Provider for IP::testPrettifyIP()
+ */
+ function provideIPsToPrettify() {
+ return array(
+ array( '0:0:0:0:0:0:0:0', '::' ),
+ array( '0:0:0::0:0:0', '::' ),
+ array( '0:0:0:1:0:0:0:0', '0:0:0:1::' ),
+ array( '0:0::f', '::f' ),
+ array( '0::0:0:0:33:fef:b', '::33:fef:b' ),
+ array( '3f:535:0:0:0:0:e:fbb', '3f:535::e:fbb' ),
+ array( '0:0:fef:0:0:0:e:fbb', '0:0:fef::e:fbb' ),
+ array( 'abbc:2004::0:0:0:0', 'abbc:2004::' ),
+ array( 'cebc:2004:f:0:0:0:0:0', 'cebc:2004:f::' ),
+ array( '0:0:0:0:0:0:0:0/16', '::/16' ),
+ array( '0:0:0::0:0:0/64', '::/64' ),
+ array( '0:0::f/52', '::f/52' ),
+ array( '::0:0:33:fef:b/52', '::33:fef:b/52' ),
+ array( '3f:535:0:0:0:0:e:fbb/48', '3f:535::e:fbb/48' ),
+ array( '0:0:fef:0:0:0:e:fbb/96', '0:0:fef::e:fbb/96' ),
+ array( 'abbc:2004:0:0::0:0/40', 'abbc:2004::/40' ),
+ array( 'aebc:2004:f:0:0:0:0:0/80', 'aebc:2004:f::/80' ),
+ );
+ }
}
$this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' );
}
+ public function testDoDeleteUpdates() {
+ $page = $this->createPage( "WikiPageTest_testDoDeleteArticle", "[[original text]] foo" );
+ $id = $page->getId();
+
+ $page->doDeleteUpdates( $id );
+
+ # ------------------------
+ $dbr = wfGetDB( DB_SLAVE );
+ $res = $dbr->select( 'pagelinks', '*', array( 'pl_from' => $id ) );
+ $n = $res->numRows();
+ $res->free();
+
+ $this->assertEquals( 0, $n, 'pagelinks should contain no more links from the page' );
+ }
+
public function testGetRevision() {
$page = $this->newPage( "WikiPageTest_testGetRevision" );
class FileBackendTest extends MediaWikiTestCase {
private $backend, $multiBackend;
private $filesToPrune = array();
- private $dirsToPrune = array();
private static $backendToUse;
function setUp() {
return $cases;
}
+ public function testDoQuickOperations() {
+ $this->backend = $this->singleBackend;
+ $this->doTestDoQuickOperations();
+ $this->tearDownFiles();
+
+ $this->backend = $this->multiBackend;
+ $this->doTestDoQuickOperations();
+ $this->tearDownFiles();
+ }
+
+ private function doTestDoQuickOperations() {
+ $backendName = $this->backendClass();
+
+ $base = $this->baseStorePath();
+ $files = array(
+ "$base/unittest-cont1/fileA.a",
+ "$base/unittest-cont1/fileB.a",
+ "$base/unittest-cont1/fileC.a"
+ );
+ $ops = array();
+ $purgeOps = array();
+ foreach ( $files as $path ) {
+ $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
+ $this->assertGoodStatus( $status,
+ "Preparing $path succeeded without warnings ($backendName)." );
+ $ops[] = array( 'op' => 'create', 'dst' => $path, 'content' => mt_rand(0,50000) );
+ $purgeOps[] = array( 'op' => 'delete', 'src' => $path );
+ }
+ $purgeOps[] = array( 'op' => 'null' );
+ $status = $this->backend->doQuickOperations( $ops );
+ $this->assertGoodStatus( $status,
+ "Creation of source files succeeded ($backendName)." );
+
+ foreach ( $files as $file ) {
+ $this->assertTrue( $this->backend->fileExists( array( 'src' => $file ) ),
+ "File $file exists." );
+ }
+
+ $status = $this->backend->doQuickOperations( $purgeOps );
+ $this->assertGoodStatus( $status,
+ "Quick deletion of source files succeeded ($backendName)." );
+
+ foreach ( $files as $file ) {
+ $this->assertFalse( $this->backend->fileExists( array( 'src' => $file ) ),
+ "File $file purged." );
+ }
+ }
+
/**
* @dataProvider provider_testConcatenate
*/
if ( $alreadyExists ) {
$this->prepare( array( 'dir' => dirname( $path ) ) );
- $status = $this->backend->create( array( 'dst' => $path, 'content' => $content ) );
+ $status = $this->create( array( 'dst' => $path, 'content' => $content ) );
$this->assertGoodStatus( $status,
"Creation of file at $path succeeded ($backendName)." );
$this->assertEquals( strlen( $content ), $size,
"Correct file size of '$path'" );
- $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 5,
+ $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
"Correct file timestamp of '$path'" );
$size = $stat['size'];
$time = $stat['mtime'];
$this->assertEquals( strlen( $content ), $size,
"Correct file size of '$path'" );
- $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 5,
+ $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
"Correct file timestamp of '$path'" );
} else {
$size = $this->backend->getFileSize( array( 'src' => $path ) );
$this->prepare( array( 'dir' => dirname( $source ) ) );
- $status = $this->backend->doOperation(
- array( 'op' => 'create', 'content' => $content, 'dst' => $source ) );
+ $status = $this->create( array( 'content' => $content, 'dst' => $source ) );
$this->assertGoodStatus( $status,
"Creation of file at $source succeeded ($backendName)." );
$this->tearDownFiles();
}
- function doTestRecursiveClean() {
+ private function doTestRecursiveClean() {
$backendName = $this->backendClass();
$base = $this->baseStorePath();
$fileD = "$base/unittest-cont1/a/b/fileD.txt";
$this->prepare( array( 'dir' => dirname( $fileA ) ) );
- $this->backend->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
+ $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
$this->prepare( array( 'dir' => dirname( $fileB ) ) );
- $this->backend->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
+ $this->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
$this->prepare( array( 'dir' => dirname( $fileC ) ) );
- $this->backend->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
+ $this->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
$this->prepare( array( 'dir' => dirname( $fileD ) ) );
$status = $this->backend->doOperations( array(
}
// concurrency orientated
- function doTestDoOperations2() {
+ private function doTestDoOperations2() {
$base = $this->baseStorePath();
$fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
$fileD = "$base/unittest-cont1/a/b/fileD.txt";
$this->prepare( array( 'dir' => dirname( $fileA ) ) );
- $this->backend->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
+ $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
$this->prepare( array( 'dir' => dirname( $fileB ) ) );
$this->prepare( array( 'dir' => dirname( $fileC ) ) );
$this->prepare( array( 'dir' => dirname( $fileD ) ) );
"Correct file SHA-1 of $fileC" );
}
- function doTestDoOperationsFailing() {
+ private function doTestDoOperationsFailing() {
$base = $this->baseStorePath();
$fileA = "$base/unittest-cont2/a/b/fileA.txt";
$fileD = "$base/unittest-cont2/a/b/fileD.txt";
$this->prepare( array( 'dir' => dirname( $fileA ) ) );
- $this->backend->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
+ $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
$this->prepare( array( 'dir' => dirname( $fileB ) ) );
- $this->backend->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
+ $this->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
$this->prepare( array( 'dir' => dirname( $fileC ) ) );
- $this->backend->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
+ $this->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
$status = $this->backend->doOperations( array(
array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC, 'overwrite' => 1 ),
$this->prepare( array( 'dir' => dirname( $file ) ) );
$ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
}
- $status = $this->backend->doOperations( $ops );
+ $status = $this->backend->doQuickOperations( $ops );
$this->assertGoodStatus( $status,
"Creation of files succeeded ($backendName)." );
$this->assertEquals( true, $status->isOK(),
$this->prepare( array( 'dir' => dirname( $file ) ) );
$ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
}
- $status = $this->backend->doOperations( $ops );
+ $status = $this->backend->doQuickOperations( $ops );
$this->assertGoodStatus( $status,
"Creation of files succeeded ($backendName)." );
$this->assertEquals( true, $status->isOK(),
// test helper wrapper for backend prepare() function
private function prepare( array $params ) {
- $this->dirsToPrune[] = $params['dir'];
return $this->backend->prepare( $params );
}
+ // test helper wrapper for backend prepare() function
+ private function create( array $params ) {
+ $params['op'] = 'create';
+ return $this->backend->doQuickOperations( array( $params ) );
+ }
+
function tearDownFiles() {
foreach ( $this->filesToPrune as $file ) {
@unlink( $file );
foreach ( $containers as $container ) {
$this->deleteFiles( $container );
}
- foreach ( $this->dirsToPrune as $dir ) {
- $this->recursiveClean( $dir );
- }
- $this->filesToPrune = $this->dirsToPrune = array();
+ $this->filesToPrune = array();
}
private function deleteFiles( $container ) {
array( 'force' => 1, 'nonLocking' => 1 ) );
}
}
- }
-
- private function recursiveClean( $dir ) {
- $this->backend->clean( array( 'dir' => $dir, 'recursive' => 1 ) );
+ $this->backend->clean( array( 'dir' => "$base/$container", 'recursive' => 1 ) );
}
function assertGoodStatus( $status, $msg ) {
<?php
-
/**
* PHP script to stream out an image thumbnail.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @file
* @ingroup Media
*/
+
define( 'MW_NO_OUTPUT_COMPRESSION', 1 );
if ( isset( $_SERVER['MW_COMPILED'] ) ) {
require( 'core/includes/WebStart.php' );
-<?php require './thumb.php';
\ No newline at end of file
+<?php
+/**
+ * Version of thumb.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+require './thumb.php';
<?php
+/**
+ * PHP script to be used as 404 handler to create and stream out a
+ * not yet existing image thumbnail.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
-# Valid web server entry point
define( 'THUMB_HANDLER', true );
# Execute thumb.php, having set THUMB_HANDLER so that
-<?php require './thumb_handler.php';
+<?php
+/**
+ * Version of thumb_handler.php to used in web server requiring .php5 extension
+ * to execute scripts with PHP5 egine.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+require './thumb_handler.php';