* (bug 23006) create #speciale parser function.
* generateSitemap can now optionally skip redirect pages.
* (bug 27757) new API command just for retrieving tokens (not page-based)
+* Added GitViewers hook for extensions using external git repositories to have a web-based
+ repository viewer linked to from Special:Version.
+* Memcached debug logs can now be sent to their own file logs by setting
+ $wgDebugLogFile['memcached'] to some filepath.
+* (bug 35685) api.php URL and other entry point URLs are now listed on
+ Special:Version
=== Bug fixes in 1.20 ===
* (bug 30245) Use the correct way to construct a log page title.
* (bug 12021) Added user talk link on Special:Listusers.
* (bug 34445) section edit and TOC hide/show links are excluded from selection and
copy/paste on supporting browsers.
-* (bug 34428) Fixed incorrect hash mismatch errors in the DiffHistoryBlob
+* (bug 34428) Fixed incorrect hash mismatch errors in the DiffHistoryBlob
history compression method.
* (bug 34702) Localised parentheses are now used in more special pages.
* (bug 34723) When editing a script page on a RTL wiki the textbox should be LTR.
* (bug 34863) Show deletion log extract on non-existent file pages if applicable.
* (bug 28019) Let ?preloadtitle=foo be passed on to target of
Special:MyPage and Special:MyTalk.
-* (bug 34929) Show the correct diff when a section edit is rejected by the spam
+* (bug 34929) Show the correct diff when a section edit is rejected by the spam
filter.
* (bug 15816) Add a switch for SETting the search_path (Postgres).
* (bug 34521) Returning to the previous page after logging in loses any array-
* (bug 34192) Namespace gender aliases for Albanian languages (sq & aln).
* (bug 35541) Namespace gender aliases for Croatian (hr).
* Mizo (lus) added.
+* (bug 36012) Space in $separatorTransformTable should be non-breaking in
+ Portuguese, Esperanto and Udmurt.
=== Other changes in 1.20 ===
* The user_token field is now left empty until a user attempts to login and
This directory is for the auto-generated phpunit code coverage.
-Run 'make coverage' in the maintenance/tests/phpunit subdirectory to build.
+Run 'make coverage' in the tests/phpunit subdirectory to build.
'getUserPermissionsErrorsExpensive': Absolutely the same, but is called only
if expensive checks are enabled.
+'GitViewers': called when generating the list of git viewers for Special:Version, use
+ this to change the list.
+&$extTypes: associative array of repo URLS to viewer URLs.
+
+
'ImageBeforeProduceHTML': Called before producing the HTML created by a wiki
image insertion. You can skip the default logic entirely by returning
false, or just modify a few things using call-by-reference.
'BadTitleError' => 'includes/Exception.php',
'BaseTemplate' => 'includes/SkinTemplate.php',
'Block' => 'includes/Block.php',
+ 'CacheHelper' => 'includes/CacheHelper.php',
'Category' => 'includes/Category.php',
'Categoryfinder' => 'includes/Categoryfinder.php',
'CategoryPage' => 'includes/CategoryPage.php',
'CookieJar' => 'includes/Cookie.php',
'MWCryptRand' => 'includes/CryptRand.php',
'CurlHttpRequest' => 'includes/HttpFunctions.php',
-// 'DBDataObject' => 'includes/DBDataObject.php',
-// 'DBTable' => 'includes/DBTable.php',
'DeferrableUpdate' => 'includes/DeferredUpdates.php',
'DeferredUpdates' => 'includes/DeferredUpdates.php',
'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
'Http' => 'includes/HttpFunctions.php',
'HttpError' => 'includes/Exception.php',
'HttpRequest' => 'includes/HttpFunctions.old.php',
+ 'ICacheHelper' => 'includes/CacheHelper.php',
'IcuCollation' => 'includes/Collation.php',
'IdentityCollation' => 'includes/Collation.php',
'ImageGallery' => 'includes/ImageGallery.php',
'ZipDirectoryReader' => 'includes/ZipDirectoryReader.php',
# includes/actions
+ 'CachedAction' => 'includes/actions/CachedAction.php',
'CreditsAction' => 'includes/actions/CreditsAction.php',
'DeleteAction' => 'includes/actions/DeleteAction.php',
'EditAction' => 'includes/actions/EditAction.php',
'ApiPurge' => 'includes/api/ApiPurge.php',
'ApiQuery' => 'includes/api/ApiQuery.php',
'ApiQueryAllCategories' => 'includes/api/ApiQueryAllCategories.php',
- 'ApiQueryAllimages' => 'includes/api/ApiQueryAllimages.php',
+ 'ApiQueryAllImages' => 'includes/api/ApiQueryAllImages.php',
'ApiQueryAllLinks' => 'includes/api/ApiQueryAllLinks.php',
- 'ApiQueryAllmessages' => 'includes/api/ApiQueryAllmessages.php',
- 'ApiQueryAllpages' => 'includes/api/ApiQueryAllpages.php',
+ 'ApiQueryAllMessages' => 'includes/api/ApiQueryAllMessages.php',
+ 'ApiQueryAllPages' => 'includes/api/ApiQueryAllPages.php',
'ApiQueryAllUsers' => 'includes/api/ApiQueryAllUsers.php',
'ApiQueryBacklinks' => 'includes/api/ApiQueryBacklinks.php',
'ApiQueryBase' => 'includes/api/ApiQueryBase.php',
'MySQLMasterPos' => 'includes/db/DatabaseMysql.php',
'ORAField' => 'includes/db/DatabaseOracle.php',
'ORAResult' => 'includes/db/DatabaseOracle.php',
+ 'ORMResult' => 'includes/db/ORMResult.php',
+ 'ORMRow' => 'includes/db/ORMRow.php',
+ 'ORMTable' => 'includes/db/ORMTable.php',
'PostgresField' => 'includes/db/DatabasePostgres.php',
'ResultWrapper' => 'includes/db/DatabaseUtility.php',
'SQLiteField' => 'includes/db/DatabaseSqlite.php',
'SpecialBlockList' => 'includes/specials/SpecialBlockList.php',
'SpecialBlockme' => 'includes/specials/SpecialBlockme.php',
'SpecialBookSources' => 'includes/specials/SpecialBooksources.php',
+ 'SpecialCachedPage' => 'includes/specials/SpecialCachedPage.php',
'SpecialCategories' => 'includes/specials/SpecialCategories.php',
'SpecialChangeEmail' => 'includes/specials/SpecialChangeEmail.php',
'SpecialChangePassword' => 'includes/specials/SpecialChangePassword.php',
--- /dev/null
+<?php
+
+/**
+ * Interface for all classes implementing CacheHelper functionality.
+ *
+ * @since 1.20
+ *
+ * @licence GNU GPL v2 or later
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+interface ICacheHelper {
+
+ /**
+ * Sets if the cache should be enabled or not.
+ *
+ * @since 1.20
+ * @param boolean $cacheEnabled
+ */
+ function setCacheEnabled( $cacheEnabled );
+
+ /**
+ * Initializes the caching.
+ * Should be called before the first time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ *
+ * @param integer|null $cacheExpiry Sets the cache expiry, either ttl in seconds or unix timestamp.
+ * @param boolean|null $cacheEnabled Sets if the cache should be enabled or not.
+ */
+ function startCache( $cacheExpiry = null, $cacheEnabled = null );
+
+ /**
+ * Get a cached value if available or compute it if not and then cache it if possible.
+ * The provided $computeFunction is only called when the computation needs to happen
+ * and should return a result value. $args are arguments that will be passed to the
+ * compute function when called.
+ *
+ * @since 1.20
+ *
+ * @param {function} $computeFunction
+ * @param array|mixed $args
+ * @param string|null $key
+ *
+ * @return mixed
+ */
+ function getCachedValue( $computeFunction, $args = array(), $key = null );
+
+ /**
+ * Saves the HTML to the cache in case it got recomputed.
+ * Should be called after the last time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ */
+ function saveCache();
+
+ /**
+ * Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry..
+ *
+ * @since 1.20
+ *
+ * @param integer $cacheExpiry
+ */
+ function setExpiry( $cacheExpiry );
+
+}
+
+/**
+ * Helper class for caching various elements in a single cache entry.
+ *
+ * To get a cached value or compute it, use getCachedValue like this:
+ * $this->getCachedValue( $callback );
+ *
+ * To add HTML that should be cached, use addCachedHTML like this:
+ * $this->addCachedHTML( $callback );
+ *
+ * The callback function is only called when needed, so do all your expensive
+ * computations here. This function should returns the HTML to be cached.
+ * It should not add anything to the PageOutput object!
+ *
+ * Before the first addCachedHTML call, you should call $this->startCache();
+ * 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 {
+
+ /**
+ * The time to live for the cache, in seconds or a unix timestamp indicating the point of expiry.
+ *
+ * @since 1.20
+ * @var integer
+ */
+ protected $cacheExpiry = 3600;
+
+ /**
+ * List of HTML chunks to be cached (if !hasCached) or that where cached (of hasCached).
+ * If not cached already, then the newly computed chunks are added here,
+ * if it as cached already, chunks are removed from this list as they are needed.
+ *
+ * @since 1.20
+ * @var array
+ */
+ protected $cachedChunks;
+
+ /**
+ * Indicates if the to be cached content was already cached.
+ * Null if this information is not available yet.
+ *
+ * @since 1.20
+ * @var boolean|null
+ */
+ protected $hasCached = null;
+
+ /**
+ * If the cache is enabled or not.
+ *
+ * @since 1.20
+ * @var boolean
+ */
+ protected $cacheEnabled = true;
+
+ /**
+ * Function that gets called when initialization is done.
+ *
+ * @since 1.20
+ * @var function
+ */
+ protected $onInitHandler = false;
+
+ /**
+ * Sets if the cache should be enabled or not.
+ *
+ * @since 1.20
+ * @param boolean $cacheEnabled
+ */
+ public function setCacheEnabled( $cacheEnabled ) {
+ $this->cacheEnabled = $cacheEnabled;
+ }
+
+ /**
+ * Initializes the caching.
+ * Should be called before the first time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ *
+ * @param integer|null $cacheExpiry Sets the cache expiry, either ttl in seconds or unix timestamp.
+ * @param boolean|null $cacheEnabled Sets if the cache should be enabled or not.
+ */
+ public function startCache( $cacheExpiry = null, $cacheEnabled = null ) {
+ if ( is_null( $this->hasCached ) ) {
+ if ( !is_null( $cacheExpiry ) ) {
+ $this->cacheExpiry = $cacheExpiry;
+ }
+
+ if ( !is_null( $cacheEnabled ) ) {
+ $this->setCacheEnabled( $cacheEnabled );
+ }
+
+ $this->initCaching();
+ }
+ }
+
+ /**
+ * Returns a message that notifies the user he/she is looking at
+ * a cached version of the page, including a refresh link.
+ *
+ * @since 1.20
+ *
+ * @param IContextSource $context
+ * @param boolean $includePurgeLink
+ *
+ * @return string
+ */
+ public function getCachedNotice( IContextSource $context, $includePurgeLink = true ) {
+ if ( $this->cacheExpiry < 86400 * 3650 ) {
+ $message = $context->msg(
+ 'cachedspecial-viewing-cached-ttl',
+ $context->getLanguage()->formatDuration( $this->cacheExpiry )
+ )->escaped();
+ }
+ else {
+ $message = $context->msg(
+ 'cachedspecial-viewing-cached-ts'
+ )->escaped();
+ }
+
+ if ( $includePurgeLink ) {
+ $refreshArgs = $context->getRequest()->getQueryValues();
+ unset( $refreshArgs['title'] );
+ $refreshArgs['action'] = 'purge';
+
+ $subPage = $context->getTitle()->getFullText();
+ $subPage = explode( '/', $subPage, 2 );
+ $subPage = count( $subPage ) > 1 ? $subPage[1] : false;
+
+ $message .= ' ' . Linker::link(
+ $context->getTitle( $subPage ),
+ $context->msg( 'cachedspecial-refresh-now' )->escaped(),
+ array(),
+ $refreshArgs
+ );
+ }
+
+ return $message;
+ }
+
+ /**
+ * Initializes the caching if not already done so.
+ * Should be called before any of the caching functionality is used.
+ *
+ * @since 1.20
+ */
+ protected function initCaching() {
+ if ( $this->cacheEnabled && is_null( $this->hasCached ) ) {
+ $cachedChunks = wfGetCache( CACHE_ANYTHING )->get( $this->getCacheKeyString() );
+
+ $this->hasCached = is_array( $cachedChunks );
+ $this->cachedChunks = $this->hasCached ? $cachedChunks : array();
+
+ if ( $this->onInitHandler !== false ) {
+ call_user_func( $this->onInitHandler, $this->hasCached );
+ }
+ }
+ }
+
+ /**
+ * Get a cached value if available or compute it if not and then cache it if possible.
+ * The provided $computeFunction is only called when the computation needs to happen
+ * and should return a result value. $args are arguments that will be passed to the
+ * compute function when called.
+ *
+ * @since 1.20
+ *
+ * @param {function} $computeFunction
+ * @param array|mixed $args
+ * @param string|null $key
+ *
+ * @return mixed
+ */
+ public function getCachedValue( $computeFunction, $args = array(), $key = null ) {
+ $this->initCaching();
+
+ if ( $this->cacheEnabled && $this->hasCached ) {
+ $value = null;
+
+ if ( is_null( $key ) ) {
+ $itemKey = array_keys( array_slice( $this->cachedChunks, 0, 1 ) );
+ $itemKey = array_shift( $itemKey );
+
+ if ( !is_integer( $itemKey ) ) {
+ wfWarn( "Attempted to get item with non-numeric key while the next item in the queue has a key ($itemKey) in " . __METHOD__ );
+ }
+ elseif ( is_null( $itemKey ) ) {
+ wfWarn( "Attempted to get an item while the queue is empty in " . __METHOD__ );
+ }
+ else {
+ $value = array_shift( $this->cachedChunks );
+ }
+ }
+ else {
+ if ( array_key_exists( $key, $this->cachedChunks ) ) {
+ $value = $this->cachedChunks[$key];
+ unset( $this->cachedChunks[$key] );
+ }
+ else {
+ wfWarn( "There is no item with key '$key' in this->cachedChunks in " . __METHOD__ );
+ }
+ }
+ }
+ else {
+ if ( !is_array( $args ) ) {
+ $args = array( $args );
+ }
+
+ $value = call_user_func_array( $computeFunction, $args );
+
+ if ( $this->cacheEnabled ) {
+ if ( is_null( $key ) ) {
+ $this->cachedChunks[] = $value;
+ }
+ else {
+ $this->cachedChunks[$key] = $value;
+ }
+ }
+ }
+
+ return $value;
+ }
+
+ /**
+ * Saves the HTML to the cache in case it got recomputed.
+ * Should be called after the last time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ */
+ public function saveCache() {
+ if ( $this->cacheEnabled && $this->hasCached === false && !empty( $this->cachedChunks ) ) {
+ wfGetCache( CACHE_ANYTHING )->set( $this->getCacheKeyString(), $this->cachedChunks, $this->cacheExpiry );
+ }
+ }
+
+ /**
+ * Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry..
+ *
+ * @since 1.20
+ *
+ * @param integer $cacheExpiry
+ */
+ public function setExpiry( $cacheExpiry ) {
+ $this->cacheExpiry = $cacheExpiry;
+ }
+
+ /**
+ * Returns the cache key to use to cache this page's HTML output.
+ * Is constructed from the special page name and language code.
+ *
+ * @since 1.20
+ *
+ * @return string
+ */
+ protected function getCacheKeyString() {
+ return call_user_func_array( 'wfMemcKey', $this->cacheKey );
+ }
+
+ /**
+ * Sets the cache key that should be used.
+ *
+ * @since 1.20
+ *
+ * @param array $cacheKey
+ */
+ public function setCacheKey( array $cacheKey ) {
+ $this->cacheKey = $cacheKey;
+ }
+
+ /**
+ * Rebuild the content, even if it's already cached.
+ * This effectively has the same effect as purging the cache,
+ * since it will be overridden with the new value on the next request.
+ *
+ * @since 1.20
+ */
+ public function rebuildOnDemand() {
+ $this->hasCached = false;
+ }
+
+ /**
+ * Sets a function that gets called when initialization of the cache is done.
+ *
+ * @since 1.20
+ *
+ * @param $handlerFunction
+ */
+ public function setOnInitializedHandler( $handlerFunction ) {
+ $this->onInitHandler = $handlerFunction;
+ }
+
+}
\ No newline at end of file
$content = htmlspecialchars( $this->content );
}
- print "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n".
+ print "<!DOCTYPE html>\n".
"<html><head><title>$header</title></head>\n" .
"<body><h1>$header</h1><p>$content</p></body></html>\n";
}
protected $basedir;
/**
- * Map of repo URLs to viewer URLs.
- * Key is a pattern passed to preg_match() and preg_replace(),
- * without the delimiters (which are #) and must match the whole URL.
- * The value is the replacement for the key (it can contain $1, etc.)
- * %h will be replaced by the short SHA-1 (7 first chars) and %H by the
- * full SHA-1 of the HEAD revision.
+ * Map of repo URLs to viewer URLs. Access via static method getViewers().
*/
- protected $viewers = array(
- 'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
- 'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
- );
+ private static $viewers = false;
/**
- * @param $dir The root directory of the repo where the .git dir can be found
+ * @param $dir string The root directory of the repo where the .git dir can be found
*/
public function __construct( $dir ) {
$this->basedir = "{$dir}/.git/";
/**
* Check if a string looks like a hex encoded SHA1 hash
*
- * @param $str The string to check
+ * @param $str string The string to check
* @return bool Whether or not the string looks like a SHA1
*/
public static function isSHA1( $str ) {
/**
* Get an URL to a web viewer link to the HEAD revision.
*
- * @return string|false string if an URL is available or false otherwise.
+ * @return string|bool string if an URL is available or false otherwise.
*/
public function getHeadViewUrl() {
$config = "{$this->basedir}/config";
if ( substr( $url, -4 ) !== '.git' ) {
$url .= '.git';
}
- foreach( $this->viewers as $repo => $viewer ) {
- $m = array();
+ foreach( self::getViewers() as $repo => $viewer ) {
$pattern = '#^' . $repo . '$#';
if ( preg_match( $pattern, $url ) ) {
$viewerUrl = preg_replace( $pattern, $viewer, $url );
/**
* @see self::getHeadSHA1
+ * @return string
*/
public static function headSHA1() {
return self::repo()->getHeadSHA1();
/**
* @see self::getCurrentBranch
+ * @return string
*/
public static function currentBranch() {
return self::repo()->getCurrentBranch();
/**
* @see self::getHeadViewUrl()
+ * @return bool|string
*/
public static function headViewUrl() {
return self::repo()->getHeadViewUrl();
}
+
+ /**
+ * Gets the list of repository viewers
+ * @return array
+ */
+ protected static function getViewers() {
+ if( self::$viewers === false ) {
+
+ // Map of repo URLs to viewer URLs.
+ //
+ // Key is a pattern passed to preg_match() and preg_replace(),
+ // without the delimiters (which are #) and must match the whole URL.
+ // The value is the replacement for the key (it can contain $1, etc.)
+ // %h will be replaced by the short SHA-1 (7 first chars) and %H by the
+ // full SHA-1 of the HEAD revision.
+ self::$viewers = array(
+ 'https://gerrit.wikimedia.org/r/p/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
+ 'ssh://(?:[a-z0-9_]+@)?gerrit.wikimedia.org:29418/(.*)' => 'https://gerrit.wikimedia.org/r/gitweb?p=$1;h=%H',
+ );
+
+ wfRunHooks( 'GitViewers', array( &self::$viewers ) );
+ }
+
+ return self::$viewers;
+ }
}
*
* @todo Need to integrate this into wfExpandUrl (bug 32168)
*
+ * @since 1.19
* @param $urlParts Array URL parts, as output from wfParseUrl
* @return string URL assembled from its component parts
*/
if( !$ok ) {
// PHP doesn't report the path in its warning message, so add our own to aid in diagnosis.
- trigger_error( __FUNCTION__ . ": failed to mkdir \"$dir\" mode $mode", E_USER_WARNING );
+ trigger_error( sprintf( "%s: failed to mkdir \"%s\" mode 0%o", __FUNCTION__, $dir, $mode ),
+ E_USER_WARNING );
}
return $ok;
}
$attribs['readonly'] = 'readonly';
}
+ if ( !empty( $this->mParams['placeholder'] ) ) {
+ $attribs['placeholder'] = $this->mParams['placeholder'];
+ }
+
foreach ( array( 'required', 'autofocus' ) as $param ) {
if ( isset( $this->mParams[$param] ) ) {
$attribs[$param] = '';
* @param $title Title object of the image that is added to the gallery
* @param $html String: Additional HTML text to be shown. The name and size of the image are always shown.
* @param $alt String: Alt text for the image
+ * @param $link String: Override image link (optional)
*/
- function add( $title, $html = '', $alt = '' ) {
+ function add( $title, $html = '', $alt = '', $link = '') {
if ( $title instanceof File ) {
// Old calling convention
$title = $title->getTitle();
}
- $this->mImages[] = array( $title, $html, $alt );
+ $this->mImages[] = array( $title, $html, $alt, $link );
wfDebug( 'ImageGallery::add ' . $title->getText() . "\n" );
}
/**
- * Add an image at the beginning of the gallery.
- *
- * @param $title Title object of the image that is added to the gallery
- * @param $html String: Additional HTML text to be shown. The name and size of the image are always shown.
- * @param $alt String: Alt text for the image
- */
+ * Add an image at the beginning of the gallery.
+ *
+ * @param $title Title object of the image that is added to the gallery
+ * @param $html String: Additional HTML text to be shown. The name and size of the image are always shown.
+ * @param $alt String: Alt text for the image
+ */
function insert( $title, $html = '', $alt = '' ) {
if ( $title instanceof File ) {
// Old calling convention
$nt = $pair[0];
$text = $pair[1]; # "text" means "caption" here
$alt = $pair[2];
+ $link = $pair[3];
$descQuery = false;
if ( $nt->getNamespace() == NS_FILE ) {
'desc-link' => true,
'desc-query' => $descQuery,
'alt' => $alt,
+ 'custom-url-link' => $link
);
# In the absence of both alt text and caption, fall back on providing screen readers with the filename as alt text
if ( $alt == '' && $text == '' ) {
. '<div style="width: ' . ( $this->mWidths + self::THUMB_PADDING + self::GB_PADDING ) . 'px">'
. $thumbhtml
. "\n\t\t\t" . '<div class="gallerytext">' . "\n"
- . $textlink . $text . $fileSize
+ . $textlink . $text . $fileSize
. "\n\t\t\t</div>"
- . "\n\t\t</div></li>";
+ . "\n\t\t</div></li>";
}
$output .= "\n</ul>";
*/
public function getContextTitle() {
return is_object( $this->contextTitle ) && $this->contextTitle instanceof Title
- ? $this->contextTitle
- : false;
+ ? $this->contextTitle
+ : false;
}
} //class
* @return string
*/
function subPageSubtitle() {
+ global $wgLang;
$out = $this->getOutput();
$subpages = '';
$c++;
if ( $c > 1 ) {
- $subpages .= $this->msg( 'pipe-separator' )->escaped();
+ $subpages .= $wgLang->getDirMarkEntity() . $this->msg( 'pipe-separator' )->escaped();
} else {
$subpages .= '< ';
}
} elseif ( $type == ':B:' ) {
# Salted
list( $salt, $realHash ) = explode( ':', substr( $hash, 3 ), 2 );
- return md5( $salt.'-'.md5( $password ) ) == $realHash;
+ return md5( $salt.'-'.md5( $password ) ) === $realHash;
} else {
# Old-style
return self::oldCrypt( $password, $userId ) === $hash;
--- /dev/null
+<?php
+
+/**
+ * Abstract action class with scaffolding for caching HTML and other values
+ * in a single blob.
+ *
+ * Before using any of the caching functionality, call startCache.
+ * After the last call to either getCachedValue or addCachedHTML, call saveCache.
+ *
+ * To get a cached value or compute it, use getCachedValue like this:
+ * $this->getCachedValue( $callback );
+ *
+ * To add HTML that should be cached, use addCachedHTML like this:
+ * $this->addCachedHTML( $callback );
+ *
+ * The callback function is only called when needed, so do all your expensive
+ * computations here. This function should returns the HTML to be cached.
+ * It should not add anything to the PageOutput object!
+ *
+ * @since 1.20
+ *
+ * @file CachedAction.php
+ * @ingroup Action
+ *
+ * @licence GNU GPL v2 or later
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+abstract class CachedAction extends FormlessAction implements ICacheHelper {
+
+ /**
+ * CacheHelper object to which we forward the non-SpecialPage specific caching work.
+ * Initialized in startCache.
+ *
+ * @since 1.20
+ * @var CacheHelper
+ */
+ protected $cacheHelper;
+
+ /**
+ * If the cache is enabled or not.
+ *
+ * @since 1.20
+ * @var boolean
+ */
+ protected $cacheEnabled = true;
+
+ /**
+ * Sets if the cache should be enabled or not.
+ *
+ * @since 1.20
+ * @param boolean $cacheEnabled
+ */
+ public function setCacheEnabled( $cacheEnabled ) {
+ $this->cacheHelper->setCacheEnabled( $cacheEnabled );
+ }
+
+ /**
+ * Initializes the caching.
+ * Should be called before the first time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ *
+ * @param integer|null $cacheExpiry Sets the cache expiry, either ttl in seconds or unix timestamp.
+ * @param boolean|null $cacheEnabled Sets if the cache should be enabled or not.
+ */
+ public function startCache( $cacheExpiry = null, $cacheEnabled = null ) {
+ $this->cacheHelper = new CacheHelper();
+
+ $this->cacheHelper->setCacheEnabled( $this->cacheEnabled );
+ $this->cacheHelper->setOnInitializedHandler( array( $this, 'onCacheInitialized' ) );
+
+ $keyArgs = $this->getCacheKey();
+
+ if ( array_key_exists( 'action', $keyArgs ) && $keyArgs['action'] === 'purge' ) {
+ unset( $keyArgs['action'] );
+ }
+
+ $this->cacheHelper->setCacheKey( $keyArgs );
+
+ if ( $this->getRequest()->getText( 'action' ) === 'purge' ) {
+ $this->cacheHelper->rebuildOnDemand();
+ }
+
+ $this->cacheHelper->startCache( $cacheExpiry, $cacheEnabled );
+ }
+
+ /**
+ * Get a cached value if available or compute it if not and then cache it if possible.
+ * The provided $computeFunction is only called when the computation needs to happen
+ * and should return a result value. $args are arguments that will be passed to the
+ * compute function when called.
+ *
+ * @since 1.20
+ *
+ * @param {function} $computeFunction
+ * @param array|mixed $args
+ * @param string|null $key
+ *
+ * @return mixed
+ */
+ public function getCachedValue( $computeFunction, $args = array(), $key = null ) {
+ return $this->cacheHelper->getCachedValue( $computeFunction, $args, $key );
+ }
+
+ /**
+ * Add some HTML to be cached.
+ * This is done by providing a callback function that should
+ * return the HTML to be added. It will only be called if the
+ * item is not in the cache yet or when the cache has been invalidated.
+ *
+ * @since 1.20
+ *
+ * @param {function} $computeFunction
+ * @param array $args
+ * @param string|null $key
+ */
+ public function addCachedHTML( $computeFunction, $args = array(), $key = null ) {
+ $this->getOutput()->addHTML( $this->cacheHelper->getCachedValue( $computeFunction, $args, $key ) );
+ }
+
+ /**
+ * Saves the HTML to the cache in case it got recomputed.
+ * Should be called after the last time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ */
+ public function saveCache() {
+ $this->cacheHelper->saveCache();
+ }
+
+ /**
+ * Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry.
+ *
+ * @since 1.20
+ *
+ * @param integer $cacheExpiry
+ */
+ public function setExpiry( $cacheExpiry ) {
+ $this->cacheHelper->setExpiry( $cacheExpiry );
+ }
+
+ /**
+ * Returns the variables used to constructed the cache key in an array.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ protected function getCacheKey() {
+ return array(
+ get_class( $this->page ),
+ $this->getName(),
+ $this->getLanguage()->getCode()
+ );
+ }
+
+ /**
+ * Gets called after the cache got initialized.
+ *
+ * @since 1.20
+ *
+ * @param boolean $hasCached
+ */
+ public function onCacheInitialized( $hasCached ) {
+ if ( $hasCached ) {
+ $this->getOutput()->setSubtitle( $this->cacheHelper->getCachedNotice( $this->getContext() ) );
+ }
+ }
+
+}
\ No newline at end of file
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
+ $pageObj = WikiPage::factory( $titleObj );
+ $pageObj->loadPageData( 'fromdbmaster' );
+ if ( !$pageObj->exists() ) {
+ $this->dieUsageMsg( 'notanarticle' );
+ }
} elseif ( isset( $params['pageid'] ) ) {
- $titleObj = Title::newFromID( $params['pageid'] );
- if ( !$titleObj ) {
+ $pageObj = WikiPage::newFromID( $params['pageid'] );
+ if ( !$pageObj ) {
$this->dieUsageMsg( array( 'nosuchpageid', $params['pageid'] ) );
}
- }
- if ( !$titleObj->exists() ) {
- $this->dieUsageMsg( 'notanarticle' );
+ $titleObj = $pageObj->getTitle();
}
$reason = ( isset( $params['reason'] ) ? $params['reason'] : null );
- $pageObj = WikiPage::factory( $titleObj );
$user = $this->getUser();
if ( $titleObj->getNamespace() == NS_FILE ) {
$moduleParams = $module->extractRequestParams();
// Die if token required, but not provided (unless there is a gettoken parameter)
+ if ( isset( $moduleParams['gettoken'] ) ) {
+ $gettoken = $moduleParams['gettoken'];
+ } else {
+ $gettoken = false;
+ }
+
$salt = $module->getTokenSalt();
- if ( $salt !== false && isset( $moduleParams['gettoken'] ) && !$moduleParams['gettoken'] ) {
+ if ( $salt !== false && !$gettoken ) {
if ( !isset( $moduleParams['token'] ) ) {
$this->dieUsageMsg( array( 'missingparam', 'token' ) );
} else {
);
private $mQueryListModules = array(
- 'allimages' => 'ApiQueryAllimages',
- 'allpages' => 'ApiQueryAllpages',
+ 'allimages' => 'ApiQueryAllImages',
+ 'allpages' => 'ApiQueryAllPages',
'alllinks' => 'ApiQueryAllLinks',
'allcategories' => 'ApiQueryAllCategories',
'allusers' => 'ApiQueryAllUsers',
private $mQueryMetaModules = array(
'siteinfo' => 'ApiQuerySiteinfo',
'userinfo' => 'ApiQueryUserInfo',
- 'allmessages' => 'ApiQueryAllmessages',
+ 'allmessages' => 'ApiQueryAllMessages',
);
private $mSlaveDB = null;
$min = $params['min'];
$max = $params['max'];
- $this->addWhereRange( 'cat_pages', $dir, $min, $max );
+ if ( $dir == 'newer' ) {
+ $this->addWhereRange( 'cat_pages', 'newer', $min, $max );
+ } else {
+ $this->addWhereRange( 'cat_pages', 'older', $max, $min);
+ }
+
if ( isset( $params['prefix'] ) ) {
$this->addWhere( 'cat_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
--- /dev/null
+<?php
+
+/**
+ * API for MediaWiki 1.12+
+ *
+ * Created on Mar 16, 2008
+ *
+ * Copyright © 2008 Vasiliev Victor vasilvv@gmail.com,
+ * based on ApiQueryAllPages.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
+ */
+
+/**
+ * Query module to enumerate all available pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllImages extends ApiQueryGeneratorBase {
+
+ protected $mRepo;
+
+ public function __construct( $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ai' );
+ $this->mRepo = RepoGroup::singleton()->getLocalRepo();
+ }
+
+ /**
+ * Override parent method to make sure to make sure the repo's DB is used
+ * which may not necesarilly be the same as the local DB.
+ *
+ * TODO: allow querying non-local repos.
+ * @return DatabaseBase
+ */
+ protected function getDB() {
+ return $this->mRepo->getSlaveDB();
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ /**
+ * @param $resultPageSet ApiPageSet
+ * @return void
+ */
+ public function executeGenerator( $resultPageSet ) {
+ if ( $resultPageSet->isResolvingRedirects() ) {
+ $this->dieUsage( 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator', 'params' );
+ }
+
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param $resultPageSet ApiPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $repo = $this->mRepo;
+ if ( !$repo instanceof LocalRepo ) {
+ $this->dieUsage( 'Local file repository does not support querying all images', 'unsupportedrepo' );
+ }
+
+ $db = $this->getDB();
+
+ $params = $this->extractRequestParams();
+
+ // Image filters
+ $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
+ $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
+ $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
+ $this->addWhereRange( 'img_name', $dir, $from, $to );
+
+ if ( isset( $params['prefix'] ) )
+ $this->addWhere( 'img_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+
+ if ( isset( $params['minsize'] ) ) {
+ $this->addWhere( 'img_size>=' . intval( $params['minsize'] ) );
+ }
+
+ if ( isset( $params['maxsize'] ) ) {
+ $this->addWhere( 'img_size<=' . intval( $params['maxsize'] ) );
+ }
+
+ $sha1 = false;
+ if ( isset( $params['sha1'] ) ) {
+ if ( !$this->validateSha1Hash( $params['sha1'] ) ) {
+ $this->dieUsage( 'The SHA1 hash provided is not valid', 'invalidsha1hash' );
+ }
+ $sha1 = wfBaseConvert( $params['sha1'], 16, 36, 31 );
+ } elseif ( isset( $params['sha1base36'] ) ) {
+ $sha1 = $params['sha1base36'];
+ if ( !$this->validateSha1Base36Hash( $sha1 ) ) {
+ $this->dieUsage( 'The SHA1Base36 hash provided is not valid', 'invalidsha1base36hash' );
+ }
+ }
+ if ( $sha1 ) {
+ $this->addWhereFld( 'img_sha1', $sha1 );
+ }
+
+ if ( !is_null( $params['mime'] ) ) {
+ global $wgMiserMode;
+ if ( $wgMiserMode ) {
+ $this->dieUsage( 'MIME search disabled in Miser Mode', 'mimesearchdisabled' );
+ }
+
+ list( $major, $minor ) = File::splitMime( $params['mime'] );
+
+ $this->addWhereFld( 'img_major_mime', $major );
+ $this->addWhereFld( 'img_minor_mime', $minor );
+ }
+
+ $this->addTables( 'image' );
+
+ $prop = array_flip( $params['prop'] );
+ $this->addFields( LocalFile::selectFields() );
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+ $this->addOption( 'ORDER BY', 'img_name' .
+ ( $params['dir'] == 'descending' ? ' DESC' : '' ) );
+
+ $res = $this->select( __METHOD__ );
+
+ $titles = array();
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++ $count > $limit ) {
+ // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // TODO: Security issue - if the user has no right to view next title, it will still be shown
+ $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->img_name ) );
+ break;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $file = $repo->newFileFromRow( $row );
+ $info = array_merge( array( 'name' => $row->img_name ),
+ ApiQueryImageInfo::getInfo( $file, $prop, $result ) );
+ self::addTitleInfo( $info, $file->getTitle() );
+
+ $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $info );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->img_name ) );
+ break;
+ }
+ } else {
+ $titles[] = Title::makeTitle( NS_IMAGE, $row->img_name );
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'img' );
+ } else {
+ $resultPageSet->populateFromTitles( $titles );
+ }
+ }
+
+ public function getAllowedParams() {
+ return array (
+ 'from' => null,
+ 'to' => null,
+ 'prefix' => null,
+ 'minsize' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
+ 'maxsize' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
+ 'limit' => array(
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ),
+ 'dir' => array(
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => array(
+ 'ascending',
+ 'descending'
+ )
+ ),
+ 'sha1' => null,
+ 'sha1base36' => null,
+ 'prop' => array(
+ ApiBase::PARAM_TYPE => ApiQueryImageInfo::getPropertyNames( $this->propertyFilter ),
+ ApiBase::PARAM_DFLT => 'timestamp|url',
+ ApiBase::PARAM_ISMULTI => true
+ ),
+ 'mime' => null,
+ );
+ }
+
+ public function getParamDescription() {
+ return array(
+ 'from' => 'The image title to start enumerating from',
+ 'to' => 'The image title to stop enumerating at',
+ 'prefix' => 'Search for all image titles that begin with this value',
+ 'dir' => 'The direction in which to list',
+ 'minsize' => 'Limit to images with at least this many bytes',
+ 'maxsize' => 'Limit to images with at most this many bytes',
+ 'limit' => 'How many images in total to return',
+ 'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
+ 'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
+ 'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
+ 'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
+ );
+ }
+
+ private $propertyFilter = array( 'archivename' );
+
+ public function getDescription() {
+ return 'Enumerate all images sequentially';
+ }
+
+ public function getPossibleErrors() {
+ return array_merge( parent::getPossibleErrors(), array(
+ array( 'code' => 'params', 'info' => 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator' ),
+ array( 'code' => 'unsupportedrepo', 'info' => 'Local file repository does not support querying all images' ),
+ array( 'code' => 'mimesearchdisabled', 'info' => 'MIME search disabled in Miser Mode' ),
+ array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
+ array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
+ ) );
+ }
+
+ public function getExamples() {
+ return array(
+ 'api.php?action=query&list=allimages&aifrom=B' => array(
+ 'Simple Use',
+ 'Show a list of images starting at the letter "B"',
+ ),
+ 'api.php?action=query&generator=allimages&gailimit=4&gaifrom=T&prop=imageinfo' => array(
+ 'Using as Generator',
+ 'Show info about 4 images starting at the letter "T"',
+ ),
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Allimages';
+ }
+
+ public function getVersion() {
+ return __CLASS__ . ': $Id$';
+ }
+}
--- /dev/null
+<?php
+/**
+ *
+ *
+ * Created on Dec 1, 2007
+ *
+ * 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
+ * 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
+ */
+
+/**
+ * A query action to return messages from site message cache
+ *
+ * @ingroup API
+ */
+class ApiQueryAllMessages extends ApiQueryBase {
+
+ public function __construct( $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'am' );
+ }
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+
+ if ( is_null( $params['lang'] ) ) {
+ global $wgLang;
+ $langObj = $wgLang;
+ } else {
+ $langObj = Language::factory( $params['lang'] );
+ }
+
+ if ( $params['enableparser'] ) {
+ if ( !is_null( $params['title'] ) ) {
+ $title = Title::newFromText( $params['title'] );
+ if ( !$title ) {
+ $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
+ }
+ } else {
+ $title = Title::newFromText( 'API' );
+ }
+ }
+
+ $prop = array_flip( (array)$params['prop'] );
+
+ // Determine which messages should we print
+ if ( in_array( '*', $params['messages'] ) ) {
+ $message_names = Language::getMessageKeysFor( $langObj->getCode() );
+ if ( $params['includelocal'] ) {
+ global $wgLanguageCode;
+ $message_names = array_unique( array_merge(
+ $message_names,
+ // Pass in the content language code so we get local messages that have a
+ // MediaWiki:msgkey page. We might theoretically miss messages that have no
+ // MediaWiki:msgkey page but do have a MediaWiki:msgkey/lang page, but that's
+ // just a stupid case.
+ MessageCache::singleton()->getAllMessageKeys( $wgLanguageCode )
+ ) );
+ }
+ sort( $message_names );
+ $messages_target = $message_names;
+ } else {
+ $messages_target = $params['messages'];
+ }
+
+ // Filter messages that have the specified prefix
+ // Because we sorted the message array earlier, they will appear in a clump:
+ if ( isset( $params['prefix'] ) ) {
+ $skip = false;
+ $messages_filtered = array();
+ foreach ( $messages_target as $message ) {
+ // === 0: must be at beginning of string (position 0)
+ if ( strpos( $message, $params['prefix'] ) === 0 ) {
+ if( !$skip ) {
+ $skip = true;
+ }
+ $messages_filtered[] = $message;
+ } elseif ( $skip ) {
+ break;
+ }
+ }
+ $messages_target = $messages_filtered;
+ }
+
+ // Filter messages that contain specified string
+ if ( isset( $params['filter'] ) ) {
+ $messages_filtered = array();
+ foreach ( $messages_target as $message ) {
+ // !== is used because filter can be at the beginning of the string
+ if ( strpos( $message, $params['filter'] ) !== false ) {
+ $messages_filtered[] = $message;
+ }
+ }
+ $messages_target = $messages_filtered;
+ }
+
+ // Whether we have any sort of message customisation filtering
+ $customiseFilterEnabled = $params['customised'] !== 'all';
+ if ( $customiseFilterEnabled ) {
+ global $wgContLang;
+ $lang = $langObj->getCode();
+
+ $customisedMessages = AllmessagesTablePager::getCustomisedStatuses(
+ array_map( array( $langObj, 'ucfirst'), $messages_target ), $lang, $lang != $wgContLang->getCode() );
+
+ $customised = $params['customised'] === 'modified';
+ }
+
+ // Get all requested messages and print the result
+ $skip = !is_null( $params['from'] );
+ $useto = !is_null( $params['to'] );
+ $result = $this->getResult();
+ foreach ( $messages_target as $message ) {
+ // Skip all messages up to $params['from']
+ if ( $skip && $message === $params['from'] ) {
+ $skip = false;
+ }
+
+ if ( $useto && $message > $params['to'] ) {
+ break;
+ }
+
+ if ( !$skip ) {
+ $a = array( 'name' => $message );
+ $args = array();
+ if ( isset( $params['args'] ) && count( $params['args'] ) != 0 ) {
+ $args = $params['args'];
+ }
+
+ if ( $customiseFilterEnabled ) {
+ $messageIsCustomised = isset( $customisedMessages['pages'][ $langObj->ucfirst( $message ) ] );
+ if ( $customised === $messageIsCustomised ) {
+ if ( $customised ) {
+ $a['customised'] = '';
+ }
+ } else {
+ continue;
+ }
+ }
+
+ $msg = wfMessage( $message, $args )->inLanguage( $langObj );
+
+ if ( !$msg->exists() ) {
+ $a['missing'] = '';
+ } else {
+ // Check if the parser is enabled:
+ if ( $params['enableparser'] ) {
+ $msgString = $msg->title( $title )->text();
+ } else {
+ $msgString = $msg->plain();
+ }
+ if ( !$params['nocontent'] ) {
+ ApiResult::setContent( $a, $msgString );
+ }
+ if ( isset( $prop['default'] ) ) {
+ $default = wfMessage( $message )->inLanguage( $langObj )->useDatabase( false );
+ if ( !$default->exists() ) {
+ $a['defaultmissing'] = '';
+ } elseif ( $default->plain() != $msgString ) {
+ $a['default'] = $default->plain();
+ }
+ }
+ }
+ $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $a );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'from', $message );
+ break;
+ }
+ }
+ }
+ $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'message' );
+ }
+
+ public function getCacheMode( $params ) {
+ if ( is_null( $params['lang'] ) ) {
+ // Language not specified, will be fetched from preferences
+ return 'anon-public-user-private';
+ } elseif ( $params['enableparser'] ) {
+ // User-specific parser options will be used
+ return 'anon-public-user-private';
+ } else {
+ // OK to cache
+ return 'public';
+ }
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'messages' => array(
+ ApiBase::PARAM_DFLT => '*',
+ ApiBase::PARAM_ISMULTI => true,
+ ),
+ 'prop' => array(
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => array(
+ 'default'
+ )
+ ),
+ 'enableparser' => false,
+ 'nocontent' => false,
+ 'includelocal' => false,
+ 'args' => array(
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_ALLOW_DUPLICATES => true,
+ ),
+ 'filter' => array(),
+ 'customised' => array(
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => array(
+ 'all',
+ 'modified',
+ 'unmodified'
+ )
+ ),
+ 'lang' => null,
+ 'from' => null,
+ 'to' => null,
+ 'title' => null,
+ 'prefix' => null,
+ );
+ }
+
+ public function getParamDescription() {
+ return array(
+ 'messages' => 'Which messages to output. "*" (default) means all messages',
+ 'prop' => 'Which properties to get',
+ 'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
+ 'Will substitute magic words, handle templates etc.' ),
+ 'nocontent' => 'If set, do not include the content of the messages in the output.',
+ 'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
+ "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
+ ),
+ 'title' => 'Page name to use as context when parsing message (for enableparser option)',
+ 'args' => 'Arguments to be substituted into message',
+ 'prefix' => 'Return messages with this prefix',
+ 'filter' => 'Return only messages with names that contain this string',
+ 'customised' => 'Return only messages in this customisation state',
+ 'lang' => 'Return messages in this language',
+ 'from' => 'Return messages starting at this message',
+ 'to' => 'Return messages ending at this message',
+ );
+ }
+
+ public function getDescription() {
+ return 'Return messages from this site';
+ }
+
+ public function getExamples() {
+ return array(
+ 'api.php?action=query&meta=allmessages&refix=ipb-',
+ 'api.php?action=query&meta=allmessages&ammessages=august|mainpage&amlang=de',
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Meta#allmessages_.2F_am';
+ }
+
+ public function getVersion() {
+ return __CLASS__ . ': $Id$';
+ }
+}
--- /dev/null
+<?php
+/**
+ *
+ *
+ * Created on Sep 25, 2006
+ *
+ * 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
+ * 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
+ */
+
+/**
+ * Query module to enumerate all available pages.
+ *
+ * @ingroup API
+ */
+class ApiQueryAllPages extends ApiQueryGeneratorBase {
+
+ public function __construct( $query, $moduleName ) {
+ parent::__construct( $query, $moduleName, 'ap' );
+ }
+
+ public function execute() {
+ $this->run();
+ }
+
+ public function getCacheMode( $params ) {
+ return 'public';
+ }
+
+ /**
+ * @param $resultPageSet ApiPageSet
+ * @return void
+ */
+ public function executeGenerator( $resultPageSet ) {
+ if ( $resultPageSet->isResolvingRedirects() ) {
+ $this->dieUsage( 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator', 'params' );
+ }
+
+ $this->run( $resultPageSet );
+ }
+
+ /**
+ * @param $resultPageSet ApiPageSet
+ * @return void
+ */
+ private function run( $resultPageSet = null ) {
+ $db = $this->getDB();
+
+ $params = $this->extractRequestParams();
+
+ // Page filters
+ $this->addTables( 'page' );
+
+ if ( $params['filterredir'] == 'redirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 1 );
+ } elseif ( $params['filterredir'] == 'nonredirects' ) {
+ $this->addWhereFld( 'page_is_redirect', 0 );
+ }
+
+ $this->addWhereFld( 'page_namespace', $params['namespace'] );
+ $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
+ $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
+ $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
+ $this->addWhereRange( 'page_title', $dir, $from, $to );
+
+ if ( isset( $params['prefix'] ) ) {
+ $this->addWhere( 'page_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $selectFields = array(
+ 'page_namespace',
+ 'page_title',
+ 'page_id'
+ );
+ } else {
+ $selectFields = $resultPageSet->getPageTableFields();
+ }
+
+ $this->addFields( $selectFields );
+ $forceNameTitleIndex = true;
+ if ( isset( $params['minsize'] ) ) {
+ $this->addWhere( 'page_len>=' . intval( $params['minsize'] ) );
+ $forceNameTitleIndex = false;
+ }
+
+ if ( isset( $params['maxsize'] ) ) {
+ $this->addWhere( 'page_len<=' . intval( $params['maxsize'] ) );
+ $forceNameTitleIndex = false;
+ }
+
+ // Page protection filtering
+ if ( count( $params['prtype'] ) || $params['prexpiry'] != 'all' ) {
+ $this->addTables( 'page_restrictions' );
+ $this->addWhere( 'page_id=pr_page' );
+ $this->addWhere( 'pr_expiry>' . $db->addQuotes( $db->timestamp() ) );
+
+ if ( count( $params['prtype'] ) ) {
+ $this->addWhereFld( 'pr_type', $params['prtype'] );
+
+ if ( isset( $params['prlevel'] ) ) {
+ // Remove the empty string and '*' from the prlevel array
+ $prlevel = array_diff( $params['prlevel'], array( '', '*' ) );
+
+ if ( count( $prlevel ) ) {
+ $this->addWhereFld( 'pr_level', $prlevel );
+ }
+ }
+ if ( $params['prfiltercascade'] == 'cascading' ) {
+ $this->addWhereFld( 'pr_cascade', 1 );
+ } elseif ( $params['prfiltercascade'] == 'noncascading' ) {
+ $this->addWhereFld( 'pr_cascade', 0 );
+ }
+
+ $this->addOption( 'DISTINCT' );
+ }
+ $forceNameTitleIndex = false;
+
+ if ( $params['prexpiry'] == 'indefinite' ) {
+ $this->addWhere( "pr_expiry = {$db->addQuotes( $db->getInfinity() )} OR pr_expiry IS NULL" );
+ } elseif ( $params['prexpiry'] == 'definite' ) {
+ $this->addWhere( "pr_expiry != {$db->addQuotes( $db->getInfinity() )}" );
+ }
+
+ } elseif ( isset( $params['prlevel'] ) ) {
+ $this->dieUsage( 'prlevel may not be used without prtype', 'params' );
+ }
+
+ if ( $params['filterlanglinks'] == 'withoutlanglinks' ) {
+ $this->addTables( 'langlinks' );
+ $this->addJoinConds( array( 'langlinks' => array( 'LEFT JOIN', 'page_id=ll_from' ) ) );
+ $this->addWhere( 'll_from IS NULL' );
+ $forceNameTitleIndex = false;
+ } elseif ( $params['filterlanglinks'] == 'withlanglinks' ) {
+ $this->addTables( 'langlinks' );
+ $this->addWhere( 'page_id=ll_from' );
+ $this->addOption( 'STRAIGHT_JOIN' );
+ // We have to GROUP BY all selected fields to stop
+ // PostgreSQL from whining
+ $this->addOption( 'GROUP BY', implode( ', ', $selectFields ) );
+ $forceNameTitleIndex = false;
+ }
+
+ if ( $forceNameTitleIndex ) {
+ $this->addOption( 'USE INDEX', 'name_title' );
+ }
+
+ $limit = $params['limit'];
+ $this->addOption( 'LIMIT', $limit + 1 );
+ $res = $this->select( __METHOD__ );
+
+ $count = 0;
+ $result = $this->getResult();
+ foreach ( $res as $row ) {
+ if ( ++ $count > $limit ) {
+ // We've reached the one extra which shows that there are additional pages to be had. Stop here...
+ // TODO: Security issue - if the user has no right to view next title, it will still be shown
+ $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->page_title ) );
+ break;
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ $vals = array(
+ 'pageid' => intval( $row->page_id ),
+ 'ns' => intval( $title->getNamespace() ),
+ 'title' => $title->getPrefixedText()
+ );
+ $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
+ if ( !$fit ) {
+ $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->page_title ) );
+ break;
+ }
+ } else {
+ $resultPageSet->processDbRow( $row );
+ }
+ }
+
+ if ( is_null( $resultPageSet ) ) {
+ $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'p' );
+ }
+ }
+
+ public function getAllowedParams() {
+ global $wgRestrictionLevels;
+
+ return array(
+ 'from' => null,
+ 'to' => null,
+ 'prefix' => null,
+ 'namespace' => array(
+ ApiBase::PARAM_DFLT => 0,
+ ApiBase::PARAM_TYPE => 'namespace',
+ ),
+ 'filterredir' => array(
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => array(
+ 'all',
+ 'redirects',
+ 'nonredirects'
+ )
+ ),
+ 'minsize' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
+ 'maxsize' => array(
+ ApiBase::PARAM_TYPE => 'integer',
+ ),
+ 'prtype' => array(
+ ApiBase::PARAM_TYPE => Title::getFilteredRestrictionTypes( true ),
+ ApiBase::PARAM_ISMULTI => true
+ ),
+ 'prlevel' => array(
+ ApiBase::PARAM_TYPE => $wgRestrictionLevels,
+ ApiBase::PARAM_ISMULTI => true
+ ),
+ 'prfiltercascade' => array(
+ ApiBase::PARAM_DFLT => 'all',
+ ApiBase::PARAM_TYPE => array(
+ 'cascading',
+ 'noncascading',
+ 'all'
+ ),
+ ),
+ 'limit' => array(
+ ApiBase::PARAM_DFLT => 10,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ),
+ 'dir' => array(
+ ApiBase::PARAM_DFLT => 'ascending',
+ ApiBase::PARAM_TYPE => array(
+ 'ascending',
+ 'descending'
+ )
+ ),
+ 'filterlanglinks' => array(
+ ApiBase::PARAM_TYPE => array(
+ 'withlanglinks',
+ 'withoutlanglinks',
+ 'all'
+ ),
+ ApiBase::PARAM_DFLT => 'all'
+ ),
+ 'prexpiry' => array(
+ ApiBase::PARAM_TYPE => array(
+ 'indefinite',
+ 'definite',
+ 'all'
+ ),
+ ApiBase::PARAM_DFLT => 'all'
+ ),
+ );
+ }
+
+ public function getParamDescription() {
+ $p = $this->getModulePrefix();
+ return array(
+ 'from' => 'The page title to start enumerating from',
+ 'to' => 'The page title to stop enumerating at',
+ 'prefix' => 'Search for all page titles that begin with this value',
+ 'namespace' => 'The namespace to enumerate',
+ 'filterredir' => 'Which pages to list',
+ 'dir' => 'The direction in which to list',
+ 'minsize' => 'Limit to pages with at least this many bytes',
+ 'maxsize' => 'Limit to pages with at most this many bytes',
+ 'prtype' => 'Limit to protected pages only',
+ 'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
+ 'prfiltercascade' => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
+ 'filterlanglinks' => 'Filter based on whether a page has langlinks',
+ 'limit' => 'How many total pages to return.',
+ 'prexpiry' => array(
+ 'Which protection expiry to filter the page on',
+ ' indefinite - Get only pages with indefinite protection expiry',
+ ' definite - Get only pages with a definite (specific) protection expiry',
+ ' all - Get pages with any protections expiry'
+ ),
+ );
+ }
+
+ public function getDescription() {
+ return 'Enumerate all pages sequentially in a given namespace';
+ }
+
+ public function getPossibleErrors() {
+ return array_merge( parent::getPossibleErrors(), array(
+ array( 'code' => 'params', 'info' => 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator' ),
+ array( 'code' => 'params', 'info' => 'prlevel may not be used without prtype' ),
+ ) );
+ }
+
+ public function getExamples() {
+ return array(
+ 'api.php?action=query&list=allpages&apfrom=B' => array(
+ 'Simple Use',
+ 'Show a list of pages starting at the letter "B"',
+ ),
+ 'api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info' => array(
+ 'Using as Generator',
+ 'Show info about 4 pages starting at the letter "T"',
+ ),
+ 'api.php?action=query&generator=allpages&gaplimit=2&gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content' => array(
+ 'Show content of first 2 non-redirect pages begining at "Re"',
+ )
+ );
+ }
+
+ public function getHelpUrls() {
+ return 'https://www.mediawiki.org/wiki/API:Allpages';
+ }
+
+ public function getVersion() {
+ return __CLASS__ . ': $Id$';
+ }
+}
+++ /dev/null
-<?php
-
-/**
- * API for MediaWiki 1.12+
- *
- * Created on Mar 16, 2008
- *
- * Copyright © 2008 Vasiliev Victor vasilvv@gmail.com,
- * based on ApiQueryAllpages.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
- */
-
-/**
- * Query module to enumerate all available pages.
- *
- * @ingroup API
- */
-class ApiQueryAllimages extends ApiQueryGeneratorBase {
-
- protected $mRepo;
-
- public function __construct( $query, $moduleName ) {
- parent::__construct( $query, $moduleName, 'ai' );
- $this->mRepo = RepoGroup::singleton()->getLocalRepo();
- }
-
- /**
- * Override parent method to make sure to make sure the repo's DB is used
- * which may not necesarilly be the same as the local DB.
- *
- * TODO: allow querying non-local repos.
- * @return DatabaseBase
- */
- protected function getDB() {
- return $this->mRepo->getSlaveDB();
- }
-
- public function execute() {
- $this->run();
- }
-
- public function getCacheMode( $params ) {
- return 'public';
- }
-
- /**
- * @param $resultPageSet ApiPageSet
- * @return void
- */
- public function executeGenerator( $resultPageSet ) {
- if ( $resultPageSet->isResolvingRedirects() ) {
- $this->dieUsage( 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator', 'params' );
- }
-
- $this->run( $resultPageSet );
- }
-
- /**
- * @param $resultPageSet ApiPageSet
- * @return void
- */
- private function run( $resultPageSet = null ) {
- $repo = $this->mRepo;
- if ( !$repo instanceof LocalRepo ) {
- $this->dieUsage( 'Local file repository does not support querying all images', 'unsupportedrepo' );
- }
-
- $db = $this->getDB();
-
- $params = $this->extractRequestParams();
-
- // Image filters
- $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
- $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
- $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
- $this->addWhereRange( 'img_name', $dir, $from, $to );
-
- if ( isset( $params['prefix'] ) )
- $this->addWhere( 'img_name' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
-
- if ( isset( $params['minsize'] ) ) {
- $this->addWhere( 'img_size>=' . intval( $params['minsize'] ) );
- }
-
- if ( isset( $params['maxsize'] ) ) {
- $this->addWhere( 'img_size<=' . intval( $params['maxsize'] ) );
- }
-
- $sha1 = false;
- if ( isset( $params['sha1'] ) ) {
- if ( !$this->validateSha1Hash( $params['sha1'] ) ) {
- $this->dieUsage( 'The SHA1 hash provided is not valid', 'invalidsha1hash' );
- }
- $sha1 = wfBaseConvert( $params['sha1'], 16, 36, 31 );
- } elseif ( isset( $params['sha1base36'] ) ) {
- $sha1 = $params['sha1base36'];
- if ( !$this->validateSha1Base36Hash( $sha1 ) ) {
- $this->dieUsage( 'The SHA1Base36 hash provided is not valid', 'invalidsha1base36hash' );
- }
- }
- if ( $sha1 ) {
- $this->addWhereFld( 'img_sha1', $sha1 );
- }
-
- if ( !is_null( $params['mime'] ) ) {
- global $wgMiserMode;
- if ( $wgMiserMode ) {
- $this->dieUsage( 'MIME search disabled in Miser Mode', 'mimesearchdisabled' );
- }
-
- list( $major, $minor ) = File::splitMime( $params['mime'] );
-
- $this->addWhereFld( 'img_major_mime', $major );
- $this->addWhereFld( 'img_minor_mime', $minor );
- }
-
- $this->addTables( 'image' );
-
- $prop = array_flip( $params['prop'] );
- $this->addFields( LocalFile::selectFields() );
-
- $limit = $params['limit'];
- $this->addOption( 'LIMIT', $limit + 1 );
- $this->addOption( 'ORDER BY', 'img_name' .
- ( $params['dir'] == 'descending' ? ' DESC' : '' ) );
-
- $res = $this->select( __METHOD__ );
-
- $titles = array();
- $count = 0;
- $result = $this->getResult();
- foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
- // TODO: Security issue - if the user has no right to view next title, it will still be shown
- $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->img_name ) );
- break;
- }
-
- if ( is_null( $resultPageSet ) ) {
- $file = $repo->newFileFromRow( $row );
- $info = array_merge( array( 'name' => $row->img_name ),
- ApiQueryImageInfo::getInfo( $file, $prop, $result ) );
- self::addTitleInfo( $info, $file->getTitle() );
-
- $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $info );
- if ( !$fit ) {
- $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->img_name ) );
- break;
- }
- } else {
- $titles[] = Title::makeTitle( NS_IMAGE, $row->img_name );
- }
- }
-
- if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'img' );
- } else {
- $resultPageSet->populateFromTitles( $titles );
- }
- }
-
- public function getAllowedParams() {
- return array (
- 'from' => null,
- 'to' => null,
- 'prefix' => null,
- 'minsize' => array(
- ApiBase::PARAM_TYPE => 'integer',
- ),
- 'maxsize' => array(
- ApiBase::PARAM_TYPE => 'integer',
- ),
- 'limit' => array(
- ApiBase::PARAM_DFLT => 10,
- ApiBase::PARAM_TYPE => 'limit',
- ApiBase::PARAM_MIN => 1,
- ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
- ),
- 'dir' => array(
- ApiBase::PARAM_DFLT => 'ascending',
- ApiBase::PARAM_TYPE => array(
- 'ascending',
- 'descending'
- )
- ),
- 'sha1' => null,
- 'sha1base36' => null,
- 'prop' => array(
- ApiBase::PARAM_TYPE => ApiQueryImageInfo::getPropertyNames( $this->propertyFilter ),
- ApiBase::PARAM_DFLT => 'timestamp|url',
- ApiBase::PARAM_ISMULTI => true
- ),
- 'mime' => null,
- );
- }
-
- public function getParamDescription() {
- return array(
- 'from' => 'The image title to start enumerating from',
- 'to' => 'The image title to stop enumerating at',
- 'prefix' => 'Search for all image titles that begin with this value',
- 'dir' => 'The direction in which to list',
- 'minsize' => 'Limit to images with at least this many bytes',
- 'maxsize' => 'Limit to images with at most this many bytes',
- 'limit' => 'How many images in total to return',
- 'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
- 'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
- 'prop' => ApiQueryImageInfo::getPropertyDescriptions( $this->propertyFilter ),
- 'mime' => 'What MIME type to search for. e.g. image/jpeg. Disabled in Miser Mode',
- );
- }
-
- private $propertyFilter = array( 'archivename' );
-
- public function getDescription() {
- return 'Enumerate all images sequentially';
- }
-
- public function getPossibleErrors() {
- return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'params', 'info' => 'Use "gaifilterredir=nonredirects" option instead of "redirects" when using allimages as a generator' ),
- array( 'code' => 'unsupportedrepo', 'info' => 'Local file repository does not support querying all images' ),
- array( 'code' => 'mimesearchdisabled', 'info' => 'MIME search disabled in Miser Mode' ),
- array( 'code' => 'invalidsha1hash', 'info' => 'The SHA1 hash provided is not valid' ),
- array( 'code' => 'invalidsha1base36hash', 'info' => 'The SHA1Base36 hash provided is not valid' ),
- ) );
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=query&list=allimages&aifrom=B' => array(
- 'Simple Use',
- 'Show a list of images starting at the letter "B"',
- ),
- 'api.php?action=query&generator=allimages&gailimit=4&gaifrom=T&prop=imageinfo' => array(
- 'Using as Generator',
- 'Show info about 4 images starting at the letter "T"',
- ),
- );
- }
-
- public function getHelpUrls() {
- return 'https://www.mediawiki.org/wiki/API:Allimages';
- }
-
- public function getVersion() {
- return __CLASS__ . ': $Id$';
- }
-}
+++ /dev/null
-<?php
-/**
- *
- *
- * Created on Dec 1, 2007
- *
- * 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
- * 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
- */
-
-/**
- * A query action to return messages from site message cache
- *
- * @ingroup API
- */
-class ApiQueryAllmessages extends ApiQueryBase {
-
- public function __construct( $query, $moduleName ) {
- parent::__construct( $query, $moduleName, 'am' );
- }
-
- public function execute() {
- $params = $this->extractRequestParams();
-
- if ( is_null( $params['lang'] ) ) {
- global $wgLang;
- $langObj = $wgLang;
- } else {
- $langObj = Language::factory( $params['lang'] );
- }
-
- if ( $params['enableparser'] ) {
- if ( !is_null( $params['title'] ) ) {
- $title = Title::newFromText( $params['title'] );
- if ( !$title ) {
- $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
- }
- } else {
- $title = Title::newFromText( 'API' );
- }
- }
-
- $prop = array_flip( (array)$params['prop'] );
-
- // Determine which messages should we print
- if ( in_array( '*', $params['messages'] ) ) {
- $message_names = Language::getMessageKeysFor( $langObj->getCode() );
- if ( $params['includelocal'] ) {
- global $wgLanguageCode;
- $message_names = array_unique( array_merge(
- $message_names,
- // Pass in the content language code so we get local messages that have a
- // MediaWiki:msgkey page. We might theoretically miss messages that have no
- // MediaWiki:msgkey page but do have a MediaWiki:msgkey/lang page, but that's
- // just a stupid case.
- MessageCache::singleton()->getAllMessageKeys( $wgLanguageCode )
- ) );
- }
- sort( $message_names );
- $messages_target = $message_names;
- } else {
- $messages_target = $params['messages'];
- }
-
- // Filter messages that have the specified prefix
- // Because we sorted the message array earlier, they will appear in a clump:
- if ( isset( $params['prefix'] ) ) {
- $skip = false;
- $messages_filtered = array();
- foreach ( $messages_target as $message ) {
- // === 0: must be at beginning of string (position 0)
- if ( strpos( $message, $params['prefix'] ) === 0 ) {
- if( !$skip ) {
- $skip = true;
- }
- $messages_filtered[] = $message;
- } elseif ( $skip ) {
- break;
- }
- }
- $messages_target = $messages_filtered;
- }
-
- // Filter messages that contain specified string
- if ( isset( $params['filter'] ) ) {
- $messages_filtered = array();
- foreach ( $messages_target as $message ) {
- // !== is used because filter can be at the beginning of the string
- if ( strpos( $message, $params['filter'] ) !== false ) {
- $messages_filtered[] = $message;
- }
- }
- $messages_target = $messages_filtered;
- }
-
- // Whether we have any sort of message customisation filtering
- $customiseFilterEnabled = $params['customised'] !== 'all';
- if ( $customiseFilterEnabled ) {
- global $wgContLang;
- $lang = $langObj->getCode();
-
- $customisedMessages = AllmessagesTablePager::getCustomisedStatuses(
- array_map( array( $langObj, 'ucfirst'), $messages_target ), $lang, $lang != $wgContLang->getCode() );
-
- $customised = $params['customised'] === 'modified';
- }
-
- // Get all requested messages and print the result
- $skip = !is_null( $params['from'] );
- $useto = !is_null( $params['to'] );
- $result = $this->getResult();
- foreach ( $messages_target as $message ) {
- // Skip all messages up to $params['from']
- if ( $skip && $message === $params['from'] ) {
- $skip = false;
- }
-
- if ( $useto && $message > $params['to'] ) {
- break;
- }
-
- if ( !$skip ) {
- $a = array( 'name' => $message );
- $args = array();
- if ( isset( $params['args'] ) && count( $params['args'] ) != 0 ) {
- $args = $params['args'];
- }
-
- if ( $customiseFilterEnabled ) {
- $messageIsCustomised = isset( $customisedMessages['pages'][ $langObj->ucfirst( $message ) ] );
- if ( $customised === $messageIsCustomised ) {
- if ( $customised ) {
- $a['customised'] = '';
- }
- } else {
- continue;
- }
- }
-
- $msg = wfMessage( $message, $args )->inLanguage( $langObj );
-
- if ( !$msg->exists() ) {
- $a['missing'] = '';
- } else {
- // Check if the parser is enabled:
- if ( $params['enableparser'] ) {
- $msgString = $msg->title( $title )->text();
- } else {
- $msgString = $msg->plain();
- }
- if ( !$params['nocontent'] ) {
- ApiResult::setContent( $a, $msgString );
- }
- if ( isset( $prop['default'] ) ) {
- $default = wfMessage( $message )->inLanguage( $langObj )->useDatabase( false );
- if ( !$default->exists() ) {
- $a['defaultmissing'] = '';
- } elseif ( $default->plain() != $msgString ) {
- $a['default'] = $default->plain();
- }
- }
- }
- $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $a );
- if ( !$fit ) {
- $this->setContinueEnumParameter( 'from', $message );
- break;
- }
- }
- }
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'message' );
- }
-
- public function getCacheMode( $params ) {
- if ( is_null( $params['lang'] ) ) {
- // Language not specified, will be fetched from preferences
- return 'anon-public-user-private';
- } elseif ( $params['enableparser'] ) {
- // User-specific parser options will be used
- return 'anon-public-user-private';
- } else {
- // OK to cache
- return 'public';
- }
- }
-
- public function getAllowedParams() {
- return array(
- 'messages' => array(
- ApiBase::PARAM_DFLT => '*',
- ApiBase::PARAM_ISMULTI => true,
- ),
- 'prop' => array(
- ApiBase::PARAM_ISMULTI => true,
- ApiBase::PARAM_TYPE => array(
- 'default'
- )
- ),
- 'enableparser' => false,
- 'nocontent' => false,
- 'includelocal' => false,
- 'args' => array(
- ApiBase::PARAM_ISMULTI => true,
- ApiBase::PARAM_ALLOW_DUPLICATES => true,
- ),
- 'filter' => array(),
- 'customised' => array(
- ApiBase::PARAM_DFLT => 'all',
- ApiBase::PARAM_TYPE => array(
- 'all',
- 'modified',
- 'unmodified'
- )
- ),
- 'lang' => null,
- 'from' => null,
- 'to' => null,
- 'title' => null,
- 'prefix' => null,
- );
- }
-
- public function getParamDescription() {
- return array(
- 'messages' => 'Which messages to output. "*" (default) means all messages',
- 'prop' => 'Which properties to get',
- 'enableparser' => array( 'Set to enable parser, will preprocess the wikitext of message',
- 'Will substitute magic words, handle templates etc.' ),
- 'nocontent' => 'If set, do not include the content of the messages in the output.',
- 'includelocal' => array( "Also include local messages, i.e. messages that don't exist in the software but do exist as a MediaWiki: page.",
- "This lists all MediaWiki: pages, so it will also list those that aren't 'really' messages such as Common.js",
- ),
- 'title' => 'Page name to use as context when parsing message (for enableparser option)',
- 'args' => 'Arguments to be substituted into message',
- 'prefix' => 'Return messages with this prefix',
- 'filter' => 'Return only messages with names that contain this string',
- 'customised' => 'Return only messages in this customisation state',
- 'lang' => 'Return messages in this language',
- 'from' => 'Return messages starting at this message',
- 'to' => 'Return messages ending at this message',
- );
- }
-
- public function getDescription() {
- return 'Return messages from this site';
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=query&meta=allmessages&refix=ipb-',
- 'api.php?action=query&meta=allmessages&ammessages=august|mainpage&amlang=de',
- );
- }
-
- public function getHelpUrls() {
- return 'https://www.mediawiki.org/wiki/API:Meta#allmessages_.2F_am';
- }
-
- public function getVersion() {
- return __CLASS__ . ': $Id$';
- }
-}
+++ /dev/null
-<?php
-/**
- *
- *
- * Created on Sep 25, 2006
- *
- * 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
- * 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
- */
-
-/**
- * Query module to enumerate all available pages.
- *
- * @ingroup API
- */
-class ApiQueryAllpages extends ApiQueryGeneratorBase {
-
- public function __construct( $query, $moduleName ) {
- parent::__construct( $query, $moduleName, 'ap' );
- }
-
- public function execute() {
- $this->run();
- }
-
- public function getCacheMode( $params ) {
- return 'public';
- }
-
- /**
- * @param $resultPageSet ApiPageSet
- * @return void
- */
- public function executeGenerator( $resultPageSet ) {
- if ( $resultPageSet->isResolvingRedirects() ) {
- $this->dieUsage( 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator', 'params' );
- }
-
- $this->run( $resultPageSet );
- }
-
- /**
- * @param $resultPageSet ApiPageSet
- * @return void
- */
- private function run( $resultPageSet = null ) {
- $db = $this->getDB();
-
- $params = $this->extractRequestParams();
-
- // Page filters
- $this->addTables( 'page' );
-
- if ( $params['filterredir'] == 'redirects' ) {
- $this->addWhereFld( 'page_is_redirect', 1 );
- } elseif ( $params['filterredir'] == 'nonredirects' ) {
- $this->addWhereFld( 'page_is_redirect', 0 );
- }
-
- $this->addWhereFld( 'page_namespace', $params['namespace'] );
- $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
- $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
- $to = ( is_null( $params['to'] ) ? null : $this->titlePartToKey( $params['to'] ) );
- $this->addWhereRange( 'page_title', $dir, $from, $to );
-
- if ( isset( $params['prefix'] ) ) {
- $this->addWhere( 'page_title' . $db->buildLike( $this->titlePartToKey( $params['prefix'] ), $db->anyString() ) );
- }
-
- if ( is_null( $resultPageSet ) ) {
- $selectFields = array(
- 'page_namespace',
- 'page_title',
- 'page_id'
- );
- } else {
- $selectFields = $resultPageSet->getPageTableFields();
- }
-
- $this->addFields( $selectFields );
- $forceNameTitleIndex = true;
- if ( isset( $params['minsize'] ) ) {
- $this->addWhere( 'page_len>=' . intval( $params['minsize'] ) );
- $forceNameTitleIndex = false;
- }
-
- if ( isset( $params['maxsize'] ) ) {
- $this->addWhere( 'page_len<=' . intval( $params['maxsize'] ) );
- $forceNameTitleIndex = false;
- }
-
- // Page protection filtering
- if ( count( $params['prtype'] ) || $params['prexpiry'] != 'all' ) {
- $this->addTables( 'page_restrictions' );
- $this->addWhere( 'page_id=pr_page' );
- $this->addWhere( 'pr_expiry>' . $db->addQuotes( $db->timestamp() ) );
-
- if ( count( $params['prtype'] ) ) {
- $this->addWhereFld( 'pr_type', $params['prtype'] );
-
- if ( isset( $params['prlevel'] ) ) {
- // Remove the empty string and '*' from the prlevel array
- $prlevel = array_diff( $params['prlevel'], array( '', '*' ) );
-
- if ( count( $prlevel ) ) {
- $this->addWhereFld( 'pr_level', $prlevel );
- }
- }
- if ( $params['prfiltercascade'] == 'cascading' ) {
- $this->addWhereFld( 'pr_cascade', 1 );
- } elseif ( $params['prfiltercascade'] == 'noncascading' ) {
- $this->addWhereFld( 'pr_cascade', 0 );
- }
-
- $this->addOption( 'DISTINCT' );
- }
- $forceNameTitleIndex = false;
-
- if ( $params['prexpiry'] == 'indefinite' ) {
- $this->addWhere( "pr_expiry = {$db->addQuotes( $db->getInfinity() )} OR pr_expiry IS NULL" );
- } elseif ( $params['prexpiry'] == 'definite' ) {
- $this->addWhere( "pr_expiry != {$db->addQuotes( $db->getInfinity() )}" );
- }
-
- } elseif ( isset( $params['prlevel'] ) ) {
- $this->dieUsage( 'prlevel may not be used without prtype', 'params' );
- }
-
- if ( $params['filterlanglinks'] == 'withoutlanglinks' ) {
- $this->addTables( 'langlinks' );
- $this->addJoinConds( array( 'langlinks' => array( 'LEFT JOIN', 'page_id=ll_from' ) ) );
- $this->addWhere( 'll_from IS NULL' );
- $forceNameTitleIndex = false;
- } elseif ( $params['filterlanglinks'] == 'withlanglinks' ) {
- $this->addTables( 'langlinks' );
- $this->addWhere( 'page_id=ll_from' );
- $this->addOption( 'STRAIGHT_JOIN' );
- // We have to GROUP BY all selected fields to stop
- // PostgreSQL from whining
- $this->addOption( 'GROUP BY', implode( ', ', $selectFields ) );
- $forceNameTitleIndex = false;
- }
-
- if ( $forceNameTitleIndex ) {
- $this->addOption( 'USE INDEX', 'name_title' );
- }
-
- $limit = $params['limit'];
- $this->addOption( 'LIMIT', $limit + 1 );
- $res = $this->select( __METHOD__ );
-
- $count = 0;
- $result = $this->getResult();
- foreach ( $res as $row ) {
- if ( ++ $count > $limit ) {
- // We've reached the one extra which shows that there are additional pages to be had. Stop here...
- // TODO: Security issue - if the user has no right to view next title, it will still be shown
- $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->page_title ) );
- break;
- }
-
- if ( is_null( $resultPageSet ) ) {
- $title = Title::makeTitle( $row->page_namespace, $row->page_title );
- $vals = array(
- 'pageid' => intval( $row->page_id ),
- 'ns' => intval( $title->getNamespace() ),
- 'title' => $title->getPrefixedText()
- );
- $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
- if ( !$fit ) {
- $this->setContinueEnumParameter( 'from', $this->keyToTitle( $row->page_title ) );
- break;
- }
- } else {
- $resultPageSet->processDbRow( $row );
- }
- }
-
- if ( is_null( $resultPageSet ) ) {
- $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'p' );
- }
- }
-
- public function getAllowedParams() {
- global $wgRestrictionLevels;
-
- return array(
- 'from' => null,
- 'to' => null,
- 'prefix' => null,
- 'namespace' => array(
- ApiBase::PARAM_DFLT => 0,
- ApiBase::PARAM_TYPE => 'namespace',
- ),
- 'filterredir' => array(
- ApiBase::PARAM_DFLT => 'all',
- ApiBase::PARAM_TYPE => array(
- 'all',
- 'redirects',
- 'nonredirects'
- )
- ),
- 'minsize' => array(
- ApiBase::PARAM_TYPE => 'integer',
- ),
- 'maxsize' => array(
- ApiBase::PARAM_TYPE => 'integer',
- ),
- 'prtype' => array(
- ApiBase::PARAM_TYPE => Title::getFilteredRestrictionTypes( true ),
- ApiBase::PARAM_ISMULTI => true
- ),
- 'prlevel' => array(
- ApiBase::PARAM_TYPE => $wgRestrictionLevels,
- ApiBase::PARAM_ISMULTI => true
- ),
- 'prfiltercascade' => array(
- ApiBase::PARAM_DFLT => 'all',
- ApiBase::PARAM_TYPE => array(
- 'cascading',
- 'noncascading',
- 'all'
- ),
- ),
- 'limit' => array(
- ApiBase::PARAM_DFLT => 10,
- ApiBase::PARAM_TYPE => 'limit',
- ApiBase::PARAM_MIN => 1,
- ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
- ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
- ),
- 'dir' => array(
- ApiBase::PARAM_DFLT => 'ascending',
- ApiBase::PARAM_TYPE => array(
- 'ascending',
- 'descending'
- )
- ),
- 'filterlanglinks' => array(
- ApiBase::PARAM_TYPE => array(
- 'withlanglinks',
- 'withoutlanglinks',
- 'all'
- ),
- ApiBase::PARAM_DFLT => 'all'
- ),
- 'prexpiry' => array(
- ApiBase::PARAM_TYPE => array(
- 'indefinite',
- 'definite',
- 'all'
- ),
- ApiBase::PARAM_DFLT => 'all'
- ),
- );
- }
-
- public function getParamDescription() {
- $p = $this->getModulePrefix();
- return array(
- 'from' => 'The page title to start enumerating from',
- 'to' => 'The page title to stop enumerating at',
- 'prefix' => 'Search for all page titles that begin with this value',
- 'namespace' => 'The namespace to enumerate',
- 'filterredir' => 'Which pages to list',
- 'dir' => 'The direction in which to list',
- 'minsize' => 'Limit to pages with at least this many bytes',
- 'maxsize' => 'Limit to pages with at most this many bytes',
- 'prtype' => 'Limit to protected pages only',
- 'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
- 'prfiltercascade' => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
- 'filterlanglinks' => 'Filter based on whether a page has langlinks',
- 'limit' => 'How many total pages to return.',
- 'prexpiry' => array(
- 'Which protection expiry to filter the page on',
- ' indefinite - Get only pages with indefinite protection expiry',
- ' definite - Get only pages with a definite (specific) protection expiry',
- ' all - Get pages with any protections expiry'
- ),
- );
- }
-
- public function getDescription() {
- return 'Enumerate all pages sequentially in a given namespace';
- }
-
- public function getPossibleErrors() {
- return array_merge( parent::getPossibleErrors(), array(
- array( 'code' => 'params', 'info' => 'Use "gapfilterredir=nonredirects" option instead of "redirects" when using allpages as a generator' ),
- array( 'code' => 'params', 'info' => 'prlevel may not be used without prtype' ),
- ) );
- }
-
- public function getExamples() {
- return array(
- 'api.php?action=query&list=allpages&apfrom=B' => array(
- 'Simple Use',
- 'Show a list of pages starting at the letter "B"',
- ),
- 'api.php?action=query&generator=allpages&gaplimit=4&gapfrom=T&prop=info' => array(
- 'Using as Generator',
- 'Show info about 4 pages starting at the letter "T"',
- ),
- 'api.php?action=query&generator=allpages&gaplimit=2&gapfilterredir=nonredirects&gapfrom=Re&prop=revisions&rvprop=content' => array(
- 'Show content of first 2 non-redirect pages begining at "Re"',
- )
- );
- }
-
- public function getHelpUrls() {
- return 'https://www.mediawiki.org/wiki/API:Allpages';
- }
-
- public function getVersion() {
- return __CLASS__ . ': $Id$';
- }
-}
*/
protected function addTimestampWhereRange( $field, $dir, $start, $end, $sort = true ) {
$db = $this->getDb();
- return $this->addWhereRange( $field, $dir,
+ $this->addWhereRange( $field, $dir,
$db->timestampOrNull( $start ), $db->timestampOrNull( $end ), $sort );
}
$this->dieUsage( "Invalid continue param. You should pass the " .
"original value returned by the previous query", "_badcontinue" );
}
+ $op = $params['dir'] == 'descending' ? '<' : '>';
$clfrom = intval( $cont[0] );
- $clto = $this->getDB()->strencode( $this->titleToKey( $cont[1] ) );
+ $clto = $this->getDB()->addQuotes( $this->titleToKey( $cont[1] ) );
$this->addWhere(
- "cl_from > $clfrom OR " .
+ "cl_from $op $clfrom OR " .
"(cl_from = $clfrom AND " .
- "cl_to >= '$clto')"
+ "cl_to $op= $clto)"
);
}
$this->dieUsage( 'Invalid continue param. You should pass the ' .
'original value returned by the previous query', '_badcontinue' );
}
- $orig = $this->getDB()->strencode( $this->titleTokey( $cont[0] ) );
- $dup = $this->getDB()->strencode( $this->titleToKey( $cont[1] ) );
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $db = $this->getDB();
+ $orig = $db->addQuotes( $this->titleTokey( $cont[0] ) );
+ $dup = $db->addQuotes( $this->titleToKey( $cont[1] ) );
$this->addWhere(
- "i1.img_name > '$orig' OR " .
- "(i1.img_name = '$orig' AND " .
- "i2.img_name >= '$dup')"
+ "i1.img_name $op $orig OR " .
+ "(i1.img_name = $orig AND " .
+ "i2.img_name $op= $dup)"
);
}
$dir = ( $params['dir'] == 'descending' ? ' DESC' : '' );
- $this->addOption( 'ORDER BY', 'i1.img_name' . $dir );
+ // Don't order by i1.img_name if it's constant in the WHERE clause
+ if ( count( $this->getPageSet()->getGoodTitles() ) == 1 ) {
+ $this->addOption( 'ORDER BY', 'i2.img_name' . $dir );
+ } else {
+ $this->addOption( 'ORDER BY', array(
+ 'i1.img_name' . $dir,
+ 'i2.img_name' . $dir
+ ));
+ }
$this->addOption( 'LIMIT', $params['limit'] + 1 );
$res = $this->select( __METHOD__ );
*
* Copyright © 2010 Sam Reed
* Copyright © 2008 Vasiliev Victor vasilvv@gmail.com,
- * based on ApiQueryAllpages.php
+ * based on ApiQueryAllPages.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
$this->dieUsage( 'Invalid continue param. You should pass the ' .
'original value returned by the previous query', '_badcontinue' );
}
+ $op = $params['dir'] == 'descending' ? '<' : '>';
+ $db = $this->getDB();
$iwlfrom = intval( $cont[0] );
- $iwlprefix = $this->getDB()->strencode( $cont[1] );
- $iwltitle = $this->getDB()->strencode( $this->titleToKey( $cont[2] ) );
+ $iwlprefix = $db->addQuotes( $cont[1] );
+ $iwltitle = $db->addQuotes( $this->titleToKey( $cont[2] ) );
$this->addWhere(
- "iwl_from > $iwlfrom OR " .
+ "iwl_from $op $iwlfrom OR " .
"(iwl_from = $iwlfrom AND " .
- "(iwl_prefix > '$iwlprefix' OR " .
- "(iwl_prefix = '$iwlprefix' AND " .
- "iwl_title >= '$iwltitle')))"
+ "(iwl_prefix $op $iwlprefix OR " .
+ "(iwl_prefix = $iwlprefix AND " .
+ "iwl_title $op= $iwltitle)))"
);
}
$this->dieUsage( 'Invalid continue param. You should pass the ' .
'original value returned by the previous query', '_badcontinue' );
}
+ $op = $params['dir'] == 'descending' ? '<' : '>';
$ilfrom = intval( $cont[0] );
- $ilto = $this->getDB()->strencode( $this->titleToKey( $cont[1] ) );
+ $ilto = $this->getDB()->addQuotes( $this->titleToKey( $cont[1] ) );
$this->addWhere(
- "il_from > $ilfrom OR " .
+ "il_from $op $ilfrom OR " .
"(il_from = $ilfrom AND " .
- "il_to >= '$ilto')"
+ "il_to $op= $ilto)"
);
}
$this->dieUsage( 'Invalid continue param. You should pass the ' .
'original value returned by the previous query', '_badcontinue' );
}
+ $op = $params['dir'] == 'descending' ? '<' : '>';
$llfrom = intval( $cont[0] );
- $lllang = $this->getDB()->strencode( $cont[1] );
+ $lllang = $this->getDB()->addQuotes( $cont[1] );
$this->addWhere(
- "ll_from > $llfrom OR " .
+ "ll_from $op $llfrom OR " .
"(ll_from = $llfrom AND " .
- "ll_lang >= '$lllang')"
+ "ll_lang $op= $lllang)"
);
}
$this->dieUsage( 'Invalid continue param. You should pass the ' .
'original value returned by the previous query', '_badcontinue' );
}
+ $op = $params['dir'] == 'descending' ? '<' : '>';
$plfrom = intval( $cont[0] );
$plns = intval( $cont[1] );
- $pltitle = $this->getDB()->strencode( $this->titleToKey( $cont[2] ) );
+ $pltitle = $this->getDB()->addQuotes( $this->titleToKey( $cont[2] ) );
$this->addWhere(
- "{$this->prefix}_from > $plfrom OR " .
+ "{$this->prefix}_from $op $plfrom OR " .
"({$this->prefix}_from = $plfrom AND " .
- "({$this->prefix}_namespace > $plns OR " .
+ "({$this->prefix}_namespace $op $plns OR " .
"({$this->prefix}_namespace = $plns AND " .
- "{$this->prefix}_title >= '$pltitle')))"
+ "{$this->prefix}_title $op= $pltitle)))"
);
}
*/
class PostgresField implements Field {
- private $name, $tablename, $type, $nullable, $max_length, $deferred, $deferrable, $conname;
+ private $name, $tablename, $type, $nullable, $max_length, $deferred, $deferrable, $conname,
+ $has_default, $default;
/**
* @param $db DatabaseBase
JOIN pg_attribute a ON (a.attrelid = c.oid)
JOIN pg_type t ON (t.oid = a.atttypid)
LEFT JOIN pg_constraint o ON (o.conrelid = c.oid AND a.attnum = ANY(o.conkey) AND o.contype = 'f')
+LEFT JOIN pg_attrdef d on c.oid=d.adrelid and a.attnum=d.adnum
WHERE relkind = 'r'
AND nspname=%s
AND relname=%s
$n->deferrable = ( $row->deferrable == 't' );
$n->deferred = ( $row->deferred == 't' );
$n->conname = $row->conname;
+ $n->has_default = ( $row->atthasdef === 't' );
+ $n->default = $row->adsrc;
return $n;
}
function conname() {
return $this->conname;
}
+ /**
+ * @since 1.19
+ */
+ function defaultValue() {
+ if( $this->has_default ) {
+ return $this->default;
+ } else {
+ return false;
+ }
+ }
}
* Used to debug transaction processing
* Only used if $wgDebugDBTransactions is true
*
- * @since 1.20
+ * @since 1.19
* @ingroup Database
*/
class PostgresTransactionState {
static $WATCHED = array(
array(
- "desc" => "Connection state changed from %s -> %s\n",
+ "desc" => "Connection state changed from %s -> %s\n",
"states" => array(
PGSQL_CONNECTION_OK => "OK",
PGSQL_CONNECTION_BAD => "BAD"
}
public function update() {
- $this->mNewState = array(
+ $this->mNewState = array(
pg_connection_status( $this->mConn ),
pg_transaction_status( $this->mConn )
);
}
protected function log_changed( $old, $new, $watched ) {
- wfDebug(sprintf($watched["desc"],
+ wfDebug(sprintf($watched["desc"],
$this->describe_changed( $old, $watched["states"] ),
$this->describe_changed( $new, $watched["states"] ))
);
}
protected function doQuery( $sql ) {
- global $wgDebugDBTransactions;
if ( function_exists( 'mb_convert_encoding' ) ) {
$sql = mb_convert_encoding( $sql, 'UTF-8' );
}
return false;
}
+ /**
+ * Returns is of attributes used in index
+ *
+ * @since 1.19
+ * @return Array
+ */
+ function indexAttributes ( $index, $schema = false ) {
+ if ( $schema === false )
+ $schema = $this->getCoreSchema();
+ /*
+ * A subquery would be not needed if we didn't care about the order
+ * of attributes, but we do
+ */
+ $sql = <<<__INDEXATTR__
+
+ SELECT opcname,
+ attname,
+ i.indoption[s.g] as option,
+ pg_am.amname
+ FROM
+ (SELECT generate_subscripts(isub.indkey, 1) AS g
+ FROM
+ pg_index isub
+ JOIN pg_class cis
+ ON cis.oid=isub.indexrelid
+ JOIN pg_namespace ns
+ ON cis.relnamespace = ns.oid
+ WHERE cis.relname='$index' AND ns.nspname='$schema') AS s,
+ pg_attribute,
+ pg_opclass opcls,
+ pg_am,
+ pg_class ci
+ JOIN pg_index i
+ ON ci.oid=i.indexrelid
+ JOIN pg_class ct
+ ON ct.oid = i.indrelid
+ JOIN pg_namespace n
+ ON ci.relnamespace = n.oid
+ WHERE
+ ci.relname='$index' AND n.nspname='$schema'
+ AND attrelid = ct.oid
+ AND i.indkey[s.g] = attnum
+ AND i.indclass[s.g] = opcls.oid
+ AND pg_am.oid = opcls.opcmethod
+__INDEXATTR__;
+ $res = $this->query($sql, __METHOD__);
+ $a = array();
+ if ( $res ) {
+ foreach ( $res as $row ) {
+ $a[] = array(
+ $row->attname,
+ $row->opcname,
+ $row->amname,
+ $row->option);
+ }
+ } else {
+ return null;
+ }
+ return $a;
+ }
+
+
function indexUnique( $table, $index, $fname = 'DatabasePostgres::indexUnique' ) {
$sql = "SELECT indexname FROM pg_indexes WHERE tablename='{$table}'".
" AND indexdef LIKE 'CREATE UNIQUE%(" .
# Replace reserved words with better ones
switch( $name ) {
case 'user':
- return 'mwuser';
+ return $this->realTableName( 'mwuser', $format );
case 'text':
- return 'pagecontent';
+ return $this->realTableName( 'pagecontent', $format );
default:
- return parent::tableName( $name, $format );
+ return $this->realTableName( $name, $format );
}
}
+ /* Don't cheat on installer */
+ function realTableName( $name, $format = 'quoted' ) {
+ return parent::tableName( $name, $format );
+ }
+
/**
* Return the next in a sequence, save the value for retrieval via insertId()
* @return null
return wfTimestamp( TS_POSTGRES, $ts );
}
- /*
+ /*
* Posted by cc[plus]php[at]c2se[dot]com on 25-Mar-2009 09:12
* to http://www.php.net/manual/en/ref.pgsql.php
*
*
* This should really be handled by PHP PostgreSQL module
*
- * @since 1.20
+ * @since 1.19
* @param $text string: postgreql array returned in a text form like {a,b}
* @param $output string
* @param $limit int
preg_match( "/(\\{?\"([^\"\\\\]|\\\\.)*\"|[^,{}]+)+([,}]+)/",
$text, $match, 0, $offset );
$offset += strlen( $match[0] );
- $output[] = ( '"' != $match[1]{0}
- ? $match[1]
+ $output[] = ( '"' != $match[1]{0}
+ ? $match[1]
: stripcslashes( substr( $match[1], 1, -1 ) ) );
if ( '},' == $match[3] ) {
return $output;
* Return current schema (executes SELECT current_schema())
* Needs transaction
*
- * @since 1.20
+ * @since 1.19
* @return string return default schema for the current session
*/
function getCurrentSchema() {
*
* @seealso getSearchPath()
* @seealso setSearchPath()
- * @since 1.20
+ * @since 1.19
* @return array list of actual schemas for the current sesson
*/
function getSchemas() {
* (like "$user").
* Needs transaction
*
- * @since 1.20
+ * @since 1.19
* @return array how to search for table names schemas for the current user
*/
function getSearchPath() {
/**
* Update search_path, values should already be sanitized
* Values may contain magic keywords like "$user"
- * @since 1.20
+ * @since 1.19
*
* @param $search_path array list of schemas to be searched by default
*/
*
* This will be also called by the installer after the schema is created
*
- * @since 1.20
- * @param desired_schema string
+ * @since 1.19
+ * @param desired_schema string
*/
function determineCoreSchema( $desired_schema ) {
$this->begin( __METHOD__ );
wfDebug("Schema \"" . $desired_schema . "\" already in the search path\n");
} else {
/**
- * Append our schema (e.g. 'mediawiki') in front
+ * Prepend our schema (e.g. 'mediawiki') in front
* of the search path
- * Fixes bug 15816
+ * Fixes bug 15816
*/
$search_path = $this->getSearchPath();
- array_unshift( $search_path,
+ array_unshift( $search_path,
$this->addIdentifierQuotes( $desired_schema ));
- $this->setSearchPath( $search_path );
+ $this->setSearchPath( $search_path );
$this->mCoreSchema = $desired_schema;
wfDebug("Schema \"" . $desired_schema . "\" added to the search path\n");
}
/**
* Return schema name fore core MediaWiki tables
*
- * @since 1.20
+ * @since 1.19
* @return string core schema name
*/
function getCoreSchema() {
if ( !$schema ) {
$schema = $this->getCoreSchema();
}
- $table = $this->tableName( $table, 'raw' );
+ $table = $this->realTableName( $table, 'raw' );
$etable = $this->addQuotes( $table );
$eschema = $this->addQuotes( $schema );
$SQL = "SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n "
--- /dev/null
+<?php
+
+/**
+ * Result of a ORMTable::select, which returns ORMRow objects.
+ *
+ * @since 1.20
+ *
+ * @file ORMResult.php
+ *
+ * @licence GNU GPL v2 or later
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ORMResult implements Iterator {
+
+ /**
+ * @var ResultWrapper
+ */
+ protected $res;
+
+ /**
+ * @var integer
+ */
+ protected $key;
+
+ /**
+ * @var ORMRow
+ */
+ protected $current;
+
+ /**
+ * @var ORMTable
+ */
+ protected $table;
+
+ /**
+ * @param ORMTable $table
+ * @param ResultWrapper $res
+ */
+ public function __construct( ORMTable $table, ResultWrapper $res ) {
+ $this->table = $table;
+ $this->res = $res;
+ $this->key = 0;
+ $this->setCurrent( $this->res->current() );
+ }
+
+ /**
+ * @param $row
+ */
+ protected function setCurrent( $row ) {
+ if ( $row === false ) {
+ $this->current = false;
+ } else {
+ $this->current = $this->table->newFromDBResult( $row );
+ }
+ }
+
+ /**
+ * @return integer
+ */
+ public function count() {
+ return $this->res->numRows();
+ }
+
+ /**
+ * @return boolean
+ */
+ public function isEmpty() {
+ return $this->res->numRows() === 0;
+ }
+
+ /**
+ * @return ORMRow
+ */
+ public function current() {
+ return $this->current;
+ }
+
+ /**
+ * @return integer
+ */
+ public function key() {
+ return $this->key;
+ }
+
+ public function next() {
+ $row = $this->res->next();
+ $this->setCurrent( $row );
+ $this->key++;
+ }
+
+ public function rewind() {
+ $this->res->rewind();
+ $this->key = 0;
+ $this->setCurrent( $this->res->current() );
+ }
+
+ /**
+ * @return boolean
+ */
+ public function valid() {
+ return $this->current !== false;
+ }
+
+}
--- /dev/null
+<?php
+
+/**
+ * Abstract base class for representing objects that are stored in some DB table.
+ * This is basically an ORM-like wrapper around rows in database tables that
+ * aims to be both simple and very flexible. It is centered around an associative
+ * array of fields and various methods to do common interaction with the database.
+ *
+ * These methods are likely candidates for overriding:
+ * * getDefaults
+ * * remove
+ * * insert
+ * * saveExisting
+ * * loadSummaryFields
+ * * getSummaryFields
+ *
+ * Main instance methods:
+ * * getField(s)
+ * * setField(s)
+ * * save
+ * * remove
+ *
+ * Main static methods:
+ * * select
+ * * update
+ * * delete
+ * * count
+ * * has
+ * * selectRow
+ * * selectFields
+ * * selectFieldsRow
+ *
+ * @since 1.20
+ *
+ * @file ORMRow.php
+ *
+ * @licence GNU GPL v2 or later
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+abstract class ORMRow {
+
+ /**
+ * The fields of the object.
+ * field name (w/o prefix) => value
+ *
+ * @since 1.20
+ * @var array
+ */
+ protected $fields = array( 'id' => null );
+
+ /**
+ * @since 1.20
+ * @var ORMTable
+ */
+ protected $table;
+
+ /**
+ * If the object should update summaries of linked items when changed.
+ * For example, update the course_count field in universities when a course in courses is deleted.
+ * Settings this to false can prevent needless updating work in situations
+ * such as deleting a university, which will then delete all it's courses.
+ *
+ * @since 1.20
+ * @var bool
+ */
+ protected $updateSummaries = true;
+
+ /**
+ * Indicates if the object is in summary mode.
+ * This mode indicates that only summary fields got updated,
+ * which allows for optimizations.
+ *
+ * @since 1.20
+ * @var bool
+ */
+ protected $inSummaryMode = false;
+
+ /**
+ * Constructor.
+ *
+ * @since 1.20
+ *
+ * @param ORMTable $table
+ * @param array|null $fields
+ * @param boolean $loadDefaults
+ */
+ public function __construct( ORMTable $table, $fields = null, $loadDefaults = false ) {
+ $this->table = $table;
+
+ if ( !is_array( $fields ) ) {
+ $fields = array();
+ }
+
+ if ( $loadDefaults ) {
+ $fields = array_merge( $this->table->getDefaults(), $fields );
+ }
+
+ $this->setFields( $fields );
+ }
+
+ /**
+ * Load the specified fields from the database.
+ *
+ * @since 1.20
+ *
+ * @param array|null $fields
+ * @param boolean $override
+ * @param boolean $skipLoaded
+ *
+ * @return bool Success indicator
+ */
+ public function loadFields( $fields = null, $override = true, $skipLoaded = false ) {
+ if ( is_null( $this->getId() ) ) {
+ return false;
+ }
+
+ if ( is_null( $fields ) ) {
+ $fields = array_keys( $this->table->getFields() );
+ }
+
+ if ( $skipLoaded ) {
+ $fields = array_diff( $fields, array_keys( $this->fields ) );
+ }
+
+ if ( !empty( $fields ) ) {
+ $result = $this->table->rawSelectRow(
+ $this->table->getPrefixedFields( $fields ),
+ array( $this->table->getPrefixedField( 'id' ) => $this->getId() ),
+ array( 'LIMIT' => 1 )
+ );
+
+ if ( $result !== false ) {
+ $this->setFields( $this->table->getFieldsFromDBResult( $result ), $override );
+ return true;
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Gets the value of a field.
+ *
+ * @since 1.20
+ *
+ * @param string $name
+ * @param mixed $default
+ *
+ * @throws MWException
+ * @return mixed
+ */
+ public function getField( $name, $default = null ) {
+ if ( $this->hasField( $name ) ) {
+ return $this->fields[$name];
+ } elseif ( !is_null( $default ) ) {
+ return $default;
+ } else {
+ throw new MWException( 'Attempted to get not-set field ' . $name );
+ }
+ }
+
+ /**
+ * Gets the value of a field but first loads it if not done so already.
+ *
+ * @since 1.20
+ *
+ * @param string$name
+ *
+ * @return mixed
+ */
+ public function loadAndGetField( $name ) {
+ if ( !$this->hasField( $name ) ) {
+ $this->loadFields( array( $name ) );
+ }
+
+ return $this->getField( $name );
+ }
+
+ /**
+ * Remove a field.
+ *
+ * @since 1.20
+ *
+ * @param string $name
+ */
+ public function removeField( $name ) {
+ unset( $this->fields[$name] );
+ }
+
+ /**
+ * Returns the objects database id.
+ *
+ * @since 1.20
+ *
+ * @return integer|null
+ */
+ public function getId() {
+ return $this->getField( 'id' );
+ }
+
+ /**
+ * Sets the objects database id.
+ *
+ * @since 1.20
+ *
+ * @param integer|null $id
+ */
+ public function setId( $id ) {
+ $this->setField( 'id', $id );
+ }
+
+ /**
+ * Gets if a certain field is set.
+ *
+ * @since 1.20
+ *
+ * @param string $name
+ *
+ * @return boolean
+ */
+ public function hasField( $name ) {
+ return array_key_exists( $name, $this->fields );
+ }
+
+ /**
+ * Gets if the id field is set.
+ *
+ * @since 1.20
+ *
+ * @return boolean
+ */
+ public function hasIdField() {
+ return $this->hasField( 'id' )
+ && !is_null( $this->getField( 'id' ) );
+ }
+
+ /**
+ * Sets multiple fields.
+ *
+ * @since 1.20
+ *
+ * @param array $fields The fields to set
+ * @param boolean $override Override already set fields with the provided values?
+ */
+ public function setFields( array $fields, $override = true ) {
+ foreach ( $fields as $name => $value ) {
+ if ( $override || !$this->hasField( $name ) ) {
+ $this->setField( $name, $value );
+ }
+ }
+ }
+
+ /**
+ * Gets the fields => values to write to the table.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ protected function getWriteValues() {
+ $values = array();
+
+ foreach ( $this->table->getFields() as $name => $type ) {
+ if ( array_key_exists( $name, $this->fields ) ) {
+ $value = $this->fields[$name];
+
+ switch ( $type ) {
+ case 'array':
+ $value = (array)$value;
+ case 'blob':
+ $value = serialize( $value );
+ }
+
+ $values[$this->table->getPrefixedField( $name )] = $value;
+ }
+ }
+
+ return $values;
+ }
+
+ /**
+ * Serializes the object to an associative array which
+ * can then easily be converted into JSON or similar.
+ *
+ * @since 1.20
+ *
+ * @param null|array $fields
+ * @param boolean $incNullId
+ *
+ * @return array
+ */
+ public function toArray( $fields = null, $incNullId = false ) {
+ $data = array();
+ $setFields = array();
+
+ if ( !is_array( $fields ) ) {
+ $setFields = $this->getSetFieldNames();
+ } else {
+ foreach ( $fields as $field ) {
+ if ( $this->hasField( $field ) ) {
+ $setFields[] = $field;
+ }
+ }
+ }
+
+ foreach ( $setFields as $field ) {
+ if ( $incNullId || $field != 'id' || $this->hasIdField() ) {
+ $data[$field] = $this->getField( $field );
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Load the default values, via getDefaults.
+ *
+ * @since 1.20
+ *
+ * @param boolean $override
+ */
+ public function loadDefaults( $override = true ) {
+ $this->setFields( $this->table->getDefaults(), $override );
+ }
+
+ /**
+ * Writes the answer to the database, either updating it
+ * when it already exists, or inserting it when it doesn't.
+ *
+ * @since 1.20
+ *
+ * @param string|null $functionName
+ *
+ * @return boolean Success indicator
+ */
+ public function save( $functionName = null ) {
+ if ( $this->hasIdField() ) {
+ return $this->saveExisting( $functionName );
+ } else {
+ return $this->insert( $functionName );
+ }
+ }
+
+ /**
+ * Updates the object in the database.
+ *
+ * @since 1.20
+ *
+ * @param string|null $functionName
+ *
+ * @return boolean Success indicator
+ */
+ protected function saveExisting( $functionName = null ) {
+ $dbw = wfGetDB( DB_MASTER );
+
+ $success = $dbw->update(
+ $this->table->getName(),
+ $this->getWriteValues(),
+ $this->table->getPrefixedValues( $this->getUpdateConditions() ),
+ is_null( $functionName ) ? __METHOD__ : $functionName
+ );
+
+ return $success;
+ }
+
+ /**
+ * Returns the WHERE considtions needed to identify this object so
+ * it can be updated.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ protected function getUpdateConditions() {
+ return array( 'id' => $this->getId() );
+ }
+
+ /**
+ * Inserts the object into the database.
+ *
+ * @since 1.20
+ *
+ * @param string|null $functionName
+ * @param array|null $options
+ *
+ * @return boolean Success indicator
+ */
+ protected function insert( $functionName = null, array $options = null ) {
+ $dbw = wfGetDB( DB_MASTER );
+
+ $result = $dbw->insert(
+ $this->table->getName(),
+ $this->getWriteValues(),
+ is_null( $functionName ) ? __METHOD__ : $functionName,
+ is_null( $options ) ? array( 'IGNORE' ) : $options
+ );
+
+ if ( $result ) {
+ $this->setField( 'id', $dbw->insertId() );
+ }
+
+ return $result;
+ }
+
+ /**
+ * Removes the object from the database.
+ *
+ * @since 1.20
+ *
+ * @return boolean Success indicator
+ */
+ public function remove() {
+ $this->beforeRemove();
+
+ $success = $this->table->delete( array( 'id' => $this->getId() ) );
+
+ if ( $success ) {
+ $this->onRemoved();
+ }
+
+ return $success;
+ }
+
+ /**
+ * Gets called before an object is removed from the database.
+ *
+ * @since 1.20
+ */
+ protected function beforeRemove() {
+ $this->loadFields( $this->getBeforeRemoveFields(), false, true );
+ }
+
+ /**
+ * Before removal of an object happens, @see beforeRemove gets called.
+ * This method loads the fields of which the names have been returned by this one (or all fields if null is returned).
+ * This allows for loading info needed after removal to get rid of linked data and the like.
+ *
+ * @since 1.20
+ *
+ * @return array|null
+ */
+ protected function getBeforeRemoveFields() {
+ return array();
+ }
+
+ /**
+ * Gets called after successfull removal.
+ * Can be overriden to get rid of linked data.
+ *
+ * @since 1.20
+ */
+ protected function onRemoved() {
+ $this->setField( 'id', null );
+ }
+
+ /**
+ * Return the names and values of the fields.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public function getFields() {
+ return $this->fields;
+ }
+
+ /**
+ * Return the names of the fields.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public function getSetFieldNames() {
+ return array_keys( $this->fields );
+ }
+
+ /**
+ * Sets the value of a field.
+ * Strings can be provided for other types,
+ * so this method can be called from unserialization handlers.
+ *
+ * @since 1.20
+ *
+ * @param string $name
+ * @param mixed $value
+ *
+ * @throws MWException
+ */
+ public function setField( $name, $value ) {
+ $fields = $this->table->getFields();
+
+ if ( array_key_exists( $name, $fields ) ) {
+ switch ( $fields[$name] ) {
+ case 'int':
+ $value = (int)$value;
+ break;
+ case 'float':
+ $value = (float)$value;
+ break;
+ case 'bool':
+ if ( is_string( $value ) ) {
+ $value = $value !== '0';
+ } elseif ( is_int( $value ) ) {
+ $value = $value !== 0;
+ }
+ break;
+ case 'array':
+ if ( is_string( $value ) ) {
+ $value = unserialize( $value );
+ }
+
+ if ( !is_array( $value ) ) {
+ $value = array();
+ }
+ break;
+ case 'blob':
+ if ( is_string( $value ) ) {
+ $value = unserialize( $value );
+ }
+ break;
+ case 'id':
+ if ( is_string( $value ) ) {
+ $value = (int)$value;
+ }
+ break;
+ }
+
+ $this->fields[$name] = $value;
+ } else {
+ throw new MWException( 'Attempted to set unknown field ' . $name );
+ }
+ }
+
+ /**
+ * Add an amount (can be negative) to the specified field (needs to be numeric).
+ *
+ * @since 1.20
+ *
+ * @param string $field
+ * @param integer $amount
+ *
+ * @return boolean Success indicator
+ */
+ public function addToField( $field, $amount ) {
+ if ( $amount == 0 ) {
+ return true;
+ }
+
+ if ( !$this->hasIdField() ) {
+ return false;
+ }
+
+ $absoluteAmount = abs( $amount );
+ $isNegative = $amount < 0;
+
+ $dbw = wfGetDB( DB_MASTER );
+
+ $fullField = $this->table->getPrefixedField( $field );
+
+ $success = $dbw->update(
+ $this->table->getName(),
+ array( "$fullField=$fullField" . ( $isNegative ? '-' : '+' ) . $absoluteAmount ),
+ array( $this->table->getPrefixedField( 'id' ) => $this->getId() ),
+ __METHOD__
+ );
+
+ if ( $success && $this->hasField( $field ) ) {
+ $this->setField( $field, $this->getField( $field ) + $amount );
+ }
+
+ return $success;
+ }
+
+ /**
+ * Return the names of the fields.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public function getFieldNames() {
+ return array_keys( $this->table->getFields() );
+ }
+
+ /**
+ * Computes and updates the values of the summary fields.
+ *
+ * @since 1.20
+ *
+ * @param array|string|null $summaryFields
+ */
+ public function loadSummaryFields( $summaryFields = null ) {
+
+ }
+
+ /**
+ * Sets the value for the @see $updateSummaries field.
+ *
+ * @since 1.20
+ *
+ * @param boolean $update
+ */
+ public function setUpdateSummaries( $update ) {
+ $this->updateSummaries = $update;
+ }
+
+ /**
+ * Sets the value for the @see $inSummaryMode field.
+ *
+ * @since 1.20
+ *
+ * @param boolean $summaryMode
+ */
+ public function setSummaryMode( $summaryMode ) {
+ $this->inSummaryMode = $summaryMode;
+ }
+
+ /**
+ * Return if any fields got changed.
+ *
+ * @since 1.20
+ *
+ * @param ORMRow $object
+ * @param boolean|array $excludeSummaryFields
+ * When set to true, summary field changes are ignored.
+ * Can also be an array of fields to ignore.
+ *
+ * @return boolean
+ */
+ protected function fieldsChanged( ORMRow $object, $excludeSummaryFields = false ) {
+ $exclusionFields = array();
+
+ if ( $excludeSummaryFields !== false ) {
+ $exclusionFields = is_array( $excludeSummaryFields ) ? $excludeSummaryFields : $this->table->getSummaryFields();
+ }
+
+ foreach ( $this->fields as $name => $value ) {
+ $excluded = $excludeSummaryFields && in_array( $name, $exclusionFields );
+
+ if ( !$excluded && $object->getField( $name ) !== $value ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the table this ORMRow is a row in.
+ *
+ * @since 1.20
+ *
+ * @return ORMTable
+ */
+ public function getTable() {
+ return $this->table;
+ }
+
+}
--- /dev/null
+<?php
+
+/**
+ * Abstract base class for representing a single database table.
+ *
+ * @since 1.20
+ *
+ * @file ORMTable.php
+ *
+ * @licence GNU GPL v2 or later
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+abstract class ORMTable {
+
+ /**
+ * Returns the name of the database table objects of this type are stored in.
+ *
+ * @since 1.20
+ *
+ * @return string
+ */
+ public abstract function getName();
+
+ /**
+ * Returns the name of a ORMRow deriving class that
+ * represents single rows in this table.
+ *
+ * @since 1.20
+ *
+ * @return string
+ */
+ public abstract function getRowClass();
+
+ /**
+ * Gets the db field prefix.
+ *
+ * @since 1.20
+ *
+ * @return string
+ */
+ protected abstract function getFieldPrefix();
+
+ /**
+ * Returns an array with the fields and their types this object contains.
+ * This corresponds directly to the fields in the database, without prefix.
+ *
+ * field name => type
+ *
+ * Allowed types:
+ * * id
+ * * str
+ * * int
+ * * float
+ * * bool
+ * * array
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public abstract function getFields();
+
+ /**
+ * Cache for instances, used by the singleton method.
+ *
+ * @since 1.20
+ * @var array of DBTable
+ */
+ protected static $instanceCache = array();
+
+ /**
+ * The database connection to use for read operations.
+ * Can be changed via @see setReadDb.
+ *
+ * @since 1.20
+ * @var integer DB_ enum
+ */
+ protected $readDb = DB_SLAVE;
+
+ /**
+ * Returns a list of default field values.
+ * field name => field value
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public function getDefaults() {
+ return array();
+ }
+
+ /**
+ * Returns a list of the summary fields.
+ * These are fields that cache computed values, such as the amount of linked objects of $type.
+ * This is relevant as one might not want to do actions such as log changes when these get updated.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public function getSummaryFields() {
+ return array();
+ }
+
+ /**
+ * Selects the the specified fields of the records matching the provided
+ * conditions and returns them as DBDataObject. Field names get prefixed.
+ *
+ * @since 1.20
+ *
+ * @param array|string|null $fields
+ * @param array $conditions
+ * @param array $options
+ * @param string|null $functionName
+ *
+ * @return ORMResult
+ */
+ public function select( $fields = null, array $conditions = array(),
+ array $options = array(), $functionName = null ) {
+ return new ORMResult( $this, $this->rawSelect( $fields, $conditions, $options, $functionName ) );
+ }
+
+ /**
+ * Selects the the specified fields of the records matching the provided
+ * conditions and returns them as DBDataObject. Field names get prefixed.
+ *
+ * @since 1.20
+ *
+ * @param array|string|null $fields
+ * @param array $conditions
+ * @param array $options
+ * @param string|null $functionName
+ *
+ * @return array of self
+ */
+ public function selectObjects( $fields = null, array $conditions = array(),
+ array $options = array(), $functionName = null ) {
+ $result = $this->selectFields( $fields, $conditions, $options, false, $functionName );
+
+ $objects = array();
+
+ foreach ( $result as $record ) {
+ $objects[] = $this->newFromArray( $record );
+ }
+
+ return $objects;
+ }
+
+ /**
+ * Do the actual select.
+ *
+ * @since 1.20
+ *
+ * @param null|string|array $fields
+ * @param array $conditions
+ * @param array $options
+ * @param null|string $functionName
+ *
+ * @return ResultWrapper
+ */
+ public function rawSelect( $fields = null, array $conditions = array(),
+ array $options = array(), $functionName = null ) {
+ if ( is_null( $fields ) ) {
+ $fields = array_keys( $this->getFields() );
+ }
+ else {
+ $fields = (array)$fields;
+ }
+
+ return wfGetDB( $this->getReadDb() )->select(
+ $this->getName(),
+ $this->getPrefixedFields( $fields ),
+ $this->getPrefixedValues( $conditions ),
+ is_null( $functionName ) ? __METHOD__ : $functionName,
+ $options
+ );
+ }
+
+ /**
+ * Selects the the specified fields of the records matching the provided
+ * conditions and returns them as associative arrays.
+ * Provided field names get prefixed.
+ * Returned field names will not have a prefix.
+ *
+ * When $collapse is true:
+ * If one field is selected, each item in the result array will be this field.
+ * If two fields are selected, each item in the result array will have as key
+ * the first field and as value the second field.
+ * If more then two fields are selected, each item will be an associative array.
+ *
+ * @since 1.20
+ *
+ * @param array|string|null $fields
+ * @param array $conditions
+ * @param array $options
+ * @param boolean $collapse Set to false to always return each result row as associative array.
+ * @param string|null $functionName
+ *
+ * @return array of array
+ */
+ public function selectFields( $fields = null, array $conditions = array(),
+ array $options = array(), $collapse = true, $functionName = null ) {
+ $objects = array();
+
+ $result = $this->rawSelect( $fields, $conditions, $options, $functionName );
+
+ foreach ( $result as $record ) {
+ $objects[] = $this->getFieldsFromDBResult( $record );
+ }
+
+ if ( $collapse ) {
+ if ( count( $fields ) === 1 ) {
+ $objects = array_map( 'array_shift', $objects );
+ }
+ elseif ( count( $fields ) === 2 ) {
+ $o = array();
+
+ foreach ( $objects as $object ) {
+ $o[array_shift( $object )] = array_shift( $object );
+ }
+
+ $objects = $o;
+ }
+ }
+
+ return $objects;
+ }
+
+ /**
+ * Selects the the specified fields of the first matching record.
+ * Field names get prefixed.
+ *
+ * @since 1.20
+ *
+ * @param array|string|null $fields
+ * @param array $conditions
+ * @param array $options
+ * @param string|null $functionName
+ *
+ * @return DBObject|bool False on failure
+ */
+ public function selectRow( $fields = null, array $conditions = array(),
+ array $options = array(), $functionName = null ) {
+ $options['LIMIT'] = 1;
+
+ $objects = $this->select( $fields, $conditions, $options, $functionName );
+
+ return $objects->isEmpty() ? false : $objects->current();
+ }
+
+ /**
+ * Selects the the specified fields of the records matching the provided
+ * conditions. Field names do NOT get prefixed.
+ *
+ * @since 1.20
+ *
+ * @param array $fields
+ * @param array $conditions
+ * @param array $options
+ * @param string|null $functionName
+ *
+ * @return ResultWrapper
+ */
+ public function rawSelectRow( array $fields, array $conditions = array(),
+ array $options = array(), $functionName = null ) {
+ $dbr = wfGetDB( $this->getReadDb() );
+
+ return $dbr->selectRow(
+ $this->getName(),
+ $fields,
+ $conditions,
+ is_null( $functionName ) ? __METHOD__ : $functionName,
+ $options
+ );
+ }
+
+ /**
+ * Selects the the specified fields of the first record matching the provided
+ * conditions and returns it as an associative array, or false when nothing matches.
+ * This method makes use of selectFields and expects the same parameters and
+ * returns the same results (if there are any, if there are none, this method returns false).
+ * @see ORMTable::selectFields
+ *
+ * @since 1.20
+ *
+ * @param array|string|null $fields
+ * @param array $conditions
+ * @param array $options
+ * @param boolean $collapse Set to false to always return each result row as associative array.
+ * @param string|null $functionName
+ *
+ * @return mixed|array|bool False on failure
+ */
+ public function selectFieldsRow( $fields = null, array $conditions = array(),
+ array $options = array(), $collapse = true, $functionName = null ) {
+ $options['LIMIT'] = 1;
+
+ $objects = $this->selectFields( $fields, $conditions, $options, $collapse, $functionName );
+
+ return empty( $objects ) ? false : $objects[0];
+ }
+
+ /**
+ * Returns if there is at least one record matching the provided conditions.
+ * Condition field names get prefixed.
+ *
+ * @since 1.20
+ *
+ * @param array $conditions
+ *
+ * @return boolean
+ */
+ public function has( array $conditions = array() ) {
+ return $this->selectRow( array( 'id' ), $conditions ) !== false;
+ }
+
+ /**
+ * Returns the amount of matching records.
+ * Condition field names get prefixed.
+ *
+ * Note that this can be expensive on large tables.
+ * In such cases you might want to use DatabaseBase::estimateRowCount instead.
+ *
+ * @since 1.20
+ *
+ * @param array $conditions
+ * @param array $options
+ *
+ * @return integer
+ */
+ public function count( array $conditions = array(), array $options = array() ) {
+ $res = $this->rawSelectRow(
+ array( 'COUNT(*) AS rowcount' ),
+ $this->getPrefixedValues( $conditions ),
+ $options
+ );
+
+ return $res->rowcount;
+ }
+
+ /**
+ * Removes the object from the database.
+ *
+ * @since 1.20
+ *
+ * @param array $conditions
+ * @param string|null $functionName
+ *
+ * @return boolean Success indicator
+ */
+ public function delete( array $conditions, $functionName = null ) {
+ return wfGetDB( DB_MASTER )->delete(
+ $this->getName(),
+ $this->getPrefixedValues( $conditions ),
+ $functionName
+ );
+ }
+
+ /**
+ * Get API parameters for the fields supported by this object.
+ *
+ * @since 1.20
+ *
+ * @param boolean $requireParams
+ * @param boolean $setDefaults
+ *
+ * @return array
+ */
+ public function getAPIParams( $requireParams = false, $setDefaults = false ) {
+ $typeMap = array(
+ 'id' => 'integer',
+ 'int' => 'integer',
+ 'float' => 'NULL',
+ 'str' => 'string',
+ 'bool' => 'integer',
+ 'array' => 'string',
+ 'blob' => 'string',
+ );
+
+ $params = array();
+ $defaults = $this->getDefaults();
+
+ foreach ( $this->getFields() as $field => $type ) {
+ if ( $field == 'id' ) {
+ continue;
+ }
+
+ $hasDefault = array_key_exists( $field, $defaults );
+
+ $params[$field] = array(
+ ApiBase::PARAM_TYPE => $typeMap[$type],
+ ApiBase::PARAM_REQUIRED => $requireParams && !$hasDefault
+ );
+
+ if ( $type == 'array' ) {
+ $params[$field][ApiBase::PARAM_ISMULTI] = true;
+ }
+
+ if ( $setDefaults && $hasDefault ) {
+ $default = is_array( $defaults[$field] ) ? implode( '|', $defaults[$field] ) : $defaults[$field];
+ $params[$field][ApiBase::PARAM_DFLT] = $default;
+ }
+ }
+
+ return $params;
+ }
+
+ /**
+ * Returns an array with the fields and their descriptions.
+ *
+ * field name => field description
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public function getFieldDescriptions() {
+ return array();
+ }
+
+ /**
+ * Get the database type used for read operations.
+ *
+ * @since 1.20
+ *
+ * @return integer DB_ enum
+ */
+ public function getReadDb() {
+ return $this->readDb;
+ }
+
+ /**
+ * Set the database type to use for read operations.
+ *
+ * @param integer $db
+ *
+ * @since 1.20
+ */
+ public function setReadDb( $db ) {
+ $this->readDb = $db;
+ }
+
+ /**
+ * Update the records matching the provided conditions by
+ * setting the fields that are keys in the $values param to
+ * their corresponding values.
+ *
+ * @since 1.20
+ *
+ * @param array $values
+ * @param array $conditions
+ *
+ * @return boolean Success indicator
+ */
+ public function update( array $values, array $conditions = array() ) {
+ $dbw = wfGetDB( DB_MASTER );
+
+ return $dbw->update(
+ $this->getName(),
+ $this->getPrefixedValues( $values ),
+ $this->getPrefixedValues( $conditions ),
+ __METHOD__
+ );
+ }
+
+ /**
+ * Computes the values of the summary fields of the objects matching the provided conditions.
+ *
+ * @since 1.20
+ *
+ * @param array|string|null $summaryFields
+ * @param array $conditions
+ */
+ public function updateSummaryFields( $summaryFields = null, array $conditions = array() ) {
+ $this->setReadDb( DB_MASTER );
+
+ foreach ( $this->select( null, $conditions ) as /* ORMRow */ $item ) {
+ $item->loadSummaryFields( $summaryFields );
+ $item->setSummaryMode( true );
+ $item->save();
+ }
+
+ $this->setReadDb( DB_SLAVE );
+ }
+
+ /**
+ * Takes in an associative array with field names as keys and
+ * their values as value. The field names are prefixed with the
+ * db field prefix.
+ *
+ * Field names can also be provided as an array with as first element a table name, such as
+ * $conditions = array(
+ * array( array( 'tablename', 'fieldname' ), $value ),
+ * );
+ *
+ * @since 1.20
+ *
+ * @param array $values
+ *
+ * @return array
+ */
+ public function getPrefixedValues( array $values ) {
+ $prefixedValues = array();
+
+ foreach ( $values as $field => $value ) {
+ if ( is_integer( $field ) ) {
+ if ( is_array( $value ) ) {
+ $field = $value[0];
+ $value = $value[1];
+ }
+ else {
+ $value = explode( ' ', $value, 2 );
+ $value[0] = $this->getPrefixedField( $value[0] );
+ $prefixedValues[] = implode( ' ', $value );
+ continue;
+ }
+ }
+
+ $prefixedValues[$this->getPrefixedField( $field )] = $value;
+ }
+
+ return $prefixedValues;
+ }
+
+ /**
+ * Takes in a field or array of fields and returns an
+ * array with their prefixed versions, ready for db usage.
+ *
+ * @since 1.20
+ *
+ * @param array|string $fields
+ *
+ * @return array
+ */
+ public function getPrefixedFields( array $fields ) {
+ foreach ( $fields as &$field ) {
+ $field = $this->getPrefixedField( $field );
+ }
+
+ return $fields;
+ }
+
+ /**
+ * Takes in a field and returns an it's prefixed version, ready for db usage.
+ *
+ * @since 1.20
+ *
+ * @param string|array $field
+ *
+ * @return string
+ */
+ public function getPrefixedField( $field ) {
+ return $this->getFieldPrefix() . $field;
+ }
+
+ /**
+ * Takes an array of field names with prefix and returns the unprefixed equivalent.
+ *
+ * @since 1.20
+ *
+ * @param array $fieldNames
+ *
+ * @return array
+ */
+ public function unprefixFieldNames( array $fieldNames ) {
+ return array_map( array( $this, 'unprefixFieldName' ), $fieldNames );
+ }
+
+ /**
+ * Takes a field name with prefix and returns the unprefixed equivalent.
+ *
+ * @since 1.20
+ *
+ * @param string $fieldName
+ *
+ * @return string
+ */
+ public function unprefixFieldName( $fieldName ) {
+ return substr( $fieldName, strlen( $this->getFieldPrefix() ) );
+ }
+
+ /**
+ * Get an instance of this class.
+ *
+ * @since 1.20
+ *
+ * @return ORMTable
+ */
+ public static function singleton() {
+ $class = function_exists( 'get_called_class' ) ? get_called_class() : self::get_called_class();
+
+ if ( !array_key_exists( $class, self::$instanceCache ) ) {
+ self::$instanceCache[$class] = new $class;
+ }
+
+ return self::$instanceCache[$class];
+ }
+
+ /**
+ * Compatibility fallback function so the singleton method works on PHP < 5.3.
+ * Code borrowed from http://www.php.net/manual/en/function.get-called-class.php#107445
+ *
+ * @since 1.20
+ *
+ * @return string
+ */
+ protected static function get_called_class() {
+ $bt = debug_backtrace();
+ $l = count($bt) - 1;
+ $matches = array();
+ while(empty($matches) && $l > -1){
+ $lines = file($bt[$l]['file']);
+ $callerLine = $lines[$bt[$l]['line']-1];
+ preg_match('/([a-zA-Z0-9\_]+)::'.$bt[$l--]['function'].'/',
+ $callerLine,
+ $matches);
+ }
+ if (!isset($matches[1])) $matches[1]=NULL; //for notices
+ if ($matches[1] == 'self') {
+ $line = $bt[$l]['line']-1;
+ while ($line > 0 && strpos($lines[$line], 'class') === false) {
+ $line--;
+ }
+ preg_match('/class[\s]+(.+?)[\s]+/si', $lines[$line], $matches);
+ }
+ return $matches[1];
+ }
+
+ /**
+ * Get an array with fields from a database result,
+ * that can be fed directly to the constructor or
+ * to setFields.
+ *
+ * @since 1.20
+ *
+ * @param stdClass $result
+ *
+ * @return array
+ */
+ public function getFieldsFromDBResult( stdClass $result ) {
+ $result = (array)$result;
+ return array_combine(
+ $this->unprefixFieldNames( array_keys( $result ) ),
+ array_values( $result )
+ );
+ }
+
+ /**
+ * Get a new instance of the class from a database result.
+ *
+ * @since 1.20
+ *
+ * @param stdClass $result
+ *
+ * @return ORMRow
+ */
+ public function newFromDBResult( stdClass $result ) {
+ return $this->newFromArray( $this->getFieldsFromDBResult( $result ) );
+ }
+
+ /**
+ * Get a new instance of the class from an array.
+ *
+ * @since 1.20
+ *
+ * @param array $data
+ * @param boolean $loadDefaults
+ *
+ * @return ORMRow
+ */
+ public function newFromArray( array $data, $loadDefaults = false ) {
+ $class = $this->getRowClass();
+ return new $class( $this, $data, $loadDefaults );
+ }
+
+ /**
+ * Return the names of the fields.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ public function getFieldNames() {
+ return array_keys( $this->getFields() );
+ }
+
+ /**
+ * Gets if the object can take a certain field.
+ *
+ * @since 1.20
+ *
+ * @param string $name
+ *
+ * @return boolean
+ */
+ public function canHaveField( $name ) {
+ return array_key_exists( $name, $this->getFields() );
+ }
+
+}
}
// Resolve source to a storage path if virtual
- if ( self::isVirtualUrl( $srcPath ) ) {
- $srcPath = $this->resolveVirtualUrl( $srcPath );
- }
+ $srcPath = $this->resolveToStoragePath( $srcPath );
// Get the appropriate file operation
if ( FileBackend::isStoragePath( $srcPath ) ) {
$path = $this->getZonePath( $zone ) . "/$rel";
} else {
// Resolve source to a storage path if virtual
- if ( self::isVirtualUrl( $path ) ) {
- $path = $this->resolveVirtualUrl( $path );
- }
+ $path = $this->resolveToStoragePath( $path );
}
$operations[] = array( 'op' => 'delete', 'src' => $path );
}
return $status;
}
+ /**
+ * Import a file from the local file system into the repo.
+ * This does no locking nor journaling and overrides existing files.
+ * This is intended for copying generated thumbnails into the repo.
+ *
+ * @param $src string File system path
+ * @param $dst string Virtual URL or storage path
+ * @return FileRepoStatus
+ */
+ final public function quickImport( $src, $dst ) {
+ return $this->quickImportBatch( array( array( $src, $dst ) ) );
+ }
+
+ /**
+ * Purge a file from the repo. This does no locking nor journaling.
+ * This is intended for purging thumbnail.
+ *
+ * @param $path string Virtual URL or storage path
+ * @return FileRepoStatus
+ */
+ final public function quickPurge( $path ) {
+ return $this->quickPurgeBatch( array( $path ) );
+ }
+
+ /**
+ * Import a batch of files from the local file system into the repo.
+ * This does no locking nor journaling and overrides existing files.
+ * This is intended for copying generated thumbnails into the repo.
+ *
+ * @param $src Array List of tuples (file system path, virtual URL or storage path)
+ * @return FileRepoStatus
+ */
+ public function quickImportBatch( array $pairs ) {
+ $this->assertWritableRepo(); // fail out if read-only
+
+ $status = $this->newGood();
+ $operations = array();
+ foreach ( $pairs as $pair ) {
+ list ( $src, $dst ) = $pair;
+ $operations[] = array(
+ 'op' => 'store',
+ 'src' => $src,
+ 'dst' => $this->resolveToStoragePath( $dst ),
+ 'overwrite' => true
+ );
+ $this->backend->prepare( array( 'dir' => dirname( $dst ) ) );
+ }
+ $status->merge( $this->backend->doOperations( $operations,
+ array( 'force' => 1, 'nonLocking' => 1, 'allowStale' => 1, 'nonJournaled' => 1 )
+ ) );
+
+ return $status;
+ }
+
+ /**
+ * Purge a batch of files from the repo. This does no locking nor journaling.
+ * This is intended for purging thumbnails.
+ *
+ * @param $path Array List of virtual URLs or storage paths
+ * @return FileRepoStatus
+ */
+ public function quickPurgeBatch( array $paths ) {
+ $this->assertWritableRepo(); // fail out if read-only
+
+ $status = $this->newGood();
+ $operations = array();
+ foreach ( $paths as $path ) {
+ $operations[] = array(
+ 'op' => 'delete',
+ 'src' => $this->resolveToStoragePath( $path ),
+ 'ignoreMissingSource' => true
+ );
+ }
+ $status->merge( $this->backend->doOperations( $operations,
+ array( 'force' => 1, 'nonLocking' => 1, 'allowStale' => 1, 'nonJournaled' => 1 )
+ ) );
+
+ return $status;
+ }
+
/**
* Pick a random name in the temp zone and store a file to it.
* Returns a FileRepoStatus object with the file Virtual URL in the value,
foreach ( $triplets as $i => $triplet ) {
list( $srcPath, $dstRel, $archiveRel ) = $triplet;
// Resolve source to a storage path if virtual
- if ( substr( $srcPath, 0, 9 ) == 'mwrepo://' ) {
- $srcPath = $this->resolveVirtualUrl( $srcPath );
- }
+ $srcPath = $this->resolveToStoragePath( $srcPath );
if ( !$this->validateFilename( $dstRel ) ) {
throw new MWException( 'Validation error in $dstRel' );
}
return $status;
}
+ /**
+ * Deletes a directory if empty
+ *
+ * @param $dir string Virtual URL (or storage path) of directory to clean
+ * @return Status
+ */
+ public function cleanDir( $dir ) {
+ $this->assertWritableRepo(); // fail out if read-only
+
+ $status = $this->newGood();
+ $status->merge( $this->backend->clean(
+ array( 'dir' => $this->resolveToStoragePath( $dir ) ) ) );
+
+ return $status;
+ }
+
/**
* Checks existence of a a file
*
public function fileExistsBatch( array $files ) {
$result = array();
foreach ( $files as $key => $file ) {
- if ( self::isVirtualUrl( $file ) ) {
- $file = $this->resolveVirtualUrl( $file );
- }
+ $file = $this->resolveToStoragePath( $file );
$result[$key] = $this->backend->fileExists( array( 'src' => $file ) );
}
return $result;
*
* This class defines the methods as abstract that subclasses must implement.
* Outside callers can assume that all backends will have these functions.
- *
+ *
* All "storage paths" are of the format "mwstore://<backend>/<container>/<path>".
- * The <path> portion is a relative path that uses UNIX file system (FS) notation,
- * though any particular backend may not actually be using a local filesystem.
+ * The <path> portion is a relative path that uses UNIX file system (FS) notation,
+ * though any particular backend may not actually be using a local filesystem.
* Therefore, the relative paths are only virtual.
- *
+ *
* Backend contents are stored under wiki-specific container names by default.
* For legacy reasons, this has no effect for the FS backend class, and per-wiki
* segregation must be done by setting the container paths appropriately.
- *
+ *
* FS-based backends are somewhat more restrictive due to the existence of real
* directory files; a regular file cannot have the same name as a directory. Other
* backends with virtual directories may not have this limitation. Callers should
* store files in such a way that no files and directories are under the same path.
- *
+ *
* Methods should avoid throwing exceptions at all costs.
* As a corollary, external dependencies should be kept to a minimum.
- *
+ *
* @ingroup FileBackend
* @since 1.19
*/
/**
* Create a new backend instance from configuration.
* This should only be called from within FileBackendGroup.
- *
+ *
* $config includes:
* 'name' : The unique name of this backend.
* This should consist of alphanumberic, '-', and '_' characters.
* Journals simply log changes to files stored in the backend.
* 'readOnly' : Write operations are disallowed if this is a non-empty string.
* It should be an explanation for the backend being read-only.
- *
+ *
* @param $config Array
*/
public function __construct( array $config ) {
* Get the unique backend name.
* We may have multiple different backends of the same type.
* For example, we can have two Swift backends using different proxies.
- *
+ *
* @return string
*/
final public function getName() {
/**
* Check if this backend is read-only
- *
+ *
* @return bool
*/
final public function isReadOnly() {
/**
* Get an explanatory message if this backend is read-only
- *
+ *
* @return string|bool Returns false if the backend is not read-only
*/
final public function getReadOnlyReason() {
* Callers supply an ordered list of operations to perform as a transaction.
* Files will be locked, the stat cache cleared, and then the operations attempted.
* If any serious errors occur, all attempted operations will be rolled back.
- *
+ *
* $ops is an array of arrays. The outer array holds a list of operations.
* Each inner array is a set of key value pairs that specify an operation.
- *
+ *
* Supported operations and their parameters:
* a) Create a new file in storage with the contents of a string
* array(
* 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.
* 'overwriteSame' : An error will not be given if a file already
* exists at the destination that has the same
* contents as the new contents to be written there.
- *
+ *
* $opts is an associative of boolean flags, including:
* 'force' : Errors that would normally cause a rollback do not.
* The remaining operations are still attempted if any fail.
* This has no effect unless the 'force' flag is set.
* 'nonJournaled' : Don't log this operation batch in the file journal.
* This limits the ability of recovery scripts.
- *
+ *
* Remarks on locking:
* File system paths given to operations should refer to files that are
* already locked or otherwise safe from modification from other processes.
* Normally these files will be new temp files, which should be adequate.
- *
+ *
* 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. The status will be "OK" unless:
* a) unexpected operation errors occurred (network partitions, disk full...)
* b) significant operation errors occured and 'force' was not set
- *
+ *
* @param $ops Array List of operations to execute in order
* @param $opts Array Batch operation options
* @return Status
* Prepare a storage directory for usage.
* This will create any required containers and parent directories.
* Backends using key/value stores only need to create the container.
- *
+ *
* $params include:
* dir : storage directory
- *
+ *
* @param $params Array
* @return Status
*/
* files whereas key/value store backends might restrict container
* access to the auth user that represents end-users in web request.
* This is not guaranteed to actually do anything.
- *
+ *
* $params include:
* dir : storage directory
* noAccess : try to deny file access
* noListing : try to deny file listing
- *
+ *
* @param $params Array
* @return Status
*/
* Delete a storage directory if it is empty.
* Backends using key/value stores may do nothing unless the directory
* is that of an empty container, in which case it should be deleted.
- *
+ *
* $params include:
* dir : storage directory
- *
+ *
* @param $params Array
* @return Status
*/
/**
* Check if a file exists at a storage path in the backend.
* This returns false if only a directory exists at the path.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return bool|null Returns null on failure
*/
/**
* Get the last-modified timestamp of the file at a storage path.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return string|bool TS_MW timestamp or false on failure
*/
/**
* Get the contents of a file at a storage path in the backend.
* This should be avoided for potentially large files.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return string|bool Returns false on failure
*/
/**
* Get the size (bytes) of a file at a storage path in the backend.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return integer|bool Returns false on failure
*/
* mtime : the last-modified timestamp (TS_MW)
* size : the file size (bytes)
* Additional values may be included for internal use only.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return Array|bool|null Returns null on failure
*/
/**
* Get a SHA-1 hash of the file at a storage path in the backend.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return string|bool Hash string or false on failure
*/
/**
* Get the properties of the file at a storage path in the backend.
* Returns FSFile::placeholderProps() on failure.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return Array
*/
* Appropriate HTTP headers (Status, Content-Type, Content-Length)
* must be sent if streaming began, while none should be sent otherwise.
* Implementations should flush the output buffer before sending data.
- *
+ *
* $params include:
* src : source storage path
* headers : additional HTTP headers to send on success
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return Status
*/
* The temporary copy will have the same extension as the source.
* b) An original of the file at a storage path in the backend.
* Temporary files may be purged when the file object falls out of scope.
- *
+ *
* Write operations should *never* be done on this file as some backends
* may do internal tracking or may be instances of FileBackendMultiWrite.
* In that later case, there are copies of the file that must stay in sync.
* Additionally, further calls to this function may return the same file.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return FSFile|null Returns null on failure
*/
* Get a local copy on disk of the file at a storage path in the backend.
* The temporary copy will have the same file extension as the source.
* Temporary files may be purged when the file object falls out of scope.
- *
+ *
* $params include:
* src : source storage path
* latest : use the latest available data
- *
+ *
* @param $params Array
* @return TempFSFile|null Returns null on failure
*/
/**
* Get an iterator to list out all stored files under a storage directory.
- * If the directory is of the form "mwstore://backend/container",
+ * If the directory is of the form "mwstore://backend/container",
* then all files in the container should be listed.
* If the directory is of form "mwstore://backend/container/dir",
* then all files under that container directory should be listed.
* Results should be storage paths relative to the given directory.
- *
+ *
* Storage backends with eventual consistency might return stale data.
- *
+ *
* $params include:
* dir : storage path directory
*
/**
* Lock the files at the given storage paths in the backend.
* This will either lock all the files or none (on failure).
- *
+ *
* Callers should consider using getScopedFileLocks() instead.
- *
+ *
* @param $paths Array Storage paths
* @param $type integer LockManager::LOCK_* constant
* @return Status
/**
* Unlock the files at the given storage paths in the backend.
- *
+ *
* @param $paths Array Storage paths
* @param $type integer LockManager::LOCK_* constant
* @return Status
* Lock the files at the given storage paths in the backend.
* This will either lock all the files or none (on failure).
* On failure, the status object will be updated with errors.
- *
+ *
* Once the return value goes out scope, the locks will be released and
* the status updated. Unlock fatals will not change the status "OK" value.
- *
+ *
* @param $paths Array Storage paths
* @param $type integer LockManager::LOCK_* constant
* @param $status Status Status to update on lock/unlock
return ScopedLock::factory( $this->lockManager, $paths, $type, $status );
}
+ /**
+ * Get the root storage path of this backend.
+ * All container paths are "subdirectories" of this path.
+ *
+ * @return string Storage path
+ * @since 1.20
+ */
+ final public function getRootStoragePath() {
+ return "mwstore://{$this->name}";
+ }
+
/**
* Check if a given path is a "mwstore://" path.
* This does not do any further validation or any existence checks.
- *
+ *
* @param $path string
* @return bool
*/
}
/**
- * Split a storage path into a backend name, a container name,
+ * Split a storage path into a backend name, a container name,
* and a relative file path. The relative path may be the empty string.
* This does not do any path normalization or traversal checks.
*
if ( count( $parts ) == 3 ) {
return $parts; // e.g. "backend/container/path"
} else {
- return array( $parts[0], $parts[1], '' ); // e.g. "backend/container"
+ return array( $parts[0], $parts[1], '' ); // e.g. "backend/container"
}
}
}
/**
* Normalize a storage path by cleaning up directory separators.
* Returns null if the path is not of the format of a valid storage path.
- *
+ *
* @param $storagePath string
- * @return string|null
+ * @return string|null
*/
final public static function normalizeStoragePath( $storagePath ) {
list( $backend, $container, $relPath ) = self::splitStoragePath( $storagePath );
* Get the parent storage directory of a storage path.
* This returns a path like "mwstore://backend/container",
* "mwstore://backend/container/...", or null if there is no parent.
- *
+ *
* @param $storagePath string
* @return string|null
*/
/**
* Get the final extension from a storage or FS path
- *
+ *
* @param $path string
* @return string
*/
strpos( $path, '../' ) === 0 ||
strpos( $path, '/./' ) !== false ||
strpos( $path, '/../' ) !== false
- ) {
+ ) {
return null;
}
}
* 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)
- * 'repeat' : hash subdirectories are prefixed with all the
+ * 'repeat' : hash subdirectories are prefixed with all the
* parent hash directory names (e.g. "a/ab/abc")
*/
public function __construct( array $config ) {
parent::__construct( $config );
// Required settings
$this->auth = new CF_Authentication(
- $config['swiftUser'],
- $config['swiftKey'],
+ $config['swiftUser'],
+ $config['swiftKey'],
null, // account; unused
- $config['swiftAuthUrl']
+ $config['swiftAuthUrl']
);
// Optional settings
$this->authTTL = isset( $config['swiftAuthTTL'] )
try {
$dContObj = $this->getContainer( $dstCont );
if ( empty( $params['overwrite'] ) &&
- $this->fileExists( array( 'src' => $params['dst'], 'latest' => 1 ) ) )
+ $this->fileExists( array( 'src' => $params['dst'], 'latest' => 1 ) ) )
{
$status->fatal( 'backend-fail-alreadyexists', $params['dst'] );
return $status;
try {
$dContObj = $this->getContainer( $dstCont );
if ( empty( $params['overwrite'] ) &&
- $this->fileExists( array( 'src' => $params['dst'], 'latest' => 1 ) ) )
+ $this->fileExists( array( 'src' => $params['dst'], 'latest' => 1 ) ) )
{
$status->fatal( 'backend-fail-alreadyexists', $params['dst'] );
return $status;
$sContObj = $this->getContainer( $srcCont );
$dContObj = $this->getContainer( $dstCont );
if ( empty( $params['overwrite'] ) &&
- $this->fileExists( array( 'src' => $params['dst'], 'latest' => 1 ) ) )
+ $this->fileExists( array( 'src' => $params['dst'], 'latest' => 1 ) ) )
{
$status->fatal( 'backend-fail-alreadyexists', $params['dst'] );
return $status;
/**
* Fill in any missing object metadata and save it to Swift
- *
+ *
* @param $obj CF_Object
* @param $path string Storage path to object
* @return bool Success
/**
* Do not call this function outside of SwiftFileBackendFileList
- *
+ *
* @param $fullCont string Resolved container name
* @param $dir string Resolved storage directory with no trailing slash
* @param $after string Storage path of file to list items after
$prefix = ( $dir == '' ) ? null : "{$dir}/";
$files = $container->list_objects( $limit, $after, $prefix );
} catch ( NoSuchContainerException $e ) {
- } catch ( NoSuchObjectException $e ) {
} catch ( InvalidResponseException $e ) {
} catch ( Exception $e ) { // some other exception?
$this->logException( $e, __METHOD__, array( 'cont' => $fullCont, 'dir' => $dir ) );
* @see FileBackendStore::doGetFileSha1base36()
* @return bool
*/
- public function doGetFileSha1base36( array $params ) {
+ protected function doGetFileSha1base36( array $params ) {
$stat = $this->getFileStat( $params );
if ( $stat ) {
return $stat['sha1'];
/**
* Get headers to send to Swift when reading a file based
- * on a FileBackend params array, e.g. that of getLocalCopy().
+ * on a FileBackend params array, e.g. that of getLocalCopy().
* $params is currently only checked for a 'latest' flag.
- *
+ *
* @param $params Array
- * @return Array
+ * @return Array
*/
protected function headersFromParams( array $params ) {
$hdrs = array();
/**
* Log an unexpected exception for this backend
- *
+ *
* @param $e Exception
* @param $func string
* @param $params Array
protected $pos = 0; // integer
/** @var SwiftFileBackend */
- protected $backend;
+ protected $backend;
protected $container; //
protected $dir; // string storage directory
protected $suffixStart; // integer
$thumb = $this->handler->getTransform( $this, $tmpThumbPath, $thumbUrl, $params );
}
} elseif ( $this->repo && $thumb->hasFile() && !$thumb->fileIsSource() ) {
- $backend = $this->repo->getBackend();
- // Copy the thumbnail from the file system into storage. This avoids using
- // FileRepo::store(); getThumbPath() uses a different zone in some subclasses.
- $backend->prepare( array( 'dir' => dirname( $thumbPath ) ) );
- $status = $backend->store(
- array( 'src' => $tmpThumbPath, 'dst' => $thumbPath, 'overwrite' => 1 ),
- array( 'force' => 1, 'nonLocking' => 1, 'allowStale' => 1 )
- );
+ // Copy the thumbnail from the file system into storage...
+ $status = $this->repo->quickImport( $tmpThumbPath, $thumbPath );
if ( $status->isOK() ) {
$thumb->setStoragePath( $thumbPath );
} else {
}
# Delete the thumbnails
- $this->repo->cleanupBatch( $purgeList, FileRepo::SKIP_LOCKING );
+ $this->repo->quickPurgeBatch( $purgeList );
# Clear out the thumbnail directory if empty
- $this->repo->getBackend()->clean( array( 'dir' => $dir ) );
+ $this->repo->cleanDir( $dir );
}
}
}
# Delete the thumbnails
- $this->repo->cleanupBatch( $purgeList, FileRepo::SKIP_LOCKING );
+ $this->repo->quickPurgeBatch( $purgeList );
# Clear out the thumbnail directory if empty
- $this->repo->getBackend()->clean( array( 'dir' => $dir ) );
+ $this->repo->cleanDir( $dir );
}
/** purgeDescription inherited */
'oldimage',
array(
'oi_name' => $this->newName,
- 'oi_archive_name = ' . $dbw->strreplace( 'oi_archive_name', $dbw->addQuotes( $this->oldName ), $dbw->addQuotes( $this->newName ) ),
+ 'oi_archive_name = ' . $dbw->strreplace( 'oi_archive_name',
+ $dbw->addQuotes( $this->oldName ), $dbw->addQuotes( $this->newName ) ),
),
array( 'oi_name' => $this->oldName ),
__METHOD__
$affected = $dbw->affectedRows();
$total = $this->oldCount;
$status->successCount += $affected;
- $status->failCount += $total - $affected;
+ // Bug 34934: $total is based on files that actually exist.
+ // There may be more DB rows than such files, in which case $affected
+ // can be greater than $total. We use max() to avoid negatives here.
+ $status->failCount += max( 0, $total - $affected );
if ( $status->failCount ) {
$status->error( 'imageinvalidfilename' );
}
{$metaNamespace}
## The URL base path to the directory containing the wiki;
## defaults for all runtime URL paths are based off of this.
-## For more information on customizing the URLs please see:
+## For more information on customizing the URLs
+## (like /w/index.php/Page_title to /wiki/Page_title) please see:
## http://www.mediawiki.org/wiki/Manual:Short_URL
\$wgScriptPath = \"{$this->values['wgScriptPath']}\";
\$wgScriptExtension = \"{$this->values['wgScriptExtension']}\";
array( 'renameIndex', 'mwuser', 'user_user_name_key', 'mwuser_user_name_key' ),
array( 'renameIndex', 'pagecontent','text_pkey', 'pagecontent_pkey' ),
- # new sequences
- array( 'addSequence', 'logging_log_id_seq' ),
- array( 'addSequence', 'page_restrictions_pr_id_seq' ),
-
# renamed sequences
array( 'renameSequence', 'ipblocks_ipb_id_val', 'ipblocks_ipb_id_seq' ),
array( 'renameSequence', 'rev_rev_id_val', 'revision_rev_id_seq' ),
array( 'addTable', 'uploadstash', 'patch-uploadstash.sql' ),
array( 'addTable', 'user_former_groups','patch-user_former_groups.sql' ),
array( 'addTable', 'config', 'patch-config.sql' ),
- array( 'addTable', 'external_user','patch-external_user.sql' ),
+ array( 'addTable', 'external_user', 'patch-external_user.sql' ),
# Needed before new field
array( 'convertArchive2' ),
array( 'changeField', 'image', 'img_size', 'integer', '' ),
array( 'changeField', 'image', 'img_width', 'integer', '' ),
array( 'changeField', 'image', 'img_height', 'integer', '' ),
- array( 'changeField', 'interwiki', 'iw_local', 'smallint', 'iw_local::smallint DEFAULT 0' ),
+ array( 'changeField', 'interwiki', 'iw_local', 'smallint', 'iw_local::smallint' ),
array( 'changeField', 'interwiki', 'iw_trans', 'smallint', 'iw_trans::smallint DEFAULT 0' ),
array( 'changeField', 'ipblocks', 'ipb_auto', 'smallint', 'ipb_auto::smallint DEFAULT 0' ),
array( 'changeField', 'ipblocks', 'ipb_anon_only', 'smallint', "CASE WHEN ipb_anon_only=' ' THEN 0 ELSE ipb_anon_only::smallint END DEFAULT 0" ),
// }}}
class MemCachedClientforWiki extends MWMemcached {
+
function _debugprint( $text ) {
- wfDebug( "memcached: $text" );
+ global $wgDebugLogGroups;
+ if( !isset( $wgDebugLogGroups['memcached'] ) ) {
+ # Prefix message since it will end up in main debug log file
+ $text = "memcached: $text";
+ }
+ wfDebugLog( 'memcached', $text );
}
}
$label = '';
$alt = '';
+ $link = '';
if ( isset( $matches[3] ) ) {
// look for an |alt= definition while trying not to break existing
// captions with multiple pipes (|) in it, until a more sensible grammar
// is defined for images in galleries
$matches[3] = $this->recursiveTagParse( trim( $matches[3] ) );
- $altmatches = StringUtils::explode('|', $matches[3]);
+ $parameterMatches = StringUtils::explode('|', $matches[3]);
$magicWordAlt = MagicWord::get( 'img_alt' );
+ $magicWordLink = MagicWord::get( 'img_link' );
- foreach ( $altmatches as $altmatch ) {
- $match = $magicWordAlt->matchVariableStartToEnd( $altmatch );
- if ( $match ) {
+ foreach ( $parameterMatches as $parameterMatch ) {
+ if ( $match = $magicWordAlt->matchVariableStartToEnd( $parameterMatch ) ) {
$alt = $this->stripAltText( $match, false );
}
+ elseif( $match = $magicWordLink->matchVariableStartToEnd( $parameterMatch ) ){
+ $link = strip_tags($this->replaceLinkHoldersText($match));
+ $chars = self::EXT_LINK_URL_CLASS;
+ $prots = $this->mUrlProtocols;
+ //check to see if link matches an absolute url, if not then it must be a wiki link.
+ if(!preg_match( "/^($prots)$chars+$/u", $link)){
+ $localLinkTitle = Title::newFromText($link);
+ $link = $localLinkTitle->getLocalURL();
+ }
+ }
else {
// concatenate all other pipes
- $label .= '|' . $altmatch;
+ $label .= '|' . $parameterMatch;
}
}
// remove the first pipe
$label = substr( $label, 1 );
}
- $ig->add( $title, $label, $alt );
+ $ig->add( $title, $label, $alt ,$link);
}
return $ig->toHTML();
}
$response = $this->makeComment( $warnings ) . $response;
}
- // Remove the output buffer and output the response
- ob_end_clean();
- echo $response;
-
// Save response to file cache unless there are errors
if ( isset( $fileCache ) && !$errors && !$missing ) {
// Cache single modules...and other requests if there are enough hits
}
}
+ // Remove the output buffer and output the response
+ ob_end_clean();
+ echo $response;
+
wfProfileOut( __METHOD__ );
}
'wgDefaultDateFormat' => $wgContLang->getDefaultDateFormat(),
'wgMonthNames' => $wgContLang->getMonthNamesArray(),
'wgMonthNamesShort' => $wgContLang->getMonthAbbreviationsArray(),
- 'wgMainPageTitle' => $mainPage ? $mainPage->getPrefixedText() : null,
+ 'wgMainPageTitle' => $mainPage->getPrefixedText(),
'wgFormattedNamespaces' => $wgContLang->getFormattedNamespaces(),
'wgNamespaceIds' => $namespaceIds,
'wgSiteName' => $wgSitename,
// Register modules
foreach ( $resourceLoader->getModuleNames() as $name ) {
$module = $resourceLoader->getModule( $name );
+ $deps = $module->getDependencies();
+ $group = $module->getGroup();
+ $source = $module->getSource();
// Support module loader scripts
$loader = $module->getLoaderScript();
if ( $loader !== false ) {
- $deps = $module->getDependencies();
- $group = $module->getGroup();
- $source = $module->getSource();
$version = wfTimestamp( TS_ISO_8601_BASIC,
$module->getModifiedTime( $context ) );
$out .= ResourceLoader::makeCustomLoaderScript( $name, $version, $deps, $group, $source, $loader );
$mtime = max( $moduleMtime, wfTimestamp( TS_UNIX, $wgCacheEpoch ) );
// Modules without dependencies, a group or a foreign source pass two arguments (name, timestamp) to
// mw.loader.register()
- if ( !count( $module->getDependencies() && $module->getGroup() === null && $module->getSource() === 'local' ) ) {
+ if ( !count( $deps ) && $group === null && $source === 'local' ) {
$registrations[] = array( $name, $mtime );
}
// Modules with dependencies but no group or foreign source pass three arguments
// (name, timestamp, dependencies) to mw.loader.register()
- elseif ( $module->getGroup() === null && $module->getSource() === 'local' ) {
- $registrations[] = array(
- $name, $mtime, $module->getDependencies() );
+ elseif ( $group === null && $source === 'local' ) {
+ $registrations[] = array( $name, $mtime, $deps );
}
// Modules with a group but no foreign source pass four arguments (name, timestamp, dependencies, group)
// to mw.loader.register()
- elseif ( $module->getSource() === 'local' ) {
- $registrations[] = array(
- $name, $mtime, $module->getDependencies(), $module->getGroup() );
+ elseif ( $source === 'local' ) {
+ $registrations[] = array( $name, $mtime, $deps, $group );
}
// Modules with a foreign source pass five arguments (name, timestamp, dependencies, group, source)
// to mw.loader.register()
else {
- $registrations[] = array(
- $name, $mtime, $module->getDependencies(), $module->getGroup(), $module->getSource() );
+ $registrations[] = array( $name, $mtime, $deps, $group, $source );
}
}
}
if ( $context->getOnly() === 'scripts' ) {
// The core modules:
- $modules = array( 'jquery', 'mediawiki' );
- wfRunHooks( 'ResourceLoaderGetStartupModules', array( &$modules ) );
+ $moduleNames = array( 'jquery', 'mediawiki' );
+ wfRunHooks( 'ResourceLoaderGetStartupModules', array( &$moduleNames ) );
// Get the latest version
+ $loader = $context->getResourceLoader();
$version = 0;
- foreach ( $modules as $moduleName ) {
+ foreach ( $moduleNames as $moduleName ) {
$version = max( $version,
- $context->getResourceLoader()->getModule( $moduleName )->getModifiedTime( $context )
+ $loader->getModule( $moduleName )->getModifiedTime( $context )
);
}
// Build load query for StartupModules
$query = array(
- 'modules' => ResourceLoader::makePackedModulesString( $modules ),
+ 'modules' => ResourceLoader::makePackedModulesString( $moduleNames ),
'only' => 'scripts',
'lang' => $context->getLanguage(),
'skin' => $context->getSkin(),
// Startup function
$configuration = $this->getConfig( $context );
$registrations = self::getModuleRegistrations( $context );
+ $registrations = str_replace( "\n", "\n\t", trim( $registrations ) ); // fix indentation
$out .= "var startUp = function() {\n" .
"\tmw.config = new " . Xml::encodeJsCall( 'mw.Map', array( $wgLegacyJavaScriptGlobals ) ) . "\n" .
"\t$registrations\n" .
* @return array
*/
protected function getPages( ResourceLoaderContext $context ) {
- if ( $context->getUser() ) {
- $user = User::newFromName( $context->getUser() );
- if ( $user instanceof User ) {
- $pages = array();
- foreach( $user->getEffectiveGroups() as $group ) {
- if ( in_array( $group, array( '*', 'user' ) ) ) {
- continue;
- }
- $pages["MediaWiki:Group-$group.js"] = array( 'type' => 'script' );
- $pages["MediaWiki:Group-$group.css"] = array( 'type' => 'style' );
- }
- return $pages;
+ global $wgUser;
+
+ $userName = $context->getUser();
+ if ( !$userName ) {
+ return array();
+ }
+
+ // Use $wgUser is possible; allows to skip a lot of code
+ if ( is_object( $wgUser ) && $wgUser->getName() == $userName ) {
+ $user = $wgUser;
+ } else {
+ $user = User::newFromName( $userName );
+ if ( !$user instanceof User ) {
+ return array();
+ }
+ }
+
+ $pages = array();
+ foreach( $user->getEffectiveGroups() as $group ) {
+ if ( in_array( $group, array( '*', 'user' ) ) ) {
+ continue;
}
+ $pages["MediaWiki:Group-$group.js"] = array( 'type' => 'script' );
+ $pages["MediaWiki:Group-$group.css"] = array( 'type' => 'style' );
}
- return array();
+ return $pages;
}
/* Methods */
array( 'name' => 'namespace', 'id' => 'namespace' )
) . ' ' .
Xml::checkLabel(
- wfMsg( 'allpages-hide-redirects' ),
+ $this->msg( 'allpages-hide-redirects' )->text(),
'hideredirects',
'hideredirects',
$hideredirects
*
* @ingroup SpecialPage
*/
-class BrokenRedirectsPage extends PageQueryPage {
+class BrokenRedirectsPage extends QueryPage {
function __construct( $name = 'BrokenRedirects' ) {
parent::__construct( $name );
--- /dev/null
+<?php
+
+/**
+ * Abstract special page class with scaffolding for caching HTML and other values
+ * in a single blob.
+ *
+ * Before using any of the caching functionality, call startCache.
+ * After the last call to either getCachedValue or addCachedHTML, call saveCache.
+ *
+ * To get a cached value or compute it, use getCachedValue like this:
+ * $this->getCachedValue( $callback );
+ *
+ * To add HTML that should be cached, use addCachedHTML like this:
+ * $this->addCachedHTML( $callback );
+ *
+ * The callback function is only called when needed, so do all your expensive
+ * computations here. This function should returns the HTML to be cached.
+ * It should not add anything to the PageOutput object!
+ *
+ * @since 1.20
+ *
+ * @file SpecialCachedPage.php
+ * @ingroup SpecialPage
+ *
+ * @licence GNU GPL v2 or later
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
+
+ /**
+ * CacheHelper object to which we forward the non-SpecialPage specific caching work.
+ * Initialized in startCache.
+ *
+ * @since 1.20
+ * @var CacheHelper
+ */
+ protected $cacheHelper;
+
+ /**
+ * If the cache is enabled or not.
+ *
+ * @since 1.20
+ * @var boolean
+ */
+ protected $cacheEnabled = true;
+
+ /**
+ * Sets if the cache should be enabled or not.
+ *
+ * @since 1.20
+ * @param boolean $cacheEnabled
+ */
+ public function setCacheEnabled( $cacheEnabled ) {
+ $this->cacheHelper->setCacheEnabled( $cacheEnabled );
+ }
+
+ /**
+ * Initializes the caching.
+ * Should be called before the first time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ *
+ * @param integer|null $cacheExpiry Sets the cache expiry, either ttl in seconds or unix timestamp.
+ * @param boolean|null $cacheEnabled Sets if the cache should be enabled or not.
+ */
+ public function startCache( $cacheExpiry = null, $cacheEnabled = null ) {
+ $this->cacheHelper = new CacheHelper();
+
+ $this->cacheHelper->setCacheEnabled( $this->cacheEnabled );
+ $this->cacheHelper->setOnInitializedHandler( array( $this, 'onCacheInitialized' ) );
+
+ $keyArgs = $this->getCacheKey();
+
+ if ( array_key_exists( 'action', $keyArgs ) && $keyArgs['action'] === 'purge' ) {
+ unset( $keyArgs['action'] );
+ }
+
+ $this->cacheHelper->setCacheKey( $keyArgs );
+
+ if ( $this->getRequest()->getText( 'action' ) === 'purge' ) {
+ $this->cacheHelper->rebuildOnDemand();
+ }
+
+ $this->cacheHelper->startCache( $cacheExpiry, $cacheEnabled );
+ }
+
+ /**
+ * Get a cached value if available or compute it if not and then cache it if possible.
+ * The provided $computeFunction is only called when the computation needs to happen
+ * and should return a result value. $args are arguments that will be passed to the
+ * compute function when called.
+ *
+ * @since 1.20
+ *
+ * @param {function} $computeFunction
+ * @param array|mixed $args
+ * @param string|null $key
+ *
+ * @return mixed
+ */
+ public function getCachedValue( $computeFunction, $args = array(), $key = null ) {
+ return $this->cacheHelper->getCachedValue( $computeFunction, $args, $key );
+ }
+
+ /**
+ * Add some HTML to be cached.
+ * This is done by providing a callback function that should
+ * return the HTML to be added. It will only be called if the
+ * item is not in the cache yet or when the cache has been invalidated.
+ *
+ * @since 1.20
+ *
+ * @param {function} $computeFunction
+ * @param array $args
+ * @param string|null $key
+ */
+ public function addCachedHTML( $computeFunction, $args = array(), $key = null ) {
+ $this->getOutput()->addHTML( $this->cacheHelper->getCachedValue( $computeFunction, $args, $key ) );
+ }
+
+ /**
+ * Saves the HTML to the cache in case it got recomputed.
+ * Should be called after the last time anything is added via addCachedHTML.
+ *
+ * @since 1.20
+ */
+ public function saveCache() {
+ $this->cacheHelper->saveCache();
+ }
+
+ /**
+ * Sets the time to live for the cache, in seconds or a unix timestamp indicating the point of expiry.
+ *
+ * @since 1.20
+ *
+ * @param integer $cacheExpiry
+ */
+ public function setExpiry( $cacheExpiry ) {
+ $this->cacheHelper->setExpiry( $cacheExpiry );
+ }
+
+ /**
+ * Returns the variables used to constructed the cache key in an array.
+ *
+ * @since 1.20
+ *
+ * @return array
+ */
+ protected function getCacheKey() {
+ return array(
+ $this->mName,
+ $this->getLanguage()->getCode()
+ );
+ }
+
+ /**
+ * Gets called after the cache got initialized.
+ *
+ * @since 1.20
+ *
+ * @param boolean $hasCached
+ */
+ public function onCacheInitialized( $hasCached ) {
+ if ( $hasCached ) {
+ $this->getOutput()->setSubtitle( $this->cacheHelper->getCachedNotice( $this->getContext() ) );
+ }
+ }
+
+}
\ No newline at end of file
)
);
}
+
+ # Uploads
+ $tools[] = Linker::linkKnown(
+ SpecialPage::getTitleFor( 'Listfiles', $userObj->getName() ),
+ $this->msg( 'sp-contributions-uploads' )->escaped()
+ );
+
# Other logs link
$tools[] = Linker::linkKnown(
SpecialPage::getTitleFor( 'Log' ),
*
* @ingroup SpecialPage
*/
-class DisambiguationsPage extends PageQueryPage {
+class DisambiguationsPage extends QueryPage {
function __construct( $name = 'Disambiguations' ) {
parent::__construct( $name );
*
* @ingroup SpecialPage
*/
-class DoubleRedirectsPage extends PageQueryPage {
+class DoubleRedirectsPage extends QueryPage {
function __construct( $name = 'DoubleRedirects' ) {
parent::__construct( $name );
$r[] = $this->msg( 'listgrouprights-removegroup-all' )->escaped();
} elseif( is_array( $remove ) && count( $remove ) ) {
$remove = array_values( array_unique( $remove ) );
- $r[] = $this->msg( 'listgrouprights-removegroup', array( 'parseinline' ),
+ $r[] = $this->msg( 'listgrouprights-removegroup',
$lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $remove ) ),
count( $remove )
)->parse();
$r[] = $this->msg( 'listgrouprights-addgroup-self-all' )->escaped();
} elseif( is_array( $addSelf ) && count( $addSelf ) ) {
$addSelf = array_values( array_unique( $addSelf ) );
- $r[] = $this->msg( 'listgrouprights-addgroup-self', array( 'parseinline' ),
+ $r[] = $this->msg( 'listgrouprights-addgroup-self',
$lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $addSelf ) ),
count( $addSelf )
)->parse();
$r[] = $this->msg( 'listgrouprights-removegroup-self-all' )->parse();
} elseif( is_array( $removeSelf ) && count( $removeSelf ) ) {
$removeSelf = array_values( array_unique( $removeSelf ) );
- $r[] = $this->msg( 'listgrouprights-removegroup-self', array( 'parseinline' ),
+ $r[] = $this->msg( 'listgrouprights-removegroup-self',
$lang->listToText( array_map( array( 'User', 'makeGroupLinkWiki' ), $removeSelf ) ),
count( $removeSelf )
)->parse();
$text =
$this->getMediaWikiCredits() .
$this->softwareInformation() .
+ $this->getEntryPointInfo() .
$this->getExtensionCredits();
if ( $wgSpecialVersionShowHooks ) {
$text .= $this->getWgHooks();
$shortSha1 = substr( $gitInfo, 0, 7 );
$version = "$wgVersion ($shortSha1)";
} elseif ( $flags === 'nodb' ) {
- $version = "$wgVersion (r{$info['checkout-rev']})";
+ $version = "$wgVersion (r{$svnInfo['checkout-rev']})";
} else {
$version = $wgVersion . ' ' .
wfMsg(
return $repo->getHeadSHA1();
}
+ /**
+ * Get the list of entry points and their URLs
+ * @return string Wikitext
+ */
+ public function getEntryPointInfo() {
+ global $wgArticlePath, $wgScriptPath;
+ $entryPoints = array(
+ 'version-entrypoints-articlepath' => $wgArticlePath,
+ 'version-entrypoints-scriptpath' => $wgScriptPath,
+ 'version-entrypoints-index-php' => wfScript( 'index' ),
+ 'version-entrypoints-api-php' => wfScript( 'api' ),
+ 'version-entrypoints-load-php' => wfScript( 'load' ),
+ );
+
+ $out = Html::element( 'h2', array( 'id' => 'mw-version-entrypoints' ), wfMsg( 'version-entrypoints' ) ) .
+ Html::openElement( 'table', array( 'class' => 'wikitable', 'id' => 'mw-version-entrypoints-table' ) ) .
+ Html::openElement( 'tr' ) .
+ Html::element( 'th', array(), wfMessage( 'version-entrypoints-header-entrypoint' )->text() ) .
+ Html::element( 'th', array(), wfMessage( 'version-entrypoints-header-url' )->text() ) .
+ Html::closeElement( 'tr' );
+
+ foreach ( $entryPoints as $message => $value ) {
+ $url = wfExpandUrl( $value, PROTO_RELATIVE );
+ $out .= Html::openElement( 'tr' ) .
+ // ->text() looks like it should be ->parse(), but this function
+ // returns wikitext, not HTML, boo
+ Html::rawElement( 'td', array(), wfMessage( $message )->text() ) .
+ Html::rawElement( 'td', array(), Html::rawElement( 'code', array(), "[$url $value]" ) ) .
+ Html::closeElement( 'tr' );
+ }
+
+ $out .= Html::closeElement( 'table' );
+ return $out;
+ }
+
function showEasterEgg() {
$rx = $rp = $xe = '';
$alpha = array("", "kbQW", "\$\n()");
// chooses one of wpDestFile, wpUploadFile, filename in that order.
$desiredDestName = $request->getText( 'wpDestFile', $request->getText( 'wpUploadFile', $request->getText( 'filename' ) ) );
- return $this->initialize( $fileKey, $desiredDestName );
+ $this->initialize( $fileKey, $desiredDestName );
}
/**
if ( !$desiredDestName ) {
$desiredDestName = $request->getText( 'wpUploadFileURL' );
}
- return $this->initialize(
+ $this->initialize(
$desiredDestName,
trim( $request->getVal( 'wpUploadFileURL' ) ),
false
'hijri-calendar-m10', 'hijri-calendar-m11', 'hijri-calendar-m12'
);
+ /**
+ * @since 1.20
+ * @var array
+ */
+ static public $durationIntervals = array(
+ 'millennia' => 31557600000,
+ 'centuries' => 3155760000,
+ 'decades' => 315576000,
+ 'years' => 31557600, // 86400 * 365.25
+ 'weeks' => 604800,
+ 'days' => 86400,
+ 'hours' => 3600,
+ 'minutes' => 60,
+ 'seconds' => 1,
+ );
+
/**
* Get a cached language object for a given language code
* @param $code String
return $this->sprintfDate( $df, $ts );
}
+ /**
+ * Takes a number of seconds and turns it into a text using values such as hours and minutes.
+ *
+ * @since 1.20
+ *
+ * @param integer $seconds The amount of seconds.
+ * @param array $chosenIntervals The intervals to enable.
+ *
+ * @return string
+ */
+ public function formatDuration( $seconds, array $chosenIntervals = array() ) {
+ $intervals = $this->getDurationIntervals( $seconds, $chosenIntervals );
+
+ $segments = array();
+
+ foreach ( $intervals as $intervalName => $intervalValue ) {
+ $message = new Message( 'duration-' . $intervalName, array( $intervalValue ) );
+ $segments[] = $message->inLanguage( $this )->escaped();
+ }
+
+ return $this->listToText( $segments );
+ }
+
+ /**
+ * Takes a number of seconds and returns an array with a set of corresponding intervals.
+ * For example 65 will be turned into array( minutes => 1, seconds => 5 ).
+ *
+ * @since 1.20
+ *
+ * @param integer $seconds The amount of seconds.
+ * @param array $chosenIntervals The intervals to enable.
+ *
+ * @return array
+ */
+ public function getDurationIntervals( $seconds, array $chosenIntervals = array() ) {
+ if ( empty( $chosenIntervals ) ) {
+ $chosenIntervals = array( 'millennia', 'centuries', 'decades', 'years', 'days', 'hours', 'minutes', 'seconds' );
+ }
+
+ $intervals = array_intersect_key( self::$durationIntervals, array_flip( $chosenIntervals ) );
+ $sortedNames = array_keys( $intervals );
+ $smallestInterval = array_pop( $sortedNames );
+
+ $segments = array();
+
+ foreach ( $intervals as $name => $length ) {
+ $value = floor( $seconds / $length );
+
+ if ( $value > 0 || ( $name == $smallestInterval && empty( $segments ) ) ) {
+ $seconds -= $value * $length;
+ $segments[$name] = $value;
+ }
+ }
+
+ return $segments;
+ }
+
/**
* Internal helper function for userDate(), userTime() and userTimeAndDate()
*
* @author Bassem JARKAS
* @author Chaos
* @author Ciphers
+ * @author DRIHEM
* @author DrFO.Tn
* @author Elmondo21st
* @author Elmoro
تذكر أن ملفات ال.css و ال.js تستخدم حروف صغيرة في العنوان ، كمثال {{ns:user}}:Foo/vector.css و ليس {{ns:user}}:Foo/Vector.css.",
'updated' => '(محدثة)',
'note' => "'''ملاحظة:'''",
-'previewnote' => "'''تذكر أن هذه مجرد معاينة للصفحة؛''''
+'previewnote' => "'''تذكر أن هذه مجرد معاينة أولية.'''
لم تحفظ تغييراتك إلى الآن!",
'previewconflict' => 'هذا العرض يوضح النص الموجود في صندوق التحرير العلوي والذي سيظهر إذا اخترت الحفظ.',
'session_fail_preview' => "'''عذرا! لم نتمكن من حفظ التعديلات التي قمت بها نتيجة لضياع بيانات هذه الجلسة.
# img_auth script messages
'img-auth-accessdenied' => 'رفض الوصول',
'img-auth-nopathinfo' => 'PATH_INFO مفقود.
-خادÙ\88Ù\85Ù\83 Ù\84Ù\8aس Ù\85ضبÙ\88طا Ù\84تÙ\85رÙ\8aر Ù\87Ø°Ù\87 اÙ\84Ù\85عÙ\84Ù\88Ù\85ات.
-ربما يكون مبني على CGI ولا يمكنه دعم img_auth.
-[https://www.mediawiki.org/wiki/Manual:Image_Authorization راجع تصريح الصور].',
+خادÙ\85Ù\83 Ù\84Ù\8aس Ù\85ضبÙ\88طا Ù\84تÙ\85رÙ\8aر Ù\87Ø°Ù\87 اÙ\84Ù\85عÙ\84Ù\88Ù\85Ø©.
+قد يكون مبنيا على نظام CGI ولا يمكنه دعم img_auth.
+راجع https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
'img-auth-notindir' => 'المسار المطلوب غير موجود في مجلد الرفع المضبوط.',
'img-auth-badtitle' => 'تعذر تشكيل عنوان صالح من "$1".',
'img-auth-nologinnWL' => 'لست والجا و"$1" ليست في القائمة البيضاء.',
'linksearch-pat' => 'نمط البحث:',
'linksearch-ns' => 'النطاق:',
'linksearch-ok' => 'ابحث',
-'linksearch-text' => 'الكروت الخاصة مثل "*.wikipedia.org" يمكن استخدامها.<br />
-البروتوكولات المدعومة: <tt>$1</tt>',
+'linksearch-text' => 'Wildcards مثل "*.wikipedia.org" يمكن استخدامها.
+تحتاج على الأقل إلى نطاق ذو مستوى أعلى، كمثال "*.org".<br />
+البروتوكولات المدعومة: <tt>$1</tt> (لا تقم بإضافة أي من هذه إلى بحثك).',
'linksearch-line' => '$1 موصولة من $2',
'linksearch-error' => 'الكروت الخاصة يمكن أن تظهر فقط في بداية اسم المضيف.',
'ipb-confirm' => 'أكّد المنع',
'badipaddress' => 'عنوان أيبي غير صحيح',
'blockipsuccesssub' => 'تم المنع بنجاح',
-'blockipsuccesstext' => 'تم منع [[Special:Contributions/$1|$1]].<br />
-اÙ\86ظر [[Special:BlockList|Ù\82ائÙ\85Ø© Ù\85Ù\86ع اÙ\84Ø£يبي]] لمراجعة حالات المنع.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] تم منعها.<br />
+Ø£Ù\86ظر [[Special:BlockList|Ù\82ائÙ\85Ø© Ù\85Ù\86ع اÙ\84Ø¢يبي]] لمراجعة حالات المنع.',
'ipb-blockingself' => 'أنت على وشك منع نفسك! أمتأكد من رغبتك في القيام بذلك؟',
'ipb-confirmhideuser' => 'أنت على وشك منع مستخدم مع تفعيل خيار "أخف المستخدم". سوف يخفي هذا الخيار اسم المستخدم من جميل القوائم ومدخلات السجلات. أمتأكد من رغبتك في القيام بذلك؟',
'ipb-edit-dropdown' => 'عدل أسباب المنع',
'reblock-logentry' => 'غير إعدادات المنع ل[[$1]] بتاريخ انتهاء $2 $3',
'blocklogtext' => 'هذا سجل بعمليات المنع ورفع المنع.
عناوين الأيبي الممنوعة تلقائيا ليست معروضة.
-اÙ\86ظر [[Special:BlockList|عÙ\86اÙ\88Ù\8aÙ\86 اÙ\84Ø£Ù\8aبÙ\8a اÙ\84Ù\85Ù\85Ù\86Ù\88عة]] لرؤية عمليات المنع المفعلة حاليا.',
+Ø£Ù\86ظر [[Special:BlockList|Ù\82ائÙ\85Ø© Ù\85Ù\86ع اÙ\84Ø¢Ù\8aبÙ\8a]] لرؤية عمليات المنع المفعلة حاليا.',
'unblocklogentry' => 'رفع منع $1',
'block-log-flags-anononly' => 'المستخدمون المجهولون فقط',
'block-log-flags-nocreate' => 'إنشاء الحسابات ممنوع',
'api-error-duplicate-archive-popup-title' => 'تكرار {{PLURAL:$1|ملف|ملفات}} قد تم حذفه مسبقاً',
'api-error-duplicate-popup-title' => 'ارفع {{PLURAL:$1|الملف|الملف|الملفين|الملفات|الملفات|الملفات}}',
'api-error-empty-file' => 'كان ملف الذي قمت بإرسال فارغة.',
+'api-error-emptypage' => 'إنشاء صفحات فارغة جديدة، غير مسموح به.',
'api-error-fetchfileerror' => 'خطأ داخلي: قد حدث خطأ أثناء إحضار الملف.',
'api-error-file-too-large' => 'الملف الذي أرسلته كان كبيرا جدا.',
'api-error-filename-tooshort' => 'اسم الملف قصير جدا.',
# New logging system
'logentry-move-move' => '$1 ܫܢܐ ܕܦܐ ܕ $3 ܠ $4',
-'logentry-move-move-noredirect' => '$1 ܫܢܐ ܕܦܐ ܕ $3 ܠ $4 ܕܠܐ ܫܒܩܐ ܕܦܐ ܕܨܘܝܒܐ',
+'logentry-move-move-noredirect' => '$1 Ü«Ü¢Ü\90 Ü\95ܦÜ\90 Ü\95 $3 Ü $4 Ü\95Ü Ü\90 Ü«Ü\92Ü©Ü\90 Ü\95Ü\95ܦÜ\90 Ü\95ܨÜ\98Ü\9dÜ\92Ü\90',
'logentry-move-move_redir' => '$1 ܫܢܐ ܕܦܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܗܘܐ ܕܦܐ ܕܨܘܝܒܐ',
-'logentry-move-move_redir-noredirect' => '$1 ܫܢܐ ܕܦܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܗܘܐ ܕܦܐ ܕܨܘܝܒܐ ܘܕܠܐ ܫܒܩܐ ܕܦܐ ܕܨܘܝܒܐ',
+'logentry-move-move_redir-noredirect' => '$1 Ü«Ü¢Ü\90 Ü\95ܦÜ\90 Ü\95 $3 Ü $4 Ü\95Ü\90Ü\9dܬÜ\98Ü\97Ü\9d Ü\97Ü\98Ü\90 Ü\95ܦÜ\90 Ü\95ܨÜ\98Ü\9dÜ\92Ü\90 Ü\98Ü\95Ü Ü\90 Ü«Ü\92Ü©Ü\90 Ü\95Ü\95ܦÜ\90 Ü\95ܨÜ\98Ü\9dÜ\92Ü\90',
'logentry-newusers-newusers' => '$1 ܒܪܐ ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ',
'logentry-newusers-create' => '$1 ܒܪܐ ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ',
'logentry-newusers-create2' => '$1 ܒܪܐ ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3',
Eymi [[Special:Search/{{PAGENAME}}|pepikintuymi tüfachi üy]] kake wülngiñ mew,
kam <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} kintuymi koneltuyelelu wirintukun]</span>.',
'previewnote' => "'''Ngüneduamimi tüfachi wüne pen petu eltukawam!'''
-Eltukawlelay feychi kalekünun!",
+Eltukawlelay feychi kalekünun! [[#editform|→ Continuar editando]]",
'editing' => 'Kümeelngey $1',
'editingsection' => 'Wirin $1 (Dungu)',
'editingcomment' => 'Wirin $1 (we dungu)',
'backend-fail-contenttype' => '"$1"ত সাঁচি থ\'বলৈ ফাইলটোৰ সমল প্ৰকাৰ স্থিৰ কৰিব পৰা নগ\'ল।',
'backend-fail-batchsize' => "$1টা ফাইল {{PLURAL:$1|কাৰ্যৰ|কাৰ্যৰ}} ষ্ট'ৰেজ বেকএ'ণ্ড দিয়া হৈছে; সীমা হৈছে $2টা {{PLURAL:$2|কাৰ্য|কাৰ্য}}।",
+# File journal errors
'filejournal-fail-dbconnect' => 'ষ্ট\'ৰেজ বেকএ\'ণ্ড "$1"ৰ বাবে জাৰ্ণাল তথ্যকোষৰ লগত সংযোগ স্থাপন নহ\'ল।',
'filejournal-fail-dbquery' => 'ষ্ট\'ৰেজ বেকএ\'ণ্ড "$1"ৰ বাবে জাৰ্ণাল তথ্যকোষ আপডেট কৰিব পৰা নগ\'ল।',
# User preference toggles
'tog-underline' => 'Sorrayar enllaces:',
'tog-justify' => 'Xustificar parágrafos',
-'tog-hideminor' => 'Anubrir les ediciones menores nos cambios recientes',
-'tog-hidepatrolled' => 'Anubrir les ediciones vixilaes nos cambios recientes',
-'tog-newpageshidepatrolled' => 'Atapecer les páxines vixilaes na llista de páxines nueves',
-'tog-extendwatchlist' => "Espander la llista de vixilancia p'amosar tolos cambios, non sólo los recientes.",
-'tog-usenewrc' => 'Cambios recientes ameyoraos (necesita JavaScript)',
+'tog-hideminor' => 'Anubrir les ediciones menores nos cambeos recientes',
+'tog-hidepatrolled' => 'Anubrir les ediciones vixilaes nos cambeos recientes',
+'tog-newpageshidepatrolled' => 'Anubrir les páxines vixilaes na llista de páxines nueves',
+'tog-extendwatchlist' => "Espander la llista de vixilancia p'amosar tolos cambeos, non solo los más recientes.",
+'tog-usenewrc' => 'Cambeos recientes ameyoraos (necesita JavaScript)',
'tog-numberheadings' => 'Autonumberar los encabezaos',
'tog-showtoolbar' => "Amosar la barra de ferramientes d'edición (JavaScript)",
-'tog-editondblclick' => 'Editar páxines con doble clic (JavaScript)',
+'tog-editondblclick' => 'Editar páxines con doble clic (necesita JavaScript)',
'tog-editsection' => "Activar la edición de seiciones per aciu d'enllaces [editar]",
-'tog-editsectiononrightclick' => 'Activar la edición de seiciones calcando col botón<br /> drechu enriba los títulos de seición (JavaScript)',
+'tog-editsectiononrightclick' => 'Activar la edición de seiciones calcando col botón drechu nos títulos de seición (necesita JavaScript)',
'tog-showtoc' => 'Amosar índiz (pa páxines con más de 3 encabezaos)',
-'tog-rememberpassword' => 'Recordar la mio identificación nesti ordenador (por un máximu de $1 {{PLURAL:$1|día|díes}})',
-'tog-watchcreations' => 'Añader les páxines que creo a la mio llista de vixilancia',
-'tog-watchdefault' => "Añader les páxines qu'edito a la mio llista de vixilancia",
-'tog-watchmoves' => 'Añader les páxines que muevo a la mio llista de vixilancia',
-'tog-watchdeletion' => "Añader les páxines qu'esborro a la mio llista de vixilancia",
-'tog-minordefault' => 'Marcar toles ediciones como menores de mou predetermináu',
+'tog-rememberpassword' => 'Recordar la mio identificación nesti ordenador (hasta un máximu de $1 {{PLURAL:$1|día|díes}})',
+'tog-watchcreations' => 'Amestar les páxines que creo a la mio llista de vixilancia',
+'tog-watchdefault' => "Amestar les páxines qu'edito a la mio llista de vixilancia",
+'tog-watchmoves' => 'Amestar les páxines que muevo a la mio llista de vixilancia',
+'tog-watchdeletion' => 'Amestar les páxines que desanicio a la mio llista de vixilancia',
+'tog-minordefault' => 'Marcar toles ediciones como menores por defeutu',
'tog-previewontop' => "Amosar previsualización enantes de la caxa d'edición",
'tog-previewonfirst' => 'Amosar previsualización na primer edición',
'tog-nocache' => 'Desactivar la caché de páxines del restolador',
-'tog-enotifwatchlistpages' => 'Mandame un corréu cuando cambie una páxina de la mio llista de vixilancia',
+'tog-enotifwatchlistpages' => 'Mandame un corréu cuando camude una páxina de la mio llista de vixilancia',
'tog-enotifusertalkpages' => "Mandame un corréu cuando camude la mio páxina d'alderique",
-'tog-enotifminoredits' => 'Mandame tamién un corréu pa les ediciones menores',
-'tog-enotifrevealaddr' => 'Amosar el mio corréu electrónicu nos correos de notificación',
-'tog-shownumberswatching' => "Amosar el númberu d'usuarios que la tán vixilando",
+'tog-enotifminoredits' => 'Mandame tamién un corréu cuando heba ediciones menores de les páxines',
+'tog-enotifrevealaddr' => 'Amosar la mio direición de corréu nos correos de notificación',
+'tog-shownumberswatching' => "Amosar el númberu d'usuarios que tán vixilando la páxina",
'tog-oldsig' => 'Firma esistente:',
-'tog-fancysig' => 'Usar la firma como "testu wiki" (ensin enllaz automáticu)',
-'tog-externaleditor' => 'Usar un editor esternu de mou predeterminao (namái pa espertos, necesita configuraciones especiales nel to ordenador. [//www.mediawiki.org/wiki/Manual:External_editors Más información.])',
-'tog-externaldiff' => 'Usar un diff esternu de mou predetermináu (namái pa espertos, necesita configuraciones especiales nel to ordenador. [//www.mediawiki.org/wiki/Manual:External_editors Más información.])',
+'tog-fancysig' => 'Tratar la firma como testu wiki (ensin enllaz automáticu)',
+'tog-externaleditor' => 'Usar un editor esternu por defeutu (namái pa espertos, necesita configuraciones especiales nel to ordenador. [//www.mediawiki.org/wiki/Manual:External_editors Más información.])',
+'tog-externaldiff' => 'Usar un diff esternu por defutu (namái pa espertos, necesita configuraciones especiales nel to ordenador. [//www.mediawiki.org/wiki/Manual:External_editors Más información.])',
'tog-showjumplinks' => 'Activar los enllaces d\'accesibilidá "saltar a"',
-'tog-uselivepreview' => 'Usar vista previa en direutu (JavaScript) (en pruebes)',
+'tog-uselivepreview' => 'Usar vista previa en tiempu real (necesita JavaScript) (en pruebes)',
'tog-forceeditsummary' => "Avisame cuando grabe col resume d'edición en blanco",
-'tog-watchlisthideown' => 'Esconder les mios ediciones na llista de vixilancia',
-'tog-watchlisthidebots' => 'Esconder les ediciones de bots na llista de vixilancia',
-'tog-watchlisthideminor' => 'Esconder les ediciones menores na llista de vixilancia',
-'tog-watchlisthideliu' => "Ocultar ediciones d'usuarios rexistraos na llista de vixilancia",
-'tog-watchlisthideanons' => "Ocultar ediciones d'usuarios anónimos na llista de vixilancia",
-'tog-watchlisthidepatrolled' => 'Anubrir les ediciones patrullaes de la llista de vixilancia',
+'tog-watchlisthideown' => 'Anubrir les mios ediciones na llista de vixilancia',
+'tog-watchlisthidebots' => 'Anubrir les ediciones de bots na llista de vixilancia',
+'tog-watchlisthideminor' => 'Anubrir les ediciones menores na llista de vixilancia',
+'tog-watchlisthideliu' => "Anubrir les ediciones d'usuarios identificaos na llista de vixilancia",
+'tog-watchlisthideanons' => "Anubrir les ediciones d'usuarios anónimos na llista de vixilancia",
+'tog-watchlisthidepatrolled' => 'Anubrir les ediciones vixilaes de la llista de vixilancia',
'tog-nolangconversion' => 'Desactivar la conversión de variantes',
-'tog-ccmeonemails' => 'Mandame copies de los correos que mando a otros usuarios',
+'tog-ccmeonemails' => "Mandame copies de los correos qu'unvio a otros usuarios",
'tog-diffonly' => 'Nun amosar el conteníu de la páxina embaxo de les diferencies',
'tog-showhiddencats' => 'Amosar categoríes anubríes',
'tog-noconvertlink' => 'Desactivar la conversión del títulu del enllaz',
-'tog-norollbackdiff' => 'Desanicier les diferencies depués de restaurar',
+'tog-norollbackdiff' => 'Desaniciar les diferencies depués de facer una restauración',
-'underline-always' => 'Siempres',
+'underline-always' => 'Siempre',
'underline-never' => 'Nunca',
-'underline-default' => 'Valor predetermináu del navegador',
+'underline-default' => 'Restolador por defeutu',
# Font style option in Special:Preferences
-'editfont-style' => "Estilu de fonte del área d'edición:",
-'editfont-default' => 'Valor predetermináu del navegador',
-'editfont-monospace' => 'Fonte monoespaciada',
-'editfont-sansserif' => 'Fonte Sans-serif',
-'editfont-serif' => 'Fonte Serif',
+'editfont-style' => "Estilu de fonte de l'área d'edición:",
+'editfont-default' => 'Restolador por defeutu',
+'editfont-monospace' => 'Tipu de lletra monoespaciada',
+'editfont-sansserif' => 'Tipu de lletra Sans-serif',
+'editfont-serif' => 'TIpu de lletra Serif',
# Dates
'sunday' => 'domingu',
# Categories related messages
'pagecategories' => '{{PLURAL:$1|Categoría|Categoríes}}',
-'category_header' => 'Páxines na categoría "$1"',
+'category_header' => 'Páxines na categoría «$1»',
'subcategories' => 'Subcategoríes',
-'category-media-header' => 'Archivos multimedia na categoría "$1"',
-'category-empty' => "''Esta categoría nun tien anguaño nengún artículu o ficheru multimedia.''",
-'hidden-categories' => '{{PLURAL:$1|Categoría anubría|Categoríes anubríes}}',
-'hidden-category-category' => 'Categoríes ocultes',
-'category-subcat-count' => "{{PLURAL:$2|Esta categoría namái tien la subcategoría siguiente.|Esta categoría tien {{PLURAL:$1|la siguiente subcategoría|les siguientes $1 subcategoríes}}, d'un total de $2.}}",
-'category-subcat-count-limited' => 'Esta categoría tien {{PLURAL:$1|la siguiente subcategoría|les siguientes $1 subcategoríes}}.',
-'category-article-count' => "{{PLURAL:$2|Esta categoría contién namái la páxina siguiente.|{{PLURAL:$1|La siguiente páxina ta|Les $1 páxines siguientes tán}} nesta categoría, d'un total de $2.}}",
-'category-article-count-limited' => '{{PLURAL:$1|La siguiente páxina ta|Les siguientes $1 páxines tán}} na categoría actual.',
-'category-file-count' => "{{PLURAL:$2|Esta categoría contién namái el siguiente ficheru.|{{PLURAL:$1|El siguiente ficheru ta|Los $1 ficheros siguientes tán}} nesta categoría, d'un total de $2.}}",
-'category-file-count-limited' => '{{PLURAL:$1|El siguiente archivu ta|Los siguientes $1 archivos tán}} na categoría actual.',
+'category-media-header' => 'Ficheros multimedia na categoría «$1»',
+'category-empty' => "''Anguaño esta categoría nun tien nengún artículu nin ficheru multimedia.''",
+'hidden-categories' => '{{PLURAL:$1|Categoría anubrida|Categoríes anubríes}}',
+'hidden-category-category' => 'Categoríes anubríes',
+'category-subcat-count' => "{{PLURAL:$2|Esta categoría tien namái la subcategoría siguiente.|Esta categoría tien {{PLURAL:$1|la siguiente subcategoría|les siguientes $1 subcategoríes}}, d'un total de $2.}}",
+'category-subcat-count-limited' => 'Esta categoría tien {{PLURAL:$1|la subcategoría siguiente|les $1 subcategoríes siguientes}}.',
+'category-article-count' => "{{PLURAL:$2|Esta categoría contién namái la páxina siguiente.|{{PLURAL:$1|La páxina siguiente ta|Les $1 páxines siguientes tán}} nesta categoría, d'un total de $2.}}",
+'category-article-count-limited' => '{{PLURAL:$1|La páxina siguiente ta|Les $1 páxines siguientes tán}} na categoría actual.',
+'category-file-count' => "{{PLURAL:$2|Esta categoría contién namái'l ficheru siguiente.|{{PLURAL:$1|El ficheru siguiente ta|Los $1 ficheros siguientes tán}} nesta categoría, d'un total de $2.}}",
+'category-file-count-limited' => '{{PLURAL:$1El ficheru siguiente ta|Los $1 ficheeros siguientes tán}} na categoría actual.',
'listingcontinuesabbrev' => 'cont.',
'index-category' => 'Páxines indexaes',
-'noindex-category' => 'Páxines ensin indexar',
-'broken-file-category' => 'Páxines con enllaces frañaos a ficheros',
+'noindex-category' => 'Páxines non indexaes',
+'broken-file-category' => 'Páxines con enllaces frañíos a ficheros',
'about' => 'Tocante a',
-'article' => 'Conteníu de la páxina',
-'newwindow' => '(abriráse nuna ventana nueva)',
+'article' => 'Páxina de conteníu',
+'newwindow' => '(ábrese nuna ventana nueva)',
'cancel' => 'Encaboxar',
'moredotdotdot' => 'Más...',
'mypage' => 'La mio páxina',
-'mytalk' => "La mio páxina d'alderique",
+'mytalk' => 'El mio alderique',
'anontalk' => 'Alderique pa esta IP',
'navigation' => 'Navegación',
'and' => ' y',
# Cologne Blue skin
-'qbfind' => 'Alcontrar',
-'qbbrowse' => 'Escartafoyar',
+'qbfind' => 'Guetar',
+'qbbrowse' => 'Restolar',
'qbedit' => 'Editar',
'qbpageoptions' => 'Esta páxina',
'qbpageinfo' => 'Contestu',
'qbmyoptions' => 'Les mios páxines',
'qbspecialpages' => 'Páxines especiales',
-'faq' => 'FAQ',
-'faqpage' => 'Project:Entrugues más frecuentes',
+'faq' => 'EMF (entrugues más frecuentes)',
+'faqpage' => 'Project:EMF',
# Vector skin
-'vector-action-addsection' => 'Amestar asuntu',
+'vector-action-addsection' => 'Amestar seición',
'vector-action-delete' => 'Desaniciar',
'vector-action-move' => 'Treslladar',
'vector-action-protect' => 'Protexer',
-'vector-action-undelete' => 'Des-desaniciar',
+'vector-action-undelete' => 'Restaurar',
'vector-action-unprotect' => 'Camudar la proteición',
-'vector-simplesearch-preference' => 'Activar suxerencies de gueta enantaes (piel Vector namái)',
+'vector-simplesearch-preference' => 'Activar suxerencies meyoraes de gueta (namái apariencia Vector)',
'vector-view-create' => 'Crear',
'vector-view-edit' => 'Editar',
'vector-view-history' => 'Ver historial',
'vector-view-view' => 'Lleer',
-'vector-view-viewsource' => 'Ver códigu fonte',
+'vector-view-viewsource' => 'Ver fonte',
'actions' => 'Aiciones',
'namespaces' => 'Espacios de nome',
'variants' => 'Variantes',
-'errorpagetitle' => 'Error',
+'errorpagetitle' => 'Fallu',
'returnto' => 'Tornar a $1.',
'tagline' => 'De {{SITENAME}}',
'help' => 'Ayuda',
'searcharticle' => 'Dir',
'history' => 'Historial de la páxina',
'history_short' => 'Historial',
-'updatedmarker' => 'actualizáu dende la mio última visita',
+'updatedmarker' => 'anovada dende la mio visita cabera',
'printableversion' => 'Versión pa imprentar',
'permalink' => 'Enllaz permanente',
'print' => 'Imprentar',
'protect_change' => 'camudar',
'protectthispage' => 'Protexer esta páxina',
'unprotect' => 'Camudar la proteición',
-'unprotectthispage' => 'Camudar la proteición desta páxina',
+'unprotectthispage' => "Camudar la proteición d'esta páxina",
'newpage' => 'Páxina nueva',
'talkpage' => 'Aldericar sobre esta páxina',
'talkpagelinktext' => 'Alderique',
'specialpage' => 'Páxina especial',
'personaltools' => 'Ferramientes personales',
'postcomment' => 'Seición nueva',
-'articlepage' => 'Ver conteníu de la páxina',
+'articlepage' => 'Ver la páxina de conteníu',
'talk' => 'Alderique',
'views' => 'Vistes',
'toolbox' => 'Ferramientes',
-'userpage' => "Ver páxina d'usuariu",
-'projectpage' => 'Ver la páxina de proyeutu',
-'imagepage' => 'Ver la páxina de ficheros',
-'mediawikipage' => 'Ver la páxina de mensaxe',
+'userpage' => "Ver la páxina d'usuariu",
+'projectpage' => 'Ver la páxina del proyeutu',
+'imagepage' => 'Ver la páxina del ficheru',
+'mediawikipage' => 'Ver la páxina de mensaxes',
'templatepage' => 'Ver la páxina de plantía',
'viewhelppage' => "Ver la páxina d'ayuda",
-'categorypage' => 'Ver páxina de categoríes',
-'viewtalkpage' => 'Ver alderique',
+'categorypage' => 'Ver la páxina de la categoría',
+'viewtalkpage' => "Ver la páxina d'alderique",
'otherlanguages' => "N'otres llingües",
'redirectedfrom' => '(Redirixío dende $1)',
'redirectpagesub' => 'Páxina de redireición',
-'lastmodifiedat' => "Esta páxina se camudó por cabera vegada'l $1 a les $2.",
-'viewcount' => 'Esta páxina foi vista {{PLURAL:$1|una vegada|$1 vegaes}}.',
+'lastmodifiedat' => "Esta páxina camudóse per postrer vegada'l $1 a les $2.",
+'viewcount' => 'Esta páxina visitóse {{PLURAL:$1|una vegada|$1 vegaes}}.',
'protectedpage' => 'Páxina protexida',
'jumpto' => 'Saltar a:',
'jumptonavigation' => 'navegación',
-'jumptosearch' => 'gueta',
-'view-pool-error' => "Lo siento, los sirvidores tan sobrecargaos nesti intre.
-Hai demasiaos usuarios intentando ver esta páxina.
-Espera un momentu enantes d'intentar acceder a esta páxina.
+'jumptosearch' => 'guetar',
+'view-pool-error' => 'Sentímoslo, los sirvidores tán sobrecargaos nestos momentos.
+Hai demasiaos usuarios faciendo por ver esta páxina.
+Por favor espera un cachín enantes de volver intentar acceder a esta páxina.
-$1",
-'pool-timeout' => 'Tiempu escosáu esperando pol bloquéu',
-'pool-queuefull' => "La cola d'agrupación ta llena",
-'pool-errorunknown' => 'Error desconocíu',
+$1',
+'pool-timeout' => 'Tiempu escosáu esperando pal bloquéu',
+'pool-queuefull' => 'La cola de trabayu ta enllena',
+'pool-errorunknown' => 'Fallu desconocíu',
# 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' => 'Tocante a {{SITENAME}}',
'aboutpage' => 'Project:Tocante a',
-'copyright' => 'Esti conteníu ta disponible baxo los términos de la $1.',
-'copyrightpage' => "{{ns:project}}:Derechos d'autor",
+'copyright' => 'El conteníu ta disponible baxo los términos de llicencia $1.',
+'copyrightpage' => "{{ns:project}}:Drechos d'autor",
'currentevents' => 'Actualidá',
'currentevents-url' => 'Project:Actualidá',
'disclaimers' => 'Avisu llegal',
-'disclaimerpage' => 'Project:Alvertencia xeneral',
+'disclaimerpage' => 'Project:Avisu xeneral',
'edithelp' => "Ayuda d'edición",
-'edithelppage' => 'Help:Edición de páxines',
+'edithelppage' => 'Help:Cómo editar una páxina',
'helppage' => 'Help:Conteníu',
'mainpage' => 'Portada',
'mainpage-description' => 'Portada',
'privacy' => 'Politica de privacidá',
'privacypage' => 'Project:Política de privacidá',
-'badaccess' => 'Error de permisos',
+'badaccess' => 'Fallu de permisos',
'badaccess-group0' => "Nun tienes permisu pa executar l'aición solicitada.",
-'badaccess-groups' => "L'aición solicitada ta llimitada a usuarios {{PLURAL:$2|del grupu|d'ún de los grupos}}: $1.",
+'badaccess-groups' => "L'aición solicitada ta acutada pa usuarios {{PLURAL:$2|del grupu|d'ún d'estos grupos}}: $1.",
'versionrequired' => 'Necesítase la versión $1 de MediaWiki',
'versionrequiredtext' => 'Necesítase la versión $1 de MediaWiki pa usar esta páxina. Ver la [[Special:Version|páxina de versión]].',
'ok' => 'Aceutar',
-'retrievedfrom' => 'Sacáu de "$1"',
+'retrievedfrom' => 'Sacáu de «$1»',
'youhavenewmessages' => 'Tienes $1 ($2).',
'newmessageslink' => 'mensaxes nuevos',
-'newmessagesdifflink' => 'últimu cambiu',
+'newmessagesdifflink' => 'cambéu postreru',
'youhavenewmessagesmulti' => 'Tienes mensaxes nuevos en $1',
'editsection' => 'editar',
'editold' => 'editar',
'viewsourceold' => 'ver fonte',
'editlink' => 'editar',
-'viewsourcelink' => 'amosar la fonte',
+'viewsourcelink' => 'ver fonte',
'editsectionhint' => 'Editar seición: $1',
-'toc' => 'Conteníu',
+'toc' => 'Índiz',
'showtoc' => 'amosar',
'hidetoc' => 'anubrir',
-'collapsible-collapse' => 'Esconder',
+'collapsible-collapse' => 'Plegar',
'collapsible-expand' => 'Espander',
'thisisdeleted' => '¿Ver o restaurar $1?',
'viewdeleted' => '¿Ver $1?',
'feed-unavailable' => 'Les canales de sindicación nun tán disponibles',
'site-rss-feed' => 'Canal RSS $1',
'site-atom-feed' => 'Canal Atom $1',
-'page-rss-feed' => 'Canal RSS "$1"',
-'page-atom-feed' => 'Canal Atom "$1"',
+'page-rss-feed' => 'Canal RSS «$1»',
+'page-atom-feed' => 'Canal Atom «$1»',
'red-link-title' => '$1 (la páxina nun esiste)',
-'sort-descending' => 'Orde descendiente',
-'sort-ascending' => 'Orde ascendiente',
+'sort-descending' => 'Orde descendente',
+'sort-ascending' => 'Orde ascendente',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Páxina',
'nstab-user' => "Páxina d'usuariu",
-'nstab-media' => "Páxina d'archivu multimedia",
+'nstab-media' => 'Páxina de ficheru multimedia',
'nstab-special' => 'Páxina especial',
-'nstab-project' => 'Páxina de proyeutu',
+'nstab-project' => 'Páxina del proyeutu',
'nstab-image' => 'Ficheru',
'nstab-mediawiki' => 'Mensaxe',
'nstab-template' => 'Plantía',
'nosuchspecialpage' => 'Nun esiste esa páxina especial',
'nospecialpagetext' => '<strong>Pidisti una páxina especial non válida.</strong>
-Pues consultar la llista de les páxines especiales válides en [[Special:SpecialPages|{{int:specialpages}}]].',
+Pues atopar una llista de les páxines especiales válides en [[Special:SpecialPages|{{int:specialpages}}]].',
# General errors
-'error' => 'Error',
-'databaseerror' => 'Error na base de datos',
-'dberrortext' => 'Hebo un fallu de sintaxis nuna consulta de la base de datos.
+'error' => 'Fallu',
+'databaseerror' => 'Fallu na base de datos',
+'dberrortext' => "Hebo un fallu de sintaxis nuna consulta a la base de datos.
Esti fallu puede ser por un problema del software.
-La postrer consulta que s\'intentó foi:
+La postrer consulta a la base de datos que s'intentó foi:
<blockquote><tt>$1</tt></blockquote>
-dende la función "<tt>$2</tt>".
-La base datos dió el fallu "<tt>$3: $4</tt>".',
-'dberrortextcl' => 'Hebo un fallu de sintaxis nuna consulta a la base de datos.
-La postrer consulta que s\'intentó foi:
-"$1"
-dende la función "$2".
-La base de datos dió\'l fallu "$3: $4"',
-'laggedslavemode' => 'Avisu: Esta páxina pue que nun tenga actualizaciones recientes.',
+dende la función «<tt>$2</tt>».
+La base datos dio'l fallu «<tt>$3: $4</tt>».",
+'dberrortextcl' => "Hebo un fallu de sintaxis nuna consulta a la base de datos.
+La postrer consulta de la base de datos que s'intentó foi:
+«$1»
+dende la función «$2».
+La base de datos dio'l fallu «$3: $4».",
+'laggedslavemode' => "'''Avisu:''' Esta páxina pue que nun tenga actualizaciones recientes.",
'readonly' => 'Base de datos candada',
-'enterlockreason' => 'Introduz un motivu pal candáu, amiestando una estimación de cuándo va ser llevantáu esti',
-'readonlytext' => "Nestos momentos la base de datos ta candada pa nueves entraes y otres modificaciones, seique por un mantenimientu de rutina, depués d'él tará accesible de nuevo.
+'enterlockreason' => 'Introduz un motivu pal candáu, amestando una estimación de cuándo va tener llugar el descandáu',
+'readonlytext' => "Nestos momentos la base de datos ta candada pa nueves entraes y otres modificaciones, seique por un mantenimientu de rutina, volviendo tar accesible cuando esti dea fin.
L'alministrador que la candó conseñó esti motivu: $1",
-'missing-article' => "La base de datos nun alcontró'l testu d'una páxina que tendría d'haber alcontrao, nomada \"\$1\" \$2.
+'missing-article' => "La base de datos nun atopó'l testu d'una páxina qu'hubiera tener alcontrao, nomada «\$1» \$2.
-Esto débese davezu a siguir un diff caducáu o un enllaz d'historial a una páxina que se desanició.
+Esto débese davezu a siguir una \"dif\" caducada o un enllaz d'historial a una páxina que se desanició.
Si esti nun ye'l casu, seique tengas atopao un bug nel software.
Por favor informa d'esto a un [[Special:ListUsers/sysop|alministrador]], anotando la URL.",
-'missingarticle-rev' => '(revisión: $1)',
+'missingarticle-rev' => '(núm. revisión: $1)',
'missingarticle-diff' => '(dif: $1, $2)',
-'readonly_lag' => 'La base de datos foi candada automáticamente mentes los sirvidores de la base de datos esclava se sincronicen cola maestra',
-'internalerror' => 'Error internu',
-'internalerror_info' => 'Error internu: $1',
-'fileappenderrorread' => 'Nun se pudo lleer "$1" mientres s\'amestaba.',
-'fileappenderror' => 'Nun se pudo amestar "$1" a "$2".',
-'filecopyerror' => 'Nun se pudo copiar el ficheru "$1" como "$2".',
-'filerenameerror' => 'Nun se pudo renomar l\'archivu "$1" como "$2".',
-'filedeleteerror' => 'Nun se pudo desaniciar el ficheru "$1".',
-'directorycreateerror' => 'Nun se pudo crear el direutoriu "$1".',
-'filenotfound' => 'Nun se pudo atopar el ficheru "$1".',
-'fileexistserror' => 'Nun se pue escribir nel archivu "$1": yá esiste',
-'unexpected' => 'Valor inesperáu: "$1"="$2".',
-'formerror' => 'Error: nun se pudo unviar el formulariu',
-'badarticleerror' => 'Esta aición nun pue facese nesta páxina',
-'cannotdelete' => 'Nun pudo desaniciase la páxina o el ficheru "$1".
-Seique daquién yá la desaniciara.',
-'cannotdelete-title' => 'Nun se pue desaniciar la páxina "$1"',
+'readonly_lag' => 'La base de datos candóse automáticamente mentes los sirvidores de la base de datos esclava se sincronicen cola maestra',
+'internalerror' => 'Fallu internu',
+'internalerror_info' => 'Fallu internu: $1',
+'fileappenderrorread' => "Nun se pudo lleer «$1» mentanto l'amestadura.",
+'fileappenderror' => 'Nun se pudo amestar «$1» a «$2».',
+'filecopyerror' => 'Nun se pudo copiar el ficheru «$1» como «$2».',
+'filerenameerror' => 'Nun se pudo renomar el ficheru «$1» como «$2».',
+'filedeleteerror' => 'Nun se pudo desaniciar el ficheru «$1».',
+'directorycreateerror' => 'Nun se pudo crear el direutoriu «$1».',
+'filenotfound' => 'Nun se pudo atopar el ficheru «$1».',
+'fileexistserror' => 'Nun se pue escribir nel archivu «$1»: yá esiste',
+'unexpected' => 'Valor inesperáu: «$1»=«$2».',
+'formerror' => 'Fallu: Nun se pudo unviar el formulariu.',
+'badarticleerror' => 'Esta aición nun pue facese nesta páxina.',
+'cannotdelete' => "Nun pudo desaniciase la páxina o'l ficheru «$1».
+Seique daquién yá lo desaniciara.",
+'cannotdelete-title' => 'Nun se pue desaniciar la páxina «$1»',
'badtitle' => 'Títulu incorreutu',
-'badtitletext' => 'El títulu de páxina solicitáu nun ye válidu, ta baleru o tien enllaces inter-llingua o inter-wiki incorreutos.
-Pue contener ún o más caráuteres que nun se puen usar nos títulos.',
-'perfcached' => 'Los siguientes datos tán na caché, seique nun tean actualizaos dafechu. Hai un máximu de {{PLURAL:$1|$1 resultáu disponible|$1 resultaos disponibles}} na caché.',
-'perfcachedts' => "Los siguientes datos tán na caché, y s'anovaron la cabera vegada'l $1. Hai un máximu de {{PLURAL:$4|$4 resultáu disponible|$4 resultaos disponibles}} na caché.",
-'querypage-no-updates' => "Los anovamientos d'esta páxina anguaño tán desactivaos.
-Estos datos nun se refrescarán nestos momentos.",
+'badtitletext' => 'El títulu de páxina solicitáu nun ye válidu, ta baleru o tien enllaces interllingua o interwiki incorreutos.
+Pue contener ún o más carauteres que nun se puen usar nos títulos.',
+'perfcached' => "Los datos siguientes tán na caché y seique nun tean anovaos. Hai un máximu {{PLURAL:$1|d'un resultáu disponible|de $1 resultaos disponibles}} na caché.",
+'perfcachedts' => "Los datos siguientes tán na caché y anováronse per postrer vegada'l $1. Hai un máximu {{PLURAL:$4|d'un resultáu disponible|de $4 resultaos disponibles}} na caché.",
+'querypage-no-updates' => "Anguaño los anovamientos d'esta páxina tán desactivaos.
+Estos datos nun van refrescase nestos momentos.",
'wrong_wfQuery_params' => 'Parámetros incorreutos pa wfQuery()<br />
Función: $1<br />
Consulta: $2',
-'viewsource' => 'Ver códigu fonte',
-'viewsource-title' => 'Ver la fonte de "$1"',
+'viewsource' => 'Ver fonte',
+'viewsource-title' => 'Ver la fonte de «$1»',
'actionthrottled' => 'Aición llendada',
-'actionthrottledtext' => "Como midida anti-spam, nun se pue repetir esta aición munches vegaes en pocu tiempu, y trespasasti esi llímite.
-Por favor vuelve a tentalo dientro d'unos minutos.",
+'actionthrottledtext' => 'Como midida anti-spam, nun se pue repetir esta aición munches vegaes en pocu tiempu, y trespasasti esi llímite.
+Por favor vuelvi intentalo nunos minutos.',
'protectedpagetext' => 'Esta páxina ta candada pa torgar la so edición.',
-'viewsourcetext' => "Pues ver y copiar el códigu fonte d'esta páxina:",
-'viewyourtext' => "Pues ver y copiar el códigu fonte de '''les tos ediciones''' d'esta páxina:",
-'protectedinterface' => "Esta páxina proporciona testu d'interfaz a l'aplicación y ta candada pa evitar el so abusu.",
-'editinginterface' => "'''Avisu:''' Tas editando una páxina que s'usa pa proporcionar el testu de la interfaz a l'aplicación.
-Los cambeos nesta páxina afeutarán a l'apariencia de la interfaz pa otros usuarios.
+'viewsourcetext' => "Pues ver y copiar la fonte d'esta páxina:",
+'viewyourtext' => "Pues ver y copiar la fonte de '''les tos ediciones''' d'esta páxina:",
+'protectedinterface' => "Esta páxina proporciona testu d'interfaz de l'aplicación, y ta candada pa torgar abusos.",
+'editinginterface' => "'''Avisu:''' Tas editando una páxina que s'usa pa proporcionar el testu d'interfaz de l'aplicación.
+Los cambeos nesta páxina van afeutar l'apariencia de la interfaz pa otros usuarios.
Si quies facer traducciones, por favor usa [//translatewiki.net/wiki/Main_Page?setlang=ast translatewiki.net], el proyeutu de traducción de MediaWiki.",
-'sqlhidden' => '(consulta SQL escondida)',
-'cascadeprotected' => 'Esta páxina ta protexida d\'ediciones porque ta enxerta {{PLURAL:$1|na siguiente páxina|nes siguientes páxines}}, que {{PLURAL:$1|ta protexida|tán protexíes}} cola opción "en cascada":
-$2',
+'sqlhidden' => '(consulta SQL anubrida)',
+'cascadeprotected' => "Esta páxina ta protexida d'ediciones porque ta enxerta {{PLURAL:$1|na siguiente páxina|nes siguientes páxines}}, que {{PLURAL:$1|ta protexida|tán protexíes}} cola opción «en cascada» activada:
+$2",
'namespaceprotected' => "Nun tienes permisu pa editar páxines nel espaciu de nomes '''$1'''.",
'customcssprotected' => "Nun tienes permisu pa editar esta páxina CSS porque contién preferencies personales d'otru usuariu.",
'customjsprotected' => "Nun tienes permisu pa editar esta páxina de JavaScript porque contién preferencies personales d'otru usuariu.",
'ns-specialprotected' => 'Les páxines especiales nun se puen editar.',
'titleprotected' => "Esti títulu foi protexíu de la so creación por [[User:$1|$1]].
-El motivu conseñáu ye ''$2''.",
-'filereadonlyerror' => "Nun se pudo camudar el ficheru «$1» porque l'almacén de ficheros «$2» ta en mou de sólo llectura.
+El motivu conseñáu ye «''$2''».",
+'filereadonlyerror' => "Nun se pudo camudar el ficheru «$1» porque'l repositoriu de ficheros «$2» ta en mou de namái llectura.
-El motivu dau ye «''$3''».",
+L'alministrador que lu bloquió dio esti motivu: «$3».",
# Virus scanner
-'virus-badscanner' => "Error de configuración: escáner de virus desconocíu: ''$1''",
+'virus-badscanner' => "Fallu de configuración: Escáner de virus desconocíu: ''$1''",
'virus-scanfailed' => "fallu d'escanéu (códigu $1)",
'virus-unknownscanner' => 'antivirus desconocíu:',
# Login and logout pages
-'logouttext' => "'''Yá tas desconectáu.'''
+'logouttext' => "'''Agora tas desconeutáu.'''
-Pues siguir usando {{SITENAME}} de forma anónima, o pues [[Special:UserLogin|volver a entrar]] como'l mesmu o como otru usuariu.
-Ten en cuenta que dalgunes páxines puen siguir apaeciendo como si tovía tuvieres coneutáu, hasta que llimpies la caché del navegador.",
-'welcomecreation' => "== Bienveníu, $1! ==
-Se creó la to cuenta.
+Pues siguir usando {{SITENAME}} de forma anónima, o pues [[Special:UserLogin|volver entrar]] como'l mesmu o como otru usuariu.
+Ten en cuenta que dalgunes páxines puen siguir apaeciendo como si tovía tuvieres coneutáu, hasta que llimpies la caché del restolador.",
+'welcomecreation' => "== ¡Bienllegáu, $1! ==
+Creóse la to cuenta.
Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAME}}]].",
'yourname' => "Nome d'usuariu:",
'yourpassword' => 'Conseña:',
'yourpasswordagain' => 'Escribi otra vuelta la to conseña:',
-'remembermypassword' => 'Recordar la mio identificación nesti ordenador (por un máximu de $1 {{PLURAL:$1|día|díes}})',
-'securelogin-stick-https' => "Siguir coneutáu al HTTPS dempués d'identificate",
+'remembermypassword' => "Recordar la mio identificación nesti restolador (un máximu {{PLURAL:$1|d'un día|de $1 díes}})",
+'securelogin-stick-https' => "Siguir coneutáu al HTTPS dempués d'identificase",
'yourdomainname' => 'El to dominiu:',
-'externaldberror' => "O hebo un error de l'autenticación esterna de la base de datos o nun tienes permisu p'actualizar la to cuenta esterna.",
-'login' => 'Entrar',
-'nav-login-createaccount' => 'Entrar / Crear cuenta',
-'loginprompt' => "Has tener les ''cookies'' activaes pa entrar en {{SITENAME}}.",
-'userlogin' => 'Entrar / Crear cuenta',
-'userloginnocreate' => 'Entrar',
-'logout' => 'Colar',
-'userlogout' => 'Colar',
+'externaldberror' => "O hebo un fallu d'autenticación de la base de datos o nun tienes permisu p'anovar la to cuenta esterna.",
+'login' => 'Identificase',
+'nav-login-createaccount' => 'Identificase / crear una cuenta',
+'loginprompt' => 'Has tener les «cookies» activaes pa identificate en {{SITENAME}}.',
+'userlogin' => 'Identificase / crear una cuenta',
+'userloginnocreate' => 'Identificase',
+'logout' => 'Dexar de tar identificáu',
+'userlogout' => 'Dexar de tar identificáu',
'notloggedin' => 'Non identificáu',
-'nologin' => "¿Nun tienes una cuenta? '''$1'''.",
-'nologinlink' => '¡Fai una!',
+'nologin' => '¿Nun tienes una cuenta? $1.',
+'nologinlink' => 'Crear una cuenta',
'createaccount' => 'Crear una cuenta',
-'gotaccount' => "¿Ya tienes una cuenta? '''$1'''.",
-'gotaccountlink' => 'Aniciar sesión',
-'userlogin-resetlink' => '¿Escaecisti la información de conexón?',
-'createaccountmail' => 'per e-mail',
+'gotaccount' => '¿Ya tienes una cuenta? $1.',
+'gotaccountlink' => 'Identificase',
+'userlogin-resetlink' => "¿Escaecisti los datos d'identificación?",
+'createaccountmail' => 'Per corréu electrónicu',
'createaccountreason' => 'Motivu:',
'badretype' => "Les claves qu'escribisti nun concuayen.",
'userexists' => "El nome d'usuariu conseñáu yá ta usándose.
Por favor escueyi un nome diferente.",
-'loginerror' => "Error d'identificación",
+'loginerror' => "Fallu d'identificación",
'createaccounterror' => 'Nun se pudo crear la cuenta: $1',
'nocookiesnew' => "La cuenta d'usuariu ta creada, pero nun tas identificáu.
-{{SITENAME}} usa cookies pa identificar a los usuarios.
-Tienes les cookies desactivaes.
-Por favor activales y depués entra col to nuevu nome d'usuariu y conseña.",
-'nocookieslogin' => '{{SITENAME}} usa cookies pa identificar a los usuarios. Tienes les cookies deshabilitaes. Por favor actívales y inténtalo otra vuelta.',
-'nocookiesfornew' => "La cuenta nun se creó, porque nun pudimos confirmar l'orixe.
-Asegúrate de tener activaes les cookies, recarga esta páxina y vuelve a tentalo.",
-'noname' => "Nun punxisti un nome d'usuariu válidu.",
+{{SITENAME}} usa «cookies» pa identificar a los usuarios.
+Tienes les «cookies» desactivaes.
+Por favor activales y depués entra col to nome d'usuariu y conseña nuevos.",
+'nocookieslogin' => '{{SITENAME}} usa «cookies» pa identificar a los usuarios.
+Tienes les «cookies» desactivaes.
+Por favor actívales y vuelvi intentalo.',
+'nocookiesfornew' => "La cuenta nun se creó porque nun pudimos confirmar l'orixe.
+Asegúrate de tener activaes les «cookies», recarga esta páxina y vuelvi intentalo.",
+'noname' => "Nun conseñasti un nome d'usuariu válidu.",
'loginsuccesstitle' => 'Identificación correuta',
-'loginsuccess' => "'''Quedasti identificáu en {{SITENAME}} como \"\$1\".'''",
-'nosuchuser' => 'Nun hai usuariu dalu col nome "$1".
-Los nomes d\'usuariu distinguen mayúscules y minúscules.
-Comprueba la ortografía o [[Special:UserLogin/signup|crea una cuenta d\'usuariu nueva]].',
-'nosuchusershort' => 'Nun hai nengún usuariu col nome "$1".
+'loginsuccess' => "'''Quedasti identificáu en {{SITENAME}} como «$1».'''",
+'nosuchuser' => "Nun hai nengún usuariu col nome «$1».
+Los nomes d'usuariu distinguen mayúscules y minúscules.
+Mira que tea bien escritu o [[Special:UserLogin/signup|crea una cuenta nueva]].",
+'nosuchusershort' => 'Nun hai nengún usuariu col nome «$1».
Mira que tea bien escritu.',
'nouserspecified' => "Has especificar un nome d'usuariu.",
-'login-userblocked' => 'Esti usuariu ta bloquiáu. Nun se permite la conexón.',
+'login-userblocked' => 'Esti usuariu ta bloquiáu. Nun se permite la so identificación.',
'wrongpassword' => 'La conseña escrita ye incorreuta.
-Vuelvi a intentalo.',
+Vuelvi intentalo.',
'wrongpasswordempty' => 'La conseña taba en blanco.
-Vuelvi a intentalo.',
-'passwordtooshort' => 'Les contraseñes han de tener a lo menos {{PLURAL:$1|1 caráuter|$1 caráuteres}}.',
-'password-name-match' => "La conseña tien de ser distinta del nome d'usuariu.",
+Vuelvi intentalo.',
+'passwordtooshort' => 'Les contraseñes han tener a lo menos {{PLURAL:$1|1 caráuter|$1 carauteres}}.',
+'password-name-match' => "La conseña ha ser distinta del nome d'usuariu.",
'password-login-forbidden' => "Ta torgao usar esti nome d'usuariu y conseña.",
'mailmypassword' => 'Unviar la conseña nueva per corréu',
'passwordremindertitle' => 'Nueva conseña provisional pa {{SITENAME}}',
-'passwordremindertext' => 'Daquién (seique tu, dende la direición IP $1) solicitó una conseña
-nueva pa {{SITENAME}} ($4). Se creó una conseña temporal pal usuariu
-"$2" que ye "$3". Si fuisti tu, necesites identificate y escoyer
-una conseña nueva agora. La conseña temporal caducará {{PLURAL:$5|nun día|en $5 díes}}.
+'passwordremindertext' => "Daquién (seique tu, dende la direición IP $1) solicitó una conseña
+nueva pa {{SITENAME}} ($4). Creóse una conseña provisional pal usuariu
+«$2» que ye «$3». Si fuisti tu, necesites identificate y escoyer
+una conseña nueva agora. La conseña provisional caduca {{PLURAL:$5|nun día|en $5 díes}}.
Si esta solicitú la fizo otra persona, o si recuerdes la conseña y
-nun quies volver a camudala, pues escaecete d\'esti mensaxe y siguir
-usando la conseña antigua.',
-'noemail' => 'L\'usuariu "$1" nun tien puesta direición de corréu.',
-'noemailcreate' => 'Tienes de conseñar una direición de corréu válida',
-'passwordsent' => 'S\'unvió una conseña nueva a la direición de corréu rexistrada pa "$1".
-Por favor vuelve a coneutate depués de recibila.',
-'blocked-mailpassword' => 'La edición dende la to direición IP ta bloquiada, y poro nun se pue usar la función de recuperación de conseña pa evitar abusos.',
-'eauthentsent' => "S'unvió un corréu electrónicu de confirmación a la direición indicada.
-Enantes de que s'unvie nengún otru corréu a la cuenta, has siguir les instrucciones del corréu electrónicu, pa confirmar que la cuenta ye de to.",
-'throttled-mailpassword' => "Yá s'unvió un recordatoriu de la conseña {{PLURAL:$1|na cabera hora|nes caberes $1 hores}}.
+nun quies volver camudala, pues escaecete d'esti mensaxe y siguir
+usando la conseña antigua.",
+'noemail' => "L'usuariu «$1» nun tien rexistrada nenguna direición de corréu.",
+'noemailcreate' => 'Has conseñar una direición de corréu válida',
+'passwordsent' => 'Univóse una conseña nueva a la direición de corréu rexistrada pa «$1».
+Por favor vuelvi identificate depués de recibila.',
+'blocked-mailpassword' => 'Ta bloquiada la edición dende la to direición IP, polo que pa evitar abusos nun se pue usar la función de recuperación de conseña.',
+'eauthentsent' => "Unvióse un corréu electrónicu de confirmación a la direición indicada.
+Enantes de que s'unvie nengún otru corréu a la cuenta, has siguir les instrucciones del corréu electrónicu pa confirmar que la cuenta ye de to.",
+'throttled-mailpassword' => "Yá s'unvió un recordatoriu de la conseña {{PLURAL:$1|na postrer hora|nes postreres $1 hores}}.
Pa evitar abusos, namái s'unviará un recordatoriu cada {{PLURAL:$1|hora|$1 hores}}.",
-'mailerror' => 'Error al unviar el corréu: $1',
+'mailerror' => 'Fallu al unviar el corréu: $1',
'acct_creation_throttle_hit' => "Los visitantes d'esta wiki qu'usen la to direición IP yá crearon güei {{PLURAL:$1|1 cuenta|$1 cuentes}}, que ye'l máximu almitíu nesti periodu de tiempu.
Poro, los visitantes qu'usen esta direición IP nun puen crear más cuentes de momentu.",
-'emailauthenticated' => "La to direición de corréu se confirmó'l $2 a les $3.",
-'emailnotauthenticated' => "La to direición de corréu nun se comprobó entá.
-Nun s'unviará corréu de denguna de les funciones siguientes.",
-'noemailprefs' => 'Conseña una direición de corréu nes tos preferencies pa que funcionen eses carauterístiques.',
-'emailconfirmlink' => 'Confirmar la direición de corréu',
-'invalidemailaddress' => "La direición de corréu nun se pue aceutar yá que paez tener un formatu non válidu.
-Por favor escribi una direición con formatu afayadizu o dexa vaciu'l campu.",
-'cannotchangeemail' => 'Les direiciones de corréu de la cuenta nun puen camudase nesta wiki.',
+'emailauthenticated' => "La to direición de corréu electrónicu confirmóse'l $2 a les $3.",
+'emailnotauthenticated' => 'La to direición de corréu electrónicu nun se comprobó entá.
+Nun va unviase nengún corréu pa nenguna de les funciones siguientes.',
+'noemailprefs' => 'Conseña una direición de corréu electrónicu nes tos preferencies pa que funcionen eses carauterístiques.',
+'emailconfirmlink' => 'Confirmar la direición de corréu electrónicu',
+'invalidemailaddress' => "La direición de corréu electrónicu nun se pue aceutar yá que paez tener un formatu non válidu.
+Por favor conseña una direición con formatu afayadizu o dexa baleru'l campu.",
+'cannotchangeemail' => 'Les direiciones de corréu electrónicu de la cuenta nun puen camudase nesta wiki.',
'emaildisabled' => 'Esti sitiu nun pue unviar correos electrónicos.',
'accountcreated' => 'Cuenta creada',
-'accountcreatedtext' => "La cuenta d'usuariu de $1 ta creada.",
+'accountcreatedtext' => "Creóse la cuenta d'usuariu de $1.",
'createaccount-title' => 'Creación de cuenta pa {{SITENAME}}',
-'createaccount-text' => 'Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) nomada "$2", asociada a la conseña "$3".
-Tendríes d\'entrar y camudar la conseña agora.
+'createaccount-text' => 'Daquién creó una cuenta cola to direición de corréu electrónicu en {{SITENAME}} ($4) col nome «$2», asociada a la conseña «$3».
+Habríes identificte y camudar la conseña agora.
Pues escaecer esti mensaxe si esta cuenta se creó por error.',
-'usernamehasherror' => "El nome d'usuariu nun pue contener caráuteres hash",
-'login-throttled' => "Ficisti demasiaos intentos recientes de conexón.
+'usernamehasherror' => "El nome d'usuariu nun pue contener carauteres «hash»",
+'login-throttled' => "Ficisti demasiaos intentos recientes d'identificación.
Por favor espera enantes d'intentalo otra vuelta.",
'login-abort-generic' => 'Falló la to identificación - Encaboxao',
'loginlanguagelabel' => 'Llingua: $1',
'edit-no-change' => "S'inoró la to edición, porque nun se fizo nengún cambéu nel testu.",
'edit-already-exists' => 'Nun se pudo crear una páxina nueva.
Yá esiste.',
+'defaultmessagetext' => 'Testu predetermináu',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Avisu:''' Esta páxina contién demasiaes llamaes costoses a funciones d'análisis sintáuticu.
# Suppression log
'suppressionlog' => 'Rexistru de supresiones',
-'suppressionlogtext' => "Embaxo hai una llista de desanicios y bloqueos rellacionaos con conteníu anubríu a los alministradores.
-Mira la [[Special:BlockList|llista de bloqueos d'IP]] pa ver la llista de los bloqueos y torgues activos anguaño.",
+'suppressionlogtext' => 'Más abaxo hai una llista de desanicios y bloqueos rellacionaos con conteníu anubríu a los alministradores.
+Mira la [[Special:BlockList|llista de bloqueos]] pa ver la llista de los bloqueos y torgues activos anguaño.',
# History merging
'mergehistory' => 'Fusionar historiales de páxina',
'backend-fail-contenttype' => 'Non se pudo determinar la triba de conteníu de ficheru a guardar en "$1".',
'backend-fail-batchsize' => "El motor d'almacenamientu dio un llote de $1 {{PLURAL:$1|operación|operaciones}} en ficheros; el llímite ye de $2 {{PLURAL:$2|operación|operaciones}}.",
+# File journal errors
'filejournal-fail-dbconnect' => 'Nun se pudo coneutar cola base de datos del diariu pal sofitu d\'almacenamientu "$1".',
'filejournal-fail-dbquery' => 'Nun se pudo anovar la base de datos del diariu pal sofitu d\'almacenamientu "$1".',
'allpages-bad-ns' => '{{SITENAME}} nun tien l\'espaciu de nomes "$1".',
'allpages-hide-redirects' => 'Anubrir redireiciones',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Tas viendo una versión en caché d'esta páxina, que pue llegar a tener $1 d'antigüedá.",
+'cachedspecial-viewing-cached-ts' => "Tas viendo una versión en caché d'esta páxina, que pue nun tar anovada dafechu.",
+'cachedspecial-refresh-now' => 'Ver la más nueva.',
+
# Special:Categories
'categories' => 'Categoríes',
'categoriespagetext' => "{{PLURAL:$1|La categoría darréu contién|Les categoríes darréu contienen}} páxines o ficheros multimedia.
'ipb-confirm' => 'Confirmar bloquéu',
'badipaddress' => 'IP non válida',
'blockipsuccesssub' => 'Bloquéu fechu correctamente',
-'blockipsuccesstext' => "Bloquióse al usuariu [[Special:Contributions/$1|$1]].
-<br />Mira na [[Special:BlockList|llista d'IPs bloquiaes]] pa revisar los bloqueos.",
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ta {{GENDER:$1|bloquiáu|bloquiada}}.<br />
+Mira na [[Special:BlockList|llista de bloqueos]] pa revisar los bloqueos.',
'ipb-blockingself' => '¡Tas a piques de bloquiate tú mesmu! ¿Tas seguru de que quies facer eso?',
'ipb-confirmhideuser' => 'Tas a piques de bloquiar un usuariu con "anubrir usuariu" activao. Esto desaniciará el nome del usuariu de tolos llistaos y entraes de los rexistros. ¿De xuro quies facer eso?',
'ipb-edit-dropdown' => 'Editar motivos de bloquéu',
'reblock-logentry' => 'camudó los parámetros de bloquéu de [[$1]] con una caducidá de $2 $3',
'blocklogtext' => "Esti ye un rexistru de los bloqueos y desbloqueos d'usuarios.
Les direcciones IP bloquiaes automáticamente nun salen equí.
-Pa ver los bloqueos qu'hai agora mesmo, mira na [[Special:BlockList|llista d'IP bloquiaes]].",
+Pa ver los bloqueos qu'hai agora mesmo, mira na [[Special:BlockList|llista de bloqueos]].",
'unblocklogentry' => 'desbloquió $1',
'block-log-flags-anononly' => 'namái usuarios anónimos',
'block-log-flags-nocreate' => 'creación de cuentes desactivada',
'api-error-uploaddisabled' => 'Les xubíes tan desactivaes nesta wiki.',
'api-error-verification-error' => 'Esti ficheru pudiera tar corrompíu, o tien una estensión incorreuta.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL: $1|segundu|segundos}}',
+'duration-minutes' => '$1 {{PLURAL: $1|minutu|minutos}}',
+'duration-hours' => '$1 {{PLURAL: $1|hora|hores}}',
+'duration-days' => '$1 {{PLURAL: $1|día|díes}}',
+'duration-weeks' => '$1 {{PLURAL: $1|selmana|selmanes}}',
+'duration-years' => '$1 {{PLURAL: $1|añu|años}}',
+'duration-decades' => '$1 {{PLURAL:$1|década|décades}}',
+'duration-centuries' => '$1 {{PLURAL:$1|sieglu|sieglos}}',
+'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenios}}',
+
);
# Move page
'move-page' => 'Arrundara va $1',
'move-page-legend' => 'Va teliz tolyoltá',
-'movepagetext' => "Utilisez le formulaire ci-dessous pour renommer un article, en déplaçant toutes ses versions antérieures vers le nouveau nom.
+'movepagetext' => "Utilisez le formulaire ci-dessous pour renommer un article (et sa page de discussion, le cas échéant), en déplaçant toutes ses versions antérieures vers le nouveau nom.
-Le titre précédent deviendra une page de redirection vers le nouveau titre. Les liens vers l'ancien titre ne seront pas modifiés et la page discussion, si elle existe, ne sera pas déplacée.
+Vous pouvez mettre à jour les redirections qui pointent sur l’ancien titre automatiquement. Si vous ne le faites pas, assurez-vous qu’il n’y ait pas de redirections [[Special:DoubleRedirects|doubles]] ou [[Special:BrokenRedirects|rompues]]. Vous êtes responsable de vous assurer que les liens continuent de pointer aux bons endroits.
-'''ATTENTION!'''
-Il peut s'agir d'un changement radical et inattendu pour un article souvent consulté; assurez-vous que vous en comprenez bien les conséquences avant de procéder.",
+Notez que la page ne sera '''pas''' déplacée s’il y a déjà une page au nouveau titre, à moins que cette dernière ne soit vide ou une redirection, et qu’elle soit sans historique. Ceci vous permet de revenir en arrière en cas d’erreur, et vous empêche d’écraser les pages existantes.
+
+'''ATTENTION !'''
+Il peut s’agir d’un changement radical et inattendu pour un article souvent consulté ; assurez-vous que vous en comprenez bien les conséquences avant de procéder.",
'movepagetalktext' => "La page de discussion associée, si présente, sera automatiquement renommée avec '''sauf si:'''
*Vous renommez une page vers un autre espace,
*Une page de discussion existe déjà avec le nouveau nom, ou
* @author Roustammr
* @author Timming
* @author Рустам Нурыев
+ * @author ҒатаУлла
*/
$fallback = 'ru';
'cannotdelete-title' => '"$1" битен юйып булмай',
'badtitle' => 'Ярамаған исем',
'badtitletext' => 'Биттең һоратылған исеме дөрөҫ түгел, буш йәки телдәр араһы йәки интервики исеме яңылыш күрһәтелгән. Исемдә тыйылған символдар булыуы ла мөмкин.',
-'perfcached' => 'Был мәғлүмәттәр кэштан алынған, уларҙа һуңғы үҙгәртеүҙәр булмаҫҡа мөмкин. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Был мәғлүмәттәр кэштан алынды, ул һуңғы тапҡыр $1 яңыртылды. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Был мәғлүмәттәр кэштан алынған, уларҙа һуңғы үҙгәртеүҙәр булмаҫҡа мөмкин. Кэшта иң күбе {{PLURAL:$1|язма}} һаҡлана.',
+'perfcachedts' => 'Был мәғлүмәттәр кэштан алынған, ул һуңғы тапҡыр $1 яңыртылды. Кэшта иң күбе {{PLURAL:$4|язма}} һаҡлана',
'querypage-no-updates' => 'Был битте яңыртыу хәҙер тыйылған.
Бында күрһәтелгән мәғлүмәттәр яңыртылмаясаҡ.',
'wrong_wfQuery_params' => 'wfQuery() функцияһы өсөн рөхсәт ителмәгән параметрҙар<br />
'ns-specialprotected' => '«{{ns:special}}» исем арауығындағы биттәрҙе үҙгәртеп булмай.',
'titleprotected' => "Был исем менән бит яһау [[User:$1|$1]] тарафынан тыйылған.
Белдерелгән сәбәп: ''$2''.",
+'filereadonlyerror' => "«$1» файлын үҙгәртеп булмай, сөнки «$2» һаҡлағысы «уҡыу өсөн генә» тәртибенде.
+
+Установивший этот режим администратор оставил следующее разъяснение: «''$3''».",
# Virus scanner
'virus-badscanner' => "Көйләү хатаһы: Билдәһеҙ вирустар сканеры: ''$1''",
'invalidemailaddress' => 'Электрон почта адресы ҡабул ителә алмай, сөнки ул форматка тап килмәй.
Зинһар, дөрөҫ адрес керетегеҙ йәки юлды буш ҡалдырығыҙ.',
'cannotchangeemail' => 'Иҫәп яҙыуы электрон почта адрестарын был викила үҙгәртеп булмай.',
+'emaildisabled' => 'Был сайт электрон почта хәберҙәрен ебәрә алмай',
'accountcreated' => 'Иҫәп яҙыуы яһалды',
'accountcreatedtext' => '$1 исемле ҡулланыусы өсөн исәп яҙыуы яһалды.',
'createaccount-title' => '{{SITENAME}}: теркәлеү',
'userinvalidcssjstitle' => "'''Иғтибар:''' \"\$1\" биҙәү темаһы табылманы. Иҫтә тотоғоҙ, .css һәм .js ҡулланыусы биттәренең исемдәре тик бәләкәй хәрефтәрҙән генә торорға тейеш. Мәҫәлән: {{ns:user}}:Foo/vector.css, ә {{ns:user}}:Foo/Vector.css түгел!",
'updated' => '(Яңыртылды)',
'note' => "'''Иҫкәрмә:'''",
-'previewnote' => "'''Ҡарап сығыу өлгөһө, әлегә үҙгәрештәр яҙҙырылмаған!'''",
+'previewnote' => "'''Ҡарап сығыу өлгөһө, әлегә үҙгәрештәр яҙҙырылмаған!'''
+Һеҙҙең үҙгәртеүҙәр әле яҙылмаған! [[#editform|→ мөхәрирләүҙә дауам итеү]]",
'previewconflict' => 'Әлеге алдан ҡарау, мөхәррирләү тәҙрәһенең өҫтөндә, һаҡланғандан һуң текстың нисек күренәсәген күрһәтә.',
'session_fail_preview' => "'''Ҡыҙғанысҡа ҡаршы, һеҙҙең ултырыш идентификаторығыҙ юғалды. Һөҙөмтәлә үҙгәртеүҙәрегеҙ ҡабул ителмәйәсәк.
Зинһар, тағы бер тапҡыр ҡабатлағыҙ.
Бындай хәлдәр хаталы аноним web-проксилар ҡулланғанда килеп сығырға мөмкин.",
'edit_form_incomplete' => "'''Мөхәррирләү формаһының ҡайһы өлөштәре серверға барып етмәне. Төҙәтеүҙәрегеҙҙе яҡшы итеп тикшерегеҙ һәм яңынан ҡабатлағыҙ.'''",
'editing' => 'Мөхәрирләү $1',
+'creating' => 'Төҙөү $1',
'editingsection' => 'Мөхәрирләү $1 (секция)',
'editingcomment' => '$1 мөхәррирләнә (яңы бүлек)',
'editconflict' => 'Мөхәррирләү конфликты: $1',
# Suppression log
'suppressionlog' => 'Йәшереү яҙмалары',
'suppressionlogtext' => 'Түбәндә, администраторҙарҙан йәшерелгән материалдар булған һуңғы юйыуҙыр һәм блоклауҙар исемлеге килтерелгән.
-Ағымдағы блоклауҙарҙы күрер өсөн [[Special:BlockList|IP-блоклауҙар исемлеген]] ҡарағыҙ.',
+Ағымдағы блоклауҙарҙы күрер өсөн [[Special:BlockList|блоклауҙар исемлеген]] ҡарағыҙ.',
# History merging
'mergehistory' => 'Үҙгәртеүҙәр тарихын берләштерергә',
'allpagesbadtitle' => 'Күрһәтелгән бит исеме дөрөҫ түгел йәки телдәр араһы йәки интервики ҡушымтаһы менән башлана.
Исемдә тыйылған символдар булыуы ла мөмкин.',
'allpages-bad-ns' => '{{SITENAME}} проектында "$1" исемдәр арауығы юҡ.',
+'allpages-hide-redirects' => 'Йүнәлтеүҙәрҙе йәшерергә',
# Special:Categories
'categories' => 'Категориялар',
# JavaScriptTest
'javascripttest' => '
JavaScript тикшереү',
-'javascripttest-disabled' => 'Был мөмкинлек һүндерелгән.',
+'javascripttest-disabled' => 'Был мөмкинлек был Википроектта ғәмәлгә индерелмәгән.',
'javascripttest-title' => '$1 тикшеренеү үткәрелә',
'javascripttest-pagetext-noframework' => 'Был бит JavaScript тикшеренеүҙәре үткәреү өсөн резервланған.',
'javascripttest-pagetext-unknownframework' => 'Билдәһеҙ тикшеренеүҙәр мөхитнамәһе "$1".',
'categorypage' => 'Паказаць старонку катэгорыі',
'viewtalkpage' => 'Паказаць абмеркаваньне',
'otherlanguages' => 'На іншых мовах',
-'redirectedfrom' => '(Перанакіравана з $1)',
+'redirectedfrom' => '(Перанакіравана з «$1»)',
'redirectpagesub' => 'Старонка-перанакіраваньне',
'lastmodifiedat' => 'Гэтая старонка апошні раз рэдагавалася $1 году ў $2.',
'viewcount' => 'Гэтую старонку праглядалі $1 {{PLURAL:$1|раз|разы|разоў}}.',
Прычына забароны: ''$2''.",
'filereadonlyerror' => 'Немагчыма зьмяніць файл «$1», бо файлавае сховішча «$2» знаходзіцца ў рэжыме толькі для чытаньня
-Ð\9fазнаÑ\87анаÑ\8f пÑ\80Ñ\8bÑ\87Ñ\8bна: «$3».',
+Ð\90дмÑ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82аÑ\80, Ñ\8fкÑ\96 абмежаваÑ\9e доÑ\81Ñ\82Ñ\83п, пазнаÑ\87Ñ\8bÑ\9e пÑ\80Ñ\8bÑ\87Ñ\8bнÑ\83: «$3».',
# Virus scanner
'virus-badscanner' => "Няслушная канфігурацыя: невядомы антывірусны сканэр: ''$1''",
'changeemail-cancel' => 'Скасаваць',
# Edit page toolbar
-'bold_sample' => 'ТлÑ\83сты тэкст',
-'bold_tip' => 'ТлÑ\83сты тэкст',
+'bold_sample' => 'ТоÑ\9eсты тэкст',
+'bold_tip' => 'ТоÑ\9eсты тэкст',
'italic_sample' => 'Курсіўны тэкст',
'italic_tip' => 'Курсіўны тэкст',
'link_sample' => 'Загаловак спасылкі',
'edit-no-change' => 'Вашае рэдагаваньне было праігнараванае, таму што ў тэкст не былі ўнесеныя зьмены.',
'edit-already-exists' => 'Немагчыма стварыць новую старонку.
Яна ўжо існуе.',
+'defaultmessagetext' => 'Перадвызначаны тэкст паведамленьня',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Папярэджаньне: гэтая старонка ўтрымлівае зашмат працаёмістых зваротаў да функцыяў парсэра.
'prefs-rendering' => 'Выгляд',
'saveprefs' => 'Захаваць',
'resetprefs' => 'Скінуць',
-'restoreprefs' => 'Ð\92Ñ\8fÑ\80нÑ\83Ñ\86Ñ\8c Ñ\83Ñ\81е наÑ\81Ñ\82Ñ\80ойкÑ\96 па змоÑ\9eÑ\87ванÑ\8cнÑ\96',
+'restoreprefs' => 'СкÑ\96нÑ\83Ñ\86Ñ\8c да пеÑ\80адвÑ\8bзнаÑ\87анÑ\8bÑ\85 наладаÑ\9e',
'prefs-editing' => 'Рэдагаваньне',
'prefs-edit-boxsize' => 'Памер акна рэдагаваньня.',
'rows' => 'Радкоў:',
'backend-fail-contenttype' => 'Немагчыма вызначыць тып зьместу файла, які мусіць быць захаваны ў «$1».',
'backend-fail-batchsize' => 'Cховішча атрымала блёк з $1 {{PLURAL:$1|файлавай апэрацыі|файлавых апэрацыяў|файлавых апэрацыяў}}; абмежаваньне складае $2 {{PLURAL:$2|апэрацыю|апэрацыі|апэрацыяў}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Не атрымалася злучыцца з базай зьвестак журнала для сховішча «$1».',
'filejournal-fail-dbquery' => 'Не атрымалася абнавіць базу зьвестак журнала для сховішча «$1».',
'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|Наступная катэгорыя зьмяшчае|Наступныя катэгорыі зьмяшчаюць}} старонкі і/альбо мэдыяфайлы.
'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|стагодзьдзе|стагодзьдзі|стагодзьдзяў}}',
+'duration-millennia' => '$1 {{PLURAL:$1|тысячагодзьдзе|тысячагодзьдзі|тысячагодзьдзяў}}',
+
);
'ns-specialprotected' => "N'haller ket kemmañ ar pajennoù en esaouenn anv {{ns:special}}.",
'titleprotected' => "Gwarezet eo bet an titl-mañ p'eo bet krouet gant [[User:$1|$1]].
Setu amañ perak ''$2''.",
-'filereadonlyerror' => 'Dibosupl kemmañ ar restr "$1" abalamour m\'emañ ar c\'havlec\'h restrom "$2" e mod lenn nemetken.
+'filereadonlyerror' => 'Dibosupl kemmañ ar restr "$1" abalamour m\'emañ ar c\'havlec\'h restroù "$2" e mod lenn nemetken.
-"\'\'$3\'\'" eo an abeg roet.',
+"\'\'$3\'\'" eo an abeg roet gant ar merour en deus prennet anezhi.',
# Virus scanner
'virus-badscanner' => "Kefluniadur fall : skanner viruzoù dianav : ''$1''",
'edit-no-change' => "N'eo ket bet kemeret ho tegasadenn e kont rak ne oa ket bet kemmet netra en destenn.",
'edit-already-exists' => "N'eus ket bet gallet krouiñ ur bajenn nevez.
Krouet e oa bet c'hoazh.",
+'defaultmessagetext' => 'Testenn dre ziouer',
# Parser/template warnings
'expensive-parserfunction-warning' => "Diwallit : Re a c'halvoù koustus e-keñver an arc'hwelioù parser zo gant ar bajenn-mañ.
'backend-fail-contenttype' => 'Dibosupl termeniñ ar seurt danvez da enrollañ e "$1".',
'backend-fail-batchsize' => 'Pourvezet he deus an dermenell stokañ ur pakad a $1 {{PLURAL:$1|oberiadenn|oberiadenn}}; sevel a ra ar vevenn da $2 {{PLURAL:$2|oberiadenn|oberiadenn}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'N\'eus ket bet gallet kevreañ ouzh diaz roadennoù ar marilh evit an dermenell stokañ "$1".',
'filejournal-fail-dbquery' => 'N\'eus ket bet gallet hizivaat diaz roadennoù marilh an dermenell stokañ "$1".',
'allpages-bad-ns' => 'N\'eus ket a esaouenn anv anvet "$1" war {{SITENAME}}.',
'allpages-hide-redirects' => 'Kuzhat an adkasoù',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Emaoc'h o sellet ouzh ur stumm krubuilhet eus ar bajenn-mañ, a c'hall bezañ kement ha $1 kozh",
+'cachedspecial-viewing-cached-ts' => "Emaoc'h o sellet ouzh ur stumm krubuilhet eus ar bajenn-mañ a c'hall bezañ dispredet un disterañ.",
+'cachedspecial-refresh-now' => 'Gwelet an hini nevesañ.',
+
# Special:Categories
'categories' => 'Roll ar rummadoù',
'categoriespagetext' => 'Er {{PLURAL:$1|rummad|rummadoù}}da-heul ez eus pajennoù pe restroù media.
'blocklog-showsuppresslog' => "Stanket ha kuzhet eo bet an implijer-mañ c'hoazh. A-is emañ marilh ar diverkadennoù, d'ho titouriñ :",
'blocklogentry' => 'en/he deus stanket [[$1]] betek an $2 $3',
'reblock-logentry' => "en deus kemmet an arventennoù stankañ evit [[$1]] gant un termen d'an $2 $3",
-'blocklogtext' => "Setu roud stankadennoù ha distankadennoù an implijerien. N'eo ket bet rollet ar chomlec'hioù IP bet stanket outo ent emgefre. Sellet ouzh [[Special:BlockList|roll an implijerien stanket]] evit gwelet piv zo stanket e gwirionez.",
+'blocklogtext' => "Setu roud stankadennoù ha distankadennoù an implijerien. N'eo ket bet rollet ar chomlec'hioù IP bet stanket ent emgefre. Sellet ouzh [[Special:BlockList|roll an implijerien stanket]] evit gwelet piv zo stanket e gwirionez.",
'unblocklogentry' => 'distanket "$1"',
'block-log-flags-anononly' => 'implijerien dizanv hepken',
'block-log-flags-nocreate' => 'berzet eo krouiñ kontoù',
'api-error-uploaddisabled' => 'Diweredekaat eo an enporzh war ar wiki-mañ.',
'api-error-verification-error' => 'Pe eo brein ar restr pe eo fall an astenn anezhi.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|eilenn|eilenn}}',
+'duration-minutes' => '$1 {{PLURAL:$1|munut|munut}}',
+'duration-hours' => '($1 {{PLURAL:$1|eurvezh|eurvezh}})',
+'duration-days' => '($1 {{PLURAL:$1|deiz|deiz}})',
+'duration-weeks' => '$1 {{PLURAL:$1|sizhun|sizhun}}',
+'duration-years' => '$1 {{PLURAL:$1|bloaz|bloaz}}',
+'duration-decades' => '$1 {{PLURAL:$1|degad|degas}}',
+'duration-centuries' => "$1 {{PLURAL:$1|c'hantved|kantved}}",
+'duration-millennia' => '$1 {{PLURAL:$1|milvloaz|milvoaz}}',
+
);
Ne zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
'updated' => '(Osvježeno)',
'note' => "'''Pažnja:'''",
-'previewnote' => "'''Ovo je samo pregled; izmjene stranice nisu još sačuvane!'''",
+'previewnote' => "'''Ne zaboravite da je ovo samo pregled'''
+Izmjene stranice nisu još sačuvane! [[#editform|→ Nastavi s uređivanjem]]",
'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.'''",
# Suppression log
'suppressionlog' => 'Zapisi sakrivanja',
'suppressionlogtext' => 'Ispod je spisak brisanja i blokiranja koja su povezana sa sadržajem koji je sakriven od administratora.
-Vidi [[Special:BlockList|spisak IP blokiranja]] za pregled trenutno važećih blokada.',
+Vidi [[Special:BlockList|spisak blokiranja]] za pregled trenutno važećih blokada.',
# History merging
'mergehistory' => 'Spoji historije stranice',
'qbsettings-fixedright' => 'Pričvršćena desno',
'qbsettings-floatingleft' => 'Plutajuća lijevo',
'qbsettings-floatingright' => 'Plutajući desno',
-'qbsettings-directionality' => 'Čvrsto, u zavisnosti od usmjerenosti pisma vašeg jezika',
+'qbsettings-directionality' => 'Čvrsto, u zavisnosti od usmjerenosti pisma Vašeg jezika',
# Preferences page
'preferences' => 'Podešavanja',
'watchmethod-list' => 'provjerava se da li ima nedavnih izmjena u praćenim stranicama',
'watchlistcontains' => 'Vaš spisak praćenih članaka sadrži $1 {{PLURAL:$1|stranicu|stranica}}.',
'iteminvalidname' => "Problem sa '$1', neispravno ime...",
-'wlnote' => "Ispod je {{PLURAL:$1|najskorija izmjena|'''$1''' najskorije izmjene|'''$1''' najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih '''$2''' sata|u posljednjih '''$2''' sati}}.",
+'wlnote' => "Ispod je {{PLURAL:$1|najskorija izmjena|'''$1''' najskorije izmjene|'''$1''' najskorijih izmjena}} načinjenih {{PLURAL:$2|posljednjeg sata|u posljednjih '''$2''' sata|u posljednjih '''$2''' sati}}, od $3, $4.",
'wlshowlast' => 'Prikaži posljednjih $1 sati $2 dana $3',
'watchlist-options' => 'Opcije spiska praćenja',
'ipb-confirm' => 'Potvrdite blokiranje',
'badipaddress' => 'Pogrešna IP adresa',
'blockipsuccesssub' => 'Blokiranje je uspjelo',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je blokiran.
-<br />Pogledajte [[Special:BlockList|IP spisak blokiranih korisnika]] za pregled blokiranja.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran}}.<br />
+Pogledajte [[Special:BlockList|spisak blokiranja]] za pregled blokiranja.',
'ipb-blockingself' => 'Ovom akcijom ćete blokirati sebe! Da li ste sigurni da to želite?',
'ipb-confirmhideuser' => "Upravo ćete blokirati korisnika sa uključenom opcijom ''sakrij korisnika''. Ovim će korisničko ime biti sakriveno u svim spiskovima i stavkama zapisnika. Da li ste sigurni da to želite?",
'ipb-edit-dropdown' => 'Uredi razloge blokiranja',
'blocklogentry' => 'je blokirao [[$1]] sa vremenom isticanja blokade od $2 $3',
'reblock-logentry' => 'promjena postavki blokiranja za [[$1]] sa vremenom isteka u $2 $3',
'blocklogtext' => 'Ovo je historija akcija blokiranja i deblokiranja korisnika.
-Automatsko blokirane IP adrese nisu uspisane ovde.
-Pogledajte [[Special:BlockList|blokirane IP adrese]] za spisak trenutnih zabrana i blokiranja.',
+Automatski blokirane IP adrese nisu navedene ovdje.
+Pogledajte [[Special:BlockList|spisak blokiranja]] za spisak trenutnih zabrana i blokiranja.',
'unblocklogentry' => 'deblokiran $1',
'block-log-flags-anononly' => 'samo anonimni korisnici',
'block-log-flags-nocreate' => 'pravljenje računa onemogućeno',
# JavaScriptTest
'javascripttest' => 'Testiranje JavaScript-e',
-'javascripttest-disabled' => 'Ova funkcija je onemogućena.',
+'javascripttest-disabled' => 'Ova funkcija je onemogućena na ovom wikiju.',
'javascripttest-title' => 'Pokretanje $1 testova',
'javascripttest-pagetext-noframework' => 'Ova stranica je određena za pokretanje JavaScript testova.',
'javascripttest-pagetext-unknownframework' => 'Nepoznat radni okvir testiranja"$1".',
+'javascripttest-pagetext-skins' => 'Izaberite s kojom temom želite da pokrenete probu:',
'javascripttest-qunit-intro' => 'Pogledajte [$1 dokumentaciju za testiranje] na mediawiki.org.',
# Tooltip help for the actions
'revdelete-unrestricted' => 'uklonjena ograničenja za administratore',
'logentry-move-move' => '$1 je premjestio stranicu $3 na $4',
'logentry-move-move-noredirect' => '$1 je premjestio stranicu $3 na $4 bez ostavljanja preusmjerenja',
+'logentry-move-move_redir' => '$1 je premjestio stranicu $3 na $4 preko preusmjeravanja',
+'logentry-move-move_redir-noredirect' => '$1 je premjestio stranicu $3 na $4 preko preusmjeravanja bez ostavljanja preusmjeravanja',
+'logentry-patrol-patrol' => '$1 je označio izmjenu $4 stranice $3 pregledanim',
+'logentry-patrol-patrol-auto' => '$1 je automatski označio izmjenu $4 stranice $3 pregledanim',
'logentry-newusers-newusers' => '$1 je napravio korisnički račun',
'logentry-newusers-create' => '$1 je napravio korisnički račun',
'logentry-newusers-create2' => '$1 je napravio korisnički račun $3',
'newuserlog-byemail' => 'šifra je poslana putem e-maila',
# Feedback
+'feedback-bugornote' => 'Ako ste spremni detaljno opisati tehnički problem molimo [$1 prijavite "bug" (grešku)].
+Inače, možete ispuniti jednostavan obrazac ispod. Vaš komentar biti će dodan na stranicu "[$3 $2]", zajedno s vašim korisničkim imenom i internetskog preglednika koji koristite.',
'feedback-subject' => 'Tema:',
'feedback-message' => 'Poruka:',
'feedback-cancel' => 'Odustani',
'api-error-uploaddisabled' => 'Postavljanje je onemogućeno na ovoj wiki.',
'api-error-verification-error' => 'Ova datoteka je možda oštećenja ili ima pogrešan nastavak.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekunde}}',
+'duration-days' => '$1 {{PLURAL:$1|dan|dana}}',
+
);
'ns-specialprotected' => 'No es poden modificar les pàgines especials.',
'titleprotected' => "La creació d'aquesta pàgina està protegida per [[User:$1|$1]].
Els seus motius han estat: «''$2''».",
-'filereadonlyerror' => "No s'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers «$2» està en mode només de lectura.
-El motiu donat és «''$3''».",
+'filereadonlyerror' => 'No s\'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers "$2" està en mode només de lectura.
+L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
# Virus scanner
'virus-badscanner' => "Mala configuració: antivirus desconegut: ''$1''",
'edit-no-change' => 'La vostra modificació ha estat ignorada perquè no feia cap canvi al text.',
'edit-already-exists' => "No s'ha pogut crear una pàgina.
Ja existeix.",
+'defaultmessagetext' => 'Missatge per defecte',
# Parser/template warnings
'expensive-parserfunction-warning' => "Atenció: Aquesta pàgina conté massa crides a funcions parserfunction complexes.
'backend-fail-contenttype' => 'No es pot determinar el tipus de contingut del fitxer per emmagatzemar a «$1».',
'backend-fail-batchsize' => "El rerefons d'emmagatzemament ha rebut un lot {{PLURAL:$1|d'$1 operació|de $1 operacions}} de fitxer; el límit és $2 {{PLURAL:$2|operació|operacions}}.",
+# File journal errors
+'filejournal-fail-dbconnect' => 'No es pot connectar amb la base de dades per emmagatzemar el backend "$1".',
+'filejournal-fail-dbquery' => 'No es pot actualitzat la base de dades per a emmagatzemar el backend "$1".',
+
# Lock manager
'lockmanager-notlocked' => "No s'ha pogut desbloquejar «$1»; no és bloquejat.",
'lockmanager-fail-closelock' => "No s'ha pogut bloquejar el fitxer per «$1».",
'log' => 'Registres',
'all-logs-page' => 'Tots els registres públics',
'alllogstext' => "Presentació combinada de tots els registres disponibles de {{SITENAME}}.
-Podeu reduir l'extensió seleccionant el tipus de registre, el nom del usuari (distingeix entre majúscules i minúscules), o la pàgina afectada (també en distingeix).",
+Podeu reduir l'extensió seleccionant el tipus de registre, el nom d'usuari realitzador (distingeix entre majúscules i minúscules), o la pàgina objectiu (també en distingeix).",
'logempty' => 'No hi ha cap coincidència en el registre.',
'log-title-wildcard' => 'Cerca els títols que comencin amb aquest text',
'editlink' => 'دەستکاری',
'viewsourcelink' => 'سەرچاوەکەی ببینە',
'editsectionhint' => 'دەستکاری کردنی بەشی: $1',
-'toc' => 'Ù\86اÙ\88Û\95رÛ\86Ú©',
-'showtoc' => 'نیشاندان',
+'toc' => 'Ù¾Û\8eرست',
+'showtoc' => 'نیشانیبدە',
'hidetoc' => 'بیشارەوە',
'collapsible-collapse' => 'کۆیبکەوە',
'collapsible-expand' => 'بڵاویبکەوە',
'prefs-advancedrendering' => 'هەڵبژاردە پێشکەوتووەکان',
'prefs-advancedsearchoptions' => 'هەڵبژاردە پێشکەوتووەکان',
'prefs-advancedwatchlist' => 'هەڵبژاردە پێشکەوتووەکان',
-'prefs-displayrc' => 'هەڵبژاردەکانی نیشاندان',
+'prefs-displayrc' => 'ھەڵبژاردەکانی نیشاندان',
'prefs-displaysearchoptions' => 'ھەڵبژاردەکانی نیشاندان',
'prefs-displaywatchlist' => 'ھەڵبژاردەکانی نیشاندان',
'prefs-diffs' => 'جیاوازییەکان',
# Special:ListUsers
'listusersfrom' => 'نیشاندانی بەکارھێنەران بە دست پێکردن لە:',
-'listusers-submit' => 'نیشاندان',
+'listusers-submit' => 'نیشانیبدە',
'listusers-noresult' => 'ھیچ بەکارھێنەرێک نەدۆزرایەوە.',
'listusers-blocked' => '(بەربەستکراو)',
'api-error-unknown-code' => 'ھەڵەی نەزانراو: «$1».',
'api-error-unknownerror' => 'ھەڵەی نەزانراو: «$1».',
+# 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|سەدە|سەدە}}',
+'duration-millennia' => '$1 {{PLURAL:$1|ھەزارە|ھەزارە}}',
+
);
'tog-rememberpassword' => 'Zapamatovat si mé přihlášení v tomto prohlížeči (maximálně $1 {{PLURAL:$1|den|dny|dní}})',
'tog-watchcreations' => 'Přidávat mnou založené stránky ke sledovaným',
'tog-watchdefault' => 'Přidávat mnou editované stránky ke sledovaným',
-'tog-watchmoves' => 'Přidávat přesouvané stránky mezi sledované',
+'tog-watchmoves' => 'Přidávat mnou přesouvané stránky mezi sledované',
'tog-watchdeletion' => 'Přidávat stránky, které smažu, mezi sledované',
'tog-minordefault' => 'Označit editaci implicitně jako malá editace',
'tog-previewontop' => 'Zobrazovat náhled před editačním oknem (ne za ním)',
'summary-preview' => 'Náhled shrnutí:',
'subject-preview' => 'Náhled předmětu/nadpisu:',
'blockedtitle' => 'Uživatel zablokován',
-'blockedtext' => "'''Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''
+'blockedtext' => "Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''
-Zablokování provedl $1.
+Zablokování provedl{{gender:$1||a}} $1.
Udaným důvodem bylo ''$2''.
* Začátek blokování: $8
* Zablokování vyprší: $6
* Blokovaný uživatel: $7
-Pokud chcete zablokování prodiskutovat, můžete kontaktovat uživatele $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].
+Pokud chcete zablokování prodiskutovat, můžete kontaktovat {{gender:$1|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].
Uvědomte si, že nemůžete použít nabídku „Poslat e-mail“, jestliže nemáte ve svém [[Special:Preferences|nastavení]] uvedenu platnou e-mailovou adresu nebo pokud vám byla tato možnost zakázána.
Vaše IP adresa je $3 a identifikační číslo bloku je #$5; tyto údaje uvádějte ve všech dotazech na správce.",
'autoblockedtext' => "Vaše IP adresa byla automaticky zablokována, protože ji používal jiný uživatel, kterého zablokoval $1.
'edit-conflict' => 'Editační konflikt.',
'edit-no-change' => 'Vaše editace byla ignorována, protože nedošlo k žádné změně textu.',
'edit-already-exists' => 'Nepodařilo se vytvořit novou stránku, protože již existuje.',
+'defaultmessagetext' => 'Výchozí text hlášení',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Varování: Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí parseru.
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Nelze se připojit k žurnálové databázi pro koncový úložný systém „$1“.',
'filejournal-fail-dbquery' => 'Nepodařilo se aktualizovat žurnálovou databázi pro koncový úložný systém „$1“.',
'allpages-bad-ns' => '{{SITENAME}} nemá jmenný prostor "$1".',
'allpages-hide-redirects' => 'Skrýt přesměrování',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Prohlížíte si cachovanou verzi této stránky, která může být až $1 stará.',
+'cachedspecial-viewing-cached-ts' => 'Prohlížíte si cachovanou verzi této stránky, která nemusí být zcela aktuální.',
+'cachedspecial-refresh-now' => 'Zobrazit nejnovější.',
+
# Special:Categories
'categories' => 'Kategorie',
'categoriespagetext' => 'Následující kategorie {{PLURAL:$1|obsahuje|obsahují}} stránky nebo soubory.
'ipb-confirm' => 'Potvrdit zablokování',
'badipaddress' => 'Neplatná IP adresa',
'blockipsuccesssub' => 'Zablokování uspělo',
-'blockipsuccesstext' => 'Uživatel „[[Special:Contributions/$1|$1]]“ je zablokován.<br />
+'blockipsuccesstext' => '„[[Special:Contributions/$1|$1]]“ je {{GENDER:$1|zablokován|zablokována}}.<br />
Můžete si prohlédnout [[Special:BlockList|seznam zablokovaných uživatelů]].',
'ipb-blockingself' => 'Chystáte se zablokovat {{gender:|sám|sama|sami}} sebe! Jste si {{gender:|jist|jista|jisti}}, že to chcete udělat?',
'ipb-confirmhideuser' => 'Chystáte se zablokovat uživatele se zapnutou volbou „skrýt uživatelské jméno“. To způsobí, že jméno uživatele zmizí ze všech seznamů a protokolovacích záznamů. Jste si {{gender:|jist|jista|jisti}}, že to chcete udělat?',
'blocklog-showsuppresslog' => 'Tento uživatel byl zablokován a skryt. Zde je pro přehled zobrazen výpis záznamu utajení:',
'blocklogentry' => 'blokuje „[[$1]]“ s časem vypršení $2 $3',
'reblock-logentry' => 'mění nastavení bloku „[[$1]]“ s časem vypršení $2 $3',
-'blocklogtext' => 'Toto je kniha úkonů blokování a odblokování uživatelů. Automaticky blokované IP adresy nejsou vypsány. Podívejte se na [[Special:BlockList|seznam blokování IP]] s výčtem aktuálních zákazů a blokování.',
+'blocklogtext' => 'Toto je kniha úkonů blokování a odblokování uživatelů.
+Automaticky blokované IP adresy nejsou vypsány.
+Vizte též [[Special:BlockList|seznam všech probíhajících bloků]].',
'unblocklogentry' => 'odblokovává „$1“',
'block-log-flags-anononly' => 'pouze anonymní uživatelé',
'block-log-flags-nocreate' => 'vytváření účtů zablokováno',
'api-error-uploaddisabled' => 'Načítání souborů je na této wiki vypnuto.',
'api-error-verification-error' => 'Soubor je možná poškozen nebo má špatnou příponu.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekundy|sekund}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minuty|minut}}',
+'duration-hours' => '$1 {{PLURAL:$1|hodina|hodiny|hodin}}',
+'duration-days' => '$1 {{PLURAL:$1|den|dny|dní}}',
+'duration-weeks' => '$1 {{PLURAL:$1|týden|týdny|týdnů}}',
+'duration-years' => '$1 {{PLURAL:$1|rok|roky|let}}',
+'duration-decades' => '$1 {{PLURAL:$1|dekáda|dekády|dekád}}',
+'duration-centuries' => '$1 {{PLURAL:$1|století}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tisíciletí}}',
+
);
Rhoddwyd y rheswm hwn - ''$2''.",
'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 roddir dros hyn yw "\'\'$3\'\'".',
+Y rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw "\'\'$3\'\'".',
# Virus scanner
'virus-badscanner' => "Cyfluniad gwael: sganiwr firysau anhysbys: ''$1''",
'edit-no-change' => 'Anwybyddwyd eich golygiad, gan na newidiwyd y testun.',
'edit-already-exists' => 'Ni ellid creu tudalen newydd.
Mae ar gael yn barod.',
+'defaultmessagetext' => 'Y testun rhagosodedig',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Rhybudd:''' Mae gormod o alwadau ar ffwythiannau dosrannu sy'n dreth ar adnoddau yn y dudalen hon.
'backend-fail-contenttype' => 'Methwyd a dirnad pa fath o gynnwys sydd yn y ffeil y ceisir ei storio yn "$1".',
'backend-fail-batchsize' => "Rhoddwyd llwyth o {{PLURAL:$1|$1 o weithrediadau}} ffeil i'w gwneud i'r storfa; ni all nifer y {{PLURAL:$2|gweithrediadau}} fod yn fwy na $2.",
+# File journal errors
'filejournal-fail-dbconnect' => 'Methwyd cysylltu â lòg y gweithrediadau ar y storfa "$1".',
'filejournal-fail-dbquery' => 'Methwyd diweddaru lòg y gweithrediadau ar y storfa "$1".',
'titleprotected' => "Dette sidenavn er beskyttet mod oprettelse af [[User:$1|$1]]. Begrundelsen for beskyttelsen er ''$2''.",
'filereadonlyerror' => 'Ude af stand til at redigere filen "$1", fordi fildatabasen "$2" er skrivebeskyttet.
-Begrundelsen er "\'\'$3\'\'".',
+Administratoren, som skrivebeskyttede den, gav følgende begrundelse: "$3".',
# Virus scanner
'virus-badscanner' => "Konfigurationsfejl: ukendt virus-scanner: ''$1''",
'edit-conflict' => 'Redigeringskonflikt.',
'edit-no-change' => 'Din ændring ignoreredes, fordi der ikke var ændring af teksten.',
'edit-already-exists' => 'En ny side kunne ikke oprettes, fordi den allerede findes.',
+'defaultmessagetext' => 'Standardtekst',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Advarsel: Der er for mange beregningstunge oversætter-funktionskald på denne side.
# Suppression log
'suppressionlog' => 'Skjulningslog',
'suppressionlogtext' => 'Nedenfor listes de sletninger og blokeringer, som involverer indhold, der er skjult for administratorer.
-Se [[Special:BlockList|IP-blokeringslisten]] for listen over alle aktuelle blokeringer.',
+Se [[Special:BlockList|blokeringslisten]] for listen over alle aktuelle blokeringer.',
# History merging
'mergehistory' => 'Sammenflet sidehistorikker',
'allpages-bad-ns' => 'Navnerummet $1 findes ikke på {{SITENAME}}.',
'allpages-hide-redirects' => 'Skjul omdirigeringer',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Du ser en hengemt version af denne side, som kan være op til $1 gammel.',
+'cachedspecial-viewing-cached-ts' => 'Du ser en hengemt version af denne side, som måske ikke er helt aktuel.',
+'cachedspecial-refresh-now' => 'Vis seneste.',
+
# Special:Categories
'categories' => 'Kategorier',
'categoriespagetext' => 'Følgende {{PLURAL:$1|kategori|kategorier}} indeholder sider eller media.
'badipaddress' => 'IP-adressen/brugernavnet er udformet forkert eller eksistere ikke.',
'blockipsuccesssub' => 'Blokeringen er gennemført.',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] er blevet blokeret.<br />
-Se [[Special:BlockList|IP-blokeringslisten]] for alle blokeringer.',
+Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
'ipb-blockingself' => 'Du er ved at blokere dig selv! Er du sikker på, du vil gøre det?',
'ipb-confirmhideuser' => 'Du er ved at blokere en bruger med "skjul bruger" aktiveret. Dette vil skjule brugerens navn på alle lister og logposter. Er du sikker på du vil gøre det?',
'ipb-edit-dropdown' => 'Ændre spærreårsager',
Skjulningsloggen vises nedenfor som reference:',
'blocklogentry' => 'blokerede [[$1]] med en varighed på $2 $3',
'reblock-logentry' => 'ændrede blokeringsindstillinger for [[$1]] med en varighed $2 $3',
-'blocklogtext' => 'Dette er en liste med blokerede brugere og ophævede blokeringer af brugere. Automatisk blokerede IP-adresser er ikke anført her. Se [[Special:BlockList|blokeringslisten]] for den nuværende liste med blokerede brugere.',
+'blocklogtext' => 'Dette er en liste med blokerede brugere og ophævede blokeringer af brugere.
+Automatisk blokerede IP-adresser er ikke anført her.
+Se [[Special:BlockList|blokeringslisten]] for den nuværende liste med aktuelle blokeringer.',
'unblocklogentry' => 'ophævede blokering af "$1"',
'block-log-flags-anononly' => 'kun anonyme',
'block-log-flags-nocreate' => 'Oprettelse af brugerkonti blokeret',
'api-error-uploaddisabled' => 'Oplægning af filer er slået fra på denne wiki.',
'api-error-verification-error' => 'Denne fil kan være beskadiget, eller den har måske en forkert filendelse.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunder}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minut|minutter}}',
+'duration-hours' => '$1 {{PLURAL:$1|time|timer}}',
+'duration-days' => '$1 {{PLURAL:$1|dag|dage}}',
+'duration-weeks' => '$1 {{PLURAL:$1|uge|uger}}',
+'duration-years' => '$1 {{PLURAL:$1|år|år}}',
+'duration-decades' => '$1 {{PLURAL:$1|årti|årtier}}',
+'duration-centuries' => '$1 {{PLURAL:$1|århundrede|århundreder}}',
+'duration-millennia' => '$1 {{PLURAL:$1|årtusind|årtusinder}}',
+
);
Eine Speicherung kann den Seiteninhalt zerstören. Dies geschieht bisweilen durch die Benutzung eines anonymen Proxy-Dienstes, der fehlerhaft arbeitet.'''",
'edit_form_incomplete' => "'''Der Inhalt des Bearbeitungsformulars hat den Server nicht vollständig erreicht. Bitte prüfe deine Bearbeitungen auf Vollständigkeit und versuche es erneut.'''",
'editing' => 'Bearbeiten von „$1“',
-'creating' => '$1 wird erstellt',
+'creating' => 'Erstellen von „$1“',
'editingsection' => 'Bearbeiten von „$1“ (Abschnitt)',
'editingcomment' => 'Bearbeiten von „$1“ (Neuer Abschnitt)',
'editconflict' => 'Bearbeitungskonflikt: $1',
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends „$1“ hergestellt werden.',
'filejournal-fail-dbquery' => 'Die Journaldatenbank des Speicher-Backends „$1“ konnte nicht aktualisiert werden.',
'allpages-bad-ns' => 'Der Namensraum „$1“ ist in {{SITENAME}} nicht vorhanden.',
'allpages-hide-redirects' => 'Weiterleitungen ausblenden',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Du siehst die gecachte Version dieser Seite, die bis zu $1 alt sein kann.',
+'cachedspecial-viewing-cached-ts' => 'Du siehst die gecachte Version dieser Seite, die möglicherweise nicht aktuell ist.',
+'cachedspecial-refresh-now' => 'Aktuelle Version ansehen.',
+
# Special:Categories
'categories' => 'Kategorien',
'categoriespagetext' => 'Folgende {{PLURAL:$1|Kategorie enthält|Kategorien enthalten}} Seiten oder Dateien.
'ipb-confirm' => 'Sperrung bestätigen',
'badipaddress' => 'Die IP-Adresse hat ein falsches Format.',
'blockipsuccesssub' => 'Sperre erfolgreich',
-'blockipsuccesstext' => 'Der Benutzer/die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />
+'blockipsuccesstext' => 'Der Benutzer / die IP-Adresse [[Special:Contributions/$1|$1]] wurde gesperrt.<br />
Zur Aufhebung der Sperre siehe die [[Special:BlockList|Liste aller aktiven Sperren]].',
'ipb-blockingself' => 'Du bist gerade dabei, dich selbst zu sperren! Möchtest du das wirklich tun?',
'ipb-confirmhideuser' => 'Du bist gerade dabei einen Benutzer im Modus „Benutzer verstecken“ zu sperren. Dies führt dazu, dass der Benutzername in allen Listen und Logbüchern unterdrückt wird. Möchtest du das wirklich tun?',
'version-software' => 'Installierte Software',
'version-software-product' => 'Software',
'version-software-version' => 'Version',
+'version-entrypoints' => 'Eingangspunkt-URLs',
+'version-entrypoints-header-entrypoint' => 'Eingangspunkt',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Artikelpfad]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Skriptpfad]',
# Special:FilePath
'filepath' => 'Dateipfad',
'api-error-uploaddisabled' => 'Das Hochladen ist in diesem Wiki deaktiviert.',
'api-error-verification-error' => 'Die hochzuladende Datei ist entweder fehlerhaft oder hat keine Dateinamenserweiterung.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|Sekunde|Sekunden}}',
+'duration-minutes' => '$1 {{PLURAL:$1|Minute|Minuten}}',
+'duration-hours' => '$1 {{PLURAL:$1|Stunde|Stunden}}',
+'duration-days' => '$1 {{PLURAL:$1|Tag|Tage}}',
+'duration-weeks' => '$1 {{PLURAL:$1|Woche|Wochen}}',
+'duration-years' => '$1 {{PLURAL:$1|Jahr|Jahre}}',
+'duration-decades' => '$1 {{PLURAL:$1|Jahrzehnt|Jahrzehnte}}',
+'duration-centuries' => '$1 {{PLURAL:$1|Jahrhundert|Jahrhunderte}}',
+'duration-millennia' => '$1 {{PLURAL:$1|Jahrtausend|Jahrtausende}}',
+
);
'userlogin' => 'Cı kewe / hesab vıraze',
'userloginnocreate' => 'Cı kewe',
'logout' => 'Cı ra veciye',
-'userlogout' => 'Veciye',
+'userlogout' => 'Vıcyayış',
'notloggedin' => 'Hesab akerde niyo',
'nologin' => "Hesabê şıma çıniyo? '''$1'''.",
'nologinlink' => 'Yew hesab ake',
'passwordreset-capture' => 'neticey e-postay bımocne?',
'passwordreset-email' => 'Adresa e-postey:',
'passwordreset-emailtitle' => 'Hesab timarê {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'Jeweri, {{SITENAME}} ra (ma heta şımayê, $1 IP adresi ra) ($4) teferuatê hesabdê şıma va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:
+
+$2
+
+{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5 roca}}rêya.
+Ena parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se yana ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.',
+'passwordreset-emailtext-user' => '$1 enê karberi, {{SITENAME}} ra ($4) teferuatê hesab dê şıma va wa biyaro xo viri. Karbero ke cêrdeyo {{PLURAL:$3|hesaba|eno hesaba}} ena e-posta adresiya aleqey cı esto:
+
+$2
+
+{{PLURAL:$3|ena parola idaretena|ena parola idareten}} {{PLURAL:$5|jew roc|$5 roca}}rêya.
+Ena parolaya deqewe de u xorê ju parolaya newi bıweçine. Parolaya şıma emaya şıma viri se yana ena e-posta şıma nê weştase u şıma qayıl niye parolaya xo bıvurnese, ena mesacer peygoş bıkerê.',
'passwordreset-emailelement' => 'Namey karberi: $1
Parola vêrdiye: $2',
'hr_tip' => 'Çızgiy Horizantoli (use sparingly)',
# Edit pages
-'summary' => 'Mênine:',
+'summary' => 'Xulasa:',
'subject' => 'Mewzu/serrêze:',
-'minoredit' => 'Eno yew vurnayışo qıckeko',
+'minoredit' => 'Vurnayışo qıckeko',
'watchthis' => 'Ena pele seyr ke',
'savearticle' => 'Ena pele qeyd ke',
'preview' => 'Verqayt',
'token_suffix_mismatch' => "'''Vurnayişê şıma tepeya ameyo çunke qutiyê imla xerıbya.
Vurnayişê şıma qey nêxerepyayişê peli tepeya geyra a.
Eke şıma servisê proksi yo anonim şuxulneni sebebê ey noyo.'''",
-'editing' => 'Şımayê kenê "$1" bıvurnê',
-'creating' => "Şımaye kene $1'i vıraze",
+'editing' => 'Pela "$1"\'i bıvurnê',
+'creating' => "Pela $1'i vıraze",
'editingsection' => '$1 vurneno (qısım)',
'editingcomment' => '$1 vuryeno (qısmo newe)',
'editconflict' => 'Vurnayişê ke yewbini nêtepışeni: $1',
'''İTİYA DI METARİYALÊ \"COPYRIGHT\"İ NINUSİ!.'''",
'copyrightwarning2' => 'Ney bızane ke nuşteyê ke şıma ruşneni (şaweni) keyepelê {{SITENAME}} herkes eşkeno nê nuşteyanê şıma ser kay bıkero. Eke şıma qayil niye kes bıvurno, nuşetyanê xo meerze ita. <br />
Wexta ke şıma nuşte zi erzeni ita; şıma gani taahhud bıde koti ra ardo (qey teferruati referans: $1).',
-'longpageerror' => "'''Xeta: Dergeya nuştedê şıma (nezdi) $1 kilobayta, u $2 kilobyte ra zêdo.
-Qeyd biyayişê cı nêbeno'''",
+'longpageerror' => "'''Xırab: Dergeya nuşte dê şıma nezdi {{PLURAL:$1|kilobayto|$1 kilobayto}}, feqet {{PLURAL:$2|kilobayt|$2 kilobayt}} ra vêşiyo. Qeyd biyayişê cı nêbeno'''",
'readonlywarning' => "'''DİQET: Semedê mıqayti, database kılit biyo. No sebeb ra vurnayişê şıma qayd nêbeno. Nuşteyanê şıma yewna serkar eşkeno wedaro u pey ra şıma eşkeni reyna ita de qayd bıker'''
Serkar o ke kılit kerdo; no beyanat dayo: $1",
'edit-no-change' => 'Vurnayişê şıma qebul nêbı, çunke nuşte de yew vurnayiş n3evıraziya.',
'edit-already-exists' => 'Pelo newe nêvıraziyeno.
Pel ca ra esto.',
+'defaultmessagetext' => 'Normal metnê nuşti',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Hişyari: No pel de fonksiyoni zaf esti.
# Suppression log
'suppressionlog' => 'qeydê pinani kerdışi',
-'suppressionlogtext' => 'Qey listeya qedexan bewnê: [[Special:IPBlockList|IP listeya vergırewteyan]]',
+'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ê.",
# History merging
'mergehistory' => 'vere cûye pelan bıhewelın',
'prefs-displaywatchlist' => 'Weçinayışê mocnayışi',
'prefs-diffs' => 'Diffs',
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'e-posta adresi raştayo',
+'email-address-validity-invalid' => 'e-postayo raştay defiye de',
+
# User rights
'userrights' => 'İdarey heqanê karberan',
'userrights-lookup-user' => 'Grubanê karberi/karbere idare bıke',
'action-userrights' => 'heqqa karberanê hemî bivurne',
'action-userrights-interwiki' => 'heqqa karberanê ke wikiyê binî de hemî bivurne',
'action-siteadmin' => 'database kilit bike ya zi a bike',
+'action-sendemail' => 'e-posta bırşe',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|vurnayış|vurnayışan}}',
'upload-http-error' => 'Yew ğeletê HTTPî biyo: $1',
# File backend
+'backend-fail-stream' => '$1 nê vırazeyê',
+'backend-fail-backup' => '$1 nê wendeyê',
+'backend-fail-notexists' => '$1 name dı dosya çına.',
+'backend-fail-delete' => '$1 nê besterneyê',
'backend-fail-store' => '$1 ra $2 berdışo nê wanêno',
'backend-fail-copy' => '$1 ra $2 kopya kerdışena dosyayo nêbeno',
'backend-fail-move' => '$1 ra $2 berdışo nê wanêno',
gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
<del>serê ey nuşteyi</del> safi biye.',
'double-redirect-fixed-move' => '[[$1]] kırışiya, hıni ray dana [[$2]] no pel',
+'double-redirect-fixed-maintenance' => 'raçarnayışo dıletê [[$1]] ra pela da [[$2]] timarêno',
'double-redirect-fixer' => 'Fixerî redirek bike',
'brokenredirects' => 'Redireksiyonî ke hin nixebitiyeno',
'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
'nrevisions' => '$1 {{PLURAL:$1|revizyon|revizyonî}}',
'nviews' => '$1 {{PLURAL:$1|vînayîş|vînayîşî}}',
+'nimagelinks' => '$1 {{PLURAL:$1|ena pela de|ena pela de}} karêno',
+'ntransclusions' => '$1 {{PLURAL:$1|ena pela de|ena pela de}} karêno',
'specialpage-empty' => 'Ser ena report netice çini yo.',
'lonelypages' => 'Pelî ke yetim mend',
'lonelypagestext' => 'Ena pelî link nibiyê ya zi pelanê binî {{SITENAME}} de transclude biy.',
'watchmethod-list' => 'pel ê ke şıma temaşa kenî vuryayişê peyinê ey konrol beno',
'watchlistcontains' => 'listeya seyrkerdışê şıma de $1 tene {{PLURAL:$1|peli|peli}} estî.',
'iteminvalidname' => "pê no '$1' unsuri problem bı, nameyo nemeqbul...",
-'wlnote' => "{{PLURAL:$2|na seeta peyin de|'''$2''' na seeta peyin de}} {{PLURAL:$1|vurnayişo peyêno ke biyo|'''$1''' vurnayişo peyêno ke biyo}} cêr deyo.",
+'wlnote' => "$3 seate u bahde $4 deqa dıma {{PLURAL:$2|ju seate dı|'''$2''' ju seate dı}} {{PLURAL:$1|vurnayışe peyeni|vurnayışe '''$1''' peyeni}} cêrdeyê",
'wlshowlast' => 'bımoc $1 seat $2 rocan $3',
'watchlist-options' => 'Tercihanê listey seyrkerdışi',
Qey malumato ziyede [[Special:ProtectedPages|Peleyê ke star biye]] bewni rê êna .',
'protectedarticle' => '"[[$1]]" kılit biyo',
'modifiedarticleprotection' => 'Qe "[[$1]]", seviye kılit kerdişi vurnayi biyo',
-'unprotectedarticle' => 'pawıtış weradiya/wedariya: "[[$1]]"',
+'unprotectedarticle' => 'Starkerdışê "[[$1]]" hewadeya',
'movedarticleprotection' => 'eyarê pawıtışi no "[[$2]]" peli ra kırışiya no "[[$1]]" peli',
'protect-title' => 'qey "$1" yew seviyaya pawıtışi bıvıcinê',
'prot_1movedto2' => 'nameyê [[$1]] peli yo newe: [[$2]]',
'undeletepagetext' => '{{PLURAL:$1|pelo|$1 pelo}} cerın hewn a şiyo labele hema zi arşiv de yo u tepiya geriyeno.
Arşiv daimi pak beno.',
'undelete-fieldset-title' => 'revizyonan tepiya bar ker',
-'undeleteextrahelp' => "qey ardışê pel u verê pelani tuşê '''tepiya biya!'''yi bıtıknê. qey ciya ciya ardışê verê pelani zi qutiye tesdiqi nişane kerê u tuşê '''tepiya biya!'''yi bıtıknê. qey hewn a kerdışê qutiya tesdiqan u qey sıfır kerdışê cayê sebebani zi tuşê '''agêr caverd/aça ker'''i bıtıknê.",
+'undeleteextrahelp' => "Qey ardışê pel u verê pelani tuşê '''tepiya biya!'''yi bıtıknê. qey ciya ciya ardışê verê pelani zi qutiye tesdiqi nişane kerê u tuşê '''tepiya biya!'''yi bıtıknê '''''{{int:undeletebtn}}'''''.. qey hewn a kerdışê qutiya tesdiqan u qey sıfır kerdışê cayê sebebani zi tuşê '''agêr caverd/aça ker'''i bıtıknê '''''{{int:undeletebtn}}'''''..",
'undeleterevisions' => '$1 {{PLURAL:$1|revizyon|revizyon}} arşiw bi',
'undeletehistory' => 'eke şıma pel tepiya biyari heme revizyonî zi tepiya yeni.
eke yew pel hewn a biyo u pê nameyê o peli newe ra yew pel bıvıraziyo, revizyonê o pelê verıni zerreyê no pel de aseno.',
'undeleterevision-missing' => 'revizyonê nemeqbul u vindbiyayeyi.
Revizyoni ya hewn a biyê ya arşiw ra veciyayê ya zi cıresayişê şımayi şaş o.',
'undelete-nodiff' => 'revizyonê verıni nidiya',
-'undeletebtn' => 'Restore bike',
+'undeletebtn' => 'Timar bike',
'undeletelink' => 'bıvêne/peyser bia',
'undeleteviewlink' => 'ra mocın',
-'undeletereset' => 'Sifir bike',
+'undeletereset' => 'Reset kerê',
'undeleteinvert' => 'vicnayeyi qeldaye açarn',
'undeletecomment' => 'Sebeb:',
'undeletedrevisions' => 'pêro piya{{PLURAL:$1|1 qeyd|$1 qeyd}} tepiya anciya.',
qey karê tepiya ardışi u qey karê hewn a kerdışê verıni bıewnê [[Special:Log/delete|qeydê hewn a kerdışi]].",
'undelete-header' => 'qey vinayişê peli yê ke cıwa ver hewn a biyê: [[Special:Log/delete|qeydê hewn a kerdışi]].',
+'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',
'ipbhidename' => 'Nameyê karberî listeyan u vurnayîşan ra binumne',
'ipbwatchuser' => 'Pela miniqaşe u pela ena karberî seyr bike',
'ipb-change-block' => 'Pê ena ayaran, karberî reyna bloke bike',
+'ipb-confirm' => 'Bloke kerdışi tesdik ke',
'badipaddress' => 'Adresê IPî raşt niyo',
'blockipsuccesssub' => 'Blok biyo',
'blockipsuccesstext' => 'verniyê [[Special:Contributions/$1|$1]] geriya.
'blocklist' => 'Karberê kılitbiyaey',
'ipblocklist' => 'Karberê kılitbiyaey',
'ipblocklist-legend' => 'Yew karberê blok biyaye bivîne',
+'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ê',
'''Teme!'''
Ena transfer ser peleyanê populari zaf muhumo;
Ma tu ra rica keni, tı en verni dı qontrol bıki u bışıravi.",
+'movepagetext-noredirectfixer' => "Pe form ki ho bın de, tı eşkeno name yew pele bıvurni u tarixê pele hemi ya zi pyeran beri.
+Ma nameyê kıhanyeri keno pele redireksiyoni ser nameyê newe.
+Tı eşkeno pele redireksiyoni ki şıno nameyê originali bıvurni.
+Eg tı nıwazeno, ma tı ra rica keni tı [[Special:DoubleRedirects|raçarnayışo dılet]] ya zi [[Special:BrokenRedirects|raçarnayışo xırab]]i qontrol bıke.
+Tı gani qontrol bıki eg gıreyan şıno peleyanê raşti.
+
+Teme eka ser yew name de yew nuşte esti, sistemê ma '''nıeşkeno''' nuşte tı beri. Eka ser ena name de yew pele vengi esti, sistemê ma eşkeno nuşte tı beri.
+Tı nıeşkeni name yew pele reyna bıvurni.
+
+'''İkaz!'''
+Ena transfer ser peleyanê populari zaf muhumo;
+Ma tu ra rica keni, tı en verni dı qontrol bıki u bışıravi.",
'movepagetalktext' => "Ma peleyê mınaqeşeyê ena pele otomatik beno, '''ma nıeşken ber, eg:'''
*Yew peleyê mınaqeşeyê ser ena name rona esto, ya zi
*Tı quti check nıkerd.
'import-logentry-interwiki' => '$1 transwiki biyo',
'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|revizyon|revizyonî}} $2 ra',
+# JavaScriptTest
+'javascripttest' => 'Cerbnayışê JavaScripti',
+
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Pela ya Qarberi',
'tooltip-pt-anonuserpage' => 'pelê karberê IPyi',
Çımey ena pele bıvin',
'tooltip-ca-history' => 'Versiyonê verênê ena pele',
'tooltip-ca-protect' => 'Ena pele kılit ke',
-'tooltip-ca-unprotect' => 'Ena pele a bike',
+'tooltip-ca-unprotect' => 'Starkerdışe ena peler bıvurne',
'tooltip-ca-delete' => 'Ena pele bıestere',
'tooltip-ca-undelete' => 'peli biyarê halê ver hewnakerdışi',
'tooltip-ca-move' => 'Ena pele bere',
'tooltip-diff' => 'Vurnayışe mı bımoc',
'tooltip-compareselectedversions' => 'Ferqê versiyonan bevinin',
'tooltip-watch' => 'Eno pele listey tıyo seyir-kerdişi ri dek',
+'tooltip-watchlistedit-normal-submit' => 'Sernuşteya hewad',
+'tooltip-watchlistedit-raw-submit' => 'Listeyê seyr kerdişî newen ke',
'tooltip-recreate' => 'pel hewn a bışiyo zi tepiya biya',
'tooltip-upload' => 'Bar bike',
'tooltip-rollback' => '"Peyser biya" be yew tik pela îştirak(an)ê peyên|i(an) peyser ano.',
'spam_blanking' => 'revizyonê hemeyi de ıney $1 re gıreyi estî, deverdiyeno',
# Info page
+'pageinfo-title' => 'Heq tê "$1"\'i',
'pageinfo-header-edits' => 'Vurnayışi',
'pageinfo-header-watchlist' => 'Listey temaşi',
'pageinfo-header-views' => 'Bıvin',
'pageinfo-subjectpage' => 'Pele',
'pageinfo-talkpage' => 'Pelay qıse',
+'pageinfo-watchers' => 'Amarina temaşekaran',
+'pageinfo-edits' => 'Amarina vurnayışan',
+'pageinfo-authors' => 'Amarina nuştekaran',
+'pageinfo-views' => 'Amarina mocnayışan',
+'pageinfo-viewsperedit' => 'Vurnayışi sero vurnayışa bımocnêyış',
# Patrolling
'markaspatrolleddiff' => 'Nişan bike ke devriye biyo',
'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pele|peli}}',
'file-info' => 'ebatê dosyayi: $1, MIME tip: $2',
'file-info-size' => '$1 × $2 pixelan, ebatê dosya: $3, MIME type: $4',
+'file-info-size-pages' => '$1 × $2 pikse, dergeya dosyay: $3, MIME tipiya cı: $4, $5 {{PLURAL:$5|pela|pela}}',
'file-nohires' => 'Rovıleşiyayışo berzêr çıniyo.',
'svg-long-desc' => 'SVG dosya, nominalin $1 × $2 piksels, ebatê dosya: $3',
'show-big-image' => 'Resolosyonê temami',
+'show-big-image-preview' => "Verqayd dergiya: $1'i.",
+'show-big-image-other' => 'Zewmi{{PLURAL:$2|Vılêşnayış|Vılêşnayışê}}: $1.',
'show-big-image-size' => '$1 × $2 piksel',
'file-info-gif-looped' => 'viyariye biyo',
'file-info-gif-frames' => '$1 {{PLURAL:$1|çerçeve|çerçeveyi}}',
'exif-gpsdifferential' => 'GPS differential correction',
'exif-jpegfilecomment' => "Vatışê dosyada JPEG'i",
'exif-keywords' => 'Qesa kelimey',
+'exif-worldregiondest' => 'Wareyo ke mocneyêno',
+'exif-countrydest' => 'Dewleta ke mocneyêna',
+'exif-countrycodedest' => 'Kodê dewleto ke mocneyoêno',
+'exif-provinceorstatedest' => 'Eyalet yana wılayeto ke mocneyêno',
+'exif-citydest' => 'Sûka ke mocneyêna',
+'exif-sublocationdest' => 'Mıntıqeya sûker mocnayış',
+'exif-objectname' => 'Sernuşteyo qıckek',
+'exif-specialinstructions' => 'Talimatê xısusi',
+'exif-headline' => 'Sername',
+'exif-credit' => 'Kredi/Destegdaren',
+'exif-source' => 'Çıme',
+'exif-urgency' => 'Aciliyet',
+'exif-fixtureidentifier' => 'Namey fiksturi',
'exif-writer' => 'Nuştekar',
'exif-languagecode' => 'Zuwan',
+'exif-iimversion' => 'Verqaydê IIM',
'exif-iimcategory' => 'Kategori',
+'exif-datetimeexpires' => 'No peyra mekarênê',
+'exif-datetimereleased' => 'Bıroşe',
+'exif-originaltransmissionref' => 'Oricinal pusula da kodê açarnayışi',
+'exif-identifier' => 'Şınasnayer',
+'exif-lens' => 'Lensê karkerdışi',
+'exif-cameraownername' => 'Wayırê kamera',
'exif-label' => 'Etiket',
+'exif-rating' => 'Rey dayış (5i sera)',
+'exif-copyrighted' => 'Weziyetê telifi',
+'exif-copyrightowner' => 'Wayırê Telifi',
+'exif-usageterms' => 'Şertê karkerdışi',
+'exif-pngfilecomment' => "Vatışê dosyada PNG'i",
+'exif-disclaimer' => 'Reddê mesuliyeti',
+'exif-contentwarning' => 'İkazê zerreki',
+'exif-giffilecomment' => "vatena dosya da GIF'i",
+'exif-intellectualgenre' => 'Babeta çêki',
+'exif-subjectnewscode' => 'Kodê muhtewa',
+'exif-event' => 'Weqaya ke nameycıyo ravreno',
+'exif-organisationinimage' => 'Organizasyono ke ravêreno',
+'exif-personinimage' => 'Merdumo ke nameycıyo ravêreno',
# EXIF attributes
'exif-compression-1' => 'têhet nêanciyayo',
'exif-sensingmethod-7' => 'Sensorê hirê-çizgi',
'exif-sensingmethod-8' => 'sensora aritmetik a ke rengın his kena',
+'exif-filesource-3' => 'Dicital makinay kamera',
+
'exif-scenetype-1' => 'ca de fotoğraf ker',
'exif-customrendered-0' => 'Prosesê normali',
'exif-gpslongitude-e' => 'derganiya rocvetış',
'exif-gpslongitude-w' => 'Derganiya rocawan',
+# Pseudotags used for GPSAltitudeRef
+'exif-gpsaltitude-above-sealevel' => 'Sewiye de roy ra $1 {{PLURAL:$1|metre|metre}} cordeyo',
+'exif-gpsaltitude-below-sealevel' => 'Sewiye de roy ra $1 {{PLURAL:$1|metre|metre}} cêrdeyo',
+
'exif-gpsstatus-a' => 'peymawıtış dewam keno',
'exif-gpsstatus-v' => 'şuxuliyayişê peymawıtışi',
$5
+kodê tesdiqi heta ıney tarixi $4 meqbul o.',
+'confirmemail_body_set' => 'Jew ten, muhtemelen şıma no IP-adresi $1 ra,
+keye pelê {{SITENAME}}i de pê no $2 e-postayi hesab kerda.
+
+Eke raşta no e-posta eyê şıma yo şıma gani tesdiq bıkerî,
+qey tesdiq kerdışi gani karê e-postayê keyepeli {{SITENAME}} aktif bıbo, qey aktif kerdışi gıreyê cêrıni bıtıkne:
+
+$3
+
+eke şıma hesab *nêakerdo*, qey ibtalê tesdiq kerdışê adresa e-postayi gıreyê cêrêni bıtıknê:
+
+$5
+
kodê tesdiqi heta ıney tarixi $4 meqbul o.',
'confirmemail_invalidated' => 'Konfermasyonê adres ê emaîlî iptal biy',
'invalidateemail' => 'confirmasyonê e-maili iptal bik',
'version-license' => 'Lisans',
'version-poweredby-credits' => "Ena wiki, dezginda '''[//www.mediawiki.org/ MediaWiki]''' ya piya vıraziyaya, heqê telifi © 2001-$1 $2.",
'version-poweredby-others' => 'Zewmi',
+'version-license-info' => "MediaWiki xoseri jew nuştereno; MediaWiki'yer, weqfê xoseri nuşteren GNU lisansiya merdumi şene ke vıla kerê, bıvurnê u timar kerê.
+
+Nuşterenê MediaWiki merdumi cı ra nahfat bivinê deye êyê mısade danê; feqet ke nêşeno BIROŞO yana XOSERİ VILA KERO qerantiya ney çına. bewni rê lisansta GNU'y.
+
+enê programiya piya [{{SERVER}}{{SCRIPTPATH}}/COPYING jew kopyay lisans dê GNU] zi şımarê icab keno; narak lisansê şıma çıno se, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA adresi ra yana [//www.gnu.org/licenses/old-licenses/gpl-2.0.html enê lisansi buwane].",
'version-software' => 'Softwareyê ronayi',
'version-software-product' => 'Mal',
'version-software-version' => 'Versiyon',
# New logging system
'logentry-delete-delete' => "$1'i Pelaya $3'i besternê",
'logentry-delete-restore' => "$1'i pelaya $3'i peyd grot",
+'logentry-suppress-delete' => '$1 $3 rê pıloxneyê',
'revdelete-content-hid' => 'nusno nımte',
'revdelete-summary-hid' => 'Vurnayışi nımtey niyê',
'revdelete-uname-hid' => 'Namey karberi nımteyo',
+'revdelete-content-unhid' => 'Zerrek mocneya',
'revdelete-summary-unhid' => 'Xulusaya vurnayışa mucneyê',
'revdelete-uname-unhid' => 'Namey karberi ne nımteyo',
'revdelete-restricted' => 'verger (vergırewtış) ê ke qey xızmkaran biye',
'revdelete-unrestricted' => 'verger (ver gırewtış) ê ke qey xızmkaran diyê wera (wedariyê)',
'logentry-move-move' => "$1'i pelaya $3'i berd $4",
+'logentry-move-move-noredirect' => "$1'i pelay $3 raçarnayış neker dı u berd $4",
'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",
'feedback-adding' => 'Pela rê peyxeberdar defêno...',
'feedback-error1' => 'Xeta: API ra neticey ne vıcyay',
'feedback-error2' => 'Xeta: Timar kerdış nebı',
+'feedback-error3' => 'Xeta: API ra cewab çıno',
'feedback-close' => 'Biya star',
+'feedback-bugnew' => 'Mı qontrol ke. Xetaya newi xeber ke',
# API errors
+'api-error-duplicate' => 'Ena {{PLURAL:$1|ze ke [zey $2]|biya [zey dosya da $2]}} zeq wesiqa biya wendeyê.',
+'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-unknown-code' => "$1'dı jew xeta vıciye",
'api-error-unknown-warning' => "$1'dı ikazo xırab:",
'backend-fail-contenttype' => 'Wopśimjeśowy typ dataje, kótaraž ma se na "$1" składowaś, njedajo se zwěsćiś.',
'backend-fail-batchsize' => 'Štapjelowa dataja, kótaraž wopśimujo {{PLURAL:$1|jadnu operaciju|$1 operaciji|$1 operacije|$1 operacijow}}, jo se na składowański backend pósłała; limit jo $2 {{PLURAL:$1|operaciju|operaciji|operacije|operacijow}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Njejo žeden zwisk ze žurnaloweju datoweju banku za składowański backend "$1" móžno.',
'filejournal-fail-dbquery' => 'Žurnalowa datowa banka za składowański backend "$1" njedajo se aktualizěrowaś.',
'allpages-bad-ns' => 'Mjenjowy rum „$1“ w {{SITENAME}} njeeksistěrujo.',
'allpages-hide-redirects' => 'Dalejpósrědnjenja schowaś',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Woglědujoš se pufrowanu wersiju toś togo boka, kótaraž móžo do $1 stara byś.',
+'cachedspecial-viewing-cached-ts' => 'Woglědujoš se pufrowanu wersiju toś togo boka, kótaraž by mógła njeaktualna byś.',
+'cachedspecial-refresh-now' => 'Aktualnu wersiju se woglědaś.',
+
# Special:Categories
'categories' => 'Kategorije',
'categoriespagetext' => '{{PLURAL:$1|Slědujuca kategorija wopśimujo|Slědujucej kategoriji wopśimujotej|Slědujuce kategorije wopśimuju|Slědujuce kategorije wopśimuju}} boki abo medije.
'api-error-uploaddisabled' => 'Nagraśa su na toś tom wikiju znjemóžnjone.',
'api-error-verification-error' => 'Toś ta dataja by mógła wobkškóźona byś abo wopacnu kóńcowku měś.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekunźe|sekundy|sekundow}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minuśe|minuty|minutow}}',
+'duration-hours' => '$1 {{PLURAL:$1|góźina|góźinje|góźiny|góźinow}}',
+'duration-days' => '$1 {{PLURAL:$1|źeń|dnja|dny|dnjow}}',
+'duration-weeks' => '$1 {{PLURAL: $1|tyźeń|tyźenja|tyźenje|tyźenjow}}',
+'duration-years' => '$1 {{PLURAL: $1|lěto|lěśe|lěta|lět}}',
+'duration-decades' => '$1 {{PLURAL:$1|lětźasetk|lětźasetka|lětźasetki|lětźastkow}}',
+'duration-centuries' => '$1 {{PLURAL:$1|stolěśe|stolěśi|stolěśa|stolěśow}}',
+'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysaca|lěttysace|lěttysacow}}',
+
);
'directorycreateerror' => 'Could not create directory "$1".',
'filenotfound' => 'Could not find file "$1".',
'fileexistserror' => 'Unable to write to file "$1": File exists.',
-'filereadonlyerror' => 'Unable to modify the file "$1" because the file repository "$2" is in read-only mode.
-
-The administrator who locked it offered this explanation: "$3".',
'unexpected' => 'Unexpected value: "$1"="$2".',
'formerror' => 'Error: Could not submit form.',
'badarticleerror' => 'This action cannot be performed on this page.',
'ns-specialprotected' => 'Special pages cannot be edited.',
'titleprotected' => 'This title has been protected from creation by [[User:$1|$1]].
The reason given is "\'\'$2\'\'".',
+'filereadonlyerror' => 'Unable to the modify the file "$1" because the file repository "$2" is in read-only mode.
+
+The administrator who locked it offered this explanation: "$3".',
# Virus scanner
'virus-badscanner' => "Bad configuration: Unknown virus scanner: ''$1''",
'''Only''' the text in the upper text area will be saved when you press \"{{int:savearticle}}\".",
'yourtext' => 'Your text',
'storedversion' => 'Stored revision',
-'nonunicodebrowser' => "'''Warning: Your browser is not unicode compliant.'''
+'nonunicodebrowser' => "'''Warning: Your browser is not Unicode compliant.'''
A workaround is in place to allow you to safely edit pages: Non-ASCII characters will appear in the edit box as hexadecimal codes.",
'editingold' => "'''Warning: You are editing an out-of-date revision of this page.'''
If you save it, any changes made since this revision will be lost.",
# Suppression log
'suppressionlog' => 'Suppression log',
'suppressionlogtext' => 'Below is a list of deletions and blocks involving content hidden from administrators.
-See the [[Special:BlockList|IP block list]] for the list of currently operational bans and blocks.',
+See the [[Special:BlockList|block list]] for the list of currently operational bans and blocks.',
# History merging
'mergehistory' => 'Merge page histories',
'backend-fail-contenttype' => 'Could not determine the content type of the file to store at "$1".',
'backend-fail-batchsize' => 'Storage backend given a batch of $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.',
-# File journal
'filejournal-fail-dbconnect' => 'Could not connect to the journal database for storage backend "$1".',
'filejournal-fail-dbquery' => 'Could not update the journal database for storage backend "$1".',
'disambiguationspage' => 'Template:disambig',
'disambiguations-text' => "The following pages link to a '''disambiguation page'''.
They should link to the appropriate topic instead.<br />
-A page is treated as disambiguation page if it uses a template which is linked from [[MediaWiki:Disambiguationspage]]",
+A page is treated as disambiguation page if it uses a template which is linked from [[MediaWiki:Disambiguationspage]].",
'doubleredirects' => 'Double redirects',
'doubleredirects-summary' => '', # do not translate or duplicate this message to other languages
'log-title-wildcard' => 'Search titles starting with this text',
# Special:AllPages
-'allpages' => 'All pages',
-'allpages-summary' => '', # do not translate or duplicate this message to other languages
-'alphaindexline' => '$1 to $2',
-'nextpage' => 'Next page ($1)',
-'prevpage' => 'Previous page ($1)',
-'allpagesfrom' => 'Display pages starting at:',
-'allpagesto' => 'Display pages ending at:',
-'allarticles' => 'All pages',
-'allinnamespace' => 'All pages ($1 namespace)',
-'allnotinnamespace' => 'All pages (not in $1 namespace)',
-'allpagesprev' => 'Previous',
-'allpagesnext' => 'Next',
-'allpagessubmit' => 'Go',
-'allpagesprefix' => 'Display pages with prefix:',
-'allpagesbadtitle' => 'The given page title was invalid or had an inter-language or inter-wiki prefix.
+'allpages' => 'All pages',
+'allpages-summary' => '', # do not translate or duplicate this message to other languages
+'alphaindexline' => '$1 to $2',
+'nextpage' => 'Next page ($1)',
+'prevpage' => 'Previous page ($1)',
+'allpagesfrom' => 'Display pages starting at:',
+'allpagesto' => 'Display pages ending at:',
+'allarticles' => 'All pages',
+'allinnamespace' => 'All pages ($1 namespace)',
+'allnotinnamespace' => 'All pages (not in $1 namespace)',
+'allpagesprev' => 'Previous',
+'allpagesnext' => 'Next',
+'allpagessubmit' => 'Go',
+'allpagesprefix' => 'Display pages with prefix:',
+'allpagesbadtitle' => 'The given page title was invalid or had an inter-language or inter-wiki prefix.
It may contain one or more characters which cannot be used in titles.',
-'allpages-bad-ns' => '{{SITENAME}} does not have namespace "$1".',
+'allpages-bad-ns' => '{{SITENAME}} does not have namespace "$1".',
'allpages-hide-redirects' => 'Hide redirects',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'You are viewing a cached version of this page, which can be up to $1 old.',
+'cachedspecial-viewing-cached-ts' => 'You are viewing a cached version of this page, which might not be completely actual.',
+'cachedspecial-refresh-now' => 'View latest.',
+
# Special:Categories
'categories' => 'Categories',
'categories-summary' => '', # do not translate or duplicate this message to other languages
'badipaddress' => 'Invalid IP address',
'blockipsuccesssub' => 'Block succeeded',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] has been blocked.<br />
-See [[Special:BlockList|IP block list]] to review blocks.',
+See the [[Special:BlockList|block list]] to review blocks.',
'ipb-blockingself' => 'You are about to block yourself! Are you sure you want to do that?',
'ipb-confirmhideuser' => 'You are about to block a user with "hide user" enabled. This will suppress the user\'s name in all lists and log entries. Are you sure you want to do that?',
'ipb-edit-dropdown' => 'Edit block reasons',
'createaccountblock' => 'account creation blocked',
'emailblock' => 'e-mail blocked',
'blocklist-nousertalk' => 'cannot edit own talk page',
-'ipblocklist-empty' => 'The blocklist is empty.',
+'ipblocklist-empty' => 'The block list is empty.',
'ipblocklist-no-results' => 'The requested IP address or username is not blocked.',
'blocklink' => 'block',
'unblocklink' => 'unblock',
'reblock-logentry' => 'changed block settings for [[$1]] with an expiry time of $2 $3',
'blocklogtext' => 'This is a log of user blocking and unblocking actions.
Automatically blocked IP addresses are not listed.
-See the [[Special:BlockList|IP block list]] for the list of currently operational bans and blocks.',
+See the [[Special:BlockList|block list]] for the list of currently operational bans and blocks.',
'unblocklogentry' => 'unblocked $1',
'block-log-flags-anononly' => 'anonymous users only',
'block-log-flags-nocreate' => 'account creation disabled',
'version-software' => 'Installed software',
'version-software-product' => 'Product',
'version-software-version' => 'Version',
+'version-entrypoints' => 'Entry point URLs',
+'version-entrypoints-header-entrypoint' => 'Entry point',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Article path]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Script path]',
+'version-entrypoints-index-php' => '[https://www.mediawiki.org/wiki/Manual:index.php index.php]',
+'version-entrypoints-api-php' => '[https://www.mediawiki.org/wiki/Manual:api.php api.php]',
+'version-entrypoints-load-php' => '[https://www.mediawiki.org/wiki/Manual:load.php load.php]',
# Special:FilePath
'filepath' => 'File path',
'api-error-uploaddisabled' => 'Uploading is disabled on this wiki.',
'api-error-verification-error' => 'This file might be corrupt, or have the wrong extension.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|second|seconds}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minute|minutes}}',
+'duration-hours' => '$1 {{PLURAL:$1|hour|hours}}',
+'duration-days' => '$1 {{PLURAL:$1|day|days}}',
+'duration-weeks' => '$1 {{PLURAL:$1|week|weeks}}',
+'duration-years' => '$1 {{PLURAL:$1|year|years}}',
+'duration-decades' => '$1 {{PLURAL:$1|decade|decades}}',
+'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
+
);
* @author Michawiki
* @author Mihxil
* @author MinuteElectron
+ * @author Objectivesea
* @author Omnipaedista
* @author Pedroca cerebral
* @author Petrus Adamus
'url_query' => array( '0', 'INFORMPETO', 'QUERY' ),
);
-$separatorTransformTable = array( ',' => ' ', '.' => ',' );
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
$datePreferences = false;
$defaultDateFormat = 'dmy';
'tooltip-preferences-save' => 'Konservi preferojn',
'tooltip-summary' => 'Enigu mallongan resumon',
+# Stylesheets
+'common.css' => '/* La jena CSS influos la aspekton de ĉiaj temoj. */',
+'standard.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Klasika temo. */',
+'nostalgia.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Nostalgia temo. */',
+'cologneblue.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Kolonja Blua temo. */',
+'monobook.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Libreja temo. */',
+'myskin.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Miŝela temo. */',
+'chick.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Kokida temo. */',
+'simple.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Simpla temo. */',
+'modern.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Moderna temo. */',
+'vector.css' => '/* La jena CSS influos la paĝaspekton por uzantoj de la Vektora temo. */',
+'print.css' => '/* La jena CSS influos la prezentadon de la presaĵo. */',
+'handheld.css' => '/* La jena CSS influos manpremitajn komputilojn sur bazo de la temo kiu arangiĝis en $wgHandheldStyle. */',
+'noscript.css' => '/* La jena CSS influos uzantojn, kiuj desebligis Ĝavaskripton. */',
+'group-autoconfirmed.css' => '/* La jena CSS sole influos auxtokonfirmatajn uzantojn. */',
+'group-bot.css' => '/* La jena CSS sole influos robotojn. */',
+'group-sysop.css' => '/* La jena CSS sole influos administrantojn. */',
+'group-bureaucrat.css' => '/* La jena CSS sole influos burokratojn. */',
+
+# Scripts
+'common.js' => '/* La jena Ĝavaskripto ŝargiĝos por ĉiaj uzantoj ĉe ĉiu paĝoŝargado. */',
+'standard.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Klasika temo. */',
+'nostalgia.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Nostalgia temo. */',
+'cologneblue.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Kolonja Blua temo. */',
+'monobook.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Libreja temo. */',
+'myskin.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Miŝela temo. */',
+'chick.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Kokida temo. */',
+'simple.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Simpla temo. */',
+'modern.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Moderna temo. */',
+'vector.js' => '/* La jena Ĝavaskripto ŝargiĝos por uzantoj de la Vektora temo. */',
+'group-autoconfirmed.js' => '/* La jena Ĝavaskripto sole ŝargiĝos por auxtokonfirmataj uzantoj. */',
+'group-bot.js' => '/* La jena Ĝavaskripto sole ŝargiĝos por robotoj. */',
+'group-sysop.js' => '/* La jena Ĝavaskripto sole ŝargiĝos por administrantoj. */',
+'group-bureaucrat.js' => '/* La jena Ĝavaskripto sole ŝargiĝos por burokratoj. */',
+
# Metadata
'notacceptable' => 'La viki-servilo ne povas doni datumon en formato kiun via kliento povas legi.',
'pageinfo-viewsperedit' => 'Po rigardoj por redakto',
# Skin names
-'skinname-standard' => 'Klasika',
+'skinname-standard' => 'Klasiko',
'skinname-nostalgia' => 'Nostalgio',
'skinname-cologneblue' => 'Kolonja Bluo',
'skinname-monobook' => 'Librejo',
+'skinname-myskin' => 'Miŝelo',
'skinname-chick' => 'Kokido',
+'skinname-simple' => 'Simplo',
+'skinname-modern' => 'Moderno',
+'skinname-vector' => 'Vektoro',
# Patrolling
'markaspatrolleddiff' => 'Marki kiel patrolitan',
# Suppression log
'suppressionlog' => 'Registro de supresiones',
-'suppressionlogtext' => 'Debajo hay una lista con los borrados y bloqueos recientes cuyo contenido se encuentra oculto para administradores.
-Mire la [[Special:BlockList|lista de bloqueos activos]] para ver la lista de bloqueos actualmente operativos.',
+'suppressionlogtext' => 'A continuación hay una lista con los borrados y bloqueos cuyo contenido se encuentra oculto para los administradores.
+Ver la [[Special:BlockList|lista de bloqueos]] que incluye las prohibiciones y bloqueos actualmente operativos.',
# History merging
'mergehistory' => 'Fusionar historiales de páginas',
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'No se pudo conectar a la base de datos del registro del sistema de almacenamiento "$1".',
'filejournal-fail-dbquery' => 'No se pudo actualizar la base de datos del registro del sistema de almacenamiento "$1".',
'allpages-bad-ns' => '{{SITENAME}} no tiene un espacio de nombres llamado «$1».',
'allpages-hide-redirects' => 'Ocultar redirecciones',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Usted está viendo una versión en caché de esta página, que puede tener hasta $1 días de antigüedad.',
+'cachedspecial-viewing-cached-ts' => 'Está viendo una versión en caché de esta página, que puede no estar completamente actualizada.',
+'cachedspecial-refresh-now' => 'Ver lo más reciente.',
+
# Special:Categories
'categories' => 'Categorías',
'categoriespagetext' => 'Las siguientes {{PLURAL:$1|categoría contiene|categorías contienen}} páginas o medios.
'blocklog-showsuppresslog' => 'Este usuario ha sido bloqueado y ocultado. Se provee el registro de supresiones para más detalle:',
'blocklogentry' => 'bloqueó a [[$1]] $3 durante un plazo de $2',
'reblock-logentry' => 'cambió el bloqueo para [[$1]] con una caducidad de $2 $3',
-'blocklogtext' => 'Esto es un registro de bloqueos y desbloqueos de usuarios.
-Las direcciones bloqueadas automáticamente no aparecen aquí.
-Consulte la [[Special:BlockList|lista de direcciones IP bloqueadas]] para ver la lista de bloqueos vigente.',
+'blocklogtext' => 'Esto es un registro de acciones de bloqueo y desbloqueo de usuarios.
+Las direcciones IP bloqueadas automáticamente no aparecen aquí.
+Consulta la [[Special:BlockList|lista de bloqueos]] para ver la lista de bloqueos y prohibiciones de operar en vigor.',
'unblocklogentry' => 'desbloqueó a $1',
'block-log-flags-anononly' => 'sólo anónimos',
'block-log-flags-nocreate' => 'desactivada la creación de cuentas',
'version-software' => 'Software instalado',
'version-software-product' => 'Producto',
'version-software-version' => 'Versión',
+'version-entrypoints' => 'URL del punto de entrada',
+'version-entrypoints-header-entrypoint' => 'Punto de entrada',
+'version-entrypoints-header-url' => 'Dirección URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Ruta del artículo]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Ruta de la secuencia de comandos (script)]',
# Special:FilePath
'filepath' => 'Ruta de archivo',
'api-error-uploaddisabled' => 'Las subidas están desactivadas en este wiki.',
'api-error-verification-error' => 'Este archivo puede estar dañado, o tiene una extensión incorrecta.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|segundo|segundos}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuto|minutos}}',
+'duration-hours' => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days' => '$1 {{PLURAL:$1|día|días}}',
+'duration-weeks' => '$1 {{PLURAL:$1|semana|semanas}}',
+'duration-years' => '$1 {{PLURAL: $1|año|años}}',
+'duration-decades' => '$1 {{PLURAL:$1|década|décadas}}',
+'duration-centuries' => '$1 {{PLURAL:$1|siglo|siglos}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
+
);
'customjsprotected' => 'Sul pole õigust seda JavaScripti lehekülge redigeerida, sest see sisaldab teise kasutaja isiklikke sätteid.',
'ns-specialprotected' => 'Erilehekülgi ei saa redigeerida.',
'titleprotected' => "Kasutaja [[User:$1|$1]] on selle pealkirjaga lehe loomise keelanud esitades järgmise põhjenduse: ''$2''.",
+'filereadonlyerror' => 'Faili "$1" ei saa muuta, sest hoidla "$2" on kirjutuskaitstud.
+
+Administraator lukustas selle järgmisel põhjusel: "$3".',
# Virus scanner
'virus-badscanner' => "Viga konfiguratsioonis: tundmatu viirusetõrje: ''$1''",
'invalidemailaddress' => 'E-aadress ei ole aktsepteeritav, sest see on vigaselt kirjutatud.
Ole hea ja anna õige e-aadress või jäta lahter tühjaks.',
'cannotchangeemail' => 'Selles vikis ei saa konto e-posti aadressi muuta.',
+'emaildisabled' => 'Selle võrgukoha kaudu ei saa e-kirju saata.',
'accountcreated' => 'Konto loodud',
'accountcreatedtext' => 'Kasutajakonto kasutajatunnusele $1 loodud.',
'createaccount-title' => '{{GRAMMAR:illative|{{SITENAME}}}} konto loomine',
See juhtub mõnikord siis, kui kasutatakse vigast veebipõhist anonüümsusserverit.",
'edit_form_incomplete' => "'''Redigeerimisvormi mõni osa ei jõudnud serverisse; kontrolli, kas sinu tehtud muudatused on alles, ja proovi uuesti.'''",
'editing' => 'Redigeerimisel on $1',
+'creating' => 'Alustamisel on $1',
'editingsection' => 'Redigeerimisel on osa leheküljest $1',
'editingcomment' => 'Muutmisel on $1 (uus alaosa)',
'editconflict' => 'Redigeerimiskonflikt: $1',
'edit-no-change' => 'Sinu redigeerimist ignoreeriti, sest tekstile ei olnud tehtud muudatusi.',
'edit-already-exists' => 'Ei saanud alustada uut lehekülge.
See on juba olemas.',
+'defaultmessagetext' => 'Sõnumi vaiketekst',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
'sharedupload' => 'See fail pärineb allikast $1 ning võib olla kasutusel ka teistes projektides.',
'sharedupload-desc-there' => 'See fail pärineb kesksest failivaramust $1. Palun vaata [$2 faili kirjelduse lehekülge], et saada rohkem teavet.',
'sharedupload-desc-here' => 'See on jagatud fail allikast $1 ja seda saab kasutada ka teistes projektides. Faili sealne [$2 kirjeldus] on kuvatud allpool.',
+'sharedupload-desc-edit' => 'See fail on pärit allikast $1 ja seda saab kasutada teistes projektides.
+Võib-olla tahad redigeerida selle faili [$2 sealset kirjelduslehekülge].',
+'sharedupload-desc-create' => 'See fail on pärit allikast $1 ja seda saab kasutada teistes projektides.
+Võib-olla tahad redigeerida selle faili [$2 sealset kirjelduslehekülge].',
'filepage-nofile' => 'Sellenimelist faili ei ole.',
'filepage-nofile-link' => 'Sellenimelist faili ei ole, kuid sa saad selle [$1 üles laadida].',
'uploadnewversion-linktext' => 'Laadi üles selle faili uus versioon',
'allpagesbadtitle' => 'Lehekülje pealkiri oli vigane või sisaldas teise viki või keele eesliidet.
See võib sisaldada üht või enamat märki, mida ei saa pealkirjades kasutada.',
'allpages-bad-ns' => '{{GRAMMAR:inessive|{{SITENAME}}}} ei ole nimeruumi "$1".',
+'allpages-hide-redirects' => 'Peida ümbersuunamised',
# Special:Categories
'categories' => 'Kategooriad',
دلیل ارائهشده این است: «''$2''».",
'filereadonlyerror' => "تغییر پرونده «$1» ممکن نیست چون مخزن پرونده «$2» در حالت فقط خواندنی قرار دارد.
-دلیل ارائه شده چنین است: «''$3''».",
+مدیری که آن را قفل کرده چنین توضیحی را ذکر کرده: ''$3''.",
# Virus scanner
'virus-badscanner' => "پیکربندی بد: پویشگر ویروس ناشناخته: ''$1''",
'updated' => '(بهروز شد)',
'note' => "'''نکته:'''",
'previewnote' => "'''به یاد داشته باشید که این فقط پیشنمایش است.'''
-تغییرات شما هنوز ذخیره نشدهاست!",
+تغییرات شما هنوز ذخیره نشدهاست! [[#editform|ادامه ویرایش ←]]",
'previewconflict' => 'این پیشنمایش منعکسکنندهٔ متن ناحیهٔ ویرایش متن بالایی است، به شکلی که اگر متن را ذخیره کنید نمایش خواهد یافت.',
'session_fail_preview' => "'''شرمنده! به علت از دست رفتن اطلاعات نشست کاربری نمیتوانیم ویرایش شما را پردازش کنیم.'''
لطفاً دوباره سعی کنید.
# Suppression log
'suppressionlog' => 'سیاههٔ فرونشانی',
'suppressionlogtext' => 'در زیر فهرستی از آخرین حذفها و قطع دسترسیهایی که حاوی محتوایی هستند که از مدیران پنهان شدهاند را میبینید.
-برای مشاهدهٔ فهرستی از قطع دسترسیهای فعال [[Special:BlockList|IP block list]] را ببینید.',
+برای مشاهدهٔ فهرستی از قطع دسترسیهای فعال [[Special:BlockList|فهرست بستهشدهها]] را ببینید.',
# History merging
'mergehistory' => 'ادغام تاریخچه صفحهها',
'action-undelete' => 'احیای این صفحه',
'action-suppressrevision' => 'مشاهده و احیای ویرایشهای حذف شده',
'action-suppressionlog' => 'مشاهدهٔ این سیاههٔ خصوصی',
-'action-block' => 'قطع دسترسی ویرایش این کاربر',
+'action-block' => 'قطع دسترسی این کاربر از ویرایش کردن',
'action-protect' => 'تغییر سطح محافظت این صفحه',
'action-rollback' => 'واگردانی سریع ویرایشهای آخرین کاربری که یک صفحه را ویرایش کردهاست',
'action-import' => 'وارد کردن این صفحه از یک ویکی دیگر',
'allpages-bad-ns' => '{{SITENAME}} دارای فضای نام «$1» نیست.',
'allpages-hide-redirects' => 'پنهانکردن تغییرمسیرها',
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'مشاهده آخرین.',
+
# Special:Categories
'categories' => 'ردهها',
'categoriespagetext' => '{{PLURAL:$1|ردهٔ|ردههای}} زیر دارای صفحهها یا پروندههایی {{PLURAL:$1|است|هستند}}.
'watchmethod-list' => 'بررسی صفحههای مورد پیگیری برای ویرایشهای اخیر',
'watchlistcontains' => 'فهرست پیگیریهای شما حاوی $1 {{PLURAL:$1|صفحه|صفحه}} است.',
'iteminvalidname' => 'مشکل با مورد «$1»، نام نامعتبر است...',
-'wlnote' => "در زیر {{PLURAL:$1|تغییری|'''$1''' تغییری}} که در {{PLURAL:$2|ساعت|'''$2''' ساعت}} گذشته انجام شده موجود است، تاریخ آخرین بازیابی: $3، $4",
+'wlnote' => 'در زیر {{PLURAL:$1|تغییری|$1 تغییری}} که در {{PLURAL:$2|ساعت|$2 ساعت}} گذشته انجام شده موجود است، تاریخ آخرین بازیابی: $3، $4',
'wlshowlast' => 'نمایش آخرین $1 ساعت $2 روز $3',
'watchlist-options' => 'گزینههای پیگیری',
'badipaddress' => 'نشانی آیی غیر مجاز',
'blockipsuccesssub' => 'بستن با موفقیت انجام شد',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] بسته شد.<br />
-براÛ\8c بررسÛ\8c بستÙ\87â\80\8cشدÙ\86â\80\8cÙ\87ا [[Special:BlockList|Ù\81Ù\87رست Ù\86شاÙ\86Û\8câ\80\8cÙ\87اÛ\8c Ø¢Û\8câ\80\8cÙ¾Û\8c بستÙ\87â\80\8cشدÙ\87]] را ببینید.',
+براÛ\8c بررسÛ\8c بستÙ\87â\80\8cشدÙ\87â\80\8cÙ\87ا [[Special:BlockList|Ù\81Ù\87رست بستÙ\87â\80\8cشدÙ\87â\80\8cÙ\87ا]] را ببینید.',
'ipb-blockingself' => 'شما در حال بستن خودتان هستید! آیا مطمئن هستید که میخواهید چنین کاری انجام دهید؟',
'ipb-confirmhideuser' => 'شما در حال بستن یک کاربر هستید که «پنهانسازی کاربر» برایش فعال شدهاست. این کار نام کاربر را از همهٔ فهرستها و سیاههها مخفی میکند. آیا مطمئن هستید که میخواهید آن را انجام دهید؟',
'ipb-edit-dropdown' => 'ویرایش دلایل قطعدسترسی',
سیاههٔ قطع دسترسی در زیر نمایش یافته است:',
'blocklogentry' => '«[[$1]]» را تا $2 بست $3',
'reblock-logentry' => 'تنظیمات قطع دسترسی [[$1]] را تغییر داد به پایان قطع دسترسی در $2 $3',
-'blocklogtext' => 'اÛ\8cÙ\86 سÛ\8cاÙ\87Ù\87â\80\8cاÛ\8c از اعÙ\85اÙ\84 بستÙ\86 Ù\88 باز کردÙ\86 کاربرÙ\87ا است.
+'blocklogtext' => 'این سیاههای از بستن و باز کردن کاربرها است.
نشانیهای آیپی که به طور خودکار بسته شدهاند فهرست نشدهاند.
-برای فهرست محرومیتها و بستهشدنهای فعال در لحظهٔ حاضر، به [[Special:BlockList|فهرست آیپیهای بسته]] مراجعه کنید.',
+برای فهرست محرومیتها و بستهشدنهای حال حاضر به [[Special:BlockList|فهرست بستهشدهها]] مراجعه کنید.',
'unblocklogentry' => '$1 را باز کرد',
'block-log-flags-anononly' => 'فقط کاربران گمنام',
'block-log-flags-nocreate' => 'قابلیت ایجاد حساب غیرفعال شد',
انتقال صفحهها به نام جدید ممکن است تغییر اساسی و غیرمنتظرهای برای صفحههای محبوب باشد؛
لطفاً مطمئن شوید که قبل از انتقال دادن صفحه، عواقب این کار را درک میکنید.",
'movepagetext-noredirectfixer' => "استفاده از فرم زیر سبب تغییر نام یک صفحه و انتقال تمام تاریخچهٔ آن به نام جدید میشود.
-نام پیشین تغییرمسیری به نام جدید خواهد شد.
-به خاطر داشته باشید که [[Special:DoubleRedirects|تغییرمسیرهای دوتایی]] یا [[Special:BrokenRedirects|تغییر مسیهای خراب]] را بررسی کنید.
-شما مسئول هستید اطمینان حاصل کنید که پیوندها باز هم به جایی اشاره میکنند که قرار است بروند.
+عنوان پیشین تغییرمسیری به عنوان جدید خواهد شد.
+به خاطر داشته باشید که [[Special:DoubleRedirects|تغییرمسیرهای دوتایی]] یا [[Special:BrokenRedirects|تغییرمسیرهای خراب]] را بررسی کنید.
+شما مسئولید که مطمئن شوید پیوندها به جایی اشاره میکنند که قرار است بروند.
-توجه کنید که اگر نام جدید از قبل ایجاد شده باشد، انتقال انجام '''نخواهد گرفت'''، مگر در حالتی که صفحه خالی باشد و یا تغییرمسیر باشد و تاریخچهٔ ویرایشی دیگری نداشته باشد.
-این بدان معناست که اگر صفحه را اشتباهی منتقل کردید میتوانید این تغییر را واگردانی کنید، اما نمیتوانید به صفحهای که از قبل موجود است انتقال دهید.
+توجه کنید که اگر صفحهای تحت عنوان جدید از قبل موجود باشد، انتقال انجام '''نخواهد شد'''، مگر اینکه صفحه خالی و یا تغییرمسیر باشد و تاریخچهٔ ویرایشی دیگری نداشته باشد.
+این یعنی اگر صفحه را به نامی اشتباه منتقل کردید میتوانید این تغییر را واگردانی کنید، اما نمیتوانید به صفحهای که از قبل موجود است انتقال دهید.
'''هشدار!'''
-اÙ\86تÙ\82اÙ\84 صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c Ù\85ØبÙ\88ب Ù\85Û\8câ\80\8cتÙ\88اÙ\86د غÛ\8cر منتظره باشد؛
-Ù\84Ø·Ù\81اÙ\8b Ù\85Ø·Ù\85ئÙ\86 Ø´Ù\88Û\8cد Ú©Ù\87 از نتیجهٔ کار آگاهید.",
+اÙ\86تÙ\82اÙ\84 صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c پربÛ\8cÙ\86Ù\86دÙ\87 Ù\85Ù\85Ú©Ù\86 است عÙ\85Ù\84Û\8c غÛ\8cرمنتظره باشد؛
+Ù\84Ø·Ù\81اÙ\8b Ù¾Û\8cØ´ از اÙ\86تÙ\82اÙ\84 Ù\85Ø·Ù\85ئÙ\86 Ø´Ù\88Û\8cد از نتیجهٔ کار آگاهید.",
'movepagetalktext' => "صفحهٔ بحث مربوط، اگر وجود داشته باشد، بطور خودکار همراه با مقالهٔ اصلی منتقل خواهد شد '''مگر اینکه''' :
* در حال انتقال صفحه از این فضای نام به فضای نام دیگری باشید،
* یک صفحهٔ بحث غیرخالی تحت این نام جدید وجود داشته باشد، یا
'tooltip-pt-login' => 'توصیه میشود که به سامانه وارد شوید، گرچه اجباری نیست',
'tooltip-pt-anonlogin' => 'توصیه میشود که به سامانه وارد شوید، لیکن اجباری نیست',
'tooltip-pt-logout' => 'خروج از سامانه',
-'tooltip-ca-talk' => 'گفتگو پیرامون صفحهٔ محتوا',
+'tooltip-ca-talk' => 'گفتگو پیرامون محتوای صفحه',
'tooltip-ca-edit' => 'شما میتوانید این صفحه را ویرایش کنید. لطفاً پیش از ذخیره از دکمهٔ پیشنمایش استفاده کنید.',
'tooltip-ca-addsection' => 'بخشی جدید ایجاد کنید',
'tooltip-ca-viewsource' => 'این صفحه محافظتشدهاست.
'version-software' => 'نسخهٔ نصبشده',
'version-software-product' => 'محصول',
'version-software-version' => 'نسخه',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath مسیر مقاله]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath مسیر اسکریپت]',
# Special:FilePath
'filepath' => 'مسیر پرونده',
'api-error-uploaddisabled' => 'بارگذاری در این ویکی غیرفعال است.',
'api-error-verification-error' => 'ممکن است پرونده آسیب دیده باشد، یا دارای پسوند نادرست باشد.',
+# Durations
+'duration-seconds' => '$1 ثانیه',
+'duration-minutes' => '$1 دقیقه',
+'duration-hours' => '$1 ساعت',
+'duration-days' => '$1 روز',
+'duration-weeks' => '$1 هفته',
+'duration-years' => '$1 سال',
+'duration-decades' => '$1 دهه',
+'duration-centuries' => '$1 قرن',
+'duration-millennia' => '{{PLURAL:$1|هزار سال |$1 هزار سال}}',
+
);
* @author Jack Phoenix
* @author Jafeluv
* @author Kaganer
+ * @author Kulmalukko
* @author Mobe
* @author Nedergard
* @author Nike
'tooltip-diff' => 'Näytä tehdyt muutokset',
'tooltip-compareselectedversions' => 'Vertaile valittuja versioita',
'tooltip-watch' => 'Lisää tämä sivu tarkkailulistaan',
+'tooltip-watchlistedit-normal-submit' => 'Poista sivut',
'tooltip-watchlistedit-raw-submit' => 'Päivitä tarkkailulista',
'tooltip-recreate' => 'Luo sivu uudelleen',
'tooltip-upload' => 'Aloita tallennus',
'tog-previewontop' => 'Afficher la prévisualisation au-dessus de la zone de modification',
'tog-previewonfirst' => 'Afficher la prévisualisation lors de la première modification',
'tog-nocache' => 'Désactiver le cache des pages par le navigateur',
-'tog-enotifwatchlistpages' => "M'avertir par courriel lorsqu'une page de ma liste de suivi est modifiée",
-'tog-enotifusertalkpages' => "M'avertir par courriel si ma page de discussion est modifiée",
+'tog-enotifwatchlistpages' => 'M’avertir par courriel lorsqu’une page de ma liste de suivi est modifiée',
+'tog-enotifusertalkpages' => 'M’avertir par courriel si ma page de discussion est modifiée',
'tog-enotifminoredits' => "M'avertir par courriel même en cas de modifications mineures des pages",
'tog-enotifrevealaddr' => 'Afficher mon adresse de courriel dans les courriels de notification',
-'tog-shownumberswatching' => "Afficher le nombre d'utilisateurs qui suivent cette page",
+'tog-shownumberswatching' => 'Afficher le nombre d’utilisateurs qui suivent cette page',
'tog-oldsig' => 'Signature existante :',
'tog-fancysig' => 'Traiter la signature comme du wikitexte (sans lien automatique)',
-'tog-externaleditor' => "Utiliser par défaut un éditeur de texte externe (pour les utilisateurs avancés, nécessite des réglages spécifiques sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d'informations]).",
-'tog-externaldiff' => "Utiliser un comparateur externe par défaut (pour les utilisateurs avancés, nécessite des réglages sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d'informations]).",
+'tog-externaleditor' => 'Utiliser par défaut un éditeur de texte externe (pour les utilisateurs avancés, nécessite des réglages spécifiques sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d’informations]).',
+'tog-externaldiff' => 'Utiliser un comparateur externe par défaut (pour les utilisateurs avancés, nécessite des réglages sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d’informations]).',
'tog-showjumplinks' => 'Activer les liens « navigation » et « recherche » en haut de page',
-'tog-uselivepreview' => "Utiliser l'aperçu rapide (nécessite JavaScript) (expérimental)",
-'tog-forceeditsummary' => "M'avertir lorsque je n'ai pas spécifié de résumé de modification",
+'tog-uselivepreview' => 'Utiliser l’aperçu rapide (nécessite JavaScript) (expérimental)',
+'tog-forceeditsummary' => 'M’avertir lorsque je n’ai pas spécifié de résumé de modification',
'tog-watchlisthideown' => 'Masquer mes propres modifications dans la liste de suivi',
'tog-watchlisthidebots' => 'Masquer les modifications faites par des robots dans la liste de suivi',
'tog-watchlisthideminor' => 'Masquer les modifications mineures dans la liste de suivi',
'tog-watchlisthideanons' => 'Masquer les modifications anonymes dans la liste de suivi',
'tog-watchlisthidepatrolled' => 'Masquer les modifications surveillées dans la liste de suivi',
'tog-nolangconversion' => 'Désactiver la conversion des variantes linguistiques',
-'tog-ccmeonemails' => "M'envoyer une copie des courriels que j'envoie aux autres utilisateurs",
+'tog-ccmeonemails' => 'M’envoyer une copie des courriels que j’envoie aux autres utilisateurs',
'tog-diffonly' => 'Ne pas afficher le contenu des pages sous les diffs',
'tog-showhiddencats' => 'Afficher les catégories cachées',
'tog-noconvertlink' => 'Désactiver la conversion des titres',
-'tog-norollbackdiff' => "Ne pas afficher le diff lors d'une révocation",
+'tog-norollbackdiff' => 'Ne pas afficher le diff lors d’une révocation',
'underline-always' => 'Toujours',
'underline-never' => 'Jamais',
'underline-default' => 'Valeur par défaut du navigateur',
# Font style option in Special:Preferences
-'editfont-style' => "Style de police de la zone d'édition :",
+'editfont-style' => 'Style de police de la zone d’édition :',
'editfont-default' => 'Celui par défaut du navigateur',
'editfont-monospace' => 'Police de chasse fixe',
'editfont-sansserif' => 'Police sans empattement',
'vector-simplesearch-preference' => 'Activer les suggestions de recherche améliorées (seulement pour Vector)',
'vector-view-create' => 'Créer',
'vector-view-edit' => 'Modifier',
-'vector-view-history' => "Afficher l'historique",
+'vector-view-history' => 'Afficher l’historique',
'vector-view-view' => 'Lire',
'vector-view-viewsource' => 'Voir la source',
'actions' => 'Actions',
'imagepage' => 'Voir la page du fichier',
'mediawikipage' => 'Voir la page du message',
'templatepage' => 'Voir la page du modèle',
-'viewhelppage' => "Voir la page d'aide",
+'viewhelppage' => 'Voir la page d’aide',
'categorypage' => 'Voir la page de catégorie',
'viewtalkpage' => 'Page de discussion',
'otherlanguages' => 'Autres langues',
'jumpto' => 'Aller à :',
'jumptonavigation' => 'Navigation',
'jumptosearch' => 'rechercher',
-'view-pool-error' => "Désolé, les serveurs sont surchargés en ce moment.
-Trop d'utilisateurs cherchent à consulter cette page.
-Veuillez attendre un moment avant de retenter l'accès à cette page.
+'view-pool-error' => 'Désolé, les serveurs sont surchargés en ce moment.
+Trop d’utilisateurs cherchent à consulter cette page.
+Veuillez attendre un moment avant de retenter l’accès à cette page.
-$1",
-'pool-timeout' => "Délai dépassé durant l'attente du verrou",
+$1',
+'pool-timeout' => 'Délai dépassé durant l’attente du verrou',
'pool-queuefull' => 'La file de travail est pleine',
'pool-errorunknown' => 'Erreur inconnue',
'privacypage' => 'Project:Confidentialité',
'badaccess' => 'Erreur de permission',
-'badaccess-group0' => "Vous n'avez pas les droits suffisants pour réaliser l'action demandée.",
-'badaccess-groups' => "L'action que vous essayez de réaliser n'est accessible qu'aux utilisateurs {{PLURAL:$2|du groupe|des groupes}} : $1.",
+'badaccess-group0' => 'Vous n’avez pas les droits suffisants pour réaliser l’action demandée.',
+'badaccess-groups' => 'L’action que vous essayez de réaliser n’est accessible qu’aux utilisateurs {{PLURAL:$2|du groupe|des groupes}} : $1.',
'versionrequired' => 'Version $1 de MediaWiki nécessaire',
'versionrequiredtext' => 'La version $1 de MediaWiki est nécessaire pour utiliser cette page. Consultez [[Special:Version|la page des versions]]',
# Main script and global functions
'nosuchaction' => 'Action inconnue',
-'nosuchactiontext' => "L'action spécifiée dans l'URL est invalide.
-Vous avez peut-être mal entré l'URL ou suivi un lien erroné.
-Il peut également s'agir d'un bogue dans le logiciel utilisé par {{SITENAME}}.",
+'nosuchactiontext' => 'L’action spécifiée dans l’URL est invalide.
+Vous avez peut-être mal entré l’URL ou suivi un lien erroné.
+Il peut également s’agir d’un bogue dans le logiciel utilisé par {{SITENAME}}.',
'nosuchspecialpage' => 'Page spéciale inexistante',
-'nospecialpagetext' => "<strong>Vous avez demandé une page spéciale qui n'existe pas.</strong>
+'nospecialpagetext' => '<strong>Vous avez demandé une page spéciale qui n’existe pas.</strong>
-Une liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].",
+Une liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].',
# General errors
'error' => 'Erreur',
'databaseerror' => 'Erreur de la base de données',
-'dberrortext' => "Une erreur de syntaxe de la requête dans la base de données est survenue.
+'dberrortext' => 'Une erreur de syntaxe de la requête dans la base de données est survenue.
Ceci peut indiquer un bogue dans le logiciel.
La dernière requête traitée par la base de données était :
<blockquote><tt>$1</tt></blockquote>
depuis la fonction « <tt>$2</tt> ».
-La base de données a renvoyé l'erreur « <tt>$3 : $4</tt> ».",
-'dberrortextcl' => "Une requête dans la base de données comporte une erreur de syntaxe.
+La base de données a renvoyé l’erreur « <tt>$3 : $4</tt> ».',
+'dberrortextcl' => 'Une requête dans la base de données comporte une erreur de syntaxe.
La dernière requête émise était :
« $1 »
dans la fonction « $2 ».
-La base de données a renvoyé l'erreur « $3 : $4 ».",
+La base de données a renvoyé l’erreur « $3 : $4 ».',
'laggedslavemode' => 'Attention, cette page peut ne pas contenir les toutes dernières modifications effectuées',
'readonly' => 'Base de données verrouillée',
-'enterlockreason' => "Indiquez la raison du verrouillage ainsi qu'une estimation de sa durée",
-'readonlytext' => "Les ajouts et mises à jour de la base de données sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l'ordre.
+'enterlockreason' => 'Indiquez la raison du verrouillage ainsi qu’une estimation de sa durée',
+'readonlytext' => 'Les ajouts et mises à jour de la base de données sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l’ordre.
-L'administrateur ayant verrouillé la base de données a fourni l'explication suivante :<br />$1",
-'missing-article' => "La base de données n'a pas trouvé le texte d'une page qu'elle aurait dû trouver, intitulée « $1 » $2.
+L’administrateur ayant verrouillé la base de données a fourni l’explication suivante :<br />$1',
+'missing-article' => "La base de données n’a pas trouvé le texte d'une page qu’elle aurait dû trouver, intitulée « $1 » $2.
-Généralement, cela survient en suivant un lien vers un diff périmé ou vers l'historique d'une page supprimée.
+Généralement, cela survient en suivant un lien vers un diff périmé ou vers l’historique d'une page supprimée.
-Si ce n'est pas le cas, il peut s'agir d'un bogue dans le programme.
-Veuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oublier de lui indiquer l'URL du lien.",
+Si ce n’est pas le cas, il peut s’agir d'un bogue dans le programme.
+Veuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oublier de lui indiquer l’URL du lien.",
'missingarticle-rev' => '(numéro de version : $1)',
'missingarticle-diff' => '(diff : $1, $2)',
'readonly_lag' => 'La base de données a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.',
'internalerror' => 'Erreur interne',
'internalerror_info' => 'Erreur interne : $1',
-'fileappenderrorread' => "Impossible de lire « $1 » lors de l'insertion",
-'fileappenderror' => "Impossible d'ajouter « $1 » à « $2 ».",
+'fileappenderrorread' => 'Impossible de lire « $1 » lors de l’insertion',
+'fileappenderror' => 'Impossible d’ajouter « $1 » à « $2 ».',
'filecopyerror' => 'Impossible de copier le fichier « $1 » vers « $2 ».',
'filerenameerror' => 'Impossible de renommer le fichier « $1 » en « $2 ».',
'filedeleteerror' => 'Impossible de supprimer le fichier « $1 ».',
'directorycreateerror' => 'Impossible de créer le dossier « $1 ».',
'filenotfound' => 'Impossible de trouver le fichier « $1 ».',
-'fileexistserror' => "Impossible d'écrire dans le dossier « $1 » : le fichier existe",
+'fileexistserror' => 'Impossible d’écrire dans le dossier « $1 » : le fichier existe',
'unexpected' => 'Valeur inattendue : « $1 » = « $2 ».',
'formerror' => 'Erreur : Impossible de soumettre le formulaire',
'badarticleerror' => 'Cette action ne peut pas être effectuée sur cette page.',
-'cannotdelete' => "Impossible de supprimer la page ou le fichier « $1 ».
-La suppression a peut-être déjà été effectuée par quelqu'un d'autre.",
+'cannotdelete' => 'Impossible de supprimer la page ou le fichier « $1 ».
+La suppression a peut-être déjà été effectuée par quelqu’un d’autre.',
'cannotdelete-title' => 'Impossible de supprimer la page « $1 »',
'badtitle' => 'Mauvais titre',
-'badtitletext' => "Le titre de la page demandée est invalide, vide, ou il s'agit d'un titre inter-langue ou inter-projet mal lié. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.",
+'badtitletext' => 'Le titre de la page demandée est invalide, vide, ou il s’agit d’un titre inter-langue ou inter-projet mal lié. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.',
'perfcached' => 'Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|un résultat|$1 résultats}} est disponible dans le cache.',
'perfcachedts' => 'Les données suivantes sont en cache et ont été mises à jour pour la dernière fois à $1. Un maximum de {{PLURAL:$4|un résultat|$4 résultats}} est disponible dans le cache.',
'querypage-no-updates' => 'Les mises à jour pour cette page sont actuellement désactivées. Les données ci-dessous ne sont pas mises à jour.',
'viewsource' => 'Voir le texte source',
'viewsource-title' => 'Voir la source de $1',
'actionthrottled' => 'Action limitée',
-'actionthrottledtext' => "Pour lutter contre les pourriels, l'utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court. Il s'avère que vous avez dépassé cette limite.
-Essayez à nouveau dans quelques minutes.",
+'actionthrottledtext' => 'Pour lutter contre les pourriels, l’utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court. Il s’avère que vous avez dépassé cette limite.
+Essayez à nouveau dans quelques minutes.',
'protectedpagetext' => 'Cette page a été protégée pour empêcher sa modification.',
'viewsourcetext' => 'Vous pouvez voir et copier le contenu de la page :',
'viewyourtext' => "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
-'protectedinterface' => "Cette page fournit du texte d'interface pour le logiciel et est protégée pour éviter les abus.",
-'editinginterface' => "'''Attention :''' vous êtes en train de modifier une page utilisée pour créer le texte de l'interface du logiciel. Les changements se répercuteront, selon le contexte, sur toutes ou certaines pages visibles par les autres utilisateurs. Pour les traductions, nous vous invitons à utiliser le projet MediaWiki d'internationalisation des messages [//translatewiki.net/wiki/Main_Page?setlang=fr translatewiki.net].",
+'protectedinterface' => 'Cette page fournit du texte d’interface pour le logiciel et est protégée pour éviter les abus.',
+'editinginterface' => "'''Attention :''' vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements se répercuteront, selon le contexte, sur toutes ou certaines pages visibles par les autres utilisateurs. Pour les traductions, nous vous invitons à utiliser le projet MediaWiki d’internationalisation des messages [//translatewiki.net/wiki/Main_Page?setlang=fr translatewiki.net].",
'sqlhidden' => '(Requête SQL cachée)',
-'cascadeprotected' => "Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée :
-$2",
-'namespaceprotected' => "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
-'customcssprotected' => "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
-'customjsprotected' => "Vous n'avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d'un autre utilisateur.",
+'cascadeprotected' => 'Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :
+$2',
+'namespaceprotected' => "Vous n’avez pas la permission de modifier les pages de l’espace de noms « '''$1''' ».",
+'customcssprotected' => 'Vous n’avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d’un autre utilisateur.',
+'customjsprotected' => 'Vous n’avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d’un autre utilisateur.',
'ns-specialprotected' => 'Les pages dans l’espace de noms « {{ns:special}} » ne peuvent pas être modifiées.',
'titleprotected' => "Ce titre a été protégé à la création par [[User:$1|$1]].
Le motif avancé est « ''$2'' ».",
-'filereadonlyerror' => 'Impossible de modifier le fichier "$1" parce que le répertoire de fichiers "$2" est en lecture seule.
+'filereadonlyerror' => 'Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.
-Le motif fourni est "\'\'$3\'\'".',
+L’administrateur qui l’a verrouillé a fourni ce motif: « $3 ».',
# Virus scanner
'virus-badscanner' => "Mauvaise configuration : scanneur de virus inconnu : ''$1''",
Vous pouvez continuer à utiliser {{SITENAME}} de façon anonyme, [[Special:UserLogin|vous reconnecter]] sous le même nom ou un autre.
Notez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté(e), jusqu’à ce que vous effaciez le cache de votre navigateur.",
-'welcomecreation' => "== Bienvenue, $1 ! ==
+'welcomecreation' => '== Bienvenue, $1 ! ==
Votre compte a été créé.
-N'oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{SITENAME}}]].",
-'yourname' => "Nom d'utilisateur :",
+N’oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{SITENAME}}]].',
+'yourname' => 'Nom d’utilisateur :',
'yourpassword' => 'Mot de passe :',
'yourpasswordagain' => 'Confirmez le mot de passe :',
'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})',
'securelogin-stick-https' => 'Rester connecté en HTTPS après la connexion',
'yourdomainname' => 'Votre domaine',
-'externaldberror' => "Une erreur s'est produite avec la base de données d'authentification externe, ou bien vous n'êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.",
+'externaldberror' => 'Une erreur s’est produite avec la base de données d’authentification externe, ou bien vous n’êtes pas autorisé{{GENDER:||e|(e)}} à mettre à jour votre compte externe.',
'login' => 'Connexion',
'nav-login-createaccount' => 'Créer un compte ou se connecter',
'loginprompt' => "Vous devez activer les témoins (''cookies'') pour vous connecter à {{SITENAME}}.",
'logout' => 'Se déconnecter',
'userlogout' => 'Déconnexion',
'notloggedin' => 'Non connecté',
-'nologin' => "Vous n'êtes pas encore inscrit ? $1.",
+'nologin' => 'Vous n’êtes pas encore inscrit ? $1.',
'nologinlink' => 'Créer un compte',
'createaccount' => 'Créer un compte',
'gotaccount' => "Vous avez déjà un compte ? '''$1'''.",
'createaccountmail' => 'par courriel',
'createaccountreason' => 'Motif :',
'badretype' => 'Les mots de passe que vous avez saisis ne correspondent pas.',
-'userexists' => "Nom d'utilisateur entré déjà utilisé.
-Veuillez choisir un nom différent.",
+'userexists' => 'Nom d’utilisateur entré déjà utilisé.
+Veuillez choisir un nom différent.',
'loginerror' => 'Erreur de connexion',
'createaccounterror' => 'Impossible de créer le compte : $1',
-'nocookiesnew' => "Le compte utilisateur a été créé, mais vous n'êtes pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} utilise des témoins (''cookies'') pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
+'nocookiesnew' => "Le compte utilisateur a été créé, mais vous n’êtes pas connecté{{GENDER:||e|(e)}}. {{SITENAME}} utilise des témoins (''cookies'') pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter avec le même nom et le même mot de passe.",
'nocookieslogin' => "{{SITENAME}} utilise des témoins (''cookies'') pour la connexion mais vous les avez désactivés. Veuillez les activer et vous reconnecter.",
-'nocookiesfornew' => "Le compte utilisateur n'a pas été créé, car nous n'avons pas pu identifier son origine.
-Vérifiez que vous avez activé les cookies, rechargez la page et rééssayez.",
-'noname' => "Vous n'avez pas saisi un nom d'utilisateur valide.",
+'nocookiesfornew' => 'Le compte utilisateur n’a pas été créé, car nous n’avons pas pu identifier son origine.
+Vérifiez que vous avez activé les cookies, rechargez la page et réessayez.',
+'noname' => 'Vous n’avez pas saisi un nom d’utilisateur valide.',
'loginsuccesstitle' => 'Connexion réussie',
'loginsuccess' => 'Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».',
-'nosuchuser' => "L'utilisateur « $1 » n'existe pas.
-Les noms d'utilisateurs sont sensibles à la casse.
-Vérifiez l'orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
-'nosuchusershort' => "Il n'y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l'orthographe.",
-'nouserspecified' => "Vous devez saisir un nom d'utilisateur.",
+'nosuchuser' => 'L’utilisateur « $1 » n’existe pas.
+Les noms d’utilisateurs sont sensibles à la casse.
+Vérifiez l’orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].',
+'nosuchusershort' => 'Il n’y a pas de contributeur avec le nom « $1 ». Veuillez vérifier l’orthographe.',
+'nouserspecified' => 'Vous devez saisir un nom d’utilisateur.',
'login-userblocked' => 'Cet utilisateur est bloqué. Connexion non autorisée.',
'wrongpassword' => 'Le mot de passe est incorrect. Veuillez essayer à nouveau.',
-'wrongpasswordempty' => "Vous n'avez pas entré de mot de passe. Veuillez essayer à nouveau.",
+'wrongpasswordempty' => 'Vous n’avez pas entré de mot de passe. Veuillez essayer à nouveau.',
'passwordtooshort' => 'Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.',
-'password-name-match' => "Votre mot de passe doit être différent de votre nom d'utilisateur.",
-'password-login-forbidden' => "L'utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
+'password-name-match' => 'Votre mot de passe doit être différent de votre nom d’utilisateur.',
+'password-login-forbidden' => "L’utilisation de ce nom d'utilisateur et de ce mot de passe a été interdite.",
'mailmypassword' => 'Recevoir un nouveau mot de passe par courriel',
'passwordremindertitle' => 'Nouveau mot de passe temporaire pour {{SITENAME}}',
-'passwordremindertext' => "Quelqu'un (probablement vous, ayant l'adresse IP $1) a demandé un nouveau mot de
+'passwordremindertext' => 'Quelqu’un (probablement vous, ayant l’adresse IP $1) a demandé un nouveau mot de
passe pour {{SITENAME}} ($4 ). Un mot de passe temporaire a été créé pour
-l'utilisateur « $2 » et est « $3 ». Si cela était votre intention, vous devrez
+l’utilisateur « $2 » et est « $3 ». Si cela était votre intention, vous devrez
vous connecter et choisir un nouveau mot de passe.
Votre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.
-Si vous n'êtes pas l'auteur de cette demande, ou si vous vous souvenez à présent
+Si vous n’êtes pas l’auteur de cette demande, ou si vous vous souvenez à présent
de votre ancien mot de passe et que vous ne souhaitez plus en changer, vous
-pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
-'noemail' => "Aucune adresse de courriel n'a été enregistrée pour l'utilisateur « $1 ».",
+pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.',
+'noemail' => "Aucune adresse de courriel n’a été enregistrée pour l'utilisateur « $1 ».",
'noemailcreate' => 'Vous devez fournir une adresse de courriel valide',
-'passwordsent' => "Un nouveau mot de passe a été envoyé à l'adresse de courriel de l'utilisateur « $1 ». Veuillez vous reconnecter après l'avoir reçu.",
+'passwordsent' => 'Un nouveau mot de passe a été envoyé à l’adresse de courriel de l’utilisateur « $1 ». Veuillez vous reconnecter après l’avoir reçu.',
'blocked-mailpassword' => 'Votre adresse IP est bloquée en écriture, la fonction de rappel du mot de passe est donc désactivée pour éviter les abus.',
-'eauthentsent' => "Un courriel de confirmation a été envoyé à l'adresse indiquée.
-Avant qu'un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.",
-'throttled-mailpassword' => "Un courriel de rappel de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d'éviter les abus, un seul courriel de rappel sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.",
+'eauthentsent' => 'Un courriel de confirmation a été envoyé à l’adresse indiquée.
+Avant qu’un autre courriel ne soit envoyé à ce compte, vous devrez suivre les instructions du courriel et confirmer que le compte est bien le vôtre.',
+'throttled-mailpassword' => 'Un courriel de rappel de votre mot de passe a déjà été envoyé durant {{PLURAL:$1|la dernière heure|les $1 dernières heures}}. Afin d’éviter les abus, un seul courriel de rappel sera envoyé par {{PLURAL:$1|heure|intervalle de $1 heures}}.',
'mailerror' => 'Erreur lors de l’envoi du courriel : $1',
'acct_creation_throttle_hit' => 'Quelqu’un utilisant votre adresse IP a créé {{PLURAL:$1|un compte|$1 comptes}} au cours des dernières 24 heures, ce qui constitue la limite autorisée dans cet intervalle de temps.
Par conséquent, la création de compte a été temporairement désactivée pour cette adresse IP.',
'userinvalidcssjstitle' => "'''Attention :''' il n’existe pas d’habillage « $1 ». Rappelez-vous que les pages personnelles avec extensions .css et .js utilisent des titres en minuscules, par exemple {{ns:user}}:Foo/vector.css et non {{ns:user}}:Foo/Vector.css.",
'updated' => '(Mis à jour)',
'note' => "'''Note :'''",
-'previewnote' => "'''Rappelez-vous que ce n'est qu'une prévisualisation.'''
-Vos modifications n'ont pas encore été enregistrées! [[#editform|→ Continuer la modification]]",
+'previewnote' => "'''Rappelez-vous que ce n’est qu’une prévisualisation.'''
+Vos modifications n’ont pas encore été enregistrées ! [[#editform|→ Continuer la modification]]",
'previewconflict' => 'Cette prévisualisation montre le texte de la boîte supérieure de modification tel qu’il apparaîtra si vous choisissez de le publier.',
'session_fail_preview' => "'''Nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.'''
Veuillez réessayer.
'token_suffix_mismatch' => "'''Votre modification n’a pas été acceptée car votre navigateur a mal codé les caractères de ponctuation dans l’identifiant de modification.'''
Ce rejet est nécessaire pour empêcher la corruption du texte de la page.
Ce problème se produit parfois lorsque vous utilisez un serveur mandataire anonyme problématique basé sur le web.",
-'edit_form_incomplete' => "'''Certaines parties du formulaire de modification n'ont pas atteint le serveur, vérifiez que vos modifications sont intactes et essayez à nouveau.'''",
+'edit_form_incomplete' => "'''Certaines parties du formulaire de modification n’ont pas atteint le serveur, vérifiez que vos modifications sont intactes et essayez à nouveau.'''",
'editing' => 'Modification de $1',
'creating' => 'Création de $1',
'editingsection' => 'Modification de $1 (section)',
'edit-no-change' => 'Votre modification a été ignorée car aucun changement n’a été fait au texte.',
'edit-already-exists' => 'La nouvelle page n’a pas pu être créée.
Elle existe déjà.',
+'defaultmessagetext' => 'Message par défaut',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Attention : cette page contient de trop nombreux appels à des fonctions coûteuses de l’analyseur syntaxique.
Essayez de [[Special:Search|rechercher sur le wiki]] pour trouver des pages en rapport.',
# Revision deletion
-'rev-deleted-comment' => "(résumé d'édition enlevé)",
+'rev-deleted-comment' => '(résumé d’édition enlevé)',
'rev-deleted-user' => '(nom d’utilisateur supprimé)',
'rev-deleted-event' => '(entrée supprimée)',
'rev-deleted-user-contribs' => '[nom d’utilisateur ou adresse IP supprimée - modification cachée sur les contributions]',
# Suppression log
'suppressionlog' => 'Journal des suppressions',
'suppressionlogtext' => 'Voici la liste des suppressions et des blocages qui portent sur du contenu caché aux administrateurs.
-Voir la [[Special:BlockList|liste des adresses IP et utilisateurs bloqués]] pour la liste des bannissements et des blocages actuellement opérationnels.',
+Voir la [[Special:BlockList|liste des blocages]] pour la liste des bannissements et des blocages actuellement opérationnels.',
# History merging
'mergehistory' => 'Fusionner les historiques des pages',
'showhideselectedversions' => 'Afficher/masquer les versions sélectionnées',
'editundo' => 'défaire',
'diff-multi' => '({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par {{PLURAL:$2|un utilisateur|$2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})',
-'diff-multi-manyusers' => "({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par plus {{PLURAL:$2|d'un utilisateur|de $2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})",
+'diff-multi-manyusers' => '({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par plus {{PLURAL:$2|d’un utilisateur|de $2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})',
# Search results
'searchresults' => 'Résultats de la recherche',
# Upload
'upload' => 'Importer un fichier',
'uploadbtn' => 'Importer le fichier',
-'reuploaddesc' => "Annuler et retourner au formulaire d'import",
+'reuploaddesc' => 'Annuler et retourner au formulaire d’import',
'upload-tryagain' => 'Envoyer la description du fichier modifiée',
'uploadnologin' => 'Non connecté(e)',
'uploadnologintext' => 'Vous devez être [[Special:UserLogin|connecté(e)]] pour importer des fichiers sur le serveur.',
-'upload_directory_missing' => "Le répertoire d'import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.",
-'upload_directory_read_only' => "Le répertoire d'import de fichier ($1) n’est pas accessible en écriture depuis le serveur web.",
-'uploaderror' => "Erreur lors de l'import",
+'upload_directory_missing' => 'Le répertoire d’import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.',
+'upload_directory_read_only' => 'Le répertoire d’import de fichier ($1) n’est pas accessible en écriture depuis le serveur web.',
+'uploaderror' => 'Erreur lors de l’import',
'upload-recreate-warning' => "'''Attention : Un fichier portant ce nom a été supprimé ou déplacé.'''
Le journal des suppressions et celui des déplacements de cette page sont affichés ici pour informations :",
'uploadtext' => "Utilisez ce formulaire pour importer des fichiers sur le serveur.
-Pour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. L'import est aussi enregistrés dans le [[Special:Log/upload|journal d'import des fichiers]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].
+Pour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. L’import est aussi enregistrés dans le [[Special:Log/upload|journal d'import des fichiers]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].
Pour inclure un fichier dans une page, utilisez un lien de la forme :
* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code>''', pour afficher le fichier en pleine résolution (dans le cas d’une image) ;
'upload-permitted' => 'Formats de fichiers autorisés : $1.',
'upload-preferred' => 'Formats de fichiers préférés : $1.',
'upload-prohibited' => 'Formats de fichiers interdits : $1.',
-'uploadlog' => "Journal d'import de fichiers",
+'uploadlog' => 'Journal d’import de fichiers',
'uploadlogpage' => "Journal d'import de fichiers",
'uploadlogpagetext' => 'Voici la liste des derniers fichiers importés sur le serveur.
Voyez la [[Special:NewFiles|galerie des nouvelles images]] pour une présentation plus visuelle.',
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Impossible de se connecter à la base de données du journal pour le terminal de stockage "$1".',
'filejournal-fail-dbquery' => 'Impossible de mettre à jour la base de données du journal pour le terminal de stockage "$1".',
'shared-repo-from' => 'de : $1',
'shared-repo' => 'un dépôt partagé',
'shared-repo-name-wikimediacommons' => 'Wikimédia Commons',
+'filepage.css' => '/* Les styles CSS placés ici sont inclus dans la page de description du fichier, également incluse sur les clients wikis étrangers */',
# File reversion
'filerevert' => 'Rétablir $1',
'allpages-bad-ns' => '{{SITENAME}} n’a pas d’espace de noms « $1 ».',
'allpages-hide-redirects' => 'Masquer les redirections',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => "Vous visualisez une version de cette page mise en cache, qui peut être dater d'au plus $1.",
+'cachedspecial-viewing-cached-ts' => 'Vous visualisez une version de cette page mise en cache, qui pourrait ne pas être complètement à jour.',
+'cachedspecial-refresh-now' => 'Voir le plus récent.',
+
# Special:Categories
'categories' => 'Liste des catégories',
'categoriespagetext' => '{{PLURAL:$1|La catégorie suivante est utilisée|Les catégories suivantes sont utilisées}} par des pages ou fichiers.
'blanknamespace' => '(Principal)',
# Contributions
-'contributions' => "Contributions de l'utilisateur",
-'contributions-title' => "Liste des contributions de l'utilisateur $1",
+'contributions' => 'Contributions de l’utilisateur',
+'contributions-title' => 'Liste des contributions de l’utilisateur $1',
'mycontris' => 'Contributions',
'contribsub2' => 'Pour $1 ($2)',
'nocontribs' => 'Aucune modification correspondant à ces critères n’a été trouvée.',
'badipaddress' => 'Adresse IP incorrecte',
'blockipsuccesssub' => 'Blocage réussi',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />
-Consultez la [[Special:BlockList|liste des adresses IP et comptes bloqués]] pour revoir les blocages.',
+Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.',
'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain de vouloir faire cela ?',
'ipb-confirmhideuser' => 'Vous êtes sur le point de bloquer un utilisateur avec « cacher l’utilisateur » activé. Cela supprime le nom de l’utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?',
'ipb-edit-dropdown' => 'Modifier les motifs de blocage par défaut',
'reblock-logentry' => 'a modifié les paramètres du blocage de [[$1]] avec une expiration au $2 $3',
'blocklogtext' => 'Ceci est le journal des actions de blocages et déblocages d’utilisateurs.
Les adresses IP automatiquement bloquées ne sont pas listées.
-Consultez la [[Special:BlockList|liste des IP bloquées]] pour voir les bannissements et blocages effectivement en cours.',
+Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.',
'unblocklogentry' => 'a débloqué $1',
'block-log-flags-anononly' => 'utilisateurs anonymes seulement',
'block-log-flags-nocreate' => 'création de compte interdite',
'chick.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Chick. */',
'simple.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Simple. */',
'modern.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Modern. */',
+'vector.css' => '/* Le CSS placé ici affectera les utilisateurs de l’habillage Vector. */',
'print.css' => '/* Le CSS placé ici affectera les impressions */',
'handheld.css' => '/* Le CSS placé ici affectera les appareils mobiles en fonction de l\'habillage configuré $wgHandheldStyle */',
+'noscript.css' => '/* Le CSS placé ici affectera les utilisateurs ayant désactivé Javascript. */',
+'group-autoconfirmed.css' => '/* Le CSS placé ici affectera les utilisateurs auto-confirmés seulement. */',
+'group-bot.css' => '/* Le CSS placé ici affectera les robots seulement. */',
'group-sysop.css' => '/* Le CSS inclus ici n’affectera que les administrateurs */',
+'group-bureaucrat.css' => '/* Le CSS inclus ici n’affectera que les bureaucrates */',
# Scripts
'common.js' => '/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */',
'version-software' => 'Logiciels installés',
'version-software-product' => 'Produit',
'version-software-version' => 'Version',
+'version-entrypoints' => "URLs de point d'entrée",
+'version-entrypoints-header-entrypoint' => "Point d'entrée",
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Chemin d\'article]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Chemin de script]',
# Special:FilePath
'filepath' => 'Chemin d’accès du fichier',
'specialpages-note' => '----
* Pages spéciales normales.
* <span class="mw-specialpagerestricted">Pages spéciales restreintes.</span>
-* <span class="mw-specialpagecached">Pages spéciales seulement en cache (pourraient être obsolètes).</span>',
+* <span class="mw-specialpagecached">Pages spéciales seulement en cache (pourraient être désuètes).</span>',
'specialpages-group-maintenance' => 'Rapports de maintenance',
'specialpages-group-other' => 'Autres pages spéciales',
'specialpages-group-login' => 'S’identifier / s’inscrire',
'api-error-uploaddisabled' => 'Le versement est désactivé sur ce wiki.',
'api-error-verification-error' => 'Ce fichier peut être corrompu, ou son extension est incorrecte.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|seconde|secondes}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minute|minutes}}',
+'duration-hours' => '$1 {{PLURAL:$1|heure|heures}}',
+'duration-days' => '$1 {{PLURAL:$1|jour|jours}}',
+'duration-weeks' => '$1 {{PLURAL:$1|semaine|semaines}}',
+'duration-years' => '$1 {{PLURAL:$1|année|années}}',
+'duration-decades' => '$1 {{PLURAL:$1|décennie|décennies}}',
+'duration-centuries' => '$1 {{PLURAL:$1|siècle|siècles}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millénaire|millénaires}}',
+
);
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Non se pode conectar coa base de datos do rexistro do sistema de almacenamento "$1".',
'filejournal-fail-dbquery' => 'Non se pode actualizar a base de datos do rexistro do sistema de almacenamento "$1".',
'allpages-bad-ns' => '{{SITENAME}} carece do espazo de nomes "$1".',
'allpages-hide-redirects' => 'Agochar as redireccións',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Está a ver unha versión da páxina gardada na caché, que pode ser de hai $1.',
+'cachedspecial-viewing-cached-ts' => 'Está a ver unha versión da páxina gardada na caché, que pode non estar completamente actualizada.',
+'cachedspecial-refresh-now' => 'Ir á versión máis recente.',
+
# Special:Categories
'categories' => 'Categorías',
'categoriespagetext' => '{{PLURAL:$1|A seguinte categoría contén|As seguintes categorías conteñen}} páxinas ou contidos multimedia.
'api-error-uploaddisabled' => 'As cargas están desactivadas neste wiki.',
'api-error-verification-error' => 'Este ficheiro podería estar corrupto ou ter unha extensión incorrecta.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|segundo|segundos}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuto|minutos}}',
+'duration-hours' => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days' => '$1 {{PLURAL:$1|día|días}}',
+'duration-weeks' => '$1 {{PLURAL:$1|semana|semanas}}',
+'duration-years' => '$1 {{PLURAL:$1|ano|anos}}',
+'duration-decades' => '$1 {{PLURAL:$1|década|décadas}}',
+'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milenio|milenios}}',
+
);
'ns-specialprotected' => 'לא ניתן לערוך דפים מיוחדים.',
'titleprotected' => 'לא ניתן ליצור דף זה, כיוון שהמשתמש [[User:$1|$1]] הגן עליו מפני יצירה.
הסיבה שניתנה לכך היא "$2".',
-'filereadonlyerror' => '×\9c×\90 × ×\99ת×\9f ×\9c×©× ×\95ת ×\90ת ×\94ק×\95×\91×¥ "$1" ×\9b×\99×\95×\95×\9f ש×\9e×\90×\92ר ×\94ק×\91צ×\99×\9d "$2" ×\94×\95×\90 ×\91×\9eצ×\91 קר×\99×\90×\94 ×\91×\9c×\91×\93.
+'filereadonlyerror' => 'לא ניתן לשנות את הקובץ "$1" כיוון שמאגר הקבצים "$2" במצב קריאה בלבד.
-×\94ס×\99×\91×\94 ×©× ×\99×ª× ×\94 ×\9c×\9b×\9a ×\94×\99×\90 "\'\'\'$3\'\'\'".',
+×\9e× ×\94×\9c ×\94×\9eער×\9bת ×©× ×¢×\9c ×\90ת ×\94×\9e×\90×\92ר ס×\99פק ×\90ת ×\94×\94ס×\91ר ×\94×\91×\90: "\'\'\'$3\'\'\'".',
# Virus scanner
'virus-badscanner' => "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
'edit-no-change' => 'המערכת התעלמה מעריכתכם, כיוון שלא נעשה שינוי בטקסט.',
'edit-already-exists' => 'לא ניתן ליצור דף חדש.
הוא כבר קיים.',
+'defaultmessagetext' => 'טקסט ההודעה המקורי',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''אזהרה:''' דף זה כולל יותר מדי קריאות לפונקציות מפענח שגוזלות משאבים.
# Suppression log
'suppressionlog' => 'יומן הסתרות',
'suppressionlogtext' => 'להלן רשימת המחיקות והחסימות הכוללות תוכן המוסתר ממפעילי המערכת.
-ר×\90×\95 ×\90ת [[Special:BlockList|רש×\99×\9eת ×\9bת×\95×\91×\95ת ×\94Ö¾IP ×\94×\97ס×\95×\9e×\95ת]] לרשימת החסימות הפעילות כעת.',
+ר×\90×\95 ×\90ת [[Special:BlockList|רש×\99×\9eת ×\94×\97ס×\95×\9e×\99×\9d]] לרשימת החסימות הפעילות כעת.',
# History merging
'mergehistory' => 'מיזוג גרסאות של דפים',
'backend-fail-contenttype' => 'לא ניתן היה לקבוע את סוג התוכן של הקובץ לאחסון ב־"$1".',
'backend-fail-batchsize' => 'למאגר אחסון הקבצים הפנימי הועבר אוסף של {{PLURAL:$1|פעולת קובץ אחת|$1 פעולות קובץ}}; המגבלה היא {{PLURAL:$2|פעולה אחת|$2 פעולות}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'לא ניתן היה להתחבר לבסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי "$1".',
'filejournal-fail-dbquery' => 'לא ניתן היה לעדכן את בסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי "$1".',
'allpages-bad-ns' => 'אין מרחב שם בשם "$1".',
'allpages-hide-redirects' => 'הסתרת הפניות',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'זוהי גרסה שמורה בזיכרון המטמון של דף זה, שעשויה להיות בת $1.',
+'cachedspecial-viewing-cached-ts' => 'זוהי גרסה שמורה בזיכרון המטמון של דף זה, שעשויה שלא להיות מעודכנת.',
+'cachedspecial-refresh-now' => 'צפייה באחרון.',
+
# Special:Categories
'categories' => 'קטגוריות',
'categoriespagetext' => '{{PLURAL:$1|הקטגוריה הבאה כוללת|הקטגוריות הבאות כוללות}} דפים או קובצי מדיה.
'blockipsuccesssub' => 'החסימה הושלמה בהצלחה',
'blockipsuccesstext' => '{{GENDER:$1|המשתמש|המשתמשת}} [[Special:Contributions/$1|$1]] {{GENDER:$1|נחסם|נחסמה}}.
-ר×\90×\95 ×\90ת [[Special:BlockList|רש×\99×\9eת ×\94×\9bת×\95×\91×\95ת ×\94×\97ס×\95×\9e×\95ת]] כדי לצפות בחסימות.',
+ר×\90×\95 ×\90ת [[Special:BlockList|רש×\99×\9eת ×\94×\97ס×\95×\9e×\99×\9d]] כדי לצפות בחסימות.',
'ipb-blockingself' => 'אתם עומדים לחסום את עצמכם! האם אתם באמת רוצים לעשות את זה?',
'ipb-confirmhideuser' => 'אתם עומדים לחסום משתמש עם האפשרות "הסתרת משתמש". פעולה זו תסתיר את שם המשתמש בכל הרשימות ופעולות היומן. האם אתם בטוחים שברצונכם לעשות זאת?',
'ipb-edit-dropdown' => 'עריכת סיבות החסימה',
'reblock-logentry' => 'שינה את הגדרות החסימה של [[$1]] עם זמן פקיעה של $2 $3',
'blocklogtext' => 'זהו יומן פעולות החסימה והשחרור של משתמשים.
כתובות IP שנחסמו אוטומטית אינן מופיעות.
-ר×\90×\95 ×\92×\9d ×\90ת [[Special:BlockList|רש×\99×\9eת ×\94×\9bת×\95×\91×\95ת ×\94×\97ס×\95×\9e×\95ת]] לרשימה של החרמות וחסימות פעילות כעת.',
+ר×\90×\95 ×\92×\9d ×\90ת [[Special:BlockList|רש×\99×\9eת ×\94×\97ס×\95×\9e×\99×\9d]] לרשימה של החרמות וחסימות פעילות כעת.',
'unblocklogentry' => 'שחרר את $1',
'block-log-flags-anononly' => 'משתמשים אנונימיים בלבד',
'block-log-flags-nocreate' => 'יצירת חשבונות נחסמה',
'api-error-uploaddisabled' => 'ההעלאה מבוטלת באתר הוויקי הזה.',
'api-error-verification-error' => 'קובץ זה עשוי להיות פגום או בעל סיומת שגויה.',
+# Durations
+'duration-seconds' => '{{PLURAL:$1|שנייה|$1 שניות}}',
+'duration-minutes' => '{{PLURAL:$1|דקה|$1 דקות}}',
+'duration-hours' => '{{PLURAL:$1|שעה|$1 שעות|שעתיים}}',
+'duration-days' => '{{PLURAL:$1|יום|$1 ימים|יומיים}}',
+'duration-weeks' => '{{PLURAL:$1|שבוע|$1 שבועות|שבועיים}}',
+'duration-years' => '{{PLURAL:$1|שנה|$1 שנים|שנתיים}}',
+'duration-decades' => '{{PLURAL:$1|עשור|$1 עשורים}}',
+'duration-centuries' => '{{PLURAL:$1|מאה שנה|$1 מאות שנים|מאתיים שנה}}',
+'duration-millennia' => '{{PLURAL:$1|אלף שנה|$1 אלפי שנים|אלפיים שנה}}',
+
);
'backend-fail-contenttype' => '"$1" पर संजोने के लिये फ़ाइल का प्रकार नहीं निश्चित किया जा सका।',
'backend-fail-batchsize' => 'भंडारण बैकेंड को $1 फ़ाइल {{PLURAL:$1|कार्य}} दिये गए थे; सीमा {{PLURAL:$2|$2 कार्य|$2 कार्यों}} की है।',
+# File journal errors
'filejournal-fail-dbconnect' => 'भंडारण बैकेंड "$1" के जर्नल डाटाबेस से सम्पर्क नहीं हो पाया।',
'filejournal-fail-dbquery' => 'भंडारण बैकेंड "$1" के जर्नल डाटाबेस का अद्यतन नहीं किया जा सका।',
$2
+{{PLURAL:$3|Ii temporary password|Ii sab temporary passwords}} {{PLURAL:$5|ek din|$5 din}} me khalaas hoi.
+Aap ke chaahi ki aap login kar ke ek nawaa password banao. Agar aur koi ii request karis hae, nai to agae aap aapan purana paasword ke yaad kar liya hae, tab ii sandes ke baare me bhuul jaao aur purana password use karte raho.',
+'passwordreset-emailtext-user' => '
+Sadasya $1 {{SITENAME}} pe aap ke account details ke {{SITENAME}} $4 ke khaatir reminder maagis hae
+ NIche ke sadasya {{PLURAL:$3|account hae|accounts hae}} ii e-mail address: $2 se associatied hae
+
{{PLURAL:$3|Ii temporary password|Ii sab temporary passwords}} {{PLURAL:$5|ek din|$5 din}} me khalaas hoi.
Aap ke chaahi ki aap login kar ke ek nawaa password banao. Agar aur koi ii request karis hae, nai to agae aap aapan purana paasword ke yaad kar liya hae, tab ii sandes ke baare me bhuul jaao aur purana password use karte raho.',
'passwordreset-emailelement' => 'Sadasya ke naam: $1
Yaad rakhna ki custom .css aur .js panna owercase title use kare hai, jaise ki {{ns:user}}:Foo/vector.css aur{{ns:user}}:Foo/Vector.css nai.",
'updated' => '(Update kar dewa gais hai)',
'note' => "'''Dhyan rakkho:'''",
-'previewnote' => "'''Ii khali ek jhalak dekhae hai'''
+'previewnote' => "'''Ii khaali ek jhalak dekhae hai'''
Tumar badlao abhi save nai bhais hai!",
'previewconflict' => 'Ii preview uu text dekhae hai jon ki uppar ke text editing area me dekhai agar aap iske save karaa.',
'session_fail_preview' => "''' Maaf karna! Ham log aap ke badlao ke process nai kare paya hai due to a loss of session data.
'php-uploaddisabledtext' => 'File uploads ke PHP me disable kar dewa gais hai. Meharbani kar ke file_uploads setting ke check karo.',
'uploadscripted' => 'Ii file me HTML nai to script code hai jiske web browser erroneously interpret kare sake hai.',
'uploadvirus' => 'Ii file me virus hai! Details: $1',
+'uploadjava' => 'Ii file ek ZIP file hae jisme Java .class ke file hae.
+Java ke uplaod kare ke anumati nai hae, kaaheki isse kuchh security restrictions ke bypass karaa jaae sake hae.',
'upload-source' => 'Suruu waala file',
'sourcefilename' => 'Suruu waala file ke naam:',
'sourceurl' => 'Suruu waala URL',
'backend-fail-invalidpath' => '$1, valid storage path nai hae.',
'backend-fail-delete' => 'File $1 ke nai mitae sakaa hae.',
'backend-fail-alreadyexists' => '$1 naam ke ek file abhi hae.',
+'backend-fail-store' => '$2 pe file $1 ke nai bachae sakaa hae.',
+'backend-fail-copy' => 'File $1 ke $2 me nai copy kare sakaa hae',
+'backend-fail-move' => 'File $1 ke hatae ke $2 nai kare sakaa hae.',
+'backend-fail-opentemp' => 'Temporary file ke nai khole sakaa hae.',
+'backend-fail-writetemp' => 'Temporary file me nai likhe sakaa hae.',
+'backend-fail-closetemp' => 'Temporary file ke nai band kare sakaa hae.',
+'backend-fail-read' => 'File $1 ke nai parrhe sakaa hae.',
+'backend-fail-create' => 'File $1 ke nai banae sakaa hae.',
+'backend-fail-readonly' => 'Storage backend "$1" abhi khaali read-only hae. Iske kaaran hae: "$2"',
+'backend-fail-synced' => 'File "$1" internal storage backends me ek inconsistent state me hae',
+'backend-fail-connect' => 'Storage backend "$1" se connect nai kare sakaa hae.',
+'backend-fail-internal' => 'Storage backend "$1" me ek unknown error hoe gais hae.',
+'backend-fail-contenttype' => 'Ii nai pataa lagae sakaa hae ki "$1" me bachae ke khaatir file kon rakam ke hae.',
# Special:UploadStash
'uploadstash' => 'Gupt file ke upload karo',
'exif-subjectarea' => 'Vishay ke jagha',
'exif-flashenergy' => 'Chamak ke taagat',
'exif-focalplanexresolution' => 'Focal plane X resolution',
+'exif-focalplaneyresolution' => 'Focal plane Y ke resolution',
+'exif-subjectlocation' => 'Subject ke location',
'exif-filesource' => 'File ke source',
'exif-scenetype' => 'Kon rakam ke scene hae',
'exif-gpsaltitude' => 'Uunchai',
'exif-orientation-3' => '180° ghumawa gais hae',
'exif-orientation-4' => 'Khrraa ultawa gais hae',
'exif-orientation-5' => '90° CCW ghumawa aur kharraa ultawa gais hae',
-'exif-orientation-6' => '90° CW ghumawa gais hae',
+'exif-orientation-6' => '90° CCW ghumawa gais hae',
'exif-orientation-7' => '90° CW ghumawa aur kharraa ultawa gais hae',
-'exif-orientation-8' => '90° CCW ghumawa gais hae',
+'exif-orientation-8' => '90° CW ghumawa gais hae',
'exif-meteringmode-0' => 'Nai maluum',
'exif-meteringmode-6' => 'Puura nai',
'sqlite-no-fts' => '$1 bez podrške pretraživanja cijelog teksta',
# New logging system
-'logentry-delete-delete' => '$1 je obrisao stranicu $3',
+'logentry-delete-delete' => '$1 obrisao je stranicu $3',
'logentry-delete-restore' => '$1 je vratio stranicu $3',
'logentry-delete-event' => '$1 je promijenio vidljivost {{PLURAL:$5|zapisa u evidenciji|$5 zapisa u evidenciji}} na $3: $4',
'logentry-delete-revision' => '$1 je promijenio vidljivost {{PLURAL:$5|uređivanja|$5 uređivanja}} na stranici $3: $4',
'backend-fail-contenttype' => 'Wobsahowy typ dataje, kotraž ma so na "$1" składować, njeda so zwěsćić.',
'backend-fail-batchsize' => 'Staplowa dataja, kotraž {{PLURAL:$1|jednu operaciju|$1 operaciji|$1 operacije|$1 operacijow}} wobsahuje, je so na składowanski backend pósłała; limit je $2 {{PLURAL:$2|operaciju|operaciji|operacije|operacijow}} .',
+# File journal errors
'filejournal-fail-dbconnect' => 'Njeje žadyn zwisk ze žurnalowej datowej banku za składowanski backend "$1" móžno.',
'filejournal-fail-dbquery' => 'Žurnalowa datowa banka za składowanski backend "$1" njeda so aktualizować.',
'allpages-bad-ns' => 'Mjenowy rum „$1" w {{grammar:lokatiw|{{SITENAME}}}} njeeksistuje.',
'allpages-hide-redirects' => 'Dalesposrědkowanja schować',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Wobhladuješ sej pufrowanu wersiju tuteje strony, kotraž móže do $1 stara być.',
+'cachedspecial-viewing-cached-ts' => 'Wobhladuješ sej pufrowanu wersiju tuteje strony, kotraž móhła njeaktualna być.',
+'cachedspecial-refresh-now' => 'Aktualnu wersiju sej wobhladać.',
+
# Special:Categories
'categories' => 'Kategorije',
'categoriespagetext' => '{{PLURAL:$1|Slědowaca kategorija wobsahuje|Slědowacej kategoriji wobsahujetej|Slědowace kategorije wobsahuja|Slědowace kategorije wobsahuja}} strony abo medije.
'api-error-uploaddisabled' => 'Nahraća su na tutym wikiju znjemóžnjene.',
'api-error-verification-error' => 'Tuta dataja móhła wobkškodźena być abo wopačny sufiks měć.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekundźe|sekundy|sekundow}}',
+'duration-minutes' => '$1 {{PLURAL:$1|mjeńšina|mjeńšinje|mjeńšiny|mjeńšin}}',
+'duration-hours' => '$1 {{PLURAL:$1|hodźina|hodźinje|hodźiny|hodźin}}',
+'duration-days' => '$1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}}',
+'duration-weeks' => '$1 {{PLURAL: $1|tydźeń|njedźeli|njedźele|njedźel}}',
+'duration-years' => '$1 {{PLURAL: $1|lěto|lěće|lěta|lět}}',
+'duration-decades' => '$1 {{PLURAL:$1|lětdźesatk|lětdźesatkaj|lětdźesatki|lětdźesatkow}}',
+'duration-centuries' => '$1 {{PLURAL:$1|lětstotk|lětstotkaj|lětstotki|lětstotkow}}',
+'duration-millennia' => '$1 {{PLURAL:$1|lěttysac|lěttysacaj|lěttysacy|lěttysacow}}',
+
);
'''ԶԳՈՒՇԱՑՈ՜ՒՄ'''
Այս գործողությունը կարող է ունենալ արմատական ազդեցություն ''ժողովրդական'' էջի համար։
Շարունակելուց առաջ խնդրում ենք համոզվել նրանում, որ դուք հասկանում եք հնարավոր հետևանքները։",
-'movepagetalktext' => "Կցված քննարկման էջը ավտոմատիկ կտեղափոխվի էջի հետ՝ '''բացառությամբ դեպքերի, երբ'''.
-*Գոյություն ունի ոչ-դատարկ քքնարկման էջ նոր անվանման տակ
+'movepagetalktext' => "Կցված քննարկման էջը ավտոմատ կտեղափոխվի էջի հետ՝ '''բացառությամբ այն դեպքերի, երբ'''.
+*Գոյություն ունի ոչ-դատարկ քննարկման էջ նոր անվանման տակ
*Դուք հանել եք նշումը ստորև արկղից
Այսպիսի դեպքերում հարկավոր է տեղափոխել կամ միաձուլել էջերը ձեռքով, եթե դա ցանկանաք։",
# Suppression log
'suppressionlog' => 'Registro de suppressiones',
'suppressionlogtext' => 'Infra es un lista de deletiones e blocadas que involve contento que es celate de administratores.
-Vide le [[Special:BlockList|lista de blocadas IP]] pro le lista de bannimentos e blocadas actualmente in operation.',
+Vide le [[Special:BlockList|lista de blocadas]] pro le lista de bannimentos e blocadas actualmente in operation.',
# History merging
'mergehistory' => 'Fusionar historias del paginas',
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Non poteva connecter al base de datos de jornal pro le systema de immagazinage "$1".',
'filejournal-fail-dbquery' => 'Non poteva actualisar le base de datos de jornal pro le systema de immagazinage "$1".',
'allpages-bad-ns' => '{{SITENAME}} non ha un spatio e nomines "$1".',
'allpages-hide-redirects' => 'Celar redirectiones',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Tu vide un version in cache de iste pagina, que pote haber usque a $1 de etate.',
+'cachedspecial-viewing-cached-ts' => 'Tu vide un version in cache de iste pagina, que pote non esser completemente actual.',
+'cachedspecial-refresh-now' => 'Vider le plus recente.',
+
# Special:Categories
'categories' => 'Categorias',
'categoriespagetext' => 'Le sequente {{PLURAL:$1|categoria|categorias}} contine paginas o multimedia.
'badipaddress' => 'Adresse IP mal formate.',
'blockipsuccesssub' => 'Blocada succedite',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ha essite blocate.<br />
-Vide le [[Special:BlockList|lista de adresses IP blocate]] pro revider le blocadas.',
+Vide le [[Special:BlockList|lista de blocadas]] pro revider le blocadas.',
'ipb-blockingself' => 'Tu sta super le puncto de blocar te mesme! Es tu secur de voler facer isto?',
'ipb-confirmhideuser' => 'Tu es super le puncto de blocar un usator con le option "celar usator" activate. Isto supprimera le nomine del usator in tote le listas e entratas de registro. Es tu secur de voler facer isto?',
'ipb-edit-dropdown' => 'Modificar le motivos pro blocar',
'reblock-logentry' => 'cambiava configurationes de blocada pro [[$1]] con un tempore de expiration de $2 $3',
'blocklogtext' => 'Isto es un registro de blocadas e disblocadas de usatores.
Le adresses IP automaticamente blocate non es includite.
-Vide le [[Special:BlockList|lista de blocadas IP]] pro le lista de bannimentos e blocadas actualmente in operation.',
+Vide le [[Special:BlockList|lista de blocadas]] pro le lista de bannimentos e blocadas actualmente in operation.',
'unblocklogentry' => 'disblocava $1',
'block-log-flags-anononly' => 'usatores anonyme solmente',
'block-log-flags-nocreate' => 'creation de contos disactivate',
'version-software' => 'Software installate',
'version-software-product' => 'Producto',
'version-software-version' => 'Version',
+'version-entrypoints' => 'URL del puncto de entrata',
+'version-entrypoints-header-entrypoint' => 'Puncto de entrata',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Cammino al articulo]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Cammino al script]',
# Special:FilePath
'filepath' => 'Cammino del file',
'api-error-uploaddisabled' => 'Le incargamento es disactivate in iste wiki.',
'api-error-verification-error' => 'Le file pote esser corrumpite o su nomine pote haber un extension errate.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|secunda|secundas}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minutas}}',
+'duration-hours' => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days' => '$1 {{PLURAL:$1|die|dies}} retro',
+'duration-weeks' => '$1 {{PLURAL:$1|septimana|septimanas}}',
+'duration-years' => '$1 {{PLURAL:$1|anno|annos}}',
+'duration-decades' => '$1 {{PLURAL:$1|decennio|decennios}}',
+'duration-centuries' => '$1 {{PLURAL:$1|seculo|seculos}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennio|millennios}}',
+
);
'invalidemailaddress' => 'Alamat surel ini tidak dapat diterima karena formatnya tidak sesuai.
Harap masukkan alamat surel dalam format yang benar atau kosongkan isian tersebut.',
'cannotchangeemail' => 'Alamat surel akun tidak dapat diubah di wiki ini.',
+'emaildisabled' => 'Situs ini tidak dapat mengirim surel.',
'accountcreated' => 'Akun dibuat',
'accountcreatedtext' => 'Akun pengguna untuk $1 telah dibuat.',
'createaccount-title' => 'Pembuatan akun untuk {{SITENAME}}',
Hal ini kadang terjadi jika Anda menggunakan layanan proxy anonim berbasis web yang bermasalah.",
'edit_form_incomplete' => "'''Beberapa bagian dari formulir suntingan tidak mencapai server; periksa ulang apakah suntingan Anda tetap utuh dan coba lagi.'''",
'editing' => 'Menyunting $1',
+'creating' => 'Membuat $1',
'editingsection' => 'Menyunting $1 (bagian)',
'editingcomment' => 'Menyunting $1 (bagian baru)',
'editconflict' => 'Konflik penyuntingan: $1',
* @author FollowTheMedia
* @author Gianfranco
* @author HalphaZ
+ * @author Jasonbleinel
* @author Kaganer
* @author Klutzy
* @author Marco 27
'edit-no-change' => 'La modifica è stata ignorata poiché non sono stati apportati cambiamenti al testo.',
'edit-already-exists' => 'Impossibile creare una nuova pagina.
Esiste già.',
+'defaultmessagetext' => 'Testo predefinito',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.
# Suppression log
'suppressionlog' => 'Log delle soppressioni',
-'suppressionlogtext' => "Di seguito sono elencate le cancellazioni e i blocchi con del contenuto nascosto agli amministratori. Vedi l'[[Special:BlockList|elenco degli IP bloccati]] per l'elenco dei blocchi attivi al momento.",
+'suppressionlogtext' => "Di seguito sono elencate le cancellazioni e i blocchi con del contenuto nascosto agli amministratori.
+Vedi l'[[Special:BlockList|elenco dei blocchi]] per l'elenco dei bandi e dei blocchi attivi al momento.",
# History merging
'mergehistory' => 'Unione cronologie',
'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}}.',
+# File journal errors
+'filejournal-fail-dbconnect' => 'Impossibile connettersi al database journal per l\'archiviazione back-end "$1".',
+'filejournal-fail-dbquery' => 'Impossibile aggiornare il database journal per l\'archiviazione back-end "$1".',
+
# Lock manager
'lockmanager-notlocked' => 'Impossibile sbloccare "$1"; non è bloccato.',
'lockmanager-fail-closelock' => 'Non riuscita chiusura del file di blocco per "$1".',
Consultare la [$2 pagina di descrizione del file] per ulteriori informazioni.',
'sharedupload-desc-here' => 'Questo file proviene da $1 e può essere utilizzato da altri progetti.
Di seguito viene mostrata la descrizione presente nella [$2 pagina di descrizione del file].',
+'sharedupload-desc-edit' => 'Questo file proviene da $1 e può essere utilizzato da altri progetti.
+Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descrizione del file].',
+'sharedupload-desc-create' => 'Questo file proviene da $1 e può essere utilizzato da altri progetti.
+Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descrizione del file].',
'filepage-nofile' => 'Non esiste un file con questo nome.',
'filepage-nofile-link' => 'Non esiste un file con questo nome, ma è possibile [$1 caricarlo].',
'uploadnewversion-linktext' => 'Carica una nuova versione di questo file',
'allpages-bad-ns' => 'Il namespace "$1" non esiste su {{SITENAME}}.',
'allpages-hide-redirects' => 'Nascondi redirect',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Stai vedendo una versione di questa pagina memorizzata nella cache, che può essere vecchia al massimo di $1.',
+'cachedspecial-viewing-cached-ts' => 'Stai vedendo una versione di questa pagina memorizzata nella cache, che potrebbe non essere completamente aggiornata.',
+'cachedspecial-refresh-now' => 'Mostra la più recente.',
+
# Special:Categories
'categories' => 'Categorie',
'categoriespagetext' => '{{PLURAL:$1|La categoria indicata di seguito contiene|Le categorie indicate di seguito contengono}} pagine o file multimediali.
'ipb-confirm' => 'Conferma il blocco',
'badipaddress' => 'Indirizzo IP non valido.',
'blockipsuccesssub' => 'Blocco eseguito',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] è stato bloccato. <br />
-Consultare la [[Special:BlockList|lista degli IP bloccati]] per vedere i blocchi attivi.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] è stato bloccato.<br />
+Consultare la [[Special:BlockList|lista dei blocchi]] per vedere i blocchi attivi.',
'ipb-blockingself' => 'Stai per bloccare te stesso! Sei sicuro di volerlo fare?',
'ipb-confirmhideuser' => 'Si sta per bloccare un utente con l\'opzione "Nascondi utente" abilitata.
In questo modo si evita che il nome utente compaia in tutte le liste e le voci di registro.
'blocklog-showsuppresslog' => 'Questo utente è stato bloccato e nascosto in precedenza. Il registro delle rimozioni è riportato di seguito per informazione:',
'blocklogentry' => 'ha bloccato [[$1]] per un periodo di $2 $3',
'reblock-logentry' => 'ha cambiato le impostazioni del blocco per [[$1]] con una scadenza di $2 $3',
-'blocklogtext' => "Di seguito sono elencate le azioni di blocco e sblocco utenti. Gli indirizzi IP bloccati automaticamente non sono elencati. Consultare l'[[Special:BlockList|elenco IP bloccati]] per l'elenco degli indirizzi e nomi utente il cui blocco è operativo.",
+'blocklogtext' => "Di seguito sono elencate le azioni di blocco e sblocco utenti.
+Gli indirizzi IP bloccati automaticamente non sono elencati.
+Consultare l'[[Special:BlockList|elenco dei blocchi]] per l'elenco dei bandi o blocchi attualmente operativi.",
'unblocklogentry' => 'ha sbloccato $1',
'block-log-flags-anononly' => 'solo utenti anonimi',
'block-log-flags-nocreate' => 'creazione account bloccata',
'api-error-uploaddisabled' => 'Il caricamento è disabilitato su questa wiki.',
'api-error-verification-error' => "Questo file potrebbe essere danneggiato, o avere l'estensione sbagliata.",
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|secondo|secondi}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuto|minuti}}',
+'duration-hours' => '$1 {{PLURAL:$1|ora|ore}}',
+'duration-days' => '$1 {{PLURAL:$1|giorno|giorni}}',
+'duration-weeks' => '$1 {{PLURAL:$1|settimana|settimane}}',
+'duration-years' => '$1 {{PLURAL:$1|anno|anni}}',
+'duration-decades' => '$1 {{PLURAL:$1|decade|decadi}}',
+'duration-centuries' => '$1 {{PLURAL:$1|secolo|secoli}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennio|millenni}}',
+
);
'tog-showtoolbar' => '編集用のツールバーを表示する(JavaScriptが必要)',
'tog-editondblclick' => 'ダブルクリックで編集する(JavaScriptが必要)',
'tog-editsection' => '[編集]リンクから節を編集できるようにする',
-'tog-editsectiononrightclick' => 'ç¯\80è¦\8bå\87ºã\81\97ã\81®å\8f³ã\82¯ã\83ªã\83\83ã\82¯ã\81§ç¯\80ç·¨é\9b\86ã\82\92è¡\8cã\81\88るようにする(JavaScriptが必要)',
+'tog-editsectiononrightclick' => 'ç¯\80è¦\8bå\87ºã\81\97ã\81®å\8f³ã\82¯ã\83ªã\83\83ã\82¯ã\81§ç¯\80ç·¨é\9b\86ã\81\8cã\81§ã\81\8dるようにする(JavaScriptが必要)',
'tog-showtoc' => '目次を表示する(ページに見出しが4つ以上ある場合)',
-'tog-rememberpassword' => 'このブラウザにログイン情報を記憶させる(最大$1{{PLURAL:$1|日|日間}})',
-'tog-watchcreations' => '自分が作成したページをウォッチリストに追加する',
-'tog-watchdefault' => '自分が編集したページをウォッチリストに追加する',
-'tog-watchmoves' => '自分が移動したページをウォッチリストに追加する',
-'tog-watchdeletion' => '自分が削除したページをウォッチリストに追加する',
-'tog-minordefault' => 'ç´°é\83¨ã\81®ç·¨é\9b\86ã\82\92æ\97¢å®\9aã\81§ã\83\81ã\82§ã\83\83ã\82¯ã\81\99る',
-'tog-previewontop' => 'プレビューを編集ボックスの前に配置する',
+'tog-rememberpassword' => 'このブラウザにログイン情報を記憶(最大 $1 {{PLURAL:$1|日間}})',
+'tog-watchcreations' => '自分が作成したページをウォッチリストに追加',
+'tog-watchdefault' => '自分が編集したページをウォッチリストに追加',
+'tog-watchmoves' => '自分が移動したページをウォッチリストに追加',
+'tog-watchdeletion' => '自分が削除したページをウォッチリストに追加',
+'tog-minordefault' => 'ç´°é\83¨ã\81®ç·¨é\9b\86ã\81«æ\97¢å®\9aã\81§ã\83\81ã\82§ã\83\83ã\82¯ã\82\92å\85¥ã\82\8cる',
+'tog-previewontop' => 'プレビューを編集ボックスの前に配置',
'tog-previewonfirst' => '編集開始時にもプレビューを表示する',
'tog-nocache' => 'ブラウザによるページのキャッシュを無効にする',
'tog-enotifwatchlistpages' => 'ウォッチリストにあるページが更新されたときにメールを受け取る',
'tog-enotifusertalkpages' => '自分のトークページが更新されたときにメールを受け取る',
'tog-enotifminoredits' => '細部の編集でもメールを受け取る',
-'tog-enotifrevealaddr' => '通知メールで自分のメールアドレスを明示する',
-'tog-shownumberswatching' => 'ページをウォッチしている利用者数を表示する',
+'tog-enotifrevealaddr' => '通知メールで自分のメールアドレスを明示',
+'tog-shownumberswatching' => 'ページをウォッチしている利用者数を表示',
'tog-oldsig' => '既存の署名:',
'tog-fancysig' => '署名をウィキ文として扱う(自動でリンクしない)',
'tog-externaleditor' => '既定で編集に外部アプリケーションを使う(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
'tog-externaldiff' => '差分表示に外部アプリケーションを使う(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
'tog-showjumplinks' => '利用しやすさ向上のための「{{int:jumpto}}」リンクを有効にする',
'tog-uselivepreview' => 'ライブプレビューを使用する(JavaScriptが必要)(試験中の機能)',
-'tog-forceeditsummary' => '要約欄が空欄の場合に警告する',
+'tog-forceeditsummary' => '要約欄が空欄の場合に確認を促す',
'tog-watchlisthideown' => 'ウォッチリストに自分の編集を表示しない',
'tog-watchlisthidebots' => 'ウォッチリストにボットによる編集を表示しない',
'tog-watchlisthideminor' => 'ウォッチリストに細部の編集を表示しない',
'tog-watchlisthideanons' => 'ウォッチリストに匿名利用者の編集を表示しない',
'tog-watchlisthidepatrolled' => 'ウォッチリストに巡回済みの編集を表示しない',
'tog-nolangconversion' => '言語変種変換を無効にする',
-'tog-ccmeonemails' => '他の利用者に送信したメールの控えを自分にも送る',
-'tog-diffonly' => '差分表示の下にページの内容を表示しない',
-'tog-showhiddencats' => '隠しカテゴリを表示する',
+'tog-ccmeonemails' => '他の利用者に送信したメールの控えを自分にも送信',
+'tog-diffonly' => '差分の下にページ内容を表示しない',
+'tog-showhiddencats' => '隠しカテゴリを表示',
'tog-noconvertlink' => 'リンクタイトル変換を無効にする',
'tog-norollbackdiff' => '巻き戻し後の差分を表示しない',
'editfont-style' => '編集エリアのフォントスタイル:',
'editfont-default' => 'ブラウザの設定を使用',
'editfont-monospace' => '等幅フォント',
-'editfont-sansserif' => 'サンセリフフォント',
-'editfont-serif' => 'セリフフォント',
+'editfont-sansserif' => 'Sans Serif フォント',
+'editfont-serif' => 'Serif フォント',
# Dates
'sunday' => '日曜日',
'category-empty' => "''このカテゴリには、ページまたはメディアがひとつもありません。''",
'hidden-categories' => '{{PLURAL:$1|隠しカテゴリ}}',
'hidden-category-category' => '隠しカテゴリ',
-'category-subcat-count' => '{{PLURAL:$2|このカテゴリには、次の下位カテゴリのみ含まれています。|このカテゴリには、次の$2下位カテゴリが含まれており、そのうち$1カテゴリが表示されています。}}',
-'category-subcat-count-limited' => 'このカテゴリには、次の{{PLURAL:$1|$1下位カテゴリ}}が含まれています。',
-'category-article-count' => '{{PLURAL:$2|このカテゴリには、次のページのみ含まれています。|以下の$2ページがこのカテゴリに含まれており、そのうち$1ページが表示されています。}}',
-'category-article-count-limited' => '以下のページ{{PLURAL:$1|$1ページ}}が、現在のカテゴリに含まれています。',
-'category-file-count' => '{{PLURAL:$2|このカテゴリには、次のファイルのみが含まれています。|このカテゴリには、$2ファイルが含まれており、そのうち$1ファイルが表示されています。}}',
-'category-file-count-limited' => '以下の{{PLURAL:$1|$1ファイル}}が、現在のカテゴリに含まれています。',
+'category-subcat-count' => '{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには $2 下位カテゴリが含まれており、そのうち以下の{{PLURAL:$1|下位カテゴリ| $1 下位カテゴリ}}を表示しています。}}',
+'category-subcat-count-limited' => 'このカテゴリには以下の{{PLURAL:$1|下位カテゴリ| $1 下位カテゴリ}}が含まれています。',
+'category-article-count' => '{{PLURAL:$2|このカテゴリには以下のページのみ含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の {{PLURAL:$1|$1 ページ}}を表示しています。}}',
+'category-article-count-limited' => '現在のカテゴリには以下の{{PLURAL:$1|ページ| $1 ページ}}が含まれています。',
+'category-file-count' => '{{PLURAL:$2|このカテゴリには以下のファイルのみが含まれています。|このカテゴリには $2 ファイルが含まれており、そのうち以下の {{PLURAL:$1|$1 ファイル}}を表示しています。}}',
+'category-file-count-limited' => '現在のカテゴリには以下の{{PLURAL:$1|ファイル| $1 ファイル}}が含まれています。',
'listingcontinuesabbrev' => 'の続き',
'index-category' => '検索エンジンに収集されるページ',
'noindex-category' => '検索エンジンに収集されないページ',
'article' => '本文',
'newwindow' => '(新しいウィンドウが開きます)',
'cancel' => '中止',
-'moredotdotdot' => '続き・・・',
+'moredotdotdot' => '続き...',
'mypage' => '自分のページ',
'mytalk' => '自分のトーク',
'anontalk' => 'このIPアドレスのトーク',
'navigation' => '案内',
-'and' => 'および',
+'and' => ' および ',
# Cologne Blue skin
'qbfind' => '検索',
'vector-view-edit' => '編集',
'vector-view-history' => '履歴表示',
'vector-view-view' => '閲覧',
-'vector-view-viewsource' => 'ソース表示',
+'vector-view-viewsource' => 'ソースを表示',
'actions' => '操作',
'namespaces' => '名前空間',
'variants' => '変種',
'searcharticle' => '表示',
'history' => 'ページの履歴',
'history_short' => '履歴',
-'updatedmarker' => '最後の訪問から更新されています',
+'updatedmarker' => '最後の訪問以降に更新されました',
'printableversion' => '印刷用バージョン',
'permalink' => 'この版への固定リンク',
'print' => '印刷',
'create-this-page' => 'このページを作成',
'delete' => '削除',
'deletethispage' => 'このページを削除',
-'undelete_short' => '{{PLURAL:$1|$1版}}を復帰',
+'undelete_short' => '{{PLURAL:$1|$1 版}}を復帰',
'viewdeleted_short' => '削除された$1件の編集を閲覧',
'protect' => '保護',
'protect_change' => '設定変更',
'redirectedfrom' => '($1から転送)',
'redirectpagesub' => 'リダイレクトページ',
'lastmodifiedat' => 'このページの最終更新は $1 $2 に行われました。',
-'viewcount' => 'このページは{{PLURAL:$1|$1回}}アクセスされました。',
+'viewcount' => 'このページは {{PLURAL:$1|$1 回}}アクセスされました。',
'protectedpage' => '保護されたページ',
'jumpto' => '移動:',
'jumptonavigation' => '案内',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => '{{SITENAME}}について',
'aboutpage' => 'Project:{{SITENAME}}について',
-'copyright' => 'å\86\85容ã\81¯$1ã\81®ã\83©ã\82¤ã\82»ã\83³ã\82¹ã\81§å\88©ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82',
+'copyright' => '内容は$1のライセンスで利用できます。',
'copyrightpage' => '{{ns:project}}:著作権',
'currentevents' => '最近の出来事',
'currentevents-url' => 'Project:最近の出来事',
'mainpage' => 'メインページ',
'mainpage-description' => 'メインページ',
'policy-url' => 'Project:方針',
-'portal' => 'コミュニティ・ポータル',
-'portal-url' => 'Project:コミュニティ・ポータル',
-'privacy' => 'プライバシー・ポリシー',
-'privacypage' => 'Project:プライバシー・ポリシー',
+'portal' => 'コミュニティ ポータル',
+'portal-url' => 'Project:コミュニティ ポータル',
+'privacy' => 'プライバシー ポリシー',
+'privacypage' => 'Project:プライバシー ポリシー',
'badaccess' => '権限がありません',
'badaccess-group0' => '要求した操作を行うことは許可されていません。',
-'badaccess-groups' => 'この操作は、$1{{PLURAL:$2|の|のいずれかの}}グループに属する利用者のみが実行できます。',
+'badaccess-groups' => 'この操作は、以下の{{PLURAL:$2|グループ|グループのいずれか}}に属する利用者のみが実行できます: $1。',
-'versionrequired' => 'MediaWikiのバージョン$1が必要',
-'versionrequiredtext' => 'このページの利用にはMediaWikiのバージョン$1が必要です。[[Special:Version|バージョン情報]]を確認してください。',
+'versionrequired' => 'MediaWiki のバージョン $1 が必要',
+'versionrequiredtext' => 'このページの使用にはMediaWiki バージョン $1 が必要です。
+[[Special:Version|バージョン情報]]をご覧ください。',
'ok' => 'OK',
'retrievedfrom' => '「$1」より取得',
# Main script and global functions
'nosuchaction' => 'そのような操作はありません',
-'nosuchactiontext' => 'このURLで指定された操作は無効です。
-URLを間違って打ったか、正しくないリンクを辿った可能性があります。
-また、{{SITENAME}}が利用するソフトウェアのバグである可能性もあります。',
+'nosuchactiontext' => 'この URL で指定された操作は正しくありません。
+URL を間違って入力したか、正しくないリンクをたどった可能性があります。
+{{SITENAME}}が利用するソフトウェアのバグの可能性もあります。',
'nosuchspecialpage' => 'そのような特別ページはありません',
'nospecialpagetext' => '<strong>要求された特別ページは存在しません。</strong>
# General errors
'error' => 'エラー',
-'databaseerror' => 'データベース・エラー',
+'databaseerror' => 'データベース エラー',
'dberrortext' => 'データベースクエリの構文エラーが発生しました。
ソフトウェアにバグがある可能性があります。
最後に実行を試みたクエリは次の通りです:
関数「<tt>$2</tt>」内
<blockquote><tt>$1</tt></blockquote>。
データベースの返したエラー「<tt>$3:$4</tt>」',
-'dberrortextcl' => 'データベースクエリの構文エラーが発生しました。
-最後に実行を試みたクエリは次の通りです:
-関数 "$2" 内
+'dberrortextcl' => 'データベース クエリの構文エラーが発生しました。
+最後に実行を試みたクエリは以下の通りです:
+関数「$2」内から
"$1"
-ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®è¿\94ã\81\97ã\81\9fã\82¨ã\83©ã\83¼ "$3: $4"',
+ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81\8cè¿\94ã\81\97ã\81\9fã\82¨ã\83©ã\83¼ã\80\8c$3ï¼\9a$4ã\80\8d',
'laggedslavemode' => "'''警告:'''ページに最新の編集が反映されていない可能性があります。",
'readonly' => 'データベースがロックされています',
'enterlockreason' => 'ロックの理由とロック解除の予定を入力してください',
'readonlytext' => 'データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらくデータベースの定期メンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。
データベースをロックした管理者による説明は以下の通りです:$1',
-'missing-article' => 'ã\80\8c$1ã\80\8d$2ã\81¨ã\81\84ã\81\86ã\83\9aã\83¼ã\82¸ã\81®æ\9c¬æ\96\87ã\82\92ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ä¸\8aã\81«è¦\8bã\81¤ã\81\91ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dませんでした。
+'missing-article' => 'ã\83\9aã\83¼ã\82¸ã\80\8c$1ã\80\8d$2ã\81®æ\9c¬æ\96\87ã\81\8cã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹å\86\85ã\81§è¦\8bã\81¤ã\81\8bã\82\8aませんでした。
ページの削除された版への古い差分表示や固定リンクをたどった時にこのようなことになります。
'unexpected' => '予期しない値「$1」=「$2」です。',
'formerror' => 'エラー:フォームを送信できませんでした',
'badarticleerror' => 'このページでは要求された操作を行えません。',
-'cannotdelete' => '指定されたページあるいはファイル「$1」を削除できませんでした。
-すでに他の人によって削除された可能性があります。',
+'cannotdelete' => 'ページまたはファイル「$1」を削除できませんでした。
+他の人が既に削除した可能性があります。',
'cannotdelete-title' => '「$1」というページを削除できません',
'badtitle' => '不正なページ名',
-'badtitletext' => '要求されたページ名は、無効、空、または正しくない言語間リンク・ウィキ間リンクのページ名です。
-ページ名に利用できない文字が1つ以上含まれている可能性があります。',
-'perfcached' => '以ä¸\8bã\81®ã\83\87ã\83¼ã\82¿ã\81¯ã\82ã\83£ã\83\83ã\82·ã\83¥ã\81\95ã\82\8cã\81¦ã\81\8aã\82\8aã\80\81æ\9c\80æ\96°ã\81®ç\8a¶æ\85\8bã\81§ã\81ªã\81\84å\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82æ\9c\80大$1件ã\81¾ã\81§ã\81®çµ\90æ\9e\9cã\81\8cã\82ã\83£ã\83\83ã\82·ã\83¥ã\81§å\88©ç\94¨å\8f¯è\83½ã\81«ã\81ªã\81£ã\81¦ã\81\84ます。',
-'perfcachedts' => '以下のデータはキャッシュされており、最後に更新された日時は$1です。最大$4件までの結果がキャッシュで利用可能になっています。',
+'badtitletext' => '要求されたページ名は、無効、空、正しくない言語間リンク/ウィキ間リンクのページ名、のいずれかです。
+ページ名に使用できない文字が1つ以上含まれている可能性があります。',
+'perfcached' => '以ä¸\8bã\81®ã\83\87ã\83¼ã\82¿ã\81¯ã\82ã\83£ã\83\83ã\82·ã\83¥ã\81\95ã\82\8cã\81¦ã\81\8aã\82\8aã\80\81æ\9c\80æ\96°ã\81§ã\81¯ã\81ªã\81\84å\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82æ\9c\80大 $1 {{PLURAL:$1|件ã\81®çµ\90æ\9e\9c}}ã\81\8cã\82ã\83£ã\83\83ã\82·ã\83¥ã\81\95ã\82\8cます。',
+'perfcachedts' => '以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。',
'querypage-no-updates' => 'ページの更新は無効になっています。
以下のデータの更新は現在行われていません。',
-'wrong_wfQuery_params' => 'wfQuery()ã\81¸èª¤ã\81£ã\81\9få¼\95æ\95°が渡されました。<br />
+'wrong_wfQuery_params' => 'wfQuery()ã\81«èª¤ã\81£ã\81\9fã\83\91ã\83©ã\83¡ã\83¼ã\82¿ã\83¼が渡されました。<br />
関数:$1<br />
クエリ:$2',
'viewsource' => 'ソースを表示',
'actionthrottledtext' => '短時間にこの操作を大量に行ったため、スパム対策として設定されている制限を超えました。
少し時間をおいてからもう一度操作してください。',
'protectedpagetext' => 'このページは編集できないように保護されています。',
-'viewsourcetext' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ã\82½ã\83¼ã\82¹ã\82\92é\96²è¦§ã\81\97ã\80\81ã\82³ã\83\94ã\83¼ã\81\99ã\82\8bã\81\93ã\81¨ができます:',
-'viewyourtext' => "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81«å¯¾ã\81\99ã\82\8b'''ã\81\82ã\81ªã\81\9fã\81®ç·¨é\9b\86'''ã\81®ã\82½ã\83¼ã\82¹ã\82\92é\96²è¦§ã\81\97ã\80\81ã\82³ã\83\94ã\83¼ã\81\99ã\82\8bã\81\93ã\81¨ができます:",
-'protectedinterface' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯ã\82½ã\83\95ã\83\88ã\82¦ã\82§ã\82¢ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼スに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。',
-'editinginterface' => "'''è¦å\91\8aï¼\9a'''ã\82½ã\83\95ã\83\88ã\82¦ã\82§ã\82¢ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\81«ä½¿ç\94¨ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\83\86ã\82ã\82¹ã\83\88を編集しています。
-このページの変更はすべての利用者のユーザーインタフェースに影響します。
-翻訳ã\82\92ã\81\99ã\82\8bå ´å\90\88ã\80\81MediaWikiã\81®å\9c°å\9f\9få\8c\96ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88[//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net]ã\81®å\88©用を検討してください。",
+'viewsourcetext' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ã\82½ã\83¼ã\82¹ã\81®é\96²è¦§ã\82\84ã\82³ã\83\94ã\83¼ができます:',
+'viewyourtext' => "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¸ã\81®'''ã\81\82ã\81ªã\81\9fã\81®ç·¨é\9b\86'''ã\81®ã\82½ã\83¼ã\82¹ã\81®é\96²è¦§ã\82\84ã\82³ã\83\94ã\83¼ができます:",
+'protectedinterface' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯ã\82½ã\83\95ã\83\88ã\82¦ã\82§ã\82¢ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\82¤スに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。',
+'editinginterface' => "'''è¦å\91\8aï¼\9a'''ã\82½ã\83\95ã\83\88ã\82¦ã\82§ã\82¢ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\82¤ã\82¹ã\81®æ\96\87ç« ã\81¨ã\81\97ã\81¦ä½¿ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bã\83\9aã\83¼ã\82¸を編集しています。
+このページの変更は他の利用者のユーザー インターフェイスの外観に影響します。
+翻訳ã\81\99ã\82\8bå ´å\90\88ã\80\81MediaWiki ã\81®ã\83ã\83¼ã\82«ã\83©ã\82¤ã\82º ã\83\97ã\83ã\82¸ã\82§ã\82¯ã\83\88 [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] ã\81®ä½¿用を検討してください。",
'sqlhidden' => '(SQLクエリ非表示)',
-'cascadeprotected' => 'このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ}}で読み込まれているため、編集できないように保護されています。
+'cascadeprotected' => 'このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:
$2',
'namespaceprotected' => "'''$1'''名前空間にあるページを編集する権限がありません。",
-'customcssprotected' => 'このCSSページはほかのユーザーの個人設定が含まれているため、編集することができません。',
+'customcssprotected' => 'このCSSページは他の利用者の個人設定を含んでいるため、あなたには編集する権限がありません。',
'customjsprotected' => '他の利用者の個人設定を含むため、このJavaScriptのページを編集する権限がありません。',
'ns-specialprotected' => '特別ページは編集できません。',
'titleprotected' => "[[User:$1|$1]]によりこのページ名を持つページの作成は保護されています。
理由は「''$2''」です。",
+'filereadonlyerror' => 'ファイル リポジトリ「$2」が読み取り専用の状態にあるため、ファイル「$1」を変更できません。
+
+読み取り専用に設定した管理者からの説明:「$3」',
# Virus scanner
'virus-badscanner' => "環境設定が不適合です:不明なウイルス検知ソフトウェア:''$1''",
# Login and logout pages
'logouttext' => "'''ログアウトしました。'''
-ã\81\93ã\81®ã\81¾ã\81¾å\8c¿å\90\8dã\81§{{SITENAME}}ã\82\92使ã\81\84ç¶\9aã\81\91ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82å\90\8cã\81\98ã\81\82ã\82\8bã\81\84ã\81¯å\88¥ã\81®å\88©ç\94¨è\80\85ã\81¨ã\81\97ã\81¦[[Special:UserLogin|ã\82\82ã\81\86ä¸\80度ã\83ã\82°ã\82¤ã\83³ã\81\99ã\82\8b]]こともできます。
-なお、ページによっては、ブラウザのキャッシュをクリアするまで、ログインしているかのように表示され続けることがあるので注意してください。",
-'welcomecreation' => '== ようこそ、$1さん! ==
+ã\81\93ã\81®ã\81¾ã\81¾å\8c¿å\90\8dã\81§{{SITENAME}}ã\81®ä½¿ç\94¨ã\82\92ç¶\9aè¡\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82å\90\8cã\81\98ã\81¾ã\81\9fã\81¯å\88¥ã\81®å\88©ç\94¨è\80\85ã\81¨ã\81\97ã\81¦[[Special:UserLogin|ã\82\82ã\81\86ä¸\80度ã\83ã\82°ã\82¤ã\83³]]ã\81\99ã\82\8bこともできます。
+なお、ページによっては、ブラウザのキャッシュをクリアするまで、ログインしているかのように表示され続ける場合があるためご注意ください。",
+'welcomecreation' => '== ようこそ、$1 さん! ==
アカウントが作成されました。
[[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
'yourname' => '利用者名:',
'yourpassword' => 'パスワード:',
'yourpasswordagain' => 'パスワード再入力:',
-'remembermypassword' => 'このブラウザーにログイン情報を保存する (最長$1日間)',
+'remembermypassword' => 'このブラウザーにログイン情報を保存 (最長{{PLURAL:$1|日|日間}})',
'securelogin-stick-https' => 'ログイン後にHTTPS接続を維持',
'yourdomainname' => 'ドメイン:',
'externaldberror' => '外部の認証データベースでエラーが発生したか、または外部アカウント情報の更新が許可されていません。',
'createaccountmail' => 'メールで送信',
'createaccountreason' => '理由:',
'badretype' => '入力したパスワードが一致しません。',
-'userexists' => '入力された利用者名はすでに使用されています。
-ほかの名前を選んでください。',
+'userexists' => '入力された利用者名は既に使用されています。
+他の名前を選んでください。',
'loginerror' => 'ログインのエラー',
'createaccounterror' => 'アカウントを作成できませんでした: $1',
'nocookiesnew' => '利用者アカウントが作成されましたが、ログインしていません。
クッキーが無効になっているようです。
クッキーを有効にして、もう一度試してください。',
'nocookiesfornew' => '発信元を確認できなかったため、アカウントは作成されませんでした。
-ã\82¯ã\83\83ã\82ã\83¼ã\81\8cæ\9c\89å\8a¹ã\81«ã\81ªã\81£ã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\92確èª\8dã\81®ä¸\8aã\80\81ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ã\83ªã\83ã\83¼ã\83\89ã\81\97ã\81¦ã\82\82ã\81\86ä¸\80度è¡\8cã\81£てください。',
+ã\82¯ã\83\83ã\82ã\83¼ã\81\8cæ\9c\89å\8a¹ã\81«ã\81ªã\81£ã\81¦ã\81\84ã\82\8bã\81\93ã\81¨ã\82\92確èª\8dã\81\97ã\81¦ã\80\81ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92å\86\8dèªè¾¼ã\81\97ã\81¦ã\82\82ã\81\86ä¸\80度試ã\81\97てください。',
'noname' => '利用者名を正しく指定していません。',
'loginsuccesstitle' => 'ログイン成功',
'loginsuccess' => "'''{{SITENAME}}に「$1」としてログインしました。'''",
'login-userblocked' => 'この利用者はブロックされています。ログインは拒否されます。',
'wrongpassword' => 'パスワードが間違っています。
もう一度やり直してください。',
-'wrongpasswordempty' => 'パスワードを空にすることはできません。
+'wrongpasswordempty' => 'パスワードを空欄にはできません。
もう一度やり直してください。',
-'passwordtooshort' => 'パスワードは{{PLURAL:$1|$1文字}}以上でなければなりません。',
+'passwordtooshort' => 'パスワードは {{PLURAL:$1|$1 文字}}以上にしてください。',
'password-name-match' => 'パスワードは利用者名と同じであってはいけません。',
-'password-login-forbidden' => 'このã\82\88ã\81\86ã\81ªå\88©ç\94¨è\80\85å\90\8dã\81¨ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92使ç\94¨ã\81\99ã\82\8bã\81\93ã\81¨ã\81¯ç¦\81æ¢ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82',
-'mailmypassword' => '新しいパスワードを電子メールで送る',
+'password-login-forbidden' => 'このå\88©ç\94¨è\80\85å\90\8dã\81¨ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81®ä½¿ç\94¨ã\81¯ç¦\81æ¢ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82',
+'mailmypassword' => '新しいパスワードをメールで送信',
'passwordremindertitle' => '{{SITENAME}}の仮パスワード通知',
'passwordremindertext' => '誰かが(おそらくご自身が、IPアドレス$1から){{SITENAME}}($4)のログイン用パスワードの再発行を申請しました。
-ã\80\8c$2ã\80\8dã\81®ä»®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81\8cã\80\8c$3ã\80\8dã\81«è¨å®\9aã\81\95ã\82\8cã\81¾ã\81\97ã\81\9fã\80\82
-ã\82\82ã\81\97ã\81\94è\87ªèº«ã\81§ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81®ç\99ºè¡\8cã\82\92ç\94³è«\8bしたのであれば、ログインして新しいパスワードを決めてください。
-この仮パスワードは{{PLURAL:$5|$5日間}}で有効期限が切れます。
+ã\83¦ã\83¼ã\82¶ã\80\8c$2ã\80\8dã\81®ä»®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81\8cä½\9cæ\88\90ã\81\95ã\82\8cã\80\8c$3ã\80\8dã\81«è¨å®\9aã\81\95ã\82\8cã\81¾ã\81\97ã\81\9fã\80\82
+ã\82\82ã\81\97ã\81\94è\87ªèº«ã\81§ã\81\93ã\81®ç\94³è«\8bã\82\92したのであれば、ログインして新しいパスワードを決めてください。
+この仮パスワードは {{PLURAL:$5|$5 日間}}で有効期限が切れます。
-この依頼をしたのが他人である場合、あるいはログイン用パスワードを思い出してパスワード変更の必要がなくなった場合は、このメッセージを無視して、引き続き以前のパスワードを使用し続けることができます。',
+この申請をしたのが他人である場合、あるいはパスワードを思い出してパスワード変更が不要になった場合は、
+このメッセージを無視して、引き続き以前のパスワードを使用し続けることができます。',
'noemail' => '利用者「$1」のメールアドレスは登録されていません。',
-'noemailcreate' => '有効な電子メールアドレスを入力する必要があります。',
+'noemailcreate' => '有効なメール アドレスを入力する必要があります',
'passwordsent' => '新しいパスワードを「$1」に登録されたメールアドレスに送信しました。
メールを受け取ったら、再度ログインしてください。',
'blocked-mailpassword' => '使用しているIPアドレスからの編集はブロックされており、不正利用防止のため、パスワードの再発行機能は使用できません。',
'eauthentsent' => '指定されたメールアドレスにアドレス確認のためのメールを送信しました。
その他のメールがこのアカウント宛に送信される前に、メールの指示に従って、このアカウントが本当に自身のものであるか確認してください。',
-'throttled-mailpassword' => '新しいパスワードは{{PLURAL:$1|$1時間}}以内に送信済みです。
-æ\82ªç\94¨é\98²æ¢ã\81®ã\81\9fã\82\81ã\80\81ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81¯{{PLURAL:$1|$1æ\99\82é\96\93}}é\96\93é\9a\94ã\81§ã\81®ã\81¿å\86\8dç\99ºè¡\8cå\8f¯è\83½です。',
+'throttled-mailpassword' => '新しいパスワードは過去 {{PLURAL:$1|$1 時間}}に送信済みです。
+æ\82ªç\94¨é\98²æ¢ã\81®ã\81\9fã\82\81ã\80\81ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81®å\86\8dç\99ºè¡\8cã\81¯ {{PLURAL:$1|$1 æ\99\82é\96\93}}ã\81« 1 å\9b\9eã\81®ã\81¿です。',
'mailerror' => 'メールの送信中にエラーが発生しました:$1',
-'acct_creation_throttle_hit' => '同じIPアドレスでこのウィキへ訪れた人が、直前24時間で{{PLURAL:$1|$1個}}のアカウントを作成しており、これはこの期間中に作成が許可されている最大数です。
-そのため、現在このIPアドレスの利用者はアカウントをこれ以上作成できません。',
+'acct_creation_throttle_hit' => 'あなたと同じ IP アドレスでこのウィキに訪れた人が、最近 24 時間で {{PLURAL:$1|$1 アカウント}}を作成しており、これはこの期間で作成が許可されている最大数です。
+そのため、現在この IP アドレスではアカウントをこれ以上作成できません。',
'emailauthenticated' => 'メールアドレスは$2 $3に認証されています。',
'emailnotauthenticated' => 'メールアドレスが認証されていません。
確認されるまで以下のいかなるメールも送られません。',
'emailconfirmlink' => 'メールアドレスを確認する',
'invalidemailaddress' => '入力されたメールアドレスが正しい形式に従っていないため、受け付けられません。
正しい形式で入力し直すか、メールアドレス欄を空にしておいてください。',
-'cannotchangeemail' => 'このウィキでは、アカウントの電子メールアドレスを変更できません。',
+'cannotchangeemail' => 'このウィキではアカウントのメールアドレスを変更できません。',
+'emaildisabled' => 'このサイトではメールを送信できません。',
'accountcreated' => 'アカウントを作成しました',
-'accountcreatedtext' => '利用者アカウント:$1が作成されました。',
+'accountcreatedtext' => '利用者アカウント「$1」を作成しました。',
'createaccount-title' => '{{SITENAME}}のアカウント作成',
-'createaccount-text' => '{{SITENAME}} ($4) に「$2」という名前のアカウントが、この電子メールアドレスを連絡先として作成されました。パスワードは「$3」です。
-今すぐログインし、パスワードを変更してください。
+'createaccount-text' => '誰か(おそらくあなた)が、{{SITENAME}} ($4) にあなたのメール アドレスのアカウントを作成しました。
+アカウント名「$2」、パスワード「$3」です。
+今すぐログインしてパスワードを変更してください。
-何かの手違いでアカウントが作成されたと思う場合、このメッセージは無視してください。',
+このアカウントが何かの手違いで作成された場合は、このメッセージを無視してください。',
'usernamehasherror' => '利用者名には番号記号を含むことができません',
'login-throttled' => 'ログインの失敗が制限回数を超えました。
しばらく時間をおいてから再度お試しください。',
# E-mail sending
'php-mail-error-unknown' => 'PHPのmail()関数で不明なエラー',
-'user-mail-no-addy' => '電子メールアドレスなしで、電子メールを送信しようとしました。',
+'user-mail-no-addy' => 'メール アドレスなしでメールを送信しようとしました。',
# Change password dialog
'resetpass' => 'パスワードの変更',
-'resetpass_announce' => '電子メールで送信された仮パスワードでログインしています。
-ã\83ã\82°ã\82¤ã\83³ã\82\92å®\8cäº\86ã\81\99ã\82\8bã\81«ã\81¯ã\80\81ã\81\93ã\81\93ã\81§æ\96°ã\81\97ã\81\84ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92è¨å®\9aã\81\97ã\81ªã\81\8aã\81\99必要があります:',
+'resetpass_announce' => 'メールでお送りした仮パスワードでログインしました。
+ã\83ã\82°ã\82¤ã\83³ã\82\92å®\8cäº\86ã\81\99ã\82\8bã\81«ã\81¯ã\80\81ã\81\93ã\81\93ã\81§æ\96°ã\81\97ã\81\84ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92è¨å®\9aã\81\99ã\82\8b必要があります:',
'resetpass_text' => '<!-- ここに文を挿入 -->',
'resetpass_header' => 'アカウントのパスワードを変更',
'oldpassword' => '古いパスワード:',
'newpassword' => '新しいパスワード:',
'retypenew' => '新しいパスワードを再入力:',
'resetpass_submit' => '再設定してログイン',
-'resetpass_success' => 'パスワードの変更に成功しました!
-ログインしています…',
+'resetpass_success' => 'パスワードの変更に成功しました!
+ログインしています...',
'resetpass_forbidden' => 'パスワードは変更できません',
'resetpass-no-info' => 'このページに直接アクセスするためにはログインしている必要があります。',
'resetpass-submit-loggedin' => 'パスワードを変更',
'resetpass-submit-cancel' => '中止',
-'resetpass-wrong-oldpass' => '仮パスワードまたは現在のパスワードが無効です。
-すでにパスワード変更を行っているか、新しい仮パスワードの発行を依頼している可能性があります。',
+'resetpass-wrong-oldpass' => '仮パスワードまたは現在のパスワードが正しくありません。
+既にパスワード変更したか、新しい仮パスワードを依頼した可能性があります。',
'resetpass-temp-password' => '仮パスワード:',
# Special:PasswordReset
'passwordreset' => 'パスワードの再設定',
-'passwordreset-text' => 'ã\81\93ã\81®ã\83\95ã\82©ã\83¼ã\83 ã\81«å\9b\9eç\94ã\81\99ã\82\8bã\81¨ã\80\81ã\81\94è\87ªèº«ã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®è©³ç´°ã\81\8cé\9b»å\90ã\83¡ã\83¼ã\83«ã\81§é\80\9aç\9f¥ã\81\95ã\82\8cます。',
+'passwordreset-text' => 'ã\81\93ã\81®ã\83\95ã\82©ã\83¼ã\83 ã\81«å\85¥å\8a\9bã\81\99ã\82\8bã\81¨ã\80\81ã\82¢ã\82«ã\82¦ã\83³ã\83\88詳細ã\81®ã\83ªã\83\9eã\82¤ã\83³ã\83\80ã\83¼ã\82\92ã\83¡ã\83¼ã\83«ã\81§ã\81\8aé\80\81ã\82\8aã\81\97ます。',
'passwordreset-legend' => 'パスワードの再設定',
'passwordreset-disabled' => 'パスワードの再設定は、このウィキでは無効になっています。',
-'passwordreset-pretext' => '{{PLURAL:$1||以下のデータのうちのひとつを入力してください。}}',
+'passwordreset-pretext' => '{{PLURAL:$1||以下のデータのうちの 1 つを入力してください}}',
'passwordreset-username' => '利用者名:',
-'passwordreset-domain' => 'ドメイン:',
-'passwordreset-capture' => '送られるメールの内容を見ますか?',
+'passwordreset-domain' => 'ドメイン:',
+'passwordreset-capture' => '送信されるメールの内容を表示しますか?',
'passwordreset-capture-help' => 'このボックスをチェックすると、利用者に送られるメールの内容(一時的なパスワードを含む)をあなたも見ることができます。',
-'passwordreset-email' => '電子メールアドレス:',
+'passwordreset-email' => 'メール アドレス:',
'passwordreset-emailtitle' => '{{SITENAME}}上のアカウントの詳細',
-'passwordreset-emailtext-ip' => 'どなたかが(おそらくあなた、IP アドレス $1 )あなたの {{SITENAME}} ($4)
-ã\81«ã\81\8aã\81\91ã\82\8bã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®è©³ç´°æ\83\85å ±ã\82\92é\80\81ä¿¡ã\81\99ã\82\8bã\82\88ã\81\86ç\94³è«\8bã\81\95ã\82\8cました。
-ä¸\8bè¨\98ã\81®å\88©ç\94¨è\80\85{{PLURAL:$3|ã\82¢ã\82«ã\82¦ã\83³ã\83\88}}がこのメールアドレスと紐付けられています。
+'passwordreset-emailtext-ip' => 'どなたか(おそらくあなた、IP アドレス $1)が {{SITENAME}} ($4) での
+ã\81\82ã\81ªã\81\9fã\81®ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®è©³ç´°æ\83\85å ±ã\82\92é\80\81ä¿¡ã\81\99ã\82\8bã\82\88ã\81\86ç\94³è«\8bã\81\97ました。
+以ä¸\8bã\81®å\88©ç\94¨è\80\85{{PLURAL:$3|ã\82¢ã\82«ã\82¦ã\83³ã\83\88|ã\82¢ã\82«ã\82¦ã\83³ã\83\88群}}がこのメールアドレスと紐付けられています。
$2
-{{PLURAL:$3|この一時的なパスワード}}は{{PLURAL:$5|$5日}}で有効期限が切れます。
-ã\81\82ã\81ªã\81\9fã\81¯ã\83ã\82°ã\82¤ã\83³ã\81\97ã\80\81æ\96°ã\81\97ã\81\84ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92ã\81\99ã\81\90ã\81«é\81¸ã\81¶必要があります。
-ã\81\93ã\81®ç\94³è«\8bã\81\8cä»\96ã\81®ã\81 ã\82\8cã\81\8bã\81«ã\82\88ã\82\8bã\82\82ã\81®ã\81§ã\81\82ã\82\8bã\81\8bã\80\81ã\81\82ã\82\8bã\81\84ã\81¯ã\81\82ã\81ªã\81\9fã\81\8cè\87ªèº«ã\81®å\85\83ã\80\85のパスワードを
-è¦\9aã\81\88ã\81¦ã\81\8aã\82\8aã\80\81å¤\89ã\81\88ã\81\9fã\81\8fã\81ªã\81\84å ´å\90\88ã\81«ã\81¯ã\80\81ã\81\93ã\81®ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92ç\84¡è¦\96ã\81\97ã\81¦
-以å\89\8dã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92使ã\81\84続けることができます。',
+{{PLURAL:$3|この|これらの}}一時的なパスワードは {{PLURAL:$5|$5 日間}}で有効期限が切れます。
+ã\81\82ã\81ªã\81\9fã\81¯ã\81\99ã\81\90ã\81«ã\83ã\82°ã\82¤ã\83³ã\81\97ã\81¦æ\96°ã\81\97ã\81\84ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92å¤\89æ\9b´ã\81\99ã\82\8b必要があります。
+ã\81\93ã\82\8cã\81\8cä»\96ã\81®èª°ã\81\8bã\81«ã\82\88ã\82\8bç\94³è«\8bã\81§ã\81\82ã\82\8bå ´å\90\88ã\80\81ã\81\82ã\82\8bã\81\84ã\81¯ã\81\82ã\81ªã\81\9fã\81\8cè\87ªèº«ã\81®å\85\83のパスワードを
+è¦\9aã\81\88ã\81¦ã\81\84ã\81¦ã\81\9dã\82\8cã\82\92å¤\89æ\9b´ã\81\97ã\81\9fã\81\8fã\81ªã\81\84å ´å\90\88ã\81«ã\81¯ã\80\81ã\81\93ã\81®ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92ç\84¡è¦\96ã\81\97ã\81¦ä»¥å\89\8dã\81®ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92
+使ç\94¨ã\81\97続けることができます。',
'passwordreset-emailtext-user' => '{{SITENAME}} の利用者 $1 があなたの {{SITENAME}} ($4)
におけるアカウントの詳細情報を送信するよう申請されました。
下記の利用者{{PLURAL:$3|アカウント}}がこのメールアドレスと紐付けられています。
この申請が他のだれかによるものであるか、あるいはあなたが自身の元々のパスワードを
覚えており、変えたくない場合には、このメッセージを無視して
以前のパスワードを使い続けることができます。',
-'passwordreset-emailelement' => '利用者名: $1
-仮パスワード: $2',
+'passwordreset-emailelement' => '利用者名:$1
+仮パスワード:$2',
'passwordreset-emailsent' => '確認のメールが送信されました。',
'passwordreset-emailsent-capture' => '確認のメールが送信されました。以下に表示します。',
'passwordreset-emailerror-capture' => '生成された確認メールを以下に表示していますが、利用者への送信には失敗しました: $1',
# Special:ChangeEmail
'changeemail' => 'メールアドレスの変更',
'changeemail-header' => 'アカウントのメールアドレスを変更',
-'changeemail-text' => 'ã\81\93ã\81®ã\83\95ã\82©ã\83¼ã\83 ã\81¸å\85¥å\8a\9bã\81\99ã\82\8bã\81\93ã\81¨ã\81§ã\80\81ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92å¤\89æ\9b´ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81®å¤\89æ\9b´ã\82\92å®\8cäº\86ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\81¯ã\80\81パスワードを入力する必要があります。',
+'changeemail-text' => 'ã\81\93ã\81®ã\83\95ã\82©ã\83¼ã\83 ã\81§ã\81¯ã\83¡ã\83¼ã\83« ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92å¤\89æ\9b´ã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\81\93ã\81®å¤\89æ\9b´ã\82\92確èª\8dã\81\99ã\82\8bã\81\9fã\82\81ã\81«パスワードを入力する必要があります。',
'changeemail-no-info' => 'このページに直接アクセスするためにはログインしている必要があります。',
'changeemail-oldemail' => '現在のメールアドレス:',
'changeemail-newemail' => '新しいメールアドレス:',
このページを新規に作成するには、下のボックスに内容を書き込んでください(詳しくは[[{{MediaWiki:Helppage}}|ヘルプページ]]を参照してください)。
誤ってこのページにたどり着いた場合には、ブラウザの'''戻る'''ボタンを使って前のページに戻ってください。",
'anontalkpagetext' => "----''このページはアカウントをまだ作成していないか使用していない匿名利用者のための議論ページです。
-匿名利用者を識別するために、利用者名のかわりにIPアドレスが使用されています。
-IPアドレスは複数の利用者の間で共有されていることがあります。
+匿名利用者を識別するために、利用者名の代わりにIPアドレスが使用されています。
+IP アドレスは複数の利用者で共有されている場合があります。
もし、自身が匿名利用者であり、自分に関係のないコメントが寄せられている考えられる場合は、[[Special:UserLogin/signup|アカウントを作成する]]か[[Special:UserLogin|ログインして]]他の匿名利用者と間違えられないようにしてください。''",
'noarticletext' => '現在このページには内容がありません。
-他のページに含まれる[[Special:Search/{{PAGENAME}}|このページ名を検索する]]か、
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連記録を検索する]か、
-ã\82\82ã\81\97ã\81\8fã\81¯ã\80\81[{{fullurl:{{FULLPAGENAME}}|action=edit}} ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86]</span>ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cできます。',
+他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索する]]か、
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]するか、
+ã\81\82ã\82\8bã\81\84ã\81¯ã\80\81[{{fullurl:{{FULLPAGENAME}}|action=edit}} ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86]</span>できます。',
'noarticletext-nopermission' => '現在このページには内容がありません。他のページに含まれる[[Special:Search/{{PAGENAME}}|このページ名を検索する]]か、もしくは<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連記録を検索する]</span>ことができます。',
-'userpage-userdoesnotexist' => '「<nowiki>$1</nowiki>」という名前のアカウントは登録されていません。
-ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\99ã\82\8bã\81\93ã\81¨が適切かどうか確認してください。',
+'userpage-userdoesnotexist' => '「$1」という利用者アカウントは登録されていません。
+ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ä½\9cæ\88\90/ç·¨é\9b\86が適切かどうか確認してください。',
'userpage-userdoesnotexist-view' => '利用者アカウント「$1」は登録されていません。',
'blocked-notice-logextract' => 'この利用者は現在ブロックされています。
参考のために最新のブロック記録を以下に表示します。',
'sitejspreview' => "'''ここでは、JavaScriptをプレビューしているだけに過ぎません。'''
'''まだ保存されていません!'''",
'userinvalidcssjstitle' => "'''警告:'''「$1」という外装はありません。
-.cssと.jsページを編集する際には、ページ名を小文字にすることを忘れないでください(例えば、{{ns:user}}:Hoge/Vector.cssではなく{{ns:user}}:Hoge/vector.cssとなります)。",
+カスタム .css/.js ページではページ名を小文字にしてください。例:{{ns:user}}:Hoge/Vector.css ではなく {{ns:user}}:Hoge/vector.css",
'updated' => '(更新)',
'note' => "'''お知らせ:'''",
'previewnote' => "'''これはプレビューです。'''
'session_fail_preview' => "'''申し訳ありません!セッションが切断されたため編集を処理できませんでした。'''
もう一度やりなおしてください。
それでも失敗する場合、[[Special:UserLogout|ログアウト]]してからログインし直してください。",
-'session_fail_preview_html' => "'''申し訳ありません!セッションが切断されたため編集を処理することができませんでした。'''
+'session_fail_preview_html' => "'''すみません!セッション データが消失したため編集を処理できませんでした。'''
''{{SITENAME}}では生のHTMLが有効であり、JavaScriptでの攻撃を予防するためにプレビューを表示していません。''
-'''この編集が問題ないものであるならば、もう一度保存してください。'''
-それでもうまくいかない際には一度[[Special:UserLogout|ログアウト]]して、ログインし直してみてください。",
+'''この編集が問題ない場合はもう一度保存してください。'''
+それでもうまくいかない場合は一度[[Special:UserLogout|ログアウト]]して、ログインし直してみてください。",
'token_suffix_mismatch' => "'''使用中のクライアントが編集トークン内の句読点を正しく処理していないため、編集を受け付けられません。'''
ページ本文の破損を防ぐため、編集は反映されません。
-これは、問題のある匿名プロキシサービスを利用していると、起こることがあります。",
+問題のある匿名プロキシ サービスを使用していると、これが発生する場合があります。",
'edit_form_incomplete' => "'''一部の編集フォームの値がサーバーに届きませんでした。ご確認の上、そのまま再度投稿してください。'''",
'editing' => '「$1」を編集中',
+'creating' => '「$1」を作成中',
'editingsection' => '「$1」を編集中 (節単位)',
'editingcomment' => '「$1」を編集中 (新しい節)',
'editconflict' => '編集競合:$1',
上側のテキスト領域の内容'''だけ'''が、「{{int:savearticle}}」をクリックした時に実際に保存されます。",
'yourtext' => '編集中の文章',
'storedversion' => '保存された版',
-'nonunicodebrowser' => "'''警告:使用中のブラウザがUnicodeに対応していません。'''
-å®\89å\85¨ã\81«ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\99ã\82\8bå\9b\9eé\81¿ç\96ã\81\8c表示ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ï¼\9aç·¨é\9b\86ã\83\9cã\83\83ã\82¯ã\82¹ä¸ã\81®é\9d\9eASCIIæ\96\87å\97ã\81¯16é\80²æ\95°æ\96\87å\97ã\82³ã\83¼ã\83\89ã\81«ã\82\88ã\81£ã\81¦è¡¨ç\8f¾ã\81\95ã\82\8cます。",
+'nonunicodebrowser' => "'''警告:あなたのブラウザーはUnicodeに未対応です。'''
+å®\89å\85¨ã\81«ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\99ã\82\8bå\9b\9eé\81¿ç\96ã\82\92表示ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99ï¼\9aç·¨é\9b\86ã\83\9cã\83\83ã\82¯ã\82¹å\86\85ã\81®é\9d\9eASCIIæ\96\87å\97ã\82\9216é\80²æ\95°ã\82³ã\83¼ã\83\89ã\81§è¡¨ç\8f¾ã\81\97ã\81¦ã\81\84ます。",
'editingold' => "'''警告:このページの古い版を編集しています。'''
保存すると、この版以降に追加されていた変更がすべて失われます。",
'yourdiff' => '差分',
-'copyrightwarning' => "{{SITENAME}}ã\81¸ã\81®æ\8a\95稿ã\81¯ã\80\81ã\81\99ã\81¹ã\81¦$2ï¼\88詳細ã\81¯$1ã\82\92å\8f\82ç\85§ï¼\89ã\81®ã\82\82ã\81¨ã\81§å\85¬é\96\8bã\81\95ã\82\8cたと見なされることにご注意ください。
-投稿されたものが、他人によって遠慮なく編集され、自由に配布されることを望まない場合は、ここには投稿しないでください。<br />
-ã\81¾ã\81\9fã\80\81æ\8a\95稿ã\81\95ã\82\8cã\82\8bã\82\82ã\81®ã\81¯ã\80\81è\87ªèº«ã\81«ã\82\88ã\81£ã\81¦æ\9b¸ã\81\8bã\82\8cã\81\9fã\82\82ã\81®ã\81§ã\81\82ã\82\8bã\81\8bã\80\81ã\83\91ã\83\96ã\83ªã\83\83ã\82¯ã\83»ã\83\89ã\83¡ã\82¤ã\83³ã\80\81またはそれに類するフリーな資料からの複製であることを約束してください。
+'copyrightwarning' => "{{SITENAME}}ã\81¸ã\81®æ\8a\95稿ã\81¯ã\80\81ã\81\99ã\81¹ã\81¦$2ï¼\88詳細ã\81¯$1ã\82\92å\8f\82ç\85§ï¼\89ã\81®ã\82\82ã\81¨ã\81§å\85¬é\96\8bã\81\97たと見なされることにご注意ください。
+あなたが投稿したものを、他人がよって遠慮なく編集し、それを自由に配布するのを望まない場合は、ここには投稿しないでください。<br />
+ã\81¾ã\81\9fã\80\81æ\8a\95稿ã\81\99ã\82\8bã\81®ã\81¯ã\80\81ã\81\94è\87ªèº«ã\81\8cæ\9b¸ã\81\84ã\81\9fã\82\82ã\81®ã\81\8bã\80\81ã\83\91ã\83\96ã\83ªã\83\83ã\82¯ ã\83\89ã\83¡ã\82¤ã\83³またはそれに類するフリーな資料からの複製であることを約束してください。
'''著作権保護されている作品を、許諾なしに投稿しないでください!'''",
-'copyrightwarning2' => "{{SITENAME}}への全ての投稿は、他の利用者によって編集、変更、除去される可能性があります。
-自信の投稿が他人によって遠慮なく編集されることを望まない場合は、ここには投稿しないでください。<br />
-また、投稿されるものは、自身によって書かれたものであるか、パブリック・ドメイン、またはそれに類するフリーな資料からの複製であることを約束してください(詳細は$1を参照)。
+'copyrightwarning2' => "{{SITENAME}}へのすべての投稿は、他の利用者が編集、変更、除去する可能性があります。
+あなたの投稿を、他人が遠慮なく編集するのを望まない場合は、ここには投稿しないでください。<br />
+また、あなたが投稿するのは、ご自身が書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は$1を参照)。
'''著作権保護されている作品を、許諾なしに投稿してはいけません!'''",
-'longpageerror' => "'''エラー:投稿された文章は {{PLURAL:$1|1キロバイト|$1キロバイト}}の長さがあります。これは投稿できる最大の長さである{{PLURAL:$2|$2キロバイト|$2キロバイト}}を超えています。'''
+'longpageerror' => "'''エラー:投稿された文章は {{PLURAL:$1|$1 KB}} の長さがあります。これは投稿できる最大の長さ {{PLURAL:$2|$2 KB}} を超えています。'''
この編集は保存できません。",
'readonlywarning' => "'''警告:データベースがメンテナンスのためにロックされているため、現在は編集を保存できません。'''
必要であれば文章をカットアンドペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。
参考として以下に一番最後の記録を表示します:",
'semiprotectedpagewarning' => "'''注意:'''このページは保護されているため、登録利用者しか編集できません。
参考として以下に一番最後の記録を表示します:",
-'cascadeprotectedwarning' => "'''警告:'''このページはカスケード保護されている以下の{{PLURAL:$1|ページ}}から読み込まれているため、管理者権限を持つ利用者しか編集できないように保護されています。",
+'cascadeprotectedwarning' => "'''警告:'''このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、管理者権限を持つ利用者しか編集できないように保護されています。",
'titleprotectedwarning' => "'''警告:このページは保護されているため、作成には[[Special:ListGroupRights|特定の権限]]が必要です。'''
参考として以下に一番最後の記録を表示します:",
-'templatesused' => 'このページで使われている{{PLURAL:$1|テンプレート}}:',
-'templatesusedpreview' => 'このプレビューで使われている{{PLURAL:$1|テンプレート}}:',
-'templatesusedsection' => 'この節で使われている{{PLURAL:$1|テンプレート}}:',
+'templatesused' => 'このページで使用されている{{PLURAL:$1|テンプレート}}:',
+'templatesusedpreview' => 'このプレビューで使用されている{{PLURAL:$1|テンプレート}}:',
+'templatesusedsection' => 'この節で使用されている{{PLURAL:$1|テンプレート}}:',
'template-protected' => '(保護)',
'template-semiprotected' => '(半保護)',
'hiddencategories' => 'このページは$1隠しカテゴリに属しています:',
'sectioneditnotsupported-title' => '節単位編集はサポートされていません',
'sectioneditnotsupported-text' => 'このページでは節単位編集はサポートされません。',
'permissionserrors' => '認証エラー',
-'permissionserrorstext' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ç·¨é\9b\86権é\99\90ã\81\8cありません。{{PLURAL:$1|理由}}は以下の通りです:',
-'permissionserrorstext-withaction' => '以下に示された{{PLURAL:$1|理由}}により、$2を行うことができません:',
-'recreate-moveddeleted-warn' => "'''警告:以前に削除されたページを再作成しようとしています。'''
+'permissionserrorstext' => 'ã\81\82ã\81ªã\81\9fã\81«ã\81¯ã\81\93ã\81®æ\93\8dä½\9cã\82\92è¡\8cã\81\86権é\99\90ã\81¯ありません。{{PLURAL:$1|理由}}は以下の通りです:',
+'permissionserrorstext-withaction' => 'あなたには$2を行う権限がありません。{{PLURAL:$1|理由}}は以下の通りです:',
+'recreate-moveddeleted-warn' => "'''警告:以前削除されたページを再作成しようとしています。'''
-ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\97ç¶\9aã\81\91ã\82\8bã\81\93ã\81¨ã\81\8cé\81©å\88\87ã\81§ã\81\82ã\82\8bかどうか確認してください。
-å\8f\82è\80\83ã\81¨ã\81\97ã\81¦以下にこのページの削除と移動の記録を表示します:",
+ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ç·¨é\9b\86ã\82\92ç¶\9aè¡\8cã\81\99ã\82\8bã\81®ã\81\8cé\81©å\88\87かどうか確認してください。
+å\8f\82è\80\83ã\81®ã\81\9fã\82\81以下にこのページの削除と移動の記録を表示します:",
'moveddeleted-notice' => 'このページは削除されています。
参考のため、このページの削除と移動の記録を以下に表示します。',
'log-fulllog' => '完全な記録を見る',
'edit-conflict' => '編集が競合。',
'edit-no-change' => '文章が変更されていないため、編集は無視されました。',
'edit-already-exists' => '新しいページを作成できませんでした。
-そのページは、すでに存在しています。',
+そのページは既に存在しています。',
+'defaultmessagetext' => '既定のメッセージ文',
# Parser/template warnings
-'expensive-parserfunction-warning' => "'''警告:'''このページでの、高負荷なパーサー関数の呼び出し回数が多過ぎます。
+'expensive-parserfunction-warning' => "'''警告:'''このページでの高負荷なパーサー関数の呼び出し回数が多過ぎます。
-呼び出しは{{PLURAL:$2|$2}}回以下である必要があります(現在は{{PLURAL:$1|$1}}回)。",
+{{PLURAL:$2|呼び出しは $2 回}}以下にしてください({{PLURAL:$1|現在は $1 回}})。",
'expensive-parserfunction-category' => '高負荷な構文解析関数の呼び出しが多過ぎるページ',
'post-expand-template-inclusion-warning' => "'''警告:'''テンプレートの読み込みサイズが大き過ぎます。
いくつかのテンプレートは読み込まれません。",
'undo-success' => 'この編集を取り消すことができます。
下記の差分を確認し、本当に取り消すべきだと確認してから、変更を保存して取り消しを完了してください。',
'undo-failure' => '中間の版での編集と競合したため、取り消せませんでした。',
-'undo-norev' => 'å\8f\96ã\82\8aæ¶\88ã\81\9dã\81\86ã\81¨ã\81\97ã\81\9fç·¨é\9b\86ã\81¯å\98å\9c¨ã\81\97ã\81ªã\81\84ã\81\8bã\81\99ã\81§ã\81«å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\81\9fã\82\81ã\81«取り消せませんでした。',
+'undo-norev' => 'å\8f\96ã\82\8aæ¶\88ã\81\9dã\81\86ã\81¨ã\81\97ã\81\9fç·¨é\9b\86ã\81\8cå\98å\9c¨ã\81\97ã\81ªã\81\84ã\81\8bå\89\8aé\99¤æ¸\88ã\81¿ã\81®ã\81\9fã\82\81取り消せませんでした。',
'undo-summary' => '[[Special:Contributions/$2|$2]]([[User talk:$2|トーク]])による第$1版を取り消し',
# Account creation failure
'revdelete-no-file' => '指定されたファイルは存在しません。',
'revdelete-show-file-confirm' => '本当にファイル「<nowiki>$1</nowiki>」の削除された$2$3の版を閲覧しますか?',
'revdelete-show-file-submit' => 'はい',
-'revdelete-selected' => "'''[[:$1]]の{{PLURAL:$2|選択された版}}:'''",
+'revdelete-selected' => "'''[[:$1]] の{{PLURAL:$2|選択された版}}:'''",
'logdelete-selected' => "'''{{PLURAL:$1|選択された記録の項目}}:'''",
'revdelete-text' => "'''削除された版や記録はページの履歴や記録に表示され続けますが、一般の利用者はその内容にアクセスできなくなります。'''
-追å\8a ã\81®å\88¶é\99\90ã\81\8cã\81\8bã\81\91ã\82\89ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81{{SITENAME}}ã\81®ä»\96ã\81®ç®¡ç\90\86è\80\85ã\82\82ã\81\93ã\82\8cã\81¨å\90\8cã\81\98ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\82\92使ã\81£て隠された内容にアクセスしたり、復元したりできます。",
+追å\8a ã\81®å\88¶é\99\90ã\81\8cã\81\8bã\81\91ã\82\89ã\82\8cã\81ªã\81\84é\99\90ã\82\8aã\80\81{{SITENAME}}ã\81®ä»\96ã\81®ç®¡ç\90\86è\80\85ã\82\82ã\81\93ã\82\8cã\81¨å\90\8cã\81\98ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\82¤ã\82¹ã\82\92使ç\94¨ã\81\97て隠された内容にアクセスしたり、復元したりできます。",
'revdelete-confirm' => 'この操作を意図して行っていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に沿って行っていることを確認してください。',
'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
* 名誉毀損の恐れのある記述
* 非公開個人情報
-*: ''è\87ªå®\85ã\81®ä½\8fæ\89\80ã\82\84電話番号、社会保障番号など''",
+*: ''è\87ªå®\85ã\81®ä½\8fæ\89\80ã\80\81電話番号、社会保障番号など''",
'revdelete-legend' => '閲覧レベル制限を設定',
'revdelete-hide-text' => '版の本文を隠す',
'revdelete-hide-image' => 'ファイル内容を隠す',
'revdelete-suppress' => '他の利用者と同様に管理者からもデータを隠す',
'revdelete-unsuppress' => '復元版に対する制限を除去',
'revdelete-log' => '理由:',
-'revdelete-submit' => 'é\81¸æ\8a\9eã\81\97た{{PLURAL:$1|版}}に適用',
+'revdelete-submit' => 'é\81¸æ\8a\9eã\81\95ã\82\8cた{{PLURAL:$1|版}}に適用',
'revdelete-success' => "'''版の閲覧レベルを更新しました。'''",
'revdelete-failure' => "'''版の閲覧レベルを更新できませんでした:'''
$1",
$1",
'revdel-restore' => '閲覧レベルを変更',
'revdel-restore-deleted' => '削除された版',
-'revdel-restore-visible' => '閲覧可能な版',
+'revdel-restore-visible' => '閲覧できる版',
'pagehist' => 'ページの履歴',
'deletedhist' => '削除された履歴',
'revdelete-hide-current' => '$1$2の項目の非表示に失敗しました:これは最新版であるため。
# Suppression log
'suppressionlog' => '秘匿記録',
'suppressionlogtext' => '以下は管理者から秘匿された内容を含む削除およびブロックの一覧です。
-現在操作できる追放とブロックの一覧については[[Special:BlockList|IPブロックの一覧]]を参照してください。',
+現在操作できる追放とブロックの一覧については[[Special:BlockList|ブロックの一覧]]を参照してください。',
# History merging
'mergehistory' => 'ページ履歴の統合',
'mergehistory-from' => '統合元となるページ:',
'mergehistory-into' => '統合先のページ:',
'mergehistory-list' => '統合できる編集履歴',
-'mergehistory-merge' => '以下の[[:$1]]の履歴が、[[:$2]]へ統合可能です。
+'mergehistory-merge' => '以下の [[:$1]] の履歴を [[:$2]] に統合できます。
特定の時間以前に作成された版のみを統合するには、ラジオボタンで版を選択してください。
案内リンクを使うと、選択が初期化されるので注意してください。',
-'mergehistory-go' => '統合可能な版の表示',
-'mergehistory-submit' => '版を統合する',
+'mergehistory-go' => '統合できる版を表示',
+'mergehistory-submit' => '版を統合',
'mergehistory-empty' => '統合できる版がありません。',
-'mergehistory-success' => '[[:$1]]の$3{{PLURAL:$3|版}}を[[:$2]]へ統合しました。',
+'mergehistory-success' => '[[:$1]]の $3 {{PLURAL:$3|版}}を[[:$2]]に統合しました。',
'mergehistory-fail' => '履歴の統合を実行できません。ページと時刻の引数を再確認してください。',
'mergehistory-no-source' => '統合元ページ「$1」が存在しません。',
-'mergehistory-no-destination' => 'çµ±å\90\88å\85\88ã\81®ã\83\9aã\83¼ã\82¸$1が存在しません。',
+'mergehistory-no-destination' => 'çµ±å\90\88å\85\88ã\83\9aã\83¼ã\82¸ã\80\8c$1ã\80\8dが存在しません。',
'mergehistory-invalid-source' => '統合元のページは有効な名前でなければなりません。',
'mergehistory-invalid-destination' => '統合先のページは有効な名前でなければなりません。',
'mergehistory-autocomment' => '[[:$1]]を[[:$2]]に統合',
# Merge log
'mergelog' => '統合記録',
-'pagemerge-logentry' => '[[$1]]ã\82\92[[$2]]ã\81¸çµ±å\90\88ï¼\88$3版まで)',
+'pagemerge-logentry' => '[[$1]]ã\82\92[[$2]]ã\81«çµ±å\90\88ï¼\88$3 版まで)',
'revertmerge' => '統合解除',
'mergelogpagetext' => '以下は、最近行われたあるページから別のページへの統合の一覧です。',
'searchall' => 'すべて',
'showingresults' => "'''$2'''件目からの'''$1'''件を表示しています。",
'showingresultsnum' => "'''$2'''件目からの'''$3'''件を表示しています。",
-'showingresultsheader' => "「'''$4'''」に対する{{PLURAL:$5|'''$3'''件中の'''$1'''件|'''$3'''件中の'''$1'''件から'''$2'''件までの}}結果",
+'showingresultsheader' => "「'''$4'''」に対する{{PLURAL:$5|'''$3'''件中の'''$1'''件の結果|'''$3'''件中の'''$1'''件目から'''$2'''件目の結果}}",
'nonefound' => "'''注意''':既定では一部の名前空間しか検索されません。
-''all:''を前につけると、全て(トークページやテンプレートなどを含む)を対象にできます。検索したい名前空間を前につけることもできます。",
+''all:''を前に付けると、すべて(トークページやテンプレートなどを含む)を対象にできます。検索する名前空間を前に付けることもできます。",
'search-nonefound' => '問い合わせに合致する結果はありませんでした。',
'powersearch' => '高度な検索',
'powersearch-legend' => '高度な検索',
'prefs-rc' => '最近の更新',
'prefs-watchlist' => 'ウォッチリスト',
'prefs-watchlist-days' => 'ウォッチリストに表示する日数:',
-'prefs-watchlist-days-max' => '最大$1{{PLURAL:$1|日|日間}}',
+'prefs-watchlist-days-max' => '最大 $1 {{PLURAL:$1|日間}}',
'prefs-watchlist-edits' => '拡張ウォッチリストに表示する件数:',
'prefs-watchlist-edits-max' => '最大数:1000',
'prefs-watchlist-token' => 'ウォッチリストのトークン:',
'stub-threshold' => '<a href="#" class="stub">スタブリンク</a>として表示する閾値(バイト):',
'stub-threshold-disabled' => '無効',
'recentchangesdays' => '最近の更新に表示する日数:',
-'recentchangesdays-max' => '(最大$1{{PLURAL:$1|日|日間}})',
+'recentchangesdays-max' => '(最大 $1 {{PLURAL:$1|日間}})',
'recentchangescount' => '既定で表示する件数:',
'prefs-help-recentchangescount' => 'この設定は最近の更新、ページの履歴、および記録に適用されます。',
'prefs-help-watchlist-token' => 'この欄に秘密鍵を入力すると、自身のウォッチリストのRSSフィードが生成されます。
'timezoneregion-europe' => 'ヨーロッパ',
'timezoneregion-indian' => 'インド洋',
'timezoneregion-pacific' => '太平洋',
-'allowemail' => '他の利用者からの電子メールの受信を有効化する',
+'allowemail' => '他の利用者からのメールを受信',
'prefs-searchoptions' => '検索設定',
'prefs-namespaces' => '名前空間',
'defaultns' => 'その他の場合、次の名前空間でのみ検索する:',
'gender-unknown' => '未指定',
'gender-male' => '男',
'gender-female' => '女',
-'prefs-help-gender' => '省略可能:ソフトウェアによる文法的性の解決に使用されます。
+'prefs-help-gender' => '省略可:ソフトウェアによる文法的性の解決に使用されます。
この情報は公開されます。',
-'email' => '電子メール',
-'prefs-help-realname' => '本名登録は省略可能です。
-登録した場合、著作物の帰属表示に本名が用いられます。',
-'prefs-help-email' => '電子メールアドレスの設定は省略可能ですが、パスワードを忘れた際に新しいパスワードを電子メールで受け取る場合に必要です。',
+'email' => 'メール',
+'prefs-help-realname' => '本名は省略できます。
+入力すると、あなたの著作物の帰属表記に本名を使用します。',
+'prefs-help-email' => 'メールアドレスは省略できますが、パスワードを忘れた際にパスワードをリセットするのに必要です。',
'prefs-help-email-others' => 'あなたの身元を明らかにすることなく、他の利用者に利用者ページやトークページを使って連絡をしてもらうようにすることもできます。',
'prefs-help-email-required' => 'メールアドレスが必要です。',
'prefs-info' => '基本情報',
'prefs-diffs' => '差分',
# User preference: e-mail validation using jQuery
-'email-address-validity-valid' => '電子メールアドレスは有効なようです',
-'email-address-validity-invalid' => '有効な電子メールアドレスを入力してください',
+'email-address-validity-valid' => 'メール アドレスは有効のようです',
+'email-address-validity-invalid' => '有効なメール アドレスを入力',
# User rights
'userrights' => '利用者権限の管理',
'userrights-groups-help' => 'この利用者が属するグループを変更することができます。
* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。
* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。
-* *は一旦グループへ追加した場合に除去あるいはその逆が不可能であることを示しています。',
+* 「*」はグループに一旦追加した場合に除去(あるいはその逆)ができないことを示しています。',
'userrights-reason' => '理由:',
'userrights-no-interwiki' => '他ウィキ上における利用者権限の編集権限はありません。',
'userrights-nodatabase' => 'データベース$1は存在しないか、ローカル上にありません。',
'userrights-nologin' => '利用者権限を付与するには、管理者アカウントで[[Special:UserLogin|ログイン]]する必要があります。',
'userrights-notallowed' => 'あなたのアカウントには利用者権限を追加または除去する権限がありません。',
-'userrights-changeable-col' => '変更可能なグループ',
+'userrights-changeable-col' => '変更できるグループ',
'userrights-unchangeable-col' => '変更できないグループ',
# Groups
'grouppage-suppress' => '{{ns:project}}:秘匿者',
# Rights
-'right-read' => 'ã\83\9aã\83¼ã\82¸ã\81®閲覧',
-'right-edit' => 'ã\83\9aã\83¼ã\82¸ã\81®編集',
-'right-createpage' => 'ï¼\88è°è«\96ã\83\9aã\83¼ã\82¸ã\81§ã\81ªã\81\84ï¼\89ã\83\9aã\83¼ã\82¸ã\81®作成',
-'right-createtalk' => 'è°è«\96ã\83\9aã\83¼ã\82¸ã\81®作成',
-'right-createaccount' => 'æ\96°ã\81\97ã\81\84å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81®作成',
+'right-read' => 'ã\83\9aã\83¼ã\82¸ã\82\92閲覧',
+'right-edit' => 'ã\83\9aã\83¼ã\82¸ã\82\92編集',
+'right-createpage' => 'ï¼\88è°è«\96ã\83\9aã\83¼ã\82¸ã\81§ã\81¯ã\81ªã\81\84ï¼\89ã\83\9aã\83¼ã\82¸ã\82\92作成',
+'right-createtalk' => 'è°è«\96ã\83\9aã\83¼ã\82¸ã\82\92作成',
+'right-createaccount' => 'æ\96°ã\81\97ã\81\84å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\82\92作成',
'right-minoredit' => '細部の編集の印づけ',
'right-move' => 'ページの移動',
'right-move-subpages' => '下位ページを含めたページの移動',
'right-reupload-shared' => '共有メディアリポジトリ上のファイルのローカルでの上書き',
'right-upload_by_url' => 'URLからのファイルのアップロード',
'right-purge' => '確認を省略してサイトのキャッシュを破棄',
-'right-autoconfirmed' => 'å\8d\8aä¿\9dè·ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\81®編集',
+'right-autoconfirmed' => 'å\8d\8aä¿\9dè·ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\82\92編集',
'right-bot' => '自動処理として認識',
'right-nominornewtalk' => '議論ページへ細部の編集をしたときに、新しいメッセージのお知らせを表示しない',
'right-apihighlimits' => 'API要求でより高い制限値の使用',
'right-suppressrevision' => '管理者から隠された版の確認と復元',
'right-suppressionlog' => '非公開記録の閲覧',
'right-block' => '他の利用者の編集をブロック',
-'right-blockemail' => '利用者の電子メール送信をブロック',
+'right-blockemail' => '利用者のメール送信をブロック',
'right-hideuser' => '利用者名ブロックし、公開記録から隠す',
'right-ipblock-exempt' => 'IPブロック、自動ブロック、広域ブロックを回避',
'right-proxyunbannable' => 'プロキシの自動ブロックを回避',
'right-unblockself' => '自分自身に対するブロックを解除',
-'right-protect' => 'ä¿\9dè·ã\83¬ã\83\99ã\83«ã\81®å¤\89æ\9b´ã\81¨ä¿\9dè·ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\81®編集',
-'right-editprotected' => '保護ページの編集(カスケード保護を除く)',
-'right-editinterface' => 'ユーザーインターフェースの編集',
-'right-editusercssjs' => '他利用者のCSSとJavaScriptファイルの編集',
-'right-editusercss' => '他利用者のCSSファイルの編集',
-'right-edituserjs' => '他利用者のJavaScriptファイルの編集',
+'right-protect' => 'ä¿\9dè·ã\83¬ã\83\99ã\83«ã\82\92å¤\89æ\9b´ã\81\97ã\80\81ä¿\9dè·ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ã\82\92編集',
+'right-editprotected' => '保護ページ(カスケード保護を除く)を編集',
+'right-editinterface' => 'ユーザー インターフェイスを編集',
+'right-editusercssjs' => '他の利用者のCSSとJavaScriptファイルを編集',
+'right-editusercss' => '他の利用者のCSSファイルを編集',
+'right-edituserjs' => '他の利用者のJavaScriptファイルを編集',
'right-rollback' => '特定ページを最後に編集した利用者の編集の即時巻き戻し',
'right-markbotedits' => '巻き戻しをボットの編集として扱う',
'right-noratelimit' => '速度制限を受けない',
'right-patrolmarks' => '最近の更新で巡回済み印を閲覧',
'right-unwatchedpages' => 'ウォッチされていないページ一覧の閲覧',
'right-mergehistory' => 'ページ履歴の統合',
-'right-userrights' => 'å\85¨å\88©ç\94¨è\80\85権é\99\90ã\81®編集',
-'right-userrights-interwiki' => 'ä»\96ã\81®ã\82¦ã\82£ã\82ã\81®å\88©ç\94¨è\80\85ã\81®å\88©ç\94¨è\80\85権é\99\90ã\81®編集',
+'right-userrights' => 'å\85¨å\88©ç\94¨è\80\85権é\99\90ã\82\92編集',
+'right-userrights-interwiki' => 'ä»\96ã\81®ã\82¦ã\82£ã\82ã\81®å\88©ç\94¨è\80\85ã\81®å\88©ç\94¨è\80\85権é\99\90ã\82\92編集',
'right-siteadmin' => 'データベースのロックおよびロック解除',
'right-override-export-depth' => 'リンク先ページを5階層まで含めて書き出す',
-'right-sendemail' => 'ä»\96ã\81®å\88©ç\94¨è\80\85ã\81¸é\9b»å\90ã\83¡ã\83¼ã\83«ã\82\92é\80\81ã\82\8b',
+'right-sendemail' => 'ä»\96ã\81®å\88©ç\94¨è\80\85ã\81«ã\83¡ã\83¼ã\83«ã\82\92é\80\81ä¿¡',
'right-passwordreset' => 'パスワード再設定メールを閲覧する',
# User rights log
'rightsnone' => '(なし)',
# Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®閲覧',
-'action-edit' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®編集',
-'action-createpage' => 'ã\83\9aã\83¼ã\82¸ã\81®æ\96°è¦\8f作成',
-'action-createtalk' => 'ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\81®æ\96°è¦\8f作成',
-'action-createaccount' => 'このアカウントの作成',
-'action-minoredit' => '細部の編集として印付け',
+'action-read' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92閲覧',
+'action-edit' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92編集',
+'action-createpage' => 'ã\83\9aã\83¼ã\82¸ã\82\92作成',
+'action-createtalk' => 'ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\82\92作成',
+'action-createaccount' => 'この利用者アカウントを作成',
+'action-minoredit' => '細部の編集として印を付ける',
'action-move' => 'このページの移動',
'action-move-subpages' => 'このページと下位ページの移動',
'action-move-rootuserpages' => '利用者ページ本体の移動',
'action-movefile' => 'このファイルの移動',
'action-upload' => 'このファイルのアップロード',
-'action-reupload' => 'このファイルの上書き',
-'action-reupload-shared' => 'å\85±æ\9c\89ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81®上書き',
+'action-reupload' => 'この既存のファイルに上書き',
+'action-reupload-shared' => 'å\85±æ\9c\89ã\83ªã\83\9dã\82¸ã\83\88ã\83ªã\81«ã\81\82ã\82\8bã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«上書き',
'action-upload_by_url' => 'URLからこのファイルをアップロード',
'action-writeapi' => '書き込みAPIを使用',
-'action-delete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®削除',
-'action-deleterevision' => 'ã\81\93ã\81®ç\89\88ã\81®削除',
-'action-deletedhistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤å±¥æ´ã\81®表示',
+'action-delete' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92削除',
+'action-deleterevision' => 'ã\81\93ã\81®ç\89\88ã\82\92削除',
+'action-deletedhistory' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤å±¥æ´ã\82\92表示',
'action-browsearchive' => '削除されたページの検索',
'action-undelete' => 'このページの復帰',
'action-suppressrevision' => '隠された版の確認と復元',
'action-suppressionlog' => 'この非公開記録の表示',
'action-block' => 'この利用者の編集をブロック',
-'action-protect' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ä¿\9dè·ã\83¬ã\83\99ã\83«ã\81®変更',
-'action-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\81®即時巻き戻し',
-'action-import' => '他のウィキからのこのページの取り込み',
-'action-importupload' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83ã\83¼ã\83\89ã\81\8bã\82\89ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\8f\96ã\82\8aè¾¼ã\81¿',
+'action-protect' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®ä¿\9dè·ã\83¬ã\83\99ã\83«ã\82\92変更',
+'action-rollback' => 'ç\89¹å®\9aã\83\9aã\83¼ã\82¸ã\82\92æ\9c\80å¾\8cã\81«ç·¨é\9b\86ã\81\97ã\81\9få\88©ç\94¨è\80\85ã\81®ç·¨é\9b\86ã\82\92即時巻き戻し',
+'action-import' => 'このページを他のウィキから取り込む',
+'action-importupload' => 'ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ã\83\95ã\82¡ã\82¤ã\83«ã\82¢ã\83\83ã\83\97ã\83ã\83¼ã\83\89ã\81\8bã\82\89å\8f\96ã\82\8aè¾¼ã\82\80',
'action-patrol' => '他の利用者の編集を巡回済みにする',
'action-autopatrol' => '自身の編集を巡回済みにする',
'action-unwatchedpages' => 'ウォッチされていないページ一覧の表示',
-'action-mergehistory' => 'このページの履歴統合',
+'action-mergehistory' => 'このページの履歴を統合',
'action-userrights' => '全利用者権限の変更',
'action-userrights-interwiki' => '他のウィキ上の利用者の利用者権限変更',
-'action-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ã\83ã\83\83ã\82¯ã\82\82ã\81\97ã\81\8fはロック解除',
-'action-sendemail' => '電子メールの送信',
+'action-siteadmin' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92ã\83ã\83\83ã\82¯ã\81¾ã\81\9fはロック解除',
+'action-sendemail' => 'メールを送信',
# Recent changes
'nchanges' => '$1回の変更',
'recentchanges-label-minor' => 'これは細部の編集です',
'recentchanges-label-bot' => 'この編集はボットによって行われました',
'recentchanges-label-unpatrolled' => 'この編集はまだ巡回されていません',
-'rcnote' => "$4 $5までの{{PLURAL:$2|'''1'''日|'''$2'''日間}}になされた'''$1'''件の変更は以下のとおりです。",
+'rcnote' => "$4 $5 までの{{PLURAL:$2|'''$2'''日間}}になされた{{PLURAL:$1|'''$1'''件の変更}}は以下の通りです。",
'rcnotefrom' => "以下は、'''$2'''以降の更新です(最大'''$1'''件)。",
'rclistfrom' => '$1以降の更新を表示する',
'rcshowhideminor' => '細部の編集を$1',
'rcshowhideanons' => '匿名利用者の編集を$1',
'rcshowhidepatr' => '巡回された編集を$1',
'rcshowhidemine' => '自分の編集を$1',
-'rclinks' => '最近$2日間の$1件分を表示する<br />$3',
+'rclinks' => '最近$2日間の$1件分を表示<br />$3',
'diff' => '差分',
'hist' => '履歴',
'hide' => '非表示',
'newpageletter' => '新',
'boteditletter' => 'ボ',
'unpatrolledletter' => '!',
-'number_of_watching_users_pageview' => '[$1人の利用者がウォッチしています]',
+'number_of_watching_users_pageview' => '[$1 人の利用者がウォッチしています]',
'rc_categories' => 'カテゴリを限定(「|」で区切る)',
'rc_categories_any' => 'すべて',
'rc-change-size-new' => '変更後は$1バイト',
'newsectionsummary' => '/* $1 */ 新しい節',
-'rc-enhanced-expand' => '詳細を表示(JavaScriptが必要)',
+'rc-enhanced-expand' => '詳細を表示(JavaScript が必要)',
'rc-enhanced-hide' => '詳細を非表示',
+'rc-old-title' => '作成時のページ名は「$1」',
# Recent changes linked
'recentchangeslinked' => '関連ページの更新状況',
'filetype-badmime' => 'MIMEタイプ「$1」のファイルのアップロードは許可されていません。',
'filetype-bad-ie-mime' => '許可されていない潜在的危険性のあるファイル形式「$1」としてInternet Explorerに認識されてしまうため、このファイルをアップロードできません。',
'filetype-unwanted-type' => "'''「.$1」'''は好ましくないファイル形式です。
-推奨される{{PLURAL:$3|ファイル形式}}は$2です。",
+推奨される{{PLURAL:$3|ファイル形式}}は $2 です。",
'filetype-banned-type' => "'''「.$1」''' は許可されていないファイル形式です{{PLURAL:$4|}}。
許可されているファイル形式{{PLURAL:$3|}}は$2です。",
'filetype-missing' => 'ファイルに、「.jpg」のような拡張子がありません。',
'verification-error' => 'このファイルは、ファイルの検証システムに合格しませんでした。',
'hookaborted' => '拡張機能のフックによって、修正が中断されました。',
'illegal-filename' => 'そのファイル名は許可されていません。',
-'overwrite' => '既存のファイルへ上書きすることは許可されていません。',
+'overwrite' => '既存のファイルへの上書きは許可されていません。',
'unknown-error' => '不明なエラーが発生しました。',
'tmp-create-error' => '一時ファイルを作成できませんでした。',
'tmp-write-error' => '一時ファイルへの書き込みエラー',
'emptyfile' => 'アップロードしたファイルは内容が空のようです。
ファイル名の指定が間違っている可能性があります。
本当にこのファイルをアップロードしたいのか、確認してください。',
-'windows-nonascii-filename' => 'ã\81\93ã\81®wikiã\81§ã\81¯ã\80\81ã\83\95ã\82¡ã\82¤ã\83«å\90\8dã\81«ç\89¹æ®\8aæ\96\87å\97ã\82\92使ã\81\86ã\81\93ã\81¨ã\81\8cできません。',
+'windows-nonascii-filename' => 'ã\81\93ã\81®wikiã\81§ã\81¯ã\83\95ã\82¡ã\82¤ã\83«å\90\8dã\81«ç\89¹æ®\8aæ\96\87å\97ã\82\92使ç\94¨できません。',
'fileexists' => "この名前のファイルは既に存在しています。置き換えるべきかどうか確信がもてない場合は、'''<tt>[[:$1]]</tt>'''を確認してください。
[[$1|thumb]]",
'filepageexists' => "このファイルのための説明ページは既に'''<tt>[[:$1]]</tt>'''に作成されていますが、現在、ファイルが存在していません。
'fileexists-shared-forbidden' => 'この名前のファイルは共有ファイルリポジトリに既に存在しています。
アップロードを継続したい場合は、前のページに戻り、別のファイル名を使用してください。
[[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => 'このファイルは以下の{{PLURAL:$1|ファイル}}と重複しています:',
+'file-exists-duplicate' => 'このファイルは以下の{{PLURAL:$1|ファイル|ファイル群}}と重複しています:',
'file-deleted-duplicate' => 'このファイル([[:$1]])と同一のファイルが以前に削除されています。
再度アップロードをする前に、以前削除されたファイルの削除記録を確認してください。',
'uploadwarning' => 'アップロード警告',
PICT # その他
#</pre> <!-- この行はそのままにしておいてください -->',
'upload-success-subj' => 'アップロード成功',
-'upload-success-msg' => '[$2]からのアップロードに成功しました。[[:{{ns:file}}:$1]]から利用可能です。',
+'upload-success-msg' => '[$2] からのアップロードに成功しました。こちらで利用できます:[[:{{ns:file}}:$1]]',
'upload-failure-subj' => 'アップロードで発生した問題',
'upload-failure-msg' => '[$2]からのアップロード中に問題が発生しました:
'upload-file-error-text' => '内部エラーのため、サーバー上の一時ファイル作成に失敗しました。
[[Special:ListUsers/sysop|管理者]]に連絡してください。',
'upload-misc-error' => '不明なアップロードのエラー',
-'upload-misc-error-text' => 'アップロード時に不明なエラーが発生しました。
-指定したURLがアクセス可能で有効なものであるかを再度確認してください。
+'upload-misc-error-text' => 'アップロード中に不明なエラーが発生しました。
+指定した URL が正しいこととアクセスできることを確認して、もう一度試してください。
それでもこのエラーが発生する場合は、[[Special:ListUsers/sysop|管理者]]に連絡してください。',
'upload-too-many-redirects' => 'そのURLに含まれるリダイレクトが多すぎます',
'upload-unknown-size' => 'サイズ不明',
'backend-fail-stream' => 'ファイル $1 をストリームできませんでした。',
'backend-fail-backup' => 'ファイル $1 をバックアップできませんでした。',
'backend-fail-notexists' => 'ファイル $1 は存在しません。',
-'backend-fail-notsame' => 'ファイル名 $1 はすでに違うファイルが使用しています。',
+'backend-fail-hashes' => 'ファイルの比較用のハッシュを取得できませんでした。',
+'backend-fail-notsame' => 'ファイル名 $1 は既に他のファイルが使用しています。',
'backend-fail-invalidpath' => '$1 はストレージパスに使用することができません。',
'backend-fail-delete' => 'ファイル $1 を削除できませんでした。',
-'backend-fail-alreadyexists' => 'ファイル $1 はすでに存在します。',
+'backend-fail-alreadyexists' => 'ファイル $1 は既に存在します。',
'backend-fail-store' => 'ファイル $1 を $2 に格納できませんでした。',
'backend-fail-copy' => 'ファイル $1 を $2 にコピーできませんでした。',
'backend-fail-move' => 'ファイル $1 を $2 に移動できませんでした。',
'backend-fail-closetemp' => '一時ファイルを閉じることができませんでした。',
'backend-fail-read' => 'ファイル $1 を読み込めませんでした。',
'backend-fail-create' => 'ファイル $1 を作成できませんでした。',
+'backend-fail-maxsize' => '{{PLURAL:$2|$2 バイト}}よりも大きいため、ファイル「$1」を作成できませんでした。',
'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|操作}}です。',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'ストレージバックエンド「$1」のジャーナルデータベースに接続できません。',
+'filejournal-fail-dbquery' => 'ストレージバックエンド「$1」のジャーナルデータベースを更新できません。',
+
+# Lock manager
+'lockmanager-notlocked' => '「$1」をアンロックできませんでした。ロックはされていません。',
+'lockmanager-fail-closelock' => '「$1」用のロックファイルを閉じることができませんでした。',
+'lockmanager-fail-deletelock' => '「$1」用のロックファイルを削除することができませんでした。',
+'lockmanager-fail-acquirelock' => '「$1」用のロックを取得できませんでした。',
+'lockmanager-fail-openlock' => '「$1」用のロックファイルを開くことができませんでした。',
+'lockmanager-fail-releaselock' => '「$1」用のロックを解放できませんでした。',
+'lockmanager-fail-db-bucket' => 'バケット $1 で十分な数のロックデータベースに接触できませんでした。',
+'lockmanager-fail-db-release' => 'データベース $1 上のロックを解放できませんでした。',
+'lockmanager-fail-svr-release' => 'サーバー $1 上のロックを解放できませんでした。',
# ZipDirectoryReader
'zip-file-open-error' => 'ZIPのチェックを行った際にエラーが検出されました。',
# HTTP errors
'http-invalid-url' => '無効なURL:$1',
-'http-invalid-scheme' => '"$1"のスキームを含むURLはサポートされていません',
+'http-invalid-scheme' => 'スキーム「$1」の URL には未対応です。',
'http-request-error' => '不明なエラーによりHTTPリクエストに失敗しました。',
'http-read-error' => 'HTTP読み込みエラー。',
'http-timed-out' => 'HTTP要求がタイムアウトしました。',
'filehist-comment' => 'コメント',
'filehist-missing' => 'ファイルがみつかりません',
'imagelinks' => 'ファイルの使用状況',
-'linkstoimage' => '以下の{{PLURAL:$1|ページ|$1ページ}}が、このファイルへリンクしています:',
-'linkstoimage-more' => '$1を超える数のページが、このファイルにリンクしています。
-以ä¸\8bã\81®ä¸\80覧ã\81¯ã\80\81ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\83ªã\83³ã\82¯ã\81\97ã\81¦ã\81\84ã\82\8bæ\9c\80å\88\9dã\81®$1ページのみを表示しています。
+'linkstoimage' => 'このファイルへは以下の {{PLURAL:$1|ページ| $1 ページ}}からリンクしています:',
+'linkstoimage-more' => 'このファイルへは $1 を超える数のページからリンクがあります。
+以ä¸\8bã\81®ä¸\80覧ã\81§ã\81¯ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\83ªã\83³ã\82¯ã\81\97ã\81¦ã\81\84ã\82\8bæ\9c\80å\88\9dã\81® $1 ページのみを表示しています。
[[Special:WhatLinksHere/$2|完全な一覧]]も参照してください。',
'nolinkstoimage' => 'このファイルへリンクしているページはありません。',
'morelinkstoimage' => 'このファイルへの[[Special:WhatLinksHere/$1|リンク元を更に]]を表示する。',
'sharedupload' => 'このファイルは$1のものであり、他のプロジェクトで使用されている可能性があります。',
'sharedupload-desc-there' => 'このファイルは$1のものであり、他のプロジェクトで使用されている可能性があります。
詳細は[$2 ファイル解説ページ]を参照してください。',
-'sharedupload-desc-here' => 'このファイルは$1のものであり、他のプロジェクトで使用されている可能性があります。その[$2 ファイル解説ページ]にある説明を以下に表示しています。',
+'sharedupload-desc-here' => 'このファイルは$1から来ており、他のプロジェクトで使用されている可能性があります。
+$1での[$2 ファイル解説ページ]にある説明を以下に示します。',
+'sharedupload-desc-edit' => 'このファイルは$1から来ており、他のプロジェクトで使用されている可能性があります。
+$1での[$2 ファイル解説ページ]にある説明を編集したほうがいいかもしれません。',
+'sharedupload-desc-create' => 'このファイルは$1から来ており、他のプロジェクトで使用されている可能性があります。
+$1での[$2 ファイル解説ページ]にある説明を編集したほうがいいかもしれません。',
'filepage-nofile' => 'この名前のファイルは存在しません。',
'filepage-nofile-link' => 'この名前のファイルは存在しませんが、[$1 アップロード]することができます。',
'uploadnewversion-linktext' => 'このファイルの新しい版をアップロードする',
# Random page
'randompage' => 'おまかせ表示',
-'randompage-nopages' => '次の{{PLURAL:$2|名前空間}}:$1には、ページがありません。',
+'randompage-nopages' => '以下の{{PLURAL:$2|名前空間}}にはページがありません:$1。',
# Random redirect
'randomredirect' => 'おまかせリダイレクト',
'statistics-views-peredit' => '1編集あたりの閲覧回数',
'statistics-users' => '[[Special:ListUsers|利用者]]',
'statistics-users-active' => '活動中の利用者',
-'statistics-users-active-desc' => '過去$1{{PLURAL:$1|日間}}に何らかの操作を行った利用者',
+'statistics-users-active-desc' => '過去 {{PLURAL:$1|$1 日間}}に何らかの操作をした利用者',
'statistics-mostpopular' => '最も閲覧されているページ',
'disambiguations' => '曖昧さ回避ページにリンクしているページ',
'wantedpages' => 'ページが存在しないリンク',
'wantedpages-badtitle' => '結果に不正なページ名が含まれています:$1',
'wantedfiles' => 'ファイル情報ページが存在しないファイル',
+'wantedfiletext-cat' => '下記のファイルは存在していませんが、使われています。外部リポジトリ由来のファイルは存在しているにもかかわらずここに列挙されることがあります。そのような偽陽性は<del>取り消され</del>ます。加えて、存在していないファイルを埋め込んでいるページは[[:$1]]に列挙されます。',
+'wantedfiletext-nocat' => '下記のファイルは存在していませんが、使われています。外部リポジトリ由来のファイルは存在しているにもかかわらずここに列挙されることがあります。そのような偽陽性は<del>取り消され</del>ます。',
'wantedtemplates' => '呼び出し先が存在しないテンプレート呼び出し',
'mostlinked' => '被リンク数の多いページ',
'mostlinkedcategories' => '被リンク数の多いカテゴリ',
'listusers' => '利用者の一覧',
'listusers-editsonly' => '投稿記録のある利用者のみを表示',
'listusers-creationsort' => '作成日順に整列',
-'usereditcount' => '$1回の編集',
+'usereditcount' => '$1{{PLURAL:$1|回の編集}}',
'usercreated' => '$1 $2 に{{GENDER:$3|作成}}',
'newpages' => '新しいページ',
'newpages-username' => '利用者名:',
'speciallogtitlelabel' => '対象(ページまたは利用者):',
'log' => '記録',
'all-logs-page' => 'すべての公開記録',
-'alllogstext' => '{{SITENAME}}の取得可能な記録がまとめて表示されています。
+'alllogstext' => '{{SITENAME}}の取得できる記録をまとめて表示しています。
記録の種類、実行した利用者(大文字小文字は区別)、影響を受けたページ(大文字小文字は区別)による絞り込みができます。',
-'logempty' => '該å½\93ã\81\99ã\82\8bè¨\98é\8c²ã\81\8cã\81¿ã\81¤ã\81\8bã\82\8aã\81¾ã\81\9bã\82\93ã\81§ã\81\97ã\81\9f。',
-'log-title-wildcard' => 'この文字列で始まるページ名を検索する',
+'logempty' => '該å½\93ã\81\99ã\82\8bè¨\98é\8c²ã\81¯ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93。',
+'log-title-wildcard' => 'この文字列で始まるページ名を検索',
# Special:AllPages
'allpages' => '全ページ',
'allpagesbadtitle' => '指定したページ名は無効か、言語間またはウィキ間接頭辞を含んでいます。
ページ名に使用できない文字が1つ以上含まれている可能性があります。',
'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|æ\9cªä½¿ç\94¨ã\81®ã\82«ã\83\86ã\82´ã\83ª]]ã\81¯ã\81\93ã\81\93ã\81«ã\81¯è¡¨ç¤ºã\81\95ã\82\8cていません。
+'categoriespagetext' => '以下の{{PLURAL:$1|カテゴリ}}にはページまたはメディアがあります。
+[[Special:UnusedCategories|æ\9cªä½¿ç\94¨ã\81®ã\82«ã\83\86ã\82´ã\83ª]]ã\81¯ã\81\93ã\81\93ã\81«ã\81¯è¡¨ç¤ºã\81\97ていません。
[[Special:WantedCategories|望まれるカテゴリ]]も参照してください。',
'categoriesfrom' => '最初に表示するカテゴリ:',
'special-categories-sort-count' => '項目数順',
# Special:ActiveUsers
'activeusers' => '活動中の利用者一覧',
-'activeusers-intro' => 'これは過去$1{{PLURAL:$1|日|日間}}になんらかの活動をした利用者の一覧です。',
-'activeusers-count' => '過去$3{{PLURAL:$3|日|日間}}に$1回の{{PLURAL:$1|編集}}',
+'activeusers-intro' => 'これは過去 $1 {{PLURAL:$1|日|日間}}に何らかの活動をした利用者の一覧です。',
+'activeusers-count' => '過去 {{PLURAL:$3|1 日|$3 日間}}に $1 {{PLURAL:$1|回の編集}}',
'activeusers-from' => '最初に表示する利用者:',
'activeusers-hidebots' => 'ボットを隠す',
'activeusers-hidesysops' => '管理者を隠す',
'mailnologin' => '送信アドレスがありません',
'mailnologintext' => '他の利用者宛にメールを送信するためには、[[Special:UserLogin|ログイン]]し、[[Special:Preferences|個人設定]]で有効なメールアドレスを設定する必要があります。',
'emailuser' => 'この利用者にメールを送信',
-'emailpage' => '利用者にメール送信',
-'emailpagetext' => 'ä¸\8bã\81®ã\83\95ã\82©ã\83¼ã\83 ã\82\92é\80\9aã\81\98ã\81¦ã\80\81ã\81\93ã\81®å\88©ç\94¨è\80\85ã\81«ã\83¡ã\83¼ã\83«ã\82\92é\80\81ã\82\8bã\81\93ã\81¨ã\81\8cできます。
-受信者が直接返事を出せるよう、[[Special:Preferences|利用者の個人設定]]で登録した電子メールアドレスがメール中で「差出人」アドレスとして表示されます。',
+'emailpage' => '利用者にメールを送信',
+'emailpagetext' => '以ä¸\8bã\81®ã\83\95ã\82©ã\83¼ã\83 ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\93ã\81®å\88©ç\94¨è\80\85ã\81«ã\83¡ã\83¼ã\83«ã\82\92é\80\81ä¿¡できます。
+[[Special:Preferences|利用者の個人設定]]で入力したメール アドレスが「差出人」に設定され、受信者があなたに直接返信できるようになります。',
'usermailererror' => 'メールが以下のエラーを返しました:',
-'defemailsubject' => '利用者「$1」からの {{SITENAME}} 電子メール',
+'defemailsubject' => '{{SITENAME}} 利用者「$1」からのメール',
'usermaildisabled' => '利用者メール機能は無効になっています',
'usermaildisabledtext' => 'このウィキ上で他の利用者へメールを送ることはできません。',
'noemailtitle' => 'メールアドレスがありません',
'noemailtext' => 'この利用者は有効なメールアドレスを登録していません。',
-'nowikiemailtitle' => '電子メール不許可',
+'nowikiemailtitle' => 'メールは許可されていません',
'nowikiemailtext' => 'この利用者は他の利用者からメールを受け取らない設定にしています。',
'emailnotarget' => '受信者の利用者名が存在しない、あるいは無効です。',
'emailtarget' => '受信者の利用者名を入力してください',
'emailusername' => '利用者名:',
'emailusernamesubmit' => '送信',
-'email-legend' => '{{SITENAME}}の他の利用者に電子メールを送る',
+'email-legend' => '{{SITENAME}} の他の利用者にメールを送信',
'emailfrom' => '差出人:',
'emailto' => '宛先:',
'emailsubject' => '件名:',
'emailsend' => '送信',
'emailccme' => '自分宛に控えを送信する。',
'emailccsubject' => '$1に送信したメールの控え:$2',
-'emailsent' => 'メールを送りました',
-'emailsenttext' => 'ã\83¡ã\83¼ã\83«ã\81¯ç\84¡äº\8bé\80\81ä¿¡ã\81\95ã\82\8cました。',
-'emailuserfooter' => 'この電子メールは$1から$2へ、{{SITENAME}}の「利用者へメールを送信」機能を使って送られました。',
+'emailsent' => 'メールを送信しました',
+'emailsenttext' => 'ã\83¡ã\83¼ã\83«ã\82\92é\80\81ä¿¡ã\81\97ました。',
+'emailuserfooter' => 'このメールは {{SITENAME}} の「利用者にメール送信」機能が、「$1」から「$2」に送信したものです。',
# User Messenger
'usermessage-summary' => 'システムメッセージを残す。',
'watchmethod-list' => 'ウォッチされているページ内の最近の更新を確認中',
'watchlistcontains' => 'ウォッチリストには、$1ページが登録されています。',
'iteminvalidname' => '項目「$1」は問題があります、名前が不正です。',
-'wlnote' => "$3 $4までの{{PLURAL:$2|'''$2'''時間}}になされた'''$1'''件の変更は以下のとおりです。",
+'wlnote' => "$3 $4 までの{{PLURAL:$2|'''$2'''時間}}になされた{{PLURAL:$1|'''$1'''件の変更}}は以下の通りです。",
'wlshowlast' => '次の期間で表示:$1時間、$2日間、$3',
'watchlist-options' => 'ウォッチリストのオプション',
# Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'ウォッチリストに追加しています・・・',
-'unwatching' => 'ウォッチリストから除去しています・・・',
+'watching' => 'ウォッチリストに追加中...',
+'unwatching' => 'ウォッチリストから除去中...',
'watcherrortext' => 'ウォッチリストの「$1」の設定を変更中にエラーが発生しました。',
'enotif_mailer' => '{{SITENAME}} 通知メール',
'changed' => '変更',
'created' => '作成',
'enotif_subject' => '{{SITENAME}}のページ「$PAGETITLE」が$PAGEEDITORによって$CHANGEDORCREATEDされました',
-'enotif_lastvisited' => 'æ\9c\80å¾\8cã\81«é\96²è¦§ã\81\97ã\81\9få¾\8cã\81«è¡\8cã\81ªã\82\8fã\82\8cã\81\9få\85¨ã\81¦ã\81®å¤\89æ\9b´ã\81¯ã\80\81 $1 ã\81§è¦\8bã\82\8bã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99。',
+'enotif_lastvisited' => 'æ\9c\80å¾\8cã\81«é\96²è¦§ã\81\97ã\81¦ä»¥é\99\8dã\81®ã\81\99ã\81¹ã\81¦ã\81®å¤\89æ\9b´ã\81¯ $1 ã\82\92ã\81\94覧ã\81\8fã\81 ã\81\95ã\81\84。',
'enotif_lastdiff' => 'この変更内容を表示するには $1 をご覧ください。',
-'enotif_anon_editor' => '匿名利用者:$1',
+'enotif_anon_editor' => '匿名利用者「$1」',
'enotif_body' => '$WATCHINGUSERNAMEさん
-{{SITENAME}}のページ$PAGETITLEが$PAGEEDITDATEに、$PAGEEDITORによって$CHANGEDORCREATEDされました。現在の版を見るには $PAGETITLE_URL をご覧ください。
+{{SITENAME}}のページ「$PAGETITLE」が$PAGEEDITDATEに、$PAGEEDITORによって$CHANGEDORCREATEDされました。現在の版を見るには $PAGETITLE_URL をご覧ください。
$NEWPAGE
'excontentauthor' => '内容:「$1」(投稿者は「[[Special:Contributions/$2|$2]]」のみ)',
'exbeforeblank' => '白紙化前の内容:「$1」',
'exblank' => '白紙ページ',
-'delete-confirm' => 'ã\80\8c$1ã\80\8dã\81®削除',
+'delete-confirm' => 'ã\80\8c$1ã\80\8dã\82\92削除',
'delete-legend' => '削除',
'historywarning' => "'''警告:'''削除しようとしているページには、約$1版の履歴があります:",
'confirmdeletetext' => 'ページをすべての履歴とともに削除しようとしています。
'cantrollback' => '編集を差し戻せません。
最後の投稿者が、このページの唯一の作者です。',
'alreadyrolled' => 'ページ[[:$1]]の[[User:$2|$2]]([[User talk:$2|トーク]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])による編集を巻き戻せません。
-他の利用者が、すでに編集あるいは巻き戻したためです。
+他の利用者が既に編集または巻き戻しを行ったためです。
このページの最後の編集は[[User:$3|$3]]([[User talk:$3|トーク]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])によるものです。',
'editcomment' => "編集内容の要約:「''$1''」",
'protect-unchain-permissions' => '追加保護オプションをロック解除',
'protect-text' => "ページ「'''$1'''」に対する保護レベルの表示と操作ができます。",
'protect-locked-blocked' => "ブロック中は、保護レベルを変更できません。
-ページ'''$1'''の現在の状態は以下の通りです:",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
'protect-locked-dblock' => "データベースのロックが有効なため、保護レベルを変更できません。
-ページ'''$1'''の現在の状態は以下の通りです:",
+ページ「'''$1'''」の現在の状態は以下の通りです:",
'protect-locked-access' => "アカウントに、ページの保護レベルを変更する権限がありません。
-ページ'''$1'''の現在の状態は以下の通りです:",
-'protect-cascadeon' => 'このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ}}から読み込まれているため、保護されています。
-このページの保護制限を変更することは可能ですが、カスケード保護には影響しません。',
+ページ「'''$1'''」の現在の状態は以下の通りです:",
+'protect-cascadeon' => 'このページは現在、カスケード保護が有効になっている以下の{{PLURAL:$1|ページ|ページ群}}から読み込まれているため、保護されています。
+このページの保護レベルを変更できますが、カスケード保護には影響しません。',
'protect-default' => 'すべての利用者を許可',
'protect-fallback' => '「$1」権限が必要',
'protect-level-autoconfirmed' => '新規利用者と匿名利用者を禁止',
'undeletepage' => '削除されたページの表示と復元',
'undeletepagetitle' => "'''以下は、[[:$1]]の削除された版です'''。",
'viewdeletedpage' => '削除されたページを表示',
-'undeletepagetext' => '以下の{{PLURAL:$1|ã\83\9aã\83¼ã\82¸}}ã\81¯å\89\8aé\99¤ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\81\8cã\80\81ä¿\9då\98ç\89\88ã\81«æ®\8bã\81£ã\81¦ã\81\84ã\82\8bã\81\9fã\82\81ã\80\81復å\85\83ã\81§ã\81\8dã\81¾ã\81\99ã\80\82
+'undeletepagetext' => '以下の{{PLURAL:$1|å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸|å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fã\83\9aã\83¼ã\82¸ç¾¤}}ã\81¯ã\80\81ä¿\9då\98ç\89\88ã\81«æ®\8bã\81£ã\81¦ã\81\84ã\82\8bã\81\9fã\82\81復å\85\83ã\81§ã\81\8dã\81¾ã\81\99ã\80\82
保存版は定期的に消去される可能性があります。',
'undelete-fieldset-title' => '削除された版の復元',
'undeleteextrahelp' => "すべての版を復元する場合は、チェックボックスをどれも選択していない状態で'''''{{int:undeletebtn}}'''''をクリックしてください。
'undeletehistorynoadmin' => 'このページは削除されています。
削除の理由は、削除前にこのページを編集していた利用者の詳細情報と共に、以下に表示されています。
管理者以外の利用者には、削除された各版の本文への制限がかけられています。',
-'undelete-revision' => '$3によるページ$1の$4$5の削除版:',
-'undeleterevision-missing' => '不正な、あるいは存在しない版です。
-間違ったリンクを辿ったか、この版は既に復帰されたか、もしくは保存版から除去された可能性があります。',
+'undelete-revision' => 'ページ「$1」の、$3 が $4 $5 に削除した版:',
+'undeleterevision-missing' => '正しくないまたは存在しない版です。
+間違ったリンクをたどったか、この版は既に復帰されたか、もしくは保存版から除去された可能性があります。',
'undelete-nodiff' => 'これより前の版はありません。',
'undeletebtn' => '復元',
'undeletelink' => '閲覧/復元',
'badipaddress' => '不正なIPアドレス',
'blockipsuccesssub' => 'ブロックしました',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]]をブロックしました。<br />
-[[Special:BlockList|投稿ブロック中の利用者やIPアドレス]]を参照してください。',
+[[Special:BlockList|ブロックの一覧]]を参照してください。',
'ipb-blockingself' => '自分自身をブロックしようとしています。本当に実行しますか。',
'ipb-confirmhideuser' => '利用者名の秘匿を有効にしてブロックしようとしています。実行すると、すべてのリストやログにおいて利用者名が非表示になります。本当にこれでよろしいですか。',
'ipb-edit-dropdown' => 'ブロック理由を編集する',
'unblocklink' => 'ブロックを解除',
'change-blocklink' => '設定を変更',
'contribslink' => '投稿記録',
-'emaillink' => '電子メールを送る',
+'emaillink' => 'メールを送信',
'autoblocker' => '使用中のIPアドレスが「[[User:$1|$1]]」に使用されたため、自動ブロックされています。
$1のブロックの理由は「$2」です。',
'blocklogpage' => 'ブロック記録',
'ipb_expiry_temp' => '利用者名秘匿のブロックは、無期限ブロックになります。',
'ipb_hide_invalid' => 'このアカウントを秘匿できません。編集回数が非常に多いためだと思われます。',
'ipb_already_blocked' => '「$1」は既にブロックされています',
-'ipb-needreblock' => '$1は、すでにブロックされています。
-設定を変更しますか?',
+'ipb-needreblock' => '$1 は既にブロックされています。設定を変更しますか?',
'ipb-otherblocks-header' => 'その他の{{PLURAL:$1|ブロック}}',
'unblock-hideuser' => '利用者名が隠されているため、この利用者のブロックを解除できません。',
-'ipb_cant_unblock' => 'エラー:ブロックID$1が見つかりません。
+'ipb_cant_unblock' => 'エラー:ブロック ID $1 がありません。
ブロックが既に解除されている可能性があります。',
'ipb_blocked_as_range' => 'エラー:IPアドレス$1は直接ブロックされておらず、ブロックを解除できませんでした。
ただし、$2の範囲でブロックされており、こちらの設定を変更することでブロック解除できます。',
'lockdbsuccesstext' => 'データベースはロックされました。<br />
メンテナンスが完了したら、忘れずに[[Special:UnlockDB|ロックを除去]]してください。',
'unlockdbsuccesstext' => 'データベースのロックは解除されました。',
-'lockfilenotwritable' => 'データベースのロックファイルは書き込み不可です。
-データベースをロックまたは解除するには、ウェブサーバーにより書き込み可能である必要があります。',
+'lockfilenotwritable' => 'データベースのロック ファイルが書き込み禁止です。
+データベースをロックまたはロック解除するには、ウェブ サーバーがこれに書き込める必要があります。',
'databasenotlocked' => 'データベースはロックされていません。',
'lockedbyandtime' => '($1 が $2 $3 から)',
変更前のページへのリダイレクトは自動的に修正することができます。
自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。リンクを正しく維持するのはあなたの責任です。
-移動先がすでに存在する場合には、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
+移動先が既に存在する場合は、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
'''注意!'''
よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期せぬ結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。",
自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
つながるべき場所にリンクがつながるよう維持するのは移動した人の責任です。
-移動先がすでに存在する場合には、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。
+移動先が既に存在する場合は、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。
つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
'''警告!'''
手動で統合してください。'''",
'movedto' => '移動先:',
'movetalk' => '付随するトークページも移動',
-'move-subpages' => '下位ページも移動する($1ページまで)',
-'move-talk-subpages' => 'トークページの下位ページも移動する($1個まで)',
-'movepage-page-exists' => 'ページ$1は既に存在するため、自動的に上書きされませんでした。',
-'movepage-page-moved' => 'ページ$1は$2へ移動されました。',
-'movepage-page-unmoved' => 'ページ$1は$2へ移動できませんでした。',
-'movepage-max-pages' => '自動的に移動できる{{PLURAL:$1|ページ}}は $1件までで、それ以上は移動されません。',
+'move-subpages' => '下位ページも移動($1ページまで)',
+'move-talk-subpages' => 'トークページの下位ページも移動($1個まで)',
+'movepage-page-exists' => 'ページ「$1」は既に存在するため、自動的な上書きはできませんでした。',
+'movepage-page-moved' => 'ページ「$1」は「$2」に移動しました。',
+'movepage-page-unmoved' => 'ページ「$1」は「$2」に移動できませんでした。',
+'movepage-max-pages' => '自動的に移動できるのは $1 {{PLURAL:$1|ページ}}までで、それ以上は移動されません。',
'movelogpage' => '移動記録',
-'movelogpagetext' => '以下は全てのページ移動の一覧です。',
+'movelogpagetext' => '以下はすべてのページ移動の一覧です。',
'movesubpage' => '{{PLURAL:$1|下位ページ}}',
-'movesubpagetext' => 'このページには、以下に示す$1下位ページがあります。',
+'movesubpagetext' => 'このページには{{PLURAL:$1|下位ページ}}が以下の $1 件あります。',
'movenosubpage' => 'このページに下位ページはありません。',
'movereason' => '理由:',
'revertmove' => '差し戻し',
-'delete_and_move' => '削除して移動する',
+'delete_and_move' => '削除して移動',
'delete_and_move_text' => '== 削除が必要です ==
移動先「[[:$1]]」は既に存在しています。
移動するためにこのページを削除しますか?',
-'delete_and_move_confirm' => 'ページを削除します',
+'delete_and_move_confirm' => 'ã\81¯ã\81\84ã\80\81ã\83\9aã\83¼ã\82¸ã\82\92å\89\8aé\99¤ã\81\97ã\81¾ã\81\99',
'delete_and_move_reason' => '「[[$1]]」からの移動のために削除',
'selfmove' => '移動元と移動先のページ名が同じです。
自分自身へは移動できません。',
'allmessagesname' => '名前',
'allmessagesdefault' => '既定のメッセージ文',
'allmessagescurrent' => '現在のメッセージ文',
-'allmessagestext' => 'これはMediaWiki名前空間で利用可能なシステムメッセージの一覧です。
-一般的なMediaWikiの地域化に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation MediaWikiの地域化]や[//translatewiki.net?setlang=ja translatewiki.net]を訪れてみてください。',
+'allmessagestext' => 'これは MediaWiki 名前空間で利用できるシステム メッセージの一覧です。
+MediaWiki 全般のローカライズ(地域化)に貢献したい場合は、[//www.mediawiki.org/wiki/Localisation/ja MediaWiki のローカライズ] や [//translatewiki.net?setlang=ja translatewiki.net] をご覧ください。',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''が無効なので、このページを使うことはできません。",
'allmessages-filter-legend' => '絞り込み',
'allmessages-filter' => '変更状態により絞り込む:',
'thumbnail_error' => 'サムネイルの作成中にエラーが発生しました:$1',
'djvu_page_error' => 'DjVuページが範囲外です',
'djvu_no_xml' => 'DjVuファイルのXMLデータを取得できません',
+'thumbnail-temp-create' => '一時的なサムネイルファイルを作成できません',
+'thumbnail-dest-create' => 'サムネイルを保存先に保存できません',
'thumbnail_invalid_params' => 'サムネイル引数が不正です',
'thumbnail_dest_directory' => '出力ディレクトリを作成できません',
'thumbnail_image-type' => '対応していない画像形式です',
'import' => 'ページデータの取り込み',
'importinterwiki' => 'ウィキ間移動の取り込み',
'import-interwiki-text' => '取り込むウィキとページ名を選択してください。
-版の日付と編集者ã\81®å\90\8då\89\8dã\81¯ä¿\9dæ\8c\81ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82
-全てのウィキ間移動取り込みの操作は[[Special:Log/import|取り込み記録]]に記録されます。',
+版の日付と編集者å\90\8dã\81¯ä¿\9dæ\8c\81ã\81\95ã\82\8cã\81¾ã\81\99ã\80\82
+ウィキ間移動のすべての取り込み操作は[[Special:Log/import|取り込み記録]]に記録されます。',
'import-interwiki-source' => '取り込み元のウィキ/ページ:',
'import-interwiki-history' => 'このページのすべての版を複製する',
'import-interwiki-templates' => 'すべてのテンプレートを含める',
'import-comment' => 'コメント:',
'importtext' => '元のウィキで[[Special:Export|書き出し機能]]を使ってファイルに書き出してください。
それをコンピューターに保存した後、こちらへアップロードしてください。',
-'importstart' => 'ã\83\9aã\83¼ã\82¸ã\82\92å\8f\96ã\82\8aè¾¼ã\82\93ã\81§ã\81\84ã\81¾ã\81\99ã\83»ã\83»ã\83»',
+'importstart' => 'ã\83\9aã\83¼ã\82¸ã\82\92å\8f\96ã\82\8aè¾¼ã\81¿ä¸...',
'import-revision-count' => '$1版',
'importnopages' => '取り込むページがありません。',
-'imported-log-entries' => '$1件の{{PLURAL:$1|記録項目}}を取り込みました。',
+'imported-log-entries' => '$1 件の{{PLURAL:$1|記録項目}}を取り込みました。',
'importfailed' => '取り込みに失敗しました:<nowiki>$1</nowiki>',
'importunknownsource' => '取り込み元のタイプが不明です',
'importcantopen' => '取り込みファイルが開けませんでした',
'import-invalid-interwiki' => '指定されたウィキから取り込めませんでした。',
'import-error-edit' => 'あなたにそのページを編集する許可がないため、ページ「$1」は取り込まれませんでした。',
'import-error-create' => 'あなたにそのページを作成する許可がないため、ページ「$1」は取り込まれませんでした。',
+'import-error-interwiki' => '名前が外部リンク (interwiki) に予約されているためページ「$1」をインポートしませんでした。',
+'import-error-special' => 'ページ「$1」は、ページが許可されない特別名前空間に属しているためインポートしません。',
+'import-error-invalid' => '名前が正しくないため、ページ「$1」をインポートしませんでした。',
# Import log
'importlogpage' => '取り込み記録',
# JavaScriptTest
'javascripttest' => 'JavaScript をテスト中',
'javascripttest-disabled' => 'この機能はこのウィキでは有効にされていません。',
+'javascripttest-title' => '$1 のテストの実行',
+'javascripttest-pagetext-noframework' => 'このページは JavaScript のテストを実行するために予約されています。',
+'javascripttest-pagetext-unknownframework' => '未知のテストフレームワーク「$1」。',
+'javascripttest-pagetext-frameworks' => '次のテストフレームワークからひとつを選択してください:$1',
+'javascripttest-pagetext-skins' => 'テストを実行する外装を選択してください:',
+'javascripttest-qunit-intro' => 'mediawiki.org上の[$1 テストのドキュメント]を参照してください。',
+'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit テストスイート',
# Tooltip help for the actions
'tooltip-pt-userpage' => '自分の利用者ページ',
'tooltip-feed-rss' => 'このページのRSSフィード',
'tooltip-feed-atom' => 'このページのAtomフィード',
'tooltip-t-contributions' => 'この利用者の投稿の一覧を表示',
-'tooltip-t-emailuser' => 'この利用者に電子メールを送信',
+'tooltip-t-emailuser' => 'この利用者にメールを送信',
'tooltip-t-upload' => 'ファイルをアップロード',
'tooltip-t-specialpages' => '特別ページの一覧',
'tooltip-t-print' => 'このページの印刷用ページ',
'group-bureaucrat.js' => '/* ここにあるすべてのJavaScriptは、ビューロクラットのみに対して読み込まれます */',
# Metadata
-'notacceptable' => 'ウィキサーバーは、使用中のクライアントが読める形式での情報を、提供できません。',
+'notacceptable' => 'ウィキサーバーは、ご使用中のクライアントが読める形式では情報を提供できません。',
# Attribution
'anonymous' => '{{SITENAME}}の匿名{{PLURAL:$1|利用者}}',
-'siteuser' => '{{SITENAME}}の利用者:$1',
-'anonuser' => '{{SITENAME}}の匿名利用者:$1',
+'siteuser' => '{{SITENAME}}の利用者 $1',
+'anonuser' => '{{SITENAME}}の匿名利用者 $1',
'lastmodifiedatby' => 'このページの最終更新は $1 $2 に $3 によって行われました。',
-'othercontribs' => 'また、最終更新以前に $1 が編集しました。',
+'othercontribs' => 'また、最終更新より前に $1 が編集しました。',
'others' => 'その他',
-'siteusers' => '{{SITENAME}}の{{PLURAL:$2|利用者}}$1',
+'siteusers' => '{{SITENAME}}の{{PLURAL:$2|利用者}} $1',
'anonusers' => '{{SITENAME}}の匿名{{PLURAL:$2|利用者}} $1',
'creditspage' => 'ページの帰属表示',
'nocredits' => 'このページに対する帰属情報がありません。',
'spamprotectiontitle' => 'スパム防御フィルター',
'spamprotectiontext' => '保存しようとした文章はスパムフィルターによってブロックされました。
これはおそらく、ブラックリストにある外部サイトへのリンクが原因で発生します。',
-'spamprotectionmatch' => '以ä¸\8bã\81¯ã\80\81ã\82¹ã\83\91ã\83 ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81\8cç\99ºå\8b\95ã\81\97ã\81\9fæ\96\87ç« です:$1',
+'spamprotectionmatch' => '以ä¸\8bã\81®æ\96\87ç« ã\81¯ã\82¹ã\83\91ã\83 ã\83\95ã\82£ã\83«ã\82¿ã\83¼ã\81\8cç\99ºå\8b\95ã\81\97ã\81\9fã\82\82ã\81®です:$1',
'spambot_username' => 'MediaWikiスパム除去',
'spam_reverting' => '$1へのリンクを含まない最新の版に差し戻し',
'spam_blanking' => 'すべての版が$1へのリンクを含んでいます。白紙化します。',
'imagemaxsize' => "画像のサイズ制限:<br />''(ファイルページに対する)''",
'thumbsize' => 'サムネイルの大きさ:',
'widthheight' => '$1 × $2',
-'widthheightpage' => '$1×$2、$3ページ',
+'widthheightpage' => '$1×$2、$3 {{PLURAL:$3|ページ}}',
'file-info' => 'ファイルサイズ:$1、MIMEタイプ:$2',
-'file-info-size' => '$1×$2ピクセル、ファイルサイズ:$3、MIMEタイプ:$4',
-'file-info-size-pages' => '$1 × $2 ピクセル、ファイルサイズ: $3、MIMEタイプ: $4、$5ページ{{PLURAL:$5}}。',
+'file-info-size' => '$1×$2 ピクセル、ファイルサイズ:$3、MIMEタイプ:$4',
+'file-info-size-pages' => '$1×$2 ピクセル、ファイルサイズ:$3、MIMEタイプ:$4、$5 {{PLURAL:$5|ページ}}',
'file-nohires' => '高解像度版はありません。',
-'svg-long-desc' => 'SVGファイル、$1×$2ピクセル、ファイルサイズ:$3',
+'svg-long-desc' => 'SVG ファイル、$1×$2 ピクセル、ファイルサイズ:$3',
'show-big-image' => '高解像度での画像',
-'show-big-image-preview' => 'このプレビューのサイズ: $1。',
-'show-big-image-other' => 'その他の{{PLURAL:$2|解像度}}: $1。',
-'show-big-image-size' => '$1 × $2 ピクセル',
+'show-big-image-preview' => 'このプレビューのサイズ:$1。',
+'show-big-image-other' => 'その他の{{PLURAL:$2|解像度}}:$1。',
+'show-big-image-size' => '$1×$2 ピクセル',
'file-info-gif-looped' => 'ループします',
-'file-info-gif-frames' => '$1フレーム',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|フレーム}}',
'file-info-png-looped' => '繰り返し',
-'file-info-png-repeat' => '$1回再生しました',
-'file-info-png-frames' => '$1フレーム',
+'file-info-png-repeat' => '$1 {{PLURAL:$1|回再生しました}}',
+'file-info-png-frames' => '$1 {{PLURAL:$1|フレーム}}',
# Special:NewFiles
'newimages' => '新しいファイルのギャラリー',
-'imagelisttext' => "以下は、$2で並び替えられた'''$1'''ファイルの一覧です。",
-'newimages-summary' => 'この特別ページでは最近、アップロードされたファイルを表示します。',
+'imagelisttext' => "以下は、'''$1'''ファイルの$2で並び替えられた一覧です。",
+'newimages-summary' => 'この特別ページでは、最近アップロードされたファイルを表示します。',
'newimages-legend' => '絞り込み',
-'newimages-label' => 'ã\83\95ã\82¡ã\82¤ã\83«å\90\8dï¼\88ã\82\82ã\81\97ã\81\8fはその一部):',
+'newimages-label' => 'ã\83\95ã\82¡ã\82¤ã\83«å\90\8dï¼\88ã\81¾ã\81\9fはその一部):',
'showhidebots' => '(ボットを$1)',
'noimages' => '表示できるものがありません。',
'ilsubmit' => '検索',
# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
'video-dims' => '$1、 $2 × $3',
-'seconds' => '{{PLURAL:$1|$1秒}}',
-'minutes' => '{{PLURAL:$1|$1分}}',
-'hours' => '{{PLURAL:$1|$1時間}}',
-'days' => '{{PLURAL:$1|$1日}}',
+'seconds' => '{{PLURAL:$1|$1 秒}}',
+'minutes' => '{{PLURAL:$1|$1 分}}',
+'hours' => '{{PLURAL:$1|$1 時間}}',
+'days' => '{{PLURAL:$1|$1 日}}',
'ago' => '$1前',
# Bad image list
'exif-scenecapturetype-2' => '人物',
'exif-scenecapturetype-3' => '夜景',
-'exif-gaincontrol-0' => '無し',
+'exif-gaincontrol-0' => 'なし',
'exif-gaincontrol-1' => '弱い増感',
'exif-gaincontrol-2' => '強い増感',
'exif-gaincontrol-3' => '弱い減感',
# Pseudotags used for GPSAltitudeRef
'exif-gpsaltitude-above-sealevel' => '海抜 $1 {{PLURAL:$1|メートル}}',
-'exif-gpsaltitude-below-sealevel' => 'æµ·æ\8a\9cã\83\9eã\82¤ã\83\8aã\82¹ $1 {{PLURAL:$1|メートル}}',
+'exif-gpsaltitude-below-sealevel' => 'æ°´é\9d¢ä¸\8b $1 {{PLURAL:$1|メートル}}',
'exif-gpsstatus-a' => '測位中',
-'exif-gpsstatus-v' => '未測位(中断中)',
+'exif-gpsstatus-v' => '未測位(中断中)',
-'exif-gpsmeasuremode-2' => '2次元測位中',
-'exif-gpsmeasuremode-3' => '3次元測位中',
+'exif-gpsmeasuremode-2' => '2 次元測位中',
+'exif-gpsmeasuremode-3' => '3 次元測位中',
# Pseudotags used for GPSSpeedRef
-'exif-gpsspeed-k' => 'キロメール/時',
+'exif-gpsspeed-k' => 'ã\82ã\83ã\83¡ã\83¼ã\83\88ã\83«/æ\99\82',
'exif-gpsspeed-m' => 'マイル/時',
'exif-gpsspeed-n' => 'ノット',
'exif-gpsdop-fair' => '中程度 ($1)',
'exif-gpsdop-poor' => '劣悪 ($1)',
-'exif-objectcycle-a' => '午前中のみ',
+'exif-objectcycle-a' => '午前のみ',
'exif-objectcycle-p' => '午後のみ',
'exif-objectcycle-b' => '午後と午前の両方',
'exif-iimcategory-wea' => '天気',
'exif-urgency-normal' => '通常 ($1)',
-'exif-urgency-low' => '低い ($1)',
-'exif-urgency-high' => '高い ($1)',
+'exif-urgency-low' => '低 ($1)',
+'exif-urgency-high' => '高 ($1)',
'exif-urgency-other' => '利用者定義の優先度 ($1)',
# External editor support
$5
この確認用コードは、$4に期限切れになります。',
-'confirmemail_body_changed' => 'だれかが、IPアドレス$1から
-{{SITENAME}}でアカウント「$2」の電子メールアドレスをこのアドレスに変更しました。
+'confirmemail_body_changed' => '誰か(おそらくあなた)が IP アドレス $1 から、
+{{SITENAME}} のアカウント「$2」のメール アドレスをこのアドレスに変更しました。
-このアカウントが本当に自分のものであるならば、
-{{SITENAME}}のメール機能を再び有効化にするために、以下のURLをブラウザーで開いてください:
+このアカウントが本当にあなたのものであれば、以下のリンクをブラウザーで開いて、
+{{SITENAME}} のメール機能を再び有効にしてください:
$3
-もし自分のアカウントでない場合は、
-次のURLをブラウザーで開いて、電子メール確認を中止してください:
+もしあなたのアカウント *ではない* 場合は、
+ブラウザーで以下のリンクを開いて、メール アドレスの確認をキャンセルしてください:
$5
-この確認用コードは$4に期限切れになります。',
-'confirmemail_body_set' => 'だれかが、IPアドレス$1から
-{{SITENAME}}でアカウント「$2」の電子メールアドレスをこのアドレスに設定しました。
+この確認コードは $4 に期限切れになります。',
+'confirmemail_body_set' => '誰か(おそらくあなた)が IP アドレス $1 から
+{{SITENAME}} のアカウント「$2」のメール アドレスをこのアドレスに設定しました。
-このアカウントが本当に自分のものであるならば、
-{{SITENAME}}のメール機能を再び有効化にするために、以下のURLをブラウザーで開いてください:
+このアカウントが本当にあなたのものであれば、以下のリンクをブラウザーで開いて、
+{{SITENAME}} のメール機能を再び有効にしてください。
$3
-もし自分のアカウントでない場合は、
-次のURLをブラウザーで開いて、電子メール確認を中止してください:
+もしあなたのアカウントでない場合は、
+次のリンクをブラウザーで開いて、メール アドレスの確認をキャンセルしてください:
$5
-この確認用コードは$4に期限切れになります。',
+この確認コードは $4 に期限切れになります。',
'confirmemail_invalidated' => 'メールアドレスの確認が中止されました',
'invalidateemail' => 'メールアドレスの認証中止',
'size-gigabytes' => '$1ギガバイト',
# Live preview
-'livepreview-loading' => '読み込み中・・・',
-'livepreview-ready' => '読み込み中・・・完了!',
+'livepreview-loading' => '読み込み中...',
+'livepreview-ready' => '読み込み中...完了!',
'livepreview-failed' => 'ライブプレビューが失敗しました!
通常のプレビューを試してください。',
'livepreview-error' => '接続に失敗しました:$1「$2」。
ページ名を除去するには、横にあるボックスにチェックを入れ、「{{int:watchlistedit-normal-submit}}」をクリックしてください。
また、[[Special:EditWatchlist/raw|そのままの一覧で編集]]することもできます。',
'watchlistedit-normal-submit' => 'ページの除去',
-'watchlistedit-normal-done' => 'ウォッチリストから $1{{PLURAL:$1|件}}を削除しました:',
+'watchlistedit-normal-done' => 'ウォッチリストから $1 {{PLURAL:$1|件}}を削除しました:',
'watchlistedit-raw-title' => 'ウォッチリストをそのまま編集',
'watchlistedit-raw-legend' => 'ウォッチリストをそのまま編集',
'watchlistedit-raw-explain' => 'ウォッチリストに含まれるページ名が以下に表示されており、この一覧から追加や除去できます。
'version-software' => 'インストール済みソフトウェア',
'version-software-product' => '製品',
'version-software-version' => 'バージョン',
+'version-entrypoints' => 'エントリー ポイントの URL',
+'version-entrypoints-header-entrypoint' => 'エントリー ポイント',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath 記事のパス]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath スクリプト パス]',
# Special:FilePath
'filepath' => 'ファイルパス',
'fileduplicatesearch-legend' => '重複の検索',
'fileduplicatesearch-filename' => 'ファイル名:',
'fileduplicatesearch-submit' => '検索',
-'fileduplicatesearch-info' => '$1×$2ピクセル<br />ファイルサイズ:$3<br />MIMEタイプ:$4',
+'fileduplicatesearch-info' => '$1×$2 ピクセル<br />ファイルサイズ:$3<br />MIMEタイプ:$4',
'fileduplicatesearch-result-1' => 'ファイル「$1」と重複するファイルはありません。',
'fileduplicatesearch-result-n' => 'ファイル「$1」は$2件のファイルと重複しています。',
'fileduplicatesearch-noresults' => '「$1」という名前のファイルがみつかりません。',
'tags-description-header' => '詳細な意味の説明',
'tags-hitcount-header' => 'タグが付与された変更',
'tags-edit' => '編集',
-'tags-hitcount' => '$1回の変更',
+'tags-hitcount' => '$1 {{PLURAL:$1|回の変更}}',
# Special:ComparePages
'comparepages' => 'ページの比較',
'compare-selector' => 'ページの版を比較',
-'compare-page1' => 'ページ1',
-'compare-page2' => 'ページ2',
-'compare-rev1' => '版1',
-'compare-rev2' => '版2',
-'compare-submit' => '比較する',
+'compare-page1' => 'ページ 1',
+'compare-page2' => 'ページ 2',
+'compare-rev1' => '版 1',
+'compare-rev2' => '版 2',
+'compare-submit' => '比較',
'compare-invalid-title' => '指定したページ名は使用できません。',
'compare-title-not-exists' => '指定されたページは存在しません。',
'compare-revision-not-exists' => '指定された版は存在しません。',
# New logging system
'logentry-delete-delete' => '$1 がページ「$3」を削除しました',
'logentry-delete-restore' => '$1 がページ「$3」を復帰しました',
-'logentry-delete-event' => '$1 が$3で{{PLURAL:$5|記録項目|$5件の記録項目}}の閲覧レベルを変更しました: $4',
-'logentry-delete-revision' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\81§{{PLURAL:$5|ç\89\88|$5å\80\8bã\81®ç\89\88}}ã\81®é\96²è¦§ã\83¬ã\83\99ã\83«ã\82\92å¤\89æ\9b´ã\81\97ã\81¾ã\81\97ã\81\9f: $4',
-'logentry-delete-event-legacy' => '$1 が$3で記録項目の閲覧レベルを変更しました',
+'logentry-delete-event' => '$1が$3の{{PLURAL:$5|記録項目| $5 件の記録項目}}の閲覧レベルを変更しました:$4',
+'logentry-delete-revision' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\81®{{PLURAL:$5|ç\89\88| $5 å\80\8bã\81®ç\89\88}}ã\81®é\96²è¦§ã\83¬ã\83\99ã\83«ã\82\92å¤\89æ\9b´ã\81\97ã\81¾ã\81\97ã\81\9fï¼\9a$4',
+'logentry-delete-event-legacy' => '$1 が「$3」の記録項目の閲覧レベルを変更しました',
'logentry-delete-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを変更しました',
'logentry-suppress-delete' => '$1 がページ「$3」を隠蔽しました',
-'logentry-suppress-event' => '$1 が$3で{{PLURAL:$5|記録項目|$5件の記録項目}}の閲覧レベルを見えない形で変更しました: $4',
-'logentry-suppress-revision' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\81§{{PLURAL:$5|ç\89\88|$5å\80\8bã\81®ç\89\88}}ã\81®é\96²è¦§ã\83¬ã\83\99ã\83«ã\82\92è¦\8bã\81\88ã\81ªã\81\84å½¢ã\81§å¤\89æ\9b´ã\81\97ã\81¾ã\81\97ã\81\9f: $4',
+'logentry-suppress-event' => '$1 が「$3」の{{PLURAL:$5|記録項目| $5 件の記録項目}}の閲覧レベルを見えない形で変更しました:$4',
+'logentry-suppress-revision' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\81®{{PLURAL:$5|ç\89\88| $5 å\80\8bã\81®ç\89\88}}ã\81®é\96²è¦§ã\83¬ã\83\99ã\83«ã\82\92è¦\8bã\81\88ã\81ªã\81\84å½¢ã\81§å¤\89æ\9b´ã\81\97ã\81¾ã\81\97ã\81\9fï¼\9a$4',
'logentry-suppress-event-legacy' => '$1 が$3で記録項目の閲覧レベルを見えない形で変更しました',
'logentry-suppress-revision-legacy' => '$1 がページ「$3」の版の閲覧レベルを見えない形で変更しました',
'revdelete-content-hid' => '本文の不可視化',
'revdelete-uname-unhid' => '利用者名の可視化',
'revdelete-restricted' => '管理者に対する制限の適用',
'revdelete-unrestricted' => '管理者に対する制限の除去',
-'logentry-move-move' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\80\8c$4ã\80\8dã\81¸ã\81¨移動しました',
-'logentry-move-move-noredirect' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\80\8c$4ã\80\8dã\81¸ã\81¨、リダイレクトを残さずに移動しました',
-'logentry-move-move_redir' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\80\8c$4ã\80\8dã\81¸ã\81¨移動しました',
-'logentry-move-move_redir-noredirect' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\80\8c$4ã\80\8dã\81¸ã\81¨、リダイレクトを残さずに移動しました',
-'logentry-patrol-patrol' => '$1 がページ「$3」の版 $4をパトロール済みとしました',
-'logentry-patrol-patrol-auto' => '$1 がページ「$3」の版 $4を自動的にパトロール済みとしました',
+'logentry-move-move' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\80\8c$4ã\80\8dã\81«移動しました',
+'logentry-move-move-noredirect' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\80\8c$4ã\80\8dã\81«、リダイレクトを残さずに移動しました',
+'logentry-move-move_redir' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\80\8c$4ã\80\8dã\81«移動しました',
+'logentry-move-move_redir-noredirect' => '$1 ã\81\8cã\83\9aã\83¼ã\82¸ã\80\8c$3ã\80\8dã\82\92ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ã\80\8c$4ã\80\8dã\81«、リダイレクトを残さずに移動しました',
+'logentry-patrol-patrol' => '$1 がページ「$3」の版 $4 をパトロール済みとしました',
+'logentry-patrol-patrol-auto' => '$1 が自動的にページ「$3」の版 $4 をパトロール済みとしました',
'logentry-newusers-newusers' => '$1 が利用者アカウントを作成しました',
'logentry-newusers-create' => '$1 が利用者アカウントを作成しました',
'logentry-newusers-create2' => '$1 が利用者アカウント「$3」を作成しました',
'logentry-newusers-autocreate' => 'アカウント「$1」が自動的に作成されました',
-'newuserlog-byemail' => 'パスワードを電子メールで送信しました',
+'newuserlog-byemail' => 'パスワードをメールで送信しました',
# Feedback
'feedback-bugornote' => '技術的な問題の詳細をご説明する準備ができているなら[$1 バグを報告]してください。それ以外の場合、下の簡易フォームを使用すれば、あなたのコメントが"[$3 $2]"にあなたの利用者名と使用中のブラウザ名と共に追加されます。',
'feedback-error3' => 'エラー:APIからの応答がありません',
'feedback-thanks' => 'ありがとうございます。あなたのフィードバックは「[$2 $1]」のページに投稿されました。',
'feedback-close' => '完了',
-'feedback-bugcheck' => 'Great! [$1 既出のバグ]にすでに含まれていないかチェックしてください。',
+'feedback-bugcheck' => 'Great! [$1 既出のバグ]に既に含まれていないか確認してください。',
'feedback-bugnew' => 'チェック済み。バグを報告する。',
# API errors
'api-error-badaccess-groups' => 'このウィキへのファイルのアップロードが許可されていません。',
'api-error-badtoken' => '内部エラー:トークンが不正です。',
'api-error-copyuploaddisabled' => 'URLによるアップロードはこのサーバーでは無効になっています。',
-'api-error-duplicate' => '当ウェブサイト上には、既に同じ内容の[$2 別ファイル]が存在しています{{PLURAL:$1|}}。',
-'api-error-duplicate-archive' => '同じ内容で既に削除済みの{{PLURAL:$1|[$2 別のファイルが]|[$2 別のファイルがいくつか]}}サイト上にあります。',
-'api-error-duplicate-archive-popup-title' => 'すでに削除された重複{{PLURAL:$1|ファイル|ファイル}}',
-'api-error-duplicate-popup-title' => 'é\87\8dè¤\87ã\83\95ã\82¡ã\82¤ã\83«{{PLURAL:$1|}}',
+'api-error-duplicate' => '当ウェブサイト上には、既に同じ内容の{{PLURAL:$1|[$2 他のファイル]が|[$2 他のファイルがいくつか]}}存在しています。',
+'api-error-duplicate-archive' => '同じ内容で既に削除済みの{{PLURAL:$1|[$2 他のファイル]が|[$2 他のファイルがいくつか]}}サイト上にあります。',
+'api-error-duplicate-archive-popup-title' => '重複した{{PLURAL:$1|ファイル|ファイル群}}は削除済みです。',
+'api-error-duplicate-popup-title' => 'é\87\8dè¤\87ã\81\97ã\81\9f{{PLURAL:$1|ã\83\95ã\82¡ã\82¤ã\83«|ã\83\95ã\82¡ã\82¤ã\83«ç¾¤}}',
'api-error-empty-file' => '送信されたファイルは空でした。',
'api-error-emptypage' => '内容がないページの新規作成は許可されていません。',
'api-error-fetchfileerror' => '内部エラー:ファイルの取得中に問題が発生しました。',
'api-error-unclassified' => '不明なエラーが発生しました。',
'api-error-unknown-code' => '不明なエラー:「$1」',
'api-error-unknown-error' => '内部エラー:ファイルのアップロードの途中で問題が発生しました。',
-'api-error-unknown-warning' => '原因不明の警告:$1',
-'api-error-unknownerror' => '原因不明のエラー: 「$1」',
+'api-error-unknown-warning' => '不明な警告:「$1」',
+'api-error-unknownerror' => '不明なエラー:「$1」',
'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|0 年}}',
+'duration-centuries' => '$1 {{PLURAL:$1|世紀}}',
+'duration-millennia' => '$1{{PLURAL:$1|,000 年}}',
+
);
# Suppression log
'suppressionlog' => 'დამალვათა ჟურნალი',
'suppressionlogtext' => 'ქვემოთ მოცემულია წაშლისა და ბლოკირებების სია, რომელიც მოიცავს ადმინისტრატორებისაგან დაფარულ მასალებს.
-იხილეთ [[Special:BlockList|IP ბლოკირებების სიაში]] მიმდინარე ბლოკირებები.',
+იხილეთ [[Special:BlockList|ბლოკირებების სიაში]] მიმდინარე ბლოკირებები.',
# History merging
'mergehistory' => 'გვერდების ისტორიის შერწყმა',
'backend-fail-contenttype' => 'ფაილის შემადგენლობის ტიპის დადგენა ვერ მოხერხდა, "$1"-ში შესანახად.',
'backend-fail-batchsize' => 'საცავმა მიიღო {{PLURAL:$1|ფაილის ოპერაციის|ფაილების ოპერაციების}} ბლოკი $1-დან, შეზღუდვა შეადგენს $2 {{PLURAL:$1|ოპერაციას}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'ჟურნალის მონაცემთა ბაზებთან დაკავშირება "$1" მონაცემთა შესანახად ვერ მოხერხდა.',
'filejournal-fail-dbquery' => 'ჟურნალის მონაცემთა ბაზებთან დაკავშირება "$1" მონაცემთა განახლებისათვის ვერ მოხერხდა.',
'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|კატეგორია შეიცავს|კატეგორია შეიცავს}} გვერდს ან მედიას.
'badipaddress' => 'არასწორი IP მისამართი',
'blockipsuccesssub' => 'ბლოკირება შესრულებულია',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] ბლოკირებულ იქნა.<br />
-á\83\98á\83®á\83\98á\83\9aá\83\94á\83\97 [[Special:BlockList|á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83£á\83\9aá\83\98 IP á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\94á\83\91á\83\98á\83¡ á\83¡á\83\98á\83\90]].',
+იხილეთ [[Special:BlockList|ბლოკირებების სია]].',
'ipb-blockingself' => 'თქვენ აპირებთ დაბლოკოთ საკუთარი თავი! დარწმუნებული ხართ, რომ გსურთ ამის გაკეთება?',
'ipb-confirmhideuser' => 'თქვენ აპირებთ მომხმარებლის დაბლოკვას და ჩართული გაქვთ ოპცია „დამალე მომხმარებელი“. ასეთი ქმედება აღკვეთს მომხმარებლის სახელს ყველა სიიდან და ჟურნალების ჩანაწერებიდან. დარწმუნებული ხართ, რომ ამის გაკეთება გსურთ?',
'ipb-edit-dropdown' => 'დაბლოკვის მიზეზების რედაქტირება',
დაბლოკვათა ჟურნალი ქვემოთ მოყვანილია:',
'blocklogentry' => 'დაიბლოკა [[$1]]. ბლოკირების ვადა $2 $3.',
'reblock-logentry' => 'შეასწორა ბლოკირების კონფიგურაცია [[$1]]-სთვის, ვადა გასდის $2 $3',
-'blocklogtext' => 'ეს არის მომხმარებლების დაბლოკვის და განბლოკვის ჟურნალი. ავტომატურად დაბლოკილი IP მისამართები არაა ჩამოთვლილი. იხილეთ [[Special:BlockList|IP ბლოკირების სია]] მიმდინარე დაბლოკვებისთვის.',
+'blocklogtext' => 'ეს არის მომხმარებლების დაბლოკვის და განბლოკვის ჟურნალი.
+ავტომატურად დაბლოკილი IP მისამართები არაა ჩამოთვლილი.
+იხილეთ [[Special:BlockList|ბლოკირებების სია]] მიმდინარე დაბლოკვებისთვის.',
'unblocklogentry' => 'ბლოკი მოხსნილია $1',
'block-log-flags-anononly' => 'მხოლოდ ანონიმური მომხმარებლები',
'block-log-flags-nocreate' => 'ანგარიშის შექმნა გამორთულია',
'version-software' => 'დაინსტალირებული პროგრამული უზრუნველყოფა',
'version-software-product' => 'პროდუქტი',
'version-software-version' => 'ვერსია',
+'version-entrypoints' => 'შესვლის წერტილის URL-ები',
+'version-entrypoints-header-entrypoint' => 'შესვლის წერტილი',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath გზა სტატიისაკენ]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath გზა სკრიპტისაკენ]',
# Special:FilePath
'filepath' => 'გზა ფაილისდამი',
'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|საუკუნე|საუკუნე}}',
+'duration-millennia' => '$1 {{PLURAL:$1|ათასწლეული|ათასწლეული}}',
+
);
* @author Agurzil
* @author Agzennay
* @author Azwaw
+ * @author Mmistmurt
* @author Teak
* @author Urhixidur
*/
'tog-editsection' => 'Eǧǧ abeddel n umur s yizdayen [beddel]',
'tog-editsectiononrightclick' => 'Eǧǧ abeddel n umur mi wekkiɣ ɣef uyeffus<br /> ɣef yizwal n umur (JavaScript)',
'tog-showtoc' => 'Ssken agbur (i isebtar i yesɛan kter n 3 izwalen)',
-'tog-rememberpassword' => 'Cfu ɣef yisem n wemseqdac inu di uselkim-agi (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'tog-rememberpassword' => 'Cfu ɣef yisem n umseqdac inu di uselkim-agi (i afellay n $1 {{PLURAL:$1|ass|ussan}})',
'tog-watchcreations' => 'Rnu isebtar i xelqeɣ deg wumuɣ n uɛessi inu',
'tog-watchdefault' => 'Rnu isebtar i ttbeddileɣ deg wumuɣ n uɛessi inu',
'tog-watchmoves' => 'Rnu isebtar i smimḍeɣ deg wumuɣ n uɛessi inu',
'tog-minordefault' => 'Rcem akk ibeddlen am ibeddlen ifessasen d ameslugen',
'tog-previewontop' => 'Ssken pre-timeẓriwt uqbel tankult ubeddel',
'tog-previewonfirst' => 'Ssken pre-timeẓriwt akk d ubeddel amezwaru',
-'tog-nocache' => 'Kkes lkac n usebter',
+'tog-nocache' => 'Ekkes lkac n usebter',
'tog-enotifwatchlistpages' => "Azen-iyi-d e-mail m'ara yettubeddel asebter i ttɛassaɣ",
'tog-enotifusertalkpages' => 'Azen-iyi-d e-mail asmi sɛiɣ izen amaynut',
'tog-enotifminoredits' => 'Azen-iyi-d e-mail ma llan ibeddlen ifessasen',
'tog-enotifrevealaddr' => 'Ssken e-mail inu asmi yettwazen email n talɣut',
'tog-shownumberswatching' => 'Ssken geddac yellan n yimseqdacen iɛessasen',
-'tog-fancysig' => 'Eǧǧ azmul am yettili (mebla azday otomatik)',
+'tog-fancysig' => 'ǧǧ azmul am yettili (war azday awurman)',
'tog-externaleditor' => 'Sseqdec ambeddel n berra d ameslugen',
'tog-externaldiff' => 'Sseqdec ambeddel n berra iwakken ad ẓreɣ imgerraden',
'tog-showjumplinks' => 'Eǧǧ izdayen "neggez ar"',
'underline-default' => 'Browser/Explorateur ameslugen',
# Dates
-'sunday' => 'Lḥedd',
-'monday' => 'Letnayen',
-'tuesday' => 'Ttlata',
-'wednesday' => 'Larebɛa',
-'thursday' => 'Lexmis',
-'friday' => 'Lǧemɛa',
-'saturday' => 'Ssebt',
-'sun' => 'Lḥedd',
-'mon' => 'Letnayen',
-'tue' => 'Ttlata',
-'wed' => 'Larebɛa',
-'thu' => 'Lexmis',
-'fri' => 'Lǧemɛa',
-'sat' => 'Ssebt',
+'sunday' => 'Ačer',
+'monday' => 'Arim',
+'tuesday' => 'Aram',
+'wednesday' => 'Ahad',
+'thursday' => 'Amhad',
+'friday' => 'Sem',
+'saturday' => 'Sed',
+'sun' => 'Ače',
+'mon' => 'Ari',
+'tue' => 'Ara',
+'wed' => 'Aha',
+'thu' => 'Amh',
+'fri' => 'Sem',
+'sat' => 'Sed',
'january' => 'Yennayer',
'february' => 'Furar',
'march' => 'Meɣres',
-'april' => 'Ibrir',
+'april' => 'Yebrir',
'may_long' => 'Mayu',
'june' => 'Yunyu',
'july' => 'Yulyu',
'august' => 'Ɣuct',
-'september' => 'Ctember',
+'september' => 'Ctamber',
'october' => 'Tuber',
'november' => 'Wamber',
-'december' => 'Jember',
+'december' => 'Dujamber',
'january-gen' => 'Yennayer',
'february-gen' => 'Furar',
'march-gen' => 'Meɣres',
-'april-gen' => 'Ibrir',
+'april-gen' => 'Yebrir',
'may-gen' => 'Mayu',
'june-gen' => 'Yunyu',
'july-gen' => 'Yulyu',
'august-gen' => 'Ɣuct',
-'september-gen' => 'Ctember',
+'september-gen' => 'Ctamber',
'october-gen' => 'Tuber',
'november-gen' => 'Wamber',
-'december-gen' => 'Jember',
-'jan' => 'Yennayer',
-'feb' => 'Ibrir',
-'mar' => 'Meɣres',
-'apr' => 'Ibrir',
-'may' => 'Mayu',
-'jun' => 'Yunyu',
-'jul' => 'Yulyu',
-'aug' => 'Ɣuct',
-'sep' => 'Ctember',
-'oct' => 'Tuber',
-'nov' => 'Wamber',
-'dec' => 'Jember',
+'december-gen' => 'Dujamber',
+'jan' => 'Yen',
+'feb' => 'Fur',
+'mar' => 'Meɣ',
+'apr' => 'Yeb',
+'may' => 'May',
+'jun' => 'Yun',
+'jul' => 'Yul',
+'aug' => 'Ɣuc',
+'sep' => 'Cta',
+'oct' => 'Tub',
+'nov' => 'Wam',
+'dec' => 'Duj',
# Categories related messages
'pagecategories' => '{{PLURAL:$1|Taggayt|Taggayin}}',
'subcategories' => 'Taggayin tizellumin',
'category-media-header' => 'Media deg taggayt "$1"',
'category-empty' => "''Taggayt-agi d tilemt.''",
+'hidden-categories' => '{{PLURAL:$1|Taggayt yeffren|Taggayin yeffren}}',
+'hidden-category-category' => 'Taggayin yeffren',
+'category-subcat-count' => 'Taggayt agi tesɛa {{PLURAL:$2|adu-taggayt|$2 adu-taggayin, ɣef ayed {{PLURAL:$1|t-agi|t-igi $1}}}} ddaw agi.',
+'category-subcat-count-limited' => 'Taggayt agi tesɛa {{PLURAL:$1|adu-taggayt agi|tid $1 adu-taggayin agi}} ddaw-agi.',
+'category-article-count' => 'Taggayt agi tesɛa {{PLURAL:$2|asebter agi|$2 isebtaren, ɣef ayed {{PLURAL:$1|t-agi|t-igi $1}} ddaw-agi}}.',
+'category-file-count' => 'Taggayt agi tesɛa {{PLURAL:$2|afaylu agi|$2 ifuyla, ɣef ayed {{PLURAL:$1|t-agi|t-igi $1}} ddaw-agi}}.',
+'listingcontinuesabbrev' => 'asartu',
+'noindex-category' => 'Asebter agi ur d-yerna ara deg umatar',
'about' => 'Awal ɣef...',
'article' => 'Ayen yella deg usebter',
'faq' => 'Isteqsiyen',
'faqpage' => 'Project:Isteqsiyen',
+# Vector skin
+'vector-action-addsection' => 'Rnud ameggay',
+'vector-action-delete' => 'Mḥu',
+'vector-action-move' => 'Smimeḍ',
+'vector-action-protect' => 'Mmesten',
+'vector-view-create' => 'Snulfu',
+'vector-view-edit' => 'Ẓẓiẓreg',
+'vector-view-history' => 'Ẓeṛ amazray',
+'vector-view-view' => 'Ɣer',
+'vector-view-viewsource' => 'Ẓer aɣbalu',
+'actions' => 'Tigawtin',
+'namespaces' => 'Talluntin n isemawen',
+'variants' => 'Tineḍwa',
+
'errorpagetitle' => 'Agul',
'returnto' => 'Uɣal ar $1.',
'tagline' => 'Seg {{SITENAME}}',
'permalink' => 'Azday ur yettbeddil ara',
'print' => 'Imprimi',
'edit' => 'Beddel',
+'create' => 'Snulfu',
'editthispage' => 'Beddel asebter-agi',
'delete' => 'Mḥu',
'deletethispage' => 'Mḥu asebter-agi',
'protect' => 'Ḥrez',
'protect_change' => 'beddel tiḥḥerzi',
'protectthispage' => 'Ḥrez asebter-agi',
-'unprotect' => 'fakk tiḥḥerzi',
-'unprotectthispage' => 'Fakk tiḥḥerzi n usebter-agi',
+'unprotect' => 'Beddel amesten',
+'unprotectthispage' => 'Beddel amesten n usebter-agi',
'newpage' => 'Asebter amaynut',
'talkpage' => 'Mmeslay ɣef usebter-agi',
'talkpagelinktext' => 'Mmeslay',
'aboutsite' => 'Awal ɣef {{SITENAME}}',
'aboutpage' => 'Project:Awal ɣef...',
'copyright' => 'Tzemreḍ ad twaliḍ ayen yella deg $1.',
+'copyrightpage' => '{{ns:project}}:Izerfanɣel',
'currentevents' => 'Isallen',
'currentevents-url' => 'Project:Isallen',
'disclaimers' => 'Iɣtalen',
'youhavenewmessagesmulti' => 'Tesɛiḍ iznan imaynuten deg $1',
'editsection' => 'beddel',
'editold' => 'beddel',
+'viewsourceold' => 'ẓeṛ aɣbalu',
+'editlink' => 'beddel',
+'viewsourcelink' => 'ẓeṛ aɣbalu',
'editsectionhint' => 'Beddel amur: $1',
'toc' => 'Agbur',
'showtoc' => 'Ssken',
'restorelink' => '{{PLURAL:$1|Yiwen abeddel yettumḥan|$1 Ibeddlen yettumḥan}}',
'feedlinks' => 'Asuddem:',
'feed-invalid' => 'Anaw n usuddem mačči ṣaḥiḥ.',
+'site-atom-feed' => 'Taneflit Atom n $1',
+'page-atom-feed' => 'Taneflit Atom n "$1"',
+'red-link-title' => '$1 (ulac asebter)',
# Short words for each namespace, by default used in the namespace tab in monobook
'nstab-main' => 'Amagrad',
'nstab-user' => 'Asebter n wemseqdac',
'nstab-media' => 'Asebter n media',
-'nstab-special' => 'Uslig',
+'nstab-special' => 'Asebter uslig',
'nstab-project' => 'Awal ɣef...',
'nstab-image' => 'Afaylu',
'nstab-mediawiki' => 'Izen',
'readonlytext' => 'Database d tamsekkert, ahat tettuseggem, qrib ad tuɣal-d.
Win (anedbal) isekker-itt yenna-d: $1',
+'missing-article' => 'Taffa n isefka ur t-ufa ara aḍris n yiwen usebter ilaq at af, s-isem « $1 » $2.
+
+Umata, wagi yeḍra mi neḍfeṛ azday ɣer yiwen diff aqbur naɣ ɣer amazray n usebter yemḥan.
+
+Ma mačči d-tajṛut agi, ihi d-taniwit deg uhil.
+Ilaq ad εeggenem yiwen [[Special:ListUsers/sysop|anedbal]] war ad ttum asefkem URL n uzday.',
+'missingarticle-rev' => '(uṭṭun n lqem : $1)',
'readonly_lag' => 'Database d tamsekkert (weḥdes) axaṭer kra n serveur ɛeṭṭlen',
'internalerror' => 'Agul zdaxel',
'filecopyerror' => 'Ur yezmir ara ad yexdem alsaru n ufaylu "$1" ar "$2".',
'yourname' => 'Isem n wemseqdac',
'yourpassword' => 'Awal n tbaḍnit',
'yourpasswordagain' => 'Ɛiwed ssekcem awal n tbaḍnit',
-'remembermypassword' => 'Cfu ɣef wawal n tbaḍnit inu di uselkim-agi (for a maximum of $1 {{PLURAL:$1|day|days}})',
+'remembermypassword' => 'Cfu ɣef wawal n tbaḍnit inu di uselkim-agi (i afellay n $1 {{PLURAL:$1|ass|ussan}})',
'yourdomainname' => 'Taɣult inek',
'externaldberror' => 'Yella ugul aberrani n database neɣ ur tettalaseḍ ara ad tbeddleḍ isem an wemseqdac aberrani inek.',
'login' => 'Kcem',
'logout' => 'Ffeɣ',
'userlogout' => 'Ffeɣ',
'notloggedin' => 'Ur tekcimeḍ ara',
-'nologin' => "Ur tesɛiḍ ara isem n wemseqdac? '''$1'''.",
+'nologin' => "Ur tesɛiḍ ara isem n umseqdac? '''$1'''.",
'nologinlink' => 'Xleq isem n wemseqdac',
'createaccount' => 'Xleq isem n wemseqdac',
'gotaccount' => "Tesɛiḍ yagi isem n wemseqdac? '''$1'''.",
'gotaccountlink' => 'Kcem',
+'userlogin-resetlink' => 'Ettuḍ tilɣa n tuqqna ?',
'createaccountmail' => 's e-mail',
'badretype' => 'Awal n tbaḍnit amezwaru d wis sin mačči d kif-kif.',
'userexists' => 'Isem n wemseqdac yeddem-as amdan wayeḍ. Fren yiwen nniḍen.',
Ma tɣelṭeḍ, wekki kan ɣef tqeffalt "Back/Précédent" n browser/explorateur inek.',
'anontalkpagetext' => "----''Wagi d asebter n umyennan n wemseqdac adrig. Ihi, yessef ad as nefk ID, nesseqdac tansa IP ines akken a t-neɛqel. Tansa IP nni ahat tettuseqdac sɣur aṭṭas n yimdanen. Lukan ula d kečč aqla-k amseqdac adrig u ur tebɣiḍ ara ad tettwabcreḍ izen am wigini, ihi [[Special:UserLogin|xleq isem n wemseqdac neɣ kcem]].''",
'noarticletext' => 'Ulac aḍris deg usebter-agi, tzemreḍ ad [[Special:Search/{{PAGENAME}}|tnadiḍ ɣef wezwel n usebter-agi]] deg isebtar wiyaḍ neɣ [{{fullurl:{{FULLPAGENAME}}|action=edit}} tettbeddileḍ asebter-agi].',
+'noarticletext-nopermission' => 'Imira ulac aḍris deg usebter agi.
+Tzemreḍ [[Special:Search/{{PAGENAME}}|ad nadiḍ ɣef azwel agi]] deg isebtaren nniḍen,
+naɣ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|asebter={{FULLPAGENAMEE}}}} ad nadiḍ deg iɣmisen iqqenen]</span>.',
'clearyourcache' => "'''Tamawt:''' Beɛd asmekti, ahat yessefk ad temḥuḍ lkac n browser/explorateur inek akken teẓriḍ ibeddlen. '''Mozilla / Firefox / Safari:''' qqim twekkiḍ ''Shift'' u wekki ɣef ''Reload/Recharger'', neɣ wekki ɣef ''Ctrl-Shift-R'' (''Cmd-Shift-R'' deg Apple Mac); '''IE:''' qqim twekkiḍ ɣef ''Ctrl'' u wekki ɣef ''Refresh/Actualiser'', neɣ wekki ɣef ''Ctrl-F5''; '''Konqueror:''': wekki kan ɣef taqeffalt ''Reload'', neɣ wekki ɣef ''F5''; '''Opera''' yessefk ad tesseqdceḍ ''Tools→Preferences/Outils→Préférences'' akken ad temḥud akk lkac.",
'usercssyoucanpreview' => "'''Tixidest:''' Sseqdec taqeffalt 'Ssken pre-timeẓriwt' iwakken ad tɛerḍeḍ CSS amynut inek uqbel ad tesmektiḍ.",
'userjsyoucanpreview' => "'''Tixidest:''' Sseqdec taqeffalt 'Ssken pre-timeẓriwt' iwakken ad tɛerḍeḍ JS amynut inek uqbel ad tesmektiḍ.",
'userinvalidcssjstitle' => '\'\'\'Aɣtal:\'\'\' Aglim "$1" ulac-it. Ur tettuḍ ara belli isebtar ".css" d ".js" i txedmeḍ sseqdacen azwel i yesɛan isekkilen imecṭuḥen, s umedya: {{ns:user}}:Foo/vector.css akk d {{ns:user}}:Foo/Vector.css.',
'updated' => '(Yettubeddel)',
'note' => "'''Tamawt:'''",
-'previewnote' => "'''Tagi d pre-timeẓriwt kan, ibeddlen mazal ur ttusmektin ara!'''",
+'previewnote' => "'''Ttagi d azar-timeẓriwt kan, ibeddlen mazal ur ttusmektin ara!'''
+
+'''Cfut, ttagi d azar-timeẓriwt kan.'''
+Ibeddlen mazal ur ttusmektin ara! [[#editform|→ Kemmel abeddel]]",
'previewconflict' => 'Pre-timeẓriwt-agi tesskan aḍris i yellan deg usawen lemmer tebɣiḍ a tt-tesmektiḍ.',
'session_fail_preview' => "'''Suref-aɣ! ur nezmir ara a nesmekti abeddil inek axaṭer yella ugur.
G leɛnayek ɛreḍ tikelt nniḍen. Lukan mazal yella ugur, ffeɣ umbeɛd kcem.'''",
'protectedpagewarning' => "'''AƔTAL: Asebter-agi yettwaḥrez, ala inedbalen zemren a t-beddlen'''",
'semiprotectedpagewarning' => "'''Tamawt:''' Asebter-agi yettwaḥrez, ala imseqdacen i yesɛan isem n wemseqdac zemren a t-beddlen.",
'cascadeprotectedwarning' => "'''Aɣtal:''' Asebter-agi iɛekkel iwakken ad zemren ala inedbalen a t-beddlen, axaṭer yettwassekcem deg isebtar i yettwaḥerzen agi (acercur):",
-'templatesused' => 'Talɣiwin ttuseqdacen deg usebter-agi:',
+'templatesused' => '{{PLURAL:$1|Talɣa i seqdacen|Tilɣatin i seqdacen}} deg usebter agi :',
'templatesusedpreview' => 'Talɣiwin ttuseqdacen deg pre-timeẓriwt-agi:',
'templatesusedsection' => 'Talɣiwin ttuseqdacen deg amur-agi:',
'template-protected' => '(yettwaḥrez)',
'template-semiprotected' => '(nnefṣ-yettwaḥrez)',
+'hiddencategories' => 'Asebter agi yella deg {{PLURAL:$1|Taggayt i ffren|Tiggayin i ffren}} agi :',
'edittools' => '<!-- Aḍris yettbanen-d seddaw talɣa n ubeddil d uzen. -->',
'nocreatetitle' => 'Axleq n isebtar meḥdud',
'nocreatetext' => 'Adeg n internet agi iḥedded axleq n isebtar imaynuten.
Tzemreḍ a d-uɣaleḍ u tbeddleḍ asebter i yellan, neɣ ad [[Special:UserLogin|tkecmeḍ neɣ ad txelqeḍ isem n wemseqdac]].',
+'permissionserrorstext-withaction' => 'Ur sɛiḍ ara ttesriḥ af $2, i {{PLURAL:$1|taɣẓint|tiɣẓinin}} agi :',
+'recreate-moveddeleted-warn' => "'''Ɣur-wet : asebter agi i tebɣam ad snulfum, yetwekkes uqbel.'''
+
+Ilaq ad snulfum asebter agi haca ma i xater. Aɣmis n isebtaren i twekkesen yella ddaw-agi :",
+'moveddeleted-notice' => 'Asebter agi yetwekkes. Aɣmis n isebtaren i twekkesen yella ddaw agi.',
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => 'Ɣur-wet : Asebter agi yesɛa aṭas tilɣatin. Kra n tilɣatin ur zemrent ara ad seqdacent.',
+'post-expand-template-inclusion-category' => 'Isebtaren i sɛan aṭas tilɣatin',
+'post-expand-template-argument-warning' => "'''Ɣur-wet''' : Asebter agi yesɛa tuccḍa deg aɣewwar n yiwet talɣa.",
+'post-expand-template-argument-category' => 'Isebtaren i sɛan iɣewwaren n talɣa ur skazelen ara',
# "Undo" feature
'undo-success' => 'Tzemreḍ ad tessefsuḍ abeddil. Ssenqed asidmer akken ad tessneḍ ayen tebɣiḍ ad txdmeḍ d ṣṣeḥ, umbeɛd smekti ibeddlen u tkemmleḍ ad tessefsuḍ abeddil.',
'viewpagelogs' => 'Ẓer aɣmis n usebter-agi',
'nohistory' => 'Ulac amezruy n yibeddlen i usebter-agi.',
'currentrev' => 'Tasiwelt n tura',
+'currentrev-asof' => 'Azmez n lqem taneggarut d $1',
'revisionasof' => 'Tasiwelt n wass $1',
'revision-info' => 'Tasiwelt n wass $1 sɣur $2',
'previousrevision' => '←Tasiwelt taqdimt',
'histlegend' => 'Axtiri n umgerrad: rcem tankulin akken ad teẓreḍ imgerraden ger tisiwal u wekki ɣef enter/entrée neɣ ɣef taqeffalt deg ukessar.<br />
Tabadut: (tura) = amgirred akk d tasiwelt n tura,
(amgirred) = amgirred akk d tasiwelt ssabeq, M = abeddel afessas.',
+'history-fieldset-title' => 'Inig deg umazray',
+'history-show-deleted' => 'Ekkes kan',
'histfirst' => 'Tikkin timezwura',
'histlast' => 'Tikkin tineggura',
'historysize' => '($1 bytes/octets)',
'revdelete-submit' => 'Eg-it i tasiwelt tettwafren',
'revdelete-success' => "'''Asekkud n tasiwelt yettuxdem.'''",
'logdelete-success' => "'''Asekkud n tamirt yettuxdem.'''",
+'revdel-restore' => 'beddel timezrit',
+'revdel-restore-deleted' => 'allas iqḍeεen',
+'revdel-restore-visible' => 'allas i nezmer an ẓeṛ',
+
+# Merge log
+'revertmerge' => 'Fru',
# Diffs
+'history-title' => 'Amazray n allasen n "$1"',
'difference' => '(Imgerraden ger tisiwal)',
'lineno' => 'Ajerriḍ $1:',
'compareselectedversions' => 'Ẓer imgerraden ger tisiwal i textareḍ',
'editundo' => 'ssefsu',
-'diff-multi' => '({{PLURAL:$1|Yiwen tasiwelt tabusarit|$1 n tisiwal tibusarin}} ur ttumlalent ara.)',
+'diff-multi' => '({{PLURAL:$1|Yiwet tasiwelt tabusarit|$1 n tisiwal tibusarin}} af {{PLURAL:$2|amseqdac|$2 imseqdacen}} {{PLURAL:$1|ur ttumlal ara|ur ttumlalent ara}})',
# Search results
'searchresults' => 'Igmad n unadi',
+'searchresults-title' => 'Igmad n unadi i "$1"',
'searchresulttext' => 'Akken ad tessneḍ amek ara tnadiḍ deg {{SITENAME}}, ẓer [[{{MediaWiki:Helppage}}|{{int:help}}]].',
'searchsubtitle' => "Tnadiḍ ɣef '''[[:$1]]'''",
'searchsubtitleinvalid' => "Tnadiḍ ɣef '''$1'''",
'notextmatches' => 'ulac ayen yecban azwel n usebter',
'prevn' => '{{PLURAL:$1|$1}} ssabeq',
'nextn' => '{{PLURAL:$1|$1}} ameḍfir',
+'prevn-title' => '$1 {{PLURAL:$1|agmud n uqbel|igmad n uqbel}}',
+'nextn-title' => '$1 {{PLURAL:$1|agmud n sakin|igmad n sakin}}',
+'shown-title' => 'Beqqeḍ $1 {{PLURAL:$1|agmud|igmad}} s usebter',
'viewprevnext' => 'Ẓer ($1 {{int:pipe-separator}} $2) ($3).',
+'searchmenu-exists' => "'''Yella asebter s isem \"[[:\$1]]\" deg wiki agi.'''",
+'searchmenu-new' => "'''Snulfud asebter « [[:$1|$1]] » deg wiki agi !'''",
'searchhelp-url' => 'Help:Agbur',
+'searchprofile-articles' => 'Isebtaren n ugbur',
+'searchprofile-project' => 'Isebtaren n tallat dɣa n usenfa',
+'searchprofile-images' => 'Agetmedia',
+'searchprofile-everything' => 'Akk',
+'searchprofile-advanced' => 'Anadi anemhal',
+'searchprofile-articles-tooltip' => 'Nadi deg $1',
+'searchprofile-project-tooltip' => 'Nadi deg $1',
+'searchprofile-images-tooltip' => 'Nadi ifuyla agetmedia',
+'searchprofile-everything-tooltip' => 'Nadi deg akk usmel (ula deg isebtaren n umyannan)',
+'searchprofile-advanced-tooltip' => 'Fren ideggen n isemawen i unadi',
+'search-result-size' => '$1 ({{PLURAL:$2|1 awal|$2 awalen}})',
+'search-result-category-size' => '$1 {{PLURAL:$1|amseqdac|imseqdacen}} $2 ({{PLURAL:$2|adu-taggayt|adu-tiggayin}}, $3 {{PLURAL:$3|afaylu|ifuyla}})',
+'search-redirect' => '(asemmimeḍ $1)',
+'search-section' => '(tigezmi $1)',
+'search-suggest' => 'D awal $1 i tnadiḍ ?',
+'searchrelated' => 'ineqqes',
+'searchall' => 'akk',
'showingresults' => "Tamuli n {{PLURAL:$1|'''Yiwen''' wegmud|'''$1''' n yigmad}} seg #'''$2'''.",
'showingresultsnum' => "Tamuli n {{PLURAL:$3|'''Yiwen''' wegmud|'''$3''' n yigmad}} seg #'''$2'''.",
+'showingresultsheader' => "{{PLURAL:$5|Agmud '''$1'''|Igmad '''$1–$2'''}} n '''$3''' i '''$4'''",
'nonefound' => "'''Tamawt''': S umata, asmi ur tufiḍ acemma
d ilmen awalen am \"ala\" and \"seg\",
awalen-agi mačči deg tasmult, neɣ tefkiḍ kter n yiwen n wawal (ala isebtar
i yesɛan akk awalen i banen-d).",
+'search-nonefound' => 'Ulac igmad i usuter agi.',
'powersearch' => 'Nadi',
'searchdisabled' => 'Anadi deg {{SITENAME}} yettwakkes. Tzemreḍ ad tnadiḍ s Google. Meɛna ur tettuḍ ara, tasmult n google taqdimt.',
'badsig' => 'Azmul mačči d ṣaḥiḥ; Ssenqed tags n HTML.',
'prefs-help-realname' => '* Isem n ṣṣeḥ (am tebɣiḍ): ma textareḍ a t-tefkeḍ, ad yettuseqdac iwakken ad snen medden anwa yura tikkin inek.',
'prefs-help-email' => '* E-mail (am tebɣiḍ): Teǧǧi imseqdacen wiyaḍ a k-aznen email mebla ma ẓren tansa email inek.',
+'prefs-help-email-others' => 'Zemreḍ ad eǧǧeḍ wiyeḍ nniḍen ak(akem) cceqɛen izen deg usebter-ik (im) n umyannan war ad effekeḍ tamagit-ik (im).',
# User rights
'userrights' => 'Laɛej iserfan n wemseqdac',
'rightslogentry' => 'Yettubeddel izerfan n wemseqdac $1 seg $2 ar $3',
'rightsnone' => '(ulaḥedd)',
+# Associated actions - in the sentence "You do not have permission to X"
+'action-edit' => 'beddel asebter agi',
+
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|Abeddel|Ibeddlen}}',
'recentchanges' => 'Ibeddlen imaynuten',
+'recentchanges-legend' => 'Tifranin n ibeddilen imaynuten',
'recentchangestext' => 'Ḍfer ibeddilen imaynuten n {{SITENAME}}.',
'recentchanges-feed-description' => 'Ḍfer ibeddilen imaynuten n wiki-yagi deg usuddem-agi.',
-'rcnote' => "Deg ukessar {{PLURAL:$1|yella '''yiwen''' ubeddel aneggaru|llan '''$1''' n yibeddlen ineggura}} deg {{PLURAL:$2|wass aneggaru|'''$2''' wussan ineggura}}, deg uzemz $3.",
+'recentchanges-label-newpage' => 'Abeddel agi ad yesnulfu asebter amaynut',
+'recentchanges-label-minor' => 'Wagi d-abeddel amectuḥ',
+'recentchanges-label-bot' => 'D-arubut id yeseqdacen abeddel agi',
+'recentchanges-label-unpatrolled' => 'Abeddel agi mazal yesɛa aselken.',
+'rcnote' => "Deg ukessar {{PLURAL:$1|yella '''yiwen''' ubeddel aneggaru|llan '''$1''' n yibeddlen ineggura}} deg {{PLURAL:$2|wass aneggaru|'''$2''' wussan ineggura}}, deg uzemz $5 ass n $4.",
'rcnotefrom' => "Deg ukessar llan ibeddlen seg wasmi '''$2''' (ar '''$1''').",
'rclistfrom' => 'Ssken ibeddlen imaynuten seg $1',
'rcshowhideminor' => '$1 ibeddlen ifessasen',
+'rcshowhidebots' => '$1 irubuten',
'rcshowhideliu' => '$1 n yimseqdacen i ikecmen',
'rcshowhideanons' => '$1 n yimseqdacen udrigen',
'rcshowhidepatr' => '$1 n yibeddlen yettwassenqden',
'hist' => 'Amezruy',
'hide' => 'Ffer',
'show' => 'Ssken',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
'number_of_watching_users_pageview' => '[$1 aɛessas/iɛessasen]',
'rc_categories' => 'Ḥedded i taggayin (ferreq s "|")',
'rc_categories_any' => 'Ulayɣer',
+'rc-enhanced-expand' => 'Ẓeṛ tilɣa (yeḥwaǧ JavaScript)',
+'rc-enhanced-hide' => 'Ffer tilɣa',
# Recent changes linked
'recentchangeslinked' => 'Ibeddlen imaynuten n isebtar myezdin',
'recentchangeslinked-feed' => 'Ibeddlen imaynuten n isebtar myezdin',
'recentchangeslinked-toolbox' => 'Ibeddlen imaynuten n isebtar myezdin',
+'recentchangeslinked-title' => 'Tiḍefri n isebtaren iqqenen ar « $1 »',
'recentchangeslinked-noresult' => 'Ulac abeddel deg isebtar myezdin deg tawala i textareḍ.',
+'recentchangeslinked-summary' => "Asebter uslig agi i sekned ibeddlen imaynuten ɣef isebtaren iqqenen. Isebtaren n [[Special:Watchlist|umuɣ n uḍfar]] llan s '''ufuyan'''.",
+'recentchangeslinked-page' => 'Isen n usebter :',
+'recentchangeslinked-to' => 'Beqqeḍ ibeddilen n isebtareb i sɛan azday ɣer asebter nni wala anemgal',
# Upload
'upload' => 'Azen afaylu',
'fileuploadsummary' => 'Agzul:',
'filestatus' => 'Aẓayer n copyright:',
'filesource' => 'Seg way yekka',
-'uploadedfiles' => 'Ifayluwen yettwaznen',
+'uploadedfiles' => 'Ifuyla yettwaznen',
'ignorewarning' => 'Ttu aɣtal u smekti afaylu',
'ignorewarnings' => 'Ttu iɣtalen',
'illegalfilename' => 'Isem n ufaylu "$1" yesɛa isekkilen ur tettalaseḍ ara a ten-tesseqdceḍ deg yizwal n isebtar. G leɛnayek beddel isem n ufaylu u azen-it tikkelt nniḍen.',
# File description page
'file-anchor-link' => 'Afaylu',
+'filehist' => 'Amazray n tugna',
+'filehist-help' => 'Senned ɣef yiwen azmez d usrag iwakken ad ẓṛeḍ afaylu aken yella deg imir nni.',
+'filehist-revert' => 'Uɣal ar tasiwelt ssabeq',
'filehist-current' => 'Lux a',
+'filehist-datetime' => 'Azmez/Asrag',
+'filehist-thumb' => 'Tugna tamecṭuḥt',
+'filehist-thumbtext' => 'Tugna tamectuḥt i lqem n $1',
'filehist-user' => 'Amseqdac',
+'filehist-dimensions' => 'Iseggiwen',
+'filehist-comment' => 'Awennit',
'imagelinks' => 'Izdayen',
-'linkstoimage' => 'isebtar-agi sɛan azday ar afaylu-agi',
+'linkstoimage' => '{{PLURAL:$1|Asebter agi teseqdac|$1 isebtaren agi teseqdacen}} afaylu agi :',
'nolinkstoimage' => 'Ulaḥedd seg isebtar sɛan azday ar afaylu-agi.',
'sharedupload' => 'Afaylu-yagi yettuseqdac sɣur wiki tiyaḍ.',
+'sharedupload-desc-here' => 'Afaylu agi yusad seg : $1. Ahat yeseqdec deg isenfaṛen nniḍen.
+Aglam-is ɣef [$2 asebter n aglam] ye beqqeḍ ddaw-agi.',
'uploadnewversion-linktext' => 'tazneḍ tasiwelt tamaynut n ufaylu-yagi',
# MIME search
'mostcategories' => 'Isebtar i yesɛan aṭṭas taggayin',
'mostimages' => 'Tugniwin myezdin aṭas',
'mostrevisions' => 'Isebtar i yettubedlen aṭas',
-'prefixindex' => 'Akk isebtar s yisekkilen imezwura',
+'prefixindex' => 'Akk isebtaren s yisekkilen imezwura',
'shortpages' => 'isebtar imecṭuḥen',
'longpages' => 'Isebtar imeqqranen',
'deadendpages' => 'isebtar mebla izdayen',
'protectedpagestext' => 'isebtar-agi yettwaḥerzen seg ubeddel neɣ asemmimeḍ',
'protectedpagesempty' => 'isebtar-agi ttwaḥerzen s imsektayen -agi.',
'listusers' => 'Umuɣ n yimseqdacen',
+'usercreated' => '{{GENDER:$3|Yesnulfu-d}} ass n $1 ar $2',
'newpages' => 'isebtar imaynuten',
'newpages-username' => 'Isem n wemseqdac:',
'ancientpages' => 'isebtar iqdimen',
'unusedcategoriestext' => 'Taggayin-agi weǧden meɛna ulac isebtar neɣ taggayin i sseqdacen-iten.',
'notargettitle' => 'Ulac nnican',
'notargettext' => 'Ur textareḍ ara asebter d nnican neɣ asebter n wemseqdac d nnican.',
+'pager-newer-n' => '{{PLURAL:$1|amaynut|$1 imaynuten}}',
+'pager-older-n' => '{{PLURAL:$1|aqbur|$1 iqburen}}',
# Book sources
'booksources' => 'Iɣbula n yidlisen',
[[Special:UnusedCategories|Unused categories]] are not shown here.
Also see [[Special:WantedCategories|wanted categories]].',
+# Special:LinkSearch
+'linksearch-line' => '$1 yeqqen seg $2',
+
# Special:ListUsers
'listusersfrom' => 'Ssken imseqdacen seg:',
'listusers-submit' => 'Ssken',
'listusers-noresult' => 'Ur yufi ḥedd (amseqdac).',
+# Special:Log/newusers
+'newuserlogpage' => 'Aɣmis n isnulfan n imiḍanen n imseqdacen',
+
+# Special:ListGroupRights
+'listgrouprights-members' => '(umuɣ n imseqdacen)',
+
# E-mail user
'mailnologin' => 'Ur yufi ḥedd (tansa)',
'mailnologintext' => 'Yessefk ad [[Special:UserLogin|tkecmeḍ]] u tesɛiḍ tansa e-mail ṭaṣhiḥt deg [[Special:Preferences|isemyifiyen]] inek
# Watchlist
'watchlist' => 'Umuɣ n uɛessi inu',
'mywatchlist' => 'Umuɣ n uɛessi inu',
+'watchlistfor2' => 'I $1 $2',
'nowatchlist' => 'Umuɣ n uɛessi inek d ilem.',
'watchlistanontext' => 'G leɛnaya-k $1 iwakken ad twalaḍ neɣ tbeddleḍ iferdas deg wumuɣ n uɛessi inek.',
'watchnologin' => 'Ur tekcimeḍ ara',
'unwatchthispage' => 'Fakk aɛassi',
'notanarticle' => 'Mačči d amagrad',
'watchnochange' => 'Ulaḥedd n yiferdas n wumuɣ n uɛessi inek ma yettubeddel deg tawala i textareḍ.',
-'watchlist-details' => 'ttɛassaɣ {{PLURAL:$1|$1 usebter|$1 n isebtar}} mebla isebtar "amyannan".',
+'watchlist-details' => 'ttɛassaɣ {{PLURAL:$1|$1 usebter|$1 n isebtaren}} mebla isebtaren "amyannan".',
'wlheader-enotif' => '* Yeǧǧa Email n talɣut.',
'wlheader-showupdated' => "* Isebtar ttubeddlen segwasmi tkecmeḍ tikelt taneggarut ttbanen-d s '''uḍris aberbuz'''",
'watchmethod-recent' => 'yessenqed ibeddlen imaynuten n isebtar i ttɛasseɣ',
'iteminvalidname' => "Agnu akk d uferdis '$1', isem mačči ṣaḥiḥ...",
'wlnote' => "Deg ukessar {{PLURAL:$1|yella yiwen ubeddel aneggaru|llan '''$1''' n yibeddlen ineggura}} deg {{PLURAL:$2|saɛa taneggarut|'''$2''' swayeɛ tineggura}}.",
'wlshowlast' => 'Ssken $1 n swayeɛ $2 n wussan neɣ $3 ineggura',
+'watchlist-options' => 'Tifranin n umuɣ n uɛessi',
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'Ad iɛass...',
'exblank' => 'asebter yella d ilem',
'historywarning' => 'Aɣtal: Asebter i ara temḥuḍ yesɛa amezruy:',
'actioncomplete' => 'Axdam yekfa',
+'actionfailed' => 'Tigawt agi texser',
'deletedtext' => '"$1" yettumḥa.
Ẓer $2 i aɣmis n yimḥayin imaynuten.',
'dellogpage' => 'Aɣmis n umḥay',
'deletecomment' => 'Ayɣer',
# Rollback
+'rollbacklink' => 'semmet',
'cantrollback' => 'Ur yezmir ara ad yessuɣal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebter-agi.',
'editcomment' => "Agzul n ubeddel yella: \"''\$1''\".",
'revertpage' => 'Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]',
# Undelete
'viewdeletedpage' => 'Ẓer isebtar yettumḥan',
+'undeletelink' => 'ẓeṛ/uɣaled',
+'undeleteviewlink' => 'ẓeṛ',
'undeletecomment' => 'Awennit:',
'undelete-header' => 'Ẓer [[Special:Log/delete|aɣmis n umḥay]] i isebtar ttumḥan tura.',
'undelete-search-box' => 'Nadi ɣef isebtar yettumḥan',
# Contributions
'contributions' => 'Tikkin n wemseqdac',
+'contributions-title' => 'Umuɣ n tikkin n umseqdac $1',
'mycontris' => 'Tikkin inu',
'contribsub2' => 'n $1 ($2)',
'nocontribs' => 'Ur yufi ara abddel i tebɣiḍ.',
'uctop' => '(taneggarut)',
+'month' => 'Seg uggur (d wid uqbel) :',
+'year' => 'Seg useggwas (d wid uqbel) :',
'sp-contributions-newbies' => 'Ssken tikkin n yimseqdacen imaynuten kan',
'sp-contributions-newbies-sub' => 'I yisem yimseqdacen imaynuten',
'sp-contributions-blocklog' => 'Aɣmis n uɛeṭṭil',
+'sp-contributions-uploads' => 'izdamen',
+'sp-contributions-logs' => 'iɣmisen',
'sp-contributions-talk' => 'Mmeslay',
-'sp-contributions-userrights' => 'Laɛej iserfan n wemseqdac',
+'sp-contributions-userrights' => 'Laɛej iserfan n umseqdac',
'sp-contributions-search' => 'Nadi i tikkin',
'sp-contributions-username' => 'Tansa IP neɣ isem n wemseqdac:',
+'sp-contributions-toponly' => 'Sekned kan imagraden i beddeleɣ nekk d-aneggaru',
'sp-contributions-submit' => 'Nadi',
# What links here
'whatlinkshere' => 'Ayen i d-yettawi ɣer da',
+'whatlinkshere-title' => 'Isebtaren i sɛan azday ɣer « $1 »',
+'whatlinkshere-page' => 'Asebter :',
'linkshere' => "Isebtar-agi sɛan azday ɣer '''[[:$1]]''':",
'nolinkshere' => "Ulac asebter i yesɛan azday ɣer '''[[:$1]]'''.",
'nolinkshere-ns' => "Ulac asebter i yesɛan azday ɣer '''[[:$1]]''' deg yisem n taɣult i textareḍ.",
'isredirect' => 'Asebter n usemmimeḍ',
'istemplate' => 'asekcam',
+'isimage' => 'azday ɣer afaylu',
'whatlinkshere-prev' => '{{PLURAL:$1|ssabeq|$1 ssabeq}}',
'whatlinkshere-next' => '{{PLURAL:$1|ameḍfir|$1 imeḍfiren}}',
'whatlinkshere-links' => '← izdayen',
+'whatlinkshere-hideredirs' => '$1 aceggeε ɣer',
+'whatlinkshere-hidetrans' => '$1 aseddu',
+'whatlinkshere-hidelinks' => '$1 izdayen',
+'whatlinkshere-hideimages' => '$1 tugniwin i qqenen',
+'whatlinkshere-filters' => 'Tistaytin',
# Block/unblock
'blockip' => 'Ɛekkel amseqdac',
'ipadressorusername' => 'Tansa IP neɣ isem n wemseqdac',
'ipbreason' => 'Ayɣer',
'ipbsubmit' => 'Ɛekkel amseqdac-agi',
+'ipboptions' => '2 isragen:2 hours,1 ass:1 day,3 ussan:3 days,1 imalas:1 week,2 imulas:2 weeks,1 aggur:1 month,3 igguren:3 months,6 igguren:6 months,1 aseggwas:1 year,afdi:infinite',
'ipbotheroption' => 'nniḍen',
'badipaddress' => 'Tansa IP mačči d ṣaḥiḥ',
+'ipblocklist' => 'imseqdacen isewḥelen',
'ipblocklist-submit' => 'Nadi',
'blocklink' => 'ɛekkel',
+'unblocklink' => 'ekkes asewḥel',
+'change-blocklink' => 'beddel asewḥel',
'contribslink' => 'tikkin',
+'blocklogpage' => 'Aɣmis n isewḥelen',
+'blocklogentry' => 'yesewḥel [[$1]] ; alama : $2 $3',
'block-log-flags-anononly' => 'Imseqdacen udrigen kan',
+'block-log-flags-nocreate' => 'asnulfu n umiḍan yessegdel',
'proxyblockreason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy". G leɛnayek, meslay akk d provider inek.',
'proxyblocksuccess' => 'D ayen.',
'sorbsreason' => 'Tansa n IP inek teɛkel axaṭer nettat "open proxy" deg DNSBL yettuseqdac da.',
'allmessagestext' => 'Wagi d umuɣ n izen n system i yellan deg yisem n taɣult.
Please visit [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] and [//translatewiki.net translatewiki.net] if you wish to contribute to the generic MediaWiki localisation.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' ut yezmir ara ad yettuseqdac axaṭer '''\$wgUseDatabaseMessages''' yettwakkes.",
+'allmessages-language' => 'Tutlayt :',
# Thumbnails
'thumbnail-more' => 'Ssemɣer',
'import-logentry-interwiki-detail' => '$1 tasiwelt(tisiwal) seg $2',
# Tooltip help for the actions
-'tooltip-pt-userpage' => 'Asebter n wemseqdac inu',
+'tooltip-pt-userpage' => 'Asebter n umseqdac inu',
'tooltip-pt-anonuserpage' => 'Asebter n wemseqdac n IP wukud tekkiḍ',
-'tooltip-pt-mytalk' => 'Asebter n wemyannan inu',
+'tooltip-pt-mytalk' => 'Asebter n umyannan inu',
'tooltip-pt-anontalk' => 'Amyannan ɣef yibeddlen n tansa ip-yagi',
'tooltip-pt-preferences' => 'Isemyifiyen inu',
'tooltip-pt-watchlist' => 'Umuɣ n uɛessi n isebtar i ttɛessaɣ',
'tooltip-ca-watch' => 'Rnu asebter-agi i wumuɣ n uɛessi inek',
'tooltip-ca-unwatch' => 'Kkes asebter-agi seg wumuɣ n uɛessi inek',
'tooltip-search' => 'Nadi {{SITENAME}}',
+'tooltip-search-go' => 'Ṛuḥ ɣer usebter i sɛan isem agi ma yella.',
+'tooltip-search-fulltext' => 'Nadi isebtar i sɛan aḍris agi',
'tooltip-p-logo' => 'Asebter amenzawi',
'tooltip-n-mainpage' => 'Ẓer asebter amenzawi',
+'tooltip-n-mainpage-description' => 'Rzu asebter amenzawi',
'tooltip-n-portal' => 'Ɣef usenfar, ayen tzemrḍ ad txedmeḍ, anda tafeḍ tiɣawsiwin',
'tooltip-n-currentevents' => 'Af ayen yeḍran tura',
'tooltip-n-recentchanges' => 'Umuɣ n yibeddlen imaynuten deg wiki.',
'tooltip-feed-atom' => 'Atom feed n usebter-agi',
'tooltip-t-contributions' => 'Ẓer umuɣ n tikkin n wemseqdac-agi',
'tooltip-t-emailuser' => 'Azen e-mail i wemseqdac-agi',
-'tooltip-t-upload' => 'Azen tugna neɣ afaylu nniḍen',
+'tooltip-t-upload' => 'Azen ifuyla',
'tooltip-t-specialpages' => 'Umuɣ n akk isebtar usligen',
+'tooltip-t-print' => 'Lqem tasiggezt n usebter agi',
+'tooltip-t-permalink' => 'Azday ameɣlal ɣer lqem agi n usebter',
'tooltip-ca-nstab-main' => 'Ẓer ayen yellan deg usebter',
'tooltip-ca-nstab-user' => 'Ẓer asebter n wemseqdac',
'tooltip-ca-nstab-media' => 'Ẓer asebter n media',
'tooltip-compareselectedversions' => 'Ẓer amgirred ger snat tisiwlini (i textareḍ) n usebter-agi.',
'tooltip-watch' => 'Rnu asebter-agi i wumuɣ n uɛessi inu',
'tooltip-recreate' => 'Ɛiwed xleq asebter ɣas akken yettumḥu',
+'tooltip-rollback' => '« Semmet » yesemmet s-yiwen asenned akk d-acu amseqdac aneggaru yebeddel deg usebter',
+'tooltip-undo' => '« Ssefsu » yesemmet abeddel agi dɣa i ldi asfaylu n ubeddel deg uskar n azaraskan. I ɛemmed an uɣal ar lqem n uqbel dɣa an rnu taɣẓint deg tanaka n ugzul.',
+'tooltip-summary' => 'Sekcem agzul awezzlan',
# Attribution
'anonymous' => 'Amseqdac udrig (Imseqdacen udrigen) n {{SITENAME}}',
'file-info' => 'tiddi n ufaylu: $1, anaw n MIME: $2',
'file-info-size' => '$1 × $2 pixel, tiddi n ufaylu: $3, anaw n MIME: $4',
'file-nohires' => 'Ulac resolution i tameqqrant fell-as.',
+'svg-long-desc' => 'Afaylu SVG, tabadut n $1 × $2 pixel, lqedd : $3',
'show-big-image' => 'Resolution tameqqrant',
# Special:NewFiles
'bydate' => 's uzemz',
'sp-newimages-showfrom' => 'Ssken tugniwin timaynutin seg $1',
+# Bad image list
+'bad_image_list' => 'Amasal d-wagi :
+
+Ala umuɣen n ismiwar (i bdun s *) ddemen s amiḍan. Azday amezwaru n ujerriḍ ilaq ad yilli win n tugna icmeten.
+Izdayen nniḍen ɣef yiwen ajerriḍ llan d tisuraf, am isebtar ɣef anta tugna tezmer at illi.',
+
+# Metadata
+'metadata' => 'Adferisefka',
+'metadata-help' => 'Afaylu agi, yesɛa tilɣa tisutay, ahat d-tamsaknewt id ernan tilɣa agi. Ma afaylu yebeddel seg addad-is amezwaru, ahat kra n tilɣa ur zemrent ara ad illint d-timekdant s-ufaylu amiran.',
+'metadata-fields' => 'Urtan n adferisefka n tugniwin yellan deg umuɣ n izen agi, ad seddun deg usebter n aglam n tugna mi ṭabla n adferisefka at illi tesemẓi. Urtan nniḍen ad illin ffren m-ulac.
+* make
+* model
+* datetimeoriginal
+* exposuretime
+* fnumber
+* isospeedratings
+* focallength
+* artist
+* copyright
+* imagedescription
+* gpslatitude
+* gpslongitude
+* gpsaltitude',
+
# EXIF tags
'exif-imagewidth' => 'Tehri',
'watchlisttools-edit' => 'Ẓer u beddel umuɣ n uɛessi',
'watchlisttools-raw' => 'Beddel umuɣ n uɛessi (raw)',
+# Core parser functions
+'duplicate-defaultsort' => 'Ɣur-wet : tasarut n ufran m-ulac « $2 » atsefεej tasarut n uqbel « $1 ».',
+
# Special:Version
'version' => 'Tasiwelt',
+'version-specialpages' => 'isebtar usligen',
# Special:SpecialPages
'specialpages' => 'isebtar usligen',
+# External image whitelist
+'external_image_whitelist' => ' #Eǧǧ ajeṛṛiḍ agi aken yella.<pre>
+#Inid tifersa n tinfaliyin timeɣẓanin (ala tama yellan gar //) ddaw-agi.
+#Ad qqenen s URL n tugniwin timniriyin.
+#Tid i qqenen ad beqqeḍent am tugniwin, m-ulac ad i beqqeḍ kan azday ɣer tugna.
+#Ijeṛṛiḍen i bdun s yiwen # ad ilin εqelen am iwenniten.
+#Umuɣ agi ur yeseqdac ara aselken n isekkilen.
+
+#Ger akk tifersa n tinfaliyin timeɣẓanin nnig ajeṛṛiḍ agi. Eǧǧ ajeṛṛiḍ agi aken yella.</pre>',
+
+# Special:Tags
+'tag-filter' => 'Astay n [[Special:Tags|ticraḍ]] :',
+
);
* @ingroup Language
* @file
*
+ * @author Erdemaslancan
* @author Mirzali
*/
'ns-specialprotected' => '{{ns:special}} 네임스페이스의 문서는 편집할 수 없습니다.',
'titleprotected' => '[[User:$1|$1]] 사용자가 문서 생성을 금지했습니다.
이유는 다음과 같습니다. ‘$2’',
-'filereadonlyerror' => '"$2" 파일 저장소가 읽기 전용이라서 "$1" 파일을 변경할 수 없습니다.
+'filereadonlyerror' => '‘$2’ 파일 저장소가 읽기 전용이기 때문에 ‘$1’ 파일을 변경할 수 없습니다.
-ì \9cì\8b\9cë\90\9c ì\9d´ì\9c ë\8a\94 "\'\'$3\'\'"ì\9e\85니다.',
+ì \80ì\9e¥ì\86\8c ê´\80리ì\9e\90ê°\80 í\8c\8cì\9d¼ ì \80ì\9e¥ì\86\8c를 ì\9e ê·¼ ì\9d´ì\9c ì\97\90 ë\8c\80í\95´ "\'\'$3\'\'"ì\9d´ë\9d¼ë\8a\94 ì\84¤ëª\85ì\9d\84 ë\82¨ê²¼ì\8aµ니다.',
# Virus scanner
'virus-badscanner' => "잘못된 설정: 알 수 없는 바이러스 검사기: ''$1''",
'edit-no-change' => '문서에 아무런 변화가 없기 때문에, 당신의 편집은 무시되었습니다.',
'edit-already-exists' => '새 문서를 만들 수 없습니다.
그 문서는 이미 존재합니다.',
+'defaultmessagetext' => '기본 메세지 내용',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''경고:''' 이 문서는 너무 많은 파서 함수를 포함하고 있습니다.
'backend-fail-contenttype' => '"$1"에 저장하기 위한 파일의 내용 유형을 판별하지 못했습니다.',
'backend-fail-batchsize' => '저장 백엔드에서 $1개의 파일 {{PLURAL:$1|작업}}이 쌓여 있습니다; 한계는 $2개입니다.',
+# File journal errors
'filejournal-fail-dbconnect' => '저장소 백엔드 ‘$1’에 대한 저널 데이터베이스에 연결할 수 없습니다.',
'filejournal-fail-dbquery' => '저장소 백엔드 ‘$1’에 대한 저널 데이터베이스에서 갱신할 수 없습니다.',
'version-software' => '설치된 프로그램',
'version-software-product' => '제품',
'version-software-version' => '버전',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => '파일 경로',
'logentry-delete-delete' => '$1 사용자가 $3 문서를 삭제하였습니다.',
'logentry-delete-restore' => '$1 사용자가 $3 문서를 복구하였습니다.',
'logentry-delete-event' => '$1 사용자가 $3의 $5개의 기록에 대해 표시 설정을 바꾸었습니다: $4',
-'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5}}개 편집의 설정을 변경하였습니다: $4',
+'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5}}개 편집의 설정을 변경하였습니다: $4',
'logentry-delete-event-legacy' => '$1 사용자가 $3 문서 기록의 표시 설정을 변경하였습니다.',
'logentry-delete-revision-legacy' => '$1 사용자가 $3 문서 편집의 표시 설정을 변경하였습니다.',
'logentry-suppress-delete' => '$1 사용자가 $3 문서를 숨겼습니다.',
'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|0년}}',
+'duration-centuries' => '$1{{PLURAL:$1|세기}}',
+'duration-millennia' => '$1{{PLURAL:$1|천년}}',
+
);
'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|ёмюр}}',
+'duration-millennia' => '$1 {{PLURAL:$1|мингджыллыкъ}}',
+
);
'allpagesprefix' => 'Monstrare paginas quibus est praeverbium:',
'allpagesbadtitle' => 'Nomen paginae datum fuit invalidum aut praverbium interlinguale vel interviciale habuit. Fortasse insunt una aut plus litterarum quae in titulis non possunt inscribier.',
'allpages-bad-ns' => 'Non est spatium nominale "$1" apud {{grammar:accusative|{{SITENAME}}}}.',
+'allpages-hide-redirects' => 'Celare redirectiones',
# Special:Categories
'categories' => 'Categoriae',
'jul' => 'Jull',
'aug' => 'Ago',
'sep' => 'Set',
-'oct' => 'Ochů',
+'oct' => 'Och',
'nov' => 'Nov',
'dec' => 'Diz',
Dëst geschitt heiandsdo wann Dir en anonyme Proxy-Service um Internet benotzt.",
'edit_form_incomplete' => "'''En Deel vum Ännerungsformulaire koum net um Server un; iwwerpréift w.e.g ob Är Ännerunge komplett sinn a probéiert nach emol.'''",
'editing' => 'Ännere vu(n) $1',
+'creating' => '$1 gëtt ugeluecht',
'editingsection' => 'Ännere vu(n) $1 (Abschnitt)',
'editingcomment' => 'Ännere vu(n) $1 (neien Abschnitt)',
'editconflict' => 'Ännerungskonflikt: $1',
'edit-conflict' => 'Ännerungskonflikt.',
'edit-no-change' => 'Är ännerung gouf ignoréiert, well Dir näischt um Text geännert hutt.',
'edit-already-exists' => 'Déi nei Säit konnt net ugeluecht ginn, well et se scho gëtt.',
+'defaultmessagetext' => 'Standardtext',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Opgepasst:'' Dës Säit huet ze vill Ufroe vu komplexe Parserfunktiounen.
# Suppression log
'suppressionlog' => 'Lëscht vun de verstoppten a geläschte Säiten',
'suppressionlogtext' => 'Ënnendrënner ass eng Lëscht vun de geläschte Säiten a Spären a vun den Administrateuren verstopptem Inhalt.
-Kuckt [[Special:BlockList|Lëscht vun de gespaarten IPen]] fir déi aktuell Spären.',
+Kuckt [[Special:BlockList|Lëscht vun Späre]] fir déi aktuell Spären.',
# History merging
'mergehistory' => 'Historiquë fusionéieren',
'blockipsuccesssub' => 'Gouf gespaart',
'blockipsuccesstext' => "[[Special:Contributions/$1|$1]] gouf gespaart. <br />
-Kuckt d'[[Special:BlockList|IP Spär-Lëscht]] fir all Spären ze gesin.",
+Kuckt d'[[Special:BlockList|Spär-Lëscht]] fir all Spären nozekucken.",
'ipb-blockingself' => 'Dir sidd am gaang Iech selwer ze spären! Sidd Dir sécher datt Dir dat maache wëllt?',
'ipb-confirmhideuser' => 'Dir sidd am gaang e Benotzer ze späre mat der Fonctioun "Benotzer verstoppen" ageschalt. Dëst hëlt den Numm vum Benotzer aus alle Lëschten a Logbicher eraus. Sidd Dir sécher datt Dir dat maache wëllt?',
'ipb-edit-dropdown' => 'Spärgrënn änneren',
'reblock-logentry' => "huet d'Spär vum [[$1]] bis den $2 $3 geännert",
'blocklogtext' => "Dëst ass eng Lëscht vu Spären a vu Spären déi opgehuewe goufen.
Automatesch gespaarten IP-Adresse sinn hei net opgelëscht.
-Kuckt d'[[Special:BlockList|IP Spärlëscht]] fir déi aktuell Spären.",
+Kuckt d'[[Special:BlockList|Spärlëscht]] fir déi aktuell Spären.",
'unblocklogentry' => "huet d'Spär vum $1 opgehuewen",
'block-log-flags-anononly' => 'Nëmmen anonym Benotzer',
'block-log-flags-nocreate' => 'Schafe vu Benotzerkonte gespaart',
'api-error-uploaddisabled' => "D'Eroplueden ass op dëser Wiki ausgeschalt.",
'api-error-verification-error' => 'Dëse Fichier kéint korrupt sinn, oder en huet eng falsch Erweiderung.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|Sekonn|Sekonnen}}',
+'duration-minutes' => '$1 {{PLURAL:$1|Minutt|Minutten}}',
+'duration-hours' => '$1 {{PLURAL:$1|Stonn|Stonnen}}',
+'duration-days' => '$1 {{PLURAL:$1|Dag|Deeg}}',
+'duration-weeks' => '$1 {{PLURAL: $1|Woch|Wochen}}',
+'duration-years' => '$1 {{PLURAL:$1|Joer|Joer}}',
+'duration-decades' => '$1 {{PLURAL:$1|Joerzéngt|Joerzéngten}}',
+'duration-centuries' => '$1 {{PLURAL:$1|Joerhonnert|Joerhonnerten}}',
+'duration-millennia' => '$1 {{PLURAL:$1|Millenaire|Millenairen}}',
+
);
'tog-hideminor' => 'Мукьвара хьайи дегишвилера авай гъвечIи дуьзар хъувунар чуьнуьхун',
'tog-hidepatrolled' => 'Мукьвара хьайи дегишвилера авай къаравулвал авунвай дуьзар хъувунар чуьнуьхун',
'tog-newpageshidepatrolled' => 'ЦIийи ччинрин сиягьда къаравулвал авунвай ччинар чуьнуьхун',
+'tog-extendwatchlist' => 'Чlехи сиягь килигунин, кутазвай вири дегишунар, амма са эхирбур туш',
'tog-usenewrc' => 'ЦIийи дегишвилерин сиягь кардик кутун (JavaScript герекзава)',
'tog-numberheadings' => 'КЬилин цIарариз автоматдаказ номерар эцигун',
'tog-showtoolbar' => 'Дуьзар хъувунин алатрин кьвати къалура (JavaScript)',
'backend-fail-contenttype' => 'Kós \'t inhawdtype van \'t bestnadj óm es "$1" op te slaon neet bepaole.',
'backend-fail-batchsize' => 'Reiks van $1 {{PLURAL:$1|bestandjsoperatie|bestandjsoperaties}} in de opslaagbackend; de limiet is $2 {{PLURAL:$2|operatie|operaties}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Kós neet verbinje mit de journaaldatabase veur de opslaagbackend "$1".',
'filejournal-fail-dbquery' => 'Kós de journaaldatabase neet biewèrke veur de opslaagbackend "$1".',
* @author Dakrismeno
* @author DracoRoboter
* @author Flavio05
+ * @author GatoSelvadego
* @author Insübrich
* @author Kemmótar
* @author Malafaya
'watchlisttools-edit' => 'Varda e mudifega la lista di paginn che te tegnet sut ögg',
'watchlisttools-raw' => 'Mudifega la lista in furmaa test',
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ciciaràde]])',
+
# Special:Version
'version' => 'Versiun',
* @author Kaganer
* @author Matasg
* @author Meno25
+ * @author Ola
* @author Pdxx
* @author Perkunas
* @author Pėstininkas
'userinvalidcssjstitle' => "'''Dėmesio:''' Nėra jokios išvaizdos „$1“. Nepamirškite, kad savo .css ir .js puslapiai naudoja pavadinimą mažosiomis raidėmis, pvz., {{ns:user}}:Foo/vector.css, o ne {{ns:user}}:Foo/Vector.css.",
'updated' => '(Atnaujinta)',
'note' => "'''Pastaba:'''",
-'previewnote' => "'''Nepamirškite, kad tai tik peržiūra, pakeitimai dar nėra išsaugoti!'''",
+'previewnote' => "''Nepamirškite, kad tai tik peržiūra, pakeitimai dar nėra išsaugoti!'''",
'previewconflict' => 'Ši peržiūra parodo tekstą iš viršutiniojo teksto redagavimo lauko taip, kaip jis bus rodomas, jei pasirinksite išsaugoti.',
'session_fail_preview' => "'''Atsiprašome! Mes negalime vykdyti jūsų keitimo dėl sesijos duomenų praradimo.
Prašome pamėginti vėl. Jei tai nepadeda, pamėginkite atsijungti ir prisijungti atgal.'''",
'category-empty' => '"He pawl hian phêk leh media pakhat mah a nei hrih lo."',
'hidden-categories' => 'Pawl thuhrûk {{PLURAL:$1||-te}}',
'hidden-category-category' => 'Pawl thuhrûkte',
-'category-subcat-count' => '{{PLURAL:$2|He pawl hian he pawlpeng chauh hi a nei. |He pawl hian heng: {{PLURAL:$1|pawlpeng|pawlpeng $1-te}} hi a nei, a vaia $2 zingah.}}',
+'category-subcat-count' => '{{PLURAL:$2|He pawl hian he pawlpeng chauh hi a nei. |He pawl hian heng {{PLURAL:$1|pawlpéng|pawlpéng $1-te}} hi a nei, avaia $2 zingah.}}',
'category-subcat-count-limited' => 'He pawl hian hengte hi a ni: {{PLURAL:$1|pawlpeng|$1 pawlpengte}}',
-'category-article-count' => '{{PLURAL:$2|He pawl hian hë phêk chauh hi a nei. | Heng phek{{PLURAL:$1||$1-te}} hi he pawlah hian a awm, a vaia $2 zingah.}}',
+'category-article-count' => '{{PLURAL:$2|He pawl hian hë phêk chauh hi a nei. | Heng phek {{PLURAL:$1||$1-te}} hi he pawlah hian a awm, avaia $2 zingah.}}',
'category-article-count-limited' => '{{PLURAL: $1 |$1He|$1 Heng}} phekte hi hë pawl, i en mékah hian a awm.',
'category-file-count' => '{{PLURAL:$2|He pawl hian hë taksa (file) chauh hi a kengtel.|{{PLURAL:$1|He taksa $1 |Heng taksa $1-te}} hi he pawlah hian a awm, a vaia $2 zingah}}',
'category-file-count-limited' => '{{PLURAL:$1|He taksa (file)|$1Heng taksate}} hi hemi pawl, i en mékah hian a awm.',
'aboutsite' => '{{SITENAME}} chungchang',
'aboutpage' => 'Project:Chungchang',
'copyright' => 'A chhung thute hi $1 hmanga lakchhawn phal a ni.',
-'copyrightpage' => '{{ns:project}}:Lakchhawn phalna',
+'copyrightpage' => '{{ns:project}}:Lakchhawn phalphung',
'currentevents' => 'Chanchin thar',
'currentevents-url' => 'Project: Chanchin thar',
'disclaimers' => 'Intlawhkhalhna',
'edit-conflict' => 'Siamţhat inchuh buaina.',
'edit-already-exists' => 'Phêk thar siam theih a ni lo.
A awm tawh sa.',
+'defaultmessagetext' => 'Thuthawn tùr ziahsa',
# Parser/template warnings
'post-expand-template-inclusion-warning' => "'''Vaukhanna:''' Siamsa telh a lian leh lutuk.
'searcheverything-enable' => 'Hminghmun zawng zawngah zawng rawh',
'searchrelated' => 'laichin',
'searchall' => 'a vaiin',
-'showingresultsheader' => "'''$4''' tana {{PLURAL:$5|chhuak '''$3''' zinga '''$1'''|chhuak '''$3''' zinga '''$1 - $2''' }}",
+'showingresultsheader' => "'''$4''' tana {{PLURAL:$5|chhuak '''$3''' zinga '''$1'''|chhuak '''$3''' zinga '''$1 - $2''' }}",
'search-nonefound' => 'I zawn mil a awm lo',
'powersearch' => 'Zawnna chi sang',
'powersearch-legend' => 'Zawnna chi sang',
'filemissing' => 'Taksa a awm lo',
'thumbnail_error' => 'Zungbï siam hlawhchham: $1',
+# Special:Import
+'import-token-mismatch' => 'Ṭhut chhung hriatrengna hloh hman a ni.
+Khawngaihin tum nawn leh rawh.',
+
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Nangma pual phek',
'tooltip-pt-mytalk' => 'I sawihona phêk',
# Special:Tags
'tag-filter' => '[[Special:Tags|Tag]] thlitfimna:',
+# New logging system
+'logentry-move-move' => '$3 tih phêk kha $4-ah $1 hian a thlâk.',
+'logentry-move-move-noredirect' => 'Hruailuhna phêk hnutchhiah lovin $1-in $3 phêk kha $4-ah a sawn.',
+'logentry-move-move_redir' => 'Hruailuhna chungah $3 phêk kha $4-ah $1 hian a sawn.',
+'logentry-move-move_redir-noredirect' => 'Hruailuhna hnutchhiah lovin $3 phêk kha $4-ah $1 hian a sawn.',
+'logentry-newusers-newusers' => '$1 hian hmangtu siangchan a siam.',
+'logentry-newusers-create' => '$1 hian hmangtu siangchan a siam.',
+'logentry-newusers-create2' => '$1 hian hmangtu siangchan $3 a siam.',
+'logentry-newusers-autocreate' => 'Siangchan $1 hi amahin a insiam.',
+'newuserlog-byemail' => 'thurûk e-lehkha hmanga thawn a ni.',
+
# Feedback
'feedback-subject' => 'Thupui:',
'feedback-message' => 'Thu',
# Suppression log
'suppressionlog' => 'Дневник на сокривања',
'suppressionlogtext' => 'Подолу е прикажан список на бришења и блокирања поврзани со содржини скриени од администратори.
-Тековните забрани и блокирања ќе ги најдете на [[Special:BlockList|списокот на блокирани IP-адреси]].',
+Тековните забрани и блокирања ќе ги најдете на [[Special:BlockList|списокот на блокирања]].',
# History merging
'mergehistory' => 'Спојување на истории на страница',
'backend-fail-contenttype' => 'Не можев да утврдам каква содржина има податотеката што треба да ја складирам во „$1“.',
'backend-fail-batchsize' => 'Складишната основа доби блок од $1 податочна {{PLURAL:$1|операција|операции}}, а ограничувањето е $2 {{PLURAL:$2|операција|операции}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Не можев да се поврзам со дневничката база за складишната основа „$1“.',
'filejournal-fail-dbquery' => 'Не можев да ја подновам дневничката база за складишната основа „$1“.',
'allpages-bad-ns' => 'Википедија не содржи именски простор „$1“.',
'allpages-hide-redirects' => 'Скриј пренасочувања',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Гледате кеширана верзија на оваа страница, која може да е стара $1.',
+'cachedspecial-viewing-cached-ts' => 'Гледате кеширана верзија на оваа страница, која може да се разликува од тековната.',
+'cachedspecial-refresh-now' => 'Погл. најновата.',
+
# Special:Categories
'categories' => 'Категории',
'categoriespagetext' => '{{PLURAL:$1|Следната категорија содржи|Следните категории содржат}} страници или мултимедијални податотеки.
'ipb-confirm' => 'Потврди блок',
'badipaddress' => 'Неважечка IP-адреса',
'blockipsuccesssub' => 'Успешно блокирање',
-'blockipsuccesstext' => 'IP-адресата [[Special:Contributions/$1|$1]] е блокирана.<br />
-[[Special:BlockList|Список на блокирани IP-адреси]].',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] е блокирана.<br />
+Блоковите можете да ги прегледате на [[Special:BlockList|списокот на блокови]].',
'ipb-blockingself' => 'Се спремате да се блокирате самите себеси! Сигурни сте дека го сакате ова?',
'ipb-confirmhideuser' => 'Сакате да блокирате корисник со можноста „скриј корисник“. Ова ќе го затаи името на корисникот во сите списоци и дневнички записи. Дали сте сигурни дека сакате да го направите тоа?',
'ipb-edit-dropdown' => 'Наведи причина за блокирање',
'reblock-logentry' => 'ги промени нагодувањата за блокирање на [[$1]] со рок на истекување од $2 $3',
'blocklogtext' => 'Ова е дневник на блокирање и одблокирање на кориснци.
Автоматски блокираните IP-адреси не се наведени.
-Ð\92идеÑ\82е го [[Special:BlockList|Ñ\81пиÑ\81окоÑ\82 на блокиÑ\80ани IP-адÑ\80еÑ\81и]].',
+ТековниÑ\82е забÑ\80ани и блокиÑ\80аÑ\9aа Ñ\9cе ги наÑ\98деÑ\82е на [[Special:BlockList|Ñ\81пиÑ\81окоÑ\82 на блокиÑ\80аÑ\9aа]].',
'unblocklogentry' => 'го одблокира „$1“',
'block-log-flags-anononly' => 'само анонимни корисници',
'block-log-flags-nocreate' => 'оневозможено создавање кориснички сметки',
'version-software' => 'Инсталирана програмска опрема',
'version-software-product' => 'Производ',
'version-software-version' => 'Верзија',
+'version-entrypoints' => 'URL-а на влезните точки',
+'version-entrypoints-header-entrypoint' => 'Влезна точка',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath?uselang=mk Патека на статијата]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath?uselang=mk Патека на скриптата]',
# Special:FilePath
'filepath' => 'Патека до податотека',
'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' => '{{PLURAL: $1|година|години}}',
+'duration-decades' => '$1 {{PLURAL:$1|деценија|децении}}',
+'duration-centuries' => '$1 {{PLURAL:$1|век|века}}',
+'duration-millennia' => '$1 {{PLURAL:$1|милениум|милениуми}}',
+
);
''$2'' എന്നതാണു അതിനു കാണിച്ചിട്ടുള്ള കാരണം.",
'filereadonlyerror' => 'പ്രമാണ ശേഖരണി "$2" ഇപ്പോൾ "കാണൽ-മാത്രം" വിധത്തിൽ ക്രമീകരിച്ചിരിക്കുന്നതിനാൽ "$1" എന്ന പ്രമാണത്തിൽ മാറ്റം വരുത്താനാകില്ല.
-നൽകിയിരിക്കുന്ന കാരണം "\'\'$3\'\'" എന്നാണ്.',
+ബനàµ\8dധിà´\9aàµ\8dà´\9a à´\95ാരàµ\8dà´¯â\80\8cനിർവാഹà´\95(ൻ) നൽà´\95ിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´\95ാരണà´\82 "\'\'$3\'\'" à´\8eà´¨àµ\8dനാണàµ\8d.',
# Virus scanner
'virus-badscanner' => "തെറ്റായ ക്രമീകരണങ്ങൾ: അപരിചിതമായ വൈറസ് തിരച്ചിൽ ഉപാധി : ''$1''",
'edit-no-change' => 'ഇപ്പോഴുള്ള സ്ഥിതിയിൽ നിന്നു യാതൊരു മാറ്റവും ഇല്ലാത്തതിനാൽ താങ്കളുടെ തിരുത്തലുകൾ തിരസ്കരിക്കപ്പെട്ടിരിക്കുന്നു.',
'edit-already-exists' => 'പുതിയ താൾ സൃഷ്ടിക്കാൻ കഴിഞ്ഞില്ല.
താൾ ഇപ്പോൾ തന്നെ നിലവിലുണ്ട്.',
+'defaultmessagetext' => 'സ്വതേയുള്ള സന്ദേശ എഴുത്ത്',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''മുന്നറിയിപ്പ്:''' ഈ താളിൽ വളരെക്കൂടുതൽ പാഴ്സർ ഫങ്ഷനുകൾ വിളിച്ചിരിക്കുന്നു.
# Suppression log
'suppressionlog' => 'ഒതുക്കൽ രേഖ',
'suppressionlogtext' => 'കാര്യനിർവാഹകരിൽ നിന്നും മറയ്ക്കപ്പെട്ടിട്ടുള്ള മായ്ക്കുകയും തടയുകയും ചെയ്തതുമായ ഉള്ളടക്കങ്ങളുടെ പട്ടിക നൽകിയിരിക്കുന്നു.
-à´\87à´ªàµ\8dà´ªàµ\8bൾ à´\95àµ\88à´\95ാരàµ\8dà´¯à´\82 à´\9aàµ\86à´¯àµ\8dയാൻ പറàµ\8dà´±àµ\81à´¨àµ\8dà´¨ നിരàµ\8bധനà´\99àµ\8dà´\99à´³àµ\81à´\82 à´¤à´\9fയലàµ\81à´\95à´³àµ\81à´\82 à´\95ാണാൻ [[Special:BlockList|à´¤à´\9fയപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9f à´\90.പി. വിലാസà´\99àµ\8dà´\99ൾ]] കാണുക.',
+à´\87à´ªàµ\8dà´ªàµ\8bൾ നിലവിലàµ\81à´³àµ\8dà´³ നിരàµ\8bധനà´\99àµ\8dà´\99à´³àµ\81à´\82 à´¤à´\9fയലàµ\81à´\95à´³àµ\81à´\82 à´\95ാണാൻ [[Special:BlockList|à´¤à´\9fയപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´µ] കാണുക.',
# History merging
'mergehistory' => 'താളുകളുടെ നാൾവഴികൾ സംയോജിപ്പിക്കുക',
# User rights log
'rightslog' => 'ഉപയോക്തൃ അവകാശ രേഖ',
-'rightslogtext' => 'à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\85à´µà´\95ാശà´\99àµ\8dà´\99ൾà´\95àµ\8dà´\95àµ\81à´£àµ\8dà´\9fായ മാറàµ\8dà´±à´\99àµ\8dà´\99ൾ à´\95ാണിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´\92à´°àµ\81 à´²àµ\8bà´\97ാണിത്.',
+'rightslogtext' => 'à´\88 à´ªàµ\8dരവർതàµ\8dതനരàµ\87à´\96 à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\85à´µà´\95ാശà´\99àµ\8dà´\99ൾà´\95àµ\8dà´\95àµ\81à´£àµ\8dà´\9fായ മാറàµ\8dà´±à´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\87താണ്.',
'rightslogentry' => '$1 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $2 എന്നതിൽ നിന്നു $3 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
'rightslogentry-autopromote' => '$2 എന്നതിൽ നിന്ന് $3 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
'rightsnone' => '(ഒന്നുമില്ല)',
'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|വർഗ്ഗത്തിൽ|വർഗ്ഗങ്ങളിൽ}} താളുകളും പ്രമാണങ്ങളുമുണ്ട്.
താങ്കൾ സൃഷ്ടിക്കാൻ ശ്രമിച്ച "[[:$1]]" എന്ന താൾ നിലവിലുണ്ട്. ആ താൾ മായ്ച്ച് പുതിയ തലക്കെട്ട് നൽകേണ്ടതുണ്ടോ?',
'delete_and_move_confirm' => 'ശരി, താൾ നീക്കം ചെയ്യുക',
'delete_and_move_reason' => '"[[$1]]" എന്നതിൽ നിന്നും മാറ്റാനുള്ള സൗകര്യത്തിനായി മായ്ച്ചു',
-'selfmove' => 'à´¸àµ\8dà´°àµ\8bതസàµ\8dസിനàµ\8dà´±àµ\86 തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\81à´\82 à´²à´\95àµ\8dà´·àµ\8dയതàµ\8dതിനàµ\8dà´±àµ\86 തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\81à´\82 à´\92à´¨àµ\8dനാണàµ\8dâ\80\8c. à´\85തിനാൽ തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\81മാറàµ\8dà´±à´\82 സാദàµ\8dà´§àµ\8dയമല്ല.',
+'selfmove' => 'à´¸àµ\8dà´°àµ\8bതസàµ\8dà´¸àµ\81à´\82 à´²à´\95àµ\8dà´·àµ\8dയവàµ\81à´\82 à´\92à´¨àµ\8dà´¨àµ\81തനàµ\8dà´¨àµ\86യാണàµ\8d; à´\85തിനാൽ തലà´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\81മാറàµ\8dറാനാവില്ല.',
'immobile-source-namespace' => '"$1" നാമമേഖലയിലെ താളുകൾ മാറ്റാൻ കഴിയില്ല',
'immobile-target-namespace' => '"$1" നാമമേഖലയിലേയ്ക്ക് താളുകൾ മാറ്റാൻ കഴിയില്ല',
'immobile-target-namespace-iw' => 'അന്തർവിക്കി കണ്ണി താൾ മാറ്റാനുള്ള സാധുവായ ലക്ഷ്യമല്ല.',
'tooltip-pt-preferences' => 'താങ്കളുടെ ക്രമീകരണങ്ങൾ',
'tooltip-pt-watchlist' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളിലെ മാറ്റങ്ങൾ',
'tooltip-pt-mycontris' => 'താങ്കളുടെ സേവനങ്ങളുടെ പട്ടിക',
-'tooltip-pt-login' => 'à´²àµ\8bà´\97ിൻ à´\9aàµ\86à´¯àµ\8dയണമàµ\86à´¨àµ\8dà´¨àµ\81 നിർബനàµ\8dà´§à´\82 à´\87à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95à´¿à´²àµ\81à´\82 à´²àµ\8bà´\97ിൻ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81വാൻ താലàµ\8dപരàµ\8dയപàµ\8dà´ªàµ\86à´\9fàµ\81à´¨àµ\8dà´¨àµ\81.',
-'tooltip-pt-anonlogin' => 'à´²àµ\8bà´\97ിൻ à´\9aàµ\86à´¯àµ\8dà´¤àµ\81 തിരàµ\81à´¤àµ\8dതൽ à´¨à´\9fà´¤àµ\8dà´¤àµ\81വാൻ താലàµ\8dപരàµ\8dയപàµ\8dà´ªàµ\86à´\9fàµ\81à´¨àµ\8dà´¨àµ\81.',
+'tooltip-pt-login' => 'à´²àµ\8bà´\97ിൻ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81വാൻ താലàµ\8dപരàµ\8dയപàµ\8dà´ªàµ\86à´\9fàµ\81à´¨àµ\8dà´¨àµ\81; à´ªà´\95àµ\8dà´·àµ\87 നിർബനàµ\8dധമലàµ\8dà´²',
+'tooltip-pt-anonlogin' => 'à´²àµ\8bà´\97ിൻ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81വാൻ താലàµ\8dപരàµ\8dയപàµ\8dà´ªàµ\86à´\9fàµ\81à´¨àµ\8dà´¨àµ\81; à´ªà´\95àµ\8dà´·àµ\87 നിർബനàµ\8dധമലàµ\8dà´²',
'tooltip-pt-logout' => 'ലോഗൗട്ട് ചെയ്യാനുള്ള കണ്ണി',
'tooltip-ca-talk' => 'വിവരദായക താളിനെക്കുറിച്ചുള്ള ചർച്ച',
'tooltip-ca-edit' => 'താങ്കൾക്ക് ഈ താൾ തിരുത്താവുന്നതാണ്. തിരുത്തിയ താൾ സേവ് ചെയ്യൂന്നതിനു മുൻപ് പ്രിവ്യൂ കാണുക.',
'api-error-uploaddisabled' => 'ഈ വിക്കിയിൽ അപ്ലോഡിങ് പ്രവർത്തനരഹിതമാക്കിയിരിക്കുകയാണ്.',
'api-error-verification-error' => 'ഈ പ്രമാണത്തിൽ പിഴവുണ്ട്, അല്ലെങ്കിൽ തെറ്റായ എക്സ്റ്റെൻഷനാണുള്ളത്.',
+# Durations
+'duration-seconds' => '{{PLURAL:$1|ഒരു സെക്കന്റ്|$1 സെക്കന്റ്}}',
+'duration-minutes' => '{{PLURAL:$1|ഒരു മിനിറ്റ്|$1 മിനിറ്റ്}}',
+'duration-hours' => '{{PLURAL:$1|ഒരു മണിക്കൂർ|$1 മണിക്കൂർ}}',
+'duration-days' => '{{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}',
+'duration-weeks' => '{{PLURAL:$1|ഒരു ആഴ്ച്ച|$1 ആഴ്ച്ച}}',
+'duration-years' => '{{PLURAL:$1|ഒരു വർഷം|$1 വർഷം}}',
+'duration-decades' => '{{PLURAL:$1|ഒരു ദശാബ്ദം|$1 ദശാബ്ദം}}',
+'duration-centuries' => '{{PLURAL:$1|ഒരു നൂറ്റാണ്ട്|$1 നൂറ്റാണ്ട്}}',
+'duration-millennia' => '{{PLURAL:$1|ഒരു സഹസ്രാബ്ദം|$1 സഹസ്രാബ്ദം}}',
+
);
'ok' => 'OK',
'pagetitle' => '$1 - {{SITENAME}}',
'retrievedfrom' => '"$1" хуудаснаас авсан',
-'youhavenewmessages' => 'Таньд $1 ($2) байна.',
+'youhavenewmessages' => 'Таньд $1 ($2) байна.',
'newmessageslink' => 'шинэ мессеж',
'newmessagesdifflink' => 'сүүлийн өөрчлөлт',
'youhavenewmessagesmulti' => 'Таньд $1 дээр шинэ мессеж ирсэн байна',
'password-login-forbidden' => 'Ийм хэрэглэгчийн, нууц үгээр нэвтрэхийг хориглож байна.',
'mailmypassword' => 'Мэйл хаягаар шинэ нууц үгийг илгээ',
'passwordremindertitle' => '{{SITENAME}}-д нэвтрэх түр зуурын шинэ нууц үг',
-'passwordremindertext' => 'Хэн нэгэн (магадгүй та, IP хаяг нь $1) {{SITENAME}} ($4) хуудсанд нэвтрэх шинэ нууц үг явуулах хүсэлтийг тавьсан байна. Түр нууц үг "$3" хэрэглэгч "$2"-д олгогдлоо.
-Хэрэв та үүнийг хүссэн бол холбогдож шинэ нууц үгээ одоо сонгоно уу.
-Таны түр зуурын нууц үг {{PLURAL:$5|нэг өдрийн|$5 өдрийн}} дараа цуцлагдах болно.
+'passwordremindertext' => 'Хэн нэгэн (магадгүй та, $1 гэх IP хаягаас) {{SITENAME}} ($4) хуудсанд нэвтрэх шинэ нууц үг явуулах хүсэлтийг тавьсан байна. "$3" гэсэн түр хугацаанд хэрэглэж болох нууц үгийг хэрэглэгч "$2"-д олгов.
+Хэрэв та ингэхийг хүссэн бол нэвтэрч ороод шинэ нууц үгээ сонгоно уу.
+Таны түр зуурын нууц үгний хугацаа {{PLURAL:$5|нэг өдрийн|$5 өдрийн}} дараа дуусах болно.
-Хэрэв энэ хүсэлтийг өөр хүн тавьсан, эсвэл та хуучин нууц үгээ санаж солихыг хүсэхгүй байгаа бол та энэ мэйлийг тоохгүйгээр хуучин нууц үгээ хэвээр хэрэглэж болно.',
+Хэрэв энэ хүсэлтийг өөр хүн тавьсан, эсвэл та хуучин нууц үгээ олоод, солихыг хүсэхгүй байгаа бол та энэ мэйлийг үл ойшоон хуучин нууц үгээ хэрэглэсэн хэвээр байж болно.',
'noemail' => 'Хэрэглэгч "$1" нь мэйл хаягаа бүртгүүлээгүй байна.',
'noemailcreate' => 'Та хүчинтэй и-мэйл хаягаа өгөх ёстой',
'passwordsent' => '"$1"-н бүртгүүлсэн мэйл хаяг руу шинэ нууц үг илгээгдлээ.
'accountcreated' => 'Бүртгэл үүсгэгдлээ',
'accountcreatedtext' => '$1 хэрэглэгчийн бүртгэл үүсгэгдлээ.',
'createaccount-title' => '{{SITENAME}}-н бүртгэлийн үүсгэл',
-'createaccount-text' => 'Хэн нэгэн {{SITENAME}}-д ($4) "$2" нэртэй, "$3" нууц үгтэй бүртгэлийг энэ мэйл хаягт үүсгэжээ.
+'createaccount-text' => 'Хэн нэгэн {{SITENAME}}-д ($4) "$2" гэсэн нэрээр, "$3" гэсэн нууц үгтэйгээр таны мэйл хаягийг ашиглан бүртгүүлжээ.
Та одоо нэвтэрч өөрийн нууц үгээ солих хэрэгтэй.
-Хэрэв энэ бүртгэлийг алдаа гаргаж үүсгэсэн бол энэ мэдэгдлийг үл ойшоож болно.',
+Хэрэв буруугаар бүртгүүлсэн бол энэ мэдэгдлийг үл ойшоож болно.',
'usernamehasherror' => 'Хэрэглэгчийн нэрэнд хаш тэмдэгт орж болохгүй',
'login-throttled' => 'Та хэт олон удаа нэвтрэх гэж оролдсон байна.
Хүлээж байгаад дахин оролдого уу.',
Өөрсдийн .css болон .js хуудсуудыг нэрлэхэд жижиг үсэг хэрэглэдэг болохыг сануулж байна. Жишээ нь: {{ns:user}}:Foo/vector.css гэж л хэрэглэх бөгөөд {{ns:user}}:Foo/Vector.css гэхгүй.",
'updated' => '(Шинэчлэгдсэн)',
'note' => "'''Анхааруулга:'''",
-'previewnote' => "'''Энэ бол зөвхөн урьдчилж харсан байдал; засварууд одоохондоо хадгалагдаагүй байна!'''",
+'previewnote' => "'''Энэ бол зөвхөн урьдчилж харсан байдал.'''
+Таны хийсэн өөрчлөлтүүдийг одоохондоо хадгалаагүй байгаа! [[#editform|→ үргэлжүүлж засварлах]]",
'previewconflict' => 'Энэ урьдчилж харсан байдал нь дээд талын засварлах талбарын текстийг хадгалахад харагдах байдлыг харуулна.',
'session_fail_preview' => "'''Уучлаарай! Мэдээлэл алдагдснаас болж таны засварыг боловсруулж чадсангүй. Дахин оролдож үзнэ үү. Ингээд ч болохгүй байвал сайтаас гарч дахин нэвтэрч орж үзнэ үү.'''",
'session_fail_preview_html' => "'''Уучлаарай! Мэдээлэл алдагдснаас болж таны засварыг боловсруулж чадсангүй.'''
Эдгээр аргументуудыг тооцсонгүй.",
'post-expand-template-argument-category' => 'Орхигдсон загварын аргументуудтай хуудаснууд',
'parser-template-loop-warning' => 'Загвар тойрч буйг тогтоов: [[$1]]',
-'parser-template-recursion-depth-warning' => 'Загварын рекурсийн гүний хязгаараас ихэдлээ ($1)',
+'parser-template-recursion-depth-warning' => 'Загварын рекурсийн хэмжээний хязгаараас хэтрэв ($1)',
'language-converter-depth-warning' => 'Хэл хооронд хөрвүүлэх гүний хязгаараас хэтрэв ($1)',
# "Undo" feature
Доорх харьцуулалтыг шалгаж үнэхээр хиймээр байгаа зүйл мөн үү гэдгээ нотлоорой. Дараа нь засварыг дуусгахын тулд өөрчлөлтүүдээ хадгална уу.',
'undo-failure' => 'Хоорондын засваруудаас болж засвар цуцлагдах боломжгүй байна.',
'undo-norev' => 'Засвар оршдогүүй эсвэл устгагдсан тул цуцлаж чадсангүй.',
-'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|Яриа]]) хэрэглэгчийн $1 засварыг цуцлах',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|Яриа]]) хэрэглэгчийн $1 засварыг цуцлах',
# Account creation failure
'cantcreateaccounttitle' => 'Хэрэглэгчийн бүртгэлийг үүсгэж чадсангүй.',
'history-show-deleted' => 'Зөвхөн устгагдсаныг',
'histfirst' => 'Эхний',
'histlast' => 'Сүүлийн',
-'historysize' => '($1 байт)',
+'historysize' => '($1 байт)',
'historyempty' => '(хоосон байна)',
# Revision feed
# Merge log
'mergelog' => 'Нэгтгэлийн лог',
-'pagemerge-logentry' => '[[$1]]-г [[$2]] руу нэгтгэлээ ($3 хүртэлх засварууд)',
+'pagemerge-logentry' => '[[$1]]-г [[$2]] руу нэгтгэлээ ($3 хүртэлх засварууд)',
'revertmerge' => 'Нэгтгэлийг буцаах',
'mergelogpagetext' => 'Доорх нь нэг хуудасны түүхийг өөр түүхтэй нэгтгэсэн хамгийн сүүлийн нэгтгэлүүд юм.',
'searchresults' => 'Хайлтын үр дүн',
'searchresults-title' => '"$1" гэх хайлтын үр дүн',
'searchresulttext' => '{{SITENAME}}-с хайх тухай дэлгэрэнгүй мэдээллийг [[{{MediaWiki:Helppage}}|{{int:help}}]] хуудаснаас авна уу.',
-'searchsubtitle' => 'Та \'\'\'[[:$1]]\'\'\' гэж хайлаа ([[Special:Prefixindex/$1|"$1-р эхлэсэн бүх хуудас]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"-д холбогдсон бүх хуудас]])',
+'searchsubtitle' => 'Та \'\'\'[[:$1]]\'\'\' гэж хайлаа ([[Special:Prefixindex/$1|"$1-р эхлэсэн бүх хуудас]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"-д холбогдсон бүх хуудас]])',
'searchsubtitleinvalid' => "Та '''$1''' гэж хайлаа",
'toomanymatches' => 'Хэт олон илэрц илэрлээ. Өөр үгээр хайна уу.',
'titlematches' => 'Хуудасны гарчигтай таарсан хуудсууд',
'searchprofile-images-tooltip' => 'Файлуудаас хайх',
'searchprofile-everything-tooltip' => 'Бүх агуулгаас хайх (үүнд ярианы хуудсуудыг оролцуулах)',
'searchprofile-advanced-tooltip' => 'Сонгосон нэрний зайнуудаас хайх',
-'search-result-size' => '$1 ($2 үг)',
+'search-result-size' => '$1 (нийт $2 үг)',
'search-result-category-size' => '{{PLURAL:$1|1 гишүүн|$1 гишүүн}} ({{PLURAL:$2|1 дэд ангилал|$2 дэд ангилал}}, {{PLURAL:$3|1 файл|$3 файл}})',
'search-result-score' => 'Холбоо хамаарал: $1%',
'search-redirect' => '(чиглүүлэгч $1)',
# User preference: e-mail validation using jQuery
'email-address-validity-valid' => 'Цахим шуудан хүчинтэй байна',
+'email-address-validity-invalid' => 'и-майл хаягаа зөв оруулна уу.',
# User rights
'userrights' => 'Хэрэглэгчдийн эрхийн удирдлага',
'recentchanges-label-bot' => 'Энэ засварыг бот гүйцэтгэсэн байна',
'recentchanges-label-unpatrolled' => 'Энэ засварыг одоогийн байдлаар манаагүй байна',
'rcnote' => "Доорх нь $5, $4-ий байдлаарх сүүлийн '''$2''' өдрийн турших '''$1''' засвар юм.",
-'rcnotefrom' => "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэл харуулагдсан) юм.",
+'rcnotefrom' => "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэлхийг харуулав) юм.",
'rclistfrom' => '$1-с хойших шинэ засваруудыг үзүүлэх',
'rcshowhideminor' => 'Бага зэргийн засваруудыг $1',
'rcshowhidebots' => 'Роботуудыг $1',
'newpageletter' => 'Ш',
'boteditletter' => 'р',
'number_of_watching_users_pageview' => '[$1 хэрэглэгч харж байна]',
-'rc_categories' => 'Ангиллуудад хязгаарлах ("|" тэмдгээр тусгаарлах)',
+'rc_categories' => 'Ангиллуудад хязгаарлах ("|" тэмдгээр тусгаарлана)',
'rc_categories_any' => 'Хамаагүй',
'rc-change-size-new' => 'Өөрчилсний дараа $1 {{PLURAL:$1|байт|байт}}',
'newsectionsummary' => '/* $1 */ шинэ хэсэг',
'upload-tryagain' => 'Өөрчилсан файлын тодорхойлолтыг явуулах',
'uploadnologin' => 'Нэвтрээгүй байна',
'uploadnologintext' => 'Та файл оруулахын тулд [[Special:UserLogin|нэвтэрч орсон]] байх шаардлагатай.',
-'upload_directory_missing' => 'Ð\9eÑ\80Ñ\83Ñ\83лалÑ\82Ñ\8bн лавлаÑ\85 ï¼\88$1ï¼\89 олдоÑ\85гүй байгаа бөгөөд вÑ\8dбÑ\81еÑ\80вÑ\8dÑ\80 Ò¯Ò¯Ñ\81гÑ\8dÑ\8dгүй байж магадгүй байна.',
-'upload_directory_read_only' => 'Файл оÑ\80Ñ\83Ñ\83лаÑ\85 каÑ\82алог ï¼\88$1ï¼\89 нÑ\8c вÑ\8dбÑ\81еÑ\80веÑ\80Ñ\82 биÑ\87игдÑ\8dх боломгүй байна.',
+'upload_directory_missing' => 'Ð\90плоÑ\83д Ñ\81ан ($1) олдоÑ\85гүй байгаа бөгөөд вÑ\8dбÑ\81еÑ\80веÑ\80 үүнийг Ò¯Ò¯Ñ\81гÑ\8dж Ñ\87адÑ\81ангүй.',
+'upload_directory_read_only' => 'Ð\90плоÑ\83д Ñ\81ан ($1) Ñ\80Ñ\83Ñ\83 вÑ\8dбÑ\81еÑ\80веÑ\80 биÑ\87их боломгүй байна.',
'uploaderror' => 'Файл оруулахад алдаа гарлаа',
'upload-recreate-warning' => "'''Анхаар: Тэрхүү нэртэй файл нь устгагдсан эсвэл зөөгдсөн байна..'''
Ашиглахыг зөвлөж буй {{PLURAL:\$3|файлын төрөл|файлын төрлүүд}} нь \$2.",
'filetype-banned-type' => "'''\".\$1\"''' нь зөвшөөрөгдөхгүй файлын төрөл байна.
Зөвшөөрөгдөх {{PLURAL:\$3|файлын төрөл|файлын төрлүүд}} нь \$2.",
-'filetype-missing' => 'Энэ файлд өргөтгөл байхгүй байна (".jpg" гэх мэт).',
+'filetype-missing' => 'Энэ файлд өргөтгөл байхгүй байна (".jpg" гэх мэт).',
'empty-file' => 'Таны явуулсан файл хоосон байв.',
'file-too-large' => 'Таны явуулсан файл хэтэрхий том байв.',
'filename-tooshort' => 'Файлын нэр хэтэрхий богино байна.',
Файлаа оруулахыг хүсч байвал шинэ нэр өгөөд дахин оролдоно уу.
[[File:$1|thumb|center|$1]]',
'file-exists-duplicate' => 'Энэ файл нь дараах {{PLURAL:$1|файлтай|файлуудтай}} ижил байна:',
-'file-deleted-duplicate' => 'Энэ файлтай ([[:$1]]) яг ижилхэн файл урьд өмнө устгагдсан байна.
-Ð\94аÑ\85ин оруулахынхаа өмнө тэрхүү файлын устгалын түүхийг харна уу.',
+'file-deleted-duplicate' => 'Энэ файлтай ([[:$1]]) яг ижилхэн файлыг урьд өмнө устгасан байна.
+Ð\94аÑ\85иж оруулахынхаа өмнө тэрхүү файлын устгалын түүхийг харна уу.',
'uploadwarning' => 'Хуулах үеийн анхааруулга',
'uploadwarning-text' => 'Доорх файлын тодорхойлолтыг өөрчлөөд дахин оролдоно уу.',
'savefile' => 'Файлыг хадгалах',
[[Special:WhatLinksHere/$2|Бүтэн жагсаалт]] мөн байгаа.',
'nolinkstoimage' => 'Энэ файлд холбогдсон хуудас байхгүй байна.',
'morelinkstoimage' => 'Энэ файлд руух [[Special:WhatLinksHere/$1|илүү олон холбоос]] үзэх.',
-'duplicatesoffile' => 'Дараах {{PLURAL:$1|файл|$1 файл}} нь энэ файлтай яг ижилхэн байна ([[Special:FileDuplicateSearch/$2|дэлгэрэнгүй мэдээлэл]]):',
+'duplicatesoffile' => 'Дараах {{PLURAL:$1|файл|$1 файл}} нь энэ файлтай яг ижилхэн байна ([[Special:FileDuplicateSearch/$2|дэлгэрэнгүй мэдээлэл]])',
'sharedupload' => 'Энэ файл нь $1-ийнх бөгөөд бусад төслүүдэд ашиглах боломжтой',
'sharedupload-desc-there' => 'Энэ файл нь $1-нх бөгөөд бусад төслүүд үүнийг хэрэглэх боломжтой.
Дэлгэрэнгүй мэдээллийг [$2 файлын тайлбарын хуудаснаас] харна уу.',
# Special:AllPages
'allpages' => 'Бүх хуудас',
'alphaindexline' => '$1-с $2 хүртэл',
-'nextpage' => 'Дараагийн хуудас ($1)',
-'prevpage' => 'Өмнөх хуудас ($1)',
+'nextpage' => 'Дараагийн хуудас ($1)',
+'prevpage' => 'Өмнөх хуудас ($1)',
'allpagesfrom' => 'Хамгийн эхэлж харуулах хуудас:',
'allpagesto' => 'Дараах гэж дуусах хуудсуудыг үзүүлэх:',
'allarticles' => 'Бүх хуудас',
'undeleterevdel' => 'Дээд хуудас буюу файлын засвар бага зэргээр устгагдах явдал гарах бол хуудас сэргээгдэхгүй.
Ийм тохиолдолд та хамгийн сүүлд устгагдсан засварыг нууцлахаа, эсвэл тэмдэглэхээ болих шаардлагатай.',
'undeletehistorynoadmin' => 'Энэ өгүүлэл устгагдсан. Үүний устгагдсан шалтгаан нь устгалын өмнө энэ хуудсыг засварласан хэрэглэгчдийн тухай мэдээллүүдтэй хамт доорх тайланд өгөгдсөн байгаа. Эдгээр устгагдсан хувилбаруудад яг юу байсныг зөвхөн администраторууд л харж чадна.',
-'undelete-revision' => '$3 хэрэглэгчийн $1-н ($2-ий байдлаарх) устгасан засвар',
+'undelete-revision' => '$3 хэрэглэгчийн засварласан $1 хуудасны ($4, $5-ийн байдлаарх) засварыг устгав.',
'undeleterevision-missing' => 'Хүчингүй эсвэл алга болсон засвар.
Таньд буруу холбоос байна, эсвэл засвар сэргээгдсэн, эсвэл архиваас устгагдсан байж болзошгүй.',
'undelete-nodiff' => 'Өмнөх засвар олдсонгүй.',
'contributions' => 'Хэрэглэгчийн хувь нэмэр',
'contributions-title' => '$1 хэрэглэгчийн хувь нэмэр',
'mycontris' => 'Миний оруулсан хувь нэмэр',
-'contribsub2' => 'Хэрэглэгчийн нэр: $1 ($2)',
+'contribsub2' => 'Хэрэглэгч: $1 ($2)',
'nocontribs' => 'Энэ шалгуурт тохирох өөрчилсөн зүйлүүд олдсонгүй.',
'uctop' => '(дээд)',
'month' => 'Дараах сараас (өмнөх засварууд нь ч орно):',
# Bad image list
'bad_image_list' => 'Формат дараах байдлаар байна:
-Зөвхөн жагсаагдсан зүйлс (*-аар эхлэх мөрүүд) тооцогдоно.
+Зөвхөн жагсаагдсан зүйлс (*-аар эхлэх мөрүүд) тооцогдоно.
Мөр дэх эхний линк муу файл руух холбоос байж таарна.
Үүнтэй адил мөр дэх бусад линкүүд тооцогдохгүй. Өөрөөр хэлбэл, файлын орж болзошгүй хуудсууд юм.',
Хэрэв энэ файл анхныхаа байдлаас өөрчлөгдсөн бол зарим мэдээлэл нь одоогийн хувилбартайгаа нийцэхгүй байж магадгүй.',
'metadata-expand' => 'Дэлгэрэнгүй мэдээллийг харуулах',
'metadata-collapse' => 'Дэлгэрэнгүй мэдээллийг нуух',
-'metadata-fields' => 'Энэ мэдэгдэлд байгаа EXIF мэдээллийн талбарууд мэдээллийн хүснэгт буулгагдсан үед зургын хуудсанд харагдана.
-Ð\91Ñ\83Ñ\81ад нÑ\8c анÑ\85нааÑ\81аа Ñ\85аÑ\80агдаÑ\85гүй байна.
+'metadata-fields' => 'Энэ мэдэгдэлд байгаа зурагний мэдээллийн талбарууд нь мэдээллийн хүснэгт буулгагдсан үед зургын хуудсанд харагдана.
+Ð\91Ñ\83Ñ\81дÑ\8bг анÑ\85нÑ\8b Ñ\82оÑ\85иÑ\80гоогооÑ\80 нÑ\83Ñ\83Ñ\86алÑ\81ан байгаа.
* make
* model
* datetimeoriginal
'exif-subsectimeoriginal' => 'ОгнооЦагАнхны дэдсекунд',
'exif-subsectimedigitized' => 'ОгнооЦагДижитал дэдсекунд',
'exif-exposuretime' => 'Гэрэл өгөх хугацаа',
-'exif-exposuretime-format' => '$1 секунд ($2)',
+'exif-exposuretime-format' => '$1 секунд ($2)',
'exif-fnumber' => 'Харьцангуй диафрагм',
'exif-exposureprogram' => 'Гэрэл өгөх хугацааны программ',
'exif-spectralsensitivity' => 'Спектралийн мэдрэмтгий байдал',
'blankpage' => 'Хоосон хуудас',
'intentionallyblankpage' => 'Энэхүү хуудсыг албаар хоосон үлдээв.',
+# External image whitelist
+'external_image_whitelist' => '#Энэ мөрийг яг хэвээр нь үлдээнэ үү<pre>
+#Доорх хэсэгт regular expression-ээр бичсэн хэсгүүдийг (//-н дунд л байх хэсэг) оруул
+#Эдгээрийг гадаад (шууд холбосон) зургуудын URL-тай тохируулах болно
+#Тохирсон бол зураг болж харагдана, үгүй бол зураг руух холбоос л гарна
+#"#"-аар эхлэсэн мөрүүдийг коммент гэж тооцоно
+#Том жижиг үсэг үл харгалзана
+
+#Дээрх хэсэгт regular expression-ээр бичсэн хэсгүүдийг оруул. Энэ мөрийг яг хэвээр нь үлдээнэ үү</pre>',
+
# Special:Tags
'tags' => 'Хүчинтэй өөрчлөлтийн тагууд',
'tag-filter' => '[[Special:Tags|Тагийн]] шүүлтүүр:',
'prefs-labs' => 'प्रायोगिक वैशिष्ट्ये',
'prefs-personal' => 'सदस्य व्यक्तिरेखा',
'prefs-rc' => 'अलीकडील बदल',
-'prefs-watchlist' => 'पहाऱ्याची सूची',
+'prefs-watchlist' => 'नितà¥\8dय पहाण्याची सूची',
'prefs-watchlist-days' => 'पहाऱ्याच्या सूचीमध्ये दिसणाऱ्या दिवसांची संख्या:',
'prefs-watchlist-days-max' => 'जास्तीत जास्त $1 {{PLURAL:$1|दिवस|दिवस}}',
'prefs-watchlist-edits' => 'वाढीव पहाऱ्याच्या सूचीमध्ये दिसणाऱ्या संपादनांची संख्या:',
# Suppression log
'suppressionlog' => 'Log penahanan',
'suppressionlogtext' => 'Berikut adalah daftar penghapusan dan sekatan yang melibatkan kandungan yang disembunyikan daripada pentadbir.
-Lihat [[Special:BlockList|senarai sekatan IP]] untuk senarai larangan dan sekatan semasa.',
+Lihat [[Special:BlockList|senarai sekatan]] untuk senarai larangan dan sekatan semasa.',
# History merging
'mergehistory' => 'Gabungkan sejarah laman',
'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.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Tidak dapat bersambung dengan pangkalan data jurnal untuk backend storan "$1".',
'filejournal-fail-dbquery' => 'Pangkalan data jurnal untuk backend storan "$1" tidak dapat dikemaskinikan.',
'allpages-bad-ns' => '{{SITENAME}} tidak mempunyai ruang nama "$1".',
'allpages-hide-redirects' => 'Sorokkan lencongan',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Anda sedang melihat versi dalam cache laman ini yang mungkin selama $1.',
+'cachedspecial-viewing-cached-ts' => 'Anda sedang melihat versi dalam cache laman ini yang mungkin tidak lengkap sepenuhnya.',
+'cachedspecial-refresh-now' => 'Lihat yang terkini.',
+
# Special:Categories
'categories' => 'Kategori',
'categoriespagetext' => '{{PLURAL:$1|Kategori|Kategori-kategori}} berikut mengandungi laman-laman atau media.
'badipaddress' => 'Alamat IP tidak sah',
'blockipsuccesssub' => 'Sekatan berjaya',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] telah disekat.
-<br />Sila lihat [[Special:BlockList|senarai sekatan IP]] untuk maklumat lanjut.',
+<br />Sila lihat [[Special:BlockList|senarai sekatan]] untuk menyemak sekatan.',
'ipb-blockingself' => 'Anda akan menyekat diri sendiri! Pastikah anda mahu berbuat demikian?',
'ipb-confirmhideuser' => 'Anda akan menyekat seorang pengguna yang menghidupkan "sorokkan pengguna". Ini akan menindaskan nama pengguna itu di semua senarai dan entri log. Pastikah anda mahu berbuat demikian?',
'ipb-edit-dropdown' => 'Sunting sebab sekatan',
Log sekatan disediakan di bawah sebagai rujukan:',
'blocklogentry' => 'menyekat [[$1]] sehingga $2 $3',
'reblock-logentry' => 'menukar tetapan sekatan [[$1]] yang tamat pada $2 $3',
-'blocklogtext' => 'Ini adalah log bagi sekatan dan penyahsekatan.
-Alamat IP yang disekat secara automatik tidak disenaraikan di sini.
-Sila lihat juga [[Special:BlockList|senarai sekatan IP]] yang sedang berkuatkuasa.',
+'blocklogtext' => 'Ini adalah log bagi tindakan menyekat dan menyahsekat pengguna.
+Alamat-alamat IP yang disekat secara automatik tidak disenaraikan di sini.
+Sila lihat juga [[Special:BlockList|senarai sekatan]] untuk senarai larangan dan sekatan yang sedang berkuatkuasa.',
'unblocklogentry' => 'menyahsekat $1',
'block-log-flags-anononly' => 'pengguna tanpa nama sahaja',
'block-log-flags-nocreate' => 'pembukaan akaun dimatikan',
'version-software' => 'Perisian yang dipasang',
'version-software-product' => 'Produk',
'version-software-version' => 'Versi',
+'version-entrypoints' => 'URL titik permulaan',
+'version-entrypoints-header-entrypoint' => 'Titik permulaan',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Laluan rencana]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Laluan skrip]',
# Special:FilePath
'filepath' => 'Laluan fail',
'api-error-uploaddisabled' => 'Ciri muat naik dimatikan di wiki ini.',
'api-error-verification-error' => 'Fail ini mungkin tercemar atau tersalah sambungannya.',
+# Durations
+'duration-seconds' => '$1 saat',
+'duration-minutes' => '$1 minit',
+'duration-hours' => '$1 jam',
+'duration-days' => '$1 hari',
+'duration-weeks' => '$1 minggu',
+'duration-years' => '$1 tahun',
+'duration-decades' => '$1 dekad',
+'duration-centuries' => '$1 abad',
+'duration-millennia' => '$1 alaf',
+
);
'customjsprotected' => '你無權限通改這javaScript頁面,因為伊包括著其他用戶的個人設定。',
'ns-specialprotected' => '特殊頁袂使改得',
'titleprotected' => "這个標題已經予[[User:$1|$1]]保護牢咧袂使用。理由是''$2''。",
-'filereadonlyerror' => '無法度修改"$1" 這个檔案,因為"$2"這个儲存庫佇讀的模式。
-å\8e\9få\9b æ\98¯"\'\'$3\'\'"。',
+'filereadonlyerror' => '無法度改"$1" 這个檔案,因為"$2"這个儲存庫佇讀的模式。
+å\85±å°\81é\8e\96ç\9a\84管ç\90\86å\93¡æ\9c\89解說è¬\9bï¼\9a"$3"。',
# Virus scanner
'virus-badscanner' => "毋著的設定: 毋知影的病毒掃瞄器:''$1''",
'invalidemailaddress' => '電子批的地址無正確,規格毋著,
請拍一个符合規格的地址抑是放空格。',
'cannotchangeemail' => '口座的e-mail住址無法度佇這个wiki改',
+'emaildisabled' => '這个網站袂當寄電子批。',
'accountcreated' => '口座開好矣',
'accountcreatedtext' => '$1的口座開好矣',
'createaccount-title' => '佇{{SITENAME}}開好口座',
{{ns:user}}:Foo/Vector.css。",
'updated' => '(改過矣)',
'note' => "'''Chù-ì:'''",
-'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!'''",
+'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 ![[#editform|→kè-sio̍k pian-chi̍p]]",
'previewconflict' => '這个先看覓會反應你文字編輯區的內容,顯示佇面頂。佇你保存了就會公開。',
'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.'''",
'session_fail_preview_html' => "'''歹勢!因為phàng見資料,阮無法度處理你的編輯。'''
這種情況會出現佇你用網路上匿名代理服務的時陣。",
'edit_form_incomplete' => "'''一寡部份的編輯無送到伺服器,請檢查你的編輯是毋是完整,才閣試。'''",
'editing' => 'Siu-kái $1',
+'creating' => '當咧建立$1',
'editingsection' => 'Pian-chi̍p $1 (section)',
'editingcomment' => 'Teh pian-chi̍p $1 (lâu-oē)',
'editconflict' => 'Siu-kái sio-chhiong: $1',
'edit-no-change' => '你的編輯閬過,因為攏無改著字。',
'edit-already-exists' => '無法度開新頁,
已經有彼頁。',
+'defaultmessagetext' => 'Siat piān ê bûn-jī',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''警示:'''這頁用傷濟擺函數呼叫。
# Suppression log
'suppressionlog' => '隱藏記錄',
-'suppressionlogtext' => '下跤是管理員為著隱藏文章所做的刣掉抑封鎖的清單。
-若欲看這馬禁止使用、封鎖的清單,請看[[Special:BlockList|IP封鎖清單]]。',
+'suppressionlogtext' => '下跤是管理員為著藏文章所做的刣掉,抑封鎖的清單。
+若欲看這馬禁止使用、封鎖的清單,請看[[Special:BlockList|封鎖清單]]。',
# History merging
'mergehistory' => '合併兩个頁的修改歷史:',
這頁有刣掉佮徙走的記錄通參考:",
'uploadtext' => "用下跤的表來共檔案上載。
-若欲看抑是揣往過上載的檔案,會使進入[[Special:FileList|檔案上載清單]],(重)上載嘛會記錄佇[[Special:Log/upload|上傳記錄]],若刣掉就會記錄佇[[Special:Log/delete|刪除記錄]]。
+若欲看,抑是揣往過上載的檔案,會使入去[[Special:FileList|檔案上載清單]]。上載嘛會記錄佇[[Special:Log/upload|上載記錄]],若刣掉就會記錄佇[[Special:Log/delete|刣掉記錄]]。
-若欲佇頁加入檔案,用下跤的一種方式來連結:
+上載後,若欲佇頁加入檔案,會使用下跤的一種方式來連結:
* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>'''使用檔案的完整版本
* '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|替換文字]]</nowiki></tt>'''用一个囥佇倒爿的一个200 像素圖相框,「替換文字」做說明
* '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>'''直接連結到檔案,毋過無顯示檔案",
-'upload-permitted' => '准許的檔案類型: $1',
+'upload-permitted' => '通用的檔案類型: $1',
'upload-preferred' => '建議的檔案類型: $1',
'upload-prohibited' => '禁止的檔案類型: $1。',
'uploadlog' => '上載記錄',
'backend-fail-batchsize' => '囥位一批$1个檔案
{{PLURAL:$1|遍動作|遍動作}},上濟$2遍{{PLURAL:$2|動作|動作}}。',
+# File journal errors
'filejournal-fail-dbconnect' => '無法度連接到佇囥位"$1"的資料庫。',
'filejournal-fail-dbquery' => '無法度更新佇囥位"$1"的資料庫。',
'allpages-bad-ns' => '佇{{SITENAME}}無"$1"這个名空間。',
'allpages-hide-redirects' => '掩轉頁',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => '你當咧看這頁的快取(cached)版本,彼可能是第$1舊的。',
+'cachedspecial-viewing-cached-ts' => '你當咧看這頁的快取版本,彼可能佮這馬的無仝款。',
+'cachedspecial-refresh-now' => '看上新。',
+
# 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é.
'ipb-confirm' => '確定封鎖',
'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|IP hong-só lia̍t-toaⁿ]] review hong-só ê IP.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] í-keng pī hong-só. <br />Khì [[Special:BlockList|hong-só lia̍t-toaⁿ]] thang khoàⁿ pī hong-só ê .',
'ipb-blockingself' => '你欲封鎖你家己!你敢確定欲按呢做?',
'ipb-confirmhideuser' => '你是欲封鎖一个用者佮隱藏伊的用者名稱,這會隱藏用者名稱出現佇所有的表佮記錄的項目當中,你敢確定欲按呢做?',
'ipb-edit-dropdown' => '編輯封鎖的理由',
下跤有封鎖的記錄會當參考:',
'blocklogentry' => 'hong-só [[$1]], siat kî-hān chì $2 $3',
'reblock-logentry' => '改[[$1]]的封鎖到期時間 $2 $3',
-'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ⁿ).',
+'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ⁿ).',
'unblocklogentry' => '解除封鎖$1',
'block-log-flags-anononly' => '只會當是無名氏用者',
'block-log-flags-nocreate' => 'Khui kháu-chō thêng-iōng ah',
'api-error-uploaddisabled' => '佇這个Wiki袂當上載。',
'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|百年|百年}}',
+'duration-millennia' => '$1 {{PLURAL:$1|千年|千年}}',
+
);
'backend-fail-contenttype' => 'Kon t inhoudstype van t bestaand um op "$1" op te slaon niet bepaolen.',
'backend-fail-batchsize' => 'Reeks van $1 bestaands{{PLURAL:$1|operasie|operasies}} in de opslagbackend; de limiet is $2 {{PLURAL:$2|operasie|operasies}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Kon gien verbiending maken mit de journaaldatabanke veur t opslagbackend "$1".',
'filejournal-fail-dbquery' => 'Kon de journaaldatabanke niet biewarken veur t opslagbackend "$1".',
* @file
*
* @author Annabel
+ * @author AvatarTeam
* @author B4bol4t
* @author DasRakel
* @author Effeietsanders
'searchbutton' => 'Zoeken',
'go' => 'OK',
'searcharticle' => 'OK',
-'history' => 'Paginageschiedenis',
+'history' => 'Geschiedenis',
'history_short' => 'Geschiedenis',
'updatedmarker' => 'bewerkt sinds mijn laatste bezoek',
'printableversion' => 'Printervriendelijke versie',
“$1”
vanuit de functie “$2”.
De database gaf de volgende foutmelding: “$3: $4”',
-'laggedslavemode' => "'''Waarschuwing:''' de pagina kan verouder zijn.",
+'laggedslavemode' => "'''Waarschuwing:''' in deze pagina zijn recente wijzigingen mogelijk nog niet verwerkt.",
'readonly' => 'Database geblokkeerd',
'enterlockreason' => 'Geef een reden op voor de blokkade en geef op wanneer die waarschijnlijk wordt opgeheven',
'readonlytext' => 'De database is geblokkeerd voor bewerkingen, waarschijnlijk voor regulier databaseonderhoud. Na afronding wordt de functionaliteit hersteld.
'cannotdelete-title' => 'Pagina "$1" kan niet verwijderd worden',
'badtitle' => 'Ongeldige paginanaam',
'badtitletext' => 'De naam van de opgevraagde pagina was ongeldig, leeg of bevatte een verkeerde intertaal- of interwikinaamverwijzing.
-Wellicht bevat de paginanaam niet toegestane karakters.',
+Wellicht bevat de paginanaam niet toegestane tekens.',
'perfcached' => 'Deze gegevens komen uit een cache en zijn mogelijk niet actueel. Er {{PLURAL:$1|is maximaal één resultaat|zijn maximaal $1 resultaten}} beschikbaar in de cache.',
'perfcachedts' => 'Deze gegevens komen uit een cache die voor het laatst is bijgewerkt op $2 om $3. Er {{PLURAL:$4|is maximaal één resultaat|zijn maximaal $4 resultaten}} beschikbaar in de cache.',
'querypage-no-updates' => 'Deze pagina wordt niet bijgewerkt.
'viewsourcetext' => 'U kunt de brontekst van deze pagina bekijken en kopiëren:',
'viewyourtext' => "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
'protectedinterface' => 'Deze pagina bevat tekst voor berichten van de software en is beveiligd om misbruik te voorkomen.',
-'editinginterface' => "'''Waarschuwing:''' U bewerkt een pagina die interfacetekst voor de software bevat.
+'editinginterface' => "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.
Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen.
Overweeg voor vertalingen om [//translatewiki.net/wiki/Main_Page?setlang=nl translatewiki.net] te gebruiken, het vertaalproject voor MediaWiki.",
'sqlhidden' => '(SQL-zoekopdracht verborgen)',
Meld u aan en wijzig uw wachtwoord.
Negeer dit bericht als deze gebruiker zonder uw medeweten is aangemaakt.',
-'usernamehasherror' => 'Een gebruikersnaam mag het karakter hekje ("#") niet bevatten.',
+'usernamehasherror' => 'Een gebruikersnaam mag het teken hekje ("#") niet bevatten.',
'login-throttled' => 'U hebt recentelijk te vaak geprobeerd aan te melden met een onjuist wachtwoord.
Wacht even voordat u het opnieuw probeert.',
'login-abort-generic' => 'U bent niet aangemeld. De procedure is afgebroken.',
'missingsummary' => "'''Herinnering:''' u hebt geen bewerkingssamenvatting opgegeven.
Als u nogmaals op \"{{int:savearticle}}\" klikt wordt de bewerking zonder samenvatting opgeslagen.",
'missingcommenttext' => 'Plaats uw opmerking hieronder.',
-'missingcommentheader' => "'''Let op:''' U hebt geen onderwerp/kop voor deze opmerking opgegeven.
+'missingcommentheader' => "'''Let op:''' u hebt geen onderwerp/kop voor deze opmerking opgegeven.
Als u opnieuw op \"{{int:savearticle}}\" klikt, wordt uw wijziging zonder een onderwerp/kop opgeslagen.",
'summary-preview' => 'Bewerkingssamenvatting nakijken:',
'subject-preview' => 'Onderwerp/kop nakijken:',
* '''Firefox / Safari:''' houd ''Shift'' ingedrukt terwijl u op ''Vernieuwen'' klikt of druk op ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-Shift-R'' op een Mac)
* '''Google Chrome:''' druk op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op een Mac)
* '''Internet Explorer:''' houd ''Ctrl'' ingedrukt terwijl u op ''Vernieuwen'' klikt of druk op ''Ctrl-F5''
-* '''Konqueror: '''klik op ''Reload'' of druk op ''F5''
+* '''Konqueror:''' klik op ''Reload'' of druk op ''F5''
* '''Opera:''' leeg uw cache in ''Extra → Voorkeuren''",
-'usercssyoucanpreview' => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om uw nieuwe CSS te testen alvorens op te slaan.",
-'userjsyoucanpreview' => "'''Tip:''' Gebruik de knop \"{{int:showpreview}}\" om uw nieuwe JavaScript te testen alvorens op te slaan.",
+'usercssyoucanpreview' => "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om uw nieuwe CSS te testen alvorens op te slaan.",
+'userjsyoucanpreview' => "'''Tip:''' gebruik de knop \"{{int:showpreview}}\" om uw nieuwe JavaScript te testen alvorens op te slaan.",
'usercsspreview' => "'''Dit is alleen een voorvertoning van uw persoonlijke CSS.'''
'''Deze is nog niet opgeslagen!'''",
'userjspreview' => "'''Let op: u test nu uw persoonlijke JavaScript.'''
'''Alleen''' de tekst in het bovenste gedeelte wordt opgeslagen als u op \"{{int:savearticle}}\" klikt.",
'yourtext' => 'Uw tekst',
'storedversion' => 'Opgeslagen versie',
-'nonunicodebrowser' => "'''Waarschuwing: Uw browser kan niet goed overweg met unicode.'''
-Hiermee wordt door de MediaWiki-software rekening gehouden zodat u toch zonder problemen pagina's kunt bewerken: niet-ASCII karakters worden in het bewerkingsveld weergegeven als hexadecimale codes.",
-'editingold' => "'''Waarschuwing: U bewerkt een oude versie van deze pagina.'''
-Als u uw bewerking opslaat, gaan alle wijzigingen die na deze versie gemaakt zijn verloren.",
+'nonunicodebrowser' => "'''Waarschuwing: uw browser kan niet goed overweg met Unicode.'''
+Hiermee wordt door de MediaWiki-software rekening gehouden zodat u toch zonder problemen pagina's kunt bewerken: niet-ASCII tekens worden in het bewerkingsveld weergegeven als hexadecimale codes.",
+'editingold' => "'''Waarschuwing: u bewerkt een oude versie van deze pagina.'''
+Als u uw bewerking opslaat, gaan alle wijzigingen verloren die na deze versie zijn gemaakt.",
'yourdiff' => 'Wijzigingen',
'copyrightwarning' => "Let op: alle bijdragen aan {{SITENAME}} worden geacht te zijn vrijgegeven onder de \$2 (zie \$1 voor details).
Als u niet wilt dat uw tekst door anderen naar believen bewerkt en verspreid kan worden, kies dan niet voor \"Pagina opslaan\".<br />
'''Gebruik geen materiaal dat beschermd wordt door auteursrecht, tenzij u daarvoor toestemming hebt!'''",
'longpageerror' => "'''Fout: de tekst die u hebt toegevoegd is {{PLURAL:$1|één kilobyte|$1 kilobyte}} groot, wat groter is dan het maximum van {{PLURAL:$2|één kilobyte|$2 kilobyte}}.'''
Opslaan is niet mogelijk.",
-'readonlywarning' => "'''Waarschuwing: de database is geblokkeerd voor bewerkingen, waarschijnlijk voor regulier databaseonderhoud, dus u kunt deze nu niet opslaan.'''
+'readonlywarning' => "'''Waarschuwing: u kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.'''
Het is misschien verstandig om uw tekst tijdelijk in een tekstbestand op te slaan om dit te bewaren voor wanneer de blokkering van de database opgeheven is.
Een beheerder heeft de database geblokkeerd om de volgende reden: $1",
Controleer voor het opslaan of het resultaat gewenst is.',
'undo-failure' => 'De wijziging kan niet ongedaan gemaakt worden vanwege andere strijdige wijzigingen.',
'undo-norev' => 'De bewerking kon niet ongedaan gemaakt worden, omdat die niet bestaat of is verwijderd.',
-'undo-summary' => 'Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) ongedaan gemaakt.',
+'undo-summary' => 'Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) ongedaan gemaakt',
# Account creation failure
'cantcreateaccounttitle' => 'Registreren is mislukt.',
'rev-showdeleted' => 'weergeven',
'revisiondelete' => 'Versies verwijderen of terugplaatsen',
'revdelete-nooldid-title' => 'Ongeldige doelversie',
-'revdelete-nooldid-text' => 'U hebt geen doelversie(s) voor deze handeling opgegeven, de aangegeven versie bestaat niet of u probeert de laatste versie te verbergen.',
+'revdelete-nooldid-text' => 'U hebt geen doelversie(s) voor deze handeling opgegeven. De aangegeven versie bestaat niet of u probeert de laatste versie te verbergen.',
'revdelete-nologtype-title' => 'Er is geen logboektype opgegeven',
'revdelete-nologtype-text' => 'U hebt geen logboektype opgegeven om deze handeling op uit te voeren.',
'revdelete-nologid-title' => 'Ongeldige logboekregel',
'revdelete-radio-set' => 'Ja',
'revdelete-radio-unset' => 'Nee',
'revdelete-suppress' => 'Gegevens voor zowel beheerders als anderen onderdrukken',
-'revdelete-unsuppress' => 'Beperkingen op teruggezette wijzigingen verwijderen',
+'revdelete-unsuppress' => 'Beperkingen op teruggeplaatste wijzigingen verwijderen',
'revdelete-log' => 'Reden:',
'revdelete-submit' => 'Toepassen op de geselecteerde {{PLURAL:$1|bewerking|bewerkingen}}',
'revdelete-success' => "'''De zichtbaarheid van de wijziging is bijgewerkt.'''",
'revdel-restore' => 'Zichtbaarheid wijzigen',
'revdel-restore-deleted' => 'verwijderde versies',
'revdel-restore-visible' => 'zichtbare versies',
-'pagehist' => 'paginageschiedenis',
+'pagehist' => 'Geschiedenis',
'deletedhist' => 'verwijderde geschiedenis',
'revdelete-hide-current' => 'Er is een fout opgetreden bij het verbergen van het object van $1 om $2 uur: dit is de huidige versie.
Deze versie kan niet verborgen worden.',
# Suppression log
'suppressionlog' => 'Verbergingslogboek',
'suppressionlogtext' => 'De onderstaande lijst bevat de verwijderingen en blokkades die voor beheerders verborgen zijn.
-In de [[Special:BlockList|IP-blokkeerlijst]] zijn de huidige blokkades te bekijken.',
+In de [[Special:BlockList|blokkadelijst]] zijn de huidige blokkades te bekijken.',
# History merging
'mergehistory' => "Geschiedenis van pagina's samenvoegen",
'searchresults' => 'Zoekresultaten',
'searchresults-title' => 'Zoekresultaten voor "$1"',
'searchresulttext' => 'Voor meer informatie over zoeken op {{SITENAME}}, zie [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => 'U zocht naar \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|pagina\'s die beginnen met "$1"]] {{int:pipe-separator}}[[Special:WhatLinksHere/$1|pagina\'s die verwijzen naar "$1"]])',
+'searchsubtitle' => 'U hebt gezocht naar \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|pagina\'s die beginnen met "$1"]] {{int:pipe-separator}}[[Special:WhatLinksHere/$1|pagina\'s die verwijzen naar "$1"]])',
'searchsubtitleinvalid' => "U hebt gezocht naar '''$1'''",
'toomanymatches' => 'Er waren te veel resultaten.
Probeer een andere zoekopdracht.',
'showingresultsnum' => "Hieronder {{PLURAL:$3|staat '''1''' resultaat|staan '''$3''' resultaten}} vanaf #'''$2'''.",
'showingresultsheader' => "{{PLURAL:$5|Resultaat '''$1''' van '''$3'''|Resultaten '''$1 - $2''' van '''$3'''}} voor '''$4'''",
'nonefound' => "'''Opmerking''': standaard worden niet alle naamruimten doorzocht.
-Als u in uw zoekopdracht als voorvoegsel \"''all:''\" gebruikt worden alle pagina's doorzocht (inclusief overlegpagina's, sjablonen, enzovoort).
+Als u in uw zoekopdracht als voorvoegsel \"''all:''\" gebruikt, worden alle pagina's doorzocht (inclusief overlegpagina's, sjablonen, enzovoort).
U kunt ook een naamruimte als voorvoegsel gebruiken.",
'search-nonefound' => 'Er zijn geen resultaten voor uw zoekopdracht.',
'powersearch' => 'Uitgebreid zoeken',
'recentchangescount' => 'Standaard aantal weer te geven bewerkingen:',
'prefs-help-recentchangescount' => "Dit geldt voor recente wijzigingen, paginageschiedenis en logboekpagina's.",
'prefs-help-watchlist-token' => 'Door hier een geheime sleutel in te vullen wordt een RSS-feed voor uw volglijst aangemaakt.
-Iedereen die deze sleutel kent kan uw volglijst lezen, dus kies een veilige sleutel.
+Iedereen die deze sleutel kent, kan uw volglijst lezen. Kies dus een veilige sleutel.
Hier volgt een willekeurig gegenereerde waarde die u kunt gebruiken: $1',
'savedprefs' => 'Uw voorkeuren zijn opgeslagen.',
'timezonelegend' => 'Tijdzone:',
'prefs-help-gender' => 'Optioneel: dit wordt gebruikt om gebruikers correct aan te spreken in de software.
Deze informatie is zichtbaar voor andere gebruikers.',
'email' => 'E-mail',
-'prefs-help-realname' => 'Echte naam is optioneel, als u deze opgeeft kan deze naam gebruikt worden om u erkenning te geven voor uw werk.',
+'prefs-help-realname' => 'Echte naam is optioneel.
+Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor uw werk.',
'prefs-help-email' => 'E-mailadres is optioneel, maar maakt het mogelijk om u uw wachtwoord te e-mailen als u het bent vergeten.',
'prefs-help-email-others' => 'U kunt ook anderen in staat stellen per e-mail contact met u op te nemen via een verwijzing op uw gebruikers- en overlegpagina zonder dat u uw identiteit prijsgeeft.',
'prefs-help-email-required' => 'Hiervoor is een e-mailadres nodig.',
'userrights-reason' => 'Reden:',
'userrights-no-interwiki' => "U hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
'userrights-nodatabase' => 'De database $1 bestaat niet of is geen lokale database.',
-'userrights-nologin' => 'U moet zich [[Special:UserLogin|aanmelden]] met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.',
+'userrights-nologin' => 'U moet [[Special:UserLogin|aangemeld]] zijn met een gebruiker met de juiste rechten om gebruikersrechten toe te wijzen.',
'userrights-notallowed' => 'U hebt geen rechten om gebruikersrechten toe te voegen of te verwijderen.',
'userrights-changeable-col' => 'Groepen die u kunt beheren',
'userrights-unchangeable-col' => 'Groepen die u niet kunt beheren',
'recentchangeslinked-toolbox' => 'Verwante wijzigingen',
'recentchangeslinked-title' => 'Wijzigingen verwant aan "$1"',
'recentchangeslinked-noresult' => "Er zijn in de opgegeven periode geen bewerkingen geweest op de pagina's waarheen vanaf hier verwezen wordt.",
-'recentchangeslinked-summary' => "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een aangegeven pagina of vanuit pagina's in een aangegeven pagina een categorie.
+'recentchangeslinked-summary' => "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een aangegeven pagina of vanaf pagina's in een aangegeven pagina een categorie.
Pagina's die op [[Special:Watchlist|uw volglijst]] staan worden '''vet''' weergegeven.",
'recentchangeslinked-page' => 'Paginanaam:',
'recentchangeslinked-to' => "Wijzigingen aan pagina's met verwijzingen naar deze pagina bekijken",
'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' => 'Kon het inhoudstype van het bestand om op "$1" op te slaan niet bepalen.',
+'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Het was niet mogelijk een verbinding te maken met de journaldatabase voor het opslagbackend "$1".',
'filejournal-fail-dbquery' => 'Het was niet mogelijk de journaldatabase bij te werken voor het opslagbackend "$1".',
'disambiguations' => "Pagina's die verwijzen naar doorverwijspagina's",
'disambiguationspage' => 'Template:Doorverwijspagina',
'disambiguations-text' => "Hieronder staan pagina's die verwijzen naar een '''doorverwijspagina'''.
-Deze horen waarschijnlijk direct naar het juiste onderwerp te verwijzen.
-<br />Een pagina wordt gezien als doorverwijspagina als er een sjabloon op staat dat opgenomen is op [[MediaWiki:Disambiguationspage]]",
+Deze horen waarschijnlijk direct naar het juiste onderwerp te verwijzen.<br />
+Een pagina wordt gezien als doorverwijspagina als er een sjabloon op staat dat opgenomen is op [[MediaWiki:Disambiguationspage]].",
'doubleredirects' => 'Dubbele doorverwijzingen',
'doubleredirectstext' => "Deze lijst bevat pagina's die doorverwijzen naar andere doorverwijspagina's.
'allpagessubmit' => 'OK',
'allpagesprefix' => "Pagina's bekijken die beginnen met:",
'allpagesbadtitle' => 'De opgegeven paginanaam is ongeldig of had een intertaal- of interwikivoorvoegsel.
-Mogelijk bevatte de naam karakters die niet gebruikt mogen worden in paginanamen.',
+Mogelijk bevatte de naam tekens die niet gebruikt mogen worden in paginanamen.',
'allpages-bad-ns' => '{{SITENAME}} heeft geen naamruimte "$1".',
'allpages-hide-redirects' => 'Doorverwijzingen verbergen',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'U bekijkt een cacheversie van deze pagina, die maximaal $1 oud is.',
+'cachedspecial-viewing-cached-ts' => 'U bekijkt een cacheversie van deze pagina, die mogelijk niet volledig is bijgewerkt.',
+'cachedspecial-refresh-now' => 'Meest recente weergeven.',
+
# Special:Categories
'categories' => 'Categorieën',
'categoriespagetext' => "De volgende {{PLURAL:$1|categorie bevat|categorieën bevatten}} pagina's of mediabestanden.
'emailtarget' => 'Voer de geadresseerde in',
'emailusername' => 'Gebruikersnaam:',
'emailusernamesubmit' => 'Opslaan',
-'email-legend' => 'Een e-mail versturen naar een andere gebruiker van {{SITENAME}}',
+'email-legend' => 'Een e-mail verzenden naar een andere gebruiker van {{SITENAME}}',
'emailfrom' => 'Van:',
'emailto' => 'Aan:',
'emailsubject' => 'Onderwerp:',
'emailmessage' => 'Bericht:',
'emailsend' => 'Verzenden',
-'emailccme' => 'Een kopie van dit bericht naar mijn e-mailadres sturen.',
+'emailccme' => 'Een kopie van dit bericht naar mijn e-mailadres zenden.',
'emailccsubject' => 'Kopie van uw bericht aan $1: $2',
'emailsent' => 'E-mail verzonden',
'emailsenttext' => 'Uw e-mail is verzonden.',
'enotif_anon_editor' => 'anonieme gebruiker $1',
'enotif_body' => 'Beste $WATCHINGUSERNAME,
-De pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE door $PAGEEDITOR, zie $PAGETITLE_URL voor de huidige versie.
+De pagina $PAGETITLE op {{SITENAME}} is $CHANGEDORCREATED op $PAGEEDITDATE door $PAGEEDITOR. Zie $PAGETITLE_URL voor de huidige versie.
$NEWPAGE
Samenvatting van de wijziging: $PAGESUMMARY $PAGEMINOREDIT
Contactgegevens van de auteur:
-E-mail: $PAGEEDITOR_EMAIL
+E-mailadres: $PAGEEDITOR_EMAIL
Wiki: $PAGEEDITOR_WIKI
Tenzij u deze pagina bezoekt, komen er geen verdere berichten. Op uw volglijst kunt u voor alle gevolgde pagina\'s de waarschuwingsinstellingen opschonen.
- Groet van uw {{SITENAME}}-waarschuwingssysteem.
+Groet van uw {{SITENAME}}-waarschuwingssysteem.
--
U kunt uw e-mailinstellingen wijzigen op:
U kunt de pagina van uw volglijst verwijderen via de volgende verwijzing:
$UNWATCHURL
-Feedback en andere assistentie:
+Terugkoppeling en verdere assistentie:
{{canonicalurl:{{MediaWiki:Helppage}}}}',
# Delete
'modifiedarticleprotection' => 'heeft het beveiligingsniveau voor "[[$1]]" gewijzigd',
'unprotectedarticle' => 'heeft de beveiliging van "[[$1]]" opgeheven',
'movedarticleprotection' => 'heeft beveiligingsinstellingen verplaatst van "[[$2]]" naar "[[$1]]"',
-'protect-title' => 'Instellen van beveiligingsniveau voor "$1"',
+'protect-title' => 'Beveiligingsniveau instellen voor "$1"',
'protect-title-notallowed' => 'Beveiligingsniveau voor "$1" bekijken',
'prot_1movedto2' => '[[$1]] is hernoemd naar [[$2]]',
'protect-badnamespace-title' => 'Niet te beveiligen naamruimte',
'protect-unchain-permissions' => 'Overige beveiligingsinstellingen beschikbaar maken',
'protect-text' => "Hier kunt u het beveiligingsniveau voor de pagina '''$1''' bekijken en wijzigen.",
'protect-locked-blocked' => "U kunt het beveiligingsniveau niet wijzigen terwijl u geblokkeerd bent.
-Hier zijn de huidige instellingen voor de pagina '''$1''':",
+Dit zijn de huidige instellingen voor de pagina '''$1''':",
'protect-locked-dblock' => "Het beveiligingsniveau kan niet worden gewijzigd, omdat de database gesloten is.
Hier zijn de huidige instellingen voor de pagina '''$1''':",
'protect-locked-access' => "U hebt geen rechten om het beveiligingsniveau te wijzigen.
'undeletelink' => 'bekijken/terugplaatsen',
'undeleteviewlink' => 'bekijken',
'undeletereset' => 'Fomulier wissen',
-'undeleteinvert' => 'Omgekeerde selectie',
+'undeleteinvert' => 'Selectie omkeren',
'undeletecomment' => 'Reden:',
'undeletedrevisions' => '$1 {{PLURAL:$1|versie|versies}} teruggeplaatst',
'undeletedrevisions-files' => '{{PLURAL:$1|1 versie|$1 versies}} en {{PLURAL:$2|1 bestand|$2 bestanden}} teruggeplaatst',
'undelete-filename-mismatch' => 'Bestandsversie van tijdstip $1 kon niet hersteld worden: bestandsnaam klopte niet',
'undelete-bad-store-key' => 'Bestandsversie van tijdstip $1 kon niet hersteld worden: het bestand miste al voordat het werd verwijderd.',
'undelete-cleanup-error' => 'Fout bij het herstellen van ongebruikt archiefbestand "$1".',
-'undelete-missing-filearchive' => 'Het lukt niet om ID $1 terug te plaatsen, omdat deze niet in de database te vinden is.
+'undelete-missing-filearchive' => 'Het is niet mogelijk om ID $1 terug te plaatsen, omdat deze niet in de database te vinden is.
Misschien is deze versie al teruggeplaatst.',
'undelete-error' => 'Er is een fout opgetreden tijdens het verwijderen van de pagina',
'undelete-error-short' => 'Fout bij het herstellen van bestand: $1',
# Namespace form on various pages
'namespace' => 'Naamruimte:',
-'invert' => 'Omgekeerde selectie',
+'invert' => 'Selectie omkeren',
'tooltip-invert' => 'Vink dit aan om wijzigingen te verbergen in de geselecteerde naamruimte (en de gekoppelde naamruimte indien aangevinkt)',
'namespace_association' => 'Gekoppelde naamruimte',
'tooltip-namespace_association' => 'Vink dit aan om ook wijzigingen weer te geven in de overleg- of onderwerpnaamruimte die bij de geselecteerde naamruimte hoort',
'badipaddress' => 'Geen geldig IP-adres',
'blockipsuccesssub' => 'De blokkering is ingesteld',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] is geblokkeerd.<br />
-Zie de [[Special:BlockList|Lijst van geblokkeerde IP-adressen]] voor recente blokkades.',
+Zie de [[Special:BlockList|blokkadelijst]] voor recente blokkades.',
'ipb-blockingself' => 'U staat op het punt uzelf te blokkeren. Weet u zeker dat u dat wilt doen?',
'ipb-confirmhideuser' => 'U staat op het punt een verborgen gebruiker te blokkeren. Hiervoor worden gebruikersnamen in alle lijsten en logboekregels verborgen. Weet u het zeker?',
'ipb-edit-dropdown' => 'Lijst van redenen bewerken',
Het blokkeerlogboek wordt hieronder ter referentie weergegeven:',
'blocklog-showsuppresslog' => 'Deze gebruiker is voorheen geblokkeerd geweest en er zijn (delen van) bewerkingen van deze gebruiker verborgen.
Het verbergingslogboek wordt hieronder ter referentie weergegeven:',
-'blocklogentry' => 'blokkeerde [[$1]] met als vervaltijd $2 $3',
+'blocklogentry' => 'heeft [[$1]] geblokkeerd met als vervaltijd $2 $3',
'reblock-logentry' => 'heeft de blokkade voor [[$1]] gewijzigd met als vervaldatum $2 $3',
'blocklogtext' => 'Hier ziet u een lijst van de recente blokkeringen en deblokkeringen.
Automatische blokkeringen en deblokkeringen komen niet in het logboek.
-Zie ook [[Special:BlockList|Geblokkeerde IP-adressen en gebruikers]].',
+Zie ook de [[Special:BlockList|blokkadelijst]] voor de op dit moment actieve blokkades.',
'unblocklogentry' => 'heeft de blokkade van $1 opgeheven',
'block-log-flags-anononly' => 'alleen anoniemen',
'block-log-flags-nocreate' => 'registreren gebruikers geblokkeerd',
# Developer tools
'lockdb' => 'Database blokkeren',
'unlockdb' => 'Blokkering van de database opheffen',
-'lockdbtext' => "Waarschuwing: de database blokkeren heeft tot gevolg dat geen enkele gebruiker meer in staat is pagina's te bewerken, voorkeuren te wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.
-
+'lockdbtext' => "Als u de database blokkeert, kunnen gebruikers geen pagina's meer bewerken, geen voorkeuren wijzigen of iets anders te doen waarvoor wijzigingen in de database nodig zijn.
Bevestig dat u deze handeling wilt uitvoeren en dat u de database vrijgeeft nadat het onderhoud is uitgevoerd.",
'unlockdbtext' => "Na het vrijgeven van de database kunnen gebruikers weer pagina's bewerken, hun voorkeuren wijzigen of iets anders te doen waarvoor er wijzigingen in de database nodig zijn.
* De overlegpagina onder de nieuwe naam al bestaat;
* U het onderstaande vinkje deselecteert.",
'movearticle' => 'Te hernoemen pagina:',
-'moveuserpage-warning' => "'''Waarschuwing:''' U gaat een gebruikerspagina hernoemen.
-Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
+'moveuserpage-warning' => "'''Waarschuwing:''' u gaat een gebruikerspagina hernoemen. Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
'movenologin' => 'Niet aangemeld',
'movenologintext' => 'U moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.',
'movenotallowed' => "U hebt geen rechten om pagina's te hernoemen.",
'imageinvalidfilename' => 'De nieuwe bestandsnaam is ongeldig',
'fix-double-redirects' => 'Alle doorverwijzingen bijwerken die verwijzen naar de originele paginanaam',
'move-leave-redirect' => 'Een doorverwijzing achterlaten',
-'protectedpagemovewarning' => "'''Waarschuwing:''' Deze pagina kan alleen door beheerders hernoemd worden.
+'protectedpagemovewarning' => "'''Waarschuwing:''' deze pagina kan alleen door beheerders hernoemd worden.
De laatste logboekregel staat hieronder:",
-'semiprotectedpagemovewarning' => "'''Let op:''' Deze pagina kan alleen door geregistreerde gebruikers hernoemd worden.
+'semiprotectedpagemovewarning' => "'''Let op:''' deze pagina kan alleen door geregistreerde gebruikers hernoemd worden.
De laatste logboekregel staat hieronder:",
'move-over-sharedrepo' => '== Het bestand bestaat al ==
[[:$1]] bestaat al in een gedeelde mediadatabank.
'allmessagescurrent' => 'Huidige inhoud',
'allmessagestext' => 'Hieronder staan de systeemberichten uit de MediaWiki-naamruimte.
Ga naar [//www.mediawiki.org/wiki/Localisation MediaWiki-lokalisatie] en [//translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.',
-'allmessagesnotsupportedDB' => "Deze pagina kan niet gebruikt worden, omdat '''\$wgUseDatabaseMessages''' is uitgeschakeld.",
+'allmessagesnotsupportedDB' => "Deze pagina kan niet worden gebruikt, omdat '''\$wgUseDatabaseMessages''' is uitgeschakeld.",
'allmessages-filter-legend' => 'Filter',
'allmessages-filter' => 'Filteren op aangepast:',
'allmessages-filter-unmodified' => 'Ongewijzigd',
# Import log
'importlogpage' => 'Importlogboek',
'importlogpagetext' => "Administratieve import van pagina's met geschiedenis van andere wiki's.",
-'import-logentry-upload' => 'importeerde [[$1]] via een bestandsupload',
+'import-logentry-upload' => 'heeft [[$1]] geïmporteerd via een bestandsupload',
'import-logentry-upload-detail' => '$1 {{PLURAL:$1|versie|versies}}',
'import-logentry-interwiki' => 'importeerde $1 via transwiki',
'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|versie|versies}} van $2',
'tooltip-pt-anonlogin' => 'U wordt van harte uitgenodigd om u aan te melden als gebruiker, maar dit is niet verplicht',
'tooltip-pt-logout' => 'Afmelden',
'tooltip-ca-talk' => 'Overleg over deze pagina',
-'tooltip-ca-edit' => 'U kunt deze pagina bewerken. Gebruik de voorbeeldweergaveknop alvorens te bewaren.',
+'tooltip-ca-edit' => 'U kunt deze pagina bewerken. Gebruik de knop "Bewerking ter controle bekijken" voordat u de pagina opslaat',
'tooltip-ca-addsection' => 'Nieuw kopje toevoegen',
-'tooltip-ca-viewsource' => 'Deze pagina is beveiligd. U kunt wel de broncode bekijken.',
+'tooltip-ca-viewsource' => 'Deze pagina is beveiligd.
+U kunt wel de broncode bekijken.',
'tooltip-ca-history' => 'Eerdere versies van deze pagina',
'tooltip-ca-protect' => 'Deze pagina beveiligen',
'tooltip-ca-unprotect' => 'De beveiliging voor deze pagina wijzigen',
'tooltip-ca-move' => 'Deze pagina hernoemen',
'tooltip-ca-watch' => 'Deze pagina aan mijn volglijst toevoegen',
'tooltip-ca-unwatch' => 'Deze pagina van mijn volglijst verwijderen',
-'tooltip-search' => '{{SITENAME}} doorzoeken',
+'tooltip-search' => 'Zoeken in {{SITENAME}}',
'tooltip-search-go' => 'Naar een pagina met deze naam gaan als die bestaat',
'tooltip-search-fulltext' => "Alle pagina's op deze tekst doorzoeken",
'tooltip-p-logo' => 'Naar de hoofdpagina gaan',
'markaspatrolleddiff' => 'Als gecontroleerd markeren',
'markaspatrolledtext' => 'Deze pagina als gecontroleerd markeren',
'markedaspatrolled' => 'Gemarkeerd als gecontroleerd',
-'markedaspatrolledtext' => 'De geselecteerde versie van [[:$1]] is gemarkeerd als gecontroleerd.',
+'markedaspatrolledtext' => 'De geselecteerde bewerking van [[:$1]] is gemarkeerd als gecontroleerd.',
'rcpatroldisabled' => 'De controlemogelijkheid op recente wijzigingen is uitgeschakeld.',
'rcpatroldisabledtext' => 'De mogelijkheid om recente wijzigingen als gecontroleerd aan te merken is op dit ogenblik uitgeschakeld.',
'markedaspatrollederror' => 'Kan niet als gecontroleerd worden aangemerkt',
# Media information
'mediawarning' => "'''Waarschuwing''': dit bestandstype bevat mogelijk programmacode die uw systeem schade kan berokkenen.",
-'imagemaxsize' => "Maximale afmetingen van afbeeldingen:<br />
-''(voor op de beschrijvingspagina)''",
+'imagemaxsize' => "Maximale afmetingen van afbeeldingen:<br />''(voor op de beschrijvingspagina)''",
'thumbsize' => 'Grootte miniatuurafbeelding:',
'widthheight' => '$1 × $2',
'widthheightpage' => "$1 × $2, $3 {{PLURAL:$3|pagina|pagina's}}",
# Metadata
'metadata' => 'Metadata',
-'metadata-help' => 'Dit bestand bevat aanvullende informatie, die door een fotocamera, scanner of fotobewerkingsprogramma toegevoegd kan zijn.
-Als het bestand aangepast is, komen details mogelijk niet overeen met het gewijzigde bestand.',
+'metadata-help' => 'Dit bestand bevat aanvullende gegevens, die waarschijnlijk door een fotocamera, scanner of fotobewerkingsprogramma toegevoegd zijn.
+Als het bestand is aangepast, komen sommige details mogelijk niet overeen met het gewijzigde bestand.',
'metadata-expand' => 'Uitgebreide gegevens bekijken',
'metadata-collapse' => 'Uitgebreide gegevens verbergen',
'metadata-fields' => 'De afbeeldingsmetadatavelden in dit bericht worden ook weergegeven op een afbeeldingspagina als de metadatatabel ingeklapt is.
Probeer normale voorvertoning.',
# Friendlier slave lag warnings
-'lag-warn-normal' => 'Veranderingen die nieuwer zijn dan $1 {{PLURAL:$1|seconde|seconden}} worden misschien niet weergegeven in deze lijst.',
+'lag-warn-normal' => 'Wijzigingen in de afgelopen {{PLURAL:$1|seconde|$1 seconden}} worden misschien niet weergegeven in deze lijst.',
'lag-warn-high' => 'Door een hoge database-servertoevoer zijn wijzigingen nieuwer dan $1 {{PLURAL:$1|seconde|seconden}} mogelijk niet beschikbaar in de lijst.',
# Watchlist editor
'watchlistedit-normal-title' => 'Volglijst bewerken',
'watchlistedit-normal-legend' => 'Pagina’s van uw volglijst verwijderen',
'watchlistedit-normal-explain' => 'Hieronder worden de pagina’s op uw volglijst weergegeven.
-Klik op het vierkantje ernaast en daarna op "{{int:Watchlistedit-normal-submit}}" om een pagina te verwijderen.
+Klik op het vinkvakje ernaast en daarna op "{{int:Watchlistedit-normal-submit}}" om een pagina te verwijderen.
U kunt ook de [[Special:EditWatchlist/raw|ruwe lijst bewerken]].',
'watchlistedit-normal-submit' => "Pagina's verwijderen",
'watchlistedit-normal-done' => 'Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina’s}} verwijderd van uw volglijst:',
# Core parser functions
'unknown_extension_tag' => 'Onbekende tag "$1"',
-'duplicate-defaultsort' => 'Waarschuwing: De standaardsortering "$2" krijgt voorrang voor de sortering "$1".',
+'duplicate-defaultsort' => '\'\'\'Waarschuwing:\'\'\' de standaardsortering "$2" krijgt voorrang voor de sortering "$1".',
# Special:Version
'version' => 'Versie',
'version-software' => 'Geïnstalleerde software',
'version-software-product' => 'Product',
'version-software-version' => 'Versie',
+'version-entrypoints' => "URL's voor ingangen",
+'version-entrypoints-header-entrypoint' => 'Ingang',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Article path]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Script path]',
# Special:FilePath
'filepath' => 'Bestandslocatie',
'logentry-delete-event' => '$1 heeft de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
'logentry-delete-revision' => '$1 heeft de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
'logentry-delete-event-legacy' => '$1 heeft de zichtbaarheid van logboekregels van $3 gewijzigd',
-'logentry-delete-revision-legacy' => '$1 heeft de zichtbaarheid van versies van de pagina $3 gewijzigd.',
+'logentry-delete-revision-legacy' => '$1 heeft de zichtbaarheid van versies van de pagina $3 gewijzigd',
'logentry-suppress-delete' => '$1 heeft de pagina $3 onderdrukt',
'logentry-suppress-event' => '$1 heeft heimelijk de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4',
'logentry-suppress-revision' => '$1 heeft heimelijk de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4',
'revdelete-restricted' => 'heeft beperkingen aan beheerders opgelegd',
'revdelete-unrestricted' => 'heeft beperkingen voor beheerders opgeheven',
'logentry-move-move' => '$1 heeft pagina $3 naar $4 hernoemd',
-'logentry-move-move-noredirect' => '$1 hernoemde pagina $3 naar $4 zonder een doorverwijzing achter te laten',
-'logentry-move-move_redir' => '$1 hernoemde pagina $3 naar $4 over een doorverwijzing',
+'logentry-move-move-noredirect' => '$1 heeft de pagina $3 hernoemd naar $4 zonder een doorverwijzing achter te laten',
+'logentry-move-move_redir' => '$1 heeft pagina $3 hernoemd naar $4 over een doorverwijzing',
'logentry-move-move_redir-noredirect' => '$1 heeft pagina $3 naar $4 hernoemd over een doorverwijzing zonder een doorverwijzing achter te laten',
'logentry-patrol-patrol' => '$1 heeft versie $4 van pagina $3 als gecontroleerd gemarkeerd',
'logentry-patrol-patrol-auto' => '$1 heeft versie $4 van pagina $3 automatisch als gecontroleerd gemarkeerd',
# Feedback
'feedback-bugornote' => 'Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].
-Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw commentaar zal worden toegevoegd aan de pagina "[$3 $2]", samen met uw gebruikersnaam en de browser die u gebruikt.',
+Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt dan toegevoegd aan de pagina "[$3 $2]", samen met uw gebruikersnaam en de browser die u gebruikt.',
'feedback-subject' => 'Onderwerp:',
'feedback-message' => 'Bericht:',
'feedback-cancel' => 'Annuleren',
'api-error-uploaddisabled' => 'Uploaden is niet mogelijk in deze wiki.',
'api-error-verification-error' => 'Dit bestand is mogelijk beschadigd of heeft een onjuiste extensie.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|seconde|seconden}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuut|minuten}}',
+'duration-hours' => '$1 {{PLURAL:$1|uur|uren}}',
+'duration-days' => '$1 {{PLURAL:$1|dag|dagen}}',
+'duration-weeks' => '$1 {{PLURAL:$1|week|weken}}',
+'duration-years' => '$1 {{PLURAL:$1|jaar|jaar}}',
+'duration-decades' => '$1 {{PLURAL:$1|decennium|decennia}}',
+'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
+
);
'userinvalidcssjstitle' => "'''Åtvaring:''' Det finst ikkje noka sidedrakt som heiter «$1». Hugs på at vanlege .css- og .js-sider brukar titlar med små bokstavar, til dømes {{ns:user}}:Døme/vector.css, og ikkje {{ns:user}}:Døme/Vector.css.",
'updated' => '(Oppdatert)',
'note' => "'''Merk:'''",
-'previewnote' => "'''Hugs at dette berre er ei førehandsvising og at teksten ikkje er lagra!'''",
+'previewnote' => "'''Hugsa at dette berre er ei førehandsvising.'''
+Endringane dine er ikkje lagra enno! [[#editform|→ Haldt fram med å endra]]",
'previewconflict' => 'Dette er ei førehandsvising av teksten i endringsboksen over, slik han vil sjå ut om du lagrar han',
'session_fail_preview' => "'''Orsak! Endringa di kunne ikkje lagrast. Ver venleg og prøv ein gong til. Dersom det framleis ikkje går, prøv å logge deg ut og inn att.'''",
'session_fail_preview_html' => "'''Beklagar! Endringa di kunne ikkje lagrast.'''
'token_suffix_mismatch' => "'''Endringa di vart avvist fordi klienten/nettlesaren din lagar teiknfeil i teksten. Dette vart gjort for å hindre øydelegging av teksten på sida. Slikt kan av og til hende når ein brukar feilprogrammerte og vevbaserte anonyme proxytenester.'''",
'edit_form_incomplete' => 'Delar av redigeringsskjemaet nådde ikkje fram til tenaren; dobbelsjekk at redigeringa er korrekt, og prøv om att.',
'editing' => 'Endrar $1',
+'creating' => 'Opprettar $1',
'editingsection' => 'Endrar $1 (bolk)',
'editingcomment' => 'Endrar $1 (ny bolk)',
'editconflict' => 'Endringskonflikt: $1',
'newsectionsummary' => '/* $1 */ ny bolk',
'rc-enhanced-expand' => 'Vis detaljar (krev JavaScript)',
'rc-enhanced-hide' => 'Skjul detaljar',
+'rc-old-title' => 'opphavleg oppretta som «$1»',
# Recent changes linked
'recentchangeslinked' => 'Relaterte endringar',
'hidden-category-category' => 'Æмбæхст категоритæ',
'category-subcat-count' => '{{PLURAL:$2|Ацы категорийы мидæг æрмæст иу дæлкатегори ис.|{{PLURAL:$1|$1 дæлкатегори æвдыст у|$1 дæлкатегорийы æвдыст сты}}, æдæппæт $2.}}',
'category-subcat-count-limited' => 'Ацы категорийы мидæг ис {{PLURAL:$1|$1 дæлкатегори|$1 дæлкатегорийы}}.',
-'category-article-count' => '{{PLURAL:$2|Ацы категорийы æрмæст иу фарс и.|Ацы категорийы $2 фарсæй {{PLURAL:$1|æвдыст у $1.|æвдыст сты $1 фарсы.}}}}',
+'category-article-count' => '{{PLURAL:$2|Ацы категорийы æрмæст иу фарс ис.|Ацы категорийы $2 фарсæй {{PLURAL:$1|æвдыст у $1.|æвдыст сты $1 фарсы.}}}}',
'category-article-count-limited' => 'Ацы категорийы мидæг {{PLURAL:$1|$1 фарс|$1 фарсы}} ис.',
'category-file-count' => '{{PLURAL:$2|Ацы категорийы æрмæст иу файл ис.|Ацы категорийы $2 файлæй {{PLURAL:$1|æвдыст у $1.|æвдыст сты $1.}}}}',
'category-file-count-limited' => 'Ацы категорийы {{PLURAL:$1|$1 файл|$1 файлы}} ис.',
Æхгæныны бындур уыд "\'\'$2\'\'".',
'filereadonlyerror' => 'Нæ уайы фæивын файл "$1" уый тыххæй æмæ репозиторий "$2" кусы æрмæст фæрсыны уавæры.
-РаздæÑ\85Ñ\82 бÑ\8bндÑ\83Ñ\80 Ñ\83 "\'\'$3\'\'".',
+РадгæÑ\81, кæÑ\86Ñ\8b Ñ\81æвæÑ\80дÑ\82а аÑ\86Ñ\8b Ñ\83авæÑ\80, нÑ\8bÑ\83Ñ\83агÑ\8aÑ\82а аÑ\85æм амонæн: "\'\'$3\'\'".',
# Virus scanner
'virus-badscanner' => "Æвзæр æвæрд: Нæзонгæ вирусты скане: ''$1''",
'welcomecreation' => '== Ӕгас цу, $1! ==
Дæ аккаунт арæзт æрцыдис.
Ма дæ ферох уæт æркæсын дæ [[Special:Preferences|{{grammar:genitive|{{SITENAME}}}} фадæттæм]].',
-'yourname' => 'Ð\90Ñ\80Ñ\85айæджÑ\8b ном:',
+'yourname' => 'ФæÑ\81номÑ\8bг:',
'yourpassword' => 'Пароль:',
'yourpasswordagain' => 'Дæ пароль иу хатт ма:',
'remembermypassword' => 'Бахъуыды мæ кæнæд ашы браузеры (максимум $1 {{PLURAL:$1|бонмæ|бонмæ}})',
'createaccountmail' => 'адрисмæ гæсгæ',
'createaccountreason' => 'Бындур:',
'badretype' => 'Дыууæ хатты иу пароль хъуамæ ныффыстаис',
-'userexists' => 'Уыцы ном нæвдæлон у.
+'userexists' => 'Уыцы фæсномыг нæвдæлон у.
Дæ хорзæхæй, равзар æндæр.',
'loginerror' => 'Бахизыны рæдыд',
'createaccounterror' => 'Нæ рауадис аккаунт саразын: $1',
Дæ хорзæхæй, баиу цæ кæн æмæ нæуæгæй бафæлвар.',
'nocookiesfornew' => 'Архайæджы аккаунт нæ сарæзт ис, уымæн æмæ йын мах нæ базыдтам йæ равзæрæн.
Бацархай, цæмæй cookies иу уой, анæуæг кæн ацы фарс æмæ ногæй бафæлвар.',
-'noname' => 'Ð\94Ñ\8b нæ нÑ\8bÑ\84Ñ\84Ñ\8bÑ\81Ñ\82ай Ñ\80аÑ\81Ñ\82 аÑ\80Ñ\85айæджÑ\8b ном.',
+'noname' => 'РаÑ\81Ñ\82 Ñ\84æÑ\81номÑ\8bг нæ нÑ\8bÑ\84Ñ\84Ñ\8bÑ\81Ñ\82ай.',
'loginsuccesstitle' => 'Бахизын рауадис',
'loginsuccess' => "'''Ныр ды дæ хыст {{grammar:genitive|{{SITENAME}}}} куыд \"\$1\".'''",
'nosuchuser' => 'Нæй ахæм архайæг "$1" номимæ.
Архайджыты нæмттæ хатынц дамгъæты регистр.
Сбæрæг æй кæн, раст ныффыстай ном, æви [[Special:UserLogin/signup|бакæн ног аккаунт]].',
-'nosuchusershort' => 'Нæй архайæг "$1" номимæ.
-Фен, ном раст ныффыстай, æви нæ.',
-'nouserspecified' => 'Ды хъуамæ зæгъай дæ ном.',
+'nosuchusershort' => 'Нæй архайæг "$1" фæсномыгимæ.
+Фен, фæсномыг раст ныффыстай, æви нæ.',
+'nouserspecified' => 'Ды хъуамæ зæгъай дæ фæсномыг.',
'login-userblocked' => 'Ацы архайæг хъодыгонд у. Нæй гæнæн бахизын.',
'wrongpassword' => 'Цы пароль ныффыстай, уый раст нæу.
Лæмбынæгæй ныффысс дæ пароль',
'wrongpasswordempty' => 'Пароль афтид у.
Бафæлвар ногæй.',
'passwordtooshort' => 'Паролтæ хъуамæ уой уæддæр {{PLURAL:$1|1 дамгъæйы|$1 дамгъæйы}} дæргъæн.',
-'password-name-match' => 'Дæ парол ма хъуамæ уа дæ номы хуызæн.',
-'password-login-forbidden' => 'Ацы архайæджы ном æмæ паролæй нæй гæнæн архайын.',
+'password-name-match' => 'Дæ парол ма хъуамæ уа дæ фæсномыгы хуызæн.',
+'password-login-forbidden' => 'Ацы фæсномыг æмæ паролæй нæй гæнæн архайын.',
'mailmypassword' => 'Рарвит мæм ног пароль',
'passwordremindertitle' => 'Ног рæстæгмæ пароль {{grammar:dative|{{SITENAME}}}}',
'passwordremindertext' => 'Чидæр (æвæццæгæн ды, $1 IP адрисæй) æрдомтта ног парол {{grammar:dative|{{SITENAME}}}} ($4). "$2" архайæгæн арæзт æрцыд рæстæгмæ парол. Парол у "$3". Кæд уый ды уыдтæ, уæд дын ныр хъæудзæн бахизын æмæ равзарын ног парол.
'blocked-mailpassword' => 'Дæ IP адрис уыд хъодыгонд ивынæй æмæ цæмæй мачи разнаггад кæна, уы тыххæй дзы нæй гæнæн парол раивын дæр.',
'eauthentsent' => 'Бæлвырдгæнæн фыстæг æрвыст æрцыд амынд e-mail адрисмæ.
Цæмæй дæм æндæр фыстæджытæ дæр цæуой, уый тыххæй дын хъæудзæн сæххæст кæнын фыстæджы фыст амындтытæ. Уый фæстæ сбæлвыд уыдзæн аккаунт æцæгдæр дæу кæй у, уый.',
+'throttled-mailpassword' => 'Паролрымысæн нырид æрвыст æрцыд фæстаг {{PLURAL:$1|сахаты|$1 сахаты}} мидæг.
+Цæмæй мачи разнагкад кæна, уый тыххæй æрмæст иу хатт ис гæнæн райсын рымысæнфыстæг {{PLURAL:$1|сахаты|$1 сахаты}} мидæг.',
'mailerror' => 'Фыстæг арвитыны рæдыд: $1',
+'acct_creation_throttle_hit' => 'Ацы викимæ дæ IP адрисæй чи æрбацыдис, уыдон фæстаг боны мидæг бакодтой {{PLURAL:$1|1 аккаунт|$1 аккаунты}}. Уымæй фылдæр нæй гæнæн ахæм рæстæгмæ.
+Уый тыххæй, ацы тæккæ, ацы IP адрисæй уазджытæн сæ бон нæу бакæнын аккаунттæ.',
+'emailauthenticated' => 'Дæ e-mail уыд бæлвырдгонд $2 $3 сахатыл.',
+'emailnotauthenticated' => 'Дæ e-mail адрис нырмæ нæу бæлвырдгонд.
+Иу e-mail дæр дæм нæ уыдзæн æрвыст ацы функцитæй.',
+'noemailprefs' => 'Бафысс e-mail адрис дæ фадæтты, цæмæй ацы функцитæ кусой.',
'emailconfirmlink' => 'Дæ электронон посты адрис сфидар кæн',
+'invalidemailaddress' => 'E-mail нæй гæнæн райсын, уымæн æмæ йæ формат раст нæу.
+Бафысс раст форматы адрис кæнæ та йæ сафтид кæн.',
+'cannotchangeemail' => 'Аккаунты e-mail нæй гæнæн ивын ацы викийы.',
+'emaildisabled' => 'Ацы сайтæн йæ бон нæу æрвитын e-mail.',
+'accountcreated' => 'Аккаунт конд æрцыд',
+'accountcreatedtext' => '$1 архайæджы аккаунт конд æрцыд.',
+'createaccount-title' => '{{grammar:genitive|{{SITENAME}}}} аккант бакæнын',
'loginlanguagelabel' => 'Æвзаг: $1',
# Change password dialog
'resetpass-temp-password' => 'Рæстæгмæ пароль:',
# Special:PasswordReset
-'passwordreset-username' => 'Ð\90Ñ\80Ñ\85айæджÑ\8b ном:',
+'passwordreset-username' => 'ФæÑ\81номÑ\8bг:',
'passwordreset-email' => 'Электрон посты адрис:',
-'passwordreset-emailelement' => 'Ð\90Ñ\80Ñ\85айæджÑ\8b ном: $1
+'passwordreset-emailelement' => 'ФæÑ\81номÑ\8bг: $1
Рæстæгмæ пароль: $2',
# Special:ChangeEmail
'history-feed-item-nocomment' => '$1 $2',
# Revision deletion
-'rev-deleted-comment' => '(ивды афыст æппæрст æрцыд)',
-'rev-deleted-user' => '(архайæджы ном аппæрст у)',
-'rev-deleted-event' => '(фыст аппæрст у)',
+'rev-deleted-comment' => '(ивды афыст хафт у)',
+'rev-deleted-user' => '(фæсномыг хафт у)',
+'rev-deleted-event' => '(фыст хафт у)',
'rev-delundel' => 'равдисын/айсын',
-'revisiondelete' => 'Ð\90ппаÑ\80 / Ñ\80аÑ\86аÑ\80аз фарсы фæлтæртæ',
+'revisiondelete' => 'СÑ\85аÑ\84Ñ\8bн/Ñ\80аÑ\86аÑ\80азÑ\8bн фарсы фæлтæртæ',
'revdel-restore' => 'ивын зынæн',
'revdel-restore-deleted' => 'хафт ивдтытæ',
'revdel-restore-visible' => 'зынгæ ивдтытæ',
'prefs-custom-css' => 'Хиæвæрд CSS',
'prefs-custom-js' => 'Хиæвæрд JavaScript',
'youremail' => 'E-mail:',
-'username' => 'РегиÑ\81Ñ\82Ñ\80аÑ\86игонд ном:',
+'username' => 'ФæÑ\81номÑ\8bг:',
'uid' => 'Архайæджы ID:',
'yourrealname' => 'Æцæг ном:',
'yourlanguage' => 'Техникон фыстыты æвзаг:',
'action-edit' => 'ацы фарс ивын',
'action-createpage' => 'фæрстæ кæнын',
'action-createtalk' => 'тæрхоны фæрстæ кæнын',
-'action-createaccount' => 'ацы архайæджы ном аразын',
+'action-createaccount' => 'саразын ацы архайæджы аккаунт',
'action-minoredit' => 'ацы ивд чысылæй нысан кæнын',
'action-move' => 'ацы фарсы ном ивын',
'action-movefile' => 'ацы файлы ном ивын',
'sp-contributions-logs' => 'логтæ',
'sp-contributions-talk' => 'ныхас',
'sp-contributions-search' => 'Бавæрд агурæн',
-'sp-contributions-username' => 'IP адрис кæнæ архайæджы ном:',
+'sp-contributions-username' => 'IP адрис кæнæ фæсномыг:',
'sp-contributions-toponly' => 'Æвдисæт æрмæст фæстаг ивдтытæ',
'sp-contributions-submit' => 'Агурын',
Uzasadnienie blokady: ''$2''.",
'filereadonlyerror' => 'Nie można zmodyfikować pliku "$1" ponieważ repozytorium plików "$2" jest w trybie tylko do odczytu.
-Podany powód to "\'\'$3\'\'".',
+Administrator blokujący go podał następujący powód "\'\'$3\'\'".',
# Virus scanner
'virus-badscanner' => "Zła konfiguracja – nieznany skaner antywirusowy ''$1''",
'edit-no-change' => 'Twoja edycja została zignorowana, ponieważ nie zmienił{{GENDER:|eś|aś|eś(‐aś)}} niczego w tekście.',
'edit-already-exists' => 'Nie udało się stworzyć nowej strony.
Strona już istnieje.',
+'defaultmessagetext' => 'Domyślny tekst komunikatu',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Uwaga! Ta strona zawiera zbyt wiele wywołań złożonych obliczeniowo funkcji parsera.
Powinno być mniej niż $2 {{PLURAL:$2|wywołanie|wywołania|wywołań}}, a obecnie {{PLURAL:$1|jest $1 wywołanie|są $1 wywołania|jest $1 wywołań}}.',
-'expensive-parserfunction-category' => 'Strony ze zbyt dużą liczbą wywołań trudnych funkcji parsera',
+'expensive-parserfunction-category' => 'Strony ze zbyt dużą liczbą wywołań kosztownych funkcji parsera',
'post-expand-template-inclusion-warning' => 'Uwaga – zbyt duża wielkość wykorzystanych szablonów.
Niektóre szablony nie zostaną użyte.',
'post-expand-template-inclusion-category' => 'Strony, w których przekroczone jest ograniczenie wielkości użytych szablonów',
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Nie można połączyć się z bazą danych dziennika dla backendu magazynowania "$1".',
'filejournal-fail-dbquery' => 'Nie można zaktualizować bazy danych dziennika dla backendu magazynowania"$1".',
'allpages-bad-ns' => 'W {{GRAMMAR:MS.lp|{{SITENAME}}}} nie istnieje przestrzeń nazw „$1”.',
'allpages-hide-redirects' => 'Ukryj przekierowania',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Oglądasz buforowaną wersję tej strony, której wiek to maksymalnie $1.',
+'cachedspecial-viewing-cached-ts' => 'Oglądasz buforowaną wersję tej strony, który nie może być w pełni aktualny.',
+'cachedspecial-refresh-now' => 'Najpóźniejszy widok.',
+
# Special:Categories
'categories' => 'Kategorie',
'categoriespagetext' => 'Strona przedstawia {{PLURAL:$1|kategorię zawierającą|listę kategorii zawierających}} strony lub pliki.
'markedaspatrollederror-noautopatrol' => 'Nie masz uprawnień wymaganych do oznaczania swoich edycji jako „sprawdzone”.',
# Patrol log
-'patrol-log-page' => 'Dziennik patrolowania',
-'patrol-log-header' => 'Poniżej znajduje się dziennik patrolowania stron.',
+'patrol-log-page' => 'Rejestr patrolowania',
+'patrol-log-header' => 'Poniżej znajduje się rejestr patrolowania stron.',
'log-show-hide-patrol' => '$1 rejestr sprawdzania',
# Image deletion
'api-error-uploaddisabled' => 'Na tej wiki przesyłanie zostało wyłączone.',
'api-error-verification-error' => 'Plik może być uszkodzony lub nazwa pliku ma nieprawidłowe rozszerzenie.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekundy|sekund}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minuty|minut}}',
+'duration-hours' => '$1 {{PLURAL:$1|godzina|godziny|godzin}}',
+'duration-days' => '$1 {{PLURAL:$1|dzień|dni}}',
+'duration-weeks' => '$1 {{PLURAL:$1|tydzień|tygodnie|tygodni}}',
+'duration-years' => '$1 {{PLURAL:$1|rok|lata|lat}}',
+'duration-decades' => '$1 {{PLURAL:$1|dziesięciolecie|dekady|dekad}}',
+'duration-centuries' => '$1 {{PLURAL:$1|stulecie|stulecia|stuleci}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tysiąclecie|tysiąclecia|tysiącleci}}',
+
);
'userinvalidcssjstitle' => "'''Avis:''' A-i é pa gnun-a pel \"\$1\". Che as visa che le pàgine .css e .js che un as fa daspërchiel a deuvro tute minùscole për tìtol, pr'esempi {{ns:user}}:Scaramacaj/vector.css nopà che {{ns:user}}:Scaramacaj/Vector.css.",
'updated' => '(Agiornà)',
'note' => "'''NÒTA:'''",
-'previewnote' => "'''Che a ten-a mach present che costa-sì a l'é nomach na PREUVA, e che soa version a l'é ancó pa stàita salvà!'''",
+'previewnote' => "'''Che a ten-a present che costa-sì a l'é mach na preuva.'''
+Ij sò cambi a son anco' pa stàit salvà! [[#editform|→ Continué la modìfica]]",
'previewconflict' => "Costa preuva a-j mostra ël test dl'artìcol ambelessì dzora. Se a sërn dë salvelo, a l'é parèj che a lo s-ciairëran ëdcò tuti j'àutri Utent.",
'session_fail_preview' => "'''Darmagi! I l'oma pa podù processé soa modìfica per via che a son përdusse për la stra ij dat ëd session.
Për piasì che a preuva n'àutra vira. Se a dovèissa mai torna riveje sossì, che a preuva a seurte dal sistema e peuj torna a rintré.'''",
# Suppression log
'suppressionlog' => 'Registr ëd le scancelassion',
'suppressionlogtext' => "Sì-sota a-i é na lista djë scancelament e dij blocagi che a rësguardo dij contnù stërmà a j'aministrator.
-Beiché la [[Special:BlockList|lista dj'IP blocà]] për la lista dj'esclusion operassionaj e dij blocagi ativ.",
+Beiché la [[Special:BlockList|lista dij blòch]] për la lista dj'esclusion operassionaj e dij blocagi ativ.",
# History merging
'mergehistory' => 'Buté ansema je stòrie',
'badipaddress' => "L'adrëssa IP che a l'ha dane a l'é nen giusta.",
'blockipsuccesssub' => 'Blocagi fàit',
'blockipsuccesstext' => "[[Special:Contributions/$1|$1]] a l'é stàit blocà.<br />
-Ch'a consulta la [[Special:BlockList|lista dj'IP blocà]] për rivëdde ij blocagi.",
+Ch'a consulta la [[Special:BlockList|lista dij blòch]] për rivëdde ij blocagi.",
'ipb-blockingself' => "A l'é an camin ch'as blòca chiel-midem! É-lo sigur ëd vorèj fé lòn?",
'ipb-confirmhideuser' => "A l'é an camin ch'a blòca n'utent con «stërmé l'utent» abilità. Sòn a gaverà lë stranòm ëd l'utent da tute le liste e le vos ëd registr. É-lo sigur ëd vorèj fé lòn?",
'ipb-edit-dropdown' => 'Modifiché le rason dël blocagi',
'reblock-logentry' => "a l'ha cambià j'ampostassion dël blocagi për [[$1]] con na scadensa ai $2 $3",
'blocklogtext' => "Sossì a l'é ël registr dij blocagi e dësblocagi dj'Utent. J'adrësse che
a son ëstàite blocà n'automàtich ambelessì a së s-ciàiro nen.
-Che a varda la [[Special:BlockList|lista dj'adrësse IP blocà]] për vëdde
+Che a varda la [[Special:BlockList|lista dij blòch]] për vëdde
coj che sio ij blocagi ativ al dì d'ancheuj.",
'unblocklogentry' => "a l'ha dësblocà $1",
'block-log-flags-anononly' => 'mach utent anònim',
'movenotallowed' => "A l'ha pa ij përmess dont a fa da manca për tramudé le pàgine.",
'movenotallowedfile' => "A l'ha pa ij përmess për tramudé j'archivi.",
'cant-move-user-page' => "A l'ha pa ij përmess për tramudé le pàgine d'utent (gavà le sot-pàgine).",
-'cant-move-to-user-page' => "It l'has pa ij përmess për tramudé na pàgina a na pàgina utent (an gavand a na sotpàgina utent).",
+'cant-move-to-user-page' => "A l'ha pa ël përmess për tramudé na pàgina a na pàgina utent (gavà a na sot-pàgina utent).",
'newtitle' => 'Neuv tìtol ëd',
-'move-watch' => 'Ten sot euj sta pàgina-sì',
-'movepagebtn' => 'Tramuda sta pàgina-sì',
+'move-watch' => 'Ten-e sot-euj la pàgina sorgiss e la pàgina selessionà',
+'movepagebtn' => 'Tramudé la pàgina',
'pagemovedsub' => 'San Martin bele finì!',
-'movepage-moved' => "'''\"\$1\" a l'é stàit spostà a \"\$2\"'''",
+'movepage-moved' => "'''«$1» a l'é stàit tramudà a «$2»'''",
'movepage-moved-redirect' => "A l'é stàita creà na rediression.",
'movepage-moved-noredirect' => "La creassion ëd na ridiression a l'é stàita scancelà.",
'articleexists' => "Na pàgina che as ciama parej a-i é già, ò pura ël nòm che a l'ha sërnù a va nen bin.<br />
'dmy both' => 'H\hi\m\i\n \d\e j \d\e F \d\e Y',
);
-$separatorTransformTable = array( ',' => ' ', '.' => ',' );
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
$linkTrail = '/^([áâãàéêẽçíòóôõq̃úüűũa-z]+)(.*)$/sDu'; # Bug 21168, 27633
$specialPageAliases = array(
'invalidemailaddress' => 'O endereço de correio electrónico não pode ser aceite porque parece ter um formato inválido.
Introduza um endereço formatado correctamente ou deixe o campo vazio.',
'cannotchangeemail' => 'A conta de e-mail não pode ser alterado nesta wiki.',
+'emaildisabled' => 'Este site não consegue enviar e-mails.',
'accountcreated' => 'Conta criada',
'accountcreatedtext' => 'A conta de utilizador para $1 foi criada.',
'createaccount-title' => 'Criação de conta na {{SITENAME}}',
Isso acontece ocasionalmente quando se usa um serviço de proxy anonimizador mal configurado.'''",
'edit_form_incomplete' => "'''Algumas partes do formulário de edição não chegaram ao servidor; verifique que a sua edição continua intacta e tente novamente, por favor.'''",
'editing' => 'A editar $1',
+'creating' => 'A criar $1',
'editingsection' => 'A editar $1 (secção)',
'editingcomment' => 'A editar $1 (nova secção)',
'editconflict' => 'Conflito de edição: $1',
'edit-no-change' => 'A sua edição foi ignorada, uma vez que o texto não sofreu alterações.',
'edit-already-exists' => 'Não foi possível criar uma página nova.
Ela já existia.',
+'defaultmessagetext' => 'Texto da mensagem padrão',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Aviso: Esta página contém demasiadas chamadas de funções exigentes do analisador sintáctico.
# Suppression log
'suppressionlog' => 'Registo de supressões',
-'suppressionlogtext' => 'Abaixo está uma lista das eliminações e bloqueios envolvendo conteúdo ocultado a administradores.
-Veja a [[Special:BlockList|lista de bloqueios a IPs]] para uma lista de banimentos e bloqueios em efeito neste momento.',
+'suppressionlogtext' => 'Abaixo está uma lista das eliminações e bloqueios envolvendo conteúdo ocultado para administradores.
+Veja a [[Special:BlockList|lista de bloqueios]] para uma lista de banimentos e bloqueios em efeito neste momento.',
# History merging
'mergehistory' => 'Fundir histórico de páginas',
'backend-fail-closetemp' => 'Não foi possível fechar o arquivo temporário.',
'backend-fail-read' => 'Não foi possível ler o arquivo $1.',
'backend-fail-create' => 'Não foi possível criar o arquivo $1.',
+'backend-fail-maxsize' => 'Não foi possível criar o ficheiro $1 porque ele é maior do que {{PLURAL:$2| um byte| $2 bytes}}.',
+'backend-fail-readonly' => 'O servidor de armazenamento "$1" está actualmente no modo "somente leitura". A razão dada foi: "$2"',
+'backend-fail-synced' => 'O ficheiro" $1 " está em um estado inconsistente dentro da base de dados',
+'backend-fail-connect' => 'Não foi possível estabelecer ligação com o servidor de armazenamento "$1".',
+'backend-fail-internal' => 'Ocorreu um erro desconhecido no servidor de armazenamento "$1".',
+'backend-fail-contenttype' => 'Não foi possível determinar o tipo de conteúdo do ficheiro para armazenar em " $1 ".',
+
+# Lock manager
+'lockmanager-notlocked' => 'Não foi possível desbloquear " $1 "; não se encontra bloqueado.',
+'lockmanager-fail-closelock' => 'Não foi possível encerrar a referência de bloqueio para "$1".',
+'lockmanager-fail-deletelock' => 'Não foi possível eliminar a referência de bloqueio para "$1".',
# ZipDirectoryReader
'zip-file-open-error' => 'Foi encontrado um erro ao abrir o ficheiro ZIP para verificação.',
'allpagesbadtitle' => 'O título de página fornecido era inválido ou tinha um prefixo interlínguas ou interwikis.
Talvez contenha um ou mais caracteres que não podem ser usados nos títulos.',
'allpages-bad-ns' => 'A {{SITENAME}} não possui o espaço nominal "$1".',
+'allpages-hide-redirects' => 'Ocultar redirecionamentos',
# Special:Categories
'categories' => 'Categorias',
'ipb-confirm' => 'Confirmar o bloqueio',
'badipaddress' => 'Endereço IP inválido',
'blockipsuccesssub' => 'Bloqueio bem sucedido',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] foi bloqueado.<br />
-Consulte a [[Special:BlockList|lista de IPs bloqueados]] para rever os bloqueios.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] foi {{GENDER:$1|bloqueado|bloqueada}}.<br />
+Consulte a [[Special:BlockList|lista de bloqueios]] para rever os bloqueios.',
'ipb-blockingself' => 'Está prestes a bloquear-se a si próprio. Tem a certeza de que pretende fazê-lo?',
'ipb-confirmhideuser' => 'Está prestes a bloquear um utilizador com "Ocultar nome de utilizador/IP" activado. Isto irá suprimir o nome do utilizador de todas as listas e entradas dos registos. Tem a certeza de que pretende fazê-lo?',
'ipb-edit-dropdown' => 'Editar motivos de bloqueio',
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.',
-'blocklogtext' => 'Este é um registo de acções de bloqueio e desbloqueio.
-Endereços IP sujeitos a bloqueio automático não são listados.
-Consulte a [[Special:BlockList|lista de IPs bloqueados]] para obter a lista de bloqueios e banimentos actualmente válidos.',
+'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.',
'unblocklogentry' => 'desbloqueou $1',
'block-log-flags-anononly' => 'apenas utilizadores anónimos',
'block-log-flags-nocreate' => 'criação de contas impossibilitada',
'thumbnail_error' => 'Erro ao criar miniatura: $1',
'djvu_page_error' => 'página DjVu inacessível',
'djvu_no_xml' => 'Não foi possível aceder ao XML para o ficheiro DjVU',
+'thumbnail-temp-create' => 'Não foi possível criar ficheiro temporário de miniatura',
'thumbnail-dest-create' => 'Não é possível salvar miniatura',
'thumbnail_invalid_params' => 'Parâmetros de miniatura inválidos',
'thumbnail_dest_directory' => 'Não foi possível criar o directório de destino',
'feedback-error2' => 'Erro: A edição falhou',
'feedback-error3' => 'Erro: A API não responde',
'feedback-close' => 'Feito',
+'feedback-bugcheck' => 'Perfeito! Verifique apenas que não é já um dos [$1 defeitos conhecidos].',
'feedback-bugnew' => 'Eu verifiquei. Reportar um novo bug.',
# API errors
'api-error-uploaddisabled' => 'Esta wiki não está configurada para poder receber ficheiros.',
'api-error-verification-error' => 'Este ficheiro pode estar corrompido, ou ter a extensão errada.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|segundo|segundos}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuto|minutos}}',
+'duration-hours' => '$1 {{PLURAL:$1|hora|horas}}',
+'duration-days' => '$1 {{PLURAL:$1|dia|dias}}',
+'duration-weeks' => '$1 {{PLURAL:$1|semana|semanas}}',
+'duration-years' => '$1 {{PLURAL:$1|ano|anos}}',
+'duration-decades' => '$1 {{PLURAL:$1|década|décadas}}',
+'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
+'duration-millennia' => '$1 {{PLURAL:$1|milénio|milénios}}',
+
);
* @file
*
* @author Alcali
+ * @author Alchimista
* @author Bani
* @author Brion
* @author BrunaaAa
);
-$separatorTransformTable = array( ',' => ' ', '.' => ',' );
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
$specialPageAliases = array(
'Activeusers' => array( 'Usuários_ativos' ),
'tog-fancysig' => 'Tratar assinatura como wikitexto (sem link automático)',
'tog-externaleditor' => 'Utilizar editor externo por padrão (apenas para usuários avançados; requer configurações adicionais em seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
'tog-externaldiff' => 'Utilizar comparador de versões externo por padrão (apenas para usuários avançados; requer configurações adicionais em seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
-'tog-showjumplinks' => 'Ativar hiperligações de acessibilidade "ir para"',
+'tog-showjumplinks' => 'Ativar links de acessibilidade "ir para"',
'tog-uselivepreview' => 'Utilizar pré-visualização em tempo real (JavaScript) (Experimental)',
'tog-forceeditsummary' => 'Avisar-me ao introduzir um sumário vazio',
'tog-watchlisthideown' => 'Esconder as minhas edições da lista de páginas vigiadas',
'retrievedfrom' => 'Obtida de "$1"',
'youhavenewmessages' => 'Você tem $1 ($2).',
'newmessageslink' => 'novas mensagens',
-'newmessagesdifflink' => 'comparar com a penúltima revisão',
+'newmessagesdifflink' => 'última alteração',
'youhavenewmessagesmulti' => 'Você tem novas mensagens em $1',
'editsection' => 'editar',
'editold' => 'editar',
'editlink' => 'editar',
'viewsourcelink' => 'ver código-fonte',
'editsectionhint' => 'Editar seção: $1',
-'toc' => 'Tabela de conteúdo',
+'toc' => 'Conteúdo',
'showtoc' => 'exibir',
'hidetoc' => 'ocultar',
'collapsible-collapse' => 'Ocultar',
'ns-specialprotected' => 'Não é possível editar páginas especiais',
'titleprotected' => "Este título foi protegido, para que não seja criado.
Quem o protegeu foi [[User:$1|$1]], com a justificativa: ''$2''.",
+'filereadonlyerror' => 'Não é possível modificar o arquivo "$1" porque o repositório do arquivo "$2" está em modo somente leitura.
+
+O administrador que bloqueou ofereceu a seguinte explicação: "$3".',
# Virus scanner
'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
É possível continuar usando {{SITENAME}} anonimamente ou [[Special:UserLogin|autenticar-se novamente]] com o mesmo nome de usuário ou com um nome diferente.
Note que algumas páginas podem continuar sendo exibidas como se você ainda estivesse autenticado até que você limpe a ''cache'' do seu navegador.",
-'welcomecreation' => '== Bem-vindo, $1! ==
+'welcomecreation' => '== Bem-vindo(a), $1! ==
A sua conta foi criada.
-Não se esqueça de personalizar as suas [[Special:Preferences|preferências na {{SITENAME}}]].',
+Não se esqueça de personalizar as suas [[Special:Preferences|preferências no wiki {{SITENAME}}]].',
'yourname' => 'Nome de usuário:',
'yourpassword' => 'Senha:',
'yourpasswordagain' => 'Redigite sua senha',
'externaldberror' => 'Ocorreu ou um erro no banco de dados durante a autenticação ou não lhe é permitido atualizar a sua conta externa.',
'login' => 'Autenticar-se',
'nav-login-createaccount' => 'Criar uma conta ou entrar',
-'loginprompt' => 'É necessário estar com os <i>cookies</i> ativados para poder autenticar-se na {{SITENAME}}.',
+'loginprompt' => 'É necessário estar com cookies ativados para poder autenticar-se no wiki {{SITENAME}}.',
'userlogin' => 'Criar uma conta ou entrar',
-'userloginnocreate' => 'Autenticar-se',
+'userloginnocreate' => 'Entrar',
'logout' => 'Sair',
'userlogout' => 'Sair',
'notloggedin' => 'Não autenticado',
'createaccountreason' => 'Razão:',
'badretype' => 'As senhas que você digitou não são iguais.',
'userexists' => 'O nome de usuário fornecido já está em uso.
-Escolha um nome diferente, por favor.',
+Escolha um nome diferente.',
'loginerror' => 'Erro de autenticação',
'createaccounterror' => 'Não foi possível criar a conta: $1',
'nocookiesnew' => "A conta do usuário foi criada, mas você não foi autenticado.
Certifique-se de que tem os cookies ativados, recarregue esta página e tente novamente.',
'noname' => 'Você não colocou um nome de usuário válido.',
'loginsuccesstitle' => 'Login bem sucedido',
-'loginsuccess' => "'''Agora você está ligado à {{SITENAME}} como \"\$1\"'''.",
+'loginsuccess' => "'''Agora você está autenticado ao wiki {{SITENAME}} como \"\$1\"'''.",
'nosuchuser' => 'Não existe nenhum usuário com o nome "$1".
Os nomes de usuário são sensíveis à capitalização.
Verifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].',
'nouserspecified' => 'Você precisa especificar um nome de usuário.',
'login-userblocked' => 'Este usuário está bloqueado. Entrada proibida.',
'wrongpassword' => 'A senha que introduziu é inválida. Por favor, tente novamente.',
-'wrongpasswordempty' => 'A senha introduzida está em branco. Por favor, tente novamente.',
+'wrongpasswordempty' => 'Foi fornecida uma senha em branco.
+Tente novamente.',
'passwordtooshort' => 'As senhas devem ter no mínimo {{PLURAL:$1|1 caractere|$1 caracteres}}.',
'password-name-match' => 'A sua senha deve ser diferente do seu nome de usuário.',
-'password-login-forbidden' => 'Foi proibido o uso deste nome de utilizador e palavra-chave.',
+'password-login-forbidden' => 'O uso deste nome de usuário e senha foi desautorizado.',
'mailmypassword' => 'Enviar uma nova senha por e-mail',
'passwordremindertitle' => 'Nova senha temporária em {{SITENAME}}',
'passwordremindertext' => 'Alguém (provavelmente você, a partir do endereço de IP $1) solicitou uma nova senha para {{SITENAME}} ($4). Foi criada uma senha temporária para o usuário "$2", sendo ela "$3". Se esta era sua intenção, você precisará se autenticar e escolher uma nova senha agora.
'emailconfirmlink' => 'Confirme o seu endereço de e-mail',
'invalidemailaddress' => "O endereço de ''e-mail'' não pode ser aceite devido a talvez possuir um formato inválido. Por favor, introduza um endereço bem formatado ou esvazie o campo.",
'cannotchangeemail' => 'A conta de e-mail não pode ser alterada neste wiki.',
+'emaildisabled' => 'Este site não tem como enviar e-mails.',
'accountcreated' => 'Conta criada',
'accountcreatedtext' => 'A conta de usuário para $1 foi criada.',
'createaccount-title' => 'Criação de conta em {{SITENAME}}',
'passwordreset' => 'Redefinir senha',
'passwordreset-text' => 'Preencha este formulário para recuperar os dados da sua conta pelo e-mail.',
'passwordreset-legend' => 'Reiniciar a senha',
-'passwordreset-disabled' => 'Reiniciar a senha foi impossibilitado nesta wiki.',
+'passwordreset-disabled' => 'Redefinições de senha foram desabilitadas neste wiki.',
'passwordreset-pretext' => '{{PLURAL:$1||Introduza um dos dados abaixo}}',
'passwordreset-username' => 'Nome de usuário:',
'passwordreset-domain' => 'Domínio:',
Isso acontece ocasionalmente quando se usa um serviço de proxy anonimizador mal configurado.'''",
'edit_form_incomplete' => "'''Algumas partes do formulário de edição não chegaram ao servidor; verifique que a sua edição continua intacta e tente novamente, por favor.'''",
'editing' => 'Editando $1',
+'creating' => 'Criando $1',
'editingsection' => 'Editando $1 (seção)',
'editingcomment' => 'Editando $1 (nova seção)',
'editconflict' => 'Conflito de edição: $1',
'edit-no-change' => 'A sua edição foi ignorada, uma vez que o texto não sofreu alterações.',
'edit-already-exists' => 'Não foi possível criar uma nova página.
Ela já existia.',
+'defaultmessagetext' => 'Texto da mensagem padrão',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Aviso: Esta página contém muitas chamadas a funções do analisador "parser".
# Revision feed
'history-feed-title' => 'Histórico de revisão',
-'history-feed-description' => 'Histórico de revisões para esta página nesta wiki',
+'history-feed-description' => 'Histórico de revisões para esta página neste wiki',
'history-feed-item-nocomment' => '$1 em $2',
'history-feed-empty' => 'A página requisitada não existe.
-Poderá ter sido eliminada da wiki ou renomeada.
-Tente [[Special:Search|pesquisar na wiki]] por páginas relevantes.',
+Poderá ter sido eliminada do wiki ou renomeada.
+Tente [[Special:Search|pesquisar no wiki]] por páginas relevantes.',
# Revision deletion
'rev-deleted-comment' => '(resumo da edição suprimido)',
'showingresults' => "A seguir {{PLURAL:$1|é mostrado '''um''' resultado|são mostrados até '''$1''' resultados}}, iniciando no '''$2'''º.",
'showingresultsnum' => "A seguir {{PLURAL:$3|é mostrado '''um''' resultado|são mostrados '''$3''' resultados}}, iniciando com o '''$2'''º.",
'showingresultsheader' => "{{PLURAL:$5|Resulado '''$1''' de '''$3'''|Resultados '''$1 - $2''' de '''$3'''}} para '''$4'''",
-'nonefound' => "'''Nota''': apenas alguns espaços nominais são pesquisados por padrão. Tente utilizar o prefixo ''all:'' em sua busca, para pesquisar por todos os conteúdos desta wiki (inclusive páginas de discussão, predefinições etc), ou mesmo, utilizando o espaço nominal desejado como prefixo.",
+'nonefound' => "'''Nota''': apenas alguns espaços nominais são pesquisados por padrão.
+Tente utilizar o prefixo ''all:'' em sua busca, para pesquisar por todos os conteúdos deste wiki (inclusive páginas de discussão, predefinições etc), ou mesmo, utilizando o espaço nominal desejado como prefixo.",
'search-nonefound' => 'Não houve resultados para a pesquisa.',
'powersearch' => 'Pesquisa avançada',
'powersearch-legend' => 'Pesquisa avançada',
'savedprefs' => 'As suas preferências foram salvas.',
'timezonelegend' => 'Fuso horário:',
'localtime' => 'Horário local:',
-'timezoneuseserverdefault' => 'Usar padrão da wiki ($1)',
+'timezoneuseserverdefault' => 'Utilizar padrão do wiki ($1)',
'timezoneuseoffset' => 'Outro (especifique diferença horária)',
'timezoneoffset' => 'Diferença horária¹',
'servertime' => 'Horário do servidor:',
'yourrealname' => 'Nome verdadeiro:',
'yourlanguage' => 'Língua:',
'yourvariant' => 'Variante da língua de conteúdo:',
-'prefs-help-variant' => 'A sua variante preferida ou ortografia para mostrar no conteúdo das páginas desta wiki.',
+'prefs-help-variant' => 'A sua variante preferida ou ortografia para mostrar no conteúdo das páginas deste wiki.',
'yournick' => 'Assinatura:',
'prefs-help-signature' => 'Ao inserir comentários em páginas de discussão, assine-os colocando quatro tiles (<nowiki>~~~~</nowiki>) no fim dos comentários. Ao salvar, estes serão convertidos na sua assinatura mais a data e a hora da edição.',
'badsig' => 'Assinatura inválida; verifique o código HTML utilizado.',
* Uma caixa de seleção desselecionada significa que o usuário não se encontra no grupo.
* Um * indica que não pode remover o grupo depois de o adicionar, ou vice-versa.',
'userrights-reason' => 'Motivo:',
-'userrights-no-interwiki' => 'Você não tem permissão de alterar privilégios de usuários em outras wikis.',
+'userrights-no-interwiki' => 'Você não tem permissão para alterar privilégios de usuários em outros wikis.',
'userrights-nodatabase' => 'O banco de dados $1 não existe ou não é um banco de dados local.',
'userrights-nologin' => 'Você precisa [[Special:UserLogin|autenticar-se]] como um administrador para especificar os privilégios de usuário.',
'userrights-notallowed' => 'A sua conta não tem permissão para adicionar ou remover privilégios a usuários.',
# User rights log
'rightslog' => 'Registro de privilégios de usuário',
'rightslogtext' => 'Este é um registro de mudanças nos privilégios de usuários.',
-'rightslogentry' => 'foi alterado o grupo de acesso de $1 (de $2 para $3)',
+'rightslogentry' => 'alterou os grupos de privilégios {{GENDER:$1|do usuário|da usuária|de usuário para}} $1 (de $2 para $3)',
'rightslogentry-autopromote' => 'foi automaticamente promovido de $2 para $3',
'rightsnone' => '(nenhum)',
'action-block' => 'impedir que este usuário edite',
'action-protect' => 'alterar os níveis de proteção desta página',
'action-rollback' => 'Reverter rapidamente as edições do último usuário que editou uma página em particular',
-'action-import' => 'importar esta página a partir de outra wiki',
+'action-import' => 'importar esta página a partir de outro wiki',
'action-importupload' => 'importar esta página através do carregamento de um arquivo',
'action-patrol' => 'marcar as edições de outros usuários como patrulhadas',
'action-autopatrol' => 'ter suas edições marcadas como patrulhadas',
'backend-fail-maxsize' => 'Não foi possível criar o arquivo $1 por ele ser maior que {{PLURAL:$2|1 byte|$2 bytes}}.',
'backend-fail-readonly' => 'O servidor de armazenamento "$1" está atualmente no modo "somente leitura". A razão dada foi: "$2"',
'backend-fail-synced' => 'O arquivo "$1" está em um estado inconsistente dentro do sistema de armazenamento interno',
-'backend-fail-connect' => 'Não foi possível conectar com o servidor de armazenamento "$1".',
+'backend-fail-connect' => 'Não foi possível ligar ao servidor de armazenamento "$1".',
'backend-fail-internal' => 'Ocorreu um erro desconhecido no servidor de armazenamento "$1".',
'backend-fail-contenttype' => 'Não foi possível determinar o tipo de conteúdo do arquivo para armazenar em "$1".',
'backend-fail-batchsize' => 'O servidor de armazenamento retornou um conjunto de $1 {{PLURAL:$1|operação|operações}} de arquivo, enquanto seu limite é de $2 {{PLURAL:$1|operação|operações}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Não foi possível se conectar ao banco de dados de registros do sistema de armazenamento "$1".',
'filejournal-fail-dbquery' => 'Não foi possível atualizar o banco de dados de registros do sistema de armazenamento "$1".',
'lockmanager-fail-acquirelock' => 'Não foi possível obter uma referência de bloqueio para "$1".',
'lockmanager-fail-openlock' => 'Não foi possível abrir a referência de bloqueio para "$1".',
'lockmanager-fail-releaselock' => 'Não foi possível liberar o bloqueio para "$1".',
+'lockmanager-fail-db-bucket' => 'Não foi possível contatar suficientemente bloqueio das bases de dados no bucket $1 .',
'lockmanager-fail-db-release' => 'Não foi possível liberar os bloqueios para "$1".',
'lockmanager-fail-svr-release' => 'Não foi possível liberar os bloqueios do servidor "$1".',
# Special:UploadStash
'uploadstash' => 'Arquivos escondidos',
-'uploadstash-summary' => 'Esta página dá acesso aos arquivos enviados (ou que estão no processo de envio) mas que ainda não foram publicados na wiki. Estes arquivos não são visíveis para ninguém, exceto para o usuário que os enviou.',
+'uploadstash-summary' => 'Esta página dá acesso aos arquivos enviados (ou que estão no processo de envio) mas que ainda não foram publicados no wiki. Estes arquivos não são visíveis para ninguém, exceto para o usuário que os enviou.',
'uploadstash-clear' => 'Apagar os arquivos escondidos',
'uploadstash-nofiles' => 'Você não tem nenhum arquivo escondido.',
'uploadstash-badtoken' => 'Não foi possível executar essa operação, talvez porque as suas credenciais de edição expiraram. Tente novamente.',
'img-auth-isdir' => 'Você está tentando acessar o diretório "$1".
Somente acesso ao arquivo é permitido.',
'img-auth-streaming' => "Realizando ''streaming'' de \"\$1\".",
-'img-auth-public' => 'A img_auth.php produz arquivos a partir de uma wiki privada.
-Esta wiki está configurada como uma wiki pública.
+'img-auth-public' => 'A img_auth.php produz arquivos a partir de um wiki privado.
+Este wiki está configurado como um wiki público.
Para melhor segurança, o img_auth.php está desativado.',
'img-auth-noread' => 'Usuário não tem acesso para ler "$1".',
'img-auth-bad-query-string' => 'A URL tem um texto de consulta inválido.',
# Unused templates
'unusedtemplates' => 'Predefinições não utilizadas',
-'unusedtemplatestext' => 'Esta página lista todas as páginas no espaço nominal {{ns:template}} que não estão incluídas numa outra página. Lembre-se de conferir se há outras ligações para as predefinições antes de apaga-las.',
-'unusedtemplateswlh' => 'outras ligações',
+'unusedtemplatestext' => 'Esta página lista todas as páginas no espaço nominal {{ns:template}} que não estão incluídas em uma outra página. Lembre-se de conferir se há outros links para as predefinições antes de apaga-las.',
+'unusedtemplateswlh' => 'outros links',
# Random page
'randompage' => 'Página aleatória',
'statistics-header-hooks' => 'Outras estatísticas',
'statistics-articles' => 'Páginas de conteúdo',
'statistics-pages' => 'Páginas',
-'statistics-pages-desc' => 'Todas as páginas na wiki, incluindo páginas de discussão, redirecionamentos, etc.',
+'statistics-pages-desc' => 'Todas as páginas no wiki, incluindo páginas de discussão, redirecionamentos, etc.',
'statistics-files' => 'Arquivos carregados',
'statistics-edits' => 'Edições de página desde que {{SITENAME}} foi instalado',
'statistics-edits-average' => 'Média de edições por página',
'doubleredirects' => 'Redirecionamentos duplos',
'doubleredirectstext' => 'Esta página lista as páginas que redirecionam para outros redirecionamentos.
-Cada linha contém ligações para o primeiro e o segundo redirecionamentos, juntamente com o alvo do segundo redirecionamento, que é geralmente a verdadeira página de destino, para a qual o primeiro redirecionamento deveria apontar.
+Cada linha contém links para o primeiro e o segundo redirecionamentos, juntamente com o alvo do segundo redirecionamento, que é geralmente a verdadeira página de destino, para a qual o primeiro redirecionamento deveria apontar.
Entradas <del>riscadas</del> foram resolvidas.',
'double-redirect-fixed-move' => '[[$1]] foi movido e agora é um redirecionamento para [[$2]]',
'double-redirect-fixed-maintenance' => 'Corrigindo redirecionamento duplo de [[$1]] para [[$2]].',
'ntransclusions' => 'usada {{PLURAL:$1|numa página|em $1 páginas}}',
'specialpage-empty' => 'Atualmente não há dados a serem exibidos nesta página.',
'lonelypages' => 'Páginas órfãs',
-'lonelypagestext' => 'As seguintes páginas não recebem ligações nem são incluídas em outras páginas do {{SITENAME}}.',
+'lonelypagestext' => 'As seguintes páginas não recebem links nem são incluídas em outras páginas do {{SITENAME}}.',
'uncategorizedpages' => 'Páginas não categorizadas',
'uncategorizedcategories' => 'Categorias não categorizadas',
'uncategorizedimages' => 'Imagens não categorizadas',
'shortpages' => 'Páginas curtas',
'longpages' => 'Páginas longas',
'deadendpages' => 'Páginas sem saída',
-'deadendpagestext' => 'As seguintes páginas não contêm hiperligações para outras páginas nesta wiki.',
+'deadendpagestext' => 'As seguintes páginas não contêm links para outras páginas no wiki {{SITENAME}}.',
'protectedpages' => 'Páginas protegidas',
'protectedpages-indef' => 'Proteções infinitas apenas',
'protectedpages-cascade' => 'Apenas proteções progressivas',
'allpagesprefix' => 'Exibir páginas com o prefixo:',
'allpagesbadtitle' => 'O título de página fornecido encontrava-se inválido ou tinha um prefixo interlíngua ou inter-wiki. Ele poderá conter um ou mais caracteres que não podem ser utilizados em títulos.',
'allpages-bad-ns' => '{{SITENAME}} não possui o espaço nominal "$1".',
+'allpages-hide-redirects' => 'Ocultar redirecionamentos',
# Special:Categories
'categories' => 'Categorias',
'sp-deletedcontributions-contribs' => 'contribuições',
# Special:LinkSearch
-'linksearch' => 'Pesquisa de ligações externas',
+'linksearch' => 'Pesquisa de links externos',
'linksearch-pat' => 'Procurar padrão:',
'linksearch-ns' => 'Espaço nominal:',
'linksearch-ok' => 'Pesquisar',
# Special:ListGroupRights
'listgrouprights' => 'Privilégios de grupo de usuários',
-'listgrouprights-summary' => 'O que segue é uma lista dos grupos de usuários definidos nesta wiki, com os seus privilégios de acessos associados.
+'listgrouprights-summary' => 'O que segue é uma lista dos grupos de usuários definidos neste wiki, com os seus privilégios de acessos associados.
Pode haver [[{{MediaWiki:Listgrouprights-helppage}}|informações adicionais]] sobre privilégios individuais.',
'listgrouprights-key' => '* <span class="listgrouprights-granted">Privilégio concedido</span>
* <span class="listgrouprights-revoked">Privilégio revogado</span>',
'whatlinkshere' => 'Páginas afluentes',
'whatlinkshere-title' => 'Páginas que apontam para "$1"',
'whatlinkshere-page' => 'Página:',
-'linkshere' => "As seguintes páginas possuem ligações para '''[[:$1]]''':",
-'nolinkshere' => "Não existem ligações para '''[[:$1]]'''.",
+'linkshere' => "As seguintes páginas possuem links para '''[[:$1]]''':",
+'nolinkshere' => "Não existem links para '''[[:$1]]'''.",
'nolinkshere-ns' => "Não há links para '''[[:$1]]''' no espaço nominal selecionado.",
'isredirect' => 'página de redirecionamento',
'istemplate' => 'inclusão',
'whatlinkshere-links' => '← links',
'whatlinkshere-hideredirs' => '$1 redirecionamentos',
'whatlinkshere-hidetrans' => '$1 transclusões',
-'whatlinkshere-hidelinks' => '$1 ligações',
+'whatlinkshere-hidelinks' => '$1 links',
'whatlinkshere-hideimages' => '$1 links de imagens',
'whatlinkshere-filters' => 'Filtros',
# Export
'export' => 'Exportação de páginas',
-'exporttext' => 'Você pode exportar o texto e o histórico de edições de uma página em particular para um arquivo XML. Poderá então importar esse conteúdo noutra wiki que utilize o software MediaWiki através da [[Special:Import|página de importações]].
+'exporttext' => 'Você pode exportar o texto e o histórico de edições, ou de uma página em particular ou de um conjunto de páginas, para um arquivo XML.
+A partir disso, será possível importar esse conteúdo em outro wiki que utilize o software MediaWiki através da [[Special:Import|página de importações]].
-Para exportar páginas, introduza os títulos na caixa de texto abaixo (um título por linha) e selecione se deseja todas as versões, com as linhas de histórico de edições, ou apenas a edição atual e informações apenas sobre a mais recente das edições.
+Para exportar páginas, insira os títulos na caixa de texto abaixo, um título por linha; selecione entre a edição atual acompanhada das edições anteriores e respectivo histórico de edições ou entre apenas a última edição e suas respectivas informações.
-Se desejar, pode utilizar uma ligação (por exemplo, [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para a [[{{MediaWiki:Mainpage}}]]).',
+Para o último caso, é possível obter o XML a partir de um link direto (por exemplo, [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para a edição mais recente da página "[[{{MediaWiki:Mainpage}}]]").',
+'exportall' => 'Exportar todas as páginas',
'exportcuronly' => 'Incluir apenas a revisão atual, não o histórico inteiro',
'exportnohistory' => "----
'''Nota:''' a exportação do histórico completo das páginas através deste formulário foi desativada devido a questões de performance.",
'import-interwiki-namespace' => 'Domínio de destino:',
'import-upload-filename' => 'Nome do arquivo:',
'import-comment' => 'Comentário:',
-'importtext' => 'Por favor, exporte o arquivo da wiki de origem utilizando a página especial [[Special:Export|exportação de páginas]].
+'importtext' => 'Por favor, exporte o arquivo do wiki de origem utilizando a página especial [[Special:Export|exportação de páginas]].
Salve o arquivo no seu computador e importe-o aqui.',
'importstart' => 'Importando páginas...',
'import-revision-count' => '{{PLURAL:$1|uma edição|$1 edições}}',
'xml-error-string' => '$1 na linha $2, coluna $3 (byte $4): $5',
'import-upload' => 'Enviar dados em XML',
'import-token-mismatch' => 'Perda dos dados da sessão. Por favor tente novamente.',
-'import-invalid-interwiki' => 'Não é possível importar da wiki especificada.',
+'import-invalid-interwiki' => 'Não é possível importar do wiki especificado.',
'import-error-edit' => 'A página "$1" não foi importada porque você não tem permissão para editá-la.',
'import-error-create' => 'A página "$1" não foi importada porque você não tem permissão para criá-la.',
# Import log
'importlogpage' => 'Registro de importações',
-'importlogpagetext' => 'Importações administrativas de páginas com a preservação do histórico de edição de outras wikis.',
+'importlogpagetext' => 'Importações administrativas de páginas com a preservação do histórico de edição de outros wikis.',
'import-logentry-upload' => 'importou [[$1]] através de arquivo de importação',
'import-logentry-upload-detail' => '{{PLURAL:$1|uma edição|$1 edições}}',
'import-logentry-interwiki' => 'transwiki $1',
'import-logentry-interwiki-detail' => '{{PLURAL:$1|$1 edição|$1 edições}} de $2',
+# JavaScriptTest
+'javascripttest' => 'Teste de JavaScript',
+'javascripttest-pagetext-noframework' => 'Esta página é exclusiva para testes de JavaScript.',
+
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Sua página de usuário',
'tooltip-pt-anonuserpage' => 'A página de usuário para o ip com o qual você está editando',
'tooltip-ca-move' => 'Mover esta página',
'tooltip-ca-watch' => 'Adicionar esta página às páginas vigiadas',
'tooltip-ca-unwatch' => 'Remover esta página da lista de páginas vigiadas',
-'tooltip-search' => 'Pesquisar nesta wiki',
+'tooltip-search' => 'Pesquisar em {{SITENAME}}',
'tooltip-search-go' => 'Ir a uma página com este exato nome, caso exista',
'tooltip-search-fulltext' => 'Procurar por páginas contendo este texto',
'tooltip-p-logo' => 'Página principal',
'tooltip-n-mainpage-description' => 'Visitar a página principal',
'tooltip-n-portal' => 'Sobre o projeto',
'tooltip-n-currentevents' => 'Informação temática sobre eventos atuais',
-'tooltip-n-recentchanges' => 'A lista de mudanças recentes nesta wiki.',
+'tooltip-n-recentchanges' => 'Uma lista de mudanças recentes no wiki',
'tooltip-n-randompage' => 'Abrir uma página aleatoriamente',
'tooltip-n-help' => 'Um local reservado para auxílio.',
'tooltip-t-whatlinkshere' => 'Lista de todas as páginas que ligam-se a esta',
'tooltip-diff' => 'Mostrar alterações que fez a este texto.',
'tooltip-compareselectedversions' => 'Ver as diferenças entre as duas versões selecionadas desta página.',
'tooltip-watch' => 'Adicionar esta página à sua lista de páginas vigiadas',
+'tooltip-watchlistedit-normal-submit' => 'Remover títulos',
+'tooltip-watchlistedit-raw-submit' => 'Atualizar a lista de páginas vigiadas',
'tooltip-recreate' => 'Recriar a página apesar de ter sido eliminada',
'tooltip-upload' => 'Iniciar o carregamento',
'tooltip-rollback' => '"{{int:rollbacklink}}" reverte, com um só clique, as edições do último editor desta página.',
'spamprotectionmatch' => 'O seguinte texto ativou o filtro de spam: $1',
'spambot_username' => 'MediaWiki limpeza de spam',
'spam_reverting' => 'Revertendo para a última versão que não contém links para $1',
-'spam_blanking' => 'Todas revisões contendo hiperligações para $1, limpando',
+'spam_blanking' => 'Todas revisões contendo links para $1, limpando',
# Info page
'pageinfo-title' => 'Informações sobre "$1"',
# E-mail address confirmation
'confirmemail' => 'Confirmar endereço de E-mail',
'confirmemail_noemail' => 'Não possui um endereço de e-mail válido indicado nas suas [[Special:Preferences|preferências de usuário]].',
-'confirmemail_text' => 'Esta wiki requer que valide o seu endereço de e-mail antes de utilizar as funcionalidades que requerem um endereço de e-mail. Ative o botão abaixo para enviar uma confirmação para o seu endereço de e-mail. A mensagem incluíra um endereço que contém um código; carregue o endereço no seu navegador para confirmar que o seu endereço de e-mail encontra-se válido.',
+'confirmemail_text' => '{{SITENAME}} requer o seu endereço de e-mail esteja validado antes de utilizar as funcionalidades que requerem um endereço de e-mail.
+Ative o botão abaixo para enviar uma confirmação para o seu endereço de e-mail.
+A mensagem incluirá um link que contém um código;
+acesse o link no seu navegador para confirmar que o seu endereço de e-mail é válido.',
'confirmemail_pending' => 'Um código de confirmação já foi enviado para você; caso tenha criado sua conta recentemente, é recomendável aguardar alguns minutos para o receber antes de tentar pedir um novo código.',
'confirmemail_send' => 'Enviar código de confirmação',
'confirmemail_sent' => 'E-mail de confirmação enviado.',
'version-hook-subscribedby' => 'Subscrito por',
'version-version' => '(Versão $1)',
'version-license' => 'Licença',
-'version-poweredby-credits' => "Esta é um wiki '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-credits' => "Este é um wiki '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'outros',
'version-license-info' => 'O MediaWiki é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.
# New logging system
'logentry-delete-delete' => '$1 apagou a página $3',
'logentry-delete-restore' => '$1 restaurou a página $3',
-'logentry-delete-event' => '$1 alterou a visibilidade {{PLURAL:$5|de uma entrada|das $5 entradas}} em $3: $4',
+'logentry-delete-event' => '$1 alterou a visibilidade {{PLURAL:$5|de uma entrada|de $5 entradas}} do registro $3: $4',
'logentry-delete-revision' => '$1 alterou a visibilidade {{PLURAL:$5|de uma revisão|das $5 revisões}} em $3: $4',
'logentry-delete-event-legacy' => '$1 alterou a visibilidade de uma entrada em $3',
'logentry-delete-revision-legacy' => '$1 alterou a visibilidade de uma revisão em $3',
'feedback-close' => 'Feito',
# API errors
-'api-error-badaccess-groups' => 'Você não tem permissão para enviar arquivos para esta wiki.',
+'api-error-badaccess-groups' => 'Você não tem permissão para enviar arquivos para este wiki.',
'api-error-badtoken' => 'Erro interno: token inválido.',
'api-error-copyuploaddisabled' => 'O upload por URL está desativado neste servidor.',
'api-error-duplicate' => 'Já {{PLURAL:$1|há [$2 outro arquivo]|existem [$2 outros arquivos]}} com o mesmo conteúdo',
'api-error-duplicate-archive-popup-title' => 'Duplicata de {{PLURAL:$1|arquivo|arquivos}} que já {{PLURAL:$1|foi apagado|foram apagados}}',
'api-error-duplicate-popup-title' => '{{PLURAL:$1|Arquivo|Arquivos}} em duplicata',
'api-error-empty-file' => 'O arquivo que você enviou está vazio.',
+'api-error-emptypage' => 'Não é permitido criar páginas novas vazias.',
'api-error-fetchfileerror' => 'Erro interno: ocorreu um problema indeterminado ao acessar o arquivo.',
'api-error-file-too-large' => 'O arquivo que você enviou é muito grande.',
'api-error-filename-tooshort' => 'O nome do arquivo é curto demais.',
'api-error-hookaborted' => 'A modificação que você tentou realizar foi abortada pelo hook de uma extensão.',
'api-error-http' => 'Erro interno: não foi possível conectar ao servidor.',
'api-error-illegal-filename' => 'O nome do arquivo não é permitido.',
-'api-error-internal-error' => 'Erro interno: ocorreu um erro indeterminado na wiki ao processar o arquivo que você enviou.',
+'api-error-internal-error' => 'Erro interno: ocorreu algum erro ao processar o arquivo que você enviou ao wiki.',
'api-error-invalid-file-key' => 'Erro interno: o arquivo não foi encontrado no armazenamento temporário.',
'api-error-missingparam' => 'Erro interno: parâmetros em falta no pedido.',
'api-error-missingresult' => 'Erro interno: não foi possível determinar se a cópia foi feita.',
'api-error-unknown-error' => 'Erro interno: ocorreu um erro indeterminado ao tentar enviar o arquivo.',
'api-error-unknown-warning' => 'Aviso desconhecido: $1',
'api-error-unknownerror' => 'Erro desconhecido: "$1".',
-'api-error-uploaddisabled' => 'Esta wiki está com uploads de arquivos desativados.',
+'api-error-uploaddisabled' => 'Este wiki está com o upload de arquivos desabilitado.',
'api-error-verification-error' => 'Este arquivo pode estar corrompido ou ter a extensão errada.',
);
* @author Bangin
* @author Bennylin
* @author Beta16
+ * @author Bilalokms
* @author Boivie
* @author Brest
* @author BrokenArrow
'recreate-moveddeleted-warn' => 'Warning shown when creating a page which has already been deleted. See for example [[Test]].',
'moveddeleted-notice' => 'Shown on top of a deleted page in normal view modus ([http://translatewiki.net/wiki/Test example]).',
'edit-conflict' => "An 'Edit conflict' happens when more than one edit is being made to a page at the same time. This would usually be caused by separate individuals working on the same page. However, if the system is slow, several edits from one individual could back up and attempt to apply simultaneously - causing the conflict.",
+'defaultmessagetext' => 'Caption above the default message text shown on the left-hand side of a diff displayed after clicking “Show changes” when creating a new page in the MediaWiki: namespace',
# Parser/template warnings
'expensive-parserfunction-warning' => 'On some (expensive) [[MetaWikipedia:Help:ParserFunctions|parser functions]] (e.g. <code><nowiki>{{#ifexist:}}</nowiki></code>) there is a limit of how many times it may be used. This is an error message shown when the limit is exceeded.
'backend-fail-notexists' => 'Parameters:
* $1 is a filename.',
'backend-fail-hashes' => 'Definition of "[[w:en:Hash_function|hashes]]".',
-'backend-fail-notsame' => 'Parameters:
-* $1 is a filename.',
+'backend-fail-notsame' => 'Parametreler:
+* $1 bir dosya ismi.',
'backend-fail-invalidpath' => 'Parameters:
* $1 is a storage path.',
'backend-fail-delete' => 'Parameters:
'backend-fail-connect' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
'backend-fail-internal' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
'backend-fail-contenttype' => '$1 is a storage (file) path',
-'backend-fail-batchsize' => 'Error message when the limit of 1000 operations in the file backend was reached.',
+'backend-fail-batchsize' => 'Error message when the limit of operations to be done at once in the file backend was reached.
+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.',
-'filejournal-fail-dbconnect' => '"Journal database" probably as described in [[w:en:Transaction_log|this article]].',
+# File journal errors
+'filejournal-fail-dbconnect' => 'Parameters:
+* $1 is the name of the "[[:wikipedia:Front and back ends|backend]]" that the file journal logs changes for.',
+'filejournal-fail-dbquery' => 'Parameters:
+* $1 is the name of the "[[:wikipedia:Front and back ends|backend]]" that the file journal logs changes for.',
# Lock manager
'lockmanager-notlocked' => 'Parameters:
'allpagesprefix' => "Used for the label of the input box of [[Special:PrefixIndex]]. On this page you can either write 'Name of namespace:string from which to begin display in alphabetical order' in the top box, or you can choose a namespace in the bottom box and put 'string from which to begin display in alphabetical order' in the top box. The result will be the same.",
'allpages-hide-redirects' => 'Label for a checkbox. If the checkbox is checked redirects will not be shown in the list. Used in [[Special:PrefixIndex]] and [[Special:Allpages]].',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Message notifying they are watching a cached page. $1 is a duration (ie "1 hour and 30 minutes")',
+'cachedspecial-viewing-cached-ts' => 'Message notifying they are watching a cached page.',
+'cachedspecial-refresh-now' => 'Link text pointing to the most recent version of the page.',
+
# Special:Categories
'categories' => 'The page name of [[Special:Categories]].
'version-license-info' => '[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.',
'version-software-product' => 'Shown in [[Special:Version]]',
'version-software-version' => '{{Identical|Version}}',
+'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation.',
+'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].',
+'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
+'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
+'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
# Special:FilePath
'filepath' => 'Legend of fieldset around input box in [[Special:FilePath]].',
Pled-clav temporar: $2",
'passwordreset-emailsent' => 'In e-mail cun in nov pled-clav è vegnì tramess.',
+# Special:ChangeEmail
+'changeemail' => "Midar l'adressa dad e-mail",
+
# Edit page toolbar
'bold_sample' => 'Text grass',
'bold_tip' => 'Text grass',
'ns-specialprotected' => 'Paginile din spațiul de nume {{ns:special}} nu pot fi editate.',
'titleprotected' => "Acest titlu a fos protejat la creare de [[User:$1|$1]].
Motivul invocat este ''$2''.",
-'filereadonlyerror' => "Imposibil de modificat fișierul „$1”, deoarece depozitul de fișiere „$2” este în modul „doar citire”.
+'filereadonlyerror' => 'Imposibil de modificat fișierul „$1”, deoarece depozitul de fișiere „$2” este în modul „doar citire”.
-Motivul furnizat este „''$3''”.",
+Administratorul care a efectuat blocarea a furnizat explicația: „$3”.',
# Virus scanner
'virus-badscanner' => "Configurație greșită: scaner de virus necunoscut: ''$1''",
'edit-no-change' => 'Modificarea dvs. a fost ignorată deoarece nu s-a efectuat nicio schimbare.',
'edit-already-exists' => 'Pagina nouă nu a putut fi creată.
Ea există deja.',
+'defaultmessagetext' => 'Textul implicit',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Atenție: Această pagină conține prea multe apelări costisitoare ale funcțiilor parser.
# Suppression log
'suppressionlog' => 'Înlătură jurnalul',
'suppressionlogtext' => 'Mai jos este afișată o listă a ștergerilor și a blocărilor care implică conținutul ascuns de administratori.
-Vedeți [[Special:BlockList|adresele IP blocate]] pentru o listă a interzicerilor operaționale sau a blocărilor.',
+Vedeți [[Special:BlockList|lista blocărilor]] pentru o listă a interzicerilor operaționale sau a blocărilor.',
# History merging
'mergehistory' => 'Unește istoricul paginilor',
'allpages-bad-ns' => '{{SITENAME}} nu are spațiul de nume „$1”.',
'allpages-hide-redirects' => 'Ascunde redirecționările',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'În acest moment vizualizați o versiune din cache a acestei pagini, versiune care poate avea o vechime de $1.',
+'cachedspecial-viewing-cached-ts' => 'În acest moment vizualizați o versiune din cache a acestei pagini, versiune care poate fi incomplet actualizată.',
+'cachedspecial-refresh-now' => 'Ultima versiune.',
+
# Special:Categories
'categories' => 'Categorii',
'categoriespagetext' => '{{PLURAL:$1|Următoarea categorie conține|Următoarele categorii conțin}} pagini sau fișiere.
'ipb-confirm' => 'Confirmare blocare',
'badipaddress' => 'Adresa IP este invalidă.',
'blockipsuccesssub' => 'Utilizatorul a fost blocat',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] a fost blocată.<br />
-Vezi [[Special:BlockList|lista de adrese IP și conturi blocate]] pentru a revizui adresele blocate.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] a fost blocat{{GENDER:$1||ă|}}.<br />
+Vedeți [[Special:BlockList|lista blocărilor]] pentru a revizui adresele blocate.',
'ipb-blockingself' => 'Sunteți pe cale să vă autoblocați! Sunteți sigur că doriți să continuați?',
'ipb-confirmhideuser' => 'Sunteți pe cale să blocați un utilizator cu funcția „ascunde utilizator” activată. Acest lucru va înlătura numele său de utilizator din toate listele și jurnalele. Sunteți sigur că vreți să continuați?',
'ipb-edit-dropdown' => 'Modifică motivele blocării',
Jurnalul suprimărilor este indicat mai jos:',
'blocklogentry' => 'a blocat utilizatorul „[[$1]]” pe o perioadă de $2 $3',
'reblock-logentry' => 'a fost schimbată blocarea pentru [[$1]] cu data expirării la $2 $3',
-'blocklogtext' => 'Acest jurnal cuprinde acțiunile de blocare și deblocare. Adresele IP blocate automat nu sunt afișate. Vizitați [[Special:BlockList|lista de adrese blocate]] pentru o listă explicită a adreselor blocate în acest moment.',
+'blocklogtext' => 'Acest jurnal cuprinde acțiunile de blocare și deblocare. Adresele IP blocate automat nu sunt afișate. Vizitați [[Special:BlockList|lista blocărilor]] pentru o listă explicită a adreselor blocate în acest moment.',
'unblocklogentry' => 'a deblocat utilizatorul $1',
'block-log-flags-anononly' => 'doar utilizatorii anonimi',
'block-log-flags-nocreate' => 'crearea de conturi dezactivată',
'api-error-uploaddisabled' => 'Încărcarea este dezactivată pe acest wiki.',
'api-error-verification-error' => 'Acest fișier ar putea fi corupt sau poate avea extensia greșită.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|secundă|secunde|de secunde}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minut|minute|de minute}}',
+'duration-hours' => '$1 {{PLURAL:$1|oră|ore|de ore}}',
+'duration-days' => '$1 {{PLURAL:$1|zi|zile|de zile}}',
+'duration-weeks' => '$1 {{PLURAL:$1|săptămână|săptămâni|de săptămâni}}',
+'duration-years' => '$1 {{PLURAL:$1|an|ani|de ani}}',
+'duration-decades' => '$1 {{PLURAL:$1|deceniu|decenii|de decenii}}',
+'duration-centuries' => '$1 {{PLURAL:$1|secol|secole|de secole}}',
+'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenii|de milenii}}',
+
);
* @author Illusion
* @author Iniquity
* @author Innv
+ * @author Jackie
* @author JenVan
* @author Jl
* @author KPu3uC B Poccuu
* @author Kv75
* @author Lockal
* @author MaxSem
+ * @author Ola
* @author Ole Yves
* @author Putnik
* @author Rave
'cancel' => 'Отменить',
'moredotdotdot' => 'Далее…',
'mypage' => 'Личная страница',
-'mytalk' => 'Ð\9cоя страница обсуждения',
+'mytalk' => 'моя страница обсуждения',
'anontalk' => 'Обсуждение для этого IP-адреса',
'navigation' => 'Навигация',
'and' => ' и',
Указана следующая причина: ''$2''.",
'filereadonlyerror' => "Не удаётся изменить файл «$1», так как хранилище «$2» находится в режиме «только для чтения».
-Указана причина: «''$3''».",
+Установивший этот режим администратор оставил следующее разъяснение: «''$3''».",
# Virus scanner
'virus-badscanner' => "Ошибка настройки. Неизвестный сканер вирусов: ''$1''",
'loginprompt' => 'Вы должны разрешить «cookies», чтобы представиться системе.',
'userlogin' => 'Представиться или зарегистрироваться',
'userloginnocreate' => 'Представиться',
-'logout' => 'Ð\97авершение сеанса',
+'logout' => 'завершение сеанса',
'userlogout' => 'Завершение сеанса',
'notloggedin' => 'Вы не представились системе',
'nologin' => "Нет учётной записи? '''$1'''.",
'updated' => '(Обновлена)',
'note' => "'''Примечание:'''",
'previewnote' => "'''Помните, что это только предварительный просмотр.'''
-Ваши изменения ещё не были записаны! [[#editform|→ продолжить редактирование]]",
+Ваши изменения ещё не были сохранены! [[#editform|→ продолжить редактирование]]",
'previewconflict' => 'Этот предварительный просмотр отражает текст в верхнем окне редактирования так, как он будет выглядеть, если вы решите записать его.',
'session_fail_preview' => "'''К сожалению, сервер не смог обработать вашу правку из-за потери идентификатора сессии.
Пожалуйста, попробуйте ещё раз.
'edit-no-change' => 'Ваша правка была отклонена, так как в тексте не было сделано изменений.',
'edit-already-exists' => 'Невозможно создать новую страницу.
Она уже существует.',
+'defaultmessagetext' => 'Текст по умолчанию',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Внимание. Эта страница содержит слишком много вызовов ресурсоёмких функций.
'searchhelp-url' => 'Help:Содержание',
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Показать страницы с этим префиксом]]',
'searchprofile-articles' => 'Основные страницы',
-'searchprofile-project' => 'СÑ\82Ñ\80аниÑ\86Ñ\8b Ñ\81пÑ\80авки и пÑ\80оекÑ\82ов',
+'searchprofile-project' => 'СÑ\82Ñ\80аниÑ\86Ñ\8b Ñ\81пÑ\80авки и пÑ\80оекÑ\82а',
'searchprofile-images' => 'Мультимедиа',
'searchprofile-everything' => 'Везде',
'searchprofile-advanced' => 'Расширенный',
'qbsettings-directionality' => 'Закреплённая, в зависимости от направления письменности вашего языка',
# Preferences page
-'preferences' => 'Ð\9dастройки',
+'preferences' => 'настройки',
'mypreferences' => 'Настройки',
'prefs-edits' => 'Количество правок:',
'prefsnologin' => 'Вы не представились системе',
'backend-fail-contenttype' => 'Не удалось определить тип содержимого файла, чтобы сохранить его в «$1».',
'backend-fail-batchsize' => 'Хранилище получило блок из $1 {{PLURAL:$1|файловой операции|файловых операций|файловых операций}}, ограничение составляет $2 {{PLURAL:$1|операцию|операции|файловых операций}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Не удалось подключиться к базе данных журнала для хранилища «$1».',
'filejournal-fail-dbquery' => 'Не удалось обновить базу данных журнала для хранилища «$1».',
'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|Следующая категория содержит|Следующие категории содержат}} страницы или медиа-файлы.
'usermessage-editor' => 'Системная доставка',
# Watchlist
-'watchlist' => 'Список наблюдения',
+'watchlist' => 'список наблюдения',
'mywatchlist' => 'Список наблюдения',
'watchlistfor2' => 'Для $1 $2',
'nowatchlist' => 'Ваш список наблюдения пуст.',
# Contributions
'contributions' => 'Вклад участника',
'contributions-title' => 'Вклад {{GENDER:$1|участника|участницы}} $1',
-'mycontris' => 'Ð\9cой вклад',
+'mycontris' => 'мой вклад',
'contribsub2' => 'Вклад $1 ($2)',
'nocontribs' => 'Изменений, соответствующих заданным условиям, найдено не было.',
'uctop' => ' (последняя)',
'ipb-confirm' => 'Подтвердить блокировку',
'badipaddress' => 'IP-адрес записан в неправильном формате, или участника с таким именем не существует.',
'blockipsuccesssub' => 'Блокировка произведена',
-'blockipsuccesstext' => '[[Special:Contributions/$1|«$1»]] заблокирован.<br />
-См. [[Special:BlockList|список заблокированных IP-адресов]].',
+'blockipsuccesstext' => '[[Special:Contributions/$1|«$1»]] {{GENDER:$1|заблокирован|заблокирована}}.<br />
+См. [[Special:BlockList|список заблокированных IP-адресов]] для просмотра блокировок.',
'ipb-blockingself' => 'Вы пытаетесь заблокировать себя самого! Вы уверены, что вы хотите это сделать?',
'ipb-confirmhideuser' => 'Вы намереваетесь заблокировать участника и скрыть его имя. Оно не будет отображаться в списках и журналах. Вы уверены, что хотите это сделать?',
'ipb-edit-dropdown' => 'Править список причин',
'version-software' => 'Установленное программное обеспечение',
'version-software-product' => 'Продукт',
'version-software-version' => 'Версия',
+'version-entrypoints' => 'Адреса точек входа',
+'version-entrypoints-header-entrypoint' => 'Точка входа',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Путь к статье]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Путь к скрипту]',
# Special:FilePath
'filepath' => 'Путь к файлу',
'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|век|века|веков}}',
+'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
+
);
'versionrequiredtext' => 'एतत्पृष्ठं प्रयोक्तुं मीडियाविकि इत्येतस्य $1तमा आवृत्तिः आवश्यकी। पश्यतु [[Special:Version|आवृत्ति-सूचिका]]',
'ok' => 'अस्तु',
-'pagetitle' => '',
+'pagetitle' => '$1 - {{SITENAME}}',
'retrievedfrom' => '"$1" इत्यस्माद् उद्धृतम्',
'youhavenewmessages' => 'भवदर्थम् $1 सन्ति। ($2).',
'newmessageslink' => 'नूतनाः सन्देशाः',
* @author Danny B.
* @author Helix84
* @author Kaganer
+ * @author Kusavica
* @author Liso
* @author Maros
* @author Michawiki
'ns-specialprotected' => 'Stránky v mennom pristore {{ns:special}} nie je možné upravovať.',
'titleprotected' => "Používateľ [[User:$1|$1]] zabránil vytváraniu stránky s týmto názvom.
Udaný dôvod: ''$2''.",
-'filereadonlyerror' => "Nebolo možné modifikovať súbor „$1“, protože úložisko „$2“ je momentálne v režime len na čítanie.
+'filereadonlyerror' => 'Nebolo možné modifikovať súbor „$1“, pretože úložisko „$2“ je momentálne v režime len na čítanie.
-Udaný dôvod: „''$3''“.",
+Správca, ktorý ho zamkol ponúkol toto vysvetlenie: „$3“.',
# Virus scanner
'virus-badscanner' => "Chybná konfigurácia: neznámy antivírus: ''$1''",
'emailconfirmlink' => 'Potvrďte vašu e-mailovú adresu',
'invalidemailaddress' => 'Emailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.',
'cannotchangeemail' => 'Na tejto wiki nie je možné meniť e-mailové adresy používateľského konta.',
+'emaildisabled' => 'Táto lokalita nedokáže posielať emaily.',
'accountcreated' => 'Účet vytvorený',
'accountcreatedtext' => 'Používateľský účet $1 bol vytvorený.',
'createaccount-title' => 'Vytvorenie účtu na {{GRAMMAR:lokál|{{SITENAME}}}}',
'updated' => '(Aktualizovaný)',
'note' => "'''Poznámka: '''",
'previewnote' => "'''Nezabudnite, toto je iba náhľad stránky, ktorú upravujete.
-Zmeny ešte nie sú uložené!'''",
+Zmeny ešte nie sú uložené!''' [[#editform|→ Pokračujte v úpravách]]",
'previewconflict' => 'Tento náhľad upravenej stránky zobrazuje text z horného poľa s textom tak, ako sa zobrazí potom, keď ju uložíte.',
'session_fail_preview' => "'''Prepáčte, nemohli sme spracovať váš príspevok kvôli strate údajov relácie.
Skúste to prosím ešte raz.
'token_suffix_mismatch' => "'''Vaša úprava bola zamietnutá, pretože váš klient pokazil znaky s diakritikou v editačnom symbole (token). Úprava bola zamietnutá, aby sa zabránilo poškodeniu textu stránky. Toto sa občas stáva, keď používate chybnú anonymnú proxy službu cez webové rozhranie.'''",
'edit_form_incomplete' => "'''Niektoré časti editačného formulára nedosiahli server. Prosím, znova skontrolujte, že vaše úpravy sú nepoškodené a skúste to znova.'''",
'editing' => 'Úprava stránky $1',
+'creating' => 'Vytvára sa $1',
'editingsection' => 'Úprava stránky $1 (sekcia)',
'editingcomment' => 'Úprava stránky $1 (nová sekcia)',
'editconflict' => 'Konflikt pri úprave: $1',
'edit-no-change' => 'Vaša úprava bola ignorovaná, pretože ste v texte nič nezmenili.',
'edit-already-exists' => 'Nebolo možné vytvoriť novú stránku.
Už existuje.',
+'defaultmessagetext' => 'Predvolený text správy',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Upozornenie: Táto stránka obsahuje príliš mnoho volaní funkcií syntaktického analyzátora, ktoré nadmerne zaťažujú server.
'backend-fail-contenttype' => 'Nebolo možné určiť typ obsahu súboru, ktorý sa má uložiť na „$1“.',
'backend-fail-batchsize' => 'Do úložiska bola zaslaná dávka s $1 {{PLURAL:$1|operáciou|operáciami}}; limit je $2 {{PLURAL:$2|operácia|operácie|operácií}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Nepodarilo sa pripojiť k žurnálovej databáze úložiska „$1“.',
'filejournal-fail-dbquery' => 'Nepodarilo sa aktualizovať žurnálovú databázu úložiska „$1“.',
'sharedupload' => 'Tento zdieľaný súbor je z $1 a je možné ho používať na iných projektoch.',
'sharedupload-desc-there' => 'Tento zdieľaný súbor je z $1 a je možné ho používať na iných projektoch. Ďalšie informácie nájdete na [$2 popisnej stránke súboru].',
'sharedupload-desc-here' => 'Tento zdieľaný súbor je z $1 a je možné ho používať na iných projektoch. Nižšie sú zobrazené informácie z [$2 popisnej stránky súboru].',
+'sharedupload-desc-edit' => 'Tento súbor je z $1 a môžu ho používať iné projekty.
+Možno chcete upraviť popis na jeho [$2 popisnej stránke súboru] tam.',
+'sharedupload-desc-create' => 'Tento súbor je z $1 a môžu ho používať iné projekty.
+Možno chcete upraviť popis na jeho [$2 popisnej stránke súboru] tam.',
'filepage-nofile' => 'Neexistuje žiadny súbor s takýmto názvom.',
'filepage-nofile-link' => 'Súbor s takýmto názvom neexistuje, ale môžete ho [$1 nahrať].',
'uploadnewversion-linktext' => 'Nahrať novú verziu tohto súboru',
'allpagesprefix' => 'Zobraziť stránky s predponou:',
'allpagesbadtitle' => 'Zadaný názov stránky je neplatný alebo mal medzijazykový alebo interwiki prefix. Môže obsahovať jeden alebo viac znakov, ktoré nie je možné použiť v názve stránky.',
'allpages-bad-ns' => '{{SITENAME}} nemá menný priestor „$1“.',
+'allpages-hide-redirects' => 'Skryť presmerovania',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Prezeráte si kópiu stránky z vyrovnávacej pamäte, môže byť stará až $1.',
+'cachedspecial-viewing-cached-ts' => 'Prezeráte si kópiu stránky z vyrovnávacej pamäte, nemusí byť úplne aktuálna.',
+'cachedspecial-refresh-now' => 'Zobraziť aktuálnu.',
# Special:Categories
'categories' => 'Kategórie',
'api-error-uploaddisabled' => 'Nahrávanie je na tejto wiki zakázané.',
'api-error-verification-error' => 'Tento súbor môže byť poškodený, alebo má zlú príponu.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekundy|sekúnd}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minúta|minúty|minút}}',
+'duration-hours' => '$1 {{PLURAL:$1|hodina|hodiny|hodín}}',
+'duration-days' => '$1 {{PLURAL:$1|deň|dni|dní}}',
+'duration-weeks' => '$1 {{PLURAL:$1|týždeň|týždne|týždňov}}',
+'duration-years' => '$1 {{PLURAL:$1|rok|roky|rokov}}',
+'duration-decades' => '$1 {{PLURAL:$1|dekáda|dekády|dekád}}',
+'duration-centuries' => '$1 {{PLURAL:$1|storočie|storočia|storočí}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tisícročie|tisícročia|tisícročí}}',
+
);
# Suppression log
'suppressionlog' => 'Dnevnik vračanj',
'suppressionlogtext' => 'Spodaj je seznam izbrisov in blokiranj, ki vključuje vsebino skrito pred administratorji.
-Oglejte si [[Special:BlockList|seznam blokiranih IP-jev]] za seznam trenutno aktivnih prepovedi in blokiranj.',
+Oglejte si [[Special:BlockList|seznam blokad]] za seznam trenutno aktivnih prepovedi in blokiranj.',
# History merging
'mergehistory' => 'Združi zgodovine strani',
'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}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Ne morem se povezati z listovno zbirko podatkov za skladiščno zaledje »$1«.',
'filejournal-fail-dbquery' => 'Ne morem posodobiti listovne zbirke podatkov za skladiščno zaledje »$1«.',
'allpages-bad-ns' => '{{SITENAME}} nima imenskega prostora »$1«.',
'allpages-hide-redirects' => 'Skrij preusmeritve',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Ogledujete si predpomnjeno različico strani, ki je lahko stara $1.',
+'cachedspecial-viewing-cached-ts' => 'Ogledujete si predpomnjeno različico strani, ki morda ni popolnoma posodobljena.',
+'cachedspecial-refresh-now' => 'Ogled najnovejše.',
+
# Special:Categories
'categories' => 'Kategorije',
'categoriespagetext' => '{{PLURAL:$1|Naslednja $1 kategorija vsebuje|Naslednji $1 kategoriji vsebujeta|Naslednje $1 kategorije vsebujejo|Naslednjih $1 kategorij vsebuje}} strani ali datoteke.
'badipaddress' => 'Neveljaven IP-naslov ali uporabniško ime.',
'blockipsuccesssub' => 'Blokiranje je uspelo',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran(-a)}}.<br />
-Oglejte si [[Special:BlockList|seznam blokiranih IP-naslovov]] za pregled blokad.',
+Oglejte si [[Special:BlockList|seznam blokad]] za pregled blokad.',
'ipb-blockingself' => 'Nameravate se blokirati! Ste prepričani, da želite to storiti?',
'ipb-confirmhideuser' => 'Nameravate blokirati uporabnika z omogočeno možnostjo »skrij uporabnika«. To bo skrilo uporabnikovo ime na vseh seznamih in dnevniških vnosih. Ste prepričani, da želite to storiti?',
'ipb-edit-dropdown' => 'Uredi razloge blokade',
Dnevnik skrivanja je na voljo spodaj:',
'blocklogentry' => '[[$1]] blokiran s časom poteka blokade $2 $3',
'reblock-logentry' => 'spremenil nastavitve blokade za [[$1]] z iztekom dne $2 ob $3',
-'blocklogtext' => 'Prikazan je dnevnik blokiranja in deblokiranja uporabnikov. Samodejno blokirani IP-naslovi niso navedeni. Trenutno veljavna blokiranja so navedena na [[Special:BlockList|seznamu blokiranih IP-naslovov]].',
+'blocklogtext' => 'Prikazan je dnevnik blokiranja in deblokiranja uporabnikov. Samodejno blokirani IP-naslovi niso navedeni. Trenutno veljavna blokiranja so navedena na [[Special:BlockList|seznamu blokad]].',
'unblocklogentry' => 'je deblokiral(-a) »$1«',
'block-log-flags-anononly' => 'samo za brezimne uporabnike',
'block-log-flags-nocreate' => 'ustvarjanje uporabniških računov onemogočeno',
'version-software' => 'Nameščena programska oprema',
'version-software-product' => 'Izdelek',
'version-software-version' => 'Različica',
+'version-entrypoints' => 'URL-ji vstopnih točk',
+'version-entrypoints-header-entrypoint' => 'Vstopna točka',
+'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Pot članka]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Pot skripta]',
# Special:FilePath
'filepath' => 'Pot do datoteke',
'api-error-uploaddisabled' => 'Nalaganje je onemogočeno na tem wikiju.',
'api-error-verification-error' => 'Ta datoteka je morda poškodovana ali ima napačno končnico.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekunda|sekundi|sekunde|sekund}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minuti|minute|minut}}',
+'duration-hours' => '$1 {{PLURAL:$1|ura|uri|ure|ur}}',
+'duration-days' => '$1 {{PLURAL:$1|dan|dneva|dnevi|dni}}',
+'duration-weeks' => '$1 {{PLURAL:$1|teden|tedna|tedni|tednov}}',
+'duration-years' => '$1 {{PLURAL:$1|leto|leti|leta|let}}',
+'duration-decades' => '$1 {{PLURAL:$1|desetletje|desetletji|desetletja|desetletij}}',
+'duration-centuries' => '$1 {{PLURAL:$1|stoletje|stoletji|stoletja|stoletij}}',
+'duration-millennia' => '$1 {{PLURAL:$1|tisočletje|tisočletji|tisočletja|tisočletij}}',
+
);
'''wali lama keydin!'''",
'updated' => '(waa la opdate gareeyay)',
'note' => "'''fiiro gaar ah:'''",
-'previewnote' => "'''Waxa aad aragtid waa horfiirin; wixii aad bedeshay lama keydinin!'''",
+'previewnote' => "'''Ogaaw kan waa horfiirin oo kaliya.'''
+Bedelyadaada wali lama keydin! [[#editform|→ Wax ka sii badal]]",
'session_fail_preview' => "'''Waan ka xunahay! Wixii aad bedeshay ma'suurto galin in la'keydiyo cilad dhacday awgeed.
Fadlan markale isku day. Hadii aysan weli shaqaynin, ka bax ee markale soo gudagal.'''",
'session_fail_preview_html' => "'''Waan ka xunahay! Wixii aad bedeshay ma'suurto galin in la'keydiyo cilad dhacday awgeed.'''
'''Hadii wax ka bedlkaan uu yahay mid xaq ah, fadlan markale isku day. Hadii aysan weli shaqaynin, is kuday inaad ka baxdo ee markale soo gudagal.'''",
'editing' => 'Waxaa badaloosaa $1',
+'creating' => 'Sameynaa $1',
'editingsection' => 'Waxaa wax ka badaloosaa $1 (qeyb yar)',
'editingcomment' => 'Waxaa wax ka badaloosaa $1 (qeyb yar)',
'editconflict' => 'Isku dhac badalaadka: $1',
Tusmooyinka qaar lagumo dari doono.",
'post-expand-template-inclusion-category' => "Boggaga ku xad gudbay weyninka tusmo'da",
+# "Undo" feature
+'undo-summary' => 'Noqay bedelaadka $1 ee sameeyay [[Special:Contributions/$2|$2]] ([[User talk:$2|hadal]])',
+
# Account creation failure
'cantcreateaccounttitle' => "Ma' sameynkaro gudagal (akoon)",
'cantcreateaccount-text' => "Akoon'ka sameeyaha leh ciwaankaan IP:ka ('''$1''') waxaa mamnuucay [[User:$3|$3]].
# History pages
'viewpagelogs' => 'Fiiri guadagalayaasha boggaan',
+'nohistory' => 'Boggaan malahan taariikhda bedelaadka',
'currentrev' => 'Bedelkii ugu danbeeyay',
'currentrev-asof' => 'Kala duwanaanshihii ugu danbeeyay oo dhacay $1',
'revisionasof' => 'Bedelaadkkii ahaa $1',
'ns-specialprotected' => 'Посебне странице се не могу уређивати.',
'titleprotected' => "Овај наслов је {{GENDER:$1|заштитио корисник|заштитила корисница|заштитио корисник}} [[User:$1|$1]].
Наведени разлог: ''$2''.",
-'filereadonlyerror' => "Не могу да изменим датотеку „$1“ јер је ризница „$2“ у режиму за читање.
+'filereadonlyerror' => 'Не могу да изменим датотеку „$1“ јер је ризница „$2“ у режиму за читање.
-Ð\9dаведени Ñ\80азлог глаÑ\81и: â\80\9e''$3''â\80\9c.",
+Ð\90дминиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80 коÑ\98и Ñ\98Ñ\83 Ñ\98е закÑ\99Ñ\83Ñ\87ао понÑ\83дио Ñ\98е Ñ\81ледеÑ\9bе обÑ\98аÑ\88Ñ\9aеÑ\9aе: â\80\9e$3â\80\9c.',
# Virus scanner
'virus-badscanner' => "Неисправна поставка: непознати скенер за вирусе: ''$1''",
'watchthis' => 'надгледај ову страницу',
'savearticle' => 'Сачувај страницу',
'preview' => 'Преглед',
-'showpreview' => 'Ð\9fÑ\80егледаÑ\98',
+'showpreview' => 'Ð\9fÑ\80икажи пÑ\80еÑ\82пÑ\80еглед',
'showlivepreview' => 'Тренутни преглед',
'showdiff' => 'Прикажи измене',
'anoneditwarning' => "'''Упозорење:''' нисте пријављени.
'edit-no-change' => 'Ваша измена је занемарена јер није било никаквих измена у тексту.',
'edit-already-exists' => 'Не могу да направим страницу.
Изгледа да она већ постоји.',
+'defaultmessagetext' => 'Подразумевани текст поруке',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Упозорење:''' ова страница садржи превише позива за рашчлањивање.
'backend-fail-contenttype' => 'Не могу да утврдим какав садржај има датотека коју треба да сместим у „$1“.',
'backend-fail-batchsize' => 'Складишна основа је добила блокаду од $1 {{PLURAL:$1|операције|операције|операција}}; ограничење је $2 {{PLURAL:$2|операција|операције|операција}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Не могу да се повежем с новинарском базом за складишну основу „$1“.',
'filejournal-fail-dbquery' => 'Не могу да ажурирам новинарску базу за складишну основу „$1“.',
'ns-specialprotected' => 'Posebne stranice se ne mogu uređivati.',
'titleprotected' => "Ovaj naslov je {{GENDER:$1|zaštitio korisnik|zaštitila korisnica|zaštitio korisnik}} [[User:$1|$1]].
Navedeni razlog: ''$2''.",
-'filereadonlyerror' => "Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.
+'filereadonlyerror' => 'Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.
-Navedeni razlog glasi: „''$3''“.",
+Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.',
# Virus scanner
'virus-badscanner' => "Neispravna postavka: nepoznati skener za viruse: ''$1''",
'edit-no-change' => 'Vaša izmena je zanemarena jer nije bilo nikakvih izmena u tekstu.',
'edit-already-exists' => 'Ne mogu da napravim stranicu.
Izgleda da ona već postoji.',
+'defaultmessagetext' => 'Podrazumevani tekst poruke',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Upozorenje:''' ova stranica sadrži previše poziva za raščlanjivanje.
'backend-fail-contenttype' => 'Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smestim u „$1“.',
'backend-fail-batchsize' => 'Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|operacije|operacije|operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Ne mogu da se povežem s novinarskom bazom za skladišnu osnovu „$1“.',
'filejournal-fail-dbquery' => 'Ne mogu da ažuriram novinarsku bazu za skladišnu osnovu „$1“.',
* @author StefanB
* @author Steinninn
* @author Str4nd
+ * @author Thurs
* @author Tobulos1
* @author VickyC
* @author Where next Columbus
'tog-watchlisthidepatrolled' => 'Göm patrullerade redigeringar från bevakningslistan',
'tog-nolangconversion' => 'Konvertera inte mellan språkvarianter',
'tog-ccmeonemails' => 'Skicka kopior till mig av e-post jag skickar till andra användare',
-'tog-diffonly' => 'Visa inte sidinnehåll under differenser',
+'tog-diffonly' => 'Visa inte sidinnehåll under diffar',
'tog-showhiddencats' => 'Visa dolda kategorier',
'tog-noconvertlink' => 'Stäng av konvertering av sidtitlar',
'tog-norollbackdiff' => 'Visa inte diff efter tillbakarullning',
'badtitle' => 'Felaktig titel',
'badtitletext' => 'Den begärda sidtiteln är antingen ogiltig eller tom, eller så är titeln felaktigt länkad från en annan wiki.
Den kan innehålla ett eller flera tecken som inte får användas i sidtitlar.',
-'perfcached' => 'Följande data är cachad och är möjligtvis inte helt uppdaterad. Maximalt {{PLURAL:$1|ett|$1}} restultat finns {{PLURAL:$1|tillgängligt|tillgängliga}} i cachen.',
-'perfcachedts' => 'Sidan är hämtad ur ett cacheminne och uppdaterades senast $1. Maximalt {{PLURAL:$4|ett|$4}} restultat finns {{PLURAL:$4|tillgängligt|tillgängliga}} i cachen.',
+'perfcached' => 'Följande data är cachad och är möjligtvis inte helt uppdaterad. Maximalt {{PLURAL:$1|ett|$1}} resultat finns {{PLURAL:$1|tillgängligt|tillgängliga}} i cachen.',
+'perfcachedts' => 'Sidan är hämtad ur ett cacheminne och uppdaterades senast $1. Maximalt {{PLURAL:$4|ett|$4}} resultat finns {{PLURAL:$4|tillgängligt|tillgängliga}} i cachen.',
'querypage-no-updates' => 'Uppdatering av den här sidan är inte aktiverad. Datan kommer i nuläget inte att uppdateras.',
'wrong_wfQuery_params' => 'Felaktiga parametrar för wfQuery()<br /> Funktion: $1<br /> Förfrågan: $2',
'viewsource' => 'Visa wikitext',
Den uppgivna anledningen är "\'\'$2\'\'".',
'filereadonlyerror' => 'Det går inte att ändra filen "$1", eftersom fildatabasen "$2" är i skrivskyddat läge.
-Den angivna anledningen var "\'\'$3\'\'".',
+Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
# Virus scanner
'virus-badscanner' => "Dålig konfigurering: okänd virusskanner: ''$1''",
'edit-no-change' => 'Din redigering ignorerades, eftersom ingen ändring gjordes i texten.',
'edit-already-exists' => 'Sidan kunde inte skapas.
Den finns redan.',
+'defaultmessagetext' => 'Standardtext för meddelande',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Varning: Denna sida innehåller för många anrop av resurskrävande parserfunktioner.
# Suppression log
'suppressionlog' => 'Undanhållandelogg',
'suppressionlogtext' => 'Nedan visas en lista över raderingar och blockeringar som berör innehåll dolt för administratörer.
-Se [[Special:BlockList|IP-blockeringslistan]] för listan över gällande blockeringar.',
+Se [[Special:BlockList|blockeringslistan]] för listan över gällande blockeringar.',
# History merging
'mergehistory' => 'Sammanfoga sidhistoriker',
'backend-fail-contenttype' => 'Kunde inte bestämma innehållstypen för filen att spara på "$1".',
'backend-fail-batchsize' => 'Lagringssystemet gav en batch på $1 fil{{PLURAL:$1|operation|operationer}}; gränsen är $2 {{PLURAL:$2|operation|operationer}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Kunde inte ansluta till journaldatabasen för lagringssystemet "$1".',
'filejournal-fail-dbquery' => 'Kunde inte uppdatera journaldatabasen för lagringssystemet "$1".',
'allpages-bad-ns' => 'Namnrymden "$1" finns inte på {{SITENAME}}.',
'allpages-hide-redirects' => 'Göm omdirigeringar',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Du visar en cachad version av denna sida, som kan vara upp till $1 gammal.',
+'cachedspecial-viewing-cached-ts' => 'Du visar en cachad version av denna sida, som kanske inte är helt aktuell.',
+'cachedspecial-refresh-now' => 'Visa senaste.',
+
# Special:Categories
'categories' => 'Kategorier',
'categoriespagetext' => 'Följande {{PLURAL:$1|kategori|kategorier}} innehåller sidor eller media.
'ipb-confirm' => 'Bekräfta blockering',
'badipaddress' => 'Du har inte skrivit IP-adressen korrekt.',
'blockipsuccesssub' => 'Blockeringen är utförd',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] har blockerats.
-<br />För att se alla aktuella blockeringar, gå till [[Special:BlockList|listan över blockeringar]].',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] har blockerats.<br />
+För att se alla aktuella blockeringar, gå till [[Special:BlockList|listan över blockeringar]].',
'ipb-blockingself' => 'Du håller på att blockera dig själv! Är du säker på att du vill göra det?',
'ipb-confirmhideuser' => 'Du är på väg att blockera en användare med "göm användare" aktiverat. Detta kommer upphäva användarens namn i alla listor och loggar. Är du säker på att du vill göra det?',
'ipb-edit-dropdown' => 'Redigera blockeringsanledningar',
'reblock-logentry' => 'ändrade blockeringsinställningar för [[$1]] med en varaktighet på $2 $3',
'blocklogtext' => 'Detta är en logg över blockeringar och avblockeringar.
Automatiskt blockerade IP-adresser listas ej.
-I [[Special:BlockList|blockeringslistan]] listas alla IP-adresser och användare som är blockerade för närvarande.',
+Se [[Special:BlockList|blockeringslistan]] för en översikt av gällande blockeringar.',
'unblocklogentry' => 'tog bort blockering av "$1"',
'block-log-flags-anononly' => 'bara oinloggade',
'block-log-flags-nocreate' => 'hindrar kontoregistrering',
'api-error-uploaddisabled' => 'Uppladdning är inaktiverad på denna wiki.',
'api-error-verification-error' => 'Denna fil kan vara skadad eller har fel filändelse.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunder}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minut|minuter}}',
+'duration-hours' => '$1 {{PLURAL:$1|timme|timmar}}',
+'duration-days' => '$1 {{PLURAL:$1|dag|dagar}}',
+'duration-weeks' => '$1 {{PLURAL:$1|vecka|veckor}}',
+'duration-years' => '$1 {{PLURAL:$1|år|år}}',
+'duration-decades' => '$1 {{PLURAL:$1|decennium|decennier}}',
+'duration-centuries' => '$1 {{PLURAL:$1|sekel|sekel}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
+
);
'userinvalidcssjstitle' => "'''எச்சரிக்கை:''' \"\$1\" என்றப் பெயரில் தோல்லொறுக் கிடையாது. சி.எஸ்.எஸ் மற்றும் ஜெ.எஸ். பக்கங்கள் ஆங்கில கீழ் வரிசைப் பெயர்களைக் கொண்டிருக்க வேண்டும் என்பதைக் கவனிக்கவும். எ+கா: {{ns:user}}:Foo/vector.css என்பது சரியான வடிவம் {{ns:user}}:Foo/Vector.css என்பது பிழையான வடிவம்.",
'updated' => '(இற்றைப்படுத்தப்பட்டது)',
'note' => "'''குறிப்பு:'''",
-'previewnote' => "'''இது ஒரு முன்தோற்றம் மட்டுமே, உங்கள் மாற்றங்கள் இன்னும் சேமிக்கப்படவில்லை!'''",
+'previewnote' => "'''இது ஒரு முன்தோற்றம் மட்டுமே''', உங்கள் மாற்றங்கள் இன்னும் சேமிக்கப்படவில்லை! [[#editform|→ Continue editing]]",
'previewconflict' => 'இந்த முன்தோற்றம் உரை தொகுப்புப் பகுதியின் மேற்பகுதியிலுள்ள உரையைப் பிரதிபலிக்கின்றது. நீங்கள் இப்பொழுது சேமித்தால் மேற்படி தோற்றமே கிடைக்கும்.',
'session_fail_preview' => "'''உங்கள் அமர்வுத் தரவுகள் அழிந்துப்போனமையால் உங்கள் தொகுப்பை செயற்படுத்த முடியவில்லை. அருள் கூர்ந்து மீண்டும் முயலவும். அதுவும் பலனளிக்காவிட்டால் விடுபதிகைச் செய்து மீண்டும் புகுபதிகைச் செய்யவும்'''",
'session_fail_preview_html' => "'''மன்னிக்கவும்! தங்கள் அமர்வுத் தரவுகள் அழிந்துப்போனமையால் தொகுப்பைச் செயற்படுத்த முடியவில்லை.'''
'token_suffix_mismatch' => "'''உங்கள் தொகுப்பினுள் சேவையாளர் நிறுத்தக்குறியீடுகளை செறுகியுள்ளனதன் காரணமாக உங்களது தொகுப்பு நிராகரிக்கப்பட்டுள்ளது. இது வலைத்தளத்தை மையமாகக் கொண்ட அடையாளம் காட்டாத புரொக்சி சேவைகளிலிருந்து தொகுக்கும் போது ஏற்படலாம்.'''",
'edit_form_incomplete' => 'இந்த திருத்து படிவத்தின் சில பகுதிகள் SERVER ஐ சென்றடையவில்லை;ஒருமுறைக்கு இருமுறை உங்கள் திருத்தங்களை சரிபார்த்து மீண்டும் முயற்சிக்கவும்.',
'editing' => '$1 தொகுக்கப்படுகிறது',
+'creating' => '$1 உருவாக்கம்',
'editingsection' => 'தொகுப்பு $1 (பிரிவு)',
'editingcomment' => '$1 தொகுக்கப்படுகிறது (புதிய பிரிவு)',
'editconflict' => 'முரண்பாடுகளைத் தொகுக்கவும்: $1',
'prefs-help-gender' => 'விருப்பத் தேர்வுதான்: ஒருவரைக் குறிப்பிடும்பொழுது, அவருடைய பால் சரியானதாக இருக்க மென்கலம் பயன்படுத்தும் தகவல். இத்தகவல் பொதுவில் கிடைக்கும்படி இனி இருக்கும்.',
'email' => 'மின்னஞ்சல்',
'prefs-help-realname' => 'உண்மையான பெயர் கட்டாயமற்றது. நீங்கள் இதை கொடுத்தால் உங்கள் ஆக்கங்களுக்கான உரிமையளிப்புகளின் போது இது பயன்படும்.',
-'prefs-help-email' => 'மின்னஞ்சல் விருப்பத்தின் பேரில் ஆனால் உங்கள் கடவுச்சொல் உங்களுக்கு நினைவில்லையென்றால், புதிய கடவுச்சொல் ஒன்றை மின்னஞ்சல் மூலம் அனுப்ப வழிசெய்யும்.மேலும் உங்கள் பயனர் பக்கம் அல்லது பயனர் பேச்சுப் பக்கத்தில் இருந்து மற்ற பயனர்கள் உங்களுக்கு மின்னஞ்சல் அனுப்ப உதவும். எனினும் உங்கள் மின்னஞ்சல் முகவரி வெளிப்படுத்தப்பட மாட்டாது.',
+'prefs-help-email' => 'மின்னஞ்சல் விருப்பத் தேர்வு, ஆனால் உங்கள் கடவுச்சொல் உங்களுக்கு நினைவில்லையென்றால், புதிய கடவுச்சொல்லை மீட்டமைக்க தேவைப்படும்.',
'prefs-help-email-others' => 'உங்கள் பேச்சுப் பக்கத்தில் உள்ள இணைப்பு மூலம் பிற பயனர்கள் உங்களுக்கு மின்னஞ்சல் அனுப்புதலை நீங்கள் தெரிவு செய்யலாம். பிற பயனர்கள் உங்களைத் தொடர்பு கொள்ளும் அதே வேளையில் உங்கள் மின்னஞ்சல் முகவரி வெளிப்படுத்தப்பட மாட்டாது.',
'prefs-help-email-required' => 'மின்னஞ்சல் முகவரி தேவை.',
'prefs-info' => 'அடிப்படைச் செய்தி',
'sqlite-no-fts' => '$1 முழு-உரை தேடல் ஆதரவு இல்லாமல்',
# New logging system
-'logentry-delete-delete' => 'பக்கம் $3 ஐ $1 நீக்கினார்',
+'logentry-delete-delete' => '$3 பக்கத்தை $1 நீக்கினார்',
'logentry-delete-restore' => '$1 பயனரால் $3 பக்கம் மீட்டமைக்கப்பட்டது',
'logentry-delete-event' => '$1 மாற்றிய காட்சித்தன்மை {{PLURAL:$5| ஒரு நிகழ்வு குறிப்பேடு| $5 நிகழ்வுகள் குறிப்பேடு}} இதில் $3 :$4',
'logentry-delete-revision' => '$1 மாற்றப்பட்ட காட்சித்தன்மைக்கு {{PLURAL:$5| ஒருபரிசீலனை| $5 பரிசீலனைகளுக்கும்}} இந்த பக்கம் $3 :$4',
'passwordreset-disabled' => 'ఈ వికీలో సంకేతపదాల మార్పును అచేతనం చేసాం.',
'passwordreset-pretext' => '{{PLURAL:$1||డేటా శకలాల్లోంచి ఒకదాన్ని ఇవ్వండి}}',
'passwordreset-username' => 'వాడుకరిపేరు:',
+'passwordreset-domain' => 'డొమైన్:',
'passwordreset-email' => 'ఈ-మెయిలు చిరునామా:',
'passwordreset-emailtitle' => '{{SITENAME}}లో ఖాతా వివరాలు',
'passwordreset-emailtext-ip' => 'ఎవరో (బహుశా మీరే, ఐపీ అడ్రసు $1 నుంచి) {{SITENAME}} ($4) లో మీ ఖాతా వివరాలను చెప్పమంటూ అడిగారు. కింది వాడుకరి {{PLURAL:$3|ఖాతా|ఖాతాలు}}
అభిమత .css మరియు .js పుటల శీర్షికలు ఇంగ్లీషు చిన్నబడి అక్షరాల లోనే ఉండాలని గుర్తుంచుకోండి, ఉదాహరణకు ఇలా {{ns:user}}:Foo/vector.css అంతేగానీ, {{ns:user}}:Foo/Vector.css ఇలా కాదు.",
'updated' => '(నవీకరించబడింది)',
'note' => "'''గమనిక:'''",
-'previewnote' => "'''ఇది మునుజూపు మాత్రమే;
-మారà±\8dà°ªà±\81లని à°\87à°\82à°\95à°¾ à°à°¦à±\8dరపరà°\9aà°²à±\87à°¦à±\81!'''",
+'previewnote' => "'''ఇది మునుజూపు మాత్రమేనని గుర్తుంచుకోండి.'''
+à°®à±\80 మారà±\8dà°ªà±\81à°²à±\81 à°\87à°\82à°\95à°¾ à°à°¦à±\8dరమవà±\8dవలà±\87à°¦à±\81! [[#editform|â\86\92 సవరణనà±\81 à°\95à±\8aనసాà°\97à°¿à°\82à°\9aà°\82à°¡à°¿]]",
'previewconflict' => 'భద్రపరచిన తరువాత పై టెక్స్ట్ ఏరియాలోని టెక్స్టు ఇలాగ కనిపిస్తుంది.',
'session_fail_preview' => "'''క్షమించండి! సెషను డేటా పోవడం వలన మీ మార్పులను స్వీకరించలేకపోతున్నాం.'''
దయచేసి మళ్ళీ ప్రయత్నించండి.
'allpagesprefix' => 'ఈ ఆదిపదం కలిగిన పేజీలను చూపించు:',
'allpagesbadtitle' => 'మీరిచ్చిన పేజీ పేరు సరైనది కాకపోయి ఉండాలి లేదా దానికి భాషాంతర లేదా అంతర్వికీ ఆదిపదమైనా ఉండి ఉండాలి. పేర్లలో వాడకూడని కారెక్టర్లు ఆ పేరులో ఉండి ఉండవచ్చు.',
'allpages-bad-ns' => '{{SITENAME}} లో "$1" అనే నేమ్‌స్పేస్ లేదు.',
+'allpages-hide-redirects' => 'దారిమార్పులను దాచు',
# Special:Categories
'categories' => 'వర్గాలు',
# API errors
'api-error-badaccess-groups' => 'ఈ వికీ లోనికి దస్త్రాలను ఎక్కించే అనుమతి మీకు లేదు.',
'api-error-empty-file' => 'మీరు దాఖలుచేసిన ఫైల్ ఖాళీది.',
+'api-error-emptypage' => 'కొత్త మరియు ఖాళీ పేజీలను సృష్టించడానికి అనుమతి లేదు.',
'api-error-filename-tooshort' => 'దస్త్రపు పేరు మరీ చిన్నగా ఉంది.',
'api-error-filetype-banned' => 'ఈ రకపు దస్త్రాలని నిషేధించారు.',
'api-error-http' => 'అంతర్గత దోషము: సేవకానికి అనుసంధానమవలేకపోతున్నది.',
'createaccount' => 'Täze hasap aç',
'gotaccount' => "Eýýäm hasap açdyňyzmy? '''$1'''.",
'gotaccountlink' => 'Onda giriberiň!',
+'userlogin-resetlink' => 'Giriş maglumatlaryňyzy ýatdan çykardyňyzmy?',
'createaccountmail' => 'e-poçta bilen',
'createaccountreason' => 'Sebäp:',
'badretype' => 'Girizen parollaryňyz biri-birine gabat gelmeýär.',
Hususy .css we .js sahypalarynyň setir harp bilen ýazylýandygyny ýatda saklaň, ýagny {{ns:user}}:Ulanyjy/Vector.css däl-de, eýsem {{ns:user}}:Ulanyjy/vector.css.",
'updated' => '(Täzelenen)',
'note' => "'''Bellik:'''",
-'previewnote' => "'''Bu bir ýöne deslapky syn. Üýtgeşmeleriňiz heniz ýazdyrylan däldir!'''",
+'previewnote' => "'''Ýatda saklaň, bu bir ýöne deslapky syn.''' Üýtgeşmeleriňiz heniz ýazdyrylan däldir! [[#editform|→ Redaktirläberiň]]",
'previewconflict' => 'Bu deslapky syn redaktirleme penjiresiniň üstünde ýerleşip, ol ýazdyran mahalyňyz sahypanyň nähili görünjekdigini görkezýär.',
'session_fail_preview' => "'''Bagyşlaň! Sessiýa maglumatynyň ýitirilmegi zerarly serwer özgerdişiňizi işläp bilenok.'''
Gaýtadan synanyşmagyňyzy haýyş edýäris.
'prefs-help-gender' => 'Hökmany däl: programma tarapyndan ulanyjynyň jynsyna görä ýüzlenmek üçin ulanylýar. Bu maglumat köpçülige açyk boljakdyr.',
'email' => 'E-poçta',
'prefs-help-realname' => 'Hakyky at (hökmany däl): eger hakyky adyňyz berseňiz, onda eden işleriňiz görkezilende ulanyljakdyr.',
-'prefs-help-email' => 'E-poçta adresi hökmany däl; ýöne parolyňyz ýadyňyzdan çykan ýagdaýynda e-poçta adresiňize täze parol iberilmegine mümkinçilik berýär.
-Şeýle-de ol başga ulanyjylaryň ulanyjy we pikir alyşma sahypalaryňyzyň üsti bilen kimdigiňizi bilmezden siziň bilen habarlaşyp bilmeklerine şert döredýär.',
+'prefs-help-email' => 'E-poçta adresi hökmany däl, ýöne parolyňyz ýadyňyzdan çykan ýagdaýynda e-poçta adresiňize täze parol iberilmegine mümkinçilik berýär.',
+'prefs-help-email-others' => 'Ulanyjy ýa-da çekişme sahypaňyzdaky bir çykgydyň üsti bilen başga ulanyjylaryň size e-poçta ibermegine rugsat hem berip bilersiňiz. Başga ulanyjylar siziň bilen habarlaşan wagty e-poçta adresiňiz görkezilmez.',
'prefs-help-email-required' => 'E-poçta adresi talap edilýär.',
'prefs-info' => 'Esasy maglumat',
'prefs-i18n' => 'Halkaralaşdyryş',
'filehist-filesize' => 'Faýl ölçegi',
'filehist-comment' => 'Teswirleme',
'filehist-missing' => 'Faýl ýok',
-'imagelinks' => 'Faýlyň çykgytlary',
+'imagelinks' => 'Faýlyň ulanylyşy',
'linkstoimage' => 'Bu faýla çykgydy bar bolan {{PLURAL:$1|sahypa|$1 sahypa}}:',
'linkstoimage-more' => '$1 gowrak {{PLURAL:$1|sahypa|sahypa}} bu faýla çykgyt berýär.
Aşakdaky sanaw diňe şu faýla çykgyt berýän {{PLURAL:$1|ilkinji faýly |ilkinji $1 faýly}} görkezýär.
'listusers-editsonly' => 'Diňe özgerdiş eden ulanyjylary görkez',
'listusers-creationsort' => 'Döredilen senesi boýunça tertiple',
'usereditcount' => '$1 {{PLURAL:$1|özgerdiş|özgerdiş}}',
-'usercreated' => '$2, $1 senesinde döredildi',
+'usercreated' => '$2, $1 senesinde {{GENDER:$3|döredildi}}.',
'newpages' => 'Täze sahypalar',
'newpages-username' => 'Ulanyjy ady:',
'ancientpages' => 'Iň köne sahypalar',
'sp-contributions-newbies-title' => 'Täze hasaplar üçin ulanyjy goşantlary',
'sp-contributions-blocklog' => 'Blokirleme gündeligi',
'sp-contributions-deleted' => 'öçürilen ulanyjy goşantlary',
+'sp-contributions-uploads' => 'ýüklemeler',
'sp-contributions-logs' => 'gündelikler',
'sp-contributions-talk' => 'çekişme',
'sp-contributions-userrights' => 'ulanyjy hukuklary dolandyryşy',
'metadata-help' => 'Bu faýlda, ähtimal, dijital fotoapparat ýa-da skaner tarapyndan goşulan goşmaça maglumatlar bardyr. Eger faýl soňradan redaktirlenen bolsa, onda käbir maglumatlar häzirki redaktirlenen faýly görä köneligine galan bolup biler.',
'metadata-expand' => 'Jikme-jiklikleri görkez',
'metadata-collapse' => 'Jikme-jiklikleri görkezme',
-'metadata-fields' => 'Bu habarlaşykda sanalýan EXIF meta-maglumat meýdançalary meta-maglumat tablisasy çöken mahaly surat görkeziş sahypalarynda ulanylýar. Galanlary gaýybana tertipde gizlenilýär.
+'metadata-fields' => 'Bu habarda sanalýan şekil meta-maglumat meýdançalary meta-maglumat tablisasy düýrlenen mahaly şekil sahypasynyň displeýine goşular. Galanlary gaýybana tertipde gizlenilýär.
* make
* model
* datetimeoriginal
* @ingroup Language
* @file
*
+ * @author Ganbarzada
* @author Гусейн
*/
$messages = array(
# User preference toggles
+'tog-underline' => 'Линки жинтоно хәтт быкәш:',
+'tog-justify' => 'Мәтни бә сәһифә кәно бәрабәр быкә.',
+'tog-hideminor' => 'Охәминчи дәјишикликәдә һырдә редактон нышу мәдә.',
+'tog-hidepatrolled' => 'Јохләмиш быә дәјишиклијон нышу мәдә.',
'tog-newpageshidepatrolled' => 'Нијони огәтеј ноғо доә быә сәһифон бә тожә сәһифон сијоһиәдә',
+'tog-usenewrc' => 'Охнәминчи дәйишиклийон тәкмил версијә',
+'tog-showtoc' => 'Мундәричати сијоһи нышу быдә (3 башлығыку веј быә сәһифон)',
'tog-watchcreations' => 'Зијод кардеј чымы офәјә быә сәһифон бә ноғо доә сијоһи',
'tog-enotifwatchlistpages' => 'Ноғо доә сијоһиәдә сәһифон кејнә дәгиш бәбен бәмы е-номә бывығанд',
'tog-watchlisthideown' => 'Чымы дәгишон ноғо доә сијһиәдә нијо кардеј',
'category-empty' => "''Ын категоријә бы дәғиғәдә тәјлије.''",
'hidden-categories' => '{{PLURAL:$1|Нијони категоријә|Нијони категоријон}}',
'hidden-category-category' => 'Нијони категоријон',
+'category-subcat-count' => '{{PLURAL:$2|Ым катеријә әнчәх жинтонә жинә категоријонку ибарәте.|Чәм $2 категоријонку {{PLURAL:$1|жинә категоријә|$1 жинә категоријә}} нышу доә быә.}}',
'category-article-count' => '{{PLURAL:$2|Бы категоријәдә әнҹәх иглә сәһифәје.|Ҹәми $2 сәһифонку нишо доә быә {{PLURAL:$1|сәһифә|$1 сәһифә}} бы категоријәдә.}}',
'category-article-count-limited' => 'Ын категоријәдә {{PLURAL:$1|$1 сәһифә|}} һесте.',
'category-file-count' => '{{PLURAL:$2|Бы категоријәдә әнҹәх иглә фајле.|Ҹәми $2 фајлонку нишо доә быә {{PLURAL:$1|фајл|$1 фајл}} бы категоријәдә.}}',
'category-file-count-limited' => 'Ын категоријәдә {{PLURAL:$1|$1 фајл}} һесте.',
'listingcontinuesabbrev' => '(дәвом карде)',
+'index-category' => 'Индекс быә сәһифон.',
+'noindex-category' => 'Индекс нибыә саһифон',
'about' => 'Тәсвир',
'article' => 'Мәғолә',
'newwindow' => '(нујә пенҹәдә окардеј)',
'cancel' => 'Ләғв кардеј',
+'moredotdotdot' => 'Веј...',
'mypage' => 'Чымы сәһифә',
'mytalk' => 'Чымы мызокирә сәһифә',
'anontalk' => 'Бо ын IP-унвони мызокирә',
'qbbrowse' => 'Дијә кардеј',
'qbedit' => 'Сәрост кардеј',
'qbpageoptions' => 'Ым сәһифә',
+'qbpageinfo' => 'Мәзмун.',
'qbmyoptions' => 'Чымы сәһифон',
'qbspecialpages' => 'Хысусиә сәһифон',
'faq' => 'РАП',
'userpage' => 'Иштирокәкә сәһифә дијә кардеј',
'projectpage' => 'Нәхши сәһифә дијә кардеј',
'imagepage' => 'Фајли сәһифә дијә кардеј',
+'mediawikipage' => 'Мәктуби сәһифә нышу быдә.',
+'templatepage' => 'Шаблони сәһифә нышу быдә.',
'viewhelppage' => 'Араијш сәј',
'categorypage' => 'Категоријон сәһифә дијә кардеј',
'viewtalkpage' => 'Мызокирә дијә кардеј',
'jumpto' => 'Дәвардеј бә:',
'jumptonavigation' => 'навигасијә',
'jumptosearch' => 'нәве',
+'pool-timeout' => 'Чы блоки чәш кардә вахт сәбе.',
'pool-errorunknown' => 'Номәлумә сәһв',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'copyrightpage' => '{{ns:project}}:Мыәллифә һуғуғ',
'currentevents' => 'Есәтнә һодисон',
'currentevents-url' => 'Project: Есәтнә һодисон',
-'disclaimers' => 'Ð\94еÑ\98ни бÓ\99 гиÑ\98 нÑ\8bгÓ\99Ñ\82еÑ\98',
+'disclaimers' => 'ЧÑ\8b мÓ\99Ñ\81Ñ\83лиÑ\98Ñ\98Ó\99Ñ\82икÑ\83 имÑ\82ина.',
'disclaimerpage' => 'Project:Дејни бә гиј ныгәтеј',
'edithelp' => 'Арајиш бо редактә кардеј',
'edithelppage' => 'Help:Арајиш бо сәрост кардеј',
'helppage' => 'Help:Мындәриҹот',
'mainpage' => 'Јолә сәһифә',
'mainpage-description' => 'Јолә сәһифә',
+'policy-url' => 'Project:Ғајдон',
'portal' => 'Ҹәмјәт',
'portal-url' => 'Project:Ҹәмјәти портал',
'privacy' => 'Мәхфијәти сијосәт',
'privacypage' => 'Project:Мәхфијәти сијосәт',
+'badaccess' => 'Ичазә хәта.',
+'badaccess-group0' => 'Ын фәалијјәти ичра карде әзынишон.',
+
'ok' => 'OK',
'retrievedfrom' => 'Сәвон "$1"',
'youhavenewmessages' => 'Шымә сәјоне $1 ($2).',
# General errors
'error' => 'Сәһв',
+'readonly' => 'Бә база нывыште блок быә.',
+'missing-article' => 'База мәлуматон дыләдә бә ахтар кардә быә саһифон «$1» $2 барәдә мәлумат пејдо карде ныбе.
+Жыго вәзијјәт бе бәзне бә вахтики, ым сәһифә чы позулмишә сәһифә канә варианте.
+Әгәр ым жыго нисә, жәгәдә шымә програм тәминатијәдә сәһфон пејдо кардәјоне.
+Хаһиш кардәмон чы сәһифә URL-и бә администратори бығвандәнән [[Special:ListUsers/sysop|администраторов]].',
'missingarticle-rev' => '(рәвојәт#: $1)',
+'missingarticle-diff' => '(Фәрг: $1, $2)',
+'internalerror' => 'Дахили хәта',
+'internalerror_info' => 'Дахили хәта: $1',
+'fileappenderrorread' => 'Әлавон гејд карде быәдә"$1" һанде ныбе.',
+'formerror' => 'Хәта: Чы формә мәлуматон әкс карде ғерри мумкуне.',
'badtitle' => 'Роныдоә ном',
+'badtitletext' => 'Ахтар кардә быә сәһифә ном сәһфе јаинки тејлијә вә ја дуз ныбыә зывонон арә вә ја викионарә кечид доә быә.
+Бе бәзне ки кали символон сәрлоһәдә истифадә карде эбыни.',
'viewsource' => 'Дијә кардеј',
# Login and logout pages
'yourname' => 'Иштирокәкә ном:',
'yourpassword' => 'Парол:',
'yourpasswordagain' => 'Пароли сәнибәтон гырдә карде:',
+'remembermypassword' => 'Мыни ым компутерәдә јоддә огәт (максимум $1 {{PLURAL:$1|руж|руж}})',
'login' => 'Ыштәни едаштеј',
'nav-login-createaccount' => 'Ыштәни едаштеј / ыштәни ғејд кардовнијеј',
'loginprompt' => '{{SITENAME}}-әдә ыштәни едәште горнә, шымә бәбе бә «cookies» иҹозә быдән.',
'yourtext' => 'Шымә мәтн',
'templatesused' => '{{PLURAL:$1|Ғәлиб:|Ғәлибон}} есәтнә сәһифә истифодә кардејдә:',
'template-protected' => '(Мыдофиә кардә быә)',
+'template-semiprotected' => 'тики муһафизә быә',
'hiddencategories' => 'Ын сәһифә аидијотыш һесте бә {{PLURAL:$1|1 нијони категоријә|$1 нијони категоријон}}:',
'permissionserrorstext-withaction' => "Шымәку ни иҹозә ба ым һәрәкәти «'''$2'''», бә жыго {{PLURAL:$1|сәбәби|сәбәбон}} горнә:",
+'recreate-moveddeleted-warn' => "''Дыггәт! Шымә нафко позулмуш быә сәһифон бәрпа кардеон пидә.'''
+
+Ым сәһифә чоәдәнә дуз карде зәруријјәти јохләмишкәнән.
+Жинтоно нышу доә быә бычи ым сәһифә позулмуш быә.",
'moveddeleted-notice' => 'Ым сәһифә молә быә.
Арајиши горнә жинтоно нишо доә быән чы сәһифә молә ијән ном дәгиш кардә нывыштәјон.',
'post-expand-template-inclusion-warning' => "'''Дығғәт:''' Дахыл кардә быә ғәлибон сәкыштә памјә ве јоле.
Хәјли ғәлибон дахыл ныбабен.",
'post-expand-template-inclusion-category' => 'Бо сәһифон дахыл кардә быә ғәлибон рәво зынә быә улгу бә кәно бешә',
+'post-expand-template-argument-warning' => "'''Дыггәт:''' Ым сәһифәдә ән ками иглә аргумент һисте, ә аргумент ки һәддиндән зијодә олчуш һысте бо окарде.
+Жиго аргументон вадоәшон",
+'post-expand-template-argument-category' => 'Вадо быә аргумент шаблоны огәтә сәһифон',
# History pages
'viewpagelogs' => 'Бо ым сәһифә журналон нишо дој',
'last' => 'навы.',
'page_first' => 'иминә',
'page_last' => 'охонә',
+'histlegend' => "Бә фәрги дијәка: Мыгојисә карден пиә версијон тоно даирон ишарәләмишкәнән və \"Enter\"ə və ya \"мыгајисә быка\" дујмә ежән.<br />
+Изоһ: '''(hh)''' —Ды исәтнә версијә фәрг, '''(охо)''' — ды навконә версијә фәрг, '''k''' — гәдә редактә.",
'history-fieldset-title' => 'Тарыхи дијә кардеј',
'history-show-deleted' => 'Әнҹәх рәдд кардә быән',
+'histfirst' => 'Ән канә',
+'histlast' => 'Охнәминчи',
'historyempty' => '(тәјли)',
# Revision feed
'lineno' => 'Сәтыр $1:',
'compareselectedversions' => 'Сәчын кардә быә рәвојәтон мығојисә кардеј.',
'editundo' => 'ләғв кардеј',
+'diff-multi' => '({{PLURAL:$2|Иглә истифадәчи|$2 истифадәчи}} тәрәфәдә кардә быә {{PLURAL:$1|иглә арә редактә|$1 арә редактә}} нушо додәни)',
# Search results
'searchresults' => 'Нәве нәтиҹон',
'searchprofile-everything-tooltip' => 'Һәммәј сәһифонәдә нәве (мызокирә сәһифонәдән)',
'searchprofile-advanced-tooltip' => 'Бә асбардә быә номон мәкононәдә нәве',
'search-result-size' => '$1 ({{PLURAL:$2|1 сыхан|$2 сыханон}})',
+'search-result-category-size' => '{{PLURAL:$1|$1 елемент|$1 елементон}} ({{PLURAL:$2|$2 жинә категоријә$2 alt жинә категоријон }}, {{PLURAL:$3|$3 фајл|$3 фајлон}})',
'search-redirect' => '(Унвони дәгиш кардеј $1)',
'search-section' => '(семонә $1)',
'search-suggest' => 'Еһтимол шымә нәзәрәдә ым гәтејдәбијон: $1',
'yourlanguage' => 'Зывон:',
'email' => 'E-номә',
'prefs-help-email' => 'Е-номә унвони нывыштеј һукман ни, интаси ав бә шымә гәрәк бәбе гирам шымә пароли виро бебәкардејон.',
+'prefs-help-email-others' => 'Әв комәг бакаајки чо иштиракчион шымә адреси електрон почти оныкә чы шымә шәхси сәһифәдә быә линки ды шымә әлагә огәтин.',
# Associated actions - in the sentence "You do not have permission to X"
'action-edit' => 'Ым сәһифә сәрост кардеј',
'nchanges' => '$1 {{PLURAL:$1|дәгиши|дәгишон}}',
'recentchanges' => 'Ән нујә дәгишон',
'recentchanges-legend' => 'Ән нујә дәгишон печыније',
+'recentchangestext' => 'Жинтоно сәһифонәдә быә охнәминчи дәјишиклијон ардычил доә быән {{grammar:genitive|{{SITENAME}}}}.',
+'recentchanges-feed-description' => 'Ым каналәдә быә дәјишиклијон диггәтәдә огәт',
'recentchanges-label-newpage' => 'Де ым дәгиши тожә сәһифә сохтә бе',
'recentchanges-label-minor' => 'Ым гадә дәгишије',
'recentchanges-label-bot' => 'Ым дәгиши бот кардәше',
+'recentchanges-label-unpatrolled' => 'Ым редактә һәлә нәзәрәдә давардәни',
'rcnote' => "Бә жиј нишо доә быә {{PLURAL:$1|'''1''' дәгиши|'''$1''' дәгиши}}, бә охонә {{PLURAL:$2|ружәдә|'''$2''' ружәдә}}, саат $5, $4.",
'rcnotefrom' => "Бә жиј доә быән дәгишон че вахтику '''$2''' (тосә '''$1''').",
'rclistfrom' => '$1 вахтику дәгишон нишо быдә',
'file-anchor-link' => 'Фајл',
'filehist' => 'Фајли тарых',
'filehist-help' => 'Фајли сыфтә рәвојәти виндеј горә бә тарых/вахт егәтән.',
+'filehist-revert' => 'Огард',
'filehist-current' => 'есәтнә',
'filehist-datetime' => 'Тарых/Вахт',
'filehist-thumb' => 'Гәдә шикил',
# Random page
'randompage' => 'Рајрастә мәғолә',
+# Statistics
+'statistics' => 'Статистика',
+
+'disambiguationspage' => 'Дәгиг карде',
+
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|бајт|бајтон}}',
'nmembers' => '$1 {{PLURAL:$1|узв|узвон}}',
+'prefixindex' => 'Һәммә сәһифон ды префикси',
'usercreated' => '{{GENDER:$3|Офәјеј быә}} $1 $2',
'newpages' => 'Тожә сәһифон',
'move' => 'Ном дәгиш кардеј',
-'pager-newer-n' => '{{PLURAL:$1|ән нујә 1|ән нујә $1}}',
+'pager-newer-n' => '{{PLURAL:$1|ән нујә1|ән нујә $1}}',
+'pager-older-n' => '{{PLURAL:$1|1 тикиән канә|$1 ән канә}}',
# Book sources
'booksources' => 'Китобон сәвонон',
# Namespace form on various pages
'namespace' => 'Номон мәкон:',
+'invert' => 'Нишон быәгылон дејишкә',
'blanknamespace' => '(Әсос)',
# Contributions
'blocklink' => 'Бә гырд гәтеј',
'unblocklink' => 'Ошко кардеј',
'change-blocklink' => 'Блок быә ҹо дәгиш кардеј',
-'contribslink' => 'Гәнҹ',
+'contribslink' => 'Комәкон',
+'blocklogpage' => 'Блок быәјон',
'blocklogentry' => 'бастәше [[$1]] бә ын мыддәт $2 $3',
'block-log-flags-nocreate' => 'нујә иштирокәкон ғејд карде ғәдәғәне',
# Thumbnails
'thumbnail-more' => 'Һејве кардеј',
+'thumbnail_error' => 'Гәдә шикили туму кардәдә сәһф: $1',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Шымә иштирокәкә сәһифә',
'file-info-size' => '$1 × $2 пиксел, фајли памјә: $3, MIME тип: $4',
'file-nohires' => 'Ән барзә рәвојәт ни.',
'svg-long-desc' => 'SVG фајл, номинәләдә $1 × $2 пиксел, фајли памјә: $3',
+'show-big-image' => 'Тикиән јолә кејфијјәтинә шикил',
# Bad image list
'bad_image_list' => 'Формат бәпе быбу жыго:
# Metadata
'metadata' => 'Метамәлумотон',
+'metadata-help' => 'Ым фајләдә фотоапарати јаинки сканери әлавә кардә быә мәлуматон һыстин. Әгәр ым мәлуматон пешо редактә быәсә, бе бәзнеки кали мәлуматон ијо нышо быејсә фәрғли быбуј.',
'metadata-fields' => 'Кејнә шикили сәһифәдә метадата ҹәдвәл гырдә карда быә бәвәдә бы сијоһиәдә гылә-гылә ашмардә быә метадата шикили мәрон виндеј бәбе.
Әмандәј мәрон нијони бәманден.
* make
'watchlisttools-edit' => 'Дијә кардеј/сәрост кардеј сијоһи',
'watchlisttools-raw' => 'Сәрост кардеј бәнә мәтни',
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'Дыггәт:\'\'\' Еһтимал кардә быә "$2" классификасијә ачари нафконә "$1" классификасијә ачари етиборсоз кардә',
+
# Special:SpecialPages
'specialpages' => 'Хысусиә сәһифон',
+# External image whitelist
+'external_image_whitelist' => ' #Ым сәтири огәтәнән чокнәј әв һысте<pre>
+#Рә рә истифадә быә фрагментон ијо быдәнән (ә һиссә, арәдә бедә //)
+#Әвон ды харичи шикили URL и дуз бәбен.
+#Дуз омә гылә бәнә шикили нышу бәбе, амандәни бәнә шикили линк нышу бәбе.
+#Сәтрон ды # комментариј һисоб бедән.
+#Сәғрон бә регистри һәссос нин.
+
+#Рә рә истифадә быә фрагментон чы сәтири пентоно ијо быдәнән. Ым сәтири огәтәнән чокнәј һысте.</pre>',
+
# Special:Tags
'tag-filter' => '[[Special:Tags|нышонон]] филтр:',
*
* @author 82-145
* @author Bekiroflaz
+ * @author Bilalokms
* @author Bombola
* @author Cekli829
* @author Dbl2010
Eğer sorunlu bir web-tabanlı anonim proksi servisi kullanıyorsanız bu olay bazen gerçekleşebilir.'''",
'edit_form_incomplete' => "'''Değişiklik formu için bazı sunuculara erişilemedi; yaptığınız değişiklikler bozulmamıştır, gözden geçirip tekrar deneyiniz.'''",
'editing' => '"$1" sayfasını değiştirmektesiniz',
+'creating' => 'Oluşturuluyor $1',
'editingsection' => '"$1" sayfasında bölüm değiştirmektesiniz',
'editingcomment' => '$1 değiştiriliyor (yeni bölüm)',
'editconflict' => 'Değişiklik çakışması: $1',
Ayrıca buraya katkıda bulunarak, bu katkının kendiniz tarafından yazıldığına ya da kamuya açık bir kaynaktan ya da başka bir özgür/ücretsiz kaynaktan kopyalandığına güvence vermiş oluyorsunuz. '''Buraya, telif sahibinin izni olmadan telif hakkı ile korunan eserleri eklemeyiz! '''",
'copyrightwarning2' => 'Lütfen, {{SITENAME}} sitesine bulunacağınız tüm katkıların diğer üyeler tarafından düzenlenebileceğini, değiştirilebileceğini ya da silinebileceğini hatırlayın. Yazılarınızın merhametsizce değiştirilebilmesine rıza göstermiyorsanız buraya katkıda bulunmayın. <br />
Ayrıca bu ekleyeceğiniz yazıyı sizin yazdığınızı ya da serbest kopyalama izni veren bir kaynaktan kopyaladığınızı bize taahhüt etmektesiniz (ayrıntılar için referans: $1).',
-'longpageerror' => "'''HATA: Girdiğiniz metnin uzunluğu $1 kilobayt, ve en fazla uzunluktan $2 kilobayt daha fazladır.
+'longpageerror' => "'''HATA: Girdiğiniz metnin uzunluğu {{PLURAL:$1|bir kilobayt|$1 kilobayt}}, ve en fazla uzunluktan {{PLURAL:$2|bir kilobayt|$2 kilobayt}} daha fazladır.
Kaydedilmesi mümkün değildir.'''",
'readonlywarning' => "'''DİKKAT: Bakım nedeni ile veritabanı şu anda kilitlidir. Bu sebeple değişiklikleriniz şu anda kaydedilememektedir. Yazdıklarınızı başka bir editöre alıp saklayabilir ve daha sonra tekrar buraya getirip kaydedebilirsiniz'''
'edit-no-change' => 'Değişikliğiniz yoksayıldı, çünkü metinde bir değişiklik yapılmadı.',
'edit-already-exists' => 'Yeni sayfa oluşturulamıyor.
Sayfa zaten mevcut.',
+'defaultmessagetext' => 'Varsayılan mesaj metni',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Uyarı: Bu sayfa çok fazla zengin derleyici fonksiyonu çağrısı içeriyor.
'newsectionsummary' => '/* $1 */ yeni başlık',
'rc-enhanced-expand' => 'Ayrıntıları göster (JavaScript gerekir)',
'rc-enhanced-hide' => 'Ayrıntıları gizle',
+'rc-old-title' => 'ilk olarak oluşturulan "$1"',
# Recent changes linked
'recentchangeslinked' => 'İlgili değişiklikler',
'upload-http-error' => 'Bir HTTP hatası oluştu: $1',
# File backend
+'backend-fail-notexists' => '$1 dosyası mevcut değil.',
'backend-fail-delete' => '"$1" dosyası silinemedi.',
'backend-fail-opentemp' => 'Geçici dosya açılamadı.',
'backend-fail-closetemp' => 'Geçici dosya kapanamadı.',
# Categories related messages
'pagecategories' => '{{PLURAL:$1|Бөлүк|Бөлүктер}}',
-'category_header' => '«$1» деп бөлүкте арыннар',
+'category_header' => '«$1» деп бөлүктүң арыннары',
'subcategories' => 'Бичии бөлүктер',
'category-media-header' => '«$1» деп бөлүкте медиа',
'category-empty' => "''Амгы бо бөлүкте медиа база арыннар чок.''",
'returnto' => '«$1» деп арынже эглири.',
'tagline' => '{{SITENAME}} деп веб-сайттан',
'help' => 'Дуза',
-'search' => 'Дилээри',
+'search' => 'Диле',
'searchbutton' => 'Дилээри',
'go' => 'Баары',
'searcharticle' => 'Күүcедири',
'history' => 'Арынның Төөгүзү',
'history_short' => 'Төөгү',
'printableversion' => 'Саазынга үндүрерин көөрү',
-'permalink' => 'Үргүлчү холбаа',
+'permalink' => 'Турум холбаа',
'print' => 'Саазынга үндүрер',
'view' => 'Көөрү',
'edit' => 'Өскертири',
'policy-url' => 'Project:Политика',
'portal' => 'Ниитилелдиң хаалгазы',
'portal-url' => 'Project:Ниитилелдиң хаалгазы',
-'privacy' => 'Актыг бүзүрел дугуржулгазы',
+'privacy' => 'Актыг бүзүрел дугуржулга',
'privacypage' => 'Project:Актыг бүзүрел дугуржулгазы',
'versionrequired' => 'МедиаВикиниң $1 үндүреризи херек',
'notloggedin' => 'Кирбес',
'nologinlink' => 'Бүрүткел бижикти бүдүрери',
'createaccount' => 'Бүрүткел бижикти бүдүрери',
+'gotaccount' => "Силер бүрүтекнип алдыңар де? '''$1'''.",
'gotaccountlink' => 'Кирер',
'createaccountmail' => 'Э-чагаадан',
'createaccountreason' => 'Чылдагаан:',
'link_tip' => 'Иштики холбаа',
'extlink_sample' => 'http://www.example.com холбааның ады',
'extlink_tip' => 'Даштыкы холбаа ("http://" чүве сактып алыр)',
-'headline_sample' => 'Ð\91аÑ\88 адÑ\8bÒ£ сөзүглели',
-'headline_tip' => '2-ги деңнелдиг баÑ\88 ады',
+'headline_sample' => 'Ð\9aÑ\8bÑ\80Ñ\8bкÑ\8b сөзүглели',
+'headline_tip' => '2-ги деңнелдиг кÑ\8bÑ\80Ñ\8bкÑ\8b ады',
'nowiki_sample' => 'Форматтаваан сөзүглелини бээр салыры',
'nowiki_tip' => 'Вики форматтаарын херекке албас',
'image_sample' => 'Чижек.jpg',
The password for this new account can be changed on the ''[[Special:ChangePassword|change password]]'' page upon logging in.",
'newarticle' => '(Чаа)',
'note' => "'''Тайылбыр:'''",
-'previewnote' => "'''Бо чүгле шенеп көөрү-дүр, бижик ам-даа шыгжатынмаан'''",
+'previewnote' => "'''Бо чүгле шенеп көөрү-дүр.'''
+ Бижик ам-даа шыгжатынмаан! [[#editform|→ Continue editing]]",
'editing' => '«$1» деп арынны өскертип турар',
'editingsection' => '«$1» деп арынның салбырын өскертип турар',
'editingcomment' => '«$1» деп арынны өскертип турар (чаа салбыр)',
'templatesused' => 'Бо арында {{PLURAL:$1|Майык|Майыктар}} ажыглаттырган:',
'template-protected' => '(камгалаан)',
'template-semiprotected' => '(четпес камгалаан)',
-'moveddeleted-notice' => 'Бо арын ырадыпкан.
-The deletion and move log for the page are provided below for reference.',
+'permissionserrorstext-withaction' => "Мында «'''$2'''» силерниң эргеңер чок, {{PLURAL:$1|чылдагааны|чылдагааннары}}:",
+'moveddeleted-notice' => 'Бо арын ап каавыткан.
+Адаанда ап каавыткан биле өскээр адаан бижиктер шынзылгазын көргүскен.',
# History pages
'viewpagelogs' => 'Бо арынның журналын көргүзери',
'nohistory' => 'Бо арынның өскерлиишкин төөгүзү чок.',
'currentrev' => 'Амгы үе үндүрери',
+'currentrev-asof' => 'Амгы $1 үениң бижээни',
'revisionasof' => '$1 версиязы',
'previousrevision' => '←Артык эрги үндүрери',
'nextrevision' => 'Артык чаа үндүрери→',
'searcheverything-enable' => 'Шупту аттар делгемнеринден дилээри',
'searchrelated' => 'холбаалыг',
'searchall' => 'шупту',
+'search-nonefound' => 'Айыткан негелдениң түңнели чок',
'powersearch' => 'Advanced search',
'powersearch-ns' => 'Аттар делгемнеринден дилээри:',
'powersearch-toggleall' => 'Шупту',
'nchanges' => '$1 {{PLURAL:$1|өскерлиишкин}}',
'recentchanges' => 'Амгы өскерлиишкиннер',
'recentchanges-legend' => 'Амгы өскерлиишкиннерниң эдиглери',
-'recentchangestext' => 'Бо арында викии эң амгы өскерлиишкиннерни соондан көөрү.',
-'recentchanges-feed-description' => ' Бо агымда викии эң амгы өскерлиишкиннерни соондан көөрү.',
+'recentchangestext' => 'Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.',
+'recentchanges-feed-description' => 'Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.',
'recentchanges-label-newpage' => 'Бо өскерлиишкин чаа арынны чогааткан.',
'recentchanges-label-minor' => 'Бо өскерлиишкин бичии-дир',
'recentchanges-label-unpatrolled' => 'Бо өскерлиишкин истенмейн каан',
# HTTP errors
'http-read-error' => 'HTTP-биле номчуур алдаг.',
+'license' => 'Хоойлужудары:',
'license-header' => 'Хоойлужудары',
# Special:ListFiles
'mostlinkedtemplates' => 'Эң холбаалар майыктар',
'mostcategories' => 'Эңне бөлүктер арыннар',
'mostimages' => 'Эң холбаалар файлдар',
+'prefixindex' => 'Арыннарның эгезиниң аайы-биле айтыкчы',
'shortpages' => 'Чолдак арыннар',
'longpages' => 'Узун арыннар',
'protectedpages' => 'Камгалаган арыннар',
# What links here
'whatlinkshere' => 'Шөлүлгелерни бээр',
'whatlinkshere-page' => 'Арын:',
+'isredirect' => 'шиглидер арын',
+'istemplate' => 'киирткен арыннар',
'isimage' => 'файлдың холбаазы',
'whatlinkshere-prev' => '{{PLURAL:$1|эрткен|эрткен $1}}',
'whatlinkshere-next' => '{{PLURAL:$1|дараазында|дараазында $1}}',
'whatlinkshere-links' => '← холбаалар',
+'whatlinkshere-hideredirs' => '$1-че шиглиглер',
'whatlinkshere-hidelinks' => 'холбааларны $1',
'whatlinkshere-hideimages' => 'Чурумалдың холбааларын $1',
'whatlinkshere-filters' => 'Шүүрлер',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Силерниң ажыглакчы арыныңнар',
'tooltip-pt-mytalk' => 'Силерниң чугаалажыр арыныңар',
-'tooltip-pt-preferences' => 'Силерниң шилилгелери',
+'tooltip-pt-preferences' => 'Силерниң шилилгеңер',
'tooltip-pt-mycontris' => 'Силерниң немелделериңерның даңзызы',
+'tooltip-pt-login' => 'Маңаа системаже киир бүрүткенип болур, ынчалза-даа ол албан эвес.',
'tooltip-pt-logout' => 'Үнери',
'tooltip-ca-talk' => 'Бо арын дугайында чыгаалажыры',
'tooltip-ca-edit' => 'Силер бо арынны өскертип болур. Шыгжаар мурунда чижеглеп көрем.',
+'tooltip-ca-addsection' => 'Чаа салбыр чаяар',
'tooltip-ca-viewsource' => 'Бо арын камгалаттырган.
-Дөзү кодунуу көп болуңар.',
+Дөзү кодун көрүп болур силер.',
'tooltip-ca-history' => 'Арынның мурнуку өскерлиишкиннери',
'tooltip-ca-protect' => 'Бо арынны камгалаары',
'tooltip-ca-delete' => 'Бо арынны ырадыры',
'tooltip-p-logo' => 'Кол Арын',
'tooltip-n-mainpage' => 'Кол Арынны баары',
'tooltip-n-mainpage-description' => 'Кол Арынче кирери',
-'tooltip-n-portal' => 'Төлевилел дыгайында, силер канчап болур, силер кайдан чүвелер дугайында билип кааптар',
+'tooltip-n-portal' => 'Төлевилел дыгайында, чүнү кылып болур силер, кайда чүү чыдарыл',
+'tooltip-n-currentevents' => 'Ам болуп турар таварылгалар даңзызы',
'tooltip-n-recentchanges' => 'Викиниң энир өскерлиишкиннери',
'tooltip-n-randompage' => 'Душ арынны көөрү',
'tooltip-n-help' => 'Төлевилелдиң тайылбыры «{{SITENAME}}»',
+'tooltip-t-recentchangeslinked' => 'Бо арындан шөлүткен өске арыннарның сөөлгү өскерлиишкиннери',
'tooltip-feed-rss' => 'Бо арының РСС медээ агымы',
'tooltip-feed-atom' => 'Бо арының Атом медээ агымы',
'tooltip-t-contributions' => 'Бо ажыглакчының немелделериниң даңзазын көөрү.',
'tooltip-t-upload' => 'Файлдарны киирери',
'tooltip-t-specialpages' => 'Шупту тускай арыннар даңзызы',
'tooltip-t-print' => 'Бо арынның парлаттынар хевири',
+'tooltip-t-permalink' => 'Арынның бо янзы-хевириниң турум шөлүлгези',
'tooltip-ca-nstab-main' => 'Допчы арынын көөрү',
'tooltip-ca-nstab-user' => 'Ажыглакчының арынын көөрү',
'tooltip-ca-nstab-media' => 'Медиа арынын көөрү',
'tooltip-save' => 'Силерниң өскерлиишкиннериңерни шыгжаары',
'tooltip-preview' => 'Шыгжаар мурнунда силерниң өскерлиишкиннерин чижеглеп көрем!',
'tooltip-watch' => 'Силерниң хайгаарал даңзызынга бо арынны немерелээри',
+'tooltip-rollback' => 'Сөөлгү киржикчиниң өскерилгелерин чаңгыс баскаш, ойталаар',
'tooltip-summary' => 'Кысказы-биле бижиңер',
# Attribution
'widthheightpage' => '$1x$2, $3 {{PLURAL:$3|арын}}',
'file-info-size' => '$1 × $2 пиксел, Файл хемчээли: $3, MIME янзызы: $4',
'svg-long-desc' => 'SVG файл, $1 x $2 пиксел, файл хемчээли: $3',
+'show-big-image' => 'Улуг чурук',
'show-big-image-size' => '$1 × $2 пиксел',
# Special:NewFiles
$linkTrail = '/^([a-zа-яёӝӟӥӧӵ“»]+)(.*)$/sDu';
$fallback8bitEncoding = 'windows-1251';
-$separatorTransformTable = array( ',' => ' ', '.' => ',' );
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
$messages = array(
# User preference toggles
'userpage-userdoesnotexist-view' => 'Обліковий запис користувача „$1“ не зареєстровано.',
'blocked-notice-logextract' => 'Цей користувач наразі заблокований.
Останній запис у журналі блокувань такий:',
-'clearyourcache' => "'''Ð\97аÑ\83важеннÑ\8f:''' пÑ\96Ñ\81лÑ\8f збеÑ\80еженнÑ\8f Ð\92и маÑ\94Ñ\82е Ñ\83никнÑ\83Ñ\82и заванÑ\82аженнÑ\8f з кеÑ\88Ñ\83 ваÑ\88ого браузера, щоб побачити зміни.
-* '''Firefox / Safari:''' тримайте ''Shift'', коли натискаєте ''Reload'' або натисніть ''Ctrl-F5'' або ''Ctrl-R'' (''⌘-R'' на Apple Mac)
+'clearyourcache' => "'''Увага:''' Ð\9fÑ\96Ñ\81лÑ\8f збеÑ\80еженнÑ\8f Ñ\81лÑ\96д оÑ\87иÑ\81Ñ\82иÑ\82и кеÑ\88 браузера, щоб побачити зміни.
+* '''Firefox / Safari:''' тримайте ''Shift'', коли натискаєте ''Оновити'', або натисніть ''Ctrl-F5'' чи ''Ctrl-Shift-R'' (''⌘-R'' на Apple Mac)
* '''Google Chrome:''' натисніть ''Ctrl-Shift-R'' (''⌘-Shift-R'' на Apple Mac)
-* '''Internet Explorer:''' тримайте ''Ctrl'', коли натискаєте ''Refresh'' або натисніть ''Ctrl-F5''
-* '''Konqueror:''' натисніть кнопку ''Reload'' або клавішу ''F5''
-* '''Opera:''' очистіть кеш за допомогою ''Tools → Preferences''",
+* '''Internet Explorer:''' тримайте ''Ctrl'', коли натискаєте ''Оновити'' або натисніть ''Ctrl-F5''
+* '''Konqueror:''' натисніть кнопку ''Оновити'' або клавішу ''F5''
+* '''Opera:''' очистіть кеш за допомогою ''Інструменти → Налаштування''",
'usercssyoucanpreview' => "'''Підказка:''' використовуйте кнопку «{{int:showpreview}}», щоб протестувати ваш новий css-файл перед збереженням.",
'userjsyoucanpreview' => "'''Підказка:''' використовуйте кнопку «{{int:showpreview}}», щоб протестувати ваш новий код JavaScript перед збереженням.",
'usercsspreview' => "'''Пам'ятайте, що це лише попередній перегляд вашого css-файлу.'''
Пам'ятайте, що користувацькі .css та .js сторінки повинні мати назву, що складається лише з малих літер, наприклад «{{ns:user}}:Хтось/vector.css», а не «{{ns:user}}:Хтось/Vector.css».",
'updated' => '(Оновлена)',
'note' => "'''Зауваження:'''",
-'previewnote' => "'''Це лиÑ\88е попеÑ\80еднÑ\96й пеÑ\80еглÑ\8fд,
-текст ще не збережений!'''",
+'previewnote' => "'''Ð\9fам'Ñ\8fÑ\82айÑ\82е, Ñ\89о Ñ\86е лиÑ\88е попеÑ\80еднÑ\96й пеÑ\80еглÑ\8fд.'''
+Ваші зміни ще не були збережені! [[#editform|→ Продовжити редагування]]",
'previewconflict' => 'Цей попередній перегляд відображає текст з верхнього вікна редагування так, як він буде виглядіти, якщо ви вирішите зберегти його.',
'session_fail_preview' => "'''Система не може зберегти ваші редагування, оскільки втрачені дані сеансу. Будь ласка, повторіть вашу спробу.
Якщо помилка буде повторюватись, спробуйте [[Special:UserLogout|вийти з системи]] і зайти знову.'''",
'backend-fail-contenttype' => 'Не вдалося визначити тип вмісту файла, щоб зберегти його в "$1".',
'backend-fail-batchsize' => 'Серверна частина отримала блок із $1 {{PLURAL:$1|файлової операції|файлових операцій}}; обмеження складає $2 {{PLURAL:$2|файлову операцію|файлові операції|файлових операцій}}.',
+# File journal errors
'filejournal-fail-dbconnect' => 'Не вдалося підключитися до бази даних журналу для сховища «$1».',
'filejournal-fail-dbquery' => 'Не вдалося оновити базу даних журналу для сховища «$1».',
'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|століття|століття|століть}}',
+'duration-millennia' => '$1 {{PLURAL:$1|тисячоліття|тисячоліття|тисячоліть}}',
+
);
'delete' => 'Čuta poiš',
'deletethispage' => "Čuta nece lehtpol'",
'undelete_short' => "Endištada {{PLURAL:$1|üks' redakcii|$1 redakcijad}}",
+'viewdeleted_short' => 'Kc. {{PLURAL:$1|čutud redakcii|$1 čutud redakcijad}}',
'protect' => 'Kaita',
'protect_change' => 'toižetada',
'protectthispage' => "Kaita nece lehtpol'",
Kändmižen täht om paremb kävutada [//translatewiki.net/wiki/Main_Page?setlang=vep translatewiki.net] - MediaWikin lokalizacijan projekt.",
'sqlhidden' => '(SQL-küzelend om peittud)',
'namespaceprotected' => "Teil ei ole oiktust redaktiruida lehtpolid '''$1'''-nimiavaruses.",
+'customcssprotected' => 'Teil ei ole oiktust redaktiruida nece CSS-lehtpol’, sikš sil oma toižen ühtnijan personaližed järgendused.',
+'customjsprotected' => 'Teil ei ole oiktust redaktiruida nece JavaScript-lehtpol’, sikš sil oma toižen ühtnijan personaližed järgendused.',
'ns-specialprotected' => 'Ei sa redaktiruida specialižid lehtpolid.',
'titleprotected' => '[[User:$1|$1]]-kävutai om kel\'nu mugoižen lehtpolen pälkirjutesen kävutamižen.
Sü om "\'\'$2\'\'".',
'noemailprefs' => 'Kirjutagat e-počtan adres teiden järgendusihe, miše se oliži kävutamas.',
'emailconfirmlink' => 'Vahvištoitkat teiden e-počtan adres',
'invalidemailaddress' => 'Ningomal e-počtan adresal om vär format. Olgat hüväd, kirjutagat e-počtan adres oiktas formatas vai puhtastagat e-počtan pöud.',
+'emaildisabled' => 'Nece sait ei voi oigeta e-počtad.',
'accountcreated' => 'Registracii om OK',
'accountcreatedtext' => 'Registracii $1-kävutajan täht om sätud.',
'createaccount-title' => '{{SITENAME}}: registracijan sädand.',
# Special:PasswordReset
'passwordreset' => 'Peitsanan alustuz',
+'passwordreset-legend' => 'Peitsanan alustuz',
'passwordreset-username' => 'Kävutajan nimi:',
'passwordreset-domain' => 'Domen',
'passwordreset-capture' => 'Ozutada-k loptud kirjeine?',
'passwordreset-emailsent' => 'Muštatai kirjeine oigetihe e-počtadme',
# Special:ChangeEmail
+'changeemail' => 'Toižetada e-počtan adres',
+'changeemail-no-info' => 'Miše kirjutada necil lehtpolel, teile pidab kirjutadas sistemha.',
'changeemail-newemail' => "Uz' e-počtan adres",
+'changeemail-none' => '(ei ole)',
'changeemail-submit' => 'Toižetada e-počtan adres',
'changeemail-cancel' => 'Heitta',
'''Se ei ole völ kirjutadud muštho!'''",
'updated' => '(Udištadud)',
'note' => "'''Homaičend:'''",
-'previewnote' => "'''Muštkat, miše nece om vaiše ezikacund. Teiden toižetused ei olgoi völ kirjutadud!'''",
+'previewnote' => "'''Muštkat, miše nece om vaiše ezikacund.'''
+Teiden toižetused ei olgoi völ kirjutadud! [[#editform|→ jatkta redakrtiruind]]",
'previewconflict' => "Tekst redaktiruindan üläiknas kuvazub neche ezikacundha muga, kut se nägub lopkirjutamižen jäl'ghe.",
'editing' => '$1-lehtpolen redaktiruind',
+'creating' => 'Sätas $1',
'editingsection' => '$1-lehtpolen redaktiruind (jaguz)',
'editingcomment' => "$1-lehtpolen redaktiruind (uz' jaguz)",
'editconflict' => 'Redaktiruindan konflikt: $1',
Tö vahvištoitat mugažo, miše olet toižetusiden avtoran vai olet kopiruinuded tekstad joudjas purtkespäi.
'''ALGAT SIJAKOI LASKMATA AVTORANOIKTUSEL KAITUD MATERIALOID!'''",
-'longpageerror' => "'''Petuz: Teiden tekstan suruz om $1 kb, a lasktud maksimum om $2 kb.'''
+'longpageerror' => "'''Petuz: Teiden tekstan suruz om {{PLURAL:$1|üks' kilobait|$1 kilobaitad}}, a lasktud maksimum om {{PLURAL:$2|üks' kilobait|$2 kilobaitad}}.'''
Ei voi kirjutada muštho.",
'protectedpagewarning' => "'''VARUTUZ: nece lehtpol' om luklostadud, sidä voidas redaktiruida vaiše administratorad.'''
Alemba om anttud jäl'gmäine aiglehtesen kirjutez:",
'edit-no-change' => 'Teiden redakcii ignoriruidihe, sikš miše tekst ei ole toižetadud.',
'edit-already-exists' => "Ei voi säta uz' lehtpol'.
Wikiš om jo mugoi lehtpol'.",
+'defaultmessagetext' => 'Tekst augotižjärgendusen mödhe',
# Parser/template warnings
'expensive-parserfunction-category' => 'Lehtpoled, kudambil kävutadas äjahko resursokahid funkcijoid',
# Diffs
'history-title' => '"$1"-lehtpolen toižetusiden istorii',
'difference' => '(Erod versijoiden keskes)',
+'difference-multipage' => '(Lehtpoliden erinend)',
'lineno' => 'Rivi $1:',
'compareselectedversions' => 'Rindatada valitud versijad',
'showhideselectedversions' => 'Ozutada/peitta valitud versijad',
'prefs-files' => 'Failad',
'prefs-custom-css' => 'Ičeze CSS',
'prefs-custom-js' => 'Ičeze JS',
+'prefs-common-css-js' => 'Ühthižed CSS/JavaScript kaikiden temiden täht:',
'prefs-reset-intro' => "Tö sat kävutada nece lehtpol', miše pördutada teiden järgendused saitan ezijärgendusidennoks.
Necidä tegendad ei sa toižetada.",
'prefs-emailconfirm-label' => 'E-počtan vahvištand:',
'action-delete' => "čuta poiš nece lehtpol'",
'action-deleterevision' => 'čuta poiš nece lehtpolen versii',
'action-deletedhistory' => 'lugeda necen lehtpolen čutud istorijad',
-'action-browsearchive' => 'ectä čutud lehtpolid',
+'action-browsearchive' => 'ectä čutud lehtpoled',
'action-undelete' => 'endištada nece lehtez',
'action-suppressrevision' => 'lugeda da endištada nece lehtpolen peitversii',
'action-suppressionlog' => 'lugeda necidä privatišt aigkirjad',
'rc_categories' => 'Vaiše kategorijoišpäi (erigoitkat znamaižel "|")',
'rc_categories_any' => 'Eraz',
'rc-change-size' => '$1',
+'rc-change-size-new' => "$1 {{PLURAL:$1|bait|baitad}} jäl'ges toižetamišt",
'newsectionsummary' => "/* $1 */ uz' jaguz",
'rc-enhanced-expand' => 'Ozutada detalid (JavaScript)',
'rc-enhanced-hide' => 'Peitta detalid',
+'rc-old-title' => 'Om sätud ezmässai kut "$1"',
# Recent changes linked
'recentchangeslinked' => 'Sidotud toižetused',
'ignorewarning' => 'Ignoriruida varutuz i kirjutada fail muštho',
'ignorewarnings' => 'Ignoriruida kaik varutused',
'minlength1' => "Failan nimehe pidab jätta hot' üks' kirjam.",
+'filename-toolong' => 'Ei sa tehta failannimid surembid mi 240 baitad.',
'badfilename' => 'Failan nimi om vajehtud, sen uz\' nimi om "$1".',
'filetype-badmime' => 'Ei sa jügutoitta "$1"-MIME-tipan failoid.',
'filetype-unwanted-type' => "'''\".\$1\"''' om nevomatoi failan tip.
'emptyfile' => "Teil jügutoittud fail nägub pal'haks.
Voib olda, necen sü om vär failannimen kirjutamine.
Olgat hüväd, kodvgat, todeks-ik tö tahtoit jügutoitta nece fail.",
+'windows-nonascii-filename' => 'Neche vikihe ei sa tehta failannimid specialižiden znamoidenke.',
'fileexists' => "Fail mugoman nimenke om jo olmas, olgat hüväd, kodvgat '''<tt>[[:$1]]</tt>''' ku teil ei ole varmdust, tahtoižit-ik tö toižetada sidä.
[[$1|thumb]]",
'file-exists-duplicate' => 'Nece fail om {{PLURAL:$1|necen failan|neniden failoiden}} dublikat:',
'destfilename' => 'Failan metnimi:',
'upload-maxfilesize' => 'Failan maksimaline suruz: $1',
'upload-description' => 'failan ümbrikirjutand',
+'upload-options' => 'Jügetoitandan opcijad',
'watchthisupload' => 'Kacelta necidä failad',
'upload-success-subj' => 'Jügutoitand lopihe satusekahas',
'upload-failure-subj' => 'Jügutoitandan problem',
# File backend
'backend-fail-backup' => 'Ei voi tehta $1-failan rezervkopijad.',
'backend-fail-notexists' => 'Ei ole mugošt failad: "$1".',
+'backend-fail-alreadyexists' => '$1-fail om jo olmas.',
'backend-fail-copy' => 'Ei voi kopiruida "$1"-failad "$2"-tahoze.',
'backend-fail-move' => 'Ei voi sirta "$1"-failad "$2"-tahoze.',
+'backend-fail-opentemp' => 'Ei voi avaita pordaigašt failad.',
+'backend-fail-writetemp' => 'Ei voi toižetada pordaigašt failad.',
+'backend-fail-closetemp' => 'Ei voi saubata pordaigašt failad.',
'backend-fail-read' => 'Ei voi lugeda "$1"-failad.',
+'backend-fail-create' => 'Ei voi säta "$1"-failad.',
+
+# ZipDirectoryReader
+'zip-wrong-format' => 'Valitud fail ei ole ZIP-fail.',
# Special:UploadStash
'uploadstash' => 'Peittud jügedoitand',
'mostimages' => 'Failad, kudambid kävutadas paksumba',
'mostrevisions' => 'Lehtpoled, kudambid redaktiruidas paksumba',
'prefixindex' => 'Kaik lehtpoled prefiksoidenke',
+'prefixindex-namespace' => 'Kaik lehtpoled prefiksanke (nimiavaruz $1)',
'shortpages' => 'Lühüdad lehtpoled',
'longpages' => "Pit'käd lehtpoled",
'deadendpages' => 'Lehtpoled, kudambid ei kosketagoi toižed lehtpoled',
'allpagessubmit' => 'Tehta',
'allpagesprefix' => 'Ozutada lehtpoled prefiksoidenke:',
'allpages-bad-ns' => '{{SITENAME}}-saital ei ole "$1"-nimiavarust.',
+'allpages-hide-redirects' => 'Peitta läbikosketused',
# Special:Categories
'categories' => 'Kategorijad',
'nowatchlist' => "Teiden kaclendnimikirjutez om pall'az.",
'watchlistanontext' => 'Olgat hüväd, $1, miše lugeda vai redaktiruida teiden kaclendnimikirjutez.',
'watchnologin' => 'Pidab kirjutadas sistemha',
+'addwatch' => 'Ližata kaclendnimikirjuteshe',
'addedwatchtext' => '"[[:$1]]"-lehtpol\' om ližadud teiden [[Special:Watchlist|kaclendnimikirjuteshe]]. Necen lehtpolen (i sidotud lehtpoliden) tulebiš toižetusiš voiškandeb tedištada neciš nimikirjutesespäi; necen polhe kirjutaškatas mugažo [[Special:RecentChanges|uziden toižetusiden lehtpolel]] lihavoitud kirjamil, miše oliži kebnemb homaita.',
'removedwatchtext' => '"[[:$1]]"-lehtpol\' om heittud [[Special:Watchlist|teiden kaclendnimikirjutesespäi]].',
'watch' => 'Pida sil’miš',
'movedarticleprotection' => 'Kaičendan järgendused oma sirtud "[[$2]]"-lehtpolespäi "[[$1]]"-lehtpol\'he.',
'protect-title' => '"$1"-lehtpolen kaičendpindan toižetuz',
'prot_1movedto2' => '[[$1]] om nimitadud [[$2]]-nimel',
+'protect-badnamespace-title' => 'Kaičematoi nimiavaruz',
'protect-legend' => 'Vahvištoitkat kaičendan augotiž',
'protectcomment' => 'Sü:',
'protectexpiry' => 'lopstrok:',
Kc. [[Special:Log/delete|čudandoiden aigkirj]], miše tedištada tantoižiš čudandoiš da endištandoiš.",
'undelete-header' => 'Kc. [[Special:Log/delete|čudendoiden aigkirj]], miše tedištada tantoi čudud lehtpoliš.',
-'undelete-search-box' => 'Ectä čutud lehtpolid',
+'undelete-search-title' => 'Ectä čutud lehtpoled',
+'undelete-search-box' => 'Ectä čutud lehtpoled',
'undelete-search-prefix' => 'Ozutada lehtpoled, kudambad augotase mugomal tekstal:',
'undelete-search-submit' => 'Ectä',
'undelete-cleanup-error' => 'Kävutamatoman "$1"-arhivfailan čudandan petuz.',
# Block/unblock
'block' => 'Kävutajan blokiruind',
+'unblock' => 'Heitta blokiruind ühtnijalpäi',
'blockip' => 'Blokiruida kävutajad',
'blockip-title' => 'Blokiruida kävutajad',
'blockip-legend' => 'Blokiruida kävutajad',
'ipbhidename' => 'Peitta kävutajan nimi redakcijoišpäi da nimikirjutesišpäi',
'ipbwatchuser' => "Kacelta necen kävutajan personališt lehtpol't da lodulehtpol't",
'ipb-change-block' => 'Blokirujda kävutajad udes neniden järgendusidenke',
+'ipb-confirm' => 'Vahvištada blokiruind',
'badipaddress' => 'Vär IP-adres',
'blockipsuccesssub' => 'Blokiruind om tehtud',
'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] om blokiruidud.<br />
'blocklist' => 'Blokiruidud kävutajad',
'ipblocklist' => 'Blokiruidud kävutajad',
'ipblocklist-legend' => 'Löuta blokiruidud kävutajad',
+'blocklist-tempblocks' => 'Peitta pordaigaižed blokiruindad',
'blocklist-timestamp' => 'Dat, aig',
'blocklist-target' => 'Met',
'blocklist-expiry' => 'Lopiše',
# Export
'export' => 'Lehtpoliden eksport',
+'exportall' => 'Eksportiruida kaik lehtpoled',
'exportcuronly' => 'Mülütada vaiše nügüdläine versii täudeta istorijata',
'export-submit' => 'Eksport',
'export-addcattext' => 'Kaiked lehtesed kategorijaspäi:',
# JavaScriptTest
'javascripttest' => 'JavaScriptan kodvmine',
-'javascripttest-disabled' => 'Nece funkcii ei ole kävutamas.',
+'javascripttest-disabled' => 'Nece funkcii ei ole kävutamas neciš vikiš.',
# Tooltip help for the actions
'tooltip-pt-userpage' => "Teiden kävutajan lehtpol'",
'seconds-abbrev' => '$1s',
'minutes-abbrev' => '$1m',
'hours-abbrev' => '$1č',
+'ago' => '$1 tagaz',
# Bad image list
'bad_image_list' => "Formatale pidab olda mugoman:
'exif-gpsdatestamp' => 'GPS-dat',
'exif-gpsdifferential' => 'GPS-differencialine kohenduz',
'exif-keywords' => 'Avadimsanad',
+'exif-worldregiondest' => "Ozutadud mail'man region",
'exif-countrydest' => 'Ozutadud ma',
+'exif-provinceorstatedest' => 'Ozutadud provincii',
'exif-citydest' => 'Ozutadud lidn',
'exif-objectname' => 'Lühüd nimi',
+'exif-specialinstructions' => 'Specialižed instrukcijad',
'exif-headline' => 'Pälkirjutez',
'exif-source' => 'Purde',
'exif-contact' => 'Kontaktinformacii',
'exif-gpsdop-good' => 'Hüvä ($1)',
'exif-objectcycle-a' => 'Vaiše homendesel',
+'exif-objectcycle-p' => 'Vaiše ehtal',
# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
'exif-gpsdirection-t' => 'Todesine oigendamine',
'autosumm-blank' => 'Lehtpolen südäiolend om čutud',
'autosumm-replace' => "Lehtpolen südäiolend om vajehtud '$1'-südäiolendaks",
'autoredircomment' => 'Om läbioigetud [[$1]]-lehtpolele',
-'autosumm-new' => "Om sätud uz' lehtpol', kudamban suruz om '$1'",
+'autosumm-new' => "Om sätud uz' lehtpol', kudamban südäiolend om '$1'",
# Size units
'size-bytes' => '$1 b',
# Suppression log
'suppressionlog' => 'Nhật trình ẩn giấu',
'suppressionlogtext' => 'Dưới đây là danh sách các tác vụ xóa và cấm liên quan đến nội dung mà các quản lý không nhìn thấy.
-Xem [[Special:BlockList|danh sách các IP bị cấm]] để xem danh sách các tác vụ cấm chỉ và cấm thông thường hiện nay.',
+Xem [[Special:BlockList|danh sách cấm]] để xem danh sách các tác vụ cấm chỉ và cấm thông thường hiện nay.',
# History merging
'mergehistory' => 'Trộn lịch sử trang',
'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.',
+# 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”.',
'filejournal-fail-dbquery' => 'Không thể cập nhật cơ sở dữ liệu nhật ký của phía sau lưu trữ “$1”.',
'allpages-bad-ns' => '{{SITENAME}} không có không gian tên “$1”',
'allpages-hide-redirects' => 'Ẩn trang đổi hướng',
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Bạn đang xem phiên bản vùng nhớ đệm của trang này có thể lỗi thời cho tới $1.',
+'cachedspecial-viewing-cached-ts' => 'Bạn đang xem phiên bản vùng nhớ đệm của trang này có thể không đúng thời hoàn toàn.',
+'cachedspecial-refresh-now' => 'Xem phiên bản mới nhất.',
+
# Special:Categories
'categories' => 'Thể loại',
'categoriespagetext' => '{{PLURAL:$1|Thể loại|Các thể loại}} dưới đây có trang hoặc tập tin phương tiện.
'ipb-confirm' => 'Xác nhận cấm',
'badipaddress' => 'Địa chỉ IP không hợp lệ',
'blockipsuccesssub' => 'Cấm thành công',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] đã bị cấm.
-<br />Xem lại những lần cấm tại [[Special:BlockList|danh sách cấm]].',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] đã bị cấm.<br />
+Xem lại những lần cấm tại [[Special:BlockList|danh sách cấm]].',
'ipb-blockingself' => 'Bạn sẽ tự bỏ cấm cho mình! Bạn có chắc chắn muốn làm vậy không?',
'ipb-confirmhideuser' => 'Bạn sẽ cấm người dùng với tùy chọn “ẩn người dùng”. Bạn có chắc chắn muốn dời tên người dùng khỏi tất cả mọi danh sách và nhật trình?',
'ipb-edit-dropdown' => 'Sửa đổi lý do cấm',
'api-error-uploaddisabled' => 'Chức năng tải lên đã bị tắt trên wiki này.',
'api-error-verification-error' => 'Tập tin này có thể bị hỏng hoặc có phần mở rộng sai.',
+# Durations
+'duration-seconds' => '$1 giây',
+'duration-minutes' => '$1 phút',
+'duration-hours' => '$1 giờ',
+'duration-days' => '$1 ngày',
+'duration-weeks' => '$1 tuần',
+'duration-years' => '$1 năm',
+'duration-decades' => '$1 thập niên',
+'duration-centuries' => '$1 thế kỷ',
+'duration-millennia' => '$1 thiên niên kỷ',
+
);
'tog-enotifminoredits' => 'Sedön obe penedi leäktronik igo pö padavotükams pülik',
'tog-enotifrevealaddr' => 'Jonön ladeti leäktronik oba in nunapeneds.',
'tog-shownumberswatching' => 'Jonön numi gebanas galädöl',
-'tog-oldsig' => 'Büologed dispenäda dabinöl:',
+'tog-oldsig' => 'Dispenäd dabinöl:',
'tog-fancysig' => 'Dispenäd balugik (nen yüms lü gebanapad)',
'tog-externaleditor' => 'Gebön nomiko redakömi plödik (te pro jäfüdisevans; paramets patik paneodons su nünöm olik)',
'tog-externaldiff' => 'Gebön nomiko difi plödik (te pro jäfüdisevans; paramets patik paneodons su nünöm olik)',
'savedprefs' => 'Buükams olik pedakipons.',
'timezonelegend' => 'Timatopäd:',
'localtime' => 'Tim topik:',
-'timezoneuseserverdefault' => 'Gebön parametemi kösömik dünanünöma',
+'timezoneuseserverdefault' => 'Gebön parametemi kösömik vüka ($1)',
'timezoneuseoffset' => 'Votik (nunolös difi)',
'timezoneoffset' => 'Näedot¹:',
'servertime' => 'Tim dünanünöma:',
'sourcefilename' => 'Ragivanem rigik:',
'destfilename' => 'Ragivanem nulik:',
'upload-maxfilesize' => 'Ragivagretot gretikün: $1',
+'upload-description' => 'Ragivabepenam',
'watchthisupload' => 'Galädolöd ragivi at',
'filewasdeleted' => 'Ragiv labü nem at büo pelöpükon e poso pemoükon. Kontrololös eli $1 büä olöpükol oni dönu.',
'filename-bad-prefix' => "Nem ragiva fa ol palöpüköl primon me '''\"\$1\"''': nem no bepenöl nomiko pagevöl itjäfidiko fa käms nulädik. Välolös, begö! nemi bepenöl pro ragiv olik.",
'statistics-users-active-desc' => 'Gebans, kels edunons bosi ün {{PLURAL:$1|del lätik|dels lätik $1}}',
'statistics-mostpopular' => 'Pads suvüno palogöls:',
-'disambiguations' => 'Telplänovapads',
+'disambiguations' => 'Pads lü telplänovapads yümöls',
'disambiguationspage' => 'Template:Telplänov',
'disambiguations-text' => "Pads sököl payümons ad '''telplanövapad'''.
Sötons plao payümon lü yeged pötik.<br />
'listusers' => 'Gebanalised',
'listusers-editsonly' => 'Jonön te gebanis keblünöl',
'usereditcount' => '{{PLURAL:$1|redakam|redakams}} $1',
-'usercreated' => 'Pejafon tü $1 tü $2',
+'usercreated' => '{{GENDER:$3|Pejafon}} tü $1 $2',
'newpages' => 'Pads nulik',
'newpages-username' => 'Gebananem:',
'ancientpages' => 'Pads bäldikün',
# Special:Log
'specialloguserlabel' => 'Geban:',
-'speciallogtitlelabel' => 'Tiäd:',
+'speciallogtitlelabel' => 'Lükömöp (tiäd u geban):',
'log' => 'Jenotaliseds',
'all-logs-page' => 'Jenotaliseds valik',
'alllogstext' => 'Kobojonam jenotalisedas gebidik valik in {{SITENAME}}.
'allpagesprefix' => 'Jonolöd padis labü foyümot:',
'allpagesbadtitle' => 'Tiäd pegivöl no lonöfon, u ba labon foyümoti vüpükik u vü-vükik. Mögos i, das labon tonatis u malülis no pedälölis ad penön tiädis.',
'allpages-bad-ns' => '{{SITENAME}} no labon nemaspadi: "$1".',
+'allpages-hide-redirects' => 'Klänädön lüodükömis',
# Special:Categories
'categories' => 'Klads',
'markaspatrolleddiff' => 'Zepön',
'markaspatrolledtext' => 'Zepön padi at',
'markedaspatrolled' => 'Pezepon',
-'markedaspatrolledtext' => 'Fomam pevälöl pezepon.',
+'markedaspatrolledtext' => 'Fomam pevälöl ela "[[:$1]]" pezepon.',
'rcpatroldisabled' => 'Patrul Votükamas Nulik penegebidükon',
'rcpatroldisabledtext' => 'Patrul Votükamas Nulik binon anu negebidik.',
'markedaspatrollederror' => 'No kanon pezepön',
'invalidemailaddress' => 'דער ע-פאסט אדרעס קען נישט אקצעפטירט ווערן ווייל ער שיינט צו האבן אן אומגילטיגן פֿארמאט.
ביטע אריינלייגן א גוט-פארמאטירטן אדרעס אדער ליידיגט אויס דאס פֿעלד.',
'cannotchangeemail' => "מ'קען נישט ענדערן קאנטע ע־פאסט אדרעסן אין דער וויקי.",
+'emaildisabled' => 'דאס וועבזייטל קען נישט שיקן ע־בריוון.',
'accountcreated' => 'די קאָנטע איז באַשאַפֿן',
'accountcreatedtext' => 'די באניצער קאנטע פאר $1 איז באַשאַפֿן געווארן.',
'createaccount-title' => 'קאנטע באשאפֿן אין {{SITENAME}}',
'userinvalidcssjstitle' => "'''ווארענונג:''' סאיז נישטא קיין סקין \"\$1\". גדענקט אז קאסטעם .css און .js בלעטער נוצען לאוער קעיס טיטול, e.g. {{ns:user}}:Foo/vector.css ווי אנדערשט צו {{ns:user}}:Foo/Vector.css.",
'updated' => '(דערהיינטיגט)',
'note' => "'''באמערקונג:'''",
-'previewnote' => "'''דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג, דער אַרטיקל איז דערווייל נאָך נישט געהיט!'''",
+'previewnote' => "'''געדענקט אז דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג.'''
+אייערע ענדערונגען זענען נאָך נישט געהיט! [[#editform|→ ווייטער רעדאקטירן]]",
'previewconflict' => 'די פֿאראויסיגע ווייזונג רעפלעקטירט דעם טעקסט און דער אויבערשטע טעקסט ענדערונג אָפטיילונג וויאזוי דאס וועט אויסזען אויב וועט איר דאס אָפהיטן.',
'session_fail_preview' => "'''אנטשולדיגט! מען האט נישט געקענט פראצעסירן אייער ענדערונג צוליב א פארלוסט פון סעסיע דאטע. ביטע פרובירט נאכאמאל. אויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
'session_fail_preview_html' => "''''''אַנטשולדיקט! מיר קענען נישט פּראָצעסירן אײַער ענדערונג צוליב א פֿאַרלוסט פֿון סעסיע דאַטע.''''''
די ענדערונג איז געווארן אפגעווארפן כדי נישט צו אנמאכן א חורבן אין די טעקסט פונעם בלאט.
דאס געשענט מייסטענס ווען איר נוצט אן אנאניאמער פראקסי סערווער.",
'editing' => 'ענדערן $1',
+'creating' => 'שאפֿן $1',
'editingsection' => 'ענדערט $1 (אפטיילונג)',
'editingcomment' => 'רעדאַקטירן $1 (נײַע אפטיילונג)',
'editconflict' => 'ענדערן קאנפליקט: $1',
'edit-no-change' => "מ'האט איגנארירט אײַער רעדאַקטירונג, ווײַל קיין שום ענדערונג איז נישט געמאַכט צום טעקסט.",
'edit-already-exists' => 'נישט מעגליך צו שאַפֿן נייע בלאט.
ער עקזיסטירט שוין.',
+'defaultmessagetext' => 'גרונטלעכער מעלדונג טעקסט',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''אזהרה:''' דער בלאט אנטהאלט צופיל טייערע פארזירער רופן.
# HTTP errors
'http-invalid-url' => 'אומגילטיג URL: $1',
+'http-request-error' => 'HTTP בקשה דורכגעפאלן צוליב אומבאוואוסטער פעלער.',
'http-read-error' => 'HTTP לייענען גרײַז.',
'http-timed-out' => 'HTTP בקשה אויסגעגאַנגען.',
'http-curl-error' => 'גרײַז בײַם ברענגען URL: $1',
'import-logentry-interwiki' => 'אריבערגעוויקיט $1',
'import-logentry-interwiki-detail' => '$1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}} פֿון $2',
+# JavaScriptTest
+'javascripttest-disabled' => 'די פֿונקציע איז אומאַקטיווירט.',
+'javascripttest-title' => 'דורכפירנדיק $1 בדיקות',
+'javascripttest-pagetext-skins' => 'קלויבט א באניצער־אייבערפלאך מיט וואס דורכצופירן די בדיקות:',
+
# Tooltip help for the actions
'tooltip-pt-userpage' => 'אייער באניצער בלאט',
'tooltip-pt-anonuserpage' => 'באַניצער בלאַט פון דעם IP אַדרעס',
'tooltip-diff' => 'ווײַזן אייערע ענדערונגען צום טעקסט',
'tooltip-compareselectedversions' => 'פארגלײַכם די צוויי ווערסיעס פון דעם בלאט',
'tooltip-watch' => 'לייגט צו דעם בלאט צו אייער אויפֿפאסונג ליסטע',
+'tooltip-watchlistedit-normal-submit' => 'אַראָפנעמען בלעטער',
+'tooltip-watchlistedit-raw-submit' => 'דערהיינטיגן אויפפאסונג ליסטע',
'tooltip-recreate' => 'ווידערשאַפֿן דעם בלאַט כאטש ער איז אַמאל אויסגעמעקט',
'tooltip-upload' => 'הייב אן אויפלאדן',
'tooltip-rollback' => '"צוריקדרייען" דרײט צוריק רעדאַקטירונג(ען) צו דעם בלאַט פֿונעם לעצטן בײַשטײַערער מיט אײן קװעטש',
'confirm_purge_button' => 'אויספֿירן',
'confirm-purge-top' => 'אויסקלארן די קאשעי פון דעם בלאט?',
+# action=watch/unwatch
+'confirm-watch-button' => 'יאָ',
+'confirm-watch-top' => 'צולייגן דעם בלאט צו אייער אויפֿפאסונג ליסטע?',
+'confirm-unwatch-button' => 'יאָ',
+'confirm-unwatch-top' => 'אראפנעמען דעם בלאט פון אייער אויפפאסונג ליסטע?',
+
# Multipage image navigation
'imgmultipageprev' => '→ פֿריערדיגער בלאַט',
'imgmultipagenext' => 'צום קומענדיגן בלאט ←',
* @author PhiLiP
* @author Shinjiman
* @author Shizhao
+ * @author Supaiku
* @author Tommyang
* @author Waihorace
* @author Wilsonmess
'customjsprotected' => '您没有权限编辑此JavaScript页面,因为它包含另一位用户的个人设置。',
'ns-specialprotected' => '您不能编辑特殊页面。',
'titleprotected' => '此标题已被[[User:$1|$1]]保护以防止创建。理由是“$2”。',
-'filereadonlyerror' => '无法修改文件“$1”,因为文件库“$2”处于只读模式。
+'filereadonlyerror' => '无法修改文件“$1”,因为文件库“$2”处于只读模式。
-ç»\99å\87ºç\9a\84ç\90\86ç\94±æ\98¯“$3”。',
+管ç\90\86å\91\98对é\94\81å®\9aå®\83ç»\99å\87ºç\9a\84解é\87\8aæ\98¯ï¼\9a“$3”。',
# Virus scanner
'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
'edit-no-change' => '您的编辑已经略过,因为文字无任何改动。',
'edit-already-exists' => '不可以建立一个新页面。
它已经存在。',
+'defaultmessagetext' => '默认消息文本',
# Parser/template warnings
'expensive-parserfunction-warning' => '警告:这个页面有太多高昂的语法功能调用。
# Suppression log
'suppressionlog' => '监督日志',
-'suppressionlogtext' => '该列表列出对管理员隐藏的删除与封禁。另参见[[Special:BlockList|IP封锁名单]]以查询当前的封禁列表。',
+'suppressionlogtext' => '该列表列出了管理员隐藏的删除与封禁。另参见[[Special:BlockList|封禁列表]]查询当前的封禁列表。',
# History merging
'mergehistory' => '合并页面历史',
'backend-fail-contenttype' => '无法判断文件的内容类型来储存于“$1”。',
'backend-fail-batchsize' => '存储后端被给予了一批$1个文件{{PLURAL:$1|操作|操作}};限值为$2个{{PLURAL:$2|操作|操作}}。',
+# File journal errors
'filejournal-fail-dbconnect' => '无法连接到后端存储的日志数据库“$1”。',
'filejournal-fail-dbquery' => '无法更新后端存储的日志数据库“$1”。',
请参阅在[$2 文件描述页面]以了解其相关信息。',
'sharedupload-desc-here' => '该文件来自于$1,它可能在其它计划项目中被应用。
它在[$2 文件描述页面]那边上的描述于下面显示。',
+'sharedupload-desc-edit' => '此文件是从 $1 和可能由其他维基项目使用。 !N !也许您想在其[ $2 文件描述页面]编辑说明。',
+'sharedupload-desc-create' => '此文件是从 $1 和可能由其他维基项目使用。 !N !也许您想在其[ $2 文件描述页面]编辑说明。',
'filepage-nofile' => '不存在此名称的文件。',
'filepage-nofile-link' => '不存在此名称的文件,但您可以[$1 上传它]。',
'uploadnewversion-linktext' => '上传该文件的新版本',
'listusers-creationsort' => '按建立日期排序',
'usereditcount' => '$1次编辑',
'usercreated' => '$1 $2{{GENDER:$3|创建}}',
-'newpages' => '新页面',
+'newpages' => 'æ\9c\80æ\96°é¡µé\9d¢',
'newpages-username' => '用户名:',
'ancientpages' => '最早页面',
'move' => '移动',
'allpages-bad-ns' => '在{{SITENAME}}中没有一个叫做"$1"的名字空间。',
'allpages-hide-redirects' => '隐藏重定向页',
+# SpecialCachedPage
+'cachedspecial-refresh-now' => '查看最新的。',
+
# Special:Categories
'categories' => '分类',
'categoriespagetext' => '以下的{{PLURAL:$1|分类}}中包含了页面或媒体。
'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|0年|0年}}',
+'duration-centuries' => '$1{{PLURAL:$1|00年|00年}}',
+'duration-millennia' => '$1{{PLURAL:$1|千年|千年}}',
+
);
fj_timestamp varbinary(14) NOT NULL default ''
);
-CREATE INDEX /*i*/fj_batch_id ON /*_*/filejournal (fj_batch_uuid,fj_id);
+CREATE INDEX /*i*/fj_batch_id ON /*_*/filejournal (fj_batch_uuid);
CREATE INDEX /*i*/fj_timestamp ON /*_*/filejournal (fj_timestamp);
'version-summary',
'tags-summary',
'comparepages-summary',
+ 'version-entrypoints-index-php',
+ 'version-entrypoints-api-php',
+ 'version-entrypoints-load-php',
);
/** Optional messages, which may be translated only if changed in the target language. */
'metadata-langitem',
'metadata-langitem-default',
'nocookiesforlogin',
+ 'version-entrypoints-articlepath',
+ 'version-entrypoints-scriptpath',
);
/** EXIF messages, which may be set as optional in several checks, but are generally mandatory */
'allpages-bad-ns',
'allpages-hide-redirects',
),
+ 'cachedspecial' => array(
+ 'cachedspecial-viewing-cached-ttl',
+ 'cachedspecial-viewing-cached-ts',
+ 'cachedspecial-refresh-now',
+ ),
'categories' => array(
'categories',
'categories-summary',
'version-software',
'version-software-product',
'version-software-version',
+ 'version-entrypoints',
+ 'version-entrypoints-header-entrypoint',
+ 'version-entrypoints-header-url',
+ 'version-entrypoints-articlepath',
+ 'version-entrypoints-scriptpath',
+ 'version-entrypoints-index-php',
+ 'version-entrypoints-api-php',
+ 'version-entrypoints-load-php',
),
'filepath' => array(
'filepath',
'api-error-uploaddisabled',
'api-error-verification-error',
),
+ 'duration' => array(
+ 'duration-seconds',
+ 'duration-minutes',
+ 'duration-hours',
+ 'duration-days',
+ 'duration-weeks',
+ 'duration-years',
+ 'duration-decades',
+ 'duration-centuries',
+ 'duration-millennia'
+ ),
);
/** Comments for each block */
'logging-irc' => 'For IRC, see bug 34508. Do not change',
'feedback' => 'Feedback',
'apierrors' => 'API errors',
+ 'duration' => 'Durations',
+ 'cachedspecial' => 'SpecialCachedPage',
);
* @param bool $removeUnknown Remove the unknown messages?
* @param bool $removeDupes Remove the duplicated messages?
* @param $dupeMsgSource string The source file intended to remove from the array.
+ * @param $messagesFolder String: path to a folder to store the MediaWiki messages.
*/
-function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource ) {
+function rebuildLanguage( $languages, $code, $write, $listUnknown, $removeUnknown, $removeDupes, $dupeMsgSource, $messagesFolder ) {
$messages = $languages->getMessages( $code );
$messages = $messages['all'];
if ( $removeDupes ) {
$messages = removeDupes( $messages, $dupeMsgSource );
}
- MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown );
+ MessageWriter::writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder );
}
/**
* no-unknown: Do not list the unknown messages.
* remove-unknown: Remove unknown messages.
* remove-duplicates: Remove duplicated messages based on a PHP source file.
+ * messages-folder: An alternative folder with MediaWiki messages.
TEXT;
exit( 1 );
$wgListUnknownMessages = !isset( $options['no-unknown'] );
$wgRemoveUnknownMessages = isset( $options['remove-unknown'] );
$wgRemoveDuplicateMessages = isset( $options['remove-duplicates'] );
+$messagesFolder = isset( $options['messages-folder'] ) ? $options['messages-folder'] : false;
# Get language objects
$languages = new languages();
# Write all the language
if ( $wgCode == 'all' ) {
foreach ( $languages->getLanguages() as $languageCode ) {
- rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource );
+ rebuildLanguage( $languages, $languageCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
}
} else {
- rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource );
+ rebuildLanguage( $languages, $wgCode, $wgWriteToFile, $wgListUnknownMessages, $wgRemoveUnknownMessages, $wgRemoveDuplicateMessages, $wgDupeMessageSource, $messagesFolder );
}
* @param $write Boolean: write to the messages file?
* @param $listUnknown Boolean: list the unknown messages?
* @param $removeUnknown Boolean: whether to remove unkown messages
+ * @param $messagesFolder String: path to a folder to store the MediaWiki messages. Defaults to the current install.
*/
- public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown ) {
+ public static function writeMessagesToFile( $messages, $code, $write, $listUnknown, $removeUnknown, $messagesFolder = false ) {
# Rewrite the messages array
$messages = self::writeMessagesArray( $messages, $code == 'en', false, $removeUnknown );
$messagesText = $messages[0];
$sortedMessages = $messages[1];
# Write to the file
- $filename = Language::getMessagesFileName( $code );
- $contents = file_get_contents( $filename );
+ if ( $messagesFolder )
+ $filename = Language::getFileName( "$messagesFolder/Messages", $code );
+ else
+ $filename = Language::getMessagesFileName( $code );
+
+ if ( file_exists( $filename ) )
+ $contents = file_get_contents( $filename );
+ else
+ $contents = '<?php
+$messages = array(
+);
+';
+
if( strpos( $contents, '$messages' ) !== false ) {
$contents = explode( '$messages', $contents );
if( $messagesText == '$messages' . $contents[1] ) {
define( 'MW_NO_EXTENSION_MESSAGES', 1 );
require_once( dirname( __FILE__ ) . '/Maintenance.php' );
-
+$maintClass = 'MergeMessageFileList';
+$mmfl = false;
class MergeMessageFileList extends Maintenance {
function __construct() {
}
public function execute() {
+ global $mmfl;
+
$lines = file( $this->getOption( 'list-file' ) );
if ( $lines === false ) {
$this->error( 'Unable to open list file.' );
if ( $this->hasOption( 'output' ) ) {
$mmfl['output'] = $this->getOption( 'output' );
}
+ }
+}
- global $IP, $wgExtensionMessagesFiles;
- foreach ( $mmfl['setupFiles'] as $fileName ) {
- if ( strval( $fileName ) === '' ) {
- continue;
- }
- $fileName = str_replace( '$IP', $IP, $fileName );
- fwrite( STDERR, "Loading data from $fileName\n" );
- include_once( $fileName );
- }
- fwrite( STDERR, "\n" );
- $s =
- "<" . "?php\n" .
- "## This file is generated by mergeMessageFileList.php. Do not edit it directly.\n\n" .
- "if ( defined( 'MW_NO_EXTENSION_MESSAGES' ) ) return;\n\n" .
- '$wgExtensionMessagesFiles = ' . var_export( $wgExtensionMessagesFiles, true ) . ";\n";
+require_once( RUN_MAINTENANCE_IF_MAIN );
+
+foreach ( $mmfl['setupFiles'] as $fileName ) {
+ if ( strval( $fileName ) === '' ) {
+ continue;
+ }
+ $fileName = str_replace( '$IP', $IP, $fileName );
+ fwrite( STDERR, "Loading data from $fileName\n" );
+ include_once( $fileName );
+}
+fwrite( STDERR, "\n" );
+$s =
+ "<" . "?php\n" .
+ "## This file is generated by mergeMessageFileList.php. Do not edit it directly.\n\n" .
+ "if ( defined( 'MW_NO_EXTENSION_MESSAGES' ) ) return;\n\n" .
+ '$wgExtensionMessagesFiles = ' . var_export( $wgExtensionMessagesFiles, true ) . ";\n\n";
- $dirs = array(
- $IP,
- dirname( dirname( __FILE__ ) ),
- realpath( $IP )
- );
+$dirs = array(
+ $IP,
+ dirname( dirname( __FILE__ ) ),
+ realpath( $IP )
+);
- foreach ( $dirs as $dir ) {
- $s = preg_replace(
- "/'" . preg_quote( $dir, '/' ) . "([^']*)'/",
- '"$IP\1"',
- $s );
- }
+foreach ( $dirs as $dir ) {
+ $s = preg_replace(
+ "/'" . preg_quote( $dir, '/' ) . "([^']*)'/",
+ '"$IP\1"',
+ $s );
+}
- if ( isset( $mmfl['output'] ) ) {
- file_put_contents( $mmfl['output'], $s );
- } else {
- echo $s;
- }
- }
+if ( isset( $mmfl['output'] ) ) {
+ file_put_contents( $mmfl['output'], $s );
+} else {
+ echo $s;
}
-$maintClass = 'MergeMessageFileList';
-require_once( RUN_MAINTENANCE_IF_MAIN );
);
CREATE UNIQUE INDEX eu_external_id ON external_user (eu_external_id);
-
-CREATE TABLE external_user (
- eu_local_id INTEGER NOT NULL PRIMARY KEY,
- eu_external_id TEXT
-);
-
-CREATE UNIQUE INDEX eu_external_id ON external_user (eu_external_id);
-
function addInlineCSS( css ) {
var $style, style, $newStyle;
$style = getMarker().prev();
- if ( $style.is( 'style' ) && $style.data( 'ResourceLoaderDynamicStyleTag' ) === true ) {
+ // Disable <style> tag recycling/concatenation because of bug 34669
+ if ( false && $style.is( 'style' ) && $style.data( 'ResourceLoaderDynamicStyleTag' ) === true ) {
// There's already a dynamic <style> tag present, append to it. This recycling of
// <style> tags is for bug 31676 (can't have more than 32 <style> tags in IE)
style = $style.get( 0 );
* generally useful beyond startup
*
* jQuery has minimum requirements of:
- * * Firefox 2.0+
- * * Internet Explorer 6+
- * * Safari 3+
- * * Opera 9+
- * * Chrome 1+
+ * * Internet Explorer 6.0+
+ * * Firefox 3.6+
+ * * Safari 5.0+
+ * * Opera 11+
+ * * Chrome
*/
-var isCompatible = function() {
- // IE < 6
+function isCompatible() {
+ // IE < 6.0
if ( navigator.appVersion.indexOf( 'MSIE' ) !== -1
&& parseFloat( navigator.appVersion.split( 'MSIE' )[1] ) < 6 )
{
return false;
}
- // TODO: Firefox < 2
- // TODO: Safari < 3
- // TODO: Opera < 9
- // TODO: Chrome < 1
+ // @todo FIXME: Firefox < 3.6
+ // @todo FIXME: Safari < 5.0
+ // @todo FIXME: Opera < 11
return true;
-};
+}
/**
* The startUp() function will be generated and added here (at the bottom)
*/
//includes
'BlockTest' => "$testFolder/phpunit/includes/BlockTest.php",
+ 'MockOutputPage' => "$testFolder/phpunit/includes/MockOutputPage.php",
//API
'ApiFormatTestBase' => "$testFolder/phpunit/includes/api/format/ApiFormatTestBase.php",
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
- <title>Jasmine Test Runner</title>
- <link rel="stylesheet" type="text/css" href="lib/jasmine-1.0.1/jasmine.css">
- <script type="text/javascript" src="lib/jasmine-1.0.1/jasmine.js"></script>
- <script type="text/javascript" src="lib/jasmine-1.0.1/jasmine-html.js"></script>
+<!DOCTYPE html>
+<html lang="en" dir="ltr">
+ <head>
+ <title>Jasmine Test Runner</title>
+ <meta charset="UTF-8" />
+ <link rel="stylesheet" type="text/css" href="lib/jasmine-1.0.1/jasmine.css">
+ <script src="lib/jasmine-1.0.1/jasmine.js"></script>
+ <script src="lib/jasmine-1.0.1/jasmine-html.js"></script>
- <!-- include source files here... -->
- <script type="text/javascript" src="../../load.php?debug=true&lang=en&modules=jquery%7Cmediawiki&only=scripts&skin=vector"></script>
-
- <script type="text/javascript" src="../../resources/mediawiki/mediawiki.js"></script>
+ <!-- include source files here... -->
+ <script src="../../load.php?debug=true&lang=en&modules=startup&only=scripts&skin=vector&*"></script>
+ <script>
+ mw.loader.load( ['mediawiki.jqueryMsg'] );
+ </script>
- <script type="text/javascript" src="../../resources/mediawiki.language/mediawiki.language.js"></script>
- <script type="text/javascript" src="../../resources/mediawiki/mediawiki.jqueryMsg.js"></script>
- <script type="text/javascript" src="../../resources/mediawiki/mediawiki.Uri.js"></script>
-<!--
- <script type="text/javascript" src="../../resources/mediawiki/mediawiki.api.js"></script>
- <script type="text/javascript" src="../../resources/mediawiki/mediawiki.api.edit.js"></script>
--->
+ <!-- insert test data files here -->
+ <script src="spec/mediawiki.jqueryMsg.spec.data.js"></script>
- <!-- insert test data files here -->
- <script type="text/javascript" src="spec/mediawiki.jqueryMsg.spec.data.js"></script>
-
- <!-- include spec files here... -->
- <script type="text/javascript" src="spec/mediawiki.Uri.spec.js"></script>
- <!--
- <script type="text/javascript" src="spec/mw.Api.spec.js"></script>
- <script type="text/javascript" src="spec/mw.Api.edit.spec.js"></script>
- -->
- <script type="text/javascript" src="spec/mediawiki.jqueryMsg.spec.js"></script>
-
-</head>
+ <!-- include spec files here... -->
+ <script src="spec/mediawiki.jqueryMsg.spec.js"></script>
+ </head>
<body>
-<script type="text/javascript">
- jasmine.getEnv().addReporter( new jasmine.TrivialReporter() );
- jasmine.getEnv().execute();
-</script>
-
+ <script>
+ jasmine.getEnv().addReporter( new jasmine.TrivialReporter() );
+ jasmine.getEnv().execute();
+ </script>
</body>
</html>
+++ /dev/null
-( function() {
-
- // ensure we have a generic URI parser if not running in a browser
- if ( !mw.Uri ) {
- mw.Uri = mw.UriRelative( 'http://example.com/' );
- }
-
- describe( "mw.Uri", function() {
-
- describe( "should work well in loose and strict mode", function() {
-
- function basicTests( strict ) {
-
- describe( "should parse a simple HTTP URI correctly", function() {
-
- var uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
- var uri;
- if ( strict ) {
- uri = new mw.Uri( uriString, strict );
- } else {
- uri = new mw.Uri( uriString );
- }
-
- it( "should have basic object properties", function() {
- expect( uri.protocol ).toEqual( 'http' );
- expect( uri.host ).toEqual( 'www.ietf.org' );
- expect( uri.port ).not.toBeDefined();
- expect( uri.path ).toEqual( '/rfc/rfc2396.txt' );
- expect( uri.query ).toEqual( {} );
- expect( uri.fragment ).not.toBeDefined();
- } );
-
- describe( "should construct composite components of URI on request", function() {
- it( "should have empty userinfo", function() {
- expect( uri.getUserInfo() ).toEqual( '' );
- } );
-
- it( "should have authority equal to host", function() {
- expect( uri.getAuthority() ).toEqual( 'www.ietf.org' );
- } );
-
- it( "should have hostport equal to host", function() {
- expect( uri.getHostPort() ).toEqual( 'www.ietf.org' );
- } );
-
- it( "should have empty string as query string", function() {
- expect( uri.getQueryString() ).toEqual( '' );
- } );
-
- it( "should have path as relative path", function() {
- expect( uri.getRelativePath() ).toEqual( '/rfc/rfc2396.txt' );
- } );
-
- it( "should return a uri string equivalent to original", function() {
- expect( uri.toString() ).toEqual( uriString );
- } );
- } );
- } );
- }
-
- describe( "should work in loose mode", function() {
- basicTests( false );
- } );
-
- describe( "should work in strict mode", function() {
- basicTests( true );
- } );
-
- } );
-
- it( "should parse a simple ftp URI correctly with user and password", function() {
- var uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
- expect( uri.protocol ).toEqual( 'ftp' );
- expect( uri.user ).toEqual( 'usr' );
- expect( uri.password ).toEqual( 'pwd' );
- expect( uri.host ).toEqual( '192.0.2.16' );
- expect( uri.port ).not.toBeDefined();
- expect( uri.path ).toEqual( '/' );
- expect( uri.query ).toEqual( {} );
- expect( uri.fragment ).not.toBeDefined();
- } );
-
- it( "should parse a simple querystring", function() {
- var uri = new mw.Uri( 'http://www.google.com/?q=uri' );
- expect( uri.protocol ).toEqual( 'http' );
- expect( uri.host ).toEqual( 'www.google.com' );
- expect( uri.port ).not.toBeDefined();
- expect( uri.path ).toEqual( '/' );
- expect( uri.query ).toBeDefined();
- expect( uri.query ).toEqual( { q: 'uri' } );
- expect( uri.fragment ).not.toBeDefined();
- expect( uri.getQueryString() ).toEqual( 'q=uri' );
- } );
-
- describe( "should handle multiple value query args (overrideKeys on)", function() {
- var uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', { overrideKeys: true } );
- it ( "should parse with multiple values", function() {
- expect( uri.query.m ).toEqual( 'bar' );
- expect( uri.query.n ).toEqual( '1' );
- } );
- it ( "should accept multiple values", function() {
- uri.query.n = [ "x", "y", "z" ];
- expect( uri.toString() ).toContain( 'm=bar' );
- expect( uri.toString() ).toContain( 'n=x&n=y&n=z' );
- expect( uri.toString().length ).toEqual( 'http://www.example.com/dir/?m=bar&n=x&n=y&n=z'.length );
- } );
- } );
-
- describe( "should handle multiple value query args (overrideKeys off)", function() {
- var uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', { overrideKeys: false } );
- it ( "should parse with multiple values", function() {
- expect( uri.query.m.length ).toEqual( 2 );
- expect( uri.query.m[0] ).toEqual( 'foo' );
- expect( uri.query.m[1] ).toEqual( 'bar' );
- expect( uri.query.n ).toEqual( '1' );
- } );
- it ( "should accept multiple values", function() {
- uri.query.n = [ "x", "y", "z" ];
- expect( uri.toString() ).toContain( 'm=foo&m=bar' );
- expect( uri.toString() ).toContain( 'n=x&n=y&n=z' );
- expect( uri.toString().length ).toEqual( 'http://www.example.com/dir/?m=foo&m=bar&n=x&n=y&n=z'.length );
- } );
- it ( "should be okay with removing values", function() {
- uri.query.m.splice( 0, 1 );
- delete uri.query.n;
- expect( uri.toString() ).toEqual( 'http://www.example.com/dir/?m=bar' );
- uri.query.m.splice( 0, 1 );
- expect( uri.toString() ).toEqual( 'http://www.example.com/dir/' );
- } );
- } );
-
- describe( "should deal with an all-dressed URI with everything", function() {
- var uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top' );
-
- it( "should have basic object properties", function() {
- expect( uri.protocol ).toEqual( 'http' );
- expect( uri.user ).toEqual( 'auth' );
- expect( uri.password ).not.toBeDefined();
- expect( uri.host ).toEqual( 'www.example.com' );
- expect( uri.port ).toEqual( '81' );
- expect( uri.path ).toEqual( '/dir/dir.2/index.htm' );
- expect( uri.query ).toEqual( { q1: '0', test1: null, test2: 'value (escaped)' } );
- expect( uri.fragment ).toEqual( 'top' );
- } );
-
- describe( "should construct composite components of URI on request", function() {
- it( "should have userinfo", function() {
- expect( uri.getUserInfo() ).toEqual( 'auth' );
- } );
-
- it( "should have authority equal to auth@hostport", function() {
- expect( uri.getAuthority() ).toEqual( 'auth@www.example.com:81' );
- } );
-
- it( "should have hostport equal to host:port", function() {
- expect( uri.getHostPort() ).toEqual( 'www.example.com:81' );
- } );
-
- it( "should have query string which contains all components", function() {
- var queryString = uri.getQueryString();
- expect( queryString ).toContain( 'q1=0' );
- expect( queryString ).toContain( 'test1' );
- expect( queryString ).not.toContain( 'test1=' );
- expect( queryString ).toContain( 'test2=value+%28escaped%29' );
- } );
-
- it( "should have path as relative path", function() {
- expect( uri.getRelativePath() ).toContain( uri.path );
- expect( uri.getRelativePath() ).toContain( uri.getQueryString() );
- expect( uri.getRelativePath() ).toContain( uri.fragment );
- } );
-
- } );
- } );
-
- describe( "should be able to clone itself", function() {
- var original = new mw.Uri( 'http://en.wiki.local/w/api.php?action=query&foo=bar' );
- var clone = original.clone();
-
- it( "should make clones equivalent", function() {
- expect( original ).toEqual( clone );
- expect( original.toString() ).toEqual( clone.toString() );
- } );
-
- it( "should be able to manipulate clones independently", function() {
- // but they are still different objects
- expect( original ).not.toBe( clone );
- // and can diverge
- clone.host = 'fr.wiki.local';
- expect( original.host ).not.toEqual( clone.host );
- expect( original.toString() ).not.toEqual( clone.toString() );
- } );
- } );
-
- describe( "should be able to construct URL from object", function() {
- it ( "should construct given basic arguments", function() {
- var uri = new mw.Uri( { protocol: 'http', host: 'www.foo.local', path: '/this' } );
- expect( uri.toString() ).toEqual( 'http://www.foo.local/this' );
- } );
-
- it ( "should construct given more complex arguments", function() {
- var uri = new mw.Uri( {
- protocol: 'http',
- host: 'www.foo.local',
- path: '/this',
- query: { hi: 'there' },
- fragment: 'blah'
- } );
- expect( uri.toString() ).toEqual( 'http://www.foo.local/this?hi=there#blah' );
- } );
-
- it ( "should fail to construct without required properties", function() {
- expect( function() {
- var uri = new mw.Uri( { protocol: 'http', host: 'www.foo.local' } );
- } ).toThrow( "Bad constructor arguments" );
- } );
- } );
-
- describe( "should be able to manipulate properties", function() {
- var uri;
-
- beforeEach( function() {
- uri = new mw.Uri( 'http://en.wiki.local/w/api.php' );
- } );
-
- it( "can add a fragment", function() {
- uri.fragment = 'frag';
- expect( uri.toString() ).toEqual( 'http://en.wiki.local/w/api.php#frag' );
- } );
-
- it( "can change host and port", function() {
- uri.host = 'fr.wiki.local';
- uri.port = '8080';
- expect( uri.toString() ).toEqual( 'http://fr.wiki.local:8080/w/api.php' );
- } );
-
- it ( "can add query arguments", function() {
- uri.query.foo = 'bar';
- expect( uri.toString() ).toEqual( 'http://en.wiki.local/w/api.php?foo=bar' );
- } );
-
- it ( "can extend query arguments", function() {
- uri.query.foo = 'bar';
- expect( uri.toString() ).toEqual( 'http://en.wiki.local/w/api.php?foo=bar' );
- uri.extend( { foo: 'quux', pif: 'paf' } );
- expect( uri.toString() ).toContain( 'foo=quux' );
- expect( uri.toString() ).not.toContain( 'foo=bar' );
- expect( uri.toString() ).toContain( 'pif=paf' );
- } );
-
- it ( "can remove query arguments", function() {
- uri.query.foo = 'bar';
- expect( uri.toString() ).toEqual( 'http://en.wiki.local/w/api.php?foo=bar' );
- delete( uri.query.foo );
- expect( uri.toString() ).toEqual( 'http://en.wiki.local/w/api.php' );
- } );
-
- } );
-
- describe( "should handle protocol-relative URLs", function() {
- var uriRel = mw.UriRelative( 'glork://en.wiki.local/foo.php' );
-
- it ( "should create protocol-relative URLs with same protocol as document", function() {
- var uri = new uriRel( '//en.wiki.local/w/api.php' );
- expect( uri.protocol ).toEqual( 'glork' );
- } );
-
- it( "should handle absolute paths by supplying protocol and host from document in loose mode", function() {
- var uri = new uriRel( '/foo.com' );
- expect( uri.toString() ).toEqual( 'glork://en.wiki.local/foo.com' );
- } );
-
- it( "should handle absolute paths by supplying host from document in loose mode", function() {
- var uri = new uriRel( 'http:/foo.com' );
- expect( uri.toString() ).toEqual( 'http://en.wiki.local/foo.com' );
- } );
-
- it( "should handle absolute paths by supplying protocol and host from document in strict mode", function() {
- var uri = new uriRel( '/foo.com', true );
- expect( uri.toString() ).toEqual( 'glork://en.wiki.local/foo.com' );
- } );
-
- it( "should handle absolute paths by supplying host from document in strict mode", function() {
- var uri = new uriRel( 'http:/foo.com', true );
- expect( uri.toString() ).toEqual( 'http://en.wiki.local/foo.com' );
- } );
- } );
-
- it( "should throw error on no arguments to constructor", function() {
- expect( function() {
- var uri = new mw.Uri();
- } ).toThrow( "Bad constructor arguments" );
- } );
-
- it( "should throw error on empty string as argument to constructor", function() {
- expect( function() {
- var uri = new mw.Uri( '' );
- } ).toThrow( "Bad constructor arguments" );
- } );
-
- it( "should throw error on non-URI as argument to constructor", function() {
- expect( function() {
- var uri = new mw.Uri( 'glaswegian penguins' );
- } ).toThrow( "Bad constructor arguments" );
- } );
-
- it( "should throw error on URI without protocol or // or leading / in strict mode", function() {
- expect( function() {
- var uri = new mw.Uri( 'foo.com/bar/baz', true );
- } ).toThrow( "Bad constructor arguments" );
- } );
-
- it( "should normalize URI without protocol or // in loose mode", function() {
- var uri = new mw.Uri( 'foo.com/bar/baz', false );
- expect( uri.toString() ).toEqual( 'http://foo.com/bar/baz' );
- } );
-
- } );
-
-} )();
* [[File:Bad.jpg]] except [[Nasty page]]
!!endarticle
+!! article
+Template:inner list
+!! text
+* item 1
+!! endarticle
+
###
### Basic tests
###
!! end
+!! test
+List items from template
+!! input
+
+{{inner list}}
+* item 2
+
+* item 0
+{{inner list}}
+* item 2
+
+* item 0
+* notSOL{{inner list}}
+* item 2
+!! result
+<ul><li> item 1
+</li><li> item 2
+</li></ul>
+<ul><li> item 0
+</li><li> item 1
+</li><li> item 2
+</li></ul>
+<ul><li> item 0
+</li><li> notSOL
+</li><li> item 1
+</li><li> item 2
+</li></ul>
+
+!! end
+
###
### Magic Words
###
!! end
+!!test
+Gallery override link with WikiLink (bug 34852)
+!! input
+<gallery>
+File:foobar.jpg|caption|alt=galleryalt|link=InterWikiLink
+</gallery>
+!! result
+<ul class="gallery">
+ <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/InterWikiLink"><img alt="galleryalt" src="http://example.com/images/3/3a/Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="gallerytext">
+<p>caption
+</p>
+ </div>
+ </div></li>
+</ul>
+
+!! end
+
+!!test
+Gallery override link with absolute external link (bug 34852)
+!! input
+<gallery>
+File:foobar.jpg|caption|alt=galleryalt|link=http://www.example.org
+</gallery>
+!! result
+<ul class="gallery">
+ <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="http://www.example.org"><img alt="galleryalt" src="http://example.com/images/3/3a/Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="gallerytext">
+<p>caption
+</p>
+ </div>
+ </div></li>
+</ul>
+
+!! end
+
+!!test
+Gallery override link with malicious javascript (bug 34852)
+!! input
+<gallery>
+File:foobar.jpg|caption|alt=galleryalt|link=" onclick="alert('malicious javascript code!');
+</gallery>
+!! result
+<ul class="gallery">
+ <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+ <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/%22_onclick%3D%22alert(%27malicious_javascript_code!%27);"><img alt="galleryalt" src="http://example.com/images/3/3a/Foobar.jpg" width="120" height="14" /></a></div></div>
+ <div class="gallerytext">
+<p>caption
+</p>
+ </div>
+ </div></li>
+</ul>
+
+!! end
+
TODO:
more images
more tables
/* TODO: many more! */
}
-
-class MockOutputPage {
-
- public $message;
-
- function debug( $message ) {
- $this->message = "JAJA is a stupid error message. Anyway, here's your message: $message";
- }
-}
-
--- /dev/null
+<?php
+
+class MockOutputPage {
+
+ public $message;
+
+ function debug( $message ) {
+ $this->message = "JAJA is a stupid error message. Anyway, here's your message: $message";
+ }
+}
$titleA = Title::newFromText( $titleA );
$titleB = Title::newFromText( $titleB );
- $this->assertEquals( $titleA->equals( $titleB ), $expectedBool );
- $this->assertEquals( $titleB->equals( $titleA ), $expectedBool );
+ $this->assertEquals( $expectedBool, $titleA->equals( $titleB ) );
+ $this->assertEquals( $expectedBool, $titleB->equals( $titleA ) );
}
public function dataInNamespace() {
*/
public function testHasSubjectNamespace( $title, $ns, $expectedBool ) {
$title = Title::newFromText( $title );
- $this->assertEquals( $title->hasSubjectNamespace( $ns ), $expectedBool );
+ $this->assertEquals( $expectedBool, $title->hasSubjectNamespace( $ns ) );
}
}
foreach ( $wgFileBackends as $conf ) {
if ( $conf['name'] == $name ) {
$useConfig = $conf;
+ break;
}
}
$useConfig['name'] = 'localtesting'; // swap name
- $class = $conf['class'];
+ $class = $useConfig['class'];
self::$backendToUse = new $class( $useConfig );
$this->singleBackend = self::$backendToUse;
}
$size = $this->backend->getFileSize( array( 'src' => $path ) );
$time = $this->backend->getFileTimestamp( array( 'src' => $path ) );
$stat = $this->backend->getFileStat( array( 'src' => $path ) );
-
+
$this->assertFalse( $size, "Correct file size of '$path'" );
$this->assertFalse( $time, "Correct file timestamp of '$path'" );
$this->assertFalse( $stat, "Correct file stat of '$path'" );
$this->file = $filename;
}
- /** @dataProvider parserTestProvider */
+ /**
+ * @group medium
+ * @dataProvider parserTestProvider
+ */
public function testParserTest( $desc, $input, $result, $opts, $config ) {
if ( $this->regex != '' && !preg_match( '/' . $this->regex . '/', $desc ) ) {
$this->assertTrue( true ); // XXX: don't flood output with "test made no assertions"
--- /dev/null
+<?php
+/**
+ * @medium
+ */
+class LanguageDocumentationTest extends MediaWikiTestCase {
+
+ protected static $keys;
+
+ static function setUpBeforeClass() {
+ self::$keys = array(
+ 'qqq' => Language::getMessageKeysFor( 'qqq' ),
+ 'en' => Language::getMessageKeysFor( 'en' ),
+ );
+
+ global $IP, $wgMessageStructure;
+ if( !isset( $wgMessageStructure ) ) {
+ require_once( $IP . '/maintenance/language/messages.inc' );
+ }
+
+ foreach( $wgMessageStructure as $block ) {
+ foreach( $block as $key ) {
+ self::$keys['messages.inc'][] = $key;
+ }
+ }
+ }
+
+ /**
+ * Compares en against qqq, make sure all messages are documented
+ */
+ function testAllEnglishMessagesAreDocumentedInQqq() {
+ $delta = array_diff( self::$keys['en'], self::$keys['qqq'] );
+ $this->assertEmpty( $delta,
+ 'All English messages should be documented in qqq'
+ );
+ }
+ /**
+ * Compares qqq against en, make sure qqq does not document removed messages
+ */
+ function testQqqDocumentsExistingMessages() {
+ $delta = array_diff( self::$keys['qqq'], self::$keys['en'] );
+ $this->assertEmpty( $delta,
+ 'Qqq should only documents existing English messages.'
+ );
+ }
+
+ /**
+ * Compares en against messages.inc
+ */
+ function testMessageInMessagesincFile() {
+ $this->assertEquals(
+ array()
+ , array_diff( self::$keys['en'], self::$keys['messages.inc'] )
+ , 'All messages should be described in messages.inc!'
+ );
+ }
+
+ /**
+ * Tests that languages have all the keys defined using En as reference
+ *
+ * This test will emit lot of failure until nice translators
+ * from translatewiki.net finish up the translations. So this test
+ * should probably only be ran before a new MediaWiki release.
+ *
+ * @depends testAllEnglishMessagesAreDocumentedInQqq
+ * @depends testQqqDocumentsExistingMessages
+ *
+ * @group Utility
+ *
+ * @dataProvider provideLanguageKeys
+ */
+ function testLanguagesAreCompletelyTranslated( $lang ) {
+ $langKeys = Language::getMessageKeysFor( $lang );
+
+ $this->assertEquals(
+ array()
+ , array_diff( $langKeys, self::$keys['en'] )
+ , "{$lang} should have all the English message keys"
+ );
+ }
+
+
+ /**
+ * Provide all languages BUT english (en)
+ */
+ function provideLanguageKeys() {
+ $cases = array();
+
+ $langs = Language::getLanguageNames();
+ unset( $langs['en'] );
+
+ foreach( $langs as $code => $name ) {
+ $cases[] = array( $code );
+ }
+ return $cases;
+ }
+}
),
);
}
+
+
+
+ /**
+ * @dataProvider provideFormatDuration
+ */
+ function testFormatDuration( $duration, $expected, $intervals = array() ) {
+ $this->assertEquals(
+ $expected,
+ $this->lang->formatDuration( $duration, $intervals ),
+ "formatDuration('$duration'): $expected"
+ );
+ }
+
+ function provideFormatDuration() {
+ return array(
+ array(
+ 0,
+ '0 seconds',
+ ),
+ array(
+ 1,
+ '1 second',
+ ),
+ array(
+ 2,
+ '2 seconds',
+ ),
+ array(
+ 60,
+ '1 minute',
+ ),
+ array(
+ 2 * 60,
+ '2 minutes',
+ ),
+ array(
+ 3600,
+ '1 hour',
+ ),
+ array(
+ 2 * 3600,
+ '2 hours',
+ ),
+ array(
+ 24 * 3600,
+ '1 day',
+ ),
+ array(
+ 2 * 86400,
+ '2 days',
+ ),
+ array(
+ 365.25 * 86400, // 365.25 * 86400 = 31557600
+ '1 year',
+ ),
+ array(
+ 2 * 31557600,
+ '2 years',
+ ),
+ array(
+ 10 * 31557600,
+ '1 decade',
+ ),
+ array(
+ 20 * 31557600,
+ '2 decades',
+ ),
+ array(
+ 100 * 31557600,
+ '1 century',
+ ),
+ array(
+ 200 * 31557600,
+ '2 centuries',
+ ),
+ array(
+ 1000 * 31557600,
+ '1 millennium',
+ ),
+ array(
+ 2000 * 31557600,
+ '2 millennia',
+ ),
+ array(
+ 9001,
+ '2 hours, 30 minutes and 1 second'
+ ),
+ array(
+ 3601,
+ '1 hour and 1 second'
+ ),
+ array(
+ 31557600 + 2 * 86400 + 9000,
+ '1 year, 2 days, 2 hours and 30 minutes'
+ ),
+ array(
+ 42 * 1000 * 31557600 + 42,
+ '42 millennia and 42 seconds'
+ ),
+ array(
+ 60,
+ '60 seconds',
+ array( 'seconds' ),
+ ),
+ array(
+ 61,
+ '61 seconds',
+ array( 'seconds' ),
+ ),
+ array(
+ 1,
+ '1 second',
+ array( 'seconds' ),
+ ),
+ array(
+ 31557600 + 2 * 86400 + 9000,
+ '1 year, 2 days and 150 minutes',
+ array( 'years', 'days', 'minutes' ),
+ ),
+ array(
+ 42,
+ '0 days',
+ array( 'years', 'days' ),
+ ),
+ array(
+ 31557600 + 2 * 86400 + 9000,
+ '1 year, 2 days and 150 minutes',
+ array( 'minutes', 'days', 'years' ),
+ ),
+ array(
+ 42,
+ '0 days',
+ array( 'days', 'years' ),
+ ),
+ );
+ }
}
module( 'mediawiki.Uri', QUnit.newMwEnvironment() );
-test( '-- Initial check', function() {
+test( '-- Initial check', function () {
+ expect( 2 );
+
+ // Ensure we have a generic URI parser if not running in a browser
+ if ( !mw.Uri ) {
+ mw.Uri = mw.UriRelative( 'http://example.com/' );
+ }
+
+ ok( mw.UriRelative, 'mw.UriRelative defined' );
+ ok( mw.Uri, 'mw.Uri defined' );
+} );
+
+$.each( [true, false], function ( i, strictMode ) {
+ test( 'Basic mw.Uri object test in ' + ( strictMode ? '' : 'non-' ) + 'strict mode for a simple HTTP URI', function () {
+ var uriString, uri;
+ expect( 2 );
+
+ uriString = 'http://www.ietf.org/rfc/rfc2396.txt';
+ uri = new mw.Uri( uriString, {
+ strictMode: strictMode
+ });
+
+ deepEqual(
+ {
+ protocol: uri.protocol,
+ host: uri.host,
+ port: uri.port,
+ path: uri.path,
+ query: uri.query,
+ fragment: uri.fragment
+ }, {
+ protocol: 'http',
+ host: 'www.ietf.org',
+ port: undefined,
+ path: '/rfc/rfc2396.txt',
+ query: {},
+ fragment: undefined
+ },
+ 'basic object properties'
+ );
+
+ deepEqual(
+ {
+ userInfo: uri.getUserInfo(),
+ authority: uri.getAuthority(),
+ hostPort: uri.getHostPort(),
+ queryString: uri.getQueryString(),
+ relativePath: uri.getRelativePath(),
+ toString: uri.toString()
+ },
+ {
+ userInfo: '',
+ authority: 'www.ietf.org',
+ hostPort: 'www.ietf.org',
+ queryString: '',
+ relativePath: '/rfc/rfc2396.txt',
+ toString: uriString
+ },
+ 'construct composite components of URI on request'
+ );
+
+ });
+});
+
+test( 'Parse an ftp URI correctly with user and password', function () {
+ var uri;
expect( 1 );
- ok( mw.UriRelative, 'mw.Uri defined' );
+ uri = new mw.Uri( 'ftp://usr:pwd@192.0.2.16/' );
+
+ deepEqual(
+ {
+ protocol: uri.protocol,
+ user: uri.user,
+ password: uri.password,
+ host: uri.host,
+ port: uri.port,
+ path: uri.path,
+ query: uri.query,
+ fragment: uri.fragment
+ },
+ {
+ protocol: 'ftp',
+ user: 'usr',
+ password: 'pwd',
+ host: '192.0.2.16',
+ port: undefined,
+ path: '/',
+ query: {},
+ fragment: undefined
+ },
+ 'basic object properties'
+ );
+} );
+
+test( 'Parse a uri with simple querystring', function () {
+ var uri;
+ expect( 1 );
+
+ uri = new mw.Uri( 'http://www.google.com/?q=uri' );
+
+ deepEqual(
+ {
+ protocol: uri.protocol,
+ host: uri.host,
+ port: uri.port,
+ path: uri.path,
+ query: uri.query,
+ fragment: uri.fragment,
+ queryString: uri.getQueryString()
+ },
+ {
+ protocol: 'http',
+ host: 'www.google.com',
+ port: undefined,
+ path: '/',
+ query: { q: 'uri' },
+ fragment: undefined,
+ queryString: 'q=uri'
+ },
+ 'basic object properties'
+ );
+} );
+
+test( 'Handle multiple query parameter (overrideKeys on)', function () {
+ var uri;
+ expect( 5 );
+
+ uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+ overrideKeys: true
+ });
+
+ equal( uri.query.n, '1', 'multiple parameters are parsed' );
+ equal( uri.query.m, 'bar', 'last key overrides earlier keys' );
+
+ uri.query.n = [ 'x', 'y', 'z' ];
+
+ // Verify parts and total length instead of entire string because order
+ // of iteration can vary.
+ ok( uri.toString().indexOf( 'm=bar' ), 'toString preserves other values' );
+ ok( uri.toString().indexOf( 'n=x&n=y&n=z' ), 'toString parameter includes all values of an array query parameter' );
+ equal( uri.toString().length, 'http://www.example.com/dir/?m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
} );
-test( 'mw.Uri bug 35658', function() {
+test( 'Handle multiple query parameter (overrideKeys off)', function () {
+ var uri;
+ expect( 9 );
+
+ uri = new mw.Uri( 'http://www.example.com/dir/?m=foo&m=bar&n=1', {
+ overrideKeys: false
+ });
+
+ // Strict comparison so that types are also verified (n should be string '1')
+ strictEqual( uri.query.m.length, 2, 'multi-value query should be an array with 2 items' );
+ strictEqual( uri.query.m[0], 'foo', 'order and value is correct' );
+ strictEqual( uri.query.m[1], 'bar', 'order and value is correct' );
+ strictEqual( uri.query.n, '1', 'n=1 is parsed with the correct value of the expected type' );
+
+ // Change query values
+ uri.query.n = [ 'x', 'y', 'z' ];
+
+ // Verify parts and total length instead of entire string because order
+ // of iteration can vary.
+ ok( uri.toString().indexOf( 'm=foo&m=bar' ) >= 0, 'toString preserves other values' );
+ ok( uri.toString().indexOf( 'n=x&n=y&n=z' ) >= 0, 'toString parameter includes all values of an array query parameter' );
+ equal( uri.toString().length, 'http://www.example.com/dir/?m=foo&m=bar&n=x&n=y&n=z'.length, 'toString matches expected string' );
+
+ // Remove query values
+ uri.query.m.splice( 0, 1 );
+ delete uri.query.n;
+
+ equal( uri.toString(), 'http://www.example.com/dir/?m=bar', 'deletion properties' );
+
+ // Remove more query values, leaving an empty array
+ uri.query.m.splice( 0, 1 );
+ equal( uri.toString(), 'http://www.example.com/dir/', 'empty array value is ommitted' );
+} );
+
+test( 'All-dressed URI with everything', function () {
+ var uri, queryString, relativePath;
+ expect( 11 );
+
+ uri = new mw.Uri( 'http://auth@www.example.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value+%28escaped%29#top' );
+
+ deepEqual(
+ {
+ protocol: uri.protocol,
+ user: uri.user,
+ password: uri.password,
+ host: uri.host,
+ port: uri.port,
+ path: uri.path,
+ query: uri.query,
+ fragment: uri.fragment
+ },
+ {
+ protocol: 'http',
+ user: 'auth',
+ password: undefined,
+ host: 'www.example.com',
+ port: '81',
+ path: '/dir/dir.2/index.htm',
+ query: { q1: '0', test1: null, test2: 'value (escaped)' },
+ fragment: 'top'
+ },
+ 'basic object properties'
+ );
+
+ equal( uri.getUserInfo(), 'auth', 'user info' );
+
+ equal( uri.getAuthority(), 'auth@www.example.com:81', 'authority equal to auth@hostport' );
+
+ equal( uri.getHostPort(), 'www.example.com:81', 'hostport equal to host:port' );
+
+ queryString = uri.getQueryString();
+ ok( queryString.indexOf( 'q1=0' ) >= 0, 'query param with numbers' );
+ ok( queryString.indexOf( 'test1' ) >= 0, 'query param with null value is included' );
+ ok( queryString.indexOf( 'test1=' ) === -1, 'query param with null value does not generate equals sign' );
+ ok( queryString.indexOf( 'test2=value+%28escaped%29' ) >= 0, 'query param is url escaped' );
+
+ relativePath = uri.getRelativePath();
+ ok( relativePath.indexOf( uri.path ) >= 0, 'path in relative path' );
+ ok( relativePath.indexOf( uri.getQueryString() ) >= 0, 'query string in relative path' );
+ ok( relativePath.indexOf( uri.fragment ) >= 0, 'fragement in relative path' );
+} );
+
+test( 'Cloning', function () {
+ var original, clone;
+ expect( 5 );
+
+ original = new mw.Uri( 'http://en.wiki.local/w/api.php?action=query&foo=bar' );
+ clone = original.clone();
+
+ deepEqual( clone, original, 'clone has equivalent properties' );
+ equal( original.toString(), clone.toString(), 'toString matches original' );
+
+ notStrictEqual( clone, original, 'clone is not the same when compared by reference' );
+
+ clone.host = 'fr.wiki.local';
+ notEqual( original.host, clone.host, 'manipulating clone did not effect original' );
+ notEqual( original.toString(), clone.toString(), 'toString no longer matches original' );
+} );
+
+test( 'Constructing mw.Uri from plain object', function () {
+ var uri;
+ expect( 3 );
+
+ uri = new mw.Uri({
+ protocol: 'http',
+ host: 'www.foo.local',
+ path: '/this'
+ });
+ equal( uri.toString(), 'http://www.foo.local/this', 'Basic properties' );
+
+ uri = new mw.Uri({
+ protocol: 'http',
+ host: 'www.foo.local',
+ path: '/this',
+ query: { hi: 'there' },
+ fragment: 'blah'
+ });
+ equal( uri.toString(), 'http://www.foo.local/this?hi=there#blah', 'More complex properties' );
+
+ raises(
+ function () {
+ var uri = new mw.Uri({
+ protocol: 'http',
+ host: 'www.foo.local'
+ });
+ },
+ function ( e ) {
+ return e.message === 'Bad constructor arguments';
+ },
+ 'Construction failed when missing required properties'
+ );
+} );
+
+test( 'Manipulate properties', function () {
+ var uriBase, uri;
+ expect( 8 );
+
+ uriBase = new mw.Uri( 'http://en.wiki.local/w/api.php' );
+
+ uri = uriBase.clone();
+ uri.fragment = 'frag';
+ equal( uri.toString(), 'http://en.wiki.local/w/api.php#frag', 'add a fragment' );
+
+ uri = uriBase.clone();
+ uri.host = 'fr.wiki.local';
+ uri.port = '8080';
+ equal( uri.toString(), 'http://fr.wiki.local:8080/w/api.php', 'change host and port' );
+
+ uri = uriBase.clone();
+ uri.query.foo = 'bar';
+ equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'add query arguments' );
+
+ delete uri.query.foo;
+ equal( uri.toString(), 'http://en.wiki.local/w/api.php', 'delete query arguments' );
+
+ uri = uriBase.clone();
+ uri.query.foo = 'bar';
+ equal( uri.toString(), 'http://en.wiki.local/w/api.php?foo=bar', 'extend query arguments' );
+ uri.extend({
+ foo: 'quux',
+ pif: 'paf'
+ });
+ ok( uri.toString().indexOf( 'foo=quux' ) >= 0, 'extend query arguments' );
+ ok( uri.toString().indexOf( 'foo=bar' ) === -1, 'extend query arguments' );
+ ok( uri.toString().indexOf( 'pif=paf' ) >= 0 , 'extend query arguments' );
+} );
+
+test( 'Handle protocol-relative URLs', function () {
+ var UriRel, uri;
+ expect( 5 );
+
+ UriRel = mw.UriRelative( 'glork://en.wiki.local/foo.php' );
+
+ uri = new UriRel( '//en.wiki.local/w/api.php' );
+ equal( uri.protocol, 'glork', 'create protocol-relative URLs with same protocol as document' );
+
+ uri = new UriRel( '/foo.com' );
+ equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in loose mode' );
+
+ uri = new UriRel( 'http:/foo.com' );
+ equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in loose mode' );
+
+ uri = new UriRel( '/foo.com', true );
+ equal( uri.toString(), 'glork://en.wiki.local/foo.com', 'handle absolute paths by supplying protocol and host from document in strict mode' );
+
+ uri = new UriRel( 'http:/foo.com', true );
+ equal( uri.toString(), 'http://en.wiki.local/foo.com', 'handle absolute paths by supplying host from document in strict mode' );
+} );
+
+test( 'Bad calls', function () {
+ var uri;
+ expect( 5 );
+
+ raises(
+ function () {
+ new mw.Uri();
+ },
+ function ( e ) {
+ return e.message === 'Bad constructor arguments';
+ },
+ 'throw error on no arguments to constructor'
+ );
+
+ raises(
+ function () {
+ new mw.Uri( '' );
+ },
+ function ( e ) {
+ return e.message === 'Bad constructor arguments';
+ },
+ 'throw error on empty string as argument to constructor'
+ );
+
+ raises(
+ function () {
+ new mw.Uri( 'glaswegian penguins' );
+ },
+ function ( e ) {
+ return e.message === 'Bad constructor arguments';
+ },
+ 'throw error on non-URI as argument to constructor'
+ );
+
+ raises(
+ function () {
+ new mw.Uri( 'foo.com/bar/baz', {
+ strictMode: true
+ });
+ },
+ function ( e ) {
+ return e.message === 'Bad constructor arguments';
+ },
+ 'throw error on URI without protocol or // or leading / in strict mode'
+ );
+
+ uri = new mw.Uri( 'foo.com/bar/baz', {
+ strictMode: false
+ });
+ equal( uri.toString(), 'http://foo.com/bar/baz', 'normalize URI without protocol or // in loose mode' );
+});
+
+test( 'bug 35658', function () {
expect( 2 );
- var testProtocol = 'https://';
- var testServer = 'foo.example.org';
- var testPort = '3004';
- var testPath = '/!1qy';
+ var testProtocol, testServer, testPort, testPath, UriClass, uri, href;
- var uriClass = mw.UriRelative( testProtocol + testServer + '/some/path/index.html' );
- var uri = new uriClass( testPath );
- var href = uri.toString();
+ testProtocol = 'https://';
+ testServer = 'foo.example.org';
+ testPort = '3004';
+ testPath = '/!1qy';
+
+ UriClass = mw.UriRelative( testProtocol + testServer + '/some/path/index.html' );
+ uri = new UriClass( testPath );
+ href = uri.toString();
equal( href, testProtocol + testServer + testPath, 'Root-relative URL gets host & protocol supplied' );
- uriClass = mw.UriRelative( testProtocol + testServer + ':' + testPort + '/some/path.php' );
- uri = new uriClass( testPath );
+ UriClass = mw.UriRelative( testProtocol + testServer + ':' + testPort + '/some/path.php' );
+ uri = new UriClass( testPath );
href = uri.toString();
equal( href, testProtocol + testServer + ':' + testPort + testPath, 'Root-relative URL gets host, protocol, and port supplied' );