source 'https://rubygems.org'
-gem 'mediawiki_selenium', '~> 1.6.5'
+gem 'mediawiki_selenium', '~> 1.7'
+gem 'rake', '~> 11.1', '>= 11.1.1'
gem 'rubocop', '~> 0.32.1', require: false
faker (>= 1.1.2)
yml_reader (>= 0.6)
diff-lcs (1.2.5)
- domain_name (0.5.20160128)
+ domain_name (0.5.20160310)
unf (>= 0.0.5, < 1.0.0)
- faker (1.6.1)
+ faker (1.6.3)
i18n (~> 0.5)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
ffi (1.9.10)
gherkin (2.12.2)
multi_json (~> 1.3)
- headless (2.2.0)
+ headless (2.2.3)
http-cookie (1.0.2)
domain_name (~> 0.5)
i18n (0.7.0)
mediawiki_api (0.5.0)
faraday (~> 0.9, >= 0.9.0)
faraday-cookie_jar (~> 0.0, >= 0.0.6)
- mediawiki_selenium (1.6.5)
+ mediawiki_selenium (1.7.0)
cucumber (~> 1.3, >= 1.3.20)
headless (~> 2.0, >= 2.1.0)
json (~> 1.8, >= 1.8.1)
rspec-expectations (~> 2.14, >= 2.14.4)
syntax (~> 1.2, >= 1.2.0)
thor (~> 0.19, >= 0.19.1)
- mime-types (2.99)
- multi_json (1.11.2)
+ mime-types (2.99.1)
+ multi_json (1.11.3)
multi_test (0.1.2)
multipart-post (2.0.0)
netrc (0.11.0)
ast (>= 1.1, < 3.0)
powerpack (0.1.1)
rainbow (2.0.0)
+ rake (11.1.1)
rest-client (1.8.0)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 3.0)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.4)
ruby-progressbar (1.7.5)
- rubyzip (1.1.7)
- selenium-webdriver (2.50.0)
+ rubyzip (1.2.0)
+ selenium-webdriver (2.53.0)
childprocess (~> 0.5)
- multi_json (~> 1.0)
rubyzip (~> 1.0)
websocket (~> 1.0)
syntax (1.2.0)
thor (0.19.1)
unf (0.1.4)
unf_ext
- unf_ext (0.0.7.1)
+ unf_ext (0.0.7.2)
watir-webdriver (0.9.1)
selenium-webdriver (>= 2.46.2)
- websocket (1.2.2)
+ websocket (1.2.3)
yml_reader (0.7)
PLATFORMS
ruby
DEPENDENCIES
- mediawiki_selenium (~> 1.6.5)
+ mediawiki_selenium (~> 1.7)
+ rake (~> 11.1, >= 11.1.1)
rubocop (~> 0.32.1)
+
+BUNDLED WITH
+ 1.10.6
* json
* mbstring
* xml
+The following PHP extensions are strongly recommended:
+* openssl
=== Configuration changes in 1.27 ===
* $wgAllowMicrodataAttributes and $wgAllowRdfaAttributes were removed,
module should express a dependency on it.
* Removed configuration option $wgCopyrightIcon (deprecated since 1.18). Use
$wgFooterIcons['copyright']['copyright'] instead.
+* If the openssl and mcrypt PHP extensions are both unavailable, secure
+ session storage (soon to be used for login) will raise an exception. This
+ exception may be bypassed by setting $wgSessionInsecureSecrets = true.
=== New features in 1.27 ===
* $wgDataCenterUpdateStickTTL was also added. This decides how long a user
is deprecated.
* (T33313) Add a preference for watching uploads by default, also applies
to API-based upload tools.
+* $wgJpegPixelFormat was added to override chroma subsampling for JPEG image
+ thumbnails created via ImageMagick. Defaults to 'yuv420', providing bandwidth
+ savings versus the previous behavior on many files.
=== External library changes in 1.27 ===
* Skin::tooltipAndAccesskeyAttribs was removed (deprecated since 1.21).
* Skin::userTalkLink was removed (deprecated since 1.21).
* Skin::userToolLinksRedContribs was removed (deprecated since 1.21).
+* wikidiff3 is now the default and only PHP diff engine. It provides improved diff
+ performance on complex changes. $wgExternalDiffEngine = 'wikidiff3' therefore
+ makes no difference now. Users are still recommended to use wikidiff2 if possible,
+ though.
== Compatibility ==
task.options = ['-c', '.rubocop.yml']
end
+require 'mediawiki_selenium/rake_task'
+MediawikiSelenium::RakeTask.new(site_tag: false)
+
task default: [:test]
desc 'Run all build/tests commands (CI entry point)'
'LinkFilter' => __DIR__ . '/includes/LinkFilter.php',
'LinkHolderArray' => __DIR__ . '/includes/parser/LinkHolderArray.php',
'LinkSearchPage' => __DIR__ . '/includes/specials/SpecialLinkSearch.php',
- 'LinkTarget' => __DIR__ . '/includes/LinkTarget.php',
'Linker' => __DIR__ . '/includes/Linker.php',
'LinksDeletionUpdate' => __DIR__ . '/includes/deferred/LinksDeletionUpdate.php',
'LinksUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php',
'LoadMonitorNull' => __DIR__ . '/includes/db/loadbalancer/LoadMonitor.php',
'LocalFile' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
'LocalFileDeleteBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+ 'LocalFileLockError' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
'LocalFileMoveBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
'LocalFileRestoreBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
'LocalIdLookup' => __DIR__ . '/includes/user/LocalIdLookup.php',
'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
'MediaWiki\\Languages\\Data\\Names' => __DIR__ . '/languages/data/Names.php',
'MediaWiki\\Languages\\Data\\ZhConversion' => __DIR__ . '/languages/data/ZhConversion.php',
+ 'MediaWiki\\Linker\\LinkTarget' => __DIR__ . '/includes/linker/LinkTarget.php',
'MediaWiki\\Logger\\LegacyLogger' => __DIR__ . '/includes/debug/logger/LegacyLogger.php',
'MediaWiki\\Logger\\LegacySpi' => __DIR__ . '/includes/debug/logger/LegacySpi.php',
'MediaWiki\\Logger\\LoggerFactory' => __DIR__ . '/includes/debug/logger/LoggerFactory.php',
'SearchDatabase' => __DIR__ . '/includes/search/SearchDatabase.php',
'SearchDump' => __DIR__ . '/maintenance/dumpIterator.php',
'SearchEngine' => __DIR__ . '/includes/search/SearchEngine.php',
+ 'SearchEngineConfig' => __DIR__ . '/includes/search/SearchEngineConfig.php',
'SearchEngineDummy' => __DIR__ . '/includes/search/SearchEngine.php',
+ 'SearchEngineFactory' => __DIR__ . '/includes/search/SearchEngineFactory.php',
'SearchExactMatchRescorer' => __DIR__ . '/includes/search/SearchExactMatchRescorer.php',
'SearchHighlighter' => __DIR__ . '/includes/search/SearchHighlighter.php',
'SearchMssql' => __DIR__ . '/includes/search/SearchMssql.php',
'SearchMySQL' => __DIR__ . '/includes/search/SearchMySQL.php',
'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchNearMatchResultSet.php',
+ 'SearchNearMatcher' => __DIR__ . '/includes/search/SearchNearMatcher.php',
'SearchOracle' => __DIR__ . '/includes/search/SearchOracle.php',
'SearchPostgres' => __DIR__ . '/includes/search/SearchPostgres.php',
'SearchResult' => __DIR__ . '/includes/search/SearchResult.php',
"ext-xml": "*",
"liuggio/statsd-php-client": "1.0.18",
"mediawiki/at-ease": "1.1.0",
- "oojs/oojs-ui": "0.16.6",
+ "oojs/oojs-ui": "0.17.0",
"oyejorge/less.php": "1.7.0.10",
"php": ">=5.5.9",
"psr/log": "1.0.0",
},
"skipFunction": {
"type": "string",
- "description": "Modules that provide fallback functionality can provide a \"skip function\". This function, if provided, will be passed along to the module registry on the client. When this module is loaded (either directly or as a dependency of another module), then this function is executed first. If the function returns true, the module will instantly be considered \"ready\" without requesting the associated module resources. The value returned here must be valid javascript for execution in a private function. It must not contain the \"function () {\" and \"}\" wrapper though."
+ "description": "Path to a file containing a JavaScript \"skip function\", if desired."
},
"scripts": {
"type": ["string", "array"],
},
"TrackingCategories": {
"type": "array",
- "description": "Tracking category message keys"
+ "description": "Tracking category message keys",
+ "items": {
+ "type": "string"
+ }
},
"DefaultUserOptions": {
"type": "object",
},
"HiddenPrefs": {
"type": "array",
- "description": "Preferences users cannot set"
+ "description": "Preferences users cannot set",
+ "items": {
+ "type": "string"
+ }
},
"GroupPermissions": {
"type": "object",
- "description": "Default permissions to give to user groups"
+ "description": "Default permissions to give to user groups",
+ "patternProperties": {
+ "^[a-z]+$": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-z]+$": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
},
"RevokePermissions": {
"type": "object",
- "description": "Default permissions to revoke from user groups"
+ "description": "Default permissions to revoke from user groups",
+ "patternProperties": {
+ "^[a-z]+$": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-z]+$": {
+ "type": "boolean"
+ }
+ }
+ }
+ }
},
"ImplicitGroups": {
"type": "array",
},
"AvailableRights": {
"type": "array",
- "description": "User rights added by the extension"
+ "description": "User rights added by the extension",
+ "items": {
+ "type": "string"
+ }
},
"ContentHandlers": {
"type": "object",
- "description": "Mapping of model ID to class name"
+ "description": "Mapping of model ID to class name",
+ "patternProperties": {
+ "^[A-Za-z]+$": {
+ "type": "string"
+ }
+ }
},
"RateLimits": {
"type": "object",
"array",
"string"
],
- "description": "Function to call after setup has finished"
+ "description": "Function to call after setup has finished",
+ "items": {
+ "type": "string"
+ }
},
"ExtensionMessagesFiles": {
"type": "object",
"FilterLogTypes": {
"type": "object"
},
+ "ActionFilteredLogs": {
+ "type": "object",
+ "description": "List of log types which can be filtered by log actions",
+ "patternProperties": {
+ "^[a-z-]+$": {
+ "type": "object",
+ "patternProperties": {
+ "^[a-z-]+$": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ },
"LogNames": {
"type": "object"
},
}
$lang = $this->getLanguage();
- $langAttribs = [ 'lang' => $lang->getHtmlCode(), 'dir' => $lang->getDir() ];
+ $attribs = [
+ 'class' => 'mw-category-generated',
+ 'lang' => $lang->getHtmlCode(),
+ 'dir' => $lang->getDir()
+ ];
# put a div around the headings which are in the user language
- $r = Html::openElement( 'div', $langAttribs ) . $r . '</div>';
+ $r = Html::openElement( 'div', $attribs ) . $r . '</div>';
return $r;
}
*/
$wgJpegTran = '/usr/bin/jpegtran';
+/**
+ * At default setting of 'yuv420', JPEG thumbnails will use 4:2:0 chroma
+ * subsampling to reduce file size, at the cost of possible color fringing
+ * at sharp edges.
+ *
+ * See https://en.wikipedia.org/wiki/Chroma_subsampling
+ *
+ * Supported values:
+ * false - use scaling system's default (same as pre-1.27 behavior)
+ * 'yuv444' - luma and chroma at same resolution
+ * 'yuv422' - chroma at 1/2 resolution horizontally, full vertically
+ * 'yuv420' - chroma at 1/2 resolution in both dimensions
+ *
+ * This setting is currently supported only for the ImageMagick backend;
+ * others may default to 4:2:0 or 4:4:4 or maintaining the source file's
+ * sampling in the thumbnail.
+ *
+ * @since 1.27
+ */
+$wgJpegPixelFormat = 'yuv420';
+
/**
* Some tests and extensions use exiv2 to manipulate the Exif metadata in some
* image formats.
*
* The format is an associative array where the key is a cache identifier, and
* the value is an associative array of parameters. The "cacheId" parameter is
- * a cache identifier from $wgObjectCaches. The "relayerConfig" parameter is an
- * array used to construct an EventRelayer object. The "pool" parameter is a
- * string that is used as a PubSub channel prefix. The "loggroup" parameter
- * controls where log events are sent.
+ * a cache identifier from $wgObjectCaches. The "channels" parameter is a map of
+ * actions ('purge') to PubSub channels defined in $wgEventRelayerConfig.
+ * The "loggroup" parameter controls where log events are sent.
*
* @since 1.26
*/
$wgWANObjectCaches = [
CACHE_NONE => [
- 'class' => 'WANObjectCache',
- 'cacheId' => CACHE_NONE,
- 'pool' => 'mediawiki-main-none',
- 'relayerConfig' => [ 'class' => 'EventRelayerNull' ]
+ 'class' => 'WANObjectCache',
+ 'cacheId' => CACHE_NONE,
+ 'channels' => []
]
/* Example of a simple single data-center cache:
- 'memcached-php' => array(
- 'class' => 'WANObjectCache',
- 'cacheId' => 'memcached-php',
- 'pool' => 'mediawiki-main-memcached',
- 'relayerConfig' => array( 'class' => 'EventRelayerNull' )
- )
+ 'memcached-php' => [
+ 'class' => 'WANObjectCache',
+ 'cacheId' => 'memcached-php',
+ 'channels' => [ 'purge' => 'wancache-main-memcached-purge' ]
+ ]
*/
];
/**
* Name of the external diff engine to use. Supported values:
- * * false: default PHP implementation, DairikiDiff
+ * * false: default PHP implementation
* * 'wikidiff2': Wikimedia's fast difference engine implemented as a PHP/HHVM module
- * * 'wikidiff3': newer PHP-based difference engine
+ * * 'wikidiff' and 'wikidiff3' are treated as false for backwards compatibility
* * any other string is treated as a path to external diff executable
*/
$wgExternalDiffEngine = false;
*/
$wgHttpsPort = 443;
+/**
+ * Secret for session storage.
+ * This should be set in LocalSettings.php, otherwise wgSecretKey will
+ * be used.
+ * @since 1.27
+ */
+$wgSessionSecret = false;
+
+/**
+ * If for some reason you can't install the PHP OpenSSL or mcrypt extensions,
+ * you can set this to true to make MediaWiki work again at the cost of storing
+ * sensitive session data insecurely. But it would be much more secure to just
+ * install the OpenSSL extension.
+ * @since 1.27
+ */
+$wgSessionInsecureSecrets = false;
+
/**
* Secret for hmac-based key derivation function (fast,
* cryptographically secure random numbers).
$wgMaxUserDBWriteDuration = false;
/**
- * Mapping of event channels to EventRelayer configuration.
+ * Mapping of event channels (or channel categories) to EventRelayer configuration.
*
* By setting up a PubSub system (like Kafka) and enabling a corresponding EventRelayer class
* that uses it, MediaWiki can broadcast events to all subscribers. Certain features like WAN
* subscribe to the channel and take actions based on the events. For example, a local daemon
* can run on each CDN cache node and perfom local purges based on the URL purge channel events.
*
- * The 'default' channel is for all channels without an explicit entry here.
+ * Some extensions may want to use "channel categories" so that different channels can also share
+ * the same custom relayer instance (e.g. when it's likely to be overriden). They can use
+ * EventRelayerGroup::getRelayer() based on the category but call notify() on various different
+ * actual channels. One reason for this would be that some system have very different performance
+ * vs durability needs, so one system (e.g. Kafka) may not be suitable for all uses.
+ *
+ * The 'default' key is for all channels (or channel categories) without an explicit entry here.
*
* @since 1.27
*/
'{{fullurl:Special:UserLogin/signup|returnto={{FULLPAGENAMEE}}}}' ]
);
} else {
- $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>",
+ $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\" class=\"warningbox\">\n$1</div>",
'anonpreviewwarning'
);
}
* Shows a bulletin board style toolbar for common editing functions.
* It can be disabled in the user preferences.
*
- * @param $title Title object for the page being edited (optional)
+ * @param Title $title Title object for the page being edited (optional)
* @return string
*/
static function getEditToolbar( $title = null ) {
<?php
+use MediaWiki\MediaWikiServices;
+
/**
* Factory class for spawning EventRelayer objects using configuration
*
/** @var EventRelayer[] */
protected $relayers = [];
- /** @var EventRelayerGroup */
- protected static $instance = null;
-
/**
- * @param Config $config
+ * @param array[] $config Channel configuration
*/
- protected function __construct( Config $config ) {
- $this->configByChannel = $config->get( 'EventRelayerConfig' );
+ public function __construct( array $config ) {
+ $this->configByChannel = $config;
}
/**
+ * @deprecated since 1.27 Use MediaWikiServices::getInstance()->getEventRelayerGroup()
* @return EventRelayerGroup
*/
public static function singleton() {
- if ( !self::$instance ) {
- self::$instance = new self( RequestContext::getMain()->getConfig() );
- }
-
- return self::$instance;
+ return MediaWikiServices::getInstance()->getEventRelayerGroup();
}
/**
+++ /dev/null
-<?php
-
-/**
- * @author Addshore
- *
- * @since 1.27
- */
-interface LinkTarget {
-
- /**
- * Get the namespace index.
- *
- * @return int Namespace index
- */
- public function getNamespace();
-
- /**
- * Get the link fragment (i.e. the bit after the #) in text form.
- *
- * @return string link fragment
- */
- public function getFragment();
-
- /**
- * Whether the link target has a fragment
- *
- * @return bool
- */
- public function hasFragment();
-
- /**
- * Get the main part with underscores.
- *
- * @return string Main part of the link, with underscores (for use in href attributes)
- */
- public function getDBkey();
-
- /**
- * Returns the link in text form, without namespace prefix or fragment.
- *
- * This is computed from the DB key by replacing any underscores with spaces.
- *
- * @return string
- */
- public function getText();
-
- /**
- * Creates a new LinkTarget for a different fragment of the same page.
- * It is expected that the same type of object will be returned, but the
- * only requirement is that it is a LinkTarget.
- *
- * @param string $fragment The fragment name, or "" for the entire page.
- *
- * @return LinkTarget
- */
- public function createFragmentTarget( $fragment );
-}
*
* @file
*/
+use MediaWiki\Linker\LinkTarget;
/**
* Some internal bits split of from Skin.php. These functions are used
}
/**
- * @param Title $title
- * @return Title
+ * @param LinkTarget $target
+ * @return LinkTarget|Title You will get back the same type you passed in, or a Title object
*/
- static function normaliseSpecialPage( Title $title ) {
- if ( $title->isSpecialPage() ) {
- list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $title->getDBkey() );
+ static function normaliseSpecialPage( LinkTarget $target ) {
+ if ( $target->getNamespace() == NS_SPECIAL ) {
+ list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $target->getDBkey() );
if ( !$name ) {
- return $title;
+ return $target;
}
- $ret = SpecialPage::getTitleFor( $name, $subpage, $title->getFragment() );
+ $ret = SpecialPage::getTitleFor( $name, $subpage, $target->getFragment() );
return $ret;
} else {
- return $title;
+ return $target;
}
}
namespace MediaWiki;
use ConfigFactory;
+use EventRelayerGroup;
use GlobalVarConfig;
use Config;
use Hooks;
-use LBFactory;
use Liuggio\StatsdClient\Factory\StatsdDataFactory;
-use LoadBalancer;
use MediaWiki\Services\ServiceContainer;
+use SearchEngine;
+use SearchEngineConfig;
+use SearchEngineFactory;
use SiteLookup;
use SiteStore;
+use SkinFactory;
/**
* Service locator for MediaWiki core services.
return $this->getService( 'StatsdDataFactory' );
}
+ /**
+ * @return EventRelayerGroup
+ */
+ public function getEventRelayerGroup() {
+ return $this->getService( 'EventRelayerGroup' );
+ }
+
+ /**
+ * @return SearchEngine
+ */
+ public function newSearchEngine() {
+ // New engine object every time, since they keep state
+ return $this->getService( 'SearchEngineFactory' )->create();
+ }
+
+ /**
+ * @return SearchEngineFactory
+ */
+ public function getSearchEngineFactory() {
+ return $this->getService( 'SearchEngineFactory' );
+ }
+
+ /**
+ * @return SearchEngineConfig
+ */
+ public function getSearchEngineConfig() {
+ return $this->getService( 'SearchEngineConfig' );
+ }
+
+ /**
+ * @return SkinFactory
+ */
+ public function getSkinFactory() {
+ return $this->getService( 'SkinFactory' );
+ }
+
///////////////////////////////////////////////////////////////////////////
// NOTE: When adding a service getter here, don't forget to add a test
// case for it in MediaWikiServicesTest::provideGetters() and in
return new self( $key, $params );
}
+ /**
+ * Transform a MessageSpecifier or a primitive value used interchangeably with
+ * specifiers (a message key string, or a key + params array) into a proper Message
+ * @param string|array|MessageSpecifier $value
+ * @return Message
+ * @throws InvalidArgumentException
+ */
+ public static function newFromSpecifier( $value ) {
+ if ( $value instanceof RawMessage ) {
+ $message = new RawMessage( $value->getKey(), $value->getParams() );
+ } elseif ( $value instanceof MessageSpecifier ) {
+ $message = new Message( $value );
+ } elseif ( is_array( $value ) ) {
+ $key = array_shift( $value );
+ $message = new Message( $key, $value );
+ } elseif ( is_string( $value ) ) {
+ $message = new Message( $value );
+ } else {
+ throw new InvalidArgumentException( __METHOD__ . ': invalid argument type '
+ . gettype( $value ) );
+ }
+
+ return $message;
+ }
+
/**
* Factory function accepting multiple message keys and returning a message instance
* for the first message which is non-empty. If all messages are empty then an
*
* @file
*/
+use MediaWiki\Linker\LinkTarget;
/**
* @todo document
);
},
+ 'EventRelayerGroup' => function( MediaWikiServices $services ) {
+ return new EventRelayerGroup( $services->getMainConfig()->get( 'EventRelayerConfig' ) );
+ },
+
+ 'SearchEngineFactory' => function( MediaWikiServices $services ) {
+ return new SearchEngineFactory( $services->getSearchEngineConfig() );
+ },
+
+ 'SearchEngineConfig' => function( MediaWikiServices $services ) {
+ global $wgContLang;
+ return new SearchEngineConfig( $services->getMainConfig(), $wgContLang );
+ },
+
+ 'SkinFactory' => function( MediaWikiServices $services ) {
+ return new SkinFactory();
+ },
+
///////////////////////////////////////////////////////////////////////////
// NOTE: When adding a service here, don't forget to add a getter function
// in the MediaWikiServices class. The convenience getter should just call
// Sites using multiple datacenters can configure a relayer.
$wgMainWANCache = 'mediawiki-main-default';
$wgWANObjectCaches[$wgMainWANCache] = [
- 'class' => 'WANObjectCache',
- 'cacheId' => $wgMainCacheType,
- 'pool' => 'mediawiki-main-default',
- 'relayerConfig' => [ 'class' => 'EventRelayerNull' ]
+ 'class' => 'WANObjectCache',
+ 'cacheId' => $wgMainCacheType,
+ 'channels' => [ 'purge' => 'wancache-main-default-purge' ]
];
}
*
* @file
*/
+use MediaWiki\Linker\LinkTarget;
/**
* Represents a title within MediaWiki.
return self::makeTitle(
$linkTarget->getNamespace(),
$linkTarget->getText(),
- $linkTarget->getFragment() );
+ $linkTarget->getFragment(),
+ $linkTarget->getInterwiki()
+ );
}
/**
$this->mTitleValue = new TitleValue(
$this->getNamespace(),
$this->getDBkey(),
- $this->getFragment() );
+ $this->getFragment(),
+ $this->getInterwiki()
+ );
} catch ( InvalidArgumentException $ex ) {
wfDebug( __METHOD__ . ': Can\'t create a TitleValue for [[' .
$this->getPrefixedText() . ']]: ' . $ex->getMessage() . "\n" );
* @file
* @ingroup Watchlist
*/
+use MediaWiki\Linker\LinkTarget;
/**
* Representation of a pair of user and title for watchlist entries.
<?php
use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
+use MediaWiki\Linker\LinkTarget;
use Wikimedia\Assert\Assert;
/**
$this->reuseConnection( $dbr );
foreach ( $res as $row ) {
- $timestamps[(int)$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
+ $timestamps[$row->wl_namespace][$row->wl_title] = $row->wl_notificationtimestamp;
}
return $timestamps;
}
if ( $module->isMain() ) {
- $header = $context->msg( 'api-help-main-header' )->parse();
+ $headerContent = $context->msg( 'api-help-main-header' )->parse();
+ $headerAttr = [
+ 'class' => 'apihelp-header',
+ ];
} else {
$name = $module->getModuleName();
- $header = $module->getParent()->getModuleManager()->getModuleGroup( $name ) .
+ $headerContent = $module->getParent()->getModuleManager()->getModuleGroup( $name ) .
"=$name";
if ( $module->getModulePrefix() !== '' ) {
- $header .= ' ' .
+ $headerContent .= ' ' .
$context->msg( 'parentheses', $module->getModulePrefix() )->parse();
}
+ // Module names are always in English and not localized,
+ // so English language and direction must be set explicitly,
+ // otherwise parentheses will get broken in RTL wikis
+ $headerAttr = [
+ 'class' => 'apihelp-header apihelp-module-name',
+ 'dir' => 'ltr',
+ 'lang' => 'en',
+ ];
}
+
+ $headerAttr['id'] = $anchor;
+
$haveModules[$anchor] = [
'toclevel' => count( $tocnumber ),
'level' => $level,
'anchor' => $anchor,
- 'line' => $header,
+ 'line' => $headerContent,
'number' => implode( '.', $tocnumber ),
'index' => false,
];
if ( empty( $options['noheader'] ) ) {
- $help['header'] .= Html::element( 'h' . min( 6, $level ),
- [ 'id' => $anchor, 'class' => 'apihelp-header' ],
- $header
+ $help['header'] .= Html::element(
+ 'h' . min( 6, $level ),
+ $headerAttr,
+ $headerContent
);
}
} else {
* @file
*/
+use MediaWiki\MediaWikiServices;
+
/**
* @ingroup API
*/
* @param array &$results Put results here. Keys have to be integers.
*/
protected function search( $search, $limit, $namespaces, $resolveRedir, &$results ) {
-
- $searchEngine = SearchEngine::create();
+ $searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
$searchEngine->setLimitOffset( $limit );
$searchEngine->setNamespaces( $namespaces );
$titles = $searchEngine->extractTitles( $searchEngine->completionSearchWithVariants( $search ) );
* @throws MWException
*/
public static function getOpenSearchTemplate( $type ) {
- global $wgOpenSearchTemplate, $wgCanonicalServer;
+ $config = MediaWikiServices::getInstance()->getSearchEngineConfig();
+ $template = $config->getConfig()->get( 'OpenSearchTemplate' );
- if ( $wgOpenSearchTemplate && $type === 'application/x-suggestions+json' ) {
- return $wgOpenSearchTemplate;
+ if ( $template && $type === 'application/x-suggestions+json' ) {
+ return $template;
}
- $ns = implode( '|', SearchEngine::defaultNamespaces() );
+ $ns = implode( '|', $config->defaultNamespaces() );
if ( !$ns ) {
$ns = '0';
}
switch ( $type ) {
case 'application/x-suggestions+json':
- return $wgCanonicalServer . wfScript( 'api' )
+ return $config->getConfig()->get( 'CanonicalServer' ) . wfScript( 'api' )
. '?action=opensearch&search={searchTerms}&namespace=' . $ns;
case 'application/x-suggestions+xml':
- return $wgCanonicalServer . wfScript( 'api' )
+ return $config->getConfig()->get( 'CanonicalServer' ) . wfScript( 'api' )
. '?action=opensearch&format=xml&search={searchTerms}&namespace=' . $ns;
default:
* allows us to catch certain error conditions early (such as missing
* required parameter).
*
- * @param $image File
- * @param $finalParams array List of parameters to transform image with
+ * @param File $image
+ * @param array $finalParams List of parameters to transform image with
*/
protected function checkParameterNormalise( $image, $finalParams ) {
$h = $image->getHandler();
*
* @file
*/
+use MediaWiki\Linker\LinkTarget;
/**
* A query module to show basic page information.
<?php
+use MediaWiki\MediaWikiServices;
+
/**
* 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
$namespaces = $params['namespace'];
$offset = $params['offset'];
- $searchEngine = SearchEngine::create();
+ $searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
$searchEngine->setLimitOffset( $limit + 1, $offset );
$searchEngine->setNamespaces( $namespaces );
$titles = $searchEngine->extractTitles( $searchEngine->completionSearchWithVariants( $search ) );
* @file
*/
+use MediaWiki\MediaWikiServices;
+
/**
* Query module to perform full text search within wiki titles and content
*
}
// Create search engine instance and set options
- $search = isset( $params['backend'] ) && $params['backend'] != self::BACKEND_NULL_PARAM ?
- SearchEngine::create( $params['backend'] ) : SearchEngine::create();
+ $type = isset( $params['backend'] ) && $params['backend'] != self::BACKEND_NULL_PARAM ?
+ $params['backend'] : null;
+ $search = MediaWikiServices::getInstance()->getSearchEngineFactory()->create( $type );
$search->setLimitOffset( $limit + 1, $params['offset'] );
$search->setNamespaces( $params['namespace'] );
$search->setFeatureData( 'rewrite', (bool)$params['enablerewrites'] );
} elseif ( $what == 'nearmatch' ) {
// near matches must receive the user input as provided, otherwise
// the near matches within namespaces are lost.
- $matches = SearchEngine::getNearMatchResultSet( $params['search'] );
+ $matches = $search->getNearMatcher( $this->getConfig() )
+ ->getNearMatchResultSet( $params['search'] );
} else {
// We default to title searches; this is a terrible legacy
// of the way we initially set up the MySQL fulltext-based
'enablerewrites' => false,
];
- $alternatives = SearchEngine::getSearchTypes();
+ $searchConfig = MediaWikiServices::getInstance()->getSearchEngineConfig();
+ $alternatives = $searchConfig->getSearchTypes();
if ( count( $alternatives ) > 1 ) {
if ( $alternatives[0] === null ) {
$alternatives[0] = self::BACKEND_NULL_PARAM;
}
$params['backend'] = [
- ApiBase::PARAM_DFLT => $this->getConfig()->get( 'SearchType' ),
+ ApiBase::PARAM_DFLT => $searchConfig->getSearchType(),
ApiBase::PARAM_TYPE => $alternatives,
];
}
const ERROR_CACHE = 'error_cache';
const ERROR_UNCACHEABLE = 'uncacheable';
+ const PRESUME_FRESH_TTL_SEC = 5;
+
public function execute() {
$user = $this->getUser();
$params = $this->extractRequestParams();
return false;
}
- $time = wfTimestamp( TS_UNIX, $editInfo->output->getTimestamp() );
- if ( ( time() - $time ) <= 3 ) {
+ $age = time() - wfTimestamp( TS_UNIX, $editInfo->output->getCacheTime() );
+ if ( $age <= self::PRESUME_FRESH_TTL_SEC ) {
$stats->increment( 'editstash.cache_hits.presumed_fresh' );
- $logger->debug( "Timestamp-based cache hit for key '$key'." );
+ $logger->debug( "Timestamp-based cache hit for key '$key' (age: $age sec)." );
return $editInfo; // assume nothing changed
}
if ( $changed || $res->numRows() != $templateUses ) {
$stats->increment( 'editstash.cache_misses.proven_stale' );
- $logger->info( "Stale cache for key '$key'; template changed." );
+ $logger->info( "Stale cache for key '$key'; template changed. (age: $age sec)" );
return false;
}
}
if ( $changed || $res->numRows() != count( $files ) ) {
$stats->increment( 'editstash.cache_misses.proven_stale' );
- $logger->info( "Stale cache for key '$key'; file changed." );
+ $logger->info( "Stale cache for key '$key'; file changed. (age: $age sec)" );
return false;
}
}
$stats->increment( 'editstash.cache_hits.proven_fresh' );
- $logger->debug( "Cache hit for key '$key'." );
+ $logger->debug( "Verified cache hit for key '$key' (age: $age sec)." );
return $editInfo;
}
$this->dieUsageMsg( 'badaccess-groups' );
}
+
+ // Check blocks
+ if ( $user->isBlocked() ) {
+ $this->dieBlocked( $user->getBlock() );
+ }
+
+ // Global blocks
+ if ( $user->isBlockedGlobally() ) {
+ $this->dieBlocked( $user->getGlobalBlock() );
+ }
}
/**
"apihelp-delete-param-reason": "Motivo de la eliminación. Si no se especifica, se generará uno automáticamente.",
"apihelp-delete-param-tags": "Cambio de etiquetas para aplicar a la entrada en la eliminación del registro.",
"apihelp-delete-param-watch": "Añadir esta página a la lista de seguimiento del usuario actual.",
- "apihelp-delete-param-watchlist": "Incondicionalmente agregar o remover la página de la actual watchlist del usuario, usar las preferencias o no cambiar watch.",
+ "apihelp-delete-param-watchlist": "Incondicionalmente agregar o remover la página de la lista de seguimiento del usuario actual, usar las preferencias o no cambiar el seguimiento.",
"apihelp-delete-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
"apihelp-delete-example-simple": "Borrar <kbd>Main Page</kbd>.",
"apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> con el motivo <kbd>Preparing for move</kbd>.",
"apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
"apihelp-expandtemplates-param-revid": "Revisión de ID, para <nowiki>{{REVISIONID}}</nowiki> y variables similares.",
"apihelp-expandtemplates-paramvalue-prop-wikitext": "El wikitexto expandido.",
- "apihelp-expandtemplates-paramvalue-prop-categories": "Cualquier categoría presente en la entrada que no están representados en el wikitexto resultado.",
+ "apihelp-expandtemplates-paramvalue-prop-categories": "Cualesquiera categorías presentes en la entrada que no están representadas en salida de wikitexto.",
"apihelp-expandtemplates-paramvalue-prop-properties": "Propiedades de página definidas por palabras mágicas en el wikitexto.",
"apihelp-expandtemplates-paramvalue-prop-ttl": "El tiempo máximo tras el cual deberían invalidarse los resultados en caché.",
"apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "Da las variables de configuración JavaScript específicas para la página.",
"Pitke",
"Stryn",
"Jaakkoh",
- "01miki10"
+ "01miki10",
+ "Silvonen"
]
},
"apihelp-main-param-action": "Mikä toiminto suoritetaan.",
"apihelp-move-param-noredirect": "Älä luo ohjausta.",
"apihelp-move-param-watch": "Lisää sivu ja ohjaus nykyisen käyttäjän tarkkailulistalle.",
"apihelp-move-param-unwatch": "Poista sivu ja ohjaus nykyisen käyttäjän tarkkailulistalta.",
+ "apihelp-query+alllinks-paramvalue-prop-title": "Lisää linkin otsikon.",
"apihelp-query+linkshere-param-show": "Näytä vain kohteet, jotka täyttävät nämä kriteerit:\n;redirect:Näytä vain uudelleenohjaukset.\n;!redirect:Näytä vain ei-uudelleenohjaukset",
"apihelp-tag-example-rev": "Lisää tunniste <kbd>vandalism</kbd> versioon 123 antamatta perustelua.",
"apihelp-upload-param-stash": "Mikäli valittu, palvelin säilöö tiedoston väliaikaisesti tallentamisen sijaan."
--- /dev/null
+{
+ "@metadata": {
+ "authors": [
+ "SolidBlock"
+ ]
+ },
+ "apihelp-main-param-action": "要搞得操作。",
+ "apihelp-main-param-format": "出的格式。"
+}
"@metadata": {
"authors": [
"WongKentir",
- "Beeyan"
+ "Beeyan",
+ "Rachmat.Wahidi"
]
},
+ "apihelp-block-description": "Blokir pengguna.",
+ "apihelp-block-param-user": "Nama pengguna, alamat IP, atau rentang alamat IP untuk diblokir.",
"apihelp-createaccount-param-name": "Nama pengguna",
"apihelp-revisiondelete-param-ids": "Penanda untuk perubahan yang akan dihapus"
}
"Sannita",
"Macofe",
"Nemo bis",
- "JackLantern"
+ "JackLantern",
+ "Urielejh"
]
},
"apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentazione]] (in inglese)\n* [[mw:API:FAQ|FAQ]] (in inglese)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma le API sono ancora in fase attiva di sviluppo, e potrebbero cambiare in qualsiasi momento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la mailing list sugli annunci delle API MediaWiki] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite alle API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e, sia il valore dell'intestazione, sia il codice d'errore, verranno impostati con lo stesso valore. Per maggiori informazioni leggi [[mw:API:Errors_and_warnings|API:Errori ed avvertimenti]] (in inglese).\n\n<strong>Test:</strong> per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].",
"apihelp-expandtemplates-param-text": "Wikitesto da convertire.",
"apihelp-expandtemplates-param-prop": "Quale informazione ottenere.\n\nNota che se non è selezionato alcun valore, il risultato conterrà il codice wiki, ma l'output sarà in un formato obsoleto.",
"apihelp-expandtemplates-paramvalue-prop-wikitext": "Il wikitext espanso.",
+ "apihelp-expandtemplates-paramvalue-prop-properties": "Proprietà della pagina definite dalle parole magiche estese nel wikitesto.",
"apihelp-expandtemplates-paramvalue-prop-volatile": "Se l'output sia volatile e non debba essere riutilizzato altrove all'interno della pagina.",
+ "apihelp-expandtemplates-paramvalue-prop-ttl": "Il tempo massimo dopo il quale le memorizzazioni temporanee (cache) del risultato dovrebbero essere invalidate.",
"apihelp-feedcontributions-param-feedformat": "Il formato del feed.",
"apihelp-feedcontributions-param-year": "Dall'anno (e precedenti).",
"apihelp-feedcontributions-param-month": "Dal mese (e precedenti).",
"apihelp-feedrecentchanges-param-namespace": "Namespace a cui limitare i risultati.",
"apihelp-feedrecentchanges-param-associated": "Includi namespace associato (discussione o principale)",
"apihelp-feedrecentchanges-param-limit": "Numero massimo di risultati da restituire.",
+ "apihelp-feedrecentchanges-param-from": "Mostra i cambiamenti da allora.",
"apihelp-feedrecentchanges-param-hideminor": "Nascondi le modifiche minori.",
"apihelp-feedrecentchanges-param-hidebots": "Nascondi le modifiche apportate da bot.",
"apihelp-feedrecentchanges-param-hideanons": "Nascondi le modifiche fatte da utenti anonimi.",
"apihelp-login-example-gettoken": "Recupera un token di login.",
"apihelp-login-example-login": "Entra.",
"apihelp-logout-description": "Esci e cancella i dati della sessione.",
+ "apihelp-logout-example-logout": "Disconnetti l'utente attuale.",
"apihelp-mergehistory-description": "Unisce cronologie pagine.",
"apihelp-mergehistory-param-from": "Il titolo della pagina da cui cronologia sarà unita. Non può essere usato insieme a <var>$1fromid</var>.",
"apihelp-mergehistory-param-fromid": "L'ID della pagina da cui cronologia sarà unita. Non può essere usato insieme a <var>$1from</var>.",
"apihelp-query+allpages-param-prefix": "Ricerca per tutti i titoli delle pagine che iniziano con questo valore.",
"apihelp-query+allpages-param-namespace": "Il namespace da elencare.",
"apihelp-query+allpages-param-filterredir": "Quali pagine elencare.",
+ "apihelp-query+allpages-param-prtype": "Limita alle sole pagine protette.",
"apihelp-query+allpages-param-limit": "Quante pagine totali restituire.",
"apihelp-query+allpages-param-dir": "La direzione in cui elencare.",
"apihelp-query+allredirects-param-from": "Il titolo del reindirizzamento da cui iniziare l'elenco.",
"apihelp-query+blocks-paramvalue-prop-by": "Aggiunge il nome utente dell'utente che ha effettuato il blocco.",
"apihelp-query+blocks-paramvalue-prop-byid": "Aggiunge l'ID utente dell'utente che ha effettuato il blocco.",
"apihelp-query+blocks-example-simple": "Elenca i blocchi.",
+ "apihelp-query+categories-description": "Elenca tutte le categorie a cui appartengono le pagine.",
+ "apihelp-query+categories-param-prop": "Quali proprietà aggiuntive ottenere per ogni categoria.",
"apihelp-query+categories-param-show": "Quale tipo di categorie mostrare.",
"apihelp-query+categories-param-limit": "Quante categorie restituire.",
"apihelp-query+categories-param-dir": "La direzione in cui elencare.",
"apihelp-query+imageusage-param-namespace": "Il namespace da elencare.",
"apihelp-query+imageusage-param-dir": "La direzione in cui elencare.",
"apihelp-query+imageusage-param-redirect": "Se la pagina collegata è un redirect, trova tutte le pagine che puntano al redirect. Il limite massimo è dimezzato.",
+ "apihelp-query+info-description": "Ottieni informazioni base sulla pagina.",
+ "apihelp-query+info-param-prop": "Quali proprietà aggiuntive ottenere:",
"apihelp-query+info-paramvalue-prop-visitingwatchers": "Il numero di osservatori di ogni pagina che hanno visitato le ultime modifiche alla pagina, se consentito.",
"apihelp-query+iwbacklinks-param-prefix": "Prefisso per l'interwiki.",
"apihelp-query+iwbacklinks-param-limit": "Quante pagine totali restituire.",
"apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Aggiunge il titolo del collegamento linguistico.",
"apihelp-query+langbacklinks-param-dir": "La direzione in cui elencare.",
"apihelp-query+langlinks-paramvalue-prop-url": "Aggiunge l'URL completo.",
+ "apihelp-query+langlinks-paramvalue-prop-autonym": "Aggiunge il nome nativo della lingua.",
"apihelp-query+langlinks-param-dir": "La direzione in cui elencare.",
"apihelp-query+links-param-namespace": "Mostra collegamenti solo in questi namespace.",
"apihelp-query+links-param-limit": "Quanti collegamenti restituire.",
"apihelp-query+revisions-param-tag": "Elenca solo le versioni etichettate con questa etichetta.",
"apihelp-query+revisions+base-paramvalue-prop-ids": "L'ID della versione.",
"apihelp-query+revisions+base-paramvalue-prop-timestamp": "Il timestamp della versione.",
+ "apihelp-query+revisions+base-paramvalue-prop-user": "Utente che ha effettuato la versione.",
+ "apihelp-query+revisions+base-paramvalue-prop-userid": "ID utente dell'autore della versione.",
"apihelp-query+revisions+base-paramvalue-prop-content": "Testo della versione.",
"apihelp-query+revisions+base-paramvalue-prop-tags": "Etichette della versione.",
+ "apihelp-query+search-description": "Eseguire una ricerca di testo completa.",
"apihelp-query+search-param-what": "Quale tipo di ricerca effettuare.",
"apihelp-query+search-param-info": "Quali metadati restituire.",
"apihelp-query+search-param-prop": "Quali proprietà restituire.",
"apihelp-query+search-paramvalue-prop-sectiontitle": "Aggiunge il titolo della sezione corrispondente.",
"apihelp-query+search-param-limit": "Quante pagine totali restituire.",
"apihelp-query+siteinfo-param-prop": "Quali informazioni ottenere:",
+ "apihelp-query+siteinfo-paramvalue-prop-statistics": "Restituisce le statistiche del sito.",
"apihelp-query+siteinfo-paramvalue-prop-libraries": "Restituisci librerie installate sul wiki.",
"apihelp-query+siteinfo-paramvalue-prop-extensions": "Restituisci estensioni installate sul wiki.",
"apihelp-query+siteinfo-paramvalue-prop-restrictions": "Restituisce informazioni sui tipi di restrizione (protezione) disponibili.",
+ "apihelp-query+siteinfo-example-simple": "Recupera informazioni sul sito.",
"apihelp-query+tags-param-prop": "Quali proprietà ottenere:",
"apihelp-query+templates-param-limit": "Quanti template restituire.",
"apihelp-query+templates-param-dir": "La direzione in cui elencare.",
"apihelp-query+watchlist-param-prop": "Quali proprietà aggiuntive ottenere:",
"apihelp-query+watchlist-paramvalue-prop-ids": "Aggiunge l'ID versione e l'ID pagina.",
"apihelp-query+watchlist-paramvalue-prop-title": "Aggiungi il titolo della pagina.",
+ "apihelp-query+watchlist-paramvalue-type-new": "Creazioni pagina.",
"apihelp-query+watchlistraw-param-namespace": "Elenca solo le pagine nei namespace indicati.",
+ "apihelp-query+watchlistraw-param-limit": "Numero totale di risultati da restituire per ogni richiesta.",
+ "apihelp-query+watchlistraw-param-prop": "Quali proprietà aggiuntive ottenere:",
+ "apihelp-query+watchlistraw-paramvalue-prop-changed": "Aggiunge data e ora dell'ultima notifica all'utente riguardo la modifica.",
"apihelp-query+watchlistraw-param-fromtitle": "Il titolo (con prefisso namespace) da cui iniziare l'elenco.",
"apihelp-query+watchlistraw-param-totitle": "Il titolo (con prefisso namespace) al quale interrompere l'elenco.",
"apihelp-query+watchlistraw-example-simple": "Elenca le pagine fra gli osservati speciali dell'utente attuale.",
"apihelp-query+watchlistraw-example-generator": "Recupera le informazioni sulle pagine fra gli osservati speciali dell'utente attuale.",
+ "apihelp-revisiondelete-description": "Cancella e ripristina le versioni.",
+ "apihelp-revisiondelete-param-type": "Tipo di cancellazione della versione effettuata.",
+ "apihelp-revisiondelete-param-hide": "Cosa nascondere per ogni versione.",
+ "apihelp-revisiondelete-param-show": "Cosa mostrare per ogni versione.",
+ "apihelp-revisiondelete-param-reason": "Motivo per l'eliminazione o il ripristino.",
+ "apihelp-stashedit-param-title": "Titolo della pagina che si sta modificando.",
"apihelp-stashedit-param-sectiontitle": "Il titolo per una nuova sezione.",
"apihelp-stashedit-param-text": "Contenuto della pagina.",
"apihelp-stashedit-param-contentmodel": "Modello di contenuto dei nuovi contenuti.",
+ "apihelp-tag-param-reason": "Motivo per la modifica.",
"apihelp-tokens-param-type": "Tipi di token da richiedere.",
"apihelp-tokens-example-edit": "Recupera un token di modifica (il predefinito).",
"apihelp-unblock-description": "Sblocca un utente",
+ "apihelp-unblock-param-reason": "Motivo dello sblocco.",
"apihelp-unblock-param-tags": "Modifica etichette da applicare all'elemento del registro dei blocchi.",
"apihelp-undelete-param-title": "Titolo della pagina da ripristinare.",
+ "apihelp-undelete-param-reason": "Motivo per il ripristino.",
"apihelp-undelete-param-tags": "Modifica etichette da applicare all'elemento del registro delle cancellazioni.",
+ "apihelp-upload-param-watch": "Osserva la pagina.",
"apihelp-upload-param-file": "Contenuto del file.",
"apihelp-upload-example-url": "Carica da un URL.",
"apihelp-userrights-param-user": "Nome utente.",
"apihelp-createaccount-param-name": "Navê bikarhêner.",
"apihelp-delete-description": "Rûpelekê jê bibe.",
"apihelp-delete-example-simple": "<kbd>Main Page</kbd>ê jê bibe.",
+ "apihelp-edit-description": "Rûpelan çêke û biguherîne.",
"apihelp-edit-param-sectiontitle": "Sernavê bo beşeke nû.",
"apihelp-edit-param-text": "Naveroka rûpelê.",
"apihelp-edit-param-minor": "Guhertina biçûk.",
"apihelp-feedcontributions-param-deletedonly": "Tenê beşdariyên jêbirî nîşan bide.",
"apihelp-feedrecentchanges-example-simple": "Guherandinên dawî nîşan bide.",
"apihelp-feedrecentchanges-example-30days": "Guherandinên dawî yên 30 rojan nîşan bide",
+ "apihelp-filerevert-param-comment": "Şîroveyê bar bike.",
"apihelp-help-example-recursive": "Hemû alîkarî di rûpelekê de.",
"apihelp-login-param-name": "Navê bikarhêner.",
"apihelp-login-param-password": "Şîfre.",
"apihelp-login-example-login": "Têkeve.",
"apihelp-move-param-reason": "Sedemê bo guherandina nav.",
"apihelp-move-param-ignorewarnings": "Guh nede hişyariyan.",
+ "apihelp-protect-description": "Asta parastinê ya rûpelekê biguherîne.",
+ "apihelp-protect-example-protect": "Rûpelekê biparêze.",
"apihelp-tag-param-reason": "Sedemê bo guherandinê."
}
"apihelp-parse-example-text": "Расчлени викитекст.",
"apihelp-parse-example-texttitle": "Расчлени страница, укажувајќи го насловот на страницата.",
"apihelp-parse-example-summary": "Расчлени опис.",
- "apihelp-patrol-description": "Испатролирај страница или ревизија.",
+ "apihelp-patrol-description": "Испатролирај страница или преработка.",
"apihelp-patrol-param-rcid": "Назнака на спорешните промени за патролирање.",
"apihelp-patrol-param-revid": "Назнака на преработката за патролирање.",
"apihelp-patrol-example-rcid": "Испатролирај скорешна промена",
"apihelp-upload-param-offset": "Зафатнина на делот во бајти.",
"apihelp-upload-param-chunk": "Содржина на делот.",
"apihelp-upload-param-async": "Направи ги работите со потенцијално големи податотеки неусогласени, кога е можно.",
- "apihelp-upload-param-asyncdownload": "Направи го добивањето на URL-адреса неусогласено.",
- "apihelp-upload-param-leavemessage": "Ако се користи неусогласено преземање, остави порака на страницата за разговор на корисникот ако е готово.",
- "apihelp-upload-param-statuskey": "Дај ја состојбата на подигнатост за овој податотечен клуч (подигање по URL).",
"apihelp-upload-param-checkstatus": "Дај ја состојбата на подигнатост само за дадениот податотечен клуч.",
"apihelp-upload-example-url": "Подигни од URL",
"apihelp-userrights-param-user": "Корисничко име.",
"apihelp-watch-example-unwatch": "Отстрани ја страницата <kbd>Главна страница</kbd> од набљудуваните.",
"apihelp-watch-example-generator": "Набљудувај ги првите неколку страници во главниот именски простор",
"apihelp-format-example-generic": "Дај го исходот од барањето во $1-формат.",
- "apihelp-dbg-description": "Давај го изводот во PHP-форматот <code>var_export()</code> .",
- "apihelp-dbgfm-description": "Давај го изводот во PHP-форматот <code>var_export()</code> (подобрен испис во HTML).",
"apihelp-json-description": "Давај го изводот во JSON-формат.",
"apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
"apihelp-json-param-utf8": "Ако е укажано, ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> не е <kbd>1</kbd>.",
"apihelp-php-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат. Поединостите може да се изменат!\n;најнов:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
"apihelp-phpfm-description": "Давај го изводот во серијализиран PHP-формат (подобрен испис во HTML).",
"apihelp-rawfm-description": "Давај го изводот со елементи за отстранување грешки во JSON-формат (подобрен испис во HTML).",
- "apihelp-txt-description": "Давај го изводот во PHP-форматот <code>print_r()</code>.",
- "apihelp-txtfm-description": "Давај го изводот во PHP-форматот <code>print_r()</code> (подобрен испис во HTML).",
"apihelp-xml-description": "Давај го изводот во XML-формат.",
"apihelp-xml-param-xslt": "Ако е укажано, ја додава именуваната страница како XSL-стилска страница. Вредноста мора да биде наслов во именскиот простор „{{ns:mediawiki}}“ што ќе завршува со <code>.xsl</code>.",
"apihelp-xml-param-includexmlnamespace": "Ако е укажано, додава именски простор XML.",
"apihelp-xmlfm-description": "Давај го изводот во XML-формат (подобрен испис во HTML).",
- "apihelp-yaml-description": "Давај го изводот во YAML-формат.",
- "apihelp-yamlfm-description": "Давај го изводот во YAML-формат (подобрен испис во HTML).",
"api-format-title": "Резултат од Извршникот на МедијаВики",
"api-format-prettyprint-header": "Ова е HTML-претстава на форматот $1. HTML е добар за отстранување на грешки, но не е погоден за употреба во извршник.\n\nУкажете го параметарот <var>format</var> за да го смените изводниот формат. За да ги видите претставите на форматот $1 вон HTML, задајте <kbd>format=$2</kbd>.\n\nПовеќе информации ќе најдете на [[mw:API|целосната документација]], или пак [[Special:ApiHelp/main|помош со извршникот]].",
- "api-orm-param-props": "Полиња за пребарување.",
- "api-orm-param-limit": "Макс. број на редови во изводот.",
"api-pageset-param-titles": "Список на наслови на кои ќе се работи",
"api-pageset-param-pageids": "Список на назнаки за страници на кои ќе се работи",
"api-pageset-param-revids": "Список на назнаки на преработки на кои ќе се работи",
"apihelp-main-param-curtimestamp": "Dołącz obecny znacznik czasu do wyniku.",
"apihelp-block-description": "Zablokuj użytkownika.",
"apihelp-block-param-user": "Nazwa użytkownika, adres IP lub zakres adresów IP, które chcesz zablokować.",
+ "apihelp-block-param-expiry": "Czas trwania. Może być względny (np. <kbd>5 months</kbd> or <kbd>2 weeks</kbd>) lub konkretny (np. <kbd>2014-09-18T12:34:56Z</kbd>). Jeśli jest ustawiony na <kbd>infinite</kbd>, <kbd>indefinite</kbd>, lub <kbd>never</kbd>, blokada nigdy nie wygaśnie.",
"apihelp-block-param-reason": "Powód blokady.",
"apihelp-block-param-anononly": "Blokuj tylko anonimowych użytkowników (blokuje anonimowe edycje z tego adresu IP).",
"apihelp-block-param-nocreate": "Zapobiegnij utworzeniu konta.",
"apihelp-block-param-autoblock": "Zablokuj ostatni adres IP tego użytkownika i automatycznie wszystkie kolejne, z których będzie się logował.",
+ "apihelp-block-param-noemail": "Uniemożliwia użytkownikowi wysyłanie wiadomości e-mail za pośrednictwem interfejsu wiki. (Wymagane uprawnienia <code>blockemail</code>).",
"apihelp-block-param-hidename": "Ukryj nazwę użytkownika z rejestru blokad. (Wymagane uprawnienia <code>hideuser</code>)",
+ "apihelp-block-param-allowusertalk": "Pozwala użytkownikowi edytować własną stronę dyskusji (zależy od <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
"apihelp-block-param-reblock": "Jeżeli ten użytkownik jest już zablokowany, nadpisz blokadę.",
"apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz ich strony dyskusji.",
"apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni za <kbd>Pierwszy atak</kbd>.",
"api-help-param-multi-max": "Maksymalna liczba wartości to {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} dla botów).",
"api-help-param-default": "Domyślnie: $1",
"api-help-param-default-empty": "Domyślnie: <span class=\"apihelp-empty\">(puste)</span>",
+ "api-help-param-token": "Token \"$1\" zdobyty z [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
"api-help-param-no-description": "<span class=\"apihelp-empty\">(bez opisu)</span>",
"api-help-examples": "{{PLURAL:$1|Przykład|Przykłady}}:",
"api-help-permissions": "{{PLURAL:$2|Uprawnienie|Uprawnienia}}:",
--- /dev/null
+{
+ "@metadata": {
+ "authors": [
+ "Obaid Raza"
+ ]
+ },
+ "apihelp-delete-example-simple": "حذف <kbd>صفحۂ اول</kbd>."
+}
* @file
* @ingroup Cache
*/
+use MediaWiki\Linker\LinkTarget;
/**
* Class representing a list of titles
*
* @return LinkCache
*/
- public static function &singleton() {
+ public static function singleton() {
if ( !self::$instance ) {
self::$instance = new LinkCache;
}
}
/**
- * @param string $title
+ * @param string $title Prefixed DB key
* @return int Page ID or zero
*/
public function getGoodLinkID( $title ) {
* @param string $field ('length','redirect','revision','model')
* @return string|int|null
*/
- public function getGoodLinkFieldObj( $title, $field ) {
+ public function getGoodLinkFieldObj( Title $title, $field ) {
$dbkey = $title->getPrefixedDBkey();
$info = $this->mGoodLinks->get( $dbkey );
if ( !$info ) {
}
/**
- * @param string $title
+ * @param string $title Prefixed DB key
* @return bool
*/
public function isBadLink( $title ) {
}
}
+ /**
+ * @param string $title Prefixed DB key
+ */
public function clearBadLink( $title ) {
- $this->mBadLinks->clear( [ $title ] );
+ $this->mBadLinks->delete( $title );
}
/**
* @param Title $title
*/
- public function clearLink( $title ) {
+ public function clearLink( Title $title ) {
$dbkey = $title->getPrefixedDBkey();
$this->mBadLinks->delete( $dbkey );
$this->mGoodLinks->delete( $dbkey );
/**
* Add a title to the link cache, return the page_id or zero if non-existent
*
- * @param string $title Title to add
+ * @param string $title Prefixed DB key
* @return int Page ID or zero
*/
public function addLink( $title ) {
/**
* Return UTF-8 sequence for a given Unicode code point.
*
- * @param $codepoint Integer:
- * @return String
+ * @param int $codepoint
+ * @return string
* @throws InvalidArgumentException if fed out of range data.
* @public
* @deprecated since 1.25, use UtfNormal\Utils directly
* Unicode code points and return a UTF-8 string composed of those
* characters. Used by UTF-8 data generation and testing routines.
*
- * @param $sequence String
- * @return String
+ * @param string $sequence
+ * @return string
* @throws InvalidArgumentException if fed out of range data.
* @private
* @deprecated since 1.25, use UtfNormal\Utils directly
* Determine the Unicode codepoint of a single-character UTF-8 sequence.
* Does not check for invalid input data.
*
- * @param $char String
- * @return Integer
+ * @param string $char
+ * @return int
* @public
* @deprecated since 1.25, use UtfNormal\Utils directly
*/
* have it / want it.
*/
public function getAutoDeleteReason( Title $title, &$hasHistory ) {
- $dbw = wfGetDB( DB_MASTER );
+ $dbr = wfGetDB( DB_SLAVE );
// Get the last revision
$rev = Revision::newFromTitle( $title );
// Find out if there was only one contributor
// Only scan the last 20 revisions
- $res = $dbw->select( 'revision', 'rev_user_text',
+ $res = $dbr->select( 'revision', 'rev_user_text',
[
'rev_page' => $title->getArticleID(),
- $dbw->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0'
+ $dbr->bitAnd( 'rev_deleted', Revision::DELETED_USER ) . ' = 0'
],
__METHOD__,
[ 'LIMIT' => 20 ]
}
$hasHistory = ( $res->numRows() > 1 );
- $row = $dbw->fetchObject( $res );
+ $row = $dbr->fetchObject( $res );
if ( $row ) { // $row is false if the only contributor is hidden
$onlyAuthor = $row->rev_user_text;
if ( !$alias || (string)$alias === (string)$name ) {
return $name;
} else {
- return $name . ' AS ' . $alias; // PostgreSQL needs AS
+ return $name . ' AS ' . $this->addIdentifierQuotes( $alias ); // PostgreSQL needs AS
}
}
protected $mBinaryColumnCache = null;
protected $mBitColumnCache = null;
protected $mIgnoreDupKeyErrors = false;
+ protected $mIgnoreErrors = [];
protected $mPort;
$success = (bool)$stmt;
}
+ // make a copy so that anything we add below does not get reflected in future queries
+ $ignoreErrors = $this->mIgnoreErrors;
+
if ( $this->mIgnoreDupKeyErrors ) {
- // ignore duplicate key errors, but nothing else
+ // ignore duplicate key errors
// this emulates INSERT IGNORE in MySQL
- if ( $success === false ) {
- $errors = sqlsrv_errors( SQLSRV_ERR_ERRORS );
- $success = true;
-
- foreach ( $errors as $err ) {
- if ( $err['SQLSTATE'] == '23000' && $err['code'] == '2601' ) {
- continue; // duplicate key error caused by unique index
- } elseif ( $err['SQLSTATE'] == '23000' && $err['code'] == '2627' ) {
- continue; // duplicate key error caused by primary key
- } elseif ( $err['SQLSTATE'] == '01000' && $err['code'] == '3621' ) {
- continue; // generic "the statement has been terminated" error
- }
+ $ignoreErrors[] = '2601'; // duplicate key error caused by unique index
+ $ignoreErrors[] = '2627'; // duplicate key error caused by primary key
+ $ignoreErrors[] = '3621'; // generic "the statement has been terminated" error
+ }
- $success = false; // getting here means we got an error we weren't expecting
- break;
- }
+ if ( $success === false ) {
+ $errors = sqlsrv_errors();
+ $success = true;
- if ( $success ) {
- $this->mAffectedRows = 0;
- return $stmt;
+ foreach ( $errors as $err ) {
+ if ( !in_array( $err['code'], $ignoreErrors ) ) {
+ $success = false;
+ break;
}
}
- }
- if ( $success === false ) {
- return false;
+ if ( $success === false ) {
+ return false;
+ }
}
// remember number of rows affected
$this->mAffectedRows = sqlsrv_rows_affected( $stmt );
$res = $res->result;
}
- return sqlsrv_num_rows( $res );
+ $ret = sqlsrv_num_rows( $res );
+
+ if ( $ret === false ) {
+ // we cannot get an amount of rows from this cursor type
+ // has_rows returns bool true/false if the result has rows
+ $ret = (int)sqlsrv_has_rows( $res );
+ }
+
+ return $ret;
}
/**
# This does not return the same info as MYSQL would, but that's OK
# because MediaWiki never uses the returned value except to check for
# the existance of indexes.
- $sql = "sp_helpindex '" . $table . "'";
+ $sql = "sp_helpindex '" . $this->tableName( $table ) . "'";
$res = $this->query( $sql, $fname );
+
if ( !$res ) {
return null;
}
$row = $ret->fetchObject();
if ( is_object( $row ) ) {
$this->mInsertId = $row->$identity;
+
+ // it seems that mAffectedRows is -1 sometimes when OUTPUT INSERTED.identity is used
+ // if we got an identity back, we know for sure a row was affected, so adjust that here
+ if ( $this->mAffectedRows == -1 ) {
+ $this->mAffectedRows = 1;
+ }
}
}
}
return strlen( $name ) && $name[0] == '[' && substr( $name, -1, 1 ) == ']';
}
+ /**
+ * MS SQL supports more pattern operators than other databases (ex: [,],^)
+ *
+ * @param string $s
+ * @return string
+ */
+ protected function escapeLikeInternal( $s ) {
+ return addcslashes( $s, '\%_[]^' );
+ }
+
+ /**
+ * MS SQL requires specifying the escape character used in a LIKE query
+ * or using Square brackets to surround characters that are to be escaped
+ * http://msdn.microsoft.com/en-us/library/ms179859.aspx
+ * Here we take the Specify-Escape-Character approach since it's less
+ * invasive, renders a query that is closer to other DB's and better at
+ * handling square bracket escaping
+ *
+ * @return string Fully built LIKE statement
+ */
+ public function buildLike() {
+ $params = func_get_args();
+ if ( count( $params ) > 0 && is_array( $params[0] ) ) {
+ $params = $params[0];
+ }
+
+ return parent::buildLike( $params ) . " ESCAPE '\' ";
+ }
+
/**
* @param string $db
* @return bool
return $table;
}
+ /**
+ * Delete a table
+ * @param string $tableName
+ * @param string $fName
+ * @return bool|ResultWrapper
+ * @since 1.18
+ */
+ public function dropTable( $tableName, $fName = __METHOD__ ) {
+ if ( !$this->tableExists( $tableName, $fName ) ) {
+ return false;
+ }
+
+ // parent function incorrectly appends CASCADE, which we don't want
+ $sql = "DROP TABLE " . $this->tableName( $tableName );
+
+ return $this->query( $sql, $fName );
+ }
+
/**
* Called in the installer and updater.
* Probably doesn't need to be called anywhere else in the codebase.
public function scrollableCursor( $value = null ) {
return wfSetVar( $this->mScrollableCursor, $value );
}
+
+ /**
+ * Called in the installer and updater.
+ * Probably doesn't need to be called anywhere else in the codebase.
+ * @param array|null $value
+ * @return array|null
+ */
+ public function ignoreErrors( array $value = null ) {
+ return wfSetVar( $this->mIgnoreErrors, $value );
+ }
} // end DatabaseMssql class
/**
$sql
);
+ // last check for invalid utf8
+ $sql = UtfNormal\Validator::cleanUp( $sql );
+
self::$query[] = [
'sql' => $sql,
'function' => $function,
*/
use Wikimedia\Assert\Assert;
+use MediaWiki\MediaWikiServices;
/**
* Handles purging appropriate CDN URLs given a title (or titles)
wfDebugLog( 'squid', __METHOD__ . ': ' . implode( ' ', $urlArr ) );
// Reliably broadcast the purge to all edge nodes
- $relayer = EventRelayerGroup::singleton()->getRelayer( 'cdn-url-purges' );
+ $relayer = MediaWikiServices::getInstance()->getEventRelayerGroup()
+ ->getRelayer( 'cdn-url-purges' );
$relayer->notify(
'cdn-url-purges',
[
/** @var array Map of language codes to titles */
public $mInterlangs;
+ /** @var array 2-D map of (prefix => DBK => 1) */
+ public $mInterwikis;
+
/** @var array Map of arbitrary name to value */
public $mProperties;
* @ingroup Search
*/
+use MediaWiki\MediaWikiServices;
+
/**
* Database independant search index updater
*
* Perform actual update for the entry
*/
public function doUpdate() {
- global $wgDisableSearchUpdate;
+ $config = MediaWikiServices::getInstance()->getSearchEngineConfig();
- if ( $wgDisableSearchUpdate || !$this->id ) {
+ if ( $config->getConfig()->get( 'DisableSearchUpdate' ) || !$this->id ) {
return;
}
- foreach ( SearchEngine::getSearchTypes() as $type ) {
- $search = SearchEngine::create( $type );
+ $seFactory = MediaWikiServices::getInstance()->getSearchEngineFactory();
+ foreach ( $config->getSearchTypes() as $type ) {
+ $search = $seFactory->create( $type );
if ( !$search->supports( 'search-update' ) ) {
continue;
}
$text = $search->getTextFromContent( $this->title, $this->content );
if ( !$search->textAlreadyUpdatedForIndex() ) {
- $text = self::updateText( $text );
+ $text = $this->updateText( $text, $search );
}
# Perform the actual update
* If you're using a real search engine, you'll probably want to override
* this behavior and do something nicer with the original wikitext.
* @param string $text
+ * @param SearchEngine $se Search engine
* @return string
*/
- public static function updateText( $text ) {
+ public function updateText( $text, SearchEngine $se = null ) {
global $wgContLang;
# Language-specific strip/conversion
$text = $wgContLang->normalizeForSearch( $text );
- $lc = SearchEngine::legalSearchChars() . '&#;';
+ $se = $se ?: MediaWikiServices::getInstance()->newSearchEngine();
+ $lc = $se->legalSearchChars() . '&#;';
$text = preg_replace( "/<\\/?\\s*[A-Za-z][^>]*?>/",
' ', $wgContLang->lc( " " . $text . " " ) ); # Strip HTML markup
* @param string[] $to_lines
*/
private function diffLocal( $from_lines, $to_lines ) {
- global $wgExternalDiffEngine;
-
- if ( $wgExternalDiffEngine == 'wikidiff3' ) {
- // wikidiff3
- $wikidiff3 = new WikiDiff3();
- $wikidiff3->diff( $from_lines, $to_lines );
- $this->xchanged = $wikidiff3->removed;
- $this->ychanged = $wikidiff3->added;
- unset( $wikidiff3 );
- } else {
- // old diff
- $n_from = count( $from_lines );
- $n_to = count( $to_lines );
- $this->xchanged = $this->ychanged = [];
- $this->xv = $this->yv = [];
- $this->xind = $this->yind = [];
- $this->seq = [];
- $this->in_seq = [];
- $this->lcs = 0;
-
- // Skip leading common lines.
- for ( $skip = 0; $skip < $n_from && $skip < $n_to; $skip++ ) {
- if ( $from_lines[$skip] !== $to_lines[$skip] ) {
- break;
- }
- $this->xchanged[$skip] = $this->ychanged[$skip] = false;
- }
- // Skip trailing common lines.
- $xi = $n_from;
- $yi = $n_to;
- for ( $endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++ ) {
- if ( $from_lines[$xi] !== $to_lines[$yi] ) {
- break;
- }
- $this->xchanged[$xi] = $this->ychanged[$yi] = false;
- }
-
- // Ignore lines which do not exist in both files.
- for ( $xi = $skip; $xi < $n_from - $endskip; $xi++ ) {
- $xhash[$this->lineHash( $from_lines[$xi] )] = 1;
- }
-
- for ( $yi = $skip; $yi < $n_to - $endskip; $yi++ ) {
- $line = $to_lines[$yi];
- $this->ychanged[$yi] = empty( $xhash[$this->lineHash( $line )] );
- if ( $this->ychanged[$yi] ) {
- continue;
- }
- $yhash[$this->lineHash( $line )] = 1;
- $this->yv[] = $line;
- $this->yind[] = $yi;
- }
- for ( $xi = $skip; $xi < $n_from - $endskip; $xi++ ) {
- $line = $from_lines[$xi];
- $this->xchanged[$xi] = empty( $yhash[$this->lineHash( $line )] );
- if ( $this->xchanged[$xi] ) {
- continue;
- }
- $this->xv[] = $line;
- $this->xind[] = $xi;
- }
-
- // Find the LCS.
- $this->compareSeq( 0, count( $this->xv ), 0, count( $this->yv ) );
- }
- }
-
- /**
- * Returns the whole line if it's small enough, or the MD5 hash otherwise
- *
- * @param string $line
- *
- * @return string
- */
- private function lineHash( $line ) {
- if ( strlen( $line ) > self::MAX_XREF_LENGTH ) {
- return md5( $line );
- } else {
- return $line;
- }
- }
-
- /**
- * Divide the Largest Common Subsequence (LCS) of the sequences
- * [XOFF, XLIM) and [YOFF, YLIM) into NCHUNKS approximately equally
- * sized segments.
- *
- * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an
- * array of NCHUNKS+1 (X, Y) indexes giving the diving points between
- * sub sequences. The first sub-sequence is contained in [X0, X1),
- * [Y0, Y1), the second in [X1, X2), [Y1, Y2) and so on. Note
- * that (X0, Y0) == (XOFF, YOFF) and
- * (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
- *
- * This function assumes that the first lines of the specified portions
- * of the two files do not match, and likewise that the last lines do not
- * match. The caller must trim matching lines from the beginning and end
- * of the portions it is going to specify.
- *
- * @param int $xoff
- * @param int $xlim
- * @param int $yoff
- * @param int $ylim
- * @param int $nchunks
- *
- * @return array List of two elements, integer and array[].
- */
- private function diag( $xoff, $xlim, $yoff, $ylim, $nchunks ) {
- $flip = false;
-
- if ( $xlim - $xoff > $ylim - $yoff ) {
- // Things seems faster (I'm not sure I understand why)
- // when the shortest sequence in X.
- $flip = true;
- list( $xoff, $xlim, $yoff, $ylim ) = [ $yoff, $ylim, $xoff, $xlim ];
- }
-
- if ( $flip ) {
- for ( $i = $ylim - 1; $i >= $yoff; $i-- ) {
- $ymatches[$this->xv[$i]][] = $i;
- }
- } else {
- for ( $i = $ylim - 1; $i >= $yoff; $i-- ) {
- $ymatches[$this->yv[$i]][] = $i;
- }
- }
-
- $this->lcs = 0;
- $this->seq[0] = $yoff - 1;
- $this->in_seq = [];
- $ymids[0] = [];
-
- $numer = $xlim - $xoff + $nchunks - 1;
- $x = $xoff;
- for ( $chunk = 0; $chunk < $nchunks; $chunk++ ) {
- if ( $chunk > 0 ) {
- for ( $i = 0; $i <= $this->lcs; $i++ ) {
- $ymids[$i][$chunk - 1] = $this->seq[$i];
- }
- }
-
- $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $chunk ) / $nchunks );
- // @codingStandardsIgnoreStart Ignore Squiz.WhiteSpace.SemicolonSpacing.Incorrect
- for ( ; $x < $x1; $x++ ) {
- // @codingStandardsIgnoreEnd
- $line = $flip ? $this->yv[$x] : $this->xv[$x];
- if ( empty( $ymatches[$line] ) ) {
- continue;
- }
-
- $k = 0;
- $matches = $ymatches[$line];
- reset( $matches );
- while ( list( , $y ) = each( $matches ) ) {
- if ( empty( $this->in_seq[$y] ) ) {
- $k = $this->lcsPos( $y );
- assert( $k > 0 );
- $ymids[$k] = $ymids[$k - 1];
- break;
- }
- }
-
- while ( list( , $y ) = each( $matches ) ) {
- if ( $y > $this->seq[$k - 1] ) {
- assert( $y < $this->seq[$k] );
- // Optimization: this is a common case:
- // next match is just replacing previous match.
- $this->in_seq[$this->seq[$k]] = false;
- $this->seq[$k] = $y;
- $this->in_seq[$y] = 1;
- } elseif ( empty( $this->in_seq[$y] ) ) {
- $k = $this->lcsPos( $y );
- assert( $k > 0 );
- $ymids[$k] = $ymids[$k - 1];
- }
- }
- }
- }
-
- $seps[] = $flip ? [ $yoff, $xoff ] : [ $xoff, $yoff ];
- $ymid = $ymids[$this->lcs];
- for ( $n = 0; $n < $nchunks - 1; $n++ ) {
- $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $n ) / $nchunks );
- $y1 = $ymid[$n] + 1;
- $seps[] = $flip ? [ $y1, $x1 ] : [ $x1, $y1 ];
- }
- $seps[] = $flip ? [ $ylim, $xlim ] : [ $xlim, $ylim ];
-
- return [ $this->lcs, $seps ];
- }
-
- /**
- * @param int $ypos
- *
- * @return int
- */
- private function lcsPos( $ypos ) {
- $end = $this->lcs;
- if ( $end == 0 || $ypos > $this->seq[$end] ) {
- $this->seq[++$this->lcs] = $ypos;
- $this->in_seq[$ypos] = 1;
-
- return $this->lcs;
- }
-
- $beg = 1;
- while ( $beg < $end ) {
- $mid = (int)( ( $beg + $end ) / 2 );
- if ( $ypos > $this->seq[$mid] ) {
- $beg = $mid + 1;
- } else {
- $end = $mid;
- }
- }
-
- assert( $ypos != $this->seq[$end] );
-
- $this->in_seq[$this->seq[$end]] = false;
- $this->seq[$end] = $ypos;
- $this->in_seq[$ypos] = 1;
-
- return $end;
- }
-
- /**
- * Find LCS of two sequences.
- *
- * The results are recorded in the vectors $this->{x,y}changed[], by
- * storing a 1 in the element for each line that is an insertion
- * or deletion (ie. is not in the LCS).
- *
- * The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
- *
- * Note that XLIM, YLIM are exclusive bounds.
- * All line numbers are origin-0 and discarded lines are not counted.
- *
- * @param int $xoff
- * @param int $xlim
- * @param int $yoff
- * @param int $ylim
- */
- private function compareSeq( $xoff, $xlim, $yoff, $ylim ) {
- // Slide down the bottom initial diagonal.
- while ( $xoff < $xlim && $yoff < $ylim && $this->xv[$xoff] == $this->yv[$yoff] ) {
- ++$xoff;
- ++$yoff;
- }
-
- // Slide up the top initial diagonal.
- while ( $xlim > $xoff && $ylim > $yoff
- && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]
- ) {
- --$xlim;
- --$ylim;
- }
-
- if ( $xoff == $xlim || $yoff == $ylim ) {
- $lcs = 0;
- } else {
- // This is ad hoc but seems to work well.
- // $nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5);
- // $nchunks = max(2,min(8,(int)$nchunks));
- $nchunks = min( 7, $xlim - $xoff, $ylim - $yoff ) + 1;
- list( $lcs, $seps ) = $this->diag( $xoff, $xlim, $yoff, $ylim, $nchunks );
- }
-
- if ( $lcs == 0 ) {
- // X and Y sequences have no common subsequence:
- // mark all changed.
- while ( $yoff < $ylim ) {
- $this->ychanged[$this->yind[$yoff++]] = 1;
- }
- while ( $xoff < $xlim ) {
- $this->xchanged[$this->xind[$xoff++]] = 1;
- }
- } else {
- // Use the partitions to split this problem into subproblems.
- reset( $seps );
- $pt1 = $seps[0];
- while ( $pt2 = next( $seps ) ) {
- $this->compareSeq( $pt1[0], $pt2[0], $pt1[1], $pt2[1] );
- $pt1 = $pt2;
- }
- }
+ $wikidiff3 = new WikiDiff3();
+ $wikidiff3->diff( $from_lines, $to_lines );
+ $this->xchanged = $wikidiff3->removed;
+ $this->ychanged = $wikidiff3->added;
}
/**
$otext = str_replace( "\r\n", "\n", $otext );
$ntext = str_replace( "\r\n", "\n", $ntext );
- if ( $wgExternalDiffEngine == 'wikidiff' ) {
- wfDeprecated( 'wikidiff support', '1.27' );
+ if ( $wgExternalDiffEngine == 'wikidiff' || $wgExternalDiffEngine == 'wikidiff3' ) {
+ wfDeprecated( "\$wgExternalDiffEngine = '{$wgExternalDiffEngine}'", '1.27' );
$wgExternalDiffEngine = false;
}
return $text;
}
- } elseif ( $wgExternalDiffEngine != 'wikidiff3' && $wgExternalDiffEngine !== false ) {
+ } elseif ( $wgExternalDiffEngine !== false ) {
# Diff via the shell
$tmpDir = wfTempDir();
$tempName1 = tempnam( $tmpDir, 'diff_' );
return $status; // skip checks
}
+ // Preload all of the stat info in as few round trips as possible...
+ foreach ( $this->backends as $backend ) {
+ $realPaths = $this->substPaths( $paths, $backend );
+ $backend->preloadFileStat( [ 'srcs' => $realPaths, 'latest' => true ] );
+ }
+
$mBackend = $this->backends[$this->masterIndex];
foreach ( $paths as $path ) {
$params = [ 'src' => $path, 'latest' => true ];
}
}
+ if ( !$status->isOK() ) {
+ wfDebugLog( 'FileOperation', get_class( $this ) .
+ " failed to resync: " . FormatJson::encode( $paths ) );
+ }
+
return $status;
}
return;
}
+ $upgrade = false;
if ( is_null( $this->media_type ) ||
$this->mime == 'image/svg'
) {
- $this->upgradeRow();
- $this->upgraded = true;
+ $upgrade = true;
} else {
$handler = $this->getHandler();
if ( $handler ) {
if ( $validity === MediaHandler::METADATA_BAD
|| ( $validity === MediaHandler::METADATA_COMPATIBLE && $wgUpdateCompatibleMetadata )
) {
- $this->upgradeRow();
- $this->upgraded = true;
+ $upgrade = true;
}
}
}
+
+ if ( $upgrade ) {
+ try {
+ $this->upgradeRow();
+ } catch ( LocalFileLockError $e ) {
+ // let the other process handle it (or do it next time)
+ }
+ $this->upgraded = true; // avoid rework/retries
+ }
}
function getUpgraded() {
* Fix assorted version-related problems with the image row by reloading it from the file
*/
function upgradeRow() {
-
$this->lock(); // begin
$this->loadFromFile();
/**
* Start a transaction and lock the image for update
* Increments a reference counter if the lock is already held
- * @throws MWException Throws an error if the lock was not acquired
+ * @throws LocalFileLockError Throws an error if the lock was not acquired
* @return bool Whether the file lock owns/spawned the DB transaction
*/
function lock() {
- $dbw = $this->repo->getMasterDB();
-
if ( !$this->locked ) {
+ $dbw = $this->repo->getMasterDB();
if ( !$dbw->trxLevel() ) {
$dbw->begin( __METHOD__ );
$this->lockedOwnTrx = true;
}
- $this->locked++;
// Bug 54736: use simple lock to handle when the file does not exist.
// SELECT FOR UPDATE prevents changes, not other SELECTs with FOR UPDATE.
// Also, that would cause contention on INSERT of similarly named rows.
$lockPaths = [ $this->getPath() ]; // represents all versions of the file
$status = $backend->lockFiles( $lockPaths, LockManager::LOCK_EX, 5 );
if ( !$status->isGood() ) {
- throw new MWException( "Could not acquire lock for '{$this->getName()}.'" );
+ if ( $this->lockedOwnTrx ) {
+ $dbw->rollback( __METHOD__ );
+ }
+ throw new LocalFileLockError( "Could not acquire lock for '{$this->getName()}.'" );
}
+ // Release the lock *after* commit to avoid row-level contention
+ $this->locked++;
$dbw->onTransactionIdle( function () use ( $backend, $lockPaths ) {
- $backend->unlockFiles( $lockPaths, LockManager::LOCK_EX ); // release on commit
+ $backend->unlockFiles( $lockPaths, LockManager::LOCK_EX );
} );
}
$this->file->repo->cleanupBatch( $files );
}
}
+
+class LocalFileLockError extends Exception {
+
+}
/**
* @param WebRequest $request
*
- * @return string
+ * @return bool
*/
function loadDataFromRequest( $request ) {
$invert = isset( $this->mParams['invert'] ) && $this->mParams['invert'];
? !$request->getBool( $this->mName )
: $request->getBool( $this->mName );
} else {
- return $this->getDefault();
+ return (bool)$this->getDefault();
}
}
}
# Check for cancelled submission
foreach ( $this->mFlatFields as $fieldname => $field ) {
- if ( !empty( $field->mParams['nodata'] ) ) {
+ if ( !array_key_exists( $fieldname, $this->mFieldData ) ) {
continue;
}
if ( $field->cancelSubmit( $this->mFieldData[$fieldname], $this->mFieldData ) ) {
# Check for validation
foreach ( $this->mFlatFields as $fieldname => $field ) {
- if ( !empty( $field->mParams['nodata'] ) ) {
+ if ( !array_key_exists( $fieldname, $this->mFieldData ) ) {
continue;
}
if ( $field->isHidden( $this->mFieldData ) ) {
];
if ( isset( $button['label-message'] ) ) {
- $label = $this->msg( $button['label-message'] )->parse();
+ $label = $this->getMessage( $button['label-message'] )->parse();
} elseif ( isset( $button['label'] ) ) {
$label = htmlspecialchars( $button['label'] );
} elseif ( isset( $button['label-raw'] ) ) {
$errorstr = '';
foreach ( $errors as $error ) {
- if ( is_array( $error ) ) {
- $msg = array_shift( $error );
- } else {
- $msg = $error;
- $error = [];
- }
-
$errorstr .= Html::rawElement(
'li',
[],
- $this->msg( $msg, $error )->parse()
+ $this->getMessage( $error )->parse()
);
}
* @param string $fieldsetIDPrefix ID prefix for the "<fieldset>" tag of
* each subsection, ignored if empty.
* @param bool &$hasUserVisibleFields Whether the section had user-visible fields.
+ * @throws LogicException When called on uninitialized field data, e.g. When
+ * HTMLForm::displayForm was called without calling HTMLForm::prepareForm
+ * first.
*
* @return string
*/
public function displaySection( $fields,
$sectionName = '',
$fieldsetIDPrefix = '',
- &$hasUserVisibleFields = false ) {
+ &$hasUserVisibleFields = false
+ ) {
+ if ( $this->mFieldData === null ) {
+ throw new LogicException( 'HTMLForm::displaySection() called on uninitialized field data. '
+ . 'You probably called displayForm() without calling prepareForm() first.' );
+ }
+
$displayFormat = $this->getDisplayFormat();
$html = [];
foreach ( $fields as $key => $value ) {
if ( $value instanceof HTMLFormField ) {
- $v = isset( $this->mFieldData[$key] )
+ $v = array_key_exists( $key, $this->mFieldData )
? $this->mFieldData[$key]
: $value->getDefault();
return $this;
}
+
+ /**
+ * Turns a *-message parameter (which could be a MessageSpecifier, or a message name, or a
+ * name + parameters array) into a Message.
+ * @param mixed $value
+ * @return Message
+ */
+ protected function getMessage( $value ) {
+ return Message::newFromSpecifier( $value )->setContext( $this );
+ }
}
$tmp = $m[1];
}
if ( substr( $tmp, 0, 2 ) == 'wp' &&
- !isset( $alldata[$tmp] ) &&
- isset( $alldata[substr( $tmp, 2 )] )
+ !array_key_exists( $tmp, $alldata ) &&
+ array_key_exists( substr( $tmp, 2 ), $alldata )
) {
// Adjust for name mangling.
$tmp = substr( $tmp, 2 );
$data = $alldata;
while ( $keys ) {
$key = array_shift( $keys );
- if ( !is_array( $data ) || !isset( $data[$key] ) ) {
+ if ( !is_array( $data ) || !array_key_exists( $key, $data ) ) {
continue 2;
}
$data = $data[$key];
* @return Message
*/
protected function getMessage( $value ) {
- if ( $value instanceof Message ) {
- return $value;
- } elseif ( $value instanceof MessageSpecifier ) {
- return Message::newFromKey( $value );
- } elseif ( is_array( $value ) ) {
- $msg = array_shift( $value );
- return $this->msg( $msg, $value );
- } else {
- return $this->msg( $value, [] );
- }
+ return Message::newFromSpecifier( $value )->setContext( $this->mParent );
}
/**
foreach ( $values as $key => $value ) {
$fields = $this->createFieldsForKey( $key );
foreach ( $fields as $fieldname => $field ) {
- if ( !empty( $field->mParams['nodata'] ) ) {
+ if ( !array_key_exists( $fieldname, $value ) ) {
continue;
}
if ( $field->cancelSubmit( $value[$fieldname], $alldata ) ) {
foreach ( $values as $key => $value ) {
$fields = $this->createFieldsForKey( $key );
foreach ( $fields as $fieldname => $field ) {
- if ( !empty( $field->mParams['nodata'] ) ) {
+ if ( !array_key_exists( $fieldname, $value ) ) {
continue;
}
$ok = $field->validate( $value[$fieldname], $alldata );
$fields = $this->createFieldsForKey( $key );
foreach ( $fields as $fieldname => $field ) {
- $v = isset( $values[$fieldname] )
+ $v = array_key_exists( $fieldname, $values )
? $values[$fieldname]
: $field->getDefault();
if ( $isBadIE ) {
$label = $button['value'];
} elseif ( isset( $button['label-message'] ) ) {
- $label = new OOUI\HtmlSnippet( $this->msg( $button['label-message'] )->parse() );
+ $label = new OOUI\HtmlSnippet( $this->getMessage( $button['label-message'] )->parse() );
} elseif ( isset( $button['label'] ) ) {
$label = $button['label'];
} elseif ( isset( $button['label-raw'] ) ) {
}
foreach ( $errors as &$error ) {
- if ( is_array( $error ) ) {
- $msg = array_shift( $error );
- } else {
- $msg = $error;
- $error = [];
- }
- // if the error is already a message object, don't use it as a message key
- if ( !$msg instanceof Message ) {
- $error = $this->msg( $msg, $error )->parse();
- } else {
- $error = $msg->parse();
- }
+ $error = $this->getMessage( $error )->parse();
$error = new OOUI\HtmlSnippet( $error );
}
wfMessage( 'mainpagedocfooter' )->inContentLanguage()->text()
);
- $page->doEditContent( $content,
+ $status = $page->doEditContent( $content,
'',
EDIT_NEW,
false,
"CREATE DATABASE " . $conn->addIdentifierQuotes( $dbName ),
__METHOD__
);
- $conn->selectDB( $dbName );
- if ( !$this->schemaExists( $schemaName ) ) {
- $conn->query(
- "CREATE SCHEMA " . $conn->addIdentifierQuotes( $schemaName ),
- __METHOD__
- );
- }
- if ( !$this->catalogExists( $schemaName ) ) {
- $conn->query(
- "CREATE FULLTEXT CATALOG " . $conn->addIdentifierQuotes( $schemaName ),
- __METHOD__
- );
- }
+ }
+ $conn->selectDB( $dbName );
+ if ( !$this->schemaExists( $schemaName ) ) {
+ $conn->query(
+ "CREATE SCHEMA " . $conn->addIdentifierQuotes( $schemaName ),
+ __METHOD__
+ );
+ }
+ if ( !$this->catalogExists( $schemaName ) ) {
+ $conn->query(
+ "CREATE FULLTEXT CATALOG " . $conn->addIdentifierQuotes( $schemaName ),
+ __METHOD__
+ );
}
$this->setupSchemaVars();
[ 'addField', 'mwuser', 'user_password_expires', 'patch-user_password_expires.sql' ],
// 1.24
- [ 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql' ],
+ [ 'addField', 'page', 'page_lang', 'patch-page_page_lang.sql' ],
// 1.25
[ 'dropTable', 'hitcounter' ],
[ 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ],
[ 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ],
- // Constraint updates
- [ 'updateConstraints', 'category_types', 'categorylinks', 'cl_type' ],
- [ 'updateConstraints', 'major_mime', 'filearchive', 'fa_major_mime' ],
- [ 'updateConstraints', 'media_type', 'filearchive', 'fa_media_type' ],
- [ 'updateConstraints', 'major_mime', 'oldimage', 'oi_major_mime' ],
- [ 'updateConstraints', 'media_type', 'oldimage', 'oi_media_type' ],
- [ 'updateConstraints', 'major_mime', 'image', 'img_major_mime' ],
- [ 'updateConstraints', 'media_type', 'image', 'img_media_type' ],
- [ 'updateConstraints', 'media_type', 'uploadstash', 'us_media_type' ],
- // END: Constraint updates
+ // scripts were updated in 1.27 due to SQL errors; retaining old updatekeys so that people
+ // updating from 1.23->1.25->1.27 do not execute these scripts twice even though the
+ // updatekeys no longer make sense as they are.
+ [ 'updateSchema', 'categorylinks', 'cl_type-category_types-ck',
+ 'patch-categorylinks-constraints.sql' ],
+ [ 'updateSchema', 'filearchive', 'fa_major_mime-major_mime-ck',
+ 'patch-filearchive-constraints.sql' ],
+ [ 'updateSchema', 'oldimage', 'oi_major_mime-major_mime-ck',
+ 'patch-oldimage-constraints.sql' ],
+ [ 'updateSchema', 'image', 'img_major_mime-major_mime-ck', 'patch-image-constraints.sql' ],
+ [ 'updateSchema', 'uploadstash', 'us_media_type-media_type-ck',
+ 'patch-uploadstash-constraints.sql' ],
[ 'modifyField', 'image', 'img_major_mime',
'patch-img_major_mime-chemical.sql' ],
[ 'dropTable', 'msg_resource_links' ],
[ 'dropTable', 'msg_resource' ],
[ 'addField', 'watchlist', 'wl_id', 'patch-watchlist-wl_id.sql' ],
+ [ 'dropField', 'mwuser', 'user_options', 'patch-drop-user_options.sql' ],
+ [ 'addTable', 'bot_passwords', 'patch-bot_passwords.sql' ],
+ [ 'addField', 'pagelinks', 'pl_from_namespace', 'patch-pl_from_namespace.sql' ],
+ [ 'addField', 'templatelinks', 'tl_from_namespace', 'patch-tl_from_namespace.sql' ],
+ [ 'addField', 'imagelinks', 'il_from_namespace', 'patch-il_from_namespace.sql' ],
+ [ 'dropIndex', 'categorylinks', 'cl_collation', 'patch-kill-cl_collation_index.sql' ],
+ [ 'addIndex', 'categorylinks', 'cl_collation_ext',
+ 'patch-add-cl_collation_ext_index.sql' ],
+ [ 'dropField', 'recentchanges', 'rc_cur_time', 'patch-drop-rc_cur_time.sql' ],
+ [ 'addField', 'page_props', 'pp_sortkey', 'patch-pp_sortkey.sql' ],
+ [ 'updateSchema', 'oldimage', 'oldimage varchar', 'patch-oldimage-schema.sql' ],
+ [ 'updateSchema', 'filearchive', 'filearchive varchar', 'patch-filearchive-schema.sql' ],
+ [ 'updateSchema', 'image', 'image varchar', 'patch-image-schema.sql' ]
];
}
+ protected function applyPatch( $path, $isFullPath = false, $msg = null ) {
+ $prevScroll = $this->db->scrollableCursor( false );
+ $prevPrep = $this->db->prepareStatements( false );
+ parent::applyPatch( $path, $isFullPath, $msg );
+ $this->db->scrollableCursor( $prevScroll );
+ $this->db->prepareStatements( $prevPrep );
+ }
+
/**
- * Drops unnamed and creates named constraints following the pattern
- * <column>_ckc
+ * General schema update for a table that touches more than one field or requires
+ * destructive actions (such as dropping and recreating the table).
*
- * @param string $constraintType
- * @param string $table Name of the table to which the field belongs
- * @param string $field Name of the field to modify
- * @return bool False if patch is skipped.
+ * @param string $table
+ * @param string $updatekey
+ * @param string $patch
+ * @param bool $fullpath
*/
- protected function updateConstraints( $constraintType, $table, $field ) {
- global $wgDBname, $wgDBmwschema;
-
- if ( !$this->doTable( $table ) ) {
- return true;
- }
-
- $this->output( "...updating constraints on [$table].[$field] ..." );
- $updateKey = "$field-$constraintType-ck";
+ protected function updateSchema( $table, $updatekey, $patch, $fullpath = false ) {
if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
- $this->output( "...$table table does not exist, skipping modify field patch.\n" );
- return true;
- } elseif ( !$this->db->fieldExists( $table, $field, __METHOD__ ) ) {
- $this->output( "...$field field does not exist in $table table, " .
- "skipping modify field patch.\n" );
- return true;
- } elseif ( $this->updateRowExists( $updateKey ) ) {
- $this->output( "...$field in table $table already patched.\n" );
- return true;
- }
-
- # After all checks passed, start the update
- $this->insertUpdateRow( $updateKey );
- $path = 'named_constraints.sql';
- $constraintMap = [
- 'category_types' =>
- "($field in('page', 'subcat', 'file'))",
- 'major_mime' =>
- "($field in('unknown', 'application', 'audio', 'image', 'text', 'video'," .
- " 'message', 'model', 'multipart'))",
- 'media_type' =>
- "($field in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA'," .
- "'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))"
- ];
- $constraint = $constraintMap[$constraintType];
-
- # and hack-in those variables that should be replaced
- # in our template file right now
- $this->db->setSchemaVars( [
- 'tableName' => $table,
- 'fieldName' => $field,
- 'checkConstraint' => $constraint,
- 'wgDBname' => $wgDBname,
- 'wgDBmwschema' => $wgDBmwschema,
- ] );
-
- # Full path from file name
- $path = $this->db->patchPath( $path );
-
- # No need for a cursor allowing result-iteration; just apply a patch
- # store old value for re-setting later
- $wasScrollable = $this->db->scrollableCursor( false );
+ $this->output( "...$table table does not exist, skipping schema update patch.\n" );
+ } elseif ( $this->updateRowExists( $updatekey ) ) {
+ $this->output( "...$table already had schema updated by $patch.\n" );
+ } else {
+ $this->insertUpdateRow( $updatekey );
- # Apply patch
- $this->db->sourceFile( $path );
-
- # Reset DB instance to have original state
- $this->db->setSchemaVars( false );
- $this->db->scrollableCursor( $wasScrollable );
-
- $this->output( "done.\n" );
+ return $this->applyPatch( $patch, $fullpath, "Updating schema of table $table" );
+ }
return true;
}
--- /dev/null
+{
+ "@metadata": {
+ "authors": [
+ "SolidBlock"
+ ]
+ },
+ "config-desc": "MediaWiki安装程序",
+ "config-title": "MediaWiki $1配置",
+ "config-information": "信息",
+ "config-localsettings-upgrade": "发现哒<code>LocalSettings.php</code>文件。要提升啯杂配置,就于啯杂框框中输入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中寻它。",
+ "config-localsettings-cli-upgrade": "查噶<code>LocalSettings.php</code>文件。要升级啯杂配置,请直接走<code>update.php</code>。",
+ "config-localsettings-key": "升级密钥:",
+ "config-localsettings-badkey": "啯杂密钥是错的。",
+ "config-session-error": "搞会话碰哒鬼:$1",
+ "config-your-language": "您使用的语言:",
+ "config-wiki-language": "Wiki语言:",
+ "config-back": "← 后退",
+ "config-continue": "行克 →",
+ "config-page-language": "语言",
+ "config-page-welcome": "欢迎使用MediaWiki!",
+ "config-page-name": "名字",
+ "config-page-options": "选项",
+ "config-page-install": "装下克",
+ "config-page-complete": "搞好哒!",
+ "config-page-readme": "自述",
+ "config-page-copying": "复制",
+ "config-page-upgradedoc": "升级",
+ "config-page-existingwiki": "现成的wiki",
+ "config-help-restart": "要不要哈消嘎输入且存好的东西,并且重新开始装?",
+ "config-restart": "嗯,重搞",
+ "config-env-good": "环境检查哈好哒。你可以安装MediaWiki哒。",
+ "config-env-bad": "环境检查好哒,可惜你搞不了MediaWiki。",
+ "config-env-php": "PHP $1装哒。",
+ "config-env-hhvm": "HHVM $1装哒。"
+}
"Alex00728",
"Hwangjy9",
"Macofe",
- "Mooozi"
+ "Mooozi",
+ "Ykhwong"
]
},
"config-desc": "미디어위키를 위한 설치 관리자",
"config-ns-site-name": "위키 이름과 같은 이름: $1",
"config-ns-other": "기타 (지정)",
"config-ns-other-default": "내위키",
- "config-project-namespace-help": "위키백과의 예에 따르면, 많은 위키는 정책 문서를 일반 문서와는 별도로 \"'''프로젝트 이름공간'''\"에 보관합니다.\n이 이름공간에 있는 모든 문서의 제목은 여기서 지정할 수 있는 특정 접두어로 시작합니다.\n보통 이 접두어는 위키의 이름에서 파생되지만, \"#\" 또는 \":\"와 같은 특수 문자를 포함할 수 없습니다.",
+ "config-project-namespace-help": "위키백과의 예에 따르면, 많은 위키는 정책 문서를 일반 문서와는 별도로 '''프로젝트 이름공간'''에 보관합니다.\n이 이름공간에 있는 모든 문서의 제목은 여기서 지정할 수 있는 특정 접두어로 시작합니다.\n보통 이 접두어는 위키의 이름에서 파생되지만, \"#\" 또는 \":\"와 같은 특수 문자를 포함할 수 없습니다.",
"config-ns-invalid": "특정 \"<nowiki>$1</nowiki>\" 이름공간이 잘못되었습니다.\n다른 프로젝트 이름공간을 지정하세요.",
"config-ns-conflict": "특정 \"<nowiki>$1</nowiki>\" 이름공간이 기본 미디어위키 이름공간과 충돌합니다.\n다른 프로젝트 이름공간을 지정하세요.",
"config-admin-box": "관리자 계정",
"config-env-good": "पर्यावरण क जाँच कएल गेल अछि।\nआहाँ मीडियाविकि स्थापित कर सकै चिए।",
"config-env-bad": "पर्यावरण क जाँच कएल गेल अछि।\nआहाँ मीडियाविकि स्थापित नै कर सकै चिए।",
"config-env-php": "PHP $1 स्थापित कएल ग्याल अछि।",
- "mainpagetext": "'''मेडियाविकी नीक जकाँ प्रस्थापित भेल।'''",
+ "mainpagetext": "<strong>मेडियाविकी नीक जकाँ प्रस्थापित भेल।</strong>",
"mainpagedocfooter": "सम्पर्क करू [//meta.wikimedia.org/wiki/Help:Contents User's Guide] विकि तंत्रांशक प्रयोगक जानकारी लेल।\n\n==प्रारम्भ कोना करी==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]"
}
"Servien"
]
},
+ "config-help": "hulpe",
"mainpagetext": "'''’t Installeren van de MediaWiki programmatuur is succesvol.'''",
"mainpagedocfooter": "Bekiek de [//meta.wikimedia.org/wiki/Help:Contents haandleiding] veur informasie over t gebruuk van de wikiprogrammatuur.\n\n== Meer hulpe ==\n* [//www.mediawiki.org/wiki/Help:Configuration_settings Lieste mit instellingen]\n* [//www.mediawiki.org/wiki/Help:FAQ MediaWiki-vragen die vake esteld wörden]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-postlieste veur nieje versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaor in joew taal]"
}
"config-help-tooltip": "klik om uit te vouwen",
"config-nofile": "Het bestand \"$1\" is niet gevonden. Is het verwijderd?",
"config-extension-link": "Weet u dat u [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\n\nU kunt [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category uitbreidingen op categorie] bekijken of ga naar de [//www.mediawiki.org/wiki/Extension_Matrix uitbreidingenmatrix] om de volledige lijst met uitbreidingen te bekijken.",
- "mainpagetext": "'''De installatie van MediaWiki is geslaagd.'''",
+ "mainpagetext": "<strong>De installatie van MediaWiki is geslaagd.</strong>",
"mainpagedocfooter": "Raadpleeg de [//meta.wikimedia.org/wiki/Special:MyLanguage/Help:Contents handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Leer hoe u spam kunt voorkomen op uw wiki]"
}
"config-mod-security": "<strong>Aviso:</strong> Seu servidor web tem [http://modsecurity.org/ mod_security] habilitado. Se configurado incorretamente, pode causar problemas para o MediaWiki ou outro software que permite aos usuários postar conteúdo arbitrário.\nConsulte a [http://modsecurity.org/documentation/ documentação do mod_security] ou entre em contato com o suporte do seu host se você encontrar erros aleatórios.",
"config-diff3-bad": "O GNU diff3 não foi encontrado.",
"config-git": "Foi encontrado o software de controle de versão Git: <code>$1</code>.",
- "config-git-bad": "Não foi encontrado o software de controle de versão Git.",
+ "config-git-bad": "O software de controle de versão Git não foi encontrado.",
"config-imagemagick": "ImageMagick encontrado: <code>$1</code> .\nRedimensionamento de imagem será ativado se você permitir uploads.",
"config-gd": "Encontrada biblioteca gráfica GD embutida\nO redimensionamento de imagens será habilitado se você permitir uploads.",
"config-no-scaling": "Não foi possível encontrar biblioteca GD ou ImageMagick. \nO redimensionamento de imagens será desabilitado.",
"config-email-watchlist": "启用监视列表通知",
"config-email-watchlist-help": "允许用户收到与其监视列表有关的通知,假若他们启用了该功能。",
"config-email-auth": "启用电子邮件身份验证",
- "config-email-auth-help": "如果启用此选项,在用户设置或修改电子邮件地址时,就会收到一封邮件,内含确认电子地址的链接。只有经过身份验证的电子邮件地址,才能收到来自其他用户的电子邮件,或任何修改通知的邮件。'''建议'''公开wiki启用本选项,以防对电子邮件功能的滥用。",
+ "config-email-auth-help": "如果启用此选项,在用户设置或修改电子邮件地址时,就会收到一封邮件,内含确认电子地址的链接。只有经过身份验证的电子邮件地址,才能收到来自其他用户的电子邮件,或任何修改通知的邮件。<strong>建议</strong>公开wiki启用本选项,以防对电子邮件功能的滥用。",
"config-email-sender": "回复电子邮件地址:",
"config-email-sender-help": "输入要用来发送出站电子邮件的地址,该地址将会收到被拒收的邮件。许多邮件服务器要求域名部分必须有效。",
"config-upload-settings": "图像和文件上传",
"config-upload-deleted": "已删除文件的目录:",
"config-upload-deleted-help": "指定用于存放被删除文件的目录。理想情况下,该目录不应能通过web访问。",
"config-logo": "标志URL:",
- "config-logo-help": "在MediaWiki的默认外观中,左侧栏菜单之上有一块135x160像素的标志区。请上传一幅相应大小的图像,并在此输入URL。\n\n你可以用<code>$wgStylePath</code>或<code>$wgScriptPath</code>来表示相对于这些位置的路径。\n\n如果您不希望使用标志,请将本处留空。",
+ "config-logo-help": "在MediaWiki的默认外观中,左侧栏菜单之上有一块135x160像素的标志区。请上传一幅相应大小的图像,并在此输入URL。\n\n您可以用<code>$wgStylePath</code>或<code>$wgScriptPath</code>来表示相对于这些位置的路径。\n\n如果您不希望使用标志,请将本处留空。",
"config-instantcommons": "启用即时共享资源",
"config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 即时共享资源]可以让wiki使用来自[//commons.wikimedia.org/ 维基共享资源]网站的图像、音频和其他媒体文件。要启用该功能,MediaWiki必须能够访问互联网。\n\n有关此功能的详细信息,包括如何将其他wiki网站设为具有类似共享功能的方法,请参考[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos 手册]。",
"config-cc-error": "知识共享许可证挑选器无法找到结果,请手动输入许可证的名称。",
"config-cc-again": "重新挑选……",
- "config-cc-not-chosen": "选择你想要的知识共享许可协议并单击“proceed”。",
+ "config-cc-not-chosen": "选择您想要的知识共享许可协议并单击“proceed”。",
"config-advanced-settings": "高级设置",
"config-cache-options": "对象缓存设置:",
"config-cache-help": "对象缓存可通过缓存频繁使用的数据来提高MediaWiki的速度。高度推荐中到大型的网站启用该功能,小型网站亦能从其中受益。",
"config-skins-missing": "没有找到皮肤;MediaWiki将使用备选皮肤直到您自行安装一个后。",
"config-skins-must-enable-some": "您必须选择至少一个皮肤以起用。",
"config-skins-must-enable-default": "默认选择的皮肤必须启用。",
- "config-install-alreadydone": "'''警告:'''您似乎已经安装了MediaWiki,并试图重新安装它。请前往下一个页面。",
+ "config-install-alreadydone": "<strong>警告:</strong>您似乎已经安装了MediaWiki,并试图重新安装它。请前往下一个页面。",
"config-install-begin": "点击“{{int:config-continue}}”后,您将开始安装MediaWiki。如果您还想对配置作一些修改,请点击“{{int:config-back}}”。",
"config-install-step-done": "完成",
"config-install-step-failed": "失败",
"config-install-user-missing": "指定的用户“$1”不存在。",
"config-install-user-missing-create": "指定的用户“$1”不存在。如果您想要创建一名,请点选“创建帐户”下面的复选框。",
"config-install-tables": "正在创建数据表",
- "config-install-tables-exist": "'''警告''':MediaWiki的数据表似乎已经存在,跳过创建。",
- "config-install-tables-failed": "'''错误''':创建数据表出错,下为错误信息:$1",
+ "config-install-tables-exist": "<strong>警告:</strong>MediaWiki的数据表似乎已经存在,跳过创建。",
+ "config-install-tables-failed": "<strong>错误:</strong>创建数据表出错,下为错误信息:$1",
"config-install-interwiki": "正在填充默认的跨wiki数据表",
- "config-install-interwiki-list": "æ\89¾ä¸\8då\88°文件<code>interwiki.list</code>。",
- "config-install-interwiki-exists": "'''警告''':跨wiki数据表似乎已有内容,跳过默认列表。",
+ "config-install-interwiki-list": "æ\97 æ³\95读å\8f\96文件<code>interwiki.list</code>。",
+ "config-install-interwiki-exists": "<strong>警告:</strong>跨wiki数据表似乎已有内容,跳过默认列表。",
"config-install-stats": "初始化统计",
"config-install-keys": "生成密钥中",
- "config-insecure-keys": "'''警告''':在安装过程中生成的{{PLURAL:$2|安全密钥|安全密钥}}($1){{PLURAL:$2|并|并}}不一定安全。请考虑手动更改{{PLURAL:$2|它|它们}}。",
+ "config-insecure-keys": "<strong>警告:</strong>在安装过程中生成的{{PLURAL:$2|安全密钥}}($1){{PLURAL:$2|并}}不一定安全。请考虑手动更改{{PLURAL:$2|它|它们}}。",
"config-install-updates": "防止运行不需要的更新",
"config-install-updates-failed": "<strong>错误:</strong>表格中插入更新关键字失败并出现如下错误:$1",
"config-install-sysop": "正在创建管理员用户帐号",
"config-help": "帮助",
"config-help-tooltip": "单击展开",
"config-nofile": "找不到文件“$1”。它是否已被删除?",
- "config-extension-link": "æ\82¨æ\98¯å\90¦ç\9f¥é\81\93æ\82¨ç\9a\84wikiæ\94¯æ\8c\81[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions æ\8b\93å±\95]ï¼\9f\næ\82¨å\8f¯æµ\8fè§\88[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category æ\8b\93å±\95å\88\86ç±»]。",
+ "config-extension-link": "æ\82¨æ\98¯å\90¦ç\9f¥é\81\93æ\82¨ç\9a\84wikiæ\94¯æ\8c\81[//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions æ\89©å±\95]ï¼\9f\n\næ\82¨å\8f¯ä»¥æµ\8fè§\88[//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category æ\89©å±\95å\88\86ç±»]æ\88\96[//www.mediawiki.org/wiki/Extension_Matrix æ\89©å±\95ç\9f©é\98µ]以æ\9f¥ç\9c\8bå®\8cæ\95´ç\9a\84æ\89©å±\95å\88\97表。",
"mainpagetext": "<strong>已安装MediaWiki。</strong>",
"mainpagedocfooter": "请查阅[//meta.wikimedia.org/wiki/Help:Contents 用户指南]以获取使用本wiki软件的信息!\n\n== 入门 ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings MediaWiki配置设置列表]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hans MediaWiki常见问题]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources 本地化MediaWiki到您的语言]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam 了解如何在您的wiki上打击破坏]"
}
$this->mURL = $url;
$this->mAPI = $api;
$this->mWikiID = $wikiId;
- $this->mLocal = $local;
- $this->mTrans = $trans;
+ $this->mLocal = (bool)$local;
+ $this->mTrans = (bool)$trans;
}
/**
}
/**
- * Purge the cache for an interwiki prefix
+ * Resets locally cached Interwiki objects. This is intended for use during testing only.
+ * This does not invalidate entries in the persistent cache, as invalidateCache() does.
+ * @since 1.27
+ */
+ public static function resetLocalCache() {
+ static::$smCache = [];
+ }
+
+ /**
+ * Purge the cache (local and persistent) for an interwiki prefix.
* @param string $prefix
* @since 1.26
*/
$cache = ObjectCache::getMainWANInstance();
$key = wfMemcKey( 'interwiki', $prefix );
$cache->delete( $key );
+ unset( static::$smCache[$prefix] );
}
/**
// Split values
list( $local, $url ) = explode( ' ', $value, 2 );
$s->mURL = $url;
- $s->mLocal = (int)$local;
+ $s->mLocal = (bool)$local;
} else {
$s = false;
}
if ( isset( $mc['iw_url'] ) ) {
$iw = new Interwiki();
$iw->mURL = $mc['iw_url'];
- $iw->mLocal = isset( $mc['iw_local'] ) ? $mc['iw_local'] : 0;
- $iw->mTrans = isset( $mc['iw_trans'] ) ? $mc['iw_trans'] : 0;
+ $iw->mLocal = isset( $mc['iw_local'] ) ? (bool)$mc['iw_local'] : false;
+ $iw->mTrans = isset( $mc['iw_trans'] ) ? (bool)$mc['iw_trans'] : false;
$iw->mAPI = isset( $mc['iw_api'] ) ? $mc['iw_api'] : '';
$iw->mWikiID = isset( $mc['iw_wikiid'] ) ? $mc['iw_wikiid'] : '';
public function getName() {
$msg = wfMessage( 'interwiki-name-' . $this->mPrefix )->inContentLanguage();
- return !$msg->exists() ? '' : $msg;
+ return !$msg->exists() ? '' : $msg->text();
}
/**
public function getDescription() {
$msg = wfMessage( 'interwiki-desc-' . $this->mPrefix )->inContentLanguage();
- return !$msg->exists() ? '' : $msg;
+ return !$msg->exists() ? '' : $msg->text();
}
/**
return false; // just deleted?
}
+ if ( !$revision->isCurrent() ) {
+ // If the revision isn't current, there's no point in doing a bunch
+ // of work just to fail at the lockAndGetLatest() check later.
+ $this->setLastError( "Revision {$revision->getId()} is not current" );
+ return false;
+ }
+
$content = $revision->getContent( Revision::RAW );
if ( !$content ) {
// If there is no content, pretend the content is empty
}
if ( $page->getTouched() >= $skewedTimestamp || $opportunistic ) {
- // Something bumped page_touched since this job was made
- // or the cache is otherwise suspected to be up-to-date
+ // Something bumped page_touched since this job was made or the cache is
+ // otherwise suspected to be up-to-date. As long as the cache rev ID matches
+ // and it reflects the job's triggering change, then it is usable.
$parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
- if ( $parserOutput && $parserOutput->getCacheTime() < $skewedTimestamp ) {
+ if ( !$parserOutput
+ || $parserOutput->getCacheRevisionId() != $revision->getId()
+ || $parserOutput->getCacheTime() < $skewedTimestamp
+ ) {
$parserOutput = false; // too stale
}
}
}
// Fetch the current revision and parse it if necessary...
- if ( $parserOutput == false ) {
+ if ( !$parserOutput ) {
$start = microtime( true );
// Revision ID must be passed to the parser output to get revision variables correct
$parserOutput = $content->getParserOutput(
}
/**
- * @param $file string
+ * @param string $file
* @return bool|string
*/
public static function getMimeType( $file ) {
return $this->doNotify( $channel, $events );
}
- /**
- * Set logger instance.
- * @param LoggerInterface $logger
- */
public function setLogger( LoggerInterface $logger ) {
$this->logger = $logger;
}
* 'relayerConfig' => [ 'class' => 'EventRelayerKafka', 'KafkaEventHost' => 'localhost:9092' ],
*/
class EventRelayerKafka extends EventRelayer {
-
/**
* Configuration.
*
/**
* Create Kafka producer.
*
- * @param Config $config
+ * @param array $params
*/
public function __construct( array $params ) {
+ parent::__construct( $params );
+
$this->config = new HashConfig( $params );
if ( !$this->config->has( 'KafkaEventHost' ) ) {
throw new InvalidArgumentException( "KafkaEventHost must be configured" );
*/
protected function getKafkaProducer() {
if ( !$this->producer ) {
- $this->producer = Produce::getInstance( null, null, $this->config->get( 'KafkaEventHost' ) );
+ $this->producer = Produce::getInstance(
+ null, null, $this->config->get( 'KafkaEventHost' ) );
}
return $this->producer;
}
- /**
- * (non-PHPdoc)
- *
- * @see EventRelayer::doNotify()
- *
- */
protected function doNotify( $channel, array $events ) {
$jsonEvents = array_map( 'json_encode', $events );
try {
protected $cache;
/** @var HashBagOStuff Script instance PHP cache */
protected $procCache;
- /** @var string Cache pool name */
- protected $pool;
+ /** @var string Purge channel name */
+ protected $purgeChannel;
/** @var EventRelayer Bus that handles purge broadcasts */
- protected $relayer;
+ protected $purgeRelayer;
/** @var LoggerInterface */
protected $logger;
const MAX_PC_KEYS = 1000; // max keys to keep in process cache
+ const DEFAULT_PURGE_CHANNEL = 'wancache-purge';
+
/**
* @param array $params
- * - cache : BagOStuff object
- * - pool : pool name
- * - relayer : EventRelayer object
- * - logger : LoggerInterface object
+ * - cache : BagOStuff object for a persistent cache
+ * - channels : Map of (action => channel string). Actions include "purge".
+ * - relayers : Map of (action => EventRelayer object). Actions include "purge".
+ * - logger : LoggerInterface object
*/
public function __construct( array $params ) {
$this->cache = $params['cache'];
- $this->pool = $params['pool'];
- $this->relayer = $params['relayer'];
$this->procCache = new HashBagOStuff( [ 'maxKeys' => self::MAX_PC_KEYS ] );
+ $this->purgeChannel = isset( $params['channels']['purge'] )
+ ? $params['channels']['purge']
+ : self::DEFAULT_PURGE_CHANNEL;
+ $this->purgeRelayer = isset( $params['relayers']['purge'] )
+ ? $params['relayers']['purge']
+ : new EventRelayerNull( [] );
$this->setLogger( isset( $params['logger'] ) ? $params['logger'] : new NullLogger() );
}
- /**
- * Set logger instance.
- * @param LoggerInterface $logger
- */
public function setLogger( LoggerInterface $logger ) {
$this->logger = $logger;
}
*
* return CatConfig::newFromRow( $dbr->selectRow( ... ) );
* },
- * array(
+ * [
* // Calling touchCheckKey() on this key invalidates the cache
- * 'checkKeys' => array( $cache->makeKey( 'site-cat-config' ) ),
+ * 'checkKeys' => [ $cache->makeKey( 'site-cat-config' ) ],
* // Try to only let one datacenter thread manage cache updates at a time
* 'lockTSE' => 30
- * )
+ * ]
* );
* @endcode
*
*
* return CatState::newFromResults( $dbr->select( ... ) );
* },
- * array(
+ * [
* // The "check" keys that represent things the value depends on;
* // Calling touchCheckKey() on any of them invalidates the cache
- * 'checkKeys' => array(
+ * 'checkKeys' => [
* $cache->makeKey( 'sustenance-bowls', $cat->getRoomId() ),
* $cache->makeKey( 'people-present', $cat->getHouseId() ),
* $cache->makeKey( 'cat-laws', $cat->getCityId() ),
- * )
- * )
+ * ]
+ * ]
* );
* @endcode
*
* $setOpts += Database::getCacheSetOptions( $dbr );
*
* // Start off with the last cached list
- * $list = $oldValue ?: array();
+ * $list = $oldValue ?: [];
* // Fetch the last 100 relevant rows in descending order;
* // only fetch rows newer than $list[0] to reduce scanning
* $rows = iterator_to_array( $dbr->select( ... ) );
* return array_slice( array_merge( $new, $list ), 0, 100 );
* },
* // Try to only let one datacenter thread manage cache updates at a time
- * array( 'lockTSE' => 30 )
+ * [ 'lockTSE' => 30 ]
* );
* @endcode
*
'sbt' => true, // substitute $UNIXTIME$ with actual microtime
] );
- $ok = $this->relayer->notify( "{$this->pool}:purge", $event );
+ $ok = $this->purgeRelayer->notify( $this->purgeChannel, $event );
if ( !$ok ) {
$this->lastRelayError = self::ERR_RELAY;
}
'key' => $key,
] );
- $ok = $this->relayer->notify( "{$this->pool}:purge", $event );
+ $ok = $this->purgeRelayer->notify( $this->purgeChannel, $event );
if ( !$ok ) {
$this->lastRelayError = self::ERR_RELAY;
}
--- /dev/null
+<?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
+ * @license GPL 2+
+ * @author Addshore
+ */
+namespace MediaWiki\Linker;
+
+/**
+ * @since 1.27
+ */
+interface LinkTarget {
+
+ /**
+ * Get the namespace index.
+ *
+ * @return int Namespace index
+ */
+ public function getNamespace();
+
+ /**
+ * Get the link fragment (i.e. the bit after the #) in text form.
+ *
+ * @return string link fragment
+ */
+ public function getFragment();
+
+ /**
+ * Whether the link target has a fragment
+ *
+ * @return bool
+ */
+ public function hasFragment();
+
+ /**
+ * Get the main part with underscores.
+ *
+ * @return string Main part of the link, with underscores (for use in href attributes)
+ */
+ public function getDBkey();
+
+ /**
+ * Returns the link in text form, without namespace prefix or fragment.
+ *
+ * This is computed from the DB key by replacing any underscores with spaces.
+ *
+ * @return string
+ */
+ public function getText();
+
+ /**
+ * Creates a new LinkTarget for a different fragment of the same page.
+ * It is expected that the same type of object will be returned, but the
+ * only requirement is that it is a LinkTarget.
+ *
+ * @param string $fragment The fragment name, or "" for the entire page.
+ *
+ * @return LinkTarget
+ */
+ public function createFragmentTarget( $fragment );
+
+ /**
+ * Whether this LinkTarget has an interwiki component
+ *
+ * @return bool
+ */
+ public function isExternal();
+
+ /**
+ * The interwiki component of this LinkTarget
+ *
+ * @return string
+ */
+ public function getInterwiki();
+}
* @author Tim Starling
* @author Luke Welling lwelling@wikimedia.org
*/
+use MediaWiki\Linker\LinkTarget;
/**
* This module processes the email notifications when the current page is
return true;
}
+ /**
+ * Get ImageMagick subsampling factors for the target JPEG pixel format.
+ *
+ * @param string $pixelFormat one of 'yuv444', 'yuv422', 'yuv420'
+ * @return array of string keys
+ */
+ protected function imageMagickSubsampling( $pixelFormat ) {
+ switch ( $pixelFormat ) {
+ case 'yuv444':
+ return [ '1x1', '1x1', '1x1' ];
+ case 'yuv422':
+ return [ '2x1', '1x1', '1x1' ];
+ case 'yuv420':
+ return [ '2x2', '1x1', '1x1' ];
+ default:
+ throw new MWException( 'Invalid pixel format for JPEG output' );
+ }
+ }
+
/**
* Transform an image using ImageMagick
*
protected function transformImageMagick( $image, $params ) {
# use ImageMagick
global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
- $wgImageMagickTempDir, $wgImageMagickConvertCommand;
+ $wgImageMagickTempDir, $wgImageMagickConvertCommand, $wgJpegPixelFormat;
$quality = [];
$sharpen = [];
$animation_pre = [];
$animation_post = [];
$decoderHint = [];
+ $subsampling = [];
if ( $params['mimeType'] == 'image/jpeg' ) {
$qualityVal = isset( $params['quality'] ) ? (string)$params['quality'] : null;
// JPEG decoder hint to reduce memory, available since IM 6.5.6-2
$decoderHint = [ '-define', "jpeg:size={$params['physicalDimensions']}" ];
}
+ if ( $wgJpegPixelFormat ) {
+ $factors = $this->imageMagickSubsampling( $wgJpegPixelFormat );
+ $subsampling = [ '-sampling-factor', implode( ',', $factors ) ];
+ }
} elseif ( $params['mimeType'] == 'image/png' ) {
$quality = [ '-quality', '95' ]; // zlib 9, adaptive filtering
if ( $params['interlace'] ) {
[ '-depth', 8 ],
$sharpen,
[ '-rotate', "-$rotation" ],
+ $subsampling,
$animation_post,
[ $this->escapeMagickOutput( $params['dstPath'] ) ] ) );
*/
protected function transformImageMagickExt( $image, $params ) {
global $wgSharpenReductionThreshold, $wgSharpenParameter, $wgMaxAnimatedGifArea,
- $wgMaxInterlacingAreas;
+ $wgMaxInterlacingAreas, $wgJpegPixelFormat;
try {
$im = new Imagick();
if ( $params['interlace'] ) {
$im->setInterlaceScheme( Imagick::INTERLACE_JPEG );
}
+ if ( $wgJpegPixelFormat ) {
+ $factors = $this->imageMagickSubsampling( $wgJpegPixelFormat );
+ $im->setSamplingFactors( $factors );
+ }
} elseif ( $params['mimeType'] == 'image/png' ) {
$im->setCompressionQuality( 95 );
if ( $params['interlace'] ) {
*
* Shown in the &query=imageinfo&iiprop=size api query.
*
- * @param $file File
+ * @param File $file
* @return float The duration of the file.
*/
public function getLength( $file ) {
*
* Shown in the &query=imageinfo&iiprop=size api query.
*
- * @param $file File
+ * @param File $file
* @return float The duration of the file.
*/
public function getLength( $file ) {
/**
* Get the source file for the transform
*
- * @param $file File
- * @param $params Array
- * @return Array Array with keys width, height and path.
+ * @param File $file
+ * @param array $params
+ * @return array Array with keys width, height and path.
*/
protected function getThumbnailSource( $file, $params ) {
return $file->getThumbnailSource( $params );
*/
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
/**
* Functions to get cache objects
}
$params = $wgWANObjectCaches[$id];
- $class = $params['relayerConfig']['class'];
- $params['relayer'] = new $class( $params['relayerConfig'] );
+ foreach ( $params['channels'] as $action => $channel ) {
+ $params['relayers'][$action] = MediaWikiServices::getInstance()->getEventRelayerGroup()
+ ->getRelayer( $channel );
+ $params['channels'][$action] = $channel;
+ }
$params['cache'] = self::newFromId( $params['cacheId'] );
if ( isset( $params['loggroup'] ) ) {
$params['logger'] = LoggerFactory::getInstance( $params['loggroup'] );
: '';
$edit->pst = $edit->pstContent ? $edit->pstContent->serialize( $serialFormat ) : '';
+ if ( $edit->output ) {
+ $edit->output->setCacheTime( wfTimestampNow() );
+ }
+
+ // Process cache the result
$this->mPreparedEdit = $edit;
+
return $edit;
}
if ( $t->hasFragment() ) {
# Strip the fragment to avoid various odd effects
- $this->mTitle = clone $t;
- $this->mTitle->setFragment( '' );
+ $this->mTitle = $t->createFragmentTarget( '' );
} else {
$this->mTitle = $t;
}
if ( !$useOutdated && $optionsKey->expired( $article->getTouched() ) ) {
wfIncrStats( "pcache.miss.expired" );
$cacheTime = $optionsKey->getCacheTime();
- wfDebug( "Parser options key expired, touched " . $article->getTouched()
+ wfDebugLog( "ParserCache",
+ "Parser options key expired, touched " . $article->getTouched()
. ", epoch $wgCacheEpoch, cached $cacheTime\n" );
return false;
- } elseif ( $optionsKey->isDifferentRevision( $article->getLatest() ) ) {
+ } elseif ( !$useOutdated && $optionsKey->isDifferentRevision( $article->getLatest() ) ) {
wfIncrStats( "pcache.miss.revid" );
$revId = $article->getLatest();
$cachedRevId = $optionsKey->getCacheRevisionId();
- wfDebug( "ParserOutput key is for an old revision, latest $revId, cached $cachedRevId\n" );
+ wfDebugLog( "ParserCache",
+ "ParserOutput key is for an old revision, latest $revId, cached $cachedRevId\n"
+ );
return false;
}
}
$casToken = null;
+ /** @var ParserOutput $value */
$value = $this->mMemc->get( $parserOutputKey, $casToken, BagOStuff::READ_VERIFIED );
if ( !$value ) {
wfDebug( "ParserOutput cache miss.\n" );
if ( !$useOutdated && $value->expired( $touched ) ) {
wfIncrStats( "pcache.miss.expired" );
$cacheTime = $value->getCacheTime();
- wfDebug( "ParserOutput key expired, touched $touched, "
+ wfDebugLog( "ParserCache",
+ "ParserOutput key expired, touched $touched, "
. "epoch $wgCacheEpoch, cached $cacheTime\n" );
$value = false;
- } elseif ( $value->isDifferentRevision( $article->getLatest() ) ) {
+ } elseif ( !$useOutdated && $value->isDifferentRevision( $article->getLatest() ) ) {
wfIncrStats( "pcache.miss.revid" );
$revId = $article->getLatest();
$cachedRevId = $value->getCacheRevisionId();
- wfDebug(
+ wfDebugLog( "ParserCache",
"ParserOutput key is for an old revision, latest $revId, cached $cachedRevId\n"
);
$value = false;
Hooks::run( 'RejectParserCacheValue', [ $value, $wikiPage, $popts ] ) === false
) {
wfIncrStats( 'pcache.miss.rejected' );
- wfDebug(
+ wfDebugLog( "ParserCache",
"ParserOutput key valid, but rejected by RejectParserCacheValue hook handler.\n"
);
$value = false;
*/
public function save( $parserOutput, $page, $popts, $cacheTime = null, $revId = null ) {
$expire = $parserOutput->getCacheExpiry();
- if ( $expire > 0 ) {
+ if ( $expire > 0 && !$this->mMemc instanceof EmptyBagOStuff ) {
$cacheTime = $cacheTime ?: wfTimestampNow();
if ( !$revId ) {
$revision = $page->getRevision();
'ParserCacheSaveComplete',
[ $this, $parserOutput, $page->getTitle(), $popts, $revId ]
);
- } else {
+ } elseif ( $expire <= 0 ) {
wfDebug( "Parser output was marked as uncacheable and has not been saved.\n" );
}
}
return $this->mTOCHTML;
}
+ /**
+ * @return string|null TS_MW timestamp of the revision content
+ */
public function getTimestamp() {
return $this->mTimestamp;
}
/**
* Ensure that password isn't in top X most popular passwords
*
- * @param $policyVal int Cut off to use. Will automatically shrink to the max
+ * @param int $policyVal Cut off to use. Will automatically shrink to the max
* supported for error messages if set to more than max number of passwords on file,
* so you can use the PHP_INT_MAX constant here safely.
- * @param $user User
- * @param $password String
+ * @param User $user
+ * @param string $password
* @since 1.27
* @return Status
*/
*/
class PoolWorkArticleView extends PoolCounterWork {
- /** @var Page */
+ /** @var WikiPage */
private $page;
/** @var string */
private $error = false;
/**
- * @param Page $page
+ * @param WikiPage $page
* @param ParserOptions $parserOptions ParserOptions to use for the parse
* @param int $revid ID of the revision being parsed.
* @param bool $useParserCache Whether to use the parser cache.
* @param Content|string $content Content to parse or null to load it; may
* also be given as a wikitext string, for BC.
*/
- public function __construct( Page $page, ParserOptions $parserOptions,
+ public function __construct( WikiPage $page, ParserOptions $parserOptions,
$revid, $useParserCache, $content = null
) {
if ( is_string( $content ) ) { // BC: old style call
'LogTypes',
'LogRestrictions',
'FilterLogTypes',
+ 'ActionFilteredLogs',
'LogNames',
'LogHeaders',
'LogActions',
/* Methods */
/**
- * @param $context ResourceLoaderContext
+ * @param ResourceLoaderContext $context
* @return array
*/
public function getStyles( ResourceLoaderContext $context ) {
}
/**
- * @param $context ResourceLoaderContext
+ * @param ResourceLoaderContext $context
* @return bool
*/
public function isKnownEmpty( ResourceLoaderContext $context ) {
}
/**
- * @param $context ResourceLoaderContext
+ * @param ResourceLoaderContext $context
* @return string: Hash
*/
public function getModifiedHash( ResourceLoaderContext $context ) {
case 'styles':
case 'scripts':
case 'group':
+ case 'targets':
$this->{$member} = $option;
break;
}
* @return Status
* @since 1.23 Added 'perItemStatus' param
*/
- public function setVisibility( $params ) {
+ public function setVisibility( array $params ) {
$bitPars = $params['value'];
$comment = $params['comment'];
$perItemStatus = isset( $params['perItemStatus'] ) ? $params['perItemStatus'] : false;
* @defgroup Search Search
*/
+use MediaWiki\MediaWikiServices;
+
/**
* Contain a class for special pages
* @ingroup Search
*/
-class SearchEngine {
+abstract class SearchEngine {
/** @var string */
public $prefix = '';
* @param string $term
* @return string
*/
- function transformSearchTerm( $term ) {
+ public function transformSearchTerm( $term ) {
return $term;
}
+ /**
+ * Get service class to finding near matches.
+ * @param Config $config Configuration to use for the matcher.
+ * @return SearchNearMatcher
+ */
+ public function getNearMatcher( Config $config ) {
+ global $wgContLang;
+ return new SearchNearMatcher( $config, $wgContLang );
+ }
+
+ /**
+ * Get near matcher for default SearchEngine.
+ * @return SearchNearMatcher
+ */
+ protected static function defaultNearMatcher() {
+ $config = MediaWikiServices::getInstance()->getMainConfig();
+ return MediaWikiServices::getInstance()->newSearchEngine()->getNearMatcher( $config );
+ }
+
/**
* If an exact title match can be found, or a very slightly close match,
* return the title. If no match, returns NULL.
- *
+ * @deprecated since 1.27; Use SearchEngine::getNearMatcher()
* @param string $searchterm
* @return Title
*/
public static function getNearMatch( $searchterm ) {
- $title = self::getNearMatchInternal( $searchterm );
-
- Hooks::run( 'SearchGetNearMatchComplete', [ $searchterm, &$title ] );
- return $title;
+ return static::defaultNearMatcher()->getNearMatch( $searchterm );
}
/**
* Do a near match (see SearchEngine::getNearMatch) and wrap it into a
* SearchResultSet.
- *
+ * @deprecated since 1.27; Use SearchEngine::getNearMatcher()
* @param string $searchterm
* @return SearchResultSet
*/
public static function getNearMatchResultSet( $searchterm ) {
- return new SearchNearMatchResultSet( self::getNearMatch( $searchterm ) );
+ return static::defaultNearMatcher()->getNearMatchResultSet( $searchterm );
}
/**
- * Really find the title match.
- * @param string $searchterm
- * @return null|Title
+ * Get chars legal for search.
+ * NOTE: usage as static is deprecated and preserved only as BC measure
+ * @return string
*/
- private static function getNearMatchInternal( $searchterm ) {
- global $wgContLang, $wgEnableSearchContributorsByIP;
-
- $allSearchTerms = [ $searchterm ];
-
- if ( $wgContLang->hasVariants() ) {
- $allSearchTerms = array_unique( array_merge(
- $allSearchTerms,
- $wgContLang->autoConvertToAllVariants( $searchterm )
- ) );
- }
-
- $titleResult = null;
- if ( !Hooks::run( 'SearchGetNearMatchBefore', [ $allSearchTerms, &$titleResult ] ) ) {
- return $titleResult;
- }
-
- foreach ( $allSearchTerms as $term ) {
-
- # Exact match? No need to look further.
- $title = Title::newFromText( $term );
- if ( is_null( $title ) ) {
- return null;
- }
-
- # Try files if searching in the Media: namespace
- if ( $title->getNamespace() == NS_MEDIA ) {
- $title = Title::makeTitle( NS_FILE, $title->getText() );
- }
-
- if ( $title->isSpecialPage() || $title->isExternal() || $title->exists() ) {
- return $title;
- }
-
- # See if it still otherwise has content is some sane sense
- $page = WikiPage::factory( $title );
- if ( $page->hasViewableContent() ) {
- return $title;
- }
-
- if ( !Hooks::run( 'SearchAfterNoDirectMatch', [ $term, &$title ] ) ) {
- return $title;
- }
-
- # Now try all lower case (i.e. first letter capitalized)
- $title = Title::newFromText( $wgContLang->lc( $term ) );
- if ( $title && $title->exists() ) {
- return $title;
- }
-
- # Now try capitalized string
- $title = Title::newFromText( $wgContLang->ucwords( $term ) );
- if ( $title && $title->exists() ) {
- return $title;
- }
-
- # Now try all upper case
- $title = Title::newFromText( $wgContLang->uc( $term ) );
- if ( $title && $title->exists() ) {
- return $title;
- }
-
- # Now try Word-Caps-Breaking-At-Word-Breaks, for hyphenated names etc
- $title = Title::newFromText( $wgContLang->ucwordbreaks( $term ) );
- if ( $title && $title->exists() ) {
- return $title;
- }
-
- // Give hooks a chance at better match variants
- $title = null;
- if ( !Hooks::run( 'SearchGetNearMatch', [ $term, &$title ] ) ) {
- return $title;
- }
- }
-
- $title = Title::newFromText( $searchterm );
-
- # Entering an IP address goes to the contributions page
- if ( $wgEnableSearchContributorsByIP ) {
- if ( ( $title->getNamespace() == NS_USER && User::isIP( $title->getText() ) )
- || User::isIP( trim( $searchterm ) ) ) {
- return SpecialPage::getTitleFor( 'Contributions', $title->getDBkey() );
- }
- }
-
- # Entering a user goes to the user page whether it's there or not
- if ( $title->getNamespace() == NS_USER ) {
- return $title;
- }
-
- # Go to images that exist even if there's no local page.
- # There may have been a funny upload, or it may be on a shared
- # file repository such as Wikimedia Commons.
- if ( $title->getNamespace() == NS_FILE ) {
- $image = wfFindFile( $title );
- if ( $image ) {
- return $title;
- }
- }
-
- # MediaWiki namespace? Page may be "implied" if not customized.
- # Just return it, with caps forced as the message system likes it.
- if ( $title->getNamespace() == NS_MEDIAWIKI ) {
- return Title::makeTitle( NS_MEDIAWIKI, $wgContLang->ucfirst( $title->getText() ) );
- }
-
- # Quoted term? Try without the quotes...
- $matches = [];
- if ( preg_match( '/^"([^"]+)"$/', $searchterm, $matches ) ) {
- return SearchEngine::getNearMatch( $matches[1] );
- }
-
- return null;
- }
-
public static function legalSearchChars() {
return "A-Za-z_'.0-9\\x80-\\xFF\\-";
}
return $parsed;
}
- /**
- * Make a list of searchable namespaces and their canonical names.
- * @return array
- */
- public static function searchableNamespaces() {
- global $wgContLang;
- $arr = [];
- foreach ( $wgContLang->getNamespaces() as $ns => $name ) {
- if ( $ns >= NS_MAIN ) {
- $arr[$ns] = $name;
- }
- }
-
- Hooks::run( 'SearchableNamespaces', [ &$arr ] );
- return $arr;
- }
-
- /**
- * Extract default namespaces to search from the given user's
- * settings, returning a list of index numbers.
- *
- * @param user $user
- * @return array
- */
- public static function userNamespaces( $user ) {
- $arr = [];
- foreach ( SearchEngine::searchableNamespaces() as $ns => $name ) {
- if ( $user->getOption( 'searchNs' . $ns ) ) {
- $arr[] = $ns;
- }
- }
-
- return $arr;
- }
-
/**
* Find snippet highlight settings for all users
- *
* @return array Contextlines, contextchars
*/
public static function userHighlightPrefs() {
return [ $contextlines, $contextchars ];
}
- /**
- * An array of namespaces indexes to be searched by default
- *
- * @return array
- */
- public static function defaultNamespaces() {
- global $wgNamespacesToBeSearchedDefault;
-
- return array_keys( $wgNamespacesToBeSearchedDefault, true );
- }
-
- /**
- * Get a list of namespace names useful for showing in tooltips
- * and preferences
- *
- * @param array $namespaces
- * @return array
- */
- public static function namespacesAsText( $namespaces ) {
- global $wgContLang;
-
- $formatted = array_map( [ $wgContLang, 'getFormattedNsText' ], $namespaces );
- foreach ( $formatted as $key => $ns ) {
- if ( empty( $ns ) ) {
- $formatted[$key] = wfMessage( 'blanknamespace' )->text();
- }
- }
- return $formatted;
- }
-
- /**
- * Load up the appropriate search engine class for the currently
- * active database backend, and return a configured instance.
- *
- * @param string $type Type of search backend, if not the default
- * @return SearchEngine
- */
- public static function create( $type = null ) {
- global $wgSearchType;
- $dbr = null;
-
- $alternatives = self::getSearchTypes();
-
- if ( $type && in_array( $type, $alternatives ) ) {
- $class = $type;
- } elseif ( $wgSearchType !== null ) {
- $class = $wgSearchType;
- } else {
- $dbr = wfGetDB( DB_SLAVE );
- $class = $dbr->getSearchEngine();
- }
-
- $search = new $class( $dbr );
- return $search;
- }
-
- /**
- * Return the search engines we support. If only $wgSearchType
- * is set, it'll be an array of just that one item.
- *
- * @return array
- */
- public static function getSearchTypes() {
- global $wgSearchType, $wgSearchTypeAlternatives;
-
- $alternatives = $wgSearchTypeAlternatives ?: [];
- array_unshift( $alternatives, $wgSearchType );
-
- return $alternatives;
- }
-
/**
* Create or update the search index record for the given page.
* Title and text should be pre-processed.
* Makes search simple string if it was namespaced.
* Sets namespaces of the search to namespaces extracted from string.
* @param string $search
- * @return $string Simplified search string
+ * @return string Simplified search string
*/
protected function normalizeNamespaces( $search ) {
// Find a Title which is not an interwiki and is in NS_MAIN
return $backend->defaultSearchBackend( $this->namespaces, $search, $this->limit, $this->offset );
}
+ /**
+ * Make a list of searchable namespaces and their canonical names.
+ * @deprecated since 1.27; use SearchEngineConfig::searchableNamespaces()
+ * @return array
+ */
+ public static function searchableNamespaces() {
+ return MediaWikiServices::getInstance()->getSearchEngineConfig()->searchableNamespaces();
+ }
+
+ /**
+ * Extract default namespaces to search from the given user's
+ * settings, returning a list of index numbers.
+ * @deprecated since 1.27; use SearchEngineConfig::userNamespaces()
+ * @param user $user
+ * @return array
+ */
+ public static function userNamespaces( $user ) {
+ return MediaWikiServices::getInstance()->getSearchEngineConfig()->userNamespaces( $user );
+ }
+
+ /**
+ * An array of namespaces indexes to be searched by default
+ * @deprecated since 1.27; use SearchEngineConfig::defaultNamespaces()
+ * @return array
+ */
+ public static function defaultNamespaces() {
+ return MediaWikiServices::getInstance()->getSearchEngineConfig()->defaultNamespaces();
+ }
+
+ /**
+ * Get a list of namespace names useful for showing in tooltips
+ * and preferences
+ * @deprecated since 1.27; use SearchEngineConfig::namespacesAsText()
+ * @param array $namespaces
+ * @return array
+ */
+ public static function namespacesAsText( $namespaces ) {
+ return MediaWikiServices::getInstance()->getSearchEngineConfig()->namespacesAsText();
+ }
+
+ /**
+ * Load up the appropriate search engine class for the currently
+ * active database backend, and return a configured instance.
+ * @deprecated since 1.27; Use SearchEngineFactory::create
+ * @param string $type Type of search backend, if not the default
+ * @return SearchEngine
+ */
+ public static function create( $type = null ) {
+ return MediaWikiServices::getInstance()->getSearchEngineFactory()->create( $type );
+ }
+
+ /**
+ * Return the search engines we support. If only $wgSearchType
+ * is set, it'll be an array of just that one item.
+ * @deprecated since 1.27; use SearchEngineConfig::getSearchTypes()
+ * @return array
+ */
+ public static function getSearchTypes() {
+ return MediaWikiServices::getInstance()->getSearchEngineConfig()->getSearchTypes();
+ }
+
}
/**
--- /dev/null
+<?php
+
+/**
+ * Configuration handling class for SearchEngine.
+ * Provides added service over plain configuration.
+ *
+ * @since 1.27
+ */
+class SearchEngineConfig {
+
+ /**
+ * Config object from which the settings will be derived.
+ * @var Config
+ */
+ private $config;
+
+ /**
+ * Current language
+ * @var Language
+ */
+ private $language;
+
+ public function __construct( Config $config, Language $lang ) {
+ $this->config = $config;
+ $this->language = $lang;
+ }
+
+ /**
+ * Retrieve original config.
+ * @return Config
+ */
+ public function getConfig() {
+ return $this->config;
+ }
+
+ /**
+ * Make a list of searchable namespaces and their canonical names.
+ * @return array Namespace ID => name
+ */
+ public function searchableNamespaces() {
+ $arr = [];
+ foreach ( $this->language->getNamespaces() as $ns => $name ) {
+ if ( $ns >= NS_MAIN ) {
+ $arr[$ns] = $name;
+ }
+ }
+
+ Hooks::run( 'SearchableNamespaces', [ &$arr ] );
+ return $arr;
+ }
+
+ /**
+ * Extract default namespaces to search from the given user's
+ * settings, returning a list of index numbers.
+ *
+ * @param user $user
+ * @return int[]
+ */
+ public function userNamespaces( $user ) {
+ $arr = [];
+ foreach ( $this->searchableNamespaces() as $ns => $name ) {
+ if ( $user->getOption( 'searchNs' . $ns ) ) {
+ $arr[] = $ns;
+ }
+ }
+
+ return $arr;
+ }
+
+ /**
+ * An array of namespaces indexes to be searched by default
+ *
+ * @return int[] Namespace IDs
+ */
+ public function defaultNamespaces() {
+ return array_keys( $this->config->get( 'NamespacesToBeSearchedDefault' ), true );
+ }
+
+ /**
+ * Return the search engines we support. If only $wgSearchType
+ * is set, it'll be an array of just that one item.
+ *
+ * @return array
+ */
+ public function getSearchTypes() {
+ $alternatives = $this->config->get( 'SearchTypeAlternatives' ) ?: [];
+ array_unshift( $alternatives, $this->config->get( 'SearchType' ) );
+
+ return $alternatives;
+ }
+
+ /**
+ * Return the search engine configured in $wgSearchType, etc.
+ *
+ * @return string|null
+ */
+ public function getSearchType() {
+ return $this->config->get( 'SearchType' );
+ }
+
+ /**
+ * Get a list of namespace names useful for showing in tooltips
+ * and preferences.
+ *
+ * @param int[] $namespaces
+ * @return string[] List of names
+ */
+ public function namespacesAsText( $namespaces ) {
+ $formatted = array_map( [ $this->language, 'getFormattedNsText' ], $namespaces );
+ foreach ( $formatted as $key => $ns ) {
+ if ( empty( $ns ) ) {
+ $formatted[$key] = wfMessage( 'blanknamespace' )->text();
+ }
+ }
+ return $formatted;
+ }
+}
--- /dev/null
+<?php
+
+/**
+ * Factory class for SearchEngine.
+ * Allows to create engine of the specific type.
+ */
+class SearchEngineFactory {
+
+ /**
+ * Configuration for SearchEngine classes.
+ * @var SearchEngineConfig
+ */
+ private $config;
+
+ public function __construct( SearchEngineConfig $config ) {
+ $this->config = $config;
+ }
+
+ /**
+ * Create SearchEngine of the given type.
+ * @param string $type
+ * @return SearchEngine
+ */
+ public function create( $type = null ) {
+ $dbr = null;
+
+ $configType = $this->config->getSearchType();
+ $alternatives = $this->config->getSearchTypes();
+
+ if ( $type && in_array( $type, $alternatives ) ) {
+ $class = $type;
+ } elseif ( $configType !== null ) {
+ $class = $configType;
+ } else {
+ $dbr = wfGetDB( DB_SLAVE );
+ $class = $dbr->getSearchEngine();
+ }
+
+ $search = new $class( $dbr );
+ return $search;
+ }
+}
<?php
/**
- * A SearchResultSet wrapper for SearchEngine::getNearMatch
+ * A SearchResultSet wrapper for SearchNearMatcher
*/
class SearchNearMatchResultSet extends SearchResultSet {
private $fetched = false;
--- /dev/null
+<?php
+
+/**
+ * Implementation of near match title search.
+ * TODO: split into service/implementation.
+ */
+class SearchNearMatcher {
+ /**
+ * Configuration object.
+ * @param Config $config
+ */
+ protected $config;
+
+ /**
+ * Current language
+ * @var Language
+ */
+ private $language;
+
+ public function __construct( Config $config, Language $lang ) {
+ $this->config = $config;
+ $this->language = $lang;
+ }
+
+ /**
+ * If an exact title match can be found, or a very slightly close match,
+ * return the title. If no match, returns NULL.
+ *
+ * @param string $searchterm
+ * @return Title
+ */
+ public function getNearMatch( $searchterm ) {
+ $title = $this->getNearMatchInternal( $searchterm );
+
+ Hooks::run( 'SearchGetNearMatchComplete', [ $searchterm, &$title ] );
+ return $title;
+ }
+
+ /**
+ * Do a near match (see SearchEngine::getNearMatch) and wrap it into a
+ * SearchResultSet.
+ *
+ * @param string $searchterm
+ * @return SearchResultSet
+ */
+ public function getNearMatchResultSet( $searchterm ) {
+ return new SearchNearMatchResultSet( $this->getNearMatch( $searchterm ) );
+ }
+
+ /**
+ * Really find the title match.
+ * @param string $searchterm
+ * @return null|Title
+ */
+ protected function getNearMatchInternal( $searchterm ) {
+ $lang = $this->language;
+
+ $allSearchTerms = [ $searchterm ];
+
+ if ( $lang->hasVariants() ) {
+ $allSearchTerms = array_unique( array_merge(
+ $allSearchTerms,
+ $lang->autoConvertToAllVariants( $searchterm )
+ ) );
+ }
+
+ $titleResult = null;
+ if ( !Hooks::run( 'SearchGetNearMatchBefore', [ $allSearchTerms, &$titleResult ] ) ) {
+ return $titleResult;
+ }
+
+ foreach ( $allSearchTerms as $term ) {
+
+ # Exact match? No need to look further.
+ $title = Title::newFromText( $term );
+ if ( is_null( $title ) ) {
+ return null;
+ }
+
+ # Try files if searching in the Media: namespace
+ if ( $title->getNamespace() == NS_MEDIA ) {
+ $title = Title::makeTitle( NS_FILE, $title->getText() );
+ }
+
+ if ( $title->isSpecialPage() || $title->isExternal() || $title->exists() ) {
+ return $title;
+ }
+
+ # See if it still otherwise has content is some sane sense
+ $page = WikiPage::factory( $title );
+ if ( $page->hasViewableContent() ) {
+ return $title;
+ }
+
+ if ( !Hooks::run( 'SearchAfterNoDirectMatch', [ $term, &$title ] ) ) {
+ return $title;
+ }
+
+ # Now try all lower case (i.e. first letter capitalized)
+ $title = Title::newFromText( $lang->lc( $term ) );
+ if ( $title && $title->exists() ) {
+ return $title;
+ }
+
+ # Now try capitalized string
+ $title = Title::newFromText( $lang->ucwords( $term ) );
+ if ( $title && $title->exists() ) {
+ return $title;
+ }
+
+ # Now try all upper case
+ $title = Title::newFromText( $lang->uc( $term ) );
+ if ( $title && $title->exists() ) {
+ return $title;
+ }
+
+ # Now try Word-Caps-Breaking-At-Word-Breaks, for hyphenated names etc
+ $title = Title::newFromText( $lang->ucwordbreaks( $term ) );
+ if ( $title && $title->exists() ) {
+ return $title;
+ }
+
+ // Give hooks a chance at better match variants
+ $title = null;
+ if ( !Hooks::run( 'SearchGetNearMatch', [ $term, &$title ] ) ) {
+ return $title;
+ }
+ }
+
+ $title = Title::newFromText( $searchterm );
+
+ # Entering an IP address goes to the contributions page
+ if ( $this->config->get( 'EnableSearchContributorsByIP' ) ) {
+ if ( ( $title->getNamespace() == NS_USER && User::isIP( $title->getText() ) )
+ || User::isIP( trim( $searchterm ) ) ) {
+ return SpecialPage::getTitleFor( 'Contributions', $title->getDBkey() );
+ }
+ }
+
+ # Entering a user goes to the user page whether it's there or not
+ if ( $title->getNamespace() == NS_USER ) {
+ return $title;
+ }
+
+ # Go to images that exist even if there's no local page.
+ # There may have been a funny upload, or it may be on a shared
+ # file repository such as Wikimedia Commons.
+ if ( $title->getNamespace() == NS_FILE ) {
+ $image = wfFindFile( $title );
+ if ( $image ) {
+ return $title;
+ }
+ }
+
+ # MediaWiki namespace? Page may be "implied" if not customized.
+ # Just return it, with caps forced as the message system likes it.
+ if ( $title->getNamespace() == NS_MEDIAWIKI ) {
+ return Title::makeTitle( NS_MEDIAWIKI, $lang->ucfirst( $title->getText() ) );
+ }
+
+ # Quoted term? Try without the quotes...
+ $matches = [];
+ if ( preg_match( '/^"([^"]+)"$/', $searchterm, $matches ) ) {
+ return self::getNearMatch( $matches[1] );
+ }
+
+ return null;
+ }
+}
* @ingroup Search
*/
+use MediaWiki\MediaWikiServices;
+
/**
* @todo FIXME: This class is horribly factored. It would probably be better to
* have a useful base class to which you pass some standard information, then
*/
protected $mText;
+ /**
+ * @var SearchEngine
+ */
+ protected $searchEngine;
+
/**
* Return a new SearchResult and initializes it with a title.
*
* @return SearchResult
*/
public static function newFromTitle( $title ) {
- $result = new self();
+ $result = new static();
$result->initFromTitle( $title );
return $result;
}
$this->mImage = wfFindFile( $this->mTitle );
}
}
+ $this->searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
}
/**
protected function initText() {
if ( !isset( $this->mText ) ) {
if ( $this->mRevision != null ) {
- $this->mText = SearchEngine::create()
- ->getTextFromContent( $this->mTitle, $this->mRevision->getContent() );
+ $this->mText = $this->searchEngine->getTextFromContent(
+ $this->mTitle, $this->mRevision->getContent() );
} else { // TODO: can we fetch raw wikitext for commons images?
$this->mText = '';
}
$this->initText();
// TODO: make highliter take a content object. Make ContentHandler a factory for SearchHighliter.
- list( $contextlines, $contextchars ) = SearchEngine::userHighlightPrefs();
+ list( $contextlines, $contextchars ) = $this->searchEngine->userHighlightPrefs();
$h = new SearchHighlighter();
if ( count( $terms ) > 0 ) {
$this->remove( 'wsTokenSecrets' );
}
+ /**
+ * Fetch the secret keys for self::setSecret() and self::getSecret().
+ * @return string[] Encryption key, HMAC key
+ */
+ private function getSecretKeys() {
+ global $wgSessionSecret, $wgSecretKey;
+
+ $wikiSecret = $wgSessionSecret ?: $wgSecretKey;
+ $userSecret = $this->get( 'wsSessionSecret', null );
+ if ( $userSecret === null ) {
+ $userSecret = \MWCryptRand::generateHex( 32 );
+ $this->set( 'wsSessionSecret', $userSecret );
+ }
+
+ $keymats = hash_pbkdf2( 'sha256', $wikiSecret, $userSecret, 10001, 64, true );
+ return [
+ substr( $keymats, 0, 32 ),
+ substr( $keymats, 32, 32 ),
+ ];
+ }
+
+ /**
+ * Set a value in the session, encrypted
+ *
+ * This relies on the secrecy of $wgSecretKey (by default), or $wgSessionSecret.
+ *
+ * @param string|int $key
+ * @param mixed $value
+ */
+ public function setSecret( $key, $value ) {
+ global $wgSessionInsecureSecrets;
+
+ list( $encKey, $hmacKey ) = $this->getSecretKeys();
+ $serialized = serialize( $value );
+
+ // The code for encryption (with OpenSSL) and sealing is taken from
+ // Chris Steipp's OATHAuthUtils class in Extension::OATHAuth.
+
+ // Encrypt
+ // @todo: import a pure-PHP library for AES instead of doing $wgSessionInsecureSecrets
+ $iv = \MWCryptRand::generate( 16, true );
+ if ( function_exists( 'openssl_encrypt' ) ) {
+ $ciphertext = openssl_encrypt( $serialized, 'aes-256-ctr', $encKey, OPENSSL_RAW_DATA, $iv );
+ if ( $ciphertext === false ) {
+ throw new UnexpectedValueException( 'Encryption failed: ' . openssl_error_string() );
+ }
+ } elseif ( function_exists( 'mcrypt_encrypt' ) ) {
+ $ciphertext = mcrypt_encrypt( 'rijndael-128', $encKey, $serialized, 'ctr', $iv );
+ if ( $ciphertext === false ) {
+ throw new UnexpectedValueException( 'Encryption failed' );
+ }
+ } elseif ( $wgSessionInsecureSecrets ) {
+ $ex = new \Exception( 'No encryption is available, storing data as plain text' );
+ $this->logger->warning( $ex->getMessage(), [ 'exception' => $ex ] );
+ $ciphertext = $serialized;
+ } else {
+ throw new \BadMethodCallException(
+ 'Encryption is not available. You really should install the PHP OpenSSL extension, ' .
+ 'or failing that the mcrypt extension. But if you really can\'t and you\'re willing ' .
+ 'to accept insecure storage of sensitive session data, set ' .
+ '$wgSessionInsecureSecrets = true in LocalSettings.php to make this exception go away.'
+ );
+ }
+
+ // Seal
+ $sealed = base64_encode( $iv ) . '.' . base64_encode( $ciphertext );
+ $hmac = hash_hmac( 'sha256', $sealed, $hmacKey, true );
+ $encrypted = base64_encode( $hmac ) . '.' . $sealed;
+
+ // Store
+ $this->set( $key, $encrypted );
+ }
+
+ /**
+ * Fetch a value from the session that was set with self::setSecret()
+ * @param string|int $key
+ * @param mixed $default Returned if $this->exists( $key ) would be false or decryption fails
+ * @return mixed
+ */
+ public function getSecret( $key, $default = null ) {
+ global $wgSessionInsecureSecrets;
+
+ // Fetch
+ $encrypted = $this->get( $key, null );
+ if ( $encrypted === null ) {
+ return $default;
+ }
+
+ // The code for unsealing, checking, and decrypting (with OpenSSL) is
+ // taken from Chris Steipp's OATHAuthUtils class in
+ // Extension::OATHAuth.
+
+ // Unseal and check
+ $pieces = explode( '.', $encrypted );
+ if ( count( $pieces ) !== 3 ) {
+ $ex = new \Exception( 'Invalid sealed-secret format' );
+ $this->logger->warning( $ex->getMessage(), [ 'exception' => $ex ] );
+ return $default;
+ }
+ list( $hmac, $iv, $ciphertext ) = $pieces;
+ list( $encKey, $hmacKey ) = $this->getSecretKeys();
+ $integCalc = hash_hmac( 'sha256', $iv . '.' . $ciphertext, $hmacKey, true );
+ if ( !hash_equals( $integCalc, base64_decode( $hmac ) ) ) {
+ $ex = new \Exception( 'Sealed secret has been tampered with, aborting.' );
+ $this->logger->warning( $ex->getMessage(), [ 'exception' => $ex ] );
+ return $default;
+ }
+
+ // Decrypt
+ // @todo: import a pure-PHP library for AES instead of doing $wgSessionInsecureSecrets
+ if ( function_exists( 'openssl_decrypt' ) ) {
+ $serialized = openssl_decrypt(
+ base64_decode( $ciphertext ), 'aes-256-ctr', $encKey, OPENSSL_RAW_DATA, base64_decode( $iv )
+ );
+ if ( $serialized === false ) {
+ $ex = new \Exception( 'Decyption failed: ' . openssl_error_string() );
+ $this->logger->debug( $ex->getMessage(), [ 'exception' => $ex ] );
+ return $default;
+ }
+ } elseif ( function_exists( 'mcrypt_decrypt' ) ) {
+ $serialized = mcrypt_decrypt(
+ 'rijndael-128', $encKey, base64_decode( $ciphertext ), 'ctr', base64_decode( $iv )
+ );
+ if ( $serialized === false ) {
+ $ex = new \Exception( 'Decyption failed' );
+ $this->logger->debug( $ex->getMessage(), [ 'exception' => $ex ] );
+ return $default;
+ }
+ } elseif ( $wgSessionInsecureSecrets ) {
+ $ex = new \Exception(
+ 'No encryption is available, retrieving data that was stored as plain text'
+ );
+ $this->logger->warning( $ex->getMessage(), [ 'exception' => $ex ] );
+ $serialized = base64_decode( $ciphertext );
+ } else {
+ throw new \BadMethodCallException(
+ 'Encryption is not available. You really should install the PHP OpenSSL extension, ' .
+ 'or failing that the mcrypt extension. But if you really can\'t and you\'re willing ' .
+ 'to accept insecure storage of sensitive session data, set ' .
+ '$wgSessionInsecureSecrets = true in LocalSettings.php to make this exception go away.'
+ );
+ }
+
+ $value = unserialize( $serialized );
+ if ( $value === false && $serialized !== serialize( false ) ) {
+ $value = $default;
+ }
+ return $value;
+ }
+
/**
* Delay automatic saving while multiple updates are being made
*
* @file
*/
+use MediaWiki\MediaWikiServices;
+
/**
* Factory class to create Skin objects
*
private $displayNames = [];
/**
- * @var SkinFactory
+ * @deprecated in 1.27
+ * @return SkinFactory
*/
- private static $self;
-
public static function getDefaultInstance() {
- if ( !self::$self ) {
- self::$self = new self;
- }
-
- return self::$self;
+ return MediaWikiServices::getInstance()->getSkinFactory();
}
/**
* What is limit to fetch from DB
*
* Used to make it appear the DB stores less results then it actually does
- * @param $uiLimit int Limit from UI
- * @param $uiOffset int Offset from UI
+ * @param int $uiLimit Limit from UI
+ * @param int $uiOffset Offset from UI
* @return int Limit to use for DB (not including extra row to see if at end)
*/
protected function getDBLimit( $uiLimit, $uiOffset ) {
<?php
+use MediaWiki\MediaWikiServices;
+
/**
* Parent class for all special pages.
*
/**
* Get a localised Title object for a specified special page name
*
+ * @since 1.9
+ * @since 1.21 $fragment parameter added
+ *
* @param string $name
* @param string|bool $subpage Subpage string, or false to not use a subpage
* @param string $fragment The link fragment (after the "#")
return [];
}
- $searchEngine = SearchEngine::create();
+ $searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
$searchEngine->setLimitOffset( $limit, $offset );
$searchEngine->setNamespaces( [] );
$result = $searchEngine->defaultPrefixSearch( $search );
/**
* @defgroup Watchlist Users watchlist handling
*/
+use MediaWiki\Linker\LinkTarget;
/**
* Implements Special:EditWatchlist
// This should provide safer streaming for pages with history
wfResetOutputBuffers();
$request->response()->header( "Content-type: application/xml; charset=utf-8" );
+ $request->response()->header( "X-Robots-Tag: noindex,nofollow" );
if ( $request->getCheck( 'wpDownload' ) ) {
// Provide a sane filename suggestion
<?php
+use MediaWiki\MediaWikiServices;
+
/**
* Implements Special:FileDuplicateSearch
*
// No prefix suggestion outside of file namespace
return [];
}
- $searchEngine = SearchEngine::create();
+ $searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
$searchEngine->setLimitOffset( $limit, $offset );
// Autocomplete subpage the same as a normal search, but just for files
$searchEngine->setNamespaces( [ NS_FILE ] );
/**
* Output the results of the query.
*
- * @param $out OutputPage
- * @param $skin Skin (deprecated presumably)
- * @param $dbr IDatabase
- * @param $res ResultWrapper Results from query
- * @param $num integer Number of results
- * @param $offset integer Paging offset (Should always be 0 in our case)
+ * @param OutputPage $out
+ * @param Skin $skin (deprecated presumably)
+ * @param IDatabase $dbr
+ * @param ResultWrapper $res Results from query
+ * @param int $num Number of results
+ * @param int $offset Paging offset (Should always be 0 in our case)
*/
protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
$prevMediaType = null;
/**
* Output a row of the stats table
*
- * @param $mime String mime type (e.g. image/jpeg)
- * @param $count integer Number of images of this type
- * @param $totalBytes integer Total space for images of this type
+ * @param string $mime mime type (e.g. image/jpeg)
+ * @param int $count Number of images of this type
+ * @param int $totalBytes Total space for images of this type
*/
protected function outputTableRow( $mime, $count, $bytes ) {
$mimeSearch = SpecialPage::getTitleFor( 'MIMEsearch', $mime );
/**
* Given a mime type, return a comma separated list of allowed extensions.
*
- * @param $mime String mime type
- * @return String Comma separated list of allowed extensions (e.g. ".ogg, .oga")
+ * @param string $mime mime type
+ * @return string Comma separated list of allowed extensions (e.g. ".ogg, .oga")
*/
private function getExtensionList( $mime ) {
$exts = MimeMagic::singleton()->getExtensionsForType( $mime );
/**
* Output a header for a new media type section
*
- * @param $mediaType string A media type (e.g. from the MEDIATYPE_xxx constants)
+ * @param string $mediaType A media type (e.g. from the MEDIATYPE_xxx constants)
*/
protected function outputMediaType( $mediaType ) {
$this->getOutput()->addHTML(
/**
* parse the fake title format that this special page abuses querycache with.
*
- * @param $fakeTitle String A string formatted as <media type>;<mime type>;<count>;<bytes>
- * @return Array The constituant parts of $fakeTitle
+ * @param string $fakeTitle A string formatted as <media type>;<mime type>;<count>;<bytes>
+ * @return array The constituant parts of $fakeTitle
*/
private function splitFakeTitle( $fakeTitle ) {
return explode( ';', $fakeTitle, 4 );
* This method isn't used, since we override outputResults, but
* we need to implement since abstract in parent class.
*
- * @param $skin Skin
- * @param $result stdObject Result row
+ * @param Skin $skin
+ * @param stdObject $result Result row
* @return bool|string|void
* @throws MWException
*/
/**
* Initialize total values so we can figure out percentages later.
*
- * @param $dbr IDatabase
- * @param $res ResultWrapper
+ * @param IDatabase $dbr
+ * @param ResultWrapper $res
*/
public function preprocessResults( $dbr, $res ) {
$this->totalCount = $this->totalBytes = 0;
* @ingroup SpecialPage
*/
+use MediaWiki\MediaWikiServices;
+
/**
* implements Special:Search - Run text & title search and display the output
* @ingroup SpecialPage
*/
protected $customCaptions;
+ /**
+ * Search engine configurations.
+ * @var SearchEngineConfig
+ */
+ protected $searchConfig;
+
const NAMESPACES_CURRENT = 'sense';
public function __construct() {
parent::__construct( 'Search' );
+ $this->searchConfig = MediaWikiServices::getInstance()->getSearchEngineConfig();
}
/**
$nslist = $this->powerSearch( $request );
if ( !count( $nslist ) ) {
# Fallback to user preference
- $nslist = SearchEngine::userNamespaces( $user );
+ $nslist = $this->searchConfig->userNamespaces( $user );
}
$profile = null;
return;
}
# If there's an exact or very near match, jump right there.
- $title = SearchEngine::getNearMatch( $term );
+ $title = $this->getSearchEngine()
+ ->getNearMatcher( $this->getConfig() )->getNearMatch( $term );
if ( !is_null( $title ) &&
Hooks::run( 'SpecialSearchGoResult', [ $term, $title, &$url ] )
*/
protected function powerSearch( &$request ) {
$arr = [];
- foreach ( SearchEngine::searchableNamespaces() as $ns => $name ) {
+ foreach ( $this->searchConfig->searchableNamespaces() as $ns => $name ) {
if ( $request->getCheck( 'ns' . $ns ) ) {
$arr[] = $ns;
}
$user->setOption( 'searchNs' . $n, true );
}
- $user->saveSettings();
+ DeferredUpdates::addCallableUpdate( function () use ( $user ) {
+ $user->saveSettings();
+ } );
+
return true;
}
// Groups namespaces into rows according to subject
$rows = [];
- foreach ( SearchEngine::searchableNamespaces() as $namespace => $name ) {
+ foreach ( $this->searchConfig->searchableNamespaces() as $namespace => $name ) {
$subject = MWNamespace::getSubject( $namespace );
if ( !array_key_exists( $subject, $rows ) ) {
$rows[$subject] = "";
*/
protected function getSearchProfiles() {
// Builds list of Search Types (profiles)
- $nsAllSet = array_keys( SearchEngine::searchableNamespaces() );
-
+ $nsAllSet = array_keys( $this->searchConfig->searchableNamespaces() );
+ $defaultNs = $this->searchConfig->defaultNamespaces();
$profiles = [
'default' => [
'message' => 'searchprofile-articles',
'tooltip' => 'searchprofile-articles-tooltip',
- 'namespaces' => SearchEngine::defaultNamespaces(),
- 'namespace-messages' => SearchEngine::namespacesAsText(
- SearchEngine::defaultNamespaces()
+ 'namespaces' => $defaultNs,
+ 'namespace-messages' => $this->searchConfig->namespacesAsText(
+ $defaultNs
),
],
'images' => [
public function getSearchEngine() {
if ( $this->searchEngine === null ) {
$this->searchEngine = $this->searchEngineType ?
- SearchEngine::create( $this->searchEngineType ) : SearchEngine::create();
+ MediaWikiServices::getInstance()->getSearchEngineFactory()->create( $this->searchEngineType ) :
+ MediaWikiServices::getInstance()->newSearchEngine();
}
return $this->searchEngine;
throw new UserBlockedError( $user->getBlock() );
}
+ // Global blocks
+ if ( $user->isBlockedGlobally() ) {
+ throw new UserBlockedError( $user->getGlobalBlock() );
+ }
+
# Check whether we actually want to allow changing stuff
$this->checkReadOnly();
$sessionKey = $this->mUpload->stashSession();
+ // Add styles for the warning, reused from the live preview
+ $this->getOutput()->addModuleStyles( 'mediawiki.special.upload' );
+
$warningHtml = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n"
- . '<div class="warningbox"><ul>';
+ . '<div class="mw-destfile-warning"><ul>';
foreach ( $warnings as $warning => $args ) {
if ( $warning == 'badfilename' ) {
$this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
case 'img_description':
return Linker::formatComment( $value );
case 'count':
- return intval( $value ) + 1;
+ return $this->getLanguage()->formatNum( intval( $value ) + 1 );
case 'top':
// Messages: listfiles-latestversion-yes, listfiles-latestversion-no
return $this->msg( 'listfiles-latestversion-' . $value );
* @license GPL 2+
* @author Daniel Kinzler
*/
+use MediaWiki\Linker\LinkTarget;
/**
* A service for generating links from page titles.
* @license GPL 2+
* @author Daniel Kinzler
*/
+use MediaWiki\Linker\LinkTarget;
/**
* A codec for %MediaWiki page titles.
* @param string $text The page title. Should be valid. Only minimal normalization is applied.
* Underscores will be replaced.
* @param string $fragment The fragment name (may be empty).
+ * @param string $interwiki The interwiki name (may be empty).
*
* @throws InvalidArgumentException If the namespace is invalid
* @return string
*/
- public function formatTitle( $namespace, $text, $fragment = '' ) {
+ public function formatTitle( $namespace, $text, $fragment = '', $interwiki = '' ) {
if ( $namespace !== false ) {
$namespace = $this->getNamespaceName( $namespace, $text );
$text = $text . '#' . $fragment;
}
+ if ( $interwiki !== '' ) {
+ $text = $interwiki . ':' . $text;
+ }
+
$text = str_replace( '_', ' ', $text );
return $text;
// be refactored to avoid this.
$parts = $this->splitTitleString( $text, $defaultNamespace );
- // Interwiki links are not supported by TitleValue
- if ( $parts['interwiki'] !== '' ) {
- throw new MalformedTitleException( 'title-invalid-interwiki', $text );
- }
-
// Relative fragment links are not supported by TitleValue
if ( $parts['dbkey'] === '' ) {
throw new MalformedTitleException( 'title-invalid-empty', $text );
}
- return new TitleValue( $parts['namespace'], $parts['dbkey'], $parts['fragment'] );
+ return new TitleValue(
+ $parts['namespace'],
+ $parts['dbkey'],
+ $parts['fragment'],
+ $parts['interwiki']
+ );
}
/**
* @return string
*/
public function getPrefixedText( LinkTarget $title ) {
- return $this->formatTitle( $title->getNamespace(), $title->getText(), '' );
+ return $this->formatTitle(
+ $title->getNamespace(),
+ $title->getText(),
+ '',
+ $title->getInterwiki()
+ );
}
/**
* @return string
*/
public function getFullText( LinkTarget $title ) {
- return $this->formatTitle( $title->getNamespace(), $title->getText(), $title->getFragment() );
+ return $this->formatTitle(
+ $title->getNamespace(),
+ $title->getText(),
+ $title->getFragment(),
+ $title->getInterwiki()
+ );
}
/**
* @license GPL 2+
* @author Daniel Kinzler
*/
+use MediaWiki\Linker\LinkTarget;
/**
* Represents a link rendering service for %MediaWiki.
* @license GPL 2+
* @author Daniel Kinzler
*/
+use MediaWiki\Linker\LinkTarget;
/**
* A title formatter service for MediaWiki.
* @param int|bool $namespace The namespace ID (or false, if the namespace should be ignored)
* @param string $text The page title
* @param string $fragment The fragment name (may be empty).
+ * @param string $interwiki The interwiki prefix (may be empty).
*
* @return string
*/
- public function formatTitle( $namespace, $text, $fragment = '' );
+ public function formatTitle( $namespace, $text, $fragment = '', $interwiki = '' );
/**
* Returns the title text formatted for display, without namespace of fragment.
* @license GPL 2+
* @author Daniel Kinzler
*/
+use MediaWiki\Linker\LinkTarget;
use Wikimedia\Assert\Assert;
/**
* @note In contrast to Title, this is designed to be a plain value object. That is,
* it is immutable, does not use global state, and causes no side effects.
*
- * @note TitleValue represents the title of a local page (or fragment of a page).
- * It does not represent a link, and does not support interwiki prefixes etc.
- *
* @see https://www.mediawiki.org/wiki/Requests_for_comment/TitleValue
* @since 1.23
*/
*/
protected $fragment;
+ /**
+ * @var string
+ */
+ protected $interwiki;
+
/**
* Constructs a TitleValue.
*
* @param string $dbkey The page title in valid DBkey form. No normalization is applied.
* @param string $fragment The fragment title. Use '' to represent the whole page.
* No validation or normalization is applied.
+ * @param string $interwiki The interwiki component
*
* @throws InvalidArgumentException
*/
- public function __construct( $namespace, $dbkey, $fragment = '' ) {
+ public function __construct( $namespace, $dbkey, $fragment = '', $interwiki = '' ) {
Assert::parameterType( 'integer', $namespace, '$namespace' );
Assert::parameterType( 'string', $dbkey, '$dbkey' );
Assert::parameterType( 'string', $fragment, '$fragment' );
+ Assert::parameterType( 'string', $interwiki, '$interwiki' );
// Sanity check, no full validation or normalization applied here!
Assert::parameter( !preg_match( '/^_|[ \r\n\t]|_$/', $dbkey ), '$dbkey', 'invalid DB key' );
$this->namespace = $namespace;
$this->dbkey = $dbkey;
$this->fragment = $fragment;
+ $this->interwiki = $interwiki;
}
/**
* @return TitleValue
*/
public function createFragmentTarget( $fragment ) {
- return new TitleValue( $this->namespace, $this->dbkey, $fragment );
+ return new TitleValue(
+ $this->namespace,
+ $this->dbkey,
+ $fragment,
+ $this->interwiki
+ );
+ }
+
+ /**
+ * Whether it has an interwiki part
+ *
+ * @since 1.27
+ * @return bool
+ */
+ public function isExternal() {
+ return $this->interwiki !== '';
+ }
+
+ /**
+ * Returns the interwiki part
+ *
+ * @since 1.27
+ * @return string
+ */
+ public function getInterwiki() {
+ return $this->interwiki;
}
/**
$name .= '#' . $this->fragment;
}
+ if ( $this->interwiki !== '' ) {
+ $name = $this->interwiki . ':' . $name;
+ }
+
return $name;
}
}
* @file
*/
+use MediaWiki\MediaWikiServices;
use MediaWiki\Session\SessionManager;
use MediaWiki\Session\Token;
protected $mImplicitGroups;
/** @var array */
protected $mFormerGroups;
- /** @var bool */
- protected $mBlockedGlobally;
+ /** @var Block */
+ protected $mGlobalBlock;
/** @var bool */
protected $mLocked;
/** @var bool */
foreach ( LanguageConverter::$languagesWithVariants as $langCode ) {
$defOpt[$langCode == $wgContLang->getCode() ? 'variant' : "variant-$langCode"] = $langCode;
}
- foreach ( SearchEngine::searchableNamespaces() as $nsnum => $nsname ) {
+ $namespaces = MediaWikiServices::getInstance()->getSearchEngineConfig()->searchableNamespaces();
+ foreach ( $namespaces as $nsnum => $nsname ) {
$defOpt['searchNs' . $nsnum] = !empty( $wgNamespacesToBeSearchedDefault[$nsnum] );
}
$defOpt['skin'] = Skin::normalizeKey( $wgDefaultSkin );
* @return bool True if blocked, false otherwise
*/
public function isBlockedGlobally( $ip = '' ) {
- if ( $this->mBlockedGlobally !== null ) {
- return $this->mBlockedGlobally;
+ return $this->getGlobalBlock( $ip ) instanceof Block;
+ }
+
+ /**
+ * Check if user is blocked on all wikis.
+ * Do not use for actual edit permission checks!
+ * This is intended for quick UI checks.
+ *
+ * @param string $ip IP address, uses current client if none given
+ * @return Block|null Block object if blocked, null otherwise
+ * @throws FatalError
+ * @throws MWException
+ */
+ public function getGlobalBlock( $ip = '' ) {
+ if ( $this->mGlobalBlock !== null ) {
+ return $this->mGlobalBlock ?: null;
}
// User is already an IP?
if ( IP::isIPAddress( $this->getName() ) ) {
$ip = $this->getRequest()->getIP();
}
$blocked = false;
- Hooks::run( 'UserIsBlockedGlobally', [ &$this, $ip, &$blocked ] );
- $this->mBlockedGlobally = (bool)$blocked;
- return $this->mBlockedGlobally;
+ $block = null;
+ Hooks::run( 'UserIsBlockedGlobally', [ &$this, $ip, &$blocked, &$block ] );
+
+ if ( $blocked && $block === null ) {
+ // back-compat: UserIsBlockedGlobally didn't have $block param first
+ $block = new Block;
+ $block->setTarget( $ip );
+ }
+
+ $this->mGlobalBlock = $blocked ? $block : false;
+ return $this->mGlobalBlock ?: null;
}
/**
"BAB ZAA",
"ASammour",
"Maroen1990",
- "Sonic N800"
+ "Sonic N800",
+ "Jdforrester"
]
},
"tog-underline": "سطر تحت الوصلات:",
"tog-watchdefault": "أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي",
"tog-watchmoves": "أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي",
"tog-watchdeletion": "أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي",
+ "tog-watchuploads": "أضف الملفات الجديدة التي رفعتها إلى قائمة مراقبتي",
"tog-watchrollback": "أضف إلى قائمة مراقبتي الصفحات التي كنت أجريت فيها استرجاعات",
"tog-minordefault": "أشِّر كل التعديلات على أنها طفيفة مبدئيا",
"tog-previewontop": "أظهر معاينة النص فوق صندوق التحرير",
"title-invalid-utf8": "عنوان الصفحة المطلوب يحتوي سلسلة محارف UTF-8 غير صالحة.",
"title-invalid-interwiki": "عنوان الصفحة المطلوب يتضمن وصلة لحلقة لغة وهو ما لا يمكن استخدامه في العناوين.",
"title-invalid-talk-namespace": "عنوان الصفحة المطلوبة يشير إلى صفحة نقاش غير موجودة.",
- "title-invalid-characters": "عنوان الصفحة المطلوب يتضمن محارف غير صالحة: \"$1\"",
+ "title-invalid-characters": "عنوان الصفحة المطلوب يتضمن رموزًا غير صالحة: \"$1\"",
"title-invalid-leading-colon": "عنوان الصفحة المطلوب يتضمن فاصلة غير صالحة في بدايته.",
"perfcached": "البيانات التالية مخبأة و قد لا تكون محدثة. {{PLURAL:$1||نتيجة واحدة|نتيجتان|$1 نتائج|$1 نتيجة}} على الأكثر {{PLURAL:$1||مخبّأة|مخبّأتان|مخبّأة}}.",
"perfcachedts": "البيانات التالية مخزنة، وكان آخر تحديث لها في $1. العدد الأقصى للنتائج المخزنة هو {{PLURAL:$4||نتيجة واحدة|نتيجتان|$4 نتائج|$4 نتيجة}}.",
"minoredit": "هذا تعديل طفيف",
"watchthis": "راقب هذه الصفحة",
"savearticle": "احفظ الصفحة",
+ "publishpage": "نشر الصفحة",
"preview": "عرض مسبق",
"showpreview": "أظهر معاينة",
"showdiff": "عرض التغييرات",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|protexó}} a $3 $4 [en cascada]",
"logentry-protect-modify": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|camudó}} el nivel de protección de $3 $4 [en cascada]",
- "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de {{GENDER:$3|$3}} dende $4 a $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de {{GENDER:$6|$3}} dende $4 a $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|camudó}} la pertenencia a grupos de $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|promocionó}} automáticamente de $4 a $5",
"logentry-upload-upload": "$1 {{GENDER:$2|xubió}} $3",
"resetpass_forbidden": "رمزلر دَییشیلمز",
"resetpass-no-info": "بو صحیفهنی دوغرو گؤردوگونوز اوچون سیستمه گیرمهلیسینیز.",
"resetpass-submit-loggedin": "رمزی دَییشدیر",
- "resetpass-submit-cancel": "Ù\84غÙ\88 ائت",
+ "resetpass-submit-cancel": "Ù\88ازگئÚ\86",
"resetpass-wrong-oldpass": "یانلیش گئچیجی یا ایندیکی رمز.\nاولا بیلر سیز باشاریلیقلا رمزینیزی دَییشمیسینیز یوخسا یئنی گئچرلی رمز ایستهمیسینیز.",
"resetpass-recycled": "لوطفا گیریش رمزینیزی ایندیکی اولمایان بیر ایری گیریش رمزینه دَییشین",
"resetpass-temp-emailed": "سیز بیر کدلانمیش موقت ایمیل له گیریش ائدیب سیز.\nگیریشینیزه سون وئرمک اوچون یئنی دن بیر گیریش رمزی وئرمه لی سیز:",
"feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
"feedback-bugnew": "یوخلادیم. یئنی بیر خطا گؤندر",
"feedback-bugornote": "بیر تکنیکی خطانی شرح وئرمگه آماده اولساز، لوطفاً [$1 بیر باگ بیلدیرین].\nاو اولماسا، بو آشاغیداکی ساده فورمدان ایستیفاده ائده بیلرسینیز. سیزین باخیشینیز، ایستیفادهچی آدینیزلا، «[$3 $2]» صحیفهسینه آرتیریلاجاقدیر.",
- "feedback-cancel": "Ù\84غÙ\88 ائت",
+ "feedback-cancel": "Ù\88ازگئÚ\86",
"feedback-close": "اولدو",
"feedback-error-title": "خطا",
"feedback-error1": "خطا: API-دان تانینمامیش نتیجه",
"viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) ҡарарға",
"searchmenu-exists": "'''Был вики-проектта «[[:$1]]» бите бар'''",
"searchmenu-new": "{{PLURAL:$2|}}<strong>Был википроектта \"[[:$1]]\" бите булдырырға.</strong>",
- "searchprofile-articles": "ÐÑ\81Ñ\82Ó\99лек биÑ\82Ñ\82Ó\99Ñ\80е",
+ "searchprofile-articles": "Төп биÑ\82Ñ\82Ó\99Ñ\80",
"searchprofile-images": "Мультимедиа",
"searchprofile-everything": "Барыһы",
"searchprofile-advanced": "Киңәйтелгән",
"grant-blockusers": "Иҫәп яҙмаларын блоклау һәм блоклауҙы асыу",
"grant-createaccount": "Иҫәп яҙмаһын булдырырға",
"grant-createeditmovepage": "Биттәрҙе булдырыу,мөхәррирләү һәм исемен үҙгәртеү",
- "grant-delete": "Журналдағы биттәрҙе юйыу,төҙәтеү",
+ "grant-delete": "Журналдағы биттәрҙе юйыу, төҙәтеү",
"grant-editinterface": "MediaWiki исеме арауығында төҙәтеү һәм ҡулланыусы CSS/JavaScript",
"grant-editmycssjs": "CSS/JavaScript ҡулланыусы кодын төҙәтеү",
"grant-editmyoptions": "Һеҙҙең ҡулланыусы көйләүҙәрен мөхәррирләү",
"ipaddressorusername": "Ҡатнашыусының IP-адресы йәки исеме:",
"ipbexpiry": "Тамамлана:",
"ipbreason": "Сәбәп:",
- "ipbreason-dropdown": "*Ғәҙәттәге бикләү сәбәптәре \n** Ялған мәғлүмәт өҫтәү\n** Биттәрҙең эстәлеген юйыу\n** Тышҡы сайттарға һылтанмалар спамлау\n** Биттәргә мәғәнәһеҙ яҙмалар (ҡый) өҫтәү \n** Ҡатнашыусыларға янау (эҙәрлекләү)\n** Бер нисә иҫәп яҙмаларын артығы менән булдырыу\n** Килешһеҙ иҫәп яҙмаһы",
+ "ipbreason-dropdown": "*Ғәҙәттәге бикләү сәбәптәре \n** Ялған мәғлүмәт өҫтәү\n** Биттәрҙең эстәлеген юйыу\n** Тышҡы сайттарға спам-һылтанмалар \n** Биттәргә мәғәнәһеҙ яҙмалар өҫтәү \n** Ҡатнашыусыларға янау (эҙәрлекләү)\n** Бер нисә иҫәп яҙмаһын булдырыу\n** Килешһеҙ иҫәп яҙмаһы",
"ipb-hardblock": "Был IP-адрестан танылған ҡулланыусыларға мөхәррирләүҙе тыйырға",
"ipbcreateaccount": "Яңы иҫәп яҙыуҙарын булдырыуҙы тыйыу",
"ipbemailban": "Электрон почтаға хат ебәреүҙе тыйыу",
"minoredit": "Гэта дробная праўка",
"watchthis": "Назіраць за гэтай старонкай",
"savearticle": "Захаваць старонку",
+ "publishpage": "Апублікаваць старонку",
"preview": "Папярэдні прагляд",
"showpreview": "Праглядзець",
"showdiff": "Паказаць зьмены",
"recentchangeslinked-page": "Назва старонкі:",
"recentchangeslinked-to": "Замест гэтага паказваць зьмены на старонках, што спасылаюцца на гэтую старонку",
"recentchanges-page-added-to-category": "[[:$1]] дададзеная да катэгорыі",
- "recentchanges-page-added-to-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|{{PLURAL:$2|$2 старонка была дададзеная|$2 старонкі былі дададзеныя|$2 старонак былі дададзеныя}}]] да катэгорыі",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] дададзеная да катэгорыі, [[Special:WhatLinksHere/$1|гэтая старонка ўключаная ў іншыя старонкі]]",
"recentchanges-page-removed-from-category": "[[:$1]] выдаленая з катэгорыі",
- "recentchanges-page-removed-from-category-bundled": "[[:$1]] і яшчэ [[Special:WhatLinksHere/$1|$2 {{PLURAL:$2|старонка была выдаленая|старонкі былі выдаленыя|старонак былі выдаленыя}}]] з катэгорыі",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] выдаленая з катэгорыі, [[Special:WhatLinksHere/$1|гэтая старонка ўключаная ў іншыя старонкі]]",
"autochange-username": "Аўтаматычная зьмена MediaWiki",
"upload": "Загрузіць файл",
"uploadbtn": "Загрузіць файл",
"apisandbox-submit-invalid-fields-title": "Некаторыя палі няслушныя",
"apisandbox-submit-invalid-fields-message": "Калі ласка, выпраўце пазначаныя палі і паспрабуйце яшчэ раз.",
"apisandbox-results": "Вынікі",
+ "apisandbox-sending-request": "Адпраўка API-запыту…",
+ "apisandbox-loading-results": "Атрымліваем API-вынікі…",
+ "apisandbox-results-error": "Адбылася памылка пры загрузцы адказу на API-запыт: $1.",
"apisandbox-request-url-label": "URL-адрас запыту:",
"apisandbox-request-time": "Час запыту: {{PLURAL:$1|$1 мс}}",
+ "apisandbox-alert-page": "Палі на гэтай старонцы няслушныя.",
+ "apisandbox-alert-field": "Значэньне гэтага поля зьяўляецца няслушным.",
"booksources": "Крыніцы кніг",
"booksources-search-legend": "Пошук кніг",
"booksources-isbn": "ISBN:",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|абараніў|абараніла}} $3 $4 [каскадна]",
"logentry-protect-modify": "$1 {{GENDER:$2|зьмяніў узровень|зьмяніла ўзровень}} абароны для $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|зьмяніў узровень|зьмяніла ўзровень}} абароны для $3 $4 [каскадна]",
- "logentry-rights-rights": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} прыналежнасьць {{GENDER:$3|$3}} да групы з $4 на $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} прыналежнасьць {{GENDER:$6|$3}} да групы з $4 на $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$1|зьмяніў|зьмяніла}} прыналежнасьць $3 да групаў",
"logentry-rights-autopromote": "$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5",
"logentry-upload-upload": "$1 {{GENDER:$2|загрузіў|загрузіла}} $3",
"newarticle": "(нова)",
"newarticletext": "Последвахте препратка към страница, която все още не съществува.\nЗа да я създадете, просто започнете да пишете в долната текстова кутия\n(вижте [$1 помощната страница] за повече информация).",
"anontalkpagetext": "----''Това е дискусионната страница на анонимен потребител, който все още няма регистрирана сметка или не я използва, затова се налага да използваме IP-адрес, за да го идентифицираме. Такъв адрес може да се споделя от няколко потребители.''\n\n''Ако сте анонимен потребител и мислите, че тези неуместни коментари са отправени към вас, [[Special:UserLogin/signup|регистрирайте се]] или [[Special:UserLogin|влезте в системата]], за да избегнете евентуално бъдещо объркване с други анонимни потребители.''",
- "noarticletext": "Тази Ñ\81Ñ\82Ñ\80аниÑ\86а вÑ\81е оÑ\89е не Ñ\81Ñ\8aÑ\89еÑ\81Ñ\82вÑ\83ва. Ð\9cожеÑ\82е да [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\8aÑ\80Ñ\81иÑ\82е за заглавиеÑ\82о на Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а]] в дÑ\80Ñ\83ги Ñ\81Ñ\82Ñ\80аниÑ\86и, да <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} поÑ\82Ñ\8aÑ\80Ñ\81иÑ\82е в дневниÑ\86иÑ\82е] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} да я създадете]</span>.",
+ "noarticletext": "Ð\9fонаÑ\81Ñ\82оÑ\8fÑ\89ем нÑ\8fма Ñ\82екÑ\81Ñ\82 на Ñ\82ази Ñ\81Ñ\82Ñ\80аниÑ\86а. Ð\9cожеÑ\82е да [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\8aÑ\80Ñ\81иÑ\82е за заглавиеÑ\82о на Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а]] в дÑ\80Ñ\83ги Ñ\81Ñ\82Ñ\80аниÑ\86и, да <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} поÑ\82Ñ\8aÑ\80Ñ\81иÑ\82е в Ñ\81Ñ\8aоÑ\82веÑ\82ниÑ\82е дневниÑ\86и] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} да я създадете]</span>.",
"noarticletext-nopermission": "Текущо в тази страница няма текст.\nМожете да [[Special:Search/{{PAGENAME}}|потърсите заглавието на тази страница ]] в други страници или да <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} потърсите в съответните дневници]</span>, но нямате права да създадете тази страница.",
"missing-revision": "Версия #$1 на страницата „{{FULLPAGENAME}}“ не съществува.\n\nТова обикновено се дължи на препратка от историята на страницата, която е била изтрита.\nПодробности могат да бъдат открити в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].",
"userpage-userdoesnotexist": "Няма регистрирана потребителска сметка за „<nowiki>$1</nowiki>“. Изисква се потвърждение, че желаете да създадете/редактирате тази страница?",
"filerevert-badversion": "Не съществува предишна локална версия на файла със зададения времеви отпечатък.",
"filedelete": "Изтриване на $1",
"filedelete-legend": "Изтриване на файл",
- "filedelete-intro": "На път сте да изтриете '''[[Media:$1|$1]]''' заедно с цялата му редакционна история.",
+ "filedelete-intro": "На път сте да изтриете файла '''[[Media:$1|$1]]''' заедно с цялата му редакционна история.",
"filedelete-intro-old": "Изтривате версията на '''[[Media:$1|$1]]''' към [$4 $3, $2].",
"filedelete-comment": "Причина:",
"filedelete-submit": "Изтриване",
"delete-legend": "Изтриване",
"historywarning": "<strong>Внимание:</strong> Страницата, която възнамерявате да изтриете, има история с приблизително $1 {{PLURAL:$1|редакция|редакции}}:",
"historyaction-submit": "Показване",
- "confirmdeletetext": "Ð\9dа пÑ\8aÑ\82 Ñ\81Ñ\82е безвÑ\8aзвÑ\80аÑ\82но да изÑ\82Ñ\80иеÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а или Ñ\84айл, заедно Ñ\81 Ñ\86Ñ\8fлаÑ\82а пÑ\80илежаÑ\89а Ñ\80едакÑ\86ионна иÑ\81Ñ\82оÑ\80иÑ\8f, оÑ\82 базаÑ\82а оÑ\82 данни.\nПотвърдете, че искате това, разбирате последствията и правите това в съответствие с [[{{MediaWiki:Policy-url}}|линията на поведение]].",
+ "confirmdeletetext": "Ð\9dа пÑ\8aÑ\82 Ñ\81Ñ\82е да изÑ\82Ñ\80иеÑ\82е Ñ\81Ñ\82Ñ\80аниÑ\86а заедно Ñ\81 Ñ\86Ñ\8fлаÑ\82а Ñ\9d Ñ\80едакÑ\86ионна иÑ\81Ñ\82оÑ\80иÑ\8f.\nПотвърдете, че искате това, разбирате последствията и правите това в съответствие с [[{{MediaWiki:Policy-url}}|линията на поведение]].",
"actioncomplete": "Действието беше изпълнено",
"actionfailed": "Действието не сполучи",
"deletedtext": "Страницата „$1“ беше изтрита. Вижте $2 за запис на последните изтривания.",
"broken-file-category": "تاکدیمان گو خرابین لینکان بی فایلا",
"about": "بی باره ها",
"article": "محتوائین تاکدیم",
- "newwindow": "(نوکین دَروازگی تا پاچ بیئت)",
+ "newwindow": "(نوکین دروازگئ تا پاچ بکنێت)",
"cancel": "کنسیل",
"moredotdotdot": "گیشتیر...",
"morenotlisted": "ای لڑ\t لیست کامل نه اینت.",
"wrongpassword": "ای پاسورد یا چیهر گالا که داخل کورته ایت صحیح نه اینت.\nمهربانی بکنیت، پدا امتحان بکینت.",
"wrongpasswordempty": "ای پاسورد یا چیهر گالا که داخل کورته ایت ، خالی اینت.\nمهربانی پدا کوشش بکنیت.",
"passwordtooshort": "پاسورد باید کم شه کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته بیئت.",
- "passwordtoolong": "پاسورد نه باید گیشتیر شه {{PLURAL:$1|۱ حرف|$1 حرفا}} داشته بیئت.",
+ "passwordtoolong": "پاسوردئ حروف نهباید شه {{PLURAL:$1|۱ کلمه|$1 کلمه}}ئا گیشتیر بهینت.",
"password-name-match": "شمی چیهرگال یا پاسورد باید شه شمی کار زورکی ئین ناما فرق داشته بیئت.",
"password-login-forbidden": "استفاده شه ای کار زوروکی ناما و شه ای چیهرگالا اجازه نه اینت.",
"mailmypassword": "پاک کورتین پاسوردئ",
"sitejspreview": "'''شه هوشا مه بَریت که شما فقط جاوااسکریپت ئی دیم دیست ئا گیندیت.'''\n'''ای جاوااسکریپت تا انون ذخیره نه بوته!'''",
"updated": "(نوک بوته ئین)",
"note": "'''نکته:'''",
- "previewnote": "'''بئ Ù\87Ù\88Ø´ ئا داشتÙ\87 بÛ\8cئت Ú©Ù\87 اÛ\8c Ù¾Ù\87 Ù\82ت دÛ\8cÙ\85 اÛ\8cÙ\86ت.'''\nØ´Ù\85Û\8c تغÛ\8cرات تا اÙ\86Ù\88Ù\86 زÙ\87 Ø®Û\8cرÙ\87 Ù\86Ù\87 بوته انت!",
- "continue-editing": "شوتین بی ایڈ\tیٹ\tی نیمگا",
+ "previewnote": "'''Ø´Ù\88Ù\85Û\8c Ù\87Ù\88شا بÛ\8cت Ú©Ù\87 اÛ\8c Ù\81Ù\82Ø· دÛ\8cÙ\85â\80\8cدÛ\8cست اÛ\8cÙ\86ت.'''\nÙ\88 Ø´Ù\88Ù\85Û\8c تغÛ\8cر Ù\88 Ù¹Ú¯Ù\84 تا اÙ\86Ù\88Ù\86 ذخÛ\8cرÙ\87 Ù\86Ù\87â\80\8cبوته انت!",
+ "continue-editing": "شوتین په ایڈیٹ کورتینئ بخشا",
"editing": "به $1 ئی دستکاری کورتینێ حالا",
"creating": "$1 جۆڑ ئه بيت",
"editingsection": "به $1 ئی دستکاری کورتینێ حالا (چونڑ)",
"difference-title": "$1: نخسه ئانی مانجینا فرق",
"difference-title-multipage": "$1 و $2:تاکدیمانئ مانجینی فرق",
"difference-multipage": "(تاکدیمانی مانجینا فرق)",
- "lineno": "$1ئین سطر:",
+ "lineno": "$1-مین سطر:",
"compareselectedversions": "انتخاب بوته ئین نخسه ئانی مقایسه",
"showhideselectedversions": "انتخاب بوته ئین نخسه ئانی پدیداری تغیر",
"editundo": "خنثی کورتین",
"shown-title": "نشان داتین $1 ئی {{PLURAL:$1|نتیجه|نتیجه}} بی هر تاکدیمی تا",
"viewprevnext": "نشان داتین ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''تاکدیمئ گو «[[:$1]]» ئی ئنوانا بی ای ویکی تا وجود داریت .'''",
- "searchmenu-new": "<strong> «[[:$1]]» ئی تاکدیما بی ای ویکی تا جوڑ بکنیت!</strong> {{PLURAL:$2|0=همچنان آ تاکدیما کی گو وتئ گشتینا ودئ کورته ایت، بگیندیت.|و همچنان وتئ گشتینئ ودئ بوته ئین نتیجه ئانا بگیندیت.}}",
+ "searchmenu-new": "<strong> «[[:$1]]» ئی تاکدیما بِه ای ویکیئی تا جۆڑ بکنێت!</strong> {{PLURAL:$2|0=همیرنگ آ دیمان که گو وتي گشتینا ودي کورتهایت، بگیندێت .|و هم وتي گشتینئ نتیجهئانه که ودي بوته انت، بگیندێت.}}",
"searchprofile-articles": "تاکدیمانی محتوا",
"searchprofile-images": "چینکه رسانه ئی",
"searchprofile-everything": "موچی چیز",
"search-showingresults": "{{PLURAL:$4|نتیجه ئان <strong>$1</strong> شه <strong>$3</strong>|نتیجه ئان <strong>$1 - $2</strong> شه <strong>$3</strong>}}",
"search-nonefound": "نتیجه په چیزی که شما لوٹیتهتیت بهدست نه یات.",
"powersearch-legend": "پیشرفته ئین گشتین",
- "powersearch-ns": "گشتین بی نامئ فضائان:",
+ "powersearch-ns": "گشتین بِه نامئ فضا ئاني تا:",
"powersearch-togglelabel": "چیک کورتین:",
"powersearch-toggleall": "موچ",
"powersearch-togglenone": "هیچگوجام",
- "powersearch-remember": "اتنخاب په دیگرین گشتین ئان بی خاتیر داشته بئیت",
+ "powersearch-remember": "انتخاب په دیگه گشتینئاني خاتیرا شه شومی هوشا مهروت",
"search-external": "خارجی ئین گشتین",
"searchdisabled": "گشتین بی {{SITENAME}} ئی تا فعال نه اینت.\nموقتاً توانیت شه Google ئی گردگ ئا استفاده کنیت.\nتوجه کنیت که بدست آته ئین نتایج شه گردگا بی آ ممکینین طریقه ئا مه بیئنت.",
"search-error": "یک خطایی بی گردگئ وختا رخ داته : $1",
"sp-contributions-toponly": "فقط آخیرین نخسه ئانی ایڈیٹ نشان داته بئنت",
"sp-contributions-newonly": "فقط نشان داتین آ ایڈیٹانی که دیمی جۆڑ کورتینی هستنت",
"sp-contributions-submit": "گشتین",
- "whatlinkshere": "لینک بئ ای تاکدیما",
+ "whatlinkshere": "لینک په ای تاکدیما",
"whatlinkshere-title": "تاکدیمان که گو «$1» لینک دارنت",
"whatlinkshere-page": "تاکدیم:",
"linkshere": "جهلگین دیم بئ '''[[:$1]]''' ئا لینک داریت:",
"ipbemailban": "دیمگیری شه ایمیلی دیم داتینا",
"ipbsubmit": "ای کار زوروک بسته بیئت",
"ipbother": "دیگه وخت:",
- "ipboptions": "Û² سائت:2 hours,Û± رÙ\88Ú\86:1 day,Û³ رÙ\88Ú\86:3 days,Û± Ù\87پتگ:1 week,Û² Ù\87پتگ:2 weeks,Û± Ù\85اÙ\87:1 month,Û³ Ù\85اÙ\87:3 months,Û¶ Ù\85اÙ\87:6 months,Û± ساÙ\84:1 year,بÛ\8câ\80\8cپاÛ\8cاÙ\86:infinite",
+ "ipboptions": "Û² ساعت:2 hours,Û± رÙ\88Ú\86:1 day,Û³ رÙ\88Ú\86:3 days,Û± Ù\87پتÙ\87â\80\8cÚ¯:1 week,Û² Ù\87پتÙ\87â\80\8cÚ¯:2 weeks,Û± Ù\85اÙ\87:1 month,Û³ Ù\85اÙ\87:3 months,Û¶ Ù\85اÙ\87:6 months,Û± ساÙ\84:1 year,ابدÙ\8a:infinite",
"ipbhidename": "چیهرداتین کار زوروکئ ناما شه ایڈیٹان و لیستا",
"ipbwatchuser": "ای کار زوروکئ ، کارزوروکین و حبر وگپ ئی دیمانی دیستین",
"ipb-disableusertalk": "دیمگیری کورتین شه ایڈیٹ کورتین ئا گپ و حبر ئی تاکدیمئ شه کار زوروکئ جیندئ نیمگا وختی که آ بلاک اینت",
"tog-watchdefault": "Afegeix les pàgines que vagi editant a la llista de seguiment",
"tog-watchmoves": "Afegeix les pàgines que reanomeni a la llista de seguiment",
"tog-watchdeletion": "Afegeix les pàgines que elimini a la llista de seguiment",
+ "tog-watchuploads": "Afegeix els nous fitxers que pengi a la meva llista de seguiment",
"tog-watchrollback": "Afegeix les pàgines on he realitzat una reversió a la llista de seguiment",
"tog-minordefault": "Marca totes les contribucions com a edicions menors per defecte",
"tog-previewontop": "Mostra una previsualització abans del quadre d'edició",
"mypreferencesprotected": "No tens permís per editar les teves preferències.",
"ns-specialprotected": "No es poden modificar les pàgines especials.",
"titleprotected": "La creació d'aquesta pàgina està protegida per [[User:$1|$1]].\nEls seus motius han estat: <em>$2</em>.",
- "filereadonlyerror": "No s'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers \"$2\" està en mode només de lectura.\nL'administrador que l'ha bloquejat ha donat aquesta explicació: \"$3\".",
+ "filereadonlyerror": "No s'ha pogut modificar el fitxer «$1» perquè el repositori de fitxers «$2» està en mode només de lectura.\nL'administrador de sistema que l'ha bloquejat ha donat aquesta explicació: «$3».",
"invalidtitle-knownnamespace": "El títol amb l'espai de noms «$2» i text «$3» no és vàlid",
"invalidtitle-unknownnamespace": "Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»",
"exception-nologin": "No has iniciat sessió",
"noemail": "No hi ha cap adreça electrònica registrada de l'usuari «$1».",
"noemailcreate": "Heu d’indicar una adreça electrònica vàlida.",
"passwordsent": "S'ha enviat una nova contrasenya a l'adreça electrònica registrada per «$1».\nInicieu una sessió després que la rebeu.",
- "blocked-mailpassword": "S'ha blocat la vostra adreça IP. Se us ha desactivat la funció de recuperació de contrasenya per a prevenir abusos.",
+ "blocked-mailpassword": "S'ha blocat la vostra adreça IP per a edicions. Per a prevenir abusos, s'ha desactivat la funció de recuperació de contrasenya des d'aquesta adreça IP.",
"eauthentsent": "S'ha enviat un correu electrònic a la direcció especificada. Abans no s'enviï cap altre correu electrònic a aquesta adreça, cal verificar que és realment vostra. Per tant, cal que seguiu les instruccions presents en el correu electrònic que se us ha enviat.",
"throttled-mailpassword": "Ja se us ha enviat un correu electrònic de reinicialització de contrasenya en {{PLURAL:$1|l'última hora|les últimes $1 hores}}.\nPer a prevenir abusos, només s'envia un correu electrònic de reinicialització de contrasenya cada {{PLURAL:$1|hora|$1 hores}}.",
"mailerror": "S'ha produït un error en enviar el missatge: $1",
"botpasswords-insert-failed": "No s'ha pogut afegir el nom del bot «$1». Ja hi estava afegit?",
"botpasswords-update-failed": "No s'ha pogut actualitzar el nom del bot «$1». Hi estava suprimit?",
"botpasswords-created-title": "S'ha creat la contrasenya del bot",
+ "botpasswords-created-body": "S'ha creat la contrasenya per al bot «$1» de l'usuari «$2».",
+ "botpasswords-updated-title": "Contrasenya de bot actualitzada",
"resetpass_forbidden": "No poden canviar-se les contrasenyes",
"resetpass-no-info": "Heu d'estar registrats en un compte per a poder accedir directament a aquesta pàgina.",
"resetpass-submit-loggedin": "Canvia la contrasenya",
"previewnote": "'''Recorda que això és només una previsualització.'''\nEls vostres canvis encara no s'han desat!",
"continue-editing": "Aneu a l'àrea d'edició",
"previewconflict": "Aquesta previsualització reflecteix, a l'àrea\nd'edició superior, el text tal com apareixerà si trieu desar-lo.",
- "session_fail_preview": "'''No s'ha pogut processar la vostra modificació a causa d'una pèrdua de dades de la sessió.\nSi us plau, proveu-ho una altra vegada. Si continués sense funcionar, proveu de [[Special:UserLogout|finalitzar la sessió]] i torneu a iniciar-ne una.'''",
- "session_fail_preview_html": "'''Ho sentim, no s'han pogut processar les vostres modificacions a causa d'una pèrdua de dades de la sessió.'''\n\n''Com que el projecte {{SITENAME}} té habilitat l'ús de codi HTML cru, s'ha amagat la previsualització com a prevenció contra atacs mitjançant codis JavaScript.''\n\n'''Si es tracta d'una contribució legítima, si us plau, intenteu-ho una altra vegada. Si continua havent-hi problemes, [[Special:UserLogout|finalitzeu la sessió]] i torneu a iniciar-ne una.'''",
+ "session_fail_preview": "Disculpes! No s'ha pogut processar la vostra modificació a causa d'una pèrdua de dades de la sessió.\n\nPot ser que s'hagi tancat la sessió. <strong>Comproveu si teniu la sessió iniciada i proveu-ho una altra vegada</strong>.\nSi continués sense funcionar, proveu de [[Special:UserLogout|finalitzar la sessió]] i torneu a iniciar-ne una. Comproveu que el vostre navegador permeti les galetes d'aquest lloc.",
+ "session_fail_preview_html": "Ho sentim, no s'han pogut processar les vostres modificacions a causa d'una pèrdua de dades de la sessió.\n\n<em>Com que el projecte {{SITENAME}} té habilitat l'ús de codi HTML cru, s'ha amagat la previsualització com a prevenció contra atacs mitjançant codis JavaScript.</em>\n\n<strong>Si es tracta d'una contribució legítima, si us plau, intenteu-ho una altra vegada.</strong> Si continua havent-hi problemes, [[Special:UserLogout|finalitzeu la sessió]] i torneu a iniciar-ne una. Comproveu que el vostre navegador permeti galetes d'aquest lloc.",
"token_suffix_mismatch": "'''S'ha rebutjat la vostra modificació perquè el vostre client ha fet malbé els caràcters de puntuació en el testimoni d'edició. S'ha rebutjat la modificació per a evitar la corrupció del text de la pàgina. Açò passa a vegades quan s'utilitza un servei web de servidor intermediari anònim amb problemes.'''",
"edit_form_incomplete": "'''Certes parts del formulari de modificació no han arribat al servidor, verifiqueu que les vostres modificacions estan intactes i proveu-ho de nou.'''",
"editing": "Edició de la pàgina «$1»",
"revdelete-submit": "Aplica a {{PLURAL:$1|la revisió seleccionada|les revisions seleccionades}}",
"revdelete-success": "La visibilitat d'aquesta revisió s'ha actualitzat.",
"revdelete-failure": "'''La visibilitat de la revisió no ha pogut actualitzar-se:'''\n$1",
- "logdelete-success": "'''S'ha establert correctament la visibilitat d'aquest element.'''",
+ "logdelete-success": "S'ha establert la visibilitat del registre.",
"logdelete-failure": "'''No s'ha pogut establir la visibilitat del registre:'''\n$1",
"revdel-restore": "Canvia'n la visibilitat",
"pagehist": "Historial",
"recentchangeslinked-page": "Nom de la pàgina:",
"recentchangeslinked-to": "Mostra els canvis de les pàgines enllaçades amb la pàgina donada",
"recentchanges-page-added-to-category": "[[:$1]] afegida a la categoria",
- "recentchanges-page-added-to-category-bundled": "[[:$1]] i [[Special:WhatLinksHere/$1|{{PLURAL:$2|una pàgina|$2 pàgines}}]] més afegides a la categoria",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] afegida a la categoria, [[Special:WhatLinksHere/$1|aquesta pàgina està inclosa en d'altres]]",
"recentchanges-page-removed-from-category": "[[:$1]] treta de la categoria",
- "recentchanges-page-removed-from-category-bundled": "[[:$1]] i {{PLURAL:$2|una pàgina|$2 pàgines}} més tretes de la categoria",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] treta de la categoria, [[Special:WhatLinksHere/$1|aquesta pàgina està inclosa en d'altres]]",
"autochange-username": "Canvi automàtic del MediaWiki",
"upload": "Carregueu un fitxer",
"uploadbtn": "Carrega un fitxer",
"uploaded-script-svg": "S’ha trobat l’element programable «$1» al fitxer SVG carregat.",
"uploaded-hostile-svg": "S’ha trobat codi CSS no segur a l’element d’estil del fitxer SVG carregat.",
"uploaded-event-handler-on-svg": "No es permet establir els atributs de gestió d’esdeveniments <code>$1=\"$2\"</code> en fitxers SVG.",
- "uploaded-href-unsafe-target-svg": "S’ha trobat un element «href» amb un objectiu no segur <code><$1 $2=\"$3\"></code> al fitxer SVG carregat.",
+ "uploaded-href-unsafe-target-svg": "S’ha trobat un element «href» amb dades no segures: destinació URI <code><$1 $2=\"$3\"></code> en el fitxer SVG carregat.",
"uploaded-animate-svg": "S'ha trobat l'etiqueta «animate» que pot estar canviant l'href mitjançant l'atribut <code><$1 $2=\"$3\"></code> en el fitxer SVG carregat.",
"uploadscriptednamespace": "Aquest fitxer SVG conté un espai de noms \"$1\" no autoritzat",
"uploadinvalidxml": "No s'ha pogut analitzar l'XML del fitxer carregat.",
"upload-dialog-button-upload": "Carrega",
"upload-form-label-infoform-title": "Detalls",
"upload-form-label-infoform-name": "Nom",
+ "upload-form-label-infoform-name-tooltip": "Un únic títol descriptiu pel fitxer, que servirà com a nom del fitxer. Podeu utilitzar llenguatge senzill amb espais. No hi inclogueu l'extensió del fitxer.",
"upload-form-label-infoform-description": "Descripció",
"upload-form-label-usage-title": "Ús",
"upload-form-label-usage-filename": "Nom del fitxer",
"backend-fail-read": "No s'ha pogut llegir el fitxer $1.",
"backend-fail-create": "No s'ha pogut crear el fitxer $1.",
"backend-fail-maxsize": "No s'ha pogut escriure el fitxer $1 perquè és més gran que {{PLURAL:$2|un byte|$2 bytes}}.",
- "backend-fail-readonly": "El rerefons d'emmagatzemament «$1» actualment només és de lectura. Es va donar el motiu: «$2»",
+ "backend-fail-readonly": "El suport d'emmagatzemament «$1» actualment només és de lectura. S'ha donat el motiu: <em>$2</em>",
"backend-fail-synced": "El fitxer «$1» es troba en un estat inconsistent amb els rerefons d'emmagatzemament interns.",
"backend-fail-connect": "No s'ha pogut connectar al fitxer de rerefons d'emmagatzemament «$1».",
"backend-fail-internal": "S'ha produït un error desconegut en el fitxer de rerefons d'emmagatzemament «$1».",
"uploadstash-badtoken": "No s'ha pogut realitzar l'acció, possiblement perquè han caducat la vostra identificació. Intenteu-ho de nou.",
"uploadstash-errclear": "S'estan netejant els fitxers que han fallat.",
"uploadstash-refresh": "Actualitza la llista de fitxers",
+ "uploadstash-thumbnail": "mostra una miniatura",
"invalid-chunk-offset": "El desplaçament del fragment no és vàlid",
"img-auth-accessdenied": "Accés denegat",
"img-auth-nopathinfo": "Hi manca PATH_INFO.\nEl servidor no està configurat per passar aquesta informació.\nPot estar basat en CGI i no ser compatible amb img_auth.\nConsulteu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
"delete-toobig": "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. L'eliminació d'aquestes pàgines està restringida per a prevenir que hi pugui haver un desajustament seriós de la base de dades de tot el projecte {{SITENAME}} per accident.",
"delete-warning-toobig": "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. Eliminar-la podria suposar un seriós desajustament de la base de dades de tot el projecte {{SITENAME}}; aneu amb compte abans dur a terme l'acció.",
"deleteprotected": "No podeu eliminar la pàgina perquè ha estat protegida.",
- "deleting-backlinks-warning": "'''Avís:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Altres pàgines]] enllacen o transclouen de la pàgina que esteu a punt de suprimir.",
+ "deleting-backlinks-warning": "<strong>Atenció:</strong>\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Altres pàgines]] enllacen aquí o inclouen la pàgina que esteu a punt de suprimir.",
"rollback": "Reverteix edicions",
"rollbacklink": "Reverteix",
"rollbacklinkcount": "reverteix $1 {{PLURAL:$1|edició|edicions}}",
"watchlistedit-raw-done": "S'ha actualitzat la vostra llista de seguiment.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 títol s'ha|$1 títols s'han}} afegit:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 títol s'ha|$1 títols s'han}} eliminat:",
- "watchlistedit-clear-title": "S'ha netejat la llista de seguiment",
+ "watchlistedit-clear-title": "Neteja de la llista de seguiment",
"watchlistedit-clear-legend": "Neteja la llista de seguiment",
"watchlistedit-clear-explain": "Se suprimiran tots els títols de la vostra llista de seguiment",
"watchlistedit-clear-titles": "Títols:",
"minoredit": "Tato změna je malá editace.",
"watchthis": "Sledovat tuto stránku",
"savearticle": "Uložit změny",
+ "publishpage": "Zveřejnit stránku",
"preview": "Náhled",
"showpreview": "Ukázat náhled",
"showdiff": "Ukázat změny",
"tooltip-ca-nstab-category": "Zobrazit kategorii",
"tooltip-minoredit": "Označit změnu jako malou editaci",
"tooltip-save": "Uložit vaše změny",
+ "tooltip-publish": "Zveřejnit vaše změny",
"tooltip-preview": "Zobrazit náhled vašich změn; prosíme, zobrazte si ho před uložením!",
"tooltip-diff": "Zobrazit, jaké změny jste v textu provedli",
"tooltip-compareselectedversions": "Podívat se na rozdíly mezi dvěma vybranými verzemi této stránky.",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|zamknul|zamknula}} stránku $3 $4 [kaskádovým zámkem]",
"logentry-protect-modify": "$1 {{GENDER:$2|změnil|změnila}} úroveň ochrany stránky $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|změnil|změnila}} úroveň ochrany stránky $3 $4 [kaskádový zámek]",
- "logentry-rights-rights": "$1 {{GENDER:$2|změnil|změnila}} členství {{GENDER:$3|uživatele|uživatelky}} $3 ve skupinách z $4 na $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|změnil|změnila}} členství {{GENDER:$6|uživatele|uživatelky}} $3 ve skupinách z $4 na $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách",
"logentry-rights-autopromote": "$1 {{GENDER:$2|byl automaticky povýšen|byla automaticky povýšena}} z $4 na $5",
"logentry-upload-upload": "$1 {{GENDER:$2|načetl|načetla}} $3",
"Macofe",
"Matma Rex",
"Diafol",
- "Nemo bis"
+ "Nemo bis",
+ "Dafyddt"
]
},
"tog-underline": "Tanlinellu cysylltiadau:",
"specialloguserlabel": "Gwneuthurwr:",
"speciallogtitlelabel": "Targed (teitl neu {{ns:user}}:username ar gyfer y defnyddiwr):",
"log": "Logiau",
+ "logeventslist-submit": "Dangos",
"all-logs-page": "Pob lòg cyhoeddus",
"alllogstext": "Mae pob cofnod yn holl logiau {{SITENAME}} wedi cael eu rhestru yma.\nGallwch weld chwiliad mwy penodol trwy ddewis y math o lòg, enw'r defnyddiwr, neu'r dudalen benodedig.\nSylwer bod llythrennau mawr neu fach o bwys i'r chwiliad.",
"logempty": "Does dim eitemau yn cyfateb yn y lòg.",
"cachedspecial-viewing-cached-ts": "Rydych yn edrych ar fersiwn o'r dudalen a roddwyd ar gadw mewn celc. Gall fod yn wahanol i'r fersiwn cyfoes.",
"cachedspecial-refresh-now": "Gweld y diwygiad diweddaraf.",
"categories": "Categorïau",
+ "categories-submit": "Dangos",
"categoriespagetext": "Mae'r {{PLURAL:$1|categori|categori|categorïau|categorïau|categorïau|categorïau}} isod yn cynnwys tudalennau neu ffeiliau amlgyfrwng.\nNi ddangosir [[Special:UnusedCategories|categorïau gwag]] yma.\nGweler hefyd [[Special:WantedCategories|categorïau sydd eu hangen]].",
"categoriesfrom": "Dangos categorïau gan ddechrau gyda:",
"deletedcontributions": "Cyfraniadau defnyddiwr i dudalennau dilëedig",
"wlheader-showupdated": "Mae tudalennau sydd wedi newid ers i chi eu gweld ddiwethaf wedi'u '''hamlygu'''.",
"wlnote": "Isod, {{PLURAL:$1|yw'r golygiad diweddaraf |yw'r golygiadau diweddaraf <strong>$1</strong> changes}} yn y {{PLURAL:$2|hour|<strong>$2</strong> awr}}, fel ag y mae ar $3, $4.",
"wlshowlast": "Dangoser newidiadau'r $1 awr ddiwethaf neu'r $2 {{PLURAL:$2|diwrnod|diwrnod|ddiwrnod|diwrnod|diwrnod|diwrnod}} diwethaf neu'r newidiadau.",
+ "watchlist-hide": "Cuddio",
+ "watchlist-submit": "Dangos",
"wlshowtime": "Dangos y diwethaf:",
"wlshowhideminor": "golygiadau bychan",
"wlshowhidebots": "botiau",
"delete-confirm": "Dileu \"$1\"",
"delete-legend": "Dileu",
"historywarning": "<strong>Rhybudd:</strong> bu tua $1 {{PLURAL:$1|golygiad|golygiad|olygiad|golygiad|golygiad|o olygiadau}} yn hanes y dudalen rydych ar fin ei dileu:",
+ "historyaction-submit": "Dangos",
"confirmdeletetext": "Rydych chi ar fin dileu tudalen neu ddelwedd, ynghŷd â'i hanes, o'r data-bas, a hynny'n barhaol.\nOs gwelwch yn dda, cadarnhewch eich bod chi wir yn bwriadu gwneud hyn, eich bod yn deall y canlyniadau, ac yn ei wneud yn ôl [[{{MediaWiki:Policy-url}}|polisïau {{SITENAME}}]].",
"actioncomplete": "Wedi cwblhau'r weithred",
"actionfailed": "Methodd y weithred",
"botpasswords-label-delete": "Slet",
"botpasswords-label-resetpassword": "Nulstil adgangskode",
"botpasswords-label-grants": "Tilgængelige bevillinger:",
+ "botpasswords-label-restrictions": "Begrænsninger for brug:",
"resetpass_forbidden": "Adgangskoder kan ikke ændres",
"resetpass-no-info": "Du skal være logget på for at komme direkte til denne side.",
"resetpass-submit-loggedin": "Skift adgangskode",
"mergehistory-empty": "Der findes ingen sammenflettelige udgaver",
"mergehistory-done": "$3 {{PLURAL:$3|version|versioner}} af $1 blev flettet sammen med [[:$2]].",
"mergehistory-fail": "Sammenfletningen kunne ikke gennemføres. Vær venlig at kontrollere sidenavne og tidsafgrænsning.",
+ "mergehistory-fail-bad-timestamp": "Tidsangivelsen er ugyldig.",
"mergehistory-fail-toobig": "Ude af stand til at flette historiken sammen, fordi flere end grænsen på $1 {{PLURAL:$1|version|versioner}} ville blive flyttet.",
"mergehistory-no-source": "Kildesiden $1 findes ikke.",
"mergehistory-no-destination": "Destinationssiden $1 findes ikke.",
"userrights": "Håndtering af brugerrettigheder",
"userrights-lookup-user": "Administrér brugergrupper",
"userrights-user-editname": "Skriv et brugernavn:",
- "editusergroup": "Redigér brugergrupper",
+ "editusergroup": "Redigér {{GENDER:$1|brugergrupper}}",
"editinguser": "Ændrer brugerrettigheder for {{GENDER:$1|brugeren}} <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Redigér brugergrupper",
- "saveusergroups": "Gem brugergrupper",
+ "saveusergroups": "Gem {{GENDER:$1|brugergrupper}}",
"userrights-groupsmember": "Medlem af:",
"userrights-groupsmember-auto": "Implicit medlem af:",
"userrights-groups-help": "Du kan ændre denne brugers gruppemedlemsskaber:\n* Et markeret afkrydsningsfelt betyder at brugeren er medlen af den pågældende gruppe.\n* Et umarkeret felt betyder at brugeren ikke er medlem af gruppen.\n* En * betyder at du ikke kan fravælge gruppen, når den først er tilføjet og omvendt.",
"upload-dialog-button-done": "Færdig",
"upload-dialog-button-save": "Gem",
"upload-dialog-button-upload": "Læg op",
+ "upload-form-label-infoform-title": "Detaljer",
"upload-form-label-infoform-name": "Navn",
"upload-form-label-infoform-description": "Beskrivelse",
"upload-form-label-usage-filename": "Filnavn",
"mostrevisions": "Sider med de fleste ændringer",
"prefixindex": "Alle sider der begynder med",
"prefixindex-namespace": "Alle sider (i navnerummet $1) der begynder med",
+ "prefixindex-submit": "Vis",
"prefixindex-strip": "Strip præfiks i listen",
"shortpages": "Korte sider",
"longpages": "Lange sider",
"usereditcount": "{{PLURAL:$1|én redigering|$1 redigeringer}}",
"usercreated": "{{GENDER:$3|Oprettet}} den $1 $2",
"newpages": "Nyeste sider",
+ "newpages-submit": "Vis",
"newpages-username": "Brugernavn:",
"ancientpages": "Ældste sider",
"move": "Flyt",
"apisandbox-intro": "Brug denne side til at eksperimentere med '''MediaWiki web service API'''.\nVi henviser til [//www.mediawiki.org/wiki/API:Main_page dokumentationen af API] for yderligere oplysninger om brug af API. Eksempel: [//www.mediawiki.org/wiki/API#A_simple_example få indholdet af en forside]. Vælg en handling at se flere eksempler.\n\nBemærk, at selv om dette er en sandkasse, vil handlinger du udfører på denne side redigere wikien.",
"apisandbox-submit": "Lav forespørgsel",
"apisandbox-reset": "Ryd",
- "apisandbox-examples": "Eksempel",
- "apisandbox-results": "Resultat",
+ "apisandbox-examples": "Eksempler",
+ "apisandbox-results": "Resultater",
"apisandbox-request-url-label": "Forespurgt URL:",
- "apisandbox-request-time": "Forespørgselstid: $1",
+ "apisandbox-request-time": "Forespørgselstid: {{PLURAL:$1|$1 ms}}",
"booksources": "Bogkilder",
"booksources-search-legend": "Søgning efter bøger",
"booksources-search": "Søg",
"unwatchthispage": "Fjern overvågning",
"notanarticle": "Ikke en artikel",
"notvisiblerev": "Versionen er blevet slettet",
- "watchlist-details": "Du har {{PLURAL:$1|side|sider}} på din overvågningsliste (uden at medregne diskussionssider).",
+ "watchlist-details": "Du har {{PLURAL:$1|$1 side|$1 sider}} på din overvågningsliste (uden at medregne diskussionssider).",
"wlheader-enotif": "E-mail-underretning er slået til.",
"wlheader-showupdated": "Sider, der er ændret siden dit sidste besøg, er vist med '''fed skrift'''.",
"wlnote": "Nedenfor ses {{PLURAL:$1|den seneste ændring|de seneste <strong>$1</strong> ændringer}} i {{PLURAL:$2|den sidste time|de sidste <strong>$2</strong> timer}} op til den $3 kl. $4.",
"rollback-success": "Ændringerne fra $1 er fjernet,\nog den seneste version af $2 er gendannet.",
"sessionfailure-title": "Sessionsfejl",
"sessionfailure": "Der lader til at være et problem med din loginsession; denne handling blev annulleret som en sikkerhedsforanstaltning mod kapring af sessionen. Tryk på \"tilbage\"-knappen og genindlæs den side du kom fra, og prøv dernæst igen.",
+ "changecontentmodel-title-label": "Sidetitel",
+ "changecontentmodel-reason-label": "Begrundelse:",
"protectlogpage": "Skrivebeskyttelseslog",
"protectlogtext": "Herunder er en liste over ændringer til sidebeskyttelser.\nSe [[Special:ProtectedPages|listen over beskyttede sider]] for listen over sidebeskyttelser, der er i kraft i øjeblikket.",
"protectedarticle": "[[$1]] beskyttet",
"movenotallowedfile": "Du har ikke tilladelse til at flytte filer.",
"cant-move-user-page": "Du har ikke tilladelse til at flytte brugersider (bortset fra undersider).",
"cant-move-to-user-page": "Du har ikke tilladelse til at flytte brugersider (bortset fra til brugerundersider).",
- "newtitle": "Til ny titel",
+ "newtitle": "Ny titel:",
"move-watch": "Overvåg siden",
"movepagebtn": "Flyt side",
"pagemovedsub": "Flytning gennemført",
"version-libraries": "Installerede biblioteker",
"version-libraries-library": "Bibliotek",
"version-libraries-version": "Version",
+ "version-libraries-license": "Licens",
+ "version-libraries-description": "Beskrivelse",
+ "version-libraries-authors": "Forfattere",
"redirect": "Omdirigering pga. fil, bruger-, side- eller udgave-ID",
"redirect-summary": "Denne specialside omdirigerer til en fil (hvis filnavnet er angivet), en side (hvis udgave ID'et eller side ID'et er angivet) eller en brugerside (hvis et numerisk brugernummer er angivet). Eksempler på brug: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]],[[{{#Special:Redirect}}/revision/328429]] eller [[{{#Special:Redirect}}/user/101]].",
"redirect-submit": "Vis",
"tags-activate-submit": "Aktiver",
"tags-deactivate-reason": "Årsag:",
"tags-deactivate-submit": "Deaktiver",
- "tags-edit-existing-tags-none": "\"Ingen\"",
+ "tags-edit-existing-tags-none": "<em>Ingen</em>",
"tags-edit-reason": "Årsag:",
"comparepages": "Sammenlign sider",
"compare-page1": "Side 1",
"feedback-subject": "Emne:",
"feedback-submit": "Send",
"feedback-thanks": "Tak! Dine tilbagemeldinger er blevet noteret på siden \"[$2 $1]\".",
+ "feedback-thanks-title": "Tak!",
"searchsuggest-search": "Søg",
"searchsuggest-containing": "indeholder...",
"api-error-badaccess-groups": "Du har ikke tilladelse til at overføre filer til denne wiki.",
"limitreport-ppvisitednodes": "Antal nodebesøg for preprocessor",
"limitreport-ppgeneratednodes": "Antal noder genereret af preprocessor",
"limitreport-postexpandincludesize": "Inkluderet størrelse efter udvidelse",
+ "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
"limitreport-templateargumentsize": "Skabelon argumentstørrelse",
+ "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
"limitreport-expansiondepth": "Største udvidelsesdybde",
"limitreport-expensivefunctioncount": "Antal dyre parserfunktioner",
"expandtemplates": "Udfold skabeloner",
"pagelang-select-lang": "Vælg sprog",
"right-pagelang": "Ændre sidesproget",
"mediastatistics": "Mediestatistik",
+ "mediastatistics-table-mimetype": "MIME-type",
+ "mediastatistics-table-extensions": "Mulige filendelser",
"mediastatistics-table-count": "Antal filer",
"mediastatistics-table-totalbytes": "Samlet størrelse",
"mediastatistics-header-unknown": "Ukendt",
"mediastatistics-header-text": "Tekstformat",
"mediastatistics-header-executable": "Kørbare filer",
"mediastatistics-header-archive": "Komprimerede formater",
+ "mediastatistics-header-total": "Alle filer",
"json-error-state-mismatch": "Ugyldig eller fejlbehæftet JSON",
"json-error-syntax": "Syntaksfejl",
"special-characters-group-latin": "Latin",
"category-empty": "''Diese Kategorie enthält zurzeit keine Seiten oder Medien.''",
"hidden-categories": "{{PLURAL:$1|Versteckte Kategorie|Versteckte Kategorien}}",
"hidden-category-category": "Versteckte Kategorien",
- "category-subcat-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Unterkategorie:|{{PLURAL:$1|Folgende Unterkategorie ist eine von insgesamt $2 Unterkategorien in dieser Kategorie:|Es werden $1 von insgesamt $2 Unterkategorien in dieser Kategorie angezeigt:}}}}",
+ "category-subcat-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Unterkategorie:|{{PLURAL:$1|Folgende Unterkategorie ist eine von insgesamt $2 Unterkategorien in dieser Kategorie:|Es werden $1 von insgesamt $2 Unterkategorien in dieser Kategorie angezeigt.}}}}",
"category-subcat-count-limited": "Diese Kategorie enthält folgende {{PLURAL:$1|Unterkategorie|$1 Unterkategorien}}:",
- "category-article-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Seite:|{{PLURAL:$1|Folgende Seite ist eine von insgesamt $2 Seiten in dieser Kategorie:|Es werden $1 von insgesamt $2 Seiten in dieser Kategorie angezeigt:}}}}",
+ "category-article-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Seite:|{{PLURAL:$1|Folgende Seite ist eine von insgesamt $2 Seiten in dieser Kategorie:|Es werden $1 von insgesamt $2 Seiten in dieser Kategorie angezeigt.}}}}",
"category-article-count-limited": "Folgende {{PLURAL:$1|Seite ist|$1 Seiten sind}} in dieser Kategorie enthalten:",
"category-file-count": "{{PLURAL:$2|Diese Kategorie enthält folgende Datei:|{{PLURAL:$1|Folgende Datei ist eine von insgesamt $2 Dateien in dieser Kategorie:|Es werden $1 von insgesamt $2 Dateien in dieser Kategorie angezeigt:}}}}",
"category-file-count-limited": "Folgende {{PLURAL:$1|Datei ist|$1 Dateien sind}} in dieser Kategorie enthalten:",
"minoredit": "Nur Kleinigkeiten wurden verändert",
"watchthis": "Diese Seite beobachten",
"savearticle": "Seite speichern",
+ "publishpage": "Seite veröffentlichen",
"preview": "Vorschau",
"showpreview": "Vorschau zeigen",
"showdiff": "Änderungen zeigen",
"userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfe, ob du diese Seite wirklich erstellen/bearbeiten willst.",
"userpage-userdoesnotexist-view": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
"blocked-notice-logextract": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist zurzeit gesperrt.\nZur Information folgt ein aktueller Auszug aus dem Benutzersperr-Logbuch:",
- "clearyourcache": "'''Hinweis:''' Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+ "clearyourcache": "<strong>Hinweis:</strong> Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* <strong>Firefox/Safari:</strong> <em>Umschalttaste</em> drücken und gleichzeitig <em>Aktualisieren</em> anklicken oder entweder <em>Strg+F5</em> oder <em>Strg+R</em> (<em>⌘+R</em> auf dem Mac) drücken\n* <strong>Google Chrome:</strong> <em>Umschalttaste+Strg+R</em> (<em>⌘+Umschalttaste+R</em> auf dem Mac) drücken\n* <strong>Internet Explorer:</strong> <em>Strg+F5</em> drücken oder <em>Strg</em> drücken und gleichzeitig <em>Aktualisieren</em> anklicken\n* <strong>Opera:</strong> Gehe zu <em>Menü → Einstellungen</em> (<em>Opera → Einstellungen</em> auf dem Mac) und dann auf <em>Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien</em>.",
"usercssyoucanpreview": "'''Tipp:''' Benutze den „{{int:showpreview}}“-Button, um dein neues CSS vor dem Speichern zu testen.",
"userjsyoucanpreview": "'''Tipp:''' Benutze den „{{int:showpreview}}“-Button, um dein neues JavaScript vor dem Speichern zu testen.",
"usercsspreview": "'''Beachte, dass du nur eine Vorschau deines Benutzer-CSS betrachtest.'''\n'''Es wurde noch nicht gespeichert!'''",
"tooltip-ca-nstab-category": "Kategorieseite anzeigen",
"tooltip-minoredit": "Diese Änderung als klein markieren.",
"tooltip-save": "Änderungen speichern",
+ "tooltip-publish": "Deine Änderungen veröffentlichen",
"tooltip-preview": "Vorschau der Änderungen an dieser Seite. Bitte vor dem Speichern benutzen!",
"tooltip-diff": "Änderungen am Text zeigen",
"tooltip-compareselectedversions": "Unterschied zwischen zwei ausgewählten Versionen dieser Seite anzeigen",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|schützte}} die Seite $3 $4 [kaskadierend]",
"logentry-protect-modify": "$1 {{GENDER:$2|änderte}} den Schutzstatus der Seite $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|änderte}} den Schutzstatus der Seite $3 $4 [kaskadierend]",
- "logentry-rights-rights": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für {{GENDER:$3|$3}} von $4 zu $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für {{GENDER:$6|$3}} von $4 zu $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|änderte}} die Gruppenzugehörigkeit für $3",
"logentry-rights-autopromote": "$1 wurde automatisch von $4 zu $5 {{GENDER:$2|zugeordnet}}",
"logentry-upload-upload": "$1 {{GENDER:$2|lud}} $3 hoch",
"api-error-nomodule": "Interner Fehler: Es wurde kein Modul zum Hochladen festgelegt.",
"api-error-ok-but-empty": "Interner Fehler: Der Server reagiert nicht.",
"api-error-overwrite": "Das Überschreiben einer vorhandenen Datei ist nicht erlaubt.",
+ "api-error-ratelimited": "Du versuchst, mehr Dateien in kurzer Zeit hochzuladen, als dieses Wiki erlaubt.\nBitte versuche es in einigen Minuten erneut.",
"api-error-stashfailed": "Interner Fehler: Der Server konnte keine temporäre Datei speichern.",
"api-error-publishfailed": "Interner Fehler: Der Server konnte die temporäre Datei nicht veröffentlichen.",
"api-error-stasherror": "Beim Hochladen der Datei gab es einen Fehler.",
"hidden-category-category": "Kategoriyê nımıtey",
"category-subcat-count": "{{PLURAL:$2|Na kategoriya de $1 bınkategoriyay estê.|$2 kategoriyan ra $1 bınkategoriyay asenê.}}",
"category-subcat-count-limited": "Na kategoriye de {{PLURAL:$1|ena kategoriya bınêne esta|enê $1 kategoriyê bınêni estê}}.",
- "category-article-count": "{{PLURAL:$2|Na kategoriye de teyna ena pele esta.|Na kategoriye de $2 ra pêro pia, {{PLURAL:$1|ena pele esta|enê $1 peli estê.}}, be $2 ra pêro pia}}",
+ "category-article-count": "{{PLURAL:$2|Na kategoriye de teyna ena pele esta.|Na kategoriye de $2 tenan ra, {{PLURAL:$1|ena pele esta|$1 peli}}, ena kategoriye miyan derê}}",
"category-article-count-limited": "{{PLURAL:$1|Pela cêrêne|$1 Pelê cêrêni}} na kategoriye derê.",
"category-file-count": "<noinclude>{{PLURAL:$2|Na kategoriye tenya dosyayanê cêrênan muhtewa kena.}}</noinclude>\n*Na kategoriye de $2 dosyayan ra {{PLURAL:$1|yew dosya tenêka esta| $1 dosyey asenê}}.",
"category-file-count-limited": "{{PLURAL:$1|Dosya cêrêne|$1 Dosyê cêrêni}} na kategoriye derê.",
"unprotectthispage": "Starkerdışe ena peler bıvurne",
"newpage": "Pela newiye",
"talkpage": "Ena pele sero werêne",
- "talkpagelinktext": "Werênayış",
+ "talkpagelinktext": "vaten",
"specialpage": "Pela xısusiye",
"personaltools": "Hacetê şexsiy",
"articlepage": "Pela zerreki bıvêne",
- "talk": "Werênayış",
+ "talk": "Vaten",
"views": "Asayışi",
"toolbox": "Haceti",
"userpage": "Pela karberi bıvêne",
"toc": "Sernameyê meselan",
"showtoc": "bımocne",
"hidetoc": "bınımne",
- "collapsible-collapse": "Kılm ke",
+ "collapsible-collapse": "Teng ke",
"collapsible-expand": "Hera ke",
"confirmable-confirm": "{{GENDER:$1|Şıma }} do emeli?",
"confirmable-yes": "Eya",
"red-link-title": "$1 (pele çıniya)",
"sort-descending": "Rêzkerdışo kêmbiyaye",
"sort-ascending": "Rêzkerdışo zêdiyaye",
- "nstab-main": "Pele",
+ "nstab-main": "Wesiqe",
"nstab-user": "Pela karberi",
"nstab-media": "Pela medya",
"nstab-special": "Pela xase",
"wrongpassword": "Parola ğeleta. Rêna / fına bıcerrebne .",
"wrongpasswordempty": "Parola tola, venga. tekrar bınuse.",
"passwordtooshort": "Paroley gani tewr senık be {{PLURAL:$1|1 karakter|$1 karakteran}} derg bê.",
+ "passwordtoolong": "Paroleyi be {{PLURAL:$1|1 karakter|$1 karakteran}} ra derg nêbenê.",
"password-name-match": "Parola u nameyê şıma gani zeypê (seypê) nêbo.",
"password-login-forbidden": "Nameyê nê karberi û gurenayışê parola biyo qedeğen.",
"mailmypassword": "Parola reset ke",
"resetpass_submit": "Parola eyar kere u newe ra dekewe",
"changepassword-success": "Parola şıma be serkewtış vuriye!",
"changepassword-throttled": "Şıma zaf ronıştış akerdış ke.Kerem ke verdi dekewten $1 bıpawe.",
+ "botpasswords-label-appid": "Bot name:",
+ "botpasswords-label-create": "Vıraze",
+ "botpasswords-label-update": "Rocane ke",
"botpasswords-label-cancel": "Bıtexelne",
"botpasswords-label-delete": "Bestere",
+ "botpasswords-label-resetpassword": "Parola reset ke",
+ "botpasswords-label-grants-column": "Dayen",
"resetpass_forbidden": "parolayi nêvuryayi",
"resetpass-no-info": "şıma gani hesab akere u hona bıeşke bırese cı",
"resetpass-submit-loggedin": "Parola bıvurne",
"userinvalidcssjstitle": "'''Teme:''' Mewzuyê \"$1\" çıniyo.\nDosyanê be namey .css u .js'i de herfa werdiye bıgurêne, mesela herında {{ns:user}}:Foo/Vector.css'i de {{ns:user}}:Foo/vector.css bınuse.",
"updated": "(Rozeneya)",
"note": "'''Not:'''",
- "previewnote": "'''Xo vira mekerê ke ena yew verqayta.'''\nVurnayışê şıma hona qeyd nêbiyo!",
+ "previewnote": "'''Şıma bızanê ke ena yew verqayta.'''\nVurnayışê şıma hona qeyd nêbiyo!",
"continue-editing": "Şo herunda vurnayışi",
"previewconflict": "No seyrkerdışê verqaydi serê qutiyê nuşte tezim kerdış de yo, eke şıma qayile vurnayişê maddeyi seyino bıvini, no mocneno şıma.",
"session_fail_preview": "Ma ef kere. Vindibiyayişê tayê datay ra a kerdışê hesabê şıma de ma vurnayişê şıma qayd nêkerd. Newe ra tesel (cereb) bıkere. Eke no qayde zi nêbo, [[Special:UserLogout|hesabê xo bıqefelne]] u newera a kere.",
"undo-summary-username-hidden": "Rewizyona veri $1'i hewada",
"cantcreateaccounttitle": "Nêşenay hesab rakerê",
"cantcreateaccount-text": "Hesabvıraştışê na IP adrese ('''$1''') terefê [[User:$3|$3]] kılit biyo.\n\nSebebo ke terefê $3 ra diyao ''$2''",
- "viewpagelogs": "Heqa na pele de qeydan bıvêne",
+ "viewpagelogs": "Seba na pele rê qeydan bımocne",
"nohistory": "Verê vurnayışanê na pele çıniyo.",
"currentrev": "Çımraviyarnayışo rocane",
"currentrev-asof": "Revizyonanê peniyan, tarixê $1",
"last": "peyên",
"page_first": "verên",
"page_last": "peyên",
- "histlegend": "Ferqê weçinıtışi: Qutiya versiyonan seba têversanayış işaret ke û dest be ''enter''i ya zi gocega cêrêne ro ne.<br />\nCedwel: <strong>({{int:ferq}})</strong> = ferqê verziyonê peyêni, <strong>({{int:peyên}})</strong> = ferqê versiyonê verêni, <strong>{{int:q}}</strong> = vurnayışo werdi.",
+ "histlegend": "Ferqê weçinıtışi: Qutiya versiyonan seba pêver sanayış işaret ke û dest be ''enter''i ya zi gocega cêrêne ro ne.<br />\nCetwel: <strong>({{int:ferq}})</strong> = ferqê verziyonê peyêni, <strong>({{int:peyên}})</strong> = ferqê versiyonê verêni, <strong>{{int:q}}</strong> = vurnayışo werdi.",
"history-fieldset-title": "Tarixi bıvêne",
"history-show-deleted": "Tenya esterıtey",
"histfirst": "Verênêr",
"prefs-help-signature": "Peran de vatenana de vatışi\"<nowiki>~~~~</nowiki>\" ya do imza bé, no bahdo beno çerğé imza u wahdey zemani",
"badsig": "Îmzayê tu raşt niyo.\nEtiketê HTMLî kontrol bike.",
"badsiglength": "İmzaya şıma zaf derga.\nA gani be $1 {{PLURAL:$1|karakter|karakteran}} ra zêde mebo.",
- "yourgender": "Çıçiy cı esto?",
+ "yourgender": "Şeklê xitabi?",
"gender-unknown": "Ez detay nivana",
"gender-male": "Perané wiki camérd deyne ezo vırnena",
"gender-female": "Perané wiki cıni deyne eza vırnena",
"group-sysop": "İdarekari",
"group-bureaucrat": "Burokrati",
"group-suppress": "Çımpawıteni",
- "group-all": "(pêro)",
+ "group-all": "(pêron)",
"group-user-member": "{{GENDER:$1|karber}}",
"group-autoconfirmed-member": "{{GENDER:$1|Karberê ke otomatikmen biyê araşt}}",
"group-bot-member": "{{GENDER:$1|bot}}",
"enhancedrc-history": "tarix",
"recentchanges": "Vurnayışê peyêni",
"recentchanges-legend": "Tercihê vurnayışanê peyênan",
- "recentchanges-summary": "Ena pele de wiki sero vurnayışanê peyênan teqib ke.",
+ "recentchanges-summary": "Wiki sero vurnayışanê peyênan ena pele de teqib kerê.",
"recentchanges-noresult": "Goreyê kriteranê kıfşkerdeyan ra qet yew vurnayış nêvêniya.",
"recentchanges-feed-description": "Ena feed dı vurnayişanê tewr peniyan teqip bık.",
"recentchanges-label-newpage": "Enê vurnayışi ra yew pela newiye vıraziye",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|Lista pelanê neweyan]] zi bıvêne)",
"recentchanges-legend-plusminus": "''(±123)''",
"rcnotefrom": "Cêr de <strong>$2</strong> ra nata vurnayışiyê asenê (tewr vêşi <strong>$1</strong> asenê).",
- "rclistfrom": "$3 $2 ra tepiya vurnayışanê neweyan bımocne",
- "rcshowhideminor": "Vurnayışanê werdiyan $1",
+ "rclistfrom": "$3 u seate $2 ra tepiya vurnayışanê neweyan bımocne",
+ "rcshowhideminor": "vurnayışanê werdiyan $1",
"rcshowhideminor-show": "Bımocne",
"rcshowhideminor-hide": "Bınımne",
- "rcshowhidebots": "Botan $1",
+ "rcshowhidebots": "Vurnayışanê botan $1",
"rcshowhidebots-show": "Bımocne",
"rcshowhidebots-hide": "Bınımne",
- "rcshowhideliu": "Karberanê qeydbiyayeyan $1",
+ "rcshowhideliu": "karberê qeydbiyayeyi $1",
"rcshowhideliu-show": "Bımocne",
"rcshowhideliu-hide": "Bınımne",
- "rcshowhideanons": "Karberanê bênameyan $1",
+ "rcshowhideanons": "Bêname karberan $1",
"rcshowhideanons-show": "Bımocne",
"rcshowhideanons-hide": "Bınımne",
"rcshowhidepatr": "$1 vurnayışê ke dewriya geyrayê",
"rcshowhidepatr-show": "Bımocne",
"rcshowhidepatr-hide": "Bınımne",
- "rcshowhidemine": "Vurnayışanê mı $1",
+ "rcshowhidemine": "Vurnayışanê êdê mı $1",
"rcshowhidemine-show": "Bımocne",
"rcshowhidemine-hide": "Bınımne",
+ "rcshowhidecategorization": "kategorizasyonê pele $1",
"rcshowhidecategorization-show": "Bımocne",
"rcshowhidecategorization-hide": "Bınımne",
- "rclinks": "Peyniya $2 rocan de $1 vurnayışan bımocne <br />$3",
+ "rclinks": "Peyên $2 rocan de $1 vurnayışan bımocne <br />$3",
"diff": "ferq",
"hist": "verên",
"hide": "Bınımne",
"uploadbtn": "Dosya bar ke",
"reuploaddesc": "Barkerdışi iptal ke u peyser şo formê barkerdışi",
"upload-tryagain": "Deskripyonê dosyayî ke vurîya ey qeyd bike",
- "uploadnologin": "Şıma cıkewtış nêvıraşto",
+ "uploadnologin": "Şıma cıkewtış nêvıraşt o",
"uploadnologintext": "Ti şeni $1 dosya bar bikere.",
"upload_directory_missing": "Direktorê dosyayê ($1)î biyo vînî u webserver de nieşkeno viraziye.",
"upload_directory_read_only": "Direktorê dosyayê ($1)î webserver de nieşkeno binuse.",
"randomredirect-nopages": "Cayê nameyê \"$1\" de serşıkıtışi çıniyê.",
"statistics": "İstatistiki",
"statistics-header-pages": "İstatistikê pele",
- "statistics-header-edits": "Îstatistikê vurnayîşî",
+ "statistics-header-edits": "İstatistikê vurnayışan",
"statistics-header-users": "İstatistikê karberi",
- "statistics-header-hooks": "Îstatistiksê binî",
+ "statistics-header-hooks": "Yewbina istatistiki",
"statistics-articles": "Pelê zerreki",
"statistics-pages": "Peli",
"statistics-pages-desc": "Pelanê hemî ke wîkî de estê, pelanê mineqeşeyî, redireksiyon ucb... dehil o.",
"statistics-files": "Dosyayê bar biye",
"statistics-edits": "{{SITENAME}} saz kerdış ra hetana newke amora vırnayışan",
"statistics-edits-average": "Her pele sero nısbi vurnayış",
- "statistics-users": "Qeyd biye [[Special:ListUsers|karberî]]",
+ "statistics-users": "[[Special:ListUsers|Karber]]ê qeydıni",
"statistics-users-active": "Karberê aktifi",
"statistics-users-active-desc": "{{PLURAL:$1|roco peyin de|$1 roco peyin de}} karber ê ke kar kerdê.",
"pageswithprop": "Peli be yew xısusiyetê pele",
"listgrouprights-group": "Grube",
"listgrouprights-rights": "Heqqî",
"listgrouprights-helppage": "Help:Heqqanê gruban",
- "listgrouprights-members": "(listey ezayan)",
+ "listgrouprights-members": "[listeya ezayan]",
"listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
"listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
"listgrouprights-addgroup": "{{PLURAL:$2|Grube|Gruban}} cı kerê: $1",
"watchlist-details": "{{PLURAL:$1|$1 pele|$1 peleyan}} listeyê seyr-kerdışi şıma dı, peleyanê vurnayışi dahil niyo.",
"wlheader-enotif": "E-mail xeber dayiş abiyo.",
"wlheader-showupdated": "ziyaretê şıma ye peyini de vuryayişê peli pê '''nuşteyo qalıni''' mocyayo.",
- "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ê",
+ "wlnote": "$3 seate u $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": "Peyni de vurnayışan ra $1 seata u $2 roca bımocnê",
"watchlist-hide": "Bınımne",
"wlshowtime": "Peyênan bımocne:",
- "wlshowhideminor": "vurnayışê werdiyi",
+ "wlshowhideminor": "vurnayışanê werdiyan",
"wlshowhidebots": "boti",
"wlshowhideliu": "karberê qeydıni",
"wlshowhideanons": "karberê anonimi",
"wlshowhidepatr": "vurnayışê pawıteyi",
"wlshowhidemine": "vurnayışê mı",
+ "wlshowhidecategorization": "kategorizasyonê pele",
"watchlist-options": "Tercihê liste da seyri",
"watching": "Seyr ke...",
"unwatching": "Seyr meke...",
"actioncomplete": "Kar bi temam",
"actionfailed": "kar nêbı",
"deletedtext": "\"$1\" biya wedariya.\nQe qeydê wedarnayışi, $2 bevinin.",
- "dellogpage": "Qeydê esterıtışi",
+ "dellogpage": "Qeydê esternayışi",
"dellogpagetext": "listeya cêrıni heme qaydê hewn a kerdeyan o.",
- "deletionlog": "qeydê esterıtışi",
+ "deletionlog": "Qeydê esternayışi",
"reverted": "revizyono verin tepiya anciyayo",
"deletecomment": "Sebeb:",
"deleteotherreason": "Sebebo bin:",
"changecontentmodel-title-label": "Sernameyê pele",
"changecontentmodel-model-label": "Modelê zerrekiyo newe",
"changecontentmodel-reason-label": "Sebeb:",
+ "log-name-contentmodel": "Qeydê vurnayışanê modelê zerreki",
"protectlogpage": "Qeydê staryayan",
"protectlogtext": "Şıma vurnayişê gırewtışê/wedarnayışê pawıtişi vinenê.\nQey malumato ziyede [[Special:ProtectedPages|Peleyê ke star biye]] bewni rê êna .",
"protectedarticle": "\"[[$1]]\" kılit biyo",
"undelete": "Peleyê ke besterneyayê enê bımocnê",
"undeletepage": "bıewn revizyonê peli yê hewn a şiyayeyan u tepiya biyar",
"undeletepagetitle": "'''pelo [[:$1|$1]] cêrın, wayirê revizyonê hewn a şiyayeyan o'''.",
- "viewdeletedpage": "bıewn pelê hewn a şiyayeyani",
+ "viewdeletedpage": "Pelanê esteriyayeyan bımocne",
"undeletepagetext": "{{PLURAL:$1|pelo|$1 pelo}} cerın hewn a şiyo labele hema zi arşiv de yo u tepiya geriyeno.\nArş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ê '''''{{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}}'''''..",
"sp-contributions-newbies": "Tenya iştıraqanê karberanê neweyan bımocne",
"sp-contributions-newbies-sub": "Qe hesebê newe",
"sp-contributions-newbies-title": "Îştîrakê karberî ser hesabê neweyî",
- "sp-contributions-blocklog": "Qeydê blokey",
+ "sp-contributions-blocklog": "Qeydê meni",
"sp-contributions-deleted": "iştırakê karberi esterdi",
"sp-contributions-uploads": "barkerdey",
"sp-contributions-logs": "qeydi",
"contribslink": "iştıraqi",
"emaillink": "e-poste bırışe",
"autoblocker": "Şıma otomatikmen kılit biy, çıke adresa şımaya ''IP''y terefê \"[[User:$1|$1]]\" gureniyena.\nSebebê kılitbiyayışê $1'i \"$2\"o",
- "blocklogpage": "Qeydê bloqi",
+ "blocklogpage": "Qeydê meni",
"blocklog-showlog": "verniyê no/na karberi cıwa ver geriyayo/ya.",
"blocklog-showsuppresslog": "verniyê no/na karberi cıwa ver geriyayo/ya.",
"blocklogentry": "[[$1]] biyo bloqe, sebeb: $3, hetana $2 do bıramo.",
"import-options-wrong": "{{PLURAL:$2|Weçenego|Weçenego}} xerpiyaye: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Sernuştey ena pela reçey cı raverde niyo.",
"import-rootpage-nosubpage": "Qan de bınnaman reçe de \"$1\" re mısade nedano.",
- "importlogpage": "Defterê seyırio idxal",
+ "importlogpage": "Qeydê ragozi",
"importlogpagetext": "wiki yo ke nişane biyo tera kırıştışê zerredayişi nêbeno.",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
"import-logentry-interwiki-detail": "$2 ra $1 {{PLURAL:$1|çımraviyarnayış|çımraviyarnayışi}}",
"patrol-log-page": "Qeydé çımsernayoğan",
"patrol-log-header": "Ena listeyê logi revizyonê devriyeyi mocneno.",
"log-show-hide-patrol": "Qeydé Çımsernayoğan $1",
+ "log-show-hide-tag": "$1 qeydê etiketi",
"deletedrevision": "Veriyono kihan $1 wederna",
"filedeleteerror-short": "Wedarnayişê dosya de ğelati esto: $1",
"filedeleteerror-long": "Eka dosya wedarnayişi de ğeleti biyê:\n\n$1",
"exif-urgency-low": "($1) Kemiyo",
"exif-urgency-high": "( $1 ) Vêşiyo",
"exif-urgency-other": "Sıftê şınasiya karberi ($1)",
- "namespacesall": "pêro",
+ "namespacesall": "pêron",
"monthsall": "pêro",
"confirmemail": "Adresê e-posta tesdiq ker",
"confirmemail_noemail": "Yew emaîlê tu raştîyê çin o ke [[Special:Preferences|tercihê karberî]] ayar bike.",
"htmlform-cloner-delete": "Wedare",
"sqlite-has-fts": "$1 tam-metn destegê cı geyrayışiya piya",
"sqlite-no-fts": "$1 tam-metn bê destegê cı geyrayışi",
- "logentry-delete-delete": "$1 pela $3 {{GENDER:$2|esterıte}}",
+ "logentry-delete-delete": "Karber $1 pela $3 {{GENDER:$2|besternê}}",
"logentry-delete-restore": "$1 pela $3 {{GENDER:$2|peyser arde}}",
"logentry-delete-event": "$1 $3: $4 de asayışê {{PLURAL:$5|cıkerdışi|cıkerdışan}} {{GENDER:$2|vurna}}",
"logentry-delete-revision": "$1 pela $3: $4 de asayışê {{PLURAL:$5|yew revizyoni|$5 revizyonan}} {{GENDER:$2|vurna}}",
"logentry-rights-rights-legacy": "$1 qandê $3 rê ezayiya grube {{GENDER:$2|vuriye}}",
"logentry-rights-autopromote": "$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}",
"logentry-upload-upload": "$1 {{GENDER:$2|bar kerd}} $3",
+ "log-name-managetags": "Qeydê idareyê etiketi",
+ "log-name-tag": "Qeydê etiketi",
"rightsnone": "(çıniyo)",
"revdelete-summary": "kılmvatışê vuriyayişi",
"feedback-adding": "Pela rê peyxeberdar defêno...",
"minoredit": "This is a minor edit",
"watchthis": "Watch this page",
"savearticle": "Save page",
+ "publishpage": "Publish page",
"preview": "Preview",
"showpreview": "Show preview",
"showdiff": "Show changes",
"userpage-userdoesnotexist": "User account \"$1\" is not registered.\nPlease check if you want to create/edit this page.",
"userpage-userdoesnotexist-view": "User account \"$1\" is not registered.",
"blocked-notice-logextract": "This user is currently blocked.\nThe latest block log entry is provided below for reference:",
- "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Clear the cache in <em>Tools → Preferences</em>",
+ "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Go to <em>Menu → Settings</em> (<em>Opera → Preferences</em> on a Mac) and then to <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
"usercssyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new CSS before saving.",
"userjsyoucanpreview": "<strong>Tip:</strong> Use the \"{{int:showpreview}}\" button to test your new JavaScript before saving.",
"usercsspreview": "<strong>Remember that you are only previewing your user CSS.\nIt has not yet been saved!</strong>",
"accesskey-ca-nstab-category": "c",
"accesskey-minoredit": "i",
"accesskey-save": "s",
+ "accesskey-publish": "s",
"accesskey-preview": "p",
"accesskey-diff": "v",
"accesskey-compareselectedversions": "v",
"tooltip-ca-nstab-category": "View the category page",
"tooltip-minoredit": "Mark this as a minor edit",
"tooltip-save": "Save your changes",
+ "tooltip-publish": "Publish your changes",
"tooltip-preview": "Preview your changes. Please use this before saving.",
"tooltip-diff": "Show which changes you made to the text",
"tooltip-compareselectedversions": "See the differences between the two selected revisions of this page",
"feedback-useragent": "User agent:",
"searchsuggest-search": "Search",
"searchsuggest-containing": "containing...",
+ "api-error-autoblocked": "Your IP address has been blocked automatically, because it was used by a blocked user.",
"api-error-badaccess-groups": "You are not permitted to upload files to this wiki.",
"api-error-badtoken": "Internal error: Bad token.",
+ "api-error-blocked": "You have been blocked from editing.",
"api-error-copyuploaddisabled": "Uploading by URL is disabled on this server.",
"api-error-duplicate": "There {{PLURAL:$1|is another file|are some other files}} already on the site with the same content.",
"api-error-duplicate-archive": "There {{PLURAL:$1|was another file|were some other files}} already on the site with the same content, but {{PLURAL:$1|it was|they were}} deleted.",
"api-error-nomodule": "Internal error: No upload module set.",
"api-error-ok-but-empty": "Internal error: No response from server.",
"api-error-overwrite": "Overwriting an existing file is not allowed.",
+ "api-error-ratelimited": "You're trying to upload more files in a short space of time than this wiki allows.\nPlease try again in a few minutes.",
"api-error-stashfailed": "Internal error: Server failed to store temporary file.",
"api-error-publishfailed": "Internal error: Server failed to publish temporary file.",
"api-error-stasherror": "There was an error while uploading the file to stash.",
"tog-usenewrc": "Grupigi ŝanĝojn laŭ paĝo en \"Lastaj ŝanĝoj\" kaj \"Atentaro\" (bezonas Ĝavaskripton)",
"tog-numberheadings": "Aŭtomate numerigi sekciojn",
"tog-showtoolbar": "Montri redakto-breton (per Ĝavaskripto)",
- "tog-editondblclick": "Redakti per duobla alklako (per Ĝavaskripto)",
+ "tog-editondblclick": "Redakti paĝojn per duobla alklako",
"tog-editsectiononrightclick": "Ŝalti sekcian redaktadon per dekstra musklako de sekciaj titoloj (per Ĝavaskripto)",
"tog-watchcreations": "Aldoni miajn kreatajn paĝojn kaj miajn alŝutaĵojn al mia atentaro",
"tog-watchdefault": "Aldoni al mia atentaro paĝojn kaj dosierojn redaktitajn de mi",
"oct": "okt",
"nov": "nov",
"dec": "dec",
- "january-date": "$1-a de januaro",
- "february-date": "$1-a de februaro",
- "march-date": "$1-a de marto",
- "april-date": "$1-a de aprilo",
- "may-date": "$1-a de majo",
- "june-date": "$1-a de junio",
- "july-date": "$1-a de julio",
- "august-date": "$1-a de aŭgusto",
- "september-date": "$1-a de septembro",
+ "january-date": "$1‑a de januaro",
+ "february-date": "$1‑a de februaro",
+ "march-date": "$1‑a de marto",
+ "april-date": "$1‑a de aprilo",
+ "may-date": "$1‑a de majo",
+ "june-date": "$1‑a de junio",
+ "july-date": "$1‑a de julio",
+ "august-date": "$1‑a de aŭgusto",
+ "september-date": "$1‑a de septembro",
"october-date": "$1-a de oktobro",
"november-date": "$1-a de novembro",
"december-date": "$1-a de decembro",
"talkpagelinktext": "diskuto",
"specialpage": "Speciala Paĝo",
"personaltools": "Personaj iloj",
- "articlepage": "Rigardi artikolon",
+ "articlepage": "Vidi paĝenhavon",
"talk": "Diskuto",
"views": "Vidoj",
"toolbox": "Iloj",
- "userpage": "Rigardi personan paĝon",
+ "userpage": "Vidi uzantan paĝon",
"projectpage": "Rigardi projektopaĝon",
"imagepage": "Vidi dosieropaĝon",
"mediawikipage": "Vidi mesaĝopaĝon",
"perfcached": "La sekvantaj informoj venas el kaŝmemoro kaj eble ne estas ĝisdataj. Maksimumo de {{PLURAL:$1|unu rezulto estas disponebla|$1 rezultoj estas disponeblaj}} en la kaŝmemoro.",
"perfcachedts": "La jenaj datumoj estas el kaŝmemoro kaj estis laste ĝisdatigitaj $1. Maksimumo de {{PLURAL:$4|unu rezulto estas disponebla|$4 rezultoj estas disponeblaj}} en la kaŝmemoro.",
"querypage-no-updates": "Ĝisdatigoj por ĉi tiu paĝo estas nune neebligitaj.\nDatumoj ĉi tie ne estos nune refreŝigitaj.",
- "viewsource": "Rigardi vikitekston",
+ "viewsource": "Vidi vikitekston",
"viewsource-title": "Vidi fonton por $1",
"actionthrottled": "Agado limigita",
"actionthrottledtext": "Por kontraŭi misuzon, vi estas limigita farante ĉi tiun agon tro pluroble en mallonga tempdaŭro, kaj vi transpasis ĉi tiun limon. Bonvolu refaru post kelkaj minutoj.",
"protectedpagetext": "Tiu ĉi paĝo estas ŝlosita por malebligi redaktadon.",
- "viewsourcetext": "Vi povas rigardi kaj kopii la fonton de la paĝo.",
+ "viewsourcetext": "Vi povas vidi kaj kopii la fonton de la paĝo.",
"viewyourtext": "Vi povas vidi kaj kopii la fonton de <strong>viaj redaktoj</strong> al ĉi tiu paĝo.",
"protectedinterface": "Ĉi tiu paĝo provizas interfacan tekston por la programaro, kaj estas ŝlosita por malebligi misuzon.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
"editinginterface": "<strong>Atentu:</strong> Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.\nŜanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
"noemail": "Retpoŝtadreso ne estas registrita por uzanto \"$1\".",
"noemailcreate": "Vi devas provizi validan retadreson",
"passwordsent": "Oni sendis novan pasvorton al la retpoŝtadreso\nregistrita por \"$1\".\nBonvolu ensaluti denove ricevinte ĝin.",
- "blocked-mailpassword": "Via IP-adreso estas forbarita de redaktado, kaj tial\nne rajtas uzi la pasvorto-rekovran funkcion por malebligi misuzon.",
+ "blocked-mailpassword": "Via IP-adreso estas forbarita de redaktado. Por preventi fiuzojn, la pasvorto-restaŭron estas malpermesita per tiu IP-adreso.",
"eauthentsent": "Konfirma retmesaĝo estis sendita al la nomita retadreso. Antaŭ ol iu ajn alia mesaĝo estos sendita al la konto, vi devos sekvi la instrukciojn en la mesaĝo por konfirmi ke la konto ja estas via.",
"throttled-mailpassword": "Retpoŝto kun reŝargita pasvorto estis jam sendita ene de la {{PLURAL:$1|lasta horo|lastaj $1 horoj}}.\nPor preventi misuzon, nur unu reŝargita pasvorto estos sendita dum {{PLURAL:$1|horo|$1 horoj}}.",
"mailerror": "Okazis eraro sendante retpoŝtaĵon: $1",
"newpassword": "Nova pasvorto",
"retypenew": "Retajpi novan pasvorton",
"resetpass_submit": "Fari pasvorton kaj ensaluti",
- "changepassword-success": "Via pasvorto estis sukcese ŝanĝita!",
+ "changepassword-success": "Via pasvorto estis ŝanĝita!",
"changepassword-throttled": "Vi tro ofte provis ensaluti al ĉi tiu konto.\nBonvolu atendi $1 antaŭ ol reprovi.",
"botpasswords": "Robotaj pasvortoj",
"botpasswords-summary": "<em>Robotaj pasvortoj</em> ebligas aliron al uzanto-konto per API sen uzado de ĉefaj ensalutaj datumoj de la konto. La uzanto-rajtoj disponeblaj dum ensaluto per robota pasvorto povas esti limigitaj.\n\nSe vi ne scias, kial vi devus fari tion, vi probable maldevus fari tion. Neniu devus peti vin generi pasvorton tie ĉi kaj transdoni ĝin al li.",
"botpasswords-label-cancel": "Nuligi",
"botpasswords-label-delete": "Forigi",
"botpasswords-label-resetpassword": "Rekomencigi la pasvorton",
+ "botpasswords-label-grants": "Uzeblaj permesdonoj:",
+ "botpasswords-help-grants": "Ĉiu permesdono provizas aliron al listitaj uzantaj permisoj, kiujn uzantkonto jam havas. Vidu la [[Special:ListGrants|tabelon de permisdonoj]] por pli da informo.",
"botpasswords-label-restrictions": "Limigoj de uzado:",
+ "botpasswords-label-grants-column": "Permisdonita",
"botpasswords-bad-appid": "La robota nomo \"$1\" estas malvalida.",
"botpasswords-insert-failed": "Aldono de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi jam estis aldonita?",
"botpasswords-update-failed": "Ĝisdatigo de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi estis forigita?",
"botpasswords-updated-body": "La robota pasvorto por robota nomo \"$1\" de la uzanto \"$2\" estis ĝisdatigita.",
"botpasswords-deleted-title": "Robota pasvorto forigita",
"botpasswords-deleted-body": "La robota pasvorto por robota nomo \"$1\" de la uzanto \"$2\" estis forigita.",
+ "botpasswords-newpassword": "La nova pasvorto por ensaluti kun <strong>$1</strong> estas <strong>$2</strong>. <em>Bonvolu registri tiun por referenconto.",
+ "botpasswords-no-provider": "Robotopasvortensalutoprovizilo (''BotPasswordsSessionProvider'') maldisponeblas.",
+ "botpasswords-restriction-failed": "Limigoj pri robota pasvorto maleblas tiun uzantonomon.",
+ "botpasswords-invalid-name": "La difinita uzantnomo malenhavas la robotopasvortan disigilon (\"$1\").",
+ "botpasswords-not-exist": "Uzanto \"$1\" ne havas robotopasvorton, kiu nomiĝas \"$2\".",
"resetpass_forbidden": "Pasvortoj ne estas ŝanĝeblaj",
"resetpass-no-info": "Vi devas ensaluti por atingi ĉi tiun paĝon rekte.",
"resetpass-submit-loggedin": "Ŝanĝi pasvorton",
"passwordreset-emailtext-user": "Uzanto $1 de {{SITENAME}} petis restarigo de via pasvorto por {{SITENAME}}\n($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi devas ensaluti kaj elekti novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas ŝanĝi\nĝin, vi povas ignori ĉi tiun mesaĝon kaj uzi vian malnovan pasvorton.",
"passwordreset-emailelement": "Salutnomo: \n$1\n\nProvizora pasvorto: \n$2",
"passwordreset-emailsentemail": "Se tiu ĉu retpoŝta adreso estas kunligita kun via konto, tiam al ĉi tiu adreso estos sendita retpoŝto por renovigi pasvorton.",
+ "passwordreset-emailsentusername": "Se estas retpoŝta adreso, kiu estas asocigita kun tiu uzantnomo, tiam sendos retpôstan mesaĝon pri reasigno de pasvorto.",
"passwordreset-emailsent-capture": "Retpoŝto kun renovigita pasvorto estis sendita, kiu estas montrata malsupre.",
"passwordreset-emailerror-capture": "Retpoŝto kun renovigita pasvorto estis generita, montrata sube, sed sendado al la {{GENDER:$2|uzanto}} malsukcesis: $1",
"changeemail": "Ŝanĝi aŭ forigi retpoŝtadreson",
"nosuchsectiontext": "Vi provis redakti sekcion, kiu ne ekzistas.\nĜi eble estis movita aŭ forigita dum vi rigardis la paĝon.",
"loginreqtitle": "Nepre ensaluti",
"loginreqlink": "ensaluti",
- "loginreqpagetext": "Vi devas $1 por rigardi aliajn paĝojn.",
+ "loginreqpagetext": "Bonvolu $1 por vidi aliajn paĝojn.",
"accmailtitle": "La pasvorto estas sendita.",
"accmailtext": "Hazarde generita pasvorto por [[User talk:$1|$1]] estis sendita al $2.\n\nLa pasvorto por ĉi tiu nova konto povas esti ŝanĝita en la paĝo ''[[Special:ChangePassword|ŝanĝi pasvorton]]'' dum ensalutado.",
"newarticle": "(Nova)",
"copyrightwarning2": "Bonvolu noti ke ĉiuj kontribuoj al {{SITENAME}} povas esti reredaktitaj, ŝanĝitaj aŭ forigitaj de aliaj kontribuantoj. Se vi ne deziras, ke viaj verkoj estu senkompate reredaktitaj, ne publikigu ilin ĉi tie.<br />\nVi ankaŭ promesu al ni ke vi verkis tion mem aŭ kopiis el publika domajno aŭ simila libera fonto (vidu $1 por detaloj).\n'''NE PROPONU KOPIRAJTITAJN VERKOJN SEN PERMESO!'''",
"editpage-cannot-use-custom-model": "La enhavomodelo de ĉi tiu paĝo ne povas esti ŝanĝata.",
"longpageerror": "'''Eraro: La teksto, kiun vi prezentis, longas {{PLURAL:$1|$1 kilobajton|$1 kilobajtojn}}, kio estas pli longa ol la maksimumo de {{PLURAL:$2|$2 kilobajto|$2 kilobajtoj}}.'''\nĜi ne povas esti konservita.",
- "readonlywarning": "'''AVERTO: La datumbazo estas ŝlosita por teknika laboro, do vi ne povas konservi viajn redaktojn ĉi-momente.\nVi eble volus elkopii kaj englui la tekston al tekstdosiero por konservi ĝin por posta uzo.'''\n\nLa administranto kiu ŝlosis ĝin donis ĉi tiun eksplikaĵon: $1",
+ "readonlywarning": "'''AVERTO: La datumbazo estas ŝlosita por teknika laboro, do vi ne povas konservi viajn redaktojn ĉi-momente.'''\nVi eble volus elkopii kaj alglui vian tekston al tekstdosiero kaj konservi ĝin por posta uzo.\n\nLa administranto kiu ŝlosis ĝin donis ĉi tiun eksplikaĵon: $1",
"protectedpagewarning": "'''Averto: Ĉi tiu paĝo estas ŝlosita kontraŭ redaktado krom de administrantoj.'''\nJen la lasta protokolero provizita por via referenco:",
"semiprotectedpagewarning": "'''Notu:''' Ĉi tiu paĝo estas ŝlosita tiel ke nur ensalutintaj uzantoj povas redakti ĝin.\nJen la lasta protokolero por via referenco:",
"cascadeprotectedwarning": "<strong>Averto:</strong> Ĉi tiu paĝo estas ŝlosita, tiel ke nur uzantoj kun administrantaj privilegioj povas redakti ĝin, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan kaskade protektitan paĝon|sekvajn kaskade protektitajn paĝojn}}:",
"permissionserrors": "Eraro pri permeso",
"permissionserrorstext": "Vi ne rajtas fari tion pro la {{PLURAL:$1|sekva kialo|sekvaj kialoj}}:",
"permissionserrorstext-withaction": "Vi ne rajtas $2, pro la {{PLURAL:$1|jena kialo|jenaj kialoj}}:",
- "contentmodelediterror": "Vi ne povas prilabori ĉi tiun version, ĉar ĝia enhavomodelo <code>$1</code> kaj la aktuala enhavomodelo de la paĝo estas <code>$2</code>.",
+ "contentmodelediterror": "Vi ne povas prilabori ĉi tiun reviziaĵo, ĉar ĝia enhavoŝablono estas <code>$1</code>, kiu malsamas la aktualan enhavoŝablonon de la paĝo <code>$2</code>.",
"recreate-moveddeleted-warn": "'''Averto: Vi rekreas paĝon, kiu estis antaŭe forigita.'''\n\nVi konsideru, ĉu konvenas daŭre redakti ĉi tiun paĝon.\nJen la protokolo de forigoj kaj alinomigado por via oportuno:",
"moveddeleted-notice": "Ĉi tiu paĝo estis forigita.\nPliaj detaloj estas en protokolo pri forigado kaj alinomado de tiu ĉi paĝo.",
+ "moveddeleted-notice-recent": "Pardonon, tiu paĝo freŝdate estis forigita (en la dauro de la lasta 24 horoj).\nLa forigo kaj la movprotokolo pri la paĝo estas provizitaj sube por referenco.",
"log-fulllog": "Vidi kompletan protokolon",
"edit-hook-aborted": "Redakto estis ĉesigita per etendaĵo de la Vikia softvaro.\nĜi ne donis eksplikon.",
"edit-gone-missing": "Ne eblis ĝisdatigi la paĝon.\nVerŝajne ĝi estis forigita.",
"content-model-css": "CSS",
"content-json-empty-object": "Malplena objeto",
"content-json-empty-array": "Malplena tabelo",
+ "duplicate-args-warning": "'''Averto:''' [[:$1]] vokas je [[:$2]] kun pli ol unu valoro por la parametro \"$3\". Nur la lasta liverita valoro estas uzonta.",
"duplicate-args-category": "Paĝoj kun pluroblaj argumentoj en ŝablonvokoj",
"duplicate-args-category-desc": "La paĝo enhavas uzon de ŝablono kun pluroble uzitaj argumentoj, kiel ekzemple <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> aŭ <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
"expensive-parserfunction-warning": "Averto: Ĉi tiu paĝo enhavas tro da multekostaj sintaksaj funkcio-vokoj.\n\nĜi havu malpli ol $2 {{PLURAL:$2|vokon|vokojn}}, sed nun estas $1 {{PLURAL:$1|voko|vokoj}}.",
"cantcreateaccounttitle": "Ne eblas krei konton",
"cantcreateaccount-text": "Konto-kreado de ĉi tiu IP-adreso ('''$1''') estis forbarita de [[User:$3|$3]].\n\nLa kialo donata de $3 estas ''$2''.",
"cantcreateaccount-range-text": "La kreado de kontoj de IP-adresoj en la intervalo <strong>$1</strong>, kiu inkludas vian IP-adreson (<strong>$4</strong>), estis blokita de [[User:$3|$3]].\n\nLa donita kialo de $3 estas <em>$2</em>",
- "viewpagelogs": "Rigardi la protokolojn por tiu ĉi paĝo",
+ "viewpagelogs": "Vidi la protokolojn por tiu ĉi paĝo",
"nohistory": "Ne ekzistas historio de redaktoj por ĉi tiu paĝo.",
"currentrev": "Aktuala versio",
"currentrev-asof": "Nuna versio ekde $1",
"revdelete-unsuppress": "Forigi limigojn al restarigitaj versioj",
"revdelete-log": "Kialo:",
"revdelete-submit": "Apliki al {{PLURAL:$1|elektita revizio|elektitaj revizioj}}",
- "revdelete-success": "'''Revizia videbleco estas sukcese ĝisdatigita.'''",
+ "revdelete-success": "'''Revizivideblecon ĝisdatigis.'''",
"revdelete-failure": "'''Videblecon de revizio ne eblis ĝisdatigi:'''\n$1",
- "logdelete-success": "'''Videbleco de evento sukcese farita.'''",
+ "logdelete-success": "'''Protokolovideblecon ensignitan.'''",
"logdelete-failure": "'''Protokola videbleco ne estis akordebla:'''\n$1",
"revdel-restore": "Ŝanĝi videblecon",
"pagehist": "Paĝa historio",
"mergehistory-fail-bad-timestamp": "Tempomarko estas malvalida.",
"mergehistory-fail-invalid-source": "Fonta paĝo estas malvalida.",
"mergehistory-fail-invalid-dest": "Cela paĝo estas malvalida.",
+ "mergehistory-fail-no-change": "Historio-kunfandado kunfandis neniun revizion. Bonvolu rekontroli la paĝon kaj la tempo-parametrojn.",
+ "mergehistory-fail-permission": "Nesufiĉa permesoj por kunfadi historion.",
+ "mergehistory-fail-self-merge": "Fonta kaj cela paĝoj samas.",
+ "mergehistory-fail-timestamps-overlap": "Fonta revizio surkunigas aŭ postokuras la celan revizion.",
"mergehistory-fail-toobig": "Ne eblas kunigi historiojn ĉar pli ol sojlo de $1 {{PLURAL:$1|revizio|revizioj}} estus {{PLURAL:$1|movita|movitaj}}.",
"mergehistory-no-source": "Fontpaĝo $1 ne ekzistas.",
"mergehistory-no-destination": "Celpaĝo $1 ne ekzistas.",
"search-category": "(kategorio $1)",
"search-file-match": "(kongruas kun dosiera enhavo)",
"search-suggest": "Ĉu vi intenciis: $1",
+ "search-rewritten": "Montru rezultojn por $1. Serĉita anstataŭ $2.",
"search-interwiki-caption": "Kunprojektoj",
"search-interwiki-default": "Rezultoj de $1:",
"search-interwiki-more": "(plu)",
"showingresultsinrange": "Malsupre montriĝas {{PLURAL:$1|<strong>1</strong> rezulto|<strong>$1</strong> rezultoj}} en la intervalo #<strong>$2</strong> ĝis #<strong>$3</strong>.",
"search-showingresults": "{{PLURAL:$4|Rezulto <strong>$1</strong> el <strong>$3</strong>|Rezultoj <strong>$1 - $2</strong> el <strong>$3</strong>}}",
"search-nonefound": "La serĉomendo rezultis kun neniuj trafoj.",
+ "search-nonefound-thiswiki": "Neniu rezulto kongruis la peton tra tiu retejo.",
"powersearch-legend": "Progresa serĉo",
"powersearch-ns": "Serĉi en nomspacoj:",
"powersearch-togglelabel": "Elekti:",
"prefs-help-recentchangescount": "Ĉi tiu inkluzivas lastajn ŝanĝojn, paĝajn historiojn, kaj protokolojn.",
"prefs-help-watchlist-token2": "Tio estas la sekreta ŝlosilo al la retfluo de via atentaro.\nĈiu, kiu konas ĝin, povas legi vian atentaron. Do, ne kunhavigu ĝin.\nSe vi devas, [[Special:ResetTokens|vi povas rekomencigi ĝin]].",
"savedprefs": "Viaj preferoj estas konservitaj.",
+ "savedrights": "La uzanto-rajtojn de {{GENDER:$1|$1}} konservigis.",
"timezonelegend": "Horzono:",
"localtime": "Loka tempo:",
"timezoneuseserverdefault": "Uzi defaŭlton de servilo ($1)",
"userrights": "Prizorgi rajtojn de uzantoj",
"userrights-lookup-user": "Administri grupojn de uzantoj",
"userrights-user-editname": "Entajpu salutnomon:",
- "editusergroup": "Redakti grupojn de uzantoj",
+ "editusergroup": "Redakti grupojn de {{GENDER:$1|uzanto}}",
"editinguser": "Ŝanĝado de uzanto-rajtoj de la {{GENDER:$1|uzanto|uzantino}} <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Redakti grupojn de uzantoj",
- "saveusergroups": "Konservi grupojn de uzantoj",
+ "saveusergroups": "Konservi grupojn de {{GENDER:$1|viruzuloj|uzulinoj|uzantoj}}",
"userrights-groupsmember": "Membro de:",
"userrights-groupsmember-auto": "Implica membro de:",
"userrights-groups-help": "Vi povas modifi la grupojn kiun ĉi uzanto enestas.\n* Markita markbutono signifas ke la uzanto estas en tiu grupo.\n* Nemarkita markbutono signifas ke la uzanto ne estas in tiu grupo.\n* Steleto (*) signifas ke vi ne povas forigi la grupon post vi aldonis ĝin, aŭ male.",
"userrights-changeable-col": "Grupoj kiujn vi povas ŝanĝi",
"userrights-unchangeable-col": "Grupoj kiujn vi ne povas ŝanĝi",
"userrights-conflict": "Konflikto ĉe la ŝanĝo de uzantorajtoj! Bonvolu kontroli kaj konfirmi viajn ŝanĝojn.",
- "userrights-removed-self": "Vi sukcese nuligis viajn proprajn rajtojn. Do vi ne plu rajtas aliri ĉi tiun paĝon.",
+ "userrights-removed-self": "Vi nuligis viajn proprajn rajtojn, do vi ne plu rajtas aliri ĉi tiun paĝon.",
"group": "Grupo:",
"group-user": "Uzantoj",
"group-autoconfirmed": "Aŭtomate konfirmitaj uzantoj",
"group-bot": "Robotoj",
"group-sysop": "Administrantoj",
"group-bureaucrat": "Burokratoj",
- "group-suppress": "Superrigardoj",
+ "group-suppress": "Foriganaro",
"group-all": "(ĉiuj)",
"group-user-member": "{{GENDER:$1|uzanto|uzantino}}",
"group-autoconfirmed-member": "{{GENDER:$1|aŭtomate konfirmita uzanto|aŭtomate konfirmita uzantino}}",
"grouppage-bot": "{{ns:project}}:Robotoj",
"grouppage-sysop": "{{ns:project}}:Administrantoj",
"grouppage-bureaucrat": "{{ns:project}}:Burokratoj",
- "grouppage-suppress": "{{ns:project}}:Superrigardo",
+ "grouppage-suppress": "{{ns:project}}:Forigi",
"right-read": "Legi paĝojn",
"right-edit": "Redakti paĝojn",
"right-createpage": "Kreu paĝojn (kiuj ne estas diskuto-paĝoj)",
"right-createtalk": "Krei diskuto-paĝojn",
"right-createaccount": "Krei novajn uzanto-kontojn",
+ "right-autocreateaccount": "Aŭtomate ensaluti eksteruzantan konton",
"right-minoredit": "Marki redaktojn kiel etajn",
"right-move": "Movi paĝojn",
"right-move-subpages": "Alinomigi paĝojn kun ĝiaj subpaĝoj",
"right-bigdelete": "Forigi paĝojn kun grandaj historioj",
"right-deletelogentry": "Forigi kaj malforigi specifajn enmetojn en la registro.",
"right-deleterevision": "Forigi kaj malforigi specifajn versiojn de paĝoj",
- "right-deletedhistory": "Rigardi listanojn de forigitaj historioj, sen ties asociaj tekstoj",
+ "right-deletedhistory": "Vidi forigitajn historieroj, sen ties asociaj tekstoj",
"right-deletedtext": "Rigardi forigitan tekston kaj ŝanĝojn inter forigitaj revizioj.",
"right-browsearchive": "Serĉi forigitajn paĝojn",
"right-undelete": "Restarigi paĝon",
"right-edituserjs": "Redaktu JS-dosierojn de aliaj uzantoj",
"right-editmyusercss": "Redakti viajn proprajn CSS-dosierojn",
"right-editmyuserjs": "Redakti viajn proprajn JavaScript-dosierojn",
- "right-viewmywatchlist": "Rigardi vian atentaron",
+ "right-viewmywatchlist": "Vidi vian propran atentaron",
"right-editmywatchlist": "Redakti vian propran atentaron. Notu, ke kelkaj agoj ankoraŭ ebligas aldoni paĝojn sen ĉi tiu rajto.",
"right-viewmyprivateinfo": "Vidi viajn proprajn privatajn informojn (ekz. retpoŝtan adreson, veran nomon)",
"right-editmyprivateinfo": "Redakti viajn proprajn privatajn informojn (ekz. retpoŝtan adreson, veran nomon)",
"right-importupload": "Importi paĝojn de dosiera alŝuto",
"right-patrol": "Marki redaktojn kiel patrolitajn",
"right-autopatrol": "Fari redaktojn aŭtomate markitajn kiel patrolitajn",
- "right-patrolmarks": "Rigardi patrolmarkojn de lastaj ŝanĝoj",
+ "right-patrolmarks": "Vidi patrolmarkojn de lastaj ŝanĝoj",
"right-unwatchedpages": "Vidi la liston de nepriatentitaj paĝoj",
"right-mergehistory": "Kunfandigi la historiojn de paĝoj",
"right-userrights": "Redakti ĉiujn uzanto-rajtojn",
"right-managechangetags": "Kreado kaj forigado de [[Special:Tags|etikedoj]] de datumbazo",
"right-applychangetags": "Aldoni [[Special:Tags|etikedojn]] al propraj ŝanĝoj",
"right-changetags": "Aldoni kaj forigi arbitrajn [[Special:Tags|etikedojn]] ĉe unuopaj revizioj kaj protokoleroj",
+ "grant-generic": "\"$1\" rajtaro",
+ "grant-group-page-interaction": "Interagi paĝojn",
+ "grant-group-file-interaction": "Interagi aŭdvidaĵajn dosierojn",
+ "grant-group-watchlist-interaction": "Interagi vian atentaron",
"grant-group-email": "Sendi retpoŝton",
+ "grant-group-high-volume": "Efektivigi ampleksege aktivecon",
+ "grant-group-customization": "Personecigoj kaj preferoj",
+ "grant-group-administration": "Efektivigi administrajn agojn",
+ "grant-group-other": "Diversaj aktivecoj",
+ "grant-blockusers": "Bloki kaj malbloki uzantojn",
"grant-createaccount": "Krei kontojn",
+ "grant-createeditmovepage": "Krei, redakti kaj alinomi paĝojn",
+ "grant-delete": "Forigi paĝojn, reviziaĵojn kaj protokolerojn",
+ "grant-editinterface": "Redakti la MediaVikian nomspacon kaj la CSS/Ĝavoskripto de uzanto",
+ "grant-editmycssjs": "Redakti vian uzantan CSS/Ĝavoskripton",
+ "grant-editmyoptions": "Redakti vian uzantan preferojn",
+ "grant-editmywatchlist": "Redakti vian atentaron",
+ "grant-editpage": "Redakti ekzistantajn paĝojn",
+ "grant-editprotected": "Redakti protektitajn paĝojn",
+ "grant-highvolume": "Ampleksegaj redaktado",
+ "grant-oversight": "Kaŝi uzantojn kaj forigi reviziaĵojn",
+ "grant-patrol": "Patroli ŝanĝojn al pâgoj",
+ "grant-protect": "Protekti kaj malprotekti paĝojn",
+ "grant-rollback": "Malvalidi ŝanĝojn al paĝoj",
+ "grant-sendemail": "Retpoŝti al aliaj uzantoj",
+ "grant-uploadeditmovefile": "Alŝuti, anstataŭigi kaj alinomi dosierojn",
+ "grant-uploadfile": "Alŝuti novajn dosierojn",
+ "grant-basic": "Bazaj rajtoj",
+ "grant-viewdeleted": "Vidi forigitajn dosierojn kaj paĝojn",
+ "grant-viewmywatchlist": "Rigardi vian atentaron",
"newuserlogpage": "Protokolo de uzanto-kreado",
"newuserlogpagetext": "Jen protokolo de lastaj kreadoj de uzantoj.",
"rightslog": "Protokolo de uzanto-rajtoj",
"action-createpage": "krei paĝojn",
"action-createtalk": "krei diskuto-paĝojn",
"action-createaccount": "krei ĉi tiun uzanto-konton",
- "action-history": "rigardi historion de tiu ĉi paĝo",
+ "action-autocreateaccount": "Aŭtomate krei tiun eksteruzantan konton",
+ "action-history": "vidi historion de tiu ĉi paĝo",
"action-minoredit": "marki ĉi tiun redakton eta",
"action-move": "movi ĉi tiun paĝon",
"action-move-subpages": "movi ĉi tiun paĝon, kaj ties subpaĝojn",
"rcshowhidemine": "$1 miajn redaktojn",
"rcshowhidemine-show": "Montri",
"rcshowhidemine-hide": "Kaŝi",
+ "rcshowhidecategorization": "$1 paĝokategoriadon",
"rcshowhidecategorization-show": "Montri",
"rcshowhidecategorization-hide": "Kaŝi",
"rclinks": "Montri $1 lastajn ŝanĝojn dum la $2 lastaj tagoj.<br />$3",
"recentchangeslinked-summary": "Jen listo de ŝanĝoj faritaj lastatempe al paĝoj ligitaj el specifa paĝo (aŭ al membroj de specifa kategorio).\nPaĝoj en [[Special:Watchlist|via atentaro]] estas '''grasaj'''.",
"recentchangeslinked-page": "Nomo de paĝo:",
"recentchangeslinked-to": "Montru ŝanĝojn al paĝoj ligitaj al la specifa paĝo anstataŭe.",
+ "recentchanges-page-added-to-category": "[[:$1]] kategorialdonita",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] kategorialdonita, [[Special:WhatLinksHere/$1|tiu paĝo estas inkluzivita ene de aliaj paĝoj]]",
+ "recentchanges-page-removed-from-category": "[[:$1]] kategoriforigita",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] kategoriforigita, [[Special:WhatLinksHere/$1|tiu paĝo estas inkluzivita ene de aliaj paĝoj]]",
+ "autochange-username": "Aŭtomata ŝanĝo de Mediavikio",
"upload": "Alŝuti dosieron",
"uploadbtn": "Alŝuti dosieron",
"reuploaddesc": "Reveni al la alŝuta formularo.",
"uploaddisabledtext": "Alŝutado de dosieroj estas malebligita.",
"php-uploaddisabledtext": "Dosiera alŝutado estas malŝalta en PHP. Bonvolu kontroli la preferon file_uploads.",
"uploadscripted": "HTML-aĵo aŭ skriptokodaĵo troviĝas en tiu ĉi tiu dosiero, kiun TTT-foliumilo eble interpretus erare.",
+ "upload-scripted-pi-callback": "Malalŝuteblas dosieron, kiu enhavas instrukcion de XML-stilfolia traktado",
+ "uploaded-script-svg": "Trovis skriptelbero \"$1\" en la alŝutita SVGa dosiero.",
+ "uploaded-hostile-svg": "Trovis malsekura CSS en la stilero de alŝutita SVGa dosiero.",
+ "uploaded-event-handler-on-svg": "Ensigni eventotraktilajn atributojn <code>$1=\"$2\"</code> estas malpermisita en SVGaj dosieroj.",
+ "uploaded-href-attribute-svg": "Atributoj je \"href\" en SVGaj dosieroj nur povas ligi al \"http://\" aŭ \"https://\" celoj, trovis <code><$1 $2=\"$3\"></code>.",
+ "uploaded-href-unsafe-target-svg": "Trovis je \"href\" ligita al malsekuraj datenoj: URIa celo <code><$1 $2=\"$3\"></code> en la alŝuta SVGa dosiero.",
+ "uploaded-animate-svg": "Trovis markon je \"animate\", kiu povus ŝanĝi la atributon je \"href\", per uzi la atributon je \"from\" <code><$1 $2=\"$3\"></code> en la alŝuta SVGa dosiero.",
+ "uploaded-setting-event-handler-svg": "Ensigni eventotraktilajn atributojn estas blokita, trovis <code><$1 $2=\"$3\"></code> en la alŝuta SVGa dosiero.",
+ "uploaded-setting-href-svg": "Uzi la markon je \"set\" por aldoni atributon je \"href\" al ujero estas blokita.",
"uploadscriptednamespace": "Ĉi tiu SVG-dosiero enhavas nevalidan nomspacon \"$1\"",
"uploadinvalidxml": "Ne eblas interpreti la XML-sintakson en la alŝutita dosiero",
"uploadvirus": "Viruso troviĝas en la dosiero! Detaloj: $1",
"uploadstash-badtoken": "Malsukcesis tiu ago, eble pro tio ke viaj ensalutiloj senvalidiĝis. Reprovu.",
"uploadstash-errclear": "Sensukcesis la forigo de la dosieroj.",
"uploadstash-refresh": "Aktualigi la dosierliston.",
+ "uploadstash-thumbnail": "Vidi bildetigon",
"invalid-chunk-offset": "Malvalida deŝovo de dosierpeco",
"img-auth-accessdenied": "Atingo malpermisita",
"img-auth-nopathinfo": "Mankas PATH_INFO (informo pri dosiervojo).\nVia servilo ne estas konfigurita por sendi ĉi tiun informon.\nEble ĝi estas CGI-bazita kaj ne subtenas img_auth.\nVidu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization (angle).",
"listfiles-latestversion-no": "Ne",
"file-anchor-link": "Dosiero",
"filehist": "Dosiera historio",
- "filehist-help": "Klaku daton/tempon por rigardi la dosieron kiel ĝin ŝajnitan tiame.",
+ "filehist-help": "Klaku daton/tempon por vidi la dosieron kiel ĝin ŝajnitan tiame.",
"filehist-deleteall": "forigi ĉiujn",
"filehist-deleteone": "forigi",
"filehist-revert": "restarigi",
"linkstoimage": "La {{PLURAL:$1|jena paĝo|jenaj paĝoj}} ligas al ĉi tiu dosiero:",
"linkstoimage-more": "Pli ol $1 {{PLURAL:$1|paĝo|paĝoj}} ligas ĉi tiun dosieron.\nLa jena listo montras la {{PLURAL:$1|unua paĝligilo|unuaj $1 paĝligiloj}} al nur ĉi tiu dosiero.\n[[Special:WhatLinksHere/$2|Plena listo]] estas atingebla.",
"nolinkstoimage": "Neniu paĝo ligas al ĉi tiu dosiero.",
- "morelinkstoimage": "Rigardi [[Special:WhatLinksHere/$1|pliajn ligilojn]] al ĉi tiu dosiero.",
+ "morelinkstoimage": "Vidi [[Special:WhatLinksHere/$1|pliajn ligilojn]] al ĉi tiu dosiero.",
"linkstoimage-redirect": "$1 (alidirektilo al dosiero) $2",
"duplicatesoffile": "La {{PLURAL:$1|jena dosiero estas duplikato|jenaj dosieroj estas duplikatoj}} de ĉi tiu dosiero ([[Special:FileDuplicateSearch/$2|pluaj detaloj]]):",
"sharedupload": "Ĉi tiu dosiero estas de $1 kaj estas uzebla de aliaj projektoj.",
"nopagetext": "La cela paĝo kiun vi enigis ne ekzistas.",
"pager-newer-n": "{{PLURAL:$1|pli nova 1|pli novaj $1}}",
"pager-older-n": "{{PLURAL:$1|pli malnova 1|pli malnovaj $1}}",
- "suppress": "Superrigardo",
+ "suppress": "Forigu",
"querypage-disabled": "Tiu ĉi speciala paĝo estas malfunkciigita pro rendimentaj kialoj.",
"apihelp": "Helpo pri API",
"apihelp-no-such-module": "Modulo \"$1\" ne estis trovita.",
"listgrouprights-namespaceprotection-header": "Nomspacaj restriktoj",
"listgrouprights-namespaceprotection-namespace": "Nomspaco",
"listgrouprights-namespaceprotection-restrictedto": "Rajtoj, kiuj permesas al uzanto redakti",
+ "listgrants": "Rajdonaro",
"trackingcategories": "Kategorioj por kontrolado",
"trackingcategories-summary": "Ĉi tiu paĝo listigas kategoriojn por kontrolado, aŭtomate farita de la Mediavikia programaro. Ties nomoj estas ŝanĝebla, ŝanĝante la paran sistemmesaĝon en la nomspaco {{ns:8}}.",
"trackingcategories-msg": "Kategorio pri kontrolado",
"deleteprotected": "Vi ne povas forigi ĉi tiun paĝon ĉar ĝi estis protektita.",
"deleting-backlinks-warning": "'''Atentigo:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Aliaj paĝoj]] ligas al aŭ transkludas tiun ĉi forigotan paĝon.",
"rollback": "Restarigi antaŭan redakton",
- "rollbacklink": "malfari",
+ "rollbacklink": "malvalidi",
"rollbacklinkcount": "nuligi $1 {{PLURAL:$1|redakton|redaktojn}}",
"rollbacklinkcount-morethan": "nuligi pli ol $1 {{PLURAL:$1|redakton|redaktojn}}",
"rollbackfailed": "Malfaro malsukcesis",
"tooltip-n-currentevents": "Trovi fonajn informojn pri nunaj eventoj",
"tooltip-n-recentchanges": "Listo de la lastaj ŝanĝoj en la vikio.",
"tooltip-n-randompage": "Iri al hazarda paĝo",
- "tooltip-n-help": "Serĉopaĝo.",
+ "tooltip-n-help": "La loko por eltrovi",
"tooltip-t-whatlinkshere": "Listo de ĉiuj vikiaj paĝoj kiuj ligas ĉi tien",
"tooltip-t-recentchangeslinked": "Lastaj ŝanĝoj en paĝoj kiuj ligas al tiu ĉi paĝo",
"tooltip-feed-rss": "RSS-fonto por tiu ĉi paĝo",
"tooltip-watchlistedit-raw-submit": "Ĝisdatigi atentaron",
"tooltip-recreate": "Rekrei la paĝon malgraŭ ĝi estis forigita",
"tooltip-upload": "Ekalŝuti",
- "tooltip-rollback": "\"Restarigi antaŭan\" restarigas redakto(j)n al ĉi tiu paĝo de la lasta kontribuanto per unu klako.",
+ "tooltip-rollback": "\"Malvalidi\" malfaras redakto(j)n al ĉi tiu paĝo de la lasta kontribuanto per unu klako.",
"tooltip-undo": "\"Malfari\" malfaris ĉi tiun redakton kaj malfermas la redakto-paĝon en antaŭvida reĝimo. Permesas aldoni kialon en la resumo.",
"tooltip-preferences-save": "Konservi preferojn",
"tooltip-summary": "Enigu mallongan resumon",
"watchlistedit-raw-done": "Via atentaro estas ĝisdatigita.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 titolo estis aldonita|$1 titoloj estis aldonitaj}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 titolo estis forigita|$1 titoloj estis forigitaj}}:",
- "watchlistedit-clear-title": "Malplenigita atentaro",
+ "watchlistedit-clear-title": "Malplenigi la atentaron",
"watchlistedit-clear-legend": "Malplenigi la atentaron",
"watchlistedit-clear-explain": "Ĉiuj el la titoloj estos forigitaj el via atentaro",
"watchlistedit-clear-titles": "Titoloj:",
"mw-widgets-dateinput-placeholder-day": "JJJJ-MM-TT",
"mw-widgets-dateinput-placeholder-month": "JJJJ-MM",
"api-error-blacklisted": "Bonvolu elekti alian, priskriban titolon.",
- "randomrootpage": "Hazarda radika paĝo"
+ "randomrootpage": "Hazarda radika paĝo",
+ "log-action-filter-all": "Ĉia",
+ "log-action-filter-protect-unprotect": "Malprotektado",
+ "log-action-filter-upload-upload": "Novalŝuta",
+ "log-action-filter-upload-overwrite": "Realŝuta"
}
"Mgpena",
"Transonlohk",
"Eloy",
- "Lemondoge"
+ "Lemondoge",
+ "Jdforrester"
]
},
"tog-underline": "Subrayar los enlaces:",
"minoredit": "Esta es una edición menor",
"watchthis": "Vigilar esta página",
"savearticle": "Guardar la página",
+ "publishpage": "Publicar la página",
"preview": "Previsualizar",
"showpreview": "Mostrar previsualización",
"showdiff": "Mostrar los cambios",
"userpage-userdoesnotexist": "El usuario «$1» no está registrado. Asegúrate de que realmente quieres crear o editar esta página.",
"userpage-userdoesnotexist-view": "El usuario «$1» no está registrado.",
"blocked-notice-logextract": "Este usuario se encuentra actualmente bloqueado.\nA continuación se muestra la última entrada del registro de bloqueos para más información:",
- "clearyourcache": "<strong>Nota:</strong> tras guardar, quizás necesites actualizar la caché de tu navegador para ver los cambios.\n* <strong>Firefox/Safari:</strong> Mantén presionada la tecla <em>Mayús</em> mientras pulsas el botón <em>Actualizar</em>, o presiona <em>Ctrl+F5</em> o <em>Ctrl+R</em> (<em>⌘+R</em> en Mac)\n* <strong>Google Chrome:</strong> presiona <em>Ctrl+Shift+R</em> (<em>⌘+Mayús+R</em> en Mac)\n* <strong>Internet Explorer:</strong> mantén presionada <em>Ctrl</em> mientras pulsas <em>Actualizar</em>, o presiona <em>Ctrl+F5</em>\n* <strong>Opera:</strong> vacía la caché en <em>Herramientas → Preferencias</em>",
+ "clearyourcache": "<strong>Nota:</strong> tras guardar, quizás necesites actualizar la caché de tu navegador para ver los cambios.\n* <strong>Firefox/Safari:</strong> Mantén presionada la tecla <em>Mayús</em> mientras pulsas el botón <em>Actualizar</em>, o presiona <em>Ctrl+F5</em> o <em>Ctrl+R</em> (<em>⌘+R</em> en Mac)\n* <strong>Google Chrome:</strong> presiona <em>Ctrl+Shift+R</em> (<em>⌘+Mayús+R</em> en Mac)\n* <strong>Internet Explorer:</strong> mantén presionada <em>Ctrl</em> mientras pulsas <em>Actualizar</em>, o presiona <em>Ctrl+F5</em>\n* <strong>Opera:</strong> dirígete a <em>Menú → Configuración</em> (<em>Opera → Preferencias</em> en Mac) y luego a <em>Privacidad y seguridad → Borrar datos de navegación → Imágenes y archivos en caché</em>.",
"usercssyoucanpreview": "<strong>Consejo:</strong> usa el botón «{{int:showpreview}}» para probar el nuevo CSS antes de guardarlo.",
"userjsyoucanpreview": "<strong>Consejo:</strong> usa el botón «{{int:showpreview}}» para probar el nuevo código JavaScript antes de guardarlo.",
"usercsspreview": "<strong>Recuerda que solo estás previsualizando tu CSS de usuario.\n¡Aún no se ha guardado!</strong>",
"tooltip-ca-nstab-category": "Ver la página de categoría",
"tooltip-minoredit": "Marcar este cambio como menor",
"tooltip-save": "Guardar los cambios",
+ "tooltip-publish": "Publicar tus cambios",
"tooltip-preview": "Previsualiza tus cambios. ¡Hazlo antes de grabar!",
"tooltip-diff": "Mostrar los cambios que has hecho en el texto.",
"tooltip-compareselectedversions": "Ver las diferencias entre las dos versiones seleccionadas de esta página.",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegió}} a $3 $4 [en cascada]",
"logentry-protect-modify": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4 [en cascada]",
- "logentry-rights-rights": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece {{GENDER:$3|$3}}: de $4 a $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece {{GENDER:$6|$3}}: de $4 a $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece $3",
"logentry-rights-autopromote": "$1 ha sido {{GENDER:$2|promocionado|promocionada}} automáticamente de $4 a $5",
"logentry-upload-upload": "$1 {{GENDER:$2|subió}} $3",
"tooltip-ca-nstab-category": "Kategoria orrialdea ikusi",
"tooltip-minoredit": "Markatu aldaketa hau txikitzat",
"tooltip-save": "Zure aldaketak gorde",
+ "tooltip-publish": "Argitaratu zure aldaketak",
"tooltip-preview": "Zure aldaketak aurreikusi, mesedez gorde aurretik erabili!",
"tooltip-diff": "Testuari egindako aldaketak erakutsi.",
"tooltip-compareselectedversions": "Ikusi orri honen bi bertsio hautatuen arteko aldeak.",
"noemail": "هیچ آدرس ایمیلی برای کاربر «$1» ثبت نشده است.",
"noemailcreate": "شما باید یک آدرس ایمیل درست فراهم کنید",
"passwordsent": "گذرواژهای جدید به آدرس ایمیل ثبت شده برای «$1» ارسال شد.\nلطفاً پس از دریافت آن، دوباره به سیستم وارد شوید.",
- "blocked-mailpassword": "نشانی آیپی شما از ویرایش بازداشته شدهاست و از این رو به منظور جلوگیری از سوءاستفاده اجازهٔ بهرهگیری از قابلیت بازیابی گذرواژه را ندارد.",
+ "blocked-mailpassword": "نشانی آیپی شما از ویرایش بازداشته شدهاست. به منظور جلوگیری از سوءاستفاده اجازهٔ بهرهگیری از قابلیت بازیابی گذرواژه از این آیپی را ندارد.",
"eauthentsent": "یک ایمیل تأیید برای آدرس ایمیل به نشانی مورد نظر ارسال شد.\nقبل از اینکه ایمیل دیگری قابل ارسال به این آدرس باشد، باید دستورهایی که در آن ایمیل آمده است را جهت تأیید این مساله که این آدرس متعلق به شماست، اجرا کنید.",
"throttled-mailpassword": "یک ایمیل بازنشانی گذرواژه در $1 {{PLURAL:$1|ساعت|ساعت}} گذشته فرستاده شده است.\nبرای جلوگیری از سوءاستفاده، هر $1 {{PLURAL:$1|ساعت|ساعت}} تنها یک ایمیل بازنشانی گذرواژه فرستاده میشود.",
"mailerror": "خطا در ارسال ایمیل: $1",
"watchlistedit-raw-done": "فهرست پیگیریهای شما به روز شد.",
"watchlistedit-raw-added": "$1 عنوان به فهرست پیگیریها اضافه {{PLURAL:$1|شد|شدند}}:",
"watchlistedit-raw-removed": "$1 عنوان حذف {{PLURAL:$1|شد|شدند}}:",
- "watchlistedit-clear-title": "Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8c پاکسازÛ\8câ\80\8cشدÙ\87",
+ "watchlistedit-clear-title": "پاکسازÛ\8c Ù\81Ù\87رست Ù¾Û\8cÚ¯Û\8cرÛ\8c",
"watchlistedit-clear-legend": "پاکسازی فهرست پیگیری",
"watchlistedit-clear-explain": "همه عناوین از فهرست پیگیریهای شما حذف خواهد شد",
"watchlistedit-clear-titles": "عنوانها:",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|suojasi}} kohteen $3 $4 [tarttuvasti]",
"logentry-protect-modify": "$1 {{GENDER:$2|muutti}} suojauksen tasoa kohteessa $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|muutti}} suojauksen tasoa kohteessa $3 $4 [tarttuvasti]",
- "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$3|$3}} oikeudet ryhmistä $4 ryhmiin $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$6|$3}} oikeudet ryhmistä $4 ryhmiin $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|muutti}} käyttäjän $3 jäsenyyttä ryhmässä",
"logentry-rights-autopromote": "Käyttäjän $1 oikeudet {{GENDER:$2|muuttuivat}} automaattisesti ryhmistä $4 ryhmiin $5",
"logentry-upload-upload": "$1 {{GENDER:$2|tallensi}} tiedoston $3",
"log-action-filter-block-reblock": "Estoasetusten muuttaminen",
"log-action-filter-block-unblock": "Eston poistaminen",
"log-action-filter-contentmodel-change": "Sisältömallin muuttaminen",
+ "log-action-filter-contentmodel-new": "Luotu sivu, jossa on poikkeava Sisältömalli",
"log-action-filter-delete-delete": "Sivun poistaminen",
"log-action-filter-delete-restore": "Sivun palauttaminen",
"log-action-filter-delete-event": "Lokimerkinnän poistaminen",
"C13m3n7",
"Gnangbade",
"Frigory",
- "Lemondoge"
+ "Lemondoge",
+ "Jdforrester"
]
},
"tog-underline": "Soulignement des liens :",
"tog-watchdeletion": "Ajouter à ma liste de suivi les pages et les fichiers que je supprime",
"tog-watchuploads": "Ajouter les nouveaux fichiers que j’importe à ma liste de suivi",
"tog-watchrollback": "Ajouter à ma liste de suivi les pages sur lesquelles j’ai effectué une révocation",
- "tog-minordefault": "Marquer mes modifications comme étant mineures par défaut",
+ "tog-minordefault": "Marquer toutes les modifications comme étant mineures par défaut",
"tog-previewontop": "Afficher la prévisualisation avant la zone d’édition",
"tog-previewonfirst": "Afficher la prévisualisation lors de la première modification",
"tog-enotifwatchlistpages": "M’avertir par courriel lorsqu’une page ou un fichier de ma liste de suivi est modifié",
"nocookiesfornew": "Le compte utilisateur n’a pas été créé, car nous n’avons pas pu identifier son origine.\nVérifiez que vous avez activé les cookies, rechargez la page et essayez à nouveau.",
"noname": "Vous n’avez pas saisi un nom d’utilisateur valide.",
"loginsuccesstitle": "Connecté",
- "loginsuccess": "Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».",
+ "loginsuccess": "<strong>Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».</strong>",
"nosuchuser": "L'utilisateur « $1 » n’existe pas.\nLes noms d’utilisateurs sont sensibles à la casse.\nVérifiez l’orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].",
"nosuchusershort": "Il n’y a pas de contributeur avec le nom « $1 ».\nVeuillez vérifier l’orthographe.",
"nouserspecified": "Vous devez saisir un nom d’utilisateur.",
"minoredit": "Modification mineure",
"watchthis": "Suivre cette page",
"savearticle": "Enregistrer",
+ "publishpage": "Publier la page",
"preview": "Prévisualisation",
"showpreview": "Prévisualiser",
"showdiff": "Voir les modifications",
"userpage-userdoesnotexist": "Le compte utilisateur « <nowiki>$1</nowiki> » n'est pas enregistré. Veuillez vérifier que vous voulez créer cette page.",
"userpage-userdoesnotexist-view": "Le compte utilisateur « $1 » n'est pas enregistré.",
"blocked-notice-logextract": "Cet utilisateur est actuellement bloqué.\nLa dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :",
- "clearyourcache": "'''Note :''' après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.\n* '''Firefox / Safari :''' Maintenez la touche ''Maj'' (''Shift'') en cliquant sur le bouton ''Actualiser'' ou pressez ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' sur un Mac) ;\n* '''Google Chrome :''' Appuyez sur ''Ctrl-Maj-R'' (''⌘-Shift-R'' sur un Mac) ;\n* '''Internet Explorer :''' Maintenez la touche ''Ctrl'' en cliquant sur le bouton ''Actualiser'' ou pressez ''Ctrl-F5'' ;\n* '''Opera :''' Videz le cache dans ''Outils → Préférences''.",
+ "clearyourcache": "<strong>Note :</strong> après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.\n* <strong>Firefox / Safari :</strong> Maintenez la touche <em>Maj</em> (<em>Shift</em>) en cliquant sur le bouton <em>Actualiser</em> ou pressez <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> sur un Mac) ;\n* <strong>Google Chrome :</strong> Appuyez sur <em>Ctrl-Maj-R</em> (<em>⌘-Shift-R</em> sur un Mac) ;\n* <strong>Internet Explorer :</strong> Maintenez la touche <em>Ctrl</em> en cliquant sur le bouton <em>Actualiser</em> ou pressez <em>Ctrl-F5</em> ;\n* <strong>Opera :</strong> Allez dans <em>Menu → Settings</em> (<em>Opera → Préférences</em> sur un Mac) et ensuite à <em>Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache</em>.",
"usercssyoucanpreview": "'''Astuce :''' utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille CSS avant de l'enregistrer.",
"userjsyoucanpreview": "'''Astuce :''' utilisez le bouton « {{int:showpreview}} » pour tester votre nouvelle feuille JavaScript avant de l'enregistrer.",
"usercsspreview": "'''Rappelez-vous que vous n'êtes qu'en train de prévisualiser votre propre feuille CSS.'''\n'''Elle n'a pas encore été enregistrée !'''",
"tooltip-ca-nstab-category": "Voir la page de la catégorie",
"tooltip-minoredit": "Marquer mes modifications comme mineures",
"tooltip-save": "Enregistrer vos modifications",
+ "tooltip-publish": "Publier vos modifications",
"tooltip-preview": "Merci de prévisualiser vos modifications avant de les publier",
"tooltip-diff": "Affiche les modifications que vous avez apportées au texte",
"tooltip-compareselectedversions": "Afficher les différences entre deux versions de cette page",
"anonusers": "{{PLURAL:$2|l'utilisateur anonyme|les utilisateurs anonymes}} $1 de {{SITENAME}}",
"creditspage": "Crédits de la page",
"nocredits": "Il n'y a pas d'informations d'attribution disponibles pour cette page.",
- "spamprotectiontitle": "Filtre de protection anti-pollution",
- "spamprotectiontext": "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pollution. Ceci est probablement dû à l'introduction d'un lien vers un site externe apparaissant sur la liste noire.",
- "spamprotectionmatch": "La chaîne de caractères « '''$1''' » a déclenché le détecteur de pollution.",
+ "spamprotectiontitle": "Filtre de protection anti-pollupostage",
+ "spamprotectiontext": "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-spam. Ceci est probablement dû à l'introduction d'un lien vers un site externe apparaissant sur la liste noire.",
+ "spamprotectionmatch": "Le texte suivant a déclenché notre filtre de protection anti-pollupostage : $1",
"spambot_username": "Nettoyage de pourriels par MediaWiki",
"spam_reverting": "Rétablissement de la dernière version ne contenant pas de lien vers $1",
"spam_blanking": "Toutes les versions contenant des liens vers $1 sont blanchies",
"specialpages-group-pagetools": "Outils pour les pages",
"specialpages-group-wiki": "Données et outils",
"specialpages-group-redirects": "Pages spéciales redirigées",
- "specialpages-group-spam": "Outils anti-pourriel",
+ "specialpages-group-spam": "Outils anti-spam",
"specialpages-group-developer": "Outils du développeur",
"blankpage": "Page vide",
"intentionallyblankpage": "Cette page est laissée intentionnellement (presque) vide.",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|a protégé}} $3 $4 [protection en cascade]",
"logentry-protect-modify": "$1 {{GENDER:$2|a modifié}} le niveau de protection de $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|a modifié}} le niveau de protection de $3 $4 [protection en cascade]",
- "logentry-rights-rights": "$1 a modifié l’appartenance au groupe pour $3 de $4 à $5",
+ "logentry-rights-rights": "$1 a modifié l’appartenance au groupe pour {{GENDER:$6|$3}} de $4 à $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modifié}} l'appartenance au groupe pour $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|a été promu}} automatiquement de $4 à $5",
"logentry-upload-upload": "$1 {{GENDER:$2|a téléchargé}} $3",
"minoredit": "O est un petiôt changement",
"watchthis": "Siuvre cela pâge",
"savearticle": "Encartar la pâge",
+ "publishpage": "Publeyér la pâge",
"preview": "Apèrçu",
"showpreview": "Montrar un apèrçu",
"showdiff": "Montrar los changements",
"userpage-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.\nSe vos plét, controlâd se vos voléd fâre changiér cela pâge.",
"userpage-userdoesnotexist-view": "Lo comptio utilisator « $1 » est pas encartâ.",
"blocked-notice-logextract": "Ora {{GENDER:$1|cél utilisator|cel’utilisatrice}} est blocâ{{GENDER:$1||ye}}.\nLa dèrriére entrâ du jornâl des blocâjos est balyêe ce-desot coment rèference :",
- "clearyourcache": "<strong>Nota :</strong> aprés avêr encartâ, sè pôt que vos deveyéd forciér lo rechargement complèt du cacho de voutron navegator por vêre los changements.\n* <strong>Firefox / Safari :</strong> mantegnéd la toche <em>Granta Lètra</em> (<em>Shift</em>) en clliquent dessus <em>Rechargiér</em> (<em>Reload</em>) ou ben apoyéd dessus <em>Ctrl-F5</em> <em>Ctrl-R</em> (<em>⌘-R</em> sur un Mac)\n* <strong>Google Chrome :</strong> apoyéd dessus <em>Ctrl-Shift-R</em> (''⌘-Shift-R</em> sur un Mac)\n* <strong>Internet Explorer :</strong> mantegnéd la toche <em>Ctrl</em> en clliquent dessus <em>Rafrèchir</em> (<em>Refresh</em>) ou ben apoyéd dessus <em>Ctrl-F5</em>\n* <strong>Opera :</strong> vouedâd lo cacho dedens <em>Outils → Prèferences</em>",
+ "clearyourcache": "<strong>Nota :</strong> aprés avêr encartâ, sè pôt que vos deveyéd forciér lo rechargement complèt du cacho de voutron navegator por vêre los changements.\n* <strong>Firefox / Safari :</strong> mantegnéd la toche <em>Granta Lètra</em> (<em>Shift</em>) en clliquent dessus <em>Rechargiér</em> (<em>Reload</em>) ou ben apoyéd dessus <em>Ctrl-F5</em> <em>Ctrl-R</em> (<em>⌘-R</em> sur un Mac)\n* <strong>Google Chrome :</strong> apoyéd dessus <em>Ctrl-Shift-R</em> (''⌘-Shift-R</em> sur un Mac)\n* <strong>Internet Explorer :</strong> mantegnéd la toche <em>Ctrl</em> en clliquent dessus <em>Rafrèchir</em> (<em>Refresh</em>) ou ben apoyéd dessus <em>Ctrl-F5</em>\n* <strong>Opera :<strong> alâd dedens <em>Menu → Settings</em> (<em>Opera → Prèferences</em> sur un Mac) et pués a <em>Confidencialitât & sècuritât → Vouedar les balyês d’èxploracion → Émâges et fichiérs en cacho</em>.",
"usercssyoucanpreview": "<strong>Combina :</strong> empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que l’encartar.",
"userjsyoucanpreview": "<strong>Combina :</strong> empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JavaScript novèla devant que l’encartar.",
"usercsspreview": "<strong>Rapelâd-vos que vos éte ren qu’aprés prèvêre voutra fôlye CSS.\nEl est p’oncor étâye encartâye !</strong>",
"tooltip-ca-nstab-category": "Vêre la pâge de la catègoria",
"tooltip-minoredit": "Marcar mos changements coment petiôts",
"tooltip-save": "Encartar voutros changements",
+ "tooltip-publish": "Publeyér voutros changements",
"tooltip-preview": "Prèvêde voutros changements. Se vos plét, empleyéd-lo devant qu’encartar.",
"tooltip-diff": "Montrar los changements que vos éd aportâs u tèxto",
"tooltip-compareselectedversions": "Fâre ressortir les difèrences entre les doves vèrsions chouèsies de cela pâge",
"exif-meteringmode-0": "Encognua",
"exif-meteringmode-1": "Moyena",
"exif-meteringmode-2": "Moyena d’aplomb u centro",
- "exif-meteringmode-3": "Pouent",
- "exif-meteringmode-4": "MultiPouent",
+ "exif-meteringmode-3": "Spote",
+ "exif-meteringmode-4": "Multi-spote",
"exif-meteringmode-5": "Modèlo",
- "exif-meteringmode-6": "Encomplèta",
+ "exif-meteringmode-6": "Parciâla",
"exif-meteringmode-255": "Ôtra",
"exif-lightsource-0": "Encognua",
"exif-lightsource-1": "Lumiére du jorn",
"exif-lightsource-2": "Fluorèscenta",
- "exif-lightsource-3": "Tungstène (lumiére chôdâ a blanc)",
+ "exif-lightsource-3": "Tungstène (lumiére enfarâye)",
"exif-lightsource-4": "Èludo",
"exif-lightsource-9": "Temps cllâr",
"exif-lightsource-10": "Temps enneblo",
"exif-lightsource-11": "Ombra",
- "exif-lightsource-12": "Lumiére fluorèscenta « lumiére du jorn » (D 5700 – 7100 K)",
- "exif-lightsource-13": "Lumiére fluorèscenta blanche « jorn » (N 4600 – 5400 K)",
- "exif-lightsource-14": "Lumiére fluorèscenta blanche « frêd » (W 3900 – 4500 K)",
- "exif-lightsource-15": "Lumiére fluorèscenta blanche (WW 3200 – 3700 K)",
- "exif-lightsource-17": "Lumiére estandârd A",
- "exif-lightsource-18": "Lumiére estandârd B",
- "exif-lightsource-19": "Lumiére estandârd C",
+ "exif-lightsource-12": "Ècllèrâjo fluorèscent « lumiére du jorn » (D 5700 – 7100 K)",
+ "exif-lightsource-13": "Ècllèrâjo fluorèscent blanc « jorn » (N 4600 – 5400 K)",
+ "exif-lightsource-14": "Ècllèrâjo fluorèscent blanc « frêd » (W 3900 – 4500 K)",
+ "exif-lightsource-15": "Ècllèrâjo fluorèscent blanc (WW 3200 – 3700 K)",
+ "exif-lightsource-17": "Lumiére standârd A",
+ "exif-lightsource-18": "Lumiére standârd B",
+ "exif-lightsource-19": "Lumiére standârd C",
"exif-lightsource-24": "Tungstène ISO de studiô",
"exif-lightsource-255": "Ôtra sôrsa de lumiére",
"exif-flash-fired-0": "Èludo pas dècllenchiê",
"exif-flash-fired-1": "Èludo dècllenchiê",
- "exif-flash-return-0": "nion stroboscopo retorne una fonccion de dètèccion",
- "exif-flash-return-2": "lo stroboscopo retorne una lumiére pas dècelâ",
- "exif-flash-return-3": "lo stroboscopo retorne una lumiére dècelâ",
+ "exif-flash-return-0": "nion stroboscopo retôrne na fonccion de dècelâjo",
+ "exif-flash-return-2": "lo stroboscopo dècèle gins de lumiére retornâye",
+ "exif-flash-return-3": "lo stroboscopo dècèle un retôrn de lumiére",
"exif-flash-mode-1": "lumiére de l’èludo oblegatouèra",
"exif-flash-mode-2": "suprèssion de l’èludo oblegatouèra",
"exif-flash-mode-3": "fôrma ôtomatica",
- "exif-flash-function-1": "Gins de fonccion d’èludo",
+ "exif-flash-function-1": "Niona fonccion d’èludo",
"exif-flash-redeye-1": "fôrma anti-uelys rojos",
"exif-focalplaneresolutionunit-2": "pôjos",
"exif-sensingmethod-1": "Pas dèfeni",
- "exif-sensingmethod-2": "Captior de color a yona puge",
+ "exif-sensingmethod-2": "Captior de color a na puge",
"exif-sensingmethod-3": "Captior de color a doves puges",
"exif-sensingmethod-4": "Captior de color a três puges",
"exif-sensingmethod-5": "Captior de color sèquencièl",
"exif-sensingmethod-7": "Captior trilinèâr",
"exif-sensingmethod-8": "Captior de color linèâr sèquencièl",
"exif-filesource-3": "Aparèly-fotô numerico",
- "exif-scenetype-1": "Émâge fotografiâ tot drêt",
- "exif-customrendered-0": "Maniére normala",
- "exif-customrendered-1": "Maniére pèrsonalisâ",
+ "exif-scenetype-1": "Émâge fotografiâye tot drêt",
+ "exif-customrendered-0": "Pratica normala",
+ "exif-customrendered-1": "Pratica pèrsonalisâye",
"exif-exposuremode-0": "Èxposicion ôtomatica",
- "exif-exposuremode-1": "Ã\88xposicion manuèla",
+ "exif-exposuremode-1": "Ã\88xposicion manuâla",
"exif-exposuremode-2": "Forchèta ôtomatica",
"exif-whitebalance-0": "Balance des blancs ôtomatica",
- "exif-whitebalance-1": "Balance des blancs manuèla",
- "exif-scenecapturetype-0": "Estandârd",
+ "exif-whitebalance-1": "Balance des blancs manuâla",
+ "exif-scenecapturetype-0": "Standârd",
"exif-scenecapturetype-1": "Payisâjo",
"exif-scenecapturetype-2": "Portrèt",
"exif-scenecapturetype-3": "Scèna de nuet",
"exif-gaincontrol-0": "Nion",
- "exif-gaincontrol-1": "Guen fêblament positif",
- "exif-gaincontrol-2": "Guen fôrtament positif",
- "exif-gaincontrol-3": "Guen fêblament nègatif",
- "exif-gaincontrol-4": "Guen fôrtament nègatif",
+ "exif-gaincontrol-1": "Fêblo guen positif",
+ "exif-gaincontrol-2": "Fôrt guen positif",
+ "exif-gaincontrol-3": "Fêblo guen nègatif",
+ "exif-gaincontrol-4": "Fôrt guen nègatif",
"exif-contrast-0": "Normal",
"exif-contrast-1": "Fêblo",
"exif-contrast-2": "Fôrt",
"exif-saturation-0": "Normala",
- "exif-saturation-1": "Saturacion fêbla",
+ "exif-saturation-1": "Saturacion bâssa",
"exif-saturation-2": "Saturacion hôta",
"exif-sharpness-0": "Normala",
"exif-sharpness-1": "Doce",
"exif-subjectdistancerange-1": "Vision en grôs",
"exif-subjectdistancerange-2": "Vision de prés",
"exif-subjectdistancerange-3": "Vision de luen",
- "exif-gpslatitude-n": "Latituda bise (''nord'')",
- "exif-gpslatitude-s": "Latituda mié-jorn (''sud'')",
- "exif-gpslongitude-e": "Longituda levant (''èst'')",
- "exif-gpslongitude-w": "Longituda ponant (''ouèst'')",
- "exif-gpsaltitude-above-sealevel": "$1 mètre{{PLURAL:$1||s}} en-d’amont du nivél de la mar",
- "exif-gpsaltitude-below-sealevel": "$1 mètre{{PLURAL:$1||s}} en-desot du nivél de la mar",
+ "exif-gpslatitude-n": "Latituda bise (<em>nord</em>)",
+ "exif-gpslatitude-s": "Latituda mié-jorn (<em>sud</em>)",
+ "exif-gpslongitude-e": "Longituda levant (<em>èste</em>)",
+ "exif-gpslongitude-w": "Longituda cuchient (<em>ouèste</em>)",
+ "exif-gpsaltitude-above-sealevel": "$1 mètro{{PLURAL:$1||s}} d’amont lo nivél de la mar",
+ "exif-gpsaltitude-below-sealevel": "$1 mètro{{PLURAL:$1||s}} desot lo nivél de la mar",
"exif-gpsstatus-a": "Mesera en cors",
- "exif-gpsstatus-v": "Entèropèrabilitât de la mesera",
+ "exif-gpsstatus-v": "Entèrfonccionement de la mesera",
"exif-gpsmeasuremode-2": "Mesera a 2 dimensions",
"exif-gpsmeasuremode-3": "Mesera a 3 dimensions",
- "exif-gpsspeed-k": "Kilomètres per hora",
- "exif-gpsspeed-m": "Miles per hora",
+ "exif-gpsspeed-k": "Kilomètros a l’hora",
+ "exif-gpsspeed-m": "Milos a l’hora",
"exif-gpsspeed-n": "Nuods",
- "exif-gpsdestdistance-k": "Kilomètres",
- "exif-gpsdestdistance-m": "Miles",
- "exif-gpsdestdistance-n": "Miles marins",
+ "exif-gpsdestdistance-k": "Kilomètros",
+ "exif-gpsdestdistance-m": "Milos",
+ "exif-gpsdestdistance-n": "Milos navâls",
"exif-gpsdop-excellent": "Famosa ($1)",
"exif-gpsdop-good": "Bôna ($1)",
"exif-gpsdop-moderate": "Moyena ($1)",
- "exif-gpsdop-fair": "Passâbla ($1)",
+ "exif-gpsdop-fair": "Tot justo bôna ($1)",
"exif-gpsdop-poor": "Crouye ($1)",
- "exif-objectcycle-a": "Matin solament",
- "exif-objectcycle-p": "Nuet solament",
+ "exif-objectcycle-a": "Ren qu’u matin",
+ "exif-objectcycle-p": "Ren qu’a nuet",
"exif-objectcycle-b": "Matin et nuet",
- "exif-gpsdirection-t": "Veré dirèccion",
- "exif-gpsdirection-m": "Dirèccion magnètica",
+ "exif-gpsdirection-t": "Veretâbla bise (<em>nord</em>)",
+ "exif-gpsdirection-m": "Bise (<em>nord</em>) magnètica",
"exif-ycbcrpositioning-1": "Centrâ",
- "exif-ycbcrpositioning-2": "Co-situâ",
+ "exif-ycbcrpositioning-2": "Co-placiê",
"exif-dc-contributor": "Contributors",
- "exif-dc-coverage": "Portâ espaciâla ou ben temporèla du mèdia",
+ "exif-dc-coverage": "Portâ spaciâla ou ben temporâla du mèdiâ",
"exif-dc-date": "Dâta(/-es)",
"exif-dc-publisher": "Èditor",
- "exif-dc-relation": "Mèdias liyês",
+ "exif-dc-relation": "Mèdiâs liyês",
"exif-dc-rights": "Drêts",
- "exif-dc-source": "Mèdia sôrsa",
- "exif-dc-type": "Tipo de mèdia",
+ "exif-dc-source": "Mèdiâ sôrsa",
+ "exif-dc-type": "Tipo de mèdiâ",
"exif-rating-rejected": "Refusâ",
"exif-isospeedratings-overflow": "Ples grant que 65535",
- "exif-iimcategory-ace": "Ârts, cultura et amusament",
+ "exif-iimcategory-ace": "Ârts, cultura et spèctâcllos",
"exif-iimcategory-clj": "Crimo et drêt",
"exif-iimcategory-dis": "Catastrofes et accidents",
"exif-iimcategory-fin": "Èconomia et afâres",
"exif-iimcategory-edu": "Èducacion",
"exif-iimcategory-evn": "Enveronance",
"exif-iimcategory-hth": "Santât",
- "exif-iimcategory-hum": "Entèrèt de l’homo",
+ "exif-iimcategory-hum": "Entèrèt d’homo",
"exif-iimcategory-lab": "Travâly",
"exif-iimcategory-lif": "Fôrma de via et pâssa-temps",
"exif-iimcategory-pol": "Politica",
"exif-iimcategory-rel": "Religion et creyences",
- "exif-iimcategory-sci": "Science et tècnolog·ie",
+ "exif-iimcategory-sci": "Science et tècnologia",
"exif-iimcategory-soi": "Quèstions sociâles",
"exif-iimcategory-spo": "Sports",
- "exif-iimcategory-war": "Guèrra, conflit et troblo",
- "exif-iimcategory-wea": "Mètèô",
+ "exif-iimcategory-war": "Guèrra, disputa et troblo",
+ "exif-iimcategory-wea": "Temps",
"exif-urgency-normal": "Normala ($1)",
- "exif-urgency-low": "Fêbla ($1)",
+ "exif-urgency-low": "Bâssa ($1)",
"exif-urgency-high": "Hôta ($1)",
- "exif-urgency-other": "Prioritât dèfenia per l’usanciér ($1)",
+ "exif-urgency-other": "Prioritât dèfenia per l’utilisator ($1)",
"namespacesall": "Tôs",
"monthsall": "tôs",
"confirmemail": "Confirmar l’adrèce èlèctronica",
- "confirmemail_noemail": "Vos éd pas dèfeni una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]].",
- "confirmemail_text": "{{SITENAME}} at fôta du contrôlo de voutra adrèce èlèctronica devant que povêr utilisar tota fonccion de mèssageria.\nUtilisâd lo boton ce-desot por mandar un mèssâjo de confirmacion a voutra adrèce.\nLo mèssâjo encllurat un lim que contint un code a usâjo solèt et limitâ dens lo temps ;\nchargiéd cél lim dens voutron navigator por confirmar que voutra adrèce èlèctronica est valida.",
- "confirmemail_pending": "Un code de confirmacion vos at ja étâ mandâ per mèssageria èlèctronica ;\nse vos vegnéd de fâre voutron compto, volyéd atendre doux-três menutes que lo mèssâjo arreve devant que demandar un code novél.",
+ "confirmemail_noemail": "Vos éd pas dèfeni un’adrèce èlèctronica justa dens voutres [[Special:Preferences|prèferences]].",
+ "confirmemail_text": "{{SITENAME}} at fôta du contrôlo de voutron adrèce èlèctronica devant que povêr empleyér tota fonccionalitât de mèssageria èlèctronica.\nEmpleyéd lo boton ce-desot por mandar un mèssâjo de confirmacion a voutron adrèce.\nLo mèssâjo rapondrat un lim que contint un code ;\nchargiéd cél lim dedens voutron navegator por confirmar que voutron adrèce èlèctronica est justa.",
+ "confirmemail_pending": "Un code de confirmacion vos est ja étâ mandâ per mèssageria èlèctronica ;\nse vos vegnéd de fâre voutron comptio, se vos plét atende-vos doux-três menutes que lo mèssâjo arreve devant que demandar un code novél.",
"confirmemail_send": "Mandar un code de confirmacion",
"confirmemail_sent": "Mèssâjo de confirmacion mandâ.",
- "confirmemail_oncreate": "Un code de confirmacion at étâ mandâ a voutra adrèce èlèctronica.\nCél code est pas nècèssèro por sè branchiér, mas vos lo devréd balyér por activar tota fonccionalitât liyê a la mèssageria èlèctronica sur ceti vouiqui.",
- "confirmemail_sendfailed": "{{SITENAME}} vos at pas possu mandar lo mèssâjo de confirmacion.\nVolyéd controlar que voutra adrèce èlèctronica contint gins de caractèro dèfendu.\n\nLo programo d’èxpèdicion de mèssâjo at retornâ ceta endicacion : $1",
- "confirmemail_invalid": "Code de confirmacion fôx.\nCeti at pôt-étre èxpirâ.",
- "confirmemail_needlogin": "Vos vos dête $1 por confirmar voutra adrèce èlèctronica.",
- "confirmemail_success": "Voutra adrèce èlèctronica at étâ confirmâ.\nOra, vos vos pouede [[Special:UserLogin|branchiér]] et profitar du vouiqui.",
- "confirmemail_loggedin": "Ora, voutra adrèce èlèctronica est confirmâ.",
+ "confirmemail_oncreate": "Un code de confirmacion est étâ mandâ a voutron adrèce èlèctronica.\nCél code est pas nècèssèro por sè branchiér, mas vos lo devréd balyér por activar tota fonccionalitât de mèssageria èlèctronica sur cél vouiqui.",
+ "confirmemail_sendfailed": "{{SITENAME}} vos at pas possu mandar lo mèssâjo de confirmacion.\nSe vos plét, controlâd que voutron adrèce èlèctronica contint gins de caractèro pas justo.\n\nLo programo d’èxpèdicion de mèssâjo at retornâ cen : $1",
+ "confirmemail_invalid": "Code de confirmacion pas justo.\nPôt-étre ceti at èxpirâ.",
+ "confirmemail_needlogin": "Vos vos dête $1 por confirmar voutron adrèce èlèctronica.",
+ "confirmemail_success": "Voutron adrèce èlèctronica est étâye confirmâye.\nOra vos vos pouede [[Special:UserLogin|branchiér]] et pués profitar du vouiqui.",
+ "confirmemail_loggedin": "Ora voutron adrèce èlèctronica est confirmâye.",
"confirmemail_subject": "Confirmacion d’adrèce èlèctronica por {{SITENAME}}",
- "confirmemail_body": "Quârqu’un, probâblament vos, avouéc l’adrèce IP $1,\nat encartâ un compto « $2 » avouéc cela adrèce èlèctronica dessus {{SITENAME}}.\n\nPor confirmar que cél compto est franc a vos et por\nactivar les fonccions de mèssageria dessus {{SITENAME}},\nvolyéd uvrir ceti lim dens voutron navigator :\n\n$3\n\nSe vos éd *pas* encartâ lo compto, siude ceti lim\npor anular la confirmacion de l’adrèce èlèctronica :\n\n$5\n\nCél code de confirmacion èxpirerat lo $4.",
- "confirmemail_body_changed": "Quârqu’un, probâblament vos, avouéc l’adrèce IP $1,\nat changiê l’adrèce èlèctronica du compto « $2 » a cela adrèce dessus {{SITENAME}}.\n\nPor confirmar que cél compto est franc a vos et por\nreactivar les fonccions de mèssageria dessus {{SITENAME}},\nvolyéd uvrir ceti lim dens voutron navigator :\n\n$3\n\nSe lo compto est *pas* a vos, siude ceti lim\npor anular la confirmacion de l’adrèce èlèctronica :\n\n$5\n\nCél code de confirmacion èxpirerat lo $4.",
- "confirmemail_body_set": "Quârqu’un, probâblament vos, avouéc l’adrèce IP $1,\nat changiê l’adrèce èlèctronica du compto « $2 » a cela adrèce dessus {{SITENAME}}.\n\nPor confirmar que cél compto est franc a vos et por\nreactivar les fonccions de mèssageria dessus {{SITENAME}},\nvolyéd uvrir ceti lim dens voutron navigator :\n\n$3\n\nSe lo compto est *pas* a vos, siude ceti lim\npor anular la confirmacion de l’adrèce èlèctronica :\n\n$5\n\nCél code de confirmacion èxpirerat lo $4.",
- "confirmemail_invalidated": "Confirmacion de l’adrèce èlèctronica anulâ",
+ "confirmemail_body": "Yon, de sûr vos, avouéc l’adrèce IP $1,\nat encartâ un comptio « $2 » avouéc cel’adrèce èlèctronica dessus {{SITENAME}}.\n\nPor confirmar que cél comptio est franc a vos et por activar\nles fonccionalitâts de mèssageria èlèctronica dessus {{SITENAME}},\nse vos plét uvréd cél lim dedens voutron navegator :\n\n$3\n\nSe vos éd *pas* encartâ lo comptio, siude l’ôtro lim\npor anular la confirmacion de l’adrèce èlèctronica :\n\n$5\n\nCél code de confirmacion èxpirerat lo $4.",
+ "confirmemail_body_changed": "Yon, de sûr vos, avouéc l’adrèce IP $1,\nat changiê l’adrèce èlèctronica du comptio « $2 » dessus {{SITENAME}} en cel’adrèce.\n\nPor confirmar que cél comptio est franc a vos et por reactivar\nles fonccionalitâts de mèssageria èlèctronica dessus {{SITENAME}},\nse vos plét uvréd cél lim dedens voutron navegator :\n\n$3\n\nSe lo compto est *pas* a vos, siude l’ôtro lim\npor anular la confirmacion de l’adrèce èlèctronica :\n\n$5\n\nCél code de confirmacion èxpirerat lo $4.",
+ "confirmemail_body_set": "Yon, de sûr vos, avouéc l’adrèce IP $1,\nat dèfeni l’adrèce èlèctronica du comptio « $2 » dessus {{SITENAME}} en cel’adrèce.\n\nPor confirmar que cél comptio est franc a vos et por activar\nles fonccionalitâts de mèssageria èlèctronica dessus {{SITENAME}},\nse vos plét uvréd cél lim dedens voutron navegator :\n\n$3\n\nSe lo compto est *pas* a vos, siude l’ôtro lim\npor anular la confirmacion de l’adrèce èlèctronica :\n\n$5\n\nCél code de confirmacion èxpirerat lo $4.",
+ "confirmemail_invalidated": "Confirmacion de l’adrèce èlèctronica anulâye",
"invalidateemail": "Anular la confirmacion de l’adrèce èlèctronica",
- "scarytranscludedisabled": "[La transcllusion entèrvouiqui est dèsactivâ]",
- "scarytranscludefailed": "[La rècupèracion de modèlo at pas reussia por $1]",
+ "notificationemail_subject_changed": "L’adrèce èlèctronica encartâye dessus {{SITENAME}} est étâye changiêe",
+ "notificationemail_subject_removed": "L’adrèce èlèctronica encartâye dessus {{SITENAME}} est étâye enlevâye",
+ "notificationemail_body_changed": "Yon, de sûr vos, avouéc l’adrèce IP $1,\nat changiê l’adrèce èlèctronica du comptio « $2 » dessus {{SITENAME}} en « $3 ».\n\nS’o ére pas vos, veriéd-vos d’abôrd vers un administrator du seto.",
+ "notificationemail_body_removed": "Yon, de sûr vos, avouéc l’adrèce IP $1,\nat enlevâ l’adrèce èlèctronica du comptio « $2 » dessus {{SITENAME}}.\n\nS’o ére pas vos, veriéd-vos d’abôrd vers un administrator du seto.",
+ "scarytranscludedisabled": "[La transcllusion entèrvouiqui est dèsactivâye]",
+ "scarytranscludefailed": "[La rècupèracion de modèlo at pas reussi por $1]",
+ "scarytranscludefailed-httpstatus": "[La rècupèracion de modèlo at pas reussi por $1 : HTTP $2]",
"scarytranscludetoolong": "[L’URL est trop longe]",
- "deletedwhileediting": "'''Atencion :''' ceta pâge at étâ suprimâ aprés que vos vos éte betâ a la changiér !",
- "confirmrecreate": "L’usanciér [[User:$1|$1]] ([[User talk:$1|Discussion]]) at suprimâ ceta pâge, pendent que vos vos érâd betâ a la changiér, por ceta rêson :\n: ''$2''\nVolyéd confirmar que vos voléd franc refâre cela pâge.",
- "confirmrecreate-noreason": "L’usanciér [[User:$1|$1]] ([[User talk:$1|Discussion]]) at suprimâ ceta pâge, pendent que vos vos érâd betâ a la changiér. Volyéd confirmar que vos voléd franc refâre cela pâge.",
+ "deletedwhileediting": "<strong>Atencion :</strong> cela pâge est étâye suprimâye aprés que vos vos éte betâ a la changiér !",
+ "confirmrecreate": "L’utilisat{{GENDER:$1|or|rice}} [[User:$1|$1]] ([[User talk:$1|Discussion]]) at suprimâ cela pâge, pendent que vos vos érâd betâ a la changiér, por cela rêson-que :\n: <em>$2</em>\nSe vos plét, confirmâd que vos voléd franc refâre cela pâge.",
+ "confirmrecreate-noreason": "L’utilisat{{GENDER:$1|or|rice}} [[User:$1|$1]] ([[User talk:$1|Discussion]]) at suprimâ cela pâge, pendent que vos vos érâd betâ a la changiér. Se vos plét, confirmâd que vos voléd franc refâre cela pâge.",
"recreate": "Refâre",
"confirm_purge_button": "Confirmar",
"confirm-purge-top": "Voléd-vos purgiér lo cache de ceta pâge ?",
"morenotlisted": "Chan eil an liosta seo iomlan.",
"mypage": "Duilleag",
"mytalk": "Deasbaireachd",
- "anontalk": "Deasbaireachd airson an IP seo",
+ "anontalk": "Deasbaireachd",
"navigation": "Seòladh",
"and": " agus",
"qbfind": "Lorg",
"laggedslavemode": "<strong>Rabhadh:</strong> Faodaidh nach eil ùrachaidhean a rinneadh o chionn ghoirid a' nochdadh san duilleag.",
"readonly": "Stòr-dàta glaiste",
"enterlockreason": "Cuir a-steach adhbhar a' ghlais, a' gabhail a-steach tuairmeas air fuasgladh a' ghlais.",
- "readonlytext": "Tha an stòr-dàta glaiste do chlàir ùra 's mùthaidhean eile, ma dh'fhaoidte air sgàth obair-chàraidh chunbhalach an stòir-dhàta 's bidh e mar as àbhaist às dèidh sin.\n\nChuir an rianadair a ghlas e an cèill na leanas: $1",
+ "readonlytext": "Tha an stòr-dàta glaiste do chlàir ùra ’s mùthaidhean eile, ma dh’fhaoidte air sgàth obair-chàraidh chunbhalach an stòir-dhàta ’s bidh e mar as àbhaist às dèidh sin.\n\nThuirt rianadair an t-siostaim a ghlas e na leanas: $1",
"missing-article": "Cha do lorg an stòr-dàta teacsa de dhuilleag a bu chòir a bhith air a lorg aige 's air a bheil \"$1\" $2.\n\n'S e diofar no ceangal eachdraidheil ro shean ri duilleag a chaidh a sguabadh às a bhios coireach à seo mar is trice.\n\nMur eil seo fìor, faodaidh gun do lorg thu buga sa bhathar-bhog.\nAn dèan thu aithris air seo do [[Special:ListUsers/sysop|rianadair]], ag innse dhaibh dè an t-URL a bha ann.",
"missingarticle-rev": "(mùthadh#: $1)",
"missingarticle-diff": "(Diofar: $1, $2)",
"viewsource": "Seall an tùs",
"viewsource-title": "Seall an tùs aig $1",
"actionthrottled": "Gnìomh air a mhùchadh",
- "actionthrottledtext": "Gus casg a chur air spama, chan urrainn dhut an gnìomh seo a dhèanamh ro thric am broinn ùine ghoirid agus chaidh thu thairis air a' chrìoch seo.\nFeuch ris a-rithist às a dhèidh seo.",
+ "actionthrottledtext": "Gus casg a chur air droch-ghiùlan, chan urrainn dhut an gnìomh seo a dhèanamh ro thric am broinn ùine ghoirid agus chaidh thu thairis air a’ chrìoch seo.\nFeuch ris a-rithist ann am beagan mhionaidean.",
"protectedpagetext": "Chaidh an duilleag seo a dhìon gus casg a chur air deasachadh.",
- "viewsourcetext": "'S urrainn dhut coimhead air tùs na duilleige seo 's lethbhreac a dhèanamh dheth:",
- "viewyourtext": "'S urrainn dhut coimhead air <strong>na dheasaich thu</strong> 's lethbhreac a dhèanamh dheth air an duilleag seo:",
+ "viewsourcetext": "’S urrainn dhut coimhead air tùs na duilleige seo ’s lethbhreac a dhèanamh dheth.",
+ "viewyourtext": "’S urrainn dhut coimhead air <strong>na dheasaich thu</strong> ’s lethbhreac a dhèanamh dheth air an duilleag seo.",
"protectedinterface": "Bheir an duilleag seo dhut teacsa eadar-aghaidh airson a' bhathar-bhog air an uicidh seo 's chaidh a ghlasadh gus casg a chur air mì-chleachdadh. Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], pròiseactan eadar-theangachadh MediaWiki.",
"editinginterface": "<strong>Rabhadh:</strong> Tha thu a' deasachadh duilleag a tha 'ga chleachdadh a chum teacsa eadar-aghaidh a sholar airson a' bhathar-bhog.\nMa dh'atharraicheas tu an duilleag seo, bidh buaidh ann air coltas na h-eadar-aghaidh mar a chì càch e air an uicidh seo.",
"translateinterface": "Gus eadar-theangachadh atharrachadh no a chur ris airson gach uicidh, cleachd [//translatewiki.net/ translatewiki.net], am pròiseact eadar-theangachaidh aig MediaWiki.",
- "cascadeprotected": "Chaidh an duilleag seo a dhìon o dheasachadh a chionn 's gu bheil e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a chaidh a dhìon 's an roghainn \"mar eas\" air:\n$2",
+ "cascadeprotected": "Chaidh an duilleag seo a dhìon o dheasachadh a chionn ’s gu bheil e fillte a-staigh {{PLURAL:$1|san duilleag|sna duilleagan}} a leanas a chaidh a dhìon ’s an roghainn “mar eas” air:\n$2",
"namespaceprotected": "Chan eil cead agad duilleagan san ainm-spàs <strong>$1</strong> a dheasachadh.",
"customcssprotected": "Chan eil cead agad an duilleag CSS seo a dheasachadh a chionn 's gu bheil na roghainnean pearsanta aig cleachdaiche eile innte.",
"customjsprotected": "Chan eil cead agad an duilleag JavaScript seo a dheasachadh a chionn 's gu bheil na roghainnean pearsanta aig cleachdaiche eile innte.",
"mypreferencesprotected": "Chan eil cead agad na roghainnean agad a dheasachadh.",
"ns-specialprotected": "Chan ghabh duilleagan sònraichte a dheasachadh.",
"titleprotected": "Chaidh an duilleag seo a dhìon o chruthachadh le [[User:$1|$1]].\nSeo am mìneachadh: <em>$2</em>.",
- "filereadonlyerror": "Cha ghabh am faidhle \"$1\" atharrachadh a chionn 's gu bheil ionad-tasgaidh fhaidhlichean \"$2\" ri leughadh a-mhàin.\nThug an rianaire a ghlais e seachad an t-adhbhar a leanas: \"$3\".",
+ "filereadonlyerror": "Cha ghabh am faidhle “$1” atharrachadh a chionn ’s gu bheil ionad-tasgaidh fhaidhlichean “$2” ri leughadh a-mhàin.\nThuirt rianaire an t-siostaim a ghlais e na leanas: “$3”.",
"invalidtitle-knownnamespace": "Tiotal mì-dhligheach leis an ainm-spàs \"$2\" agus an teacsa \"$3\"",
"invalidtitle-unknownnamespace": "Tiotal mì-dhligheach leis an àireamh ainm-spàis $1 agus an teacsa \"$2\"",
"exception-nologin": "Chan eil thu air logadh a-steach",
"createacct-reason": "Adhbhar",
"createacct-reason-ph": "Carson a tha thu a' cruthachadh cunntas eile?",
"createacct-submit": "Cruthaich an cunntas agad",
- "createacct-another-submit": "Cruthaich cunntas eile",
+ "createacct-another-submit": "Cruthaich cunntas",
"createacct-benefit-heading": "Tha {{SITENAME}} 'ga chruthachadh le daoine mar thu fhèin.",
"createacct-benefit-body1": "{{PLURAL:$1|deasachadh|deasachaidhean}}",
"createacct-benefit-body2": "{{PLURAL:$1|duilleag|duilleagan}}",
"noemail": "Cha deach post-d a chlàradh airson a' chleachdaiche \"$1\".",
"noemailcreate": "Feumaidh tu post-d dligheach a chur ann",
"passwordsent": "Chaidh facal-faire ùr a chur dhan phost-d a chaidh a chlàradh airson \"$1\".\nDèan logadh a-steach a-rithist nuair a gheibh thu e.",
- "blocked-mailpassword": "Chaidh bacadh a chur air an t-seòladh IP agad 's chan eil cead deasachaidh agad agus chan urrainn dhut an gleus a chum aiseag an fhacail-fhaire a chleachdadh gus casg a chur air mì-ghnàthachadh.",
+ "blocked-mailpassword": "Chaidh bacadh deasachaidh a chur air an t-seòladh IP agad. Airson casg a chur air mì-ghnàthachadh, chan urrainn dhut an gleus a chum aiseag an fhacail-fhaire a chleachdadh an-dràsta fhèin.",
"eauthentsent": "Chaidh post-d dearbhaidh a chur dhan phost-d a chaidh ainmeachadh.\nMus dèid post-d sam bith eile a chur dhan chunntas, feumaidh tu leantainn ris an stiùireadh sa phost-d mar dhearbhadh gur ann agadsa a tha an cunntas.",
"throttled-mailpassword": "Chaidh post-d a chur airson ath-shuidheachadh facail-fhaire mu thràth $1 {{PLURAL:$1|uair|uair|uairean|uair}} a thìde air ais.\nGus casg a chur air mì-ghnàthachadh, cha chuir sinn ach aon chuimhneachan facail-fhaire gach $1 {{PLURAL:$1|uair|uair|uairean|uair}} a thìde.",
"mailerror": "Mearachd a' cur post: $1",
"createaccount-title": "Cruthachadh cunntais airson {{SITENAME}}",
"createaccount-text": "Chruthaich cuideigin cunntas airson a' phost-d agad air {{SITENAME}} ($4) air a bheil \"$2\", leis an fhacal-fhaire \"$3\".\nBu chòir dhut logadh a-steach agus am facal-faire agad atharrachadh gu h-ìosal an-dràsta.\n\n'S urrainn dhut an teachdaireachd seo a leigeil seachad ma chaidh an cunntas a chruthachadh air mhearachd.",
"login-throttled": "Dh'fheuch thu ri logadh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
- "login-abort-generic": "Cha do shoirbhich leat leis an logadh a-steach - Chaidh sgur dheth",
+ "login-abort-generic": "Dh’fhàillig an logadh a-steach - Sguireadh dheth",
"login-migrated-generic": "Chaidh an cunntas agad imrich 's chan eil an t-ainm cleachdaiche agad ann tuilleadh air an uicidh seo.",
"loginlanguagelabel": "Cànan: $1",
"suspicious-userlogout": "Chaidh d' iarrtas airson logadh a-mach a dhiùltadh a chionn 's gu bheil coltas gun deach a chur le brabhsair briste no le progsaidh tasglannaidh.",
"resetpass-no-info": "Feumaidh tu logadh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
"resetpass-submit-loggedin": "Atharraich am facal-faire",
"resetpass-submit-cancel": "Sguir dheth",
- "resetpass-wrong-oldpass": "Tha am facal-faire sealach no làithreach mì-dhligheach.\nSaoil an do dh'atharraich thu am facal-faire agad mu thràth no an do dh'iarr thu facal-faire sealach ùr?",
+ "resetpass-wrong-oldpass": "Tha am facal-faire sealach no làithreach mì-dhligheach.\nSaoil an do dh’atharraich thu am facal-faire agad mu thràth no an do dh’iarr thu facal-faire sealach ùr?",
"resetpass-recycled": "Tagh facal-faire ùr nach eil co-ionnann ris an fhacal-fhaire a tha agad an-dràsta.",
"resetpass-temp-emailed": "Rinn thu logadh a-steach le còd sealach a fhuair thu air a' phost-d.\nAirson logadh a-steach slàn a dhèanamh, feumaidh tu facal-faire ùr a shuidheachadh an-seo:",
"resetpass-temp-password": "Facal-faire sealach:",
"passwordreset-emailtext-ip": "Dh'iarr cuideigin (thu fhèin, 's mathaid, on t-seòladh IP $1) am facal-faire airson {{SITENAME}} ($4) ath-shuidheachadh. Tha {{PLURAL:$3|an cunntas|na cunntasan}} a leanas co-cheangailte ris a' phost-d seo:\n\n$2\n\nFalbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire shealach|na faclan-faire sealach}} seo an ceann $5 {{PLURAL:$5|latha|latha|làithean|latha}}.\nBu chòir dhut logadh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
"passwordreset-emailtext-user": "Dh'iarr an cleachdaiche $1 air {{SITENAME}} ath-shuidheachadh an fhacail-fhaire air {{SITENAME}} ($4). Tha {{PLURAL:$3|an cunntas-cleachdaiche|na cunntasan-cleachdaiche}} a leanas co-cheangailte ris an t-seòladh puist-d seo:\n\n$2\n\nFalbhaidh an ùine air {{PLURAL:$3|an fhacal-fhaire shealach|na faclan-faire sealach}} seo an ceann $5 {{PLURAL:$5|latha|latha|làithean|latha}}.\nBu chòir dhut logadh a-steach agus facal-faire ùr a thaghadh an-dràsta. Ma dh'iarr cuideigin eile seo no ma chuimhnich thu air an fhacal-fhaire agad 's mur eil thu airson atharrachadh tuilleadh, leig seachad an teachdaireachd seo 's lean ort leis an t-seann fhacal-fhaire.",
"passwordreset-emailelement": "Ainm-cleachdaiche: \n$1\n\nFacal-faire sealach: \n$2",
- "passwordreset-emailsentemail": "Chaidh post-d airson ath-shuidheachadh an fhacail-fhaire a chur.",
+ "passwordreset-emailsentemail": "Ma tha am post-d seo co-cheangailte ris a’ chunntas agad, thèid post-d airson ath-shuidheachadh an fhacail-fhaire a chur.",
"passwordreset-emailsent-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a chur agus chì thu sin gu h-ìosal.",
"passwordreset-emailerror-capture": "Chaidh post-d a chum ath-shuidheachadh an fhacail-fhaire a ghintinn agus chì thu sin gu h-ìosal ach cha b' urrainn dhuinn a chur dhan chleachdaiche: $1",
- "changeemail": "Atharraich am post-d",
- "changeemail-header": "Atharraich cunntas a' phuist-d",
+ "changeemail": "Atharraich no thoir air falbh an seòladh puist-d",
+ "changeemail-header": "Lìon am foirm seo a dh’atharrachadh an t-seòlaidh phuist-d agad. Ma tha thu airson an co-cheangal eadar post-d sam bith is an cunntas agad a thoirt air falbh, fàg an seòladh ùr bàn nuair a chuireas tu am foirm.",
"changeemail-no-info": "Feumaidh tu logadh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
"changeemail-oldemail": "An seòladh puist-d làithreach:",
"changeemail-newemail": "An seòladh puist-d ùr:",
"sig_tip": "D' ainm sgrìobhte le stampa-ama",
"hr_tip": "Loidhne rèidh (na cleachd ro thric e)",
"summary": "Gearr-chunntas:",
- "subject": "Cuspair/ceann-loidhne:",
+ "subject": "Cuspair:",
"minoredit": "Seo mùthadh beag",
"watchthis": "Cum sùil air an duilleag seo",
"savearticle": "Sàbhail an duilleag",
"missingsummary": "<strong>Cuimhnich:</strong> Cha dug thu seachad gearr-chunntas air na dh'atharraich thu.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais gearr-chunntais.",
"selfredirect": "<strong>Rabhadh:</strong> Tha thu ag ath-stiùireadh duilleag dha fhèin.\nDh'fhaoidte gun do shònraich thu an t-amas cearr airson an ath-stiùiridh no gu bheil thu a' deasachadh an duilleag cearr.\nMa nì thu briogadh air \"{{int:savearticle}}\" a-rithist,m thèid an ath-stiùireadh a chruthachadh co-dhiù.",
"missingcommenttext": "Cuir a-steach beachd gu h-ìosal.",
- "missingcommentheader": "<strong>Cuimhnich:</strong> Cha dug thu seachad cuspair/ceann airson a' bheachd seo.\nMa bhriogas tu air \"{{int:savearticle}}\" a-rithist, thèid na dheasaich thu a shàbhaladh as aonais.",
+ "missingcommentheader": "<strong>Cuimhnich:</strong> Cha dug thu seachad cuspair airson a’ bheachd seo.\nMa bhriogas tu air “{{int:savearticle}}” a-rithist, thèid na dheasaich thu a shàbhaladh as aonais.",
"summary-preview": "Ro-shealladh a' ghearr-chunntais:",
- "subject-preview": "Ro-shealladh air a' chuspair/air a' cheann:",
+ "subject-preview": "Ro-shealladh a’ chuspair:",
"blockedtitle": "Tha an cleachdair air a bhacadh",
"blockedtext": "<strong>Chaidh an t-ainm-cleachdaiche no an seòladh IP agad a bhacadh.</strong>\n\n'S e $1 a chur am bacadh seo ort.\n{{GENDER:$1|Thug e|Thug i|Thugadh}} an cèill gun do {{GENDER:$1|rinn e|rinn i|rinneadh}} sin air sgàth an adhbhair seo: <em>$2</em>.\n\n* Toiseach a' bhacaidh: $8\n* Deireadh a' bhacaidh: $6\n* An neach air a bheil am bacadh: $7\n\n'S urrainn dhut fios a chur gu $1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.\nChan urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.\n'S e $3 an seòladh IP làithreach agus agus 's e #$5 ID a' bhacaidh.\nThoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
"autoblockedtext": "Chaidh an seòladh IP agad a bhacadh gu fèin-obrachail a chionn 's gun deach a chleachdadh le cuideigin eile a chaidh a bhacadh le $1.\n{{GENDER:$1|Thug e|Thug i|Thugadh}} an cèill gun do {{GENDER:$1|rinn e|rinn i|rinneadh}} sin air sgàth an adhbhair seo: \n\n:<em>$2</em>.\n\n* Toiseach a' bhacaidh: $8\n* Deireadh a' bhacaidh: $6\n* An neach air a bheil am bacadh: $7\n\n'S urrainn dhut fios a chur gu $1 no [[{{MediaWiki:Grouppage-sysop}}|rianair]] eile gus am bacadh seo a dheasbad.\n\nDh'fhaoidte nach urrainn dhut am feart \"Cuir post-d dhan chleachdaiche seo\" a chleachdadh ach ma tha seòladh puist-d dligheach ann an [[Special:Preferences|roghainnean a' chunntais agad]] agus mura deach bacadh a chur air a chleachdadh.\n\n'S e $3 an seòladh IP làithreach agus agus 's e #$5 ID a' bhacaidh.\nThoir iomradh air a' mhion-fhiosrachadh gu h-àrd ma chuireas tu ceist sam bith mu dhèidhinn.",
"newarticle": "(Ùr)",
"newarticletext": "Lean thu ri ceangal gu duilleag nach eil ann fhathast.\nCuir teacs sa bhogsa gu h-ìosal gus an duilleag seo a chruthachadh (seall air [$1 duilleag na cobharach] airson barrachd fiosrachaidh).\nMura robh dùil agad ris an duilleag seo a ruigsinn, briog air a' phutan <strong>air ais</strong> 'nad bhrabhsair.",
"anontalkpagetext": "----\n<em>Seo an duilleag deasbaireachd aig cleachdaiche gun urra nach do chruthaich cunntas fhathast no nach eil 'ga chleachdadh.</em>\nFeumaidh sinn an àireamh IP aca a chleachdadh air sgàth sin.\nFaodadh grunn chleachdaichean seòladh IP mar a chleachdadh còmhla.\nMas e cleachdaiche gun urra a tha annad 's ma tha thu dhen bheachd nach eil na beachdan seo a' buntainn riut, nach [[Special:UserLogin/signup|clàraich thu]] no nach dèan thu [[Special:UserLogin|logadh a-steach]] gus bùrach mar seo a sheachnadh san àm ri teachd?",
- "noarticletext": "Chan eil teacsa sam bith anns an duilleag seo an-dràsta.\n'S urrainn dhut [[Special:Search/{{PAGENAME}}|an tiotal seo a lorg]] ann an duilleagan eile,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh],\nno [{{fullurl:{{FULLPAGENAME}}|action=edit}} an duilleag seo a dheasachadh]</span>.",
+ "noarticletext": "Chan eil teacsa sam bith anns an duilleag seo an-dràsta.\n'S urrainn dhut [[Special:Search/{{PAGENAME}}|an tiotal seo a lorg]] ann an duilleagan eile,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh],\nno [{{fullurl:{{FULLPAGENAME}}|action=edit}} an duilleag seo a chruthachadh]</span>.",
"noarticletext-nopermission": "Chan eil teacsa sam bith san duilleag seo an-dràsta.\n'S urrainn dhut [[Special:Search/{{PAGENAME}}|tiotal na duilleige seo a lorg]] ann an duilleagan eile, no <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} na logaichean co-cheangailte a rannsachadh]</span> ach chan eil cead agad an duilleag seo a chruthachadh.",
"missing-revision": "Chan eil mùthadh #$1 na duilleige \"{{FULLPAGENAME}}\" ann.\n\nMar is trice, tachraidh seo ma leanas tu ceangal san eachdraidh a tha fìor aosta 's a tha a' dol gu duilleag a chaidh a sguabadh às.\nGheibh thu mion-fhiosrachadh ann an [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} loga nan duilleagan a chaidh a sguabadh às].",
"userpage-userdoesnotexist": "Chan e cunntas clàraichte a tha ann an \"$1\".\nDèan cinnteach gu bheil thu airson an duilleag seo a chruthachadh/dheasachadh.",
"userpage-userdoesnotexist-view": "Cha deach an cunntas cleachdaiche \"$1\" a chlàradh.",
"blocked-notice-logextract": "Tha an cleachdaiche seo air a bhacadh an-dràsta fhèin.\nChì thu loga a' bhacaidh mu dheireadh gu h-ìosal mar fhiosrachadh dhut:",
- "clearyourcache": "<strong>An aire:</strong> As dèidh dhut sàbhaladh, 's mathaid gum bi agad tasgadan a' bhrabhsair agad a chur air gleus mus fhaic thu na dh'atharraich thu.\n* <strong>Firefox / Safari:</strong> Cum shìos <em>Shift</em> is briog air <em>Ath-luchdaich</em> no brùth <em>Ctrl-F5</em> no <em>Ctrl-R</em> (<em>⌘-R</em> air Mac)\n* <strong>Google Chrome:</strong> Brùth <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> air Mac)\n* <strong>Internet Explorer:</strong> Cum shìos <em>Ctrl</em> is briog air <em>Ath-nuadhaich</em> no brùth <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Falamhaich an tasgadan ann an <em>Innealan → Roghainnean</em>",
+ "clearyourcache": "<strong>An aire:</strong> As dèidh dhut sàbhaladh, ’s mathaid gum bi agad tasgadan a’ bhrabhsair agad a chur air gleus mus fhaic thu na dh’atharraich thu.\n* <strong>Firefox / Safari:</strong> Cum shìos <em>Shift</em> is briog air <em>Ath-luchdaich</em> no brùth <em>Ctrl-F5</em> no <em>Ctrl-R</em> (<em>⌘-R</em> air Mac)\n* <strong>Google Chrome:</strong> Brùth <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> air Mac)\n* <strong>Internet Explorer:</strong> Cum shìos <em>Ctrl</em> is briog air <em>Ath-nuadhaich</em> no brùth <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Rach gu <em>Clàr-taice → Roghainnean</em> (<em>Opera → Roghainnean</em> air Mac) agus an uairsin gu <em>Prìobhaideachd ⁊ tèarainteachd → Falamhaich an dàta brabhsaidh → Dealbhan is faidhlichean san tasgadan</em>.",
"usercssyoucanpreview": "<strong>Gliocas:</strong> Cleachd am putan \"{{int:showpreview}}\" airson an CSS agad a chur fo dheuchainn mus sàbhail thu e.",
"userjsyoucanpreview": "<strong>Gliocas:</strong> Cleachd am putan \"{{int:showpreview}}\" gus an JavaScript ùr agad a chur fo dheuchainn mus sàbhail thu e.",
"usercsspreview": "<strong>Cuimhnich nach e seo ach ro-shealladh air a' CSS chleachdaiche agad.\nCha deach a shàbhaladh fhathast!</strong>",
"previewnote": "<strong>Cuimhnich nach eil ann ach ro-shealladh.</strong>\nCha deach na mùthaidhean agad a shàbhaladh fhathast!",
"continue-editing": "Rach gun raon deasachaidh",
"previewconflict": "Tha an ro-shealladh seo a' sealltainn dhut an teacsa san raon teacsa gu h-àrd mar a nochdas e ma shàbhaileas tu an-dràsta.",
- "session_fail_preview": "<strong>Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.</strong>\nNach fheuch thu ris a-rithist?\nMur obraich e fhathast, feuch is [[Special:UserLogout|log a-mach]] is a-steach a-rithist an uairsin.",
- "session_fail_preview_html": "<strong>Duilich! Cha b' urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.</strong>\n\n<em>A chionn 's gun do chuir {{SITENAME}} còd HTML an comas, tha an ro-shealladh falaichte mar dhìon an aghaidh ionnsaighean JavaScript.</em>\n\n<strong>Mas e deasachadh dligheach a tha seo, feuch ris a-rithist.</strong>\nMur obraich e fhathast, feuch is dèan [[Special:UserLogout|logadh a-mach]] is a-steach a-rithist an uairsin.",
+ "session_fail_preview": "Tha sinn duilich ach cha b’ urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.\n\nDh’fhaoidte gun deach do chlàradh a-mach. <strong>Dèan cinnteach gu bheil thu clàraichte a-staigh fhathast is feuch ris a-rithist</strong>.\nMur obraich e fhathast, feuch is [[Special:UserLogout|log a-mach]] is a-steach a-rithist an uairsin is dèan cinnteach gu bheil am brabhsair agad a’ gabhail ri briosgaidean on làrach seo.",
+ "session_fail_preview_html": "Tha sinn duilich ach cha b’ urrainn dhuinn na dheasaich thu a làimhseachadh air sgàth call dàta an t-seisein.\n\n<em>A chionn ’s gun do chuir {{SITENAME}} còd HTML an comas, tha an ro-shealladh falaichte mar dhìon an aghaidh ionnsaighean JavaScript.</em>\n\n<strong>Mas e deasachadh dligheach a tha seo, feuch ris a-rithist.</strong>\nMur obraich e fhathast, feuch is dèan [[Special:UserLogout|logadh a-mach]] is a-steach a-rithist an uairsin is dèan cinnteach gu bheil am brabhsair agad a’ gabhail ri briosgaidean on làrach seo.",
"token_suffix_mismatch": "<strong>Dhiùlt sinn na dheasaich thu a chionn 's gun do chuir an cliant agad na caractaran puingeachaidh tro chèile san tòcan deasachaidh.</strong>\nDhiùlt sinn na dheasaich thu air eagal 's gun coirbeadh e teacsa na duilleige.\nTachraidh seo uaireannan ma chleachdar seirbheis-lìn progsaidh gun urra a tha làn de mhearachdan.",
"edit_form_incomplete": "<strong>Cha do ràinig cuid dhen fhoirm deasachaidh am frithealaichte; dèan cinnteach gu bheil gach deasachadh agad slàn is feuch ris a-rithist.</strong>",
"editing": "A' deasachadh $1",
"copyrightwarning": "Thoir an aire gu bheilear a' tuigsinn gu bheil gach obair a chuireas tu ri {{SITENAME}} air a leigeil mu sgaoil fo $2 (see $1 airson mion-fhiosrachadh).\nMura bi thu toilichte 's daoine eile a' deasachadh gun tròcair na sgrìobh tu 's 'ga sgaoileadh mar a thogras iad, na cuir an-seo e.<br />\nTha thu a' toirt geall cuideachd gun do sgrìobh thu fhèin seo no gun do rinn thu lethbhreac dheth o àrainn phoblach no tùs saor coltach ris.\n<strong>Na cuir ann rudan fo chòir-lethbhreac gun chead!</strong>",
"copyrightwarning2": "Thoir an aire gum faod deasaichean eile gach obair a chuireas tu ri {{SITENAME}} a dheasachadh, atharrachadh no a thoirt air falbh.\nMur eil thu ag iarraidh gun deasaich cuideigin eile na sgrìobh thu gun truas, na cuir a-null e.<br />\nNì thu gealladh dhuinn cuideachd gur e thu fhèin a sgrìobh e no gun do rinn thu lethbhreac dheth o Public Domain no stòras saor dhen leithid (faic $1 airson barrachd fiosrachaidh). <br />\n<strong>Na cuir a-null obair a tha fo chòir-lethbhreac gun chead!</strong>",
"longpageerror": "<strong>Mearachd: Tha an teacsa a chur thu thugainn $1 {{PLURAL:$1|chileabaidht|chileabaidht|cileabaidhtichean|cileabaidht}} a dh'fhaid is tha sin nas fhaide na tha ceadaichte ($2 {{PLURAL:$2|chileabaidht|chileabaidht|cileabaidhtichean|cileabaidht}}).</strong>\nCha ghabh a shàbhaladh.",
- "readonlywarning": "<strong>Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na dheasaich thu a shàbhaladh an-dràsta fhèin.</strong>\n'S mathaid gum b' fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.\n\nSeo am mìneachadh a thug an rianaire a ghlais e: $1",
+ "readonlywarning": "<strong>Rabhadh: Chaidh an stòr-dàta a ghlasadh a chum obair-ghlèidhidh agus chan urrainn dhut na dheasaich thu a shàbhaladh an-dràsta fhèin.</strong>\n’S mathaid gum b’ fheairrde dhut lethbhreac a dhèanamh dhen teacsa agus a shàbhaladh ann am faidhle ach an urrainn dhut a chleachdadh as a dhèidh seo.\n\nSeo am mìneachadh a thug rianaire an t-siostaim a ghlais e: $1",
"protectedpagewarning": "<strong>Rabhadh: Chaidh an duilleag seo a dhìon 's chan urrainn ach dhan fheadhainn aig a bheil ùghdarras rianaire a dheasachadh.</strong>\nChì thu an clàr mu dheireadh san loga mar fhiosrachadh dhut gu h-ìosal:",
"semiprotectedpagewarning": "<strong>An aire:</strong> Chaidh an duilleag seo a dhìon 's chan fhaod ach cleachdaichean clàraichte a dheasachadh.\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
- "cascadeprotectedwarning": "<strong>Rabhadh:</strong> Chaidh an duilleag seo a dhìon 's chan fhaod ach rianairean a dheasachadh a chionn 's gun robh e am broinn {{PLURAL:$1|na duilleige|nan duilleagan}} a leanas a tha dìonta o bhith mar eas.",
+ "cascadeprotectedwarning": "<strong>Rabhadh:</strong> Chaidh an duilleag seo a dhìon ’s chan fhaod ach rianairean a dheasachadh a chionn ’s gun robh e fillte a-staigh {{PLURAL:$1|san duilleag|sna duilleagan}} a leanas a tha dìonta o bhith mar eas.",
"titleprotectedwarning": "<strong>Rabhadh: Chaidh an duilleag seo a dhìon 's feumar [[Special:ListGroupRights|ceadan sònraichte]] gus a dheasachadh.</strong>\nSeo an rud mu dheireadh san loga mar fhiosrachadh dhut:",
"templatesused": "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh}} air an duilleag seo:",
"templatesusedpreview": "Tha {{PLURAL:$1|teamplaid 'ga cleachdadh|teamplaidean 'gan cleachdadh}} san ro-shealladh seo:",
"rev-showdeleted": "seall",
"revisiondelete": "Sguab às/neo-dhèan sguabadh às mùthaidhean",
"revdelete-nooldid-title": "Tha am mùthadh seo mì-dhligheach",
- "revdelete-nooldid-text": "Cha do shònraich thu mùthadh airson seo a dhèanamh, chan eil e ann no tha thu a' feuchainn ris am mùthadh làithreach a chur am falach.",
+ "revdelete-nooldid-text": "Cha do shònraich thu mùthadh airson seo a dhèanamh, chan eil e ann no tha thu a’ feuchainn ris am mùthadh làithreach a chur am falach.",
"revdelete-no-file": "Chan eil am faidhle a shònraich thu ann.",
"revdelete-show-file-confirm": "A bheil thu cinnteach gu bheil thu airson coimhead air mùthadh an fhaidhle \"<nowiki>$1</nowiki>\" a chaidh a sguabadh às $2 aig $3?",
"revdelete-show-file-submit": "Tha",
"revdelete-unsuppress": "Thoir air falbh na bacaidhean air mùthaidhean a chaidh aiseag",
"revdelete-log": "Adhbhar:",
"revdelete-submit": "Cuir an sàs e air {{PLURAL:$1|am mùthadh|na mùthaidhean}} a thagh thu",
- "revdelete-success": "Chaidh so-fhaicsinneachd a' mhùthaidh ùrachadh.",
+ "revdelete-success": "Chaidh so-fhaicsinneachd a’ mhùthaidh ùrachadh.",
"revdelete-failure": "Cha b' urrainn dhuinn so-fhaicsinneachd a' mhùthaidh ùrachadh:\n$1",
"logdelete-success": "Chaidh faicsinneachd an loga a shuidheachadh.",
"logdelete-failure": "Cha b' urrainn dhuinn faicsinneachd an loga a shuidheachadh:\n$1",
"prefs-watchlist-token": "Tòcan a' chlàir-fhaire:",
"prefs-misc": "Measgachadh",
"prefs-resetpass": "Atharraich am facal-faire",
- "prefs-changeemail": "Atharraich am post-d",
+ "prefs-changeemail": "Atharraich no thoirt air falbh post-d",
"prefs-setemail": "Suidhich seòladh puist-d",
"prefs-email": "Roghainnean a' phuist-d",
"prefs-rendering": "Coltas",
"rows": "Sreathan",
"columns": "Colbhan",
"searchresultshead": "Lorg",
- "stub-threshold": "An stairsneach airson fòrmatadh <a href=\"#\" class=\"stub\">cheanglaichean nam bun</a> (bytes):",
+ "stub-threshold": "An stairsneach airson fòrmatadh cheanglaichean nam bun ($1):",
"stub-threshold-disabled": "À comas",
"recentchangesdays": "Co mheud latha a thèid a shealltainn sna mùthaidhean ùra:",
"recentchangesdays-max": "$1 {{PLURAL:$1|latha|latha|làithean|latha}} air a' char as motha",
"badsig": "Tha co-chàradh an t-soidhnidh mì-dhligheach.\nThoir sùil air na tagaichean HTML.",
"badsiglength": "Tha an t-earr-sgrìobhadh agad ro fhada.\nChan fhaod e a bhith nas fhaide na $1 {{PLURAL:$1|charactar|charactar|caractaran|caractar}}.",
"yourgender": "Do ghnè:",
- "gender-unknown": "B' fhearr leam gun a bhith 'ga leigeil ris",
+ "gender-unknown": "Nì am bathar-bog a dhìcheall gun a bhith a’ cleachdadh faclan a nochdas gnè seach gnè",
"gender-male": "Deasaichidh e duilleagan na h-uicidh",
"gender-female": "Deasaichidh i duilleagan na h-Uicipeid",
"prefs-help-gender": "Cha leig thu leas an roghainn seo a shuidheachadh.\nCleachdaidh am bathar-bog an luach aice gus bruidhinn riut le d' ainm 's iomradh a thoirt ort gu càch leis a' ghnè ghramataigeach iomchaidh.\nBidh am fiosrachadh seo poblach.",
"userrights": "Stiùireadh ceadan a' chleachdaiche",
"userrights-lookup-user": "Stiùirich na buidhnean chleachdaichean",
"userrights-user-editname": "Cuir a-steach ainm-cleachdaiche:",
- "editusergroup": "Deasaich na buidhnean chleachdaichean",
- "editinguser": "Ag atharrachadh ceadan a' chleachdaiche <strong>[[User:$1|$1]]</strong> $2",
+ "editusergroup": "Deasaich na buidhnean {{GENDER:$1|chleachdaichean}}",
+ "editinguser": "Ag atharrachadh ceadan a’ {{GENDER:$1|chleachdaiche}} <strong>[[User:$1|$1]]</strong> $2",
"userrights-editusergroup": "Deasaich na buidhnean chleachdaichean",
- "saveusergroups": "Sàbhail na buidhnean chleachdaichean",
+ "saveusergroups": "Sàbhail na buidhnean {{GENDER:$1|chleachdaichean}}",
"userrights-groupsmember": "Ball de:",
"userrights-groupsmember-auto": "Ball fèin-obrachail de:",
"userrights-groupsmember-type": "$1",
"group-bot": "Bots",
"group-sysop": "Rianadairean",
"group-bureaucrat": "Biurocratan",
- "group-suppress": "Marasgalan",
+ "group-suppress": "Mùchadairean",
"group-all": "(na h-uile)",
"group-user-member": "cleachdaiche",
"group-autoconfirmed-member": "cleachdaiche fèin-dearbhte",
"group-bot-member": "bot",
"group-sysop-member": "rianaire",
"group-bureaucrat-member": "biùrocrat",
- "group-suppress-member": "marasgal",
+ "group-suppress-member": "{{GENDER:$1|mùchadair}}",
"grouppage-user": "{{ns:project}}:Cleachdaichean",
"grouppage-autoconfirmed": "{{ns:project}}:Cleachdaichean fèin-dearbhte",
"grouppage-bot": "{{ns:project}}:Bots",
"grouppage-sysop": "{{ns:project}}:Rianadairean",
"grouppage-bureaucrat": "{{ns:project}}:Biurocratan",
- "grouppage-suppress": "{{ns:project}}:Marasgal",
+ "grouppage-suppress": "{{ns:project}}:Mùch",
"right-read": "Cead-leughaidh",
"right-edit": "Cead-deasachaidh",
"right-createpage": "Cead-cruthachaidh (de dhuilleagan nach eil 'nan duilleagan deasbaireachd)",
"boteditletter": "bt",
"unpatrolledletter": "!",
"number_of_watching_users_pageview": "[Tha $1 {{PLURAL:$1|chleachdaiche|chleachdaiche|cleachdaichean|cleachdaiche}} a' cumail sùil air]",
- "rc_categories": "Cuingich gu roinnean-seòrsa (sgaraich le \"|\")",
- "rc_categories_any": "Roinn-seòrsa sam bith",
+ "rc_categories": "Dìreach sna roinnean-seòrsa (sgaraich le “|”):",
+ "rc_categories_any": "Gin dhe na chaidh a thaghadh",
"rc-change-size": "$1",
"rc-change-size-new": "$1 {{PLURAL:$1|bhaidht|bhaidht|baidhtichean|baidht}} às dèidh an atharrachaidh",
"newsectionsummary": "Earrann ùr /* $1 */",
"backend-fail-read": "Cha b' urrainn dhuinn am faidhle \"$1\" a leughadh.",
"backend-fail-create": "Cha b' urrainn dhuinn sgrìobhadh san fhaidhle \"$1\".",
"backend-fail-maxsize": "Cha b' urrainn dhuinn am faidhle \"$1\" a sgrìobhadh on a tha e nas motha na $2 {{PLURAL:$2|bhaidht|bhaidht|baidhtichean|baidht}}.",
- "backend-fail-readonly": "Chan eil backend an stòraidh \"$1\" ach ri leughadh a-mhàin an-dràsta. Seo as adhbhar: \"<em>$2</em>\"",
+ "backend-fail-readonly": "Chan eil backend an stòraidh “$1” ach ri leughadh a-mhàin an-dràsta. Seo as adhbhar: <em>$2</em>",
"backend-fail-synced": "Tha am faidhle \"$1\" ann an staid mì-chòrdail a thaobh nam backends stòraidh inntearnail.",
"backend-fail-connect": "Cha deach leinn ceangal ri backend an stòraidh \"$1\".",
"backend-fail-internal": "Chathair mearachd neo-aithnichte le backend an stòraidh \"$1\".",
"uploadstash-summary": "Bheir an duilleag seo inntrigeadh dhut a dh'fhaidhlichean a chaidh a luchdadh suas no a tha 'gan luchdadh suas ach nach deach fhoillseachadh air an uicidh fhathast. Chan fhaic duine na faidhlichean seo ach an cleachdaiche a rinn an luchdadh suas.",
"uploadstash-clear": "Glan na faidhlichean ann an tasgadan an luchdaidh suas",
"uploadstash-nofiles": "Chan eil faidhle agad ann an tasgadan an luchdaidh suas.",
- "uploadstash-badtoken": "Cha deach an gnìomh seo a choileanadh, 's dòcha air sgàth 's gun do dh'fhalbh an ùine air an teisteanas deasachaidh agad. Am feuch thu ris a-rithist?",
+ "uploadstash-badtoken": "Cha deach an gnìomh seo a choileanadh, ’s dòcha air sgàth ’s gun do dh’fhalbh an ùine air an teisteanas deasachaidh agad. Am feuch thu ris a-rithist?",
"uploadstash-errclear": "Cha deach leinn na faidhlichean a ghlanadh air falbh.",
"uploadstash-refresh": "Ath-nuadhaich liosta nam faidhlichean",
"invalid-chunk-offset": "Frith-àireamh a' chnaip mhì-dhligheach",
"nopagetext": "Chan eil an duilleag-uidhe a thug thu seachad ann.",
"pager-newer-n": "{{PLURAL:$1|an $1 nas ùire|na $1 nas ùire}}",
"pager-older-n": "{{PLURAL:$1|an $1 nas sine|na $1 nas sine}}",
- "suppress": "Marasgal",
+ "suppress": "Mùch",
"querypage-disabled": "Chaidh an duilleag shònraichte seo a chur à comas a chum dèanadais.",
"booksources": "Tùsan a tha 'nan leabhraichean",
"booksources-search-legend": "Lorg tùsan a tha 'nan leabhraichean",
"booksources-text": "Chì thu liosta dhe cheanglaichean gu làraichean eile a reiceas leabhraichean ùra 's cleachdte gu h-ìosal 's ma dh'fhaoidte gum faigh thu barrachd fiosrachaidh orra mu leabhraichean a tha thu a' sireadh:",
"booksources-invalid-isbn": "Tha coltas mì-dhligheach air an ISBN a chaidh a thoirt seachad; dearbhaich gun deach lethbhreac a dhèanamh dheth on tùs gun mhearachd.",
"specialloguserlabel": "Cò rinn e:",
- "speciallogtitlelabel": "Ceann-uidhe (tiotal no cleachdaiche):",
+ "speciallogtitlelabel": "Ceann-uidhe (tiotal no {{ns:user}}:ainm-cleachdaiche a’ chleachdaiche):",
"log": "Logaichean",
"all-logs-page": "A h-uile loga poblach",
"alllogstext": "Sealladh co-mheasgaichte dhen a h-uile loga aig {{SITENAME}} a tha ri làimh.\n'S urrainn dhut an sealladh a chuingeachadh 's tu a' taghadh seòrsa an loga, ainm a' chleachdaiche (le aire do litrichean mòra 's beaga) no an duilleag a tha fo bhuaidh (le aire do litrichean mòra 's beaga).",
"minoredit": "Esta é unha edición pequena",
"watchthis": "Vixiar esta páxina",
"savearticle": "Gardar a páxina",
+ "publishpage": "Publicar páxina",
"preview": "Vista previa",
"showpreview": "Mostrar a vista previa",
"showdiff": "Mostrar os cambios",
"userpage-userdoesnotexist": "A conta de usuario \"$1\" non está rexistrada.\nComprobe se desexa crear/editar esta páxina.",
"userpage-userdoesnotexist-view": "A conta de usuario \"$1\" non está rexistrada.",
"blocked-notice-logextract": "Este usuario está bloqueado.\nVelaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
- "clearyourcache": "'''Nota:''' Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* '''Firefox/Safari:''' Prema ''Maiúsculas'' á vez que en ''Recargar'', ou prema en ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' nos Mac)\n* '''Google Chrome:''' Prema en ''Ctrl-Maiús-R'' (''⌘-Maiús-R'' nos Mac)\n* '''Internet Explorer:''' Prema ''Ctrl'' ao tempo que fai clic en ''Refrescar'', ou prema en ''Ctrl-F5''\n* '''Opera:''' Limpe a súa memoria caché en ''Ferramentas → Preferencias''",
+ "clearyourcache": "<strong>Nota:</strong> Despois de gardar, cómpre limpar a memoria caché do seu navegador para ver os cambios.\n* <strong>Firefox/Safari:</strong> Prema <em>Maiúsculas</em> á vez que en <em>Recargar</em>, ou prema en <em>Ctrl-F5</em> ou <em>Ctrl-R</em> (<em>⌘-R</em> nos Mac)\n* <strong>Google Chrome:</strong> Prema en <em>Ctrl-Maiús-R</em> (<em>⌘-Maiús-R</em> nos Mac)\n* <strong>Internet Explorer:</strong> Prema <em>Ctrl</em> ao tempo que fai clic en <em>Refrescar</em>, ou prema en <em>Ctrl-F5</em>\n* <strong>Opera:<strong> Vaia a <em>Menú → Configuración</em> (<em>Opera → Preferencias</em> nun Mac) e logo a <em>Privacidade & seguridade → Limpar datos de navegación → Ficheiros e imaxes na caché</em>.",
"usercssyoucanpreview": "'''Nota:''' Use o botón \"{{int:showpreview}}\" para verificar o novo CSS antes de gardalo.",
"userjsyoucanpreview": "<strong>Nota:</strong> Use o botón \"{{int:showpreview}}\" para verificar o novo JavaScript antes de gardalo.",
"usercsspreview": "'''Lembre que só está vendo a vista previa do seu CSS de usuario.'''\n'''Este aínda non foi gardado!'''",
"tooltip-ca-nstab-category": "Ver a páxina da categoría",
"tooltip-minoredit": "Marcar isto coma unha edición pequena",
"tooltip-save": "Gravar os seus cambios",
+ "tooltip-publish": "Publicar os seus cambios",
"tooltip-preview": "Vista previa dos seus cambios; por favor, úsea antes de gravalos!",
"tooltip-diff": "Mostrar os cambios que fixo no texto",
"tooltip-compareselectedversions": "Ver as diferenzas entre dúas versións seleccionadas desta páxina",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|protexeu}} a $3 $4 [en cascada]",
"logentry-protect-modify": "$1 {{GENDER:$2|cambiou}} o nivel de protección de $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|cambiou}} o nivel de protección de $3 $4 [en cascada]",
- "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence {{GENDER:$3|$3}} de $4 a $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence {{GENDER:$6|$3}} de $4 a $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiou}} o grupo ao que pertence $3",
"logentry-rights-autopromote": "$1 foi {{GENDER:$2|promovido|promovida}} automaticamente de $4 a $5",
"logentry-upload-upload": "$1 {{GENDER:$2|cargou}} \"$3\"",
"category-empty": "''Hea vorgan sodhea ekui pan vo madheom na''",
"hidden-categories": "{{PLURAL:$1|Lipoilolo vorg|Lipoilole vorg}}",
"hidden-category-category": "Lipoiloleo vorg",
- "category-subcat-count": "{{PLURAL:$2|Hea vorgan fokot hi ek upvorg asa.|Hea vorgan {{PLURAL:$1|hi upvorg asa|heo $1 upvorg asat}}, beriz $2 upvorga modem.}}",
- "category-article-count": "{{PLURAL:$2|Hea vorgan fokot hi ek pan asa.|Hea vorgan {{PLURAL:$1|hi pan asa|him $1 panam asat}} beriz $2 panam modem.}}",
+ "category-subcat-count": "{{PLURAL:$2|Hea vorgan fokot ho ek upvorg asa.|Hea vorgan {{PLURAL:$1|ho upvorg asa|heo $1 upvorg asat}}, beriz $2 upvorga modem.}}",
+ "category-article-count": "{{PLURAL:$2|Hea vorgan fokot hem ek pan asa.|Hea vorgan {{PLURAL:$1|hem pan asa|him $1 panam asat}} beriz $2 panam modem.}}",
"category-file-count": "{{PLURAL:$2|Hea vorgan fokot hi ek fail asa.|Hea vorgan {{PLURAL:$1|hi fail asa|heo $1 faili asat}}, beriz $2 faili modem.}}",
"listingcontinuesabbrev": "chalu",
"index-category": "Suchi-potran zodlelim panam",
"article": "דף תוכן",
"newwindow": "(נפתח בחלון חדש)",
"cancel": "ביטול",
- "moredotdotdot": "עוד…",
+ "moredotdotdot": "עוד...",
"morenotlisted": "רשימה זו אינה מלאה.",
"mypage": "דף משתמש",
"mytalk": "שיחה",
"redirectedfrom": "(הופנה מהדף $1)",
"redirectpagesub": "דף הפניה",
"redirectto": "הפניה ל:",
- "lastmodifiedat": "ש×\95× ×\94 ×\9c×\90×\97ר×\95× ×\94 ×\91Ö¾$2, $1.",
+ "lastmodifiedat": "ש×\81×\95Ö¼× ×\94 ×\9c×\90×\97ר×\95× ×\94 ×\91Ö¾$1, ×\91שע×\94 $2.",
"viewcount": "דף זה נצפה {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}.",
"protectedpage": "דף מוגן",
"jumpto": "קפיצה אל:",
"minoredit": "זוהי עריכה משנית",
"watchthis": "מעקב אחרי דף זה",
"savearticle": "שמירה",
+ "publishpage": "פרסום הדף",
"preview": "תצוגה מקדימה",
"showpreview": "תצוגה מקדימה",
"showdiff": "הצגת שינויים",
"accmailtitle": "הסיסמה נשלחה",
"accmailtext": "סיסמה אקראית עבור [[User talk:$1|$1]] נשלחה אל $2. ניתן לשנותה בדף '''[[Special:ChangePassword|שינוי הסיסמה]]''' לאחר הכניסה.",
"newarticle": "(חדש)",
- "newarticletext": "×\94×\92עת×\9d ×\9c×\93×£ שע×\93×\99×\99×\9f ×\90×\99× × ×\95 ק×\99×\99×\9d.\n×\9b×\93×\99 ×\9c×\99צ×\95ר ×\90ת ×\94×\93×£ ×\94×\96×\94, ×\94ת×\97×\99×\9c×\95 ×\9c×\94ק×\9c×\99×\93 ×\91ת×\99×\91ת ×\94×\98קס×\98 למטה (ראו את [$1 דף העזרה] למידע נוסף).\nאם הגעתם לכאן בטעות, לחצו על כפתור ה<strong>חזרה</strong> (Back) בדפדפן שלכם.",
+ "newarticletext": "×\94×\92עת×\9d ×\9c×\93×£ שע×\93×\99×\99×\9f ×\90×\99× ×\95 ק×\99×\99×\9d.\n×\9b×\93×\99 ×\9c×\99צ×\95ר ×\90ת ×\94×\93×£ ×\94×\96×\94, ×\94ת×\97×\99×\9c×\95 ×\9c×\94ק×\9c×\99×\93 ×\91ת×\99×\91ת ×\94×\98קס×\98 שלמטה (ראו את [$1 דף העזרה] למידע נוסף).\nאם הגעתם לכאן בטעות, לחצו על כפתור ה<strong>חזרה</strong> (Back) בדפדפן שלכם.",
"anontalkpagetext": "----\n<em>זהו דף שיחה של משתמש אנונימי שעדיין לא יצר חשבון במערכת, או שהוא לא משתמש בו.</em>\nלכן עלינו להשתמש בכתובת ה־IP המספרית כדי לזהותו.\nייתכן שכתובת IP זו תהיה משותפת למספר משתמשים.\nאם אתם משתמשים אנונימיים ומרגישים שקיבלתם הודעות בלתי רלוונטיות, אנא [[Special:UserLogin/signup|צרו חשבון]] או [[Special:UserLogin|היכנסו לחשבון]] כדי להימנע מבלבול עתידי עם משתמשים אנונימיים נוספים.",
- "noarticletext": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאו [{{fullurl:{{FULLPAGENAME}}|action=edit}} ליצור את הדף]</span>.",
- "noarticletext-nopermission": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9b×\9d [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d,\n×\90×\95 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\90ת ×\94×\93×£ ×\91×\99×\95×\9e× ×\99×\9d]</span>,\n×\90×\9a ×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ליצור את הדף.",
+ "noarticletext": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9a [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש את הדף ביומנים],\nאו [{{fullurl:{{FULLPAGENAME}}|action=edit}} ליצור את הדף]</span>.",
+ "noarticletext-nopermission": "×\90×\99×\9f ×\9bר×\92×¢ ×\98קס×\98 ×\91×\93×£ ×\94×\96×\94.\n×\91×\90פשר×\95ת×\9a [[Special:Search/{{PAGENAME}}|×\9c×\97פש ×\90ת ×\9b×\95תרת ×\94×\93×£]] ×\91×\93פ×\99×\9d ×\90×\97ר×\99×\9d ×\90×\95 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ×\9c×\97פש ×\90ת ×\94×\93×£ ×\91×\99×\95×\9e× ×\99×\9d]</span>, ×\90×\9a ×\90×\99×\9f ×\9c×\9a ×\94רש×\90×\94 ליצור את הדף.",
"missing-revision": "גרסה #$1 של הדף \"{{FULLPAGENAME}}\" אינה קיימת.\n\nזה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
"userpage-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.\nאנא בִּדקו אם ברצונכם ליצור/לערוך את הדף הזה.",
"userpage-userdoesnotexist-view": "חשבון המשתמש \"$1\" אינו רשום.",
"blocked-notice-logextract": "{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.\nהפעולה האחרונה ביומן החסימות מוצגת להלן:",
- "clearyourcache": "<strong>×\94ער×\94:</strong> ×\9c×\90×\97ר ×\94ש×\9e×\99ר×\94, ×\99×\99ת×\9b×\9f שתצ×\98ר×\9b×\95 ×\9c× ×§×\95ת ×\90ת ×\96×\99×\9bר×\95×\9f ×\94×\9e×\98×\9e×\95×\9f (cache) ש×\9c ×\94×\93פ×\93פ×\9f ×\9b×\93×\99 ×\9c×\94×\91×\97×\99×\9f ×\91ש×\99× ×\95×\99×\99×\9d.\n* <strong>פ×\99×\99רפ×\95קס / ספ×\90ר×\99:</strong> ×\9c×\97צ×\95 ×\95×\94×\97×\96×\99ק×\95 ×\90ת ×\94×\9eקש <em>Shift</em> ×\91עת ×\9c×\97×\99צת×\9b×\9d ×¢×\9c <strong>×\98×¢×\99× ×\94 ×\9e×\97×\93ש</strong> (Reload), ×\90×\95 ×\9c×\97צ×\95 ×¢×\9c צ×\99ר×\95×£ ×\94×\9eקש×\99×\9d <em>Ctrl-F5</em> ×\90×\95 <em>Ctrl-R</em>‏ (<em><span dir=\"ltr\">â\8c\98-R</span></em> ×\91×\9e×\97ש×\91 ×\9eק)\n* <strong>×\92×\95×\92×\9c ×\9bר×\95×\9d:</strong> ×\9c×\97צ×\95 ×¢×\9c צ×\99ר×\95×£ ×\94×\9eקש×\99×\9d <em>Ctrl-Shift-R</em>‏ (<em><span dir=\"ltr\">â\8c\98-Shift-R</span></em> ×\91×\9e×\97ש×\91 ×\9eק)\n* <strong>×\90×\99× ×\98×¨× ×\98 ×\90קספ×\9c×\95רר:</strong> ×\9c×\97צ×\95 ×\95×\94×\97×\96×\99ק×\95 ×\90ת ×\94×\9eקש <em>Ctrl</em> ×\91עת ×\9c×\97×\99צת×\9b×\9d ×¢×\9c <strong>×¨×¢× ×\9f</strong> (Refresh), ×\90×\95 ×\9c×\97צ×\95 ×¢×\9c צ×\99ר×\95×£ ×\94×\9eקש×\99×\9d <em>Ctrl-F5</em>\n* <strong>×\90×\95פר×\94:</strong> × ×§×\95 ×\90ת ×\94×\9e×\98×\9e×\95×\9f ×\91Ö¾<em>Toolsâ\80\8f â\86\90 Preferences</em>",
+ "clearyourcache": "<strong>×\94ער×\94:</strong> ×\9c×\90×\97ר ×\94ש×\9e×\99ר×\94, ×\99×\99ת×\9b×\9f ש×\99×\94×\99×\94 צ×\95ר×\9a ×\9c× ×§×\95ת ×\90ת ×\96×\99×\9bר×\95×\9f ×\94×\9e×\98×\9e×\95×\9f (cache) ש×\9c ×\94×\93פ×\93פ×\9f ×\9b×\93×\99 ×\9c×\94×\91×\97×\99×\9f ×\91ש×\99× ×\95×\99×\99×\9d.\n* <strong>פ×\99×\99רפ×\95קס / ספ×\90ר×\99:</strong> ×\9c×\94×\97×\96×\99ק ×\90ת ×\94×\9eקש <em>Shift</em> ×\91עת ×\9c×\97×\99צ×\94 ×¢×\9c <strong>×\98×¢×\99× ×\94 ×\9e×\97×\93ש</strong> (Reload), ×\90×\95 ×\9c×\9c×\97×\95×¥ ×¢×\9c צ×\99ר×\95×£ ×\94×\9eקש×\99×\9d <em>Ctrl-F5</em> ×\90×\95 <em>Ctrl-R</em> (×\91×\9e×\97ש×\91 ×\9eק: <em dir=\"ltr\">â\8c\98-R</em>)\n* <strong>×\92×\95×\92×\9c ×\9bר×\95×\9d:</strong> ×\9c×\9c×\97×\95×¥ ×¢×\9c צ×\99ר×\95×£ ×\94×\9eקש×\99×\9d <em>Ctrl-Shift-R</em> (×\91×\9e×\97ש×\91 ×\9eק: <em dir=\"ltr\">â\8c\98-Shift-R</em>)\n* <strong>×\90×\99× ×\98×¨× ×\98 ×\90קספ×\9c×\95רר:</strong> ×\9c×\9c×\97×\95×¥ ×\95×\9c×\94×\97×\96×\99ק ×\90ת ×\94×\9eקש <em>Ctrl</em> ×\91עת ×\9c×\97×\99צ×\94 ×¢×\9c <strong>×¨×¢× ×\9f</strong> (Refresh), ×\90×\95 ×\9c×\9c×\97×\95×¥ ×¢×\9c צ×\99ר×\95×£ ×\94×\9eקש×\99×\9d <em>Ctrl-F5</em>\n* <strong>×\90×\95פר×\94:</strong> ×\9cפת×\95×\97 <em>תפר×\99×\98 â\86\90 ×\94×\92×\93ר×\95ת</em> (×\91×\9e×\97ש×\91 ×\9eק <em>Opera â\86\90 ×\94×¢×\93פ×\95ת</em>) ×\95×\90×\96 ×\9c×\9c×\97×\95×¥ ×¢×\9c <em>פר×\98×\99×\95ת ×\95×\90×\91×\98×\97×\94 â\86\90 ×\9e×\97ק ×\94×\99ס×\98×\95ר×\99×\99ת ×\92×\9c×\99ש×\94 â\86\90 Cached images and files</em>.",
"usercssyoucanpreview": "<strong>עצה:</strong> השתמשו בכפתור \"{{int:showpreview}}\" כדי לבחון את גיליון ה־CSS החדש שלכם לפני השמירה.",
"userjsyoucanpreview": "<strong>עצה:</strong> השתמשו בכפתור \"{{int:showpreview}}\" כדי לבחון את סקריפט ה־JavaScript החדש שלכם לפני השמירה.",
"usercsspreview": "<strong>זִכרו שזו רק תצוגה מקדימה של גיליון ה־CSS שלכם.\nהוא עדיין לא נשמר!</strong>",
"editwarning-warning": "עזיבת דף זה עשויה לגרום לאובדן כל השינויים שביצעתם.\nאם אתם מחוברים לחשבון, תוכלו לבטל אזהרה זו בחלק \"{{int:prefs-editing}}\" שבהעדפות שלכם.",
"editpage-notsupportedcontentformat-title": "סוג התוכן אינו נתמך",
"editpage-notsupportedcontentformat-text": "תוכן מסוג $1 אינו נתמך על־ידי מודל התוכן $2.",
- "content-model-wikitext": "×\98קס×\98 ויקי",
+ "content-model-wikitext": "ק×\95×\93 ויקי",
"content-model-text": "טקסט פשוט",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
"mergehistory-fail-permission": "הרשאות לא מספיקות למיזוג היסטוריה.",
"mergehistory-fail-self-merge": "דף המקור זהה לדף היעד.",
"mergehistory-fail-timestamps-overlap": "גרסאות המקור חופפות או מגיעות אחרי גרסאות היעד.",
- "mergehistory-fail-toobig": "לא ניתן לבצע את מיזוג הגרסאות כיוון שצריך להעביר יותר גרסאות מהמגבלה, שהיא {{PLURAL:$1|גרסה אחת|֫$1 גרסאות}}.",
+ "mergehistory-fail-toobig": "לא ניתן לבצע את מיזוג הגרסאות כיוון שצריך להעביר יותר גרסאות מהמגבלה, שהיא {{PLURAL:$1|גרסה אחת|$1 גרסאות}}.",
"mergehistory-no-source": "דף המקור $1 אינו קיים.",
"mergehistory-no-destination": "דף היעד $1 אינו קיים.",
"mergehistory-invalid-source": "דף המקור חייב להיות בעל כותרת תקינה.",
"mergehistory-invalid-destination": "דף היעד חייב להיות בעל כותרת תקינה.",
- "mergehistory-autocomment": "×\9e×\99×\96×\92 ×\90ת [[:$1]] לתוך [[:$2]]",
- "mergehistory-comment": "×\9e×\99×\96×\92 ×\90ת [[:$1]] לתוך [[:$2]]: $3",
+ "mergehistory-autocomment": "×\94×\93×£ [[:$1]] ×\9e×\95×\96×\92 לתוך [[:$2]]",
+ "mergehistory-comment": "×\94×\93×£ [[:$1]] ×\9e×\95×\96×\92 לתוך [[:$2]]: $3",
"mergehistory-same-destination": "דפי המקור והיעד זהים",
"mergehistory-reason": "סיבה:",
"mergelog": "יומן מיזוגים",
"searchrelated": "קשור",
"searchall": "הכול",
"showingresults": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} החל ממספר <strong>$2</strong>:",
- "showingresultsinrange": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} בין המספרים <strong>$2</strong> ו־<strong>$3</strong>:",
+ "showingresultsinrange": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} בין המספרים <strong>$2</strong> ו־<strong>$3</strong>:",
"search-showingresults": "{{PLURAL:$4|תוצאה <strong>$1</strong> מתוך <strong>$3</strong>|תוצאות <strong>$1 - $2</strong> מתוך <strong>$3</strong>}}",
"search-nonefound": "לא נמצאו תוצאות המתאימות לחיפוש.",
"search-nonefound-thiswiki": "לא נמצאו תוצאות המתאימות לחיפוש באתר זה.",
"powersearch-ns": "חיפוש על־פי מרחבי שם:",
"powersearch-togglelabel": "בחירה:",
"powersearch-toggleall": "הכול",
- "powersearch-togglenone": "אף אחד",
+ "powersearch-togglenone": "×\90×£ ×\9c×\90 ×\90×\97×\93",
"powersearch-remember": "שמירת הבחירה עבור חיפושים עתידיים",
"search-external": "חיפוש חיצוני",
"searchdisabled": "חיפוש ב{{grammar:תחילית|{{SITENAME}}}} אינו מופעל כעת.\nבינתיים אפשר לחפש באמצעות גוגל.\nשימו לב שייתכן שהמידע של {{SITENAME}} שם אינו מעודכן.",
"prefs-help-gender": "אין חובה למלא העדפה זו.\nהמערכת משתמשת במידע זה כדי לפנות אליך/אלייך ולציין את שם המשתמש שלך במין הדקדוקי הנכון.\nהמידע יהיה ציבורי.",
"email": "דוא\"ל",
"prefs-help-realname": "אין חובה למלא את השם האמיתי.\nהשם האמיתי עשוי לשמש כדי לייחס לך את עבודתך.",
- "prefs-help-email": "כתובת דואר אלקטרוני היא אופציונלית, אבל היא חיונית לאיפוס הסיסמה במקרה שתשכחו אותה.",
+ "prefs-help-email": "כתובת דואר אלקטרוני היא אופציונלית, אבל היא חיונית לאיפוס הסיסמה במקרה ש{{GENDER:|תשכח|תשכחי}} אותה.",
"prefs-help-email-others": "באפשרותך גם לבחור לאפשר לאחרים ליצור איתך קשר באמצעות דוא\"ל דרך קישור בדף המשתמש או בדף השיחה שלך.\nכתובת הדוא\"ל שלך לא תיחשף כשמשתמשים אחרים ייצרו איתך קשר.",
"prefs-help-email-required": "כתובת דואר אלקטרוני נדרשת לכתיבה באתר.",
"prefs-info": "מידע בסיסי",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ראו גם [[Special:NewPages|רשימת דפים חדשים]])",
"recentchanges-legend-plusminus": "(''±123'')",
"recentchanges-submit": "הצגה",
- "rcnotefrom": "×\9c×\94×\9c×\9f {{PLURAL:$5|×\94ש×\99× ×\95×\99 ש×\91×\95צע|×\94ש×\99× ×\95×\99×\99×\9d ש×\91×\95צע×\95}} ×\94×\97×\9c ×\9eâ\80\8fâ\80\8fÖ«Ö¾<b>$2</b> (×¢×\93 <b>$1</b> ×\9e×\95צ×\92×\99×\9d).",
+ "rcnotefrom": "×\9c×\94×\9c×\9f {{PLURAL:$5|×\94ש×\99× ×\95×\99 ש×\91×\95צע|×\94ש×\99× ×\95×\99×\99×\9d ש×\91×\95צע×\95}} ×\9e×\90×\96 <strong>$3, $4</strong> (×\9e×\95צ×\92×\99×\9d ×¢×\93 <strong>$1</strong>).",
"rclistfrom": "הצגת שינויים חדשים החל מ־$2, $3",
"rcshowhideminor": "$1 עריכות משניות",
"rcshowhideminor-show": "הצגת",
"brokenredirects-delete": "מחיקה",
"withoutinterwiki": "דפים ללא קישורי שפה",
"withoutinterwiki-summary": "הדפים הבאים אינם מקשרים לגרסאות שלהם בשפות אחרות:",
- "withoutinterwiki-legend": "×\94×\93פ×\99×\9d ×\94×\9eת×\97×\99×\9c×\99×\9d ×\91â\80¦",
+ "withoutinterwiki-legend": "ת×\97×\99×\9c×\99ת",
"withoutinterwiki-submit": "הצגה",
"fewestrevisions": "הדפים בעלי מספר העריכות הנמוך ביותר",
"nbytes": "{{PLURAL:$1|בית אחד|$1 בתים}}",
"mostimages": "הקבצים המקושרים ביותר",
"mostinterwikis": "הדפים עם המספר הרב ביותר של קישורי בינוויקי",
"mostrevisions": "הדפים עם מספר העריכות הגבוה ביותר",
- "prefixindex": "רש×\99×\9eת ×\94×\93פ×\99×\9d ×\94×\9eת×\97×\99×\9c×\99×\9d ×\91â\80¦",
- "prefixindex-namespace": "רש×\99×\9eת ×\94×\93פ×\99×\9d ×\94×\9eת×\97×\99×\9c×\99×\9d ×\91â\80¦ (במרחב השם $1)",
+ "prefixindex": "×\9b×\9c ×\93פ×\99×\9d ×¢×\9d ×\94ת×\97×\99×\9c×\99ת",
+ "prefixindex-namespace": "×\9b×\9c ×\93פ×\99×\9d ×¢×\9d ×\94ת×\97×\99×\9c×\99ת (במרחב השם $1)",
"prefixindex-submit": "הצגה",
"prefixindex-strip": "הסתרת התחילית ברשימה",
"shortpages": "דפים קצרים",
"listgrouprights-rights": "הרשאות",
"listgrouprights-helppage": "Help:הרשאות",
"listgrouprights-members": "(רשימת חברים)",
+ "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code dir=\"ltr\">($2)</code></span>",
"listgrouprights-addgroup": "הוספת {{PLURAL:$2|הקבוצה|הקבוצות}}: $1",
"listgrouprights-removegroup": "הסרת {{PLURAL:$2|הקבוצה|הקבוצות}}: $1",
"listgrouprights-addgroup-all": "הוספת כל הקבוצות",
"undeletedrevisions-files": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}} ו{{PLURAL:$2|קובץ אחד|־$2 קבצים}} שוחזרו",
"undeletedfiles": "{{PLURAL:$1|שוחזר קובץ אחד|שוחזרו $1 קבצים}}",
"cannotundelete": "השחזור נכשל:\n$1",
- "undeletedpage": "'''הדף $1 שוחזר בהצלחה.'''\n\nראו את [[Special:Log/delete|יומן המחיקות]] לרשימה של מחיקות ושחזורים אחרונים.",
+ "undeletedpage": "<strong>הדף $1 שוחזר</strong>\n\nראו את [[Special:Log/delete|יומן המחיקות]] לרשימה של המחיקות והשחזורים שבוצעו לאחרונה.",
"undelete-header": "ראו את [[Special:Log/delete|יומן המחיקות]] לדפים שנמחקו לאחרונה.",
"undelete-search-title": "חיפוש דפים שנמחקו",
"undelete-search-box": "חיפוש דפים שנמחקו",
"cant-move-category-page": "אין לך הרשאה להעביר דפי קטגוריה.",
"cant-move-to-category-page": "אין לך הרשאה להעביר דף לדף קטגוריה.",
"newtitle": "השם החדש:",
- "move-watch": "מעקב אחר דף המקור ואחר דף היעד",
+ "move-watch": "מעקב אחרי דף המקור ואחרי דף היעד",
"movepagebtn": "העברה",
"pagemovedsub": "ההעברה הושלמה בהצלחה",
"movepage-moved": "הדף \"$1\" הועבר לשם \"$2\".",
"articleexists": "קיים כבר דף באותו שם, או שהשם שבחרת אינו תקין.\nנא לבחור שם אחר.",
"cantmove-titleprotected": "אין לך הרשאה להעביר את הדף לכאן, כי השם החדש מוגן מפני יצירה.",
"movetalk": "העברה גם של דף השיחה",
- "move-subpages": "×\94×¢×\91רת ×\9b×\9c ×\93פ×\99 ×\94×\9e×©× ×\94 (×¢×\93 $1)",
- "move-talk-subpages": "×\94×¢×\91רת ×\9b×\9c ×\93פ×\99 ×\94×\9e×©× ×\94 ש×\9c ×\93×£ ×\94ש×\99×\97×\94 (×¢×\93 $1)",
+ "move-subpages": "העברת דפי המשנה (עד $1)",
+ "move-talk-subpages": "העברת דפי המשנה של דף השיחה (עד $1)",
"movepage-page-exists": "הדף $1 קיים כבר ולא ניתן לדרוס אותו אוטומטית.",
"movepage-page-moved": "הדף $1 הועבר לשם $2.",
"movepage-page-unmoved": "לא ניתן להעביר את הדף $1 לשם $2.",
"import-upload-filename": "שם הקובץ:",
"import-comment": "הערה:",
"importtext": "נא לייצא את הקובץ מאתר המקור באמצעות ב[[Special:Export|כלי הייצוא]].\nשמרו אותו למחשב שלכם והעלו אותו לכאן.",
- "importstart": "×\9e×\99×\99×\91×\90 ×\93פ×\99×\9dâ\80¦",
+ "importstart": "×\99×\99×\91×\95×\90 ×\93פ×\99×\9d...",
"import-revision-count": "‏{{PLURAL:$1|גרסה אחת|$1 גרסאות}}",
"importnopages": "אין דפים לייבוא.",
"imported-log-entries": "{{PLURAL:$1|יובאה פעולת יומן אחת|יובאו $1 פעולות יומן}}.",
"tooltip-ca-nstab-category": "צפייה בדף הקטגוריה",
"tooltip-minoredit": "סימון עריכה זו כמשנית",
"tooltip-save": "שמירת השינויים שלך",
+ "tooltip-publish": "פרסום השינויים שלך",
"tooltip-preview": "תצוגה מקדימה של השינויים שלך. נא להשתמש באפשרות זו לפני השמירה.",
"tooltip-diff": "צפייה בשינויים שערכתם בטקסט",
"tooltip-compareselectedversions": "צפייה בהשוואת שתי גרסאות של דף זה",
"notificationemail_body_removed": "מישהו, כנראה אתם (מכתובת ה־IP הזאת: $1),\nהסיר את כתובת הדואר האלקטרוני של החשבון \"$2\" ב{{grammar:תחילית|{{SITENAME}}}}.\n\nאם לא אתם עשיתם זאת, אנא צרו קשר מיידי עם מפעיל מערכת באתר.",
"scarytranscludedisabled": "[הכללת דפים בין אתרים מבוטלת]",
"scarytranscludefailed": "[אחזור התבנית נכשל עבור $1]",
- "scarytranscludefailed-httpstatus": "[אחזור התבנית נכשל עבור $1‏: HTTP $2]",
+ "scarytranscludefailed-httpstatus": "[אחזור התבנית נכשל עבור $1: מצב HTTP $2]",
"scarytranscludetoolong": "[כתובת ה־URL ארוכה מדי]",
"deletedwhileediting": "<strong>אזהרה:</strong> דף זה נמחק לאחר שהתחלת לערוך!",
"confirmrecreate": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו, מהסיבה הבאה:\n: <em>$2</em>\nיש לאשר שאכן ברצונך ליצור מחדש את הדף.",
"htmlform-user-not-valid": "<strong>$1</strong> אינו שם משתמש תקין.",
"sqlite-has-fts": "$1 עם תמיכה בחיפוש בטקסט מלא",
"sqlite-no-fts": "$1 ללא תמיכה בחיפוש בטקסט מלא",
- "logentry-delete-delete": "$1 {{GENDER:$2|מחק|מחקה}} את הדף $3‏",
- "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3‏",
+ "logentry-delete-delete": "$1 {{GENDER:$2|מחק|מחקה}} את הדף $3",
+ "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3",
"logentry-delete-event": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4",
"logentry-delete-revision": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} בדף $3: $4",
"logentry-delete-event-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של פעולות יומן של $3",
"logentry-import-upload": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 באמצעות העלאת קובץ",
"logentry-import-upload-details": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 באמצעות העלאת קובץ ({{PLURAL:$4|גרסה אחת|$4 גרסאות}})",
"logentry-import-interwiki": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מאתר ויקי אחר",
- "logentry-import-interwiki-details": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מ־$5‏ ({{PLURAL:$4|גרסה אחת|$4 גרסאות}})‏",
+ "logentry-import-interwiki-details": "$1 {{GENDER:$2|ייבא|ייבאה}} את $3 מ־$5‏ ({{PLURAL:$4|גרסה אחת|$4 גרסאות}})",
"logentry-merge-merge": "$1 {{GENDER:$2|מיזג|מיזגה}} את $3 לתוך $4 (גרסאות עד $5)",
- "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}}‏",
- "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} בלי להשאיר הפניה",
- "logentry-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה",
- "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה",
+ "logentry-move-move": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4",
+ "logentry-move-move-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4 בלי להשאיר הפניה",
+ "logentry-move-move_redir": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4 תוך דריסת הפניה",
+ "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|העביר|העבירה}} את הדף $3 לשם $4 תוך דריסת הפניה ובלי להשאיר הפניה",
"logentry-patrol-patrol": "$1 {{GENDER:$2|סימן|סימנה}} את הגרסה $4 בדף $3 כבדוקה",
"logentry-patrol-patrol-auto": "$1 {{GENDER:$2|סימן|סימנה}} אוטומטית את הגרסה $4 בדף $3 כבדוקה",
"logentry-newusers-newusers": "חשבון המשתמש $1 {{GENDER:$2|נוצר}}",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|הפעיל|הפעילה}} הגנה על הדף $3 $4 [מדורג]",
"logentry-protect-modify": "$1 {{GENDER:$2|שינה|שינתה}} את רמת ההגנה של הדף $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|שינה|שינתה}} את רמת ההגנה של הדף $3 $4 [מדורג]",
- "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של {{GENDER:$3|$3}} מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}‏",
- "logentry-rights-rights-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3‏",
+ "logentry-rights-rights": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של {{GENDER:$6|$3}} מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}",
+ "logentry-rights-rights-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את ההרשאות של $3",
"logentry-rights-autopromote": "$1 קודם אוטומטית מ{{GRAMMAR:תחילית|$4}} ל{{GRAMMAR:תחילית|$5}}",
"logentry-upload-upload": "$1 {{GENDER:$2|העלה|העלתה}} את $3",
"logentry-upload-overwrite": "$1 {{GENDER:$2|העלה|העלתה}} גרסה חדשה של $3",
"log-description-tag": "הדף הזה מראה מתי משתמשים הוסיפו [[Special:Tags|תגיות]] לגרסאות או רשומות יומן מסוימות או הסירו אותן. היומן אינו מציג פעולות תיוג שבוצעו כחלק מעריכה, מחיקה או פעולה דומה.",
"logentry-tag-update-add-revision": "$1 {{GENDER:$2|הוסיף|הוסיפה}} את {{PLURAL:$7|התגית|התגיות}} $6 לגרסה $4 של הדף $3",
"logentry-tag-update-add-logentry": "$1 {{GENDER:$2|הוסיף|הוסיפה}} את {{PLURAL:$7|התגית|התגיות}} $6 לרשומת היומן $5 של הדף $3",
- "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|×\94ס×\99ר|×\94ס×\99ר×\94}} ×\90ת {{PLURAL:$9|×\94ת×\92×\99ת|×\94ת×\92×\99×\95ת}} $8 ×\9e×\94×\92רס×\94 $4 ש×\9c ×\94×\93×£ $3",
+ "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|הסיר|הסירה}} את {{PLURAL:$9|התגית|התגיות}} $8 מגרסה $4 של הדף $3",
"logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|הסיר|הסירה}} את {{PLURAL:$9|התגית|התגיות}} $8 מרשומת היומן $5 של הדף $3",
"logentry-tag-update-revision": "$1 {{GENDER:$2|עדכן|עדכנה}} את התגיות בגרסה $4 של הדף $3 ({{PLURAL:$7|הוסיף|הוסיפה}} את $6; {{PLURAL:$9|הסיר|הסירה}} את $8)",
"logentry-tag-update-logentry": "$1 {{GENDER:$2|עדכן|עדכנה}} את התגיות ברשומת היומן $5 של הדף $3 ({{PLURAL:$7|הוסיף|הוסיפה}} את $6; {{PLURAL:$9|הסיר|הסירה}} את $8)",
"api-error-nomodule": "שגיאה פנימית: מודול ההעלאה אינו מוגדר.",
"api-error-ok-but-empty": "שגיאה פנימית: אין תשובה מהשרת.",
"api-error-overwrite": "לא מותרת החלפת קובץ קיים.",
+ "api-error-ratelimited": "ניסית להעלות בזמן קצר יותר קבצים מכמה שהוויקי הזה מרשה.\nנא לנסות שוב בעוד מספר דקות.",
"api-error-stashfailed": "שגיאה פנימית: השרת נכשל באחסון הקובץ הזמני.",
"api-error-publishfailed": "שגיאה פנימית: השרת נכשל בפרסום הקובץ הזמני.",
"api-error-stasherror": "הייתה שגיאה בהעלאת הקובץ לסליק.",
"thursday": "četvrtak",
"friday": "petak",
"saturday": "subota",
- "sun": "Ned",
- "mon": "Pon",
- "tue": "Uto",
- "wed": "Sri",
- "thu": "Ä\8cet",
- "fri": "Pet",
- "sat": "Sub",
+ "sun": "ned",
+ "mon": "pon",
+ "tue": "uto",
+ "wed": "sri",
+ "thu": "Ä\8det",
+ "fri": "pet",
+ "sat": "sub",
"january": "siječnja",
"february": "veljače",
"march": "ožujka",
"아라",
"Tisave",
"Bfpage",
- "Macofe"
+ "Macofe",
+ "Lucas"
]
},
"tog-underline": "Souliyen lyen yo :",
"morenotlisted": "Lis sa a pa konplè.",
"mypage": "Paj",
"mytalk": "Diskisyon",
- "anontalk": "Paj diskisyon pou adrès IP sa",
+ "anontalk": "Diskite",
"navigation": "Navigasyon",
"and": " epi",
"qbfind": "Chache",
"virus-scanfailed": "Rechèch an pa ritounen pyès rezilta (kòd $1)",
"virus-unknownscanner": "antiviris nou pa konnen :",
"logouttext": "'''Ou dekonekte kounye a.'''\n\nOu mèt kontinye itilize {{SITENAME}} san ou pa idantifye, oubyen ou ka <span class='plainlinks'>[$1 rekonekte]</span> w ankò ak menm non an oubyen yon lòt.\nNote ke kèk paj gendwa afiche tankou ou te toujou konekte tank ou pa efase kach nan navigatè ou.",
+ "welcomeuser": "Byenveni, $1 !",
"yourname": "Non itilizatè ou an :",
"userlogin-yourname": "Non itilizatè",
"userlogin-yourname-ph": "Rantre non itilizatè w",
"resetpass-submit-cancel": "Anile",
"resetpass-wrong-oldpass": "Mopas sa pa bon ditou; li te mèt mopas ou an kounye a oubyen yon mopas tanporè.\nGendwa ou te deja modifye li oubyen ou te mande yon nouvo mopas tanporè.",
"resetpass-temp-password": "Mopas tanporè yo ba ou an:",
+ "passwordreset-username": "Non itilizatè :",
"bold_sample": "Tèks fonse",
"bold_tip": "Tèks fonse",
"italic_sample": "Tèks italik",
"allpagesprefix": "Montre paj yo ki ap komanse pa prefiks sa a :",
"categories": "Kategori yo",
"categoriespagetext": "Kategori ki ap swiv {{PLURAL:$1|la|yo}} gen lòt paj oubien medya nan yo.\n[[Special:UnusedCategories|Kategori ki pa itilize]] pa parèt la.\nGade tou [[Special:WantedCategories|kategori moun mande]].",
- "special-categories-sort-count": "klase pa valè",
- "special-categories-sort-abc": "klase alfabetikalman",
"linksearch": "Lyen andeyò",
"listgrouprights-members": "(lis manm yo)",
"emailuser": "Voye yon mesaj (imèl) pou itilizatè sa a",
+ "noemailtext": "Itilizatè sa pa te espesifye yon adrès imel ki valab.",
"watchlist": "Lis swivi mwen",
"mywatchlist": "Lis swivi mwen",
"addedwatchtext": "Paj « [[:$1]] » te byen ajoute nan [[Special:Watchlist|lis swivi ou an]].\nDepi kounye a, tout modifikasyon nan paj sa a ak nan paj diskisyon li pral parèt <b>fonse</b> nan [[Special:RecentChanges|lis chanjman ki fèk fèt]] pou ou ka wè yo pi byen.",
"tog-watchdefault": "Az általam szerkesztett lapok és fájlok felvétele a figyelőlistámra",
"tog-watchmoves": "Az általam átnevezett lapok és fájlok felvétele a figyelőlistámra",
"tog-watchdeletion": "Az általam törölt lapok és fájlok felvétele a figyelőlistámra",
+ "tog-watchuploads": "Általam feltöltött új fájlok hozzáadása a figyelőlistámhoz",
"tog-watchrollback": "Az általam visszaállított lapok felvétele a figyelőlistámra",
"tog-minordefault": "Alapértelmezetten minden szerkesztésemet jelölje aprónak",
"tog-previewontop": "Előnézet megjelenítése a szerkesztőablak előtt",
"tags-edit-revision-legend": "Címkék hozzáadás vagy eltávolítása {{PLURAL:$1|ehhez a változathoz|mind a(z) $1 változathoz}}",
"tags-edit-logentry-legend": "Címkék hozzáadás vagy eltávolítása {{PLURAL:$1|ehhez a napló bejegyzéshez|mind a(z) $1 napló bejegyzéshez}}",
"tags-edit-existing-tags": "Létező címkék:",
- "tags-edit-existing-tags-none": "„Nincs”",
+ "tags-edit-existing-tags-none": "<em>Nincs</em>",
"tags-edit-new-tags": "Új címkék:",
"tags-edit-add": "Alábbi címkék hozzáadása:",
"tags-edit-remove": "Alábbi címkék eltávolítása:",
"tags-edit-reason": "Ok:",
"tags-edit-revision-submit": "Változások alkalmazás {{PLURAL:$1|ehhez a|$1}} változathoz",
"tags-edit-logentry-submit": "Változások alkalmazás {{PLURAL:$1|ehhez a|$1}} napló bejegyzéshez",
- "tags-edit-success": "A változások sikeresen alkalmazva.",
+ "tags-edit-success": "A változások alkalmazva.",
"tags-edit-failure": "A változásokat nem sikerült alkalmazni:\n$1",
"tags-edit-nooldid-title": "Érvénytelen változat",
"tags-edit-nooldid-text": "Nem adtál meg a változatot, vagy a megadott változat nem létezik.",
"tog-watchdefault": "Ավելացնել իմ խմբագրած էջերը և նիշքերը իմ հսկացանկում",
"tog-watchmoves": "Ավելացնել իմ վերնավանած էջերը և նիշքերը իմ հսկացանկում",
"tog-watchdeletion": "Ավելացնել իմ ջնջած էջերը և նիշքերը իմ հսկացանկում",
+ "tog-watchuploads": "Իմ բեռնած նիշքերը ավելացնել իմ հսկացանկում",
"tog-watchrollback": "Իմ հետ շրջած էջերն ավելացնել իմ հսկացանկում",
"tog-minordefault": "Բոլոր խմբագրումները լռելյայն կերպով նշել որպես չնչին",
"tog-previewontop": "Ցույց տալ նախադիտումը խմբագրման դաշտից առաջ",
"october-date": "Հոկտեմբերի $1",
"november-date": "Նոյեմբերի $1",
"december-date": "Դեկտեմբերի $1",
+ "period-am": "AM",
+ "period-pm": "PM",
"pagecategories": "{{PLURAL:$1|Կատեգորիա|Կատեգորիաներ}}",
"category_header": "«$1» կատեգորիայի հոդվածները",
"subcategories": "Ենթակատեգորիաներ",
"view-pool-error": "Ներեցեք, սերվերները գերբեռնված են այս պահին։\nՇատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը կրկին դիտելու համար։\n\n$1",
"generic-pool-error": "Ներեցեք, սերվերները գերբեռնված են այս պահին։\nՇատ օգտվողներ փորձում են դիտել այս էջը։\nԽնդրում ենք սպասել որոշ ժամանակ էջը կրկին դիտելու համար։",
"pool-errorunknown": "Անհայտ սխալ",
+ "poolcounter-usage-error": "Օգտագործման սխալ՝ $1",
"aboutsite": "{{grammar:genitive|{{SITENAME}}}} մասին",
"aboutpage": "Project:Էությունը",
"copyright": "Կայքի բովանդակությունը թողարկված է $1 թույլատրագրով, եթե այլ բան նշված չէ։",
"pagetitle": "$1 — {{SITENAME}}",
"retrievedfrom": "Ստացված է «$1» էջից",
"youhavenewmessages": "Դուք ունեք $1 ($2)։",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Դուք ունեք}} $1 {{PLURAL:$3|այլ մասնակից|$3 մասնակցից}} ($2):",
"youhavenewmessagesmanyusers": "Դուք ունեք $1 մի քանի օգտագործողից ($2)։",
"newmessageslinkplural": "{{PLURAL:$1|նոր հաղորդագրություն|999=նոր հաղորդագրություններ}}",
"newmessagesdifflinkplural": "վերջին {{PLURAL:$1|փոփոխում|999=փոփոխումներ}}",
"filerenameerror": "Չհաջողվեց «$1» նիշքը վերանվանել «$2»։",
"filedeleteerror": "Չհաջողվեց ջնջել «$1» ֆայլը։",
"directorycreateerror": "Չհաջողվեց ստեղծել «$1» պանակը։",
+ "directoryreadonlyerror": "$1 թղթապանակը միայն ընթերցելու համար է:",
"filenotfound": "Չհաջողվեց գտնել «$1» ֆայլը։",
"unexpected": "Անսպասելի արժեք. «$1»=«$2»։",
"formerror": "Սխալ. չհաջողվեց փոխանցել տվյալները",
"customjsprotected": "Դուք չեք կարող խմբագրել այս ՋավաՍկրիպտ էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։",
"mycustomcssprotected": "Դուք բավարար իրավունքներ չունեք այս CSS էջը խմբագրելու համար։",
"mycustomjsprotected": "Դուք բավարար իրավունքներ չունեք այս JavaScript էջը խմբագրելու համար։",
+ "myprivateinfoprotected": "Դուք իրավասու չեք խմբագրել Ձեր անձնական տեղեկությունը:",
"mypreferencesprotected": "Դուք բավարար իրավունքներ չունեք Ձեր նախընտրությունները խմբագրելու համար։",
"ns-specialprotected": "«{{ns:special}}» անվանատարածքի էջերը չեն կարող խմբագրվել։",
"titleprotected": "Այս անվանմամբ էջի ստեղծումը արգելվել է [[User:$1|$1]] մասնակցի կողմից։\nՏրված պատճառն է՝ <em>$2</em>։",
"virus-scanfailed": "զննման սխալ (կոդ $1)",
"virus-unknownscanner": "անծանոթ հակավիրուս՝",
"logouttext": "<strong>Դուք դուրս եկաք համակարգից։</strong>\n\nԻ նկատի ունեցեք, որ որոշ էջեր կարող են ցուցադրվել այնպես՝ ինչպես եթե դեռ համակարգում լինեիք մինչև որ չջնջեք ձեր զննարկիչի հիշապահեստը։",
+ "cannotlogoutnow-title": "Այժմ դուրս գալ անհնար է",
+ "cannotlogoutnow-text": "$1 օգտագործելիս դուրս գալն անհնար է:",
"welcomeuser": "Բարի գալո՜ւստ, $1",
"welcomecreation-msg": "Ձեր հաշիվն ստեղծված է։\nՉմոռանաք փոփոխել ձեր [[Special:Preferences|նախընտրությունները]]։",
"yourname": "Մասնակցի անուն՝",
"remembermypassword": "Հիշել իմ մուտքը այս դիտարկչում ($1 {{PLURAL:$1|օրից}} ոչ ավել ժամկետով)",
"userlogin-remembermypassword": "Մուտք գործած մնալ",
"userlogin-signwithsecure": "Օգտագործել անվտանգ միացում",
+ "cannotloginnow-title": "Այժմ դուրս գալ անհնար է",
+ "cannotloginnow-text": "$1 օգտագործելիս դուրս գալն անհնար է:",
"yourdomainname": "Ձեր դոմենը՝",
"password-change-forbidden": "Այս վիքիում չեք կարող փոխել գաղտնաբառ։",
"externaldberror": "Տեղի է ունեցել վավերացման արտաքին տվյալների բազայի սխալ, կամ դուք չունեք բավարար իրավունքներ ձեր արտաքին հաշվի փոփոխման համար։",
"wrongpassword": "Մուտքագրված գաղտնաբառը սխալ էր։ Խնդրում ենք կրկին փորձել։",
"wrongpasswordempty": "Մուտքագրված գաղտնաբառը դատարկ էր։ Խնդրում ենք կրկին փորձել։",
"passwordtooshort": "Գաղտնաբառը պետք է պարունակի առնվազն {{PLURAL:$1|1 սիմվոլ|$1 սիմվոլ}}։",
+ "passwordtoolong": "Ծածկագիրը չի կարող գերազանցել {{PLURAL:$1|1 նիշը|$1 նիշը}}:",
"password-name-match": "Գաղտնաբառը պետք է տարբեր լինել ձեր մասնակցի անունից։",
"password-login-forbidden": "Այս ծածկանվան և գաղտնաբառի օգտագործումն արգելված է",
"mailmypassword": "Փոխել գաղտնաբառը",
"noemailprefs": "Այս հնարավորության գործածման համար անհրաժեշտ է նշել էլ-փոստի հասցե։",
"emailconfirmlink": "Վավերացնել ձեր էլ-փոստի հասցեն",
"invalidemailaddress": "Նշված էլ-փոստի հասցեն անընդունելի է, քանի որ այն ունի անթույլատրելի ֆորմատ։ Խնդրում ենք նշել ճշմարիտ հասցե կամ այս դաշտը թողնել դատարկ։",
+ "cannotchangeemail": "Այս վիքիում մասնակցային հաշվի էլ.փոստի փոփոխությունն անհնար է:",
"emaildisabled": "Այս կայքը չի կարող ուղարկել էլ․ նամակներ։",
"accountcreated": "Հաշիվը ստեղծված է",
"accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|քննարկում]]) մասնակցի հաշիվը ստեղծված է։",
"createaccount-title": "{{SITENAME}}. մասնակցային հաշվի ստեղծում",
"createaccount-text": "Ինչ-որ մեկը ստեղծել է «$2» անվանմամբ մասնակցային հաշիվ «$3» գաղտնաբառով {{SITENAME}} ($4) նախագծում՝ նշելով ձեր էլ-հասցեն։ Ձեզ անհրաժեշտ է մտնել համակարգ և փոխել գաղտնաբառը։\n\nԿարող եք անտեսել այս հաղորդագրությունը, եթե հաշիվը ստեղծվել է սխալմամբ։",
"login-throttled": "Դուք կատարել եք չափից շատ մուտքի փորձ։\nԽնդրում ենք սպասել $1 կրկին փորձելուց առաջ։",
+ "login-abort-generic": "Մուտք գործելը ձախողվեց: Մերժված է:",
+ "login-migrated-generic": "Ձեր մասնակցային հաշիվը տեղափոխվել է, և Ձեր մասնակցային անունն այլևս գոյություն չունի այս վիքիում:",
"loginlanguagelabel": "Լեզու՝ $1",
"pt-login": "Մուտք գործել",
"pt-login-button": "Մտնել",
"newpassword": "Նոր գաղտնաբառը.",
"retypenew": "Հաստատեք նոր գաղտնաբառը.",
"resetpass_submit": "Հաստատել գաղտնաբառը և մտնել համակարգ",
- "changepassword-success": "Ձեր գաղտնաբառը հաջողությամբ փոխված է։",
+ "changepassword-success": "Ձեր գաղտնաբառը փոփոխվեց։",
+ "botpasswords": "Բոտերի ծածկագրեր",
+ "botpasswords-disabled": "Բոտերի ծածկագրերն անջատված են:",
+ "botpasswords-existing": "Գոյություն ունեցող բոտային ծածկագրերը",
+ "botpasswords-createnew": "Ստեղծել նոր բոտային ծածկագիր",
+ "botpasswords-editexisting": "Խմբագրել առկա բոտային ծածկագիրը",
+ "botpasswords-label-appid": "Բոտի անուն՝",
+ "botpasswords-label-create": "Ստեղծել",
+ "botpasswords-label-update": "Թարմացնել",
+ "botpasswords-label-cancel": "Չեղարկել",
+ "botpasswords-label-delete": "Ջնջել",
+ "botpasswords-label-resetpassword": "Վերականգնել ծածկագիրը",
+ "botpasswords-label-restrictions": "Օգտագործման սահմանափակումներ:",
+ "botpasswords-label-grants-column": "Թույլատրված է",
+ "botpasswords-bad-appid": "\"$1\" բոտի անունն անթույլատրելի է:",
+ "botpasswords-created-title": "Բոտի ծածկագիրը ստեղծվել է",
+ "botpasswords-created-body": "$2 մասնակցի $1 բոտի համար բոտի ծածկագիրը ստեղծվել է:",
+ "botpasswords-updated-title": "Բոտի ծածկագիրը թարմացվել է",
+ "botpasswords-updated-body": "$2 մասնակցի $1 բոտի համար բոտի ծածկագիրը ստեղծվել է:",
+ "botpasswords-deleted-title": "Բոտի ծածկագիրը ջնջված է",
+ "botpasswords-deleted-body": "$2 մասնակցի $1 բոտի համար բոտի ծածկագիրը ջնջվել է:",
"resetpass_forbidden": "Գաղտնաբառը չի կարող փոխվել",
"resetpass-no-info": "Այս էջին ուղիղ դիմելու համար անհրաժեշտ է մտնել համակարգ։",
"resetpass-submit-loggedin": "Փոխել գաղտնաբառը",
"tog-watchdefault": "Tambahkan halaman yang saya sunting ke daftar pantauan",
"tog-watchmoves": "Tambahkan halaman yang saya pindahkan ke daftar pantauan",
"tog-watchdeletion": "Tambahkan halaman yang saya hapus ke daftar pantauan",
+ "tog-watchuploads": "Tambahkan berkas baru yang saya unggah ke daftar pantauan",
"tog-watchrollback": "Tambahkan halaman yang pernah saya kembalikan ke dalam daftar pantauan saya",
"tog-minordefault": "Tandai semua suntingan sebagai suntingan kecil secara baku",
"tog-previewontop": "Perlihatkan pratayang sebelum kotak sunting dan tidak sesudahnya",
"databaseerror-query": "Kueri: $1",
"databaseerror-function": "Fungsi: $1",
"databaseerror-error": "Kesalahan: $1",
+ "transaction-duration-limit-exceeded": "Untuk mencegah penundaan replikasi yang tinggi, pengiriman ini dibatalkan karena durasi tulis ($1) melebihi batas $2 {{PLURAL:$2|detik|detik}}.\nJika Anda ingin mengganti banyak butir sekaligus, cobalah melakukan dalam operasi yang lebih kecil.",
"laggedslavemode": "Peringatan: Halaman mungkin tidak berisi perubahan terbaru.",
"readonly": "Basis data dikunci",
"enterlockreason": "Masukkan alasan penguncian, termasuk perkiraan kapan kunci akan dibuka",
"noemail": "Tidak ada alamat surel yang tercatat untuk pengguna \"$1\".",
"noemailcreate": "Anda perlu menyediakan alamat surel yang sah",
"passwordsent": "Kata sandi baru telah dikirimkan ke alamat surel yang didaftarkan untuk \"$1\".\nSilakan masuk log kembali setelah menerima surel tersebut.",
- "blocked-mailpassword": "Alamat IP Anda diblokir dari penyuntingan sehingga tidak diizinkan menggunakan fungsi pengingat kata sandi untuk mencegah penyalahgunaan.",
+ "blocked-mailpassword": "Alamat IP Anda diblokir dari penyuntingan. Untuk mencegah penyalahgunaan, Anda tidak diperkenankan untuk memulihkan kata sandi Anda melalui alamat IP ini.",
"eauthentsent": "Sebuah surel untuk konfirmasi telah dikirim ke alamat surel. Sebelum surel lainnya dikirim ke akun tersebut, Anda harus mengikuti instruksi di dalam surel tersebut, untuk melakukan konfirmasi bahwa alamat tersebut adalah benar kepunyaan Anda.",
"throttled-mailpassword": "Suatu pengingat kata sandi telah dikirimkan dalam {{PLURAL:$1|$1 jam}} terakhir.\nUntuk menghindari penyalahgunaan, hanya satu kata sandi yang akan dikirimkan setiap {{PLURAL:$1|$1 jam}}.",
"mailerror": "Kesalahan dalam mengirimkan surel: $1",
"createaccount-title": "Pembuatan akun untuk {{SITENAME}}",
"createaccount-text": "Seseorang telah membuat sebuah akun untuk alamat surel Anda di {{SITENAME}} ($4) dengan nama \"$2\" dan kata sandi \"$3\". Anda dianjurkan untuk masuk log dan mengganti kata sandi Anda sekarang.\n\nAnda dapat mengabaikan pesan ini jika akun ini dibuat karena suatu kesalahan.",
"login-throttled": "Anda sudah terlalu sering mencoba masuk log.\nSilakan menunggu $1 sebelum mencoba lagi.",
- "login-abort-generic": "Proses masuk Anda tidak berhasil - Dibatalkan",
+ "login-abort-generic": "Proses masuk log Anda tidak berhasil - Dibatalkan",
"login-migrated-generic": "Akun Anda telah dimigrasi, dan nama pengguna Anda tidak lagi terdaftar di wiki ini.",
"loginlanguagelabel": "Bahasa: $1",
"suspicious-userlogout": "Permintaan Anda untuk keluar log ditolak karena tampaknya dikirim oleh penjelajah yang rusak atau proksi penyinggah.",
"newpassword": "Kata sandi baru:",
"retypenew": "Ketik ulang kata sandi baru:",
"resetpass_submit": "Atur kata sandi dan masuk log",
- "changepassword-success": "Kata sandi Anda telah berhasil diubah!",
+ "changepassword-success": "Kata sandi Anda telah diubah!",
"changepassword-throttled": "Anda terlalu sering mencoba masuk log.\nMohon tunggu $1 sebelum mencoba lagi.",
"botpasswords": "Kata sandi bot",
"botpasswords-disabled": "Kata sandi bot dinonaktifkan.",
"uploaded-script-svg": "Terdapat elemen terskrip \"$1\" dalam berkas SVG yang diunggah.",
"uploaded-hostile-svg": "Terdapat CSS yang tidak aman dalam elemen gaya berkas SVG yang diunggah.",
"uploaded-event-handler-on-svg": "Penetapan atribut <i>event-handler</i> $1=\"$2\" tidak diizinkan dalam berkas SVG.",
+ "uploaded-setting-event-handler-svg": "Penyetelan atribut event-handler diblokir, menemukan <code><$1 $2=\"$3\"></code> dalam berkas SVG yang diunggah.",
"uploadscriptednamespace": "Berkas SVG ini memuat ruang nama ilegal \"$1\"",
"uploadinvalidxml": "XML dalam berkas yang diunggah tidak bisa diuraikan.",
"uploadvirus": "Berkas tersebut mengandung virus! Rincian: $1",
"mw-widgets-dateinput-placeholder-day": "TTTT-BB-HH",
"mw-widgets-dateinput-placeholder-month": "TTTT-BB",
"api-error-blacklisted": "Pilih judul lain yang deskriptif",
- "randomrootpage": "Halaman dasar sembarang"
+ "randomrootpage": "Halaman dasar sembarang",
+ "log-action-filter-block": "Jenis pemblokiran:",
+ "log-action-filter-block-block": "Blokir",
+ "log-action-filter-suppress-block": "Perahasiaan pengguna menurut pemblokiran"
}
"thursday": "ера",
"friday": "пӀаьраска",
"saturday": "шоатта",
- "sun": "К|и",
+ "sun": "КIиранди",
"mon": "Ор",
"tue": "Шин",
"wed": "Кха",
"april": "Тушоли бутт",
"may_long": "Села бутт",
"june": "Этинга бутт",
- "july": "Баьцамеа\\Меа бутт",
+ "july": "Баьцамеа бутт",
"august": "Мяцхали бутт",
"september": "Тов\\Михий бутт",
"october": "Ардарий\\АьрхIий бутт",
"november": "Лай чилла бутт",
"december": "Чан-тар бутт",
- "january-gen": "Ð\9dажгамÑ\81Ñ\85ой бетт",
+ "january-gen": "Ð\90гIой бетт",
"february-gen": "Саь-кур бетт",
"march-gen": "Муттхьол бетт",
"april-gen": "Тушоли бетт",
"may-gen": "Села бетт",
"june-gen": "Этинга бетт",
- "july-gen": "Баьцамеа\\Меа бетт",
+ "july-gen": "Баьцамеа бетт",
"august-gen": "Мецхали бетт",
"september-gen": "Тов\\Михий бетт",
"october-gen": "Ардарий\\АьрхIий бетт",
"oct": "Ардарий\\АьрхIий",
"nov": "Лай чилла",
"dec": "Чан-тар",
- "january-date": "Ð\9dажгамÑ\81Ñ\85ой $1",
+ "january-date": "Ð\90гIой бÑ\83Ñ\82Ñ\82 $1",
"february-date": "Саь-кур бутт $1",
"march-date": "Муттхьол $1",
"april-date": "Тушоли $1",
"period-am": "ДЦ",
"period-pm": "ДТ",
"pagecategories": "{{PLURAL:$1|1=Категори|Категореш}}",
- "category_header": "\"$1\" Катага чура оаг|онаш",
+ "category_header": "«$1» категори чура оагIонаш",
"subcategories": "Чуракатагаш",
"category-media-header": "\"$1\" Категори чура файлаш",
"category-empty": "''Укх катага чу цхьаккха оаг|онаш е паьлаш яц.''",
"category-subcat-count-limited": "Укх катагa чу {{PLURAL:$1|1=$1 к|алкатаг|$1 к|алкатагаш}}.",
"category-article-count": "{{PLURAL:$2|Укх катага цхьа оаг|ув мара чулоацац.|{{PLURAL:$1|1=$1 оаг|ув хьахекха я|$1 оаг|oнаш хьахекха я}} укх катага $2 йолачарeх.}}",
"category-article-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 оаг|ув|$1 оаг|oнаш}}.",
- "category-file-count": "{{PLURAL:$2|Укх катагори чу цаI мара файл дац.|{{PLURAL:$1|1=$1 файл хьахьокхаш я|$1 файл хьахьокхаш я}} укх категори $2 долачарeх.}}",
+ "category-file-count": "{{PLURAL:$2|Укх катагори чу цаI мара файл яц.|{{PLURAL:$1|1=$1 файл хьахьокхаш я|$1 файл хьахьокхаш я}} укх категори $2 долачарeх.}}",
"category-file-count-limited": "Укх катага чу {{PLURAL:$1|1=$1 лурдар|$1 лурдараш}}.",
- "listingcontinuesabbrev": "д|ахо",
+ "listingcontinuesabbrev": "(дIахо)",
"index-category": "Д|ахьожама оаг|онаш",
"noindex-category": "Д|ахьожаманза оаг|онаш",
"broken-file-category": "Паьла хьожадергашца болхбеш йоаца оаг|онаш",
"permalink": "Даиман латташ йола хьожаярг",
"print": "Кепатохар",
"view": "Хьажар",
- "view-foreign": "Ð\9cазаоаг|он Ñ\87Ñ\83 $1 хьажа",
+ "view-foreign": "УкÑ\85 $1 Ñ\8fÑ\85 Ñ\81айÑ\82а Ñ\87Ñ\83 хьажа",
"edit": "Нийсде",
"edit-local": "Хувца локальни йоазонца сурт оттадар",
"create": "Хьаде",
"aboutsite": "{{grammar:genitive|{{SITENAME}}}} лаьца",
"aboutpage": "Project:Лоацам",
"copyright": "$1 чулоацамаца тIакхоачаш да.",
- "copyrightpage": "{{ns:project}}:ЯздаÑ\8cÑ\87Ñ\83нна бокÑ\8aо",
+ "copyrightpage": "{{ns:project}}:Ð\90вÑ\82оÑ\80а бокÑ\8aонаÑ\88",
"currentevents": "ХӀанзара хинна хIамаш",
"currentevents-url": "Project:ХӀанзара хинна хIамаш",
"disclaimers": "Бехктокхам хьацаэцар",
"disclaimerpage": "Project:Бехктокхам хьацаэцар",
- "edithelp": "Хувцама гӀо",
+ "edithelp": "Хувцам бара новкъостал",
"helppage-top-gethelp": "ГӀо",
"mainpage": "Кертера оагӀув",
"mainpage-description": "Кертера оагӀув",
"nstab-project": "Проектах лаьца",
"nstab-image": "Файл",
"nstab-mediawiki": "Хоам",
- "nstab-template": "Ð\9aеп",
+ "nstab-template": "Ð\9bо",
"nstab-help": "ГӀо",
"nstab-category": "Категори",
"mainpage-nstab": "Кертера оагӀув",
"internalerror_info": "Чура гӀалат: $1",
"cannotdelete-title": "ОагIув дIаяккха йиш яц \"$1\"",
"badtitle": "Мегаш йоаца цӀи",
- "badtitletext": "Езаш йола оагӀува цӀи нийса яц, яьсса я, е харцахь я меттаюкъара цIи е интервики цӀи. Иштта, цӀера юкъе оттаде мегаш доаца хьаракъаш нийсаденна хила тарлуш да.",
- "viewsource": "Ð\91IаÑ\80гÑ\82аÑ\81Ñ\81ам",
+ "badtitletext": "Езаш йола оагӀон цӀи нийса яц, яьсса я, е харцахь йоалаяй меттай юкъера цIи е интервики цӀи. Иштта, цӀера юкъе оттаде мегаш доаца хьаракъаш нийсаденна хила тарлуш да.",
+ "viewsource": "Ð¥Ñ\8cажаÑ\80",
"actionthrottled": "Сихален овзамал",
"protectedpagetext": "Ер оаг|ув къайла я хувцамаш дергдоацаш е кхы дола х|амдараш.",
"virus-unknownscanner": "довзашдоаца мазаундохьалург:",
"userlogin-yourname-ph": "Чуйоалае доакъашхочун цӀи",
"createacct-another-username-ph": "Чуйоалае доакъашхочун цӀи",
"yourpassword": "КъайладIоагӀа:",
+ "userlogin-yourpassword": "Пароль",
"yourpasswordagain": "КъайладIоагӀа юха Ӏоязаде:",
"remembermypassword": "(укх $1 {{PLURAL:$1|1=ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац",
"yourdomainname": "Шун цӀеноагӀув:",
"loginlanguagelabel": "Мотт: $1",
"pt-login": "Чувала/яла",
"pt-createaccount": "Учёта яздар кхолла",
+ "pt-userlogout": "Аравала/яла",
"changepassword": "КъайладIоaгIа дIахувцар",
"oldpassword": "Къаьна къайладIоагӀа:",
"newpassword": "Керда къайладIоагӀа:",
"summary": "Хувцамий белгалдер",
"subject": "БӀагал/кортале:",
"minoredit": "ЗӀамига хувцам",
- "watchthis": "УкÑ\85 оагÓ\80Ñ\83ва Ñ\82еÑ\80кам бе",
- "savearticle": "ОагӀув хьаязъе",
+ "watchthis": "Ð\97ем бе Ñ\83кÑ\85 оагÓ\80он",
+ "savearticle": "ОагӀув дIаязъе",
"preview": "Хьалхе бӀаргтассар",
- "showpreview": "Хьалхе бӀаргтaссам",
+ "showpreview": "Хьалххе хьажар",
"showdiff": "Даь хувцамаш",
"anoneditwarning": "Зем хила! Шо кхы чудаьннадац. Шун IP-моттиг укх хийца оагӀув искаречу дӀаяздаь хургья.",
"summary-preview": "Лоацам ба:",
"loginreqpagetext": "Кхыйола оагӀувнашка хьожаргдолаш, оаш $1 де деза.",
"accmailtitle": "КъайладIоагӀа дӀадахьийтад",
"newarticle": "(Kерда)",
- "newarticletext": "Шо хьожаяргаца дехьадаьннад йоаца оагӀув тӀа.\nИз кхолларгьйолаш кӀалхагӀа доала корачу текст Iочуязаде (нагахьа кхетаде хала дале [$1 новкъосталан оагӀувага] хьажа).\nЦа ховш укхаза нийсденнадале, шоай браузера кнопка '''Юха''' тӀа пӀелга тоӀабе.",
+ "newarticletext": "Шо хьожаяргаца дехьадаьннад йоаца оагӀон тӀа.\nИз кхолларгьйолаш кӀалхагӀа доала корачу текст Iочуязаде (нагахьа кхетаде хала дале [$1 новкъосталан оагӀонга] хьажа).\nЦа ховш укхаза нийсденнадале, шоай браузера '''Юха''' (назад) кнопка тӀа пӀелга тоӀабе.",
"noarticletext": "ХIанз укх оагӀув тӀа текст яц.\nШун аьттув ба [[Special:Search/{{PAGENAME}}|цу тайпара цӀи хьоаяр кораде]] кхыйола йоазуваш чу, иштта\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола тептарий яздаьраш], е\n'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув кхолла]'''</span>.",
"noarticletext-nopermission": "ХIанз укх оагӀув тӀа яздам дац.\nШун йиш я, кхыдола йоазувнашках [[Special:Search/{{PAGENAME}}|дола цӀерий хаттам корае]] е <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].</span>",
"note": "'''ХӀамоалар:'''",
"previewnote": "'''Хьалхе б|аргтассам мара бац.'''\nЯздам кхы яздаь дац!",
"editing": "Хувцам: $1",
- "editingsection": "Хувцам: $1 (оагӀува дáкъа)",
+ "editingsection": "Хувцам: $1 (оагӀон дáкъа)",
"editingcomment": "ГӀалатнийсдар $1 (керда декъам)",
"editconflict": "ГӀалатнийсдара къовсам: $1",
"yourtext": "Хьа яздам",
"templatesused": "Укх бӀаргоагӀувни оагӀув тӀа лелаяь {{PLURAL:$1|1=Куцкеп|Куцкепаш}}:",
"templatesusedpreview": "Хьалхе бӀаргтассама оагӀув тӀа леладеш дола {{PLURAL:$1|1=Куцкеп|Куцкепаш}}:",
"template-protected": "(лорадаь да)",
- "template-semiprotected": "(дакъа-лорам)",
+ "template-semiprotected": "(цхьа долча даькъе гIо оттадаь да)",
"hiddencategories": "Ер оагӀув укх {{PLURAL:$1|1=къайла цатегаца|къайла цатегашца}} дакъа лоаца:",
"permissionserrorstext-withaction": "$2 де бокъо яц {{PLURAL:$1|1=из бахьан долаш|из бахьанаш долаш}}:",
"recreate-moveddeleted-warn": "'''Зем бе! Шо хьалххе дIайоаккхаш хинна оагӀув хьае гӀерта.'''\n\nХьажа, бокъонцахь езаш йолга.\nКӀалхагIа укх оагӀуви дӀадаккхами цӀи хувцами тептараш хьекха да.",
- "moveddeleted-notice": "Ер оагӀув дӀаяккха хиннай.\nНовкъостала, кӀалха хьахьекха да дӀадаккхама а хувцама а тептарашкара яздараш.",
+ "moveddeleted-notice": "Ер оагӀув дӀаяккха хиннай.\nНовкъостала, кӀалха хьахьекха да дӀадаккхама а хувцама а тептарашкара дIаяздараш.",
"log-fulllog": "Деррига таптара бӀаргтасса",
"edit-conflict": "Хувцамий къовсам.",
"post-expand-template-inclusion-warning": "Зембаккхам: жамIан чIабалаш чулоаца дустам геттара доккха да.\nЦхьадола чIабалаш чулоацалургдац.",
"post-expand-template-inclusion-category": "Чулоаца чIабала мегаш дола дустам дукхалена тӀехьайоала оагӀувнаш",
"post-expand-template-argument-warning": "Зем бе! Ер оагӀув цаӀ куцкепа |аьлдош мара чулоацац, юхадастара сел доккха дустам йолаш.\nЦу тайпара |аьлдешаш ӀокӀаладаькха да.",
"post-expand-template-argument-category": "Куцкепий теркамза |аьлдешаш чулоаца оагӀувнаш",
- "viewpagelogs": "Укх оагӀува тептараш хьокха",
+ "viewpagelogs": "Укх оагӀон тептараш хьокха",
"currentrev-asof": "тӀеххьара верси $1",
"revisionasof": "Верси $1",
"revision-info": "$1; $2 хувцам",
"previousrevision": "← Xьалхарча",
"nextrevision": "ТIехьайоагIараш →",
"currentrevisionlink": "ХIанзара верси",
- "cur": "хӀанз.",
+ "cur": "хӀанза.",
"next": "тӀехь.",
- "last": "хьалх.",
+ "last": "хьалха.",
"page_first": "хьалхара",
"page_last": "тӀехьара",
"histlegend": "Кхетам: (хӀанз.) = хӀанза йолачунна бӀаргоагӀувни хьакъоастам ба; (хьалх.) = хьалха хинначунна бӀаргоагӀувни хьакъоастам ба; '''зӀ''' = зӀамига хьахувцам ба.",
"searchresults": "Лахар чакхдоалаш корадаьр",
"searchresults-title": "«$1» лахар",
"notextmatches": "ОагIувнаша яздамий вIашагIакхетараш дац",
- "prevn": "{{PLURAL:$1|хьалхйоагlар $1|хьалхйоагlараш $1|хьалхйоагlараш $1}}",
+ "prevn": "{{PLURAL:$1|1=хьалхайогIар|хьалхайогIараш}} $1",
"nextn": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1",
"prevn-title": "{{PLURAL:$1|1=$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}",
- "nextn-title": "{{PLURAL:$1|1=$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}",
+ "nextn-title": "{{PLURAL:$1|ТIадоагIа $1 яздар|ТIадоагIа $1 яздараш}}",
"shown-title": "Хьóкха $1 {{PLURAL:$1|даь йоазо|даь йоазонаш}} укх оáгIувна тIа",
- "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) хьажа",
+ "viewprevnext": "ДIахьажа ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''Укх масса-хьахьоадайтамач ер оаг|ув \"[[:$1]]\" я'''",
"searchmenu-new": "<strong>Кхолла оагIув «[[:$1]]» укх вики-проекте!</strong>\n{{PLURAL:$2|0=|Иштта хьажа хьай лийха оагIувнага.|Иштта хьажа хьай лахара хьахиннарашка.}}",
"searchprofile-articles": "Кертера оагIонаш",
"searchprofile-advanced-tooltip": "Iочуязаяь цIераренашках лаха",
"search-result-size": "$1 ({{PLURAL:$2|$2 дош|$2 дешаш}})",
"search-result-category-size": "{{PLURAL:$1|1=$1 дакъа|$1 дакъаш}} ({{PLURAL:$2|1=$2 кIалцатег|$2 кIалцатегаш}}, {{PLURAL:$3|1=$3 паьла|$3 паьлий}})",
- "search-redirect": "($1 дехьачуяьккхар)",
+ "search-redirect": "(дIа-сахьожадар $1 тIара)",
"search-section": " (дакъа $1)",
"search-suggest": "Хьона эшар ер хила мега: $1",
"search-interwiki-caption": "Гаргалон хьахьоадайтамаш",
"search-relatedarticle": "шоайл дола",
"searchrelated": "гаргара",
"searchall": "деррига",
- "search-nonefound": "Ð\94IаÑ\85аÑ\82Ñ\82ама нийÑ\81амаÑ\88 корадаьдац.",
+ "search-nonefound": "Ð¥Ñ\8cа деÑ\85аÑ\80 даÑ\80а вIаÑ\88и нийÑ\81а доагIаÑ\88 Ñ\85илаÑ\80 корадаьдац.",
"powersearch-legend": " Доккха тахкар",
"powersearch-ns": " ЦIерий аренашкахь лахар",
"powersearch-toggleall": "Деррига",
"nchanges": "$1 {{PLURAL:$1|1=хувцам|хувцамаш}}",
"enhancedrc-history": "истори",
"recentchanges": "Керда хувцамаш",
- "recentchanges-legend": "Ð\9aеÑ\80да Ñ\85Ñ\83вÑ\86амий оттамаш",
+ "recentchanges-legend": "Ð\9aеÑ\80да Ñ\85Ñ\83вÑ\86амай оттамаш",
"recentchanges-summary": "КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да {{grammar:genitive|{{SITENAME}}}}.",
"recentchanges-feed-description": "Укх ларамца тIехьара массахувцамашт теркам бе.",
"recentchanges-label-newpage": "Укх хувцамаца керда оагIув кхелла хиннай",
"recentchanges-label-minor": "Ер зIамига хувцам ба",
"recentchanges-label-bot": "Ер хувцам ботаца баь ба",
- "recentchanges-label-unpatrolled": "Ð\95Ñ\80 Ñ\85Ñ\83вÑ\86ам Ñ\88ий моÑ\82Ñ\82иге кÑ\85Ñ\8b дIадеÑ\85Ñ\8cаÑ\8fÑ\8cккÑ\85аÑ\8fц.",
+ "recentchanges-label-unpatrolled": "УкÑ\85 Ñ\85Ñ\83вÑ\86ама Ñ\85Iанза Ñ\86Ñ\85Ñ\8cанно Ñ\85а (паÑ\82Ñ\80Ñ\83лиÑ\80оваÑ\82Ñ\8c) даÑ\8c дац.",
"recentchanges-label-plusminus": "байташкахь боарам хувцар",
"recentchanges-legend-heading": "<strong>Легенда: </strong>",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа иштта [[Special:NewPages|керда оагIувнашка]])",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (хьажа иштта [[Special:NewPages|керда оагIонашка]])",
"rcnotefrom": "КIалхагIа хувцамаш хьахьекха я <strong>$2</strong> денза (<strong>$1</strong> кхачалца).",
- "rclistfrom": "$3 $2 тIара хувцамаш хьахьокха",
- "rcshowhideminor": "$1 зIамига хувцамаш",
+ "rclistfrom": "$3 $2 денза даь хувцамаш хьахьокха",
+ "rcshowhideminor": "$1 зIамига нийсдараш",
"rcshowhideminor-hide": "Къайлдаккха",
"rcshowhidebots": "$1 боташ",
"rcshowhidebots-show": "Хьахьокха",
"rcshowhideliu": "$1 бовзийтарчара доакъашхой",
- "rcshowhideliu-hide": "Ð\9aÑ\8aайлдаккха",
- "rcshowhideanons": "$1 цIияьккханза дакъалаьцархой",
+ "rcshowhideliu-hide": "Ð\9aÑ\8aайлабаха",
+ "rcshowhideanons": "$1 цIияккханза доакъашхой",
"rcshowhideanons-show": "Хьахьокха",
- "rcshowhideanons-hide": "Ð\9aÑ\8aайлдаккха",
+ "rcshowhideanons-hide": "Ð\9aÑ\8aайлабаха",
"rcshowhidepatr": "$1 теркам даь хувцамаш",
- "rcshowhidemine": "$1 Ñ\81ай Ñ\85Ñ\83вÑ\86амаш",
+ "rcshowhidemine": "$1 Ñ\85Ñ\8cа нийÑ\81даÑ\80аш",
"rcshowhidemine-hide": "Къайлдаккха",
- "rclinks": "$2 динах<br />$3 $1 хинна тIехьара хувцамаш хьахьокха",
+ "rclinks": "Хьахьокха $2 дийнахь даь хинна тIеххьара $1 хувцамаш\n<br />$3",
"diff": "башхало",
"hist": "истори",
"hide": "Къайлдаккха",
"recentchangeslinked": "Гаргалон хувцамаш",
"recentchangeslinked-feed": "Гаргалон хувцамаш",
"recentchangeslinked-toolbox": "Укханца вIашагIдувзаденна хувцамаш",
- "recentchangeslinked-title": "$1ца хьалаьца хувцамаш",
+ "recentchangeslinked-title": "$1ца вIашидувзаденна хувцамаш",
"recentchangeslinked-summary": "Ер, Iинк яь йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашкий дагарле я.\n[[Special:Watchlist|Шун теркама дагарленашках]] чуйоагIа оагIувнаш '''белгалаяь я'''.",
"recentchangeslinked-page": "ОагIува цIи",
"recentchangeslinked-to": "ОагIувнаш тIа хувцамаш хьахьокха, хьахьекха йола оагIув тIа Iинкаш еш йола.",
"brokenredirects-delete": "дIадаккха",
"withoutinterwiki-submit": "Хьахьокха",
"nbytes": "$1 {{PLURAL:$1|байт}}",
- "nmembers": "$1 {{PLURAL:$1|1=дакъалаьцархо|дакъалаьцархой}}",
+ "nmembers": "$1 {{PLURAL:$1|объект}}",
"prefixindex": "ОагIувнаший хьалхера цIи хьагойтар",
"shortpages": "Лоаца оагIувнаш",
"longpages": "Доккхий оагIувнаш",
"move": "ЦIи хувца",
"movethispage": "Укх оагIува цIи хувца",
"pager-newer-n": "{{PLURAL:$1|кердагIа дара|кердагIа дараш|кердагIа долачаьрахь}} $1",
- "pager-older-n": "{{PLURAL:$1|кÑ\8aаÑ\8cнаÑ\80а даÑ\80а|кÑ\8aаÑ\8cнаÑ\80а даÑ\80аÑ\88|кÑ\8aаÑ\8cнаÑ\80а долaÑ\87аÑ\8cÑ\80аÑ\85Ñ\8c}} $1",
+ "pager-older-n": "{{PLURAL:$1|кÑ\8aаÑ\8cнаÑ\80а даÑ\80а|кÑ\8aаÑ\8cнаÑ\80а даÑ\80аÑ\88|кÑ\8aаÑ\8cнаÑ\80а долaÑ\87аÑ\80еÑ\85}} $1",
"booksources": "Джейнай хьасташ (источники)",
"booksources-search-legend": "Джейнах лаьца хоам лахар",
"booksources-search": "Хьалáха",
"prevpage": "($1) хьалхара оагIув",
"allpagesfrom": "Цу тайпара ювлаж йола оагIувнаш белгал е:",
"allpagesto": "Укх оагIувнаш тIа бIарга дита:",
- "allarticles": "Еррига оагIувнаш",
+ "allarticles": "Еррига оагIонаш",
"allpagessubmit": "Кхоачашде",
"categories": "Категореш",
"linksearch": "Т|ера|инкаш лахар",
"invert": "Харжар юхадаккха",
"namespace_association": "Ювзаенна мотт",
"blanknamespace": "(Кертера)",
- "contributions": "{{GENDER:$1|Доакъашхочунна}} къахьегам",
+ "contributions": "{{GENDER:$1|Доакъашхочун}} къахьегам",
"contributions-title": "$1 дакъалаьцархочунна къахьегам",
"mycontris": "Са къахьегам",
+ "anoncontribs": "Къахьегам",
"contribsub2": "{{GENDER:$3|$1}} ($2) баь болх",
"uctop": "(xIанзара)",
- "month": "ЦÑ\85Ñ\8cан бетт (кхы хьалхагIа)",
- "year": "ЦÑ\85Ñ\8cан Ñ\88еÑ\80а (кхы хьалхагIа):",
+ "month": "УкÑ\85 бетт (кхы хьалхагIа)",
+ "year": "УкÑ\85 Ñ\88еÑ\80 (кхы хьалхагIа):",
"sp-contributions-newbies": "Керда даязья йоазоначера мара баь бола къахьегам ма хьокха",
"sp-contributions-blocklog": "чIегаш",
"sp-contributions-uploads": "чуяьккхамаш",
"istemplate": "юкъейоалаяр",
"isimage": "Файлан хьожаярг",
"whatlinkshere-prev": "{{PLURAL:$1|1=хьалхайоагIа|хьалхайоагIараш}} $1",
- "whatlinkshere-next": "{{PLURAL:$1|1=тIехьайоагIа|тIехьайоагIараш}} $1",
+ "whatlinkshere-next": "{{PLURAL:$1|1=тIехьайоагIар|тIехьайоагIараш}} $1",
"whatlinkshere-links": "← хьожаяргаш",
"whatlinkshere-hideredirs": "$1 дIа-хьа чуяьккхамаш",
"whatlinkshere-hidetrans": "$1 чуяьккхамаш",
"movepage-moved": "'''\"$1\" оагув \"$2\" хьийца я'''",
"articleexists": "Изза мо цIи йола оагIув, йолаш я е оаш тила цIи мегаш яц.\nДехар да, кхыйола цIи хьаржа.",
"movetalk": "МаIан чулоаца дувцама оагIувни цIи хувца",
- "movelogpage": "Ð¥Ñ\83вÑ\86ама тептар",
+ "movelogpage": "ЦIи Ñ\85Ñ\83вÑ\86аÑ\80а тептар",
"movereason": "Бахьан",
"revertmove": "юхаяьккха",
"export": "ОагIувий эхфортам",
"thumbnail-more": "Доккха де",
"thumbnail_error": "ЗIамигасуртанчий кхеллама гIалат: $1",
"import-upload-filename": "ПаьлацIи:",
- "tooltip-pt-userpage": "Дакъалаьцархочунна оагIув",
+ "tooltip-pt-userpage": "{{GENDER:|Хьа}} доакъашхочунна оагIув",
"tooltip-pt-mytalk": "Шун дувцамий оагIув",
- "tooltip-pt-preferences": "Шун оттамаш",
+ "tooltip-pt-preferences": "{{GENDER:|Хьа оттамаш}}",
"tooltip-pt-watchlist": "ОоагIувна дагарле, шо бIаргалокхаш йола",
"tooltip-pt-mycontris": "Шун хувцамаш",
"tooltip-pt-login": "Укхаза хьай цIи аьле чувала/яла йиша я, амма из параз дац",
"tooltip-ca-talk": "ОагIон чулоацам дувца оттадар",
"tooltip-ca-edit": "Нийсъе ер оагIув",
"tooltip-ca-addsection": "Керда дакъа хьаде",
- "tooltip-ca-viewsource": "Ð\95Ñ\80 оагIÑ\83в Ñ\85Ñ\83вÑ\86амаÑ\85 лоÑ\80аÑ\8fÑ\8c Ñ\8f, амма Ñ\88Ñ\83н Ñ\86Ñ\83нна гIÑ\83вамага Ñ\85Ñ\8cажа бокъо я.",
+ "tooltip-ca-viewsource": "Ð\95Ñ\80 оагIÑ\83в Ñ\85Ñ\83вÑ\86амбаÑ\80аÑ\85 гIо Ñ\82еÑ\85а (лоÑ\80аÑ\8f) Ñ\8f, амма Ñ\86Ñ\83нна дIадолалÑ\83 Ñ\82екÑ\81Ñ\82ага Ñ\85Ñ\8cажа а, из Ñ\82IеÑ\80Ñ\85Ñ\8cаÑ\8fзÑ\8aе а бокъо я.",
"tooltip-ca-history": "Укх оагIон даь хувцамаш тIа дола тептар",
"tooltip-ca-protect": "Eр оагIув лорае",
"tooltip-ca-delete": "Ер оагIув дIаяькха",
- "tooltip-ca-move": "Укх оагIува цIи хувца",
+ "tooltip-ca-move": "Укх оагIон цIи хувца",
"tooltip-ca-watch": "Ер оагIув хьай теркам беча каьхата тIа тIаяьккха",
"tooltip-ca-unwatch": "Ер оагIув теркам беча каьхата тIара дIаяькха",
"tooltip-search": "Хьалáха {{grammar:prepositional|{{SITENAME}}}} чу",
"tooltip-ca-nstab-special": "Ер гIулакха оагIув я, из хувца бокъо яц",
"tooltip-ca-nstab-project": "Проектан оагIув",
"tooltip-ca-nstab-image": "Файлан оагӀув",
- "tooltip-ca-nstab-template": "Ð\9aепан оагIув",
+ "tooltip-ca-nstab-template": "Ð\9bон оагIув",
"tooltip-ca-nstab-help": "ГӀон оагIув",
"tooltip-ca-nstab-category": "Категорий оагӀув",
"tooltip-minoredit": "Ер хувцар башха доаца санна белгалде",
- "tooltip-save": "Ð¥Ñ\83вÑ\86амаÑ\88 кÑ\85оде",
- "tooltip-preview": "Ð\9eагIÑ\83в Ñ\82Iа Ñ\85Ñ\8cалÑ\85е бIаÑ\80гÑ\82аÑ\81Ñ\81аÑ\80, деÑ\85аÑ\80 да, оагIÑ\83в дIаÑ\8fзÑ\8aелаÑ\8cÑ\85, Ñ\86Ñ\83н Ñ\82еÑ\80кам бе.",
- "tooltip-diff": "Яздам Ñ\82Iа Ñ\8fÑ\8c йола хувцамаш хьахьокха",
+ "tooltip-save": "Ð¥Ñ\8cай Ñ\85Ñ\83вÑ\86амаÑ\88 лоÑ\80адеÑ\88 дIаÑ\8fзаде",
+ "tooltip-preview": "Ð\94еÑ\85аÑ\80 да, оагÓ\80Ñ\83в лоÑ\80аеÑ\88Ñ\8c дIаÑ\8fзаелеÑ\85Ñ\8c из миÑ\88Ñ\82а Ñ\8f Ñ\82аÑ\85ка Ñ\85Ñ\8cалÑ\85Ñ\85е Ñ\85Ñ\8cажаÑ\80аÑ\85 пайда Ñ\8dÑ\86аÑ\88!",
+ "tooltip-diff": "Ð\94IадолалÑ\83 Ñ\82екÑ\81Ñ\82аÑ\86а даÑ\8c хувцамаш хьахьокха",
"tooltip-compareselectedversions": "Укх оагIувни шин доржамаш тIа юкъера хувцамаш зе.",
"tooltip-watch": "Ер оагIув теркам беча каьхата тIа яькха",
"tooltip-rollback": "Цкъа пIелг тоIабе дIадаккха тIехьара редакторас даь хувцамаш",
"tooltip-undo": "Даь хувцар дIадаьккха, хьалххе хьажар хьахьокха, дIадаккхара бахьан Iочуязаде аьттув болаш.",
- "tooltip-summary": "Лоаца чулоацам Iочуязаде",
+ "tooltip-summary": "Лоаца йоазонца сурт оттадар Iочуязаде",
"pageinfo-toolboxlink": "ОагIонах бола хоам",
"previousdiff": "← Хьалхара нийсдар",
"nextdiff": "ТIайоагIа нийсъар",
"ilsubmit": "Хьалáха",
"bad_image_list": "Бустам цу тайпара хила беза:\n\nДагарлен хьаракъаш мара лоарх|аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).\nМугIарен хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. \nЦу мугIара тIехьайоагIа Iинкаш, арадаккхар мо лоарх|аш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларх|а мега.",
"metadata": "Метахоамаш",
- "metadata-help": "Ð\9fаÑ\8cлаÑ\81 Ñ\87Ñ\83лоаÑ\86а, кÑ\85Ñ\8bдола Ñ\85IамаÑ\88, Ñ\82аÑ\8cÑ\80аÑ\85Ñ\8cа Ñ\81Ñ\83Ñ\80Ñ\82доакÑ\85аÑ\80гÑ\86а е Ñ\82IагIолладоакÑ\85аÑ\80гÑ\86а Ñ\87Ñ\83дакÑ\85аÑ\88 дола. Ð¥Ñ\8cаÑ\8fÑ\8c паÑ\8cл, гIалаÑ\82аÑ\85Ñ\8c мÑ\83кÑ\8aадаÑ\8cкÑ\85а Ñ\85инна дале, Ñ\85Ñ\8cаÑ\85Ñ\8cокÑ\85аÑ\88 дола Ñ\81Ñ\83Ñ\80Ñ\82, деÑ\80Ñ\80ига Ñ\85IамаÑ\88 Ñ\87Ñ\83лоаÑ\86аÑ\80гдаÑ\86.",
+ "metadata-help": "ФайлаÑ\81 кÑ\85Ñ\8bдола Ñ\85оамаÑ\88 Ñ\87Ñ\83лоаÑ\86а, Ñ\86иÑ\84Ñ\80овой Ñ\81Ñ\83Ñ\80Ñ\82доакÑ\85аÑ\80го е Ñ\81канеÑ\80о Ñ\82IаÑ\82оÑ\85аÑ\88 дола. Ð\9dагаÑ\85Ñ\8cа Ñ\84айл Ñ\87Ñ\83Ñ\8fкÑ\85аÑ\87Ñ\83л Ñ\82IеÑ\85Ñ\8cа Ñ\85ийÑ\86а Ñ\85инна дале, Ñ\86Ñ\85Ñ\8cаÑ\86Ñ\86айола паÑ\80амеÑ\82Ñ\80аÑ\88 Ñ\85IанзаÑ\80а Ñ\81Ñ\83Ñ\80Ñ\82а Ñ\82аÑ\80а йоаÑ\86аÑ\88 Ñ\85ила мегаÑ\88 Ñ\8f.",
"metadata-expand": "Кхыдола хIамаш хьахьокха",
"metadata-collapse": "Кхыдола хIамаш къайладаккха",
"metadata-fields": "Укх списке дагaрадаь суртай метахоамай йистош, хьахьекха хургда суртан оагIон тIа, метахоамай таблица хьоарчая йолаш. Юхедиса йистош къайла хургда.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
"exif-artist": "Яздархо",
"exif-exifversion": "Верси Exif",
"exif-colorspace": "Басара аре",
- "exif-pixelxdimension": "СÑ\83Ñ\80Ñ\82а Ñ\88ерал",
+ "exif-pixelxdimension": "СÑ\83Ñ\80Ñ\82а Ñ\88орал",
"exif-pixelydimension": "Сурта лакхал",
"exif-datetimedigitized": "Оцифровк яь таьрахь а, ха а",
"exif-writer": "Яздама да",
"watchlisttools-view": "Дагарчера оагIувнаш тIа хувцамаш",
"watchlisttools-edit": "Дагарче хьажа/хувца",
"watchlisttools-raw": "Яздам мо хувца",
+ "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|дувца оттадар]])",
"duplicate-defaultsort": "Зем бе. Сатийна дIа-хьа хьоржама доагI \"$2\" хьалхара сатийна дIа-хьа хьоржама доагI \"$1\" хьахьоржа.",
"version": "Доржам",
"version-specialpages": "ГIулакхий оагIувнаш",
"Wim b",
"V6rg",
"JackLantern",
- "Mpiva"
+ "Mpiva",
+ "Urielejh"
]
},
"tog-underline": "Sottolinea i collegamenti:",
"tog-watchlisthidebots": "Nascondi le modifiche dei bot negli osservati speciali",
"tog-watchlisthideminor": "Nascondi le modifiche minori negli osservati speciali",
"tog-watchlisthideliu": "Nascondi le modifiche degli utenti registrati negli osservati speciali",
- "tog-watchlistreloadautomatically": "Ricarica automaticamente l'elenco degli osservati speciali ogni volta che si modifica una filtro (richiede JavaScript)",
+ "tog-watchlistreloadautomatically": "Ricarica automaticamente l'elenco degli osservati speciali ogni volta che si modifica un filtro (richiede JavaScript)",
"tog-watchlisthideanons": "Nascondi le modifiche degli utenti anonimi negli osservati speciali",
"tog-watchlisthidepatrolled": "Nascondi le modifiche verificate negli osservati speciali",
"tog-watchlisthidecategorization": "Nascondi la categorizzazione delle pagine",
"protect_change": "cambia",
"protectthispage": "Proteggi questa pagina",
"unprotect": "Cambia la protezione",
- "unprotectthispage": "Cambia la protezione a questa pagina",
+ "unprotectthispage": "Modifica la protezione di questa pagina",
"newpage": "Nuova pagina",
"talkpage": "Pagina di discussione",
"talkpagelinktext": "Discussione",
"minoredit": "Questa è una modifica minore",
"watchthis": "Aggiungi agli osservati speciali",
"savearticle": "Salva la pagina",
+ "publishpage": "Pubblica pagina",
"preview": "Anteprima",
"showpreview": "Visualizza anteprima",
"showdiff": "Mostra modifiche",
"userpage-userdoesnotexist": "L'account \"$1\" non corrisponde a un utente registrato.\nVerificare che si intenda davvero creare o modificare questa pagina.",
"userpage-userdoesnotexist-view": "L'utenza \"$1\" non è registrata.",
"blocked-notice-logextract": "Questo utente è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
- "clearyourcache": "<strong>Nota:</strong> dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*<strong>Firefox / Safari:</strong> tenere premuto il tasto delle maiuscole <em>Shift</em> e fare clic su <em>Ricarica</em>, oppure premere <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> su Mac)\n*<strong>Google Chrome:</strong> premere <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> su un Mac)\n*<strong>Internet Explorer:</strong> tenere premuto il tasto <em>Ctrl</em> e fare clic su <em>Aggiorna</em>, oppure premere <em>Ctrl-F5</em>\n*<strong>Opera:</strong> svuotare completamente la cache dal menu <em>Strumenti → Preferenze</em>",
+ "clearyourcache": "<strong>Nota:</strong> dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*<strong>Firefox / Safari:</strong> tenere premuto il tasto delle maiuscole <em>Shift</em> e fare clic su <em>Ricarica</em>, oppure premere <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> su Mac)\n*<strong>Google Chrome:</strong> premere <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> su un Mac)\n*<strong>Internet Explorer:</strong> tenere premuto il tasto <em>Ctrl</em> e fare clic su <em>Aggiorna</em>, oppure premere <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Vai nel <em>Menu → Impostazioni</em> (<em>Opera → Preferenze</em> su un Mac) e poi in <em>Privacy & sicurezza → Pulisci dati del browser → Immagini e file nella cache</em>.",
"usercssyoucanpreview": "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo CSS prima di salvarlo.",
"userjsyoucanpreview": "'''Suggerimento:''' usa il pulsante 'Visualizza anteprima' per provare il tuo nuovo JavaScript prima di salvarlo.",
"usercsspreview": "'''Questa è solo un'anteprima del proprio CSS personale. Le modifiche non sono ancora state salvate!'''",
"tooltip-ca-nstab-category": "Vedi la pagina della categoria",
"tooltip-minoredit": "Contrassegna questa modifica come minore",
"tooltip-save": "Salva le modifiche",
+ "tooltip-publish": "Pubblica le tue modifiche",
"tooltip-preview": "Anteprima delle modifiche (consigliata prima di salvare)",
"tooltip-diff": "Guarda le modifiche apportate al testo",
"tooltip-compareselectedversions": "Guarda le differenze tra le due versioni selezionate di questa pagina.",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|ha protetto}} $3 $4 [ricorsiva]",
"logentry-protect-modify": "$1 {{GENDER:$2|ha modificato}} il livello di protezione per $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|ha modificato}} il livello di protezione per $3 $4 [ricorsiva]",
- "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di {{GENDER:$3|$3}} dal gruppo $4 al gruppo $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|ha modificato}} l'appartenenza di {{GENDER:$6|$3}} dal gruppo $4 al gruppo $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|ha modificato}} l'appartenenza a gruppi di $3",
"logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa|stato/a promosso/a}} automaticamente da $4 a $5",
"logentry-upload-upload": "$1 {{GENDER:$2|ha caricato}} $3",
"api-error-unknownerror": "Errore sconosciuto: \"$1\".",
"api-error-uploaddisabled": "Il caricamento è disabilitato su questa wiki.",
"api-error-verification-error": "Questo file potrebbe essere danneggiato, o avere l'estensione sbagliata.",
+ "api-error-was-deleted": "Un file con lo stesso nome è stato precedentemente caricato e successivamente eliminato.",
"duration-seconds": "$1 {{PLURAL:$1|secondo|secondi}}",
"duration-minutes": "$1 {{PLURAL:$1|minuto|minuti}}",
"duration-hours": "$1 {{PLURAL:$1|ora|ore}}",
"recentchangeslinked-page": "ページ名:",
"recentchangeslinked-to": "このページへのリンク元での変更の表示に切り替え",
"recentchanges-page-added-to-category": "[[:$1]]をカテゴリに追加",
- "recentchanges-page-added-to-category-bundled": "[[:$1]]ã\81¨ä»\96[[Special:WhatLinksHere/$1|{{PLURAL:$2|1ã\83\9aã\83¼ã\82¸|$2ã\83\9aã\83¼ã\82¸}}]]ã\82\92ã\82«ã\83\86ã\82´ã\83ªã\81«è¿½å\8a ",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]]ã\82\92ã\82«ã\83\86ã\82´ã\83ªã\81«è¿½å\8a ã\80\82[[Special:WhatLinksHere/$1|ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯ä»\96ã\81®ã\83\9aã\83¼ã\82¸ã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82]]",
"recentchanges-page-removed-from-category": "[[:$1]]をカテゴリから除外",
- "recentchanges-page-removed-from-category-bundled": "[[:$1]]ã\81¨ä»\96 [[Special:WhatLinksHere/$1|{{PLURAL:$2|1ã\83\9aã\83¼ã\82¸|$2ã\83\9aã\83¼ã\82¸}}]]ã\82\92ã\82«ã\83\86ã\82´ã\83ªã\81\8bã\82\89é\99¤å¤\96",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]]ã\82\92ã\82«ã\83\86ã\82´ã\83ªã\81\8bã\82\89é\99¤å¤\96ã\80\82[[Special:WhatLinksHere/$1|ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯ä»\96ã\81®ã\83\9aã\83¼ã\82¸ã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99]]",
"autochange-username": "メディアウィキ自動変更",
"upload": "ファイルをアップロード",
"uploadbtn": "ファイルをアップロード",
"logentry-protect-protect-cascade": "$1 が $3 を {{GENDER:$2|保護}}しました $4 [カスケード]",
"logentry-protect-modify": "$1 が $3 の保護レベルを{{GENDER:$2|変更}}しました $4",
"logentry-protect-modify-cascade": "$1 が $3 の保護レベルを{{GENDER:$2|変更}}しました $4 [カスケード]",
- "logentry-rights-rights": "$1 が {{GENDER:$3|$3}} の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}",
+ "logentry-rights-rights": "$1 が {{GENDER:$6|$3}} の所属グループを $4 から $5 に{{GENDER:$2|変更しました}}",
"logentry-rights-rights-legacy": "$1 が $3 の所属グループを{{GENDER:$2|変更しました}}",
"logentry-rights-autopromote": "$1 が $4 から $5 に自動的に{{GENDER:$2|昇格しました}}",
"logentry-upload-upload": "$1 が $3 を {{GENDER:$2|アップロードしました}}",
"tog-editondblclick": "Besut kaca sarana ngeklik pindho",
"tog-editsectiononrightclick": "Fungsèkna panyuntingan sub-bagian mawa klik-tengen ing judul bagian (mbutuhaké JavaScript)",
"tog-watchcreations": "Tambahaké kaca sing tak gawé lan berkas sing tak unggah nèng daptar pangawasan",
- "tog-watchdefault": "Tambahaké kaca lan berkas sing tak sunting nèng daptar pangawasan",
+ "tog-watchdefault": "Tambahaké kaca lan barkas sing tak sunting nyang pawawanganku",
"tog-watchmoves": "Tambahaké kaca lan berkas sing tak pindhahaké nèng daptar pangawasan",
"tog-watchdeletion": "Tambahaké kaca lan berkas sing tak busak nèng daptar pangawasan",
"tog-watchuploads": "Tambahaké barkas anyar sing tak unggah nyang pawawanganku",
"tog-watchrollback": "Tambahaké kaca sing tak wurungaké nyang pawawanganku",
"tog-minordefault": "Tandhanana kabèh suntingan dadi suntingan cilik secara baku",
- "tog-previewontop": "Tuduhna pratayang sadurungé kothak sunting lan ora sawisé",
+ "tog-previewontop": "Deleng prawuryan sadurungé besut kothak",
"tog-previewonfirst": "Tuduhna pratayang ing suntingan kapisan",
"tog-enotifwatchlistpages": "Kirimi kula layang èlèktronik yèn ana kaca utawa berkas nèng daptar pangawasanku sing diowah",
"tog-enotifusertalkpages": "Kirimana aku layang e-mail yèn kaca dhiskusiku owah",
"talkpage": "Rembug kaca iki",
"talkpagelinktext": "gunem",
"specialpage": "Kaca mirunggan",
- "personaltools": "Piranti pribadhi",
+ "personaltools": "Piranti pribadi",
"articlepage": "Deleng kaca isi",
"talk": "Rembug",
"views": "Praèn",
"permissionserrorstext": "Panjengan ora kagungan idin kanggo nglakoni sing panjenengan gayuh amerga {{PLURAL:$1|alesan|alesan-alesan}} iki:",
"permissionserrorstext-withaction": "Panjenengan ora duwé hak aksès kanggo $2, amarga {{PLURAL:$1|alasan|alasan}} ing ngisor iki:",
"recreate-moveddeleted-warn": "'''Pènget: Panjenengan gawé manèh sawijining kaca sing wis tau dibusak.'''\n\nMangga digagas manèh apa pantes nerusaké nyunting kaca iki.\nIng ngisor iki kapacak log pambusakan lan pamindhahan saka kaca iki:",
- "moveddeleted-notice": "Kaca iki wis dibusak.\nCathetan busakan lan lihlihan kaca ana ing ngisor minangka rujukan.",
+ "moveddeleted-notice": "Kaca iki wis dibusak.\nCathetan busakan lan lih-lihan kaca ana ing ngisor minangka rujukan.",
"log-fulllog": "Deleng cathetan wutuh",
"edit-hook-aborted": "Suntingan dibatalaké déning kait parser\nTanpa ana katrangan.",
"edit-gone-missing": "Ora bisa nganyari kaca.\nKatoné kaca iki wis dibusak.",
"revdelete-reason-dropdown": "*Alasan penghapusan yang umum\n** Pelanggaran hak cipta\n** Komentar atau informasi pribadi yang tidak pantas\n** Nama pengguna yang tidak pantas\n** Berpotensi mencemarkan nama baik",
"revdelete-otherreason": "Alesan liya/tambahan:",
"revdelete-reasonotherlist": "Alesan liya",
- "revdelete-edit-reasonlist": "Sunting alesan pambusakan",
+ "revdelete-edit-reasonlist": "Besut jalaraning pambusak",
"revdelete-offender": "Juru pangriptaning owahan:",
"suppressionlog": "Log barang-barang sing didelikaké (''oversight'')",
"suppressionlogtext": "Ngisor iki daptar apa-apa waé sing wis dibusak lan diblokir kalebu kontèn sing didhelikaké saka para pangurus.\nDelok [[Special:BlockList|daptar blokiran]] sing isiné daptar apa-apa waé sing lagi dilarang lan diblokir.",
"userrights": "Manajemen hak panganggo",
"userrights-lookup-user": "Ngatur kelompok panganggo",
"userrights-user-editname": "Lebokna jeneng panganggo:",
- "editusergroup": "Sunting kelompok panganggo",
+ "editusergroup": "Besut golongan {{GENDER:$1|panganggo}}",
"editinguser": "Ngganti hak panganggo '''[[User:$1|$1]]''' $2",
- "userrights-editusergroup": "Sunting kelompok panganggo",
+ "userrights-editusergroup": "Besut golongan panganggo",
"saveusergroups": "Simpen kelompok panganggo",
"userrights-groupsmember": "Anggota saka:",
"userrights-groupsmember-auto": "Anggota implisit saka:",
"right-protect": "Ganti undhaking pangreksan lan owah kaca-kaca sing direksa",
"right-editprotected": "Owah kaca-kaca sing direksa (tanpa pangreksan runtun)",
"right-editsemiprotected": "Owah kaca-kaca sing direksa dadi \"{{int:protect-level-autoconfirmed}}\"",
- "right-editinterface": "Sunting interface (antarmuka) panganggo",
- "right-editusercssjs": "Sunting berkas-berkas CSS lan JS panganggo liya",
- "right-editusercss": "Sunting berkas-berkas CSS panganggo liya",
- "right-edituserjs": "Sunting berkas-berkas JS panganggo liya",
+ "right-editinterface": "Besut antarmuka panganggo",
+ "right-editusercssjs": "Besut barkas-barkas CSS lan JavaScript panganggo liya",
+ "right-editusercss": "Besut barkas-barkas CSS panganggo liya",
+ "right-edituserjs": "Besut barkas-barkas JavaScript panganggo liya",
"right-editmyusercss": "Owahi berkas CSS panganggo sampeyan",
"right-editmyuserjs": "Owahi berkas JavaScript panganggo sampeyan",
"right-viewmywatchlist": "Dheleng daftar pangawasan sampeyan",
"right-unwatchedpages": "Tuduhna daftar kaca-kaca sing ora diawasi",
"right-mergehistory": "Gabungna sajarah kaca-kaca",
"right-userrights": "Besut kabèh hak panganggo",
- "right-userrights-interwiki": "Sunting hak-hak para panganggo ing situs-situs wiki liya",
+ "right-userrights-interwiki": "Besut hak-haking panganggo asal wiki jaba",
"right-siteadmin": "Kunci lan buka kunci basis data",
"right-override-export-depth": "Èkspor kaca klebu kaca kagandhèng nganti tataran/''depth'' 5",
"right-sendemail": "Ngirim layang listrik (e-mail) menyang panganggo liya",
"filedelete-otherreason": "Alesan tambahan/liya:",
"filedelete-reason-otherlist": "Alesan liya",
"filedelete-reason-dropdown": "*Alesan pambusakan\n** Nglanggar hak cipta\n** Berkas duplikat",
- "filedelete-edit-reasonlist": "Sunting alesan pambusakan",
+ "filedelete-edit-reasonlist": "Busak jalaraning pambusak",
"filedelete-maintenance": "Pambusakan lan pambalikan berkas kanggo sawetara dipatèni salawas ana pangruwatan.",
"filedelete-maintenance-title": "Ora bisa mbusak berkas",
"mimesearch": "Panggolèkan MIME",
"deleteotherreason": "Alesan liya utawa tambahan:",
"deletereasonotherlist": "Alesan liya",
"deletereason-dropdown": "*Alesan pambusakan\n** Spam\n** Vandalisme\n** Nglanggar hak cipta\n** Disuwun sing nulis\n** Pangalihan rusak",
- "delete-edit-reasonlist": "Sunting alesan pambusakan",
+ "delete-edit-reasonlist": "Besut jalaraning pambusak",
"delete-toobig": "Kaca iki ndarbèni sajarah panyuntingan sing dawa, yaiku ngluwihi $1 {{PLURAL:$1|revision|révisi}}.\nPambusakan kaca sing kaya mangkono mau wis ora diparengaké kanggo menggak anané karusakan ing {{SITENAME}}.",
"delete-warning-toobig": "Kaca iki duwé sajarah panyuntingan sing dawa, luwih saka $1 {{PLURAL:$1|révisi|révisi}}.\nMbusak kaca iki bisa ngrusak operasi basis data ing {{SITENAME}};\nkudu ngati-ati.",
"deleting-backlinks-warning": "'''Awas:''' Kaca liyane mungkin ana sing nautake ing kaca sing arep sampeyan busak.",
"protect-otherreason": "Alesan liya/tambahan:",
"protect-otherreason-op": "Alesan liya",
"protect-dropdown": "*Alesan umum pangreksan\n** Vandalisme makaping-kaping\n** Spam makaping-kaping\n** Perang suntingan\n** Kaca kerep disunting",
- "protect-edit-reasonlist": "Nyunting alesan reksan",
+ "protect-edit-reasonlist": "Mbesut jalaraning pangreksa",
"protect-expiry-options": "1 jam:1 hour,1 dina:1 day,1 minggu:1 week,2 minggu:2 weeks,1 sasi:1 month,3 sasi:3 months,6 sasi:6 months,1 taun:1 year,tanpa wates:infinite",
"restriction-type": "Pangreksan:",
"restriction-level": "Tingkatan pambatesan:",
"linkshere": "Kaca-kaca iki nduwé pranala menyang '''[[:$1]]''':",
"nolinkshere": "Ora ana kaca sing nduwé pranala menyang '''[[:$1]]'''.",
"nolinkshere-ns": " Ora ana kaca sing nduwé pranala menyang '''[[:$1]]''' ing bilik jeneng sing kapilih.",
- "isredirect": "kaca lihlihan",
+ "isredirect": "kaca lih-lihan",
"istemplate": "karo cithakan",
"isimage": "pranala berkas",
"whatlinkshere-prev": "{{PLURAL:$1|sadurungé|$1 sadurungé}}",
"blockipsuccesstext": "[[Special:Contributions/$1|$1]] wis diblokir.<br />\nDelok [[Special:BlockList|daptar blokir]] kanggo ninjo blokiran.",
"ipb-blockingself": "Sampéyan arep mblokir Sampéyan dhéwé! Sampéyan yakin arep nglakoni kuwi?",
"ipb-confirmhideuser": "Sampéyan arep mblokir panganggo mawa piranti \"dhelikaké panganggo\" isih murub. Iki bakal nyegah jeneng panganggo ana ing kabèh daptar lan èntri log. Sampéyan yakin arep nglakoni kuwi?",
- "ipb-edit-dropdown": "Sunting alesan pamblokiran",
+ "ipb-edit-dropdown": "Besut jalaraning pamalang",
"ipb-unblock-addr": "Ilangna blokir $1",
"ipb-unblock": "Ilangna blokir sawijining panganggo utawa alamat IP",
"ipb-blocklist": "Ndeleng blokir sing lagi ditrapaké",
"movepage-page-moved": "Kaca $1 wis dipindhah menyang $2.",
"movepage-page-unmoved": "Kaca $1 ora bisa dialihaké menyang $2.",
"movepage-max-pages": "Paling akèh $1 {{PLURAL:$1|kaca|kaca}} wis dialihaké lan ora ana manèh sing bakal dialihaké sacara otomatis.",
- "movelogpage": "Cathetan lihlihan",
+ "movelogpage": "Cathetan lih-lihan",
"movelogpagetext": "Ing ngisor iki kapacak log pangalihan kaca.",
"movesubpage": "{{PLURAL:$1|Anak-kaca|Anak-kaca}}",
"movesubpagetext": "Kaca iki nduwèni $1 {{PLURAL:$1|anak-kaca|anak-kaca}} kaya kapacak ing ngisor.",
"autosumm-new": "Gawé kaca sing isi '$1'",
"lag-warn-normal": "Owah-owahan pungkasan sing luwih anyar tinimbang $1 {{PLURAL:$1|detik|detik}} mbokmanawa ora metu ing pratélan iki.",
"lag-warn-high": "Amarga gedhéné ''lag'' basis data server, owah-owahan pungkasan sing luwih anyar saka $1 {{PLURAL:$1|detik|detik}} mbokmanawa ora metu ing daftar iki.",
- "watchlistedit-normal-title": "Sunting daftar pangawasan",
+ "watchlistedit-normal-title": "Besut pawawangan",
"watchlistedit-normal-legend": "Busak irah-irahan saka daftar pangawasan",
"watchlistedit-normal-explain": "Irah-irahan utawa judhul ing daftar pangawasan panjenengan kapacak ing ngisor iki.\nKanggo mbusak sawijining irah-irahan, kliken kothak ing pinggiré, lan banjur kliken \"Busak judhul\".\nPanjenengan uga bisa [[Special:EditWatchlist/raw|nyunting daftar mentah]].",
"watchlistedit-normal-submit": "Busak irah-irahan",
"watchlistedit-normal-done": "Irah-irahan {{PLURAL:$1|siji|$1}} wis dibusak saka daftar pangawasan panjenengan:",
- "watchlistedit-raw-title": "Sunting daftar mentah",
- "watchlistedit-raw-legend": "Sunting daftar mentah",
+ "watchlistedit-raw-title": "Besut pawawangan wantahan",
+ "watchlistedit-raw-legend": "Besut pawawangan wantahan",
"watchlistedit-raw-explain": "Irah-irahan ing daftar pangawasan panjenengan kapacak ing ngisor iki, lan bisa diowahi mawa nambahaké utawa mbusak daftar; sairah-irahan saban barisé.\nYèn wis rampung, anyarana kaca daftar pangawasan iki.\nPanjenengan uga bisa [[Special:EditWatchlist|nganggo éditor standar panjenengan]].",
"watchlistedit-raw-titles": "Irah-irahan:",
"watchlistedit-raw-submit": "Anyarana daftar pangawasan",
"watchlistedit-raw-added": "{{PLURAL:$1|1 irah-irahan wis|$1 irah-irahan wis}} ditambahaké:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 irah-irahan wis|$1 irah-irahan wis}} diwetokaké:",
"watchlisttools-view": "Tuduhna owah-owahan sing ana gandhèngané",
- "watchlisttools-edit": "Tuduhna lan sunting daftar pangawasan",
- "watchlisttools-raw": "Sunting daftar pangawasan mentah",
+ "watchlisttools-edit": "Deleng lan besut pawawangan",
+ "watchlisttools-raw": "Besut pawawangan wantahan",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|wicara]])",
"duplicate-defaultsort": "Pènget: Kunci pilih asal (''Default sort key'') \"$2\" nggantèkaké kunci pilih asal sadurungé \"$1\".",
"version": "Versi",
"feedback-cancel": "Batal",
"feedback-close": "Rampung",
"feedback-error1": "Kasalahan: Asil ora dikenal saka API",
- "feedback-error2": "Kasalahan: Gagal nyunting",
+ "feedback-error2": "Cacad: Gagal mbesut",
"feedback-error3": "Kasalahan: Ora ana tanggepan saka API",
"feedback-message": "Layang:",
"feedback-subject": "Jejer:",
"yournick": "Leqeme:",
"badsig": "İmza kala nêvêrdiye.\nEtiketê ''HTML''i qontrol ke.",
"badsiglength": "İmza to zaf derga.\nA gunê ebe $1 {{PLURAL:$1|herfe|herfu}} ra jêde mebo.",
- "yourgender": "Cınsiyet:",
+ "yourgender": "Şeklê xitabi?",
"gender-male": "Cüamêrd",
"gender-female": "Cüanıke",
"email": "E-poste",
"rclistfrom": "$3 $2 ra hata nıka vurnaisunê newu bıasne",
"rcshowhideminor": "$1 vurnaisê qızkeki",
"rcshowhidebots": "Botu $1",
- "rcshowhideliu": "Karberunê qeydbiyayu $1",
+ "rcshowhideliu": "karberê qeydbiyayeyi $1",
"rcshowhideanons": "$1 karberê anonimi",
"rcshowhidepatr": "Vurnayışê cıyê vênıtey $1",
"rcshowhidemine": "Vurnayisanê mı $1",
"Joolee0104",
"Mooozi",
"Ellif",
- "HDNua"
+ "HDNua",
+ "Ykhwong"
]
},
"tog-underline": "링크에 밑줄:",
"tog-watchdefault": "내가 편집하는 문서와 파일을 주시문서 목록에 추가",
"tog-watchmoves": "내가 이동하는 문서와 파일을 주시문서 목록에 추가",
"tog-watchdeletion": "내가 삭제하는 문서와 파일을 주시문서 목록에 추가",
+ "tog-watchuploads": "내가 올린 파일을 주시문서 목록에 추가",
"tog-watchrollback": "내가 되돌리기 기능을 사용한 문서를 주시문서 목록에 추가",
"tog-minordefault": "모든 편집에 기본적으로 사소한 편집을 표시",
"tog-previewontop": "편집 상자 앞에 미리 보기 보이기",
"databaseerror-query": "쿼리: $1",
"databaseerror-function": "함수: $1",
"databaseerror-error": "오류: $1",
+ "transaction-duration-limit-exceeded": "쓰기 시간($1)이 $2 초 제한을 초과하였으므로 이 트랜잭션은 중단되었습니다. 이는 높은 수준의 반복 지연을 피하기 위해서입니다.\n한번에 수많은 항목을 변경하려면, 작업을 여러 작은 단위로 나누어 시도하십시오.",
"laggedslavemode": "<strong>경고:</strong> 문서가 최근에 바뀐 내용을 포함하지 않을 수도 있습니다.",
"readonly": "데이터베이스 잠김",
"enterlockreason": "데이터베이스를 잠그는 이유와 예상되는 기간을 적어 주세요.",
"virus-scanfailed": "검사 실패 (코드 $1)",
"virus-unknownscanner": "알 수 없는 안티 바이러스:",
"logouttext": "<strong>이제 로그아웃했습니다.</strong>\n\n브라우저 캐시를 지울 때까지 일부 문서에서 아직 로그인이 되어 있는 것처럼 보일 수 있음에 유의하세요.",
- "cannotlogoutnow-title": "지금 로그아웃 할 수 없습니다",
+ "cannotlogoutnow-title": "지금 로그아웃할 수 없습니다",
"cannotlogoutnow-text": "$1 사용 중에는 로그아웃이 불가능합니다.",
"welcomeuser": "$1님, 환영합니다!",
"welcomecreation-msg": "계정이 만들어졌습니다.\n[[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.",
"remembermypassword": "이 브라우저에서 로그인 상태를 저장하기 (최대 $1{{PLURAL:$1|일}})",
"userlogin-remembermypassword": "로그인 상태를 유지하기",
"userlogin-signwithsecure": "보안 연결 사용",
- "cannotloginnow-title": "지금 로그인 할 수 없습니다.",
+ "cannotloginnow-title": "지금 로그인할 수 없습니다.",
"cannotloginnow-text": "$1 사용 중에는 로그인이 불가능합니다.",
"yourdomainname": "도메인 이름:",
"password-change-forbidden": "이 위키에서 비밀번호를 바꿀 수 없습니다.",
"noemail": "\"$1\" 사용자는 이메일 주소를 등록하지 않았습니다.",
"noemailcreate": "올바른 이메일 주소를 제공해야 합니다.",
"passwordsent": "\"$1\" 계정의 새로운 비밀번호를 이메일로 보냈습니다.\n비밀번호를 받고 다시 로그인해 주세요.",
- "blocked-mailpassword": "당신의 IP 주소는 편집을 할 수 없게 차단되어 있어서 악용하지 못하도록 비밀번호 되살리기 기능 사용이 금지됩니다.",
+ "blocked-mailpassword": "사용 중인 IP 주소는 편집을 할 수 없도록 차단되어 있습니다. 악용 방지를 위해 비밀번호 되살리기 기능의 사용은 금지됩니다.",
"eauthentsent": "입력한 이메일로 확인 이메일을 보냈습니다.\n다른 모든 형태의 이메일을 당신의 계정으로 보내기 전에, 계정이 정말 당신의 것인지 확인하기 위해 이메일 내용의 지시대로 계정 확인 절차를 실행해 주셔야 합니다.",
"throttled-mailpassword": "비밀번호 재설정 이메일을 이미 최근 {{PLURAL:$1|$1시간}} 안에 보냈습니다.\n악용을 방지하기 위해 비밀번호 재설정 메일은 {{PLURAL:$1|$1시간}}마다 오직 하나씩만 보낼 수 있습니다.",
"mailerror": "메일을 보내는 중 오류: $1",
"changepassword-success": "비밀번호가 바뀌었습니다!",
"changepassword-throttled": "최근 너무 많이 로그인을 시도했습니다.\n$1 뒤에 다시 시도하세요.",
"botpasswords": "봇 비밀번호",
+ "botpasswords-summary": "<em>봇 비밀번호</em>는 사용자의 기본 로그인 정보를 이용하지 않고 API를 통한 사용자 계정으로의 접근을 허용합니다. 봇 비밀번호를 이용하여 로그인할 때 이용 가능한 사용자 권한은 제한될 수 있습니다.\n\n이 기능을 이용할 이유가 없다면 굳이 이용하지 않으셔도 됩니다. 누구도 이 비밀번호의 생성을 사용자에게 요청할 수 없으며, 이를 수락하여 전달하지 말아 주십시오.",
"botpasswords-disabled": "봇 비밀번호가 비활성화되었습니다.",
+ "botpasswords-no-central-id": "봇 비밀번호를 사용하려면 통합 계정으로 로그인해야 합니다.",
"botpasswords-existing": "기존의 봇 비밀번호",
"botpasswords-createnew": "새로운 봇 비밀번호 만들기",
"botpasswords-editexisting": "기존의 봇 비밀번호 편집하기",
"botpasswords-label-delete": "삭제",
"botpasswords-label-resetpassword": "비밀번호 재설정",
"botpasswords-label-grants": "적용할 수 있는 부여:",
+ "botpasswords-help-grants": "개개의 부여 기능은 사용자 계정이 이미 소유하고 있는 사용자 권한에 대한 접근을 제공합니다. 자세한 사항은 [[Special:ListGrants|부여 목록]]을 확인해 주십시오.",
"botpasswords-label-restrictions": "사용 제한:",
"botpasswords-label-grants-column": "승인됨",
"botpasswords-bad-appid": "\"$1\"이라는 봇 이름은 유효하지 않습니다.",
"botpasswords-newpassword": "<strong>$1</strong> 계정의 비밀번호가 <strong>$2</strong>로 변경되었습니다. <em>잊어버리지 않도록 기록해두시기 바랍니다.</em>",
"botpasswords-no-provider": "'BotPasswordsSessionProvider'는 이용할 수 없습니다.",
"botpasswords-restriction-failed": "봇 비밀번호 제한으로 인해 로그인할 수 없습니다.",
+ "botpasswords-invalid-name": "지정된 사용자 이름은 봇 비밀번호 구분자(\"$1\")를 포함하고 있지 않습니다.",
"botpasswords-not-exist": "\"$1\" 사용자가 이름이 \"$2\"인 봇의 비밀번호를 가지고 있지 않습니다.",
"resetpass_forbidden": "비밀번호를 바꿀 수 없습니다",
"resetpass-no-info": "이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.",
"minoredit": "사소한 편집입니다",
"watchthis": "이 문서 주시하기",
"savearticle": "문서 저장",
+ "publishpage": "문서 게시",
"preview": "미리 보기",
"showpreview": "미리 보기",
"showdiff": "차이 보기",
"userpage-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.\n이 문서를 만들거나 편집하기 전에 계정이 존재하는지 확인해주세요.",
"userpage-userdoesnotexist-view": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.",
"blocked-notice-logextract": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 최근 차단 기록을 참조하십시오:",
- "clearyourcache": "<strong>참고:</strong> 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* <strong>Firefox / Safari</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em> 을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>Google Chrome</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>Opera</strong>: <em>도구→설정</em>에서 캐시를 비움",
+ "clearyourcache": "<strong>참고:</strong> 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.\n* <strong>파이어폭스 / 사파리</strong>: <em>Shift</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em> 또는 <em>Ctrl-R</em> 을 입력 (Mac에서는 <em>⌘-R</em>)\n* <strong>구글 크롬</strong>: <em>Ctrl-Shift-R</em>키를 입력 (Mac에서는 <em>⌘-Shift-R</em>)\n* <strong>인터넷 익스플로러</strong>: <em>Ctrl</em> 키를 누르면서 새로 고침을 클릭하거나, <em>Ctrl-F5</em>를 입력.\n* <strong>오페라:</strong> <em>메뉴 → 설정</em>(맥의 경우 <em>오페라 → 환경 설정</em>)으로 이동한 다음 <em>개인 정보 보호 및 보안 → 검색 데이터 지우기 → 캐시한 이미지 및 파일</em>를 누름.",
"usercssyoucanpreview": "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
"userjsyoucanpreview": "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
"usercsspreview": "'''사용자 CSS의 미리 보기입니다.'''\n'''아직 저장하지 않았습니다!'''",
"previewnote": "'''이 화면은 미리 보기입니다.'''\n편집한 내용은 아직 저장하지 않았습니다!",
"continue-editing": "편집 영역으로 가기",
"previewconflict": "이 미리 보기는 저장할 때의 모습으로 위쪽 편집창의 문서를 반영합니다.",
- "session_fail_preview": "세션 데이터가 없어져 편집을 저장하지 못했습니다.\n\n로그아웃 되었는지도 모릅니다. <strong>아직 로그인 상태인지 확인하고 다시 시도해주세요</strong>.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.",
+ "session_fail_preview": "세션 데이터가 없어져 편집을 저장하지 못했습니다.\n\n로그아웃되었는지도 모릅니다. <strong>아직 로그인 상태인지 확인하고 다시 시도해주세요</strong>.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.",
"session_fail_preview_html": "세션 데이터가 없어져 편집을 저장하지 못했습니다.\n\n<em>{{SITENAME}}에서 HTML 입력을 허용하기 때문에, 자바스크립트 공격을 막기 위해 미리 보기는 숨겨져 있습니다.</em>\n\n<strong>적합하게 편집을 시도했다면 다시 시도해주세요.</strong>\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하고, 브라우저가 이 사이트에서 쿠키를 허용하는지 확인하세요.",
"token_suffix_mismatch": "'''저장하려는 내용의 문장 부호가 망가져 있습니다.'''\n문서 보호를 위해 해당 내용을 저장하지 않습니다.\n버그가 있는 익명 프록시 서비스 등을 사용할 때 이런 문제가 발생할 수 있습니다.",
"edit_form_incomplete": "'''편집의 일부 내용이 서버에 전달되지 않았습니다. 편집이 손상되지 않았는지 확인하고 다시 시도해 주십시오.'''",
"permissionserrors": "권한 오류",
"permissionserrorstext": "해당 명령을 수행할 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해보세요:",
"permissionserrorstext-withaction": "$2 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해주세요:",
+ "contentmodelediterror": "사용자는 이 판을 편집할 수 없습니다. 콘텐츠 모델은 <code>$1</code>이며, 이 문서의 현 콘텐츠 모델은 <code>$2</code>이므로 차이가 있습니다.",
"recreate-moveddeleted-warn": "<strong>경고: 삭제된 문서를 다시 만들고 있습니다.</strong>\n\n이 문서를 계속 편집하는 것이 적합한 것인지 확인해주세요.\n편의를 위해 삭제와 이동 기록을 다음과 같이 제공합니다:",
"moveddeleted-notice": "이 문서는 삭제되었습니다.\n이 문서의 삭제 및 이동 기록은 다음과 같습니다.",
"moveddeleted-notice-recent": "죄송합니다, 이 문서는 최근 (24시간 내)에 삭제된 적이 있습니다.\n삭제와 이동 기록이 참고를 위해 남겨져 있습니다.",
"mergehistory-fail-bad-timestamp": "타임스탬프(timestamp)가 적절하지 않습니다.",
"mergehistory-fail-invalid-source": "원본 문서가 적절하지 않습니다.",
"mergehistory-fail-invalid-dest": "대상 문서가 적절하지 않습니다.",
+ "mergehistory-fail-no-change": "역사 병합은 모든 판을 병합하지 못했습니다. 문서와 시간 변수를 다시 확인하여 주십시오.",
+ "mergehistory-fail-permission": "역사를 병합할 권한이 부족합니다.",
"mergehistory-fail-self-merge": "원본과 대상 문서가 같습니다.",
+ "mergehistory-fail-timestamps-overlap": "원본의 판들을 겹치거나 대상이 되는 판들 이후에 오게 할 수 없습니다.",
"mergehistory-fail-toobig": "이동하려는 {{PLURAL:$1|판}} $1개 제한보다 많이 역사 병합을 수행할 수 없습니다.",
"mergehistory-no-source": "원본인 $1 문서가 존재하지 않습니다.",
"mergehistory-no-destination": "대상인 $1 문서가 존재하지 않습니다.",
"right-createpage": "문서 만들기 (토론 문서 제외)",
"right-createtalk": "토론 문서 만들기",
"right-createaccount": "새 사용자 계정 만들기",
+ "right-autocreateaccount": "외부 사용자 계정으로 자동 로그인",
"right-minoredit": "사소한 편집으로 표시",
"right-move": "문서 이동",
"right-move-subpages": "문서와 하위 문서 이동하기",
"recentchangeslinked-page": "문서 이름:",
"recentchangeslinked-to": "해당 문서를 가리키는 문서의 바뀜 보기",
"recentchanges-page-added-to-category": "[[:$1]]이(가) 분류에 추가되었습니다",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] 문서가 분류에 추가되었습니다. [[Special:WhatLinksHere/$1|이 문서는 다른 문서들에 포함되어 있습니다]]",
"recentchanges-page-removed-from-category": "[[:$1]]이(가) 분류에서 제거되었습니다",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] 문서가 분류에서 제거되었습니다. [[Special:WhatLinksHere/$1|이 문서는 다른 문서들에 포함되어 있습니다]]",
"autochange-username": "미디어위키 자동 변경",
"upload": "파일 올리기",
"uploadbtn": "파일 올리기",
"upload-scripted-pi-callback": "XML 스타일시트 프로세싱 명령을 포함하는 파일은 업로드 할 수 없습니다.",
"uploaded-script-svg": "업로드 된 SVG 파일에서 스크립트로 만들 수 있는 \"$1\" 요소를 발견했습니다.",
"uploaded-hostile-svg": "업로드 된 SVG 파일의 스타일 요소에 안전하지 못한 CSS가 있습니다.",
+ "uploaded-event-handler-on-svg": "이벤트 핸들러 속성 <code>$1=\"$2\"</code> 설정은 SVG 파일에서 사용할 수 없습니다.",
+ "uploaded-href-attribute-svg": "SVG 파일의 href 속성은 http:// 또는 https:// 대상의 링크만 허용되지만 <code><$1 $2=\"$3\"></code>를 발견했습니다.",
+ "uploaded-href-unsafe-target-svg": "안전하지 않은 데이터를 가리키는 href를 발견했습니다: 업로드된 SVG 파일의 URI 대상 <code><$1 $2=\"$3\"></code>",
+ "uploaded-animate-svg": "업로드된 SVG 파일에서 \"from\" 속성 <code><$1 $2=\"$3\"></code>을 이용 중 \"animate\" 태그가 href를 변경할 수 있음을 발견했습니다.",
+ "uploaded-setting-event-handler-svg": "이벤트 핸들러 속성을 차단으로 설정한 상태에서 <code><$1 $2=\"$3\"></code>가 업로드된 SVG 파일에서 발견되었습니다.",
+ "uploaded-setting-href-svg": "부모 요소에 \"href\" 속성을 추가할 목적으로 \"set\" 태그를 사용하는 것은 금지됩니다.",
+ "uploaded-wrong-setting-svg": "원격/데이터/스크립트 대상을 임의의 속성에 추가할 목적으로 \"set\" 태그를 사용하는 것은 금지됩니다. 업로드된 SVG 파일에 <code><set to=\"$1\"></code>를 발견했습니다.",
+ "uploaded-setting-handler-svg": "원격/데이터/스크립트와 함께 \"handler\" 속성을 설정한 SVG는 이용이 금지됩니다. 업로드된 SVG 파일에서 <code>$1=\"$2\"</code>를 발견하였습니다.",
"uploaded-remote-url-svg": "원격 URL로 style 속성이 설정된 SVG파일은 금지됩니다. 업로드된 SVG 파일에서 <code>$1=\"$2\"</code>를 발견하였습니다.",
+ "uploaded-image-filter-svg": "URL에 이미지 필터를 발견했습니다: 업로드된 SVG 파일의 <code><$1 $2=\"$3\"></code>.",
"uploadscriptednamespace": "이 SVG 파일은 사용할 수 없는 이름공간 '$1'을 포함하고 있습니다.",
"uploadinvalidxml": "업로드된 파일의 XML의 구문을 분석할 수 없습니다.",
"uploadvirus": "파일이 바이러스를 포함하고 있습니다!\n자세한 설명: $1",
"upload-options": "올리기 설정",
"watchthisupload": "이 파일 주시하기",
"filewasdeleted": "같은 이름을 가진 파일이 올라온 적이 있었고 그 후에 삭제되었습니다.\n올리기 전에 $1을 확인해 주시기 바랍니다.",
+ "filename-thumb-name": "섬네일 제목으로 추정됩니다. 같은 위키에 섬네일 그림을 다시 업로드하지 마십시오. 섬네일이 아니라면 파일 이름을 보다 유의미한 이름으로 수정해 주시고 이름에 섬네일 접두어는 포함하지 마십시오.",
"filename-bad-prefix": "올리려고 하는 파일 이름이 '''\"$1\"''' 이름으로 시작합니다. \"$1\" 이름은 디지털 사진기가 자동으로 붙이는 의미없는 이름입니다.\n파일에 대해 알기 쉬운 이름을 골라주세요.",
"filename-prefix-blacklist": " #<!-- 이 줄은 그대로 두십시오 --> <pre>\n# 문법은 다음과 같습니다:\n# * \"#\" 문자에서 줄의 끝까지는 주석입니다\n# * 비어 있지 않은 줄은 디지털 카메라에서 자동적으로 부여하는 파일 접두어입니다\nCIMG # 카시오\nDSC_ # 니콘\nDSCF # 후지\nDSCN # 니콘\nDUW # 일부 휴대폰\nIMG # 일반\nJD # 제놉틱\nMGP # 펜탁스\nPICT # 기타\n #</pre> <!-- 이 줄은 그대로 두십시오 -->",
"upload-proto-error": "잘못된 프로토콜",
"upload-too-many-redirects": "URL이 너무 많은 넘겨주기를 포함하고 있습니다.",
"upload-http-error": "HTTP 오류 발생: $1",
"upload-copy-upload-invalid-domain": "이 도메인에 속하지 않는 웹사이트의 파일을 올릴 수 없습니다.",
+ "upload-foreign-cant-upload": "이 위키는 요청된 외부 파일 저장소에 파일을 업로드할 수 있도록 구성되어 있지 않습니다.",
"upload-dialog-title": "파일 올리기",
"upload-dialog-button-cancel": "취소",
"upload-dialog-button-done": "완료",
"upload-dialog-button-upload": "올리기",
"upload-form-label-infoform-title": "자세한 사항",
"upload-form-label-infoform-name": "이름",
+ "upload-form-label-infoform-name-tooltip": "이 파일을 설명할 수 있는 제목이며, 파일 이름으로 쓰일 것입니다. 띄어쓰기를 포함한 자연어를 쓸 수 있습니다. 파일 확장자는 포함하지 말아 주세요.",
"upload-form-label-infoform-description": "설명",
+ "upload-form-label-infoform-description-tooltip": "이 작품에 대해 주목할만한 모든 내용을 간략하게 기술합니다.\n사진의 경우 주로 무엇이 찍혀 있는지와 언제 어디서 촬영했는지를 언급합니다.",
"upload-form-label-usage-title": "사용",
"upload-form-label-usage-filename": "파일 이름",
"foreign-structured-upload-form-label-own-work": "자작입니다",
"foreign-structured-upload-form-label-infoform-categories": "분류",
"foreign-structured-upload-form-label-infoform-date": "날짜",
+ "foreign-structured-upload-form-label-own-work-message-local": "사용자는 이 파일을 업로드할 때 {{SITENAME}}의 서비스 조항과 라이선스 정책에 동의하는 것으로 간주합니다.",
+ "foreign-structured-upload-form-label-not-own-work-message-local": "이 파일을 {{SITENAME}}의 정책에 따라 업로드할 수 없으면 이 대화 상자를 닫고 다른 방식을 사용하십시오.",
+ "foreign-structured-upload-form-label-not-own-work-local-local": "[[Special:Upload|기본 파일 올리기 문서]]를 이용할 수도 있습니다.",
+ "foreign-structured-upload-form-label-own-work-message-default": "이 파일을 공유 저장소에 업로드하면 사용자는 서비스 조항과 라이선스 정책에 동의하는 것으로 간주합니다.",
+ "foreign-structured-upload-form-label-not-own-work-message-default": "이 파일을 공유 저장소의 정책에 따라 업로드할 수 없으면 이 대화 상자를 닫고 다른 방식을 사용하십시오.",
+ "foreign-structured-upload-form-label-not-own-work-local-default": "이 파일이 정책에 따라 업로드가 가능할 경우 [[Special:Upload|{{SITENAME}}의 기본 파일 올리기 문서]]를 이용할 수도 있습니다.",
"foreign-structured-upload-form-label-own-work-message-shared": "나는 이 파일에 대한 저작권을 소유하고 있음을 입증하고, 영구히 위키미디어 공용에 이 파일을 [https://creativecommons.org/licenses/by-sa/4.0/ 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0]에 따라 배포하는 데 동의하며, [https://wikimediafoundation.org/wiki/Terms_of_Use 이용 약관]에 동의합니다.",
"foreign-structured-upload-form-label-not-own-work-message-shared": "이 파일의 저작권을 소유하지 않거나 다른 라이선스로 배포하고 싶다면 [https://commons.wikimedia.org/wiki/Special:UploadWizard 공용 파일 올리기 마법사]를 사용하는 것을 고려해보세요.",
+ "foreign-structured-upload-form-label-not-own-work-local-shared": "사이트가 정책에 따라 이 파일의 업로드를 허용할 경우 [[Special:Upload|{{SITENAME}}의 기본 파일 올리기 문서]]를 이용할 수도 있습니다.",
"backend-fail-stream": "\"$1\" 파일을 스트림할 수 없습니다.",
"backend-fail-backup": "\"$1\" 파일을 백업할 수 없습니다.",
"backend-fail-notexists": "$1 파일이 존재하지 않습니다.",
"apihelp": "API 도움말",
"apihelp-no-such-module": "\"$1\" 모듈을 찾을 수 없습니다.",
"apisandbox": "API 실험실",
+ "apisandbox-jsonly": "API 연습장을 이용하려면 자바스크립트가 필요합니다.",
"apisandbox-api-disabled": "이 사이트에서는 API가 꺼져 있습니다.",
"apisandbox-intro": "<strong>미디어위키 웹 서비스 API</strong>를 시험해보려면 이 페이지를 이용해보세요. API 용법에 대해서는 [[mw:API:Main page|API 문서]]을 참고하십시오. 예: [//www.mediawiki.org/wiki/API#A_simple_example 대문의 내용 요청하기]. 더 많은 예를 보려면 액션을 선택하세요.\n\n여기가 연습장이라도 이 페이지에서 실행하는 동작때문에 위키를 변경할 수도 있다는 점에 유의하십시오.",
"apisandbox-fullscreen": "패널 늘리기",
"apisandbox-fullscreen-tooltip": "브라우저 창에 맞도록 샌드박스 패널 늘리기",
"apisandbox-unfullscreen": "페이지 보기",
+ "apisandbox-unfullscreen-tooltip": "연습장 틀의 크기를 줄이면 미디어위키 둘러보기 링크들을 이용할 수 있습니다.",
"apisandbox-submit": "요청하기",
"apisandbox-reset": "지우기",
"apisandbox-retry": "재시도",
"apisandbox-loading": "API 모듈 \"$1\"의 정보 불러오는 중...",
+ "apisandbox-load-error": "API 모듈 \"$1\"의 정보를 가져오는 도중 오류가 발생했습니다: $2",
"apisandbox-no-parameters": "이 API 모듈은 변수가 없습니다.",
"apisandbox-helpurls": "도움 링크들",
"apisandbox-examples": "예시",
"apisandbox-dynamic-parameters-add-placeholder": "변수 이름",
"apisandbox-dynamic-error-exists": "\"$1\"이라는 변수 이름은 이미 존재합니다.",
"apisandbox-deprecated-parameters": "앞으로 제거될 변수",
+ "apisandbox-fetch-token": "토큰 자동 채우기",
"apisandbox-submit-invalid-fields-title": "부적절한 필드가 있음",
+ "apisandbox-submit-invalid-fields-message": "강조된 필드를 수정한 다음 다시 시도해 주십시오.",
"apisandbox-results": "결과",
"apisandbox-sending-request": "API 요청을 보내는 중...",
"apisandbox-loading-results": "API 결과를 받는 중...",
"apisandbox-results-error": "API 질의 요청을 로딩하는 도중 에러 발생: $1.",
"apisandbox-request-url-label": "요청 URL:",
"apisandbox-request-time": "요청 처리 시간: {{PLURAL:$1|$1 ms}}",
+ "apisandbox-results-fixtoken": "토큰 수정 후 다시 제출",
"apisandbox-results-fixtoken-fail": "\"$1\" 토크을 가져오는데 실패했습니다.",
"apisandbox-alert-page": "이 문서에 있는 필드가 유효하지 않습니다.",
"apisandbox-alert-field": "이 필드의 값이 유효하지 않습니다.",
"listgrouprights-namespaceprotection-namespace": "이름공간",
"listgrouprights-namespaceprotection-restrictedto": "사용자가 편집할 수 있는 권한",
"listgrants": "부여",
- "listgrants-summary": "다음은 사용자 권한에 관련된 접근 권한을 통해 부여된 부여 목록입니다. 사용자는 자신의 계정에 대해 권한을 부여 할 수 있지만, 사용자가 애플리케이션에 부여한 권한 설정에 따라 제한이 있습니다. 사용자를 대신하여 동작하는 애플리케이션은 사용자가 갖고 있지 않은 권한은 사용할 수 없습니다. \n각각의 권한에 대한 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]가 있습니다.",
+ "listgrants-summary": "다음은 사용자 권한에 관련된 접근 권한을 통해 부여된 부여 목록입니다. 사용자는 자신의 계정에 대해 권한을 부여할 수 있지만, 사용자가 애플리케이션에 부여한 권한 설정에 따라 제한이 있습니다. 사용자를 대신하여 동작하는 애플리케이션은 사용자가 갖고 있지 않은 권한을 사용할 수는 없습니다. \n각각의 권한에 대한 [[{{MediaWiki:Listgrouprights-helppage}}|추가 정보]]가 있습니다.",
"listgrants-grant": "부여",
"listgrants-rights": "권한",
"trackingcategories": "추적용 분류",
"ipb-unblock": "사용자 또는 IP 주소 차단 해제하기",
"ipb-blocklist": "현재 차단 기록 보기",
"ipb-blocklist-contribs": "{{GENDER:$1|$1}}의 기여",
+ "ipb-blocklist-duration-left": "남은 기간: $1",
"unblockip": "사용자 차단 해제",
"unblockiptext": "아래의 양식에 차단 해제하려는 IP 주소나 사용자 이름을 입력하세요.",
"ipusubmit": "차단 해제",
"import-nonewrevisions": "가져온 판 없음(모든 판이 이미 존재하거나 오류로 인해 건너뛰었을 수도 있습니다.)",
"xml-error-string": "$3단 $2줄 (바이트 $4)에서 $1: $5",
"import-upload": "XML 데이터 올리기",
- "import-token-mismatch": "세션 데이터가 손실되었습니다.\n\n로그아웃 되었는지도 모릅니다. <strong>아직 로그인 상태인지 확인하고 다시 시도해주세요</strong>.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.",
+ "import-token-mismatch": "세션 데이터가 손실되었습니다.\n\n로그아웃되었는지도 모릅니다. <strong>아직 로그인 상태인지 확인하고 다시 시도해주세요</strong>.\n다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요. 그리고 브라우저 설정에서 쿠키 사용을 허용하는지 확인하세요.",
"import-invalid-interwiki": "해당 위키에서 문서를 가져올 수 없습니다.",
"import-error-edit": "문서를 편집할 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
"import-error-create": "문서를 만들 수 없기 때문에 \"$1\" 문서를 가져올 수 없었습니다.",
"tooltip-ca-nstab-category": "분류 문서 보기",
"tooltip-minoredit": "이 편집을 사소한 편집으로 표시하기",
"tooltip-save": "바뀐 내용 저장하기",
+ "tooltip-publish": "변경사항 게시",
"tooltip-preview": "바뀜을 미리 봅니다. 저장하기 전에 미리 보기를 해주세요!",
"tooltip-diff": "자신이 바꾼 내용 보기",
"tooltip-compareselectedversions": "이 문서에서 선택한 두 판 간의 차이를 비교",
"pageinfo-watchers": "문서를 주시하는 사용자 수",
"pageinfo-visiting-watchers": "이 문서를 최근에 방문한 주시하는 사용자 수",
"pageinfo-few-watchers": "{{PLURAL:$1|주시하는 사용자}} $1명보다 적음",
+ "pageinfo-few-visiting-watchers": "최근의 편집을 주시하는 사용자가 있을 수도 없을 수도 있습니다",
"pageinfo-redirects-name": "이 문서의 넘겨주기 수",
"pageinfo-redirects-value": "$1",
"pageinfo-subpages-name": "이 문서의 하위 문서 수",
"confirmemail_body_set": "$1 IP 주소를 사용하는 사용자가\n{{SITENAME}}의 \"$2\" 계정의 이메일 주소를 지정하였습니다.\n\n이 계정이 당신의 계정이고 {{SITENAME}}에서 이메일 기능을\n활성화하려면 아래 주소를 열어서 이메일 인증을 해 주세요:\n\n$3\n\n당신의 계정이 아니라면,\n이메일 인증 신청을 취소하기 위해 아래의 주소를 열어주세요:\n\n$5\n\n인증 코드는 $4에 만료됩니다.",
"confirmemail_invalidated": "이메일 확인이 취소됨",
"invalidateemail": "이메일 확인 취소",
+ "notificationemail_subject_changed": "{{SITENAME}}의 등록된 이메일 주소가 변경되었습니다",
+ "notificationemail_subject_removed": "{{SITENAME}}의 등록된 이메일 주소가 제거되었습니다",
+ "notificationemail_body_changed": "IP 주소 $1에 속하는 누군가가 {{SITENAME}}의 사용자 \"$2\" 계정의 이메일 주소를 \"$3\"으로 변경하였습니다.\n\n지금 이 글을 보고 계신 사용자로 추정되지만 만약 본인이 아닌 경우, 지금 바로 사이트 관리자에게 문의하십시오.",
+ "notificationemail_body_removed": "IP 주소 $1에 속하는 누군가가 {{SITENAME}}의 사용자 \"$2\" 계정의 이메일 주소를 제거하였습니다.\n\n지금 이 글을 보고 계신 사용자로 추정되지만 만약 본인이 아닌 경우, 지금 바로 사이트 관리자에게 문의하십시오.",
"scarytranscludedisabled": "[인터위키가 비활성되어 있습니다]",
"scarytranscludefailed": "[$1 틀을 불러오는 데에 실패했습니다]",
"scarytranscludefailed-httpstatus": "[$1 틀을 가져오는 데 실패했습니다: HTTP $2]",
"tags-deactivate": "비활성화",
"tags-hitcount": "$1개 {{PLURAL:$1|바뀜}}",
"tags-manage-no-permission": "태그를 변경할 권한이 없습니다.",
+ "tags-manage-blocked": "차단된 상태에서는 변경 태그를 관리할 수 없습니다.",
"tags-create-heading": "태그 생성",
"tags-create-explanation": "기본적으로 새로 생성된 태그는 사용자와 봇이 사용할 수 있습니다.",
"tags-create-tag-name": "태그 이름:",
"tags-delete-submit": "이 태그를 영구히 삭제",
"tags-delete-not-allowed": "확장 기능에서 정의된 태그는 확장 기능 설정에서 허용되지 않은 이상 삭제할 수 없습니다.",
"tags-delete-not-found": "\"$1\" 태그가 존재하지 않습니다.",
+ "tags-delete-too-many-uses": "\"$1\" 태그가 $2개 이상의 판에 적용되어 있으므로 삭제할 수 없습니다.",
+ "tags-delete-warnings-after-delete": "\"$1\" 태그가 삭제되었으나 다음과 같은 $2개의 경고 태그가 발생하였습니다:",
"tags-activate-title": "태그 활성화",
"tags-activate-question": "\"$1\" 태그를 활성화하려고 합니다.",
"tags-activate-reason": "이유:",
"tags-deactivate-reason": "이유:",
"tags-deactivate-not-allowed": "\"$1\" 태그를 비활성화할 수 없습니다.",
"tags-deactivate-submit": "비활성화",
+ "tags-apply-no-permission": "사용자의 변경 사항과 변경 태그를 적용할 권한이 없습니다.",
+ "tags-apply-blocked": "차단된 상태에서는 사용자의 변경 사항과 변경 태그를 적용할 수 없습니다.",
"tags-apply-not-allowed-one": "\"$1\" 태그를 수동으로 추가하는 것은 허용되지 않습니다.",
"tags-apply-not-allowed-multi": "다음 {{PLURAL:$2|태그를}} 수동으로 추가하는 것은 허용되지 않습니다: $1",
"tags-update-no-permission": "태그를 문서 판이나 로그 기록에서 추가하거나 삭제할 권한이 없습니다.",
+ "tags-update-blocked": "차단된 상태에서는 변경 태그를 추가하거나 제거할 수 없습니다.",
"tags-update-add-not-allowed-one": "\"$1\" 태그를 수동으로 추가하는 것은 허용되지 않습니다.",
"tags-update-add-not-allowed-multi": "다음 {{PLURAL:$2|태그는}} 수동으로 추가하는 것이 허용되지 않습니다: $1",
"tags-update-remove-not-allowed-one": "\"$1\" 태그를 제거하는 것은 허용되지 않습니다.",
"logentry-import-upload": "$1님이 $3 문서를 파일 올리기로 {{GENDER:$2|가져왔습니다}}",
"logentry-import-upload-details": "$1님이 $3 문서 ({{PLURAL:$4|판}} $4개)를 파일 올리기로 {{GENDER:$2|가져왔습니다}}",
"logentry-import-interwiki": "$1님이 $3 문서를 다른 위키에서 {{GENDER:$2|가져왔습니다}}",
- "logentry-import-interwiki-details": "$1님이 $3 문서 ({{PLURAL:$4|판}} $4개)를 다른 위키에서 {{GENDER:$2|가져왔습니다}}",
+ "logentry-import-interwiki-details": "$1님이 $3 문서($4개의 판)를 $5에서 {{GENDER:$2|가져왔습니다}}",
"logentry-merge-merge": "$1님이 $3 문서를 $4 안에 {{GENDER:$2|병합했습니다}} (판은 $5까지)",
"logentry-move-move": "$1님이 $3 문서를 $4 문서로 {{GENDER:$2|이동했습니다}}",
"logentry-move-move-noredirect": "$1님이 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|이동했습니다}}",
"logentry-protect-protect-cascade": "$1님이 $3 문서를 {{GENDER:$2|보호했습니다}} $4 [연쇄적]",
"logentry-protect-modify": "$1님이 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4",
"logentry-protect-modify-cascade": "$1님이 $3 문서의 보호 수준을 {{GENDER:$2|바꾸었습니다}} $4 [연쇄적]",
- "logentry-rights-rights": "$1님이 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}",
+ "logentry-rights-rights": "$1님이 {{GENDER:$6|$3}}을(를) 위해 $3 사용자의 권한을 $4에서 $5(으)로 {{GENDER:$2|바꾸었습니다}}",
"logentry-rights-rights-legacy": "$1님이 $3 사용자의 권한을 {{GENDER:$2|바꾸었습니다}}",
"logentry-rights-autopromote": "$1님이 권한을 자동적으로 $4에서 $5으로 {{GENDER:$2|바꾸었습니다}}",
"logentry-upload-upload": "$1님이 $3 파일을 {{GENDER:$2|올렸습니다}}",
"api-error-nomodule": "내부 오류: 올리기 모듈이 설정되지 않았습니다.",
"api-error-ok-but-empty": "내부 오류: 서버에서 응답이 없습니다.",
"api-error-overwrite": "이미 있는 파일을 덮어쓸 수 없습니다.",
+ "api-error-ratelimited": "짧은 시간 안에 위키가 허용하는 것 보다 더 많은 파일을 업로드하려고 합니다.\n몇 분 뒤에 다시 시도해 주십시오.",
"api-error-stashfailed": "내부 오류: 서버가 임시 파일을 저장하지 못했습니다.",
"api-error-publishfailed": "내부 오류: 서버가 임시 파일을 게시하지 못했습니다.",
"api-error-stasherror": "파일을 안전한 곳으로 업로드 하는 동안 오류가 발생했습니다.",
"api-error-stashzerolength": "서버는 파일을 저장하지 못했는데, 파일의 용량이 0이기 때문입니다.",
"api-error-stashnotloggedin": "파일을 업로드하기 위해 로그인이 필요합니다.",
"api-error-stashwrongowner": "저장된 임시 저장소에 존재하는 파일에 접근할 권한이 없습니다.",
+ "api-error-stashnosuchfilekey": "미공개 위치에 접근을 시도한 파일 키는 존재하지 않습니다.",
"api-error-timeout": "서버가 제 시간 내에 응답하지 않았습니다.",
"api-error-unclassified": "알 수 없는 오류가 발생했습니다.",
"api-error-unknown-code": "알 수 없는 오류: \"$1\"",
"api-error-unknownerror": "알 수 없는 오류: \"$1\"",
"api-error-uploaddisabled": "이 위키에서 파일 올리기가 비활성화되어 있습니다.",
"api-error-verification-error": "파일이 손상되었거나 잘못된 확장자를 사용하고 있습니다.",
+ "api-error-was-deleted": "이 이름으로 된 파일은 과거에 업로드된 이후 삭제된 적이 있습니다.",
"duration-seconds": "$1{{PLURAL:$1|초}}",
"duration-minutes": "$1{{PLURAL:$1|분}}",
"duration-hours": "$1{{PLURAL:$1|시간}}",
"expand_templates_generate_xml": "XML 구문 트리 보기",
"expand_templates_generate_rawhtml": "원본 HTML 보이기",
"expand_templates_preview": "미리 보기",
+ "expand_templates_preview_fail_html": "<em>{{SITENAME}}에서 순수 HTML 입력을 허용한 상태에서 세션 데이터가 분실되었습니다. 그러므로 자바스크립트 공격을 예방하기 위해 미리 보기는 숨겨져 있습니다.</em>\n\n<strong>적합하게 미리 보기를 시도했다면 다시 시도해 주십시오.</strong>\n그래도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하여 사용자의 브라우저가 이 사이트에서 쿠키를 허용하는지 확인해 주십시오.",
+ "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}}에서 순수 HTML 입력을 허용한 상태에서 사용자는 로그인되어 있지 않습니다. 그러므로 자바스크립트 공격을 예방하기 위해 미리 보기는 숨겨져 있습니다.</em>\n\n<strong>적합하게 미리 보기를 시도했다면 [[Special:UserLogin|로그인]]한 다음 다시 시도해 주십시오.",
"expand_templates_input_missing": "전개할 내용을 입력해야 합니다.",
"pagelanguage": "문서 언어 바꾸기",
"pagelang-name": "문서",
"special-characters-group-ipa": "IPA 문자",
"special-characters-group-symbols": "기호",
"special-characters-group-greek": "그리스 문자",
+ "special-characters-group-greekextended": "그리스어 확장",
"special-characters-group-cyrillic": "키릴 문자",
"special-characters-group-arabic": "아랍 문자",
"special-characters-group-arabicextended": "아랍어 확장",
"sessionprovider-mediawiki-session-cookiesessionprovider": "쿠키 기반 세션",
"sessionprovider-nocookies": "브라우저의 쿠키 기능이 꺼져 있는지 확인하십시오. 쿠키 기능을 켠 다음 다시 시작해야 합니다.",
"randomrootpage": "임의 루트 페이지",
- "log-action-filter-block": "차단의 유형:"
+ "log-action-filter-block": "차단의 유형:",
+ "log-action-filter-contentmodel": "콘텐츠 모델 수정 분류:",
+ "log-action-filter-delete": "삭제 종류:",
+ "log-action-filter-import": "가져오기 종류:",
+ "log-action-filter-managetags": "태그 관리 동작 종류:",
+ "log-action-filter-move": "이동 종류:",
+ "log-action-filter-newusers": "계정 생성 종류:",
+ "log-action-filter-patrol": "점검 종류:",
+ "log-action-filter-protect": "보호 종류:",
+ "log-action-filter-rights": "권한 변경 종류",
+ "log-action-filter-upload": "업로드 종류:",
+ "log-action-filter-all": "모두",
+ "log-action-filter-block-block": "차단",
+ "log-action-filter-block-reblock": "차단 변경",
+ "log-action-filter-block-unblock": "차단 해제",
+ "log-action-filter-contentmodel-change": "콘텐츠 모델 변경",
+ "log-action-filter-contentmodel-new": "비표준 콘텐츠 모델 문서 생성",
+ "log-action-filter-delete-delete": "문서 삭제",
+ "log-action-filter-delete-restore": "문서 복구",
+ "log-action-filter-delete-event": "로그 삭제",
+ "log-action-filter-delete-revision": "판 삭제",
+ "log-action-filter-import-interwiki": "트랜스위키 가져오기",
+ "log-action-filter-import-upload": "XML 업로드를 통한 가져오기",
+ "log-action-filter-managetags-create": "태그 생성",
+ "log-action-filter-managetags-delete": "태그 삭제",
+ "log-action-filter-managetags-activate": "태그 활성화",
+ "log-action-filter-managetags-deactivate": "태그 비활성화",
+ "log-action-filter-move-move": "넘겨주기를 덮어쓰지 않고 이동",
+ "log-action-filter-move-move_redir": "넘겨주기를 덮어쓰며 이동",
+ "log-action-filter-newusers-create": "익명의 사용자에 의한 생성",
+ "log-action-filter-newusers-create2": "등록된 사용자에 의한 생성",
+ "log-action-filter-newusers-autocreate": "자동 생성",
+ "log-action-filter-patrol-patrol": "수동 점검",
+ "log-action-filter-patrol-autopatrol": "자동 점검",
+ "log-action-filter-protect-protect": "보호",
+ "log-action-filter-protect-modify": "보호 변경",
+ "log-action-filter-protect-unprotect": "보호 해제",
+ "log-action-filter-protect-move_prot": "이동 보호",
+ "log-action-filter-rights-rights": "수동 변경",
+ "log-action-filter-rights-autopromote": "자동 변경",
+ "log-action-filter-upload-upload": "새로 업로드",
+ "log-action-filter-upload-overwrite": "다시 업로드"
}
"minoredit": "Dat es en klein Änderong (mini)",
"watchthis": "Op di Sigg heh oppaßße",
"savearticle": "De Sigg Avspeichere",
+ "publishpage": "Veröffentlesche",
"preview": "Vör-Ansich",
- "showpreview": "Vör-Aansich zeije",
- "showdiff": "De Ungerscheide zeije",
+ "showpreview": "Vöraff belohre",
+ "showdiff": "Veränderonge zeije",
"blankarticle": "<strong>Opjepaß:</strong> Di Sigg, di De jrahd aanlähje wells, es läddesch. Wann De jäz norr_ens op „{{int:savearticle}}“ jehß, weed di Sigg och ohne jät dren aanjelaat.",
"anoneditwarning": "'''Opjepaß:''' Weil De nit enjelogg bes, weed Ding <i lang=\"en\" xml:lang=\"en\">IP</i>-Adräß en heh dä Sigg ier Leß met de Väsiohne faßjehallde wääde.\nWann De [$1 enlogge deihs] udder [$2 desch aanmällds], dann wääde Ding Änderonge met dingem Nahme als Metmaacher opjevöhrt.",
"anonpreviewwarning": "''Weil De nit enjlogg bes, weed Ding <code lang=\"en\">IP</code>-Addräß zoamme met dä neue Version faßjehallde, wann de heh di Sigg avspeichere deihß.''",
"userpage-userdoesnotexist": "Enne Metmaacher „<nowiki>$1</nowiki>“ ham_mer nit, beß De sescher, dat De di Metmaachersigg verhaftesch änndere udder aanlähje wellß?.",
"userpage-userdoesnotexist-view": "Ene Metmaacher mem Nahme „$1“ hät sesch noch nih aanjemeldt",
"blocked-notice-logextract": "Dä Metmaacher es jraad jesperrt.\nHeh kütt der neuste Enndraach drövver uss_em Logbooch övver et Metmaacher_Sperre:",
- "clearyourcache": "'''Opjepass:'''\nNoh em Speichere künnd et sin, datt De Dingem Brauser singe Cache Speicher\növverlisste muss, ih datt De de Änderunge och ze sinn kreß.\n* Beim '''<i lang=\"en\">Mozilla</i>''' un '''<i lang=\"en\">Firefox</i>''' un '''<i lang=\"en\">Safari</i>''', dröck dä Jrußschreffknopp eronger un kleck dann op <i lang=\"en\">Reload</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck <i lang=\"de\">Ctrl+F5</i> / <i lang=\"de\">Strg+F5</i>, udder dröck <i lang=\"en\">Ctrl+R</i> / <i lang=\"de\">Strg+R</i>, obb enem <i lang=\"en\">Macintosh</i> dröck <i lang=\"de\">⌘+R</i>.\n* Beim '''<i lang=\"en\">Google Chrome</i>''', dröck <i lang=\"en\">Ctrl+Jrußschreffknopp+R</i> / <i lang=\"de\">Strg+Jrußschreffknopp+R</i>, obb enem <i lang=\"en\">Macintosh</i> dröck <i lang=\"de\">⌘+Jrußschreffknopp+R</i>.\n* Beim '''<i lang=\"en\">Internet Explorer</i>''', dröck dä Jrußschreffknopp eronger un kleck dann op <i lang=\"en\">Refresh</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck <i lang=\"de\">Ctrl+F5</i> / <i lang=\"de\">Strg+F5</i>,\n* Beim '''<i lang=\"en\">Konqueror</i>''' kleck op <i lang=\"en\">Reload</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck op <i>F5</i>.\n* Beim '''<i lang=\"en\">Opera</i>''' kanns De övver et Menue jonn un däm janze Zwescheschpeischer singe Enhald övver <i lang=\"en\">Tools → Preferences</i> / <i lang=\"de\">Werkzeug → Einstellungen</i> fottschmieße, neuerdings jeiht et och met <i>Alt+F5</i>.",
+ "clearyourcache": "<strong>Opjepass:</strong>\nNoh em Speichere künnd et sin, datt De Dingem Brauser singe Cache Speicher\növverlisste muss, ih datt De de Änderunge och ze sinn kreß.\n* Beim <strong><i lang=\"en\">Mozilla</i></strong> un <strong><i lang=\"en\">Firefox</i></strong> un <strong><i lang=\"en\">Safari</i></strong>, dröck dä Jrußschreffknopp eronger un kleck dann op <i lang=\"en\">Reload</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck <i lang=\"de\">Ctrl+F5</i> / <i lang=\"de\">Strg+F5</i>, udder dröck <i lang=\"en\">Ctrl+R</i> / <i lang=\"de\">Strg+R</i>, obb enem <i lang=\"en\">Macintosh</i> dröck <i lang=\"de\">⌘+R</i>.\n* Beim <strong><i lang=\"en\">Google Chrome</i></strong>, dröck <i lang=\"en\">Ctrl+Jrußschreffknopp+R</i> / <i lang=\"de\">Strg+Jrußschreffknopp+R</i>, obb enem <i lang=\"en\">Macintosh</i> dröck <i lang=\"de\">⌘+Jrußschreffknopp+R</i>.\n* Beim <strong><i lang=\"en\">Internet Explorer</i></strong>, dröck dä Jrußschreffknopp eronger un kleck dann op <i lang=\"en\">Refresh</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck <i lang=\"de\">Ctrl+F5</i> / <i lang=\"de\">Strg+F5</i>,\n* Beim <strong><i lang=\"en\">Konqueror</i></strong> klegg op <i lang=\"en\">Reload</i> / <i lang=\"de\">Aktualisieren</i>, udder dröck op <i>F5</i>.\n* Beim <strong><i lang=\"en\">Opera</i></strong> kanns De övver et Menue jonn un däm janze Zwescheschpeischer singe Enhald övver <i lang=\"en\">Tools → Preferences</i> / <i lang=\"de\">Werkzeug → Einstellungen</i> fottschmieße, neuerdings jeiht et och met <i>Alt+F5</i>.",
"usercssyoucanpreview": "<b>Tipp:</b> Dun met däm <b style=\"padding:2px; background-color:#ddd;\ncolor:black\">Vör-Aansich Zeije</b>-Knopp usprobeere, wat Ding neu\nMetmaacher_CSS/Java_Skripp mäht, ih dat et avspeichere deis!",
"userjsyoucanpreview": "<b>Tipp:</b> Dun met däm <b style=\"padding:2px; background-color:#ddd;\ncolor:black\">Vör-Aansich Zeije</b>-Knopp usprobeere, wat Ding neu\nMetmaacher_Java_Skripp mäht, ih dat et avspeichere deis!",
"usercsspreview": "<b>Opjepass: Do bes heh nor am Usprobeere, wat Ding\nMetmaacher_CSS mäht, et es noch nit jesechert!</b>",
"tooltip-ca-nstab-category": "Dun de Saachjropp aanzeije",
"tooltip-minoredit": "Deit Ding Änderonge als klein Mini-Änderonge markkehre.",
"tooltip-save": "Deit Ding Änderonge avspeichere.",
+ "tooltip-publish": "Donn Ding Änderonge öffentlesch maache",
"tooltip-preview": "Liss de Vör-Aanseesch vun dä Sigg un vun Dinge Änderonge, ih datte se avspeijschere deihs!",
"tooltip-diff": "Zeijsch Ding Änderonge aam Täx aan.",
"tooltip-compareselectedversions": "Dun de Ungerscheid zwesche dä beids usjewählde Versione zeije.",
"logentry-protect-protect-cascade": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Sigg „$3“ jeschöz: $4 met wiggerjävve",
"logentry-protect-modify": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dä Schoz vun dä Sigg „$3“ verändert: $4",
"logentry-protect-modify-cascade": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät dä Schoz vun dä Sigg „$3“ verändert: $4 met wiggerjävve",
- "logentry-rights-rights": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät däm Metmaacher „$3“ sing Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.",
+ "logentry-rights-rights": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} „$1“ hät {{GENDER:$2|däm|däm|däm Metmaacher|dä|däm}} „$3“ {{GENDER:$2|sing|sing|sing|ier|sing}} Jroppe-Räächde vun „$4“ op „$5“ ömjestallt.",
"logentry-rights-rights-legacy": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 hät däm Metmaacher $3 sing Räääschte-Jroppe verändert.",
"logentry-rights-autopromote": "{{GENDER:$1|Dä|Et|Dä Metmaacher|De|Dat}} $1 wood automattesch vum $4 zom $5 jemaat.",
"logentry-upload-upload": "{{GENDER:$2|Dä|Dat|Dä Metmaacher|De|Dat}} $1 hät di Dattei „$3“ huhjelahe.",
"retypenew": "Şîfreya nû careke din binîvîse",
"resetpass_submit": "Şîfreyê pêkbîne û têkeve",
"changepassword-success": "Guhertine şîfreya te serkeftî bû!",
+ "botpasswords-label-appid": "Navê bot:",
+ "botpasswords-label-create": "Çêke",
"botpasswords-label-update": "Rojane bike",
"botpasswords-label-cancel": "Betal bike",
+ "botpasswords-label-delete": "Jê bibe",
+ "botpasswords-bad-appid": "Navê bot \"$1\" ne derbasdar e.",
"resetpass_forbidden": "Şîfre nikarin werin guhertin",
"resetpass-submit-loggedin": "Şîfreyê biguherîne",
"resetpass-submit-cancel": "Betal bike",
"postedit-confirmation-restored": "Ev rûpel hate restorekirin.",
"postedit-confirmation-saved": "Guhertina te hate tomarkirin.",
"edit-already-exists": "Nikarî rûpeleka nuh çêke.\nEw berê heye.",
+ "invalid-content-data": "Daneyên naverokê yên nederbasdar",
"content-model-wikitext": "wîkînivîs",
"content-model-text": "nivîsê sade",
"content-model-javascript": "JavaScript",
"right-userrights": "Hemû mafên bikarhêner biguherîne",
"right-userrights-interwiki": "Mafên bikarhênerên li ser wîkiyên din biguherîne",
"right-sendemail": "Ji bikarhênerên di re ename bişîne",
+ "grant-editpage": "Rûpelên ku hene biguherîne",
+ "grant-editprotected": "Rûpelên parastî bigûherîne",
"newuserlogpage": "Çêkirina hesabê nû",
"newuserlogpagetext": "Ev têketina hesabên bikarhêneriyê ye ên ku nû hatine afirandin.",
"rightslog": "Guhertina mafê bikarhêneriyê",
"filewasdeleted": "Data'yek bi vê navê hatibû barkirin û jêbirin. Xêra xwe li $1 seke ku barkirina te hêja ye ya na.",
"filename-bad-prefix": "Nava wê data'yê, yê tu niha bardikê, bi '''\"$1\"''' destpêdike. Kamêrayên dîjîtal wan navan didin wêneyên xwe. Ji kerema xwe navekî baştir binivisîne ji bo mirov zûtir zanibin ku şayeşê vê wêneyê çî ye.",
"upload-file-error": "Çewtiya navxweyî",
+ "upload-misc-error": "Çewtiya barkirinê ya nenas",
+ "upload-dialog-title": "Dosyeyê bar bike",
"upload-dialog-button-cancel": "Betal bike",
"upload-dialog-button-done": "Çêbû",
"upload-dialog-button-save": "Tomar bike",
"mostcategories": "Rûpelên bi pir kategorî",
"mostinterwikis": "Rûpelên bi bêhtirîn girêdanên înterwîkiyê",
"prefixindex": "Hemû rûpelên bi pêşbendik",
+ "prefixindex-submit": "Nîşan bide",
"shortpages": "Rûpelên kurt",
"longpages": "Rûpelên dirêj",
"deadendpages": "Rûpelên bê dergeh",
"listusers-editsonly": "Tenê bikarhênerên bi guherrandinan nîşan bide",
"usercreated": "di $1 de, li $2 hate çêkirin",
"newpages": "Rûpelên nû",
+ "newpages-submit": "Nîşan bide",
"newpages-username": "Navê bikarhêner:",
"ancientpages": "Gotarên herî kevin",
"move": "Hilgire",
"specialloguserlabel": "Bikarhêner:",
"speciallogtitlelabel": "Armanc (sernav an bikarhêner)",
"log": "Têketin",
+ "logeventslist-submit": "Nîşan bide",
"all-logs-page": "Hemû têketin",
"alllogstext": "Hemû têketinên {{SITENAME}} li jêr tên nîşandan.\nTu dikarî ji xwe re têketinekê hilbijêrî, navê bikarhêneriyê an navê rûpelekê binivîse û agahiyan li ser wê bibîne.",
"logempty": "Tiştek di vir de nîne.",
"log-title-wildcard": "Li sernavên bi vê dest pê dikin bigere",
+ "checkbox-select": "Hilbijêre:$1",
+ "checkbox-all": "Hemû",
"allpages": "Hemû rûpel",
"nextpage": "Rûpela pêşî ($1)",
"prevpage": "Rûpelê berî vê ($1)",
"allpages-bad-ns": "Namespace'a \"$1\" di {{SITENAME}} da tune ye.",
"allpages-hide-redirects": "Beralîkirinan veşêre",
"categories": "Kategorî",
+ "categories-submit": "Nîşan bide",
"categoriespagetext": "Di van kategoriyan de rûpel an jî medya hene.\n[[Special:UnusedCategories|Kategoriyên nayên bikaranîn]] li vir nayên nîşandan.\nLi [[Special:WantedCategories|kategoriyên xwestî]] binêre.",
"deletedcontributions": "Beşdariyên bikarhênerekî yê jêbirî",
"deletedcontributions-title": "Guherandinên bikarhêner yê jêbirî",
"listgrouprights-members": "(lîsteya endaman)",
"listgrouprights-addgroup-all": "Hemû koman tevlî bike",
"listgrouprights-removegroup-all": "Hemû koman jê bibe",
+ "listgrants-rights": "Maf",
"trackingcategories-name": "Navê peyamê",
"trackingcategories-nodesc": "Ti danasîn tune ye.",
"mailnologin": "Navnîşanê neşîne",
"wlshowlast": "Guhertinên berî $1 saetan, $2 rojan, ya nîşan bide",
"watchlist-hide": "Veşêre",
"watchlist-submit": "Nîşan bide",
+ "wlshowhidebots": "bot",
"wlshowhideliu": "bikarhênerên tomarkirî",
+ "wlshowhideanons": "bikarhênerên bênav",
"wlshowhidecategorization": "kategorîzekirina rûpelan",
"watchlist-options": "Vebijarkên lîsteya şopandinê",
"watching": "Tê şopandin...",
"spamprotectiontitle": "Parastina spam",
"spamprotectiontext": "Rûpela ku tu dixwazî tomar bikî ji ber parastina spamê hate astengkirin.\nJi ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.",
"spamprotectionmatch": "Ev nivîsa parastinê spam vêxist: $1",
+ "pageinfo-title": "Agahiyên bo \"$1\"",
"pageinfo-header-basic": "Agahiyên sereke",
"pageinfo-header-edits": "Dîrokê biguherîne",
"pageinfo-header-restrictions": "Parastina rûpelê",
"pageinfo-firsttime": "Dema çêkirina rûpelê",
"pageinfo-lasttime": "Dema guherandina dawî",
"pageinfo-edits": "Hejmara guherandinan",
+ "pageinfo-hidden-categories": "{{PLURAL:$1|Kategoriya|Kategoriyên}} veşartî ($1)",
"pageinfo-toolboxlink": "Agahiyên rûpelê",
"pageinfo-redirectsto-info": "agahî",
"pageinfo-contentpage-yes": "Erê",
"exif-usercomment": "Şîroveyên bikarhêner",
"exif-datetimedigitized": "Dema pencekîkirinê",
"exif-exposuretime-format": "$1 sanî ($2)",
- "exif-brightnessvalue": "Zelalî",
+ "exif-brightnessvalue": "Zelaliya APEX",
"exif-flash": "Flaş",
"exif-filesource": "Çavkaniya pelê",
"exif-contrast": "Kontrast",
"exif-disclaimer": "Ferexetname",
"exif-unknowndate": "Dîroka nayê zanîn",
"exif-orientation-1": "Normal",
+ "exif-componentsconfiguration-0": "tune ye",
"exif-exposureprogram-1": "Manûel",
"exif-exposureprogram-2": "Programa normal",
"exif-subjectdistance-value": "$1 metre",
"confirm-purge-top": "Bîra vê rûpelê jêbîbe ?",
"confirm-watch-button": "Temam",
"confirm-unwatch-button": "Baş e",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← rûpela berî vê",
"imgmultipagenext": "rûpela din →",
"imgmultigo": "Here!",
"imgmultigoto": "Here rûpela $1",
+ "img-lang-default": "(zimanê standart)",
"table_pager_next": "Rûpela pêş",
"table_pager_prev": "Rûpela berî",
"table_pager_first": "Rûpela pêşîn",
"watchlistedit-clear-titles": "Sernav:",
"watchlisttools-edit": "Lîsteya şopandinê bibîne û biguherîne",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|gotûbêj]])",
+ "timezone-local": "Herêmî",
"version": "Versiyon",
"version-specialpages": "Rûpelên taybet",
"version-other": "Yên din",
"version-software-product": "Berhem",
"version-software-version": "Guherto",
"version-entrypoints-header-url": "URL",
+ "version-libraries-version": "Guherto",
+ "version-libraries-license": "Destûr",
"version-libraries-description": "Danasîn",
+ "version-libraries-authors": "Xwedî",
"fileduplicatesearch-filename": "Navê dosyeyê:",
"fileduplicatesearch-submit": "Lê bigere",
"specialpages": "Rûpelên taybet",
"tags-active-yes": "Erê",
"tags-active-no": "Na",
"tags-edit": "biguherîne",
+ "tags-delete": "jê bibe",
"tags-create-reason": "Sedem:",
"tags-delete-reason": "Sedem:",
"tags-activate-reason": "Sedem:",
"tags-deactivate-reason": "Sedem:",
+ "tags-edit-reason": "Sedem:",
"comparepages": "Rûpelan bide ber hev",
"compare-page1": "Rûpel 1",
"compare-page2": "Rûpel 2",
"htmlform-selectorother-other": "Yên din",
"htmlform-no": "Na",
"htmlform-yes": "Erê",
+ "htmlform-chosen-placeholder": "Vebijarkekê hilbijêre",
+ "htmlform-title-not-exists": "$1 tune ye.",
+ "htmlform-user-not-exists": "<strong>$1</strong> tune ye.",
+ "htmlform-user-not-valid": "<strong>$1</strong> ne navekî derbasdar e.",
"logentry-delete-delete": "$1 rûpela $3 {{GENDER:$2|jê bir}}",
"revdelete-content-hid": "naverok veşartî ye",
"revdelete-uname-hid": "navê bikarhêneriyê yê veşartî",
"feedback-error-title": "Çewtî",
"feedback-message": "Peyam:",
"feedback-subject": "Mijar:",
+ "feedback-submit": "Tomar bike",
"feedback-thanks-title": "Spas!",
"searchsuggest-search": "Lêgerîn",
"searchsuggest-containing": "dihundirîne...",
"api-error-filename-tooshort": "Navê dosyeyê pir kurt e.",
+ "api-error-unknown-code": "Çewtiya nenas: \"$1\".",
+ "api-error-unknownerror": "Çewtiya nenas: \"$1\".",
+ "duration-years": "$1 {{PLURAL:$1|sal}}",
"expand_templates_output": "Encam",
"expand_templates_ok": "Baş e",
"expand_templates_preview": "Pêşdîtin",
"pagelanguage": "Zimanê rûpelê biguherîne",
+ "pagelang-name": "Rûpel",
"pagelang-language": "Ziman",
+ "pagelang-use-default": "Zimanê standart bi kar bîne",
"pagelang-select-lang": "Zimanekî hilbijêre",
"pagelang-submit": "Tomar bike",
"right-pagelang": "Zimanê rûpelê biguherîne",
"action-pagelang": "zimanê rûpelê biguherîne",
"log-name-pagelang": "Têketina guherandina ziman",
+ "logentry-pagelang-pagelang": "$1 zimanê $3 ji $4 {{GENDER:$2|guherand}} $5",
"mediastatistics-header-total": "Hemû dosye",
"special-characters-group-latin": "Latînî",
"special-characters-group-latinextended": "Latînî berfirehkirî",
"special-characters-group-lao": "Lao",
"special-characters-group-khmer": "Khmer",
"mw-widgets-titleinput-description-new-page": "rûpel hê tune ye",
- "mw-widgets-titleinput-description-redirect": "beralî bike ber bi $1 ve"
+ "mw-widgets-titleinput-description-redirect": "beralî bike ber bi $1 ve",
+ "log-action-filter-all": "Hemû",
+ "log-action-filter-block-block": "Asteng bike"
}
"minoredit": "Dëst ass eng kleng Ännerung",
"watchthis": "Dës Säit iwwerwaachen",
"savearticle": "Säit späicheren",
+ "publishpage": "Säit publizéieren",
"preview": "Kucken ouni ofzespäicheren",
"showpreview": "Kucken ouni ofzespäicheren",
"showdiff": "Ännerunge weisen",
"ipbexpiry": "Gültegkeet:",
"ipbreason": "Grond:",
"ipbreason-dropdown": "*Heefeg Ursaache fir Benotzer ze spären:\n**Bewosst falsch Informatiounen an eng oder méi Säite gesat\n**Ouni Grond Inhalt vu Säite geläscht\n**Spam-Verknëppunge mat externe Säiten\n**Topereien an d'Säite gesat\n**Beleidegt oder bedréit aner Mataarbechter\n**Mëssbrauch vu verschiddene Benotzernimm\n**Net akzeptabele Benotzernumm",
- "ipb-hardblock": "Verhënneren datt ageloggte Benotzer vun dëser IP-Adress aus Ännerunge maache kënnen",
+ "ipb-hardblock": "Verhënneren datt ageloggt Benotzer vun dëser IP-Adress aus Ännerunge maache kënnen",
"ipbcreateaccount": "Opmaache vun engem Benotzerkont verhënneren",
"ipbemailban": "Verhënneren datt de Benotzer E-Maile verschéckt",
"ipbenableautoblock": "Automatesch déi lescht IP-Adress spären déi vun dësem Benotzer benotzt gouf, an all IP-Adresse vun denen dëse Benotzer versicht Ännerunge virzehuelen",
"tooltip-ca-nstab-category": "Kategoriesäit weisen",
"tooltip-minoredit": "Dës Ännerung als kleng markéieren.",
"tooltip-save": "Ännerunge späicheren",
+ "tooltip-publish": "Är Ännerunge publizéieren",
"tooltip-preview": "Kuckt är Ännerungen ouni ofzespäicheren, Benotzt dëst w.e.g. virum späicheren!",
"tooltip-diff": "Weist wéi eng Ännerungen Dir beim Text gemaach hutt.",
"tooltip-compareselectedversions": "D'Ënnerscheeder op dëser Säit tëscht den zwou gewielte Versioune weisen.",
"logentry-newusers-autocreate": "De Benotzerkont $1 gouf automatesch {{GENDER:$2|ugeluecht}}",
"logentry-protect-protect": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gespaart",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|huet}} d'Säit $3 $4 gespaart [Kaskadespär]",
- "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen {{GENDER:$3|d'|de}} $3 gehéiert vu(n) $4 op $5 geännert",
+ "logentry-rights-rights": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen {{GENDER:$6|d'|de}} $3 gehéiert vu(n) $4 op $5 geännert",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|huet}} d'Gruppen zou deenen de Benotzer $3 gehéiert geännert",
"logentry-rights-autopromote": "De Benotzer $1 {{GENDER:$2|krut}} d'Benotzerrechter automatesch vu(n) $4 op $5 geännert",
"logentry-upload-upload": "$1 huet $3 {{GENDER:$2|eropgelueden}}",
"Mjbmr",
"Matma Rex",
"Lakzon",
- "Nemo bis"
+ "Nemo bis",
+ "Amire80"
]
},
"tog-underline": "هوم پئیڤأند زیرخأط دار:",
"listgrouprights-rights": "حقوقیا",
"listgrouprights-helppage": "هومیاری:حقوق گرو",
"listgrouprights-members": "(نوم گه اندومیا)",
- "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+ "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code dir=\"ltr\">($2)</code></span>",
"listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
"listgrouprights-addgroup": "{{PLURAL:$2|جأرغە|جأرغە یا}} نە ئضاف بأکیت: $1",
"listgrouprights-removegroup": "{{PLURAL:$2|جأرغە|جأرغە یا}} نە ڤئرداریت: $1",
"watchlistedit-raw-done": "Jūsų stebimųjų sąrašas buvo atnaujintas.",
"watchlistedit-raw-added": "$1 {{PLURAL:$1|puslapis buvo pridėtas|puslapiai buvo pridėti|puslapių buvo pridėta}}:",
"watchlistedit-raw-removed": "$1 {{PLURAL:$1|puslapis buvo pašalintas|puslapiai buvo pašalinti|puslapių buvo pašalinta}}:",
- "watchlistedit-clear-title": "Išvalytas stebimųjų sąrašas",
+ "watchlistedit-clear-title": "Išvalyti stebimųjų sąrašą",
"watchlistedit-clear-legend": "Išvalyti stebimųjų sąrašą",
"watchlistedit-clear-explain": "Visi pavadinimai bus pašalinti iš jūsų stebimųjų sąrašo",
"watchlistedit-clear-titles": "Pavadinimai:",
"Nemo bis",
"飞舞回堂前",
"Macofe",
- "Bowleerin"
+ "Bowleerin",
+ "SolidBlock"
]
},
"tog-underline": "鏈墊線:",
"view-foreign": "觀於$1",
"edit": "纂",
"create": "立",
+ "create-local": "增地言",
"editthispage": "纂",
"create-this-page": "立",
"delete": "刪",
"preview": "草覽",
"showpreview": "示覽",
"showdiff": "示異",
- "anoneditwarning": "'''警示:'''子未登簿,IP將誌。",
+ "anoneditwarning": "'''警示:'''子未登簿,若確纂,IP將誌。茍[$1 登]或[$2 開戶口],是纂欲存以子名,及他效。",
"anonpreviewwarning": "''子未登簿,IP將誌。''",
"missingsummary": "'''醒示:'''子未概之,復「{{int:savearticle}}」則文倍焉。",
"missingcommenttext": "請贊之",
"categories": "類",
"categoriespagetext": "大典{{PLURAL:$1|類中}}有頁或媒。\n[[Special:UnusedCategories|未類]]無示之。\n閱[[Special:WantedCategories|需類]]也。",
"categoriesfrom": "示此項起之類:",
- "special-categories-sort-count": "排數",
- "special-categories-sort-abc": "排字",
"deletedcontributions": "已刪之積",
"deletedcontributions-title": "所棄之事",
"sp-deletedcontributions-contribs": "積",
"importlogpagetext": "秩入匯自他山之審。",
"import-logentry-upload-detail": "有審$1",
"import-logentry-interwiki-detail": "$1審自$2",
- "tooltip-pt-userpage": "述平生、紹身家、銘字號",
+ "tooltip-pt-userpage": "{{GENDER:|君自}}卷",
"tooltip-pt-anonuserpage": "君IP之舍",
- "tooltip-pt-mytalk": "與眾論、往魚雁、湧文滔",
+ "tooltip-pt-mytalk": "{{GENDER:|君之}}議室",
"tooltip-pt-anontalk": "此IP所修之議",
- "tooltip-pt-preferences": "更符驛、排版式、投所好",
+ "tooltip-pt-preferences": "{{GENDER:|君之}}好",
"tooltip-pt-watchlist": "收矚目、治眼線、賞萌茂",
- "tooltip-pt-mycontris": "刻勛功、追作續、慰苦勞",
+ "tooltip-pt-mycontris": "{{GENDER:|君之}}勛表",
"tooltip-pt-login": "設書齋、錄功績、廣放哨",
"tooltip-pt-logout": "凡事盡,乘雲飄",
"tooltip-pt-createaccount": "勸君增簿以登,然非必須之舉",
"spambot_username": "MediaWiki清濫",
"spam_reverting": "還新審之無鏈$1者。",
"spam_blanking": "審皆鏈$1,遂令白頁。",
+ "simpleantispam-label": "反亂查。\n'''勿'''是文入!",
"pageinfo-header-restrictions": "頁錮",
"pageinfo-robot-index": "可",
"pageinfo-robot-noindex": "不可",
"file-nohires": "無以更晰。",
"svg-long-desc": "SVG檔,貌有像素$1矩$2,幅$3",
"show-big-image": "全幅",
+ "show-big-image-size": "$1×$2微格",
"file-info-gif-looped": "循",
"file-info-gif-frames": "$1幀",
"file-info-png-looped": "循",
"exif-model": "型號",
"exif-artist": "作者",
"exif-exifversion": "Exif版本",
+ "exif-colorspace": "色間",
"exif-datetimeoriginal": "數據生成之日期時辰",
"exif-datetimedigitized": "數位化之日期時辰",
"exif-exposuretime": "曝光",
"exif-contrast": "對比",
"exif-saturation": "飽和度",
"exif-sharpness": "清晰度",
+ "exif-orientation-1": "常",
"exif-meteringmode-255": "其他",
"exif-flash-fired-0": "閃無火",
"exif-flash-fired-1": "閃開火",
"version-software-version": "版",
"fileduplicatesearch": "擇重檔",
"fileduplicatesearch-summary": "以重檔之切去查重也。",
- "fileduplicatesearch-legend": "尋重",
"fileduplicatesearch-filename": "名:",
"fileduplicatesearch-submit": "尋",
"fileduplicatesearch-info": "像素$1矩$2<br />大小:$3<br />MIME類型:$4",
"intentionallyblankpage": "此頁為白也,試速之用",
"external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
"tag-filter": "[[Special:Tags|標]] 之濾:",
+ "tag-list-wrapper": "([[Special:Tags|簽]]: $2)",
"tags-title": "標",
"tags-tag": "標名",
"tags-source-header": "源",
"december-date": "दिसम्बर $1",
"period-am": "पूर्वाह्न",
"period-pm": "अपराह्न",
- "pagecategories": "{{PLURAL:$1|शà¥\8dरà¥\87णà¥\80|à¤\95à¤\8fà¤\9fा शà¥\8dरà¥\87णà¥\80}}",
+ "pagecategories": "{{PLURAL:$1|शà¥\8dरà¥\87णà¥\80|शà¥\8dरà¥\87णà¥\80सà¤}}",
"category_header": "श्रेणी \"$1\" मे पन्ना सभ",
"subcategories": "उपश्रेणी",
"category-media-header": "श्रेणी \"$1\" मे मीडिया",
"delete": "मेटाबी",
"deletethispage": "ई पन्ना मेटाबी",
"undeletethispage": "ई पृष्ठके पुनर्स्थापित करी।",
- "undelete_short": "{{PLURAL:$1|à¤\8fà¤\95 हà¤\9fाà¤\8fल à¤\97à¤\8fल|$1 हटाएल गएल}} परिवर्तन आपस आनी",
- "viewdeleted_short": "देखी {{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}",
+ "undelete_short": "{{PLURAL:$1|à¤\8fà¤\95 मà¥\87à¤\9fाà¤\8fल à¤\97à¤\8fल|$1 मà¥\87टाएल गएल}} परिवर्तन आपस आनी",
+ "viewdeleted_short": "देखी {{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन}}",
"protect": "सुरक्षित करी",
"protect_change": "बदली",
"protectthispage": "ई पन्नाक सुरक्षित करी",
"pool-errorunknown": "अज्ञात भ्रम",
"pool-servererror": "पुल काउन्टर सेवा उपलब्ध नै अछि ($1)।",
"poolcounter-usage-error": "उपयोग त्रुटि: $1",
- "aboutsite": "विषयमे {{SITENAME}}",
+ "aboutsite": "{{SITENAME}}क बारेमे",
"aboutpage": "Project:विवरण",
"copyright": "$1क अन्तर्गत विषय सूची उपलब्ध अछि",
"copyrightpage": "{{ns:project}}:सर्वाधिकार",
"databaseerror-text": "डाटाबेस अनुरोध त्रुटि भेल अछि।\nसंभवतः सफ्टवेयरमे गड़बड़ी अछि।",
"databaseerror-textcl": "डाटाबेस अनुरोध त्रुटि भेल अछि।",
"databaseerror-query": "अनुरोध: $1",
- "databaseerror-function": "फà¤\82क्सन: $1",
+ "databaseerror-function": "फà¤\99à¥\8dक्सन: $1",
"databaseerror-error": "त्रुटि: $1",
"laggedslavemode": "'''चेतौनी:''' पन्नापर सम्भव जे अद्यतन परिवर्तन नै हुअए।",
"readonly": "दत्तनिधि प्रतिबन्धित",
"missing-article": "दत्तनिधि पृष्ठक वांछित पाठ्य नै ताकि सकल, माने \"$1\" $2\nएकर कारण कोनो पुरान फाइल चेन्हासी वा ऐतिहासिक लिंकक पाछाँ जाएब अछि, जे मेटा देल गेल छै।\nजौं ई तकर कारण नै अछि, तखन अहाँकेँ तंत्रांशमे कोनो दोष भेटल अछि।\nएकर खबरि पहुँचाउ [[Special:ListUsers/sysop|administrator]], केँ, अपन सार्वत्रिक विभव संकेत सूचित करैत।",
"missingarticle-rev": "(संशोधन#: $1)",
"missingarticle-diff": "(फाइल-अन्तर प्रणाली: $1, $2)",
- "readonly_lag": "दतà¥\8dताà¤\82शनिधि सà¥\8dवà¤\9aालित रà¥\82पà¥\87ँ प्रतिबन्धित कएल गेल अछि जा परजीवी दतांशनिधि वितरक मूलक समक्ष नै आबि जाए।",
+ "readonly_lag": "दतà¥\8dताà¤\82शनिधि सà¥\8dवà¤\9aालित रà¥\82पसँ प्रतिबन्धित कएल गेल अछि जा परजीवी दतांशनिधि वितरक मूलक समक्ष नै आबि जाए।",
"nonwrite-api-promise-error": "'Promise-Non-Write-API-Action'क एचटिटिपी शीर्षकद्वारा भेजल गएल पर एपिआईमे लेखन मोड्युल अछि।",
"internalerror": "आन्तरिक भ्रम",
"internalerror_info": "आन्तरिक भ्रम: $1",
"cannotdelete": "पन्ना व संचिका \"$1\" मेटाएल नै जा सकल।",
"cannotdelete-title": "पन्ना \"$1\" नै मेटा सकल",
"delete-hook-aborted": "सम्पादन नोकसीसँ खतम भेल।\nई कोनो कारण नै देलक।",
- "no-null-revision": "\"$1\" पृष्ठ के लेल बिना परिवर्तन नब अवतरण बनाबए में असफल।",
+ "no-null-revision": "\"$1\" पृष्ठक लेल बिना परिवर्तन नब अवतरण बनाबैमे असफल।",
"badtitle": "खराप शीर्षक",
"badtitletext": "आग्रह कएल पन्नाक शीर्षक गलत, खाली, वा गलत सम्बन्धित अन्तर-न्हाषा अन्तर विकी शीर्षक छी। ई एक वा बेशी कलाकार युक्त भऽ सकैए जे शीर्षकमे प्रयुक्त नै कएल जा सकैए।",
"title-invalid-empty": "निवेदित पृष्ठक शीर्षक खाली अछि या मात्र नामस्थान राखने अछि।",
- "title-invalid-utf8": "निवà¥\87दित पà¥\83षà¥\8dठà¤\95 शà¥\80रà¥\8dषà¤\95 à¤\85वà¥\88ध यà¥\82०à¤\9fà¥\80०एफ-८ सँ सिलसिला राखैत अछि।",
- "title-invalid-interwiki": "निवेदित पृष्ठ के शीर्षक एक अन्तर-विकी जडी राखैत अछि जे शीर्षक में प्रयोग नै कैर सकएत छि।",
+ "title-invalid-utf8": "निवà¥\87दित पà¥\83षà¥\8dठà¤\95 शà¥\80रà¥\8dषà¤\95 à¤\85वà¥\88ध यà¥\81à¤\9fिएफ-८ सँ सिलसिला राखैत अछि।",
+ "title-invalid-interwiki": "निवेदित पृष्ठक शीर्षक एक अन्तर-विकी जडी राखैत अछि जे शीर्षकमे प्रयोग नै करि सकएत अछि।",
"title-invalid-talk-namespace": "निवेदित पृष्ठक शीर्षक एक वार्ता पृष्ठ सँ सन्दर्भित अछि जे मौजूद नै अछि।",
"title-invalid-characters": "निवेदित पृष्ठक शीर्षक अवैध क्यारेक्टर: \"$1\" राखैत अछि।",
"title-invalid-relative": "शीर्षक एक सन्दर्भित मार्ग राखैत अछि। सन्दर्भित पन्ना के शीर्षक (./, ../)अवैध अछि, कियाकी ई अधिकांश रूप पहुँच से बाहर छि जे हुनका उपयोगकर्ता के ब्रौज़र से प्रयोग में लाबई के प्रयास करल जाएत अछि ।",
- "title-invalid-magic-tilde": "निवेदित पन्ना के शीर्षक अवैध जादूई टिल्ड सिलसिला राखएत अछि (<nowiki>~~~</nowiki>)।",
- "title-invalid-too-long": "माँग कएल गेल पन्ना कें शीर्षक बहुत नम्हर अछि । एकरा यू०टी०एफ़० कोडिंग मे $1 {{PLURAL:$1|बाइट|बाइट्स}} से बढ़का नए होना चाही आर एकरा यू०टी०एफ़०-८ एनकोडिंग में होना चाही ।",
- "title-invalid-leading-colon": "निवेदित पन्ना के शीर्षक प्रारंभ में अवैध कोलन रखएत अछि।",
+ "title-invalid-magic-tilde": "निवेदित पन्नाक शीर्षक अवैध जादुई टिल्ड सिलसिला राखएत अछि (<nowiki>~~~</nowiki>)।",
+ "title-invalid-too-long": "माँग कएल गेल पन्नाक शीर्षक बहुत नम्हर अछि। एकरा युटिएफ कोडिङमे $1 {{PLURAL:$1|बाइट|बाइट्स}} से पैग नै होना चाही आर एकरा युटिएफ-८ एनकोडिङमे होना चाही।",
+ "title-invalid-leading-colon": "निवेदित पन्नाक शीर्षक प्रारम्भमे अवैध कोलन रखएत अछि।",
"perfcached": "ई दत्तांश उपस्मृतिक आधारपर अछि आ भऽ सकैए जे अद्यतन नै हुअए। अधिकतम {{PLURAL:$1|एकटा परिणाम|$1 परिणाम सभ}} क्याचेमे उपलब्ध अछि ।",
"perfcachedts": "ई दत्तांश उपस्मृतिमे अछि, आ एकर अन्तिम परिवर्धन भेल अछि $1 केँ। A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
"querypage-no-updates": "ऐ पन्नाक नवीनीकरण अखन बन्न अछि।\nएतुक्का दत्तांश अखन नवीकरण नै कएल जाएत।",
"actionthrottled": "कार्य समाप्त करि देल गएल",
"actionthrottledtext": "अनपेक्षित सन्देश रोक लेल, अहाँक ई क्रियाक कम्मे कालमे सीमासँ बेसीबेर करबासँ रोकल गेल अछि, अहाँ ओ सीमाक पार कऽ गेल छी।\nकृपया किछ काल बाद फेरसँ प्रयास करी।",
"protectedpagetext": "ई पन्ना सम्पादन रोकबा लेल संरक्षित अछि।",
- "viewsourcetext": "à¤\85हाà¤\81 à¤\87 पृष्ठक जडिक देख आ अनुकृत कऽ सकै छी:",
+ "viewsourcetext": "à¤\85हाà¤\81 à¤\88 पृष्ठक जडिक देख आ अनुकृत कऽ सकै छी:",
"viewyourtext": "अहाँ ई पृष्ठमे '''अपन सम्पादन'''क देख आ एतए उतारि सकै छी:",
"protectedinterface": "ई पन्ना तंत्रांश लेल मध्यस्थ पाठक व्यवस्था करैत अछि, आ अपशब्द रोकबाक ब्योंत करैत अछि।",
"editinginterface": "'''चेतौनी''' अहाँ एकटा एहेन पन्नाक सम्पादन कऽ रहल छी जे तंत्रांशक मध्यस्थ पन्नाकेँ पाठ देबा लेल प्रयोग भऽ रहल अछि।\nऐ पन्नामे परिवर्तन दोसर प्रयोक्ता लेल प्रयोक्ता मध्यस्थक रूपमे परिवर्तन करत।\nअनुवाद लेल [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] जाउ, मीडियाविकी स्थानीयकरण परियोजना पर।",
"mycustomjsprotected": "अहके लेल इ जावास्क्रिप्ट पन्नाके सम्पादित करवाक अधिकार नै अछि।",
"myprivateinfoprotected": "अहाके अपन व्यक्तिगत जानकारी बदलैक अनुमति नै अछि।",
"mypreferencesprotected": "अहाके अपन प्राथमिकता बदलैक अनुमति नै अछि।",
- "ns-specialprotected": "विशेष पन्ना सभकेँ सम्पादित नै कएल जा सकैए।",
- "titleprotected": "à¤\90 शà¥\80रà¥\8dषà¤\95à¤\95 निरà¥\8dमाण पà¥\8dरतिबनà¥\8dधित à¤\85à¤\9bि [[User:$1|$1]] दà¥\8dवारा।\nà¤\95ारण à¤\8fतऽ दà¥\87ल अछि <em>$2</em>।",
- "filereadonlyerror": "\"$1\" फाà¤\87लà¤\95à¥\87 बदलà¥\88लà¥\87ल à¤\85à¤\95à¥\8dषम à¤\95ियाà¤\95 à¤à¤£à¥\8dडार \"$2\" à¤\87 समय 'मात्र पाठनक लेल' अछि।\n\nजे प्रबन्धक ई प्रबन्ध लगोनै अछि ओ निम्न विवरण प्रदान कएने अछि: \"$3\"।",
+ "ns-specialprotected": "विशेष पन्ना सभक सम्पादित नै कएल जा सकैए।",
+ "titleprotected": "à¤\88 शà¥\80रà¥\8dषà¤\95à¤\95 निरà¥\8dमाण पà¥\8dरतिबनà¥\8dधित à¤\85à¤\9bि [[User:$1|$1]] दà¥\8dवारा।\nà¤\8fà¤\95र लà¥\87ल निमà¥\8dन à¤\95ारण दà¥\87ल à¤\97à¤\8fल अछि <em>$2</em>।",
+ "filereadonlyerror": "\"$1\" फाà¤\87लà¤\95à¥\87 बदलà¥\88लà¥\87ल à¤\85à¤\95à¥\8dषम à¤\95ियाà¤\95 à¤à¤£à¥\8dडार \"$2\" à¤\88 समय 'मात्र पाठनक लेल' अछि।\n\nजे प्रबन्धक ई प्रबन्ध लगोनै अछि ओ निम्न विवरण प्रदान कएने अछि: \"$3\"।",
"invalidtitle-knownnamespace": "\"$2\" नामस्थान आर \"$3\" नाम बला गलत शीर्षक",
"invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आर नाम \"$2\" वाला गलत शीर्षक",
"exception-nologin": "सम्प्रवेशित नै",
- "exception-nologin-text": "à¤\87 पनà¥\8dना वा à¤\95ाà¤\9cà¤\95à¥\87 सà¤\95à¥\8dषम à¤\95रवाà¤\95 लà¥\87ल à¤\95à¥\83पया पà¥\8dरवà¥\87श à¤\95रà¥\81।",
- "exception-nologin-text-manual": "à¤\87 पनà¥\8dना वा à¤\95ाà¤\9cà¤\95à¥\87 सà¤\95à¥\8dषम à¤\95रवाà¤\95 लà¥\87ल à¤\95à¥\83पया $1 à¤\95रà¥\81।",
- "virus-badscanner": "खराप विन्यास: अज्ञात विषविधि बिम्बक: ''$1''",
+ "exception-nologin-text": "à¤\88 पनà¥\8dना वा à¤\95ाà¤\9c सà¤\95à¥\8dषम à¤\95रवाà¤\95 लà¥\87ल à¤\95à¥\83पया पà¥\8dरवà¥\87श à¤\95रà¥\80।",
+ "exception-nologin-text-manual": "à¤\88 पनà¥\8dना वा à¤\95ाà¤\9c सà¤\95à¥\8dषम à¤\95रवाà¤\95 लà¥\87ल à¤\95à¥\83पया $1 à¤\95रà¥\80।",
+ "virus-badscanner": "खराप विन्यास: अज्ञात विषविधि बिम्बक: <em>$1</em>",
"virus-scanfailed": "बिम्ब विफल (विध्यादेश $1)",
"virus-unknownscanner": "अज्ञात विषविधि निरोधक",
"logouttext": "'''अहाँ निष्क्रमण कऽ गेल छी।'''\n\nअहाँ {{अन्तर्जाल}} प्रयोग अनाम भऽ कऽ सकै छी, वा अहाँ <span class='plainlinks'>[$1 log in again]</span> वएह आकि कोनो आन प्रयोक्ताक रूपमे सेहू प्रयोक कऽ सकै छी।\nई मोन राखू जे किछु पन्ना एना देखा पड़ि सकैए जेना अहाँ अखनो सम्प्रवेशित होइ, जावत अहाँ अपन गवेषकक उपस्मृति मेटा नै दै छी।",
"userlogin-yourname": "प्रयोक्ता:",
"userlogin-yourname-ph": "अपन प्रयोगकर्तानाम लिखी",
"createacct-another-username-ph": "प्रयोगकर्तानाम प्रदान करी",
- "yourpassword": "à¤\95à¥\82टशब्द:",
- "userlogin-yourpassword": "à¤\95à¥\82टशब्द",
- "userlogin-yourpassword-ph": "à¤\85पन à¤\95à¥\82टशब्द लिखी",
- "createacct-yourpassword-ph": "à¤\95à¥\82टशब्द दर्ज करी",
- "yourpasswordagain": "à¤\95à¥\82टशब्द फेरसँ टाइप करी:",
- "createacct-yourpasswordagain": "à¤\95à¥\82à¤\9fशबà¥\8dदà¤\95 जाँच करी",
- "createacct-yourpasswordagain-ph": "à¤\95à¥\82टशब्द पुनः लिखी",
+ "yourpassword": "à¤\95à¥\81टशब्द:",
+ "userlogin-yourpassword": "à¤\95à¥\81टशब्द",
+ "userlogin-yourpassword-ph": "à¤\85पन à¤\95à¥\81टशब्द लिखी",
+ "createacct-yourpassword-ph": "à¤\95à¥\81टशब्द दर्ज करी",
+ "yourpasswordagain": "à¤\95à¥\81टशब्द फेरसँ टाइप करी:",
+ "createacct-yourpasswordagain": "à¤\95à¥\81à¤\9fशबà¥\8dद जाँच करी",
+ "createacct-yourpasswordagain-ph": "à¤\95à¥\81टशब्द पुनः लिखी",
"remembermypassword": "ई ब्राउजर पर हमर सम्प्रवेश याद राखी (अधिकतम $1 {{PLURAL:$1|दिन|दिनधरि}}क लेल)",
"userlogin-remembermypassword": "हमरा सम्प्रवेशित राखी",
"userlogin-signwithsecure": "सुरक्षित कनेक्शनक प्रयोग करी",
"cannotloginnow-title": "अखन प्रवेश नै भऽ रहल अछि",
"cannotloginnow-text": "$1 क उपयोग समय प्रवेश नै कएल जा सकएत अछि।",
"yourdomainname": "अहाँक डोमेन (प्रभावक्षेत्र):",
- "password-change-forbidden": "à¤\85हाà¤\81 à¤\88 विà¤\95िमà¥\87 à¤\95à¥\82टशब्द नै बदल सकैत छी।",
+ "password-change-forbidden": "à¤\85हाà¤\81 à¤\88 विà¤\95िमà¥\87 à¤\95à¥\81टशब्द नै बदल सकैत छी।",
"externaldberror": "या त प्रमाणिकरण डेटाबेसमे त्रुटि भएल अछि या फेर अहाँक अपन बाह्य खाता अपडेट करैक अनुमति नै अछि।",
"login": "सम्प्रवेश",
"nav-login-createaccount": "सम्प्रवेश / खाता खोली",
"noemail": "प्रयोक्ता \"$1\" लेल कोनो ई-पत्र संकेत दर्ज नै अछि।",
"noemailcreate": "अहाँकेँ एकटा मान्य ई-पत्र संकेत देबऽ पड़त।",
"passwordsent": "एकटा नव कूटशब्द \"$1\" लेल पंजीकृत ई-पत्र संकेतपर पठाएल गेल अछि।\nजखन अहाँकेँ ई भेटैए तँ फेरसँ सम्प्रवेश करू।",
- "blocked-mailpassword": "à¤\85हाà¤\81à¤\95 à¤\85निà¤\95à¥\87त समà¥\8dपादन लà¥\87ल पà¥\8dरतिबनà¥\8dधित à¤\85à¤\9bि, à¤\86 दà¥\81रà¥\81पयà¥\8bà¤\97 रà¥\8bà¤\95बा लà¥\87ल à¤\95à¥\82à¤\9fशबà¥\8dद पà¥\8dरतà¥\8dयाहरण सà¥\87वा à¤\90 लेल उपलब्ध नै अछि।",
+ "blocked-mailpassword": "à¤\85हाà¤\81à¤\95 à¤\85निà¤\95à¥\87त समà¥\8dपादन लà¥\87ल पà¥\8dरतिबनà¥\8dधित à¤\85à¤\9bि, à¤\86 दà¥\81रà¥\81पयà¥\8bà¤\97 रà¥\8bà¤\95बा लà¥\87ल à¤\95à¥\81à¤\9fशबà¥\8dद पà¥\8dरतà¥\8dयाहरण सà¥\87वा à¤\88 लेल उपलब्ध नै अछि।",
"eauthentsent": "एकटा पावती ई-पत्र निर्धारित ई-पत्र संकेतपर पठा देल गेल अछि।\nऐ खातापर कोनो दोसर ई-पत्र पठाएल जएबासँ पहिने, अहाँकेँ ऐ ई-पत्रक निर्देशक पालन करए पड़त, जइसँ ई पुष्ट भऽ सकए जे ई खाता वास्तवमे अहींक अछि।",
"throttled-mailpassword": "एकटा कूटशब्द स्मारक पहिनहिये पठाएल गेल अछि, {{PLURAL:$1|घण्टा|$1 घण्टा}}क भीतर।\nदुरुपयोग रोकबा लेल, मात्र एकटा कूटशब्द {{PLURAL:$1|घण्टा|$1 घण्टा}}मे पठाएल जाएत।",
"mailerror": "ई-पत्र पठेबामे त्रुटी: $1",
"passwordreset-emailsentemail": "एकटा ई-पत्र मोन पाड़बा लेल पठाओल गेल अछि।",
"passwordreset-emailsent-capture": "एकटा स्मरण ई-पत्र पठाएल गेल अछि, जे नीचाँ देखाएल अछि।",
"passwordreset-emailerror-capture": "एकटा स्मरण ई-पत्र बनाएल गेल अछि, जे नीचाँ देखाएल अछि, मुदा प्र्योक्ताकेँ एकरा पठेबाक प्रयास विफल भेल: $1",
- "changeemail": "à¤\88-पतà¥\8dर सà¤\82à¤\95à¥\87त बदलà¥\82",
- "changeemail-header": "à¤\88-पतà¥\8dर पता à¤\96ाता बदलà¥\82",
+ "changeemail": "à¤\88-मà¥\87ल पता परिवरà¥\8dतित à¤\95रà¥\80",
+ "changeemail-header": "à¤\85पन à¤\88मà¥\87ल पता परिवरà¥\8dतन हà¥\87तà¥\81 à¤\8fà¤\95रा पà¥\81रा à¤\95रà¥\80। यदि à¤\85हाà¤\81 à¤\85पन वरà¥\8dतमान à¤\88मà¥\87ल पता हà¤\9fाबà¥\88लà¥\87ल à¤\9aाहà¥\88त à¤\9bà¥\80, तà¤\81 à¤\8fà¤\95रा à¤\96ालà¥\80 à¤\9bà¥\8bडि दà¥\80 à¤\86 à¤\8fà¤\95रा à¤à¥\87à¤\9cà¥\80।",
"changeemail-no-info": "अहाँकेँ ऐ पन्नाकेँ सोझे देखबाले सम्प्रवेशित हुअए पड़त।",
"changeemail-oldemail": "अखुनका ई-पत्र संकेत:",
"changeemail-newemail": "नव ई-पत्र संकेत:",
"sig_tip": "अहाँक हस्ताक्षर समयक मोहरक संग",
"hr_tip": "अक्षांशीय पंक्ति (अल्प उपयोग)",
"summary": "सारांश:",
- "subject": "विषय/मुख्यपंक्ति:",
+ "subject": "विषय:",
"minoredit": "अल्प संपादन",
"watchthis": "एहि पृष्ठकेँ देखू",
"savearticle": "पन्नाक रक्षण करू",
"missingcommenttext": "कृपा कऽ अपन विचार नीचाँ प्रविष्ट करू।",
"missingcommentheader": "'''स्मरण:''' अहाँ कोनो विषय/ शीर्षक ऐ टिप्पणीक लेल नै देने छी।\nजँ अहाँ फेरसँ क्लिक करब \"{{int:savearticle}}\" , अहाँक सम्पादन बिना एकर संरक्षित भऽ जाएत।",
"summary-preview": "सारांश पूर्वावलोकन",
- "subject-preview": "विषय/ शीर्षक पूर्वावलोकन",
+ "subject-preview": "विषयक झलक:",
"previewerrortext": "आहाँकें परिवर्तन के पूर्वावलोकन करई कें समय एक त्रुटि एल ।",
"blockedtitle": "प्रयोक्ता प्रतिबन्धित अछि।",
"blockedtext": "''' अहाँक प्रयोक्तानाम वा अनिकेत प्रतिबन्धित कऽ देल गेल अछि।'''\n\nई प्रतिबन्ध $1 द्वारा कएल गेल।\nएकर कारण अछि ''$2'' ।\n\n* प्रतिबन्धक प्रारम्भ: $8\n* प्रतिबन्धक समाप्ति: $6\n* आसन्न प्रतिबन्धसँ प्रभावित: $7\n\nअहाँ $1 सँ सम्पर्क कऽ सकै छी वा दोसर [[{{MediaWiki:Grouppage-sysop}}|संचालक]] सँ प्रतिबन्धक विषयमे सम्पर्क कऽ सकै छी।\nअहाँ ’ऐ प्रयोक्ताकेँ ई-पत्र दिअ’ सुविधाक प्रयोग नै कऽ सकै छी यावत एकटा मान्य ई-पत्र संकेतक विवरण अहाँक [[Special:Preferences|खाता विकल्प]] मे नै देल अछि आ अहाँकेँ एकर प्रयोग करबासँ रोकि नै देल गेल हो।\nअहाँक वर्तमान अनिकेत अछि $3, आ प्रतिबन्ध संख्या अछि # $5 ।\nऐ सभ विवरणक उल्लेख अहाँ अपन कोनो कएल जाइबला प्रश्नमे करू।",
"newarticle": "(नव)",
"newarticletext": "अहाँ एहेन पन्नाक लिंकक अनुसरण कऽ आएल छी जे पन्ना अखन बनले नै अछि।\nपन्ना बनेबाक लेल नीचाँक बक्शामे टाइप केनाइ शुरू करू (देखू [$1 सहायता पन्ना] विषेष जानकारी लेल)।",
"anontalkpagetext": "----'' ई एकटा अनाम प्रयोक्ताक लेल वार्ता पन्ना छी जे अखन धरि अपन खाता नै खोलने छथि, वा जे एकर प्रयोग नै करै छथि।\nहमरा सभकेँ तइ लेल अंकीय अनिकेतक प्रयोग हुनका देखार करबा लेल करऽ पड़ि रहल अछि।\nऐ तरहक अनिकेत अनेक प्रयोक्ता द्वारा साझी कएल जा सकैत अछि।\nजँ अहाँ अनाम प्रयोक्ता छी आ बुझै छी जे बिना मतलबक टिप्पणी अहाँ दिस देल जा रहल अछि, तँ कृपा कऽ [[Special:UserLogin/signup|एकटा खाता खोलू]] वा [[Special:UserLogin|सम्प्रवेश]] जइसँ भविष्यमे आन अनाम प्रयोक्तासँ अहाँकेँ दिक्कत नै हो।''",
- "noarticletext": "à¤\85à¤\96न à¤\90 पनà¥\8dनापर à¤\95à¥\8bनà¥\8b पाठनà¥\88 à¤\85à¤\9bि।\nà¤\85हाà¤\81 [[Special:Search/{{PAGENAME}}|à¤\90 पनà¥\8dनाà¤\95 शà¥\80रà¥\8dषà¤\95à¥\87à¤\81 ताà¤\95à¥\82]] à¤\86न पनà¥\8dनापर,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} समà¥\8dबनà¥\8dधà¥\80 वà¥\83तà¥\8dतलà¥\87à¤\96 ताà¤\95à¥\82],\nà¤\86à¤\95ि [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¤\90 पनà¥\8dनाà¤\95à¥\87à¤\81 समà¥\8dपादित à¤\95रà¥\82]</span>.",
+ "noarticletext": "à¤\85à¤\96न à¤\88 पनà¥\8dनापर à¤\95à¥\8bनà¥\8b पाठनà¥\88 à¤\85à¤\9bि।\nà¤\85हाà¤\81 [[Special:Search/{{PAGENAME}}|à¤\88 पनà¥\8dनाà¤\95 शà¥\80रà¥\8dषà¤\95 ताà¤\95à¥\80]] à¤\86न पनà¥\8dनापर,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} समà¥\8dबनà¥\8dधà¥\80 वà¥\83तà¥\8dतलà¥\87à¤\96 ताà¤\95à¥\80],\nà¤\86à¤\95ि [{{fullurl:{{FULLPAGENAME}}|action=edit}} à¤\88 पनà¥\8dनाà¤\95 निरà¥\8dमाण à¤\95रà¥\80]</span>।",
"noarticletext-nopermission": "अखन ऐ पन्नापर कोनो पाठ नै अछि।\nअहाँ [[Special:Search/{{PAGENAME}}|ऐ पन्ना शीर्षक लेल ताकू]]",
"missing-revision": "\"{{FULLPAGENAME}}\" पन्ना के अवतरण #$1 मौजूद नई अछि ।\n\nओन त ई एक हट्याल गेल पन्ना के पुराना कडी पे क्लिक करबाक कारण से होएत अछि।\nअधिक जानकारी के लेल आहाँ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाबै के लॉग] देख सकै अछि।",
"userpage-userdoesnotexist": "प्रयोक्ता खाता \"<nowiki>$1</nowiki>\" पंजीकृत नै अछि।\nनिश्चय करू जे की अहाँ ई पन्ना बनेबाक/ सम्पादित करबाक इच्छुक छी।",
"recentchanges-feed-description": "ऐ सूचना-तंत्रांशमे विकीमे भेल सभसँ लगक परिवर्तन ताकू",
"recentchanges-label-newpage": "ई सम्पादन एकटा नव पन्नाक निर्माण केलक।",
"recentchanges-label-minor": "ई एकटा लघु सम्पादन छी",
- "recentchanges-label-bot": "à¤\88 समà¥\8dपादन याà¤\82त्रिक छल।",
+ "recentchanges-label-bot": "à¤\88 समà¥\8dपादन यानà¥\8dत्रिक छल।",
"recentchanges-label-unpatrolled": "ऐ सम्पादनक पुनरीक्षण अखन धरि नै कएल गेल अछि।",
"recentchanges-label-plusminus": "पन्नाके आकार इ बाइट संख्यासे बदलल गेल",
"recentchanges-legend-heading": "<strong>कुञ्जी:</strong>",
"tooltip-ca-edit": "ई पन्नाक सम्पादित करी",
"tooltip-ca-addsection": "नव खण्ड शुरू करू",
"tooltip-ca-viewsource": "ऐ पन्नापर वरदहस्त छै।\nअहाँ एकर जड़ि देख सकै छी।",
- "tooltip-ca-history": "à¤\88 पà¥\83षà¥\8dठà¤\95 पहिलà¥\81à¤\95ा परिवरà¥\8dतनसà¤",
+ "tooltip-ca-history": "à¤\88 पà¥\83षà¥\8dठà¤\95 पà¥\81रान à¤\85वतरण",
"tooltip-ca-protect": "ऐ पन्नाकेँ बचाउ",
"tooltip-ca-unprotect": "ऐ पन्नाक रक्षा कवच बदलू",
"tooltip-ca-delete": "ऐ पन्नाकेँ मेटाउ",
"tooltip-ca-move": "ऐ पृष्ठकेँ हटाउ",
"tooltip-ca-watch": "ई पन्नाकेँ अपन साकांक्षसूचीमे राखी",
"tooltip-ca-unwatch": "ऐ पन्नाकेँ हमर साकांक्ष सूचीसँ हटाउ",
- "tooltip-search": "ताकी {{SITENAME}}",
+ "tooltip-search": "{{SITENAME}}मे ताकी",
"tooltip-search-go": "पृष्ठपर पहुँची जौं एनमेन पृष्ठ रहए",
"tooltip-search-fulltext": "ई पाठक लेल पृष्ठसभमे ताकी",
"tooltip-p-logo": "सम्मुख पन्ना देखी",
- "tooltip-n-mainpage": "मुख्य पृष्ठकेँ देखी",
+ "tooltip-n-mainpage": "मुख्य पृष्ठ देखी",
"tooltip-n-mainpage-description": "मुख्य पन्नापर जाए",
"tooltip-n-portal": "परियोजनाक विषयमे,अहाँ की कए सकैत छी, वस्तु प्राप्ति स्थल",
"tooltip-n-currentevents": "लगक घटनाक विषयमे आधार सूचना प्राप्त करी।",
"tooltip-feed-rss": "ऐ पन्ना लेल आर.एस.एस. सूचना",
"tooltip-feed-atom": "ऐ पन्ना लेल अणु समदिया",
"tooltip-t-contributions": "ई {{GENDER:$1|प्रयोक्ताक}} योगदानक सूची देखी",
- "tooltip-t-emailuser": "à¤\90 पà¥\8dरयà¥\8bà¤\95à¥\8dताà¤\95à¥\87à¤\81 à¤\88-पतà¥\8dर पठाà¤\89",
+ "tooltip-t-emailuser": "à¤\88 पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95 à¤\88-पतà¥\8dर पठाबà¥\80",
"tooltip-t-info": "ई पृष्ठ के सम्बन्धमें आर बैंसी जानकारी",
- "tooltip-t-upload": "à¤\9aितà¥\8dर à¤\86à¤\95ि मà¥\80डिया फाà¤\87लà¤\95à¥\87à¤\81 अपलोड करी",
+ "tooltip-t-upload": "à¤\9aितà¥\8dर à¤\86à¤\95ि मिडिया फाà¤\87ल अपलोड करी",
"tooltip-t-specialpages": "सभटा विशेष पन्नाक सूची",
"tooltip-t-print": "ई पृष्ठक छपैबला रूप",
- "tooltip-t-permalink": "पनà¥\8dनाà¤\95 à¤\90 सà¤\82वरà¥\8dधनक स्थायी लिङ्क",
- "tooltip-ca-nstab-main": "विषय सà¥\82à¤\9aà¥\80बला पनà¥\8dना देखी",
+ "tooltip-t-permalink": "पà¥\83षà¥\8dठà¤\95 à¤\88 सà¤\82सà¥\8dà¤\95रणक स्थायी लिङ्क",
+ "tooltip-ca-nstab-main": "सामà¤\97à¥\8dरà¥\80 वाला पà¥\83षà¥\8dठदेखी",
"tooltip-ca-nstab-user": "प्रयोक्ता पन्नाकेँ देखू",
"tooltip-ca-nstab-media": "मीडिया पृष्ठ देखू",
"tooltip-ca-nstab-special": "ई एकटा विशिष्ट पन्ना छी, आ अहाँ एकरा सम्पादित नै कऽ सकै छी",
"tooltip-watchlistedit-raw-submit": "साकांक्षसूची उद्दतन करू",
"tooltip-recreate": "पन्ना फेरसँ बनाउ तखनो जँ ई मेटा देल गेल हुअए",
"tooltip-upload": "उपारोपण करू",
- "tooltip-rollback": "\"पà¥\8dरतà¥\8dयावरà¥\8dतन\" à¤\90 पनà¥\8dनाà¤\95 à¤\85नà¥\8dतिम यà¥\8bà¤\97दान à¤\95रà¥\88बलाà¤\95 समà¥\8dपादन (समà¥\8dपादनसà¤)à¤\95à¥\87à¤\81 à¤\8fà¤\95 à¤\95à¥\8dलिà¤\95मà¥\87 पà¥\81रान à¤\9cà¤\97हपर लऽ à¤\9cाà¤\8f",
+ "tooltip-rollback": "\"पà¥\8dरतà¥\8dयावरà¥\8dतन\" à¤\88 पनà¥\8dनाà¤\95 à¤\85नà¥\8dतिम यà¥\8bà¤\97दान à¤\95रà¥\88बलाà¤\95 समà¥\8dपादन (समà¥\8dपादनसà¤)à¤\95 à¤\8fà¤\95 à¤\95à¥\8dलिà¤\95मà¥\87 पà¥\81रान à¤\9cà¤\97हपर लऽ à¤\9cाà¤\8f।",
"tooltip-undo": "\"फेरसँ वएह\" सम्पादनकेँ पूर्वस्थितिमे लऽ जाइए आ पूर्वावलोकन अवस्थामे सम्पादन फॉर्म खोलैए। ई सारांशमे कारण जोड़बाक विकल्प दैत अछि।",
"tooltip-preferences-save": "मोनपसंद के सुरक्षित करू",
"tooltip-summary": "छोट संक्षेप दिअ",
"lastmodifiedatby": "ई पन्ना अंतिम बेर संवर्धित भेल $2, $1 द्वारा $3।",
"othercontribs": "$1 के काजुक तरहे",
"others": "दोसर, आन",
- "siteusers": "{{अन्तर्जाल}} {{PLURAL:$2|प्रयोक्ता|प्रयोक्ता सभ}} $1",
+ "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|प्रयोगकर्ता}}|प्रयोगकर्ता}} $1",
"anonusers": "{{अन्तर्जाल}} अज्ञात {{PLURAL:$2|प्रयोक्ता|प्रयोक्ता सभ}} $1",
"creditspage": "पन्नाक श्रेय",
"nocredits": "अहि पन्नाक लेल क्रेडिट ज़ानकारी नहि अछि",
"scarytranscludefailed-httpstatus": "[$1 के लेल आकृति नै आइन पेलौ, त्रुटि: HTTP $2]",
"scarytranscludetoolong": "यूआरएल बड़ पैग अछि",
"deletedwhileediting": "'''Warning''': अहां जखन सें संपादन शुरू केने छी, ओकर बाद से ई पृष्ठ के मिटा देल गेल अछि.",
- "confirmrecreate": "पà¥\8dरयà¥\8bà¤\95à¥\8dता [[User:$1|$1]] ([[User talk:$1|वारà¥\8dता]]) à¤\85हाà¤\81à¤\95 à¤\95ारण सहित समà¥\8dपादनà¤\95 बाद à¤\90 पनà¥\8dनाà¤\95à¥\87à¤\81 मà¥\87à¤\9fा दà¥\87लà¤\95:\n: ''$2''\nà¤\95à¥\83पा à¤\95ऽ à¤\85हाà¤\81 सà¥\81निशà¥\8dà¤\9aित à¤\95रà¥\82 à¤\9cà¥\87 à¤\85हाà¤\81 à¤\90 पनà¥\8dनाà¤\95à¥\87à¤\81 फेरसँ बनबऽ चाहै छी।",
+ "confirmrecreate": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता [[User:$1|$1]] ([[User talk:$1|वारà¥\8dता]]) à¤\85हाà¤\81à¤\95 à¤\95ारण सहित समà¥\8dपादनà¤\95 बाद à¤\88 पनà¥\8dनाà¤\95à¥\87 मà¥\87à¤\9fाà¤\8f दà¥\87लà¤\95:\n: ''$2''\nà¤\95à¥\83पा à¤\95ऽ à¤\85हाà¤\81 सà¥\81निशà¥\8dà¤\9aित à¤\95रà¥\80 à¤\9cà¥\87 à¤\85हाà¤\81 à¤\88 पनà¥\8dनाà¤\95 फेरसँ बनबऽ चाहै छी।",
"confirmrecreate-noreason": "प्रयोक्ता [[User:$1|$1]] ([[User talk:$1|वार्ता]]) अहाँक सम्पादनक बाद ऐ पन्नाकेँ मेटा देलक| कृपा कऽ अहाँ सुनिश्चित करू जे अहाँ ऐ पन्नाकेँ फेरसँ बनबऽ चाहै छी।",
"recreate": "फेर सें बनाऊ",
"confirm_purge_button": "ठीक अछि",
"compare-revision-not-exists": "जे संशोधन अहाँ कहलौं से अछिये नै।",
"dberr-problems": "दुखी छी! ई जालस्थल तकनीकी समस्या अनुभव कऽ अछि।",
"dberr-again": "किछु काल बाट ताकू आ फेरसँ भारित करू।",
- "dberr-info": "(दत्तनिधि वितरककेँ सम्पर्क नै कऽ सकल: $1)",
- "dberr-info-hidden": "(दत्तनिधि वितरककेँ सम्पर्क नै कऽ सकल: $1)",
+ "dberr-info": "(दत्तनिधि वितरकके सम्पर्क नै कऽ सकल: $1)",
+ "dberr-info-hidden": "(दत्तनिधि वितरकके सम्पर्क नै कऽ सकल: $1)",
"dberr-usegoogle": "ऐ बीचमे अहाँ गूगलसँ खोज कऽ सकै छी।",
"dberr-outofdate": "मोन राखू जे हमर सामिग्रीक ओकर सूची पुरान भऽ सकैए।",
"dberr-cachederror": "ई आग्रह कएल पन्नाक उपस्मृति संरक्षित द्वितीयक अछि, आ भऽ सकैए जे अद्यतन नै हुअए।",
"logentry-protect-protect-cascade": "$1 ने $3 $4 [निपतन]ला {{GENDER:$2|सुरक्षित केले}}",
"logentry-protect-modify": "$1 ने $3 $4 ची सुरक्षा पातळी {{GENDER:$2|बदलली}}",
"logentry-protect-modify-cascade": "$1 ने $3 $4 [निपतन]ची सुरक्षा पातळी {{GENDER:$2|बदलली}}",
- "logentry-rights-rights": "$1 ने $3 साठी $4 वरुन $5 ला गट सदस्यता{{GENDER:$2|बदलली}}",
+ "logentry-rights-rights": "$1 ने {{GENDER:$6|$3}} साठी $4 वरुन $5 ला गट सदस्यता{{GENDER:$2|बदलली}}",
"logentry-rights-rights-legacy": "$1 ने $3 साठी गट सदस्यता {{GENDER:$2|बदलली}}",
"logentry-rights-autopromote": "$1 ला स्वयंचलितरित्या $4 वरुन $5 ला {{GENDER:$2|बढती दिल्या गेली}}",
"logentry-upload-upload": "$1 {{GENDER:$2|अपभारीत केली}} $3",
"api-error-nomodule": "अंतर्गत चूक: module set चढवलेला नाही",
"api-error-ok-but-empty": "आंतरिक त्रुटी : विदादाता प्रतिक्रिया देत नहीं",
"api-error-overwrite": "अस्तित्वात असलेल्या संचिकेवर पुनर्लेखन प्रतिबंधित आहे.",
+ "api-error-ratelimited": "आपण, हा विकी परवानगी देत असल्यापेक्षा अधिक संचिका, कमी कालावधीत अपभारणाचा प्रयत्न करीत आहात.\nकाही मिनिटांनी पुन्हा प्रयत्न करा.",
"api-error-stashfailed": "इन्तरिक त्रुटी : विदादाता तात्पुरत्या स्वरूपाच्या संचिका जमा करण्यात अयशस्वी",
"api-error-publishfailed": "अंतर्गत त्रुटी:विदादात्यास, या तात्पुरत्या संचिकेच्या प्रकाशनास अपयश आले.",
"api-error-stasherror": "स्टॅचमध्ये ही संचिका अपभारणात त्रुटी आली.",
"databaseerror-query": "揣:$1",
"databaseerror-function": "功能:$1",
"databaseerror-error": "chhò-gō͘",
- "transaction-duration-limit-exceeded": "Ūi tio̍h mài sán-seng koân liōng ê têng-hok iân-sî, pún kài choán-sàng in-ūi sia-ji̍p sî-kan ($1) chhiau-kòe $2 bió ê chè-hān, í-keng hong hòng-khì.\nNā chún lí sī beh chi̍t kái kái-tōng kúi--a-ê hāng-bo̍k, chhì ēng chē pái sió chhau-chok khòaⁿ-māi.",
+ "transaction-duration-limit-exceeded": "Ūi tio̍h mài sán-seng koân liōng ê têng-hok iân-sî, pún kài choán-sàng in-ūi sia-ji̍p sî-kan ($1) chhiau-kòe {{PLURAL:$2|bió-cheng}} ê chè-hān, í-keng hong hòng-khì.\nNā chún lí sī beh chi̍t kái kái-tōng kúi--a-ê hāng-bo̍k, chhì ēng chē pái sió chhau-chok khòaⁿ-māi.",
"laggedslavemode": "'''提醒:'''頁內容可能毋是上新的。",
"readonly": "Chu-liāu-khò· só tiâu leh",
"enterlockreason": "Phah beh hong-só ê lí-iû, pau-koah ko͘-kè siáⁿ-mi̍h sî-chūn ē kái-tû hong-só.",
"missingarticle-rev": "(修訂版本#:$1)",
"missingarticle-diff": "(精差:$1,$2)",
"readonly_lag": "佇附屬的資料庫更新到主要資料庫資料的時陣,資料庫會自動鎖定。",
+ "nonwrite-api-promise-error": "Tī leh HTTP header ê 'Promise-Non-Write-API-Action' í-keng sàng--chhut-khì m̄-koh chit-ê iau-kiû sī sàng kòe 1-ê API siá-ji̍p module.",
"internalerror": "Loē-pō͘ ê chhò-ngō͘",
"internalerror_info": "Loē-pō͘ ê chhò-ngō͘: $1",
+ "internalerror-fatal-exception": "\"$1\" lūi ê tì-miā lē-gōa",
"filecopyerror": "Bô-hoat-tō· kā tóng-àn \"$1\" khó·-pih khì \"$2\".",
"filerenameerror": "Bô-hoat-tō· kā tóng-àn \"$1\" kái-miâ chò \"$2\".",
"filedeleteerror": "Bô-hoat-tō· kā tóng-àn \"$1\" thâi tiāu",
"directorycreateerror": "Bô-hoat-tō͘ khui bo̍k-lo̍k \"$1\".",
+ "directoryreadonlyerror": "Bo̍k-lio̍k \"$1\" sī taⁿ ē-tàng tha̍k--ê.",
+ "directorynotreadableerror": "Bo̍k-lio̍k \"$1\" sī bē-tàng tha̍k--ê",
"filenotfound": "Chhōe bô tóng-àn \"$1\".",
"unexpected": "Koài-koài ê pió-tat: \"$1\"=\"$2\"。",
"formerror": "Chhò-gō·: bô-hoat-tō· kā pió sàng chhut khì.",
"no-null-revision": "袂當予\"$1\"產生一个空的修訂本。",
"badtitle": "M̄-chiâⁿ piau-tê",
"badtitletext": "Iau-kiû ê piau-tê sī bô-hāu ê, khang ê, a̍h-sī liân-kiat chhò-gō· ê inter-language/inter-wiki piau-tê.",
+ "title-invalid-empty": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k sī khang--ê he̍k-chiá kaⁿ-taⁿ hâm liáu miâ-khong-kan.",
+ "title-invalid-utf8": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k hâm liáu bô chiàⁿ-khak ê 1 lia̍t UTF-8 ê jī.",
+ "title-invalid-interwiki": "Só͘ iau-kiû ê ia̍h-bīn tê-bo̍k pau-hâm liáu 1-ê bē-tàng ēng ùi tê-bo̍k ê interwiki liân-kiat.",
"perfcached": "Ē-kha ê chu-liāu tùi lâi--ê, só·-í bô it-tēng sī siōng sin ê. Tī khoài-chhûn-khu siōng chē ē-tàng khǹg{{PLURAL:$1| pit|$1 pit}} chu-liāu.",
"perfcachedts": "Ē-kha ê chu-liāu tùi lâi--ê, tī $1 keng-sin--koè. Tī khoài-chûn-khu siōng chē ē-tàng khǹg {{PLURAL:$4|pit|$4 pit}} chu-liāu.",
"querypage-no-updates": "Chit-má bē-sái kái chit ia̍h.\nChia ê chu-liāu bē-tàng sui tiông-sin chéng-lí.",
"tog-watchdefault": "Azzecca 'e paggene e li files cagnàte a l'elenco 'e cuntrollo",
"tog-watchmoves": "Azzecca 'e paggene e li files spustate a l'elenco 'e cuntrollo",
"tog-watchdeletion": "Azzecca 'e paggene e li files scancellate a l'elenco 'e cuntrollo",
+ "tog-watchuploads": "Azzecca 'e file nuove ca sto a carrecà dint'a lista 'e paggene cuntrullate",
"tog-watchrollback": "Azzecca 'e paggene addò aggio fatto nu rollback ('o torna arreto) a l'elenco 'e cuntrollo",
"tog-minordefault": "Indica ogne cagnamento comme piccerillo (predefinito)",
"tog-previewontop": "Vide previsióne primma d' 'a casella 'e modifica",
"minoredit": "Chisto è nu cagnamiénto piccerillo",
"watchthis": "Tiene d'uocchio sta paggena",
"savearticle": "Sarva 'a paggena",
+ "publishpage": "Pubbreca paggena",
"preview": "Anteprimma",
"showpreview": "Vire anteprimma",
"showdiff": "Fa veré 'e cagnamiente",
"userpage-userdoesnotexist": "'O cunto utente \"<nowiki>$1</nowiki>\" nun è riggistrato. Cuntrolla ca si buò overo crià o cagnà sta paggena.",
"userpage-userdoesnotexist-view": "'O cunto utente \"$1\" nun è riggistrato.",
"blocked-notice-logextract": "St'utente è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
- "clearyourcache": "'''Nota:''' aroppo sarvate putisse necessità 'e pulezzà 'a caché d' 'o navigatóre pe' vedé 'e cagnamiente. \n*'''Firefox / Safari''': sprémme 'o buttóne maiuscole e ffà clic ncopp'a ''Recarreca'', o pure spremme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' ncopp'a Mac)\n*'''Google Chrome''': spremme ''Ctrl-Shift-R'' (''⌘-Shift-R'' ncopp'a nu Mac)\n*'''Internet Explorer''': spremme 'o buttóne ''Ctrl'' pe' tramente ca faie click ncopp'a ''Refresh'', o pure spremmere ''Ctrl-F5''\n*'''Opera''': sbacanta tutt' 'a cache addò menu ''Strumiente → Preferenze''",
+ "clearyourcache": "<strong>Nota:</strong> aroppo sarvate putisse necessità 'e pulezzà 'a caché d' 'o navigatóre pe' vedé 'e cagnamiente. \n*<strong>Firefox / Safari</strong>: sprémme 'o buttóne maiuscole e ffà clic ncopp'a ''Recarreca'', o pure spremme ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' ncopp'a Mac)\n*<strong>Google Chrome''': spremme ''Ctrl-Shift-R'' (''⌘-Shift-R'' ncopp'a nu Mac)\n*<strong>Internet Explorer</strong>: spremme 'o buttóne ''Ctrl'' pe' tramente ca faie click ncopp'a ''Refresh'', o pure spremmere ''Ctrl-F5''\n* <strong>Opera:</strong> Vaje addò 'o <em>Menu → Mpustaziune</em> (<em>Opera → Mpustaziune</em> ncopp' 'o Mac) e po' ncopp'a <em>Privacy & sicurezza → Pulezza date d' 'o browser → Immaggene e file d' 'a cache</em>.",
"usercssyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o CSS nuovo apprimma d' 'o sarvà.",
"userjsyoucanpreview": "'''Cunziglio:''' spremme 'o buttone 'Vide anteprimma' pe' pruvà 'o JavaScript nuovo apprimma d' 'o sarvà.",
"usercsspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o CSS perzunale. 'E cagnamiente nun so' state ancora sarvate!'''",
"recentchangeslinked-page": "Nomme d' 'a paggena",
"recentchangeslinked-to": "Mmusta sulamente 'e cagnamiente a 'e paggene cullegate a chilla specificata",
"recentchanges-page-added-to-category": "[[:$1]] azzeccato â categurìa",
- "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|na paggena|$2 paggene}}]] azzeccate â categurìa",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] azzeccata â categurìa, [[Special:WhatLinksHere/$1|sta paggena azzeccat' a 'e categurìe]]",
"recentchanges-page-removed-from-category": "[[:$1]] luvato d' 'a categurìa",
- "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|na paggena|$2 paggena}}]] luvate d' 'a categurìa",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] luvate 'e categurìa, [[Special:WhatLinksHere/$1|sta paggena è azzeccata dint'a n'ati paggene]]",
"autochange-username": "Cagnamiento automateco MediaWiki",
"upload": "Carreca file",
"uploadbtn": "Carreca file",
"tooltip-ca-nstab-category": "Vere a paggena d\"a categurìa",
"tooltip-minoredit": "Rénne chìsto cagnamiénto cchiù ppiccirìllo.",
"tooltip-save": "Sàrva 'e cagnamiénte.",
+ "tooltip-publish": "Pubbreca 'e cagnamiente vuoste",
"tooltip-preview": "Primma 'e sarvà, vìre primma chille ca hê cagnàte!",
"tooltip-diff": "Fà vedé 'e cagnamiente c'avite fatto ô testo",
"tooltip-compareselectedversions": "Fà vedé 'e differenze nfra tutt' 'e dduje verziune scigliute 'e sta paggena",
"confirmemail_body_set": "Coccheruno, può darse ca site vuje, 'a l'indirizzo IP $1,\nha mpustato nu cunto utente \"$2\" cu st'indirizzo e-mail ncopp'a {{SITENAME}}.\n\nPe' putè cunfermà ca stu cunto è stato overo criato e vuje e ve putè apiccià 'a funziona e-mail 'e {{SITENAME}}, arapite stu cullegamento dint' 'o navigatóre web d' 'o vuosto:\n\n$3\n\nSi vuje *NUN* avite riggistrato 'o cunto utente, secutate stu cullegamento pe' ve scancellà st'indirizzo e-mail utente:\n\n$5\n\nStu codece 'e cunferma murarrà 'o $4.",
"confirmemail_invalidated": "Cunferma 'e l'indirizze e-mail scangelleta",
"invalidateemail": "Scancella 'a cunferma 'e l'e-mail",
+ "notificationemail_subject_changed": "L'indirizzo email riggistrato ncopp'a {{SITENAME}} è stato cagnato",
+ "notificationemail_subject_removed": "L'indirizzo email riggistrato dint'a {{SITENAME}} è stato luvato",
+ "notificationemail_body_changed": "Coccheruno, probbabilmente vuje, 'a ll'indirizzo IP $1,\nave cagnato l'indirizze e-mail d' 'o cunto \"$2\" a \"$3\" ncopp'a {{SITENAME}}.\n\nSi nun eravate vuje, pe' piacere tuzzuliate mò mò n'ammenistratore.",
+ "notificationemail_body_removed": "Coccheruno, probbabilmente vuje, 'a ll'indirizzo IP $1,\nave luvato l'indirizze e-mail d' 'o cunto \"$2\" ncopp'a {{SITENAME}}.\n\nSi nun eravate vuje, pe' piacere tuzzuliate mò mò n'ammenistratore.",
"scarytranscludedisabled": "['A funziona cullegamiento nfra site wiki è stata stutata]",
"scarytranscludefailed": "[L'analisi d' 'o template s'è scassato pe' $1]",
"scarytranscludefailed-httpstatus": "[L'analisi d' 'o template s'è scassato pe' $1: HTTP $2]",
"watchlistedit-raw-done": "L'elenco 'e paggene cuntrullate è stato agghiurnato.",
"watchlistedit-raw-added": "{{PLURAL:$1|nu titolo è|$1 titule so'}} stat'azzeccate:",
"watchlistedit-raw-removed": "{{PLURAL:$1|nu titolo è stato luvato|$1 titule so' state luvate}}:",
- "watchlistedit-clear-title": "Elenco 'e cuntrollo pulezzato",
+ "watchlistedit-clear-title": "Pulezza 'a lista 'e cuntrollo",
"watchlistedit-clear-legend": "Pulezza l'elenco 'e paggene cuntrullate",
"watchlistedit-clear-explain": "Tutte sti titule se luvarranno 'a l'elenco 'e paggene cuntrullate vuosto",
"watchlistedit-clear-titles": "Titule:",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|pruteggette}} $3 $4 [cascading]",
"logentry-protect-modify": "$1 {{GENDER:$2|cagnaje}} 'o livello 'e prutezione pe' $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|cagnaje}} 'o livello 'e prutezione pe' $3 $4 [cascading]",
- "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' {{GENDER:$3|$3}} 'a $4 a $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' {{GENDER:$6|$3}} 'a $4 a $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|cagnaje}} 'e gruppo pe' $3",
"logentry-rights-autopromote": "$1 è {{GENDER:$2|stato promosso|stata promossa}} automatecamente 'a $4 a $5",
"logentry-upload-upload": "$1 {{GENDER:$2|ave carrecato}} $3",
"sessionprovider-nocookies": "'E cookie ponno stà stutate. Vedite si 'e cookie stann'appicciate e accumminciate n'ata vota.",
"randomrootpage": "Paggena 'e rareca a ccaso",
"log-action-filter-block": "Tipo 'e blocco:",
+ "log-action-filter-contentmodel": "Tipo 'e cagnamiento 'e mudell'e cuntenute (contentmodel)",
"log-action-filter-delete": "Tipo 'e scancellazione:",
+ "log-action-filter-import": "Tipo 'e import:",
+ "log-action-filter-managetags": "Tipo 'e aziona 'e gistinone 'etichette:",
+ "log-action-filter-move": "Tipo 'e spostamento:",
+ "log-action-filter-newusers": "Tipo e' criazione utenza:",
"log-action-filter-patrol": "Tipo 'e verifica:",
"log-action-filter-protect": "Tipo 'e protezione:",
+ "log-action-filter-rights": "Tipo 'e cagnamiento 'e deritte",
+ "log-action-filter-suppress": "Tipo 'e suppressione",
"log-action-filter-upload": "Tipo 'e carreca:",
"log-action-filter-all": "Tutte",
"log-action-filter-block-block": "Blocco",
"log-action-filter-block-reblock": "Modifica blocco",
"log-action-filter-block-unblock": "Sblocca",
+ "log-action-filter-contentmodel-change": "Cagnamiento 'e mudello 'e cuntenute (Contentmodel)",
+ "log-action-filter-contentmodel-new": "Criazione 'e na paggena 'e mudello 'e cuntenute nun standard",
"log-action-filter-delete-delete": "Scancellazione 'e paggena",
"log-action-filter-delete-restore": "Arrepigliament' 'e paggena",
"log-action-filter-delete-event": "Scancellazione d' 'o reggistro",
"log-action-filter-delete-revision": "Scancellazione d' 'a verziona",
+ "log-action-filter-import-interwiki": "Mpurtaziona transwiki",
+ "log-action-filter-import-upload": "Mpurtazione 'e XML carrecato",
+ "log-action-filter-managetags-create": "Criazione 'etichetta",
+ "log-action-filter-managetags-delete": "Scancellazione 'etichetta",
+ "log-action-filter-managetags-activate": "Appiccia 'etichetta",
+ "log-action-filter-managetags-deactivate": "Stuta etichetta",
+ "log-action-filter-move-move": "Móve senza sovrascrivere 'e redirect",
+ "log-action-filter-move-move_redir": "Móve senza sovrascrivere 'e redirect",
+ "log-action-filter-newusers-create": "Criazione 'a n'utente anonimo",
+ "log-action-filter-newusers-create2": "Criazione 'a n'utente riggistrato",
+ "log-action-filter-newusers-autocreate": "Criazione automatica",
+ "log-action-filter-newusers-byemail": "Criazione cu na password mannata via email",
"log-action-filter-patrol-patrol": "Verifica manuale",
"log-action-filter-patrol-autopatrol": "Verifica automatica",
"log-action-filter-protect-protect": "Prutezione",
"log-action-filter-protect-modify": "Cagna prutezione",
"log-action-filter-protect-unprotect": "Sprutezione",
+ "log-action-filter-protect-move_prot": "Prutezione spustata",
+ "log-action-filter-rights-rights": "Cagnamento manuale",
+ "log-action-filter-rights-autopromote": "Cagnamento automatico",
+ "log-action-filter-suppress-event": "Scancellazione 'e riggistro",
+ "log-action-filter-suppress-revision": "Scancellazione 'e verziona",
+ "log-action-filter-suppress-delete": "Scancellazione 'e paggena",
+ "log-action-filter-suppress-block": "Scancellazione 'utente 'a blocco",
+ "log-action-filter-suppress-reblock": "Scancellazione utente 'a re-blocco",
"log-action-filter-upload-upload": "Carreca nova",
"log-action-filter-upload-overwrite": "Recarreca"
}
"morenotlisted": "Disse lieste is niet kompleet...",
"mypage": "Gebrukerszied",
"mytalk": "Mien overleg",
- "anontalk": "Overlegzied veur dit IP-adres",
+ "anontalk": "Overleg",
"navigation": "Navigasie",
"and": " en",
"qbfind": "Zeuken",
"viewsource": "Brontekste bekieken",
"viewsource-title": "Bron bekieken van $1",
"actionthrottled": "Haandeling tegenehöllen",
- "actionthrottledtext": "As maotregel tegen t plaotsen van ongewunste verwiezingen, is t antal keren da'j disse haandeling in n korte tied uutvoeren kunnen beteund. Je hebben de limiet overschrejen. Probeer t over n antal minuten weer.",
+ "actionthrottledtext": "As maotregel tegen t plaotsen van alderhaande moek, is t antal keren da'j disse haandeling in n korte tied uutvoeren kunnen beteund. Je hebben de limiet overschrejen. Probeer t over n antal minuten weer.",
"protectedpagetext": "Disse zied is beveiligd. Bewarken of aandere haandelingen bin niet meugelik.",
- "viewsourcetext": "Je kunnen de brontekste van disse zied bewarken en bekieken:",
- "viewyourtext": "Je kunnen '''joew bewarkingen''' an de brontekste van disse zied bekieken en kopiëren:",
+ "viewsourcetext": "Je kunnen de brontekste van disse zied bewarken en bekieken.",
+ "viewyourtext": "Je kunnen <strong>joew bewarkingen</strong> an de brontekste van disse zied bekieken en kopiëren.",
"protectedinterface": "Op disse zied steet tekste die gebruukt wördt veur systeemteksten van disse wiki. Allinnig beheerders kunnen disse zied bewarken.\nUm vertalingen veur alle wiki's derbie te zetten of te wiezigen, gebruuk [//translatewiki.net/ translatewiki.net], t vertaalprojekt veur MediaWiki.",
"editinginterface": "<strong>Waorschuwing:</strong> je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Um vertalingen derbie te zetten of te wiezigen veur alle wiki's, gebruuk [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net], t vertalingsprojekt veur MediaWiki.",
"cascadeprotected": "Disse zied is beveiligd umdat t veurkömp in de volgende {{PLURAL:$1|zied|ziejen}}, die beveiligd {{PLURAL:$1|is|bin}} mit de \"kaskade\"-opsie:\n$2",
"mypreferencesprotected": "Je hebben gien rechten um joew veurkeuren an te passen.",
"ns-specialprotected": "Spesiale ziejen kunnen niet bewarkt wörden.",
"titleprotected": "t Anmaken van disse zied is beveiligd deur [[User:$1|$1]].\nDe op-egeven reden is <em>$2</em>.",
- "filereadonlyerror": "Kon t bestaand \"$1\" niet anpassen umdat de bestaandsmap \"$2\" op dit moment op allinnig-lezen steet.\n\nDe beheerder gaf hierveur de volgende reden: \"$3\".",
+ "filereadonlyerror": "Kon t bestaand \"$1\" niet anpassen umdat de bestaandsmap \"$2\" op dit moment op allinnig-lezen steet.\n\nDe op-egeven reden is: \"$3\".",
"invalidtitle-knownnamespace": "Ongeldige titel mit naamruumte \"$2\" en tekste \"$3\"",
"invalidtitle-unknownnamespace": "Ongeldige titel mit onbekend naamruumtenummer $1 en tekste \"$2\"",
"exception-nologin": "Niet an-emeld",
"createacct-reason": "Reden",
"createacct-reason-ph": "Waorumme je n aandere gebrukerskonto anmaken",
"createacct-submit": "Gebrukerskonto anmaken",
- "createacct-another-submit": "n Aandere gebrukerskonto anmaken",
+ "createacct-another-submit": "Gebrukerskonto anmaken",
"createacct-benefit-heading": "{{SITENAME}} wörden emaakt deur meensen zo as jie.",
"createacct-benefit-body1": "bewarking{{PLURAL:$1||en}}",
"createacct-benefit-body2": "{{PLURAL:$1|zied|ziejen}}",
"nocookieslogin": "t Anmelden is mislokt umdat de webkieker gien scheumbestaanden (cookies) an hef staon. Probeer t aksepteren van scheumbestaanden an te zetten en daornao opniej an te melden.",
"nocookiesfornew": "De gebruker is niet an-emaakt, umdat de bron niet bevestigd kon wörden.\nZörg derveur da'j scheumbestaanden (cookies) an hebben staon, herlaoi disse zied en probeer t opniej.",
"noname": "Je mutten n gebrukersnaam opgeven.",
- "loginsuccesstitle": "Suksesvol an-emeld",
+ "loginsuccesstitle": "An-emeld",
"loginsuccess": "Je bin noen an-emeld bie {{SITENAME}} as \"$1\".",
"nosuchuser": "Der is gien gebruker mit de naam \"$1\".\nGebrukersnamen bin heufdlettergeveulig.\nKiek de schriefwieze effen nao of [[Special:UserLogin/signup|maak n nieje gebruker an]].",
"nosuchusershort": "Der is gien gebruker mit de naam \"$1\". Kiek de spelling nao.",
"createaccount-title": "Gebrukers anmaken veur {{SITENAME}}",
"createaccount-text": "Der hef der ene n gebruker an-emaakt op {{SITENAME}} ($4), mit de naam $2 en t wachtwoord \"$3\". \nMeld je eigen noen an en wiezig t wachtwoord.\n\nNegeer dit bericht as disse gebruker zonder joew toestemming an-emaakt is.",
"login-throttled": "Je hebben lestens te vake eprobeerd um an te melden mit n verkeerd wachtwoord.\nJe mutten effen $1 wachten veurda'j t opniej proberen.",
- "login-abort-generic": "Je bin niet an-emeld. De procedure is aofebreuken.",
+ "login-abort-generic": "Je bin niet an-emeld - Aofebreuken",
"loginlanguagelabel": "Taal: $1",
"suspicious-userlogout": "Joew verzeuk um of te melden is aofewezen umdat t dernaor uutziet dat t verstuurd is deur n kepotte webkieker of tussenopslagbuffer",
"createacct-another-realname-tip": "Joew echte naam opgeven is niet verplicht.\nA'j t invullen, dan zu'w t gebruken um erkenning te geven veur joew warkzaamhejen.",
"passwordreset-emailtext-ip": "Der hef der ene, waorschienlik jie zelf vanaof t IP-adres $1, n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen.\nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
"passwordreset-emailtext-user": "De gebruker $1 van {{SITENAME}} hef n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen. \nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
"passwordreset-emailelement": "Gebrukersnaam: \n$1\n\nTiedelik wachtwoord: \n$2",
- "passwordreset-emailsentemail": "Der is n bericht verstuurd um t wachtwoord opniej in te stellen.",
+ "passwordreset-emailsentemail": "As dit netpostadres an joew gebrukerskonto ekoppeld is, dan wördt der n netbericht estuurd um joew wachtwoord opniej in te stellen.",
"passwordreset-emailsent-capture": "Der is n bericht verstuurd um joew wachtwoord opniej in te stellen. Dit ku'j hieronder lezen.",
"passwordreset-emailerror-capture": "Der is n bericht veur t opniej opstellen van joew wachwoord an-emaakt, dit ku'j hieronder lezen. t Versturen naor de {{GENDER:$2|gebruker}} is mislokt um de volgende reden: $1",
- "changeemail": "Wiezig netpostadres",
- "changeemail-header": "Netpostadres wiezigen",
+ "changeemail": "Netpostadres wiezigen of vorthaolen",
+ "changeemail-header": "Vul dit formulier in um joew netpostadres te wiezigen. A'j t netpostadres van disse gebrukerskonto ontkoppelen willen, laot t netpostadres dan leeg a'j t formulier opslaon.",
"changeemail-no-info": "Je mutten an-emeld ween um drekt toegang te hebben tot disse zied.",
"changeemail-oldemail": "t Ouwe netpostadres:",
"changeemail-newemail": "t Nieje netpostadres:",
"anonpreviewwarning": "''Je bin niet an-emeld.''\n''Deur de bewarking op te slaon wörden joew IP-adres op-esleugen in de ziedgeschiedenisse.''",
"missingsummary": "'''Herinnering:''' je hebben gien samenvatting op-egeven veur de bewarking. A'j noen weer op ''Opslaon'' klikken wörden de bewarking zonder samenvatting op-esleugen.",
"missingcommenttext": "Plaots joew opmarking hieronder.",
- "missingcommentheader": "'''Waorschuwing:''' je hebben der gien onderwarptitel bie ezet. A'j noen weer op \"{{int:savearticle}}\" klikken, dan wörden de bewarking op-esleugen zonder onderwarptitel.",
+ "missingcommentheader": "<strong>Waorschuwing:</strong> je hebben der gien onderwarptitel bie ezet. A'j noen weer op \"{{int:savearticle}}\" klikken, dan wörden de bewarking op-esleugen zonder onderwarptitel.",
"summary-preview": "Samenvatting naokieken:",
- "subject-preview": "Onderwarp/kop naokieken:",
+ "subject-preview": "Onderwarp naokieken:",
"blockedtitle": "Gebruker is eblokkeerd",
"blockedtext": "'''Joew gebrukersnaam of IP-adres is eblokkeerd.'''\n\nJe bin eblokkeerd deur: $1.\nDe op-egeven reden is: ''$2''.\n\n* Eblokkeerd vanaof: $8\n* Eblokkeerd tot: $6\n* Bedoeld um te blokkeren: $7\n\nJe kunnen kontakt opnemen mit $1 of n aandere [[{{MediaWiki:Grouppage-sysop}}|beheerder]] um de blokkering te bepraoten.\nJe kunnen gien gebruukmaken van de funksie 'een bericht sturen', behalven a'j n geldig netpostadres op-egeven hebben in joew [[Special:Preferences|veurkeuren]] en t gebruuk van disse funksie niet eblokkeerd is.\nt IP-adres da'j noen gebruken is $3 en t blokkeringsnummer is #$5.\nVermeld t allebeie a'j argens op disse blokkering reageren.",
"autoblockedtext": "Joew IP-adres is automaties eblokkeerd umdat t gebruukt wördt deur n aandere gebruker, die eblokkeerd wördt deur $1.\nDe reden hierveur was:\n\n:''$2''\n\n* Begint: $8\n* Löp of nao: $6\n* Wee eblokkeerd wördt: $7\n\nJe kunnen kontakt opnemen mit $1 of n van de aandere\n[[{{MediaWiki:Grouppage-sysop}}|beheerders]] um de blokkering te bepraoten.\n\nNB: je kunnen de opsie \"n bericht sturen\" niet gebruken, behalven a'j n geldig netpostadres op-egeven hebben in de [[Special:Preferences|gebrukersveurkeuren]] en je niet eblokkeerd bin.\n\nJoew IP-adres is $3 en joew blokkeernummer is $5.\nGeef disse nummers deur a'j kontakt mit ene opnemen over de blokkering.",
"prefs-watchlist-token": "Volgliestesleutel",
"prefs-misc": "Overig",
"prefs-resetpass": "Wachtwoord wiezigen",
- "prefs-changeemail": "Netpostadres wiezigen",
+ "prefs-changeemail": "Netpostadres wiezigen of vorthaolen",
"prefs-setemail": "Stel n netpostadres in",
"prefs-email": "Instellingen veur netpost",
"prefs-rendering": "Ziedweergave",
"rows": "Regels",
"columns": "Kolommen",
"searchresultshead": "Zeukresultaoten",
- "stub-threshold": "Verwiezingsformattering van <a href=\"#\" class=\"stub\">beginnetjes</a>:",
+ "stub-threshold": "Verwiezingsformattering van beginnetjes ($1):",
+ "stub-threshold-sample-link": "veurbeeld",
"stub-threshold-disabled": "uutezet",
"recentchangesdays": "Antal dagen die \"Leste wiezigingen\" löt zien:",
"recentchangesdays-max": "(hooguut $1 {{PLURAL:$1|dag|dagen}})",
"grouppage-bot": "{{ns:project}}:Bots",
"grouppage-sysop": "{{ns:project}}:Beheerder",
"grouppage-bureaucrat": "{{ns:project}}:Beheerder",
- "grouppage-suppress": "{{ns:project}}:Toezichte",
+ "grouppage-suppress": "{{ns:project}}:Toezicht",
"right-read": "Ziejen bekieken",
"right-edit": "Ziejen bewarken",
"right-createpage": "Ziejen anmaken",
"right-move": "Ziejen herneumen",
"right-move-subpages": "Ziejen samen mit de ziejen die deronder hangen verplaotsen",
"right-move-rootuserpages": "Gebrukersziejen van t hoogste nivo herneumen",
+ "right-move-categorypages": "Kategorieziejen herneumen",
"right-movefile": "Bestaanden herneumen",
"right-suppressredirect": "Gien deurverwiezing anmaken op de ouwe naam as n zied herneumd wörden",
"right-upload": "Bestaanden opsturen",
"right-deletedtext": "Bekiek vortedaone tekste en wiezigingen tussen vortedaone versies",
"right-browsearchive": "Vortedaone ziejen bekieken",
"right-undelete": "Vortedaone ziejen weerummeplaotsen",
- "right-suppressrevision": "Verbörgen versies bekieken en weerummeplaotsen",
+ "right-suppressrevision": "Bepaolde versies bekieken, verbargen en weer zichtbaor maken op ziejen van elke gebruker",
"right-suppressionlog": "Niet-publieke logboeken bekieken",
"right-block": "Aandere gebrukers de meugelikheid ontnemen um te bewarken",
"right-blockemail": "n Gebruker t recht ontnemen um berichjes te versturen",
"recentchanges-label-plusminus": "Disse ziedgrootte is mit dit antal bytes ewiezigd",
"recentchanges-legend-heading": "<strong>Legenda:</strong>",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (zie oek de [[Special:NewPages|lieste mit nieje ziejen]])",
+ "recentchanges-submit": "Bekiek",
"rcnotefrom": "Dit bin de wiezigingen sinds <strong>$2</strong> (maximum van <strong>$1</strong> wiezigingen).",
"rclistfrom": "Bekiek wiezigingen vanaof $3 $2",
"rcshowhideminor": "$1 kleine wiezigingen",
"recentchangeslinked-summary": "Op disse spesiale zied steet n lieste mit de leste wieziginen op ziejen waornaor verwezen wördt. Ziejen op [[Special:Watchlist|joew volglieste]] staon '''vet'''.",
"recentchangeslinked-page": "Ziednaam:",
"recentchangeslinked-to": "Bekiek wiezigingen op ziejen mit verwiezingen naor disse zied",
+ "recentchanges-page-added-to-category": "[[:$1]] bie kategorie ezet",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] bie kategorie ezet, [[Special:WhatLinksHere/$1|disse zied zit in aandere ziejen in-esleuten]]",
+ "recentchanges-page-removed-from-category": "[[:$1]] is vortedaon uut kategorie",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] vortedaon uut kategorie, [[Special:WhatLinksHere/$1|disse zied zit in aandere ziejen in-esleuten]]",
+ "autochange-username": "Automatiese wieziging van MediaWiki",
"upload": "Bestaand opsturen",
"uploadbtn": "Bestaand opsturen",
"reuploaddesc": "Weerumme naor de opstuurzied",
"Edoderoo",
"Nemo bis",
"Lemondoge",
- "Dinosaur918"
+ "Dinosaur918",
+ "Jdforrester"
]
},
"tog-underline": "Koppelingen onderstrepen:",
"minoredit": "Dit is een kleine bewerking",
"watchthis": "Deze pagina volgen",
"savearticle": "Pagina opslaan",
+ "publishpage": "Pagina publiceren",
"preview": "Voorvertoning",
"showpreview": "Bewerking ter controle bekijken",
"showdiff": "Wijzigingen bekijken",
"wantedfiles": "Niet-bestaande bestanden met koppelingen",
"wantedfiletext-cat": "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>. Pagina's die niet-bestaande bestanden insluiten staan op de pagina [[:$1]].",
"wantedfiletext-cat-noforeign": "De volgende bestanden zijn in gebruik maar bestaan niet. Daarnaast staan pagina's met niet-bestaande bestanden op [[:$1]].",
- "wantedfiletext-nocat": "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>.",
+ "wantedfiletext-nocat": "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke valse positieven worden <del>doorgehaald weergegeven</del>.",
"wantedfiletext-nocat-noforeign": "De volgende bestanden zijn in gebruik maar bestaan niet.",
"wantedtemplates": "Niet-bestaande sjablonen met koppelingen",
"mostlinked": "Pagina's waar het meest naar verwezen wordt",
"tooltip-ca-nstab-category": "Categoriepagina bekijken",
"tooltip-minoredit": "Deze wijziging als een kleine wijziging markeren",
"tooltip-save": "Wijzigingen opslaan",
+ "tooltip-publish": "Uw wijzigingen publiceren",
"tooltip-preview": "Een voorvertoning maken. Gebruik dit voordat u opslaat!",
"tooltip-diff": "Weergeven welke wijzigingen u aan de tekst hebt gemaakt",
"tooltip-compareselectedversions": "De verschillen tussen de geselecteerde versies van deze pagina bekijken.",
"logentry-protect-protect-cascade": "$1 heeft $3 {{GENDER:$2|beveiligd}} $4 [cascade]",
"logentry-protect-modify": "$1 heeft het beveiligingsniveau van $3 {{GENDER:$2|aangepast}} $4",
"logentry-protect-modify-cascade": "$1 heeft het beveiligingsniveau van $3 {{GENDER:$2|aangepast}} $4 [cascade]",
- "logentry-rights-rights": "$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|heeft}} groepslidmaatschap voor {{GENDER:$6|$3}} gewijzigd van $4 naar $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5",
"logentry-upload-upload": "$1 heeft $3 {{GENDER:$2|geüpload}}",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|zabezpieczył|zabezpieczyła|zabezpieczył(a)}} $3 $4 [kaskadowo]",
"logentry-protect-modify": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} poziom zabezpieczenia dla $3 $4 [kaskadowo]",
- "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} przynależność {{GENDER:$3|$3}} do grupy z $4 do $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|zmienił|zmieniła|zmienił(a)}} przynależność {{GENDER:$6|$3}} do grupy z $4 do $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} przynależność $3 do grup",
"logentry-rights-autopromote": "$1 automatycznie {{GENDER:$2|zmienił|zmieniła}} przynależność ($4 → $5)",
"logentry-upload-upload": "$1 {{GENDER:$2|przesłał|przesłała}} $3",
"randomrootpage": "Losowa strona (bez podstron)",
"log-action-filter-block": "Rodzaj blokady:",
"log-action-filter-delete": "Rodzaj usunięcia:",
+ "log-action-filter-patrol": "Rodzaj patrolu:",
"log-action-filter-protect": "Rodzaj zabezpieczenia:",
+ "log-action-filter-rights": "Typ zmiany uprawień",
"log-action-filter-upload": "Rodzaj przesłanych:",
"log-action-filter-all": "Wszystkie",
"log-action-filter-block-block": "Zablokowanie",
"log-action-filter-managetags-delete": "Usunięcie znacznika",
"log-action-filter-managetags-activate": "Aktywacja znacznika",
"log-action-filter-managetags-deactivate": "Deaktywacja znacznika",
+ "log-action-filter-patrol-patrol": "Ręczny",
+ "log-action-filter-patrol-autopatrol": "Automatyczny",
"log-action-filter-protect-protect": "Zabezpieczenie",
"log-action-filter-protect-modify": "Zmiana zabezpieczenia",
"log-action-filter-protect-unprotect": "Odbezpieczenie",
+ "log-action-filter-rights-rights": "Ręczna zmiana",
+ "log-action-filter-rights-autopromote": "Automatyczna zmiana",
"log-action-filter-upload-upload": "Nowe przesłane",
"log-action-filter-upload-overwrite": "Przesłane ponownie"
}
"Umherirrender",
"아라",
"عثمان خان شاہ",
- "Macofe"
+ "Macofe",
+ "Amire80"
]
},
"tog-underline": "کرښنې تړنې:",
"minoredit": "دا يو وړوکی سمون دی",
"watchthis": "همدا مخ کتل",
"savearticle": "مخ خوندي کول",
+ "publishpage": "مخ خپرول",
"preview": "مخليدنه",
"showpreview": "مخليدنه",
"showdiff": "بدلونونه ښکاره کول",
"newarticle": "(نوی)",
"newarticletext": "تاسې د يوې داسې تړنې څارنه کړې چې لا تر اوسه پورې نه شته.\nکه همدا مخ ليکل غواړۍ، نو په لانديني چوکاټ کې خپل متن وټاپئ (د لا نورو مالوماتو لپاره د [$1 لارښود مخ] وگورئ).\nکه چېرته تاسې دلته په تېروتنه راغلي ياست، نو يواځې د خپل د کتنمل '''مخ پر شا''' تڼۍ مو وټوکئ.",
"anontalkpagetext": "----''دا د يوه ورکنومي کارن چې کارن-نوم نه لري او يا خپل کارن-نوم نه کاروي، د سکالو يوه پاڼه ده. نو د يوه کس د پېژندلو پخاطر موږ د هماغه کارن د انټرنېټ شمېره يا IP پته دلته ثبتوؤ. داسې يوه IP پته د ډېرو کارنانو لخوا هم کارېدلی شي. که تاسې يو ورکنومی کارن ياست او تاسې ته دا څرگندېږي چې تاسې ته نااړونده پېغامونه او تبصرې اشاره شوي، نو د نورو بې نومو کارنانو او ستاسې ترمېنځ د ټکنتوب د مخ نيونې لپاره لطفاً [[Special:UserLogin/signup|يو گڼون جوړ کړۍ]] او يا هم [[Special:UserLogin|غونډال ته ورننوځۍ]].''",
- "noarticletext": "دم مهال په دې مخ کې څه نشته.\nتاسې کولای شی چې په نورو مخونو کې [[Special:Search/{{PAGENAME}}|د دې مخ د سرليک پلټنه]] يا\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د اړوندو يادښتونو پلټنه] وکړی.\nاو يا [{{fullurl:{{FULLPAGENAME}}|action=edit}} همدا مخ سم کړی]</span>.",
+ "noarticletext": "دم مهال په دې مخ کې څه نشته.\nتاسې کولای شی چې په نورو مخونو کې [[Special:Search/{{PAGENAME}}|د دې مخ د سرليک پلټنه]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} د اړوندو يادښتونو پلټنه] ،\nاو يا [{{fullurl:{{FULLPAGENAME}}|action=edit}} همدا مخ جوړ کړئ]</span>.",
"noarticletext-nopermission": "دم مهال په دې مخ کې متن نشته.\nتاسې کولای شی چې [[Special:Search/{{PAGENAME}}|همدا سرليک په نورو مخونو کې وپلټۍ]], يا هم <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} اړونده يادښتونه وپلټۍ]</span>، خو تاسې د دې مخ د جوړولو اجازه نه لرۍ.",
"userpage-userdoesnotexist": "د \"<nowiki>$1</nowiki>\" گڼون نه دی ثبت شوی.\nلطفاً ځان ډاډه کړئ چې آيا تاسې په رښتيا همدا مخ جوړول/سمول غواړئ.",
"userpage-userdoesnotexist-view": "د \"$1\" گڼون نه دی ثبت شوی.",
"listgrouprights-rights": "رښتې",
"listgrouprights-helppage": "Help:د ډلې رښتې",
"listgrouprights-members": "(د غړو لړليک)",
- "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+ "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code dir=\"ltr\">($2)</code></span>",
"listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
"listgrouprights-addgroup": "{{PLURAL:$2|ډله|ډلې}} ورگډول: $1",
"listgrouprights-removegroup": "{{PLURAL:$2|ډله|ډلې}} ليري کول: $1",
"ipb-unblock": "له يوه کارن-نوم يا IP پتې بنديز ليري کول",
"ipb-blocklist": "شته بنديزونه کتل",
"ipb-blocklist-contribs": "د {{GENDER:$1|$1}} ونډې",
+ "ipb-blocklist-duration-left": "$1 پاتې دی",
"unblockip": "کارن له بنديزه وېستل",
"unblockiptext": "د لاندې فورمې په کارولو سره يو بنديز شوي کارن يا آی پي پتې ته د ليکلو لاسرسی ورکولی شی.",
"ipusubmit": "دا بنديز ليرې کول",
"tog-watchdefault": "Adicionar as páginas e arquivos que eu editar à minha lista de páginas vigiadas",
"tog-watchmoves": "Adicionar as páginas e arquivos que eu mover à minha lista de páginas vigiadas",
"tog-watchdeletion": "Adicionar as páginas e arquivos que eu eliminar à minha lista de páginas vigiadas",
+ "tog-watchuploads": "Adicionar arquivos que envio para minha lista de vigiados",
"tog-watchrollback": "Adicionar páginas onde fiz uma reversão às minhas páginas vigiadas",
"tog-minordefault": "Marcar todas as edições como menores por padrão",
"tog-previewontop": "Mostrar previsão antes da caixa de edição",
"noemail": "Não há um endereço de e-mail associado ao usuário \"$1\".",
"noemailcreate": "Você precisa fornecer um endereço de e-mail válido",
"passwordsent": "Uma nova senha está sendo enviada para o endereço de e-mail registrado para \"$1\".\nPor favor, reconecte-se ao recebê-lo.",
- "blocked-mailpassword": "O seu endereço de IP foi bloqueado de editar e, portanto, não será possível utilizar o lembrete de senha (para serem evitados envios abusivos a outras pessoas).",
+ "blocked-mailpassword": "O seu endereço de IP foi bloqueado para editar. Para evitar abusos, não é permitido o uso de recuperação de senha a partir deste endereço IP.",
"eauthentsent": "Uma mensagem de confirmação foi enviada para o endereço de e-mail fornecido.\nAntes de qualquer outro e-mail ser enviado para a sua conta, você precisará seguir as instruções da mensagem, de modo a confirmar que a conta é mesmo sua.",
"throttled-mailpassword": "Um lembrete de senha já foi enviado {{PLURAL:$1|na última hora|nas últimas $1 horas}}.\nPara prevenir abusos, apenas um lembrete poderá ser enviado a cada {{PLURAL:$1|hora|$1 horas}}.",
"mailerror": "Erro a enviar o email: $1",
"recentchangeslinked-page": "Nome da página:",
"recentchangeslinked-to": "Inversamente, mostrar mudanças nas páginas que contêm ligações para esta",
"recentchanges-page-added-to-category": "[[:$1]]adicionada à categoria",
- "recentchanges-page-added-to-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma página|$2 páginas}}]] adicionadas à categoria",
+ "recentchanges-page-added-to-category-bundled": "[[:$1]] adicionado à categoria, [[Special:WhatLinksHere/$1|esta página é incluída em outras páginas]]",
"recentchanges-page-removed-from-category": "[[:$1]] removida da categoria",
- "recentchanges-page-removed-from-category-bundled": "[[:$1]] e [[Special:WhatLinksHere/$1|{{PLURAL:$2|uma página|$2 páginas}}]] removidas da categoria",
+ "recentchanges-page-removed-from-category-bundled": "[[:$1]] removido da categoria, [[Special:WhatLinksHere/$1|esta página é incluída em outras páginas]]",
"autochange-username": "Alteração automática do MediaWiki",
"upload": "Enviar arquivo",
"uploadbtn": "Enviar arquivo",
"backend-fail-read": "Não foi possível ler o arquivo $1.",
"backend-fail-create": "Não foi possível criar ou alterar o arquivo $1.",
"backend-fail-maxsize": "Não foi possível criar ou alterar 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-readonly": "A armazenagem de \"$1\" está atualmente somente leitura. O motivo é: <em>$2</em>",
"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 se conectar com o servidor de armazenamento \"$1\".",
"backend-fail-internal": "Ocorreu um erro desconhecido no servidor de armazenamento \"$1\".",
"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.",
- "uploadstash-errclear": "Não foi possível apagar os arquivos.",
+ "uploadstash-badtoken": "A realização daquela ação falhou, talvez porque suas credenciais de edição expiraram. Por favor, tente novamente.",
+ "uploadstash-errclear": "A limpeza dos arquivos falhou.",
"uploadstash-refresh": "Atualizar a lista de arquivos",
"uploadstash-thumbnail": "ver miniatura",
"invalid-chunk-offset": "Deslocamento de fragmento inválido",
"apihelp-no-such-module": "Modulo \"$1\" não foram achados.",
"apisandbox": "Caixa de areia da API",
"apisandbox-api-disabled": "A API está desabilitada neste site.",
- "apisandbox-intro": "Use esta página para realizar testes com o '''serviço web de API do MediaWiki'''.\nConsulte a [//www.mediawiki.org/wiki/API:Main_page a documentação API] para obter mais detalhes de uso da API. Exemplo: [//www.mediawiki.org/wiki/API#A_simple_example obter o conteúdo de uma Página principal]. Selecione uma ação para mais exemplos.\n\nNote que, embora esta seja uma área de testes, as operações que executar nesta página podem modificar a wiki.",
+ "apisandbox-intro": "Use esta página para realizar testes com o '''serviço web de API do MediaWiki'''.\nConsulte a [//www.mediawiki.org/wiki/API:Main_page a documentação API] para obter mais detalhes de uso da API. Exemplo: [//www.mediawiki.org/wiki/API#A_simple_example obter o conteúdo de uma Página principal]. Selecione uma ação para mais exemplos.\n\nNote que, embora esta seja uma área de testes, as ações que executar nesta página podem modificar a wiki.",
"apisandbox-submit": "Fazer requisição",
"apisandbox-reset": "Limpar",
- "apisandbox-examples": "Exemplo",
- "apisandbox-results": "Resultado",
+ "apisandbox-retry": "Tentar novamente",
+ "apisandbox-loading": "Carregando informação para o módulo API \"$1\"...",
+ "apisandbox-helpurls": "Links de ajuda",
+ "apisandbox-examples": "Exemplos",
+ "apisandbox-dynamic-parameters": "Parâmetros adicionais",
+ "apisandbox-dynamic-parameters-add-label": "Parâmetro adicional",
+ "apisandbox-dynamic-parameters-add-placeholder": "Nome do parâmetro",
+ "apisandbox-deprecated-parameters": "Parâmetros obsoletos",
+ "apisandbox-submit-invalid-fields-title": "Alguns campos são inválidos",
+ "apisandbox-results": "Resultados",
"apisandbox-request-url-label": "URL solicitante:",
- "apisandbox-request-time": "Tempo do pedido: $1",
+ "apisandbox-request-time": "Tempo do pedido: {{PLURAL:$1|$1 ms}}",
"booksources": "Fontes bibliográficas",
"booksources-search-legend": "Pesquisar referências bibliográficas",
"booksources-search": "Pesquisar",
"delete-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nA eliminação de tais páginas foi restrita, a fim de se evitarem problemas acidentais em {{SITENAME}}.",
"delete-warning-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nEliminá-la poderá causar problemas na base de dados de {{SITENAME}};\nprossiga com cuidado.",
"deleteprotected": "Não é possível eliminar esta página porque foi protegida.",
- "deleting-backlinks-warning": "'''Cuidado:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páginas]] se ligam ou redirecionam para a página que você está prestes a deletar.",
+ "deleting-backlinks-warning": "'''Cuidado:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Other pages]] ligam ou redirecionam para a página que você está prestes a excluir.",
"rollback": "Reverter edições",
"rollbacklink": "reverter",
"rollbacklinkcount": "reverter $1 {{PLURAL:$1|edição|edições}}",
"protect-locked-blocked": "Você não poderá alterar os níveis de proteção enquanto estiver bloqueado. Esta é a configuração atual para a página '''$1''':",
"protect-locked-dblock": "Não é possível alterar os níveis de proteção, uma vez que a base de dados se encontra trancada.\nEsta é a configuração atual para a página '''$1''':",
"protect-locked-access": "Sua conta não possui permissões para alterar os níveis de proteção de uma página.\nEsta é a configuração atual para a página '''$1''':",
- "protect-cascadeon": "Esta página encontra-se protegida, uma vez que se encontra incluída {{PLURAL:$1|na página listada a seguir, protegida|nas páginas listadas a seguir, protegidas}} com a \"proteção progressiva\" ativada. Você poderá alterar o nível de proteção desta página, mas isso não afetará a \"proteção progressiva\".",
+ "protect-cascadeon": "Esta página está protegida porque é transclusa da seguinte {{PLURAL:$1|página, que possui|páginas, que possuem}} a proteção em cascata ativas.\nAs mudanças no nível de proteção desta página não afetam a proteção em cascata.",
"protect-default": "Permitir todos os usuários",
"protect-fallback": "Permitir apenas os usuários com privilégio de \"$1\"",
"protect-level-autoconfirmed": "Permitir apenas usuários auto-confirmados",
"tags-edit-revision-legend": "Adicionar ou remover etiquetas {{PLURAL:$1|desta revisão|de todas as $1 revisões}}",
"tags-edit-logentry-legend": "Adicionar ou remover etiquetas {{PLURAL:$1|desta entrada de registro|de todas as $1 entradas de registro}}",
"tags-edit-existing-tags": "Etiquetas existentes:",
- "tags-edit-existing-tags-none": "''Nenhuma''",
+ "tags-edit-existing-tags-none": "<em>Nenhuma</em>",
"tags-edit-new-tags": "Novas etiquetas:",
"tags-edit-add": "Adicionar estas etiquetas:",
"tags-edit-remove": "Remover estas etiquetas:",
"tags-edit-reason": "Motivo:",
"tags-edit-revision-submit": "Aplicar alterações para {{PLURAL:$1|esta revisão|$1 revisões}}",
"tags-edit-logentry-submit": "Aplicar alterações para {{PLURAL:$1|esta entrada de registro|$1 entradas de registro}}",
- "tags-edit-success": "As alterações foram aplicadas com sucesso.",
+ "tags-edit-success": "As alterações foram aplicadas.",
"tags-edit-failure": "As alterações não puderam ser aplicadas:\n$1",
"tags-edit-nooldid-title": "Revisão inválida",
"tags-edit-nooldid-text": "Você não especificou nenhuma revisão para executar esta função, ou a revisão especificada não existe.",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegeu}} $3 $4 [em cascata]",
"logentry-protect-modify": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4 [em cascata]",
- "logentry-rights-rights": "$1 alterou os grupos de usuário de $3 de $4 para $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|mudou}} membros do grupo para {{GENDER:$6|$3}} de $4 para $5",
"logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
"logentry-rights-autopromote": "$1 foi promovido automaticamente de $4 para $5",
"logentry-upload-upload": "$1 {{GENDER:$2|carregou}} $3",
"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á outro arquivo|existem outros arquivos}} com o mesmo conteúdo",
+ "api-error-duplicate": "Já {{PLURAL:$1|há outro arquivo|existem outros arquivos}} no site com o mesmo conteúdo",
"api-error-duplicate-archive": "Já {{PLURAL:$1|existiu outro arquivo|existiram outros arquivos}} neste site com o mesmo conteúdo que, no entanto, {{PLURAL:$1|foi removido|foram removidos}}.",
"api-error-empty-file": "O arquivo que você enviou está vazio.",
"api-error-emptypage": "Não é permitido criar páginas novas vazias.",
"Önni",
"Diniscoelho",
"Josep Maria Roca Peña",
- "Luan"
+ "Luan",
+ "Gato Preto",
+ "Jdforrester"
]
},
"tog-underline": "Sublinhar ligações:",
"minoredit": "Marcar como edição menor",
"watchthis": "Vigiar esta página",
"savearticle": "Gravar página",
+ "publishpage": "Publicar página",
"preview": "Antevisão",
"showpreview": "Antever resultado",
"showdiff": "Mostrar alterações",
"Aursani",
"Robin van der Vliet",
"Conquistador",
- "Frigory"
+ "Frigory",
+ "Psychoslave"
]
},
"sidebar": "{{notranslate}}",
"botpasswords-label-cancel": "Button label for a button to cancel the creation or edit of a bot password.\n{{Identical|Cancel}}",
"botpasswords-label-delete": "Button label for the button to delete a bot password.\n{{Identical|Delete}}",
"botpasswords-label-resetpassword": "Label for the checkbox to reset the actual password for the current bot password.",
- "botpasswords-label-grants": "Label for the checkmatrix for selecting grants allowed when the bot password is used.",
+ "botpasswords-label-grants": "Label for the checkmatrix for selecting grants allowed when the bot password is used.\n\ngrant: Vidu http://komputeko.net/index_en.php?vorto=grant sed \"konced/i\" egale funkcius.",
"botpasswords-help-grants": "Help text for the grant selection checkmatrix.",
"botpasswords-label-restrictions": "Label for the textarea field in which JSON defining access restrictions (e.g. which IP address ranges are allowed) is entered.",
"botpasswords-label-grants-column": "Label for the checkbox column on the checkmatrix for selecting grants allowed when the bot password is used.",
"minoredit": "Text above Save page button in editor\n\nSee also:\n* {{msg-mw|Minoredit}}\n* {{msg-mw|Accesskey-minoredit}}\n* {{msg-mw|Tooltip-minoredit}}",
"watchthis": "Text of checkbox above {{msg-mw|Showpreview}} button in editor.\n\nSee also:\n* {{msg-mw|Watchthis}}\n* {{msg-mw|Accesskey-watch}}\n* {{msg-mw|Tooltip-watch}}\n{{Identical|Watch this page}}",
"savearticle": "Text on the Save page button. See also {{msg-mw|showpreview}} and {{msg-mw|showdiff}} for the other buttons.\n\nSee also:\n* {{msg-mw|Savearticle}}\n* {{msg-mw|Accesskey-save}}\n* {{msg-mw|Tooltip-save}}\n{{Identical|Save page}}",
+ "publishpage": "Text on the button to save the changes to the page. It should be an action which is short and makes clear that the effect is immediate and public.\n\nSee also {{msg-mw|showpreview}} and {{msg-mw|showdiff}} for the other buttons.\n\nNote: This i18n is being introduced in advance of usage to provide extra time for translators.\n\nSee also:\n* {{msg-mw|Accesskey-publish}}\n* {{msg-mw|Tooltip-publish}}\n{{Identical|Publish page}}",
"preview": "The title of the Preview page shown after clicking the \"Show preview\" button in the edit page. Since this is a heading, it should probably be translated as a noun and not as a verb.\n\n{{Identical|Preview}}",
"showpreview": "The text of the button to preview the page you are editing. See also {{msg-mw|showdiff}} and {{msg-mw|savearticle}} for the other buttons.\n\nSee also:\n* {{msg-mw|Showpreview}}\n* {{msg-mw|Accesskey-preview}}\n* {{msg-mw|Tooltip-preview}}\n{{Identical|Show preview}}",
"showdiff": "Button below the edit page. See also {{msg-mw|Showpreview}} and {{msg-mw|Savearticle}} for the other buttons.\n\nSee also:\n* {{msg-mw|Showdiff}}\n* {{msg-mw|Accesskey-diff}}\n* {{msg-mw|Tooltip-diff}}\n{{Identical|Show change}}",
"userpage-userdoesnotexist": "Error message displayed when trying to edit or create a page or a subpage that belongs to a user who is not registered on the wiki.\n\nParameters:\n* $1 - a username\n{{identical|userdoesnotexist}}",
"userpage-userdoesnotexist-view": "Shown in user pages of non-existing users. See for example [{{canonicalurl:User:Foo}} User:Foo].\n\nParameters:\n* $1 - a username\n{{identical|userdoesnotexist}}",
"blocked-notice-logextract": "{{gender}}\nParameters:\n* $1 - (Optional) the name of the blocked user. Can be used for GENDER.",
- "clearyourcache": "Text at the top of .js/.css pages",
+ "clearyourcache": "Text at the top of .js/.css pages.\n\nWhen translating browser function names, check how they are translated in the localized versions of these web browsers in your language. If a browser is not translated to it, use English or another language in which browsers are most commonly used by the speakers of your language.",
"usercssyoucanpreview": "Text displayed on every CSS page.\n\nSee also:\n* {{msg-mw|Userjsyoucanpreview}}\n* {{msg-mw|Showpreview}}",
"userjsyoucanpreview": "Text displayed on every JavaScript page.\n\nSee also:\n* {{msg-mw|Usercssyoucanpreview}}\n* {{msg-mw|Showpreview}}",
"usercsspreview": "Text displayed on preview of every user .css subpage.\n\nSee also:\n* {{msg-mw|Sitecsspreview}}",
"accesskey-ca-nstab-category": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Nstab-category}}\n* {{msg-mw|Accesskey-ca-nstab-category}}\n* {{msg-mw|Tooltip-ca-nstab-category}}",
"accesskey-minoredit": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Minoredit}}\n* {{msg-mw|Accesskey-minoredit}}\n* {{msg-mw|Tooltip-minoredit}}",
"accesskey-save": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Savearticle}}\n* {{msg-mw|Accesskey-save}}\n* {{msg-mw|Tooltip-save}}",
+ "accesskey-publish": "{{doc-accesskey}}\n\nNote: This i18n is being introduced in advance of usage to provide extra time for translators.\nSee also:\n* {{msg-mw|publishpage}}\n* {{msg-mw|Tooltip-publish}}",
"accesskey-preview": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Showpreview}}\n* {{msg-mw|Accesskey-preview}}\n* {{msg-mw|Tooltip-preview}}",
"accesskey-diff": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Showdiff}}\n* {{msg-mw|Accesskey-diff}}\n* {{msg-mw|Tooltip-diff}}",
"accesskey-compareselectedversions": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Compareselectedversions}}\n* {{msg-mw|Accesskey-compareselectedversions}}\n* {{msg-mw|Tooltip-compareselectedversions}}",
"tooltip-ca-nstab-category": "Tooltip shown when hovering over the {{msg-mw|Nstab-category}} tab.\n\nSee also:\n* {{msg-mw|Nstab-category}}\n* {{msg-mw|Accesskey-ca-nstab-category}}\n* {{msg-mw|Tooltip-ca-nstab-category}}",
"tooltip-minoredit": "Tooltip shown when hovering over the \"{{msg-mw|Minoredit}}\" link below the edit form.\n\nSee also:\n* {{msg-mw|Minoredit}}\n* {{msg-mw|Accesskey-minoredit}}\n* {{msg-mw|Tooltip-minoredit}}",
"tooltip-save": "This is the text that appears when you hover the mouse over {{msg-mw|Savearticle}} button on the edit page.\n\nSee also:\n* {{msg-mw|Savearticle}}\n* {{msg-mw|Accesskey-save}}\n* {{msg-mw|Tooltip-save}}",
+ "tooltip-publish": "This is the text that appears when you hover the mouse over {{msg-mw|publishpage}} button on the edit page.\n\nNote: This i18n is being introduced in advance of usage to provide extra time for translators.\n\nSee also:\n* {{msg-mw|publishpage}}\n* {{msg-mw|Accesskey-publish}}\n{{Identical|Publish page}}",
"tooltip-preview": "Tooltip shown when hovering over {{msg-mw|Showpreview}} button.\n\nIf the length of the translated message is over 60 characters (including spaces) then the end of the message will be cut off when using Firefox 2.0.0.7 browser, Linux operating system and the Monobook skin.\n\nSee also:\n* {{msg-mw|Showpreview}}\n* {{msg-mw|Accesskey-preview}}\n* {{msg-mw|Tooltip-preview}}",
"tooltip-diff": "This is the text (tooltip) that appears when you hover the mouse over {{msg-mw|Showdiff}} button on the edit page.\n\nSee also:\n* {{msg-mw|Showdiff}}\n* {{msg-mw|Accesskey-diff}}\n* {{msg-mw|Tooltip-diff}}",
"tooltip-compareselectedversions": "Tooltip of {{msg-mw|Compareselectedversions}} (which is used as button in history pages).\n\nSee also:\n* {{msg-mw|Compareselectedversions}}\n* {{msg-mw|Accesskey-compareselectedversions}}\n* {{msg-mw|Tooltip-compareselectedversions}}",
"logentry-protect-modify-cascade": "{{Logentry|[[Special:Log/protect]]}}\n\n* $4 - protect expiry (formatted with {{msg-mw|protect-summary-desc}}, multiple possible)\nFor word \"cascading\" see {{msg-mw|protect-summary-cascade}}",
"logentry-rights-rights": "* $1 - (see below)\n* $2 - (see below)\n* $3 - target user, like $1\n* $4 - list of user groups or {{msg-mw|Rightsnone}}\n* $5 - list of user groups or {{msg-mw|Rightsnone}}\n* $6 - target user, can be used with GENDER\n----\n{{Logentry|[[Special:Log/rights]]}}",
"logentry-rights-rights-legacy": "* $1 - username\n* $2 - (see below)\n* $3 - username\n----\n{{Logentry|[[Special:Log/rights]]}}",
- "logentry-rights-autopromote": "* $1 - username\n* $2 - (see below)\n* $3 - (see below)\n* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $5 - comma separated list of new user groups\n----\n{{Logentry|[[Special:Log/rights]]}}",
+ "logentry-rights-autopromote": "* $1 - username\n* $2 - (see below)\n* $3 - (see below) - unused\n* $4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}\n* $5 - comma separated list of new user groups\n* $6 - target user, can be used with GENDER for $3 - unused\n----\n{{Logentry|[[Special:Log/rights]]}}",
"logentry-upload-upload": "{{Logentry|[[Special:Log/upload]]}}",
"logentry-upload-overwrite": "{{Logentry|[[Special:Log/upload]]}}",
"logentry-upload-revert": "{{Logentry|[[Special:Log/upload]]}}",
"feedback-useragent": "A label denoting the user agent in the feedback that is posted to the feedback page.\n{{Identical|User agent}}",
"searchsuggest-search": "Greyed out default text in the simple search box in the Vector skin. (It disappears and lets the user enter the requested search terms when the search box receives focus.)\n\n{{Identical|Search}}",
"searchsuggest-containing": "Label used in the special item of the search suggestions list which gives the user an option to perform a full text search for the term.",
+ "api-error-autoblocked": "API error message that can be used for client side localisation of API errors.",
"api-error-badaccess-groups": "API error message that can be used for client side localisation of API errors.",
"api-error-badtoken": "API error message that can be used for client side localisation of API errors.",
+ "api-error-blocked": "API error message that can be used for client side localisation of API errors.",
"api-error-copyuploaddisabled": "API error message that can be used for client side localisation of API errors.",
"api-error-duplicate": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 - a number of files",
"api-error-duplicate-archive": "API error message that can be used for client side localisation of API errors. Parameters:\n* $1 - a number of files",
"api-error-nomodule": "API error message that can be used for client side localisation of API errors.",
"api-error-ok-but-empty": "API error message that can be used for client side localisation of API errors.",
"api-error-overwrite": "API error message that can be used for client side localisation of API errors.",
+ "api-error-ratelimited": "API error message that can be used for client side localisation of API errors.",
"api-error-stashfailed": "API error message that can be used for client side localisation of API errors.",
"api-error-publishfailed": "API error message that can be used for client side localisation of API errors.",
"api-error-stasherror": "API error message that can be used for client side localisation of API errors.",
"userrights-changeable-col": "Grupuri pe care le puteți schimba",
"userrights-unchangeable-col": "Grupuri pe care nu le puteți schimba",
"userrights-conflict": "Conflict al schimbării drepturilor de utilizator! Reverificați și confirmați-vă modificările.",
- "userrights-removed-self": "V-ați eliminat cu succes propriile drepturi. Ca urmare, nu mai puteți accesa această pagină.",
+ "userrights-removed-self": "V-ați eliminat propriile drepturi. Ca urmare, nu mai puteți accesa această pagină.",
"group": "Grup:",
"group-user": "Utilizatori",
"group-autoconfirmed": "Utilizatori autoconfirmați",
"special-characters-group-ipa": "AFI",
"special-characters-group-symbols": "Simboluri",
"special-characters-group-greek": "Greacă",
+ "special-characters-group-greekextended": "Greacă extinsă",
"special-characters-group-cyrillic": "Chirilică",
"special-characters-group-arabic": "Arabă",
"special-characters-group-arabicextended": "Arabă extinsă",
"Ядерный Трамвай",
"Исмаил Садуев",
"Lemondoge",
- "SamGold"
+ "SamGold",
+ "Jdforrester"
]
},
"tog-underline": "Подчёркивание ссылок:",
"minoredit": "Малое изменение",
"watchthis": "Включить эту страницу в список наблюдения",
"savearticle": "Записать страницу",
+ "publishpage": "издавать страницу",
"preview": "Предпросмотр",
"showpreview": "Предварительный просмотр",
"showdiff": "Внесённые изменения",
"logentry-protect-protect-cascade": "$1 защитил{{GENDER:$2||а}} $3 $4 [каскадно]",
"logentry-protect-modify": "$1 изменил{{GENDER:$2||а}} уровень защиты $3 $4",
"logentry-protect-modify-cascade": "$1 изменил{{GENDER:$2||а}} уровень защиты $3 $4 [каскадно]",
- "logentry-rights-rights": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для {{GENDER:$3|$3}} с $4 на $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для {{GENDER:$6|$3}} с $4 на $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|изменил|изменила}} членство в группах для $3",
"logentry-rights-autopromote": "$1 был{{GENDER:$2||а}} автоматически переведен{{GENDER:$2||а}} из $4 в $5",
"logentry-upload-upload": "$1 загрузил{{GENDER:$2||а}} $3",
"export-addnstext": "नामस्थानात् पुटानि योजयतु ।",
"export-addns": "संयोजयति",
"export-download": "सञ्चिका इव रक्षतु ।",
- "export-templates": "पà¥\8dराà¤\95à¥\83तà¥\80à¤\83 à¤\85नरà¥\8dà¤à¤¾à¤µà¤¯à¤¤à¥\81 ।",
+ "export-templates": "फलà¤\95ानि à¤\86यातà¤\82 à¤\95रà¥\8bतà¥\81",
"export-pagelinks": "...इत्यस्य गाहाय अनुबद्धपुटानि अन्तरभावयतु ।",
"allmessages": "व्यवस्था सन्देशाः",
"allmessagesname": "नाम",
"thumbnail_gd-library": "अपूर्णं जि.जि.ग्रन्थालयानुन्यासः : विनष्टः कार्यकलापः $1",
"thumbnail_image-missing": "सञ्चिका विनष्टा इति भाति : $1",
"thumbnail_image-failure-limit": "एतत् थम्बलाईन् सिद्धं कर्तुं सद्यः जाताः बहवः असफलाः प्रयासाः सन्ति ($1 उत अधिकाः) । कृपया पुनः प्रयतताम् ।",
- "import": "पà¥\83षà¥\8dठानाà¤\82 निरà¥\8dयातं करोतु",
+ "import": "पà¥\83षà¥\8dठमà¥\8d à¤\86यातं करोतु",
"importinterwiki": "अन्यस्मात् विकि-जालस्थानात् पृष्ठानि आयातं करोतु",
"import-interwiki-text": "आयातं कर्तुम् कञ्चन विकि-प्रकल्पं, किञ्चित् पृष्ठं च चिनोतु ।\nसंस्करणस्य दिनाङ्कं, सम्पादकस्य नाम यथा स्थाने भविष्यति ।\nअन्यस्मात् विकि-प्रकल्पात् आयातकृताः सर्वाः संरक्षिताऽऽवल्यः [[Special:Log/import|आयातसंरक्षिताऽऽल्यां]] भविष्यन्ति ।",
"import-interwiki-sourcewiki": "स्रोत-विकि :",
"import-interwiki-sourcepage": "स्रोतपृष्ठम् :",
- "import-interwiki-history": "à¤\8fततà¥\8dपà¥\81à¤\9fारà¥\8dथà¤\82 सरà¥\8dवà¥\87तिहासानà¥\8d पà¥\81नरावà¥\83तà¥\8dतà¥\80à¤\83 à¤\9a पà¥\8dरà¤\95à¥\83तà¥\80à¤\83 à¤\95रà¥\8bतà¥\81 ।",
- "import-interwiki-templates": "पà¥\8dराà¤\95à¥\83तà¥\80à¤\83 à¤\85नरà¥\8dà¤à¤¾à¤µà¤¯à¤¤à¥\81 ।",
+ "import-interwiki-history": "à¤\8fतसà¥\8dय पà¥\83षà¥\8dठसà¥\8dय सरà¥\8dवमà¥\8d à¤\87तिहासमà¥\8d à¤\86यतà¤\82 à¤\95रà¥\8bतà¥\81",
+ "import-interwiki-templates": "सरà¥\8dवà¥\88à¤\83 à¤\89पफलà¤\95à¥\88à¤\83 सह (फलà¤\95à¥\87 पà¥\8dरयà¥\81à¤\95à¥\8dतानि) à¤\86यातà¤\82 à¤\95रà¥\8bतà¥\81",
"import-interwiki-submit": "आयातं करोतु ।",
"import-mapping-default": "मूलस्थितिम् आयातं करोतु",
"import-mapping-namespace": "नामाकाशे आयातं करोतु :",
"import-upload-filename": "सञ्चिकानाम",
"import-comment": "टिप्पणी :",
"importtext": "[[Special:Export|export utility]] एतेनानुबन्धेन स्रोतविकितः सञ्चिकानां निर्यातं करोतु । भवदीयसङ्गणके सुरक्ष्य अत्र उत्तारयतु ।",
- "importstart": "पà¥\81à¤\9fानामà¥\8d à¤\86यातà¤\83....",
+ "importstart": "à¤\86यातà¤\95ारà¥\8dयà¤\82 पà¥\8dरà¤\9aलति...",
"import-revision-count": "$1 {{PLURAL:$1|पुनरावृत्तिः}}",
"importnopages": "आयातं कर्तुं पुटानि न सन्ति ।",
"imported-log-entries": "आयातकृतम्$1{{PLURAL:$1|log entry|प्रवेशसूचिकाः}}.",
"minoredit": "manjše urejanje",
"watchthis": "Opazuj članek",
"savearticle": "Shrani stran",
+ "publishpage": "Objavi stran",
"preview": "Predogled",
"showpreview": "Prikaži predogled",
"showdiff": "Prikaži spremembe",
"userpage-userdoesnotexist": "Uporabniški račun »<nowiki>$1</nowiki>« ni registriran.\nProsimo preverite, ali res želite ustvariti/urediti to stran.",
"userpage-userdoesnotexist-view": "Uporabniški račun »$1« ni registriran.",
"blocked-notice-logextract": "Ta uporabnik je trenutno blokiran.\nNajnovejši vnos v dnevniku blokad je prikazan spodaj:",
- "clearyourcache": "'''Opomba:''' Da bodo spremembe prišle do veljave, po shranitvi izpraznite predpomnilnik svojega brskalnika.\n* '''Firefox/Safari:''' Držite ''Shift'' in kliknite ''Ponovno naloži'' (''Reload'') ali pritisnite ''Ctrl-Shift-R'' ali ''Ctrl-R'' (''⌘-R'' na sistemu Mac)\n* '''Internet Explorer:''' Držite ''Ctrl-F5'' in kliknite ''Osveži'' (''Refresh'') ali pritisnite ''Ctrl-F5''\n* '''Google Chrome:''' Pritisnite ''Ctrl-Shift-R'' (''⌘-Shift-R'' na sistemu Mac)\n* '''Opera:''' Počistite predpomnilnik v ''Tools → Preferences''",
+ "clearyourcache": "<strong>Opomba:</strong> Da bodo spremembe prišle do veljave, po shranitvi izpraznite predpomnilnik svojega brskalnika.\n* <strong>Firefox/Safari:</strong> Držite <em>Shift</em> in kliknite <em>Ponovno naloži</em> (<em>Reload</em>) ali pritisnite <em>Ctrl-Shift-R</em> ali <em>Ctrl-R</em> (<em>⌘-R</em> na sistemu Mac)\n* <strong>Internet Explorer:</strong> Držite <em>Ctrl-F5</em> in kliknite <em>Osveži</em> (<em>Refresh</em>) ali pritisnite <em>Ctrl-F5</em>\n* <strong>Google Chrome:</strong> Pritisnite <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> na sistemu Mac)\n* <strong>Opera:</strong> Pojdite v <em>Meni → Nastavitve</em> (<em>Opera → Nastavitve</em> na sistemu Mac) in nato na <em>Zasebnost in varnost → Počisti podatke o brskanju → Predpomnjene slike in datoteke</em>.",
"usercssyoucanpreview": "'''Nasvet:''' Za preizkušanje svojega novega CSS pred shranjevanjem uporabite gumb »{{int:showpreview}}«.",
"userjsyoucanpreview": "'''Nasvet:''' Za preizkušanje svojega novega JavaScripta pred shranjevanjem uporabite gumb »{{int:showpreview}}«.",
"usercsspreview": "'''Svoj uporabniški CSS le predogledujete.'''\n'''Ni še bil shranjen!'''",
"tooltip-ca-nstab-category": "Prikaže stran kategorije",
"tooltip-minoredit": "Označite kot manjše urejanje",
"tooltip-save": "Shranite vnesene spremembe (ste si jih predogledali?)",
+ "tooltip-publish": "Objavite svoje spremembe",
"tooltip-preview": "Pred shranjevanjem si, prosimo, predoglejte stran!",
"tooltip-diff": "Preglejte spremembe, ki ste jih vnesli.",
"tooltip-compareselectedversions": "Preglejte razlike med izbranima redakcijama.",
"logentry-protect-protect-cascade": "$1 je {{GENDER:$2|zaščitil|zaščitila|zaščitil(-a)}} $3 $4 [kaskadno]",
"logentry-protect-modify": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stopnjo zaščite $3 $4",
"logentry-protect-modify-cascade": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} stopnjo zaščite $3 $4 [kaskadno]",
- "logentry-rights-rights": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice {{GENDER:$3|uporabnika|uporabnice}} $3 z $4 na $5",
+ "logentry-rights-rights": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice {{GENDER:$6|uporabnika|uporabnice}} $3 z $4 na $5",
"logentry-rights-rights-legacy": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} uporabniške pravice uporabnika $3",
"logentry-rights-autopromote": "$1 je {{GENDER:$2|bil samodejno povišan|bila samodejno povišana|bil(-a) samodejno povišan(-a)}} z $4 na $5",
"logentry-upload-upload": "$1 je {{GENDER:$2|naložil|naložila|naložil(-a)}} $3",
"api-error-nomodule": "Notranja napaka: modul nalaganja ni izbran.",
"api-error-ok-but-empty": "Notranja napaka: strežnik se ne odziva.",
"api-error-overwrite": "Prepisovanje obstoječe datoteke ni dovoljeno.",
+ "api-error-ratelimited": "Poskušate naložiti več datotek v kratkem časovnem obdobju kot to dovoljuje ta wiki. Prosimo, poskusite znova čez nekaj minut.",
"api-error-stashfailed": "Notranja napaka: strežnik ni uspel shraniti začasne datoteke.",
"api-error-publishfailed": "Notranja napaka: strežnik ni uspel objaviti začasne datoteke.",
"api-error-stasherror": "Pri nalaganju datoteke v hrambo je prišlo do napake.",
"logentry-protect-protect-cascade": "$1 је {{GENDER:$2|заштитио|заштитила}} $3 $4 [преносива заштита]",
"logentry-protect-modify": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4",
"logentry-protect-modify-cascade": "$1 је {{GENDER:$2|променио|променила}} степен заштите за $3 $4 [преносива заштита]",
- "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за {{GENDER:$3|$3}} из $4 у $5",
+ "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за {{GENDER:$6|$3}} из $4 у $5",
"logentry-rights-rights-legacy": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3",
"logentry-rights-autopromote": "$1 је аутоматски {{GENDER:$2|унапређен|унапређена}} из $4 у $5",
"logentry-upload-upload": "$1 је {{GENDER:$2|послао|послала}} $3",
"logentry-protect-protect-cascade": "$1 je {{GENDER:$2|zaštitio|zaštitila}} $3 $4 [prenosiva zaštita]",
"logentry-protect-modify": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4",
"logentry-protect-modify-cascade": "$1 je {{GENDER:$2|promenio|promenila}} stepen zaštite za $3 $4 [prenosiva zaštita]",
- "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za {{GENDER:$3|$3}} iz $4 u $5",
+ "logentry-rights-rights": "$1 je {{GENDER:$2|promenio|promenila}} članstvo grupe za {{GENDER:$6|$3}} iz $4 u $5",
"logentry-rights-rights-legacy": "$1 je {{GENDER:$2|promenio|promenila}} čalnstvo grupe za $3",
"logentry-rights-autopromote": "$1 je automatski {{GENDER:$1|unapređen|unapređena}} iz $4 u $5",
"logentry-upload-upload": "$1 je {{GENDER:$2|poslao|poslala}} $3",
"minoredit": "Mindre ändring (m)",
"watchthis": "Bevaka denna sida",
"savearticle": "Spara sidan",
+ "publishpage": "Publicera sida",
"preview": "Förhandsgranska",
"showpreview": "Visa förhandsgranskning",
"showdiff": "Visa ändringar",
"userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" är inte ett registrerat användarkonto. Tänk efter om du vill skapa/redigera den här sidan.",
"userpage-userdoesnotexist-view": "Kontot \"$1\" är inte registrerat.",
"blocked-notice-logextract": "Användaren är blockerad.\nOrsaken till senaste blockeringen kan ses nedan:",
- "clearyourcache": "'''OBS:''' Efter du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.\n*'''Firefox / Safari:''' Håll ned ''Skift'' och klicka på ''Uppdatera sidan'' eller tryck antingen ''Ctrl-F5'' eller ''Ctrl-R'' (''⌘-R'' på Mac)\n*'''Google Chrome:''' Tryck ''Ctrl-Skift-R'' (''⌘-Shift-R'' på Mac)\n*'''Internet Explorer:''' Håll ned ''Ctrl'' och klicka på ''Uppdatera'' eller tryck ''Ctrl-F5''\n*'''Opera:''' Rensa cachen i ''Verktyg → Inställningar''",
+ "clearyourcache": "<strong>OBS:</strong> Efter du sparat sidan kan du behöva tömma din webbläsares cache för att se ändringarna.\n*<strong>Firefox / Safari:</strong> Håll ned <em>Skift</em> och klicka på <em>Uppdatera sidan</em> eller tryck antingen <em>Ctrl-F5</em> eller <em>Ctrl-R</em> (<em>⌘-R</em> på Mac)\n*<strong>Google Chrome:</strong> Tryck <em>Ctrl-Skift-R</em> (<em>⌘-Shift-R</em> på Mac)\n*<strong>Internet Explorer:</strong> Håll ned <em>Ctrl</em> och klicka på <em>Uppdatera</em> eller tryck <em>Ctrl-F5</em>\n*<strong>Opera:</strong> Gå till <em>Meny → Inställningar</em> (<em>Opera → Inställningar</em> på en Mac) och sedan på <em>Sekretess & säkerhet → Rensa webbläsardata → Hämtade bilder och filer</em>.",
"usercssyoucanpreview": "'''Tips:''' Använd knappen \"{{int:showpreview}}\" för att testa din nya CSS innan du sparar.",
"userjsyoucanpreview": "'''Tips:''' Använd knappen \"{{int:showpreview}}\" för att testa ditt nya JavaScript innan du sparar.",
"usercsspreview": "'''Kom ihåg att du bara förhandsgranskar din användar-CSS.'''\n'''Den har inte sparats än!'''",
"tooltip-ca-nstab-category": "Visa kategorisidan",
"tooltip-minoredit": "Markera som mindre ändring",
"tooltip-save": "Spara dina ändringar",
+ "tooltip-publish": "Publicera dina ändringar",
"tooltip-preview": "Förhandsgranska dina ändringar, vänligen använd detta innan du sparar!",
"tooltip-diff": "Visa vilka ändringar du har gjort i texten.",
"tooltip-compareselectedversions": "Visa skillnaden mellan de två markerade versionerna av den här sidan.",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|skyddade}} $3 $4 [kaskaderande]",
"logentry-protect-modify": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|ändrade}} skyddsnivån för $3 $4 [kaskaderande]",
- "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för {{GENDER:$3|$3}} från $4 till $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för {{GENDER:$6|$3}} från $4 till $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|ändrade}} gruppmedlemskapet för $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|befordrades}} automatiskt från $4 till $5",
"logentry-upload-upload": "$1 {{GENDER:$2|laddade upp}} $3",
"feedback-bugnew": "Jag kontrollerade. Rapportera ett nytt fel",
"feedback-bugornote": "Om du har möjlighet att ge en detaljerad teknisk beskrivning av felet kan du lämna en [$1 buggrapport]. \nAnvänd annars formuläret nedan. Din kommentar kommer att läggas till på sidan \"[$3 $2]\", tillsammans med ditt användarnamn.",
"feedback-cancel": "Avbryt",
- "feedback-close": "Färdig",
+ "feedback-close": "Fixat",
"feedback-external-bug-report-button": "Registrera en teknisk uppgift",
"feedback-dialog-title": "Skicka återkoppling",
"feedback-dialog-intro": "Du kan använda det enkla formuläret nedan för att skicka in din återkoppling. Din kommentar kommer att läggas till på sidan \"$1\" tillsammans med ditt användarnamn.",
"log-action-filter-delete-restore": "Återställde sida",
"log-action-filter-delete-event": "Radering av logg",
"log-action-filter-delete-revision": "Radering av sidversion",
- "log-action-filter-move-move": "Flyttning utan att skriva över omdirigeringar",
- "log-action-filter-move-move_redir": "Flyttning med att skriva över omdirigeringar",
+ "log-action-filter-import-interwiki": "Interwikiimport",
+ "log-action-filter-import-upload": "Importera med XML-uppladdning",
+ "log-action-filter-managetags-create": "Märke skapad",
+ "log-action-filter-managetags-delete": "Märke raderad",
+ "log-action-filter-managetags-activate": "Märke aktiverad",
+ "log-action-filter-managetags-deactivate": "Märke inaktiverad",
+ "log-action-filter-move-move": "Flyttning utan överskrivning av omdirigeringar",
+ "log-action-filter-move-move_redir": "Flyttning med överskrivning av omdirigeringar",
"log-action-filter-newusers-create": "Skapade av anonyma användare",
"log-action-filter-newusers-create2": "Skapade av registrerade användare",
"log-action-filter-newusers-autocreate": "Skapades automatiskt",
+ "log-action-filter-newusers-byemail": "Skapades med lösenord via e-post",
"log-action-filter-patrol-patrol": "Manuell patrullering",
"log-action-filter-patrol-autopatrol": "Automatisk patrullering",
"log-action-filter-protect-protect": "Skydd",
"minoredit": "ಉಂದು ಎಲ್ಯ ಬದಲಾವಣೆ",
"watchthis": "ಈ ಪುಟೊನು ತೂಲೆ",
"savearticle": "ಪುಟೊನು ಒರಿಪಾಲೆ",
+ "publishpage": "ಪುಟೋನು ಪ್ರಕಟಿಸಲೇ",
"preview": "ಮುನ್ನೋಟ",
"showpreview": "ಮುನ್ನೋಟೊ ತೋಜಾವು",
"showdiff": "ಬದಲಾವಣೆಲೆನ್ ತೋಜಾವ್",
"tooltip-ca-nstab-category": "ವರ್ಗೊದ ಪುಟೊನು ತೂಲೆ",
"tooltip-minoredit": "ಇಂದೆನ್ ಎಲ್ಯ ಬದಲಾವಣೆ ಪಂಡ್ದ್ ಗುರ್ತ ಮಲ್ಪುಲೆ",
"tooltip-save": "ಈರ್ ಮಲ್ತ್ನ ಬದಲಾವಣೆಲೆನ್ ಒರಿಪ್ಪಾಲೆ",
+ "tooltip-publish": "ಇರೇನಾ ಬದಲಾವನೇನ್ ತೊಜಲೇ",
"tooltip-preview": "ಈರ್ ಮಲ್ತ್ನ ಬದಲಾವಣೆತ ಮುನ್ನೋಟ - ಈ ಪುಟನ್ ಒರಿಪಾವುನ ದು೦ಬು ಉಂದೆನ್ ತೂಲೆ",
"tooltip-diff": "ಈ ಲೇಕನೊಗ್ ಮಲ್ತಿನ ಬದಲಾವಣೆಲೆನ್ ತೋಜಾವ್",
"tooltip-compareselectedversions": "ಈ ಪುಟತ ಆಯ್ಕೆ ಮಲ್ತಿನ ರಡ್ಡ್ ಆವೃತ್ತಿದ ವ್ಯತ್ಯಾಸನ್ ತೂಲೆ",
"prefs-help-signature": "Tartışma sayfalarındaki yorumlar \"<nowiki>~~~~</nowiki>\" ile imzalanmalıdır, bu imzanıza ve zaman damgasına dönüştürülür.",
"badsig": "Geçersiz ham imza; HTML etiketlerini kontrol edin.",
"badsiglength": "İmzanız çok uzun.\n$1 {{PLURAL:$1|karakterin|karakterin}} altında olmalı.",
- "yourgender": "Cinsel kimlik?",
+ "yourgender": "Cinsiyet?",
"gender-unknown": "Açıklamak istemiyorum",
"gender-male": "Erkek",
"gender-female": "Kadın",
"rcshowhidemine": "Benim değişikliklerimi $1",
"rcshowhidemine-show": "göster",
"rcshowhidemine-hide": "gizle",
- "rcshowhidecategorization": "$1 sayfa kategorizasyonu",
+ "rcshowhidecategorization": "sayfa kategorizasyonunu $1",
"rcshowhidecategorization-show": "Göster",
"rcshowhidecategorization-hide": "Gizle",
"rclinks": "Son $2 günde yapılan son $1 değişikliği göster;<br /> $3",
"badretype": "Кертелгән серсүзләр бер үк түгел.",
"userexists": "Кертелгән исем кулланыла.\nЗинһар, башка исем сайлагыз.",
"loginerror": "Керү хатасы",
+ "createacct-error": "Хисап язмазын булдыруда хата китте",
"createaccounterror": "Хисап язмасын төзеп булмый: $1",
"nocookiesnew": "Кулланучы теркәлгән, ләкин үз хисап язмасы белән кермәгән. {{SITENAME}} кулланучыны тану өчен «cookies» куллана. Сездә «cookies» тыелган. Зинһар, башта аларны рөхсәт итегез, аннан исем һәм серсүз белән керегез.",
"nocookieslogin": "{{SITENAME}} кулланучыны тану өчен «cookies» куллана. Сез аларны сүндергәнсез. Зинһар, аларны кабызып, яңадан керегез.",
"botpasswords-label-restrictions": "Куллану чикләүләре:",
"botpasswords-label-grants-column": "Рөхсәт",
"botpasswords-bad-appid": "Атамасы «$1» булган бот исеме ярамый.",
+ "botpasswords-created-title": "Бот серсүзе булдырылды",
"resetpass_forbidden": "Серсүз үзгәртелә алмый",
"resetpass-no-info": "Бу битне карау өчен сез системага үз хисап язмагыз ярдәмендә керергә тиеш.",
"resetpass-submit-loggedin": "Серсүзне үзгәртү",
"بىلگە",
"아라",
"Macofe",
- "Matma Rex"
+ "Matma Rex",
+ "Amire80"
]
},
"tog-underline": "ئۇلانما ئاستى سىزىقى:",
"listgrouprights-rights": "ھوقۇق",
"listgrouprights-helppage": "Help: گۇرۇپپا ھوقۇقى",
"listgrouprights-members": "(ئەزالار تىزىملىكى)",
- "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+ "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code dir=\"ltr\">($2)</code></span>",
"listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
"listgrouprights-addgroup": " {{PLURAL:$2|بىر|بىر قانچە}} گۇرۇپپىغا قوشالايدۇ: $1",
"listgrouprights-removegroup": " {{PLURAL:$2|بىر|بىر قانچە}} گۇرۇپپىدىن چىقىرىۋېتەلەيدۇ: $1",
"confirmemail_body_set": "Хтось (можливо ви) з IP-адреси $1\nназначив цю електронну скриньку для облікового запису „$2“ в проекті {{SITENAME}}.\n\nАби підтвердити, що цей обліковий запис справді належить вам, і дозволити надсилання листів\nз сайту {{SITENAME}}, відкрийте наступне посилання у веб-оглядачі:\n\n$3\n\nЯкщо даний обліковий запис *не* належить вам, перейдіть за наступним посиланням\nі відмініть цим підтвердження електронної адреси:\n\n$5\n\nКод підтвердження дійсний до $4.",
"confirmemail_invalidated": "Підтвердження адреси електронної пошти скасоване",
"invalidateemail": "Скасувати підтвердження адреси електронної пошти",
+ "notificationemail_subject_changed": "Електронну адресу, зареєстровану для сайту {{SITENAME}}, було змінено",
+ "notificationemail_subject_removed": "Електронну адресу, зареєстровану для сайту {{SITENAME}}, було вилучено",
+ "notificationemail_body_changed": "Хтось, ймовірно Ви, з IP-адреси $1,\nзмінив електронну адресу облікового запису «$2» на «$3» на сайті {{SITENAME}}.\n\nЯкщо це були не Ви, негайно зв'яжіться з адміністратором сайту.",
+ "notificationemail_body_removed": "Хтось, ймовірно Ви, з IP-адреси $1,\nвилучив електронну адресу облікового запису «$2» на сайті {{SITENAME}}.\n\nЯкщо це були не Ви, негайно зв'яжіться з адміністратором сайту.",
"scarytranscludedisabled": "[«Interwiki transcluding» вимкнено]",
"scarytranscludefailed": "[Помилка звертання до шаблону $1]",
"scarytranscludefailed-httpstatus": "[Не вдалось завантажити шаблон для $1: HTTP $2]",
"watchlistedit-raw-done": "Ваш список спостереження збережений.",
"watchlistedit-raw-added": "{{PLURAL:$1|$1 заголовок був доданий|$1 заголовки були додані|$1 заголовків були додані}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|$1 заголовок був вилучений|$1 заголовки були вилучені|$1 заголовків були вилучені}}:",
- "watchlistedit-clear-title": "Ð\9eÑ\87иÑ\89еннÑ\8f Ñ\81пиÑ\81кÑ\83 спостереження",
+ "watchlistedit-clear-title": "Ð\9eÑ\87иÑ\81Ñ\82иÑ\82и Ñ\81пиÑ\81ок спостереження",
"watchlistedit-clear-legend": "Очистити список спостереження",
"watchlistedit-clear-explain": "Усі сторінки буде вилучено з Вашого списку спостереження",
"watchlistedit-clear-titles": "Сторінки:",
"logentry-protect-protect-cascade": "$1 {{GENDER:$2|захистив|захистила}} $3 $4 [каскадно]",
"logentry-protect-modify": "$1 {{GENDER:$2|змінив|змінила}} налаштування захисту $3 $4",
"logentry-protect-modify-cascade": "$1 {{GENDER:$2|змінив|змінила}} налаштування захисту $3 $4 [каскадно]",
- "logentry-rights-rights": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для {{GENDER:$3|$3}} із $4 на $5",
+ "logentry-rights-rights": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для {{GENDER:$6|$3}} із $4 на $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|змінив|змінила}} членство в групах для $3",
"logentry-rights-autopromote": "$1 було автоматично переведено із $4 в $5",
"logentry-upload-upload": "$1 {{GENDER:$2|завантажив|завантажила}} $3",
"exif-iimcategory": "زمرہ",
"exif-orientation-1": "عام",
"exif-meteringmode-0": "نامعلوم",
+ "exif-dc-contributor": "ترمیم کنندگان",
"namespacesall": "تمام",
"monthsall": "تمام",
"deletedwhileediting": "انتباہ: آپ کے ترمیم شروع کرنے کے بعد یہ صفحہ حذف کیا جا چکا ہے!",
"tog-watchdefault": "Igdugang in mga pakli ngan mga paypay nga akon ginliwat ngadto han akon angay timan-an",
"tog-watchmoves": "Igdugang in mga pakli nga mga paypay nga akon ginpamalhin ngadto han akon angay timan-an",
"tog-watchdeletion": "Igdugang in mga pakli ngan mga paypay nga akon ginpamara ngadto han akon angay timan-an",
+ "tog-watchuploads": "Dugngi an mga file nga akon gin-upload ha akon watchlist",
"tog-watchrollback": "Igdugang an mga pakli ha akon watchlist an ak mga gin-rollback",
"tog-minordefault": "Tigamni an ngatanan nga mga pagliwat nga gudti hin default",
"tog-previewontop": "Igpakita in prevista o pan-ugsa-nga-lantaw ugsa hiton pagliwat nga kahon",
"tog-watchlisthidebots": "Tago-a an ginliwat hin bot tikang han angay timan-an",
"tog-watchlisthideminor": "Tago-a an mga gagmay nga pagliwat tikang han angay timan-an",
"tog-watchlisthideliu": "Igatag an mga ginliwat han naka log-in nga mga gumaramit tikang ha gintitiman-an",
+ "tog-watchlistreloadautomatically": "Igreload automatic an akon watchlist kada pagbabag-o han filter (kinahanglan hin JavaScript)",
"tog-watchlisthideanons": "Igtago an mga ginliwat han mga waray nagpakilala nga nagamit tikang ha gintitiman-an",
"tog-watchlisthidepatrolled": "Igatag an mga pinatrolya nga mga pagliwat tikang ha angay timan-an",
"tog-watchlisthidecategorization": "Igtago an kategorisasyon han mga pakli",
"cachedspecial-refresh-now": "Igkita an pinakaurhi.",
"categories": "Mga kaarangay",
"categoriesfrom": "Igpakita in mga kaarangay nga natikang ha:",
- "special-categories-sort-count": "igtalaan ha pag-ihap",
- "special-categories-sort-abc": "igtalaan ha abakadahan",
"deletedcontributions": "Mga ginpara nga mga ámot hin nágámit",
"deletedcontributions-title": "Ginpara nga mga amot han nagamit",
"sp-deletedcontributions-contribs": "mga amot",
"version-entrypoints-header-entrypoint": "Surudlan",
"version-entrypoints-header-url": "URL",
"fileduplicatesearch": "Pamiling hin nadoble nga mga paypay",
- "fileduplicatesearch-legend": "Pamiling hin nadoble",
"fileduplicatesearch-filename": "Ngaran han paypay:",
"fileduplicatesearch-submit": "Pamilnga",
"fileduplicatesearch-noresults": "Waray nabilngan nga paypay nga an ngaran in \"$1\".",
"changepassword-success": "您已经修改了您的密码!",
"changepassword-throttled": "您最近尝试了多次登录。请等待$1后再试。",
"botpasswords": "机器人密码",
- "botpasswords-summary": "<em>机器人密码</em>允许通过API访问用户账户而不使用账户的主要登录凭据。通过机器人密码登录时,用户权限可能会受限制。\n\n如果您不知道为什么您想这样做,您就不应该这样做。没有人会要求您生成这些密码之一,并向其提供。",
+ "botpasswords-summary": "<em>机器人密码</em>允许在不使用账户的主要登录凭据的情况下,通过API访问用户账户。通过机器人密码登录时可用的用户权限可以被限制。\n\n在不知道为什么要这样做的情况下,您不应该使用此功能。任何人都不应该让您生成这些密码并向其提供。",
"botpasswords-disabled": "机器人密码已禁用。",
"botpasswords-no-central-id": "要使用机器人密码,您必须登录至已集中的账户。",
"botpasswords-existing": "现有机器人密码",
"botpasswords-label-delete": "删除",
"botpasswords-label-resetpassword": "重置密码",
"botpasswords-label-grants": "应用授权:",
- "botpasswords-help-grants": "每个授权提供列举的,对用户账户已拥有的用户权限的访问权。参见[[Special:ListGrants|授权表]]以获取更多信息。",
+ "botpasswords-help-grants": "每个授权将会赋予被列出、且用户账户已拥有权限的访问权。参见[[Special:ListGrants|授权表]]以获取更多信息。",
"botpasswords-label-restrictions": "使用限制:",
"botpasswords-label-grants-column": "已授权",
"botpasswords-bad-appid": "机器人名“$1”无效。",
"minoredit": "标记为小编辑",
"watchthis": "监视本页",
"savearticle": "保存页面",
+ "publishpage": "发布页面",
"preview": "预览",
"showpreview": "显示预览",
"showdiff": "显示更改",
"userpage-userdoesnotexist": "用户账户“$1”没有注册。请在创建/编辑本页前检查。",
"userpage-userdoesnotexist-view": "用户账户“$1”没有被注册。",
"blocked-notice-logextract": "这位用户目前已被封禁。以下提供最近的封禁日志以供参考:",
- "clearyourcache": "<strong>注意:</strong>在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。\n* <strong>Firefox或Safari:</strong>按住“Shift”的同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)\n* <strong>Google Chrome:</strong>按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)\n* <strong>Internet Explorer:</strong>按住“Ctrl”的同时单击“刷新”,或按“Ctrl-F5”\n* <strong>Opera:</strong>在“工具→首选项”中清除缓存",
+ "clearyourcache": "<strong>注意:</strong>在保存之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。\n* <strong>Firefox或Safari:</strong>按住<em>Shift</em>的同时单击<em>刷新</em>,或按<em>Ctrl-F5</em>或<em>Ctrl-R</em>(Mac为<em>⌘-R</em>)\n* <strong>Google Chrome:</strong>按<em>Ctrl-Shift-R</em>(Mac为<em>⌘-Shift-R</em>)\n* <strong>Internet Explorer:</strong>按住<em>Ctrl</em>的同时单击<em>刷新</em>,或按<em>Ctrl-F5</em>\n* <strong>Opera:</strong>前往<em>菜单 → 设置</em>(Mac为<em>Opera → Preferences</em>),然后em>隐私和安全 → 清除浏览数据 → 缓存的图片和文件</em>。",
"usercssyoucanpreview": "<strong>提示:</strong>在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
"userjsyoucanpreview": "<strong>提示:</strong>在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
"usercsspreview": "<strong>请记住您现在只是在预览你的用户CSS。它尚未保存!</strong>",
"history-feed-item-nocomment": "$2 $1",
"history-feed-empty": "所请求的页面不存在。它可能已被删除或重命名。\n尝试[[Special:Search|搜索本站]]获得相关的新建页面。",
"history-edit-tags": "编辑选定修订版本的标签",
- "rev-deleted-comment": "(编辑摘要被删除)",
+ "rev-deleted-comment": "(编辑摘要被移除)",
"rev-deleted-user": "(用户名被删除)",
"rev-deleted-event": "(日志详情已移除)",
"rev-deleted-user-contribs": "[用户名或IP地址被删除 - 编辑在贡献中隐藏]",
"search-result-size": "$1($2个字)",
"search-result-category-size": "$1个成员($2个子分类,$3个文件)",
"search-redirect": "(重定向自“$1”)",
- "search-section": "(“$1”段落)",
+ "search-section": "(“$1”章节)",
"search-category": "(分类$1)",
"search-file-match": "(匹配文件内容)",
"search-suggest": "您是不是要找:$1",
"grant-group-email": "发送电子邮件",
"grant-group-high-volume": "执行大量活动",
"grant-group-customization": "自定义与设置",
- "grant-group-administration": "执行行政操作",
+ "grant-group-administration": "执行管理操作",
"grant-group-other": "杂项活动",
"grant-blockusers": "封禁与解封用户",
"grant-createaccount": "创建账户",
"rc_categories": "分类限制(用“|”分隔):",
"rc_categories_any": "任何选择的",
"rc-change-size-new": "更改后有$1字节",
- "newsectionsummary": "/* $1 */ 新段落",
+ "newsectionsummary": "/* $1 */ 新章节",
"rc-enhanced-expand": "显示细节",
"rc-enhanced-hide": "隐藏细节",
"rc-old-title": "最初创建为“$1”",
"listgrouprights-namespaceprotection-header": "名字空间限制",
"listgrouprights-namespaceprotection-namespace": "名字空间",
"listgrouprights-namespaceprotection-restrictedto": "允许用户编辑的权限",
- "listgrants": "æ\9d\83é\99\90",
+ "listgrants": "æ\8e\88æ\9d\83",
"listgrants-summary": "以下是与用户权限访问相关的授权列表。用户可以授予应用程序访问它们的账户,但限定于用户授予应用程序的功能权限。代表一位用户的应用程序不能使用用户没有的权限。\n这里可能有关于个别权限的[[{{MediaWiki:Listgrouprights-helppage}}|额外信息]]。",
"listgrants-grant": "授权",
"listgrants-rights": "权限",
"tooltip-ca-nstab-category": "查看分类页面",
"tooltip-minoredit": "标记本编辑为小编辑",
"tooltip-save": "保存你的更改",
+ "tooltip-publish": "发布您的更改",
"tooltip-preview": "预览您的更改。请在保存前使用此功能。",
"tooltip-diff": "显示您对该文字所做的更改",
"tooltip-compareselectedversions": "查看该页面两个选定的版本之间的差异。",
"logentry-protect-protect-cascade": "$1{{GENDER:$2|保护了}}$3 $4[级联]",
"logentry-protect-modify": "$1{{GENDER:$2|更改了}}$3的保护等级$4",
"logentry-protect-modify-cascade": "$1{{GENDER:$2|更改了}}$3的保护等级$4[级联]",
- "logentry-rights-rights": "$1已将{{GENDER:$3|$3}}的用户组从$4{{GENDER:$2|更改}}至$5",
+ "logentry-rights-rights": "$1已将{{GENDER:$6|$3}}的用户组从$4{{GENDER:$2|更改}}至$5",
"logentry-rights-rights-legacy": "$1更改$3的用户组",
"logentry-rights-autopromote": "$1被自动地{{GENDER:$2|提升}}自$4至$5",
"logentry-upload-upload": "$1{{GENDER:$2|上传}}$3",
"api-error-nomodule": "内部错误:缺少上传模块集。",
"api-error-ok-but-empty": "内部错误:服务器没有响应。",
"api-error-overwrite": "不允许覆盖现有文件。",
+ "api-error-ratelimited": "您正在尝试在比该wiki允许时间更短的时间内上传更多文件。请等待几分钟后再试。",
"api-error-stashfailed": "内部错误:服务器保存临时文件失败。",
"api-error-publishfailed": "内部错误:服务器发布临时文件失败。",
"api-error-stasherror": "上传文件存档时出现错误。",
+++ /dev/null
-DECLARE @fullyQualifiedTableName nvarchar(max),
-@tableName sysname,
-@fieldName sysname,
-@constr sysname,
-@constrNew sysname,
-@sqlcmd nvarchar(max),
-@sqlcreate nvarchar(max)
-
-SET @fullyQualifiedTableName = '/*_*//*$tableName*/'
-SET @tableName = '/*$tableName*/'
-SET @fieldName = '/*$fieldName*/'
-
-SELECT @constr = CONSTRAINT_NAME
-FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
-WHERE TABLE_NAME = @tableName
-AND CONSTRAINT_CATALOG = '/*$wgDBname*/'
-AND CONSTRAINT_SCHEMA = '/*$wgDBmwschema*/'
-AND CONSTRAINT_TYPE = 'CHECK'
-AND CONSTRAINT_NAME LIKE ('CK__' + left(@tableName,9) + '__' + left(@fieldName,5) + '%')
-
-SELECT @constrNew = CONSTRAINT_NAME
-FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
-WHERE TABLE_NAME = @tableName
-AND CONSTRAINT_CATALOG = '/*$wgDBname*/'
-AND CONSTRAINT_SCHEMA = '/*$wgDBmwschema*/'
-AND CONSTRAINT_TYPE = 'CHECK'
-AND CONSTRAINT_NAME = (@fieldName + '_ckc')
-
-IF @constr IS NOT NULL
-BEGIN
- SET @sqlcmd = 'ALTER TABLE ' + @fullyQualifiedTableName + ' DROP CONSTRAINT [' + @constr + ']'
- EXECUTE sp_executesql @sqlcmd
-END
-IF @constrNew IS NULL
-BEGIN
- SET @sqlcreate = 'ALTER TABLE ' + @fullyQualifiedTableName + ' WITH NOCHECK ADD CONSTRAINT ' + @fieldName + '_ckc CHECK /*$checkConstraint*/;'
- EXECUTE sp_executesql @sqlcreate
-END
\ No newline at end of file
--- /dev/null
+-- @since 1.27
+CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from);
--- /dev/null
+--
+-- This table contains a user's bot passwords: passwords that allow access to
+-- the account via the API with limited rights.
+--
+CREATE TABLE /*_*/bot_passwords (
+ bp_user int NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
+ bp_app_id nvarchar(32) NOT NULL,
+ bp_password nvarchar(255) NOT NULL,
+ bp_token nvarchar(255) NOT NULL,
+ bp_restrictions nvarchar(max) NOT NULL,
+ bp_grants nvarchar(max) NOT NULL,
+ PRIMARY KEY (bp_user, bp_app_id)
+);
--- /dev/null
+DECLARE @baseSQL nvarchar(max),
+ @SQL nvarchar(max),
+ @id sysname;--
+
+SET @baseSQL = 'ALTER TABLE /*_*/categorylinks DROP CONSTRAINT ';--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/categorylinks')
+ AND c.name = 'cl_type';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+ALTER TABLE /*_*/categorylinks ADD CONSTRAINT cl_type_ckc CHECK (cl_type IN('page', 'subcat', 'file'));
--- /dev/null
+DECLARE @sql nvarchar(max),
+ @id sysname;--
+
+SET @sql = 'ALTER TABLE /*_*/page DROP CONSTRAINT ';--
+
+SELECT @id = df.name
+FROM sys.default_constraints df
+JOIN sys.columns c
+ ON c.object_id = df.parent_object_id
+ AND c.column_id = df.parent_column_id
+WHERE
+ df.parent_object_id = OBJECT_ID('/*_*/page')
+ AND c.name = 'page_counter';--
+
+SET @sql = @sql + @id;--
+
+EXEC sp_executesql @sql;--
+
+ALTER TABLE /*_*/page DROP COLUMN page_counter;
--- /dev/null
+DECLARE @sql nvarchar(max),
+ @id sysname;--
+
+SET @sql = 'ALTER TABLE /*_*/recentchanges DROP CONSTRAINT ';--
+
+SELECT @id = df.name
+FROM sys.default_constraints df
+JOIN sys.columns c
+ ON c.object_id = df.parent_object_id
+ AND c.column_id = df.parent_column_id
+WHERE
+ df.parent_object_id = OBJECT_ID('/*_*/recentchanges')
+ AND c.name = 'rc_cur_time';--
+
+SET @sql = @sql + @id;--
+
+EXEC sp_executesql @sql;--
+
+ALTER TABLE /*_*/recentchanges DROP COLUMN rc_cur_time;
--- /dev/null
+DECLARE @sql nvarchar(max),
+ @id sysname;--
+
+SET @sql = 'ALTER TABLE /*_*/site_stats DROP CONSTRAINT ';--
+
+SELECT @id = df.name
+FROM sys.default_constraints df
+JOIN sys.columns c
+ ON c.object_id = df.parent_object_id
+ AND c.column_id = df.parent_column_id
+WHERE
+ df.parent_object_id = OBJECT_ID('/*_*/site_stats')
+ AND c.name = 'ss_total_views';--
+
+SET @sql = @sql + @id;--
+
+EXEC sp_executesql @sql;--
+
+ALTER TABLE /*_*/site_stats DROP COLUMN ss_total_views;
--- /dev/null
+DECLARE @sql nvarchar(max),
+ @id sysname;--
+
+SET @sql = 'ALTER TABLE /*_*/mwuser DROP CONSTRAINT ';--
+
+SELECT @id = df.name
+FROM sys.default_constraints df
+JOIN sys.columns c
+ ON c.object_id = df.parent_object_id
+ AND c.column_id = df.parent_column_id
+WHERE
+ df.parent_object_id = OBJECT_ID('/*_*/mwuser')
+ AND c.name = 'user_options';--
+
+SET @sql = @sql + @id;--
+
+EXEC sp_executesql @sql;--
+
+ALTER TABLE /*_*/mwuser DROP COLUMN user_options;
--- /dev/null
+DECLARE @baseSQL nvarchar(max),
+ @SQL nvarchar(max),
+ @id sysname;--
+
+SET @baseSQL = 'ALTER TABLE /*_*/filearchive DROP CONSTRAINT ';--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/filearchive')
+ AND c.name = 'fa_major_mime';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/filearchive')
+ AND c.name = 'fa_media_type';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+ALTER TABLE /*_*/filearchive ADD CONSTRAINT fa_major_mime_ckc check (fa_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart'));--
+ALTER TABLE /*_*/filearchive ADD CONSTRAINT fa_media_type_ckc check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
--- /dev/null
+-- MediaWiki looks for lines ending with semicolons and sends them as separate queries
+-- However here we *really* need this all to be sent as a single batch. As such, DO NOT
+-- remove the -- from the end of each statement.
+
+DECLARE @temp table (
+ fa_id int,
+ fa_name nvarchar(255),
+ fa_archive_name nvarchar(255),
+ fa_storage_group nvarchar(16),
+ fa_storage_key nvarchar(64),
+ fa_deleted_user int,
+ fa_deleted_timestamp varchar(14),
+ fa_deleted_reason nvarchar(max),
+ fa_size int,
+ fa_width int,
+ fa_height int,
+ fa_metadata nvarchar(max),
+ fa_bits int,
+ fa_media_type varchar(16),
+ fa_major_mime varchar(16),
+ fa_minor_mime nvarchar(100),
+ fa_description nvarchar(255),
+ fa_user int,
+ fa_user_text nvarchar(255),
+ fa_timestamp varchar(14),
+ fa_deleted tinyint,
+ fa_sha1 nvarchar(32)
+);--
+
+INSERT INTO @temp
+SELECT * FROM /*_*/filearchive;--
+
+DROP TABLE /*_*/filearchive;--
+
+CREATE TABLE /*_*/filearchive (
+ fa_id int NOT NULL PRIMARY KEY IDENTITY,
+ fa_name nvarchar(255) NOT NULL default '',
+ fa_archive_name nvarchar(255) default '',
+ fa_storage_group nvarchar(16),
+ fa_storage_key nvarchar(64) default '',
+ fa_deleted_user int,
+ fa_deleted_timestamp varchar(14) default '',
+ fa_deleted_reason nvarchar(max),
+ fa_size int default 0,
+ fa_width int default 0,
+ fa_height int default 0,
+ fa_metadata varbinary(max),
+ fa_bits int default 0,
+ fa_media_type varchar(16) default null,
+ fa_major_mime varchar(16) not null default 'unknown',
+ fa_minor_mime nvarchar(100) default 'unknown',
+ fa_description nvarchar(255),
+ fa_user int default 0 REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
+ fa_user_text nvarchar(255),
+ fa_timestamp varchar(14) default '',
+ fa_deleted tinyint NOT NULL default 0,
+ fa_sha1 nvarchar(32) NOT NULL default '',
+ CONSTRAINT fa_major_mime_ckc check (fa_major_mime in('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
+ CONSTRAINT fa_media_type_ckc check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
+);--
+
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);--
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);--
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);--
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);--
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1);--
+
+SET IDENTITY_INSERT /*_*/filearchive ON;--
+
+INSERT INTO /*_*/filearchive
+(
+ fa_id,
+ fa_name,
+ fa_archive_name,
+ fa_storage_group,
+ fa_storage_key,
+ fa_deleted_user,
+ fa_deleted_timestamp,
+ fa_deleted_reason,
+ fa_size,
+ fa_width,
+ fa_height,
+ fa_metadata,
+ fa_bits,
+ fa_media_type,
+ fa_major_mime,
+ fa_minor_mime,
+ fa_description,
+ fa_user,
+ fa_user_text,
+ fa_timestamp,
+ fa_deleted,
+ fa_sha1
+)
+SELECT
+ fa_id,
+ fa_name,
+ fa_archive_name,
+ fa_storage_group,
+ fa_storage_key,
+ fa_deleted_user,
+ fa_deleted_timestamp,
+ fa_deleted_reason,
+ fa_size,
+ fa_width,
+ fa_height,
+ CONVERT(varbinary(max), fa_metadata, 0),
+ fa_bits,
+ fa_media_type,
+ fa_major_mime,
+ fa_minor_mime,
+ fa_description,
+ fa_user,
+ fa_user_text,
+ fa_timestamp,
+ fa_deleted,
+ fa_sha1
+FROM @temp t;--
+
+SET IDENTITY_INSERT /*_*/filearchive OFF;
--- /dev/null
+ALTER TABLE /*_*/imagelinks
+ ADD il_from_namespace int NOT NULL default 0;
+
+CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_from_namespace,il_to,il_from);
\ No newline at end of file
--- /dev/null
+DECLARE @baseSQL nvarchar(max),
+ @SQL nvarchar(max),
+ @id sysname;--
+
+SET @baseSQL = 'ALTER TABLE /*_*/image DROP CONSTRAINT ';--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/image')
+ AND c.name = 'img_major_mime';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/image')
+ AND c.name = 'img_media_type';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+ALTER TABLE /*_*/image ADD CONSTRAINT img_major_mime_ckc check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart'));--
+ALTER TABLE /*_*/image ADD CONSTRAINT img_media_type_ckc check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
--- /dev/null
+-- MediaWiki looks for lines ending with semicolons and sends them as separate queries
+-- However here we *really* need this all to be sent as a single batch. As such, DO NOT
+-- remove the -- from the end of each statement.
+
+DECLARE @temp table (
+ img_name varbinary(255),
+ img_size int,
+ img_width int,
+ img_height int,
+ img_metadata varbinary(max),
+ img_bits int,
+ img_media_type varchar(16),
+ img_major_mime varchar(16),
+ img_minor_mime nvarchar(100),
+ img_description nvarchar(255),
+ img_user int,
+ img_user_text nvarchar(255),
+ img_timestamp nvarchar(14),
+ img_sha1 nvarchar(32)
+);--
+
+INSERT INTO @temp
+SELECT * FROM /*_*/image;--
+
+DROP TABLE /*_*/image;--
+
+CREATE TABLE /*_*/image (
+ img_name nvarchar(255) NOT NULL default '' PRIMARY KEY,
+ img_size int NOT NULL default 0,
+ img_width int NOT NULL default 0,
+ img_height int NOT NULL default 0,
+ img_metadata varbinary(max) NOT NULL,
+ img_bits int NOT NULL default 0,
+ img_media_type varchar(16) default null,
+ img_major_mime varchar(16) not null default 'unknown',
+ img_minor_mime nvarchar(100) NOT NULL default 'unknown',
+ img_description nvarchar(255) NOT NULL,
+ img_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
+ img_user_text nvarchar(255) NOT NULL,
+ img_timestamp nvarchar(14) NOT NULL default '',
+ img_sha1 nvarchar(32) NOT NULL default '',
+ CONSTRAINT img_major_mime_ckc check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
+ CONSTRAINT img_media_type_ckc check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
+);--
+
+CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);--
+CREATE INDEX /*i*/img_size ON /*_*/image (img_size);--
+CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);--
+CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);--
+CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);--
+
+INSERT INTO /*_*/image
+(
+ img_name,
+ img_size,
+ img_width,
+ img_height,
+ img_metadata,
+ img_bits,
+ img_media_type,
+ img_major_mime,
+ img_minor_mime,
+ img_description,
+ img_user,
+ img_user_text,
+ img_timestamp,
+ img_sha1
+)
+SELECT
+ img_name,
+ img_size,
+ img_width,
+ img_height,
+ img_metadata,
+ img_bits,
+ img_media_type,
+ img_major_mime,
+ img_minor_mime,
+ img_description,
+ img_user,
+ img_user_text,
+ img_timestamp,
+ img_sha1
+FROM @temp t;
--- /dev/null
+--
+-- Kill cl_collation index.
+-- @since 1.27
+--
+
+DROP INDEX /*i*/cl_collation ON /*_*/categorylinks;
+
--- /dev/null
+DECLARE @baseSQL nvarchar(max),
+ @SQL nvarchar(max),
+ @id sysname;--
+
+SET @baseSQL = 'ALTER TABLE /*_*/oldimage DROP CONSTRAINT ';--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/oldimage')
+ AND c.name = 'oi_major_mime';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/oldimage')
+ AND c.name = 'oi_media_type';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+ALTER TABLE /*_*/oldimage ADD CONSTRAINT oi_major_mime_ckc check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart'));--
+ALTER TABLE /*_*/oldimage ADD CONSTRAINT oi_media_type_ckc check (oi_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
--- /dev/null
+-- MediaWiki looks for lines ending with semicolons and sends them as separate queries
+-- However here we *really* need this all to be sent as a single batch. As such, DO NOT
+-- remove the -- from the end of each statement.
+
+DECLARE @temp table (
+ oi_name varbinary(255),
+ oi_archive_name varbinary(255),
+ oi_size int,
+ oi_width int,
+ oi_height int,
+ oi_bits int,
+ oi_description nvarchar(255),
+ oi_user int,
+ oi_user_text nvarchar(255),
+ oi_timestamp varchar(14),
+ oi_metadata nvarchar(max),
+ oi_media_type varchar(16),
+ oi_major_mime varchar(16),
+ oi_minor_mime nvarchar(100),
+ oi_deleted tinyint,
+ oi_sha1 nvarchar(32)
+);--
+
+INSERT INTO @temp
+SELECT * FROM /*_*/oldimage;--
+
+DROP TABLE /*_*/oldimage;--
+
+CREATE TABLE /*_*/oldimage (
+ oi_name nvarchar(255) NOT NULL default '',
+ oi_archive_name nvarchar(255) NOT NULL default '',
+ oi_size int NOT NULL default 0,
+ oi_width int NOT NULL default 0,
+ oi_height int NOT NULL default 0,
+ oi_bits int NOT NULL default 0,
+ oi_description nvarchar(255) NOT NULL,
+ oi_user int REFERENCES /*_*/mwuser(user_id),
+ oi_user_text nvarchar(255) NOT NULL,
+ oi_timestamp varchar(14) NOT NULL default '',
+ oi_metadata varbinary(max) NOT NULL,
+ oi_media_type varchar(16) default null,
+ oi_major_mime varchar(16) not null default 'unknown',
+ oi_minor_mime nvarchar(100) NOT NULL default 'unknown',
+ oi_deleted tinyint NOT NULL default 0,
+ oi_sha1 nvarchar(32) NOT NULL default '',
+ CONSTRAINT oi_major_mime_ckc check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
+ CONSTRAINT oi_media_type_ckc check (oi_media_type IN('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
+);--
+
+CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text, oi_timestamp);--
+CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name, oi_timestamp);--
+CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name, oi_archive_name);--
+CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);--
+
+INSERT INTO /*_*/oldimage
+(
+ oi_name,
+ oi_archive_name,
+ oi_size,
+ oi_width,
+ oi_height,
+ oi_bits,
+ oi_description,
+ oi_user,
+ oi_user_text,
+ oi_timestamp,
+ oi_metadata,
+ oi_media_type,
+ oi_major_mime,
+ oi_minor_mime,
+ oi_deleted,
+ oi_sha1
+)
+SELECT
+ oi_name,
+ oi_archive_name,
+ oi_size,
+ oi_width,
+ oi_height,
+ oi_bits,
+ oi_description,
+ oi_user,
+ oi_user_text,
+ oi_timestamp,
+ CONVERT(varbinary(max), oi_metadata, 0),
+ oi_media_type,
+ oi_major_mime,
+ oi_minor_mime,
+ oi_deleted,
+ oi_sha1
+FROM @temp t;
--- /dev/null
+ALTER TABLE /*_*/pagelinks
+ ADD pl_from_namespace int NOT NULL default 0;
+
+CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_from_namespace,pl_namespace,pl_title,pl_from);
--- /dev/null
+-- Add a 'sortkey' field to page_props so pages can be efficiently
+-- queried by the numeric value of a property.
+
+ALTER TABLE /*_*/page_props
+ ADD pp_sortkey float DEFAULT NULL;
+
+CREATE UNIQUE INDEX /*i*/pp_propname_sortkey_page
+ ON /*_*/page_props ( pp_propname, pp_sortkey, pp_page );
--- /dev/null
+ALTER TABLE /*_*/templatelinks
+ ADD tl_from_namespace int NOT NULL default 0;
+
+CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_from_namespace,tl_namespace,tl_title,tl_from);
--- /dev/null
+DECLARE @baseSQL nvarchar(max),
+ @SQL nvarchar(max),
+ @id sysname;--
+
+SET @baseSQL = 'ALTER TABLE /*_*/uploadstash DROP CONSTRAINT ';--
+
+SELECT @id = cc.name
+FROM sys.check_constraints cc
+JOIN sys.columns c
+ ON c.object_id = cc.parent_object_id
+ AND c.column_id = cc.parent_column_id
+WHERE
+ cc.parent_object_id = OBJECT_ID('/*_*/uploadstash')
+ AND c.name = 'us_media_type';--
+
+SET @SQL = @baseSQL + @id;--
+
+EXEC sp_executesql @SQL;--
+
+ALTER TABLE /*_*/uploadstash ADD CONSTRAINT us_media_type_ckc check (us_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
user_newpassword NVARCHAR(255) NOT NULL DEFAULT '',
user_newpass_time varchar(14) NULL DEFAULT NULL,
user_email NVARCHAR(255) NOT NULL DEFAULT '',
- user_options NVARCHAR(MAX) NOT NULL DEFAULT '',
user_touched varchar(14) NOT NULL DEFAULT '',
user_token NCHAR(32) NOT NULL DEFAULT '',
user_email_authenticated varchar(14) DEFAULT NULL,
CREATE UNIQUE CLUSTERED INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
+--
+-- This table contains a user's bot passwords: passwords that allow access to
+-- the account via the API with limited rights.
+--
+CREATE TABLE /*_*/bot_passwords (
+ bp_user int NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
+ bp_app_id nvarchar(32) NOT NULL,
+ bp_password nvarchar(255) NOT NULL,
+ bp_token nvarchar(255) NOT NULL,
+ bp_restrictions nvarchar(max) NOT NULL,
+ bp_grants nvarchar(max) NOT NULL,
+ PRIMARY KEY (bp_user, bp_app_id)
+);
+
--
-- Core of the wiki: each page has an entry here which identifies
--
CREATE TABLE /*_*/pagelinks (
pl_from INT NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+ pl_from_namespace int NOT NULL DEFAULT 0,
pl_namespace INT NOT NULL DEFAULT 0,
pl_title NVARCHAR(255) NOT NULL DEFAULT '',
);
CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
+CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_from_namespace,pl_namespace,pl_title,pl_from);
--
--
CREATE TABLE /*_*/templatelinks (
tl_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+ tl_from_namespace int NOT NULL default 0,
tl_namespace int NOT NULL default 0,
tl_title nvarchar(255) NOT NULL default ''
);
CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
+CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_from_namespace,tl_namespace,tl_title,tl_from);
--
CREATE TABLE /*_*/imagelinks (
-- Key to page_id of the page containing the image / media link.
il_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
+ il_from_namespace int NOT NULL default 0,
-- Filename of target image.
-- This is also the page_title of the file's description page;
CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
+CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_from_namespace,il_to,il_from);
--
-- Track category inclusions *used inline*
-- Used by the API (and some extensions)
CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
--- FIXME: Not used, delete this
-CREATE INDEX /*i*/cl_collation ON /*_*/categorylinks (cl_collation);
+-- Used when updating collation (e.g. updateCollation.php)
+CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from);
--
-- Track all existing categories. Something is a category if 1) it has an en-
CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from);
CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index);
+-- el_to index intentionally not added; we cannot index nvarchar(max) columns,
+-- but we also cannot restrict el_to to a smaller column size as the external
+-- link may be larger.
--
-- Track interlanguage links
-- Filename.
-- This is also the title of the associated description page,
-- which will be in namespace 6 (NS_FILE).
- img_name varbinary(255) NOT NULL default 0x PRIMARY KEY,
+ img_name nvarchar(255) NOT NULL default '' PRIMARY KEY,
-- File size in bytes.
img_size int NOT NULL default 0,
--
CREATE TABLE /*_*/oldimage (
-- Base filename: key to image.img_name
- oi_name varbinary(255) NOT NULL default 0x REFERENCES /*_*/image(img_name) ON DELETE CASCADE ON UPDATE CASCADE,
+ -- Not a FK because deleting images removes them from image
+ oi_name nvarchar(255) NOT NULL default '',
-- Filename of the archived file.
-- This is generally a timestamp and '!' prepended to the base name.
- oi_archive_name varbinary(255) NOT NULL default 0x,
+ oi_archive_name nvarchar(255) NOT NULL default '',
-- Other fields as in image...
oi_size int NOT NULL default 0,
oi_user_text nvarchar(255) NOT NULL,
oi_timestamp varchar(14) NOT NULL default '',
- oi_metadata nvarchar(max) NOT NULL,
+ oi_metadata varbinary(max) NOT NULL,
oi_media_type varchar(16) default null,
oi_major_mime varchar(16) not null default 'unknown',
oi_minor_mime nvarchar(100) NOT NULL default 'unknown',
CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
--- oi_archive_name truncated to 14 to avoid key length overflow
CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name);
CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);
fa_size int default 0,
fa_width int default 0,
fa_height int default 0,
- fa_metadata nvarchar(max),
+ fa_metadata varbinary(max),
fa_bits int default 0,
fa_media_type varchar(16) default null,
fa_major_mime varchar(16) not null default 'unknown',
rc_id int NOT NULL PRIMARY KEY IDENTITY,
rc_timestamp varchar(14) not null default '',
- -- This is no longer used
- -- Field kept in database for downgrades
- -- @todo: add drop patch with 1.24
- rc_cur_time varchar(14) NOT NULL default '',
-
-- As in revision
rc_user int NOT NULL default 0 REFERENCES /*_*/mwuser(user_id),
rc_user_text nvarchar(255) NOT NULL,
CREATE TABLE /*_*/page_props (
pp_page int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
pp_propname nvarchar(60) NOT NULL,
- pp_value nvarchar(max) NOT NULL
+ pp_value nvarchar(max) NOT NULL,
+ pp_sortkey float DEFAULT NULL
);
CREATE UNIQUE INDEX /*i*/pp_page_propname ON /*_*/page_props (pp_page,pp_propname);
CREATE UNIQUE INDEX /*i*/pp_propname_page ON /*_*/page_props (pp_propname,pp_page);
+CREATE UNIQUE INDEX /*i*/pp_propname_sortkey_page ON /*_*/page_props (pp_propname,pp_sortkey,pp_page);
-- A table to log updates, one text key row per update.
* @ingroup Maintenance
*/
+use MediaWiki\Linker\LinkTarget;
+
require_once __DIR__ . '/Maintenance.php';
/**
Update OOjs UI to v$OOJSUI_VERSION
Release notes:
- https://git.wikimedia.org/blob/oojs%2Fui.git/v$OOJSUI_VERSION/History.md
+ https://phabricator.wikimedia.org/diffusion/GOJU/browse/master/History.md;v$OOJS_VERSION
END
)
Update OOjs to v$OOJS_VERSION
Release notes:
- https://git.wikimedia.org/blob/oojs%2Fcore.git/v$OOJS_VERSION/History.md
+ https://phabricator.wikimedia.org/diffusion/GOJS/browse/master/History.md;v$OOJS_VERSION
END
)
);
$this->addOption( 'force', 'Run on all rows, even if the collation is ' .
- 'supposed to be up-to-date.' );
+ 'supposed to be up-to-date.', false, false, 'f' );
$this->addOption( 'previous-collation', 'Set the previous value of ' .
'$wgCategoryCollation here to speed up this script, especially if your ' .
'categorylinks table is large. This will only update rows with that ' .
'upload-form-label-usage-filename',
'api-error-unknownerror',
'api-error-unknown-warning',
+ 'api-error-autoblocked',
+ 'api-error-blocked',
'api-error-badaccess-groups',
'api-error-badtoken',
'api-error-copyuploaddisabled',
'thumbnail.html' => 'resources/src/mediawiki.special/templates/thumbnail.html',
],
'scripts' => 'resources/src/mediawiki.special/mediawiki.special.upload.js',
+ 'styles' => 'resources/src/mediawiki.special/mediawiki.special.upload.css',
'messages' => [
'widthheight',
'size-bytes',
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:49Z
+ * Date: 2016-04-26T21:34:01Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-element-hidden {
display: none !important;
.oo-ui-optionWidget.oo-ui-widget-enabled {
cursor: pointer;
}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
display: block;
white-space: nowrap;
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-element-hidden {
display: none !important;
.oo-ui-optionWidget.oo-ui-widget-enabled {
cursor: pointer;
}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
.oo-ui-optionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
display: block;
white-space: nowrap;
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:49Z
+ * Date: 2016-04-26T21:34:01Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:49Z
+ * Date: 2016-04-26T21:34:01Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-21T17:34:15Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-popupTool .oo-ui-popupWidget-popup,
.oo-ui-popupTool .oo-ui-popupWidget-anchor {
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-21T17:34:15Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-popupTool .oo-ui-popupWidget-popup,
.oo-ui-popupTool .oo-ui-popupWidget-anchor {
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:49Z
+ * Date: 2016-04-26T21:34:01Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-draggableElement-handle,
.oo-ui-draggableElement-handle.oo-ui-widget {
right: 0;
text-overflow: ellipsis;
}
-.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileName {
- float: left;
-}
-.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-fileType {
float: right;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
position: absolute;
}
-.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-clearButton {
z-index: 2;
}
.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label {
position: relative;
}
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileName,
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType {
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-fileName {
+ display: block;
+ padding-right: 2.375em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-fileType {
display: block;
float: none;
}
font-size: 1.1em;
padding: 0.75em;
}
+.oo-ui-outlineOptionWidget .oo-ui-iconElement-icon {
+ font-size: 90.90909%;
+}
.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
padding-right: 1.5em;
}
.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
font-weight: bold;
}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder {
- font-style: italic;
-}
.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
opacity: 0.5;
}
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-draggableElement-handle,
.oo-ui-draggableElement-handle.oo-ui-widget {
right: 0;
text-overflow: ellipsis;
}
-.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileName {
- float: left;
-}
-.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType {
+.oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-fileType {
float: right;
}
.oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
position: absolute;
}
-.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-clearButton {
+.oo-ui-selectFileWidget .oo-ui-selectFileWidget-clearButton {
z-index: 2;
}
.oo-ui-selectFileWidget-dropTarget {
.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label {
position: relative;
}
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileName,
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType {
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-fileName {
+ display: block;
+ padding-right: 2.375em;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-fileType {
display: block;
float: none;
}
margin-left: 0.5em;
}
.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ display: block;
line-height: 2.3em;
margin: 0;
overflow: hidden;
white-space: nowrap;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
text-overflow: ellipsis;
- left: 0.5em;
- right: 0.5em;
+ left: 0;
+ right: 0;
+ padding-left: 0.5em;
}
.oo-ui-selectFileWidget-info > .oo-ui-selectFileWidget-label > .oo-ui-selectFileWidget-fileType {
color: #888888;
height: 2.3em;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
+ background-color: #f3f3f3;
color: #cccccc;
text-shadow: 0 1px 1px #ffffff;
border-color: #dddddd;
- background-color: #f3f3f3;
+ cursor: default;
}
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
.oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
right: 4.4625em;
+ padding-left: 0;
}
.oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-clearButton {
right: 2.0875em;
.oo-ui-selectFileWidget-empty.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label,
.oo-ui-selectFileWidget-notsupported.oo-ui-indicatorElement .oo-ui-selectFileWidget-info .oo-ui-selectFileWidget-label {
right: 2em;
+ padding-left: 0;
}
.oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop .oo-ui-selectFileWidget-dropTarget {
background-color: #ebf2ff;
font-size: 1.1em;
padding: 0.75em;
}
+.oo-ui-outlineOptionWidget .oo-ui-iconElement-icon {
+ font-size: 90.90909%;
+}
.oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
padding-right: 1.5em;
}
.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-important {
font-weight: bold;
}
-.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-placeholder {
- font-style: italic;
-}
.oo-ui-outlineOptionWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
opacity: 0.5;
}
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:49Z
+ * Date: 2016-04-26T21:34:01Z
*/
( function ( OO ) {
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-actionWidget.oo-ui-pendingElement-pending {
background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:53Z
+ * Date: 2016-04-26T21:34:05Z
*/
.oo-ui-window {
background: transparent;
/*!
- * OOjs UI v0.16.6
+ * OOjs UI v0.17.0
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2016 OOjs UI Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2016-04-19T21:57:49Z
+ * Date: 2016-04-26T21:34:01Z
*/
( function ( OO ) {
"prefix": "oo-ui-icon",
"intro": "@import '../../../../src/styles/common';",
"images": {
+ "fullScreen": { "file": "images/icons/fullScreen.svg" },
"image": { "file": "images/icons/image.svg" },
"imageGallery": { "file": {
"ltr": "images/icons/imageGallery-ltr.svg",
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
+ <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
+ <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
+ <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
+</svg>
}
},
"images": {
+ "fullScreen": { "file": "images/icons/fullScreen.svg" },
"image": { "file": {
"ltr": "images/icons/image-ltr.svg",
"rtl": "images/icons/image-rtl.svg"
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><style>* { fill: #ffffff }</style>
+ <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
+ <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
+ <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
+ <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24">
+ <path id="arrow" d="M6 6v4l1.28-1.28 2 2 1.423-1.44-2-2L10 6z"/>
+ <use transform="rotate(90 12 12)" xlink:href="#arrow"/>
+ <use transform="rotate(180 12 12)" xlink:href="#arrow"/>
+ <use transform="rotate(-90 12 12)" xlink:href="#arrow"/>
+</svg>
*/
function togglingHandler( $toggle, $collapsible, e, options ) {
var wasCollapsed, $textContainer, collapseText, expandText;
-
- if ( options === undefined ) {
- options = {};
- }
+ options = options || {};
if ( e ) {
if (
* @chainable
*/
$.fn.makeCollapsible = function ( options ) {
- if ( options === undefined ) {
- options = {};
- }
+ options = options || {};
this.each( function () {
var $collapsible, collapseText, expandText, $caption, $toggle, actionHandler, buildDefaultToggleLink,
/**
- * MediaWiki Print style sheet for CSS2-capable browsers.
- * Copyright Gabriel Wicke, http://www.aulinx.de/
+ * MediaWiki print style sheet
+ * Largely based on work by Gabriel Wicke
*
- * Derived from the plone (http://plone.org/) styles
+ * Originally derived from Plone (https://plone.org/) styles
* Copyright Alexander Limi
*/
-/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-
/**
* Hide all the elements irrelevant for printing
*/
div#column-one,
.mw-editsection,
.mw-editsection-like,
-div#f-poweredbyico,
-div#f-copyrightico,
-li#about,
-li#disclaimer,
-li#mobileview,
-li#privacy,
#footer-places,
.mw-hidden-catlinks,
.usermessage,
.patrollink,
.ns-0 .mw-redirectedfrom,
+div.magnify,
#mw-navigation,
-#siteNotice {
+#siteNotice,
+/* Deprecated, changed in core */
+div#f-poweredbyico,
+div#f-copyrightico,
+li#about,
+li#disclaimer,
+li#mobileview,
+li#privacy {
display: none;
}
-/**
- * Pagination
- */
-.wikitable, .thumb, img {
- page-break-inside: avoid;
-}
-
-h2, h3, h4, h5, h6 {
- page-break-after: avoid;
-}
-
-p {
- widows: 3;
- orphans: 3;
-}
-
/**
* Generic HTML elements
*/
body {
- background: white;
- color: black;
+ background: #fff;
+ color: #000;
margin: 0;
padding: 0;
}
-ul {
- list-style-type: square;
-}
-
-h1, h2, h3, h4, h5, h6 {
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
font-weight: bold;
+ /* Pagination */
+ page-break-after: avoid;
}
dt {
font-weight: bold;
}
+ul {
+ list-style-type: square;
+}
+
p {
margin: 1em 0;
line-height: 1.2em;
+ /* Pagination */
+ orphans: 3;
+ widows: 3;
}
-pre, .mw-code {
- border: 1pt dashed black;
- white-space: pre;
+pre,
+.mw-code {
+ background: #fff;
+ color: #000;
+ border: 1pt dashed #000;
+ padding: 1em 0;
font-size: 8pt;
+ white-space: pre;
+ word-wrap: break-word;
overflow: auto;
- padding: 1em 0;
- background: white;
- color: black;
+}
+
+img,
+.wikitable,
+.thumb {
+ /* Pagination */
+ page-break-inside: avoid;
+}
+
+img {
+ border: 0;
+ vertical-align: middle;
}
/**
}
.mw-body {
- background: white;
- border: none !important;
+ background: #fff;
+ color: #000;
+ border: 0 !important;
padding: 0 !important;
margin: 0 !important;
direction: ltr;
- color: black;
}
#column-content {
}
#toc {
- border: 1px solid #aaaaaa;
background-color: #f9f9f9;
+ border: 1pt solid #aaa;
padding: 5px;
display: table;
}
}
#footer {
- background: white;
- color: black;
+ background: #fff;
+ color: #000;
margin-top: 1em;
- border-top: 1px solid #AAA;
+ border-top: 1pt solid #aaa;
direction: ltr;
}
-img {
- border: none;
- vertical-align: middle;
-}
-
/**
* Links
*/
/* Expand URLs for printing */
.mw-body a.external.text:after,
.mw-body a.external.autonumber:after {
- content: " (" attr(href) ")";
+ content: " (" attr( href ) ")";
+ word-wrap: break-word;
}
/* Expand protocol-relative URLs for printing */
.mw-body a.external.text[href^='//']:after,
.mw-body a.external.autonumber[href^='//']:after {
- content: " (https:" attr(href) ")";
+ content: " (https:" attr( href ) ")";
}
/* MSIE/Win doesn't understand 'inherit' */
a.external,
a.new,
a.stub {
- color: black !important;
+ color: #000 !important;
text-decoration: none !important;
}
* Thumbnails
*/
div.thumb {
- border: none;
+ background-color: transparent;
+ border: 0;
width: auto;
margin-top: 0.5em;
margin-bottom: 0.8em;
- background-color: transparent;
}
div.thumbinner {
- border: 1px solid #cccccc;
+ background-color: #fff;
+ border: 1pt solid #ccc;
padding: 3px !important;
- background-color: White;
font-size: 94%;
text-align: center;
}
html .thumbimage {
- border: 1px solid #cccccc;
+ border: 1pt solid #ccc;
}
html .thumbcaption {
word-wrap: break-word;
}
-div.magnify {
- display: none;
-}
-
/* @noflip */
div.tright {
float: right;
}
img.thumbborder {
- border: 1px solid #dddddd;
+ border: 1pt solid #ddd;
}
/**
*/
table.wikitable,
table.mw_metadata {
+ background: #fff;
margin: 1em 0;
- border: 1px #aaa solid;
- background: white;
+ border: 1pt solid #aaa;
border-collapse: collapse;
}
-table.wikitable > tr > th, table.wikitable > tr > td,
-table.wikitable > * > tr > th, table.wikitable > * > tr > td,
-.mw_metadata th, .mw_metadata td {
- border: 1px #aaa solid;
+table.wikitable > tr > th,
+table.wikitable > tr > td,
+table.wikitable > * > tr > th,
+table.wikitable > * > tr > td,
+.mw_metadata th,
+.mw_metadata td {
+ border: 1pt solid #aaa;
padding: 0.2em;
}
table.wikitable > tr > th,
table.wikitable > * > tr > th,
.mw_metadata th {
- text-align: center;
- background: white;
+ background: #fff;
font-weight: bold;
+ text-align: center;
}
table.wikitable > caption,
table.listing,
table.listing td {
- border: 1pt solid black;
+ border: 1pt solid #000;
border-collapse: collapse;
}
*/
.catlinks ul {
display: inline;
- margin: 0;
padding: 0;
- list-style: none;
- list-style-type: none;
- list-style-image: none;
+ list-style: none none;
}
.catlinks li {
display: inline-block;
line-height: 1.15em;
padding: 0 .4em;
- border-left: 1px solid #AAA;
+ border-left: 1pt solid #aaa;
margin: 0.1em 0;
}
.catlinks li:first-child {
padding-left: .2em;
- border-left: none;
+ border-left: 0;
}
.printfooter {
- padding: 1em 0 1em 0;
+ padding: 1em 0;
}
.mw-plusminus-neg,
.mw-plusminus-null {
unicode-bidi: -moz-isolate;
- unicode-bidi: -webkit-isolate;
unicode-bidi: isolate;
}
/* Comment portions of RC entries */
span.comment {
font-style: italic;
+ unicode-bidi: -moz-isolate;
+ unicode-bidi: isolate;
}
/**
line-height: 1;
vertical-align: super;
unicode-bidi: -moz-isolate;
- unicode-bidi: -webkit-isolate;
unicode-bidi: isolate;
}
--- /dev/null
+/*!
+ * Styling for Special:Upload
+ */
+.mw-destfile-warning {
+ border: 1px solid #fde29b;
+ padding: .5em 1em;
+ margin-bottom: 1em;
+ color: #705000;
+ background-color: #fdf1d1;
+}
} else if ( page.invalidreason ) {
resultOut = mw.html.escape( page.invalidreason );
}
- $spinnerDestCheck.remove();
uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
+ } ).always( function () {
+ $spinnerDestCheck.remove();
} );
},
},
setWarning: function ( warning ) {
- var $warning = $( $.parseHTML( warning ) );
+ var $warningBox = $( '#wpDestFile-warning' ),
+ $warning = $( $.parseHTML( warning ) );
mw.hook( 'wikipage.content' ).fire( $warning );
- $( '#wpDestFile-warning' ).empty().append( $warning );
+ $warningBox.empty().append( $warning );
// Set a value in the form indicating that the warning is acknowledged and
// doesn't need to be redisplayed post-upload
if ( !warning ) {
$( '#wpDestFileWarningAck' ).val( '' );
+ $warningBox.removeAttr( 'class' );
} else {
$( '#wpDestFileWarningAck' ).val( '1' );
+ $warningBox.attr( 'class', 'mw-destfile-warning' );
}
}
prop: 'text',
pst: true
} ).done( function ( result ) {
- $spinnerLicense.remove();
uploadLicense.processResult( result, license );
+ } ).always( function () {
+ $spinnerLicense.remove();
} );
},
disambiguation: OO.getProp( suggestionPage, 'pageprops', 'disambiguation' ) !== undefined,
imageUrl: OO.getProp( suggestionPage, 'thumbnail', 'source' ),
description: OO.getProp( suggestionPage, 'terms', 'description' ),
- // sort index
+ // Sort index
index: suggestionPage.index
};
missing: false,
redirect: true,
disambiguation: false,
- description: mw.msg( 'mw-widgets-titleinput-description-redirect', suggestionPage.title )
+ description: mw.msg( 'mw-widgets-titleinput-description-redirect', suggestionPage.title ),
+ // Sort index, just below its target
+ index: suggestionPage.index + 0.5
};
titles.push( redirects[ i ] );
}
url = ( ajaxOptions && ajaxOptions.url ) || this.defaults.ajax.url;
origin = ( parameters && parameters.origin ) || this.defaults.parameters.origin;
url += ( url.indexOf( '?' ) !== -1 ? '&' : '?' ) +
- 'origin=' + encodeURIComponent( origin );
+ // Depending on server configuration, MediaWiki may forbid periods in URLs, due to an IE 6
+ // XSS bug. So let's escape them here. See WebRequest::checkUrlExtension() and T30235.
+ 'origin=' + encodeURIComponent( origin ).replace( /\./g, '%2E' );
newAjaxOptions = $.extend( {}, ajaxOptions, { url: url } );
} else {
newAjaxOptions = ajaxOptions;
// Prevent jQuery from overriding the Content-Type header
ajaxOptions.contentType = false;
} else {
- // Some deployed MediaWiki >= 1.17 forbid periods in URLs, due to an IE XSS bug
- // So let's escape them here. See bug #28235
// This works because jQuery accepts data as a query string or as an Object
- ajaxOptions.data = $.param( parameters ).replace( /\./g, '%2E' );
-
+ ajaxOptions.data = $.param( parameters );
// If we extracted a token parameter, add it back in.
if ( token ) {
ajaxOptions.data += '&token=' + encodeURIComponent( token );
}
+ // Depending on server configuration, MediaWiki may forbid periods in URLs, due to an IE 6
+ // XSS bug. So let's escape them here. See WebRequest::checkUrlExtension() and T30235.
+ ajaxOptions.data = ajaxOptions.data.replace( /\./g, '%2E' );
+
if ( ajaxOptions.contentType === 'multipart/form-data' ) {
// We were asked to emulate but can't, so drop the Content-Type header, otherwise
// it'll be wrong and the server will fail to decode the POST body
'fileexists-shared-forbidden',
'invalidtitle',
'notloggedin',
+ 'autoblocked',
+ 'blocked',
// Stash-specific errors - expanded
'stashfailed',
margin-bottom: 0.1em;
}
+.apihelp-header.apihelp-module-name {
+ /*
+ * This element is explicitly set to dir="ltr" in HTML.
+ * Set explicit alignment so that CSSJanus will flip it to "right";
+ * otherwise the alignment will be automatically set to "left" according
+ * to the element's direction, and this will have an inconsistent look.
+ */
+ text-align: left;
+}
+
div.apihelp-linktrail {
font-size: smaller;
}
--- /dev/null
+BROWSER:
+ - firefox
+
+MEDIAWIKI_ENVIRONMENT:
+ - beta
+
+PLATFORM:
+ - Linux
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
Given(/^I go to Create account page at (.+)$/) do |path|
visit(CreateAccountPage, using_params: { page_title: path })
end
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
Given(/^I am at file that does not exist$/) do
visit(FileDoesNotExistPage, using_params: { page_name: @random_string })
end
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
Given(/^I am at Log in page$/) do
visit LoginPage
end
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
When(/^I click Appearance$/) do
visit(PreferencesPage).appearance_link_element.when_present.click
end
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
When(/^I click Editing$/) do
visit(PreferencesPage).editing_link_element.when_present.click
end
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
When(/^I click User profile$/) do
visit(PreferencesPage).user_profile_link_element.when_present.click
end
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
class CreateAccountPage
include PageObject
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
class FileDoesNotExistPage
include PageObject
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
class PreferencesAppearancePage
include PageObject
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
class PreferencesEditingPage
include PageObject
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
class PreferencesPage
include PageObject
-#
-# This file is subject to the license terms in the LICENSE file found in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/LICENSE. No part of
-# qa-browsertests, including this file, may be copied, modified, propagated, or
-# distributed except according to the terms contained in the LICENSE file.
-#
-# Copyright 2012-2014 by the Mediawiki developers. See the CREDITS file in the
-# qa-browsertests top-level directory and at
-# https://git.wikimedia.org/blob/qa%2Fbrowsertests/HEAD/CREDITS
-#
class PreferencesUserProfilePage
include PageObject
'SiteStore' => [ 'getSiteStore', SiteStore::class ],
'SiteLookup' => [ 'getSiteLookup', SiteLookup::class ],
'StatsdDataFactory' => [ 'getStatsdDataFactory', StatsdDataFactory::class ],
+ 'EventRelayerGroup' => [ 'getEventRelayerGroup', EventRelayerGroup::class ],
+ 'SearchEngine' => [ 'newSearchEngine', SearchEngine::class ],
+ 'SearchEngineFactory' => [ 'getSearchEngineFactory', SearchEngineFactory::class ],
+ 'SearchEngineConfig' => [ 'getSearchEngineConfig', SearchEngineConfig::class ],
+ 'SkinFactory' => [ 'getSkinFactory', SkinFactory::class ],
];
}
'SiteStore' => [ 'SiteStore', SiteStore::class ],
'SiteLookup' => [ 'SiteLookup', SiteLookup::class ],
'StatsdDataFactory' => [ 'StatsdDataFactory', StatsdDataFactory::class ],
+ 'EventRelayerGroup' => [ 'EventRelayerGroup', EventRelayerGroup::class ],
+ 'SearchEngineFactory' => [ 'SearchEngineFactory', SearchEngineFactory::class ],
+ 'SearchEngineConfig' => [ 'SearchEngineConfig', SearchEngineConfig::class ],
+ 'SkinFactory' => [ 'SkinFactory', SkinFactory::class ],
];
}
/**
* @dataProvider provideIsValidMerge
* @covers MergeHistory::isValidMerge
- * @param $source string Source page
- * @param $dest string Destination page
- * @param $timestamp string|bool Timestamp up to which revisions are merged (or false for all)
- * @param $error string|bool Expected error for test (or true for no error)
+ * @param string $source Source page
+ * @param string $dest Destination page
+ * @param string|bool $timestamp Timestamp up to which revisions are merged (or false for all)
+ * @param string|bool $error Expected error for test (or true for no error)
*/
public function testIsValidMerge( $source, $dest, $timestamp, $error ) {
$this->setMwGlobals( 'wgContentHandlerUseDB', false );
$msg = unserialize( serialize( $msg ) );
$this->assertEquals( 'Hauptseite', $msg->plain() );
}
+
+ /**
+ * @covers Message::newFromSpecifier
+ * @dataProvider provideNewFromSpecifier
+ */
+ public function testNewFromSpecifier( $value, $expectedText ) {
+ $message = Message::newFromSpecifier( $value );
+ $this->assertInstanceOf( Message::class, $message );
+ $this->assertSame( $expectedText, $message->text() );
+ }
+
+ public function provideNewFromSpecifier() {
+ $messageSpecifier = $this->getMockForAbstractClass( MessageSpecifier::class );
+ $messageSpecifier->expects( $this->any() )->method( 'getKey' )->willReturn( 'mainpage' );
+ $messageSpecifier->expects( $this->any() )->method( 'getParams' )->willReturn( [] );
+
+ return [
+ 'string' => [ 'mainpage', 'Main Page' ],
+ 'array' => [ [ 'youhavenewmessages', 'foo', 'bar' ], 'You have foo (bar).' ],
+ 'Message' => [ new Message( 'youhavenewmessages', [ 'foo', 'bar' ] ), 'You have foo (bar).' ],
+ 'RawMessage' => [ new RawMessage( 'foo ($1)', [ 'bar' ] ), 'foo (bar)' ],
+ 'MessageSpecifier' => [ $messageSpecifier, 'Main Page' ],
+ ];
+ }
}
+
* @group Database
*/
class PrefixSearchTest extends MediaWikiLangTestCase {
+ private $originalHandlers;
public function addDBDataOnce() {
if ( !$this->isWikitextNS( NS_MAIN ) ) {
}
// Avoid special pages from extensions interferring with the tests
- $this->setMwGlobals( 'wgSpecialPages', [] );
+ $this->setMwGlobals( [
+ 'wgSpecialPages' => [],
+ 'wgHooks' => [],
+ ] );
+
+ $this->originalHandlers = TestingAccessWrapper::newFromClass( 'Hooks' )->handlers;
+ TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = [];
+
+ SpecialPageFactory::resetList();
+ }
+
+ public function tearDown() {
+ parent::tearDown();
+
+ TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = $this->originalHandlers;
+
+ SpecialPageFactory::resetList();
}
protected function searchProvision( array $results = null ) {
<?php
+use MediaWiki\Linker\LinkTarget;
/**
* @author Addshore
return $title;
}
+ private function verifyCallbackJob(
+ $callback,
+ LinkTarget $expectedTitle,
+ $expectedUserId,
+ callable $notificationTimestampCondition
+ ) {
+ $this->assertInternalType( 'callable', $callback );
+
+ $callbackReflector = new ReflectionFunction( $callback );
+ $vars = $callbackReflector->getStaticVariables();
+ $this->assertArrayHasKey( 'job', $vars );
+ $this->assertInstanceOf( ActivityUpdateJob::class, $vars['job'] );
+
+ /** @var ActivityUpdateJob $job */
+ $job = $vars['job'];
+ $this->assertEquals( $expectedTitle->getDBkey(), $job->getTitle()->getDBkey() );
+ $this->assertEquals( $expectedTitle->getNamespace(), $job->getTitle()->getNamespace() );
+
+ $jobParams = $job->getParams();
+ $this->assertArrayHasKey( 'type', $jobParams );
+ $this->assertEquals( 'updateWatchlistNotification', $jobParams['type'] );
+ $this->assertArrayHasKey( 'userid', $jobParams );
+ $this->assertEquals( $expectedUserId, $jobParams['userid'] );
+ $this->assertArrayHasKey( 'notifTime', $jobParams );
+ $this->assertTrue( $notificationTimestampCondition( $jobParams['notifTime'] ) );
+ }
+
public function testResetNotificationTimestamp_oldidSpecifiedLatestRevisionForced() {
$user = $this->getMockNonAnonUserWithId( 1 );
$oldid = 22;
$mockCache
);
- // Note: This does not actually assert the job is correct
$callableCallCounter = 0;
$scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
- function( $callable ) use ( &$callableCallCounter ) {
+ function( $callable ) use ( &$callableCallCounter, $title, $user ) {
$callableCallCounter++;
- $this->assertInternalType( 'callable', $callable );
+ $this->verifyCallbackJob(
+ $callable,
+ $title,
+ $user->getId(),
+ function( $time ) {
+ return $time === null;
+ }
+ );
}
);
$mockCache
);
- // Note: This does not actually assert the job is correct
$addUpdateCallCounter = 0;
$scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
- function( $callable ) use ( &$addUpdateCallCounter ) {
+ function( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
$addUpdateCallCounter++;
- $this->assertInternalType( 'callable', $callable );
+ $this->verifyCallbackJob(
+ $callable,
+ $title,
+ $user->getId(),
+ function( $time ) {
+ return $time !== null && $time > '20151212010101';
+ }
+ );
}
);
ScopedCallback::consume( $scopedOverrideRevision );
}
+ public function testResetNotificationTimestamp_notWatchedPageForced() {
+ $user = $this->getMockNonAnonUserWithId( 1 );
+ $oldid = 22;
+ $title = $this->getMockTitle( 'SomeDbKey' );
+ $title->expects( $this->once() )
+ ->method( 'getNextRevisionID' )
+ ->with( $oldid )
+ ->will( $this->returnValue( 33 ) );
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue( false ) );
+
+ $mockCache = $this->getMockCache();
+ $mockDb->expects( $this->never() )
+ ->method( 'get' );
+ $mockDb->expects( $this->never() )
+ ->method( 'set' );
+ $mockDb->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = $this->newWatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $callableCallCounter = 0;
+ $scopedOverride = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+ function( $callable ) use ( &$callableCallCounter, $title, $user ) {
+ $callableCallCounter++;
+ $this->verifyCallbackJob(
+ $callable,
+ $title,
+ $user->getId(),
+ function( $time ) {
+ return $time === null;
+ }
+ );
+ }
+ );
+
+ $this->assertTrue(
+ $store->resetNotificationTimestamp(
+ $user,
+ $title,
+ 'force',
+ $oldid
+ )
+ );
+ $this->assertEquals( 1, $callableCallCounter );
+
+ ScopedCallback::consume( $scopedOverride );
+ }
+
+ public function testResetNotificationTimestamp_futureNotificationTimestampForced() {
+ $user = $this->getMockNonAnonUserWithId( 1 );
+ $oldid = 22;
+ $title = $this->getMockTitle( 'SomeDbKey' );
+ $title->expects( $this->once() )
+ ->method( 'getNextRevisionID' )
+ ->with( $oldid )
+ ->will( $this->returnValue( 33 ) );
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue(
+ $this->getFakeRow( [ 'wl_notificationtimestamp' => '30151212010101' ] )
+ ) );
+
+ $mockCache = $this->getMockCache();
+ $mockDb->expects( $this->never() )
+ ->method( 'get' );
+ $mockDb->expects( $this->never() )
+ ->method( 'set' );
+ $mockDb->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = $this->newWatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $addUpdateCallCounter = 0;
+ $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+ function( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
+ $addUpdateCallCounter++;
+ $this->verifyCallbackJob(
+ $callable,
+ $title,
+ $user->getId(),
+ function( $time ) {
+ return $time === '30151212010101';
+ }
+ );
+ }
+ );
+
+ $getTimestampCallCounter = 0;
+ $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
+ function( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
+ $getTimestampCallCounter++;
+ $this->assertEquals( $title, $titleParam );
+ $this->assertEquals( $oldid, $oldidParam );
+ }
+ );
+
+ $this->assertTrue(
+ $store->resetNotificationTimestamp(
+ $user,
+ $title,
+ 'force',
+ $oldid
+ )
+ );
+ $this->assertEquals( 1, $addUpdateCallCounter );
+ $this->assertEquals( 1, $getTimestampCallCounter );
+
+ ScopedCallback::consume( $scopedOverrideDeferred );
+ ScopedCallback::consume( $scopedOverrideRevision );
+ }
+
+ public function testResetNotificationTimestamp_futureNotificationTimestampNotForced() {
+ $user = $this->getMockNonAnonUserWithId( 1 );
+ $oldid = 22;
+ $title = $this->getMockTitle( 'SomeDbKey' );
+ $title->expects( $this->once() )
+ ->method( 'getNextRevisionID' )
+ ->with( $oldid )
+ ->will( $this->returnValue( 33 ) );
+
+ $mockDb = $this->getMockDb();
+ $mockDb->expects( $this->once() )
+ ->method( 'selectRow' )
+ ->with(
+ 'watchlist',
+ 'wl_notificationtimestamp',
+ [
+ 'wl_user' => 1,
+ 'wl_namespace' => 0,
+ 'wl_title' => 'SomeDbKey',
+ ]
+ )
+ ->will( $this->returnValue(
+ $this->getFakeRow( [ 'wl_notificationtimestamp' => '30151212010101' ] )
+ ) );
+
+ $mockCache = $this->getMockCache();
+ $mockDb->expects( $this->never() )
+ ->method( 'get' );
+ $mockDb->expects( $this->never() )
+ ->method( 'set' );
+ $mockDb->expects( $this->never() )
+ ->method( 'delete' );
+
+ $store = $this->newWatchedItemStore(
+ $this->getMockLoadBalancer( $mockDb ),
+ $mockCache
+ );
+
+ $addUpdateCallCounter = 0;
+ $scopedOverrideDeferred = $store->overrideDeferredUpdatesAddCallableUpdateCallback(
+ function( $callable ) use ( &$addUpdateCallCounter, $title, $user ) {
+ $addUpdateCallCounter++;
+ $this->verifyCallbackJob(
+ $callable,
+ $title,
+ $user->getId(),
+ function( $time ) {
+ return $time === false;
+ }
+ );
+ }
+ );
+
+ $getTimestampCallCounter = 0;
+ $scopedOverrideRevision = $store->overrideRevisionGetTimestampFromIdCallback(
+ function( $titleParam, $oldidParam ) use ( &$getTimestampCallCounter, $title, $oldid ) {
+ $getTimestampCallCounter++;
+ $this->assertEquals( $title, $titleParam );
+ $this->assertEquals( $oldid, $oldidParam );
+ }
+ );
+
+ $this->assertTrue(
+ $store->resetNotificationTimestamp(
+ $user,
+ $title,
+ '',
+ $oldid
+ )
+ );
+ $this->assertEquals( 1, $addUpdateCallCounter );
+ $this->assertEquals( 1, $getTimestampCallCounter );
+
+ ScopedCallback::consume( $scopedOverrideDeferred );
+ ScopedCallback::consume( $scopedOverrideRevision );
+ }
+
public function testUpdateNotificationTimestamp_watchersExist() {
$mockDb = $this->getMockDb();
$mockDb->expects( $this->once() )
<?php
+use MediaWiki\Linker\LinkTarget;
/**
* @author Addshore
*/
class SearchUpdateTest extends MediaWikiTestCase {
+ /**
+ * @var SearchUpdate
+ */
+ private $su;
+
protected function setUp() {
parent::setUp();
$this->setMwGlobals( 'wgSearchType', 'MockSearch' );
+ $this->su = new SearchUpdate( 0, "" );
}
public function updateText( $text ) {
- return trim( SearchUpdate::updateText( $text ) );
+ return trim( $this->su->updateText( $text ) );
}
/**
--- /dev/null
+<?php
+
+
+class HTMLFormTest extends MediaWikiTestCase {
+ public function testGetHTML_empty() {
+ $form = new HTMLForm( [] );
+ $form->setTitle( Title::newFromText( 'Foo' ) );
+ $form->prepareForm();
+ $html = $form->getHTML( false );
+ $this->assertRegExp( '/<form\b/', $html );
+ }
+
+ /**
+ * @expectedException LogicException
+ */
+ public function testGetHTML_noPrepare() {
+ $form = new HTMLForm( [] );
+ $form->setTitle( Title::newFromText( 'Foo' ) );
+ $form->getHTML( false );
+ }
+}
--- /dev/null
+<?php
+/**
+ * @covers Interwiki
+ *
+ * @group MediaWiki
+ * @group Database
+ */
+class InterwikiTest extends MediaWikiTestCase {
+
+ public function testConstructor() {
+ $interwiki = new Interwiki(
+ 'xyz',
+ 'http://xyz.acme.test/wiki/$1',
+ 'http://xyz.acme.test/w/api.php',
+ 'xyzwiki',
+ 1,
+ 0
+ );
+
+ $this->setContentLang( 'qqx' );
+
+ $this->assertSame( '(interwiki-name-xyz)', $interwiki->getName() );
+ $this->assertSame( '(interwiki-desc-xyz)', $interwiki->getDescription() );
+ $this->assertSame( 'http://xyz.acme.test/w/api.php', $interwiki->getAPI() );
+ $this->assertSame( 'http://xyz.acme.test/wiki/$1', $interwiki->getURL() );
+ $this->assertSame( 'xyzwiki', $interwiki->getWikiID() );
+ $this->assertTrue( $interwiki->isLocal() );
+ $this->assertFalse( $interwiki->isTranscludable() );
+ }
+
+ public function testGetUrl() {
+ $interwiki = new Interwiki(
+ 'xyz',
+ 'http://xyz.acme.test/wiki/$1'
+ );
+
+ $this->assertSame( 'http://xyz.acme.test/wiki/$1', $interwiki->getURL() );
+ $this->assertSame( 'http://xyz.acme.test/wiki/Foo%26Bar', $interwiki->getURL( 'Foo&Bar' ) );
+ }
+
+ //// tests for static data access methods below ///////////////////////////////////////////////
+
+ private function populateDB( $iwrows ) {
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->delete( 'interwiki', '*', __METHOD__ );
+ $dbw->insert( 'interwiki', array_values( $iwrows ), __METHOD__ );
+ $this->tablesUsed[] = 'interwiki';
+ }
+
+ public function testDatabaseStorage() {
+ // NOTE: database setup is expensive, so we only do
+ // it once and run all the tests in one go.
+ $dewiki = [
+ 'iw_prefix' => 'de',
+ 'iw_url' => 'http://de.wikipedia.org/wiki/',
+ 'iw_api' => 'http://de.wikipedia.org/w/api.php',
+ 'iw_wikiid' => 'dewiki',
+ 'iw_local' => 1,
+ 'iw_trans' => 0
+ ];
+
+ $zzwiki = [
+ 'iw_prefix' => 'zz',
+ 'iw_url' => 'http://zzwiki.org/wiki/',
+ 'iw_api' => 'http://zzwiki.org/w/api.php',
+ 'iw_wikiid' => 'zzwiki',
+ 'iw_local' => 0,
+ 'iw_trans' => 0
+ ];
+
+ $this->populateDB( [ $dewiki, $zzwiki ] );
+
+ Interwiki::resetLocalCache();
+ $this->setMwGlobals( 'wgInterwikiCache', false );
+
+ $this->assertEquals(
+ [ $dewiki, $zzwiki ],
+ Interwiki::getAllPrefixes(),
+ 'getAllPrefixes()'
+ );
+ $this->assertEquals(
+ [ $dewiki ],
+ Interwiki::getAllPrefixes( true ),
+ 'getAllPrefixes()'
+ );
+ $this->assertEquals(
+ [ $zzwiki ],
+ Interwiki::getAllPrefixes( false ),
+ 'getAllPrefixes()'
+ );
+
+ $this->assertTrue( Interwiki::isValidInterwiki( 'de' ), 'known prefix is valid' );
+ $this->assertFalse( Interwiki::isValidInterwiki( 'xyz' ), 'unknown prefix is valid' );
+
+ $this->assertNull( Interwiki::fetch( null ), 'no prefix' );
+ $this->assertFalse( Interwiki::fetch( 'xyz' ), 'unknown prefix' );
+
+ $interwiki = Interwiki::fetch( 'de' );
+ $this->assertInstanceOf( 'Interwiki', $interwiki );
+ $this->assertSame( $interwiki, Interwiki::fetch( 'de' ), 'in-process caching' );
+
+ $this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
+ $this->assertSame( 'http://de.wikipedia.org/w/api.php', $interwiki->getAPI(), 'getAPI' );
+ $this->assertSame( 'dewiki', $interwiki->getWikiID(), 'getWikiID' );
+ $this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
+ $this->assertSame( false, $interwiki->isTranscludable(), 'isTranscludable' );
+
+ Interwiki::invalidateCache( 'de' );
+ $this->assertNotSame( $interwiki, Interwiki::fetch( 'de' ), 'invalidate cache' );
+ }
+
+ /**
+ * @param string $thisSite
+ * @param string[] $local
+ * @param string[] $global
+ *
+ * @return string[]
+ */
+ private function populateHash( $thisSite, $local, $global ) {
+ $hash = [];
+ $hash[ '__sites:' . wfWikiID() ] = $thisSite;
+
+ $globals = [];
+ $locals = [];
+
+ foreach ( $local as $row ) {
+ $prefix = $row['iw_prefix'];
+ $data = $row['iw_local'] . ' ' . $row['iw_url'];
+ $locals[] = $prefix;
+ $hash[ "_{$thisSite}:{$prefix}" ] = $data;
+ }
+
+ foreach ( $global as $row ) {
+ $prefix = $row['iw_prefix'];
+ $data = $row['iw_local'] . ' ' . $row['iw_url'];
+ $globals[] = $prefix;
+ $hash[ "__global:{$prefix}" ] = $data;
+ }
+
+ $hash[ '__list:__global' ] = implode( ' ', $globals );
+ $hash[ '__list:_' . $thisSite ] = implode( ' ', $locals );
+
+ return $hash;
+ }
+
+ private function populateCDB( $thisSite, $local, $global ) {
+ $cdbFile = tempnam( wfTempDir(), 'MW-ClassicInterwikiLookupTest-' ) . '.cdb';
+ $cdb = CdbWriter::open( $cdbFile );
+
+ $hash = $this->populateHash( $thisSite, $local, $global );
+
+ foreach ( $hash as $key => $value ) {
+ $cdb->set( $key, $value );
+ }
+
+ $cdb->close();
+ return $cdbFile;
+ }
+
+ public function testCDBStorage() {
+ // NOTE: CDB setup is expensive, so we only do
+ // it once and run all the tests in one go.
+
+ $dewiki = [
+ 'iw_prefix' => 'de',
+ 'iw_url' => 'http://de.wikipedia.org/wiki/',
+ 'iw_local' => 1
+ ];
+
+ $zzwiki = [
+ 'iw_prefix' => 'zz',
+ 'iw_url' => 'http://zzwiki.org/wiki/',
+ 'iw_local' => 0
+ ];
+
+ $cdbFile = $this->populateCDB(
+ 'en',
+ [ $dewiki ],
+ [ $zzwiki ]
+ );
+
+ Interwiki::resetLocalCache();
+ $this->setMwGlobals( 'wgInterwikiCache', $cdbFile );
+
+ $this->assertEquals(
+ [ $dewiki, $zzwiki ],
+ Interwiki::getAllPrefixes(),
+ 'getAllPrefixes()'
+ );
+
+ $this->assertTrue( Interwiki::isValidInterwiki( 'de' ), 'known prefix is valid' );
+ $this->assertTrue( Interwiki::isValidInterwiki( 'zz' ), 'known prefix is valid' );
+
+ $interwiki = Interwiki::fetch( 'de' );
+ $this->assertInstanceOf( 'Interwiki', $interwiki );
+
+ $this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
+ $this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
+
+ $interwiki = Interwiki::fetch( 'zz' );
+ $this->assertInstanceOf( 'Interwiki', $interwiki );
+
+ $this->assertSame( 'http://zzwiki.org/wiki/', $interwiki->getURL(), 'getURL' );
+ $this->assertSame( false, $interwiki->isLocal(), 'isLocal' );
+
+ // cleanup temp file
+ unlink( $cdbFile );
+ }
+
+ public function testArrayStorage() {
+ $dewiki = [
+ 'iw_prefix' => 'de',
+ 'iw_url' => 'http://de.wikipedia.org/wiki/',
+ 'iw_local' => 1
+ ];
+
+ $zzwiki = [
+ 'iw_prefix' => 'zz',
+ 'iw_url' => 'http://zzwiki.org/wiki/',
+ 'iw_local' => 0
+ ];
+
+ $cdbData = $this->populateHash(
+ 'en',
+ [ $dewiki ],
+ [ $zzwiki ]
+ );
+
+ Interwiki::resetLocalCache();
+ $this->setMwGlobals( 'wgInterwikiCache', $cdbData );
+
+ $this->assertEquals(
+ [ $dewiki, $zzwiki ],
+ Interwiki::getAllPrefixes(),
+ 'getAllPrefixes()'
+ );
+
+ $this->assertTrue( Interwiki::isValidInterwiki( 'de' ), 'known prefix is valid' );
+ $this->assertTrue( Interwiki::isValidInterwiki( 'zz' ), 'known prefix is valid' );
+
+ $interwiki = Interwiki::fetch( 'de' );
+ $this->assertInstanceOf( 'Interwiki', $interwiki );
+
+ $this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
+ $this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
+
+ $interwiki = Interwiki::fetch( 'zz' );
+ $this->assertInstanceOf( 'Interwiki', $interwiki );
+
+ $this->assertSame( 'http://zzwiki.org/wiki/', $interwiki->getURL(), 'getURL' );
+ $this->assertSame( false, $interwiki->isLocal(), 'isLocal' );
+ }
+
+}
}
/**
- * @param $filename string
- * @param $expectedLength float
+ * @param string $filename
+ * @param float $expectedLength
* @dataProvider provideGetLength
*/
public function testGetLength( $filename, $expectedLength ) {
--- /dev/null
+<?php
+/**
+ * Tests related to JPEG chroma subsampling via $wgJpegPixelFormat setting.
+ *
+ * @group Media
+ * @group medium
+ *
+ * @todo covers tags
+ */
+class JpegPixelFormatTest extends MediaWikiMediaTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+ }
+
+ /**
+ * Mark this test as creating thumbnail files.
+ */
+ protected function createsThumbnails() {
+ return true;
+ }
+
+ /**
+ *
+ * @dataProvider providePixelFormats
+ */
+ public function testPixelFormatRendering( $sourceFile, $pixelFormat, $samplingFactor ) {
+ global $wgUseImageMagick, $wgUseImageResize;
+ if ( !$wgUseImageMagick ) {
+ $this->markTestSkipped( "This test is only applicable when using ImageMagick thumbnailing" );
+ }
+ if ( !$wgUseImageResize ) {
+ $this->markTestSkipped( "This test is only applicable when using thumbnailing" );
+ }
+
+ $fmtStr = var_export( $pixelFormat, true );
+ $this->setMwGlobals( 'wgJpegPixelFormat', $pixelFormat );
+
+ $file = $this->dataFile( $sourceFile, 'image/jpeg' );
+
+ $params = [
+ 'width' => 320,
+ ];
+ $thumb = $file->transform( $params, File::RENDER_NOW | File::RENDER_FORCE );
+ $this->assertTrue( !$thumb->isError(), "created JPEG thumbnail for pixel format $fmtStr" );
+
+ $path = $thumb->getLocalCopyPath();
+ $this->assertTrue( is_string( $path ), "path returned for JPEG thumbnail for $fmtStr" );
+
+ $cmd = [
+ 'identify',
+ '-format',
+ '%[jpeg:sampling-factor]',
+ $path
+ ];
+ $retval = null;
+ $output = wfShellExec( $cmd, $retval );
+ $this->assertTrue( $retval === 0, "ImageMagick's identify command should return success" );
+
+ $expected = $samplingFactor;
+ $actual = trim( $output );
+ $this->assertEquals(
+ $expected,
+ trim( $output ),
+ "IM identify expects JPEG chroma subsampling \"$expected\" for $fmtStr"
+ );
+ }
+
+ public static function providePixelFormats() {
+ return [
+ // From 4:4:4 source file
+ [
+ 'yuv444.jpg',
+ false,
+ '1x1,1x1,1x1'
+ ],
+ [
+ 'yuv444.jpg',
+ 'yuv444',
+ '1x1,1x1,1x1'
+ ],
+ [
+ 'yuv444.jpg',
+ 'yuv422',
+ '2x1,1x1,1x1'
+ ],
+ [
+ 'yuv444.jpg',
+ 'yuv420',
+ '2x2,1x1,1x1'
+ ],
+ // From 4:2:0 source file
+ [
+ 'yuv420.jpg',
+ false,
+ '2x2,1x1,1x1'
+ ],
+ [
+ 'yuv420.jpg',
+ 'yuv444',
+ '1x1,1x1,1x1'
+ ],
+ [
+ 'yuv420.jpg',
+ 'yuv422',
+ '2x1,1x1,1x1'
+ ],
+ [
+ 'yuv420.jpg',
+ 'yuv420',
+ '2x2,1x1,1x1'
+ ]
+ ];
+ }
+}
* out of parameters:
* $width, $height, { $max => $expected, $max2 => $expected2, ... }
*
- * @param $width int
- * @param $height int
- * @param $tests array associative array of $max => $expected values
+ * @param int $width
+ * @param int $height
+ * @param array $tests associative array of $max => $expected values
* @return array
*/
private static function generateTestFitBoxWidthData( $width, $height, $tests ) {
}
/**
- * @param $filename string
- * @param $expectedLength float
+ * @param string $filename
+ * @param float $expectedLength
* @dataProvider provideGetLength
*/
public function testGetLength( $filename, $expectedLength ) {
<?php
+use MediaWiki\MediaWikiServices;
+
/**
* @group Search
* @group Database
*/
class SearchEnginePrefixTest extends MediaWikiLangTestCase {
+ private $originalHandlers;
/**
* @var SearchEngine
}
// Avoid special pages from extensions interferring with the tests
- $this->setMwGlobals( 'wgSpecialPages', [] );
- $this->search = SearchEngine::create();
+ $this->setMwGlobals( [
+ 'wgSpecialPages' => [],
+ 'wgHooks' => [],
+ ] );
+
+ $this->search = MediaWikiServices::getInstance()->newSearchEngine();
$this->search->setNamespaces( [] );
+
+ $this->originalHandlers = TestingAccessWrapper::newFromClass( 'Hooks' )->handlers;
+ TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = [];
+
+ SpecialPageFactory::resetList();
+ }
+
+ public function tearDown() {
+ parent::tearDown();
+
+ TestingAccessWrapper::newFromClass( 'Hooks' )->handlers = $this->originalHandlers;
+
+ SpecialPageFactory::resetList();
}
protected function searchProvision( array $results = null ) {
}
public function testTokens() {
- $rc = new \ReflectionClass( Session::class );
- if ( !method_exists( $rc, 'newInstanceWithoutConstructor' ) ) {
- $this->markTestSkipped(
- 'ReflectionClass::newInstanceWithoutConstructor isn\'t available'
- );
- }
-
- // Instead of actually constructing the Session, we use reflection to
- // bypass the constructor and plug a mock SessionBackend into the
- // private fields to avoid having to actually create a SessionBackend.
- $backend = new DummySessionBackend;
- $session = $rc->newInstanceWithoutConstructor();
+ $session = TestUtils::getDummySession();
$priv = \TestingAccessWrapper::newFromObject( $session );
- $priv->backend = $backend;
- $priv->index = 42;
+ $backend = $priv->backend;
$token = \TestingAccessWrapper::newFromObject( $session->getToken() );
$this->assertArrayHasKey( 'wsTokenSecrets', $backend->data );
$this->assertArrayNotHasKey( 'wsTokenSecrets', $backend->data );
}
+
+ /**
+ * @dataProvider provideSecretsRoundTripping
+ * @param mixed $data
+ */
+ public function testSecretsRoundTripping( $data ) {
+ $session = TestUtils::getDummySession();
+
+ // Simple round-trip
+ $session->setSecret( 'secret', $data );
+ $this->assertNotEquals( $data, $session->get( 'secret' ) );
+ $this->assertEquals( $data, $session->getSecret( 'secret', 'defaulted' ) );
+ }
+
+ public static function provideSecretsRoundTripping() {
+ return [
+ [ 'Foobar' ],
+ [ 42 ],
+ [ [ 'foo', 'bar' => 'baz', 'subarray' => [ 1, 2, 3 ] ] ],
+ [ (object)[ 'foo', 'bar' => 'baz', 'subarray' => [ 1, 2, 3 ] ] ],
+ [ true ],
+ [ false ],
+ [ null ],
+ ];
+ }
+
+ public function testSecrets() {
+ $logger = new \TestLogger;
+ $session = TestUtils::getDummySession( null, -1, $logger );
+
+ // Simple defaulting
+ $this->assertEquals( 'defaulted', $session->getSecret( 'test', 'defaulted' ) );
+
+ // Bad encrypted data
+ $session->set( 'test', 'foobar' );
+ $logger->setCollect( true );
+ $this->assertEquals( 'defaulted', $session->getSecret( 'test', 'defaulted' ) );
+ $logger->setCollect( false );
+ $this->assertSame( [
+ [ LogLevel::WARNING, 'Invalid sealed-secret format' ]
+ ], $logger->getBuffer() );
+ $logger->clearBuffer();
+
+ // Tampered data
+ $session->setSecret( 'test', 'foobar' );
+ $encrypted = $session->get( 'test' );
+ $session->set( 'test', $encrypted . 'x' );
+ $logger->setCollect( true );
+ $this->assertEquals( 'defaulted', $session->getSecret( 'test', 'defaulted' ) );
+ $logger->setCollect( false );
+ $this->assertSame( [
+ [ LogLevel::WARNING, 'Sealed secret has been tampered with, aborting.' ]
+ ], $logger->getBuffer() );
+ $logger->clearBuffer();
+
+ // Unserializable data
+ $iv = \MWCryptRand::generate( 16, true );
+ list( $encKey, $hmacKey ) = \TestingAccessWrapper::newFromObject( $session )->getSecretKeys();
+ $ciphertext = openssl_encrypt( 'foobar', 'aes-256-ctr', $encKey, OPENSSL_RAW_DATA, $iv );
+ $sealed = base64_encode( $iv ) . '.' . base64_encode( $ciphertext );
+ $hmac = hash_hmac( 'sha256', $sealed, $hmacKey, true );
+ $encrypted = base64_encode( $hmac ) . '.' . $sealed;
+ $session->set( 'test', $encrypted );
+ \MediaWiki\suppressWarnings();
+ $this->assertEquals( 'defaulted', $session->getSecret( 'test', 'defaulted' ) );
+ \MediaWiki\restoreWarnings();
+ }
+
}
<?php
+use MediaWiki\MediaWikiServices;
+
/**
* Test class for SpecialSearch class
* Copyright © 2012, Antoine Musso
* @author Antoine Musso
* @group Database
*/
-
class SpecialSearchTest extends MediaWikiTestCase {
/**
}
public static function provideSearchOptionsTests() {
- $defaultNS = SearchEngine::defaultNamespaces();
+ $defaultNS = MediaWikiServices::getInstance()->getSearchEngineConfig()->defaultNamespaces();
$EMPTY_REQUEST = [];
$NO_USER_PREF = null;
public static function provideFormat() {
return [
- [ NS_MAIN, 'Foo_Bar', '', 'en', 'Foo Bar' ],
- [ NS_USER, 'Hansi_Maier', 'stuff_and_so_on', 'en', 'User:Hansi Maier#stuff and so on' ],
- [ false, 'Hansi_Maier', '', 'en', 'Hansi Maier' ],
+ [ NS_MAIN, 'Foo_Bar', '', '', 'en', 'Foo Bar' ],
+ [ NS_USER, 'Hansi_Maier', 'stuff_and_so_on', '', 'en', 'User:Hansi Maier#stuff and so on' ],
+ [ false, 'Hansi_Maier', '', '', 'en', 'Hansi Maier' ],
[
NS_USER_TALK,
'hansi__maier',
'',
+ '',
'en',
'User talk:hansi maier',
'User talk:Hansi maier'
// getGenderCache() provides a mock that considers first
// names ending in "a" to be female.
- [ NS_USER, 'Lisa_Müller', '', 'de', 'Benutzerin:Lisa Müller' ],
+ [ NS_USER, 'Lisa_Müller', '', '', 'de', 'Benutzerin:Lisa Müller' ],
+ [ NS_MAIN, 'FooBar', '', 'remotetestiw', 'en', 'remotetestiw:FooBar' ],
];
}
/**
* @dataProvider provideFormat
*/
- public function testFormat( $namespace, $text, $fragment, $lang, $expected, $normalized = null ) {
+ public function testFormat( $namespace, $text, $fragment, $interwiki, $lang, $expected,
+ $normalized = null
+ ) {
if ( $normalized === null ) {
$normalized = $expected;
}
$codec = $this->makeCodec( $lang );
- $actual = $codec->formatTitle( $namespace, $text, $fragment );
+ $actual = $codec->formatTitle( $namespace, $text, $fragment, $interwiki );
$this->assertEquals( $expected, $actual, 'formatted' );
$actual2 = $codec->formatTitle(
$parsed->getNamespace(),
$parsed->getText(),
- $parsed->getFragment()
+ $parsed->getFragment(),
+ $parsed->getInterwiki()
);
$this->assertEquals( $normalized, $actual2, 'normalized after round trip' );
[ 'Talk:File:Foo.jpg' ],
[ 'Talk:localtestiw:Foo' ],
- [ 'remotetestiw:Foo' ],
[ '::1' ], // only valid in user namespace
[ 'User::x' ], // leading ":" in a user name is only valid of IPv6 addresses
public function goodConstructorProvider() {
return [
- [ NS_USER, 'TestThis', 'stuff', true ],
- [ NS_USER, 'TestThis', '', false ],
+ [ NS_USER, 'TestThis', 'stuff', '', true, false ],
+ [ NS_USER, 'TestThis', '', 'baz', false, true ],
];
}
/**
* @dataProvider goodConstructorProvider
*/
- public function testConstruction( $ns, $text, $fragment, $hasFragment ) {
- $title = new TitleValue( $ns, $text, $fragment );
+ public function testConstruction( $ns, $text, $fragment, $interwiki, $hasFragment,
+ $hasInterwiki
+ ) {
+ $title = new TitleValue( $ns, $text, $fragment, $interwiki );
$this->assertEquals( $ns, $title->getNamespace() );
$this->assertEquals( $text, $title->getText() );
$this->assertEquals( $fragment, $title->getFragment() );
$this->assertEquals( $hasFragment, $title->hasFragment() );
+ $this->assertEquals( $interwiki, $title->getInterwiki() );
+ $this->assertEquals( $hasInterwiki, $title->isExternal() );
}
public function badConstructorProvider() {
return [
- [ 'foo', 'title', 'fragment' ],
- [ null, 'title', 'fragment' ],
- [ 2.3, 'title', 'fragment' ],
+ [ 'foo', 'title', 'fragment', '' ],
+ [ null, 'title', 'fragment', '' ],
+ [ 2.3, 'title', 'fragment', '' ],
- [ NS_MAIN, 5, 'fragment' ],
- [ NS_MAIN, null, 'fragment' ],
- [ NS_MAIN, '', 'fragment' ],
- [ NS_MAIN, 'foo bar', '' ],
- [ NS_MAIN, 'bar_', '' ],
- [ NS_MAIN, '_foo', '' ],
- [ NS_MAIN, ' eek ', '' ],
+ [ NS_MAIN, 5, 'fragment', '' ],
+ [ NS_MAIN, null, 'fragment', '' ],
+ [ NS_MAIN, '', 'fragment', '' ],
+ [ NS_MAIN, 'foo bar', '', '' ],
+ [ NS_MAIN, 'bar_', '', '' ],
+ [ NS_MAIN, '_foo', '', '' ],
+ [ NS_MAIN, ' eek ', '', '' ],
- [ NS_MAIN, 'title', 5 ],
- [ NS_MAIN, 'title', null ],
- [ NS_MAIN, 'title', [] ],
+ [ NS_MAIN, 'title', 5, '' ],
+ [ NS_MAIN, 'title', null, '' ],
+ [ NS_MAIN, 'title', [], '' ],
+
+ [ NS_MAIN, 'title', '', 5 ],
+ [ NS_MAIN, 'title', null, 5 ],
+ [ NS_MAIN, 'title', [], 5 ],
];
}
/**
* @dataProvider badConstructorProvider
*/
- public function testConstructionErrors( $ns, $text, $fragment ) {
+ public function testConstructionErrors( $ns, $text, $fragment, $interwiki ) {
$this->setExpectedException( 'InvalidArgumentException' );
- new TitleValue( $ns, $text, $fragment );
+ new TitleValue( $ns, $text, $fragment, $interwiki );
}
public function fragmentTitleProvider() {