configurations are $wgDeletedDirectory and $wgHashedUploadDirectory.
* The deprecated $wgUseCommaCount variable has been removed.
* $wgEnableSorbs and $wgSorbsUrl have been removed.
-* The UserCryptPassword and UserComparePassword hooks are no longer called. Any extensions
- using them must be updated to use the Password Hashing API.
+* The UserCryptPassword and UserComparePassword hooks are no longer called.
+ Any extensions using them must be updated to use the Password Hashing API.
* $wgCompiledFiles has been removed.
* $wgSortSpecialPages was removed, the listing on Special:SpecialPages is
now always sorted.
may need to adjust your default user settings to compensate for the index change.
* $wgDeferredUpdateList is now deprecated, you should use DeferredUpdates::addUpdate()
instead.
+* $wgCanonicalLanguageLinks has been removed. Per Google recommendations, we
+ will not send a rel=canonical pointing to a variant-neutral page, however
+ we will send rel=alternate.
=== New features in 1.24 ===
+* Added new hook WatchlistEditorBeforeFormRender, allowing subscribers to
+ manipulate the list of pages and/or preload lots of data at once.
+* Added new argument &$link in hook WatchlistEditorBuildRemoveLine, allowing the
+ link to the title to be changed.
* Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
WhatLinksHere entries.
* Added a new hook, "ContentGetParserOutput", to customize parser output for
* (bug 35045) Redirects to sections will now update the URL in browser's address
bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
+* API token handling has been rewritten. Any API module using tokens will need
+ to be updated. See the entry below under "Action API internal changes".
+* Added HTMLAutoCompleteSelectField.
+* Added a new hook, "SkinPreloadExistence", to allow extensions to add titles to
+ link existence cache before the page is rendered.
=== Bug fixes in 1.24 ===
* (bug 50572) MediaWiki:Blockip should support gender
* (bugs 57238, 65206) Blank pages can now be directly created.
* (bug 69789) Title::getContentModel() now loads from the database when
necessary instead of incorrectly returning the default content model.
+* (bug 69249) wfBaseConvert() now works around PHP Bug #50175 when using GMP.
-=== Web API changes in 1.24 ===
+=== Action API changes in 1.24 ===
* action=parse API now supports prop=modules, which provides the list of
ResourceLoader modules that should be used to enhance the parsed content.
* action=query&meta=siteinfo&siprop=interwikimap returns a new "protorel"
- field which is true iff protocol-relative urls can be used to access
+ field which is true if protocol-relative urls can be used to access
a particular interwiki map entry.
-* ApiQueryLogEvents now provides logpage, which is the page ID from the
+* list=logevents now provides logpage, which is the page ID from the
logging table, if ids are requested and the user has the permissions.
* action=edit now requires that appendtext, prependtext, or section=new be used
when using the 'redirect' parameter, to prevent clients accidentally
overwriting the target page with the content of the redirect.
-* action=logevents will now return an error if both letitle and leprefix are
+* list=logevents will now return an error if both letitle and leprefix are
specified.
-* action=logevents has a new parameter, lenamespace, to allow filtering by
+* list=logevents has a new parameter, lenamespace, to allow filtering by
namespace.
* action=expandtemplates has a new parameter, prop, and a new output format.
The old format is still used if prop isn't provided, but this is deprecated.
* (bug 60734) Actions that use ApiPageSet (e.g. purge, watch,
setnotificationtimestamp) will now include continuation information when
using a generator.
+* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
+ limited use and are generally inaccurate, unmaintained, and impossible to
+ properly maintain.
+* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
+* action=paraminfo now indicates when a parameter is specifying a submodule.
+* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
+ parallelism with prop=langlinks.
+* All tokens should be fetched from action=query&meta=tokens; all other methods
+ of fetching tokens are deprecated. The value needed for meta=tokens's 'type'
+ parameter for each module is documented in the action=help output and is
+ returned from action=paraminfo.
+
+=== Action API internal changes in 1.24 ===
+* Methods for handling continuation are added to ApiResult, so actions other
+ than query that use generators can easily support continuation.
* $wgAPIModules (and the related $wgAPIFormatModules, $wgAPIMetaModules,
$wgAPIPropModules, and $wgAPIListModules settings) now allow API modules
to be specified using a "module spec" array instead of a plain class name.
to use for the module. This is intended for extensions that want control over
the instantiation of their API modules, to allow for proper dependency
injection.
-* Removed 'props' and 'errors' from action=paraminfo, as they have extremely
- limited use and are generally inaccurate, unmaintained, and impossible to
- properly maintain. Also removed the corresponding methods from ApiBase and
- the 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks.
-* Formats dbg, dump, txt, wddx, and yaml are now deprecated.
-* action=paraminfo now indicates when a parameter is specifying a submodule.
- Internally, a new param type 'submodule' is available to indicate this which
- automatically queries the list of submodule names from the ApiModuleManager.
-* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
- parallelism with prop=langlinks.
+* A new param type 'submodule' is available. Parameters of this type will take
+ the list of valid values from the module's ApiModuleManager for the group
+ corresponding to the parameter name.
+* The 'APIGetPossibleErrors' and 'APIGetResultProperties' hooks are no longer used.
+* API token handling has been rewritten. Any API module using tokens will need
+ to be updated:
+ * ApiBase::needsToken now returns a token type instead of boolean true when a
+ token is needed. Returning true will throw an exception. See documentation
+ of that method for details.
+ * Information for the 'token' parameter is automatically set by ApiBase
+ getFinalParams and getFinalParamDescription.
+ * ApiBase::getTokenSalt has been removed.
+ * The hooks APIQueryInfoTokens, APIQueryRevisionsTokens,
+ APIQueryRecentChangesTokens, APIQueryUsersTokens, and
+ ApiTokensGetTokenTypes are deprecated, but are still called to support
+ backwards-compatible token access.
+* ApiBase::validateLimit and ApiBase::validateTimestamp are now protected.
+* The following methods have been deprecated and may be removed in a future
+ release:
+ * ApiBase::getResultProperties
+ * ApiBase::getFinalResultProperties
+ * ApiBase::addTokenProperties
+ * ApiBase::getRequireOnlyOneParameterErrorMessages
+ * ApiBase::getRequireMaxOneParameterErrorMessages
+ * ApiBase::getRequireAtLeastOneParameterErrorMessages
+ * ApiBase::getTitleOrPageIdErrorMessage
+ * ApiBase::getPossibleErrors
+ * ApiBase::getFinalPossibleErrors
+ * ApiBase::parseErrors
+ * ApiQuery::setGeneratorContinue
+ * ApiQueryBase::checkRowCount
+ * ApiQueryBase::titleToKey
+ * ApiQueryBase::keyToTitle
+ * ApiQueryBase::keyPartToTitle
+ * ApiQueryInfo::getTokenFunctions
+ * ApiQueryInfo::resetTokenCache
+ * ApiQueryInfo::getEditToken
+ * ApiQueryInfo::getDeleteToken
+ * ApiQueryInfo::getProtectToken
+ * ApiQueryInfo::getMoveToken
+ * ApiQueryInfo::getBlockToken
+ * ApiQueryInfo::getUnblockToken
+ * ApiQueryInfo::getEmailToken
+ * ApiQueryInfo::getImportToken
+ * ApiQueryInfo::getWatchToken
+ * ApiQueryInfo::getOptionsToken
+ * ApiQueryRecentChanges::getTokenFunctions
+ * ApiQueryRecentChanges::getPatrolToken
+ * ApiQueryRevisions::getTokenFunctions
+ * ApiQueryRevisions::getRollbackToken
+ * ApiQueryUsers::getTokenFunctions
+ * ApiQueryUsers::getUserrightsToken
+* The following classes have been deprecated and may be removed in a future
+ release:
+ * ApiFormatDbg
+ * ApiFormatDump
+ * ApiFormatTxt
+ * ApiFormatWddx
+ * ApiFormatYaml
+ * ApiTokens
=== Languages updated in 1.24 ===
the "headelement" template key are no longer supported. Setting
$useHeadElement = false; is no longer supported and will not cause old keys
like "headlinks", "skinnameclass", etc. to be defined.
+* BREAKING CHANGE: The files commonElements.css, commonContent.css and
+ commonInterface.css (in skins/common/) have been removed. Skins may no longer
+ rely on their presence and include them in their style modules. ResourceLoader
+ modules introduced in MediaWiki 1.23 should be loaded instead:
+ - skins/common/commonElements.css → 'mediawiki.skinning.elements' module
+ - skins/common/commonContent.css → 'mediawiki.skinning.content' module
+ - skins/common/commonInterface.css → 'mediawiki.skinning.interface' module
* The deprecated 'SpecialVersionExtensionTypes' hook was removed.
* (bug 63891) Add 'X-Robots-Tag: noindex' header in action=render pages.
* SpecialPage no longer supports the syntax for invoking wfSpecial*() functions.
set of hooks has been removed and replaced by a single new hook
SpecialPageBeforeFormDisplay.
* (bug 65781) Removed block warning on included {{Special:Contributions}}
-* Removed Skin::makeGlobalVariablesScript. (deprecated since 1.19)
+* Removed Skin::makeGlobalVariablesScript(). (deprecated since 1.19)
* Removed MWNamespace::isMain(). (deprecated since 1.19)
* Removed Preferences::loadOldSearchNs(). (deprecated since 1.19)
* Removed OutputPage::getStatusMessage(). (deprecated since 1.18)
setPreloadedText() from EditPage.php. (deprecated since 1.21)
* Removed global functions wfArrayLookup(), wfArrayMerge(), wfDebugDieBacktrace()
and wfTime(). (deprecated since 1.22)
-* Microsoft Internet Explorer 6 is now a "grade C" browser, meaning that
- JavaScript is no longer executed in this browser. The IEFixes script, which
- existed purely to provide support for MSIE versions below 7 and which was
- conditionally loaded for those browsers, was also removed.
+* Browser support for Internet Explorer 6 lowered from Grade A to Grade C,
+ meaning that JavaScript is no longer executed in this browser.
+* Browser support for Opera 11 lowered from Grade A to Grade C.
+* Removed IEFixes module which existed purely to provide support for MSIE versions
+ below 7 (conditionally loaded only for those browsers).
* Action::checkCanExecute() no longer has a return value.
* Removed cleanupForIRC(), loadFromCurRow(), newFromCurRow(), notifyRC2UDP()
and sendToUDP() from RecentChange.php. (deprecated since 1.22)
* Removed EnhancedChangesList::arrow(), sideArrow(), downArrow(), spacerArrow().
* Removed Xml::namespaceSelector(). (deprecated since 1.19)
-* Removed WikiPage::estimateRevisionCount. (deprecated since 1.19)
+* Removed WikiPage::estimateRevisionCount(). (deprecated since 1.19)
+* MYSQL: Enum item added to "major MIME type" columns.
+ Running update.php on MySQL < v5.1 may result in heavy processing.
+* RSS and Atom feeds generated by MediaWiki no longer include a fallback
+ stylesheet. It was ignored by most browsers these days anyway.
+* SpecialSearchNoResults hook has been removed. SpecialSearchResults is now
+ called unconditionally.
+* TablePager::getBody() is now 'final' and can't be overridden in subclasses.
+* TablePager::getBody() is deprecated, use getBodyOutput() or getFullOutput().
+* log_page for move log entries store the original page ID, rather than that
+ of the new redirect page. This is not retroactive.
+* LCStoreAccel was removed. $wgLocalisationCacheConf can no longer be set to
+ use this store class.
==== Renamed classes ====
* CLDRPluralRuleConverter_Expression to CLDRPluralRuleConverterExpression
--- /dev/null
+The icons used here are derived from the crystalsvg icons in the the
+pics/crystalsvg/ directory of kdelibs-3.4.0 they were modified on 2005-05-15
+by Ævar Arnfjörð Bjarmason for use in MediaWiki.
+
+What follows is the contents of the LICENSE.crystalsvg file found in the pics/
+subdirectory of kdelibs-3.4.0:
+
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+This copyright and license notice covers all CrystalSVG images.
+Note the license notice contains an add-on.
+********************************************************************************
+KDE Crystal theme icons.
+Copyright (C) 2002 and following years KDE Artists
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation,
+version 2.1 of the License.
+This library 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
+Lesser General Public License for more details.
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ **** NOTE THIS ADD-ON ****
+The GNU Lesser General Public License or LGPL is written for software libraries
+in the first place. We expressly want the LGPL to be valid for this artwork
+library too.
+KDE Crystal theme icons is a special kind of software library, it is an
+artwork library, it's elements can be used in a Graphical User Interface, or
+GUI.
+Source code, for this library means:
+ - for vectors svg;
+ - for pixels, if applicable, the multi-layered formats xcf or psd, or
+otherwise png.
+The LGPL in some sections obliges you to make the files carry
+notices. With images this is in some cases impossible or hardly useful.
+With this library a notice is placed at a prominent place in the directory
+containing the elements. You may follow this practice.
+The exception in section 6 of the GNU Lesser General Public License covers
+the use of elements of this art library in a GUI.
+kde-artists [at] kde.org
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
&$module: Module object
&$resultPageSet: ApiPageSet object
-'APIQueryInfoTokens': Use this hook to add custom tokens to prop=info. Every
-token has an action, which will be used in the intoken parameter and in the
-output (actiontoken="..."), and a callback function which should return the
-token, or false if the user isn't allowed to obtain it. The prototype of the
-callback function is func($pageid, $title), where $pageid is the page ID of the
-page the token is requested for and $title is the associated Title object. In
-the hook, just add your callback to the $tokenFunctions array and return true
-(returning false makes no sense).
+'APIQueryInfoTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to prop=info. Every token has an action,
+which will be used in the intoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title), where $pageid is the page ID of the page the
+token is requested for and $title is the associated Title object. In the hook,
+just add your callback to the $tokenFunctions array and return true (returning
+false makes no sense).
$tokenFunctions: array(action => callback)
-'APIQueryRevisionsTokens': Use this hook to add custom tokens to prop=revisions.
-Every token has an action, which will be used in the rvtoken parameter and in
-the output (actiontoken="..."), and a callback function which should return the
-token, or false if the user isn't allowed to obtain it. The prototype of the
-callback function is func($pageid, $title, $rev), where $pageid is the page ID
-of the page associated to the revision the token is requested for, $title the
+'APIQueryRevisionsTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to prop=revisions. Every token has an
+action, which will be used in the rvtoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title, $rev), where $pageid is the page ID of the
+page associated to the revision the token is requested for, $title the
associated Title object and $rev the associated Revision object. In the hook,
just add your callback to the $tokenFunctions array and return true (returning
false makes no sense).
$tokenFunctions: array(action => callback)
-'APIQueryRecentChangesTokens': Use this hook to add custom tokens to
-list=recentchanges. Every token has an action, which will be used in the rctoken
-parameter and in the output (actiontoken="..."), and a callback function which
-should return the token, or false if the user isn't allowed to obtain it. The
-prototype of the callback function is func($pageid, $title, $rc), where $pageid
-is the page ID of the page associated to the revision the token is requested
-for, $title the associated Title object and $rc the associated RecentChange
-object. In the hook, just add your callback to the $tokenFunctions array and
-return true (returning false makes no sense).
+'APIQueryRecentChangesTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom tokens to list=recentchanges. Every token has an
+action, which will be used in the rctoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($pageid, $title, $rc), where $pageid is the page ID of the
+page associated to the revision the token is requested for, $title the
+associated Title object and $rc the associated RecentChange object. In the
+hook, just add your callback to the $tokenFunctions array and return true
+(returning false makes no sense).
$tokenFunctions: array(action => callback)
'APIQuerySiteInfoGeneralInfo': Use this hook to add extra information to the
sites statistics information.
&$results: array of results, add things here
-'APIQueryUsersTokens': Use this hook to add custom token to list=users. Every
-token has an action, which will be used in the ustoken parameter and in the
-output (actiontoken="..."), and a callback function which should return the
-token, or false if the user isn't allowed to obtain it. The prototype of the
-callback function is func($user) where $user is the User object. In the hook,
-just add your callback to the $tokenFunctions array and return true (returning
-false makes no sense).
+'ApiQueryTokensRegisterTypes': Use this hook to add additional token types to
+action=query&meta=tokens. Note that most modules will probably be able to use
+the 'csrf' token instead of creating their own token types.
+&$salts: array( type => salt to pass to User::getEditToken() )
+
+'APIQueryUsersTokens': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to add custom token to list=users. Every token has an action,
+which will be used in the ustoken parameter and in the output
+(actiontoken="..."), and a callback function which should return the token, or
+false if the user isn't allowed to obtain it. The prototype of the callback
+function is func($user) where $user is the User object. In the hook, just add
+your callback to the $tokenFunctions array and return true (returning false
+makes no sense).
$tokenFunctions: array(action => callback)
'ApiMain::onException': Called by ApiMain::executeActionWithErrorHandling() when
key-value-pair identified by the apiLink key is required.
&$apis: array of services
-'ApiTokensGetTokenTypes': Use this hook to extend action=tokens with new token
-types.
+'ApiTokensGetTokenTypes': DEPRECATED! Use ApiQueryTokensRegisterTypes instead.
+Use this hook to extend action=tokens with new token types.
&$tokenTypes: supported token types in format 'type' => callback function
used to retrieve this type of tokens.
&$join_conds: join conditions for the tables
$opts: FormOptions for this request
+'LoginUserMigrated': Called during login to allow extensions the opportunity to
+inform a user that their username doesn't exist for a specific reason, instead
+of letting the login form give the generic error message that the account does
+not exist. For example, when the account has been renamed or deleted.
+$user: the User object being authenticated against.
+&$msg: the message identifier for abort reason, or an array to pass a message
+ key and parameters.
+
'Collation::factory': Called if $wgCategoryCollation is an unknown collation.
$collationName: Name of the collation in question
&$collationObject: Null. Replace with a subclass of the Collation class that
&$alldata: The localisation data from core and extensions
&purgeBlobs: whether to purge/update the message blobs via MessageBlobStore::clear()
+'LocalisationCacheRecacheFallback': Called for each language when merging
+fallback data into the cache.
+$cache: The LocalisationCache object
+$code: language code
+&$alldata: The localisation data from core and extensions. Note some keys may
+ be omitted if they won't be merged into the final result.
+
'LocalisationChecksBlacklist': When fetching the blacklist of
localisation checks.
&$blacklist: array of checks to blacklist. See the bottom of
the MediaWiki icon but plain text instead.
$skin: Skin object
+'SkinPreloadExistence': Supply titles that should be added to link existence
+cache before the page is rendered.
+&$titles: Array of Title objects
+$skin: Skin object
+
'SkinSubPageSubtitle': At the beginning of Skin::subPageSubtitle().
&$subpages: Subpage links HTML
$skin: Skin object
$output: $wgOut
$term: Search term specified by the user
-'SpecialSearchResults': Called before search result display when there are
-matches.
+'SpecialSearchResults': Called before search result display
$term: string of search term
&$titleMatches: empty or SearchResultSet object
&$textMatches: empty or SearchResultSet object
-'SpecialSearchNoResults': Called before search result display when there are no
-matches.
-$term: string of search term
-
'SpecialStatsAddExtra': Add extra statistic at the end of Special:Statistics.
&$extraStats: Array to save the new stats
( $extraStats['<name of statistic>'] => <value>; )
$user: user that watched
$page: WikiPage object watched
+'WatchlistEditorBeforeFormRender': Before building the Special:EditWatchlist
+form, used to manipulate the list of pages or preload data based on that list.
+&$watchlistInfo: array of watchlisted pages in
+ [namespaceId => ['title1' => 1, 'title2' => 1]] format
+
'WatchlistEditorBuildRemoveLine': when building remove lines in
Special:Watchlist/edit.
&$tools: array of extra links
$title: Title object
$redirect: whether the page is a redirect
$skin: Skin object
+&$link: HTML link to title
'WebRequestPathInfoRouter': While building the PathRouter to parse the
REQUEST_URI.
</header>
<div class="container">
- <nav class="content">
+ <nav>
<ul>
<li><a href="index.html"><span>0.0</span> Overview</a></li>
{{#eachRoot}}
</ul>
</nav>
- <article>
+ <div class="content">
{{#if overview}}
{{html overview}}
{{else}}
{{#eachSection rootNumber}}
- <section>
+ <div>
{{#whenDepth 1}}
<h1>{{ reference }}.0 {{ header }}</h1>
{{else}}
{{html description}}
{{/if}}
{{/ifAny}}
- </section>
+ </div>
{{/eachSection}}
{{/if}}
- </article>
+ </div>
</div>
</div></body>
</html>
-
.container {
width: 100%;
}
display: none;
}
-article {
+.content {
.example {
blockquote {
margin-top: 20px;
font-family: "Nimbus Sans L", "Liberation Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
}
-.content.kss-no-margin {
+.kss-no-margin {
+ // FIXME: Is this being used anywhere? Remove if not.
margin: 0;
}
}
}
-article {
+.content {
-webkit-flex: 1;
flex: 1;
width: auto;
}
- article {
+ .content {
margin-left: 30px;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
- <link rel="stylesheet" href="../../skins/common/shared.css">
+ <link rel="stylesheet" href="../../resources/src/mediawiki.legacy/shared.css">
</head>
<body style="font-size: small;">
$wgActionPaths = array( "$wgUploadPath/" );
wfImageAuthMain();
+wfProfileOut( 'img_auth.php' );
wfLogProfilingData();
// Commit and close up!
$factory = wfGetLBFactory();
*/
private $args;
+ /**
+ * @var Config
+ */
+ private $config;
+
/**
* Load up our object with user supplied data
*/
- function __construct() {
+ function __construct( Config $config ) {
wfProfileIn( __METHOD__ );
+ $this->config = $config;
+
$this->mode = "";
if ( !empty( $_GET["rs"] ) ) {
* BEWARE! Data are passed as they have been supplied by the user,
* they should be carefully handled in the function processing the
* request.
+ *
+ * @param User $user
*/
- function performAction() {
- global $wgAjaxExportList, $wgUser;
-
+ function performAction( User $user ) {
if ( empty( $this->mode ) ) {
return;
}
wfProfileIn( __METHOD__ );
- if ( !in_array( $this->func_name, $wgAjaxExportList ) ) {
+ if ( !in_array( $this->func_name, $this->config->get( 'AjaxExportList' ) ) ) {
wfDebug( __METHOD__ . ' Bad Request for unknown function ' . $this->func_name . "\n" );
wfHttpError(
'Bad Request',
"unknown function " . $this->func_name
);
- } elseif ( !User::isEveryoneAllowed( 'read' ) && !$wgUser->isAllowed( 'read' ) ) {
+ } elseif ( !User::isEveryoneAllowed( 'read' ) && !$user->isAllowed( 'read' ) ) {
wfHttpError(
403,
'Forbidden',
*/
private $mText;
+ /**
+ * @var Config
+ */
+ private $mConfig;
+
/**
* @param string|null $text
+ * @param Config|null $config
*/
- function __construct( $text = null ) {
+ function __construct( $text = null, Config $config = null ) {
$this->mCacheDuration = null;
$this->mVary = null;
+ $this->mConfig = $config ?: ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
$this->mDisabled = false;
$this->mText = '';
* Construct the header and output it
*/
function sendHeaders() {
- global $wgUseSquid, $wgUseESI;
-
if ( $this->mResponseCode ) {
$n = preg_replace( '/^ *(\d+)/', '\1', $this->mResponseCode );
header( "Status: " . $this->mResponseCode, true, (int)$n );
# and tell the client to always check with the squid. Otherwise,
# tell the client to use a cached copy, without a way to purge it.
- if ( $wgUseSquid ) {
+ if ( $this->mConfig->get( 'UseSquid' ) ) {
# Expect explicit purge of the proxy cache, but require end user agents
# to revalidate against the proxy on each visit.
# Surrogate-Control controls our Squid, Cache-Control downstream caches
- if ( $wgUseESI ) {
+ if ( $this->mConfig->get( 'UseESI' ) ) {
header( 'Surrogate-Control: max-age=' . $this->mCacheDuration . ', content="ESI/1.0"' );
header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
} else {
'AuthPluginUser' => 'includes/AuthPlugin.php',
'Autopromote' => 'includes/Autopromote.php',
'Block' => 'includes/Block.php',
+ 'BloomCache' => 'includes/cache/bloom/BloomCache.php',
+ 'BloomCacheRedis' => 'includes/cache/bloom/BloomCacheRedis.php',
+ 'BloomFilterTitleHasLogs' => 'includes/cache/bloom/BloomFilters.php',
+ 'CacheHelper' => 'includes/CacheHelper.php',
'Category' => 'includes/Category.php',
- 'Categoryfinder' => 'includes/Categoryfinder.php',
+ 'CategoryFinder' => 'includes/CategoryFinder.php',
'CategoryViewer' => 'includes/CategoryViewer.php',
'ChangeTags' => 'includes/ChangeTags.php',
'ChannelFeed' => 'includes/Feed.php',
'DumpPipeOutput' => 'includes/Export.php',
'EditPage' => 'includes/EditPage.php',
'EmailNotification' => 'includes/UserMailer.php',
+ 'EmptyBloomCache' => 'includes/cache/bloom/BloomCache.php',
'Fallback' => 'includes/Fallback.php',
'FauxRequest' => 'includes/WebRequest.php',
'FauxResponse' => 'includes/WebResponse.php',
'Html' => 'includes/Html.php',
'HtmlFormatter' => 'includes/HtmlFormatter.php',
'HTMLApiField' => 'includes/htmlform/HTMLApiField.php',
+ 'HTMLAutoCompleteSelectField' => 'includes/htmlform/HTMLAutoCompleteSelectField.php',
'HTMLButtonField' => 'includes/htmlform/HTMLButtonField.php',
'HTMLCheckField' => 'includes/htmlform/HTMLCheckField.php',
'HTMLCheckMatrix' => 'includes/htmlform/HTMLCheckMatrix.php',
'ApiFormatBase' => 'includes/api/ApiFormatBase.php',
'ApiFormatDbg' => 'includes/api/ApiFormatDbg.php',
'ApiFormatDump' => 'includes/api/ApiFormatDump.php',
- 'ApiFormatFeedWrapper' => 'includes/api/ApiFormatBase.php',
+ 'ApiFormatFeedWrapper' => 'includes/api/ApiFormatFeedWrapper.php',
'ApiFormatJson' => 'includes/api/ApiFormatJson.php',
'ApiFormatNone' => 'includes/api/ApiFormatNone.php',
'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php',
'ApiQuerySiteinfo' => 'includes/api/ApiQuerySiteinfo.php',
'ApiQueryStashImageInfo' => 'includes/api/ApiQueryStashImageInfo.php',
'ApiQueryTags' => 'includes/api/ApiQueryTags.php',
+ 'ApiQueryTokens' => 'includes/api/ApiQueryTokens.php',
'ApiQueryUserInfo' => 'includes/api/ApiQueryUserInfo.php',
'ApiQueryUsers' => 'includes/api/ApiQueryUsers.php',
'ApiQueryWatchlist' => 'includes/api/ApiQueryWatchlist.php',
'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
'ICacheHelper' => 'includes/cache/CacheHelper.php',
'LCStore' => 'includes/cache/LocalisationCache.php',
- 'LCStoreAccel' => 'includes/cache/LocalisationCache.php',
'LCStoreCDB' => 'includes/cache/LocalisationCache.php',
'LCStoreDB' => 'includes/cache/LocalisationCache.php',
'LCStoreNull' => 'includes/cache/LocalisationCache.php',
*
* @param Block $block
* @param array &$blockIds
- * @return array Block IDs of retroactive autoblocks made
*/
protected static function defaultRetroactiveAutoblock( Block $block, array &$blockIds ) {
global $wgPutIPinRC;
--- /dev/null
+<?php
+/**
+ * Recent changes filtering by category.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * The "CategoryFinder" class takes a list of articles, creates an internal
+ * representation of all their parent categories (as well as parents of
+ * parents etc.). From this representation, it determines which of these
+ * articles are in one or all of a given subset of categories.
+ *
+ * Example use :
+ * <code>
+ * # Determines whether the article with the page_id 12345 is in both
+ * # "Category 1" and "Category 2" or their subcategories, respectively
+ *
+ * $cf = new CategoryFinder;
+ * $cf->seed(
+ * array( 12345 ),
+ * array( 'Category 1', 'Category 2' ),
+ * 'AND'
+ * );
+ * $a = $cf->run();
+ * print implode( ',' , $a );
+ * </code>
+ *
+ */
+class CategoryFinder {
+ /** @var int[] The original article IDs passed to the seed function */
+ protected $articles = array();
+
+ /** @var array Array of DBKEY category names for categories that don't have a page */
+ protected $deadend = array();
+
+ /** @var array Array of [ID => array()] */
+ protected $parents = array();
+
+ /** @var array Array of article/category IDs */
+ protected $next = array();
+
+ /** @var array Array of DBKEY category names */
+ protected $targets = array();
+
+ /** @var array */
+ protected $name2id = array();
+
+ /** @var string "AND" or "OR" */
+ protected $mode;
+
+ /** @var DatabaseBase Read-DB slave */
+ protected $dbr;
+
+ /**
+ * Initializes the instance. Do this prior to calling run().
+ * @param array $articleIds Array of article IDs
+ * @param array $categories FIXME
+ * @param string $mode FIXME, default 'AND'.
+ * @todo FIXME: $categories/$mode
+ */
+ public function seed( $articleIds, $categories, $mode = 'AND' ) {
+ $this->articles = $articleIds;
+ $this->next = $articleIds;
+ $this->mode = $mode;
+
+ # Set the list of target categories; convert them to DBKEY form first
+ $this->targets = array();
+ foreach ( $categories as $c ) {
+ $ct = Title::makeTitleSafe( NS_CATEGORY, $c );
+ if ( $ct ) {
+ $c = $ct->getDBkey();
+ $this->targets[$c] = $c;
+ }
+ }
+ }
+
+ /**
+ * Iterates through the parent tree starting with the seed values,
+ * then checks the articles if they match the conditions
+ * @return array Array of page_ids (those given to seed() that match the conditions)
+ */
+ public function run() {
+ $this->dbr = wfGetDB( DB_SLAVE );
+ while ( count( $this->next ) > 0 ) {
+ $this->scanNextLayer();
+ }
+
+ # Now check if this applies to the individual articles
+ $ret = array();
+
+ foreach ( $this->articles as $article ) {
+ $conds = $this->targets;
+ if ( $this->check( $article, $conds ) ) {
+ # Matches the conditions
+ $ret[] = $article;
+ }
+ }
+ return $ret;
+ }
+
+ /**
+ * This functions recurses through the parent representation, trying to match the conditions
+ * @param int $id The article/category to check
+ * @param array $conds The array of categories to match
+ * @param array $path Used to check for recursion loops
+ * @return bool Does this match the conditions?
+ */
+ private function check( $id, &$conds, $path = array() ) {
+ // Check for loops and stop!
+ if ( in_array( $id, $path ) ) {
+ return false;
+ }
+
+ $path[] = $id;
+
+ # Shortcut (runtime paranoia): No conditions=all matched
+ if ( count( $conds ) == 0 ) {
+ return true;
+ }
+
+ if ( !isset( $this->parents[$id] ) ) {
+ return false;
+ }
+
+ # iterate through the parents
+ foreach ( $this->parents[$id] as $p ) {
+ $pname = $p->cl_to;
+
+ # Is this a condition?
+ if ( isset( $conds[$pname] ) ) {
+ # This key is in the category list!
+ if ( $this->mode == 'OR' ) {
+ # One found, that's enough!
+ $conds = array();
+ return true;
+ } else {
+ # Assuming "AND" as default
+ unset( $conds[$pname] );
+ if ( count( $conds ) == 0 ) {
+ # All conditions met, done
+ return true;
+ }
+ }
+ }
+
+ # Not done yet, try sub-parents
+ if ( !isset( $this->name2id[$pname] ) ) {
+ # No sub-parent
+ continue;
+ }
+ $done = $this->check( $this->name2id[$pname], $conds, $path );
+ if ( $done || count( $conds ) == 0 ) {
+ # Subparents have done it!
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Scans a "parent layer" of the articles/categories in $this->next
+ */
+ private function scanNextLayer() {
+ $profiler = new ProfileSection( __METHOD__ );
+
+ # Find all parents of the article currently in $this->next
+ $layer = array();
+ $res = $this->dbr->select(
+ /* FROM */ 'categorylinks',
+ /* SELECT */ '*',
+ /* WHERE */ array( 'cl_from' => $this->next ),
+ __METHOD__ . '-1'
+ );
+ foreach ( $res as $o ) {
+ $k = $o->cl_to;
+
+ # Update parent tree
+ if ( !isset( $this->parents[$o->cl_from] ) ) {
+ $this->parents[$o->cl_from] = array();
+ }
+ $this->parents[$o->cl_from][$k] = $o;
+
+ # Ignore those we already have
+ if ( in_array( $k, $this->deadend ) ) {
+ continue;
+ }
+
+ if ( isset( $this->name2id[$k] ) ) {
+ continue;
+ }
+
+ # Hey, new category!
+ $layer[$k] = $k;
+ }
+
+ $this->next = array();
+
+ # Find the IDs of all category pages in $layer, if they exist
+ if ( count( $layer ) > 0 ) {
+ $res = $this->dbr->select(
+ /* FROM */ 'page',
+ /* SELECT */ array( 'page_id', 'page_title' ),
+ /* WHERE */ array( 'page_namespace' => NS_CATEGORY, 'page_title' => $layer ),
+ __METHOD__ . '-2'
+ );
+ foreach ( $res as $o ) {
+ $id = $o->page_id;
+ $name = $o->page_title;
+ $this->name2id[$name] = $id;
+ $this->next[] = $id;
+ unset( $layer[$name] );
+ }
+ }
+
+ # Mark dead ends
+ foreach ( $layer as $v ) {
+ $this->deadend[$v] = $v;
+ }
+ }
+}
function __construct( $title, IContextSource $context, $from = array(),
$until = array(), $query = array()
) {
- global $wgCategoryPagingLimit;
$this->title = $title;
$this->setContext( $context );
$this->from = $from;
$this->until = $until;
- $this->limit = $wgCategoryPagingLimit;
+ $this->limit = $context->getConfig()->get( 'CategoryPagingLimit' );
$this->cat = Category::newFromTitle( $title );
$this->query = $query;
$this->collation = Collation::singleton();
* @return string HTML output
*/
public function getHTML() {
- global $wgCategoryMagicGallery;
wfProfileIn( __METHOD__ );
- $this->showGallery = $wgCategoryMagicGallery && !$this->getOutput()->mNoGallery;
+ $this->showGallery = $this->getConfig()->get( 'CategoryMagicGallery' )
+ && !$this->getOutput()->mNoGallery;
$this->clearCategoryState();
$this->doCategoryQuery();
+++ /dev/null
-<?php
-/**
- * Recent changes filtering by category.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- */
-
-/**
- * The "Categoryfinder" class takes a list of articles, creates an internal
- * representation of all their parent categories (as well as parents of
- * parents etc.). From this representation, it determines which of these
- * articles are in one or all of a given subset of categories.
- *
- * Example use :
- * <code>
- * # Determines whether the article with the page_id 12345 is in both
- * # "Category 1" and "Category 2" or their subcategories, respectively
- *
- * $cf = new Categoryfinder;
- * $cf->seed(
- * array( 12345 ),
- * array( 'Category 1', 'Category 2' ),
- * 'AND'
- * );
- * $a = $cf->run();
- * print implode( ',' , $a );
- * </code>
- *
- */
-class Categoryfinder {
- /** @var int[] The original article IDs passed to the seed function */
- protected $articles = array();
-
- /** @var array Array of DBKEY category names for categories that don't have a page */
- protected $deadend = array();
-
- /** @var array Array of [ID => array()] */
- protected $parents = array();
-
- /** @var array Array of article/category IDs */
- protected $next = array();
-
- /** @var array Array of DBKEY category names */
- protected $targets = array();
-
- /** @var array */
- protected $name2id = array();
-
- /** @var string "AND" or "OR" */
- protected $mode;
-
- /** @var DatabaseBase Read-DB slave */
- protected $dbr;
-
- function __construct() {
- }
-
- /**
- * Initializes the instance. Do this prior to calling run().
- * @param array $article_ids Array of article IDs
- * @param array $categories FIXME
- * @param string $mode FIXME, default 'AND'.
- * @todo FIXME: $categories/$mode
- */
- function seed( $article_ids, $categories, $mode = 'AND' ) {
- $this->articles = $article_ids;
- $this->next = $article_ids;
- $this->mode = $mode;
-
- # Set the list of target categories; convert them to DBKEY form first
- $this->targets = array();
- foreach ( $categories as $c ) {
- $ct = Title::makeTitleSafe( NS_CATEGORY, $c );
- if ( $ct ) {
- $c = $ct->getDBkey();
- $this->targets[$c] = $c;
- }
- }
- }
-
- /**
- * Iterates through the parent tree starting with the seed values,
- * then checks the articles if they match the conditions
- * @return array Array of page_ids (those given to seed() that match the conditions)
- */
- function run() {
- $this->dbr = wfGetDB( DB_SLAVE );
- while ( count( $this->next ) > 0 ) {
- $this->scan_next_layer();
- }
-
- # Now check if this applies to the individual articles
- $ret = array();
-
- foreach ( $this->articles as $article ) {
- $conds = $this->targets;
- if ( $this->check( $article, $conds ) ) {
- # Matches the conditions
- $ret[] = $article;
- }
- }
- return $ret;
- }
-
- /**
- * This functions recurses through the parent representation, trying to match the conditions
- * @param int $id The article/category to check
- * @param array $conds The array of categories to match
- * @param array $path Used to check for recursion loops
- * @return bool Does this match the conditions?
- */
- function check( $id, &$conds, $path = array() ) {
- // Check for loops and stop!
- if ( in_array( $id, $path ) ) {
- return false;
- }
-
- $path[] = $id;
-
- # Shortcut (runtime paranoia): No conditions=all matched
- if ( count( $conds ) == 0 ) {
- return true;
- }
-
- if ( !isset( $this->parents[$id] ) ) {
- return false;
- }
-
- # iterate through the parents
- foreach ( $this->parents[$id] as $p ) {
- $pname = $p->cl_to;
-
- # Is this a condition?
- if ( isset( $conds[$pname] ) ) {
- # This key is in the category list!
- if ( $this->mode == 'OR' ) {
- # One found, that's enough!
- $conds = array();
- return true;
- } else {
- # Assuming "AND" as default
- unset( $conds[$pname] );
- if ( count( $conds ) == 0 ) {
- # All conditions met, done
- return true;
- }
- }
- }
-
- # Not done yet, try sub-parents
- if ( !isset( $this->name2id[$pname] ) ) {
- # No sub-parent
- continue;
- }
- $done = $this->check( $this->name2id[$pname], $conds, $path );
- if ( $done || count( $conds ) == 0 ) {
- # Subparents have done it!
- return true;
- }
- }
- return false;
- }
-
- /**
- * Scans a "parent layer" of the articles/categories in $this->next
- */
- function scan_next_layer() {
- wfProfileIn( __METHOD__ );
-
- # Find all parents of the article currently in $this->next
- $layer = array();
- $res = $this->dbr->select(
- /* FROM */ 'categorylinks',
- /* SELECT */ '*',
- /* WHERE */ array( 'cl_from' => $this->next ),
- __METHOD__ . '-1'
- );
- foreach ( $res as $o ) {
- $k = $o->cl_to;
-
- # Update parent tree
- if ( !isset( $this->parents[$o->cl_from] ) ) {
- $this->parents[$o->cl_from] = array();
- }
- $this->parents[$o->cl_from][$k] = $o;
-
- # Ignore those we already have
- if ( in_array( $k, $this->deadend ) ) {
- continue;
- }
-
- if ( isset( $this->name2id[$k] ) ) {
- continue;
- }
-
- # Hey, new category!
- $layer[$k] = $k;
- }
-
- $this->next = array();
-
- # Find the IDs of all category pages in $layer, if they exist
- if ( count( $layer ) > 0 ) {
- $res = $this->dbr->select(
- /* FROM */ 'page',
- /* SELECT */ array( 'page_id', 'page_title' ),
- /* WHERE */ array( 'page_namespace' => NS_CATEGORY, 'page_title' => $layer ),
- __METHOD__ . '-2'
- );
- foreach ( $res as $o ) {
- $id = $o->page_id;
- $name = $o->page_title;
- $this->name2id[$name] = $id;
- $this->next[] = $id;
- unset( $layer[$name] );
- }
- }
-
- # Mark dead ends
- foreach ( $layer as $v ) {
- $this->deadend[$v] = $v;
- }
-
- wfProfileOut( __METHOD__ );
- }
-}
* Sets an external MIME detector program. The command must print only
* the MIME type to standard output.
* The name of the file to process will be appended to the command given here.
- * If not set or NULL, mime_content_type will be used if available.
+ * If not set or NULL, PHP's fileinfo extension will be used if available.
*
* @par Example:
* @code
'hash' => array( 'class' => 'HashBagOStuff' ),
);
+/**
+ * Map of bloom filter store names to configuration arrays.
+ *
+ * Example:
+ * $wgBloomFilterStores['main'] = array(
+ * 'cacheId' => 'main-v1',
+ * 'class' => 'BloomCacheRedis',
+ * 'redisServers' => array( '127.0.0.1:6379' ),
+ * 'redisConfig' => array( 'connectTimeout' => 2 )
+ * );
+ *
+ * A primary bloom filter must be created manually.
+ * Example in eval.php:
+ * <code>
+ * BloomCache::get( 'main' )->init( 'shared', 1000000000, .001 );
+ * </code>
+ * The size should be as large as practical given wiki size and resources.
+ *
+ * @since 1.24
+ */
+$wgBloomFilterStores = array();
+
/**
* The expiry time for the parser cache, in seconds.
* The default is 86400 (one day).
*/
$wgDisableTitleConversion = false;
-/**
- * Whether to enable canonical language links in meta data.
- */
-$wgCanonicalLanguageLinks = true;
-
/**
* Default variant code, if false, the default will be the language code
*/
/**
* URL schemes that should be recognized as valid by wfParseUrl().
+ *
+ * WARNING: Do not add 'file:' to this or internal file links will be broken.
+ * Instead, if you want to support file links, add 'file://'. The same applies
+ * to any other protocols with the same name as a namespace. See bug #44011 for
+ * more information.
+ *
* @see wfParseUrl
*/
$wgUrlProtocols = array(
/** @var bool|stdClass */
protected $lastDelete;
- /** @var bool */
- protected $mTokenOk = false;
+ /** @var bool
+ * This is public because SemanticForms uses it (bug 67522).
+ * However, please consider using this property publicly
+ * to be deprecated.
+ * @protected
+ */
+ public $mTokenOk = false;
/** @var bool */
protected $mTokenOkExceptSuffix = false;
$wgOut->addHTML( $this->editFormTextBeforeContent );
- if ( $this->contentModel === CONTENT_MODEL_WIKITEXT &&
- $showToolbar && $wgUser->getOption( 'showtoolbar' ) )
- {
+ if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) {
$wgOut->addHTML( EditPage::getEditToolbar() );
}
);
} elseif ( $wgUser->isAnon() ) {
if ( $this->formtype != 'preview' ) {
- $wgOut->wrapWikiMsg( "<div id=\"mw-anon-edit-warning\">\n$1</div>", 'anoneditwarning' );
+ $wgOut->wrapWikiMsg(
+ "<div id='mw-anon-edit-warning'>\n$1\n</div>",
+ array( 'anoneditwarning',
+ // Log-in link
+ '{{fullurl:Special:UserLogin|returnto={{FULLPAGENAMEE}}}}',
+ // Sign-up link
+ '{{fullurl:Special:UserLogin/signup|returnto={{FULLPAGENAMEE}}}}' )
+ );
} else {
- $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>", 'anonpreviewwarning' );
+ $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>",
+ 'anonpreviewwarning'
+ );
}
} else {
if ( $this->isCssJsSubpage ) {
* up top, or false if this is the comment summary
* down below the textarea
* @param string $summary The text of the summary to display
- * @return string
*/
protected function showSummaryInput( $isSubjectPreview, $summary = "" ) {
global $wgOut, $wgContLang;
* Get the copyright warning
*
* Renamed to getCopyrightWarning(), old name kept around for backwards compatibility
+ * @return string
*/
protected function getCopywarn() {
return self::getCopyrightWarning( $this->mTitle );
}
/**
- * Output the initial XML headers with a stylesheet for legibility
- * if someone finds it in a browser.
+ * Output the initial XML headers.
*/
protected function outXmlHeader() {
- global $wgStylePath, $wgStyleVersion;
-
$this->httpHeaders();
echo '<?xml version="1.0"?>' . "\n";
- echo '<?xml-stylesheet type="text/css" href="' .
- htmlspecialchars( wfExpandUrl(
- "$wgStylePath/common/feed.css?$wgStyleVersion",
- PROTO_CURRENT
- ) ) .
- '"?' . ">\n";
}
}
if ( !function_exists( 'mb_substr' ) ) {
/**
* @codeCoverageIgnore
+ * @see Fallback::mb_substr
* @return string
*/
function mb_substr( $str, $start, $count = 'end' ) {
/**
* @codeCoverageIgnore
+ * @see Fallback::mb_substr_split_unicode
* @return int
*/
function mb_substr_split_unicode( $str, $splitPos ) {
if ( !function_exists( 'mb_strlen' ) ) {
/**
* @codeCoverageIgnore
+ * @see Fallback::mb_strlen
* @return int
*/
function mb_strlen( $str, $enc = '' ) {
if ( !function_exists( 'mb_strpos' ) ) {
/**
* @codeCoverageIgnore
+ * @see Fallback::mb_strpos
* @return int
*/
function mb_strpos( $haystack, $needle, $offset = 0, $encoding = '' ) {
if ( !function_exists( 'mb_strrpos' ) ) {
/**
* @codeCoverageIgnore
+ * @see Fallback::mb_strrpos
* @return int
*/
function mb_strrpos( $haystack, $needle, $offset = 0, $encoding = '' ) {
);
if ( extension_loaded( 'gmp' ) && ( $engine == 'auto' || $engine == 'gmp' ) ) {
- $result = gmp_strval( gmp_init( $input, $sourceBase ), $destBase );
+ // Removing leading zeros works around broken base detection code in
+ // some PHP versions (see <https://bugs.php.net/bug.php?id=50175> and
+ // <https://bugs.php.net/bug.php?id=55398>).
+ $result = gmp_strval( gmp_init( ltrim( $input, '0' ), $sourceBase ), $destBase );
} elseif ( extension_loaded( 'bcmath' ) && ( $engine == 'auto' || $engine == 'bcmath' ) ) {
$decimal = '0';
foreach ( str_split( strtolower( $input ) ) as $char ) {
* @param string $name Name attribute
* @param bool $checked Whether the checkbox is checked or not
* @param array $attribs Array of additional attributes
+ * @return string
*/
public static function check( $name, $checked = false, array $attribs = array() ) {
if ( isset( $attribs['value'] ) ) {
* @param string $name Name attribute
* @param bool $checked Whether the checkbox is checked or not
* @param array $attribs Array of additional attributes
+ * @return string
*/
public static function radio( $name, $checked = false, array $attribs = array() ) {
if ( isset( $attribs['value'] ) ) {
* @param string $label Contents of the label
* @param string $id ID of the element being labeled
* @param array $attribs Additional attributes
+ * @return string
*/
public static function label( $label, $id, array $attribs = array() ) {
$attribs += array(
return true;
}
- /**
- * @return mixed
- */
function importLogItem() {
$dbw = wfGetDB( DB_MASTER );
# @todo FIXME: This will not record autoblocks
/**
* Identical to link(), except $options defaults to 'known'.
+ * @see Linker::link
* @return string
*/
public static function linkKnown(
$thumb15 = $file->transform( $hp15 );
$thumb20 = $file->transform( $hp20 );
- if ( $thumb15 && $thumb15->getUrl() !== $thumb->getUrl() ) {
+ if ( $thumb15 && !$thumb15->isError() && $thumb15->getUrl() !== $thumb->getUrl() ) {
$thumb->responsiveUrls['1.5'] = $thumb15->getUrl();
}
- if ( $thumb20 && $thumb20->getUrl() !== $thumb->getUrl() ) {
+ if ( $thumb20 && !$thumb20->isError() && $thumb20->getUrl() !== $thumb->getUrl() ) {
$thumb->responsiveUrls['2'] = $thumb20->getUrl();
}
}
/**
* Get a 2-d hashtable for this array
+ * @return array
*/
function getHash() {
if ( is_null( $this->hash ) ) {
/**
* Get the base regex
+ * @return array
*/
function getBaseRegex() {
if ( is_null( $this->baseRegex ) ) {
/**
* Get an unanchored regex that does not match parameters
+ * @return array
*/
function getRegex() {
if ( is_null( $this->regex ) ) {
*/
class MediaWiki {
/**
- * @todo Fold $output, etc, into this
* @var IContextSource
*/
private $context;
*/
private $config;
- /**
- * @param null|WebRequest $x
- * @return WebRequest
- */
- public function request( WebRequest $x = null ) {
- $old = $this->context->getRequest();
- if ( $x ) {
- $this->context->setRequest( $x );
- }
- return $old;
- }
-
- /**
- * @param null|OutputPage $x
- * @return OutputPage
- */
- public function output( OutputPage $x = null ) {
- $old = $this->context->getOutput();
- if ( $x ) {
- $this->context->setOutput( $x );
- }
- return $old;
- }
-
/**
* @param IContextSource|null $context
*/
$this->context->setTitle( $title );
$wgTitle = $title;
- $dispatcher = new AjaxDispatcher();
- $dispatcher->performAction();
+ $dispatcher = new AjaxDispatcher( $this->config );
+ $dispatcher->performAction( $this->context->getUser() );
wfProfileOut( __METHOD__ );
return;
}
$query = array( 'title' => 'Special:RunJobs',
'tasks' => 'jobs', 'maxjobs' => $n, 'sigexpiry' => time() + 5 );
- $query['signature'] = SpecialRunJobs::getQuerySignature( $query );
+ $query['signature'] = SpecialRunJobs::getQuerySignature(
+ $query, $this->config->get( 'SecretKey' ) );
$errno = $errstr = null;
$info = wfParseUrl( $this->config->get( 'Server' ) );
* constituent messages or the resource itself is changed.
*/
class MessageBlobStore {
+ /**
+ * Get the singleton instance
+ *
+ * @since 1.24
+ * @return MessageBlobStore
+ */
+ public static function getInstance() {
+ static $instance = null;
+ if ( $instance === null ) {
+ $instance = new self;
+ }
+
+ return $instance;
+ }
+
/**
* Get the message blobs for a set of modules
*
* @param string $lang Language code
* @return array An array mapping module names to message blobs
*/
- public static function get( ResourceLoader $resourceLoader, $modules, $lang ) {
+ public function get( ResourceLoader $resourceLoader, $modules, $lang ) {
wfProfileIn( __METHOD__ );
if ( !count( $modules ) ) {
wfProfileOut( __METHOD__ );
return array();
}
// Try getting from the DB first
- $blobs = self::getFromDB( $resourceLoader, array_keys( $modules ), $lang );
+ $blobs = $this->getFromDB( $resourceLoader, array_keys( $modules ), $lang );
// Generate blobs for any missing modules and store them in the DB
$missing = array_diff( array_keys( $modules ), array_keys( $blobs ) );
foreach ( $missing as $name ) {
- $blob = self::insertMessageBlob( $name, $modules[$name], $lang );
+ $blob = $this->insertMessageBlob( $name, $modules[$name], $lang );
if ( $blob ) {
$blobs[$name] = $blob;
}
* @param string $lang Language code
* @return mixed Message blob or false if the module has no messages
*/
- public static function insertMessageBlob( $name, ResourceLoaderModule $module, $lang ) {
- $blob = self::generateMessageBlob( $module, $lang );
+ public function insertMessageBlob( $name, ResourceLoaderModule $module, $lang ) {
+ $blob = $this->generateMessageBlob( $module, $lang );
if ( !$blob ) {
return false;
* @return string Regenerated message blob, or null if there was no blob for
* the given module/language pair.
*/
- public static function updateModule( $name, ResourceLoaderModule $module, $lang ) {
+ public function updateModule( $name, ResourceLoaderModule $module, $lang ) {
$dbw = wfGetDB( DB_MASTER );
$row = $dbw->selectRow( 'msg_resource', 'mr_blob',
array( 'mr_resource' => $name, 'mr_lang' => $lang ),
// Save the old and new blobs for later
$oldBlob = $row->mr_blob;
- $newBlob = self::generateMessageBlob( $module, $lang );
+ $newBlob = $this->generateMessageBlob( $module, $lang );
try {
$newRow = array(
*
* @param string $key Message key
*/
- public static function updateMessage( $key ) {
+ public function updateMessage( $key ) {
try {
$dbw = wfGetDB( DB_MASTER );
// in one iteration.
$updates = null;
do {
- $updates = self::getUpdatesForMessage( $key, $updates );
+ $updates = $this->getUpdatesForMessage( $key, $updates );
foreach ( $updates as $k => $update ) {
// Update the row on the condition that it
}
}
- public static function clear() {
+ public function clear() {
// TODO: Give this some more thought
try {
// Not using TRUNCATE, because that needs extra permissions,
* @param array $prevUpdates Updates queue to refresh or null to build a fresh update queue
* @return array Updates queue
*/
- private static function getUpdatesForMessage( $key, $prevUpdates = null ) {
+ private function getUpdatesForMessage( $key, $prevUpdates = null ) {
$dbw = wfGetDB( DB_MASTER );
if ( is_null( $prevUpdates ) ) {
'resource' => $row->mr_resource,
'lang' => $row->mr_lang,
'timestamp' => $row->mr_timestamp,
- 'newBlob' => self::reencodeBlob( $row->mr_blob, $key, $row->mr_lang )
+ 'newBlob' => $this->reencodeBlob( $row->mr_blob, $key, $row->mr_lang )
);
}
* @param string $lang Language code
* @return string Message blob with $key replaced with its new value
*/
- private static function reencodeBlob( $blob, $key, $lang ) {
+ private function reencodeBlob( $blob, $key, $lang ) {
$decoded = FormatJson::decode( $blob, true );
$decoded[$key] = wfMessage( $key )->inLanguage( $lang )->plain();
* @throws MWException
* @return array Array mapping module names to blobs
*/
- private static function getFromDB( ResourceLoader $resourceLoader, $modules, $lang ) {
- global $wgCacheEpoch;
-
+ private function getFromDB( ResourceLoader $resourceLoader, $modules, $lang ) {
+ $config = $resourceLoader->getConfig();
$retval = array();
$dbr = wfGetDB( DB_SLAVE );
$res = $dbr->select( 'msg_resource',
}
// Update the module's blobs if the set of messages changed or if the blob is
- // older than $wgCacheEpoch
+ // older than the CacheEpoch setting
$keys = array_keys( FormatJson::decode( $row->mr_blob, true ) );
$values = array_values( array_unique( $module->getMessages() ) );
if ( $keys !== $values
- || wfTimestamp( TS_MW, $row->mr_timestamp ) <= $wgCacheEpoch
+ || wfTimestamp( TS_MW, $row->mr_timestamp ) <= $config->get( 'CacheEpoch' )
) {
- $retval[$row->mr_resource] = self::updateModule( $row->mr_resource, $module, $lang );
+ $retval[$row->mr_resource] = $this->updateModule( $row->mr_resource, $module, $lang );
} else {
$retval[$row->mr_resource] = $row->mr_blob;
}
* @param string $lang Language code
* @return string JSON object
*/
- private static function generateMessageBlob( ResourceLoaderModule $module, $lang ) {
+ private function generateMessageBlob( ResourceLoaderModule $module, $lang ) {
$messages = array();
foreach ( $module->getMessages() as $key ) {
*/
private $mExtraInfo = '';
+ /** @var Config */
+ private $mConfig;
+
/** @var MimeMagic The singleton instance
*/
private static $instance = null;
/** Initializes the MimeMagic object. This is called by MimeMagic::singleton().
*
* This constructor parses the mime.types and mime.info files and build internal mappings.
+ *
+ * @todo Make this constructor private once everything uses the singleton instance
+ * @param Config $config
*/
- function __construct() {
+ function __construct( Config $config = null ) {
+ if ( !$config ) {
+ wfDebug( __METHOD__ . ' called with no Config instance passed to it' );
+ $config = ConfigFactory::getDefaultInstance()->makeConfig( 'main' );
+ }
+ $this->mConfig = $config;
+
/**
* --- load mime.types ---
*/
- global $wgMimeTypeFile, $IP;
+ global $IP;
# Allow media handling extensions adding MIME-types and MIME-info
wfRunHooks( 'MimeMagicInit', array( $this ) );
$types = MM_WELL_KNOWN_MIME_TYPES;
- if ( $wgMimeTypeFile == 'includes/mime.types' ) {
- $wgMimeTypeFile = "$IP/$wgMimeTypeFile";
+ $mimeTypeFile = $this->mConfig->get( 'MimeTypeFile' );
+ if ( $mimeTypeFile == 'includes/mime.types' ) {
+ $mimeTypeFile = "$IP/$mimeTypeFile";
}
- if ( $wgMimeTypeFile ) {
- if ( is_file( $wgMimeTypeFile ) and is_readable( $wgMimeTypeFile ) ) {
- wfDebug( __METHOD__ . ": loading mime types from $wgMimeTypeFile\n" );
+ if ( $mimeTypeFile ) {
+ if ( is_file( $mimeTypeFile ) and is_readable( $mimeTypeFile ) ) {
+ wfDebug( __METHOD__ . ": loading mime types from $mimeTypeFile\n" );
$types .= "\n";
- $types .= file_get_contents( $wgMimeTypeFile );
+ $types .= file_get_contents( $mimeTypeFile );
} else {
- wfDebug( __METHOD__ . ": can't load mime types from $wgMimeTypeFile\n" );
+ wfDebug( __METHOD__ . ": can't load mime types from $mimeTypeFile\n" );
}
} else {
wfDebug( __METHOD__ . ": no mime types file defined, using build-ins only.\n" );
* --- load mime.info ---
*/
- global $wgMimeInfoFile;
- if ( $wgMimeInfoFile == 'includes/mime.info' ) {
- $wgMimeInfoFile = "$IP/$wgMimeInfoFile";
+ $mimeInfoFile = $this->mConfig->get( 'MimeInfoFile' );
+ if ( $mimeInfoFile == 'includes/mime.info' ) {
+ $mimeInfoFile = "$IP/$mimeInfoFile";
}
$info = MM_WELL_KNOWN_MIME_INFO;
- if ( $wgMimeInfoFile ) {
- if ( is_file( $wgMimeInfoFile ) and is_readable( $wgMimeInfoFile ) ) {
- wfDebug( __METHOD__ . ": loading mime info from $wgMimeInfoFile\n" );
+ if ( $mimeInfoFile ) {
+ if ( is_file( $mimeInfoFile ) and is_readable( $mimeInfoFile ) ) {
+ wfDebug( __METHOD__ . ": loading mime info from $mimeInfoFile\n" );
$info .= "\n";
- $info .= file_get_contents( $wgMimeInfoFile );
+ $info .= file_get_contents( $mimeInfoFile );
} else {
- wfDebug( __METHOD__ . ": can't load mime info from $wgMimeInfoFile\n" );
+ wfDebug( __METHOD__ . ": can't load mime info from $mimeInfoFile\n" );
}
} else {
wfDebug( __METHOD__ . ": no mime info file defined, using build-ins only.\n" );
*/
public static function singleton() {
if ( self::$instance === null ) {
- self::$instance = new MimeMagic;
+ self::$instance = new MimeMagic(
+ ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+ );
}
return self::$instance;
}
*/
$xml = new XmlTypeCheck( $file );
if ( $xml->wellFormed ) {
- global $wgXMLMimeTypes;
- if ( isset( $wgXMLMimeTypes[$xml->getRootElement()] ) ) {
- return $wgXMLMimeTypes[$xml->getRootElement()];
+ $xmlMimeTypes = $this->mConfig->get( 'XMLMimeTypes' );
+ if ( isset( $xmlMimeTypes[$xml->getRootElement()] ) ) {
+ return $xmlMimeTypes[$xml->getRootElement()];
} else {
return 'application/xml';
}
/**
* Internal MIME type detection. Detection is done using an external
* program, if $wgMimeDetectorCommand is set. Otherwise, the fileinfo
- * extension and mime_content_type are tried (in this order), if they
- * are available. If the detections fails and $ext is not false, the MIME
- * type is guessed from the file extension, using guessTypesForExtension.
+ * extension is tried if it is available. If detection fails and $ext
+ * is not false, the MIME type is guessed from the file extension,
+ * using guessTypesForExtension.
*
* If the MIME type is still unknown, getimagesize is used to detect the
* MIME type if the file is an image. If no MIME type can be determined,
* @return string The MIME type of $file
*/
private function detectMimeType( $file, $ext = true ) {
- global $wgMimeDetectorCommand;
-
/** @todo Make $ext default to false. Or better, remove it. */
if ( $ext ) {
wfDebug( __METHOD__ . ": WARNING: use of the \$ext parameter is deprecated. "
. "Use improveTypeFromExtension(\$mime, \$ext) instead.\n" );
}
+ $mimeDetectorCommand = $this->mConfig->get( 'MimeDetectorCommand' );
$m = null;
- if ( $wgMimeDetectorCommand ) {
+ if ( $mimeDetectorCommand ) {
$args = wfEscapeShellArg( $file );
- $m = wfShellExec( "$wgMimeDetectorCommand $args" );
+ $m = wfShellExec( "$mimeDetectorCommand $args" );
} elseif ( function_exists( "finfo_open" ) && function_exists( "finfo_file" ) ) {
-
- # This required the fileinfo extension by PECL,
- # see http://pecl.php.net/package/fileinfo
- # This must be compiled into PHP
- #
- # finfo is the official replacement for the deprecated
- # mime_content_type function, see below.
- #
- # If you may need to load the fileinfo extension at runtime, set
- # $wgLoadFileinfoExtension in LocalSettings.php
-
- $mime_magic_resource = finfo_open( FILEINFO_MIME ); /* return MIME type ala mimetype extension */
+ $mime_magic_resource = finfo_open( FILEINFO_MIME );
if ( $mime_magic_resource ) {
$m = finfo_file( $mime_magic_resource, $file );
} else {
wfDebug( __METHOD__ . ": finfo_open failed on " . FILEINFO_MIME . "!\n" );
}
- } elseif ( function_exists( "mime_content_type" ) ) {
-
- # NOTE: this function is available since PHP 4.3.0, but only if
- # PHP was compiled with --with-mime-magic or, before 4.3.2, with
- # --enable-mime-magic.
- #
- # On Windows, you must set mime_magic.magicfile in php.ini to point
- # to the mime.magic file bundled with PHP; sometimes, this may even
- # be needed under *nix.
- #
- # Also note that this has been DEPRECATED in favor of the fileinfo
- # extension by PECL, see above.
- # See http://www.php.net/manual/en/ref.mime-magic.php for details.
-
- $m = mime_content_type( $file );
} else {
wfDebug( __METHOD__ . ": no magic mime detector found!\n" );
}
);
} else {
$links['html'] .= Html::inlineScript(
- $resourceLoader->makeModuleResponse( $context, $grpModules )
+ ResourceLoader::makeLoaderConditionalScript(
+ $resourceLoader->makeModuleResponse( $context, $grpModules )
+ )
);
}
$links['html'] .= "\n";
}
# Language variants
- if ( !$config->get( 'DisableLangConversion' ) && $config->get( 'CanonicalLanguageLinks' ) ) {
+ if ( !$config->get( 'DisableLangConversion' ) ) {
$lang = $this->getTitle()->getPageLanguage();
if ( $lang->hasVariants() ) {
-
- $urlvar = $lang->getURLVariant();
-
- if ( !$urlvar ) {
- $variants = $lang->getVariants();
- foreach ( $variants as $_v ) {
- $tags["variant-$_v"] = Html::element( 'link', array(
- 'rel' => 'alternate',
- 'hreflang' => wfBCP47( $_v ),
- 'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) )
- );
- }
- } else {
- $canonicalUrl = $this->getTitle()->getLocalURL();
+ $variants = $lang->getVariants();
+ foreach ( $variants as $_v ) {
+ $tags["variant-$_v"] = Html::element( 'link', array(
+ 'rel' => 'alternate',
+ 'hreflang' => wfBCP47( $_v ),
+ 'href' => $this->getTitle()->getLocalURL( array( 'variant' => $_v ) ) )
+ );
}
}
+ # x-default link per https://support.google.com/webmasters/answer/189077?hl=en
+ $tags["variant-x-default"] = Html::element( 'link', array(
+ 'rel' => 'alternate',
+ 'hreflang' => 'x-default',
+ 'href' => $this->getTitle()->getLocalURL() ) );
}
# Copyright
if ( $flip === 'flip' && $this->getLanguage()->isRTL() ) {
# If wanted, and the interface is right-to-left, flip the CSS
$style_css = CSSJanus::transform( $style_css, true, false );
+ } else {
+ $style_css = CSSJanus::nullTransform( $style_css );
}
$this->mInlineStyles .= Html::inlineStyle( $style_css ) . "\n";
}
$previewedCSS = $this->getRequest()->getText( 'wpTextbox1' );
if ( $this->getLanguage()->getDir() !== $wgContLang->getDir() ) {
$previewedCSS = CSSJanus::transform( $previewedCSS, true, false );
+ } else {
+ $previewedCSS = CSSJanus::nullTransform( $previewedCSS );
}
$otherTags .= Html::inlineStyle( $previewedCSS ) . "\n";
} else {
}
$encLogo = htmlspecialchars(
str_replace( '//', '/', $dirname . '/' ) .
- 'skins/common/images/mediawiki.png'
+ 'assets/mediawiki.png'
);
header( "$protocol 500 MediaWiki configuration Error" );
if ( $subpageSearch !== null ) {
// Try matching the full search string as a page name
$specialTitle = Title::makeTitleSafe( NS_SPECIAL, $searchKey );
+ if ( !$specialTitle ) {
+ return array();
+ }
$special = SpecialPageFactory::getPage( $specialTitle->getText() );
if ( $special ) {
$subpages = $special->prefixSearchSubpages( $subpageSearch, $limit );
/** @var array Map of action to the expiry time of the existing protection */
protected $mExistingExpiry = array();
- function __construct( Page $article ) {
- global $wgUser;
+ /** @var IContextSource */
+ private $mContext;
+
+ function __construct( Article $article ) {
// Set instance variables.
$this->mArticle = $article;
$this->mTitle = $article->getTitle();
$this->mApplicableTypes = $this->mTitle->getRestrictionTypes();
+ $this->mContext = $article->getContext();
// Check if the form should be disabled.
// If it is, the form will be available in read-only to show levels.
- $this->mPermErrors = $this->mTitle->getUserPermissionsErrors( 'protect', $wgUser );
+ $this->mPermErrors = $this->mTitle->getUserPermissionsErrors(
+ 'protect', $this->mContext->getUser()
+ );
if ( wfReadOnly() ) {
$this->mPermErrors[] = array( 'readonlytext', wfReadOnlyReason() );
}
* Loads the current state of protection into the object.
*/
function loadData() {
- global $wgRequest, $wgUser;
-
- $levels = MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace(), $wgUser );
+ $levels = MWNamespace::getRestrictionLevels(
+ $this->mTitle->getNamespace(), $this->mContext->getUser()
+ );
$this->mCascade = $this->mTitle->areRestrictionsCascading();
- $this->mReason = $wgRequest->getText( 'mwProtect-reason' );
- $this->mReasonSelection = $wgRequest->getText( 'wpProtectReasonSelection' );
- $this->mCascade = $wgRequest->getBool( 'mwProtect-cascade', $this->mCascade );
+ $request = $this->mContext->getRequest();
+ $this->mReason = $request->getText( 'mwProtect-reason' );
+ $this->mReasonSelection = $request->getText( 'wpProtectReasonSelection' );
+ $this->mCascade = $request->getBool( 'mwProtect-cascade', $this->mCascade );
foreach ( $this->mApplicableTypes as $action ) {
// @todo FIXME: This form currently requires individual selections,
}
$this->mExistingExpiry[$action] = $existingExpiry;
- $requestExpiry = $wgRequest->getText( "mwProtect-expiry-$action" );
- $requestExpirySelection = $wgRequest->getVal( "wpProtectExpirySelection-$action" );
+ $requestExpiry = $request->getText( "mwProtect-expiry-$action" );
+ $requestExpirySelection = $request->getVal( "wpProtectExpirySelection-$action" );
if ( $requestExpiry ) {
// Custom expiry takes precedence
$this->mExpirySelection[$action] = 'infinite';
}
- $val = $wgRequest->getVal( "mwProtect-level-$action" );
+ $val = $request->getVal( "mwProtect-level-$action" );
if ( isset( $val ) && in_array( $val, $levels ) ) {
$this->mRestrictions[$action] = $val;
}
* Main entry point for action=protect and action=unprotect
*/
function execute() {
- global $wgRequest, $wgOut;
-
if ( MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace() ) === array( '' ) ) {
throw new ErrorPageError( 'protect-badnamespace-title', 'protect-badnamespace-text' );
}
- if ( $wgRequest->wasPosted() ) {
+ if ( $this->mContext->getRequest()->wasPosted() ) {
if ( $this->save() ) {
$q = $this->mArticle->isRedirect() ? 'redirect=no' : '';
- $wgOut->redirect( $this->mTitle->getFullURL( $q ) );
+ $this->mContext->getOutput()->redirect( $this->mTitle->getFullURL( $q ) );
}
} else {
$this->show();
* @param string $err Error message or null if there's no error
*/
function show( $err = null ) {
- global $wgOut;
-
- $wgOut->setRobotPolicy( 'noindex,nofollow' );
- $wgOut->addBacklinkSubtitle( $this->mTitle );
+ $out = $this->mContext->getOutput();
+ $out->setRobotPolicy( 'noindex,nofollow' );
+ $out->addBacklinkSubtitle( $this->mTitle );
if ( is_array( $err ) ) {
- $wgOut->wrapWikiMsg( "<p class='error'>\n$1\n</p>\n", $err );
+ $out->wrapWikiMsg( "<p class='error'>\n$1\n</p>\n", $err );
} elseif ( is_string( $err ) ) {
- $wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
+ $out->addHTML( "<p class='error'>{$err}</p>\n" );
}
if ( $this->mTitle->getRestrictionTypes() === array() ) {
// No restriction types available for the current title
// this might happen if an extension alters the available types
- $wgOut->setPageTitle( wfMessage(
+ $out->setPageTitle( wfMessage(
'protect-norestrictiontypes-title',
$this->mTitle->getPrefixedText()
) );
- $wgOut->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
+ $out->addWikiText( wfMessage( 'protect-norestrictiontypes-text' )->text() );
// Show the log in case protection was possible once
- $this->showLogExtract( $wgOut );
+ $this->showLogExtract( $out );
// return as there isn't anything else we can do
return;
}
}
/** @todo FIXME: i18n issue, should use formatted number. */
- $wgOut->wrapWikiMsg(
+ $out->wrapWikiMsg(
"<div id=\"mw-protect-cascadeon\">\n$1\n" . $titles . "</div>",
array( 'protect-cascadeon', count( $cascadeSources ) )
);
# Show an appropriate message if the user isn't allowed or able to change
# the protection settings at this time
if ( $this->disabled ) {
- $wgOut->setPageTitle(
+ $out->setPageTitle(
wfMessage( 'protect-title-notallowed',
$this->mTitle->getPrefixedText() )
);
- $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $this->mPermErrors, 'protect' ) );
+ $out->addWikiText( $out->formatPermissionsErrorMessage( $this->mPermErrors, 'protect' ) );
} else {
- $wgOut->setPageTitle( wfMessage( 'protect-title', $this->mTitle->getPrefixedText() ) );
- $wgOut->addWikiMsg( 'protect-text',
+ $out->setPageTitle( wfMessage( 'protect-title', $this->mTitle->getPrefixedText() ) );
+ $out->addWikiMsg( 'protect-text',
wfEscapeWikiText( $this->mTitle->getPrefixedText() ) );
}
- $wgOut->addHTML( $this->buildForm() );
- $this->showLogExtract( $wgOut );
+ $out->addHTML( $this->buildForm() );
+ $this->showLogExtract( $out );
}
/**
* @return bool Success
*/
function save() {
- global $wgRequest, $wgUser, $wgOut;
-
# Permission check!
if ( $this->disabled ) {
$this->show();
return false;
}
- $token = $wgRequest->getVal( 'wpEditToken' );
- if ( !$wgUser->matchEditToken( $token, array( 'protect', $this->mTitle->getPrefixedDBkey() ) ) ) {
+ $request = $this->mContext->getRequest();
+ $user = $this->mContext->getUser();
+ $out = $this->mContext->getOutput();
+ $token = $request->getVal( 'wpEditToken' );
+ if ( !$user->matchEditToken( $token, array( 'protect', $this->mTitle->getPrefixedDBkey() ) ) ) {
$this->show( array( 'sessionfailure' ) );
return false;
}
}
}
- $this->mCascade = $wgRequest->getBool( 'mwProtect-cascade' );
+ $this->mCascade = $request->getBool( 'mwProtect-cascade' );
$status = $this->mArticle->doUpdateRestrictions(
$this->mRestrictions,
$expiry,
$this->mCascade,
$reasonstr,
- $wgUser
+ $user
);
if ( !$status->isOK() ) {
- $this->show( $wgOut->parseInline( $status->getWikiText() ) );
+ $this->show( $out->parseInline( $status->getWikiText() ) );
return false;
}
return false;
}
- WatchAction::doWatchOrUnwatch( $wgRequest->getCheck( 'mwProtectWatch' ), $this->mTitle, $wgUser );
+ WatchAction::doWatchOrUnwatch( $request->getCheck( 'mwProtectWatch' ), $this->mTitle, $user );
return true;
}
* @return string HTML form
*/
function buildForm() {
- global $wgUser, $wgLang, $wgOut, $wgCascadingRestrictionLevels;
-
+ $user = $this->mContext->getUser();
+ $output = $this->mContext->getOutput();
+ $lang = $this->mContext->getLanguage();
+ $cascadingRestrictionLevels = $this->mContext->getConfig()->get( 'CascadingRestrictionLevels' );
$out = '';
if ( !$this->disabled ) {
- $wgOut->addModules( 'mediawiki.legacy.protect' );
- $wgOut->addJsConfigVars( 'wgCascadeableLevels', $wgCascadingRestrictionLevels );
+ $output->addModules( 'mediawiki.legacy.protect' );
+ $output->addJsConfigVars( 'wgCascadeableLevels', $cascadingRestrictionLevels );
$out .= Xml::openElement( 'form', array( 'method' => 'post',
'action' => $this->mTitle->getLocalURL( 'action=protect' ),
'id' => 'mw-Protect-Form', 'onsubmit' => 'ProtectionForm.enableUnchainedInputs(true)' ) );
$expiryFormOptions = '';
if ( $this->mExistingExpiry[$action] && $this->mExistingExpiry[$action] != 'infinity' ) {
- $timestamp = $wgLang->timeanddate( $this->mExistingExpiry[$action], true );
- $d = $wgLang->date( $this->mExistingExpiry[$action], true );
- $t = $wgLang->time( $this->mExistingExpiry[$action], true );
+ $timestamp = $lang->timeanddate( $this->mExistingExpiry[$action], true );
+ $d = $lang->date( $this->mExistingExpiry[$action], true );
+ $t = $lang->time( $this->mExistingExpiry[$action], true );
$expiryFormOptions .=
Xml::option(
wfMessage( 'protect-existing-expiry', $timestamp, $d, $t )->text(),
"</td>
</tr>";
# Disallow watching is user is not logged in
- if ( $wgUser->isLoggedIn() ) {
+ if ( $user->isLoggedIn() ) {
$out .= "
<tr>
<td></td>
<td class='mw-input'>" .
Xml::checkLabel( wfMessage( 'watchthis' )->text(),
'mwProtectWatch', 'mwProtectWatch',
- $wgUser->isWatched( $this->mTitle ) || $wgUser->getOption( 'watchdefault' ) ) .
+ $user->isWatched( $this->mTitle ) || $user->getOption( 'watchdefault' ) ) .
"</td>
</tr>";
}
}
$out .= Xml::closeElement( 'fieldset' );
- if ( $wgUser->isAllowed( 'editinterface' ) ) {
+ if ( $user->isAllowed( 'editinterface' ) ) {
$title = Title::makeTitle( NS_MEDIAWIKI, 'Protect-dropdown' );
$link = Linker::link(
$title,
if ( !$this->disabled ) {
$out .= Html::hidden(
'wpEditToken',
- $wgUser->getEditToken( array( 'protect', $this->mTitle->getPrefixedDBkey() ) )
+ $user->getEditToken( array( 'protect', $this->mTitle->getPrefixedDBkey() ) )
);
$out .= Xml::closeElement( 'form' );
- $wgOut->addScript( $this->buildCleanupScript() );
+ $output->addScript( $this->buildCleanupScript() );
}
return $out;
* @return string HTML fragment
*/
function buildSelector( $action, $selected ) {
- global $wgUser;
-
// If the form is disabled, display all relevant levels. Otherwise,
// just show the ones this user can use.
$levels = MWNamespace::getRestrictionLevels( $this->mTitle->getNamespace(),
- $this->disabled ? null : $wgUser
+ $this->disabled ? null : $this->mContext->getUser()
);
$id = 'mwProtect-level-' . $action;
* instead of just plain userrights
* @return bool
*/
- public static function userCanBitfield( $bitfield, $field, User $user = null ,
+ public static function userCanBitfield( $bitfield, $field, User $user = null,
Title $title = null
) {
if ( $bitfield & $field ) { // aspect is deleted
} else {
$text = $title->getPrefixedText();
wfDebug( "Checking for $permissionlist on $text due to $field match on $bitfield\n" );
- foreach( $permissions as $perm ) {
+ foreach ( $permissions as $perm ) {
if ( $title->userCan( $perm, $user ) ) {
return true;
}
* Regular expression to match HTML/XML attribute pairs within a tag.
* Allows some... latitude.
* Used in Sanitizer::fixTagAttributes and Sanitizer::decodeTagAttributes
+ * @return string
*/
static function getAttribsRegex() {
if ( self::$attribsRegex === null ) {
global $wgExperimentalHtmlIds;
$options = (array)$options;
+ $id = Sanitizer::decodeCharReferences( $id );
+
if ( $wgExperimentalHtmlIds && !in_array( 'legacy', $options ) ) {
- $id = Sanitizer::decodeCharReferences( $id );
$id = preg_replace( '/[ \t\n\r\f_\'"&#%]+/', '_', $id );
$id = trim( $id, '_' );
if ( $id === '' ) {
'%' => '.'
);
- $id = urlencode( Sanitizer::decodeCharReferences( strtr( $id, ' ', '_' ) ) );
+ $id = urlencode( strtr( $id, ' ', '_' ) );
$id = str_replace( array_keys( $replace ), array_values( $replace ), $id );
if ( !preg_match( '/^[a-zA-Z]/', $id )
// Register skins
// Use a closure to avoid leaking into global state
-call_user_func( function() use ( $wgValidSkinNames ) {
+call_user_func( function () use ( $wgValidSkinNames ) {
$factory = SkinFactory::getDefaultInstance();
foreach ( $wgValidSkinNames as $name => $skin ) {
- $factory->register( $name, $skin, function() use ( $name, $skin ) {
+ $factory->register( $name, $skin, function () use ( $name, $skin ) {
$class = "Skin$skin";
return new $class( $name );
} );
}
// Register a hidden "fallback" skin
- $factory->register( 'fallback', 'Fallback', function() {
+ $factory->register( 'fallback', 'Fallback', function () {
return new SkinFallback;
} );
} );
$wgTitle = null;
/**
- * @deprecated 1.24 Use DeferredUpdates::addUpdate instead
+ * @deprecated since 1.24 Use DeferredUpdates::addUpdate instead
* @var array
*/
$wgDeferredUpdateList = array();
} elseif ( $action == 'delete' ) {
$tempErrors = $this->checkPageRestrictions( 'edit',
$user, array(), $doExpensiveQueries, true );
- if( !$tempErrors ) {
+ if ( !$tempErrors ) {
$tempErrors = $this->checkCascadingSourcesRestrictions( 'edit',
$user, $tempErrors, $doExpensiveQueries, true );
}
$redirectContent = null;
}
+ // bug 57084: log_page should be the ID of the *moved* page
+ $oldid = $this->getArticleID();
+ $logTitle = clone $this;
+
$logEntry = new ManualLogEntry( 'move', $logType );
$logEntry->setPerformer( $wgUser );
- $logEntry->setTarget( $this );
+ $logEntry->setTarget( $logTitle );
$logEntry->setComment( $reason );
$logEntry->setParameters( array(
'4::target' => $nt->getPrefixedText(),
# Truncate for whole multibyte characters.
$comment = $wgContLang->truncate( $comment, 255 );
- $oldid = $this->getArticleID();
-
$dbw = wfGetDB( DB_MASTER );
$newpage = WikiPage::factory( $nt );
* @param int $ts Optional timestamp to convert, default 0 for the current time
*/
public function expirePassword( $ts = 0 ) {
- $this->load();
+ $this->loadPasswords();
$timestamp = wfTimestamp( TS_MW, $ts );
$this->mPasswordExpires = $timestamp;
$this->saveSettings();
/**
* Check if user is allowed to access a feature / make an action
*
- * @internal param \String $varargs permissions to test
+ * @param string $permissions,... Permissions to test
* @return bool True if user is allowed to perform *any* of the given actions
- *
- * @return bool
*/
public function isAllowedAny( /*...*/ ) {
$permissions = func_get_args();
/**
*
- * @internal param $varargs string
+ * @param string $permissions,... Permissions to test
* @return bool True if the user is allowed to perform *all* of the given actions
*/
public function isAllowedAll( /*...*/ ) {
*/
public function checkPassword( $password ) {
global $wgAuth, $wgLegacyEncoding;
+
+ $section = new ProfileSection( __METHOD__ );
+
$this->loadPasswords();
// Certain authentication plugins do NOT want to save
// domain passwords in a mysql database, so we should
// check this (in case $wgAuth->strict() is false).
-
if ( $wgAuth->authenticate( $this->getName(), $password ) ) {
return true;
} elseif ( $wgAuth->strict() ) {
/**
* Check permissions
* @param string $what 'viewmywatchlist' or 'editmywatchlist'
+ * @return bool
*/
private function isAllowed( $what ) {
return !$this->mCheckRights || $this->mUser->isAllowed( $what );
* @param WatchedItem[] $items
* @return bool
*/
- static public function batchAddWatch( array $items ) {
+ public static function batchAddWatch( array $items ) {
$section = new ProfileSection( __METHOD__ );
if ( wfReadOnly() ) {
}
$dbw = wfGetDB( DB_MASTER );
- foreach( array_chunk( $rows, 100 ) as $toInsert ) {
+ foreach ( array_chunk( $rows, 100 ) as $toInsert ) {
// Use INSERT IGNORE to avoid overwriting the notification timestamp
// if there's already an entry for this page
$dbw->insert( 'watchlist', $toInsert, __METHOD__, 'IGNORE' );
continue;
}
$host = $parts[0];
- if ( $parts[1] === false ) {
+ if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) ) {
+ // Bug 70021: Assume that upstream proxy is running on the default
+ // port based on the protocol. We have no reliable way to determine
+ // the actual port in use upstream.
+ $port = $stdPort;
+ } elseif ( $parts[1] === false ) {
if ( isset( $_SERVER['SERVER_PORT'] ) ) {
$port = $_SERVER['SERVER_PORT'];
} // else leave it as $stdPort
/**
* Page on which we're performing the action
+ * @since 1.17
* @var WikiPage|Article|ImagePage|CategoryPage|Page $page
*/
protected $page;
/**
* IContextSource if specified; otherwise we'll use the Context from the Page
+ * @since 1.17
* @var IContextSource $context
*/
protected $context;
/**
* The fields used to create the HTMLForm
+ * @since 1.17
* @var array $fields
*/
protected $fields;
/**
* Get an appropriate Action subclass for the given action
+ * @since 1.17
* @param string $action
* @param Page $page
* @param IContextSource $context
/**
* Check if a given action is recognised, even if it's disabled
+ * @since 1.17
*
* @param string $name Name of an action
* @return bool
/**
* Get the IContextSource in use here
+ * @since 1.17
* @return IContextSource
*/
final public function getContext() {
/**
* Get the WebRequest being used for this instance
+ * @since 1.17
*
* @return WebRequest
*/
/**
* Get the OutputPage being used for this instance
+ * @since 1.17
*
* @return OutputPage
*/
/**
* Shortcut to get the User being used for this instance
+ * @since 1.17
*
* @return User
*/
/**
* Shortcut to get the Skin being used for this instance
+ * @since 1.17
*
* @return Skin
*/
/**
* Shortcut to get the Title object from the page
+ * @since 1.17
+ *
* @return Title
*/
final public function getTitle() {
/**
* Return the name of the action this object responds to
+ * @since 1.17
+ *
* @return string Lowercase name
*/
abstract public function getName();
/**
* Get the permission required to perform this action. Often, but not always,
* the same as the action name
+ * @since 1.17
+ *
* @return string|null
*/
public function getRestriction() {
* Checks if the given user (identified by an object) can perform this action. Can be
* overridden by sub-classes with more complicated permissions schemes. Failures here
* must throw subclasses of ErrorPageError
+ * @since 1.17
*
* @param User $user The user to check, or null to use the context user
* @throws UserBlockedError|ReadOnlyError|PermissionsError
/**
* Whether this action requires the wiki not to be locked
+ * @since 1.17
+ *
* @return bool
*/
public function requiresWrite() {
/**
* Whether this action can still be executed by a blocked user
+ * @since 1.17
+ *
* @return bool
*/
public function requiresUnblock() {
/**
* Set output headers for noindexing etc. This function will not be called through
* the execute() entry point, so only put UI-related stuff in here.
+ * @since 1.17
*/
protected function setHeaders() {
$out = $this->getOutput();
/**
* Returns the description that goes below the \<h1\> tag
+ * @since 1.17
*
* @return string
*/
* The main action entry point. Do all output for display and send it to the context
* output. Do not use globals $wgOut, $wgRequest, etc, in implementations; use
* $this->getOutput(), etc.
+ * @since 1.17
+ *
* @throws ErrorPageError
*/
abstract public function show();
}
}
- /*****************************************************************************
- * ABSTRACT METHODS *
- *****************************************************************************/
+
+ /************************************************************************//**
+ * @name Methods to implement
+ * @{
+ */
/**
* Evaluates the parameters, performs the requested query, and sets up
abstract public function execute();
/**
- * Returns a string that identifies the version of the extending class.
- * Typically includes the class name, the svn revision, timestamp, and
- * last author. Usually done with SVN's Id keyword
- * @return string
- * @deprecated since 1.21, version string is no longer supported
+ * Get the module manager, or null if this module has no sub-modules
+ * @since 1.21
+ * @return ApiModuleManager
*/
- public function getVersion() {
- wfDeprecated( __METHOD__, '1.21' );
+ public function getModuleManager() {
+ return null;
+ }
- return '';
+ /**
+ * If the module may only be used with a certain format module,
+ * it should override this method to return an instance of that formatter.
+ * A value of null means the default format will be used.
+ * @return mixed Instance of a derived class of ApiFormatBase, or null
+ */
+ public function getCustomPrinter() {
+ return null;
}
/**
- * Get the name of the module being executed by this instance
- * @return string
+ * Returns the description string for this module
+ * @return string|array
*/
- public function getModuleName() {
- return $this->mModuleName;
+ protected function getDescription() {
+ return false;
}
/**
- * Get the module manager, or null if this module has no sub-modules
- * @since 1.21
- * @return ApiModuleManager
+ * Returns usage examples for this module. Return false if no examples are available.
+ * @return bool|string|array
*/
- public function getModuleManager() {
- return null;
+ protected function getExamples() {
+ return false;
}
/**
- * Get parameter prefix (usually two letters or an empty string).
- * @return string
+ * @return bool|string|array Returns a false if the module has no help URL,
+ * else returns a (array of) string
*/
- public function getModulePrefix() {
- return $this->mModulePrefix;
+ public function getHelpUrls() {
+ return false;
}
/**
- * Get the name of the module as shown in the profiler log
+ * Returns an array of allowed parameters (parameter name) => (default
+ * value) or (parameter name) => (array with PARAM_* constants as keys)
+ * Don't call this function directly: use getFinalParams() to allow
+ * hooks to modify parameters as needed.
*
- * @param DatabaseBase|bool $db
+ * Some derived classes may choose to handle an integer $flags parameter
+ * in the overriding methods. Callers of this method can pass zero or
+ * more OR-ed flags like GET_VALUES_FOR_HELP.
*
- * @return string
+ * @return array|bool
*/
- public function getModuleProfileName( $db = false ) {
- if ( $db ) {
- return 'API:' . $this->mModuleName . '-DB';
- }
-
- return 'API:' . $this->mModuleName;
+ protected function getAllowedParams( /* $flags = 0 */ ) {
+ // int $flags is not declared because it causes "Strict standards"
+ // warning. Most derived classes do not implement it.
+ return false;
}
/**
- * Get the main module
- * @return ApiMain
+ * Returns an array of parameter descriptions.
+ * Don't call this function directly: use getFinalParamDescription() to
+ * allow hooks to modify descriptions as needed.
+ * @return array|bool False on no parameter descriptions
*/
- public function getMain() {
- return $this->mMainModule;
+ protected function getParamDescription() {
+ return false;
}
/**
- * Returns true if this module is the main module ($this === $this->mMainModule),
- * false otherwise.
+ * Indicates if this module needs maxlag to be checked
* @return bool
*/
- public function isMain() {
- return $this === $this->mMainModule;
+ public function shouldCheckMaxlag() {
+ return true;
}
/**
- * Get the result object
- * @return ApiResult
+ * Indicates whether this module requires read rights
+ * @return bool
*/
- public function getResult() {
- // Main module has getResult() method overridden
- // Safety - avoid infinite loop:
- if ( $this->isMain() ) {
- ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
- }
-
- return $this->getMain()->getResult();
+ public function isReadMode() {
+ return true;
}
/**
- * Get the result data array (read-only)
- * @return array
+ * Indicates whether this module requires write mode
+ * @return bool
*/
- public function getResultData() {
- return $this->getResult()->getData();
+ public function isWriteMode() {
+ return false;
}
/**
- * Set warning section for this module. Users should monitor this
- * section to notice any changes in API. Multiple calls to this
- * function will result in the warning messages being separated by
- * newlines
- * @param string $warning Warning message
+ * Indicates whether this module must be called with a POST request
+ * @return bool
*/
- public function setWarning( $warning ) {
- $result = $this->getResult();
- $data = $result->getData();
- $moduleName = $this->getModuleName();
- if ( isset( $data['warnings'][$moduleName] ) ) {
- // Don't add duplicate warnings
- $oldWarning = $data['warnings'][$moduleName]['*'];
- $warnPos = strpos( $oldWarning, $warning );
- // If $warning was found in $oldWarning, check if it starts at 0 or after "\n"
- if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) {
- // Check if $warning is followed by "\n" or the end of the $oldWarning
- $warnPos += strlen( $warning );
- if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) {
- return;
- }
- }
- // If there is a warning already, append it to the existing one
- $warning = "$oldWarning\n$warning";
- }
- $msg = array();
- ApiResult::setContent( $msg, $warning );
- $result->addValue( 'warnings', $moduleName,
- $msg, ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
+ public function mustBePosted() {
+ return $this->needsToken() !== false;
}
/**
- * If the module may only be used with a certain format module,
- * it should override this method to return an instance of that formatter.
- * A value of null means the default format will be used.
- * @return mixed Instance of a derived class of ApiFormatBase, or null
+ * Returns the token type this module requires in order to execute.
+ *
+ * Modules are strongly encouraged to use the core 'csrf' type unless they
+ * have specialized security needs. If the token type is not one of the
+ * core types, you must use the ApiQueryTokensRegisterTypes hook to
+ * register it.
+ *
+ * Returning a non-falsey value here will cause self::getFinalParams() to
+ * return a required string 'token' parameter and
+ * self::getFinalParamDescription() to ensure there is standardized
+ * documentation for it. Also, self::mustBePosted() must return true when
+ * tokens are used.
+ *
+ * In previous versions of MediaWiki, true was a valid return value.
+ * Returning true will generate errors indicating that the API module needs
+ * updating.
+ *
+ * @return string|false
*/
- public function getCustomPrinter() {
- return null;
+ public function needsToken() {
+ return false;
}
/**
- * Generates help message for this module, or false if there is no description
- * @return string|bool
+ * Fetch the salt used in the Web UI corresponding to this module.
+ *
+ * Only override this if the Web UI uses a token with a non-constant salt.
+ *
+ * @since 1.24
+ * @param array $params All supplied parameters for the module
+ * @return string|array|null
*/
- public function makeHelpMsg() {
- static $lnPrfx = "\n ";
-
- $msg = $this->getFinalDescription();
-
- if ( $msg !== false ) {
-
- if ( !is_array( $msg ) ) {
- $msg = array(
- $msg
- );
- }
- $msg = $lnPrfx . implode( $lnPrfx, $msg ) . "\n";
-
- $msg .= $this->makeHelpArrayToString( $lnPrfx, false, $this->getHelpUrls() );
-
- if ( $this->isReadMode() ) {
- $msg .= "\nThis module requires read rights";
- }
- if ( $this->isWriteMode() ) {
- $msg .= "\nThis module requires write rights";
- }
- if ( $this->mustBePosted() ) {
- $msg .= "\nThis module only accepts POST requests";
- }
- if ( $this->isReadMode() || $this->isWriteMode() ||
- $this->mustBePosted()
- ) {
- $msg .= "\n";
- }
-
- // Parameters
- $paramsMsg = $this->makeHelpMsgParameters();
- if ( $paramsMsg !== false ) {
- $msg .= "Parameters:\n$paramsMsg";
- }
+ protected function getWebUITokenSalt( array $params ) {
+ return null;
+ }
- $examples = $this->getExamples();
- if ( $examples ) {
- if ( !is_array( $examples ) ) {
- $examples = array(
- $examples
- );
- }
- $msg .= "Example" . ( count( $examples ) > 1 ? 's' : '' ) . ":\n";
- foreach ( $examples as $k => $v ) {
- if ( is_numeric( $k ) ) {
- $msg .= " $v\n";
- } else {
- if ( is_array( $v ) ) {
- $msgExample = implode( "\n", array_map( array( $this, 'indentExampleText' ), $v ) );
- } else {
- $msgExample = " $v";
- }
- $msgExample .= ":";
- $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n $k\n";
- }
- }
- }
- }
+ /**@}*/
- return $msg;
- }
+ /************************************************************************//**
+ * @name Data access methods
+ * @{
+ */
/**
- * @param string $item
+ * Get the name of the module being executed by this instance
* @return string
*/
- private function indentExampleText( $item ) {
- return " " . $item;
+ public function getModuleName() {
+ return $this->mModuleName;
}
/**
- * @param string $prefix Text to split output items
- * @param string $title What is being output
- * @param string|array $input
+ * Get parameter prefix (usually two letters or an empty string).
* @return string
*/
- protected function makeHelpArrayToString( $prefix, $title, $input ) {
- if ( $input === false ) {
- return '';
- }
- if ( !is_array( $input ) ) {
- $input = array( $input );
- }
-
- if ( count( $input ) > 0 ) {
- if ( $title ) {
- $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n ";
- } else {
- $msg = ' ';
- }
- $msg .= implode( $prefix, $input ) . "\n";
-
- return $msg;
- }
-
- return '';
+ public function getModulePrefix() {
+ return $this->mModulePrefix;
}
/**
- * Generates the parameter descriptions for this module, to be displayed in the
- * module's help.
- * @return string|bool
+ * Get the main module
+ * @return ApiMain
*/
- public function makeHelpMsgParameters() {
- $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
- if ( $params ) {
-
- $paramsDescription = $this->getFinalParamDescription();
- $msg = '';
- $paramPrefix = "\n" . str_repeat( ' ', 24 );
- $descWordwrap = "\n" . str_repeat( ' ', 28 );
- foreach ( $params as $paramName => $paramSettings ) {
- $desc = isset( $paramsDescription[$paramName] ) ? $paramsDescription[$paramName] : '';
- if ( is_array( $desc ) ) {
- $desc = implode( $paramPrefix, $desc );
- }
-
- //handle shorthand
- if ( !is_array( $paramSettings ) ) {
- $paramSettings = array(
- self::PARAM_DFLT => $paramSettings,
- );
- }
-
- //handle missing type
- if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) {
- $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] )
- ? $paramSettings[ApiBase::PARAM_DFLT]
- : null;
- if ( is_bool( $dflt ) ) {
- $paramSettings[ApiBase::PARAM_TYPE] = 'boolean';
- } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
- $paramSettings[ApiBase::PARAM_TYPE] = 'string';
- } elseif ( is_int( $dflt ) ) {
- $paramSettings[ApiBase::PARAM_TYPE] = 'integer';
- }
- }
-
- if ( isset( $paramSettings[self::PARAM_DEPRECATED] )
- && $paramSettings[self::PARAM_DEPRECATED]
- ) {
- $desc = "DEPRECATED! $desc";
- }
-
- if ( isset( $paramSettings[self::PARAM_REQUIRED] )
- && $paramSettings[self::PARAM_REQUIRED]
- ) {
- $desc .= $paramPrefix . "This parameter is required";
- }
-
- $type = isset( $paramSettings[self::PARAM_TYPE] )
- ? $paramSettings[self::PARAM_TYPE]
- : null;
- if ( isset( $type ) ) {
- $hintPipeSeparated = true;
- $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
- ? $paramSettings[self::PARAM_ISMULTI]
- : false;
- if ( $multi ) {
- $prompt = 'Values (separate with \'|\'): ';
- } else {
- $prompt = 'One value: ';
- }
-
- if ( $type === 'submodule' ) {
- $type = $this->getModuleManager()->getNames( $paramName );
- sort( $type );
- }
- if ( is_array( $type ) ) {
- $choices = array();
- $nothingPrompt = '';
- foreach ( $type as $t ) {
- if ( $t === '' ) {
- $nothingPrompt = 'Can be empty, or ';
- } else {
- $choices[] = $t;
- }
- }
- $desc .= $paramPrefix . $nothingPrompt . $prompt;
- $choicesstring = implode( ', ', $choices );
- $desc .= wordwrap( $choicesstring, 100, $descWordwrap );
- $hintPipeSeparated = false;
- } else {
- switch ( $type ) {
- case 'namespace':
- // Special handling because namespaces are
- // type-limited, yet they are not given
- $desc .= $paramPrefix . $prompt;
- $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ),
- 100, $descWordwrap );
- $hintPipeSeparated = false;
- break;
- case 'limit':
- $desc .= $paramPrefix . "No more than {$paramSettings[self::PARAM_MAX]}";
- if ( isset( $paramSettings[self::PARAM_MAX2] ) ) {
- $desc .= " ({$paramSettings[self::PARAM_MAX2]} for bots)";
- }
- $desc .= ' allowed';
- break;
- case 'integer':
- $s = $multi ? 's' : '';
- $hasMin = isset( $paramSettings[self::PARAM_MIN] );
- $hasMax = isset( $paramSettings[self::PARAM_MAX] );
- if ( $hasMin || $hasMax ) {
- if ( !$hasMax ) {
- $intRangeStr = "The value$s must be no less than " .
- "{$paramSettings[self::PARAM_MIN]}";
- } elseif ( !$hasMin ) {
- $intRangeStr = "The value$s must be no more than " .
- "{$paramSettings[self::PARAM_MAX]}";
- } else {
- $intRangeStr = "The value$s must be between " .
- "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
- }
-
- $desc .= $paramPrefix . $intRangeStr;
- }
- break;
- case 'upload':
- $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data";
- break;
- }
- }
-
- if ( $multi ) {
- if ( $hintPipeSeparated ) {
- $desc .= $paramPrefix . "Separate values with '|'";
- }
-
- $isArray = is_array( $type );
- if ( !$isArray
- || $isArray && count( $type ) > self::LIMIT_SML1
- ) {
- $desc .= $paramPrefix . "Maximum number of values " .
- self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
- }
- }
- }
-
- $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null;
- if ( !is_null( $default ) && $default !== false ) {
- $desc .= $paramPrefix . "Default: $default";
- }
-
- $msg .= sprintf( " %-19s - %s\n", $this->encodeParamName( $paramName ), $desc );
- }
-
- return $msg;
- }
-
- return false;
+ public function getMain() {
+ return $this->mMainModule;
}
/**
- * Returns the description string for this module
- * @return string|array
+ * Returns true if this module is the main module ($this === $this->mMainModule),
+ * false otherwise.
+ * @return bool
*/
- protected function getDescription() {
- return false;
+ public function isMain() {
+ return $this === $this->mMainModule;
}
/**
- * Returns usage examples for this module. Return false if no examples are available.
- * @return bool|string|array
+ * Get the result object
+ * @return ApiResult
*/
- protected function getExamples() {
- return false;
+ public function getResult() {
+ // Main module has getResult() method overridden
+ // Safety - avoid infinite loop:
+ if ( $this->isMain() ) {
+ ApiBase::dieDebug( __METHOD__, 'base method was called on main module. ' );
+ }
+
+ return $this->getMain()->getResult();
}
/**
- * Returns an array of allowed parameters (parameter name) => (default
- * value) or (parameter name) => (array with PARAM_* constants as keys)
- * Don't call this function directly: use getFinalParams() to allow
- * hooks to modify parameters as needed.
- *
- * Some derived classes may choose to handle an integer $flags parameter
- * in the overriding methods. Callers of this method can pass zero or
- * more OR-ed flags like GET_VALUES_FOR_HELP.
- *
- * @return array|bool
+ * Get the result data array (read-only)
+ * @return array
*/
- protected function getAllowedParams( /* $flags = 0 */ ) {
- // int $flags is not declared because it causes "Strict standards"
- // warning. Most derived classes do not implement it.
- return false;
+ public function getResultData() {
+ return $this->getResult()->getData();
+ }
+
+ /**
+ * Gets a default slave database connection object
+ * @return DatabaseBase
+ */
+ protected function getDB() {
+ if ( !isset( $this->mSlaveDB ) ) {
+ $this->profileDBIn();
+ $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
+ $this->profileDBOut();
+ }
+
+ return $this->mSlaveDB;
}
/**
- * Returns an array of parameter descriptions.
- * Don't call this function directly: use getFinalParamDescription() to
- * allow hooks to modify descriptions as needed.
- * @return array|bool False on no parameter descriptions
+ * Get final module description, after hooks have had a chance to tweak it as
+ * needed.
+ *
+ * @return array|bool False on no parameters
*/
- protected function getParamDescription() {
- return false;
+ public function getFinalDescription() {
+ $desc = $this->getDescription();
+ wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) );
+
+ return $desc;
}
/**
*/
public function getFinalParams( $flags = 0 ) {
$params = $this->getAllowedParams( $flags );
+
+ if ( $this->needsToken() ) {
+ $params['token'] = array(
+ ApiBase::PARAM_TYPE => 'string',
+ ApiBase::PARAM_REQUIRED => true,
+ );
+ }
+
wfRunHooks( 'APIGetAllowedParams', array( &$this, &$params, $flags ) );
return $params;
*/
public function getFinalParamDescription() {
$desc = $this->getParamDescription();
- wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) );
- return $desc;
- }
+ $tokenType = $this->needsToken();
+ if ( $tokenType ) {
+ if ( !isset( $desc['token'] ) ) {
+ $desc['token'] = array();
+ } elseif ( !is_array( $desc['token'] ) ) {
+ // We ignore a plain-string token, because it's probably an
+ // extension that is supplying the string for BC.
+ $desc['token'] = array();
+ }
+ array_unshift( $desc['token'],
+ "A '$tokenType' token retrieved from action=query&meta=tokens"
+ );
+ }
- /**
- * Formerly used to fetch a list of possible properites in the result,
- * somehow organized with respect to the prop parameter that causes them to
- * be returned. The specific semantics of the return value was never
- * specified. Since this was never possible to be accurately updated, it
- * has been removed.
- *
- * @deprecated since 1.24
- * @return array|bool
- */
- protected function getResultProperties() {
- wfDeprecated( __METHOD__, '1.24' );
- return false;
- }
+ wfRunHooks( 'APIGetParamDescription', array( &$this, &$desc ) );
- /**
- * @see self::getResultProperties()
- * @deprecated since 1.24
- * @return array|bool
- */
- public function getFinalResultProperties() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
+ return $desc;
}
- /**
- * @see self::getResultProperties()
- * @deprecated since 1.24
- */
- protected static function addTokenProperties( &$props, $tokenFunctions ) {
- wfDeprecated( __METHOD__, '1.24' );
- }
+ /**@}*/
- /**
- * Get final module description, after hooks have had a chance to tweak it as
- * needed.
- *
- * @return array|bool False on no parameters
+ /************************************************************************//**
+ * @name Parameter handling
+ * @{
*/
- public function getFinalDescription() {
- $desc = $this->getDescription();
- wfRunHooks( 'APIGetDescription', array( &$this, &$desc ) );
-
- return $desc;
- }
/**
* This method mangles parameter name based on the prefix supplied to the constructor.
}
}
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getRequireOnlyOneParameterErrorMessages( $params ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
/**
* Die if more than one of a certain set of parameters is set and not false.
*
}
}
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getRequireMaxOneParameterErrorMessages( $params ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
/**
* Die if none of a certain set of parameters is set and not false.
*
}
/**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
+ * Callback function used in requireOnlyOneParameter to check whether required parameters are set
+ *
+ * @param object $x Parameter to check is not null/false
+ * @return bool
*/
- public function getRequireAtLeastOneParameterErrorMessages( $params ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
+ private function parameterNotEmpty( $x ) {
+ return !is_null( $x ) && $x !== false;
}
/**
return $pageObj;
}
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
- */
- public function getTitleOrPageIdErrorMessage() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
-
- /**
- * Callback function used in requireOnlyOneParameter to check whether required parameters are set
- *
- * @param object $x Parameter to check is not null/false
- * @return bool
- */
- private function parameterNotEmpty( $x ) {
- return !is_null( $x ) && $x !== false;
- }
-
/**
* Return true if we're to watch the page, false if not, null if no change.
* @param string $watchlist Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
}
}
- /**
- * Set a watch (or unwatch) based the based on a watchlist parameter.
- * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
- * @param Title $titleObj The article's title to change
- * @param string $userOption The user option to consider when $watch=preferences
- */
- protected function setWatch( $watch, $titleObj, $userOption = null ) {
- $value = $this->getWatchlistValue( $watch, $titleObj, $userOption );
- if ( $value === null ) {
- return;
- }
-
- WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() );
- }
-
/**
* Using the settings determine the value for the given parameter
*
* @param int $botMax Maximum value for sysops/bots
* @param bool $enforceLimits Whether to enforce (die) if value is outside limits
*/
- function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) {
+ protected function validateLimit( $paramName, &$value, $min, $max, $botMax = null, $enforceLimits = false ) {
if ( !is_null( $min ) && $value < $min ) {
$msg = $this->encodeParamName( $paramName ) . " may not be less than $min (set to $value)";
* @param string $encParamName Parameter name
* @return string Validated and normalized parameter
*/
- function validateTimestamp( $value, $encParamName ) {
+ protected function validateTimestamp( $value, $encParamName ) {
$unixTimestamp = wfTimestamp( TS_UNIX, $value );
if ( $unixTimestamp === false ) {
$this->dieUsage(
return wfTimestamp( TS_MW, $unixTimestamp );
}
+ /**
+ * Validate the supplied token.
+ *
+ * @since 1.24
+ * @param string $token Supplied token
+ * @param array $params All supplied parameters for the module
+ * @return bool
+ */
+ public final function validateToken( $token, array $params ) {
+ $tokenType = $this->needsToken();
+ $salts = ApiQueryTokens::getTokenTypeSalts();
+ if ( !isset( $salts[$tokenType] ) ) {
+ throw new MWException(
+ "Module '{$this->getModuleName()}' tried to use token type '$tokenType' " .
+ 'without registering it'
+ );
+ }
+
+ if ( $this->getUser()->matchEditToken(
+ $token,
+ $salts[$tokenType],
+ $this->getRequest()
+ ) ) {
+ return true;
+ }
+
+ $webUiSalt = $this->getWebUITokenSalt( $params );
+ if ( $webUiSalt !== null && $this->getUser()->matchEditToken(
+ $token,
+ $webUiSalt,
+ $this->getRequest()
+ ) ) {
+ return true;
+ }
+
+ return false;
+ }
+
/**
* Validate and normalize of parameters of type 'user'
* @param string $value Parameter value
"baduser_{$encParamName}"
);
}
-
- return $title->getText();
+
+ return $title->getText();
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Utility methods
+ * @{
+ */
+
+ /**
+ * Set a watch (or unwatch) based the based on a watchlist parameter.
+ * @param string $watch Valid values: 'watch', 'unwatch', 'preferences', 'nochange'
+ * @param Title $titleObj The article's title to change
+ * @param string $userOption The user option to consider when $watch=preferences
+ */
+ protected function setWatch( $watch, $titleObj, $userOption = null ) {
+ $value = $this->getWatchlistValue( $watch, $titleObj, $userOption );
+ if ( $value === null ) {
+ return;
+ }
+
+ WatchAction::doWatchOrUnwatch( $value, $titleObj, $this->getUser() );
+ }
+
+ /**
+ * Truncate an array to a certain length.
+ * @param array $arr Array to truncate
+ * @param int $limit Maximum length
+ * @return bool True if the array was truncated, false otherwise
+ */
+ public static function truncateArray( &$arr, $limit ) {
+ $modified = false;
+ while ( count( $arr ) > $limit ) {
+ array_pop( $arr );
+ $modified = true;
+ }
+
+ return $modified;
+ }
+
+ /**
+ * Gets the user for whom to get the watchlist
+ *
+ * @param array $params
+ * @return User
+ */
+ public function getWatchlistUser( $params ) {
+ if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) {
+ $user = User::newFromName( $params['owner'], false );
+ if ( !( $user && $user->getId() ) ) {
+ $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' );
+ }
+ $token = $user->getOption( 'watchlisttoken' );
+ if ( $token == '' || $token != $params['token'] ) {
+ $this->dieUsage(
+ 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences',
+ 'bad_wltoken'
+ );
+ }
+ } else {
+ if ( !$this->getUser()->isLoggedIn() ) {
+ $this->dieUsage( 'You must be logged-in to have a watchlist', 'notloggedin' );
+ }
+ if ( !$this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
+ $this->dieUsage( 'You don\'t have permission to view your watchlist', 'permissiondenied' );
+ }
+ $user = $this->getUser();
+ }
+
+ return $user;
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Warning and error reporting
+ * @{
+ */
+
+ /**
+ * Set warning section for this module. Users should monitor this
+ * section to notice any changes in API. Multiple calls to this
+ * function will result in the warning messages being separated by
+ * newlines
+ * @param string $warning Warning message
+ */
+ public function setWarning( $warning ) {
+ $result = $this->getResult();
+ $data = $result->getData();
+ $moduleName = $this->getModuleName();
+ if ( isset( $data['warnings'][$moduleName] ) ) {
+ // Don't add duplicate warnings
+ $oldWarning = $data['warnings'][$moduleName]['*'];
+ $warnPos = strpos( $oldWarning, $warning );
+ // If $warning was found in $oldWarning, check if it starts at 0 or after "\n"
+ if ( $warnPos !== false && ( $warnPos === 0 || $oldWarning[$warnPos - 1] === "\n" ) ) {
+ // Check if $warning is followed by "\n" or the end of the $oldWarning
+ $warnPos += strlen( $warning );
+ if ( strlen( $oldWarning ) <= $warnPos || $oldWarning[$warnPos] === "\n" ) {
+ return;
+ }
+ }
+ // If there is a warning already, append it to the existing one
+ $warning = "$oldWarning\n$warning";
+ }
+ $msg = array();
+ ApiResult::setContent( $msg, $warning );
+ $result->addValue( 'warnings', $moduleName,
+ $msg, ApiResult::OVERRIDE | ApiResult::ADD_ON_TOP | ApiResult::NO_SIZE_CHECK );
}
/**
$this->setWarning( $msg );
}
- /**
- * Truncate an array to a certain length.
- * @param array $arr Array to truncate
- * @param int $limit Maximum length
- * @return bool True if the array was truncated, false otherwise
- */
- public static function truncateArray( &$arr, $limit ) {
- $modified = false;
- while ( count( $arr ) > $limit ) {
- array_pop( $arr );
- $modified = true;
- }
-
- return $modified;
- }
-
/**
* Throw a UsageException, which will (if uncaught) call the main module's
* error handler and die with an error message.
throw new MWException( "Internal error in $method: $message" );
}
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Help message generation
+ * @{
+ */
+
/**
- * Indicates if this module needs maxlag to be checked
- * @return bool
+ * Generates help message for this module, or false if there is no description
+ * @return string|bool
*/
- public function shouldCheckMaxlag() {
- return true;
+ public function makeHelpMsg() {
+ static $lnPrfx = "\n ";
+
+ $msg = $this->getFinalDescription();
+
+ if ( $msg !== false ) {
+
+ if ( !is_array( $msg ) ) {
+ $msg = array(
+ $msg
+ );
+ }
+ $msg = $lnPrfx . implode( $lnPrfx, $msg ) . "\n";
+
+ $msg .= $this->makeHelpArrayToString( $lnPrfx, false, $this->getHelpUrls() );
+
+ if ( $this->isReadMode() ) {
+ $msg .= "\nThis module requires read rights";
+ }
+ if ( $this->isWriteMode() ) {
+ $msg .= "\nThis module requires write rights";
+ }
+ if ( $this->mustBePosted() ) {
+ $msg .= "\nThis module only accepts POST requests";
+ }
+ if ( $this->isReadMode() || $this->isWriteMode() ||
+ $this->mustBePosted()
+ ) {
+ $msg .= "\n";
+ }
+
+ // Parameters
+ $paramsMsg = $this->makeHelpMsgParameters();
+ if ( $paramsMsg !== false ) {
+ $msg .= "Parameters:\n$paramsMsg";
+ }
+
+ $examples = $this->getExamples();
+ if ( $examples ) {
+ if ( !is_array( $examples ) ) {
+ $examples = array(
+ $examples
+ );
+ }
+ $msg .= "Example" . ( count( $examples ) > 1 ? 's' : '' ) . ":\n";
+ foreach ( $examples as $k => $v ) {
+ if ( is_numeric( $k ) ) {
+ $msg .= " $v\n";
+ } else {
+ if ( is_array( $v ) ) {
+ $msgExample = implode( "\n", array_map( array( $this, 'indentExampleText' ), $v ) );
+ } else {
+ $msgExample = " $v";
+ }
+ $msgExample .= ":";
+ $msg .= wordwrap( $msgExample, 100, "\n" ) . "\n $k\n";
+ }
+ }
+ }
+ }
+
+ return $msg;
}
/**
- * Indicates whether this module requires read rights
- * @return bool
+ * @param string $item
+ * @return string
*/
- public function isReadMode() {
- return true;
+ private function indentExampleText( $item ) {
+ return " " . $item;
}
/**
- * Indicates whether this module requires write mode
- * @return bool
+ * @param string $prefix Text to split output items
+ * @param string $title What is being output
+ * @param string|array $input
+ * @return string
*/
- public function isWriteMode() {
- return false;
+ protected function makeHelpArrayToString( $prefix, $title, $input ) {
+ if ( $input === false ) {
+ return '';
+ }
+ if ( !is_array( $input ) ) {
+ $input = array( $input );
+ }
+
+ if ( count( $input ) > 0 ) {
+ if ( $title ) {
+ $msg = $title . ( count( $input ) > 1 ? 's' : '' ) . ":\n ";
+ } else {
+ $msg = ' ';
+ }
+ $msg .= implode( $prefix, $input ) . "\n";
+
+ return $msg;
+ }
+
+ return '';
}
/**
- * Indicates whether this module must be called with a POST request
- * @return bool
+ * Generates the parameter descriptions for this module, to be displayed in the
+ * module's help.
+ * @return string|bool
*/
- public function mustBePosted() {
- return false;
- }
+ public function makeHelpMsgParameters() {
+ $params = $this->getFinalParams( ApiBase::GET_VALUES_FOR_HELP );
+ if ( $params ) {
+
+ $paramsDescription = $this->getFinalParamDescription();
+ $msg = '';
+ $paramPrefix = "\n" . str_repeat( ' ', 24 );
+ $descWordwrap = "\n" . str_repeat( ' ', 28 );
+ foreach ( $params as $paramName => $paramSettings ) {
+ $desc = isset( $paramsDescription[$paramName] ) ? $paramsDescription[$paramName] : '';
+ if ( is_array( $desc ) ) {
+ $desc = implode( $paramPrefix, $desc );
+ }
+
+ //handle shorthand
+ if ( !is_array( $paramSettings ) ) {
+ $paramSettings = array(
+ self::PARAM_DFLT => $paramSettings,
+ );
+ }
+
+ //handle missing type
+ if ( !isset( $paramSettings[ApiBase::PARAM_TYPE] ) ) {
+ $dflt = isset( $paramSettings[ApiBase::PARAM_DFLT] )
+ ? $paramSettings[ApiBase::PARAM_DFLT]
+ : null;
+ if ( is_bool( $dflt ) ) {
+ $paramSettings[ApiBase::PARAM_TYPE] = 'boolean';
+ } elseif ( is_string( $dflt ) || is_null( $dflt ) ) {
+ $paramSettings[ApiBase::PARAM_TYPE] = 'string';
+ } elseif ( is_int( $dflt ) ) {
+ $paramSettings[ApiBase::PARAM_TYPE] = 'integer';
+ }
+ }
+
+ if ( isset( $paramSettings[self::PARAM_DEPRECATED] )
+ && $paramSettings[self::PARAM_DEPRECATED]
+ ) {
+ $desc = "DEPRECATED! $desc";
+ }
+
+ if ( isset( $paramSettings[self::PARAM_REQUIRED] )
+ && $paramSettings[self::PARAM_REQUIRED]
+ ) {
+ $desc .= $paramPrefix . "This parameter is required";
+ }
+
+ $type = isset( $paramSettings[self::PARAM_TYPE] )
+ ? $paramSettings[self::PARAM_TYPE]
+ : null;
+ if ( isset( $type ) ) {
+ $hintPipeSeparated = true;
+ $multi = isset( $paramSettings[self::PARAM_ISMULTI] )
+ ? $paramSettings[self::PARAM_ISMULTI]
+ : false;
+ if ( $multi ) {
+ $prompt = 'Values (separate with \'|\'): ';
+ } else {
+ $prompt = 'One value: ';
+ }
+
+ if ( $type === 'submodule' ) {
+ $type = $this->getModuleManager()->getNames( $paramName );
+ sort( $type );
+ }
+ if ( is_array( $type ) ) {
+ $choices = array();
+ $nothingPrompt = '';
+ foreach ( $type as $t ) {
+ if ( $t === '' ) {
+ $nothingPrompt = 'Can be empty, or ';
+ } else {
+ $choices[] = $t;
+ }
+ }
+ $desc .= $paramPrefix . $nothingPrompt . $prompt;
+ $choicesstring = implode( ', ', $choices );
+ $desc .= wordwrap( $choicesstring, 100, $descWordwrap );
+ $hintPipeSeparated = false;
+ } else {
+ switch ( $type ) {
+ case 'namespace':
+ // Special handling because namespaces are
+ // type-limited, yet they are not given
+ $desc .= $paramPrefix . $prompt;
+ $desc .= wordwrap( implode( ', ', MWNamespace::getValidNamespaces() ),
+ 100, $descWordwrap );
+ $hintPipeSeparated = false;
+ break;
+ case 'limit':
+ $desc .= $paramPrefix . "No more than {$paramSettings[self::PARAM_MAX]}";
+ if ( isset( $paramSettings[self::PARAM_MAX2] ) ) {
+ $desc .= " ({$paramSettings[self::PARAM_MAX2]} for bots)";
+ }
+ $desc .= ' allowed';
+ break;
+ case 'integer':
+ $s = $multi ? 's' : '';
+ $hasMin = isset( $paramSettings[self::PARAM_MIN] );
+ $hasMax = isset( $paramSettings[self::PARAM_MAX] );
+ if ( $hasMin || $hasMax ) {
+ if ( !$hasMax ) {
+ $intRangeStr = "The value$s must be no less than " .
+ "{$paramSettings[self::PARAM_MIN]}";
+ } elseif ( !$hasMin ) {
+ $intRangeStr = "The value$s must be no more than " .
+ "{$paramSettings[self::PARAM_MAX]}";
+ } else {
+ $intRangeStr = "The value$s must be between " .
+ "{$paramSettings[self::PARAM_MIN]} and {$paramSettings[self::PARAM_MAX]}";
+ }
+
+ $desc .= $paramPrefix . $intRangeStr;
+ }
+ break;
+ case 'upload':
+ $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data";
+ break;
+ }
+ }
- /**
- * Returns whether this module requires a token to execute
- * It is used to show possible errors in action=paraminfo
- * see bug 25248
- * @return bool
- */
- public function needsToken() {
- return false;
- }
+ if ( $multi ) {
+ if ( $hintPipeSeparated ) {
+ $desc .= $paramPrefix . "Separate values with '|'";
+ }
- /**
- * Returns the token salt if there is one,
- * '' if the module doesn't require a salt,
- * else false if the module doesn't need a token
- * You have also to override needsToken()
- * Value is passed to User::getEditToken
- * @return bool|string|array
- */
- public function getTokenSalt() {
- return false;
- }
+ $isArray = is_array( $type );
+ if ( !$isArray
+ || $isArray && count( $type ) > self::LIMIT_SML1
+ ) {
+ $desc .= $paramPrefix . "Maximum number of values " .
+ self::LIMIT_SML1 . " (" . self::LIMIT_SML2 . " for bots)";
+ }
+ }
+ }
- /**
- * Gets the user for whom to get the watchlist
- *
- * @param array $params
- * @return User
- */
- public function getWatchlistUser( $params ) {
- if ( !is_null( $params['owner'] ) && !is_null( $params['token'] ) ) {
- $user = User::newFromName( $params['owner'], false );
- if ( !( $user && $user->getId() ) ) {
- $this->dieUsage( 'Specified user does not exist', 'bad_wlowner' );
- }
- $token = $user->getOption( 'watchlisttoken' );
- if ( $token == '' || $token != $params['token'] ) {
- $this->dieUsage(
- 'Incorrect watchlist token provided -- please set a correct token in Special:Preferences',
- 'bad_wltoken'
- );
- }
- } else {
- if ( !$this->getUser()->isLoggedIn() ) {
- $this->dieUsage( 'You must be logged-in to have a watchlist', 'notloggedin' );
- }
- if ( !$this->getUser()->isAllowed( 'viewmywatchlist' ) ) {
- $this->dieUsage( 'You don\'t have permission to view your watchlist', 'permissiondenied' );
+ $default = isset( $paramSettings[self::PARAM_DFLT] ) ? $paramSettings[self::PARAM_DFLT] : null;
+ if ( !is_null( $default ) && $default !== false ) {
+ $desc .= $paramPrefix . "Default: $default";
+ }
+
+ $msg .= sprintf( " %-19s - %s\n", $this->encodeParamName( $paramName ), $desc );
}
- $user = $this->getUser();
- }
- return $user;
- }
+ return $msg;
+ }
- /**
- * @return bool|string|array Returns a false if the module has no help URL,
- * else returns a (array of) string
- */
- public function getHelpUrls() {
return false;
}
- /**
- * This formerly attempted to return a list of all possible errors returned
- * by the module. However, this was impossible to maintain in many cases
- * since errors could come from other areas of MediaWiki and in some cases
- * from arbitrary extension hooks. Since a partial list claiming to be
- * comprehensive is unlikely to be useful, it was removed.
- *
- * @deprecated since 1.24
- * @return array
- */
- public function getPossibleErrors() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
+ /**@}*/
- /**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
+ /************************************************************************//**
+ * @name Profiling
+ * @{
*/
- public function getFinalPossibleErrors() {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
/**
- * @see self::getPossibleErrors()
- * @deprecated since 1.24
- * @return array
+ * Profiling: total module execution time
*/
- public function parseErrors( $errors ) {
- wfDeprecated( __METHOD__, '1.24' );
- return array();
- }
+ private $mTimeIn = 0, $mModuleTime = 0;
/**
- * Profiling: total module execution time
+ * Get the name of the module as shown in the profiler log
+ *
+ * @param DatabaseBase|bool $db
+ *
+ * @return string
*/
- private $mTimeIn = 0, $mModuleTime = 0;
+ public function getModuleProfileName( $db = false ) {
+ if ( $db ) {
+ return 'API:' . $this->mModuleName . '-DB';
+ }
+
+ return 'API:' . $this->mModuleName;
+ }
/**
* Start module profiling
return $this->mDBTime;
}
- /**
- * Gets a default slave database connection object
- * @return DatabaseBase
- */
- protected function getDB() {
- if ( !isset( $this->mSlaveDB ) ) {
- $this->profileDBIn();
- $this->mSlaveDB = wfGetDB( DB_SLAVE, 'api' );
- $this->profileDBOut();
- }
-
- return $this->mSlaveDB;
- }
-
- /**
- * Debugging function that prints a value and an optional backtrace
- * @param mixed $value Value to print
- * @param string $name Description of the printed value
- * @param bool $backtrace If true, print a backtrace
- */
- public static function debugPrint( $value, $name = 'unknown', $backtrace = false ) {
- print "\n\n<pre><b>Debugging value '$name':</b>\n\n";
- var_export( $value );
- if ( $backtrace ) {
- print "\n" . wfBacktrace();
- }
- print "\n</pre>\n";
- }
-
/**
* Write logging information for API features to a debug log, for usage
* analysis.
' "' . addslashes( $request->getHeader( 'User-agent' ) ) . '"';
wfDebugLog( 'api-feature-usage', $s, 'private' );
}
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Deprecated
+ * @{
+ */
+
+ /**
+ * Formerly returned a string that identifies the version of the extending
+ * class. Typically included the class name, the svn revision, timestamp,
+ * and last author. Usually done with SVN's Id keyword
+ *
+ * @deprecated since 1.21, version string is no longer supported
+ * @return string
+ */
+ public function getVersion() {
+ wfDeprecated( __METHOD__, '1.21' );
+ return '';
+ }
+
+ /**
+ * Formerly used to fetch a list of possible properites in the result,
+ * somehow organized with respect to the prop parameter that causes them to
+ * be returned. The specific semantics of the return value was never
+ * specified. Since this was never possible to be accurately updated, it
+ * has been removed.
+ *
+ * @deprecated since 1.24
+ * @return array|bool
+ */
+ protected function getResultProperties() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return false;
+ }
+
+ /**
+ * @see self::getResultProperties()
+ * @deprecated since 1.24
+ * @return array|bool
+ */
+ public function getFinalResultProperties() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getResultProperties()
+ * @deprecated since 1.24
+ */
+ protected static function addTokenProperties( &$props, $tokenFunctions ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getRequireOnlyOneParameterErrorMessages( $params ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getRequireMaxOneParameterErrorMessages( $params ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getRequireAtLeastOneParameterErrorMessages( $params ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getTitleOrPageIdErrorMessage() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * This formerly attempted to return a list of all possible errors returned
+ * by the module. However, this was impossible to maintain in many cases
+ * since errors could come from other areas of MediaWiki and in some cases
+ * from arbitrary extension hooks. Since a partial list claiming to be
+ * comprehensive is unlikely to be useful, it was removed.
+ *
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getPossibleErrors() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function getFinalPossibleErrors() {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**
+ * @see self::getPossibleErrors()
+ * @deprecated since 1.24
+ * @return array
+ */
+ public function parseErrors( $errors ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return array();
+ }
+
+ /**@}*/
}
+
+/**
+ * For really cool vim folding this needs to be at the end:
+ * vim: foldmarker=@{,@} foldmethod=marker
+ */
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true
),
- 'token' => null,
'expiry' => 'never',
'reason' => '',
'anononly' => false,
public function getParamDescription() {
return array(
'user' => 'Username, IP address or IP range you want to block',
- 'token' => 'A block token previously obtained through prop=info',
'expiry' => 'Relative expiry time, e.g. \'5 months\' or \'2 weeks\'. ' .
'If set to \'infinite\', \'indefinite\' or \'never\', the block will never expire.',
'reason' => 'Reason for block',
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
return array(
- 'api.php?action=block&user=123.5.5.12&expiry=3%20days&reason=First%20strike',
- 'api.php?action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail='
+ 'api.php?action=block&user=123.5.5.12&expiry=3%20days&reason=First%20strike&token=123ABC',
+ 'api.php?action=block&user=Vandal&expiry=never&reason=Vandalism&nocreate=&autoblock=&noemail=&token=123ABC'
);
}
'pageid' => array(
ApiBase::PARAM_TYPE => 'integer'
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'reason' => null,
'watch' => array(
ApiBase::PARAM_DFLT => false,
return array(
'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
- 'token' => 'A delete token previously retrieved through prop=info',
'reason'
=> 'Reason for the deletion. If not set, an automatically generated reason will be used',
'watch' => 'Add the page to your watchlist',
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
ApiBase::PARAM_TYPE => 'string',
),
'text' => null,
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'summary' => null,
'minor' => false,
'notminor' => false,
'sectiontitle' => 'The title for a new section',
'text' => 'Page content',
'token' => array(
- 'Edit token. You can get one of these through prop=info.',
- "The token should always be sent as the last parameter, or at " .
+ /* Standard description is automatically prepended */
+ 'The token should always be sent as the last parameter, or at ' .
"least, after the {$p}text parameter"
),
'summary'
'Used to detect edit conflicts; leave unset to ignore conflicts'
),
'starttimestamp' => array(
- 'Timestamp when you obtained the edit token.',
+ 'Timestamp when you began the editing process, e.g. when the current page content ' .
+ 'was loaded for editing.',
'Used to detect edit conflicts; leave unset to ignore conflicts'
),
'recreate' => 'Override any errors about the article having been deleted in the meantime',
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'ccme' => false,
);
}
'target' => 'User to send email to',
'subject' => 'Subject header',
'text' => 'Mail body',
- 'token' => 'A token previously acquired via prop=info',
'ccme' => 'Send a copy of this mail to me',
);
}
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
return array(
- 'api.php?action=emailuser&target=WikiSysop&text=Content'
+ 'api.php?action=emailuser&target=WikiSysop&text=Content&token=123ABC'
=> 'Send an email to the User "WikiSysop" with the text "Content"',
);
}
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true,
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
);
}
public function getParamDescription() {
return array(
'filename' => 'Target filename without the File: prefix',
- 'token' => 'Edit token. You can get one of these through prop=info',
'comment' => 'Upload comment',
'archivename' => 'Archive name of the revision to revert to',
);
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
/**
* Get the contents of the buffer.
+ * @return string
*/
public function getBuffer() {
return $this->mBuffer;
$this->setWarning( "format=$name has been deprecated. Please use format=json$fm instead." );
}
}
-
-/**
- * This printer is used to wrap an instance of the Feed class
- * @ingroup API
- */
-class ApiFormatFeedWrapper extends ApiFormatBase {
-
- public function __construct( ApiMain $main ) {
- parent::__construct( $main, 'feed' );
- }
-
- /**
- * Call this method to initialize output data. See execute()
- * @param ApiResult $result
- * @param object $feed An instance of one of the $wgFeedClasses classes
- * @param array $feedItems Array of FeedItem objects
- */
- public static function setResult( $result, $feed, $feedItems ) {
- // Store output in the Result data.
- // This way we can check during execution if any error has occurred
- // Disable size checking for this because we can't continue
- // cleanly; size checking would cause more problems than it'd
- // solve
- $result->addValue( null, '_feed', $feed, ApiResult::NO_SIZE_CHECK );
- $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_SIZE_CHECK );
- }
-
- /**
- * Feed does its own headers
- *
- * @return null
- */
- public function getMimeType() {
- return null;
- }
-
- /**
- * Optimization - no need to sanitize data that will not be needed
- *
- * @return bool
- */
- public function getNeedsRawData() {
- return true;
- }
-
- /**
- * ChannelFeed doesn't give us a method to print errors in a friendly
- * manner, so just punt errors to the default printer.
- * @return bool
- */
- public function canPrintErrors() {
- return false;
- }
-
- /**
- * This class expects the result data to be in a custom format set by self::setResult()
- * $result['_feed'] - an instance of one of the $wgFeedClasses classes
- * $result['_feeditems'] - an array of FeedItem instances
- */
- public function execute() {
- $data = $this->getResultData();
- if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
- $feed = $data['_feed'];
- $items = $data['_feeditems'];
-
- $feed->outHeader();
- foreach ( $items as & $item ) {
- $feed->outItem( $item );
- }
- $feed->outFooter();
- } else {
- // Error has occurred, print something useful
- ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
- }
- }
-}
/**
* API PHP's var_export() output formatter
+ * @deprecated since 1.24
* @ingroup API
*/
class ApiFormatDbg extends ApiFormatBase {
/**
* API PHP's var_dump() output formatter
+ * @deprecated since 1.24
* @ingroup API
*/
class ApiFormatDump extends ApiFormatBase {
--- /dev/null
+<?php
+/**
+ *
+ *
+ * Created on Sep 19, 2006
+ *
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * This printer is used to wrap an instance of the Feed class
+ * @ingroup API
+ */
+class ApiFormatFeedWrapper extends ApiFormatBase {
+
+ public function __construct( ApiMain $main ) {
+ parent::__construct( $main, 'feed' );
+ }
+
+ /**
+ * Call this method to initialize output data. See execute()
+ * @param ApiResult $result
+ * @param object $feed An instance of one of the $wgFeedClasses classes
+ * @param array $feedItems Array of FeedItem objects
+ */
+ public static function setResult( $result, $feed, $feedItems ) {
+ // Store output in the Result data.
+ // This way we can check during execution if any error has occurred
+ // Disable size checking for this because we can't continue
+ // cleanly; size checking would cause more problems than it'd
+ // solve
+ $result->addValue( null, '_feed', $feed, ApiResult::NO_SIZE_CHECK );
+ $result->addValue( null, '_feeditems', $feedItems, ApiResult::NO_SIZE_CHECK );
+ }
+
+ /**
+ * Feed does its own headers
+ *
+ * @return null
+ */
+ public function getMimeType() {
+ return null;
+ }
+
+ /**
+ * Optimization - no need to sanitize data that will not be needed
+ *
+ * @return bool
+ */
+ public function getNeedsRawData() {
+ return true;
+ }
+
+ /**
+ * ChannelFeed doesn't give us a method to print errors in a friendly
+ * manner, so just punt errors to the default printer.
+ * @return bool
+ */
+ public function canPrintErrors() {
+ return false;
+ }
+
+ /**
+ * This class expects the result data to be in a custom format set by self::setResult()
+ * $result['_feed'] - an instance of one of the $wgFeedClasses classes
+ * $result['_feeditems'] - an array of FeedItem instances
+ */
+ public function execute() {
+ $data = $this->getResultData();
+ if ( isset( $data['_feed'] ) && isset( $data['_feeditems'] ) ) {
+ $feed = $data['_feed'];
+ $items = $data['_feeditems'];
+
+ $feed->outHeader();
+ foreach ( $items as & $item ) {
+ $feed->outItem( $item );
+ }
+ $feed->outFooter();
+ } else {
+ // Error has occurred, print something useful
+ ApiBase::dieDebug( __METHOD__, 'Invalid feed class/item' );
+ }
+ }
+}
/**
* API Text output formatter
+ * @deprecated since 1.24
* @ingroup API
*/
class ApiFormatTxt extends ApiFormatBase {
/**
* API WDDX output formatter
+ * @deprecated since 1.24
* @ingroup API
*/
class ApiFormatWddx extends ApiFormatBase {
/**
* API YAML output formatter
+ * @deprecated since 1.24
* @ingroup API
*/
class ApiFormatYaml extends ApiFormatJson {
ApiBase::PARAM_TYPE => array( '90', '180', '270' ),
ApiBase::PARAM_REQUIRED => true
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'continue' => '',
);
if ( $flags ) {
return $pageSet->getFinalParamDescription() + array(
'rotation' => 'Degrees to rotate image clockwise',
- 'token' => 'Edit token. You can get one of these through action=tokens',
'continue' => 'When more results are available, use this to continue',
);
}
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
public function getAllowedParams() {
return array(
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'summary' => null,
'xml' => array(
ApiBase::PARAM_TYPE => 'upload',
public function getParamDescription() {
return array(
- 'token' => 'Import token obtained through prop=info',
'summary' => 'Import summary',
'xml' => 'Uploaded XML file',
'interwikisource' => 'For interwiki imports: wiki to import from',
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
}
}
+ if ( $this->getParameter( 'curtimestamp' ) ) {
+ $result->addValue( null, 'curtimestamp', wfTimestamp( TS_ISO_8601, time() ),
+ ApiResult::NO_SIZE_CHECK );
+ }
+
$params = $this->extractRequestParams();
$this->mAction = $params['action'];
}
$moduleParams = $module->extractRequestParams();
- // Die if token required, but not provided
- $salt = $module->getTokenSalt();
- if ( $salt !== false ) {
+ // Check token, if necessary
+ if ( $module->needsToken() === true ) {
+ throw new MWException(
+ "Module '{$module->getModuleName()}' must be updated for the new token handling. " .
+ "See documentation for ApiBase::needsToken for details."
+ );
+ }
+ if ( $module->needsToken() ) {
+ if ( !$module->mustBePosted() ) {
+ throw new MWException(
+ "Module '{$module->getModuleName()}' must require POST to use tokens."
+ );
+ }
+
if ( !isset( $moduleParams['token'] ) ) {
$this->dieUsageMsg( array( 'missingparam', 'token' ) );
}
- if ( !$this->getUser()->matchEditToken(
- $moduleParams['token'],
- $salt,
- $this->getContext()->getRequest() )
- ) {
+ if ( array_key_exists(
+ $module->encodeParamName( 'token' ),
+ $this->getRequest()->getQueryValues()
+ ) ) {
+ $this->dieUsage(
+ "The '{$module->encodeParamName( 'token' )}' parameter must be POSTed",
+ 'mustposttoken'
+ );
+ }
+
+ if ( !$module->validateToken( $moduleParams['token'], $moduleParams ) ) {
$this->dieUsageMsg( 'sessionfailure' );
}
}
),
'requestid' => null,
'servedby' => false,
+ 'curtimestamp' => false,
'origin' => null,
);
}
'requestid' => 'Request ID to distinguish requests. This will just be output back to you',
'servedby' => 'Include the hostname that served the request in the ' .
'results. Unconditionally shown on error',
+ 'curtimestamp' => 'Include the current timestamp in the result.',
'origin' => array(
'When accessing the API using a cross-domain AJAX request (CORS), set this to the',
'originating domain. This must be included in any pre-flight request, and',
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'reason' => '',
'movetalk' => false,
'movesubpages' => false,
'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid",
'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from",
'to' => 'Title you want to rename the page to',
- 'token' => 'A move token previously retrieved through prop=info',
'reason' => 'Reason for the move',
'movetalk' => 'Move the talk page, if it exists',
'movesubpages' => 'Move subpages, if applicable',
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
$optionKinds[] = 'all';
return array(
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'reset' => false,
'resetkinds' => array(
ApiBase::PARAM_TYPE => $optionKinds,
public function getParamDescription() {
return array(
- 'token' => 'An options token previously obtained through the action=tokens',
'reset' => 'Resets preferences to the site defaults',
'resetkinds' => 'List of types of options to reset when the "reset" option is set',
'change' => array( 'List of changes, formatted name=value (e.g. skin=vector), ' .
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getHelpUrls() {
$a['required'] = '';
}
+ if ( $n === 'token' && $obj->needsToken() ) {
+ $a['tokentype'] = $obj->needsToken();
+ }
+
if ( isset( $p[ApiBase::PARAM_DFLT] ) ) {
$type = $p[ApiBase::PARAM_TYPE];
if ( $type === 'boolean' ) {
/**
* @param Content $content
* @param string $what Identifies the content in error messages, e.g. page title.
+ * @return Content|bool
*/
private function getSectionContent( Content $content, $what ) {
// Not cached (save or load)
public function getAllowedParams() {
return array(
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'rcid' => array(
ApiBase::PARAM_TYPE => 'integer'
),
public function getParamDescription() {
return array(
- 'token' => 'Patrol token obtained from list=recentchanges',
'rcid' => 'Recentchanges ID to patrol',
'revid' => 'Revision ID to patrol',
);
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
return 'patrol';
}
public function getExamples() {
return array(
- 'api.php?action=patrol&token=123abc&rcid=230672766',
- 'api.php?action=patrol&token=123abc&revid=230672766'
+ 'api.php?action=patrol&token=123ABC&rcid=230672766',
+ 'api.php?action=patrol&token=123ABC&revid=230672766'
);
}
'pageid' => array(
ApiBase::PARAM_TYPE => 'integer',
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'protections' => array(
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_REQUIRED => true,
return array(
'title' => "Title of the page you want to (un)protect. Cannot be used together with {$p}pageid",
'pageid' => "ID of the page you want to (un)protect. Cannot be used together with {$p}title",
- 'token' => 'A protect token previously retrieved through prop=info',
'protections' => 'List of protection levels, formatted action=group (e.g. edit=sysop)',
'expiry' => array(
'Expiry timestamps. If only one timestamp is ' .
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
'siteinfo' => 'ApiQuerySiteinfo',
'userinfo' => 'ApiQueryUserInfo',
'filerepoinfo' => 'ApiQueryFileRepoInfo',
+ 'tokens' => 'ApiQueryTokens',
);
/**
$this->resetQueryParams();
}
+ /************************************************************************//**
+ * @name Methods to implement
+ * @{
+ */
+
/**
* Get the cache mode for the data generated by this module. Override
* this in the module subclass. For possible return values and other
return 'private';
}
+ /**
+ * Override this method to request extra fields from the pageSet
+ * using $pageSet->requestField('fieldName')
+ * @param ApiPageSet $pageSet
+ */
+ public function requestExtraData( $pageSet ) {
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Data access
+ * @{
+ */
+
+ /**
+ * Get the main Query module
+ * @return ApiQuery
+ */
+ public function getQuery() {
+ return $this->mQueryModule;
+ }
+
+ /**
+ * Get the Query database connection (read-only)
+ * @return DatabaseBase
+ */
+ protected function getDB() {
+ if ( is_null( $this->mDb ) ) {
+ $this->mDb = $this->getQuery()->getDB();
+ }
+
+ return $this->mDb;
+ }
+
+ /**
+ * Selects the query database connection with the given name.
+ * See ApiQuery::getNamedDB() for more information
+ * @param string $name Name to assign to the database connection
+ * @param int $db One of the DB_* constants
+ * @param array $groups Query groups
+ * @return DatabaseBase
+ */
+ public function selectNamedDB( $name, $db, $groups ) {
+ $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
+ }
+
+ /**
+ * Get the PageSet object to work on
+ * @return ApiPageSet
+ */
+ protected function getPageSet() {
+ return $this->getQuery()->getPageSet();
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Querying
+ * @{
+ */
+
/**
* Blank the internal arrays with query parameters
*/
}
/**
- * Estimate the row count for the SELECT query that would be run if we
- * called select() right now, and check if it's acceptable.
- * @return bool True if acceptable, false otherwise
+ * @param string $query
+ * @param string $protocol
+ * @return null|string
*/
- protected function checkRowCount() {
- $db = $this->getDB();
- $this->profileDBIn();
- $rowcount = $db->estimateRowCount(
- $this->tables,
- $this->fields,
- $this->where,
- __METHOD__,
- $this->options
- );
- $this->profileDBOut();
+ public function prepareUrlQuerySearchString( $query = null, $protocol = null ) {
+ $db = $this->getDb();
+ if ( !is_null( $query ) || $query != '' ) {
+ if ( is_null( $protocol ) ) {
+ $protocol = 'http://';
+ }
- if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) {
- return false;
+ $likeQuery = LinkFilter::makeLikeArray( $query, $protocol );
+ if ( !$likeQuery ) {
+ $this->dieUsage( 'Invalid query', 'bad_query' );
+ }
+
+ $likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
+
+ return 'el_index ' . $db->buildLike( $likeQuery );
+ } elseif ( !is_null( $protocol ) ) {
+ return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
}
- return true;
+ return null;
}
+ /**
+ * Filters hidden users (where the user doesn't have the right to view them)
+ * Also adds relevant block information
+ *
+ * @param bool $showBlockInfo
+ * @return void
+ */
+ public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
+ $this->addTables( 'ipblocks' );
+ $this->addJoinConds( array(
+ 'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
+ ) );
+
+ $this->addFields( 'ipb_deleted' );
+
+ if ( $showBlockInfo ) {
+ $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
+ }
+
+ // Don't show hidden names
+ if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+ $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
+ }
+ }
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Utility methods
+ * @{
+ */
+
/**
* Add information (title and namespace) about a Title object to a
* result array
$arr[$prefix . 'title'] = $title->getPrefixedText();
}
- /**
- * Override this method to request extra fields from the pageSet
- * using $pageSet->requestField('fieldName')
- * @param ApiPageSet $pageSet
- */
- public function requestExtraData( $pageSet ) {
- }
-
- /**
- * Get the main Query module
- * @return ApiQuery
- */
- public function getQuery() {
- return $this->mQueryModule;
- }
-
/**
* Add a sub-element under the page element with the given page ID
* @param int $pageId Page ID
}
/**
- * Get the Query database connection (read-only)
- * @return DatabaseBase
- */
- protected function getDB() {
- if ( is_null( $this->mDb ) ) {
- $this->mDb = $this->getQuery()->getDB();
- }
-
- return $this->mDb;
- }
-
- /**
- * Selects the query database connection with the given name.
- * See ApiQuery::getNamedDB() for more information
- * @param string $name Name to assign to the database connection
- * @param int $db One of the DB_* constants
- * @param array $groups Query groups
- * @return DatabaseBase
- */
- public function selectNamedDB( $name, $db, $groups ) {
- $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
- }
-
- /**
- * Get the PageSet object to work on
- * @return ApiPageSet
- */
- protected function getPageSet() {
- return $this->getQuery()->getPageSet();
- }
-
- /**
- * Convert a title to a DB key
- * @param string $title Page title with spaces
- * @return string Page title with underscores
- */
- public function titleToKey( $title ) {
- // Don't throw an error if we got an empty string
- if ( trim( $title ) == '' ) {
- return '';
- }
- $t = Title::newFromText( $title );
- if ( !$t ) {
- $this->dieUsageMsg( array( 'invalidtitle', $title ) );
- }
-
- return $t->getPrefixedDBkey();
- }
-
- /**
- * The inverse of titleToKey()
- * @param string $key Page title with underscores
- * @return string Page title with spaces
- */
- public function keyToTitle( $key ) {
- // Don't throw an error if we got an empty string
- if ( trim( $key ) == '' ) {
- return '';
- }
- $t = Title::newFromDBkey( $key );
- // This really shouldn't happen but we gotta check anyway
- if ( !$t ) {
- $this->dieUsageMsg( array( 'invalidtitle', $key ) );
- }
-
- return $t->getPrefixedText();
- }
-
- /**
- * An alternative to titleToKey() that doesn't trim trailing spaces, and
- * does not mangle the input if starts with something that looks like a
- * namespace. It is advisable to pass the namespace parameter in order to
- * handle per-namespace capitalization settings.
- * @param string $titlePart Title part with spaces
- * @param int $defaultNamespace Namespace to assume
- * @return string Title part with underscores
+ * Convert an input title or title prefix into a dbkey.
+ *
+ * $namespace should always be specified in order to handle per-namespace
+ * capitalization settings.
+ *
+ * @param string $titlePart Title part
+ * @param int $defaultNamespace Namespace of the title
+ * @return string DBkey (no namespace prefix)
*/
- public function titlePartToKey( $titlePart, $defaultNamespace = NS_MAIN ) {
- $t = Title::makeTitleSafe( $defaultNamespace, $titlePart . 'x' );
+ public function titlePartToKey( $titlePart, $namespace = NS_MAIN ) {
+ $t = Title::makeTitleSafe( $namespace, $titlePart . 'x' );
if ( !$t ) {
$this->dieUsageMsg( array( 'invalidtitle', $titlePart ) );
}
- if ( $defaultNamespace != $t->getNamespace() || $t->isExternal() ) {
+ if ( $namespace != $t->getNamespace() || $t->isExternal() ) {
// This can happen in two cases. First, if you call titlePartToKey with a title part
// that looks like a namespace, but with $defaultNamespace = NS_MAIN. It would be very
// difficult to handle such a case. Such cases cannot exist and are therefore treated
return substr( $t->getDbKey(), 0, -1 );
}
- /**
- * An alternative to keyToTitle() that doesn't trim trailing spaces
- * @param string $keyPart Key part with spaces
- * @return string Key part with underscores
- */
- public function keyPartToTitle( $keyPart ) {
- return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 );
- }
-
/**
* Gets the personalised direction parameter description
*
);
}
- /**
- * @param string $query
- * @param string $protocol
- * @return null|string
- */
- public function prepareUrlQuerySearchString( $query = null, $protocol = null ) {
- $db = $this->getDb();
- if ( !is_null( $query ) || $query != '' ) {
- if ( is_null( $protocol ) ) {
- $protocol = 'http://';
- }
-
- $likeQuery = LinkFilter::makeLikeArray( $query, $protocol );
- if ( !$likeQuery ) {
- $this->dieUsage( 'Invalid query', 'bad_query' );
- }
-
- $likeQuery = LinkFilter::keepOneWildcard( $likeQuery );
-
- return 'el_index ' . $db->buildLike( $likeQuery );
- } elseif ( !is_null( $protocol ) ) {
- return 'el_index ' . $db->buildLike( "$protocol", $db->anyString() );
- }
-
- return null;
- }
-
- /**
- * Filters hidden users (where the user doesn't have the right to view them)
- * Also adds relevant block information
- *
- * @param bool $showBlockInfo
- * @return void
- */
- public function showHiddenUsersAddBlockInfo( $showBlockInfo ) {
- $this->addTables( 'ipblocks' );
- $this->addJoinConds( array(
- 'ipblocks' => array( 'LEFT JOIN', 'ipb_user=user_id' ),
- ) );
-
- $this->addFields( 'ipb_deleted' );
-
- if ( $showBlockInfo ) {
- $this->addFields( array( 'ipb_id', 'ipb_by', 'ipb_by_text', 'ipb_reason', 'ipb_expiry' ) );
- }
-
- // Don't show hidden names
- if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
- $this->addWhere( 'ipb_deleted = 0 OR ipb_deleted IS NULL' );
- }
- }
-
/**
* @param string $hash
* @return bool
'viewsuppressed'
);
}
+
+ /**@}*/
+
+ /************************************************************************//**
+ * @name Deprecated
+ * @{
+ */
+
+ /**
+ * Estimate the row count for the SELECT query that would be run if we
+ * called select() right now, and check if it's acceptable.
+ * @deprecated since 1.24
+ * @return bool True if acceptable, false otherwise
+ */
+ protected function checkRowCount() {
+ wfDeprecated( __METHOD__, '1.24' );
+ $db = $this->getDB();
+ $this->profileDBIn();
+ $rowcount = $db->estimateRowCount(
+ $this->tables,
+ $this->fields,
+ $this->where,
+ __METHOD__,
+ $this->options
+ );
+ $this->profileDBOut();
+
+ if ( $rowcount > $this->getConfig()->get( 'APIMaxDBRows' ) ) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Convert a title to a DB key
+ * @deprecated since 1.24, past uses of this were always incorrect and should
+ * have used self::titlePartToKey() instead
+ * @param string $title Page title with spaces
+ * @return string Page title with underscores
+ */
+ public function titleToKey( $title ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ // Don't throw an error if we got an empty string
+ if ( trim( $title ) == '' ) {
+ return '';
+ }
+ $t = Title::newFromText( $title );
+ if ( !$t ) {
+ $this->dieUsageMsg( array( 'invalidtitle', $title ) );
+ }
+
+ return $t->getPrefixedDBkey();
+ }
+
+ /**
+ * The inverse of titleToKey()
+ * @deprecated since 1.24, unused and probably never needed
+ * @param string $key Page title with underscores
+ * @return string Page title with spaces
+ */
+ public function keyToTitle( $key ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ // Don't throw an error if we got an empty string
+ if ( trim( $key ) == '' ) {
+ return '';
+ }
+ $t = Title::newFromDBkey( $key );
+ // This really shouldn't happen but we gotta check anyway
+ if ( !$t ) {
+ $this->dieUsageMsg( array( 'invalidtitle', $key ) );
+ }
+
+ return $t->getPrefixedText();
+ }
+
+ /**
+ * Inverse of titlePartToKey()
+ * @deprecated since 1.24, unused and probably never needed
+ * @param string $keyPart DBkey, with prefix
+ * @return string Key part with underscores
+ */
+ public function keyPartToTitle( $keyPart ) {
+ wfDeprecated( __METHOD__, '1.24' );
+ return substr( $this->keyToTitle( $keyPart . 'x' ), 0, -1 );
+ }
+
+ /**@}*/
}
/**
}
/**
- * Overrides base class to prepend 'g' to every generator parameter
+ * Overrides ApiBase to prepend 'g' to every generator parameter
* @param string $paramName Parameter name
* @return string Prefixed parameter name
*/
$fld_token = isset( $prop['token'] );
$fld_tags = isset( $prop['tags'] );
+ if ( isset( $prop['token'] ) ) {
+ $p = $this->getModulePrefix();
+ $this->setWarning(
+ "{$p}prop=token has been deprecated. Please use action=query&meta=tokens instead."
+ );
+ }
+
// If we're in JSON callback mode, no tokens can be obtained
if ( !is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) ) {
$fld_token = false;
' len - Adds the length (bytes) of the revision',
' sha1 - Adds the SHA-1 (base 16) of the revision',
' content - Adds the content of the revision',
- ' token - Gives the edit token',
+ ' token - DEPRECATED! Gives the edit token',
' tags - Tags for the revision',
),
'namespace' => 'Only list pages in this namespace (3)',
* Get an array mapping token names to their handler functions.
* The prototype for a token function is func($pageid, $title)
* it should return a token or false (permission denied)
+ * @deprecated since 1.24
* @return array Array(tokenname => function)
*/
protected function getTokenFunctions() {
static protected $cachedTokens = array();
+ /**
+ * @deprecated since 1.24
+ */
public static function resetTokenCache() {
ApiQueryInfo::$cachedTokens = array();
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getEditToken( $pageid, $title ) {
// We could check for $title->userCan('edit') here,
// but that's too expensive for this purpose
return ApiQueryInfo::$cachedTokens['edit'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getDeleteToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->isAllowed( 'delete' ) ) {
return ApiQueryInfo::$cachedTokens['delete'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getProtectToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->isAllowed( 'protect' ) ) {
return ApiQueryInfo::$cachedTokens['protect'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getMoveToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->isAllowed( 'move' ) ) {
return ApiQueryInfo::$cachedTokens['move'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getBlockToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->isAllowed( 'block' ) ) {
return ApiQueryInfo::$cachedTokens['block'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getUnblockToken( $pageid, $title ) {
// Currently, this is exactly the same as the block token
return self::getBlockToken( $pageid, $title );
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getEmailToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->canSendEmail() || $wgUser->isBlockedFromEmailUser() ) {
return ApiQueryInfo::$cachedTokens['email'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getImportToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->isAllowedAny( 'import', 'importupload' ) ) {
return ApiQueryInfo::$cachedTokens['import'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getWatchToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->isLoggedIn() ) {
return ApiQueryInfo::$cachedTokens['watch'];
}
+ /**
+ * @deprecated since 1.24
+ */
public static function getOptionsToken( $pageid, $title ) {
global $wgUser;
if ( !$wgUser->isLoggedIn() ) {
if ( $this->fld_url ) {
$pageInfo['fullurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
$pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT );
+ $pageInfo['canonicalurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CANONICAL );
}
if ( $this->fld_readable && $title->userCan( 'read', $this->getUser() ) ) {
$pageInfo['readable'] = '';
// need to be added to getCacheMode()
) ),
'token' => array(
+ ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_DFLT => null,
ApiBase::PARAM_ISMULTI => true,
ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() )
' watchers - The number of watchers, if allowed',
' notificationtimestamp - The watchlist notification timestamp of each page',
' subjectid - The page ID of the parent page for each talk page',
- ' url - Gives a full URL to the page, and also an edit URL',
+ ' url - Gives a full URL, an edit URL, and the canonical URL for each page',
' readable - Whether the user can read this page',
' preload - Gives the text returned by EditFormPreloadText',
' displaytitle - Gives the way the page title is actually displayed',
* Get an array mapping token names to their handler functions.
* The prototype for a token function is func($pageid, $title, $rc)
* it should return a token or false (permission denied)
+ * @deprecated since 1.24
* @return array Array(tokenname => function)
*/
protected function getTokenFunctions() {
}
/**
+ * @deprecated since 1.24
* @param int $pageid
* @param Title $title
* @param RecentChange|null $rc
)
),
'token' => array(
+ ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
ApiBase::PARAM_ISMULTI => true
),
private $tokenFunctions;
+ /** @deprecated since 1.24 */
protected function getTokenFunctions() {
// tokenname => function
// function prototype is func($pageid, $title, $rev)
}
/**
+ * @deprecated since 1.24
* @param int $pageid
* @param Title $title
* @param Revision $rev
'parse' => false,
'section' => null,
'token' => array(
+ ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
ApiBase::PARAM_ISMULTI => true
),
$data['phpversion'] = PHP_VERSION;
$data['phpsapi'] = PHP_SAPI;
+ if ( defined( 'HHVM_VERSION' ) ) {
+ $data['hhvmversion'] = HHVM_VERSION;
+ }
$data['dbtype'] = $config->get( 'DBtype' );
$data['dbversion'] = $this->getDB()->getServerVersion();
' fileextensions - Returns list of file extensions allowed to be uploaded',
' rightsinfo - Returns wiki rights (license) information if available',
' restrictions - Returns information on available restriction (protection) types',
- ' languages - Returns a list of languages MediaWiki supports' .
+ ' languages - Returns a list of languages MediaWiki supports ' .
"(optionally localised by using {$p}inlanguagecode)",
' skins - Returns a list of all enabled skins',
' extensiontags - Returns a list of parser extension tags',
--- /dev/null
+<?php
+/**
+ * Module to fetch tokens via action=query&meta=tokens
+ *
+ * Created on August 8, 2014
+ *
+ * Copyright © 2014 Brad Jorsch bjorsch@wikimedia.org
+ *
+ * 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
+ * @since 1.24
+ */
+
+/**
+ * Module to fetch tokens via action=query&meta=tokens
+ *
+ * @ingroup API
+ * @since 1.24
+ */
+class ApiQueryTokens extends ApiQueryBase {
+
+ public function execute() {
+ $params = $this->extractRequestParams();
+ $res = array();
+
+ if ( $this->getMain()->getRequest()->getVal( 'callback' ) !== null ) {
+ $this->setWarning( 'Tokens may not be obtained when using a callback' );
+ return;
+ }
+
+ $salts = self::getTokenTypeSalts();
+ foreach ( $params['type'] as $type ) {
+ $salt = $salts[$type];
+ $val = $this->getUser()->getEditToken( $salt, $this->getRequest() );
+ $res[$type . 'token'] = $val;
+ }
+
+ $this->getResult()->addValue( 'query', $this->getModuleName(), $res );
+ }
+
+ public static function getTokenTypeSalts() {
+ static $salts = null;
+ if ( !$salts ) {
+ wfProfileIn( __METHOD__ );
+ $salts = array(
+ 'csrf' => '',
+ 'watch' => 'watch',
+ 'patrol' => 'patrol',
+ 'rollback' => 'rollback',
+ 'userrights' => 'userrights',
+ );
+ wfRunHooks( 'ApiQueryTokensRegisterTypes', array( &$salts ) );
+ ksort( $salts );
+ wfProfileOut( __METHOD__ );
+ }
+
+ return $salts;
+ }
+
+ public function getAllowedParams() {
+ return array(
+ 'type' => array(
+ ApiBase::PARAM_DFLT => 'csrf',
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_TYPE => array_keys( self::getTokenTypeSalts() ),
+ ),
+ );
+ }
+
+ public function getParamDescription() {
+ return array(
+ 'type' => 'Type of token(s) to request'
+ );
+ }
+
+ public function getDescription() {
+ return 'Gets tokens for data-modifying actions.';
+ }
+
+ protected function getExamples() {
+ return array(
+ 'api.php?action=query&meta=tokens' => 'Retrieve a csrf token (the default)',
+ 'api.php?action=query&meta=tokens&type=watch|patrol' => 'Retrieve a watch token and a patrol token'
+ );
+ }
+
+ public function getCacheMode( $params ) {
+ return 'private';
+ }
+}
$vals['options'] = $user->getOptions();
}
+ if ( isset( $this->prop['preferencestoken'] ) ) {
+ $p = $this->getModulePrefix();
+ $this->setWarning(
+ "{$p}prop=preferencestoken has been deprecated. Please use action=query&meta=tokens instead."
+ );
+ }
if ( isset( $this->prop['preferencestoken'] ) &&
is_null( $this->getMain()->getRequest()->getVal( 'callback' ) ) &&
$user->isAllowed( 'editmyoptions' )
' rights - Lists all the rights the current user has',
' changeablegroups - Lists the groups the current user can add to and remove from',
' options - Lists all preferences the current user has set',
- ' preferencestoken - Get a token to change current user\'s preferences',
+ ' preferencestoken - DEPRECATED! Get a token to change current user\'s preferences',
' editcount - Adds the current user\'s edit count',
' ratelimits - Lists all rate limits applying to the current user',
' realname - Adds the user\'s real name',
* Get an array mapping token names to their handler functions.
* The prototype for a token function is func($user)
* it should return a token or false (permission denied)
+ * @deprecated since 1.24
* @return array Array of tokenname => function
*/
protected function getTokenFunctions() {
}
/**
+ * @deprecated since 1.24
* @param User $user
* @return string
*/
ApiBase::PARAM_ISMULTI => true
),
'token' => array(
+ ApiBase::PARAM_DEPRECATED => true,
ApiBase::PARAM_TYPE => array_keys( $this->getTokenFunctions() ),
ApiBase::PARAM_ISMULTI => true
),
ApiBase::PARAM_TYPE => array( 'yes', 'no', 'nochange' ),
ApiBase::PARAM_DFLT => 'nochange',
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'reason' => null,
);
}
'hide' => 'What to hide for each revision',
'show' => 'What to unhide for each revision',
'suppress' => 'Whether to suppress data from administrators as well as others',
- 'token' => 'A delete token previously retrieved through action=tokens',
'reason' => 'Reason for the deletion/undeletion',
);
}
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
private $mUser = null;
public function execute() {
+ $user = $this->getUser();
$params = $this->extractRequestParams();
- // User and title already validated in call to getTokenSalt from Main
+ // WikiPage::doRollback needs a Web UI token, so get one of those if we
+ // validated based on an API rollback token.
+ $token = $params['token'];
+ if ( $user->matchEditToken( $token, 'rollback', $this->getRequest() ) ) {
+ $token = $this->getUser()->getEditToken(
+ $this->getWebUITokenSalt( $params ),
+ $this->getRequest()
+ );
+ }
+
$titleObj = $this->getRbTitle( $params );
$pageObj = WikiPage::factory( $titleObj );
$summary = $params['summary'];
$retval = $pageObj->doRollback(
$this->getRbUser( $params ),
$summary,
- $params['token'],
+ $token,
$params['markbot'],
$details,
- $this->getUser()
+ $user
);
if ( $retval ) {
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'summary' => '',
'markbot' => false,
'watchlist' => array(
return array(
'title' => "Title of the page you want to roll back. Cannot be used together with {$p}pageid",
'pageid' => "Page ID of the page you want to roll back. Cannot be used together with {$p}title",
- 'user' => 'Name of the user whose edits are to be rolled back. If ' .
- 'set incorrectly, you\'ll get a badtoken error.',
- 'token' => 'A rollback token previously retrieved through ' .
- "{$this->getModulePrefix()}prop=revisions",
+ 'user' => 'Name of the user whose edits are to be rolled back.',
+ 'token' => array(
+ /* Standard description automatically prepended */
+ 'For compatibility, the token used in the web UI is also accepted.'
+ ),
'summary' => 'Custom edit summary. If empty, default summary will be used',
'markbot' => 'Mark the reverted edits and the revert as bot edits',
'watchlist' => 'Unconditionally add or remove the page from your watchlist, ' .
}
public function needsToken() {
- return true;
+ return 'rollback';
}
- public function getTokenSalt() {
- $params = $this->extractRequestParams();
-
+ protected function getWebUITokenSalt( array $params ) {
return array(
$this->getRbTitle( $params )->getPrefixedText(),
$this->getRbUser( $params )
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getAllowedParams( $flags = 0 ) {
'entirewatchlist' => array(
ApiBase::PARAM_TYPE => 'boolean'
),
- 'token' => null,
'timestamp' => array(
ApiBase::PARAM_TYPE => 'timestamp'
),
'timestamp' => 'Timestamp to which to set the notification timestamp',
'torevid' => 'Revision to set the notification timestamp to (one page only)',
'newerthanrevid' => 'Revision to set the notification timestamp newer than (one page only)',
- 'token' => 'A token previously acquired via prop=info',
'continue' => 'When more results are available, use this to continue',
);
}
*/
/**
+ * @deprecated since 1.24
* @ingroup API
*/
class ApiTokens extends ApiBase {
public function execute() {
+ $this->setWarning(
+ "action=tokens has been deprecated. Please use action=query&meta=tokens instead."
+ );
+
$params = $this->extractRequestParams();
$res = array();
}
public function getDescription() {
- return 'Gets tokens for data-modifying actions.';
+ return array(
+ 'This module is deprecated in favor of action=query&meta=tokens.',
+ 'Gets tokens for data-modifying actions.'
+ );
}
protected function getExamples() {
ApiBase::PARAM_TYPE => 'integer',
),
'user' => null,
- 'token' => null,
'reason' => '',
);
}
"Cannot be used together with {$p}user",
'user' => "Username, IP address or IP range you want to unblock. " .
"Cannot be used together with {$p}id",
- 'token' => "An unblock token previously obtained through prop=info",
'reason' => 'Reason for unblock',
);
}
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
ApiBase::PARAM_TYPE => 'string',
ApiBase::PARAM_REQUIRED => true
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'reason' => '',
'timestamps' => array(
ApiBase::PARAM_TYPE => 'timestamp',
public function getParamDescription() {
return array(
'title' => 'Title of the page you want to restore',
- 'token' => array(
- 'An undelete token previously retrieved through list=deletedrevs, or ',
- 'a delete token retrieved through action=tokens.'
- ),
'reason' => 'Reason for restoring',
'timestamps' => array(
'Timestamps of the revisions to restore.',
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
ApiBase::PARAM_DFLT => ''
),
'text' => null,
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'watch' => array(
ApiBase::PARAM_DFLT => false,
ApiBase::PARAM_DEPRECATED => true,
public function getParamDescription() {
$params = array(
'filename' => 'Target filename',
- 'token' => 'Edit token. You can get one of these through prop=info',
'comment' => 'Upload comment. Also used as the initial page text for new ' .
'files if "text" is not specified',
'text' => 'Initial page text for new files',
' * Have the MediaWiki server fetch a file from a URL, using the "url" parameter',
' * Complete an earlier upload that failed due to warnings, using the "filekey" parameter',
'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
- 'sending the "file". Also you must get and send an edit token before doing any upload stuff.'
+ 'sending the "file".',
);
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
- return '';
+ return 'csrf';
}
public function getExamples() {
return array(
'api.php?action=upload&filename=Wiki.png' .
- '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png'
+ '&url=http%3A//upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png&token=123ABC'
=> 'Upload from a URL',
- 'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1'
+ 'api.php?action=upload&filename=Wiki.png&filekey=filekey&ignorewarnings=1&token=123ABC'
=> 'Complete an upload that failed due to warnings',
);
}
public function execute() {
$params = $this->extractRequestParams();
- $user = $this->getUrUser();
+ $user = $this->getUrUser( $params );
$form = new UserrightsPage;
$form->setContext( $this->getContext() );
}
/**
+ * @param array $params
* @return User
*/
- private function getUrUser() {
+ private function getUrUser( array $params ) {
if ( $this->mUser !== null ) {
return $this->mUser;
}
- $params = $this->extractRequestParams();
$this->requireOnlyOneParameter( $params, 'user', 'userid' );
$user = isset( $params['user'] ) ? $params['user'] : '#' . $params['userid'];
ApiBase::PARAM_TYPE => User::getAllGroups(),
ApiBase::PARAM_ISMULTI => true
),
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'reason' => array(
ApiBase::PARAM_DFLT => ''
)
'userid' => 'User id',
'add' => 'Add the user to these groups',
'remove' => 'Remove the user from these groups',
- 'token' => 'A userrights token previously retrieved through list=users',
+ 'token' => array(
+ /* Standard description automatically prepended */
+ 'For compatibility, the token used in the web UI is also accepted.'
+ ),
'reason' => 'Reason for the change',
);
}
}
public function needsToken() {
- return true;
+ return 'userrights';
}
- public function getTokenSalt() {
- return $this->getUrUser()->getName();
+ protected function getWebUITokenSalt( array $params ) {
+ return $this->getUrUser( $params )->getName();
}
public function getExamples() {
}
public function needsToken() {
- return true;
- }
-
- public function getTokenSalt() {
return 'watch';
}
),
'unwatch' => false,
'uselang' => null,
- 'token' => array(
- ApiBase::PARAM_TYPE => 'string',
- ApiBase::PARAM_REQUIRED => true
- ),
'continue' => '',
);
if ( $flags ) {
'title' => 'The page to (un)watch. use titles instead',
'unwatch' => 'If set the page will be unwatched rather than watched',
'uselang' => 'Language to show the message in',
- 'token' => 'A token previously acquired via prop=info',
'continue' => 'When more results are available, use this to continue',
);
}
case 'db':
$storeClass = 'LCStoreDB';
break;
- case 'accel':
- $storeClass = 'LCStoreAccel';
- break;
case 'detect':
$storeClass = $wgCacheDirectory ? 'LCStoreCDB' : 'LCStoreDB';
break;
$deps = $this->store->get( $code, 'deps' );
$keys = $this->store->get( $code, 'list' );
$preload = $this->store->get( $code, 'preload' );
- // Different keys may expire separately, at least in LCStoreAccel
+ // Different keys may expire separately for some stores
if ( $deps === null || $keys === null || $preload === null ) {
wfDebug( __METHOD__ . "($code): cache missing, need to make one\n" );
*
* @param string $code
* @param array $deps
+ * @return array
*/
protected function readSourceFilesAndRegisterDeps( $code, &$deps ) {
global $IP;
if ( $coreData['fallbackSequence'][$len - 1] !== 'en' ) {
$coreData['fallbackSequence'][] = 'en';
}
+ }
- # Load the fallback localisation item by item and merge it
- foreach ( $coreData['fallbackSequence'] as $fbCode ) {
- # Load the secondary localisation from the source file to
- # avoid infinite cycles on cyclic fallbacks
- $fbData = $this->readSourceFilesAndRegisterDeps( $fbCode, $deps );
- if ( $fbData === false ) {
- continue;
- }
+ $codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
- foreach ( self::$allKeys as $key ) {
- if ( !isset( $fbData[$key] ) ) {
- continue;
- }
+ wfProfileIn( __METHOD__ . '-fallbacks' );
+
+ # Load non-JSON localisation data for extensions
+ $extensionData = array_combine(
+ $codeSequence,
+ array_fill( 0, count( $codeSequence ), $initialData ) );
+ foreach ( $wgExtensionMessagesFiles as $extension => $fileName ) {
+ if ( isset( $wgMessagesDirs[$extension] ) ) {
+ # This extension has JSON message data; skip the PHP shim
+ continue;
+ }
- if ( is_null( $coreData[$key] ) || $this->isMergeableKey( $key ) ) {
- $this->mergeItem( $key, $coreData[$key], $fbData[$key] );
+ $data = $this->readPHPFile( $fileName, 'extension' );
+ $used = false;
+
+ foreach ( $data as $key => $item ) {
+ foreach ( $codeSequence as $csCode ) {
+ if ( isset( $item[$csCode] ) ) {
+ $this->mergeItem( $key, $extensionData[$csCode][$key], $item[$csCode] );
+ $used = true;
}
}
}
- }
- $codeSequence = array_merge( array( $code ), $coreData['fallbackSequence'] );
+ if ( $used ) {
+ $deps[] = new FileDependency( $fileName );
+ }
+ }
- # Load core messages and the extension localisations.
- wfProfileIn( __METHOD__ . '-extensions' );
+ # Load the localisation data for each fallback, then merge it into the full array
$allData = $initialData;
- foreach ( $wgMessagesDirs as $dirs ) {
- foreach ( (array)$dirs as $dir ) {
- foreach ( $codeSequence as $csCode ) {
+ foreach ( $codeSequence as $csCode ) {
+ $csData = $initialData;
+
+ # Load core messages and the extension localisations.
+ foreach ( $wgMessagesDirs as $dirs ) {
+ foreach ( (array)$dirs as $dir ) {
$fileName = "$dir/$csCode.json";
$data = $this->readJSONFile( $fileName );
foreach ( $data as $key => $item ) {
- $this->mergeItem( $key, $allData[$key], $item );
+ $this->mergeItem( $key, $csData[$key], $item );
}
$deps[] = new FileDependency( $fileName );
}
}
- }
- foreach ( $wgExtensionMessagesFiles as $extension => $fileName ) {
- if ( isset( $wgMessagesDirs[$extension] ) ) {
- # Already loaded the JSON files for this extension; skip the PHP shim
- continue;
+ # Merge non-JSON extension data
+ if ( isset( $extensionData[$csCode] ) ) {
+ foreach ( $extensionData[$csCode] as $key => $item ) {
+ $this->mergeItem( $key, $csData[$key], $item );
+ }
}
- $data = $this->readPHPFile( $fileName, 'extension' );
- $used = false;
-
- foreach ( $data as $key => $item ) {
- if ( $this->mergeExtensionItem( $codeSequence, $key, $allData[$key], $item ) ) {
- $used = true;
+ if ( $csCode === $code ) {
+ # Merge core data into extension data
+ foreach ( $coreData as $key => $item ) {
+ $this->mergeItem( $key, $csData[$key], $item );
+ }
+ } else {
+ # Load the secondary localisation from the source file to
+ # avoid infinite cycles on cyclic fallbacks
+ $fbData = $this->readSourceFilesAndRegisterDeps( $csCode, $deps );
+ if ( $fbData !== false ) {
+ # Only merge the keys that make sense to merge
+ foreach ( self::$allKeys as $key ) {
+ if ( !isset( $fbData[$key] ) ) {
+ continue;
+ }
+
+ if ( is_null( $coreData[$key] ) || $this->isMergeableKey( $key ) ) {
+ $this->mergeItem( $key, $csData[$key], $fbData[$key] );
+ }
+ }
}
}
- if ( $used ) {
- $deps[] = new FileDependency( $fileName );
+ # Allow extensions an opportunity to adjust the data for this
+ # fallback
+ wfRunHooks( 'LocalisationCacheRecacheFallback', array( $this, $csCode, &$csData ) );
+
+ # Merge the data for this fallback into the final array
+ if ( $csCode === $code ) {
+ $allData = $csData;
+ } else {
+ foreach ( self::$allKeys as $key ) {
+ if ( !isset( $csData[$key] ) ) {
+ continue;
+ }
+
+ if ( is_null( $allData[$key] ) || $this->isMergeableKey( $key ) ) {
+ $this->mergeItem( $key, $allData[$key], $csData[$key] );
+ }
+ }
}
}
- # Merge core data into extension data
- foreach ( $coreData as $key => $item ) {
- $this->mergeItem( $key, $allData[$key], $item );
- }
- wfProfileOut( __METHOD__ . '-extensions' );
+ wfProfileOut( __METHOD__ . '-fallbacks' );
# Add cache dependencies for any referenced globals
$deps['wgExtensionMessagesFiles'] = new GlobalDependency( 'wgExtensionMessagesFiles' );
# HACK: If using a null (i.e. disabled) storage backend, we
# can't write to the MessageBlobStore either
if ( $purgeBlobs && !$this->store instanceof LCStoreNull ) {
- MessageBlobStore::clear();
+ MessageBlobStore::getInstance()->clear();
}
wfProfileOut( __METHOD__ );
function set( $key, $value );
}
-/**
- * LCStore implementation which uses PHP accelerator to store data.
- * This will work if one of XCache, WinCache or APC cacher is configured.
- * (See ObjectCache.php)
- */
-class LCStoreAccel implements LCStore {
- private $currentLang;
- private $keys;
-
- public function __construct() {
- $this->cache = wfGetCache( CACHE_ACCEL );
- }
-
- public function get( $code, $key ) {
- $k = wfMemcKey( 'l10n', $code, 'k', $key );
- $r = $this->cache->get( $k );
-
- return $r === false ? null : $r;
- }
-
- public function startWrite( $code ) {
- $k = wfMemcKey( 'l10n', $code, 'l' );
- $keys = $this->cache->get( $k );
- if ( $keys ) {
- foreach ( $keys as $k ) {
- $this->cache->delete( $k );
- }
- }
- $this->currentLang = $code;
- $this->keys = array();
- }
-
- public function finishWrite() {
- if ( $this->currentLang ) {
- $k = wfMemcKey( 'l10n', $this->currentLang, 'l' );
- $this->cache->set( $k, array_keys( $this->keys ) );
- }
- $this->currentLang = null;
- $this->keys = array();
- }
-
- public function set( $key, $value ) {
- if ( $this->currentLang ) {
- $k = wfMemcKey( 'l10n', $this->currentLang, 'k', $key );
- $this->keys[$k] = true;
- $this->cache->set( $k, $value );
- }
- }
-}
-
/**
* LCStore implementation which uses the standard DB functions to store data.
* This will work on any MediaWiki installation.
// Update the message in the message blob store
global $wgContLang;
- MessageBlobStore::updateMessage( $wgContLang->lcfirst( $msg ) );
+ MessageBlobStore::getInstance()->updateMessage( $wgContLang->lcfirst( $msg ) );
wfRunHooks( 'MessageCacheReplace', array( $title, $text ) );
--- /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
+ * @author Aaron Schulz
+ */
+
+/**
+ * Persistent bloom filter used to avoid expensive lookups
+ *
+ * @since 1.24
+ */
+abstract class BloomCache {
+ /** @var string Unique ID for key namespacing */
+ protected $cacheID;
+
+ /** @var array Map of (id => BloomCache) */
+ protected static $instances = array();
+
+ /**
+ * @param string $id
+ * @return BloomCache
+ */
+ final public static function get( $id ) {
+ global $wgBloomFilterStores;
+
+ if ( !isset( self::$instances[$id] ) ) {
+ if ( isset( $wgBloomFilterStores[$id] ) ) {
+ $class = $wgBloomFilterStores[$id]['class'];
+ self::$instances[$id] = new $class( $wgBloomFilterStores[$id] );
+ } else {
+ wfDebug( "No bloom filter store '$id'; using EmptyBloomCache." );
+ return new EmptyBloomCache( array() );
+ }
+ }
+
+ return self::$instances[$id];
+ }
+
+ /**
+ * Create a new bloom cache instance from configuration.
+ * This should only be called from within BloomCache.
+ *
+ * @param array $config Parameters include:
+ * - cacheID : Prefix to all bloom filter names that is unique to this cache.
+ * It should only consist of alphanumberic, '-', and '_' characters.
+ * This ID is what avoids collisions if multiple logical caches
+ * use the same storage system, so this should be set carefully.
+ */
+ public function __construct( array $config ) {
+ $this->cacheID = $config['cacheId'];
+ if ( !preg_match( '!^[a-zA-Z0-9-_]{1,32}$!', $this->cacheID ) ) {
+ throw new MWException( "Cache ID '{$this->cacheID}' is invalid." );
+ }
+ }
+
+ /**
+ * Check if a member is set in the bloom filter
+ *
+ * A member being set means that it *might* have been added.
+ * A member not being set means it *could not* have been added.
+ *
+ * This abstracts over isHit() to deal with filter updates and readiness.
+ * A class must exist with the name BloomFilter<type> and a static public
+ * mergeAndCheck() method. The later takes the following arguments:
+ * (BloomCache $bcache, $domain, $virtualKey, array $status)
+ * The method should return a bool indicating whether to use the filter.
+ *
+ * The 'shared' bloom key must be used for any updates and will be used
+ * for the membership check if the method returns true. Since the key is shared,
+ * the method should never use delete(). The filter cannot be used in cases where
+ * membership in the filter needs to be taken away. In such cases, code *cannot*
+ * use this method - instead, it can directly use the other BloomCache methods
+ * to manage custom filters with their own keys (e.g. not 'shared').
+ *
+ * @param string $domain
+ * @param string $type
+ * @param string $member
+ * @return bool True if set, false if not (also returns true on error)
+ */
+ final public function check( $domain, $type, $member ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ if ( method_exists( "BloomFilter{$type}", 'mergeAndCheck' ) ) {
+ try {
+ $virtualKey = "$domain:$type";
+
+ $status = $this->getStatus( $virtualKey );
+ if ( $status == false ) {
+ wfDebug( "Could not query virtual bloom filter '$virtualKey'." );
+ return null;
+ }
+
+ $useFilter = call_user_func_array(
+ array( "BloomFilter{$type}", 'mergeAndCheck' ),
+ array( $this, $domain, $virtualKey, $status )
+ );
+
+ if ( $useFilter ) {
+ return ( $this->isHit( 'shared', "$virtualKey:$member" ) !== false );
+ }
+ } catch ( MWException $e ) {
+ MWExceptionHandler::logException( $e );
+ return true;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Inform the bloom filter of a new member in order to keep it up to date
+ *
+ * @param string $domain
+ * @param string $type
+ * @param string|array $members
+ * @return bool Success
+ */
+ final public function insert( $domain, $type, $members ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ if ( method_exists( "BloomFilter{$type}", 'mergeAndCheck' ) ) {
+ try {
+ $virtualKey = "$domain:$type";
+ $prefixedMembers = array();
+ foreach ( (array)$members as $member ) {
+ $prefixedMembers[] = "$virtualKey:$member";
+ }
+
+ return $this->add( 'shared', $prefixedMembers );
+ } catch ( MWException $e ) {
+ MWExceptionHandler::logException( $e );
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Create a new bloom filter at $key (if one does not exist yet)
+ *
+ * @param string $key
+ * @param integer $size Bit length [default: 1000000]
+ * @param float $precision [default: .001]
+ * @return bool Success
+ */
+ final public function init( $key, $size = 1000000, $precision = .001 ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ return $this->doInit( "{$this->cacheID}:$key", $size, min( .1, $precision ) );
+ }
+
+ /**
+ * Add a member to the bloom filter at $key
+ *
+ * @param string $key
+ * @param string|array $members
+ * @return bool Success
+ */
+ final public function add( $key, $members ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ return $this->doAdd( "{$this->cacheID}:$key", (array)$members );
+ }
+
+ /**
+ * Check if a member is set in the bloom filter.
+ *
+ * A member being set means that it *might* have been added.
+ * A member not being set means it *could not* have been added.
+ *
+ * If this returns true, then the caller usually should do the
+ * expensive check (whatever that may be). It can be avoided otherwise.
+ *
+ * @param string $key
+ * @param string $member
+ * @return bool|null True if set, false if not, null on error
+ */
+ final public function isHit( $key, $member ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ return $this->doIsHit( "{$this->cacheID}:$key", $member );
+ }
+
+ /**
+ * Destroy a bloom filter at $key
+ *
+ * @param string $key
+ * @return bool Success
+ */
+ final public function delete( $key ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ return $this->doDelete( "{$this->cacheID}:$key" );
+ }
+
+ /**
+ * Set the status map of the virtual bloom filter at $key
+ *
+ * @param string $virtualKey
+ * @param array $values Map including some of (lastID, asOfTime, epoch)
+ * @return bool Success
+ */
+ final public function setStatus( $virtualKey, array $values ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ return $this->doSetStatus( "{$this->cacheID}:$virtualKey", $values );
+ }
+
+ /**
+ * Get the status map of the virtual bloom filter at $key
+ *
+ * The map includes:
+ * - lastID : the highest ID of the items merged in
+ * - asOfTime : UNIX timestamp that the filter is up-to-date as of
+ * - epoch : UNIX timestamp that filter started being populated
+ * Unset fields will have a null value.
+ *
+ * @param string $virtualKey
+ * @return array|bool False on failure
+ */
+ final public function getStatus( $virtualKey ) {
+ $section = new ProfileSection( get_class( $this ) . '::' . __FUNCTION__ );
+
+ return $this->doGetStatus( "{$this->cacheID}:$virtualKey" );
+ }
+
+ /**
+ * Get an exclusive lock on a filter for updates
+ *
+ * @param string $virtualKey
+ * @return ScopedCallback|ScopedLock|null Returns null if acquisition failed
+ */
+ public function getScopedLock( $virtualKey ) {
+ return null;
+ }
+
+ /**
+ * @param string $key
+ * @param integer $size Bit length
+ * @param float $precision
+ * @return bool Success
+ */
+ abstract protected function doInit( $key, $size, $precision );
+
+ /**
+ * @param string $key
+ * @param array $members
+ * @return bool Success
+ */
+ abstract protected function doAdd( $key, array $members );
+
+ /**
+ * @param string $key
+ * @param string $member
+ * @return bool|null
+ */
+ abstract protected function doIsHit( $key, $member );
+
+ /**
+ * @param string $key
+ * @return bool Success
+ */
+ abstract protected function doDelete( $key );
+
+ /**
+ * @param string $virtualKey
+ * @param array $values
+ * @return bool Success
+ */
+ abstract protected function doSetStatus( $virtualKey, array $values );
+
+ /**
+ * @param string $key
+ * @return array|bool
+ */
+ abstract protected function doGetStatus( $key );
+}
+
+class EmptyBloomCache extends BloomCache {
+ public function __construct( array $config ) {
+ parent::__construct( array( 'cacheId' => 'none' ) );
+ }
+
+ protected function doInit( $key, $size, $precision ) {
+ return true;
+ }
+
+ protected function doAdd( $key, array $members ) {
+ return true;
+ }
+
+ protected function doIsHit( $key, $member ) {
+ return true;
+ }
+
+ protected function doDelete( $key ) {
+ return true;
+ }
+
+ protected function doSetStatus( $virtualKey, array $values ) {
+ return true;
+ }
+
+ protected function doGetStatus( $virtualKey ) {
+ return array( 'lastID' => null, 'asOfTime' => null, 'epoch' => null ) ;
+ }
+}
--- /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
+ * @author Aaron Schulz
+ */
+
+/**
+ * Bloom filter implented using Redis
+ *
+ * The Redis server must be >= 2.6 and should have volatile-lru or volatile-ttl
+ * if there is any eviction policy. It should not be allkeys-* in any case. Also,
+ * this can be used in a simple master/slave setup or with Redis Sentinal preferably.
+ *
+ * Some bits are based on https://github.com/ErikDubbelboer/redis-lua-scaling-bloom-filter
+ * but are simplified to use a single filter instead of up to 32 filters.
+ *
+ * @since 1.24
+ */
+class BloomCacheRedis extends BloomCache {
+ /** @var RedisConnectionPool */
+ protected $redisPool;
+ /** @var RedisLockManager */
+ protected $lockMgr;
+ /** @var array */
+ protected $servers;
+ /** @var integer Federate each filter into this many redis bitfield objects */
+ protected $segments = 128;
+
+ /**
+ * @params include:
+ * - redisServers : list of servers (address:<port>) (the first is the master)
+ * - redisConf : additional redis configuration
+ *
+ * @param array $config
+ */
+ public function __construct( array $config ) {
+ parent::__construct( $config );
+
+ $redisConf = $config['redisConfig'];
+ $redisConf['serializer'] = 'none'; // manage that in this class
+ $this->redisPool = RedisConnectionPool::singleton( $redisConf );
+ $this->servers = $config['redisServers'];
+ $this->lockMgr = new RedisLockManager( array(
+ 'lockServers' => array( 'srv1' => $this->servers[0] ),
+ 'srvsByBucket' => array( 0 => array( 'srv1' ) ),
+ 'redisConfig' => $config['redisConfig']
+ ) );
+ }
+
+ protected function doInit( $key, $size, $precision ) {
+ $conn = $this->getConnection( 'master' );
+ if ( !$conn ) {
+ return false;
+ }
+
+ // 80000000 items at p = .001 take up 500MB and fit into one value.
+ // Do not hit the 512MB redis value limit by reducing the demands.
+ $size = min( $size, 80000000 * $this->segments );
+ $precision = max( round( $precision, 3 ), .001 );
+ $epoch = microtime( true );
+
+ static $script =
+<<<LUA
+ local kMetadata, kData = unpack(KEYS)
+ local aEntries, aPrec, aEpoch = unpack(ARGV)
+ if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
+ redis.call('DEL',kMetadata)
+ redis.call('HSET',kMetadata,'entries',aEntries)
+ redis.call('HSET',kMetadata,'precision',aPrec)
+ redis.call('HSET',kMetadata,'epoch',aEpoch)
+ redis.call('SET',kData,'')
+ return 1
+ end
+ return 0
+LUA;
+
+ $res = false;
+ try {
+ $conn->script( 'load', $script );
+ $conn->multi( Redis::MULTI );
+ for ( $i = 0; $i < $this->segments; ++$i ) {
+ $res = $conn->luaEval( $script,
+ array(
+ "$key:$i:bloom-metadata", # KEYS[1]
+ "$key:$i:bloom-data", # KEYS[2]
+ ceil( $size / $this->segments ), # ARGV[1]
+ $precision, # ARGV[2]
+ $epoch # ARGV[3]
+ ),
+ 2 # number of first argument(s) that are keys
+ );
+ }
+ $results = $conn->exec();
+ $res = $results && !in_array( false, $results, true );
+ } catch ( RedisException $e ) {
+ $this->handleException( $conn, $e );
+ }
+
+ return ( $res !== false );
+ }
+
+ protected function doAdd( $key, array $members ) {
+ $conn = $this->getConnection( 'master' );
+ if ( !$conn ) {
+ return false;
+ }
+
+ static $script =
+<<<LUA
+ local kMetadata, kData = unpack(KEYS)
+ local aMember = unpack(ARGV)
+
+ -- Check if the filter was initialized
+ if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
+ return false
+ end
+
+ -- Initial expected entries and desired precision
+ local entries = 1*redis.call('HGET',kMetadata,'entries')
+ local precision = 1*redis.call('HGET',kMetadata,'precision')
+ local hash = redis.sha1hex(aMember)
+
+ -- Based on the math from: http://en.wikipedia.org/wiki/Bloom_filter#Probability_of_false_positives
+ -- 0.480453013 = ln(2)^2
+ local bits = math.ceil((entries * math.log(precision)) / -0.480453013)
+
+ -- 0.693147180 = ln(2)
+ local k = math.floor(0.693147180 * bits / entries)
+
+ -- This uses a variation on:
+ -- 'Less Hashing, Same Performance: Building a Better Bloom Filter'
+ -- http://www.eecs.harvard.edu/~kirsch/pubs/bbbf/esa06.pdf
+ local h = { }
+ h[0] = tonumber(string.sub(hash, 1, 8 ), 16)
+ h[1] = tonumber(string.sub(hash, 9, 16), 16)
+ h[2] = tonumber(string.sub(hash, 17, 24), 16)
+ h[3] = tonumber(string.sub(hash, 25, 32), 16)
+
+ for i=1, k do
+ local pos = (h[i % 2] + i * h[2 + (((i + (i % 2)) % 4) / 2)]) % bits
+ redis.call('SETBIT', kData, pos, 1)
+ end
+
+ return 1
+LUA;
+
+ $res = false;
+ try {
+ $conn->script( 'load', $script );
+ $conn->multi( Redis::PIPELINE );
+ foreach ( $members as $member ) {
+ $i = $this->getSegment( $member );
+ $conn->luaEval( $script,
+ array(
+ "$key:$i:bloom-metadata", # KEYS[1],
+ "$key:$i:bloom-data", # KEYS[2]
+ $member # ARGV[1]
+ ),
+ 2 # number of first argument(s) that are keys
+ );
+ }
+ $results = $conn->exec();
+ $res = $results && !in_array( false, $results, true );
+ } catch ( RedisException $e ) {
+ $this->handleException( $conn, $e );
+ }
+
+ if ( $res === false ) {
+ wfDebug( "Could not add to the '$key' bloom filter; it may be missing." );
+ }
+
+ return ( $res !== false );
+ }
+
+ protected function doSetStatus( $virtualKey, array $values ) {
+ $conn = $this->getConnection( 'master' );
+ if ( !$conn ) {
+ return null;
+ }
+
+ $res = false;
+ try {
+ $res = $conn->hMSet( "$virtualKey:filter-metadata", $values );
+ } catch ( RedisException $e ) {
+ $this->handleException( $conn, $e );
+ }
+
+ return ( $res !== false );
+ }
+
+ protected function doGetStatus( $virtualKey ) {
+ $conn = $this->getConnection( 'slave' );
+ if ( !$conn ) {
+ return false;
+ }
+
+ $res = false;
+ try {
+ $res = $conn->hGetAll( "$virtualKey:filter-metadata" );
+ } catch ( RedisException $e ) {
+ $this->handleException( $conn, $e );
+ }
+
+ if ( is_array( $res ) ) {
+ $res['lastID'] = isset( $res['lastID'] ) ? $res['lastID'] : null;
+ $res['asOfTime'] = isset( $res['asOfTime'] ) ? $res['asOfTime'] : null;
+ $res['epoch'] = isset( $res['epoch'] ) ? $res['epoch'] : null;
+ }
+
+ return $res;
+ }
+
+ protected function doIsHit( $key, $member ) {
+ $conn = $this->getConnection( 'slave' );
+ if ( !$conn ) {
+ return null;
+ }
+
+ static $script =
+<<<LUA
+ local kMetadata, kData = unpack(KEYS)
+ local aMember = unpack(ARGV)
+
+ -- Check if the filter was initialized
+ if redis.call('EXISTS',kMetadata) == 0 or redis.call('EXISTS',kData) == 0 then
+ return false
+ end
+
+ -- Initial expected entries and desired precision.
+ -- This determines the size of the first and subsequent filters.
+ local entries = redis.call('HGET',kMetadata,'entries')
+ local precision = redis.call('HGET',kMetadata,'precision')
+ local hash = redis.sha1hex(aMember)
+
+ -- This uses a variation on:
+ -- 'Less Hashing, Same Performance: Building a Better Bloom Filter'
+ -- http://www.eecs.harvard.edu/~kirsch/pubs/bbbf/esa06.pdf
+ local h = { }
+ h[0] = tonumber(string.sub(hash, 1, 8 ), 16)
+ h[1] = tonumber(string.sub(hash, 9, 16), 16)
+ h[2] = tonumber(string.sub(hash, 17, 24), 16)
+ h[3] = tonumber(string.sub(hash, 25, 32), 16)
+
+ -- 0.480453013 = ln(2)^2
+ local bits = math.ceil((entries * math.log(precision)) / -0.480453013)
+
+ -- 0.693147180 = ln(2)
+ local k = math.floor(0.693147180 * bits / entries)
+
+ local found = 1
+ for i=1, k do
+ local pos = (h[i % 2] + i * h[2 + (((i + (i % 2)) % 4) / 2)]) % bits
+ if redis.call('GETBIT', kData, pos) == 0 then
+ found = 0
+ break
+ end
+ end
+
+ return found
+LUA;
+
+ $res = null;
+ try {
+ $i = $this->getSegment( $member );
+ $res = $conn->luaEval( $script,
+ array(
+ "$key:$i:bloom-metadata", # KEYS[1],
+ "$key:$i:bloom-data", # KEYS[2]
+ $member # ARGV[1]
+ ),
+ 2 # number of first argument(s) that are keys
+ );
+ } catch ( RedisException $e ) {
+ $this->handleException( $conn, $e );
+ }
+
+ return is_int( $res ) ? (bool)$res : null;
+ }
+
+ protected function doDelete( $key ) {
+ $conn = $this->getConnection( 'master' );
+ if ( !$conn ) {
+ return false;
+ }
+
+ $res = false;
+ try {
+ $keys = array();
+ for ( $i = 0; $i < $this->segments; ++$i ) {
+ $keys[] = "$key:$i:bloom-metadata";
+ $keys[] = "$key:$i:bloom-data";
+ }
+ $res = $conn->delete( $keys );
+ } catch ( RedisException $e ) {
+ $this->handleException( $conn, $e );
+ }
+
+ return ( $res !== false );
+ }
+
+ public function getScopedLock( $virtualKey ) {
+ $status = Status::newGood();
+ return ScopedLock::factory( $this->lockMgr,
+ array( $virtualKey ), LockManager::LOCK_EX, $status );
+ }
+
+ /**
+ * @param string $member
+ * @return integer
+ */
+ protected function getSegment( $member ) {
+ return hexdec( substr( md5( $member ), 0, 2 ) ) % $this->segments;
+ }
+
+ /**
+ * $param string $to (master/slave)
+ * @return RedisConnRef|bool Returns false on failure
+ */
+ protected function getConnection( $to ) {
+ if ( $to === 'master' ) {
+ $conn = $this->redisPool->getConnection( $this->servers[0] );
+ } else {
+ static $lastServer = null;
+
+ $conn = false;
+ if ( $lastServer ) {
+ $conn = $this->redisPool->getConnection( $lastServer );
+ if ( $conn ) {
+ return $conn; // reuse connection
+ }
+ }
+ $servers = $this->servers;
+ $attempts = min( 3, count( $servers ) );
+ for ( $i = 1; $i <= $attempts; ++$i ) {
+ $index = mt_rand( 0, count( $servers ) - 1 );
+ $conn = $this->redisPool->getConnection( $servers[$index] );
+ if ( $conn ) {
+ $lastServer = $servers[$index];
+ return $conn;
+ }
+ unset( $servers[$index] ); // skip next time
+ }
+ }
+
+ return $conn;
+ }
+
+ /**
+ * @param RedisConnRef $conn
+ * @param Exception $e
+ */
+ protected function handleException( RedisConnRef $conn, $e ) {
+ $this->redisPool->handleError( $conn, $e );
+ }
+}
--- /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
+ * @author Aaron Schulz
+ */
+
+/**
+ * @since 1.24
+ */
+class BloomFilterTitleHasLogs {
+ public static function mergeAndCheck(
+ BloomCache $bcache, $domain, $virtualKey, array $status
+ ) {
+ $age = microtime( true ) - $status['asOfTime']; // seconds
+ $scopedLock = ( mt_rand( 1, (int)pow( 3, max( 0, 5 - $age ) ) ) == 1 )
+ ? $bcache->getScopedLock( $virtualKey )
+ : false;
+
+ if ( $scopedLock ) {
+ $updates = self::merge( $bcache, $domain, $virtualKey, $status );
+ if ( isset( $updates['asOfTime'] ) ) {
+ $age = ( microtime( true ) - $updates['asOfTime'] );
+ }
+ }
+
+ return ( $age < 30 );
+ }
+
+ public static function merge(
+ BloomCache $bcache, $domain, $virtualKey, array $status
+ ) {
+ $limit = 1000;
+ $dbr = wfGetDB( DB_SLAVE, array(), $domain );
+ $res = $dbr->select( 'logging',
+ array( 'log_namespace', 'log_title', 'log_id', 'log_timestamp' ),
+ array( 'log_id > ' . $dbr->addQuotes( (int)$status['lastID'] ) ),
+ __METHOD__,
+ array( 'ORDER BY' => 'log_id', 'LIMIT' => $limit )
+ );
+
+ $updates = array();
+ if ( $res->numRows() > 0 ) {
+ $members = array();
+ foreach ( $res as $row ) {
+ $members[] = "$virtualKey:{$row->log_namespace}:{$row->log_title}";
+ }
+ $lastID = $row->log_id;
+ $lastTime = $row->log_timestamp;
+ if ( !$bcache->add( 'shared', $members ) ) {
+ return false;
+ }
+ $updates['lastID'] = $lastID;
+ $updates['asOfTime'] = wfTimestamp( TS_UNIX, $lastTime );
+ } else {
+ $updates['asOfTime'] = microtime( true );
+ }
+
+ $updates['epoch'] = $status['epoch'] ?: microtime( true );
+
+ $bcache->setStatus( $virtualKey, $updates );
+
+ return $updates;
+ }
+}
/**
* Generate the feed items given a row from the database.
* @param object $rows DatabaseBase resource with recentchanges rows
+ * @return array
*/
public static function buildItems( $rows ) {
wfProfileIn( __METHOD__ );
protected $rclistOpen;
protected $rcMoveIndex;
+ /** @var MapCacheLRU */
+ protected $watchingCache;
+
/**
* Changeslist constructor
*
$this->skin = $obj;
}
$this->preCacheMessages();
+ $this->watchingCache = new MapCacheLRU( 50 );
}
/**
* @return string
*/
protected function numberofWatchingusers( $count ) {
- static $cache = array();
+ $cache = $this->watchingCache;
if ( $count > 0 ) {
- if ( !isset( $cache[$count] ) ) {
- $cache[$count] = $this->msg( 'number_of_watching_users_RCview' )
- ->numParams( $count )->escaped();
+ if ( !$cache->has( $count ) ) {
+ $cache->set( $count, $this->msg( 'number_of_watching_users_RCview' )
+ ->numParams( $count )->escaped() );
}
- return $cache[$count];
+ return $cache->get( $count );
} else {
return '';
}
*/
class OldChangesList extends ChangesList {
+
/**
* Format a line using the old system (aka without any javascript).
*
public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
wfProfileIn( __METHOD__ );
- # Should patrol-related stuff be shown?
- $unpatrolled = $this->showAsUnpatrolled( $rc );
-
- $s = '';
$classes = array();
// use mw-line-even/mw-line-odd class only if linenumber is given (feature from bug 14468)
if ( $linenumber ) {
$classes[] = $watched && $rc->mAttribs['rc_timestamp'] >= $watched
? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
+ $html = $this->formatChangeLine( $rc, $watched );
+
+ if ( $this->watchlist ) {
+ $classes[] = Sanitizer::escapeClass( 'watchlist-' .
+ $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
+ }
+
+ if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$html, $rc, &$classes ) ) ) {
+ wfProfileOut( __METHOD__ );
+
+ return false;
+ }
+
+ wfProfileOut( __METHOD__ );
+
+ $dateheader = ''; // $html now contains only <li>...</li>, for hooks' convenience.
+ $this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] );
+
+ return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $html . "</li>\n";
+ }
+
+ /**
+ * @param RecentChange $rc
+ * @param boolean $watched
+ *
+ * @return string
+ */
+ private function formatChangeLine( RecentChange $rc, $watched ) {
+ $html = '';
+
if ( $rc->mAttribs['rc_log_type'] ) {
$logtitle = SpecialPage::getTitleFor( 'Log', $rc->mAttribs['rc_log_type'] );
- $this->insertLog( $s, $logtitle, $rc->mAttribs['rc_log_type'] );
+ $this->insertLog( $html, $logtitle, $rc->mAttribs['rc_log_type'] );
// Log entries (old format) or log targets, and special pages
} elseif ( $rc->mAttribs['rc_namespace'] == NS_SPECIAL ) {
- list( $name, $subpage ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
+ list( $name, $htmlubpage ) = SpecialPageFactory::resolveAlias( $rc->mAttribs['rc_title'] );
if ( $name == 'Log' ) {
- $this->insertLog( $s, $rc->getTitle(), $subpage );
+ $this->insertLog( $html, $rc->getTitle(), $htmlubpage );
}
// Regular entries
} else {
- $this->insertDiffHist( $s, $rc, $unpatrolled );
+ $unpatrolled = $this->showAsUnpatrolled( $rc );
+
+ $this->insertDiffHist( $html, $rc, $unpatrolled );
# M, N, b and ! (minor, new, bot and unpatrolled)
- $s .= $this->recentChangesFlags(
+ $html .= $this->recentChangesFlags(
array(
'newpage' => $rc->mAttribs['rc_type'] == RC_NEW,
'minor' => $rc->mAttribs['rc_minor'],
),
''
);
- $this->insertArticleLink( $s, $rc, $unpatrolled, $watched );
+ $this->insertArticleLink( $html, $rc, $unpatrolled, $watched );
}
# Edit/log timestamp
- $this->insertTimestamp( $s, $rc );
+ $this->insertTimestamp( $html, $rc );
# Bytes added or removed
if ( $this->getConfig()->get( 'RCShowChangedSize' ) ) {
$cd = $this->formatCharacterDifference( $rc );
if ( $cd !== '' ) {
- $s .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
+ $html .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
}
}
if ( $rc->mAttribs['rc_type'] == RC_LOG ) {
- $s .= $this->insertLogEntry( $rc );
+ $html .= $this->insertLogEntry( $rc );
} else {
# User tool links
- $this->insertUserRelatedLinks( $s, $rc );
+ $this->insertUserRelatedLinks( $html, $rc );
# LTR/RTL direction mark
- $s .= $this->getLanguage()->getDirMark();
- $s .= $this->insertComment( $rc );
+ $html .= $this->getLanguage()->getDirMark();
+ $html .= $this->insertComment( $rc );
}
# Tags
- $this->insertTags( $s, $rc, $classes );
+ $this->insertTags( $html, $rc, $classes );
# Rollback
- $this->insertRollback( $s, $rc );
+ $this->insertRollback( $html, $rc );
# For subclasses
- $this->insertExtra( $s, $rc, $classes );
+ $this->insertExtra( $html, $rc, $classes );
# How many users watch this page
if ( $rc->numberofWatchingusers > 0 ) {
- $s .= ' ' . $this->numberofWatchingusers( $rc->numberofWatchingusers );
- }
-
- if ( $this->watchlist ) {
- $classes[] = Sanitizer::escapeClass( 'watchlist-' .
- $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
+ $html .= ' ' . $this->numberofWatchingusers( $rc->numberofWatchingusers );
}
- if ( !wfRunHooks( 'OldChangesListRecentChangesLine', array( &$this, &$s, $rc, &$classes ) ) ) {
- wfProfileOut( __METHOD__ );
-
- return false;
- }
-
- wfProfileOut( __METHOD__ );
-
- $dateheader = ''; // $s now contains only <li>...</li>, for hooks' convenience.
- $this->insertDateHeader( $dateheader, $rc->mAttribs['rc_timestamp'] );
-
- return "$dateheader<li class=\"" . implode( ' ', $classes ) . "\">" . $s . "</li>\n";
+ return $html;
}
}
$text = $this->getNativeData();
$pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
- return new CssContent( $pst );
+ return new static( $pst );
}
/**
parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
}
- /**
- * @param string $text
- * @param string $format
- *
- * @return CssContent
- *
- * @see ContentHandler::unserializeContent()
- */
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
-
- return new CssContent( $text );
- }
-
- /**
- * @return CssContent A new CssContent object with empty text.
- *
- * @see ContentHandler::makeEmptyContent()
- */
- public function makeEmptyContent() {
- return new CssContent( '' );
+ protected function getContentClass() {
+ return 'CssContent';
}
/**
/**
* The class name of objects that should be created
*
+ * @deprecated override getContentClass instead
+ *
* @var string
*/
protected $contentClass = 'JSONContent';
}
/**
- * Unserializes a JSONContent object.
- *
- * @param string $text Serialized form of the content
- * @param null|string $format The format used for serialization
- *
- * @return JSONContent
- */
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
- return new $this->contentClass( $text );
- }
-
- /**
- * Creates an empty JSONContent object.
+ * Temporary back-compat until extensions
+ * are updated to override this
*
- * @return JSONContent
+ * @return string
*/
- public function makeEmptyContent() {
- return new $this->contentClass( '' );
+ protected function getContentClass() {
+ return $this->contentClass;
}
/**
$text = $this->getNativeData();
$pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
- return new JavaScriptContent( $pst );
+ return new static( $pst );
}
/**
parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
}
- /**
- * @param string $text
- * @param string $format
- *
- * @return JavaScriptContent
- *
- * @see ContentHandler::unserializeContent()
- */
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
-
- return new JavaScriptContent( $text );
- }
-
- /**
- * @return JavaScriptContent A new JavaScriptContent object with empty text.
- *
- * @see ContentHandler::makeEmptyContent()
- */
- public function makeEmptyContent() {
- return new JavaScriptContent( '' );
+ protected function getContentClass() {
+ return 'JavaScriptContent';
}
/**
}
/**
- * @param int $maxLength Maximum length of the summary text, defaults to 250.
+ * @param int $maxlength Maximum length of the summary text, defaults to 250.
*
* @return string The summary text.
*
return $mergedContent;
}
+ /**
+ * Returns the name of the associated Content class, to
+ * be used when creating new objects. Override expected
+ * by subclasses.
+ *
+ * @since 1.24
+ *
+ * @return string
+ */
+ protected function getContentClass() {
+ return 'TextContent';
+ }
+
/**
* Unserializes a Content object of the type supported by this ContentHandler.
*
public function unserializeContent( $text, $format = null ) {
$this->checkFormat( $format );
- return new TextContent( $text );
+ $class = $this->getContentClass();
+ return new $class( $text );
}
/**
* @return Content A new TextContent object with empty text.
*/
public function makeEmptyContent() {
- return new TextContent( '' );
+ $class = $this->getContentClass();
+ return new $class( '' );
}
}
if ( $sect === false ) {
return false;
} else {
- return new WikitextContent( $sect );
+ return new static( $sect );
}
}
$text = $wgParser->replaceSection( $oldtext, $sectionId, $text );
}
- $newContent = new WikitextContent( $text );
+ $newContent = new static( $text );
wfProfileOut( __METHOD__ );
$text .= "\n\n";
$text .= $this->getNativeData();
- return new WikitextContent( $text );
+ return new static( $text );
}
/**
$pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
rtrim( $pst );
- return ( $text === $pst ) ? $this : new WikitextContent( $pst );
+ return ( $text === $pst ) ? $this : new static( $pst );
}
/**
$text = $this->getNativeData();
$plt = $wgParser->getPreloadText( $text, $title, $popts, $params );
- return new WikitextContent( $plt );
+ return new static( $plt );
}
/**
'[[' . $target->getFullText() . ']]',
$this->getNativeData(), 1 );
- return new WikitextContent( $newText );
+ return new static( $newText );
}
/**
Article::getRedirectHeaderHtml( $title->getPageLanguage(), $chain, false ) .
$output->getText()
);
+ $output->addModuleStyles( 'mediawiki.action.view.redirectPage' );
}
}
}
parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
}
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
-
- return new WikitextContent( $text );
- }
-
- /**
- * @return Content A new WikitextContent object with empty text.
- *
- * @see ContentHandler::makeEmptyContent
- */
- public function makeEmptyContent() {
- return new WikitextContent( '' );
+ protected function getContentClass() {
+ return 'WikitextContent';
}
/**
$redirectText .= "\n" . $text;
}
- return new WikitextContent( $redirectText );
+ $class = $this->getContentClass();
+ return new $class( $redirectText );
}
/**
$e = new Exception;
wfDebugLog( 'recursion-guard', "Recursion detected:\n" . $e->getTraceAsString() );
- $code = $this->getConfig()->get( 'LanguageCode' ) ? : 'en';
+ $code = $this->getConfig()->get( 'LanguageCode' ) ?: 'en';
$this->lang = Language::factory( $code );
} elseif ( $this->lang === null ) {
$this->recursion = true;
* Get the RequestContext object associated with the main request
* and gives a warning to the log, to find places, where a context maybe is missing.
*
+ * @param string $func
* @return RequestContext
* @since 1.24
*/
* - DBO_DEBUG: output some debug info (same as debug())
* - DBO_NOBUFFER: don't buffer results (inverse of bufferResults())
* - DBO_TRX: automatically start transactions
- * - DBO_DEFAULT: automatically sets DBO_TRX if not in command line mode
- * and removes it in command line mode
* - DBO_PERSISTENT: use persistant database connection
* @return bool
*/
}
/**
- * Return a path to the DBMS-specific schema file, otherwise default to tables.sql
+ * Return a path to the DBMS-specific SQL file if it exists,
+ * otherwise default SQL file
*
+ * @param string $filename
* @return string
*/
- public function getSchemaPath() {
+ private function getSqlFilePath( $filename ) {
global $IP;
- if ( file_exists( "$IP/maintenance/" . $this->getType() . "/tables.sql" ) ) {
- return "$IP/maintenance/" . $this->getType() . "/tables.sql";
+ $dbmsSpecificFilePath = "$IP/maintenance/" . $this->getType() . "/$filename";
+ if ( file_exists( $dbmsSpecificFilePath ) ) {
+ return $dbmsSpecificFilePath;
} else {
- return "$IP/maintenance/tables.sql";
+ return "$IP/maintenance/$filename";
}
}
+ /**
+ * Return a path to the DBMS-specific schema file,
+ * otherwise default to tables.sql
+ *
+ * @return string
+ */
+ public function getSchemaPath() {
+ return $this->getSqlFilePath( 'tables.sql' );
+ }
+
+ /**
+ * Return a path to the DBMS-specific update key file,
+ * otherwise default to update-keys.sql
+ *
+ * @return string
+ */
+ public function getUpdateKeysPath() {
+ return $this->getSqlFilePath( 'update-keys.sql' );
+ }
+
# ------------------------------------------------------------------------------
# Other functions
# ------------------------------------------------------------------------------
/**
* @since 1.19
+ * @return string
*/
public function __toString() {
return (string)$this->mConn;
/**
* @param bool $value
- * @return null|bool|ResultWrapper
*/
public function setBigSelects( $value = true ) {
if ( $value === 'default' ) {
* Give an id for the connection
*
* mysql driver used resource id, but mysqli objects cannot be cast to string.
+ * @return string
*/
public function __toString() {
if ( $this->mConn instanceof Mysqli ) {
/**
* @since 1.19
+ * @return bool|mixed
*/
function defaultValue() {
if ( $this->has_default ) {
* so causes a DB error. This wrapper checks which tables can be locked and adjusts it accordingly.
*
* MySQL uses "ORDER BY NULL" as an optimization hint, but that syntax is illegal in PostgreSQL.
+ * @see DatabaseBase::selectSQLText
*/
function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
$options = array(), $join_conds = array()
* @param int $callerOffset How far up the callstack is the original
* caller. 2 = function that called the function that called
* MWDebug::deprecated() (Added in 1.20).
- * @return mixed
*/
public static function deprecated( $function, $version = false,
$component = false, $callerOffset = 2
return array(
'mwVersion' => $wgVersion,
- 'phpVersion' => PHP_VERSION,
+ 'phpEngine' => wfIsHHVM() ? 'HHVM' : 'PHP',
+ 'phpVersion' => wfIsHHVM() ? HHVM_VERSION : PHP_VERSION,
'gitRevision' => GitInfo::headSHA1(),
'gitBranch' => GitInfo::currentBranch(),
'gitViewUrl' => GitInfo::headViewUrl(),
* 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
+ * @return string
*/
public static function updateText( $text ) {
global $wgContLang;
'undoafter' => $this->mOldid,
'undo' => $this->mNewid
) ),
- 'title' => Linker::titleAttrib( 'undo' )
+ 'title' => Linker::titleAttrib( 'undo' ),
),
$this->msg( 'editundo' )->text()
);
- $revisionTools[] = $undoLink;
+ $revisionTools['mw-diff-undo'] = $undoLink;
}
}
wfRunHooks( 'DiffRevisionTools', array( $this->mNewRev, &$revisionTools, $this->mOldRev ) );
$formattedRevisionTools = array();
// Put each one in parentheses (poor man's button)
- foreach ( $revisionTools as $tool ) {
- $formattedRevisionTools[] = $this->msg( 'parentheses' )->rawParams( $tool )->escaped();
+ foreach ( $revisionTools as $key => $tool ) {
+ $toolClass = is_string( $key ) ? $key : 'mw-diff-tool';
+ $element = Html::rawElement(
+ 'span',
+ array( 'class' => $toolClass ),
+ $this->msg( 'parentheses' )->rawParams( $tool )->escaped()
+ );
+ $formattedRevisionTools[] = $element;
}
$newRevisionHeader = $this->getRevisionHeader( $this->mNewRev, 'complete' ) .
' ' . implode( ' ', $formattedRevisionTools );
$key = $title->quickUserCan( 'edit', $user ) ? 'editold' : 'viewsourceold';
$msg = $this->msg( $key )->escaped();
- $header .= ' ' . $this->msg( 'parentheses' )->rawParams(
- Linker::linkKnown( $title, $msg, array(), $editQuery ) )->plain();
+ $editLink = $this->msg( 'parentheses' )->rawParams(
+ Linker::linkKnown( $title, $msg, array( ), $editQuery ) )->plain();
+ $header .= ' ' . Html::rawElement(
+ 'span',
+ array( 'class' => 'mw-diff-edit' ),
+ $editLink
+ );
if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
$header = Html::rawElement(
'span',
/**
* Create a repo class based on an info structure
* @param array $info
+ * @return FileRepo
*/
protected function newRepo( $info ) {
$class = $info['class'];
/**
* Returns the number of pages of a multipage document, or false for
* documents which aren't multipage documents
+ * @return bool|int
*/
function pageCount() {
if ( !isset( $this->pageCount ) ) {
*/
function canRender() {
if ( !isset( $this->canRender ) ) {
- $this->canRender = $this->getHandler() && $this->handler->canRender( $this );
+ $this->canRender = $this->getHandler() && $this->handler->canRender( $this ) && $this->exists();
}
return $this->canRender;
* @return ThumbnailImage
*/
function iconThumb() {
- global $wgStylePath, $wgStyleDirectory;
+ global $wgScriptPath, $IP;
+ $assetsPath = "$wgScriptPath/assets/file-type-icons/";
+ $assetsDirectory = "$IP/assets/file-type-icons/";
$try = array( 'fileicon-' . $this->getExtension() . '.png', 'fileicon.png' );
foreach ( $try as $icon ) {
- $path = '/common/images/icons/' . $icon;
- $filepath = $wgStyleDirectory . $path;
- if ( file_exists( $filepath ) ) { // always FS
+ if ( file_exists( $assetsDirectory . $icon ) ) { // always FS
$params = array( 'width' => 120, 'height' => 120 );
- return new ThumbnailImage( $this, $wgStylePath . $path, false, $params );
+ return new ThumbnailImage( $this, $assetsPath . $icon, false, $params );
}
}
/**
* Get last thumbnailing error.
* Largely obsolete.
+ * @return string
*/
function getLastError() {
return $this->lastError;
return true;
}
+
+ /**
+ * If archive name is an empty string, then file does not "exist"
+ *
+ * This is the case for a couple files on Wikimedia servers where
+ * the old version is "lost".
+ */
+ public function exists() {
+ $archiveName = $this->getArchiveName();
+ if ( $archiveName === '' || !is_string( $archiveName ) ) {
+ return false;
+ }
+ return parent::exists();
+ }
}
*
* @param string|bool $mode Mode to use. False to use the default
* @param IContextSource|null $context
+ * @return ImageGalleryBase
* @throws MWException
*/
static function factory( $mode = false, IContextSource $context = null ) {
/**
* Add javascript which auto-justifies the rows by manipulating the image sizes.
* Also ensures that the hover version of this degrades gracefully.
+ * @return array
*/
protected function getModules() {
return array( 'mediawiki.page.gallery' );
--- /dev/null
+<?php
+
+/**
+ * Text field for selecting a value from a large list of possible values, with
+ * auto-completion and optionally with a select dropdown for selecting common
+ * options.
+ *
+ * If one of 'options-messages', 'options', or 'options-message' is provided
+ * and non-empty, the select dropdown will be shown. An 'other' key will be
+ * appended using message 'htmlform-selectorother-other' if not already
+ * present.
+ *
+ * Besides the parameters recognized by HTMLTextField, the following are
+ * recognized:
+ * options-messages - As for HTMLSelectField
+ * options - As for HTMLSelectField
+ * options-message - As for HTMLSelectField
+ * autocomplete - Associative array mapping display text to values.
+ * autocomplete-messages - Like autocomplete, but keys are message names.
+ * require-match - Boolean, if true the value must be in the options or the
+ * autocomplete.
+ * other-message - Message to use instead of htmlform-selectorother-other for
+ * the 'other' message.
+ * other - Raw text to use for the 'other' message
+ *
+ */
+class HTMLAutoCompleteSelectField extends HTMLTextField {
+ protected $autocomplete = array();
+
+ function __construct( $params ) {
+ $params += array(
+ 'require-match' => false,
+ );
+
+ parent::__construct( $params );
+
+ if ( array_key_exists( 'autocomplete-messages', $this->mParams ) ) {
+ foreach ( $this->mParams['autocomplete-messages'] as $key => $value ) {
+ $key = $this->msg( $key )->plain();
+ $this->autocomplete[$key] = strval( $value );
+ }
+ } elseif ( array_key_exists( 'autocomplete', $this->mParams ) ) {
+ foreach ( $this->mParams['autocomplete'] as $key => $value ) {
+ $this->autocomplete[$key] = strval( $value );
+ }
+ }
+ if ( !is_array( $this->autocomplete ) || !$this->autocomplete ) {
+ throw new MWException( 'HTMLAutoCompleteSelectField called without any autocompletions' );
+ }
+
+ $this->getOptions();
+ if ( $this->mOptions && !in_array( 'other', $this->mOptions, true ) ) {
+ if ( isset( $params['other-message'] ) ) {
+ $msg = wfMessage( $params['other-message'] )->text();
+ } elseif ( isset( $params['other'] ) ) {
+ $msg = $params['other'];
+ } else {
+ $msg = wfMessage( 'htmlform-selectorother-other' )->text();
+ }
+ $this->mOptions[$msg] = 'other';
+ }
+ }
+
+ function loadDataFromRequest( $request ) {
+ if ( $request->getCheck( $this->mName ) ) {
+ $val = $request->getText( $this->mName . '-select', 'other' );
+
+ if ( $val === 'other' ) {
+ $val = $request->getText( $this->mName );
+ if ( isset( $this->autocomplete[$val] ) ) {
+ $val = $this->autocomplete[$val];
+ }
+ }
+
+ return $val;
+ } else {
+ return $this->getDefault();
+ }
+ }
+
+ function validate( $value, $alldata ) {
+ $p = parent::validate( $value, $alldata );
+
+ if ( $p !== true ) {
+ return $p;
+ }
+
+ $validOptions = HTMLFormField::flattenOptions( $this->getOptions() );
+
+ if ( in_array( strval( $value ), $validOptions, true ) ) {
+ return true;
+ } elseif ( in_array( strval( $value ), $this->autocomplete, true ) ) {
+ return true;
+ } elseif ( $this->mParams['require-match'] ) {
+ return $this->msg( 'htmlform-select-badoption' )->parse();
+ }
+
+ return true;
+ }
+
+ function getAttributes( array $list ) {
+ $attribs = array(
+ 'type' => 'text',
+ 'data-autocomplete' => FormatJson::encode( array_keys( $this->autocomplete ) ),
+ ) + parent::getAttributes( $list );
+
+ if ( $this->getOptions() ) {
+ $attribs['data-hide-if'] = FormatJson::encode(
+ array( '!==', $this->mName . '-select', 'other' )
+ );
+ }
+
+ return $attribs;
+ }
+
+ function getInputHTML( $value ) {
+ $oldClass = $this->mClass;
+ $this->mClass = (array)$this->mClass;
+
+ $valInSelect = false;
+ $ret = '';
+
+ if ( $this->getOptions() ) {
+ if ( $value !== false ) {
+ $value = strval( $value );
+ $valInSelect = in_array(
+ $value, HTMLFormField::flattenOptions( $this->getOptions() ), true
+ );
+ }
+
+ $selected = $valInSelect ? $value : 'other';
+ $select = new XmlSelect( $this->mName . '-select', $this->mID . '-select', $selected );
+ $select->addOptions( $this->getOptions() );
+ $select->setAttribute( 'class', 'mw-htmlform-select-or-other' );
+
+ if ( !empty( $this->mParams['disabled'] ) ) {
+ $select->setAttribute( 'disabled', 'disabled' );
+ }
+
+ if ( isset( $this->mParams['tabindex'] ) ) {
+ $select->setAttribute( 'tabindex', $this->mParams['tabindex'] );
+ }
+
+ $ret = $select->getHTML() . "<br />\n";
+
+ $this->mClass[] = 'mw-htmlform-hide-if';
+ }
+
+ if ( $valInSelect ) {
+ $value = '';
+ } else {
+ $key = array_search( strval( $value ), $this->autocomplete, true );
+ if ( $key !== false ) {
+ $value = $key;
+ }
+ }
+
+ $this->mClass[] = 'mw-htmlform-autocomplete';
+ $ret .= parent::getInputHTML( $valInSelect ? '' : $value );
+ $this->mClass = $oldClass;
+
+ return $ret;
+ }
+
+}
* @return string
*/
function getInputHTML( $value ) {
- global $wgUseMediaWikiUIEverywhere;
-
$html = '';
$tableContents = '';
$rows = $this->mParams['rows'];
$thisAttribs['disabled'] = 1;
}
$chkBox = Xml::check( "{$this->mName}[]", $checked, $attribs + $thisAttribs );
- if ( $wgUseMediaWikiUIEverywhere ) {
+ if ( $this->mParent->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
$chkBox = Html::openElement( 'div', array( 'class' => 'mw-ui-checkbox' ) ) .
$chkBox .
Html::element( 'label', array( 'for' => $thisId ) ) .
'edittools' => 'HTMLEditTools',
'checkmatrix' => 'HTMLCheckMatrix',
'cloner' => 'HTMLFormFieldCloner',
+ 'autocompleteselect' => 'HTMLAutoCompleteSelectField',
// HTMLTextField will output the correct type="" attribute automagically.
// There are about four zillion other HTML5 input types, like range, but
// we don't use those at the moment, so no point in adding all of them.
* @return string
*/
public function getDisplayFormat() {
- global $wgHTMLFormAllowTableFormat;
$format = $this->displayFormat;
- if ( !$wgHTMLFormAllowTableFormat && $format === 'table' ) {
+ if ( !$this->getConfig()->get( 'HTMLFormAllowTableFormat' ) && $format === 'table' ) {
$format = 'div';
}
return $format;
* @return string HTML.
*/
function getHiddenFields() {
- global $wgArticlePath;
-
$html = '';
if ( $this->getMethod() == 'post' ) {
$html .= Html::hidden(
$html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
}
- if ( strpos( $wgArticlePath, '?' ) !== false && $this->getMethod() == 'get' ) {
+ $articlePath = $this->getConfig()->get( 'ArticlePath' );
+ if ( strpos( $articlePath, '?' ) !== false && $this->getMethod() == 'get' ) {
$html .= Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) . "\n";
}
* @return string HTML.
*/
function getButtons() {
- global $wgUseMediaWikiUIEverywhere;
$buttons = '';
+ $useMediaWikiUIEverywhere = $this->getConfig()->get( 'UseMediaWikiUIEverywhere' );
if ( $this->mShowSubmit ) {
$attribs = array();
$attribs['class'] = array( 'mw-htmlform-submit' );
- if ( $this->isVForm() || $wgUseMediaWikiUIEverywhere ) {
+ if ( $this->isVForm() || $useMediaWikiUIEverywhere ) {
array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-constructive' );
}
$attrs['id'] = $button['id'];
}
- if ( $wgUseMediaWikiUIEverywhere ) {
- if ( isset( $attrs['class' ] ) ) {
+ if ( $useMediaWikiUIEverywhere ) {
+ if ( isset( $attrs['class'] ) ) {
$attrs['class'] .= ' mw-ui-button';
} else {
$attrs['class'] = 'mw-ui-button';
* @return string
*/
public function getAction() {
- global $wgScript, $wgArticlePath;
-
// If an action is alredy provided, return it
if ( $this->mAction !== false ) {
return $this->mAction;
}
- // Check whether we are in GET mode and $wgArticlePath contains a "?"
+ $articlePath = $this->getConfig()->get( 'ArticlePath' );
+ // Check whether we are in GET mode and the ArticlePath contains a "?"
// meaning that getLocalURL() would return something like "index.php?title=...".
// As browser remove the query string before submitting GET forms,
- // it means that the title would be lost. In such case use $wgScript instead
+ // it means that the title would be lost. In such case use wfScript() instead
// and put title in an hidden field (see getHiddenFields()).
- if ( strpos( $wgArticlePath, '?' ) !== false && $this->getMethod() === 'get' ) {
- return $wgScript;
+ if ( strpos( $articlePath, '?' ) !== false && $this->getMethod() === 'get' ) {
+ return wfScript();
}
return $this->getTitle()->getLocalURL();
}
/**
- * Create database tables from scratch.
+ * Apply a SQL source file to the database as part of running an installation step.
*
+ * @param string $sourceFileMethod
+ * @param string $stepName
+ * @param string $archiveTableMustNotExist
* @return Status
*/
- public function createTables() {
+ private function stepApplySourceFile(
+ $sourceFileMethod,
+ $stepName,
+ $archiveTableMustNotExist = false
+ ) {
$status = $this->getConnection();
if ( !$status->isOK() ) {
return $status;
}
$this->db->selectDB( $this->getVar( 'wgDBname' ) );
- if ( $this->db->tableExists( 'archive', __METHOD__ ) ) {
- $status->warning( 'config-install-tables-exist' );
+ if ( $archiveTableMustNotExist && $this->db->tableExists( 'archive', __METHOD__ ) ) {
+ $status->warning( "config-$stepName-tables-exist" );
$this->enableLB();
return $status;
$this->db->setFlag( DBO_DDLMODE ); // For Oracle's handling of schema files
$this->db->begin( __METHOD__ );
- $error = $this->db->sourceFile( $this->db->getSchemaPath() );
+ $error = $this->db->sourceFile(
+ call_user_func( array( $this->db, $sourceFileMethod ) )
+ );
if ( $error !== true ) {
$this->db->reportQueryError( $error, 0, '', __METHOD__ );
$this->db->rollback( __METHOD__ );
- $status->fatal( 'config-install-tables-failed', $error );
+ $status->fatal( "config-$stepName-tables-failed", $error );
} else {
$this->db->commit( __METHOD__ );
}
return $status;
}
+ /**
+ * Create database tables from scratch.
+ *
+ * @return Status
+ */
+ public function createTables() {
+ return $this->stepApplySourceFile( 'getSchemaPath', 'install', true );
+ }
+
+ /**
+ * Insert update keys into table to prevent running unneded updates.
+ *
+ * @return Status
+ */
+ public function insertUpdateKeys() {
+ return $this->stepApplySourceFile( 'getUpdateKeysPath', 'updates', false );
+ }
+
/**
* Create the tables for each extension the user enabled
* @return Status
if ( $wgLocalisationCacheConf['manualRecache'] ) {
$this->rebuildLocalisationCache();
}
- MessageBlobStore::clear();
+ MessageBlobStore::getInstance()->clear();
$this->output( "done.\n" );
}
/**
* Updates the timestamps in the transcache table
+ * @return bool
*/
protected function doUpdateTranscacheField() {
if ( $this->updateRowExists( 'convert transcache field' ) ) {
public function doEnvironmentChecks() {
// Php version has already been checked by entry scripts
// Show message here for information purposes
- $this->showMessage( 'config-env-php', PHP_VERSION );
+ if ( wfIsHHVM() ) {
+ $this->showMessage( 'config-env-hhvm', HHVM_VERSION );
+ } else {
+ $this->showMessage( 'config-env-php', PHP_VERSION );
+ }
$good = true;
// Must go here because an old version of PCRE can prevent other checks from completing
/**
* Environment check for register_globals.
* Prevent installation if enabled
+ * @return bool
*/
protected function envCheckRegisterGlobals() {
if ( wfIniGetBool( 'register_globals' ) ) {
array( 'name' => 'interwiki', 'callback' => array( $installer, 'populateInterwikiTable' ) ),
array( 'name' => 'stats', 'callback' => array( $this, 'populateSiteStats' ) ),
array( 'name' => 'keys', 'callback' => array( $this, 'generateKeys' ) ),
+ array( 'name' => 'updates', 'callback' => array( $installer, 'insertUpdateKeys' ) ),
array( 'name' => 'sysop', 'callback' => array( $this, 'createSysop' ) ),
array( 'name' => 'mainpage', 'callback' => array( $this, 'createMainpage' ) ),
);
array( 'updateConstraints', 'media_type', 'image', 'img_media_type' ),
array( 'updateConstraints', 'media_type', 'uploadstash', 'us_media_type' ),
// END: Constraint updates
+
+ array( 'modifyField', 'image', 'img_major_mime',
+ 'patch-img_major_mime-chemical.sql' ),
+ array( 'modifyField', 'oldimage', 'oi_major_mime',
+ 'patch-oi_major_mime-chemical.sql' ),
+ array( 'modifyField', 'filearchive', 'fa_major_mime',
+ 'patch-fa_major_mime-chemical.sql' ),
);
}
// 1.24
array( 'addField', 'page_props', 'pp_sortkey', 'patch-pp_sortkey.sql' ),
array( 'dropField', 'recentchanges', 'rc_cur_time', 'patch-drop-rc_cur_time.sql' ),
- array( 'addIndex', 'watchlist', 'wl_user_notificationtimestamp', 'patch-watchlist-user-notificationtimestamp-index.sql' ),
+ array( 'addIndex', 'watchlist', 'wl_user_notificationtimestamp',
+ 'patch-watchlist-user-notificationtimestamp-index.sql' ),
array( 'addField', 'page', 'page_lang', 'patch-page_lang.sql' ),
array( 'addField', 'pagelinks', 'pl_from_namespace', 'patch-pl_from_namespace.sql' ),
array( 'addField', 'templatelinks', 'tl_from_namespace', 'patch-tl_from_namespace.sql' ),
array( 'addField', 'imagelinks', 'il_from_namespace', 'patch-il_from_namespace.sql' ),
+ array( 'modifyField', 'image', 'img_major_mime',
+ 'patch-img_major_mime-chemical.sql' ),
+ array( 'modifyField', 'oldimage', 'oi_major_mime',
+ 'patch-oi_major_mime-chemical.sql' ),
+ array( 'modifyField', 'filearchive', 'fa_major_mime',
+ 'patch-fa_major_mime-chemical.sql' ),
);
}
* @return string
*/
public function getCSS() {
- // Horrible, horrible hack: the installer is currently hardcoded to use the Vector skin, so load
- // it here. Include instead of require, as this will work without it, it will just look bad.
- // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
- // definitions for its RL modules there that we use implicitly below.
- // @codingStandardsIgnoreStart
- global $wgResourceModules; // This is NOT UNUSED!
- // @codingStandardsIgnoreEnd
global $wgStyleDirectory;
- include_once "$wgStyleDirectory/Vector/Vector.php";
$moduleNames = array(
// See SkinTemplate::setupSkinUserCss
'mediawiki.legacy.shared',
// See Vector::setupSkinUserCss
'mediawiki.skinning.interface',
- 'skins.vector.styles',
-
- 'mediawiki.legacy.config',
);
- $css = '';
+ if ( file_exists( "$wgStyleDirectory/Vector/Vector.php" ) ) {
+ // Force loading Vector skin if available as a fallback skin
+ // for whatever ResourceLoader wants to have as the default.
+
+ // Include instead of require, as this will work without it, it will just look bad.
+ // We need the 'global' statement for $wgResourceModules because the Vector skin adds the
+ // definitions for its RL modules there that we use implicitly below.
+
+ // @codingStandardsIgnoreStart
+ global $wgResourceModules; // This is NOT UNUSED!
+ // @codingStandardsIgnoreEnd
+
+ include_once "$wgStyleDirectory/Vector/Vector.php";
+
+ $moduleNames[] = 'skins.vector.styles';
+ }
+
+ $moduleNames[] = 'mediawiki.legacy.config';
$resourceLoader = new ResourceLoader();
$rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( array(
'debug' => 'true',
'lang' => $this->getLanguageCode(),
'only' => 'styles',
- 'skin' => 'vector',
) ) );
+
+ $styles = array();
foreach ( $moduleNames as $moduleName ) {
/** @var ResourceLoaderFileModule $module */
$module = $resourceLoader->getModule( $moduleName );
- // One of the modules will be missing if Vector is unavailable
- if ( !$module ) {
- continue;
- }
// Based on: ResourceLoaderFileModule::getStyles (without the DB query)
- $styles = ResourceLoader::makeCombinedStyles( $module->readStyleFiles(
- $module->getStyleFiles( $rlContext ),
- $module->getFlip( $rlContext )
- ) );
-
- $css .= implode( "\n", $styles );
+ $styles = array_merge( $styles, ResourceLoader::makeCombinedStyles(
+ $module->readStyleFiles(
+ $module->getStyleFiles( $rlContext ),
+ $module->getFlip( $rlContext )
+ ) ) );
}
- return $css;
+ return implode( "\n", $styles );
}
/**
<?php echo Html::openElement( 'body', array( 'class' => $this->getDir() ) ) . "\n"; ?>
<div id="mw-page-base"></div>
<div id="mw-head-base"></div>
-<div id="content">
-<div id="bodyContent">
+<div id="content" class="mw-body">
+<div id="bodyContent" class="mw-body-content">
<h1><?php $this->outputTitle(); ?></h1>
<?php
"config-env-good": "Асяродзьдзе было праверанае.\nВы можаце ўсталёўваць MediaWiki.",
"config-env-bad": "Асяродзьдзе было праверанае.\nУсталяваньне MediaWiki немагчымае.",
"config-env-php": "Усталяваны PHP $1.",
+ "config-env-hhvm": "HHVM $1 усталяваная.",
"config-unicode-using-utf8": "Выкарыстоўваецца бібліятэка Unicode-нармалізацыі Браяна Вібэра",
"config-unicode-using-intl": "Выкарыстоўваецца [http://pecl.php.net/intl intl пашырэньне з PECL] для Unicode-нармалізацыі",
"config-unicode-pure-php-warning": "'''Папярэджаньне''': [http://pecl.php.net/intl Пашырэньне intl з PECL] — ня слушнае для Unicode-нармалізацыі, цяпер выкарыстоўваецца марудная PHP-рэалізацыя.\nКалі ў Вас сайт з высокай наведваемасьцю, раім пачытаць пра [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-нармалізацыю].",
"config-skins": "Тэмы афармленьня",
"config-skins-help": "Пералічаныя вышэй тэмы афармленьня знойдзеныя ў вашай тэчцы <code>./skins</code>. Вы мусіце ўключыць як мінімум адну, а таксама абраць тэму па змоўчаньні.",
"config-skins-use-as-default": "Выкарыстоўваць па змоўчаньні гэтую тэму афармленьня",
+ "config-skins-missing": "Тэмы афармленьня ня знойдзеныя; MediaWiki будзе ўжываць рэзэрвовую тэму афармленьня, пакуль вы не ўсталюеце нешта адпаведнае.",
"config-install-alreadydone": "'''Папярэджаньне:''' здаецца, што Вы ўжо ўсталёўвалі MediaWiki і спрабуеце зрабіць гэтай зноў.\nКалі ласка, перайдзіце на наступную старонку.",
"config-install-begin": "Пасьля націску кнопкі «{{int:config-continue}}» пачнецца ўсталяваньне MediaWiki.\nКалі Вы жадаеце што-небудзь зьмяніць, націсьніце кнопку «{{int:config-back}}».",
"config-install-step-done": "зроблена",
"config-help-restart": "আপনি কী সকল সংরক্ষিত উপাত্ত পরিষ্কার করতে যা আপনি প্রবেস করিয়েছিলেন এবং ইন্সটালেসন ব্যবস্থা পুনরায় আরম্ভ করতে চান?",
"config-restart": "হ্যাঁ, পুনরায় চালু করুন",
"config-env-php": "পিএইচপি $1 ইন্সটল করা হয়েছে।",
+ "config-env-hhvm": "HHVM $1 ইনস্টল করা হয়েছে।",
+ "config-xcache": "[http://xcache.lighttpd.net/ XCache] ইনস্টল করা হয়েছে",
"config-apc": "[http://www.php.net/apc এপিসি] ইনস্টল হয়েছে",
+ "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] ইনস্টল করা হয়েছে",
"config-db-type": "ডেটাবেজের ধরন:",
"config-db-host": "ডেটাবেজের হোস্ট:",
"config-db-wiki-settings": "এই উইকি সনাক্ত করুন",
"config-db-install-account": "ইন্সটলের জন্য ব্যবহারকারী অ্যাকাউন্ট",
"config-db-username": "ডেটাবেজের ব্যবহারকারী নাম:",
"config-db-password": "ডেটাবেজের শব্দচাবি:",
+ "config-db-username-empty": "আপনাকে অবশ্যই \"{{int:config-db-username}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
+ "config-db-wiki-account": "সাধারণ অভিযানের জন্য ব্যবহারকারী একাউন্ট",
+ "config-db-prefix": "উপাত্তশালা ছক প্রিফিক্স:",
"config-db-charset": "ডেটাবেজের অক্ষর সেট",
"config-db-port": "ডেটাবেজ পোর্ট:",
"config-db-schema": "মিডিয়াউইকির স্কিমা",
"config-sqlite-dir": "এসকিউলাইট ডেটা ডিরেক্টরি:",
"config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস",
"config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:",
+ "config-type-mssql": "মাইক্রোসফট এসকিউএল সার্ভার",
"config-header-mysql": "মাইএসকিউএল সেটিংস",
"config-header-postgres": "পোস্টগ্রেএসকিউএল সেটিংস",
"config-header-sqlite": "এসকিউলাইট সেটিংস",
"config-license": "কপিরাইট ও লাইসেন্স:",
"config-license-none": "কোনো লাইসেন্স ফুটার নেই",
"config-license-cc-by-sa": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন শেয়ার অ্যালাইক",
+ "config-license-cc-by": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন",
"config-license-cc-by-nc-sa": "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন নন-কমার্শিয়াল শেয়ার অ্যালাইক",
"config-license-cc-0": "ক্রিয়েটিভ কমন্স জিরো (পাবলিক ডোমেইন)",
"config-license-pd": "পাবলিক ডোমেইন",
"config-env-good": "Gwiriet eo bet an endro.\nGallout a rit staliañ MediaWiki.",
"config-env-bad": "Gwiriet eo bet an endro.\nNe c'hallit ket staliañ MediaWiki.",
"config-env-php": "Staliet eo PHP $1.",
+ "config-env-hhvm": "HHVM $1 zo staliet.",
"config-unicode-using-utf8": "Oc'h implijout utf8_normalize.so gant Brion Vibber evit ar reolata Unicode.",
"config-unicode-using-intl": "Oc'h implijout [http://pecl.php.net/intl an astenn PECL intl] evit ar reolata Unicode.",
"config-unicode-pure-php-warning": "'''Diwallit''' : N'haller ket kaout an [http://pecl.php.net/intl intl PECL astenn] evit merañ reoladur Unicode, a zistro d'ar stumm gorrek emplementet e-PHP.\nMa lakait da dreiñ ul lec'hienn darempredet-stank e vo mat deoc'h lenn un tammig bihan diwar-benn se war [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization]. (e saozneg)",
"config-db-web-help": "Diuzañ an anv implijer hag ar ger-tremen a vo implijet gant ar servijer web evit kevreañ ouzh ar servijer diaz roadennoù pa vez ar wiki o vont en-dro war ar pemdez.",
"config-db-web-account-same": "Ober gant an hevelep kont hag an hini implijet evit ar staliañ",
"config-db-web-create": "Krouiñ ar gont ma n'eus ket anezhi c'hoazh",
+ "config-db-web-no-create-privs": "Ar gont ho peus diferet evit ar staliañ n'he deus ket gwirioù a-walc'h evit krouiñ ur gont.\nRet eo d'ar gont diferet amañ bezañ anezhi dija.",
"config-mysql-engine": "Lusker stokañ :",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
"config-install-interwiki-list": "Ne c'haller ket kavout ar restr <code>interwiki.list</code>.",
"config-install-stats": "O sevel ar stadegoù",
"config-install-keys": "Genel an alc'hwezioù kuzh",
+ "config-install-updates": "Mirout da lakaat hizivadennoù diezhomm da vont en-dro",
"config-install-sysop": "Krouidigezh kont ar merour",
"config-install-subscribe-fail": "N'haller ket koumanantiñ da mediawiki-announce : $1",
"config-install-subscribe-notpossible": "cURL n'eo ket staliet ha ne c'haller ket ober gant <code>allow_url_fopen</code>.",
"config-env-good": "Prostředí bylo zkontrolováno.\nMůžete nainstalovat MediaWiki.",
"config-env-bad": "Prostředí bylo zkontrolováno.\nMediaWiki nelze nainstalovat.",
"config-env-php": "Je nainstalováno PHP $1.",
+ "config-env-hhvm": "Je nainstalováno HHVM $1.",
"config-unicode-using-utf8": "Pro normalizaci Unicode se používá utf8_normalize.so Briona Vibbera.",
"config-unicode-using-intl": "Pro normalizaci Unicode se používá [http://pecl.php.net/intl PECL rozšíření intl].",
"config-unicode-pure-php-warning": "'''Upozornění''': Není dostupné [http://pecl.php.net/intl PECL rozšíření intl] pro normalizaci Unicode, bude se využívat pomalá implementace v čistém PHP.\nPokud provozujete wiki s velkou návštěvností, měli byste si přečíst něco o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizaci Unicode].",
"config-install-stats": "Inicializují se statistiky",
"config-install-keys": "Vytvářejí se tajné klíče",
"config-insecure-keys": "'''Upozornění:''' {{PLURAL:$2|Tajný klíč|Tajné klíče}} ($1) vytvořené v průběhu instalace {{PLURAL:$2|není|nejsou}} zcela {{PLURAL:$2|bezpečný|bezpečné}}. Zvažte {{PLURAL:$2|jeho|jejich}} ruční změnu.",
+ "config-install-updates": "Ruší se spuštění nepotřebných aktualizací",
+ "config-install-updates-failed": "<strong>Chyba:</strong> Vložení aktualizačních klíčů do tabulek selhalo s následující chybou: $1",
"config-install-sysop": "Zakládá se uživatelský účet správce",
"config-install-subscribe-fail": "Nelze se přihlásit k odběru mediawiki-announce: $1",
"config-install-subscribe-notpossible": "Není nainstalován cURL a není dostupné <code>allow_url_fopen</code>.",
"config-env-good": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann installiert werden.",
"config-env-bad": "Die Installationsumgebung wurde geprüft.\nMediaWiki kann nicht installiert werden.",
"config-env-php": "Die Skriptsprache „PHP“ ($1) ist installiert.",
+ "config-env-hhvm": "HHVM $1 ist installiert.",
"config-unicode-using-utf8": "Zur Unicode-Normalisierung wird Brion Vibbers <code>utf8_normalize.so</code> eingesetzt.",
"config-unicode-using-intl": "Zur Unicode-Normalisierung wird die [http://pecl.php.net/intl PECL-Erweiterung intl] eingesetzt.",
"config-unicode-pure-php-warning": "'''Warnung:''' Die [http://pecl.php.net/intl PECL-Erweiterung intl] ist für die Unicode-Normalisierung nicht verfügbar, so dass stattdessen die langsame pure-PHP-Implementierung genutzt wird.\nSofern eine Website mit großer Benutzeranzahl betrieben wird, sollten weitere Informationen auf der Webseite [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-Normalisierung (en)] gelesen werden.",
"config-install-stats": "Statistiken werden initialisiert",
"config-install-keys": "Geheimschlüssel werden erstellt",
"config-insecure-keys": "'''Warnung:''' {{PLURAL:$2|Der Geheimschlüssel|Die Geheimschlüssel}} $1, {{PLURAL:$2|der|die}} während des Installationsvorgangs generiert {{PLURAL:$2|wurde, ist|wurden, sind}} nicht sehr sicher. {{PLURAL:$2|Er sollte|Sie sollten}} manuell geändert werden.",
+ "config-install-updates": "Unnötige Aktualisierungen nicht ausführen",
+ "config-install-updates-failed": "<strong>Fehler:</strong> Das Einfügen von Aktualisierungsschlüssel in die Tabellen ist mit dem folgenden Fehler fehlgeschlagen: $1",
"config-install-sysop": "Administratorkonto wird erstellt",
"config-install-subscribe-fail": "Abonnieren von „mediawiki-announce“ ist gescheitert: $1",
"config-install-subscribe-notpossible": "cURL ist nicht installiert und <code>allow_url_fopen</code> ist nicht verfügbar.",
"config-env-good": "The environment has been checked.\nYou can install MediaWiki.",
"config-env-bad": "The environment has been checked.\nYou cannot install MediaWiki.",
"config-env-php": "PHP $1 is installed.",
+ "config-env-hhvm": "HHVM $1 is installed.",
"config-unicode-using-utf8": "Using Brion Vibber's utf8_normalize.so for Unicode normalization.",
"config-unicode-using-intl": "Using the [http://pecl.php.net/intl intl PECL extension] for Unicode normalization.",
"config-unicode-pure-php-warning": "<strong>Warning:</strong> The [http://pecl.php.net/intl intl PECL extension] is not available to handle Unicode normalization, falling back to slow pure-PHP implementation.\nIf you run a high-traffic site, you should read a little on [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
"config-install-stats": "Initializing statistics",
"config-install-keys": "Generating secret keys",
"config-insecure-keys": "<strong>Warning:</strong> {{PLURAL:$2|A secure key|Secure keys}} ($1) generated during installation {{PLURAL:$2|is|are}} not completely safe. Consider changing {{PLURAL:$2|it|them}} manually.",
+ "config-install-updates": "Prevent running unneeded updates",
+ "config-install-updates-failed": "<strong>Error:</strong> Inserting update keys into tables failed with the following error: $1",
"config-install-sysop": "Creating administrator user account",
"config-install-subscribe-fail": "Unable to subscribe to mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL is not installed and <code>allow_url_fopen</code> is not available.",
"McDutchie",
"Miguel2706",
"Macofe",
- "AVIADOR"
+ "AVIADOR",
+ "FuzzyDice"
]
},
"config-desc": "El instalador de MediaWiki",
"config-session-expired": "Tus datos de sesión parecen haber expirado.\nLas sesiones están configuradas por una duración de $1.\nPuedes incrementar esto configurando <code>session.gc_maxlifetime</code> en php.ini.\nReiniciar el proceso de instalación.",
"config-no-session": "Se han perdido los datos de sesión.\nVerifica tu php.ini y comprueba que <code>session.save_path</code> está establecido en un directorio apropiado.",
"config-your-language": "Tu idioma:",
- "config-your-language-help": "Seleccionar un idioma a usar durante el proceso de instalación.",
+ "config-your-language-help": "Selecciona un idioma para usar durante el proceso de instalación.",
"config-wiki-language": "Idioma del wiki:",
- "config-wiki-language-help": "Seleccionar el idioma en el que el wiki será escrito predominantemente.",
+ "config-wiki-language-help": "Selecciona el idioma en el que se escribirá predominantemente el wiki.",
"config-back": "← Atrás",
"config-continue": "Continuar →",
"config-page-language": "Idioma",
"config-env-good": "El entorno ha sido comprobado.\nPuedes instalar MediaWiki.",
"config-env-bad": "El entorno ha sido comprobado.\nNo puedes instalar MediaWiki.",
"config-env-php": "PHP $1 está instalado.",
+ "config-env-hhvm": "HHVM $1 está instalado.",
"config-unicode-using-utf8": "Usando utf8_normalize.so de Brion Vibber para la normalización Unicode.",
"config-unicode-using-intl": "Usando la [http://pecl.php.net/intl extensión intl PECL] para la normalización Unicode.",
"config-unicode-pure-php-warning": "'''Advertencia''': La [http://pecl.php.net/intl extensión intl] no está disponible para efectuar la normalización Unicode. Utilizando la implementación más lenta en PHP.\nSi tu web tiene mucho tráfico, te recomendamos leer acerca de la [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
"config-no-cache": "'''Advertencia:''' No pudo encontrarse [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está habilitado.",
"config-mod-security": "''' Advertencia ''': Su servidor web tiene [http://modsecurity.org/ mod_security] habilitado. Si la configuración es incorrecta, puede causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrarios.\nConsulte la [http://modsecurity.org/documentation/ documentación de mod_security] o contacte con el soporte de su servidor (''host'') si encuentra errores aleatorios.",
"config-diff3-bad": "GNU diff3 no se encuentra.",
- "config-git": "Se encontró el ''software'' de control de versiones Git: <code>$1</code>.",
+ "config-git": "Se encontró el software de control de versiones Git: <code>$1</code>.",
"config-git-bad": "No se encontró el software de control de versiones Git.",
"config-imagemagick": "ImageMagick encontrado: <code>$1</code>.\nLa miniaturización de imágenes se habilitará si habilitas las cargas.",
"config-gd": "Se ha encontrado una biblioteca de gráficos GD integrada.\nLa miniaturización de imágenes se habilitará si habilitas las subidas.",
"config-no-scaling": "No se ha encontrado ninguma biblioteca GD o ImageMagik.\nSe inhabilitará la miniaturización de imágenes.",
- "config-no-uri": "'''Error:''' No se pudo determinar el URI actual.\nSe interrumpió la instalación.",
+ "config-no-uri": "<strong>Error:</strong> no se pudo determinar el URI actual.\nSe interrumpió la instalación.",
"config-no-cli-uri": "<strong>Aviso:</strong> No se especificó <code>--scriptpath</code>; se usa el valor predeterminado: <code>$1</code>.",
"config-using-server": "Utilizando el nombre de servidor \"<nowiki>$1</nowiki>\".",
- "config-using-uri": "Utilizando la dirección URL del servidor \"<nowiki>$1$2</nowiki>\".",
+ "config-using-uri": "Utilizando la URL del servidor \"<nowiki>$1$2</nowiki>\".",
"config-uploads-not-safe": "'''Atención:''' Su directorio por defecto para las cargas, <code>$1</code>, es vulnerable a la ejecución de scripts arbitrarios.\nAunque MediaWiki comprueba todos los archivos cargados por si hubiese amenazas de seguridad, es altamente recomendable [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security cerrar esta vulnerabilidad de seguridad] antes de activar las cargas.",
"config-no-cli-uploads-check": "'''Atención:''' Su directorio predeterminado para cargas (<code>$1</code>) no está comprobado para la vulnerabilidad\n de ejecución arbitraria de comandos script durante la instalación de CLI.",
"config-brokenlibxml": "El sistema tiene una combinación de versiones de PHP y de libxml2 que es poco confiable y puede provocar corrupción oculta en los datos de MediaWiki y otras aplicaciones web.\nActualizar a PHP 5.2.9 o posterior y a libxml2 2.7.3 o posterior ([//bugs.php.net/bug.php?id=45996 bug reportado con PHP]).\nInstalación abortada.",
"config-suhosin-max-value-length": "Suhosin está instalado y limita el parámetro <code>length</code> GET a $1 bytes.\nEl componente ResourceLoader (gestor de recursos) de MediaWiki trabajará en este límite, pero eso perjudicará el rendimiento.\nSi es posible, deberías establecer <code>suhosin.get.max_value_length</code> en el valor 1024 o superior en <code>php.ini</code> y establecer <code>$wgResourceLoaderMaxQueryLength</code> en el mismo valor en <code>php.ini</code>.",
- "config-db-type": "Tipo de base de datos",
+ "config-db-type": "Tipo de base de datos:",
"config-db-host": "Servidor de la base de datos:",
"config-db-host-help": "Si su servidor de base de datos está en otro servidor, escriba el nombre del host o su dirección IP aquí.\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento debería darle el nombre correcto del servidor de alojamiento (host) en su documentación.\nSi va a instalarlo en un servidor Windows y utiliza MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si no es así, intente poner \"127.0.0.1\" como dirección IP local.\nSi utiliza PostgreSQL, deje este campo en blanco para conectarse a través de un socket de Unix.",
"config-db-host-oracle": "TNS de la base de datos:",
"config-db-host-oracle-help": "Introduzca un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si está utilizando bibliotecas de cliente 10g o más recientes también puede utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
- "config-db-wiki-settings": "Identifique este wiki",
- "config-db-name": "Nombre de base de datos:",
+ "config-db-wiki-settings": "Identifica este wiki",
+ "config-db-name": "Nombre de la base de datos:",
"config-db-name-help": "Elija un nombre que identifique su wiki.\nNo debe contener espacios.\n\nSi está utilizando alojamiento web compartido, su proveedor de alojamiento le dará un nombre específico de base de datos para que lo utilice, o bien le permitirá crear bases de datos a través de un panel de control.",
- "config-db-name-oracle": "Esquema de base de datos:",
+ "config-db-name-oracle": "Esquema de la base de datos:",
"config-db-account-oracle-warn": "Hay tres escenarios compatibles para la instalación de Oracle como base de datos back-end:\n\nSi desea crear una cuenta de base de datos como parte del proceso de instalación, por favor suministre una cuenta con función SYSDBA como cuenta de base de datos para la instalación y especifique las credenciales deseadas de la cuenta de acceso al web, de lo contrario puede crear manualmente la cuenta de acceso al web y suministrar sólo esa cuenta (si tiene los permisos necesarios para crear los objetos de esquema) o suministrar dos cuentas diferentes, una con privilegios de creación y otra con acceso restringido a la web\n\nLa secuencia de comandos (script) para crear una cuenta con los privilegios necesarios puede encontrarse en el directorio \"maintenance/oracle/\" de esta instalación. Tenga en cuenta que utilizando una cuenta restringida desactivará todas las capacidades de mantenimiento con la cuenta predeterminada.",
"config-db-install-account": "Cuenta de usuario para instalación",
- "config-db-username": "Nombre de usuario de base de datos:",
- "config-db-password": "contraseña de base de datos:",
+ "config-db-username": "Nombre de usuario de la base de datos:",
+ "config-db-password": "Contraseña de la base de datos:",
"config-db-password-empty": "Introduzca una contraseña para el nuevo usuario de base de datos: $1.\nAunque es posible crear usuarios sin contraseña, esto no es seguro.",
"config-db-username-empty": "Debe introducir un valor para \"{{int:config-db-username}}\"",
"config-db-install-username": "Introduzca el nombre de usuario que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEste no es el nombre de usuario de la cuenta de MediaWiki; Este es el nombre de usuario para la base de datos.",
"config-db-install-password": "Introduzca la contraseña que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nEsta no es la contraseña para la cuenta de MediaWiki; esta es la contraseña para la base de datos.",
"config-db-install-help": "Ingresar el nombre de usuario y la contraseña que será usada para conectar a la base de datos durante el proceso de instalación.",
"config-db-account-lock": "Usar el mismo nombre de usuario y contraseña durante operación normal",
- "config-db-wiki-account": "Usar cuenta para operación normal",
+ "config-db-wiki-account": "Cuenta de usuario para operación normal",
"config-db-wiki-help": "Introduce el nombre de usuario y la contraseña que serán usados para acceder a la base de datos durante la operación normal del wiki.\nSi esta cuenta no existe y la cuenta de instalación tiene suficientes privilegios, se creará esta cuenta de usuario con los privilegios mínimos necesarios para la operación normal del wiki.",
- "config-db-prefix": "Prefijo de tablas de base de datos:",
+ "config-db-prefix": "Prefijo de tablas de la base de datos:",
"config-db-prefix-help": "Si necesita compartir una base de datos entre múltiples wikis, o entre MediaWiki y otra aplicación web, puede optar por agregar un prefijo a todos los nombres de tabla para evitar conflictos.\nNo utilice espacios.\n\nNormalmente se deja este campo vacío.",
"config-db-charset": "Conjunto de caracteres de la base de datos",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
"config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
"config-charset-mysql4": "MySQL 4.0 retrocompatible UTF-8",
"config-charset-help": "'''Atención:''' Si emplea '''backwards-compatible UTF-8''' en MySQL 4.1+ y posteriormente hace copia de seguridad de la base de datos con <code>mysqldump</code> , puede destruir todos los caracteres no-ASCII, ¡dañando irreversiblemente sus copias de seguridad!\n\nEn '''modo binario''', MediaWiki almacena texto UTF-8 en la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL, y le permite utilizar la gama completa de caracteres Unicode.\nEn ''' modo UTF-8'' ', MySQL sabrá el juego de caracteres de sus datos y puede presentarlos y convertirlos apropiadamente,\npero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
- "config-mysql-old": "Se necesita MySQL $1 o una versión más reciente. Tienes la versión $2.",
+ "config-mysql-old": "Se necesita MySQL $1 o posterior. Tienes $2.",
"config-db-port": "Puerto de la base de datos:",
"config-db-schema": "Esquema para MediaWiki",
"config-db-schema-help": "Estos esquemas usualmente estarán bien.\nAltéralos sólo si tienes la seguridad de que necesitas hacerlo.",
"config-upgrade-done": "Actualización completa.\n\nUsted puede ahora [ $1 empezar a usar su wiki].\n\nSi desea regenerar su archivo <code>LocalSettings.php</code> de archivo, haga clic en el botón de abajo.\nEsto '''no se recomienda''' a menos que esté teniendo problemas con su wiki.",
"config-upgrade-done-no-regenerate": "Actualización completa.\n\nUsted puede ahora [$1 empezar a usar su wiki].",
"config-regenerate": "Regenerar LocalSettings.php →",
- "config-show-table-status": "<code>SHOW TABLE STATUS</code> ha fallado!",
+ "config-show-table-status": "¡Falló la consulta <code>SHOW TABLE STATUS</code>!",
"config-unknown-collation": "'''Advertencia:''' La base de datos está utilizando una intercalación no reconocida.",
- "config-db-web-account": "Cuenta de base de datos para acceso Web",
+ "config-db-web-account": "Cuenta de la base de datos para acceso web",
"config-db-web-help": "Elige el usuario y contraseña que el servidor Web usará para conectarse al servidor de la base de datos durante el fincionamiento normal del wiki.",
"config-db-web-account-same": "Utilizar la misma cuenta que en la instalación",
"config-db-web-create": "Crear la cuenta si no existe",
"config-mysql-binary": "Binario",
"config-mysql-utf8": "UTF-8",
"config-mysql-charset-help": "En '''modo binario''', MediaWiki almacena texto UTF-8 para la base de datos en campos binarios.\nEsto es más eficiente que el modo UTF-8 de MySQL y le permite utilizar la gama completa de caracteres Unicode.\n\nEn '''modo UTF-8''', MySQL sabrá qué conjunto de caracteres emplean sus datos y puede presentarlos y convertirlos adecuadamente, pero no le permitirá almacenar caracteres por encima del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plano multilingüe básico].",
- "config-mssql-auth": "Tipo de autentificación:",
+ "config-mssql-auth": "Tipo de autenticación:",
"config-mssql-install-auth": "Seleccione el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales de cualquier usuario de el servidor web que se está ejecutando van a ser utilizadas.",
"config-mssql-web-auth": "Seleccione el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi selecciona \"{{int:config-mssql-windowsauth}}\", las credenciales del usuario que sea cual sea el servidor Web se ejecuta como será utilizado.",
"config-mssql-sqlauth": "Autenticación de SQL Server",
"config-site-name-blank": "Ingresar un nombre de sitio.",
"config-project-namespace": "Espacio de nombre de proyecto:",
"config-ns-generic": "Proyecto",
- "config-ns-site-name": "Igual como el nombre del wiki: $1",
+ "config-ns-site-name": "Igual al nombre del wiki: $1",
"config-ns-other": "Otro (especificar)",
"config-ns-other-default": "MiWiki",
"config-project-namespace-help": "Siguiendo el ejemplo de Wikipedia, muchos wikis mantienen sus páginas de políticas separadas de sus páginas de contenido, en un \"'''espacio de nombres del proyecto'''\".\n\nTodos los títulos de página en este espacio de nombres comienzan con un determinado prefijo, que usted puede especificar aquí.\nTradicionalmente, este prefijo se deriva del nombre del wiki, pero no puede contener caracteres de puntuación como \"#\" o \":\".",
"config-admin-box": "Cuenta de administrador",
"config-admin-name": "Tu nombre de usuario:",
"config-admin-password": "Contraseña:",
- "config-admin-password-confirm": "Repita la contraseña:",
+ "config-admin-password-confirm": "Repite la contraseña:",
"config-admin-help": "Escribe aquí el nombre de usuario que desees, como por ejemplo \"Pedro Bloggs\".\nEste es el nombre que usarás para entrar al wiki.",
"config-admin-name-blank": "Introduce un nombre de usuario de administrador.",
"config-admin-name-invalid": "El nombre de usuario especificado \"<nowiki>$1</nowiki>\" no es válido.\nEspecifique un nombre de usuario diferente.",
"config-profile-fishbowl": "Sólo editores autorizados",
"config-profile-private": "Wiki privado",
"config-profile-help": "Los wikis funcionan mejor cuando dejas que los edite tanta gente como sea posible.\nEn MediaWiki, es fácil revisar los cambios recientes y revertir los daños realizados por usuarios malintencionados o novatos.\nSin embargo, muchos han encontrado que MediaWiki es útil para una amplia variedad de funciones, y a veces no es fácil convencer a todos de los beneficios de la forma wiki.\nPor lo tanto tienes la elección.\n\nEl modelo '''{{int:config-profile-wiki}}''' permite que cualquiera pueda editar, sin siquiera iniciar sesión.\nUn wiki con '''{{int:config-profile-no-anon}}''' ofrece rendición de cuentas adicional, pero puede disuadir a colaboradores.\n\nEl modelo '''{{int:config-profile-fishbowl}}''' permite editar a los usuarios autorizados, pero el público puede ver las páginas, incluyendo el historial.\nUn '''{{int:config-profile-private}}''' sólo permite ver páginas a los usuarios autorizados, el mismo grupo al que le está permitido editar.\n\nConfiguraciones más complejas de derechos de usuario están disponibles después de la instalación, consulte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights esta entrada en el manual].",
- "config-license": "Copyright and licencia:",
+ "config-license": "Derechos de autor y licencia:",
"config-license-none": "Pie sin licencia",
- "config-license-cc-by-sa": "Creative Commons Reconocimiento Compartir Igual",
- "config-license-cc-by": "Creative Commons Reconocimiento",
- "config-license-cc-by-nc-sa": "Creative Commons Reconocimiento Compartir Igual no comercial",
+ "config-license-cc-by-sa": "Creative Commons Atribución-CompartirIgual",
+ "config-license-cc-by": "Creative Commons Atribución",
+ "config-license-cc-by-nc-sa": "Creative Commons Atribución-NoComercial-CompartirIgual",
"config-license-cc-0": "Creative Commons Zero (dominio público)",
"config-license-gfdl": "Licencia de documentación libre de GNU 1.3 o posterior",
- "config-license-pd": "Dominio Público",
+ "config-license-pd": "Dominio público",
"config-license-cc-choose": "Selecciona una licencia personalizada de Creative Commons",
"config-license-help": "Muchos wikis públicos ponen todas las contribuciones bajo una [http://freedomdefined.org/Definition licencia libre].\nEsto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.\nEsto no es generalmente necesario para un wiki privado o corporativo.\n\nSi deseas poder utilizar texto de Wikipedia, y deseas que Wikipedia pueda aceptar el texto copiado de tu wiki, debes elegir <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).\nLa GFDL es una licencia válida, pero es difícil de entender.\nTambién es difícil reutilizar el contenido licenciado bajo la GFDL.",
"config-email-settings": "Configuración de correo electrónico",
"config-enable-email": "Activar el envío de correos electrónicos",
"config-enable-email-help": "Si quieres que el correo electrónico funcione, la [http://www.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.\nSi no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.",
- "config-email-user": "Habilitar correo electrónico de usuario a usuario",
+ "config-email-user": "Habilitar correo electrónico entre usuarios",
"config-email-user-help": "Permitir que todos los usuarios intercambien correos electrónicos si lo han activado en sus preferencias.",
"config-email-usertalk": "Activar notificaciones de páginas de discusión de usuarios",
"config-email-usertalk-help": "Permitir a los usuarios recibir notificaciones de cambios en la página de discusión de usuario, si lo han activado en sus preferencias.",
"config-install-user": "Creando el usuario de la base de datos",
"config-install-user-alreadyexists": "El usuario \"$1\" ya existe",
"config-install-user-create-failed": "La creación del usuario \"$1\" falló: $2",
- "config-install-user-grant-failed": "La concesión de permisos para el usuario \"$1\" ha fallado: $2",
+ "config-install-user-grant-failed": "La concesión de permisos al usuario \"$1\" falló: $2",
"config-install-user-missing": "El usuario especificado \"$1\" no existe.",
"config-install-user-missing-create": "El usuario especificado \"$1\" no existe.\nPor favor, haga clic en la casilla \"Crear cuenta\" que aparece a continuación si desea crearlo.",
"config-install-tables": "Creando tablas",
"config-install-interwiki-list": "No se pudo encontrar el archivo <code>interwiki.list</code>.",
"config-install-interwiki-exists": "'''Advertencia''': La tabla de interwikis parece ya contener entradas.\nSe omitirá la lista predeterminada.",
"config-install-stats": "Iniciando las estadísticas",
- "config-install-keys": "Generación de claves secretas",
+ "config-install-keys": "Generando claves secretas",
"config-insecure-keys": "''' Atención:'' ' {{PLURAL:$2|Una clave de seguridad generada|Las claves de seguridad generadas}} ($1) durante la instalación no {{PLURAL:$2|es totalmente segura|son totalmente seguras}}. Considere {{PLURAL:$2| cambiarla|cambiarlas}} manualmente.",
- "config-install-sysop": "Creando cuenta de usuario del administrador",
+ "config-install-updates": "Evitar ejecutar actualizaciones innecesarias",
+ "config-install-updates-failed": "<strong>Error:</strong> falló la inserción de claves de actualización en las tablas con el siguiente error: $1",
+ "config-install-sysop": "Creando la cuenta de usuario del administrador",
"config-install-subscribe-fail": "No se ha podido suscribir a mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL no está instalado y <code>allow_url_fopen</code> no está disponible.",
"config-install-mainpage": "Creando página principal con contenido predeterminado",
"config-install-mainpage-failed": "No se pudo insertar la página principal: $1",
"config-install-done": "<strong>¡Felicidades!</strong>\nHas instalado MediaWiki correctamente.\n\nEl instalador ha generado un archivo <code>LocalSettings.php</code>.\nEste contiene toda su configuración.\n\nDeberás descargarlo y ponerlo en la base de la instalación de wiki (el mismo directorio que index.php). La descarga debería haber comenzado automáticamente.\n\nSi no comenzó la descarga, o si se ha cancelado, puedes reiniciar la descarga haciendo clic en el siguiente enlace:\n\n$3\n\n<strong>Nota</strong>: Si no haces esto ahora, este archivo de configuración generado no estará disponible más tarde si sales de la instalación sin descargarlo.\n\nCuando lo hayas hecho, podrás <strong>[$2 entrar en tu wiki]</strong>.",
"config-download-localsettings": "Descargar archivo <code>LocalSettings.php</code>",
- "config-help": "Ayuda",
- "config-help-tooltip": "Haz clic para ampliar",
+ "config-help": "ayuda",
+ "config-help-tooltip": "haz clic para ampliar",
"config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
"config-extension-link": "¿Sabías que tu wiki admite [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensiones]?\n\nPuedes navegar por las [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category categorías] o visitar el [//www.mediawiki.org/wiki/Extension_Matrix centro de extensiones] para ver una lista completa.",
- "mainpagetext": "'''MediaWiki ha sido instalado con éxito.'''",
+ "mainpagetext": "<strong>MediaWiki se ha instalado con éxito.<strong>",
"mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Help:Contents/es guía del usuario] para obtener información sobre el uso del software wiki.\n\n== Primeros pasos ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es Preguntas frecuentes sobre MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de publicación de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducir MediaWiki en tu idioma]"
}
"@metadata": {
"authors": [
"Avjoska",
- "Pikne"
+ "Pikne",
+ "Boxmein"
]
},
"config-information": "Teave",
"config-page-upgradedoc": "Uuendamine",
"config-page-existingwiki": "Olemasolev viki",
"config-restart": "Jah, tee taaskäivitus",
+ "config-env-hhvm": "HHVM $1 on installitud.",
"config-db-name": "Andmebaasi nimi:",
"config-db-username": "Andmebaasi kasutajanimi:",
"config-db-password": "Andmebaasi parool:",
"Ebraminio",
"Omidh",
"Pouyana",
- "Reza1615"
+ "Reza1615",
+ "Alirezaaa"
]
},
"config-desc": "نصب کنندهٔ ویکیمدیا",
"config-upgrade-key-missing": "نصب موجود مدیاویکی شناسایی شدهاست.\nبرای بروزرسانی این نصب، لطفاً خط زیر را در آخر کد \nقرار دادن به نصب ارتقاء داده شده، به خط زیر لطفاً در پایین خود را <code>LocalSettings.php</code> قرار دهید:\n\n$1",
"config-localsettings-incomplete": "وجود <code>LocalSettings.php</code> به نظر ناقص میرسد.\nمتغیر $1 تنظیم نشدهاست.\nبرای اینکه این متغیر تنظیم شود لطفاً <code>LocalSettings.php</code> را تغییر دهید، و \"{{int:Config-continue}}\" را کلیک کنید.",
"config-localsettings-connection-error": "هنگام اتصال به پایگاه اطلاعاتی که ازتنظیمات مشخص شده در<code>LocalSettings.php</code> استفاده میکند، خطایی رخ داد. لطفاً این تنظیمات را نصب کنید و دوباره تلاش کنید.\n$1",
- "config-session-error": "خطا در شروع جلسه $1",
+ "config-session-error": "خطا در شروع جلسه: $1",
"config-session-expired": "به نظر میرسد اطلاعات جلسهٔ شما منقضی شدهاست.\nجلسات برای مادام العمر $1 پیکربندی شدهاند.\nشما میتوانید این پیکربندی را با تنظیم <code>session.gc_maxlifetime</code> در php.ini افزایش دهید.\nروند نصب را دوباره شروع کنید.",
"config-no-session": "اطلاعات دورهٔ شما از دست رفته است!\nphp.ini خود را بررسی کنید و مطمئن شوید <code>session.save_path</code> برای یک فهرست مناسب تنظیم شدهاست.",
"config-your-language": "زبان شما:",
"config-page-language": "زبان",
"config-page-welcome": "به مدیاویکی خوش آمدید!",
"config-page-dbconnect": "اتصال به پایگاه داده",
- "config-page-upgrade": "نصب موجود را ارتقاء دهید.",
- "config-page-dbsettings": "تÙ\86ظÛ\8cÙ\85ات پاÛ\8cگاÙ\87 اطÙ\84اعاتÛ\8c",
+ "config-page-upgrade": "ارتقای نصب موجود",
+ "config-page-dbsettings": "تÙ\86ظÛ\8cÙ\85ات پاÛ\8cگاÙ\87 دادÙ\87",
"config-page-name": "نام",
"config-page-options": "گزینهها",
"config-page-install": "نصب",
"config-page-complete": "کامل!",
- "config-page-restart": "نصب را دوباره شروع کنید",
+ "config-page-restart": "راهاندازی دوباره نصب",
"config-page-readme": "مرا بخوان",
"config-page-releasenotes": "یادداشتهای انتشار",
"config-page-copying": "تکثیر",
- "config-page-upgradedoc": "ارتقا",
+ "config-page-upgradedoc": "ارتقاء",
"config-page-existingwiki": "ویکی موجود",
"config-help-restart": "آیا میخواهید همهٔ اطلاعات ذخیره شدهای که وارد کردهاید را پاک کنید و دوباره روند نصب را شروع کنید؟",
- "config-restart": "بله ، آن دوباره راه اندازی کن",
+ "config-restart": "بله، دوباره راهاندازی کن",
"config-welcome": "===بررسیهای محیطی===\nبرای فهمیدن اینکه این محیط برای نصب مدیاویکی مناسب است، اکنون بررسیهای اساسی انجام خواهدشد.\nاگر به دنبال پشتیبانی در چگونگی تکمیل نصب هستید،به یاد داشته باشید این اطلاعات را بگنجانید.",
"config-copyright": "===حق چاپ و شرایط===\n$1\nاین برنامه،نرمافزاری آزاد است;شما میتوانید این برنامه را دوباره توزیع کنید و/یا تحت شرایط مجوز عمومی کلی جیانیو که توسط بنیاد نرمافزار آزاد منتشر شده،اصلاح کنید;یا نسخهٔ 2 مجوز، یا (به انتخاب خود) هر نسخهٔ پس از این.\nاین برنامه به امید اینکه مفید واقع شود توزیع شدهاست،اما '''بدون هیچ ضمانتی'''; حتی بدون اشارهٔ ضمانتی از '''قابلیت عرضه''' یا ''' صلاحیت برای یک هدف خاص'''.\nبرای جزئیات بیشتر مجوز عمومی کلی جیانیو را مشاهده کنید.\nشما باید <doclink href=Copying> یک چاپ ازمجوز عمومی کلی </doclink> همراه این برنامه دریافت کنید; اگر دریافت نکردید،به بنیاد نرمافزار آزاد بنویسید،Inc.،خیابان فرانکلین۵۱،طبقه پنجم،بوستون، MA۰۲۱۱۰-۱۳۰،آمریکا،یا [http://www.gnu.org/copyleft/gpl.html read it online].",
"config-sidebar": "* [//www.mediawiki.org صفحهٔ اصلی مدیاویکی]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents راهنمای کاربر]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents راهنمای مدیر]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ پرسشهای رایج]\n----\n* <doclink href=Readme>مرا بخوان</doclink>\n* <doclink href=ReleaseNotes>یادداشتهای انتشار</doclink>\n* <doclink href=Copying>نسخه برداری</doclink>\n* <doclink href=UpgradeDoc>ارتقا</doclink>",
"config-env-good": "محیط بررسی شدهاست.\nشما میتوانید مدیاویکی را نصب کنید.",
"config-env-bad": "محیط بررسی شدهاست.\nشما نمیتوانید مدیاویکی را نصب کنید.",
"config-env-php": "پیاچپی $1 نصب شدهاست.",
+ "config-env-hhvm": "HHVM $1 نصب شدهاست.",
"config-unicode-using-utf8": "برای یونیکد عادی از Brion Vibber's utf8_normalize.so استفاده کنید.",
"config-unicode-using-intl": "برای یونیکد عادی از [http://pecl.php.net/intl intl PECL extension] استفاده کنید.",
"config-unicode-pure-php-warning": "'''هشدار:''' [http://pecl.php.net/intl intl PECL extension] برای کنترل یونیکد عادی در دسترس نیست،اجرای کاملاً آهسته به تعویق میافتد.\nاگر شما یک سایت پر ترافیک را اجرا میکنید، باید کمی [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization] را بخوانید.",
"config-no-cache": "'''هشدار:''' [http://www.php.net/apc APC],[http://xcache.lighttpd.net/ XCache] یا [http://www.iis.net/download/WinCacheForPhp WinCache] را نتوانست پیدا کند.\nذخیره شی فعال نیست.",
"config-mod-security": "'''هشدار:''' وب سرور شما [http://modsecurity.org/ mod_security] فعال است.اگر اشتباه پیکربندی شده باشد،می تواند باعث ایجاد مشکلاتی برای مدیاویکی یا دیگر نرمافزاری شود که به کاربران اجازه میدهد پیام دلخواه ارسال کنند.\nبه [http://modsecurity.org/documentation/ mod_security documentation] مراجعه کنید یا اگر با خطاهای اتفاقی مواجه شدید با پشتیبانی میزبان خود در تماس باشید.",
"config-diff3-bad": "جیانیو دیف۳ پیدا نشد.",
- "config-git": "نسخهٔ کنترل نرمافزار جیت پیدا شد:<code>$1</code>.",
- "config-git-bad": "نسخه نرمافزار کنترل جیت پیدا نشد.",
+ "config-git": "کنترل نسخهٔ نرمافزار گیت پیدا شد: <code>$1</code>.",
+ "config-git-bad": "کنترل نسخهٔ نرمافزار گیت پیدا نشد.",
"config-imagemagick": "ایمیجمجیک پیدا شد: <code>$1</code>.\nاگر ارسالها را فعال کنید،تصویر کوچک فعال خواهدشد.",
"config-gd": "گرافیکهای جیدی ساخته شده در کتابخانه پیدا شد.\nاگر ارسالها را فعال کنید تصویر کوچک فعال خواهدشد.",
"config-no-scaling": "کتابخانهٔ جیدی یا ایمیجمجیک نتوانست پیدا شود.\nتصویر کوچک غیرفعال خواهدشد.",
"config-db-install-account": "حساب کاربری برای نصب",
"config-db-username": "نام کاربری پایگاه اطلاعات:",
"config-db-password": "گذرواژه پایگاه دادهها:",
- "config-db-password-empty": "Ù\84Ø·Ù\81اÙ\8b Û\8cÚ© رÙ\85ز عبÙ\88ر براÛ\8c کاربر جدÛ\8cد پایگاه اطلاعاتی وارد کنید: $1\nدر صورتی که ممکن است کاربران بدون رمز عبور به وجود آیند،امن نیست.",
+ "config-db-password-empty": "Ù\84Ø·Ù\81اÙ\8b Û\8cÚ© رÙ\85ز عبÙ\88ر براÛ\8c کاربر تازÙ\87 پایگاه اطلاعاتی وارد کنید: $1\nدر صورتی که ممکن است کاربران بدون رمز عبور به وجود آیند،امن نیست.",
"config-db-username-empty": "شما باید یک مقدار برای \"نام کاربری {{int:config-db-username}}\" وارد کنید",
"config-db-install-username": "نام کاربری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهدشد.\nاین نام کاربری حساب مدیاویکی نیست; نام کاربری برای پایگاه اطلاعاتی شما است.",
"config-db-install-password": "رمز عبوری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهدشد.\nاین رمز عبور برای حساب مدیاویکی نیست;رمز عبور برای پایگاه اطلاعاتی شما است.",
"config-install-stats": "شروع آمار",
"config-install-keys": "تولید کلیدهای مخفی",
"config-insecure-keys": "'''هشدار:''' {{PLURAL:$2|کلید امن|کلیدهای امن}} ($1) در طی نصب کاملاً ایمن {{PLURAL:$2|نیست|نیستند}}. تغییر دستی {{PLURAL:$2|آن|آنها}} را در نظر بگیرید.",
+ "config-install-updates": "جلوگیری از به روز رسانیهای غیر ضروری در حال اجرا",
+ "config-install-updates-failed": "<strong>خطا:</strong> قراردادن کلیدهای به روز رسانی به داخل جداول با خطای روبرو مواجه شد: $1",
"config-install-sysop": "ایجاد حساب کاربری مدیر",
"config-install-subscribe-fail": "قادر تصدیق اعلام مدیاویکی نیست:$1",
"config-install-subscribe-notpossible": "سییوآرال نصب نشدهاست و <code>allow_url_fopen</code> در دسترس نیست.",
"config-env-good": "L’environnement a été vérifié.\nVous pouvez installer MediaWiki.",
"config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.",
"config-env-php": "PHP $1 est installé.",
+ "config-env-hhvm": "HHVM $1 est installé.",
"config-unicode-using-utf8": "Utilisation de utf8_normalize.so par Brion Vibber pour la normalisation Unicode.",
"config-unicode-using-intl": "Utilisation de [http://pecl.php.net/intl l'extension PECL intl] pour la normalisation Unicode.",
"config-unicode-pure-php-warning": "<strong>Attention</strong> : L'[http://pecl.php.net/intl extension PECL intl] n'est pas disponible pour la normalisation d’Unicode, retour à la version lente implémentée en PHP.\nSi votre site web sera très fréquenté, vous devriez lire ceci : [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations ''Unicode normalization''] (en anglais).",
"config-install-stats": "Initialisation des statistiques",
"config-install-keys": "Génération de la clé secrète",
"config-insecure-keys": "'''Avertissement''' : {{PLURAL:$2|Une clé de sécurité générée ($1) pendant l'installation n'est pas complètement sécuritaire. Envisagez de la modifier manuellement.|Des clés de sécurité générées ($1) pendant l'installation ne sont pas complètement sécuritaires. Envisagez de les modifier manuellement.}}",
+ "config-install-updates": "Empêcher l’exécution des mises à jour inutiles",
+ "config-install-updates-failed": "<strong>Erreur :</strong> L’insertion de clés modifiées dans les tables a échoué avec l’erreur suivante : $1",
"config-install-sysop": "Création du compte administrateur",
"config-install-subscribe-fail": "Impossible de s'abonner à mediawiki-announce : $1",
"config-install-subscribe-notpossible": "cURL n’est pas installé et <code>allow_url_fopen</code> n’est pas disponible.",
"config-env-good": "הסביבה שלכם נבדקה.\nאפשר להתקין מדיה־ויקי.",
"config-env-bad": "הסביבה שלכם נבדקה.\nאי־אפשר להתקין מדיה־ויקי.",
"config-env-php": "מותקנת <span dir=\"ltr\">PHP $1</span>.",
+ "config-env-hhvm": "מותקנת <span dir=\"ltr\">HHVM $1</span>.",
"config-unicode-using-utf8": "משתמש ב־utf8_normalize.so של בריון ויבר לנרמול יוניקוד.",
"config-unicode-using-intl": "משתמש ב[http://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.",
"config-unicode-pure-php-warning": "'''אזהרה''': [http://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
"config-install-stats": "אתחול סטטיסטיקות",
"config-install-keys": "יצירת מפתחות סודיים",
"config-insecure-keys": "'''אזהרה''': {{PLURAL:$2|מפתח|מפתחות}} אבטחה ($1) {{PLURAL:$2|שנוצר|שנוצרו}} במהלך ההתקנה {{PLURAL:$2|אינו בטוח|אינם בטוחים}} מספיק. מומלץ לשקול לשנות {{PLURAL:$2|אותו|אותם}} ידנית.",
+ "config-install-updates": "למנוע הרצת עדכונים מיותרים",
+ "config-install-updates-failed": "<strong>שגיאה:</strong> הוספת מפתחות עדכון לטבלאות נכשל עם השגיאה הבאה: $1",
"config-install-sysop": "יצירת חשבון מפעיל",
"config-install-subscribe-fail": "הרישום ל־mediawiki-announce לא הצליח: $1",
"config-install-subscribe-notpossible": "cURL אינה מותקנת ו־<code>allow_url_fopen</code> אינה זמינה.",
"config-env-good": "L'ambiente è stato controllato.\nÈ possibile installare MediaWiki.",
"config-env-bad": "L'ambiente è stato controllato.\nNon è possibile installare MediaWiki.",
"config-env-php": "PHP $1 è installato.",
+ "config-env-hhvm": "HHVM $1 è installato.",
"config-unicode-using-utf8": "Usa Brion Vibber's utf8_normalize.so per la normalizzazione Unicode.",
"config-unicode-using-intl": "Usa [http://pecl.php.net/intl l'estensione PECL intl] per la normalizzazione Unicode.",
"config-unicode-pure-php-warning": "'''Attenzione:''' [http://pecl.php.net/intl l'estensione PECL intl] non è disponibile per gestire la normalizzazione Unicode, così si usa la lenta implementazione in puro PHP.\nSe esegui un sito ad alto traffico, dovresti leggere alcune considerazioni sulla [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizzazione Unicode].",
"config-no-db": "Impossibile trovare un driver adatto per il database! È necessario installare un driver per PHP.\nI seguenti formati di database sono supportati: $1.\n\nSe compili PHP autonomamente, riconfiguralo attivando un client database, per esempio utilizzando <code>./configure --with-mysqli</code>.\nQualora avessi installato PHP per mezzo di un pacchetto Debian o Ubuntu, allora devi installare anche il pacchetto <code>php5-mysql</code>.",
"config-outdated-sqlite": "'''Attenzione''': è presente SQLite $1 mentre è richiesta la versione $2, SQLite non sarà disponibile.",
"config-no-fts3": "'''Attenzione''': SQLite è compilato senza il [//sqlite.org/fts3.html modulo FTS3], le funzionalità di ricerca non saranno disponibili su questo backend.",
+ "config-register-globals-error": "<strong>Errore: l'opzione PHP <code>[http://php.net/register_globals register_globals]</code> è abilitata.\nDeve essere disabilitata per continuare con l'installazione.</strong>\nVedi [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] per un aiuto su come farlo.",
+ "config-magic-quotes-gpc": "<strong>Fatale: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] è attivo!</strong>\nQuesta opzione danneggia i dati di input in modo imprevedibile.\nNon puoi installare o utilizzare MediaWiki, a meno che questa opzione sia disabilitata.",
"config-magic-quotes-runtime": "'''Errore: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] è attivato!''' Questa opzione interferisce in modo imprevedibile con l'inserimento dei dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
"config-magic-quotes-sybase": "'''Errore: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] è attivato!''' Questa opzione interferisce in modo imprevedibile con l'inserimento dei dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
"config-mbstring": "'''Errore: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] è attivato!''' Questa opzione causa errori e può interferire in modo imprevedibile coi dati. Non è possibile installare o utilizzare MediaWiki a meno che questa opzione non sia disabilitata.",
"config-memory-raised": "Il valore <code>memory_limit</code> di PHP è $1, aumentato a $2.",
"config-memory-bad": "''Attenzione:''' Il valore di <code>memory_limit</code> di PHP è $1.\nProbabilmente è troppo basso.\nL'installazione potrebbe non riuscire!",
"config-ctype": "'''Errore''': PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
+ "config-iconv": "<strong>Fatale:</strong> PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/en/iconv.installation.php estensione iconv].",
"config-json": "'''Errore:''' PHP è stato compilato senza il supporto per JSON. E' necessario installare l'estensione PHP per JSON o l'estensione [http://pecl.php.net/package/jsonc PECL jsonc] prima di installare MediaWiki.\n* L'estensione PHP è inclusa in Red Hat Enterprise Linux (CentOS) 5 e 6, ma deve essere abilitata in <code>/etc/php.ini</code> o <code>/etc/php.d/json.ini</code>.\n* Alcune distribuzioni di Linux pubblicate dopo il maggio 2013 omettono l'estensione PHP, e al posto utilizzano l'estensione PECL come <code>php5-json</code> o <code>php-pecl-jsonc</code>",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] è installato",
"config-apc": "[http://www.php.net/apc APC] è installato",
"config-uploads-not-safe": "<strong>Attenzione:</strong> la directory predefinita per i caricamenti <code>$1</code> è vulnerabile all'esecuzione arbitraria di script.\nAnche se MediaWiki controlla tutti i file caricati per rischi alla sicurezza, è fortemente raccomandato di [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security chiudere questa vulnerabilità di sicurezza] prima di abilitare i caricamenti.",
"config-no-cli-uploads-check": "<strong>Attenzione:</strong> la directory predefinita per i caricamenti (<code>$1</code>) non è stata verificata per la vulnerabilità sull'esecuzione arbitraria di script durante l'installazione da linea di comando.",
"config-brokenlibxml": "Il tuo sistema ha una combinazione di versioni di PHP e libxml2 che è difettosa e che può provocare un danneggiamento non visibile di dati in MediaWiki ed in altre applicazioni per il web.\nAggiorna a libxml2 2.7.3 o successivo ([https://bugs.php.net/bug.php?id=45996 il bug è studiato dal lato PHP]).\nInstallazione interrotta.",
+ "config-suhosin-max-value-length": "Suhosin è installato e limita il parametro GET <code>length</code> a $1 byte.\nIl componente MediaWiki ResourceLoader funzionerà aggirando questo limite, ma riducendo le prestazioni.\nSe possibile, dovresti impostare <code>suhosin.get.max_value_length</code> a 1024 o superiore in <code>php.ini</code>, ed impostare <code>$wgResourceLoaderMaxQueryLength</code> allo stesso valore in <code>LocalSettings.php</code>.",
"config-db-type": "Tipo di database:",
"config-db-host": "Host del database:",
"config-db-host-help": "Se il server del tuo database è su un server diverso, immetti qui il nome dell'host o il suo indirizzo IP.\n\nSe stai utilizzando un web hosting condiviso, il tuo hosting provider dovrebbe fornirti il nome host corretto nella sua documentazione.\n\nSe stai installando su un server Windows con uso di MySQL, l'uso di \"localhost\" potrebbe non funzionare correttamente come nome del server. In caso di problemi, prova a impostare \"127.0.0.1\" come indirizzo IP locale.\n\nSe usi PostgreSQL, lascia questo campo vuoto per consentire di connettersi tramite un socket Unix.",
"config-db-host-oracle": "TNS del database:",
+ "config-db-host-oracle-help": "Inserisci un valido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; un file tnsnames.ora deve essere visibile a questa installazione.<br />Se stai usando la libreria cliente 10g o più recente puoi anche usare il metodo di denominazione [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
"config-db-wiki-settings": "Identifica questo wiki",
"config-db-name": "Nome del database:",
"config-db-name-help": "Scegli un nome che identifica il tuo wiki.\nNon deve contenere spazi.\n\nSe utilizzi un web hosting condiviso, il tuo hosting provider o ti fornisce uno specifico nome di database da utilizzare, oppure ti consentirà di creare il database tramite un pannello di controllo.",
"config-db-name-oracle": "Schema del database:",
+ "config-db-account-oracle-warn": "Ci sono tre scenari supportati per l'installazione di Oracle come database di backend:\n\nSe vuoi creare un'utenza di database come parte del processo di installazione, fornisci un account con ruolo SYSDBA come utenza di database per l'installazione e specifica le credenziali volute per l'utenza di accesso web, altrimenti è possibile creare manualmente l'utenza di accesso web e fornire solo quell'account (se dispone delle autorizzazioni necessario per creare gli oggetti dello schema) o fornire due diverse utenze, una con i permessi di creazione e una per l'accesso web.\n\nScript per la creazione di un'utenza con le autorizzazioni necessarie può essere trovato nella directory \"maintenance/oracle/\" di questa installazione. Tieni presente che l'uso di un'utenza con restrizioni disabiliterà tutte le funzionalità di manutenzione con l'account predefinito.",
"config-db-install-account": "Account utente per l'installazione",
"config-db-username": "Nome utente del database:",
"config-db-password": "Password del database:",
"config-charset-mysql5-binary": "MySQL 4.1/5.0 binario",
"config-charset-mysql5": "MySQL 4.1/5.0 UTF-8",
"config-charset-mysql4": "MySQL 4.0 con compatibilità UTF-8",
+ "config-charset-help": "<strong>Attenzione:</strong> se si utilizza <strong>backwards-compatible UTF-8</strong> su MySQL 4.1+, e successivamente si esegue il backup del database con <code>mysqldump</code>, si può distriggere tutti i caratteri non ASCII, danneggiando irreversibilmente i backup!\n\nIn <strong>modalità binaria</strong>, MediaWiki archivia il testo UTF-8 nel database in cambi binari.\nQuesto è più efficiente rispetto alla modalità UTF-8 di MySQL, e consente di utilizzare la gamma completa di caratteri Unicode.\nIn <strong>modalità UTF-8</strong>, MySQL conoscerà in quale set di caratteri sono i tuoi dati, e può presentarli e convertirli in modo appropriato,\nma non ti permetterà di memorizzare i caratteri al di sopra del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
"config-mysql-old": "MySQL $1 o una versione successiva è necessaria, rilevata la $2.",
"config-db-port": "Porta del database:",
"config-db-schema": "Schema per MediaWiki:",
"config-type-mssql": "Microsoft SQL Server",
"config-support-info": "MediaWiki supporta i seguenti sistemi di database:\n\n$1\n\nSe fra quelli elencati qui sotto non vedi il sistema di database che vorresti utilizzare, seguire le istruzioni linkate sopra per abilitare il supporto.",
"config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] è la configurazione preferibile per MediaWiki ed è quella meglio supportata. MediaWiki funziona anche con [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], che sono compatibili con MySQL.([http://www.php.net/manual/en/mysqli.installation.php Come compilare PHP con supporto MySQL])",
+ "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è un popolare sistema di database open source come alternativa a MySQL. Ci possono essere alcuni bug minori in sospeso, e non è raccomandato per l'uso in un ambiente di produzione. ([http://www.php.net/manual/en/pgsql.installation.php Come compilare PHP con supporto PostgreSQL])",
+ "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] è un sistema di database leggero, che è supportato molto bene. ([http://www.php.net/manual/en/pdo.installation.php Come compilare PHP con supporto SQLite], utilizza PDO)",
+ "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è un database di un'impresa commerciale. ([http://www.php.net/manual/en/oci8.installation.php Come compilare PHP con supporto OCI8])",
+ "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] è un database di un'impresa commerciale per Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Come compilare PHP con supporto SQLSRV])",
"config-header-mysql": "Impostazioni MySQL",
"config-header-postgres": "Impostazioni PostgreSQL",
"config-header-sqlite": "Impostazioni SQLite",
"config-postgres-old": "PostgreSQL $1 o una versione successiva è necessaria, rilevata la $2.",
"config-mssql-old": "Si richiede Microsoft SQL Server $1 o successivo. Tu hai la versione $2.",
"config-sqlite-name-help": "Scegli un nome che identifichi il tuo wiki.\nNon utilizzare spazi o trattini.\nQuesto servirà per il nome del file di dati SQLite.",
+ "config-sqlite-parent-unwritable-group": "Non è possibile creare la directory dati <code><nowiki>$1</nowiki></code>, perché la directory superiore <code><nowiki>$2</nowiki></code> non è scrivibile dal webserver.\n\nIl programma di installazione ha determinato l'utente con cui il server web è in esecuzione.\nForniscigli la possibilità di scrivere nella directory <code><nowiki>$3</nowiki></code> per continuare.\nSu un sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+ "config-sqlite-parent-unwritable-nogroup": "Non è possibile creare la directory dati <code><nowiki>$1</nowiki></code>, perché la directory superiore <code><nowiki>$2</nowiki></code> non è scrivibile dal webserver.\n\nIl programma di installazione non ha potuto determinare l'utente con cui il server web è in esecuzione.\nFornisci ad esso (ed altri!) la possibilità di scrivere globalmente nella directory <code><nowiki>$3</nowiki></code> per continuare.\nSu un sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
"config-sqlite-mkdir-error": "Errore durante la creazione della directory dati \"$1\".\nControlla la posizione e riprova.",
"config-sqlite-dir-unwritable": "Impossibile scrivere nella directory \"$1\".\nModifica le autorizzazioni in modo che il webserver possa scrivere in essa e riprova.",
"config-sqlite-connection-error": "$1.\n\nControlla la directory dati e il nome del database qui sotto, poi riprova.",
"config-mysql-engine": "Storage engine:",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
+ "config-mysql-myisam-dep": "<strong>Attenzione:</strong> hai selezionato MyISAM come motore di archiviazione per MySQL, che non è raccomandato per l'uso con MediaWiki, perché:\n* supporta debolmente la concorrenza per il blocco della tabella\n* è più incline alla corruzione di altri motori\n* il codice di base MediaWiki non gestisce sempre MyISAM come dovrebbe\n\nSe la tua installazione MySQL supporta InnoDB, è altamente raccomandato che lo si scelga al suo posto.\nSe la tua installazione MySQL non supporta InnoDB, forse è il momento per un aggiornamento.",
+ "config-mysql-only-myisam-dep": "<strong>Attenzione:</strong> MyISAM è l'unico motore di archiviazione disponibile per MySQL su questa macchina, e questo non è consigliato per l'uso con MediaWiki, perché:\n* supporta debolmente la concorrenza per il blocco della tabella\n* è più incline alla corruzione di altri motori\n* il codice di base MediaWiki non gestisce sempre MyISAM come dovrebbe\n\nSe la tua installazione MySQL non supporta InnoDB, forse è il momento per un aggiornamento.",
+ "config-mysql-engine-help": "<strong>InnoDB</strong> è quasi sempre l'opzione migliore, in quanto ha un buon supporto della concorrenza.\n\n<strong>MyISAM</strong> potrebbe essere più veloce nelle installazioni monoutente o in sola lettura.\nI database MyISAM tendono a danneggiarsi più spesso dei database InnoDB.",
"config-mysql-charset": "Set di caratteri del database:",
"config-mysql-binary": "Binario",
"config-mysql-utf8": "UTF-8",
+ "config-mysql-charset-help": "In <strong>modalità binaria</strong>, MediaWiki archivia il testo UTF-8 nel database in cambi binari.\nQuesto è più efficiente rispetto alla modalità UTF-8 di MySQL, e consente di utilizzare la gamma completa di caratteri Unicode.\n\nIn <strong>modalità UTF-8</strong>, MySQL conoscerà in quale set di caratteri sono i tuoi dati, e può presentarli e convertirli in modo appropriato, ma non ti permetterà di memorizzare i caratteri al di sopra del [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
"config-mssql-auth": "Tipo di autenticazione:",
+ "config-mssql-install-auth": "Seleziona il tipo di autenticazione che verrà utilizzato per connettersi al database durante il processo di installazione.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
+ "config-mssql-web-auth": "Seleziona il tipo di autenticazione che il server web utilizzerà per connettersi al database, durante il normale funzionamento del wiki.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
"config-mssql-sqlauth": "Autenticazione di SQL Server",
"config-mssql-windowsauth": "Autenticazione di Windows",
"config-site-name": "Nome del wiki:",
"config-ns-site-name": "Stesso nome del wiki: $1",
"config-ns-other": "Altro (specificare)",
"config-ns-other-default": "MyWiki",
+ "config-project-namespace-help": "Seguendo l'esempio di Wikipedia, molti wiki tengono le loro pagine con le regole separate dalle pagine di contenuto, in un \"'''namespace di progetto'''\".\nTutti i titoli delle pagine in questo namespace iniziano con un certo prefisso, che puoi indicare qui.\nSolitamente, questo prefisso deriva dal nome del wiki, ma non può contenere caratteri di punteggiatura come \"#\" o \":\".",
+ "config-ns-invalid": "Il namespace indicato \"<nowiki>$1</nowiki>\" non è valido.\nSpecificare un diverso namespace di progetto.",
+ "config-ns-conflict": "Il namespace indicato \"<nowiki>$1</nowiki>\" è in conflitto con un namespace predefinito MediaWiki.\nSpecificare un diverso namespace di progetto.",
"config-admin-box": "Account amministratore",
"config-admin-name": "Il tuo nome utente:",
"config-admin-password": "Password:",
"config-admin-name-invalid": "Il nome utente specificato \"<nowiki>$1</nowiki>\" non è valido.\nSpecificare un nome utente diverso.",
"config-admin-password-blank": "Inserisci una password per l'account di amministratore.",
"config-admin-password-mismatch": "Le password inserite non coincidono tra loro.",
- "config-admin-email": "Indirizzo e-mail:",
+ "config-admin-email": "Indirizzo email:",
"config-admin-email-help": "Inserisci qui un indirizzo email per poter ricevere email dagli altri utenti del wiki, reimpostare la tua password, ed essere informato delle modifiche apportate alle pagine tuoi osservati speciali. Se non ti interessa, puoi lasciare vuoto questo campo.",
"config-admin-error-user": "Errore interno durante la creazione di un amministratore con il nome \"<nowiki>$1</nowiki>\".",
"config-admin-error-password": "Errore interno durante l'impostazione di una password per amministratore \"<nowiki>$1</nowiki>\": <pre>$2</pre>",
"config-profile-wiki": "Wiki aperto",
"config-profile-no-anon": "Creazione utenza obbligatoria",
"config-profile-fishbowl": "Solo editori autorizzati",
- "config-profile-private": "Wiki privata",
+ "config-profile-private": "Wiki privato",
+ "config-profile-help": "I wiki funzionano meglio se si lascia che molte persone li possano modificare.\nIn MediaWiki, è semplice rivedere le ultime modifiche, e ripristinare i danni causati da utenti ingenui o malintenzionati.\n\nTuttavia, molti hanno trovato MediaWiki essere utile in un'ampia varietà di ruoli, e a volte non è facile convincere tutti i vantaggi della modalità wiki.\nPerciò, fai la tua scelta.\n\nIl modello <strong>{{int:config-profile-wiki}}</strong> consente a chiunque di modificare, anche senza effettuare l'accesso.\nUn wiki con <strong>{{int:config-profile-no-anon}}</strong> offre una maggiore responsabilità, ma potrebbe scoraggiare i contributori occasionali.\n\nLo scenario <strong>{{int:config-profile-fishbowl}}</strong> consente agli utenti autorizzati di modificare, ma il pubblico può visualizzare le pagine, compresa la cronologia.\nUn <strong>{{int:config-profile-private}}</strong> consente solo agli utenti autorizzati di visualizzare le pagine, lo stesso gruppo può modificarle.\n\nConfigurazioni di diritti utente più complesse sono disponibili dopo l'installazione, vedi la [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights parte relativa del manuale].",
"config-license": "Copyright e licenza:",
"config-license-none": "Nessun piè di pagina per la licenza",
"config-license-cc-by-sa": "Creative Commons Attribuzione-Condividi allo stesso modo",
"config-license-help": "Molti wiki pubblici rilasciano i loro contributi con una [http://freedomdefined.org/Definition licenza libera]. Questo aiuta a creare un senso di proprietà condivisa nella comunità e incoraggia a contribuire a lungo termine. Non è generalmente necessario per un wiki privato o aziendale.\n\nSe vuoi usare testi da Wikipedia, o desideri che Wikipedia possa essere in grado di accettare testi copiati dal tuo wiki, dovresti scegliere <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nIn precedenza Wikipedia ha utilizzato la GNU Free Documentation License. La GFDL è una licenza valida, ma è di difficile comprensione e complica il riutilizzo dei contenuti.",
"config-email-settings": "Impostazioni email",
"config-enable-email": "Abilita la posta elettronica in uscita",
+ "config-enable-email-help": "Se vuoi che funzionino le email, le [http://www.php.net/manual/en/mail.configuration.php PHP's impostazioni della posta] devono essere configurate correttamente.\nSe non si desidera alcuna funzionalità di posta elettronica, puoi disabilitarla qui.",
"config-email-user": "Abilita invio email fra utenti",
"config-email-user-help": "Consente a tutti gli utenti di inviarsi a vicenda email, se lo hanno abilitato nelle loro preferenze.",
"config-email-usertalk": "Abilita le notifiche per le pagine di discussione utente",
"config-email-watchlist": "Abilita le notifiche per gli osservati speciali",
"config-email-watchlist-help": "Consente agli utenti di ricevere notifiche per pagine tra gli osservati speciali, se lo hanno abilitato nelle loro preferenze.",
"config-email-auth": "Abilita autenticazione via email",
+ "config-email-auth-help": "Se questa opzione è attivata, gli utenti dovranno confermare il loro indirizzo email utilizzando un collegamento che viene inviato ogni volta che lo impostano o lo modificano.\nSolo gli indirizzi di posta elettronica autenticati possono ricevere email da altri utenti o modificare le email di notifica.\nImpostare questa opzione è <strong>raccomandato</strong> per wiki pubblici a causa del potenziale abuso delle funzioni di posta elettronica.",
"config-email-sender": "Indirizzo email di ritorno:",
+ "config-email-sender-help": "Inserisci l'indirizzo email da utilizzare come indirizzo di ritorno per la posta in uscita.\nQuesto è dove verranno inviati gli eventuali errori.\nMolti server di posta richiedono che almeno la parte del nome di dominio sia valido.",
"config-upload-settings": "Caricamenti di immagini e file",
"config-upload-enable": "Consentire il caricamento di file",
+ "config-upload-help": "Il caricamento di file può potenzialmente esporre il tuo server a rischi di sicurezza.\nPer ulteriori informazioni, leggi la [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security sezione sulla sicurezza] nel manuale.\n\nPer consentire il caricamento di file, modificare la modalità nella sottodirectory <code>images</code> della directory principale di MediaWiki affinché il server web possa scriverci.\nPoi attivare questa opzione.",
"config-upload-deleted": "Directory per i file cancellati:",
"config-upload-deleted-help": "Scegli una directory in cui archiviare i file cancellati.\nIdealmente, questa non dovrebbe essere accessibile dal web.",
"config-logo": "URL del logo:",
"config-logo-help": "La skin predefinita di MediaWiki include lo spazio per un logo di 135 x 160 pixel sopra il menu laterale.\nCarica un'immagine di dimensioni appropriate e inserisci l'URL qui.\n\nÈ possibile utilizzare <code>$wgStylePath</code> o <code>$wgScriptPath</code> se il logo è relativo a tali percorsi.\n\nSe non si desidera un logo, lascia vuota questa casella.",
"config-instantcommons": "Abilita Instant Commons",
+ "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] è una funzionalità che consente ai wiki di usare immagini, suoni e altri file multimediali che trovate sul sito [//commons.wikimedia.org/ Wikimedia Commons].\nPer fare questo, MediaWiki richiede l'accesso a Internet.\n\nPer ulteriori informazioni su questa funzionalità, incluse le istruzioni su come configurarlo per wiki diversi da Wikimedia Commons, consultare [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos il manuale].",
"config-cc-error": "Il selettore di licenze Creative Commons non ha dato alcun risultato.\nInserisci manualmente il nome della licenza.",
"config-cc-again": "Seleziona di nuovo...",
"config-cc-not-chosen": "Scegliere quale licenza Creative Commons si desidera e cliccare su \"procedi\".",
"config-memcache-badport": "I numeri di porta per memcached dovrebbero essere tra $1 e $2.",
"config-extensions": "Estensioni",
"config-extensions-help": "Le estensioni elencate sopra sono state rilevate nella tua directory <code>./extensions</code>.\n\nQueste potrebbero richiedere ulteriore configurazione, ma è possibile attivarle ora",
+ "config-skins": "Skin",
+ "config-skins-help": "Le skin elencate sopra sono state rilevate nella tua directory <code>./skins</code>. Devi attivarne almeno una e scegliere quella predefinita.",
+ "config-skins-use-as-default": "Usa questa skin come predefinita",
+ "config-skins-missing": "Non è stata trovata alcuna skin, MediaWiki userà una soluzione di ripiego finché non ne installerai una appropriata.",
+ "config-skins-must-enable-some": "Devi scegliere almeno una skin da attivare.",
+ "config-skins-must-enable-default": "La skin scelta come predefinita deve essere attivata.",
"config-install-alreadydone": "'''Attenzione:''' sembra che hai già installato MediaWiki e stai tentando di installarlo nuovamente.\nProcedi alla pagina successiva.",
"config-install-begin": "Premendo \"{{int:config-continue}}\", si avvierà l'installazione di MediaWiki.\nSe prima desideri apportare altre modifiche, premi \"{{int:config-back}}\".",
"config-install-step-done": "fatto",
"config-install-pg-plpgsql": "Controllo il linguaggio PL/pgSQL",
"config-pg-no-plpgsql": "È necessario installare il linguaggio PL/pgSQL nel database $1",
"config-pg-no-create-privs": "L'account indicato per l'installazione non dispone dei permessi necessari per creare un'utenza.",
+ "config-pg-not-in-role": "L'account indicato per l'utente web esiste già.\nL'account indicato per l'installazione non è un utente avanzato e non è un membro del ruolo degli utente web, quindi non è in grado di creare oggetti di proprietà dell'utente web.\n\nMediaWiki attualmente richiede che le tabelle siano di proprietà dell'utente web. Indica un altro account web, o fai click su \"indietro\" e specifica un utente per l'installazione opportunamente privilegiato.",
"config-install-user": "Creazione di utente del database",
"config-install-user-alreadyexists": "L'utente \"$1\" è già presente",
"config-install-user-create-failed": "Creazione dell'utente \"$1\" non riuscita: $2",
"config-install-stats": "Inizializzazione delle statistiche",
"config-install-keys": "Generazione delle chiavi segrete",
"config-insecure-keys": "'''Attenzione:''' {{PLURAL:$2|Una chiave sicura|Delle chiavi sicure}} ($1) {{PLURAL:$2|generata|generate}} durante l'installazione non {{PLURAL:$2|è|sono}} completamente {{PLURAL:$2|sicura|sicure}}. Considera di {{PLURAL:$2|cambiarla|cambiarle}} manualmente.",
+ "config-install-updates": "Impedire l'esecuzione di aggiornamenti non necessari",
+ "config-install-updates-failed": "<strong>Errore:</strong> l'inserimento delle chiavi di aggiornamento nelle tabelle non è riuscito con il seguente errore: $1",
"config-install-sysop": "Creazione dell'account utente per l'amministratore",
"config-install-subscribe-fail": "Impossibile sottoscrivere mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL non è installato e <code>allow_url_fopen</code> non è disponibile.",
"config-env-good": "環境を確認しました。\nMediaWiki をインストールできます。",
"config-env-bad": "環境を確認しました。\nMediaWiki のインストールはできません。",
"config-env-php": "PHP $1がインストールされています。",
+ "config-env-hhvm": "HHVM $1 がインストールされています。",
"config-unicode-using-utf8": "Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。",
"config-unicode-using-intl": "Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。",
"config-unicode-pure-php-warning": "<strong>警告:</strong> Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。\n高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
"config-env-good": "Den Environement gouf nogekuckt.\nDir kënnt MediaWiki installéieren.",
"config-env-bad": "Den Environnement gouf iwwerpréift.\nDir kënnt MediWiki net installéieren.",
"config-env-php": "PHP $1 ass installéiert.",
+ "config-env-hhvm": "HHVM $1 ass installéiert.",
"config-unicode-using-utf8": "Fir d'Unicode-Normalisatioun gëtt dem Brion Vibber säin <code>utf8_normalize.so</code> benotzt.",
"config-no-db": "Et konnt kee passenden Datebank-Driver fonnt ginn! Dir musst een Datebank-Driver fir PHP installéieren.\nDës Datebank-Type ginn ënnerstëtzt: $1.\n\nWann Dir PHP selwer compiléiert hutt, da rekonfiguréiert en mat dem ageschalten Datebank-Client, zum Beispill an deem Dir <code>./configure --with-mysql</code> benotzt.\nWann Dir PHP vun engem Debian oder Ubuntu Package aus installéiert hutt, da musst Dir och den php5-mysql Modul installéieren.",
"config-outdated-sqlite": "'''Warnung:''' SQLite $1 ass installéiert. Allerdengs brauch MediaWiki SQLite $2 oder méi nei. SQLite ass dofir net disponibel.",
"config-missing-db-name": "Dir musst e Wäert fir \"{{int:config-db-name}}\" aginn",
"config-missing-db-host": "Dir musst e Wäert fir \"{{int:config-db-host}}\" aginn.",
"config-missing-db-server-oracle": "Dir musst e Wäert fir \"{{int:config-db-host-oracle}}\" aginn",
+ "config-connection-error": "$1.\n\nKuckt den Numm vum Server, de Benotzernumm an d'Passwuert no a probéiert et nach eng Kéier.",
"config-db-sys-user-exists-oracle": "De Benotzerkont \"$1\" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.",
"config-postgres-old": "PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.",
"config-mssql-old": "Microsoft SQL Server $1 oder eng méi rezent Versioun gëtt gebraucht. Dir hutt d'Versioun $2.",
"config-install-interwiki-list": "De Fichier <code>interwiki.list</code> gouf net fonnt.",
"config-install-stats": "Initialisatioun vun de Statistiken",
"config-install-keys": "Generéiere vum Geheimschlëssel",
+ "config-install-updates": "Net néideg Aktualiséierungen net maachen",
"config-install-sysop": "Administrateur Benotzerkont gëtt ugeluecht",
"config-install-mainpage": "Haaptsäit mat Standard-Inhalt gëtt ugeluecht",
"config-install-extension-tables": "D'Tabelle fir déi aktivéiert Erweiderunge ginn ugeluecht",
"config-env-good": "Околината е проверена.\nМожете да го воспоставите МедијаВики.",
"config-env-bad": "Околината е проверена.\nНе можете да го воспоставите МедијаВики.",
"config-env-php": "PHP $1 е воспоставен.",
+ "config-env-hhvm": "HHVM $1 е воспоставен.",
"config-unicode-using-utf8": "Со utf8_normalize.so за уникодна нормализација од Брајон Вибер (Brion Vibber).",
"config-unicode-using-intl": "Со додатокот [http://pecl.php.net/intl intl PECL] за уникодна нормализација.",
"config-unicode-pure-php-warning": "'''Предупредување''': Додатокот [http://pecl.php.net/intl intl PECL] не е достапен за врши уникодна нормализација, враќајќи се на бавна примена на чист PHP.\n\nАко имате високопрометно мрежно место, тогаш ќе треба да прочитате повеќе за [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations уникодната нормализација].",
"config-install-stats": "Ги подготвувам статистиките",
"config-install-keys": "Создавање на тајни клучеви",
"config-insecure-keys": "'''Предупредување:''' {{PLURAL:$2|Безбедносниот клуч $1 создаден во текот на воспоставката не е сосем безбеден|Безбедносните клучеви $1 создадени во текот на воспоставката не се сосем безбедни}}. Ви препорачуваме да {{PLURAL:$2|го|ги}} смените рачно.",
+ "config-install-updates": "Спречи вршење на непотребни поднови",
+ "config-install-updates-failed": "<strong>Грешка:</strong> Вметнувањето на подновни клучеви во табелите не успеа, со следнава грешка: $1",
"config-install-sysop": "Создавање на администраторска корисничка сметка",
"config-install-subscribe-fail": "Не можам да ве претплатам на известувањето mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL не е воспоставен, а <code>allow_url_fopen</code> не е достапно.",
"config-install-step-done": "siap",
"config-install-step-failed": "gagal",
"config-install-user-alreadyexists": "Pengguna \"$1\" sudah wujud",
+ "config-install-tables": "Mencipta jadual",
"config-install-tables-exist": "<strong>Amaran:</strong> Nampaknya sudah terdapat jadual MediaWiki. Penciptaan dilangkau.",
+ "config-install-interwiki": "Mengisi jadual antara wiki lalai",
+ "config-install-interwiki-list": "Fail <code>interwiki.list</code> tidak dapat dibaca.",
"config-install-interwiki-exists": "<strong>Amaran:</strong> Jadual antara wiki nampaknya sudah ada entri. Senarai asali dilangkau.",
+ "config-install-keys": "Menjana kunci-kunci rahsia",
"config-insecure-keys": "<strong>Amaran:</strong> {{PLURAL:$2|Kunci keselamatan|Kunci-kunci keselamatan}} ($1) yang dihasilkan sewaktu pemasangan itu {{PLURAL:$2|adalah}} tidak selamat sepenuhnya. Oleh itu, {{PLURAL:$2|ia}} wajar ditukar secara manual.",
+ "config-install-sysop": "Membuka akaun pengguna pentadbir",
+ "config-install-mainpage": "Mewujudkan laman utama dengan kandungan lalai",
"config-help": "bantuan",
"mainpagetext": "'''MediaWiki telah berjaya dipasang.'''",
"mainpagedocfooter": "Sila rujuk [//meta.wikimedia.org/wiki/Help:Contents Panduan Penggunaan] untuk maklumat mengenai penggunaan perisian wiki ini.\n\n== Permulaan ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Senarai tetapan konfigurasi]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Soalan Lazim MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Senarai surat keluaran MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Terjemahkan MediaWiki ke dalam bahasa anda]"
{
"@metadata": {
"authors": [
- "Chrisportelli"
+ "Chrisportelli",
+ "Leli Forte"
]
},
"config-title": "Installazzjoni ta' MediaWiki $1",
"config-page-existingwiki": "Wiki eżistenti",
"config-restart": "Iva, erġa' ibda",
"config-env-php": "PHP $1 huwa installat.",
+ "config-env-hhvm": "HHVM $1 hu installat.",
"config-db-wiki-settings": "Identifika din il-wiki",
"config-db-name": "Isem tad-databażi:",
"config-db-install-account": "Kont tal-utent għall-installazzjoni",
"config-site-name": "Isem tal-wiki:",
"config-site-name-help": "Dan se jidher fil-barra tat-titlu tal-browżer u f'diversi postijiet oħra.",
"config-site-name-blank": "Daħħal isem tas-sit.",
- "config-project-namespace": "Spazju tal-isem tal-proġett:",
+ "config-project-namespace": "Spazju tal-ismijiet tal-proġett:",
"config-ns-generic": "Proġett",
"config-ns-site-name": "L-istess bħall-isem tal-wiki: $1",
"config-ns-other": "Oħrajn (speċifika)",
"config-ns-other-default": "MyWiki",
- "config-ns-invalid": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" huwa ħażin.\nSpeċifika spazju tal-isem tal-proġett differenti.",
- "config-ns-conflict": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" joħloq kunflitt ma' spazju tal-isem ieħor tal-MediaWiki.\nSpeċifika spazju tal-isem tal-proġett differenti.",
+ "config-ns-invalid": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" huwa ħażin.\nSpeċifika spazju tal-ismijiet ta' proġett differenti.",
+ "config-ns-conflict": "L-ispazju speċifikat \"<nowiki>$1</nowiki>\" joħloq kunflitt ma' spazju tal-ismijiet tal-MediaWiki predeterminat.\nSpeċifika spazju tal-ismijiet ta' proġett differenti.",
"config-admin-box": "Kont tal-amministratur",
"config-admin-name": "Ismek:",
"config-admin-password": "Password:",
"C.R."
]
},
+ "config-desc": "'O prugramma d'istallazione 'e MediaWiki",
+ "config-title": "Installazione 'e MediaWiki $1",
+ "config-information": "Nfurmaziune",
+ "config-localsettings-upgrade": "È stato rilevato nu file <code>LocalSettings.php</code>.\nP'agghiurnà sta installazione, pe' piacere nzertàte 'o valore 'e <code>$wgUpgradeKey</code> dint' 'a cascia ccà abbascio.\n'O putite truvà dint'a <code>LocalSettings.php</code>.",
+ "config-localsettings-cli-upgrade": "È stato scummigliato nu file <code>LocalSettings.php</code>.\nPe l'agghiurnà sta installazione, secutate <code>update.php</code>",
+ "config-localsettings-key": "Chiave d'agghiurnamiento:",
+ "config-localsettings-badkey": "'A chiave c'avete dato nun è curretta.",
"config-mssql-install-auth": "Sceglie 'o tipo d'autenticazziona ca s'ausarrà pe cunnettà â database, durante ll'operazziona d'istallazziona. Si piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
"config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d''a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate."
}
"config-env-good": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
"config-env-bad": "Miljøet har blitt sjekket.\nDu kan installere MediaWiki.",
"config-env-php": "PHP $1 er innstallert.",
+ "config-env-hhvm": "HHVM $1 er installert.",
"config-unicode-using-utf8": "Bruker Brion Vibbers utf8_normalize.so for Unicode-normalisering.",
"config-unicode-using-intl": "Bruker [http://pecl.php.net/intl intl PECL-utvidelsen] for Unicode-normalisering.",
"config-unicode-pure-php-warning": "'''Advarsel''': [http://pecl.php.net/intl intl PECL-utvidelsen] er ikke tilgjengelig for å håndtere Unicode-normaliseringen, faller tilbake til en langsommere ren-PHP-implementasjon.\nOm du kjører et nettsted med høy trafikk bør du lese litt om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
"config-outdated-sqlite": "'''Advarsel''': Du har SQLite $1, som er en eldre versjon enn minimumskravet SQLite $2. SQLite vil ikke være tilgjengelig.",
"config-no-fts3": "'''Advarsel''': SQLite er kompilert uten [//sqlite.org/fts3.html FTS3-modulen], søkefunksjoner vil ikke være tilgjengelig på dette bakstykket.",
"config-register-globals-error": "<strong>Feil: PHPs <code>[http://php.net/register_globals register_globals]</code>-valg er aktivt.\nDet må deaktiveres for å kunne fortsette med installeringen.</strong>\nSe [https://www.mediawiki.org/wiki/register_globals https://www.mediawiki.org/wiki/register_globals] for å få hjelp til å gjøre dette.",
+ "config-magic-quotes-gpc": "<strong>Fatalt: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-gpc magic_quotes_gpc] er aktiv!</strong>\nDette valget kan ødelegge inndata på en uforutsigelig måte.\nDu kan ikke installere eller bruke MediaWiki uten at denne valgmuligheten er slått av.",
"config-magic-quotes-runtime": "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] er aktiv!'''\nDette alternativet ødelegger inndata på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
"config-magic-quotes-sybase": "'''Kritisk: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] er aktiv!'''\nDette alternativet ødelegger inndata på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
"config-mbstring": "'''Kritisk: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] er aktiv!'''\nDette alternativet fører til feil og kan ødelegge data på en uforutsigbar måte.\nDu kan ikke installere eller bruke MediaWiki med mindre dette alternativet deaktiveres.",
"config-memory-raised": "PHPs <code>memory_limit</code> er $1, økt til $2.",
"config-memory-bad": "'''Advarsel:''' PHPs <code>memory_limit</code> er $1.\nDette er sannsynligvis for lavt.\nInstallasjonen kan mislykkes!",
"config-ctype": "'''Fatal feil''': PHP må kompileres med støtte for [http://www.php.net/manual/en/ctype.installation.php Ctype-utvidelsen].",
+ "config-iconv": "<strong>Kritisk:</strong> PHP må kompileres med støtte for [http://www.php.net/manual/en/iconv.installation.php iconv-utvidelsen].",
"config-json": "'''Alvorlig:''' PHP ble kompilert uten JSON-støtte.\nDu må installere enten PHP JSON-utvidelsen eller [http://pecl.php.net/package/jsonc PECL jsonc]-utvidelsen før du installere MediaWiki.\n* PHP-utvidelsen inngår i Red Hat Enterprise Linux (CentOS) 5 and 6, men må aktiveres i <code>/etc/php.ini</code> eller <code>/etc/php.d/json.ini</code>.\n* Noen Linux-distribusjoner sluppet etter mai 2013 har ikke med PHP-utvidelsen, men har i stedet med PECL-utvidelsen <code>php5-json</code> eller <code>php-pecl-jsonc</code>.",
"config-xcache": "[http://xcache.lighttpd.net/ XCache] er innstallert",
"config-apc": "[http://www.php.net/apc APC] er innstallert",
"Bhawani Gautam",
"RajeshPandey",
"सरोज कुमार ढकाल",
- "Ganesh Paudel"
+ "Ganesh Paudel",
+ "बिप्लब आनन्द"
]
},
+ "config-information": "जानकारी",
+ "config-localsettings-badkey": "तपाइले दिनु भएको कुन्जी गलत छ ।",
+ "config-your-language": "तपाईंको भाषा:",
+ "config-your-language-help": "इन्स्टल गर्दा उपयोग गर्ने भाषा छान्नुहोस् ।",
+ "config-wiki-language": "विकि भाषाहरू",
"config-page-name": "नाम",
"config-page-options": "विकल्पहरु",
"config-page-install": "स्थापना गर्ने",
"config-env-good": "L’environament es estat verificat.\nPodètz installar MediaWiki.",
"config-env-bad": "L’environament es estat verificat.\nPodètz pas installar MediaWiki.",
"config-env-php": "PHP $1 es installat.",
- "config-env-php-toolow": "PHP $1 es installat.\nPasmens, MediaWiki requerís PHP $2 o superior.",
+ "config-env-hhvm": "HHVM $1 es installat.",
"config-unicode-using-utf8": "Utilizacion de utf8_normalize.so per Brion Vibber per la normalizacion Unicode.",
"config-unicode-using-intl": "Utilizacion de [http://pecl.php.net/intl l'extension PECL intl] per la normalizacion Unicode.",
"config-memory-raised": "Lo paramètre <code>memory_limit</code> de PHP èra a $1, portat a $2.",
"config-cache-options": "Paramètres per la mesa en escondedor dels objèctes :",
"config-memcached-servers": "servidors per Memcached :",
"config-extensions": "Extensions",
+ "config-skins": "Abilhatges",
+ "config-skins-use-as-default": "Utilizar aqueste abilhatge per defaut",
"config-install-step-done": "fach",
"config-install-step-failed": "fracàs",
"config-install-extensions": "Inclusion de las extensions",
"config-install-database": "Creacion de la banca de donadas",
"config-install-schema": "Creacion d'esquèma",
+ "config-install-pg-schema-not-exist": "L'esquèma PostgreSQL existís pas",
"config-install-pg-commit": "Validacion de las modificacions",
"config-install-pg-plpgsql": "Verificacion del lengatge PL/pgSQL",
"config-install-user": "Creacion d'un utilizaire de la banca de donadas",
+ "config-install-user-alreadyexists": "L'utilizaire « $1 » existís ja.",
+ "config-install-user-create-failed": "Fracàs al moment de la creacion de l'utilizaire « $1 » : $2",
+ "config-install-user-missing": "L'utilizaire «$1» existís pas.",
"config-install-tables": "Creacion de las taulas",
"config-install-stats": "Inicializacion de las estatisticas",
+ "config-install-keys": "Generacion de la clau secreta",
+ "config-install-updates": "Empachar l’execucion de las mesas a jorn inutilas",
"config-install-sysop": "Creacion del compte administrator",
"config-install-mainpage-failed": "Impossible d’inserir la pagina principala : $1",
"config-download-localsettings": "Telecargar <code>LocalSettings.php</code>",
"config-help": "ajuda",
+ "config-help-tooltip": "clicar per agrandir",
"mainpagetext": "'''MediaWiki es estat installat amb succès.'''",
"mainpagedocfooter": "Consultatz lo [//meta.wikimedia.org/wiki/Help:Contents/fr Guida de l'utilizaire] per mai d'entresenhas sus l'utilizacion d'aqueste logicial de wiki.\n\n== Per començar ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista dels paramètres de configuracion]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/oc FAQ MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussions de las distribucions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptatz MediaWiki dins vòstra lenga]"
}
"config-env-good": "Środowisko oprogramowania zostało sprawdzone.\nMożesz teraz zainstalować MediaWiki.",
"config-env-bad": "Środowisko oprogramowania zostało sprawdzone.\nNie możesz zainstalować MediaWiki.",
"config-env-php": "Zainstalowane jest PHP w wersji $1.",
+ "config-env-hhvm": "Zainstalowany jest HHVM $1.",
"config-unicode-using-utf8": "Korzystanie z normalizacji Unicode utf8_normalize.so napisanej przez Brion Vibbera.",
"config-unicode-using-intl": "Korzystanie z [http://pecl.php.net/intl rozszerzenia intl PECL] do normalizacji Unicode.",
"config-unicode-pure-php-warning": "'''Uwaga!''' [http://pecl.php.net/intl Rozszerzenie intl PECL] do obsługi normalizacji Unicode nie jest dostępne. Użyta zostanie mało wydajna zwykła implementacja w PHP.\nJeśli prowadzisz stronę o dużym natężeniu ruchu, powinieneś zapoznać się z informacjami o [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalizacji Unicode].",
"config-install-stats": "Inicjowanie statystyki",
"config-install-keys": "Generowanie tajnych kluczy",
"config-insecure-keys": "'''Ostrzeżenie:''' {{PLURAL:$2|Klucz bezpieczeństwa|Klucze bezpieczeństwa|Klucze bezpieczeństwa}} ($1) utworzone podczas instalacji {{PLURAL:$2|utworzony podczas instalacji nie jest|utworzone podczas instalacji nie są|utworzone podczas instalacji nie są}} w pełni bezpieczne. Być może warto wygenerować {{PLURAL:$2|własny klucz|własne klucze|własne klucze}}.",
+ "config-install-updates": "Zapobieganie uruchamianiu niepotrzebnych aktualizacji",
"config-install-sysop": "Tworzenie konta administratora",
"config-install-subscribe-fail": "Nie można zapisać na listę „mediawiki-announce“ – $1",
"config-install-subscribe-notpossible": "cURL nie jest zainstalowany, więc <code>allow_url_fopen</code> nie jest dostępne.",
"config-env-good": "O ambiente foi verificado.\nPode instalar o MediaWiki.",
"config-env-bad": "O ambiente foi verificado.\nNão pode instalar o MediaWiki.",
"config-env-php": "O PHP $1 está instalado.",
+ "config-env-hhvm": "HHVM $1 está instalado.",
"config-unicode-using-utf8": "A usar o utf8_normalize.so, por Brion Vibber, para a normalização Unicode.",
"config-unicode-using-intl": "A usar a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.",
"config-unicode-pure-php-warning": "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode. Irá recorrer-se à implementação em PHP puro, que é mais lenta.\nSe o seu site tem alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/pt normalização Unicode].",
"config-env-good": "See also:\n* {{msg-mw|Config-env-bad}}",
"config-env-bad": "See also:\n* {{msg-mw|Config-env-good}}",
"config-env-php": "Parameters:\n* $1 - the version of PHP that has been installed\nSee also:\n* {{msg-mw|config-env-php-toolow}}",
+ "config-env-hhvm": "Parameters:\n* $1 - the version of HHVM that has been installed",
"config-unicode-using-utf8": "Status message in the MediaWiki installer environment checks.",
"config-unicode-using-intl": "Status message in the MediaWiki installer environment checks.",
"config-unicode-pure-php-warning": "PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.",
"config-upload-deleted": "Prompt for the server directory into which deleted files should be moved.",
"config-upload-deleted-help": "Explanation for {{msg|config-upload-deleted}}.",
"config-logo": "Prompt for a link to the logo to use for the wiki.",
- "config-logo-help": "",
+ "config-logo-help": "Help string shown to the user explaining the requirements for the wiki's logo.",
"config-instantcommons": "Used as label for the checkbox.\n\nThe help message for this checkbox is:\n* {{msg-mw|Config-instantcommons-help}}",
"config-instantcommons-help": "Used as help message for the checkbox which is labeled {{msg-mw|config-instantcommons}}.",
"config-cc-error": "Prompt to manually enter a license when the tool fails to match.",
"config-install-step-done": "{{Identical|Done}}",
"config-install-step-failed": "{{Identical|Failed}}",
"config-install-extensions": "Notice shown to the user during the install about progress when extensions are being installed.",
- "config-install-database": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+ "config-install-database": "Message indicates the database is being set up\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
"config-install-schema": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
"config-install-pg-schema-not-exist": "Error message shown to users picking PostgreSQL.",
"config-install-pg-schema-failed": "Parameters:\n* $1 = database user name (usernames in the database are unrelated to wiki user names)\n* $2 =",
"config-install-user-grant-failed": "Parameters:\n* $1 is the database username for which granting rights failed\n* $2 is the error message",
"config-install-user-missing": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing-create}}",
"config-install-user-missing-create": "Used as PostgreSQL error message. Parameters:\n* $1 - database username\nSee also:\n* {{msg-mw|Config-install-user-missing}}",
- "config-install-tables": "Message indicates that the tables are being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+ "config-install-tables": "Message indicates that the tables are being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
"config-install-tables-exist": "Error notice during the installation saying that the database already seems set up for MediaWiki, so it's continuing without taking that step.",
"config-install-tables-failed": "Used as PostgreSQL error message. Parameters:\n* $1 - detailed error message",
"config-install-interwiki": "Message indicates that the interwikitables are being populated\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
"config-install-stats": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
"config-install-keys": "*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
"config-insecure-keys": "Parameters:\n* $1 - A list of names of the secret keys that were generated.\n* $2 - the number of items in the list $1, to be used with PLURAL.",
+ "config-install-updates": "Message indicating that the updatelog table is filled with keys of updates that won't be run when running database updates.\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-updates}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
+ "config-install-updates-failed": "Used as error message. Parameters:\n* $1 - detailed error message",
"config-install-sysop": "Message indicates that the administrator user account is being created\n\nSee also:\n*{{msg-mw|Config-install-database}}\n*{{msg-mw|Config-install-tables}}\n*{{msg-mw|Config-install-schema}}\n*{{msg-mw|Config-install-user}}\n*{{msg-mw|Config-install-interwiki}}\n*{{msg-mw|Config-install-stats}}\n*{{msg-mw|Config-install-keys}}\n*{{msg-mw|Config-install-sysop}}\n*{{msg-mw|Config-install-mainpage}}",
"config-install-subscribe-fail": "{{doc-important|\"[[m:mail:mediawiki-announce|mediawiki-announce]]\" is the name of a mailing list and should not be translated.}}\nA message displayed if the MediaWiki installer encounters an error making a request to lists.wikimedia.org which hosts the mailing list.\n* $1 - the HTTP error encountered, reproduced as is (English string)",
"config-install-subscribe-notpossible": "Error shown when automatically subscribing to the MediaWiki announcements mailing list fails.",
"config-env-good": "Проверка внешней среды была успешно проведена.\nВы можете установить MediaWiki.",
"config-env-bad": "Была проведена проверка внешней среды.\nВы не можете установить MediaWiki.",
"config-env-php": "Установленная версия PHP: $1.",
+ "config-env-hhvm": "HHVM $1 установлена.",
"config-unicode-using-utf8": "Использовать Brion Vibber utf8_normalize.so для нормализации Юникода.",
"config-unicode-using-intl": "Будет использовано [http://pecl.php.net/intl расширение «intl» для PECL] для нормализации Юникода.",
"config-unicode-pure-php-warning": "'''Внимание!''': [http://pecl.php.net/intl расширение intl из PECL] недоступно для нормализации Юникода, будет использоваться медленная реализация на чистом PHP.\nЕсли ваш сайт работает под высокой нагрузкой, вам следует больше узнать о [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормализации Юникода].",
"config-install-stats": "Статистика инициализации",
"config-install-keys": "Создание секретных ключей",
"config-insecure-keys": "'''Предупреждение.''' {{PLURAL:$2|1=Ключ безопасности $1, созданный во время установки, недостаточно надёжен|Ключи безопасности $1, созданные во время установки, недостаточно надёжны}}. Рассмотрите возможность {{PLURAL:$2|1=его|их}} изменения вручную.",
+ "config-install-updates": "Предотвращение запуска ненужных обновлений",
+ "config-install-updates-failed": "<strong>Ошибка:</strong> Вставка ключей обновления в таблицы завершилась со следующей ошибкой: $1",
"config-install-sysop": "Создание учётной записи администратора",
"config-install-subscribe-fail": "Не удаётся подписаться на mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL не установлен и не доступна опция <code>allow_url_fopen</code>.",
"@metadata": {
"authors": [
"Dbc334",
- "Eleassar"
+ "Eleassar",
+ "Yerpo"
]
},
"config-desc": "Namestitveni program za MediaWiki",
"config-title": "Namestitev MediaWiki $1",
"config-information": "Informacije",
+ "config-localsettings-upgrade": "Zaznana je bila datoteka <code>LocalSettings.php</code>.\nZa nadgradnjo te inštalacije prosim vnesite vrednost <code>$wgUpgradeKey</code> v polje za vnos spodaj.\nNašli jo boste v <code>LocalSettings.php</code>.",
"config-localsettings-cli-upgrade": "Zaznana je bila datoteka <code>LocalSettings.php</code>.\nZa nadgradnjo te namestitve zaženite <code>update.php</code>",
"config-localsettings-key": "Nadgraditveni ključ:",
"config-localsettings-badkey": "Naveden ključ je napačen.",
"config-upgrade-key-missing": "Zaznana je bila obstoječa namestitev MediaWiki.\nZa nadgradnjo te namestitve vstavite naslednjo vrstico na dno vaše <code>LocalSettings.php</code>:\n\n$1",
+ "config-localsettings-incomplete": "Kaže, da je obstoječa datoteka <code>LocalSettings.php</code> nepopolna. Vrednost $1 ni nastavljena. Prosimo, nastavite to vrednost v <code>LocalSettings.php</code> in kliknite \"{{int:Config-continue}}\".",
+ "config-localsettings-connection-error": "Prišlo je do napake pri povezovanju s podatkovno zbirko z nastavitvami, določenimi v <code>LocalSettings.php</code>. Prosimo popravite te nastavitve in poskusite znova.\n\n$1",
"config-session-error": "Napaka pri začenjanju seje: $1",
"config-session-expired": "Kot kaže, so vaši podatki seje potekli.\nSeje so konfigurirane za dobo $1.\nTo lahko povečate tako, da nastavite <code>session.gc_maxlifetime</code> v php.ini.\nPonovno zaženite postopek namestitve.",
"config-no-session": "Vaši podatki seje so bili izgubljeni!\nPreverite vaš php.ini in se prepričajte, da je <code>session.save_path</code> nastavljena na ustrezno mapo.",
"config-env-good": "Okolje je pregledano.\nLahko namestite MediaWiki.",
"config-env-bad": "Okolje je pregledano.\nNe morete namestiti MediaWiki.",
"config-env-php": "Nameščen je PHP $1.",
- "config-env-php-toolow": "Nameščen je PHP $1.\nVendar pa MediaWiki zahteva PHP $2 ali višji.",
"config-unicode-using-utf8": "Uporaba utf8_normalize.so Briona Vibberja za normalizacijo unikoda.",
"config-unicode-using-intl": "Uporaba [http://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.",
"config-memory-raised": "PHP-jev <code>memory_limit</code> je $1, dvignjen na $2.",
"config-env-good": "Miljön har kontrollerats.\nDu kan installera MediaWiki.",
"config-env-bad": "Miljön har kontrollerats.\nDu kan inte installera MediaWiki.",
"config-env-php": "PHP $1 är installerat.",
+ "config-env-hhvm": "HHVM $1 är installerat.",
"config-unicode-using-utf8": "Använder Brion Vibbers utf8_normalize.so för Unicode-normalisering.",
"config-unicode-using-intl": "Använder [http://pecl.php.net/intl intl PECL-tillägget] för Unicode-normalisering.",
"config-unicode-pure-php-warning": "'''Varning:''' [http://pecl.php.net/intl intl PECL-tillägget] är inte tillgängligt för att hantera Unicode-normalisering, faller tillbaka till en långsamt implementering i ren PHP.\nOm du driver en högtrafikerad webbplats bör du läsa lite om [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode-normalisering].",
"config-install-stats": "Initierar statistik",
"config-install-keys": "Genererar hemliga nycklar",
"config-insecure-keys": "'''Varning:''' {{PLURAL:$2|En säkerhetsnyckel|Säkerhetsnycklar}} ($1) som generades under installationen är inte helt {{PLURAL:$2|säker|säkra}} . Överväg att ändra {{PLURAL:$2|den|dem}} manuellt.",
+ "config-install-updates": "Förhindra att onödiga uppdateringar körs",
+ "config-install-updates-failed": "<strong>Fel:</strong> Infogning av uppdateringsnycklar i tabeller misslyckades med följande fel:$1",
"config-install-sysop": "Skapar administratörskonto",
"config-install-subscribe-fail": "Det gick inte att prenumerera på mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL är inte installerad och <code>allow_url_fopen</code> är inte tillgänglig.",
"config-install-stats": "Ініціалізація статистики",
"config-install-keys": "Генерація секретних ключів",
"config-insecure-keys": "'''Увага:''' {{PLURAL:$2|1=Секретний ключ|Секретні ключі}} ($1), {{PLURAL:$2|1=згенерований в процесі встановлення, недостатньо надійний|згенеровані в процесі встановлення, недостатньо надійні}}. Розгляньте можливість {{PLURAL:$2|1=його|їх}} заміни вручну.",
+ "config-install-updates-failed": "<strong>Помилка:</strong> Вставка оновленних ключів в таблиці не вдалося через таку помилку:$1",
"config-install-sysop": "Створення облікового запису адміністратора",
"config-install-subscribe-fail": "Не можливо підписатись на mediawiki-announce: $1",
"config-install-subscribe-notpossible": "cURL не встановлено і опція <code>allow_url_fopen</code> не доступна.",
"config-env-good": "环境检查已经完成。您可以安装MediaWiki。",
"config-env-bad": "环境检查已经完成。您不能安装MediaWiki。",
"config-env-php": "PHP $1已安装。",
+ "config-env-hhvm": "HHVM $1已安装。",
"config-unicode-using-utf8": "使用Brion Vibber的utf8_normalize.so实现Unicode正常化。",
"config-unicode-using-intl": "使用[http://pecl.php.net/intl intl PECL扩展程序]标准化Unicode。",
"config-unicode-pure-php-warning": "<strong>警告:</strong>因为尚未安装 [http://pecl.php.net/intl intl PECL 扩展]以处理 Unicode 正常化,故只能退而采用运行较慢的纯 PHP 实现的方法。\n如果您运行着一个高流量的站点,请参阅 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode 正常化]一文。",
"config-mysql-innodb": "InnoDB",
"config-mysql-myisam": "MyISAM",
"config-mysql-myisam-dep": "'''警告''':您选择了MyISAM作为MySQL的存储引擎,MediaWiki并不推荐您这么做,因为:\n* 它仅能通过表锁定来勉强支持并发\n* 与其他引擎相比,它更容易被损坏\n* MediaWiki代码库并不总会去处理MyISAM\n\n如果您的MySQL程序支持InnoDB,我们高度推荐您使用该引擎替代MyISAM。\n如果您的MySQL程序不支持InnoDB,请考虑升级。",
- "config-mysql-only-myisam-dep": "''''警告:'''MyISAM是MySQL在此机器上唯一可用的存储引擎,但它不适合用于MediaWiki,因为:\n*因为表级锁定,它几乎不支持并发。\n*它相比其他引擎更容易损坏。\n*MediaWiki代码不能总是按照预期操作MyISAM。\n\n你的MySQL不支持InnoDB,是时候升级了。",
+ "config-mysql-only-myisam-dep": "<strong>警告:</strong>MyISAM是MySQL在此机器上唯一可用的存储引擎,但它不适合用于MediaWiki,因为:\n*因为表级锁定,它几乎不支持并发。\n*它相比其他引擎更容易损坏。\n*MediaWiki代码不能总是按照预期操作MyISAM。\n\n你的MySQL不支持InnoDB,是时候升级了。",
"config-mysql-engine-help": "'''InnoDB'''通常是最佳选项,因为它对并发操作有着良好的支持。\n\n'''MyISAM'''在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
"config-mysql-charset": "数据库字符集:",
"config-mysql-binary": "二进制",
"config-install-stats": "初始化统计",
"config-install-keys": "生成密钥中",
"config-insecure-keys": "'''警告''':在安装过程中生成的{{PLURAL:$2|安全密钥|安全密钥}}($1){{PLURAL:$2|并|并}}不一定安全。请考虑手动更改{{PLURAL:$2|它|它们}}。",
+ "config-install-updates": "防止运行不需要的更新",
+ "config-install-updates-failed": "<strong>错误:</strong>表格中插入更新关键字失败并出现如下错误:$1",
"config-install-sysop": "正在创建管理员用户帐号",
"config-install-subscribe-fail": "无法订阅mediawiki-announce:$1",
"config-install-subscribe-notpossible": "没有安装cURL,<code>allow_url_fopen</code>也不可用。",
"config-restart": "是的,重新開始",
"config-welcome": "=== 環境檢查 ===\n現在會做基本的檢查,檢查環境是否符合 MediaWiki 安裝所需。\n若您要尋求如何完成安裝的協助,請記得提供以下訊息。",
"config-copyright": "=== 版權聲明與授權條款 ===\n\n$1\n\n本程式為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但 <strong>不負任何擔保責任</strong>;亦無隱含對 <strong>適售性</strong> 或 <strong>特定用途的適用性</strong> 的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 <doclink href=\"Copying\">GNU 通用公共授權條款的副本</doclink>;如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線上閱讀]。",
- "config-sidebar": "* [www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 首頁]\n* [www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh-hant 常見問題集]\n----\n* <doclink href=Readme>讀我說明</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>版權聲明</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
+ "config-sidebar": "* [//www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 首頁]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/zh 使用者指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/zh 管理員指南]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/zh 常見問題集]\n----\n* <doclink href=Readme>讀我說明</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>版權聲明</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
"config-env-good": "環境檢查已完成。\n您可以安裝 MediaWiki。",
"config-env-bad": "環境檢查已完成。\n您無法安裝 MediaWiki。",
"config-env-php": "PHP $1 已安裝。",
+ "config-env-hhvm": "HHVM $1 已安裝。",
"config-unicode-using-utf8": "使用 Brion Vibber 的 utf8_normalize.so 做 Unicode 正規化。",
"config-unicode-using-intl": "使用 [http://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。",
"config-unicode-pure-php-warning": "<strong>警告:</strong> 無法使用 [http://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,故回退使用純 PHP 實作的正規化程式,此方式處理速度較緩慢。\n\n如果您的網站瀏覽人次很高,您應先閱讀 [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations/zh Unicode 正規化]。",
"config-sqlite-cant-create-db": "無法建立資料庫檔案 <code>$1</code>。",
"config-sqlite-fts3-downgrade": "PHP 不支援 FTS3,正在降級資料表。",
"config-can-upgrade": "在資料庫中找到 MediaWiki 的資料表。\n要升級至 MediaWiki $1,請點選 <strong>繼續</strong>。",
- "config-upgrade-done": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。\n\n如果您需要重新產生 <code>LocalSettings.php</code> 檔案,請點擊下方按鈕。\n除非您的 Wiki 出現了問題,否則我們 <strong>不建議</strong> 您執行此操作。",
+ "config-upgrade-done": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。\n\n如果您需要重新產生 <code>LocalSettings.php</code> 檔案,請點選下方按鈕。\n除非您的 Wiki 出現了問題,否則我們 <strong>不建議</strong> 您執行此操作。",
"config-upgrade-done-no-regenerate": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。",
"config-regenerate": "重新產生 LocalSettings.php →",
"config-show-table-status": "<code>SHOW TABLE STATUS</code> 查詢失敗!",
"config-email-usertalk": "開啟使用者討論頁面通知",
"config-email-usertalk-help": "若使用者在個人偏好開啟了此功能,則可收到使用者討論頁面被修改的通知。",
"config-email-watchlist": "開啟監視清單通知",
- "config-email-watchlist-help": "若使用者在個人偏好開啟了此功能,允許使用者收到與其監視列表有關的通知。",
+ "config-email-watchlist-help": "若使用者在個人偏好開啟了此功能,允許使用者收到與其監視清單有關的通知。",
"config-email-auth": "開啟電子郵件身份認證",
"config-email-auth-help": "若開啟此選項,使用者不論設定或者更改電子郵件地址,都必須透過收信的方式確認沒有問題。\n只有驗證過的電子郵件地址可以收到來自其他使用者或修改通知的信件。\n公開的 Wiki 會 <strong>建議</strong> 設定此選項,以防使用者濫用電子郵件功能。",
"config-email-sender": "電子郵件回覆位址:",
// Flush any pending DB writes for sanity
wfGetLBFactory()->commitMasterChanges();
- $backoffs = $this->loadBackoffs(); // map of (type => UNIX expiry)
- $startingBackoffs = $backoffs; // avoid unnecessary writes
- $backoffExpireFunc = function ( $t ) {
- return $t > time();
- };
+ // Some jobs types should not run until a certain timestamp
+ $backoffs = array(); // map of (type => UNIX expiry)
+ $backoffDeltas = array(); // map of (type => seconds)
+ $wait = 'wait'; // block to read backoffs the first time
$jobsRun = 0; // counter
$timeMsTotal = 0;
$flags = JobQueueGroup::USE_CACHE;
- $startTime = microtime( true ); // time since jobs started running
+ $sTime = microtime( true ); // time since jobs started running
$lastTime = microtime( true ); // time since last slave check
do {
- $backoffs = array_filter( $backoffs, $backoffExpireFunc );
+ // Sync the persistent backoffs with concurrent runners
+ $backoffs = $this->syncBackoffDeltas( $backoffs, $backoffDeltas, $wait );
$blacklist = $noThrottle ? array() : array_keys( $backoffs );
+ $wait = 'nowait'; // less important now
+
if ( $type === false ) {
$job = $group->pop( JobQueueGroup::TYPE_DEFAULT, $flags, $blacklist );
} elseif ( in_array( $type, $blacklist ) ) {
} else {
$job = $group->pop( $type ); // job from a single queue
}
+
if ( $job ) { // found a job
$jType = $job->getType();
+ // Back off of certain jobs for a while (for throttling and for errors)
+ $ttw = $this->getBackoffTimeToWait( $job );
+ if ( $ttw > 0 ) {
+ // Always add the delta for other runners in case the time running the
+ // job negated the backoff for each individually but not collectively.
+ $backoffDeltas[$jType] = isset( $backoffDeltas[$jType] )
+ ? $backoffDeltas[$jType] + $ttw
+ : $ttw;
+ $backoffs = $this->syncBackoffDeltas( $backoffs, $backoffDeltas, $wait );
+ }
+
$this->runJobsLog( $job->toString() . " STARTING" );
// Run the job...
wfProfileIn( __METHOD__ . '-' . get_class( $job ) );
- $t = microtime( true );
+ $sTime = microtime( true );
try {
++$jobsRun;
$status = $job->run();
$error = get_class( $e ) . ': ' . $e->getMessage();
MWExceptionHandler::logException( $e );
}
- $timeMs = intval( ( microtime( true ) - $t ) * 1000 );
+ $timeMs = intval( ( microtime( true ) - $sTime ) * 1000 );
wfProfileOut( __METHOD__ . '-' . get_class( $job ) );
$timeMsTotal += $timeMs;
$group->ack( $job ); // done
}
+ // Back off of certain jobs for a while (for throttling and for errors)
+ if ( $status === false && mt_rand( 0, 49 ) == 0 ) {
+ $ttw = max( $ttw, 30 ); // too many errors
+ $backoffDeltas[$jType] = isset( $backoffDeltas[$jType] )
+ ? $backoffDeltas[$jType] + $ttw
+ : $ttw;
+ }
+
if ( $status === false ) {
$this->runJobsLog( $job->toString() . " t=$timeMs error={$error}" );
} else {
'time' => $timeMs
);
- // Back off of certain jobs for a while (for throttling and for errors)
- $ttw = $this->getBackoffTimeToWait( $job );
- if ( $status === false && mt_rand( 0, 49 ) == 0 ) {
- $ttw = max( $ttw, 30 );
- }
- if ( $ttw > 0 ) {
- $backoffs[$jType] = isset( $backoffs[$jType] ) ? $backoffs[$jType] : 0;
- $backoffs[$jType] = max( $backoffs[$jType], time() + $ttw );
- }
-
// Break out if we hit the job count or wall time limits...
if ( $maxJobs && $jobsRun >= $maxJobs ) {
$response['reached'] = 'job-limit';
break;
- } elseif ( $maxTime && ( microtime( true ) - $startTime ) > $maxTime ) {
+ } elseif ( $maxTime && ( microtime( true ) - $sTime ) > $maxTime ) {
$response['reached'] = 'time-limit';
break;
}
} while ( $job ); // stop when there are no jobs
// Sync the persistent backoffs for the next runJobs.php pass
- $backoffs = array_filter( $backoffs, $backoffExpireFunc );
- if ( $backoffs !== $startingBackoffs ) {
- $this->syncBackoffs( $backoffs );
+ if ( $backoffDeltas ) {
+ $this->syncBackoffDeltas( $backoffs, $backoffDeltas, 'wait' );
}
$response['backoffs'] = $backoffs;
/**
* Get the previous backoff expiries from persistent storage
+ * On I/O or lock acquisition failure this returns the original $backoffs.
*
+ * @param array $backoffs Map of (job type => UNIX timestamp)
+ * @param string $mode Lock wait mode - "wait" or "nowait"
* @return array Map of (job type => backoff expiry timestamp)
*/
- private function loadBackoffs() {
+ private function loadBackoffs( array $backoffs, $mode = 'wait' ) {
$section = new ProfileSection( __METHOD__ );
- $backoffs = array();
$file = wfTempDir() . '/mw-runJobs-backoffs.json';
if ( is_file( $file ) ) {
+ $noblock = ( $mode === 'nowait' ) ? LOCK_NB : 0;
$handle = fopen( $file, 'rb' );
- flock( $handle, LOCK_SH );
+ if ( !flock( $handle, LOCK_SH | $noblock ) ) {
+ fclose( $handle );
+ return $backoffs; // don't wait on lock
+ }
$content = stream_get_contents( $handle );
flock( $handle, LOCK_UN );
fclose( $handle );
- $backoffs = json_decode( $content, true ) ? : array();
+ $ctime = microtime( true );
+ $cBackoffs = json_decode( $content, true ) ?: array();
+ foreach ( $cBackoffs as $type => $timestamp ) {
+ if ( $timestamp < $ctime ) {
+ unset( $cBackoffs[$type] );
+ }
+ }
+ } else {
+ $cBackoffs = array();
}
- return $backoffs;
+ return $cBackoffs;
}
/**
* Merge the current backoff expiries from persistent storage
*
- * @param array $backoffs Map of (job type => backoff expiry timestamp)
+ * The $deltas map is set to an empty array on success.
+ * On I/O or lock acquisition failure this returns the original $backoffs.
+ *
+ * @param array $backoffs Map of (job type => UNIX timestamp)
+ * @param array $deltas Map of (job type => seconds)
+ * @param string $mode Lock wait mode - "wait" or "nowait"
+ * @return array The new backoffs account for $backoffs and the latest file data
*/
- private function syncBackoffs( array $backoffs ) {
+ private function syncBackoffDeltas( array $backoffs, array &$deltas, $mode = 'wait' ) {
$section = new ProfileSection( __METHOD__ );
+ if ( !$deltas ) {
+ return $this->loadBackoffs( $backoffs, $mode );
+ }
+
+ $noblock = ( $mode === 'nowait' ) ? LOCK_NB : 0;
$file = wfTempDir() . '/mw-runJobs-backoffs.json';
$handle = fopen( $file, 'wb+' );
- flock( $handle, LOCK_EX );
+ if ( !flock( $handle, LOCK_EX | $noblock ) ) {
+ fclose( $handle );
+ return $backoffs; // don't wait on lock
+ }
+ $ctime = microtime( true );
$content = stream_get_contents( $handle );
- $cBackoffs = json_decode( $content, true ) ? : array();
- foreach ( $backoffs as $type => $timestamp ) {
- $cBackoffs[$type] = isset( $cBackoffs[$type] ) ? $cBackoffs[$type] : 0;
- $cBackoffs[$type] = max( $cBackoffs[$type], $backoffs[$type] );
+ $cBackoffs = json_decode( $content, true ) ?: array();
+ foreach ( $deltas as $type => $seconds ) {
+ $cBackoffs[$type] = isset( $cBackoffs[$type] ) && $cBackoffs[$type] >= $ctime
+ ? $cBackoffs[$type] + $seconds
+ : $ctime + $seconds;
+ }
+ foreach ( $cBackoffs as $type => $timestamp ) {
+ if ( $timestamp < $ctime ) {
+ unset( $cBackoffs[$type] );
+ }
}
ftruncate( $handle, 0 );
- fwrite( $handle, json_encode( $backoffs ) );
+ fwrite( $handle, json_encode( $cBackoffs ) );
flock( $handle, LOCK_UN );
fclose( $handle );
+
+ $deltas = array();
+
+ return $cBackoffs;
}
/**
$css = $noFlipClass->detokenize( $css );
$css = $noFlipSingle->detokenize( $css );
+ // Remove remaining /* @noflip */ annotations, they won't be needed anymore
+ // and can interfere with other code (bug 69698).
+ $css = self::nullTransform( $css );
+
+ return $css;
+ }
+
+ /**
+ * Remove @noflip annotations, but don't do any other transforms.
+ * @param string $css stylesheet to transform
+ * @return string Transformed stylesheet
+ */
+ public static function nullTransform( $css ) {
+ $patt = self::$patterns['noflip_annotation'];
+ $css = preg_replace( "/($patt)\\s*/i", '', $css );
+
return $css;
}
*/
public static function getMimeType( $file ) {
$realpath = realpath( $file );
- // Try a couple of different ways to get the MIME-type of a file, in order of
- // preference
if (
$realpath
&& function_exists( 'finfo_file' )
&& function_exists( 'finfo_open' )
&& defined( 'FILEINFO_MIME_TYPE' )
) {
- // As of PHP 5.3, this is how you get the MIME-type of a file; it uses the Fileinfo
- // PECL extension
return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
- } elseif ( function_exists( 'mime_content_type' ) ) {
- // Before this was deprecated in PHP 5.3, this was how you got the MIME-type of a file
- return mime_content_type( $file );
- } else {
- // Worst-case scenario has happened, use the file extension to infer the MIME-type
- $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
- if ( isset( self::$mimeTypes[$ext] ) ) {
- return self::$mimeTypes[$ext];
- }
}
+
+ // Infer the MIME-type from the file extension
+ $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
+ if ( isset( self::$mimeTypes[$ext] ) ) {
+ return self::$mimeTypes[$ext];
+ }
+
return false;
}
$dbw->insert( 'log_search', $rows, __METHOD__, 'IGNORE' );
}
+ // Update any bloom filter cache
+ $member = $this->getTarget()->getNamespace() . ':' . $this->getTarget()->getDBkey();
+ BloomCache::get( 'main' )->insert( wfWikiId(), 'TitleHasLogs', $member );
+
return $this->id;
}
/**
* Get the comment from the last addEntry() call
+ * @return string
*/
public function getComment() {
return $this->comment;
/**
* Get $this->mFilteredExifData
+ * @return array
*/
function getFilteredData() {
return $this->mFilteredExifData;
if ( $expiry > 2592000 && $expiry < 1000000000 ) {
$expiry = 2592000;
}
- return (int) $expiry;
+ return (int)$expiry;
}
/**
$callback = array( $this, 'encodeKey' );
$result = $this->client->getMulti( array_map( $callback, $keys ) );
wfProfileOut( __METHOD__ );
+ $result = $result ?: array(); // must be an array
return $this->checkResult( false, $result );
}
*/
public function showMissingArticle() {
global $wgSend404Code;
+
$outputPage = $this->getContext()->getOutput();
// Whether the page is a root user page of an existing user (but not a subpage)
$validUserPage = false;
+ $title = $this->getTitle();
+
# Show info in user (talk) namespace. Does the user exist? Is he blocked?
- if ( $this->getTitle()->getNamespace() == NS_USER
- || $this->getTitle()->getNamespace() == NS_USER_TALK
+ if ( $title->getNamespace() == NS_USER
+ || $title->getNamespace() == NS_USER_TALK
) {
- $parts = explode( '/', $this->getTitle()->getText() );
+ $parts = explode( '/', $title->getText() );
$rootPart = $parts[0];
$user = User::newFromName( $rootPart, false /* allow IP users*/ );
$ip = User::isIP( $rootPart );
)
)
);
- $validUserPage = !$this->getTitle()->isSubpage();
+ $validUserPage = !$title->isSubpage();
} else {
- $validUserPage = !$this->getTitle()->isSubpage();
+ $validUserPage = !$title->isSubpage();
}
}
wfRunHooks( 'Article::MissingArticleConditions', array( &$conds, $logTypes ) );
# Show delete and move logs
- LogEventsList::showLogExtract( $outputPage, $logTypes, $this->getTitle(), '',
- array( 'lim' => 10,
- 'conds' => $conds,
- 'showIfEmpty' => false,
- 'msgKey' => array( 'moveddeleted-notice' ) )
- );
+ $member = $title->getNamespace() . ':' . $title->getDBkey();
+ // @todo: move optimization to showLogExtract()?
+ if ( BloomCache::get( 'main' )->check( wfWikiId(), 'TitleHasLogs', $member ) ) {
+ LogEventsList::showLogExtract( $outputPage, $logTypes, $title, '',
+ array( 'lim' => 10,
+ 'conds' => $conds,
+ 'showIfEmpty' => false,
+ 'msgKey' => array( 'moveddeleted-notice' ) )
+ );
+ }
if ( !$this->mPage->hasViewableContent() && $wgSend404Code && !$validUserPage ) {
// If there's no backing content, send a 404 Not Found
$oldid = $this->getOldID();
if ( $oldid ) {
$text = wfMessage( 'missing-revision', $oldid )->plain();
- } elseif ( $this->getTitle()->getNamespace() === NS_MEDIAWIKI ) {
+ } elseif ( $title->getNamespace() === NS_MEDIAWIKI ) {
// Use the default message text
- $text = $this->getTitle()->getDefaultMessageText();
- } elseif ( $this->getTitle()->quickUserCan( 'create', $this->getContext()->getUser() )
- && $this->getTitle()->quickUserCan( 'edit', $this->getContext()->getUser() )
+ $text = $title->getDefaultMessageText();
+ } elseif ( $title->quickUserCan( 'create', $this->getContext()->getUser() )
+ && $title->quickUserCan( 'edit', $this->getContext()->getUser() )
) {
$message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
$text = wfMessage( $message )->plain();
* @param Title|array $target Destination(s) to redirect
* @param bool $appendSubtitle [optional]
* @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
- * @return string Containing HMTL with redirect link
+ * @return string Containing HTML with redirect link
*/
public function viewRedirect( $target, $appendSubtitle = true, $forceKnown = false ) {
$lang = $this->getTitle()->getPageLanguage();
+ $out = $this->getContext()->getOutput();
if ( $appendSubtitle ) {
- $out = $this->getContext()->getOutput();
$out->addSubtitle( wfMessage( 'redirectpagesub' )->parse() );
}
+ $out->addModuleStyles( 'mediawiki.action.view.redirectPage' );
return static::getRedirectHeaderHtml( $lang, $target, $forceKnown );
}
* @param Language $lang
* @param Title|array $target Destination(s) to redirect
* @param bool $forceKnown Should the image be shown as a bluelink regardless of existence?
- * @return string Containing HMTL with redirect link
+ * @return string Containing HTML with redirect link
*/
public static function getRedirectHeaderHtml( Language $lang, $target, $forceKnown = false ) {
- global $wgStylePath;
-
if ( !is_array( $target ) ) {
$target = array( $target );
}
- $imageDir = $lang->getDir();
-
- // the loop prepends the arrow image before the link, so the first case needs to be outside
-
- /** @var $title Title */
- $title = array_shift( $target );
-
- if ( $forceKnown ) {
- $link = Linker::linkKnown( $title, htmlspecialchars( $title->getFullText() ) );
- } else {
- $link = Linker::link( $title, htmlspecialchars( $title->getFullText() ) );
+ $html = '<ul class="redirectText">';
+ /** @var Title $title */
+ foreach ( $target as $title ) {
+ $html .= '<li>' . Linker::link(
+ $title,
+ htmlspecialchars( $title->getFullText() ),
+ array(),
+ // Automatically append redirect=no to each link, since most of them are
+ // redirect pages themselves.
+ array( 'redirect' => 'no' ),
+ ( $forceKnown ? array( 'known', 'noclasses' ) : array() )
+ ) . '</li>';
}
- $nextRedirect = $wgStylePath . '/common/images/nextredirect' . $imageDir . '.png';
- $alt = $lang->isRTL() ? '←' : '→';
+ $redirectToText = wfMessage( 'redirectto' )->inLanguage( $lang )->text();
- // Automatically append redirect=no to each link, since most of them are
- // redirect pages themselves.
- /** @var Title $rt */
- foreach ( $target as $rt ) {
- $link .= Html::element( 'img', array( 'src' => $nextRedirect, 'alt' => $alt ) );
- if ( $forceKnown ) {
- $link .= Linker::linkKnown(
- $rt,
- htmlspecialchars( $rt->getFullText(),
- array(),
- array( 'redirect' => 'no' )
- )
- );
- } else {
- $link .= Linker::link(
- $rt,
- htmlspecialchars( $rt->getFullText() ),
- array(),
- array( 'redirect' => 'no' )
- );
- }
- }
-
- $imageUrl = $wgStylePath . '/common/images/redirect' . $imageDir . '.png';
return '<div class="redirectMsg">' .
- Html::element( 'img', array( 'src' => $imageUrl, 'alt' => '#REDIRECT' ) ) .
- '<span class="redirectText">' . $link . '</span></div>';
+ '<p>' . $redirectToText . '</p>' .
+ $html .
+ '</div>';
}
/**
* raw WikiPage fields for backwards compatibility.
*
* @param string $fname Field name
+ * @return mixed
*/
public function __get( $fname ) {
if ( property_exists( $this->mPage, $fname ) ) {
# @todo FIXME: Why is this using escapeId for a class?!
$class = Sanitizer::escapeId( $v['id'] );
if ( $type == 'collapsed' ) {
- // Handled by mediawiki.action.view.metadata module
- // and skins/common/shared.css.
+ // Handled by mediawiki.action.view.metadata module.
$class .= ' collapsable';
}
$r .= "<tr class=\"$class\">\n";
$url = $lang->userTimeAndDate( $timestamp, $user );
}
$row .= '<span class="history-deleted">' . $url . '</span>';
+ } elseif ( !$file->exists() ) {
+ $row .= '<span class="mw-file-missing">'
+ . $lang->userTimeAndDate( $timestamp, $user ) . '</span>';
} else {
$url = $iscur ? $this->current->getUrl() : $this->current->getArchiveUrl( $img );
$row .= Xml::element(
* @ingroup Pager
*/
abstract class IndexPager extends ContextSource implements Pager {
+ /**
+ * Constants for the $mDefaultDirection field.
+ *
+ * These are boolean for historical reasons and should stay boolean for backwards-compatibility.
+ */
+ const DIR_ASCENDING = false;
+ const DIR_DESCENDING = true;
+
public $mRequest;
public $mLimitsShown = array( 20, 50, 100, 250, 500 );
public $mDefaultLimit = 50;
protected $mOrderType;
/**
* $mDefaultDirection gives the direction to use when sorting results:
- * false for ascending, true for descending. If $mIsBackwards is set, we
+ * DIR_ASCENDING or DIR_DESCENDING. If $mIsBackwards is set, we
* start from the opposite end, but we still sort the page itself according
* to $mDefaultDirection. E.g., if $mDefaultDirection is false but we're
* going backwards, we'll display the last page of results, but the last
$fname = __METHOD__ . ' (' . get_class( $this ) . ')';
wfProfileIn( $fname );
+ // @todo This should probably compare to DIR_DESCENDING and DIR_ASCENDING constants
$descending = ( $this->mIsBackwards == $this->mDefaultDirection );
# Plus an extra row so that we can tell the "next" link should be shown
$queryLimit = $this->mLimit + 1;
*
* @param string $text Text displayed on the link
* @param array $query Associative array of parameter to be in the query string
- * @param string $type Value of the "rel" attribute
- *
+ * @param string $type Link type used to create additional attributes, like "rel", "class" or
+ * "title". Valid values (non-exhaustive list): 'first', 'last', 'prev', 'next', 'asc', 'desc'.
* @return string HTML fragment
*/
function makeLink( $text, array $query = null, $type = null ) {
}
$attrs = array();
- if ( in_array( $type, array( 'first', 'prev', 'next', 'last' ) ) ) {
- # HTML5 rel attributes
+ if ( in_array( $type, array( 'prev', 'next' ) ) ) {
$attrs['rel'] = $type;
}
+ if ( in_array( $type, array( 'asc', 'desc' ) ) ) {
+ $attrs['title'] = wfMessage( $type == 'asc' ? 'sort-ascending' : 'sort-descending' )->text();
+ }
+
if ( $type ) {
$attrs['class'] = "mw-{$type}link";
}
+
return Linker::linkKnown(
$this->getTitle(),
$text,
}
/**
- * Return the default sorting direction: false for ascending, true for
- * descending. You can also have an associative array of ordertype => dir,
+ * Return the default sorting direction: DIR_ASCENDING or DIR_DESCENDING.
+ * You can also have an associative array of ordertype => dir,
* if multiple order types are supported. In this case getIndexField()
* must return an array, and the keys of that must exactly match the keys
* of this.
* @return bool
*/
protected function getDefaultDirections() {
- return false;
+ return IndexPager::DIR_ASCENDING;
}
}
* @ingroup Pager
*/
abstract class ReverseChronologicalPager extends IndexPager {
- public $mDefaultDirection = true;
+ public $mDefaultDirection = IndexPager::DIR_DESCENDING;
public $mYear;
public $mMonth;
$this->mSort = $this->getDefaultSort();
}
if ( $this->getRequest()->getBool( 'asc' ) ) {
- $this->mDefaultDirection = false;
+ $this->mDefaultDirection = IndexPager::DIR_ASCENDING;
} elseif ( $this->getRequest()->getBool( 'desc' ) ) {
- $this->mDefaultDirection = true;
+ $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
} /* Else leave it at whatever the class default is */
parent::__construct();
}
+ /**
+ * Get the formatted result list. Calls getStartBody(), formatRow() and getEndBody(), concatenates
+ * the results and returns them.
+ *
+ * Also adds the required styles to our OutputPage object (this means that if context wasn't
+ * passed to constructor or otherwise set up, you will get a pager with missing styles).
+ *
+ * This method has been made 'final' in 1.24. There's no reason to override it, and if there exist
+ * any subclasses that do, the style loading hack is probably broken in them. Let's fail fast
+ * rather than mysteriously render things wrong.
+ *
+ * @deprecated since 1.24, use getBodyOutput() or getFullOutput() instead
+ * @return string
+ */
+ final public function getBody() {
+ $this->getOutput()->addModuleStyles( $this->getModuleStyles() );
+ return parent::getBody();
+ }
+
+ /**
+ * Get the formatted result list.
+ *
+ * Calls getBody() and getModuleStyles() and builds a ParserOutput object. (This is a bit hacky
+ * but works well.)
+ *
+ * @since 1.24
+ * @return ParserOutput
+ */
+ public function getBodyOutput() {
+ $body = parent::getBody();
+
+ $pout = new ParserOutput;
+ $pout->setText( $body );
+ $pout->addModuleStyles( $this->getModuleStyles() );
+ return $pout;
+ }
+
+ /**
+ * Get the formatted result list, with navigation bars.
+ *
+ * Calls getBody(), getNavigationBar() and getModuleStyles() and
+ * builds a ParserOutput object. (This is a bit hacky but works well.)
+ *
+ * @since 1.24
+ * @return ParserOutput
+ */
+ public function getFullOutput() {
+ $navigation = $this->getNavigationBar();
+ $body = parent::getBody();
+
+ $pout = new ParserOutput;
+ $pout->setText( $navigation . $body . $navigation );
+ $pout->addModuleStyles( $this->getModuleStyles() );
+ return $pout;
+ }
+
/**
* @protected
* @return string
*/
function getStartBody() {
- global $wgStylePath;
$sortClass = $this->getSortHeaderClass();
$s = '';
$fields = $this->getFieldNames();
- # Make table header
+ // Make table header
foreach ( $fields as $field => $name ) {
if ( strval( $name ) == '' ) {
$s .= Html::rawElement( 'th', array(), ' ' ) . "\n";
} elseif ( $this->isFieldSortable( $field ) ) {
$query = array( 'sort' => $field, 'limit' => $this->mLimit );
- if ( $field == $this->mSort ) {
- # This is the sorted column
- # Prepare a link that goes in the other sort order
- if ( $this->mDefaultDirection ) {
- # Descending
- $image = 'Arr_d.png';
+ $linkType = null;
+ $class = null;
+
+ if ( $this->mSort == $field ) {
+ // The table is sorted by this field already, make a link to sort in the other direction
+ // We don't actually know in which direction other fields will be sorted by default…
+ if ( $this->mDefaultDirection == IndexPager::DIR_DESCENDING ) {
+ $linkType = 'asc';
+ $class = "$sortClass TablePager_sort-descending";
$query['asc'] = '1';
$query['desc'] = '';
- $alt = $this->msg( 'descending_abbrev' )->escaped();
} else {
- # Ascending
- $image = 'Arr_u.png';
+ $linkType = 'desc';
+ $class = "$sortClass TablePager_sort-ascending";
$query['asc'] = '';
$query['desc'] = '1';
- $alt = $this->msg( 'ascending_abbrev' )->escaped();
}
- $image = "$wgStylePath/common/images/$image";
- $link = $this->makeLink(
- Html::element( 'img', array( 'width' => 12, 'height' => 12,
- 'alt' => $alt, 'src' => $image ) ) . htmlspecialchars( $name ), $query );
- $s .= Html::rawElement( 'th', array( 'class' => $sortClass ), $link ) . "\n";
- } else {
- $s .= Html::rawElement( 'th', array(),
- $this->makeLink( htmlspecialchars( $name ), $query ) ) . "\n";
}
+
+ $link = $this->makeLink( htmlspecialchars( $name ), $query, $linkType );
+ $s .= Html::rawElement( 'th', array( 'class' => $class ), $link ) . "\n";
} else {
$s .= Html::element( 'th', array(), $name ) . "\n";
}
$tableClass = $this->getTableClass();
$ret = Html::openElement( 'table', array(
- 'style' => 'border:1px;',
'class' => "mw-datatable $tableClass" )
);
$ret .= Html::rawElement( 'thead', array(), Html::rawElement( 'tr', array(), "\n" . $s . "\n" ) );
* @return string HTML
*/
public function getNavigationBar() {
- global $wgStylePath;
-
if ( !$this->isNavigationBarShown() ) {
return '';
}
- $path = "$wgStylePath/common/images";
$labels = array(
'first' => 'table_pager_first',
'prev' => 'table_pager_prev',
'next' => 'table_pager_next',
'last' => 'table_pager_last',
);
- $images = array(
- 'first' => 'arrow_first_25.png',
- 'prev' => 'arrow_left_25.png',
- 'next' => 'arrow_right_25.png',
- 'last' => 'arrow_last_25.png',
- );
- $disabledImages = array(
- 'first' => 'arrow_disabled_first_25.png',
- 'prev' => 'arrow_disabled_left_25.png',
- 'next' => 'arrow_disabled_right_25.png',
- 'last' => 'arrow_disabled_last_25.png',
- );
- if ( $this->getLanguage()->isRTL() ) {
- $keys = array_keys( $labels );
- $images = array_combine( $keys, array_reverse( $images ) );
- $disabledImages = array_combine( $keys, array_reverse( $disabledImages ) );
- }
$linkTexts = array();
$disabledTexts = array();
foreach ( $labels as $type => $label ) {
$msgLabel = $this->msg( $label )->escaped();
- $linkTexts[$type] = Html::element( 'img', array( 'src' => "$path/{$images[$type]}",
- 'alt' => $msgLabel ) ) . "<br />$msgLabel";
- $disabledTexts[$type] = Html::element( 'img', array( 'src' => "$path/{$disabledImages[$type]}",
- 'alt' => $msgLabel ) ) . "<br />$msgLabel";
+ $linkTexts[$type] = "<div class='TablePager_nav-enabled'>$msgLabel</div>";
+ $disabledTexts[$type] = "<div class='TablePager_nav-disabled'>$msgLabel</div>";
}
$links = $this->getPagingLinks( $linkTexts, $disabledTexts );
$s .= Html::openElement( 'tr' ) . "\n";
$width = 100 / count( $links ) . '%';
foreach ( $labels as $type => $label ) {
- $s .= Html::rawElement( 'td', array( 'style' => "width:$width;" ), $links[$type] ) . "\n";
+ // We want every cell to have the same width. We could use table-layout: fixed; in CSS,
+ // but it only works if we specify the width of a cell or the table and we don't want to.
+ // There is no better way. <http://www.w3.org/TR/CSS2/tables.html#fixed-table-layout>
+ $s .= Html::rawElement( 'td',
+ array( 'style' => "width: $width;", 'class' => "TablePager_nav-$type" ),
+ $links[$type] ) . "\n";
}
$s .= Html::closeElement( 'tr' ) . Html::closeElement( 'table' ) . "\n";
return $s;
}
+ /**
+ * ResourceLoader modules that must be loaded to provide correct styling for this pager
+ * @since 1.24
+ * @return string[]
+ */
+ public function getModuleStyles() {
+ return array( 'mediawiki.pager.tablePager' );
+ }
+
/**
* Get a "<select>" element which has options for each of the allowed limits
*
*/
private static function getCachedRevisionObject( $parser, $title = null ) {
static $cache = null;
- if ( !isset( $cache ) ) {
- $cache = new MapCacheLRU( 100 );
+ if ( $cache == null ) {
+ $cache = new MapCacheLRU( 50 );
}
if ( is_null( $title ) ) {
if ( $isTemplate ) {
# Put a T flag in the section identifier, to indicate to extractSections()
# that sections inside <includeonly> should be counted.
- $editlinkArgs = array( $titleText, "T-$sectionIndex"/*, null */ );
+ $editsectionPage = $titleText;
+ $editsectionSection = "T-$sectionIndex";
+ $editsectionContent = null;
} else {
- $editlinkArgs = array(
- $this->mTitle->getPrefixedText(),
- $sectionIndex,
- $headlineHint
- );
+ $editsectionPage = $this->mTitle->getPrefixedText();
+ $editsectionSection = $sectionIndex;
+ $editsectionContent = $headlineHint;
}
// We use a bit of pesudo-xml for editsection markers. The
// language converter is run later on. Using a UNIQ style marker
// important bits of data, but put the headline hint inside a
// content block because the language converter is supposed to
// be able to convert that piece of data.
- $editlink = '<mw:editsection page="' . htmlspecialchars( $editlinkArgs[0] );
- $editlink .= '" section="' . htmlspecialchars( $editlinkArgs[1] ) . '"';
- if ( isset( $editlinkArgs[2] ) ) {
- $editlink .= '>' . $editlinkArgs[2] . '</mw:editsection>';
+ // Gets replaced with html in ParserOutput::getText
+ $editlink = '<mw:editsection page="' . htmlspecialchars( $editsectionPage );
+ $editlink .= '" section="' . htmlspecialchars( $editsectionSection ) . '"';
+ if ( $editsectionContent !== null ) {
+ $editlink .= '>' . $editsectionContent . '</mw:editsection>';
} else {
$editlink .= '/>';
}
wfProfileIn( __METHOD__ );
$text = $this->mText;
if ( $this->mEditSectionTokens ) {
- $text = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
- array( &$this, 'replaceEditSectionLinksCallback' ), $text );
+ $text = preg_replace_callback(
+ ParserOutput::EDITSECTION_REGEX,
+ function ( $m ) {
+ global $wgOut, $wgLang;
+ $editsectionPage = Title::newFromText( htmlspecialchars_decode( $m[1] ) );
+ $editsectionSection = htmlspecialchars_decode( $m[2] );
+ $editsectionContent = isset( $m[4] ) ? $m[3] : null;
+
+ if ( !is_object( $editsectionPage ) ) {
+ throw new MWException( "Bad parser output text." );
+ }
+
+ $skin = $wgOut->getSkin();
+ return call_user_func_array(
+ array( $skin, 'doEditSectionLink' ),
+ array( $editsectionPage, $editsectionSection,
+ $editsectionContent, $wgLang->getCode() )
+ );
+ },
+ $text
+ );
} else {
$text = preg_replace( ParserOutput::EDITSECTION_REGEX, '', $text );
}
return $text;
}
- /**
- * callback used by getText to replace editsection tokens
- * @private
- * @param array $m
- * @throws MWException
- * @return mixed
- */
- public function replaceEditSectionLinksCallback( $m ) {
- global $wgOut, $wgLang;
- $args = array(
- htmlspecialchars_decode( $m[1] ),
- htmlspecialchars_decode( $m[2] ),
- isset( $m[4] ) ? $m[3] : null,
- );
- $args[0] = Title::newFromText( $args[0] );
- if ( !is_object( $args[0] ) ) {
- throw new MWException( "Bad parser output text." );
- }
- $args[] = $wgLang->getCode();
- $skin = $wgOut->getSkin();
- return call_user_func_array( array( $skin, 'doEditSectionLink' ), $args );
- }
-
public function &getLanguageLinks() {
return $this->mLanguageLinks;
}
/**
* Save space for for serialization by removing useless values
+ * @return array
*/
public function __sleep() {
return array_diff(
if ( $arg instanceof PPNode ) {
$arg = $arg->node;
}
- if ( !$xpath ) {
+ if ( !$xpath || $xpath->document !== $arg->ownerDocument ) {
$xpath = new DOMXPath( $arg->ownerDocument );
}
// Pre-fetch blobs
if ( $context->shouldIncludeMessages() ) {
try {
- $blobs = MessageBlobStore::get( $this, $modules, $context->getLanguage() );
+ $blobs = MessageBlobStore::getInstance()->get( $this, $modules, $context->getLanguage() );
} catch ( Exception $e ) {
MWExceptionHandler::logException( $e );
wfDebugLog(
* Returns JS code which calls mw.loader.register with the given
* parameters. Has three calling conventions:
*
- * - ResourceLoader::makeLoaderRegisterScript( $name, $version, $dependencies, $group, $source, $skip ):
- * Register a single module.
+ * - ResourceLoader::makeLoaderRegisterScript( $name, $version,
+ * $dependencies, $group, $source, $skip
+ * ):
+ * Register a single module.
*
* - ResourceLoader::makeLoaderRegisterScript( array( $name1, $name2 ) ):
- * Register modules with the given names.
+ * Register modules with the given names.
*
* - ResourceLoader::makeLoaderRegisterScript( array(
* array( $name1, $version1, $dependencies1, $group1, $source1, $skip1 ),
* @return ResourceLoaderContext
*/
public static function newDummyContext() {
- return new self( new ResourceLoader, new FauxRequest( array() ) );
+ return new self( new ResourceLoader(
+ ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+ ), new FauxRequest( array() ) );
}
/**
if ( $flip ) {
$style = CSSJanus::transform( $style, true, false );
+ } else {
+ $style = CSSJanus::nullTransform( $style );
}
$localDir = dirname( $localPath );
$remoteDir = dirname( $remotePath );
* background-image: url(@url) !ie;
* }
* @endcode
+ * @param array $frame
+ * @param lessc $less
*/
public static function embeddable( $frame, $less ) {
$base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
* background-image: embed('../images/button-bg.png');
* }
* @endcode
+ * @param array $frame
+ * @param lessc $less
+ * @return string
*/
public static function embed( $frame, $less ) {
$base = pathinfo( $less->parser->sourceName, PATHINFO_DIRNAME );
continue;
}
+ if ( $module->isRaw() ) {
+ // Don't register "raw" modules (like 'jquery' and 'mediawiki') client-side because
+ // depending on them is illegal anyway and would only lead to them being reloaded
+ // causing any state to be lost (like jQuery plugins, mw.config etc.)
+ continue;
+ }
+
// getModifiedTime() is supposed to return a UNIX timestamp, but it doesn't always
// seem to do that, and custom implementations might forget. Coerce it to TS_UNIX
$moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) );
$style = implode( "\n", $rules );
if ( $this->getFlip( $context ) ) {
$style = CSSJanus::transform( $style, true, false );
+ } else {
+ $style = CSSJanus::nullTransform( $style );
}
return array( 'all' => $style );
}
return array(
'editToken' => $wgUser->getEditToken(),
- 'patrolToken' => ApiQueryRecentChanges::getPatrolToken( null, null ),
- 'watchToken' => ApiQueryInfo::getWatchToken( null, null ),
+ 'patrolToken' => $wgUser->getEditToken( 'patrol' ),
+ 'watchToken' => $wgUser->getEditToken( 'watch' ),
);
}
# Origin is user-supplied code
protected $origin = self::ORIGIN_USER_SITEWIDE;
- // In-object cache for title mtimes
- protected $titleMtimes = array();
+ // In-object cache for title info
+ protected $titleInfo = array();
/* Abstract Protected Methods */
}
if ( $this->getFlip( $context ) ) {
$style = CSSJanus::transform( $style, true, false );
+ } else {
+ $style = CSSJanus::nullTransform( $style );
}
$style = CSSMin::remap( $style, false, $this->getConfig()->get( 'ScriptPath' ), true );
if ( !isset( $styles[$media] ) ) {
*/
public function getModifiedTime( ResourceLoaderContext $context ) {
$modifiedTime = 1; // wfTimestamp() interprets 0 as "now"
- $mtimes = $this->getTitleMtimes( $context );
- if ( count( $mtimes ) ) {
+ $titleInfo = $this->getTitleInfo( $context );
+ if ( count( $titleInfo ) ) {
+ $mtimes = array_map( function( $value ) {
+ return $value['timestamp'];
+ }, $titleInfo );
$modifiedTime = max( $modifiedTime, max( $mtimes ) );
}
$modifiedTime = max(
* @return bool
*/
public function isKnownEmpty( ResourceLoaderContext $context ) {
- return count( $this->getTitleMtimes( $context ) ) == 0;
+ $titleInfo = $this->getTitleInfo( $context );
+ // Bug 68488: For modules in the "user" group, we should actually
+ // check that the pages are empty (page_len == 0), but for other
+ // groups, just check the pages exist so that we don't end up
+ // caching temporarily-blank pages without the appropriate
+ // <script> or <link> tag.
+ if ( $this->getGroup() !== 'user' ) {
+ return count( $titleInfo ) === 0;
+ }
+
+ foreach ( $titleInfo as $info ) {
+ if ( $info['length'] !== 0 ) {
+ // At least one non-0-lenth page, not empty
+ return false;
+ }
+ }
+
+ // All pages are 0-length, so it's empty
+ return true;
}
/**
* Get the modification times of all titles that would be loaded for
* a given context.
* @param ResourceLoaderContext $context Context object
- * @return array( prefixed DB key => UNIX timestamp ), nonexistent titles are dropped
+ * @return array keyed by page dbkey, with value is an array with 'length' and 'timestamp'
+ * keys, where the timestamp is a unix one
*/
- protected function getTitleMtimes( ResourceLoaderContext $context ) {
+ protected function getTitleInfo( ResourceLoaderContext $context ) {
$dbr = $this->getDB();
if ( !$dbr ) {
// We're dealing with a subclass that doesn't have a DB
}
$hash = $context->getHash();
- if ( isset( $this->titleMtimes[$hash] ) ) {
- return $this->titleMtimes[$hash];
+ if ( isset( $this->titleInfo[$hash] ) ) {
+ return $this->titleInfo[$hash];
}
- $this->titleMtimes[$hash] = array();
+ $this->titleInfo[$hash] = array();
$batch = new LinkBatch;
foreach ( $this->getPages( $context ) as $titleText => $options ) {
$batch->addObj( Title::newFromText( $titleText ) );
if ( !$batch->isEmpty() ) {
$res = $dbr->select( 'page',
- array( 'page_namespace', 'page_title', 'page_touched' ),
+ array( 'page_namespace', 'page_title', 'page_touched', 'page_len' ),
$batch->constructSet( 'page', $dbr ),
__METHOD__
);
foreach ( $res as $row ) {
$title = Title::makeTitle( $row->page_namespace, $row->page_title );
- $this->titleMtimes[$hash][$title->getPrefixedDBkey()] =
- wfTimestamp( TS_UNIX, $row->page_touched );
+ $this->titleInfo[$hash][$title->getPrefixedDBkey()] = array(
+ 'timestamp' => wfTimestamp( TS_UNIX, $row->page_touched ),
+ 'length' => $row->page_len,
+ );
}
}
- return $this->titleMtimes[$hash];
+ return $this->titleInfo[$hash];
}
}
* the target is category or image, leave it
*
* @param array $matches
+ * @return string
*/
function linkReplace( $matches ) {
$colon = strpos( $matches[1], ':' );
* Returns the first few lines of the text
*
* @param string $text
- * @param int $contextlines max number of returned lines
- * @param int $contextchars average number of characters per line
+ * @param int $contextlines Max number of returned lines
+ * @param int $contextchars Average number of characters per line
* @return string
*/
- public function highlightNone( $text, $contextlines, $contextchars) {
+ public function highlightNone( $text, $contextlines, $contextchars ) {
$match = array();
$text = ltrim( $text ) . "\n"; // make sure the preg_match may find the last line
- $text = str_replace( "\n\n", "\n", $text); // remove empty lines
- preg_match( "/^(.*\n){0,$contextlines}/", $text , $match);
+ $text = str_replace( "\n\n", "\n", $text ); // remove empty lines
+ preg_match( "/^(.*\n){0,$contextlines}/", $text, $match );
$text = htmlspecialchars( substr( trim( $match[0] ), 0, $contextlines * $contextchars ) ); // trim and limit to max number of chars
return str_replace( "\n", '<br>', $text );
}
$top = $res->fetchRow();
$top = $top[0];
+ $this->searchTerms = array();
if ( $top === "" ) { ## e.g. if only stopwords are used XXX return something better
$query = "SELECT page_id, page_namespace, page_title, 0 AS score " .
"FROM page p, revision r, pagecontent c WHERE p.page_latest = r.rev_id " .
$titles[] = $this->getTitle()->getTalkPage();
}
+ wfRunHooks( 'SkinPreloadExistence', array( &$titles, $this ) );
+
$lb = new LinkBatch( $titles );
$lb->setCaller( __METHOD__ );
$lb->execute();
* to be, but doing so would change the case of i18n message keys).
* @param string $displayName For backwards-compatibility with old skin loading system. This is
* the text used as skin's human-readable name when the 'skinname-<skin>' message is not
- * available. It should be the same as the skin name provided in $wgExtensionCredits.
+ * available. It should be the same as the skin name provided in $wgExtensionCredits.
* @param callable $callback Callback that takes the skin name as an argument
* @throws InvalidArgumentException If an invalid callback is provided
*/
wfProfileIn( __METHOD__ . '-init' );
$this->initPage( $out );
wfProfileOut( __METHOD__ . '-init' );
- $tpl = $this->prepareQuickTemplate();
+ $tpl = $this->prepareQuickTemplate( $out );
// execute template
wfProfileIn( __METHOD__ . '-execute' );
$res = $tpl->execute();
$this->langcode = $this->table->lang->getCode();
- $out->addHTML( $this->table->buildForm() .
- $this->table->getNavigationBar() .
- $this->table->getBody() .
- $this->table->getNavigationBar() );
+ $out->addHTML( $this->table->buildForm() );
+ $out->addParserOutputContent( $this->table->getFullOutput() );
}
protected function getGroupName() {
$this->mIndexField = 'am_title';
$this->mPage = $page;
$this->mConds = $conds;
- $this->mDefaultDirection = true; // always sort ascending
+ // FIXME: Why does this need to be set to DIR_DESCENDING to produce ascending ordering?
+ $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
$this->mLimitsShown = array( 20, 50, 100, 250, 500, 5000 );
global $wgContLang;
$pager = new BlockListPager( $this, $conds );
if ( $pager->getNumRows() ) {
- $out->addHTML(
- $pager->getNavigationBar() .
- $pager->getBody() .
- $pager->getNavigationBar()
- );
+ $out->addParserOutputContent( $pager->getFullOutput() );
} elseif ( $this->target ) {
$out->addWikiMsg( 'ipblocklist-no-results' );
} else {
function __construct( $page, $conds ) {
$this->page = $page;
$this->conds = $conds;
- $this->mDefaultDirection = true;
+ $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
parent::__construct( $page->getContext() );
}
*
* @ingroup SpecialPage
*/
-class SpecialChangeEmail extends UnlistedSpecialPage {
+class SpecialChangeEmail extends FormSpecialPage {
/**
- * Users password
- * @var string
+ * @var Status
*/
- protected $mPassword;
-
- /**
- * Users new email address
- * @var string
- */
- protected $mNewEmail;
+ private $status;
public function __construct() {
parent::__construct( 'ChangeEmail', 'editmyprivateinfo' );
* @param string $par
*/
function execute( $par ) {
- global $wgAuth;
-
- $this->setHeaders();
- $this->outputHeader();
-
$out = $this->getOutput();
$out->disallowUserJs();
$out->addModules( 'mediawiki.special.changeemail' );
- if ( !$wgAuth->allowPropChange( 'emailaddress' ) ) {
- $this->error( 'cannotchangeemail' );
-
- return;
- }
-
- $user = $this->getUser();
- $request = $this->getRequest();
-
- $this->requireLogin( 'changeemail-no-info' );
+ return parent::execute( $par );
+ }
- if ( $request->wasPosted() && $request->getBool( 'wpCancel' ) ) {
- $this->doReturnTo();
+ protected function checkExecutePermissions( User $user ) {
+ global $wgAuth;
- return;
+ if ( !$wgAuth->allowPropChange( 'emailaddress' ) ) {
+ throw new ErrorPageError( 'changeemail', 'cannotchangeemail' );
}
- $this->checkReadOnly();
- $this->checkPermissions();
+ $this->requireLogin( 'changeemail-no-info' );
// This could also let someone check the current email address, so
// require both permissions.
- if ( !$user->isAllowed( 'viewmyprivateinfo' ) ) {
+ if ( !$this->getUser()->isAllowed( 'viewmyprivateinfo' ) ) {
throw new PermissionsError( 'viewmyprivateinfo' );
}
- $this->mPassword = $request->getVal( 'wpPassword' );
- $this->mNewEmail = $request->getVal( 'wpNewEmail' );
+ parent::checkExecutePermissions( $user );
+ }
- if ( $request->wasPosted()
- && $user->matchEditToken( $request->getVal( 'token' ) )
- ) {
- $info = $this->attemptChange( $user, $this->mPassword, $this->mNewEmail );
- if ( $info === true ) {
- $this->doReturnTo();
- } elseif ( $info === 'eauth' ) {
- # Notify user that a confirmation email has been sent...
- $out->wrapWikiMsg( "<div class='error' style='clear: both;'>\n$1\n</div>",
- 'eauthentsent', $user->getName() );
- $this->doReturnTo( 'soft' ); // just show the link to go back
- return; // skip form
- }
- }
+ protected function getFormFields() {
+ $user = $this->getUser();
- $this->showForm();
- }
+ $fields = array(
+ 'Name' => array(
+ 'type' => 'info',
+ 'label-message' => 'username',
+ 'default' => $user->getName(),
+ ),
+ 'OldEmail' => array(
+ 'type' => 'info',
+ 'label-message' => 'changeemail-oldemail',
+ 'default' => $user->getEmail() ?: $this->msg( 'changeemail-none' )->text(),
+ ),
+ 'NewEmail' => array(
+ 'type' => 'email',
+ 'label-message' => 'changeemail-newemail',
+ ),
+ );
- /**
- * @param string $type
- */
- protected function doReturnTo( $type = 'hard' ) {
- $titleObj = Title::newFromText( $this->getRequest()->getVal( 'returnto' ) );
- if ( !$titleObj instanceof Title ) {
- $titleObj = Title::newMainPage();
- }
- if ( $type == 'hard' ) {
- $this->getOutput()->redirect( $titleObj->getFullURL() );
- } else {
- $this->getOutput()->addReturnTo( $titleObj );
+ if ( $this->getConfig()->get( 'RequirePasswordforEmailChange' ) ) {
+ $fields['Password'] = array(
+ 'type' => 'password',
+ 'label-message' => 'changeemail-password',
+ 'autofocus' => true,
+ );
}
- }
- /**
- * @param string $msg
- */
- protected function error( $msg ) {
- $this->getOutput()->wrapWikiMsg( "<p class='error'>\n$1\n</p>", $msg );
+ return $fields;
}
- protected function showForm() {
- $user = $this->getUser();
+ protected function alterForm( HTMLForm $form ) {
+ $form->setId( 'mw-changeemail-form' );
+ $form->setTableId( 'mw-changeemail-table' );
+ $form->setWrapperLegendMsg( 'changeemail-header' );
+ $form->setSubmitTextMsg( 'changeemail-submit' );
+ $form->addButton( 'wpCancel', $this->msg( 'changeemail-cancel' )->text() );
+ $form->addHiddenField( 'returnto', $this->getRequest()->getVal( 'returnto' ) );
+ }
- $oldEmailText = $user->getEmail()
- ? $user->getEmail()
- : $this->msg( 'changeemail-none' )->text();
-
- $this->getOutput()->addHTML(
- Xml::fieldset( $this->msg( 'changeemail-header' )->text() ) .
- Xml::openElement( 'form',
- array(
- 'method' => 'post',
- 'action' => $this->getPageTitle()->getLocalURL(),
- 'id' => 'mw-changeemail-form' ) ) . "\n" .
- Html::hidden( 'token', $user->getEditToken() ) . "\n" .
- Html::hidden( 'returnto', $this->getRequest()->getVal( 'returnto' ) ) . "\n" .
- $this->msg( 'changeemail-text' )->parseAsBlock() . "\n" .
- Xml::openElement( 'table', array( 'id' => 'mw-changeemail-table' ) ) . "\n"
- );
- $items = array(
- array( 'wpName', 'username', 'text', $user->getName() ),
- array( 'wpOldEmail', 'changeemail-oldemail', 'text', $oldEmailText ),
- array( 'wpNewEmail', 'changeemail-newemail', 'email', $this->mNewEmail ),
- );
- if ( $this->getConfig()->get( 'RequirePasswordforEmailChange' ) ) {
- $items[] = array( 'wpPassword', 'changeemail-password', 'password', $this->mPassword );
+ public function onSubmit( array $data ) {
+ if ( $this->getRequest()->getBool( 'wpCancel' ) ) {
+ $status = Status::newGood( true );
+ } else {
+ $password = isset( $data['Password'] ) ? $data['Password'] : null;
+ $status = $this->attemptChange( $this->getUser(), $password, $data['NewEmail'] );
}
- $this->getOutput()->addHTML(
- $this->pretty( $items ) .
- "\n" .
- "<tr>\n" .
- "<td></td>\n" .
- '<td class="mw-input">' .
- Xml::submitButton( $this->msg( 'changeemail-submit' )->text() ) .
- Xml::submitButton( $this->msg( 'changeemail-cancel' )->text(), array( 'name' => 'wpCancel' ) ) .
- "</td>\n" .
- "</tr>\n" .
- Xml::closeElement( 'table' ) .
- Xml::closeElement( 'form' ) .
- Xml::closeElement( 'fieldset' ) . "\n"
- );
+ $this->status = $status;
+
+ return $status;
}
- /**
- * @param array $fields
- * @return string
- */
- protected function pretty( $fields ) {
- $out = '';
- foreach ( $fields as $list ) {
- list( $name, $label, $type, $value ) = $list;
- if ( $type == 'text' ) {
- $field = htmlspecialchars( $value );
- } else {
- $attribs = array( 'id' => $name );
- if ( $name == 'wpPassword' ) {
- $attribs[] = 'autofocus';
- }
- $field = Html::input( $name, $value, $type, $attribs );
- }
- $out .= "<tr>\n";
- $out .= "\t<td class='mw-label'>";
- if ( $type != 'text' ) {
- $out .= Xml::label( $this->msg( $label )->text(), $name );
- } else {
- $out .= $this->msg( $label )->escaped();
- }
- $out .= "</td>\n";
- $out .= "\t<td class='mw-input'>";
- $out .= $field;
- $out .= "</td>\n";
- $out .= "</tr>";
+ public function onSuccess() {
+ $titleObj = Title::newFromText( $this->getRequest()->getVal( 'returnto' ) );
+ if ( !$titleObj instanceof Title ) {
+ $titleObj = Title::newMainPage();
}
- return $out;
+ if ( $this->status->value === true ) {
+ $this->getOutput()->redirect( $titleObj->getFullURL() );
+ } elseif ( $this->status->value === 'eauth' ) {
+ # Notify user that a confirmation email has been sent...
+ $this->getOutput()->wrapWikiMsg( "<div class='error' style='clear: both;'>\n$1\n</div>",
+ 'eauthentsent', $this->getUser()->getName() );
+ $this->getOutput()->addReturnTo( $titleObj ); // just show the link to go back
+ }
}
/**
* @param User $user
* @param string $pass
* @param string $newaddr
- * @return bool|string True or string on success, false on failure
+ * @return Status
*/
protected function attemptChange( User $user, $pass, $newaddr ) {
global $wgAuth;
if ( $newaddr != '' && !Sanitizer::validateEmail( $newaddr ) ) {
- $this->error( 'invalidemailaddress' );
-
- return false;
+ return Status::newFatal( 'invalidemailaddress' );
}
$throttleCount = LoginForm::incLoginThrottle( $user->getName() );
if ( $throttleCount === true ) {
$lang = $this->getLanguage();
$throttleInfo = $this->getConfig()->get( 'PasswordAttemptThrottle' );
- $this->error( array(
+ return Status::newFatal(
'changeemail-throttled',
$lang->formatDuration( $throttleInfo['seconds'] )
- ) );
-
- return false;
+ );
}
if ( $this->getConfig()->get( 'RequirePasswordforEmailChange' )
&& !$user->checkTemporaryPassword( $pass )
&& !$user->checkPassword( $pass )
) {
- $this->error( 'wrongpassword' );
-
- return false;
+ return Status::newFatal( 'wrongpassword' );
}
if ( $throttleCount ) {
$oldaddr = $user->getEmail();
$status = $user->setEmailWithConfirmation( $newaddr );
if ( !$status->isGood() ) {
- $this->getOutput()->addHTML(
- '<p class="error">' .
- $this->getOutput()->parseInline( $status->getWikiText( 'mailerror' ) ) .
- '</p>' );
-
- return false;
+ return $status;
}
wfRunHooks( 'PrefsEmailAudit', array( $user, $oldaddr, $newaddr ) );
$wgAuth->updateExternalDB( $user );
- return $status->value;
+ return $status;
+ }
+
+ public function requiresUnblock() {
+ return false;
}
protected function getGroupName() {
* @ingroup SpecialPage Pager
*/
class ContribsPager extends ReverseChronologicalPager {
- public $mDefaultDirection = true;
+ public $mDefaultDirection = IndexPager::DIR_DESCENDING;
public $messages;
public $target;
public $namespace = '';
* @ingroup SpecialPage
*/
class DeletedContribsPager extends IndexPager {
- public $mDefaultDirection = true;
+ public $mDefaultDirection = IndexPager::DIR_DESCENDING;
public $messages;
public $target;
public $namespace = '';
$fields = array();
$count = 0;
- foreach ( $this->getWatchlistInfo() as $namespace => $pages ) {
+ // Allow subscribers to manipulate the list of watched pages (or use it
+ // to preload lots of details at once)
+ $watchlistInfo = $this->getWatchlistInfo();
+ wfRunHooks(
+ 'WatchlistEditorBeforeFormRender',
+ array( &$watchlistInfo )
+ );
+
+ foreach ( $watchlistInfo as $namespace => $pages ) {
$options = array();
foreach ( array_keys( $pages ) as $dbkey ) {
private function buildRemoveLine( $title ) {
$link = Linker::link( $title );
- if ( $title->isRedirect() ) {
- // Linker already makes class mw-redirect, so this is redundant
- $link = '<span class="watchlistredir">' . $link . '</span>';
- }
-
- $tools[] = Linker::link( $title->getTalkPage(), $this->msg( 'talkpagelinktext' )->escaped() );
+ $tools['talk'] = Linker::link( $title->getTalkPage(), $this->msg( 'talkpagelinktext' )->escaped() );
if ( $title->exists() ) {
- $tools[] = Linker::linkKnown(
+ $tools['history'] = Linker::linkKnown(
$title,
$this->msg( 'history_short' )->escaped(),
array(),
}
if ( $title->getNamespace() == NS_USER && !$title->isSubpage() ) {
- $tools[] = Linker::linkKnown(
+ $tools['contributions'] = Linker::linkKnown(
SpecialPage::getTitleFor( 'Contributions', $title->getText() ),
$this->msg( 'contributions' )->escaped()
);
wfRunHooks(
'WatchlistEditorBuildRemoveLine',
- array( &$tools, $title, $title->isRedirect(), $this->getSkin() )
+ array( &$tools, $title, $title->isRedirect(), $this->getSkin(), &$link )
);
+ if ( $title->isRedirect() ) {
+ // Linker already makes class mw-redirect, so this is redundant
+ $link = '<span class="watchlistredir">' . $link . '</span>';
+ }
+
return $link . " (" . $this->getLanguage()->pipeList( $tools ) . ")";
}
foreach ( $importSources as $key => $value ) {
if ( is_int( $key ) ) {
$key = $value;
- } else if ( $value !== $key ) {
+ } elseif ( $value !== $key ) {
$needSubprojectField = true;
}
* However this version should be no more expensive then
* Special:MostLinked, which seems to get handled fine
* with however we are doing cached special pages.
+ * @return array
*/
function getQueryInfo() {
return array(
$showAll
);
+ $out = $this->getOutput();
if ( $this->including() ) {
- $html = $pager->getBody();
+ $out->addParserOutputContent( $pager->getBodyOutput() );
} else {
- $form = $pager->getForm();
- $body = $pager->getBody();
- $nav = $pager->getNavigationBar();
- $html = "$form<br />\n$body<br />\n$nav";
+ $out->addHTML( $pager->getForm() );
+ $out->addParserOutputContent( $pager->getFullOutput() );
}
- $this->getOutput()->addHTML( $html );
}
protected function getGroupName() {
if ( !$including ) {
if ( $context->getRequest()->getText( 'sort', 'img_date' ) == 'img_date' ) {
- $this->mDefaultDirection = true;
+ $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
} else {
- $this->mDefaultDirection = false;
+ $this->mDefaultDirection = IndexPager::DIR_ASCENDING;
}
} else {
- $this->mDefaultDirection = true;
+ $this->mDefaultDirection = IndexPager::DIR_DESCENDING;
}
parent::__construct( $context );
* @param int $offset
* @param int $limit
* @param bool $asc
+ * @return array
*/
function reallyDoQuery( $offset, $limit, $asc ) {
$prevTableName = $this->mTableName;
$form = new HTMLForm( $fields, $this->getContext() );
$form->setMethod( 'get' );
+ $form->setTitle( $this->getTitle() );
$form->setId( 'mw-listfiles-form' );
$form->setWrapperLegendMsg( 'listfiles' );
$form->setSubmitTextMsg( 'table_pager_limit_submit' );
$this->editsOnly = $request->getBool( 'editsOnly' );
$this->creationSort = $request->getBool( 'creationSort' );
$this->including = $including;
- $this->mDefaultDirection = $request->getBool( 'desc' );
+ $this->mDefaultDirection = $request->getBool( 'desc' )
+ ? IndexPager::DIR_DESCENDING
+ : IndexPager::DIR_ASCENDING;
$this->requestedUser = '';
* that this report gives results in a logical order). As an aditional
* note, mysql seems to by default order things by img_name ASC, which
* is what we ideally want, so everything works out fine anyhow.
+ * @return array
*/
function getOrderFields() {
return array();
'video',
'message',
'model',
- 'multipart'
+ 'multipart',
+ 'chemical'
);
return in_array( $type, $types );
/** @var array */
public $mConds;
- function __construct( $form, $conds = array(), $source, $dest ) {
+ function __construct( $form, $conds, $source, $dest ) {
$this->mForm = $form;
$this->mConds = $conds;
$this->title = $source;
function getQueryInfo() {
$conds = $this->mConds;
$conds['rev_page'] = $this->articleID;
- $conds[] = "rev_timestamp < {$this->maxTimestamp}";
+ $conds[] = "rev_timestamp < " . $this->mDb->addQuotes( $this->maxTimestamp );
return array(
'tables' => array( 'revision', 'page', 'user' ),
* Show a form for filtering namespace and username
*
* @param string $par
- * @return string
*/
public function execute( $par ) {
$out = $this->getOutput();
/**
*
* @param array $data
+ * @return bool
*/
public function onSubmit( array $data ) {
$title = Title::newFromText( $data['pagename'] );
) );
if ( $pager->getNumRows() ) {
- $this->getOutput()->addHTML(
- $pager->getNavigationBar() .
- $pager->getBody() .
- $pager->getNavigationBar()
- );
+ $this->getOutput()->addParserOutputContent( $pager->getFullOutput() );
} else {
$this->getOutput()->addWikiMsg( 'protectedpagesempty' );
}
}
# Look up
- $c = new Categoryfinder;
- $c->seed( $articles, $cats, $opts['categories_any'] ? 'OR' : 'AND' );
- $match = $c->run();
+ $catFind = new CategoryFinder;
+ $catFind->seed( $articles, $cats, $opts['categories_any'] ? 'OR' : 'AND' );
+ $match = $catFind->run();
# Filter
$newrows = array();
/**
* Display appropriate message if there's nothing to do.
* The submit button is also suppressed in this case (see alterForm()).
+ * @return array
*/
protected function getFormFields() {
$user = $this->getUser();
$squery = $params;
unset( $squery['signature'] );
- $cSig = self::getQuerySignature( $squery ); // correct signature
+ $cSig = self::getQuerySignature( $squery, $this->getConfig()->get( 'SecretKey' ) ); // correct signature
$rSig = $params['signature']; // provided signature
$verified = is_string( $rSig ) && hash_equals( $cSig, $rSig );
/**
* @param array $query
+ * @param string $secretKey
* @return string
*/
- public static function getQuerySignature( array $query ) {
- global $wgSecretKey;
-
+ public static function getQuerySignature( array $query, $secretKey ) {
ksort( $query ); // stable order
- return hash_hmac( 'sha1', wfArrayToCgi( $query ), $wgSecretKey );
+ return hash_hmac( 'sha1', wfArrayToCgi( $query ), $secretKey );
}
}
$this->limit + $this->offset >= $totalRes
);
}
- wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
- } else {
- wfRunHooks( 'SpecialSearchNoResults', array( $term ) );
}
+ wfRunHooks( 'SpecialSearchResults', array( $term, &$titleMatches, &$textMatches ) );
$out->parserOptions()->setEditSection( false );
if ( $titleMatches ) {
const USER_BLOCKED = 11;
const NEED_TOKEN = 12;
const WRONG_TOKEN = 13;
+ const USER_MIGRATED = 14;
/**
* Valid error and warning messages
}
$u = User::newFromName( $this->mUsername );
+
+ // Give extensions a way to indicate the username has been updated,
+ // rather than telling the user the account doesn't exist.
+ if ( !wfRunHooks( 'LoginUserMigrated', array( $u, &$msg ) ) ) {
+ $this->mAbortLoginErrorMsg = $msg;
+ return self::USER_MIGRATED;
+ }
+
if ( !( $u instanceof User ) || !User::isUsableName( $u->getName() ) ) {
return self::ILLEGAL;
}
$this->mainLoginForm( $this->msg( $error,
wfEscapeWikiText( $this->mUsername ) )->text() );
break;
+ case self::USER_MIGRATED:
+ $error = $this->mAbortLoginErrorMsg ?: 'login-migrated-generic';
+ $params = array();
+ if ( is_array( $error ) ) {
+ $error = array_shift( $this->mAbortLoginErrorMsg );
+ $params = $this->mAbortLoginErrorMsg;
+ }
+ $this->mainLoginForm( $this->msg( $error, $params )->text() );
+ break;
default:
throw new MWException( 'Unhandled case value' );
}
$template->set( 'cansecurelogin', ( $wgSecureLogin === true ) );
$template->set( 'stickhttps', (int)$this->mStickHTTPS );
$template->set( 'loggedin', $user->isLoggedIn() );
- $template->set( 'loggedinuser', $user->getName() );
if ( $this->mType == 'signup' ) {
if ( !self::getCreateaccountToken() ) {
// wikimarkup can be used.
$software = array();
$software['[https://www.mediawiki.org/ MediaWiki]'] = self::getVersionLinked();
- $phpKey = wfIsHHVM() ? '[http://hhvm.com/ HHVM]' :
- '[https://php.net/ PHP]';
- $software[$phpKey] = PHP_VERSION . " (" . PHP_SAPI . ")";
+ if ( wfIsHHVM() ) {
+ $software['[http://hhvm.com/ HHVM]'] = HHVM_VERSION . " (" . PHP_SAPI . ")";
+ } else {
+ $software['[https://php.net/ PHP]'] = PHP_VERSION . " (" . PHP_SAPI . ")";
+ }
$software[$dbr->getSoftwareLink()] = $dbr->getServerInfo();
// Allow a hook to add/remove items.
</style>
</head>
<body>
- <img src="<?php echo htmlspecialchars( $path ) ?>skins/common/images/mediawiki.png" alt='The MediaWiki logo' />
+ <img src="<?php echo htmlspecialchars( $path ) ?>assets/mediawiki.png" alt='The MediaWiki logo' />
<h1>MediaWiki <?php echo htmlspecialchars( $wgVersion ) ?></h1>
<div class='error'>
<p>
<?php
if ( $installerStarted ) {
- echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\"> complete the installation</a> and download LocalSettings.php.";
+ echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\">complete the installation</a> and download LocalSettings.php.";
} else {
- echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\"> set up the wiki</a> first.";
+ echo "Please <a href=\"" . htmlspecialchars( $path ) . "mw-config/index." . htmlspecialchars( $ext ) . "\">set up the wiki</a> first.";
}
?>
</p>
<?php } ?>
<div id="userloginForm">
<form name="userlogin" class="mw-ui-vform" method="post" action="<?php $this->text( 'action' ); ?>">
- <?php if ( $this->data['loggedin'] ) { ?>
- <div class="warningbox">
- <?php echo $this->getMsg( 'userlogin-loggedin' )->params( $this->data['loggedinuser'] )->parse(); ?>
- </div>
- <?php } ?>
<section class="mw-form-header">
<?php $this->html( 'header' ); /* extensions such as ConfirmEdit add form HTML here */ ?>
</section>
</div>
<?php if ( $this->haveData( 'createOrLoginHref' ) ) { ?>
- <?php if ( $this->data['loggedin'] ) { ?>
- <div id="mw-createaccount-another">
- <a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button"><?php $this->msg( 'userlogin-createanother' ); ?></a>
- </div>
- <?php } else { ?>
- <div id="mw-createaccount-cta">
- <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
- </div>
- <?php } ?>
+ <div id="mw-createaccount-cta">
+ <?php $this->msg( 'userlogin-noaccount' ); ?><a href="<?php $this->text( 'createOrLoginHref' ); ?>" id="mw-createaccount-join" tabindex="7" class="mw-ui-button mw-ui-progressive"><?php $this->msg( 'userlogin-joinproject' ); ?></a>
+ </div>
<?php } ?>
<?php if ( $this->haveData( 'uselang' ) ) { ?><input type="hidden" name="uselang" value="<?php $this->text( 'uselang' ); ?>" /><?php } ?>
<?php if ( $this->haveData( 'token' ) ) { ?><input type="hidden" name="wpLoginToken" value="<?php $this->text( 'token' ); ?>" /><?php } ?>
}
$this->stash = new UploadStash( $this->repo, $this->user );
}
-
- return true;
}
/**
/**
* Are we running on Windows?
+ * @return bool
*/
protected function isWindows() {
return substr( php_uname(), 0, 7 ) == 'Windows';
/**
* Initialize an initial random state based off of whatever we can find
+ * @return string
*/
protected function initialRandomState() {
// $_SERVER contains a variety of unstable user and system specific information
}
/**
- * @param array $info (UIDGenerator::millitime(), clock sequence)
+ * @param array $info (UIDGenerator::millitime(), counter, clock sequence)
* @return string 88 bits
*/
protected function getTimestampedID88( array $info ) {
/**
* Get the cached separator pattern for ConverterRule::parseRules()
+ * @return string
*/
function getVarSeparatorPattern() {
if ( is_null( $this->mVarSeparatorPattern ) ) {
* Some writing systems require some line-height fixes. This includes
* most Indic scripts, like Devanagari.
* If you are adding support for such a language, add it also to
- * the relevant section in skins/common/shared.css.
+ * the relevant section in shared.css.
*
* @ingroup Language
*/
"recentchanges": "በቅርብ ጊዜ የተለወጡ",
"recentchanges-legend": "የቅርብ ለውጥ አማራጮች፦",
"recentchanges-summary": "በዚሁ ገጽ ላይ በቅርብ ጊዜ የወጡ አዳዲስ ለውጦች ለመከታተል ይችላሉ።",
+ "recentchanges-noresult": "ለዚሁ ጥያቄ በተሰጠው ወቅት ውስጥ አንዳችም ለውጥ አልነበረም።",
"recentchanges-feed-description": "በዚህ ዊኪ ላይ በቅርብ ግዜ የተለወጠውን በዚሁ feed መከታተል ይችላሉ",
"recentchanges-label-newpage": "ይኸው ለውጥ አዲስ ገጽ ፈጠረ።",
"recentchanges-label-minor": "ይህ ለውጥ ጥቃቅን ነው።",
"thumbnail_invalid_params": "ትክክለኛ ያልሆነ የናሙና ግቤት",
"import": "ገጾች ከሌላ ዊኪ ለማስገባት",
"importinterwiki": "ከሌላ ዊኪ ማስገባት",
- "import-interwiki-source": "መነሻ ዊኪ/ገጽ:",
"import-interwiki-history": "ለዚህ ገጽ የታሪክ ዕትሞች ሁሉ ለመቅዳት",
"import-interwiki-submit": "ለማስገባት",
"import-interwiki-namespace": "መድረሻ ክፍለ-ዊኪ:",
"jumptonavigation": "تصفح",
"jumptosearch": "ابحث",
"view-pool-error": "عذرا، الخواديم منهكة حاليا.\nيحاول مستخدمون كثر الوصول إلى هذه الصفحة.\nمن فضلك تمهّل قليلا قبل محاولة الوصول إلى هذه الصفحة مجددا.\n\n$1",
+ "generic-pool-error": "عذرا، الخوادم مشغولة حاليا لوجود مستخدمون كثر يطلبون عرض هذا المورد. انتظر قليلا وأعد المحاولة.",
"pool-timeout": "انتهت مهلة القفل",
"pool-queuefull": "الطابور ملآن",
"pool-errorunknown": "خطأ غير معروف",
"hidetoc": "أخف",
"collapsible-collapse": "أخف",
"collapsible-expand": "أظهر",
+ "confirmable-confirm": "أأنت متأكد{{GENDER:$1||ة}}؟",
+ "confirmable-yes": "نعم",
+ "confirmable-no": "لا",
"thisisdeleted": "عرض أو استرجاع $1؟",
"viewdeleted": "عرض $1؟",
"restorelink": "{{PLURAL:$1|$1 تعديل محذوف|تعديلا واحدا محذوفا|تعديلين محذوفين|$1 تعديلات محذوفة|$1 تعديلا محذوفا|$1 تعديل محذوف}}",
"invalidtitle-knownnamespace": "عنوان غير صالح في النطاق «$2» مع نص «$3»",
"invalidtitle-unknownnamespace": "عنوان غير صالح ذو نطاق غير معروف رقم $1 ونص «$2»",
"exception-nologin": "غير مسجل الدخول",
- "exception-nologin-text": "اÙ\84رجاء [[Special:Userlogin|تسجÙ\8aÙ\84 اÙ\84دخÙ\88Ù\84]] Ù\84تتÙ\85Ù\83Ù\86 Ù\85Ù\86 اÙ\84Ù\88صÙ\88Ù\84 Ù\84Ù\87Ø°Ù\87 اÙ\84صÙ\81ØØ© Ø£Ù\88 أداء Ù\87ذا اÙ\84إجراء.",
+ "exception-nologin-text": "سجÙ\84 اÙ\84دخÙ\88Ù\84 Ù\84Ù\84تÙ\85Ù\83Ù\86 Ù\85Ù\86 عرض Ù\87Ø°Ù\87 اÙ\84صÙ\81ØØ© Ø£Ù\88 إجراء Ù\87ذا اÙ\84Ù\81عÙ\84.",
"exception-nologin-text-manual": "الرجاء $1 لتتمكن من الوصول لهذه الصفحة أو أداء هذا الإجراء.",
"virus-badscanner": "ضبط سيء: ماسح فيروسات غير معروف: ''$1''",
"virus-scanfailed": "فشل المسح (كود $1)",
"userlogin-resetlink": "نسيت تفاصيل الدخول؟",
"userlogin-resetpassword-link": "نسيت كلمة مرورك؟",
"userlogin-helplink2": "المساعدة في الدخول",
- "userlogin-loggedin": "أنت {{GENDER:$1|مسجل|مسجلة}} الدخول مسبقًا باسم $1. {{GENDER:$1|استخدم|استخدمي}} النموذج بالأسفل لتسجيل الدخول بحساب آخر.",
- "userlogin-createanother": "إنشاء حساب آخر",
"createacct-emailrequired": "عنوان البريد الإلكتروني",
"createacct-emailoptional": "البريد الإلكتروني (اختياري)",
"createacct-email-ph": "أدخل عنوان بريدك الإلكتروني",
"parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)",
"language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)",
"node-count-exceeded-category": "تجاوزات تعداد العقد",
- "node-count-exceeded-warning": "تجاوزت هذه الصفحة تعداد العقد",
+ "node-count-exceeded-category-desc": "الصفحة تتجاوز الحد الأقصى للعقد البرمجية.",
+ "node-count-exceeded-warning": "الصفحة تجاوزت الحد الأقصى للعقد البرمجية.",
"expansion-depth-exceeded-category": "تجاوزات عمق التوسيع",
- "expansion-depth-exceeded-category-desc": "هذا تصنيف للصفحات التي تتجاوز عمق التوسيع.",
+ "expansion-depth-exceeded-category-desc": "الصفحة تجاوزت الحد الأقصى لعمق التوسيع.",
"expansion-depth-exceeded-warning": "الصفحة تجاوزت عمق التوسيع",
"parser-unstrip-loop-warning": "حلقة معراة تم الكشف عنها",
"parser-unstrip-recursion-limit": "تعدى حد العودية Unstrip ($1)",
"currentrev": "المراجعة الحالية",
"currentrev-asof": "المراجعة الحالية بتاريخ $1",
"revisionasof": "مراجعة $1",
- "revision-info": "Ù\85راجعة $1 بÙ\88اسطة $2",
+ "revision-info": "Ù\86سخة $1 Ù\84Ù\84Ù\85ستخدÙ\85 {{GENDER:$6|$2}}$7",
"previousrevision": "→ مراجعة أقدم",
"nextrevision": "مراجعة أحدث ←",
"currentrevisionlink": "المراجعة الحالية",
"rev-deleted-event": "(فعل السجل تمت إزالته)",
"rev-deleted-user-contribs": "[اسم المستخدم أو عنوان الأيبي تمت إزالته - التعديل مخفي من المساهمات]",
"rev-deleted-text-permission": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
+ "rev-suppressed-text-permission": "هذه النسخة قد <strong>أخفيت</strong> ([{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} تفاصيل].)",
"rev-deleted-text-unhide": "'''حُذِفت''' مراجعة الصفحة هذه.\nيمكن العثور على تفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].\nمازال بإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
"rev-suppressed-text-unhide": "'''أُخفيت''' مراجعة الصفحة هذه.\nيمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} سجل الإخفاء].\nبإمكانك [$1 رؤية هذه المراجعة] إذا أردت المتابعة.",
"rev-deleted-text-view": "'''حُذِفت''' مراجعة هذه الصفحة.\nيمكنك رؤيتها؛ ويمكنك العثور على التفاصيل في [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} سجل الحذف].",
"revdelete-no-file": "الملف المحدد غير موجود.",
"revdelete-show-file-confirm": "هل أنت متأكد أنك تريد رؤية مراجعة محذوفة للملف \"<nowiki>$1</nowiki>\" بتاريخ $2 الساعة $3؟",
"revdelete-show-file-submit": "نعم",
+ "revdelete-selected-text": "{{PLURAL:$1|نسخة مختارة|نسخ مختارة}} ل[[:$2]]:",
"logdelete-selected": "{{PLURAL:$1|حدث السجل المختار|أحداث السجل المختارة}}:",
"revdelete-text-others": "سيتمكن الإداريون الآخرون على {{SITENAME}} من الوصول إلى المحتوى المخفي وإلغاء حذفه مجددا من خلال ذات الواجهة ما لم تطبق قيود إضافية.",
"revdelete-confirm": "الإداريون الآخرون في {{SITENAME}} سيظل بإمكانهم رؤية المحتوى المخفي ويمكنهم استرجاعه مجددا من خلال هذه الواجهة نفسها، مالم يتم وضع قيود إضافية.\nمن فضلك أكد أنك تنوي فعل هذا، وأنك تفهم العواقب، وأنك تفعل هذا بالتوافق مع [[{{MediaWiki:Policy-url}}|السياسة]].",
"searchrelated": "مرتبطة",
"searchall": "الكل",
"showingresults": "معروض بالأسفل {{PLURAL:$1|'''1''' نتيجة|'''$1''' نتيجة}} بدءا من رقم '''$2'''.",
- "showingresultsinrange": "معروض بالأسفل حتى {{PLURAL:$1|<strong>1</strong> نتيجة|<strong>$1</strong> نتائج}} في النطاق #<strong>$2</strong> إلى #<strong>$3</strong>.",
+ "showingresultsinrange": "بالأسفل {{PLURAL:$1|نتيجة واحدة|<strong>$1</strong> نتائج|<strong>$1</strong> نتيجة}} في النطاق من <strong>$2</strong> إلى <strong>$3</strong>.",
"showingresultsheader": "{{PLURAL:$5|النتيجة '''$1''' من'''$3'''|النتائج '''$1 - $2''' من'''$3'''}} ل'''$4'''",
"search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
"powersearch-legend": "بحث متقدم",
"prefs-files": "ملفات",
"prefs-custom-css": "CSS مخصص",
"prefs-custom-js": "جافاسكربت مخصص",
- "prefs-common-css-js": "CSS أو جافاسكربت مشتركة لجميع المظاهر:",
+ "prefs-common-css-js": "سي إس إس وجافاسكربت مشترك لجميع المظاهر:",
"prefs-reset-intro": "يمكنك استخدام هذه الصفحة لإعادة تفضيلاتك للحالة الافتراضية للموقع.\nلن تستطيع استرجاع الحالة السابقة.",
"prefs-emailconfirm-label": "تأكيد البريد الإلكتروني:",
"youremail": "البريد:",
"contribsub2": "ل{{GENDER:$3|$1}} ($2)",
"contributions-userdoesnotexist": "حساب المستخدم \"$1\" غير مسجل.",
"nocontribs": "لم يتم العثور على تغييرات تطابق هذه المحددات.",
- "uctop": "حالي",
+ "uctop": "(حالية)",
"month": "من شهر (وأقدم):",
"year": "من سنة (وأقدم):",
"sp-contributions-newbies": "اعرض مساهمات الحسابات الجديدة فقط",
"movepagetalktext": "صفحة النقاش المرفقة سيتم نقلها كذلك، '''إلا في حالة''':\n* توجد صفحة نقاش غير فارغة تحت العنوان الجديد، أو\n* قمت بإزالة اختيار الصندوق بالأسفل.\n\nوفي هذه الحالات، يجب عليك نقل أو دمج محتويات الصفحة يدويا، إذا رغب في ذلك.",
"movearticle": "انقل الصفحة:",
"moveuserpage-warning": "'''تحذير: أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم لن يعاد تسميته.'''",
- "movecategorypage-warning": "أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ لن تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.",
+ "movecategorypage-warning": "<strong>تحذير:</strong> أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ <em>لن</em> تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.",
"movenologintext": "يجب أن تكون مستخدماً مسجلاً وأن [[Special:UserLogin|تسجل دخولك]] لكي تنقل صفحة.",
"movenotallowed": "أنت لا تمتلك الصلاحية لنقل الصفحات.",
"movenotallowedfile": "أنت لا تمتلك الصلاحية لنقل الملفات.",
"duration-centuries": "{{PLURAL:$1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}",
"duration-millennia": "{{PLURAL:$1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}",
"rotate-comment": "تدوير الصورة {{PLURAL:$1||درجة واحدة|درجتان|$1 درجات|$1 درجة}} باتجاه عقارب الساعة",
- "limitreport-title": "محلل سمات البيانات:",
+ "limitreport-title": "بيانات تحليلية",
"limitreport-cputime": "زمن المعالجة المستغرق",
"limitreport-cputime-value": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}",
"limitreport-walltime": "الزمن الحقيقي المستغرق",
"limitreport-walltime-value": "{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوان|$1 ثانية}}",
- "limitreport-ppvisitednodes": "زار اÙ\84Ù\85عاÙ\84ج عÙ\82دة Ø¥Øصاء",
- "limitreport-ppgeneratednodes": "Ø£Øدث اÙ\84Ù\85عاÙ\84ج عÙ\82دة Ø¥Øصاء",
- "limitreport-postexpandincludesize": "بعد تÙ\88سÙ\8aع اÙ\84Ù\85ساØØ© اÙ\84شاÙ\85Ù\84Ø©",
+ "limitreport-ppvisitednodes": "عدد اÙ\84عÙ\82د اÙ\84Ù\85عاÙ\84جة",
+ "limitreport-ppgeneratednodes": "عÙ\82د زارÙ\87ا اÙ\84Ù\85عاÙ\84ج اÙ\84Ù\85سبÙ\82",
+ "limitreport-postexpandincludesize": "ØجÙ\85 تضÙ\85Ù\8aÙ\86 اÙ\84تÙ\88سÙ\8aعات",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بايت}}",
- "limitreport-templateargumentsize": "ØجÙ\85 Ù\86Ù\82اش اÙ\84Ù\82الب",
+ "limitreport-templateargumentsize": "ØجÙ\85 Ù\85عطÙ\8aات اÙ\84Ù\82Ù\88الب",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بايت}}",
- "limitreport-expansiondepth": "أكثر عمق توسعي",
- "limitreport-expensivefunctioncount": "تØÙ\84Ù\8aÙ\84 Ø¥Øصاء Ù\88ظÙ\8aÙ\81Ø© Ù\85Ù\83Ù\84Ù\81",
- "expandtemplates": "فرد القوالب",
+ "limitreport-expansiondepth": "أعمق التوسيعات",
+ "limitreport-expensivefunctioncount": "دÙ\88اÙ\84 Ù\85ØÙ\84Ù\84Ø© Ù\85Ù\83Ù\84Ù\81Ø©",
+ "expandtemplates": "توسعة قالب",
"expand_templates_intro": "تتعامل هذه الصفحة الخاصة مع نصوص الويكي وتقوم بفرد كل القوالب الموجودة به.\nوتقوم أيضا بفرد دوال القوالب مثل\n<code><nowiki>{{</nowiki>#language:…}}</code> and variables like <code><nowiki>{{</nowiki>CURRENTDAY}}</code>. حقيقةً، تقوم التعامل مع كل ما بين الأقواس المزدوجة.",
"expand_templates_title": "عنوان صفحة هذا النص، لأجل معالجة {{FULLPAGENAME}} إلخ.:",
"expand_templates_input": "النص المدخل:",
"tog-editsectiononrightclick": "অনুচ্ছেদৰ শিৰোনামাত ৰাইট্ ক্লিক টিপি সম্পাদনা কৰাটো সক্ৰিয় কৰক",
"tog-watchcreations": "মই সৃষ্টি সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
"tog-watchdefault": "মই সম্পাদনা কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
- "tog-watchmoves": "মই স্থানান্তৰ কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
+ "tog-watchmoves": "মà¦\87 সà§\8dথানানà§\8dতৰ à¦\95ৰা সà¦\95লà§\8b পà§\83ষà§\8dঠা à¦\86ৰà§\81 ফাà¦\87ল মà§\8bৰ লà¦\95à§\8dষà§\8dয-তালিà¦\95াত যà§\8bà¦\97 à¦\95ৰà¦\95",
"tog-watchdeletion": "মই বিলোপ কৰা সকলো পৃষ্ঠা মোৰ লক্ষ্য-তালিকাত যোগ কৰক",
"tog-minordefault": "সকলো সম্পাদনা অগুৰুত্বপূৰ্ণ বুলি নিজে নিজে চিহ্নিত কৰক",
"tog-previewontop": "সম্পাদনা বাকছৰ ওপৰত খচৰা দেখুৱাওক",
"hidetoc": "দেখুৱাব নালাগে",
"collapsible-collapse": "সংকোচন",
"collapsible-expand": "বহলাওক",
+ "confirmable-yes": "হয়",
+ "confirmable-no": "নহয়",
"thisisdeleted": "$1 চাওক বা সলনি কৰক?",
"viewdeleted": "$1 চাওক?",
"restorelink": "{{PLURAL:$1| এটা বিলুপ্ত সম্পাদনা|$1 টা বিলুপ্ত সম্পাদনা}}",
"invalidtitle-knownnamespace": "নামস্থান \"$2\" আৰু পাঠ্য \"$3\" থকা অবৈধ শিৰোনাম",
"invalidtitle-unknownnamespace": "অজ্ঞাত নামস্থান সংখ্যা $1 আৰু পাঠ্য \"$2\" থকা অবৈধ শিৰোনাম",
"exception-nologin": "প্ৰৱেশ কৰা নাই",
- "exception-nologin-text": "এই কামৰ বাবে আপুনি [[Special:Userlogin|লগ্ ইন]] কৰাটো বাধ্যতামূলক।",
+ "exception-nologin-text": "এই কামৰ বাবে আপুনি লগ্ ইন কৰাটো বাধ্যতামূলক।",
"exception-nologin-text-manual": "এই কামৰ বাবে অনুগ্ৰহ কৰি $1 কৰক।",
"virus-badscanner": "ভুল কনফিগাৰেচন: অজ্ঞাত ভাইৰাছ স্কেনাৰ: ''$1''",
"virus-scanfailed": "স্কেন অসফল (কোড $1)",
"userlogin-resetlink": "আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?",
"userlogin-resetpassword-link": "আপোনাৰ গুপ্তশব্দ পাহৰিছে?",
"userlogin-helplink2": "প্ৰৱেশ সংক্ৰান্তীয় সাহায্য",
- "userlogin-loggedin": "আপুনি ইতিমধ্যে {{GENDER:$1|$1}} হিচাপে প্ৰৱেশ কৰিছে। তলৰ আন সদস্যৰূপে প্ৰৱেশ কৰিবলৈ তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক।",
- "userlogin-createanother": "আন এটা একাউণ্ট সৃষ্টি কৰক",
"createacct-emailrequired": "ই-মেইল ঠিকনা",
"createacct-emailoptional": "ই-মেইল ঠিকনা (বৈকল্পিক)",
"createacct-email-ph": "আপোনাৰ ই-মেইল ঠিকনা লিখক",
"noemail": "\"$1\" সদস্যজনৰ কোনো ই-মেইল ঠিকনা সঞ্চিত কৰা নাই।",
"noemailcreate": "আপুনি এটা সঠিক ই-মেইল ঠিকনা দিব লাগিব",
"passwordsent": "\"$1\" ৰ ই-মেইল ঠিকনাত নতুন গুপ্তশব্দ এটা পঠোৱা হৈছে। অনুগ্ৰহ কৰি সেয়া পোৱাৰ পাছত পুনৰ প্ৰৱেশ কৰক।",
- "blocked-mailpassword": "à¦\86পà§\8bনাৰ à¦\86à¦\87পি ঠিà¦\95নাৰ পৰা সমà§\8dপাদনা à¦\95ৰা বাৰণ à¦\95ৰা হà§\88à¦\9bà§\87, à¦\8fনà§\87 à¦\85ৱসà§\8dথাত দà§\81ৰà§\8dবà§\8dযৱহাৰ ৰà§\8bধ à¦\95ৰিবলà§\88 à¦\97à§\81পà§\8dতশবà§\8dদ পà§\81নà¦\83à¦\89দà§\8dধাৰ à¦\95ৰা সà§\81বিধাতà§\8b বাতিল কৰা হৈছে।",
+ "blocked-mailpassword": "à¦\86পà§\8bনাৰ à¦\86à¦\87পি ঠিà¦\95নাৰ পৰা সমà§\8dপাদনা à¦\95ৰা বাৰণ à¦\95ৰা হà§\88à¦\9bà§\87, à¦\8fনà§\87 à¦\85ৱসà§\8dথাত দà§\81ৰà§\8dবà§\8dযৱহাৰ ৰà§\8bধ à¦\95ৰিবলà§\88 à¦\97à§\81পà§\8dতশবà§\8dদ পà§\81নà¦\83à¦\89দà§\8dধাৰ à¦\95ৰা সà§\81বিধাà¦\93 বাতিল কৰা হৈছে।",
"eauthentsent": "সঞ্চিত ই-মেইল ঠিকনালৈ নিশ্চিতকৰণ ই-মেইল এখন পঠিওৱা হৈছে।\nএকাউণ্টটোলৈ আন ই-মেইল পঠিওৱাৰ আগতে আপোনাৰ সদস্যতা নিশ্চিত কৰিবলৈ সেই ই-মেইলত দিয়া নিৰ্দেশনা আপুনি অনু্সৰণ কৰিব লাগিব।",
"throttled-mailpassword": "যোৱা {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এখন গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হৈছে।\nঅবৈধ ব্যৱহাৰ ৰোধ কৰিবলৈ প্ৰতি {{PLURAL:$1|এঘণ্টাত|$1 ঘণ্টাত}} এবাৰহে গুপ্তশব্দ উদ্ধাৰ ইমেইল পঠিওৱা হ'ব।",
"mailerror": "ই-মেইল পঠিওৱাত সমস্যা হৈছে: $1",
"login-throttled": "আপুনি সম্প্ৰতি অজস্ৰবাৰ লগ্-ইনৰ প্ৰয়াস কৰিছে ।\nঅনুগ্ৰহ কৰি $1 সময়ৰ পিছত আকৌ চেষ্টা কৰক ।",
"login-abort-generic": "আপোনাৰ প্ৰৱেশ অসফল হৈছে- বাতিল কৰা হ’ল",
"loginlanguagelabel": "ভাষা: $1",
- "suspicious-userlogout": "আপোনাৰ প্ৰস্থানৰ অনুৰোধ বাতিল কৰা হৈছে কাৰণ হয়তো আপোনাৰ ব্ৰাউজাৰ অসম্পূৰ্ণ নতুবা পূৰ্বৱতী তথ্য পঠাইছে ।",
+ "suspicious-userlogout": "à¦\86পà§\8bনাৰ পà§\8dৰসà§\8dথানৰ à¦\85নà§\81ৰà§\8bধ বাতিল à¦\95ৰা হà§\88à¦\9bà§\87 à¦\95াৰণ হয়তà§\8b à¦\86পà§\8bনাৰ বà§\8dৰাà¦\89à¦\9cাৰ à¦\85সমà§\8dপà§\82ৰà§\8dণ নতà§\81বা পà§\82ৰà§\8dবৱতà§\80 তথà§\8dয পঠিয়াà¦\87à¦\9bà§\87 ।",
"createacct-another-realname-tip": "প্ৰকৃত নাম দিয়াটো বৈকল্পিক।\nআপুনি নামটো দিলে সেইটো আপোনাৰ বৰঙণিসমূহৰ বাবে স্বীকৃতি প্ৰদানত ব্যৱহাৰ কৰা হ'ব।",
"pt-login": "প্ৰৱেশ",
"pt-login-button": "প্ৰৱেশ",
"preview": "খচৰা",
"showpreview": "খচৰা চাওক",
"showdiff": "সালসলনিবোৰ দেখুৱাওক",
+ "blankarticle": "<strong>Warning:</strong>আপুনি সৃষ্টি কৰি থকা পৃষ্ঠাটো খালি।\nযদি আপুনি \"{{int:savearticle}}\" বুটামটোত আকৌ ক্লিক কৰে তেন্তে বিষয়বস্তু অবিহনেই পৃষ্ঠাটো সৃষ্টি হ'ব।",
"anoneditwarning": "<span style=\"color:red;\">'''সাৱধান:''' আপুনি প্ৰৱেশ কৰা নাই ।</span> \nএই পৃষ্ঠাৰ ইতিহাসত আপোনাৰ আই পি ঠিকনা সংৰক্ষিত কৰা হ'ব।",
"anonpreviewwarning": "''আপুনি প্ৰৱেশ কৰা নাই। আপোনাৰ সম্পাদনা সাঁচিলে আপোনাৰ আই-পি ঠিকনা এই পৃষ্ঠাৰ ইতিহাসত সংৰক্ষিত হ'ব।\"",
"missingsummary": "'''স্মাৰক:''' আপুনি সম্পাদনা সাৰাংশ দিয়া নাই।\nআপুনি আৰু এবাৰ সংৰক্ষণৰ বাবে ক্লিক কৰিলে সাৰাংশৰ অবিহনে সংৰক্ষিত হব।",
"summary-preview": "সাৰাংশৰ খচৰা:",
"subject-preview": "বিষয়/শিৰোনামাৰ খচৰা:",
"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এই বিষয়ে হোৱা আলোচনাত ইয়াৰ সবিশেষ সদৰী কৰে যেন।",
+ "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এই বিষয়ে হোৱা আলোচনাত ইয়াৰ সবিশেষ সদৰী কৰে যেন।",
"autoblockedtext": "আপোনাৰ আই-পি ঠিকনা নিজে নিজে অৱৰোধিত হৈছে, কাৰণ ইয়াক কোনোবাই ব্যৱহাৰ কৰি থাকোতে $1ৰ দ্বাৰা অৱৰোধ কৰা হৈছে।\nইয়াৰ বাবে দিয়া কাৰণ হৈছে:\n\n:''$2''\n\n* অৱৰোধ আৰম্ভণি: $8\n* অৱৰোধ সমাপ্তি: $6\n* অৱৰোধ কৰা হৈছে: $7\n\nআপুনি এই অবৰোধৰ বিষয়ে আলোচনা কৰিবলৈ $1 বা [[{{MediaWiki:Grouppage-sysop}}|প্ৰশাসক]]ৰ লগত সম্পৰ্ক স্থাপন কৰিব পাৰে ।\n\nআপুনি যেতিয়ালৈ [[Special:Preferences|সদস্য পছন্দ]] পৃষ্ঠাত আপোনাৰ ই-মেইল ঠিকনা নিদিয়ে তেতিয়ালৈ ’সদস্যক ই-মেইল পঠাওক’ সুবিধাতো ব্যৱহাৰ কৰিব নোৱাৰে। আপোনাক এয়া কৰিবলৈ ৰোধ কৰা হোৱা নাই ।\nআপোনাৰ এতিয়াৰ আই পি ঠিকনা হৈছে $3, আৰু আপোনাৰ অৱৰোধ ক্ৰমিক হৈছে $5 ।\nএই বিষয়ে হোৱা আলোচনাত ইয়াক ব্যৱহাৰ কৰিবলৈ অনুৰোধ কৰা হ’ল।",
"blockednoreason": "কাৰণ দিয়া নাই",
"whitelistedittext": "সম্পাদনা কৰিবলৈ $1 কৰক ।",
"missing-revision": "\"{{FULLPAGENAME}}\" নামৰ পৃষ্ঠাৰ #$1 সংশোধনৰ অস্তিত্ব নাই।\n\nসাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন ল'গ]ত অধিক তথ্য পাব।",
"userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" নামৰ সদস্য একাউন্ট নিবন্ধিত নহয় ।\nঅনুগ্ৰহ কৰি চাওক আপুনি এই পৃষ্ঠা সৃষ্টি/সম্পাদনা কৰিব বিচাৰিছে নেকি ।",
"userpage-userdoesnotexist-view": "সদস্য একাউন্ট ''$1'' পঞ্জীভূত নহয়",
- "blocked-notice-logextract": "বৰ্তমানে এই সদস্যক বাৰণ কৰা হৈছে ।\nপ্ৰসংগক্ৰমে সাম্প্ৰতিক বাৰণ সূচী তলত দিয়া হ'ল ।",
+ "blocked-notice-logextract": "বৰ্তমানে এই সদস্যক বাৰণ কৰা হৈছে।\nআপোনাৰ সুবিধাৰ্থে সাম্প্ৰতিক বাৰণ সূচী তলত দিয়া হ'ল ।",
"clearyourcache": "'''টোকা:''' সাঁচি ৰখাৰ পিছত পৰিৱৰ্তনখিনি চাবৰ বাবে আপুনি আপোনাৰ ব্ৰাউজাৰৰ কেচ্ (cache) অগ্ৰাহ্য কৰিব লগা হ’ব পাৰে।\n* '''Firefox / Safari: ''' ''Shift'' ধৰি ৰাখি ''Reload'' ক্লিক কৰক, নাইবা ''Ctrl-F5'' বা ''Ctrl-R'' টিপক (এপল মেকৰ বাবে ''⌘-R'')\n* '''Google Chrome:''' ''Ctrl-Shift-R'' টিপক (এপল মেকৰ বাবে ''⌘-Shift-R'' )\n* '''Internet Explorer:''' ''Ctrl'' ধৰি ৰাখি ''Refresh'' ক্লিক কৰক, অথবা ''Ctrl-F5'' টিপক\n* '''Opera:''' ''Tools→Preferences'' ত গৈ কেচ্ মচি পেলাওক",
"usercssyoucanpreview": "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন CSS পৰীক্ষা কৰক ।",
"userjsyoucanpreview": "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন জাভালিপি পৰীক্ষা কৰক ।",
"permissionserrorstext": "আপোনাৰ এই কামটো কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
"permissionserrorstext-withaction": "আপোনাৰ $2 কৰিবলৈ অনুমতি নাই, যাৰ {{PLURAL:$1|কাৰণ|কাৰণসমূহ}} হ'ল:",
"recreate-moveddeleted-warn": "'''সাৱধান: আগতে বিলোপ কৰা পৃষ্ঠা এটা আপুনি পুনঃনিৰ্মাণ কৰি আছে। '''\n\nএই পৃষ্ঠাটো সম্পাদনা কৰা উচিত হব নে নহয় আপুনি বিবেচনা কৰি চাওক।\nএই পৃষ্ঠাটো বিলোপ আৰু স্থানান্তৰ কৰাৰ অভিলেখ আপোনাৰ সুবিধাৰ্থে ইয়াত দিয়া হৈছে।",
- "moveddeleted-notice": "à¦\8fà¦\87 পà§\83ষà§\8dঠা বাতিল à¦\95ৰা হà§\88à¦\9bà§\87 ।\nপà§\83ষà§\8dঠাà¦\9fিৰ বাতিল à¦\86ৰà§\81 সà§\8dথানানà§\8dতৰ à¦\95ৰা à¦\85à¦à¦¿à¦²à§\87à¦\96 তলত দিয়া হ'ল ।",
+ "moveddeleted-notice": "à¦\8fà¦\87 পà§\83ষà§\8dঠা বিলà§\8bপ à¦\95ৰা হà§\88à¦\9bà§\87।\nপà§\83ষà§\8dঠাৰ বিলà§\8bপ à¦\86ৰà§\81 সà§\8dথানানà§\8dতৰণ à¦\85à¦à¦¿à¦²à§\87à¦\96 তলত দিয়া হ'ল।",
"log-fulllog": "সম্পূৰ্ণ অভিলেখ চাওক",
"edit-hook-aborted": "হুকৰ দ্বাৰা সম্পাদনা প্ৰত্যাখ্যান কৰা হৈছে।\nইয়াৰ কোনো ব্যাখ্যা নাই।",
- "edit-gone-missing": "পà§\83ষà§\8dঠাà¦\9fà§\8b নবà§\80à¦\95ৰণ à¦\95ৰিব পৰা নà¦\97â\80\99ল।\nসমà§\8dà¦à§±à¦¤à¦\83 পà§\83ষà§\8dঠাà¦\96ন বিলোপ কৰা হৈছে।",
+ "edit-gone-missing": "পà§\83ষà§\8dঠাà¦\9fà§\8b নবà§\80à¦\95ৰণ à¦\95ৰিব পৰা নà¦\97â\80\99ল।\nসমà§\8dà¦à§±à¦¤à¦\83 পà§\83ষà§\8dঠাà¦\9fà§\8b বিলোপ কৰা হৈছে।",
"edit-conflict": "সম্পাদনা দ্বন্দ্ব।",
"edit-no-change": "আপোনাৰ সম্পাদনা আওকাণ কৰা হৈছে, কাৰণ লেখাত কোনো তফাৎ নাই।",
"postedit-confirmation-created": "পৃষ্ঠাটো সৃষ্টি কৰা হৈছে।",
"parser-template-recursion-depth-warning": "সাঁচৰ পুনৰাবৃত্তি গভীৰতা সীমা ($1) তকৈ অধিক হৈছে",
"language-converter-depth-warning": "ভাষা পৰিৱৰ্তকৰ গভীৰতা সীমাই ($1) অতিক্ৰম কৰিছে",
"node-count-exceeded-category": "ন'ড-গণনা বেছি হোৱা পৃষ্ঠাসমূহ",
- "node-count-exceeded-warning": "পৃষ্ঠাৰ ন'ড-গণনা বেছি হৈছে",
+ "node-count-exceeded-category-desc": "এই পৃষ্ঠাই সৰ্বোচ্চ ন'ড কাউণ্ট সীমা অতিক্ৰম কৰিছে।",
+ "node-count-exceeded-warning": "পৃষ্ঠাৰ ন'ড গণনা বেছি হৈছে",
"expansion-depth-exceeded-category": "বিস্তৃতি গভীৰতা বেছি হোৱা পৃষ্ঠা",
"expansion-depth-exceeded-warning": "পৃষ্ঠাটোৰ বিস্তৃতি গভীৰতা বেছি হৈছে",
"parser-unstrip-loop-warning": "আন্ষ্ট্ৰীপ লুপ চিনাক্ত কৰা হৈছে",
"converter-manual-rule-error": "মেনুৱেল ভাষা পৰিৱৰ্তন নিয়মত ত্ৰুটি পোৱা গৈছে",
"undo-success": "এই সম্পাদনা পূৰ্ববৎ কৰিব পাৰি ।\nঅনুগ্ৰহ কৰি তলৰ তুলনাটি পৰীক্ষা কৰি ঠাৱৰ কৰক যে আপুনি এনে কৰিব বিচাৰিছে, আৰু তলত সালসলনিসমূহ সাঁচি এই কাৰ্য্য সম্পন্ন কৰক ।",
"undo-failure": "এই সম্পাদনা মধ্যৱৰ্তী সম্পাদনাসমূহৰ দ্বন্দৰ কাৰণে পূৰ্ববৎ কৰা নহ'ব ।",
- "undo-norev": "à¦\8fà¦\87 সমà§\8dপাদনাà¦\9fি ৰদ à¦\95ৰিব নà§\8bৱাৰি, à¦\95াৰণ à¦\87 à¦\86ৰà§\81 নাà¦\87 বা à¦\87য়াà¦\95 বাতিল à¦\95ৰা হ'ল ।",
+ "undo-norev": "à¦\8fà¦\87 সমà§\8dপাদনাà¦\9fà§\8b ৰদ à¦\95ৰিব নà§\8bৱাৰি, à¦\95াৰণ à¦\8fà¦\87à¦\9fà§\8b à¦\86ৰà§\81 নাà¦\87 বা à¦\87য়াà¦\95 বিলà§\8bপ à¦\95ৰা হ'ল।",
"undo-nochange": "সম্পাদনাটো ইতিমধ্যেই বাতিল কৰা হৈছে।",
"undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলোচনা]]) সম্পাদিত $1 সংশোধনটি বাতিল কৰক",
"undo-summary-username-hidden": "এজন গোপন ব্যৱহাৰকাৰীয়ে কৰা $1 সংশোধন বাতিল কৰক",
"rev-deleted-user-contribs": "[সদস্যনাম বা আই-পি ঠিকনা আঁতৰোৱা হ'ল - সম্পাদনা বৰঙনিসমূহৰ পৰা আঁৰ কৰা হৈছে]",
"rev-deleted-text-permission": "পৃষ্ঠাৰ এই সংশোধনটি '''বিলোপ''' কৰা হ'ল ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অবলুপ্তি অভিলেখত]",
"rev-deleted-text-unhide": "পৃষ্ঠাখনৰ এই সংশোধনটো '''বিলোপ''' কৰা হৈছে | \nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অৱলুপ্তি অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
- "rev-suppressed-text-unhide": "পà§\83ষà§\8dঠাà¦\96নৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
+ "rev-suppressed-text-unhide": "পà§\83ষà§\8dঠাà¦\9fà§\8bৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।\nআপুনি মন কৰিলে [$1 এই সংশোধনটো চাব পাৰে]।",
"rev-deleted-text-view": "পৃষ্ঠাৰ এই সংশোধনটো '''বিলোপ''' কৰা হ'ল ।\nআপুনি এইটো চাব পাৰে; সবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অবলুপ্তি অভিলেখত]।",
"rev-suppressed-text-view": "পৃষ্ঠাৰ এই সংশোধনটো '''নিবাৰণ''' কৰা হ’ল।\nআপুনি এইটো চাব পাৰে; সবিশেষ পাব [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} নিবাৰণ অভিলেখত]।",
"rev-deleted-no-diff": "আপুনি এই পাৰ্থক্য চাব নোৱাৰে কাৰণ এটা সংস্কৰণ '''বিলোপ''' কৰা হৈছে ।\nসবিশেষ পাব [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অৱলুপ্তি অভিলেখত]।",
"action-patrol": "আনৰ সম্পাদনা পৰীক্ষিত বুলি চিহ্নিত কৰক",
"action-autopatrol": "আপোনাৰ সম্পাদনা পৰীক্ষিত বুলি চিহ্নিত কৰক",
"action-unwatchedpages": "নিৰীক্ষণ নকৰা পৃষ্ঠাসমূহৰ তালিকা চাওক",
- "action-mergehistory": "à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\96নৰ ইতিহাস একত্ৰিত কৰক",
+ "action-mergehistory": "à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\9fà§\8bৰ ইতিহাস একত্ৰিত কৰক",
"action-userrights": "সকলো সদস্য অধিকাৰ সম্পাদনা কৰক",
"action-userrights-interwiki": "আন ৱিকিৰ সদস্যৰ অধিকাৰসমূহ সম্পাদনা কৰক",
"action-siteadmin": "তথ্যকোষ বন্ধ কৰক বা খোলক",
"license": "অনুজ্ঞাপত্ৰ:",
"license-header": "অনুজ্ঞাপত্ৰ",
"nolicense": "একো বাছনি কৰা নাই",
+ "licenses-edit": "অনুজ্ঞাপত্ৰ বিকল্পসমূহ সম্পাদনা কৰক",
"license-nopreview": "(প্ৰাকদৰ্শন উপলব্ধ নহয়)",
"upload_source_url": "(এটা বৈধ, ৰাজহুৱাকৈ উন্মুক্ত URL)",
"upload_source_file": "(আপোনাৰ কম্পিউটাৰৰ এটা ফাইল)",
"download": "ডাউনল’ড কৰক",
"unwatchedpages": "চকু নৰখা পৃষ্ঠাসমূহ",
"listredirects": "পুননিৰ্দেশনাৰ তালিকা",
+ "listduplicatedfiles": "প্ৰতিলিপি থকা ফাইলসমূহৰ তালিকা",
+ "listduplicatedfiles-summary": "এই তালিকাখনত থকা ফাইলবোৰৰ শেহতীয়া সংস্কৰণ আন কোনো ফাইলৰ শেহতীয়া সংস্কৰণৰ প্ৰতিলিপি। কেৱল স্থানীয় ফাইলবোৰহে গণ্য কৰা হৈছে।",
"unusedtemplates": "অব্যৱহৃত সাঁচসমূহ",
"unusedtemplatestext": "অন্য কোনো পৃষ্ঠাত নথকা {{ns:template}} নামস্থানৰ সকলো পৃষ্ঠা ইয়াত পাব ।\nসাঁচসমূহ বিলোপ কৰাৰ আগতে সেইবোৰলৈ থকা সংযোগ পৰীক্ষা কৰক ।",
"unusedtemplateswlh": "অন্য সংযোগসমূহ",
"randomincategory": "শ্ৰেণীৰ যিকোনো পৃষ্ঠা",
"randomincategory-invalidcategory": "\"$1\" বৈধ শ্ৰেণী নাম নহয়।",
"randomincategory-nopages": "[[:Category:$1|$1]] শ্ৰেণীত কোনো পৃষ্ঠা নাই।",
- "randomincategory-selectcategory": "এই শ্ৰেণীৰ পৰা যিকোনো পৃষ্ঠা চাওক: $1 $2।",
- "randomincategory-selectcategory-submit": "যাওক",
"randomredirect": "অনিৰ্ধাৰিত পুননিৰ্দেশ",
"randomredirect-nopages": "\"$1\" নামস্থানত কোনো পুননিৰ্দেশ নাই ।",
"statistics": "পৰিসংখ্যা",
"actioncomplete": "কাৰ্য সম্পূৰ্ণ",
"actionfailed": "কাৰ্য বিফল হ'ল",
"deletedtext": "\"$1\" ক বিলোপন কৰা হৈছে।\nসাম্প্ৰতিক বিলোপনসমূহৰ তালিকা চাবলৈ $2 চাওক।",
- "dellogpage": "বাতিল কৰা সূচী",
+ "dellogpage": "বিলà§\8bপ কৰা সূচী",
"dellogpagetext": "তলত সাম্প্ৰতিক বিলোপনৰ তালিকা দিয়া হ'ল ।",
- "deletionlog": "বাতিল কৰা সূচী",
+ "deletionlog": "বিলà§\8bপ কৰা সূচী",
"reverted": "পূৰ্ববৰ্তী সংস্কৰণলৈ উভতি যোৱা হ'ল",
"deletecomment": "কাৰণ:",
"deleteotherreason": "আন/অতিৰিক্ত কাৰণ:",
"deletereasonotherlist": "আন কাৰণ:",
"deletereason-dropdown": "* বিলোপনৰ সাধাৰণ কাৰণসমূহ\n** স্পাম\n** অসভ্যালি\n** কপিৰাইট উলঙ্ঘন\n** লেখকৰ অনুৰোধ\n** ভঙা পুনঃনিৰ্দেশনা",
"delete-edit-reasonlist": "অপসাৰণ কৰা কাৰণ সম্পাদনা কৰক",
- "delete-toobig": "à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\96নৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\n{{SITENAME}}ৰ আকস্মিক ক্ষতি ৰোধ কৰিবলৈ এনে পৃষ্ঠাৰ ইতিহাস বিলোপ কৰাত সীমাবদ্ধতা আৰোপ কৰা হৈছে ।",
+ "delete-toobig": "à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\9fà§\8bৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\n{{SITENAME}}ৰ আকস্মিক ক্ষতি ৰোধ কৰিবলৈ এনে পৃষ্ঠাৰ ইতিহাস বিলোপ কৰাত সীমাবদ্ধতা আৰোপ কৰা হৈছে ।",
"delete-warning-toobig": "এই পৃষ্ঠাখনৰ সম্পাদনা ইতিহাস অতি দীঘল, $1 {{PLURAL:$1|টা সংশোধনৰো|টা সংশোধনৰো}} বেছি ।\nইয়াক বিলোপ কৰিলে {{SITENAME}} ৰ তথ্যভঁৰালৰ কাৰ্য্যকাৰীতাত সমস্যা হ’ব পাৰে;\nসাৱধানেৰে আগ বাঢ়ক ।",
"rollback": "সম্পাদনা পূৰ্ববৎ কৰক",
"rollback_short": "পূৰ্ববৎ কৰক",
"movetalk": "সংলগ্ন বাৰ্তা পৃষ্ঠা স্থানান্তৰ কৰক",
"move-subpages": "উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1লৈ)",
"move-talk-subpages": "আলোচনা পৃষ্ঠাৰ উপ-পৃষ্ঠাসমূহ স্থানান্তৰ কৰক ($1-লৈ)",
- "movepage-page-exists": "$1 পà§\83ষà§\8dঠাà¦\96ন à¦\87তিমধà§\8dযà§\87à¦\87 à¦\86à¦\9bà§\87 à¦\86ৰà§\81 তাৰ à¦\93পৰত সà§\8dবয়à¦\82à¦\95à§\8dৰিয়à¦à¦¾à§±à§\87 লিà¦\96িব নà§\8bৱাৰি ।",
+ "movepage-page-exists": "$1 পà§\83ষà§\8dঠাà¦\9fà§\8b à¦\87তিমধà§\8dযà§\87 à¦\86à¦\9bà§\87à¦\87 à¦\86ৰà§\81 তাৰ à¦\93পৰত সà§\8dবয়à¦\82à¦\95à§\8dৰিয়à¦à¦¾à§±à§\87 লিà¦\96িব নà§\8bৱাৰি।",
"movepage-page-moved": "$1 পৃষ্ঠাটো $2লৈ স্থানান্তৰ কৰা হ'ল।",
"movepage-page-unmoved": "$1 পৃষ্ঠাটো $2লৈ স্থানান্তৰ কৰা সম্ভৱ নহয়",
"movepage-max-pages": "সৰ্বোচ্চ $1 {{PLURAL:$1|পৃষ্ঠা|পৃষ্ঠা}} স্থানান্তৰ কৰা হৈছে আৰু ইয়াতকৈ অধিক স্বয়ংক্ৰিয়ভাৱে স্থানান্তৰ নহ’ব ।",
"movelogpage": "স্থানান্তৰন অভিলেখ",
"movelogpagetext": "সকলো পৃষ্ঠা স্থানান্তৰৰ এখন তালিকা তলত দিয়া হৈছে ।",
"movesubpage": "{{PLURAL:$1|টা উপপৃষ্ঠা}}",
- "movesubpagetext": "à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\96নৰ তলত দিয়া {{PLURAL:$1|à¦\9fা à¦\89পপà§\83ষà§\8dঠা}} à¦\86à¦\9bà§\87 ।",
+ "movesubpagetext": "à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\9fà§\8bৰ তলত দিয়া {{PLURAL:$1|à¦\9fা à¦\89পপà§\83ষà§\8dঠা}} à¦\86à¦\9bà§\87।",
"movenosubpage": "এই পৃষ্ঠাৰ কোনো উপপৃষ্ঠা নাই ।",
"movereason": "কাৰণ:",
"revertmove": "আগৰ অৱস্থালৈ ঘূৰি যাওক",
"import": "পৃষ্ঠা আমদানি কৰক",
"importinterwiki": "আন্তঃৱিকি আমদানি",
"import-interwiki-text": "আমদানি কৰিবলৈ এটা ৱিকি বা পৃষ্ঠাৰ শিৰোনামা নিৰ্বাচন কৰক ।\nসংশোধনৰ তাৰিখ আৰু সম্পাদকৰ নাম সংৰক্ষণ কৰা হ'ব ।\nসকলো আন্তঃৱিকি আমদানি [[Special:Log/import|আমদানি অভিলেখ]]ত লিপিবদ্ধ আছে ।",
- "import-interwiki-source": "উৎস ৱিকি/পৃষ্ঠা:",
+ "import-interwiki-sourcewiki": "উৎস ৱিকি:",
+ "import-interwiki-sourcepage": "উৎস পৃষ্ঠা:",
"import-interwiki-history": "এই পৃষ্ঠাৰ সকলো সংশোধনৰ ইতিহাস প্ৰতিলিপি কৰক",
"import-interwiki-templates": "সকলো সাঁচ অন্তৰ্ভুক্ত কৰক",
"import-interwiki-submit": "আমদানি",
"importbadinterwiki": "আন্ত:ৱিকি সংযোগ বেয়া",
"importsuccess": "আমদানি সমাপ্ত !",
"importnosources": "কোনো আন্তঃৱিকি আমদানি উৎসৰ সংজ্ঞা দিয়া হোৱা নাই আৰু প্ৰত্যক্ষ ইতিহাস আপল'ড নিষ্ক্ৰিয় কৰা হৈছে ।",
- "importnofile": "কোনো আমদানি নথি আপল'ড কৰা হোৱা নাই ।",
+ "importnofile": "কোনো আমদানি নথি আপল'ড কৰা হোৱা নাই।",
"importuploaderrorsize": "আমদানি নথিৰ আপল'ড অসফল হৈছে ।\nঅনুমোদিত আপল'ড নথিতকৈ এই নথিৰ আকাৰ ডাঙৰ ।",
"importuploaderrorpartial": "আমদানি নথিৰ আপল'ড অসফল হৈছে ।\nনথিখন কেৱল আংশিকভাৱে আপল'ড কৰা হৈছে ।",
"importuploaderrortemp": "আমদানি নথিৰ আপল'ড বিফল হৈছে ।\nএটা অস্থায়ী ফ'ল্ডাৰ হেৰাইছে ।",
"import-error-create": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ইয়াক সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।",
"import-error-interwiki": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ইয়াৰ নামটো বাহিৰা সংযোগৰ (আন্তঃৱিকি) বাবে সংৰক্ষিত।",
"import-error-special": "\"$1\" পৃষ্ঠাটো আমদানি কৰা নহ'ল কাৰণ ই পৃষ্ঠা অনুমোদন নকৰা এটা বিশেষ নামস্থানৰ অন্তৰ্গত।",
- "import-error-invalid": "\"$1\" পà§\83ষà§\8dঠাà¦\96ন à¦\86মদানি à¦\95ৰা নহ'ল à¦\95াৰণ à¦\87য়াৰ নামà¦\9fà§\8b অবৈধ।",
+ "import-error-invalid": "\"$1\" পà§\83ষà§\8dঠাà¦\9fà§\8b à¦\86মদানি à¦\95ৰা নহ'ল à¦\95াৰণ যিà¦\9fà§\8b নামলà§\88 à¦\87য়াà¦\95 à¦\86মদানি à¦\95ৰিব বিà¦\9aৰা হà§\88à¦\9bিল সà§\87à¦\87à¦\9fà§\8b à¦\8fà¦\87 ৱিà¦\95িত অবৈধ।",
"import-error-unserialize": " \"$1\" পৃষ্ঠাৰ $2 সংশোধনৰ ক্ৰম আঁতৰ কৰিব পৰা নগ'ল। এই সংশোধনে $4 ক্ৰমৰ সমল মডেল $3 ব্যৱহাৰ কৰা বুলি জনোৱা হৈছিল।",
"import-options-wrong": "ভুল {{PLURAL:$2|বিকল্প|বিকল্পসমূহ}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "মূল পৃষ্ঠাৰ শিৰোনামা অবৈধ।",
"tooltip-ca-protect": "এই পৃষ্ঠাটো সুৰক্ষিত কৰক",
"tooltip-ca-unprotect": "এই পৃষ্ঠাৰ সুৰক্ষা সলনি কৰক",
"tooltip-ca-delete": "এই পৃষ্ঠাটো বিলোপ কৰক",
- "tooltip-ca-undelete": "বিলà§\8bপ à¦\95ৰাৰ à¦\86à¦\97à§\87য়à§\87 à¦\95ৰা পà§\83ষà§\8dঠাà¦\96নৰ সালসলনিসমà§\82হ পà§\81নà¦\83সংস্থাপন কৰক",
+ "tooltip-ca-undelete": "বিলà§\8bপ à¦\95ৰাৰ à¦\86à¦\97à§\87য়à§\87 à¦\95ৰা পà§\83ষà§\8dঠাà¦\9fà§\8bৰ সালসলনিসমà§\82হ পà§\81নৰà§\8dসংস্থাপন কৰক",
"tooltip-ca-move": "এই পৃষ্ঠাটো স্থানান্তৰিত কৰক",
"tooltip-ca-watch": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰক",
"tooltip-ca-unwatch": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰাওক",
"tooltip-compareselectedversions": "এই পৃষ্ঠাত নিৰ্বাচিত দুটা সংশোধনৰ মাজত পাৰ্থক্য দেখুৱাওক",
"tooltip-watch": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাভুক্ত কৰক",
"tooltip-watchlistedit-normal-submit": "শিৰোনামা আঁতৰাওক",
- "tooltip-watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডেট কৰক",
+ "tooltip-watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডে'ট কৰক",
"tooltip-recreate": "বিলোপ কৰা সত্বেও পৃষ্ঠাটো পুনৰ সৃষ্টি কৰক",
"tooltip-upload": "আপল'ড আৰম্ভ কৰক",
"tooltip-rollback": "\"পূৰ্ববত\" কৰিলে এটা ক্লিকত এই পৃষ্ঠাৰ শেষ অৱদানকাৰীৰ সম্পাদনা বাতিল কৰি ইয়াক পূৰ্বাৱস্থালৈ ঘূৰাই নিব।",
"confirmemail_body": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা এইটো ই-মেইল ঠিকনা ব্যৱহাৰ কৰি {{SITENAME}}ত\nএটা একাউণ্ট \"$2\" পঞ্জীয়ন কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খোলক:\n\n$3\n\nযদি আপুনি একাউণ্টটো পঞ্জীয়ন কৰা *নাই*, তেন্তে ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।",
"confirmemail_body_changed": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা {{SITENAME}}ত\nএকাউণ্ট \"$2\"ৰ ই-মেইল ঠিকনা সলনি কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ পুনৰ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খুলক:\n\n$3\n\nযদি একাউণ্টটো আপোনাৰ *নহয়*, তেন্তে ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।",
"confirmemail_body_set": "কোনোবাই (সম্ভৱতঃ আপুনি) আই.পি. ঠিকনা $1ৰ পৰা {{SITENAME}}ত\nএকাউণ্ট \"$2\"ৰ ইমেইল ঠিকনা এইটো প্ৰদান কৰিছে ।\n\nএই একাউণ্ট আপোনাৰ হয়নে নহয় নিশ্চিত কৰাৰ বাবে আৰু {{SITENAME}}ত ই-মেইল বৈশিষ্টসমূহ সক্ৰিয় কৰাৰ বাবে\nআপোনাৰ ব্ৰাউজাৰত এই সংযোগটো খোলক:\n\n$3\n\nযদি একাউণ্টটো আপোনাৰ *নহয়*, তেন্তে ইমেইল ঠিকনা নিশ্চিতকৰণ বাতিলৰ বাবে\nএই সংযোগটো চাওক:\n\n$5\n\nএই নিশ্চিতকৰণ সংকেতৰ ম্যাদ $4ত উকলিব ।",
- "confirmemail_invalidated": "ই-মেইল ঠিকনা নিশ্চিতকৰণ বাতিল কৰা হৈছে",
+ "confirmemail_invalidated": "ইমেইল ঠিকনা নিশ্চিতকৰণ বাতিল কৰা হৈছে",
"invalidateemail": "ই-মেইল নিশ্চিতকৰণ বাতিল কৰক",
"scarytranscludedisabled": "[আন্তঃৱিকি আন্তঃভুক্তি নিষ্ক্ৰিয় কৰা আছে]",
"scarytranscludefailed": "[$1ৰ বাবে সাঁচ অনা অসফল হৈছে]",
"scarytranscludetoolong": "[URL অত্যাধিক দীঘল]",
"deletedwhileediting": "'''সতৰ্কবাণী''': আপুনি সম্পাদনা আৰম্ভ কৰাৰ পাছত পৃষ্ঠাটো বিলোপ কৰা হৈছে !",
"confirmrecreate": "আপুনি সম্পাদনা আৰম্ভ কৰাৰ পিছত সদস্য [[User:$1|$1]] ([[User talk:$1|আলোচনা]])য়ে পৃষ্ঠাটো বিলোপ কৰিছে, তাৰ কাৰণ:\n: ''$2''\nআপুনি এই পৃষ্ঠাটো আকৌ সৃষ্টি কৰিব খোজাটো নিশ্চিত কৰক ।",
- "confirmrecreate-noreason": "à¦\86পà§\81নি সমà§\8dপাদনা à¦\86ৰমà§\8dঠà¦\95ৰাৰ পিà¦\9bত সদসà§\8dয [[User:$1|$1]] ([[User talk:$1|à¦\86লà§\8bà¦\9aনা]])য়à§\87 পà§\83ষà§\8dঠাà¦\96ন বিলà§\8bপ à¦\95ৰিà¦\9bà§\87 । à¦\86পà§\81নি à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\96ন à¦\86à¦\95à§\8c সà§\83ষà§\8dà¦\9fি à¦\95ৰিব à¦\96à§\8bà¦\9cাà¦\9fà§\8b à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি নিশà§\8dà¦\9aিত à¦\95ৰà¦\95 ।",
+ "confirmrecreate-noreason": "à¦\86পà§\81নি সমà§\8dপাদনা à¦\86ৰমà§\8dঠà¦\95ৰাৰ পিà¦\9bত সদসà§\8dয [[User:$1|$1]] ([[User talk:$1|à¦\86লà§\8bà¦\9aনা]])য়à§\87 পà§\83ষà§\8dঠাà¦\9fà§\8b বিলà§\8bপ à¦\95ৰিà¦\9bà§\87। à¦\86পà§\81নি à¦\8fà¦\87 পà§\83ষà§\8dঠাà¦\96ন à¦\86à¦\95à§\8c সà§\83ষà§\8dà¦\9fি à¦\95ৰিব à¦\96à§\8bà¦\9cাà¦\9fà§\8b à¦\85নà§\81à¦\97à§\8dৰহ à¦\95ৰি নিশà§\8dà¦\9aিত à¦\95ৰà¦\95।",
"recreate": "পুনৰ সৃষ্টি কৰক",
"confirm_purge_button": "শুদ্ধ",
"confirm-purge-top": "এই পৃষ্ঠাৰ কেচ্ খালী কৰা হওক ?",
"confirm-watch-top": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাত যোগ কৰিব?",
"confirm-unwatch-button": "শুদ্ধ",
"confirm-unwatch-top": "এই পৃষ্ঠাটো আপোনাৰ লক্ষ্য-তালিকাৰ পৰা আঁতৰাব?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← পূৰ্বৱৰ্তী পৃষ্ঠা",
"imgmultipagenext": "পৰৱৰ্তী পৃষ্ঠা →",
"imgmultigo": "যাওক",
"watchlistedit-raw-legend": "অশোধিত অনুসৰণ-তালিকা সম্পাদন কৰক",
"watchlistedit-raw-explain": "আপোনাৰ দৰ্শন তালিকাত থকা শীৰ্ষকসমূহ তলত দেখুওৱা হৈছে, আৰু তালিকালৈ যোগ কৰি অথবা তালিকাৰ পৰা আতৰাই সম্পাদন কৰিব পাৰি;\nপ্ৰতি শাৰী এটা শীৰ্ষক হিচাপে।\nযেতিয়া সম্পূৰ্ণ হব, \"{{int:Watchlistedit-raw-submit}}\"ত ক্লিক কৰিব।\nআপুনি লগতে [[Special:EditWatchlist|প্ৰামাণিক সম্পাদকক ব্যৱহাৰ কৰিব পাৰে]]।",
"watchlistedit-raw-titles": "শিৰোনামা:",
- "watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডেট কৰক",
+ "watchlistedit-raw-submit": "লক্ষ্য-তালিকা আপডে'ট কৰক",
"watchlistedit-raw-done": "আপোনাৰ লক্ষ্য-তালিকা নবীকৰণ কৰা হ'ল",
"watchlistedit-raw-added": "{{PLURAL:$1|এটা শিৰোনামা|$1-টা শিৰোনামা}} যোগ কৰা হ'ল:",
"watchlistedit-raw-removed": "{{PLURAL:$1|এটা শিৰোনামা|$1-টা শিৰোনামা}} আঁতৰোৱা হ'ল:",
"watchlistedit-clear-titles": "শিৰোনামাসমূহ:",
"watchlistedit-clear-submit": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক (এইটো স্থায়ী!)",
"watchlistedit-clear-done": "আপোনাৰ লক্ষ্য-তালিকা পৰিষ্কাৰ কৰা হ'ল।",
+ "watchlisttools-clear": "লক্ষ্য-তালিকা পৰিষ্কাৰ কৰক",
"watchlisttools-view": "সংগতি থকা সাল-সলনিবোৰ চাওক",
"watchlisttools-edit": "লক্ষ্য-তালিকা চাওক আৰু সম্পাদনা কৰক",
"watchlisttools-raw": "অশোধিত লক্ষ্য-তালিকা সম্পাদনা কৰক",
"version-license": "অনুজ্ঞাপত্ৰ",
"version-ext-license": "অনুজ্ঞাপত্ৰ",
"version-ext-colheader-name": "এক্সটেন্চন",
+ "version-skin-colheader-name": "আৱৰণ",
"version-ext-colheader-version": "সংস্কৰণ",
"version-ext-colheader-license": "অনুজ্ঞাপত্ৰ",
"version-ext-colheader-description": "বিৱৰণ",
"version-ext-colheader-credits": "লেখকসকল",
+ "version-license-title": "$1ৰ বাবে অনুজ্ঞাপত্ৰ",
"version-poweredby-credits": "এই ৱিকি '''[https://www.mediawiki.org/ মিডিয়াৱিকিৰ]''' দ্বাৰা প্ৰচলিত , কপিৰাইট © ২০০১-$1 $2.",
"version-poweredby-others": "অন্য",
"version-poweredby-translators": "translatewiki.net অনুবাদকসকল",
"compare-submit": "তুলনা কৰক",
"compare-invalid-title": "আপুনি নিৰ্ধাৰণ কৰা শিৰোনামাটো অবৈধ ।",
"compare-title-not-exists": "আপুনি নিৰ্ধাৰণ কৰা ফাইলটোৰ অস্বিত্ব নাই ।",
- "compare-revision-not-exists": "à¦\86পà§\81নি নিৰà§\8dধাৰণ à¦\95ৰা সà¦\82শà§\8bধনà§\80à¦\9fà§\8bৰ à¦\85সà§\8dবিত্ব নাই ।",
+ "compare-revision-not-exists": "à¦\86পà§\81নি নিৰà§\8dধাৰণ à¦\95ৰা সà¦\82শà§\8bধনà¦\9fà§\8bৰ à¦\85সà§\8dতিত্ব নাই ।",
"dberr-problems": "দুঃখিত! চাইটটোত কিছু কাৰিকৰী সমস্যা হৈছে ।",
"dberr-again": "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।",
"dberr-info": "(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)",
"sqlite-has-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন সহ",
"sqlite-no-fts": "$1 সম্পূৰ্ণ-পাঠ অনুসন্ধান সমৰ্থন অবিহনে",
"logentry-delete-delete": "$3 পৃষ্ঠাটো $1ৰদ্বাৰা {{GENDER:$2|বিলোপ কৰা হ'ল}}",
- "logentry-delete-restore": "$3 পৃষ্ঠাখন $1 ৰদ্বাৰা {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰা হ'ল}}",
+ "logentry-delete-restore": "$1-এ $3 পৃষ্ঠাটো {{GENDER:$2|পুনৰ্সংৰক্ষণ কৰিলে}}",
"logentry-delete-event": "$3: $4 -ত {{PLURAL:$5|এটা লগ ঘটনা|$5 লগ ঘটনাসমূহ}} -ৰ $1 পৰিৱৰ্তন কৰা দৃশ্যমানতা",
"logentry-delete-revision": "পৃষ্ঠা $3ত {{PLURAL:$5|এটা সংশোধন|$5 সংশোধনসমূহ}}ৰ দৃশ্যমানতা $1 {{GENDER:$2|য়ে সলালে}}: $4",
"logentry-delete-event-legacy": "$3ত ল'গ ঘটনাসমূহৰ দৃশ্যমানতা $1 {{GENDER:$2|ৰদ্বাৰা সলোৱা হ'ল}}",
"expand_templates_output": "ফলাফল",
"expand_templates_ok": "ওকে",
"expand_templates_remove_comments": "মন্তব্য গু়চাওক",
- "expand_templates_preview": "খচৰা"
+ "expand_templates_preview": "খচৰা",
+ "pagelanguage": "পৃষ্ঠাৰ ভাষা নিৰ্বাচক",
+ "pagelang-name": "পৃষ্ঠা",
+ "pagelang-language": "ভাষা",
+ "pagelang-use-default": "ডিফল্ট ভাষা ব্যৱহাৰ কৰক",
+ "pagelang-select-lang": "ভাষা নিৰ্বাচন কৰক",
+ "right-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
+ "action-pagelang": "পৃষ্ঠাৰ ভাষা পৰিৱৰ্তন কৰক",
+ "log-name-pagelang": "ভাষা পৰিৱৰ্তন ল'গ"
}
"userlogin-resetlink": "¿Escaeció los datos d'accesu?",
"userlogin-resetpassword-link": "¿Escaeció la contraseña?",
"userlogin-helplink2": "Ayuda del aniciu de sesión",
- "userlogin-loggedin": "Yá anició sesión como {{GENDER:$1|$1}}.\nUtilice'l formulariu de más abaxo p'aniciar sesión como otru usuariu.",
- "userlogin-createanother": "Crear otra cuenta",
"createacct-emailrequired": "Direición de corréu electrónicu",
"createacct-emailoptional": "Direición de corréu electrónicu (opcional)",
"createacct-email-ph": "Escriba la so direición de corréu electrónicu",
"randomincategory": "Páxina al debalu de la categoría",
"randomincategory-invalidcategory": "\"$1\" nun ye un nome de categoría válidu.",
"randomincategory-nopages": "Nun hai páxines en [[:Category:$1]].",
- "randomincategory-selectcategory": "Ver una páxina al debalu de la categoría: $1. $2",
- "randomincategory-selectcategory-submit": "Dir",
+ "randomincategory-category": "Categoría:",
+ "randomincategory-legend": "Páxina al debalu de la categoría",
"randomredirect": "Redireición al debalu",
"randomredirect-nopages": "Nun hai redireiciones nel espaciu de nomes \"$1\".",
"statistics": "Estadístiques",
"exbeforeblank": "el conteníu enantes de dexar en blanco yera: '$1'",
"delete-confirm": "Desaniciar «$1»",
"delete-legend": "Desaniciar",
- "historywarning": "'''Avisu:'''' La páxina que vas desaniciar tien un historial con aproximadamente $1 {{PLURAL:$1|revisión|revisiones}}:",
+ "historywarning": "<strong>Avisu:</strong> La páxina que vas desaniciar tien un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
"confirmdeletetext": "Tas a piques d'esborrar una páxina xunto con tol so historial.\nPor favor confirma que ye lo que quies facer, qu'entiendes les consecuencies, y que lo tas faciendo acordies coles [[{{MediaWiki:Policy-url}}|polítiques]].",
"actioncomplete": "Aición completada",
"actionfailed": "Falló l'aición",
"delete-edit-reasonlist": "Editar los motivos d'esborráu",
"delete-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nRestrinxóse l'esborráu d'estes páxines pa evitar perturbaciones accidentales de {{SITENAME}}.",
"delete-warning-toobig": "Esta páxina tien un historial d'ediciones grande, más de $1 {{PLURAL:$1|revisión|revisiones}}.\nEsborralu pue perturbar les operaciones de la base de datos de {{SITENAME}};\nobra con precaución.",
- "delete-cantedit": "Nun pues desaniciar esta páxina porque nun tienes permisu pa editala.",
+ "deleteprotected": "Nun pues desaniciar esta páxina porque ta protexida.",
"deleting-backlinks-warning": "'''Avisu:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otres páxines]] enllacen a, o trescluyen de, la páxina que ta a piques de desaniciar.",
"rollback": "Revertir ediciones",
"rollback_short": "Revertir",
"import": "Importar páxines",
"importinterwiki": "Importación treswiki",
"import-interwiki-text": "Seleiciona una wiki y un títulu de páxina pa importar.\nLes feches de revisión y los nomes de los editores caltendránse.\nToles aiciones d'importación treswiki queden rexistraes nel [[Special:Log/import|rexistru d'importaciones]].",
- "import-interwiki-source": "Códigu wiki/páxina:",
+ "import-interwiki-sourcewiki": "Wiki d'orixe:",
+ "import-interwiki-sourcepage": "Páxina d'orixe:",
"import-interwiki-history": "Copiar toles versiones d'historial d'esta páxina",
"import-interwiki-templates": "Incluyir toles plantíes",
"import-interwiki-submit": "Importar",
"otherlanguages": "На іншых мовах",
"redirectedfrom": "(Перанакіравана з «$1»)",
"redirectpagesub": "Старонка-перанакіраваньне",
+ "redirectto": "Перанакіраваньне на:",
"lastmodifiedat": "Гэтая старонка апошні раз рэдагавалася $1 году ў $2.",
"viewcount": "Гэтую старонку праглядалі $1 {{PLURAL:$1|раз|разы|разоў}}.",
"protectedpage": "Абароненая старонка",
"userlogin-resetlink": "Забыліся на зьвесткі для ўваходу?",
"userlogin-resetpassword-link": "Забылі пароль?",
"userlogin-helplink2": "Дапамога з уваходам у сыстэму",
- "userlogin-loggedin": "Вы ўжо ўвайшлі як {{GENDER:$1|$1}}.\nДля ўваходу пад іншым удзельнікам скарыстайцеся формай унізе.",
- "userlogin-createanother": "Стварыць іншы рахунак",
"createacct-emailrequired": "E-mail адрас",
"createacct-emailoptional": "E-mail адрас (неабавязкова)",
"createacct-email-ph": "Увядзіце ваш e-mail адрас",
"createaccount-text": "Нехта стварыў рахунак «$2» у {{GRAMMAR:месны|{{SITENAME}}}} ($4) для Вашага адрасу электроннай пошты. Пароль для гэтага рахунку — «$3». Вам трэба ўвайсьці і зьмяніць Ваш пароль зараз.\n\nВы можаце праігнараваць гэты ліст, калі гэты рахунак быў створаны памылкова.",
"login-throttled": "Вы зрабілі надта шмат спробаў уваходу ў сыстэму.\nКалі ласка, пачакайце $1 перад тым як паспрабаваць ізноў.",
"login-abort-generic": "Не атрымалася ўвайсьці ў сыстэму, скасавана",
+ "login-migrated-generic": "Ваш рахунак быў перанесены і вашае імя ўдзельніка больш не існуе ў гэтай вікі.",
"loginlanguagelabel": "Мова: $1",
"suspicious-userlogout": "Ваш запыт на выхад з сыстэмы быў адхілены, таму што выглядае, што ён быў дасланы пашкоджаным браўзэрам альбо кэшаваным проксі-сэрвэрам.",
"createacct-another-realname-tip": "Сапраўднае імя паведамляць неабавязкова.\nКалі Вы яго пазначыце, яно будзе выкарыстоўвацца для пазначэньня Вашай працы.",
"showpreview": "Праглядзець",
"showdiff": "Паказаць зьмены",
"blankarticle": "<strong>Папярэджаньне:</strong> вы ствараеце пустую старонку.\nКалі вы націсьніце «{{int:savearticle}}» яшчэ раз, старонка будзе створаная без аніякага зьместу.",
- "anoneditwarning": "'''Папярэджаньне:''' Вы не ўвайшлі ў сыстэму. Ваш IP-адрас будзе запісаны ў гісторыі гэтай старонкі.",
+ "anoneditwarning": "<strong>Папярэджаньне</strong>: вы не ўвайшлі ў сыстэму. Ваш IP-адрас будзе бачны ўсім, калі вы адрэдагуеце старонку. Калі вы <strong>[$1 ўвойдзеце]</strong> або <strong>[$2 створыце рахунак]</strong>, вашыя рэдагаваньні будуць зьвязаныя з вашым імем карыстальніка, а таксама вам будуць даступныя дадатковыя перавагі.",
"anonpreviewwarning": "''Вы не ўвайшлі ў сыстэму. Падчас захаваньня Ваш IP-адрас будзе дададзены ў гісторыю рэдагаваньняў старонкі.''",
"missingsummary": "'''Напамін:''' Вы не пазначылі кароткае апісаньне зьменаў.\nКалі Вы націсьніце кнопку «Запісаць» яшчэ раз, Вашае рэдагаваньне будзе запісанае без апісаньня.",
"missingcommenttext": "Калі ласка, увядзіце камэнтар ніжэй.",
"import": "Імпартаваць старонкі",
"importinterwiki": "Імпартаваньне зь іншых вікі",
"import-interwiki-text": "Абярыце вікі і назву старонкі для імпартаваньня.\nДаты зьменаў і імёны аўтараў будуць захаваныя.\nУсе дзеяньні імпартаваньня паміж вікі запісваюцца ў [[Special:Log/import|журнал імпартаваньняў]].",
+ "import-interwiki-sourcewiki": "Крынічная вікі:",
+ "import-interwiki-sourcepage": "Крынічная старонка:",
"import-interwiki-history": "Капіяваць гісторыю старонкі цалкам",
"import-interwiki-templates": "Уключыць усе шаблёны",
"import-interwiki-submit": "Імпартаваць",
"userlogin-resetlink": "Забыліся даныя для ўваходу?",
"userlogin-resetpassword-link": "Забылі пароль?",
"userlogin-helplink2": "Даведка па прадстаўленні сістэме",
- "userlogin-loggedin": "Вы ўжо ўвайшлі ў сістэму як {{GENDER:$1|$1}}.\nСкарыстайцеся формай ніжэй, каб прадставіцца сістэме як іншы ўдзельнік.",
- "userlogin-createanother": "Стварыць яшчэ адзін уліковы запіс",
"createacct-emailrequired": "Адрас электроннай пошты",
"createacct-emailoptional": "Адрас электроннай пошты (неабавязкова)",
"createacct-email-ph": "Увядзіце ваш адрас электроннай пошты",
"permalink": "Постоянна препратка",
"print": "Печат",
"view": "Преглед",
+ "view-foreign": "Преглед на $1",
"edit": "Редактиране",
"edit-local": "Редактиране на локалното описание",
"create": "Създаване",
"jumptonavigation": "навигация",
"jumptosearch": "търсене",
"view-pool-error": "Съжаляваме, но сървърите в момента са претоварени.\nТвърде много потребители се опитват да отворят тази страница.\nМоля, изчакайте малко преди отново да пробвате да отворите страницата.\n\n$1",
+ "generic-pool-error": "Съжаляваме, но сървърите в момента са претоварени.\nТвърде много потребители се опитват да отворят тази страница.\nМоля, изчакайте малко преди отново да пробвате да отворите страницата.",
"pool-timeout": "Изтичане на времето за заключване на страницата",
"pool-queuefull": "Опашката за заявки е пълна",
"pool-errorunknown": "Непозната грешка",
"badarticleerror": "Действието не може да се изпълни върху страницата.",
"cannotdelete": "Указаната страница или файл \"$1\" не можа да бъде изтрит(а). Възможно е вече да е бил(а) изтрит(а) от някой друг.",
"cannotdelete-title": "Страницата „$1“ не може да бъде изтрита",
+ "delete-hook-aborted": "Изтриването беше прекъснато от кука.\nНе беше посочена причина за това.",
"no-null-revision": "Не може да бъде създадена празна версия на страницата „$1“",
"badtitle": "Невалидно заглавие",
"badtitletext": "Желаното заглавие на страница е невалидно, празно или неправилна препратка към друго уики. Възможно е да съдържа знаци, които не са позволени в заглавия.",
"titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е ''$2''.",
"filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nАдминистраторът, който го е заключил, е посочил следната причина: „$3“.",
"invalidtitle-knownnamespace": "Невалидно заглавие с именно пространство $2\" и текст \"$3\"",
+ "invalidtitle-unknownnamespace": "Невалидно заглавие с неразпознато именно пространство номер $1 и текст „$2“",
"exception-nologin": "Не сте влезли",
- "exception-nologin-text": "Ð\97а доÑ\81Ñ\8aп до желанаÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а или дейÑ\81Ñ\82вие Ñ\83икиÑ\82о изиÑ\81ква [[Special:Userlogin|влизане в Ñ\81иÑ\81Ñ\82емаÑ\82а]].",
+ "exception-nologin-text": "Ð\97а доÑ\81Ñ\82Ñ\8aп до избÑ\80аноÑ\82о дейÑ\81Ñ\82вие или Ñ\81Ñ\82Ñ\80аниÑ\86а е необÑ\85одимо влизане в Ñ\81иÑ\81Ñ\82емаÑ\82а.",
"exception-nologin-text-manual": "За достъп до избраното действие или страница е необходимо $1 в системата.",
"virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: ''$1''",
"virus-scanfailed": "сканирането не сполучи (код $1)",
"userlogin-resetlink": "Забравени данни за влизане в системата?",
"userlogin-resetpassword-link": "Забравена парола?",
"userlogin-helplink2": "Помощ за влизане",
- "userlogin-loggedin": "Вече сте влезли в системата като {{GENDER:$1|$1}}.\nЧрез формуляра по-долу можете да влезете като друг потребител.",
- "userlogin-createanother": "Създаване на друга сметка",
"createacct-emailrequired": "Адрес за електронна поща",
"createacct-emailoptional": "Адрес за електронна поща (незадължително)",
"createacct-email-ph": "Въведете Вашия адрес за електронна поща",
"recreate-moveddeleted-warn": "'''Внимание: Създавате страница, която по-рано вече е била изтрита.'''\n\nОбмислете добре дали е уместно повторното създаване на страницата.\nЗа ваша информация по-долу е посочена причината за предишното изтриване на страницата:",
"moveddeleted-notice": "Тази страница е била изтрита.\nЗа справка, по-долу са включени извадки от дневниците на изтриванията и преместванията.",
"log-fulllog": "Преглеждане на пълния дневник",
- "edit-hook-aborted": "Редакцията беше прекъсната от кука. Не беше посочена причина за това.",
+ "edit-hook-aborted": "Редакцията беше прекъсната от кука.\nНе беше посочена причина за това.",
"edit-gone-missing": "Страницата не можа да се обнови.\nВероятно междувременно е била изтрита.",
"edit-conflict": "Редакционен конфликт.",
"edit-no-change": "Редакцията ви беше пренебрегната, защото не съдържа промени по текста.",
"preferences": "Настройки",
"mypreferences": "Настройки",
"prefs-edits": "Брой редакции:",
- "prefsnologintext2": "Ð\9cолÑ\8f, влезÑ\82е за да пÑ\80омениÑ\82е наÑ\81Ñ\82Ñ\80ойкиÑ\82е Ñ\81и.",
+ "prefsnologintext2": "Ð\97а да пÑ\80омениÑ\82е наÑ\81Ñ\82Ñ\80ойкиÑ\82е Ñ\81и е необÑ\85одимо да влезеÑ\82е в Ñ\81иÑ\81Ñ\82еаÑ\82а.",
"prefs-skin": "Облик",
"skin-preview": "предварителен преглед",
"datedefault": "Без предпочитание",
"action-sendemail": "изпращане на е-писма",
"action-editmywatchlist": "редактиране на списъка ви за наблюдение",
"action-viewmywatchlist": "преглед на списъка ви за наблюдение",
- "action-viewmyprivateinfo": "пÑ\80еглед на лиÑ\87наÑ\82а Ñ\81и инÑ\84оÑ\80маÑ\86иÑ\8f",
+ "action-viewmyprivateinfo": "пÑ\80еглеждане на лиÑ\87ниÑ\82е данни",
"action-editmyprivateinfo": "редактиране на личната си информация",
"nchanges": "$1 {{PLURAL:$1|промяна|промени}}",
"enhancedrc-since-last-visit": "$1 {{PLURAL:$1|от последното посещение}}",
"recentchanges": "Последни промени",
"recentchanges-legend": "Настройки на списъка с последни промени",
"recentchanges-summary": "Проследяване на последните промени в {{SITENAME}}.\n\nЛегенда: '''тек''' = разлика на текущата версия,\n'''ист''' = история на версиите",
- "recentchanges-noresult": "Не са намерени промени за дадения период, отговарящи на критерия.",
+ "recentchanges-noresult": "Не бяха намерени промени за дадения период, които отговарят на критериите.",
"recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.",
"recentchanges-label-newpage": "Нова страница",
"recentchanges-label-minor": "Това е малка промяна",
"download": "сваляне",
"unwatchedpages": "Ненаблюдавани страници",
"listredirects": "Списък на пренасочванията",
+ "listduplicatedfiles": "Списък на повтарящи се файлове",
"unusedtemplates": "Неизползвани шаблони",
"unusedtemplatestext": "Тази страница съдържа списък на страниците в именно пространство {{ns:template}}, които не са включени в друга страница. Проверявайте за препратки към отделните шаблони преди да ги изтриете или предложите за изтриване.",
"unusedtemplateswlh": "други препратки",
"protectedpages-page": "Страница",
"protectedpages-expiry": "Срок на изтичане",
"protectedpages-performer": "Защитаващ потребител",
- "protectedpages-params": "Параметри на защитата",
+ "protectedpages-params": "Параметри на защита",
"protectedpages-reason": "Причина",
"protectedpages-unknown-timestamp": "Неизвестни",
"protectedpages-unknown-performer": "Неизвестен потребител",
"listgrouprights-removegroup-self-all": "Може да премахва всички групи от собствената сметка",
"listgrouprights-namespaceprotection-namespace": "Именно пространство",
"trackingcategories": "Категории за проследяване",
- "trackingcategories-summary": "СÑ\82Ñ\80аниÑ\86аÑ\82а пÑ\80едÑ\81Ñ\82авлÑ\8fва Ñ\81пиÑ\81Ñ\8aк на каÑ\82егоÑ\80ии за пÑ\80оÑ\81ледÑ\8fване, коиÑ\82о Ñ\81е попÑ\8aлваÑ\82 авÑ\82омаÑ\82иÑ\87но оÑ\82 Ð\9cедиÑ\8fУики Ñ\81оÑ\84Ñ\82Ñ\83еÑ\80. Ð\98менаÑ\82а им могаÑ\82 да Ñ\81е пÑ\80оменÑ\8fÑ\82 поÑ\81Ñ\80едÑ\81Ñ\82вом пÑ\80омÑ\8fна на съответните системни съобщения в именното пространство {{ns:8}}.",
+ "trackingcategories-summary": "Тази Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\81Ñ\8aдÑ\8aÑ\80жа Ñ\81пиÑ\81Ñ\8aк на каÑ\82егоÑ\80ии за пÑ\80оÑ\81ледÑ\8fване, коиÑ\82о Ñ\81е попÑ\8aлваÑ\82 авÑ\82омаÑ\82иÑ\87но оÑ\82 Ñ\81оÑ\84Ñ\82Ñ\83еÑ\80а на Ð\9cедиÑ\8fУики. Ð\98менаÑ\82а им могаÑ\82 да Ñ\81е пÑ\80оменÑ\8fÑ\82 Ñ\87Ñ\80ез съответните системни съобщения в именното пространство {{ns:8}}.",
"trackingcategories-msg": "Категория за проследяване",
"trackingcategories-name": "Име на съобщението",
"trackingcategories-desc": "Критерий за включване на категория",
+ "trackingcategories-nodesc": "Няма налично описание.",
"trackingcategories-disabled": "Категорията е деактивирана",
"mailnologin": "Няма електронна поща",
"mailnologintext": "Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.",
"watchnologin": "Не сте влезли",
"addwatch": "Добавяне към списъка за наблюдение",
"addedwatchtext": "Страницата „'''[[:$1]]'''“ беше добавена към [[Special:Watchlist|списъка ви за наблюдение]].\nНейните бъдещи промени, както и на съответната й дискусионна страница, ще се описват там.",
- "addedwatchtext-short": "Страница \"$1\" беше добавена към списъка ви за наблюдение.",
+ "addedwatchtext-short": "Страницата „$1“ беше добавена към списъка Ви за наблюдение.",
"removewatch": "Премахване от списъка за наблюдение",
"removedwatchtext": "Страницата „[[:$1]]“ беше премахната от [[Special:Watchlist|списъка ви за наблюдение]].",
- "removedwatchtext-short": "Страница \"$1\" беше премахната от списъка ви за наблюдение.",
+ "removedwatchtext-short": "Страницата „$1“ беше премахната от списъка Ви за наблюдение.",
"watch": "Наблюдение",
"watchthispage": "Наблюдаване на страницата",
"unwatch": "Спиране на наблюдение",
"contributions-title": "Потребителски приноси за $1",
"mycontris": "Приноси",
"contribsub2": "За {{GENDER:$3|$1}} ($2)",
- "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за \"$1\".",
+ "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
"nocontribs": "Не са намерени промени, отговарящи на критерия.",
"uctop": "(текуща)",
"month": "Месец:",
"pagelang-language": "Език",
"pagelang-use-default": "Използване на езика по подразбиране",
"pagelang-select-lang": "Избиране на език",
- "right-pagelang": "Променяне на езика на страница",
- "action-pagelang": "Ð\9fÑ\80оменÑ\8fне на езика на страницата",
+ "right-pagelang": "Промяна езика на страница",
+ "action-pagelang": "пÑ\80омÑ\8fна езика на страницата",
"log-name-pagelang": "Дневник на езиковите промени",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''изключено''')"
"tog-watchdefault": "আমার সম্পাদিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক",
"tog-watchmoves": "আমার স্থানান্তরিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক",
"tog-watchdeletion": "আমার অপসারিত পাতা এবং ফাইলগুলো আমার নজর তালিকায় যোগ করা হোক",
+ "tog-watchrollback": "আমার দ্বারা রোলব্যাক করা পাতা আমার নজরতালিকায় যোগ করা হোক",
"tog-minordefault": "শুরুতেই সব সম্পাদনাকে অনুল্লেখ্য বলে চিহ্নিত করা হোক",
"tog-previewontop": "সম্পাদনা বাক্সের আগে প্রাকদর্শন দেখানো হোক",
"tog-previewonfirst": "প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক",
"userlogin-resetlink": "আপনার লগইনের বিস্তারিত তথ্যাদি ভুলে গেছেন?",
"userlogin-resetpassword-link": "পাসওয়ার্ড ভুলে গেছেন?",
"userlogin-helplink2": "লগইন সংক্রান্ত সাহায্য",
- "userlogin-loggedin": "আপনি বর্তমানে {{GENDER:$1|$1}} হিসাবে লগইন আছেন।\nঅন্য ব্যবহারকারী নামে লগইন করতে চাইলে নিচের ফর্মটি ব্যবহার করুন।",
- "userlogin-createanother": "আরেকটি অ্যাকাউন্ট তৈরি করুন",
"createacct-emailrequired": "ইমেইল ঠিকানা",
"createacct-emailoptional": "ইমেইল ঠিকানা (ঐচ্ছিক)",
"createacct-email-ph": "আপনার ইমেইল ঠিকানা যোগ করুন",
"showpreview": "প্রাকদর্শন",
"showdiff": "পরিবর্তনসমূহ",
"blankarticle": "<strong>সতর্ক বার্তা:</strong> আপনি একটি খালি পাতা তৈরী করতে যাচ্ছেন।\nআপনি যদি পুনরায় \"{{int:savearticle}}\" বাটন ক্লিক করেন তাহলে, পাতাটি তৈরী হবে যেখানে কোনো তথ্য লেখা নেই।",
- "anoneditwarning": "আপনি লগ ইন করেননি। এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি সংখ্যা সংরক্ষিত হবে।",
+ "anoneditwarning": "<strong>সতর্কতা:</strong> আপনি বর্তমানে প্রবেশ করেননি। যদি আপনি সম্পাদনা করেন এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি ঠিকানা সার্বজনীনভাবে সংরক্ষিত হবে। যদি আপনি <strong>[$1 প্রবেশ করেন]</strong> বা <strong>[$2 একটি অ্যাকাউন্ট তৈরি করেন]</strong>, তাহলে আপনি আপনার আইপি ঠিকানা গোপন রাখতে পারবেন ও অন্যান্য অনেক কিছু সুবিধা পাবেন।",
"anonpreviewwarning": "আপনি লগ ইন করেননি। এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি সংখ্যা সংরক্ষিত হবে।",
"missingsummary": "'''খেয়াল করুন''': আপনি কিন্তু সম্পাদনার সারাংশ দেননি। আবার যদি \"সংরক্ষণ\" বোতামে ক্লিক করেন, তাহলে ঐ সারাংশ বাক্যটি ছাড়াই আপনার সম্পাদনা সংরক্ষিত হবে।",
"missingcommenttext": "দয়া করে নিচে মন্তব্য যোগ করুন।",
"right-deletedtext": "অপরাসারিত সংশোধনের অপরাসারিত লেখা এবং পরিবর্তনসমূহ দেখাও",
"right-browsearchive": "অপসারিত পাতা অনুসন্ধান করো",
"right-undelete": "পাতাটি পুনরুদ্ধার করুন",
- "right-suppressrevision": "প্রশাসকদের থেকে লুকানো সংস্করণগুলো রিভিউ এবং রিস্টোর করুন",
+ "right-suppressrevision": "যেকোন ব্যবহারকারী থেকে পাতার নির্দিষ্ট সংশোধন দেখুন, আড়াল করুন এবং অ-আড়াল করুন",
+ "right-viewsuppressed": "সকল ব্যবহারকারীর জন্য লুকিয়াত সংশোধন প্রদর্শন কর",
"right-suppressionlog": "ব্যক্তিগত লগ দেখাও",
"right-block": "সম্পাদনা করতে কোনো ব্যবহারকারীকে বাঁধা দাও",
"right-blockemail": "ই-মেইল পাঠাতে কোনো ব্যবহারকারীকে বাঁধা দাও",
"largefileserver": "সার্ভারে যতখানি অনুমোদিত তার চেয়ে এই ফাইলের আকার বড়।",
"emptyfile": "আপনি যে ফাইলটি আপলোড করেছেন, তা খালি মনে হচ্ছে। ফাইলের নামে টাইপিং ত্রুটির কারণে এরকম হতে পারে। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি আসলেই এই ফাইলটি আপলোড করতে চান কি না।",
"windows-nonascii-filename": "এই উইকি বিশেষ ক্যারেক্টারসমৃদ্ধ ফাইলের নাম সমর্থন করে না।",
- "fileexists": "এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান। অনুগ্রহ করে <strong>[[:$1]]</strong> পরীক্ষা করে দেখুন, যদি আপনি এটি পরিবর্তনের ব্যাপারে নিশ্চিত না হন। [[$1|thumb]]",
+ "fileexists": "এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান, অনুগ্রহ করে <strong>[[:$1]]</strong> পরীক্ষা করে দেখুন, যদি আপনি এটি পরিবর্তনের ব্যাপারে নিশ্চিত না হন। [[$1|thumb]]",
"filepageexists": "এই ফাইলের বর্ণনা পাতা এখানে <strong>[[:$1]]</strong> তৈরী করা হয়েছে, কিন্তু এই নামের কোনো ফাইল নেই।\nআপনার লেখা তথ্যগুলো বর্ণনা পাতায় যোগ করা যাচ্ছে না।\nতথ্যটি সংযোজনের জন্য আপনাকে ম্যানুয়ালী এই পাতাটি সম্পাদনা করতে হবে।\n[[$1|thumb]]",
- "fileexists-extension": "à¦\8fà¦\95à¦\87 নামà§\87র à¦\86রà§\87à¦\95à¦\9fি ফাà¦\87ল à¦\86à¦\9bà§\87: [[$2|thumb]]\n* à¦\86পলà§\8bড à¦\95রা ফাà¦\87লà§\87র নাম: <strong>[[:$1]]</strong>\n* à¦\8fà¦\95à¦\87 নামà§\87 বরà§\8dতমান ফাà¦\87লà§\87র নাম: <strong>[[:$2]]</strong>\nà¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦\8fà¦\95à¦\9fি à¦à¦¿à¦¨à§\8dন নাম পà¦\9bনà§\8dদ à¦\95রà§\81ন।",
+ "fileexists-extension": "à¦\8fà¦\95à¦\87 নামà§\87র à¦\86রà§\87à¦\95à¦\9fি ফাà¦\87ল à¦\86à¦\9bà§\87: [[$2|thumb]]\n* à¦\86পলà§\8bড à¦\95রা ফাà¦\87লà§\87র নাম: <strong>[[:$1]]</strong>\n* à¦\8fà¦\95à¦\87 নামà§\87 বরà§\8dতমান ফাà¦\87লà§\87র নাম: <strong>[[:$2]]</strong>\nà¦\86পনি à¦\95ি à¦\86রà§\8b à¦\8fà¦\95à¦\9fি সà§\8dবতনà§\8dতà§\8dর নাম বà§\8dযবহার à¦\95রতà§\87 à¦\9aান?",
"fileexists-thumbnail-yes": "ফাইলটি একটি সংক্ষেপিত আকারের ছবি ''(থাম্বনেইল)'' বলে মনে হচ্ছে। [[$1|thumb]]\nঅনুগ্রহ করে <strong>[[:$1]]</strong> ফাইলটি পরীক্ষা করে দেখুন।\nযদি পরীক্ষাকৃত ফাইলটি একই ছবির মূল আকার হয়, তবে একটি অতিরিক্ত থাম্বনেইল আপলোড করার প্রয়োজন নেই।",
"file-thumbnail-no": "ফাইলের নামটি <strong>$1</strong> দিয়ে শুরু হয়েছে।\nমনে হচ্ছে এটি একটি সংকুচিত আকারের ছবি ''(থাম্বনেইল)''।\nআপনার কাছে যদি পূর্ণ রেজোলিউশনের ছবিটি থাকে, তবে সেটি আপলোড করুন, নতুবা অনুগ্রহ করে ফাইলের নামটি পরিবর্তন করুন।",
"fileexists-forbidden": "এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান, এবং এটি প্রতিস্থাপনযোগ্য নয়।\nআপনি যদি এখনো ফাইলটি আপলোড করতে চান, তবে অনুগ্রহপূর্বক পেছনে গিয়ে একটি নতুন নামে ফাইলটি আপলোড করুন।\n[[File:$1|thumb|center|$1]]",
"nolicense": "কিছুই নির্বাচন করা হয়নি",
"licenses-edit": "লাইসেন্স অপশন সম্পাদনা করুন",
"license-nopreview": "(প্রাকদর্শন লভ্য নয়)",
- "upload_source_url": " (à¦\8fà¦\95à¦\9fি বà§\88ধ, à¦\89নà§\8dমà§\81à¦\95à§\8dত URL)",
- "upload_source_file": " (আপনার কম্পিউটারের একটি ফাইল)",
+ "upload_source_url": " (à¦\86পনি à¦\8fà¦\95à¦\9fি বà§\88ধ, à¦\89নà§\8dমà§\81à¦\95à§\8dত URL থà§\87à¦\95à§\87 ফাà¦\87ল à¦\9aয়ন à¦\95রà§\87à¦\9bà§\87ন)",
+ "upload_source_file": "(আপনার কম্পিউটারের একটি ফাইল)",
"listfiles-delete": "অপসারণ",
"listfiles-summary": "এই বিশেষ পাতাটি আপলোড করা সকল ফাইল প্রদর্শন করে।",
"listfiles_search_for": "ছবির নাম অনুসন্ধান:",
"filedelete-maintenance": "রক্ষণাবেক্ষণের সময় ফাইল অপরাসণ এবং পুনরুদ্ধার সাময়িকভাবে নিস্ক্রিয় রয়েছে।",
"filedelete-maintenance-title": "ফাইলটি অপসারণ করা সম্ভব নয়",
"mimesearch": "MIME অনুসন্ধান",
- "mimesearch-summary": "এই পাতার মাধ্যমে MIME-ধরন অনুসারে ফাইলগুলিকে ফিল্টার করা যায়। ইনপুট: contenttype/subtype, যেমন <code>image/jpeg</code>।",
+ "mimesearch-summary": "এই পাতা তাদের MIME-এর ধরণের জন্য ফাইল ফিল্টার করা সক্ষম করে। ইনপুট: contenttype/subtype বা contenttype/*, উদা: <code>image/jpeg</code>।",
"mimetype": "MIME ধরন:",
"download": "ডাউনলোড",
"unwatchedpages": "নজরে না রাখা পাতাগুলি",
"trackingcategories": "বিষয়শ্রেণীসমূহ অনুসরণ করা হচ্ছে",
"trackingcategories-msg": "বিষয়শ্রেণী অনুসরণ করা হচ্ছে",
"trackingcategories-name": "বার্তা নাম",
+ "broken-file-category-desc": "এই পাতায় একটি ভাঙ্গা ফাইলের লিঙ্ক রয়েছে (একটি ফাইল এম্বেড করার জন্য একটি লিঙ্ক যখন ফাইলটির অস্তিত্ব নেই)",
"trackingcategories-nodesc": "কোন বর্ণনা নেই।",
"trackingcategories-disabled": "বিষয়শ্রেণীটি বিকল",
"mailnologin": "প্রাপকের ঠিকানা নেই",
"delete-edit-reasonlist": "অপসারণের কারণ সম্পাদনা",
"delete-toobig": "এই পাতার সম্পাদনার ইতিহাস অনেক বড়, যা $1টি {{PLURAL:$1|সংস্করণের|সংস্করণের}} বেশি।\n{{SITENAME}}-এর দূর্ঘটনাজনিত সমস্যা এড়াতে এই ধরনের পাতা মুছার ব্যপারে সীমাবদ্ধতা আরোপিত হয়েছে।",
"delete-warning-toobig": "এই পাতাটির একটি বৃহৎ সম্পাদনা ইতিহাস রয়েছে, যা $1 {{PLURAL:$1|সংস্করণেরও|সংস্করণেরও}} বেশি।\nএই পাতাটি মুছে ফেললে তা {{SITENAME}} সাইটের ডেটাবেজ সমস্যার কারণ হতে পারে;\nসাবধানতার সাথে এগিয়ে যান।",
+ "deleteprotected": "আপনি এই পাতাটি মুছে ফেলতে পারবেন না কারণ এটি সুরক্ষিত করা হয়েছে।",
"deleting-backlinks-warning": "'''সতর্কীকরণ:''' আপনি যেটি মুছে ফেলতে যাচ্ছেন তা [[Special:WhatLinksHere/{{FULLPAGENAME}}|অন্যান্য পাতাসমূহে]] সংযুক্ত অথবা অন্তর্ভুক্ত রয়েছে।",
"rollback": "সম্পাদনা ফিরিয়ে নিন",
"rollback_short": "ফিরিয়ে নিন",
"import": "পাতা আমদানি",
"importinterwiki": "আন্তঃউইকি আমদানি",
"import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nসমস্ত আন্তঃউইকি আমদানিগুলি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
+ "import-interwiki-sourcewiki": "উত্স উইকি:",
"import-interwiki-sourcepage": "উৎস পাতা:",
"import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক",
"import-interwiki-templates": "সকল টেম্পলেট অন্তর্ভুক্ত",
"import-upload": "XML ডাটা আপলোড",
"import-token-mismatch": "সেশন ডাটা হারিয়ে গিয়েছে।\nঅনুগ্রহ করে পুনরায় চেষ্টা করুন।",
"import-invalid-interwiki": "নির্ধারিত উইকি থেকে আমদানী করা যাবে না।",
- "import-error-edit": "Page \"$1\" was not imported because you are not allowed to edit it.",
+ "import-error-edit": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ আপনার এটি সম্পাদনা করার অনুমতি নেই।",
"import-error-create": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।",
"import-error-interwiki": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ এই নামটি বহিঃসংযোগর জন্য নির্ধারিত (ইন্টারউইকি)।",
- "import-error-special": "\"$1\" পাতাà¦\9fি à¦\87মà§\8dপà§\8bরà§\8dà¦\9f করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
+ "import-error-special": "\"$1\" পাতাà¦\9fি à¦\86মদানি করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
"import-error-invalid": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ নামটি সঠিক নয়।",
"import-error-unserialize": "$1 পাতার $2 সংস্করণটি সিরিয়ালাইজ করা যাচ্ছে না। এই রিভিশনে $4 হিসাবে $3 কন্টেন্ট মডেলে সিরিয়ালাইজ করা আছে।",
"import-options-wrong": "ভুল {{PLURAL:$2|অপশন|অপশনসমূহ}}: <nowiki>$1</nowiki>",
"invalidtitle-knownnamespace": "Titl direizh gant an esaouenn anv \"$2\" hag an destenn \"$3\"",
"invalidtitle-unknownnamespace": "Titl direizh gant an niverenn esaouenn anv $1 hag an destenn \"$2\" dianav",
"exception-nologin": "N'oc'h ket kevreet",
- "exception-nologin-text": "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet er wiki-mañ.",
+ "exception-nologin-text": "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet.",
"exception-nologin-text-manual": "$1, mar plij, evit gallout mont d'ar bajenn-mañ pe ober an dra-mañ",
"virus-badscanner": "Kefluniadur fall : skanner viruzoù dianav : ''$1''",
"virus-scanfailed": "Skannadenn c'hwitet (kod $1)",
"userlogin-resetlink": "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
"userlogin-resetpassword-link": "Ankouaet ho ker-tremen ganeoc'h ?",
"userlogin-helplink2": "Skoazell evit kevreañ",
- "userlogin-loggedin": "Kevreet oc'h dija evel {{GENDER:$1|$1}}.\nImplijit ar furmskrid amañ dindan evit kevreañ evel un implijer all.",
- "userlogin-createanother": "Krouiñ ur gont all",
"createacct-emailrequired": "Chomlec'h postel",
"createacct-emailoptional": "Chomlec'h postel (diret)",
"createacct-email-ph": "Skrivit ho chomlec'h postel",
"parser-template-recursion-depth-warning": "Tizhet bevenn donder galvoù ar patromoù ($1)",
"language-converter-depth-warning": "Aet eur en tu all d'ar vevenn amdreiñ yezhoù ($1)",
"node-count-exceeded-category": "Pajennoù m'eur aet en tu all d'an niver a skoulmoù",
- "node-count-exceeded-warning": "Pajenn a ya en tu all d'an niver a skoulmoù",
+ "node-count-exceeded-category-desc": "Mont a ra ar bajenn-mañ en tu all da gont uhelañ ar skoulmoù.",
+ "node-count-exceeded-warning": "Pajenn hag a ya en tu all d'an niver a skoulmoù",
"expansion-depth-exceeded-category": "Pajennoù m'eur aet dreist d'an donder astenn",
"expansion-depth-exceeded-warning": "Pajenn a ya dreist d'an donder astenn",
"parser-unstrip-loop-warning": "Detektet ez eus bet ul lagadenn n'haller ket divontañ",
"currentrev": "Stumm a-vremañ pe stumm red",
"currentrev-asof": "Stumm red eus an $1",
"revisionasof": "Stumm eus an $1",
- "revision-info": "Stumm eus an $1 gant $2",
+ "revision-info": "Stumm eus an $1 gant $2$7",
"previousrevision": "← Stumm kent",
"nextrevision": "Stumm war-lerc'h →",
"currentrevisionlink": "Gwelet ar stumm red",
"shown-title": "Diskouez $1 {{PLURAL:$1|disoc'h|disoc'h}} dre bajenn",
"viewprevnext": "Gwelet ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''Ur bajenn anvet\"[[:$1]]\" zo war ar wiki-mañ'''",
- "searchmenu-new": "'''Krouiñ ar bajenn \"[[:$1]]\" war ar wiki-mañ !'''",
+ "searchmenu-new": "<strong>Krouiñ ar bajenn \"[[:$1]]\" war ar wiki-mañ !</strong> {{PLURAL:$2|0=|Gwelet ivez ar bajenn kavet gant ho klask.|Gwelet ivez disoc'hoù ar c'hlask.}}",
"searchprofile-articles": "Pajennoù gant boued",
"searchprofile-images": "Liesmedia",
"searchprofile-everything": "Pep tra",
"preferences": "Penndibaboù",
"mypreferences": "Penndibaboù",
"prefs-edits": "Niver a zegasadennoù :",
- "prefsnologintext2": "$1, mar plij, evit cheñch ho penndibaboù.",
+ "prefsnologintext2": "Kevreit evit cheñch ho penndibaboù, mar plij.",
"prefs-skin": "Gwiskadur",
"skin-preview": "Rakwelet",
"datedefault": "Dre ziouer",
"license": "Aotre-implijout :",
"license-header": "Aotre implijout",
"nolicense": "Hini ebet diuzet",
+ "licenses-edit": "Aozañ dibarzhioù an aotre-implijout",
"license-nopreview": "(Dibosupl rakwelet)",
"upload_source_url": " (Un URL reizh a c'hall bezañ tizhet gant an holl)",
- "upload_source_file": " (ur restr war hoc'h urzhiataer)",
+ "upload_source_file": " (ar restr ho peus dibabet en hoc'h urzhiataer)",
"listfiles-delete": "dilemel",
"listfiles-summary": "Diskouez a ra ar bajenn dibar-mañ an holl restroù bet ezporzhiet.",
"listfiles_search_for": "Klask anv ar skeudenn :",
"randomincategory-invalidcategory": "\"$1\" n'eo ket un anv rummad reizh.",
"randomincategory-nopages": "N'eus pajenn ebet e [[:Category:$1]].",
"randomincategory-category": "Rummad :",
+ "randomincategory-legend": "Ur bajenn dre zegouezh er rummad",
"randomredirect": "Ur bajenn adkas dre zegouezh",
"randomredirect-nopages": "N'eus pajenn adkas ebet en esaouenn anv \"$1\".",
"statistics": "Stadegoù",
"doubleredirects": "Adkasoù doubl",
"doubleredirectstext": "Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.\nWar bep linenn ez eus liammoù war-du pajennoù an adkas kentañ hag en eil adkas, hag ivez war-du pajenn-dal an eil adkas zo sañset bezañ ar pal \"gwirion\" a zlefe an adkas kentañ kas di.\nDiskoulmet eo bet an enmontoù <del>barrennet</del>.",
"double-redirect-fixed-move": "Adanvet eo bet [[$1]], adkaset eo war-du [[$2]] bremañ",
- "double-redirect-fixed-maintenance": "O reizhañ an adkas doubl adalek [[$1]] war-zu [[$2]].",
+ "double-redirect-fixed-maintenance": "O reizhañ ent emgefre an adkas doubl adalek [[$1]] war-zu [[$2]] en un trevell trezalc'h.",
"double-redirect-fixer": "Reizher adkasoù",
"brokenredirects": "Adkasoù torret",
"brokenredirectstext": "Kas a ra an adkasoù-mañ da bajennoù n'eus ket anezho.",
"wantedpages-badtitle": "Titl direizh er strollad disoc'hoù : $1",
"wantedfiles": "Restroù a vank",
"wantedfiletext-cat": "Ober a reer gant ar restroù da-heul koulskoude n'eus ket anezho. Gallout a reer rollañ kavlec'hioù diavaez ha pa vefe anezho. <del>Barrennet</del> e vo an holl falspozitivoù-se. Ouzhpenn-se emañ renablet an holl bajennoù zo enno restroù n'eus ket anezho e [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Implijet eo ar restroù-mañ, met n'eus ket anezho. Ouzhpenn-se, emañ ar pajennoù a enframm ar restroù er roll [[:$1]].",
"wantedfiletext-nocat": "Ober a reer gant ar restroù da-heul koulskoude n'eus ket anezho. Gallout a reer rollañ kavlec'hioù diavaez ha pa vefe anezho. <del>Barrennet</del> e vo an holl falspozitivoù-se.",
"wantedfiletext-nocat-noforeign": "Implijet e vez ar restroù-mañ met n'eus ket anezho.",
"wantedtemplates": "Patromoù a vank",
"mostlinked": "Pajennoù dezho al liammoù niverusañ",
"mostlinkedcategories": "Rummadoù dezho al liammoù niverusañ",
- "mostlinkedtemplates": "Patromoù implijet ar muiañ",
+ "mostlinkedtemplates": "Pajennoù enframmet ar muiañ",
"mostcategories": "Pennadoù rummatet ar muiañ",
"mostimages": "Skeudennoù implijet ar muiañ",
"mostinterwikis": "Pajennoù gant an niver brasañ a etrewikioù",
"listgrouprights-addgroup-self-all": "Gallout a ra ouzhpennañ an holl strolladoù da gont an-unan",
"listgrouprights-removegroup-self-all": "Gallout a ra tennañ kuit an holl strolladoù eus kont an-unan.",
"listgrouprights-namespaceprotection-namespace": "Esaouenn anv",
+ "listgrouprights-namespaceprotection-restrictedto": "Gwir(ioù) hag a aotre an implijer da aozañ",
+ "trackingcategories": "Rummadoù evezhiañ",
+ "trackingcategories-msg": "Rummad evezhiañ",
"trackingcategories-name": "Anv ar gemennadenn",
+ "broken-file-category-desc": "Er bajenn-mañ ez eus ul liamm restr torr (ul liamm da enframmañ ur restr pa n'eus ket eus ar restr-se).",
"trackingcategories-nodesc": "N'eus deskrivadur ebet.",
"trackingcategories-disabled": "Diweredekaet eo ar rummad",
"mailnologin": "Chomlec'h ebet",
"mywatchlist": "Ma roll evezhiañ",
"watchlistfor2": "Evit $1 $2",
"nowatchlist": "N'eus pennad ebet en ho roll evezhiañ.",
- "watchlistanontext": "Ret eo deoc'h $1 evit gwelet pe kemmañ an elfennoù zo en ho roll evezhiañ.",
+ "watchlistanontext": "Ret eo deoc'h kevreañ evit gwelet pe aozañ an elfennoù a zo en ho roll evezhiañ.",
"watchnologin": "Digevreet",
"addwatch": "Ouzhpennañ d'ar roll evezhiañ",
"addedwatchtext": "Ouzh ho [[Special:Watchlist|rollad evezhiañ]] eo bet ouzhpennet ar bajenn \"[[:$1]]\".\nAmañ e vo rollet ar c'hemmoù da zont evit ar bajenn-mañ hag ar bajenn gaozeal stag outi.",
"unwatchthispage": "Paouez da evezhiañ",
"notanarticle": "Pennad ebet",
"notvisiblerev": "Stumm diverket",
- "watchlist-details": "Lakaet hoc'h eus {{PLURAL:$1|$1 bajenn|$1 pajenn}} dindan evezh, anez kontañ ar pajennoù kaozeal.",
+ "watchlist-details": "Lakaet hoc'h eus {{PLURAL:$1|$1 bajenn|$1 a bajennoù}} war ho roll evezhiañ, anez kontañ ar pajennoù kaozeal.",
"wlheader-enotif": "Gweredekaet eo ar c'has posteloù.",
"wlheader-showupdated": "E '''tev''' emañ merket ar pajennoù bet kemmet abaoe ar wezh ziwezhañ hoc'h eus sellet outo",
- "wlnote": "Setu aze {{PLURAL:$1|ar c'hemm diwezhañ|ar '''$1''' kemm diwezhañ}} c'hoarvezet e-kerzh an {{PLURAL:$2|eurvezh|'''$2''' eurvezh}} ziwezhañ, evit an $3 da $4.",
+ "wlnote": "Setu aze {{PLURAL:$1|ar c'hemm diwezhañ|ar '''$1''' kemm diwezhañ}} c'hoarvezet e-kerzh an {{PLURAL:$2|eurvezh|'''$2''' eurvezh}} diwezhañ, d'an $3 da $4.",
"wlshowlast": "Diskouez an $1 eurvezh $2 devezh diwezhañ $3",
"watchlist-options": "Dibarzhioù ar roll evezhiañ",
"watching": "Heuliet...",
"exbeforeblank": "A-raok diverkañ e oa an endalc'had : '$1'",
"delete-confirm": "Diverkañ \"$1\"",
"delete-legend": "Diverkañ",
- "historywarning": "'''Diwallit :''' Emaoc'h war-nes diverkañ ur bajenn dezhi un istor gant e-tro {{PLURAL:$1|adweladenn|adweladenn}} :",
+ "historywarning": "<strong>Diwallit :</strong> Emaoc'h war-nes diverkañ ur bajenn dezhi un istor gant {{PLURAL:$1|adweladenn}} :",
"confirmdeletetext": "War-nes diverkañ da viken ur bajenn pe ur skeudenn eus ar bank roadennoù emaoc'h. Diverket e vo ivez an holl stummoù kozh stag outi.\nKadarnait, mar plij, eo mat an dra-se hoc'h eus c'hoant da ober, e komprenit mat an heuliadoù, hag e rit se diouzh ar [[{{MediaWiki:Policy-url}}]].",
"actioncomplete": "Diverkadenn kaset da benn",
"actionfailed": "Ober c'hwitet",
"delete-edit-reasonlist": "Kemmañ a ra an abegoù diverkañ",
"delete-toobig": "Bras eo istor ar bajenn-mañ, ouzhpenn $1 {{PLURAL:$1|stumm|stumm}} zo. Bevennet eo bet an diverkañ pajennoù a-seurt-se kuit da zegas reuz war {{SITENAME}} dre fazi .",
"delete-warning-toobig": "Bras eo istor ar bajenn-mañ, ouzhpenn {{PLURAL:$1|stumm|stumm}} zo.\nDiverkañ anezhi a c'hallo degas reuz war mont en-dro diaz titouroù {{SITENAME}};\ntaolit evezh bras.",
+ "deleteprotected": "Ne c'hallit ket dilemel ar bajenn-mañ rak gwarezet eo bet.",
"rollback": "disteuler ar c'hemmoù",
"rollback_short": "Disteuler",
"rollbacklink": "disteuler",
"alreadyrolled": "Dibosupl eo disteuler ar c'hemm diwezhañ graet d'ar bajenn [[:$1]] gant [[User:$2|$2]] ([[User talk:$2|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\nkemmet pe distaolet eo bet c'hoazh gant unan bennak all.\n\nAr c'hemm diwezhañ d'ar bajenn-mañ a oa bet graet gant [[User:$3|$3]] ([[User talk:$3|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
"editcomment": "Diverradenn ar c'hemm a oa : \"''$1''\".",
"revertpage": "Kemmoù distaolet gant [[Special:Contributions/$2|$2]] ([[User talk:$2|Kaozeal]]); adlakaet d'ar stumm diwezhañ a-gent gant [[User:$1|$1]]",
- "revertpage-nouser": "Disteuler kemmoù un implijer kuzhet ha distreiñ d'ar stumm diwezhañ gant [[User:$1|$1]]",
+ "revertpage-nouser": "Disteuler kemmoù un implijer kuzhet ha distreiñ d'ar stumm diwezhañ gant an {{GENDER:$1|[[implijer :$1|$1]]}}",
"rollback-success": "Disteuler kemmoù $1; distreiñ da stumm diwezhañ $2.",
"sessionfailure-title": "Fazi dalc'h",
"sessionfailure": "Evit doare ez eus ur gudenn gant ho talc'h;\nNullet eo bet an ober-mañ a-benn en em wareziñ diouzh an tagadennoù preizhañ.\nKlikit war \"kent\" hag adkargit ar bajenn oc'h deuet drezi; goude klaskit en-dro.",
"autoblockid": "Emstankañ #$1",
"block": "Stankañ an implijer",
"unblock": "Distankañ an implijer",
- "blockip": "Stankañ ur chomlec'h IP",
+ "blockip": "Stankañ an {{GENDER:$1|implijer|implijerez}}",
"blockip-legend": "Stankañ an implijer",
"blockiptext": "Grit gant ar furmskrid a-is evit stankañ ar moned skrivañ ouzh ur chomlec'h IP pe un implijer bennak.\nSeurt diarbennoù n'hallont bezañ kemeret nemet evit mirout ouzh ar vandalerezh hag a-du gant an [[{{MediaWiki:Policy-url}}|erbedadennoù ha reolennoù da heuliañ]].\nRoit a-is an abeg resis (o verkañ, da skouer, roll ar pajennoù bet graet gaou outo).",
"ipaddressorusername": "Chomlec'h IP pe anv implijer",
"blockipsuccesstext": "Stanket eo bet [[Special:Contributions/$1|$1]].<br />\nSellit ouzh [[Special:BlockList|roll ar chomlec'hioù IP ha kontoù stanket]] evit gwiriañ ar stankadennoù.",
"ipb-blockingself": "Emaoc'h war-nes stankañ ac'hanoc'h hoc'h-unan ! Ha sur oc'h eo se a fell deoc'h ober ?",
"ipb-confirmhideuser": "Emaoc'h war-nes stankañ un implijer ha gweredekaet hoc'h eus \"kuzhat an implijer\". Diverkañ a ra an dra-se anv an implijer en holl rolloù ha monedoù ar marilh.",
+ "ipb-confirmaction": "A'z oc'h sur e fell deoc'h ober an dra-se evit gwir, askit ar vaezienn \"{{int:ipb-confirm}}\" en traoñ.",
"ipb-edit-dropdown": "Kemmañ an abegoù stankañ",
"ipb-unblock-addr": "Distankañ $1",
"ipb-unblock": "Distankañ un implijer pe ur chomlec'h IP",
"cant-move-user-page": "Noc'h ket aotreet da adenvel pajennoù pennañ an implijerien (er-maez eus o ispajennoù).",
"cant-move-to-user-page": "Noc'h ket aotreet da adenvel ur bajenn gant anv hini un implijer all (nemet un ispajenn e vefe).",
"cant-move-category-page": "N'oc'h ket aotreet da zilec'hiañ pajennoù rummad.",
+ "cant-move-to-category-page": "N'oc'h ket aotreet da zilec'hiañ ur bajenn d'ur bajenn rummad.",
"newtitle": "anv nevez",
"move-watch": "Evezhiañ ar bajenn-mañ",
"movepagebtn": "Adenvel ar pennad",
"import": "Enporzhiañ pajennoù",
"importinterwiki": "enporzhiadenn etrewiki",
"import-interwiki-text": "Diuzit ur wiki hag ur bajenn da enporzhiañ.\nMiret e vo deiziadoù ar stummmoù hag anvioù an aozerien.\nMiret eo an holl enporzhiadennoù etrewiki e-barzh [[Special:Log/import|log an enporzhiadennoù]].",
+ "import-interwiki-sourcewiki": "Wiki mammenn :",
+ "import-interwiki-sourcepage": "Pajenn orin :",
"import-interwiki-history": "Eilañ holl stummoù istor ar bajenn-mañ",
"import-interwiki-templates": "Lakaat e-barzh an holl batromoù",
"import-interwiki-submit": "Enporzhiañ",
"import-error-create": "N'eo ket bet enporzhiet ar bajenn \"$1\" peogwir n'oc'h ket aotreet da grouiñ anezhi.",
"import-error-interwiki": "Ne vez ket enporzhiet ar bajenn \"$1\" rak miret eo an anv evit liammoù diavaez (etrewiki).",
"import-error-special": "Ne vez ket enporzhiet ar bajenn \"$1\" rak stag eo ouzh un esaouenn anv dibar na aotre ket pajennoù.",
- "import-error-invalid": "Ne vez ket enporzhiet ar bajenn \"$1\" rak direizh eo hec'h anv.",
+ "import-error-invalid": "N'eo ket bet enporzhiet ar bajenn \"$1\" rak direizh e vefe hec'h anv er wiki-mañ.",
"import-options-wrong": "{{PLURAL:$2|Dibab fall|Dibaboù fall}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Pourchas a ra ar bennbajenn un titl n'eo ket reizh.",
"import-rootpage-nosubpage": "Esaouenn anvioù \"$1\" eus ar bennpajenn ne aotre ket an ispajennoù.",
"importlogpage": "Log an enporzhiadennoù",
"importlogpagetext": "Enporzhiadennoù melestradurel eus pajennoù adal wikioù all gant istor ar c'hemmadennoù degaset enno.",
"import-logentry-upload": "en/he deus enporzhiet (pellgarget) [[$1]]",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|stumm|stumm}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet",
"import-logentry-interwiki": "treuzwikiet $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|c'hemm|kemm}} abaoe $2",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|adweladenn}} enporzhiet eus $2",
"javascripttest": "Amprouadenn JavaScript",
"javascripttest-title": "Emeur o seveniñ $1 amprouadenn",
"javascripttest-pagetext-noframework": "Miret eo ar bajenn-mañ evit amprouiñ JavaScript.",
"newimages-summary": "Diskouez a ra ar bajenn dibar-mañ roll ar restroù diwezhañ bet enporzhiet.",
"newimages-legend": "Sil",
"newimages-label": "Anv ar restr (pe darn anezhi) :",
+ "newimages-showbots": "Diskouez an ezporzhiadennoù graet gant robotoù",
"noimages": "Netra da welet.",
"ilsubmit": "Klask",
"bydate": "dre an deiziad anezho",
"watchlistedit-raw-done": "Nevesaet eo bet ho roll evezhiañ.",
"watchlistedit-raw-added": "Ouzhpennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :",
"watchlistedit-raw-removed": "Tennet ez eus bet {{PLURAL:$1|1 pajenn|$1 pajenn}} :",
+ "watchlistedit-clear-title": "Roll evezhiañ goulloet",
"watchlistedit-clear-legend": "Diverkañ ar roll-evezhiañ",
+ "watchlistedit-clear-explain": "Lamet e vo an holl ditloù eus ho roll evezhiañ",
"watchlistedit-clear-titles": "Titloù :",
+ "watchlistedit-clear-done": "Goulloet eo bet ho roll evezhiañ.",
"watchlistedit-clear-removed": "Dilamet ez eus bet {{PLURAL:$1|1 titl|$1 a ditloù}} :",
"watchlistedit-too-many": "Re a bajennoù zo da ziskwel amañ.",
"watchlisttools-clear": "Diverkañ ar roll-evezhiañ",
"fileduplicatesearch-noresults": "N'eus bet kavet restr ebet anvet \"$1\".",
"specialpages": "Pajennoù dibar",
"specialpages-note-top": "Alc'hwez",
- "specialpages-note": "* Pajennoù dibar boutin.\n* <span class=\"mw-specialpagerestricted\">Pajennoù dibar miret strizh.</span>\n* <span class=\"mw-specialpagecached\">Pajennoù dibar krubuilhet hepken (a c'hellfe bezañ re gozh).</span>",
+ "specialpages-note": "* Pajennoù dibar ordinal.\n* <span class=\"mw-specialpagerestricted\">Pajennoù dibar miret strizh.</span>",
"specialpages-group-maintenance": "Rentaoù-kont trezalc'h",
"specialpages-group-other": "Pajennoù dibar all",
"specialpages-group-login": "Kevreañ / krouiñ ur gont",
"logentry-newusers-byemail": "Krouet eo bet ar gont implijer $3 gant $1 ha kaset eo bet ar ger-tremen dre bostel",
"logentry-newusers-autocreate": "{{GENDER:$2|Krouet}} eo bet kont $1 ent emgefre",
"logentry-rights-autopromote": "$1 zo bet {{GENDER:$2|anvet}} ent emgefre a $4 da $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet ur stumm nevez eus $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|en deus|he deus}} ezporzhiet $3",
"rightsnone": "(netra)",
"feedback-bugornote": "Ma'z oc'h prest da zeskrivañ ur gudenn deknikel dre ar munud e c'hallit [$1 kemenn un draen].\nA-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc'h evezhiadenn d'ar bajenn \"[$3 $2]\", a-gevret gant hoc'h anv implijer hag anv ar merdeer a rit gantañ.",
"feedback-subject": "Danvez :",
"pagelang-select-lang": "Dibab ar yezh",
"right-pagelang": "Cheñch yezh ar bajenn",
"action-pagelang": "cheñch yezh ar bajenn",
+ "log-name-pagelang": "Cheñch yezh",
+ "log-description-pagelang": "Hemañ zo ur marilh eus ar c'hemmoù e pajenn ar yezhoù.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|en deus|he deus}} cheñchet yezh ar bajenn evit $3 eus $4 da $5.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gweredekaet)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''diweredekaet''')"
}
"permalink": "Trajni link",
"print": "Štampa",
"view": "Pogled",
+ "view-foreign": "Vidi na $1",
"edit": "Uredi",
+ "edit-local": "Uredi lokalni opis",
"create": "Napravi",
+ "create-local": "Dodaj lokalni opis",
"editthispage": "Uredite ovu stranicu",
"create-this-page": "Napravi ovu stranicu",
"delete": "Obriši",
"jumptonavigation": "navigacija",
"jumptosearch": "traži",
"view-pool-error": "Žao nam je, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pregleda ovu stranicu.\nMolimo pričekajte trenutak prije nego što ponovno pokušate pristupiti ovoj stranici.\n\n$1",
+ "generic-pool-error": "Nažalost, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da vidi ovaj resurs.\nMolimo pričekajte trenutak prije nego što ponovo pokušate da mu pristupite.",
"pool-timeout": "Zaustavi čekanje na zaključavanje",
"pool-queuefull": "Red na pool je prenapunjen",
"pool-errorunknown": "Nepoznata greška",
"hidetoc": "sakrij",
"collapsible-collapse": "sklopi",
"collapsible-expand": "Proširi",
+ "confirmable-confirm": "Da li {{GENDER:$1|ste}} sigurni?",
+ "confirmable-yes": "Da",
+ "confirmable-no": "Ne",
"thisisdeleted": "Pogledaj ili vrati $1?",
"viewdeleted": "Pogledaj $1?",
"restorelink": "{{PLURAL:$1|$1 izbrisana izmjena|$1 izbrisanih izmjena}}",
"nospecialpagetext": "<strong>Tražili ste nevaljanu posebnu stranicu.</strong>\n\nSpisak valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Greška",
"databaseerror": "Greška u bazi",
+ "databaseerror-text": "Došlo je do greške u upitu baze podataka. \nMožda je u pitanju softverska greška.",
+ "databaseerror-textcl": "Došlo je do greške u upitu baze podataka.",
+ "databaseerror-query": "Upit: $1",
"databaseerror-function": "Funkcija: $1",
"databaseerror-error": "Greška: $1",
"laggedslavemode": "'''Upozorenje''': Stranica, možda, nije ažurirana.",
"invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom \"$2\" i tekstom \"$3\"",
"invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom \"$2\"",
"exception-nologin": "Niste prijavljeni",
- "exception-nologin-text": "[[Special:Userlogin|Prijavite se]] da biste pristupili ovoj stranici ili radnji.",
+ "exception-nologin-text": "Prijavite se da biste pristupili ovoj stranici ili radnji.",
+ "exception-nologin-text-manual": "Molimo $1 da biste pristupili ovoj stranici ili radnji.",
"virus-badscanner": "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
"virus-scanfailed": "skeniranje nije uspjelo (code $1)",
"virus-unknownscanner": "nepoznati anti-virus program:",
"userlogin-resetlink": "Zaboravili ste detalje vaše prijave?",
"userlogin-resetpassword-link": "Zaboravili ste lozinku?",
"userlogin-helplink2": "Pomoć pri prijavljivanju",
- "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nKoristite donji obrazac da biste se prijavili kao drugi korisnik.",
- "userlogin-createanother": "Napravi još jedan račun",
"createacct-emailrequired": "Adresa e-pošte",
"createacct-emailoptional": "Adresa e-pošte (opcionalno)",
"createacct-email-ph": "Unesite Vašu adresu e-pоšte",
"retypenew": "Unesite ponovo novu šifru:",
"resetpass_submit": "Odredi šifru i prijavi se",
"changepassword-success": "Vaša šifra/lozinka je uspiješno promjenjena!",
+ "changepassword-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
"resetpass_forbidden": "Šifre ne mogu biti promjenjene",
"resetpass-no-info": "Morate biti prijavljeni da bi ste pristupili ovoj stranici direktno.",
"resetpass-submit-loggedin": "Promijeni šifru",
"resetpass-submit-cancel": "Odustani",
"resetpass-wrong-oldpass": "Privremena ili trenutna šifra nije validna.\nMožda ste već uspješno promijenili Vašu šifru ili ste tražili novu privremenu šifru.",
+ "resetpass-recycled": "Molimo resetirajte vašu lozinku u nešto drugo od vaše trenutne lozinke.",
+ "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovdje:",
"resetpass-temp-password": "Privremena šifra:",
"resetpass-abort-generic": "Promjenu šifre/lozinke je prekinula ekstenzija.",
+ "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.",
"passwordreset": "Poništavanje šifre",
"passwordreset-text-one": "Ispunite ovaj obrazac da biste resetovali Vašu šifru/lozinku.",
"passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku putem e-pošte.}}",
"changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
"changeemail-submit": "Promijeni e-mail",
"changeemail-cancel": "Otkaži",
+ "resettokens-token-label": "$1 (trenutna vrijednost: $2)",
"bold_sample": "Podebljan tekst",
"bold_tip": "Podebljan tekst",
"italic_sample": "Kurzivan tekst",
"edit-gone-missing": "Stranica se nije mogla osvježiti.\nIzgleda da je obrisana.",
"edit-conflict": "Sukob izmjena.",
"edit-no-change": "Vaša izmjena je ignorirana, jer nije bilo promjena teksta stranice.",
+ "postedit-confirmation-created": "Stranica je napravljena.",
"postedit-confirmation-saved": "Vaša izmjena je sačuvana.",
"edit-already-exists": "Stranica nije mogla biti kreirana.\nIzgleda da već postoji.",
"defaultmessagetext": "Uobičajeni tekst poruke",
"invalid-content-data": "Nevaljani podaci sadržaja",
"content-not-allowed-here": "Sadržaj napisan u obliku \"$1\" nije dozvoljen na stranici [[$2]]",
- "editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u Sekciji za \"Uređivanje\" vaših opcija.",
+ "editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u Sekciji za \"{{int:prefs-editing}}\" vaših opcija.",
+ "editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan",
"content-model-wikitext": "wikitekst",
"content-model-text": "obični tekst",
"content-model-javascript": "JavaScript",
"prefs-displayrc": "Postavke izgleda",
"prefs-displaywatchlist": "Postavke izgleda",
"prefs-diffs": "Razlike",
+ "prefs-help-prefershttps": "Ova podešavanja će stupiti na snagu pri sljedećoj prijavi.",
"email-address-validity-valid": "Izgleda valjano",
"email-address-validity-invalid": "Neophodna valjana adresa!",
"userrights": "Postavke korisničkih prava",
"userrights-notallowed": "Vaš račun nema privilegije da dodaje ili oduzima prava korisnika.",
"userrights-changeable-col": "Grupe koje možete mijenjati",
"userrights-unchangeable-col": "Grupe koje ne možete mijenjati",
- "userrights-conflict": "Sukob u korisničkim pravima! Molimo pošaljite Vaše promjene ponovno.",
+ "userrights-conflict": "Sukob u izmjeni korisničkih prava! Molimo da razmotrite i potvrdite Vaše promjene.",
"userrights-removed-self": "Uspješno ste uklonili vlastite prava. Zbog toga više niste u stanju pristupiti ovoj stranici.",
"group": "Grupa:",
"group-user": "Korisnici",
"license-nopreview": "(Pregled nije dostupan)",
"upload_source_url": " (validni, javno dostupni URL)",
"upload_source_file": " (datoteka na Vašem računaru)",
+ "listfiles-delete": "obriši",
"listfiles-summary": "Ova posebna stranica prikazuje sve postavljene datoteke.",
"listfiles_search_for": "Traži medije po imenu:",
"imgfile": "datoteka",
"randompage": "Slučajna stranica",
"randompage-nopages": "Nema stranica u {{PLURAL:$2|slijedećem imenskom prostoru|slijedećim imenskim prostorima}}: \"$1\".",
"randomincategory": "Slučajna stranica u kategoriji",
- "randomincategory-selectcategory-submit": "Idi",
+ "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
+ "randomincategory-category": "Kategorija:",
+ "randomincategory-legend": "Slučajna stranica u kategoriji",
"randomredirect": "Slučajno preusmjerenje",
"randomredirect-nopages": "Ne postoje preusmjerenja u imenskom prostoru \"$1\".",
"statistics": "Statistike",
"protectedpages-expiry": "Istječe",
"protectedpages-reason": "Razlog",
"protectedpages-unknown-timestamp": "Nepoznato",
+ "protectedpages-unknown-performer": "Nepoznati korisnik",
"protectedtitles": "Zaštićeni naslovi",
"protectedtitlesempty": "Nijedan naslov članka trenutno nije zaštićen ovim parametrima.",
"listusers": "Spisak korisnika",
"listgrouprights-removegroup-self": "Može ukloniti {{PLURAL:$2|grupu|grupe|grupa}} sa svog računa: $1",
"listgrouprights-addgroup-self-all": "Može dodati sve grupe na svoj račun",
"listgrouprights-removegroup-self-all": "Može ukloniti sve grupe sa svog računa",
+ "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
+ "trackingcategories-nodesc": "Opis nije dostupan.",
"mailnologin": "Nema adrese za slanje",
"mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]]\ni imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]\nda biste slali e-poštu drugim korisnicima.",
"emailuser": "Pošalji e-poštu ovom korisniku",
"autoblockid": "Automatska blokada #$1",
"block": "Blokiraj korisnika",
"unblock": "Odblokiraj korisnika",
- "blockip": "Blokiraj korisnika",
+ "blockip": "Blokiraj {{GENDER:$1|korisnika|korisnicu}}",
"blockip-legend": "Blokiranje korisnika",
"blockiptext": "Upotrebite donji upitnik da biste uklonili prava pisanja sa određene IP adrese ili korisničkog imena. Ovo bi trebalo da bude urađeno samo da bi se spriječio vandalizam, i u skladu sa [[{{MediaWiki:Policy-url}}|smjernicama]]. Unesite konkretan razlog ispod (na primjer, navodeći koje stranice su vandalizovane).",
"ipaddressorusername": "IP adresa ili korisničko ime:",
"import": "Uvoz stranica",
"importinterwiki": "Međuwiki uvoz",
"import-interwiki-text": "Izaberi wiki i naslov stranice za uvoz.\nDatumi revizija i imena autora će biti sačuvani.\nSve akcije pri međuwiki uvozu će biti zapisane u [[Special:Log/import|zapisu uvoza]].",
- "import-interwiki-source": "Izvorna wiki/stranica:",
"import-interwiki-history": "Kopiraj sve verzije historije za ovu stranicu",
"import-interwiki-templates": "Uključi sve šablone",
"import-interwiki-submit": "Uvoz",
"version-ext-colheader-license": "Licenca",
"version-ext-colheader-description": "Opis",
"version-ext-colheader-credits": "Autori",
+ "version-license-title": "Licenca za $1",
"version-poweredby-credits": "Ova wiki je zasnovana na '''[https://www.mediawiki.org/ MediaWiki]''', autorska prava zadržana © 2001-$1 $2.",
"version-poweredby-others": "ostali",
"version-credits-summary": "Željeli bismo se zahvaliti sljedećim ljudima na njihovom doprinosu [[Special:Version|MediaWikiju]].",
"expand_templates_remove_comments": "Ukloni komentare",
"expand_templates_remove_nowiki": "Onemogući oznake <nowiki> u rezultatima",
"expand_templates_generate_xml": "Prikaži XML stablo parsera",
- "expand_templates_preview": "Pregled"
+ "expand_templates_preview": "Pregled",
+ "pagelang-name": "Stranica",
+ "pagelang-language": "Jezik",
+ "pagelang-select-lang": "Izaberi jezik"
}
--- /dev/null
+{
+ "@metadata": {
+ "authors": [
+ "Filipinayzd",
+ "Rinconada"
+ ]
+ },
+ "tog-hideminor": "Itago a mga gatikot na pagbalyow sa mga bagong pagribay",
+ "tog-hidepatrolled": "Itago a mga binabantayang na pagbalyow sa mga bagong pagribay",
+ "tog-newpageshidepatrolled": "Itago a mga binabantayan na pagbalyow sa lista ka bagong pahina",
+ "tog-extendwatchlist": "Ibuka a lista ka binabantayan para maipabayad a ngamin na pagribay, buku sana a pinakabago",
+ "tog-usenewrc": "Igrupo a mga pagribay por pahina sa mga bagong pagribay anggan binabantayan",
+ "tog-numberheadings": "Automatikong bilangun a mga titulo",
+ "tog-showtoolbar": "Ipabayad a gamit sa pagbalyow",
+ "tog-editondblclick": "Balyowan a mga pahina sa dobleng click",
+ "tog-watchcreations": "Irugang a mga pahinang kanakong ginibo anggan mga file na isinangat sa kanakong binabantayan",
+ "tog-watchdefault": "Irugang a mga pahinang anggan mga file na binabalyowan ko sa kanakong binabantayan",
+ "tog-watchmoves": "Irugang a mga pahinang anggan mga file na inililipat ko sa kanakong binabantayan",
+ "tog-watchdeletion": "Irugang a mga pahinang anggan mga file na pinupura ko sa kanakong binabantayan",
+ "tog-watchlisthideown": "Itago a kanakong mga pagbalyow sa binabantayan ko",
+ "tog-watchlisthidebots": "Itago a mga pagbalyow ka bot sa binabantayan ko",
+ "tog-watchlisthideminor": "Itago a mga gatikot na pagbalyow sa binabantayan ko",
+ "tog-watchlisthideliu": "Itago a mga pagbalyow ka mga nakaloog na user sa binabantayan ko",
+ "tog-watchlisthideanons": "Itago a mga pagbalyow ka mga diri ising user sa binabantayan ko",
+ "tog-watchlisthidepatrolled": "Itago a mga binabantayan na pagbalyow sa binabantayan ko",
+ "tog-ccmeonemails": "Padarhi ko ka mga kopya ka mga email na ipinapadara ko sa obang user",
+ "tog-diffonly": "Diri ipagpabayad a loog ka pahina sa iraraum ka pagkakaiba",
+ "tog-showhiddencats": "Ipabayad a mga nakatagong kategorya",
+ "tog-norollbackdiff": "Galinon an pagkakaiba matapos gibowon a pagbalik",
+ "underline-always": "Pirmi",
+ "underline-never": "Nungka",
+ "editfont-monospace": "font na Monospaced",
+ "editfont-sansserif": "font na Sans-serif",
+ "editfont-serif": "font na Serif",
+ "sunday": "Domingo",
+ "monday": "Lunis",
+ "tuesday": "Martes",
+ "wednesday": "Myirkules",
+ "thursday": "Hwebes",
+ "friday": "Byernis",
+ "saturday": "Sabado",
+ "sun": "Dom",
+ "mon": "Lun",
+ "tue": "Mar",
+ "wed": "Myi",
+ "thu": "Hwe",
+ "fri": "Bye",
+ "sat": "Sab",
+ "january": "Enero",
+ "february": "Pebrero",
+ "march": "Marso",
+ "april": "Abril",
+ "may_long": "Mayo",
+ "june": "Hunyo",
+ "july": "Hulyo",
+ "august": "Agusto",
+ "september": "Sityembre",
+ "october": "Oktubre",
+ "november": "Nubyembre",
+ "december": "Disyembre",
+ "january-gen": "Enero",
+ "february-gen": "Pebrero",
+ "march-gen": "Marso",
+ "april-gen": "Abril",
+ "may-gen": "Mayo",
+ "june-gen": "Hunyo",
+ "july-gen": "Hulyo",
+ "august-gen": "Agusto",
+ "september-gen": "Sityembre",
+ "october-gen": "Oktubre",
+ "november-gen": "Nubyembre",
+ "december-gen": "Disyembre",
+ "jan": "Ene",
+ "feb": "Peb",
+ "mar": "Mar",
+ "apr": "Abr",
+ "may": "May",
+ "jun": "Hun",
+ "jul": "Hul",
+ "aug": "Agu",
+ "sep": "Sit",
+ "oct": "Okt",
+ "nov": "Nub",
+ "dec": "Dis",
+ "january-date": "Enero $1",
+ "february-date": "Pebrero $1",
+ "march-date": "Marso $1",
+ "april-date": "Abril $1",
+ "may-date": "Mayo $1",
+ "june-date": "Hunyo $1",
+ "july-date": "Hulyo $1",
+ "august-date": "Agusto $1",
+ "september-date": "Sityembre $1",
+ "october-date": "Oktubre $1",
+ "november-date": "Nubyembre $1",
+ "december-date": "Disyembre $1",
+ "pagecategories": "{{PLURAL:$1|Kategorya|Mga kategorya}}",
+ "category_header": "Mga pahina sa kategoryang \"$1\"",
+ "subcategories": "Mga subkategorya",
+ "category-media-header": "Mga pahina sa kategoryang \"$1\"",
+ "hidden-categories": "{{PLURAL:$1|Nakatagong kategorya|Mga nakatagong kategorya}}",
+ "hidden-category-category": "Mga nakatagong kategorya",
+ "listingcontinuesabbrev": "sunod",
+ "cancel": "Galinon",
+ "moredotdotdot": "Dakul pa...",
+ "morenotlisted": "Bukung kumpleto ading lista.",
+ "mypage": "Pahina",
+ "mytalk": "Magbisara",
+ "anontalk": "Pagbisara kading IP adres",
+ "navigation": "Nabigasyon",
+ "and": ", anggan",
+ "qbfind": "Anapun",
+ "qbedit": "Balyowan",
+ "qbpageoptions": "Ading pahina",
+ "qbmyoptions": "Kanakong mga pahina",
+ "faq": "FAQ",
+ "faqpage": "Proyekto:FAQ",
+ "actions": "Mga aksyon",
+ "namespaces": "Bubutangan",
+ "variants": "Iba pa",
+ "navigation-heading": "Menung nabigasyon",
+ "errorpagetitle": "Sala",
+ "returnto": "Bumalik sa $1",
+ "tagline": "Galin {{SITENAME}}",
+ "help": "Tabang",
+ "search": "Pag-anapon",
+ "searchbutton": "Pag-anapon",
+ "go": "Dumuman",
+ "searcharticle": "Dumuman",
+ "history": "Kasaysayan kan pahina",
+ "history_short": "Kasaysayan",
+ "print": "Ilimbag",
+ "view": "Silung",
+ "view-foreign": "Silung sa $1",
+ "edit": "Balyowan",
+ "create": "Gumibo",
+ "create-local": "Dugangan sa lokal na deskripsyon",
+ "editthispage": "Balyowan ading pahina",
+ "create-this-page": "Gumibo kading pahina",
+ "delete": "Puraon",
+ "deletethispage": "Puraon ading pahina",
+ "undeletethispage": "Ibalik ading pahina",
+ "undelete_short": "Ibalik ading {{PLURAL:$1|pagbalyow|$1 mga pagbalyow}}",
+ "viewdeleted_short": "Baydon a {{PLURAL:$1|pagbalyow|$1 mga pagbalyow}}",
+ "protect": "Protektaran",
+ "protect_change": "ribayan",
+ "protectthispage": "Protektaran ading pahina",
+ "unprotect": "Ribayan a proteksyon",
+ "unprotectthispage": "Ribayan a proteksyon kading pahina",
+ "newpage": "Bagong pahina",
+ "talkpage": "Pagbisara kading pahina",
+ "talkpagelinktext": "Magbisara",
+ "specialpage": "Espesyal na pahina",
+ "personaltools": "Mga personal na gamit",
+ "articlepage": "Baydon a loog ka pahina",
+ "talk": "Pagbisara",
+ "views": "Mga silung",
+ "toolbox": "Mga gamit",
+ "userpage": "Baydon a pahina ka paragamit",
+ "projectpage": "Baydon a pahina ka proyekto",
+ "imagepage": "Baydon a pahina ka file",
+ "mediawikipage": "Baydon a pahina ka mensahe",
+ "templatepage": "Baydon a pahina ka template",
+ "viewhelppage": "Baydon a pahina ka tabang",
+ "categorypage": "Baydon a pahina ka kategorya",
+ "viewtalkpage": "Baydon an pagbisara",
+ "otherlanguages": "Sa ibang mga ngangabilon",
+ "redirectedfrom": "(Nilipat galin sa $1)",
+ "redirectpagesub": "Pahina ka paglipat",
+ "lastmodifiedat": "Huring binago ading pahina ku $1, $2.",
+ "viewcount": "Binuksan ading pahina sa {{PLURAL:$1|beses|$1 beses}}.",
+ "protectedpage": "Protektado ading pahina",
+ "jumpto": "Lumukso sa:",
+ "jumptonavigation": "nabigasyon",
+ "jumptosearch": "anapon",
+ "pool-queuefull": "Punu a pool queue",
+ "pool-errorunknown": "Diri isi a sala",
+ "edithelp": "Tabang sa pagbalyow",
+ "mainpage": "Unang Pahina",
+ "mainpage-description": "Unang Pahina",
+ "policy-url": "Proyekto:Polisiya",
+ "portal": "Portal ka kumunidad",
+ "portal-url": "Proyekto:Portal ka kumunidad",
+ "privacy": "Polisiya ka pribasidad",
+ "privacypage": "Proyekto:Polisiya ka pribasidad",
+ "badaccess": "Sala a pagtugot",
+ "badaccess-group0": "Diri ka pwedeng gibowon a aksyon na boot mo.",
+ "ok": "Amo",
+ "retrievedfrom": "Nakuku galin sa \"$1\"",
+ "youhavenewmessages": "{{PLURAL:$3|Agko ka}} $1 ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Agko ka}} $1 galin sa {{PLURAL:$3|ibang user|$3 users}} ($2).",
+ "youhavenewmessagesmanyusers": "Agko ka $1 galin dakul na users ($2).",
+ "newmessageslinkplural": "{{PLURAL:$1|bagong mensahe|999=mga bagong mensahe}}",
+ "newmessagesdifflinkplural": "huring {{PLURAL:$1|pagbago|999=mga pagbago}}",
+ "youhavenewmessagesmulti": "Agko ka mga bagong mensahe sa $1.",
+ "editsection": "balyowan",
+ "editold": "balyowan",
+ "viewsourceold": "baydon a ginikanan",
+ "editlink": "balyowan",
+ "viewsourcelink": "baydon a ginikanan",
+ "editsectionhint": "Balyowan a sekyon: $1",
+ "toc": "Mga loog",
+ "showtoc": "ipabayad",
+ "hidetoc": "itago",
+ "collapsible-collapse": "Ibaba",
+ "collapsible-expand": "Ibuka",
+ "confirmable-yes": "Amo",
+ "confirmable-no": "Diri",
+ "thisisdeleted": "Baydon o ibalik a $1?",
+ "viewdeleted": "Baydon a $1?",
+ "restorelink": "{{PLURAL:$1|usad na pinurang pagbalyow|$1 mga pinurang pagbalyow}}",
+ "feedlinks": "Karga:",
+ "site-rss-feed": "Kargang $1 RSS",
+ "site-atom-feed": "Kargang $1",
+ "page-rss-feed": "Kargang \"$1\" RSS",
+ "page-atom-feed": "Kargang \"$1\" Atom",
+ "red-link-title": "$1 (uda ading pahina)",
+ "nstab-main": "Pahina",
+ "nstab-user": "Pahina ka user",
+ "nstab-media": "Pahina ka media",
+ "nstab-special": "Espesyal na pahina",
+ "nstab-project": "Pahina ka proyekto",
+ "nstab-image": "File",
+ "nstab-mediawiki": "Mensahe",
+ "nstab-template": "Padron",
+ "nstab-help": "Pahina ka tabang",
+ "nstab-category": "Kategorya",
+ "nosuchaction": "Uda kan aksyon",
+ "nosuchspecialpage": "Uda ka espesyal na pahinang iyan",
+ "error": "Sala",
+ "databaseerror": "Sala a database",
+ "databaseerror-query": "Unga: $1",
+ "databaseerror-function": "Gibo: $1",
+ "databaseerror-error": "Sala: $1",
+ "missingarticle-rev": "(pagbago#: $1)",
+ "missingarticle-diff": "(Iba: $1, $2)",
+ "internalerror": "Panloog na sala",
+ "internalerror_info": "Panloog na sala: $1",
+ "filecopyerror": "Diri makopya a \"$1\" sa \"$2\".",
+ "filerenameerror": "Diri mabalyowan a ngaran ka file na \"$1\" sa \"$2\".",
+ "filedeleteerror": "Diri mapura a file na \"$1\".",
+ "directorycreateerror": "Diri magibo a direktoryong \"$1\".",
+ "filenotfound": "Diri maturakan a file na \"$1\".",
+ "cannotdelete-title": "Diri mapura a pahinang \"$1\"",
+ "badtitle": "Bukung tamang titulo",
+ "viewsource": "Baydon a ginikanan",
+ "viewsource-title": "Baydon a ginikanan para sa $1",
+ "viewsourcetext": "Pwede mong silungon anggan arogon a ginikanan kading pahina:",
+ "viewyourtext": "Pwede mong silungon anggan arogon a ginikanan ku <strong?mga pagbalyow mo</strong> kading pahina:",
+ "namespaceprotected": "Uda kang permiso na balyowan a mga pahina sa <strong>$1</strong> bubutangan.",
+ "customjsprotected": "Uda kang permiso na balyowan ading pahina ka JavaScript ta agko di pansadiring settings ka ibang user.",
+ "mycustomjsprotected": "Uda ikang persmiso na balyowan ading pahinang JavaCript.",
+ "mypreferencesprotected": "Uda ikang persmiso na balyowan a kanimong mga kamuyahan.",
+ "ns-specialprotected": "Diri mababalyowan a mga espesyal na pahina.",
+ "exception-nologin": "Diri nakaloog",
+ "virus-unknownscanner": "diri ising antivirus:",
+ "welcomeuser": "Dagos, $1!",
+ "welcomecreation-msg": "Nagibo na a kanimong account.\nPwede mong ribayan a [[Special:kamuyahan|mga kamuyahan]] ka kanimong {{SITENAME}} kin boot mo.",
+ "yourname": "Pangaran:",
+ "userlogin-yourname": "Pangaran",
+ "userlogin-yourname-ph": "Ibutang a kanimong username",
+ "createacct-another-username-ph": "Ibutang a username",
+ "yourpassword": "Password:",
+ "userlogin-yourpassword": "Password",
+ "userlogin-yourpassword-ph": "Ibutang a password",
+ "createacct-yourpassword-ph": "Ibutang a password",
+ "yourpasswordagain": "Ibutang dayday a password:",
+ "createacct-yourpasswordagain": "Ikumpirmar a password",
+ "createacct-yourpasswordagain-ph": "Ibutang dayday a password",
+ "yourdomainname": "A kanimong domain:",
+ "password-change-forbidden": "Diri mo mariribayan a mga password kading wiki.",
+ "login": "Lumoog",
+ "nav-login-createaccount": "Lumoog/gumibo sa account",
+ "userlogin": "Lumoog / gumibo sa account",
+ "userloginnocreate": "Lumoog",
+ "logout": "Lumuwas",
+ "userlogout": "Lumuwas",
+ "notloggedin": "Di nakaloog",
+ "userlogin-noaccount": "Uda sa account?",
+ "userlogin-joinproject": "Bumali sa {{SITENAME}}",
+ "nologin": "Uda sa account? $1.",
+ "nologinlink": "Gumibo sa account",
+ "createaccount": "Gumibo sa account",
+ "gotaccount": "Agko na sa account? $1.",
+ "gotaccountlink": "Lumoog",
+ "userlogin-resetlink": "Nalingawan mo a detalye ku kanimong pagloog?",
+ "createacct-emailrequired": "Email address",
+ "createacct-email-ph": "Iloog a kanimong email adres",
+ "createacct-another-email-ph": "Iloog a email adres",
+ "createaccountreason": "Rason:",
+ "createacct-reason": "Rason",
+ "createacct-reason-ph": "Tauno ta muya mong gumibo sa ibang account",
+ "createacct-imgcaptcha-ph": "Ibutang a tekstong nababayad mo sa ibabow",
+ "createacct-submit": "Gumibo sa sadiring account",
+ "createacct-another-submit": "Gumibo sa ibang account",
+ "createacct-benefit-heading": "Gibo ka mga tawo pareho mo ading {{SITENAME}}.",
+ "createacct-benefit-body1": "{{PLURAL:$1|pabalyow|mga pagbalyow}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|pahina|mga pahina}}",
+ "badretype": "Diri pareho a mga password na ibinutang mo.",
+ "loginerror": "Sala a pagloog",
+ "createacct-error": "Sala a paggibo sa account",
+ "createaccounterror": "Diri makagibo sa account: $1",
+ "mailmypassword": "Balyowan a password",
+ "passwordremindertitle": "Bagong temporaryong password para sa {{SITENAME}}",
+ "noemailcreate": "Kaipowan mong ibutang a tamang email adres.",
+ "accountcreated": "Nakagibo na sa account",
+ "login-abort-generic": "A kanimong pagloog diri magibo - Pinundo.",
+ "loginlanguagelabel": "Sarita: $1",
+ "pt-login": "Lumoog",
+ "pt-login-button": "Lumoog",
+ "pt-createaccount": "Gumibo sa account",
+ "pt-userlogout": "Lumuwas",
+ "changepassword": "Balyowan a password",
+ "oldpassword": "Lumang password:",
+ "newpassword": "Bagong password:",
+ "passwordreset-domain": "Nasasakupan:",
+ "passwordreset-email": "Email address:",
+ "changeemail": "Ribayan a email adres",
+ "changeemail-none": "(uda)",
+ "extlink_sample": "http://www.example.com titulo kan link",
+ "watchthis": "Silungon ading pahina",
+ "blockednoreason": "udang binutang na rason",
+ "nosuchsectiontitle": "diri maturakan a seksyon",
+ "loginreqlink": "lumoog",
+ "loginreqpagetext": "Paki $1 para masilung a ibang mga pahina.",
+ "newarticle": "(Bago)",
+ "updated": "(Binago)",
+ "note": "strong>Paisi:</strong>",
+ "editing": "Binabalyowan a $1",
+ "creating": "Ginigibo a $1",
+ "editingsection": "Binabalyowan a $1 (seksyon)",
+ "editingcomment": "Binabalyowan a $1 (bagong seksyon)",
+ "yourtext": "A kanimong teksto",
+ "template-protected": "(protektado)",
+ "template-semiprotected": "(medyo protektado)",
+ "defaultmessagetext": "Dating teksto ka mensahe",
+ "content-model-wikitext": "wikiteksto",
+ "content-model-text": "simpleng teksto",
+ "content-model-javascript": "JavaScript",
+ "content-model-css": "CSS",
+ "cantcreateaccounttitle": "Diri makagibo sa account",
+ "next": "sunod",
+ "last": "sinundan",
+ "page_first": "una",
+ "page_last": "huri",
+ "history-show-deleted": "Puraon sana",
+ "histfirst": "pinakaluma",
+ "histlast": "pinakabago",
+ "historysize": "({{PLURAL:$1|1 byte|$1 mga byte}})",
+ "historyempty": "(uda loog)",
+ "history-feed-item-nocomment": "$1 sa $2",
+ "rev-showdeleted": "ipabayad",
+ "revdelete-show-file-submit": "Amo",
+ "revdelete-radio-set": "Nakatago",
+ "revdelete-radio-unset": "Nababayad",
+ "revdelete-log": "Rason:",
+ "pagehist": "Kasaysayan kan pahina",
+ "revdelete-otherreason": "Iba/rugang na rason:",
+ "revdelete-reasonotherlist": "Ibang rason",
+ "mergehistory-reason": "Rason:",
+ "lineno": "Linya $1:",
+ "editundo": "ibalik",
+ "diff-empty": "(Udang pagkakaiba)",
+ "searchresults": "Resulta ka pag-anap",
+ "searchprofile-images": "Multimedia",
+ "searchprofile-everything": "Ngamin",
+ "searchprofile-articles-tooltip": "Anapon sa $1",
+ "searchprofile-everything-tooltip": "Anapon sa ngamin na loog (pati sa mga pahina ka pagbisara)",
+ "searchall": "ngamin",
+ "powersearch-toggleall": "Ngamin",
+ "powersearch-togglenone": "Uda",
+ "prefs-misc": "Misc",
+ "prefs-resetpass": "Balyowan a password",
+ "prefs-changeemail": "Ribayan a email adres",
+ "searchresultshead": "Pag-anapon",
+ "recentchangesdays": "Mga aldow na ipababayad a mga bagong pagribay:",
+ "recentchangescount": "Bilang ka pagbalow na ipababayad:",
+ "timezoneregion-africa": "Aprika",
+ "timezoneregion-america": "Amerika",
+ "timezoneregion-antarctica": "Antartika",
+ "timezoneregion-arctic": "Artiko",
+ "timezoneregion-asia": "Asya",
+ "timezoneregion-atlantic": "Kadagatan Atlantiko",
+ "timezoneregion-australia": "Australya",
+ "timezoneregion-europe": "Europa",
+ "timezoneregion-indian": "Kadagatan Indyano",
+ "timezoneregion-pacific": "Kadagatan Pasipiko",
+ "prefs-searchoptions": "Pag-anapon",
+ "default": "dati",
+ "youremail": "Email:",
+ "yourlanguage": "Sarita:",
+ "email": "Email",
+ "prefs-signature": "Pirma",
+ "prefs-editor": "Editor",
+ "userrights-reason": "Rason:",
+ "group": "Grupo:",
+ "group-bot": "Bots",
+ "group-all": "(ngamin)",
+ "right-delete": "Puraon a mga pahina",
+ "right-browsearchive": "Anapon a mga pinurang pahina",
+ "right-userrights": "Balyowan ngamin na katanusan ka user",
+ "action-edit": "balyowan ading pahina",
+ "action-createpage": "gumibo sa mga pahina",
+ "action-delete": "puraon ading pahina",
+ "action-browsearchive": "anapon a mga pinurang pahina",
+ "action-userrights": "balyowan ngamin na katanusan ka user",
+ "enhancedrc-history": "kasaysayan",
+ "rcshowhideminor-show": "Ipabayad",
+ "rcshowhideminor-hide": "Itago",
+ "rcshowhidebots": "$1 bots",
+ "rcshowhidebots-show": "Ipabayad",
+ "rcshowhidebots-hide": "Itago",
+ "rcshowhideliu-show": "Ipabayad",
+ "rcshowhideliu-hide": "Itago",
+ "rcshowhideanons-show": "Ipabayad",
+ "rcshowhideanons-hide": "Itago",
+ "rcshowhidepatr-show": "Ipabayad",
+ "rcshowhidepatr-hide": "Itago",
+ "rcshowhidemine-show": "Ipabayad",
+ "rcshowhidemine-hide": "Itago",
+ "diff": "iba",
+ "hist": "usip",
+ "hide": "Itago",
+ "show": "Ipabayad",
+ "minoreditletter": "m",
+ "newpageletter": "B",
+ "boteditletter": "b",
+ "rc_categories_any": "Dawa uno",
+ "newsectionsummary": "/* $1 */ bagong seksyon",
+ "rc-enhanced-expand": "Ipabayad a mga detalye",
+ "filename": "Filename",
+ "filesource": "Ginalinan:",
+ "watchthisupload": "Silungon ading file",
+ "backend-fail-read": "Diri mabasa a file na \"$1\".",
+ "backend-fail-create": "Diri masuratan a file na \"$1\".",
+ "nolicense": "Udang napili",
+ "listfiles-delete": "puraon",
+ "imgfile": "file",
+ "listfiles_date": "Petsa",
+ "listfiles_name": "Ngaran",
+ "listfiles-latestversion-yes": "Amo",
+ "listfiles-latestversion-no": "Diri",
+ "file-anchor-link": "File",
+ "filehist-deleteall": "puraon ngamin",
+ "filehist-datetime": "Petsa/Oras",
+ "filedelete": "Puraon a $1",
+ "filedelete-submit": "Puraon",
+ "filedelete-success": "Napura na a <strong>$1</strong>.",
+ "filedelete-otherreason": "Iba/rugang na rason:",
+ "randomincategory-category": "Kategorya:",
+ "statistics": "Estadistika",
+ "statistics-pages": "Mga pahina",
+ "statistics-views-total": "Ngamin na mga silung",
+ "brokenredirects-edit": "balyowan",
+ "brokenredirects-delete": "puraon",
+ "withoutinterwiki-submit": "Ipabayad",
+ "nbytes": "$1 {{PLURAL:$1|byte|mga bytes}}",
+ "ncategories": "{{PLURAL:$1|Kategorya|Mga kategorya}}",
+ "ninterwikis": "$1 {{PLURAL:$1|interwiki|mga interwiki}}",
+ "nlinks": "$1 {{PLURAL:$1|link|mga links}}",
+ "prefixindex": "Ngamin na mga pahina na agko prefix",
+ "protectedpages-page": "Pahina",
+ "protectedpages-reason": "Rason",
+ "protectedpages-unknown-timestamp": "Diri isi",
+ "newpages": "Mga bagong pahina",
+ "all-logs-page": "Ngamin na mga pampublikong pagloog",
+ "allpages": "Ngamin na mga pahina",
+ "nextpage": "Sunod na pahina ($1)",
+ "allarticles": "Ngamin na mga pahina",
+ "allinnamespace": "Ngamin na mga pahina ($1 butangan)",
+ "deletedcontributions": "Napurang mga ambag ka user",
+ "linksearch-ok": "Pag-anapon",
+ "listusers-submit": "Ipabayad",
+ "activeusers-hidebots": "Itago a bots",
+ "listgrouprights-group": "Grupo",
+ "listgrouprights-addgroup": "Mairurugang a {{PLURAL:$2|grupo|mga grupo}}: $1",
+ "listgrouprights-addgroup-all": "Irugang ngamin na mga grupo",
+ "listgrouprights-removegroup-all": "Galinon ngamin na mga grupo",
+ "listgrouprights-addgroup-self": "Mairurugang a {{PLURAL:$2|grupo|mga grupo}} sa sadiring account: $1",
+ "listgrouprights-addgroup-self-all": "Irugang a ngamin na mga grupo sa sadiring account",
+ "trackingcategories-name": "Ngaran ka mensahe",
+ "mailnologin": "Udang adres na mapapadarhan",
+ "noemailtitle": "Udang email adres",
+ "emailfrom": "Galin ki:",
+ "emailto": "Para ki:",
+ "emailmessage": "Mensahe:",
+ "emailccme": "Padarhi ako sa kopya ku kanakong mensahe",
+ "emailsenttext": "A kanimong email naipadara na.",
+ "watchlistfor2": "Para sa $1 $2",
+ "wlshowlast": "Ipabayad a huring $1 mga oras $2 mga aldow $3",
+ "delete-confirm": "Puraon a $1",
+ "deleteotherreason": "Iba/rugang na rason:",
+ "protect-otherreason": "Iba/rugang na rason:",
+ "restriction-edit": "Balyowan",
+ "restriction-move": "Ilipat",
+ "restriction-create": "Gumibo",
+ "restriction-upload": "Magkarga",
+ "restriction-level-all": "dawa unung lebel",
+ "undelete": "Baydon a mga napurang pahina",
+ "undeletepage": "Baydon anggan ibalik a mga napurang pahina",
+ "undeletebtn": "Ibalik",
+ "undeletelink": "baydon/ibalik",
+ "undeleteviewlink": "silungon",
+ "undeletecomment": "Rason:",
+ "undelete-search-title": "Anapon a mga pinurang pahina",
+ "undelete-search-box": "Anapon a mga pinurang pahina",
+ "undelete-search-prefix": "Ipabayad a mga pahinang nagpopoon sa",
+ "undelete-search-submit": "Pag-anapon",
+ "undelete-show-file-submit": "Ano",
+ "namespace": "Butangan:",
+ "blanknamespace": "(Una)",
+ "contributions": "Mga ambag ka {{GENDER:$1|User}}",
+ "mycontris": "Mga ambag",
+ "contribsub2": "Para sa {{GENDER:$3|$1}} ($2)",
+ "uctop": "(nguwan)",
+ "month": "Poon bulan (anggan nauna):",
+ "year": "Poon taon (anggan nauna):",
+ "sp-contributions-newbies-sub": "Para sa mga bagong account",
+ "sp-contributions-deleted": "napurang mga ambag ka user",
+ "sp-contributions-uploads": "mga karga",
+ "sp-contributions-logs": "mga loog",
+ "sp-contributions-talk": "magbisara",
+ "sp-contributions-search": "Mag-anap sa mga ambag",
+ "sp-contributions-submit": "Pag-anapon",
+ "whatlinkshere-page": "Pahina:",
+ "isredirect": "pahina ka paglipat",
+ "whatlinkshere-hideredirs": "$1 mga redirekta",
+ "ipbreason": "Rason:",
+ "ipblocklist-submit": "Pag-anapon",
+ "lockconfirm": "Amo, muya kong ikandado a database.",
+ "delete_and_move": "Puraon anggan ilipat",
+ "delete_and_move_confirm": "Amo, puraon ading pahina",
+ "export-addcattext": "Irugang a mga pahina galin sa kategorya:",
+ "export-addnstext": "Irugang a mga pahina galin sa bubutangan:",
+ "allmessagesname": "Ngaran",
+ "thumbnail_error_remote": "Salang mensahe galin sa $1: $2",
+ "tooltip-ca-delete": "Puraon ading pahina",
+ "tooltip-ca-watch": "Irugang ading pahina sa kanimong binabantayan",
+ "tooltip-search": "Mag-anap sa {{SITENAME}}",
+ "tooltip-ca-nstab-mediawiki": "Silungon a mensahe ka mensahe",
+ "tooltip-watch": "Irugang ading pahina sa kanimong binabantayan",
+ "pageinfo-contentpage-yes": "Amo",
+ "pageinfo-protect-cascading-yes": "Amo",
+ "ilsubmit": "Pag-anapon",
+ "yesterday-at": "Suhapon ku $1",
+ "exif-worldregiondest": "Ipinababayad na rehiyon ka kinaban",
+ "exif-countrycodedest": "Koda para sa ipinababayad na nasyon",
+ "exif-citydest": "Ipinababayad na syudad",
+ "exif-gaincontrol-0": "Uda",
+ "watchlistall2": "ngamin",
+ "monthsall": "ngamin",
+ "confirm-watch-top": "Muya mong irugang ading pahina sa kanimong binabantayan?",
+ "table_pager_limit": "Ipabayad a $1 na items kada pahina",
+ "version-no-ext-name": "[uda ngaran]",
+ "fileduplicatesearch-submit": "Pag-anapon",
+ "tags-active-yes": "Amo",
+ "htmlform-yes": "Amo",
+ "htmlform-cloner-create": "Rugangan pa",
+ "rightsnone": "(uda)",
+ "feedback-message": "Mensahe:",
+ "searchsuggest-search": "Pag-anapon",
+ "expand_templates_remove_nowiki": "Itago a <nowiki> tags sa resulta"
+}
"gotaccount": "Ja teniu un compte? $1.",
"gotaccountlink": "Inicia una sessió",
"userlogin-resetlink": "Heu oblidat les vostres dades d'accés?",
- "userlogin-resetpassword-link": "Has oblidat la teva contrasenya?",
+ "userlogin-resetpassword-link": "Heu oblidat la contrasenya?",
"userlogin-helplink2": "Ajuda amb el registre",
- "userlogin-loggedin": "Heu iniciat una sessió com {{GENDER:$1|$1}}.\nFeu servir el formulari de sota per iniciar la sessió com un altre usuari.",
- "userlogin-createanother": "Crea un altre compte",
"createacct-emailrequired": "Adreça de correu electrònic",
"createacct-emailoptional": "Adreça de correu electrònic (opcional)",
"createacct-email-ph": "Introduïu la vostra adreça de correu electrònic",
"randomincategory-invalidcategory": "«$1» no és un nom de categoria vàlid.",
"randomincategory-nopages": "No hi ha pàgines a la categoria [[:Category:$1|$1]].",
"randomincategory-category": "Categoria:",
+ "randomincategory-legend": "Pàgina a l’atzar en la categoria",
"randomredirect": "Redirecció a l'atzar",
"randomredirect-nopages": "No hi ha cap redirecció a l'espai de noms «$1».",
"statistics": "Estadístiques",
"delete-legend": "Elimina",
"historywarning": "'''Atenció:''' La pàgina que esteu a punt d'eliminar té un historial amb $1 {{PLURAL:$1|versió|versions}}, aproximadament:",
"confirmdeletetext": "Esteu a punt d'esborrar de forma permanent una pàgina o imatge i tot el seu historial de la base de dades.\nConfirmeu que realment ho voleu fer, que enteneu les\nconseqüències, i que el que esteu fent està d'acord amb la [[{{MediaWiki:Policy-url}}|política]] del projecte.",
- "actioncomplete": "S'ha realitzat l'acció de manera satisfactòria.",
+ "actioncomplete": "Acció realitzada",
"actionfailed": "L'acció ha fallat",
"deletedtext": "S'ha suprimit «$1».\nVegeu $2 per a un registre dels esborrats més recents.",
"dellogpage": "Registre d'eliminació",
"editfont-monospace": "蜀様寬其字體",
"editfont-sansserif": "無襯線其字體",
"editfont-serif": "有襯線其字體",
- "sunday": "Lā̤ buái/禮拜",
- "monday": "Buái ék/拜一",
- "tuesday": "Buái nê/拜二",
- "wednesday": "Buái săng / 拜三",
- "thursday": "Buái sé/拜四",
- "friday": "Buái ngô/拜五",
- "saturday": "Buái lĕ̤k/拜六",
- "sun": "Lā̤ buái/禮拜",
- "mon": "Buái ék/拜一",
- "tue": "Buái nê/拜二",
- "wed": "Buái săng/拜三",
- "thu": "Buái sé/拜四",
- "fri": "Buái ngô/拜五",
- "sat": "Buái lĕ̤k/拜六",
+ "sunday": "禮拜",
+ "monday": "拜一",
+ "tuesday": "拜二",
+ "wednesday": "拜三",
+ "thursday": "拜四",
+ "friday": "拜五",
+ "saturday": "拜六",
+ "sun": "禮拜",
+ "mon": "拜一",
+ "tue": "拜二",
+ "wed": "拜三",
+ "thu": "拜四",
+ "fri": "拜五",
+ "sat": "拜六",
"january": "一月",
"february": "二月",
"march": "三月",
"history_short": "歷史",
"updatedmarker": "趁我最後蜀回訪問開始更新",
"printableversion": "會拍印其版本",
- "permalink": "固定链接",
+ "permalink": "永久鏈接",
"print": "拍印",
"view": "覷蜀覷",
"edit": "修改",
"badaccess": "權限錯誤",
"badaccess-group0": "汝𣍐使做汝要求其茲蜀萆動作。",
"badaccess-groups": "汝要求其動作著$2底裏用戶才會做其:$1{{PLURAL:$1}}",
- "versionrequired": "需要版本$1其媒體維基",
- "versionrequiredtext": "需要媒體維基其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。",
+ "versionrequired": "需要版本$1其MediaWiki",
+ "versionrequiredtext": "需要MediaWiki其版本$1來使茲蜀頁。\n覷[[Special:Version|版本頁面]]。",
"ok": "好",
"retrievedfrom": "趁「$1」退過來",
"youhavenewmessages": "汝有$1($2)。",
"toc": "目錄",
"showtoc": "顯示",
"hidetoc": "藏起",
- "collapsible-collapse": "崩潰",
- "collapsible-expand": "擴展",
+ "collapsible-collapse": "隱",
+ "collapsible-expand": "現",
"thisisdeleted": "卜看或者恢復$1?",
"viewdeleted": "看$1?",
"restorelink": "$1萆乞刪掉其修改{{PLURAL:$1}}",
"nosuchspecialpage": "無總款其特殊頁",
"nospecialpagetext": "<strong>汝請求蜀萆𣍐合法其特殊頁面。</strong>\n\n合法其特殊頁面清單會使敆[[Special:SpecialPages|{{int:特殊頁面}}]]頁面討著",
"error": "鄭咯",
- "databaseerror": "數據庫有鄭",
+ "databaseerror": "數據庫有綻",
"laggedslavemode": "'''警告:'''頁面可能無最近其更新。",
"readonly": "數據庫乞鎖起咯",
"readonlytext": "Só-gé̤ṳ-kó cī-buàng ké̤ṳk nè̤ng sō̤ kī lāu, mâ̤-sāi siā sĭng dèu-mĕ̤k hĕ̤k có̤ siŭ-gāi, ô kō̤-nèng sê ôi-lāu nĭk-siòng mì-hô, cĭ-hâiu cêu â̤ ciáng-siòng.\n\nSō̤ kī só-gé̤ṳ-kó gì guāng-lī-uòng cūng-kuāng gāi-sék: $1",
"badtitle": "獃其標題",
"perfcached": "下底其數據乞緩存固加可能伓是最新其。{{PLURAL:$1|$1條結果}}會敆緩存臺中討著。",
"perfcachedts": "下底其數據已經緩存過了,最後更新遘$1。{{PLURAL:$4|$4條結果}}會敆緩存臺中討著。",
- "querypage-no-updates": "茲蜀頁其更新乞禁止了。\n數據嚽塊現刻時𣍐更新了。",
+ "querypage-no-updates": "茲蜀頁其更新乞禁止了。\n數據租塊現刻時𣍐更新了。",
"viewsource": "看源代碼",
"viewsource-title": "覷蜀覷$1其源代碼",
"actionthrottled": "行動乞取消咯",
"protectedpagetext": "茲頁已經乞保護起咯,𣍐使修改或者其它行動。",
"viewsourcetext": "汝會使看共複製茲蜀頁其源代碼:",
"viewyourtext": "汝會使覷蜀覷或者複製茲頁'''汝其修改'''其源代碼:",
- "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果卜想修改維基其翻譯,起動遘媒體維基本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。",
+ "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果卜想修改維基其翻譯,起動遘MediaWiki本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。",
"namespaceprotected": "汝𣍐使修改敆'''$1'''命名空間其頁面。",
"customcssprotected": "汝𣍐使修改茲蜀萆CSS頁面,因為伊有別蜀隻用戶其設定。",
"customjsprotected": "汝𣍐使修改茲蜀萆JavaScript頁面,因為伊有別蜀隻用戶其設定。",
"userlogin-signwithsecure": "使安全其連接",
"yourdomainname": "汝其域名:",
"password-change-forbidden": "汝𣍐使敆茲蜀萆維基百科𡅏修改密碼。",
- "externaldberror": "可能是驗證數據庫鄭咯,或者是汝𣍐使升級汝其外部賬戶。",
+ "externaldberror": "可能是驗證數據庫綻咯,或者是汝𣍐使升級汝其外部賬戶。",
"login": "躒底",
"nav-login-createaccount": "躒底/開賬戶",
"userlogin": "躒底/開賬戶",
"gotaccountlink": "躒底",
"userlogin-resetlink": "躒底其資料𣍐記咯?",
"userlogin-resetpassword-link": "密码𣍐記?",
+ "userlogin-helplink2": "對手汝躒底",
"createacct-emailrequired": "電子郵件地址",
"createacct-emailoptional": "電子郵件地址(愛寫就寫)",
"createacct-email-ph": "輸底汝其電子郵件地址",
"passwordtooshort": "密碼著設最少{{PLURAL:$1|$1萆字符}}。",
"password-name-match": "汝其密碼硬著共汝其用戶名𣍐蜀様才會使其。",
"password-login-forbidden": "茲蜀萆用戶名共密碼應經乞禁止去了。",
- "mailmypassword": "共新密碼發遘電子郵件",
+ "mailmypassword": "重新設置密碼",
"passwordremindertitle": "{{SITENAME}}其新其臨時密碼",
"passwordsent": "新密碼已經寄遘「$1」註冊其電子郵件地址了。\n收遘後,請再躒底蜀頭部。",
"mailerror": "發電子郵件有賺:$1",
"resetpass-submit-cancel": "取消",
"resetpass-temp-password": "臨時密碼:",
"passwordreset": "重置密碼",
+ "passwordreset-text-one": "完成者隻表單,通過電子郵件發送臨時密碼來重新設定汝其密碼。",
"passwordreset-legend": "重置密碼",
"passwordreset-username": "用戶名:",
"passwordreset-domain": "域名:",
"sp-contributions-search": "尋討貢獻",
"sp-contributions-username": "IP地址或者用戶名:",
"sp-contributions-submit": "尋討",
- "whatlinkshere": "什乇鏈遘嚽塊",
+ "whatlinkshere": "甚乇鏈遘租塊",
"whatlinkshere-title": "鏈接遘$1其頁面",
"whatlinkshere-page": "頁面:",
"linkshere": "下底其頁面鏈接遘'''[[:$1]]''':",
"block-log-flags-nocreate": "防止開賬戶",
"ipb_expiry_invalid": "過期時間無效。",
"ipb_already_blocked": "「$1」已經乞封鎖了",
- "lockconfirm": "正式,我卜想鎖定數據庫。",
+ "lockconfirm": "正是,我卜想鎖定數據庫。",
"lockbtn": "鎖定數據庫",
"unlockbtn": "開數據庫",
"lockdbsuccesssub": "數據庫鎖定好了",
"allmessagesname": "名",
"allmessagesdefault": "默認其消息文字",
"allmessagescurrent": "現時其文字",
- "allmessagestext": "茲是敆媒體維基命名空間底裏系統消息其蜀萆單單。\n如果汝卜想貢獻通用其媒體維基本地化服務,請訪問[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation 媒體維基本地化]共[//translatewiki.net translatewiki.net]。",
+ "allmessagestext": "茲是敆MediaWiki命名空間裏勢系統消息其蜀萆單單。\n如果汝卜想貢獻通用其MediaWiki基本地化服務,起動汝訪問[https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki本地化]共[//translatewiki.net translatewiki.net]。",
"allmessagesnotsupportedDB": "茲蜀頁𣍐使其,因為'''$wgUseDatabaseMessages'''已經乞禁止去了。",
"thumbnail-more": "放大",
"tooltip-pt-userpage": "汝其用戶頁",
"tooltip-pt-mytalk": "汝其討論頁",
"tooltip-pt-preferences": "汝其設定",
+ "tooltip-pt-watchlist": "汝監視其頁面有改過其單單",
"tooltip-pt-mycontris": "汝其貢獻其單單",
"tooltip-pt-login": "希望汝躒底其;當然,無逼汝總款做。",
"tooltip-pt-logout": "躒出",
"tooltip-n-mainpage-description": "覷蜀覷頭頁",
"tooltip-n-recentchanges": "維基百科最近其改變其單單",
"tooltip-n-randompage": "隨便罔看",
- "tooltip-t-whatlinkshere": "鏈遘嚽塊其所有維基頁面其單單",
+ "tooltip-t-whatlinkshere": "鏈遘租塊其所有維基頁面其單單",
+ "tooltip-t-recentchangeslinked": "鏈遘茲頁其頁面其最近修改",
"tooltip-t-contributions": "茲蜀用戶其貢獻單單",
"tooltip-t-emailuser": "共茲蜀隻用戶發電子郵件",
"tooltip-t-upload": "上傳文件",
"tooltip-t-specialpages": "特殊頁其單單",
"tooltip-t-print": "茲蜀頁其會拍印其版本",
+ "tooltip-t-permalink": "茲頁茲版本其永久鏈接",
"tooltip-ca-nstab-main": "看蜀看內容頁",
"tooltip-ca-nstab-user": "覷蜀覷用戶頁",
"tooltip-ca-nstab-special": "茲是蜀萆特殊頁,汝𣍐使修改茲蜀頁。",
"aboutpage": "Project:Цуьнах лаьцна",
"copyright": "Чулацам лело мега $1 лицензица (кхениг билгалйина яцахь).",
"copyrightpage": "{{ns:project}}:Авторан бакъонаш",
- "currentevents": "ХӀинцлера хилларш",
- "currentevents-url": "Project:ХӀинцлера хилларш",
+ "currentevents": "Ð¥Ó\80инÑ\86алеÑ\80а Ñ\85иллаÑ\80Ñ\88",
+ "currentevents-url": "Project:Ð¥Ó\80инÑ\86алеÑ\80а Ñ\85иллаÑ\80Ñ\88",
"disclaimers": "Бехк тӀецалацар",
"disclaimerpage": "Project:Бехк тӀецалацар",
"edithelp": "ГӀо оцу тадарна",
"readonlytext": "АгӀонаш тӀетохар а кхин хийцамаш барна а блоктоьхна:\nБлокоьхначо биттина хаам: $1.",
"missing-article": "ХӀокху чохь кароезаш йолу хьан дехарца йозан агӀонаш цакарийна «$1» $2.\n\nИштнарг наггахь хуьлу хьажораг дӀаяьккхина елахь я хийцам бина тиша хьажорагца дехьа гӀо гӀоьртича.\n\nНагахьсан гӀулкх цуьнах доьзна дацахь, хьуна карийна гӀирс латточехь гӀалат.\nДехар до, хаам бе оцуьнах [[Special:ListUsers/sysop|куьйгалхога]], гойтуш URL.",
"missingarticle-rev": "(верси № $1)",
- "missingarticle-diff": "(тейп тайпнара: $1, $2)",
+ "missingarticle-diff": "(башхалла: $1, $2)",
"readonly_lag": "Хаамашан базина цхьана хан блоктоьхна, хаамашан базан сервераш нисялца.",
"internalerror": "Чоьхьара гӀалат",
"internalerror_info": "Чоьхьара гӀалат: $1",
"invalidtitle-knownnamespace": "Магийна боцу коьртамогӀа цӀерийн меттигца «$2» йоза «$3»",
"invalidtitle-unknownnamespace": "Магийна боцу коьртамогӀа ца йовза меттигца $1 «$2» йозанца",
"exception-nologin": "ХӀинца а ахьа системин чохь болх беш бац",
- "exception-nologin-text": "Ð\98за дан [[Special:Userlogin|системин чугӀо]].",
+ "exception-nologin-text": "Ð¥Ó\80окÑ\85Ñ\83 агÓ\80о Ñ\82Ó\80екÑ\85аÑ\87а лÑ\83Ñ\88 Ñ\85илийÑ\82а [[Special:Userlogin|системин чугӀо]].",
"exception-nologin-text-manual": "АгӀо тӀекхача луш хилийта оьшу $1.",
"virus-badscanner": "Нисяран гӀалат. Ца йовза вирусийн сканер: ''$1''",
"virus-scanfailed": "сканиран гӀалат (код $1)",
"userlogin-resetlink": "Чуволу/йолу хаам биц бела?",
"userlogin-resetpassword-link": "Пароль кхоссар?",
"userlogin-helplink2": "Системин чудахаран гӀодар",
- "userlogin-loggedin": "Хьо {{GENDER:$1|$1}} цӀарца чохь ву/ю.\nЛахара форманца кхин цӀарца чугӀо.",
- "userlogin-createanother": "Кхолла декъашхочун кхин дӀаяздар",
"createacct-emailrequired": "Электронан почтан адрес",
"createacct-emailoptional": "Электронан почтан адрес (ца яздича мега)",
"createacct-email-ph": "ДӀаязде электронан почтан адрес",
"last": "хьалх.",
"page_first": "хьалхара",
"page_last": "тlаьххьара",
- "histlegend": "Кхетор: (хlинцлера.) — йолучу башхон къастам; (хьалх.) — хьалхлерачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
+ "histlegend": "Кхетор: (хӀинцалера.) — йолучу башхон къастам; (хьалх.) — хьалхлерачу башхон къастам; '''ж''' — жимо бозалца болу хийцам.",
"history-fieldset-title": "АгӀона хийцамаш",
"history-show-deleted": "ДӀаяхинарш",
"histfirst": "ширниш",
"revdelete-nooldid-text": "Ахьа хӀара функци кхочушъян билгалйина яц Ӏалашонан верси (я версеш).",
"revdelete-no-file": "Иштта файл яц.",
"revdelete-show-file-confirm": "Бакъалла лаьий хьуна дӀаяьккхина файлан версега хьажа «<nowiki>$1</nowiki>» $2 тӀера, $3?",
- "revdelete-show-file-submit": "Хlаъ",
+ "revdelete-show-file-submit": "ХӀаъ",
"revdelete-selected-text": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:",
"revdelete-selected-file": "{{PLURAL:$1|Файлан хаьржина верси|Файлан хаьржина версеш}} [[:$2]]:",
"logdelete-selected": "Тептар чура {{PLURAL:$1|хаьржина дӀаяздар|хаьржина дӀаяздарш}}:",
"prefs-files": "Файлаш",
"prefs-custom-css": "Долахь йолу CSS",
"prefs-custom-js": "Долахь йолу JS",
- "prefs-common-css-js": "ЮкÑ\8aаÑ\80а CSS/JS маÑ\81Ñ\81о кеÑ\87 даÑ\80ан Ñ\82емаÑ\88ан:",
+ "prefs-common-css-js": "ЮкÑ\8aаÑ\80а CSS/JS маÑ\81Ñ\81о кеÑ\87 даÑ\80ан Ñ\82емийн:",
"prefs-reset-intro": "ХӀара агӀо лело мега ахьа нисбина гӀирс Ӏад битарца юха бокхуш.\nХӀара дешдерг кхочушъ динчул тӀехьа хьан йиш хир-яц и юха меттахӀотто.",
"prefs-emailconfirm-label": "Электронан почта бакъ яр:",
"youremail": "Электронан почта:",
"userrights-nologin": "Куьйгалхочунна бакъо йолу [[Special:UserLogin|дӀаяздарца]] ло декъашхочун бакъо.",
"userrights-notallowed": "Хьан дӀаяздарца магийна дац декъашхошна бакъо яла а дӀаяккха а.",
"userrights-changeable-col": "Хьона хийца луш йолу бакъонаш",
- "userrights-unchangeable-col": "Хьона хийца луш йоцу бакъонаш",
+ "userrights-unchangeable-col": "Хьуна хийца луш йоцу бакъонаш",
"group": "Тоба:",
"group-user": "Декъашхой",
"group-autoconfirmed": "Ша тӀелаьцболу декъашхой",
"rcshowhidemine-show": "Гайта",
"rcshowhidemine-hide": "Къайладаха",
"rclinks": "Гайта тӀаьхьара $1 хийцамаш $2 ден<br />$3",
- "diff": "тейп тайпнара",
+ "diff": "башхалла",
"hist": "истори",
"hide": "Къайлаяккха",
"show": "Гайта",
"randomredirect-nopages": "«$1» цӀерийн меттиган чохь дӀасахьажораш яц.",
"statistics": "Статистика",
"statistics-header-pages": "АгӀонийн жамӀ",
- "statistics-header-edits": "Ð\9dиÑ\81даÑ\80ан жамÓ\80",
+ "statistics-header-edits": "Ð\9dиÑ\81даÑ\80ийн Ñ\81Ñ\82аÑ\82иÑ\81Ñ\82ика",
"statistics-header-views": "Хьажаран статистика",
- "statistics-header-users": "Декъашхойн жамӀа",
+ "statistics-header-users": "Декъашхойн статистика",
"statistics-header-hooks": "Кхин статистика",
"statistics-articles": "Яззамаш",
"statistics-pages": "АгӀонаш",
"statistics-pages-desc": "Массо вики агlонаш, дийцаре агlонашцани, дlасахьаждарш а кхин дерш.",
"statistics-files": "Чуяьхна файлаш",
"statistics-edits": "Нисдаран дукхалла {{grammar:genitive|{{SITENAME}}}} дlа йолайаларца",
- "statistics-edits-average": "ЮккÑ\8aеÑ\80а агÓ\80онан ниÑ\81даÑ\80ан Ñ\82еÑ\80аÑ\85Ñ\8c",
+ "statistics-edits-average": "Ð\90гÓ\80онан ниÑ\81даÑ\80ийн Ñ\8eкÑ\8aаÑ\80а дÑ\83кÑ\85алла",
"statistics-views-total": "Массо хьажарш",
"statistics-views-total-desc": "Ма лара дӀаяьхна а белхан а агӀонашка хьажар",
"statistics-views-peredit": "Нисдаре хьажарш",
"usercreated": "{{GENDER:$3|дӀавазвелла|дӀаязелла}} $1 $2",
"newpages": "Керла агӀонаш",
"newpages-username": "Декъашхо:",
- "ancientpages": "ЯззамаÑ\88 оÑ\86Ñ\83 Ñ\82еÑ\80аÑ\85Ñ\8cÑ\86а Ñ\82Ó\80аÑ\8cÑ\85Ñ\85Ñ\8cаÑ\80а Ñ\82адаÑ\80 дина долÑ\83",
+ "ancientpages": "ТÓ\80еÑ\85Ñ\8cаÑ\80а Ñ\82еÑ\80аÑ\85Ñ\8cÑ\86а Ñ\82адаÑ\80 дина Ñ\8fззамаÑ\88",
"move": "ЦӀе хийца",
"movethispage": "ХӀокху агӀон цӀе хийца",
"unusedimagestext": "Дехар до, тидаме эца, кхин йолу дуьнана машан-меттигаш а лелош хила мега нийсса йогӀу хьажораг (URL) хӀокху хӀуман, хӀокху могӀаме йогӀуш ялахь яцахь а иза хила мега жигара лелош.",
"undelete-error": "АгӀо меттахӀоттаяран гӀалат",
"undelete-error-short": "Файл меттахӀоттаяран гӀалат: $1",
"undelete-error-long": "Файл меттахӀоттош гӀалат даьлла:\n\n$1",
- "undelete-show-file-submit": "Хlаъ",
+ "undelete-show-file-submit": "ХӀаъ",
"namespace": "Цlерийн ана:",
"invert": "Хаьржинарг къайлаяккха",
"tooltip-invert": "ХӀоттае хӀара билгало, хаьржинчу цӀерийн меттиган агӀонашан хийцамаш къайлабаха (кхин дихкина цӀерийн меттигаш, гайтина елахь)",
"contributions-title": "{{GENDER:$1|Декъашхочун}} къинхьегам $1",
"mycontris": "Сан къинхьегам",
"contribsub2": "Къинхьегам $1 ($2)",
- "contributions-userdoesnotexist": "«$1» декÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н дÓ\80аÑ\8fздаÑ\80 дÓ\80аÑ\8fздина Ñ\8fц.",
+ "contributions-userdoesnotexist": "«$1» иÑ\88Ñ\82а декÑ\8aаÑ\88Ñ\85оÑ\87Ñ\83н дÓ\80аÑ\8fздаÑ\80 дац.",
"nocontribs": "Дехарца хийцамаш цакарий.",
"uctop": "(карара)",
"month": "Баттачохь (я хьалхе):",
"noautoblockblock": "ша блоктухарг дӏаяйина",
"createaccountblock": "цамагдо керла дӀаяздарш кхоллар",
"emailblock": "цамаго кехаташ кхехӀита",
- "blocklist-nousertalk": "шин дийцаре агӀо тая лууш дац",
+ "blocklist-nousertalk": "шин дийцаре агӀо таян луш дац",
"ipblocklist-empty": "Блоктохаран могӀам баьсса бу.",
"ipblocklist-no-results": "И адрес блоктоьхна дац.",
"blocklink": "блоктоха",
"block-log-flags-nocreate": "цамагдо керла дӏаяздарш кхоллар",
"block-log-flags-noautoblock": "ша блоктухарг дӏаяйина",
"block-log-flags-noemail": "цамаго кехаташ кхехӀита",
- "block-log-flags-nousertalk": "шин дийцаре агӀо тая лууш дац",
+ "block-log-flags-nousertalk": "шин дийцаре агӀо таян луш дац",
"block-log-flags-angry-autoblock": "латина шуьйра автоблоктохар",
"block-log-flags-hiddenname": "декъашхочун цӀе къайлаяьккхина",
"range_block_disabled": "Куьйгалхошна диапазонашна блоктоха цамага до.",
"revertmove": "юхаяккха",
"delete_and_move": "Цle а хуьйцуш дӀаяккха",
"delete_and_move_text": "== ДӀаяккха хьокъ ю ==\nИ цӀе йолу аг1о «[[:$1]]» йолуш ю. \nЛаьий хьуна и дӀаяккха, цӀе хийца таро хилийта?",
- "delete_and_move_confirm": "Хlаъ, дӀаяккха хlара агlо",
+ "delete_and_move_confirm": "ХӀаъ, дӀаяккха хӀара агӀо",
"delete_and_move_reason": "ДӀаяьккхина цӀе хийца я таро хилийта «[[$1]]»",
"selfmove": "АгӀона цӏе хийца йиш яц: и цӏе хӏокху агӏона йолуш ю.",
"immobile-source-page": "ХӀокху агӏона цӏе хийца йиш яц.",
"watchlistedit-clear-removed": "{{PLURAL:$1|ДӀаяьккхина|ДӀаяьхна}} $1 {{PLURAL:$1|дӀаяздар|дӀаяздарш}}:",
"watchlistedit-too-many": "Кхузахь гайта тӀехь дукха агӀонаш ю.",
"watchlisttools-clear": "Тергаман могӀам дӀацӀанбан",
- "watchlisttools-view": "Ð\9cогÓ\80ам Ñ\87Ñ\83Ñ\80а агÓ\80онаÑ\88ан хийцамаш",
+ "watchlisttools-view": "Ð\9cогÓ\80ам Ñ\87Ñ\83Ñ\80а агÓ\80онийн хийцамаш",
"watchlisttools-edit": "Хьажа/нисбé могӀам",
"watchlisttools-raw": "Йоза санна тае",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|дийцаре]])",
"logentry-rights-rights": "$1 {{GENDER:$2|хийцина}} $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",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|чуяьккхина}} керла верси $3",
"logentry-upload-revert": "$1 {{GENDER:$2|чуяьккхина}} $3",
"rightsnone": "(яц)",
"feedback-bugornote": "Хьайн техникин халонах лаьцна яздан хӀума делахь, дехар до, [$1 хаам бе тхоьга].\nДацахь хьан йиш ю хӀокху атта кепаца «[$3 $2]» агӀонг къамел тӀетоха хьан декъашхочун цӀарца, кхин лелош йолу браузер билгал еш.",
"userlogin-resetlink": "وردەکارییەکانی چوونەژوورەوەتت لە بیر کردووە؟",
"userlogin-resetpassword-link": "تێپەڕوشەکەت بیر کردووە؟",
"userlogin-helplink2": "یارمەتی بۆ چوونەژوورەوە",
- "userlogin-loggedin": "تۆ ھەر ئێستا بە ناوی {{GENDER:$1|$1}} چوویتە ژوورەوە.\nفۆرمی ژێرەوە بەکاربھێنە بۆ چوونەژوورەوە وەک بەکارھێنەرێکی تر.",
- "userlogin-createanother": "ھەژمارێکی تر دروست بکە",
"createacct-emailrequired": "ناونیشانی ئیمەیل",
"createacct-emailoptional": "ناونیشانی ئیمەیل (دڵخوازانە)",
"createacct-email-ph": "ناونیشانی ئیمەیلەکەت بنووسە",
"powersearch-togglelabel": "تاوتوێ بکە:",
"powersearch-toggleall": "ھەموو",
"powersearch-togglenone": "ھیچیان",
+ "powersearch-remember": "ھەڵبژاردەکانت بۆ گەڕانەکانی تر لە بیر بێت",
"search-external": "گەڕانی دەرەکی",
"searchdisabled": "گەڕانی {{SITENAME}} ئێستە کار ناکات.\nدەتوانی بۆ ئێستا لە گەڕانی گووگڵ کەڵک وەرگری.\nلەیادت بێت لەوانەیە پێرستەکانیان بۆ گەڕانی ناو {{SITENAME}}، کاتبەسەرچوو بێت.",
"preferences": "ھەڵبژاردەکان",
"default": "بنچینەیی",
"prefs-files": "پەڕگەکان",
"prefs-custom-css": "CSSی دڵخواز",
- "prefs-custom-js": "JSی دڵخواز",
+ "prefs-custom-js": "جاڤاسکریپتی دڵخواز",
"prefs-common-css-js": "سیئێسئێس/جاڤاسکریپتی ھاوبەش بۆ گشت پێستەکان:",
"prefs-reset-intro": "دەتوانی لەم لاپەڕە بۆ گەڕانەوەی هەڵبژاردەکانت بۆ بنچینەیی ماڵپەر کەڵک وەرگریت.\nگەر ئەوە بکەی ئیتر گۆڕانەکەت ناگەڕێتەوە.",
"prefs-emailconfirm-label": "پشتڕاستکردنەوەی ئیمەیل:",
"movepagetext-noredirectfixer": "بەکارھێنانی ئەم فۆرمەی خوارەوە ناوی پەڕەیەک دەگۆڕێت، بە گواستنەوەی ھەموو مێژووەکەی بۆ ناوی نوێ.\nناوە کۆنەکە دەبێتە پەڕەیەکی ڕەوانەکردنەوە بۆ ناوە نوێکە.\nدڵنیا بە کە [[Special:DoubleRedirects|دووجار ڕەوانەکراوەکان]] یان [[Special:BrokenRedirects|ڕەوانەکراوە شکاوەکان]] تاقی بکەیتەوە.\nتۆ بەرپرسیاری لەوەی کە دڵنیا ببیتەوە بەستەرەکان ھەر پێوەندییان ھەیە بەو شوێنە کە چاوەڕوان دەکرێت.\n\nدەبێت بزانی کە پەڕەکە '''ناگوازرێتەوە''' ئەگەر پێشتر پەڕەیەک بە ناوە نوێکەوە ھەبێت، مەگەر ئەوەی کە پەڕەکە واڵا یان ڕەوانەکراوەیەک بێت و ھیچ مێژووی گۆڕاندنی پێشووی نەبێت.\nئەمە بەو واتایە کە ئەگەر ھەڵەیەک بکەی دەتوانی ناوی پەڕەکە دیسانەوە بگۆڕی بۆ ناوی پێشووی، و ناتوانی بیخەیتە جێگەی پەڕەیەک کە ھەنووکە ھەیە.\n\n'''ھۆشیار بە!'''\nئەمە دەتوانێت گۆڕانێکی زۆر نابەجێ و چاوەڕێنەکراو بێت بۆ پەڕەیەکی بەناوبانگ؛\nتکایە پێش گۆڕینی ناو باش بیر لە ئاکامەکەی بکەوە.",
"movepagetalktext": "پەڕەی وتووێژی پەیوەندیداری بە شێوەی خۆکار لەگەڵیدا دەگوازرێتەوە، '''مەگەر:'''\n* پەڕەیەکی وتووێژی ناواڵا پێشتر ھەبێت لە ژێر ناوە نوێکەدا، یان\n* ئەو چوارچێوەی خوارەوە لێنەدراو بکەی.\n\nلەو حاڵەتەدا، ئەگەر بتەوێت بیگوازیتەوە ناچار دەبیت بە شێوەی دەستی بیگوازیتەوە یان تێکەڵیان بکەی.",
"movearticle": "ئەم پەڕەیە بگوازەوە:",
+ "movecategorypage-warning": "<strong>ھۆشدار:</strong> تۆ خەریکی گواستنەوەی پەڕەی پۆلی. تکایە ئەمە لەبەرچاو بگرە تەنیا پەڕەکە دەگوازرێتەوە و پەڕەکانی ناو پۆلە کۆنەکە <em>ناچێتە</em> ناو پۆلە نوێکەوە.",
"movenologintext": "بۆ گواستنەوەی پەڕەیەک، ئەشێ ببی بە ئەندام و [[Special:UserLogin|لە ژوورەوە]] بیت.",
"movenotallowed": "ڕێگەت پێنەدراوە بۆ گواستنەوەی لاپەڕەکان.",
"movenotallowedfile": "ڕێگەت پێنەدراوە بۆ گواستنەوەی پەڕگەکان.",
"userlogin-resetlink": "Zapomněli jste přihlašovací údaje?",
"userlogin-resetpassword-link": "Zapomněli jste heslo?",
"userlogin-helplink2": "Nápověda k přihlašování",
- "userlogin-loggedin": "Již jste {{GENDER:$1|přihlášen|přihlášena}} jako $1.\nPomocí formuláře níže se můžete přihlásit jako jiný uživatel.",
- "userlogin-createanother": "Vytvořit jiný účet",
"createacct-emailrequired": "E-mailová adresa",
"createacct-emailoptional": "E-mailová adresa (nepovinné)",
"createacct-email-ph": "Zadejte svou e-mailovou adresu",
"createaccount-text": "Někdo na {{grammar:6sg|{{SITENAME}}}} ($4) vytvořil účet s vaší e-mailovou adresou.\nJméno účtu: „$2“\nHeslo: „$3“\nMěli byste se co nejdřív přihlásit a změnit si heslo.\n\nPokud byl účet vytvořen omylem, považujte tuto zprávu za bezpředmětnou.",
"login-throttled": "Provedli jste příliš mnoho pokusů o přihlášení.\nNež to zkusíte znovu, musíte počkat na vypršení lhůty $1.",
"login-abort-generic": "Vaše přihlášení se nezdařilo – přerušeno",
+ "login-migrated-generic": "Váš účet byl zmigrován a vaše uživatelské jméno již nadále na této wiki neexistuje.",
"loginlanguagelabel": "Jazyk: $1",
"suspicious-userlogout": "Váš požadavek na odhlášení byl odmítnut, neboť to vypadá, že ho poslal rozbitý prohlížeč nebo cachující proxy.",
"createacct-another-realname-tip": "Skutečné jméno je nepovinné.\nPokud se ho rozhodnete uvést, bude použito pro označení autorství vaší práce.",
"showpreview": "Ukázat náhled",
"showdiff": "Ukázat změny",
"blankarticle": "<strong>Upozornění:</strong> Stránka, kterou se chystáte založit, je prázdná. Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude založena zcela bez obsahu.",
- "anoneditwarning": "'''Varování:''' Nejste přihlášen(a). Vaše IP adresa bude zveřejněna v historii této stránky.",
+ "anoneditwarning": "'''Varování:''' Nejste přihlášen(a). Pokud uložíte jakoukoli editaci, bude vaše IP adresa zveřejněna v historii této stránky. Pokud se <strong>[$1 přihlásíte]</strong> nebo si <strong>[$2 vytvoříte účet]</strong>, budou vaše editace připsány vašemu uživatelskému jménu a získáte i další výhody.",
"anonpreviewwarning": "''Nejste přihlášen(a). Uložením zveřejníte svou IP adresu v historii této stránky.''",
"missingsummary": "'''Připomenutí:''' Nezadali jste shrnutí editace. Pokud ještě jednou kliknete na Uložit změny, bude vaše editace zapsána bez shrnutí.",
"missingcommenttext": "Zadejte komentář",
"userlogin-resetlink": "Har du glemt dine login oplysninger?",
"userlogin-resetpassword-link": "Glemt din adgangskode?",
"userlogin-helplink2": "Hjælp med at logge på",
- "userlogin-loggedin": "Du er allerede logget på som {{GENDER:$1|$1}}.\nBrug formularen nedenfor til at logge på som en anden bruger.",
- "userlogin-createanother": "Opret en anden konto",
"createacct-emailrequired": "E-mailadresse",
"createacct-emailoptional": "E-mailadresse (valgfri)",
"createacct-email-ph": "Indtast din e-mailadresse",
"randomincategory": "Tilfældig side i kategori",
"randomincategory-invalidcategory": "\"$1\" er ikke et gyldigt kategorinavn.",
"randomincategory-nopages": "Der er ingen sider i [[:Category:$1]].",
- "randomincategory-selectcategory": "Få tilfældig side fra kategori: $1 $2.",
- "randomincategory-selectcategory-submit": "Gå til",
+ "randomincategory-category": "Kategori:",
"randomredirect": "Tilfældige henvisninger",
"randomredirect-nopages": "Der er ingen omdirigeringer i navnerummet $1.",
"statistics": "Statistik",
"listgrouprights-namespaceprotection-header": "Navnerumsbegrænsninger",
"listgrouprights-namespaceprotection-namespace": "Navnerum",
"listgrouprights-namespaceprotection-restrictedto": "Rettighed(er) der giver brugeren mulighed for at redigere",
+ "trackingcategories-desc": "Optagelseskriterier for kategori",
+ "noindex-category-desc": "Siden indekseres ikke af robotter, fordi den indeholder det magiske ord <code><nowiki>__NOINDEX__</nowiki></code> og er i et navnerum, hvor dette flag er tilladt.",
+ "index-category-desc": "Siden indeholder <code><nowiki>__INDEX__</nowiki></code> (og er i et navnerum, hvor dette flag er tilladt), og bliver derfor indekseret af robotter, hvor den normalt ikke ville blive det.",
"mailnologin": "Du er ikke logget på",
"mailnologintext": "Du skal være [[Special:UserLogin|logget på]] og have en gyldig e-mailadresse sat i dine [[Special:Preferences|indstillinger]] for at sende e-mail til andre brugere.",
"emailuser": "E-mail til denne bruger",
"watchlist-details": "Du har $1 {{PLURAL:$1|side|sider}} på din overvågningsliste (ekskl. 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 '''$1''' ændringer}} i {{PLURAL:$2|den sidste time|de sidste '''$2''' timer}} op til den $3 kl. $4.",
+ "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.",
"wlshowlast": "Vis de seneste $1 timer $2 dage $3",
"watchlist-options": "Indstillinger for overvågningslisten",
"watching": "Tilføjer overvågning …",
"exbeforeblank": "indholdet før siden blev tømt var: '$1'",
"delete-confirm": "Slet \"$1\"",
"delete-legend": "Slet",
- "historywarning": "Advarsel: Siden du er ved at slette har en historie med $1 {{PLURAL:$1|revision|revisioner}}:",
+ "historywarning": "<strong>Advarsel:</strong> Siden du er ved at slette har en historie med $1 {{PLURAL:$1|version|versioner}}:",
"confirmdeletetext": "Du er ved at slette en side sammen med hele dens tilhørende historik.\nBekræft venligst at du virkelig vil gøre dette, at du forstår konsekvenserne, og at du gør det i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].",
"actioncomplete": "Gennemført",
"actionfailed": "Handlingen mislykkedes",
"delete-edit-reasonlist": "Rediger sletningsårsager",
"delete-toobig": "Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}}. Sletning af sådanne sider er begrænset, for at forhindre utilsigtet forstyrrelse af {{SITENAME}}.",
"delete-warning-toobig": "Denne side har en stor historik, over {{PLURAL:$1|en version|$1 versioner}} versioner, slettes den kan det forstyrre driften af {{SITENAME}}, gå forsigtigt frem.",
+ "deleteprotected": "Du kan ikke slette denne side, fordi den er beskyttet.",
"deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] linker til eller inkluderer den side, du er ved at slette.",
"rollback": "Fjern redigeringer",
"rollback_short": "Fjern redigering",
"contributions-title": "Brugerbidrag for $1",
"mycontris": "Bidrag",
"contribsub2": "For {{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.",
"nocontribs": "Ingen ændringer er fundet som opfylder disse kriterier.",
"uctop": "(seneste)",
"month": "Måned:",
"autoblockid": "Autoblock #$1",
"block": "Bloker bruger",
"unblock": "Ophæv blokering af bruger",
- "blockip": "Bloker bruger",
+ "blockip": "Bloker {{GENDER:$1|bruger}}",
"blockip-legend": "Bloker bruger",
"blockiptext": "Brug formularen herunder til at blokere for skriveadgang fra en bestemt IP-adresse eller et brugernavn.\nDette bør kun gøres for at forhindre vandalisme og skal være i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjerne]].\nAngiv en konkret begrundelse herunder (for eksempel med angivelse af sider der har været udsat for vandalisme).",
"ipaddressorusername": "IP-adresse eller brugernavn",
"ipb-unblock-addr": "Ophæv blokeringen af \"$1\"",
"ipb-unblock": "Frigive IP-adresse/bruger",
"ipb-blocklist": "Vis alle blokeringer som er i kraft",
- "ipb-blocklist-contribs": "Bidrag fra $1",
+ "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}",
"unblockip": "Ophæv blokering af bruger",
"unblockiptext": "Brug formularen herunder for at gendanne skriveadgangen for en tidligere blokeret IP-adresse eller bruger.",
"ipusubmit": "Ophæv blokeringen",
"import": "Importer sider",
"importinterwiki": "Importer sider fra en anden wiki",
"import-interwiki-text": "Vælg en Wiki og en side til importen.\nDatoen i den pågældende version og forfatterne ændres ikke.\nAlle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-loggen]].",
- "import-interwiki-source": "Kildewiki/-side:",
"import-interwiki-history": "Importer alle versioner af denne side",
"import-interwiki-templates": "Inkluder alle skabeloner",
"import-interwiki-submit": "Importer",
"import-upload": "Upload XML-data",
"import-token-mismatch": "Sessionsdata er mistet. Prøv venligst igen.",
"import-invalid-interwiki": "Kan ikke importere fra den angivne wiki.",
- "import-error-edit": "Siden \"$1\" importeres ikke, da du ikke har rettigheden til at redigere den.",
- "import-error-create": "Siden \"$1\" importeres ikke, da du ikke har rettigheden til at oprette den.",
- "import-error-interwiki": "Siden \"$1\" importeres ikke, da dens navn er reserveret for eksterne henvisninger (interwiki).",
- "import-error-special": "Siden \"$1\" importeres ikke, da den tilhører et særligt navnerum, der ikke tillader sider.",
- "import-error-invalid": "Siden \"$1\" importeres ikke, da dens navn er ugyldigt.",
+ "import-error-edit": "Siden \"$1\" blev ikke importeret, da du ikke har rettighed til at redigere den.",
+ "import-error-create": "Siden \"$1\" blev ikke importeret, da du ikke har rettighed til at oprette den.",
+ "import-error-interwiki": "Siden \"$1\" blev ikke importeret, da dens navn er reserveret for eksterne henvisninger (interwiki).",
+ "import-error-special": "Siden \"$1\" blev ikke importeret, da den tilhører et særligt navnerum, der ikke tillader sider.",
+ "import-error-invalid": "Siden \"$1\" blev ikke importeret, fordi det navn, som den ville være importeret til er ugyldigt på denne wiki.",
"import-error-unserialize": "Ændring $2 af siden \"$1\" kunne ikke afserialiseres. Ændringen brugte indholdsmodel $3 serialiseret som $4.",
"import-error-bad-location": "Version $2 der bruger indholdsmodellen $3 kan ikke gemmes på \"$1\" på denne wiki, da denne model ikke understøttes på denne side.",
"import-options-wrong": "{{PLURAL:$2|Ugyldig indstilling|Ugyldige indstillinger}}: <nowiki>$1</nowiki>",
"importlogpage": "Importlog",
"importlogpagetext": "Administrativ import af sider med versionshistorik fra andre Wikis.",
"import-logentry-upload": "[[$1]] blev importeret",
- "import-logentry-upload-detail": "{{PLURAL:$1|1 version|$1 versioner}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versioner}} importeret",
"import-logentry-interwiki": "$1 blev importeret (Transwiki)",
- "import-logentry-interwiki-detail": "{{PLURAL:$1|1 version|$1 versioner}} af $2 importeret",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versioner}} importeret fra $2",
"javascripttest": "Test af JavaScript",
"javascripttest-title": "Kører $1 test",
"javascripttest-pagetext-noframework": "Denne side er reserveret til at teste JavaScript.",
"newimages-summary": "Denne specialside viser de senest oplagte filer.",
"newimages-legend": "Filter",
"newimages-label": "Filnavn (eller en del af det):",
+ "newimages-showbots": "Vis oplægninger af robotter",
"noimages": "Ingen filer fundet.",
"ilsubmit": "Søg",
"bydate": "efter dato",
"confirm-watch-top": "Tilføj denne side til din overvågningsliste?",
"confirm-unwatch-button": "OK",
"confirm-unwatch-top": "Fjern denne side fra din overvågningsliste?",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← forrige side",
"imgmultipagenext": "næste side →",
"imgmultigo": "OK",
"autosumm-replace": "Erstatter sidens indhold med \"$1\"",
"autoredircomment": "Omdirigering til [[$1]] oprettet",
"autosumm-new": "Oprettede siden med \"$1\"",
+ "autosumm-newblank": "Oprettede tom side",
"lag-warn-normal": "Ændringer som er nyere end {{PLURAL:$1|et sekund|$1 sekunder}}, vises muligvis ikke i denne liste.",
"lag-warn-high": "Grundet stor belastning af databaseserveren vil ændringer der er nyere end {{PLURAL:$1|et sekund|$1 sekunder}} måske ikke blive vist i denne liste.",
"watchlistedit-normal-title": "Rediger overvågningsliste",
"watchlistedit-raw-done": "Din overvågningsliste blev opdateret.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 side|$1 sider}} er tilføjet:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 side|$1 sider}} er fjernet:",
+ "watchlistedit-clear-title": "Ryddet overvågningsliste",
+ "watchlistedit-clear-legend": "Ryd overvågningsliste",
+ "watchlistedit-clear-explain": "Alle siderne vil blive fjernet fra din overvågningsliste",
+ "watchlistedit-clear-titles": "Sider:",
+ "watchlistedit-clear-submit": "Ryd overvågningslisten (dette er permanent!)",
+ "watchlistedit-clear-done": "Din overvågningsliste er blevet ryddet.",
"watchlisttools-clear": "Ryd overvågningsliste",
"watchlisttools-view": "Se ændrede sider i overvågningslisten",
"watchlisttools-edit": "Rediger overvågningsliste",
"otherlanguages": "In anderen Sprachen",
"redirectedfrom": "(Weitergeleitet von $1)",
"redirectpagesub": "Weiterleitung",
+ "redirectto": "Weiterleitung nach:",
"lastmodifiedat": "Diese Seite wurde zuletzt am $1 um $2 Uhr geändert.",
"viewcount": "Diese Seite wurde bisher {{PLURAL:$1|einmal|$1 mal}} abgerufen.",
"protectedpage": "Geschützte Seite",
"userlogin-resetlink": "Die Anmeldedaten vergessen?",
"userlogin-resetpassword-link": "Passwort vergessen?",
"userlogin-helplink2": "Hilfe beim Anmelden",
- "userlogin-loggedin": "Du bist bereits als {{GENDER:$1|$1}} angemeldet.\nBenutze das unten stehende Formular, um dich unter einem anderen Benutzernamen anzumelden.",
- "userlogin-createanother": "Ein weiteres Benutzerkonto erstellen",
"createacct-emailrequired": "E-Mail-Adresse",
"createacct-emailoptional": "E-Mail-Adresse (optional)",
"createacct-email-ph": "Gib deine E-Mail-Adresse ein",
"createaccount-text": "Es wurde für dich ein Benutzerkonto „$2“ auf {{SITENAME}} ($4) erstellt. Das automatisch generierte Passwort für „$2“ ist „$3“. Du solltest dich nun anmelden und das Passwort ändern.\n\nFalls das Benutzerkonto irrtümlich angelegt wurde, kannst du diese Nachricht ignorieren.",
"login-throttled": "Du hast zu oft versucht, dich anzumelden.\nBitte warte $1, bevor du es erneut probierst.",
"login-abort-generic": "Deine Anmeldung war nicht erfolgreich – Abgebrochen",
+ "login-migrated-generic": "Dein Benutzerkonto wurde migriert. Dein Benutzername ist auf diesem Wiki nicht mehr vorhanden.",
"loginlanguagelabel": "Sprache: $1",
"suspicious-userlogout": "Deine Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.",
"createacct-another-realname-tip": "Der bürgerliche Name ist optional.\nWenn du ihn angibst, wird er für die Zuordnung der Beiträge verwendet.",
"showpreview": "Vorschau zeigen",
"showdiff": "Änderungen zeigen",
"blankarticle": "<strong>Warnung:</strong> Die Seite, die du erstellst, ist leer.\nWenn du erneut auf „{{int:savearticle}}“ klickst, wird die Seite ohne Inhalt erstellt.",
- "anoneditwarning": "Du bearbeitest diese Seite unangemeldet. Wenn du sie abspeicherst, wird deine aktuelle IP-Adresse in der Versionsgeschichte aufgezeichnet und ist damit unwiderruflich '''öffentlich''' einsehbar.",
+ "anoneditwarning": "<strong>Warnung:</strong> Du bist nicht angemeldet. Deine IP-Adresse wird öffentlich sichtbar, falls du Bearbeitungen durchführst. Wenn du dich <strong>[$1 anmeldest]</strong> oder <strong>[$2 ein Benutzerkonto erstellst]</strong>, werden deine Bearbeitungen zusammen mit anderen Beiträgen deinem Benutzernamen zugeordnet.",
"anonpreviewwarning": "''Du bist nicht angemeldet. Beim Speichern wird deine IP-Adresse in der Versionsgeschichte aufgezeichnet.''",
"missingsummary": "'''Hinweis:''' Du hast keine Zusammenfassung angegeben. Wenn du erneut auf „{{int:savearticle}}“ klickst, wird deine Änderung ohne Zusammenfassung übernommen.",
"missingcommenttext": "Dein Abschnitt enthält keinen Text.",
"grouppage-suppress": "{{ns:project}}:Oversighter",
"right-read": "Seiten lesen",
"right-edit": "Seiten bearbeiten",
- "right-createpage": "Seiten erstellen (außer Diskussionsseiten)",
+ "right-createpage": "Seiten erstellen (die keine Diskussionsseiten sind)",
"right-createtalk": "Diskussionsseiten erstellen",
"right-createaccount": "Benutzerkonto erstellen",
"right-minoredit": "Bearbeitungen als klein markieren",
"userlogin-resetlink": "T'ét scurdê j elemèint p'r al tó ingrès?",
"userlogin-resetpassword-link": "T' ét scurdê la cêva 'd ingrès?",
"userlogin-helplink2": "Ajót per l'ingrès",
- "userlogin-loggedin": "T'ét bèle coleghê {{GENDER:$1|$1}}. \nDrōva al mōdul ché sòta cme un êter utèint.",
- "userlogin-createanother": "Fà 'n' êtra utèinsa.",
"createacct-emailrequired": "Indirés pôsta eletrônica",
"createacct-emailoptional": "Indirés pôsta eletrônica (se 's vōl)",
"createacct-email-ph": "Scrév al tó indirés ed pôsta eletrônica",
"showpreview": "Guêrda préma 'd salvêr",
"showdiff": "Guêrda i cambiamèint",
"blankarticle": "<strong>Atèinti:</strong>la pàgina che t'é drē fêr la gh'à gnînto dèinter. S' ét tōren a schisêr in sém a \"{{int:savearticle}}\", la pàgina la srà fât sèinsa gnînto dèinter.",
- "anoneditwarning": "'''Atensiòun:''' Ingrès mìa fât. Al tó indirés IP al srà sgnê int la stòria ed cla pàgina chè.",
+ "anoneditwarning": "<strong>Atèinti:</strong> An n'é mìa stê fât l'ingrès. S' ét farê dal mudéfichi al tó indirés IP al srà vést da tót. Se <strong>[$1 và dèinter]</strong> o <strong>[$2 fà 'n' utèinsa]</strong>, al tô mudéfichi a srân sgnêdi al tó nòm utèint, insèm a êter benefési.",
"anonpreviewwarning": "\"An n'é mìa stê fât l'ingrès. Mèinter es sêlva la pàgina, l'indirés IP al srà sgnê int la stòria 'd la pàgina.\"",
"missingsummary": "'''Atensiòun:''' an n'é mìa stê precişê al mutîv de sté mudéfica. S'es tōrna a clichêr insém a \"{{int:savearticle}}\" la mudéfica la gnirà salvêda cun al mutîv vōd.",
"missingcommenttext": "Scréver un cumèint ché sòta.",
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Diferèinsi",
"prefs-help-prefershttps": "Cla diferèinsa ché la gh'à efèt dal st'êter ingrès.",
+ "prefs-tabs-navigation-hint": "Sugerimèint: è pusébil druvêr i tâst frècia a mansèina e a dréta per spustêres tr'al schēdi int l'elèinch dal schēdi.",
+ "email-address-validity-valid": "L'indirès ed pôste eletrônica a sèmbra vâlid",
+ "email-address-validity-invalid": "Mèt un indirés ed pôsta eletrônica vâlid",
+ "userrights": "Gestiòun di permès relatîv a j utèint",
+ "userrights-lookup-user": "Gestiòun di gróp utèint",
+ "userrights-user-editname": "Mèt dèinter al nòm utèint:",
+ "editusergroup": "Mudéfica gróp utèint",
+ "editinguser": "Mudéfica i dirét utèint ed l' utèint <strong>[[User:$1|$1]]</strong> $2",
+ "userrights-editusergroup": "Mudéfica gróp utèint",
+ "saveusergroups": "Sêlva gróp utèint",
+ "userrights-groupsmember": "Al fà pêrt {{PLURAL:$1|al gróp|ai gróp}}:",
"group": "Gróp:",
"group-user": "Utèint",
"group-autoconfirmed": "Utèint cunvalidê da per ló",
"userlogin-resetlink": "Ξεχάσατε τα στοιχεία εισόδου σας;",
"userlogin-resetpassword-link": "Ξεχάσατε τον κωδικό πρόσβασης;",
"userlogin-helplink2": "Βοήθεια για τη σύνδεση",
- "userlogin-loggedin": "Είστε ήδη {{GENDER:$1|συνδεδεμένος|συνδεδεμένη}} ως $1.\nΧρησιμοποιήστε την παρακάτω φόρμα για να συνδεθείτε ως άλλος χρήστης.",
- "userlogin-createanother": "Δημιουργήσετε έναν άλλο λογαριασμό",
"createacct-emailrequired": "Διεύθυνση ηλεκτρονικού ταχυδρομείου",
"createacct-emailoptional": "Διεύθυνση ηλεκτρονικού ταχυδρομείου (προαιρετικό)",
"createacct-email-ph": "Εισάγετε το email σας",
"showpreview": "Εμφάνιση προεπισκόπησης",
"showdiff": "Εμφάνιση αλλαγών",
"blankarticle": "<strong>Προειδοποίηση:</strong> Η σελίδα που δημιουργείτε είναι κενή.\nΕάν κάνετε κλικ στο κουμπί \"{{int:savearticle}}\" και πάλι, η σελίδα θα δημιουργηθεί χωρίς κανένα περιεχόμενο.",
- "anoneditwarning": "'''Προειδοποίηση:''' Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα καταγραφεί στο ιστορικό επεξεργασίας αυτής της σελίδας.",
+ "anoneditwarning": "<strong>Προειδοποίηση:</strong> Δεν έχετε συνδεθεί. Η διεύθυνση IP σας θα είναι ορατή δημόσια αν κάνετε κάποια επεξεργασία. Αν <strong>[$1 συνδεθείτε]</strong> ή <strong>[$2 δημιουργήσετε λογαριασμό]</strong>, οι επεξεργασίες σας θα αποδοθούν στο όνομά χρήστη σας, μαζί με άλλα οφέλη.",
"anonpreviewwarning": "''Δεν έχετε συνδεθεί. Η αποθήκευση θα καταγράψει την διεύθυνσή IP σας στο ιστορικό επεξεργασίας αυτής της σελίδας.''",
"missingsummary": "'''Υπενθύμιση:''' Δεν έχετε συμπληρώσει τη σύνοψη επεξεργασίας. Αν κάνετε κλικ στο κουμπί Αποθήκευση πάλι, η επεξεργασία σας θα αποθηκευτεί χωρίς σύνοψη.",
"missingcommenttext": "Παρακαλώ εισάγετε ένα σχόλιο παρακάτω.",
"nonunicodebrowser": "'''ΠΡΟΣΟΧΗ! Ο περιηγητής σας δεν είναι συμβατός με κωδικοποίηση Unicode.'''\nΓια την ασφαλή επεξεργασία των σελίδων έχει βρεθεί ένας εναλλακτικός τρόπος: Όσοι χαρακτήρες δεν είναι ASCII θα φαίνονται στο πλαίσιο επεξεργασίας ως δεκαεξαδικοί κωδικοί.",
"editingold": "'''Προειδοποίηση: Επεξεργάζεστε μια παλιότερη αναθεώρηση αυτής της σελίδας.'''\nΑν την αποθηκεύσετε, όσες αλλαγές έχουν γίνει μετά από αυτή την αναθεώρηση θα χαθούν.",
"yourdiff": "Διαφορές",
- "copyrightwarning": "Î\9fλεÏ\82 οι Ï\83Ï\85νειÏ\83Ï\86οÏ\81ÎÏ\82 Ï\83Ï\84ο {{SITENAME}} θεÏ\89Ï\81οÏ\8dνÏ\84αι Ï\8cÏ\84ι δημοÏ\83ιεÏ\8dονÏ\84αι Ï\83Ï\8dμÏ\86Ï\89να με Ï\84ην $2 (Î\92λ. $1 για λεÏ\80Ï\84ομÎÏ\81ειεÏ\82).\nÎ\91ν δεν εÏ\80ιθÏ\85μείÏ\84ε Ï\84α κείμενά Ï\83αÏ\82 να Ï\84α εÏ\80εξεÏ\81γαÏ\83Ï\84οÏ\8dν καÏ\84ά Ï\84ην κÏ\81ίÏ\83η Ï\84οÏ\85Ï\82 άλλοι Ï\87Ï\81ήÏ\83Ï\84εÏ\82 και να Ï\84α διαδÏ\8eÏ\83οÏ\85ν καÏ\84ά βοÏ\8dληÏ\83η, Ï\80αÏ\81ακαλοÏ\8dμε να μην Ï\84α αναÏ\81Ï\84ήÏ\83εÏ\84ε Ï\83ε αÏ\85Ï\84Ï\8c Ï\84ο Ï\87Ï\8eÏ\81ο. Î\8c,Ï\84ι Ï\83Ï\85νειÏ\83Ï\86ÎÏ\81εÏ\84ε Ï\83Ï\84ο Ï\87Ï\8eÏ\81ο αÏ\85Ï\84Ï\8c Ï\83ε κείμενα, διαγÏ\81άμμαÏ\84α, Ï\83Ï\84οιÏ\87εία ή εικÏ\8cνεÏ\82 Ï\80Ï\81ÎÏ\80ει να είναι δικά Ï\83αÏ\82 ÎÏ\81γα ή να ανήκοÏ\85ν Ï\83Ï\84ο δημÏ\8cÏ\83ιο Ï\84ομÎα (public domain) ή να Ï\80Ï\81οÎÏ\81Ï\87ονÏ\84αι αÏ\80Ï\8c ελεÏ\8dθεÏ\81εÏ\82 ή ανοιÏ\87Ï\84ÎÏ\82 Ï\80ηγÎÏ\82 με Ï\81ηÏ\84ή άδεια αναδημοÏ\83ίεÏ\85Ï\83ηÏ\82.<br />\nΤÎλοÏ\82 βεβαιÏ\8eνεÏ\84ε Ï\80Ï\89Ï\82 Ï\8c,Ï\84ι γÏ\81άÏ\86εÏ\84ε Ï\83ε αÏ\85Ï\84Ï\8c Ï\84ον Ï\87Ï\8eÏ\81ο είναι Ï\80Ï\81Ï\89Ï\84Ï\8cÏ\84Ï\85Ï\80ο δικÏ\8c Ï\83αÏ\82 ÎÏ\81γο και, άÏ\83Ï\87εÏ\84α με Ï\84ην ÎκÏ\84αÏ\83ή Ï\84οÏ\85, δεν ÎÏ\87ει εκÏ\87Ï\89Ï\81ηθεί Ï\83ε Ï\84Ï\81ίÏ\84οÏ\85Ï\82 η δημοÏ\83ίεÏ\85Ï\83η και η εκμεÏ\84άλλεÏ\85Ï\83ή Ï\84οÏ\85.\n'''Î Î\91ΡÎ\91Î\9aÎ\91Î\9bÎ\9fÎ¥Î\9cÎ\95 Î\9dÎ\91 Î\9cÎ\97Î\9d Î\91Î\9dÎ\91ΡΤÎ\97ΣÎ\95ΤÎ\95 Î\9aÎ\95Î\99Î\9cÎ\95Î\9dÎ\91 ΤΡÎ\99ΤΩÎ\9d Î\95Î\91Î\9d Î\94Î\95Î\9d Î\95ΧÎ\95ΤÎ\95 ΤÎ\97Î\9d Î\91Î\94Î\95Î\99Î\91 ΤÎ\9fÎ¥ Î\99Î\94Î\99Î\9fÎ\9aΤÎ\97ΤÎ\97 ΤÎ\9fÎ¥ COPYRIGHT!'''",
+ "copyrightwarning": "ΠαÏ\81ακαλοÏ\8dμε Ï\83ημειÏ\8eÏ\83Ï\84ε Ï\8cÏ\84ι Ï\8cλεÏ\82 οι Ï\83Ï\85νειÏ\83Ï\86οÏ\81ÎÏ\82 Ï\83Ï\84ον ιÏ\83Ï\84Ï\8cÏ\84οÏ\80ο {{SITENAME}} θεÏ\89Ï\81οÏ\8dνÏ\84αι Ï\8cÏ\84ι δημοÏ\83ιεÏ\8dονÏ\84αι Ï\83Ï\8dμÏ\86Ï\89να με Ï\84ην $2 (βλ. $1 για λεÏ\80Ï\84ομÎÏ\81ειεÏ\82).\nÎ\91ν δεν εÏ\80ιθÏ\85μείÏ\84ε Ï\84α κείμενά Ï\83αÏ\82 να Ï\84α εÏ\80εξεÏ\81γάζονÏ\84αι ανηλεÏ\8eÏ\82 άλλοι Ï\87Ï\81ήÏ\83Ï\84εÏ\82 και να Ï\84α διαδίδοÏ\85ν καÏ\84ά βοÏ\8dληÏ\83η, Ï\84Ï\8cÏ\84ε να μην Ï\84α Ï\85Ï\80οβάλλεÏ\84ε εδÏ\8e.<br />Î\9cαÏ\82 Ï\85Ï\80Ï\8cÏ\83Ï\87εÏ\83Ï\84ε εÏ\80ίÏ\83ηÏ\82 Ï\8cÏ\84ι αÏ\85Ï\84Ï\8c Ï\84ο γÏ\81άÏ\88αÏ\84ε μÏ\8cνοι Ï\83αÏ\82 ή Ï\84ο ανÏ\84ιγÏ\81άÏ\88αÏ\84ε αÏ\80Ï\8c κάÏ\80οια ελεÏ\8dθεÏ\81η Ï\80ηγή Ï\89Ï\82 κοινÏ\8c κÏ\84ήμα ή κάÏ\84ι ανάλογο.\n<strong>Î\9cην Ï\85Ï\80οβάλλεÏ\84ε δοÏ\85λειά Ï\80οÏ\85 Ï\80Ï\81οÏ\83Ï\84αÏ\84εÏ\8dεÏ\84αι αÏ\80Ï\8c Ï\80νεÏ\85μαÏ\84ικά δικαιÏ\8eμαÏ\84α Ï\87Ï\89Ï\81ίÏ\82 άδεια!</strong>",
"copyrightwarning2": "Σημειώστε ότι όλες οι συνεισφορές στον ιστότοπο {{SITENAME}} μπορούν να υποστούν επεξεργασία, να αλλαχθούν, ή να αφαιρεθούν από άλλους συνεισφέροντες. Αν δεν θέλετε τα γραπτά σας να υποστούν επεξεργασία κατά βούληση, τότε μην τα τοποθετήσετε σε αυτό το χώρο.<br />\nΕπίσης μας υπόσχεστε πως ό,τι γράφετε είναι δικό σας, ή αντιγραμμένο από μια πηγή που είναι κοινό κτήμα, ή μια παρόμοια ελεύθερη πηγή (δείτε $1 για λεπτομέρειες).\n'''ΠΑΡΑΚΑΛΟΥΜΕ ΝΑ ΜΗΝ ΤΟΠΟΘΕΤΕΙΤΕ ΠΝΕΥΜΑΤΙΚΑ ΚΑΤΟΧΥΡΩΜΕΝΟ ΕΡΓΟ ΧΩΡΙΣ ΑΔΕΙΑ!'''",
"longpageerror": "'''Σφάλμα: Το κείμενο που καταχωρήσατε έχει μήκος {{PLURAL:$1|ένα kilobyte|$1 kilobytes}}, το οποίο είναι μεγαλύτερο από το μέγιστο {{PLURAL:$2|του ενός kilobyte|των $2 kilobytes}}.'''\nΔεν μπορεί να αποθηκευτεί.",
"readonlywarning": "'''Προειδοποίηση: Η βάση δεδομένων έχει κλειδωθεί για συντήρηση, έτσι δεν θα μπορέσετε να αποθηκεύσετε τις επεξεργασίες σας αυτή τη στιγμή.'''\nΜπορείτε αν θέλετε να μεταφέρετε με αντιγραφή-επικόλληση το κείμενό σας σε αρχείο κειμένου και να το αποθηκεύσετε για αργότερα.\n\nΟ διαχειριστής που την κλείδωσε έδωσε την εξής εξήγηση: $1",
"search-relatedarticle": "Σχετικά",
"searchrelated": "σχετικά",
"searchall": "όλα",
- "showingresults": "Δείτε παρακάτω μέχρι τα {{PLURAL:$1|'''1'''αποτέλεσμα|'''$1''' αποτελέσματα}} ξεκινώντας με #'''$2'''.",
+ "showingresults": "Παρακάτω {{PLURAL:$1|εμφανίζεται μέχρι <strong>1</strong> αποτέλεσμα|εμφανίζονται μέχρι <strong>$1</strong> αποτελέσματα}} ξεκινώντας από το Νο <strong>$2</strong>.",
+ "showingresultsinrange": "Παρακάτω {{PLURAL:$1|εμφανίζεται μέχρι <strong>1</strong> αποτέλεσμα|εμφανίζονται μέχρι <strong>$1</strong> αποτελέσματα}} σε εύρος από το Νο <strong>$2</strong> μέχρι το Νο <strong>$3</strong>.",
"showingresultsheader": "{{PLURAL:$5|Αποτέλεσμα '''$1''' από '''$3'''|Αποτελέσματα '''$1 - $2''' από '''$3'''}} για '''$4'''",
"search-nonefound": "Δεν υπάρχουν αποτελέσματα που να ικανοποιούν το ερώτημα.",
"powersearch-legend": "Αναλυτική αναζήτηση",
"right-browsearchive": "Αναζήτηση στις διαγραμμένες σελίδες",
"right-undelete": "Ανάκληση διαγραφής μίας σελίδας",
"right-suppressrevision": "Επιθεώρηση και αποκατάσταση αναθεωρήσεων κρυμμένων από τους διαχειριστές",
- "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμέτων από κάθε χρήστη",
+ "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμένων από κάθε χρήστη",
"right-suppressionlog": "Προβολή ιδιωτικών καταγραφών",
"right-block": "Φραγή άλλων χρηστών από την επεξεργασία",
"right-blockemail": "Φραγή ενός χρήστη από την αποστολή ηλεκτρονικών μηνυμάτων",
"recentchanges-legend-heading": "'''Υπόμνημα:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|κατάλογος νέων σελίδων]])",
"rcnotefrom": "Παρακάτω είναι οι αλλαγές από τις <strong>$2</strong> (εμφανίζονται μέχρι <strong>$1</strong> ).",
- "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από $3 $2",
+ "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από τις $3 στις $2",
"rcshowhideminor": "$1 μικροεπεξεργασιών",
"rcshowhideminor-show": "Εμφάνιση",
"rcshowhideminor-hide": "Απόκρυψη",
"windows-nonascii-filename": "Αυτό το wiki δεν υποστηρίζει ονόματα αρχείων με ειδικούς χαρακτήρες.",
"fileexists": "Υπάρχει ήδη αρχείο με αυτό το όνομα, παρακαλούμε ελέγξτε το <strong>[[:$1]]</strong> εάν δεν είστε {{GENDER:|σίγουρος|σίγουρη}} αν θέλετε να το αλλάξετε.\n[[$1|thumb]]",
"filepageexists": "Η σελίδα περιγραφής για αυτό το αρχείο δημιουργήθηκε ήδη στο <strong>[[:$1]]</strong>, αλλά κανένα αρχείο με αυτό το όνομα δεν υπάρχει αυτή τη στιγμή.\nΗ περιγραφἠ που θα εισάγετε δεν θα εμφανιστεί στη σελίδα περιγραφής.\nΓια να εμφανιστεί η περιγραφή σας εκεί, θα πρέπει να την επεξεργαστείτε χειροκίνητα.\n[[$1|thumb]]",
- "fileexists-extension": "Î\88να αÏ\81Ï\87είο με Ï\80αÏ\81Ï\8cμοιο Ï\8cνομα Ï\85Ï\80άÏ\81Ï\87ει: [[$2|thumb]]\n* Î\8cνομα Ï\84οÏ\85 Ï\80Ï\81οÏ\82 εÏ\80ιÏ\86Ï\8cÏ\81Ï\84Ï\89Ï\83η αÏ\81Ï\87είοÏ\85: <strong>[[:$1]]</strong>\n* Î\8cνομα Ï\85Ï\80άÏ\81Ï\87ονÏ\84οÏ\82 αÏ\81Ï\87είοÏ\85: <strong>[[:$2]]</strong>\nΠαÏ\81ακαλÏ\8e διαλÎξÏ\84ε Îνα διαÏ\86οÏ\81εÏ\84ικÏ\8c Ï\8cνομα.",
+ "fileexists-extension": "Î¥Ï\80άÏ\81Ï\87ει Îνα αÏ\81Ï\87είο με Ï\80αÏ\81Ï\8cμοιο Ï\8cνομα: [[$2|thumb]]\n* Î\8cνομα Ï\84οÏ\85 Ï\80Ï\81οÏ\82 ανÎβαÏ\83μα αÏ\81Ï\87είοÏ\85: <strong>[[:$1]]</strong>\n* Î\8cνομα Ï\85Ï\80άÏ\81Ï\87ονÏ\84οÏ\82 αÏ\81Ï\87είοÏ\85: <strong>[[:$2]]</strong>\nÎ\9cήÏ\80Ï\89Ï\82 θα θÎλαÏ\84ε να Ï\87Ï\81ηÏ\83ιμοÏ\80οιήÏ\83εÏ\84ε κάÏ\80οιο Ï\8cνομα Ï\80οÏ\85 να ξεÏ\87Ï\89Ï\81ίζει Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81ο;",
"fileexists-thumbnail-yes": "Το αρχείο φαίνεται ότι είναι μια εικόνα μειωμένου μεγέθους ''(μικρογραφία)''. [[$1|thumb]]\nΠαρακαλώ ελέγξτε το αρχείο <strong>[[:$1]]</strong>.\nΑν το ελεγμένο αρχείο είναι η ίδια εικόνα στο αρχικό μέγεθος δεν είναι απαραίτητο να επιφορτώσετε μια επιπλέον μικρογραφία.",
"file-thumbnail-no": "Το όνομα αρχείου αρχίζει με <strong>$1</strong>.\nΦαίνεται πως είναι μια εικόνα μειωμένου μεγέθους ''(μικρογραφία)''.\nΑν έχετε αυτή την εικόνα σε πλήρη ανάλυση, επιφορτώστε τη, αλλιώς αλλάξτε παρακαλώ το όνομα του αρχείου.",
"fileexists-forbidden": "Ένα αρχείο με αυτό το όνομα υπάρχει ήδη˙ εάν ακόμη θέλετε να επιφορτώσωτε αυτό το αρχείο παρακαλώ πηγαίνετε πίσω και επιφορτώστε το υπό ένα νέο όνομα. [[File:$1|thumb|center|$1]]",
"license-header": "Αδειοδότηση",
"nolicense": "Καμία επιλεγμένη",
"license-nopreview": "(Μη διαθέσιμη προεπισκόπηση)",
- "upload_source_url": " (ένα έγκυρο, δημόσια προσβάσιμο URL)",
+ "upload_source_url": "(το επιλεγμένο σας αρχείο από μια έγκυρη, δημόσια προσβάσιμη διεύθυνση URL)",
"upload_source_file": "(το επιλεγμένο αρχείο από τον υπολογιστή σας)",
"listfiles-delete": "διαγραφή",
"listfiles-summary": "Αυτή η ειδική σελίδα δείχνει όλα τα επιφορτωμένα αρχεία.",
"statistics": "Στατιστικά",
"statistics-header-pages": "Στατιστικά σελίδων",
"statistics-header-edits": "Στατιστικά επεξεργασιών",
- "statistics-header-views": "Î\95μÏ\86άνιÏ\83η στατιστικών",
+ "statistics-header-views": "Î Ï\81οβολή στατιστικών",
"statistics-header-users": "Στατιστικά χρηστών",
"statistics-header-hooks": "Άλλα στατιστικά",
"statistics-articles": "Σελίδες περιεχομένου",
"pageswithprop-submit": "Μετάβαση",
"doubleredirects": "Διπλές ανακατευθύνσεις",
"doubleredirectstext": "Αυτή η σελίδα συγκαταλέγει σελίδες οι οποίες ανακατευθύνουν σε άλλες σελίδες ανακατεύθυνσης. Κάθε σειρά περιέχει συνδέσμους προς την πρώτη και τη δεύτερη σελίδα ανακατεύθυνσης, όπως επίσης και την πρώτη αράδα του κειμένου στη δεύτερη σελίδα ανακατεύθυνσης η οποία και είναι, κανονικά, ο πραγματικός προορισμός της ανακατεύθυνσης -εκεί δηλαδή όπου θα έπρεπε να είχατε οδηγηθεί από την αρχή. Τα <del>διεγραμμένα</del> λήμματα έχουν επιλυθεί.",
- "double-redirect-fixed-move": "Η [[$1]] έχει μετακινηθεί, τώρα είναι ανακατεύθυνση στην [[$2]]",
- "double-redirect-fixed-maintenance": "Î\94ιÏ\8cÏ\81θÏ\89Ï\83η διÏ\80λήÏ\82 ανακαÏ\84εÏ\8dθÏ\85νÏ\83ηÏ\82 αÏ\80Ï\8c Ï\84ο [[$1]] Ï\83Ï\84ο [[$2]].",
+ "double-redirect-fixed-move": "Η [[$1]] έχει μετακινηθεί.\nΕνημερώθηκε αυτόματα και τώρα είναι ανακατεύθυνση στην [[$2]].",
+ "double-redirect-fixed-maintenance": "Î\91Ï\85Ï\84Ï\8cμαÏ\84η διÏ\8cÏ\81θÏ\89Ï\83η διÏ\80λήÏ\82 ανακαÏ\84εÏ\8dθÏ\85νÏ\83ηÏ\82 αÏ\80Ï\8c [[$1]] Ï\83ε [[$2]] Ï\83ε εÏ\81γαÏ\83ία Ï\83Ï\85νÏ\84ήÏ\81ηÏ\83ηÏ\82.",
"double-redirect-fixer": "Διορθωτής ανακατευθύνσεων",
"brokenredirects": "Λανθασμένες ανακατευθύνσεις",
"brokenredirectstext": "Οι παρακάτω ανακατευθύνσεις οδηγούν σε σελίδες που δεν υπάρχουν:",
"wantedfiletext-cat": "Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν. Αρχεία από εξωτερικά αποθετήρια ενδέχεται να παρατίθενται παρότι υπάρχουν. Κάθε τέτοιες λανθασμένες αναφορές θα <del>διαγραμμίζονται</del>. Επιπλέον, σελίδες που ενσωματώνουν αρχεία που δεν υπάρχουν παρατίθενται στο [[:$1]].",
"wantedfiletext-nocat": "Τα ακόλουθα αρχεία χρησιμοποιούνται αλλά δεν υπάρχουν. Πέρα από τα υπάρχοντα ενδέχεται να έχουν καταχωριστεί και αρχεία από εξωτερικές πηγές λογισμικού. Τέτοιες ψευδο-υπαρκτές καταχωρίσεις θα εμφανίζονται <del>διαγραμμισμένες</del>.",
"wantedtemplates": "Ζητούμενα πρότυπα",
- "mostlinked": "Î\9fι Ï\83ελίδεÏ\82 με Ï\84ιÏ\82 Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81εÏ\82 αναÏ\86οÏ\81ές",
+ "mostlinked": "ΣελίδεÏ\82 με Ï\84οÏ\85Ï\82 Ï\80εÏ\81ιÏ\83Ï\83Ï\8cÏ\84εÏ\81οÏ\85Ï\82 Ï\83Ï\85νδÎÏ\83μοÏ\85Ï\82 Ï\80Ï\81οÏ\82 αÏ\85Ï\84ές",
"mostlinkedcategories": "Περισσότερο χρησιμοποιούμενες κατηγορίες",
"mostlinkedtemplates": "Περισσότερο χρησιμοποιούμενα πρότυπα",
- "mostcategories": "Î\86Ï\81θÏ\81α με τις περισσότερες κατηγορίες",
+ "mostcategories": "ΣελίδεÏ\82 με τις περισσότερες κατηγορίες",
"mostimages": "Περισσότερο χρησιμοποιούμενα αρχεία",
"mostinterwikis": "Σελίδες με τους περισσότερους διαγλωσσικούς συνδέσμους",
- "mostrevisions": "Î\86Ï\81θÏ\81α με τις περισσότερες αναθεωρήσεις",
+ "mostrevisions": "ΣελίδεÏ\82 με τις περισσότερες αναθεωρήσεις",
"prefixindex": "Όλες οι σελίδες με πρόθεμα",
"prefixindex-namespace": "Όλες οι σελίδες με πρόθεμα (ονοματοχώρος $1)",
"prefixindex-strip": "Αφαίρεση του προθέματος στη λίστα",
"activeusers-noresult": "Δεν βρέθηκε χρήστης.",
"listgrouprights": "Δικαιώματα ομάδων χρηστών",
"listgrouprights-summary": "Ακόλουθεί μία λίστα με τις ομάδες χρηστών σε αυτό το wiki καθώς και με τα δικαιώματα πρόσβασης αυτών.\nΕνδέχεται να περιέχει [[{{MediaWiki:Listgrouprights-helppage}}|πρόσθετες πληροφορίες]] σχετικά με ατομικά δικαιώματα.",
- "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Δόθηκε δικαίωμα</span>\n* <span class=\"listgrouprights-revoked\">Ανακλήθηκε δικαίωμα</span>",
+ "listgrouprights-key": "Υπόμνημα:\n* <span class=\"listgrouprights-granted\">Χορηγηθέν δικαίωμα</span>\n* <span class=\"listgrouprights-revoked\">Ανακληθέν δικαίωμα</span>",
"listgrouprights-group": "Ομάδα",
"listgrouprights-rights": "Δικαιώματα",
"listgrouprights-helppage": "Help:Δικαιώματα ομάδων",
"listgrouprights-removegroup-self": "Μπορεί να αφαιρέσει {{PLURAL:$2|ομάδα|ομάδες}} από το δικό σας λογαριασμό: $1",
"listgrouprights-addgroup-self-all": "Μπορεί να προσθέσει όλες τις ομάδες στο δικό σας λογαριασμό",
"listgrouprights-removegroup-self-all": "Μπορεί να αφαιρέσει όλες τις ομάδες από το δικό σας λογαριασμό",
+ "listgrouprights-namespaceprotection-header": "Περιορισμοί ονοματοχώρων",
"listgrouprights-namespaceprotection-namespace": "Ονοματοχώρος",
+ "listgrouprights-namespaceprotection-restrictedto": "Δικαίωμα(τα) που επιτρέπει(ουν) σε χρήστη να επεξεργαστεί",
+ "trackingcategories": "Παρακολούθηση κατηγοριών",
"trackingcategories-name": "Όνομα μηνύματος",
"trackingcategories-desc": "Κριτήρια συμπερίληψης κατηγορίας",
"post-expand-template-inclusion-category-desc": "Το μέγεθος της σελίδας είναι μεγαλύτερο από <code>$wgMaxArticleSize</code> μετά την επέκταση όλων των προτύπων, έτσι ώστε ορισμένα πρότυπα δεν έχουν αναπτυχθεί.",
+ "hidden-category-category-desc": "Η κατηγορία περιέχει <code><nowiki>__HIDDENCAT__</nowiki></code> στο περιεχόμενο της σελίδας της, που την εμποδίζει εκ προεπιλογής να εμφανίζεται στο πλαίσιο συνδέσμων κατηγοριών των σελίδων.",
"trackingcategories-nodesc": "Καμία διαθέσιμη περιγραφή.",
+ "trackingcategories-disabled": "Η κατηγορία είναι απενεργοποιημένη",
"mailnologin": "Δεν υπάρχει διεύθυνση παραλήπτη.",
"mailnologintext": "Πρέπει να έχετε [[Special:UserLogin|συνδεθεί]] και να έχετε δηλώσει\nμια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]\nγια να στείλετε e-mail σε άλλους χρήστες.",
"emailuser": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου σε αυτόν τον χρήστη",
"watchnologin": "Δεν έχετε συνδεθεί.",
"addwatch": "Προσθήκη στη λίστα παρακολούθησης",
"addedwatchtext": "Η σελίδα «[[:$1]]» έχει προστεθεί στη [[Special:Watchlist|λίστα παρακολούθησής σας]].\nΜελλοντικές αλλαγές σε αυτή τη σελίδα και στη συσχετισμένη σελίδα συζήτησής της θα εμφανίζονται εδώ.",
+ "addedwatchtext-short": "Η σελίδα «$1» έχει προστεθεί στην λίστα παρακολούθησής σας.",
"removewatch": "Αφαίρεση από τη λίστα παρακολούθησης",
"removedwatchtext": "Η σελίδα \"[[:$1]]\" έχει αφαιρεθεί από [[Special:Watchlist|τη λίστα παρακολούθησής σας]].",
+ "removedwatchtext-short": "Η σελίδα «$1» έχει αφαιρεθεί από τη λίστα παρακολούθησής σας.",
"watch": "Παρακολούθηση",
"watchthispage": "Παρακολούθηση αυτής της σελίδας",
"unwatch": "Παύση παρακολούθησης",
"unwatchthispage": "Παύση παρακολούθησης αυτής της σελίδας",
"notanarticle": "Η σελίδα αυτή δεν είναι σελίδα περιεχομένου.",
"notvisiblerev": "Η έκδοση έχει διαγραφεί",
- "watchlist-details": "{{PLURAL:$1|$1 σελίδα|$1 σελίδες}} στη λίστα παρακολούθησης σας, χωρίς να προσμετρούνται οι σελίδες συζήτησης.",
+ "watchlist-details": "{{PLURAL:$1|$1 Ï\83ελίδα|$1 Ï\83ελίδεÏ\82}} Ï\83Ï\84η λίÏ\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ηÏ\82 Ï\83αÏ\82, Ï\87Ï\89Ï\81ίÏ\82 να Ï\80Ï\81οÏ\83μεÏ\84Ï\81οÏ\8dνÏ\84αι ξεÏ\87Ï\89Ï\81ιÏ\83Ï\84ά οι Ï\83ελίδεÏ\82 Ï\83Ï\85ζήÏ\84ηÏ\83ηÏ\82.",
"wlheader-enotif": "Η ειδοποίηση ηλεκτρονικού ταχυδρομείου ενεργοποιήθηκε.",
"wlheader-showupdated": "Σελίδες που έχουν υποστεί αλλαγές από την τελευταία φορά που τις επισκεφθήκατε εμφανίζονται με '''έντονους χαρακτήρες'''.",
- "wlnote": "Παρακάτω είναι {{PLURAL:$1|η πιο πρόσφατη αλλαγή|οι '''$1''' πιο πρόσφατες αλλαγές}} κατά τη διάρκεια {{PLURAL:$2|της τελευταίας ώρας|των '''$2''' τελευταίων ωρών}} ως προς την $3, $4.",
+ "wlnote": "Παρακάτω είναι {{PLURAL:$1|η πιο πρόσφατη αλλαγή|οι <strong>$1</strong> πιο πρόσφατες αλλαγές}} κατά τη διάρκεια {{PLURAL:$2|της τελευταίας ώρας|των <strong>$2</strong> τελευταίων ωρών}} ως προς τις $3 στις $4.",
"wlshowlast": "Εμφάνιση των τελευταίων $1 ωρών $2 ημερών $3",
"watchlist-options": "Επιλογές λίστας παρακολούθησης",
"watching": "Παρακολούθηση...",
"enotif_lastvisited": "Δείτε το $1 για όλες τις αλλαγές που έγιναν από την τελευταία σας επίσκεψη.",
"enotif_lastdiff": "Δείτε το $1 για να εμφανίσετε αυτή την αλλαγή.",
"enotif_anon_editor": "ανώνυμος χρήστης $1",
- "enotif_body": "{{GENDER:$WATCHINGUSERNAME|Î\91γαÏ\80ηÏ\84Î|Î\91γαÏ\80ηÏ\84ή}} $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nΠεÏ\81ιγÏ\81αÏ\86ή εÏ\80εξεÏ\81γαÏ\83ίαÏ\82: $PAGESUMMARY $PAGEMINOREDIT\n\nÎ\95Ï\80ικοινÏ\89νία με Ï\84ο Ï\87Ï\81ήÏ\83Ï\84η Ï\80οÏ\85 Îκανε Ï\84ην εÏ\80εξεÏ\81γαÏ\83ία:\nηλεκÏ\84Ï\81ονική διεÏ\8dθÏ\85νÏ\83η: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nÎ\94εν θα Ï\85Ï\80άÏ\81ξοÏ\85ν άλλεÏ\82 ειδοÏ\80οιήÏ\83ειÏ\82 Ï\83ε Ï\80εÏ\81ίÏ\80Ï\84Ï\89Ï\83η Ï\80εÏ\81αιÏ\84ÎÏ\81Ï\89 δÏ\81αÏ\83Ï\84ηÏ\81ιÏ\8cÏ\84ηÏ\84αÏ\82 αν δεν εÏ\80ιÏ\83κεÏ\86θείÏ\84ε Ï\84η Ï\83ελίδα. Î\9cÏ\80οÏ\81είÏ\84ε εÏ\80ίÏ\83ηÏ\82 να εÏ\80αναÏ\86ÎÏ\81εÏ\84ε Ï\84ην εÏ\80ιλογή ειδοÏ\80οίηÏ\83ηÏ\82 για Ï\8cλεÏ\82 Ï\84ιÏ\82 Ï\80αÏ\81ακολοÏ\85θοÏ\8dμενεÏ\82 Ï\83ελίδεÏ\82 Ï\83Ï\84η λίÏ\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82.\n\n Φιλικά,\n Tο σύστημα ειδοποίησης του ιστοχώρου {{SITENAME}}\n\n--\nΓια να αλλάξετε τις προτιμήσεις των ειδοποιήσεων ηλεκτρονικού ταχυδρομείου, επισκεφτείτε το\n{{canonicalurl:{{#special:Preferences}}}}\n\nΓια να αλλάξετε τις προτιμήσεις της λίστας παρακολούθησής σας, επισκεφτείτε το\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nΓια να διαγράψετε την σελίδα από την λίστα παρακολούθησής σας, επισκεφτείτε το\n$UNWATCHURL\n\nΠαρατηρήσεις και περισσότερη βοήθεια:\n$HELPPAGE",
+ "enotif_body": "{{GENDER:$WATCHINGUSERNAME|Î\91γαÏ\80ηÏ\84Î|Î\91γαÏ\80ηÏ\84ή}} $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nΠεÏ\81ιγÏ\81αÏ\86ή εÏ\80εξεÏ\81γαÏ\83ίαÏ\82: $PAGESUMMARY $PAGEMINOREDIT\n\nÎ\95Ï\80ικοινÏ\89νία με Ï\84ο Ï\87Ï\81ήÏ\83Ï\84η Ï\80οÏ\85 Îκανε Ï\84ην εÏ\80εξεÏ\81γαÏ\83ία:\nδιεÏ\8dθÏ\85νÏ\83η ηλεκÏ\84Ï\81ονικήÏ\82 αλληλογÏ\81αÏ\86ίαÏ\82: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nÎ\94εν θα Ï\85Ï\80άÏ\81ξοÏ\85ν άλλεÏ\82 ειδοÏ\80οιήÏ\83ειÏ\82 Ï\83ε Ï\80εÏ\81ίÏ\80Ï\84Ï\89Ï\83η Ï\80εÏ\81αιÏ\84ÎÏ\81Ï\89 δÏ\81αÏ\83Ï\84ηÏ\81ιÏ\8cÏ\84ηÏ\84αÏ\82 αν δεν εÏ\80ιÏ\83κεÏ\86θείÏ\84ε Ï\84η Ï\83ελίδα ÎÏ\87ονÏ\84αÏ\82 κάνει Ï\83Ï\8dνδεÏ\83η. Î\9cÏ\80οÏ\81είÏ\84ε εÏ\80ίÏ\83ηÏ\82 να εÏ\80αναÏ\86ÎÏ\81εÏ\84ε Ï\84ην εÏ\80ιλογή ειδοÏ\80οίηÏ\83ηÏ\82 για Ï\8cλεÏ\82 Ï\84ιÏ\82 Ï\80αÏ\81ακολοÏ\85θοÏ\8dμενεÏ\82 Ï\83ελίδεÏ\82 Ï\83Ï\84η λίÏ\83Ï\84α Ï\80αÏ\81ακολοÏ\8dθηÏ\83ήÏ\82 Ï\83αÏ\82.\n\nΦιλικά, \nÏ\84ο σύστημα ειδοποίησης του ιστοχώρου {{SITENAME}}\n\n--\nΓια να αλλάξετε τις προτιμήσεις των ειδοποιήσεων ηλεκτρονικού ταχυδρομείου, επισκεφτείτε το\n{{canonicalurl:{{#special:Preferences}}}}\n\nΓια να αλλάξετε τις προτιμήσεις της λίστας παρακολούθησής σας, επισκεφτείτε το\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nΓια να διαγράψετε την σελίδα από την λίστα παρακολούθησής σας, επισκεφτείτε το\n$UNWATCHURL\n\nΠαρατηρήσεις και περισσότερη βοήθεια:\n$HELPPAGE",
"created": "δημιουργήθηκε",
"changed": "έχει αλλάξει",
"deletepage": "Διαγραφή σελίδας",
"deletecomment": "Λόγος:",
"deleteotherreason": "Άλλος/πρόσθετος λόγος:",
"deletereasonotherlist": "Άλλος λόγος",
- "deletereason-dropdown": "*Συνηθισμένοι λόγοι διαγραφής\n** Αίτηση του δημιουργού της\n** Παραβίαση των πνευματικών δικαιωμάτων\n** Βανδαλισμός",
+ "deletereason-dropdown": "* Συνηθισμένοι λόγοι διαγραφής\n** Σπαμ\n** Βανδαλισμός\n** Παραβίαση πνευματικών δικαιωμάτων\n** Αίτηση του δημιουργού της\n** Κατεστραμμένη ανακατεύθυνση",
"delete-edit-reasonlist": "Επεξεργασία λόγων διαγραφής",
"delete-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή τέτοιων σελίδων έχει περιοριστεί για την αποφυγή τυχαίας αναστάτωσης του {{SITENAME}}.",
"delete-warning-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή της μπορεί να αναστατώσει τη λειτουργία της βάσης δεδομένων του {{SITENAME}}. Συνιστούμε μεγάλη προσοχή.",
"protect-locked-blocked": "Δεν μπορείτε να αλλάξετε επίπεδα προστασίας ενώ είστε σε φραγή.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
"protect-locked-dblock": "Τα επίπεδα προστασίας δεν μπορούν να αλλαχθούν λόγω ενός ενεργού κλεδώματος της βάσης δεδομένων.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
"protect-locked-access": "Ο λογαριασμός σας δεν έχει δικαίωμα να αλλάξει τα επίπεδα προστασίας σελίδας.\nΕδώ είναι οι τρέχουσες ρυθμίσεις για τη σελίδα '''$1''':",
- "protect-cascadeon": "Î\91Ï\85Ï\84ή η Ï\83ελίδα είναι Ï\80Ï\81οÏ\82 Ï\84ο Ï\80αÏ\81Ï\8cν Ï\80Ï\81οÏ\83Ï\84αÏ\84εÏ\85μÎνη εÏ\80ειδή Ï\80εÏ\81ιλαμβάνεÏ\84αι {{PLURAL:$1|Ï\83Ï\84ην ακÏ\8cλοÏ\85θη Ï\83ελίδα, η οÏ\80οία ÎÏ\87ει|Ï\83Ï\84ιÏ\82 ακÏ\8cλοÏ\85θεÏ\82 Ï\83ελίδεÏ\82, οι οÏ\80οίεÏ\82 ÎÏ\87οÏ\85ν}} Ï\84η διαδοÏ\87ική Ï\80Ï\81οÏ\83Ï\84αÏ\83ία ενεÏ\81γοÏ\80οιημÎνη. Î\9cÏ\80οÏ\81είÏ\84ε να αλλάξεÏ\84ε Ï\84ο εÏ\80ίÏ\80εδο Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82 αÏ\85Ï\84ήÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82, αλλά δεν θα εÏ\80ηÏ\81εάÏ\83ει τη διαδοχική προστασία.",
+ "protect-cascadeon": "Î\91Ï\85Ï\84ή η Ï\83ελίδα είναι Ï\80Ï\81οÏ\82 Ï\84ο Ï\80αÏ\81Ï\8cν Ï\80Ï\81οÏ\83Ï\84αÏ\84εÏ\85μÎνη εÏ\80ειδή Ï\80εÏ\81ιλαμβάνεÏ\84αι {{PLURAL:$1|Ï\83Ï\84ην ακÏ\8cλοÏ\85θη Ï\83ελίδα, η οÏ\80οία ÎÏ\87ει|Ï\83Ï\84ιÏ\82 ακÏ\8cλοÏ\85θεÏ\82 Ï\83ελίδεÏ\82, οι οÏ\80οίεÏ\82 ÎÏ\87οÏ\85ν}} Ï\84η διαδοÏ\87ική Ï\80Ï\81οÏ\83Ï\84αÏ\83ία ενεÏ\81γοÏ\80οιημÎνη. Î\91λλαγÎÏ\82 Ï\83Ï\84ο εÏ\80ίÏ\80εδο Ï\80Ï\81οÏ\83Ï\84αÏ\83ίαÏ\82 αÏ\85Ï\84ήÏ\82 Ï\84ηÏ\82 Ï\83ελίδαÏ\82 δεν θα εÏ\80ηÏ\81εάÏ\83οÏ\85ν τη διαδοχική προστασία.",
"protect-default": "Να επιτρέπονται όλοι οι χρήστες",
"protect-fallback": "Να επιτρέπεται μόνο σε χρήστες με δικαιώματα «$1»",
"protect-level-autoconfirmed": "Να επιτρέπονται μόνο αυτοεπιβεβαιωμένοι χρήστες",
"contributions-title": "Συνεισφορές χρήστη για {{GENDER:$1|τον|την}} $1",
"mycontris": "Συνεισφορές",
"contribsub2": "Για {{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "Ο λογαριασμός χρήστη «$1» δεν είναι εγγεγραμμένος.",
"nocontribs": "Δεν βρέθηκαν αλλαγές με αυτά τα κριτήρια.",
"uctop": "(τρέχουσα)",
"month": "Από το μήνα (και νωρίτερα):",
"sp-contributions-newbies-sub": "Για νέους λογαριασμούς",
"sp-contributions-newbies-title": "Συνεισφορές χρηστών για νέους λογαριασμούς",
"sp-contributions-blocklog": "αρχείο καταγραφών φραγών",
+ "sp-contributions-suppresslog": "διαγεγραμμένες συνεισφορές χρήστη",
"sp-contributions-deleted": "διαγραμμένες συνεισφορές χρήστη",
"sp-contributions-uploads": "ανεβάσματα αρχείων",
"sp-contributions-logs": "καταγραφές",
"sp-contributions-search": "Αναζήτηση για συνεισφορές",
"sp-contributions-username": "Διεύθυνση IP ή όνομα χρήστη:",
"sp-contributions-toponly": "Εμφάνιση μόνο των επεξεργασιών που είναι πρόσφατες αναθεωρήσεις",
+ "sp-contributions-newonly": "Εμφάνιση μόνο των επεξεργασιών που είναι δημιουργία σελίδας",
"sp-contributions-submit": "Αναζήτηση",
"whatlinkshere": "Τι συνδέει εδώ",
"whatlinkshere-title": "Σελίδες που συνδέουν στη σελίδα «$1»",
"blockipsuccesstext": "{{GENDER:$1|Ο|Η}} [[Special:Contributions/$1|$1]] έχει υποστεί φραγή.<br />\nΔείτε τον [[Special:BlockList|κατάλογο φραγών]] για να εποπτεύσετε τις φραγές.",
"ipb-blockingself": "Είστε έτοιμος να επιβάλετε φραγή στον ευατό σας! Είστε σίγουροι ότι θέλετε να το κάνετε αυτό;",
"ipb-confirmhideuser": "Είστε {{GENDER:|έτοιμος|έτοιμη}} να μπλοκάρετε ένα χρήστη με ενεργοποιημένη την \"απόκρυψη χρήστη\" . Αυτό θα καταστείλει το όνομα του χρήστη σε όλες τις λίστες και τις καταχωρήσεις ημερολογίου. Είστε {{GENDER:|σίγουρος|σίγουρη}} ότι θέλετε να το κάνετε αυτό;",
+ "ipb-confirmaction": "Εάν είστε σίγουροι ότι θέλετε πραγματικά να το κάνετε αυτό, παρακαλούμε τσεκάρετε το πεδίο «{{int:ipb-confirm}}» στο κάτω μέρος.",
"ipb-edit-dropdown": "Επεξεργασία λόγων φραγής",
"ipb-unblock-addr": "Τερμάτισε τη φραγή του/της $1",
"ipb-unblock": "Τερμάτισε τη φραγή για ένα όνομα χρήστη ή μια διεύθυνση IP",
"movepagetalktext": "Η σελίδα συζήτησης που αντιστοιχεί, εάν υπάρχει, θα μετακινηθεί αυτόματα μαζί με αυτήν '''έκτός αν:'''\n*Μετακινείτε τη σελίδα σε διαφορετική περιοχή (namespace),\n*Υπάρχει κάτω από το νέο όνομα μια σελίδα συζήτησης που δεν είναι κενή, ή\n*Έχετε αφαιρέσει τη σημείωση (check) από το κουτάκι που υπάρχει παρακάτω.\n\nΣε αυτές τις περιπτώσεις, θα πρέπει να μετακινήσετε (ή να ενσωματώσετε αν το θέλετε) τη σελίδα με αντιγραφή-και-επικόλληση.",
"movearticle": "Μετακίνηση σελίδας",
"moveuserpage-warning": "'''Προσοχή:''' Ετοιμάζεστε να μετακινήσετε μια σελίδα χρήστη. Σημειώστε παρακαλώ ότι θα μετακινηθεί μόνο η σελίδα και ο χρήστης '''δεν''' θα μετονομαστεί.",
+ "movecategorypage-warning": "<strong>Προειδοποίηση:</strong>Πάτε να μετακινήσετε μια σελίδα κατηγορίας. Παρακαλούμε να σημειωθεί ότι μόνο η σελίδα θα μετακινηθεί και τυχόν σελίδες στην παλιά κατηγορία <em>δεν</em> θα επανακατηγοριοποιηθούν στη νέα κατηγορία.",
"movenologintext": "Για να μετακινήσετε μια σελίδα πρέπει να είστε εγγεγραμένος χρήστης και [[Special:UserLogin|να έχετε συνδεθεί]] στο Wiκi.",
"movenotallowed": "Δεν έχετε άδεια να μετακινείτε σελίδες.",
"movenotallowedfile": "Δεν έχετε άδεια να μετακινείτε αρχεία.",
"cant-move-user-page": "Δεν έχετε άδεια για να μετακινήσετε σελίδες χρηστών (παρά μόνο υποσελίδες).",
"cant-move-to-user-page": "Δεν έχετε άδεια για να μετακινήσετε μια σελίδα σε σελίδα χρήστη (παρά μόνο σε υποσελίδα χρήστη).",
+ "cant-move-category-page": "Δεν έχετε άδεια να μετακινείτε σελίδες κατηγοριών.",
+ "cant-move-to-category-page": "Δεν έχετε άδεια να μετακινήσετε μια σελίδα σε σελίδα της κατηγορίας.",
"newtitle": "νέος τίτλος",
"move-watch": "Παρακολούθησε αυτή τη σελίδα",
"movepagebtn": "Μετακίνηση σελίδας",
"import": "Εισαγωγή σελίδων",
"importinterwiki": "Εισαγωγή από άλλο Wiki",
"import-interwiki-text": "Επιλέξτε ένα wiki και τίτλο σελίδας για την εισαγωγή.\nΟι ημερομηνίες των αναθεωρήσεων και τα ονόματα των συντακτών θα διατηρηθούν.\nΌλες οι ενέργειες εισαγωγής μεταξύ wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
+ "import-interwiki-sourcewiki": "Πηγαίο wiki:",
+ "import-interwiki-sourcepage": "Πηγαία σελίδα:",
"import-interwiki-history": "Αντιγραφή όλων των εκδόσεων του ιστορικού για αυτή τη σελίδα",
"import-interwiki-templates": "Συμπερίληψη όλων των προτύπων",
"import-interwiki-submit": "Εισαγωγή",
"import-upload": "Επιφόρτωση δεδομένων XML",
"import-token-mismatch": "Απώλεια των στοιχείων της συνόδου. Παρακαλούμε προσπαθήστε ξανά.",
"import-invalid-interwiki": "Δεν είναι δυνατή η εισαγωγή από το καθορισμένο wiki.",
- "import-error-edit": "Η σελίδα \"$1\" δεν εισήχθηκε επειδή δεν επιτρέπεται να το επεξεργαστείτε.",
- "import-error-create": "Η σελίδα \"$1\" δεν εισήχθηκε επειδή δεν επιτρέπεται να τη δημιουργήσετε.",
- "import-error-interwiki": "Η σελίδα \" $1 \" δεν έχει εισαχθεί, επειδή το όνομα της δεσμευμένο για εξωτερική σύνδεση (interwiki).",
- "import-error-special": "Η σελίδα \"$1\" δεν εισήχθη επειδή ανήκει σε έναν ειδικό χώρο ονομάτων που δεν επιτρέπει σελίδες.",
- "import-error-invalid": "Η σελίδα \"$1\" δεν εισήχθη επειδή το όνομά της δεν είναι έγκυρο.",
+ "import-error-edit": "Η σελίδα «$1» δεν εισήχθη επειδή δεν σας επιτρέπεται να την επεξεργαστείτε.",
+ "import-error-create": "Η σελίδα «$1» δεν εισήχθη επειδή δεν σας επιτρέπεται να την δημιουργήσετε.",
+ "import-error-interwiki": "Η σελίδα «$1» δεν εισήχθη επειδή το όνομα της είναι δεσμευμένο για εξωτερική σύνδεση (interwiki).",
+ "import-error-special": "Η σελίδα «$1» δεν εισήχθη επειδή ανήκει σε έναν ειδικό ονοματοχώρο που δεν επιτρέπει σελίδες.",
+ "import-error-invalid": "Η σελίδα «$1» δεν εισήχθη επειδή το όνομά με το οποίο επρόκειτο να εισαχθεί δεν είναι έγκυρο σε αυτό το wiki.",
"import-options-wrong": "Λάθος {{PLURAL:$2|επιλογή|επιλογές}}: <nowiki>$1</nowiki>",
"import-rootpage-invalid": "Η δεδομένη ριζική σελίδα είναι μη έγκυρος τίτλος",
"importlogpage": "Αρχείο καταγραφής εισαγωγών",
"importlogpagetext": "Διαχειριστικές εισαγωγές σελίδων με ιστορικό επεξεργασίας από άλλα wiki.",
"import-logentry-upload": "εισάχθηκε η σελίδα [[$1]] με επιφόρτωση αρχείου",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}}",
+ "import-logentry-upload-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}}",
"import-logentry-interwiki": "η σελίδα $1 εισάχθηκε μεταξύ wiki",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}} από $2",
+ "import-logentry-interwiki-detail": "{{PLURAL:$1|Εισήχθη $1 αναθεώρηση|Εισήχθησαν $1 αναθεωρήσεις}} από $2",
"javascripttest": "Δοκιμή JavaScript",
"javascripttest-title": "Εκτελούνται $1 δοκιμές",
"javascripttest-pagetext-noframework": "Αυτή η σελίδα είναι δεσμευμένη για την εκτέλεση δοκιμών σε JavaScript.",
"newimages-summary": "Αυτή η ειδική σελίδα δείχνει τα πιο πρόσφατα φορτωμένα αρχεία.",
"newimages-legend": "Φίλτρο",
"newimages-label": "Όνομα αρχείου (ή μέρος αυτού):",
+ "newimages-showbots": "Εμφάνιση αρχείων ανεβασμένων από ρομπότ",
"noimages": "Δεν υπάρχουν εικόνες.",
"ilsubmit": "Αναζήτηση",
"bydate": "ημερομηνίας",
"confirm-watch-top": "Προσθήκη αυτής της σελίδας στη λίστα παρακολούθησης σας;",
"confirm-unwatch-button": "Εντάξει",
"confirm-unwatch-top": "Κατάργηση αυτής της σελίδας από τη λίστα παρακολούθησης σας;",
- "quotation-marks": "\"$1\"",
+ "quotation-marks": "«$1»",
"imgmultipageprev": "← προηγούμενη σελίδα",
"imgmultipagenext": "επόμενη σελίδα →",
"imgmultigo": "Πήγαινε!",
"watchlistedit-raw-done": "Η λίστα παρακολούθησής σας ενημερώθηκε.",
"watchlistedit-raw-added": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} προστέθηκαν:",
"watchlistedit-raw-removed": "{{PLURAL:$1|1 σελίδα|$1 σελίδες}} αφαιρέθηκαν:",
+ "watchlistedit-clear-explain": "Όλοι οι τίτλοι θα αφαιρεθούν από τη λίστα παρακολούθησής σας",
"watchlistedit-clear-titles": "Τίτλοι:",
"watchlistedit-clear-submit": "Καθαρίστε τη λίστα παρακολούθησης (αυτό είναι μόνιμο!)",
+ "watchlistedit-clear-done": "Η λίστα παρακολούθησής σας έχει καθαριστεί.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|1 τίτλος αφαιρέθηκε|$1 τίτλοι αφαιρέθηκαν}}:",
"watchlistedit-too-many": "Υπάρχουν υπερβολικά πολλές σελίδες και δεν μπορούν να εμφανιστούν εδώ.",
"watchlisttools-view": "Προβολή σχετικών αλλαγών",
"watchlisttools-edit": "Προβολή και επεξεργασία λίστας παρακολούθησης",
"specialpages-group-other": "Άλλες ειδικές σελίδες",
"specialpages-group-login": "Σύνδεση / δημιουργία λογαριασμού",
"specialpages-group-changes": "Πρόσφατες αλλαγές και καταγραφές γεγονότων",
- "specialpages-group-media": "Î\91ναÏ\86οÏ\81ÎÏ\82 Ï\80ολÏ\85μÎÏ\83Ï\89ν και εÏ\80ιÏ\86Ï\8cÏ\81Ï\84Ï\89Ï\83η αρχείων",
+ "specialpages-group-media": "Î\91ναÏ\86οÏ\81ÎÏ\82 Ï\80ολÏ\85μÎÏ\83Ï\89ν και ανÎβαÏ\83μα αρχείων",
"specialpages-group-users": "Χρήστες και δικαιώματα",
"specialpages-group-highuse": "Πολυσύχναστες σελίδες",
"specialpages-group-pages": "Κατάλογοι σελίδων",
"logentry-rights-rights": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας για {{GENDER:$3|τον|την}} $3 από $4 σε $5",
"logentry-rights-rights-legacy": "{{GENDER:$2|Ο|Η}} $1 άλλαξε την ιδιότητα μέλους ομάδας {{GENDER:$1|του|της}} $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|προωθήθηκε}} αυτόματα από το $4 στο $5",
+ "logentry-upload-upload": "{{GENDER:$2|Ο|Η}} $1 ανέβασε το $3",
+ "logentry-upload-overwrite": "{{GENDER:$2|Ο|Η}} $1 ανέβασε μια νέα έκδοση του $3",
+ "logentry-upload-revert": "{{GENDER:$2|Ο|Η}} $1 ανέβασε το $3",
"rightsnone": "(κανένα)",
"feedback-bugornote": "Εάν είστε έτοιμοι να περιγράψετε ένα τεχνικό πρόβλημα λεπτομερώς παρακαλούμε [$1 κάντε μια αναφορά σφάλματος].\nΔιαφορετικά, μπορείτε να χρησιμοποιήσετε την παρακάτω απλή φόρμα. Το σχόλιό σας θα προστεθεί στη σελίδα \"[$3 $2]\", μαζί με το όνομα χρήστη σας.",
"feedback-subject": "Θέμα:",
"api-error-overwrite": "Αντικατάσταση ενός υπάρχοντος αρχείου δεν επιτρέπεται.",
"api-error-stashfailed": "Εσωτερικό σφάλμα: ο διακομιστής απέτυχε να αποθηκεύσει το προσωρινό αρχείο.",
"api-error-publishfailed": "Εσωτερικό σφάλμα: ο διακομιστής απέτυχε να αποθηκεύσει το προσωρινό αρχείο.",
+ "api-error-stasherror": "Παρουσιάστηκε ένα σφάλμα κατά το ανέβασμα του αρχείου στην κρύπτη.",
"api-error-timeout": "Ο διακομιστής δεν αποκρίθηκε εντός του αναμενόμενου χρόνου.",
"api-error-unclassified": "Προέκυψε ένα άγνωστο σφάλμα.",
"api-error-unknown-code": "Άγνωστο σφάλμα: \"$1\"",
"limitreport-ppvisitednodes": "Καταμέτρηση κόμβων επισκεφθέντων από τον προεπεξεργαστή",
"limitreport-ppgeneratednodes": "Καταμέτρηση κόμβων παραχθέντων από τον προεπεξεργαστή",
"limitreport-postexpandincludesize": "Μέγεθος συμπερίληψης πριν την ανάπτυξη",
+ "limitreport-postexpandincludesize-value": "$1 από $2 {{PLURAL:$2|byte|bytes}}",
"limitreport-templateargumentsize": "Μέγεθος ορισμάτων προτύπων",
+ "limitreport-templateargumentsize-value": "$1 από $2 {{PLURAL:$2|byte|bytes}}",
"limitreport-expansiondepth": "Μεγαλύτερο βάθος ανάπτυξης",
"limitreport-expensivefunctioncount": "Πλήθος ακριβών συναρτήσεων συντακτικού αναλυτή",
"expandtemplates": "Επέκτεινε τα πρότυπα",
"expand_templates_generate_xml": "Εμφάνιση δέντρου συντακτικής ανάλυσης XML",
"expand_templates_generate_rawhtml": "Εμφάνιση ανεπεξέργαστης HTML",
"expand_templates_preview": "Προεπισκόπηση",
+ "pagelanguage": "Επιλογέας γλώσσας σελίδας",
"pagelang-name": "Σελίδα",
"pagelang-language": "Γλώσσα",
"pagelang-use-default": "Χρήση προεπιλεγμένης γλώσσας",
"pagelang-select-lang": "Επιλογή γλώσσας",
+ "right-pagelang": "Αλλαγή γλώσσας σελίδας",
+ "action-pagelang": "αλλαγή της γλώσσας σελίδας",
"default-skin-not-found-row-enabled": "* <code>$1</code> /$2 (ενεργοποιημένο)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')"
}
"otherlanguages": "In other languages",
"redirectedfrom": "(Redirected from $1)",
"redirectpagesub": "Redirect page",
+ "redirectto": "Redirect to:",
"talkpageheader": "-",
"lastmodifiedat": "This page was last modified on $1, at $2.",
"viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}.",
"userlogin-resetpassword-link": "Forgot your password?",
"helplogin-url": "https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Logging_in",
"userlogin-helplink2": "Help with logging in",
- "userlogin-loggedin": "You are already logged in as {{GENDER:$1|$1}}.\nUse the form below to log in as another user.",
- "userlogin-createanother": "Create another account",
"createacct-emailrequired": "Email address",
"createacct-emailoptional": "Email address (optional)",
"createacct-email-ph": "Enter your email address",
"createaccount-text": "Someone created an account for your email address on {{SITENAME}} ($4) named \"$2\", with password \"$3\".\nYou should log in and change your password now.\n\nYou may ignore this message, if this account was created in error.",
"login-throttled": "You have made too many recent login attempts.\nPlease wait $1 before trying again.",
"login-abort-generic": "Your login was unsuccessful - Aborted",
+ "login-migrated-generic": "Your account has been migrated, and your username no longer exist on this wiki.",
"loginlanguagelabel": "Language: $1",
"loginlanguagelinks": "* {{#language:de}}|de\n* {{#language:en}}|en\n* {{#language:eo}}|eo\n* {{#language:fr}}|fr\n* {{#language:es}}|es\n* {{#language:it}}|it\n* {{#language:nl}}|nl",
"suspicious-userlogout": "Your request to log out was denied because it looks like it was sent by a broken browser or caching proxy.",
"showpreview": "Show preview",
"showdiff": "Show changes",
"blankarticle": "<strong>Warning:</strong> The page you are creating is blank.\nIf you click \"{{int:savearticle}}\" again, the page will be created without any content.",
- "anoneditwarning": "<strong>Warning:</strong> You are not logged in.\nYour IP address will be recorded in this page's edit history.",
+ "anoneditwarning": "<strong>Warning:</strong> You are not logged in. Your IP address will be publicly visible if you make any edits. If you <strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
"anonpreviewwarning": "<em>You are not logged in. Saving will record your IP address in this page's edit history.</em>",
"missingsummary": "<strong>Reminder:</strong> You have not provided an edit summary.\nIf you click \"{{int:savearticle}}\" again, your edit will be saved without one.",
"missingcommenttext": "Please enter a comment below.",
"yourdomainname": "Tu dominio:",
"password-change-forbidden": "No puedes cambiar las contraseñas en este wiki.",
"externaldberror": "Hubo un error de autenticación de la base de datos o bien no tienes autorización para actualizar tu cuenta externa.",
- "login": "Iniciar sesión",
+ "login": "Acceder",
"nav-login-createaccount": "Acceder/crear cuenta",
"userlogin": "Acceder/crear cuenta",
"userloginnocreate": "Acceder",
"userlogin-resetlink": "¿Olvidaste tus datos de acceso?",
"userlogin-resetpassword-link": "¿Has olvidado tu contraseña?",
"userlogin-helplink2": "Ayuda con el acceso",
- "userlogin-loggedin": "Ya estás conectado como {{GENDER:$1|$1}}.\nUsa el formulario de abajo para iniciar sesión como otro usuario.",
- "userlogin-createanother": "Crear otra cuenta",
"createacct-emailrequired": "Dirección de correo electrónico",
"createacct-emailoptional": "Dirección de correo electrónico (opcional)",
"createacct-email-ph": "Escribe tu dirección de correo electrónico",
"createaccount-text": "Alguien creó en {{SITENAME}} ($4) una cuenta asociada a este correo electrónico con el nombre «$2» y contraseña «$3». Por favor entra ahora y cambia tu contraseña.\n\nPuedes ignorar este mensaje si esta cuenta fue creada por error.",
"login-throttled": "Has intentado demasiadas veces iniciar sesión recientemente. Por favor espera $1 antes de intentarlo nuevamente.",
"login-abort-generic": "Tu inicio de sesión no fue exitoso - Cancelado",
+ "login-migrated-generic": "Tu cuenta se ha migrado y tu nombre de usuario ya no existen en este wiki.",
"loginlanguagelabel": "Idioma: $1",
"suspicious-userlogout": "Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.",
"createacct-another-realname-tip": "El nombre real es opcional.\nSi se proporciona, se usará para dar al usuario la atribución de su trabajo.",
"showpreview": "Mostrar previsualización",
"showdiff": "Mostrar los cambios",
"blankarticle": "<strong>Aviso:</strong> estás a punto de crear una página vacía.\nSi pulsas en «{{int:savearticle}}» de nuevo, se creará la página sin ningún contenido.",
- "anoneditwarning": "<strong>Advertencia:</strong> No has iniciado sesión.\nTu dirección IP se almacenará en el historial de edición de esta página.",
+ "anoneditwarning": "<strong>Advertencia:</strong> No has iniciado sesión. Tu dirección IP será visible públicamente si haces cualquier edición. Si <strong>[$1 inicias sesión]</strong> o <strong>[$2 creas una cuenta]</strong>, tus ediciones se atribuirán a tu nombre de usuario, junto con otros beneficios.",
"anonpreviewwarning": "<em>No has iniciado sesión. Al guardar los cambios se almacenará tu dirección IP en el historial de edición de esta página.</em>",
"missingsummary": "<strong>Recordatorio:</strong> No has escrito un resumen de edición.\nSi haces clic nuevamente en «{{int:savearticle}}» tu edición se grabará sin él.",
"missingcommenttext": "Escribe un comentario a continuación.",
"mergehistory-go": "Mostrar ediciones fusionables",
"mergehistory-submit": "Fusionar revisiones",
"mergehistory-empty": "No hay revisiones fusionables.",
- "mergehistory-success": "$3 {{PLURAL:$3|revisión|revisiones}} de [[:$1]] fusionadas de forma exitosa en [[:$2]].",
+ "mergehistory-success": "Se {{PLURAL:$3|fusionó $3 revisión|fusionaron $3 revisiones}} de «[[:$1]]» en «[[:$2]]» correctamente.",
"mergehistory-fail": "No se puede realizar la fusión de historiales, por favor revisa la página y los parámetros de tiempo.",
"mergehistory-fail-toobig": "No se puede fusionar el historial ya que más del límite de $1 {{PLURAL:$1|revisión|revisiones}} se moverían.",
"mergehistory-no-source": "La página origen $1 no existe.",
"log-description-pagelang": "Este es un registro de los cambios en los idiomas de las páginas.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambió}} el idioma de la página «$3» del $4 al $5.",
"default-skin-not-found": "¡Oops! La apariencia por defecto de la wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, no está disponible.\n\nLa instalación parece poseer las siguientes opciones de apariencia. Por favor revise [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para mayor información sobre cómo configurarla y seleccionar la apariencia por defecto.\n\n$2\n\n; Si acaba de instalar MediaWiki:\n: Probablemente la haya instalado desde git, o directamente desde el código fuente usando algún otro método. Esto es lo esperado. Intente instalar algunos sets de apariencia desde [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory]:\n:* Descargando [https://www.mediawiki.org/wiki/Download el instalador tarball], el cual contiene varios sets de apariencia y extensiones. Puede copiar y pegar el directorio <code>skins/</code> desde ahi.\n:* Clonando uno de los repositorios en <code>mediawiki/skins/*</code> via git dentro del directorio <code>skins/</code> de su instaación de MediaWiki.\n: Haciendo esto no debería interferir con su repositorio git si usted es un desarrollador de MediaWiki.\n\n; Si acaba de actualizar MediaWiki:\n: MediaWiki 1.24 y versiones posteriores ya no tiene habilitada la actualización de apariencia (revise [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Puede pegar las siguientes lineas <code>LocalSettings.php</code> para habilitar todos los sets de apariencia que haya configurado:\n\n<pre>$3</pre>\n\n; Si acaba de modificar <code>LocalSettings.php</code>:\n: Compruebe detenidamente posibles errores tipográficos en los nombres de los sets de apariencias.",
+ "default-skin-not-found-no-skins": "¡Vaya! La apariencia predeterminada de tu wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, no está disponible.\n\nNo tienes apariencias instaladas.\n\n; Si has instalado o actualizado MediaWiki recientemente:\n: Probablemente has instalado desde git, o directamente desde el código fuente usando algún otro método. Esto es lo esperado. MediaWiki 1.24 y versiones posteriores no incluyen ninguna apariencia en el repositorio principal. Trata de instalar algunas apariencias desde el [https://www.mediawiki.org/wiki/Category:All_skins directorio de apariencias de mediawiki.org], siguiendo el siguiente procedimiento:\n:* Descarga el [https://www.mediawiki.org/wiki/Download instalador tarball], que viene con varias apariencias y extensiones. Puedes copiar y pegar el directorio <code>skins/</code> desde ahí.\n:* Clonando alguno de los repositorios en <code>mediawiki/skins/*</code> usando git en el directorio <code>skins/</code> de tu instalación de MediaWiki.\n: Hacer esto no debería interferir con tu repositorio de MediaWiki si eres un desarrollador de MediaWiki. Revisa [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] para información sobre cómo habilitar las apariencias y seleccionar la apariencia predeterminada.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activado)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivado''')"
}
"otherlanguages": "Teistes keeltes",
"redirectedfrom": "(Ümber suunatud leheküljelt $1)",
"redirectpagesub": "Ümbersuunamisleht",
+ "redirectto": "Ümber suunatud lehekülje:",
"lastmodifiedat": "Viimane muutmine: $2, $1",
"viewcount": "Seda lehekülge on külastatud {{PLURAL:$1|üks kord|$1 korda}}.",
"protectedpage": "Kaitstud lehekülg",
"userlogin-resetlink": "Kas oled unustanud oma sisselogimisandmed?",
"userlogin-resetpassword-link": "Kas unustasid parooli?",
"userlogin-helplink2": "Sisselogimisabi",
- "userlogin-loggedin": "Oled juba sisse logitud nimega {{GENDER:$1|$1}}.\nKasuta allolevat vormi, et logida sisse teise kasutajaga.",
- "userlogin-createanother": "Loo teine konto",
"createacct-emailrequired": "E-posti aadress",
"createacct-emailoptional": "E-posti aadress (valikuline)",
"createacct-email-ph": "Sisesta e-posti aadress",
"createaccount-text": "Keegi on loonud {{GRAMMAR:illative|{{SITENAME}}}} ($4) sinu e-posti aadressile vastava kasutajatunnuse \"$2\". Parooliks seati \"$3\". Logi sisse ja muuda oma parool.\n\nKui kasutajakonto loomine on eksitus, võid käesolevat sõnumit lihtsalt eirata.",
"login-throttled": "Oled lühikese aja jooksul proovinud liiga palju kordi sisse logida.\nPalun oota $1, enne kui uuesti proovid.",
"login-abort-generic": "Sisselogimine ebaõnnestus – Katkestatud",
+ "login-migrated-generic": "Sinu konto on migreeritud ja sinu kasutajanime pole enam selles vikis.",
"loginlanguagelabel": "Keel: $1",
"suspicious-userlogout": "Sinu väljalogimiskatse nurjus, sest see näis olevat katkise veebilehitseja või puhverserveri saadetud.",
"createacct-another-realname-tip": "Tegelik nimi on valikuline.\nKui otsustad selle sisestada, kasutatakse seda kasutaja töö temale omistamiseks.",
"showpreview": "Näita eelvaadet",
"showdiff": "Näita muudatusi",
"blankarticle": "<strong>Hoiatus:</strong> Lehekülg, mida alustad, on tühi.\nKui klõpsad uuesti \"{{int:savearticle}}\", luuakse lehekülg ilma sisuta.",
- "anoneditwarning": "'''Hoiatus:''' Sa pole sisse logitud.\nSelle lehe redigeerimislogisse salvestatakse su IP-aadress.",
+ "anoneditwarning": "<strong>Hoiatus:</strong> Sa pole sisse logitud. Sinu IP-aadress on kõigile nähtav, kui muudatusi teed. Kui <strong>[$1 logid sisse]</strong> või <strong>[$2 lood konto]</strong>, siis teiste eeliste seas omistatakse sinu muudatused sulle kasutajanime järgi.",
"anonpreviewwarning": "''Sa pole sisse logitud. Selle lehe redigeerimislogisse salvestatakse su IP-aadress.''",
"missingsummary": "'''Meeldetuletus:''' Sa ei ole lisanud muudatuse resümeed.\nKui vajutad uuesti salvestamise nupule, salvestatakse muudatus ilma resümeeta.",
"missingcommenttext": "Palun sisesta siit allapoole kommentaar.",
"session_fail_preview_html": "'''Vabandust! Meil ei õnnestunud seansiandmete kaotuse tõttu sinu muudatust töödelda.'''\n\n''Kuna {{GRAMMAR:inessive|{{SITENAME}}}} on toor-HTML lubatud, on eelvaade JavaScripti-rünnakute vastase ettevaatusabinõuna peidetud.''\n\n'''Kui see on õigustatud redigeerimiskatse, proovi palun uuesti.'''\nKui see ikka ei tööta, proovi [[Special:UserLogout|välja]] ja tagasi sisse logida.",
"token_suffix_mismatch": "'''Muudatus lükati tagasi, kuna sinu klienttarkvara ei suuda õigesti kirjavahemärke kasutada.'''\nMuudatus lükati tagasi, et vältida lehekülje segiminekut.\nSee juhtub mõnikord siis, kui kasutatakse vigast veebipõhist anonüümsusserverit.",
"edit_form_incomplete": "'''Redigeerimisvormi mõni osa ei jõudnud serverisse; kontrolli, kas sinu tehtud muudatused on alles, ja proovi uuesti.'''",
- "editing": "Muutmisel on $1",
- "creating": "Alustamisel on $1",
- "editingsection": "Muutmisel on osa leheküljest $1",
+ "editing": "Muutmisel on \"$1\"",
+ "creating": "Alustamisel on \"$1\"",
+ "editingsection": "Muutmisel on osa leheküljest \"$1\"",
"editingcomment": "Muutmisel on $1 (uus alaosa)",
"editconflict": "Redigeerimiskonflikt: $1",
"explainconflict": "Keegi teine on muutnud seda lehekülge pärast seda, kui sina seda redigeerima hakkasid.\nÜlemine toimetamiskast sisaldab teksti viimast versiooni.\nSinu muudatused on alumises kastis.\nSul tuleb need viimasesse versiooni üle viia.\nKui klõpsad nupule \"{{int:savearticle}}\", salvestub '''ainult''' ülemises toimetamiskastis olev tekst.",
"shown-title": "Näita lehekülje kohta $1 {{PLURAL:$1|tulemus|tulemust}}",
"viewprevnext": "Näita ($1 {{int:pipe-separator}} $2) ($3)",
"searchmenu-exists": "'''Lehekülg pealkirjaga \"[[:$1]]\" on olemas.'''",
- "searchmenu-new": "<strong>Loo lehekülg pealkirjaga \"[[:$1]]\".</strong> {{PLURAL:$2|0=|Vaata ka leitud lehekülge.|Vaata ka leitud otsitulemusi.}}",
+ "searchmenu-new": "<strong>Alusta lehekülge \"[[:$1]]\".</strong> {{PLURAL:$2|0=|Vaata ka leitud lehekülge.|Vaata ka leitud otsitulemusi.}}",
"searchprofile-articles": "Sisuleheküljed",
"searchprofile-images": "Multimeedia",
"searchprofile-everything": "Kõik",
"prefs-namespaces": "Nimeruumid",
"default": "vaikeväärtus",
"prefs-files": "Failid",
- "prefs-custom-css": "kohandatud CSS",
- "prefs-custom-js": "kohandatud JS",
- "prefs-common-css-js": "Kõigi kujunduste ühine CSS/JS:",
+ "prefs-custom-css": "Kohandatud CSS",
+ "prefs-custom-js": "Kohandatud JavaScript",
+ "prefs-common-css-js": "Kõigi kujunduste ühine CSS/JavaScript:",
"prefs-reset-intro": "Sellel leheküljel saad oma eelistused lähtestada võrgukoha vaike-eelistusteks.\nToimingut ei saa hiljem tühistada.",
"prefs-emailconfirm-label": "E-posti kinnitus:",
"youremail": "E-posti aadress:",
"lockfilenotwritable": "Andmebaasi lukufail ei ole kirjutatav.\nAndmebaasi lukustamiseks ja avamiseks peavad veebiserveril olema sellele kirjutusõigused.",
"databasenotlocked": "Andmebaas ei ole lukustatud.",
"lockedbyandtime": "(lukustas $1; $2, kell $3)",
- "move-page": "Teisalda $1",
+ "move-page": "Lehekülje \"$1\" teisaldamine",
"move-page-legend": "Lehekülje teisaldamine",
"movepagetext": "Allolevat vormi kasutades saad lehekülje ümber nimetada. Lehekülje ajalugu tõstetakse uue pealkirja alla automaatselt.\nPraeguse pealkirjaga leheküljest saab ümbersuunamislehekülg uuele leheküljele.\nSaad senisele pealkirjale viitavad ümbersuunamised automaatselt parandada.\nKui sa seda ei tee, kontrolli, et teisaldamise tõttu ei jää maha [[Special:DoubleRedirects|kahekordseid]] ega [[Special:BrokenRedirects|katkiseid ümbersuunamisi]].\nSinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud.\n\nPane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui viimane on redigeerimisajaloota ümbersuunamislehekülg.\nSee tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata.\n\n'''Hoiatus!'''\nTegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega;\nenne jätkamist teadvusta palun tagajärgi.",
"movepagetext-noredirectfixer": "Allolevat vormi kasutades saad lehekülje ümber nimetada. Lehekülje ajalugu tõstetakse uue pealkirja alla automaatselt.\nPraeguse pealkirjaga leheküljest saab ümbersuunamislehekülg uuele leheküljele.\nKontrolli, et teisaldamise tõttu ei jää maha [[Special:DoubleRedirects|kahekordseid]] ega [[Special:BrokenRedirects|katkiseid ümbersuunamisi]].\nSinu kohus on hoolitseda selle eest, et kõik jääks toimima, nagu ette nähtud.\n\nPane tähele, et lehekülge '''ei teisaldata''' juhul, kui uue pealkirjaga lehekülg on juba olemas. Erandiks on juhud, kui olemasolev lehekülg on tühi või redigeerimisajaloota ümbersuunamislehekülg.\nSee tähendab, et kogemata ei saa üle kirjutada juba olemasolevat lehekülge, kuid saab ebaõnnestunud ümbernimetamise tagasi pöörata.\n\n'''Hoiatus!'''\nTegu võib olla väga loetava lehekülje jaoks tõsise ja ootamatu muudatusega;\nenne jätkamist teadvusta palun tagajärgi.",
"hidetoc": "ezkutatu",
"collapsible-collapse": "Itxi",
"collapsible-expand": "Zabaldu",
+ "confirmable-yes": "Bai",
+ "confirmable-no": "Ez",
"thisisdeleted": "$1 ikusi edo leheneratu?",
"viewdeleted": "$1 ikusi?",
"restorelink": "{{PLURAL:$1|ezabatutako aldaketa bat|ezabatutako $1 aldaketa}}",
"gotaccountlink": "Saioa hasi",
"userlogin-resetlink": "Saioa hasteko datuak ahaztu dituzu?",
"userlogin-resetpassword-link": "Zure pasahitza ahaztu duzu?",
- "userlogin-loggedin": "Dagoeneko izena emana zaude {{GENDER:$1|$1}}.\nBeheko formularioa erabil ezazu beste erabiltzaile baten izenean sartzeko.",
- "userlogin-createanother": "Beste kontu bat sortu",
"createacct-emailrequired": "E-posta helbidea",
"createacct-emailoptional": "E-posta helbidea (hautazkoa)",
"createacct-email-ph": "Sartu zure e-posta helbidea",
"license-nopreview": "(Aurreikuspenik ez)",
"upload_source_url": " (baliozko URL publikoa)",
"upload_source_file": " (zure ordenagailuko fitxategi bat)",
+ "listfiles-delete": "ezabatu",
"listfiles-summary": "Orri berezi honek igotako fitxategi guztiak erakusten ditu.\nBerez, azken igotako fitxategiak zerrendaren goiko aldean azaltzen dira.",
"listfiles_search_for": "Irudiaren izenagatik bilatu:",
"imgfile": "fitxategia",
"confirm-purge-bottom": "Orrialdea purgatzean katxea ezabatzen du eta orrialdearen bertsiorik eguneratuena erakustera behartzen du.",
"confirm-watch-button": "Ados",
"confirm-unwatch-button": "Ados",
- "quotation-marks": "\"$1\"",
+ "quotation-marks": "«$1»",
"imgmultipageprev": "← aurreko orrialdea",
"imgmultipagenext": "hurrengo orrialdea →",
"imgmultigo": "Joan!",
"Mostafadaneshvar",
"Pouyana",
"Oldstoneage",
- "Omid.koli"
+ "Omid.koli",
+ "Alirezaaa",
+ "Mogoeilor"
]
},
- "tog-underline": "خط کشیدن زیر پیوندها:",
+ "tog-underline": "خطکشیدن زیر پیوندها:",
"tog-hideminor": "تغییرات جزئی از فهرست تغییرات اخیر پنهان شوند",
"tog-hidepatrolled": "ویرایشهای گشتخورده از فهرست تغییرات اخیر پنهان شوند",
"tog-newpageshidepatrolled": "صفحههای گشتخورده از فهرست صفحههای تازه پنهان شوند",
- "tog-extendwatchlist": "گسترش فهرست پیگیریها برای نمایش همهٔ تغییرات، نه فقط آخرینها",
- "tog-usenewrc": "گروهبندی تغییرات بر پایهٔ صفحههای تغییرات اخیر و فهرست پیگیریها (نیازمند جاوااسکریپت)",
+ "tog-extendwatchlist": "گسترش فهرست پیگیریها برای نمایش همهٔ تغییرات، نه فقط آخرینها",
+ "tog-usenewrc": "گروهبندی تغییرات بر پایهٔ صفحات تغییرات اخیر و فهرست پیگیریها",
"tog-numberheadings": "شمارهگذاری خودکار عنوانها",
- "tog-showtoolbar": "نوار ابزار جعبهٔ ویرایش نمایش یابد",
- "tog-editondblclick": "ویرایش صفحهها با دوکلیک (نیازمند جاوااسکریپت)",
- "tog-editsectiononrightclick": "امکان ویرایش بخشها با کلیک راست روی عنوانهای بخش (نیازمند جاوااسکریپت)",
- "tog-watchcreations": "صفحههایی که میسازم و پروندههایی که بارگذاری میکنم به فهرست پیگیریهایم افزوده شود",
- "tog-watchdefault": "صفحهها و پروندههایی که ویرایش میکنم به فهرست پیگیریهایم افزوده شود",
+ "tog-showtoolbar": "نوار ابزار ویرایش نمایش یابد",
+ "tog-editondblclick": "ویرایش صفحات با دو کلیک",
+ "tog-editsectiononrightclick": "فعالکردن ویرایش بخشها با کلیک راست روی عنوان بخشها",
+ "tog-watchcreations": "صفحههایی که میسازم و پروندههایی که بارگذاری میکنم به فهرست پیگیریهایم افزوده شود",
+ "tog-watchdefault": "صفحهها و پروندههایی که ویرایش میکنم به فهرست پیگیریهایم افزوده شود",
"tog-watchmoves": "صفحهها و پروندههایی که منتقل میکنم به فهرست پیگیریهایم افزوده شود",
- "tog-watchdeletion": "صفحهها و پروندههایی که حذف میکنم به فهرست پیگیریهایم افزوده شود",
+ "tog-watchdeletion": "صفحات و پروندههایی که حذف میکنم به فهرست پیگیریهایم افزوده شود",
"tog-watchrollback": "افزودن صفحاتی که واگردانی کردم برای فهرست پیگیریهایم",
"tog-minordefault": "همهٔ ویرایشها به طور پیشفرض به عنوان «جزئی» علامت بخورد",
"tog-previewontop": "پیشنمایش قبل از جعبهٔ ویرایش نمایش یابد",
"category_header": "صفحههای ردهٔ «$1»",
"subcategories": "زیرردهها",
"category-media-header": "پروندههای ردهٔ «$1»",
- "category-empty": "''این رده در حال حاضر حاوی هیچ صفحه یا پروندهای نیست.''",
+ "category-empty": "<em>این رده در حال حاضر حاوی هیچ صفحه یا پروندهای نیست.</em>",
"hidden-categories": "{{PLURAL:$1|ردهٔ پنهان|ردههای پنهان}}",
"hidden-category-category": "ردههای پنهان",
"category-subcat-count": "{{PLURAL:$2|این رده تنها حاوی زیرردهٔ زیر است.|{{PLURAL:$1|این زیررده|این $1 زیررده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 زیررده است.}}",
"category-file-count": "{{PLURAL:$2|این رده تنها حاوی پروندهٔ زیر است.|{{PLURAL:$1|این پرونده|این $1 پرونده}} در این رده قرار {{PLURAL:$1|دارد|دارند}}؛ این رده در کل حاوی $2 پرونده است.}}",
"category-file-count-limited": "{{PLURAL:$1|پروندهٔ|$1 پروندهٔ}} زیر در ردهٔ فعلی قرار دارند.",
"listingcontinuesabbrev": "(ادامه)",
- "index-category": "صفحههای نمایهشده",
- "noindex-category": "صفحههای نمایهنشده",
- "broken-file-category": "صفحههای دارای پیوند خراب به پرونده",
+ "index-category": "صفحات فهرستشده",
+ "noindex-category": "صفحات فهرستنشده",
+ "broken-file-category": "صفحات دارای پیوند خراب به پرونده",
"about": "درباره",
"article": "صفحهٔ محتوایی",
- "newwindow": "(در Ù¾Ù\86جرÙ\87Ù\94 جدÛ\8cد باز میشود)",
+ "newwindow": "(در Ù¾Ù\86جرÙ\87Ù\94 تازÙ\87 باز میشود)",
"cancel": "لغو",
"moredotdotdot": "بیشتر...",
"morenotlisted": "این فهرست کامل نیست.",
"mypage": "صفحه",
"mytalk": "بحث",
- "anontalk": "بØØ« براÛ\8c اÛ\8cÙ\86 آیپی",
- "navigation": "گشتن",
+ "anontalk": "بØØ« دربارÙ\87 اÛ\8cÙ\86 Ù\86شاÙ\86Û\8c آیپی",
+ "navigation": "ناوبری",
"and": " و",
"qbfind": "یافتن",
"qbbrowse": "مرور",
"qbedit": "ویرایش",
"qbpageoptions": "این صفحه",
- "qbmyoptions": "صفحههای من",
+ "qbmyoptions": "صفحات من",
"faq": "پرسشهای متداول",
"faqpage": "Project:پرسشهای متداول",
"actions": "عملکردها",
"create-this-page": "ایجاد این صفحه",
"delete": "حذف",
"deletethispage": "حذف این صفحه",
- "undeletethispage": "اØÛ\8cای این صفحه",
+ "undeletethispage": "بازگرداÙ\86ی این صفحه",
"undelete_short": "احیای {{PLURAL:$1|یک ویرایش|$1 ویرایش}}",
"viewdeleted_short": "نمایش {{PLURAL:$1|یک ویرایش حذفشده|$1 ویرایش حذفشده}}",
"protect": "محافظت",
"protect_change": "تغییر",
"protectthispage": "محافظت از این صفحه",
- "unprotect": "تغییر سطح محافظت",
- "unprotectthispage": "تغییر سطح محافظت این صفحه",
- "newpage": "صÙ\81ØÙ\87Ù\94 جدÛ\8cد",
+ "unprotect": "تغییر محافظت",
+ "unprotectthispage": "تغییر محافظت این صفحه",
+ "newpage": "صÙ\81ØÙ\87Ù\94 تازÙ\87",
"talkpage": "بحث دربارهٔ این صفحه",
"talkpagelinktext": "بحث",
"specialpage": "صفحهٔ ویژه",
"youhavenewmessages": "$1 دارید ($2).",
"youhavenewmessagesfromusers": "شما از {{PLURAL:$3|یک کاربر دیگر|$3 کاربر}} $1 دارید ($2).",
"youhavenewmessagesmanyusers": "شما از تعدادی کاربر $1 دارید ($2).",
- "newmessageslinkplural": "{{PLURAL:$1|Ù¾Û\8cاÙ\85 جدÛ\8cد|999=Ù¾Û\8cاÙ\85â\80\8cÙ\87اÛ\8c جدÛ\8cد}}",
+ "newmessageslinkplural": "{{PLURAL:$1|Ù¾Û\8cاÙ\85 جدÛ\8cد|999=Ù¾Û\8cاÙ\85â\80\8cÙ\87اÛ\8c تازÙ\87}}",
"newmessagesdifflinkplural": "{{formatnum:$1}} {{PLURAL:$1|تغییر|999=تغییر}} اخیر",
"youhavenewmessagesmulti": "پیامهای جدیدی در $1 دارید.",
"editsection": "ویرایش",
"hidetoc": "نهفتن",
"collapsible-collapse": "نهفتن",
"collapsible-expand": "گسترش",
+ "confirmable-confirm": "{{GENDER:$1|شما}} مطمئن هستید؟",
"confirmable-yes": "بله",
"confirmable-no": "خیر",
"thisisdeleted": "نمایش یا احیای $1؟",
"laggedslavemode": "'''هشدار:''' صفحه ممکن است بهروزرسانیهای اخیر را شامل نشود.",
"readonly": "پایگاه داده قفل شد",
"enterlockreason": "دلیلی برای قفل کردن ذکر کنید، که حاوی تقریبی از زمانی باشد که قفل برداشته خواهد شد",
- "readonlytext": "پایگاه داده در حال حاضر در برابر تغییرات و ایجاد صفحهها قفل شدهاست؛ این وضعیت احتمالاً به خاطر بهینهسازی و رسیدگیهای معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کردهاست: $1",
+ "readonlytext": "پایگاه داده در حال حاضر در برابر تغییرات و ایجاد صفحات قفل شدهاست؛ این وضعیت احتمالاً به خاطر بهینهسازی و رسیدگیهای معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کردهاست: $1",
"missing-article": "پایگاه داده متن صفحهٔ با نام «$1» $2 را که باید پیدا میکرد نیافت.\n\nاین مشکل معمولاً به علت دنبالکردن یک پیوند تفاوت تاریخگذشته یا تاریخچهٔ صفحهای که حذف شدهاست، رخ میدهد.\n\nدر غیر این صورت ممکن است اشکالی در نرمافزار پیدا کرده باشد.\nلطفاً این مشکل را با ذکر نشانی اینترنتی به یکی از [[Special:ListUsers/sysop|مدیران]] گزارش دهید.",
"missingarticle-rev": "(شمارهٔ نسخه: $1)",
"missingarticle-diff": "(تفاوت: $1، $2)",
"userlogin-noaccount": "حساب کاربری ندارید؟",
"userlogin-joinproject": "در {{SITENAME}} نامنویسی کنید!",
"nologin": "حساب کاربری ندارید؟ $1.",
- "nologinlink": "Û\8cÚ© Øساب کاربرÛ\8c جدÛ\8cد بسازید",
+ "nologinlink": "Û\8cÚ© Øساب کاربرÛ\8c تازÙ\87 بسازید",
"createaccount": "ایجاد حساب کاربری",
"gotaccount": "حساب کاربری دارید؟ $1.",
"gotaccountlink": "به سامانه وارد شوید",
"userlogin-resetlink": "جزئیات ورود را فراموش کردهاید؟",
"userlogin-resetpassword-link": "گذرواژهتان را فراموش کردید؟",
"userlogin-helplink2": "کمک با ورود",
- "userlogin-loggedin": "شما در حال حاضر بهعنوان {{GENDER:$1|$1}} وارد شدهاید.\nاز فرم پایین برای ورود بهعنوان یک کاربر دیگر استفاده کنید.",
- "userlogin-createanother": "ایجاد یک حساب کاربری دیگر",
"createacct-emailrequired": "نشانی رایانامه",
"createacct-emailoptional": "نشانی رایانامه (اختیاری)",
"createacct-email-ph": "نشانی رایانامه را وارد کنید",
"noname": "شما نام کاربری معتبری مشخص نکردهاید.",
"loginsuccesstitle": "ورود موفقیتآمیز به سامانه",
"loginsuccess": "'''شما اکنون با نام «$1» به {{SITENAME}} وارد شدهاید.'''",
- "nosuchuser": "کاربرÛ\8c با Ù\86اÙ\85 «$1» Ù\88جÙ\88د Ù\86دارد.\nÙ\86اÙ\85 کاربرÛ\8c بÙ\87 بزرگÛ\8c Ù\88 Ú©Ù\88Ú\86Ú©Û\8c ØرÙ\88Ù\81 Øساس است.\nاÙ\85Ù\84اÛ\8c Ù\86اÙ\85 را بررسÛ\8c Ú©Ù\86Û\8cدØ\8c Û\8cا [[Special:UserLogin/signup|Û\8cÚ© Øساب کاربرÛ\8c جدÛ\8cد بسازید]].",
+ "nosuchuser": "کاربرÛ\8c با Ù\86اÙ\85 «$1» Ù\88جÙ\88د Ù\86دارد.\nÙ\86اÙ\85 کاربرÛ\8c بÙ\87 بزرگÛ\8c Ù\88 Ú©Ù\88Ú\86Ú©Û\8c ØرÙ\88Ù\81 Øساس است.\nاÙ\85Ù\84اÛ\8c Ù\86اÙ\85 را بررسÛ\8c Ú©Ù\86Û\8cدØ\8c Û\8cا [[Special:UserLogin/signup|Û\8cÚ© Øساب کاربرÛ\8c تازÙ\87 بسازید]].",
"nosuchusershort": "هیچ کاربری با نام ''$1'' وجود ندارد.\nاملایتان را وارسی کنید.",
"nouserspecified": "باید یک نام کاربری مشخص کنید.",
"login-userblocked": "این کاربر بسته شدهاست. ورود به سامانه مجاز نیست.",
"createaccount-text": "یک نفر برای رایانامه شما یک حساب کاربری در {{SITENAME}} با نام «$2» ایجاد کردهاست ($4)، که گذرواژهٔ آن چنین است: $3\nشما باید به سامانه وارد شوید تا گذرواژهٔ خود را تغییر بدهید.\n\nاگر این حساب اشتباهی ساخته شده است، این پیغام را نادیده بگیرید.",
"login-throttled": "شما به تازگی چندینبار برای ثبت ورود تلاش کردهاید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
"login-abort-generic": "ورود شما ناموفق بود - خاتمهٔ ناگهانی داده شد",
+ "login-migrated-generic": "حساب کاربری شما منتقل شدهاست، و نام کاربریتان دیگر در این ویکی وجود ندارد.",
"loginlanguagelabel": "زبان: $1",
"suspicious-userlogout": "درخواست شما برای خروج از سامانه رد شد زیرا به نظر میرسد که این درخواست توسط یک مرورگر معیوب یا پروکسی میانگیر ارسال شده باشد.",
"createacct-another-realname-tip": "نام واقعی اختیاری است.\nاگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آنها به شما از نام واقعیتان استفاده خواهد شد.",
"resetpass_text": "<!-- اینجا متن اضافه کنید -->",
"resetpass_header": "تغییر گذرواژهٔ حساب کاربری",
"oldpassword": "گذرواژهٔ پیشین:",
- "newpassword": "گذرÙ\88اÚ\98Ù\87Ù\94 جدÛ\8cد:",
- "retypenew": "گذرÙ\88اÚ\98Ù\87Ù\94 جدÛ\8cد را دوباره وارد کنید",
+ "newpassword": "گذرÙ\88اÚ\98Ù\87Ù\94 تازÙ\87:",
+ "retypenew": "گذرÙ\88اÚ\98Ù\87Ù\94 تازÙ\87 را دوباره وارد کنید",
"resetpass_submit": "تنظیم گذرواژه و ورود به سامانه",
"changepassword-success": "گذرواژهٔ شما با موفقیت تغییر داده شد!",
"changepassword-throttled": "شما به تازگی چندینبار برای ثبت ورود تلاش کردهاید.\nلطفاً پیش از آنکه دوباره تلاش کنید $1 صبر کنید.",
"resetpass-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
"resetpass-submit-loggedin": "تغییر گذرواژه",
"resetpass-submit-cancel": "لغو",
- "resetpass-wrong-oldpass": "گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Û\8cا اخÛ\8cر Ù\86اÙ\85عتبر.\nÙ\85Ù\85Ú©Ù\86 است Ú©Ù\87 Ø´Ù\85ا Ù\87Ù\85Û\8cÙ\86Ú© گذرÙ\88اÚ\98Ù\87â\80\8cتاÙ\86 را با Ù\85Ù\88Ù\81Ù\82Û\8cت تغÛ\8cÛ\8cر دادÙ\87 باشÛ\8cد Û\8cا درخÙ\88است Û\8cÚ© گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت جدÛ\8cد کرده باشید.",
+ "resetpass-wrong-oldpass": "گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت Û\8cا اخÛ\8cر Ù\86اÙ\85عتبر.\nÙ\85Ù\85Ú©Ù\86 است Ú©Ù\87 Ø´Ù\85ا Ù\87Ù\85Û\8cÙ\86Ú© گذرÙ\88اÚ\98Ù\87â\80\8cتاÙ\86 را با Ù\85Ù\88Ù\81Ù\82Û\8cت تغÛ\8cÛ\8cر دادÙ\87 باشÛ\8cد Û\8cا درخÙ\88است Û\8cÚ© گذرÙ\88اÚ\98Ù\87Ù\94 Ù\85Ù\88Ù\82ت تازÙ\87 کرده باشید.",
"resetpass-recycled": "لطفاً رمز عبور خود را به چیز دیگری غیر از رمز عبور فعلی تنظیم کنید.",
"resetpass-temp-emailed": "شما با یک کد رایانامه شدهٔ موقت وارد شدهاید.\nبرای پایان ورود، شما باید رمز عبور جدیدی اینجا وارد کنید:",
"resetpass-temp-password": "گذرواژهٔ موقت:",
"resetpass-abort-generic": "تغییر گذرواژه به دست یکی از افزونهها لغو شده است.",
"resetpass-expired": "رمز عبور شما منقضی شدهاست. لطفاً برای ورود رمز عبور جدیدی را تنظیم کنید.",
"resetpass-expired-soft": "رمز عبور شما منقضی شدهاست، و نیاز به تنظیم مجدد دارد. لطفاً اکنون رمز عبور جدیدی را انتخاب کنید، یا برای تنظیم مجدد آن بعدآً، دکمه \"{{int:resetpass-submit-cancel}}\" را کلیک کنید.",
- "resetpass-validity-soft": "گذرÙ\88اÙ\87Ù\94 Ø´Ù\85ا صØÛ\8cØ Ù\86Û\8cست: $1\n\nÙ\84Ø·Ù\81اÙ\8b Û\8cÚ© گذرÙ\88اÚ\98Ù\87Ù\94 جدÛ\8cد الآن انتخاب کنید یا بر «{{int:resetpass-submit-cancel}}» کلیک کنید که دوباره آن را بعداً انتخاب کنید.",
+ "resetpass-validity-soft": "گذرÙ\88اÙ\87Ù\94 Ø´Ù\85ا صØÛ\8cØ Ù\86Û\8cست: $1\n\nÙ\84Ø·Ù\81اÙ\8b Û\8cÚ© گذرÙ\88اÚ\98Ù\87Ù\94 تازÙ\87 الآن انتخاب کنید یا بر «{{int:resetpass-submit-cancel}}» کلیک کنید که دوباره آن را بعداً انتخاب کنید.",
"passwordreset": "بازنشانی گذرواژه",
"passwordreset-text-one": "برای بازنشانی گذرواژهتان این فرم را کامل کنید.",
"passwordreset-text-many": "{{PLURAL:$1|برای دریافت یک گذرواژهٔ موقت از راه رایانامه، یکی از زمینهها را پر کنید.}}",
"changeemail-text": "این فرم را تکمیل کنید تا آدرس رایانامهتان تغییر یابد. برای این که این تغییر را تأیید کنید لازم است گذرواژهٔ خود را وارد کنید.",
"changeemail-no-info": "برای دسترسی مستقیم به این صفحه شما باید به سامانه وارد شده باشید.",
"changeemail-oldemail": "نشانی رایانامهٔ کنونی:",
- "changeemail-newemail": "Ù\86شاÙ\86Û\8c راÛ\8cاÙ\86اÙ\85Ù\87Ù\94 جدÛ\8cد:",
+ "changeemail-newemail": "Ù\86شاÙ\86Û\8c راÛ\8cاÙ\86اÙ\85Ù\87Ù\94 تازÙ\87:",
"changeemail-none": "(هیچ)",
"changeemail-password": " {{SITENAME}} رمز عبور شما:",
"changeemail-submit": "تغییر رایانامه",
"showpreview": "پیشنمایش",
"showdiff": "نمایش تغییرات",
"blankarticle": "<strong>هشدار:</strong> شما در حال ایجاد صفحه خالی هستید.\nاگر \"{{int:savearticle}}\" را دوباره کلیک کنید، صفحه بدون محتوا ایجاد میشود.",
- "anoneditwarning": "'''هشدار:''' شما به سامانه وارد نشدهاید.\nنشانی آیپی شما در تاریخچهٔ ویرایش این صفحه ثبت خواهد شد.",
+ "anoneditwarning": "<strong>هشدار:</strong> شما وارد نشدهاید. نشانی آیپی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر <strong>[$1 وارد شوید]</strong> یا <strong>[$2 یک حساب کاربری بسازید]</strong>، ویرایشهایتان به نام کاربریتان نسبت داده خواهد شد، همراه با مزایای دیگر.",
"anonpreviewwarning": "''شما به سامانه وارد نشدهاید. ذخیره کردن باعث میشود که نشانی آیپی شما در تاریخچهٔ این صفحه ثبت گردد.''",
"missingsummary": "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشتهاید.\nاگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
"missingcommenttext": "لطفاً توضیحی در زیر بیفزایید.",
"autoblockedtext": "دسترسی نشانی آیپی شما قطع شدهاست، زیرا این نشانی آیپی توسط کاربر دیگری استفاده شده که دسترسی او توسط $1 قطع شدهاست.\nدلیل ارائهشده چنین است:\n\n:''$2''\n\n* شروع قطع دسترسی: $8\n* پایان قطع دسترسی: $6\n* کاربری هدف قطع دسترسی: $7\n\nشما میتوانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.\nتوجه کنید که شما نمیتوانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.\nنشانی آیپی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.\nلطفاً تمامی جزئیات فوق را در کلیهٔ درخواستهایی که در این باره مطرح میکنید ذکر کنید.",
"blockednoreason": "دلیلی مشخص نشدهاست",
"whitelistedittext": "برای ویرایش مقالهها باید $1.",
- "confirmedittext": "شما باید، پیش از ویرایش صفحهها، نشانی رایانامهٔ خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.",
+ "confirmedittext": "شما باید، پیش از ویرایش صفحات، نشانی رایانامهٔ خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.",
"nosuchsectiontitle": "چنین بخشی پیدا نشد",
"nosuchsectiontext": "شما تلاش کردهاید یک بخش در صفحه را ویرایش کنید که وجود ندارد.\nممکن است در مدتی که شما صفحه را مشاهده میکردید این بخش جا به جا یا حذف شده باشد.",
"loginreqtitle": "ورود به سامانه لازم است",
"loginreqpagetext": "برای دیدن صفحههای دیگر باید $1.",
"accmailtitle": "گذرواژه فرستاده شد.",
"accmailtext": "یک گذرواژهٔ تصادفی برای [[User talk:$1|$1]] به $2 فرستاده شد. میتوان آن را از صفحهٔ ''[[Special:ChangePassword|تغییر گذرواژه]]'' که هنگام ثبت ورود نمایش مییابد تغییر داد.",
- "newarticle": "(جدÛ\8cد)",
+ "newarticle": "(تازÙ\87)",
"newarticletext": "شما پیوندی را دنبال کردهاید و به صفحهای رسیدهاید که هنوز وجود ندارد.\nبرای ایجاد صفحه، در مستطیل زیر شروع به نوشتن کنید (برای اطلاعات بیشتر به [$1 صفحهٔ راهنما] مراجعه کنید).\nاگر به اشتباه اینجا آمدهاید، دکمهٔ «بازگشت» مرورگرتان را بزنید.",
"anontalkpagetext": "----''این صفحهٔ بحث برای کاربر گمنامی است که هنوز حسابی درست نکرده است یا از آن استفاده نمیکند.\nبنا بر این برای شناساییاش مجبوریم از نشانی آیپی عددی استفاده کنیم.\nچنین نشانیهای آیپی ممکن است توسط چندین کاربر به شکل مشترک استفاده شود.\nاگر شما کاربر گمنامی هستید و تصور میکنید اظهار نظرات نامربوط به شما صورت گرفته است، لطفاً برای پیشگیری از اشتباه گرفته شدن با کاربران گمنام دیگر در آینده [[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-nopermission": "این صفحه هماکنون متنی ندارد.\nشما میتوانید در دیگر صفحهها [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،\nیا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} سیاهههای مرتبط را بگردید]</span> ولی شما اجازه ایجاد این صفحه را ندارید.",
+ "noarticletext-nopermission": "این صفحه هماکنون متنی ندارد.\nشما میتوانید در دیگر صفحات [[Special:Search/{{PAGENAME}}|این عنوان را جستجو کنید]]،\nیا <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>» ثبت نشدهاست.\nلطفاً مطمئن شوید که میخواهید این صفحه را ایجاد یا ویرایش کنید.",
"userpage-userdoesnotexist-view": "حساب کاربری «$1» ثبت نشدهاست.",
"editing": "در حال ویرایش $1",
"creating": "ایجاد $1",
"editingsection": "در حال ویرایش $1 (بخش)",
- "editingcomment": "در ØاÙ\84 Ù\88Û\8cراÛ\8cØ´ $1 (بخش جدÛ\8cد)",
+ "editingcomment": "در ØاÙ\84 Ù\88Û\8cراÛ\8cØ´ $1 (بخش تازÙ\87)",
"editconflict": "تعارض ویرایشی: $1",
"explainconflict": "از وقتی ویرایش این صفحه را آغاز کردهاید شخص دیگری آن را تغییر دادهاست.\nناحیهٔ متنی بالایی شامل متن صفحه به شکل کنونی آن است.\nتغییرات شما در ناحیهٔ متنی پایینی نشان داده شدهاست.\nشما باید تغییراتتان را با متن کنونی ترکیب کنید.\nبا فشردن دکمهٔ «{{int:savearticle}}» '''فقط''' متن ناحیهٔ متنی بالایی ذخیره خواهد شد.",
"yourtext": "متن شما",
"storedversion": "نسخهٔ ذخیره شده",
- "nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحهها را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده میشوند.",
+ "nonunicodebrowser": "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''\nراه حلی به کار گرفته شده تا شما بتوانید صفحات را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده میشوند.",
"editingold": "'''هشدار: شما در حال ویرایش نسخهای قدیمی از این صفحه هستید.'''\nاگر ذخیرهاش کنید، هر تغییری که پس از این نسخه انجام شدهاست از بین خواهد رفت.",
"yourdiff": "تفاوتها",
"copyrightwarning": "لطفاً توجه داشته باشید که فرض میشود کلیهٔ مشارکتهای شما با {{SITENAME}} تحت «$2» منتشر میشوند (برای جزئیات بیشتر به $1 مراجعه کنید).\nاگر نمیخواهید نوشتههایتان بیرحمانه ویرایش شده و به دلخواه توزیع شود، اینجا نفرستیدشان.<br />\nهمچنین شما دارید به ما قول میدهید که خودتان این را نوشتهاید، یا آن را از یک منبع آزاد با مالکیت عمومی یا مشابه آن برداشتهاید.\n'''کارهای دارای حق تکثیر (copyright) را بیاجازه نفرستید!'''",
"template-semiprotected": "(نیمهحفاظتشده)",
"hiddencategories": "این صفحه در {{PLURAL:$1|یک ردهٔ پنهان|$1 ردهٔ پنهان}} قرار دارد:",
"edittools": "<!-- متن این قسمت زیر صفحههای ویرایش و بارگذاری نشان داده میشود -->",
- "nocreatetext": "{{SITENAME}} Ù\82ابÙ\84Û\8cت اÛ\8cجاد صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c جدÛ\8cد را محدود کردهاست.\nمیتوانید بازگردید و صفحهای موجود را ویرایش کنید یا اینکه [[Special:UserLogin|به سامانه وارد شوید یا حساب کاربری ایجاد کنید]].",
- "nocreate-loggedin": "Ø´Ù\85ا اجازÙ\87Ù\94 اÛ\8cجاد صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c جدÛ\8cد را ندارید.",
+ "nocreatetext": "{{SITENAME}} Ù\82ابÙ\84Û\8cت اÛ\8cجاد صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c تازÙ\87 را محدود کردهاست.\nمیتوانید بازگردید و صفحهای موجود را ویرایش کنید یا اینکه [[Special:UserLogin|به سامانه وارد شوید یا حساب کاربری ایجاد کنید]].",
+ "nocreate-loggedin": "Ø´Ù\85ا اجازÙ\87Ù\94 اÛ\8cجاد صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c تازÙ\87 را ندارید.",
"sectioneditnotsupported-title": "ویرایش بخشها پشتیبانی نمیشود",
"sectioneditnotsupported-text": "این صفحه از ویرایش بخشها پشتیبانی نمیکند.",
"permissionserrors": "خطای سطح دسترسی",
"postedit-confirmation-created": "صفحه ایجاد شده است.",
"postedit-confirmation-restored": "صفحه بازیابی شده است.",
"postedit-confirmation-saved": "ویرایش شما ذخیره شد.",
- "edit-already-exists": "اÙ\85کاÙ\86 ساختÙ\86 صÙ\81ØÙ\87Ù\94 جدÛ\8cد وجود ندارد.\nاین صفحه از قبل وجود داشتهاست.",
+ "edit-already-exists": "اÙ\85کاÙ\86 ساختÙ\86 صÙ\81ØÙ\87Ù\94 تازÙ\87 وجود ندارد.\nاین صفحه از قبل وجود داشتهاست.",
"defaultmessagetext": "متن پیشفرض پیغام",
"content-failed-to-parse": "عدم موفقیت در تجزیه محتوای $2 برای مدل $1: $3",
"invalid-content-data": "داده محتوای نامعتبر",
"parser-template-recursion-depth-warning": "محدودیت عمق بازگشت الگو رد شد ($1)",
"language-converter-depth-warning": "محدودیت عمق مبدل زبانی رد شد ($1)",
"node-count-exceeded-category": "صفحههایی که از حداکثر تعداد گره تجاوز کردهاند",
- "node-count-exceeded-category-desc": "ردÙ\87 براÛ\8c صÙ\81ØاتÛ\8c Ú©Ù\87 در Ø¢Ù\86Ù\87ا Ø´Ù\85ارÙ\86دÙ\87 فراتر رفته است.",
- "node-count-exceeded-warning": "صفحه از حداکثر تعداد گره، فراتر است",
+ "node-count-exceeded-category-desc": "اÛ\8cÙ\86 صÙ\81ØÙ\87 از تعداد Øداکثر اشکاÙ\84 فراتر رفته است.",
+ "node-count-exceeded-warning": "صفحه از حداکثر تعداد گره فراتر رفتهاست",
"expansion-depth-exceeded-category": "صفحههایی که از حداکثر عمق بسط دادن تجاوز کردهاند",
- "expansion-depth-exceeded-category-desc": "رده برای صفحاتی که در آنها عمق گسترش فراتر رفته است.",
+ "expansion-depth-exceeded-category-desc": "ردÙ\87 براÛ\8c صÙ\81ØاتÛ\8c Ú©Ù\87 در Ø¢Ù\86Ù\87ا از عÙ\85Ù\82 گسترش Ù\81راتر رÙ\81تÙ\87 است.",
"expansion-depth-exceeded-warning": "صفحه حداکثر عمق بسط دادن تجاوز کرد",
"parser-unstrip-loop-warning": "حلقه در دستور unstrip پیدا شد",
"parser-unstrip-recursion-limit": "از حداکثر ارجاع در دستور unstrip تجاوز شد ($1)",
"undo-success": "این ویرایش را میتوان خنثی کرد.\nلطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که میخواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثیسازی ویرایش را به پایان ببرید.",
"undo-failure": "به علت تعارض با ویرایشهای میانی، این ویرایش را نمیتوان خنثی کرد.",
"undo-norev": "این ویرایش را نمیتوان خنثی کرد چون وجود ندارد یا حذف شدهاست.",
- "undo-nochange": "بÙ\87 Ù\86ظر Ù\85Û\8câ\80\8cرسد Ù\88Û\8cراÛ\8cØ´ در ØاÙ\84 Øاضر باطÙ\84 بÙ\88ده است.",
+ "undo-nochange": "بÙ\87 Ù\86ظر Ù\85Û\8câ\80\8cرسد Ù\88Û\8cراÛ\8cØ´ از Ù¾Û\8cØ´ Ù\88اگرداÙ\86Û\8c Ø´ده است.",
"undo-summary": "خنثیسازی ویرایش $1 توسط [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])",
"undo-summary-username-hidden": "خنثیسازی نسخهٔ $1 به دست یک کاربر پنهانشده",
"cantcreateaccounttitle": "نمیتوان حساب باز کرد",
"history-feed-title": "تاریخچهٔ ویرایشها",
"history-feed-description": "تاریخچهٔ ویرایشهای این صفحه در ویکی",
"history-feed-item-nocomment": "$1 در $2",
- "history-feed-empty": "صفحهٔ درخواست شده وجود ندارد.\nممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد.\nصفحههای جدید را برای موارد مرتبط در این ویکی [[Special:Search|جستجو کنید]].",
+ "history-feed-empty": "صفحهٔ درخواست شده وجود ندارد.\nممکن است که از ویکی حذف یا اینکه نامش تغییر داده شده باشد.\nصفحات تازه را برای موارد مرتبط در این ویکی [[Special:Search|جستجو کنید]].",
"rev-deleted-comment": "(خلاصه ویرایش حذف شد)",
"rev-deleted-user": "(نام کاربری حذف شد)",
"rev-deleted-event": "(مورد از سیاهه پاک شده)",
"revdelete-radio-set": "پنهان",
"revdelete-radio-unset": "نمایان",
"revdelete-suppress": "از دسترسی مدیران به داده نیز مانند سایر کاربران جلوگیری به عمل آید.",
- "revdelete-unsuppress": "خاتÙ\85Ù\87Ù\94 Ù\85ØدÙ\88دÛ\8cتâ\80\8cÙ\87ا در Ù\85Ù\88رد Ù\86سخÙ\87â\80\8cÙ\87اÛ\8c اÙ\86تخابشده",
+ "revdelete-unsuppress": "ØØ°Ù\81 Ù\85ØدÙ\88دÛ\8cتâ\80\8cÙ\87ا در بازبÛ\8cÙ\86Û\8câ\80\8cÙ\87اÛ\8c ترÙ\85Û\8cÙ\85شده",
"revdelete-log": "دلیل:",
"revdelete-submit": "اعمال بر {{PLURAL:$1|نسخهٔ|نسخههای}} انتخاب شده",
"revdelete-success": "'''پیدایی نسخه با موفقیت به روز شد.'''",
"revdelete-offender": "نویسنده نسخه:",
"suppressionlog": "سیاههٔ فرونشانی",
"suppressionlogtext": "در زیر فهرستی از آخرین حذفها و قطع دسترسیهایی که حاوی محتوایی هستند که از مدیران پنهان شدهاند را میبینید.\nبرای مشاهدهٔ فهرستی از قطع دسترسیهای فعال [[Special:BlockList|فهرست بستهشدهها]] را ببینید.",
- "mergehistory": "ادغام تاریخچه صفحهها",
+ "mergehistory": "ادغام تاریخچه صفحات",
"mergehistory-header": "این صفحه به شما این امکان را میدهد که نسخههای تاریخچهٔ یک مقاله را با یک مقاله دیگر ادغام کنید.\nاطمینان حاصل کنید که این تغییر به توالی زمانی ویرایشها لطمه نخواهد زد.",
"mergehistory-box": "ادغام نسخههای دو صفحه:",
"mergehistory-from": "صفحهٔ مبدأ:",
"mergelogpagetext": "در زیر سیاههٔ آخرین موارد ادغام تاریخچهٔ یک صفحه در صفحهای دیگر را میبینید.",
"history-title": "$1: تاریخچهٔ ویرایشها",
"difference-title": "$1: تفاوت بین نسخهها",
- "difference-title-multipage": "$1 و $2: تفاوت بین صفحهها",
- "difference-multipage": "(تفاوت بین صفحهها)",
+ "difference-title-multipage": "$1 و $2: تفاوت بین صفحات",
+ "difference-multipage": "(تفاوت بین صفحات)",
"lineno": "سطر $1:",
"compareselectedversions": "مقایسهٔ نسخههای انتخابشده",
- "showhideselectedversions": "نمایش/نهفتن نسخههای انتخابشده",
+ "showhideselectedversions": "تغییر پدیداری بازبینیهای انتخابشده",
"editundo": "خنثیسازی",
"diff-empty": "(بدون تفاوت)",
"diff-multi-sameuser": "({{PLURAL:$1|یک نسخهٔ میانی|$1 نسخهٔ میانی}} توسط کاربر مشابهی که نشان داده نشده)",
"preferences": "ترجیحات",
"mypreferences": "ترجیحات",
"prefs-edits": "تعداد ویرایشها:",
- "prefsnologintext2": "لطفاً $1 برای تنظیم ترجیحات کاربر.",
+ "prefsnologintext2": "خواهشمند است برای تغییر تنظیماتتان وارد شوید.",
"prefs-skin": "پوسته",
"skin-preview": "پیشنمایش",
"datedefault": "بدون ترجیح",
"yourlanguage": "زبان:",
"yourvariant": "گویش زبان محتوا:",
"prefs-help-variant": "گویش انتخابی شما برای نمایش محتوای صفحهها در این ویکی.",
- "yournick": "اÙ\85ضاÛ\8c جدÛ\8cد:",
+ "yournick": "اÙ\85ضاÛ\8c تازÙ\87:",
"prefs-help-signature": "نظرهای نوشتهشده در صفحهٔ بحث باید با «<nowiki>~~~~</nowiki>» امضا شوند؛ این علامت بهصورت خودکار به امضای شما و مهر تاریخ تبدیل خواهد شد.",
"badsig": "امضای خام نامجاز.\nلطفاً برچسبهای اچتیامال را بررسی کنید.",
"badsiglength": "امضای شما بیش از اندازه طولانی است.\nامضا باید کمتر از $1 {{PLURAL:$1|نویسه}} طول داشته باشد.",
"right-createaccount": "ایجاد حسابهای کاربری",
"right-minoredit": "علامتزدن ویرایشها بهعنوان جزئی",
"right-move": "انتقال صفحه",
- "right-move-subpages": "انتقال صفحÙ\87â\80\8cÙ\87ا بÙ\87 Ù\87Ù\85راÙ\87 زÛ\8cرâ\80\8cصÙ\81ØÙ\87â\80\8cÙ\87اÛ\8cشاÙ\86",
+ "right-move-subpages": "انتقال صفحات بÙ\87 Ù\87Ù\85راÙ\87 زÛ\8cرâ\80\8cصÙ\81Øاتâ\80\8cشاÙ\86",
"right-move-rootuserpages": "انتقال صفحههای کاربری سرشاخه",
"right-move-categorypages": "انتقال صفحهٔ رده",
"right-movefile": "انتقال پروندهها",
"right-purge": "پاککردن میانگیر صفحه بدون مشاهدهٔ صفحهٔ تأیید",
"right-autoconfirmed": "از محدودیتهای سرعت آیپی-محور تاثیر نمیگیرد",
"right-bot": "تلقیشده به عنوان یک فرآیند خودکار",
- "right-nominornewtalk": "Ù\88Û\8cراÛ\8cØ´ جزئÛ\8c صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c بØØ« بÙ\87 Ø´Ú©Ù\84Û\8c Ú©Ù\87 باعث اعÙ\84اÙ\86 Ù¾Û\8cغاÙ\85 جدÛ\8cد نشود",
+ "right-nominornewtalk": "Ù\88Û\8cراÛ\8cØ´ جزئÛ\8c صÙ\81ØÙ\87â\80\8cÙ\87اÛ\8c بØØ« بÙ\87 Ø´Ú©Ù\84Û\8c Ú©Ù\87 باعث اعÙ\84اÙ\86 Ù¾Û\8cغاÙ\85 تازÙ\87 نشود",
"right-apihighlimits": "سقف بالاتر استفاده از API",
"right-writeapi": "استفاده از API مربوط به نوشتن",
- "right-delete": "حذف صفحهها",
+ "right-delete": "حذف صفحات",
"right-bigdelete": "حذف صفحههای دارای تاریخچهٔ بزرگ",
"right-deletelogentry": "حذف و احیای مدخلهای خاصی از سیاهه",
"right-deleterevision": "حذف و احیای نسخههای خاصی از صفحه",
"right-deletedhistory": "مشاهدهٔ موارد حذفشده از تاریخچه، بدون دیدن متن آنها",
"right-deletedtext": "مشاهدهٔ متن حذفشده و تغییرات بین نسخههای حذفشده",
"right-browsearchive": "جستجوی صفحههای حذفشده",
- "right-undelete": "احیای صفحهها",
+ "right-undelete": "احیای صفحات",
"right-suppressrevision": "مشاهده و احیای ویرایشهایی که از کاربران پنهان شدهاند",
"right-viewsuppressed": "مشاهده نسخههایی که از کاربران مخفی شدهاند",
"right-suppressionlog": "مشاهدهٔ سیاهههای خصوصی",
"right-ipblock-exempt": "تاثیر نپذیرفتن از قطع دسترسیهای آیپی، خودکار یا فاصلهای",
"right-proxyunbannable": "تاثیر نپذیرفتن از قطع دسترسی خودکار پروکسیها",
"right-unblockself": "بازکردن دسترسی خود",
- "right-protect": "تغییر میزان محافظت صفحهها و ویرایش صفحههای محافظتشده آبشاری",
- "right-editprotected": "ویرایش صفحههای محافظت شده به عنوان \"{{int:protect-level-sysop}}\"",
+ "right-protect": "تغییر میزان محافظت صفحات و ویرایش صفحات محافظتشده آبشاری",
+ "right-editprotected": "ویرایش صفحههای محافظتشده بهعنوان «{{int:protect-level-sysop}}»",
"right-editsemiprotected": "ویرایش صفحه حفاظتشده به عنوان \"{{int:protect-level-autoconfirmed}}\"",
"right-editinterface": "ویرایش واسط کاربری",
"right-editusercssjs": "ویرایش صفحههای CSS و JS دیگر کاربرها",
"right-editmyusercss": "پروندههای سیاساس کاربری خود را ویرایش کنید",
"right-editmyuserjs": "پروندههای جاوااسکریپت کاربری خود را ویرایش کنید",
"right-viewmywatchlist": "فهرست پیگیریهای خود را ببینید",
- "right-editmywatchlist": "فهرست پیگیریهای خود را ویرایش کنید. توجه داشته باشید برخی از اقدامات حتی بدون این دسترسی هم صفحهها را اضافه میکنند.",
+ "right-editmywatchlist": "فهرست پیگیریهای خود را ویرایش کنید. توجه داشته باشید برخی از اقدامات حتی بدون این دسترسی هم صفحات را اضافه میکنند.",
"right-viewmyprivateinfo": "دادههای خصوصی خود را ببینید (مانند رایانشانی و نام واقعی)",
"right-editmyprivateinfo": "دادههای خصوصی خود را ویرایش کنید (مانند رایانشانی و نام واقعی)",
"right-editmyoptions": "ترجیحات خود را ویرایش",
"right-autopatrol": "گشت زدن خودکار ویرایشهای خودش",
"right-patrolmarks": "مشاهدهٔ برچسب گشت تغییرات اخیر",
"right-unwatchedpages": "مشاهدهٔ فهرست صفحههایی که پیگیری نمیشوند",
- "right-mergehistory": "ادغام تاریخچهٔ صفحهها",
+ "right-mergehistory": "ادغام تاریخچهٔ صفحات",
"right-userrights": "ویرایش تمام اختیارات کاربرها",
"right-userrights-interwiki": "ویرایش اختیارات کاربرهای ویکیهای دیگر",
"right-siteadmin": "قفلکردن و بازکردن پایگاه دادهها",
"recentchanges-summary": "آخرین تغییرات ویکی را در این صفحه پیگیری کنید.",
"recentchanges-noresult": "هیچ تغییری در طول دورهٔ تعیینشده با این معیارها همخوانی نداشت.",
"recentchanges-feed-description": "آخرین تغییرات ویکی را در این خوراک پیگیری کنید.",
- "recentchanges-label-newpage": "اÛ\8cÙ\86 Ù\88Û\8cراÛ\8cØ´ صÙ\81ØÙ\87â\80\8cاÛ\8c جدÛ\8cد ایجاد کرد",
+ "recentchanges-label-newpage": "اÛ\8cÙ\86 Ù\88Û\8cراÛ\8cØ´ صÙ\81ØÙ\87â\80\8cاÛ\8c تازÙ\87 ایجاد کرد",
"recentchanges-label-minor": "این یک ویرایش جزئیاست",
"recentchanges-label-bot": "این ویرایش را یک ربات انجام دادهاست",
"recentchanges-label-unpatrolled": "این ویرایش هنوز گشتزنی نشدهاست",
"recentchanges-label-plusminus": "حجم صفحه به اندازه این بایتها تغییر یافتهاست",
"recentchanges-legend-heading": "'''اختصارها:'''",
- "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 بÙ\87 [[Special:NewPages|Ù\81Ù\87رست صÙ\81Øات جدÛ\8cد]] نگاه کنید)",
- "recentchanges-legend-plusminus": "('' ±۱۲۳'')",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ù\87Ù\85Ú\86Ù\86Û\8cÙ\86 بÙ\87 [[Special:NewPages|Ù\81Ù\87رست صÙ\81Øات تازÙ\87]] نگاه کنید)",
+ "recentchanges-legend-plusminus": "(<em>±۱۲۳</em>)",
"rcnotefrom": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شدهاست|نشان داده شدهاند}}).",
- "rclistfrom": "Ù\86Ù\85اÛ\8cØ´ تغÛ\8cÛ\8cرات جدÛ\8cد با شروع از $3 $2",
+ "rclistfrom": "Ù\86Ù\85اÛ\8cØ´ تغÛ\8cÛ\8cرات تازÙ\87 با شروع از $3 $2",
"rcshowhideminor": "$1 ویرایشهای جزئی",
"rcshowhideminor-show": "نمایش",
"rcshowhideminor-hide": "پنهانکردن",
"upload_directory_read_only": "شاخهٔ بارگذاری ($1) از طرف سرور وب قابل نوشتن نیست.",
"uploaderror": "خطای بارگذاری",
"upload-recreate-warning": "'''هشدار: پروندهای با این نام حذف یا منتقل شده است.'''\n\nبرای راحتی، سیاههٔ حذف و انتقال برای این صفحه در زیر آمده است:",
- "uploadtext": "از فرم زیر برای بارگذاری کردن پروندههای جدید استفاده کنید.\nبرای دیدن پروندههایی که قبلاً بارگذاری شدهاند به [[Special:FileList|فهرست پروندهها]] بروید. بارگذاری نیز مجدد در [[Special:Log/upload|سیاههٔ بارگذاریها]] و حذف پروندهها در [[Special:Log/delete|deletion log]] ثبت میشود.\n\nبعد از این که پروندهای را بارگذاری کردید، به این سه شکل میتوانید آن را در صفحهها استفاده کنید:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' برای استفاده از نسخه کامل پرونده\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' برای استفاده از یک نسخه ۲۰۰ پیکسلی از پرونده درون یک جعبه در سمت چپ متن که عبارت alt text در آن به عنوان توضیح استفاده شده\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' برای ایجاد یک پیونده مستقیم به پرونده بدون نمایش پرونده",
+ "uploadtext": "از فرم زیر برای بارگذاری کردن پروندههای جدید استفاده کنید.\nبرای دیدن پروندههایی که قبلاً بارگذاری شدهاند به [[Special:FileList|فهرست پروندهها]] بروید. بارگذاری نیز مجدد در [[Special:Log/upload|سیاههٔ بارگذاریها]] و حذف پروندهها در [[Special:Log/delete|deletion log]] ثبت میشود.\n\nبعد از این که پروندهای را بارگذاری کردید، به این سه شکل میتوانید آن را در صفحات استفاده کنید:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' برای استفاده از نسخه کامل پرونده\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' برای استفاده از یک نسخه ۲۰۰ پیکسلی از پرونده درون یک جعبه در سمت چپ متن که عبارت alt text در آن به عنوان توضیح استفاده شده\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' برای ایجاد یک پیونده مستقیم به پرونده بدون نمایش پرونده",
"upload-permitted": "انواع مجاز پروندهها: $1.",
"upload-preferred": "انواع ترجیحداده شده پروندهها: $1.",
"upload-prohibited": "انواع نامجاز پروندهها: $1.",
"ignorewarning": "چشمپوشی از هشدار و ذخیرهٔ پرونده.",
"ignorewarnings": "چشمپوشی از همهٔ هشدارها",
"minlength1": "نام پرونده دست کم باید یک حرف باشد.",
- "illegalfilename": "نام پرونده «$1» نویسههایی را شامل میشود که در نام صفحهها مجاز نیستند.\nلطفاً نام پرونده را تغییر دهید و آن را دوباره بارگذاری کنید.",
+ "illegalfilename": "نام پرونده «$1» نویسههایی را شامل میشود که در نام صفحات مجاز نیستند.\nلطفاً نام پرونده را تغییر دهید و آن را دوباره بارگذاری کنید.",
"filename-toolong": "نام پرونده نباید از ۲۴۰ بایت طولانیتر باشد.",
"badfilename": "نام پرونده به «$1» تغییر کرد.",
"filetype-mime-mismatch": "پسوند پرونده «$1.» با نوع MIME آن ($2) مطابقت ندارد.",
"listduplicatedfiles-summary": "این فهرست پروندههایی با نسخههای اخیر این پرونده تکراری است که نسخههای اخبر سایر پروندهها است. فقط پروندههای محلی در نظر گرفته شدهاند.",
"listduplicatedfiles-entry": "[[:File:$1|$1]][[$3|{{PLURAL:$2|یک تکرار|$2 تکرار}}]] دارد.",
"unusedtemplates": "الگوهای استفادهنشده",
- "unusedtemplatestext": "این صفحه همهٔ صفحههایی در فضای نام {{ns:template}} را که در هیچ صفحهای به کار نرفتهاند، فهرست میکند.\nبه یاد داشته باشید که پیش از پاککردن این صفحهها پیوندهای دیگر به آنها را هم وارسی کنید.",
+ "unusedtemplatestext": "این صفحه همهٔ صفحاتی در فضای نام {{ns:template}} را که در هیچ صفحهای به کار نرفتهاند، فهرست میکند.\nبه یاد داشته باشید که پیش از پاککردن این صفحات پیوندهای دیگر به آنها را هم وارسی کنید.",
"unusedtemplateswlh": "پیوندهای دیگر",
"randompage": "مقالهٔ تصادفی",
"randompage-nopages": "هیچ صفحهای در این {{PLURAL:$2|فضای نام|فضاهای نام}} موجود نیست: $1.",
"randomincategory": "صفحهٔ تصادفی در رده",
"randomincategory-invalidcategory": "«$1» نامی معتبر برای یک ردهٔ نیست.",
"randomincategory-nopages": "هیج صفحهای در رده [[:Category:$1|$1]] وجود ندارد.",
+ "randomincategory-category": "رده:",
+ "randomincategory-legend": "صفحهٔ تصادفی در رده",
"randomredirect": "تغییرمسیر تصادفی",
"randomredirect-nopages": "هیج صفحهٔ تغییرمسیری در فضای نام «$1» موجود نیست.",
"statistics": "آمار",
- "statistics-header-pages": "آمار صفحهها",
+ "statistics-header-pages": "آمار صفحه",
"statistics-header-edits": "آمار ویرایشها",
"statistics-header-views": "آمار بازدیدها",
"statistics-header-users": "آمار کاربران",
"statistics-header-hooks": "آمارهای دیگر",
"statistics-articles": "صفحههای محتوایی",
- "statistics-pages": "صفحهها",
+ "statistics-pages": "صفحات",
"statistics-pages-desc": "تمام صفحههای این ویکی، از جمله صفحههای بحث، تغییرمسیر و غیره",
"statistics-files": "پروندههای بارگذاریشده",
"statistics-edits": "ویرایش صفحهها از هنگامی که {{SITENAME}} راهاندازی شده",
"brokenredirects-edit": "ویرایش",
"brokenredirects-delete": "حذف",
"withoutinterwiki": "صفحههای بدون پیوند میانویکی",
- "withoutinterwiki-summary": "این صفحهها پیوندی به صفحهای به زبان دیگر نمیدارند:",
+ "withoutinterwiki-summary": "این صفحات پیوندی به صفحهای به زبان دیگر نمیدارند:",
"withoutinterwiki-legend": "پیشوند",
"withoutinterwiki-submit": "نمایش",
"fewestrevisions": "مقالههای دارای کمترین شمار ویرایش",
"wantedtemplates": "الگوهای مورد نیاز",
"mostlinked": "صفحههایی که بیشتر از همه به آنها پیوند داده شدهاست",
"mostlinkedcategories": "ردههایی که بیشتر از همه به آنها پیوند داده شدهاست",
- "mostlinkedtemplates": "ببشترین صفحههای تراگنجاندهشده",
+ "mostlinkedtemplates": "ببشترین صفحات تراگنجاندهشده",
"mostcategories": "صفحههای دارای بیشترین رده",
"mostimages": "پروندههایی که بیشتر از همه به آنها پیوند داده شدهاست",
"mostinterwikis": "صفحههای دارای بیشترین میانویکی",
"mostrevisions": "صفحههای دارای بیشترین نسخه",
- "prefixindex": "تمام صفحهها با پیشوند",
+ "prefixindex": "تمام صفحات با پیشوند",
"prefixindex-namespace": "همهٔ صفحههای دارای پیشوند (فضاینام $1)",
"prefixindex-strip": "حذف پیشوند در فهرست",
"shortpages": "صفحههای کوتاه",
"usercreated": "{{GENDER:$3|ایجادشده}} در تاریخ $1 در ساعت $2",
"newpages": "صفحههای تازه",
"newpages-username": "نام کاربری:",
- "ancientpages": "قدیمیترین صفحهها",
+ "ancientpages": "قدیمیترین صفحات",
"move": "انتقال",
"movethispage": "انتقال این صفحه",
"unusedimagestext": "پروندههای زیر موجودند اما در هیچ صفحهای به کار نرفتهاند.\nلطفاً توجه داشته باشید که دیگر وبگاهها ممکن است با یک نشانی اینترنتی مستقیم به یک پرونده پیوند دهند، و با وجود این که در استفادهٔ فعال هستند در این جا فهرست شوند.",
"alllogstext": "نمایش یکجای تمام سیاهههای موجود در {{SITENAME}}.\nمیتوانید با انتخاب نوع سیاهه، نام کاربری (حساس به کوچکی و بزرگی حروف) و صفحههای تغییریافته (حساس به بزرگی و کوچکی حروف)، نمایش را محدودتر سازید.",
"logempty": "مورد منطبق با منظور شما در سیاهه یافت نشد.",
"log-title-wildcard": "صفحههایی را جستجو کن که عنوانشان با این عبارت آغاز میشود",
- "showhideselectedlogentries": "تغÛ\8cÛ\8cر پدÛ\8cدارÛ\8c Ù\85Ù\88ارد اÙ\86تخابâ\80\8cشدÙ\87 در سÛ\8cاÙ\87Ù\87",
- "allpages": "همهٔ صفحهها",
+ "showhideselectedlogentries": "تغییر پدیداری موارد انتخابشده سیاهه",
+ "allpages": "همهٔ صفحات",
"nextpage": "صفحهٔ بعد ($1)",
"prevpage": "صفحهٔ قبلی ($1)",
- "allpagesfrom": "نمایش صفحهها با شروع از:",
- "allpagesto": "نمایش صفحهها با پایان در:",
- "allarticles": "همهٔ صفحهها",
- "allinnamespace": "همهٔ صفحهها (فضای نام $1)",
+ "allpagesfrom": "نمایش صفحات با شروع از:",
+ "allpagesto": "نمایش صفحات با پایان در:",
+ "allarticles": "همهٔ صفحات",
+ "allinnamespace": "همهٔ صفحات (فضای نام $1)",
"allpagessubmit": "برو",
"allpagesprefix": "نمایش صفحههای دارای پیشوند:",
- "allpagesbadtitle": "عنوان صفحهٔ دادهشده نامعتبر است یا اینکه دارای پیشوندی بینزبانی یا بینویکیای است. ممکن است نویسههایی بدارد که نمیتوان از آنها در عنوان صفحهها استفاده کرد.",
+ "allpagesbadtitle": "عنوان صفحهٔ دادهشده نامعتبر است یا اینکه دارای پیشوندی بینزبانی یا بینویکیای است. ممکن است نویسههایی بدارد که نمیتوان از آنها در عنوان صفحات استفاده کرد.",
"allpages-bad-ns": "{{SITENAME}} دارای فضای نام «$1» نیست.",
"allpages-hide-redirects": "پنهانکردن تغییرمسیرها",
"cachedspecial-viewing-cached-ttl": "شما در حال مشاهدهٔ نسخهای از این صفحه که در میانگیر قرار دارد هستید که ممکن است برای $1 قبل باشد.",
"cachedspecial-viewing-cached-ts": "شما در حال مشاهدهٔ نسخهای از این صفحه که در میانگیر قرار دارد هستید، و این نسخه ممکن است کاملاً واقعی نباشد.",
"cachedspecial-refresh-now": "مشاهده آخرین.",
"categories": "ردهها",
- "categoriespagetext": "{{PLURAL:$1|ردهٔ|ردههای}} زیر دارای صفحهها یا پروندههایی {{PLURAL:$1|است|هستند}}.\n[[Special:UnusedCategories|ردههای استفادهنشده]] در اینجا نمایش داده نشدهاند.\nهمچنین [[Special:WantedCategories|ردههای مورد نیاز]] را ببینید.",
+ "categoriespagetext": "{{PLURAL:$1|ردهٔ|ردههای}} زیر دارای صفحات یا پروندههایی {{PLURAL:$1|است|هستند}}.\n[[Special:UnusedCategories|ردههای استفادهنشده]] در اینجا نمایش داده نشدهاند.\nهمچنین [[Special:WantedCategories|ردههای مورد نیاز]] را ببینید.",
"categoriesfrom": "نمایش ردهها با شروع از:",
"special-categories-sort-count": "مرتب کردن بر اساس تعداد",
"special-categories-sort-abc": "مرتب کردن الفبایی",
"post-expand-template-inclusion-category-desc": "پس از گسترش همهٔ الگوها، حجم صفحه بزرگتر از <code>$wgMaxArticleSize</code> است بنابراین بعضی از الگو گسترش نیافتهاند.",
"post-expand-template-argument-category-desc": "پس از گسترش یک آرگومان الگو (چیزی بین آکولادهای سهتایی، مانند <code>{{{Foo}}}</code>) صفحه بزرگتر از <code>$wgMaxArticleSize</code> میشود.",
"expensive-parserfunction-category-desc": "توابع هزینهبر گران (مانند <code>#ifexist</code>) زیادی در صفجه استفاده شده است. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] را ببینید.",
- "broken-file-category-desc": "ردÙ\87 اÙ\81زÙ\88د Ù\85Û\8câ\80\8cØ´Ù\88د اگر صÙ\81ØÙ\87 شاÙ\85Ù\84 Û\8cÚ© Ù¾Û\8cÙ\88Ù\86د شکستÙ\87 باشد (Û\8cا Û\8cÚ© پبÙ\88Ù\86د بÙ\87 پرÙ\88Ù\86دÙ\87Ù\94 تÙ\88کارÛ\8c است Ú©Ù\87 Ù\88جÙ\88د Ù\86دارد)",
- "hidden-category-category-desc": "اÛ\8cÙ\86 Û\8cÚ© ردÙ\87Ù\94 <code><nowiki>__HIDDENCAT__</nowiki></code> درÙ\88Ù\86Ø´ است Ú©Ù\87 از Ù\86Ù\85اÛ\8cشش در جعبÙ\87Ù\94 Ù¾Û\8cÙ\88Ù\86دÙ\87اÛ\8c ردÙ\87 بÙ\87â\80\8cصÙ\88رت Ù¾Û\8cØ´â\80\8cÙ\81رض جلوگیری میکند.",
+ "broken-file-category-desc": "صÙ\81ØÙ\87 شاÙ\85Ù\84 Û\8cÚ© Ù¾Û\8cÙ\88Ù\86د پرÙ\88Ù\86دÙ\87 خراب است (Ù¾Û\8cÙ\88Ù\86دÛ\8c براÛ\8c جاسازÛ\8câ\80\8cکردÙ\86 Û\8cÚ© پرÙ\88Ù\86دÙ\87 Ù\87Ù\86گاÙ\85Û\8c Ú©Ù\87 Ø¢Ù\86 پرÙ\88Ù\86دÙ\87 Ù\88جÙ\88د Ù\86دارد).",
+ "hidden-category-category-desc": "ردÙ\87 در Ù\85ØتÙ\88اÛ\8c صÙ\81ØÙ\87â\80\8cاش شاÙ\85Ù\84 <code><nowiki>__HIDDENCAT__</nowiki></code> استØ\8c Ú©Ù\87 از بÙ\87 Ø·Ù\88ر Ù¾Û\8cØ´â\80\8cÙ\81رض Ù\86شاÙ\86â\80\8cدادÙ\86 جعبÙ\87 Ù¾Û\8cÙ\88Ù\86دÙ\87اÛ\8c ردÙ\87 در صÙ\81Øات جلوگیری میکند.",
"trackingcategories-nodesc": "توضیحی وجود ندارد.",
"trackingcategories-disabled": "رده غیرفعالشده است",
"mailnologin": "نشانیای از فرستنده موجود نیست",
"watching": "پیگیری...",
"unwatching": "توقف پیگیری...",
"watcherrortext": "ایرادی در هنگام عوض کردن تنظیمات فهرست پیگیرتان برای «$1» رخ داد.",
- "enotif_reset": "نشانگذاری همهٔ صفحهها بهعنوان بازدیدشده",
+ "enotif_reset": "نشانگذاری همهٔ صفحات بهعنوان بازدیدشده",
"enotif_impersonal_salutation": "کاربر {{SITENAME}}",
"enotif_subject_deleted": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} حذف شد.",
"enotif_subject_created": "{{SITENAME}} صفحهٔ $1 توسط {{gender:$2|$2}} ایجاد شده.",
"exbeforeblank": "محتوای صفحه قبل از خالیکردن این بود: «$1»",
"delete-confirm": "حذف «$1»",
"delete-legend": "حذف",
- "historywarning": "'''هشدار!''' صفحهای که قصد دارید حذف کنید تاریخچهای با حدود $1 {{PLURAL:$1|نسخه|نسخه}} دارد:",
+ "historywarning": "<strong>هشدار:</strong> صفحهای که در حال پاککردن آن هستید دارای یک تاریخچه همراه $1 {{PLURAL:$1|بازبینی|بازبینیها}} است:",
"confirmdeletetext": "شما در حال حذف کردن یک صفحه یا تصویر از پایگاه دادهها همراه با تمام تاریخچهٔ آن هستید.\nلطفاً این عمل را تأیید کنید و اطمینان حاصل کنید که عواقب این کار را میدانید و این عمل را مطابق با [[{{MediaWiki:Policy-url}}|سیاستها]] انجام میدهید.",
"actioncomplete": "عمل انجام شد",
"actionfailed": "عمل ناموفق بود",
"deletereasonotherlist": "دلیل دیگر",
"deletereason-dropdown": "*دلایل متداول حذف\n** هرزنگار\n** خرابکاری\n** نقض حق تکثیر\n** درخواست کاربر\n** تغییرمسیر شکسته",
"delete-edit-reasonlist": "ویرایش دلایل حذف",
- "delete-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nبه منظور جلوگیری از اختلال ناخواسته در {{SITENAME}} حذف این گونه صفحهها محدود شدهاست.",
+ "delete-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nبه منظور جلوگیری از اختلال ناخواسته در {{SITENAME}} حذف این گونه صفحات محدود شدهاست.",
"delete-warning-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nحذف آن ممکن است که عملکرد پایگاه دادهٔ {{SITENAME}} را مختل کند;\nبا احتیاط ادامه دهید.",
+ "deleteprotected": "شما نمیتوانید این صفحه را پاک کنید چون که از آن محافظت شدهاست.",
"deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحههای دیگری]] هستند که به صفحهای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیدهاند.",
"rollback": "واگردانی ویرایشها",
"rollback_short": "واگردانی",
"protect_expiry_old": "زمان سرآمدن در گذشتهاست.",
"protect-unchain-permissions": "باز کردن سایر گزینههای محافظت",
"protect-text": "شما میتوانید سطح محافظت صفحهٔ '''$1''' را ببینید و از اینجا آن را تغییر دهید.",
- "protect-locked-blocked": "شما در مدتی که دسترسیتان قطع است نمیتوانید سطح محافظت صفحهها را تغییر دهید.\nتنظیمات فعلی صفحهٔ '''$1''' از این قرار است:",
+ "protect-locked-blocked": "شما در مدتی که دسترسیتان قطع است نمیتوانید سطح محافظت صفحات را تغییر دهید.\nتنظیمات فعلی صفحهٔ '''$1''' از این قرار است:",
"protect-locked-dblock": "به دلیل قفل شدن پایگاه داده، امکان تغییر سطح محافظت صفحه وجود ندارد.\nتنظیمات فعلی صفحهٔ '''$1''' به این قرار است:",
"protect-locked-access": "حساب کاربری شما اجازهٔ تغییر سطح محافظت صفحه را ندارد.\nتنظیمات فعلی صفحهٔ '''$1''' به این قرار است:",
"protect-cascadeon": "این صفحه در حال حاضر محافظت شدهاست زیرا در {{PLURAL:$1|صفحهٔ|صفحههای}} زیر که گزینهٔ محافظت آبشاری {{PLURAL:$1|آن|آنها}} فعال است، گنجانده شده است.\nتغییراتی به سطح محافظت این صفحه به محافظت ابشاری تأثیر نخواهد گذاشت.",
"undelete-header": "برای دیدن صفحههای حذفشدهٔ اخیر [[Special:Log/delete|سیاههٔ حذف]] را ببینید.",
"undelete-search-title": "جستجوی صفحههای حذفشده",
"undelete-search-box": "جستجوی صفحههای حذفشده.",
- "undelete-search-prefix": "نمایش صفحهها با شروع از:",
+ "undelete-search-prefix": "نمایش صفحات با شروع از:",
"undelete-search-submit": "برو",
"undelete-no-results": "هیچ صفحهٔ منطبقی در بایگانی حذفشدهها یافت نشد.",
"undelete-filename-mismatch": "امکان احیای نسخهٔ $1 وجود ندارد: نام پرونده مطابقت نمیکند.",
"autoblockid": "شناسه قطع دسترسی خودکار #$1",
"block": "بستن کاربر",
"unblock": "بازکردن کاربر",
- "blockip": "بستن کاربر",
+ "blockip": "مسدودکردن {{GENDER:$1|کاربر}}",
"blockip-legend": "بستن کاربر",
"blockiptext": "از فرم زیر برای بستن دسترسی ویرایش یک نشانی آیپی یا نام کاربری مشخص استفاده کنید.\nاین کار فقط فقط باید برای جلوگیری از خرابکاری و بر اساس [[{{MediaWiki:Policy-url}}|سیاست قطع دسترسی]] انجام شود.\nدلیل مشخص این کار را در زیر ذکر کنید (مثلاً با ذکر صفحههای بهخصوصی که مورد خرابکاری واقع شدهاند).",
"ipaddressorusername": "نشانی آیپی یا نام کاربری:",
"ipbexpiry": "زمان سرآمدن:",
"ipbreason": "دلیل:",
- "ipbreason-dropdown": "*دلایل متداول قطع دسترسی\n**واردکردن اطلاعات نادرست\n**پاککردن اطلاعات مفید از صفحهها\n**هرزنگاری از طریق درج مکرر پیوند به وبگاهها\n**درج چرندیات یا نوشتههای بیمعنا در صفحهها\n**تهدید یا ارعاب دیگر کاربران\n**سوء استفاده از چند حساب کاربری\n**نام کاربری نامناسب",
+ "ipbreason-dropdown": "*دلایل متداول قطع دسترسی\n**واردکردن اطلاعات نادرست\n**پاککردن اطلاعات مفید از صفحات\n**هرزنگاری از طریق درج مکرر پیوند به وبگاهها\n**درج چرندیات یا نوشتههای بیمعنا در صفحات\n**تهدید یا ارعاب دیگر کاربران\n**سوء استفاده از چند حساب کاربری\n**نام کاربری نامناسب",
"ipb-hardblock": "جلوگیری از ویرایش کردن کاربران ثبت نام کرده از طریق این نشانی آیپی",
"ipbcreateaccount": "جلوگیری از ایجاد حساب",
"ipbemailban": "جلوگیری از ارسال رایانامه",
"ipbnounblockself": "شما مجاز به باز کردن دسترسی خود نیستید.",
"lockdb": "قفل کردن پایگاه داده",
"unlockdb": "از قفل در آوردن پایگاه داده",
- "lockdbtext": "قفل کردن پایگاه داده امکان ویرایش صفحهها، تغییر تنظیمات، ویرایش پیگیریها، و سایر تغییراتی را که نیازمند تغییری در پایگاه داده است، از همهٔ کاربران سلب میکند.\nلطفاً تأیید کنید که همین کار را میخواهید انجام دهید، و در اولین فرصت پایگاه داده را از حالت قفل شده خارج خواهید کرد.",
- "unlockdbtext": "از قفل در آوردن پایگاه داده به تمامی کاربران اجازه میدهد که توانایی ویرایش صفحهها، تغییر تنظیمات، تغییر پیگیریها و هر تغییر دیگری که نیازمند تغییر در پایگاه داده باشد را دوباره به دست بیاورند.\nلطفاً تأیید کنید که همین کار را میخواهید انجام دهید.",
+ "lockdbtext": "قفل کردن پایگاه داده امکان ویرایش صفحات، تغییر تنظیمات، ویرایش پیگیریها، و سایر تغییراتی را که نیازمند تغییری در پایگاه داده است، از همهٔ کاربران سلب میکند.\nلطفاً تأیید کنید که همین کار را میخواهید انجام دهید، و در اولین فرصت پایگاه داده را از حالت قفل شده خارج خواهید کرد.",
+ "unlockdbtext": "از قفل در آوردن پایگاه داده به تمامی کاربران اجازه میدهد که توانایی ویرایش صفحات، تغییر تنظیمات، تغییر پیگیریها و هر تغییر دیگری که نیازمند تغییر در پایگاه داده باشد را دوباره به دست بیاورند.\nلطفاً تأیید کنید که همین کار را میخواهید انجام دهید.",
"lockconfirm": "بله، من جداً میخواهم پایگاه داده را قفل کنم.",
"unlockconfirm": "بله، من جداً میخواهم پایگاه داده را از قفل در آورم.",
"lockbtn": "قفل کردن پایگاه داده",
"lockedbyandtime": "(به وسیلهٔ $1 در $2 ساعت $3)",
"move-page": "انتقال $1",
"move-page-legend": "انتقال صفحه",
- "movepagetext": "با استفاده از فرم زیر نام صفحه تغییر خواهد کرد، و تمام تاریخچهاش به نام جدید منتقل خواهد شد.\nعنوان قدیمی تبدیل به یک صفحهٔ تغییرمسیر به عنوان جدید خواهد شد.\nشما میتوانید تغییرمسیرهایی که به عنوان اصلی اشاره دارند را به صورت خودکار بهروزرسانی کنید.\nپیوندهای که به عنوان صفحهٔ قدیمی وجود دارند، تغییر نخواهند کرد؛ حتماً تغییرمسیرهای [[Special:DoubleRedirects|دوتایی]] یا [[Special:BrokenRedirects|خراب]] را بررسی کنید.\n'''شما''' مسئول اطمینان از این هستید که پیوندها هنوز به همانجایی که قرار است بروند.\n\nتوجه کنید که اگر از قبل صفحهای در عنوان جدید وجود داشته باشد صفحه منتقل '''نخواهد شد'''،\nمگر این آخرین ویرایش تغییرمسیر باشد و در تاریخچهٔ ویرایشی نداشته باشد.\nاین یعنی اگر اشتباه کردید میتوانید صفحه را به همان جایی که از آن منتقل شده بود برگردانید، و این که نمیتوانید روی صفحهها موجود بنویسید.\n\n'''هشدار!'''\nانتقال صفحهها به نام جدید ممکن است تغییر اساسی و غیرمنتظرهای برای صفحههای محبوب باشد؛\nلطفاً مطمئن شوید که قبل از انتقال دادن صفحه، عواقب این کار را درک میکنید.",
+ "movepagetext": "با استفاده از فرم زیر نام صفحه تغییر خواهد کرد، و تمام تاریخچهاش به نام جدید منتقل خواهد شد.\nعنوان قدیمی تبدیل به یک صفحهٔ تغییرمسیر به عنوان جدید خواهد شد.\nشما میتوانید تغییرمسیرهایی که به عنوان اصلی اشاره دارند را به صورت خودکار بهروزرسانی کنید.\nپیوندهای که به عنوان صفحهٔ قدیمی وجود دارند، تغییر نخواهند کرد؛ حتماً تغییرمسیرهای [[Special:DoubleRedirects|دوتایی]] یا [[Special:BrokenRedirects|خراب]] را بررسی کنید.\n'''شما''' مسئول اطمینان از این هستید که پیوندها هنوز به همانجایی که قرار است بروند.\n\nتوجه کنید که اگر از قبل صفحهای در عنوان جدید وجود داشته باشد صفحه منتقل '''نخواهد شد'''،\nمگر این آخرین ویرایش تغییرمسیر باشد و در تاریخچهٔ ویرایشی نداشته باشد.\nاین یعنی اگر اشتباه کردید میتوانید صفحه را به همان جایی که از آن منتقل شده بود برگردانید، و این که نمیتوانید روی صفحات موجود بنویسید.\n\n'''هشدار!'''\nانتقال صفحات به نام جدید ممکن است تغییر اساسی و غیرمنتظرهای برای صفحات محبوب باشد؛\nلطفاً مطمئن شوید که قبل از انتقال دادن صفحه، عواقب این کار را درک میکنید.",
"movepagetext-noredirectfixer": "استفاده از فرم زیر سبب تغییر نام یک صفحه و انتقال تمام تاریخچهٔ آن به نام جدید میشود.\nعنوان پیشین تغییرمسیری به عنوان جدید خواهد شد.\nبه خاطر داشته باشید که [[Special:DoubleRedirects|تغییرمسیرهای دوتایی]] یا [[Special:BrokenRedirects|تغییرمسیرهای خراب]] را بررسی کنید.\nشما مسئولید که مطمئن شوید پیوندها به جایی اشاره میکنند که قرار است بروند.\n\nتوجه کنید که اگر صفحهای تحت عنوان جدید از قبل موجود باشد، انتقال انجام '''نخواهد شد'''، مگر اینکه صفحه خالی و یا تغییرمسیر باشد و تاریخچهٔ ویرایشی دیگری نداشته باشد.\nاین یعنی اگر صفحه را به نامی اشتباه منتقل کردید میتوانید این تغییر را واگردانی کنید، اما نمیتوانید به صفحهای که از قبل موجود است انتقال دهید.\n\n'''هشدار!'''\nانتقال صفحههای پربیننده ممکن است عملی غیرمنتظره باشد؛\nلطفاً پیش از انتقال مطمئن شوید از نتیجهٔ کار آگاهید.",
"movepagetalktext": "صفحهٔ بحث مربوط، اگر وجود داشته باشد، بطور خودکار همراه با مقالهٔ اصلی منتقل خواهد شد '''مگر اینکه''' :\n* در حال انتقال صفحه از این فضای نام به فضای نام دیگری باشید،\n* یک صفحهٔ بحث غیرخالی تحت این نام جدید وجود داشته باشد، یا\n* جعبهٔ زیر را تیک نزده باشید.\n\nدر این حالات، باید صفحه را بطور دستی انتقال داده و یا محتویات دو صفحه را با ویرایش ادغام کنید.",
"movearticle": "انتقال صفحه:",
"moveuserpage-warning": "'''هشدار:''' شما در حال انتقال دادن یک صفحهٔ کاربر هستید. توجه داشته باشید که تنها صفحه منتقل میشود و نام کاربر تغییر '''نمییابد'''.",
"movecategorypage-warning": "<strong>هشدار:</strong> شما در حال انتقال صفحه رده هستید. لطفاً توجه داشته باشید که فقط صفحه منتقل خواهد شد و صفحات در رده قدیمی میمانند و به رده جدید <em>نمیروند</em>.",
- "movenologintext": "برای انتقال صفحهها باید کاربر ثبتشده بوده و [[Special:UserLogin|به سامانه وارد شوید]].",
- "movenotallowed": "شما اجازهٔ انتقال دادن صفحهها را ندارید.",
+ "movenologintext": "برای انتقال صفحات باید کاربر ثبتشده بوده و [[Special:UserLogin|به سامانه وارد شوید]].",
+ "movenotallowed": "شما اجازهٔ انتقال دادن صفحات را ندارید.",
"movenotallowedfile": "شما اجازهٔ انتقال پروندهها را ندارید.",
"cant-move-user-page": "شما اجازه ندارید صفحههای کاربری سرشاخه را انتقال دهید.",
"cant-move-to-user-page": "شما اجازه ندارید که یک صفحه را به یک صفحهٔ کاربر انتقال دهید (به استثنای زیر صفحههای کاربری).",
"cant-move-category-page": "شما اجازهٔ انتقال دادن صفحهٔ ردهها را ندارید.",
"cant-move-to-category-page": "شما مجوز برای انتقال صفحه به صفحه رده ندارید.",
- "newtitle": "بهعنوان جدید",
+ "newtitle": "به عنوان تازه:",
"move-watch": "پیگیری صفحههای مبدأ و مقصد",
"movepagebtn": "صفحه منتقل شود",
"pagemovedsub": "انتقال با موفقیت انجام شد",
"movepage-page-unmoved": "صفحهٔ $1 را نمیتوان به $2 انتقال داد.",
"movepage-max-pages": "حداکثر تعداد صفحههای ممکن ($1 {{PLURAL:$1|صفحه|صفحه}}) که میتوان انتقال داد منتقل شدند و صفحههای دیگر را نمیتوان به طور خودکار منتقل کرد.",
"movelogpage": "سیاههٔ انتقال",
- "movelogpagetext": "در زیر فهرستی از انتقال صفحهها آمده است.",
+ "movelogpagetext": "در زیر فهرستی از انتقال صفحات آمدهاست.",
"movesubpage": "{{PLURAL:$1|زیرصفحه|زیرصفحهها}}",
"movesubpagetext": "این صفحه $1 زیرصفحه دارد که در زیر نمایش {{PLURAL:$1|یافتهاست|یافتهاند}}.",
"movenosubpage": "این صفحه هیچ زیرصفحهای ندارد.",
"bad-target-model": "مقصد مورد نظر از مدل محتوایی متفاوتی استفاده میکند. تبدیل $1 به $2 ممکن نیست.",
"imagenocrossnamespace": "امکان انتقال تصویر به فضای نام غیر پرونده وجود ندارد",
"nonfile-cannot-move-to-file": "امکان انتقال محتوای غیر پرونده به فضای نام پرونده وجود ندارد",
- "imagetypemismatch": "پسÙ\88Ù\86د پرÙ\88Ù\86دÙ\87 جدÛ\8cد با نوع آن سازگار نیست",
+ "imagetypemismatch": "پسÙ\88Ù\86د پرÙ\88Ù\86دÙ\87 تازÙ\87 با نوع آن سازگار نیست",
"imageinvalidfilename": "نام پروندهٔ هدف نامجاز است",
"fix-double-redirects": "به روز کردن تمامی تغییرمسیرهایی که به مقالهٔ اصلی اشاره میکنند",
"move-leave-redirect": "بر جا گذاشتن یک تغییرمسیر",
"semiprotectedpagemovewarning": "'''تذکر:''' این صفحه قفل شدهاست به طوری که تنها کاربران ثبت نام کرده میتوانند آن را انتقال دهند.\nآخرین موارد سیاهه در زیر آمده است:",
"move-over-sharedrepo": "== پرونده موجود است ==\n[[:$1]] در یک مخزن مشترک وجود دارد. انتقال یک پرونده به این نام باعث باطل شدن پرونده مشترک خواهد شد.",
"file-exists-sharedrepo": "نام پرونده انتخاب شده از قبل در یک مخزن مشترک استفاده شدهاست.\nلطفاً یک نام دیگر برگزینید.",
- "export": "برونبری صفحهها",
- "exporttext": "شما میتوانید متن و تاریخچهٔ ویرایش یک صفحهٔ مشخص یا مجموعهای از صفحهها را به شکل پوشیده در اکسامال برونبری کنید.\nاین اطلاعات را میتوان در ویکی دیگری که نرمافزار «مدیاویکی» را اجرا میکند از طریق [[Special:Import|صفحهٔ درونریزی]] وارد کرد.\n\nبرای برونبری صفحهها، عنوان آنها را در جعبهٔ زیر وارد کنید (در هر سطر فقط یک عنوان) و مشخص کنید که آیا نسخهٔ اخیر صفحه را به همراه نسخههای قدیمیتر و تاریخچهٔ صفحه میخواهید، یا تنها نسخهٔ اخیر صفحه و اطلاعات آخرین ویرایش را میخواهید.\n\nدر حالت دوم، شما میتوانید از یک پیوند استفاده کنید، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] برای صفحهٔ «[[{{MediaWiki:Mainpage}}]]».",
- "exportall": "برونبری همهٔ صفحهها",
+ "export": "برونبری صفحات",
+ "exporttext": "شما میتوانید متن و تاریخچهٔ ویرایش یک صفحهٔ مشخص یا مجموعهای از صفحات را به شکل پوشیده در اکسامال برونبری کنید.\nاین اطلاعات را میتوان در ویکی دیگری که نرمافزار «مدیاویکی» را اجرا میکند از طریق [[Special:Import|صفحهٔ درونریزی]] وارد کرد.\n\nبرای برونبری صفحات، عنوان آنها را در جعبهٔ زیر وارد کنید (در هر سطر فقط یک عنوان) و مشخص کنید که آیا نسخهٔ اخیر صفحه را به همراه نسخههای قدیمیتر و تاریخچهٔ صفحه میخواهید، یا تنها نسخهٔ اخیر صفحه و اطلاعات آخرین ویرایش را میخواهید.\n\nدر حالت دوم، شما میتوانید از یک پیوند استفاده کنید، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] برای صفحهٔ «[[{{MediaWiki:Mainpage}}]]».",
+ "exportall": "برونبری همهٔ صفحات",
"exportcuronly": "فقط نسخهٔ فعلی شامل شود، نه کل تاریخچه",
- "exportnohistory": "----\n'''توجه:''' امکان برونبری تاریخچهٔ کامل صفحهها از طریق این صفحه به دلایل اجرایی از کار انداخته شدهاست.",
+ "exportnohistory": "----\n'''توجه:''' امکان برونبری تاریخچهٔ کامل صفحات از طریق این صفحه به دلایل اجرایی از کار انداخته شدهاست.",
"exportlistauthors": "شامل فهرست کامل مشارکتکنندگان هر صفحه",
"export-submit": "برونبری",
- "export-addcattext": "افزودن صفحهها از رده:",
+ "export-addcattext": "افزودن صفحات از رده:",
"export-addcat": "افزودن",
- "export-addnstext": "افزودن صفحهها از فضای نام:",
+ "export-addnstext": "افزودن صفحات از فضای نام:",
"export-addns": "افزودن",
"export-download": "ذخیره به صورت پرونده",
"export-templates": "شامل شدن الگوها",
"thumbnail_gd-library": "تنظیمات ناقص کتابخانهٔ GD: عملکرد $1 وجود ندارد",
"thumbnail_image-missing": "پرونده به نظر گم شدهاست: $1",
"thumbnail_image-failure-limit": "تلاشهای ناموفق اخیر بسیاری ($1 یا بیشتر) برای ارائهٔ این تصویر کوچک وجود داشته است. لطفأ بعداً دوباره تلاش کنید.",
- "import": "درونریزی صفحهها",
+ "import": "درونریزی صفحات",
"importinterwiki": "درونریزی تراویکی",
- "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درونریزی شود.\nتاریخ نسخهها و نام ویرایشکنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درونریزی صفحهها در [[Special:Log/import|سیاههٔ درونریزیها]] درج خواهد شد.",
+ "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درونریزی شود.\nتاریخ نسخهها و نام ویرایشکنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درونریزی صفحات در [[Special:Log/import|سیاههٔ درونریزیها]] درج خواهد شد.",
"import-interwiki-sourcewiki": "ویکی منبع:",
+ "import-interwiki-sourcepage": "صفحهٔ مبدأ:",
"import-interwiki-history": "تمام نسخههای تاریخچهٔ این صفحه انتقال داده شود",
"import-interwiki-templates": "تمام الگوها را شامل شود",
"import-interwiki-submit": "درونریزی شود",
"import-upload-filename": "نام پرونده:",
"import-comment": "توضیح:",
"importtext": "لطفاً پرونده را از ویکی منبع با کمک [[Special:Export|ابزار برونبری]] دریافت کنید.\nسپس آن را روی دستگاهتان ذخیره کنید و اینجا بارگذاری نمایید.",
- "importstart": "در حال درونریزی صفحهها...",
+ "importstart": "در حال درونریزی صفحات...",
"import-revision-count": "$1 {{PLURAL:$1|ویرایش|ویرایش}}",
"importnopages": "صفحهای برای درونریزی نیست.",
"imported-log-entries": "$1 {{PLURAL:$1|مورد سیاهه|مورد سیاهه}} درون ریزی شد.",
- "importfailed": "درونریزی صفحهها شکست خورد: <nowiki>$1</nowiki>",
+ "importfailed": "درونریزی صفحات شکست خورد: <nowiki>$1</nowiki>",
"importunknownsource": "نوع مأخذ درونریزی معلوم نیست",
- "importcantopen": "پروندهٔ درونریزی صفحهها باز نشد",
+ "importcantopen": "پروندهٔ درونریزی صفحات باز نشد",
"importbadinterwiki": "پیوند میانویکی نادرست",
"importsuccess": "درونریزی با موفقیت انجام شد!",
"importnosources": "هیچ منبعی برای درونریزی اطلاعات از ویکی دیگر تعریف نشدهاست.",
"import-rootpage-invalid": "با توجه به ریشه صفحه عنوان نامعتبر است.",
"import-rootpage-nosubpage": "فضای نام \"$1\" صفحهٔ مبنا اجازهٔ زیرصفحه نمیدهد.",
"importlogpage": "سیاههٔ درونریزیها",
- "importlogpagetext": "درونریزی صفحهها به همراه تاریخچهٔ ویرایش آنها از ویکیهای دیگر.",
+ "importlogpagetext": "درونریزی صفحات به همراه تاریخچهٔ ویرایش آنها از ویکیهای دیگر.",
"import-logentry-upload": "[[$1]] را از طریق بارگذاری پرونده درونریزی کرد",
"import-logentry-upload-detail": "$1 {{PLURAL:$1|نسخه|نسخه}} واردشده",
"import-logentry-interwiki": "$1 را تراویکی کرد",
"tooltip-ca-unwatch": "حذف این صفحه از فهرست پیگیریهایتان",
"tooltip-search": "جستجو در {{SITENAME}}",
"tooltip-search-go": "در صورت امکان به صفحهای با همین نام برو",
- "tooltip-search-fulltext": "جستجوی این عبارت در صفحهها",
+ "tooltip-search-fulltext": "جستجوی این عبارت در صفحات",
"tooltip-p-logo": "مشاهدهٔ صفحهٔ اصلی",
"tooltip-n-mainpage": "مشاهدهٔ صفحهٔ اصلی",
"tooltip-n-mainpage-description": "مشاهدهٔ صفحهٔ اصلی",
"creditspage": "اعتبارات این صفحه",
"nocredits": "اطلاعات سازندگان این صفحه موجود نیست.",
"spamprotectiontitle": "پالایهٔ هرزنگاریها",
- "spamprotectiontext": "از ذخÛ\8cرÙ\87 کردÙ\86 صÙ\81ØÙ\87 تÙ\88سط پاÙ\84اÛ\8cÙ\87Ù\94 Ù\87رزÙ\86گارÛ\8câ\80\8cÙ\87ا جÙ\84Ù\88Ú¯Û\8cرÛ\8c شد.\nÙ\85عÙ\85Ù\88Ù\84اÙ\8b اÛ\8cÙ\86 اتÙ\81اÙ\82 زÙ\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 جدÛ\8cد صفحه، حاوی پیوندی به یک نشانی وب باشد که در فهرست سیاه قرار دارد.",
+ "spamprotectiontext": "از ذخÛ\8cرÙ\87 کردÙ\86 صÙ\81ØÙ\87 تÙ\88سط پاÙ\84اÛ\8cÙ\87Ù\94 Ù\87رزÙ\86گارÛ\8câ\80\8cÙ\87ا جÙ\84Ù\88Ú¯Û\8cرÛ\8c شد.\nÙ\85عÙ\85Ù\88Ù\84اÙ\8b اÛ\8cÙ\86 اتÙ\81اÙ\82 زÙ\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 تازÙ\87 صفحه، حاوی پیوندی به یک نشانی وب باشد که در فهرست سیاه قرار دارد.",
"spamprotectionmatch": "متن زیر چیزیاست که پالایهٔ هرزهنگاری ما را به کارانداخت: $1",
"spambot_username": "هرزهتمیزکارِ مدیاویکی",
"spam_reverting": "واگردانی به آخرین نسخهای که پیوندی به $1 ندارد.",
"pageinfo-protect-cascading-yes": "بله",
"pageinfo-protect-cascading-from": "محافظت آبشاری از",
"pageinfo-category-info": "اطلاعات رده",
- "pageinfo-category-pages": "تعداد صفحهها",
+ "pageinfo-category-pages": "تعداد صفحات",
"pageinfo-category-subcats": "تعداد زیرردهها",
"pageinfo-category-files": "تعداد پروندهها",
"markaspatrolleddiff": "برچسب گشت بزن",
"autosumm-blank": "صفحه را خالی کرد",
"autosumm-replace": "جایگزینی صفحه با '$1'",
"autoredircomment": "تغییرمسیر به [[$1]]",
- "autosumm-new": "صÙ\81ØÙ\87â\80\8cاÛ\8c جدÛ\8cد حاوی «$1» ایجاد کرد",
+ "autosumm-new": "صÙ\81ØÙ\87â\80\8cاÛ\8c تازÙ\87 حاوی «$1» ایجاد کرد",
"autosumm-newblank": "ایجاد صفحه خالی",
"size-bytes": "$1 بایت",
"size-kilobytes": "$1 کیلوبایت",
"specialpages-group-media": "گزارش بارگذاری رسانهها",
"specialpages-group-users": "کاربرها و دسترسیها",
"specialpages-group-highuse": "صفحههای پربازدید",
- "specialpages-group-pages": "فهرستهای صفحهها",
- "specialpages-group-pagetools": "ابزارهای صفحهها",
+ "specialpages-group-pages": "فهرستهای صفحات",
+ "specialpages-group-pagetools": "ابزارهای صفحات",
"specialpages-group-wiki": "داده و ابزارها",
"specialpages-group-redirects": "صفحههای ویژهٔ تغییرمسیر دهنده",
"specialpages-group-spam": "ابزارهای هرزنگاری",
"tags-active-no": "خیر",
"tags-edit": "ویرایش",
"tags-hitcount": "$1 {{PLURAL:$1|تغییر|تغییر}}",
- "comparepages": "مقایسهٔ صفحهها",
+ "comparepages": "مقایسهٔ صفحات",
"compare-page1": "صفحهٔ ۱",
"compare-page2": "صفحهٔ ۲",
"compare-rev1": "نسخهٔ ۱",
"logentry-rights-rights-legacy": "$1 گروه عضویت $3 را {{GENDER:$2|تغییر داد}}",
"logentry-rights-autopromote": "$1 به طور خودکار از $4 به $5 {{GENDER:$2|ارتقاء داد}}",
"logentry-upload-upload": "$1 {{GENDER:$2|بارگذاری کرد}} $3",
- "logentry-upload-overwrite": "$1 Û\8cÚ© Ù\86سخÙ\87Ù\94 جدÛ\8cد {{GENDER:$2|بارگذاریکرد}} $3",
+ "logentry-upload-overwrite": "$1 Û\8cÚ© Ù\86سخÙ\87Ù\94 تازÙ\87 {{GENDER:$2|بارگذاریکرد}} $3",
"logentry-upload-revert": "$1 {{GENDER:$2|بارگذاری کرد}} $3",
"rightsnone": "(هیچ)",
"feedback-bugornote": "اگر آمادهاید تا مشکلی فنی را با جزئیاتش شرح دهید لطفاً [$1 یک ایراد گزارش دهید]. در غیر این صورت میتوانید از فرم سادهٔ زیر استفاده کنید. نظر شما به همراه نام کاربری و مرورگرتان به صفحهٔ «[$3 $2]» افزوده خواهد شد.",
"feedback-thanks": "سپاس! بازخورد شما در صفحهٔ «[$1 $2]» ثبت شد.",
"feedback-close": "انجام شد",
"feedback-bugcheck": "عالیاست! فقط بررسی کنید که از [$1 ایرادهای شناختهشده] نباشد.",
- "feedback-bugnew": "بررسÛ\8c کردÙ\85. اÛ\8cرادÛ\8c جدÛ\8cد را گزارش بده",
+ "feedback-bugnew": "بررسÛ\8c کردÙ\85. اÛ\8cرادÛ\8c تازÙ\87 را گزارش بده",
"searchsuggest-search": "جستجو",
"searchsuggest-containing": "صفحههای دربردارنده...",
"api-error-badaccess-groups": "شما اجازهٔ بارگذاری پروندهها را در این ویکی ندارید.",
"duration-millennia": "{{PLURAL:$1|هزار سال |$1 هزار سال}}",
"rotate-comment": "تصویر به دست $1 {{PLURAL:$1|درجهٔ|درجهٔ}} ساعتگرد چرخانده شد",
"limitreport-title": "دادههای رخنمانگاری تجزیهکننده:",
- "limitreport-cputime": "زمان مصرف سیپییو",
+ "limitreport-cputime": "زمان مصرفی سیپییو",
"limitreport-cputime-value": "$1 {{PLURAL:$1|ثانیه}}",
- "limitreport-walltime": "استÙ\81ادÙ\87 زÙ\85اÙ\86 واقعی",
+ "limitreport-walltime": "زÙ\85اÙ\86 Ù\85صرÙ\81Û\8c واقعی",
"limitreport-walltime-value": "$1 {{PLURAL:$1|ثانیه|ثانیه}}",
- "limitreport-ppvisitednodes": "شمارش گرهٔ پیشپردازنده مشاهدهشده",
- "limitreport-ppgeneratednodes": "شمارش گره پیشپردازنده تولیدشده",
- "limitreport-postexpandincludesize": "شاÙ\85Ù\84 اÙ\86دازÙ\87 پس گسترش",
+ "limitreport-ppvisitednodes": "شمارندهٔ گره بازدیدشدهٔ پیشپردازنده",
+ "limitreport-ppgeneratednodes": "شمارندهٔ گره تولیدی پیشپردازنده",
+ "limitreport-postexpandincludesize": "اÙ\86دازÙ\87Ù\94 دربرگÛ\8cرÙ\86دÙ\87 پس از گسترش",
"limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|بایت|بایت}}",
- "limitreport-templateargumentsize": "اÙ\86دازÙ\87 عÙ\85Ù\84گر الگو",
+ "limitreport-templateargumentsize": "اÙ\86دازÙ\87 آرگÙ\88Ù\85اÙ\86 الگو",
"limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|بایت|بایت}}",
"limitreport-expansiondepth": "بیشترین عمق گسترش",
"limitreport-expensivefunctioncount": "تعداد تابع تجزیهگر پرمصرف",
"log-name-pagelang": "تغییر سیاههٔ زبان",
"log-description-pagelang": "این سیاههٔ تغییرات صفحهٔ زبانها است.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2| تغییریافت}} زبان صفحه برای $3 از $4 به $5 .",
+ "default-skin-not-found": "اوه! پوسته پیشفرض برای ویکی شما (<code>$wgDefaultSkin</code>)، <code>$1</code>، در دسترس نیست.\n\nبه نظر میآید نصب شما شامل پوستههای زیر میشود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعالساختن آنها و انتخاب پیشفرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کردهاید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده میکند نصب کردید. انتظار میرود. چند پوسته از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما میتوانید شاخه <code>skins/</code> را از آن نسخهبرداری کرده و بچسبانید.\n\n:* همسانهسازی یکی از مخازن <code>mediawiki/skins/*</code> از طریق گیت به داخل شاخه <code>skins/</code> از نصب مدیاویکیتان.\n: انجام این کار با مخزن گیتتان تداخل نمیکند اگر توسعهدهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازهتر دیگر به طور خودکار پوستههای نصبشده را فعال نمیکند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما میتوانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا همه پوستههای نصبشده جاری را فعال کنید:\n\n<pre>$3</pre>\n\n; اگر اخیراً <code>LocalSettings.php</code> را تغییر دادید:\n: نام پوستهها را برای غلط املایی دوباره بررسی کنید.",
+ "default-skin-not-found-no-skins": "پوستهٔ پیشفرض برای ویکی شما (<code>$wgDefaultSkin</code>)، <code>$1</code> هست موجود نیست.\n\nشما پوستهها را نصب نکردهاید.\n\n:اگر مدیاویکی را بهروز یا نصب کردهاید:\n:ممکن است از گیت یا از کند منبع با روش های دیگر نصب کردهاید. انتظار میرود MediaWiki 1.24 یا جدیدتر در پوشهٔ اصلی هیچ پوستهای نداشته باشند.\nسعی کنید تعدادی پوسته از [https://www.mediawiki.org/wiki/Category:All_skins پوشهٔ پوستههای مدیاویکی]، با:\n:*دانلود کردن [https://www.mediawiki.org/wiki/Download نصبکننده تاربال]، که با چندین پوسته و افزونه هست. شما می توانید پوستهٔ <code>skins/</code> را از آن کپی و پیست کنید.\n:*کلون کردن یکی از <code>mediawiki/skins/*</code> از ریپوزیتوری در پوشهٔ <code>skins/</code> مدیاویکیتان.\n:اگر توسعهدهندهٔ مدیاویکی هستید، انجام این کار نباید تعارضی با ریپوزیتوری گیت شما داشته باشد. برای اطلاعات بیشتر و فعال کردن پوستهها و انتخاب آنها به عنوان پیشفرض [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: تنظیمات پوسته] را مشاهده کنید.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (فعال)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''غیر فعال''')"
}
"userlogin-resetlink": "Unohditko salasanasi?",
"userlogin-resetpassword-link": "Unohditko salasanasi?",
"userlogin-helplink2": "Apua sisäänkirjautumiseen",
- "userlogin-loggedin": "Olet jo kirjautunut sisään tunnuksella {{GENDER:$1|$1}}.\nKäytä alla olevaa lomaketta kirjautuaksesi sisään toisena käyttäjänä.",
- "userlogin-createanother": "Luo toinen käyttäjätunnus",
"createacct-emailrequired": "Sähköpostiosoite",
"createacct-emailoptional": "Sähköpostiosoite (vapaaehtoinen)",
"createacct-email-ph": "Anna sähköpostiosoitteesi",
"mergehistory-same-destination": "Lähde- ja kohdesivut eivät voi olla samat",
"mergehistory-reason": "Syy:",
"mergelog": "Yhdistämisloki",
- "pagemerge-logentry": "yhdisti kohteen [[$1]] kohteeseen [[$2]] (muokkaukseen $3 saakka)",
+ "pagemerge-logentry": "yhdisti kohteen [[$1]] kohteeseen [[$2]] (versiot $3 saakka)",
"revertmerge": "Peru yhdistäminen",
"mergelogpagetext": "Alla on loki viimeisimmistä muutoshistorioiden yhdistämisistä.",
"history-title": "Sivun ”$1” muutoshistoria",
"recentchangeslinked-toolbox": "Linkitettyjen sivujen muutokset",
"recentchangeslinked-title": "Sivulta $1 linkitettyjen sivujen muutokset",
"recentchangeslinked-summary": "Tämä on luettelo muutoksista, jotka on viimeksi tehty niihin sivuihin, joihin johtaa linkki tietystä sivusta (tai jonkun määrätyn luokan sisältämistä sivuista). Omalla [[Special:Watchlist|tarkkailulistallasi]] olevat sivut on <strong>lihavoitu</strong>.",
- "recentchangeslinked-page": "Sivu",
+ "recentchangeslinked-page": "Sivun nimi:",
"recentchangeslinked-to": "Näytä sen sijaan muutokset sivuihin, joista on linkki tähän sivuun",
"upload": "Tallenna tiedosto",
"uploadbtn": "Tallenna tiedosto",
"unusedimagestext": "Seuraavat tiedostot ovat olemassa, mutta niitä ei käytetä millään sivulla.\nHuomaa, että muut verkkosivut saattavat viitata tiedostoon suoran URL:n avulla, jolloin tiedosto saattaa olla tässä listassa, vaikka sitä käytetäänkin.",
"unusedcategoriestext": "Nämä luokat ovat olemassa, mutta niitä ei käytetä.",
"notargettitle": "Ei kohdetta",
- "notargettext": "Et ole määritellyt kohdesivua tai -käyttäjää johon toiminto kohdistuu.",
+ "notargettext": "Et ole määritellyt kohteeksi sivua tai käyttäjää, johon toiminto suoritetaan.",
"nopagetitle": "Kohdesivua ei ole olemassa.",
"nopagetext": "Määritettyä kohdesivua ei ole olemassa.",
"pager-newer-n": "← {{PLURAL:$1|1 uudempi|$1 uudempaa}}",
"dellogpagetext": "Alla on loki viimeisimmistä poistoista.",
"deletionlog": "poistoloki",
"reverted": "Palautettu aikaisempaan versioon",
- "deletecomment": "Syy",
+ "deletecomment": "Syy:",
"deleteotherreason": "Muu syy tai tarkennus",
"deletereasonotherlist": "Muu syy",
"deletereason-dropdown": "* Yleiset poistosyyt\n** Spam tai mainossivu\n** Vandalismi\n** Tekijänoikeusrikkomus\n** Sivun tekijän pyyntö\n** Virheellinen ohjaus",
"sp-contributions-submit": "Hae",
"whatlinkshere": "Tänne viittaavat sivut",
"whatlinkshere-title": "Sivut, jotka viittaavat sivulle $1",
- "whatlinkshere-page": "Sivu",
+ "whatlinkshere-page": "Sivu:",
"linkshere": "Seuraavilta sivuilta on linkki sivulle <strong>[[:$1]]</strong>:",
"nolinkshere": "Sivulle <strong>[[:$1]]</strong> ei ole linkkejä.",
"nolinkshere-ns": "Sivulle <strong>[[:$1]]</strong> ei ole linkkejä valitussa nimiavaruudessa.",
"edit": "Modifier",
"edit-local": "Modifier la description locale",
"create": "Créer",
- "create-local": "ajouter une description locale",
+ "create-local": "Ajouter une description locale",
"editthispage": "Modifier cette page",
"create-this-page": "Créer cette page",
"delete": "Supprimer",
"userlogin-resetlink": "Vous avez oublié vos détails de connexion ?",
"userlogin-resetpassword-link": "Mot de passe oublié ?",
"userlogin-helplink2": "Aide à la connexion",
- "userlogin-loggedin": "Vous êtes déjà connecté{{GENDER:$1||e}} en tant que {{GENDER:$1|$1}}.\nUtilisez le formulaire ci-dessous pour vous connecter avec un autre compte utilisateur.",
- "userlogin-createanother": "Créer un autre compte",
"createacct-emailrequired": "Adresse de courriel",
"createacct-emailoptional": "Adresse de courriel (facultative)",
"createacct-email-ph": "Entrez votre adresse de courriel",
"createaccount-text": "Quelqu’un a créé un compte pour votre adresse de courriel sur {{SITENAME}} ($4) intitulé « $2 », avec le mot de passe « $3 ».\nVous devriez ouvrir une session et modifier dès à présent votre mot de passe.\n\nIgnorez ce message si ce compte a été créé par erreur.",
"login-throttled": "Vous avez tenté un trop grand nombre de connexions dernièrement.\nVeuillez attendre $1 avant d'essayer à nouveau.",
"login-abort-generic": "Votre tentative de connexion a échoué",
+ "login-migrated-generic": "Votre compte a été migré, et votre nom d’utilisateur n’existe plus sur ce wiki.",
"loginlanguagelabel": "Langue : $1",
"suspicious-userlogout": "Votre demande de déconnexion a été refusée car il semble qu'elle a été envoyée par un navigateur cassé ou la mise en cache d'un proxy.",
"createacct-another-realname-tip": "Le vrai nom est optionnel.\nSi vous décidez de le fournir, il sera utilisé pour attribuer à l’utilisateur ses travaux.",
"showpreview": "Prévisualiser",
"showdiff": "Voir les modifications",
"blankarticle": "<strong>Attention :</strong> La page que vous créez est vide.\nSi vous cliquez de nouveau sur « {{int:savearticle}} », la page sera créée sans aucun contenu.",
- "anoneditwarning": "<strong>Attention :</strong> Vous n’êtes pas identifié(e). Votre adresse IP sera enregistrée dans l’historique de cette page.",
+ "anoneditwarning": "<strong>Attention :</strong> Vous n’êtes pas connecté. Votre adresse IP sera visible de tout le monde si vous faites des modifications. Si vous <strong>[$1 vous connectez]</strong> ou <strong>[$2 créez un compte]</strong>, vos modifications seront attribuées à votre nom d’utilisateur, entre autres avantages.",
"anonpreviewwarning": "''Vous n’êtes pas identifié(e). Sauvegarder enregistrera votre adresse IP dans l’historique des modifications de la page.''",
"missingsummary": "'''Rappel :''' vous n'avez pas encore fourni le résumé de votre modification.\nSi vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publication sera faite sans nouvel avertissement.",
"missingcommenttext": "Veuillez entrer un commentaire ci-dessous.",
"emailuser-title-notarget": "Envoyer un courriel à l'utilisateur",
"emailpage": "Envoyer un courriel à l'utilisateur",
"emailpagetext": "Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}.\nL'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.",
- "defemailsubject": "{{SITENAME}} Courriel de l'utilisateur « $1 »",
+ "defemailsubject": "Courriel de {{SITENAME}} de l'utilisateur « $1 »",
"usermaildisabled": "L'envoi de courriels entre utilisateurs est désactivé",
"usermaildisabledtext": "Vous ne pouvez pas envoyer de courriels à d'autres utilisateurs sur ce wiki",
"noemailtitle": "Aucune adresse de courriel",
"log-name-pagelang": "Tracer les changements de langue",
"log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.",
- "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MédiaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code>skins/</code> de votre installation de MédiaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MédiaWiki.\n\n; Si vous venez juste de mettre à jour MédiaWiki :\n: MédiaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre>$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
- "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MédiaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MédiaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code>skins/</code> de votre installation de MédiaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MédiaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
+ "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code>skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre>$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
+ "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code>skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')"
}
"tog-watchdefault": "Salew feranert sidjen an datein leewen uun't uug behual",
"tog-watchmoves": "Salew fersköwen sidjen an datein leewen uun't uug behual",
"tog-watchdeletion": "Salew stregen sidjen an datein leewen uun't uug behual",
+ "tog-watchrollback": "Sidjen, diar ik turagsaat haa, uun't uug behual",
"tog-minordefault": "Aanj feranrangen üs \"letjen\" kääntiakne",
"tog-previewontop": "\"Iarst ans luke\" boowen faan't wönang tu bewerkin",
"tog-previewonfirst": "Bi't iarst bewerkin \"iarst ans luke\" uunwise",
"hidetoc": "Fersteeg",
"collapsible-collapse": "Tuupdoble",
"collapsible-expand": "Wise",
+ "confirmable-confirm": "Beest {{GENDER:$1|dü}} seeker?",
+ "confirmable-yes": "Ja",
+ "confirmable-no": "Naan",
"thisisdeleted": "$1 uunluke of weder iinstel",
"viewdeleted": "$1 uunluke?",
"restorelink": "$1 {{PLURAL:$1|stregen werjuun|stregen werjuunen}}",
"invalidtitle-knownnamespace": "Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“",
"invalidtitle-unknownnamespace": "Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“",
"exception-nologin": "Ei uunmeldet",
- "exception-nologin-text": "Wees so gud an [[Special:Userlogin|melde di uun]], am detdiar sidj of aktjuun ütjtufeeren.",
+ "exception-nologin-text": "Wees so gud an melde di uun, am detdiar sidj of aktjuun ütjtufeeren.",
"exception-nologin-text-manual": "Wees so gud an $1 , am detdiar sidj of aktjuun ütjtufeeren.",
"virus-badscanner": "Ferkiard iinstelang: Ünbekäänd wiirenscanner: ''$1''",
"virus-scanfailed": "scan ging skiaf (code $1)",
"userlogin-resetlink": "Heest dü din login dooten ferjiden?",
"userlogin-resetpassword-link": "Paaswurd ferjiden?",
"userlogin-helplink2": "Halep bi't uunmeldin",
- "userlogin-loggedin": "Du beest al üs {{GENDER:$1|$1}} uunmeldet.\nBrük det formulaar diar oner, am di mä en öödern nööm uuntumeldin.",
- "userlogin-createanother": "En ööder brükerkonto iinracht",
"createacct-emailrequired": "E-mail adres",
"createacct-emailoptional": "E-mail adres (optional)",
"createacct-email-ph": "Du din e-mail adres iin",
"preview": "Iarst ans luke",
"showpreview": "Iarst ans luke",
"showdiff": "Feranrangen wise",
- "anoneditwarning": "'''Paase üüb:''' Dü bewerkest detdiar sidj anonüüm. Wan dü det seekerst, woort din aktuel IP-adres uun a ferluup aptiakent, an as diarmä '''för arken''' iintusen.",
+ "blankarticle": "<strong>Paase üüb:</strong> Dü maagest en leesag sidj.\nWan dü üüb \"{{int:savearticle}}\" trakst, woort det sidj iinracht saner wat uun.",
+ "anoneditwarning": "'''Paase üüb:''' Dü beest ei uunmeldet. Din aktuel IP-adres komt tu sen, wan dü feranrangen föörnamst. Wan dü di <strong>[$1 uunmeldest]</strong> of <strong>[$2 en konto iinrachtst]</strong>, wurd din feranrangen mä dan brükernööm ferbünjen, tuup mä ööder föördialen.",
"anonpreviewwarning": "\"Dü beest ei uunmeldet. Bi't seekrin woort din IP-adres uun a ferluup faan werjuunen aptiakent.\"",
"missingsummary": "'''Paase üüb:''' Dü heest det ei tuupfaadet.\nWan dü det sidj seekerst, woort det saner en kurtfaadet beskriiwang auernimen.",
"missingcommenttext": "Faade det oner tuup.",
"parser-template-recursion-depth-warning": "Tuföl föörlaagen uun föörlaagen ($1)",
"language-converter-depth-warning": "Spriakenkonwerter auerläästet ($1)",
"node-count-exceeded-category": "Jodiar sidjen haa tuföl ferbinjangen (nodes)",
- "node-count-exceeded-category-desc": "En kategorii för sidjen mä tuföl knooter (nodes).",
+ "node-count-exceeded-category-desc": "Detdiar sidj brükt tuföl knooter (nodes).",
"node-count-exceeded-warning": "Detdiar sidj hää tuföl ferbinjangen (nodes)",
"expansion-depth-exceeded-category": "Jodiar sidjen haa tuföl ütjwidjangen (expansion)",
- "expansion-depth-exceeded-category-desc": "Det as en kategorii för sidjen mä tuföl ütjwidjangen.",
+ "expansion-depth-exceeded-category-desc": "Detdiar sidj hää tuföl ütjwidjangen.",
"expansion-depth-exceeded-warning": "Detdiar sidj hää tuföl ütjwidjangen (expansion)",
"parser-unstrip-loop-warning": "Diar as en jinsidjag ferwisang",
"parser-unstrip-recursion-limit": "Tuföl jinsidjag ferwisangen bi $1",
"rev-deleted-event": "(Logbuk-iindrach stregen)",
"rev-deleted-user-contribs": "[Brükernööm of IP-adres wechnimen - Feranrangen uun bidracher ferbürgen]",
"rev-deleted-text-permission": "Detdiar werjuun as '''stregen''' wurden.\nUun't [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} strik-logbuk] stäänt muar diartu.",
+ "rev-suppressed-text-permission": "Detdiar werjuun as '''ferbürgen''' wurden.\nDü könst det noch uunluke uun't [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} fersteeg-logbuk].",
"rev-deleted-text-unhide": "Detdiar werjuun as '''stregen''' wurden.\nUun't [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} strik-logbuk] stäänt muar diartu.\nDü könst [$1 detdiar werjuun uunluke], wan dü wel.",
"rev-suppressed-text-unhide": "Detdiar werjuun as '''ferbürgen''' wurden.\nUun't [{{fullurl:{{#special:Log}}/suppress|page={{FULLPAGENAMEE}}}} fersteeg-logbuk] stäänt muar diartu.\nDü könst [$1 detdiar werjuun uunluke], wan dü wel.",
"rev-deleted-text-view": "Detdiar werjuun as '''stregen''' wurden.\nDü könst det noch uunluke. Uun't [{{fullurl:{{#special:Log}}/delete|page={{FULLPAGENAMEE}}}} strik-logbuk] stäänt muar diartu.",
"revdelete-text-text": "Stregen werjuunen bliiw uun't werjuunshistoore, man dialen diarfaan san ei för arken tu sen.",
"revdelete-text-file": "Stregen datei-werjuunen bliiw uun't werjuunshistoore, man dialen diarfaan san ei för arken tu sen.",
"logdelete-text": "Stregen logbuk-iindracher bliiw uun a logbuken, man dialen diarfaan san ei för arken tu sen.",
- "revdelete-text-others": "Ööder administratooren faan {{SITENAME}} kön widjerhen ales uunluke an kön det uk weder mä detheer spezial-sidj iinstel, wan diar niks ööders uun a wai as.",
+ "revdelete-text-others": "Ööder administratooren kön widjerhen ales uunluke an kön det uk weder iinstel, wan diar niks ööders uun a wai as.",
"revdelete-confirm": "Ferseekre noch ans, dat dü det würelk du wel, dat dü witjst, wat dü dääst, an dat det mä a [[{{MediaWiki:Policy-url}}|bestemangen]] auerian stemet.",
"revdelete-suppress-text": "Det skul '''bluas''' onertrakt wurd bi:\n* Persöönelk informatsjuunen, diar näämen wat uungung\n*: ''Adresen, tilefoonnumern, ferseekerangsnumern an sowat''",
"revdelete-legend": "Iinstelangen, hüföl tu sen wees skal",
"preferences": "Iinstelangen",
"mypreferences": "Iinstelangen",
"prefs-edits": "Taal faan feranrangen:",
- "prefsnologintext2": "Wees so gud an $1 , am din brüker-iinstelangen fäästtuleien.",
+ "prefsnologintext2": "Wees so gud an meldi di uun, am din brüker-iinstelangen tu feranrin.",
"prefs-skin": "Skak",
"skin-preview": "Föörskau",
"datedefault": "Föör-iinstelang",
"right-deletedtext": "Stregen tekst an feranrangen tesken stregen werjuunen uunluke",
"right-browsearchive": "Schük stregen sidjen",
"right-undelete": "Stregen sidjen turaghaale",
- "right-suppressrevision": "Werjuunen uunluke an turaghaale, diar uk för administratooren ei tu sen san",
+ "right-suppressrevision": "Werjuunen faan sidjen för arke brüker fersteeg, turaghaale an uunluke.",
+ "right-viewsuppressed": "För arke brüker ferbürgen werjuunen uunluke.",
"right-suppressionlog": "Priwoot logbuken uunluke",
"right-block": "Brükern spere (för't skriiwen)",
"right-blockemail": "Brüker spere för't e-mail schüüren",
"randomincategory": "Tufelag sidj uun't kategorii",
"randomincategory-invalidcategory": "\"$1\" as üs kategoriinööm ei tuläät.",
"randomincategory-nopages": "Diar san nian sidjen uun [[:Category:$1]].",
- "randomincategory-selectcategory": "Tufelag sidj uun't kategorii: $1 $2.",
- "randomincategory-selectcategory-submit": "Widjer",
"randomredirect": "Tufelag widjerfeerang",
"randomredirect-nopages": "Uun di nöömrüm „$1“ san nian widjerfeerangen.",
"statistics": "Statistik",
"import": "Sidjen importiare",
"importinterwiki": "Transwiki import",
"import-interwiki-text": "Schük en Wiki an en sidj tu importiarin ütj. A werjuunen an brükernöömer bliiw erhäälen.\nTranswiki-import-aktjuunen wurd uun't [[Special:Log/import|Import-logbuk]] fäästhäälen.",
- "import-interwiki-source": "Faan hün Wiki/sidj:",
"import-interwiki-history": "Aal a werjuunen faan det sidj importiare",
"import-interwiki-templates": "Mä aal a föörlaagen",
"import-interwiki-submit": "Import",
"userlogin-resetlink": "Esqueceu os seus datos de rexistro?",
"userlogin-resetpassword-link": "Esqueceu o contrasinal?",
"userlogin-helplink2": "Axuda co rexistro",
- "userlogin-loggedin": "Xa accedeu ao sistema como {{GENDER:$1|$1}}.\nUtilice o formulario inferior para acceder como outro usuario.",
- "userlogin-createanother": "Crear outra conta",
"createacct-emailrequired": "Enderezo de correo electrónico",
"createacct-emailoptional": "Enderezo de correo electrónico (opcional)",
"createacct-email-ph": "Insira o seu enderezo de correo electrónico",
"otherlanguages": "דף זה בשפות אחרות",
"redirectedfrom": "(הופנה מהדף $1)",
"redirectpagesub": "דף הפניה",
+ "redirectto": "הפניה ל:",
"lastmodifiedat": "שונה לאחרונה ב־$2, $1.",
"viewcount": "דף זה נצפה {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}.",
"protectedpage": "דף מוגן",
"privacypage": "Project:מדיניות הפרטיות",
"badaccess": "שגיאה בהרשאות",
"badaccess-group0": "אינכם מורשים לבצע את הפעולה שביקשתם.",
- "badaccess-groups": "הפעולה שביקשתם לבצע מוגבלת למשתמשים ב{{PLURAL:$2|קבוצה הבאה|אחת הקבוצות הבאות}}: $1.",
+ "badaccess-groups": "הפעולה שביקשת לבצע מוגבלת למשתמשים ב{{PLURAL:$2|קבוצה הבאה|אחת הקבוצות הבאות}}: $1.",
"versionrequired": "נדרשת גרסה $1 של מדיה־ויקי",
"versionrequiredtext": "גרסה $1 של מדיה־ויקי נדרשת לשימוש בדף זה. למידע נוסף, ראו את [[Special:Version|דף הגרסה]].",
"ok": "אישור",
"editinginterface": "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.\nשינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.\nכדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
"cascadeprotected": "דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:\n$2",
"namespaceprotected": "אינכם מורשים לערוך דפים במרחב השם '''$1'''.",
- "customcssprotected": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9cער×\95×\9a ×\93×£ CSS ×\96×\94, ×\9b×\99×\95×\95×\9f ש×\94×\95×\90 ×\9b×\95×\9c×\9c ×\90ת ×\94×\94×\92×\93ר×\95ת ×\94אישיות של משתמש אחר.",
- "customjsprotected": "×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9cער×\95×\9a ×\93×£ JavaScript ×\96×\94, ×\9b×\99×\95×\95×\9f ש×\94×\95×\90 ×\9b×\95×\9c×\9c ×\90ת ×\94×\94×\92×\93ר×\95ת ×\94אישיות של משתמש אחר.",
+ "customcssprotected": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9cער×\95×\9a ×\93×£ CSS ×\96×\94 ×\9b×\99×\95×\95×\9f ש×\94×\95×\90 ×\9b×\95×\9c×\9c ×\94×\92×\93ר×\95ת אישיות של משתמש אחר.",
+ "customjsprotected": "×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9cער×\95×\9a ×\93×£ JavaScript ×\96×\94 ×\9b×\99×\95×\95×\9f ש×\94×\95×\90 ×\9b×\95×\9c×\9c ×\94×\92×\93ר×\95ת אישיות של משתמש אחר.",
"mycustomcssprotected": "אינכם מורשים לערוך דף CSS זה.",
"mycustomjsprotected": "אינכם מורשים לערוך דף JavaScript זה.",
"myprivateinfoprotected": "אין לך הרשאה לערוך את המידע הפרטי שלך",
"userlogin-resetlink": "שכחת את פרטי הכניסה?",
"userlogin-resetpassword-link": "שכחת את הסיסמה?",
"userlogin-helplink2": "עזרה בכניסה לחשבון",
- "userlogin-loggedin": "אתם כבר מחוברים לחשבון {{GENDER:$1|$1}}.\nהשתמשו בטופס שלהלן כדי להתחבר לחשבון אחר.",
- "userlogin-createanother": "יצירת חשבון אחר",
"createacct-emailrequired": "כתובת דוא\"ל",
"createacct-emailoptional": "כתובת דוא\"ל (לא חובה)",
"createacct-email-ph": "יש להקליד את כתובת הדוא\"ל שלך",
"noemail": "לא רשומה כתובת דואר אלקטרוני עבור ה{{GENDER:$1|משתמש|משתמשת}} \"$1\".",
"noemailcreate": "יש לספק כתובת דואר אלקטרוני תקינה.",
"passwordsent": "סיסמה חדשה נשלחה לכתובת הדואר האלקטרוני הרשומה עבור \"$1\".\nאנא היכנסו חזרה לאתר אחרי שתקבלו אותה.",
- "blocked-mailpassword": "×\9bת×\95×\91ת ×\94Ö¾IP ש×\9c×\9b×\9d ×\97ס×\95×\9e×\94 ×\9eער×\99×\9b×\94, ×\95×\9cפ×\99×\9b×\9a ×\90×\99× ×\9b×\9d ×\9e×\95רש×\99×\9d ×\9c×\94שת×\9eש ×\91×\90פשר×\95ת ש×\97×\96×\95ר ×\94ס×\99ס×\9e×\94 כדי למנוע ניצול לרעה של התכונה.",
+ "blocked-mailpassword": "×\9bת×\95×\91ת ×\94Ö¾IP ש×\9c×\9a × ×\97ס×\9e×\94 ×\9eער×\99×\9b×\94, ×\95×\9cפ×\99×\9b×\9a ×\90×\99× ×\9a ×\9e×\95רש×\94 ×\9c×\94שת×\9eש ×\91×\90פשר×\95ת ש×\97×\96×\95ר ×\94ס×\99ס×\9e×\94, ×\95×\96×\90ת כדי למנוע ניצול לרעה של התכונה.",
"eauthentsent": "דוא\"ל אימות נשלח לכתובת הדוא\"ל שצוינה.\nלפני שדברי דוא\"ל אחרים יישלחו לחשבון הזה, יהיה עליכם לפעול לפי ההוראות בדוא\"ל, כדי לאשר שהחשבון אכן שייך לכם.",
"throttled-mailpassword": "כבר נשלח דוא\"ל לאיפוס הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.\nכדי למנוע ניצול לרעה, יכול להישלח רק דוא\"ל אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.",
"mailerror": "שגיאה בשליחת דואר: $1",
"createaccount-text": "מישהו יצר חשבון בשם $2 ב{{grammar:תחילית|{{SITENAME}}}} ($4), והסיסמה הזמנית של החשבון היא \"$3\". עליכם להיכנס ולשנות עכשיו את הסיסמה.\n\nבאפשרותכם להתעלם מהודעה זו, אם החשבון נוצר בטעות.",
"login-throttled": "ביצעתם לאחרונה ניסיונות רבים מדי להיכנס לחשבון זה.\nאנא המתינו $1 לפני שתנסו שוב.",
"login-abort-generic": "הכניסה לחשבון לא הצליחה - היא הופסקה",
+ "login-migrated-generic": "חשבון המשתמש שלך הועבר, ושם המשתמש שלך כבר לא קיים באתר ויקי זה.",
"loginlanguagelabel": "שפה: $1",
"suspicious-userlogout": "בקשתך לצאת מהחשבון נדחתה כיוון שנראה שהיא נשלחה על־ידי דפדפן שבור או שרת פרוקסי עם זיכרון מטמון.",
"createacct-another-realname-tip": "השם האמיתי הוא אופציונאלי.\nאם תבחרו לספקו, הוא ישמש לייחוס עבודת המשתמש אליו.",
"showpreview": "תצוגה מקדימה",
"showdiff": "הצגת שינויים",
"blankarticle": "<strong>אזהרה:</strong> הדף שאתם יוצרים הוא ריק.\nאם תלחצו שוב על \"{{int:savearticle}}\", הדף ייווצר ללא תוכן.",
- "anoneditwarning": "'''אזהרה:''' אינכם מחוברים לחשבון. כתובת ה־IP שלכם תירשם בהיסטוריית העריכות של הדף.",
+ "anoneditwarning": "<strong>אזהרה:</strong> אינכם מחוברים לחשבון. כתובת ה־IP שלכם תוצג בפומבי אם תבצעו עריכות כלשהן. אם <strong>[$1 תיכנסו לחשבון]</strong> או <strong>[$2 תיצרו חשבון]</strong>, העריכות שלכם תיוחסנה לשם המשתמש שלכם ותקבלו גם יתרונות אחרים.",
"anonpreviewwarning": "''אינכם מחוברים לחשבון. שמירה תגרום לכתובת ה־IP שלכם להירשם בהיסטוריית העריכות של הדף.''",
"missingsummary": "'''תזכורת:''' לא הזנתם תקציר עריכה.\nאם תלחצו שוב על הכפתור \"{{int:savearticle}}\", עריכתכם תישמר בלעדיו.",
"missingcommenttext": "אנא הקלידו את ההודעה למטה.",
"pagemerge-logentry": "מיזג את [[$1]] לתוך [[$2]] (גרסאות עד $3)",
"revertmerge": "ביטול המיזוג",
"mergelogpagetext": "זוהי רשימה של המיזוגים האחרונים של גרסאות מדף אחד לתוך דף שני.",
- "history-title": "$1: היסטוריית גרסאות",
+ "history-title": "היסטוריית גרסאות של הדף \"$1\"",
"difference-title": "הבדלים בין גרסאות בדף \"$1\"",
"difference-title-multipage": "$1 ו{{GRAMMAR:תחילית|$2}}: הבדלים בין דפים",
"difference-multipage": "(הבדלים בין דפים)",
"sunday-at": "ביום ראשון בשעה $1",
"yesterday-at": "אתמול בשעה $1",
"bad_image_list": "דרך הכתיבה בהודעה היא כמתואר להלן:\n\nרק פריטי רשימה (שורות המתחילות עם *) נחשבים.\nהקישור הראשון בשורה חייב להיות קישור לקובץ בעייתי.\nכל הקישורים הבאים באותה השורה נחשבים לחריגים, כלומר לדפים שבהם ניתן להציג את הקובץ.",
- "metadata": "×\9e×\99×\93×¢ × ×\95סף ×¢×\9c ×\94ק×\95×\91×¥",
+ "metadata": "×\9e×\98×\90Ö¾× ×ª×\95× ×\99×\9d",
"metadata-help": "קובץ זה מכיל מידע נוסף, שכנראה הגיע ממצלמה דיגיטלית או מסורק שבהם הקובץ נוצר או עבר דיגיטציה.\nאם הקובץ שונה ממצבו הראשוני, כמה מהנתונים להלן עלולים שלא לשקף באופן מלא את הקובץ הנוכחי.",
"metadata-expand": "הצגת פרטים מורחבים",
"metadata-collapse": "הסתרת פרטים מורחבים",
"watchlistedit-raw-added": "{{PLURAL:$1|כותרת אחת נוספה|$1 כותרות נוספו}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}}:",
"watchlistedit-clear-title": "רשימת המעקב נמחקה",
- "watchlistedit-clear-legend": "×\9e×\97×\99קת רשימת המעקב",
+ "watchlistedit-clear-legend": "× ×\99ק×\95×\99 רשימת המעקב",
"watchlistedit-clear-explain": "כל הכותרות של הדפים שיוסרו מרשימת המעקב",
"watchlistedit-clear-titles": "כותרות:",
- "watchlistedit-clear-submit": "×\9e×\97×\99קת רשימת המעקב (לצמיתות!)",
+ "watchlistedit-clear-submit": "× ×\99ק×\95×\99 רשימת המעקב (לצמיתות!)",
"watchlistedit-clear-done": "רשימת המעקב שלך נמחקה.",
"watchlistedit-clear-removed": "{{PLURAL:$1|כותרת אחת הוסרה|$1 כותרות הוסרו}}:",
"watchlistedit-too-many": "יש יותר מדי דפים ולא ניתן להציגם כאן.",
- "watchlisttools-clear": "×\9e×\97×\99קת רשימת המעקב",
+ "watchlisttools-clear": "× ×\99ק×\95×\99 רשימת המעקב",
"watchlisttools-view": "הצגת השינויים הרלוונטיים",
"watchlisttools-edit": "הצגה ועריכה של רשימת המעקב",
"watchlisttools-raw": "עריכת הרשימה הגולמית",
"log-name-pagelang": "יומן שינוי שפה",
"log-description-pagelang": "זהו יומן של שינויים בשפות של הדפים.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|שינה|שינתה}} את שפת הדף $3 מ$4 ל$5.",
- "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם (<code>$wgDefaultSkin</code>),‏ <code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה־<code>skins/</code>.\n:* שכפול אחת מה־git repostiroies ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code>skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל־git repository שלכם (אם אתם מפתחים של מדיה־ויקי).\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\n\n<pre>$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם ביצעתם שגיאות הקלדה בשמות העיצובים.",
- "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם (<code>$wgDefaultSkin</code>),‏ <code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n$2\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה־<code>skins/</code>.\n:* שכפול אחת מה־git repostiroies ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code>skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע ל־git repository שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
+ "default-skin-not-found": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם (<code dir=\"ltr\">$wgDefaultSkin</code>),‏ <code>$1</code>, אינו זמין.\n\nנראה שההתקנה שלכם כוללת את העיצובים הבאים. ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל אותם ולבחור את עיצוב ברירת המחדל.\n\n$2\n\n; אם כרגע התקנתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה־<code>skins/</code>.\n:* שכפול (clone) אחד מהמאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע למאגר ה־git שלכם אם אתם מפתחים של מדיה־ויקי.\n\n; אם כרגע שדרגתם את מדיה־ויקי:\n: מדיה־ויקי 1.24 וגרסאות חדשות יותר כבר לא מפעילות עיצובים מותקנים באופן אוטומטי (ראו [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery \"גילוי אוטומטי של עיצובים\" במדריך]). תוכלו להעתיק את השורות הבאות לתוך הקובץ <code>LocalSettings.php</code> כדי להפעיל את כל העיצובים המותקנים כעת:\n\n<pre dir=\"ltr\">$3</pre>\n\n; אם כרגע שיניתם את <code>LocalSettings.php</code>:\n: בדקו שנית האם עשיתם שגיאות הקלדה בשמות העיצובים.",
+ "default-skin-not-found-no-skins": "אופס! עיצוב ברירת המחדל עבור אתר הוויקי שלכם (<code dir=\"ltr\">$wgDefaultSkin</code>),‏ <code>$1</code>, אינו זמין.\n\nאין לכם עיצובים מותקנים.\n\n; אם כרגע התקנתם או שדרגתם את מדיה־ויקי:\n: נראה שזו התקנה מ־git, או ישירות מקוד המקור בשיטה אחרת כלשהי. במקרה הזה, בעיה זו צפויה. מדיה־ויקי 1.24 וגרסאות חדשות יותר אינן כוללות עיצובים ב־git repository הראשי. נסו להתקין כמה עיצובים מ[https://www.mediawiki.org/wiki/Category:All_skins ספריית העיצובים של mediawiki.org], על־ידי:\n:* הורדת [https://www.mediawiki.org/wiki/Download קובץ ה־tar להתקנה], שכולל מספר עיצובים והרחבות. באפשרותכם להעתיק ולהדביק מתוכו את תיקיית ה־<code>skins/</code>.\n:* שכפול (clone) אחד ממאגרים ב־<code>mediawiki/skins/*</code> בעזרת git לתוך תיקיית ה־<code dir=\"ltr\">skins/</code> בהתקנת מדיה־ויקי שלכם.\n: אם תעשו זאת, זה לא אמור להפריע למאגר ה־git שלכם (אם אתם מפתחים של מדיה־ויקי). ראו מידע בדף [https://www.mediawiki.org/wiki/Manual:Skin_configuration \"הגדרת עיצובים\" במדריך] על האפשרות להפעיל עיצובים ולבחור את עיצוב ברירת המחדל.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (מופעל)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''מבוטל''')"
}
"hidetoc": "छुपाएँ",
"collapsible-collapse": "छोटा करें",
"collapsible-expand": "विस्तार करें",
+ "confirmable-confirm": "क्या {{GENDER:$1|आप}} निश्चित हो?",
+ "confirmable-yes": "हाँ",
+ "confirmable-no": "नहीं",
"thisisdeleted": "$1 देखें या वापिस लाएँ?",
"viewdeleted": "$1 दिखायें?",
"restorelink": "{{PLURAL:$1|एक हटाया हुआ|$1 हटाये हुए}} बदलाव",
"userlogin-resetlink": "अपनी प्रवेश जानकारी भूल गए हैं?",
"userlogin-resetpassword-link": "अपना पासवर्ड भूल गए?",
"userlogin-helplink2": "लॉग इन करने में सहायता",
- "userlogin-loggedin": "आप {{GENDER:$1|$1}} के रूप में पहले से लॉग्ड इन हैं।\nकिसी अन्य सदस्य के रूप में लॉग इन करने के लिए निम्नलिखित फ़ॉर्म का प्रयोग करें।",
- "userlogin-createanother": "एक अन्य खाता खोलें",
"createacct-emailrequired": "ई-मेल पता",
"createacct-emailoptional": "ई-मेल पता (वैकल्पिक)",
"createacct-email-ph": "अपना ई-मेल पता लिखें",
"node-count-exceeded-category-desc": "यह उन पृष्ठों की श्रेणी है जिनमें नोड-संख्या सीमा पार की गयी है।",
"node-count-exceeded-warning": "पृष्ठ ने नोड-संख्या पार की है",
"expansion-depth-exceeded-category": "पृष्ठ जिनमें विस्तार गहराई पार की गई है",
- "expansion-depth-exceeded-category-desc": "यह à¤\89न पà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95à¥\80 शà¥\8dरà¥\87णà¥\80 हà¥\88 à¤\9cिनमà¥\87à¤\82 विसà¥\8dतार à¤\97हराà¤\88 पार à¤\95à¥\80 à¤\97यà¥\80 है।",
+ "expansion-depth-exceeded-category-desc": "यह पà¥\83षà¥\8dठविसà¥\8dतार à¤\97हराà¤\88 पार à¤\95रता है।",
"expansion-depth-exceeded-warning": "पृष्ठ में विस्तार गहराई पार की गई है",
"parser-unstrip-loop-warning": "Unstrip लूप पाया गया",
"parser-unstrip-recursion-limit": "Unstrip पुनरावर्तन सीमा पार की गई ($1)",
"tog-showtoolbar": "Prikaži traku s alatima za uređivanje (zahtijeva JavaScript)",
"tog-editondblclick": "Dvoklik otvara uređivanje stranice (JavaScript)",
"tog-editsectiononrightclick": "Pritiskom na desnu tipku miša otvori uređivanje pojedinih odlomaka (JavaScript)",
- "tog-watchcreations": "Dodaj članke koje kreiram na moj popis praćenja",
+ "tog-watchcreations": "Dodaj stranice koje sam stvorio na moj popis praćenja",
"tog-watchdefault": "Dodaj svaku stranicu koju uredim na moj popis praćenja",
"tog-watchmoves": "Dodaj stranice i datoteke koje premjestim na moj popis praćenja",
"tog-watchdeletion": "Dodaj stranice i datoteke koje izbrišem na popis praćenja",
+ "tog-watchrollback": "Dodaj stranice na kojima sam vratio uređivanja na popis praćenja",
"tog-minordefault": "Normalno označavaj sve moje izmjene kao manje",
"tog-previewontop": "Prikaži kako će stranica izgledati iznad okvira za uređivanje",
"tog-previewonfirst": "Prikaži kako će stranica izgledati čim otvorim uređivanje",
"view": "Vidi",
"view-foreign": "vidi na projektu $1",
"edit": "uredi",
+ "edit-local": "Uredi lokalni opis",
"create": "Započni",
"create-local": "dodaj lokalni opis",
"editthispage": "Uredi ovu stranicu",
"gotaccountlink": "Prijavite se",
"userlogin-resetlink": "Zaboravili ste detalje vaše prijave?",
"userlogin-resetpassword-link": "Zaboravili ste zaporku?",
- "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nRabite donji obrazac da biste se prijavili kao drugi suradnik.",
- "userlogin-createanother": "Stvori još jedan račun",
"createacct-emailrequired": "Adresa e-pošte",
"createacct-emailoptional": "Adresa e-pošte",
"createacct-email-ph": "Upišite svoju adresu e-pošte",
"createacct-benefit-heading": "{{SITENAME}} su stvorili ljudi poput Vas.",
"createacct-benefit-body1": "{{PLURAL:$1|uređivanje|uređivanja}}",
"createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
- "createacct-benefit-body3": "nedavnih {{PLURAL:$1|suradnik|suradnika}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|nedavni suradnik|nedavnih suradnika}}",
"badretype": "Unesene lozinke nisu istovjetne.",
"userexists": "Uneseno suradničko ime već je u upotrebi.\nUnesite neko drugo ime.",
"loginerror": "Pogrješka u prijavi",
"login-userblocked": "Ovaj je suradnik blokiran. Prijava nije dopuštena.",
"wrongpassword": "Lozinka koju ste unijeli nije ispravna. Pokušajte ponovno.",
"wrongpasswordempty": "Niste unijeli lozinku. Pokušajte ponovno.",
- "passwordtooshort": "Lozinka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
+ "passwordtooshort": "Zaporka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}.",
"password-name-match": "Vaša lozinka mora biti različita od Vašeg suradničkog imena.",
"password-login-forbidden": "Uporaba ovog suradničkog imena i lozinke nije dozvoljena.",
"mailmypassword": "Pošalji mi novu lozinku",
"passwordremindertext": "Netko je (vjerojatno Vi, s IP adrese $1) zatražio novu lozinku za projekt {{SITENAME}} ($4).\nPrivremena lozinka za suradnika \"$2\" je postavljena na \"$3\".\nUkoliko ste to Vi učinili, molimo Vas da se prijavite i promijenite lozinku.\nPrivremena lozinka vrijedi još {{PLURAL:$5|$5 dan|$5 dana}}.\n\nUkoliko niste zatražili novu lozinku, ili ste se sjetili stare lozinke i\nviše ju ne želite promijeniti, slobodno zanemarite ovu poruku i nastavite\nkoristiti staru lozinku.",
"noemail": "Suradnik \"$1\" nema zapisanu e-mail adresu.",
"noemailcreate": "Morate navesti važeću e-mail adresu",
- "passwordsent": "Nova je lozinka poslana na e-mail adresu suradnika \"$1\"",
+ "passwordsent": "Nova je zaporka poslana na adresu elektroničke pošte suradnika \"$1\"",
"blocked-mailpassword": "Vašoj IP adresi je blokirano uređivanje stranica, a da bi se spriječila nedopuštena radnja, mogućnost zahtijevanja nove lozinke je također onemogućena.",
"eauthentsent": "Na navedenu adresu poslana je e-poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, molimo Vas otvorite e-poruku i slijedite u njemu sadržana uputstva kako biste potvrdili da je adresa e-pošte zaista Vaša.",
"throttled-mailpassword": "Već Vam je poslan e-mail za promjenu zaporke, u {{PLURAL:$1|posljednjih sat vremena|posljednja $1 sata|posljednjih $1 sati}}.\nDa bi spriječili zloupotrebu, moguće je poslati samo jedan e-mail za promjenu zaporke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
"php-mail-error-unknown": "Nepoznata pogrješka u funkciji PHP-poruke()",
"user-mail-no-addy": "Pokušaj slanja e-maila bez e-mail adrese.",
"user-mail-no-body": "Pokušali ste poslati e-mail bez sadržaja ili s prekratkim sadržajem.",
- "changepassword": "Promjena lozinke",
+ "changepassword": "Promjena zaporke",
"resetpass_announce": "Da biste završili proces mijenjanja lozinke, upišite \nnovu lozinku.",
"resetpass_header": "Promijeni lozinku računa",
"oldpassword": "Stara lozinka",
"passwordreset": "Ponovno postavi lozinku",
"passwordreset-text-one": "Ispunite ovaj obrazac ako želite ponovno postaviti Vašu zaporku.",
"passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja da biste dobili privremenu zaporku e-poštom.}}",
- "passwordreset-legend": "Poništi lozinku",
+ "passwordreset-legend": "Poništi zaporku",
"passwordreset-disabled": "Poništavanje lozinke je onemogućeno na ovom wikiju.",
"passwordreset-emaildisabled": "Funkcija e-pošte je onemogućena na ovom wikiju.",
"passwordreset-username": "Suradničko ime:",
"passwordreset-emailsent-capture": "Poslan Vam je podsjetnik kao e-pošta (tekst je prikazan dolje).",
"passwordreset-emailerror-capture": "Napravljena je e-poruka za ponovno postavljanje zaporke (prikazana ispod), ali njeno slanje suradniku nije uspjelo: $1",
"changeemail": "Promijeni e-mail adresu",
- "changeemail-header": "Promijeni e-mail adresu računa",
+ "changeemail-header": "Promijeni adresu e-pošte računa",
"changeemail-text": "Za promjenu e-mail adrese popunite ovaj obrazac. Morat ćete unijeti svoju lozinku da potvrdite ovu promjenu.",
"changeemail-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
- "changeemail-oldemail": "Trenutna E-mail adresa:",
- "changeemail-newemail": "Nova E-mail adresa:",
+ "changeemail-oldemail": "Trenutačna adresa e-pošte:",
+ "changeemail-newemail": "Nova adresa e-pošte:",
"changeemail-none": "(ništa)",
"changeemail-password": "Zaporka za {{SITENAME}}:",
"changeemail-submit": "Promijeni E-mail",
"autoblockedtext": "Vaša IP adresa automatski je blokirana zbog toga što ju je koristio drugi suradnik, kojeg je blokirao $1.\nRazlog blokiranja je sljedeći:\n\n:''$2''\n\n* Početak blokade: $8\n* Blokada istječe: $6\n* Ime blokiranog suradnika: $7\n\nMožete kontaktirati $1 ili jednog od [[{{MediaWiki:Grouppage-sysop}}|administratora]] kako bi Vam pojasnili razlog blokiranja.\n\nPrimijetite da ne možete rabiti opciju \"Pošalji mu e-poruku\" ako niste upisali valjanu adresu e-pošte u Vašim [[Special:Preferences|suradničkim postavkama]] i ako niste u tome onemogućeni prilikom blokiranja.\n\nVaša trenutačna IP adresa je $3, a oznaka bloka #$5. Molimo navedite ovaj broj kod svakog upita vezano za razlog blokiranja.",
"blockednoreason": "bez obrazloženja",
"whitelistedittext": "Za uređivanje stranice morate se $1.",
- "confirmedittext": "Morate potvrditi Vašu e-mail adresu prije nego što Vam bude omogućeno uređivanje. Molim unesite i ovjerite Vašu e-mail adresu u [[Special:Preferences|suradničkim postavkama]].",
+ "confirmedittext": "Morate potvrditi Vašu adresu e-pošte prije nego što Vam bude omogućeno uređivanje. Molim unesite i ovjerite Vašu adresu e-pošte u [[Special:Preferences|suradničkim postavkama]].",
"nosuchsectiontitle": "Ne mogu pronaći odlomak",
"nosuchsectiontext": "Pokušali ste uređivati odlomak koji ne postoji.\nMožda je premješten ili izbrisan dok ste pregledavali stranicu.",
"loginreqtitle": "Nužna prijava",
"edit-conflict": "Sukob uređivanja.",
"edit-no-change": "Vaše uređivanje je zanemareno, jer nikakva promjena sadržaja nije napravljena.",
"postedit-confirmation-created": "Stranica je stvorena.",
+ "postedit-confirmation-restored": "Stranica je vraćena.",
"postedit-confirmation-saved": "Vaše je uređivanje sačuvano.",
"edit-already-exists": "Neuspješno stvaranje nove stranice.\nStranica već postoji.",
"defaultmessagetext": "Prvotni tekst poruke",
"prefs-watchlist-token": "Token popisa praćenja:",
"prefs-misc": "Razno",
"prefs-resetpass": "Promijeni lozinku",
- "prefs-changeemail": "promijeni e-mail",
+ "prefs-changeemail": "promijeni adresu e-pošte",
"prefs-setemail": "Postavite E-mail adresu",
"prefs-email": "Mogućnosti e-maila",
"prefs-rendering": "Izgled",
"statistics-users-active": "Aktivni suradnici",
"statistics-users-active-desc": "Suradnici koji su napravili neku od radnji u posljednjih {{PLURAL:$1|dan|$1 dana}}",
"statistics-mostpopular": "Najposjećenije stranice",
+ "pageswithprop": "Stranice sa osobinom stranice",
+ "pageswithprop-legend": "Stranice sa osobinom stranice",
"pageswithprop-prop": "Ime osobine:",
"pageswithprop-submit": "Idi",
"doubleredirects": "Dvostruka preusmjeravanja",
"markedaspatrollednotify": "Uređivanje stranice $1 označeno je pregledanim.",
"markedaspatrollederrornotify": "Označavanje stranice pregledanom nije uspjelo.",
"patrol-log-page": "Evidencija pregledavanja promjena",
- "patrol-log-header": "Ovo su evidencije patroliranih izmjena.",
+ "patrol-log-header": "Ovo su evidencije ophođenih izmjena.",
"log-show-hide-patrol": "$1 evidenciju patroliranja",
"deletedrevision": "Izbrisana stara inačica $1",
"filedeleteerror-short": "Pogrješka u brisanju datoteke: $1",
"watchlistall2": "sve",
"namespacesall": "sve",
"monthsall": "sve",
- "confirmemail": "Potvrda e-mail adrese",
+ "confirmemail": "Potvrdite adresu e-pošte",
"confirmemail_noemail": "Niste unijeli važeću e-mail adresu u Vaše [[Special:Preferences|suradničke postavke]].",
"confirmemail_text": "U ovom wikiju morate prije korištenja e-mail naredbi potvrditi svoju e-mail adresu. Kliknite na gumb ispod kako biste poslali poruku s potvrdom na Vašu adresu. U poruci će biti poveznica koju morate otvoriti u svom web pregledniku i time potvrditi svoju e-mail adresu.",
"confirmemail_pending": "Već Vam je e-mailom poslan potvrdni kôd;\nako ste upravo otvorili suradnički račun, molimo pričekajte još nekoliko minuta da e-mail stigne prije nego što zatražite novi kôd.",
"confirmemail_invalid": "Pogrešna potvrda. Kôd je možda istekao.",
"confirmemail_needlogin": "Molimo $1 kako biste potvrdili Vašu e-mail adresu.",
"confirmemail_success": "Vaša je e-mail adresa potvrđena. Možete se prijaviti i uživati u wikiju.",
- "confirmemail_loggedin": "Vaša je e-mail adresa potvrđena.",
+ "confirmemail_loggedin": "Vaša je adresa e-pošte potvrđena.",
"confirmemail_subject": "{{SITENAME}}: potvrda e-mail adrese",
- "confirmemail_body": "Netko, vjerojatno Vi, s IP adrese $1 je otvorio\nsuradnički račun pod imenom \"$2\" s ovom e-mail adresom na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu Vaš i\nomogućili e-mail funkcije na {{SITENAME}}, otvorite u Vašem\npregledniku sljedeću poveznicu:\n\n$3\n\nAko to *niste* Vi, slijedite ovaj link za poništavanje potvrde:\n\n$5\n\nValjanost ovog potvrdnog koda istječe na $4.",
+ "confirmemail_body": "Netko, vjerojatno Vi, s IP adrese $1 otvorio je\nsuradnički račun pod imenom \"$2\" s ovom adresom e-pošte na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu Vaš i\nomogućili funkcije e-pošte na {{SITENAME}}, otvorite u Vašem\npregledniku sljedeću poveznicu:\n\n$3\n\nAko to *niste* Vi, slijedite ovu poveznicu za poništavanje potvrde:\n\n$5\n\nValjanost ovog potvrdnog kȏda istječe na $4.",
"confirmemail_body_changed": "Netko, vjerojatno Vi, s IP adrese $1,\npromijenio je adresu e-pošte suradničkog računa \"$2\" u ovu adresu na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu Vaš te uključili\nmogućnosti e-pošte na {{SITENAME}}, otvorite u Vašem pregledniku sljedeću poveznicu:\n\n$3\n\nUkoliko suradnički račun *ne* pripada Vama, slijedite ovu poveznicu\nza poništavanje potvrde adrese e-pošte:\n\n$5\n\nValjanost ovog potvrdnog koda istječe $4.",
"confirmemail_body_set": "Netko, najvjerojatnije vi, s IP adrese $1,\notvorio je suradnički račun pod imenom \"$2\" s ovom adresom e-pošte na {{SITENAME}}.\n\nKako biste potvrdili da je ovaj suradnički račun uistinu vaš i uključili \nmogućnosti e-poruka na {{SITENAME}}, otvorite u vašem pregledniku sljedeću poveznicu:\n\n$3\n\nAko ovaj suradnički račun *ne* pripada vama, slijedite ovaj link \nkako biste poništili potvrdu adrese elektroničke pošte:\n\n$5\n\nValjanost ovog potvrdnog kȏda istječe u $4",
"confirmemail_invalidated": "Potvrda E-mail adrese je otkazana",
"userlogin-resetlink": "Elfelejtetted a bejelentkezési adataidat?",
"userlogin-resetpassword-link": "Elfelejtetted a jelszavad?",
"userlogin-helplink2": "Segítség a bejelentkezéshez",
- "userlogin-loggedin": "Már be vagy jelentkezve mint {{GENDER:$1|$1}}. Ha más néven akarsz belépni, alább megteheted.",
- "userlogin-createanother": "Felhasználói fiók létrehozása",
"createacct-emailrequired": "E-mail cím",
"createacct-emailoptional": "E-mail cím (opcionális)",
"createacct-email-ph": "Add meg e-mail címed",
"preferences": "Beállítások",
"mypreferences": "Beállítások",
"prefs-edits": "Szerkesztéseid száma:",
- "prefsnologintext2": "Kérjük jelentkezzen be a beállítások módosításához.",
+ "prefsnologintext2": "Kérjük, jelentkezz be a beállítások módosításához.",
"prefs-skin": "Felület",
"skin-preview": "előnézet",
"datedefault": "Nincs beállítás",
"right-editmyusercss": "A saját szerkesztői CSS-fájlok szerkesztése",
"right-editmyuserjs": "Saját szerkesztői JavaScript-fájlok szerkesztése",
"right-viewmywatchlist": "Saját figyelőlista megtekintése",
+ "right-editmywatchlist": "Saját figyelőlista szerkesztése. Bizonyos műveletek képesek lapok figyelőlistához adására ezen jog nélkül is.",
+ "right-viewmyprivateinfo": "Saját személyes adatok megtekintése (pl. e-mailcím, valódi név)",
+ "right-editmyprivateinfo": "Saját személyes adatok szerkesztése (pl. e-mailcím, valódi név)",
"right-editmyoptions": "Saját beállítások szerkesztése",
"right-rollback": "a lap utolsó szerkesztésének gyors visszaállítása",
"right-markbotedits": "visszaállított szerkesztések botként való jelölése",
"userlogin-resetlink": "Datos de authentication oblidate?",
"userlogin-resetpassword-link": "Contrasigno oblidate?",
"userlogin-helplink2": "Adjuta al accesso",
- "userlogin-loggedin": "Tu ha jam aperite session como {{GENDER:$1|$1}}.\nUsa le formulario sequente pro aperir session como altere usator.",
- "userlogin-createanother": "Crear un altere conto",
"createacct-emailrequired": "Adresse de e-mail",
"createacct-emailoptional": "Adresse de e-mail (optional)",
"createacct-email-ph": "Entra tu adresse de e-mail",
"showpreview": "Monstrar previsualisation",
"showdiff": "Detaliar modificationes",
"blankarticle": "<strong>Advertimento:</strong> Le pagina que tu vole crear es vacue.\nSi tu clicca de novo sur \"{{int:savearticle}}\", le pagina essera create sin contento.",
- "anoneditwarning": "'''Attention:''' Tu non ha aperite un session.\nTu adresse IP essera registrate in le historia de modificationes de iste pagina.",
+ "anoneditwarning": "<strong>Attention:</strong> Tu non ha aperite un session. Le adresse IP tue essera publicamente visibile si tu face modificationes. Si tu <strong>[$1 aperi un session]</strong> o <strong>[$2 crea un conto]</strong>, le modificationes essera attribuite al nomine de usator tue, inter altere avantages.",
"anonpreviewwarning": "''Tu non ha aperite un session. Salveguardar registrara tu adresse IP in le historia de modificationes de iste pagina.''",
"missingsummary": "'''Rememoration:''' Tu non ha specificate un summario del modification.\nSi tu clicca super \"{{int:savearticle}}\" de novo, le modification essera publicate sin summario.",
"missingcommenttext": "Per favor entra un commento infra.",
"node-count-exceeded-category-desc": "Le pagina excede le numero maxime de nodos.",
"node-count-exceeded-warning": "Le numero de nodos in iste pagina excede le limite",
"expansion-depth-exceeded-category": "Paginas in que le profunditate de expansion excede le limite",
- "expansion-depth-exceeded-category-desc": "Isto es un categoria pro paginas in le quales le profunditate de expansion ha essite excedite.",
+ "expansion-depth-exceeded-category-desc": "Le pagina excede le profunditate de expansion maxime.",
"expansion-depth-exceeded-warning": "Le profunditate de expansion in iste pagina excede le limite",
"parser-unstrip-loop-warning": "Bucla de \"unstrip\" detegite",
"parser-unstrip-recursion-limit": "Limite de recursion de \"unstrip\" excedite ($1)",
"preferences": "Preferentias",
"mypreferences": "Preferentias",
"prefs-edits": "Numero de modificationes:",
- "prefsnologintext2": "Es necessari $1 pro definir le preferentias de usator.",
+ "prefsnologintext2": "Es necessari aperir session pro cambiar le preferentias.",
"prefs-skin": "Apparentia",
"skin-preview": "Previsualisation",
"datedefault": "Nulle preferentia",
"randomincategory": "Pagina aleatori in categoria",
"randomincategory-invalidcategory": "\"$1\" non es un nomine de categoria valide.",
"randomincategory-nopages": "Il non ha paginas in [[:Category:$1]].",
+ "randomincategory-category": "Categoria:",
+ "randomincategory-legend": "Pagina aleatori in categoria",
"randomredirect": "Redirection aleatori",
"randomredirect-nopages": "Il non ha redirectiones in le spatio de nomines \"$1\".",
"statistics": "Statisticas",
"trackingcategories-desc": "Criterios pro inclusion in categoria",
"noindex-category-desc": "Iste pagina es excludite del indice perque illo contine le marca <code><nowiki>__NOINDEX__</nowiki></code> e es in un spatio de nomines ubi le uso de iste marca es permittite.",
"index-category-desc": "Iste pagina contine le marca <code><nowiki>__INDEX__</nowiki></code> (e es in un spatio de nomines ubi le uso de iste marca es permittite), e dunque es includite in le indice mesmo si illo normalmente non lo esserea.",
- "post-expand-template-inclusion-category-desc": "Le expansion de tote le patronos facerea le dimension del pagina exceder le limite de <code>$wgMaxArticleSize</code>, dunque alcun patronos non ha essite expandite.",
- "post-expand-template-argument-category-desc": "Post le expansion de un parametro de patrono (qualcosa inter accolladas triple, como <code>{{{Exemplo}}}</code>), le dimension del pagina excede le limite de <code>$wgMaxArticleSize</code>.",
- "expensive-parserfunction-category-desc": "Troppo de functiones costose de analysator syntactic (como <code>#ifexist</code>) ha essite includite in un pagina. Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
- "broken-file-category-desc": "Iste categoria es addite si le pagina contine un ligamine de file rupte (un ligamine pro incorporar un file quando le file non existe).",
- "hidden-category-category-desc": "Iste categoria contine le marca <code><nowiki>__HIDDENCAT__</nowiki></code>, impediente lo de apparer in le quadro de ligamines de categoria in paginas, si non configurate alteremente.",
+ "post-expand-template-inclusion-category-desc": "Le dimension del pagina es plus grande de <code>$wgMaxArticleSize</code> post le expansion de tote le patronos, dunque alcun patronos non ha essite expandite.",
+ "post-expand-template-argument-category-desc": "Le dimension del pagina es plus grande de <code>$wgMaxArticleSize</code> post le expansion de un parametro de patrono (qualcosa inter accolladas triple, como <code>{{{Exemplo}}}</code>).",
+ "expensive-parserfunction-category-desc": "Le pagina usa troppo de functiones costose de analysator syntactic (como <code>#ifexist</code>). Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Le pagina contine un ligamine de file rupte (un ligamine pro incorporar un file quando le file non existe).",
+ "hidden-category-category-desc": "Le categoria contine <code><nowiki>__HIDDENCAT__</nowiki></code> in su contento de pagina, impediente que illo appare in le quadro de ligamines de categoria in paginas, si non configurate alteremente.",
"trackingcategories-nodesc": "Nulle description disponibile.",
"trackingcategories-disabled": "Le categoria es disactivate",
"mailnologin": "Necun adresse de invio",
"mywatchlist": "Observatorio",
"watchlistfor2": "De $1 $2",
"nowatchlist": "Tu non ha paginas sub observation.",
- "watchlistanontext": "Tu debe $1 pro poter vider o modificar entratas in tu observatorio.",
+ "watchlistanontext": "Per favor, aperi session pro poter vider o modificar entratas in tu observatorio.",
"watchnologin": "Tu non ha aperite un session",
"addwatch": "Adder al observatorio",
"addedwatchtext": "Le pagina \"[[:$1]]\" ha essite addite a tu [[Special:Watchlist|observatorio]].\nLe modificationes futur in iste pagina e in le pagina de discussion associate essera listate in illo.",
"delete-edit-reasonlist": "Modificar le motivos pro deletion",
"delete-toobig": "Iste pagina ha un grande historia de modificationes con plus de $1 {{PLURAL:$1|version|versiones}}.\nLe deletion de tal paginas ha essite restringite pro impedir le disruption accidental de {{SITENAME}}.",
"delete-warning-toobig": "Iste pagina ha un grande historia de modificationes con plus de $1 {{PLURAL:$1|version|versiones}}.\nLe deletion de illo pote disrumper le operationes del base de datos de {{SITENAME}};\nprocede con caution.",
+ "deleteprotected": "Tu non pote deler iste pagina perque illo ha essite protegite.",
"deleting-backlinks-warning": "'''Attention:''' Il ha [[Special:WhatLinksHere/{{FULLPAGENAME}}|altere paginas]] que liga a o transclude le pagina que tu es sur le puncto de deler.",
"rollback": "Revocar modificationes",
"rollback_short": "Revocar",
"autoblockid": "Auto-blocada №$1",
"block": "Blocar usator",
"unblock": "Disblocar usator",
- "blockip": "Blocar usator",
+ "blockip": "Blocar {{GENDER:$1|usator}}",
"blockip-legend": "Blocar usator",
"blockiptext": "Usa le formulario infra pro blocar le accesso de scriptura\na partir de un adresse IP specific.\nIsto debe esser facite solmente pro impedir vandalismo, e de\naccordo con le [[{{MediaWiki:Policy-url}}|politica de {{SITENAME}}]].\nScribe un motivo specific infra (per exemplo, citante paginas\nspecific que ha essite vandalisate).",
"ipaddressorusername": "Adresse IP o nomine de usator:",
"ipb-unblock-addr": "Disblocar $1",
"ipb-unblock": "Disblocar un nomine de usator o un adresse IP",
"ipb-blocklist": "Vider blocadas existente",
- "ipb-blocklist-contribs": "Contributiones de $1",
+ "ipb-blocklist-contribs": "Contributiones de {{GENDER:$1|$1}}",
"unblockip": "Disblocar adresse IP",
"unblockiptext": "Usa le formulario infra pro restaurar le accesso de scriptura\na un adresse IP blocate previemente.",
"ipusubmit": "Cancellar iste blocada",
"import": "Importar paginas",
"importinterwiki": "Importation transwiki",
"import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera preservate.\nTote le actiones de importation transwiki se registra in le [[Special:Log/import|registro de importationes]].",
+ "import-interwiki-sourcewiki": "Wiki de origine:",
+ "import-interwiki-sourcepage": "Pagina de origine:",
"import-interwiki-history": "Copiar tote le versiones del historia de iste pagina",
"import-interwiki-templates": "Includer tote le patronos",
"import-interwiki-submit": "Importar",
"logentry-rights-rights": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3 de $4 a $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|cambiava}} le appertinentia a gruppos pro $3",
"logentry-rights-autopromote": "$1 ha essite automaticamente {{GENDER:$2|promovite}} de $4 a $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|ha incargate}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|ha incargate}} un nove version de $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|ha incargate}} $3",
"rightsnone": "(nulle)",
"feedback-bugornote": "Si tu es preste a describer un problema technic in detalio, per favor [$1 reporta un falta].\nSi non, tu pote usar le formulario facile hic infra. Tu commento essera addite al pagina \"[$3 $2]\", con tu nomine de usator e le navigator del web que tu usa.",
"feedback-subject": "Subjecto:",
"action-pagelang": "cambiar le lingua del pagina",
"log-name-pagelang": "Registro de cambios de lingua",
"log-description-pagelang": "Isto es un registro de cambios de lingua in paginas.",
- "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5."
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|cambiava}} le lingua del pagina $3 de $4 a $5.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activate)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disactivate''')"
}
"לערי ריינהארט",
"PeppeAeco",
"아라",
- "Lucas2"
+ "Lucas2",
+ "Taxandru",
+ "C.R."
]
},
"tog-underline": "Sottolinea i collegamenti:",
"userlogin-resetlink": "Hai dimenticato i tuoi dati di accesso?",
"userlogin-resetpassword-link": "Hai dimenticato la password?",
"userlogin-helplink2": "Aiuto con l'accesso",
- "userlogin-loggedin": "Sei già connesso come {{GENDER:$1|$1}}.\nUsa il modulo sottostante per accedere come altro utente.",
- "userlogin-createanother": "Crea un'altra utenza",
"createacct-emailrequired": "Indirizzo email",
"createacct-emailoptional": "Indirizzo di posta elettronica (opzionale)",
"createacct-email-ph": "Inserisci il tuo indirizzo email",
"createaccount-text": "Qualcuno ha creato un accesso a {{SITENAME}} ($4) a nome di $2, associato a questo indirizzo di posta elettronica. La password per l'utente \"$2\" è impostata a \"$3\".\nÈ opportuno eseguire un accesso quanto prima e cambiare la password immediatamente.\n\nSe l'accesso è stato creato per errore, si può ignorare questo messaggio.",
"login-throttled": "Sono stati effettuati troppi tentativi di accesso in breve tempo.\nAttendi $1 e riprova in seguito.",
"login-abort-generic": "Il tuo login non ha avuto successo - Annullato",
+ "login-migrated-generic": "La tua utenza è stata migrata, e il tuo nome utente non esiste più su questo wiki.",
"loginlanguagelabel": "Lingua: $1",
"suspicious-userlogout": "La tua richiesta di disconnessione è stata negata perché sembra inviata da un browser non funzionante o un proxy di caching.",
"createacct-another-realname-tip": "L'indicazione del proprio nome vero è opzionale; se si sceglie di inserirlo, verrà utilizzato per attribuire la paternità dei contenuti inviati.",
"passwordreset-domain": "Dominio:",
"passwordreset-capture": "Visualizzare il contenuto del messaggio e-mail?",
"passwordreset-capture-help": "Se si seleziona questa casella, l'indirizzo e-mail (con la password temporanea), verrà mostrato a voi, oltre ad essere inviato all'utente.",
- "passwordreset-email": "Indirizzo e-mail:",
+ "passwordreset-email": "Indirizzo email:",
"passwordreset-emailtitle": "Dettagli dell'utente su {{SITENAME}}",
"passwordreset-emailtext-ip": "Qualcuno (probabilmente tu, con indirizzo IP $1) ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
"passwordreset-emailtext-user": "L'utente $1 di {{SITENAME}} ha richiesto l'invio di una nuova password per l'accesso a {{SITENAME}} ($4). {{PLURAL:$3|L'utente associato|Gli utenti associati}} a questo indirizzo email sono:\n\n$2\n\n{{PLURAL:$3|Questa password temporanea scadrà|Queste password temporanee scadranno}} dopo {{PLURAL:$5|un giorno|$5 giorni}}.\nDovresti accedere e scegliere una nuova password ora. \n\nSe non sei stato tu a fare la richiesta, o se ti sei ricordato la password originale e non vuoi più cambiarla, puoi ignorare questo messaggio e continuare al utilizzare la tua vecchia password.",
"showpreview": "Visualizza anteprima",
"showdiff": "Mostra modifiche",
"blankarticle": "<strong>Attenzione:</strong> la pagina che stai creando è vuota.\nCliccando nuovamente su \"{{int:savearticle}}\", la pagina sarà creata senza alcun contenuto.",
- "anoneditwarning": "'''Attenzione:''' Accesso non effettuato. Nella cronologia della pagina verrà registrato il tuo indirizzo IP.",
+ "anoneditwarning": "<strong>Attenzione:</strong> Accesso non effettuato. Se effettuerai delle modifiche il tuo indirizzo IP sarà visibile pubblicamente. Se <strong>[$1 accedi]</strong> o <strong>[$2 crei un'utenza]</strong>, le tue modifiche saranno attribuite al tuo nome utente, insieme ad altri benefici.",
"anonpreviewwarning": "''Non è stato eseguito il login. Salvando la pagina, il proprio indirizzo IP sarà registrato nella cronologia.''",
"missingsummary": "'''Attenzione:''' non è stato specificato l'oggetto di questa modifica. Premendo di nuovo \"{{int:savearticle}}\" la modifica verrà salvata con l'oggetto vuoto.",
"missingcommenttext": "Inserire un commento qui sotto.",
"noarticletext": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora]</span>.",
"noarticletext-nopermission": "In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.",
"missing-revision": "La versione #$1 della pagina \"{{FULLPAGENAME}}\" non esiste.\n\nQuesto si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
- "userpage-userdoesnotexist": "L'account \"<nowiki>$1</nowiki>\" non corrisponde a un utente registrato. Verificare che si intenda davvero creare o modificare questa pagina.",
+ "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'account utente \"$1\" non è registrato.",
"blocked-notice-logextract": "Questo utente è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
"clearyourcache": "'''Nota:''' dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti. \n*'''Firefox / Safari''': tenere premuto il tasto delle maiuscole e fare clic su ''Ricarica'', oppure premere ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' su Mac)\n*'''Google Chrome''': premere ''Ctrl-Shift-R'' (''⌘-Shift-R'' su un Mac)\n*'''Internet Explorer''': tenere premuto il tasto ''Ctrl'' mentre si fa clic su ''Refresh'', oppure premere ''Ctrl-F5''\n*'''Opera''': svuotare completamente la cache dal menu ''Strumenti → Preferenze''",
"permissionserrors": "Permessi non sufficienti",
"permissionserrorstext": "Non si dispone dei permessi necessari ad eseguire l'azione richiesta, per {{PLURAL:$1|il seguente motivo|i seguenti motivi}}:",
"permissionserrorstext-withaction": "Non si dispone dei permessi necessari per $2, per {{PLURAL:$1|il seguente motivo|i seguenti motivi}}:",
- "recreate-moveddeleted-warn": "'''Attenzione: si sta per ricreare una pagina già cancellata in passato.'''\n\nAccertarsi che sia davvero opportuno continuare a modificare questa pagina.\nL'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per comodità:",
+ "recreate-moveddeleted-warn": "<strong>Attenzione: si sta per ricreare una pagina già cancellata in passato.</strong>\n\nAccertarsi che sia davvero opportuno continuare a modificare questa pagina.\nL'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per comodità:",
"moveddeleted-notice": "Questa pagina è stata cancellata. L'elenco delle relative cancellazioni e degli spostamenti viene riportato di seguito per informazione.",
"log-fulllog": "Visualizza log completo",
"edit-hook-aborted": "La modifica è stata annullata dall'hook.\nNon è stata restituita alcuna spiegazione.",
"content-model-css": "CSS",
"expensive-parserfunction-warning": "'''Attenzione:''' Questa pagina contiene troppe chiamate alle parser functions.\n\nDovrebbe averne meno di $2, al momento ce {{PLURAL:$1|n'è $1|ne sono $1}}.",
"expensive-parserfunction-category": "Pagine con troppe chiamate alle funzioni parser",
- "post-expand-template-inclusion-warning": "'''Attenzione:''' la dimensione dei template inclusi è troppo grande.\nAlcuni template non verranno inclusi.",
+ "post-expand-template-inclusion-warning": "<strong>Attenzione:</strong> la dimensione dei template inclusi è troppo grande.\nUnos cantos template no ant a èssere includidos.",
"post-expand-template-inclusion-category": "Pagine per le quali la dimensione dei template inclusi supera il limite consentito",
"post-expand-template-argument-warning": "'''Attenzione:''' questa pagina contiene uno o più argomenti di template troppo grandi per essere espansi. Tali argomenti verranno omessi.",
"post-expand-template-argument-category": "Pagine contenenti template con argomenti mancanti",
"mergehistory-empty": "Nessuna versione da unire.",
"mergehistory-success": "{{PLURAL:$3|Una versione di [[:$1]] è stata unita|$3 versioni di [[:$1]] sono state unite}} alla cronologia di [[:$2]].",
"mergehistory-fail": "Impossibile unire le cronologie. Verificare la pagina e i parametri temporali.",
- "mergehistory-fail-toobig": "Impossibile eseguire l'unione della cronologia con oltre $1 {{PLURAL:$1|revisione|revisioni}} da spostare.",
+ "mergehistory-fail-toobig": "Impossibile eseguire l'unione della cronologia essendoci oltre $1 {{PLURAL:$1|versione|versioni}} da spostare.",
"mergehistory-no-source": "La pagina di origine $1 non esiste.",
"mergehistory-no-destination": "La pagina di destinazione $1 non esiste.",
"mergehistory-invalid-source": "La pagina di origine deve avere un titolo corretto.",
"upload_directory_missing": "La directory di upload ($1) non esiste e non può essere creata dal server web.",
"upload_directory_read_only": "Il server web non è in grado di scrivere nella directory di upload ($1).",
"uploaderror": "Errore nel caricamento",
- "upload-recreate-warning": "'Attenzione'': un file con questo nome è stato cancellato o spostato.'''\nIll log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
+ "upload-recreate-warning": "'Attenzione'': un file con questo nome è stato cancellato o spostato.'''\nIl log delle cancellazioni e degli spostamenti di questa pagina viene qui riportato per comodità:",
"uploadtext": "Usare il modulo sottostante per caricare nuovi file. Per visualizzare o ricercare i file già caricati, consultare il [[Special:FileList|log dei file caricati]]. Caricamenti di file e di nuove versioni di file sono registrati nel [[Special:Log/upload|log degli upload]], le cancellazioni nell'[[Special:Log/delete|apposito]].\n\nPer inserire un file all'interno di una pagina, fare un collegamento di questo tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' per usare la versione completa del file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' per usare una versione larga 200 pixel inserita in un box, allineata a sinistra e con 'testo alternativo' come didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' per generare un collegamento diretto al file senza visualizzarlo",
"upload-permitted": "Tipi di file consentiti: $1.",
"upload-preferred": "Tipi di file consigliati: $1.",
"filesource": "Fonte:",
"ignorewarning": "Ignora l'avviso e salva comunque il file",
"ignorewarnings": "Ignora i messaggi di avvertimento del sistema",
- "minlength1": "Il nome del file dev'essere composto da almeno un carattere.",
+ "minlength1": "Il nome del file dev'essere composto da almeno una lettera.",
"illegalfilename": "Il nome \"$1\" contiene dei caratteri non ammessi nei titoli delle pagine. Dare al file un nome diverso e provare a caricarlo di nuovo.",
"filename-toolong": "I nomi dei file non possono superare i 240 byte.",
"badfilename": "Il nome del file è stato convertito in \"$1\".",
"uploadscriptednamespace": "Questo file SVG contiene un namespace '$1' non consentito",
"uploadinvalidxml": "Il codice XML nel file caricato non può essere elaborato.",
"uploadvirus": "Questo file contiene un virus! Dettagli: $1",
- "uploadjava": "Questo file è un file ZIP che contiene un file .class Java.\nCarica i file Java non è consentito, perché possono causare l'aggiramento delle restrizioni di sicurezza.",
+ "uploadjava": "Questo file è un file ZIP che contiene un file .class Java.\nCaricare i file Java non è consentito, perché possono causare l'aggiramento delle restrizioni di sicurezza.",
"upload-source": "File di origine",
"sourcefilename": "Nome del file di origine:",
"sourceurl": "URL di origine:",
"backend-fail-backup": "Impossibile eseguire il backup del file $1 .",
"backend-fail-notexists": "Il file $1 non esiste.",
"backend-fail-hashes": "Impossibile ottenere hash dei file per confronto.",
- "backend-fail-notsame": "Esiste già un file non identico a $1 .",
+ "backend-fail-notsame": "Esiste già un file non identico a \"$1\".",
"backend-fail-invalidpath": "$1 non è un percorso di archiviazione valido.",
"backend-fail-delete": "Impossibile cancellare il file $1.",
"backend-fail-describe": "Impossibile modificare i metadati del file \"$1\".",
"import": "Importa pagine",
"importinterwiki": "Importazione transwiki",
"import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log/import|log di importazione]].",
+ "import-interwiki-sourcewiki": "Wiki di origine:",
+ "import-interwiki-sourcepage": "Pagina di origine:",
"import-interwiki-history": "Copia l'intera cronologia di questa pagina",
"import-interwiki-templates": "Includi tutti i template",
"import-interwiki-submit": "Importa",
"log-name-pagelang": "Modifiche lingua",
"log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.",
+ "default-skin-not-found": "Oops! La skin predefinita per il tuo wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, non è disponibile.\n\nLa tua installazione sembra includere le seguenti skin. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.\n\n$2\n\n; Se hai appena installato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki.\n\n; Se hai appena aggiornato MediaWiki:\n: MediaWiki 1.24 e versioni successive non abilità più automaticamente le skin installate (vedi [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manuale: rilevamento automatico skin]). Puoi copiare le seguenti linee nel <code>LocalSettings.php</code> per abilitare tutte le skin attualmente installate:\n\n<pre>$3</pre>\n\n; Se hai appena modificato <code>LocalSettings.php</code>:\n: Ricontrolla i nomi delle skin per errori di battitura.",
+ "default-skin-not-found-no-skins": "Oops! La skin predefinita per il tuo wiki (<code>$wgDefaultSkin</code>), <code>$1</code>, non è disponibile.\n\nNon hai skin installate.\n\n; Se hai appena installato o aggiornato MediaWiki:\n: Probabilmente lo hai installato da git, o direttamente dal codice sorgente usando qualche altro metodo. Ciò era previsto. MediaWiki 1.24 e versioni successive non include alcuna skin nel repository principale. Prova ad installare alcune skin dalla [https://www.mediawiki.org/wiki/Category:All_skins directory su mediawiki.org], tramite:\n:* Scaricando il [https://www.mediawiki.org/wiki/Download programma di installazione tarball], che viene fornito con diverse skin ed estensioni. Puoi fare copia ed incolla della directory <code>skins/</code> da lì.\n:* Clonando uno dei repository <code>mediawiki/skins/*</code> tramite git nella directory <code>skins/</code> della tua installazione MediaWiki.\n: In questo modo non dovrebbe interferire con il tuo repository git se sei uno sviluppatore MediaWiki. Vedi [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manuale: configurazione skin] per informazioni su come abilitarle e scegliere quella predefinita.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')"
}
"userlogin-resetlink": "ログイン情報をお忘れですか?",
"userlogin-resetpassword-link": "パスワードをお忘れですか?",
"userlogin-helplink2": "ログインについてのヘルプ",
- "userlogin-loggedin": "{{GENDER:$1|$1}} として既にログインしています。\n別の利用者としてログインするには下のフォームを使用してください。",
- "userlogin-createanother": "別アカウントを作成",
"createacct-emailrequired": "メールアドレス",
"createacct-emailoptional": "メールアドレス (省略可能)",
"createacct-email-ph": "メールアドレスを入力",
"createaccount-text": "誰か (おそらくあなた) が、{{SITENAME}} ($4) にあなたのメールアドレスのアカウントを作成しました。\nアカウント名「$2」、パスワード「$3」です。\n今すぐログインしてパスワードを変更してください。\n\nこのアカウントが何かの手違いで作成された場合は、このメッセージを無視してください。",
"login-throttled": "ログインの失敗が制限回数を超えました。\n$1待ってから再度試してください。",
"login-abort-generic": "ログインに失敗しました - 中止",
+ "login-migrated-generic": "あなたのアカウントは移行が完了しており、その利用者名はこのウィキにはもう存在しません。",
"loginlanguagelabel": "言語: $1",
"suspicious-userlogout": "壊れたブラウザーまたはキャッシュプロキシによって送信された可能性があるため、ログアウト要求は拒否されました。",
"createacct-another-realname-tip": "本名は省略できます。\n入力すると、その利用者の著作物の帰属表示に使われます。",
"showpreview": "プレビューを表示",
"showdiff": "差分を表示",
"blankarticle": "<strong>警告:</strong>作成しようとしているページの内容がありません。{{Int:savearticle}}\"をもう一度クリックすると、中身の無いページが作成されます。",
- "anoneditwarning": "<strong>警告:</strong> ログインしていません。\n編集すると、IPアドレスがこのページの編集履歴に記録されます。",
+ "anoneditwarning": "<strong>警告:</strong> ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。<strong>[$1 ログイン]</strong>または<strong>[$2 アカウントを作成]</strong>すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。",
"anonpreviewwarning": "<em>ログインしていません。投稿を保存すると、ご使用中のIPアドレスがこのページの履歴に記録されます。</em>",
"missingsummary": "<strong>注意:</strong> 編集内容の要約が空欄です。\n「{{int:savearticle}}」をもう一度クリックすると、編集内容は要約なしで保存されます。",
"missingcommenttext": "以下にコメントを入力してください。",
"userlogin-resetlink": "ავტორიზაციის მონაცემები დაგავიწყდათ?",
"userlogin-resetpassword-link": "დაგავიწყდათ პაროლი?",
"userlogin-helplink2": "დახმარება:შესვლა",
- "userlogin-createanother": "სხვა ანგარიშის შექმნა",
"createacct-emailrequired": "ელ. ფოსტის მისამართი",
"createacct-emailoptional": "ელ. ფოსტის მისამართი (არასავალდებულო)",
"createacct-email-ph": "შეიყვანეთ თქვენი ელ. ფოსტის მისამართი",
"userlogin-resetlink": "Қатысушы атын не құпия сөзді ұмыттыңыз ба?",
"userlogin-resetpassword-link": "Құпия сөздіңізді ұмыттыңыз ба?",
"userlogin-helplink2": "Кіруге көмек",
- "userlogin-loggedin": "{{GENDER:$1|$1}} ретінде әлдеқашан кіргенсіз.\nТөмендегі пішінді басқа қатысушы кіруі ретінде қолданыңыз.",
- "userlogin-createanother": "Басқа тіркелгі жасау",
"createacct-emailrequired": "Е-пошта мекен-жайы",
"createacct-emailoptional": "Е-пошта мекен-жайы (міндетті емес)",
"createacct-email-ph": "Е-пошта мекен-жайыңызды енгізіңіз",
"clearyourcache": "<strong>Ескерту:</strong> Сақтағаннан кейін өзгерістерді көру үшін броузеріңіздің бүркемесін (кэшін) тазарту керек болуы мүмкін. \n* <strong>Firefox / Safari:</strong> <em>Қайта жүктеуді</em> нұқығанда <em>Shift</em> басып тұрыңыз немесе <em>Ctrl-F5</em> не <em>Ctrl-Shift-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>Жаңарту</em> батырмасын нұқығанда <em>Ctrl</em> басып тұрыңыз немесе <em>Ctrl-F5</em> басыңыз; не <em>F5</em> басыңыз \n* <strong>Opera:</strong> <em>Құралдар → Бапталымдар</em> дегеннен бүркемесін тазарту керек.",
"usercssyoucanpreview": "<strong>Кеңес:</strong> Жаңа CSS файлыңызды сақтау алдында «{{int:showpreview}}» батырмасын қолданып сынақтаңыз.",
"userjsyoucanpreview": "<strong>Кеңес:</strong> Жаңа JavaScript файлыңызды сақтау алдында «{{int:showpreview}}» батырмасын қолданып сынақтаңыз.",
- "usercsspreview": "</strong>Бұл тек қатысушы CSS файлыңызды қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
+ "usercsspreview": "<strong>Бұл тек қатысушы CSS файлыңызды қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
"userjspreview": "<strong>Мынау JavaScript қатысушы бағдарламасын тынау/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
"sitecsspreview": "<strong>Мынау тек бұл CSS файлын қарап шығуыңыз екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
"sitejspreview": "<strong>Мынау тек бұл JavaScript кодын алдын-ала қарап алу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
"userinvalidcssjstitle": "</strong>Ескерту:</strong> Осы арада «$1» деген еш мәнер жоқ.\nҚалыпты .css және .js беттерінің атауына кіші әріп қолданыңыз, мысалы {{ns:user}}:Foo/vector.css дегенді {{ns:user}}:Foo/Vector.css дегенмен салыстырып қараңыз.",
"updated": "(Жаңартылған)",
"note": "'''Ескерту:'''",
- "previewnote": "</strong>Бұл тек қарап шығу екенін ұмытпаңыз.</strong> \nӨзгертулеріңіз әлі сақталған жоқ!",
+ "previewnote": "<strong>Бұл тек қарап шығу екенін ұмытпаңыз.</strong> \nӨзгертулеріңіз әлі сақталған жоқ!",
"continue-editing": "Өңдеу аумағына өту",
"previewconflict": "Бұл қарап шығу беті жоғарғы кірістіру орнындағы мәтінді қамтиды да және сақталғандағы өңді көрсетпек.",
"session_fail_preview": "<strong>Кешіріңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.</strong>\nҚайта байқап көріңіз. \nЕгер бұл әлі істелмесе [[Special:UserLogout|шығуды]] және қайта кіруді байқап көріңіз.",
"관인생략",
"아라",
"Keysuck",
- "Infinity"
+ "Infinity",
+ "Bluemersen"
]
},
"tog-underline": "링크에 밑줄:",
"tog-watchdefault": "내가 편집하는 문서와 파일을 주시문서 목록에 추가",
"tog-watchmoves": "내가 이동하는 문서와 파일을 주시문서 목록에 추가",
"tog-watchdeletion": "내가 삭제하는 문서와 파일을 주시문서 목록에 추가",
+ "tog-watchrollback": "내가 되돌리기 기능을 사용한 문서를 주시문서 목록에 추가",
"tog-minordefault": "모든 편집에 기본적으로 사소한 편집을 표시",
"tog-previewontop": "편집 상자 앞에 미리 보기 보이기",
"tog-previewonfirst": "처음 편집할 때 미리 보기 보이기",
"userlogin-resetlink": "로그인 정보를 잊으셨나요?",
"userlogin-resetpassword-link": "비밀번호를 잊으셨나요?",
"userlogin-helplink2": "로그인에 대한 도움말",
- "userlogin-loggedin": "이미 {{GENDER:$1|$1}} 사용자로 로그인되어 있습니다.\n다른 사용자로 로그인하려면 아래의 양식을 사용하세요.",
- "userlogin-createanother": "다른 계정 만들기",
"createacct-emailrequired": "이메일 주소",
"createacct-emailoptional": "이메일 주소 (선택 사항)",
"createacct-email-ph": "이메일 주소를 입력하세요",
"editinguser": "Modificare potestates usoris '''[[User:$1|$1]]''' $2",
"userrights-editusergroup": "Greges usorum recensere",
"saveusergroups": "Greges usorum servare",
- "userrights-groupsmember": "In grege aut in gregibus:",
+ "userrights-groupsmember": "{{PLURAL:$1|In grege|In gregibus}}:",
"userrights-reason": "Causa:",
"userrights-changeable-col": "Greges quos tibi oportet mutare",
"userrights-unchangeable-col": "Greges quos tibi non oportet mutare",
"userlogin-resetlink": "Hutt Dir d'Detailer vun Ärem Login vergiess?",
"userlogin-resetpassword-link": "Hutt Dir Äert Passwuert vergiess?",
"userlogin-helplink2": "Hëllef beim Aloggen",
- "userlogin-loggedin": "Dir sidd schonn als {{GENDER:$1|$1}} ageloggt.\nBenotzt de Formulaire hei drënner fir Iech als een anere Benotzer anzeloggen.",
- "userlogin-createanother": "Maacht een anere Benotzerkont op",
"createacct-emailrequired": "E-Mail-Adress",
"createacct-emailoptional": "E-Mailadress (fakultativ)",
"createacct-email-ph": "Gitt Är E-Mail-Adress an",
"createaccount-text": "Et gouf e Benotzerkont \"$2\" fir Iech op {{SITENAME}} ($4) ugeluecht mat dem Passwuert \"$3\".\nDir sollt Iech aloggen an Äert Passwuert elo änneren.\n\nWann dëse Benotzerkont ongewollt ugeluecht gouf, kënnt Dir dës Noriicht einfach ignoréieren.",
"login-throttled": "Dir hutt zevill dacks versicht Iech anzeloggen.\nWaart w.e.g. $1 ier Dir et nach eng Kéier probéiert.",
"login-abort-generic": "Dir sidd net ageloggt - Aloggen ofgebrach",
+ "login-migrated-generic": "Äre Benotzerkont gouf migréiert an Äre Benotzernumm gëtt et net méi op dëser Wiki.",
"loginlanguagelabel": "Sprooch: $1",
"suspicious-userlogout": "Är Ufro fir Iech auszeloggen gouf refuséiert well et sou ausgesäit wéi wa se vun engem futtise Browser oder Proxy-Tëschespäicher kënnt.",
"createacct-another-realname-tip": "De richtegen Numm ass fakultativ.\n\nWann Dir en ugitt, gëtt e benotzt fir d'Benotzerattributiounen fir Är Aarbecht zouzeuerdnen.",
"showpreview": "Kucken ouni ofzespäicheren",
"showdiff": "Ännerunge weisen",
"blankarticle": "<strong>Opgepasst:</strong> D'Säit déi Dir uleet ass eidel.\nWann Dir nach eng Kéier op \"{{int:savearticle}}\" klickt, da gëtt d'Säit ugeluecht.",
- "anoneditwarning": "'''Opgepasst:''' Dir sidd net ageloggt. Dowéinst gëtt amplaz vun engem Benotzernumm Är IP Adress am Historique vun dëser Säit gespäichert.",
+ "anoneditwarning": "<strong>Opgepasst:</strong> Dir sidd net ageloggt. Dowéinst gëtt amplaz vun engem Benotzernumm Är IP Adress ëffentlech gewise wann Dir Ännerunge maacht. Wann Dir <strong>[$1 Iech aloggt]</strong> oder <strong>[$2 e Bnotzerkont opmaachen]</strong>, Är Ännerunge ginn dann Ärem Benotzerkont zougedeelt, genee wéi aner Avantagen.",
"anonpreviewwarning": "''Dir sidd net ageloggt. Wann Dir ofspäichert gëtt Är IP-Adress an der Lëscht vun de Versioune vun dëser Säit enregistréiert.''",
"missingsummary": "'''Erënnerung:''' Dir hutt kee Resumé aginn.\nWann Dir nacheemol op \"{{int:savearticle}}\" klickt, gëtt Är Ännerung ouni Resumé ofgespäichert.",
"missingcommenttext": "Gitt w.e.g. eng Bemierkung an.",
"revdelete-selected-file": "{{PLURAL:$1|Erausgesicht Versioun|Erausgesicht Versioune}} vum Fichier vu(n) [[:$2]]:",
"logdelete-selected": "Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:",
"revdelete-text-text": "Geläscht Versioune bleiwen am Historique vun der Säit, awer Deeler vun hirem Inhalt sinn net ëffentlech zougänglech.",
+ "revdelete-text-file": "Geläscht Versioune vu Fichiere bleiwen am Historique vum Fichier awer Deeler vun hirem Inhalt sinn net ëffentlech zougänglech.",
"revdelete-text-others": "Aner Administrateure kënnen nach ëmmer de verstoppten Inhalt gesinn an en nees restauréieren, ausser wann zousätzlech Limitatiounen agestallt sinn.",
"revdelete-confirm": "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.",
"revdelete-suppress-text": "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:\n* Informatiounen déi beleidege kéinten\n* Net ubruechte perséinlechen Informatiounen\n*: ''Adressen, Telefonsnummeren, Sozialversécherungsnummeren asw.''",
"trackingcategories-msg": "Tracking-Kategorie",
"trackingcategories-name": "Numm vum Message",
"noindex-category-desc": "D'Säit gëtt net vu Botten indexéiert, well dat magescht Wuert <code><nowiki>__NOINDEX__</nowiki></code> dran ass a well se an engem Nummraum ass, an deem déi Markéierung erlaabt ass.",
+ "index-category-desc": "D'Säit huet <code><nowiki>__INDEX__</nowiki></code> an ass an engem Nummraum, wou déi Markéierung erlaabt ass an dofir gëtt d'Säit vu Sichroboter indexéiert wou dat normalerweis net de Fall wier.",
"post-expand-template-inclusion-category-desc": "D'Säit ass méi grouss wéi <code>$wgMaxArticleSize</code> nom expandéiere vun alle Schablounen, dofir goufen e puer Schablounen net expandéiert.",
"broken-file-category-desc": "D'Säit huet e futtise Link op e Fichier (e Link op en agebonnene Fichier wann et de Fichier net gëtt).",
"hidden-category-category-desc": "D'Kategorie huet <code><nowiki>__HIDDENCAT__</nowiki></code> an hirer Säit drastoen, dat verhënnert datt se standardméisseg an der Këscht mat de Kategorielinken op der Säit gewise gëtt.",
"import": "Pazjena's importere",
"importinterwiki": "Transwiki-import",
"import-interwiki-text": "Selecteer 'ne wiki en pazjenanaam om te importere.\nVersie- en auteursgegaeves blieve hiej bie bewaard.\nAlle transwiki-importhanjelinge waere opgeslage in 't [[Special:Log/import|importlogbook]].",
- "import-interwiki-source": "Bronwiki/pagina:",
"import-interwiki-history": "Volledige gesjiedenis van deze pazjena ouch kopiëre",
"import-interwiki-templates": "Alle sjablone opnaeme",
"import-interwiki-submit": "Importere",
"htmlform-selectorother-other": "Anges",
"sqlite-has-fts": "Zeuk versie $1 mit óngersteuning veur \"full-text\"",
"sqlite-no-fts": "Zeuk versie $1 zónger óngersteuning veur \"fulltext\"",
- "logentry-delete-delete": "$1 haef de pagina $3 gewösj",
+ "logentry-delete-delete": "$1 {{GENDER:$1|haet}} de pagina $3 gewösj",
"logentry-delete-restore": "$1 haet de pagina $3 trögkgezat",
"logentry-delete-event": "$1 haet de zichbaarheid van {{PLURAL:$5|'ne logbookregel|$5 logbookregels}} van $3 gewiezig: $4",
"logentry-delete-revision": "$1 haet de zichbaarheid van {{PLURAL:$5|'n versie|$5 versies}} van $3 gewiezig: $4",
"userlogin-resetlink": "جزییات وامین اومائن تونه د ویر بردیته",
"userlogin-resetpassword-link": "پاسورد د ویرتو رئته؟",
"userlogin-helplink2": "هومیاری وا مین اومائن",
- "userlogin-loggedin": "شما ایسه د عنوان {{جنس:$1|$1}} اومایته وا مین.\nد فرم هاری سی وا مین اومائن وه عنوان کاریار هنی استفاده بکیتو.",
- "userlogin-createanother": "يه گل حساوهنی راست بكيد",
"createacct-emailrequired": "نشونی ايميل",
"createacct-emailoptional": "نشونی ايميل",
"createacct-email-ph": "نوم نشون ايميلتونه وارد بكيت",
"createaccount-text": "یه نفر وا تیرنشون انجونامه تو یه گل حساو راس کرده{{نوم دیارگه}} ($4) نومشه نیائه\"$2\", با پاسورد \"$3\".\nشما همی ایسه باید روئیت وامین و پاسوردتونه آلشت بکیت.\n\nار شما ای پیغوم نه وش التفات نکیت، د راس بیین ای حساو خطا دروس موئه.",
"login-throttled": "شما ایسنی فره سی وامین اومائن تلاش کردیته.\n$1 لطفن سی تلاش هنی صبر بکید",
"login-abort-generic": "اومائن وامین تو شکست حرد-شکست حرده",
+ "login-migrated-generic": "حساو کاریاری شما جا وه جا بیه، و نوم کاریاری شما دیه د ای ویکی نیئش.",
"loginlanguagelabel": "زون:$1",
"suspicious-userlogout": "درحاست وه در رئتن شما انکار بیه سی یه کل وه نظر میا که د یه گل دووارته نیئر گن یا یه گل پروکسی که ها د ویرگه نهو کل بیه",
"createacct-another-realname-tip": "نوم راستکی دل به حائه.\nار شما وه نه نهااماییه بکیت، یه سی هوم نسبت دئن وه کاریار سی کاریاش استفاده بوئه.",
"showpreview": "پيش نمائش نشون بيئه",
"showdiff": "آلشتيانه نشون بيئه",
"blankarticle": "<strong>زنئار:</strong> بلگه ای که شما دروس کردیته حالیه.\nار شما د نو ری \"{{int:savearticle}}\" بپورنیت, بلگه وه شکل که هیچ مینونه ای دش نبا دروس بوئه.",
- "anoneditwarning": "زنهار شما وامین نیومایته.\nنشونی آی پی تو د ویرگار ویرایشت ای بلگه ضفط بوئه",
+ "anoneditwarning": "<strong>زئنار:</strong> شما هنی نیوماته وامین. تیرنشون آی پی شما هر گاتی که آلشتی راس بکیت سی کل خلک دیاره. ار <strong>[$1 روئیت وامین]</strong> یا <strong>[$2 یه گل حساو کاریاری راس بکیت]</strong>، ویرایشتیا شما وه نوم کاریاری خوتون دیاری می که، و وا چیا بیتر هنی.",
"anonpreviewwarning": "<em>شما نیومائته وامین. تیرنشون آی پی شما د ویرگار ویرایشت ای بلگه اماییه بوئه.</em>",
"missingsummary": "<strong>د ویر ونا:</strong> شما هنی یه گل چکسته ویرایشتی نها اماییه نکردیته.\nار شما د نو د ری\"{{int:savearticle}}\" بپورنیت, ویرایشت شما حالی اماییه بوئه.",
"missingcommenttext": "لطفن د ایچه نظر بیئتو",
"yournick": "امضا تازه:",
"prefs-help-signature": "ویر و باوریا نیسسه بیه د بلگه چک چنه باید وا«<nowiki>~~~~</nowiki>» امضا بان؛ ای نشون وه شکل خودانجومی وه امضا شما و مؤر ویرگار تبدیل بوئه.",
"badsig": "امضا خؤم بی اعتوار.\nسردیسیا اچ تی ام ال نه وارسی بکیت.",
+ "badsiglength": "امضا شما فره گپه.\nطیل امضا باید کمتر د $1 {{PLURAL:$1|نیسه}} بوئه.",
"yourgender": "شما بیشتر میهایت که چه جوری گوته بوئه؟",
"gender-unknown": "مه میهام چی یی نموئم",
"gender-male": "وه(پیا) بلگه یا ویکی نه ویرایشت می که",
"gender-female": "وه(زئنه)بلگه یا ویکی نه ویرایشت می که",
+ "prefs-help-gender": "انجوم دئن ای میزونکاری دل به هاییه.\nنرم افزار سی هشاره درست وه جنسیت و گوتن شما سی کسونا تر د شکل درست وه کار بسن یه گل دستور زون یه نه وه کار می بنه.\nای دونسمنیا سی کل خلک دیارن.",
"email": "پیومک برقی",
+ "prefs-help-realname": "نوم راستکی دل به حائه.\nار شما ونه وارد بکیت د گات واگردونی وه آرنگیاتو و نسوت دئن ونو وه خوتو د نوم راستکی استفاده بوئه.",
"prefs-help-email": "نشونی ایمیل اختیاری هئ.اما سی بازجست پاسورد دش نیاز بوئه.شما باید پاسوردتونه د ویر بوریت",
"prefs-help-email-others": "شما می تونید سی پیوند گرتن تو وا نهایین ایمیل مئن یه هوم پیوند د بلگه کاروری یا بلگه چک چنه تو انتخاو بکید.\nنشونی ایمیلتو وختی که کاروریا هنی وا تو پیوند می گرن دیار نی.",
"prefs-help-email-required": "نشونی ایمیل لازم هئ.",
"prefs-displaywatchlist": "گزینه یا نه نشو بیه",
"prefs-tokenwatchlist": "نشو",
"prefs-diffs": "فرخیا",
+ "prefs-help-prefershttps": "کارگرایی ای ترجیح نها وامین اومائن نهایی شما وه کار گرته بوئه.",
+ "prefs-tabs-navigation-hint": "نکته: شما می تونید د کلیتیا لادیار کن چپ و راست نه سی رئتن مین تبیا که هان د نوم گه تبیا وه کار بونیت.",
"email-address-validity-valid": "نشونی ایمیل دیار بیه خوئه",
"email-address-validity-invalid": "یه گل نشونی ایمیل خو وارد بکید",
"userrights": "حقوق دیوونداری کاریار",
"userrights-lookup-user": "دسه یا کاروری نه دیوون داری بکیت",
"userrights-user-editname": "نوم كاروری ته وارد كو",
"editusergroup": "ویرایشت گرویا کاروری",
+ "editinguser": "آلشت دئن حقوق کاریاری کاریار'''[[کاریار:$1|$1]]''' $2",
"userrights-editusergroup": "ویرایشت گرویا کاروری",
"saveusergroups": "اماییه کردن گرویا کاریاری",
"userrights-groupsmember": "اندوم:",
+ "userrights-groupsmember-auto": "اندوم ضمنی:",
+ "userrights-groups-help": "شما می تونیت دسه یای که ای کاریار ها دشو آلشت بئیتو:\n* جعوه نشودار وه ای مئنیه که کاریار ها د او دسه.\n* جعوه بی نشون وه ای مئنیه که کاریار د او دسه نئ.\n* نشون* د ای مئنیه که ار شما او دسه نه اضاف بکیتو د نهاتر نموئه ؤردارینش یا برعسگش.",
"userrights-reason": "دليل:",
"userrights-no-interwiki": "شما سی ویرایشت حقوق کارور د ویکی یا هنی دسرسی ناریت.",
"userrights-nodatabase": "پاگا دونسمنی $1 یا نیئش یا د ولاتنشین نئ.",
+ "userrights-nologin": "شما باید وا یه گل حساو کاریاری دیووندار [[Special:UserLogin|روئیت وامین ]] تا تونستوییت حقوق کاریاری کاریار نه گماشته کاری بکیت.",
"userrights-notallowed": "شما سی اضاف کردن حقوق کارور یا ورداشتنش دسرسی ناریت.",
"userrights-changeable-col": "گرویایی که شما تونیت ویرایشت بکید",
"userrights-unchangeable-col": "گرویایی که شما نتونیت ویرایشت بکید",
+ "userrights-conflict": "تعارض دسرسیا کاریاری! لطف بکیت یه گل وارسی انجوم بئیت و آلشتانه پشت راس بکیت.",
"userrights-removed-self": "شما د خوئی حقوق خوتونه ؤرداشتیته، چی یه که مثلا شما تر نمی تونیت وه ای بلگه دسرسی داشتویت.",
"group": "گرو",
"group-user": "کاروریا",
"right-movefile": "فایلیا نه جا وه جا کو",
"right-suppressredirect": "اوسه که بلگه یا د بین رئتنه هیچ واگردونی سی بلگه یا سرچشمه دروس نبیه",
"right-upload": "سوار کردن فايلا",
+ "right-reupload": "سوارکرد هنی جانیایی که دماتر بئیشه",
+ "right-reupload-own": "سوارکرد هنی جانیایی که د دماتر وه دس همو کاریار سوارکرد بیه.",
+ "right-reupload-shared": "باطلکردن ولات نشینی جانیایا هومبئر بیه",
"right-upload_by_url": "سوار کرد فایلیا د یو آر ال",
+ "right-purge": "پاک کردن مینجاگر بلگه بی یه که بلگه پشت راس کردن دیاری بکه",
+ "right-autoconfirmed": "د محدودیتیا سرعت آی پی-پایه کارگرایی ناره",
+ "right-bot": "باور بیه چی یه گل پردازشت خودانجوم",
+ "right-nominornewtalk": "حیرده ویرایشت بلگه یا چک چنه وه شکلی که باعث گوتن پیغوم تازه نبوئه.",
+ "right-apihighlimits": "سخم بالاتر د وه کار بسن API",
"right-writeapi": "د نیسنن ای پی آی استفاده بکید",
"right-delete": "بلگیا نه پاکسا کو",
"right-bigdelete": "بلگه یایی که ویرگار گپی دارن پاکسا بکیت",
+ "right-deletelogentry": "پاکسا کردن و ناپاکسا کردن داده واریایی ویجه ای د پهرستنومه",
+ "right-deleterevision": "پاکساکردن و ناپاکساکردن وانئریا ویجه ای د بلگه یا",
+ "right-deletedhistory": "دیئن چیا پاکسا بیه د ویرگار، بی یه که نیسسه ونونه بؤنیت.",
+ "right-deletedtext": "دیئن نیسسه پاکسا بیه و آلشتیایی که هان مینجا وانئریا پاکسا بیه",
"right-browsearchive": "بلگه یا پاک بیه نه پی جوری کو",
"right-undelete": "ای بلگه نه حذف نكيد",
+ "right-suppressrevision": "دیئن و زنه کردن وانئریایی بلگه یایی که د دس کاریاریا نهو بینه",
"right-viewsuppressed": "دیئن وانئریایی که د تیه هر کاریاری قام بیه",
"right-suppressionlog": "دیئن پهرستنومه یا خصوصی",
"right-block": "کاریاریا هنی د ویرایشت منع بوئن",
"right-blockemail": "کاریار نه د کل کردن انجومانامه منع کو",
"right-hideuser": "قلف کردن یه گل نوم کاریاری،قام کردن وه د ور تیه کل خلک",
+ "right-ipblock-exempt": "کارگرایی نگرتن د قطع دسرسیا آی پی، خودانجوم یا فاصله دار",
+ "right-proxyunbannable": "کارگرایی نگرتن د قطع دسرسی خودکار پروکسیا",
"right-unblockself": "خوشه قلف نکید",
+ "right-protect": "آلشت دئن انازه پر و پیم کردن بلگه یا و ویرایشت بلگه یا پر و پیم بیه تافی",
+ "right-editprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-sysop}}»",
+ "right-editsemiprotected": "ویرایشت بلگه یا پر و پیم بیه چی «{{int:protect-level-autoconfirmed}}»",
"right-editinterface": "راوط کارور نه ویرایشت کو",
"right-editusercssjs": "فایلیا جاوا اسکریپت و سی اس اس کاروریا هنی نه ویرایشت کو",
"right-editusercss": "فایلیا سی اس اس کاروریا هنی نه ویرایشت کو",
"right-editmyusercss": "فایلیا سی اس اس کارور خوتو نه ویرایشت کو",
"right-editmyuserjs": "فایلیا جاوا اسکریپت کارور خوتو نه ویرایشت کو",
"right-viewmywatchlist": "سیل برگ خوتونه بوینیت",
+ "right-editmywatchlist": "سیل برگ خوتونه ویرایشت بکیت. د ویرتو با که پاره ای د انجومکاریا بی دسرسی ئم می تونن ای بلگه یا نه اضافه بکن.",
"right-viewmyprivateinfo": "دونسمنیا شصقی خوتونه بوینیت(چی نشونی ایمیل،نوم راستکی)",
"right-editmyprivateinfo": "دونسمنیا شصقی خوتونه ویرایشت بکید(چی نشونی ایمیل،نوم راستکی)",
"right-editmyoptions": "اولویتیا تونه ویرایشت بکیت",
+ "right-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه",
+ "right-markbotedits": "نشودار کردن ویرایشتیا چواشه بیه چی ویرایشتیا یه گل بات",
+ "right-noratelimit": "کارگرا نبیئن د محدودیت سرعت",
"right-import": "بلگه یا نه د ویکی هنی وارد بکید",
"right-importupload": "دئن بلگه یا د یه گل جانیا سوار بیه",
+ "right-patrol": "سردیاری کردن د ویرایشتیا کسونا تر",
+ "right-autopatrol": "سردیاری کردن خودانجوم د ویرایشتیا خوش",
+ "right-patrolmarks": "دیئن سردیس سردیاری کردن د آلشتیا ایسنی",
"right-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
+ "right-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
"right-userrights": "حقوق همه کاروریانه ویرایشت بکید",
"right-userrights-interwiki": "حقوق همه کاروریانه د ویکی یا هنی ویرایشت بکید",
"right-siteadmin": "پاگا دونسمنی نه قلف بکید یا نکید",
+ "right-override-export-depth": "وه در دئن بلگه یایی که بلگه یا هوم پیوند بیه تا پی یا 5 ها دشو",
"right-sendemail": "سی کاروریا هنی ایمیل کل بکید",
"right-passwordreset": "پاسورد ایمیلیا د نو دئه بیه نه بوینیت",
"newuserlogpage": "راس بیه وا کارور",
"action-move-categorypages": "جا وه جا کردن دسه بلگه یا",
"action-movefile": "ای فایل جا وه جا بکید",
"action-upload": "ای فایل سوار بکید",
+ "action-reupload": "نیسئین ری جانیا ایسنی",
+ "action-reupload-shared": "باطل کردن ای جانیا ری یه گل گنجینه هومبئر",
"action-upload_by_url": "ای فایله نه د یو آر ال سوار بکید",
"action-writeapi": "د نیسنن ای پی آی استفاده بکید",
"action-delete": "ای بلگه نه پاکسا کو",
"action-deletedhistory": "ویرگار پاکسا بیه ای بلگه نه بوینیت",
"action-browsearchive": "بلگه یا پاک بیه نه پی جوری بکید",
"action-undelete": "ای بلگه نه پاک نکو",
+ "action-suppressrevision": "وانئری و زنه کردن وانئریا پاک بیه",
"action-suppressionlog": "ای پهرستنومه خصوصی نه بوینیت",
"action-block": "ای کارور نه د ویرایشت کردن منع کو",
"action-protect": "ریترازیا حفاظت د ای بلگه نه آلشت بکید",
+ "action-rollback": "چواشه کردن سریع ویرایشتیا آخری کاریاری که یه بلگه ویجه نه ویرایشت دئه",
"action-import": "بلگه یا نه د ویکی هنی وارد بکید",
"action-importupload": "بلگه یا نه د فایل سوار بیه وارد بکید",
+ "action-patrol": "سردیاری کردن د ویرایشتیا کسونا تر",
+ "action-autopatrol": "سردیاری کردن د ویرایشتیا خوتو",
"action-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
"action-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
"action-userrights": "حقوق همه کاروریانه ویرایشت بکید",
"enhancedrc-history": "ويرگار",
"recentchanges": "تغيريا تازه",
"recentchanges-legend": "گزينه يا آلشتيا تازه",
+ "recentchanges-summary": "دو بیشتر آلشتیا تازباو نه د ویکی نه د ای بلگه پیگری کو.",
+ "recentchanges-noresult": "هیژ آلشتی د طیل دوره دیار بیه وا ای معیاریا یکی نبی.",
"recentchanges-feed-description": "دو بیشتر آلشتیا تازباو نه د ویکی که ها د هوال حون پیگری کو.",
"recentchanges-label-newpage": "ای ويرايشت يه بلگه تازه راس كرده",
"recentchanges-label-minor": "يه ويرايشت كؤچكيه",
"upload": "بلم گير كردن فايلا",
"uploadbtn": "سوار کردن فایل",
"reuploaddesc": "سوار کردن نه انجوم شیو بکیت و د ورئردیت جابلگ سوارکرد",
+ "upload-tryagain": "کل کردن توضیحیا آلشت دئیه بیه جانیا",
"uploadnologin": "وارد نبیه",
"uploadnologintext": "لطفن $1 سی سوارکرد جانیایا.",
+ "upload_directory_missing": "نشونگه سوارکرد ($1) وجود ناره و نبوئه دروسش بکی.",
+ "upload_directory_read_only": "نشونگه سوارکرد($1) د لا سرور قاول نیسنن نئ.",
"uploaderror": "خطا د سوار کردن",
+ "upload-recreate-warning": "'''زئنار: جانیایی که وه ای نومه یا پاکسا بیه یا جا وه جا بیه.'''\n\nسی رائتی، نومگه پاکساگری و جا وه جا کردن ای بلگه ها د هار:",
+ "uploadtext": "دسی دئین جانیایی که د دماتر سوار بینه روئیت وه [[Special:FileList|نوم گه جانیایا]] . د نو سوارکردن د [[Special:Log/upload|نوم گه سوارکردیا]] و پاکساگری جانیایا د [[Special:Log/delete|deletion log]] جاگئر موئه.\n\nنها یه که یه گل جانیانه سوار کردیت می تونیت د سه شکل هاری وه نه د بلگه یا وه کار بونیت:\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' سی به کار بسن نسقه کامل جانیا\n*'''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' سی به کار بسن یه گل نسقه 200 پیکسلی د جانیایی که ها د مینه یه گل جعوه که ها د لا چپ نیسسه که د وه عبارت alt text چی توضیح وه کار بسه بیه\n*'''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' سی دروس کردن یه گل هوم پیوند سرراست وه جانیا بی یه که جانیا دیاری بکه نوم بلگه هاری سی سوارکرد جانیایا تازه استفاده بکیت.",
"upload-permitted": "جورا جانیا مجاز:$1.",
"upload-preferred": "جورا جانیا مجاز:$1.",
"upload-prohibited": "جورا جانیا مجاز:$1.",
"uploadlogpage": "سوارکرد",
+ "uploadlogpagetext": "نومگه هاری یه گل نومگه د آخری سوارکرد جانیایا هئ.\nسی د نو سیل کردن[[Special:NewFiles|عسگدونی جانیایا تازه نه]] به ونیت.",
"filename": "نوم فایل",
"filedesc": "چكسته",
"fileuploadsummary": "چکسه",
"filereuploadsummary": "آلشتیا فایل:",
"filestatus": "حال و بال کپی رایت",
"filesource": "سرچشمه:",
+ "ignorewarning": "تیه پوشی د زئنار و اماییه کردن جانیا",
"ignorewarnings": "د هر زنهار تیه پوشی کو",
+ "minlength1": "نوم جانیا باید حداقل یه حرف داشتوئه.",
+ "illegalfilename": "نوم جانیا «$1» د وه گیرنه نیسه یایی که د نوم بلگه یا صاحاو اجاره نیئن.\nلطفن نوم جانیا نه آلشت بئیت و ونه د نو نوم بنیت.",
"filename-toolong": "نوم جانیا شایت گپتر د 240 بایت نبا.",
"badfilename": "نوم جانیا د \"$1\" آلشت بیه.",
+ "filetype-mime-mismatch": "دماون جانیا «$1.» وا نوع MIME وه($2) یکی نئ.",
+ "filetype-badmime": "جانیایی که نوع MIME ونو $1 بوئه سی سوارکرد اجازه دار نیئن.",
+ "filetype-bad-ie-mime": "نبوئه ای جانیانه سوار بکیت سی یه که اینترنت اکسپلورر ونه چی «$1» میشناسه، سی یه که وه یه گل جانیا ناصلادار و شات خطردار با.",
+ "filetype-unwanted-type": "'''«.$1»''' یه گل جانیا حاستنی نئ.\n{{PLURAL:$3|جانیا ورتیه گر|جانیایا ورتیه گر}} د ای قرارن: $2 .",
+ "filetype-banned-type": "‎'''\".$1\"''' {{PLURAL:$4|یه گل جانیا ناصلاداره|جانیایایی که صلادار نیئن}}.\n{{PLURAL:$3|جانیا صلادار|جانیایا صلادار}} د ای قرارن: $2.",
+ "filetype-missing": "ای جانیا هیچ اضاف کردی ناره(چی \"جی پی جی\")",
"empty-file": "فایلی که دئی ته حالی بیه.",
"file-too-large": "فایلی که دئی ته فره گپ بی.",
"filename-tooshort": "نوم فایل فره کؤچکه.",
"filetype-banned": "چنی جانیا قدقه بیه.",
+ "verification-error": "جانیا د ازمایشت پشت راسگری نگوارد.",
+ "hookaborted": "آلشتی که میهاستیت دروس بکیت وا یه گل قلاو اضاف کرد انجوم نگرت.",
"illegal-filename": "نوم فایل اجاره ندئه بیه.",
+ "overwrite": "نیسنن ری یه گل جانیایی که هیئش صلا ندئه بیه",
"unknown-error": "یه گل خطا نادیار ری ون کرده.",
"tmp-create-error": "نبوئه جانیا موقتی نه راس بکیتو.",
"tmp-write-error": "خطا د نیسنن جانیا موقتی.",
+ "large-file": "د تو میهایم که جانیایا د $1 گپتر نبان؛\nانازه ای جانیا $2 ئه.",
+ "largefileserver": "ای جانیا د انازه ای که د وه سرور میزونکاری بیه تا ونه بیئره گپتره.",
+ "emptyfile": "جانیایی که سوار بیه د نظر میا حالی با.\nای مشگل شایت سی خطا انجومیار نویسی د نوم جانیا با.\nلطف بکید که یه نه وارسی بکیت که میهایت ونه وا ای شرایط سوار بکیت.",
+ "windows-nonascii-filename": "ای ویکی حامین دار نوم جانیایا که نیسه یا خاصی نه دارن نئ.",
+ "fileexists": "جانیایی وا ای نوم ایسه هیئش، ار دل مئکم {{GENDER:|نیئت}} که میهایت او جانیا نه آلشت بکیت، لطفن <strong>[[:$1]]</strong> نه وارسی بکیت.\n[[$1|thumb]]",
+ "filepageexists": "بلگه توضیح سی ای جانیا د دماتر د <strong>[[:$1]]</strong> دروس بیه، اما جانیایی وه ای نوم نیئش.\nچکسه ای که وارد می کیت د بلگه توضیح نشو دئه نبوئه.\nسی یه که چکسه شما نشو دئه بوئه، باید ونه وه شکل دسی ویرایشت بکیت.\n[[$1|thumb]]",
+ "fileexists-extension": "جانیایی وه نوم چی ای نوم هیئش: [[$2|thumb]]\n* نوم جانیایی که سوار می کردیت: <strong>[[:$1]]</strong>\n* نوم جانیایی که د دماتر بیئشه: <strong>[[:$2]]</strong>\nمیهایت د یه گل نوم دیارتر استفاده بکیت؟",
+ "fileexists-thumbnail-yes": "د ویر و باور میا که ای جانیا، یه گل عسگ کؤچک بیه (''بن کلیکی'' یا ''thumbnail'') بوئه.\n[[$1|thumb]]\nلطفن جانیا<strong>[[:$1]]</strong> نه وارسی بکیت.\nار جانیایی که وارسی کردیت، همی عسگ د انازه خوشه، نمیحا یه عسگ بن کلیکی اضاف بکیت.",
+ "file-thumbnail-no": "نوم جانیا وا <strong>$1</strong> شرو موئه.\nد ویر و باور میا که ای جانیا، یه گل عسگ ''بندانگشتی'' ''(thumbnail)'' د عسگ گپتر و اصلی با.\nار عسگ وا انازه اصلی نه داریت، ونه سوار بکیت؛ ونه ، نوم جانیا نه آلشت بئیت.",
+ "fileexists-forbidden": "د ایسنی، جانیایی وه همی نوم هیئش، و نبوئه ری نوشت با.\nار هنی میهایت که جانیا خوتونه سوار بکیت، لطفن ؤرئیردیت و یه گل نوم هنی نه بونیت وه کار.\n[[File:$1|thumb|center|$1]]",
+ "fileexists-shared-forbidden": "د ایسنی، جانیایی وا همی نوم د امماره هومبئری جانیایا هیئش.\nار هنی میهایت جانیاتونه سوار بکیت، لطفن ؤرئردیت و جانیا خوتونه وا نوم هنی سوار بکیت.\n[[File:$1|thumb|center|$1]]",
+ "file-exists-duplicate": "د ویر و باور میا که ای جانیا یه گل نسقه تکراری د {{PLURAL:$1|جانیا|جانیایا}} هاری با:",
+ "file-deleted-duplicate": "یه گل جانیا چی ای جانیا([[:$1]]) د دماتر پاکسا بیه.\nشما واس ویرگارچه پاکسا بیین او جانیانه دما یه که میهایت سوارش بکیت به ونیت.",
+ "file-deleted-duplicate-notitle": "یه گل جانیا هومبراور وا ای جانیا د دماتر پاکسا بیه و عنوانش پاکساگری بیه.\nشما باس د کسی که د دیئن جانیا پاکساگری بیه دسرسی داره، بهایت که شرایط نه دما سوارکردن هنی وارسی بکه.",
"uploadwarning": "هشدار سوارکرد",
+ "uploadwarning-text": "لطف بکیت توضیحات جانیا هاری نه آلشت بئیت و د نو تلاش بکیت.",
"savefile": "جانیا نه اماییه کو",
"uploaddisabled": "سوار کردن د کار نئ.",
"copyuploaddisabled": "سوار کردن وا یو آر ال د کار نئ.",
"uploaddisabledtext": "سوار کرد فایلیا د کار نئ.",
+ "php-uploaddisabledtext": "سوارکرد جانیایا د پی اچ پی ناکشتگر بیه.\nلطفن میزونکاری سوارکرد جانیا نه وارسی بکیت.",
+ "uploadscripted": "ای بلگه مینونه دار رازینه اچ تی امل یا نیسسه یه که شایت وه ناخوشی وا دوراته نیئر واشکافت با.",
+ "uploadscriptednamespace": "ای جانیا اس وی جی نوم جا غیرقانونی '$1' داره.",
"uploadinvalidxml": "ایکس ام الی که سوار بیه نبوئه نوتیج با.",
"uploadvirus": "د ای جانیا ویروس هئ!\nجزیات:$1",
+ "uploadjava": "ای جانیا یه گل جانیا زیپه که مینونه دار جانیایی د نوع کلاس جاوائه.\nسوارکردن جانیایا جاوا قدقن بیه، سی یه که شایت ونو صلا دور زئن محدودیتیا امنیتی نه بی ئن.",
"upload-source": "سرچشمه فایل",
"sourcefilename": "سرچشمه نوم جانیا:",
"sourceurl": "سرچشمه يو آر ال:",
"destfilename": "نوم فایل مقصد:",
"upload-maxfilesize": "بیشترونه انازه جانیا:$1",
+ "upload-description": "شرح جانیا",
+ "upload-options": "گزینه یا سوارکرد",
"watchthisupload": "ای جانیا نه بوینیت",
+ "filewasdeleted": "جانیایی وا همی نوم دماتر سوار بیه و نهاش پاکسا بیه\nشما واس $1 نه دما یه که میهایت سوار بکیت بینیتش.",
+ "filename-bad-prefix": "نوم جانیایی که سوار می کیت وا شرو '''$1''' موئه که دماون ویجه سی عسگیا ثوت بیه وا دیربین یا دیجیتاله.\nلطفن یه گل نوم بی تر سی جانیا انتخاو بکیت.",
"upload-success-subj": "سوار کرد خوش سرانجوم",
"upload-success-msg": "سوارکرد شما سی [$2] خوو بی.وه د ایچه هئش:[[:{{ns:file}}:$1]]",
"upload-failure-subj": "مشگل د سوارکردن",
"upload-too-many-redirects": "ای یو آر ال د ورگیرنه واگردونیا فرئی هئ",
"upload-http-error": "یه گل خطا اچ تی تی پی پیش اومائه:$1",
"upload-copy-upload-invalid-domain": "ورداشتن سوارکردیا د ای پوشگئر د دسرس نئ.",
+ "backend-fail-stream": "نبوئه جانیا\"$1\" کل بوئه.",
+ "backend-fail-backup": "نبوئه سی \"$1\" پشتجا گرت.",
"backend-fail-notexists": "فایل $1 وجود ناره.",
+ "backend-fail-hashes": "گرتن هش یا جانیا سی ری به ری یک نیاین د خوئی انجوم نگرت.",
+ "backend-fail-notsame": "جانیا ناهمتایی ها د $1 .",
"backend-fail-invalidpath": "\"$1\" ره خوئی سی امائیه کردن نئ.",
"backend-fail-delete": "نبوئه جانیا $1 پاکسا بوئه",
"backend-fail-describe": "نبوئه گپ دونسمنیا سی جانیا\"$1\" آلشت بوئه.",
"backend-fail-closetemp": "نبوئه جانیا موقتی بسته با.",
"backend-fail-read": "نبوئه جانیا\"$1\" حنه بوئه.",
"backend-fail-create": "نبوئه د جانیا\"$1\" نوشته با.",
+ "lockmanager-notlocked": "نبوئه قلف $1 نه وا بکیت؛ سی یه که وه قلف نبیه.",
"lockmanager-fail-closelock": "نبوئه قلف جانیا سی \"$1\" بسه بوئه.",
+ "lockmanager-fail-deletelock": "نبوئه قلف جانیا سی \"$1\" پاکسا بوئه.",
+ "lockmanager-fail-acquirelock": "نبوئه سی «$1» قلف وه دس اورد.",
"lockmanager-fail-openlock": "نبوئه قلف جانیا سی \"$1\" وا بوئه.",
+ "lockmanager-fail-releaselock": "نبوئه قلف «$1» نه وا کرد .",
+ "lockmanager-fail-svr-acquire": "نبوئه سی «$1» قلف وه دس اورد.",
+ "lockmanager-fail-svr-release": "نبوئه قلفیا سرور $1 نه وا بکیت.",
+ "zip-wrong-format": "جانیا تیار بیه جانیا زیپ نئ.",
"uploadstash": "اماییه جا سوارکرد",
"uploadstash-clear": "پاک کردن جانیایا اماییه بیه",
"uploadstash-nofiles": "شما هیژ جانیا اماییه بیه ای ناریت.",
+ "uploadstash-errclear": "پاک کردن جانیایا د خوئی شکل نگرت.",
"uploadstash-refresh": "نومه گه جانیایا نه د نو تازه کو",
"invalid-chunk-offset": "جا وه جایی نامعتور برشت",
"img-auth-accessdenied": "دسرسی منع بی",
"img-auth-nofile": "فایل $1 وجود ناره.",
+ "img-auth-streaming": "د حال کل کردن \"$1\".",
+ "img-auth-noread": "کاریار وه حنن «$1» دسرسی ناره.",
"http-invalid-url": "یو آر ال نامعتور:$1",
"http-read-error": "خطا د حنن اچ تی تی پی.",
+ "http-timed-out": "گات حاستن اچ تی تی پی وه سر اوما.",
+ "http-curl-error": "خطا د اوردن تیرنشون اینترنتی: $1",
+ "http-bad-status": "د گات حاستن اچ تی تی پی خطایی پیش اوما: $1 $2",
"upload-curl-error6": "نبوئه د یو آر ال برسیت",
"upload-curl-error28": "تموم بیئن مئلت سی سوار کرد",
"license": "ليانس دار بيئن",
"license-header": "د شكل ليسانس دار بيئن",
"nolicense": "هیچی انتخاو نبیه",
+ "licenses-edit": "گزینه یا مجوز ویرایشت",
"license-nopreview": "(پیش سیل د دسرس نئ)",
+ "upload_source_url": "(شما یه گل جانیا د یه گل یو آر ال د دسرس خلک و معتور ورچئ کردیته)",
"upload_source_file": "(یه گل جانیا د انجومیار تو انتخاو بکیت)",
"listfiles-delete": "پاکسا کردن",
"listfiles-summary": "ای بلگه یا ویجه همه جانیایا سوار بیه نه نشو می ئین.",
"listfiles_name": "نوم",
"listfiles_user": "کاریار",
"listfiles_size": "انازه",
+ "listfiles_description": "شرح",
"listfiles_count": "نسقیا",
"listfiles-show-all": "شومل نسقه یا نهاتری عسگیا",
"listfiles-latestversion": "نسقه تازه",
"filepage-nofile": "چنو فایلی وا ای نوم نئ.",
"uploadnewversion-linktext": "یه گل نسقه تازه د ای جانیا سوار بکید",
"shared-repo-from": "د $1",
+ "shared-repo": "یه گنجینه هومبئر",
+ "upload-disallowed-here": "شما نمی تونیت ای جانیانه د نو سوار بکیت",
"filerevert": "د سرگرتن سی $1",
"filerevert-legend": "د سرگرتن جانیا",
"filerevert-comment": "دليل:",
"download": "گرتن",
"unwatchedpages": "بلگه یا ندئیه بیه",
"listredirects": "نوم گه واگردونیا",
+ "listduplicatedfiles": "نومگه همه جانیایا واگرد دواره اومائه یا",
"unusedtemplates": "قالویا وه کار نبرده بیه.",
"unusedtemplateswlh": "هوم پیوندیا هنی",
"randompage": "بلگه بختكی",
"randomincategory": "بلگه بختی د ای دسه",
"randomincategory-invalidcategory": "\"$1\" نوم دسه معتوری نئ.",
"randomincategory-nopages": "هیچ بلگه ای د ای [[:دسه نئ:$1|$1]] دسه.",
+ "randomincategory-category": "دسه:",
+ "randomincategory-legend": "بلگه بختی د ای دسه",
"randomredirect": "واگردونی بختکی",
"statistics": "آماريا",
"statistics-header-pages": "بلگه آماریا",
"statistics-users": "ثوت نام بیه [[ویجه:نوم گه کاریاریا|کاریاریا]]",
"statistics-users-active": "کاروریا کارکو",
"statistics-mostpopular": "بلگه یایی که بیشتر دیئه بینه",
+ "pageswithprop": "بلگه یایی که خاصیت صفحه ها دشو",
+ "pageswithprop-legend": "بلگه یایی که خاصیت صفحه ها دشو",
+ "pageswithprop-prop": "نوم خاصیت:",
"pageswithprop-submit": "رو",
"doubleredirects": "واگردونیا دوتایی",
"double-redirect-fixed-move": "[[$1]]جا وه جا بیه .\nوه خودکارونه وه روز بیه و ایسه وه د[[$2]] واگردونی بیه.",
"brokenredirects-edit": "ویرایشت",
"brokenredirects-delete": "پاكسا كردن",
"withoutinterwiki": "بلگه یایی که هوم پیوند زون نارن",
+ "withoutinterwiki-summary": "بلگه یا هاری وه زون نسقه یا زونا تر هوم پیوند نبیه.",
"withoutinterwiki-legend": "پیشون",
"withoutinterwiki-submit": "نشون دائن",
"fewestrevisions": "بلگه یایی که کمتری وانئری نه دارن",
"ancientpages": "بلگه یا نهاتر",
"move": "جاوه جا بوئيت",
"movethispage": "ای بگله نه جا وه جا كو",
+ "notargettitle": "رسینه جایی نئ",
"pager-newer-n": "{{جمی:$1|وانها تر 1وانها تر $1}}",
"pager-older-n": "{{جمی:$1|گپسالتر 1|گپسالتر $1}}",
"suppress": "پائیئن",
"allpages-hide-redirects": "واگردونیا قام بیه",
"cachedspecial-refresh-now": "دیئن آخری.",
"categories": "دسه يا",
+ "categoriesfrom": "دسه یایی که د شرو بینه نشو بیه:",
"special-categories-sort-count": "سرجاخودگری د اساس شمارشت",
"special-categories-sort-abc": "سرجاخودگری د اساس الفبا",
"deletedcontributions": "هومیاریا پاکسا بیه کارور",
"deletereasonotherlist": "دلیل هنی",
"deletereason-dropdown": "* دلیلیا پاکسا کردن رسم بیه\n** اسپم\n** خراوکاری\n** رعایت نبین کپی رایت\n** درحاست نیسنه\n** نهاورگشت شکست حرده",
"delete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
+ "rollback": "چواشه کردن ویرایشتیا",
+ "rollback_short": "چواشه کردن",
"rollbacklink": "ورگشتن",
+ "rollbackfailed": "چواشه کردن د خوئی انجوم نبی",
+ "editcomment": "ویرایشت چکشه وه: \"''$1''\" بی.",
"sessionfailure-title": "شکست حردن نشینگه",
"protectlogpage": "حفاظت کردن",
"protectedarticle": "حفاظت بيه [[$1]]",
"restriction-move": "جاوه جا بوئيت",
"restriction-create": "راس كردن",
"restriction-upload": "سوار کرد",
+ "restriction-level-sysop": "کلا پر و پیم بیه",
+ "restriction-level-autoconfirmed": "نصم و نیمه پر و پیم بیه",
"restriction-level-all": "هر ریترازی",
+ "undelete": "دیئن بلگه یا پاکسا بیه",
+ "undeletepage": "دیئن و ؤرگشتن بلگه یا پاکسا بیه",
+ "viewdeletedpage": "دیئن بلگه یا پاکسا بیه",
"undeletelink": "بوين/دوواره آماده با",
"undeleteviewlink": "ديئن",
"undeletecomment": "دليل:",
"cannotundelete": "زنه کردن انجوم نبی:$1",
"undelete-search-title": "بلگه یا پاکسا بیه نه پی جوری کو",
+ "undelete-search-box": "پی جوری بلگه یا پاکسا بیه",
+ "undelete-search-prefix": "بلگه یایی که وا شرو بیه نشو بیه:",
"undelete-search-submit": "پی جوری",
"undelete-error-short": "خطا پاک نبیئن جانیا:$1",
"undelete-show-file-submit": "هری",
"month": "د ما(یا زیتر)",
"year": "د سال",
"sp-contributions-newbies": "فقط هومیاری یایی که د حساو تازه بیه نشون بئه",
+ "sp-contributions-newbies-sub": "سی حساویا تازه",
+ "sp-contributions-newbies-title": "هومیاریا کاریار سی حساویا تازه",
"sp-contributions-blocklog": "قلف",
+ "sp-contributions-suppresslog": "پاکساگری کردن هومیاریا کاریار",
+ "sp-contributions-deleted": "هومیاریا پاکسا بیه کاریار",
"sp-contributions-uploads": "سواركرديا",
"sp-contributions-logs": "نیسنن رخ ونیا",
"sp-contributions-talk": "چك چنه",
+ "sp-contributions-userrights": "دیوونداری حقوق کاریار",
"sp-contributions-search": "سی هومیاریا پی جور با",
"sp-contributions-username": "نوم نشون آی پی يا نوم كاروری:",
"sp-contributions-toponly": "فقط ویرایشتیایی که جزئه آخرین دوواره دیئن هئین نشو بیه",
"ipboptions": "2 ساعتیا:2 ساعت,1 رو:1 رو,3 روزا:3 رو,1 هفته:1 هفته,2 هفته یا:2 هفته,1 ما:1 ما,3 ما:3 میا,6 ما:6 مایا,1 سال:1سال,بی حساو:بی حساو",
"ipbhidename": "نوم کاروری نه سی ویرایشت یا و نوم گه یا قام کو",
"ipb-disableusertalk": "نها ای کاریار نه اوسه که میها د بلگه چک چنه ش ویرایشت بکه و وه قلف بیه بئر",
+ "ipb-confirm": "پشت راس کردن قلف",
+ "badipaddress": "تیرنشون نامعتور آی پی",
+ "blockipsuccesssub": "قلف کردن د خوئی انجوم بی",
"unblockip": "کارور منع نبیه",
+ "ipusubmit": "ای قلف نه ؤردار",
"blocklist": "كاروريا منع بيه",
"ipblocklist": "كاروريا منع بيه",
"ipblocklist-legend": "یه گل کارور منع بیه بجوریت",
"blocklogentry": " [[$1]] وا یه گل وخت تموم بیئن $2 و $3 قلف بیه",
"block-log-flags-nocreate": "حساو راس کردن عاجز بیه.",
"block-log-flags-nousertalk": "نبوئه بلگه چک چنه خوتونه ویرایشت بکید",
+ "ip_range_invalid": "پوشگر نامعتور آی پی",
"proxyblocker": "قلف کننه پروکسی",
"lockdb": "قلف کردن رسینه گا",
+ "unlockdb": "رسینه گا قلف نبیه",
"unlockconfirm": "هره، مه واقعند میهام که رسینه گا وا بوئه.",
"lockbtn": "قلف کردن رسینه گا",
"unlockbtn": "رسینه گا قلف نبیه",
"lockdbsuccesssub": "رسینه گا د خوئی قلف بیه",
+ "unlockdbsuccesssub": "قلف رسینه گا ؤرداشته بیه",
"move-page": "$1 جا وه جا کو",
"move-page-legend": "بلگه نه جا وه جا کو",
+ "movearticle": "جا وه جا کردن بلگه:",
"movenotallowed": "شما وه جا وه جا کردن بلگه دسرسی ناریت",
"movenotallowedfile": "شما وه جا وه جا کردن جانیایا دسرسی ناریت",
"movepagebtn": "بلگه جا وه جا کو",
"tooltip-n-help": "جاگه سی فهمسن",
"tooltip-t-whatlinkshere": "سيائه تمؤم بلگيایی كه ايچه چسب ون دارن",
"tooltip-t-recentchangeslinked": "تغيريا تازه باو مئن بلگيايي كه د ای بلگه چسب وند بيئنه",
+ "tooltip-feed-rss": "هوال حون آر اس اس سی ای بلگه",
"tooltip-feed-atom": "تغذيه كؤچك سی ای بلگه",
"tooltip-t-contributions": "یه نوم گه د هومیاریا ای کارور",
"tooltip-t-emailuser": "سی ای كارور ايميل كل كو",
"metadata": "داديا فره گپ",
"metadata-help": "ای فایل شومل دونسمنیا هنی یه.شایت د دیربین رقم ون یا اسکنری که سی راس کردنشو استفاده بیه،وه ایچه اضاف بیه",
"metadata-fields": "رشته یا گپ دونسمنیا که د ای پیغوم نوم ون بینه شومل بلگه عسگ ن که وختی که جدول گپ دونسمنیا وا بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت",
+ "exif-planarconfiguration": "سرجایک کردن رسینه",
"exif-datetime": "آلشت دئن وخت و دمون جانیا",
"exif-make": "سازنه دیربین",
"exif-usercomment": "ویر و باوریا کارور",
"exif-filesource": "سرچشمه جانیا",
"exif-gpstimestamp": "وخت جی پی اس (ساعت اتمی)",
"exif-jpegfilecomment": "ویر و باور فایل پی ان جی",
+ "exif-countrycodecreated": "رازینه سی ولاتی که عسگ د وه گرته بیه",
"exif-citycreated": "شهری که عسگ دش گرته بیه",
+ "exif-countrycodedest": "رازینه سی ولات نمائشت دئه بیه",
"exif-citydest": "شهر دیار بیه",
"exif-fixtureidentifier": "نوم ثاوت",
"exif-languagecode": "زون",
"watchlistall2": "همه شو",
"namespacesall": "همه شو",
"monthsall": "همه",
+ "confirmemail_send": "کل کردن رازینه پشت راس کاری",
"imgmultigo": "رؤ!",
"img-lang-default": "(زون پیش زمینه)",
"img-lang-go": "رو",
"specialpages-group-media": "گزارشتیا رسانه و سوارکردیا",
"specialpages-group-users": "کاروریا و حقوق",
"specialpages-group-pages": "نوم گه بلگه یا",
+ "specialpages-group-wiki": "رسینه و اوزاریا",
"specialpages-group-redirects": "بلگه ویجه واگردونی بیه",
"external_image_whitelist": "یه خط نه ول بکید چی وه<pre>",
"tag-filter": "فيلتر [[Special:Tags|Tag]]:",
"revdelete-uname-hid": "نوم کاروری قام بیه",
"revdelete-content-unhid": "مینونه قام نبیه",
"revdelete-uname-unhid": "نوم کاروری قام نبیه",
+ "feedback-submit": "کل کردن نهاهوال حون",
"feedback-close": "انجوم بی",
"searchsuggest-search": "پی جوری",
"api-error-badaccess-groups": "شما سی سوار کرد جانیایا د ای ویکی اجازه ناریت.",
"api-error-mustbeloggedin": "شما سی سوارکردن فایلیا با بیایت وامین",
"duration-days": "$1{{جمی:$1|روز|روزیا}}",
"duration-years": "$1{{جمی:$1| سال|سالیا}}",
- "expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا"
+ "expand_templates_remove_comments": "جا وه جا بیئن ویر و باوریا",
+ "pagelanguage": "بلگه انتخاو زون",
+ "pagelang-language": "زون",
+ "pagelang-use-default": "وه کار بسن زون پیش دیه",
+ "right-pagelang": "آلشت دئن زون بلگه",
+ "log-name-pagelang": "آلشت دئن زون پهرستنومه",
+ "log-description-pagelang": "ای پهرستنومه در بلگه زونا آلشت گرته.",
+ "default-skin-not-found-row-disabled": "* <رازینه>$1</رازینه> / $2 ('''ناکنشتگر بیه''')"
}
"hidetoc": "paslēpt",
"collapsible-collapse": "paslēpt",
"collapsible-expand": "rādīt",
+ "confirmable-yes": "Jā",
+ "confirmable-no": "Nē",
"thisisdeleted": "Apskatīt vai atjaunot $1?",
"viewdeleted": "Skatīt $1?",
"restorelink": "$1 {{PLURAL:$1|dzēsto versiju|dzēstās versijas}}",
"gotaccount": "Tev jau ir lietotājvārds? '''$1'''!",
"gotaccountlink": "Pieslēgties",
"userlogin-resetlink": "Esat aizmirsis savu pieslēgšanās informāciju?",
+ "userlogin-resetpassword-link": "Aizmirsi savu paroli?",
"userlogin-helplink2": "Palīdzība ar pieslēgšanos",
- "userlogin-loggedin": "Tu esi pieslēdzies ar lietotājvārdu {{GENDER:$1|$1}}.\nLai pieslēgtos ar citu lietotājvārdu, aizpildi šo formu.",
- "userlogin-createanother": "Izveidot citu kontu",
"createacct-emailrequired": "E-pasta adrese",
"createacct-emailoptional": "E-pasta adrese (nav obligāta)",
"createacct-email-ph": "Ievadiet savu e-pasta adresi",
"rcshowhidebots": "$1 botus",
"rcshowhideliu": "$1 reģistrētos lietotājus",
"rcshowhideanons": "$1 anonīmos",
- "rcshowhidepatr": "$1 pārbaudītie labojumi",
+ "rcshowhidepatr": "$1 pārbaudītos labojumus",
"rcshowhidemine": "$1 manus",
"rclinks": "Parādīt pēdējās $1 izmaiņas pēdējās $2 dienās.<br />$3",
"diff": "izmaiņas",
"file-info-png-frames": "$1 {{PLURAL:$1|kadrs|kadri}}",
"newimages": "Jauno attēlu galerija",
"imagelisttext": "Šobrīd redzams $1 {{PLURAL:$1|attēla|attēlu}} uzskaitījums, kas sakārtots $2.",
- "newimages-summary": "Šeit var apskatīties pēdējos šeit augšuplādētos failus.",
+ "newimages-summary": "Šeit var apskatīties pēdējos augšuplādētos failus šajā Vikipēdijā",
"newimages-legend": "Filtrs",
"newimages-label": "Faila nosaukums (vai tā daļa):",
+ "newimages-showbots": "Parādīt botu augšupielādētos failus",
"noimages": "Nav nekā ko redzēt.",
"ilsubmit": "Meklēt",
"bydate": "<b>pēc datuma</b>",
"tog-forceeditsummary": "漏概醒之",
"tog-watchlisthideown": "不哨己文",
"tog-watchlisthidebots": "不哨僕文",
- "tog-watchlisthideminor": "不哨小纂",
+ "tog-watchlisthideminor": "不哨細纂",
"tog-watchlisthideliu": "不哨有簿",
"tog-watchlisthideanons": "不哨無簿",
"tog-watchlisthidepatrolled": "不哨已巡",
"youhavenewmessages": "有$1書至子書房也。($2)",
"youhavenewmessagesfromusers": "子有 $1 自 {{PLURAL:$3|一簿戶也|$3 簿戶也}} ($2)。",
"youhavenewmessagesmanyusers": "子有 $1 自多簿戶 ( $2 )",
- "newmessageslinkplural": "{{PLURAL:$1|一新訊息|新訊息}}",
- "newmessagesdifflinkplural": "新{{PLURAL:$1|易|易}}",
+ "newmessageslinkplural": "{{PLURAL:$1|一新訊|999=新訊}}",
+ "newmessagesdifflinkplural": "新易",
"youhavenewmessagesmulti": "新訊於$1",
"editsection": "纂",
"editold": "纂",
"hidetoc": "藏",
"collapsible-collapse": "摺",
"collapsible-expand": "展",
+ "confirmable-yes": "是",
+ "confirmable-no": "否",
"thisisdeleted": "還$1或閱之?",
"viewdeleted": "閱$1之?",
"restorelink": "$1已刪",
"nospecialpagetext": "<strong>無此特查。</strong>\n\n見[[Special:SpecialPages|{{int:specialpages}}]]。",
"error": "有誤",
"databaseerror": "庫藏誤然",
+ "databaseerror-query": "尋:$1",
+ "databaseerror-error": "錯:$1",
"laggedslavemode": "警示,此頁不新",
"readonly": "鎖庫藏",
"enterlockreason": "何以鎖之?何日啟之?",
"preferences": "簿註",
"mypreferences": "簿註",
"prefs-edits": "數計:",
+ "prefsnologintext2": "登簿以改簿註",
"prefs-skin": "面版",
"skin-preview": "草覽",
"datedefault": "原註",
"filehist-thumb": "縮",
"filehist-thumbtext": "於$1之縮",
"filehist-nothumb": "無縮",
- "filehist-user": "薄",
+ "filehist-user": "簿",
"filehist-dimensions": "度",
"filehist-filesize": "檔幅",
"filehist-comment": "註",
"double-redirect-fixer": "修渡",
"brokenredirects": "斷渡",
"brokenredirectstext": "頁下斷渡。",
- "brokenredirects-edit": "替",
+ "brokenredirects-edit": "纂",
"brokenredirects-delete": "刪",
"withoutinterwiki": "孤語",
"withoutinterwiki-summary": "頁下無鏈他語。",
"exbeforeblank": "清文前乃為:「$1」",
"delete-confirm": "刪\"$1\"",
"delete-legend": "刪",
- "historywarning": "警示,此頁約有誌$1:",
+ "historywarning": "警示,此頁有誌$1:",
"confirmdeletetext": "欲刪此物與誌,知後果、合[[{{MediaWiki:Policy-url}}]]後再為之。",
"actioncomplete": "成矣",
"actionfailed": "未竟",
"import": "圖入匯",
"importinterwiki": "維基互匯",
"import-interwiki-text": "欲入匯,擇維基、揀題文,審時、纂者隨記也。互匯錄於[[Special:Log/import|誌入]]。",
+ "import-interwiki-sourcepage": "源頁:",
"import-interwiki-history": "審、誌同匯",
"import-interwiki-submit": "入匯",
"import-interwiki-namespace": "入名集:",
"invalidtitle-knownnamespace": "\"$2\" नामस्थान आर \"$3\" नाम बला गलत शीर्षक",
"invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 आर नाम \"$2\" वाला गलत शीर्षक",
"exception-nologin": "सम्प्रवेशित नै",
+ "exception-nologin-text": "इ पन्ना वा काजके सक्षम करवाक लेल कृपया प्रवेश करु।",
"exception-nologin-text-manual": "इ पन्ना वा काजके सक्षम करवाक लेल कृपया $1 करु।",
"virus-badscanner": "खराप विन्यास: अज्ञात विषविधि बिम्बक: ''$1''",
"virus-scanfailed": "बिम्ब विफल (विध्यादेश $1)",
"userlogin-resetlink": "अपन सम्प्रवेश विवरण बिसरि गेलहुँ?",
"userlogin-resetpassword-link": "अपन कूटशब्द बिसर गेलौ ?",
"userlogin-helplink2": "सम्प्रवेशित करवाकलेल मदत",
- "userlogin-loggedin": "अहा {{GENDER:$1|$1}} के रूपमे पहिले स सम्प्रवेशित छि।\nकोनो दोसर सदस्यके रुपमे सम्प्रवेशित करवाक लेल देल गेल फारमके प्रयोग करु।",
- "userlogin-createanother": "दोसर खाता बनाउ",
"createacct-emailrequired": "ई-पत्र संकेत",
"createacct-emailoptional": "ई-पत्र संकेत (वैकल्पिक)",
"createacct-email-ph": "अपन ई-पत्र संकेत सत्यापित करू",
"resetpass-submit-loggedin": "कूटशब्द बदलू",
"resetpass-submit-cancel": "खतम करू",
"resetpass-wrong-oldpass": "अमान्य अस्थायी वा अखुनका कूटशब्द।\nअहाँ पहिनहिये सफलतासँ कूटशब्द बदलि लेने छी वा एकटा नव अस्थायी कूटशब्द लेल आग्रह केने छी।",
+ "resetpass-recycled": "रीसेट करएके लेल नयाँ कूटशब्दमे कृपया अपन वर्तमान कूटशब्द नै द के नयाँ देल जाउ।",
"resetpass-temp-password": "तात्कालिक कूटशब्द",
+ "resetpass-abort-generic": "कूटशब्दमें बदलाव कोनो एक्सटेंशन द्वारा रोक देल गएल अछि ।",
+ "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
"passwordreset": "कूटशब्द फेरसँ बनाउ",
"passwordreset-text-one": "अपन कूटशब्द रीसेट करवाक लेल इ फारम भरु ।",
"passwordreset-text-many": "{{PLURAL:$1|ई-पत्रके माध्यमसऽ एकटा अस्थायी कूटशब्द पावैलेल कोनो एकटा डिब्बा भरु ।}}",
"import": "पन्ना सभकेँ आनू",
"importinterwiki": "ट्रान्सविकी आनू",
"import-interwiki-text": "एकटा विकी आ पन्ना शीर्षक अनबाले चुनू।\nसंशोधन तिथि आ सम्पादकक नाम सुरक्षित रहत।\nसभटा ट्रान्सविकी आयात क्रिया सम्प्रवेशित अछि [[Special:Log/import|import log]] पर।",
- "import-interwiki-source": "मूल विकी/ पन्ना:",
"import-interwiki-history": "अए पन्नाक सभटा इतिहास संशोधनक द्वितीयक बनाउ",
"import-interwiki-templates": "सभटा नमूना शामिल करू",
"import-interwiki-submit": "आनू",
"hidetoc": "afeno",
"collapsible-collapse": "Vonkinina",
"collapsible-expand": "Itarina",
+ "confirmable-yes": "Eny",
+ "confirmable-no": "Tsia",
"thisisdeleted": "Hojerena sa haverina i $1?",
"viewdeleted": "Hijery an'i $1?",
"restorelink": "ny fanovàna voafafa $1{{PLURAL:}}",
"invalidtitle-knownnamespace": "Lohateny tsy miady amin'ny fepetra miaraka amin'ny anaram-balam-pejy \"$2\" ary soratra \"$3\"",
"invalidtitle-unknownnamespace": "Lohateny tsy ekena miaraka amin'ny laharana anaran-tsehatra $1 ary soratra \"$2\"",
"exception-nologin": "Tsy tafiditra",
- "exception-nologin-text": "[[Special:Userlogin|Midira]] mba hahafahanao manao ilay asa na hahafahanao mijery ity pejy ity",
+ "exception-nologin-text": "Midira amin'ny kaontinao azafady mba hahafahana manao ilay asa na mitsidika ilay pejy",
"exception-nologin-text-manual": "$1 ianao mba ho tonga eo amin'ilay pejy na hanatanteraka ilay asa.",
"virus-badscanner": "Diso : Tsy fantatray ny mpitady virus ''$1''",
"virus-scanfailed": "Tsy mety alefa ny fitadiavana (kaody $1)",
"userlogin-resetlink": "Adinonavo ve ny antsipihan'ny fidiranao ?",
"userlogin-resetpassword-link": "Hadino ny tenimiafina?",
"userlogin-helplink2": "Fanampiana amin'ny fidirana",
- "userlogin-loggedin": "Efa tafiditra amin'ny anaran'i {{GENDER:$1|$1}} ianao. Ampiasao ny fôrmiolera eo ambany raha hiditra amin'ny anaran'ny mpikambana hafa.",
- "userlogin-createanother": "Hamorona kaonty hafa",
"createacct-emailrequired": "Adiresy mailaka :",
"createacct-emailoptional": "Adiresy mailaka (azo tsy atao) :",
"createacct-email-ph": "Atsofohy ny adiresy mailakao",
"permissionserrorstext-withaction": "{{PLURAL:$1|Tsy manana alalàna ianao|Tsy manana alalàna ianao}} $2. Io ny antony ($2):",
"recreate-moveddeleted-warn": "'''Tandremo''' : Mamerina pejy efa voafafa ianareo.'''\n\nMarino raha tsara tohizana ny fanovana eto amin'ity pejy ity. Ny laogim-pamafana sy ny famindran-toerana dia eo ambany :",
"moveddeleted-notice": "Voafafa ity pejy ity.\nEo ambany eo any laogin'ny famindran-toerana sy ny famafana ho an'ny antsipirihany.",
- "log-fulllog": "Hijery ny tatitr’asa (log)",
+ "log-fulllog": "Hijery ny laogy manontolo",
"edit-hook-aborted": "Tsy nety ny fanovàna\nTsy nanome antony",
"edit-gone-missing": "Tsy afaka natao update ilay pejy.\nMety voafafa angamba izy.",
"edit-conflict": "Adi-panovàna.",
"rev-deleted-user": "(solonanarana nesorina)",
"rev-deleted-event": "(nesorina ny fampidirana)",
"rev-deleted-user-contribs": "[anaram-pikambana na adiresy IP voafafa - fanovana nasitria teo amin'ny fandraisan'anjara modification]",
- "rev-deleted-text-permission": "'''Voafafa''' ny santiônan'ity pejy ity.\nMety misy ny antsipirihany angamba ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogy momban'ny famafàna pejy].",
+ "rev-deleted-text-permission": "<strong>Voafafa</strong> ny santiônan'ity pejy ity.\nMety misy ny antsipirihany angamba ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogim-pamafàna pejy].",
"rev-deleted-text-unhide": "Ity versionan'ity pejy ity dia '''voafafa'''.\nHita ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafana] ny antsipirihany.\nAfaka [$1 mijery ilay versiona] ianao raha tianao.",
"rev-suppressed-text-unhide": "'''Nofafana''' ity versiom-pejy ity.\nAzo jerena ao amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} laogim-pamafana] ny antsipirihany.\nAzonao [$1 jerena foana ilay santiôna] raha tianao.",
"rev-deleted-text-view": "'''Nofafana''' ity versiom-pejy ity.\nAzonao jerena ity santiôna voafafa ity ; misy antsipirihany ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogim-pamafana].",
"rev-suppressed-text-view": "'''Nofafana''' ity versiom-pejy ity.\nAzonao jerena ilay versiona voafafa ; ny antsipirihany dia ao amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} laogim-pamafana].",
- "rev-deleted-no-diff": "Tsy afaka mijery anio diff io ianao satria misy santôna '''voafafa''' ao aminy.\nMety any amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogy momban'ny famafàna pejy] ny antsipirihany.",
+ "rev-deleted-no-diff": "Tsy afaka mijery anio fampitahana (diff) io ianao satria misy versiona '''voafafa''' ao aminy.\nMety any amin'ny [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAME}}}} laogy momban'ny famafàna pejy] ny antsipirihany.",
"rev-suppressed-no-diff": "Tsy azo jerenao io diff io satria '''voafafa''' ny iraika amin'ny reviziônany.",
"rev-deleted-unhide-diff": "Nisy '''voafafa''' ny iraika amin'ny reviziôna an'ity diff ity.\nNy antsipirihany dia mety hita ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogin'ny famafana].\n[$1 Azonao jerena foana ilay diff] raha tianao.",
"rev-suppressed-unhide-diff": "Nisy '''voafafa''' ny iraika amin'ny versiona an'ity diff ity.\nNy antsipirihany dia mety hita ao amin'ny [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} laogin'ny famafana].\n[$1 Azonao jerena foana ilay diff] raha tianao.",
"logdelete-selected": "{{PLURAL:$1||}}Laogy voafidy :",
"revdelete-confirm": "Amafiso eto ny hevitrao raha hanao io ianao, raha azonao sary an-tsaina ny mety ho vokany, ary raha araka ny [[{{MediaWiki:Policy-url}}|fepetra mihatra]] ny zavatra ataonao.",
"revdelete-suppress-text": "Ny famafàna pejy dia ampiasaina rehefa :\n* Fampahalalana mampiely lainga\n* Misy fampahalalana tsy sarababem-bahoaka tsy metimety\n*: ''Adiresy onenana, laharana antso an-tariby, sns.''",
- "revdelete-legend": "Ampetraho ny fepetra momban'ny fahitana :",
+ "revdelete-legend": "Hametraka ny fe-pahitana",
"revdelete-hide-text": "Tahirintsoratry ny versiona",
"revdelete-hide-image": "asitriho ny votoatin'ilay rakitra",
"revdelete-hide-name": "Asitriho ny asa sy ny tanjona",
"revdelete-submit": "Hampiharina amin'ny versiona nofidiana {{PLURAL:$1}}",
"revdelete-success": "'''Voaova soa aman-tsara ny fahitana ny versiona.'''",
"revdelete-failure": "'''Ny fisehon'ity versiona ity dia tsy afaka natao update'''\n$1",
- "logdelete-success": "'''Voaova soa aman-tsara ny fisehon'ny tatitr’asa.'''",
- "logdelete-failure": "'''Tsy afaka novaina ny fisehon'ny tatitr’asa'''\n$1",
+ "logdelete-success": "<strong>Voaova soa aman-tsara ny fisehon'ny laogy.</strong>",
+ "logdelete-failure": "<strong>Tsy afaka novaina ny fisehon'ny laogy</strong>\n$1",
"revdel-restore": "Ovay ny fahitàna",
"pagehist": "Tantaran'ilay pejy",
"deletedhist": "Tantara voafafa",
"revdelete-concurrent-change": "Tsi-fetezana teo am-panovana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : ny satany dia voaovan' olon-kafa tamin'ianao nanova azy.\nJereo ny laogy.",
"revdelete-only-restricted": "Tsi-fetezana teo am-panitrihana ny zavatra voadaty tamin'ny $1 tamin'ny $2 : tsy azonao fafana ireo zavatra ireo amin'ny mpandrindra raha tsy misafidy famafana.",
"revdelete-reason-dropdown": "* Antom-pamafana matetika :\n** Tsifanajakan ny zom-pamrona;\n** Famoahan-kevitra na fampahalalana ho ann'ny olon-tokana tsy tokony haseho;\n** Fampahalalana mety mifototra amin'ny lainga.",
- "revdelete-otherreason": "Antony hafa / antony miampy :",
+ "revdelete-otherreason": "Antony hafa/miampy :",
"revdelete-reasonotherlist": "Antony hafa",
"revdelete-edit-reasonlist": "Hanova ny anton'ny famafàna",
"revdelete-offender": "Mpanao ilay reviziôna :",
- "suppressionlog": "tatitr’asa momban’ny famafana pejy",
+ "suppressionlog": "Laogim-pamafana",
"suppressionlogtext": "Ity ny lisitry ny famafana ary ny sakana mikasika ny votoatiny asitrika amin'ny mpandrindra. Jereo ny [[Special:BlockList|lisitry ny sakana]] ho an'ny lisitry ny fandroahana ary ny sakana mbola mihatra amin'izao fotoana.",
"mergehistory": "Atsonika ny tantara ny pejy",
"mergehistory-header": "Amin'ity pejy ity, afaka manonika santiônan'ny tantara pejy iaviana makany amina pejy vaovao ianao.\nMarino raha manohy ny tantaram-pejy ity asa ity.",
"mergehistory-comment": "natambatra miarak'amin'ny [[:$2]] ny/i [[:$1]] : $3",
"mergehistory-same-destination": "Ny pejy iaviana sy ny pejy tanjona dia tsy mahazo mitovy",
"mergehistory-reason": "Antony :",
- "mergelog": "Tatitr’asa momban’ny fitambarana",
+ "mergelog": "Laogim-fampitambarana",
"pagemerge-logentry": "voatambatra tamin'ny [[$2]] [[$1]] (fanovàna hatramin'ny $3)",
"revertmerge": "Saraho",
"mergelogpagetext": "Ity ny lisitry ny fanambarana ny tantaram-pejy vao haingana",
"powersearch-togglelabel": "Marihana:",
"powersearch-toggleall": "Rehetra",
"powersearch-togglenone": "Tsy misy",
+ "powersearch-remember": "Tadidio ho an'ny karoka manaraka ity safidy ity",
"search-external": "Hikaroka any ivelany",
"searchdisabled": "Tsy nalefa ny karoka eto amin'i {{SITENAME}}. Afaka mampiasa an'i Google aloha ianao mandra-paha. Nefa fantaro fa mety ho efa lany daty ny valiny omeny.",
"search-error": "Hadisoana nitranga tam-pikarohana: $1",
"preferences": "Ny momba anao",
"mypreferences": "Safidy",
"prefs-edits": "isa ny fanovàna :",
- "prefsnologintext2": "$1 ianao hahafahanao mamaritra ny safidim-pikambana",
+ "prefsnologintext2": "Midira amin'ny kaontinao azafady mba hahafahanao mamaritra ny safidim-pikambana",
"prefs-skin": "Endrika",
"skin-preview": "Tsipalotra",
"datedefault": "Tsy misy safidy",
"right-passwordreset": "Hijery ny imailaka famerenana ny tenimiafina",
"newuserlogpage": "Tatitr’asan’ny fanokafana kaontim-pikambana",
"newuserlogpagetext": "Ity pejy ity dia maneho ny tantaran'asan'ny fampidirana mpikambana vaovao.",
- "rightslog": "Tatitr’asa momban’ny fanovana satam-pikambana",
- "rightslogtext": "Ity ny laogy momban'ny fanovana ny zom-pikambana.",
+ "rightslog": "Laogim-piovan'ny zom-pikambana",
+ "rightslogtext": "Ity ny laogim-piovan'ny zom-pikambana",
"action-read": "mamaky ity pejy ity",
"action-edit": "manova ity pejy ity",
"action-createpage": "hanao pejy",
"http-invalid-url": "URL diso : $1",
"http-invalid-scheme": "Tsy zaka ny URL miaraka amin'ny sema « $1 »",
"http-request-error": "Tsi-fetezana tsy fantam-piaviana teo ampandefasana ilay hataka.",
- "http-read-error": "Tsy fetezana momban'ny famakiana HTTP.",
+ "http-read-error": "Hadisoam-pamakiana HTTP.",
"http-timed-out": "Ny fangatahana HTTP dia efa lany daty.",
"http-curl-error": "Tsi-fetezana teo am-pangalana ny URL : $1",
"http-bad-status": "Nisy tsi-fetezana teo ampandefasana ny hataka HTTP: $1 $2",
"randomincategory": "Pejy kisendra ao amin'ny sokajy",
"randomincategory-invalidcategory": "Tsy anaran-tsokajy azo raisina \"$1\"",
"randomincategory-nopages": "Tsy misy pejy ao amin'i [[:Category:$1]]",
- "randomincategory-selectcategory": "Haka pejy kisendra ao amin'ny sokajy: $1 $2",
- "randomincategory-selectcategory-submit": "Alefa",
"randomredirect": "Pejy fihodinana kisendra",
"randomredirect-nopages": "Tsy misy pejy fihodinana eo amin'ny anaran-tsehatra «$1»",
"statistics": "Statistika",
"booksources": "boky tsiahy",
"booksources-search-legend": "hikaroka anatin'ny boky todika",
"booksources-go": "Ataovy lisitra",
- "booksources-text": "Ity misy lisitra maneho ny rohy makany amin'ny sehatra mivarotra boky vaovao sy efa vaky ary mety ahitanao fampahalalàna momban'ny boky sy soratra notadiavinao :",
+ "booksources-text": "Ity misy lisitra maneho ny rohy makany amin'ny sehatra mivarotra boky vaovao sy efa vaky ary mety ahitanao fampahalalàna momba ny boky sy soratra notadiavinao :",
"booksources-invalid-isbn": "Ny ISBN nomena dia mety diso ; marino raha diso ianao teo am-pandikanana ny loharano fotony.",
"specialloguserlabel": "Mpikambana nanao :",
"speciallogtitlelabel": "Tanjona (lohateny na mpikambana) :",
"log": "Tatitr’asa",
- "all-logs-page": "Ny tatitr’asa",
+ "all-logs-page": "Laogy rehetra",
"alllogstext": "Seho nakambana ho an'ny laogy rehetra azo jerena eto amin'ny {{SITENAME}}.\nAzonao ferana ny fahitana ny tao amin'ny fisafidianana karazana laogy iray, anaram-pikambana iray na pejy iray (samihafa ny sorabaventy sy soramadinika).",
"logempty": "Tsy nahitana.",
"log-title-wildcard": "Hitady amin'ny lohateny manomboka amin'io soratra io",
"rollback-success": "Fanesorana ny fiovana nataon'i $1 ;\nfiverenana amin'ny fiovana farany nataon'i $2.",
"sessionfailure-title": "Tsi-fetezaka mikasika ny kaonty idirana",
"sessionfailure": "Ohatry ny misy olana ny fidirana amin'ny kaontinao ; \nnofoanana ilay tao mba tsy hisy fanodinana fotaom-pidirana (session).\nTsindrio \"Mialoha\" ary vaozy ilay pejy niavianao ary andramo fanindroany.",
- "protectlogpage": "Tatitr’asa momban’ny fiarovana",
+ "protectlogpage": "Laogim-piarovana",
"protectlogtext": "Eto ambany ny lisitry ny fiarovana/fanalana hidy ny pejy. \nHo ann'y fanazavana fanampiny, jereo [[Special:ProtectedPages|ny lisitry ny pejy voaaro]] ho an'ny pejy fiarovana amin'izao fotoana izao.",
"protectedarticle": "voaaro ny pejy \"[[$1]]\"",
"modifiedarticleprotection": "nanova ny haabo ny fiarovana ho an'ny « [[$1]] »",
"import": "Hampidi-pejy",
"importinterwiki": "fampidirana interwiki",
"import-interwiki-text": "Safidio wiki loharano iray ary ny lohatenin'ilay pejy ho ampidirina eto.\nHo voatazona ao amin'ny tantara ny datin'ny santiôna sy ny anaran'ny mpandray anjara.\nHo voasoratra ao amin'ny [[Special:Log/import|laogim-pampidirana]] ny tao rehetra mikasika ny fampidirana pejy interwiki",
- "import-interwiki-source": "Wiki sy pejy fango :",
"import-interwiki-history": "Handika ny santiônan'ny tantaran'ity pejy ity",
"import-interwiki-templates": "Ataovy ao ny endrika rehetra",
"import-interwiki-submit": "Hampiditra",
"tooltip-n-mainpage": "Jereo ny renipejy",
"tooltip-n-mainpage-description": "hitsidika ny renipejy",
"tooltip-n-portal": "Ny mombamomba ny tetikasa",
- "tooltip-n-currentevents": "Hidady ny rohy momban'ny vaovao ankehitriny",
+ "tooltip-n-currentevents": "Hikaroka torohay fototra mikasika ny vaovao",
"tooltip-n-recentchanges": "Lisitra ny fanovàna farany efa vita eto amin'ity wiki ity",
"tooltip-n-randompage": "Hjery pejy aki-sendra",
"tooltip-n-help": "fanoroana",
"tooltip-ca-nstab-user": "Jereo ny pejin'ny mpikambana",
"tooltip-ca-nstab-media": "Hijery ny pejin'ny Media",
"tooltip-ca-nstab-special": "Pejy manokana ity pejy ity, ny rindrankajy wiki no mitantana ity pejy ity",
- "tooltip-ca-nstab-project": "Jereo ny pejy momban'ny tetikasa",
+ "tooltip-ca-nstab-project": "Hijery ny pejin-tetikasa",
"tooltip-ca-nstab-image": "jereo ny pejy an'io rakitra io",
"tooltip-ca-nstab-mediawiki": "Hijery ny hafatra ampiasain'ny rindrankajy",
"tooltip-ca-nstab-template": "Jereo ny endrika (môdely)",
"tooltip-ca-nstab-help": "Hijery ny pejy fanoroana",
- "tooltip-ca-nstab-category": "Hijery ny pejy momban'ilay sokajy",
+ "tooltip-ca-nstab-category": "Hijery ny pejin'ilay sokajy",
"tooltip-minoredit": "Mariho ho fanovana madinika ihany",
"tooltip-save": "Tehirizo ny fanovana",
"tooltip-preview": "Topazy maso ny fanovana nataonao, iangaviana ianao mba hijery tsipalotra mialoha ny fitahirizana ny fanovana!",
"userlogin-resetlink": "Си ги заборавивте податоците за најава?",
"userlogin-resetpassword-link": "Ја заборавивте лозинката?",
"userlogin-helplink2": "Помош за најава",
- "userlogin-loggedin": "Веќе сте најавени како {{GENDER:$1|$1}}.\nСо образецот подолу можете да се најавите како друг корисник.",
- "userlogin-createanother": "Направи нова сметка",
"createacct-emailrequired": "Е-пошта",
"createacct-emailoptional": "Е-пошта (незадолжително)",
"createacct-email-ph": "Внесете е-пошта",
"createaccount-text": "Некој направил сметка со вашата е-поштенска адреса на {{SITENAME}} ($4) со име „$2“ и лозинка „$3“.\nБи требало сега да се пријавите и да ја промените вашата лозинка.\n\nМожете да ја занемарите оваа порака ако сметката била направена по грешка.",
"login-throttled": "Имате премногу обиди за најава за кратко време.\nПочекајте $1 пред да се обидете повторно.",
"login-abort-generic": "Најавата е неуспешна - Прекинато",
+ "login-migrated-generic": "Вашата сметка е пренесена и корисничкото име веќе не постои на ова вики.",
"loginlanguagelabel": "Јазик: $1",
"suspicious-userlogout": "Вашето барање за одјава е одбиено бидејќи се чини дека е испратено од расипан прелистувач или кеширачки застапник (proxy).",
"createacct-another-realname-tip": "Вистинското име е незадолжително.\nДоколку изберете да го внесете, тоа може да се искористи за оддавање на заслуги за Вашата работа.",
"showpreview": "Преглед",
"showdiff": "Прикажи промени",
"blankarticle": "<strong>Предупредување:</strong> Страницата што ја создавате е празна.\nАко повторно стиснете на „{{int:savearticle}}“, страницата ќе биде создадена без никаква содржина во неа.",
- "anoneditwarning": "'''Предупредување:''' Не сте најавени.\nВашата IP-адреса ќе биде заведена во историјата на уредување на страницата.",
+ "anoneditwarning": "<strong>Предупредување:</strong> Не сте најавени. Вашата IP-адреса ќе биде јавно видлива ако уредувате. Ако <strong>[$1 се најавите]</strong> или <strong>[$2 направите сметка]</strong>, тогаш уредувањата ќе се припишуваат на вашето корисничко име, покрај другите погодности.",
"anonpreviewwarning": "''Не сте најавени. Ако ја зачувате, Вашата IP-адреса ќе биде заведена во историјата на уредување на страницата.''",
"missingsummary": "'''Потсетник:''' Не внесовте опис на измените. Ако притиснете Зачувај повторно, вашите измени ќе се зачуваат без опис.",
"missingcommenttext": "Ве молиме внесете коментар подолу.",
"powersearch-togglelabel": "Одбери:",
"powersearch-toggleall": "Сè",
"powersearch-togglenone": "Ништо",
- "powersearch-remember": "Запамти го изборот за идни пребарувања",
+ "powersearch-remember": "Запoмни го изборот за идни пребарувања",
"search-external": "Надворешно пребарување",
"searchdisabled": "{{SITENAME}} пребарувањето е оневозможено.\nВо меѓувреме, можете да пребарувате преку Google.\nДа напоменеме дека нивното индексирање на {{SITENAME}} содржините може да биде застарено.",
"search-error": "Се појави грешка при пребарувањето: $1",
"userlogin-resetlink": "താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?",
"userlogin-resetpassword-link": "താങ്കൾ രഹസ്യവാക്ക് മറന്നോ?",
"userlogin-helplink2": "പ്രവേശിക്കാൻ സഹായമാവശ്യമെങ്കിൽ",
- "userlogin-loggedin": "താങ്കൾ ഇപ്പോൾ തന്നെ {{GENDER:$1|$1}} ആയി പ്രവേശിച്ചിരിക്കുന്നു.\nതാഴെ ഉള്ള ഫോം ഉപയോഗിച്ച് മറ്റൊരു ഉപയോക്താവായി പ്രവേശിക്കാവുന്നതാണ്.",
- "userlogin-createanother": "മറ്റൊരു അംഗത്വമെടുക്കുക",
"createacct-emailrequired": "ഇമെയിൽ വിലാസം",
"createacct-emailoptional": "ഇമെയിൽ വിലാസം (നിർബന്ധമില്ല)",
"createacct-email-ph": "താങ്കളുടെ ഇമെയിൽ വിലാസം നൽകുക",
"showpreview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
"showdiff": "മാറ്റങ്ങൾ കാണിക്കുക",
"blankarticle": "<strong>മുന്നറിയിപ്പ്:</strong> താങ്കൾ സൃഷ്ടിക്കുന്ന താൾ ശൂന്യമാണ്.\n\"{{int:savearticle}}\" ഒന്നുകൂടി അമർത്തിയാൽ, ഉള്ളടക്കമൊന്നുമില്ലാതെ താൾ സൃഷ്ടിക്കപ്പെടും.",
- "anoneditwarning": "'''മുന്നറിയിപ്പ്:''' താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. താങ്കളുടെ ഐ.പി. വിലാസം താളിന്റെ തിരുത്തൽ ചരിത്രത്തിൽ ചേർക്കുന്നതാണ്.",
+ "anoneditwarning": "<strong>മുന്നറിയിപ്പ്:</strong> താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. താങ്കൾ തിരുത്തുകളെന്തെങ്കിലും ചെയ്യുകയാണെങ്കിൽ താങ്കളുടെ ഐ.പി. വിലാസം എല്ലാവർക്കും ലഭ്യമായിരിക്കും. താങ്കൾ <strong>[$1 ലോഗിൻ ചെയ്യുകയോ]</strong> <strong>[$2 അംഗത്വമെടുക്കുകയോ]</strong> ചെയ്യുന്നതുവഴി മറ്റ് ഗുണങ്ങളോടൊപ്പം താങ്കളുടെ തിരുത്തുകൾ ഉപയോക്തൃനാമത്തിലാവും അറിയപ്പെടുക.",
"anonpreviewwarning": "''താങ്കൾ ലോഗിൻ ചെയ്തിട്ടില്ല. സേവ് ചെയ്യുമ്പോൾ താളിന്റെ തിരുത്തൽ ചരിത്രത്തിൽ താങ്കളുടെ ഐ.പി. വിലാസം ചേർത്തു സൂക്ഷിക്കപ്പെടും.''",
"missingsummary": "'''ഓർമ്മക്കുറിപ്പ്:''' താങ്കൾ തിരുത്തലിന്റെ ചുരുക്കരൂപം നൽകിയിട്ടില്ല. ''സേവ് ചെയ്യുക'' ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ താങ്കൾ വരുത്തിയ മാറ്റം കാത്തുസൂക്ഷിക്കുന്നതാണ്.",
"missingcommenttext": "താങ്കളുടെ അഭിപ്രായം ദയവായി താഴെ രേഖപ്പെടുത്തുക.",
"listfiles_count": "പതിപ്പുകൾ",
"listfiles-show-all": "ചിത്രത്തിന്റെ പഴയ പതിപ്പുകളും ഉൾപ്പെടുത്തുക",
"listfiles-latestversion": "ഇപ്പോഴത്തെ പതിപ്പ്",
- "listfiles-latestversion-yes": "ശരി",
- "listfiles-latestversion-no": "à´µàµ\87à´£àµ\8dà´\9f",
+ "listfiles-latestversion-yes": "à´\85à´¤àµ\86",
+ "listfiles-latestversion-no": "à´\85à´²àµ\8dà´²",
"file-anchor-link": "പ്രമാണം",
"filehist": "പ്രമാണ നാൾവഴി",
"filehist-help": "ഏതെങ്കിലും തീയതി/സമയ കണ്ണിയിൽ ഞെക്കിയാൽ പ്രസ്തുതസമയത്ത് ഈ പ്രമാണം എങ്ങനെയായിരുന്നു എന്നു കാണാം.",
"randomincategory": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ",
"randomincategory-invalidcategory": "\"$1\" സാധുതയുള്ള വർഗ്ഗത്തിന്റെ പേരല്ല.",
"randomincategory-nopages": "[[:Category:$1|വർഗ്ഗം:$1]] എന്നതിൽ താളുകളൊന്നുമില്ല.",
+ "randomincategory-category": "വർഗ്ഗം:",
+ "randomincategory-legend": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ",
"randomredirect": "ക്രമരഹിതമായ തിരിച്ചുവിടൽ",
"randomredirect-nopages": "\"$1\" എന്ന നാമമേഖലയിൽ തിരിച്ചുവിടൽ താളുകളൊന്നുമില്ല.",
"statistics": "സ്ഥിതിവിവരക്കണക്കുകൾ",
"exbeforeblank": "ശൂന്യമാക്കപ്പെടുന്നതിനു മുമ്പുള്ള ഉള്ളടക്കം: '$1'",
"delete-confirm": "\"$1\" മായ്ക്കുക",
"delete-legend": "മായ്ക്കുക",
- "historywarning": "'''മുന്നറിയിപ്പ്''': താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു ഏകദേശം {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:",
+ "historywarning": "<strong>മുന്നറിയിപ്പ്</strong>: താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:",
"confirmdeletetext": "താങ്കൾ ഒരു താൾ അതിന്റെ നാൾവഴിയടക്കം മായ്ക്കുവാൻ പോവുകയാണ്. ഈ ചെയ്തിയുടെ പരിണതഫലം താങ്കൾക്കറിയാമെന്നും, ഈ നടപടി [[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ചാണു ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.",
"actioncomplete": "പ്രവൃത്തി പൂർത്തിയായിരിക്കുന്നു",
"actionfailed": "പ്രവൃത്തി പരാജയപ്പെട്ടിരിക്കുന്നു",
"delete-edit-reasonlist": "മായ്ക്കലിന്റെ കാരണം തിരുത്തുക",
"delete-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സംരംഭത്തിന്റെ നിലനില്പ്പിനെ തന്നെ ബാധിക്കുമെന്നതിനാൽ ഈ താൾ മായ്ക്കുന്നതിനുള്ള അവകാശം പരിമിതപ്പെടുത്തിയിരിക്കുന്നു.",
"delete-warning-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. അതായത്, ഇതിനു് $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സംരംഭത്തിന്റെ ഡാറ്റാബേസ് ഓപ്പറേഷനെ ബാധിച്ചേക്കാം. അതിനാൽ വളരെ ശ്രദ്ധാപൂർവ്വം തുടർനടപടികളിലേക്കു നീങ്ങുക.",
+ "deleteprotected": "ഈ താൾ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്നതിനാൽ താങ്കൾക്കിത് മായ്ക്കാനാവില്ല.",
"deleting-backlinks-warning": "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും [[Special:WhatLinksHere/{{FULLPAGENAME}}|താളിലേയ്ക്കുള്ള കണ്ണികൾ]] അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.",
"rollback": "തിരുത്തുകൾ റോൾബാക്ക് ചെയ്യുക",
"rollback_short": "റോൾബാക്ക്",
"import": "താളുകൾ ഇറക്കുമതി ചെയ്യുക",
"importinterwiki": "അന്തർവിക്കി ഇറക്കുമതി",
"import-interwiki-text": "വിക്കിയും ഇറക്കുമതി ചെയ്യാനുള്ള താളും തിരഞ്ഞെടുക്കുക.\nപുതുക്കൽ തീയതികളും തിരുത്തിയ ആളുകളുടെ പേരും സൂക്ഷിക്കപ്പെടും.\nഅന്തർവിക്കി ഇറക്കുമതിയുടെ എല്ലാ വിവരങ്ങളും [[Special:Log/import|ഇറക്കുമതി പ്രവർത്തനരേഖ]] എന്ന താളിൽ ശേഖരിക്കപ്പെടും.",
+ "import-interwiki-sourcewiki": "സ്രോതസ്സ് വിക്കി:",
+ "import-interwiki-sourcepage": "സ്രോതസ്സ് താൾ:",
"import-interwiki-history": "ഈ താളിന്റെ എല്ലാ പൂർവ്വചരിത്രവും പകർത്തുക",
"import-interwiki-templates": "എല്ലാ ഫലകങ്ങളും ഉൾപ്പെടുത്തുക",
"import-interwiki-submit": "ഇറക്കുമതി",
"version-parser-function-hooks": "പാഴ്സർ ഫങ്ഷൻ കൊളുത്തുകൾ",
"version-hook-name": "കൊളുത്തിന്റെ പേര്",
"version-hook-subscribedby": "വരിക്കാരനായത്",
- "version-version": "(പതിപ്പ് $1)",
+ "version-version": "($1)",
"version-no-ext-name": "[[പേര് നൽകിയിട്ടില്ല]",
"version-license": "മീഡിയവിക്കി ഉപയോഗാനുമതി",
"version-ext-license": "അനുമതി",
"hidetoc": "хумих",
"collapsible-collapse": "хумих",
"collapsible-expand": "дэлгэх",
+ "confirmable-confirm": "{{GENDER:$1|Та}} итгэлтэй байна уу?",
+ "confirmable-yes": "Тийм",
+ "confirmable-no": "Үгүй",
"thisisdeleted": "$1-г харах эсвэл сэргээх үү?",
"viewdeleted": "$1-г харах уу?",
"restorelink": "{{PLURAL:$1|арилгасан засвар|арилгасан $1 засварууд}}",
"gotaccountlink": "Нэвтрэх",
"userlogin-resetlink": "Нэвтрэх мэдээллээ мартаа юу?",
"userlogin-resetpassword-link": "Нууц үгээ мартсан уу?",
- "userlogin-loggedin": "Та {{GENDER:$1|$1}} нэрээр нэвтэрсэн байна.\nӨөр нэрээр нэвтрэх бол доорх маягтыг ашиглана уу.",
- "userlogin-createanother": "Өөр бүртгэл үүсгэх",
"createacct-emailrequired": "Цахим шуудангийн хаяг",
"createacct-email-ph": "Цахим шуудангийн хаягаа оруулна уу",
"createacct-another-email-ph": "Цахим шуудангийн хаяг оруулна уу",
"preferences": "Хэрэглэгчийн тохиргоо",
"mypreferences": "Миний тохиргоо",
"prefs-edits": "Засваруудын тоо:",
+ "prefsnologintext2": "Өөрийн тохиргоогоо өөрчлөхийн тулд логин хийнэ үү.",
"prefs-skin": "Арьс",
"skin-preview": "Урьдчилж харах",
"datedefault": "Анхны байдал",
"unusedtemplateswlh": "бусад холбоосууд",
"randompage": "Санамсаргүй хуудас",
"randompage-nopages": "Дараах {{PLURAL:$2|нэрний зайнд|нэрний зайнд}} хуудас байхгүй байна : $1. \\",
+ "randomincategory-category": "Ангилал:",
+ "randomincategory-legend": "Ангилалд багтсан дурын хуудас",
"randomredirect": "Санамсаргүй чиглүүлэгч",
"randomredirect-nopages": "\"$1\" нэрний зайд чиглүүлэгч байхгүй байна.",
"statistics": "Статистик мэдээлэл",
"delete-edit-reasonlist": "Устгах шалтгаануудыг засварлах",
"delete-toobig": "Уг хуудасны засварын түүх маш их, $1 {{PLURAL:$1|засвар|гаруй засвартай}} байна.\n{{SITENAME}}-н аюулгүй байдлын үүднээс дээрх хуудсыг устгахыг хорьсон байна.",
"delete-warning-toobig": "Энэ хуудасны засварын түүх маш том байгаа бөгөөд {{PLURAL:$1| гаруй засвар| гаруй засварууд}} байна.\nУстгавал {{SITENAME}}-н мэдээллийн сангийн үйл ажиллагаанд нөлөөлж магадгүй тул та анхаарна уу.",
+ "deleteprotected": "Энэ хуудас хамгаалалттай тул устгаж болохгүй.",
"rollback": "Засваруудыг буцаах",
"rollback_short": "Буцаах",
"rollbacklink": "буцаах",
"whatlinkshere-filters": "Шүүлтүүрүүд",
"block": "Хэрэглэгчийг блок хийх",
"unblock": "Хэрэглэгчийг блокоос гаргах",
- "blockip": "Хэрэглэгчийг түгжих",
+ "blockip": "{{GENDER:$1|хэрэглэгчийн}} түгжих",
"blockip-legend": "Хэрэглэгчийг түгжих",
"blockiptext": "Доорх маягтыг ашиглан тодорхой IP хаяг эсвэл хэрэглэгчийн нэрийг засвар хийхээс түгжинэ үү.\nЭнэ нь зөвхөн вандализм үйлдэх явдлаас сэргийлэхийн тулд, [[{{MediaWiki:Policy-url}}|бодлого, баримтлалын]] дагуу хийгдэх ёстой.\nДоор тодорхой шалтгаанаа бичнэ үү.",
"ipaddressorusername": "IP хаяг буюу хэрэглэгчийн нэр",
"ipb-unblock-addr": "$1-н түгжээг тайлах",
"ipb-unblock": "Хэрэглэгчийн нэр эсвэл IP хаягийн түгжээг тайлах",
"ipb-blocklist": "Байгаа түгжээнүүдийг харах",
- "ipb-blocklist-contribs": "$1-н хувь нэмэр",
+ "ipb-blocklist-contribs": "{{GENDER:$1|$1}}-н хувь нэмэр",
"unblockip": "Хэрэглэгчийг идэвхижүүлэх",
"unblockiptext": "Өмнө нь хориг тавьсан интернет хаяг юм уу хэрэглэгчийн бичих эрхийг сэргээхийн тулд дорх маягтыг ашигла.",
"ipusubmit": "Энэ түгжээг цуцлах",
"import": "Хуудаснуудыг импортлох",
"importinterwiki": "Транс-викигийн импорт",
"import-interwiki-text": "Импортлох вики болон хуудасны нэрийг сонгоно уу.\nЗасварын огноонууд болон засварлагчдын нэрс хэвээр үлдэнэ.\n[[Special:Log/import|Импортын логоос]] бүх транс-викигийн үйлдлүүд жагсаагдсан байгаа.",
- "import-interwiki-source": "Эх үүсвэр вики/хуудас:",
+ "import-interwiki-sourcewiki": "wiki -ын эх сурвалж:",
+ "import-interwiki-sourcepage": "Эх хуудас:",
"import-interwiki-history": "Энэ хуудсын бүх хувилбаруудын түүхийг хуулах",
"import-interwiki-templates": "Бүх загварыг оруулах",
"import-interwiki-submit": "Импортлох",
]
},
"tog-underline": "Garis bawah pautan:",
- "tog-hideminor": "Sembunyikan suntingan kecil dalam perubahan terkini",
- "tog-hidepatrolled": "Sorokkan suntingan yang telah dironda daripada perubahan terkini",
+ "tog-hideminor": "Sembunyikan suntingan kecil daripada perubahan terkini",
+ "tog-hidepatrolled": "Sembunyikan suntingan yang telah dironda daripada perubahan terkini",
"tog-newpageshidepatrolled": "Sorokkan laman yang telah dironda daripada senarai laman baru",
"tog-extendwatchlist": "Kembangkan senarai pantau untuk memaparkan semua perubahan, bukan hanya yang terkini",
"tog-usenewrc": "Kumpulkan perubahan mengikut laman dalam perubahan terkini dan senarai pantau",
"tog-showtoolbar": "Tunjukkan palang alat sunting",
"tog-editondblclick": "Dwiklik untuk menyunting laman",
"tog-editsectiononrightclick": "Bolehkan penyuntingan bahagian dengan mengklik kanan pada tajuk bahagian",
- "tog-watchcreations": "Tambahkan laman-laman yang saya mencipta dan fail-fail yang saya memuat naik ke dalam senarai pantau saya",
- "tog-watchdefault": "Tambahkan laman-laman dan fail-fail yang saya menyunting ke dalam senarai pantau saya",
- "tog-watchmoves": "Tambahkan laman-laman dan fail-fail yang saya memindah ke dalam senarai pantau saya",
- "tog-watchdeletion": "Tambahkan laman-laman dan fail-fail yang saya menghapus ke dalam senarai pantau saya",
- "tog-watchrollback": "Tambahkan laman-laman di mana saya telah membuat unduran ke senarai pantau saya",
- "tog-minordefault": "Tandakan semua suntingan sebagai kecil secara asli",
+ "tog-watchcreations": "Tambahkan laman-laman yang saya cipta dan fail-fail yang saya muat naik ke dalam senarai pantau saya",
+ "tog-watchdefault": "Tambahkan laman-laman dan fail-fail yang saya sunting ke dalam senarai pantau saya",
+ "tog-watchmoves": "Tambahkan laman-laman dan fail-fail yang saya pindah ke dalam senarai pantau saya",
+ "tog-watchdeletion": "Tambahkan laman-laman dan fail-fail yang saya hapuskan ke dalam senarai pantau saya",
+ "tog-watchrollback": "Tambahkan laman-laman yang saya undurkan ke dalam senarai pantau saya",
+ "tog-minordefault": "Tandakan semua suntingan sebagai kecil secara lalai",
"tog-previewontop": "Tunjukkan pralihat di atas kotak sunting",
"tog-previewonfirst": "Tunjukkan pralihat pada suntingan pertama",
- "tog-enotifwatchlistpages": "E-melkan saya apabila sebuah laman atau fail dalam senarai pantau saya telah diubahkan",
- "tog-enotifusertalkpages": "E-melkan saya apabila laman perbincangan saya telah diubahkan",
+ "tog-enotifwatchlistpages": "E-melkan saya apabila sebuah laman atau fail dalam senarai pantau saya diubah",
+ "tog-enotifusertalkpages": "E-melkan saya apabila laman perbincangan saya diubah",
"tog-enotifminoredits": "Juga e-melkan saya untuk suntingan-suntingan laman dan fail yang kecil",
"tog-enotifrevealaddr": "Serlahkan alamat e-mel saya dalam e-mel pemberitahuan",
"tog-shownumberswatching": "Tunjukkan bilangan pemantau",
- "tog-oldsig": "Tandatangan yang sedia ada:",
+ "tog-oldsig": "Tanda tangan yang sedia ada:",
"tog-fancysig": "Anggap tandatangan sebagai teks wiki (tanpa pautan automatik)",
"tog-uselivepreview": "Gunakan pralihat langsung (dalam percubaan)",
"tog-forceeditsummary": "Tanya saya jika ringkasan suntingan kosong",
"tog-watchlisthideown": "Sembunyikan suntingan saya daripada senarai pantau",
"tog-watchlisthidebots": "Sembunyikan suntingan bot daripada senarai pantau",
"tog-watchlisthideminor": "Sembunyikan suntingan kecil daripada senarai pantau",
- "tog-watchlisthideliu": "Sembunyikan suntingan oleh pengguna yang dilog masuk daripada senarai pantau",
+ "tog-watchlisthideliu": "Sembunyikan suntingan oleh pengguna yang telah log masuk daripada senarai pantau",
"tog-watchlisthideanons": "Sembunyikan suntingan oleh pengguna tanpa nama daripada senarai pantau",
"tog-watchlisthidepatrolled": "Sembunyikan suntingan yang telah dironda daripada senarai pantau",
"tog-ccmeonemails": "Kirimkan saya salinan e-mel yang saya hantar kepada pengguna lain",
"tog-diffonly": "Jangan tunjukkan kandungan laman di bawah perbezaan",
"tog-showhiddencats": "Tunjukkan kategori tersembunyi",
"tog-norollbackdiff": "Abaikan perbezaan selepas melakukan pengunduran suntingan.",
- "tog-useeditwarning": "Beri saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan.",
+ "tog-useeditwarning": "Berikan saya amaran apabila saya meninggalkan sesebuah laman penyuntingan tanpa menyimpan perubahan",
"tog-prefershttps": "Sentiasa gunakan sambungan terlindung apabila log masuk",
"underline-always": "Sentiasa",
"underline-never": "Jangan",
"userlogin-resetlink": "Lupa nama pengguna/kata laluan anda?",
"userlogin-resetpassword-link": "Lupa kata laluan anda?",
"userlogin-helplink2": "Bantuan untuk log masuk",
- "userlogin-loggedin": "Anda sudah log masuk sebagai {{GENDER:$1|$1}}. Gunakan borang di bawah untuk log masuk sebagai pengguna lain.",
- "userlogin-createanother": "Buka satu lagi akaun",
"createacct-emailrequired": "Alamat e-mel",
"createacct-emailoptional": "Alamat e-mel (pilihan)",
"createacct-email-ph": "Isikan alamt e-mel anda",
"watchlist-details": "$1 laman dipantau ,tidak termasuk laman perbincangan.",
"wlheader-enotif": "Pemberitahuan melalui e-mel dibolehkan.",
"wlheader-showupdated": "Laman-laman yang telah diubah sejak kunjungan terakhir anda dipaparkan dalam '''teks tebal'''.",
- "wlnote": "Berikut adalah {{PLURAL:$1|perubahan|<strong>$1</strong> perubahan}} yang terkini dalam {{PLURAL:$2|sejam|<strong>$2</strong> jam}} yang lalu, tepat pada $3, $4.",
+ "wlnote": "Yang berikut ialah <strong>$1</strong> perubahan terakhir sejak $2 jam yang lalu, sehingga $3, $4.",
"wlshowlast": "Tunjukkan $1 jam / $2 hari yang lalu / $3.",
"watchlist-options": "Pilihan senarai pantau",
"watching": "Memantau...",
"userlogin-resetlink": "Insejt kif tidħol fil-kont tiegħek?",
"userlogin-resetpassword-link": "Insejt il-kelma tad-dħul (password)?",
"userlogin-helplink2": "Għajnuna biex tidħol fil-kont",
- "userlogin-loggedin": "Diġà dħalt fil-kont bħala {{GENDER:$1|$1}}.\nUża l-formola t'hawn taħt biex tidħol bħala utent ieħor",
- "userlogin-createanother": "Oħloq kont ieħor",
"createacct-emailrequired": "Indirizz elettroniku",
"createacct-emailoptional": "Indirizz elettroniku (mhux obbligatorju)",
"createacct-email-ph": "Daħħal l-indirizz elettroniku tiegħek",
"preview": "Dehra proviżorja",
"showpreview": "Dehra proviżorja",
"showdiff": "Uri t-tibdiliet",
- "anoneditwarning": "'''Twissija:''' Ma rnexxilekx tidħol.\nL-indirizz tal-IP tiegħek se jiġi reġistrat fil-kronoloġija tal-modifikar ta' din il-paġna.",
+ "anoneditwarning": "'''Attenzjoni:''' Ma dħaltx f'kontok.\nL-indirizz tal-IP tiegħek se jkun jidher pubblikament meta tagħmel xi modifika. Jekk <strong>[$1 tidħol f'kontok]</strong> jew <strong>[$2 toħloq kont]</strong>, il-modifiki li tagħmel jiġu attribwiti lill-ismek ta' utent, flimkien ma benefiċċji oħra.",
"anonpreviewwarning": "''Bħalissa mintix fil-kont tiegħek. Jekk issalva xi modifiki tiegħek, fil-kronoloġija tal-paġna se jiġi reġistrat l-indirizz IP tiegħek.''",
"missingsummary": "'''Twissija:''' Ma pprovdejt l-ebda taqsira dwar il-modifika.\nJekk terġa' tagħfas Modifika, l-modifika se tiġi salvata mingħajr waħda.",
"missingcommenttext": "Jekk jogħġbok ħalli kumment hawn taħt.",
"sp-deletedcontributions-contribs": "kontribuzzjonijiet",
"linksearch": "Fittex ħoloq esterni",
"linksearch-pat": "Mudell ta' tfittxija:",
- "linksearch-ns": "Spazju tal-isem:",
+ "linksearch-ns": "Spazju tal-ismijiet:",
"linksearch-ok": "Fittex",
"linksearch-text": "Tista' tagħmel użu minn metakarattri, per eżempju \"*.wikipedia.org\".<br />\nHuwa neċessarju minn tal-inqas dominju tal-ewwel livell, per eżempju \"*.org\".<br />\nProtokolli aċċettati: <code>$1</code> (jekk ma jiġi speċifikat l-ebda protokol, dan jiġi awtomatikament definit bħala http://).",
"linksearch-line": "$1 hija marbuta mill-paġna $2",
"undelete-error-long": "Kien hemm problemi waqt il-fajl kien qiegħed jiġi rkuprat:\n\n$1",
"undelete-show-file-confirm": "Inti ċert li trid tara reviżjoni imħassra tal-fajl \"<nowiki>$1</nowiki>\" ta' nhar $2, fil-ħin ta' $3?",
"undelete-show-file-submit": "Iva",
- "namespace": "Spazju tal-isem:",
+ "namespace": "Spazju tal-ismijiet:",
"invert": "Aqleb l-għażla",
"tooltip-invert": "Agħżel din il-kaxxa biex taħbi l-modifiki lejn paġni li jinsabu fl-ispazji tal-isem magħżula (u l-ispazju tal-isem assoċjat jekk hu magħżul)",
- "namespace_association": "Spazju tal-isem assoċjat",
+ "namespace_association": "Spazju tal-ismijiet assoċjat",
"tooltip-namespace_association": "Agħżel din il-kaxxa sabiex tinkludi l-paġna ta' diskussjoni jew l-oġġett tal-ispazju tal-isem assoċjat mal-ispazju tal-isem magħżul",
"blanknamespace": "(Prinċipali)",
"contributions": "Kontributi tal-{{GENDER:$1|utent}}",
"import": "Importa paġni",
"importinterwiki": "Importazzjoni transwiki",
"import-interwiki-text": "Agħżel wiki u titlu ta' paġna li se timporta.\nDati ta' reviżjonijiet u ismijiet tal-modifikaturi jiġu preservati.\nKull azzjonijiet ta' importazzjoni tal-transwiki jiġu reġistrati fil-[[Special:Log/import|log ta' importazzjoni]].",
- "import-interwiki-source": "Sors tal-wiki/paġna:",
"import-interwiki-history": "Kopja l-verżjonijiet tal-kronoloġija kollha għal din il-paġna",
"import-interwiki-templates": "Inkludi l-mudelli kollha",
"import-interwiki-submit": "Importa",
"exif-copyright": "Informazzjoni dwar il-propjetá letterarja",
"exif-exifversion": "Verżjoni tal-format Exif",
"exif-flashpixversion": "Verżjoni sapportata ta' Flashpix",
- "exif-colorspace": "Spazju tal-kulur",
+ "exif-colorspace": "Spazju tal-kuluri",
"exif-componentsconfiguration": "Tfissira dwar kull komponent",
"exif-compressedbitsperpixel": "Għamla tal-kompressjoni tal-istampa",
"exif-pixelydimension": "Wisa' tal-istampa",
"exif-lightsource": "Sorġent tad-dawl",
"exif-flash": "Flash",
"exif-focallength": "Distanza fokali objettiva",
- "exif-subjectarea": "Spazju tas-suġġett",
+ "exif-subjectarea": "Spazju tas-suġġetti",
"exif-flashenergy": "Saħħa tal-flash",
"exif-focalplanexresolution": "Riżoluzzjoni X fuq il-witja fokali",
"exif-focalplaneyresolution": "Riżoluzzjoni Y fuq il-witja fokali",
"returnto": "Велявтомс $1 лопантень.",
"tagline": "{{SITENAME}} -нь пельде",
"help": "Лезкс",
- "search": "Вешнэмс",
- "searchbutton": "Вешнэк",
+ "search": "Вешнемс",
+ "searchbutton": "Вешнек",
"go": "Адя",
"searcharticle": "Адя",
"history": "Лопань полавтнемат - витнемат",
"laggedslavemode": "Ванок: Кизды, лопасонть материалось таштомсь.",
"readonly": "Датабазась панжома экшсэ",
"enterlockreason": "Сёрмадт мейс сёлгамс эряви, ды ёвтак, зярдо таго арьсят панжови",
- "missing-article": "Дата йуртсто а муеви эрявикс текстэсь, сонзэ лемезэ \"$1\" $2.\n\nСеде сеедьстэ истя лиси, зярдо таштомозь diff эли историянь сюлмавома песь вети нардань лопас.\n\nЛисиндерясь аволь истя, можок муить программа керьксстэнть (тапавкс тарка) сийне.\nПачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.",
+ "missing-article": "Дата юртсто а муеви эрявикс текстэсь, сонзэ лемезэ \"$1\" $2.\n\nСеде сеедьстэ истя лиси, зярдо таштомозь diff эли историянь сюлмавома песь вети нардань лопас.\n\nЛисиндерясь аволь истя, можок муить программа керьксстэнть (тапавкс тарка) сийне.\nПачтта сёрмине теде [[Special:ListUsers/sysop|системань ветийнень]] URL адресэнть тештязь.",
"missingarticle-rev": "(лиякстомтома#: $1)",
"missingarticle-diff": "(Мейсэ явовить: $1, $2)",
"internalerror": "Потмоильведькс",
"gotaccountlink": "Совамс",
"userlogin-resetlink": "Совамо эрявикстнэнь стувтыть?",
"userlogin-resetpassword-link": "Салававалот стувтовсь?",
- "userlogin-createanother": "Шкак од совамотарка",
"createaccountmail": "Тейть кодамо понгсь салававал, кучик сонзэ ало максозь е-сёрмапаргонтень",
"createaccountreason": "Тувталось:",
"createacct-reason": "Тувтал",
"createacct-submit": "Шкик совамотаркат",
"createacct-another-submit": "Шкак од совамотарка",
"createacct-benefit-heading": "«{{SITENAME}}» сайтэнть теизь тонь кондямо ломанть.",
- "createacct-benefit-body2": "{{PLURAL:$1|1=лопа|лопат}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|лопа|лопат}}",
"badretype": "Сёрмадыть салава валот кавксть: сынь аволь вейкеть.",
"userexists": "Те лемесь уш саезь.\nАрсека эстеть лия, инеськеть.",
"loginerror": "Совамсто ильведькс",
"accountcreated": "Совамо таркась теезь",
"accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|кортнема]]) совицянь таркась теевсь-шкавсь.",
"loginlanguagelabel": "Кель: $1",
+ "pt-login": "Совамс",
+ "pt-userlogout": "Лисемс",
"user-mail-no-addy": "Терявтыть кучомс е-сёрма е-сёрмапарговтомо.",
"changepassword": "Салавань валонь полавтома",
"resetpass_announce": "Совамот топавтомга эряви путомс од салававал.",
"resetpass-submit-loggedin": "Полавтомс совамо валот",
"resetpass-submit-cancel": "Саемс мекев",
"resetpass-temp-password": "А куватень совамо валось:",
+ "resetpass-expired": "Салававалот таштомсь. Аравтт од салававал, мейле совават.",
"passwordreset": "Совамо валонь лиялгавтома",
"passwordreset-legend": "Полавтык совамо валонть",
"passwordreset-username": "Теиця леметь:",
"nocreatetext": "Те {{SITENAME}} лопасонть пирязь од лопань теемась. Тонь ули мелеть велявтомс удалов ды питнемензе-витнемензе улиця лопанть, али [[Special:UserLogin|совамс али теемс од совама]].",
"nocreate-loggedin": "Тонеть а мерить теемс-шкамс од лопат.",
"permissionserrorstext": "Тонеть а мереви теемс тень, вана {{PLURAL:$1|тувталонть|тувталтнэнь}} кисэ:",
- "permissionserrorstext-withaction": "Тонеть а мерить теемс $2, {{PLURAL:$1|1=тувталось|тувталтнэ}} вана:",
+ "permissionserrorstext-withaction": "Тонеть а мерить $2, {{PLURAL:$1|тувталось|тувталтнэ}} вана:",
"recreate-moveddeleted-warn": "'''Ванок: Вельмевтят лопа, кона нардазель.'''\n\nВасня арьсек, эряви - а эряви полалемс ды витнемс-петнемс те лопанть.\nТе лопанть нардамодо ды печтевтемадо путовкстнэ одов максозь тесэ, улезт шожда ванстнемс:",
"moveddeleted-notice": "Те лопась нардазь.\nЛопанть нардамодо сёрмадовксось максозь вана ало.",
"log-fulllog": "Ванномс журналонть весемензэ",
"revdelete-hide-image": "Кекшемс мезе файлатнесэ",
"revdelete-hide-name": "Кекшемс тев тееманть ды норовамо тарканзо",
"revdelete-hide-comment": "Витнемс-петнемс сёрмадовксонть зэмензэ.",
- "revdelete-hide-user": "Ð\9aекÑ\88емÑ\81 виÑ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c-пеÑ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c Ñ\82еиÑ\86Ñ\8f лемензÑ\8d/IP-нзÑ\8d",
+ "revdelete-hide-user": "Ð\92иÑ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c-пеÑ\82ниÑ\86Ñ\8fнÑ\82Ñ\8c Ñ\81овамолемезÑ\8d/IP Ñ\81Ñ\91Ñ\80мапаÑ\80гозо",
"revdelete-radio-same": "(иляк лиякстомто)",
"revdelete-log": "Тувталось:",
- "revdelete-submit": "Аравтомс кочказь {{PLURAL:$1|1=лиякстомтомантень|лиякстомтоматненень}}",
+ "revdelete-submit": "Аравтомс кочказь {{PLURAL:$1|лиякстомтомантень|лиякстомтоматненень}}",
"revdel-restore": "Полавтомс неявомачынзэ",
"pagehist": "Лопанть икелькс умазо",
"deletedhist": "Нардань икелькс умазо",
"mergehistory-box": "Совавтомс кавто лопатнень лиякстомтомадо сёрмадовкстнэнь ве лувс:",
"mergehistory-from": "Лисьмапря лопа:",
"mergehistory-into": "Совавтома лопа:",
- "mergehistory-list": "Ð\92ейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fвиÑ\86Ñ\8f Ñ\8eÑ\80онзо-пÑ\83Ñ\82овкÑ\81онзо",
+ "mergehistory-list": "Вейсэндявиця юронзо-путовксонзо",
"mergehistory-go": "Невтемс вейтьс совавтомкс витнемат-петнемат",
"mergehistory-submit": "Совавтомс лиякстомтоматнень вейтьс",
"mergehistory-empty": "Вейкеяк лиякстомтома а совавтови вейтьс лия марто.",
"mergehistory-invalid-destination": "Совавтомкс лопанть улезэ маштовикс лем.",
"mergehistory-autocomment": "Совавтомс [[:$1]] [[:$2]]-с",
"mergehistory-reason": "Тувталось:",
- "mergelog": "Ð\92ейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмÑ\81 логонÑ\82Ñ\8c",
- "revertmerge": "ЯвомÑ\81 логонÑ\82Ñ\8c мекев, кода Ñ\83лÑ\8cнеÑ\81Ñ\8c вейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмодо икеле",
- "history-title": "\"$1\"-нь полавтнемань историязо",
+ "mergelog": "Вейсэндямс логонть",
+ "revertmerge": "Явомс логонть мекев, кода ульнесь вейсэндямодо икеле",
+ "history-title": "\"$1\" лопанть полавтнемань историязо",
"difference-multipage": "(Мейсэ лопатне явовить)",
"lineno": "Киксэсь $1:",
"compareselectedversions": "Кочказь версиятнень аравтомс карадо-каршо",
"searchprofile-everything-tooltip": "Вешнемс весе лопатнева (кортнема лопатневаяк)",
"searchprofile-advanced-tooltip": "Вешнемс башка теезь лемпотмотнестэ",
"search-result-size": "$1 ({{PLURAL:$2|1 вал|$2 валт}})",
- "search-result-category-size": "{{PLURAL:$1|1=1 совицязо|$1 совицянзо}} ({{PLURAL:$2|1=1 явкскатегориязо|$2 явкскатегориянзо}}, {{PLURAL:$3|1=1 файла|$3 файлат}})",
+ "search-result-category-size": "{{PLURAL:$1|1 совицязо|$1 совицянзо}} ({{PLURAL:$2|1 явкскатегориязо|$2 явкскатегориянзо}}, {{PLURAL:$3|1 файла|$3 файлат}})",
"search-redirect": "(йутавтт $1-с)",
"search-section": "(пелькс $1)",
"search-suggest": "Истя мерикскелить: $1",
"search-interwiki-caption": "Дугакс проектт",
- "search-interwiki-default": "$1 савкс:",
+ "search-interwiki-default": "«$1» викинть эйстэ савкст:",
"search-interwiki-more": "(седе ламо)",
"search-relatedarticle": "Малавикс",
"searchrelated": "малавикс",
"prefs-personal": "Теицядо",
"prefs-rc": "Чиень полавтнемат-лиякстомтомат",
"prefs-watchlist": "Ванома лемрисьме",
- "prefs-watchlist-days-max": "Весемеде куватьс $1 {{PLURAL:$1|1=чис|чис}}",
+ "prefs-watchlist-days-max": "Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}",
"prefs-watchlist-edits-max": "Весемеде покш цётось: 1000",
"prefs-misc": "Минеть-сюнот",
"prefs-resetpass": "Салавань валонь полавтома",
"prefs-email": "Е-сёрмат-мезть",
"prefs-rendering": "Тюсозо-лангозо",
"saveprefs": "Ванстомс",
- "restoreprefs": "Велявтомс мекев весе ушодкс ладсематнень",
+ "restoreprefs": "Велявтомс мекев весе ушодкс ладсематнень (весе явкстнэва)",
"prefs-editing": "Витнема-петнема",
"rows": "Валчилькстнэ (строкатне):",
"columns": "Палманть:",
"searchresultshead": "Вешнема",
"recentchangesdays": "Зяро чить невтемс чиень полавтнематнесэ-лиякстомтоматнесэ:",
- "recentchangesdays-max": "Весемеде куватьс $1 {{PLURAL:$1|1=чис|чис}}",
+ "recentchangesdays-max": "Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}",
"recentchangescount": "Васень аравтоматнень коряс зяро витнемат-петнемат невтемс:",
"prefs-help-recentchangescount": "Тезэнь совавтозь чиень полавтнемат-лиякстомтомат, лопань лувт-путовкст, журналт.",
"timezonelegend": "Шкань зонась:",
"timezoneregion-pacific": "Сэтьме иневедь",
"prefs-searchoptions": "Вешнем",
"prefs-namespaces": "Лем потмот",
- "default": "зярдо лиякс апак йовта",
+ "default": "зярдо лиякс апак ёвта",
"prefs-files": "Файлат",
"youremail": "Е-сёрма:",
"username": "Теицянь леметь:",
"yourrealname": "Алкуксонь леметь:",
"yourlanguage": "Келесь:",
"yournick": "Кедень путома:",
- "badsiglength": "Кедень путомат пек кувака.\nЭйсэнзэ иляст уле $1 -до ламо {{PLURAL:$1|1=тешкст|тешкст}}.",
- "yourgender": "СÑ\8bмеÑ\82Ñ\8c (Ñ\86Ñ\91Ñ\80анÑ\8c-Ñ\82ейÑ\82еÑ\80енÑ\8c):",
+ "badsiglength": "Кедень путомат пек кувака.\nЭйсэнзэ иляст уле $1 -до ламо {{PLURAL:$1|тешкст|тешкст}}.",
+ "yourgender": "ТонÑ\81Ñ\8c кода меÑ\80евлиÑ\82Ñ\8c Ñ\8dÑ\81Ñ\8c пÑ\80Ñ\8fдоÑ\82?",
"gender-unknown": "А меревлинь",
"gender-male": "Сон витни-петни викилопатнесэ",
"gender-female": "Сон витни-петни викилопатнесэ",
"right-undelete": "Вельмевтемс нардань лопа",
"right-block": "Кардамс лия совийтнень-лисийтнень витнемадо-петнемадо",
"right-blockemail": "Кардамс лия лисийтнень-совийтнень е-сёрмань кучомадо",
- "right-editinterface": "Витнемс-петнемс теицянь интерчаманть (васодема йожонть)",
+ "right-editinterface": "Витнемс-петнемс теицянь интерчаманть (васодема ёжонть)",
"right-editusercssjs": "Витнемс-петнемс лия теицятнень CSS ды JS файласт",
"right-editusercss": "Витнемс-петнемс лия теицятнень CSS файласт",
"right-edituserjs": "Витнемс-петнемс лия теицятнень JS файласт",
"right-import": "Ёвкстамс лия Викистэ лопат",
"right-patrol": "Тешкстамс лиянь витнематнень-петнематнень лувонь кирдиеньсекс",
- "right-mergehistory": "Ð\92ейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмÑ\81 лопаÑ\82ненÑ\8c Ñ\8eÑ\80оÑ\81Ñ\82-пÑ\83Ñ\82овкÑ\81оÑ\81Ñ\82",
+ "right-mergehistory": "Вейсэндямс лопатнень юрост-путовксост",
"right-userrights": "Витнемс-петнемс совицянь весе видечитнень",
"right-siteadmin": "Датабазань сёлгомо ды панжомо",
"right-passwordreset": "Ваномс теицянь салава валонь полавтома е-сёрмат",
"action-move-subpages": "печтевтемс те лопанть, ды алонзо весе лопатнень",
"action-move-rootuserpages": "печтевтемс теицянь юрт лопатнень",
"action-movefile": "печтевтемс те файланть",
- "action-upload": "йовкстамс те файланть",
+ "action-upload": "ёвкстамс те файланть",
"action-reupload": "уликс файланть полавтомс одонть марто",
"action-upload_by_url": "ёвкстамс те файланть URL адресстэ",
"action-writeapi": "нолдамс тевс сёрмадома API-нть",
"action-block": "кардамс те совицянть витнемадо-петнемадо",
"action-import": "совавтомс тезэнь лопат лия Викистэ",
"action-importupload": "совавтомс тезэнь лопат файлань путома юртсто",
- "action-mergehistory": "вейÑ\82Ñ\8cÑ\81Ñ\8dндÑ\8fмÑ\81 Ñ\82е лопанÑ\82Ñ\8c Ñ\8eÑ\80онзо-пÑ\83Ñ\82овкÑ\81онзо",
+ "action-mergehistory": "вейсэндямс те лопанть юронзо-путовксонзо",
"action-userrights": "витнемс-петнемс совицянь весе видечитнень",
"action-userrights-interwiki": "витнемс-петнемс лия викитнесэ теицянь видечитнень",
"action-sendemail": "кучомс е-сёрмат",
"recentchanges-label-bot": "Те витнеманть-петнеманть теизе кона-кона бот",
"recentchanges-label-unpatrolled": "",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (вантаять [[Special:NewPages|од лопань лемрисьме]])",
- "rcnotefrom": "Ð\90ло невÑ\82езÑ\8c '''$2''' лиÑ\8fкÑ\81Ñ\82омÑ\82омаÑ\81Ñ\82о Ñ\81аезÑ\8c ('''$1''' видÑ\81).",
+ "rcnotefrom": "Ð\90ло макÑ\81озÑ\8c {{PLURAL:$5|лиÑ\8fкÑ\81Ñ\82омÑ\82омаÑ\81Ñ\8c, конаÑ\81Ñ\8c|лиÑ\8fкÑ\81Ñ\82омÑ\82омаÑ\82не, конаÑ\82не}} Ñ\82еезÑ\8c <strong>$3, $4</strong> Ñ\88каÑ\81Ñ\82о Ñ\81аезÑ\8c (веÑ\81емеде ламо невÑ\82езÑ\8c <strong>$1</strong>).",
"rclistfrom": "Невтемс од витьнематнень $3 $2-нть эйстэ саезь.",
"rcshowhideminor": "$1 апокшкэ витнемат-петнемат",
"rcshowhidebots": "$1 ботт",
"recentchangeslinked-page": "Лопанть лемезэ:",
"recentchangeslinked-to": "Тень таркас невтить те лопанть марто сюлмазь лопатнесэ полавтнематнень",
"upload": "Ёкстамс файла",
- "uploadbtn": "Ð\99овкÑ\81амÑ\81 Ñ\84айланÑ\82Ñ\8c",
+ "uploadbtn": "Ð\81вкÑ\81Ñ\82амÑ\81 Ñ\84айла",
"uploadnologin": "Эзить сова",
- "uploaderror": "Ð\99овкстамсто манявома",
+ "uploaderror": "Ð\81вкстамсто манявома",
"upload-permitted": "Файлань форматт, конат меревить: $1.",
"upload-preferred": "Файлань типт, конатне паро мельсэ учовить: $1.",
"upload-prohibited": "Файлань типт, конатне кардазь: $1.",
- "uploadlogpage": "Файлань йовкстамодо журнал",
+ "uploadlogpage": "Файлань ёвкстамодо журнал",
"filename": "Файлань лем",
"filedesc": "Нурькинестэ",
"fileuploadsummary": "Нурькинестэ:",
"filename-tooshort": "Файлань лементь а саты кувалмозо.",
"unknown-error": "А содавикс манявкс лиссь.",
"file-thumbnail-no": "Файланть лемезэ ушодови <strong>$1</strong>.\nСонсь маряви вишкалгавтозь фотокуво, покшолмазо ''(кенжешка)''.\nУлиндеряй файланть покш верзиязо, йовкстыка сонзэ - арась, полавтыка тетень лемензэ.",
- "file-exists-duplicate": "Те кавонзавкс файла вана {{PLURAL:$1|1=те файланть|неть файлатнень}} эйстэ:",
+ "file-exists-duplicate": "Те кавонзавкс файла вана {{PLURAL:$1|те файланть|неть файлатнень}} эйстэ:",
"uploadwarning": "Совавтомадо кардамонь пачтямо",
"savefile": "Ванстомс файланть",
"uploaddisabled": "Совавтомась лоткавтозь",
"license-header": "Лицензиянь теема:",
"nolicense": "Лицензия арась",
"license-nopreview": "(Васнянь невтевкс арась)",
- "upload_source_file": " (арси машинасот файла)",
+ "upload_source_file": " (арсимашинастот файла, конань тонсь кочкик)",
"listfiles_search_for": "Вешнемс медиа лементь:",
"imgfile": "файл",
"listfiles": "Файлат-мезть",
"filepage-nofile": "Истямо лем марто файла арась.",
"uploadnewversion-linktext": "Йовкстак од версия те файластонть",
"shared-repo-from": "вана теньстэ $1",
- "shared-repo": "вейÑ\82Ñ\8cÑ\81Ñ\8dнÑ\8c ванÑ\81Ñ\82ома Ñ\82аÑ\80ка",
+ "shared-repo": "вейсэнь ванстома тарка",
"filerevert": "Велявтомс $1 мекев",
"filerevert-legend": "Велявтомс файланть",
"filerevert-comment": "Тувталось:",
"linksearch": "Ушо ёндонь сюлмавомапенень вешнема",
"linksearch-pat": "Вешнемкс парцун:",
"linksearch-ns": "Лем потмозо:",
- "linksearch-ok": "Вешнэмс",
+ "linksearch-ok": "Вешнемс",
"linksearch-line": "$1-в сюлмавома песь моли вана тестэ $2",
"listusers-submit": "Невтемс",
"listusers-noresult": "Совицязо а муеви",
"protect-default": "Весе теицятненень маштови",
"protect-fallback": "Вешеви ве мельс прамось «$1»-нть",
"protect-level-autoconfirmed": "Саймас аравтомс од ды апак сёрмадстово теицятнень",
- "protect-level-sysop": "Ансяк администраторт",
+ "protect-level-sysop": "Ансяк администратортнэнень мереви",
"protect-summary-cascade": "каскадонь ладсо",
"protect-expiring": "прядови $1 (UTC)",
"protect-expiry-indefinite": "певтема",
"undeleteviewlink": "ваномс",
"undeleteinvert": "Кочказень таркас апаконь кочкамо",
"undeletecomment": "Тувталось:",
- "undeletedrevisions": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь",
+ "undeletedrevisions": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь",
"undeletedrevisions-files": "{{PLURAL:$1|1=1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1=1 файла|$2 файлат}} вельмевтезь",
"undeletedfiles": "{{PLURAL:$1|1=1 файла|$1 файлат}} вельмевтезь",
- "undelete-search-box": "Ð\92еÑ\88немÑ\81 наÑ\80данÑ\8c лопаÑ\82ненÑ\8c йÑ\83тксто",
+ "undelete-search-box": "Ð\92еÑ\88немÑ\81 наÑ\80дазÑ\8c лопаÑ\82ненÑ\8c Ñ\8eтксто",
"undelete-search-prefix": "Невтемс лопат тестэ саезь:",
- "undelete-search-submit": "Вешнэмс",
+ "undelete-search-submit": "Вешнемс",
"undelete-error-short": "\"$1\" файлань вельмевтемстэ лиссь ильведевкс",
"undelete-show-file-submit": "Истя",
"namespace": "Лем потмозо:",
"sp-contributions-search": "Путовксонь вешнеме",
"sp-contributions-username": "IP адрес эли теицянь лем:",
"sp-contributions-toponly": "Невтемс ансяк не витнематнень-петнематнень, конат совавтовить меельце верзиятнень юткс",
- "sp-contributions-submit": "Вешнэмс",
+ "sp-contributions-submit": "Вешнемс",
"whatlinkshere": "Мезе тезэнь сюлмави",
"whatlinkshere-title": "$1 марто сюлмазь лопатне",
"whatlinkshere-page": "Лопась:",
"whatlinkshere-prev": "{{PLURAL:$1|1=икеле|седе икелень $1}}",
"whatlinkshere-next": "{{PLURAL:$1|1=сыця|сы $1}}",
"whatlinkshere-links": "← сюлмавомапеть",
- "whatlinkshere-hideredirs": "$1 {{PLURAL:$1|1=тарка йутавты|таркат йутавтыть}} тей",
+ "whatlinkshere-hideredirs": "$1 ютавты козонь-козонь",
"whatlinkshere-hidetrans": "$1 сюлмавозь пелькстнэнь",
"whatlinkshere-hidelinks": "$1 сюлмавома петь",
"whatlinkshere-hideimages": "$1 файланть сюлмавомапензэ",
"blocklist-target": "Норовамо тарка",
"blocklist-expiry": "Прядови",
"blocklist-reason": "Тувтал",
- "ipblocklist-submit": "Вешнэме",
+ "ipblocklist-submit": "Вешнеме",
"infiniteblock": "певтеме",
"expiringblock": "саймас саемась прядови $1 $2 цяссто",
"anononlyblock": "ансяк лемтеме",
"tooltip-ca-edit": "Те лопаськак витневи-петневи. Ансяк, ванстомадо икеле яла васнянь невтевкс повнэнть лепштика.",
"tooltip-ca-addsection": "Ушодомс од явкс.",
"tooltip-ca-viewsource": "Те лопась ванстозь. Ули меленк ваномонзо сонзе лисмапрянть.",
- "tooltip-ca-history": "Те лопанть йутазь версиянзо.",
+ "tooltip-ca-history": "Те лопанть ютазь версиянзо.",
"tooltip-ca-protect": "Аравтомс те лопанть прянь ванстомас",
"tooltip-ca-delete": "Нардамс те лопанть, илязо улеяк",
"tooltip-ca-move": "Ютавтык те лопанть лияв",
"newimages-legend": "Сувтеме",
"newimages-label": "Файлалем (эли пельксэзэ):",
"noimages": "Арась мезе ваномс.",
- "ilsubmit": "Вешнэмс",
+ "ilsubmit": "Вешнемс",
"bydate": "чинь коряс",
"ago": "$1-до икеле",
"bad_image_list": "Лувось-форматось вана истямо:\n\nТесэ ансяк потмонть пакшкетне (рисьметне, конат ушодовить * тешкстсэ) лововить. Рисьмень васень сюлмавома пентень эряви невтемс амаштовикс файла лангс. Секе рисьминентень понгиндеряйть лия сюлмавома петь, сынь лововить башка, лиякс меремс сынь лопат, косо файлат маштовить невтемс.",
"version-software": "Нолдань программат",
"version-software-product": "Шкавкс-нолдавкс",
"version-software-version": "Верзия",
- "fileduplicatesearch": "Вешнэмс кавтаське файлат",
- "fileduplicatesearch-legend": "Вешнэмс кавтаське",
+ "fileduplicatesearch": "Вешнемс кавтаське файлат",
+ "fileduplicatesearch-legend": "Вешнемс кавтаське",
"fileduplicatesearch-filename": "Файла лем:",
- "fileduplicatesearch-submit": "Вешнэмс",
+ "fileduplicatesearch-submit": "Вешнемс",
"specialpages": "Башка тевень лопат",
"specialpages-group-other": "Лия башка тевень лопат",
"specialpages-group-login": "Совамс / шкамс совамотарка",
"Parthava (on mzn.wikipedia.org)",
"Spacebirdy",
"محک",
- "아라"
+ "아라",
+ "Alirezaaa"
]
},
"tog-underline": "پیوندون زیر خط دکشی بواشه",
"june": "ژوئن",
"july": "ژوئیه",
"august": "آگوست",
- "september": "سÙ\80Ù\87â\80\8cÙ¾Ù\80تÙ\80Ù\87â\80\8cÙ\85Ù\80بÙ\80ر",
+ "september": "سپتاÙ\85بر",
"october": "اکتبر",
"november": "نـووهمـبـر",
"december": "دسامبر",
"june-gen": "جـون",
"july-gen": "ژوئیه",
"august-gen": "آگوست",
- "september-gen": "سÙ\80Ù\87â\80\8cÙ¾Ù\80تÙ\80Ù\87â\80\8cÙ\85Ù\80بÙ\80ر",
+ "september-gen": "سپتاÙ\85بر",
"october-gen": "اکتبر",
"november-gen": "نـووهمـبـر",
"december-gen": "دسامبر",
"revertmove": "واچـیـهن",
"delete_and_move_confirm": "أره، پاک هاکهن وه ره",
"export": "دأیابأبهردهن ولـگئون",
- "exporttext": "شما بتونّی متن و تاریخچهٔ دچییه بیّن اتا صفحهٔ مشخص یا یتـّا مجموعه از صفحهها ره به شکل دپوشنییه اکسامال دله بریم دربَورین.\n\nاین اطلاعات ره بنشنه اتا ویکی دیگه دله که نرمافزار «مدیاویکی» ره اجرا کانده از طریق [[Special:Import|صفحهٔ دلهدشنیین]] وارد هاکردن.\n\nبریمدربَوردن صفحهها وسّه، وشون عنوان ره این جعبه دله دشنین (هر سطر فقط اتا عنوان) و معلوم هاکنین که تازه دگاردستهئون صفحه ره همراه نسخهئون قدیمیتر و تاریخچهٔ صفحه خوندنّی، یا تازه دگاردستهئون صفحه و اطلاعات آخرین دچییه ره، تیناری اشنّی.\n\nدومین حالت سَره، شما بتونّی اتا لینک جه استفاده هاکنین، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] صفحهٔ «[[{{MediaWiki:Mainpage}}]]» وسّه.",
+ "exporttext": "شما بتونّی متن و تاریخچهٔ دچییه بیّن اتا صفحهٔ مشخص یا یتـّا مجموعه از صفحات ره به شکل دپوشنییه اکسامال دله بریم دربَورین.\n\nاین اطلاعات ره بنشنه اتا ویکی دیگه دله که نرمافزار «مدیاویکی» ره اجرا کانده از طریق [[Special:Import|صفحهٔ دلهدشنیین]] وارد هاکردن.\n\nبریمدربَوردن صفحات وسّه، وشون عنوان ره این جعبه دله دشنین (هر سطر فقط اتا عنوان) و معلوم هاکنین که تازه دگاردستهئون صفحه ره همراه نسخهئون قدیمیتر و تاریخچهٔ صفحه خوندنّی، یا تازه دگاردستهئون صفحه و اطلاعات آخرین دچییه ره، تیناری اشنّی.\n\nدومین حالت سَره، شما بتونّی اتا لینک جه استفاده هاکنین، مثلاً [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] صفحهٔ «[[{{MediaWiki:Mainpage}}]]» وسّه.",
"allmessages-filter-all": "همه",
"thumbnail-more": "گت بوو",
"import-interwiki-submit": "بیاردن",
"moredotdotdot": "Iáu-ū",
"morenotlisted": "這毋是完整的表",
"mypage": "Ia̍h",
- "mytalk": "Góa ê thó-lūn",
+ "mytalk": "Thó-lūn",
"anontalk": "Chit ê IP ê thó-lūn-ia̍h",
"navigation": "Se̍h chām",
"and": " kap",
"unprotectthispage": "kái chit ia̍h ê pó-hō͘",
"newpage": "Sin ia̍h",
"talkpage": "Thó-lūn chit ia̍h",
- "talkpagelinktext": "thó-lūn",
+ "talkpagelinktext": "Thó-lūn",
"specialpage": "Te̍k-sû-ia̍h",
"personaltools": "Kò-jîn kang-khū",
"articlepage": "Khoàⁿ loē-iông ia̍h",
"userlogin-resetlink": "你敢袂記得你登入的資料?",
"userlogin-resetpassword-link": "袂記得你的密碼?",
"userlogin-helplink2": "協助你登入",
- "userlogin-loggedin": "你已經用{{GENDER:$1|$1}}登入,用下跤的表,登入別个名。",
- "userlogin-createanother": "開另外一个口座",
"createacct-emailrequired": "電子批地址",
"createacct-emailoptional": "電子批地址(無一定愛寫)",
"createacct-email-ph": "拍你的電子批地址",
"unwatch": "Mài kàm-sī",
"unwatchthispage": "Mài koh kàm-sī",
"watchlist-details": "Kàm-sī-toaⁿ ū {{PLURAL:$1|$1 ia̍h|$1 ia̍h}}, thó-lūn-ia̍h bô sǹg chāi-lāi.",
- "wlnote": "Ē-kha sī '''$2''' tiám-cheng í-lāi siōng sin ê $1 ê kái-piàn.",
+ "wlnote": "$3 $4: Ē-kha sī <strong>$2</strong> tiám-cheng í-lāi siōng sin ê <strong>$1</strong> ê kái-piàn.",
"wlshowlast": "Hián-sī chêng $1 tiám-cheng $2 ji̍t $3",
"deletepage": "Thâi ia̍h",
"confirm": "Khak-tēng",
"watchlistedit-normal-submit": "Mài kàm-sī",
"watchlistedit-normal-done": "Í-keng ū $1 ia̍h ùi lí ê kám-sī-toaⁿ soá cháu:",
"watchlisttools-edit": "Khoàⁿ koh kái kàm-sī-toaⁿ",
- "watchlisttools-raw": "Kái tshing-chheng ê kàm-sī-toaⁿ",
+ "watchlisttools-raw": "Kái chhiⁿ ê kàm-sī-toaⁿ",
"duplicate-defaultsort": "'''Thê-chhíⁿ lí:'''Siat-piān ê pâi-lia̍t hong-sek \"$2\" thè-oāⁿ chìn-chêng ê siat-piān ê pâi-lia̍t hong-sek \"$1\".",
"version": "Pán-pún",
"specialpages": "Te̍k-sû-ia̍h",
"tog-numberheadings": "Annúmmera automatecamente 'e títule",
"tog-showtoolbar": "Aspone 'a barra d''e stromiente 'e cagno",
"tog-editondblclick": "Cagna 'e pàggene cliccanno ddoje vote",
- "tog-editsectiononrightclick": "Permette 'e cangne 'e sezzione cliccanno p''o tasto destro ncopp 'e titule 'e sezzione",
+ "tog-editsectiononrightclick": "Permette 'e cagnà 'e sezzione cliccanno p' 'o tasto dritto ncopp' 'e titule 'e sezzione",
"tog-watchcreations": "Azzecca 'e ppaggene criate e li files carrecate ncopp'â l'elenco 'e cuntrollo",
"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",
"create-this-page": "Cria sta paggena",
"delete": "Scancèlla",
"deletethispage": "Scancèlla chésta paggena",
- "undeletethispage": "Ripristina chista paggena",
+ "undeletethispage": "Arrepiglia chista paggena",
"undelete_short": "Arremedia {{PLURAL:$1|na verziona|$1 vverziune}}",
"viewdeleted_short": "Vide {{PLURAL:$1|nu cagnamiénto scancellato|$1 cagnamiénte scancellate}}",
"protect": "Prutegge",
"otherlanguages": "Ate lengue",
"redirectedfrom": "(Redirect 'a $1)",
"redirectpagesub": "Paggena 'e redirect",
- "lastmodifiedat": "Urdema cagnamiénto pe' a paggena: $2, $1.",
+ "lastmodifiedat": "Urdemo cagnamiénto pe' a paggena: $2, $1.",
"viewcount": "Chesta paggena è stata liggiùta {{PLURAL:$1|una vòta|$1 vòte}}.",
"protectedpage": "Paggena prutetta",
"jumpto": "Vaje a:",
"jumptonavigation": "navigazione",
"jumptosearch": "truova",
- "view-pool-error": "Te cercammo scusa, 'e servers téneno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta paggena.\nPe' piacere, aspetta nu poco primma 'e turnà a caricà sta paggena.\n\n$1",
- "generic-pool-error": "Te cercammo scusa, 'e servers téneno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta risorsa.\nPe' piacere, aspetta nu poco primma 'e turnà a caricà sta risorsa.",
+ "view-pool-error": "Ve cercammo scusa, 'e servers hanno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta paggena.\nPe' piacere, aspettate nu poco primma 'e turnà a carrecà sta paggena.\n\n$1",
+ "generic-pool-error": "Ve cercammo scusa, 'e servers hanno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta risorsa.\nPe' piacere, aspettate nu poco primma 'e turnà a carrecà sta risorsa.",
"pool-timeout": "Tiempo pe' s'aspettà ô blocco",
"pool-queuefull": "A córa 'e fatiche è chiena",
"pool-errorunknown": "Errore scanusciuto",
"aboutpage": "Project:'Nfrummazione",
"copyright": "Cuntenute suggiette a licienza 'e auso $1 se nun fuje ritto atro.",
"copyrightpage": "{{ns:project}}:Copyrights",
- "currentevents": "Novità",
+ "currentevents": "Nuvità",
"currentevents-url": "Project:Novità",
"disclaimers": "Avvertimiènte",
"disclaimerpage": "Project:Avvertimiènte generale",
"versionrequiredtext": "Pe' usà sta paggena ce vò 'a verziona $1 'e MediaWiki. Vide [[Special:Version|'a paggena 'e verzione]].",
"ok": "OK",
"retrievedfrom": "Estratto 'e \"$1\"",
- "youhavenewmessages": "Haje $1 ($2).",
+ "youhavenewmessages": "{{PLURAL:$3|Tenite}} $1 ($2).",
"youhavenewmessagesfromusers": "{{PLURAL:$4|Tiene}} $1 'a {{PLURAL:$3|n'atu utente|$3 utente}} ($2).",
"youhavenewmessagesmanyusers": "Tiene $1 'a tant'utente ($2).",
"newmessageslinkplural": "{{PLURAL:$1|na mmasciata nova|999=mmasciate nnove}}",
"hidetoc": "annascunne",
"collapsible-collapse": "Annascunne",
"collapsible-expand": "faje vede",
- "confirmable-confirm": "Sì {{GENDER:$1|sicuro|sicura}}?",
+ "confirmable-confirm": "Site {{GENDER:$1|sicuro|sicura}}?",
"confirmable-yes": "Sì",
"confirmable-no": "No",
- "thisisdeleted": "Vere o ripristina $1?",
+ "thisisdeleted": "Vedè o arripiglià $1?",
"viewdeleted": "Vire $1?",
"restorelink": "{{PLURAL:$1|nu cagnamiénto scancellato|$1 cagnamiénte scancellate}}",
"feedlinks": "Feed:",
"databaseerror-query": "Richiesta: $1",
"databaseerror-function": "Funzione: $1",
"databaseerror-error": "Sbaglio: $1",
- "laggedslavemode": "'''Attenziò:''' 'a paggena putesse nun fà vedé ll'aggiornamente cchiù ricente.",
+ "laggedslavemode": "'''Attenzione:''' 'a paggena putesse nun fà vedé ll'aggiornamente cchiù recente.",
"readonly": "Database bloccato",
"enterlockreason": "Miette 'o mutivo 'e blocco, nzieme a 'o mumento quanno se penza ca 'o blocco se sarrà fernuto",
"readonlytext": "Mo' mo' 'o database è bloccato e nun se ponno azzeccà cagnamiente o pàggene. 'O blocco è normalmente azzeccato a n'operazione semprice 'e manutenzione, e quanno s'è fernuta allora 'a paggena addeventa nurmale.\n\nL'ammenistratore d' 'o sistema ch'a fatto 'o blocco ce dà sta spiegazione: $1",
"readonly_lag": "'O database s'è bloccato automaticamente pe' tramente ca 'e servers 'e database schiave sincronizzano c' 'o server masto.",
"internalerror": "Errore 'nterno",
"internalerror_info": "Errore 'nterno: $1",
- "filecopyerror": "Nun se può copiare 'o file \"$1\" into \"$2\".",
+ "filecopyerror": "Nun se può copiare 'o file \"$1\" int'a \"$2\".",
"filerenameerror": "Nun se può rinnummenare 'o file \"$1\" into \"$2\".",
"filedeleteerror": "Nun se pô scancellà 'o file \"$1\"",
"directorycreateerror": "Nun se può crià 'a cartella \"$1\".",
"viewsource": "Vere sorgente",
"viewsource-title": "Vere surgente 'e $1",
"actionthrottled": "Azione ritardata",
- "actionthrottledtext": "Comme misura anti-spam, sì lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mò stu lèmmeto è stato superato.\nPe' piacere prova n'ata vota dint'a cocche minuto.",
+ "actionthrottledtext": "Comme misura anti-spam, site lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mò stu lèmmeto è stato superato.\nPe' piacere pruvate n'ata vota dint'a cocche minuto.",
"protectedpagetext": "Sta paggena s'è prutetta pe' ne bloccà 'a mudifeca o n'ata azione.",
"viewsourcetext": "Putisse vedé e copià 'o codece surgiva 'e sta paggena:",
"viewyourtext": "Putisse vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte tuoje</strong> a sta paggena:",
- "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere usa [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
- "editinginterface": "'''Attenziò:''' 'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere usa [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+ "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+ "editinginterface": "'''Attenziò:''' 'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere ausate [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
"cascadeprotected": "Sta paggena è stata prutetta 'a 'o cangamento pecché sta dint'a {{PLURAL:$1|sta paggena, che è prutetta|sti paggene, che songo prutette}} quann' 'a l'ozione \"ricurziva\" è attiva:\n$2",
- "namespaceprotected": "Nun hè permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
+ "namespaceprotected": "Nun avite permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
"customcssprotected": "Nun t'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
"customjsprotected": "Nun t'è permesso 'a cagnà sta paggena JavaScript, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
"mycustomcssprotected": "Nun t'è permesso 'a cagnà sta paggena CSS.",
"invalidtitle-knownnamespace": "Titolo nun buono c' 'o namespace \"$2\" e testo \"$3\"",
"invalidtitle-unknownnamespace": "Titolo nun buono c' 'o namespace scanusciuto \"$1\" e testo \"$2\"",
"exception-nologin": "Acciesso nun affettuato",
- "exception-nologin-text": "Pe' piacere fa ll'accieso pe putè accedere a sta paggena o azione.",
+ "exception-nologin-text": "Pe' piacere facite ll'accieso pe putè accedere a sta paggena o azione.",
"exception-nologin-text-manual": "Pe' piacere $1 pe putè trasì dint'a sta paggena o azione.",
"virus-badscanner": "Sbaglio 'e configurazione: antivirus scanusciuto: ''$1''",
"virus-scanfailed": "scanziona fallita (codece $1)",
"virus-unknownscanner": "antivirus scanusciuto:",
- "logouttext": "'''Site asciùte.'''\n\nNota ca arcune paggene potrebbero cuntinuà ad apparire comme se 'o logout nun fosse avvenuto finché nun venne pulita 'a cache d\"o proprio browser.",
+ "logouttext": "'''Site asciùte.'''\n\nNota ca arcune paggene putessero cuntinuà ad cumparì comme se 'o logout nun fosse affettuato fin quanno nun sarrà pulezzata 'a cache d\"o proprio browser.",
"welcomeuser": "Bemmenuto, $1!",
- "welcomecreation-msg": "'O cunto tuo è stato criato.\nMo' può cagnà 'e [[Special:Preferences|preferenze 'e {{SITENAME}}]].",
+ "welcomecreation-msg": "'O cunto vuosto è stato criato.\nMo' putite cagnà 'e [[Special:Preferences|preferenze 'e {{SITENAME}}]].",
"yourname": "Nomme utente",
"userlogin-yourname": "Nomme utente",
"userlogin-yourname-ph": "'Nserisce 'o tujo nomme utente",
"logout": "Jèsce",
"userlogout": "Jèsce",
"notloggedin": "Acciesso nun affettuato",
- "userlogin-noaccount": "Nun haje ancora n'acciesso?",
+ "userlogin-noaccount": "Nun tenite ancora n'acciesso?",
"userlogin-joinproject": "Fà 'o riggistro ncopp'a {{SITENAME}}",
- "nologin": "Nun haje ancora n'acciesso? '''$1'''.",
+ "nologin": "Nun tenite ancora n'acciesso? '''$1'''.",
"nologinlink": "Crialo mmo",
"createaccount": "Cria nu cunto novo",
"gotaccount": "Tiene già nu cunto? '''$1'''.",
"gotaccountlink": "Tràse",
- "userlogin-resetlink": "Haje dimenticato 'e toje date 'e acciesso?",
+ "userlogin-resetlink": "V'avite scurdato 'e dettaglie d'acciesso vuoste?",
"userlogin-resetpassword-link": "Te sì scurdat' 'a password?",
"userlogin-helplink2": "Aiuto cu l'accieso",
- "userlogin-loggedin": "Sì già connesso comme {{GENDER:$1|$1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
- "userlogin-createanother": "Cria n'at'account",
"createacct-emailrequired": "Indirizzo email",
"createacct-emailoptional": "Indirizzo 'e posta elettronica (ozzionale)",
"createacct-email-ph": "Scrive 'o nderizzo mail tuo",
"createacct-benefit-heading": "{{SITENAME}} è fatta 'e perzone comme te.",
"createacct-benefit-body1": "{{PLURAL:$1|càgnamiento|càgnamiente}}",
"createacct-benefit-body2": "{{PLURAL:$1|paggena|paggene}}",
- "createacct-benefit-body3": "{{PLURAL:$1|contribbutòre ricente|contribbutture ricente}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|contribbutòre recente|contribbuttore recente}}",
"badretype": "'E passwords ch'è mis nun songe eguale.",
- "userexists": "'O nomme utente ch'è mis è già ausàto.\nPe' piacere scigliete n'atu nomme.",
+ "userexists": "'O nomme utente ch'avete miso è già ausàto.\nPe' piacere sciglite n'atu nomme.",
"loginerror": "Probblema 'e accièsso",
"createacct-error": "Errore 'e criazione 'e cunto",
"createaccounterror": "Nun se può crià nu cunto: $1",
"nocookiesnew": "'A riggistrazione è stata completata, ma nun se può accedere a {{SITENAME}} pecché 'e cookie songo disattivate. Prova n'ata vota c' 'o nomme e 'a password quanno 'e cookie sarrann'attivate dint'o navigatore stesso.",
- "nocookieslogin": "{{SITENAME}} usa cookies pe' putè dà accies'a ll'utente.\n'E cookies tuoje songo stutate.\nPe' piacere appiccia 'e cookies dint'o navigatóre e prova n'ata vota.",
+ "nocookieslogin": "{{SITENAME}} usa cookies pe' putè dà accies'a ll'utente.\n'E cookies vuoste songo stutate.\nPe' piacere appicciate 'e cookies dint'o navigatóre e pruvate n'ata vota.",
"nocookiesfornew": "'O cunto utente nu s'è criato, pecché nun s'è potuto confirmà d' 'a fonte suja.\nVide si 'e cookies song'appicciate, ricarreca 'a paggena e prova n'ata vota.",
- "noname": "Nun hè specificato nu nomme valido d'utente.",
+ "noname": "Nun avite specificato nu nomme valido d'utente.",
"loginsuccesstitle": "Acciesso affettuato",
"loginsuccess": "'''Si stato cunnesso ô server 'e {{SITENAME}} cu 'o nomme utente 'e \"$1\".'''",
"nosuchuser": "Nun è riggistrato nisciuno utente c' 'o nomme \"$1\".\n'E nomme utente songo sensibbele a 'e maiuscole.\nCuntrolla 'o nomme nzertàto, o [[Special:UserLogin/signup|crìa n'utenza nova]].",
"nosuchusershort": "Nun ce stanno utente cu o nòmme \"$1\". Cuntrolla si scrivìste buòno.",
"nouserspecified": "Tiene 'a dìcere nu nomme pricìso.",
"login-userblocked": "Chist'utente è bloccato. Nun se può effettuà 'o login.",
- "wrongpassword": "'A password nzertàta nun è bbona.\nPe' piacere prova n'ata vota.",
- "wrongpasswordempty": "'A passwort nzertàta è bbacante.\nPe' piacere prova n'ata vota.",
+ "wrongpassword": "'A password nzertàta nun è bbona.\nPe' piacere pruvate n'ata vota.",
+ "wrongpasswordempty": "'A password nzertàta è abbacante.\nPe' piacere pruvate n'ata vota.",
"passwordtooshort": "'E password hann'avé minimo {{PLURAL:$1|nu carattere|$1 carattere}}.",
"password-name-match": "'A password adda essere diverza 'a 'o nomme utente.",
"password-login-forbidden": "L'uso 'e stu nomme utente e password è stato proibito.",
"passwordremindertext": "Cocche perzona (pussibbilmente tu, cu n'innerizzo IP $1) ha dimmannato l'invio 'e na password d'accieso nova pe' {{SITENAME}} ($4).\nNa password temporanea e' l'utente \"$2\" s'è abbiata comme \"$3\".\nSi chest'è stata l'intenzione toja, allora hè a trasì dint'o sito e cagnà 'a password mò. 'A password temporanea scade aropp'a {{PLURAL:$5|nu juorno|$5 ghiuorne}}.\n\nSi nun sì stato tu a dimannà 'a password, o pure hè truvat'a password e nun 'a bbuò cagnà cchiù, allora nun fà niente e continua a usare 'a password viecchia.",
"noemail": "Nun ce sta indirizzo e-mail pe' l'utente \"$1\".",
"noemailcreate": "S'add'appruviggiunà n'indirizzo e-mail buono.",
- "passwordsent": "Na password nova è stata inviata a l'innerizzo e-mail riggistrato 'a ll'utente \"$1\".\nPe' piacere, tràse appena hè ricevuta sta password.",
+ "passwordsent": "Na password nova è stata inviata a l'innerizzo e-mail riggistrato 'a ll'utente \"$1\".\nPe' piacere, trasite appena avite ricevuta sta password.",
"blocked-mailpassword": "Ll'IP tuoja è bloccata pe' scrivere, picciò nun se ponno usà 'e ffunzione pe te mannà na password nova.",
"eauthentsent": "Na mmasciata 'e conferma t'è stata mannata a l'indirizzo e-mail nzignàto.\nApprimm' 'e te mannà n'atu mail, hè 'a stà 'a ffà 'e struzione dint'a l'e-mail, pe' cunfermà ca 'o cunto fosse d' 'o tujo overo.",
"throttled-mailpassword": "S'è mannata na mail pe te' riabbià 'a password 'a meno 'e {{PLURAL:$1|n'ora|$1 ore}}.\nPe' ce sparagnà abbuse, 'a funzione 'e riabbiamento d' 'a password se può usa sulamente na vota ogne {{PLURAL:$1|ora|$1 ore}}.",
"acct_creation_throttle_hit": "{{PLURAL:$1|1 registrazzione è già stata effettuata|$1 registrazzione song già state effettuate}} 'e qualcuno cu 'o tujo stisso innerezzo IP dint'ô urdemo juorno: è 'o massimo cunsentito 'n chisto periodo 'e tiempo.\nPerciò, 'e utente ca ausano chisto innerezzo IP nun possono registrarse ppe 'o mumiento.",
"emailauthenticated": "'O ndirizzo email è stato cunfermato 'o $2 a 'e $3.",
"emailnotauthenticated": "'O ndirizzo 'e posta elettronica nun è stat'ancora cunfermato.\nNun se mannarranno mmasciate e-mail p' ' funzione ccà abbascio.",
- "noemailprefs": "Hè 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
+ "noemailprefs": "Avite 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
"emailconfirmlink": "Cunferma 'o nderizzo mail d' 'o tujo.",
"invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmatto buono.\nScrive n'ata vota nu nderizzo bbuono o abbacanta 'a casella.",
"cannotchangeemail": "'E ccunte mail nun se ponno cagnà dint'a sta wiki.",
"createaccount-text": "Coccherun ave fatto nu cunto ncoppa {{SITENAME}} ($4) a nomme 'e $2, associato a st'indirizzo 'e posta elettronica. 'A password pe l'utente \"$2\" è abbiàta a comme \"$3\".\nFosse buono 'e trasì ampressa e cagnà 'a password subbeto.\n\nSi 'a criazione d' 'o cunto è stata nu sbaglio, allora putite lassà perde sta mmasciata.",
"login-throttled": "Songo state fatte troppe tentative 'a trasì dint'a nu periodo troppo curto.\nAspetta nu $1 e prova aròppo.",
"login-abort-generic": "'O login tujo nun ha avuto succiesso - Annullato",
+ "login-migrated-generic": "'O cunto tuo nun sè mmigrato, e l'username d' 'o tuojo nun esiste cchiù dint'a sta wiki.",
"loginlanguagelabel": "Lengua: $1",
"suspicious-userlogout": "'A richiesta 'e disconnessione d' 'a toja è stata negate pecché pare ca fosse mannata 'a nu navigatóre rutto o nu proxy 'e \"caching\".",
- "createacct-another-realname-tip": "'O nomme overo vuosto è ozzionale.\nSi scigliete 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
+ "createacct-another-realname-tip": "'O nomme overo vuosto è ozzionale.\nSi sciglite 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
"pt-login": "Tràse",
"pt-login-button": "Tràse",
"pt-createaccount": "Cria nu cunto nuovo",
"pt-userlogout": "Jèsce",
"php-mail-error-unknown": "Errore scanusciuto dint'a funzione PHP mail()",
- "user-mail-no-addy": "Hè cercato 'e mannà na mmasciata e-mail senza indirizzo.",
- "user-mail-no-body": "Hè cercato 'e mannà na mmasciata e-mail c' 'o testo abbacante o troppo curto.",
+ "user-mail-no-addy": "Avite cercato 'e mannà na mmasciata e-mail senza indirizzo.",
+ "user-mail-no-body": "Avite cercato 'e mannà na mmasciata e-mail c' 'o testo abbacante o troppo curto.",
"changepassword": "Cagna password",
- "resetpass_announce": "Pe' trasì finalmente, hè 'a abbià na password nova.",
+ "resetpass_announce": "Pe' trasì finalmente, avite 'abbià na password nova.",
"resetpass_header": "Cagna 'a password d' 'o cunto",
"oldpassword": "Password viecchia:",
"newpassword": "Password nova:",
"changepassword-success": "'A password è stata cagnata currettamente!",
"changepassword-throttled": "Songo state fatte troppe tentative 'a trasì.\nAspetta nu $1 apprimma 'e pruvà n'ata vota.",
"resetpass_forbidden": "'E password nun se ponno cagnà",
- "resetpass-no-info": "Hè 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
+ "resetpass-no-info": "Avite 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
"resetpass-submit-loggedin": "Cagna password",
"resetpass-submit-cancel": "Canciella",
"resetpass-wrong-oldpass": "'A password temporanea o attuale nun è bbona.\n'A password putesse avé cagnato, o pure s'è addimannata na password temporanea nova.",
- "resetpass-recycled": "Pe piacere riabbìa 'a password e miette na password differénte a chella 'e mmò.",
- "resetpass-temp-emailed": "Sì {{GENDER:$1|trasuto|trasuta}} cu nu codece temporaneo, mannato via e-mail. Pe' fà cumpleta 'a riggistraziona, avite 'e abbià na password nova ccà:",
+ "resetpass-recycled": "Pe piacere riabbiate 'a password e mettete na password differénte a chella 'e mmò.",
+ "resetpass-temp-emailed": "Sì trasuto cu nu codece temporaneo, mannato via e-mail. Pe' fà cumpleta 'a riggistraziona, avite 'e abbià na password nova ccà:",
"resetpass-temp-password": "Password temporanea:",
"resetpass-abort-generic": "'O cagnamiento d' 'a password s'è spezzato 'a na stensione.",
"resetpass-expired": "'A pasword è ammaturata. Avite 'e ffà na password nova pe putè trasì.",
"passwordreset-emailerror-capture": "Na mmasciata e-mail pe' riabbià 'a password è stata mannata, 'a putite vedé ccà abbascio, ma aita sapé ca nun s'è mannata a {{GENDER:$2|l'utente}} pecché c'è stato cocch'errore: $1",
"changeemail": "Cagna l'indirizzo e-mail",
"changeemail-header": "Cagna l'indirizzo e-mail d' 'o cunto",
- "changeemail-text": "Ghienche stu modulo pe' cangà l'indirizzo mail d' 'o tuojo. Sarrà necessario nzertà 'a password tuja pe' puté cunfermà stu cagnamiento.",
- "changeemail-no-info": "Hè 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
+ "changeemail-text": "Ghienchete stu modulo pe' cangà l'indirizzo mail d' 'o vuosto. Sarrà necessario nzertà 'a password vosta pe' puté cunfermà stu cagnamiento.",
+ "changeemail-no-info": "Avite 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
"changeemail-oldemail": "Indirizzo email 'e mmò:",
"changeemail-newemail": "Indirizzo e-mail nuovo:",
"changeemail-none": "(nisciuno)",
- "changeemail-password": "'A password tuja pe' {{SITENAME}}:",
+ "changeemail-password": "'A password vosta pe' {{SITENAME}}:",
"changeemail-submit": "Cagna e-mail",
"changeemail-cancel": "Canciella",
- "changeemail-throttled": "Hè fatto troppe tentative 'a trasì.\nAspetta nu $1 apprimma 'e pruvà n'ata vota.",
+ "changeemail-throttled": "Avite fatto troppe tentative 'a trasì.\nAspettate nu $1 apprimma 'e pruvà n'ata vota.",
"resettokens": "Riabbìa 'e token",
- "resettokens-text": "Ccà se ponno riabbià 'e chiave ca permetessero l'acciesso a determinate date private associate a 'o cunto tuojo.\n\nL'avisse 'e ffà quanno l'hè spartuto pe' sbaglio cu cocche perzona o pure quanno 'o cunto d' 'o tuojo è stato compromesso.",
+ "resettokens-text": "Ccà se ponno riabbià 'e chiave ca permetessero l'acciesso a determinate date private associate a 'o cunto vuosto.\n\nL'aviste 'e ffà quanno l'avete spartuto pe' sbaglio cu cocche perzona o pure quanno 'o cunto d' 'o vuosto è stato compromesso.",
"resettokens-no-tokens": "Nun ce stanno token 'a riabbià.",
"resettokens-legend": "Riabbìa 'e token",
"resettokens-tokens": "Token:",
"showpreview": "Vere anteprimma",
"showdiff": "Fa veré 'e cagnamiente",
"blankarticle": "<strong>Attenziò:</strong> 'a paggena ca staje crianno è abbacante.\nFà click ncopp'a \"{{int:savearticle}}\" n'ata vota, 'a paggena sarrà criata senza cuntenute.",
- "anoneditwarning": "'''Attenziò:''' Nun hè fatto l'acciesso.\nDint'a cronologgia d' 'a paggena sarrà riggistrato l'indirizzo IP d' 'o tuojo.",
- "anonpreviewwarning": "''Nun hè fatto 'o login. Sarvann' 'a paggena, l'indirizzo IP d' 'o tuojo sarrà riggistrato dint'a cronologgia.''",
+ "anoneditwarning": "'''Attenzione:''' Nun avite fatto l'acciesso. 'A cronologgia d' 'a vosta sarrà visibbele pubbrecamente si facite cocche cagnamiento. Si <strong>[$1 tràse]</strong> o <strong>[$2 crìe nu cunto]</strong>, 'e cagnamiente vuoste ve sarranno attribbuite a vvuje, nzieme a n'ati migliuramente.",
+ "anonpreviewwarning": "''Nun avite fatto 'o login. Sarvann' 'a paggena, l'indirizzo IP d' 'o vuosto sarrà riggistrato dint'a cronologgia.''",
"missingsummary": "'''Attenziò:''' nun s'è specificato l'oggetto 'e stu cagnamiento. Clicann' 'a \"{{int:savearticle}}\" n'ata vota 'o cagnamiento sarrà sarvato cu l'oggetto abbacante.",
"missingcommenttext": "Pe' piacere scrivete nu commento ccà abbascio.",
"missingcommentheader": "'''Attenziò:''' nun s'è specificato l'oggetto/titolo 'e stu commento. Clicann' 'a \"{{int:savearticle}}\" n'ata vota 'o cagnamiento sarrà sarvato c' 'o titolo abbacante.",
"summary-preview": "Anteprimma'e l'oggetto:",
"subject-preview": "Anteprima 'e l'oggetto/intestazione:",
"blockedtitle": "Utente bloccato.",
+ "blockedtext": "<strong>'O nomme utente o ll'IP vuosto è stato bloccato.</strong>\n\n'O blocco è stato mpustato 'a $1. 'O mutivo d' 'o blocco è chesto: ''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPutite cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVedite c' 'a funzione 'Scrivete a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.",
+ "autoblockedtext": "Ll'IP vuosto è stato bloccato pecché 'o steva piglianno n'atu utente, ch'è stato bloccato pe' $1.\n\n'O mutivo d' 'o blocco è chesto:\n\n:''$2''\n\n* Abbiàta d' 'o blocco: $8\n* Ammaturità d' 'o blocco: $6\n* Tiempo 'e blocco: $7\n\nPutite cuntattà $1 o n'atu [[{{MediaWiki:Grouppage-sysop}}|ammenistratore]] pe' discutere 'o blocco.\n\nVedite c' 'a funzione 'Scrivete a ll'utente' nun è attiva si nun s'è riggistrato 'o ndirizzo e-mail buono dint' 'e [[Special:Preferences|preferenze]] o pùre si ll'uso 'e tale funzione è stato bloccato.\n\n'O ndirizzo IP attuale è $3, 'o nummero ID d' 'o blocco è #$5.\nPe' piacere avite 'e specificà tutte sti dettaglie ccà ncoppa quanno facite cocche dumanna.",
+ "blockednoreason": "nisciuna ragione è stata indicata",
+ "whitelistedittext": "Pe' cagnà 'e ppaggene è necessario $1.",
+ "confirmedittext": "Pe puté cagnà paggene avite 'a cunfermà l'indirizzo e-mail.\nPe' piacere abbiate e ffà 'a validazione d' 'o ndirizzo e-mail pe' bbìa d' 'e [[Special:Preferences|preferenze d'utente]].",
+ "nosuchsectiontitle": "Nun se può truvà 'a sezziona",
+ "nosuchsectiontext": "Hè pruvat' 'a cagnà na sezziona ca nun ce sta.\nPuò darse ch'è stata spustata o scancellata pe' tramente ca stive vedenno sta paggena.",
"loginreqtitle": "Pe' cagnà chesta paggena abbesognate aseguì ll'acciesso ô sito.",
"loginreqlink": "aseguì ll'acciesso",
"loginreqpagetext": "Pe' veré ate ppaggene abbesognate $1.",
"accmailtitle": "'O password è stato mannato.",
"accmailtext": "'Na password gennerata casualmente ppe [[User talk:$1|$1]] è stata mannata a $2. Chista password può essere càgnata dint'â paggena ppe ''[[Special:ChangePassword|càgna 'a password]]'' subbeto doppo l'acciesso.",
"newarticle": "(Novo)",
+ "newarticletext": "Site ghiuto/a addò nu link 'e na paggena ca nun esiste ancora.\nP' 'a crià sta paggena, accummenciate a scrivere dint'a cascia cà abbascio (vedite 'a [$1 paggena d'aiuto] pe liegge cchiù nfurmazziune).\nSi site venuto/a ccà pe' sbaglio, vedite 'e sprémmere 'o buttòne '''Arreto''' d' 'o navigatóre.",
+ "anontalkpagetext": "----\n''Chest'è 'a paggena 'e discussione 'e n'utente anonimo, ca nun ave criàt' 'ancora n'utenza o ca nun sta ausanno. Pe' l'identificà avite 'e truvà 'o nummero d' 'o ndirizzo IP d' 'o sujo. L'indirizze IP se ponno spartì però a cchiù 'e n'utente. Si sì n'utente anonimo e pienze ca 'e commente ccà dint'a sta paggena nun parlano 'e tte, allora [[Special:UserLogin/signup|crìa n'utenza nnova]] o [[Special:UserLogin|tràse cu chella ca tiene già]] pe' nun sta' mmescato mmiez'a l'ati utente anonime n futuro.''",
"noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cagnà 'a paggena mo']</span>.",
"noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate]</span>, però nun tiene 'o permesso 'a crià sta paggena.",
+ "missing-revision": "'A verziona #$1 d' 'a paggena \"{{FULLPAGENAME}}\" nun esiste.\n\nChest'è causato quanno se và dint'a nu link a na paggena ch'è stata scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellamiente].",
+ "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:''' aropo 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''': abbacanta tutt' 'a cache addò menu ''Strumiente → Preferenze''",
+ "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!'''",
+ "userjspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o JavaScript perzunale. 'E cagnamiente nun so' state ancora sarvate!'''",
+ "sitecsspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o CSS. 'E cagnamiente nun so' state ancora sarvate!'''",
+ "sitejspreview": "'''Arricuordate ca chest'è sulamente n'anteprimma p' 'o codece JavaScript. 'E cagnamiente nun so' state ancora sarvate!'''",
+ "userinvalidcssjstitle": "'''Attenziò:''' Nun esiste nisciuna skin c' 'o nomme \"$1\". Vide ch' 'e paggene .css e .js personalezzate teneno nu titolo n minucola, p'esempio {{ns:user}}:Esempio/vector.css e nun {{ns:user}}:Esempio/Vector.css.",
+ "updated": "(Agghiurnato)",
+ "note": "'''Nota:'''",
"previewnote": "'''Chesta è sola n'anteprimma; 'e cagnamiénte â paggena nun songo ancora sarvate!'''",
+ "continue-editing": "Tràse int'a l'area 'e modifica",
+ "previewconflict": "L'anteprimma currisponne a 'o testo presente dint'a cascia 'e modifica ccà ncoppa e rappresentasse 'a paggena comme cumpare si sciglite 'e Sarvà ind'a stu mumento.",
+ "session_fail_preview": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.\nSi nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''",
+ "session_fail_preview_html": "'''Nun è possibbile prucessà 'o cagnamiento pecché se so' sperdut' 'e date d' 'a sessione.\nProva n'ata vota.'''\n''Siccome dint' 'o {{SITENAME}} è abilitato l'uso 'e l'HTML cruro, 'o buttone d'anteprimma nun è abbiàto comme misura 'e sicurezza annanza cocch'attacco JavaScript''\n'''Si chest'era nu tentativo legittimo 'e cagnamiento, prova n'ata vota. Si nun funziona ancora, può pruvà 'a te [[Special:UserLogout|n'ascì]] e a trasì n'ata vota.'''",
+ "token_suffix_mismatch": "'''Stu cagnamiento nun è stato sarvato pecché 'o client ave mmustato nu sbaglio dint'o scrivere d' 'e carattere d' 'a punteggiatura token. Pe luvà na possibbile corruzione d' 'o testo dint'a paggena, s'è rifiutat' 'a modifeca.\n\nSta situazione se può truvà, quanno staje ausanno nu servizio 'e proxy anonime via web cu d' 'e bug.'''",
+ "edit_form_incomplete": "'''Cocche parte d' 'o modulo 'e cagnamiento nun ha arrivato a 'o server; cuntrolla ch' 'e cagnamiente songo intatte e prova n'ata vota.'''",
"editing": "Cagnamiento 'e $1",
+ "creating": "Staje crianno $1",
"editingsection": "Cagnamiénto 'e $1 (sezzione)",
+ "editingcomment": "Cagnamiénto 'e $1 (nova sezzione)",
+ "editconflict": "Conflitto d'edizzione: $1",
+ "explainconflict": "N'at'utente ave sarvato na nova verziona d' 'a paggena pe' tramente ca stevate a fà 'e cagnamiente.\n'A cascia 'e mudifeca ncoppa cuntene 'o testo d' 'a paggena ca mò sta online, accussì comme è stato agghiurnato a l'at'utente.\n'A verziona ch' 'e cagnamiente vuoste è stata mmece riportata dint'a cascia 'e mudifeca abbascio.\nSi 'e vulite cunfermà avite 'a ripurtà 'e cagnamiente d' 'e vuoste dint'o testo ca esiste (dint'a cascia ncoppa).\nSpremmendo 'o buttón '{{int:savearticle}}', sarrà sarvato '''sulamente''' 'o testo cuntenuto dint'a cascia 'e cagnamiento ncoppa.",
+ "yourtext": "'O testo vuosto",
+ "storedversion": "A verziona 'n memoria",
+ "nonunicodebrowser": "'''Attenziò: staje ausanno nu navigatóre ca nun è compatibbele ch' 'e carattere Unicode. Pe' te permettere 'o cagnamiento d' 'e paggene senza crià ncunveniente, 'e carattere nun ASCII veneno viste dint' 'a cascia 'e cagnamiento sotto forma 'e codece esadecimale.'''",
+ "editingold": "'''Attenziò: staje cagnanno na verziona nun agghiurnata d' 'a paggena. Si 'a sarve accussì, tutte 'e cagnamiente fatte aropp'a sta verziona sarranno sperdute.'''",
+ "yourdiff": "Differenze",
+ "copyrightwarning": "Pe' piacere tenite a mmente ca tutte 'e contribbute a {{SITENAME}} songo cunziderate pubbrecate dint'e térmene d'uso d' 'a licienza $2 (vedite $1 pe n'avé cchiù dettaglie).\nSi nun vulite ca 'e testi vuoste fossero cagnate e distribuite 'a uno qualunque senza lémmeto, nun 'e mannate ccà.<br />\nMannanno stu testo dichiarate pùre, sott'a responsabilità vuosta, ch'è stato scritto 'a vuje perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera.\n'''Nun mannate materiale prutetto 'a copyright senz'avé autorizzaziona!'''",
+ "copyrightwarning2": "Pe' piacere tenite a mmente ca tutte 'e contribbute a {{SITENAME}} se ponno cagnà, alterà, o distribbuì pe l'ati cuntribbuttòre.\n\nSi nun vulite ca 'e teste vuoste fossero cagnàte spenzieratamente, nun 'e mannate ccà.<br />\nMannanno stu testo dichiarate pùre, sott'a responsabilità vosta, ch'è stato scritto 'a vuje perzunalmente o pure ca è stato copiato 'a na fonte n pubblico dominio o similarmente libbera (vedete $1 pe' n'avé dettaglie).\n'''Nun mannate materiale prutetto 'a copyright senza n'avé autorizzaziona!'''",
+ "longpageerror": "'''Errore: 'o testo mannato è luongo {{PLURAL:$1|1|$1}} kilobyte, ch'è cchiù grosso d' 'a diminziona massima cunzentita ({{PLURAL:$2|1|$2}} kilobyte).'''\n'O testo nun se pò sarvà.",
+ "readonlywarning": "<strong>Attenziò</strong>: 'o database è bloccato pe se ffà 'a manutenzione. P' 'o mumento nun se ponno sarvà 'e cagnamiente fatte.\nPe' nun 'e sperdere, copia sti cuntenute dint'a nu file 'e testo e sarvatillo pe' tramente c'aspiette 'o sblocco d' 'o database.\n\nL'ammenistratore ca mpustaje 'o blocco ave scritto sta spiegazione: $1.",
+ "protectedpagewarning": "'''Attenziò: sta paggena è stata bloccata 'n modo tale ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà.'''\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe' n'avé riferimento:",
+ "semiprotectedpagewarning": "'''Nota:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente riggistrate 'a ponno cagnà.\nL'urdemo elemento d' 'o riggistro è scritto ccà abbascio pe n'avé nfurmazione:",
+ "cascadeprotectedwarning": "'''Attenziò:''' Sta paggena è stata bloccata 'n modo ca sulamente l'utente ch' 'e privilegge d'ammenistratore 'a ponno cagnà. Chesto succiere pecché 'a paggena è dint'a {{PLURAL:$1|la paggena innecata ccà abbascio, ch'è stata prutetta|'e paggene innecate ccà abbascio, che so' state prutette}} sciglienno 'a prutezione \"ricurziva\":",
+ "titleprotectedwarning": "'''Attenziò: sta paggena è stata bloccata 'n modo ca fossero necessarie [[Special:ListGroupRights|deritte specifici]] p' 'a crià.'''\nL'urdemo elemento d' 'o riggistro è riportato ccà abbascio pe nfurmazione:",
"templatesused": "{{PLURAL:$1|Template|Templates}} ausate 'a chesta paggena:",
+ "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} ausate dint'a st'anteprimma:",
+ "templatesusedsection": "{{PLURAL:$1|Template|Templates}} ausate dint'a sta sezziona:",
"template-protected": "(prutetto)",
"template-semiprotected": "(semi-prutetto)",
+ "hiddencategories": "Sta paggena attócca a {{PLURAL:$1|na categurìa annascunnuta|$1 categurìe annascunnute}}:",
+ "nocreatetext": "{{SITENAME}} ha limitato 'a possibilità 'e crià paggene nnove. Può turnà e cagnà na paggena ch'esiste già, o pure [[Special:UserLogin|trasì o te riggistrà]].",
+ "nocreate-loggedin": "Nun t'è permesso 'e crià paggene nnove.",
+ "sectioneditnotsupported-title": "Cagnamiento 'e sezziune nun suppurtato",
+ "sectioneditnotsupported-text": "'O cagnamiento d' 'e sezziune nun è suppurtato dint'a sta paggena.",
+ "permissionserrors": "Nun haje 'e premmesse abbastante.",
+ "permissionserrorstext": "Nun haje premmesse pe lle ffà st'azziune, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:",
+ "permissionserrorstext-withaction": "Nun haje premmesse abbastante pe' $2, {{PLURAL:$1|'o mutivo è chesto|'e mutive so' chiste}}:",
+ "recreate-moveddeleted-warn": "'''Attenziò: staje a crià na paggena scancellata già.'''\n\nVire si è bbuono 'e cuntinuà a cagnà sta paggena. L'alenco ch' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' ffà comodo:",
+ "moveddeleted-notice": "Sta paggena è stata scancellata.\nL'alenco d' 'e relative scancellamiente e spustamente s'è scritto ccà abbascio pe' n'avé nfurmazione.",
+ "log-fulllog": "Vide log sano",
+ "edit-hook-aborted": "'O cagnamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.",
+ "edit-gone-missing": "Nun se può agghiurnà 'a paggena.\nPare ch' 'è stata scancellata.",
+ "edit-conflict": "Conflitto d'edizziona.",
+ "edit-no-change": "'O cagnamiento è stato ignorato pecché nun s'è cagnato niente dint' 'o testo.",
+ "postedit-confirmation-created": "'A paggena è stata criata.",
+ "postedit-confirmation-restored": "'A paggena è stata arripigliata.",
+ "postedit-confirmation-saved": "'O cagnamiento è stato sarvato.",
+ "edit-already-exists": "Nun se può crià na paggena nova.\nEsiste già.",
+ "defaultmessagetext": "Mmasciata 'e testo predefinita",
+ "content-failed-to-parse": "Nun se può analizzare $2 p' 'o mudello $1: $3",
+ "invalid-content-data": "Date cuntenute nun buone",
+ "content-not-allowed-here": "'O cuntenuto \"$1\" nun è permesso dint'a paggena [[$2]]",
+ "editwarning-warning": "Ascenno 'e sta paggena putisse ffà sperdere 'e cagnamiente fatte.\nSi sì trasuto, allora può stutà st'avviso dint'a sezziona \"{{int:prefs-editing}}\" d' 'e preferenze.",
+ "editpage-notsupportedcontentformat-title": "Furmatto d' 'o cuntenuto nun suppurtato",
+ "editpage-notsupportedcontentformat-text": "'O furmatto d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.",
+ "content-model-wikitext": "wikitesto",
+ "content-model-text": "testo nurmale",
+ "content-model-javascript": "JavaScript",
"content-model-css": "CSS",
+ "expensive-parserfunction-warning": "'''Attenziò:''' Sta paggena cuntene troppe chiammate a 'e funzione parser.\n\nN'avesse 'a tené meno 'e $2, p' 'o mumento ce ne {{PLURAL:$1|stà $1|stanno $1}}.",
+ "expensive-parserfunction-category": "Paggene cu troppe chiammate a 'e funzione parser",
+ "post-expand-template-inclusion-warning": "'''Attenzione:''' 'a diminsiona d' 'e template ionte ccà è troppo grossa.\nCocche template se lassarrà fore.",
+ "post-expand-template-inclusion-category": "Paggene addò 'a diminsiona d' 'o template è fore 'o lémmeto",
+ "post-expand-template-argument-warning": "'''Attenziò:''' sta paggena cuntene uno o cchiù argumente 'e template troppo gruosse pe' 'a spannere. Sti argumente se lassarranno fore.",
+ "post-expand-template-argument-category": "Paggene ca cunteneno argumente nun cunziderate",
+ "parser-template-loop-warning": "È stato scummigliato n'aniello d' 'o template: [[$1]]",
+ "parser-template-recursion-depth-warning": "È arrivato 'o lemmeto 'e ricurzione d' 'o template ($1)",
+ "language-converter-depth-warning": "'O fùto d' 'o lemmeto d' 'o scagnatòre 'e lengua è appassato ($1)",
+ "node-count-exceeded-category": "Paggene addò 'o nummero 'e núrece è stato appassato",
+ "node-count-exceeded-category-desc": "'A paggena appassa 'o nummero massimo 'e núrece.",
+ "node-count-exceeded-warning": "Sta paggena ave appassato 'o lemmeto 'e cunto 'e núrece",
+ "expansion-depth-exceeded-category": "Paggene addò 'o fùto 'e spansiona è appassato",
+ "expansion-depth-exceeded-category-desc": "Sta paggena appassa 'o lemmeto d'espansione.",
+ "expansion-depth-exceeded-warning": "Sta paggena ha appassato 'o lemmeto 'e futo 'e spansione",
+ "parser-unstrip-loop-warning": "Scummigliato aniello Unstrip",
+ "parser-unstrip-recursion-limit": "Appassato 'o lémmeto 'e ricurzione d' Unstrip ($1)",
+ "converter-manual-rule-error": "È stato scummigliato n'errore dint'a regola manuale 'e converziona 'e lengua",
+ "undo-success": "'O cagnamiento se può annullà.\nPe' piacere vedete 'e differenze mmustate nfra 'e verziune pe' te ffà capace ca 'e cuntenute songo bbuone, e astipate 'e cagnamiente ccà abbascio pe' fernì e accussì turnà arreto.",
+ "undo-failure": "Nun se può fà turnà arreto 'o cagnamiento pecché ce sta nu conflitto ch' 'e cagnamiente intermedie.",
+ "undo-norev": "Nun se può fà turnà arreto 'o cagnamiento pecché nun esiste o s'è scancellato.",
+ "undo-nochange": "Pare c' 'o cagnamiento s'è già fatto turnà arreto.",
"undo-summary": "Canciella 'o cagnamiento $1 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|Chiàcchiera]])",
+ "undo-summary-username-hidden": "Annullato 'o cagnamiento $1 pe n'utente annascunnuto",
+ "cantcreateaccounttitle": "Nun se può crià cunto",
+ "cantcreateaccount-text": "'A riggistraziona è stata bloccata 'a l'utente [[User:$3|$3]] 'a st'innerizzo IP ('''$1''').\n\n'O mutivo dato 'a $3 è chistu ccà: ''$2''",
+ "cantcreateaccount-range-text": "'A criazione 'e cunte 'a ll'indirizze int'o ntervallo '''$1''', che cummiglia 'o vuosto ('''$4'''), è stata bloccata 'a l'utente [[User:$3|$3]].\n\n'O mutivo dato 'a $3 è chistu ccà: ''$2''",
+ "viewpagelogs": "Vide 'e log azzeccate a sta paggena",
+ "nohistory": "Nun esiste na cronologgia 'e verziune pe' sta paggena.",
"currentrev": "Verzione 'e mmo",
"currentrev-asof": "Vversione attuale dde $1",
"revisionasof": "Vversione delle $1",
+ "revision-info": "Verziona d' 'o $1 fatta 'a {{GENDER:$6|$2}}$7",
"previousrevision": "← Verzione 'e primma",
"nextrevision": "Vversione cchiù recente →",
"currentrevisionlink": "Verzione 'e mmo",
"cur": "corr",
+ "next": "successiva",
"last": "prec",
+ "page_first": "primma",
+ "page_last": "úrdema",
+ "histlegend": "Confronto nfra verziune: sciglite 'e casciulelle c'attoccassero a 'e verziune che vulite cunfruntà e spremmite Invio o pure 'o buttóne ccà abbascio.\n\nLiggenda: '''({{int:cur}})''' = differenze c' 'a verzione 'e mmò, '''({{int:last}})''' = differenze c' 'a verzione 'e primma, '''{{int:minoreditletter}}''' = cagnamiento minore",
+ "history-fieldset-title": "Naviga dint' 'a cronologgia",
"history-show-deleted": "Solo chille canciellate",
"histfirst": "primma",
"histlast": "urdema",
+ "historysize": "({{PLURAL:$1|1 byte|$1 byte}})",
+ "historyempty": "(abbacante)",
+ "history-feed-title": "Cronologgia",
+ "history-feed-description": "Cronologgia d' 'a paggena ncopp'a stu sito",
"history-feed-item-nocomment": "$1 'o $2",
+ "history-feed-empty": "'A paggena addimannata nun esiste.\nPuò darsi ca è stata scancellata d' 'a wiki, o s'è cagnato 'o nomme.\nProva a vedé [[Special:Search|dint' 'a wiki]] si ce stanno nnove paggene.",
+ "rev-deleted-comment": "(Oggetto d' 'o cagnamiento luvato)",
+ "rev-deleted-user": "(nomme utente luvato)",
+ "rev-deleted-event": "(azione d' 'o log luvata)",
+ "rev-deleted-user-contribs": "[nomme utente o indirizzo IP luvato - cagnamiento annascunnuto d' 'a cronologgia]",
+ "rev-deleted-text-permission": "Sta verziona d' 'a paggena è stata '''scancellata'''.\nAscìa dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{PAGENAMEE}}}} riggistro d' 'e scancellamiente] pe ne sapé 'e cchiù.",
+ "rev-suppressed-text-permission": "Sta verziona d' 'a paggena è stata '''luvata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.",
+ "rev-deleted-text-unhide": "Sta verziona d' 'a paggena è stata '''scancellata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log d' 'e scancellamiente] pe' ne sapé 'e cchiù.\nA ll'ammenistrature è cunzentito ancora [$1 'e vedé sta paggena] si vonno.",
+ "rev-suppressed-text-unhide": "Sta verziona d' 'a paggena è stata '''luvata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.\nA ll'ammenistrature è cunzentito ancora [$1 'e vedé sta verziona] si vonno.",
+ "rev-deleted-text-view": "Sta verziona d' 'a paggena è stata '''scancellata'''.\nLl'ammenistratore 'a ponno veré ancora; e 'a ponno ascìa dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellaziune] pe ne sapé 'e cchiù.",
+ "rev-suppressed-text-view": "Sta verziona d' 'a paggena è stata '''luvata'''.\nSta verziona 'a può veré ancora, 'e dettaglie 'e può cuntrullà dint' 'o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.",
+ "rev-deleted-no-diff": "Sta cunfronto d' 'a paggena nun 'o può veré pecché una d' 'e verziune è stata '''scancellata'''.\nAscìa dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellamiente] pe ne sapé 'e cchiù.",
+ "rev-suppressed-no-diff": "Nun se può vedé stu cunfronto nfra verziune pecché una d' 'e verziune è stata '''scancellata'''.",
+ "rev-deleted-unhide-diff": "Una d' 'e verziune 'e sta paggena è stata '''scancellata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellamiente] pe' ne sapé 'e cchiù.\nPuò ancora [$1 vedé sta paggena] si bbuò.",
+ "rev-suppressed-unhide-diff": "Una d' 'e verziune 'e sta paggena è stata '''luvata'''.\nVide 'o [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.\nPuò ancora [$1 vedé sta verziona] si bbuò.",
+ "rev-deleted-diff-view": "Una d' 'e verziune 'e sta paggena è stata '''scancellata'''.\nPuò vedé sta verziona ancora; 'e dettaglie 'e può vedé dint' 'o [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} riggistro d' 'e scancellaziune] pe ne sapé 'e cchiù.",
+ "rev-suppressed-diff-view": "Una d' 'e verziune 'e sta paggena è stata '''luvata'''.\nSta verziona 'a può veré ancora; 'e dettaglie 'e può cuntrullà dint' 'o [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} riggistro 'e paggene luvate] pe' ne sapé 'e cchiù.",
"rev-delundel": "faje vedé/annascunne",
"rev-showdeleted": "faje vedé",
+ "revisiondelete": "Scancella o ripiglia verziune",
+ "revdelete-nooldid-title": "Verziona nun specificata",
+ "revdelete-nooldid-text": "Nun è stata specificata nisciuna verziona d' 'a paggena p' 'a secutà sta funzione, 'a verziona specificata nun esiste o pure staje truvann' 'annascónnere 'a verziona 'e mò.",
+ "revdelete-no-file": "'O file specificato nun esiste.",
+ "revdelete-show-file-confirm": "Sì sicuro/a ca vulite veré 'a verziona scancellata d' 'o file \"<nowiki>$1</nowiki>\" d' 'o $2 a 'e $3?",
"revdelete-show-file-submit": "Sì",
+ "revdelete-selected-text": "{{PLURAL:$1|Verziona scigliuta|Verziune scigliute}} 'e [[:$2]]:",
+ "revdelete-selected-file": "{{PLURAL:$1|Verzione scigliuta|Verziune scigliute}} d' 'o file 'e [[:$2]]:",
+ "logdelete-selected": "{{PLURAL:$1|Fatto scigliuto d' 'o riggistro|Fatte scigliute d' 'o riggistro}}:",
+ "revdelete-text-text": "'E verziune scancellate cumpareno ancora dint' 'a cronologgia d' 'a paggena, ma na parte d' 'o cuntenuto lloro nun sarrà disponibbele a 'o pubbreco.",
+ "revdelete-text-file": "'E verziune 'e file scancellate cumpareno ancora dint' 'a cronologgia d' 'o file, ma parte d' 'o cuntenuto lloro nun sarrà disponibbele a 'o pubbreco.",
+ "logdelete-text": "'E fatte 'e riggistro scancellate cumpareno ancora dint' 'a cronologgia 'e riggistro, ma na parte d' 'o cuntenuto lloro nun sarrà disponibbele a 'o pubbreco.",
+ "revdelete-text-others": "Ll'at'ammenistrature puterranno ancora trasì e arrepiglià 'e cuntenute annascunnute, si nun so' state mpustate cchiù restrizziune.",
+ "revdelete-confirm": "Pe' piacere cunfermate ca overo vulite ffà chesto, ca cunuscete 'e cunseguenze, e ca state facenno chesto rispettanno 'e [[{{MediaWiki:Policy-url}}|linee guida]].",
+ "revdelete-suppress-text": "Sti luvamiente hana essere fatte '''unicamente''' dint' 'e situaziune ccà abbascio:\n* nfurmaziune potenzialmente diffamatorie\n* date perzunale inopportune\n*: ''indirizze, nummeri 'e telefono, codece fiscale, ecc.''",
+ "revdelete-legend": "Miette 'e limmete 'e visibilità",
+ "revdelete-hide-text": "Testo d' 'a verziona",
+ "revdelete-hide-image": "Annascunne 'e cuntenute d' 'o file",
+ "revdelete-hide-name": "Annascunne aziona e l'oggetto 'e cchesta",
+ "revdelete-hide-comment": "Modifeca oggetto",
+ "revdelete-hide-user": "Nomme o indirizzo IP 'e ll'autore",
+ "revdelete-hide-restricted": "Annascunne 'e nfurmaziune 'nnecate pure a l'ammenistrature",
+ "revdelete-radio-same": "(nun cagnà)",
"revdelete-radio-set": "Nasconde",
"revdelete-radio-unset": "Faje vedé",
+ "revdelete-suppress": "Annascunne 'e nfurmaziune pure a l'ammenistrature",
+ "revdelete-unsuppress": "Scancella 'e limmete ncopp' 'e verziune arripigliate",
+ "revdelete-log": "Mutivo:",
+ "revdelete-submit": "Applica {{PLURAL:$1|â virziona scigliuta|a 'e virziune scigliute}}",
+ "revdelete-success": "'''Visibbelità d' 'a verziona agghiurnata e apposto.'''",
+ "revdelete-failure": "'''Int'a sta virziona 'a visibbelità nun se può agghiurnà:'''\n$1",
+ "logdelete-success": "'''Int'a stu riggistro 'a visibbelità è stata scigliuta currettamente.'''",
+ "logdelete-failure": "'''Int'a stu riggistro 'a visibbelità nun se può scegliere:'''\n$1",
"revdel-restore": "càgna visiblità",
+ "pagehist": "Verziune 'e primma",
+ "deletedhist": "Cronologgia scancellata",
+ "revdelete-hide-current": "Nun se ponno annasconnere ll'item cu data 2, $1: pecché song'a la verziona 'e mmò.",
+ "revdelete-show-no-access": "Errore a mmustà ll'oggetto cu data $2, $1: St'oggetto è stato nzegnàto comme \"riservato\".\nNun tiene acciesso a chesto.",
+ "revdelete-modify-no-access": "Nun se può cagnà l'oggetto cu data $2, $1: pecché st'oggetto è stato nzegnàto comme \"riservato\".\nVuje nun avete acciesso.",
+ "revdelete-modify-missing": "Nun se può cagnà l'oggetto cu l'ID $1 pecché nun è prisente int' 'o database.",
+ "revdelete-no-change": "'''Attenziò:''' l'oggetto cu data $2, $1 teneva già 'e mpustaziune 'e visibbilità addimannate.",
+ "revdelete-concurrent-change": "Nun se può cagnà l'oggetto cu data $2, $1: 'O status 'e chisto pare ch'è stato cagnato pe cocch'utente pe' tramente ca 'o stavate a cagnà.\nPe' piacere cuntrullate 'o riggistro.",
+ "revdelete-only-restricted": "Errore quanno s'annasconneva l'oggetto cu data $2, $1: Nun può luvà oggette d' 'a vista 'e ll'ammenistratore senza scegliere manco una 'e l'at'opziune 'e visibbelità.",
+ "revdelete-reason-dropdown": "* Mutive comune pe' ffà scancellamiento\n** Violazione d' 'o copyright\n** Cummente o nfurmaziune perzunale inappropriate\n** Nomme utente inappropriato\n** Nfurmazione potenzialmente diffamatoria",
+ "revdelete-otherreason": "Ati/cchiù ragiune:",
+ "revdelete-reasonotherlist": "Ati ragiune",
+ "revdelete-edit-reasonlist": "Càgna 'e mutive pe' fà 'o scancellamiento",
+ "revdelete-offender": "Autore d' 'a verziona:",
+ "suppressionlog": "Riggistro 'e luvamiente",
+ "suppressionlogtext": "Ccà abbascio ce sta n'alenco ch' 'e scancellamiente e blocche ca teneno cuntenute annascunnuto a l'ammenistrature.\nVide l'[[Special:BlockList|elenco d' 'e blocche]] pe' l'elenco e banne e blocche attive 'e mò.",
+ "mergehistory": "Aunisce 'e cronologgie",
+ "mergehistory-header": "Sta paggena te permette d'aunì 'e verziune d' 'a cronologgia 'e na paggena origgine a na paggena nova.\nVedite ca s'avesse 'a nchiantà stu cagnamiento senza scassà 'a continuità storeca d' 'a paggena.",
+ "mergehistory-box": "Aunisce 'a cronologgia 'e ddoje ppaggene:",
+ "mergehistory-from": "Paggena d'origgene:",
+ "mergehistory-into": "Paggena 'e destinazione:",
+ "mergehistory-list": "Cronologgia 'e paggena ca fosse applicabbele pe' se ffà l'unione",
+ "mergehistory-merge": "Se ponno aunì 'e verziune 'e [[:$1]] nzignata ccà int' 'a cronologgia 'e [[:$2]]. Ausàte 'a colonna ch' 'e buttóne d'opziune pe' ffà l'aunione 'e tutt' 'e verziune nfin' 'a data e ora nzignàte.\nVedite ca si s'ausassero 'e buttóne 'e navigazione, 'a culonna ch' 'e buttóne d' 'ozzione fosse rinnovata.",
+ "mergehistory-go": "Vide 'e cagnamiente ca se ponno aunì",
+ "mergehistory-submit": "Aunisce 'e verziune",
+ "mergehistory-empty": "Nun ce stanno virziune pe' putè ffà l'aunione.",
+ "mergehistory-success": "{{PLURAL:$3|Na virziona 'e [[:$1]] è stata aunita|$3 versiune 'e [[:$1]] so' state aunite}} â cronologgia 'e [[:$2]].",
+ "mergehistory-fail": "Nun se ponno aunì 'e cronologgie. Pe' piacere cuntrullate n'ata vota 'a paggena e li parametre tempurale.",
+ "mergehistory-fail-toobig": "Nun se può fà l'aunione d' 'a cronologgia cu nu lémmeto 'e n'ati $1 {{PLURAL:$1|revisione|rivisiune}} 'a cagnà posto.",
+ "mergehistory-no-source": "'A paggena d'origgine $1 nun esiste.",
+ "mergehistory-no-destination": "'A paggena 'e destinazione $1 nun esiste.",
+ "mergehistory-invalid-source": "'A paggena d'origgine add'avé nu titolo bbuono.",
+ "mergehistory-invalid-destination": "'A paggena 'e destinazione add'avé nu titolo bbuono.",
+ "mergehistory-autocomment": "Aunione 'e [[:$1]] int'a [[:$2]]",
+ "mergehistory-comment": "Aunione 'e [[:$1]] int'a [[:$2]]: $3",
+ "mergehistory-same-destination": "'E paggene d'origgine e destinazione nun ponno essere eguale",
+ "mergehistory-reason": "Mutivo:",
+ "mergelog": "Riggistro d'aunione",
+ "pagemerge-logentry": "song'aunite [[$1]] int'a [[$2]] (verziune nfin'a $3)",
+ "revertmerge": "Annulla aunione",
+ "mergelogpagetext": "Ccà abbascio ce sta na lista cu ll'urdeme aunione int'a cronologgia d' 'e ddoje paggene.",
+ "history-title": "$1: cronologgia d' 'e cagnamiente",
+ "difference-title": "Differenze nfra 'e verziune 'e \"$1\"",
+ "difference-title-multipage": "Differenze nfra 'e verziune \"$1\" e \"$2\"",
+ "difference-multipage": "(Differenze nfra 'e paggene)",
"lineno": "Riga $1:",
+ "compareselectedversions": "Cunfronta 'e verziune scigliute",
+ "showhideselectedversions": "Cagna visibbelità d' 'e verziune scigliute",
"editundo": "annulla",
+ "diff-empty": "(Nisciuna differenza)",
+ "diff-multi-sameuser": "({{PLURAL:$1|Na verziona ntermedia|$1 verziune ntermedie}} 'e n'utente stisso nun {{PLURAL:$1|è mmustata|songo mmustate}})",
+ "diff-multi-otherusers": "({{PLURAL:$1|Na virzione ntermedia|$1 verziune ntermedie}} 'a {{PLURAL:$2|n'at'utente|$2 n'ati ddoj'utente}} nun è mmustata)",
+ "diff-multi-manyusers": "({{PLURAL:$1|Na virzione ntermedia|$1 verziune ntermedie}} 'a cchiù 'e $2 {{PLURAL:$2|utente|utente}} nun è mmustata)",
+ "difference-missing-revision": "{{PLURAL:$2|Na virziona|$2 verziune}} 'e sta differenza ($1) {{PLURAL:$2|nun è stata truvata|nun so' state truvate}}.\n\nChest'è succiesso quanno s'è secutato nu diff obsoleto a na paggena scancellata.\n'E dettaglie se ponno truvà dint'a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 'o riggistro 'e scancellamiente].",
"searchresults": "Risultato d''a recerca",
"searchresults-title": "Ascià risultate ppe \"$1\"",
+ "titlematches": "Currispunnenze d' 'o titolo d' 'e paggene",
+ "textmatches": "Currispunnenze d' 'o testo d' 'e paggene",
"notextmatches": "Voce addemannata nun truvata dint' 'e teste 'e articulo",
"prevn": "{{PLURAL:$1|precedente|precedente $1}}",
"nextn": "{{PLURAL:$1|successivo|successive $1}}",
"nextn-title": "{{PLURAL:$1|Risultato successivo|$1 risultate successive}}",
"shown-title": "Fa vere {{PLURAL:$1|'nu risultato|$1 risultate}} ppe paggena",
"viewprevnext": "Vere($1 {{int:pipe-separator}} $2) ($3).",
- "searchmenu-new": "<strong>'''Cria a paggena \"[[:$1]]\" ncopp'â chisto wiki!'''</strong> {{PLURAL:$2|0=|Vede anche 'a paggena truovata cu 'a recerca tuja|Vede anche 'e risultate d\"a recerca}}",
+ "searchmenu-exists": "'''Ncopp' 'o sito esiste na paggena c' 'o nomme \"[[:$1]]\"'''\n{{PLURAL:$2|0=|Vedite pure dint'a l'ati risultate 'e cerca.}}",
+ "searchmenu-new": "<strong>'''Cria a paggena \"[[:$1]]\" ncopp'â chisto wiki!'''</strong> {{PLURAL:$2|0=|Vide anche 'a paggena truovata cu 'a recerca vuosta|Vede anche 'e risultate d\"a recerca}}",
"searchprofile-articles": "Paggene 'e contenute",
"searchprofile-images": "Multimedia",
"searchprofile-everything": "Tutto",
"searchprofile-advanced": "Avanzate",
"searchprofile-articles-tooltip": "Circa dint'ô $1",
"searchprofile-images-tooltip": "Circa file",
+ "searchprofile-everything-tooltip": "Ascìa int'a tutte 'e cuntenute (pure dint' 'e chiacchiere)",
"searchprofile-advanced-tooltip": "Circa dint'e namespace perzonalizzate",
"search-result-size": "$1 ({{PLURAL:$2|'na parola|$2 parole}})",
+ "search-result-category-size": "{{PLURAL:$1|1 utente|$1 utente}} ({{PLURAL:$2|1 sottocategurìa|$2 sottocategurìe}}, {{PLURAL:$3|1 file|$3 files}})",
"search-redirect": "(redirect $1)",
"search-section": "(sezzione $1)",
+ "search-file-match": "(currispunnenza dint' 'e cuntenute d' 'o file)",
"search-suggest": "Prova chisto: $1",
"search-interwiki-caption": "Prugiette frate",
+ "search-interwiki-default": "Risultate 'a $1:",
+ "search-interwiki-more": "(cchiù)",
+ "search-relatedarticle": "Azzeccato",
+ "searchrelated": "azzeccato",
"searchall": "Tutte",
+ "showingresults": "Ccà abbascio {{PLURAL:$1|s'apprisentano 'o massimo '''1''' risultato|veneno apprisentate massimo '''$1''' risultate}} aropp' 'o nummero '''$2'''.",
+ "showingresultsinrange": "{{PLURAL:$1|Vene mmustato|Veneno mmustate}} abbascio {{PLURAL:$1|<strong>1</strong> risultato|<strong>$1</strong> risultate}} d' 'o <strong>$2</strong> a 'o <strong>$3</strong>.",
+ "showingresultsheader": "{{PLURAL:$5|Risultato '''$1''' 'e '''$3'''|Risultate '''$1 - $2''' 'e '''$3'''}} pe' '''$4'''",
"search-nonefound": "'A ricerca nun ha produtto risultate.",
+ "powersearch-legend": "Ricerca avanzata",
+ "powersearch-ns": "Ascìa dint' 'o namespace:",
+ "powersearch-togglelabel": "Cuntrolla:",
+ "powersearch-toggleall": "Tutto",
+ "powersearch-togglenone": "Nisciuno",
+ "powersearch-remember": "Arricuòrdate d' 'a selezziona quanno faje ricerche nfuturo",
+ "search-external": "Ricerca 'a fore",
+ "searchdisabled": "'A ricerca dint'a {{SITENAME}} nun è attiva; pe' tramente se putesse ausà nu mutore 'e cerca sterno comm'a Google. (Avite 'e sapé però, ca sti cuntenute d' 'o {{SITENAME}} dint' 'e mutore, può darse ca nun stanno agghiurnate.)",
+ "search-error": "È succiesso n'errore pe' tramente ca se faceva 'a ricerca: $1",
+ "preferences": "Preferenze d''e mmeje",
"mypreferences": "Preferenze d''e mmeje",
+ "prefs-edits": "Cagnamiente affettuate:",
+ "prefsnologintext2": "Pe' piacere, trasite pe' cagnà 'e preferenze voste.",
+ "prefs-skin": "Aspetto grafeco (skin)",
+ "skin-preview": "Anteprimma",
+ "datedefault": "Nisciuna preferenza",
+ "prefs-labs": "Funzionalità sperimentale",
+ "prefs-user-pages": "Paggene utente",
+ "prefs-personal": "Profilo utente",
"prefs-rc": "Urdeme nove",
"prefs-watchlist": "Asservate speciale",
+ "prefs-watchlist-days": "Nummero 'e juorne 'a mmustà dint'a l'elenco 'e cuntrollo:",
+ "prefs-watchlist-days-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
+ "prefs-watchlist-edits": "Numero massimo 'e cagnamiente 'a mmustà ch' 'e funziune avanzate:",
+ "prefs-watchlist-edits-max": "Nummero massimo: 1000",
+ "prefs-watchlist-token": "Token 'e l'alenco 'e cuntrollo:",
+ "prefs-misc": "Varje",
+ "prefs-resetpass": "Cagna 'a password",
+ "prefs-changeemail": "Cagna l'indirizzo e-mail",
+ "prefs-setemail": "Mpizza nu ndirizzo e-mail",
+ "prefs-email": "Opziune e-mail",
+ "prefs-rendering": "Aspetto",
"saveprefs": "Sarva",
+ "restoreprefs": "Arripiglia 'e mpustaziune predefinite (inta tutte 'e seziune)",
+ "prefs-editing": "Cascia 'e cagnamiento",
+ "rows": "Righe:",
"columns": "Culonne:",
"searchresultshead": "Truova",
+ "stub-threshold": "Valore minimo p' 'e <a href=\"#\" class=\"stub\">cullegamiente a 'e stub</a>, 'n byte:",
+ "stub-threshold-disabled": "Stutato",
+ "recentchangesdays": "Nummero 'e juorne a mmustà dint'a l'urdeme cagnamiente:",
+ "recentchangesdays-max": "Massimo $1 {{PLURAL:$1|juorno|juorne}}",
+ "recentchangescount": "Nummero predefinito 'e cagnamiente 'a mmustà:",
+ "prefs-help-recentchangescount": "Chesto ntenne ll'urdeme cagnamiente, 'e cronologgie 'e paggena, e riggistre.",
+ "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'alenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'alenco 'e cuntrollo, picciò nun 'a spartite. [[Special:ResetTokens|Cliccate ccà se tenite necessità d' 'a rimpizzà]].",
+ "savedprefs": "'E preferenze songo state sarvate.",
+ "timezonelegend": "Fuso orario:",
+ "localtime": "Ora lucale:",
+ "timezoneuseserverdefault": "Aúsa ora predefinita d' 'o wiki ($1)",
+ "timezoneuseoffset": "Ato (specificà 'a differenza)",
+ "servertime": "Ora d' 'o server:",
+ "guesstimezone": "Aúsa l'ora d' 'o navigatóre",
"timezoneregion-africa": "Afreca",
+ "timezoneregion-america": "Amereca",
+ "timezoneregion-antarctica": "Antartide",
+ "timezoneregion-arctic": "Arteco",
+ "timezoneregion-asia": "Asia",
+ "timezoneregion-atlantic": "Oceano Atlanteco",
+ "timezoneregion-australia": "Australia",
+ "timezoneregion-europe": "Europa",
+ "timezoneregion-indian": "Oceano Indiano",
+ "timezoneregion-pacific": "Oceano Pacifeco",
+ "allowemail": "Abbìa 'a ricezione 'e mmasciate mannate 'a l'ati utente",
+ "prefs-searchoptions": "Ascìa",
+ "prefs-namespaces": "Namespace",
+ "default": "predefinito",
+ "prefs-files": "File",
+ "prefs-custom-css": "CSS personalizzato",
+ "prefs-custom-js": "JavaScript personalizzato",
+ "prefs-common-css-js": "CSS/JavaScript spartuto pe' tutt' 'e skin:",
+ "prefs-reset-intro": "Putisse ausà sta paggena pe' rimpizzà 'e preferenze proprie comme chille predefinite d' 'o sito.\nL'operazione nun se può annullà.",
+ "prefs-emailconfirm-label": "Cunferma 'e ll'e-mail:",
"youremail": "E-mail:",
"username": "{{GENDER:$1|Nomme utente}}:",
+ "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|d' 'o gruppo|d' 'e gruppe}}:",
+ "prefs-registration": "Data 'e riggistrazione:",
"yourrealname": "Nomme vero",
"yourlanguage": "Lengua:",
+ "yourvariant": "Variante d' 'a llengua:",
+ "prefs-help-variant": "'A variante o grafia ca preferite 'e vedé ncopp' 'e paggene 'e chesta wiki.",
+ "yournick": "Soprannomme (nickname):",
+ "prefs-help-signature": "'E cummente dint' 'e paggene 'e chiacchiera hanna essere firmate cu \"<nowiki>~~~~</nowiki>\" ca s'addeventarrà automatecamente 'a firma propria c' 'a data.",
+ "badsig": "Errore 'e firma nun standard, cuntrullate 'e tag HTML.",
+ "badsiglength": "'A firma c'avite scigliuto è troppo luonga, chesta nun avesse 'a superà $1 {{PLURAL:$1|carattere|carattere}}.",
+ "yourgender": "Comme nce referimmo a vvuje?",
+ "gender-unknown": "Preferisco 'e nun 'o ddicere",
+ "gender-male": "È riggistrato ncopp' 'a {{SITENAME}}",
+ "gender-female": "È riggistrata ncopp' 'a {{SITENAME}}",
+ "prefs-help-gender": "Mpizzà sta preferenza è ozzionale.\n'O software aúsa stu valore pe' se vutà a vuje e v'anummenà a l'ati utente ausanno 'o gennere grammatecale buono.\nCheste nfurmaziune sarranno pubbreche.",
+ "email": "E-mail",
+ "prefs-help-realname": "'O nomme overo vuosto è ozzionale.\nSi sciglite 'e nzertà 'o nomme overo, chesto s'ausarrà pe' dà l'utente l'attribuzione d' 'a fatica fatta.",
+ "prefs-help-email": "L'e-mail vuosto è ozzionale, ma permettesse 'e ricevere 'a password propria quanno v' 'a scurdate.",
+ "prefs-help-email-others": "Putite pure scegliere 'e lassà che l'at'utente ve mannassero mmasciate via e-mail cu nu cullegamiento â paggena d'utente o chiacchiera.\nLl'indirizzo e-mail vuosto nun è scummigliato quanno l'at'utente ve cuntattano.",
+ "prefs-help-email-required": "L'indirizzo e-mail è obbligatorio.",
+ "prefs-info": "Nfurmaziune bbase",
+ "prefs-i18n": "Nternaziunalizzazione",
+ "prefs-signature": "Firma",
+ "prefs-dateformat": "Furmato data",
+ "prefs-timeoffset": "Ore 'e differenza",
+ "prefs-advancedediting": "Opziune generale",
+ "prefs-editor": "Editore",
+ "prefs-preview": "Anteprimma",
+ "prefs-advancedrc": "Opziune avanzate",
+ "prefs-advancedrendering": "Opziune avanzate",
+ "prefs-advancedsearchoptions": "Opziune avanzate",
+ "prefs-advancedwatchlist": "Opziune avanzate",
+ "prefs-displayrc": "Opziune 'e visualizzazione",
+ "prefs-displaywatchlist": "Opziune 'e visualizzazione",
+ "prefs-tokenwatchlist": "Token",
+ "prefs-diffs": "Differenze",
+ "prefs-help-prefershttps": "Sta preferenza averrà affetto 'a 'o prossimo acciesso vuosto.",
+ "prefs-tabs-navigation-hint": "Suggerimento: se ponno ausà 'e buttòne 'e freccia a manca e a dritta pe' ve muovere nfra 'e schede dint'a l'alenco d' 'e schede.",
+ "email-address-validity-valid": "L'indirizzo e-mail pare valido",
+ "email-address-validity-invalid": "Nzerta n'indirizzo e-mail valido",
+ "userrights": "Gestione d' 'e permesse 'e l'utente",
+ "userrights-lookup-user": "Gestione 'e gruppe d'utenza",
+ "userrights-user-editname": "Nzertàte nu nomme utente:",
+ "editusergroup": "Cagnate 'e gruppe d'utenze",
+ "editinguser": "Cagnamiento d' 'e deritte d'utente '''[[User:$1|$1]]''' $2",
+ "userrights-editusergroup": "Cagnate 'e gruppe d'utenze",
+ "saveusergroups": "Sarvate 'e gruppe d'utenza",
+ "userrights-groupsmember": "Ffà parte {{PLURAL:$1|d' 'o gruppo|d' 'e gruppe}}:",
+ "userrights-groupsmember-auto": "Membro mplicito 'e:",
+ "userrights-groups-help": "Putite cagnà 'e gruppe assegnate a l'utente:\n* Na cascia 'e spunta scigliuta significasse ca appartenenza 'e l'utente a 'o gruppo\n* Na cascia 'e spunta nun scigliuta significasse 'a nun appartenenza a 'o gruppo.\n* 'O simmolo * significasse ca nun se può scancellà l'appartenenza a 'o gruppo aropp'a ll'avé miso (o viceversa).",
+ "userrights-reason": "Mutivo:",
+ "userrights-no-interwiki": "Nun tenite permesse pe' cagnà 'e deritte 'e l'utente ncopp'a l'ati wiki.",
+ "userrights-nodatabase": "'O database $1 nun esiste o nun è nu database lucale.",
+ "userrights-nologin": "Avite 'a [[Special:UserLogin|trasì]] comme ammenistratore si vulite assegnà 'e deritte 'e l'utente.",
+ "userrights-notallowed": "Nun tenite 'e permesse pe' jognere o luvà 'e permesse utente.",
+ "userrights-changeable-col": "Gruppe ca putite cagnà",
+ "userrights-unchangeable-col": "Gruppe ca nun putite cagnà",
+ "userrights-conflict": "Conflitto 'e cagnamiento 'e deritte utente! Cuntrullate e cunfermate 'e cagnamiente vuoste.",
+ "userrights-removed-self": "Avete rimosso buono 'e deritte vuoste. Picciò nun putite trasì cchiù dint'a sta paggena.",
+ "group": "Gruppo:",
+ "group-user": "Utente",
+ "group-autoconfirmed": "Utente autocunfermate",
+ "group-bot": "Bot",
+ "group-sysop": "Ammenistrature",
+ "group-bureaucrat": "Burocrate",
+ "group-suppress": "Oversight",
+ "group-all": "(tutte)",
+ "group-user-member": "{{GENDER:$1|utente}}",
+ "group-autoconfirmed-member": "{{GENDER:$1|utente autocunfermato|utente autocunfermata|utente autocunfermato/a}}",
+ "group-bot-member": "{{GENDER:$1|bot}}",
+ "group-sysop-member": "{{GENDER:$1|ammenistratore|ammenistratrice|ammenistratore/trice}}",
+ "group-bureaucrat-member": "{{GENDER:$1|burocrate}}",
+ "group-suppress-member": "{{GENDER:$1|oversight}}",
+ "grouppage-user": "{{ns:project}}:Utente",
+ "grouppage-autoconfirmed": "{{ns:project}}:Utente autocunfermate",
+ "grouppage-bot": "{{ns:project}}:Bot",
+ "grouppage-sysop": "{{ns:project}}:Ammenistrature",
+ "grouppage-bureaucrat": "{{ns:project}}:Burocrate",
+ "grouppage-suppress": "{{ns:project}}:Oversight",
+ "right-read": "Liegge paggene",
+ "right-edit": "Cagna paggene",
+ "right-createpage": "Crìa paggene (ca nun songo paggene 'e chiacchiera)",
+ "right-createtalk": "Crìa chiacchiere 'e paggena",
+ "right-createaccount": "Crìa utenze nove",
+ "right-minoredit": "Nzigna 'e cagnamiente comme minure",
+ "right-move": "Muove 'e paggene",
+ "right-move-subpages": "Muove 'e paggene nzieme ê sottopaggene suje",
+ "right-move-rootuserpages": "Muove 'e paggene princepale d'utente",
+ "right-move-categorypages": "Muove 'e categurìe",
+ "right-movefile": "Muove 'e file",
+ "right-suppressredirect": "Nun crià 'e redirect automateco quanno se muoveno 'e paggene",
+ "right-upload": "Carreca file",
+ "right-reupload": "Sovrascrive nu file ch'esiste",
+ "right-reupload-own": "Sovrascrive nu file esistente carrecat'a l'utente stesso",
+ "right-reupload-shared": "Sovrascrive lucalmente file prisente dint'a l'archivio spartuto",
+ "right-upload_by_url": "Carreca nu file 'a n'indirizzo URL",
+ "right-purge": "Pulezza 'a cache d' 'o sito senza cunferma",
+ "right-autoconfirmed": "Nun suggetto a 'o lemmeto d'aziune 'a l'IP",
+ "right-bot": "S'avesse 'e trattà comm'a nu prucesso automateco",
+ "right-nominornewtalk": "Fa ch' 'e cagnamiente minore a 'e paggene 'e chiacchiera nun facciano scattà l'avviso 'e mmasciata nnova",
+ "right-apihighlimits": "Usa límmete cchiù aute pe l'interrogaziune a ll'API",
+ "right-writeapi": "Usa l'API 'n scrittura",
+ "right-delete": "Scancella paggene",
+ "right-bigdelete": "Scancella paggene ch' 'e cronologgie luonghe",
+ "right-deletelogentry": "Scancella e arripiglia vvoce 'e riggistro specifiche",
+ "right-deleterevision": "Annascunne verziune specifiche d' 'e paggene",
+ "right-deletedhistory": "Vide 'e verziune d' 'a cronologgia scancellate senza 'o testo suoccio a lloro",
+ "right-deletedtext": "Vide 'o testo scancellato e cagnamiente nfra virziune scancellate",
+ "right-browsearchive": "Ascìa dint' 'e paggene scancellate",
+ "right-undelete": "Arripiglia na paggena",
+ "right-suppressrevision": "Vide, annascunne e ripiglia 'e verziune specifiche d' 'e paggene a cocherun'utente",
+ "right-viewsuppressed": "Vide 'e verziune annascunnute a coccherun'utente",
+ "right-suppressionlog": "Vide 'e riggistre private",
+ "right-block": "Blocca 'e cagnamiente 'a parte 'e l'at'utente",
+ "right-blockemail": "Blocca n'utente a mannà e-mail",
+ "right-hideuser": "Blocca n'utente e fallo sparì 'a 'o pubbreco",
+ "right-ipblock-exempt": "Ignora 'e blocche 'e l'IP, 'e blocche automatece e li blocche 'e range 'e l'IP",
+ "right-proxyunbannable": "Passa 'e blocche automatiche d' 'e proxy",
+ "right-unblockself": "Sblocca se stesso",
+ "right-protect": "Cagna 'e livelle 'e prutezione 'e cagna paggene prutette ricurzivamente",
+ "right-editprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-sysop}}\"",
+ "right-editsemiprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-autoconfirmed}}\"",
+ "right-editinterface": "Modifeca 'a nterfaccia utente",
+ "right-editusercssjs": "Cagna 'e file CSS e JS e l'at'utente",
+ "right-editusercss": "Cagna 'e file CSS 'e l'at'utente",
+ "right-edituserjs": "Cagna 'e file JS e l'at'utente",
+ "right-editmyusercss": "Cagna 'e proprie file CSS",
+ "right-editmyuserjs": "Cagna 'e proprie file JavaScript",
+ "right-viewmywatchlist": "Vide l'alenco 'e cuntrollo proprio",
+ "right-editmywatchlist": "Cagna l'alenco 'e cuntrollo proprio. Vedete ca cocch'azione putesse jògnere ancora paggene senza stu deritto.",
+ "right-viewmyprivateinfo": "Vide 'e proprie date private (e.g. e-mail, nomme overo)",
+ "right-editmyprivateinfo": "Cagna 'e date perzunale proprie (p'esempio: e-mail, nomme overo)",
+ "right-editmyoptions": "Cagna 'e preferenze proprie",
+ "right-rollback": "Annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particolare",
+ "right-markbotedits": "Nzégna 'e cagnamiente suggette a rollback comme affettuate 'a nu bot",
+ "right-noratelimit": "Nun suggetto a lemmeto d'aziune",
+ "right-import": "Carreca paggene 'a n'ati wiki",
+ "right-importupload": "Carreca paggene 'a n'upload 'e file",
+ "right-patrol": "Nzegna 'e cagnamiente 'e l'ati utente comme cuntrullate",
+ "right-autopatrol": "Nzegna automatecamente 'e cagnamiente proprie comme cuntrullate",
+ "right-patrolmarks": "Vide ll'urdeme cagnamiente int' 'a funzione 'e cuntrollo",
+ "right-unwatchedpages": "Vide n'alenco 'e pagene nun cuntrullate",
+ "right-mergehistory": "Aunisce 'a cronologgia d' 'e paggene",
+ "right-userrights": "Cagna 'e deritte 'e ll'utente",
+ "right-userrights-interwiki": "Cagna 'e deritte 'e ll'utente int'a l'ati wiki",
+ "right-siteadmin": "Blocca e sblocca 'o database",
+ "right-override-export-depth": "Esporta 'e paggene azzeccanno 'e paggene cullegate nfin'a na profondità 'e 5",
+ "right-sendemail": "Manna na mail a ll'at'utente",
+ "right-passwordreset": "Vide 'e mmasciate 'e rimpustazione d' 'a password",
+ "newuserlogpage": "Riggistro 'e nuove utente",
+ "newuserlogpagetext": "Chest'è nu riggistro 'e criazione d'utenze.",
+ "rightslog": "Deritte 'e ll'utente",
+ "rightslogtext": "Ccà abbascio sta nu riggistro d' 'e cagnamiente a 'e deritte 'e ll'utente",
+ "action-read": "lieggere sta paggena",
"action-edit": "càgna chesta paggena",
+ "action-createpage": "crìa paggene",
+ "action-createtalk": "crìa chiacchiere 'e paggena",
+ "action-createaccount": "crìa stu cunto utente",
+ "action-history": "vide 'a cronologgia 'e sta paggena",
+ "action-minoredit": "nzegnà stu cagnamiento comme minore",
+ "action-move": "Spusta chista paggena",
+ "action-move-subpages": "muovere sta paggena, e le sottopaggene relative",
+ "action-move-rootuserpages": "muove 'e paggene princepale d'utente",
+ "action-move-categorypages": "muove 'e categurìe",
+ "action-movefile": "muove stu file",
+ "action-upload": "carreca stu file",
+ "action-reupload": "sovrascrive stu file esistente",
+ "action-reupload-shared": "sovrascrive stu file prisente dint'a ll'archivio condiviso",
+ "action-upload_by_url": "carreca stu file 'a n'indirizzo URL",
+ "action-writeapi": "usa l'API 'n scrittura",
+ "action-delete": "scancèlla chista paggena",
+ "action-deleterevision": "scancellà sta verziona",
+ "action-deletedhistory": "vide 'a cronologgia scancellata 'e sta paggena",
+ "action-browsearchive": "ascìa dint' 'e paggene scancellate",
+ "action-undelete": "arripiglia chista paggena",
+ "action-suppressrevision": "rivedé e arripiglià 'e cagnamiente annascunnute",
+ "action-suppressionlog": "vide stu riggistro privato",
+ "action-block": "blocca 'e cagnamiente 'a parte 'e st'utente",
+ "action-protect": "cagna 'e livelle 'e prutezione pe' sta paggena",
+ "action-rollback": "annulla ampresso 'e cagnamiente 'e ll'urdem'utente c'avesse cagnato na paggena particolare",
+ "action-import": "carreca paggene 'a n'ata wiki",
+ "action-importupload": "carreca paggene 'a n'upload 'e file",
+ "action-patrol": "nzegna 'e cagnamiente 'e l'ati utente comme cuntrullate",
+ "action-autopatrol": "nzignà 'e proprie cagnamiente comme cuntrullate",
+ "action-unwatchedpages": "vide l'alenco 'e pagene nun cuntrullate",
+ "action-mergehistory": "aunisce 'a cronologgia 'e sta paggena",
+ "action-userrights": "cagna 'e deritte 'e ll'utente",
+ "action-userrights-interwiki": "cagna 'e deritte 'e ll'utente int'a l'ati wiki",
+ "action-siteadmin": "blocca o sblocca 'o database",
+ "action-sendemail": "manna e-mail",
+ "action-editmywatchlist": "cagna l'alenco 'e cuntrolo 'o tuojo",
+ "action-viewmywatchlist": "vide l'alenco 'e cuntrollo proprio",
+ "action-viewmyprivateinfo": "vide 'e date perzunale",
+ "action-editmyprivateinfo": "cagnà 'e proprie date perzunale",
+ "nchanges": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|'a ll'urdema visita}}",
+ "enhancedrc-history": "cronologgia",
"recentchanges": "Urdeme nove",
"recentchanges-legend": "Opzione urdeme cagnamiénte",
- "recentchanges-summary": "Ncoppa chesta paggena song' appresentate ll'urdeme cagnamiente fatto ê cuntenute d\"o sito.",
+ "recentchanges-summary": "Ncoppa chesta paggena song' appresentate ll'urdeme cagnamiente fatte ê cuntenute d\"o sito.",
+ "recentchanges-noresult": "Nisciuno cagnamiento dint'o periodo dato ca soddisfà sti criterie.",
+ "recentchanges-feed-description": "Ncoppa chistu feed song' appresentate ll'urdeme cagnamiente fatte ê cuntenute d\"o sito.",
"recentchanges-label-newpage": "Chista modifica ha criato 'na nova paggena",
"recentchanges-label-minor": "Chisto è nu cagnamiénto piccerillo",
+ "recentchanges-label-bot": "Cagnamiento affettuato 'a nu bot",
"recentchanges-label-unpatrolled": "Chista modifica nun è stata 'ncora verificata",
+ "recentchanges-label-plusminus": "'A grannezza d' 'a paggena s'è cagnata pe' bbia 'e stu nummero 'e bytes",
+ "recentchanges-legend-heading": "'''Liggenda:'''",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide [[Special:NewPages|'e paggene nove]])",
+ "rcnotefrom": "Ccà abbascio {{PLURAL:$5|è alencato 'o cagnamiento appurtato|song' alincate 'e cagnamiente appurtate}} 'a <strong>$3, $4</strong> (mmustate nfin'a <strong>$1</strong>).",
"rclistfrom": "Faje vedé 'e cagnamiénte fatte a partì 'a $3 $2",
"rcshowhideminor": "$1 'e cagnamiénte piccerille",
+ "rcshowhideminor-show": "Faje vedé",
+ "rcshowhideminor-hide": "Annascunne",
"rcshowhidebots": "$1 'e bot",
+ "rcshowhidebots-show": "Faje vedé",
+ "rcshowhidebots-hide": "Annascunne",
"rcshowhideliu": "$1 ll'utente reggìstrate",
+ "rcshowhideliu-show": "Faje vedé",
+ "rcshowhideliu-hide": "Annascunne",
"rcshowhideanons": "$1 ll'utente anonime",
+ "rcshowhideanons-show": "Faje vedé",
+ "rcshowhideanons-hide": "Annascunne",
+ "rcshowhidepatr": "$1 cagnamiente cuntrullate",
+ "rcshowhidepatr-show": "Faje vedé",
+ "rcshowhidepatr-hide": "Annascunne",
"rcshowhidemine": "$1 'e ffatiche mmee",
+ "rcshowhidemine-show": "Faje vedé",
+ "rcshowhidemine-hide": "Annascunne",
"rclinks": "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne<br />$3",
"diff": "diff",
"hist": "cron",
"minoreditletter": "m",
"newpageletter": "N",
"boteditletter": "b",
+ "number_of_watching_users_pageview": "[osservata 'a {{PLURAL:$1|n'utente|$1 utente}}]",
+ "rc_categories": "Lemmeta a 'e categurìe (spartute 'a \"|\")",
"rc_categories_any": "Qualònca",
+ "rc-change-size-new": "$1 {{PLURAL:$1|byte|byte}} aropp'ô cagnamiento",
+ "newsectionsummary": "/* $1 */ sezziona nnova",
"rc-enhanced-expand": "Fa vede dettaglie",
"rc-enhanced-hide": "Annascunne dettaglie",
+ "rc-old-title": "origginariamente criata comme \"$1\"",
"recentchangeslinked": "Cagnamiénte cullegate",
"recentchangeslinked-feed": "Cagnamiénte cullegate",
"recentchangeslinked-toolbox": "Cagnamiénte cullegate",
"recentchangeslinked-title": "Cagnamiénte cullegate a \"$1\"",
+ "recentchangeslinked-summary": "Chest'è n'alenco d' 'e cagnamiente fatte mò a 'e paggene cullegate 'a chilla specificata (o pe' cuntenute dint'a na categurìa specificata). 'E paggene cuntenute dint' 'o proprio elenco 'e l'[[Special:Watchlist|Paggene cuntrullate]] songo mmustate 'n '''grassetto'''.",
"recentchangeslinked-page": "Nomme dda paggena",
+ "recentchangeslinked-to": "Mmusta sulamente 'e cagnamiente a 'e paggene cullegate a chilla specificata",
"upload": "Careca file",
+ "uploadbtn": "Carreca file",
+ "reuploaddesc": "Torna a 'o modulo pe ffà 'a carreca",
+ "upload-tryagain": "Manna 'a descrizione d' 'o file cagnato",
+ "uploadnologin": "Acciesso nun affettuato",
+ "uploadnologintext": "Pe' carrecà 'o file ce vulesse $1.",
+ "upload_directory_missing": "'A cartella 'e carreche ($1) nun esiste e nun se può crià 'a 'o server web.",
+ "upload_directory_read_only": "'O server web nun può scrivere dint' 'a cartella 'e carreca ($1).",
+ "uploaderror": "Errore a carrecà",
+ "upload-recreate-warning": "'Attenziò'': nu file cu stu nomme è stato scancellato o spustato.'''\n'O riggistro d' 'e scancellamiente e d' 'e spustamiente 'e sta paggena è stato scritto ccà abbascio pe' ffà comodo:",
+ "uploadtext": "Ausà 'o modulo ccà sotto pe' carrecà file nuove. Pe' vedé o ascià 'e file carrecate già, vide 'o [[Special:FileList|riggistro 'e file carrecate]]. Càrreche 'e file e virzione nove d' 'e file songo riggistrate dint' 'o [[Special:Log/upload|riggistro d'upload]], 'e scancellamiente dint' 'o [[Special:Log/delete|riggistro ccà]].\n\nPe' nzertà nu file dint'a na paggena, allora facite nu cullegamento 'e stu tipo:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' p'ausà a verziona cumpleta d' 'o file\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativo]]</nowiki></code>''' p'ausà na verziona luonga 200 pixel nzertata dint'a na cascia, allineata a manca e cu nu 'testo alternativo' comme didascalia\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' pe' crià nu cullegamento diretto a 'o file senza 'o fà vedé",
+ "upload-permitted": "Tipe 'e file permesse: $1.",
+ "upload-preferred": "Tipe 'e file cunzigliate: $1.",
+ "upload-prohibited": "Tipe 'e file nun permesse: $1.",
+ "uploadlogpage": "Riggistro 'e carreche",
+ "uploadlogpagetext": "Ccà abbascio song'alencate l'urdeme file carrecate.\nCuntrullate 'a [[Special:NewFiles|gallaria d' 'e file nuove]] pe' ve ffà na guardata cchiù visuale 'e tutto.",
+ "filename": "Nomme d' 'o file",
"filedesc": "Énnece",
+ "fileuploadsummary": "Dettaglie:",
+ "filereuploadsummary": "Cagnamiente a 'o file:",
+ "filestatus": "Stato d' 'o copyright:",
+ "filesource": "Fonte:",
+ "ignorewarning": "Lassa perde l'avviso e sarva 'o file pure",
+ "ignorewarnings": "Lasa perde ogne mmasciata d'attenzione",
+ "minlength1": "'E nomme d' 'e file hann'avé minimo na lettera.",
+ "illegalfilename": "'O nomme \"$1\" cuntene carattere nun permesse dint' 'e titule 'e paggena.\nPe' piacere date n'atu nomme a 'o file e pruvate a 'o carrecà n'ata vota.",
+ "filename-toolong": "'E nomme d' 'e file nun ponno superà 'e 240 byte.",
+ "badfilename": "'O nomme d' 'o file è stato cagnato a \"$1\".",
+ "filetype-mime-mismatch": "'A stensione d' 'o file \".$1\" nun currisponne a 'o tipo MIME scummigliato a 'o file ($2).",
+ "filetype-badmime": "Nun è permesso carrecà file 'e tipo MIME \"$1\".",
+ "filetype-bad-ie-mime": "Nun se ponno carrecà 'e file pecché Internet Explorer 'o scummigliasse comme \"$1\", che è nu tipo 'e file nun permesso e potenzialmente pericoloso.",
+ "filetype-unwanted-type": "Carrecà file 'e tipo '''\".$1\"''' è scunzigliato. {{PLURAL:$3|'O tipo 'e file cunzigliato è|'E tipe 'e file cunzigliate songo}} $2.",
+ "filetype-banned-type": "'''\".$1\"''' {{PLURAL:$4|nun è nu tipo 'e file permesso|nun songo tipe 'e file permesse}}. {{PLURAL:$3|'O tipo 'e file permesso è|'E tipe 'e file permesse songo}} $2.",
+ "filetype-missing": "'O file nun ave stensione (p'esempio \".jpg\").",
+ "empty-file": "'O file ch'avite mannato è abbacante.",
+ "file-too-large": "'O file ch'avite mannato è troppo gruosso.",
+ "filename-tooshort": "'O nomme d' 'o file è troppo curto.",
+ "filetype-banned": "Stu tipo 'e file nun è permesso.",
+ "verification-error": "Stu file nun ha passat' 'o cuntrollo.",
+ "hookaborted": "'O cagnamiento c'avite pruvato 'e fà è stato spezzato 'a na stensione.",
+ "illegal-filename": "'O nomme d' 'o file nun è permesso.",
+ "overwrite": "Sovrascrivere nu file ch'esiste già nun è permesso.",
+ "unknown-error": "È capitato n'errore scanusciuto.",
+ "tmp-create-error": "Nun se può crià nu file temporaneo.",
+ "tmp-write-error": "Errore a scrivere nu file temporaneo.",
+ "large-file": "S'arraccumanna 'e nun appassà 'e diminsione 'e $1 p'ogne file; stu file è gruosso $2.",
+ "largefileserver": "Stu file appassa 'e dimensiune permesse 'a la configurazione d' 'o server",
+ "emptyfile": "'O file carrecato mò mò pare abbacante. Può darse ch'è stato n'errore int' 'o nomme d' 'o file. Cuntrullate ca vulite overamente carrecà stu file.",
+ "windows-nonascii-filename": "Chista wiki nun supporta nomme d' 'e file cu carattere spiciale",
+ "fileexists": "Nu file cu stu nomme esiste già.\nPe' piacere cuntrullate primma <strong>[[:$1]]</strong> si nun site sicure ca 'o vulite cagnà.\n[[$1|thumb]]",
+ "filepageexists": "'A paggena 'e descrizione 'e stu file è stata già criata a l'indirizzo <strong>[[:$1]]</strong>, pùre si nun esiste ancora nu file cu stu nomme. 'A descrizione 'e l'oggetto nzertàta 'n fase 'e carreca nun cumparerrà ncopp' 'a paggena 'e descrizione. Pe' ffà l'oggetto cumparì ncopp' 'a paggena 'e descrizione, l'avisseve 'a cagnà manualmente.\n[[$1|thumb]]",
+ "fileexists-extension": "Nu file esiste cu nu nomme suoccio a chesto: [[$2|thumb]]\n* Nomme d' 'o file carrecato: <strong>[[:$1]]</strong>\n* Nomme d' 'o file esistente: <strong>[[:$2]]</strong>\nPuò darse ca vulite scegliere nu nomme cchiù specifico?.",
+ "fileexists-thumbnail-yes": "Pare ch' 'o file carrecato fosse na miniatura ''(thumbnail)''. [[$1|thumb]]\nCuntrullate, pe' cunfronto, 'o file <strong>[[:$1]]</strong>.\nSi se trattasse d' 'a stessa immaggene, ch' 'e diminsiune origginale, nun è necessario carrecà ati miniature.",
+ "file-thumbnail-no": "Stu filename accummencia pe' <strong>$1</strong>.\nPare ca ce sta n'immaggene piccerilla <em>(thumbnail)</em>.\nSi tiene st'immaggene 'n risoluzione origginale, pe' piacere carrecatela. Si nò, vedite 'e cagnà 'o nomme d' 'o file.",
+ "fileexists-forbidden": "Nu file cu stu nomme esiste già, e nun se può sovrascrivere.<br/>\nPe' piacere turnat'arreto e cagnàte 'o nomme p' 'o turnà a carrecà.\n[[File:$1|thumb|center|$1]]",
+ "fileexists-shared-forbidden": "Nu file cu stu nomme esiste già dint'a l'archivio 'e risorse multimediale spartute. Si vulite carrecà 'o file ancora, turnat'arreto e cagnate 'o nomme p' 'o turnà a carrecà.\n[[File:$1|thumb|center|$1]]",
+ "file-exists-duplicate": "Stu file è nu duplicato {{PLURAL:$1|d' 'o|d' 'e}} file ccà abbascio:",
+ "file-deleted-duplicate": "Nu file identico a chesto ([[:$1]]) è stato scancellato prima. Cuntrullate 'a cronologgia d' 'e scancellamiente apprimma d' 'o carrecà n'ata vota.",
+ "file-deleted-duplicate-notitle": "Nu file eguale a stu file è stato previamente scancellato, e 'o titolo è stato sbaccantato. Chierete a coccheruno ca tenesse 'a posibbelità 'e vedé file luvate e sbaccantate pe' sapé nquale situazione ve truvate apprimma d' 'o ffà carrecà n'ata vota.",
+ "uploadwarning": "Avviso 'e carreca",
+ "uploadwarning-text": "Pe' piacere cagnate ccà abbascio 'a descrizione d' 'o file 'e pruvate n'ata vota.",
+ "savefile": "Sarva file",
+ "uploaddisabled": "'E càrreche so' state stutate.",
+ "copyuploaddisabled": "'E càrreche pe' bbia 'e l'URL so' state stutate.",
+ "uploaddisabledtext": "'E carreche 'e file so' state stutate.",
+ "php-uploaddisabledtext": "'E càrreche 'e file pe' bbia d' 'o PHP so' state stutate. Cuntrullate 'a configurazione d' 'o file_uploads.",
+ "uploadscripted": "Stu file cuntene codece HTML o script, ca se putesse nterpretà erroneamente 'a nu navigatóre web.",
+ "uploadscriptednamespace": "Stu file SVG cuntene nu namespace '$1' nun permesso.",
+ "uploadinvalidxml": "'O códece XML d' 'o file carrecato nun se può passà.",
+ "uploadvirus": "Stu file cuntene nu virus! Dettaglie: $1",
+ "uploadjava": "Stu file è nu file ZIP ca cuntene nu file .class Java.\nCarrecà 'e file Java nun è permesso, pecché ponno appassà 'e restriziune 'e sicurezza.",
+ "upload-source": "File d'origgine",
+ "sourcefilename": "Nomme d' 'o file d'origgine:",
+ "sourceurl": "URL d'origgine:",
+ "destfilename": "Nomme 'e file 'e destinazione:",
+ "upload-maxfilesize": "Diminsione massima d' 'o file: $1",
+ "upload-description": "Descrizione d' 'o file",
+ "upload-options": "Opziune 'e carreca",
+ "watchthisupload": "Tiene d'uocchio chistu file",
+ "filewasdeleted": "Nu file ca se chiamave cumm'a chillo c'avete primma carrecato e pò è stato scancellato.\nVedite 'e cuntrullà 'o $1 apprimma ca cuntinuate c' 'a carreca.",
+ "filename-bad-prefix": "'O nomme d' 'o file ca state a carrecà accummencia pe' ''\"$1\"''', ca nurmalmente è 'o nomme c'assegnasse na machina fotografeca automatecamente ed è nu nomme nun descrittivo.\nPe' piacere scigliete n'atu nomme ca fosse cchiù descrittivo.",
+ "upload-success-subj": "Carreca ngarrata",
+ "upload-success-msg": "'A carreca tuja d' 'o [$2] è asciuta bona. Mò è disponibbele ccà: [[:{{ns:file}}:$1]]",
+ "upload-failure-subj": "Probblema c' 'a carreca",
+ "upload-failure-msg": "Ce steva nu probblema c' 'a carreca 'a [$2]:\n\n$1",
+ "upload-warning-subj": "Avviso 'e carreca",
+ "upload-warning-msg": "Ce steva nu probblema c' 'a carreca 'a [$2]. Putite turnà arreto a 'o [[Special:Upload/stash/$1|module 'e carreche]] pe pruvà d'aggiustà stu prubblema.",
+ "upload-proto-error": "Prutucollo sbagliato",
+ "upload-proto-error-text": "'E carreche remote hann'abbesuogno 'e l'URL c'accummencieno c' 'a parola <code>http://</code> o <code>ftp://</code>.",
+ "upload-file-error": "Errore 'nterno",
+ "upload-file-error-text": "S'è verificato n'errore interno quanno avete pruvat'a crià nu file temporaneo ncopp' 'o server.\nPe' piacere cuntattate n'[[Special:ListUsers/sysop|ammenistratore]].",
+ "upload-misc-error": "Errore 'e carreche scanusciute",
+ "upload-misc-error-text": "N'errore scanusciuto s'è verificato quanno se steva facenno 'a carreca.\nPe' piacere cuntrullate ca l'URL è valida e accessibbele e pruvate n'ata vota.\nSi 'o probblema è presente ancòra, cuntattate n'[[Special:ListUsers/sysop|ammenistratore]].",
+ "upload-too-many-redirects": "L'URL teneva troppe redirect",
+ "upload-http-error": "N'errore HTTP è succiesso: $1",
+ "upload-copy-upload-invalid-domain": "Nun è permessa 'a carreca 'e copie 'a chistu dumminio.",
+ "backend-fail-stream": "Nun se può mannà 'o file \"$1\".",
+ "backend-fail-backup": "Nun se può ffà 'o backup d' 'o file \"$1\".",
+ "backend-fail-notexists": "'O file $1 nun esiste.",
+ "backend-fail-hashes": "Nun se ponno attené 'e hash d' 'o file pe' ne ffà 'o cunfronto.",
+ "backend-fail-notsame": "Esiste già nu file nun eguale a $1 .",
+ "backend-fail-invalidpath": "$1 nun è un nu posto d'archiviazione bbuono.",
+ "backend-fail-delete": "Nun se può scancellà 'o file \"$1\"",
+ "backend-fail-describe": "Nun se ponno cagnà 'e metadate d' 'o file \"$1\".",
+ "backend-fail-alreadyexists": "'O file $1 esiste già.",
+ "backend-fail-store": "Nun se può astipà 'o file \"$1\" dint'a \"$2\".",
+ "backend-fail-copy": "Nun se può copiare 'o file \"$1\" dint'a \"$2\".",
+ "backend-fail-move": "Nun se può spustà 'o file \"$1\" into \"$2\".",
+ "backend-fail-opentemp": "Nun se può arapì nu file temporaneo.",
+ "backend-fail-writetemp": "Nun se può scrivere nu file temporaneo.",
+ "backend-fail-closetemp": "Nun se può nchiure nu file temporaneo.",
+ "backend-fail-read": "Nun se può lieggere 'o file \"$1\".",
+ "backend-fail-create": "Nun se può scrivere 'o file \"$1\"",
+ "backend-fail-maxsize": "Nun se può scrivere 'o file \"$1\" pecché chist'è cchiù gruosso 'e {{PLURAL:$2|nu byte|$2 byte}}",
+ "backend-fail-readonly": "L'archivio 'e rezza \"$1\" è mò mò 'n sola-lettura. 'O mutivo è: \"$2\"",
+ "backend-fail-synced": "'O file \"$1\" è int' 'a nu stato ncunzistente dint'a l'archivie nterne.",
+ "backend-fail-connect": "Nun se può cunnettà â memoria 'e rezza \"$1\".",
+ "backend-fail-internal": "N'errore scanusciuto s'è verificato int'a l'archivie 'e rezza \"$1\".",
+ "backend-fail-contenttype": "Nun se ponno determinà 'e tipe 'e cuntenute d' 'o file 'a riggistrà dint'a \"$1\".",
+ "backend-fail-batchsize": "L'archivio 'e rezza prugrammaje na rezza 'e $1 {{PLURAL:$1|prucesso|prucesse}} ncopp' 'o file; 'o lémmeto è $2 {{PLURAL:$2|prucesso|prucesse}}.",
+ "backend-fail-usable": "Nun se può lieggere o scrivere 'o file \"$1\" pecché mancano 'e permesse sufficiente o nun esiste 'a cartella/cuntenitore.",
+ "filejournal-fail-dbconnect": "Nun se può fà connessione a l'archivio d' 'o database pe' puté astipà archivie 'n rezza \"$1\".",
+ "filejournal-fail-dbquery": "Nun se può agghiurnà l'archivio d' 'o database pe' puté astipà l'archivie 'n rezza \"$1\".",
+ "lockmanager-notlocked": "Nun se può sbloccà \"$1\"; nun è bluccato.",
+ "lockmanager-fail-closelock": "Nun se può nchiure 'o file 'e blocco pe' \"$1\".",
+ "lockmanager-fail-deletelock": "Nun se può scancellà 'o file 'e blocco pe' \"$1\".",
+ "lockmanager-fail-acquirelock": "Nun se può piglià 'o blocco pe' \"$1\".",
+ "lockmanager-fail-openlock": "Nun se può arapì 'o file 'e blocco pe' \"$1\".",
+ "lockmanager-fail-releaselock": "Nun se può lanzà 'o blocco pe' \"$1\".",
+ "lockmanager-fail-db-bucket": "Nun se ponno cuntattà 'e database 'e blocco necessarie int'a $1.",
+ "lockmanager-fail-db-release": "Nun se ponno lanzà 'e blocche ncopp' 'o database $1.",
+ "lockmanager-fail-svr-acquire": "Nun se ponno piglià 'e blocche ncopp' 'o server $1.",
+ "lockmanager-fail-svr-release": "Nun se ponno lanzà blocche ncopp' 'o server $1.",
+ "zip-file-open-error": "S'è truvato n'errore quanno se steva arapenno nu file pe' ne fà cuntrolle ZIP.",
+ "zip-wrong-format": "'O file specificato nun era nu file ZIP.",
+ "zip-bad": "'O file è corrotto o pure nun è nu file ZIP ca se putesse lieggere.\nNun se può cuntrullà opportunamente pe' sicurezza.",
+ "zip-unsupported": "'O file è nu file ZIP c'ausa servizie ZIP ca nun songo suppurtate 'a MediaWiki.\nNun se può cuntrullà pe' sicurezza.",
+ "uploadstash": "Carreca stash",
+ "uploadstash-summary": "Sta paggena dà l'accesso a 'e file ca songo carrecate o ca stanno pe' se carrecà, ma nun songo pubbrecat'ancora ncopp'a sta wiki. Sti file nun songo visibbele a nisciuno, sulamente a chill'utente ca l'ha carrecato.",
+ "uploadstash-clear": "Pulezza 'e file annascunnute",
+ "uploadstash-nofiles": "Nun tenite file annascunnute.",
+ "uploadstash-badtoken": "L'esecuzione 'e sta azione nun ha avuto successo, forse pecché 'e credenziale 'e cagnamiento so' mmaturate. Prova n'ata vota.",
+ "uploadstash-errclear": "'A pulezzia d' 'e file nun ha avuto successo.",
+ "uploadstash-refresh": "Agghiuorna l'alenco d' 'e file",
+ "invalid-chunk-offset": "Distanza d' 'a parte nun valida",
+ "img-auth-accessdenied": "Acciesso negato",
+ "img-auth-nopathinfo": "PATH_INFO mancante.\n'O server nun è mpustato pe' passà sta nfurmazione.\nPuò darse ca, essenno basato ncopp'a CGI, nun putesse suppurtà img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
+ "img-auth-notindir": "'O percurzo addimannato nun se trova dint' 'e cartelle d'upload configurate.",
+ "img-auth-badtitle": "Nun se può fravecà nu titolo valido 'a \"$1\".",
+ "img-auth-nologinnWL": "Nun site trasuto e \"$1\" nun è dint'a lista janca.",
+ "img-auth-nofile": "File \"$1\" nun esiste.",
+ "img-auth-isdir": "State pruvanno a trasì int' 'a cartella \"$1\".\nSulamente se può trasì a 'e file.",
+ "img-auth-streaming": "\"$1\" 'n streaming.",
+ "img-auth-public": "'A funziona 'e img_auth.php è chella ddà 'e file d'output 'a na wiki privata.\nSta wiki è configurata comm'a na wiki pubbleca.\nPe na sicurezza ottima, img_auth.php è stutato.",
+ "img-auth-noread": "L'utente nun tene acciesso pe lieggere \"$1\".",
+ "http-invalid-url": "URL nun valido: $1",
+ "http-invalid-scheme": "L'URL c' 'o prefisso \"$1\" nun so' suppurtate.",
+ "http-request-error": "Richieste HTTP fallite pe' n'errore scanusciuto.",
+ "http-read-error": "Errore 'e lettura HTTP.",
+ "http-timed-out": "Richieste HTTP fore tiempo.",
+ "http-curl-error": "Errore analizzanno l'URL: $1",
+ "http-bad-status": "C'è stato nu probblema pe' tramente ca se faceva 'a richiesta HTTP: $1, $2",
+ "upload-curl-error6": "Nun se riesce 'arrevà a l'URL",
+ "upload-curl-error6-text": "A l'URL c'avete scritto nun se può arrevà.\nPe' piacere, cuntrullate ca l'URL è curretta e ca 'o sito è appicciato.",
+ "upload-curl-error28": "Fore tiempo p' 'a carreca",
+ "upload-curl-error28-text": "'O sito trica tiempo a risponnere.\nPe piacere, cuntrullate ca 'o sito è appicciato, aspettate nu poco 'e tiempo e pruvate n'ata vota.\nVuje forse vulite aspettà nu poco ca se spiccia 'o traffeco a 'o sito.",
"license": "Licenze:",
"license-header": "Licenza",
+ "nolicense": "Nisciuna licienza scigliuta",
"licenses-edit": "Càgna opzziune 'e licenza",
+ "license-nopreview": "(Anteprimma nun disponibbele)",
+ "upload_source_url": "(nu file 'a n'URL valido e accessibbele pubblecamente)",
+ "upload_source_file": "(nu file d' 'o computer 'o tuojo)",
+ "listfiles-delete": "scancèlla",
+ "listfiles-summary": "Sta paggena speciale fà vedé tuttequante file carrecate.",
+ "listfiles_search_for": "Ascìa 'e media pe' nomme:",
+ "imgfile": "file",
+ "listfiles": "Lista d' 'e file",
+ "listfiles_thumb": "Miniature",
+ "listfiles_date": "Data",
"listfiles_name": "Nomme",
+ "listfiles_user": "Utente",
+ "listfiles_size": "Dimenzione",
+ "listfiles_description": "Descrizzione",
+ "listfiles_count": "Verziune",
+ "listfiles-show-all": "Nclude 'e verziune viecchie 'e ll'immaggene",
+ "listfiles-latestversion": "Verzione 'e mo",
+ "listfiles-latestversion-yes": "Sì",
+ "listfiles-latestversion-no": "No",
"file-anchor-link": "Fiùra",
"filehist": "Cronologgia d\"o file",
- "filehist-revert": "ripristina",
+ "filehist-help": "Ffà click su nu gruppo data/ora pe' vedé 'o file comme s'apprisentava ind' 'a chillu mumento.",
+ "filehist-deleteall": "scancella tutto",
+ "filehist-deleteone": "scancèlla",
+ "filehist-revert": "arrepiglia",
"filehist-current": "attuale",
"filehist-datetime": "Data/Ora",
"filehist-thumb": "Miniature",
+ "filehist-thumbtext": "Miniatura d' 'a verziona d' 'o $1",
+ "filehist-nothumb": "Nisciuna miniatura",
"filehist-user": "Utente",
"filehist-dimensions": "Dimenzione",
+ "filehist-filesize": "Dimenziune d\"o file",
+ "filehist-comment": "Commento",
"imagelinks": "Jonte ê ffiure",
+ "linkstoimage": "{{PLURAL:$1|Sta paggena cullega|$1 'e sti paggene cullegano}} a stu file:",
+ "linkstoimage-more": "Cchiù 'e $1 {{PLURAL:$1|paggene cullegano|paggene cullegano}} a stu file.<br />\nL'alenco ccà abbascio fà vedé {{PLURAL:$1|'a primma paggena ca cullega|'e primme $1 paggene ca cullegano}} sulamente a stu file.<br />\nNa [[Special:WhatLinksHere/$2|lista completa]] è disponibbele.",
+ "nolinkstoimage": "Nisciuna paggena cullega a stu file.",
+ "morelinkstoimage": "Vide [[Special:WhatLinksHere/$1|cchiù cullegamiente]] a stu file.",
+ "linkstoimage-redirect": "$1 (redirezionamiente d' 'o file) $2",
+ "duplicatesoffile": "{{PLURAL:$1|'O file ccà abbascio è nu duplicato|'E $1 file ccà abbascio songo duplicate}} 'e stu file ([[Special:FileDuplicateSearch/$2|cchiù nfurmaziune]]):",
+ "sharedupload": "Stu file vène 'a $1 e pò essere ausato 'a n'ati pruggette.",
+ "sharedupload-desc-there": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\nPe' piacere vedite 'a [$2 pàggena 'e descrizione d' 'o file] pe' n'avé cchiù nfurmaziune.",
+ "sharedupload-desc-here": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\n'A descriziona ncopp' 'a [$2 pàggena 'e descrizione d' 'o file] se può vedé ccà abbascio.",
+ "sharedupload-desc-edit": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\nPuò darse ca vulite cagnà 'a descrizione d' 'a [$2 paggena 'e descrizione d' 'o file] ccà.",
+ "sharedupload-desc-create": "Stu file vène 'a $1 e pò essere ausato pe n'ati pruggette.<br />\nPuò darse ca vulite cagnà 'a descrizione dint' 'a [$2 paggena 'e descrizione d' 'o file] ccà.",
+ "filepage-nofile": "Nisciuno file cu stu nomme esiste.",
+ "filepage-nofile-link": "Nisciuno file cu stu nomme esiste, ma 'o putite [$1 carrecà].",
+ "uploadnewversion-linktext": "Càrreca na verziona nova 'e stu file",
+ "shared-repo-from": "'a $1",
+ "shared-repo": "n'archivio cundiviso",
+ "upload-disallowed-here": "Nun se può sovrascrivere stu file.",
+ "filerevert": "Arrepiglia $1",
+ "filerevert-legend": "Arrepiglia 'o file",
+ "filerevert-intro": "State arrepiglianno 'o file '''[[Media:$1|$1]]''' int' 'a [$4 verzione d' 'o $3, $2].",
+ "filerevert-comment": "Mutive:",
+ "filerevert-defaultcomment": "Arripigliata 'a verzione d' 'o $2, $1",
+ "filerevert-submit": "Arrepiglia",
+ "filerevert-success": "'''[[Media:$1|$1]]''' è stat'arripigliato â verziona [$4 d' 'e $3 d' 'o $2].",
+ "filerevert-badversion": "Nun ce sta na virziona lucale 'e stu file cu l'orario addimannato.",
+ "filedelete": "Scancella $1",
+ "filedelete-legend": "Scancella 'o file",
+ "filedelete-intro": "State pe' scancellà 'o file '''[[Media:$1|$1]]''' cu tutta 'a cronologgia 'e chisto.",
+ "filedelete-intro-old": "State a scancellà 'a verziona 'e '''[[Media:$1|$1]]''' d' 'o [$4 $3, $2].",
+ "filedelete-comment": "Mutivo:",
+ "filedelete-submit": "Scancèlla",
+ "filedelete-success": "'O file '''$1''' è stato scancellato.",
+ "filedelete-success-old": "'A verziona d' 'o file '''[[Media:$1|$1]]''' d' 'o $3, $2 è stata scancellata.",
+ "filedelete-nofile": "Nun esiste nu file '''$1'''.",
+ "filedelete-nofile-old": "Nun ce sta na verziona archiviata 'e '''$1''' cu l'attrebbute specificate.",
+ "filedelete-otherreason": "Ati/cchiù ragiune:",
+ "filedelete-reason-otherlist": "Ati ragiune",
+ "filedelete-reason-dropdown": "*Mutive cchiù comune p' 'o scancellà\n** Violazione d' 'o copyright\n** File duplicato",
+ "filedelete-edit-reasonlist": "Càgna 'e mutive pe' fà 'o scancellamiento",
+ "filedelete-maintenance": "'O scancellamiento e arripiglio 'e file s'è stutato p' 'o mumento, pe' tramente ca se fà 'a manutenzione.",
+ "filedelete-maintenance-title": "Nun se può scancellà 'o file",
+ "mimesearch": "Ascià a sicondo 'o MIME",
+ "mimesearch-summary": "Sta paggena permette filtrà 'e file a sicondo 'o tipo 'e MIME.\nNzertate 'a stringa 'e ricerca comm'a nu tipo/sottotipo o tipo/*, p'esempio: <code>image/jpeg</code>.",
+ "mimetype": "Tipo 'e MIME:",
+ "download": "scarreca",
+ "unwatchedpages": "Paggene fore l'alenco 'e cuntrollo",
+ "listredirects": "Liste 'e ridirezionamiente",
+ "listduplicatedfiles": "Lista d' 'e file duplicate",
+ "listduplicatedfiles-summary": "Chist'è n'alenco 'e file, addò 'a verziona cchiù recente 'e nu file è nu duplicato d' 'a verziona cchiù ricente 'e n'atu file. Songhe cunziderate sulamente 'e file lucale.",
+ "listduplicatedfiles-entry": "[[:File:$1|$1]] ave [[$3|{{PLURAL:$2|nu duplicato|$2 duplicate}}]].",
+ "unusedtemplates": "Template ca nun se song'ausate",
+ "unusedtemplatestext": "Sta paggena alenca tutt' 'e paggene int'a 'o namespace {{ns:template}} ca nun se songo nzertàte dint'a n'ata paggena.\nArricuòrdete 'e cuntrullà l'ati cullegamiente a 'e template apprimm' 'e scancellà.",
+ "unusedtemplateswlh": "ati cullegamiente",
"randompage": "Na paggena qualsiase",
"randompage-nopages": "Nun gè song paggene {{PLURAL:$2|dint'ô seguente namespace|dint'ê seguenti namespace}}: $1.",
+ "randomincategory": "Paggena a uocchio dint' 'a categurìa",
+ "randomincategory-invalidcategory": "\"$1\" nun è nu nomme 'e categurìa bbuono.",
+ "randomincategory-nopages": "Non ce stanno pàggene dint' 'a [[:Category:$1]].",
+ "randomincategory-category": "Categurìa:",
+ "randomincategory-legend": "Paggena a uocchio dint' 'a categurìa",
+ "randomredirect": "Redirezionamiento a uocchio",
+ "randomredirect-nopages": "Nun ce stanno redirezionamiente int' 'o namespace \"$1\".",
"statistics": "Statistiche",
+ "statistics-header-pages": "Statistiche d' 'e paggene",
+ "statistics-header-edits": "Cagna 'e statistiche",
+ "statistics-header-views": "Vide 'e statistiche",
+ "statistics-header-users": "Statistiche 'e l'utente",
+ "statistics-header-hooks": "Ati statistiche",
+ "statistics-articles": "Paggene 'e cuntenute",
+ "statistics-pages": "Paggene",
+ "statistics-pages-desc": "Tutt' 'e paggene dint'a wiki, mettenno 'e chiacchieriate, redirezionamiente, ecc.",
+ "statistics-files": "File carrecate",
+ "statistics-edits": "Cagnamiente d' 'e paggene 'a che {{SITENAME}} s'è accumminciata",
+ "statistics-edits-average": "Cagnamiente medie pe' paggena",
+ "statistics-views-total": "Visite 'n totale",
+ "statistics-views-total-desc": "'E vviste a paggene ca nun esisteno e paggene speciale nun cuntano",
+ "statistics-views-peredit": "Visite pe' cagnamiento",
+ "statistics-users": "[[Special:ListUsers|Utente riggistrate]]",
+ "statistics-users-active": "Utente attive",
+ "statistics-users-active-desc": "Utente c'hanno fatto coccosa dint' 'a {{PLURAL:$1|l'urdemo juorno|l'urdeme $1 juorne}}",
+ "statistics-mostpopular": "Pàggene cchiù visitate",
+ "pageswithprop": "Paggene cu na prupietà 'e paggena",
+ "pageswithprop-legend": "Paggene cu na prupietà 'e paggena",
+ "pageswithprop-text": "Sta paggena alenca 'e paggene c'ausano na prupietà particolare 'e paggena.",
+ "pageswithprop-prop": "Nomme d' 'a prupietà:",
+ "pageswithprop-submit": "Vàje",
+ "pageswithprop-prophidden-long": "valore d' 'a prupietà d' 'o testo luongo annascunnuto ($1)",
+ "pageswithprop-prophidden-binary": "valore 'e prupietà binaria annascunnuto ($1)",
"doubleredirects": "Redirect duppie",
+ "doubleredirectstext": "Sta paggena alenca 'e paggene ca se ridirezionano a n'ati paggene.\nOgne riga cuntene nu cullegamente a 'o primmo e a 'o sicondo ridirezionamiento pe' ffà vedé addò arriva 'o sicondo ridirezionamiento, 'o quale è nurmalmente 'a paggena 'e destinaziona \"riale\", addò 'o primmo ridirezionaminento avess'a cullegà.\n'A situazione d' 'e <del>ridireziune scancellate</del> è stat'arricettata.",
+ "double-redirect-fixed-move": "[[$1]] è stato spustato.\nÈ stato automaticamente agghiurnato e ora è nu redirect a [[$2]].",
+ "double-redirect-fixed-maintenance": "Curreggenno automaticamente 'o doppio redirect 'a [[$1]] a [[$2]] pe' tramente ca se fà na fatica 'e manutenzione.",
+ "double-redirect-fixer": "Currettore 'e redirezionamiente",
+ "brokenredirects": "Redirezionamiente scassate",
+ "brokenredirectstext": "'E redirezionamiente ccà abbascio vanno a paggene ca nun esisteno:",
+ "brokenredirects-edit": "càgna",
+ "brokenredirects-delete": "scancèlla",
+ "withoutinterwiki": "Paggene senza cullegamiente interwiki",
+ "withoutinterwiki-summary": "'E paggene ccà abbascio nun songo cullegate a nisciun'ata verzione 'e lengua differente.",
+ "withoutinterwiki-legend": "Prefisse",
+ "withoutinterwiki-submit": "Faje vedé",
+ "fewestrevisions": "Paggene cu meno cagnamiente",
"nbytes": "$1 {{PLURAL:$1|byte|byte}}",
"ncategories": "$1 {{PLURAL:$1|categoria|categorie}}",
+ "ninterwikis": "$1 {{PLURAL:$1|interwiki}}",
"nlinks": "$1 {{PLURAL:$1|cullegamiento|cullegamiente}}",
"nmembers": "$1 {{PLURAL:$1|elemento|elemente}}",
+ "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membre}}",
+ "nrevisions": "$1 {{PLURAL:$1|verzione|verziune}}",
+ "nviews": "$1 {{PLURAL:$1|visita|visite}}",
+ "nimagelinks": "Ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
+ "ntransclusions": "ausate ncopp'a {{PLURAL:$1|na paggena|$1 paggene}}",
+ "specialpage-empty": "Nun ce stanno risultate pe' stu report.",
+ "lonelypages": "Paggene orfane",
+ "lonelypagestext": "'E paggene ccà abbascio nun so state cullegate o appennute int' 'a n'ati paggene ncopp'a {{SITENAME}}.",
+ "uncategorizedpages": "Paggene senza categurìa",
+ "uncategorizedcategories": "Categurìe senza categurìa",
+ "uncategorizedimages": "File senza categurìa",
+ "uncategorizedtemplates": "Template senza categurìa",
+ "unusedcategories": "Categurìe ca nun s'ausano",
+ "unusedimages": "File ca nun s'ausano",
"popularpages": "Paggene cchiù 'speziunate",
+ "wantedcategories": "Categurìe addimannate",
"wantedpages": "Paggene cchiù addemannate",
+ "wantedpages-badtitle": "Titolo invalido mmiez' 'o nzieme 'e risultate: $1",
+ "wantedfiles": "File addimannate",
+ "wantedfiletext-cat": "Chisti file s'ausano ma nun esisteno. 'E file ca veneno 'e n'archivio 'e fore s'alencano ccà senza cuntrullà l'esistenza suja. Sti fauze pusitive sarranno <del>nzignate</del>. 'E paggene ca teneno sti file ca nun esisteno song'alencate dint'a [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Sti file ccà, song'ausate, ma nun esisteno. Anze, 'e paggene c'ausano sti file song'alencate dint'a [[:$1]].",
+ "wantedfiletext-nocat": "'E file ccà abbascio s'ausano ma nun esisteno. 'E file ca veneno 'e n'archivio 'e fore s'alencano ccà senza cuntrullà l'esistenza suja. Sti fauze pusitive sarranno <del>nzignate</del>.",
+ "wantedfiletext-nocat-noforeign": "'E file ccà abbascio s'ausano ma nun esisteno.",
+ "wantedtemplates": "Template addimannate",
+ "mostlinked": "Paggene cchiù addimannate",
+ "mostlinkedcategories": "Categurìe cchiù addimannate",
+ "mostlinkedtemplates": "Paggene cchiù appennute",
+ "mostcategories": "Paggene cu cchiù categurìe",
+ "mostimages": "File cchiù addimannate",
+ "mostinterwikis": "Paggene cu cchiù interwiki",
+ "mostrevisions": "Paggene cu cchiù cagnamiente",
+ "prefixindex": "Tutte 'e paggene cu prefisso",
+ "prefixindex-namespace": "Tutte 'e paggene cu prefisso d' 'o namespace $1",
+ "prefixindex-strip": "Annascunne 'o prefisso int' 'a lista",
"shortpages": "Paggene curte",
"longpages": "Paggene cchiú longhe",
+ "deadendpages": "Paggene ca nun spòntano",
+ "deadendpagestext": "'E paggene ccà abbascio nun spontano a n'ati paggene ncopp'a {{SITENAME}}.",
+ "protectedpages": "Paggene prutette",
+ "protectedpages-indef": "Sulamente prutezziune a tiempo nun definito",
+ "protectedpages-summary": "Sta paggena elenca 'e paggene ch'esisteno e ca songo prutette mò. Pe n'avé n'elenco 'e titule prutette â criazione, vedite [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+ "protectedpages-cascade": "Sulamente prutezziune ricurzive",
+ "protectedpages-noredirect": "Annascunne redirect",
+ "protectedpagesempty": "Nisciuna paggena è prutetta pe mò cu sti parametre.",
+ "protectedpages-timestamp": "Data e ora",
+ "protectedpages-page": "Paggena",
+ "protectedpages-expiry": "Ammatura",
+ "protectedpages-performer": "Prutetta 'a ll'utente",
+ "protectedpages-params": "Parametre 'e prutezione",
+ "protectedpages-reason": "Mutivo",
+ "protectedpages-unknown-timestamp": "Scanusciuto",
+ "protectedpages-unknown-performer": "Utente scanusciuto",
+ "protectedtitles": "Paggene prutette",
+ "protectedtitles-summary": "Sta paggena elenca 'e titule ca song'attualmente prutette 'a criazione. Pe' n'avé n'elenco 'e paggene prutette ch'esisteno, vedite [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+ "protectedtitlesempty": "Nisciunu titolo è prutetto pe mò cu sti parametre.",
+ "listusers": "Lista 'e l'utente",
+ "listusers-editsonly": "Fà vedé sulamente l'utente cu cagnamiente fatte",
+ "listusers-creationsort": "Arrecetta pe' data 'e criazione",
+ "listusers-desc": "Arrecetta 'a l'auto a 'o vascio",
+ "usereditcount": "{{PLURAL:$1|nu càgnamiento|$1 càgnamiente}}",
"usercreated": "{{GENDER:$3|Criato/a}} 'o $1 a $2",
"newpages": "Paggene cchiù frische",
+ "newpages-username": "Nomme utente:",
+ "ancientpages": "Paggene cchiù viecchie",
"move": "Spusta",
"movethispage": "Spusta chesta paggena",
+ "unusedimagestext": "'E file ccà abbascio esisteno, ma nun songo appennute dint' 'a nisciuna paggena.\nPe' piacere vedite ca n'ati site ncopp' 'a ll'Internet putessero cullegà cu nu file direttamente cu l'URL, picciò vedite ca putessero stà dint'a sta lista ancora tenenno nu cullegamiento diretto.",
+ "unusedcategoriestext": "'E categurìe ccà abbascio esisteno, ancora ch' 'e categurìe o l'ati paggene nun l'aùsano.",
+ "notargettitle": "Nisciuna destinazione",
+ "notargettext": "Nun avete specificato na paggena o n'utente 'e destinazione pe' putè fa sta operazione.",
+ "nopagetitle": "Nisciuna paggena 'e destinazione",
+ "nopagetext": "'A paggena 'e destinazione c'avite specificato nun esiste.",
+ "pager-newer-n": "{{PLURAL:$1|1 cchiù viecchio|$1 cchiù viecchie}}",
"pager-older-n": "{{PLURAL:$1|1 cchiù viecchio|$1 cchiù viecchie}}",
+ "suppress": "Supervisione",
+ "querypage-disabled": "Sta paggena speciale è stutata pe' mutive 'e prestaziune.",
"booksources": "Funte libbrarie",
+ "booksources-search-legend": "Ascìa 'e fonte ncopp' 'e libbre",
"booksources-go": "Vàje",
+ "booksources-text": "Ccà abbascio ce sta na lista 'e cullegamiente a l'ati site ca venneno libbre nuove e viecchie, ca putessero pure avé cchiù nfurmaziune ncopp' 'e libbre ca jate ascianno:",
+ "booksources-invalid-isbn": "L'ISBN c'avete miso nun pare bbuono; cuntrolla si ce sta cocch'errore quanno stavate cupianno stu nummero d' 'a fonte origginale.",
+ "specialloguserlabel": "Mplementatore:",
+ "speciallogtitlelabel": "Destinazione (titolo o utente):",
"log": "Logs",
+ "all-logs-page": "Tutte l'archivie pubbleche",
+ "alllogstext": "Visualizzazione mmescata 'e tutte 'e riggistre disponibbele ncopp'a {{SITENAME}}.\nPutite restringere 'a vista a sicondo 'o tipo 'e riggistro, 'o nomme utente (sensibbele a 'e maiuscole), o 'e paggene coinvolte (pure chiste songo sensibbele a 'e maiuscole).",
+ "logempty": "Nun ce sta n'elemento dint' 'o riggistro azzeccato â ricerca.",
+ "log-title-wildcard": "Ascìa titole c'accummencieno cu stu testo",
+ "showhideselectedlogentries": "Cagna visibbelità d' 'e riggistre scigliute",
"allpages": "Tutte 'e ppaggene",
+ "nextpage": "Paggena appriesso ($1)",
+ "prevpage": "Paggena apprima ($1)",
+ "allpagesfrom": "Fà vedè 'e paggene partenno 'a:",
+ "allpagesto": "Fà vedè 'e paggene ca fernisceno 'o:",
"allarticles": "Tutt' 'e vvoce",
"allinnamespace": "Tutt' 'e ppaggene d''o namespace $1",
"allpagessubmit": "Vàje",
+ "allpagesprefix": "Fà vedè 'e paggene cu 'o prefisso:",
+ "allpagesbadtitle": "'O titolo d' 'a paggena richiesta è invalido o pure nun è linkato buono a 'o titolo inter-lengua o inter-wiki.\nPutesse pure tené uno o cchiù carattere ca nun se ponno usà dint'e titule.",
+ "allpages-bad-ns": "{{SITENAME}} nun ce tene 'o namespace \"$1\".",
+ "allpages-hide-redirects": "Annascunne redirect",
+ "cachedspecial-viewing-cached-ttl": "State a vedé na verzione int' 'a cache 'e sta paggene, 'a quale pò essere agghiurnata 'a $1 fà.",
+ "cachedspecial-viewing-cached-ts": "State vedenno na verzione 'n cache, ca putesse nun essere agghiurnata.",
+ "cachedspecial-refresh-now": "Vide l'urdeme.",
"categories": "Categurìe",
"categoriespagetext": "{{PLURAL:$1|'A categurìa 'nnecata 'e seguito cuntiene|'E categurìe 'nnecate 'e seguito cuntengono}} paggene o file multimediale.\n'E [[Special:UnusedCategories|categurìe vuote]] nun song mostrate ccà.\nVere anche 'e [[Special:WantedCategories|categurìe richieste]].",
+ "categoriesfrom": "Fà vedè 'e categurìe partenno 'a:",
+ "special-categories-sort-count": "arricetta pe' cunteggio",
+ "special-categories-sort-abc": "arricetta arfabbeticamente",
+ "deletedcontributions": "Contribbute utente scancellate",
+ "deletedcontributions-title": "Contribbute utente scancellate",
+ "sp-deletedcontributions-contribs": "contribbute",
+ "linksearch": "Ascìa cullegamiente 'a fore",
+ "linksearch-pat": "Ascìa pe' mudello 'e ricerca:",
+ "linksearch-ns": "Namespace:",
"linksearch-ok": "Truova",
+ "linksearch-text": "'E wildcard cumm'a \"*.wikipedia.org\" ponno essere ausate.<br />\nCe vulesse minimo nu dominio d'auto livello, p'esempio \"*.org\". <br />\n{{PLURAL:$2|Prutucolle}} suppurtate: <code>$1</code> ('o valore 'e bbase è http:// si 'o protocollo nun è stato specificato).",
"linksearch-line": "$1 presente dint'â paggena $2",
+ "linksearch-error": "'E wildcard ponno essere ausate sulamente a l'inizio d' 'o hostname.",
+ "listusersfrom": "Fà vedè l'utente partenno 'a:",
+ "listusers-submit": "Faje vedé",
+ "listusers-noresult": "Nisciun'utente truvato.",
+ "listusers-blocked": "(bloccate)",
+ "activeusers": "Lista d'utente attive",
+ "activeusers-intro": "Chest'è n'elenco d'utente c'hanno fatto cierti tipe d'attività nfin'a $1 {{PLURAL:$1|juorno|ghiuorne}} fa.",
+ "activeusers-count": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}} int'a l'urdeme {{PLURAL:$3|ghiuorne}}",
+ "activeusers-from": "Fà vedè l'utente partenno 'a:",
+ "activeusers-hidebots": "Annascunne 'e bot",
+ "activeusers-hidesysops": "Annascunne l'ammenistrature",
+ "activeusers-noresult": "Nisciun'utente truvato.",
+ "listgrouprights": "Deritte d' 'e gruppe utente",
+ "listgrouprights-summary": "'A lista ccà abbascio è na lista d' 'e gruppe utente criate int'a sta wiki, ch' 'e diritte associate.\nPonno esistere [[{{MediaWiki:Listgrouprights-helppage}}|nfurmaziune cchiù ndettaglie]] ncopp' 'e deritte ndividuale.",
+ "listgrouprights-key": "* <span class=\"listgrouprights-granted\">Deritto dato</span>\n* <span class=\"listgrouprights-revoked\">Deritto luvato</span>",
+ "listgrouprights-group": "Gruppo",
+ "listgrouprights-rights": "Deritte",
+ "listgrouprights-helppage": "Help:Deritte d' 'o gruppo",
+ "listgrouprights-members": "(lista d' 'e membre)",
+ "listgrouprights-addgroup": "Jogne {{PLURAL:$2|ô gruppo|ê gruppe}}: $1",
+ "listgrouprights-removegroup": "Leva {{PLURAL:$2|d' 'o gruppo|d' 'e gruppe}}: $1",
+ "listgrouprights-addgroup-all": "Jogne tutt' 'e gruppe",
+ "listgrouprights-removegroup-all": "Leva tutt' 'e gruppe",
+ "listgrouprights-addgroup-self": "Jogne {{PLURAL:$2|'o gruppo|'e gruppe}} a 'o cunto utente mio: $1",
+ "listgrouprights-removegroup-self": "Leva {{PLURAL:$2|'o gruppo|'e gruppe}} 'a 'o cunto utente d' 'o mio: $1",
+ "listgrouprights-addgroup-self-all": "Miette tutt' 'e gruppe ncopp' 'o cunto d' 'o mio",
+ "listgrouprights-removegroup-self-all": "Lèva tutt' 'e gruppe 'a 'o cunto utente d' 'o mio",
+ "listgrouprights-namespaceprotection-header": "Restriziune d' 'o namespace",
+ "listgrouprights-namespaceprotection-namespace": "Namespace",
+ "listgrouprights-namespaceprotection-restrictedto": "Diritto 'e cagnamiento 'e l'utente",
+ "trackingcategories": "Categurìe 'e cuntrollo",
+ "trackingcategories-summary": "Sta paggena elenca 'e categurìe ca stann'automaticamente popolate 'a 'o software Mediawiki. 'E nomme 'e lloro se ponno cagnà quanno se cagnano 'e relative mmasciate 'e sistema dint' 'o namespace {{ns:8}}.",
+ "trackingcategories-msg": "Categurìe 'e cuntrollo",
+ "trackingcategories-name": "Nomme d' 'a mmasciata",
+ "trackingcategories-desc": "Criterie p' 'o miettere dint' 'a categurìa",
+ "noindex-category-desc": "'A paggena nun è indicizzata 'a 'e robot pecché cuntene 'a parola maggica <code><nowiki>__NOINDEX__</nowiki></code> e se trova dint'a nu namespace addò chistu flag è permesso.",
+ "index-category-desc": "'A paggena téne 'o codece <code><nowiki>__INDEX__</nowiki></code> dinto (e se trova dint'a nu namespace addò chistu flag è permesso), e picciò è indicizzata 'a 'e robot, pure si normalmente nun fosse accussì.",
+ "post-expand-template-inclusion-category-desc": "'A dimensione d' 'a paggena è cchiù granne 'e <code>$wgMaxArticleSize</code> aropp'a spannere tutt' 'e template, e picciò cocche template nun se so' spannute.",
+ "post-expand-template-argument-category-desc": "'A paggena sarrà cchiù granne 'e <code>$wgMaxArticleSize</code> aropp' 'avé spannuto 'o parametro 'e nu template (coccosa mmiez'a tre parentesi graffe, cumm'a cchesto: <code>{{{Foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "'A paggena aúsa troppe funziune parser (comme <code>#ifexist</code>). Vedite [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "'A paggena cuntene nu cullegamiento rutto a nu file (nu link ca spontasse a nu file ancora che chisto nun esiste).",
+ "hidden-category-category-desc": "Chista categurìa cuntene <code><nowiki>__HIDDENCAT__</nowiki></code> dint' 'a paggena suja, 'a quale nun permette ca s'ammustasse, predefinitamente, dint' 'o quadretto d' 'e cullegamiente a 'e categurìe d' 'e paggene.",
+ "trackingcategories-nodesc": "Nisciuna descrizione a disposizione.",
+ "trackingcategories-disabled": "'A categurìa è stutata",
+ "mailnologin": "Nisciuno indirizzo pe' mannà 'e mmasciate",
+ "mailnologintext": "Avite 'a [[Special:UserLogin|trasì]] e avè n'indirizzo e-mail valido int' 'e [[Special:Preferences|preferenze]] d' 'e vuoste pe' mannà na mmasciata e-mail a l'ati utente.",
"emailuser": "Email chisto utente",
- "mywatchlist": "osservate speciale",
+ "emailuser-title-target": "Manna n'email a chist'{{GENDER:$1|utente}}",
+ "emailuser-title-notarget": "E-mail 'e l'utente",
+ "emailpage": "E-mail 'e l'utente",
+ "emailpagetext": "Putite ausà 'o modulo ccà abbascio pe' mannà na mmasciata e-mail a st'{{GENDER:$1|utente}}.\nL'indirizzo e-mail ch'avite nzertàto dint' 'e [[Special:Preferences|preferenze vuoste]] accumpararrà dint' 'o campo \"'A\" dint' 'a mmasciata e-mail, accussì chillo ca ricevese 'a mail 'o sape ca v'avess'a risponnere direttamente a vuje.",
+ "defemailsubject": "e-mail 'e {{SITENAME}} 'a l'utente \"$1\"",
+ "usermaildisabled": "L'e-mail utente è stutato",
+ "usermaildisabledtext": "Nun se può mannà n'e-mail a l'at'utente ncopp' 'a sta wiki",
+ "noemailtitle": "Nisciuno indirizzo e-mail",
+ "noemailtext": "St'utente nun ha miso nisciuno indirizzo e-mail valido.",
+ "nowikiemailtext": "St'utente ha scigliuto 'e nun se cuògliere mmasciate e-mail 'a l'at'utente.",
+ "emailnotarget": "Nomme 'e l'utente ca nun esiste o nun è valido.",
+ "emailtarget": "Mettite 'o nomme utente d' 'o destinatario",
+ "emailusername": "Nomme utente:",
+ "emailusernamesubmit": "Manna",
+ "email-legend": "Manna sta mail a n'at'utente 'e {{SITENAME}}",
+ "emailfrom": "'A:",
+ "emailto": "A:",
+ "emailsubject": "Oggetto:",
+ "emailmessage": "Mmasciata:",
+ "emailsend": "Manna",
+ "emailccme": "Manname n'e-mail cu 'na copia d' 'a mmasciata.",
+ "emailccsubject": "Copia d' 'a mmasciata tua 'a $1: $2",
+ "emailsent": "Mmasciata e-mail mannata",
+ "emailsenttext": "'A mmasciata d' 'a toja s'è mannata.",
+ "emailuserfooter": "Chista mmasciata e-mail è stata mannata 'a $1 a $2 p' 'a funziona \"Mmasciata e-mail a l'utente\" 'e {{SITENAME}}.",
+ "usermessage-summary": "Lassanno na mmasciata 'e sistema.",
+ "usermessage-editor": "Mmasciatore d' 'o sistema",
+ "watchlist": "Paggene cuntrullate",
+ "mywatchlist": "Paggene cuntrullate",
"watchlistfor2": "Ppe $1 $2",
+ "nowatchlist": "Nun tiene paggene dint' 'a l'elenco 'e paggene cuntrullate.",
+ "watchlistanontext": "Pe' piacere, trasite pe' vedé o cagnà l'elenco 'e paggene cuntrullate.",
+ "watchnologin": "Acciesso nun affettuato",
+ "addwatch": "Miette dint' 'a l'elenco 'e paggene cuntrullate",
+ "addedwatchtext": "'A paggena \"[[:$1]]\" è stata azzeccata dint'a l'elenco 'e [[Special:Watchlist|paggene cuntrullate]].\n'E cagnamiente future a sta paggena e a tutt' 'e paggene 'e chiacchiera azzeccate sarranno elencate llà dinto.",
+ "addedwatchtext-short": "Chista paggena \"$1\" è stata azzeccata a l'elenco 'e paggene cuntrullate.",
+ "removewatch": "Leva 'a l'elenco 'e paggene cuntrullate",
+ "removedwatchtext": "'A paggena \"[[:$1]]\" è stata scancellata 'a l'elenco [[Special:Watchlist|'e paggene cuntrullate]] tuojo.",
+ "removedwatchtext-short": "Chista paggena \"$1\" è stata luvata a l'elenco 'e paggene cuntrullate.",
"watch": "Secuta",
+ "watchthispage": "Tiene d'uocchio chesta paggena",
"unwatch": "Nun segui",
+ "unwatchthispage": "Nun cuntrullà cchiù sta paggena",
"notanarticle": "Chesta paggena nun è na voce",
+ "notvisiblerev": "'A verzione è stata scancellata",
+ "watchlist-details": "L'elenco 'e paggene cuntrullate cuntene {{PLURAL:$1|na paggena (e pure 'a paggena 'e chiacchiera)|$1 paggene (e pure 'e paggene 'e chiacchiera}}.",
+ "wlheader-enotif": "'A funzione 'e notifiche e-mail è appicciata.",
+ "wlheader-showupdated": "* 'E paggene cca so' state cagnate a l'urdema visita avevano so' nzignate ccà 'n '''grassetto'''.",
+ "wlnote": "Ccà abbascio {{PLURAL:$1|è elencato 'o cagnamiento cchiù ricente|songo elencate 'e <strong>$1</strong> cagnamiente cchiù recente}} {{PLURAL:$2|int'a ll'urdema ora|int' 'e ll'urdeme <strong>$2</strong> ore}}; 'e date songo agghiurnate 'o $3, $4.",
+ "wlshowlast": "Mmusta ll'urdeme $1 ore $2 ghiuorne $3",
+ "watchlist-options": "Opziune 'a l'elenco 'e paggene cuntrullate",
+ "watching": "Cuntrullanno...",
+ "unwatching": "Lassanno 'e cuntrullà...",
+ "watcherrortext": "N'errore s'è verificato quanno se faceva 'o cagnamiento 'e l'elenco 'e paggene cuntrullate pe' \"$1\".",
+ "enotif_reset": "Nzègna tutt' 'e paggene comme visitate",
+ "enotif_impersonal_salutation": "Utente 'e {{SITENAME}}",
+ "enotif_subject_deleted": "'A paggena $1 'e {{SITENAME}} è stata scancellata 'a {{gender:$2|$2}}",
+ "enotif_subject_created": "'A paggena $1 'e {{SITENAME}} è stata criata 'a {{gender:$2|$2}}",
+ "enotif_subject_moved": "'A paggena $1 'e {{SITENAME}} è stata cagnata 'e posto 'a {{gender:$2|$2}}",
+ "enotif_subject_restored": "'A paggena $1 'e {{SITENAME}} è stata arripigliata 'a {{gender:$2|$2}}",
+ "enotif_subject_changed": "'A paggena $1 'e {{SITENAME}} è stata cagnata 'a {{gender:$2|$2}}",
+ "enotif_body_intro_deleted": "'A paggene $1 'e {{SITENAME}} è stata scancellata 'a copp' 'e $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3.",
+ "enotif_body_intro_created": "'A paggena $1 'e {{SITENAME}} è stata criata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+ "enotif_body_intro_moved": "'A paggena $1 'e {{SITENAME}} è stata cagnata 'e posto ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+ "enotif_body_intro_restored": "'A paggena $1 'e {{SITENAME}} è stata arripigliata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+ "enotif_body_intro_changed": "'A paggena $1 'e {{SITENAME}} è stata cagnata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
+ "enotif_lastvisited": "Vedite $1 pe' tutt' 'e cagnamiente 'a ll'urdema visita vuosta.",
+ "enotif_lastdiff": "Vedite $1 pe' vedè stu cagnamiento.",
+ "enotif_anon_editor": "Utente anonimo $1",
+ "enotif_body": "Caro $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiepilego 'e cagnamiente: $PAGESUMMARY $PAGEMINOREDIT\n\nCuntattate l'autore:\ne-mail: $PAGEEDITOR_EMAIL\nncopp' 'o sito: $PAGEEDITOR_WIKI\n\nNun se mannarranno ati notifiche si facite cocch'at'attività senza venì a sta paggena.\nPutite pure cagnà 'e mpustaziune 'e notifeca pe' tutt' 'e paggene cuntrullate dint' 'a l'elenco.\n\nStatteve Bbuon, 'o sistema 'e notifiche ncopp' 'a {{SITENAME}} vuosto\n\n--\nPe' cagnà 'e mpustaziune d' 'e notifiche 'e mmasciate elettroniche, jate ccà: {{canonicalurl:{{#special:Preferences}}}}\n\nPe' cagnà 'e mpustaziune 'e l'elenco 'e paggene cuntrullate vuoste jate ccà: {{canonicalurl:{{#special:EditWatchlist}}}}\n\nPe' scancellà l'elenco 'e paggene cuntrullate vedite $UNWATCHURL\n\nSegnalaziune e at'assistenze:\n$HELPPAGE",
"changed": "cagnata",
"deletepage": "Scancella paggena",
+ "confirm": "Cunferma",
"excontent": "'o cuntenuto era: '$1'",
"excontentauthor": "'o cuntenuto era: '$1' (e ll'unneco cuntribbutore era '[[Special:Contributions/$2|$2]]')",
"exbeforeblank": "'O cuntenuto apprimm' 'a ll'arrevacamento era: '$1'",
+ "delete-confirm": "Scancella \"$1\"",
+ "delete-legend": "Scancella",
+ "historywarning": "'''Attenzione:''' 'A paggena ca state pe' scancellà tene na cronologgia cu $1 {{PLURAL:$1|verzione|verziune}}:",
+ "confirmdeletetext": "Vedite bbuono, vedite ca state a scancellà na paggena nziem' 'a tutt' 'a cronologgia.\nPe' piacere cunfermate si overo vulite fà cchesto, ca ve site fatto/a capace 'e l'effette 'e st'azione e ca chest'azione rispetta 'e [[{{MediaWiki:Policy-url}}|reole 'e scancellamiento]].",
"actioncomplete": "Azzione fernuta",
+ "actionfailed": "Aziona sfalluta",
"deletedtext": "Qauccheruno ha scancellata 'a paggena \"$1\". Addumannà 'o $2 pe na lista d\"e ppaggene scancellate urdemamente.",
"dellogpage": "Scancellazione",
+ "dellogpagetext": "Ccà abbascio sta na lista ch' 'e cchiù recente scancellamiente.",
"deletionlog": "Log d\"e scancellazione",
+ "reverted": "Turnà a 'a verziona cchiù recente",
"deletecomment": "Raggióne",
+ "deleteotherreason": "Ati/cchiù ragiune:",
+ "deletereasonotherlist": "Ati ragiune",
+ "deletereason-dropdown": "*Mutive comune de scancellamiento\n** Spam\n** Vandalisme\n** Violazione d' 'o Copyright\n** Richieste 'e l'autore\n** Redirezionamente scassate",
+ "delete-edit-reasonlist": "Càgna 'e mutive 'e scancellamiento",
+ "delete-toobig": "Sta paggena tene na storia 'e cagnamiente troppo longa, ncopp'a $1 {{PLURAL:$1|verzione|verziune}}.\n'O scancellamiento 'e chiste paggene è stato ristretto pe nce 'e putè astipà si ce sta cocche probblema dint' 'o database 'e {{SITENAME}}.",
+ "delete-warning-toobig": "Sta paggena tene na cronologgia troppo longa, ncopp'a $1 {{PLURAL:$1|verzione|verziune}}.\nScancellannole se putesse crià troppo burdello ncopp' 'e operaziune 'e database dint'a {{SITENAME}};\niate cuoncio cuoncio.",
+ "deleteprotected": "Nun putite scancellà sta paggena pecché è stata prutetta.",
+ "deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|ati paggene]] cunteneno cullegamiente o paggene appennute â n'ata paggena ca state pe' scancellà.",
"rollback": "Ausa na revizione 'e primma",
+ "rollback_short": "Annulla",
"rollbacklink": "a vascio",
+ "rollbacklinkcount": "annulla {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
+ "rollbacklinkcount-morethan": "annulla cchiù 'e {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
+ "rollbackfailed": "Annullamento fallito",
+ "cantrollback": "Nun se può annullà stu cagnamiento;\nsapite ca l'urdemo autore è stato pure sul'isso a faticà dint'a sta paggena (nun ce sta n'at'autore).",
+ "alreadyrolled": "Nun se può turna arreto a l'urdemo cagnamiento [[:$1]] 'a [[User:$2|$2]] ([[User talk:$2|Chiacchiera]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ncocch'ato ha cagnato o annullato 'a paggena già.\n\nL'urdemo cangamiento d' 'a paggena fuje 'a [[User:$3|$3]] ([[User talk:$3|Chiacchiera]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+ "editcomment": "'O riepilego d' 'o cagnamiento era: \"''$1''\".",
"revertpage": "Cangiaje 'e cagnamiénte 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), cu â verzione 'e pprimma 'e [[User:$1|$1]]",
+ "revertpage-nouser": "Annullate 'e cagnamiente 'e n'utente annascunnuto, è stata ripigliata ll'urdema verzione 'e {{GENDER:$1|[[User:$1|$1]]}}",
+ "rollback-success": "Cagnamiente annullate 'a $1;\ns'è turnat arreto a l'urdema verzione 'e $2.",
+ "sessionfailure-title": "Sessione fallita",
+ "sessionfailure": "Pare ca stanno probbleme cu 'a sessiona toja;\nst'azione è stata fermata pe' precauzione annanz' 'e cavall' 'e troia;\nPe' piacere turnate arreto, carrecate n'ata vota 'a paggena pe pruvate n'ata vota.",
+ "protectlogpage": "Riggistro 'e prutezzione",
+ "protectlogtext": "Ccà abbascio sta na lista 'e cagnamiente 'e pruteziune d' 'e paggene.\nVedite 'a [[Special:ProtectedPages|liste d' 'e paggene prutette]] pe n'avé na lista 'e l'operaziune 'e mo ncopp' 'a prutezzione d' 'e paggene.",
"protectedarticle": "ha prutetto \"[[$1]]\"",
+ "modifiedarticleprotection": "'o livello 'e prutezione è stato cagnato pe' \"[[$1]]\"",
+ "unprotectedarticle": "sprutetto 'a \"[[$1]]\"",
+ "movedarticleprotection": "'mpustaziune 'e protezzione spustate 'a \"[[$2]]\" a \"[[$1]]\"",
+ "protect-title": "Cagna 'o livello 'e prutezione pe' \"[[$1]]\"",
+ "protect-title-notallowed": "Fà vedé 'o livello 'e prutezione pe' \"$1\"",
"prot_1movedto2": "ha spustato [[$1]] a [[$2]]",
+ "protect-badnamespace-title": "Namespace nun pruteggibbele",
+ "protect-badnamespace-text": "'E paggene int'a stu namespace nun se ponno pruteggere.",
+ "protect-norestrictiontypes-text": "Sta paggena nun se può pruteggere pecché nun ce sta nisciunu tipo 'e restrizione.",
+ "protect-norestrictiontypes-title": "Namespace nun pruteggibbele",
+ "protect-legend": "Cunferma 'a prutezione",
+ "protectcomment": "Mutivo:",
+ "protectexpiry": "Ammatura:",
+ "protect_expiry_invalid": "'O tiempo d'ammaturamiento è invalido.",
+ "protect_expiry_old": "'O tiempo d'ammaturamiento è passato già.",
+ "protect-unchain-permissions": "Sblocca cchiù opziune 'e prutezione",
+ "protect-text": "Ccà putite vedé e cagnà 'o livello 'e prutezione p' 'a paggena <strong>$1</strong>.",
+ "protect-locked-blocked": "Nun può cagnà 'e livelle 'e prutezione pe' tramente ca staje bluccato.\nCcà abbascio stanno 'e mpustaziune 'e mo p' 'a paggena '''$1''':",
+ "protect-locked-dblock": "'E livelle 'e prutezzione nun se ponno cagnà pecché ce sta nu blocco attivo d' 'o database.\nCcà abbascio stanno 'e mpustaziune 'e mo p' 'a paggena '''$1''':",
+ "protect-locked-access": "C' 'o cunto vuosto nun avite permesso pe' putè cagnà 'e livelle 'e prutezioen d' 'e paggene.\nChiste songh' 'e mpustaziune 'e mo p' 'a paggena '''$1''':",
+ "protect-cascadeon": "P' 'o mumento sta paggena è bloccata pecché sta appennuta dint'a {{PLURAL:$1|paggena scritta ccà abbascio, p' 'a quale|'e paggene scritte ccà abbascio p' 'e quale}} è attiva 'a prutezione ricurziva.\n'E cagnamiente a livello 'e prutezione individuale a uno a uno d' 'a paggena, nun tenerranno effette ncopp' 'e mpustaziune pigliate d' 'o fatto 'e se fà na prutezione ricurziva.",
+ "protect-default": "Permette tutte l'utente",
+ "protect-fallback": "Permette sulamente a l'utente c' 'o permesso \"$1\"",
+ "protect-level-autoconfirmed": "Permette sulamente a l'utente autocunvalidate",
+ "protect-level-sysop": "Permette sulamente a l'ammenistrature",
+ "protect-summary-cascade": "ricurziva",
+ "protect-expiring": "ammatura 'o $1 (UTC)",
+ "protect-expiring-local": "ammatura 'o $1",
+ "protect-expiry-indefinite": "indefinite",
+ "protect-cascade": "Prutegge paggene appennute dint'a sta paggena (spanne 'a prutezione a tutt' 'e paggene appennute ccà).",
+ "protect-cantedit": "Nun è possibbele cagnà 'e livelle e prutezione 'e sta paggena, pecchè nun tenite deritto o permesse pe' ne fà 'o cagnamiento.",
+ "protect-othertime": "N'ata durata:",
+ "protect-othertime-op": "ati durate",
+ "protect-existing-expiry": "'O tiempo d'ammaturamiento esistente: $3, $2",
+ "protect-otherreason": "Ati/cchiù ragiune:",
+ "protect-otherreason-op": "Ati ragiune",
+ "protect-dropdown": "*Mutive 'e prutezione comune\n** Vandalisme eccessive\n** Spam eccessivo\n** 'Uerre 'e cagnamiente controproducente\n** Paggena cu troppo traffeco",
+ "protect-edit-reasonlist": "Càgna 'e mutive 'e prutezione",
"protect-expiry-options": "1 ore:1 hour,1 juorno:1 day,1 semmana:1 week,2 semmane:2 weeks,1 mese:1 month,3 mise:3 months,6 mise:6 months,1 anno:1 year,infinito:infinite",
+ "restriction-type": "Permesse:",
+ "restriction-level": "Livello 'e restrizione:",
+ "minimum-size": "Diminsiune minime:",
+ "maximum-size": "Diminsiune massime:",
+ "pagesize": "(byte)",
+ "restriction-edit": "Càgna",
+ "restriction-move": "Spusta",
+ "restriction-create": "Cria",
+ "restriction-upload": "Carreca",
+ "restriction-level-sysop": "prutetta",
+ "restriction-level-autoconfirmed": "semi-prutetta",
+ "restriction-level-all": "ogne livello",
+ "undelete": "Fà vedé 'e paggene scancellate",
+ "undeletepage": "Fà vedé e arrepiglia 'e paggene scancellate",
+ "undeletepagetitle": "'''Ccà abbascio ce stanno 'e verziune scancellate 'e [[:$1|$1]]'''.",
"viewdeletedpage": "Vìre 'e ppàggine scancellate",
+ "undeletepagetext": "{{PLURAL:$1|'A paggena ccà abbascio è stata scancellata però|$1 paggene ccà abbascio so' state scancellate però}} stann'ancora dint' 'a l'archivio e se ponno arrepiglià.<br />\nL'archivie s'hanna pulezzà periodicamente.",
+ "undelete-fieldset-title": "Arrepiglia verziune",
+ "undeleteextrahelp": "P'arrepiglià 'a cronologgia completa d' 'a paggena, lassate 'e cascie abbacante e facite click ncopp'a '''''{{int:undeletebtn}}'''''.\nPe' putè arrepiglià selettivamente, miette nu zegno ncopp' 'e casciulele currispunnente a 'e verziune ca vulite arripiglià e po' facite click ncopp'a '''''{{int:undeletebtn}}'''''.",
+ "undeleterevisions": "$1 {{PLURAL:$1|verzione|verziune}} archiviate",
+ "undeletehistory": "Si arrepiglie 'a paggena, tutte 'e verziune sarrann'arrepigliate nziem'a chista.\nSi na paggena nova c' 'o stesso nomme è stata criata 'a che s'è fatto 'o scancellamiento, 'e verziune arripigliate cumparerranno comme cchiù viecchie dint' 'a cronologgia.",
+ "undeleterevdel": "L'arripiglio nun sarrà affettuato si determina 'o scancellamiento parziale d' 'a verzione 'e mo d' 'a paggena o file.\nInt'a sti case, avite 'e smarcà o annasconnere 'e verziune scancellate cchiù nove.",
+ "undeletehistorynoadmin": "Sta paggena è stata scancellata.\n'O mutivo d' 'o scancellamiento 'o truvate scritto dint' 'a 'o riepilego ccà abbascio, nzieme ch' 'e dettaglie 'e l'utente c'hanno cagnato sta paggena apprimma 'e se fà 'o scancellamiento.\n'O testo 'e mo 'e sti verziune è disponibbele sulamente a l'ammenistrature.",
+ "undelete-revision": "Verziune scancellata 'a $1 (comme 'e $4, a $5) 'a $3:",
+ "undeleterevision-missing": "Verziona invalida o mancante.\nPutisseve avé nu cullegamiento sbagliato o 'a verzione, può darse, ca fosse arrepigliata o scancellata 'e l'archivio.",
+ "undelete-nodiff": "Nun s'è truvata nisciuna verzione 'e primma.",
+ "undeletebtn": "Arrepiglia",
+ "undeletelink": "vide/arrepiglia",
"undeleteviewlink": "vere",
+ "undeleteinvert": "Abbarruca 'a sceveta",
+ "undeletecomment": "Mutivo:",
+ "undeletedrevisions": "{{PLURAL:$1|1 verzione|$1 verziune}} arrepigliate",
+ "undeletedrevisions-files": "{{PLURAL:$1|1 verzione|$1 verziune}} e {{PLURAL:$2|1 file|$2 file}} arrepigliate",
+ "undeletedfiles": "{{PLURAL:$1|1 file arrepigliato|$1 file arrepigliate}}",
+ "cannotundelete": "Arrepiglio fallito:\n$1",
+ "undeletedpage": "'''$1 è stat'arrepigliato'''\n\nLiggiete 'o [[Special:Log/delete|riggistro 'e scancellamiente]] pe n'avé n'elenco 'e l'urdeme scancellamiente e arrepiglie.",
+ "undelete-header": "Vedite [[Special:Log/delete|'o riggistro 'e scancellamiente]] pe l'urdeme paggene scancellate",
+ "undelete-search-title": "Ascìa dint' 'e paggene scancellate",
+ "undelete-search-box": "Ascìa dint' 'e paggene scancellate",
+ "undelete-search-prefix": "Fà vedè 'e paggene c'accumencieno cu:",
+ "undelete-search-submit": "Truova",
+ "undelete-no-results": "Nun ce stanno paggene asciate ca se truvassero dint' 'o riggistro 'e scancellamiento.",
+ "undelete-filename-mismatch": "Nun se può arrepiglià 'a verzione d' 'o file cu l'orario $1: nomme d' 'o file errato",
+ "undelete-bad-store-key": "Nun se può arrepiglià 'a verzione d' 'o file cu orario $1: 'o file è stato sperduto apprimma d' 'o scancellamiento.",
+ "undelete-cleanup-error": "Errore scancellanno n'archivio 'e file nun ausate \"$1\".",
+ "undelete-missing-filearchive": "Non se può arrepiglià l'archivie cu l'ID $1 pecché nun ce stanno dint' 'o database.\nPò darse ca songo già state arrepigliate.",
+ "undelete-error": "Errore quanno s'arrepigliava na paggena",
+ "undelete-error-short": "Errore quanno s'arrepigliava na paggena: $1",
+ "undelete-error-long": "Errore quanno s'arrepigliava na paggena:\n\n$1",
+ "undelete-show-file-confirm": "Site sicuro/a ca vulite veré 'a verziona scancellata d' 'o file \"<nowiki>$1</nowiki>\" d' 'o $2 a 'e $3?",
+ "undelete-show-file-submit": "Sì",
"namespace": "Namespace:",
"invert": "abbarruca 'a sceveta",
+ "tooltip-invert": "Nzegna sta casciulella p'annaconnere 'e cagnamiente a 'e paggene ca stanno dint' 'o namespace c'avite scigliuto (e 'o namespace stesso si l'avite scigliuto)",
+ "namespace_association": "Namespace associate",
+ "tooltip-namespace_association": "Nzegna sta casciulella pe ncludere 'e cchiacchiere o l'oggetto d' 'o namespace associato c' 'o namespace scigliuto",
"blanknamespace": "(Prencepale)",
"contributions": "Contribbute {{GENDER:$1|utente}}",
+ "contributions-title": "Cuntribbute 'a l'utente pe' $1",
"mycontris": "'E ffatiche d''e mmeje",
"contribsub2": "Ppe {{GENDER:$3|$1}} ($2)",
+ "contributions-userdoesnotexist": "'O cunto utente \"$1\" nun è riggistrato.",
+ "nocontribs": "Nisciunu cagnamiento è stato truvato cu sti criterie.",
"uctop": "(attuale)",
"month": "D\"o mese (e primma):",
"year": "'E ll'anno (e primma):",
"sp-contributions-newbies": "Mosta solo 'e contribbute dde nove utente",
+ "sp-contributions-newbies-sub": "Pe' l'utente nuove",
+ "sp-contributions-newbies-title": "Contribbute 'a l'utente nuove",
"sp-contributions-blocklog": "blocche",
"sp-contributions-suppresslog": "contribbute utente scancellate",
+ "sp-contributions-deleted": "contribbute d'utente scancellate",
+ "sp-contributions-uploads": "carreche",
"sp-contributions-logs": "registre",
"sp-contributions-talk": "Chiàcchiera",
+ "sp-contributions-userrights": "gestione d' 'e permesse 'e l'utente",
+ "sp-contributions-blocked-notice": "St'utente è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
+ "sp-contributions-blocked-notice-anon": "St'IP è bloccato mò.\nL'urdemo elemento d' 'o riggistro 'e blocche è ripurtato ccà abbascio p'avé nu riferimento:",
+ "sp-contributions-search": "Ascìa 'e contribbute",
"sp-contributions-username": "Nnerizzo IP o nomme utente",
+ "sp-contributions-toponly": "Facenno vedé sulamente 'e contribbute 'e l'urdeme verziune",
+ "sp-contributions-newonly": "Facenno vedé sulamente 'e contribbute ca songo criazione 'e paggene",
"sp-contributions-submit": "Truova",
"whatlinkshere": "Paggene ca cullegano a chesta",
"whatlinkshere-title": "Paggene ca cullegano a $1",
"whatlinkshere-page": "Paggena:",
- "nolinkshere": "Nisciuna paggena cuntene jonte ca mpuntano a '''[[:$1]]'''.",
+ "linkshere": "'E paggene ccà abbascio cunteneno jonte ca spuntano a '''[[:$1]]'''.",
+ "nolinkshere": "Nisciuna paggena cuntene jonte ca spuntasse a <strong>[[:$1]]</strong>.",
+ "nolinkshere-ns": "Nun ce stanno paggene ca spuntassero '''[[:$1]]''' dint' 'o namespace scigliuto.",
"isredirect": "redirect a paggena",
"istemplate": "'nclusione",
"isimage": "Cullegamente a file multimediale",
+ "whatlinkshere-prev": "{{PLURAL:$1|apprima|apprime $1}}",
+ "whatlinkshere-next": "{{PLURAL:$1|appriesso|$1 appriesso}}",
"whatlinkshere-links": "← jonte",
"whatlinkshere-hideredirs": "$1 redirects",
"whatlinkshere-hidetrans": "$1 'nclusione",
"whatlinkshere-hidelinks": "$1 jonte",
"whatlinkshere-hideimages": "$1 links ddo file",
"whatlinkshere-filters": "Filtre",
- "blockip": "Ferma utelizzatóre",
+ "autoblockid": "Autoblocco #$1",
+ "block": "Blocca l'utente",
+ "unblock": "Sblocca l'utente",
+ "blockip": "Blocca {{GENDER:$1|utente}}",
+ "blockip-legend": "Blocca l'utente",
+ "blockiptext": "Ausa 'o modulo ccà abbascio pe' bluccà l'acciesso 'e scrittura a n'indirizzo IP o utente.\nChisto s'avesse 'a ffà sulamente pe' se pruteggere d' 'o vandalismo, d'accordo ch' [[{{MediaWiki:Policy-url}}|'e reole]].\nMettite pure nu mutivo specifico ccà abbascio (p'esempio, facenno 'o nomme 'e paggene addò se so' fatte 'e vandalisme).",
"ipaddressorusername": "Nnerizzo IP o nomme utente",
+ "ipbexpiry": "Ammatura:",
+ "ipbreason": "Mutivo:",
+ "ipbreason-dropdown": "* Mutive comune pe' ffà 'o blocco\n** Steva nzertanno nfurmaziune fauze\n** Steva a luvà cuntenute d' 'e paggene\n** Steva a fà spam 'e cullegamiente a 'e site 'e fore\n** Steva a nzertà robbe senza senso dint' 'e paggene\n** Minacce e ntimidaziune\n** Abbuso 'e cunte utente multiple\n** Nomme utente inaccettabbele",
+ "ipb-hardblock": "Nun permettere 'o cagnamiento a l'utente riggistrate ca veneno 'a st'indirizzo IP",
+ "ipbcreateaccount": "Nun fà crià 'o cunto",
+ "ipbemailban": "Blocca utente a mannà e-mail",
+ "ipbenableautoblock": "Automaticamende blocca l'urdeme indirizze IP ausate 'a st'utente, e pure tutte l'IP c'ausasse pe' pruvà 'e fà ati cagnamiente",
+ "ipbsubmit": "Blocca st'utente",
+ "ipbother": "N'ata durata:",
"ipboptions": "2 ore:2 hours,1 juorno:1 day,3 juorne:3 days,1 semmana:1 week,2 semmane:2 weeks,1 mise:1 month,3 mese:3 months,6 mese:6 months,1 anno:1 year,infinito:infinite",
+ "ipbhidename": "Annascunne 'o nomme utente d' 'a lista 'e cagnamiente e l'ati liste",
+ "ipbwatchuser": "Fà vedé 'a paggena utente e le chiacchieriate 'e st'utente",
+ "ipb-disableusertalk": "Nun permettere a st'utente edità 'a paggena 'e chiacchiera d' 'a soja pe' tramente ch'e bloccato",
+ "ipb-change-block": "Blocca n'ata vota l'utente cu sti mpustaziune",
+ "ipb-confirm": "Cunferma 'o blocco",
+ "badipaddress": "Indirizzo IP nun valido",
"blockipsuccesssub": "Blocco aseguito",
+ "blockipsuccesstext": "[[Special:Contributions/$1|$1]] è stato bloccato.<br />\nVedite [[Special:BlockList|'a lista 'e l'IP bloccate]] pe' fà vedé n'ata vota 'e blocche.",
+ "ipb-blockingself": "Vuje ve state a bluccà da solo! Site sicuro ca 'o vulite fà?",
+ "ipb-confirmhideuser": "State a bluccà n'utente cu l'opzione \"annascunne utente\" appicciata. St'operazione può luvà 'o nomme 'e l'utente a dint' 'a tutte l'elenche e riggistre. Site sicuro/a ca vulite fà chesto?",
+ "ipb-confirmaction": "Si site sicuro 'e fa chesto overo, cuntrullate 'o campo \"{{int:ipb-confirm}}\" ccà abbascio.",
+ "ipb-edit-dropdown": "Cagna 'e mutive d' 'o blocco",
+ "ipb-unblock-addr": "Sblocca $1",
+ "ipb-unblock": "Sblocca nomme utente o indirizzo IP",
+ "ipb-blocklist": "Fà vedé 'e blocche ch'esisteno",
+ "ipb-blocklist-contribs": "Contribbute 'e {{GENDER:$1|$1}}",
+ "unblockip": "Sblocca utente",
+ "unblockiptext": "Ausa 'o modulo ccà abbascio p'arrepiglià 'e deritte 'e scrittura a l'indirizze IP o cunte utente ca primma so state bluccate.",
+ "ipusubmit": "Lèva stu blocco",
+ "unblocked": "[[User:$1|$1]] è stato sbloccato.",
+ "unblocked-range": "$1 è stato sbloccato",
+ "unblocked-id": "'O blocco $1 è stato luvato.",
+ "blocklist": "Utente bloccate",
"ipblocklist": "Utenti bloccate",
+ "ipblocklist-legend": "Ascìa n'utente bloccato",
+ "blocklist-userblocks": "Annascunne 'e blocche 'e l'utente riggistrate",
+ "blocklist-tempblocks": "Annascunne 'e blocche temporanee",
+ "blocklist-addressblocks": "Annascunne 'e blocche 'e n'IP sola",
+ "blocklist-rangeblocks": "Annascunne 'e ntervalle 'e blocche",
+ "blocklist-timestamp": "Data e ora",
+ "blocklist-target": "Destinazione",
+ "blocklist-expiry": "Ammatura",
+ "blocklist-by": "Ammenistratore ca 'o bluccaje",
+ "blocklist-params": "Parametre d' 'o blocco",
+ "blocklist-reason": "Mutivo",
+ "ipblocklist-submit": "Ascìa",
+ "ipblocklist-localblock": "Blocco lucale",
+ "ipblocklist-otherblocks": "Ati {{PLURAL:$1|blocche|blocche}}",
+ "infiniteblock": "indefinito",
+ "expiringblock": "ammatura 'o $1 a 'e $2",
+ "anononlyblock": "sulamente l'anonime",
+ "noautoblockblock": "autoblocco stutato",
+ "createaccountblock": "riggistrazione 'e cunte stutata",
+ "emailblock": "mmasciate e-mail stutate",
+ "blocklist-nousertalk": "nun può cagnà 'a paggena 'e chiacchiera d' 'a soja",
+ "ipblocklist-empty": "'A lista 'e blocche è abbacante.",
+ "ipblocklist-no-results": "L'indirizzo IP o nomme utente c'asciate nun songo bloccate.",
"blocklink": "ferma",
"unblocklink": "sblocca",
"change-blocklink": "càgna blocco",
"contribslink": "contribuzzione",
+ "emaillink": "manna e-mail",
+ "autoblocker": "Autobloccate pecché l'indirizze IP vuosto è stat'ausato urdemamente 'a \"[[User:$1|$1]]\".\n'O mutivo d' 'o blocco 'e $1 è \"$2\"",
"blocklogpage": "Blocche",
"blocklogentry": "ha fermato \"[[$1]]\" pe' nu mumento 'e $2 $3",
"blocklogtext": "Chesta è 'a lista d''e azzione 'e blocco e sblocco utente. 'E nnerizze IP bloccate automaticamente nun nce so'. Addumannà 'a [[Special:BlockList|lista bloccate]] pp' 'a lista d''e nnerizze e nomme utente 'o ca blocco nce sta.",
"articleexists": "Na paggena cu chisto nomme asiste già, o pure 'o nomme scegliuto nun è buono. Scegliere n'ato titulo.",
"movelogpage": "Spustamente",
"movereason": "Raggióne",
- "revertmove": "ripristina",
+ "revertmove": "arrepiglia",
"delete_and_move": "Scancèlla e spusta",
"delete_and_move_confirm": "Sì, suprascrivi 'a paggena asistente",
"export": "Spurta 'e ppaggene",
"invalidtitle-knownnamespace": "Ugyldig tittel med navnerommet «$2» og teksten «$3»",
"invalidtitle-unknownnamespace": "Ugyldig tittel med ukjent navneromsnummer $1 og teksten «$2»",
"exception-nologin": "Ikke innlogget",
- "exception-nologin-text": "[[Special:Userlogin|Logg inn]] for å kunne se siden eller utføre denne handlingen.",
+ "exception-nologin-text": "Logg inn for å kunne se siden eller utføre denne handlingen.",
"exception-nologin-text-manual": "Du må $1 for å få tilgang til denne siden eller handlingen.",
"virus-badscanner": "Feilkonfigurasjon: Ukjent virusskanner: ''$1''",
"virus-scanfailed": "skanning mislyktes (kode $1)",
"userlogin-resetlink": "Har du glemt påloggingsdetaljene dine?",
"userlogin-resetpassword-link": "Glemt passordet?",
"userlogin-helplink2": "Hjelp med innlogging",
- "userlogin-loggedin": "Du er allerede logget inn som {{GENDER:$1|$1}}.\nBruk skjemaet nedenfor for å logge inn som en annen bruker.",
- "userlogin-createanother": "Opprett ny konto",
"createacct-emailrequired": "E-postadresse",
"createacct-emailoptional": "E-postadresse (valgfritt)",
"createacct-email-ph": "Skriv inn e-postadressen din",
"parser-template-recursion-depth-warning": "Mal er brukt for mange ganger ($1)",
"language-converter-depth-warning": "Dybdegrense for språkkonvertering overskredet ($1)",
"node-count-exceeded-category": "Sider hvor antallet noder er overskredet",
- "node-count-exceeded-category-desc": "En kategori for sider der antallet noder er overskredet.",
- "node-count-exceeded-warning": "Siden har overskredet antallet noder",
+ "node-count-exceeded-category-desc": "Siden overskriver maksimalt nodeantall.",
+ "node-count-exceeded-warning": "Siden overskred nodeantallet",
"expansion-depth-exceeded-category": "Sider hvor ekspansjonsdybden er overskredet",
- "expansion-depth-exceeded-category-desc": "Dette er en kategori for sider hvor ekspansjonsdybden er overskredet.",
+ "expansion-depth-exceeded-category-desc": "Siden overskrider maksimal utvidingsdybde.",
"expansion-depth-exceeded-warning": "Sida har overskredet ekspansjonsdybden",
"parser-unstrip-loop-warning": "«Unstrip»-loop påvist",
"parser-unstrip-recursion-limit": "Rekursjonsgrense for taggfjerning overskredet ($1)",
"preferences": "Innstillinger",
"mypreferences": "Innstillinger",
"prefs-edits": "Antall redigeringer:",
- "prefsnologintext2": "Vennligst $1 å endre dine preferanser.",
+ "prefsnologintext2": "Logg inn for å endre innstillingene dine.",
"prefs-skin": "Utseende",
"skin-preview": "Forhåndsvisning",
"datedefault": "Ingen foretrukket",
"randomincategory": "Tilfeldig side innenfor kategorien",
"randomincategory-invalidcategory": "«$1» er ikke et gyldig kategorinavn.",
"randomincategory-nopages": "Det finnes ingen sider i [[:Category:$1|$1]]-kategorien.",
+ "randomincategory-category": "Kategori:",
+ "randomincategory-legend": "Tilfeldig side i kategori",
"randomredirect": "Tilfeldig omdirigering",
"randomredirect-nopages": "Det er ingen omdirigeringer i navnerommet $1.",
"statistics": "Statistikk",
"trackingcategories-desc": "Kategori-inklusjonskriterium",
"noindex-category-desc": "Denne siden indekseres ikke av roboter fordi den er merket med det magiske ordet <code><nowiki>__NOINDEX__</nowiki></code> og er i navnerom der dette flagget tillates.",
"index-category-desc": "Denne siden er påført det magiske ordet <code><nowiki>__INDEX__</nowiki></code> (og er i et navnerom hvor flagget er tillatt), og vil derfor bli indeksert av roboter selv når det normalt ikke ville skjedd.",
- "post-expand-template-inclusion-category-desc": "Etter ekspandering av alle malene ble siden større enn <code>$wgMaxArticleSize</code>, så noen maler kunne ikke ekspanderes.",
- "post-expand-template-argument-category-desc": "Etter ekspandering av et malargument (noe i trippel krøllparentes, slik som <code>{{{Foo}}})</code>, så er siden større en <code>$wgMaxArticleSize</code>.",
- "expensive-parserfunction-category-desc": "For mange kostbare parserfunksjoner (som <code>#ifexist</code>) er inkludert på en side. Se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
- "broken-file-category-desc": "Kategorien blir lagt til hvis siden inneholder en brutt fil-lenke (en lenke for å bygge inn en fil når filen selv ikke eksisterer).",
- "hidden-category-category-desc": "Dette er en kategori merket med <code><nowiki>__HIDDENCAT__</nowiki></code>, som hindrer den fra å vises i siders kategorioversikt som standard.",
+ "post-expand-template-inclusion-category-desc": "Sidestørrelsen er større enn <code>$wgMaxArticleSize</code> etter at alle maler er utvidet, så noen maler ble ikke utvidet.",
+ "post-expand-template-argument-category-desc": "Siden er større enn <code>$wgMaxArticleSize</code> etter utvidelse av et malargument (noe i tre krøllparenteser, som <code>{{{foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "Siden bruker for mange dyre parserfunksjoner (som <code>#ifexist</code>). Se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "Siden inneholder en ødelagt lenkefil (en lenke for å bygge inn en fil når filen ikke eksisterer).",
+ "hidden-category-category-desc": "Kategorien inneholder <code><nowiki>__HIDDENCAT__</code></nowiki> i sideinnholdet, hvilket gjør at den som standard ikke vises i kategorilisten på sider.",
"trackingcategories-nodesc": "Ingen beskrivelse er tilgjengelig",
"trackingcategories-disabled": "Kategorien er deaktivert",
"mailnologin": "Ingen avsenderadresse",
"mywatchlist": "Overvåkningsliste",
"watchlistfor2": "For $1 $2",
"nowatchlist": "Du har ingenting i overvåkningslisten.",
- "watchlistanontext": "Vennligst $1 for å vise eller redigere sider på overvåkningslisten din.",
+ "watchlistanontext": "Logg inn for å vise eller redigere elementer på overvåkningslisten din.",
"watchnologin": "Ikke logget inn",
"addwatch": "Legg til i overvåkningslisten",
"addedwatchtext": "Siden «[[:$1]]» er lagt til [[Special:Watchlist|overvåkningslisten]] din.\nFremtidige endringer til denne siden og den tilhørende diskusjonssiden blir listet opp der.",
"unwatchthispage": "Fjerner overvåkning",
"notanarticle": "Ikke en artikkel",
"notvisiblerev": "Revisjonen er slettet",
- "watchlist-details": "{{PLURAL:$1|Én side|$1 sider}} på din overvåkningsliste, teller ikke diskusjonssider.",
+ "watchlist-details": "Du har {{PLURAL:$1|én side|'''$1''' sider}} på [[Hjelp:Overvåke sider|overvåkningslisten]] din (pluss tilhørende [[Hjelp:Diskusjonsside|diskusjonssider]]).",
"wlheader-enotif": "E-postvarsling er slått på.",
- "wlheader-showupdated": "Sider som har blitt forandret siden du sist besøkte dem vises i '''fet tekst'''",
+ "wlheader-showupdated": "Sider som har blitt endret siden du besøkte dem sist vises med '''fet skrift'''.",
"wlnote": "Nedenfor er {{PLURAL:$1|den siste endringen|de siste <strong>$1</strong> endringene}} {{PLURAL:$2|den siste timen|de siste <strong>$2</strong> timene}}, per $3 kl. $4",
"wlshowlast": "Vis siste $1 timer $2 dager $3",
"watchlist-options": "Alternativ for overvåkningslisten",
"exbeforeblank": "innholdet før siden ble tømt var: «$1»",
"delete-confirm": "Slett «$1»",
"delete-legend": "Slett",
- "historywarning": "Advarsel: Siden du er i ferd med å slette har en historikk med omtrent {{PLURAL:$1|én revisjon|$1 revisjoner}}:",
+ "historywarning": "<strong>Advarsel:</strong> Siden du er i ferd med å slete har en historikk med $1 {{PLURAL:$1|revisjon|revisjoner}}:",
"confirmdeletetext": "Du holder på å slette en side sammen med historikken.\nBekreft at du virkelig vil slette denne siden, at du forstår konsekvensene og at du gjør det i samsvar med [[{{MediaWiki:Policy-url}}|retningslinjene]].",
"actioncomplete": "Gjennomført",
"actionfailed": "Handling mislyktes",
"delete-edit-reasonlist": "Rediger begrunnelser for sletting",
"delete-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1 revisjon|$1 revisjoner}}. Muligheten til å slette slike sider er begrenset for å unngå utilsiktet forstyrring av {{SITENAME}}.",
"delete-warning-toobig": "Denne siden har en stor redigeringshistorikk, med over {{PLURAL:$1|$1 revisjon|$1 revisjoner}}. Sletting av denne siden kan forstyrre databasen til {{SITENAME}}; vær varsom.",
+ "deleteprotected": "Du kan ikke slette denne siden fordi den er beskyttet.",
"deleting-backlinks-warning": "'''Advarsel:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Andre sider]] lenker til eller inkluderer siden du er i ferd med å slette.",
"rollback": "Fjern redigeringer",
"rollback_short": "Tilbakestill",
"autoblockid": "Autoblokker #$1",
"block": "Blokker bruker",
"unblock": "Fjern blokkering av bruker",
- "blockip": "Blokker bruker",
+ "blockip": "Blokker {{GENDER:$1|bruker}}",
"blockip-legend": "Blokker bruker",
"blockiptext": "Bruk skjemaet under for å blokkere en IP-adresses tilgang til å redigere artikler. Dette må kun gjøres for å forhindre hærverk, og i overensstemmelse med [[{{MediaWiki:Policy-url}}|retningslinjene]]. Fyll ut en spesiell begrunnelse under.",
"ipaddressorusername": "IP-adresse eller brukernavn",
"ipb-unblock-addr": "Avblokker $1",
"ipb-unblock": "Avblokker et brukernavn eller en IP-adresse",
"ipb-blocklist": "Vis gjeldende blokkeringer",
- "ipb-blocklist-contribs": "Bidrag fra $1",
+ "ipb-blocklist-contribs": "Bidrag fra {{GENDER:$1|$1}}",
"unblockip": "Opphev blokkering",
"unblockiptext": "Bruk skjemaet under for å gjenopprette skriveadgangen for en tidligere blokkert adresse eller bruker.",
"ipusubmit": "Opphev blokkering",
"import": "Importer sider",
"importinterwiki": "Transwiki-importering",
"import-interwiki-text": "Velg en wiki og en side å importere. Revisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].",
+ "import-interwiki-sourcewiki": "Kildewiki:",
+ "import-interwiki-sourcepage": "Kildeside:",
"import-interwiki-history": "Kopier all historikk for denne siden",
"import-interwiki-templates": "Inkluder alle maler",
"import-interwiki-submit": "Importer",
"log-name-pagelang": "Endre språklogg",
"log-description-pagelang": "Dette er en logg som viser endringer i sidespråk",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|endret}} sidespråk for $3 fra $4 til $5.",
- "default-skin-not-found": "Ops! Standarddrakten for wikien din (<code>$wgDefaultSkin</code>), <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din inkluderer følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du an slå det på og velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet.\n:* Prøv å installere flere drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.orgs draktbase]\n:* Last ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger automatisk på installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre>$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbeltsjekk draktnavnene for skrivefeil.",
+ "default-skin-not-found": "Ops! Standarddrakten for wikien din (<code>$wgDefaultSkin</code>), <code>$1</code>, er ikke tilgjengelig.\n\nInstallasjonen din ser ut til å inneholde følgende drakter. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for informasjon om hvordan du kan slå disse på eller heller velge en standarddrakt.\n\n$2\n\n; Om du nettopp har installert MediaWiki:\n: Du har trolig installert fra git, eller direkte fra kildekoden med en annen metode. Dette er forventet. Prøv å installere noen drakter fra [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org sin draktbase] ved å\n:* laste ned [https://www.mediawiki.org/wiki/Download tarball-installereren], som kommer med flere drakter og utvidelser. Du kan kopiere og lime inn <code>skins/</code>-mappen fra denne.\n:* klone en av <code>mediawiki/skins/*</code>-lagrene via git inn i <code>skins/</code> -mappen av din MediaWiki-installasjon.\n: Å gjøre dette skal ikke forstyrre git-mappen din om du er en MediaWiki-utvikler.\n\n; Om du nettopp har oppgradert MediaWiki:\n: MediaWiki 1.24 og nyere slår ikke lenger på automatisk installerte drakter (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Du kan lime inn følgende linjer i <code>LocalSettings.php</code> for å slå på alle installerte drakter:\n\n<pre>$3</pre>\n\n; Om du nettopp har endret <code>LocalSettings.php</code>:\n: Dobbelsjekk draktnavnene for skrivefeil.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (slått på)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''slått av''')"
}
"userlogin-resetlink": "Bent u uw aanmeldgegevens vergeten?",
"userlogin-resetpassword-link": "Wachtwoord vergeten?",
"userlogin-helplink2": "Hulp bij aanmelden",
- "userlogin-loggedin": "U bent al aangemeld als {{GENDER:$1|$1}}.\nGebruik het onderstaande formulier om aan te melden als een andere gebruiker.",
- "userlogin-createanother": "Een andere account aanmaken",
"createacct-emailrequired": "E-mailadres",
"createacct-emailoptional": "E-mailadres (optioneel)",
"createacct-email-ph": "Geef uw e-mailadres op",
"linksearch-pat": "Zoekpatroon:",
"linksearch-ns": "Naamruimte:",
"linksearch-ok": "Zoeken",
- "linksearch-text": "Wildcards zoals \"*.wikipedia.org\" of \"*.org\" zijn toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\"als er geen protocol wordt opgegeven).",
+ "linksearch-text": "Wildcards zoals \"*.wikipedia.org\" of \"*.org\" zijn toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\" als er geen protocol wordt opgegeven).",
"linksearch-line": "$1 heeft een koppeling in $2",
"linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.",
"listusersfrom": "Gebruikers bekijken vanaf:",
"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|geupload}}",
- "logentry-upload-overwrite": "$1 heeft een nieuwe versie van $3 {{GENDER:$2|geupload}}",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|heeft}} een nieuwe versie van $3 geüpload",
"logentry-upload-revert": "$1 heeft $3 {{GENDER:$2|geupload}}",
"rightsnone": "(geen)",
"feedback-bugornote": "Als u zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met uw gebruikersnaam en de browser die u gebruikt.",
"randomincategory": "Tilfeldig side frå kategori",
"randomincategory-invalidcategory": "«$1» er ikkje eit gildt kategorinamn.",
"randomincategory-nopages": "Det er ingen sider i kategorien [[:Category:$1|$1]].",
- "randomincategory-selectcategory": "Hent tilfeldig side frå kategori: $1 $2.",
- "randomincategory-selectcategory-submit": "Hent",
"randomredirect": "Tilfeldig omdirigering",
"randomredirect-nopages": "Det finst ingen omdirigeringar i namnerommet «$1».",
"statistics": "Statistikk",
"whatlinkshere-filters": "Filter",
"autoblockid": "Autoblokker #$1",
"block": "Blokker brukar",
- "unblock": "Opphev blokkeringa av brukaren",
+ "unblock": "Opphev blokkering av brukar",
"blockip": "Blokker brukar",
"blockip-legend": "Blokker brukar",
"blockiptext": "Bruk skjemaet nedanfor for å blokkere skrivetilgangen frå ei spesifikk IP-adresse eller brukarnamn. Dette bør berre gjerast for å hindre hærverk, og i samsvar med [[{{MediaWiki:Policy-url}}|retningslinene]].",
"import": "Importer sider",
"importinterwiki": "Transwikiimport",
"import-interwiki-text": "Vel ei wiki og ei side å importere. Endringssdatoer og brukarar som har medverka vert bevart. Alle transwiki-importeringar vert vist i [[Special:Log/import|importloggen]].",
- "import-interwiki-source": "Kjeldewiki/sida:",
"import-interwiki-history": "Kopier all historikken for denne sida",
"import-interwiki-templates": "Inkluder alle malar",
"import-interwiki-submit": "Importer",
"tog-watchdefault": "Apondre las paginas que modifiqui e los fichièrs qu'impòrti a ma lista de seguiment",
"tog-watchmoves": "Apondre las paginas e los fichièrs que tòrni nomenar a ma lista de seguiment",
"tog-watchdeletion": "Apondre las paginas e los fichièrs que suprimissi de ma lista de seguiment",
+ "tog-watchrollback": "Apondre a ma lista de seguiment las paginas sus las qualas ai efectuat una revocacion",
"tog-minordefault": "Considerar mas modificacions coma menoras per defaut",
"tog-previewontop": "Far veire la previsualizacion al dessús de la zòna de modificacion",
"tog-previewonfirst": "Far veire la previsualizacion al moment de la primièra edicion",
"jumptonavigation": "navigacion",
"jumptosearch": "Recercar",
"view-pool-error": "O planhèm, los servidors son subrecargats pel moment.\nTròp d’utilizaires cercan a accedir a aquesta pagina.\nEsperatz un moment abans d'ensajar d’accedir a aquesta pagina.\n\n$1",
+ "generic-pool-error": "O planhèm, los servidors son subrecargats pel moment.\nTròp d’utilizaires ensajan de consultar aquesta ressorsa.\nEsperatz un moment abans d'ensajar d’accedir a aquesta pagina.",
"pool-timeout": "Relambi depassat pendent l'espèra del varrolh",
"pool-queuefull": "La fila de trabalh es plena",
"pool-errorunknown": "Error desconeguda",
+ "pool-servererror": "Lo servici de comptatge de la reserva es pas disponible ($1).",
"aboutsite": "A prepaus de {{SITENAME}}",
"aboutpage": "Project:A prepaus",
"copyright": "Lo contengut es disponible jos licéncia $1 levat mencion contrària.",
"hidetoc": "amagar",
"collapsible-collapse": "Rebatre",
"collapsible-expand": "Desplegar",
+ "confirmable-confirm": "Sètz segur{{GENDER:||a|(a)}} ?",
"confirmable-yes": "Òc",
"confirmable-no": "Non",
"thisisdeleted": "Desiratz afichar o restablir $1?",
"userlogin-resetlink": "Avètz doblidat vòstres detalhs de connexion ?",
"userlogin-resetpassword-link": "Senhal doblidat ?",
"userlogin-helplink2": "Ajuda a la connexion",
- "userlogin-loggedin": "Sètz ja connectat en tant que {{GENDER:$1|$1}}.\nUtilizatz lo formulari çaijós per vos connectar amb un autre utilizaire.",
- "userlogin-createanother": "Crear un autre compte",
"createacct-emailrequired": "Adreça electronica",
"createacct-emailoptional": "Adreça de corrièr electronic (facultativa)",
"createacct-email-ph": "Entratz vòstra adreça de corrièr electronic",
"resetpass-submit-cancel": "Anullar",
"resetpass-wrong-oldpass": "Senhal actual o temporari invalid.\nBenlèu ja avètz modificat vòstre senhal o demandat un senhal temporari novèl.",
"resetpass-recycled": "Reïnicializatz vòstre senhal a quicòm mai que l’actual.",
+ "resetpass-temp-emailed": "Sètz connect{{GENDER:|at|ada}} amb un còde temporari provesit per corrièr electronic.\nPer acabar la connexion, vos cal provesir un senhal novèl aicí :",
"resetpass-temp-password": "Senhal temporari :",
"resetpass-abort-generic": "La modificacion del senhal es estada anulada per una extension.",
"resetpass-expired": "Vòstre senhal a expirat. Provesissètz-ne un novèl per vos connectar.",
+ "resetpass-expired-soft": "Vòstre senhal a expirat, e deu èsser reïnicializat. Causissètz-ne un novèl ara, o clicatz sus « {{int:resetpass-submit-cancel}} » per o far mai tard.",
+ "resetpass-validity-soft": "Vòstre senhal es pas valid : $1\n\nCausissètz un senhal novèl ara, o clicatz sus « {{int:resetpass-submit-cancel}} » per lo reïnicializar mai tard.",
"passwordreset": "Remesa a zèro del senhal",
"passwordreset-text-one": "Emplenatz aqueste formulari per reïnicializar vòstre senhal.",
"passwordreset-text-many": "{{PLURAL:$1|Completatz un d'aqueles camps per recebre un senhal temporari per corrièr electronic.}}",
"preview": "Previsualizar",
"showpreview": "Previsualizacion",
"showdiff": "Veire los cambiaments",
+ "blankarticle": "<strong>Atencion :</strong> La pagina que creatz es voida.\nSe clicatz tornarmai sus « {{int:savearticle}} », la pagina serà creada sens cap de contengut.",
"anoneditwarning": "'''Atencion :''' sètz pas identificat(ada).\nVòstra adreça IP serà enregistrada dins l’istoric d'aquesta pagina.",
"anonpreviewwarning": "''Sètz pas identificat. Salvar enregistrarà vòstra adreça IP dins l’istoric de las modificacions de la pagina.''",
"missingsummary": "'''Atencion :''' avètz pas modificat lo resumit de vòstra modificacion. Se clicatz tornarmai sul boton « Salvar », lo salvament serà fach sens avertiment mai.",
"parser-template-recursion-depth-warning": "Limit de longor de la recursion del modèl depassat ($1)",
"language-converter-depth-warning": "Limit de prigondor del convertissor de lenga depassada ($1)",
"node-count-exceeded-category": "Paginas ont nombre de nosèls es depassat",
- "node-count-exceeded-warning": "Pagina depassant lo nombre de nosèls",
+ "node-count-exceeded-category-desc": "Aquesta pagina depassa lo nombre maximal de nosèls.",
+ "node-count-exceeded-warning": "Pagina que depassa lo nombre de nosèls",
"expansion-depth-exceeded-category": "Paginas ont la prigondor d'espandiment es depassada",
+ "expansion-depth-exceeded-category-desc": "La pagina depassa la prigondor d’espandiment maximala.",
"expansion-depth-exceeded-warning": "Pagina depassant la prigondor d'espandiment",
"parser-unstrip-loop-warning": "Bocla pas desmontabla detectada",
"parser-unstrip-recursion-limit": "Limit de recursion pas desmontable depassat ($1)",
"rev-deleted-event": "(entrada suprimida)",
"rev-deleted-user-contribs": "[nom d'utilizaire o adreça IP suprimida - modificacion amagada sus las contribucions]",
"rev-deleted-text-permission": "Aquesta version de la pagina es estada '''escafada'''.\nI pòt aver de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal dels escafaments].",
+ "rev-suppressed-text-permission": "Aquesta version de la page es estada <strong>suprimida</strong>.\nLos detalhs se tròban dins lo [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
"rev-deleted-text-unhide": "Aquesta version de la pagina es estada '''escafada'''.\nI pòt aver mai de detalhs dins [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} lo jornal dels escafaments].\nComa administrator, podètz encara [$1 veire aquesta version] s'o volètz.",
"rev-suppressed-text-unhide": "Aquesta version de la pagina es estada '''suprimida'''.\nI pòt aver mai de detalhs dins [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} lo jornal de las supressions].\nComa administrator, podètz encara [$1 veire aquesta version] s'o volètz.",
"rev-deleted-text-view": "Aquesta version de la pagina es estada '''escafada'''.\nLa podètz visualizar ; de detalhs son disponibles dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal dels escafaments].",
"revdelete-selected-text": "{{PLURAL:$1|Revision seleccionada|Revisions seleccionadas}} de [[:$2]] :",
"revdelete-selected-file": "{{PLURAL:$1|Version de fichièr seleccionada|Versions de fichièr seleccionadas}} de [[:$2]] :",
"logdelete-selected": "{{PLURAL:$1|Eveniment d'istoric seleccionat|Eveniments d'istoric seleccionats}} :",
+ "revdelete-text-text": "Las revisions suprimidas contunharàn d'aparéisser dins l’istoric de la pagina, mas una partida de lor contengut serà inaccessibla al public.",
+ "revdelete-text-file": "Las versions de fichièr suprimidas contunharàn d'aparéisser dins l’istoric dels fichièrs, mas una partida de lor contengut serà indisponibla al public.",
+ "logdelete-text": "Los eveniments del jornal suprimits contunharàn d'aparéisser dins los jornals, mas una partida de lor contengut serà indisponibla al public.",
+ "revdelete-text-others": "Los autres administrators seràn totjorn en mesura d'accedir al contengut amagat e de lo restablir, levat se de restriccions suplementàrias son fixadas.",
"revdelete-confirm": "Confirmatz que volètz efectuar aquesta accion, que ne comprenètz las consequéncias, e qu'o fasètz en acòrd amb [[{{MediaWiki:Policy-url}}|las règlas]].",
"revdelete-suppress-text": "La supression deu èsser utilizada '''sonque''' dins los cases seguents :\n* Informacions potencialament difamatòrias\n* Informacions personalas inapropriadas\n*: ''adreça, numèro de telefòn, numèro de seguretat sociala, ...''",
"revdelete-legend": "Metre en plaça de restriccions de version :",
"mergehistory-empty": "Cap de revision pòt pas èsser fusionada.",
"mergehistory-success": "$3 {{PLURAL:$3|revision|revisions}} de [[:$1]] {{PLURAL:$3|fusionada|fusionadas}} amb succès amb [[:$2]].",
"mergehistory-fail": "Impossible de procedir a la fusion dels istorics. Seleccionatz tornamai la pagina e mai los paramètres de data.",
+ "mergehistory-fail-toobig": "Impossible d’efectuar la fusion de l’istoric perque un nombre de {{PLURAL:$1|revisions}} superior al limit de $1 deuriá èsser desplaçat.",
"mergehistory-no-source": "La pagina d'origina $1 existís pas.",
"mergehistory-no-destination": "La pagina de destinacion $1 existís pas.",
"mergehistory-invalid-source": "La pagina d’origina deu aver un títol valid.",
"editundo": "desfar",
"diff-empty": "(Pas cap de diferéncia)",
"diff-multi-sameuser": "({{PLURAL:$1|Una revision intermediària pel meteis utilizaire pas afichada|$1 revisions intermediàrias pel meteis utilizaire pas afichadas}})",
+ "diff-multi-otherusers": "({{PLURAL:$1|Una revision intermediària|$1 revisions intermediàrias}} per {{PLURAL:$2|un autre utilizaire|$2 utilizaires}} pas {{PLURAL:$1|afichada|afichadas}})",
"diff-multi-manyusers": "({{PLURAL:$1|Una revision intermediària amagada|$1 revisions intermediàrias amagadas}}) per ({{PLURAL:$2|un utilizaire pas afichada|$2 utilizaires pas afichadas}})",
"difference-missing-revision": "{{PLURAL:$2|Una revision|$2 revisions}} d'aquesta diferéncia ($1) {{PLURAL:$2|es pas estada trobada|son pas estadas trobadas}}.\n\nAquò se produtz en general en seguent un ligam de diferéncia obsolèta cap a una pagina qu'es estada suprimada.\nPodètz trobar de detalhs dins lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de las supressions].",
"searchresults": "Resultats de la recèrca",
"powersearch-togglelabel": "Marcar :",
"powersearch-toggleall": "Tot",
"powersearch-togglenone": "Pas cap",
+ "powersearch-remember": "Se remembrar de la seleccion per las recèrcas venentas",
"search-external": "Recèrca extèrna",
"searchdisabled": "La recèrca sus {{SITENAME}} es desactivada.\nEn esperant la reactivacion, podètz efectuar una recèrca via Google.\nAtencion, lor indexacion de contengut {{SITENAME}} benlèu es pas a jorn.",
"search-error": "Una error s'es producha en recercant : $1",
"preferences": "Preferéncias",
"mypreferences": "Preferéncias",
"prefs-edits": "Nombre d’edicions :",
- "prefsnologintext2": "$1 per definir las preferéncias d'utilizaire.",
+ "prefsnologintext2": "Connectatz-vos per modificar vòstras preferéncias.",
"prefs-skin": "Aparéncia",
"skin-preview": "Previsualizar",
"datedefault": "Pas cap de preferéncia",
"prefs-tokenwatchlist": "Geton",
"prefs-diffs": "Diferéncias",
"prefs-help-prefershttps": "Aquesta preferéncia serà efectiva al moment de vòstra connexion que ven.",
+ "prefs-tabs-navigation-hint": "Astúcia : Podètz utilizar las flèchas d'esquèrra e de drecha per navigar entre los onglets.",
"email-address-validity-valid": "L'adreça electronica sembla bona",
"email-address-validity-invalid": "entrar una adreça electronica valida",
"userrights": "Gestion dels dreches d'utilizaire",
"right-move": "Tornar nomenar de paginas",
"right-move-subpages": "Desplaçar de paginas amb lor sospaginas",
"right-move-rootuserpages": "Tornar nomenar las paginas de l’utilizaire de banca.",
+ "right-move-categorypages": "Renomenar de paginas de categoria",
"right-movefile": "Desplaçar los fichièrs",
"right-suppressredirect": "Crear pas de redireccion dempuèi la pagina anciana en renomenant la pagina",
"right-upload": "Telecargar de fichièrs",
"right-deletedtext": "Veire lo tèxte suprimit e las diferéncias entre las versions suprimidas",
"right-browsearchive": "Recercar de paginas suprimidas",
"right-undelete": "Restablir una pagina",
- "right-suppressrevision": "Examinar e restablir las revisions amagadas als administrators",
+ "right-suppressrevision": "Afichar, amagar e desamagar de revisions especificas de paginas per quin utilizaire que siá.",
+ "right-viewsuppressed": "Afichar las revisions amagadas per quin utilizaire que siá",
"right-suppressionlog": "Veire los jornals privats",
"right-block": "Blocar d'autres utilizaires en escritura",
"right-blockemail": "Empachar un utilizaire de mandar de corrièrs electronics",
"action-createpage": "crear de paginas",
"action-createtalk": "crear de paginas de discussion",
"action-createaccount": "crear aqueste compte d'utilizaire",
+ "action-history": "afichar l’istoric d'aquesta pagina",
"action-minoredit": "marcar aqueste cambiament coma menor",
"action-move": "tornar nomenar aquesta pagina",
"action-move-subpages": "tornar nomenar aquesta pagina e sas sospaginas",
"action-move-rootuserpages": "tornar nomenar las paginas de l’utilizaire de banca.",
+ "action-move-categorypages": "Renomenar de paginas de categoria",
"action-movefile": "tornar nomenar aqueste fichièr",
"action-upload": "importar aqueste fichièr",
"action-reupload": "espotir aqueste fichièr existent",
"recentchanges-label-plusminus": "La talha de la pagina a cambiat d'aqueste nombre d’octets.",
"recentchanges-legend-heading": "'''Legenda :'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (veire tanben la [[Special:NewPages|lista de las paginas novèlas]]).",
- "rcnotefrom": "Çaijós las modificacions efectuadas dempuèi lo <strong>$2</strong> (fins a <strong>$1</strong> afichats).",
+ "rcnotefrom": "Çaijós {{PLURAL:$5|la modificacion efectuada|las modificacions efectuadas}} dempuèi lo <strong>$3, $4</strong> (afichadas fins a <strong>$1</strong>).",
"rclistfrom": "Afichar las modificacions novèlas dempuèi lo $3 $2",
"rcshowhideminor": "$1 los cambiaments menors",
"rcshowhideminor-show": "Afichar",
"fileexists-shared-forbidden": "Un fichièr amb lo meteis nom existís ja dins la banca de donadas comuna.\nS'o volètz importar tornamai, tornatz en rèire e importatz-lo jos un autre nom. [[File:$1|thumb|center|$1]]",
"file-exists-duplicate": "Aqueste fichièr es un doble {{PLURAL:$1|del fichièr seguent|dels fichièrs seguents}} :",
"file-deleted-duplicate": "Un fichièr identic a aqueste ([[:$1]]) ja es estat suprimit. Vos caldriá verificar lo jornal de las supressions d'aqueste fichièr abans de la tornar telecargar.",
+ "file-deleted-duplicate-notitle": "Un fichièr identic a aqueste fichièr es ja estat suprimit amai lo títol. \nVos caldriá demandar a qualqu'un la possibilitat de verificar lo jornal d'aqueste fichièr suprimit per tal d'examinar la situacion abans de l'importar tornarmai.",
"uploadwarning": "Atencion !",
"uploadwarning-text": "Modificatz la descripcion del fichièr e ensajatz tornarmai.",
"savefile": "Salvar lo fichièr",
"license": "Licéncia :",
"license-header": "Publicat jos licéncia(s)",
"nolicense": "Cap de licéncia seleccionada",
+ "licenses-edit": "Modificar las opcions de licéncia",
"license-nopreview": "(Previsualizacion impossibla)",
- "upload_source_url": " (una URL valida e accessibla publicament)",
- "upload_source_file": " (un fichièr sus vòstre ordenador)",
+ "upload_source_url": "(lo fichièr qu'avètz causit dempuèi una URL valida e accessibla publicament)",
+ "upload_source_file": "(vòstre fichièr causit dempuèi vòstre ordenador)",
+ "listfiles-delete": "suprimir",
"listfiles-summary": "Aquesta pagina especiala permet de far la lista de totes los fichièrs importats.",
"listfiles_search_for": "Recèrca del mèdia nomenat :",
"imgfile": "fichièr",
"randomincategory": "Pagina a l'azard dins la categoria",
"randomincategory-invalidcategory": "« $1 » es pas un nom de categoria valid.",
"randomincategory-nopages": "I a pas cap de pagina dins [[:Category:$1]].",
+ "randomincategory-category": "Categoria :",
+ "randomincategory-legend": "Pagina a l'azard dins la categoria",
"randomredirect": "Una pagina de redireccion a l'azard",
"randomredirect-nopages": "I a pas cap de redireccion dins l'espaci de nom « $1 ».",
"statistics": "Estatisticas",
"wantedpages-badtitle": "Títol invalid dins los resultats : $1",
"wantedfiles": "Fichièrs desirats",
"wantedfiletext-cat": "Los fichièrs seguents son utilizats, mas existisson pas localament. Se se tròban sus un depaus partejat, pòdon èsser listats aicí, mentre que sián, de fach, ja disponibles. Totes aqueles falses positius seràn <del>raiats</del>. Amai, las paginas qu'intègran de fichièrs qu'existisson pas son repertoriadas dins [[:$1]].",
+ "wantedfiletext-cat-noforeign": "Los fichièrs seguents son utilizats mas existisson pas. Amai, las paginas qu'intègran los fichièrs qu'existisson pas son listats dins [[:$1]].",
"wantedfiletext-nocat": "Los fichièrs seguents son utilizats, mas existisson pas localament. Se se tròban sus un depaus partejat, pòdon èsser listats aicí, mentre que sián, de fach, ja disponibles. Totes aqueles falses positius seràn <del>raiats</del>.",
+ "wantedfiletext-nocat-noforeign": "Los fichièrs seguents son utilizats mas existisson pas.",
"wantedtemplates": "Modèls demandats",
"mostlinked": "Paginas mai ligadas",
"mostlinkedcategories": "Categorias mai utilizadas",
"mywatchlist": "Lista de seguiment",
"watchlistfor2": "Per $1 ($2)",
"nowatchlist": "Vòstra lista de seguiment conten pas cap d'article.",
- "watchlistanontext": "Per poder afichar o editar los elements de vòstra lista de seguiment, vos cal vos $1.",
+ "watchlistanontext": "Connectatz-vos per visualizar o modificar los elements de vòstra lista de seguiment.",
"watchnologin": "Vos sètz pas identificat(ada)",
"addwatch": "Apondre a la lista de seguiment",
"addedwatchtext": "La pagina « [[:$1]] » es estada aponduda a vòstra [[Special:Watchlist|lista de seguiment]]. Las modificacions venentas d'aquesta pagina e de la pagina de discussion associada i seràn repertoriadas.",
+ "addedwatchtext-short": "La pagina « $1 » es estada aponduda a vòstra lista de seguiment.",
"removewatch": "Suprimir de la lista de seguiment",
"removedwatchtext": "La pagina « [[:$1]] » es estada levada de vòstra [[Special:Watchlist|lista de seguiment]].",
+ "removedwatchtext-short": "La pagina « $1 » es estada suprimida de vòstra lista de seguiment.",
"watch": "Seguir",
"watchthispage": "Seguir aquesta pagina",
"unwatch": "Arrestar de seguir",
"watchlist-details": "I a {{PLURAL:$1|$1 pagina|$1 paginas}} dins vòstra lista de seguiment, sens comptar las paginas de discussion.",
"wlheader-enotif": "La notificacion per corrièr electronic es activada.",
"wlheader-showupdated": "Las paginas que son estadas modificadas dempuèi vòstra darrièra visita son afichadas en '''gras'''.",
- "wlnote": "Çaijós {{PLURAL:$1|se tròba la darrièra modificacion efectuada|se tròban las $1 darrièras modificacions efectuadas}} pendent {{PLURAL:$2|la darrièra ora|las '''$2''' darrièras oras}} dempuèi $3, $4.",
+ "wlnote": "Çaijós {{PLURAL:$1|figura la darrièra modificacion efectuada|figuran las <strong>$1</strong> darrièras modificacions efectuadas}} pendent {{PLURAL:$2|la darrièra ora|las <strong>$2</strong> darrièras oras}}, dempuèi $3, $4.",
"wlshowlast": "Far veire las darrièras $1 oras, los darrièrs $2 jorns, o $3.",
"watchlist-options": "Opcions de la lista de seguiment",
"watching": "Seguit...",
"exbeforeblank": "lo contengut abans blanquiment èra :'$1'",
"delete-confirm": "Escafar «$1»",
"delete-legend": "Escafar",
- "historywarning": "'''Atencion :''' La pagina que s�tz a mand de suprimir a un istoric que conten aproximadament $1 {{PLURAL:$1|revision|revisions}} :",
+ "historywarning": "<strong>Atencion :</strong> la pagina que sètz a mand de suprimir a un istoric amb $1 {{PLURAL:$1|version|versions}} :",
"confirmdeletetext": "Sètz a mand de suprimir una pagina o un fichièr, e mai totas sas versions anterioras istorizadas.\nConfirmatz qu'es plan çò que volètz far, que ne comprenètz las consequéncias e que fasètz aquò en acòrdi amb las [[{{MediaWiki:Policy-url}}|règlas intèrnas]].",
"actioncomplete": "Accion efectuada",
"actionfailed": "L’accion a fracassat",
"delete-edit-reasonlist": "Modifica los motius de la supression",
"delete-toobig": "Aquesta pagina dispausa d'un istoric important, depassant {{PLURAL:$1|revision|revisions}}.\nLa supression de talas paginas es estada limitada per evitar de perturbacions accidentalas de {{SITENAME}}.",
"delete-warning-toobig": "Aquesta pagina dispausa d'un istoric important, depassant {{PLURAL:$1|revision|revisions}}.\nLa suprimir pòt perturbar lo foncionament de la banca de donada de {{SITENAME}}.\nD'efectuar amb prudéncia.",
+ "deleteprotected": "Podètz pas suprimir aquesta pagina perque es estada protegida.",
"rollback": "Anullar las modificacions",
"rollback_short": "Anullar",
"rollbacklink": "anullar",
"autoblockid": "Blocatge automatic #$1",
"block": "Blocar un utilizaire",
"unblock": "Desblocar un utilizaire",
- "blockip": "Blocar en escritura",
+ "blockip": "Blocar l’{{GENDER:$1|utilizaire|utilizaira}}",
"blockip-legend": "Blocar en escritura",
"blockiptext": "Utilizatz lo formulari çaijós per blocar l'accès a las modificacions a partir d'una adreça IP especifica o d'un nom d'utilizaire.\nUna tala mesura deu pas èsser presa pas que per empachar lo vandalisme e en acòrdi amb las [[{{MediaWiki:Policy-url}}|règlas intèrnas]].\nDonatz çaijós un motiu precís (per exemple en citant las paginas que son estadas vandalizadas).",
"ipaddressorusername": "Adreça IP o nom d’utilizaire :",
"ipb-unblock-addr": "Desblocar $1",
"ipb-unblock": "Desblocar un compte d'utilizaire o una adreça IP",
"ipb-blocklist": "Vejatz los blocatges existents",
- "ipb-blocklist-contribs": "Contribucions per $1",
+ "ipb-blocklist-contribs": "Contribucions per {{GENDER:$1|$1}}",
"unblockip": "Desblocar un utilizaire o una adreça IP",
"unblockiptext": "Utilizatz lo formulari çaijós per restablir l'accès en escritura\na partir d'una adreça IP precedentament blocada.",
"ipusubmit": "Suprimir aqueste blocatge",
"movenotallowedfile": "Avètz pas la permission de desplaçar los fichièrs.",
"cant-move-user-page": "Avètz pas la permission de tornar nomenar de paginas d'utilizaires raices sus aqueste wiki.",
"cant-move-to-user-page": "Avètz pas la permission de tornar nomenar una pagina cap a una pagina d'utilizaire (a l'excepcion d'una sospagina).",
+ "cant-move-category-page": "Avètz pas la permission de renomenar las paginas de categorias.",
"newtitle": "Títol novèl",
"move-watch": "Seguir aquesta pagina",
"movepagebtn": "Tornar nomenar l'article",
"import": "Importar de paginas",
"importinterwiki": "Impòrt interwiki",
"import-interwiki-text": "Seleccionatz un wiki e un títol de pagina d'importar.\nLas datas de las versions e los noms dels editors seràn preservats.\nTotas las accions d’importacion interwiki son conservadas dins lo [[Special:Log/import|jornal d’impòrt]].",
+ "import-interwiki-sourcewiki": "Wiki font :",
+ "import-interwiki-sourcepage": "Pagina font :",
"import-interwiki-history": "Copiar totas las versions de l'istoric d'aquesta pagina",
"import-interwiki-templates": "Enclure totes los modèls",
"import-interwiki-submit": "Importar",
"import-invalid-interwiki": "Impossible d'importar dempuèi lo wiki especificat.",
"import-error-edit": "La pagina « $1 » es pas estada importada perque sètz pas autorizat a la modificar.",
"import-error-create": "La pagina « $1 » es pas estada importada perque sètz pas autorizat a la crear.",
- "import-error-invalid": "Pagina « $1 » es pas importada perque son nom es pas valid.",
+ "import-error-invalid": "Pagina « $1 » es pas importada perque lo nom amb lo qual seriá estada importada es pas valid sus aqueste wiki.",
"import-options-wrong": "{{PLURAL:$2|Marrida opcion|Marridas opcions}} : <nowiki>$1</nowiki>",
"import-rootpage-invalid": "La pagina raiç provesida es un títol invalid.",
"import-rootpage-nosubpage": "L'espaci de noms « $1 » de la pagina raiç autoriza pas las sospaginas.",
"importlogpage": "Istoric de las importacions de paginas",
"importlogpagetext": "Impòrts administratius de paginas amb l’istoric a partir dels autres wikis.",
"import-logentry-upload": "a importat (telecargament) [[$1]]",
- "import-logentry-upload-detail": "$1 {{PLURAL:$1|version|versions}}",
+ "import-logentry-upload-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}}",
"import-logentry-interwiki": "a importat (transwiki) $1",
- "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|version|versions}} dempuèi $2",
+ "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revision importada|revisions importadas}} dempuèi $2",
"javascripttest": "Tèst de JavaScript",
"javascripttest-title": "Execucion dels tèsts $1",
"javascripttest-pagetext-noframework": "Aquesta pagina es reservada per l'execucion dels tèsts JavaScript.",
"newimages-summary": "Aquesta pagina especiala aficha los darrièrs fichièrs importats.",
"newimages-legend": "Filtre",
"newimages-label": "Nom del fichièr (o una partida d'aqueste) :",
+ "newimages-showbots": "Afichar los impòrts per de robòts",
"noimages": "Cap d'imatge d'afichar pas.",
"ilsubmit": "Cercar",
"bydate": "per data",
"scarytranscludetoolong": "[L’URL es tròp longa]",
"deletedwhileediting": "'''Atencion''' : aquesta pagina es estada suprimida aprèp qu'avètz començat de la modificar !",
"confirmrecreate": "L'utilizaire [[User:$1|$1]] ([[User talk:$1|talk]]) a suprimit aquesta pagina, alara que l'aviatz començat d'editar, pel motiu seguent:\n: ''$2''\nConfirmatz que desiratz tornar crear aqueste article.",
+ "confirmrecreate-noreason": "L'utilizaire [[User:$1|$1]] ([[User talk:$1|Discussion]]) a suprimit aquesta pagina, mentre qu'aviatz començat de la modificar. Confirmatz que desiratz tornar crear aquesta pagina.",
"recreate": "Tornar crear",
"confirm_purge_button": "Confirmar",
"confirm-purge-top": "Volètz refrescar aquesta pagina (purgar l'escondedor) ?",
"autosumm-replace": "Resumit automatic : contengut remplaçat per « $1 ».",
"autoredircomment": "Redireccion cap a [[$1]]",
"autosumm-new": "Creacion de la pagina amb « $1 »",
+ "autosumm-newblank": "Pagina voida creada",
"size-bytes": "$1 o",
"size-kilobytes": "$1 Ko",
"size-megabytes": "$1 Mo",
"watchlistedit-raw-done": "Vòstra lista de seguiment es estada mesa a jorn.",
"watchlistedit-raw-added": "{{PLURAL:$1|Una pagina es estada aponduda|$1 paginas son estadas apondudas}} :",
"watchlistedit-raw-removed": "{{PLURAL:$1|Una pagina es estada levada|$1 paginas son estadas levadas}} :",
+ "watchlistedit-clear-title": "Lista de seguiment voidada",
+ "watchlistedit-clear-legend": "Escafar la lista de seguiment",
+ "watchlistedit-clear-explain": "Totes los títols seràn suprimits de vòstra lista de seguiment",
+ "watchlistedit-clear-titles": "Títols :",
+ "watchlistedit-clear-submit": "Escafar la lista de seguiment (aquò es permanent !)",
+ "watchlistedit-clear-done": "Vòstra lista de seguiment es estada escafada.",
+ "watchlistedit-clear-removed": "{{PLURAL:$1|Un títol es estat levat|$1 títols son estats levats}} :",
+ "watchlistedit-too-many": "I a tròp de paginas d'afichar aicí.",
+ "watchlisttools-clear": "Escafar la lista de seguiment",
"watchlisttools-view": "Lista de seguiment",
"watchlisttools-edit": "Veire e modificar la lista de seguiment",
"watchlisttools-raw": "Modificar la lista (mòde brut)",
"signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discussion]])",
"unknown_extension_tag": "Balisa d'extension « $1 » desconeguda",
"duplicate-defaultsort": "Atencion : La clau de triada per defaut « $2 » espotís la mai recenta « $1 ».",
+ "duplicate-displaytitle": "<strong>Atencion :</strong> Lo títol d'afichatge «$2» remplaça l'ancian títol d'afichatge «$1».",
"version": "Version",
"version-extensions": "Extensions installadas",
"version-skins": "Abilhatges installats",
"version-hook-name": "Nom del croquet",
"version-hook-subscribedby": "Definit per",
"version-version": "(Version $1)",
+ "version-no-ext-name": "[sens nom]",
"version-license": "Licéncia de MediaWiki",
"version-ext-license": "Licéncia",
"version-ext-colheader-name": "Extensions",
+ "version-skin-colheader-name": "Aparéncia",
+ "version-ext-colheader-version": "Version",
"version-ext-colheader-license": "Licéncia",
"version-ext-colheader-description": "Descripcion",
"version-ext-colheader-credits": "Autors",
"htmlform-no": "Non",
"htmlform-yes": "Òc",
"htmlform-chosen-placeholder": "Causir una opcion",
+ "htmlform-cloner-create": "Apondre encara",
+ "htmlform-cloner-delete": "Suprimir",
+ "htmlform-cloner-required": "Una valor al mens es obligatòria.",
"sqlite-has-fts": "$1 amb recèrca en tèxte integral suportada",
"sqlite-no-fts": "$1 sens recèrca en tèxte integral suportada",
"logentry-delete-delete": "$1 {{GENDER:$2|a suprimit}} la pagina $3",
"logentry-rights-rights": "$1 {{GENDER:$2|a modificat}} l'apartenéncia al grop per $3 de $4 a $5",
"logentry-rights-rights-legacy": "$1 {{GENDER:$2|a modificat}} l'apartenéncia al grop per $3",
"logentry-rights-autopromote": "$1 {{GENDER:$2|es estat promolgut}} automaticament de $4 a $5",
+ "logentry-upload-upload": "$1 {{GENDER:$2|a mandat}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|a telecargat}} una novèla version de $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|a telecargat}} $3",
"rightsnone": "(cap)",
"feedback-subject": "Subjècte :",
"feedback-message": "Messatge :",
"expand_templates_remove_nowiki": "Suprimís los marcadors <nowiki> dins lo resultat",
"expand_templates_generate_xml": "Veire l'arborescéncia XML",
"expand_templates_generate_rawhtml": "Afichar lo HTML brut",
- "expand_templates_preview": "Previsualizacion"
+ "expand_templates_preview": "Previsualizacion",
+ "pagelanguage": "Selector de lenga de la pagina",
+ "pagelang-name": "Pagina",
+ "pagelang-language": "Lenga",
+ "pagelang-use-default": "Utilizar la lenga per defaut",
+ "pagelang-select-lang": "Seleccionar la lenga",
+ "right-pagelang": "Cambiar la lenga de la pagina",
+ "action-pagelang": "cambiar la lenga de la pagina",
+ "log-name-pagelang": "Traçar los cambiaments de lenga",
+ "log-description-pagelang": "Aquò es un jornal dels cambiaments dins las lengas de las paginas.",
+ "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a cambiat}} la lenga de la pagina $3 de $4 a $5.",
+ "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activat)",
+ "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desactivat''')"
}
"userlogin-resetlink": "Zapomniałeś danych do zalogowania się?",
"userlogin-resetpassword-link": "Nie pamiętasz hasła?",
"userlogin-helplink2": "Pomoc przy logowaniu",
- "userlogin-loggedin": "Zalogowano jako {{GENDER:$1|$1}}.\nUżyj poniższego formularza, aby zalogować się jako inny użytkownik.",
- "userlogin-createanother": "Załóż nowe konto",
"createacct-emailrequired": "Adres e‐mail",
"createacct-emailoptional": "Adres e-mail (opcjonalnie)",
"createacct-email-ph": "Wpisz swój adres e-mail",
"createaccount-text": "Ktoś utworzył w {{GRAMMAR:MS.lp|{{SITENAME}}}} ($4), podając Twój adres e‐mail, konto „$2”. Aktualnym hasłem jest „$3”.\nZaloguj się teraz i je zmień.\n\nMożesz zignorować tę wiadomość, jeśli konto zostało utworzone przez pomyłkę.",
"login-throttled": "Zbyt wiele razy próbowałeś zalogować się na to konto.\nOdczekaj $1 zanim ponowisz próbę.",
"login-abort-generic": "Logowanie nieudane – przerwano",
+ "login-migrated-generic": "Twoje konto zostało poddane migracji i twoja nazwa użytkownika już nie istnieje na tej wiki.",
"loginlanguagelabel": "Język: $1",
"suspicious-userlogout": "Żądanie wylogowania zostało odrzucone ponieważ wygląda na to, że zostało wysłane przez uszkodzoną przeglądarkę lub buforujący serwer proxy.",
"createacct-another-realname-tip": "Wpisanie imienia i nazwiska nie jest obowiązkowe.\nJeśli zdecydujesz się je podać, zostaną użyte, by udokumentować Twoje autorstwo.",
"userlogin-resetlink": "A l'ha dësmentià ij sò detaj për intré ant ël sistema?",
"userlogin-resetpassword-link": "Ciav dësmentià?",
"userlogin-helplink2": "Agiut a la conession",
- "userlogin-loggedin": "A l'é già rintrà an ël sistema tanme {{GENDER:$1|$1}}.\nCh'a deuvra ël formolari sì-sota për rintré coma n'àutr n'utent.",
- "userlogin-createanother": "Creé n'àutr cont",
"createacct-emailrequired": "Adrëssa ëd pòsta eletrònica",
"createacct-emailoptional": "Adrëssa ëd pòsta eletrònica (opsional)",
"createacct-email-ph": "Ch'a buta soa adrëssa ëd pòsta eletrònica",
"createaccount-text": "Cheidun a l'ha duvertà un cont për soa adrëssa ëd pòsta eletrònica ansima a {{SITENAME}} ($4) butand da stranòm «$2» e da ciav «$3». A dovrìa rintré ant ël sistema e cambiesse soa ciav pì ampressa ch'a peul.\n\nSe sòn a l'é rivà për eror, a peul lassé perde e fé gnente sensa problema.",
"login-throttled": "A l'ha fàit tròpi tentativ recent d'intré ant ël sistema.\nPër piasì, ch'a speta $1 prima ëd prové torna.",
"login-abort-generic": "Sò tentitiv d'intré ant ël sistema a l'é falì - Abortì",
+ "login-migrated-generic": "Sò cont a l'ha emigrà, e sò stranòm a esist pi nen su costa wiki.",
"loginlanguagelabel": "Lenga: $1",
"suspicious-userlogout": "Soa arcesta ëd seurte dal sistema a l'é stàita arfudà përchè a smija com s'a fussa stàita mandà da 'n navigador rot o da l'archiviassion an local d'un prëstanòm.",
"createacct-another-realname-tip": "Ël nòm ver a l'é opsional.\nS'a decid ëd butelo, a sarà dovrà për dé a l'utent ël mérit ëd sò travaj.",
"showpreview": "Mostré na preuva",
"showdiff": "Smon-me le modìfiche",
"blankarticle": "<strong>Atension:</strong> La pàgina ch'a l'ha creà a l'é veuida. S'a sgnaca torna «{{int:savearticle}}», la pàgina a sarà creà sensa contnù.",
- "anoneditwarning": "'''Atension:''' A l'é nen rintrà ant ël sistema. Soa adrëssa IP a sarà registrà ant la stòria dle modìfiche ëd sa pàgina.",
+ "anoneditwarning": "<strong>Atension:<strong> A l'é nen rintrà ant ël sistema. Soa adrëssa IP a së sc-iairërà s'a fà dle modìfiche. Si chiel a <strong>[$1 rintra ant ël sistema]</strong> o <strong>[$2 a crea an cont]</strong>, soe modìfiche a saran atribuìe a sò stranòm, ansema a d'àutri vantagg.",
"anonpreviewwarning": "''A l'é nen rintrà ant ël sistema. An salvand a sarà memorisà soa adrëssa IP ant la stòria dle modìfiche ëd sa pàgina.''",
"missingsummary": "'''Nòta:''' a l'ha butà gnun resumé dla modìfica. Se a sgnaca «{{int:savearticle}}» n'àutra vira, soa modìfica a resterà salvà sensa resumé.",
"missingcommenttext": "Për piasì, che a buta un coment sì-sota.",
"filedelete-maintenance": "Lë scancelament e la restaurassion d'archivi a l'é al moment disabilità durant la manutension.",
"filedelete-maintenance-title": "As peul pa scancelesse l'archivi",
"mimesearch": "Arserca për sòrt MIME",
- "mimesearch-summary": "Sta pàgina-sì a lassa filtré j'archivi për sòrt MIME. Buté: sòrt/sotasòrt, pr'es. <code>image/jpeg</code>.",
+ "mimesearch-summary": "Sta pàgina-sì a lassa filtré j'archivi për sòrt MIME. Buté: sòrt/sotasòrt o sòrt/*, pr'es. <code>image/jpeg</code>.",
"mimetype": "Sòrt MIME:",
"download": "dëscarié",
"unwatchedpages": "Pàgine che gnun a ten sot-euj",
"randomincategory": "Pàgina a l'ancàpit ant la categorìa",
"randomincategory-invalidcategory": "«$1» a l'é pa un nòm ëd categorìa bon.",
"randomincategory-nopages": "A-i é gnun-e pàgine ant la categorìa [[:Category:$1|$1]].",
+ "randomincategory-category": "Categorìa:",
+ "randomincategory-legend": "Pàgina a l'ancàpit ant la categorìa",
"randomredirect": "Na ridiression qualsëssìa",
"randomredirect-nopages": "A-i é pa gnun-a ridiression ant lë spassi nominal \"$1\".",
"statistics": "Statìstiche",
"doubleredirects": "Ridiression dobie",
"doubleredirectstext": "Sta pàgina-sì a a lista dle pàgine ch'a armando a d'àutre pàgine ëd ridiression.\nVira riga a l'ha andrinta j'anliure a la prima e a la sconda ridiression, ant sël pat ëd la prima riga ëd test dla seconda ridiression, che për sòlit a l'ha andrinta l'artìcol ëd destinassion vèir, col andoa che a dovrìa ëmné ëdcò la prima ridiression.\nLe ridiression <del>sganfà</del> a son stàite arzolvùe.",
"double-redirect-fixed-move": "[[$1]] a l'é stàit spostà.\nA l'é stàit agiornà an automàtich e adess a l'é na ridiression a [[$2]].",
- "double-redirect-fixed-maintenance": "Rangé le ridiression dobie da [[$1]] a [[$2]].",
+ "double-redirect-fixed-maintenance": "Coression automàtica dle ridiression dobie da [[$1]] a [[$2]] ant un travaj ëd manutension.",
"double-redirect-fixer": "Coretor ëd ridiression",
"brokenredirects": "Ridiression nen giuste",
"brokenredirectstext": "Coste ridiression-sì a men-o a d'artìcoj ch'a-i son pa:",
"wantedpages-badtitle": "Tìtol nen vàlid ant l'ansema dj'arzultà: $1",
"wantedfiles": "Archivi pì ciamà",
"wantedfiletext-cat": "J'archivi ch'a ven-o a son dovrà ma a esisto pa. J'archivi dai sò depòsit estern a peulo esse listà sensa consideré l'esistensa. Chèich fàuss positiv a saran <del>sganfà</del>. An pi, le pàgine ch'a conten-o dj'archivi ch'a esisto pa a son listà an [[:$1]].",
+ "wantedfiletext-cat-noforeign": "J'archivi sì-dapress a son dovrà ma a esisto nen. An dzorpì, le pàgina ch'a conten-o d'archivi ch'a esisto nen a son listà an [[:$1]].",
"wantedfiletext-nocat": "J'archivi sì-dapress a son dovrà ma a esisto pa. J'archivi da depòsit estern a peulo esse listà sensa considerene l'esistensa. Tùit costi fàuss positiv a saran <del>ësganfà</del>.",
+ "wantedfiletext-nocat-noforeign": "J'archivi sì-dapress a son dovrà ma a esisto pa.",
"wantedtemplates": "Stamp ciamà",
"mostlinked": "Pàgine che a l'han pì d'anliure che a-i men-o la gent ansima",
"mostlinkedcategories": "Categorìe che a l'han pì d'anliure che a-i men-o la gent ansima",
- "mostlinkedtemplates": "Stamp pì dovrà",
+ "mostlinkedtemplates": "Pàgine pi ancludùe",
"mostcategories": "Artìcoj che a son marcà an pì categorìe",
"mostimages": "Figure pì dovrà",
"mostinterwikis": "Pàgine con pi 'd liure antërwiki",
"trackingcategories-desc": "Criteri d'anclusion dla categorìa",
"noindex-category-desc": "La pàgina a l'é pa trassà dai robò përchè a conten la paròla màgica <code><nowiki>__NOINDEX__</nowiki></code> andrinta e a l'é an në spassi nominal anté che cost marcagi a l'é autorisà.",
"index-category-desc": "La pàgina a conten un <code><nowiki>__INDEX__</nowiki></code> (e a l'é an në spassi nominal anté che ëd marcagi a l'é autorisà); a l'é donca trassà dai robò antant che ëd sòlit a lo sarìa nen.",
- "post-expand-template-inclusion-category-desc": "Apress avèj dësvlupà tuti jë stamp, la taja dla pàgina a sorpassa <code>$wgMaxArticleSize</code>, donca chèich ëstamp a son nen ëstàit dësvlupà.",
- "post-expand-template-argument-category-desc": "Apress avèj dësvlupà l'argoment ëd në stamp (cheicòs antra tripl agraf, tanme <code>{{{Foo}}}</code>), la pàgina a l'é pi gròssa che <code>$wgMaxArticleSize</code>.",
- "expensive-parserfunction-category-desc": "Tròpe fonsion care ëd l'analisator (parèj ëd <code>#ifexist</code>) contnùe an na pàgina. Ch'a vëdda [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "post-expand-template-inclusion-category-desc": "La taja dla pàgina a sorpassa <code>$wgMaxArticleSize</code> apress avèj dësvlupà tuti jë stamp, donca chèich ëstamp a son nen ëstàit dësvlupà.",
+ "post-expand-template-argument-category-desc": "La pàgina a l'é pi gròssa che <code>$wgMaxArticleSize</code>, apress avèj dësvlupà l'argoment ëd në stamp (cheicòs antra tripl agraf, tanme <code>{{{Foo}}}</code>).",
+ "expensive-parserfunction-category-desc": "Costa pàgina a deuvra tròpe fonsion care ëd l'analisator (parèj ëd <code>#ifexist</code>). Ch'a vëdda [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+ "broken-file-category-desc": "La pàgina a conten na liura d'archivi cioca (na liura për anclude n'archivi cand l'archivi a esist nen).",
+ "hidden-category-category-desc": "La categorìa a conten <code><nowiki>__HIDDENCAT__</nowiki></code> an sò sontnù, lòn ch'a j'ampediss d'esse smonùa ant la casela dle liure ëd categorìa an sle pàgine, 'me stàndard.",
+ "trackingcategories-nodesc": "Gnun-a descrission disponìbil.",
+ "trackingcategories-disabled": "La categorìa a l'é disabilità",
"mailnologin": "A-i é pa l'adrëssa për mandé ël mëssagi",
"mailnologintext": "A dev [[Special:UserLogin|rintré ant ël sistema]]\ne avèj registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Preferences|sò gust]] për podèj mandé dij mëssagi ëd pòsta eletrònica a j'àutri Utent.",
"emailuser": "Mandeje un mëssagi eletrònich a st'utent-sì",
"mywatchlist": "Ròba che as ten sot euj",
"watchlistfor2": "Për $1 $2",
"nowatchlist": "A l'ha ancó pa marcà dj'artìcoj coma ròba da tnì sot-euj.",
- "watchlistanontext": "Për piasì, $1 për ës-ciairé ò pura modifiché j'element ëd soa lista dla ròba che as ten sot-euj.",
+ "watchlistanontext": "Për piasì, ch'a rintra ant ël sistema për ës-ciairé ò pura modifiché j'element ëd soa lista dla ròba che as ten sot-euj.",
"watchnologin": "A l'é ancó nen rintrà ant ël sistema",
"addwatch": "Gionté a la lista ëd lòn ch'as ten sot-euj",
"addedwatchtext": "La pàgina «[[:$1]]» a l'é staita giontà a soa [[Special:Watchlist|lista dla ròba da tnì sot-euj]].\nLe modìfiche che a-i saran ant costa pàgina-sì e ant soa pàgina ëd discussion a saran listà ambelessì.",
+ "addedwatchtext-short": "La pàgina «$1» a l'é stàita giontà a la lista ëd lòn ch'as ten sot-euj.",
"removewatch": "Gavé da la lista ëd lòn ch'as ten sot-euj",
"removedwatchtext": "La pàgina «[[:$1]]» a l'è staita gavà via da [[Special:Watchlist|soa lista dla ròba da tnì sot-euj]].",
+ "removedwatchtext-short": "La paàgina «$1» a l'é stàita gavà da la lista ëd lòn ch'as ten sot-euj.",
"watch": "ten-e sot-euj",
"watchthispage": "Ten-e sot-euj cost artìcol-sì",
"unwatch": "Chité-lì ëd ten-e sossì sot-euj",
"unwatchthispage": "Chité-lì ëd ten-e sossì sot-euj",
"notanarticle": "Sòn a l'é pa n'artìcol",
"notvisiblerev": "La revision a l'é stàita scancelà",
- "watchlist-details": "A l'é dëmentrè ch'as ten sot-euj {{PLURAL:$1|$1 pàgina|$1 pàgine}}, nen contand cole ëd discussion.",
+ "watchlist-details": "A l'é dëmentrè ch'as ten sot-euj {{PLURAL:$1|$1 pàgina|$1 pàgine}}, nen contand an manera separà cole ëd discussion.",
"wlheader-enotif": "La notìfica për pòsta eletrònica a l'é abilità.",
"wlheader-showupdated": "Le pàgine che a son ëstàite modificà da quand che a l'é passaje ansima l'ùltima vira a resto marcà an '''grassèt'''",
- "wlnote": "Ambelessì sota a-i {{PLURAL:$1|é l'ùltima modìfica|son j'ùltime '''$1''' modìfiche}} ant {{PLURAL:$2|l'ùltima ora|j'ùltime '''$2''' ore}}, a parte da $3, $4.",
+ "wlnote": "Ambelessì sota a-i {{PLURAL:$1|é l'ùltima modìfica|son j'ùltime <strong>$1</strong> modìfiche}} ant {{PLURAL:$2|l'ùltima ora|j'ùltime <strong>$2</strong> ore}}, a parte da $3, $4.",
"wlshowlast": "Smon-e j'ùltime $1 ore $2 dì $3",
"watchlist-options": "Opsion ëd la lista dla ròba ch'as ten sot-euj",
"watching": "Sot-euj...",
"exbeforeblank": "anans d'esse dësvujdà ël contnù a l'era: «$1»",
"delete-confirm": "Scancelé «$1»",
"delete-legend": "Scancelé",
- "historywarning": "'''Avis:''' La pàgina che a l'é antramentr che a scancela a l'ha na stòria con pi o men $1 {{PLURAL:$1|revision|revision}}:",
+ "historywarning": "<strong>Avis:</strong> La pàgina che a l'é antramentr che a scancela a l'ha na stòria con $1 {{PLURAL:$1|revision}}:",
"confirmdeletetext": "A sta për scancelé d'autut da 'nt la base dat na pàgina ò pura na figura, ansema a tuta soa cronologìa.<p>\nPër piasì, che an conferma che sòn a l'é da bon sò but, che a as rend cont ëd le conseguense ëd lòn che a fa, e che sòn a resta an pien an régola con lòn che a l'é stabilì ant la [[{{MediaWiki:Policy-url}}]].",
"actioncomplete": "Travaj fait e finì",
"actionfailed": "Assion falìa",
"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-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",
"tog-previewonfirst": "Mostrar previsão na primeira edição",
"hidetoc": "ocultar",
"collapsible-collapse": "Ocultar",
"collapsible-expand": "Expandir",
+ "confirmable-confirm": "{{GENDER:$1|Tem}} a certeza?",
"confirmable-yes": "Sim",
"confirmable-no": "Não",
"thisisdeleted": "Ver ou restaurar $1?",
"userlogin-resetlink": "Esqueceu-se do seu nome de usuário ou da senha?",
"userlogin-resetpassword-link": "Esqueceu sua senha?",
"userlogin-helplink2": "Ajuda com o login",
- "userlogin-loggedin": "Você já está conectado como {{GENDER:$1|$1}}.\nUse o formulário abaixo para iniciar sessão como outro usuário.",
- "userlogin-createanother": "Crie uma outra conta",
"createacct-emailrequired": "Endereço de e-mail",
"createacct-emailoptional": "Endereço de e-mail (opcional)",
"createacct-email-ph": "Confirme seu endereço de e-mail",
"preview": "Pré-visualização",
"showpreview": "Mostrar previsão",
"showdiff": "Mostrar alterações",
+ "blankarticle": "<strong>Aviso:</strong> A página que está prestes a criar está em branco. \nSe clicar \"{{int:savearticle}}\" outra vez, a página será criada sem qualquer conteúdo.",
"anoneditwarning": "'''Atenção''': Você não se encontra autenticado.\nO seu endereço de IP será registrado no histórico de edições desta página.",
"anonpreviewwarning": "''Você não está logado. Gravar registará o seu endereço IP no histórico de edições desta página.''",
"missingsummary": "'''Lembrete:''' Você não introduziu um sumário de edição. Se clicar novamente em Salvar, a sua edição será salva sem um sumário.",
"rev-deleted-event": "(entrada removida)",
"rev-deleted-user-contribs": "[nome de usuário ou endereço de IP eliminado - edição ocultada das contribuições]",
"rev-deleted-text-permission": "Esta revisão desta página foi '''eliminada'''.\nPodem existir mais detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminações].",
+ "rev-suppressed-text-permission": "A revisão desta página foi '''eliminada'''.\nVocê pode visualizá-la; podem existir mais detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de eliminação].",
"rev-deleted-text-unhide": "Esta revisão desta página foi '''removida'''.\nPoderá haver detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].\nVocê ainda pode [$1 ver esta revisão] se deseja prosseguir.",
"rev-suppressed-text-unhide": "Esta revisão desta página foi '''removida'''.\nPoderá haver detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registro de eliminação].\nVocê ainda pode [$1 ver esta revisão] se deseja prosseguir.",
"rev-deleted-text-view": "A revisão desta página foi '''eliminada'''.\nVocê pode visualizá-la; pode haver detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].",
"randomincategory": "Página aleatória na categoria",
"randomincategory-invalidcategory": "\"$1\" não é um nome de categoria válido.",
"randomincategory-nopages": "Não há paginas em [[:Category:$1]].",
+ "randomincategory-category": "Categoria:",
+ "randomincategory-legend": "Página aleatória na categoria",
"randomredirect": "Redirecionamento aleatório",
"randomredirect-nopages": "Não há redirecionamentos no espaço nominal \"$1\".",
"statistics": "Estatísticas",
"trackingcategories-desc": "Critérios de inclusão de categoria",
"noindex-category-desc": "A página não é indexada por robôs, porque possui a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está em um namespace onde a flag é permitida.",
"post-expand-template-inclusion-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de todas as predefinições, pelo que algumas predefinições não foram expandidas.",
+ "trackingcategories-nodesc": "Nenhuma descrição disponível.",
"trackingcategories-disabled": "A categoria está desabilitada",
"mailnologin": "Nenhum endereço de envio",
"mailnologintext": "Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.",
"mywatchlist": "Páginas vigiadas",
"watchlistfor2": "Para $1 $2",
"nowatchlist": "A sua lista de páginas vigiadas não possui títulos.",
- "watchlistanontext": "Por favor $1 para ver ou editar os itens na sua lista de páginas vigiadas.",
+ "watchlistanontext": "Por favor, faça login para ver ou editar os itens na sua lista de páginas vigiadas.",
"watchnologin": "Não está autenticado",
"addwatch": "Adicionar às páginas vigiadas",
"addedwatchtext": "A página \"[[:$1]]\" foi adicionada à sua [[Special:Watchlist|lista de páginas vigiadas]].\nFuturas modificações em tal página e páginas de discussão relacionadas serão listadas lá.",
"import": "Importar páginas",
"importinterwiki": "Importação transwiki",
"import-interwiki-text": "Selecione um wiki e um título de página para importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwiki são registradas no [[Special:Log/import|Registro de importações]].",
+ "import-interwiki-sourcewiki": "Fonte wiki:",
+ "import-interwiki-sourcepage": "Página de origem:",
"import-interwiki-history": "Copiar todas as edições para esta página",
"import-interwiki-templates": "Incluir todas as predefinições",
"import-interwiki-submit": "Importar",
"autosumm-replace": "Página substituída por '$1'",
"autoredircomment": "Redirecionando para [[$1]]",
"autosumm-new": "Criou página com '$1'",
+ "autosumm-newblank": "Criar página em branco",
"lag-warn-normal": "É possível que as alterações que sejam mais recentes do que $1 {{PLURAL:$1|segundo|segundos}} não sejam exibidas nesta lista.",
"lag-warn-high": "Devido a sérios problemas de latência no servidor do banco de dados, as alterações mais recentes que $1 {{PLURAL:$1|segundo|segundos}} poderão não ser exibidas nesta lista.",
"watchlistedit-normal-title": "Editar lista de páginas vigiadas",
"watchlistedit-raw-done": "Sua lista de páginas vigiadas foi atualizada.",
"watchlistedit-raw-added": "{{PLURAL:$1|Foi adicionado um título|Foram adicionados $1 títulos}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|Foi removido um título|Foram removidos $1 títulos}}:",
+ "watchlistedit-clear-title": "Lista de páginas vigiadas limpa",
"watchlistedit-clear-legend": "Limpar a lista de páginas vigiadas",
"watchlistedit-clear-explain": "Todos os títulos serão removidos da sua lista de páginas vigiadas",
"watchlistedit-clear-titles": "Títulos:",
"otherlanguages": "Noutros idiomas",
"redirectedfrom": "(Redireccionado de $1)",
"redirectpagesub": "Página de redirecionamento",
+ "redirectto": "Redireciona para:",
"lastmodifiedat": "Esta página foi modificada pela última vez à(s) $2 de $1.",
"viewcount": "Esta página foi acedida {{PLURAL:$1|uma vez|$1 vezes}}.",
"protectedpage": "Página protegida",
"userlogin-resetlink": "Esqueceu-se do seu nome de utilizador ou da palavra-passe?",
"userlogin-resetpassword-link": "Esqueceu-se da sua palavra-passe?",
"userlogin-helplink2": "Ajuda para iniciar sessão",
- "userlogin-loggedin": "Já está {{GENDER:$1|autenticado|autenticada|autenticado}} com o nome $1.\nUse o formulário abaixo para iniciar sessão com outro nome.",
- "userlogin-createanother": "Criar outra conta",
"createacct-emailrequired": "Endereço de correio eletrónico",
"createacct-emailoptional": "Endereço de correio eletrónico (opcional)",
"createacct-email-ph": "Digite o seu endereço de correio eletrónico",
"createaccount-text": "Alguém criou uma conta com o nome $2 para o seu endereço de correio eletrónico, na wiki {{SITENAME}} ($4), com a palavra-passe \"$3\".\nDeve agora iniciar sessão e alterar a sua palavra-passe.\n\nSe a conta foi criada por engano, pode ignorar esta mensagem.",
"login-throttled": "Realizou demasiadas tentativas de início de sessão com esta conta.\nAguarde $1 antes de tentar novamente, por favor.",
"login-abort-generic": "O início de sessão não teve êxito - Cancelado",
+ "login-migrated-generic": "A sua conta foi migrada e o seu nome de utilizador já não existe nesta wiki.",
"loginlanguagelabel": "Língua: $1",
"suspicious-userlogout": "O seu pedido para sair foi negado porque parece ter sido enviado por um navegador danificado ou por um proxy com cache.",
"createacct-another-realname-tip": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, ele será utilizado para atribuir-lhe crédito pelo seu trabalho.",
"showpreview": "Antever resultado",
"showdiff": "Mostrar alterações",
"blankarticle": "<strong>Aviso:</strong> A página que está prestes a criar está em branco. \nSe clicar \"{{int:savearticle}}\" outra vez, a página será criada sem qualquer conteúdo.",
- "anoneditwarning": "'''Aviso''': Não iniciou sessão.\nO seu endereço IP será registado no histórico de edições desta página.",
+ "anoneditwarning": "<strong>Aviso</strong>: Não iniciou sessão. O seu endereço IP será registado no histórico de edições desta página. Se <strong>[$1 iniciar sessão]</strong> ou <strong>[$2 criar uma conta]</strong>, as suas edições serão registadas com o seu nome de utilizador(a), bem como usufruir de outros benefícios.",
"anonpreviewwarning": "''Não iniciou sessão. Ao gravar, registará o seu endereço IP no histórico de edições da página.''",
"missingsummary": "'''Atenção:''' Não introduziu um resumo da edição.\nSe clicar novamente \"Gravar página\" a sua edição será gravada sem resumo.",
"missingcommenttext": "Introduza um comentário abaixo, por favor.",
"otherlanguages": "This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <code><nowiki>[[</nowiki>en:Interwiki article]]</code>.\n{{Identical|Otherlanguages}}",
"redirectedfrom": "The text displayed when a certain page is redirected to another page. Parameters:\n* $1 - the name of the page user came from",
"redirectpagesub": "Displayed under the page title of a page which is a redirect to another page, see [{{fullurl:Project:Translators|redirect=no}} Project:Translators] for example.\n\n{{Identical|Redirect page}}",
+ "redirectto": "Alt text of the arrow icon shown on redirect pages ([[commons:File:Sample redirect page.jpg]]).\n\n{{Identical|Redirect page}}",
"talkpageheader": "{{notranslate}}",
"lastmodifiedat": "This message is shown below each page, in the footer with the logos and links.\n\nParameters:\n* $1 - date\n* $2 - time\nSee also:\n* {{msg-mw|Lastmodifiedatby}}",
"viewcount": "Used as page-view counter. Parameters:\n* $1 - number of pageviews",
"userlogin-resetpassword-link": "Used as link text in the login form.\n\nThe link points to the local page [[Special:PasswordReset]].\n\nSee example: [[Special:UserLogin]]\n\nuserlogin-resetpassword-link may have to be shorter than the old {{msg-mw|userlogin-resetlink}}.\n{{Identical|Forgot your password}}",
"helplogin-url": "{{doc-important|Do not translate the namespace name <code>Help</code>.}}\nUsed as name of the page that provides information about logging into the wiki.\n\nUsed as a link target in the message {{msg-mw|Userlogin-helplink}}.",
"userlogin-helplink2": "Label for a link to login help.\n\nSee example: [[Special:UserLogin]]\n\nSee also:\n* {{msg-mw|Helplogin-url}}",
- "userlogin-loggedin": "Used as warning on [[Special:UserLogin]] when the current user is already logged in.\n\nFollowed by the Login form.\n\nSee example: [[Special:UserLogin]].\n\nParameters:\n* $1 - user name (used for display and for gender support)",
- "userlogin-createanother": "Used as label for the button on [[Special:UserLogin]] shown when the current user is already logged in.\n{{Identical|Create another account}}",
"createacct-emailrequired": "Label in create account form for email field when it is required.\n\nSee also:\n* {{msg-mw|Createacct-emailoptional}}\n{{Identical|E-mail address}}",
"createacct-emailoptional": "Label in vertical-layout create account form for email field when it is optional.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nSee also:\n* {{msg-mw|Createacct-emailrequired}}",
"createacct-email-ph": "Placeholder in vertical-layout create account form for email field.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
"createacct-submit": "Submit button on vertical-layout create account form.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
"createacct-another-submit": "Submit button of [[Special:UserLogin/signup]] ([[Special:CreateAccount]]) when accessed by a registered user.\n\nThe original means \"create an account in addition to the one you already have\"; sometimes, but not always, it means you are going to \"Create the account on behalf of somebody else\" or \"Create account for another\".\n{{Identical|Create another account}}",
"createacct-benefit-heading": "In vertical-layout create account form, the heading for the section describing the benefits of creating an account. See example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nIf in your language you need to know the gender of the name for the wiki (which is the subject of the English sentence), please adapt the sentence as much as you need for your translation to fit.",
- "createacct-benefit-icon1": "In vertical-layout create account form, the CSS style for the div next to the first benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
- "createacct-benefit-head1": "In vertical-layout create account form, the text in the heading for the first benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body1}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
+ "createacct-benefit-icon1": "In vertical-layout create account form, the CSS style for the div next to the first benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
+ "createacct-benefit-head1": "In vertical-layout create account form, the text in the heading for the first benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body1}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
"createacct-benefit-body1": "In vertical-layout create account form, the text for the first benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head1}} (number of edits).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of edits\n{{Identical|Edit}}",
- "createacct-benefit-icon2": "In vertical-layout create account form, the CSS style for the div next to the second benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
- "createacct-benefit-head2": "In vertical-layout create account form, the text in the heading for the second benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body2}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
+ "createacct-benefit-icon2": "In vertical-layout create account form, the CSS style for the div next to the second benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
+ "createacct-benefit-head2": "In vertical-layout create account form, the text in the heading for the second benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body2}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
"createacct-benefit-body2": "In vertical-layout create account form, the text for the second benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head2}} (number of pages).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of pages\n{{Identical|Page}}",
- "createacct-benefit-icon3": "In vertical-layout create account form, the CSS style for the div next to the third benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
- "createacct-benefit-head3": "In vertical-layout create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body3}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]",
+ "createacct-benefit-icon3": "In vertical-layout create account form, the CSS style for the div next to the third benefit. If you replace this you will need probably need to adjust CSS.\n\nUsed as a CSS class name.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
+ "createacct-benefit-head3": "In vertical-layout create account form, the text in the heading for the third benefit. Do not edit the magic word; if you replace it you will probably need to adjust CSS.\n\nFollowed by the message {{msg-mw|Createacct-benefit-body3}}.\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup&useNew=1}} Special:UserLogin?type=signup&useNew=1]",
"createacct-benefit-body3": "In vertical-layout create account form, the text for the third benefit.\n\nPreceded by the message {{msg-mw|Createacct-benefit-head3}} (number of contributors).\n\nSee example: [{{canonicalurl:Special:UserLogin|type=signup}} Special:UserLogin?type=signup]\n\nParameters:\n* $1 - number of contributors (users)",
"badretype": "Used as error message when the new password and its retype do not match.",
"userexists": "Used as error message in creating a user account.",
"createaccount-text": "Body of the email sent to the email address entered at [[Special:CreateAccount]] when one user creates an account for another and clicks the checkbox labelled:\n* {{msg-mw|Createaccountmail}}\n\nParameters:\n* $1 - (Unused) IP address\n* $2 - the name entered as username\n* $3 - a password (randomly generated)\n* $4 - a URL to the wiki ('<' + server name + script name + '>')\n* $5 - (Unused) number of days to password expiry date",
"login-throttled": "Error message shown at [[Special:UserLogin]] after the user has tried to login with incorrect password too many times.\n\nThe user has to wait a certain time before trying to log in again.\n\nParameters:\n* $1 - the time to wait before the next login attempt. Automatically formatted using the following duration messages:\n** {{msg-mw|Duration-millennia}}\n** {{msg-mw|Duration-centuries}}\n** {{msg-mw|Duration-decades}}\n** {{msg-mw|Duration-years}}\n** {{msg-mw|Duration-weeks}}\n** {{msg-mw|Duration-days}}\n** {{msg-mw|Duration-hours}}\n** {{msg-mw|Duration-minutes}}\n** {{msg-mw|Duration-seconds}}\n\nThis is a protection against robots trying to find the password by trying lots of them.\nThe number of attempts and waiting time are configured via [[mw:Manual:$wgPasswordAttemptThrottle|$wgPasswordAttemptThrottle]].\nThis message is used in html.\n{{identical|Login throttled}}",
"login-abort-generic": "The generic unsuccessful login message is used unless otherwise specified by hook writers",
+ "login-migrated-generic": "The generic unsuccessful login message when the user's account has been updated, and their username no longer exist",
"loginlanguagelabel": "Used on [[Special:UserLogin]] if $wgLoginLanguageSelector is true. Parameters:\n* $1 - a pipe-separated list built from the names that appear in the message {{msg-mw|Loginlanguagelinks}}.\n{{Identical|Language}}",
"loginlanguagelinks": "{{notranslate}}",
"suspicious-userlogout": "Used when the logout request looks suspicious, in Special:UserLogout.",
"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}}",
"blankarticle": "Notice displayed once after the user tries to save an empty page.",
- "anoneditwarning": "Shown when editing a page anonymously.\nSee also:\n* {{msg-mw|Sf autoedit anoneditwarning}}\n* {{msg-mw|Wikibase-anonymouseditwarning-property}}\n* {{msg-mw|Wikibase-anonymouseditwarning-item}}\n* {{msg-mw|Anonpreviewwarning}}",
+ "anoneditwarning": "Shown when editing a page anonymously.\n\nParameters:\n* $1 – A link to log in, <nowiki>{{fullurl:Special:UserLogin|returnto={{FULLPAGENAMEE}}}}</nowiki>\n* $2 – A link to sign up, <nowiki>{{fullurl:Special:UserLogin/signup|returnto={{FULLPAGENAMEE}}}}</nowiki>\n\nSee also:\n* {{msg-mw|Sf autoedit anoneditwarning}}\n* {{msg-mw|Wikibase-anonymouseditwarning-property}}\n* {{msg-mw|Wikibase-anonymouseditwarning-item}}\n* {{msg-mw|Anonpreviewwarning}}",
"anonpreviewwarning": "See also:\n* {{msg-mw|Anoneditwarning}}",
"missingsummary": "The text \"edit summary\" is in {{msg-mw|Summary}}.\n\nSee also:\n* {{msg-mw|Missingcommentheader}}\n* {{msg-mw|Savearticle}}",
"missingcommenttext": "This message is shown, when the textbox by a new-section is empty.",
"session_fail_preview_html": "Used as error message in Preview page.",
"token_suffix_mismatch": "Error message in Preview page.\n\nSee also:\n* {{msg-mw|Token suffix mismatch}}\n* {{msg-mw|Session fail preview}}\n* {{msg-mw|Edit form incomplete}}",
"edit_form_incomplete": "Error message in Preview page.\n\nSee also:\n* {{msg-mw|Token suffix mismatch}}\n* {{msg-mw|Session fail preview}}\n* {{msg-mw|Edit form incomplete}}",
- "editing": "Shown as page title when editing a page. Parameters:\n* $1 - the name of the page that is being edited. e.g. \"Editing Main Page\"\n{{Related|Editing}}",
- "creating": "Shown as page title when creating a page. Parameters:\n* $1 - the name of the page that is being created. Example: \"Creating Main Page\".\n{{Related|Editing}}",
+ "editing": "Shown as page title when editing a page. Parameters:\n* $1 - the name of the page that is being edited. e.g. \"Editing Main Page\"\n{{Related|Editing}}\n{{Identical|Editing}}",
+ "creating": "Shown as page title when creating a page. Parameters:\n* $1 - the name of the page that is being created. Example: \"Creating Main Page\".\n{{Related|Editing}}\n{{Identical|Creating}}",
"editingsection": "This message displays at the top of the page when a user is editing a page section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
"editingcomment": "This message displays at the top of the page when a user is creating a new section. Parameters:\n* $1 - page name\n{{Related|Editing}}",
"editconflict": "Used as title of error message. Parameters:\n* $1 - page title",
"group-bureaucrat": "{{doc-group|bureaucrat}}",
"group-suppress": "{{doc-group|suppress}}\nThis is an optional (disabled by default) user group, meant for the [[mw:RevisionDelete|RevisionDelete]] feature, to change the visibility of revisions through [[Special:RevisionDelete]].\n\n{{Identical|Oversight}}",
"group-all": "The name of the user group that contains all users, including anonymous users\n\n{{Identical|All}}",
- "group-user-member": "{{doc-group|user|member}}",
+ "group-user-member": "{{doc-group|user|member}}\n{{Identical|User}}",
"group-autoconfirmed-member": "{{doc-group|autoconfirmed|member}}",
"group-bot-member": "{{doc-group|bot|member}}",
- "group-sysop-member": "{{doc-group|sysop|member}}",
+ "group-sysop-member": "{{doc-group|sysop|member}}\n{{Identical|Administrator}}",
"group-bureaucrat-member": "{{doc-group|bureaucrat|member}}",
"group-suppress-member": "{{doc-group|suppress|member}}\nThis is a member of the optional (disabled by default) user group, meant for the [[mw:RevisionDelete|RevisionDelete]] feature, to change the visibility of revisions through [[Special:RevisionDelete]].\n\n{{Identical|Oversight}}",
- "grouppage-user": "{{doc-group|user|page}}",
+ "grouppage-user": "{{doc-group|user|page}}\n{{Identical|User}}",
"grouppage-autoconfirmed": "{{doc-group|autoconfirmed|page}}",
"grouppage-bot": "{{doc-group|bot|page}}\n{{Identical|Bot}}",
"grouppage-sysop": "{{doc-group|sysop|page}}",
"ipb-confirmhideuser": "Used as confirmation message in [[Special:Block]].\n\nSee also:\n* {{msg-mw|Ipb-blockingself}}",
"ipb-confirmaction": "Confirmation message displayed to users asking them to think again before really blocking someone.",
"ipb-edit-dropdown": "Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Delete-edit-reasonlist}}\n* {{msg-mw|Protect-edit-reasonlist}}",
- "ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}",
+ "ipb-unblock-addr": "Used as page title in [[Special:Block]], if the target user is specified.\n\nParameters:\n* $1 - target username\n\nSee also:\n* {{msg-mw|Ipb-unblock}}\n{{Identical|Unblock}}",
"ipb-unblock": "Used as page title in [[Special:Block]], if the target user is not specified.\n\nSee also:\n* {{msg-mw|Ipb-unblock-addr}}",
"ipb-blocklist": "Used as link text in [[Special:Block]].\n\nThe link points to Specil:BlockList.",
"ipb-blocklist-contribs": "Used in [[Special:Block]].\n* $1 - target username",
"blocklist-addressblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n{{Related|Blocklist-blocks}}",
"blocklist-rangeblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n\nFor an explanation of \"range blocks\", see [[mw:Help:Range_blocks]]\n{{Related|Blocklist-blocks}}",
"blocklist-timestamp": "This is a column header for dates and times in the table on the page [[Special:BlockList]].\n{{Identical|Timestamp}}",
- "blocklist-target": "The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].",
+ "blocklist-target": "The table header for the column containing the block targets, that is user names or IP-addresses linked to their respective user pages, in the table on the page [[Special:BlockList]].\n{{Identical|Target}}",
"blocklist-expiry": "This is a column header in the table on the page [[Special:BlockList]].\n{{Identical|Expire}}",
"blocklist-by": "This is a column header in the table on the page [[Special:BlockList]].",
"blocklist-params": "This is a column header in the table on the page [[Special:BlockList]].",
"lockfilenotwritable": "'No longer needed' on wikipedia.",
"databasenotlocked": "Used as error message in [[Special:UnlockDB]].\nThe title of this error message is {{msg-mw|Lockdb}}.\n\nSee also:\n* {{msg-mw|Lockdb|title}}\n* {{msg-mw|Databasenotlocked|message}}",
"lockedbyandtime": "Used as part of the message when a database is locked through [[Special:LockDB]]. Parameters:\n* $1 is the user that locked the database.\n* $2 is the date on which the lock was made\n* $3 is the time at which the lock was made",
- "move-page": "Used as page title of [[Special:MovePage]] to move pages.\n\nSee example: [[Special:MovePage/Portal:En]].\n\nParameters:\n* $1 - the name of the page to be moved (without link)",
+ "move-page": "Used as page title of [[Special:MovePage]] to move pages.\n\nSee example: [[Special:MovePage/Portal:En]].\n\nParameters:\n* $1 - the name of the page to be moved (without link)\n{{Identical|Move}}",
"movepage-summary": "{{doc-specialpagesummary|movepage}}",
"move-page-legend": "Legend of the fieldset around the input form of [[Special:MovePage/testpage]].\n\nSee also:\n* {{msg-mw|movearticle|label for old title}}\n* {{msg-mw|newtitle|label for new title}}\n* {{msg-mw|movereason|label for textarea}}\n* {{msg-mw|movetalk|label for checkbox}}\n* {{msg-mw|move-leave-redirect|label for checkbox}}\n* {{msg-mw|fix-double-redirects|label for checkbox}}\n* {{msg-mw|move-subpages|label for checkbox}}\n* {{msg-mw|move-talk-subpages|label for checkbox}}\n* {{msg-mw|move-watch|label for checkbox}}\n{{Identical|Move page}}",
"movepagetext": "Introduction shown when moving a page ([[Special:MovePage]]).\n\nSpecial pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}\n\nSee also:\n* {{msg-mw|Movepagetext-noredirectfixer}}",
"category-empty": "''Questa categoria cuntegna actualmain nagins artitgels e naginas datotecas.''",
"hidden-categories": "{{PLURAL:$1|Categoria zuppentada|Categorias zuppentadas}}",
"hidden-category-category": "Categorias zuppentadas",
- "category-subcat-count": "{{PLURAL:$2|Questa categoria cuntegna be suandanta sutcategoria.|Questa categoria cuntegna {{PLURAL:$1|la suandanta sutcategoria|las $1 suandantas sutcategorias}} da totalmain $2 sutcategoria.}}",
+ "category-subcat-count": "{{PLURAL:$2|Questa categoria cuntegna be suandanta sutcategoria.|Questa categoria cuntegna {{PLURAL:$1|la suandanta sutcategoria|las $1 suandantas sutcategorias}} da totalmain $2 sutcategorias.}}",
"category-subcat-count-limited": "Questa categoria cuntegna {{PLURAL:$1|suandanta subcategoria|suandantas $1 subcategorias}}:",
"category-article-count": "{{PLURAL:$2|Questa categoria cuntegna be la suandanta pagina.|{{PLURAL:$1|La suandanta pagina è|Las $1 suandantas paginas èn}} en questa categoria che cuntegna totalmain $2 paginas.}}",
"category-article-count-limited": "{{PLURAL:$1|La suandanta pagina è|Las suandantas $1 paginas èn}} actualmain en la categoria.",
"gotaccountlink": "T'annunziar",
"userlogin-resetlink": "Emblidà tias datas per s'annunziar?",
"userlogin-resetpassword-link": "Has emblidà tes pled-clav?",
- "userlogin-loggedin": "Ti es gia t'annunzià sco {{GENDER:$1|$1}}.\nDovra il suandant formular per t'annunziar cun in auter conto.",
- "userlogin-createanother": "Crear in auter conto",
"createacct-emailrequired": "Adressa dad e-mail",
"createacct-emailoptional": "Adressa dad e-mail (opziunal)",
"createacct-email-ph": "Endatescha ti'adressa dad e-mail",
"import": "Impurtar paginas",
"importinterwiki": "Import transwiki",
"import-interwiki-text": "Tscherna in wiki ed in titel da pagina per importar.\nLas datas da las versiuns ed ils nums dals contribuents vegnan mantegnids.\nTut ils imports transwiki vegnan registrads en il [[Special:Log/import|protocol d'imports]].",
- "import-interwiki-source": "Wiki/pagina da funtauna:",
"import-interwiki-history": "Copiar l'entira cronologia da questa pagina",
"import-interwiki-templates": "Includer tut ils models",
"import-interwiki-submit": "Importar",
"category_header": "Pagini din categoria „$1”",
"subcategories": "Subcategorii",
"category-media-header": "Fișiere media din categoria „$1”",
- "category-empty": "''Această categorie nu conține în acest moment niciun articol sau fișier media.''",
+ "category-empty": "''Această categorie nu conține momentan nici o pagină sau fișier media.''",
"hidden-categories": "{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}}",
"hidden-category-category": "Categorii ascunse",
"category-subcat-count": "{{PLURAL:$2|Această categorie conține doar următoarea subcategorie.|Această categorie conține {{PLURAL:$1|următoarea subcategorie|următoarele $1 subcategorii|următoarele $1 de subcategorii}}, dintr-un total de $2.}}",
"userlogin-resetlink": "Ați uitat datele de autentificare?",
"userlogin-resetpassword-link": "V-ați uitat parola?",
"userlogin-helplink2": "Ajutor la autentificare",
- "userlogin-loggedin": "Sunteți deja {{GENDER:$1|autentificat|autentificată}} ca {{GENDER:$1|$1}}.\nUtilizați formularul de mai jos pentru a vă autentifica cu alt nume de utilizator.",
- "userlogin-createanother": "Creează un alt cont",
"createacct-emailrequired": "Adresă de e-mail",
"createacct-emailoptional": "Adresă de e-mail (opțională)",
"createacct-email-ph": "Introduceți adresa dumnevoastră de e-mail",
"createaccount-text": "Cineva a creat un cont asociat adresei dumneavoastră de e-mail pe {{SITENAME}} ($4) numit „$2” și având parola „$3”.\nEste de dorit să vă autentificați și să schimbați parola cât mai repede.\n\nIgnorați acest mesaj dacă crearea contului s-a produs în urma unei greșeli.",
"login-throttled": "Ați avut prea multe încercări recente de a vă autentifica.\nVă rugăm să așteptați $1 până să reîncercați.",
"login-abort-generic": "Procesul de autentificare a eșuat și a fost abandonat",
+ "login-migrated-generic": "Contul dumneavoastră a fost migrat, iar numele de utilizator nu mai există pe acest wiki.",
"loginlanguagelabel": "Limba: $1",
"suspicious-userlogout": "Cererea dumneavoastră de a închide sesiunea a fost refuzată întrucât pare că a fost trimisă printr-o eroare a navigatorului sau de un proxy memorat în cache.",
"createacct-another-realname-tip": "Numele real este opțional.\nDacă decideți furnizarea sa, acesta va fi folosit pentru a atribui utilizatorului munca sa.",
"showpreview": "Previzualizare",
"showdiff": "Afișare diferențe",
"blankarticle": "<strong>Atenție:</strong> Pagina pe care o creați este goală.\nDacă faceți din nou clic pe „{{int:savearticle}}”, pagina va fi creată fără niciun conținut.",
- "anoneditwarning": "'''Atenție:''' Nu v-ați autentificat. Adresa IP vă va fi înregistrată în istoricul acestei pagini.",
+ "anoneditwarning": "<strong>Atenție:</strong> Nu v-ați autentificat. Adresa dumneavoastră IP va fi vizibilă în mod public dacă efectuați modificări. Dacă vă <strong>[$1 autentificați]</strong> sau vă <strong>[$2 creați un cont]</strong>, modificările dumneavoastră vor fi asociate numelui de utilizator, pe lângă alte beneficii.",
"anonpreviewwarning": "''Nu v-ați autentificat. Dacă salvați pagina adresa dumneavoastră IP va fi înregistrată în istoric.''",
"missingsummary": "'''Atenție:''' Nu ați completat caseta „descriere modificări”. Dacă apăsați din nou butonul „salvează pagina” modificările vor fi salvate fără descriere.",
"missingcommenttext": "Vă rugăm să introduceți un comentariu.",
"Kaganer",
"McDutchie",
"Reder",
- "아라"
+ "아라",
+ "C.R."
]
},
"tog-underline": "Collegaminde sottolinèate:",
"gotaccountlink": "Tràse",
"userlogin-resetlink": "T'è scurdate le dettaglie pe trasè?",
"userlogin-resetpassword-link": "T'è scurdate 'a passuord toje?",
- "userlogin-loggedin": "Tu ste jndre ggià cumme a {{GENDER:$1|$1}}.\nAuse 'u module aqquà sotte pe trasè cumme a 'n'otre utende.",
- "userlogin-createanother": "Ccreje 'n'otre cunde",
"createacct-emailrequired": "Indirizze email",
"createacct-emailoptional": "Indirizze email (opzionale)",
"createacct-email-ph": "Mitte l'indirizze email tune",
"randomincategory": "Pàggene a uecchije jndr'à categorije",
"randomincategory-invalidcategory": "\"$1\" non g'è 'nu nome d'a categorije valide.",
"randomincategory-nopages": "Non ge stonne pàggene jndr'à [[:Category:$1]].",
- "randomincategory-selectcategory": "Pigghie pàggene a uecchije da 'a categorije: $1 $2.",
- "randomincategory-selectcategory-submit": "Véje",
"randomredirect": "Redirezionamende a uecchie",
"randomredirect-nopages": "Non ge stonne redirezionaminde jndr'à 'u namespace \"$1\".",
"statistics": "Statisteche",
"undelete-search-submit": "Cirche",
"undelete-no-results": "Non ge stonne pàggene acchiate jndr'à l'archivije de le scangellaminde.",
"undelete-filename-mismatch": "Non ge pozze repristinà 'a revisione d'u file cu orarie $1: nome d'u file errate",
- "undelete-bad-store-key": "Cannot undelete file revision with timestamp $1: file was missing before deletion.\nNon ge pozze repristinà 'a revisione d'u file cu orarie $1: 'u file ha state perdute apprime da scangellazione.",
+ "undelete-bad-store-key": "Non ge pozze repristinà 'a revisione d'u file cu orarie $1: 'u file ha state perdute apprime da scangellazione.",
"undelete-cleanup-error": "Errore scangellanne 'n'archivije de file non ausate \"$1\".",
- "undelete-missing-filearchive": "Non ge pozze repristinà 'u file archiviate cu ID $1 purcè non ge stè jndr'à 'u database.\nPò essere ca già ha state scangellate.",
+ "undelete-missing-filearchive": "Non ge pozze repristinà 'u file archiviate cu ID $1 purcè non ge stè jndr'à 'u database.\nPò essere ca già ha state repristinate.",
"undelete-error": "Errore pàgene none scangellate",
"undelete-error-short": "Errore file non recuperate: $1",
"undelete-error-long": "Errore ca s'onne acchiate quanne amme pruvate a reprisitinà 'u file:\n\n$1",
"import": "Pàggene 'mbortete",
"importinterwiki": "'Mborte da Transuicchi",
"import-interwiki-text": "Schacchie 'na Uicchi e 'nu titele de pàgene da 'mbortà.\nLe date d'a revisione e 'u nome de le cangiature avènene preservate.\nTutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[Special:Log/import|archivije de le 'mbortaziune]].",
- "import-interwiki-source": "Sorgende Uicchi/vosce:",
"import-interwiki-history": "Copie tutte 'a sotrie de le versiune de sta pàgene",
"import-interwiki-templates": "Inglude tutte le template",
"import-interwiki-submit": "'Mborte",
"broken-file-category": "Страницы с неработающими файловыми ссылками",
"about": "Описание",
"article": "Статья",
- "newwindow": "(в новом окне)",
+ "newwindow": " (в новом окне)",
"cancel": "Отменить",
"moredotdotdot": "Далее…",
"morenotlisted": "Этот список не является полным.",
"userlogin-resetlink": "Забыли данные для входа?",
"userlogin-resetpassword-link": "Сбросить ваш пароль?",
"userlogin-helplink2": "Помощь по входу",
- "userlogin-loggedin": "Вы уже вошли как {{GENDER:$1|$1}}.\nИспользуйте форму ниже, чтобы войти под другой учётной записью.",
- "userlogin-createanother": "Создать другую учётную запись",
"createacct-emailrequired": "Адрес электронной почты",
"createacct-emailoptional": "Адрес электронной почты (необязательно)",
"createacct-email-ph": "Введите свой адрес электронной почты",
"createaccount-text": "Кто-то создал учётную запись «$2» на сервере проекта {{SITENAME}} ($4), указав ваш адрес электронной почты. \n\nПароль учётной записи — «$3». Вам следует авторизоваться на сайте и изменить пароль.\n\nПроигнорируйте данное сообщение, если учётная запись была создана по ошибке.",
"login-throttled": "Вы сделали слишком много попыток представиться системе.\nПожалуйста, подождите $1 перед тем, как попробовать снова.",
"login-abort-generic": "Неудачная попытка представиться системе",
+ "login-migrated-generic": "Ваша учётная запись была перенесена, и ваше имя участника больше не существует в этой вики.",
"loginlanguagelabel": "Язык: $1",
"suspicious-userlogout": "Ваш запрос на завершение сеанса отклонён, так как он похож на запрос, отправленный некорректным браузером или кэширующим прокси.",
"createacct-another-realname-tip": "Настоящее имя (необязательное поле).\nЕсли вы укажете его, то оно будет использовано для того, чтобы показать, кем была внесена правка страницы.",
"showpreview": "Предварительный просмотр",
"showdiff": "Внесённые изменения",
"blankarticle": "<strong>Предупреждение:</strong> Страница, которую вы создаёте, пуста.\nЕсли снова нажмёте кнопку «{{int:savearticle}}», страница будет создана без какого-либо содержания.",
- "anoneditwarning": "'''Внимание!''' Вы не авторизовались на сайте.\nВ истории изменений этой страницы будет записан ваш IP-адрес.",
+ "anoneditwarning": "<strong>Внимание!</strong> Вы не авторизовались на сайте. Ваш IP-адрес будет публично видимым, если вы будете вносить любые правки. Если вы <strong>[$1 войдёте]</strong> или <strong>[$2 создадите учётную запись]</strong>, правки вместо этого будут связаны с вашим именем пользователя, а также у вас появятся другие преимущества.",
"anonpreviewwarning": "''Вы не представились системе. Сохранение приведёт к записи вашего IP-адреса в историю изменений страницы.''",
"missingsummary": "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «{{int:savearticle}}», ваши изменения будут сохранены без комментария.",
"missingcommenttext": "Пожалуйста, введите ниже ваше сообщение.",
"pageinfo-hidden-categories": "{{PLURAL:$1|1=Скрытая категория|Скрытых категорий}} ($1)",
"pageinfo-templates": "{{PLURAL:$1|1=Шаблон|Шаблонов}} ($1)",
"pageinfo-transclusions": "{{PLURAL:$1|1=Включаемая страница|Включаемых страниц}} ($1)",
- "pageinfo-toolboxlink": "Сведения о странице",
+ "pageinfo-toolboxlink": "Сведения о странице",
"pageinfo-redirectsto": "Перенаправление",
"pageinfo-redirectsto-info": "сведения",
"pageinfo-contentpage": "Учитывается счётчиком как содержательная страница",
"tog-watchdefault": "Уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
"tog-watchmoves": "Аатын уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
"tog-watchdeletion": "Соппут сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис",
+ "tog-watchrollback": "Төннөрбүт сирэйдэрбин кэтэбилим тиһигэр киллэрэн ис",
"tog-minordefault": "Уларытыылары атын этиллибэтэҕинэ кыра уларытыы курдук бэлиэтээ",
"tog-previewontop": "Хайдах буоларын уларытар түннүк үрдүнэн (иннигэр) көрдөр",
"tog-previewonfirst": "Хайдах буоларын тута көрдөр",
"hidetoc": "көрдөрүмэ",
"collapsible-collapse": "Сабыы",
"collapsible-expand": "Тэнитии",
+ "confirmable-confirm": "{{GENDER:$1|Бигэргэтэҕин}} дуо?",
+ "confirmable-yes": "Сөп",
+ "confirmable-no": "Суох",
"thisisdeleted": "$1 көрдөрөбүн эбэтэр хостуубун дуу?",
"viewdeleted": "$1 көрдөрөбүн?",
"restorelink": "{{PLURAL:$1|биир сотторуллубут көннөрүү|$1 сотторуллубут көннөрүүлэр}}",
"databaseerror-text": "Билии олоҕор алҕас таҕыста.\nБырагыраамма алҕаһа буолуон сөп.",
"databaseerror-textcl": "Билии олоҕор алҕас таҕыста.",
"databaseerror-query": "Ыйытык: $1",
+ "databaseerror-function": "Функция: $1",
"databaseerror-error": "Алҕас: $1",
"laggedslavemode": "Болҕой: Бу сирэй бүтэһик уларытыылара суох буолуон сөп",
"readonly": "Билии олоҕун уларытар бобуллубут",
"invalidtitle-knownnamespace": "«$2» аат далыгар маннык тиэкистээх «$3» сатаммат аат",
"invalidtitle-unknownnamespace": "Биллибэт аат дала $1 нүөмэрдээх, \"$2\" тиэкистээх сатаммат аат",
"exception-nologin": "Ааккын билиһиннэрбэтэххин",
- "exception-nologin-text": "Маны көрөргө эбэтэр оҥорорго [[Special:Userlogin|ааккын билиһиннэриэхтээххин]].",
+ "exception-nologin-text": "Маны көрөргө эбэтэр оҥорорго ааккын билиһиннэриэхтээххин.",
"exception-nologin-text-manual": "Көрөргө эбэтэр оҥорорго маны гыныахтааххын: $1.",
"virus-badscanner": "Сатаммата. Вирус сканера биллибэтэ: ''$1''",
"virus-scanfailed": "скан сыыһата (куода $1)",
"userlogin-resetlink": "Киирэр тылгын умнубуккун дуо?",
"userlogin-resetpassword-link": "Киирии тылгын санаттараҕын дуо?",
"userlogin-helplink2": "Киирэргэ көмө",
- "userlogin-loggedin": "Маннык аатынан киирбиккин {{GENDER:$1|$1}}.\nАтын аатынан киирэргэ аллара көстөр форманы туһан.",
- "userlogin-createanother": "Атын аатынан бэлиэтэн",
"createacct-emailrequired": "Email аадырыс",
"createacct-emailoptional": "Email аадырыс (булгуччута суох)",
"createacct-email-ph": "Эл аадырыскын суруй",
"preview": "Холоон көрүү",
"showpreview": "Уларытыах иннинэ көрүү",
"showdiff": "Уларытыылар",
+ "blankarticle": "<strong>Сэрэтии:</strong> Оҥорор сирэйиҥ кураанах.\nБу тимэҕи «{{int:savearticle}}» хос баттаатаххына кураанах сирэй оҥоһуллуо.",
"anoneditwarning": "'''Болҕой:''' Системаҕа киирбэтэххин. Онон аатыҥ оннугар IP аадаырыһыҥ бу сирэй историятыгар киириэ.",
"anonpreviewwarning": "''Эн тиһиккэ ааккын эппэттэххин. Уларытыыгын бигэргэттэххинэ IP-аадырыһыҥ сирэй устуоруйатыгар суруллуо.''",
"missingsummary": "'''Санатыы:''' Уларыппытыҥ кылгас быһаарыытын суруйбатаххын. Уларытыыны бигэргэттэххинэ улартытыыҥ хос быһаарыыта суох барыа.",
"parser-template-recursion-depth-warning": "($1) халыып рекурсиятын муҥура бүппүт (Превышен предел глубины рекурсии)",
"language-converter-depth-warning": "Тыл конвертерын дириҥин хааччаҕа куоһарыллыбыт ($1)",
"node-count-exceeded-category": "Түмүктэрин ахсаана аһара барбыт сирэйдэр",
+ "node-count-exceeded-category-desc": "Сирэй түмүгүн ахсаана сиэри таһынан барбыт.",
"node-count-exceeded-warning": "Сирэй түмүгүн ахсаана таһынан барбыт",
"expansion-depth-exceeded-category": "Аһыллыытын дириҥэ куоһарыллыбыт сирэйдэр",
+ "expansion-depth-exceeded-category-desc": "Сирэй аһыллыытын дириҥэ куоһарыллыбыт.",
"expansion-depth-exceeded-warning": "Сирэйгэ угуллубут билэлэр аһара элбээбиттэр",
"parser-unstrip-loop-warning": "Сабыллыбатах pre көһүннэ",
"parser-unstrip-recursion-limit": "Рекурсия ахсаана таһынан барбыт ($1)",
"currentrev": "Билиҥҥи барыл",
"currentrev-asof": "Билиҥҥи торум манна: $1",
"revisionasof": "$1 барыл",
- "revision-info": "Ð\92еÑ\80Ñ\81иÑ\8f оÑ\82 $1; $2",
+ "revision-info": "Ð\91аÑ\80Ñ\8bл $1; {{GENDER:$6|$2}}$7",
"previousrevision": "←Инники барыл",
"nextrevision": "Аныгыскы барыл→",
"currentrevisionlink": "Билиҥҥи барыл",
"rev-deleted-event": "(бэлиэтээһин дьайыыта сотулунна)",
"rev-deleted-user-contribs": "[кыттааччы аата эбэтэр IP-аадырыһа сотуллубуттар — уларытыы көстүбэт оҥоһуллубут]",
"rev-deleted-text-permission": "Сирэй бу барыла '''сотуллубут'''.\nБыһаарыыта [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} манна] баар буолуон сөп.",
+ "rev-suppressed-text-permission": "Сирэй бу барыла <strong>кистэммит</strong>.\nБыһаарыы [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кистээһин сурунаалыгар] баар.",
"rev-deleted-text-unhide": "Сирэй ити барыла '''сотуллубут'''.\nБаҕар ол туһунан [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} сотуу сурунаалыгар] баара буолуо.\nОл да буоллар эн дьаһабыл буоларыҥ быһыытынан [$1 барылы көрүөххүн сөп].",
"rev-suppressed-text-unhide": "Сирэй бу барыла '''кистэммит'''.\nБыһаарыы баҕара [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} кистээһин сурунаалыгар] баара буолуо.\nЭн дьаһабыл буоларыҥ быһыытынан [ол барылы көрүөххүн $1] сөп.",
"rev-deleted-text-view": "Ыстатыйа бу барыла '''сотуллубут'''.\nОл эрэн ону көрүөххүн сөп.\nТоҕо сотуллубутун быһаарыыта [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} манна] баар буолуон сөп.",
"revdelete-text-text": "Сотуллубут барыллар уруккутун курдук сирэй устуоруйатыгар көстүөхтэрэ, ол эрэн иһинээҕитэ сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.",
"revdelete-text-file": "Билэ сотуллубут барыллара уруккутун курдук сирэй устуоруйатыгар көстүөхтэрэ, ол эрэн иһинээҕитэ сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.",
"logdelete-text": "Сурунаалтан сотуллубут уруккутун курдук сурунаал устуоруйатыгар көстүөҕэ, ол эрэн иһинээҕитин сорҕото киэҥ эйгэҕэ көрдөрүллүө суоҕа.",
- "revdelete-text-others": "Өскөтүн эбии хааччах турбатах буоллаҕына, {{grammar:genitive|{{SITENAME}}}} атын дьаһабыллара урукку курдук кистэммити көрөр уонна чөлүгэр түһэрэр кыахтаахтар.",
+ "revdelete-text-others": "Өскөтүн эбии хааччах турбатах буоллаҕына, атын дьаһабыллар урукку курдук кистэммити көрөр уонна чөлүгэр түһэрэр кыахтаахтар.",
"revdelete-confirm": "Бука диэн кырдьык бу дьайыыны онороргун, содула туох буоларын өйдүүргүн уонна [[{{MediaWiki:Policy-url}}|сиэри]] тутуһаргын бигэргэт.",
"revdelete-suppress-text": "Кистээһин маннык түбэлтэлэргэ '''эрэ''' оҥоһуллар:\n* Баһааҕырдар буолуон сөптөөҕү суруйуу\n* Киһи бэйэтин туһунан тоҕооһо суохтук суруллубут буоллаҕына\n*: <em>дьиэтин аадырыһа, төлөппүөннэрин нүөмэрэ, пааспарын нүөмэрэ уо.д.а.</em>",
"revdelete-legend": "Хааччахтары туруоруу:",
"randomincategory": "Категория түбэспиччэ ыстатыйата",
"randomincategory-invalidcategory": "\"$1\" диэн категория суох эбит.",
"randomincategory-nopages": "Бу категорияҕа [[:Category:$1]] киирэр ыстатыйалар суохтар.",
- "randomincategory-selectcategory": "Категория түбэспиччэ сирэйигэр көс: $1 $2.",
- "randomincategory-selectcategory-submit": "Көс",
"randomredirect": "Түбэспиччэ утаарыы",
"randomredirect-nopages": "Бу аат далыгар($1) көһөрөр ыйынньыктар суохтар.",
"statistics": "Статистика",
"import": "Сирэйдэри импортааһын",
"importinterwiki": "Биики ыккардынааҕы импорт",
"import-interwiki-text": "Биикини уонна импортанар сирэй аатын киллэр.\nУларытыылар күннэрэ-ыйдара уонна аапптардар ааттара оннуларынан хаалыахтара.\nБиики ыккардынааҕы импорт дьайыылара [[Special:Log/import|аналлаах сурунаалга]] суруллаллар.",
- "import-interwiki-source": "Ылыллыбыт биикитэ/сирэйэ:",
"import-interwiki-history": "Сирэй туох баар историятын көһөрөргө",
"import-interwiki-templates": "Бары халыыптары киллэр",
"import-interwiki-submit": "Импортаа",
},
"tog-underline": "Sutalìnia sos ligòngios",
"tog-hideminor": "Cua is acontzos minores in sa pàgina de is ùrtimas mudàntzias",
- "tog-hidepatrolled": "Cua sas mudas verificadas in sas ùrtimos càmbios",
+ "tog-hidepatrolled": "Cua is mudas verificadas in is ùrtimos càmbios",
"tog-newpageshidepatrolled": "Cua sas pàginas verificadas dae sa lista de sas pàginas noas",
"tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu sos càmbios, non sos prus reghentes ebbia",
"tog-usenewrc": "Pone in pare sos càmbios de cada pàgina in sos ùrtimos càmbios e in sa watchlist",
"tog-watchdefault": "Agiunghe pàginas e documentos chi apo cambiadu in sa watchlist mea",
"tog-watchmoves": "Agiunghe pàginas e documentos chi apo mòvidu in sa watchlist mea",
"tog-watchdeletion": "Agiunghe pàginas e documentos chi apo fuliadu in sa watchlist mea",
+ "tog-watchrollback": "Pone is pàginas innue apo fatu su rollback in is pàginas annotadas",
"tog-minordefault": "Marca comente minores pro difetu totu sos càmbios",
"tog-previewontop": "Ammustra s'anteprima in subra de sa casella de càmbiu e no in suta",
"tog-previewonfirst": "Ammustra s'anteprima pro sa prima muda",
"tog-enotifusertalkpages": "Imbia·mi una post.el. cando sa pàgina de sas cuntierras meas est cambiada",
"tog-enotifminoredits": "Imbia·mi una post.el. fintzas pro sos càmbios minores de sas pàginas e documentos",
"tog-enotifrevealaddr": "Faghe ischire s'indiritzu de sa post.el. mea in sas notìficas de sa post.els",
- "tog-shownumberswatching": "Ammustra su nùmeru de sos utentes chi sunt castiende sa pàgina",
+ "tog-shownumberswatching": "Ammustra su nùmeru de is impitadores chi ant annotadu sa pàgina",
"tog-oldsig": "Firma atuale:",
"tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligàmenes automàticos)",
"tog-uselivepreview": "Imprea sa funtzione \"anteprima bia\" (isperimentale)",
"tog-watchlisthideown": "Cua sas mudas meas dae sa watclist",
"tog-watchlisthidebots": "Cua sas mudas de sos bots dae sa watchlist",
"tog-watchlisthideminor": "Cua sos càmbios minores dae sa watchlist",
- "tog-watchlisthideliu": "Cua sos càmbios de sos utentes intrados dae sa watchlist",
- "tog-watchlisthideanons": "Cua sos càmbios de sos utentes anònimos dae sa watchlist",
+ "tog-watchlisthideliu": "Cua is càmbios de is impitadores identificados dae sa lista de pàginas annotadas",
+ "tog-watchlisthideanons": "Cua is càmbios de is impitadores anònimos dae sa lista de pàginas annotadas",
"tog-watchlisthidepatrolled": "Cua mudas verificadas dae sa watchlist",
- "tog-ccmeonemails": "Imbia·mi sas còpias de sas post.els chi imbio a sos àteros utentes",
+ "tog-ccmeonemails": "Imbia·mi sas còpias de is emails chi imbio a is àteros impitadores",
+ "tog-diffonly": "No ammustras su cuntènnidu de sa pàgina a pustis de sa bisura de is diferèntzias",
"tog-showhiddencats": "Ammustra sas categorias cuadas",
+ "tog-norollbackdiff": "Cua sa bisura de is diferèntzias a pustis de su rollback",
"tog-useeditwarning": "Amonestamì si lassu una pagina cun mudantzias chena de sarvai.",
"tog-prefershttps": "Imprea semper una lìnia segura candu fatzo s'intrada.",
"underline-always": "Semper",
"category_header": "Pàginas in sa categoria \"$1\"",
"subcategories": "Subcategorias",
"category-media-header": "Mèdios in sa categoria \"$1\"",
- "category-empty": "''In custa categoria non b't peruna pàgina o mèdiu.''",
+ "category-empty": "''In custa categoria non ddu at peruna pàgina o documentu multimediale.''",
"hidden-categories": "{{PLURAL:$1|Categoria cuada|Categorias cuadas}}",
"hidden-category-category": "Categorias cuadas",
- "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntenet un'ùnica subcategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa subcategoria inditada|$1 subcategorias inditadas}} in suta, de $2 totales.}}",
+ "category-subcat-count": "{{PLURAL:$2|Custa categoria cuntenet un'ùnica subcategoria ammustrada in suta.|Custa categoria cuntenet {{PLURAL:$1|sa subcategoria indicada|$1 subcategorias indicadas}} in suta, dae $2 totales.}}",
"category-subcat-count-limited": "Custa categoria tenet {{PLURAL:$1|una subcategoria, ammustrada|$1 subcategorias, ammustradas}} in suta.",
- "category-article-count": "{{PLURAL:$2|Custa categoria cuntenet feti sa pàgina chi sighit.|Custa categoria cuntenet {{PLURAL:$1|sa pàgina inditada|is $1 pàginas inditadas}} in suta, dae unu totale de $2.}}",
+ "category-article-count": "{{PLURAL:$2|Custa categoria cuntenet feti sa pàgina chi sighit.|Custa categoria cuntenet {{PLURAL:$1|sa pàgina indicada|is $1 pàginas indicadas}} in suta, dae unu totale de $2.}}",
"category-article-count-limited": "{{PLURAL:$1|Sa pàgina chi sighit est|Is $1 pàginas chi sighint sunt}} in custa categoria.",
"category-file-count": "{{PLURAL:$2|Custa categoria cuntenet feti su documentu chi sighit.|{{PLURAL:$1|Su documentu chi sighit est|Is $1 documentos chi sighint sunt}} in custa categoria, dae $2 totales.}}",
"category-file-count-limited": "{{PLURAL:$1|Su documentu chi sighit est|Is $1 documentos chi sighint sunt}} in sa categoria currente.",
"broken-file-category": "Pàginas cun ligàmenes a sos documentos non funtzionantes",
"about": "A propòsitu de",
"article": "Artìculu",
- "newwindow": "(aberit in una ventana noa)",
+ "newwindow": "(aberret in una bentana noa)",
"cancel": "Burra",
"moredotdotdot": "Àteru…",
"morenotlisted": "Sa lista no est cumpreta",
"mypage": "Pàgina",
- "mytalk": "Cuntierras meas",
+ "mytalk": "Cuntierras mias",
"anontalk": "Cuntierras pro custu indiritzu IP",
"navigation": "Navigatzione",
"and": " e",
"qbedit": "Càmbia",
"qbpageoptions": "Possibilidades de sa pàgina",
"qbmyoptions": "Sas preferèntzias meas",
- "faq": "Pregontas/Rispostas (FAQ)",
+ "faq": "Pregontas fitianas",
"faqpage": "Project:FAQ",
"actions": "Atziones",
"namespaces": "Nùmene-logos",
"history_short": "Istòria",
"updatedmarker": "atualizada dae s'ùrtima vìsita mea",
"printableversion": "Versione de imprenta",
- "permalink": "Ligà mene permanente",
+ "permalink": "Ligòngiu permanente",
"print": "Imprenta",
"view": "Ammustra",
"view-foreign": "Ammustra in $1",
"undeletethispage": "Non burres custa pàgina",
"undelete_short": "Non burres {{PLURAL:$1|unu càmbiu|$1 càmbios}}",
"viewdeleted_short": "Ammustra {{PLURAL:$1|unu càmbiu burradu|$1 càmbios burrados}}",
- "protect": "Ampara",
- "protect_change": "càmbiu",
+ "protect": "Barda",
+ "protect_change": "càmbia",
"protectthispage": "Ampara custa pàgina",
"unprotect": "Muda amparu",
"unprotectthispage": "Muda amparu de custa pàgina",
"personaltools": "Ainas personales",
"articlepage": "Càstia s'artìculu",
"talk": "Cuntierras",
- "views": "Vistas",
+ "views": "Bìsitas",
"toolbox": "Ainas",
- "userpage": "Càstia sa pàgina utente",
+ "userpage": "Càstia sa pàgina impitadore",
"projectpage": "Càstia sa pàgina meta",
"imagepage": "Càstia sa pàgina de su documentu",
"mediawikipage": "Càstia su messàgiu",
"jumpto": "Bae a:",
"jumptonavigation": "navigatzione",
"jumptosearch": "chirca",
- "view-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa pàgina.\nPro praghere, torra a provare luego.\n\n$1",
+ "view-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa pàgina.\nPro praghere, torra a tenteare posca.\n\n$1",
"generic-pool-error": "Tene passèntzia, sos servidores sunt càrrigos de traballu.\nIn medas chircant de castiare custa risorsa.\nPro praghere, torra a provare luego.",
+ "pool-timeout": "Timeout abetende pro s'arreu",
+ "pool-queuefull": "Sa coa pro su traballu de su protzessu est prena",
"pool-errorunknown": "Faddina disconnota",
+ "pool-servererror": "Su servìtziu de contadore de su protzessu no est disponìbile ($1).",
"aboutsite": "A propòsitu de {{SITENAME}}",
"aboutpage": "Project:Informatziones",
"copyright": "Cuntenutu suta de lissèntzia $1.",
"mainpage-description": "Pàgina Base",
"policy-url": "Project:Polìticas",
"portal": "Portale comunidade",
- "portal-url": "Project:Portale Comunidade",
- "privacy": "Polìtica pro sos datos privados",
+ "portal-url": "Project:Portale comunidade",
+ "privacy": "Polìtica pro is datos privados",
"privacypage": "Project:Polìtica pro sos datos privados",
"badaccess": "Permissu non bastante",
"badaccess-group0": "Non ses autorizadu a fàghere s'atzione chi boles",
- "badaccess-groups": "S'atzione chi boles est limitada a utentes in {{PLURAL:$2|su grupu|unu de sos grupos}}: $1.",
+ "badaccess-groups": "S'atzione chi as rechestu est limitada a impitadores in {{PLURAL:$2|su grupu|unu de is grupos}}: $1.",
"versionrequired": "Bi bolet sa version $1 de MediaWiki",
"versionrequiredtext": "Bi bolet sa versione $1 de MediaWiki pro impreare custa pàgina.\nCàstia [[Special:Version|version page]].",
"ok": "Andat bene",
"pagetitle-view-mainpage": "{{SITENAME}}",
"retrievedfrom": "Bogadu dae \"$1\"",
"youhavenewmessages": "Tenes $1 ($2).",
- "youhavenewmessagesmanyusers": "Tenes $1 dae utentes ($2).",
+ "youhavenewmessagesfromusers": "{{PLURAL:$4|Tenes}} $1 dae {{PLURAL:$3|un'àteru impitadore|$3 impitadores}} ($2).",
+ "youhavenewmessagesmanyusers": "Tenes $1 dae unos cantos impitadores ($2).",
"newmessageslinkplural": "{{PLURAL:$1|unu messàggiu nou|999=messàggios noos}}",
+ "newmessagesdifflinkplural": "{{PLURAL:$1|ùrtima muda|999=ùrtimas mudàntzias}}",
"youhavenewmessagesmulti": "Tenes messàgios noos in $1",
"editsection": "càmbia",
"editold": "càmbia",
"editlink": "càmbia",
"viewsourcelink": "càstia testu codificadu",
"editsectionhint": "Càmbia sa setzione: $1",
- "toc": "Cuntenutu",
+ "toc": "Cuntènnidu",
"showtoc": "ammustra",
"hidetoc": "cua",
"collapsible-collapse": "Serra e istringhe",
"collapsible-expand": "Aberi",
+ "confirmable-confirm": "Ses {{GENDER:$1|seguru|segura}}?",
"confirmable-yes": "Eja",
"confirmable-no": "No",
"thisisdeleted": "Càstiare o recuperare $1?",
"sort-descending": "Òrdine in falada",
"sort-ascending": "Òrdine in artziada",
"nstab-main": "Pàgina",
- "nstab-user": "Pàgina utente",
+ "nstab-user": "Pàgina impitadore",
"nstab-media": "Documentu multimediale",
"nstab-special": "Pàgina ispetziale",
"nstab-project": "Pàgina de servìtziu",
"nospecialpagetext": "<strong>As pedidu una pàgina ispetziale non vàlida.</strong>\n\nUna lista de pàginas ispetziales vàlidas dd'agatas in [[Special:SpecialPages|{{int:specialpages}}]].",
"error": "Faddina",
"databaseerror": "Faddina de su database",
+ "databaseerror-query": "Rechesta: $1",
"databaseerror-function": "Funtzione: $1",
"databaseerror-error": "Faddina: $1",
"readonly": "Database bloccadu",
"filecopyerror": "No est stadu possìbile copiare su file \"$1\" comente \"$2\".",
"filerenameerror": "No est stadu possìbile re-numenare su file \"$1\" in \"$2\".",
"filedeleteerror": "No est stadu possìbile cantzellare su file \"$1\".",
+ "directorycreateerror": "Non si podet creare sa directory \"$1\".",
"filenotfound": "No est stadu possìbile agatare \"$1\".",
"unexpected": "Valore non previstu: \"$1\"=\"$2\".",
"formerror": "Errore: impossìbile imbiare su modellu",
"badarticleerror": "Operatzione non cunsentida pro custa pàgina.",
"cannotdelete": "No est stadu possìbile burrare sa pàgina o su file \"$1\".\nPodet èsser stadu burradu dae calicunu àteru.",
+ "cannotdelete-title": "Impossìbile burrare sa pàgina \"$1\"",
+ "no-null-revision": "Non si podet creare una versione lulla pro sa pàgina \"$1\"",
"badtitle": "Tìtulu malu",
- "badtitletext": "Su tìtulu de sa pàgina ch'as pediu est bùidu, isballiau, o iscritu in is cullegamentus inter-wiki in manera non currègia o cun caràteres no amìtius.",
+ "badtitletext": "Su tìtulu de sa pàgina chi as pregontadu est bùidu, isballiadu, o iscritu in is cullegamentus inter-wiki a manera non currègia.\nPodet cuntènnere uno o unos cantos caràteres no ammìtidos pro is tìtulos.",
"viewsource": "Càstia mitza",
"viewsource-title": "Càstia sa mitza de $1",
"actionthrottled": "Atzione rimandada",
+ "protectedpagetext": "Custa pàgina est istada amparada pro nde prevenner su càmbiu o àteras fatas.",
+ "viewsourcetext": "Podes bìere o copiare su còdighe mitza de custa pàgina:",
+ "viewyourtext": "Càstia e còpia su còdighe mitza de is <strong>mudàntzias tuas</strong> in custa pàgina:",
"namespaceprotected": "Non tenes su permissu de cambiare is pàginas in su nùmene-lugu '''$1'''.",
+ "customcssprotected": "Non tenes sos permissos pro cambiare custa pàgina CSS proite cuntènnidi sas impostaduras pessonales de un'àteru impitadore.",
+ "customjsprotected": "Non tenes sos permissos pro cambiare custa pàgina JavaScript proite cuntènnidi sas impostaduras pessonales de un'àteru impitadore.",
+ "mycustomcssprotected": "Non tenes sos permissos pro cambiare custa pàgina CSS.",
+ "mycustomjsprotected": "Non tenes sos permissos pro cambiare custa pàgina JavaScript.",
"ns-specialprotected": "Is pàginas ispetziales non podent èssere acontzadas.",
+ "titleprotected": "Sa creatzione de una pàgina cun custu tìtulu est istada arreada dae [[User:$1|$1]].\nSa motivatzione est \"<em>$2</em>\".",
"exception-nologin": "Non ses intrau",
+ "exception-nologin-text": "Pro atzèdere a custa pàgina o atzione est netzessàriu a ti identificare.",
"virus-scanfailed": "scansione faddida (còdixe $1)",
"virus-unknownscanner": "antivirus disconnotu:",
"logouttext": "<strong>As acabadu sa sessione.</strong>\n\nTene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas dae su browser tuo.",
+ "welcomeuser": "Benénnidu, $1!",
"welcomecreation-msg": "Su contu tuo est istadu creadu.\nSi boles podes cambiare is [[Special:Preferences|prefèntzias tuas]] pro {{SITENAME}}",
- "yourname": "Nùmene usuàriu",
- "userlogin-yourname": "Nùmene usuàriu",
- "userlogin-yourname-ph": "Inserta su nùmene usuàriu tuo",
- "createacct-another-username-ph": "Inserta su nùmene usuàriu:",
+ "yourname": "Nùmene impitadore:",
+ "userlogin-yourname": "Nùmene impitadore",
+ "userlogin-yourname-ph": "Inserta su nùmene impitadore tuo",
+ "createacct-another-username-ph": "Inserta su nùmene impitadore:",
"yourpassword": "Password:",
"userlogin-yourpassword": "Password",
"userlogin-yourpassword-ph": "Inserta sa password tua",
"createacct-yourpassword-ph": "Inserta una password",
- "yourpasswordagain": "Repiti sa password:",
+ "yourpasswordagain": "Repite sa password:",
"createacct-yourpasswordagain": "Cunfirma sa password",
"createacct-yourpasswordagain-ph": "Inserta sa password torra",
- "remembermypassword": "Ammenta sa paràula de òrdine in custu carculadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})",
+ "remembermypassword": "Ammenta sa password in custu navigadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})",
+ "userlogin-remembermypassword": "Mantènnemi cullegadu",
+ "userlogin-signwithsecure": "Imprea una cunnessione segura",
"yourdomainname": "Ispetzìfica su domìniu",
+ "password-change-forbidden": "Non podes cambiare sa password in custa wiki.",
"login": "Intra",
"nav-login-createaccount": "Intra / crea contu",
"userlogin": "Intra / crea contu",
"createaccount": "Crea contu",
"gotaccount": "Tenes giai unu contu? $1.",
"gotaccountlink": "Identìfica·ti",
- "userlogin-createanother": "Crea un àteru contu",
+ "userlogin-resetpassword-link": "As ismentigadu sa password?",
+ "userlogin-helplink2": "Agiudu pro s'atzessu",
"createacct-emailrequired": "Indirutzu Email",
+ "createacct-emailoptional": "Indiritzu email (optzionale)",
+ "createacct-email-ph": "Inserta s'indiritzu email tuo",
+ "createacct-another-email-ph": "Inserta s'indiritzu email",
"createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu email ispetzificadu",
+ "createacct-realname": "Nùmene beru (optzionale)",
"createaccountreason": "Motivu:",
"createacct-reason": "Motivu",
"createacct-reason-ph": "Proite ses creande un àteru contu",
+ "createacct-captcha": "Còmpudu de siguresa",
+ "createacct-imgcaptcha-ph": "Inserta su testu chi bides aissusu",
"createacct-submit": "Crea su contu tuo",
"createacct-another-submit": "Crea un àteru contu",
+ "createacct-benefit-heading": "{{SITENAME}} est òpera de gente che tue.",
"createacct-benefit-body1": "{{PLURAL:$1|acontzu|acontzos}}",
"createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàginas}}",
+ "createacct-benefit-body3": "{{PLURAL:$1|contribudore retzente|contribudores retzentes}}",
"badretype": "Is passwords chi as insertadu non currispondent.",
- "userexists": "Su nùmene usuàriu insertadu est giai impreadu.\nSèbera unu nùmene diferente.",
+ "userexists": "Su nùmene impitadore insertadu est giai impreadu.\nSèbera unu nùmene diferente.",
"loginerror": "Faddina de identificatzione",
"createacct-error": "Faddina in sa creatzione de su contu",
- "noname": "Su nùmene usuàriu insertadu no est vàlidu.",
+ "createaccounterror": "Impossìbile creare su contu: $1",
+ "nocookiesnew": "Su contu de s'impitadore est istadu creadu, ma no est istadu possìbile fàghere s'atzessu a {{SITENAME}} proite sos \"cookies\" sunt deativados.\nTorra a proare a pustis de los àere ativados.",
+ "nocookieslogin": "{{SITENAME}} imprea is cookies pro identificare is impitadores.\nTue tenes is cookies disativados.\nAtivaddos e prova torra.",
+ "noname": "Su nùmene impitadore insertadu no est vàlidu.",
"loginsuccesstitle": "Ti ses identificadu",
- "loginsuccess": "'''Immoe ses intradu in {{SITENAME}} cun su nùmene usuàriu \"$1\".'''",
- "nosuchuser": "Non b'at usuàriu cun su nùmene \"$1\".\nIs nùmenes usuàriu sunt sensìbiles a is lìteras mannas.\nVerìfica su nùmene insertadu o [[Special:UserLogin/signup|crea unu contu nou]].",
- "nouserspecified": "Deves ispetzificare unu nùmene usuàriu.",
+ "loginsuccess": "'''Immoe ses intradu in {{SITENAME}} cun su nùmene impitadore \"$1\".'''",
+ "nosuchuser": "Non b'at impitadore cun su nùmene \"$1\".\nIs nùmenes impitadore sunt sensìbiles a is lìteras mannas.\nVerìfica su nùmene insertadu o [[Special:UserLogin/signup|crea unu contu nou]].",
+ "nouserspecified": "Depes ispetzificare unu nùmene impitadore.",
+ "login-userblocked": "{{GENDER:$1|Custu impitadore est arreadu|Custa impidadora est arreada}}. Atzessu impossìbile.",
"wrongpassword": "Sa paràula de òrdine insertada no est bona. Prova torra.",
"wrongpasswordempty": "No as iscritu sa paràula de òrdine.\nProva torra.",
"passwordtooshort": "Is passwords depent tènner a su mancu {{PLURAL:$1|1 caràtere|$1 caràteres}}.",
- "password-name-match": "Sa password tua depet èsser diferente dae su nùmene usuàriu tuo.",
- "mailmypassword": "Resetta sa password",
+ "password-name-match": "Sa password tua depet èsser diferente dae su nùmene impitadore tuo.",
+ "password-login-forbidden": "S'impreau de custu nùmene impitadore e de custa password est istadu proibidu.",
+ "mailmypassword": "Reseta sa password",
"passwordremindertitle": "Servìtziu Password Reminder de {{SITENAME}}",
- "passwordremindertext": "Calicunu (probabilmenti tue, cun s'indiritzu IP $1) at pediu de arritziri una password noa pro intrare a {{SITENAME}} ($4).\nUna password temporanea pro s'usuàriu \"$2\" est istada impostada a \"$3\".\nChi custu fiat ne is intentziones tuas, depis intrare (log in) e scioberari una password noa.\nSa password temporanea tua at a iscadiri in {{PLURAL:$5|una die|$5 dies}}.\n\nChi non ses istadu a pediri sa password, o chi as torrau a agatare sa password torra e non da depis cambiari prus, non cunsideras custu messagiu e sighi a impreare sa password beccia.",
- "noemail": "Peruna e-mail resurtat registrada pro s'usuàriu \"$1\".",
- "passwordsent": "Una password noa est stada mandada a s'indiritzu e-mail de s'usuàriu \"$1\".\nPro praxere, cando dda retzis identìfica·ti torra.",
+ "passwordremindertext": "Calicunu (probabilmenti tue, cun s'indiritzu IP $1) at pediu de arritziri una password noa pro intrare a {{SITENAME}} ($4).\nUna password temporanea pro s'impitadore \"$2\" est istada impostada a \"$3\".\nChi custu fiat ne is intentziones tuas, depis intrare (log in) e scioberari una password noa.\nSa password temporanea tua at a iscadiri in {{PLURAL:$5|una die|$5 dies}}.\n\nChi non ses istadu a pediri sa password, o chi as torrau a agatare sa password torra e non da depis cambiari prus, non cunsideras custu messagiu e sighi a impreare sa password beccia.",
+ "noemail": "Peruna email resurtat registrada pro s'impitadore \"$1\".",
+ "passwordsent": "Una password noa est stada mandada a s'indiritzu email de s'impitadore \"$1\".\nPro praxere, cando dda retzis identìfica·ti torra.",
"mailerror": "Faddina imbiende su messàgiu: $1",
"emailauthenticated": "S'indiritzu e-mail tuo est istadu autenticau su $2 a is $3.",
"emailconfirmlink": "Cunfirma s'indiritzu e-mail tuo",
+ "emaildisabled": "Custu giassu non podet imbiare emails.",
"accountcreated": "Contu creadu",
- "accountcreatedtext": "Su contu de s'usuàriu [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) est stadu creadu.",
+ "accountcreatedtext": "Su contu de s'impitadore [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) est stadu creadu.",
"createaccount-title": "Creatzione de unu contu pro {{SITENAME}}",
+ "login-abort-generic": "S'identificatzione tua est andada male - Iscontzada",
"loginlanguagelabel": "Limba: $1",
"createacct-another-realname-tip": "Su nomini beru pois fai de mancu de ddu ponni.\nSi sceberas de du ponni, at a essi imperau po arreconnosci a tui su traballu tuu.",
"pt-login": "Intra",
"newpassword": "Password noa:",
"retypenew": "Torra a iscrìere sa password noa:",
"resetpass_submit": "Càmbia sa password e identifica·ti",
+ "changepassword-success": "Sa password tua est istada cambiada in manera currègida!",
"resetpass_forbidden": "Non faghet a cambiare sa password",
"resetpass-no-info": "Depes èsser identificadu pro abèrrer custa pàgina deretu.",
"resetpass-submit-loggedin": "Càmbia password",
"resetpass-temp-password": "Password temporànea:",
"passwordreset": "Reseta sa password",
"passwordreset-legend": "Reseta sa password",
- "passwordreset-username": "Nùmene usuàriu",
+ "passwordreset-username": "Nùmene impitadore:",
+ "passwordreset-domain": "Domìniu:",
"passwordreset-email": "Indiritzu email:",
- "passwordreset-emailtitle": "Particulares de s'usuàriu in {{SITENAME}}",
+ "passwordreset-emailtitle": "Particulares de s'impitadore in {{SITENAME}}",
"changeemail": "Càmbia indiritzu email",
"changeemail-header": "Càmbia s'indirìtzu email de su contu",
"changeemail-oldemail": "Indiritzu email atuale:",
"changeemail-submit": "Càmbia email",
"changeemail-cancel": "Annudda",
"resettokens": "Reseta tokens",
- "bold_sample": "Testu Grassu",
- "bold_tip": "Testu Grassu",
- "italic_sample": "Testu Cursivu",
- "italic_tip": "Testu Cursivu",
- "link_sample": "Tìtulu ligà mene",
- "link_tip": "Ligà mene internu",
- "extlink_sample": "http://www.example.com tìtulu de su ligà mene",
- "extlink_tip": "Ligà mene a foras (amenta su prefissu http://)",
+ "bold_sample": "Testu grassu",
+ "bold_tip": "Testu grassu",
+ "italic_sample": "Testu cursivu",
+ "italic_tip": "Testu cursivu",
+ "link_sample": "Tìtulu ligòngiu",
+ "link_tip": "Ligòngiu internu",
+ "extlink_sample": "http://www.example.com tìtulu de su ligòngiu",
+ "extlink_tip": "Ligòngiu a foras (regorda su prefissu http://)",
"headline_sample": "Testu de su tìtulu",
- "headline_tip": "Tìtulu de su segundu livellu",
+ "headline_tip": "Tìtulu de su de duos livellu",
"nowiki_sample": "Inserta su testu non-formatadu inoghe",
"nowiki_tip": "Ignora sa formatatzione wiki",
"image_sample": "Esèmpiu.jpg",
"image_tip": "Incòrpora una pintura",
"media_sample": "Esèmpiu.ogg",
- "media_tip": "Ligà mene a unu file multimediale",
- "sig_tip": "Firma cun data e ora",
+ "media_tip": "Ligòngiu a unu file multimediale",
+ "sig_tip": "Firma·ti cun data e ora",
"hr_tip": "Lìnia orizontale (de impreare cun critèriu)",
"summary": "Ogetu:",
"subject": "Tema/tìtulu:",
"minoredit": "Custu est unu càmbiu minore",
- "watchthis": "Pone custa pàgina in sa watchlist mea",
+ "watchthis": "Annota custa pàgina",
"savearticle": "Sarva sa pàgina",
"preview": "Antiprima",
- "showpreview": "Amosta s'antiprima",
- "showdiff": "Amosta is càmbios",
- "anoneditwarning": "'''Dae cara:''' Non ses identificadu (log in).\nS'indiritzu IP tuo at a èssere registradu in s'istòria de custa pàgina.",
+ "showpreview": "Ammustra s'antiprima",
+ "showdiff": "Ammustra is càmbios",
+ "anoneditwarning": "<strong>Dae cara:</strong> Non ses identificadu.\nS'indiritzu IP tuo at a èssere annòtidu si faghes unos cantos càmbios. Si <strong>idendificas</strong> tibe o <strong>[$2 creas unu contu]</strong>, is càmbios tuos ant a esser marcados cun su nùmene impitadore tuo, paris a àteros giuamentos.",
"anonpreviewwarning": "''Non ses identificadu. Sarvende s'indiritzu IP tuo at a èssere registradu in s'istòria de sa pàgina.''",
"missingcommenttext": "Inserta unu cummentu inoghe suta.",
"summary-preview": "Antiprima ogetu:",
"subject-preview": "Antiprima tema/tìtulu:",
- "blockedtitle": "S'usuàriu est istadu bloccadu",
- "blockedtext": "'''Custu nùmene usuàriu o indiritzu IP est stadu bloccadu.'''\n\nSu bloccu est stadu postu dae $1. Su motivu de su bloccu est: ''$2''\n\n* Su bloccu incumentzat: $8\n* Su bloccu scadit: $6\n* Intervallu de bloccu: $7\n\nSi boles, podes tzerriare $1 o un'àteru [[{{MediaWiki:Grouppage-sysop}}|amministradore]] pro faeddare de su bloccu.\n\nNota ca sa funtzione 'Ispedi un'e-mail a custu usuàriu' no est ativa ki no est stadu registradu un'indiritzu e-mail vàlidu in is [[Special:Preferences|preferèntzias]] tuas o ki s'usu de custa funtzione est stadu bloccadu.\n\nS'indiritzu IP atuale est $3, su nùmeru ID de su bloccu est #$5.\nPro praxere spetzìfica totu is particulares in antis in carche siat pregunta de acrarimentu.",
+ "blockedtitle": "S'impitadore est istadu bloccadu",
+ "blockedtext": "<strong>Custu nùmene impitadore o indiritzu IP est stadu bloccadu.</strong>\n\nSu bloccu est stadu postu dae $1.\nSu motivu de su bloccu est: <em>$2</em>.\n\n* Su bloccu incumentzat: $8\n* Su bloccu scadit: $6\n* Intervallu de bloccu: $7\n\nSi boles, podes tzerriare $1 o un'àteru [[{{MediaWiki:Grouppage-sysop}}|amministradore]] pro faeddare de su bloccu.\nNota ca sa funtzione 'Ispedi un'email a custu impitadore' no est ativa ki no est stadu registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias]] tuas o ki s'usu de custa funtzione est stadu bloccadu.\nS'indiritzu IP atuale est $3, su nùmeru ID de su bloccu est #$5.\nPro praxere spetzìfica totu is particulares in antis in carche siat pregunta de acrarimentu.",
"blockednoreason": "perunu motivu inditadu",
+ "nosuchsectiontitle": "Impossìbile agatare sa setzione",
"loginreqtitle": "Identificatzione rechesta",
"loginreqlink": "identìfica·ti",
"loginreqpagetext": "Depes èsser $1 pro bìer àteras pàginas.",
"accmailtitle": "Password ispedida.",
"newarticle": "(Nou)",
- "newarticletext": "Custa pàgina no esistit galu.\nPro creare sa pàgina, scrie in su box inoghe in bàsciu (abbàida sa [$1 pàgina de agiudu] pro àteras informatziones).\nSi ses intradu inoghe pro sbàlliu, carca in su browser tuo su butone '''back/indietro'''.",
- "anontalkpagetext": "----''Custa est sa pàgina de cuntierra de unu usuàriu anònimu ki no at creadu unu account galu, o ki non dd'usat. Pro custu impreamus su nùmeru de indiritzos IP pro ddu identificare. Is indiritzos IP podent però èsser cundivìdidos dae unos cantos usuàrios. Si ses unu usuàriu anònimu e ritenes ki custos cummentos non sunt diretos a tue, pro praxere [[Special:UserLogin/signup|crea unu contu]] o [[Special:UserLogin|identifica·ti (log in)]] pro evitare cunfusione cun àteros usuàrios anònimos.''",
- "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} cambiare sa pàgina como]</span>.",
- "userpage-userdoesnotexist": "Su contu de s'usuàriu \"<nowiki>$1</nowiki>\" no est stadu registradu.\nPro praxere abbàida si boles a sèriu creare/cambiare custa pàgina.",
- "userpage-userdoesnotexist-view": "Su contu de s'usuàriu \"$1\" no est stadu registradu.",
+ "newarticletext": "Custa pàgina no esistit galu.\nPro creare sa pàgina, iscrie in su box inoghe a suta (càstia sa [[{{MediaWiki:Helppage}}|pàgina de agiudu]] pro àteras informatziones).\nSi ses intradu inoghe pro isbàlliu, carca in su browser tuo su butone '''back/indietro'''.",
+ "anontalkpagetext": "----\n<em>Custa est sa pàgina de cuntierra de unu impitadore anònimu ki no at creadu unu contu galu, o ki non dd'usat.</em>\nPro custu impreamus su nùmeru de indiritzos IP pro ddu identificare. Is indiritzos IP podent perou èsser cundivìdidos dae unos cantos impitadores. Si ses unu impitadore anònimu e ritenes ki custos cummentos non sunt diretos a tue, pro praxere [[Special:UserLogin/signup|crea unu contu]] o [[Special:UserLogin|identifica·ti (log in)]] pro evitare cunfusione cun àteros impitadore anònimos.''",
+ "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] o puru [{{fullurl:{{FULLPAGENAME}}|action=edit}} cambiare sa pàgina como]</span>.",
+ "noarticletext-nopermission": "In custu tempu sa pàgina rechesta est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in is àteras pàginas, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is regìstros ligados]</span>, ma non tenes su permissu de creare custa pàgina.",
+ "userpage-userdoesnotexist": "Su contu de s'impitadore \"<nowiki>$1</nowiki>\" no est stadu registradu.\nPro praxere abbàida si boles a sèriu creare/cambiare custa pàgina.",
+ "userpage-userdoesnotexist-view": "Su contu de s'impitadore \"$1\" no est stadu registradu.",
+ "usercssyoucanpreview": "<strong>Consìgiu:</strong> Imprea su butone \"{{int:showpreview}}\" pro testare su CSS nou in antis de sarvare.",
+ "userjsyoucanpreview": "<strong>Consìgiu:</strong> Imprea su butone \"{{int:showpreview}}\" pro testare su tuo JavaScript nou in antis de sarvare.",
"updated": "(Atualizadu)",
"note": "'''Nota:'''",
"previewnote": "<strong>Regorda·ti ca custa est feti una ANTIPRIMA.</strong>\nIs mudàntzias tuas non sunt galu sarbadas!",
"templatesused": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa pàgina:",
"templatesusedpreview": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa antiprima:",
"templatesusedsection": "{{PLURAL:$1|Template impreadu|Templates impreados}} in custa setzione:",
- "template-protected": "(amparadu)",
- "template-semiprotected": "(mesu-amparadu)",
+ "template-protected": "(bardadu)",
+ "template-semiprotected": "(mesu-bardadu)",
"hiddencategories": "Custa pàgina faghet parte de {{PLURAL:$1|1 categoria cuada|$1 categorias cuadas}}:",
"nocreate-loggedin": "Non tenes su permissu de creare pàginas noas.",
"permissionserrors": "Faddina de permissos",
"permissionserrorstext-withaction": "Non tenes su permissu de $2, pro {{PLURAL:$1|custu motivu|custus motivus}}:",
- "moveddeleted-notice": "Custa pàgina est istada fuliada.\nSu registru de is fuliaduras e moviduras de sa pàgina est ammustradu pro informatzione.",
+ "recreate-moveddeleted-warn": "<strong>Atentzione: Ses torrende a creare una pàgina chi est istada giai burrada.</strong>\n\nSinchera·ti chi siat pretzisu a sighire cambiende custa pàgina.\nSu registru de is burraduras e moviduras pro custa pàgina benit giùghedu inoghe:",
+ "moveddeleted-notice": "Custa pàgina est istada burrada.\nSu registru de is burraduras e moviduras de sa pàgina est ammustradu pro informatzione.",
"log-fulllog": "Abbista su registru intreu",
"edit-conflict": "Cunflitu de editzione.",
"postedit-confirmation-created": "Sa pàgina est stada creada",
"postedit-confirmation-restored": "Sa pàgina est stada restaurada",
"postedit-confirmation-saved": "S'acontzu tuo est stadu sarbadu",
"content-model-wikitext": "wikitestu",
+ "content-model-text": "testu normale",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
- "viewpagelogs": "Càstia sos registros de custa pàgina",
+ "post-expand-template-inclusion-category": "Pàginas in is cale sa dimensione templates inclùdidos propassat su lìmite cunsentidu",
+ "post-expand-template-argument-category": "Pàginas cuntenentes templates cun argumentos fartados",
+ "cantcreateaccounttitle": "Non si podet creare unu contu",
+ "viewpagelogs": "Càstia is registros de custa pàgina",
"nohistory": "Non b'est sa stòria de is acontzos pro custa pàgina.",
"currentrev": "Revisione currente",
"currentrev-asof": "Versione currente de is $1",
"revisionasof": "Revisione de is $1",
"revision-info": "Revisione de su $4 a is $5 de {{GENDER:$6|$2}}$7",
- "previousrevision": "← Acontzu in antis",
- "nextrevision": "Acontzu in fatu →",
- "currentrevisionlink": "Revisione currente",
+ "previousrevision": "← Versione in segus",
+ "nextrevision": "Versione in antis →",
+ "currentrevisionlink": "Revisione atuale",
"cur": "curr",
"next": "in fatu",
- "last": "ant",
+ "last": "pre",
"page_first": "prima",
"page_last": "ùrtima",
- "histlegend": "Cunfrontu intre versiones: sebera sa casella de sa versione ki boles e carca \"Invio\" o su butone in bàsciu.<br />\nCosas de ammentare: '''({{int:cur}})''' = diferèntzias cun sa versione currente,\n'''({{int:last}})''' = diferèntzias cun sa versione in antis, '''{{int:minoreditletter}}''' = acontzu minore.",
- "history-fieldset-title": "Sfògia sa stòria",
- "history-show-deleted": "Petzi borrados",
+ "histlegend": "Cunfrontu intre versiones: Marca sa casella de sa versione chi boles e carca \"Invio\" o su butone in bàsciu.<br />\nCosas de ammentare: <strong>({{int:cur}})</strong> = diferèntzias cun sa versione atuale,\n<strong>({{int:last}})</strong> = diferèntzias cun sa versione in segus, <strong>{{int:minoreditletter}}</strong> = càmbiu minore.",
+ "history-fieldset-title": "Isfògia s'istòria",
+ "history-show-deleted": "Feti is burrados",
"histfirst": "prima",
"histlast": "ùrtima",
"historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
"historyempty": "(bùida)",
+ "history-feed-title": "Istòria de is revisiones",
+ "history-feed-description": "Istòria de is revisiones de sa pàgina in custa wiki",
"history-feed-item-nocomment": "$1 su $2",
+ "rev-deleted-user": "(nùmene impitadore bogadu)",
"rev-delundel": "ammustra/cua",
"rev-showdeleted": "ammustra",
+ "revdelete-no-file": "Su documentu ispetzuficadu no esistit",
"revdelete-show-file-submit": "Eja",
+ "revdelete-hide-text": "Testu de sa versione",
+ "revdelete-hide-image": "Cua su cuntènnidu de su documentu",
"revdelete-radio-set": "Cua",
+ "revdelete-radio-unset": "Ammustra",
"revdelete-log": "Motivu:",
- "revdel-restore": "Muda sa visibilidade",
+ "revdel-restore": "càmbia sa visibilidade",
"pagehist": "Istòria de sa pàgina",
"deletedhist": "Istòria fuliada",
+ "revdelete-otherreason": "Motivu diversu o agiuntivu:",
"revdelete-reasonotherlist": "Àteru motivu",
+ "revdelete-edit-reasonlist": "Càmbia su motivu de sa burradura",
+ "revdelete-offender": "Autore de sa versione:",
"mergehistory-from": "Pàgina de orìgine:",
"mergehistory-into": "Pàgina de destinatzione:",
"mergehistory-no-source": "Sa pàgina de orìgine $1 no esistit.",
"mergehistory-reason": "Motivu:",
"revertmerge": "Iscontza s'unione",
"history-title": "$1: Istòria de is revisiones",
+ "difference-multipage": "(Diferèntzias intre pàginas)",
"lineno": "Lìnia $1:",
"compareselectedversions": "Cumpara versiones scioberadas",
- "editundo": "annulla",
+ "editundo": "annudda",
+ "diff-empty": "(Diferèntzia peruna)",
"searchresults": "Resurtados de sa chirca",
"searchresults-title": "Resurtados pro sa chirca de \"$1\"",
"titlematches": "Currispondèntzias in su tìtulu de s'artìculu",
"textmatches": "Currispondèntzias in su testu de s'artìculu",
"notextmatches": "Peruna currispondèntzia in su testu de s'artìculu",
- "prevn": "{{PLURAL:$1|cabudianu|cabudianos $1}}",
+ "prevn": "{{PLURAL:$1|pretzedente|pretzedentes $1}}",
"nextn": "{{PLURAL:$1|imbeniente|imbenientes $1}}",
+ "prevn-title": "{{PLURAL:$1|Resurtadu pretzedente|$1 resurtados pretzedentes}}",
+ "nextn-title": "{{PLURAL:$1|Resurtadu imbeniente|$1 resurtados imbenientes}}",
"shown-title": "Ammustra $1 {{PLURAL:$1|resurtadu|resurtados}} pro pàgina",
"viewprevnext": "Càstia ($1 {{int:pipe-separator}} $2) ($3).",
- "searchprofile-articles": "Pàginas de càbidu",
+ "searchmenu-exists": "<strong>Ddu est una pàgina tzerriada \"[[:$1]]\" in custa wiki.</strong> {{PLURAL:$2|0=|Càstia puru is àteros resurtados de sa chirca.}}",
+ "searchmenu-new": "<strong>Crea sa pàgina \"[[:$1]]\" in custa wiki!</strong> {{PLURAL:$2|0=|Càstia fintzas sa pàgina agatada cun sa chirca tua|Càstia fintzas is resurtados de sa chirca}}",
+ "searchprofile-articles": "Pàginas de càbidos",
"searchprofile-images": "Multimèdia",
"searchprofile-everything": "Totu",
"searchprofile-advanced": "Avantzada",
"searchprofile-articles-tooltip": "Chirca in $1",
"searchprofile-images-tooltip": "Chirca files",
- "search-result-size": "$1 ({{PLURAL:$2|1 faeddu|$2 faeddos}})",
- "search-redirect": "(redirect $1)",
+ "searchprofile-everything-tooltip": "Chirca in totue (inclùdidas is pàginas de cuntierra)",
+ "searchprofile-advanced-tooltip": "Chirca in nùmene-logos personalizados",
+ "search-result-size": "$1 ({{PLURAL:$2|1 paràula|$2 paràulas}})",
+ "search-result-category-size": "{{PLURAL:$1|1 cumponente|$1 cumponentes}} ({{PLURAL:$2|1 subcategoria|$2 subcategorias}}, {{PLURAL:$3|1 file|$3 files}})",
+ "search-redirect": "(reindiritzadu $1)",
"search-section": "(setzione $1)",
"search-suggest": "Fortzis fias chirchende: $1",
"search-interwiki-caption": "Progetos frades",
"search-interwiki-more": "(àteru)",
"searchall": "totu",
"showingresults": "Inoghe sighende {{PLURAL:$1|benit ammustradu '''1''' resurtadu|benint ammustrados '''$1''' resurtados}} incumentzende dae su nùmeru '''$2'''.",
- "showingresultsheader": "{{PLURAL:$5|Resultadu '''$1''' de '''$3'''|Resultadus '''$1 - $2''' de '''$3'''}} pro '''$4'''",
+ "showingresultsheader": "{{PLURAL:$5|Resurtadu <strong>$1</strong> de <strong>$3</strong>|Resurtados <strong>$1 - $2</strong> de <strong>$3</strong>}} pro <strong>$4</strong>",
+ "search-nonefound": "Sa chirca no at prodùidu resurtados.",
"powersearch-legend": "Chirca delantada",
"powersearch-ns": "Chirca in su nùmene-logu:",
"powersearch-togglelabel": "Seletziona:",
"powersearch-toggleall": "Totu",
"powersearch-togglenone": "Nudda",
"preferences": "Preferèntzias",
- "mypreferences": "Preferèntzias meas",
+ "mypreferences": "Preferèntzias mias",
"prefs-edits": "Nùmeru de acontzos:",
"prefs-skin": "Bisura",
"skin-preview": "Antiprima",
+ "datedefault": "Peruna preferèntzia",
+ "prefs-user-pages": "Paginas impitadore",
"prefs-personal": "Datos personales",
"prefs-rc": "Ùrtimas mudàntzias",
"prefs-watchlist": "Watchlist",
+ "prefs-watchlist-edits-max": "Cantidade màssima: 1000",
"prefs-misc": "Àteras preferèntzias",
"prefs-resetpass": "Càmbia password",
+ "prefs-email": "Sèberos pro sa email",
"saveprefs": "Sarva preferèntzias",
"prefs-editing": "Box de acontzadura",
"rows": "Lìnias:",
"timezoneregion-antarctica": "Antàrtide",
"timezoneregion-arctic": "Àrtide",
"timezoneregion-asia": "Àsia",
+ "timezoneregion-atlantic": "Otzèanu Atlànticu",
"timezoneregion-australia": "Austràlia",
"timezoneregion-europe": "Europa",
+ "timezoneregion-indian": "Otzèanu Indianu",
+ "timezoneregion-pacific": "Otzèanu Patzìficu",
"prefs-searchoptions": "Chirca",
"prefs-namespaces": "Nùmene-logos",
"prefs-files": "Files",
- "youremail": "E-mail:",
- "username": "{{GENDER:$1|Nùmene usuàriu}}:Nùmene usuàriu",
+ "prefs-emailconfirm-label": "Cunfirma de sa email:",
+ "youremail": "Email:",
+ "username": "{{GENDER:$1|Nùmene impitadore}}:Nùmene impitadore",
"prefs-registration": "Ora de registratzione:",
"yourrealname": "Nùmene beru:",
"yourlanguage": "Limba:",
"yournick": "Sa firma tua:",
- "yourgender": "Natura:",
- "gender-unknown": "Non spetzificadu",
- "gender-male": "Mascu",
- "gender-female": "Fèmina",
+ "yourgender": "Comente preferes a ti descrir?",
+ "gender-unknown": "Preferu a no ddu narrer",
+ "gender-male": "Issu càmbiat pàginas wiki",
+ "gender-female": "Issa càmbiat pàginas wiki",
"email": "E-mail",
"prefs-info": "Informatzione bàsica",
"prefs-signature": "Firma",
"prefs-advancedwatchlist": "Sèberos avantzados",
"prefs-tokenwatchlist": "Token",
"prefs-diffs": "Diferèntzias",
- "userrights-user-editname": "Inserta unu nùmene usuàriu:",
- "editinguser": "Cambiamentu de is deretos usuàriu de s'usuàriu <strong>[[User:$1|$1]]</strong> $2",
+ "userrights-user-editname": "Inserta unu nùmene impitadore:",
+ "editinguser": "Cambiamentu de is deretos impitadore de s'impitadore <strong>[[User:$1|$1]]</strong> $2",
"userrights-reason": "Motivu:",
"userrights-irreversible-marker": "$1*",
"group": "Grupu:",
"group-bot": "Bots",
"group-sysop": "Amministradores",
"group-bureaucrat": "Buròcrates",
+ "group-suppress": "Tzensores",
"group-all": "(totus)",
- "group-user-member": "{{GENDER:$1|usuàriu}}",
+ "group-user-member": "{{GENDER:$1|impitadore}}",
"group-autoconfirmed-member": "{{GENDER:$1|usuàrios autocunfirmados}}",
"group-bot-member": "{{GENDER:$1|bot}}",
"group-sysop-member": "{{GENDER:$1|aministradore}}",
"group-bureaucrat-member": "{{GENDER:$1|buròcrate}}",
+ "group-suppress-member": "{{GENDER:$1|tzensore}}",
"grouppage-user": "{{ns:project}}:Usuàrios",
"grouppage-autoconfirmed": "{{ns:project}}:Usuàrios autocunfirmadus",
"grouppage-bot": "{{ns:project}}:Bots",
"grouppage-sysop": "{{ns:project}}:Amministradores",
"grouppage-bureaucrat": "{{ns:project}}:Burocrates",
+ "grouppage-suppress": "{{ns:project}}:Tzensore",
"right-read": "Lègere pàginas",
"right-edit": "Cambiare pàginas",
+ "right-createpage": "Creare pàginas (chi non siant pàgina de cuntierra)",
+ "right-createtalk": "Creare pàginas de cuntierra",
+ "right-createaccount": "Creare contos de impitadores noos",
+ "right-minoredit": "Marcare su càmbiu che minore",
"right-move": "Mòver pàginas",
"right-move-subpages": "Mòvere pàginas cun is suta-pàginas issoru",
"right-move-rootuserpages": "Mòvere is pàginas base de is usuàrios",
+ "right-move-categorypages": "Mòvere pàginas de categorias",
"right-movefile": "Mòvere files",
"right-upload": "Carrigare files",
"right-reupload": "Subra-iscrìere files esistentes",
"right-browsearchive": "Chircare pàginas fuliadas",
"right-undelete": "Restaurare una pàgina",
"right-siteadmin": "Bloccare e sbloccare su database",
- "newuserlogpage": "Usuàrios nous",
+ "newuserlogpage": "Impitadores nous",
"rightslog": "Deretos de is usuàrios",
"action-read": "lègher custa pàgina",
"action-edit": "cambiare custa pàgina",
"action-createpage": "creare pàginas",
"action-move": "mòvere custa pàgina",
"action-movefile": "mòvere custu file",
+ "action-upload": "carriga custu archìviu",
"action-delete": "burrare custa pàgina",
"action-browsearchive": "chircare pàginas fuliadas",
+ "action-sendemail": "imbiare emails",
+ "action-editmywatchlist": "cambiare sa lista de is pàginas annotadas tua",
+ "action-viewmywatchlist": "castiare sa lista de pàginas annotadas tua",
+ "action-viewmyprivateinfo": "castiare is informatzione privadas tuas",
+ "action-editmyprivateinfo": "cambiare is informatziones privadas tuas",
"nchanges": "$1 {{PLURAL:$1|mudàntzia|mudàntzias}}",
+ "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|dae s'ùrtima bisita}}",
+ "enhancedrc-history": "istòria",
"recentchanges": "Ùrtimas mudàntzias",
- "recentchanges-legend": "Possibilidades subra ùrtimas mudàntzias",
- "recentchanges-feed-description": "Custu feed riportada is ùrtimas mudàntzias a is cuntènnidos de su giassu.",
- "recentchanges-label-newpage": "Custu acontzu at creadu una pàgina noa",
- "recentchanges-label-minor": "Custu est unu acontzu minore",
- "recentchanges-label-bot": "Custu acontzu est stadu fatu dae unu bot",
+ "recentchanges-legend": "Optziones subra ùrtimas mudàntzias",
+ "recentchanges-summary": "Sighi is ùrtimas mudàntzias a sa wiki in custa pàgina.",
+ "recentchanges-feed-description": "Sighi is ùrtimas mudàntzias a sa wiki cun custu feed.",
+ "recentchanges-label-newpage": "Custu càmbiu at creadu una pàgina noa",
+ "recentchanges-label-minor": "Custu est unu càmbiu minore",
+ "recentchanges-label-bot": "Custu càmbiu est stadu fatu dae unu bot",
+ "recentchanges-label-unpatrolled": "Custu càmbiu no est istadu cumprobadu",
+ "recentchanges-label-plusminus": "Sa muda de sa mannesa de sa pàgina dae su nùmeru de bytes",
+ "recentchanges-legend-heading": "'''Legenda:'''",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (càstia [[Special:NewPages|is pàginas noas]])",
- "rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudàntzia|Sas chi sighint sunt sas mudàntzias}} dae <strong>$3, $4</strong> (amostadas fintzas a <strong>$1</strong>).",
+ "rcnotefrom": "{{PLURAL:$5|Sa chi sighit est sa mudàntzia|Is chi sighint sunt is mudàntzias}} dae <strong>$3, $4</strong> (ammustradas fintzas a <strong>$1</strong>).",
"rclistfrom": "Ammustra mudàntzias dae $3 $2",
- "rcshowhideminor": "$1 acontzos minores",
- "rcshowhideminor-show": "Amosta",
+ "rcshowhideminor": "$1 is càmbios minores",
+ "rcshowhideminor-show": "Ammustra",
"rcshowhideminor-hide": "Cua",
- "rcshowhidebots": "$1 bots",
- "rcshowhidebots-show": "Amosta",
+ "rcshowhidebots": "$1 is bots",
+ "rcshowhidebots-show": "Ammustra",
"rcshowhidebots-hide": "Cua",
- "rcshowhideliu": "$1 usuàrios registrados",
- "rcshowhideliu-show": "Amosta",
+ "rcshowhideliu": "$1 is impitadores identificados",
+ "rcshowhideliu-show": "Ammustra",
"rcshowhideliu-hide": "Cua",
- "rcshowhideanons": "$1 usuàrios anònimos",
- "rcshowhideanons-show": "Amosta",
+ "rcshowhideanons": "$1 is impitadores anònimos",
+ "rcshowhideanons-show": "Ammustra",
"rcshowhideanons-hide": "Cua",
- "rcshowhidepatr-show": "Amosta",
+ "rcshowhidepatr": "$1 càmbios cumprobados",
+ "rcshowhidepatr-show": "Ammustra",
"rcshowhidepatr-hide": "Cua",
- "rcshowhidemine": "$1 acontzos meos",
- "rcshowhidemine-show": "Amosta",
+ "rcshowhidemine": "$1 is càmbios mios",
+ "rcshowhidemine-show": "Ammustra",
"rcshowhidemine-hide": "Cua",
"rclinks": "Ammustra is ùrtimas $1 mudàntzias fatas in is ùrtimas $2 dies<br />$3",
"diff": "dif",
"rc_categories_any": "Calesisiat",
"rc-change-size": "$1",
"newsectionsummary": "/* $1 */ setzione noa",
- "rc-enhanced-expand": "Amosta particulares",
+ "rc-enhanced-expand": "Ammustra particulares",
"rc-enhanced-hide": "Cua particulares",
"recentchangeslinked": "Mudàntzias ligadas",
"recentchangeslinked-feed": "Mudàntzias ligadas",
"recentchangeslinked-toolbox": "Mudàntzias ligadas",
"recentchangeslinked-title": "Mudàntzias ligadas a \"$1\"",
- "recentchangeslinked-summary": "Custa est una lista de is mudàntzias fatas dae pagu a is pàginas ligadas a cussa spetzificada.\nIs pàginas de sa [[Special:Watchlist|watchlist tua]] sunt in '''grassu'''.",
+ "recentchangeslinked-summary": "Custa est una lista de is mudàntzias fatas dae pagu a is pàginas ligadas a cussa spetzificada.\nIs pàginas [[Special:Watchlist|annotadas dae tue]] sunt in <strong>grassu</strong>.",
"recentchangeslinked-page": "Nùmene pàgina:",
"recentchangeslinked-to": "Ammustra feti mudàntzias a pàginas ligadas a cussa spetzificada",
"upload": "Càrriga file",
"destfilename": "Nùmene de su file de destinatzione:",
"upload-description": "Descritzione de su file",
"upload-success-subj": "Carrigamentu acabau",
+ "upload-failure-subj": "Problema de carrimentu",
"upload-file-error": "Faddina a intru",
- "license": "Licèntzia:",
- "license-header": "Licèntzia",
+ "img-auth-nofile": "Su File \"$1\" no esistit.",
+ "license": "Litzèntzia:",
+ "license-header": "Litzèntzia",
+ "licenses-edit": "Càmbia su sèberu de sa licèntzia",
"upload_source_file": "(su file seberadu in su computer tuo)",
+ "listfiles-delete": "Cantzella",
"imgfile": "file",
"listfiles": "Lista de is files",
"listfiles_date": "Data",
"listfiles_name": "Nùmene",
- "listfiles_user": "Usuàriu",
+ "listfiles_user": "Impitadore",
"listfiles_size": "Mannesa in byte",
"listfiles_description": "Descritzione",
"listfiles_count": "Versiones",
+ "listfiles-latestversion-yes": "Eja",
+ "listfiles-latestversion-no": "No",
"file-anchor-link": "File",
"filehist": "Stòria de su file",
"filehist-help": "Carca unu grupu data/ora pro castiare su file comente si presentada in su tempus indicadu.",
"filehist-deleteall": "fùlia totu",
"filehist-deleteone": "cantzella",
"filehist-revert": "fùrria",
- "filehist-current": "currente",
+ "filehist-current": "atuale",
"filehist-datetime": "Data/Ora",
"filehist-thumb": "Miniatura",
"filehist-thumbtext": "Miniatura de sa versione de is $1",
"filehist-nothumb": "Peruna miniatura",
- "filehist-user": "Usuàriu",
+ "filehist-user": "Impitadore",
"filehist-dimensions": "Dimensiones",
"filehist-filesize": "Mannesa de su file",
"filehist-comment": "Cummentu",
"imagelinks": "Ligant a custu file",
- "linkstoimage": "{{PLURAL:$1|Sa pàgina ki sighit ligat|Is $1 pàginas ki sighint ligant}} a custu file:",
+ "linkstoimage": "{{PLURAL:$1|Sa pàgina chi sighit ligat|Is $1 pàginas chi sighint ligant}} a custu file:",
"nolinkstoimage": "Peruna pàgina ligat a custu file.",
- "sharedupload": "Custu file benit dae $1 e podet èssere impreau in àteros progetos.",
+ "linkstoimage-redirect": "$1 (reindiritzamentu file) $2",
+ "sharedupload": "Custu file benit dae $1 e podet èssere impreadu in àteros progetos.",
+ "sharedupload-desc-here": "Custu documentu benit dae $1 e podet èssere impreadu in àteros progetos.\nA sighire est ammustrada sa descritzione in sa sua [$2 pàgina de descritzione de su documentu].",
"uploadnewversion-linktext": "Carriga una versione noa de custu file",
"shared-repo-from": "dae $1",
"filerevert-comment": "Motivu:",
"filedelete": "Cantzella $1",
"filedelete-legend": "Cantzella su file",
+ "filedelete-comment": "Motivu:",
"filedelete-submit": "Cantzella",
"filedelete-success": "Su file '''$1''' est istadu fuliau.",
+ "filedelete-otherreason": "Motivu diversu o agiuntivu:",
"filedelete-reason-otherlist": "Àteru motivu",
+ "mimesearch": "Chirca MIME",
+ "mimetype": "Genia MIME:",
"download": "scàrriga",
"listredirects": "Lista de totu is redirects",
"randompage": "Pàgina a sa tzurpa",
+ "randomincategory-category": "Categoria:",
"statistics": "Statìsticas",
"statistics-header-users": "Statìsticas subra is usuàrios",
"statistics-pages": "Pàginas",
+ "pageswithprop-submit": "Bae",
"doubleredirects": "Redirects dòpios",
"doubleredirectstext": "Custa pàgina cuntenet una lista de pàginas ki re-indiritzant a àteras pàginas de re-indiritzamentu.\nOgni lìnia cuntenet ligàmines a su primu e a su de duos re-indiritzamentu, aici comente sa prima lìnia de sa de duos re-indiritzamentos, chi de sòlitu adòbiat s'artìculu \"beru\", a sa cale fintzas su primu re-indiritzamentu dia depet puntare.\nIs re-indiritzamentos <del>cantzellados</del> sunt stados curretos.",
"brokenredirects": "Redirects isballiaus",
"nrevisions": "$1 {{PLURAL:$1|revisione|revisiones}}",
"nviews": "$1 {{PLURAL:$1|bisura|bisuras}}",
"lonelypages": "Pàginas burdas",
+ "uncategorizedpages": "Pàginas chentza categoria",
+ "uncategorizedcategories": "Categorias chentza categoria",
+ "uncategorizedimages": "Documentos chentza categoria",
+ "uncategorizedtemplates": "Templates chentza categoria",
+ "unusedcategories": "Categorias no impreadas",
"unusedimages": "Files no impreaus",
"popularpages": "Pàginas populares",
+ "wantedcategories": "Categorias chircadas",
"wantedpages": "Artìculos prus chircados",
+ "wantedfiles": "Documentos chircados",
+ "wantedtemplates": "Templates chircados",
+ "mostlinked": "Pàginas su prus ligadas",
+ "mostlinkedcategories": "Categorias su prus ligadas",
+ "mostimages": "Documentos su prus ligados",
"mostrevisions": "Pàginas cun prus revisiones",
"prefixindex": "Ìndighe de is pàginas pro initziales",
"shortpages": "Pàginas crutzas",
"longpages": "Pàginas longas",
"deadendpages": "Pàginas chentza bessida",
"protectedpages": "Pàginas amparadas",
+ "protectedpages-page": "Pàgina",
+ "protectedpages-expiry": "Iscadit",
+ "protectedpages-reason": "Motivu",
+ "protectedpages-unknown-timestamp": "Isconnottu",
"protectedtitles": "Tìtulus amparadus",
"listusers": "Lista usuàrios",
"usereditcount": "$1 {{PLURAL:$1|acontzu|acontzos}}",
"usercreated": "{{GENDER:$3|Creadu}} su $1 a is $2",
"newpages": "Pàginas noas",
- "newpages-username": "Nùmene usuàriu:",
- "move": "Movi",
+ "newpages-username": "Nùmene impitadore:",
+ "move": "Move",
"movethispage": "Move custa pàgina (càmbia su tìtulu)",
"unusedimagestext": "Is files ki sighint sunt stados carrigados ma non sunt impreados.\nDia podent essere immàgines impreadas dae àteros giassos cun unu ligàmine diretu, e tando podent essere listados inoghe comente usu ativu.",
"notargettitle": "Perunu obietivu",
- "notargettext": "Non hai specificato una pagina o un Utente in relazione al quale eseguire l'operazione richiesta.",
+ "notargettext": "Non as ispetzificadu una pàgina o unu impitadore pro issucutare custa funtzione.",
"pager-newer-n": "{{PLURAL:$1|1 prus nou|$1 prus nous}}",
"pager-older-n": "{{PLURAL:$1|1 prus betzu|$1 prus betzos}}",
"booksources": "Fontes libràrias",
"linksearch": "Chirca acàpios de foras",
"linksearch-ns": "Nùmene-logu:",
"linksearch-ok": "Chirca",
+ "linksearch-line": "$1 est ligadu in sa pàgina $2",
"listusers-submit": "Ammustra",
+ "listusers-blocked": "(blocadu)",
"activeusers-hidebots": "Cua bots",
"activeusers-hidesysops": "Cua amministradores",
"listgrouprights-group": "Grupu",
+ "listgrouprights-rights": "Deretos",
"listgrouprights-members": "(lista de is cumponentes)",
+ "listgrouprights-namespaceprotection-namespace": "Nùmene-logu",
"mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àer registradu un'indiritzu e-mail vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare e-mail a àteros usuàrios.",
- "emailuser": "E-mail a custu usuàriu",
- "emailpage": "Ispedi una missada a s'usuàriu",
- "emailpagetext": "Imprea su mòdulu a suta pro ispedire una missada eletrònica a custu usuàriu.\nS'indiritzu chi as insertadu in is [[Special:Preferences|preferèntzias usuàriu tuas]] at a pàrrere comente su chi at ispedidu sa e-mail, pro fàghere sa manera chi su destinatàriu ti respundat deretu.",
- "defemailsubject": "Missada dae s'usuàriu \"$1\" de {{SITENAME}}",
+ "emailuser": "Imbia una email a custu impitadore",
+ "emailuser-title-notarget": "Ispedi una email a s'impitadore",
+ "emailpage": "Ispedi una email a s'impitadore",
+ "emailpagetext": "Imprea su mòdulu a suta pro ispedire una email a custu impitadore.\nS'indiritzu chi as insertadu in is [[Special:Preferences|preferèntzias impitadore tuas]] at a pàrrere comente su chi at ispedidu sa e-mail, pro fàghere sa manera chi su destinatàriu ti respundat deretu.",
+ "defemailsubject": "Missada dae \"$1\", impitadore de {{SITENAME}}",
"noemailtitle": "Perunu indiritzu e-mail",
- "noemailtext": "Custu usuàriu no at ispetzificadu un indiritzu e-mail vàlidu.",
- "email-legend": "Imbia una missada e-mail a un àteru usuàriu de {{SITENAME}}",
+ "noemailtext": "Custu impitadore no at ispetzificadu unu indiritzu email vàlidu.",
+ "emailusername": "Nùmene impitadore:",
+ "email-legend": "Imbia una missada e-mail a un àteru impitadore de {{SITENAME}}",
"emailfrom": "Dae:",
"emailto": "A:",
"emailsubject": "Ogetu:",
"emailsent": "E-mail ispedia",
"emailsenttext": "Sa e-mail tua est istada imbiada.",
"usermessage-editor": "Missu de su sistema",
- "watchlist": "Sa watchlist mea",
+ "watchlist": "Pàginas annotadas",
"mywatchlist": "Pàginas annotadas",
+ "watchlistfor2": "Pro $1 $2",
"nowatchlist": "No as indicadu pàginas in sa watchlist tua.",
"watchnologin": "No intrau (log in)",
"addedwatchtext": "Sa pàgina \"[[:$1]]\" est istada aciunta a sa [[Special:Watchlist|watchlist]] tua.\nIs mudàntzias de custa pàgina e de sa pàgina de cuntierras sua ant a benner elencadas inoe.",
"removedwatchtext": "Sa pàgina \"[[:$1]]\" est istada tirada dae sa [[Special:Watchlist|watchlist tua]].",
- "watch": "Pone in sa watchlist",
+ "watch": "Annota",
"watchthispage": "Pone ogru a custu artìculu",
- "unwatch": "Tira dae sa watchlist",
+ "unwatch": "Tira dae is pàginas annotadas",
"unwatchthispage": "Boga custa pàgina dae sa watchlist tua",
"notanarticle": "Custa pàgina no est unu artìculu",
- "watchlist-details": "Sa watchlist tua cuntènnit {{PLURAL:$1|$1 pàgina|$1 pàginas}}, chentza contare is pàginas de cuntierras.",
+ "watchlist-details": "Tenes {{PLURAL:$1|$1 pàgina annotada paris a sa pagina de cuntierra sua|$1 pàginas annotadas paris a is pàginas de cuntierra issoro}}.",
"wlshowlast": "Ammustra is ùrtimas $1 oras $2 dies $3",
- "watchlist-options": "Possibilidades subra sa watchlist",
+ "watchlist-options": "Optziones subra sa lista de pàginas annotadas",
"watching": "Giunghende a sa watchlist...",
"unwatching": "Boghende dae sa watchlist...",
- "enotif_impersonal_salutation": "Usuàriu de {{SITENAME}}",
+ "enotif_impersonal_salutation": "Impitadore de {{SITENAME}}",
+ "enotif_anon_editor": "impitadore anònimu $1",
"created": "creada",
"deletepage": "Fùlia pàgina",
"confirm": "Cunfima",
"rollbackfailed": "Rollback faddidu",
"cantrollback": "Non si podet furriare s'acontzu;\ns'ùrtimu contribuidore est s'ùnicu autore de custa pàgina.",
"revertpage": "Burradas is mudàntzias de [[Special:Contributions/$2|$2]] ([[User talk:$2|cuntierras]]), torrada a sa versione cabudiana de [[User:$1|$1]]",
- "protectlogpage": "Amparaduras",
- "protectedarticle": "at amparau \"[[$1]]\"",
+ "protectlogpage": "Bardaduras",
+ "protectedarticle": "at bardadu \"[[$1]]\"",
"modifiedarticleprotection": "at cambiau su livellu de amparadura pro \"[[$1]]\"",
+ "prot_1movedto2": "[[$1]] est istada mòvida a [[$2]]",
+ "protect-legend": "Cunfirma amparadura",
"protectcomment": "Motivu:",
"protectexpiry": "Iscadèntzia:",
"protect_expiry_invalid": "S'iscadèntzia est imbàlida.",
"protect_expiry_old": "Iscadentzia giai passada.",
"protect-text": "Custu modulu serbit pro castiari e cambiari su livellu de amparadura de sa pàgina '''$1'''.",
"protect-locked-access": "Non tenes su permissu pro cambiare is livellus de amparadura de sa pàgina.\nIs impostatziones atuales pro sa pàgina '''$1''':",
- "protect-cascadeon": "A su momentu custa pàgina est bloccada pro ite est inclùdia {{PLURAL:$1|in sa pàgina indicada a suta, pro sa cali|in is pàginas indicadas a suta, pro is calis}} est ativa s'amparadura ricorsiva. Est possìbile cambiare su livellu de amparadura de custa pàgina, ma is impostatziones derivadas dae s'amparadura ricorsiva non ant a èssere mudadas.",
+ "protect-cascadeon": "A su momentu custa pàgina est bardada pro ite est inclùdida {{PLURAL:$1|in sa pàgina indicada a suta, pro sa cale|in is pàginas indicadas a suta, pro is cales}} est ativa sa bardadura ricorsiva.\nEst possìbile cambiare su livellu de bardadura de custa pàgina, ma is efetos derivados dae sa bardadura ricorsiva non ant a èssere mudados.",
"protect-default": "Autoritza totu is usuàrios",
- "protect-fallback": "Esigit su permissu \"$1\"",
- "protect-level-autoconfirmed": "Blocca is usuàrios nobos o non registrados",
- "protect-level-sysop": "Isceti aministradores",
+ "protect-fallback": "Permìtidu feti a is impitadores cun su permissu \"$1\"",
+ "protect-level-autoconfirmed": "Permìtidu feti a is impitadores autocunfimados",
+ "protect-level-sysop": "Permìtidu feti a is amministradores",
"protect-summary-cascade": "ricorsiva",
"protect-expiring": "iscadèntzia: $1 (UTC)",
+ "protect-expiring-local": "iscadit su $1",
"protect-cascade": "Ampara totu is pàginas inclùdias in custa (amparadura ricorsiva)",
"protect-cantedit": "Non podes cambiare is livellus de amparadura pro sa pàgina, pro ite non tenes su permissu de cambiare sa pàgina etotu.",
"protect-othertime": "Àteru perìodu:",
+ "protect-otherreason-op": "Àteru motivu",
"protect-expiry-options": "1 ora:1 hour,1 die:1 day,1 chida:1 week,2 chidas:2 weeks,1 mese:1 month,3 meses:3 months,6 meses:6 months,1 annu:1 year,infinidu:infinite",
"restriction-type": "Permissu:",
"restriction-level": "Livellu de restritzioni:",
"undeleterevisions": "$1 {{PLURAL:$1|revisione|revisiones}} in archìviu",
"undeletehistory": "Restaurende custa pàgina, totu is revisiones ant a torrare in sa istòria sua.\nChi est istada creada una pàgina cun su matessi tìtulu, is revisiones recuperadas ant a insertare in sa istoria in antis.",
"undeletebtn": "Ripristina",
- "undeletelink": "càstia/riprìstina",
- "undeleteviewlink": "abbista",
+ "undeletelink": "càstia/torra che prima",
+ "undeleteviewlink": "ammustra",
"undeleteinvert": "Fùrria sa seletzione",
"undeletecomment": "Motivu:",
"undeletedrevisions": "{{PLURAL:$1|1 revisione restaurada|$1 revisiones restauradas}}",
"namespace": "Nùmene-logu:",
"invert": "Fùrria sa seletzione",
"blanknamespace": "(Printzipale)",
- "contributions": "Contributziones {{GENDER:$1|usuàriu}}",
+ "contributions": "Contributos {{GENDER:$1|impitadore}}",
"contributions-title": "Contributziones de $1",
- "mycontris": "Contributziones meas",
+ "mycontris": "Contributos mios",
"contribsub2": "Pro {{GENDER:$3|$1}} ($2)",
"nocontribs": "Nessuna modifica trovata conformemente a questi criteri.",
"uctop": "(atuale)",
- "month": "Dae su mese (e in antis):",
- "year": "Dae s'annu (e in antis):",
+ "month": "Dae su mese (e in segus):",
+ "year": "Dae s'annu (e in segus):",
"sp-contributions-newbies": "Ammustra feti is contributziones de is contos noos",
"sp-contributions-blocklog": "registru de is bloccos",
+ "sp-contributions-uploads": "carrigamentos",
+ "sp-contributions-logs": "registros",
"sp-contributions-talk": "cuntierra",
- "sp-contributions-search": "Chirca contributziones",
- "sp-contributions-username": "Indiritzu IP o nùmene usuàriu:",
+ "sp-contributions-search": "Chirca contributos",
+ "sp-contributions-username": "Indiritzu IP o nùmene impitadore:",
+ "sp-contributions-toponly": "Ammustra feti is contributos chi sunt is ùrtimas versiones pro sa pàgina",
"sp-contributions-submit": "Chirca",
"whatlinkshere": "Pàginas chi ligant a custa",
"whatlinkshere-title": "Pàginas chi ligant a \"$1\"",
"whatlinkshere-page": "Pàgina:",
- "linkshere": "Sas pàginas chi sighint ligant a '''[[:$1]]''':",
+ "linkshere": "Is pàginas chi sighint ligant a '''[[:$1]]''':",
"nolinkshere": "Peruna pàgina ligat a '''[[:$1]]'''.",
"nolinkshere-ns": "Peruna pàgina ligat a '''[[:$1]]''' in su nùmene-logu seberadu.",
- "isredirect": "redirect",
+ "isredirect": "pàgina de reindiritzamentu",
"istemplate": "inclusione",
- "isimage": "acàpiu a file",
- "whatlinkshere-prev": "{{PLURAL:$1|cabudianu|cabudianos $1}}",
+ "isimage": "ligòngiu a documentu",
+ "whatlinkshere-prev": "{{PLURAL:$1|pretzedente|pretzedentes $1}}",
"whatlinkshere-next": "{{PLURAL:$1|imbeniente|imbenientes $1}}",
- "whatlinkshere-links": "← acàpius",
- "whatlinkshere-hideredirs": "$1 redirects",
- "whatlinkshere-hidetrans": "$1 inclusionis",
- "whatlinkshere-hidelinks": "$1 acàpius",
+ "whatlinkshere-links": "← ligòngios",
+ "whatlinkshere-hideredirs": "$1 is reindiritzamentos",
+ "whatlinkshere-hidetrans": "$1 inclusiones",
+ "whatlinkshere-hidelinks": "$1 ligòngios",
+ "whatlinkshere-hideimages": "$1 is ligòngios a documentu",
"whatlinkshere-filters": "Filtros",
- "blockip": "Blocca {{GENDER:$1|usuàriu}}",
- "blockip-legend": "Blocca usuàriu",
+ "blockip": "Blocca {{GENDER:$1|impitadore}}",
+ "blockip-legend": "Blocca impitadore",
"blockiptext": "Usa il modulo sottostante per bloccare l'accesso con diritto di scrittura da uno specifico indirizzo IP. Questo blocco deve essere operato SOLO per prevenire atti di vandalismo, ed in stretta osservanza dei principi tutti della [[{{MediaWiki:Policy-url}}|policy di {{SITENAME}}]]. Il blocco non può in nessun caso essere applicato per motivi ideologici.\nScrivi un motivo specifico per il quale questo indirizzo IP dovrebbe a tuo avviso essere bloccato (per esempio, cita i titoli di pagine eventualmente già oggetto di vandalismo editoriale).",
- "ipaddressorusername": "Indiritzu IP o nùmene usuàriu:",
+ "ipaddressorusername": "Indiritzu IP o nùmene impitadore:",
"ipbexpiry": "Scadèntzia:",
"ipbreason": "Motivu:",
- "ipbsubmit": "Blocca custu usuàriu",
+ "ipbsubmit": "Blocca custu impitadore",
"ipbother": "Àteru perìodu:",
"ipboptions": "2 oras:2 hours,1 die:1 day,3 dies:3 days,1 chida:1 week,2 chidas:2 weeks,1 mese:1 month,3 meses:3 months,6 meses:6 months,1 annu:1 year,infinidu:infinite",
"badipaddress": "S'indiritzu IP indicadu non est currègidu.",
"ipb-edit-dropdown": "Càmbia su motivu de su bloccu",
"ipb-unblock-addr": "Sblocca $1",
"ipb-blocklist-contribs": "Contributziones de {{GENDER:$1|$1}}",
- "unblockip": "Sblocca s'usuàriu",
+ "unblockip": "Sblocca s'impitadore",
"unblockiptext": "Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.",
"ipusubmit": "Boga custu bloccu",
- "ipblocklist": "Usuàrios bloccados",
+ "ipblocklist": "Impitadores bloccados",
+ "blocklist-expiry": "Iscadit",
+ "blocklist-reason": "Motivu",
"ipblocklist-submit": "Chirca",
"infiniteblock": "infinitu",
"expiringblock": "scadit su $1 a is $2",
- "blocklink": "blocca",
+ "blocklink": "arrea",
"unblocklink": "sblocca",
- "change-blocklink": "tramuda su bloccu",
- "contribslink": "contributziones",
- "blocklogpage": "Bloccos de usuàrios",
+ "change-blocklink": "tramuda s'arreu",
+ "contribslink": "contributos",
+ "emaillink": "imbia email",
+ "blocklogpage": "Bloccos de impitadores",
"blocklogentry": "bloccau [[$1]] pro unu tempu de $2 $3",
"unblocklogentry": "at sbloccau $1",
- "block-log-flags-nocreate": "creatzione de contu bloccada est",
+ "block-log-flags-nocreate": "registrazione bloccada",
"sorbs": "DNSBL",
"lockdb": "Blocca su database",
"unlockdb": "Sblocca su database",
"movepagetext": "Cun custu mòdellu podes renumenare una pàgina, movende totu sa stòria sua a sa pàgina noa.\nSu tìtulu bèciu at a diventare una pàgina de reindiritzamentu a su tìtulu nou.\nPodes agiornare automaticamente is redirects ca ligant a su tìtulu originàriu.\nSi sèberas de no, assicura·ti de controllare pro [[Special:DoubleRedirects| reindiritzaduras dòpias]] o [[Special:BrokenRedirects|sballiadas]].\nSes responsàbile de t'assigurare ca is cullegamentos sighint a puntare a ue depent puntare.\n\nAnnota ca sa pàgina <strong>non</strong> s'at a mòver si nde esistit giai un'àtera a su tìtulu nou, si no est ki siat bùida o cun sceti unu reindiritzamentu a sa bècia e siat chentza acontzos in antis. In casu de movimentu sballiadu, duncas, si podet torrare a su tìtulu bèciu, ma non podes subrascrìer una pàgina chi giai esistit.\n\n<strong>ATENTZIONE!</strong>\nUnu cambiamentu dràsticu podet creare problemas, mescamente a is pàginas prus populares;\npro praxere depes èsser seguru de àer cumpresu is cunsighèntzias prima de sighire a in antis.",
"movepagetalktext": "Sa pàgina cuntierras asotziada, chi esistit, at a èssere movida automaticamenti impare a sa pàgina base, '''a parte in custos casos''':\n* su movimentu de sa pàgina est intre namespaces diversos;\n* in currispondèntzia de su tìtulu nou esistit giai una pàgina de cuntierras (non bùida);\n* sa casella inoe in bàsciu no est istata sceberada.\n\nIn custos casos, si cheres, depes mòvere a manu su cuntènnidu de sa pàgina.",
"movearticle": "Move sa pàgina",
- "movenologintext": "Depes èsser unu usuàriu registradu e [[Special:UserLogin|identificadu]] pro pòder mòver una pàgina",
+ "movenologintext": "Depes èsser unu impitadore registradu e [[Special:UserLogin|identificadu]] pro pòder mòver una pàgina",
"newtitle": "Tìtulu nou:",
"move-watch": "Pone ogru a custa pàgina",
"movepagebtn": "Move sa pàgina",
"pagemovedsub": "Movimentu andadu bene",
"movepage-moved": "'''\"$1\" est istada mòvida a \"$2\"'''",
+ "movepage-moved-redirect": "Unu reindiritzamentu est istadu creadu.",
"articleexists": "Una pàgina cun custu nùmene esistit giai, o su nùmene ki as seberadu no est bàlidu.\nPro praxere sèbera un'àteru nùmene.",
"movetalk": "Move sa pàgina de cuntierra galu",
"movelogpage": "Moviduras",
"immobile-source-page": "Non si podet mòver custa pàgina.",
"move-leave-redirect": "Lassa unu reindiritzamentu a palas",
"export": "Esporta pàginas",
+ "export-submit": "Esporta",
"export-download": "Sarba comente file",
"allmessagesname": "Nùmene",
+ "allmessagesdefault": "Testu predefinidu",
"allmessages-filter-legend": "Filtru",
"allmessages-filter-all": "Totu",
"allmessages-language": "Limba:",
"allmessages-filter-submit": "Bae",
"allmessages-filter-translate": "Tradui",
"thumbnail-more": "Amannia",
+ "thumbnail_error": "Faddina creande sa miniatura: $1",
+ "import-interwiki-submit": "Importa",
"import-interwiki-namespace": "Nùmene-logu de destinatzione:",
"import-upload-filename": "Nùmene file:",
"import-comment": "Cummentu:",
- "tooltip-pt-userpage": "Sa pàgina usuàriu tua",
+ "importstart": "Importande is pàginas...",
+ "import-revision-count": "$1 {{PLURAL:$1|revisione|revisiones}}",
+ "tooltip-pt-userpage": "Sa pàgina impitadore tua",
"tooltip-pt-mytalk": "Sa pàgina de is cuntierras tuas",
- "tooltip-pt-preferences": "Is preferèntzias chi podes scioberai",
- "tooltip-pt-watchlist": "Sa lista de is pàginas chi tue ses ponende ogru",
- "tooltip-pt-mycontris": "Sa lista de is contributziones meas",
- "tooltip-pt-login": "Si cunsìgiat sa registratzione; mancari non siat obligatoria",
+ "tooltip-pt-preferences": "Is preferèntzias chi podes seberare",
+ "tooltip-pt-watchlist": "Lista de is pàginas annotadas dae tue pro is mudàntzias",
+ "tooltip-pt-mycontris": "Sa lista de is contributos mios",
+ "tooltip-pt-login": "Sa registratzione est cussigiada; mancari chi non siat obligatoria",
"tooltip-pt-logout": "Essida (log out)",
- "tooltip-ca-talk": "Cuntierras a propositu de su cuntestu de sa pàgina",
+ "tooltip-ca-talk": "Cuntierras a propòsitu de su cuntestu de sa pàgina",
"tooltip-ca-edit": "Podes cambiare custa pàgina.\nPro praxere, prima de sarbare càstia s'antiprima",
- "tooltip-ca-addsection": "Incumintza una setzione noa",
- "tooltip-ca-viewsource": "Sa pàgina est amparada.\nPodes castiare sa mitza sua",
+ "tooltip-ca-addsection": "Incumentza una setzione noa",
+ "tooltip-ca-viewsource": "Sa pàgina est bardada.\nPodes castiare sa mitza sua",
"tooltip-ca-history": "Versiones coladas de custa pàgina",
- "tooltip-ca-protect": "Ampara custa pàgina",
- "tooltip-ca-delete": "Fùlia custa pàgina",
+ "tooltip-ca-protect": "Barda custa pàgina",
+ "tooltip-ca-delete": "Burra custa pàgina",
"tooltip-ca-move": "Move custa pàgina (càmbia su tìtulu)",
- "tooltip-ca-watch": "Giunghe custa pàgina a sa ''watchlist'' tua",
- "tooltip-ca-unwatch": "Tira custa pàgina da sa watchlist tua",
- "tooltip-search": "Chirca a intru de {{SITENAME}}",
- "tooltip-search-go": "Anda a una pàgina cun custu nùmene, si esistit",
- "tooltip-search-fulltext": "Chirca custu testu in sas pàginas",
+ "tooltip-ca-watch": "Annota custa pàgina pro is mudàntzias",
+ "tooltip-ca-unwatch": "Rimove custa pàgina dae sa lista de pàginas annotadas tua",
+ "tooltip-search": "Chirca in intru de {{SITENAME}}",
+ "tooltip-search-go": "Bae a una pàgina cun su nùmene indicadu, si esistit",
+ "tooltip-search-fulltext": "Chirca custu testu in is pàginas",
"tooltip-p-logo": "Bìsita sa pàgina base",
"tooltip-n-mainpage": "Bìsita sa pàgina base",
"tooltip-n-mainpage-description": "Bìsita sa pàgina base",
"tooltip-n-portal": "Descritzione de su progetu, ite podes fàgher, a innue agatas is cosas",
- "tooltip-n-currentevents": "Informatziones subra acuntèssias atuales",
- "tooltip-n-recentchanges": "Sa lista de is ùrtimas mudàntzias de su giassu",
+ "tooltip-n-currentevents": "Informatziones subra acadessimentos atuales",
+ "tooltip-n-recentchanges": "Lista de is ùrtimas mudàntzias in su giassu",
"tooltip-n-randompage": "Càrriga una pàgina a sorte",
"tooltip-n-help": "Pàginas de agiudu",
"tooltip-t-whatlinkshere": "Lista de totu is pàginas chi ligant a custa",
"tooltip-t-recentchangeslinked": "Lista de is ùrtimas mudàntzias de is pàginas ki ligant a custa",
"tooltip-feed-rss": "RSS feed pro custa pàgina",
"tooltip-feed-atom": "Atom feed pro custa pàgina",
- "tooltip-t-contributions": "Càstia sa lista de is contributziones de custu usuàriu",
- "tooltip-t-emailuser": "Ispedi una missada eletronica a custu usuàriu",
+ "tooltip-t-contributions": "Càstia sa lista de is contributos de custu impitadore",
+ "tooltip-t-emailuser": "Ispedi una email a custu impitadore",
"tooltip-t-upload": "Càrriga file multimediale",
"tooltip-t-specialpages": "Lista de is pàginas ispetziales",
"tooltip-t-print": "Versione de custa pàgina pro s'imprenta",
- "tooltip-t-permalink": "Cullegamentu permanente a custa versione de sa pàgina",
+ "tooltip-t-permalink": "Ligòngiu permanente a custa versione de sa pàgina",
"tooltip-ca-nstab-main": "Càstia su cuntènnidu de sa pàgina",
- "tooltip-ca-nstab-user": "Càstia sa pàgina usuàriu",
+ "tooltip-ca-nstab-user": "Càstia sa pàgina impitadore",
"tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non dda podes cambiare",
"tooltip-ca-nstab-project": "Càstia sa pàgina de servìtziu",
"tooltip-ca-nstab-image": "Càstia sa pàgina de su file",
"tooltip-ca-nstab-template": "Càstia su template",
"tooltip-ca-nstab-category": "Càstia sa pàgina de sa categoria",
- "tooltip-minoredit": "Signa comente acontzu minore",
+ "tooltip-minoredit": "Marca custa muda comente càmbiu minore",
"tooltip-save": "Sarva is mudàntzias tuas",
- "tooltip-preview": "Antiprima de is mudàntzias, pro pregeri usa custu prima de sarvari!",
- "tooltip-diff": "Ammustra is mudàntzias ki as fatu a su testu",
+ "tooltip-preview": "Antiprima de is mudas fatas, pro praghere usa custu prima de sarvare!",
+ "tooltip-diff": "Ammustra is mudàntzias chi as fatu a su testu",
"tooltip-compareselectedversions": "Càstia is diferèntzias de is duas versiones seberadas de custa pàgina",
- "tooltip-watch": "Aciungi custa pàgina a sa watchlist tua",
+ "tooltip-watch": "Annota custa pàgina pro is mudàntzias",
"tooltip-recreate": "Torra a creare sa pàgina mancari siat stada fuliada",
"tooltip-upload": "Cumentza a carrigare",
- "tooltip-rollback": "\"Rollback\" annudda is mudàntzias de custa pàgina fatas dae s'ùrtimu contribudori",
- "tooltip-undo": "\"Annudda\" fùrriat custu acontzu e aberit su mòdulu de acontzu comente antiprima.\nPodes agiùnger unu motivu in s'ogetu de s'acontzu.",
- "siteuser": "$1, {{GENDER:$1|usuàriu|usuària}} de {{SITENAME}}",
- "anonuser": " $1, usuàriu anònimu de {{SITENAME}}",
+ "tooltip-rollback": "\"Rollback\" annudda is mudàntzias de custa pàgina fatas dae s'ùrtimu contribudore",
+ "tooltip-undo": "\"Annudda\" fùrriat custu càmbiu e aberit su mòdulu de càmbiu comente antiprima.\nPodes annànghere unu motivu in s'ogetu.",
+ "tooltip-preferences-save": "Sarva preferèntzias",
+ "tooltip-summary": "Inserta unu resumu curtzu",
+ "siteuser": "$1, impitadore de {{SITENAME}}",
+ "anonuser": "$1, impitadore anònimu de {{SITENAME}}",
"others": "àteros",
"siteusers": "$1, {{PLURAL:$2|usuàriu|usuàrios}} de {{SITENAME}}",
"anonusers": "$1, {{PLURAL:$2|usuàriu anònimu|usuàrios anònimos}} de {{SITENAME}}",
"creditspage": "Autores de sa pàgina",
- "previousdiff": "← Acontzu in antis",
- "nextdiff": "Acontzu in fatu →",
+ "pageinfo-article-id": "ID pàgina",
+ "pageinfo-contentpage-yes": "Eja",
+ "pageinfo-protect-cascading-yes": "Eja",
+ "previousdiff": "← Acontzu in segus",
+ "nextdiff": "Acontzu in antis →",
+ "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pàgina|pàginas}}",
"file-info-size": "$1 × $2 pixels, mannesa de su file: $3, tipu de MIME: $4",
"file-nohires": "Non si tenent risolutziones prus artas.",
"svg-long-desc": "file in formadu SVG, mannesa nominale $1 × $2 pixel, mannesa de su file: $3",
"seconds-abbrev": "$1s",
"minutes-abbrev": "$1m",
"hours-abbrev": "$1h",
- "bad_image_list": "Su formau est su chi sighit:\n\nBenint consideraus isceti is listas putadas (lìnias chi incumentzant cun *).\nSu primu cullegamentu depit èssere unu acàpiu a unu file malu (o indesiderau).\nIs acàpius chi sighint in sa matessi lìnia sunt cunsideraus comente eccetziones (ossiat, pàginas innui si podet usare su file).",
+ "bad_image_list": "Su formadu est su chi sighit:\n\nBenint consideradas isceti is listas punnadas (lìnias chi incumentzant cun *).\nSu primu ligòngiu in cada una lìnia depet èssere unu ligòngiu a unu documentu malu (o indesideradu).\nIs ligòngios chi sighint in sa matessi lìnia sunt cunsiderados comente etzetziones (est a nàrrere, pàginas in ue si podet usare su documentu).",
"metadata": "Metadatos",
- "metadata-help": "Custu file cuntènnit informatziones aciuntivas, probabilmente aciuntas dae sa fotocamera o dae su scannerizadori impreaus pro ddu creare o ddu digitalizare. Si su file est istadu acontzau, unos particolares podent non currispundere a sa realtade.",
+ "metadata-help": "Custu file cuntènnit informatziones annuntiles, probabilmente annúnghedas dae sa fotocamera o dae su scannerizadore impreadu pro ddu creare o ddu digitalizare. Si su file est istadu mudadu, unos cantos particulares podent non currispòndere a sa realidade.",
"metadata-expand": "Ammustra particulares",
"metadata-collapse": "Cua particulares",
- "metadata-fields": "Is campus de is metadatos de imàgine listadus in custu messàgiu ant a èssere amostadus in sa pàgina de s'immàgine candu sa tabella de is metadatos est presentada in forma breve. Pro impostatzione predefinia, is àteros campus ant a èssere cuaus.\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",
+ "metadata-fields": "Is campus de is metadatos de imàgine listados in custu messàgiu ant a èssere ammustrados in sa pàgina de s'immàgine candu sa tabella de is metadatos est presentada in forma breve. Pro impostatzione predefinida, is àteros campos ant a èssere cuaos.\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": "Autore",
"exif-exposuretime-format": "$1 s ($2)",
"exif-fnumber-format": "f/$1",
"word-separator": " ",
"ellipsis": "…",
"percent": "$1%",
+ "quotation-marks": "\"$1\"",
"imgmultipageprev": "← pàgina in antis",
"imgmultipagenext": "pàgina in fatu →",
"imgmultigo": "Bae!",
"imgmultigoto": "Bae a sa pàgina $1",
+ "img-lang-go": "Bae",
"table_pager_first": "Primu pàgina",
"table_pager_last": "Ùrtima pàgina",
"table_pager_limit_submit": "Bae",
"size-gigabytes": "$1 GB",
"watchlistedit-normal-title": "Càmbia sa lista de annotadas",
"watchlistedit-raw-titles": "Tìtulos:",
+ "watchlistedit-clear-titles": "Tìtulos:",
"watchlisttools-view": "Càstia mudàntzias de importu",
- "watchlisttools-edit": "Càstia e acontza sa watchlist",
+ "watchlisttools-edit": "Càstia e càmbia sa lista de pàginas annotadas",
"watchlisttools-raw": "Acontza sa watchlist dae su testu",
"timezone-utc": "UTC",
"version": "Versione",
"version-other": "Àteru",
"version-version": "(Versione $1)",
"version-license": "Licèntzia MediaWiki",
+ "version-ext-license": "Licèntzia",
+ "version-ext-colheader-license": "Licèntzia",
+ "version-poweredby-others": "àteros",
"version-software-version": "Versione",
+ "version-entrypoints-header-url": "URL",
+ "redirect-submit": "Bae",
+ "redirect-user": "ID impitadore",
+ "redirect-page": "ID pàgina",
"fileduplicatesearch-submit": "Chirca",
"specialpages": "Pàginas ispetziales",
+ "specialpages-note-top": "Legenda",
"specialpages-group-login": "Intra / crea contu",
"specialpages-group-pages": "Listas de is pàginas",
+ "tag-filter": "Filtra pro [[Special:Tags|etichetta]]:",
+ "tags-active-yes": "Eja",
+ "tags-active-no": "No",
"tags-edit": "càmbia",
+ "compare-page1": "Pàgina 1",
+ "compare-page2": "Pàgina 2",
+ "compare-rev1": "Revisione 1",
+ "compare-rev2": "Revisione 2",
"htmlform-selectorother-other": "Àteru",
+ "htmlform-no": "No",
+ "htmlform-yes": "Eja",
+ "logentry-upload-upload": "$1 {{GENDER:$2|carrigadu}} $3",
+ "logentry-upload-overwrite": "$1 {{GENDER:$2|carrigadu}} una versione noa de $3",
+ "logentry-upload-revert": "$1 {{GENDER:$2|carrigadu}} $3",
"rightsnone": "(nisciunu)",
+ "feedback-close": "Fatu",
"searchsuggest-search": "Chirca",
- "expand_templates_preview": "Antiprima"
+ "expand_templates_ok": "OK",
+ "expand_templates_preview": "Antiprima",
+ "pagelang-name": "Pàgina",
+ "pagelang-select-lang": "Sèbera limba"
}
"userlogin-resetlink": "T'ascurdasti li dittagli pâ trasuta?",
"userlogin-resetpassword-link": "Reinizzializza la tò password",
"userlogin-helplink2": "Aiutu pâ trasuta",
- "userlogin-loggedin": "Vossia già trasìu comu {{GENDER:$1|$1}}.\nUsassi lu mòdulu ccassutta pi tràsiri comu autru utenti.",
- "userlogin-createanother": "Crèa n'autru cuntu",
"createacct-emailrequired": "Nnirizzu e-mail",
"createacct-emailoptional": "Nnirizzu e-mail (facurtativu)",
"createacct-email-ph": "Nzirisci lu tò nnirizzu e-mail",
"edit-conflict": "Cunflittu di edizzioni.",
"edit-no-change": "La mudifica fu ignurata pirchì nu foru appurtati canci ntô testu.",
"postedit-confirmation-saved": "Lu canciamentu fu sarbatu.",
- "edit-already-exists": "Mpussìbbili criari na nova pàggina.\nEsisti ggià.",
+ "edit-already-exists": "Mpussìbbili criari na pàggina nova.\nEsisti ggià.",
"expensive-parserfunction-warning": "Accura: Sta pàggina cunteni troppi chiamati ê parser functions.\n\nAvissi a èssiri menu di $2, ô mumentu ci {{PLURAL:$1|nn'è $1|nni sunnu $1}}.",
"expensive-parserfunction-category": "Pàggini cu troppi chiamati ê parser functions",
"post-expand-template-inclusion-warning": "Accura: la diminzioni di li template nziriti è troppu granni.\nArcuni template non vènunu nziriti.",
"recentchanges-label-bot": "Stu canciamentu fu fattu dû bot",
"recentchanges-label-unpatrolled": "Stu canciamentu nun havi ancora statu virificatu",
"recentchanges-label-plusminus": "La diminsioni dâ pàggina canciau di stu nùmmuru di bytes",
- "recentchanges-legend-newpage": "$1 - pàggina nova",
+ "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (talìa [[Special:NewPages|li pàggini novi]])",
"rcnotefrom": "Ccà sutta cci sunnu li canciamenti a pàrtiri dû <b>$2</b> (ammustrati nzinu ô <b>$1</b>).",
"rclistfrom": "Ammustra li canciamenti novi a pàrtiri di $3 $2",
"rcshowhideminor": "$1 li canciamenti nichi",
"import": "Mporta pàggini",
"importinterwiki": "Mpurtazzioni transwiki",
"import-interwiki-text": "Silizziunari un pruggettu wiki e lu tìtulu dâ pàggina a mpurtari. Li dati di pubbricazzioni e li noma di l'autura dî vari virsioni sunnu sarvati. Tutti l'opirazzioni di mpurtazzioni trans-wiki sunnu riggistrati ntô [[Special:Log/import|log di mpurtazzioni]].",
- "import-interwiki-source": "Surgenti wiki/pàggina:",
"import-interwiki-history": "Copia la ntera cronoluggìa di sta pàggina",
"import-interwiki-templates": "Includi tutti li template",
"import-interwiki-submit": "Mporta",
"gotaccountlink": "පිවිසෙන්න",
"userlogin-resetlink": "ඔබේ පිවිසුම් තොරතුරු අමතකද?",
"userlogin-resetpassword-link": "ඔබේ මුරපදය නැති වුනාද?",
- "userlogin-loggedin": "ඔබ දැනටමත් {{GENDER:$1|}} ලෙස පිවිසී ඇත.\nනව පරිශීලකයෙකු ලෙස ඇතුළු වීමට පහත ආකෘතිය පුරවන්න.",
- "userlogin-createanother": "තවත් ගිණුමක් ආරම්භ කරන්න",
"createacct-emailrequired": "වි-තැපෑල ලිපිනය",
"createacct-emailoptional": "වි-තැපෑල ලිපිනය (විකල්ප)",
"createacct-email-ph": "ඔබගේ වි-තැපෑල ලිපිනය ඇතුළු කරන්න",
"hidetoc": "skryť",
"collapsible-collapse": "zbaliť",
"collapsible-expand": "rozbaliť",
+ "confirmable-yes": "Áno",
+ "confirmable-no": "Nie",
"thisisdeleted": "Zobraziť alebo obnoviť $1?",
"viewdeleted": "Zobraziť $1?",
"restorelink": "{{PLURAL:$1|jednu zmazanú úpravu|$1 zmazané úpravy|$1 zmazaných úprav}}",
"userlogin-resetlink": "Zabudli ste svoje prihlasovacie údaje?",
"userlogin-resetpassword-link": "Zabudli ste heslo?",
"userlogin-helplink2": "Pomoc s prihlásením",
- "userlogin-loggedin": "Ste už {{GENDER:$1|prihĺasený|prihlásená}} ako $1.\nPomocou formulára nižšie sa môžete prihlásiť ako iný redaktor.",
- "userlogin-createanother": "Vytvoriť ďalší účet",
"createacct-emailrequired": "E-mailová adresa",
"createacct-emailoptional": "E-mailová adresa (nepovinné)",
"createacct-email-ph": "Zadajte vašu e-mailovú adresu",
"resetpass-temp-password": "Dočasné heslo:",
"resetpass-abort-generic": "Zmena hesla bola zablokovaná rozšírením.",
"resetpass-expired": "Platnosť vášho hesla vypršala. Pre prihlásenie si nastavte nové heslo.",
+ "resetpass-expired-soft": "Platnosť vášho hesla vypršala, musíte si nastaviť nové. Zvoľte si nové heslo nebo kliknite na „{{int:resetpass-submit-cancel}}“ a nastavte si ho neskôr.",
+ "resetpass-validity-soft": "Vaše heslo je neplatné: $1\n\nVyberte si nové heslo, alebo kliknite na „{{int:resetpass-submit-cancel}}“ a nastavte si ho neskôr.",
"passwordreset": "Reset hesla",
"passwordreset-text-one": "Pre získanie nového hesla vyplňte tento formulár.",
"passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla zadajte jeden z údajov.}}",
"license-nopreview": "(Náhľad nie je dostupný)",
"upload_source_url": " (platný, verejne prístupný URL)",
"upload_source_file": " (súbor na vašom počítači)",
+ "listfiles-delete": "zmazať",
"listfiles-summary": "Táto špeciálna stránka zobrazuje všetky nahrané súbory.",
"listfiles_search_for": "Hľadať názov súboru:",
"imgfile": "súbor",
"randomincategory": "Náhodná stránka v kategórii",
"randomincategory-invalidcategory": "\"$1\" nie je platný názov kategórie.",
"randomincategory-nopages": "V [[:Category:$1|kategórii $1]] nie sú žiadne stránky.",
- "randomincategory-selectcategory": "Získať náhodnú stránku z kategórie: $1 $2",
- "randomincategory-selectcategory-submit": "Ísť na",
+ "randomincategory-category": "Kategória:",
+ "randomincategory-legend": "Náhodná stránka v kategórii",
"randomredirect": "Náhodná presmerovacia stránka",
"randomredirect-nopages": "V mennom „$1“ priestore nie sú žiadne presmerovania.",
"statistics": "Štatistiky",
"pageswithprop-prophidden-binary": "hodnota binárnej vlastnosti bola skrytá ($1)",
"doubleredirects": "Dvojité presmerovania",
"doubleredirectstext": "Táto stránka obsahuje zoznam stránok, ktoré presmerovávajú na iné presmerovacie stránky.\nKaždý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riadok z textu na ktorý odkazuje druhé presmerovanie, ktoré zvyčajne odkazuje na „skutočný“ cieľ, na ktorý má odkazovať prvé presmerovanie.\n<del>Prečiarknuté</del> položky boli vyriešené.",
- "double-redirect-fixed-move": "Stránka [[$1]] bola presunutá, teraz je presmerovaním na [[$2]]",
+ "double-redirect-fixed-move": "Stránka [[$1]] bola presunutá.\nBola automaticky aktualizovaná a teraz presmerováva na [[$2]]",
"double-redirect-fixed-maintenance": "Opravuje sa dvojité presmerovanie z [[$1]] na [[$2]].",
"double-redirect-fixer": "Korektor presmerovaní",
"brokenredirects": "Pokazené presmerovania",
"import": "Import stránok",
"importinterwiki": "Transwiki import",
"import-interwiki-text": "Zvoľte wiki a názov stránky, ktorá sa má importovať.\nDátumy revízií a mená používateľov budú zachované.\nVšetky transwiki importy sa zaznamenávajú v [[Special:Log/import|Zázname importov]].",
- "import-interwiki-source": "Zdrojová wiki/stránka:",
"import-interwiki-history": "Skopírovať všetky historické revízie tejto stránky",
"import-interwiki-templates": "Vložiť všetky šablóny",
"import-interwiki-submit": "Importovať",
"watchlistedit-raw-done": "Váš zoznam sledovaných stránok bol aktualizovaný.",
"watchlistedit-raw-added": "{{PLURAL:$1|Jedna položka bola pridaná|$1 položky boli pridané|$1 položiek bolo pridaných}}:",
"watchlistedit-raw-removed": "{{PLURAL:$1|Jedna položka bola odstránená|$1 položky boli odstránené|$1 položiek bolo odstránených}}:",
+ "watchlistedit-clear-titles": "Názvy:",
"watchlisttools-view": "Zobraziť súvisiace zmeny",
"watchlisttools-edit": "Zobraziť a upraviť zoznam sledovaných stránok",
"watchlisttools-raw": "Upraviť nespracovaný zoznam sledovaných stránok",
"version-license": "Licencia",
"version-ext-license": "Licencia",
"version-ext-colheader-name": "Rozšírenie",
+ "version-skin-colheader-name": "Vzhľad",
"version-ext-colheader-version": "Verzia",
"version-ext-colheader-license": "Licencia",
"version-ext-colheader-description": "Popis",
"htmlform-no": "Nie",
"htmlform-yes": "Áno",
"htmlform-chosen-placeholder": "Vyberte možnosť",
+ "htmlform-cloner-create": "Pridať ďalšie",
+ "htmlform-cloner-delete": "Odstrániť",
"sqlite-has-fts": "$1 s podporou vyhľadávania v plnom texte",
"sqlite-no-fts": "$1 bez podpory vyhľadávania v plnom texte",
"logentry-delete-delete": "$1 zmazal stránku $3",
"expand_templates_remove_comments": "Odstrániť komentáre",
"expand_templates_remove_nowiki": "Potlačiť značky <nowiki> vo výsledku",
"expand_templates_generate_xml": "Zobraziť strom XML",
- "expand_templates_preview": "Náhľad"
+ "expand_templates_preview": "Náhľad",
+ "pagelang-name": "Stránka",
+ "pagelang-language": "Jazyk",
+ "pagelang-use-default": "Použiť predvolený jazyk",
+ "pagelang-select-lang": "Vybrať jazyk",
+ "right-pagelang": "Zmeniť jazyk stránky"
}
"userlogin-resetlink": "Ste pozabili svoje prijavne podatke?",
"userlogin-resetpassword-link": "Ste pozabili svoje geslo?",
"userlogin-helplink2": "Pomoč pri prijavi",
- "userlogin-loggedin": "Prijavljeni ste že kot {{GENDER:$1|$1}}.\nUporabite spodnji obrazec, da se prijavite kot drug uporabnik.",
- "userlogin-createanother": "Ustvari drug račun",
"createacct-emailrequired": "E-poštni naslov",
"createacct-emailoptional": "E-poštni naslov (izbirno)",
"createacct-email-ph": "Vnesite svoj e-poštni naslov",
"createaccount-text": "Nekdo je ustvaril račun $2 na {{GRAMMAR:dajalnik|{{SITENAME}}}} ($4). Geslo za »$2« je »$3«. Priporočljivo je, da se prijavite in spremenite svoje geslo sedaj.\n\nTo sporočilo lahko prezrete, če je bil račun ustvarjen pomotoma.",
"login-throttled": "Nedavno ste izvedli preveč poskusov prijave.\nProsimo, počakajte $1, preden poskusite znova.",
"login-abort-generic": "Vaša prijava ni bila uspešna – Prekinjeno",
+ "login-migrated-generic": "Vaš račun smo preselili in vaše uporabniško ime na tem wikiju ne obstaja več.",
"loginlanguagelabel": "Jezik: $1",
"suspicious-userlogout": "Vaša zahteva za odjavo je bila zavrnjena, saj kaže, da je bila poslana iz pokvarjenega brskalnika ali proxyja s predpomnilnikom.",
"createacct-another-realname-tip": "Pravo ime ni obvezno.\nČe se ga odločite navesti, bo uporabljeno za priznavanje uporabnikovega dela.",
"showpreview": "Prikaži predogled",
"showdiff": "Prikaži spremembe",
"blankarticle": "<strong>Opozorilo:</strong> Stran, ki jo ustvarjate, je prazna.\nČe ponovno kliknete »{{int:savearticle}}«, bomo stran ustvarili brez kakršne koli vsebine.",
- "anoneditwarning": "'''Opozorilo''': niste prijavljeni. V zgodovino strani se bo zapisal vaš IP-naslov.",
+ "anoneditwarning": "<strong>Opozorilo:</strong> Niste prijavljeni. Vaš IP-naslov bo javno viden, če naredite kakršno koli urejanje. Če se <strong>[$1 prijavite]</strong> ali <strong>[$2 ustvarite račun]</strong>, bodo vaša urejanja pripisana vašemu uporabniškemu imenu skupaj z drugimi prednostmi.",
"anonpreviewwarning": "Niste prijavljeni. Ob spremembi strani se bo vaš IP-naslov zapisal v zgodovini urejanja te strani.",
"missingsummary": "'''Opozorilo:''' Niste napisali povzetka urejanja. Ob ponovnem kliku gumba ''Shrani'' se bo vaše urejanje shranilo brez njega.",
"missingcommenttext": "Prosimo, vpišite v spodnje polje komentar.",
"log-name-pagelang": "Dnevnik spreminjanja jezika",
"log-description-pagelang": "Dnevnik sprememb jezika strani.",
"logentry-pagelang-pagelang": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} jezik strani $3 z jezika $4 na jezik $5.",
+ "default-skin-not-found": "Ups! Privzeta koža vašega wikija (<code>$wgDefaultSkin</code>), <code>$1</code>, ni na voljo.\n\nKot kaže, vaša namestitev vsebuje kože, navedene spodaj. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.\n\n$2\n\n; Če ste MediaWiki pravkar namestili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git.\n\n; Če ste MediaWiki pravkar posodobili:\n: MediaWiki 1.24 in novejši nameščenih kož več ne omogočijo samodejno (oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Priročnik: Samodejno odkrivanje kož]). V <code>LocalSettings.php</code> lahko prilepite naslednje vrstice, da omogočite trenutno nameščene kože:\n\n<pre>$3</pre>\n\n; Če ste pravkar spremenili <code>LocalSettings.php</code>:\n: Ponovno preverite imena kož, če ste se morda zatipkali.",
+ "default-skin-not-found-no-skins": "Ups! Privzeta koža vašega wikija (<code>$wgDefaultSkin</code>), <code>$1</code>, ni na voljo.\n\nNimate nameščenih kož.\n\n; Če ste MediaWiki pravkar namestili ali posodobili:\n: Verjetno ste ga namestili z git ali neposredno iz izvorne kode na kakšen drug način. To je pričakovano. MediaWiki 1.24 in novejši nimajo vključene nobene kože v glavnem repozitoriju. Poskusite namestiti nekaj kož z [https://www.mediawiki.org/wiki/Category:All_skins imenika kož mediawiki.org] tako:\n:* Prenesite [https://www.mediawiki.org/wiki/Download namestitveni program tarball], ki vsebuje nekaj kož in razširitev. Iz njega lahko kopirate in prilepite mapo <code>skins/</code>.\n:* Klonirajte enega od repozitorijev <code>mediawiki/skins/*</code> z git v mapo <code>skins/</code> vaše namestitve MediaWiki.\n: Če ste razvijalec MediaWiki, to ne sme poseči v vaš repozitorij git. Oglejte si [https://www.mediawiki.org/wiki/Manual:Skin_configuration Priročnik: Konfiguracija kož] za več informacij, kako jih omogočiti in nastaviti kot privzete.",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (omogočeno)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''onemogočeno''')"
}
"userlogin-resetlink": "Заборавили сте податке за пријаву?",
"userlogin-resetpassword-link": "Заборавили сте лозинку?",
"userlogin-helplink2": "Помоћ при пријављивању",
- "userlogin-loggedin": "Већ сте пријављени као {{GENDER:$1|$1}}.\nКористите доњи образац да бисте се пријавили као други корисник.",
- "userlogin-createanother": "Отвори још један налог",
"createacct-emailrequired": "Адреса е-поште",
"createacct-emailoptional": "Адреса е-поште (опционо)",
"createacct-email-ph": "Унесите вашу адресу е-поште",
"createacct-another-submit": "Отвори још један налог",
"createacct-benefit-heading": "{{SITENAME}} је направљен од стране људи као што сте ви.",
"createacct-benefit-body1": "{{PLURAL:$1|измена}}",
- "createacct-benefit-body2": "{{PLURAL:$1|страница}}",
+ "createacct-benefit-body2": "{{PLURAL:$1|страница|странице}}",
"createacct-benefit-body3": "скорашњих {{PLURAL:$1|доприноса}}",
"badretype": "Унете лозинке се не поклапају.",
"userexists": "Корисничко име је заузето. Изаберите друго.",
"loginerror": "Грешка при пријављивању",
- "createacct-error": "Ð\94оÑ\88ло Ñ\98е до гÑ\80еÑ\88ке пÑ\80и кÑ\80еирању налога",
+ "createacct-error": "Ð\94оÑ\88ло Ñ\98е до гÑ\80еÑ\88ке пÑ\80и оÑ\82варању налога",
"createaccounterror": "Не могу да отворим налог: $1",
"nocookiesnew": "Кориснички налог је отворен, али нисте пријављени.\n{{SITENAME}} користи колачиће за пријаву. Вама су колачићи онемогућени.\nОмогућите их, па се онда пријавите са својим корисничким именом и лозинком.",
"nocookieslogin": "{{SITENAME}} користи колачиће за пријављивање корисника.\nВама су колачићи онемогућени. Омогућите их и покушајте поново.",
"showpreview": "Прикажи претпреглед",
"showdiff": "Прикажи измене",
"blankarticle": "<strong>Упозорење:</strong> страница коју правите нема никакав садржај.\nАко још једном притиснете „{{int:savearticle}}“ направићете страницу без садржаја.",
- "anoneditwarning": "'''Упозорење:''' нисте пријављени.\nВаша ИП адреса ће бити забележена у историји ове странице.",
+ "anoneditwarning": "<strong>Упозорење:</strong> нисте пријављени. Ваша ИП адреса ће бити јавно видљива у историји ове странице ако начините било какву измену. Ако се <strong>[$1 пријавите]</strong> или <strong>[$2 отворите налог]</strong> ваше измене ће бити приписане вашем корисничком имену.",
"anonpreviewwarning": "''Нисте пријављени. Ваша ИП адреса ће бити забележена у историји ове странице.''",
"missingsummary": "'''Напомена:''' нисте унели опис измене.\nАко поново кликнете на „{{int:savearticle}}“, ваша измена ће бити сачувана без описа.",
"missingcommenttext": "Унесите коментар испод.",
"subject-preview": "Преглед теме/наслова:",
"blockedtitle": "Корисник је блокиран",
"blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварања било каквих упита.",
- "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$1|блокирао|блокирала|блокирао}} $1.\nРазлог:\n\n:''$2''\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$1|кориснику|корисници|кориснику}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ИБ $5.\nНаведите све податке изнад при стварању било каквих упита.",
+ "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи поруку овом кориснику“ ако нисте унели исправну е-адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
"blockednoreason": "разлог није наведен",
"whitelistedittext": "За уређивање странице је потребно да будете $1.",
"confirmedittext": "Морате да потврдите своју е-адресу пре уређивања страница.\nПоставите и потврдите адресу преко [[Special:Preferences|подешавања]].",
"undo-summary": "Поништена измена $1 {{GENDER:$2|корисника|кориснице}} [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]])",
"undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
"cantcreateaccounttitle": "Не могу да отворим налог",
- "cantcreateaccount-text": "Отварање налога с ове IP адресе ('''$1''') је {{GENDER:$3|блокирао|блокирала|блокирао}} [[User:$3|$3]].\n\nРазлог који је навео {{GENDER:$3|корисник|корисница|корисник}} $3 је ''$2''",
+ "cantcreateaccount-text": "Отварање налога с ове IP адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
+ "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону '''$1''', који укључује и вашу IP адресу ('''$4''') је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
"viewpagelogs": "Погледај дневнике ове странице",
"nohistory": "Не постоји историја измена ове странице.",
"currentrev": "Текућа измена",
"exbeforeblank": "садржај пре брисања је био: „$1“",
"delete-confirm": "Брисање странице „$1“",
"delete-legend": "Обриши",
- "historywarning": "<strong>Упозорење:</strong> страница коју желите да обришете има историју с приближно $1 {{PLURAL:$1|изменом|измене|измена}}:",
+ "historywarning": "<strong>Упозорење:</strong> страница коју желите да обришете има историју са $1 {{PLURAL:$1|изменом|измене|измена}}:",
"confirmdeletetext": "Управо ћете обрисати страницу, укључујући и њену историју.\nПотврдите своју намеру, да разумете последице и да ово радите у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
"actioncomplete": "Радња је завршена",
"actionfailed": "Радња није успела",
"emaillink": "пошаљи е-поруку",
"autoblocker": "Аутоматски сте блокирани јер делите ИП адресу с корисником/цом [[User:$1|$1]].\nРазлог блокирања: „$2“",
"blocklogpage": "Дневник блокирања",
- "blocklog-showlog": "{{GENDER:$1|Овај корисник је раније блокиран|Ова корисница је раније блокирана|Овај корисник је раније блокиран}}.\nИсторија блокирања се налази испод:",
- "blocklog-showsuppresslog": "{{GENDER:|Овај корисник је раније блокиран и сакривен|Ова корисница је раније блокирана и сакривена|Овај корисник је раније блокиран и сакривен}}.\nИсторија сакривања се налази испод:",
+ "blocklog-showlog": "{{GENDER:$1|Овај корисник је раније блокиран|Ова корисница је раније блокирана}}.\nИсторија блокирања се налази испод:",
+ "blocklog-showsuppresslog": "{{GENDER:$1|Овај корисник је раније блокиран и сакривен|Ова корисница је раније блокирана и сакривена}}.\nИсторија сакривања се налази испод:",
"blocklogentry": "је блокирао [[$1]] с роком истицања од $2 $3",
"reblock-logentry": "{{GENDER:|је променио|је променила|је променио}} подешавања за блокирање {{GENDER:$1|корисника|кориснице|корисника}} [[$1]] с роком истека од $2 ($3)",
"blocklogtext": "Ово је дневник блокирања и деблокирања корисника.\nАутоматски блокиране ИП адресе нису наведене.\nТекуће забране и блокирања можете наћи [[Special:BlockList|овде]].",
"scarytranscludefailed-httpstatus": "[Не могу да преузмем шаблон $1: HTTP $2]",
"scarytranscludetoolong": "[URL адреса је предугачка]",
"deletedwhileediting": "<strong>Упозорење</strong>: ова страница је обрисана након што сте почели с уређивањем!",
- "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|је обрисао|је обрисала|обриса}} ову страницу након што сте почели да је уређујете из следећег разлога:\n: ''$2''\nПотврдите да стварно желите да направите страницу.",
+ "confirmrecreate": "Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да је уређујете из следећег разлога:\n: <em>$2</em>\nПотврдите да стварно желите да направите страницу.",
"confirmrecreate-noreason": "Корисник [[User:$1|$1]] ([[User talk:$1|разговор]]) је обрисао ову страницу након што сте почели да га уређујете. Потврдите да стварно желите да поново направите ову страницу.",
"recreate": "Поново направи",
"unit-pixel": "px",
"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-revision": "$1 је {{GENDER:$2|променио|променила}} видљивост $5 {{PLURAL:$5|измене|измене|измена}} на страници $3: $4",
"logentry-delete-event-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост догађаја у дневнику на $3",
"logentry-delete-revision-legacy": "$1 је {{GENDER:$2|променио|променила}} видљивост измена на страници $3",
"logentry-suppress-delete": "$1 је {{GENDER:$2|потиснуо|потиснула}} страницу $3",
"userlogin-resetlink": "Zaboravili ste podatke za prijavu?",
"userlogin-resetpassword-link": "Zaboravili ste lozinku?",
"userlogin-helplink2": "Pomoć pri prijavljivanju",
- "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nKoristite donji obrazac da biste se prijavili kao drugi korisnik.",
- "userlogin-createanother": "Otvori još jedan nalog",
"createacct-emailrequired": "Adresa e-pošte",
"createacct-emailoptional": "Adresa e-pošte (opciono)",
"createacct-email-ph": "Unesite vašu adresu e-pоšte",
"badretype": "Unete lozinke se ne poklapaju.",
"userexists": "Korisničko ime je zauzeto. Izaberite drugo.",
"loginerror": "Greška pri prijavljivanju",
- "createacct-error": "Došlo je do greške pri kreiranju naloga",
+ "createacct-error": "Došlo je do greške pri otvaranju naloga",
"createaccounterror": "Ne mogu da otvorim nalog: $1",
"nocookiesnew": "Korisnički nalog je otvoren, ali niste prijavljeni.\n{{SITENAME}} koristi kolačiće za prijavu. Vama su kolačići onemogućeni.\nOmogućite ih, pa se onda prijavite sa svojim korisničkim imenom i lozinkom.",
"nocookieslogin": "{{SITENAME}} koristi kolačiće za prijavljivanje korisnika.\nVama su kolačići onemogućeni. Omogućite ih i pokušajte ponovo.",
"showpreview": "Prikaži pretpregled",
"showdiff": "Prikaži izmene",
"blankarticle": "<strong>Upozorenje:</strong> stranica koju pravite nema nikakav sadržaj.\nAko još jednom pritisnete „{{int:savearticle}}“ napravićete stranicu bez sadržaja.",
- "anoneditwarning": "'''Upozorenje:''' niste prijavljeni.\nVaša IP adresa će biti zabeležena u istoriji ove stranice.",
+ "anoneditwarning": "<strong>Upozorenje:</strong> niste prijavljeni. Vaša IP adresa će biti javno vidljiva u istoriji ove stranice ako načinite bilo kakvu izmenu. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 otvorite nalog]</strong> vaše izmene će biti pripisane vašem korisničkom imenu.",
"anonpreviewwarning": "''Niste prijavljeni. Vaša IP adresa će biti zabeležena u istoriji ove stranice.''",
"missingsummary": "'''Napomena:''' niste uneli opis izmene.\nAko ponovo kliknete na „{{int:savearticle}}“, vaša izmena će biti sačuvana bez opisa.",
"missingcommenttext": "Unesite komentar ispod.",
"subject-preview": "Pregled teme/naslova:",
"blockedtitle": "Korisnik je blokiran",
"blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog: <em>$2</em>.\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\nVaša blokirana IP adresa je $3, a ID blokiranja $5.\nNavedite sve podatke iznad pri stvaranja bilo kakvih upita.",
- "autoblockedtext": "Vaša IP adresa je blokirana jer ju je upotrebljavao drugi korisnik, koga je {{GENDER:$1|blokirao|blokirala|blokirao}} $1.\nRazlog:\n\n:''$2''\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$1|korisniku|korisnici|korisniku}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\n\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\n\nVaša blokirana IP adresa je $3, a IB $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
+ "autoblockedtext": "Vaša IP adresa je blokirana jer ju je upotrebljavao drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:<em>$2</em>\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\n\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\n\nVaša blokirana IP adresa je $3, a ID $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
"blockednoreason": "razlog nije naveden",
"whitelistedittext": "Za uređivanje stranice je potrebno da budete $1.",
"confirmedittext": "Morate da potvrdite svoju e-adresu pre uređivanja stranica.\nPostavite i potvrdite adresu preko [[Special:Preferences|podešavanja]].",
"undo-summary": "Poništena izmena $1 {{GENDER:$2|korisnika|korisnice}} [[Special:Contribs/$2|$2]] ([[User talk:$2|razgovor]])",
"undo-summary-username-hidden": "Poništi izmenu $1 skrivenog korisnika",
"cantcreateaccounttitle": "Ne mogu da otvorim nalog",
- "cantcreateaccount-text": "Otvaranje naloga s ove IP adrese ('''$1''') je {{GENDER:$3|blokirao|blokirala|blokirao}} [[User:$3|$3]].\n\nRazlog koji je naveo {{GENDER:$3|korisnik|korisnica|korisnik}} $3 je ''$2''",
+ "cantcreateaccount-text": "Otvaranje naloga s ove IP adrese (<strong>$1</strong>) je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
+ "cantcreateaccount-range-text": "Otvaranje naloga sa IP adresa u rasponu '''$1''', koji uključuje i vašu IP adresu ('''$4''') je blokirao/la [[User:$3|$3]].\n\nRazlog koji je naveo/la $3 je <em>$2</em>",
"viewpagelogs": "Pogledaj dnevnike ove stranice",
"nohistory": "Ne postoji istorija izmena ove stranice.",
"currentrev": "Tekuća izmena",
"autoblocker": "Automatski ste blokirani jer delite IP adresu s korisnikom/com [[User:$1|$1]].\nRazlog blokiranja: „$2“",
"blocklogpage": "Dnevnik blokiranja",
"blocklog-showlog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran|Ova korisnica je ranije blokirana|Ovaj korisnik je ranije blokiran}}.\nIstorija blokiranja se nalazi ispod:",
- "blocklog-showsuppresslog": "{{GENDER:|Ovaj korisnik je ranije blokiran i sakriven|Ova korisnica je ranije blokirana i sakrivena|Ovaj korisnik je ranije blokiran i sakriven}}.\nIstorija sakrivanja se nalazi ispod:",
+ "blocklog-showsuppresslog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran i sakriven|Ova korisnica je ranije blokirana i sakrivena}}.\nIstorija sakrivanja se nalazi ispod:",
"blocklogentry": "je blokirao [[$1]] s rokom isticanja od $2 $3",
"reblock-logentry": "{{GENDER:|je promenio|je promenila|je promenio}} podešavanja za blokiranje {{GENDER:$1|korisnika|korisnice|korisnika}} [[$1]] s rokom isteka od $2 ($3)",
"blocklogtext": "Ovo je dnevnik blokiranja i deblokiranja korisnika.\nAutomatski blokirane IP adrese nisu navedene.\nTekuće zabrane i blokiranja možete naći [[Special:BlockList|ovde]].",
"scarytranscludefailed-httpstatus": "[Ne mogu da preuzmem šablon $1: HTTP $2]",
"scarytranscludetoolong": "[URL adresa je predugačka]",
"deletedwhileediting": "<strong>Upozorenje</strong>: ova stranica je obrisana nakon što ste počeli s uređivanjem!",
- "confirmrecreate": "[[User:$1|$1]] ([[User talk:$1|razgovor]]) {{GENDER:$1|je obrisao|je obrisala|je obrisao}} ovu stranicu nakon što ste počeli da je uređujete iz sledećeg razloga:\n: ''$2''\nPotvrdite da stvarno želite da napravite stranicu.",
+ "confirmrecreate": "Korisnik [[User:$1|$1]] ([[User talk:$1|razgovor]]) je obrisao ovu stranicu nakon što ste počeli da je uređujete iz sledećeg razloga:\n: <em>$2</em>\nPotvrdite da stvarno želite da napravite stranicu.",
"confirmrecreate-noreason": "Korisnik [[User:$1|$1]] ([[User talk:$1|razgovor]]) je obrisao ovu stranicu nakon što ste počeli da ga uređujete. Potvrdite da stvarno želite da ponovo napravite ovu stranicu.",
"recreate": "Ponovo napravi",
"unit-pixel": "px",
"logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
"logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
"logentry-delete-event": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|događaja|$5 daogađaja}} u dnevniku na $3: $4",
- "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost {{PLURAL:$5|izmene|$5 izmena}} na stranici $3: $4",
+ "logentry-delete-revision": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost $5 {{PLURAL:$5|izmene|izmene|izmena}} na stranici $3: $4",
"logentry-delete-event-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost događaja u dnevniku na $3",
"logentry-delete-revision-legacy": "$1 je {{GENDER:$2|promenio|promenila}} vidljivost izmena na stranici $3",
"logentry-suppress-delete": "$1 je {{GENDER:$2|potisnuo|potisnula}} stranicu $3",
"userlogin-resetlink": "Har du glömt dina inloggningsuppgifter?",
"userlogin-resetpassword-link": "Glömt ditt lösenord?",
"userlogin-helplink2": "Hjälp med inloggning",
- "userlogin-loggedin": "Du är redan inloggad som {{GENDER:$1|$1}}.\nAnvänd formuläret nedan för att logga in som en annan användare.",
- "userlogin-createanother": "Skapa ett annat konto",
"createacct-emailrequired": "E-postadress",
"createacct-emailoptional": "E-postadress (valfritt)",
"createacct-email-ph": "Bekräfta din e-postadress",
"createaccount-text": "Någon har skapat ett konto åt din e-postadress på {{SITENAME}} ($4) med namnet \"$2\" och lösenordet \"$3\". Du bör nu logga in och ändra ditt lösenord.\n\nDu kan ignorera detta meddelande om kontot skapats av misstag.",
"login-throttled": "Du har gjort för många misslyckade inloggningsförsök.\nVänta $1 innan du försöker igen.",
"login-abort-generic": "Din inloggning misslyckades - Avbröts",
+ "login-migrated-generic": "Dit konto har migrerats och ditt användarnamn existerar inte längre på denna wiki.",
"loginlanguagelabel": "Språk: $1",
"suspicious-userlogout": "Din begäran om att logga ut nekades eftersom det ser ut som det skickades av en trasig webbläsare eller cachande proxy.",
"createacct-another-realname-tip": "Riktiga namnet är valfritt.\nOm du väljer att ange det, kommer det användas för att tillskriva användaren för sitt arbete.",
"showpreview": "Visa förhandsgranskning",
"showdiff": "Visa ändringar",
"blankarticle": "<strong>Varning:</strong> Sidan du skapar är tom.\nOm du klickar på \"{{int:savearticle}}\" igen kommer sidan skapas utan något innehåll.",
- "anoneditwarning": "'''Varning:''' Du är inte inloggad.\nDin IP-adress kommer att sparas i historiken för den här sidan.",
+ "anoneditwarning": "<strong>Varning:</strong> Du är inte inloggad. Din IP-adress kommer att vara publikt synlig om du gör några redigeringar. Om du <strong>[$1 loggar in]</strong> eller <strong>[$2 skapar ett konto]</strong> kommer dina redigeringar att tillskrivas ditt användarnamn, tillsammans med andra fördelar.",
"anonpreviewwarning": "''Du är inte inloggad. Om du sparar kommer din IP-adress registreras på denna sidas redigeringshistorik.''",
"missingsummary": "'''Påminnelse:''' Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"{{int:savearticle}}\" igen, kommer din redigering att sparas utan en sådan.",
"missingcommenttext": "Var god och skriv in en kommentar nedan.",
"gotaccountlink": "புகுபதிகை",
"userlogin-resetlink": "உங்கள் புகுபதிகைக் குறிப்புகளை மறந்துவிட்டீர்களா?",
"userlogin-resetpassword-link": "உங்கள் கடவுச் சொல்லை மறந்து விட்டீர்களா?",
- "userlogin-createanother": "மற்றொரு கணக்கு ஒன்றை உருவாக்கவும்",
"createacct-emailrequired": "மின்னஞ்சல் முகவரி",
"createacct-emailoptional": "மின்னஞ்சல் முகவரி (விருப்பத்தேர்வு)",
"createacct-email-ph": "உங்கள் மின்னஞ்சல் முகவரியை உள்ளிடுக",
"historyempty": "(mamuk)",
"history-feed-item-nocomment": "$1 iha $2",
"rev-delundel": "hatudu/subar",
+ "rev-showdeleted": "hatudu",
"revisiondelete": "Halakon/restaurar versaun",
"revdelete-show-file-submit": "Sin",
- "revdelete-hide-user": "Subar naran edita-na'in/IP",
+ "revdelete-hide-text": "Testu versaun nian",
+ "revdelete-hide-user": "Naran edita-na'in/diresaun IP",
"revdelete-radio-set": "Sin",
"revdelete-radio-unset": "Lae",
"revdelete-edit-reasonlist": "Edita lista motivu nian",
"recentchanges-label-minor": "Ne'e mudansa ki'ik",
"recentchanges-label-bot": "Edita husi prosesu automátiku (\"bot\")",
"rcshowhideminor": "$1 muda ki-ki'ik",
+ "rcshowhideminor-show": "Hatudu",
"rcshowhidebots": "$1 bot sira",
+ "rcshowhidebots-show": "Hatudu",
"rcshowhideliu": "$1 ema rejista",
+ "rcshowhideliu-show": "Hatudu",
"rcshowhideanons": "$1 ema anónimu",
+ "rcshowhideanons-show": "Hatudu",
+ "rcshowhideanons-hide": "Subar",
+ "rcshowhidepatr-show": "Hatudu",
"rcshowhidemine": "$1 ha'u-nia edita",
+ "rcshowhidemine-show": "Hatudu",
"diff": "diferensa",
"hist": "istória",
"hide": "Hamsumik",
"userlogin-resetlink": "ลืมรายละเอียดล็อกอินของคุณหรือ",
"userlogin-resetpassword-link": "ลืมรหัสผ่านหรือ",
"userlogin-helplink2": "วิธีใช้เรื่องการล็อกอิน",
- "userlogin-loggedin": "คุณล็อกอินในชื่อ {{GENDER:$1|$1}} แล้ว\nใช้แบบด้านล่างเพื่อล็อกอินเป็นอีกผู้ใช้หนึ่ง",
- "userlogin-createanother": "สร้างอีกบัญชี",
"createacct-emailrequired": "ที่อยู่อีเมล",
"createacct-emailoptional": "ที่อยู่อีเมล (เลือกไม่ใส่ได้)",
"createacct-email-ph": "กรอกที่อยู่อีเมล",
"wantedpages-badtitle": "ชื่อเรื่องไม่สมเหตุสมผลในเซตผลลัพธ์: $1",
"wantedfiles": "ไฟล์ที่ต้องการ",
"wantedfiletext-cat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del> ยิ่งไปกว่านั้น หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่จะแสดงรายการใน [[:$1]]",
+ "wantedfiletext-cat-noforeign": "ไฟล์ต่อไปนี้ถูกใช้แต่ไม่มีไฟล์ นอกเหนือจากนี้ หน้าที่ฝังตัวไฟล์ที่ไม่มีอยู่แสดงรายการใน [[:$1]]",
"wantedfiletext-nocat": "ไฟล์ต่อไปนี้มีการเรียกใช้แต่ไม่มีอยู่ ไฟล์จากคลังเก็บภาษาอื่นอาจแสดงรายการแม้จะมีอยู่ ผลบวกลวงใด ๆ จะถูก<del>ขีดฆ่า</del>",
+ "wantedfiletext-nocat-noforeign": "ไฟล์ต่อไปนี้ถูกใช้แต่ไม่มีไฟล์",
"wantedtemplates": "แม่แบบที่ต้องการ",
"mostlinked": "หน้าที่มีการเชื่อมโยงหามากที่สุด",
"mostlinkedcategories": "หมวดหมู่ที่มีการเชื่อมโยงหามากที่สุด",
"userlogin-resetlink": "Giriş bilgilerinizi mi unuttunuz?",
"userlogin-resetpassword-link": "Parolanızı mı unuttunuz?",
"userlogin-helplink2": "Oturum açma konusunda yardım alın",
- "userlogin-loggedin": "Zaten {{GENDER:$1|$1}} olarak oturum açtınız.\nBaşka bir kullanıcı olarak oturum açmak için aşağıdaki formu kullanın.",
- "userlogin-createanother": "Başka bir hesap oluşturun",
"createacct-emailrequired": "E-posta adresi",
"createacct-emailoptional": "E-posta adresi (isteğe bağlı)",
"createacct-email-ph": "E-posta adresinizi girin",
"randomincategory": "Kategoriye göre rastgele sayfa",
"randomincategory-invalidcategory": "\"$1\" geçerli bir kategori adı değil.",
"randomincategory-nopages": "[[:Category:$1|$1]] kategorisinde hiç sayfa yok.",
+ "randomincategory-category": "Kategori:",
+ "randomincategory-legend": "Kategoriden rastgele sayfa",
"randomredirect": "Rastgele yönlendirme",
"randomredirect-nopages": "\"$1\" ad alanında hiç bir yönlendirme yok.",
"statistics": "İstatistikler",
"exbeforeblank": "Silinmeden önceki içerik: '$1'",
"delete-confirm": "\"$1\" sil",
"delete-legend": "sil",
- "historywarning": "'''Uyarı:''' Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 {{PLURAL:$1|sürüme|sürüme}} sahip bir geçmişi var:",
+ "historywarning": "<strong>Uyarı:</strong> Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 sürüme sahip bir geçmişi var:",
"confirmdeletetext": "Bu sayfayı veya dosyayı tüm geçmişi ile birlikte veritabanından kalıcı olarak silmek üzeresiniz.\nBu işlemden kaynaklı doğabilecek sonuçların farkında iseniz ve işlemin [[{{MediaWiki:Policy-url}}|Silme kurallarına]] uygun olduğuna eminseniz, işlemi onaylayın.",
"actioncomplete": "İşlem tamamlandı",
"actionfailed": "İşlem başarısız oldu",
"delete-edit-reasonlist": "Silme nedenlerini değiştir",
"delete-toobig": "Bu sayfa, $1 {{PLURAL:$1|tane değişiklik|tane değişiklik}} ile çok uzun bir geçmişe sahiptir.\nBöyle sayfaların silinmesi, {{SITENAME}} sitesini bozmamak için sınırlanmaktadır.",
"delete-warning-toobig": "Bu sayfanın büyük bir değişiklik geçmişi var, $1 {{PLURAL:$1|revizyonun|revizyonun}} üzerinde.\nBunu silmek {{SITENAME}} işlemlerini aksatabilir;\ndikkatle devam edin.",
+ "deleteprotected": "Bu sayfayı silemezsiniz çünkü sayfa korumaya alınmış.",
"deleting-backlinks-warning": "'''Uyarı:''' Silmek üzere olduğunuz sayfaya [[Özel:SayfayaBağlantılar/{{FULLPAGENAME}}|başka sayfalardan]] bağlantılar var veya sayfanın bazı bölümleri başka sayfalar tarafından alıntı olarak kullanılıyor.",
"rollback": "değişiklikleri geri al",
"rollback_short": "geri al",
"import": "Sayfaları aktar",
"importinterwiki": "Vikilerarası içe aktarım",
"import-interwiki-text": "İçe aktarmak için bir viki ve sayfa başlığı seçin.\nRevizyon tarihleri ve yazarların isimleri korunacaktır.\nBütün vikilerarası içe aktarım eylemleri [[Special:Log/import|içe aktarım günlüğünde]] kaydedilmektedir.",
+ "import-interwiki-sourcewiki": "Kaynak viki:",
+ "import-interwiki-sourcepage": "Kaynak sayfa:",
"import-interwiki-history": "Sayfanın tüm geçmiş sürümlerini kopyala",
"import-interwiki-templates": "Tüm şablonları içer",
"import-interwiki-submit": "Import",
"logentry-rights-rights-legacy": "$1, $3 için grup üyeliğini {{GENDER:$2|değiştirdi}}",
"logentry-rights-autopromote": "$1, $4 iken $5 olarak otomatik {{GENDER:$2|terfi edildi}}",
"logentry-upload-upload": "$1 {{GENDER:$2|yükledi}} $3",
+ "logentry-upload-overwrite": "$1 $3 dosyasının yeni bir sürümünü {{GENDER:$2|yükledi}}",
"rightsnone": "(hiçbiri)",
"feedback-bugornote": "Eğer teknik bir problemi detaylarıyla açıklamaya hazırsanız lütfen [$1 bir hata raporlayın]. Diğer taraftan, aşağıdaki kolay formu kullanabilirsiniz. Yorumunuz, kullanıcı adınızla beraber \"[$3 $2]\" sayfasına eklenecektir.",
"feedback-subject": "Konu:",
"아라",
"Calak",
"Mykola Swarnyk",
- "Milicevic01"
+ "Milicevic01",
+ "Lamsec"
]
},
"tog-underline": "Підкреслювання посилань:",
"userlogin-resetlink": "Забули дані, потрібні для входу?",
"userlogin-resetpassword-link": "Забули пароль?",
"userlogin-helplink2": "Допомога з входом у систему",
- "userlogin-loggedin": "Ви вже увійшли як {{GENDER:$1|$1}}.\nВикористайте нижче форму для входу як інший користувач.",
- "userlogin-createanother": "Створити інший обліковий запис",
"createacct-emailrequired": "Адреса електронної пошти",
"createacct-emailoptional": "Адреса електронної пошти (не обов'язково)",
"createacct-email-ph": "Введіть Вашу адресу електронної пошти",
"shown-title": "Показувати $1 {{PLURAL:$1|запис|записи|записів}} на сторінці",
"viewprevnext": "Переглянути ($1 {{int:pipe-separator}} $2) ($3).",
"searchmenu-exists": "'''У цій вікі є сторінка з назвою «[[:$1]]»'''",
- "searchmenu-new": "<strong>Створити сторінку «[[:$1]]» у цьому вікі-проекті!</strong>\n{{PLURAL:$2|0=|Див. також сторінку, знайдену по результатами вашого пошуку.|Див. також знайдені результати пошуку.}}",
+ "searchmenu-new": "<strong>Створити сторінку «[[:$1]]» у цьому вікіпроекті!</strong>\n{{PLURAL:$2|0=|Див. також сторінку, знайдену за результатами вашого пошуку.|Див. також знайдені результати пошуку.}}",
"searchprofile-articles": "Статті",
"searchprofile-images": "Мультимедіа",
"searchprofile-everything": "Усюди",
"randomincategory": "Випадкова сторінка у категорії",
"randomincategory-invalidcategory": "\" $1 \" не є дійсним іменем категорії.",
"randomincategory-nopages": "У [[:Category:$1]] немає сторінок.",
- "randomincategory-selectcategory": "Перейти на випадкову сторінку з категорії: $1 $2.",
- "randomincategory-selectcategory-submit": "Перейти",
"randomredirect": "Випадкове перенаправлення",
"randomredirect-nopages": "Простір назв «$1» не містить перенаправлень.",
"statistics": "Статистика",
"delete-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nВилучення таких сторінок було заборонене з метою уникнення порушень у роботі сайту {{SITENAME}}.",
"delete-warning-toobig": "У цієї сторінки дуже довга історія редагувань, більше $1 {{PLURAL:$1|версії|версій|версій}}.\nЇї вилучення може призвести до порушень у роботі бази даних сайту {{SITENAME}};\nдійте обережно.",
"deleting-backlinks-warning": "'''Попередження:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|інші сторінки]] посилаються або містять сторінку, яку ви маєте намір видалити.",
- "rollback": "Ð\92Ñ\96дкинÑ\83Ñ\82и редагування",
+ "rollback": "Ð\92Ñ\96дкинÑ\83Ñ\82о редагування",
"rollback_short": "Відкинути",
"rollbacklink": "відкинути",
"rollbacklinkcount": "відкинути $1 {{PLURAL:$1|редагування|редагування|редагувань}}",
"import": "Імпорт статей",
"importinterwiki": "Міжвікі імпорт",
"import-interwiki-text": "Вкажіть вікі й назву імпортованої сторінки.\nДати змін й імена авторів буде збережено.\nУсі операції міжвікі-імпорту реєструються в [[Special:Log/import|відповідному протоколі]].",
- "import-interwiki-source": "Вікі/сторінка-джерело",
"import-interwiki-history": "Копіювати всю історію змін цієї сторінки",
"import-interwiki-templates": "Включити всі шаблони",
"import-interwiki-submit": "Імпортувати",
"recentchanges-label-plusminus": "La dimension de la pagina la xe canbià de sto nùmaro de byte",
"recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (varda anca [[Special:NewPages|l'elenco de le pagine nove]])",
"rcnotefrom": "Qui di seguito sono elencate le modifiche da '''$2''' (fino a '''$1''').",
- "rclistfrom": "Fà védar i canbiamenti fati dal $3 $2",
+ "rclistfrom": "Mostra i canbiamenti fati da ƚe $2 del $3",
"rcshowhideminor": "$1 i canbiamenti picenini",
"rcshowhidebots": "$1 i bot",
"rcshowhideliu": "$1 i utenti registrài",
"randomincategory": "Pagina a ocio in te na categoria",
"randomincategory-invalidcategory": "\"$1\" no'l và mia ben come nome de categoria.",
"randomincategory-nopages": "No ghe xe mia pagine in [[:Category:$1]].",
- "randomincategory-selectcategory": "Ciapa na pagina a ocio da la categoria: $1 $2.",
- "randomincategory-selectcategory-submit": "Và",
"randomredirect": "Un redirect a caso",
"randomredirect-nopages": "No ghe xe nissun rimando in tel namespace \"$1\".",
"statistics": "Statisteghe",
"import": "Inporta pàxene",
"importinterwiki": "Inportazion transwiki",
"import-interwiki-text": "Seleziona un projeto wiki e el titoło de ła pàxena da inportar.\nLe date de publicazion e i nomi de i autori de łe varie version i sarà conservà.\nTute łe operazion de inportazion trans-wiki łe xè notà nel [[Special:Log/import|registro de inportazion]].",
- "import-interwiki-source": "Sorgente wiki/pàxena:",
"import-interwiki-history": "Copia l'intiera cronołogia de sta pàxena",
"import-interwiki-templates": "Tira dentro tuti i modèi",
"import-interwiki-submit": "Inporta",
"Cwek",
"Duolaimi",
"Impersonator 1",
- "LNDDYL"
+ "LNDDYL",
+ "TheChampionMan1234"
]
},
"tog-underline": "鏈接下橫線:",
"tog-shownumberswatching": "顯示關注人數",
"tog-oldsig": "能界签名先望:",
"tog-fancysig": "畀簽名當wiki文本(弗自動鏈接)",
- "tog-uselivepreview": "用当场先望(试验)",
+ "tog-uselivepreview": "用當場先望(試驗)",
"tog-forceeditsummary": "編要空白到提醒我",
"tog-watchlisthideown": "關注表裏囥脫我所編",
"tog-watchlisthidebots": "關注表裏囥脫機器人所編",
"currentevents-url": "Project:箇阶段个事干",
"disclaimers": "甮追問",
"disclaimerpage": "Project:甮追問",
- "edithelp": "ç¼\96å\86\99帮助",
+ "edithelp": "編寫幫助",
"mainpage": "封面",
"mainpage-description": "封面",
"policy-url": "Project:策略",
- "portal": "社å\8cºå\8f°é\97¨",
- "portal-url": "Project:社å\8cºå\8f°é\97¨",
+ "portal": "社å\8d\80è\87ºé\96\80",
+ "portal-url": "Project:社å\8d\80è\87ºé\96\80",
"privacy": "隱私策略",
"privacypage": "Project:隱私策略",
"badaccess": "权限",
"gotaccountlink": "登录",
"userlogin-resetlink": "忘记登录细节?",
"userlogin-resetpassword-link": "转设密码",
- "userlogin-loggedin": "你侬用{{GENDER:$1|$1}}登进来哉。用下向个表以别样身份登进。",
- "userlogin-createanother": "建别样账号",
"createacct-emailrequired": "电子信地址",
"createacct-emailoptional": "电子信地址(填弗填由你)",
"createacct-email-ph": "畀你侬个电子信地址打进去",
"unusedtemplateswlh": "其他鏈接",
"randompage": "随便望望",
"randomincategory": "分類裏個隨便一頁",
- "randomincategory-selectcategory-submit": "去",
"statistics": "统计",
"statistics-header-users": "用户资料",
"statistics-users-active": "活跃用户",
"userlogin-resetlink": "פארגעסן אײַערע אַרײַנלאָגירן פרטים?",
"userlogin-resetpassword-link": "פֿאַרגעסן אײַער פאַסווארט?",
"userlogin-helplink2": "הילף מיט ארײַנלאגירן",
- "userlogin-loggedin": "איר זענט שוין אריינלאגירט ווי {{GENDER:$1|$1}}.\nניצט די פארעם אונטן כדי אריינלאגירן ווי אן אנדער באניצער.",
- "userlogin-createanother": "שאפֿן נאך א קאנטע",
"createacct-emailrequired": "בליצפּאָסט אַדרעס",
"createacct-emailoptional": "בליצפאסט אדרעס (אפציאנאל)",
"createacct-email-ph": "קלאַפט ארײַן אײַער בליצפּאָסט אַדרעס",
"showpreview": "ווײַזן פֿאָרױסקוק",
"showdiff": "ווײַז די ענדערונגען",
"blankarticle": "<strong>אזהרה:</strong> דער בלאט איר גייט שאפן איז ליידיק.\nטאמער איר וועט דריקן אויף \"{{int:savearticle}}\" נאכאמאל, וועט דער בלאט ווערן געשאפן אן קיין אינהאלט.",
- "anoneditwarning": "'''ווארענונג:''' איר זענט נישט אריינלאגירט אין אייער קאנטע. אייער איי פי אדרעס וועט ווערן דאקומענטירט אין דעם בלאטס היסטאריע פון ענדערונגען. אויב זארגט איר זיך פאר פריוואטקייטן, ביטע טוט זיך אריינלאגירן.",
+ "anoneditwarning": "<strong>ווארענונג:</strong> איר זענט נישט אריינלאגירט. אייער איי פי אדרעס וועט ווערן עפנטלעך זעבאר ווען איר פירט דורך ענדערונגען . אז איר <strong>[$1 לאגירט ארײַן]</strong> אדער <strong>[$2 שאפט א קאנטע]</strong>, וועלן אײַערע רעדאקטירונגען ווערן צוגעשריבן צו אײַער באניצער-נאמען, ווי אויך אנדערע טובות.",
"anonpreviewwarning": "''איר זענט נישט אַרײַנלאגירט. אויפֿהיטן וועט ארײַנשרײַבן אײַער IP אַדרעס אין דער רעדאַקטירונג היסטאריע פונעם בלאַט.''",
"missingsummary": "'''דערמאנונג:''' איר האט נישט אויסגעפילט דעם קורץ ווארט אויפקלערונג אויף אייער עדיט. אויב וועט איר דרוקן נאכאמאל אויף \"היט אפ דעם בלאט\", וועט אייער ענדערונג ווערן געהיטן אן דעם.",
"missingcommenttext": "ביטע שטעלט אריין א אנמערקונג פון אונטן.",
"sp-contributions-search": "זוכן בײַשטײַערונגען",
"sp-contributions-username": "באניצער נאמען אדער IP אדרעס:",
"sp-contributions-toponly": "בלויז ווײַזן רעדאַקטירונגען וואָס זענען די לעצטיקע רעוויזיעס",
- "sp-contributions-newonly": "בלוז ווײַזן רעדאקטירונגען וואס זענען נײַ־געשאפענע בלעטער",
+ "sp-contributions-newonly": "×\91×\9c×\95×\99×\96 ×\95×\95ײַ×\96×\9f רע×\93×\90ק×\98×\99ר×\95× ×\92×¢×\9f ×\95×\95×\90ס ×\96×¢× ×¢×\9f × ×²Ö·Ö¾×\92עש×\90×¤×¢× ×¢ ×\91×\9c×¢×\98ער",
"sp-contributions-submit": "זוכן",
"whatlinkshere": "װאָס פֿאַרבינדט אַהער",
"whatlinkshere-title": "בלעטער וואס פֿארבינדן צו $1",
"import": "אימפארטירן בלעטער",
"importinterwiki": "אריבערוויקי אימפארט",
"import-interwiki-text": "קלויבט אויס א וויקי און אן ארטיקל קעפל צו אימפארטירן.\nדי דאטעס און די נעמען פון די רעדאקטארן וועט ווערן געהיטן.\nאלע צווישנוויקי אימפארט אקציעס ווערן פארשריבן אינעם [[Special:Log/import|אימפארט לאג]].",
+ "import-interwiki-sourcewiki": "מקור וויקי:",
+ "import-interwiki-sourcepage": "מקור בלאַט:",
"import-interwiki-history": "קאפירן אלע היסטאריע ווערסיעס פאר דעם בלאט",
"import-interwiki-templates": "איינשילסן אלע מוסטערן",
"import-interwiki-submit": "אימפארט",
"Impersonator 1",
"Duolaimi",
"TianyinLee",
- "NigelSoft"
+ "NigelSoft",
+ "Zhuyifei1999"
]
},
"tog-underline": "链接下划线:",
"october-date": "10月$1日",
"november-date": "11月$1日",
"december-date": "12月$1日",
- "pagecategories": "{{PLURAL:$1|个分类}}",
+ "pagecategories": "{{PLURAL:$1|分类|$1个分类}}",
"category_header": "分类“$1”中的页面",
"subcategories": "子分类",
"category-media-header": "分类“$1”中的媒体文件",
"category-empty": "<em>本分类目前没有包含页面或媒体文件。</em>",
- "hidden-categories": "{{PLURAL:$1|个隐藏分类}}",
+ "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
"hidden-category-category": "隐藏分类",
"category-subcat-count": "{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}",
"category-subcat-count-limited": "本分类有以下{{PLURAL:$1|子分类|$1个子分类}}。",
"userlogin-resetlink": "忘记你的登录信息?",
"userlogin-resetpassword-link": "忘记密码?",
"userlogin-helplink2": "登录帮助",
- "userlogin-loggedin": "您已经以{{GENDER:$1|$1}}的身份登录。使用下面的表格以其他用户的身份登录。",
- "userlogin-createanother": "创建另一个账户",
"createacct-emailrequired": "电子邮件地址",
"createacct-emailoptional": "电子邮件地址(可选)",
"createacct-email-ph": "请输入你的电子邮件地址",
"createaccount-text": "有人在{{SITENAME}}中利用您的邮箱创建了一个名为 \"$2\" 的新帐户($4),密码是 \"$3\" 。您应该立即登录并更改密码。\n\n如果该账户创建错误的话,您可以忽略此信息。",
"login-throttled": "你最近尝试登录的次数过多。请等待$1后再试。",
"login-abort-generic": "登录失败 - 已终止",
+ "login-migrated-generic": "您的账户已被迁移,并且您的用户名在此wiki不再存在。",
"loginlanguagelabel": "语言:$1",
"suspicious-userlogout": "注销请求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。",
"createacct-another-realname-tip": "真实姓名是选填项目。\n如果你选择提供它,它将会用于贡献署名。",
"showpreview": "显示预览",
"showdiff": "显示更改",
"blankarticle": "<strong>警告</strong>:您创建的页面是空白的。如果您再次点击“{{int:savearticle}}”,您将真的创建没有任何内容的页面。",
- "anoneditwarning": "<strong>警告:</strong>您没有登录。您的IP地址将被记录在该页面的编辑历史中。",
+ "anoneditwarning": "<strong>警告:</strong>您没有登录。您做出任何编辑后您的IP地址会公开可见。如果您<strong>[$1 登陆]</strong>或<strong>[$2 注册]</strong>一个账户,您的编辑将归属于您的用户名,以及有其他好处。",
"anonpreviewwarning": "<em>你没有登录。保存会记录你的IP地址于该页面的编辑历史中。</em>",
"missingsummary": "'''提示:'''你没有提供编辑摘要。如果你再次点击“{{int:savearticle}}”,你的编辑将不带编辑摘要保存。",
"missingcommenttext": "请在下面输入评论。",
"expand_templates_intro": "此特殊页面可以递归地展开所给文本中的模板。\n它同时还可展开诸如<nowiki>{{</nowiki>#language:...}}的解析器函数和诸如<nowiki>{{</nowiki>CURRENTDAY}}的变量。\n实际上,几乎所有在双重花括号中的内容都会被展开。",
"expand_templates_title": "上下文标题,用于{{FULLPAGENAME}}等:",
"expand_templates_input": "输入文本:",
- "expand_templates_output": "结果:",
+ "expand_templates_output": "结果",
"expand_templates_xml_output": "XML输出",
"expand_templates_html_output": "原始HTML输出",
"expand_templates_ok": "确定",
"NigelSoft"
]
},
- "tog-underline": "連結底線:",
+ "tog-underline": "連結顯示底線:",
"tog-hideminor": "隱藏最近變更中的小修訂",
- "tog-hidepatrolled": "隱藏最近更改中巡查過的編輯",
+ "tog-hidepatrolled": "隱藏最近變更中巡查過的編輯",
"tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
"tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更",
"tog-usenewrc": "依最近變更與監視清單頁面分類顯示變更",
"tog-numberheadings": "標題自動編號",
"tog-showtoolbar": "顯示編輯工具列",
- "tog-editondblclick": "啟用滑鼠雙擊編輯頁面",
+ "tog-editondblclick": "開啟滑鼠雙擊編輯頁面",
"tog-editsectiononrightclick": "開啟滑鼠右鍵點選章節標題編輯",
"tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視清單",
"tog-watchdefault": "將我編輯的頁面和檔案新增至監視清單",
"october-date": "十月 $1 日",
"november-date": "十一月 $1 日",
"december-date": "十二月 $1 日",
- "pagecategories": "{{PLURAL:$1|分類|分類}}",
+ "pagecategories": "{{PLURAL:$1|分類|$1 個分類}}",
"category_header": "分類 \"$1\" 中的頁面",
"subcategories": "子分類",
"category-media-header": "分類 \"$1\" 中的媒體",
"userlogin-resetlink": "您忘記了登入的詳細資訊?",
"userlogin-resetpassword-link": "忘記密碼?",
"userlogin-helplink2": "登入協助",
- "userlogin-loggedin": "您目前已登入 {{GENDER:$1|$1}} 使用者,\n請使用下列表單改登入另一位使用者。",
- "userlogin-createanother": "建立另一個帳號",
"createacct-emailrequired": "電子郵件位址",
"createacct-emailoptional": "電子郵件位址 (選填)",
"createacct-email-ph": "輸入您的電子郵件位址",
"showpreview": "顯示預覽",
"showdiff": "顯示變更",
"blankarticle": "<strong>警告:</strong>您正在建立的頁面是空白的。\n如果您再按一下\"{{int:savearticle}}\",將建立沒有任何內容的頁面。",
- "anoneditwarning": "<strong>警告:</strong>您尚未登入。\n您的 IP 位址將記錄在此頁的編輯歷史中。",
+ "anoneditwarning": "<strong>警告:</strong>您尚未登入。 若您進行任何的編輯您的 IP 位置將會被公開。 若您 <strong>[$1 登入]</strong> 或 <strong>[$2 建立帳號]</strong>,您的編輯將會以您的使用者名稱標示,擁有其他優點。",
"anonpreviewwarning": "<em>您尚未登入。儲存頁面會將您的 IP 位址記錄在此頁面的編輯歷史中。</em>",
"missingsummary": "<strong>提醒:</strong>您未填寫編輯摘要。\n若您再點選 \"{{int:savearticle}}\" 一次,將略過摘要直接儲存您的編輯。",
"missingcommenttext": "請在下方輸入評論。",
"sitejspreview": "<strong>您目前正預覽此 JavaScript,JavaScript 還尚未儲存!</strong>",
"userinvalidcssjstitle": "<strong>警告:</strong> 無此外觀樣式 \"$1\"。\n自訂的 .css 和 .js 頁面要使用小寫標題,例如:{{ns:user}}:Foo/vector.css 與 {{ns:user}}:Foo/Vector.css 是不同的。",
"updated": "(已更新)",
- "note": "</strong>注意:</strong>",
+ "note": "<strong>注意:</strong>",
"previewnote": "<strong>您目前正在預覽,您的變更還尚未儲存!</strong>",
"continue-editing": "前往編輯框",
"previewconflict": "此預覽顯示了您於上方文字編輯框中的內容儲存之後將會顯示的結果。",
"postedit-confirmation-saved": "您的編輯已儲存。",
"edit-already-exists": "無法建立新頁面。\n該頁面已存在。",
"defaultmessagetext": "預設訊息文字",
- "content-failed-to-parse": "分析 $2 格式的 $1 語法內容失敗:$3",
+ "content-failed-to-parse": "解析 $2 格式的 $1 語法內容失敗:$3",
"invalid-content-data": "內容資料無效",
"content-not-allowed-here": "頁面 [[$2]] 不允許使用 \"$1\" 語法內容",
"editwarning-warning": "離開此頁面可能會令您遺失之前所作的所有更改。\n若您已經登入,您可在偏好設定的 \"{{int:prefs-editing}}\" 項目關閉此警告。",
"content-model-text": "純文字",
"content-model-javascript": "JavaScript",
"content-model-css": "CSS",
- "expensive-parserfunction-warning": "<strong>警告:</strong>此頁面使用了太多消耗系統資源的分析函數。\n\n使用次數應小於 $2 次,但目前使用了 $1 次。",
+ "expensive-parserfunction-warning": "<strong>警告:</strong>此頁面使用了太多消耗系統資源的解析函數。\n\n使用次數應小於 $2 次,但目前使用了 $1 次。",
"expensive-parserfunction-category": "使用了太多消耗系統資源的分析函數的頁面",
"post-expand-template-inclusion-warning": "<strong>警告:</strong>引用樣板後大小超出限制。\n部份樣版內容將不會被使用。",
"post-expand-template-inclusion-category": "引用樣板後大小超出限制的頁面",
"prefs-help-signature": "在對話頁面上評論時應使用 \"<nowiki>~~~~</nowiki>\" 簽名,\n該符號會轉換成您的簽名與時間。",
"badsig": "錯誤的原始簽名。請檢查 HTML 標籤。",
"badsiglength": "您的簽名過長。\n它的長度不可超過 $1 個字元。",
- "yourgender": "您希望如何被描述?",
+ "yourgender": "您希望使用何種性別稱呼?",
"gender-unknown": "我不想說明",
"gender-male": "他編輯了 Wiki 頁面",
"gender-female": "她編輯了 Wiki 頁面",
"illegal-filename": "不允許使用的檔案名稱。",
"overwrite": "不允許覆蓋現有檔案。",
"unknown-error": "發生不明錯誤。",
- "tmp-create-error": "無法建立臨時檔案。",
+ "tmp-create-error": "無法建立暫存檔案。",
"tmp-write-error": "寫入臨時檔案發生錯誤。",
"large-file": "建議的檔案大小上限為 $1;\n此檔案為 $2。",
"largefileserver": "此檔案大小超出伺服器設定的允許範圍。",
- "emptyfile": "您上傳的檔案為空的。\n可能是檔案名輸入錯誤。\n請檢查您是否真的要上傳空檔案。",
+ "emptyfile": "您上傳的檔案為空的。\n可能是檔案名稱輸入錯誤。\n請檢查您是否真的要上傳空檔案。",
"windows-nonascii-filename": "本 Wiki 不支援使用特殊符號的檔案名稱。",
"fileexists": "已存在相同名稱的檔案,若{{GENDER:|您}}不確定是否要變更它,請檢查 <strong>[[:$1]]</strong>。\n[[$1|thumb]]",
"filepageexists": "此檔案的描述頁面 <strong>[[:$1]]</strong> 已存在,但目前沒有使用此名稱的檔案。\n您在此輸入的摘要不會儲存到該描述頁面,\n您必須手動編輯該描述頁面。\n[[$1|thumb]]",
"upload-proto-error": "通訊協定不正確",
"upload-proto-error-text": "遠端上傳檔案需要使用以 <code>http://</code> 或 <code>ftp://</code> 開頭的 URL。",
"upload-file-error": "內部錯誤",
- "upload-file-error-text": "嘗試在伺服器上建立臨時檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
+ "upload-file-error-text": "嘗試在伺服器上建立暫存檔案時發生內部錯誤。\n請連絡 [[Special:ListUsers/sysop|管理員]]。",
"upload-misc-error": "不明的上傳錯誤",
"upload-misc-error-text": "上傳時發生不明錯誤。\n請檢查您的 URL 是否有效且可存取,然後再重試一次。\n如果仍有問題,請聯絡 [[Special:ListUsers/sysop|管理員]]。",
"upload-too-many-redirects": "該 URL 重新導向至太多其他位址",
"listfiles-summary": "此特殊頁面顯示所有已上傳的檔案。",
"listfiles_search_for": "搜尋媒體名稱:",
"imgfile": "檔案",
- "listfiles": "檔案列表",
+ "listfiles": "檔案清單",
"listfiles_thumb": "縮圖",
"listfiles_date": "日期",
"listfiles_name": "名稱",
"wantedpages": "需要的頁面",
"wantedpages-badtitle": "結果集合中的標題無效:$1",
"wantedfiles": "需要的檔案",
- "wantedfiletext-cat": "以ä¸\8bæª\94æ¡\88被使ç\94¨ï¼\8cä½\86ä¸\8då\98å\9c¨ã\80\82å¤\96é\83¨å\84²å\98庫ç\9a\84æª\94æ¡\88å\84\98管ç\8f¾æ\9c\89ï¼\8cä½\86å\8f¯è\83½æ\9c\83å\9c¨æ¤å\88\97å\87ºï¼\8cä»»ä½\95æ¤é¡\9eç\9a\84èª¤å ±å°\87被<del>å\89\94é\99¤</del>ã\80\82æ¤å¤\96ï¼\8cå\85§åµ\8cäº\86ä¸\8då\98å\9c¨ç\9a\84æª\94æ¡\88ç\9a\84網é \81å°\87å\9c¨[[:$1]]å\88\97å\87ºã\80\82",
+ "wantedfiletext-cat": "ä¸\8bå\88\97æª\94æ¡\88被æ\99\82ç\94¨ï¼\8cä½\86æª\94æ¡\88ä¸\8då\98å\9c¨ã\80\82 å¤\96é\83¨å\84²å\98庫ç\9a\84æª\94æ¡\88å\84\98管å\98å\9c¨ï¼\8cä½\86æ¤æ¸\85å\96®ä»\8dæ\9c\83å\88\97å\87ºã\80\82 é\80\99é¡\9eèª¤å ±ç\9a\84é \85ç\9b®æ\9c\83以 <del>å\88ªé\99¤ç·\9a</del> æ¨\99示ã\80\82 å\8f¦å¤\96ï¼\8cé \81é\9d¢å\85§åµ\8cæª\94æ¡\88ä¸\8då\98å\9c¨æ\9c\83æ\96¼æ¸\85å\96® [[:$1]] ä¸é¡¯ç¤ºã\80\82",
"wantedfiletext-cat-noforeign": "下列檔案已被使用但不存在。 除此之外,頁面已內嵌但不存在的檔案列於 [[:$1]]。",
- "wantedfiletext-nocat": "以ä¸\8bæª\94æ¡\88被使ç\94¨ï¼\8cä½\86ä¸\8då\98å\9c¨ã\80\82å¤\96é\83¨å\84²å\98庫ç\9a\84æ\96\87件å\84\98管ç\8f¾æ\9c\89ï¼\8cä½\86å\8f¯è\83½æ\9c\83å\9c¨æ¤å\88\97å\87ºï¼\8cä»»ä½\95æ¤é¡\9eç\9a\84èª¤å ±å°\87被<del>å\89\94é\99¤</del>。",
+ "wantedfiletext-nocat": "ä¸\8bå\88\97æª\94æ¡\88被æ\99\82ç\94¨ï¼\8cä½\86æª\94æ¡\88ä¸\8då\98å\9c¨ã\80\82 å¤\96é\83¨å\84²å\98庫ç\9a\84æª\94æ¡\88å\84\98管å\98å\9c¨ï¼\8cä½\86æ¤æ¸\85å\96®ä»\8dæ\9c\83å\88\97å\87ºã\80\82 é\80\99é¡\9eèª¤å ±ç\9a\84é \85ç\9b®æ\9c\83以 <del>å\88ªé\99¤ç·\9a</del> æ¨\99示。",
"wantedfiletext-nocat-noforeign": "下列檔案已被使用但不存在。",
"wantedtemplates": "需要的樣版",
"mostlinked": "被連結最多的頁面",
"pager-newer-n": "較新 $1 筆",
"pager-older-n": "較舊 $1 筆",
"suppress": "監督",
- "querypage-disabled": "æ¤ç\89¹æ®\8aé \81é\9d¢å\9fºæ\96¼æ\95\88è\83½ç\9a\84å\8e\9få\9b å·²ç¶\93被停用。",
+ "querypage-disabled": "æ¤ç\89¹æ®\8aé \81é\9d¢å\9b è\80\83é\87\8fæ\95\88è\83½å\95\8fé¡\8cå·²被停用。",
"booksources": "圖書資源",
"booksources-search-legend": "尋找圖書資源",
"booksources-isbn": "國際標準書號:",
"booksources-go": "執行",
- "booksources-text": "以ä¸\8bæ\98¯ä¸\80份é\8a·å\94®æ\96°æ\9b¸æ\88\96äº\8cæ\89\8bæ\9b¸ç\9a\84å\88\97表ï¼\8c並å\8f¯è\83½æ\9c\89{{GENDER:|ä½ |妳|ä½ }}æ£å°\8bæ\89¾ç\9a\84æ\9b¸ç\9a\84é\80²ä¸\80æ¥è¨\8aæ\81¯:",
- "booksources-invalid-isbn": "æ\8f\90ä¾\9bç\9a\84ISBNè\99\9f碼並ä¸\8dæ£ç¢ºï¼\8cè«\8b檢æ\9f¥å\8e\9få§\8bè¤\87製ä¾\86æº\90è\99\9f碼是否有誤。",
+ "booksources-text": "ä¸\8bå\88\97æ¸\85å\96®å\8c\85å\90«å\85¶ä»\96é\8a·å\94®æ\96°æ\9b¸ç±\8dæ\88\96äº\8cæ\89\8bæ\9b¸ç±\8dç\9a\84網ç«\99é\80£çµ\90ï¼\8cå\8f¯æ\9c\83æ\9c\89ä½ æ\83³å°\8bæ\89¾æ\9b¸ç±\8dç\9a\84é\80²ä¸\80é\83¨è³\87è¨\8a:",
+ "booksources-invalid-isbn": "æ\82¨æ\8f\90ä¾\9bç\9a\84 ISBN ä¸\8dæ£ç¢ºï¼\8cè«\8b檢æ\9f¥è¤\87製ç\9a\84ä¾\86æº\90是否有誤。",
"specialloguserlabel": "執行者:",
"speciallogtitlelabel": "目標 (標題或使用者):",
"log": "日誌",
"deletedcontributions-title": "已刪除的使用者貢獻",
"sp-deletedcontributions-contribs": "貢獻",
"linksearch": "外部連結搜尋",
- "linksearch-pat": "搜尋網址:",
+ "linksearch-pat": "搜尋關鍵字:",
"linksearch-ns": "命名空間:",
"linksearch-ok": "搜尋",
"linksearch-text": "可使用萬用字元如 \"*.wikipedia.org\"。\n萬用字元必須使用在最上層網域,例如 \"*.org\".<br />\n支援的{{PLURAL:$2|通訊協定|通訊協定}}有:<code>$1</code> (若未指定則預設使用 http:// 通訊協定)。",
"index-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__INDEX__</nowiki></code> 被機器人列入索引的頁面。",
"post-expand-template-inclusion-category-desc": "展開樣版後大小超過 <code>$wgMaxArticleSize</code> 導致部份樣版未正常展開的頁面。",
"post-expand-template-argument-category-desc": "展開樣版參數後大小超過 <code>$wgMaxArticleSize</code> 的頁面 (有些於三括號中,如 <code>{{{Foo}}}</code>)。",
- "expensive-parserfunction-category-desc": "頁面使用太多消耗系統資源的分析器函數 (如 <code>#ifexist</code>)。\n請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
+ "expensive-parserfunction-category-desc": "頁面使用太多消耗系統資源的解析器函數 (如 <code>#ifexist</code>)。\n請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
"broken-file-category-desc": "含有損壞檔案連結的頁面 (內嵌檔案連結的檔案不存在)。",
"hidden-category-category-desc": "內容中使用 <code><nowiki>__HIDDENCAT__</nowiki></code> 的分類,可隱藏預設在頁面上顯示的分類連結方塊。",
"trackingcategories-nodesc": "沒有可用的描述。",
"emailuser-title-notarget": "E-mail 給使用者",
"emailpage": "E-mail 給使用者",
"emailpagetext": "您可以使用以下表格傳送電子郵件給這位 {{Gender:$1|使用者}}。\n您在 [[Special:Preferences|偏好設定]] 中所輸入的電子郵件位址將會作為郵件的 \"寄件人\",因此該使用者可直接回覆您。",
- "defemailsubject": "來自使用者 \"$1\" 於 {{SITENAME}} 寄來的電子郵件",
+ "defemailsubject": "{{SITENAME}} 使用者 \"$1\" 寄來的電子郵件",
"usermaildisabled": "使用者電子郵件已停用",
- "usermaildisabledtext": "您不可傳送信件到這個 Wiki 上的其他使用者",
+ "usermaildisabledtext": "您不能傳送信件到這個 Wiki 上的其他使用者",
"noemailtitle": "沒有電子郵件位址",
"noemailtext": "此使用者尚未指定一個有效的電子郵件位址。",
"nowikiemailtext": "此使用者選擇不接收其他使用者的信件。",
"emailtarget": "輸入收件人使用者名稱",
"emailusername": "使用者名稱:",
"emailusernamesubmit": "送出",
- "email-legend": "傳送電子郵件給另一位 {{SITENAME}} 使用者",
+ "email-legend": "傳送電子郵件給另一位 {{SITENAME}} 的使用者",
"emailfrom": "寄件人:",
"emailto": "收件人:",
"emailsubject": "主旨:",
"emailmessage": "訊息:",
"emailsend": "傳送",
- "emailccme": "傳送一份副本到我的電子郵件信箱。",
+ "emailccme": "傳送一份訊息副本到我的電子郵件信箱。",
"emailccsubject": "您寄給 $1 的訊息副本:$2",
"emailsent": "已寄出電子郵件",
"emailsenttext": "已寄出您的電子郵件訊息。",
"actionfailed": "操作失敗",
"deletedtext": "已刪除 \"$1\"。\n請參考 $2 檢視最近的刪除記錄。",
"dellogpage": "刪除日誌",
- "dellogpagetext": "以下為最近刪除記錄的列表。",
+ "dellogpagetext": "以下為最近刪除記錄的清單。",
"deletionlog": "刪除日誌",
"reverted": "還原到較早的版本",
"deletecomment": "原因:",
"sessionfailure-title": "連線階段失敗",
"sessionfailure": "似乎您的登入會話有問題;\n為了防止會話劫持,這個操作已經被取消。\n請返回先前的頁面,重新載入該頁面,然後重試。",
"protectlogpage": "保護日誌",
- "protectlogtext": "以下為變更頁面保護的列表。\n請參考 [[Special:ProtectedPages|受保護頁面列表]] 檢視目前受保護頁面。",
+ "protectlogtext": "以下為變更頁面保護的清單。\n請參考 [[Special:ProtectedPages|受保護頁面清單]] 檢視目前受保護頁面。",
"protectedarticle": "已保護 \"[[$1]]\"",
"modifiedarticleprotection": "已變更 \"[[$1]]\" 的保護層級",
"unprotectedarticle": "已解除 \"[[$1]]\" 的保護",
"sp-contributions-userrights": "使用者權限管理",
"sp-contributions-blocked-notice": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
"sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
- "sp-contributions-search": "搜尋貢獻記錄",
+ "sp-contributions-search": "搜尋貢獻",
"sp-contributions-username": "IP 位址或使用者名稱:",
- "sp-contributions-toponly": "å\8fªé¡¯ç¤ºæ\9c\80æ\96°ä¿®è¨\82ç\89\88æ\9c¬ç\9a\84編輯",
- "sp-contributions-newonly": "å\83\85顯示建ç«\8bé \81é\9d¢ä¹\8b編輯",
+ "sp-contributions-toponly": "只顯示最新修訂的編輯",
+ "sp-contributions-newonly": "å\8fªé¡¯ç¤ºå»ºç«\8bé \81é\9d¢ç\9a\84編輯",
"sp-contributions-submit": "搜尋",
"whatlinkshere": "連入頁面",
"whatlinkshere-title": "連結到 \"$1\" 的頁面",
"block-log-flags-angry-autoblock": "加強自動封鎖已開啟",
"block-log-flags-hiddenname": "隱藏使用者名稱",
"range_block_disabled": "管理員可建立範圍封鎖的權限以被關閉。",
- "ipb_expiry_invalid": "無效的終止時間。",
+ "ipb_expiry_invalid": "無效的期限。",
"ipb_expiry_temp": "隱藏使用者名稱的封鎖不可設定期限。",
"ipb_hide_invalid": "無法禁止顯示此帳號;它擁有超過 $1 次的編輯。",
"ipb_already_blocked": "已經封鎖 \"$1\"。",
"thumbnail_error_remote": "來自 $1 錯誤訊息:\n$2",
"djvu_page_error": "DjVu 頁面超出範圍",
"djvu_no_xml": "無法在 DjVu 檔案中擷取 XML",
- "thumbnail-temp-create": "無法建立臨時縮圖檔案",
+ "thumbnail-temp-create": "無法建立暫存縮圖檔案",
"thumbnail-dest-create": "無法儲存縮圖至目標",
"thumbnail_invalid_params": "無效的縮圖參數",
"thumbnail_dest_directory": "無法建立目標目錄",
"importsuccess": "已完成匯入!",
"importnosources": "未定義任何 Transwiki 匯入來源且已關閉使用歷史記錄上傳功能。",
"importnofile": "未上傳匯入檔案。",
- "importuploaderrorsize": "上載匯入檔案失敗。\n檔案大小超過允許上傳大小。",
- "importuploaderrorpartial": "上載匯入檔案失敗。\n僅上傳部份檔案。",
- "importuploaderrortemp": "上載匯入檔案失敗。\n遺失臨時資料夾。",
- "import-parse-failure": "XML 匯入分析失敗",
+ "importuploaderrorsize": "上傳匯入檔案失敗。\n檔案大小超過允許上傳大小。",
+ "importuploaderrorpartial": "上傳匯入檔案失敗。\n僅上傳部份檔案。",
+ "importuploaderrortemp": "上傳匯入檔案失敗。\n遺失暫存資料夾。",
+ "import-parse-failure": "XML 匯入解析失敗",
"import-noarticle": "沒有任何可匯入的頁面!",
"import-nonewrevisions": "未匯入任何修訂 (修訂已存在,或因錯誤跳過)。",
"xml-error-string": "$1 於行 $2,欄 $3 ($4 位元組):$5",
"tooltip-t-contributions": "此使用者的貢獻清單",
"tooltip-t-emailuser": "傳送電子郵件給這個使用者",
"tooltip-t-upload": "上傳檔案",
- "tooltip-t-specialpages": "全部特殊頁面的列表",
+ "tooltip-t-specialpages": "全部特殊頁面的清單",
"tooltip-t-print": "此頁面的可列印版本",
- "tooltip-t-permalink": "此頁面修訂的固定連結",
+ "tooltip-t-permalink": "此頁面修訂的靜態連結",
"tooltip-ca-nstab-main": "檢視頁面內容",
"tooltip-ca-nstab-user": "檢視使用者頁面",
"tooltip-ca-nstab-media": "檢視媒體頁面",
"noscript.css": "/* 此 CSS 會影響沒有啓用 JavaScript 的使用者 */",
"group-autoconfirmed.css": "/* 此 CSS 會影響自動確認的使用者 */",
"group-bot.css": "/* 此 CSS 會影響機器人 */",
- "group-sysop.css": "/* 此 CSS 會影響管理員 */",
+ "group-sysop.css": "/* 這裡的 CSS 會影響管理員 */",
"group-bureaucrat.css": "/* 此 CSS 會影響行政員 */",
"common.js": "/* 此 JavaScript 會用於使用者載入的每一個頁面。 */",
+ "group-sysop.js": "/* 這裡的 JavaScript 會影響管理員 */",
"anonymous": "{{SITENAME}} 的匿名{{PLURAL:$1|使用者}}",
"siteuser": "{{SITENAME}} 使用者 $1",
"anonuser": "{{SITENAME}} 匿名使用者 $1",
- "lastmodifiedatby": "此頁由 $3 於 $1 $2 的最後更改。",
+ "lastmodifiedatby": "此頁面由 $3 於 $1 $2 做最後修改。",
"othercontribs": "此頁面由 $1 所貢獻。",
"others": "其他",
"siteusers": "{{SITENAME}} {{PLURAL:$2|使用者}} $1",
"version-extensions": "已安裝的擴充套件",
"version-skins": "已安裝的外觀",
"version-specialpages": "特殊頁面",
- "version-parserhooks": "èª\9eæ³\95連結(Hook)",
+ "version-parserhooks": "解æ\9e\90å\99¨連結(Hook)",
"version-variables": "變數",
"version-antispam": "垃圾訊息防止",
"version-other": "其他",
"version-mediahandlers": "媒體處理器",
"version-hooks": "連結(Hooks)",
- "version-parser-extensiontags": "èª\9eæ³\95擴充標籤",
+ "version-parser-extensiontags": "解æ\9e\90å\99¨擴充標籤",
"version-parser-function-hooks": "語法函數連結",
"version-hook-name": "連結名稱",
"version-hook-subscribedby": "署名",
"dberr-usegoogle": "在現階段您可以嘗試透過 Google 搜尋。",
"dberr-outofdate": "留意他們索引出來之內容可能不是最新的。",
"dberr-cachederror": "這個是所要求出來的快取複本,可能不是最新的。",
- "htmlform-invalid-input": "您輸入的內容存在問題",
+ "htmlform-invalid-input": "您的輸入的內容有問題。",
"htmlform-select-badoption": "您所指定的值不是有效的選項。",
"htmlform-int-invalid": "您所指定的值不是一個整數。",
"htmlform-float-invalid": "您所指定的值不是一個數字。",
"api-error-filename-tooshort": "檔案名稱過短。",
"api-error-filetype-banned": "此檔案類型已禁止使用。",
"api-error-filetype-banned-type": "$1{{PLURAL:$4|不是允許的檔案類型}}。 允許的{{PLURAL:$3|檔案類型是}} $2。",
- "api-error-filetype-missing": "æ\9c¬æª\94æ¡\88缺å°\91äº\86副檔名。",
+ "api-error-filetype-missing": "æ¤æª\94æ¡\88å\90\8d稱缺å°\91副檔名。",
"api-error-hookaborted": "你試圖進行的修改被一個擴展鉤子終止。",
- "api-error-http": "內部錯誤:無法連接到伺服器。",
+ "api-error-http": "內部錯誤:無法連線到伺服器。",
"api-error-illegal-filename": "不允許使用的檔案名稱。",
"api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。",
- "api-error-invalid-file-key": "內部錯誤:於臨時儲存庫中查無檔案。",
- "api-error-missingparam": "內部錯誤:請求中缺少參數。",
- "api-error-missingresult": "內部錯誤:無法確定複製是否成功。",
+ "api-error-invalid-file-key": "內部錯誤:於暫存儲存庫中查無檔案。",
+ "api-error-missingparam": "內部錯誤:請求缺少參數。",
+ "api-error-missingresult": "內部錯誤:無法辨識複製是否成功。",
"api-error-mustbeloggedin": "您必須登入方可上傳檔案。",
- "api-error-mustbeposted": "內部錯誤:請求需要 HTTP POST。",
+ "api-error-mustbeposted": "內部錯誤:請求需使用 HTTP POST。",
"api-error-noimageinfo": "上傳成功,但伺服器沒有給我們任何該檔案的資訊。",
- "api-error-nomodule": "內部錯誤:缺少上傳模塊集。",
- "api-error-ok-but-empty": "內部錯誤:伺服器沒有響應。",
- "api-error-overwrite": "不允許覆蓋現有檔案。",
- "api-error-stashfailed": "內部錯誤:伺服器儲存臨時檔案失敗。",
- "api-error-publishfailed": "內部錯誤:伺服器發佈臨時檔案失敗。",
- "api-error-stasherror": "上載檔案存檔時出錯。",
+ "api-error-nomodule": "內部錯誤:缺少上傳模組集。",
+ "api-error-ok-but-empty": "內部錯誤:伺服器沒有回應。",
+ "api-error-overwrite": "不允許覆蓋已存在的檔案。",
+ "api-error-stashfailed": "內部錯誤:伺服器儲存暫存檔案失敗。",
+ "api-error-publishfailed": "內部錯誤:伺服器發佈暫存檔案失敗。",
+ "api-error-stasherror": "上傳檔案至儲存庫時發生錯誤。",
"api-error-timeout": "伺服器沒有在預期的時間內回應。",
- "api-error-unclassified": "發生未知錯誤。",
- "api-error-unknown-code": "未知錯誤:$1",
- "api-error-unknown-error": "å\85§é\83¨é\8c¯èª¤ï¼\9aå\98\97試ä¸\8aå\82³æª\94æ¡\88æ\99\82å\87ºé\8c¯。",
+ "api-error-unclassified": "發生不明錯誤。",
+ "api-error-unknown-code": "不明錯誤:\"$1\"。",
+ "api-error-unknown-error": "å\85§é\83¨é\8c¯èª¤ï¼\9aå\98\97試ä¸\8aå\82³æ\82¨ç\9a\84æª\94æ¡\88æ\99\82ç\99¼ç\94\9fé\8c¯èª¤。",
"api-error-unknown-warning": "不明警告:\"$1\"。",
"api-error-unknownerror": "不明錯誤:\"$1\"。",
"api-error-uploaddisabled": "此 Wiki 的上傳功能已停用。",
- "api-error-verification-error": "æ\9c¬檔案可能已損壞,或副檔名錯誤。",
+ "api-error-verification-error": "æ¤檔案可能已損壞,或副檔名錯誤。",
"duration-seconds": "$1 秒",
"duration-minutes": "$1 分鐘",
"duration-hours": "$1 小時",
"duration-decades": "$1{{PLURAL:$1|0 年|0 年}}",
"duration-centuries": "$1 世紀",
"duration-millennia": "$1 千年",
- "rotate-comment": "順時針旋轉圖像$1{{PLURAL:$1|度}}",
- "limitreport-title": "分析器分析資料:",
+ "rotate-comment": "已順時針旋轉圖片 $1 {{PLURAL:$1|度|度}}",
+ "limitreport-title": "解析器分析資料:",
"limitreport-cputime": "CPU 使用時間",
"limitreport-cputime-value": "$1 秒",
"limitreport-walltime": "實際使用時間",
"limitreport-templateargumentsize": "樣版參數大小",
"limitreport-templateargumentsize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
"limitreport-expansiondepth": "最高展開深度",
- "limitreport-expensivefunctioncount": "高分析函數次數",
+ "limitreport-expensivefunctioncount": "高消耗解析器函數次數",
"expandtemplates": "展開樣版",
- "expand_templates_intro": "本特殊頁面會將文字中的樣版展開,可以包含支援的分析程式語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
+ "expand_templates_intro": "本特殊頁面會將文字中的樣版展開,可以包含支援的解析器語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
"expand_templates_title": "上下文標題,用於 {{FULLPAGENAME}} 等:",
"expand_templates_input": "輸入文字:",
"expand_templates_output": "結果",
"log-name-pagelang": "更改語言日誌",
"log-description-pagelang": "這是頁面語言更改日誌。",
"logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5。",
- "default-skin-not-found": "哎呀!您的 Wiki 預設外觀 (<code>$wgDefaultSkin</code>),<code>$1</code> 無法使用。\n\n您的安裝程序應包含以下外觀。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code>skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\n\n<pre>$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
+ "default-skin-not-found": "哎呀!您的 Wiki 預設外觀 (<code>$wgDefaultSkin</code>),<code>$1</code> 無法使用。\n\n您的安裝程序應包含以下外觀。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code>skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\n\n<pre>$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
"default-skin-not-found-no-skins": "哎呀!您的 Wiki 預設外觀 (<code>$wgDefaultSkin</code>),<code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code>skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
"default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
"default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已停用''')"
}
// Respond to resource loading request
-$resourceLoader = new ResourceLoader();
+$resourceLoader = new ResourceLoader(
+ ConfigFactory::getDefaultInstance()->makeConfig( 'main' )
+);
$resourceLoader->respond( new ResourceLoaderContext( $resourceLoader, $wgRequest ) );
wfProfileOut( 'load.php' );
--- /dev/null
+ALTER TABLE /*$wgDBprefix*/filearchive
+ CHANGE fa_major_mime fa_major_mime ENUM('unknown','application','audio','image','text','video','message','model','multipart','chemical');
+
--- /dev/null
+ALTER TABLE /*$wgDBprefix*/image
+ CHANGE img_major_mime img_major_mime ENUM('unknown','application','audio','image','text','video','message','model','multipart','chemical');
+
--- /dev/null
+ALTER TABLE /*$wgDBprefix*/oldimage
+ CHANGE oi_major_mime oi_major_mime ENUM('unknown','application','audio','image','text','video','message','model','multipart','chemical');
+
* or pointless ?> closing tags at the end.
*
* @param string $file String Path to a file to check for errors
- * @return bool
*/
private function checkForMistakes( $file ) {
foreach ( $this->mNoStyleCheckPaths as $regex ) {
public function execute() {
$dbw = wfGetDB( DB_MASTER );
- $rl = new ResourceLoader();
+ $rl = new ResourceLoader( ConfigFactory::getDefaultInstance()->makeConfig( 'main' ) );
$moduleNames = $rl->getModuleNames();
$moduleList = implode( ', ', array_map( array( $dbw, 'addQuotes' ), $moduleNames ) );
$limit = max( 1, intval( $this->getOption( 'batchsize', 500 ) ) );
class DeleteEqualMessages extends Maintenance {
public function __construct() {
parent::__construct();
- $this->mDescription = "Deletes all pages in the MediaWiki namespace that are equal to '
- . 'the default message";
+ $this->mDescription = 'Deletes all pages in the MediaWiki namespace that are equal to '
+ . 'the default message';
$this->addOption( 'delete', 'Actually delete the pages (default: dry run)' );
$this->addOption( 'delete-talk', 'Don\'t leave orphaned talk pages behind during deletion' );
$this->addOption( 'lang-code', 'Check for subpages of this language code (default: root '
return;
}
- $this->output( "\n{$messageInfo['relevantPages']} pages in the MediaWiki namespace ' .
- 'override messages." );
- $this->output( "\n{$messageInfo['equalPages']} pages are equal to the default message ' .
- '(+ {$messageInfo['equalPagesTalks']} talk pages).\n" );
+ $this->output( "\n{$messageInfo['relevantPages']} pages in the MediaWiki namespace "
+ . "override messages." );
+ $this->output( "\n{$messageInfo['equalPages']} pages are equal to the default message "
+ . "(+ {$messageInfo['equalPagesTalks']} talk pages).\n" );
if ( !$doDelete ) {
$list = '';
hitcounter
hits
hmac
-hmtl
hobby
homelink
hookaborted
$this->mDescription = 'Find registered files with no corresponding file.';
$this->addOption( 'start', 'Starting file name', false, true );
- $this->setBatchSize( 200 );
+ $this->addOption( 'mtimeafter', 'Only include files changed since this time', false, true );
+ $this->addOption( 'mtimebefore', 'Only includes files changed before this time', false, true );
+ $this->setBatchSize( 300 );
}
function execute() {
$dbr = $repo->getSlaveDB();
$be = $repo->getBackend();
+ $mtime1 = $dbr->timestampOrNull( $this->getOption( 'mtimeafter', null ) );
+ $mtime2 = $dbr->timestampOrNull( $this->getOption( 'mtimebefore', null ) );
+
+ $joinTables = array( 'image' );
+ $joinConds = array( 'image' => array( 'INNER JOIN', 'img_name = page_title' ) );
+ if ( $mtime1 || $mtime2 ) {
+ $joinTables[] = 'logging';
+ $on = array( 'log_page = page_id', 'log_type' => array( 'upload', 'move', 'delete' ) );
+ if ( $mtime1 ) {
+ $on[] = "log_timestamp > {$dbr->addQuotes($mtime1)}";
+ }
+ if ( $mtime2 ) {
+ $on[] = "log_timestamp < {$dbr->addQuotes($mtime2)}";
+ }
+ $joinConds['logging'] = array( 'INNER JOIN', $on );
+ }
+
do {
- $res = $dbr->select( 'image',
- 'img_name',
- array( "img_name >= " . $dbr->addQuotes( $lastName ) ),
+ $res = $dbr->select(
+ array_merge( array( 'page' ), $joinTables ),
+ array( 'img_name' => 'DISTINCT(page_title)' ),
+ array( 'page_namespace' => NS_FILE,
+ "page_title >= " . $dbr->addQuotes( $lastName ) ),
__METHOD__,
- array( 'ORDER BY' => 'img_name', 'LIMIT' => $this->mBatchSize )
+ array( 'ORDER BY' => 'page_title', 'LIMIT' => $this->mBatchSize ),
+ $joinConds
);
// Check if any of these files are missing...
array( 'oi_name' => array_keys( $pathsByName ) ),
__METHOD__
);
+
+ $checkPaths = array();
foreach ( $ores as $row ) {
if ( !strlen( $row->oi_archive_name ) ) {
continue; // broken row
}
$file = $repo->newFromArchiveName( $row->oi_name, $row->oi_archive_name );
- $path = $file->getPath();
- if ( $be->fileExists( array( 'src' => $path ) ) === false ) {
- $this->output( "$path\n" );
+ $checkPaths[] = $file->getPath();
+ }
+
+ foreach ( array_chunk( $checkPaths, $this->mBatchSize ) as $paths ) {
+ $be->preloadFileStat( array( 'srcs' => $paths ) );
+ foreach ( $paths as $path ) {
+ if ( $be->fileExists( array( 'src' => $path ) ) === false ) {
+ $this->output( "$path\n" );
+ }
}
}
}
public function finalSetup() {
parent::finalSetup();
- $this->regex = $this->getOption( 'regex' ) ? : $this->getOption( 'iregex' );
+ $this->regex = $this->getOption( 'regex' ) ?: $this->getOption( 'iregex' );
if ( $this->regex ) {
$this->regex = '/' . $this->regex . '/';
if ( $this->hasOption( 'iregex' ) ) {
--- /dev/null
+ALTER TABLE /*_*/filearchive
+DROP CONSTRAINT fa_major_mime_ckc;
+ALTER TABLE /*_*/filearchive
+WITH NOCHECK ADD CONSTRAINT fa_major_mime_ckc CHECK (fa_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical'));
\ No newline at end of file
--- /dev/null
+ALTER TABLE /*_*/image
+DROP CONSTRAINT img_major_mime_ckc;
+ALTER TABLE /*_*/image
+WITH NOCHECK ADD CONSTRAINT img_major_mime_ckc CHECK (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical'));
\ No newline at end of file
--- /dev/null
+ALTER TABLE /*_*/oldimage
+DROP CONSTRAINT oi_major_mime_ckc;
+ALTER TABLE /*_*/oldimage
+WITH NOCHECK ADD CONSTRAINT oi_major_mime_ckc CHECK (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical'));
\ No newline at end of file
-- SHA-1 content hash in base-36
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')),
+ 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'))
);
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')),
+ 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'))
);
-- sha1 hash of file content
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')),
+ 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'))
);
--- /dev/null
+-- Update keys for Microsoft SQL Server
+-- SQL to insert update keys into the initial tables after a
+-- fresh installation of MediaWiki's database.
+-- This is read and executed by the install script; you should
+-- not have to run it by itself unless doing a manual install.
+-- Insert keys here if either the unnecessary would cause heavy
+-- processing or could potentially cause trouble by lowering field
+-- sizes, adding constraints, etc.
+-- When adjusting field sizes, it is recommended removing old
+-- patches but to play safe, update keys should also inserted here.
+
+--
+-- The /*_*/ comments in this and other files are
+-- replaced with the defined table prefix by the installer
+-- and updater scripts. If you are installing or running
+-- updates manually, you will need to manually insert the
+-- table prefix if any when running these scripts.
+--
+
+INSERT INTO /*_*/updatelog
+ SELECT 'filearchive-fa_major_mime-patch-fa_major_mime-chemical.sql' AS ul_key, null as ul_value
+ UNION SELECT 'image-img_major_mime-patch-img_major_mime-chemical.sql', null
+ UNION SELECT 'oldimage-oi_major_mime-patch-oi_major_mime-chemical.sql', null
+ UNION SELECT 'cl_type-category_types-ck', null
+ UNION SELECT 'fa_major_mime-major_mime-ck', null
+ UNION SELECT 'fa_media_type-media_type-ck', null
+ UNION SELECT 'img_major_mime-major_mime-ck', null
+ UNION SELECT 'img_media_type-media_type-ck', null
+ UNION SELECT 'oi_major_mime-major_mime-ck', null
+ UNION SELECT 'oi_media_type-media_type-ck', null
+ UNION SELECT 'us_media_type-media_type-ck', null;
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Script to populate a bloom filter with a BloomFilter* class
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Script to populate a bloom filter with a BloomFilter* class
+ *
+ * @ingroup Maintenance
+ */
+class PopulateBloomFilter extends Maintenance {
+ public function __construct() {
+ parent::__construct();
+ $this->addOption( 'cache', 'Bloom cache store name', true, true );
+ $this->addOption( 'filter', 'Bloom filter name', true, true );
+ $this->addOption( 'domain', 'Bloom filter domain', true, true );
+ $this->addOption( 'delay', 'Sleep delay between batches (us)', false, true );
+ $this->mDescription = "Populate the specified bloom filter";
+ }
+
+ public function execute() {
+ $type = $this->getOption( 'filter' );
+ $domain = $this->getOption( 'domain' );
+ $bcache = BloomCache::get( $this->getOption( 'cache' ) );
+ $delay = $this->getOption( 'delay', 1e5 );
+
+ if ( !method_exists( "BloomFilter{$type}", 'merge' ) ) {
+ $this->error( "No \"BloomFilter{$type}::merge\" method found.", 1 );
+ }
+
+ $virtualKey = "$domain:$type";
+ $status = $bcache->getStatus( $virtualKey );
+ if ( $status == false ) {
+ $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
+ }
+
+ $startTime = microtime( true );
+ $this->output( "Current timestamp is '$startTime'.\n" );
+ $this->output( "Current filter timestamp is '{$status['asOfTime']}'.\n" );
+
+ do {
+ $status = call_user_func_array(
+ array( "BloomFilter{$type}", 'merge' ),
+ array( $bcache, $domain, $virtualKey, $status )
+ );
+ if ( $status == false ) {
+ $this->error( "Could not query virtual bloom filter '$virtualKey'.", 1 );
+ }
+ $this->output( "Filter updated to timestamp '{$status['asOfTime']}'.\n" );
+ usleep( $delay );
+ } while ( $status['asOfTime'] && $status['asOfTime'] < $startTime );
+
+ $this->output( "Done, filter $type of domain $domain reached time '$startTime'.\n" );
+ }
+}
+
+$maintClass = "PopulateBloomFilter";
+require_once RUN_MAINTENANCE_IF_MAIN;
/**
* @param Title $title
+ * @return array
*/
function templateHook( $title ) {
$titleText = $title->getPrefixedDBkey();
}
public function execute() {
- $wiki = $this->getOption( 'wikidb' ) ? : false;
+ $wiki = $this->getOption( 'wikidb' ) ?: false;
// Get the appropriate load balancer (for this wiki)
if ( $this->hasOption( 'cluster' ) ) {
$lb = wfGetLBFactory()->getExternalLB( $this->getOption( 'cluster' ), $wiki );
-- major part of a MIME media type as defined by IANA
-- see http://www.iana.org/assignments/media-types/
- img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+ -- for "chemical" cf. http://dx.doi.org/10.1021/ci9803233 by the ACS
+ img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
-- minor part of a MIME media type as defined by IANA
-- the minor parts are not required to adher to any standard
oi_metadata mediumblob NOT NULL,
oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
- oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
+ oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
oi_minor_mime varbinary(100) NOT NULL default "unknown",
oi_deleted tinyint unsigned NOT NULL default 0,
oi_sha1 varbinary(32) NOT NULL default ''
fa_metadata mediumblob,
fa_bits int default 0,
fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
- fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") default "unknown",
+ fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
fa_minor_mime varbinary(100) default "unknown",
fa_description tinyblob,
fa_user int unsigned default 0,
--- /dev/null
+-- SQL to insert update keys into the initial tables after a
+-- fresh installation of MediaWiki's database.
+-- This is read and executed by the install script; you should
+-- not have to run it by itself unless doing a manual install.
+-- Insert keys here if either the unnecessary would cause heavy
+-- processing or could potentially cause trouble by lowering field
+-- sizes, adding constraints, etc.
+-- When adjusting field sizes, it is recommended removing old
+-- patches but to play safe, update keys should also inserted here.
+
+-- This is a shared file used for both MySQL and SQLite installs.
+-- Therefore inserting multiple values is not possible using the
+-- INSERT INTO VALUES syntax.
+--
+--
+-- The /*_*/ comments in this and other files are
+-- replaced with the defined table prefix by the installer
+-- and updater scripts. If you are installing or running
+-- updates manually, you will need to manually insert the
+-- table prefix if any when running these scripts.
+--
+
+INSERT INTO /*_*/updatelog
+ SELECT 'filearchive-fa_major_mime-patch-fa_major_mime-chemical.sql' AS ul_key, null as ul_value
+ UNION SELECT 'image-img_major_mime-patch-img_major_mime-chemical.sql', null
+ UNION SELECT 'oldimage-oi_major_mime-patch-oi_major_mime-chemical.sql', null
+ UNION SELECT 'user_groups-ug_group-patch-ug_group-length-increase-255.sql', null
+ UNION SELECT 'user_former_groups-ufg_group-patch-ufg_group-length-increase-255.sql', null
+ UNION SELECT 'user_properties-up_property-patch-up_property.sql', null;
\ No newline at end of file
* assuming an ordering of cl_to, cl_type, cl_from
* @param stdClass $row
* @param DatabaseBase $dbw
+ * @return string
*/
function getBatchCondition( $row, $dbw ) {
$fields = array( 'cl_to', 'cl_type', 'cl_from' );
.replace( /__+/g, '_' )
.replace( /^_+/, '' )
.replace( /_+$/, '' );
- value = value.substr( 0, 1 ).toUpperCase() + value.substr( 1 );
+ value = value.charAt( 0 ).toUpperCase() + value.slice( 1 );
$label.text( labelText.replace( '$1', value ) );
}
*/
'mediawiki.skinning.elements' => array(
'styles' => array(
- 'commonElements.css' => array( 'media' => 'screen' ),
+ 'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ),
),
- 'remoteSkinPath' => 'common',
- 'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
),
'mediawiki.skinning.content' => array(
'styles' => array(
- 'commonElements.css' => array( 'media' => 'screen' ),
- 'commonContent.css' => array( 'media' => 'screen' ),
+ 'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ),
+ 'resources/src/mediawiki.skinning/content.css' => array( 'media' => 'screen' ),
),
- 'remoteSkinPath' => 'common',
- 'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
),
'mediawiki.skinning.interface' => array(
// Used in the web installer. Test it after modifying this definition!
'styles' => array(
- 'commonElements.css' => array( 'media' => 'screen' ),
- 'commonContent.css' => array( 'media' => 'screen' ),
- 'commonInterface.css' => array( 'media' => 'screen' ),
+ 'resources/src/mediawiki.skinning/elements.css' => array( 'media' => 'screen' ),
+ 'resources/src/mediawiki.skinning/content.css' => array( 'media' => 'screen' ),
+ 'resources/src/mediawiki.skinning/interface.css' => array( 'media' => 'screen' ),
),
- 'remoteSkinPath' => 'common',
- 'localBasePath' => $GLOBALS['wgStyleDirectory'] . '/common',
),
'mediawiki.skinning.content.parsoid' => array(
// Style Parsoid HTML+RDFa output consistent with wikitext from PHP parser
- // with the commonInterface.css styles; skinStyles should be used if your
+ // with the interface.css styles; skinStyles should be used if your
// skin over-rides common content styling.
'skinStyles' => array(
'default' => 'resources/src/mediawiki.skinning/content.parsoid.less',
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.skinning.content.externallinks' => array(
+ 'styles' => array(
+ 'resources/src/mediawiki.skinning/content.externallinks.css' => array( 'media' => 'screen' ),
+ ),
+ ),
+
/* jQuery */
'jquery' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.notify.js',
'targets' => array( 'desktop', 'mobile' ),
),
+ 'mediawiki.pager.tablePager' => array(
+ 'styles' => 'resources/src/mediawiki/mediawiki.pager.tablePager.less',
+ 'position' => 'top',
+ ),
'mediawiki.searchSuggest' => array(
'scripts' => 'resources/src/mediawiki/mediawiki.searchSuggest.js',
'styles' => 'resources/src/mediawiki/mediawiki.searchSuggest.css',
),
),
'mediawiki.action.view.metadata' => array(
+ 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.metadata.css',
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.metadata.js',
'messages' => array(
'metadata-expand',
'dependencies' => 'mediawiki.action.view.redirect',
'position' => 'top',
),
+ 'mediawiki.action.view.redirectPage' => array(
+ 'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectPage.css',
+ 'position' => 'top',
+ ),
'mediawiki.action.view.rightClickEdit' => array(
'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
),
'mediawiki.cldr',
),
'targets' => array( 'desktop', 'mobile' ),
+ 'messages' => array(
+ 'and',
+ 'comma-separator',
+ 'word-separator'
+ ),
),
'mediawiki.cldr' => array(
/* MediaWiki Legacy */
'mediawiki.legacy.ajax' => array(
- 'scripts' => 'common/ajax.js',
- 'remoteBasePath' => $GLOBALS['wgStylePath'],
- 'localBasePath' => $GLOBALS['wgStyleDirectory'],
+ 'scripts' => 'resources/src/mediawiki.legacy/ajax.js',
'dependencies' => array(
'mediawiki.util',
'mediawiki.legacy.wikibits',
),
- 'position' => 'top', // Temporary hack for legacy support
+ 'position' => 'top',
),
'mediawiki.legacy.commonPrint' => array(
- 'styles' => array( 'common/commonPrint.css' => array( 'media' => 'print' ) ),
- 'remoteBasePath' => $GLOBALS['wgStylePath'],
- 'localBasePath' => $GLOBALS['wgStyleDirectory'],
+ 'styles' => array( 'resources/src/mediawiki.legacy/commonPrint.css' => array( 'media' => 'print' ) ),
),
'mediawiki.legacy.protect' => array(
- 'scripts' => 'common/protect.js',
- 'remoteBasePath' => $GLOBALS['wgStylePath'],
- 'localBasePath' => $GLOBALS['wgStyleDirectory'],
+ 'scripts' => 'resources/src/mediawiki.legacy/protect.js',
'dependencies' => array(
'jquery.byteLimit',
),
),
'mediawiki.legacy.shared' => array(
// Used in the web installer. Test it after modifying this definition!
- 'styles' => array( 'common/shared.css' => array( 'media' => 'screen' ) ),
- 'remoteBasePath' => $GLOBALS['wgStylePath'],
- 'localBasePath' => $GLOBALS['wgStyleDirectory'],
+ 'styles' => array( 'resources/src/mediawiki.legacy/shared.css' => array( 'media' => 'screen' ) ),
),
'mediawiki.legacy.oldshared' => array(
- 'styles' => array( 'common/oldshared.css' => array( 'media' => 'screen' ) ),
- 'remoteBasePath' => $GLOBALS['wgStylePath'],
- 'localBasePath' => $GLOBALS['wgStyleDirectory'],
+ 'styles' => array( 'resources/src/mediawiki.legacy/oldshared.css' => array( 'media' => 'screen' ) ),
),
'mediawiki.legacy.upload' => array(
- 'scripts' => 'common/upload.js',
- 'remoteBasePath' => $GLOBALS['wgStylePath'],
- 'localBasePath' => $GLOBALS['wgStyleDirectory'],
+ 'scripts' => 'resources/src/mediawiki.legacy/upload.js',
'dependencies' => array(
'jquery.spinner',
'mediawiki.api',
),
),
'mediawiki.legacy.wikibits' => array(
- 'scripts' => 'common/wikibits.js',
- 'remoteBasePath' => $GLOBALS['wgStylePath'],
- 'localBasePath' => $GLOBALS['wgStyleDirectory'],
+ 'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
'dependencies' => array(
'mediawiki.util',
),
'es5-shim' => array(
'scripts' => array(
'resources/lib/es5-shim/es5-shim.js',
+ 'resources/src/polyfill-object-create.js',
),
'targets' => array( 'desktop', 'mobile' ),
'skipFunction' => 'resources/src/es5-skip.js',
'skinStyles' => array(
'default' => 'resources/lib/oojs-ui/oojs-ui-apex.css',
// FIXME As of July 2014, this is to be gone "in a couple of months".
- 'minerva' => 'resources/lib/oojs-ui/oojs-ui-agora.css',
+ 'minerva' => 'resources/lib/oojs-ui/oojs-ui-minerva.css',
),
'messages' => array(
'ooui-outline-control-move-down',
"ooui-toolbar-more": "더 보기",
"ooui-dialog-message-accept": "확인",
"ooui-dialog-message-reject": "취소",
- "ooui-dialog-process-error": "오류가 발생했습니다.",
+ "ooui-dialog-process-error": "무언가가 잘못되었습니다",
"ooui-dialog-process-dismiss": "숨기기",
- "ooui-dialog-process-retry": "다시 시도하세요."
+ "ooui-dialog-process-retry": "다시 시도하세요"
}
"Muddyb Blast Producer"
]
},
- "ooui-dialog-action-close": "Funga",
"ooui-outline-control-move-down": "Sogeza kipengee chini",
"ooui-outline-control-move-up": "Sogeza kipengee juu",
- "ooui-toolbar-more": "Zaidi"
+ "ooui-outline-control-remove": "Toa kitu",
+ "ooui-toolbar-more": "Zaidi",
+ "ooui-dialog-message-accept": "Sawa",
+ "ooui-dialog-message-reject": "Batilisha",
+ "ooui-dialog-process-retry": "Jaribu tena"
}
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g id="window" opacity=".75">
<path id="title" d="M7 10h10v1h-10z"/>
- <path id="window" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
+ <path id="frame" d="M16 19h-8c-2.206 0-4-1.794-4-4v-6c0-2.206 1.794-4 4-4h8c2.206 0 4 1.794 4 4v6c0 2.206-1.794 4-4 4zm-8-12c-1.103 0-2 .897-2 2v6c0 1.103.897 2 2 2h8c1.103 0 2-.897 2-2v-6c0-1.103-.897-2-2-2h-8z"/>
</g>
</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="16" viewBox="0, 0, 16, 16">
+ <g id="transparency">
+ <path d="M0,0 L8,0 L8,8 L0,8 z" fill="#CCCCCC"/>
+ <path d="M8,8 L16,8 L16,16 L8,16 z" fill="#CCCCCC"/>
+ <path d="M8,0 L16,0 L16,8 L8,8 z" fill="#FFFFFF"/>
+ <path d="M0,8 L8,8 L8,16 L0,16 z" fill="#FFFFFF"/>
+ </g>
+</svg>
+++ /dev/null
-/*!
- * OOjs UI v0.1.0-pre (d6008381aa)
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-08-21T23:45:56Z
- */
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
- position: absolute;
- left: 0;
- right: 0;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-dialog-content > .oo-ui-window-head {
- z-index: 1;
- top: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-body {
- z-index: 2;
- top: 0;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-foot {
- z-index: 1;
- bottom: 0;
-}
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 0;
- bottom: 0;
- background-color: #fff;
- -webkit-transform: translate3d(0, -200%, 0);
- -moz-transform: translate3d(0, -200%, 0);
- -ms-transform: translate3d(0, -200%, 0);
- -o-transform: translate3d(0, -200%, 0);
- transform: translate3d(0, -200%, 0);
- -webkit-transition: transform 250ms ease-in-out;
- -moz-transition: transform 250ms ease-in-out;
- -ms-transition: transform 250ms ease-in-out;
- -o-transition: transform 250ms ease-in-out;
- transition: transform 250ms ease-in-out;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: translate3d(0, 0, 0);
- -moz-transform: translate3d(0, 0, 0);
- -ms-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #ccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
- display: block;
- text-align: center;
- padding-top: 0.5em;
-}
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000;
-}
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666;
-}
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: left;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-right: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-right-width: 0;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
- text-align: center;
- line-height: 3.4em;
- padding: 0 2em;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- font-weight: bold;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.35em;
- border-bottom: 1px solid #dddddd;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.35em;
- padding: 2em 0;
-}
-.oo-ui-processDialog-navigation {
- position: relative;
- height: 3.35em;
- padding: 0 1em;
-}
-.oo-ui-processDialog-location {
- padding: 0.25em 0;
- height: 3.35em;
- cursor: default;
- text-align: center;
-}
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.85em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- padding: 0.35em 0.75em;
- min-width: 1.85em;
- min-height: 1.85em;
- border: 1px solid #dddddd;
- border-radius: 4px;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
- line-height: 1.85em;
- padding: 0 1em;
- font-weight: bold;
- color: #777777;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
- position: absolute;
- margin-top: -0.125em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- vertical-align: middle;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button {
- border: 1px solid transparent;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label {
- color: #d11d13;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- padding: 0.75em 0.35em;
- border: none;
- border-radius: 0;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button {
- background-color: #347bff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- color: #ffffff;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- left: 0.5em;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-left: 2.25em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- right: 0.5em;
-}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-right: 2.25em;
-}
-.oo-ui-processDialog-actions-other {
- position: absolute;
- bottom: 1em;
-}
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
-}
-.oo-ui-processDialog-errors {
- background-color: rgba(255, 255, 255, 0.9);
- padding: 3em 3em 1.5em 3em;
- text-align: center;
-}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
-}
-.oo-ui-processDialog-errors-title {
- font-size: 1.5em;
- color: #000;
- margin-bottom: 2em;
-}
-.oo-ui-processDialog-error {
- text-align: left;
- margin: 1em;
- padding: 1em;
- border: solid 1px #ff9e9e;
- background-color: #fff7f7;
- border-radius: 0.25em;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- width: 3.35em;
- height: 3.35em;
- background-size: 2em auto;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 0 0 1em;
-}
-
-.oo-ui-panelLayout {
- padding: 1em 3.35em;
-}
-
-.oo-ui-optionWidget {
- padding: 0.8em 1em 0.8em 3.35em;
- font-weight: bold;
- border-bottom: 1px solid #dddddd;
-}
-.oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
- padding-right: 1.5em;
-}
-.oo-ui-optionWidget-level-0 {
- padding-left: 3.5em;
-}
-.oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon {
- left: 1em;
-}
-.oo-ui-optionWidget-level-1 {
- padding-left: 5em;
-}
-.oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon {
- left: 2.5em;
-}
-.oo-ui-optionWidget-level-2 {
- padding-left: 6.5em;
-}
-.oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon {
- left: 4em;
-}
-
-.oo-ui-buttonOptionWidget {
- padding: 0;
-}
-
-.oo-ui-lookupWidget-menu {
- background-color: #fff;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background: #347bff;
- color: #ffffff;
-}
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
- background-size: 24px auto;
-}
-
-.oo-ui-menuSectionItemWidget {
- font-weight: normal;
- color: #777777;
- border: none;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: .8em 1em;
-}
-
-/* Icons */
-.oo-ui-icon-check {
- background-image: /* @embed */ url(themes/agora/images/icons/check.svg);
- background: #347bff;
-}
+++ /dev/null
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
- position: absolute;
- left: 0;
- right: 0;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-head {
- top: 0;
- z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-body {
- top: 0;
- bottom: 0;
- z-index: 2;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-foot {
- bottom: 0;
- z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 1em;
- bottom: 1em;
- background-color: #fff;
- -webkit-transform: translate3d(0, -200%, 0);
- -moz-transform: translate3d(0, -200%, 0);
- -ms-transform: translate3d(0, -200%, 0);
- -o-transform: translate3d(0, -200%, 0);
- transform: translate3d(0, -200%, 0);
- -webkit-transition: transform 250ms ease-in-out;
- -moz-transition: transform 250ms ease-in-out;
- -ms-transition: transform 250ms ease-in-out;
- -o-transition: transform 250ms ease-in-out;
- transition: transform 250ms ease-in-out;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: translate3d(0, 0, 0);
- -moz-transform: translate3d(0, 0, 0);
- -ms-transform: translate3d(0, 0, 0);
- -o-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
-}
-
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #ccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
- display: block;
- padding-top: 0.5em;
- text-align: center;
-}
-
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000;
-}
-
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666;
-}
-
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: right;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-left: solid 1px #e5e5e5;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-left-width: 0;
-}
-
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
-}
-
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
- padding: 0 2em;
- line-height: 3.4em;
- text-align: center;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- font-weight: bold;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.35em;
- border-bottom: 1px solid #dddddd;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.35em;
- padding: 2em 0;
-}
-
-.oo-ui-processDialog-navigation {
- position: relative;
- height: 3.35em;
- padding: 0 1em;
-}
-
-.oo-ui-processDialog-location {
- height: 3.35em;
- padding: 0.25em 0;
- text-align: center;
- cursor: default;
-}
-
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.85em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- min-width: 1.85em;
- min-height: 1.85em;
- padding-top: 0.75em;
- padding-bottom: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
- padding: 0 1em;
- line-height: 1.85em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
- position: absolute;
- margin-top: -0.125em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
- margin: 0.75em 0.75em 0.75em 0;
- border: solid 1px #ccc;
- border-radius: 0.25em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- padding: 0;
- vertical-align: middle;
-}
-
-.oo-ui-processDialog-actions-safe.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- margin: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
- margin: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- /* Adjust for border so text aligns with title */
-
- margin: -1px;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- font-weight: bold;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- right: 0.5em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-right: 2.25em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- left: 0.5em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-left: 2.25em;
-}
-
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
-}
-
-.oo-ui-processDialog-errors {
- padding: 3em 3em 1.5em 3em;
- text-align: center;
- background-color: rgba(255, 255, 255, 0.9);
-}
-
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
-}
-
-.oo-ui-processDialog-errors-title {
- margin-bottom: 2em;
- font-size: 1.5em;
- color: #000;
-}
-
-.oo-ui-processDialog-error {
- padding: 1em;
- margin: 1em;
- text-align: right;
- background-color: #fff7f7;
- border: solid 1px #ff9e9e;
- border-radius: 0.25em;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- width: 3.35em;
- height: 3.35em;
- background-size: 2em auto;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 0 0 1em;
-}
-
-.oo-ui-optionWidget {
- padding: 0.8em 3.35em 0.8em 1em;
- font-weight: bold;
- border-bottom: 1px solid #dddddd;
-}
-
-.oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
- padding-left: 1.5em;
-}
-
-.oo-ui-optionWidget-level-0 {
- padding-right: 3.5em;
-}
-
-.oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon {
- right: 1em;
-}
-
-.oo-ui-optionWidget-level-1 {
- padding-right: 5em;
-}
-
-.oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon {
- right: 2.5em;
-}
-
-.oo-ui-optionWidget-level-2 {
- padding-right: 6.5em;
-}
-
-.oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon {
- right: 4em;
-}
-
-.oo-ui-buttonOptionWidget {
- padding: 0;
-}
-
-.oo-ui-lookupWidget-menu {
- background-color: #fff;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- color: #ffffff;
- background: #347bff;
-}
-
-.oo-ui-menuSectionItemWidget {
- font-weight: normal;
- color: #777777;
- border: none;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: .8em 1em;
-}
-
-/* Icons */
-
-.oo-ui-icon-check {
- background: #347bff;
- background-image: /* @embed */ url(themes/agora/images/icons/check.svg);
-}
\ No newline at end of file
/*!
- * OOjs UI v0.1.0-pre (d6008381aa)
+ * OOjs UI v0.1.0-pre (72f047e5d8)
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2014 OOjs Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2014-08-21T23:45:56Z
+ * Date: 2014-09-06T00:15:06Z
*/
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
+/*
+ * Blank theme mixins.
+ *
+ * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
+ * additional rules to the base styles.
+ */
+/*
+ * Base styles.
+ *
+ * Themes should include this file after defining their variables and mixins.
+ */
+/* @noflip */
+.oo-ui-rtl {
+ direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+ direction: ltr;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ cursor: pointer;
+ display: inline-block;
+ vertical-align: middle;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: none;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ display: none;
+}
+.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-buttonElement-frameless {
+ display: inline-block;
+ position: relative;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+ display: inline-block;
+ vertical-align: top;
+ text-align: center;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ color: #333;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: 0;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-right: -0.75em;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ opacity: 0.8;
+ width: 1.9em;
+ height: 1.9em;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
+ /*.oo-ui-transition(opacity 200ms);*/
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-iconElement-icon {
+ opacity: 1;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:hover > .oo-ui-labelElement-label,
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button:focus > .oo-ui-labelElement-label {
+ color: #000;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #333;
+ margin-left: 0.25em;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #087ecc;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #76ab36;
+}
+.oo-ui-buttonElement-frameless.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #d45353;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ color: #ccc;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+ margin: 0.1em 0;
+ padding: 0.2em 0.8em;
+ border-radius: 0.3em;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+ border: 1px #c9c9c9 solid;
+ -webkit-transition: border-color 100ms ease-in-out;
+ -moz-transition: border-color 100ms ease-in-out;
+ -ms-transition: border-color 100ms ease-in-out;
+ -o-transition: border-color 100ms ease-in-out;
+ transition: border-color 100ms ease-in-out;
+ background: #eeeeee;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+ background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:focus {
+ border-color: #aaa;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ line-height: 1.9em;
+}
+.oo-ui-buttonElement-framed.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+ color: black;
+ border-color: #c9c9c9;
+ background: #eeeeee;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+ background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: -0.5em;
+ margin-right: -0.5em;
+}
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: -0.5em;
+ margin-right: 0.3em;
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button {
+ border: solid 1px #a6cee1;
+ background: #cde7f4;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
+ background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+ background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+ background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+ background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+ background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button:focus {
+ border-color: #9dc2d4;
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-primary.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ border: solid 1px #a6cee1;
+ background: #cde7f4;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+ background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
+ border: solid 1px #b8d892;
+ background: #daf0be;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
+ background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+ background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+ background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+ background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+ background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
+ border-color: #adcb89;
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ border: solid 1px #b8d892;
+ background: #daf0be;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
+ background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+ background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+ background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+ background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+ background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+}
+.oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
+ color: #d45353;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ opacity: 0.5;
+ box-shadow: none;
+ color: #333;
+ background: #eee;
+ border-color: #ccc;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:hover,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button:focus,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button:focus,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:focus {
+ border-color: #ccc;
+ box-shadow: none;
+}
+.oo-ui-clippableElement-clippable {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
+ overflow-y: hidden;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
+ padding: 2em;
+}
+.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 3em;
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
+ position: absolute;
+ bottom: 0;
left: 0;
right: 0;
- overflow: hidden;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+ padding: 1.5em;
+}
+.oo-ui-bookletLayout-outlinePanel {
+ border-right: solid 1px #ddd;
+}
+.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
+ box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
+}
+.oo-ui-fieldLayout {
+ margin-bottom: 1em;
+}
+.oo-ui-fieldLayout:before,
+.oo-ui-fieldLayout:after {
+ content: " ";
+ display: table;
+}
+.oo-ui-fieldLayout:after {
+ clear: both;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+ display: block;
+ float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+ display: block;
+ float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+ text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+}
+.oo-ui-fieldLayout:last-child {
+ margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+ padding-top: 0.5em;
+ margin-right: 5%;
+ width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+ width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+ padding: 0.75em 0.5em 0.5em 0.5em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-top: 0.25em;
+}
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+ color: #ccc;
+}
+.oo-ui-fieldsetLayout {
+ position: relative;
+ margin: 0;
+ padding: 0;
+ border: none;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ display: block;
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
+ margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+ font-size: 1.5em;
+ margin-bottom: 0.5em;
+ padding: 0.25em 0;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
+ padding-left: 1.75em;
+ line-height: 1.33em;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ left: 0;
+ top: 0.25em;
+ width: 2em;
+ height: 2em;
+}
+.oo-ui-gridLayout {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-panelLayout {
+ position: relative;
+}
+.oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-panelLayout-expanded {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-panelLayout-padded {
+ padding: 1.25em;
+}
+.oo-ui-stackLayout > .oo-ui-panelLayout {
+ display: none;
+}
+.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
+ display: block;
+ position: relative;
+}
+.oo-ui-popupTool .oo-ui-popupWidget-popup,
+.oo-ui-popupTool .oo-ui-popupWidget-anchor {
+ z-index: 4;
+}
+.oo-ui-popupTool .oo-ui-popupWidget {
+ margin-left: 1.25em;
+ font-size: 0.8em;
+}
+.oo-ui-toolGroup {
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0.3em;
+ border-radius: 0.25em;
+ border: solid 1px transparent;
+ -webkit-transition: border-color 300ms ease-in-out;
+ -moz-transition: border-color 300ms ease-in-out;
+ -ms-transition: border-color 300ms ease-in-out;
+ -o-transition: border-color 300ms ease-in-out;
+ transition: border-color 300ms ease-in-out;
+}
+.oo-ui-toolGroup-empty {
+ display: none;
+}
+.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
+ color: #000;
+}
+.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
+.oo-ui-barToolGroup > .oo-ui-labelElement-label {
+ display: none;
+}
+.oo-ui-barToolGroup .oo-ui-tool {
+ display: inline-block;
+ position: relative;
+ vertical-align: top;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link {
+ display: block;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ display: block;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ display: none;
+}
+.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-barToolGroup .oo-ui-tool-title,
+.oo-ui-barToolGroup .oo-ui-tool-accel {
+ display: none;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-barToolGroup .oo-ui-tool {
+ margin: -1px 0 -1px -1px;
+ border: solid 1px transparent;
+}
+.oo-ui-barToolGroup .oo-ui-tool:first-child {
+ border-top-left-radius: 0.25em;
+ border-bottom-left-radius: 0.25em;
+}
+.oo-ui-barToolGroup .oo-ui-tool:last-child {
+ margin-right: -1px;
+ border-top-right-radius: 0.25em;
+ border-bottom-right-radius: 0.25em;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link {
+ height: 1.5em;
+ padding: 0.25em;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 1.5em;
+ width: 1.5em;
+ opacity: 0.8;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-color: rgba(0, 0, 0, 0.2);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background: #f8fbfd;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+ background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-left-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.8;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 1;
+}
+.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-popupToolGroup {
+ position: relative;
+ height: 2em;
+ min-width: 2.5em;
+}
+.oo-ui-popupToolGroup-handle {
+ display: block;
+ cursor: pointer;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
+ cursor: default;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ display: none;
+ position: absolute;
+ z-index: 4;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
+ display: block;
+}
+.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
+ left: 0;
+}
+.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
+ right: 0;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-accel {
+ display: none;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 3.5em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ top: 0;
+ width: 2em;
+ height: 2em;
+ opacity: 0.8;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ left: 0.25em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.6em;
+ font-size: 0.8em;
+ margin: 0 1em;
+}
+.oo-ui-popupToolGroup-header {
+ line-height: 2.6em;
+ font-size: 0.8em;
+ margin: 0 0.6em;
+ font-weight: bold;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background: #f8fbfd;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+ background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 2.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ top: 2em;
+ margin: 0 -1px;
+ border: solid 1px #ccc;
+ background-color: white;
+ box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 2em;
+ width: 2em;
+ margin-right: 0.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ line-height: 2em;
+ font-size: 0.8em;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+ display: inline-block;
+ width: 100%;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
-.oo-ui-dialog-content > .oo-ui-window-head {
- z-index: 1;
- top: 0;
+.oo-ui-listToolGroup .oo-ui-tool-link {
+ display: block;
+ cursor: pointer;
+ white-space: nowrap;
}
-.oo-ui-dialog-content > .oo-ui-window-body {
- z-index: 2;
- top: 0;
- bottom: 0;
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
}
-.oo-ui-dialog-content > .oo-ui-window-foot {
- z-index: 1;
- bottom: 0;
+.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
+ padding: 0.25em;
}
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
+.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+ border: solid 1px transparent;
+ margin: -1px 0;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+ padding-right: 0.5em;
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-color: rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
+ background: #f8fbfd;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
+ background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+ background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
+ border-top-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.8;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 1;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+ color: #ccc;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled {
+ color: #ccc;
+}
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-menuToolGroup {
+ border-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+ display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+ display: block;
+ cursor: pointer;
+ white-space: nowrap;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: none;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: /* @embed */ url(images/icons/check.svg);
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+ min-width: 8em;
+}
+.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
+ padding: 0.25em 0 0.25em 0;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
+ border-color: rgba(0, 0, 0, 0.25);
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+ padding: 0 1em 0 0.25em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
+ background-color: #e1f3ff;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
+ color: #ccc;
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled {
+ color: #ccc;
+ border-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator,
+.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconElement-icon {
+ opacity: 0.2;
+}
+.oo-ui-toolbar {
+ clear: both;
+}
+.oo-ui-toolbar-bar {
+ line-height: 1em;
+}
+.oo-ui-toolbar-actions {
+ float: right;
+}
+.oo-ui-toolbar-tools {
+ float: left;
+}
+.oo-ui-toolbar-tools,
+.oo-ui-toolbar-actions,
+.oo-ui-toolbar-shadow {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-toolbar-actions .oo-ui-popupWidget {
+ -webkit-touch-callout: default;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+}
+.oo-ui-toolbar-shadow {
+ background-position: left top;
+ background-repeat: repeat-x;
+ position: absolute;
+ width: 100%;
+ pointer-events: none;
}
-
.oo-ui-toolbar-bar {
border-bottom: solid 1px #ccc;
background: #f8fbfd;
-o-transition: opacity 500ms ease-in-out;
transition: opacity 500ms ease-in-out;
}
-
-.oo-ui-toolGroup {
- border-radius: 0.25em;
- border: solid 1px transparent;
- -webkit-transition: border-color 300ms ease-in-out;
- -moz-transition: border-color 300ms ease-in-out;
- -ms-transition: border-color 300ms ease-in-out;
- -o-transition: border-color 300ms ease-in-out;
- transition: border-color 300ms ease-in-out;
+.oo-ui-optionWidget {
+ position: relative;
+ display: block;
+ cursor: pointer;
+ padding: 0.5em 2em 0.5em 3em;
+ border: none;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+ display: block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.oo-ui-optionWidget-highlighted {
+ background-color: #e1f3ff;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+ line-height: 1.5em;
+}
+.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
+ background-color: #a7dcff;
+}
+.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
+ background-color: #a7dcff;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ color: #ccc;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ top: 50%;
+ width: 2em;
+ height: 2em;
+ margin-top: -1em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
+ left: 0.5em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ right: 0.5em;
+}
+.oo-ui-buttonSelectWidget {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: 0.3em;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-left: -1px;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 0.3em;
+ border-top-left-radius: 0.3em;
+ margin-left: 0;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 0.3em;
+ border-top-right-radius: 0.3em;
+}
+.oo-ui-buttonOptionWidget {
+ display: inline-block;
+ padding: 0;
+ background-color: transparent;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ position: relative;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ position: static;
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ height: 1.9em;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ height: 1.9em;
+ margin-top: 0;
+}
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
+.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
+ background-color: transparent;
+}
+.oo-ui-labelWidget {
+ display: inline-block;
+ padding: 0.5em 0;
+}
+.oo-ui-iconWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 1.9em;
+ width: 1.9em;
+ opacity: 0.8;
+}
+.oo-ui-iconWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-indicatorWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 1.9em;
+ width: 1.9em;
+ opacity: 0.8;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonGroupWidget {
+ display: inline-block;
+ white-space: nowrap;
+ border-radius: 0.3em;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-bottom: -1px;
+ margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 0.3em;
+ border-top-left-radius: 0.3em;
+ margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 0.3em;
+ border-top-right-radius: 0.3em;
+}
+.oo-ui-toggleSwitchWidget {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ overflow: hidden;
+ cursor: pointer;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transform: translateZ(0px);
+ -moz-transform: translateZ(0px);
+ -ms-transform: translateZ(0px);
+ -o-transform: translateZ(0px);
+ transform: translateZ(0px);
+ height: 2em;
+ width: 4em;
+ border-radius: 1em;
+ box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+ border: solid 1px #ccc;
+ background: #eeeeee;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
+ background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
+ background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
}
-.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.1);
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+ cursor: default;
}
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #000;
+.oo-ui-toggleSwitchWidget-grip {
+ position: absolute;
+ display: block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-
-.oo-ui-window-isolated.oo-ui-window-content {
- font-family: sans-serif;
- font-size: 0.8em;
- background: transparent;
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
}
-.oo-ui-window-isolated.oo-ui-window-overlay {
- font-family: sans-serif;
- line-height: 1.5em;
- font-size: 1em;
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ display: none;
}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+ opacity: 0.5;
}
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 1em;
- bottom: 1em;
- background-color: #fff;
- -webkit-transform: scale(0.5);
- -moz-transform: scale(0.5);
- -ms-transform: scale(0.5);
- -o-transform: scale(0.5);
- transform: scale(0.5);
- -webkit-transition: all 250ms ease-in-out;
- -moz-transition: all 250ms ease-in-out;
- -ms-transition: all 250ms ease-in-out;
- -o-transition: all 250ms ease-in-out;
- transition: all 250ms ease-in-out;
+.oo-ui-toggleSwitchWidget-grip {
+ top: 0.25em;
+ left: 0.25em;
+ width: 1.5em;
+ height: 1.5em;
+ margin-top: -1px;
+ border-radius: 1em;
+ box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
+ border: 1px #c9c9c9 solid;
+ -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ background: #eeeeee;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
+ background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
+ background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
+.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
+ border-color: #aaa;
}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: scale(1);
- -moz-transform: scale(1);
- -ms-transform: scale(1);
- -o-transform: scale(1);
- transform: scale(1);
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+ border-radius: 1em;
+ box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
+ -webkit-transition: opacity 200ms ease-in-out;
+ -moz-transition: opacity 200ms ease-in-out;
+ -ms-transition: opacity 200ms ease-in-out;
+ -o-transition: opacity 200ms ease-in-out;
+ transition: opacity 200ms ease-in-out;
+ background: #cde7f4;
+ filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
+ background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
+ background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+ background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
}
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #ccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+ opacity: 1;
}
-
-.oo-ui-messageDialog-content .oo-ui-window-body {
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+ left: 2.25em;
+ margin-left: -2px;
}
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
display: block;
- text-align: center;
- padding-top: 0.5em;
+ opacity: 0;
}
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000;
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+ left: 0.25em;
+ margin-left: 0;
}
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666;
+.oo-ui-popupWidget-popup {
+ position: absolute;
+ overflow: hidden;
+ z-index: 1;
}
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: left;
+.oo-ui-popupWidget-anchor {
+ display: none;
+ z-index: 1;
}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-right: solid 1px #e5e5e5;
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
+ display: block;
+ position: absolute;
+ background-repeat: no-repeat;
}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-right-width: 0;
+.oo-ui-popupWidget-head {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ float: right;
}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ float: left;
+ cursor: default;
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
- text-align: center;
- line-height: 3.4em;
- padding: 0 2em;
+.oo-ui-popupWidget-body {
+ clear: both;
+ overflow: hidden;
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
+.oo-ui-popupWidget-popup {
+ border: solid 1px #ccc;
+ border-radius: 0.25em;
+ background-color: #fff;
+ box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
+ margin-top: 7px;
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
+ width: 15px;
+ height: 8px;
+ margin-left: -7px;
+ background-image: /* @embed */ url(images/anchor.svg);
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
+.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
+ -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+ -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+ -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+ -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+ transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- font-weight: bold;
+.oo-ui-popupWidget-head {
+ height: 2.5em;
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ margin: 0.25em;
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ margin: 0.75em 1em;
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
+.oo-ui-popupWidget-body {
+ box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
+.oo-ui-popupWidget-body-padded {
+ padding: 0 1em;
}
-
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.4em;
+.oo-ui-popupButtonWidget {
+ position: relative;
}
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.4em;
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
+.oo-ui-popupButtonWidget .oo-ui-popupWidget {
+ position: absolute;
+ left: 1em;
+ cursor: auto;
}
-.oo-ui-processDialog-navigation {
+.oo-ui-textInputWidget {
position: relative;
- height: 3.4em;
- padding: 0 1em;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ width: 20em;
}
-.oo-ui-processDialog-location {
- padding: 0.25em 0;
- height: 1.9em;
- cursor: default;
- text-align: center;
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.9em;
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ top: 0;
+ height: 100%;
+ background-repeat: no-repeat;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
+ left: 0;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- padding-top: 0.75em;
- padding-bottom: 0.75em;
- min-width: 1.9em;
- min-height: 1.9em;
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+ right: 0;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
- line-height: 1.9em;
- padding: 0 1em;
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ padding: 0.5em;
+ font-size: 1em;
+ font-family: sans-serif;
+ background-color: #fff;
+ border: solid 1px #ccc;
+ box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+ border-radius: 0.25em;
+ -webkit-transition: border-color 200ms, box-shadow 200ms;
+ -moz-transition: border-color 200ms, box-shadow 200ms;
+ -ms-transition: border-color 200ms, box-shadow 200ms;
+ -o-transition: border-color 200ms, box-shadow 200ms;
+ transition: border-color 200ms, box-shadow 200ms;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
- position: absolute;
- margin-top: -0.125em;
+.oo-ui-textInputWidget-decorated input,
+.oo-ui-textInputWidget-decorated textarea {
+ padding-left: 2em;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
- margin: 0.75em 0 0.75em 0.75em;
+.oo-ui-textInputWidget-icon {
+ width: 2em;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- padding: 0;
- vertical-align: middle;
+.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
+ outline: none;
+ border-color: #a7dcff;
+ box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
+.oo-ui-textInputWidget input[readonly],
+.oo-ui-textInputWidget textarea[readonly] {
+ color: #777;
+ text-shadow: 0 1px 1px #fff;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
+.oo-ui-textInputWidget-pending input,
+.oo-ui-textInputWidget-pending textarea {
+ background-color: transparent;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
- margin: 0.75em;
+.oo-ui-textInputWidget.oo-ui-widget-disabled input,
+.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
+ color: #ccc;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #ddd;
+ background-color: #f3f3f3;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- /* Adjust for border so text aligns with title */
- margin: -1px;
+.oo-ui-textInputWidget .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget .oo-ui-indicatorElement-indicator {
+ opacity: 0.8;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
+.oo-ui-textInputWidget.oo-ui-iconElement input,
+.oo-ui-textInputWidget.oo-ui-iconElement textarea {
+ padding-left: 2em;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
+.oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ width: 2em;
+ background-position: right center;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- font-weight: bold;
+.oo-ui-textInputWidget.oo-ui-indicatorElement input,
+.oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
+ padding-right: 1.5em;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
+.oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ width: 1.5em;
+ background-position: left center;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
+.oo-ui-menuWidget {
+ position: absolute;
+ background: #fff;
+ margin-top: -1px;
+ border: solid 1px #ccc;
+ border-radius: 0 0 0.25em 0.25em;
+ box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
+.oo-ui-menuWidget input {
+ position: absolute;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ opacity: 0;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
+.oo-ui-menuItemWidget {
+ position: relative;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- left: 0.5em;
+.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
+ display: none;
}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-left: 2.25em;
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+ background-color: transparent;
}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- right: 0.5em;
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+ display: block;
}
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-right: 2.25em;
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+ background-color: transparent;
}
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
+.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
+ background-color: #e1f3ff;
}
-.oo-ui-processDialog-errors {
- background-color: rgba(255, 255, 255, 0.9);
- padding: 3em 3em 1.5em 3em;
- text-align: center;
+.oo-ui-menuSectionItemWidget {
+ cursor: default;
+ padding: 0.33em 0.75em;
+ color: #888;
}
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
+.oo-ui-inlineMenuWidget {
+ position: relative;
+ display: inline-block;
+ margin: 0.25em 0;
+ min-width: 20em;
}
-.oo-ui-processDialog-errors-title {
- font-size: 1.5em;
- color: #000;
- margin-bottom: 2em;
+.oo-ui-inlineMenuWidget-handle {
+ width: 100%;
+ display: inline-block;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-.oo-ui-processDialog-error {
- text-align: left;
- margin: 1em;
- padding: 1em;
- border: solid 1px #ff9e9e;
- background-color: #fff7f7;
- border-radius: 0.25em;
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
- color: #333;
+.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
+ z-index: 1;
+ width: 100%;
}
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- opacity: 0.8;
- width: 1.9em;
- height: 1.9em;
+.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+ cursor: default;
}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
- /*.oo-ui-transition(opacity 200ms);*/
+.oo-ui-inlineMenuWidget-handle {
+ height: 2.5em;
+ border: solid 1px rgba(0, 0, 0, 0.1);
+ border-radius: 0.25em;
}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon {
- opacity: 1;
+.oo-ui-inlineMenuWidget-handle:hover {
+ border-color: rgba(0, 0, 0, 0.2);
}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label {
- color: #000;
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
+ right: 0;
}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #333;
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+ left: 0.25em;
}
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #087ecc;
+.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+ line-height: 2.5em;
+ margin: 0 0.5em;
}
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #76ab36;
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+ top: 0;
+ width: 2.5em;
+ height: 2.5em;
+ opacity: 0.8;
}
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #d45353;
+.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+ color: #ccc;
+ text-shadow: 0 1px 1px #fff;
+ border-color: #ddd;
+ background-color: #f3f3f3;
}
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
opacity: 0.2;
}
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #ccc;
+.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
- margin: 0.1em 0;
- padding: 0.2em 0.8em;
- border-radius: 0.3em;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
- border: 1px #c9c9c9 solid;
- -webkit-transition: border-color 100ms ease-in-out;
- -moz-transition: border-color 100ms ease-in-out;
- -ms-transition: border-color 100ms ease-in-out;
- -o-transition: border-color 100ms ease-in-out;
- transition: border-color 100ms ease-in-out;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
+.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:focus {
- border-color: #aaa;
+.oo-ui-outlineItemWidget {
+ position: relative;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ font-size: 1.1em;
+ padding: 0.75em;
}
-.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
- color: black;
- border-color: #c9c9c9;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
+.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
}
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- margin-left: -0.5em;
- margin-right: -0.5em;
+.oo-ui-outlineItemWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ opacity: 0.5;
}
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- margin-left: -0.5em;
- margin-right: 0.3em;
+.oo-ui-outlineItemWidget-level-0 {
+ padding-left: 3.5em;
}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button {
- border: solid 1px #a6cee1;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
- background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
+.oo-ui-outlineItemWidget-level-0 .oo-ui-iconElement-icon {
+ left: 1em;
}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:focus {
- border-color: #9dc2d4;
+.oo-ui-outlineItemWidget-level-1 {
+ padding-left: 5em;
}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
- border: solid 1px #a6cee1;
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+.oo-ui-outlineItemWidget-level-1 .oo-ui-iconElement-icon {
+ left: 2.5em;
}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button {
- border: solid 1px #b8d892;
- background: #daf0be;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
- background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
+.oo-ui-outlineItemWidget-level-2 {
+ padding-left: 6.5em;
}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:focus {
- border-color: #adcb89;
+.oo-ui-outlineItemWidget-level-2 .oo-ui-iconElement-icon {
+ left: 4em;
}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
- border: solid 1px #b8d892;
- background: #daf0be;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
- background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
+.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
+ background-color: #a7dcff;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
}
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button {
- color: #d45353;
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-important {
+ font-weight: bold;
+}
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-placeholder {
+ font-style: italic;
}
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-iconElement-icon {
opacity: 0.5;
- box-shadow: none;
- color: #333;
- background: #eee;
- border-color: #ccc;
}
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:focus {
- border-color: #ccc;
- box-shadow: none;
+.oo-ui-outlineItemWidget.oo-ui-flaggedElement-empty .oo-ui-labelElement-label {
+ color: #777;
}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 1.5em;
+.oo-ui-outlineControlsWidget {
+ height: 3em;
+ background-color: #fff;
}
-.oo-ui-bookletLayout-outlinePanel {
- border-right: solid 1px #ddd;
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ float: left;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ float: left;
+ background-position: right center;
+ background-repeat: no-repeat;
}
-
-.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label {
- color: #ccc;
+.oo-ui-outlineControlsWidget-items {
+ float: left;
}
-
-.oo-ui-fieldsetLayout {
- border: none;
+.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
+ float: left;
}
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
- font-size: 1.5em;
+.oo-ui-outlineControlsWidget-movers {
+ float: right;
}
-
-.oo-ui-panelLayout-padded {
- padding: 1.25em;
+.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
+ float: right;
}
-
-.oo-ui-barToolGroup .oo-ui-tool {
- margin: -1px 0 -1px -1px;
- border: solid 1px transparent;
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ height: 2em;
+ margin: 0.5em;
+ padding: 0;
}
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
- border-top-left-radius: 0.25em;
- border-bottom-left-radius: 0.25em;
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ width: 1.5em;
+ height: 2em;
+ margin: 0.5em 0 0.5em 0.5em;
+ opacity: 0.2;
}
-.oo-ui-barToolGroup .oo-ui-tool:last-child {
- margin-right: -1px;
- border-top-right-radius: 0.25em;
- border-bottom-right-radius: 0.25em;
+.oo-ui-outlineControlsWidget-items {
+ margin-left: 0;
}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.8;
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+ z-index: 1;
+ min-width: 20em;
}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget-handle {
+ border: solid 1px rgba(0, 0, 0, 0.1);
+ border-radius: 0.25em;
}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget-handle:hover {
border-color: rgba(0, 0, 0, 0.2);
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-left-color: rgba(0, 0, 0, 0.1);
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator,
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget-empty .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ cursor: default;
opacity: 0.2;
}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.8;
+.oo-ui-searchWidget-query {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 1;
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ width: 100%;
}
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.2;
+.oo-ui-searchWidget-results {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
}
-
-.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-searchWidget-query {
+ height: 4em;
+ padding: 0 1em;
+ box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
}
-.oo-ui-listToolGroup .oo-ui-tool {
- border: solid 1px transparent;
- margin: -1px 0;
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ margin: 0.75em 0;
}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
- border-color: rgba(0, 0, 0, 0.1);
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+.oo-ui-searchWidget-results {
+ top: 4em;
+ padding: 1em;
+ line-height: 0;
}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-top-color: rgba(0, 0, 0, 0.1);
+.oo-ui-window {
+ line-height: 1em;
+ /* Content div takes focus when opened, so hide outline */
}
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-window-frame {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-window-frame > iframe {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.8;
+.oo-ui-window-content:focus {
+ outline: none;
}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 1;
+.oo-ui-window-head,
+.oo-ui-window-foot {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #ccc;
+.oo-ui-window-body {
+ margin: 0;
+ padding: 0;
+ background: none;
}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.2;
+.oo-ui-window-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
}
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
- color: #ccc;
+.oo-ui-window-isolated {
+ background-color: transparent;
+ background-image: none;
+ font-family: sans-serif;
+ font-size: 0.8em;
}
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
- opacity: 0.2;
+.oo-ui-dialog-content > .oo-ui-window-head,
+.oo-ui-dialog-content > .oo-ui-window-body,
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ position: absolute;
+ left: 0;
+ right: 0;
+ overflow: hidden;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
}
-
-.oo-ui-menuToolGroup {
- border-color: rgba(0, 0, 0, 0.1);
+.oo-ui-dialog-content > .oo-ui-window-head {
+ z-index: 1;
+ top: 0;
}
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-dialog-content > .oo-ui-window-body {
+ z-index: 2;
+ top: 0;
+ bottom: 0;
}
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.25);
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ z-index: 1;
+ bottom: 0;
}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- background-color: #e1f3ff;
+.oo-ui-dialog-content > .oo-ui-window-overlay {
+ z-index: 3;
}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #ccc;
+.oo-ui-dialog-content > .oo-ui-window-body {
+ box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.2;
+.oo-ui-messageDialog-actions-horizontal {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
- color: #ccc;
- border-color: rgba(0, 0, 0, 0.05);
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ display: table-cell;
+ width: 1%;
}
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
- opacity: 0.2;
+.oo-ui-messageDialog-actions-vertical {
+ display: block;
}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- opacity: 0.8;
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- border: solid 1px #ccc;
- background-color: white;
- box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+ position: relative;
+ text-align: center;
}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
- background: #f8fbfd;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ display: block;
}
-
-.oo-ui-optionWidget {
- padding: 0.5em 2em 0.5em 3em;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
+ position: relative;
+ top: auto;
+ bottom: auto;
+ display: inline;
+ white-space: nowrap;
}
-.oo-ui-optionWidget-highlighted {
- background-color: #e1f3ff;
+.oo-ui-messageDialog-content .oo-ui-window-body {
+ box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
}
-.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
- background-color: #a7dcff;
+.oo-ui-messageDialog-title,
+.oo-ui-messageDialog-message {
+ display: block;
+ text-align: center;
+ padding-top: 0.5em;
}
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
- background-color: #a7dcff;
+.oo-ui-messageDialog-title {
+ font-size: 1.5em;
+ line-height: 1em;
+ color: #000;
}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- color: #ccc;
+.oo-ui-messageDialog-message {
+ font-size: 0.9em;
+ line-height: 1.25em;
+ color: #666;
}
-
-.oo-ui-menuWidget {
- background: #fff;
- margin-top: -1px;
- border: solid 1px #ccc;
- border-radius: 0 0 0.25em 0.25em;
- box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
+.oo-ui-messageDialog-message-verbose {
+ font-size: 1.1em;
+ line-height: 1.5em;
+ text-align: left;
}
-
-.oo-ui-popupWidget-popup {
- border: solid 1px #ccc;
- border-radius: 0.25em;
- background-color: #fff;
- box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ border-right: solid 1px #e5e5e5;
}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- background-image: /* @embed */ url(images/anchor.svg);
- width: 15px;
- height: 8px;
- margin-left: -7px;
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
+ border-right-width: 0;
}
-.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
- -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
- transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ border-bottom: solid 1px #e5e5e5;
}
-.oo-ui-popupWidget-body {
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
+ border-bottom-width: 0;
}
-
-.oo-ui-buttonGroupWidget {
- display: inline-block;
- white-space: nowrap;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
+ text-align: center;
+ line-height: 3.4em;
+ padding: 0 2em;
}
-
-.oo-ui-buttonOptionWidget {
- padding: 0;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
+ background-color: rgba(0, 0, 0, 0.05);
}
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
- background-color: transparent;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
+ background-color: rgba(0, 0, 0, 0.1);
}
-
-.oo-ui-buttonSelectWidget {
- border-radius: 0.3em;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
+ background-color: rgba(8, 126, 204, 0.05);
}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
- border-radius: 0;
- margin-left: -1px;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+ background-color: rgba(8, 126, 204, 0.1);
}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
- margin-left: 0;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
+ font-weight: bold;
}
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+ background-color: rgba(118, 171, 54, 0.05);
}
-
-.oo-ui-comboBoxWidget-handle {
- border: solid 1px rgba(0, 0, 0, 0.1);
- border-radius: 0.25em;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+ background-color: rgba(118, 171, 54, 0.1);
}
-.oo-ui-comboBoxWidget-handle:hover {
- border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+ background-color: rgba(212, 83, 83, 0.05);
}
-.oo-ui-comboBoxWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator,
-.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- cursor: default;
- opacity: 0.2;
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+ background-color: rgba(212, 83, 83, 0.1);
}
-
-.oo-ui-inlineMenuWidget-handle {
- border: solid 1px rgba(0, 0, 0, 0.1);
- border-radius: 0.25em;
+.oo-ui-processDialog-location {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
-.oo-ui-inlineMenuWidget-handle:hover {
- border-color: rgba(0, 0, 0, 0.2);
+.oo-ui-processDialog-title {
+ display: inline;
+ padding: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
+ white-space: nowrap;
}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- opacity: 0.8;
+.oo-ui-processDialog-actions-safe,
+.oo-ui-processDialog-actions-primary {
+ position: absolute;
+ top: 0;
+ bottom: 0;
}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- color: #ccc;
- text-shadow: 0 1px 1px #fff;
- border-color: #ddd;
- background-color: #f3f3f3;
+.oo-ui-processDialog-actions-safe {
+ left: 0;
}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator {
- opacity: 0.2;
+.oo-ui-processDialog-actions-primary {
+ right: 0;
}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
+.oo-ui-processDialog-errors {
+ display: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 2;
+ overflow-x: hidden;
+ overflow-y: auto;
}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
- background-color: #e1f3ff;
+.oo-ui-processDialog-content .oo-ui-window-head {
+ height: 3.4em;
}
-
-.oo-ui-menuSectionItemWidget {
- padding: 0.33em 0.75em;
- color: #888;
+.oo-ui-processDialog-content .oo-ui-window-body {
+ top: 3.4em;
+ box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
}
-
-.oo-ui-outlineControlsWidget {
- background-color: #fff;
+.oo-ui-processDialog-navigation {
+ position: relative;
+ height: 3.4em;
+ padding: 0 1em;
}
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
- opacity: 0.2;
+.oo-ui-processDialog-location {
+ padding: 0.75em 0;
+ height: 1.9em;
+ cursor: default;
+ text-align: center;
}
-
-.oo-ui-outlineItemWidget {
- font-size: 1.1em;
+.oo-ui-processDialog-title {
+ font-weight: bold;
+ line-height: 1.9em;
}
-.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
- padding-right: 1.5em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ padding-top: 0.75em;
+ padding-bottom: 0.75em;
+ min-width: 1.9em;
+ min-height: 1.9em;
}
-.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- opacity: 0.5;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
+ line-height: 1.9em;
+ padding: 0 1em;
}
-.oo-ui-outlineItemWidget-level-0 {
- padding-left: 3.5em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
+ position: absolute;
+ margin-top: -0.125em;
}
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon {
- left: 1em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed {
+ margin: 0.75em 0 0.75em 0.75em;
}
-.oo-ui-outlineItemWidget-level-1 {
- padding-left: 5em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ padding: 0;
+ vertical-align: middle;
}
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon {
- left: 2.5em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
+ background-color: rgba(0, 0, 0, 0.05);
}
-.oo-ui-outlineItemWidget-level-2 {
- padding-left: 6.5em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
+ background-color: rgba(0, 0, 0, 0.1);
}
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon {
- left: 4em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed {
+ margin: 0.75em;
}
-.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
- background-color: #a7dcff;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ /* Adjust for border so text aligns with title */
+ margin: -1px;
}
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important {
- font-weight: bold;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
+ background-color: rgba(8, 126, 204, 0.05);
}
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder {
- font-style: italic;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+ background-color: rgba(8, 126, 204, 0.1);
}
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon {
- opacity: 0.5;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
+ font-weight: bold;
}
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label {
- color: #777;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+ background-color: rgba(118, 171, 54, 0.05);
}
-
-.oo-ui-searchWidget-query {
- box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+ background-color: rgba(118, 171, 54, 0.1);
}
-
-.oo-ui-textInputWidget {
- width: 20em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+ background-color: rgba(212, 83, 83, 0.05);
}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: 0.5em;
- font-size: 1em;
- font-family: sans-serif;
- background-color: #fff;
- border: solid 1px #ccc;
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
- border-radius: 0.25em;
- -webkit-transition: border-color 200ms, box-shadow 200ms;
- -moz-transition: border-color 200ms, box-shadow 200ms;
- -ms-transition: border-color 200ms, box-shadow 200ms;
- -o-transition: border-color 200ms, box-shadow 200ms;
- transition: border-color 200ms, box-shadow 200ms;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+ background-color: rgba(212, 83, 83, 0.1);
}
-.oo-ui-textInputWidget-decorated input,
-.oo-ui-textInputWidget-decorated textarea {
- padding-left: 2em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ left: 0.5em;
}
-.oo-ui-textInputWidget-icon {
- width: 2em;
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+ padding-left: 2.25em;
}
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
- outline: none;
- border-color: #a7dcff;
- box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ right: 0.5em;
}
-.oo-ui-textInputWidget input[readonly],
-.oo-ui-textInputWidget textarea[readonly] {
- color: #777;
- text-shadow: 0 1px 1px #fff;
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+ padding-right: 2.25em;
}
-.oo-ui-textInputWidget-pending input,
-.oo-ui-textInputWidget-pending textarea {
- background-color: transparent;
+.oo-ui-processDialog > .oo-ui-window-frame {
+ min-height: 5em;
}
-.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
- color: #ccc;
- text-shadow: 0 1px 1px #fff;
- border-color: #ddd;
- background-color: #f3f3f3;
+.oo-ui-processDialog-errors {
+ background-color: rgba(255, 255, 255, 0.9);
+ padding: 3em 3em 1.5em 3em;
+ text-align: center;
}
-.oo-ui-textInputWidget .oo-ui-iconedElement-icon,
-.oo-ui-textInputWidget .oo-ui-indicatedElement-indicator {
- opacity: 0.8;
+.oo-ui-processDialog-errors .oo-ui-buttonWidget {
+ margin: 2em 1em 2em 1em;
}
-.oo-ui-textInputWidget.oo-ui-iconedElement input,
-.oo-ui-textInputWidget.oo-ui-iconedElement textarea {
- padding-left: 2em;
+.oo-ui-processDialog-errors-title {
+ font-size: 1.5em;
+ color: #000;
+ margin-bottom: 2em;
}
-.oo-ui-textInputWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- width: 2em;
- background-position: right center;
+.oo-ui-processDialog-error {
+ text-align: left;
+ margin: 1em;
+ padding: 1em;
+ border: solid 1px #ff9e9e;
+ background-color: #fff7f7;
+ border-radius: 0.25em;
}
-.oo-ui-textInputWidget.oo-ui-indicatedElement input,
-.oo-ui-textInputWidget.oo-ui-indicatedElement textarea {
- padding-right: 1.5em;
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ position: fixed;
+ width: 0;
+ height: 0;
+ overflow: hidden;
}
-.oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- width: 1.5em;
- background-position: left center;
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
+ width: auto;
+ height: auto;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1em;
}
-
-.oo-ui-toggleSwitchWidget {
- border-radius: 1em;
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
- border: solid 1px #ccc;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
+ position: fixed;
+ right: 0;
+ left: 0;
+ margin: auto;
+ overflow: hidden;
+ max-width: 100%;
+ max-height: 100%;
}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- opacity: 0.5;
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
+ width: 100%;
+ height: 100%;
}
-.oo-ui-toggleSwitchWidget-grip {
- border-radius: 1em;
- box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
- border: 1px #c9c9c9 solid;
- background: #eeeeee;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
+.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ bottom: 0;
}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
- border-color: #aaa;
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ background-color: rgba(255, 255, 255, 0.5);
+ opacity: 0;
+ -webkit-transition: opacity 250ms ease-in-out;
+ -moz-transition: opacity 250ms ease-in-out;
+ -ms-transition: opacity 250ms ease-in-out;
+ -o-transition: opacity 250ms ease-in-out;
+ transition: opacity 250ms ease-in-out;
}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- border-radius: 1em;
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
- background: #cde7f4;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
- background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
+.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
+ top: 1em;
+ bottom: 1em;
+ background-color: #fff;
+ -webkit-transform: scale(0.5);
+ -moz-transform: scale(0.5);
+ -ms-transform: scale(0.5);
+ -o-transform: scale(0.5);
+ transform: scale(0.5);
+ -webkit-transition: all 250ms ease-in-out;
+ -moz-transition: all 250ms ease-in-out;
+ -ms-transition: all 250ms ease-in-out;
+ -o-transition: all 250ms ease-in-out;
+ transition: all 250ms ease-in-out;
}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
opacity: 1;
}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: block;
- opacity: 0;
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+ -webkit-transform: scale(1);
+ -moz-transform: scale(1);
+ -ms-transform: scale(1);
+ -o-transform: scale(1);
+ transform: scale(1);
+}
+.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
+ border: solid 1px #ccc;
+ border-radius: 0.5em;
+ box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
}
+++ /dev/null
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-.oo-ui-dialog-content > .oo-ui-window-head,
-.oo-ui-dialog-content > .oo-ui-window-body,
-.oo-ui-dialog-content > .oo-ui-window-foot {
- position: absolute;
- left: 0;
- right: 0;
- overflow: hidden;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-head {
- top: 0;
- z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-body {
- top: 0;
- bottom: 0;
- z-index: 2;
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-dialog-content > .oo-ui-window-foot {
- bottom: 0;
- z-index: 1;
-}
-
-.oo-ui-dialog-content > .oo-ui-window-overlay {
- z-index: 3;
-}
-
-.oo-ui-frame-content {
- font-family: sans-serif;
- font-size: 0.8em;
-}
-
-.oo-ui-toolbar-bar {
- background: #f8fbfd;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
- border-bottom: solid 1px #ccc;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
-}
-
-.oo-ui-toolbar-bar .oo-ui-toolbar-bar {
- background: none;
- border: none;
-}
-
-.oo-ui-toolbar-shadow {
- bottom: -9px;
- height: 9px;
- background-image: /* @embed */ url(images/toolbar-shadow.png);
- opacity: 0.125;
- -webkit-transition: opacity 500ms ease-in-out;
- -moz-transition: opacity 500ms ease-in-out;
- -ms-transition: opacity 500ms ease-in-out;
- -o-transition: opacity 500ms ease-in-out;
- transition: opacity 500ms ease-in-out;
-}
-
-.oo-ui-toolGroup {
- border: solid 1px transparent;
- border-radius: 0.25em;
- -webkit-transition: border-color 300ms ease-in-out;
- -moz-transition: border-color 300ms ease-in-out;
- -ms-transition: border-color 300ms ease-in-out;
- -o-transition: border-color 300ms ease-in-out;
- transition: border-color 300ms ease-in-out;
-}
-
-.oo-ui-toolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #000;
-}
-
-.oo-ui-window-content {
- background: transparent;
-}
-
-.oo-ui-window-overlay {
- font-family: sans-serif;
- font-size: 1em;
- line-height: 1.5em;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- background-color: rgba(255, 255, 255, 0.5);
- opacity: 0;
- -webkit-transition: opacity 250ms ease-in-out;
- -moz-transition: opacity 250ms ease-in-out;
- -ms-transition: opacity 250ms ease-in-out;
- -o-transition: opacity 250ms ease-in-out;
- transition: opacity 250ms ease-in-out;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
- top: 1em;
- bottom: 1em;
- background-color: #fff;
- -webkit-transform: scale(0.5);
- -moz-transform: scale(0.5);
- -ms-transform: scale(0.5);
- -o-transform: scale(0.5);
- transform: scale(0.5);
- -webkit-transition: all 250ms ease-in-out;
- -moz-transition: all 250ms ease-in-out;
- -ms-transition: all 250ms ease-in-out;
- -o-transition: all 250ms ease-in-out;
- transition: all 250ms ease-in-out;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
- opacity: 1;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
- -webkit-transform: scale(1);
- -moz-transform: scale(1);
- -ms-transform: scale(1);
- -o-transform: scale(1);
- transform: scale(1);
-}
-
-.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
- border: solid 1px #ccc;
- border-radius: 0.5em;
- box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
-}
-
-.oo-ui-messageDialog-content .oo-ui-window-body {
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-
-.oo-ui-messageDialog-title,
-.oo-ui-messageDialog-message {
- display: block;
- padding-top: 0.5em;
- text-align: center;
-}
-
-.oo-ui-messageDialog-title {
- font-size: 1.5em;
- line-height: 1em;
- color: #000;
-}
-
-.oo-ui-messageDialog-message {
- font-size: 0.9em;
- line-height: 1.25em;
- color: #666;
-}
-
-.oo-ui-messageDialog-message-verbose {
- font-size: 1.1em;
- line-height: 1.5em;
- text-align: right;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- border-left: solid 1px #e5e5e5;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
- border-left-width: 0;
-}
-
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- border-bottom: solid 1px #e5e5e5;
-}
-
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
- border-bottom-width: 0;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
- padding: 0 2em;
- line-height: 3.4em;
- text-align: center;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- font-weight: bold;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-content .oo-ui-window-head {
- height: 3.4em;
-}
-
-.oo-ui-processDialog-content .oo-ui-window-body {
- top: 3.4em;
- box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
-}
-
-.oo-ui-processDialog-navigation {
- position: relative;
- height: 3.4em;
- padding: 0 1em;
-}
-
-.oo-ui-processDialog-location {
- height: 1.9em;
- padding: 0.25em 0;
- text-align: center;
- cursor: default;
-}
-
-.oo-ui-processDialog-title {
- font-weight: bold;
- line-height: 1.9em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- min-width: 1.9em;
- min-height: 1.9em;
- padding-top: 0.75em;
- padding-bottom: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
- padding: 0 1em;
- line-height: 1.9em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
- position: absolute;
- margin-top: -0.125em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
- margin: 0.75em 0.75em 0.75em 0;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- padding: 0;
- vertical-align: middle;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
- background-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
- margin: 0.75em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- /* Adjust for border so text aligns with title */
-
- margin: -1px;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
- background-color: rgba(8, 126, 204, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
- background-color: rgba(8, 126, 204, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
- font-weight: bold;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
- background-color: rgba(118, 171, 54, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
- background-color: rgba(118, 171, 54, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
- background-color: rgba(212, 83, 83, 0.05);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
- background-color: rgba(212, 83, 83, 0.1);
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- right: 0.5em;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-right: 2.25em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
- left: 0.5em;
-}
-
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
- padding-left: 2.25em;
-}
-
-.oo-ui-processDialog > .oo-ui-window-frame {
- min-height: 5em;
-}
-
-.oo-ui-processDialog-errors {
- padding: 3em 3em 1.5em 3em;
- text-align: center;
- background-color: rgba(255, 255, 255, 0.9);
-}
-
-.oo-ui-processDialog-errors .oo-ui-buttonWidget {
- margin: 2em 1em 2em 1em;
-}
-
-.oo-ui-processDialog-errors-title {
- margin-bottom: 2em;
- font-size: 1.5em;
- color: #000;
-}
-
-.oo-ui-processDialog-error {
- padding: 1em;
- margin: 1em;
- text-align: right;
- background-color: #fff7f7;
- border: solid 1px #ff9e9e;
- border-radius: 0.25em;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
- color: #333;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- width: 1.9em;
- height: 1.9em;
- opacity: 0.8;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-
- /*.oo-ui-transition(opacity 200ms);*/
-
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon {
- opacity: 1;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label,
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label {
- color: #000;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #333;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #087ecc;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #76ab36;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #d45353;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- color: #ccc;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
- padding: 0.2em 0.8em;
- margin: 0.1em 0;
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
- background: #eeeeee;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
- border: 1px #c9c9c9 solid;
- border-radius: 0.3em;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- -webkit-transition: border-color 100ms ease-in-out;
- -moz-transition: border-color 100ms ease-in-out;
- -ms-transition: border-color 100ms ease-in-out;
- -o-transition: border-color 100ms ease-in-out;
- transition: border-color 100ms ease-in-out;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:focus {
- border-color: #aaa;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
- color: black;
- background: #eeeeee;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
- border-color: #c9c9c9;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- margin-left: -0.5em;
- margin-right: -0.5em;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- margin-left: 0.3em;
- margin-right: -0.5em;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button {
- background: #cde7f4;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
- background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
- border: solid 1px #a6cee1;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:focus {
- border-color: #9dc2d4;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
- background: #cde7f4;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- border: solid 1px #a6cee1;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button {
- background: #daf0be;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
- background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
- border: solid 1px #b8d892;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:focus {
- border-color: #adcb89;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
- background: #daf0be;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
- background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
- border: solid 1px #b8d892;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button {
- color: #d45353;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
- color: #333;
- background: #eee;
- border-color: #ccc;
- opacity: 0.5;
- box-shadow: none;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:focus {
- border-color: #ccc;
- box-shadow: none;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- padding: 1.5em;
-}
-
-.oo-ui-bookletLayout-outlinePanel {
- border-left: solid 1px #ddd;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-fieldLayout-disabled .oo-ui-labeledElement-label {
- color: #ccc;
-}
-
-.oo-ui-fieldsetLayout {
- border: none;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
- font-size: 1.5em;
-}
-
-.oo-ui-panelLayout-padded {
- padding: 1.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
- margin: -1px -1px -1px 0;
- border: solid 1px transparent;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool:first-child {
- border-bottom-right-radius: 0.25em;
- border-top-right-radius: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool:last-child {
- margin-left: -1px;
- border-top-left-radius: 0.25em;
- border-bottom-left-radius: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.8;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
- background: #f8fbfd;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- border-color: rgba(0, 0, 0, 0.2);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-right-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.8;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 1;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
- margin: -1px 0;
- border: solid 1px transparent;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
- background: #f8fbfd;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- border-color: rgba(0, 0, 0, 0.1);
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
- border-top-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.8;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 1;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #ccc;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-listToolGroup.oo-ui-widget-disabled {
- color: #ccc;
-}
-
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-menuToolGroup {
- border-color: rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
- border-color: rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
- background-color: #e1f3ff;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
- color: #ccc;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-menuToolGroup.oo-ui-widget-disabled {
- color: #ccc;
- border-color: rgba(0, 0, 0, 0.05);
-}
-
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
-.oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- opacity: 0.8;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- background-color: white;
- border: solid 1px #ccc;
- box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
- background: #f8fbfd;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
- box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-optionWidget {
- padding: 0.5em 3em 0.5em 2em;
-}
-
-.oo-ui-optionWidget-highlighted {
- background-color: #e1f3ff;
-}
-
-.oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
- background-color: #a7dcff;
-}
-
-.oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
- background-color: #a7dcff;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- color: #ccc;
-}
-
-.oo-ui-menuWidget {
- margin-top: -1px;
- background: #fff;
- border: solid 1px #ccc;
- border-radius: 0 0 0.25em 0.25em;
- box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-popupWidget-popup {
- background-color: #fff;
- border: solid 1px #ccc;
- border-radius: 0.25em;
- box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- width: 15px;
- height: 8px;
- margin-right: -7px;
- background-image: /* @embed */ url(images/anchor.svg);
-}
-
-.oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
- -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
- transition: width 100ms ease-in-out, height 100ms ease-in-out, right 100ms ease-in-out;
-}
-
-.oo-ui-popupWidget-body {
- box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
-}
-
-.oo-ui-buttonGroupWidget {
- display: inline-block;
- white-space: nowrap;
-}
-
-.oo-ui-buttonOptionWidget {
- padding: 0;
-}
-
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
- background-color: transparent;
-}
-
-.oo-ui-buttonSelectWidget {
- border-radius: 0.3em;
-}
-
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
- margin-right: -1px;
- border-radius: 0;
-}
-
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button {
- margin-right: 0;
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button {
- border-top-left-radius: 0.3em;
- border-bottom-left-radius: 0.3em;
-}
-
-.oo-ui-inlineMenuWidget-handle {
- border: solid 1px rgba(0, 0, 0, 0.1);
- border-radius: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle:hover {
- border-color: rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- opacity: 0.8;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- color: #ccc;
- text-shadow: 0 1px 1px #fff;
- background-color: #f3f3f3;
- border-color: #ddd;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator {
- opacity: 0.2;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
-.oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
- background-color: #e1f3ff;
-}
-
-.oo-ui-menuSectionItemWidget {
- padding: 0.33em 0.75em;
- color: #888;
-}
-
-.oo-ui-outlineControlsWidget {
- background-color: #fff;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
- opacity: 0.2;
-}
-
-.oo-ui-outlineItemWidget {
- font-size: 1.1em;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
- padding-left: 1.5em;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- opacity: 0.5;
-}
-
-.oo-ui-outlineItemWidget-level-0 {
- padding-right: 3.5em;
-}
-
-.oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon {
- right: 1em;
-}
-
-.oo-ui-outlineItemWidget-level-1 {
- padding-right: 5em;
-}
-
-.oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon {
- right: 2.5em;
-}
-
-.oo-ui-outlineItemWidget-level-2 {
- padding-right: 6.5em;
-}
-
-.oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon {
- right: 4em;
-}
-
-.oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
- text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
- background-color: #a7dcff;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-important {
- font-weight: bold;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder {
- font-style: italic;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon {
- opacity: 0.5;
-}
-
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label {
- color: #777;
-}
-
-.oo-ui-searchWidget-query {
- box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.2);
-}
-
-.oo-ui-textInputWidget {
- width: 20em;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- padding: 0.5em;
- font-family: sans-serif;
- font-size: 1em;
- background-color: #fff;
- border: solid 1px #ccc;
- border-radius: 0.25em;
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
- -webkit-transition: border-color 200ms, box-shadow 200ms;
- -moz-transition: border-color 200ms, box-shadow 200ms;
- -ms-transition: border-color 200ms, box-shadow 200ms;
- -o-transition: border-color 200ms, box-shadow 200ms;
- transition: border-color 200ms, box-shadow 200ms;
-}
-
-.oo-ui-textInputWidget-decorated input,
-.oo-ui-textInputWidget-decorated textarea {
- padding-right: 2em;
-}
-
-.oo-ui-textInputWidget-icon {
- width: 2em;
-}
-
-.oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
- border-color: #a7dcff;
- outline: none;
- box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
-}
-
-.oo-ui-textInputWidget input[readonly],
-.oo-ui-textInputWidget textarea[readonly] {
- color: #777;
- text-shadow: 0 1px 1px #fff;
-}
-
-.oo-ui-textInputWidget-pending input,
-.oo-ui-textInputWidget-pending textarea {
- background-color: transparent;
-}
-
-.oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
- color: #ccc;
- text-shadow: 0 1px 1px #fff;
- background-color: #f3f3f3;
- border-color: #ddd;
-}
-
-.oo-ui-toggleSwitchWidget {
- background: #eeeeee;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
- background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
- background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
- border: solid 1px #ccc;
- border-radius: 1em;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
- box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- opacity: 0.5;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
- background: #eeeeee;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
- background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
- background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
- border: 1px #c9c9c9 solid;
- border-radius: 1em;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
- box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
-.oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
- border-color: #aaa;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- background: #cde7f4;
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
- background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
- border-radius: 1em;
- filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
- opacity: 1;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: block;
- opacity: 0;
-}
\ No newline at end of file
--- /dev/null
+/*!
+ * OOjs UI v0.1.0-pre (72f047e5d8)
+ * https://www.mediawiki.org/wiki/OOjs_UI
+ *
+ * Copyright 2011–2014 OOjs Team and other contributors.
+ * Released under the MIT license
+ * http://oojs.mit-license.org
+ *
+ * Date: 2014-09-06T00:15:06Z
+ */
+/*
+ * Blank theme mixins.
+ *
+ * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
+ * additional rules to the base styles.
+ */
+/*
+ * Base styles.
+ *
+ * Themes should include this file after defining their variables and mixins.
+ */
+/* @noflip */
+.oo-ui-rtl {
+ direction: rtl;
+}
+/* @noflip */
+.oo-ui-ltr {
+ direction: ltr;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button {
+ cursor: pointer;
+ display: inline-block;
+ vertical-align: middle;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: none;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ display: none;
+}
+.oo-ui-buttonElement.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-buttonElement-frameless {
+ display: inline-block;
+ position: relative;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
+ display: inline-block;
+ vertical-align: top;
+ text-align: center;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
+ cursor: default;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-left: 0;
+}
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+ margin-right: -0.75em;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-iconElement .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ width: 3.35em;
+ height: 3.35em;
+ background-size: 2em auto;
+}
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ margin-left: 0.25em;
+}
+.oo-ui-buttonElement-framed > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+ line-height: 1.9em;
+}
+.oo-ui-clippableElement-clippable {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
+ overflow-y: hidden;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
+ padding: 2em;
+}
+.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 3em;
+ overflow-y: auto;
+}
+.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
+ padding: 0 0 1em;
+}
+.oo-ui-fieldLayout {
+ margin-bottom: 1em;
+}
+.oo-ui-fieldLayout:before,
+.oo-ui-fieldLayout:after {
+ content: " ";
+ display: table;
+}
+.oo-ui-fieldLayout:after {
+ clear: both;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+ display: block;
+ float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+ display: block;
+ float: left;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+ text-align: right;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
+ z-index: 1;
+}
+.oo-ui-fieldLayout:last-child {
+ margin-bottom: 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labelElement-label,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labelElement-label {
+ padding-top: 0.5em;
+ margin-right: 5%;
+ width: 35%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
+ width: 60%;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labelElement-label {
+ padding: 0.75em 0.5em 0.5em 0.5em;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labelElement-label {
+ padding: 0.5em 0;
+}
+.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+ margin-top: 0.25em;
+}
+.oo-ui-fieldLayout-disabled .oo-ui-labelElement-label {
+ color: #ccc;
+}
+.oo-ui-fieldsetLayout {
+ position: relative;
+ margin: 0;
+ padding: 0;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ display: block;
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-fieldsetLayout.oo-ui-labelElement > .oo-ui-labelElement-label {
+ display: inline-block;
+}
+.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
+ margin-top: 2em;
+}
+.oo-ui-fieldsetLayout > .oo-ui-labelElement-label {
+ margin-bottom: 0.5em;
+ padding: 0.25em 0;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-labelElement-label {
+ padding-left: 1.75em;
+ line-height: 1.33em;
+}
+.oo-ui-fieldsetLayout.oo-ui-iconElement > .oo-ui-iconElement-icon {
+ left: 0;
+ top: 0.25em;
+ width: 2em;
+ height: 2em;
+}
+.oo-ui-gridLayout {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-panelLayout {
+ position: relative;
+ padding: 1em 3.35em;
+}
+.oo-ui-panelLayout-scrollable {
+ overflow-y: auto;
+}
+.oo-ui-panelLayout-expanded {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+}
+.oo-ui-stackLayout > .oo-ui-panelLayout {
+ display: none;
+}
+.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
+ display: block;
+ position: relative;
+}
+.oo-ui-popupTool .oo-ui-popupWidget-popup,
+.oo-ui-popupTool .oo-ui-popupWidget-anchor {
+ z-index: 4;
+}
+.oo-ui-popupTool .oo-ui-popupWidget {
+ margin-left: 1.25em;
+ font-size: 0.8em;
+}
+.oo-ui-toolGroup {
+ display: inline-block;
+ vertical-align: middle;
+ margin: 0.3em;
+}
+.oo-ui-toolGroup-empty {
+ display: none;
+}
+.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-barToolGroup > .oo-ui-iconElement-icon,
+.oo-ui-barToolGroup > .oo-ui-labelElement-label {
+ display: none;
+}
+.oo-ui-barToolGroup .oo-ui-tool {
+ display: inline-block;
+ position: relative;
+ vertical-align: top;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link {
+ display: block;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ display: block;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ display: none;
+}
+.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-barToolGroup .oo-ui-tool-title,
+.oo-ui-barToolGroup .oo-ui-tool-accel {
+ display: none;
+}
+.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
+ cursor: pointer;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link {
+ height: 1.5em;
+ padding: 0.25em;
+}
+.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 1.5em;
+ width: 1.5em;
+}
+.oo-ui-popupToolGroup {
+ position: relative;
+ height: 2em;
+ min-width: 2.5em;
+}
+.oo-ui-popupToolGroup-handle {
+ display: block;
+ cursor: pointer;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
+ cursor: default;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ display: none;
+ position: absolute;
+ z-index: 4;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconElement-icon {
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
+ display: block;
+}
+.oo-ui-popupToolGroup-left > .oo-ui-toolGroup-tools {
+ left: 0;
+}
+.oo-ui-popupToolGroup-right > .oo-ui-toolGroup-tools {
+ right: 0;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-accel {
+ display: none;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement.oo-ui-iconElement {
+ min-width: 3.5em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ top: 0;
+ width: 2em;
+ height: 2em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
+ left: 0.25em;
+}
+.oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ line-height: 2.6em;
+ font-size: 0.8em;
+ margin: 0 1em;
+}
+.oo-ui-popupToolGroup-header {
+ line-height: 2.6em;
+ font-size: 0.8em;
+ margin: 0 0.6em;
+ font-weight: bold;
+}
+.oo-ui-popupToolGroup.oo-ui-iconElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+}
+.oo-ui-popupToolGroup.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+ margin-right: 2.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+ top: 2em;
+ margin: 0 -1px;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ height: 2em;
+ width: 2em;
+ margin-right: 0.25em;
+}
+.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
+ line-height: 2em;
+ font-size: 0.8em;
+}
+.oo-ui-listToolGroup .oo-ui-tool {
+ display: inline-block;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+ display: block;
+ cursor: pointer;
+ white-space: nowrap;
+}
+.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
+ padding: 0.25em;
+}
+.oo-ui-listToolGroup .oo-ui-tool-link {
+ padding-right: 0.5em;
+}
+.oo-ui-menuToolGroup .oo-ui-tool {
+ display: block;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+ display: block;
+ cursor: pointer;
+ white-space: nowrap;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: none;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
+ background-image: /* @embed */ url(images/icons/check.svg);
+}
+.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
+ cursor: default;
+}
+.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
+ min-width: 8em;
+}
+.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
+ padding: 0.25em 0 0.25em 0;
+}
+.oo-ui-menuToolGroup .oo-ui-tool-link {
+ padding: 0 1em 0 0.25em;
+}
+.oo-ui-toolbar {
+ clear: both;
+}
+.oo-ui-toolbar-bar {
+ line-height: 1em;
+}
+.oo-ui-toolbar-actions {
+ float: right;
+}
+.oo-ui-toolbar-tools {
+ float: left;
+}
+.oo-ui-toolbar-tools,
+.oo-ui-toolbar-actions,
+.oo-ui-toolbar-shadow {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-toolbar-actions .oo-ui-popupWidget {
+ -webkit-touch-callout: default;
+ -webkit-user-select: all;
+ -moz-user-select: all;
+ -ms-user-select: all;
+ user-select: all;
+}
+.oo-ui-toolbar-shadow {
+ background-position: left top;
+ background-repeat: repeat-x;
+ position: absolute;
+ width: 100%;
+ pointer-events: none;
+}
+.oo-ui-selectWidget {
+ margin: 0;
+ padding: 0;
+}
+.oo-ui-optionWidget {
+ position: relative;
+ display: block;
+ cursor: pointer;
+ padding: 0.8em 1em 0.8em 3.35em;
+ border: none;
+ border-bottom: 1px solid #dddddd;
+ font-weight: bold;
+}
+.oo-ui-optionWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+ display: block;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+}
+.oo-ui-optionWidget .oo-ui-labelElement-label {
+ line-height: 1.5em;
+}
+.oo-ui-optionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
+ padding-right: 1.5em;
+}
+.oo-ui-optionWidget-level-0 {
+ padding-left: 3.5em;
+}
+.oo-ui-optionWidget-level-0 .oo-ui-iconElement-icon {
+ left: 1em;
+}
+.oo-ui-optionWidget-level-1 {
+ padding-left: 5em;
+}
+.oo-ui-optionWidget-level-1 .oo-ui-iconElement-icon {
+ left: 2.5em;
+}
+.oo-ui-optionWidget-level-2 {
+ padding-left: 6.5em;
+}
+.oo-ui-optionWidget-level-2 .oo-ui-iconElement-icon {
+ left: 4em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ background-repeat: no-repeat;
+ background-position: center center;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ top: 50%;
+ width: 2em;
+ height: 2em;
+ margin-top: -1em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon {
+ left: 0.5em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
+ right: 0.5em;
+}
+.oo-ui-buttonSelectWidget {
+ display: inline-block;
+ white-space: nowrap;
+}
+.oo-ui-buttonOptionWidget {
+ display: inline-block;
+ padding: 0;
+ background-color: transparent;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ position: relative;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ position: static;
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
+ height: 1.9em;
+}
+.oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+ height: 1.9em;
+ margin-top: 0;
+}
+.oo-ui-labelWidget {
+ display: inline-block;
+ padding: 0.5em 0;
+}
+.oo-ui-iconWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 1.9em;
+ width: 1.9em;
+ opacity: 0.8;
+}
+.oo-ui-iconWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-indicatorWidget {
+ display: inline-block;
+ vertical-align: middle;
+ background-position: center center;
+ background-repeat: no-repeat;
+ line-height: 2.5em;
+ height: 1.9em;
+ width: 1.9em;
+ opacity: 0.8;
+}
+.oo-ui-indicatorWidget.oo-ui-widget-disabled {
+ opacity: 0.2;
+}
+.oo-ui-buttonWidget {
+ display: inline-block;
+ vertical-align: middle;
+}
+.oo-ui-buttonGroupWidget {
+ border-radius: 0.3em;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ border-radius: 0;
+ margin-bottom: -1px;
+ margin-left: -1px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+ border-bottom-left-radius: 0.3em;
+ border-top-left-radius: 0.3em;
+ margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
+ border-bottom-right-radius: 0.3em;
+ border-top-right-radius: 0.3em;
+}
+.oo-ui-toggleSwitchWidget {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ overflow: hidden;
+ cursor: pointer;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transform: translateZ(0px);
+ -moz-transform: translateZ(0px);
+ -ms-transform: translateZ(0px);
+ -o-transform: translateZ(0px);
+ transform: translateZ(0px);
+ height: 2em;
+ width: 4em;
+}
+.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
+ cursor: default;
+}
+.oo-ui-toggleSwitchWidget-grip {
+ position: absolute;
+ display: block;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
+ display: none;
+}
+.oo-ui-toggleSwitchWidget-grip {
+ top: 0.25em;
+ left: 0.25em;
+ width: 1.5em;
+ height: 1.5em;
+ margin-top: -1px;
+ -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+ transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+}
+.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+ -webkit-transition: opacity 200ms ease-in-out;
+ -moz-transition: opacity 200ms ease-in-out;
+ -ms-transition: opacity 200ms ease-in-out;
+ -o-transition: opacity 200ms ease-in-out;
+ transition: opacity 200ms ease-in-out;
+}
+.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
+ left: 2.25em;
+ margin-left: -2px;
+}
+.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
+ left: 0.25em;
+ margin-left: 0;
+}
+.oo-ui-popupWidget-popup {
+ position: absolute;
+ overflow: hidden;
+ z-index: 1;
+}
+.oo-ui-popupWidget-anchor {
+ display: none;
+ z-index: 1;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
+ display: block;
+ position: absolute;
+ background-repeat: no-repeat;
+}
+.oo-ui-popupWidget-head {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ float: right;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ float: left;
+ cursor: default;
+}
+.oo-ui-popupWidget-body {
+ clear: both;
+ overflow: hidden;
+}
+.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
+ margin-top: 7px;
+}
+.oo-ui-popupWidget-head {
+ height: 2.5em;
+}
+.oo-ui-popupWidget-head .oo-ui-buttonWidget {
+ margin: 0.25em;
+}
+.oo-ui-popupWidget-head .oo-ui-labelElement-label {
+ margin: 0.75em 1em;
+}
+.oo-ui-popupWidget-body-padded {
+ padding: 0 1em;
+}
+.oo-ui-popupButtonWidget {
+ position: relative;
+}
+.oo-ui-popupButtonWidget .oo-ui-popupWidget {
+ position: absolute;
+ left: 1em;
+ cursor: auto;
+}
+.oo-ui-lookupInputWidget-menu {
+ background-color: #fff;
+}
+.oo-ui-textInputWidget {
+ position: relative;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ display: inline-block;
+ width: 100%;
+ resize: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon,
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+ position: absolute;
+ top: 0;
+ height: 100%;
+ background-repeat: no-repeat;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-textInputWidget > .oo-ui-iconElement-icon {
+ left: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-textInputWidget input,
+.oo-ui-textInputWidget textarea {
+ padding: .8em 1em;
+}
+.oo-ui-menuWidget {
+ position: absolute;
+}
+.oo-ui-menuWidget input {
+ position: absolute;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+ opacity: 0;
+}
+.oo-ui-menuItemWidget {
+ position: relative;
+}
+.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
+ display: none;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+ background-color: transparent;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+ display: block;
+}
+.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
+ background: #347bff;
+ color: #ffffff;
+}
+.oo-ui-menuItemWidget .oo-ui-iconElement-icon {
+ background-size: 24px auto;
+}
+.oo-ui-menuSectionItemWidget {
+ cursor: default;
+ font-weight: normal;
+ color: #777777;
+ border: none;
+}
+.oo-ui-inlineMenuWidget {
+ position: relative;
+ display: inline-block;
+ margin: 0.25em 0;
+ min-width: 20em;
+}
+.oo-ui-inlineMenuWidget-handle {
+ width: 100%;
+ display: inline-block;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+ position: absolute;
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
+ z-index: 1;
+ width: 100%;
+}
+.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
+ cursor: default;
+}
+.oo-ui-inlineMenuWidget-handle {
+ height: 2.5em;
+}
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator,
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+ top: 0;
+ width: 2.5em;
+ height: 2.5em;
+}
+.oo-ui-inlineMenuWidget-handle .oo-ui-indicatorElement-indicator {
+ right: 0;
+}
+.oo-ui-inlineMenuWidget-handle .oo-ui-iconElement-icon {
+ left: 0.25em;
+}
+.oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+ line-height: 2.5em;
+ margin: 0 0.5em;
+}
+.oo-ui-inlineMenuWidget.oo-ui-iconElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+ margin-left: 3em;
+}
+.oo-ui-inlineMenuWidget.oo-ui-indicatorElement .oo-ui-inlineMenuWidget-handle .oo-ui-labelElement-label {
+ margin-right: 2em;
+}
+.oo-ui-outlineItemWidget {
+ position: relative;
+ cursor: pointer;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ padding: 0.75em;
+}
+.oo-ui-outlineControlsWidget {
+ height: 3em;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ float: left;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ float: left;
+ background-position: right center;
+ background-repeat: no-repeat;
+}
+.oo-ui-outlineControlsWidget-items {
+ float: left;
+}
+.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
+ float: left;
+}
+.oo-ui-outlineControlsWidget-movers {
+ float: right;
+}
+.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
+ float: right;
+}
+.oo-ui-outlineControlsWidget-items,
+.oo-ui-outlineControlsWidget-movers {
+ height: 2em;
+ margin: 0.5em;
+ padding: 0;
+}
+.oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
+ width: 1.5em;
+ height: 2em;
+ margin: 0.5em 0 0.5em 0.5em;
+}
+.oo-ui-outlineControlsWidget-items {
+ margin-left: 0;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+ z-index: 1;
+}
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget > .oo-ui-selectWidget {
+ min-width: 20em;
+}
+.oo-ui-searchWidget-query {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ width: 100%;
+}
+.oo-ui-searchWidget-results {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.oo-ui-searchWidget-query {
+ height: 4em;
+ padding: 0 1em;
+}
+.oo-ui-searchWidget-query .oo-ui-textInputWidget {
+ margin: 0.75em 0;
+}
+.oo-ui-searchWidget-results {
+ top: 4em;
+ padding: 1em;
+ line-height: 0;
+}
+.oo-ui-window {
+ line-height: 1em;
+ /* Content div takes focus when opened, so hide outline */
+}
+.oo-ui-window-frame {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-window-frame > iframe {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ padding: 0;
+}
+.oo-ui-window-content:focus {
+ outline: none;
+}
+.oo-ui-window-head,
+.oo-ui-window-foot {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.oo-ui-window-body {
+ margin: 0;
+ padding: 0;
+ background: none;
+}
+.oo-ui-window-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-head,
+.oo-ui-dialog-content > .oo-ui-window-body,
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ position: absolute;
+ left: 0;
+ right: 0;
+ overflow: hidden;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-dialog-content > .oo-ui-window-head {
+ z-index: 1;
+ top: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-body {
+ z-index: 2;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-foot {
+ z-index: 1;
+ bottom: 0;
+}
+.oo-ui-dialog-content > .oo-ui-window-overlay {
+ z-index: 3;
+}
+.oo-ui-messageDialog-actions-horizontal {
+ display: table;
+ table-layout: fixed;
+ width: 100%;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ display: table-cell;
+ width: 1%;
+}
+.oo-ui-messageDialog-actions-vertical {
+ display: block;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget {
+ position: relative;
+ text-align: center;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ display: block;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
+ position: relative;
+ top: auto;
+ bottom: auto;
+ display: inline;
+ white-space: nowrap;
+}
+.oo-ui-messageDialog-title,
+.oo-ui-messageDialog-message {
+ display: block;
+ text-align: center;
+ padding-top: 0.5em;
+}
+.oo-ui-messageDialog-title {
+ font-size: 1.5em;
+ line-height: 1em;
+ color: #000;
+}
+.oo-ui-messageDialog-message {
+ font-size: 0.9em;
+ line-height: 1.25em;
+ color: #666;
+}
+.oo-ui-messageDialog-message-verbose {
+ font-size: 1.1em;
+ line-height: 1.5em;
+ text-align: left;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
+ border-right: solid 1px #e5e5e5;
+}
+.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
+ border-right-width: 0;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
+ border-bottom: solid 1px #e5e5e5;
+}
+.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
+ border-bottom-width: 0;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labelElement-label {
+ text-align: center;
+ line-height: 3.4em;
+ padding: 0 2em;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
+ background-color: rgba(0, 0, 0, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:hover {
+ background-color: rgba(8, 126, 204, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary:active {
+ background-color: rgba(8, 126, 204, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
+ font-weight: bold;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
+ background-color: rgba(118, 171, 54, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+ background-color: rgba(118, 171, 54, 0.1);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
+ background-color: rgba(212, 83, 83, 0.05);
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+ background-color: rgba(212, 83, 83, 0.1);
+}
+.oo-ui-processDialog-location {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.oo-ui-processDialog-title {
+ display: inline;
+ padding: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
+ white-space: nowrap;
+}
+.oo-ui-processDialog-actions-safe,
+.oo-ui-processDialog-actions-primary {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-processDialog-actions-safe {
+ left: 0;
+}
+.oo-ui-processDialog-actions-primary {
+ right: 0;
+}
+.oo-ui-processDialog-errors {
+ display: none;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 2;
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.oo-ui-processDialog-content .oo-ui-window-head {
+ height: 3.35em;
+ border-bottom: 1px solid #dddddd;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+.oo-ui-processDialog-content .oo-ui-window-body {
+ top: 3.35em;
+ padding: 2em 0;
+}
+.oo-ui-processDialog-navigation {
+ position: relative;
+ height: 3.35em;
+ padding: 0 1em;
+}
+.oo-ui-processDialog-location {
+ padding: 0.75em 0;
+ height: 1.85em;
+ cursor: default;
+ text-align: center;
+}
+.oo-ui-processDialog-title {
+ font-weight: bold;
+ line-height: 1.85em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ padding: 0.35em 0.75em;
+ min-width: 1.85em;
+ min-height: 1.85em;
+ border: 1px solid #dddddd;
+ border-radius: 4px;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labelElement-label {
+ line-height: 1.85em;
+ padding: 0 1em;
+ font-weight: bold;
+ color: #777777;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconElement-icon,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconElement-icon {
+ position: absolute;
+ margin-top: -0.125em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
+ vertical-align: middle;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button {
+ border: 1px solid transparent;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggedElement-destructive .oo-ui-labelElement-label {
+ color: #d11d13;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonElement-button {
+ padding: 0.75em 0.35em;
+ border: none;
+ border-radius: 0;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-buttonElement-button {
+ background-color: #347bff;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label,
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggedElement-primary .oo-ui-labelElement-label {
+ color: #ffffff;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ left: 0.5em;
+}
+.oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+ padding-left: 2.25em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
+ right: 0.5em;
+}
+.oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconElement .oo-ui-labelElement-label {
+ padding-right: 2.25em;
+}
+.oo-ui-processDialog-actions-other {
+ position: absolute;
+ bottom: 1em;
+}
+.oo-ui-processDialog > .oo-ui-window-frame {
+ min-height: 5em;
+}
+.oo-ui-processDialog-errors {
+ background-color: rgba(255, 255, 255, 0.9);
+ padding: 3em 3em 1.5em 3em;
+ text-align: center;
+}
+.oo-ui-processDialog-errors .oo-ui-buttonWidget {
+ margin: 2em 1em 2em 1em;
+}
+.oo-ui-processDialog-errors-title {
+ font-size: 1.5em;
+ color: #000;
+ margin-bottom: 2em;
+}
+.oo-ui-processDialog-error {
+ text-align: left;
+ margin: 1em;
+ padding: 1em;
+ border: solid 1px #ff9e9e;
+ background-color: #fff7f7;
+ border-radius: 0.25em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ position: fixed;
+ width: 0;
+ height: 0;
+ overflow: hidden;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
+ width: auto;
+ height: auto;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 1em;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
+ position: fixed;
+ right: 0;
+ left: 0;
+ margin: auto;
+ overflow: hidden;
+ max-width: 100%;
+ max-height: 100%;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
+ width: 100%;
+ height: 100%;
+}
+.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ bottom: 0;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog {
+ background-color: rgba(255, 255, 255, 0.5);
+ opacity: 0;
+ -webkit-transition: opacity 250ms ease-in-out;
+ -moz-transition: opacity 250ms ease-in-out;
+ -ms-transition: opacity 250ms ease-in-out;
+ -o-transition: opacity 250ms ease-in-out;
+ transition: opacity 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
+ top: 0;
+ bottom: 0;
+ background-color: #fff;
+ -webkit-transform: translate3d(0, -200%, 0);
+ -moz-transform: translate3d(0, -200%, 0);
+ -ms-transform: translate3d(0, -200%, 0);
+ -o-transform: translate3d(0, -200%, 0);
+ transform: translate3d(0, -200%, 0);
+ -webkit-transition: transform 250ms ease-in-out;
+ -moz-transition: transform 250ms ease-in-out;
+ -ms-transition: transform 250ms ease-in-out;
+ -o-transition: transform 250ms ease-in-out;
+ transition: transform 250ms ease-in-out;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
+ opacity: 1;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
+ -webkit-transform: translate3d(0, 0, 0);
+ -moz-transform: translate3d(0, 0, 0);
+ -ms-transform: translate3d(0, 0, 0);
+ -o-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
+ border: solid 1px #ccc;
+ border-radius: 0.5em;
+ box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
+}
+
+/*
+ * Blank theme mixins.
+ *
+ * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
+ * additional rules to the base styles.
+ */
+.oo-ui-icon-check {
+ background-image: /* @embed */ url(themes/minerva/images/icons/check.png);
+ background: #347bff;
+}
/*!
- * OOjs UI v0.1.0-pre (d6008381aa)
+ * OOjs UI v0.1.0-pre (72f047e5d8)
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2014 OOjs Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2014-08-21T23:45:56Z
+ * Date: 2014-09-06T00:15:06Z
*/
( function ( OO ) {
styleText = '@import url(' + styleNode.href + ');';
} else {
// Internal stylesheet; just copy the text
- styleText = styleNode.textContent;
+ // For IE10 we need to fall back to .cssText, BUT that's undefined in
+ // other browsers, so fall back to '' rather than 'undefined'
+ styleText = styleNode.textContent || parentDoc.styleSheets[i].cssText || '';
}
// Create a node with a unique ID that we're going to monitor to see when the CSS
/* Methods */
+/**
+ * Handle mouse down events.
+ *
+ * @param {jQuery.Event} e Mouse down event
+ */
+OO.ui.Window.prototype.onMouseDown = function ( e ) {
+ // Prevent clicking on the click-block from stealing focus
+ if ( e.target === this.$element[0] ) {
+ return false;
+ }
+};
+
/**
* Check if window has been initialized.
*
this.$foot = this.$( '<div>' );
this.$overlay = this.$( '<div>' );
+ // Events
+ this.$element.on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
+
// Initialization
this.$head.addClass( 'oo-ui-window-head' );
this.$body.addClass( 'oo-ui-window-body' );
doc.write(
'<!doctype html>' +
'<html>' +
- '<body class="oo-ui-window-isolated oo-ui-window-content oo-ui-' + this.dir + '"' +
+ '<body class="oo-ui-window-isolated oo-ui-' + this.dir + '"' +
' style="direction:' + this.dir + ';" dir="' + this.dir + '">' +
+ '<div class="oo-ui-window-content"></div>' +
'</body>' +
'</html>'
);
* @abstract
* @class
* @extends OO.ui.Window
- * @mixins OO.ui.LabeledElement
*
* @constructor
* @param {Object} [config] Configuration options
this.onWindowMouseWheelHandler = OO.ui.bind( this.onWindowMouseWheel, this );
this.onDocumentKeyDownHandler = OO.ui.bind( this.onDocumentKeyDown, this );
- // Events
- this.$element.on( 'mousedown', false );
-
// Initialization
this.$element
.addClass( 'oo-ui-windowManager' )
*
* @param {OO.ui.Window|string} win Window object or symbolic name of window to close
* @param {Object} [data] Window closing data
- * @return {jQuery.Promise} Promise resolved when window is done opening; see {@link #event-closing}
+ * @return {jQuery.Promise} Promise resolved when window is done closing; see {@link #event-closing}
* for more details about the `closing` promise
* @throws {Error} If no window by that name is being managed
* @fires closing
* @class
*
* @constructor
- * @param {jQuery} $button Button node, assigned to #$button
* @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$button] Button node, assigned to #$button, omit to use a generated `<a>`
* @cfg {boolean} [framed=true] Render button with a frame
* @cfg {number} [tabIndex=0] Button's tab index, use null to have no tabIndex
* @cfg {string} [accessKey] Button's access key
*/
-OO.ui.ButtonedElement = function OoUiButtonedElement( $button, config ) {
+OO.ui.ButtonElement = function OoUiButtonElement( config ) {
// Configuration initialization
config = config || {};
// Properties
- this.$button = $button;
- this.tabIndex = null;
+ this.$button = null;
this.framed = null;
+ this.tabIndex = null;
+ this.accessKey = null;
this.active = false;
this.onMouseUpHandler = OO.ui.bind( this.onMouseUp, this );
-
- // Events
- this.$button.on( 'mousedown', OO.ui.bind( this.onMouseDown, this ) );
+ this.onMouseDownHandler = OO.ui.bind( this.onMouseDown, this );
// Initialization
- this.$element.addClass( 'oo-ui-buttonedElement' );
- this.$button
- .addClass( 'oo-ui-buttonedElement-button' )
- .attr( 'role', 'button' );
+ this.$element.addClass( 'oo-ui-buttonElement' );
+ this.toggleFramed( config.framed === undefined || config.framed );
this.setTabIndex( config.tabIndex || 0 );
this.setAccessKey( config.accessKey );
- this.toggleFramed( config.framed === undefined || config.framed );
+ this.setButtonElement( config.$button || this.$( '<a>' ) );
};
/* Setup */
-OO.initClass( OO.ui.ButtonedElement );
+OO.initClass( OO.ui.ButtonElement );
/* Static Properties */
* @inheritable
* @property {boolean}
*/
-OO.ui.ButtonedElement.static.cancelButtonMouseDownEvents = true;
+OO.ui.ButtonElement.static.cancelButtonMouseDownEvents = true;
/* Methods */
+/**
+ * Set the button element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $button Element to use as button
+ */
+OO.ui.ButtonElement.prototype.setButtonElement = function ( $button ) {
+ if ( this.$button ) {
+ this.$button
+ .removeClass( 'oo-ui-buttonElement-button' )
+ .removeAttr( 'role accesskey tabindex' )
+ .off( this.onMouseDownHandler );
+ }
+
+ this.$button = $button
+ .addClass( 'oo-ui-buttonElement-button' )
+ .attr( { role: 'button', accesskey: this.accessKey, tabindex: this.tabIndex } )
+ .on( 'mousedown', this.onMouseDownHandler );
+};
+
/**
* Handles mouse down events.
*
* @param {jQuery.Event} e Mouse down event
*/
-OO.ui.ButtonedElement.prototype.onMouseDown = function ( e ) {
+OO.ui.ButtonElement.prototype.onMouseDown = function ( e ) {
if ( this.isDisabled() || e.which !== 1 ) {
return false;
}
- // tabIndex should generally be interacted with via the property, but it's not possible to
- // reliably unset a tabIndex via a property so we use the (lowercase) "tabindex" attribute
- this.tabIndex = this.$button.attr( 'tabindex' );
// Remove the tab-index while the button is down to prevent the button from stealing focus
this.$button.removeAttr( 'tabindex' );
- this.$element.addClass( 'oo-ui-buttonedElement-pressed' );
+ this.$element.addClass( 'oo-ui-buttonElement-pressed' );
// Run the mouseup handler no matter where the mouse is when the button is let go, so we can
// reliably reapply the tabindex and remove the pressed class
this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
*
* @param {jQuery.Event} e Mouse up event
*/
-OO.ui.ButtonedElement.prototype.onMouseUp = function ( e ) {
+OO.ui.ButtonElement.prototype.onMouseUp = function ( e ) {
if ( this.isDisabled() || e.which !== 1 ) {
return false;
}
// Restore the tab-index after the button is up to restore the button's accesssibility
this.$button.attr( 'tabindex', this.tabIndex );
- this.$element.removeClass( 'oo-ui-buttonedElement-pressed' );
+ this.$element.removeClass( 'oo-ui-buttonElement-pressed' );
// Stop listening for mouseup, since we only needed this once
this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
};
* @param {boolean} [framed] Make button framed, omit to toggle
* @chainable
*/
-OO.ui.ButtonedElement.prototype.toggleFramed = function ( framed ) {
+OO.ui.ButtonElement.prototype.toggleFramed = function ( framed ) {
framed = framed === undefined ? !this.framed : !!framed;
if ( framed !== this.framed ) {
this.framed = framed;
this.$element
- .toggleClass( 'oo-ui-buttonedElement-frameless', !framed )
- .toggleClass( 'oo-ui-buttonedElement-framed', framed );
+ .toggleClass( 'oo-ui-buttonElement-frameless', !framed )
+ .toggleClass( 'oo-ui-buttonElement-framed', framed );
}
return this;
* @param {number|null} tabIndex Button's tab index, use null to remove
* @chainable
*/
-OO.ui.ButtonedElement.prototype.setTabIndex = function ( tabIndex ) {
- if ( typeof tabIndex === 'number' && tabIndex >= 0 ) {
- this.$button.attr( 'tabindex', tabIndex );
- } else {
- this.$button.removeAttr( 'tabindex' );
+OO.ui.ButtonElement.prototype.setTabIndex = function ( tabIndex ) {
+ tabIndex = typeof tabIndex === 'number' && tabIndex >= 0 ? tabIndex : null;
+
+ if ( this.tabIndex !== tabIndex ) {
+ if ( this.$button ) {
+ if ( tabIndex !== null ) {
+ this.$button.attr( 'tabindex', tabIndex );
+ } else {
+ this.$button.removeAttr( 'tabindex' );
+ }
+ }
+ this.tabIndex = tabIndex;
}
+
return this;
};
/**
- * Set access key
+ * Set access key.
*
* @param {string} accessKey Button's access key, use empty string to remove
* @chainable
*/
-OO.ui.ButtonedElement.prototype.setAccessKey = function ( accessKey ) {
- if ( typeof accessKey === 'string' && accessKey.length ) {
- this.$button.attr( 'accesskey', accessKey );
- } else {
- this.$button.removeAttr( 'accesskey' );
+OO.ui.ButtonElement.prototype.setAccessKey = function ( accessKey ) {
+ accessKey = typeof accessKey === 'string' && accessKey.length ? accessKey : null;
+
+ if ( this.accessKey !== accessKey ) {
+ if ( this.$button ) {
+ if ( accessKey !== null ) {
+ this.$button.attr( 'accesskey', accessKey );
+ } else {
+ this.$button.removeAttr( 'accesskey' );
+ }
+ }
+ this.accessKey = accessKey;
}
+
return this;
};
* @param {boolean} [value] Make button active
* @chainable
*/
-OO.ui.ButtonedElement.prototype.setActive = function ( value ) {
- this.$element.toggleClass( 'oo-ui-buttonedElement-active', !!value );
+OO.ui.ButtonElement.prototype.setActive = function ( value ) {
+ this.$element.toggleClass( 'oo-ui-buttonElement-active', !!value );
return this;
};
/**
- * Element that can be automatically clipped to visible boundaies.
+ * Element containing a sequence of child elements.
*
* @abstract
* @class
*
* @constructor
- * @param {jQuery} $clippable Nodes to clip, assigned to #$clippable
* @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$group] Container node, assigned to #$group, omit to use a generated `<div>`
*/
-OO.ui.ClippableElement = function OoUiClippableElement( $clippable, config ) {
- // Configuration initialization
+OO.ui.GroupElement = function OoUiGroupElement( config ) {
+ // Configuration
config = config || {};
// Properties
- this.$clippable = $clippable;
- this.clipping = false;
- this.clipped = false;
- this.$clippableContainer = null;
- this.$clippableScroller = null;
- this.$clippableWindow = null;
- this.idealWidth = null;
- this.idealHeight = null;
- this.onClippableContainerScrollHandler = OO.ui.bind( this.clip, this );
- this.onClippableWindowResizeHandler = OO.ui.bind( this.clip, this );
+ this.$group = null;
+ this.items = [];
+ this.aggregateItemEvents = {};
// Initialization
- this.$clippable.addClass( 'oo-ui-clippableElement-clippable' );
+ this.setGroupElement( config.$group || this.$( '<div>' ) );
};
/* Methods */
/**
- * Set clipping.
+ * Set the group element.
*
- * @param {boolean} value Enable clipping
- * @chainable
+ * If an element is already set, items will be moved to the new element.
+ *
+ * @param {jQuery} $group Element to use as group
*/
-OO.ui.ClippableElement.prototype.setClipping = function ( value ) {
- value = !!value;
+OO.ui.GroupElement.prototype.setGroupElement = function ( $group ) {
+ var i, len;
- if ( this.clipping !== value ) {
- this.clipping = value;
- if ( this.clipping ) {
- this.$clippableContainer = this.$( this.getClosestScrollableElementContainer() );
- // If the clippable container is the body, we have to listen to scroll events and check
- // jQuery.scrollTop on the window because of browser inconsistencies
- this.$clippableScroller = this.$clippableContainer.is( 'body' ) ?
- this.$( OO.ui.Element.getWindow( this.$clippableContainer ) ) :
- this.$clippableContainer;
- this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
- this.$clippableWindow = this.$( this.getElementWindow() )
- .on( 'resize', this.onClippableWindowResizeHandler );
- // Initial clip after visible
- setTimeout( OO.ui.bind( this.clip, this ) );
- } else {
- this.$clippableContainer = null;
- this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
- this.$clippableScroller = null;
- this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
- this.$clippableWindow = null;
- }
+ this.$group = $group;
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ this.$group.append( this.items[i].$element );
}
-
- return this;
};
/**
- * Check if the element will be clipped to fit the visible area of the nearest scrollable container.
+ * Check if there are no items.
*
- * @return {boolean} Element will be clipped to the visible area
+ * @return {boolean} Group is empty
*/
-OO.ui.ClippableElement.prototype.isClipping = function () {
- return this.clipping;
+OO.ui.GroupElement.prototype.isEmpty = function () {
+ return !this.items.length;
};
/**
- * Check if the bottom or right of the element is being clipped by the nearest scrollable container.
+ * Get items.
*
- * @return {boolean} Part of the element is being clipped
+ * @return {OO.ui.Element[]} Items
*/
-OO.ui.ClippableElement.prototype.isClipped = function () {
- return this.clipped;
+OO.ui.GroupElement.prototype.getItems = function () {
+ return this.items.slice( 0 );
};
/**
- * Set the ideal size.
+ * Add an aggregate item event.
*
- * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
- * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
+ * Aggregated events are listened to on each item and then emitted by the group under a new name,
+ * and with an additional leading parameter containing the item that emitted the original event.
+ * Other arguments that were emitted from the original event are passed through.
+ *
+ * @param {Object.<string,string|null>} events Aggregate events emitted by group, keyed by item
+ * event, use null value to remove aggregation
+ * @throws {Error} If aggregation already exists
*/
-OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
- this.idealWidth = width;
- this.idealHeight = height;
+OO.ui.GroupElement.prototype.aggregate = function ( events ) {
+ var i, len, item, add, remove, itemEvent, groupEvent;
+
+ for ( itemEvent in events ) {
+ groupEvent = events[itemEvent];
+
+ // Remove existing aggregated event
+ if ( itemEvent in this.aggregateItemEvents ) {
+ // Don't allow duplicate aggregations
+ if ( groupEvent ) {
+ throw new Error( 'Duplicate item event aggregation for ' + itemEvent );
+ }
+ // Remove event aggregation from existing items
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[i];
+ if ( item.connect && item.disconnect ) {
+ remove = {};
+ remove[itemEvent] = [ 'emit', groupEvent, item ];
+ item.disconnect( this, remove );
+ }
+ }
+ // Prevent future items from aggregating event
+ delete this.aggregateItemEvents[itemEvent];
+ }
+
+ // Add new aggregate event
+ if ( groupEvent ) {
+ // Make future items aggregate event
+ this.aggregateItemEvents[itemEvent] = groupEvent;
+ // Add event aggregation to existing items
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[i];
+ if ( item.connect && item.disconnect ) {
+ add = {};
+ add[itemEvent] = [ 'emit', groupEvent, item ];
+ item.connect( this, add );
+ }
+ }
+ }
+ }
};
/**
- * Clip element to visible boundaries and allow scrolling when needed.
+ * Add items.
*
- * Element will be clipped the bottom or right of the element is within 10px of the edge of, or
- * overlapped by, the visible area of the nearest scrollable container.
+ * Adding an existing item (by value) will move it.
*
+ * @param {OO.ui.Element[]} items Item
+ * @param {number} [index] Index to insert items at
* @chainable
*/
-OO.ui.ClippableElement.prototype.clip = function () {
- if ( !this.clipping ) {
- // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
- return this;
- }
+OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
+ var i, len, item, event, events, currentIndex,
+ itemElements = [];
- var buffer = 10,
- cOffset = this.$clippable.offset(),
- $container = this.$clippableContainer.is( 'body' ) ? this.$clippableWindow : this.$clippableContainer,
- ccOffset = $container.offset() || { top: 0, left: 0 },
- ccHeight = $container.innerHeight() - buffer,
- ccWidth = $container.innerWidth() - buffer,
- scrollTop = this.$clippableScroller.scrollTop(),
- scrollLeft = this.$clippableScroller.scrollLeft(),
- desiredWidth = ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
- desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
- naturalWidth = this.$clippable.prop( 'scrollWidth' ),
- naturalHeight = this.$clippable.prop( 'scrollHeight' ),
- clipWidth = desiredWidth < naturalWidth,
- clipHeight = desiredHeight < naturalHeight;
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ item = items[i];
- if ( clipWidth ) {
- this.$clippable.css( { overflowX: 'auto', width: desiredWidth } );
- } else {
- this.$clippable.css( 'width', this.idealWidth || '' );
- this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
- this.$clippable.css( 'overflowX', '' );
+ // Check if item exists then remove it first, effectively "moving" it
+ currentIndex = $.inArray( item, this.items );
+ if ( currentIndex >= 0 ) {
+ this.removeItems( [ item ] );
+ // Adjust index to compensate for removal
+ if ( currentIndex < index ) {
+ index--;
+ }
+ }
+ // Add the item
+ if ( item.connect && item.disconnect && !$.isEmptyObject( this.aggregateItemEvents ) ) {
+ events = {};
+ for ( event in this.aggregateItemEvents ) {
+ events[event] = [ 'emit', this.aggregateItemEvents[event], item ];
+ }
+ item.connect( this, events );
+ }
+ item.setElementGroup( this );
+ itemElements.push( item.$element.get( 0 ) );
}
- if ( clipHeight ) {
- this.$clippable.css( { overflowY: 'auto', height: desiredHeight } );
+
+ if ( index === undefined || index < 0 || index >= this.items.length ) {
+ this.$group.append( itemElements );
+ this.items.push.apply( this.items, items );
+ } else if ( index === 0 ) {
+ this.$group.prepend( itemElements );
+ this.items.unshift.apply( this.items, items );
} else {
- this.$clippable.css( 'height', this.idealHeight || '' );
- this.$clippable.height(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
- this.$clippable.css( 'overflowY', '' );
+ this.items[index].$element.before( itemElements );
+ this.items.splice.apply( this.items, [ index, 0 ].concat( items ) );
}
- this.clipped = clipWidth || clipHeight;
-
return this;
};
/**
- * Element with named flags that can be added, removed, listed and checked.
- *
- * A flag, when set, adds a CSS class on the `$element` by combing `oo-ui-flaggableElement-` with
- * the flag name. Flags are primarily useful for styling.
+ * Remove items.
*
- * @abstract
- * @class
+ * Items will be detached, not removed, so they can be used later.
*
- * @constructor
- * @param {Object} [config] Configuration options
- * @cfg {string[]} [flags=[]] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
+ * @param {OO.ui.Element[]} items Items to remove
+ * @chainable
*/
-OO.ui.FlaggableElement = function OoUiFlaggableElement( config ) {
- // Config initialization
- config = config || {};
+OO.ui.GroupElement.prototype.removeItems = function ( items ) {
+ var i, len, item, index, remove, itemEvent;
- // Properties
- this.flags = {};
+ // Remove specific items
+ for ( i = 0, len = items.length; i < len; i++ ) {
+ item = items[i];
+ index = $.inArray( item, this.items );
+ if ( index !== -1 ) {
+ if (
+ item.connect && item.disconnect &&
+ !$.isEmptyObject( this.aggregateItemEvents )
+ ) {
+ remove = {};
+ if ( itemEvent in this.aggregateItemEvents ) {
+ remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+ }
+ item.disconnect( this, remove );
+ }
+ item.setElementGroup( null );
+ this.items.splice( index, 1 );
+ item.$element.detach();
+ }
+ }
- // Initialization
- this.setFlags( config.flags );
+ return this;
};
-/* Events */
-
/**
- * @event flag
- * @param {Object.<string,boolean>} changes Object keyed by flag name containing boolean
- * added/removed properties
+ * Clear all items.
+ *
+ * Items will be detached, not removed, so they can be used later.
+ *
+ * @chainable
*/
+OO.ui.GroupElement.prototype.clearItems = function () {
+ var i, len, item, remove, itemEvent;
-/* Methods */
+ // Remove all items
+ for ( i = 0, len = this.items.length; i < len; i++ ) {
+ item = this.items[i];
+ if (
+ item.connect && item.disconnect &&
+ !$.isEmptyObject( this.aggregateItemEvents )
+ ) {
+ remove = {};
+ if ( itemEvent in this.aggregateItemEvents ) {
+ remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+ }
+ item.disconnect( this, remove );
+ }
+ item.setElementGroup( null );
+ item.$element.detach();
+ }
+
+ this.items = [];
+ return this;
+};
/**
- * Check if a flag is set.
+ * Element containing an icon.
*
- * @param {string} flag Name of flag
- * @return {boolean} Has flag
+ * Icons are graphics, about the size of normal text. They can be used to aid the user in locating
+ * a control or convey information in a more space efficient way. Icons should rarely be used
+ * without labels; such as in a toolbar where space is at a premium or within a context where the
+ * meaning is very clear to the user.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$icon] Icon node, assigned to #$icon, omit to use a generated `<span>`
+ * @cfg {Object|string} [icon=''] Symbolic icon name, or map of icon names keyed by language ID;
+ * use the 'default' key to specify the icon to be used when there is no icon in the user's
+ * language
+ * @cfg {string} [iconTitle] Icon title text or a function that returns text
*/
-OO.ui.FlaggableElement.prototype.hasFlag = function ( flag ) {
- return flag in this.flags;
+OO.ui.IconElement = function OoUiIconElement( config ) {
+ // Config intialization
+ config = config || {};
+
+ // Properties
+ this.$icon = null;
+ this.icon = null;
+ this.iconTitle = null;
+
+ // Initialization
+ this.setIcon( config.icon || this.constructor.static.icon );
+ this.setIconTitle( config.iconTitle || this.constructor.static.iconTitle );
+ this.setIconElement( config.$icon || this.$( '<span>' ) );
};
+/* Setup */
+
+OO.initClass( OO.ui.IconElement );
+
+/* Static Properties */
+
/**
- * Get the names of all flags set.
+ * Icon.
*
- * @return {string[]} flags Flag names
+ * Value should be the unique portion of an icon CSS class name, such as 'up' for 'oo-ui-icon-up'.
+ *
+ * For i18n purposes, this property can be an object containing a `default` icon name property and
+ * additional icon names keyed by language code.
+ *
+ * Example of i18n icon definition:
+ * { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
+ *
+ * @static
+ * @inheritable
+ * @property {Object|string} Symbolic icon name, or map of icon names keyed by language ID;
+ * use the 'default' key to specify the icon to be used when there is no icon in the user's
+ * language
*/
-OO.ui.FlaggableElement.prototype.getFlags = function () {
- return Object.keys( this.flags );
+OO.ui.IconElement.static.icon = null;
+
+/**
+ * Icon title.
+ *
+ * @static
+ * @inheritable
+ * @property {string|Function|null} Icon title text, a function that returns text or null for no
+ * icon title
+ */
+OO.ui.IconElement.static.iconTitle = null;
+
+/* Methods */
+
+/**
+ * Set the icon element.
+ *
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $icon Element to use as icon
+ */
+OO.ui.IconElement.prototype.setIconElement = function ( $icon ) {
+ if ( this.$icon ) {
+ this.$icon
+ .removeClass( 'oo-ui-iconElement-icon oo-ui-icon-' + this.icon )
+ .removeAttr( 'title' );
+ }
+
+ this.$icon = $icon
+ .addClass( 'oo-ui-iconElement-icon' )
+ .toggleClass( 'oo-ui-icon-' + this.icon, !!this.icon );
+ if ( this.iconTitle !== null ) {
+ this.$icon.attr( 'title', this.iconTitle );
+ }
};
/**
- * Clear all flags.
+ * Set icon.
*
+ * @param {Object|string|null} icon Symbolic icon name, or map of icon names keyed by language ID;
+ * use the 'default' key to specify the icon to be used when there is no icon in the user's
+ * language, use null to remove icon
* @chainable
- * @fires flag
*/
-OO.ui.FlaggableElement.prototype.clearFlags = function () {
- var flag,
- changes = {},
- classPrefix = 'oo-ui-flaggableElement-';
+OO.ui.IconElement.prototype.setIcon = function ( icon ) {
+ icon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;
+ icon = typeof icon === 'string' && icon.trim().length ? icon.trim() : null;
- for ( flag in this.flags ) {
- changes[flag] = false;
- delete this.flags[flag];
- this.$element.removeClass( classPrefix + flag );
+ if ( this.icon !== icon ) {
+ if ( this.$icon ) {
+ if ( this.icon !== null ) {
+ this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
+ }
+ if ( icon !== null ) {
+ this.$icon.addClass( 'oo-ui-icon-' + icon );
+ }
+ }
+ this.icon = icon;
}
- this.emit( 'flag', changes );
+ this.$element.toggleClass( 'oo-ui-iconElement', !!this.icon );
return this;
};
/**
- * Add one or more flags.
+ * Set icon title.
*
- * @param {string|string[]|Object.<string, boolean>} flags One or more flags to add, or an object
- * keyed by flag name containing boolean set/remove instructions.
+ * @param {string|Function|null} icon Icon title text, a function that returns text or null
+ * for no icon title
* @chainable
- * @fires flag
*/
-OO.ui.FlaggableElement.prototype.setFlags = function ( flags ) {
- var i, len, flag,
- changes = {},
- classPrefix = 'oo-ui-flaggableElement-';
+OO.ui.IconElement.prototype.setIconTitle = function ( iconTitle ) {
+ iconTitle = typeof iconTitle === 'function' ||
+ ( typeof iconTitle === 'string' && iconTitle.length ) ?
+ OO.ui.resolveMsg( iconTitle ) : null;
- if ( typeof flags === 'string' ) {
- // Set
- this.flags[flags] = true;
- this.$element.addClass( classPrefix + flags );
- } else if ( $.isArray( flags ) ) {
- for ( i = 0, len = flags.length; i < len; i++ ) {
- flag = flags[i];
- // Set
- changes[flag] = true;
- this.flags[flag] = true;
- this.$element.addClass( classPrefix + flag );
- }
- } else if ( OO.isPlainObject( flags ) ) {
- for ( flag in flags ) {
- if ( flags[flag] ) {
- // Set
- changes[flag] = true;
- this.flags[flag] = true;
- this.$element.addClass( classPrefix + flag );
+ if ( this.iconTitle !== iconTitle ) {
+ this.iconTitle = iconTitle;
+ if ( this.$icon ) {
+ if ( this.iconTitle !== null ) {
+ this.$icon.attr( 'title', iconTitle );
} else {
- // Remove
- changes[flag] = false;
- delete this.flags[flag];
- this.$element.removeClass( classPrefix + flag );
+ this.$icon.removeAttr( 'title' );
}
}
}
- this.emit( 'flag', changes );
-
return this;
};
/**
- * Element containing a sequence of child elements.
+ * Get icon.
+ *
+ * @return {string} Icon
+ */
+OO.ui.IconElement.prototype.getIcon = function () {
+ return this.icon;
+};
+
+/**
+ * Element containing an indicator.
+ *
+ * Indicators are graphics, smaller than normal text. They can be used to describe unique status or
+ * behavior. Indicators should only be used in exceptional cases; such as a button that opens a menu
+ * instead of performing an action directly, or an item in a list which has errors that need to be
+ * resolved.
*
* @abstract
* @class
*
* @constructor
- * @param {jQuery} $group Container node, assigned to #$group
* @param {Object} [config] Configuration options
+ * @cfg {jQuery} [$indicator] Indicator node, assigned to #$indicator, omit to use a generated
+ * `<span>`
+ * @cfg {string} [indicator] Symbolic indicator name
+ * @cfg {string} [indicatorTitle] Indicator title text or a function that returns text
*/
-OO.ui.GroupElement = function OoUiGroupElement( $group, config ) {
- // Configuration
+OO.ui.IndicatorElement = function OoUiIndicatorElement( config ) {
+ // Config intialization
config = config || {};
// Properties
- this.$group = $group;
- this.items = [];
- this.aggregateItemEvents = {};
+ this.$indicator = null;
+ this.indicator = null;
+ this.indicatorTitle = null;
+
+ // Initialization
+ this.setIndicator( config.indicator || this.constructor.static.indicator );
+ this.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );
+ this.setIndicatorElement( config.$indicator || this.$( '<span>' ) );
};
-/* Methods */
+/* Setup */
-/**
- * Check if there are no items.
- *
- * @return {boolean} Group is empty
- */
-OO.ui.GroupElement.prototype.isEmpty = function () {
- return !this.items.length;
-};
+OO.initClass( OO.ui.IndicatorElement );
+
+/* Static Properties */
/**
- * Get items.
+ * indicator.
*
- * @return {OO.ui.Element[]} Items
+ * @static
+ * @inheritable
+ * @property {string|null} Symbolic indicator name or null for no indicator
*/
-OO.ui.GroupElement.prototype.getItems = function () {
- return this.items.slice( 0 );
-};
+OO.ui.IndicatorElement.static.indicator = null;
/**
- * Add an aggregate item event.
- *
- * Aggregated events are listened to on each item and then emitted by the group under a new name,
- * and with an additional leading parameter containing the item that emitted the original event.
- * Other arguments that were emitted from the original event are passed through.
+ * Indicator title.
*
- * @param {Object.<string,string|null>} events Aggregate events emitted by group, keyed by item
- * event, use null value to remove aggregation
- * @throws {Error} If aggregation already exists
+ * @static
+ * @inheritable
+ * @property {string|Function|null} Indicator title text, a function that returns text or null for no
+ * indicator title
*/
-OO.ui.GroupElement.prototype.aggregate = function ( events ) {
- var i, len, item, add, remove, itemEvent, groupEvent;
-
- for ( itemEvent in events ) {
- groupEvent = events[itemEvent];
-
- // Remove existing aggregated event
- if ( itemEvent in this.aggregateItemEvents ) {
- // Don't allow duplicate aggregations
- if ( groupEvent ) {
- throw new Error( 'Duplicate item event aggregation for ' + itemEvent );
- }
- // Remove event aggregation from existing items
- for ( i = 0, len = this.items.length; i < len; i++ ) {
- item = this.items[i];
- if ( item.connect && item.disconnect ) {
- remove = {};
- remove[itemEvent] = [ 'emit', groupEvent, item ];
- item.disconnect( this, remove );
- }
- }
- // Prevent future items from aggregating event
- delete this.aggregateItemEvents[itemEvent];
- }
+OO.ui.IndicatorElement.static.indicatorTitle = null;
- // Add new aggregate event
- if ( groupEvent ) {
- // Make future items aggregate event
- this.aggregateItemEvents[itemEvent] = groupEvent;
- // Add event aggregation to existing items
- for ( i = 0, len = this.items.length; i < len; i++ ) {
- item = this.items[i];
- if ( item.connect && item.disconnect ) {
- add = {};
- add[itemEvent] = [ 'emit', groupEvent, item ];
- item.connect( this, add );
- }
- }
- }
- }
-};
+/* Methods */
/**
- * Add items.
+ * Set the indicator element.
*
- * @param {OO.ui.Element[]} items Item
- * @param {number} [index] Index to insert items at
- * @chainable
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $indicator Element to use as indicator
*/
-OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
- var i, len, item, event, events, currentIndex,
- itemElements = [];
-
- for ( i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
-
- // Check if item exists then remove it first, effectively "moving" it
- currentIndex = $.inArray( item, this.items );
- if ( currentIndex >= 0 ) {
- this.removeItems( [ item ] );
- // Adjust index to compensate for removal
- if ( currentIndex < index ) {
- index--;
- }
- }
- // Add the item
- if ( item.connect && item.disconnect && !$.isEmptyObject( this.aggregateItemEvents ) ) {
- events = {};
- for ( event in this.aggregateItemEvents ) {
- events[event] = [ 'emit', this.aggregateItemEvents[event], item ];
- }
- item.connect( this, events );
- }
- item.setElementGroup( this );
- itemElements.push( item.$element.get( 0 ) );
+OO.ui.IndicatorElement.prototype.setIndicatorElement = function ( $indicator ) {
+ if ( this.$indicator ) {
+ this.$indicator
+ .removeClass( 'oo-ui-indicatorElement-indicator oo-ui-indicator-' + this.indicator )
+ .removeAttr( 'title' );
}
- if ( index === undefined || index < 0 || index >= this.items.length ) {
- this.$group.append( itemElements );
- this.items.push.apply( this.items, items );
- } else if ( index === 0 ) {
- this.$group.prepend( itemElements );
- this.items.unshift.apply( this.items, items );
- } else {
- this.items[index].$element.before( itemElements );
- this.items.splice.apply( this.items, [ index, 0 ].concat( items ) );
+ this.$indicator = $indicator
+ .addClass( 'oo-ui-indicatorElement-indicator' )
+ .toggleClass( 'oo-ui-indicator-' + this.indicator, !!this.indicator );
+ if ( this.indicatorTitle !== null ) {
+ this.$indicatorTitle.attr( 'title', this.indicatorTitle );
}
-
- return this;
};
/**
- * Remove items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Set indicator.
*
- * @param {OO.ui.Element[]} items Items to remove
+ * @param {string|null} indicator Symbolic name of indicator to use or null for no indicator
* @chainable
*/
-OO.ui.GroupElement.prototype.removeItems = function ( items ) {
- var i, len, item, index, remove, itemEvent;
+OO.ui.IndicatorElement.prototype.setIndicator = function ( indicator ) {
+ indicator = typeof indicator === 'string' && indicator.length ? indicator.trim() : null;
- // Remove specific items
- for ( i = 0, len = items.length; i < len; i++ ) {
- item = items[i];
- index = $.inArray( item, this.items );
- if ( index !== -1 ) {
- if (
- item.connect && item.disconnect &&
- !$.isEmptyObject( this.aggregateItemEvents )
- ) {
- remove = {};
- if ( itemEvent in this.aggregateItemEvents ) {
- remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
- }
- item.disconnect( this, remove );
+ if ( this.indicator !== indicator ) {
+ if ( this.$indicator ) {
+ if ( this.indicator !== null ) {
+ this.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );
+ }
+ if ( indicator !== null ) {
+ this.$indicator.addClass( 'oo-ui-indicator-' + indicator );
}
- item.setElementGroup( null );
- this.items.splice( index, 1 );
- item.$element.detach();
}
+ this.indicator = indicator;
}
+ this.$element.toggleClass( 'oo-ui-indicatorElement', !!this.indicator );
+
return this;
};
/**
- * Clear all items.
- *
- * Items will be detached, not removed, so they can be used later.
+ * Set indicator title.
*
- * @chainable
- */
-OO.ui.GroupElement.prototype.clearItems = function () {
- var i, len, item, remove, itemEvent;
-
- // Remove all items
- for ( i = 0, len = this.items.length; i < len; i++ ) {
- item = this.items[i];
- if (
- item.connect && item.disconnect &&
- !$.isEmptyObject( this.aggregateItemEvents )
- ) {
- remove = {};
- if ( itemEvent in this.aggregateItemEvents ) {
- remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+ * @param {string|Function|null} indicator Indicator title text, a function that returns text or
+ * null for no indicator title
+ * @chainable
+ */
+OO.ui.IndicatorElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
+ indicatorTitle = typeof indicatorTitle === 'function' ||
+ ( typeof indicatorTitle === 'string' && indicatorTitle.length ) ?
+ OO.ui.resolveMsg( indicatorTitle ) : null;
+
+ if ( this.indicatorTitle !== indicatorTitle ) {
+ this.indicatorTitle = indicatorTitle;
+ if ( this.$indicator ) {
+ if ( this.indicatorTitle !== null ) {
+ this.$indicator.attr( 'title', indicatorTitle );
+ } else {
+ this.$indicator.removeAttr( 'title' );
}
- item.disconnect( this, remove );
}
- item.setElementGroup( null );
- item.$element.detach();
}
- this.items = [];
return this;
};
/**
- * Element containing an icon.
+ * Get indicator.
*
- * Icons are graphics, about the size of normal text. They can be used to aid the user in locating
- * a control or convey information in a more space efficient way. Icons should rarely be used
- * without labels; such as in a toolbar where space is at a premium or within a context where the
- * meaning is very clear to the user.
+ * @return {string} title Symbolic name of indicator
+ */
+OO.ui.IndicatorElement.prototype.getIndicator = function () {
+ return this.indicator;
+};
+
+/**
+ * Get indicator title.
+ *
+ * @return {string} Indicator title text
+ */
+OO.ui.IndicatorElement.prototype.getIndicatorTitle = function () {
+ return this.indicatorTitle;
+};
+
+/**
+ * Element containing a label.
*
* @abstract
* @class
*
* @constructor
- * @param {jQuery} $icon Icon node, assigned to #$icon
* @param {Object} [config] Configuration options
- * @cfg {Object|string} [icon=''] Symbolic icon name, or map of icon names keyed by language ID;
- * use the 'default' key to specify the icon to be used when there is no icon in the user's
- * language
+ * @cfg {jQuery} [$label] Label node, assigned to #$label, omit to use a generated `<span>`
+ * @cfg {jQuery|string|Function} [label] Label nodes, text or a function that returns nodes or text
+ * @cfg {boolean} [autoFitLabel=true] Whether to fit the label or not.
*/
-OO.ui.IconedElement = function OoUiIconedElement( $icon, config ) {
+OO.ui.LabelElement = function OoUiLabelElement( config ) {
// Config intialization
config = config || {};
// Properties
- this.$icon = $icon;
- this.icon = null;
+ this.$label = null;
+ this.label = null;
+ this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
// Initialization
- this.$icon.addClass( 'oo-ui-iconedElement-icon' );
- this.setIcon( config.icon || this.constructor.static.icon );
+ this.setLabel( config.label || this.constructor.static.label );
+ this.setLabelElement( config.$label || this.$( '<span>' ) );
};
/* Setup */
-OO.initClass( OO.ui.IconedElement );
+OO.initClass( OO.ui.LabelElement );
/* Static Properties */
/**
- * Icon.
- *
- * Value should be the unique portion of an icon CSS class name, such as 'up' for 'oo-ui-icon-up'.
- *
- * For i18n purposes, this property can be an object containing a `default` icon name property and
- * additional icon names keyed by language code.
- *
- * Example of i18n icon definition:
- * { default: 'bold-a', en: 'bold-b', de: 'bold-f' }
+ * Label.
*
* @static
* @inheritable
- * @property {Object|string} Symbolic icon name, or map of icon names keyed by language ID;
- * use the 'default' key to specify the icon to be used when there is no icon in the user's
- * language
+ * @property {string|Function|null} Label text; a function that returns nodes or text; or null for
+ * no label
*/
-OO.ui.IconedElement.static.icon = null;
+OO.ui.LabelElement.static.label = null;
/* Methods */
/**
- * Set icon.
+ * Set the label element.
*
- * @param {Object|string} icon Symbolic icon name, or map of icon names keyed by language ID;
- * use the 'default' key to specify the icon to be used when there is no icon in the user's
- * language
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $label Element to use as label
+ */
+OO.ui.LabelElement.prototype.setLabelElement = function ( $label ) {
+ if ( this.$label ) {
+ this.$label.removeClass( 'oo-ui-labelElement-label' ).empty();
+ }
+
+ this.$label = $label.addClass( 'oo-ui-labelElement-label' );
+ this.setLabelContent( this.label );
+};
+
+/**
+ * Set the label.
+ *
+ * An empty string will result in the label being hidden. A string containing only whitespace will
+ * be converted to a single
+ *
+ * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * text; or null for no label
* @chainable
*/
-OO.ui.IconedElement.prototype.setIcon = function ( icon ) {
- icon = OO.isPlainObject( icon ) ? OO.ui.getLocalValue( icon, null, 'default' ) : icon;
+OO.ui.LabelElement.prototype.setLabel = function ( label ) {
+ label = typeof label === 'function' ? OO.ui.resolveMsg( label ) : label;
+ label = ( typeof label === 'string' && label.length ) || label instanceof jQuery ? label : null;
- if ( this.icon ) {
- this.$icon.removeClass( 'oo-ui-icon-' + this.icon );
- }
- if ( typeof icon === 'string' ) {
- icon = icon.trim();
- if ( icon.length ) {
- this.$icon.addClass( 'oo-ui-icon-' + icon );
- this.icon = icon;
+ if ( this.label !== label ) {
+ if ( this.$label ) {
+ this.setLabelContent( label );
}
+ this.label = label;
}
- this.$element.toggleClass( 'oo-ui-iconedElement', !!this.icon );
+
+ this.$element.toggleClass( 'oo-ui-labelElement', !!this.label );
return this;
};
/**
- * Get icon.
+ * Get the label.
*
- * @return {string} Icon
+ * @return {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * text; or null for no label
*/
-OO.ui.IconedElement.prototype.getIcon = function () {
- return this.icon;
+OO.ui.LabelElement.prototype.getLabel = function () {
+ return this.label;
};
/**
- * Element containing an indicator.
+ * Fit the label.
*
- * Indicators are graphics, smaller than normal text. They can be used to describe unique status or
- * behavior. Indicators should only be used in exceptional cases; such as a button that opens a menu
- * instead of performing an action directly, or an item in a list which has errors that need to be
- * resolved.
+ * @chainable
+ */
+OO.ui.LabelElement.prototype.fitLabel = function () {
+ if ( this.$label && this.$label.autoEllipsis && this.autoFitLabel ) {
+ this.$label.autoEllipsis( { hasSpan: false, tooltip: true } );
+ }
+
+ return this;
+};
+
+/**
+ * Set the content of the label.
+ *
+ * Do not call this method until after the label element has been set by #setLabelElement.
+ *
+ * @private
+ * @param {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
+ * text; or null for no label
+ */
+OO.ui.LabelElement.prototype.setLabelContent = function ( label ) {
+ if ( typeof label === 'string' ) {
+ if ( label.match( /^\s*$/ ) ) {
+ // Convert whitespace only string to a single non-breaking space
+ this.$label.html( ' ' );
+ } else {
+ this.$label.text( label );
+ }
+ } else if ( label instanceof jQuery ) {
+ this.$label.empty().append( label );
+ } else {
+ this.$label.empty();
+ }
+ this.$label.css( 'display', !label ? 'none' : '' );
+};
+
+/**
+ * Element containing an OO.ui.PopupWidget object.
*
* @abstract
* @class
*
* @constructor
- * @param {jQuery} $indicator Indicator node, assigned to #$indicator
* @param {Object} [config] Configuration options
- * @cfg {string} [indicator] Symbolic indicator name
- * @cfg {string} [indicatorTitle] Indicator title text or a function that return text
+ * @cfg {Object} [popup] Configuration to pass to popup
+ * @cfg {boolean} [autoClose=true] Popup auto-closes when it loses focus
*/
-OO.ui.IndicatedElement = function OoUiIndicatedElement( $indicator, config ) {
- // Config intialization
+OO.ui.PopupElement = function OoUiPopupElement( config ) {
+ // Configuration initialization
config = config || {};
// Properties
- this.$indicator = $indicator;
- this.indicator = null;
- this.indicatorLabel = null;
+ this.popup = new OO.ui.PopupWidget( $.extend(
+ { autoClose: true },
+ config.popup,
+ { $: this.$, $autoCloseIgnore: this.$element }
+ ) );
+};
+
+/* Methods */
+
+/**
+ * Get popup.
+ *
+ * @return {OO.ui.PopupWidget} Popup widget
+ */
+OO.ui.PopupElement.prototype.getPopup = function () {
+ return this.popup;
+};
+
+/**
+ * Element with named flags that can be added, removed, listed and checked.
+ *
+ * A flag, when set, adds a CSS class on the `$element` by combining `oo-ui-flaggedElement-` with
+ * the flag name. Flags are primarily useful for styling.
+ *
+ * @abstract
+ * @class
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {string[]} [flags=[]] Styling flags, e.g. 'primary', 'destructive' or 'constructive'
+ * @cfg {jQuery} [$flagged] Flagged node, assigned to #$flagged, omit to use #$element
+ */
+OO.ui.FlaggedElement = function OoUiFlaggedElement( config ) {
+ // Config initialization
+ config = config || {};
+
+ // Properties
+ this.flags = {};
+ this.$flagged = null;
// Initialization
- this.$indicator.addClass( 'oo-ui-indicatedElement-indicator' );
- this.setIndicator( config.indicator || this.constructor.static.indicator );
- this.setIndicatorTitle( config.indicatorTitle || this.constructor.static.indicatorTitle );
+ this.setFlags( config.flags );
+ this.setFlaggedElement( config.$flagged || this.$element );
};
-/* Setup */
+/* Events */
-OO.initClass( OO.ui.IndicatedElement );
+/**
+ * @event flag
+ * @param {Object.<string,boolean>} changes Object keyed by flag name containing boolean
+ * added/removed properties
+ */
-/* Static Properties */
+/* Methods */
/**
- * indicator.
+ * Set the flagged element.
*
- * @static
- * @inheritable
- * @property {string|null} Symbolic indicator name or null for no indicator
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $flagged Element to add flags to
*/
-OO.ui.IndicatedElement.static.indicator = null;
+OO.ui.FlaggedElement.prototype.setFlaggedElement = function ( $flagged ) {
+ var classNames = Object.keys( this.flags ).map( function ( flag ) {
+ return 'oo-ui-flaggedElement-' + flag;
+ } ).join( ' ' );
+
+ if ( this.$flagged ) {
+ this.$flagged.removeClass( classNames );
+ }
+
+ this.$flagged = $flagged.addClass( classNames );
+};
/**
- * Indicator title.
+ * Check if a flag is set.
*
- * @static
- * @inheritable
- * @property {string|Function|null} Indicator title text, a function that return text or null for no
- * indicator title
+ * @param {string} flag Name of flag
+ * @return {boolean} Has flag
*/
-OO.ui.IndicatedElement.static.indicatorTitle = null;
+OO.ui.FlaggedElement.prototype.hasFlag = function ( flag ) {
+ return flag in this.flags;
+};
-/* Methods */
+/**
+ * Get the names of all flags set.
+ *
+ * @return {string[]} flags Flag names
+ */
+OO.ui.FlaggedElement.prototype.getFlags = function () {
+ return Object.keys( this.flags );
+};
/**
- * Set indicator.
+ * Clear all flags.
*
- * @param {string|null} indicator Symbolic name of indicator to use or null for no indicator
* @chainable
+ * @fires flag
*/
-OO.ui.IndicatedElement.prototype.setIndicator = function ( indicator ) {
- if ( this.indicator ) {
- this.$indicator.removeClass( 'oo-ui-indicator-' + this.indicator );
- this.indicator = null;
+OO.ui.FlaggedElement.prototype.clearFlags = function () {
+ var flag, className,
+ changes = {},
+ remove = [],
+ classPrefix = 'oo-ui-flaggedElement-';
+
+ for ( flag in this.flags ) {
+ className = classPrefix + flag;
+ changes[flag] = false;
+ delete this.flags[flag];
+ remove.push( className );
}
- if ( typeof indicator === 'string' ) {
- indicator = indicator.trim();
- if ( indicator.length ) {
- this.$indicator.addClass( 'oo-ui-indicator-' + indicator );
- this.indicator = indicator;
- }
+
+ if ( this.$flagged ) {
+ this.$flagged.removeClass( remove.join( ' ' ) );
}
- this.$element.toggleClass( 'oo-ui-indicatedElement', !!this.indicator );
+
+ this.emit( 'flag', changes );
return this;
};
/**
- * Set indicator label.
+ * Add one or more flags.
*
- * @param {string|Function|null} indicator Indicator title text, a function that return text or null
- * for no indicator title
+ * @param {string|string[]|Object.<string, boolean>} flags One or more flags to add, or an object
+ * keyed by flag name containing boolean set/remove instructions.
* @chainable
+ * @fires flag
*/
-OO.ui.IndicatedElement.prototype.setIndicatorTitle = function ( indicatorTitle ) {
- this.indicatorTitle = indicatorTitle = OO.ui.resolveMsg( indicatorTitle );
+OO.ui.FlaggedElement.prototype.setFlags = function ( flags ) {
+ var i, len, flag, className,
+ changes = {},
+ add = [],
+ remove = [],
+ classPrefix = 'oo-ui-flaggedElement-';
- if ( typeof indicatorTitle === 'string' && indicatorTitle.length ) {
- this.$indicator.attr( 'title', indicatorTitle );
- } else {
- this.$indicator.removeAttr( 'title' );
+ if ( typeof flags === 'string' ) {
+ className = classPrefix + flags;
+ // Set
+ if ( !this.flags[flags] ) {
+ this.flags[flags] = true;
+ add.push( className );
+ }
+ } else if ( $.isArray( flags ) ) {
+ for ( i = 0, len = flags.length; i < len; i++ ) {
+ flag = flags[i];
+ className = classPrefix + flag;
+ // Set
+ if ( !this.flags[flag] ) {
+ changes[flag] = true;
+ this.flags[flag] = true;
+ add.push( className );
+ }
+ }
+ } else if ( OO.isPlainObject( flags ) ) {
+ for ( flag in flags ) {
+ className = classPrefix + flag;
+ if ( flags[flag] ) {
+ // Set
+ if ( !this.flags[flag] ) {
+ changes[flag] = true;
+ this.flags[flag] = true;
+ add.push( className );
+ }
+ } else {
+ // Remove
+ if ( this.flags[flag] ) {
+ changes[flag] = false;
+ delete this.flags[flag];
+ remove.push( className );
+ }
+ }
+ }
}
- return this;
-};
+ if ( this.$flagged ) {
+ this.$flagged
+ .addClass( add.join( ' ' ) )
+ .removeClass( remove.join( ' ' ) );
+ }
-/**
- * Get indicator.
- *
- * @return {string} title Symbolic name of indicator
- */
-OO.ui.IndicatedElement.prototype.getIndicator = function () {
- return this.indicator;
-};
+ this.emit( 'flag', changes );
-/**
- * Get indicator title.
- *
- * @return {string} Indicator title text
- */
-OO.ui.IndicatedElement.prototype.getIndicatorTitle = function () {
- return this.indicatorTitle;
+ return this;
};
/**
- * Element containing a label.
+ * Element with a title.
+ *
+ * Titles are rendered by the browser and are made visible when hovering the element. Titles are
+ * not visible on touch devices.
*
* @abstract
* @class
*
* @constructor
- * @param {jQuery} $label Label node, assigned to #$label
* @param {Object} [config] Configuration options
- * @cfg {jQuery|string|Function} [label] Label nodes, text or a function that returns nodes or text
- * @cfg {boolean} [autoFitLabel=true] Whether to fit the label or not.
+ * @cfg {jQuery} [$titled] Titled node, assigned to #$titled, omit to use #$element
+ * @cfg {string|Function} [title] Title text or a function that returns text
*/
-OO.ui.LabeledElement = function OoUiLabeledElement( $label, config ) {
+OO.ui.TitledElement = function OoUiTitledElement( config ) {
// Config intialization
config = config || {};
// Properties
- this.$label = $label;
- this.label = null;
+ this.$titled = null;
+ this.title = null;
// Initialization
- this.$label.addClass( 'oo-ui-labeledElement-label' );
- this.setLabel( config.label || this.constructor.static.label );
- this.autoFitLabel = config.autoFitLabel === undefined || !!config.autoFitLabel;
+ this.setTitle( config.title || this.constructor.static.title );
+ this.setTitledElement( config.$titled || this.$element );
};
/* Setup */
-OO.initClass( OO.ui.LabeledElement );
+OO.initClass( OO.ui.TitledElement );
/* Static Properties */
/**
- * Label.
+ * Title.
*
* @static
* @inheritable
- * @property {string|Function|null} Label text; a function that returns a nodes or text; or null for
- * no label
+ * @property {string|Function} Title text or a function that returns text
*/
-OO.ui.LabeledElement.static.label = null;
+OO.ui.TitledElement.static.title = null;
/* Methods */
/**
- * Set the label.
+ * Set the titled element.
*
- * An empty string will result in the label being hidden. A string containing only whitespace will
- * be converted to a single
+ * If an element is already set, it will be cleaned up before setting up the new element.
*
- * @param {jQuery|string|Function|null} label Label nodes; text; a function that retuns nodes or
- * text; or null for no label
- * @chainable
+ * @param {jQuery} $titled Element to set title on
*/
-OO.ui.LabeledElement.prototype.setLabel = function ( label ) {
- var empty = false;
-
- this.label = label = OO.ui.resolveMsg( label ) || null;
- if ( typeof label === 'string' && label.length ) {
- if ( label.match( /^\s*$/ ) ) {
- // Convert whitespace only string to a single non-breaking space
- this.$label.html( ' ' );
- } else {
- this.$label.text( label );
- }
- } else if ( label instanceof jQuery ) {
- this.$label.empty().append( label );
- } else {
- this.$label.empty();
- empty = true;
+OO.ui.TitledElement.prototype.setTitledElement = function ( $titled ) {
+ if ( this.$titled ) {
+ this.$titled.removeAttr( 'title' );
}
- this.$element.toggleClass( 'oo-ui-labeledElement', !empty );
- this.$label.css( 'display', empty ? 'none' : '' );
- return this;
+ this.$titled = $titled;
+ if ( this.title ) {
+ this.$titled.attr( 'title', this.title );
+ }
};
/**
- * Get the label.
+ * Set title.
*
- * @return {jQuery|string|Function|null} label Label nodes; text; a function that returns nodes or
- * text; or null for no label
+ * @param {string|Function|null} title Title text, a function that returns text or null for no title
+ * @chainable
*/
-OO.ui.LabeledElement.prototype.getLabel = function () {
- return this.label;
+OO.ui.TitledElement.prototype.setTitle = function ( title ) {
+ title = typeof title === 'string' ? OO.ui.resolveMsg( title ) : null;
+
+ if ( this.title !== title ) {
+ if ( this.$titled ) {
+ if ( title !== null ) {
+ this.$titled.attr( 'title', title );
+ } else {
+ this.$titled.removeAttr( 'title' );
+ }
+ }
+ this.title = title;
+ }
+
+ return this;
};
/**
- * Fit the label.
+ * Get title.
*
- * @chainable
+ * @return {string} Title string
*/
-OO.ui.LabeledElement.prototype.fitLabel = function () {
- if ( this.$label.autoEllipsis && this.autoFitLabel ) {
- this.$label.autoEllipsis( { hasSpan: false, tooltip: true } );
- }
- return this;
+OO.ui.TitledElement.prototype.getTitle = function () {
+ return this.title;
};
/**
- * Element containing an OO.ui.PopupWidget object.
+ * Element that can be automatically clipped to visible boundaries.
+ *
+ * Whenever the element's natural height changes, you have to call
+ * #clip to make sure it's still clipping correctly.
*
* @abstract
* @class
*
* @constructor
* @param {Object} [config] Configuration options
- * @cfg {Object} [popup] Configuration to pass to popup
- * @cfg {boolean} [autoClose=true] Popup auto-closes when it loses focus
+ * @cfg {jQuery} [$clippable] Nodes to clip, assigned to #$clippable, omit to use #$element
*/
-OO.ui.PopuppableElement = function OoUiPopuppableElement( config ) {
+OO.ui.ClippableElement = function OoUiClippableElement( config ) {
// Configuration initialization
config = config || {};
// Properties
- this.popup = new OO.ui.PopupWidget( $.extend(
- { autoClose: true },
- config.popup,
- { $: this.$, $autoCloseIgnore: this.$element }
- ) );
+ this.$clippable = null;
+ this.clipping = false;
+ this.clippedHorizontally = false;
+ this.clippedVertically = false;
+ this.$clippableContainer = null;
+ this.$clippableScroller = null;
+ this.$clippableWindow = null;
+ this.idealWidth = null;
+ this.idealHeight = null;
+ this.onClippableContainerScrollHandler = OO.ui.bind( this.clip, this );
+ this.onClippableWindowResizeHandler = OO.ui.bind( this.clip, this );
+
+ // Initialization
+ this.setClippableElement( config.$clippable || this.$element );
};
/* Methods */
/**
- * Get popup.
+ * Set clippable element.
*
- * @return {OO.ui.PopupWidget} Popup widget
+ * If an element is already set, it will be cleaned up before setting up the new element.
+ *
+ * @param {jQuery} $clippable Element to make clippable
*/
-OO.ui.PopuppableElement.prototype.getPopup = function () {
- return this.popup;
+OO.ui.ClippableElement.prototype.setClippableElement = function ( $clippable ) {
+ if ( this.$clippable ) {
+ this.$clippable.removeClass( 'oo-ui-clippableElement-clippable' );
+ this.$clippable.css( { width: '', height: '' } );
+ this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+ this.$clippable.css( { overflowX: '', overflowY: '' } );
+ }
+
+ this.$clippable = $clippable.addClass( 'oo-ui-clippableElement-clippable' );
+ this.clip();
};
/**
- * Element with a title.
- *
- * Titles are rendered by the browser and are made visible when hovering the element. Titles are
- * not visible on touch devices.
+ * Toggle clipping.
*
- * @abstract
- * @class
+ * Do not turn clipping on until after the element is attached to the DOM and visible.
*
- * @constructor
- * @param {jQuery} $label Titled node, assigned to #$titled
- * @param {Object} [config] Configuration options
- * @cfg {string|Function} [title] Title text or a function that returns text
+ * @param {boolean} [clipping] Enable clipping, omit to toggle
+ * @chainable
*/
-OO.ui.TitledElement = function OoUiTitledElement( $titled, config ) {
- // Config intialization
- config = config || {};
+OO.ui.ClippableElement.prototype.toggleClipping = function ( clipping ) {
+ clipping = clipping === undefined ? !this.clipping : !!clipping;
- // Properties
- this.$titled = $titled;
- this.title = null;
+ if ( this.clipping !== clipping ) {
+ this.clipping = clipping;
+ if ( clipping ) {
+ this.$clippableContainer = this.$( this.getClosestScrollableElementContainer() );
+ // If the clippable container is the body, we have to listen to scroll events and check
+ // jQuery.scrollTop on the window because of browser inconsistencies
+ this.$clippableScroller = this.$clippableContainer.is( 'body' ) ?
+ this.$( OO.ui.Element.getWindow( this.$clippableContainer ) ) :
+ this.$clippableContainer;
+ this.$clippableScroller.on( 'scroll', this.onClippableContainerScrollHandler );
+ this.$clippableWindow = this.$( this.getElementWindow() )
+ .on( 'resize', this.onClippableWindowResizeHandler );
+ // Initial clip after visible
+ this.clip();
+ } else {
+ this.$clippable.css( { width: '', height: '' } );
+ this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+ this.$clippable.css( { overflowX: '', overflowY: '' } );
- // Initialization
- this.setTitle( config.title || this.constructor.static.title );
+ this.$clippableContainer = null;
+ this.$clippableScroller.off( 'scroll', this.onClippableContainerScrollHandler );
+ this.$clippableScroller = null;
+ this.$clippableWindow.off( 'resize', this.onClippableWindowResizeHandler );
+ this.$clippableWindow = null;
+ }
+ }
+
+ return this;
};
-/* Setup */
+/**
+ * Check if the element will be clipped to fit the visible area of the nearest scrollable container.
+ *
+ * @return {boolean} Element will be clipped to the visible area
+ */
+OO.ui.ClippableElement.prototype.isClipping = function () {
+ return this.clipping;
+};
-OO.initClass( OO.ui.TitledElement );
+/**
+ * Check if the bottom or right of the element is being clipped by the nearest scrollable container.
+ *
+ * @return {boolean} Part of the element is being clipped
+ */
+OO.ui.ClippableElement.prototype.isClipped = function () {
+ return this.clippedHorizontally || this.clippedVertically;
+};
-/* Static Properties */
+/**
+ * Check if the right of the element is being clipped by the nearest scrollable container.
+ *
+ * @return {boolean} Part of the element is being clipped
+ */
+OO.ui.ClippableElement.prototype.isClippedHorizontally = function () {
+ return this.clippedHorizontally;
+};
/**
- * Title.
+ * Check if the bottom of the element is being clipped by the nearest scrollable container.
*
- * @static
- * @inheritable
- * @property {string|Function} Title text or a function that returns text
+ * @return {boolean} Part of the element is being clipped
*/
-OO.ui.TitledElement.static.title = null;
+OO.ui.ClippableElement.prototype.isClippedVertically = function () {
+ return this.clippedVertically;
+};
-/* Methods */
+/**
+ * Set the ideal size.
+ *
+ * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
+ * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
+ */
+OO.ui.ClippableElement.prototype.setIdealSize = function ( width, height ) {
+ this.idealWidth = width;
+ this.idealHeight = height;
+};
/**
- * Set title.
+ * Clip element to visible boundaries and allow scrolling when needed. Call this method when
+ * the element's natural height changes.
+ *
+ * Element will be clipped the bottom or right of the element is within 10px of the edge of, or
+ * overlapped by, the visible area of the nearest scrollable container.
*
- * @param {string|Function|null} title Title text, a function that returns text or null for no title
* @chainable
*/
-OO.ui.TitledElement.prototype.setTitle = function ( title ) {
- this.title = title = OO.ui.resolveMsg( title ) || null;
+OO.ui.ClippableElement.prototype.clip = function () {
+ if ( !this.clipping ) {
+ // this.$clippableContainer and this.$clippableWindow are null, so the below will fail
+ return this;
+ }
+
+ var buffer = 10,
+ cOffset = this.$clippable.offset(),
+ $container = this.$clippableContainer.is( 'body' ) ?
+ this.$clippableWindow : this.$clippableContainer,
+ ccOffset = $container.offset() || { top: 0, left: 0 },
+ ccHeight = $container.innerHeight() - buffer,
+ ccWidth = $container.innerWidth() - buffer,
+ scrollTop = this.$clippableScroller.scrollTop(),
+ scrollLeft = this.$clippableScroller.scrollLeft(),
+ desiredWidth = ( ccOffset.left + scrollLeft + ccWidth ) - cOffset.left,
+ desiredHeight = ( ccOffset.top + scrollTop + ccHeight ) - cOffset.top,
+ naturalWidth = this.$clippable.prop( 'scrollWidth' ),
+ naturalHeight = this.$clippable.prop( 'scrollHeight' ),
+ clipWidth = desiredWidth < naturalWidth,
+ clipHeight = desiredHeight < naturalHeight;
- if ( typeof title === 'string' && title.length ) {
- this.$titled.attr( 'title', title );
+ if ( clipWidth ) {
+ this.$clippable.css( { overflowX: 'auto', width: desiredWidth } );
} else {
- this.$titled.removeAttr( 'title' );
+ this.$clippable.css( 'width', this.idealWidth || '' );
+ this.$clippable.width(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+ this.$clippable.css( 'overflowX', '' );
+ }
+ if ( clipHeight ) {
+ this.$clippable.css( { overflowY: 'auto', height: desiredHeight } );
+ } else {
+ this.$clippable.css( 'height', this.idealHeight || '' );
+ this.$clippable.height(); // Force reflow for https://code.google.com/p/chromium/issues/detail?id=387290
+ this.$clippable.css( 'overflowY', '' );
}
- return this;
-};
+ this.clippedHorizontally = clipWidth;
+ this.clippedVertically = clipHeight;
-/**
- * Get title.
- *
- * @return {string} Title string
- */
-OO.ui.TitledElement.prototype.getTitle = function () {
- return this.title;
+ return this;
};
/**
* @abstract
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IconElement
*
* @constructor
* @param {OO.ui.ToolGroup} toolGroup
OO.ui.Tool.super.call( this, config );
// Mixin constructors
- OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+ OO.ui.IconElement.call( this, config );
// Properties
this.toolGroup = toolGroup;
/* Setup */
OO.inheritClass( OO.ui.Tool, OO.ui.Widget );
-OO.mixinClass( OO.ui.Tool, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.Tool, OO.ui.IconElement );
/* Events */
// Mixin constructors
OO.EventEmitter.call( this );
- OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+ OO.ui.GroupElement.call( this, config );
// Properties
this.toolFactory = toolFactory;
OO.ui.ToolGroup.super.call( this, config );
// Mixin constructors
- OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+ OO.ui.GroupElement.call( this, config );
// Properties
this.toolbar = toolbar;
*
* @class
* @extends OO.ui.Layout
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.LabelElement
*
* Available label alignment modes include:
* - left: Label is before the field and aligned away from it, best for when the user will be
* @cfg {string} [help] Explanatory text shown as a '?' icon.
*/
OO.ui.FieldLayout = function OoUiFieldLayout( field, config ) {
- var popupButtonWidget;
// Config initialization
config = $.extend( { align: 'left' }, config );
OO.ui.FieldLayout.super.call( this, config );
// Mixin constructors
- this.$help = this.$( '<div>' );
- OO.ui.LabeledElement.call( this, this.$( '<label>' ), config );
- if ( config.help ) {
- popupButtonWidget = new OO.ui.PopupButtonWidget( $.extend(
- {
- $: this.$,
- frameless: true,
- icon: 'info',
- title: config.help
- },
- config,
- { label: null }
- ) );
- popupButtonWidget.getPopup().$body.append( this.getElementDocument().createTextNode( config.help ) );
- this.$help = popupButtonWidget.$element;
- }
+ OO.ui.LabelElement.call( this, config );
// Properties
this.$field = this.$( '<div>' );
this.field = field;
this.align = null;
+ if ( config.help ) {
+ this.popupButtonWidget = new OO.ui.PopupButtonWidget( {
+ $: this.$,
+ frameless: true,
+ icon: 'info',
+ title: config.help
+ } );
+
+ this.popupButtonWidget.getPopup().$body.append( this.$( '<span>' ).text( config.help ) );
+ this.$help = this.popupButtonWidget.$element;
+ } else {
+ this.$help = this.$( '<div>' );
+ }
// Events
if ( this.field instanceof OO.ui.InputWidget ) {
/* Setup */
OO.inheritClass( OO.ui.FieldLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.FieldLayout, OO.ui.LabelElement );
/* Methods */
*
* @class
* @extends OO.ui.Layout
- * @mixins OO.ui.LabeledElement
- * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.IconElement
* @mixins OO.ui.GroupElement
*
* @constructor
OO.ui.FieldsetLayout.super.call( this, config );
// Mixin constructors
- OO.ui.IconedElement.call( this, this.$( '<div>' ), config );
- OO.ui.LabeledElement.call( this, this.$( '<div>' ), config );
- OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.GroupElement.call( this, config );
// Initialization
this.$element
/* Setup */
OO.inheritClass( OO.ui.FieldsetLayout, OO.ui.Layout );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.IconElement );
+OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.LabelElement );
OO.mixinClass( OO.ui.FieldsetLayout, OO.ui.GroupElement );
/* Static Properties */
OO.ui.StackLayout.super.call( this, config );
// Mixin constructors
- OO.ui.GroupElement.call( this, this.$element, config );
+ OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
// Properties
this.currentItem = null;
* @abstract
* @class
* @extends OO.ui.ToolGroup
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
* @mixins OO.ui.TitledElement
* @mixins OO.ui.ClippableElement
*
OO.ui.PopupToolGroup.super.call( this, toolbar, config );
// Mixin constructors
- OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
- OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
- OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
- OO.ui.TitledElement.call( this, this.$element, config );
- OO.ui.ClippableElement.call( this, this.$group, config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, config );
+ OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
// Properties
this.active = false;
/* Setup */
OO.inheritClass( OO.ui.PopupToolGroup, OO.ui.ToolGroup );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatedElement );
-OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IconElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.LabelElement );
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.TitledElement );
OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.ClippableElement );
if ( this.active !== value ) {
this.active = value;
if ( value ) {
- this.setClipping( true );
- this.$element.addClass( 'oo-ui-popupToolGroup-active' );
this.getElementDocument().addEventListener( 'mouseup', this.onBlurHandler, true );
+
+ // Try anchoring the popup to the left first
+ this.$element.addClass( 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left' );
+ this.toggleClipping( true );
+ if ( this.isClippedHorizontally() ) {
+ // Anchoring to the left caused the popup to clip, so anchor it to the right instead
+ this.toggleClipping( false );
+ this.$element
+ .removeClass( 'oo-ui-popupToolGroup-left' )
+ .addClass( 'oo-ui-popupToolGroup-right' );
+ this.toggleClipping( true );
+ }
} else {
- this.setClipping( false );
- this.$element.removeClass( 'oo-ui-popupToolGroup-active' );
this.getElementDocument().removeEventListener( 'mouseup', this.onBlurHandler, true );
+ this.$element.removeClass(
+ 'oo-ui-popupToolGroup-active oo-ui-popupToolGroup-left oo-ui-popupToolGroup-right'
+ );
+ this.toggleClipping( false );
}
}
};
* @abstract
* @class
* @extends OO.ui.Tool
- * @mixins OO.ui.PopuppableElement
+ * @mixins OO.ui.PopupElement
*
* @constructor
* @param {OO.ui.Toolbar} toolbar
OO.ui.PopupTool.super.call( this, toolbar, config );
// Mixin constructors
- OO.ui.PopuppableElement.call( this, config );
+ OO.ui.PopupElement.call( this, config );
// Initialization
this.$element
/* Setup */
OO.inheritClass( OO.ui.PopupTool, OO.ui.Tool );
-OO.mixinClass( OO.ui.PopupTool, OO.ui.PopuppableElement );
+OO.mixinClass( OO.ui.PopupTool, OO.ui.PopupElement );
/* Methods */
* @extends OO.ui.GroupElement
*
* @constructor
- * @param {jQuery} $group Container node, assigned to #$group
* @param {Object} [config] Configuration options
*/
-OO.ui.GroupWidget = function OoUiGroupWidget( $element, config ) {
+OO.ui.GroupWidget = function OoUiGroupWidget( config ) {
// Parent constructor
- OO.ui.GroupWidget.super.call( this, $element, config );
+ OO.ui.GroupWidget.super.call( this, config );
};
/* Setup */
* @class
* @extends OO.ui.Widget
* @mixins OO.ui.GroupElement
- * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IconElement
*
* @constructor
* @param {OO.ui.OutlineWidget} outline Outline to control
OO.ui.OutlineControlsWidget.super.call( this, config );
// Mixin constructors
- OO.ui.GroupElement.call( this, this.$( '<div>' ), config );
- OO.ui.IconedElement.call( this, this.$( '<div>' ), config );
+ OO.ui.GroupElement.call( this, config );
+ OO.ui.IconElement.call( this, config );
// Properties
this.outline = outline;
OO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );
OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.GroupElement );
-OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.IconElement );
/* Events */
OO.ui.ButtonGroupWidget.super.call( this, config );
// Mixin constructors
- OO.ui.GroupElement.call( this, this.$element, config );
+ OO.ui.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );
// Initialization
this.$element.addClass( 'oo-ui-buttonGroupWidget' );
*
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.ButtonedElement
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.ButtonElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
* @mixins OO.ui.TitledElement
- * @mixins OO.ui.FlaggableElement
+ * @mixins OO.ui.FlaggedElement
*
* @constructor
* @param {Object} [config] Configuration options
OO.ui.ButtonWidget.super.call( this, config );
// Mixin constructors
- OO.ui.ButtonedElement.call( this, this.$( '<a>' ), config );
- OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
- OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
- OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
- OO.ui.TitledElement.call( this, this.$button, config );
- OO.ui.FlaggableElement.call( this, config );
+ OO.ui.ButtonElement.call( this, config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, config, $.extend( {}, config, { $titled: this.$button } ) );
+ OO.ui.FlaggedElement.call( this, config );
// Properties
this.href = null;
/* Setup */
OO.inheritClass( OO.ui.ButtonWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonedElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatedElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.ButtonElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.LabelElement );
OO.mixinClass( OO.ui.ButtonWidget, OO.ui.TitledElement );
-OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggableElement );
+OO.mixinClass( OO.ui.ButtonWidget, OO.ui.FlaggedElement );
/* Events */
*/
OO.ui.ActionWidget.prototype.setIcon = function () {
// Mixin method
- OO.ui.IconedElement.prototype.setIcon.apply( this, arguments );
+ OO.ui.IconElement.prototype.setIcon.apply( this, arguments );
this.propagateResize();
return this;
*/
OO.ui.ActionWidget.prototype.setLabel = function () {
// Mixin method
- OO.ui.LabeledElement.prototype.setLabel.apply( this, arguments );
+ OO.ui.LabelElement.prototype.setLabel.apply( this, arguments );
this.propagateResize();
return this;
*/
OO.ui.ActionWidget.prototype.setFlags = function () {
// Mixin method
- OO.ui.FlaggableElement.prototype.setFlags.apply( this, arguments );
+ OO.ui.FlaggedElement.prototype.setFlags.apply( this, arguments );
this.propagateResize();
return this;
*/
OO.ui.ActionWidget.prototype.clearFlags = function () {
// Mixin method
- OO.ui.FlaggableElement.prototype.clearFlags.apply( this, arguments );
+ OO.ui.FlaggedElement.prototype.clearFlags.apply( this, arguments );
this.propagateResize();
return this;
*
* @class
* @extends OO.ui.ButtonWidget
- * @mixins OO.ui.PopuppableElement
+ * @mixins OO.ui.PopupElement
*
* @constructor
* @param {Object} [config] Configuration options
OO.ui.PopupButtonWidget.super.call( this, config );
// Mixin constructors
- OO.ui.PopuppableElement.call( this, config );
+ OO.ui.PopupElement.call( this, config );
// Initialization
this.$element
/* Setup */
OO.inheritClass( OO.ui.PopupButtonWidget, OO.ui.ButtonWidget );
-OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopuppableElement );
+OO.mixinClass( OO.ui.PopupButtonWidget, OO.ui.PopupElement );
/* Methods */
/**
* Icon widget.
*
+ * See OO.ui.IconElement for more information.
+ *
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IconElement
* @mixins OO.ui.TitledElement
*
* @constructor
OO.ui.IconWidget.super.call( this, config );
// Mixin constructors
- OO.ui.IconedElement.call( this, this.$element, config );
- OO.ui.TitledElement.call( this, this.$element, config );
+ OO.ui.IconElement.call( this, $.extend( {}, config, { $icon: this.$element } ) );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
// Initialization
this.$element.addClass( 'oo-ui-iconWidget' );
/* Setup */
OO.inheritClass( OO.ui.IconWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IconWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.IconWidget, OO.ui.IconElement );
OO.mixinClass( OO.ui.IconWidget, OO.ui.TitledElement );
/* Static Properties */
/**
* Indicator widget.
*
- * See OO.ui.IndicatedElement for more information.
+ * See OO.ui.IndicatorElement for more information.
*
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.IndicatorElement
* @mixins OO.ui.TitledElement
*
* @constructor
OO.ui.IndicatorWidget.super.call( this, config );
// Mixin constructors
- OO.ui.IndicatedElement.call( this, this.$element, config );
- OO.ui.TitledElement.call( this, this.$element, config );
+ OO.ui.IndicatorElement.call( this, $.extend( {}, config, { $indicator: this.$element } ) );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$element } ) );
// Initialization
this.$element.addClass( 'oo-ui-indicatorWidget' );
/* Setup */
OO.inheritClass( OO.ui.IndicatorWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.IndicatorElement );
OO.mixinClass( OO.ui.IndicatorWidget, OO.ui.TitledElement );
/* Static Properties */
*
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
+ * @mixins OO.ui.LabelElement
* @mixins OO.ui.TitledElement
*
* @constructor
OO.ui.InlineMenuWidget.super.call( this, config );
// Mixin constructors
- OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
- OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
- OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
- OO.ui.TitledElement.call( this, this.$label, config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.TitledElement.call( this, $.extend( {}, config, { $titled: this.$label } ) );
// Properties
this.menu = new OO.ui.MenuWidget( $.extend( { $: this.$, widget: this }, config.menu ) );
/* Setup */
OO.inheritClass( OO.ui.InlineMenuWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IndicatedElement );
-OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.IndicatorElement );
+OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.LabelElement );
OO.mixinClass( OO.ui.InlineMenuWidget, OO.ui.TitledElement );
/* Methods */
*
* @class
* @extends OO.ui.InputWidget
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
*
* @constructor
* @param {Object} [config] Configuration options
OO.ui.TextInputWidget.super.call( this, config );
// Mixin constructors
- OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
- OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
// Properties
this.pending = 0;
/* Setup */
OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatorElement );
/* Events */
*
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.LabelElement
*
* @constructor
* @param {Object} [config] Configuration options
OO.ui.LabelWidget.super.call( this, config );
// Mixin constructors
- OO.ui.LabeledElement.call( this, this.$element, config );
+ OO.ui.LabelElement.call( this, $.extend( {}, config, { $label: this.$element } ) );
// Properties
this.input = config.input;
/* Setup */
OO.inheritClass( OO.ui.LabelWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.LabelWidget, OO.ui.LabelElement );
/* Static Properties */
-OO.ui.LabelWidget.static.tagName = 'label';
+OO.ui.LabelWidget.static.tagName = 'span';
/* Methods */
*
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.LabeledElement
- * @mixins OO.ui.FlaggableElement
+ * @mixins OO.ui.LabelElement
+ * @mixins OO.ui.FlaggedElement
*
* @constructor
* @param {Mixed} data Option data
// Mixin constructors
OO.ui.ItemWidget.call( this );
- OO.ui.LabeledElement.call( this, this.$( '<span>' ), config );
- OO.ui.FlaggableElement.call( this, config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.FlaggedElement.call( this, config );
// Properties
this.data = data;
OO.inheritClass( OO.ui.OptionWidget, OO.ui.Widget );
OO.mixinClass( OO.ui.OptionWidget, OO.ui.ItemWidget );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabeledElement );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggableElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.LabelElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.FlaggedElement );
/* Static Properties */
-OO.ui.OptionWidget.static.tagName = 'li';
-
OO.ui.OptionWidget.static.selectable = true;
OO.ui.OptionWidget.static.highlightable = true;
*
* @class
* @extends OO.ui.OptionWidget
- * @mixins OO.ui.IconedElement
- * @mixins OO.ui.IndicatedElement
+ * @mixins OO.ui.IconElement
+ * @mixins OO.ui.IndicatorElement
*
* @constructor
* @param {Mixed} data Option data
OO.ui.DecoratedOptionWidget.super.call( this, data, config );
// Mixin constructors
- OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
- OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+ OO.ui.IconElement.call( this, config );
+ OO.ui.IndicatorElement.call( this, config );
// Initialization
this.$element
/* Setup */
OO.inheritClass( OO.ui.DecoratedOptionWidget, OO.ui.OptionWidget );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconedElement );
-OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatedElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IconElement );
+OO.mixinClass( OO.ui.OptionWidget, OO.ui.IndicatorElement );
/**
* Option widget that looks like a button.
*
* @class
* @extends OO.ui.DecoratedOptionWidget
- * @mixins OO.ui.ButtonedElement
+ * @mixins OO.ui.ButtonElement
*
* @constructor
* @param {Mixed} data Option data
OO.ui.ButtonOptionWidget.super.call( this, data, config );
// Mixin constructors
- OO.ui.ButtonedElement.call( this, this.$( '<a>' ), config );
+ OO.ui.ButtonElement.call( this, config );
// Initialization
this.$element.addClass( 'oo-ui-buttonOptionWidget' );
/* Setup */
OO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.DecoratedOptionWidget );
-OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonedElement );
+OO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.ButtonElement );
/* Static Properties */
*
* @class
* @extends OO.ui.Widget
- * @mixins OO.ui.LabeledElement
+ * @mixins OO.ui.LabelElement
*
* @constructor
* @param {Object} [config] Configuration options
OO.ui.PopupWidget.super.call( this, config );
// Mixin constructors
- OO.ui.LabeledElement.call( this, this.$( '<div>' ), config );
- OO.ui.ClippableElement.call( this, this.$( '<div>' ), config );
+ OO.ui.LabelElement.call( this, config );
+ OO.ui.ClippableElement.call( this, config );
// Properties
this.visible = false;
this.$popup = this.$( '<div>' );
this.$head = this.$( '<div>' );
- this.$body = this.$clippable;
+ this.$body = this.$( '<div>' );
this.$anchor = this.$( '<div>' );
this.$container = config.$container || this.$( 'body' );
this.autoClose = !!config.autoClose;
if ( config.padded ) {
this.$body.addClass( 'oo-ui-popupWidget-body-padded' );
}
+ this.setClippableElement( this.$body );
};
/* Setup */
OO.inheritClass( OO.ui.PopupWidget, OO.ui.Widget );
-OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabeledElement );
+OO.mixinClass( OO.ui.PopupWidget, OO.ui.LabelElement );
OO.mixinClass( OO.ui.PopupWidget, OO.ui.ClippableElement );
/* Events */
if ( change ) {
if ( show ) {
- this.setClipping( true );
+ this.toggleClipping( true );
if ( this.autoClose ) {
this.bindMouseDownListener();
}
this.updateDimensions();
} else {
- this.setClipping( false );
+ this.toggleClipping( false );
if ( this.autoClose ) {
this.unbindMouseDownListener();
}
OO.ui.SelectWidget.super.call( this, config );
// Mixin constructors
- OO.ui.GroupWidget.call( this, this.$element, config );
+ OO.ui.GroupWidget.call( this, $.extend( {}, config, { $group: this.$element } ) );
// Properties
this.pressed = false;
* @param {OO.ui.OptionWidget[]} items Removed items
*/
-/* Static Properties */
-
-OO.ui.SelectWidget.static.tagName = 'ul';
-
/* Methods */
/**
OO.ui.MenuWidget.super.call( this, config );
// Mixin constructors
- OO.ui.ClippableElement.call( this, this.$group, config );
+ OO.ui.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
// Properties
this.flashing = false;
};
/**
- * Add items.
- *
- * Adding an existing item (by value) will move it.
- *
- * @param {OO.ui.MenuItemWidget[]} items Items to add
- * @param {number} [index] Index to insert items after
- * @chainable
+ * @inheritdoc
*/
OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
var i, len, item;
for ( i = 0, len = items.length; i < len; i++ ) {
item = items[i];
if ( this.isVisible() ) {
- // Defer fitting label until
+ // Defer fitting label until item has been attached
item.fitLabel();
} else {
this.newItems.push( item );
}
}
+ // Reevaluate clipping
+ this.clip();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuWidget.prototype.removeItems = function ( items ) {
+ // Parent method
+ OO.ui.MenuWidget.super.prototype.removeItems.call( this, items );
+
+ // Reevaluate clipping
+ this.clip();
+
+ return this;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuWidget.prototype.clearItems = function () {
+ // Parent method
+ OO.ui.MenuWidget.super.prototype.clearItems.call( this );
+
+ // Reevaluate clipping
+ this.clip();
+
return this;
};
}
this.newItems = null;
}
- this.setClipping( true );
+ this.toggleClipping( true );
// Auto-hide
if ( this.autoHide ) {
this.getElementDocument().removeEventListener(
'mousedown', this.onDocumentMouseDownHandler, true
);
- this.setClipping( false );
+ this.toggleClipping( false );
}
}
/**
* Menu for a text input widget.
*
- * This menu is specially designed to be positioned beneeth the text input widget. Even if the input
+ * This menu is specially designed to be positioned beneath the text input widget. Even if the input
* is in a different frame, the menu's position is automatically calulated and maintained when the
* menu is toggled or the window is resized.
*
+++ /dev/null
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-/* Textures */
-
-.oo-ui-texture-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-
-.oo-ui-texture-transparency {
- background-image: /* @embed */ url(images/textures/transparency.png);
-}
-
-/* RTL Definitions */
-
-/* @noflip */
-
-.oo-ui-rtl {
- direction: rtl;
-}
-
-/* @noflip */
-
-.oo-ui-ltr {
- direction: ltr;
-}
-
-.oo-ui-frame {
- padding: 0;
- margin: 0;
-}
-
-.oo-ui-frame-body {
- padding: 0;
- margin: 0;
- background: none;
-}
-
-.oo-ui-frame-content:focus {
- outline: none;
-}
-
-.oo-ui-toolbar {
- clear: both;
-}
-
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-
-.oo-ui-toolbar-bottom .oo-ui-toolbar-bar {
- position: absolute;
-}
-
-.oo-ui-toolbar-actions {
- float: left;
-}
-
-.oo-ui-toolbar-tools {
- float: right;
-}
-
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
- -webkit-touch-callout: default;
-}
-
-.oo-ui-toolbar-shadow {
- position: absolute;
- width: 100%;
- pointer-events: none;
- background-position: right top;
- background-repeat: repeat-x;
-}
-
-.oo-ui-toolGroup {
- display: inline-block;
- margin: 0.3em;
- vertical-align: middle;
-}
-
-.oo-ui-toolGroup-empty {
- display: none;
-}
-
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-window {
- line-height: 1em;
-}
-
-.oo-ui-window > .oo-ui-window-frame {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-window > .oo-ui-window-frame > .oo-ui-frame {
- width: 100%;
- height: 100%;
-}
-
-.oo-ui-window-head,
-.oo-ui-window-foot {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- right: 0;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- position: fixed;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- width: auto;
- height: auto;
- padding: 1em;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
- position: fixed;
- left: 0;
- right: 0;
- max-width: 100%;
- max-height: 100%;
- margin: auto;
- overflow: hidden;
-}
-
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
- top: 0;
- bottom: 0;
- width: 100%;
- height: 100%;
-}
-
-.oo-ui-messageDialog-actions-horizontal {
- display: table;
- width: 100%;
- table-layout: fixed;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- display: table-cell;
- width: 1%;
-}
-
-.oo-ui-messageDialog-actions-vertical {
- display: block;
-}
-
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
- position: relative;
- text-align: center;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- display: block;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
- position: relative;
- top: auto;
- bottom: auto;
- display: inline;
- white-space: nowrap;
-}
-
-.oo-ui-processDialog-location {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.oo-ui-processDialog-title {
- display: inline;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
- white-space: nowrap;
-}
-
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-
-.oo-ui-processDialog-actions-safe {
- right: 0;
-}
-
-.oo-ui-processDialog-actions-primary {
- left: 0;
-}
-
-.oo-ui-processDialog-errors {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- z-index: 2;
- display: none;
- padding: 3em 3em 1.5em 3em;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: none;
- margin-right: 0;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
- display: none;
- margin-left: -0.75em;
-}
-
-.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button {
- cursor: default;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-buttonedElement-frameless {
- position: relative;
- display: inline-block;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- margin-right: 0.25em;
- vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
- display: inline-block;
- text-align: center;
- vertical-align: top;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- line-height: 1.9em;
- vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
- cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 3em;
- right: 0;
- overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- left: 0;
- bottom: 0;
- right: 0;
-}
-
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- display: table;
- content: " ";
-}
-
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- display: block;
- float: right;
- width: 35%;
- padding-top: 0.5em;
- margin-left: 5%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: right;
- width: 60%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- text-align: left;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
- display: inline-block;
- padding: 0.75em 0.5em 0.5em 0.5em;
- vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- padding: 0.5em 0;
- vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
- display: inline-block;
- padding: 0.5em 0;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- margin-top: 0.25em;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
- z-index: 1;
-}
-
-.oo-ui-fieldsetLayout {
- position: relative;
- padding: 0;
- margin: 0;
-}
-
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-
-.oo-ui-fieldsetLayout-labeled {
- margin-top: -0.75em;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
- padding: 0.25em 0;
- margin-bottom: 0.5em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
- padding-right: 1.75em;
- line-height: 1.33em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0.25em;
- right: 0;
- display: block;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-}
-
-.oo-ui-labelWidget {
- display: inline-block;
- padding: 0.5em 0;
-}
-
-.oo-ui-panelLayout {
- position: relative;
-}
-
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-
-.oo-ui-panelLayout-expanded {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-}
-
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- position: relative;
- display: block;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
- display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
- position: relative;
- display: inline-block;
- vertical-align: top;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
- height: 1.5em;
- padding: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: block;
- width: 1.5em;
- height: 1.5em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- padding-left: 0.5em;
- white-space: nowrap;
- cursor: pointer;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em 0 0.25em 0;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- padding: 0 0.25em 0 1em;
- white-space: nowrap;
- cursor: pointer;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: none;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
- min-width: 3.5em;
-}
-
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
- left: 0;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- right: 0.25em;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin: 0 1em;
- font-size: 0.8em;
- line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup-header {
- margin: 0 0.6em;
- font-size: 0.8em;
- font-weight: bold;
- line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-right: 3em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-left: 2.25em;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- position: absolute;
- top: 2em;
- right: -1px;
- z-index: 4;
- display: none;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: inline-block;
- width: 2em;
- height: 2em;
- margin-left: 0.25em;
- vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- font-size: 0.8em;
- line-height: 2em;
- vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-right: 1.25em;
- font-size: 0.8em;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
- z-index: 4;
-}
-
-.oo-ui-iconWidget {
- display: inline-block;
- width: 1.9em;
- height: 1.9em;
- line-height: 2.5em;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
- display: inline-block;
- width: 1.9em;
- height: 1.9em;
- line-height: 2.5em;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- margin: 0;
- list-style: none;
- cursor: pointer;
- border: none;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
- display: block;
- overflow: hidden;
- line-height: 1.5em;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
- position: absolute;
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon {
- right: 0.5em;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
- left: 0.5em;
-}
-
-.oo-ui-menuWidget {
- position: absolute;
-}
-
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-
-.oo-ui-popupWidget-popup {
- position: absolute;
- z-index: 1;
- overflow: hidden;
-}
-
-.oo-ui-popupWidget-anchor {
- z-index: 1;
- display: none;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- position: absolute;
- display: block;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupWidget-head {
- height: 2.5em;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: left;
- margin: 0.25em;
-}
-
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
- float: right;
- margin: 0.75em 1em;
- cursor: default;
-}
-
-.oo-ui-popupWidget-body {
- overflow: hidden;
- clear: both;
-}
-
-.oo-ui-popupWidget-body-padded {
- padding: 0 1em;
-}
-
-.oo-ui-buttonGroupWidget {
- border-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- margin-bottom: -1px;
- margin-right: -1px;
- border-radius: 0;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
- margin-right: 0;
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
- border-top-left-radius: 0.3em;
- border-bottom-left-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- background-color: transparent;
-}
-
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
- position: relative;
- height: 1.9em;
-}
-
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- position: static;
- display: inline-block;
- height: 1.9em;
- margin-top: 0;
- vertical-align: middle;
-}
-
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- min-width: 20em;
- margin: 0.25em 0;
-}
-
-.oo-ui-inlineMenuWidget-handle {
- display: inline-block;
- width: 100%;
- height: 2.5em;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2.5em;
- height: 2.5em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
- left: 0;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- right: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin: 0 0.5em;
- line-height: 2.5em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-right: 3em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-left: 2em;
-}
-
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- z-index: 1;
- width: 100%;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-
-.oo-ui-menuItemWidget {
- position: relative;
-}
-
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
- display: none;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
- display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
- cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
- height: 3em;
-}
-
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- float: right;
- height: 2em;
- padding: 0;
- margin: 0.5em;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
- float: right;
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0.5em 0.5em 0;
- background-position: left center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-outlineControlsWidget-items {
- float: right;
- margin-right: 0;
-}
-
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
- float: right;
-}
-
-.oo-ui-outlineControlsWidget-movers {
- float: left;
-}
-
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: left;
-}
-
-.oo-ui-outlineItemWidget {
- position: relative;
- padding: 0.75em;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- right: 1em;
- cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- height: 4em;
- padding: 0 1em;
-}
-
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
- margin: 0.75em 0;
-}
-
-.oo-ui-searchWidget-results {
- position: absolute;
- top: 4em;
- left: 0;
- bottom: 0;
- right: 0;
- padding: 1em;
- overflow-x: hidden;
- overflow-y: auto;
- line-height: 0;
-}
-
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- resize: none;
-}
-
-.oo-ui-textInputWidget-icon {
- position: absolute;
- top: 0;
- right: 0;
- height: 100%;
- background-position: left center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- width: 4em;
- height: 2em;
- overflow: hidden;
- vertical-align: middle;
- cursor: pointer;
- -webkit-transform: translateZ(0);
- -moz-transform: translateZ(0);
- -ms-transform: translateZ(0);
- -o-transform: translateZ(0);
- transform: translateZ(0);
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- top: 0.25em;
- right: 0.25em;
- display: block;
- width: 1.5em;
- height: 1.5em;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- right: 2.25em;
- margin-right: -2px;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- right: 0.25em;
- margin-right: 0;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-
-/* Icons */
-
-.oo-ui-icon-add-item {
- background-image: /* @embed */ url(images/icons/add-item.png);
-}
-
-.oo-ui-icon-advanced {
- background-image: /* @embed */ url(images/icons/advanced.png);
-}
-
-.oo-ui-icon-alert {
- background-image: /* @embed */ url(images/icons/alert.png);
-}
-
-.oo-ui-icon-check {
- background-image: /* @embed */ url(images/icons/check.png);
-}
-
-.oo-ui-icon-clear {
- background-image: /* @embed */ url(images/icons/clear.png);
-}
-
-.oo-ui-icon-close {
- background-image: /* @embed */ url(images/icons/close.png);
-}
-
-.oo-ui-icon-code {
- background-image: /* @embed */ url(images/icons/code.png);
-}
-
-.oo-ui-icon-collapse {
- background-image: /* @embed */ url(images/icons/collapse.png);
-}
-
-.oo-ui-icon-comment {
- background-image: /* @embed */ url(images/icons/comment.png);
-}
-
-.oo-ui-icon-expand {
- background-image: /* @embed */ url(images/icons/expand.png);
-}
-
-.oo-ui-icon-help {
- background-image: /* @embed */ url(images/icons/help.png);
-}
-
-.oo-ui-icon-info {
- background-image: /* @embed */ url(images/icons/info.png);
-}
-
-.oo-ui-icon-link {
- background-image: /* @embed */ url(images/icons/link.png);
-}
-
-.oo-ui-icon-menu {
- background-image: /* @embed */ url(images/icons/menu.png);
-}
-
-.oo-ui-icon-next {
- background-image: /* @embed */ url(images/icons/move-rtl.png);
-}
-
-.oo-ui-icon-picture {
- background-image: /* @embed */ url(images/icons/picture.png);
-}
-
-.oo-ui-icon-previous {
- background-image: /* @embed */ url(images/icons/move-ltr.png);
-}
-
-.oo-ui-icon-redo {
- background-image: /* @embed */ url(images/icons/arched-arrow-rtl.png);
-}
-
-.oo-ui-icon-remove {
- background-image: /* @embed */ url(images/icons/remove.png);
-}
-
-.oo-ui-icon-search {
- background-image: /* @embed */ url(images/icons/search.png);
-}
-
-.oo-ui-icon-settings {
- background-image: /* @embed */ url(images/icons/settings.png);
-}
-
-.oo-ui-icon-tag {
- background-image: /* @embed */ url(images/icons/tag.png);
-}
-
-.oo-ui-icon-undo {
- background-image: /* @embed */ url(images/icons/arched-arrow-ltr.png);
-}
-
-.oo-ui-icon-window {
- background-image: /* @embed */ url(images/icons/window.png);
-}
-
-/* Indicators */
-
-.oo-ui-indicator-alert {
- background-image: /* @embed */ url(images/indicators/alert.png);
-}
-
-.oo-ui-indicator-down {
- background-image: /* @embed */ url(images/indicators/arrow-down.png);
-}
-
-.oo-ui-indicator-next {
- background-image: /* @embed */ url(images/indicators/arrow-rtl.png);
-}
-
-.oo-ui-indicator-previous {
- background-image: /* @embed */ url(images/indicators/arrow-ltr.png);
-}
-
-.oo-ui-indicator-required {
- background-image: /* @embed */ url(images/indicators/required.png);
-}
-
-.oo-ui-indicator-up {
- background-image: /* @embed */ url(images/indicators/arrow-up.png);
-}
\ No newline at end of file
/*!
- * OOjs UI v0.1.0-pre (d6008381aa)
+ * OOjs UI v0.1.0-pre (72f047e5d8)
* https://www.mediawiki.org/wiki/OOjs_UI
*
* Copyright 2011–2014 OOjs Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2014-08-21T23:45:56Z
+ * Date: 2014-09-06T00:15:06Z
+ */
+/*
+ * Blank theme mixins.
+ *
+ * Base styles invoke these mixins at the end of their definitions. Override these mixins to add
+ * additional rules to the base styles.
*/
-/* Textures */
-.oo-ui-texture-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-.oo-ui-texture-transparency {
- background-image: /* @embed */ url(images/textures/transparency.png);
-}
-/* RTL Definitions */
-/* @noflip */
-.oo-ui-rtl {
- direction: rtl;
-}
-/* @noflip */
-.oo-ui-ltr {
- direction: ltr;
-}
-
-.oo-ui-toolbar {
- clear: both;
-}
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-.oo-ui-toolbar-actions {
- float: right;
-}
-.oo-ui-toolbar-tools {
- float: left;
-}
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-touch-callout: default;
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
-}
-.oo-ui-toolbar-shadow {
- background-position: left top;
- background-repeat: repeat-x;
- position: absolute;
- width: 100%;
- pointer-events: none;
-}
-
-.oo-ui-toolGroup {
- display: inline-block;
- margin: 0.3em;
- vertical-align: middle;
-}
-.oo-ui-toolGroup-empty {
- display: none;
-}
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-window {
- line-height: 1em;
- /* Content div takes focus when opened, so hide outline */
-}
-.oo-ui-window-frame {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
- margin: 0;
- padding: 0;
-}
-.oo-ui-window-content:focus {
- outline: none;
-}
-.oo-ui-window-head,
-.oo-ui-window-foot {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-window-body {
- margin: 0;
- padding: 0;
- background: none;
-}
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- left: 0;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- position: fixed;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
- width: auto;
- height: auto;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1em;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
- position: fixed;
- right: 0;
- left: 0;
- margin: auto;
- overflow: hidden;
- max-width: 100%;
- max-height: 100%;
-}
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
- width: 100%;
- height: 100%;
-}
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
- width: 100%;
- height: 100%;
- top: 0;
- bottom: 0;
-}
-
-.oo-ui-messageDialog-actions-horizontal {
- display: table;
- table-layout: fixed;
- width: 100%;
-}
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- display: table-cell;
- width: 1%;
-}
-.oo-ui-messageDialog-actions-vertical {
- display: block;
-}
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
- position: relative;
- text-align: center;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- display: block;
-}
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
- position: relative;
- top: auto;
- bottom: auto;
- display: inline;
- white-space: nowrap;
-}
-
-.oo-ui-processDialog-location {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-.oo-ui-processDialog-title {
- display: inline;
-}
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
- white-space: nowrap;
-}
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-.oo-ui-processDialog-actions-safe {
- left: 0;
-}
-.oo-ui-processDialog-actions-primary {
- right: 0;
-}
-.oo-ui-processDialog-errors {
- display: none;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- padding: 3em 3em 1.5em 3em;
- z-index: 2;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
- cursor: pointer;
- display: inline-block;
- vertical-align: middle;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: none;
- margin-left: 0;
-}
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
- display: none;
- margin-right: -0.75em;
-}
-.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button {
- cursor: default;
-}
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-buttonedElement-frameless {
- display: inline-block;
- position: relative;
-}
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- vertical-align: middle;
- margin-left: 0.25em;
-}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
- display: inline-block;
- vertical-align: top;
- text-align: center;
-}
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- vertical-align: middle;
- line-height: 1.9em;
-}
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
- cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 3em;
- overflow-y: auto;
-}
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
-}
-
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- content: " ";
- display: table;
-}
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- display: block;
- float: left;
- width: 35%;
- padding-top: 0.5em;
- margin-right: 5%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: left;
- width: 60%;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- text-align: right;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
- display: inline-block;
- vertical-align: middle;
- padding: 0.75em 0.5em 0.5em 0.5em;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- vertical-align: middle;
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
- display: inline-block;
- padding: 0.5em 0;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- margin-top: 0.25em;
-}
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
- z-index: 1;
-}
-
-.oo-ui-fieldsetLayout {
- position: relative;
- margin: 0;
- padding: 0;
-}
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
- margin-bottom: 0.5em;
- padding: 0.25em 0;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
- padding-left: 1.75em;
- line-height: 1.33em;
-}
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
- display: block;
- position: absolute;
- left: 0;
- top: 0.25em;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-
-.oo-ui-labelWidget {
- display: inline-block;
- padding: 0.5em 0;
-}
-
-.oo-ui-panelLayout {
- position: relative;
-}
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-.oo-ui-panelLayout-expanded {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
-}
-
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- display: block;
- position: relative;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool {
- display: inline-block;
- position: relative;
- vertical-align: top;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
- height: 1.5em;
- padding: 0.25em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: block;
- height: 1.5em;
- width: 1.5em;
-}
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
- padding-right: 0.5em;
-}
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em 0 0.25em 0;
-}
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- cursor: pointer;
- white-space: nowrap;
- padding: 0 1em 0 0.25em;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: none;
-}
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
- min-width: 3.5em;
-}
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
- right: 0;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- left: 0.25em;
-}
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 1em;
-}
-.oo-ui-popupToolGroup-header {
- line-height: 2.6em;
- font-size: 0.8em;
- margin: 0 0.6em;
- font-weight: bold;
-}
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-left: 3em;
-}
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-right: 2.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- display: none;
- position: absolute;
- top: 2em;
- left: -1px;
- z-index: 4;
-}
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: inline-block;
- vertical-align: middle;
- height: 2em;
- width: 2em;
- margin-right: 0.25em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- vertical-align: middle;
- line-height: 2em;
- font-size: 0.8em;
-}
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-left: 1.25em;
- font-size: 0.8em;
-}
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
- z-index: 4;
-}
-
-.oo-ui-iconWidget {
- display: inline-block;
- vertical-align: middle;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
- display: inline-block;
- vertical-align: middle;
- line-height: 2.5em;
- height: 1.9em;
- width: 1.9em;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
- list-style: none;
- margin: 0;
- padding: 0;
-}
-
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- border: none;
- list-style: none;
- margin: 0;
- cursor: pointer;
-}
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
- display: block;
- line-height: 1.5em;
- white-space: nowrap;
- text-overflow: ellipsis;
- overflow: hidden;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
- position: absolute;
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
- background-repeat: no-repeat;
- background-position: center center;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon {
- left: 0.5em;
-}
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
- right: 0.5em;
-}
-
-.oo-ui-menuWidget {
- position: absolute;
-}
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-
-.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
- z-index: 1;
- min-width: 20em;
-}
-
-.oo-ui-popupWidget-popup {
- position: absolute;
- overflow: hidden;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchor {
- display: none;
- z-index: 1;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- display: block;
- position: absolute;
- background-repeat: no-repeat;
-}
-.oo-ui-popupWidget-head {
- height: 2.5em;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: right;
- margin: 0.25em;
-}
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
- float: left;
- margin: 0.75em 1em;
- cursor: default;
-}
-.oo-ui-popupWidget-body {
- clear: both;
- overflow: hidden;
-}
-.oo-ui-popupWidget-body-padded {
- padding: 0 1em;
-}
-
-.oo-ui-buttonGroupWidget {
- border-radius: 0.3em;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- border-radius: 0;
- margin-bottom: -1px;
- margin-left: -1px;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
- border-bottom-left-radius: 0.3em;
- border-top-left-radius: 0.3em;
- margin-left: 0;
-}
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- background-color: transparent;
-}
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
- position: relative;
- height: 1.9em;
-}
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- position: static;
- display: inline-block;
- vertical-align: middle;
- height: 1.9em;
- margin-top: 0;
-}
-
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- margin: 0.25em 0;
- min-width: 20em;
-}
-.oo-ui-inlineMenuWidget-handle {
- display: inline-block;
- width: 100%;
- height: 2.5em;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2.5em;
- height: 2.5em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
- right: 0;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- left: 0.25em;
-}
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- line-height: 2.5em;
- margin: 0 0.5em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-left: 3em;
-}
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-right: 2em;
-}
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- width: 100%;
- z-index: 1;
-}
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-
-.oo-ui-menuItemWidget {
- position: relative;
-}
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
- display: none;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
- display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
- cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
- height: 3em;
-}
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- float: left;
- height: 2em;
- margin: 0.5em;
- padding: 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
- float: left;
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0 0.5em 0.5em;
- background-position: right center;
- background-repeat: no-repeat;
-}
-.oo-ui-outlineControlsWidget-items {
- float: left;
- margin-left: 0;
-}
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
- float: left;
-}
-.oo-ui-outlineControlsWidget-movers {
- float: right;
-}
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: right;
-}
-
-.oo-ui-outlineItemWidget {
- position: relative;
- padding: 0.75em;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- left: 1em;
- cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- height: 4em;
- padding: 0 1em;
-}
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
- margin: 0.75em 0;
-}
-.oo-ui-searchWidget-results {
- position: absolute;
- top: 4em;
- bottom: 0;
- left: 0;
- right: 0;
- padding: 1em;
- overflow-x: hidden;
- overflow-y: auto;
- line-height: 0;
-}
-
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- resize: none;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-.oo-ui-textInputWidget > .oo-ui-iconedElement-icon,
-.oo-ui-textInputWidget > .oo-ui-indicatedElement-indicator {
- position: absolute;
- top: 0;
- height: 100%;
- background-repeat: no-repeat;
- cursor: pointer;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-.oo-ui-textInputWidget > .oo-ui-iconedElement-icon {
- left: 0;
-}
-.oo-ui-textInputWidget > .oo-ui-indicatedElement-indicator {
- right: 0;
-}
-
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- vertical-align: middle;
- height: 2em;
- width: 4em;
- overflow: hidden;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transform: translateZ(0px);
- -moz-transform: translateZ(0px);
- -ms-transform: translateZ(0px);
- -o-transform: translateZ(0px);
- transform: translateZ(0px);
-}
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- display: block;
- top: 0.25em;
- left: 0.25em;
- width: 1.5em;
- height: 1.5em;
- margin-top: -1px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
- transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-}
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- bottom: 0;
- right: 0;
- left: 0;
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
-}
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- left: 2.25em;
- margin-left: -2px;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- left: 0.25em;
- margin-left: 0;
-}
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-
-/* Icons */
.oo-ui-icon-add-item {
background-image: /* @embed */ url(images/icons/add-item.svg);
}
.oo-ui-icon-window {
background-image: /* @embed */ url(images/icons/window.svg);
}
-/* Indicators */
.oo-ui-indicator-alert {
background-image: /* @embed */ url(images/indicators/alert.svg);
}
.oo-ui-indicator-up {
background-image: /* @embed */ url(images/indicators/arrow-up.svg);
}
+.oo-ui-texture-pending {
+ background-image: /* @embed */ url(images/textures/pending.gif);
+}
+.oo-ui-texture-transparency {
+ background-image: /* @embed */ url(images/textures/transparency.svg);
+}
+++ /dev/null
-/*!
- * OOjs UI v0.1.0
- * https://www.mediawiki.org/wiki/OOjs_UI
- *
- * Copyright 2011–2014 OOjs Team and other contributors.
- * Released under the MIT license
- * http://oojs.mit-license.org
- *
- * Date: 2014-07-22T21:39:24Z
- */
-/* Textures */
-
-.oo-ui-texture-pending {
- background-image: /* @embed */ url(images/textures/pending.gif);
-}
-
-.oo-ui-texture-transparency {
- background-image: /* @embed */ url(images/textures/transparency.png);
-}
-
-/* RTL Definitions */
-
-/* @noflip */
-
-.oo-ui-rtl {
- direction: rtl;
-}
-
-/* @noflip */
-
-.oo-ui-ltr {
- direction: ltr;
-}
-
-.oo-ui-frame {
- padding: 0;
- margin: 0;
-}
-
-.oo-ui-frame-body {
- padding: 0;
- margin: 0;
- background: none;
-}
-
-.oo-ui-frame-content:focus {
- outline: none;
-}
-
-.oo-ui-toolbar {
- clear: both;
-}
-
-.oo-ui-toolbar-bar {
- line-height: 1em;
-}
-
-.oo-ui-toolbar-bottom .oo-ui-toolbar-bar {
- position: absolute;
-}
-
-.oo-ui-toolbar-actions {
- float: left;
-}
-
-.oo-ui-toolbar-tools {
- float: right;
-}
-
-.oo-ui-toolbar-tools,
-.oo-ui-toolbar-actions,
-.oo-ui-toolbar-shadow {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-toolbar-actions .oo-ui-popupWidget {
- -webkit-user-select: all;
- -moz-user-select: all;
- -ms-user-select: all;
- user-select: all;
- -webkit-touch-callout: default;
-}
-
-.oo-ui-toolbar-shadow {
- position: absolute;
- width: 100%;
- pointer-events: none;
- background-position: right top;
- background-repeat: repeat-x;
-}
-
-.oo-ui-toolGroup {
- display: inline-block;
- margin: 0.3em;
- vertical-align: middle;
-}
-
-.oo-ui-toolGroup-empty {
- display: none;
-}
-
-.oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-window {
- line-height: 1em;
-}
-
-.oo-ui-window > .oo-ui-window-frame {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-window > .oo-ui-window-frame > .oo-ui-frame {
- width: 100%;
- height: 100%;
-}
-
-.oo-ui-window-head,
-.oo-ui-window-foot {
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-window-overlay {
- position: absolute;
- top: 0;
- right: 0;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog {
- position: fixed;
- width: 0;
- height: 0;
- overflow: hidden;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- width: auto;
- height: auto;
- padding: 1em;
-}
-
-.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
- position: fixed;
- left: 0;
- right: 0;
- max-width: 100%;
- max-height: 100%;
- margin: auto;
- overflow: hidden;
-}
-
-.oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
- top: 0;
- bottom: 0;
- width: 100%;
- height: 100%;
-}
-
-.oo-ui-messageDialog-actions-horizontal {
- display: table;
- width: 100%;
- table-layout: fixed;
-}
-
-.oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
- display: table-cell;
- width: 1%;
-}
-
-.oo-ui-messageDialog-actions-vertical {
- display: block;
-}
-
-.oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget {
- position: relative;
- text-align: center;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button {
- display: block;
-}
-
-.oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
- position: relative;
- top: auto;
- bottom: auto;
- display: inline;
- white-space: nowrap;
-}
-
-.oo-ui-processDialog-location {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.oo-ui-processDialog-title {
- display: inline;
-}
-
-.oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
-.oo-ui-processDialog-actions-other .oo-ui-actionWidget {
- white-space: nowrap;
-}
-
-.oo-ui-processDialog-actions-safe,
-.oo-ui-processDialog-actions-primary {
- position: absolute;
- top: 0;
- bottom: 0;
-}
-
-.oo-ui-processDialog-actions-safe {
- right: 0;
-}
-
-.oo-ui-processDialog-actions-primary {
- left: 0;
-}
-
-.oo-ui-processDialog-errors {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- z-index: 2;
- display: none;
- padding: 3em 3em 1.5em 3em;
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
- display: inline-block;
- vertical-align: middle;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: none;
- margin-right: 0;
-}
-
-.oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
- display: none;
- margin-left: -0.75em;
-}
-
-.oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button {
- cursor: default;
-}
-
-.oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
-.oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- display: inline-block;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-buttonedElement-frameless {
- position: relative;
- display: inline-block;
-}
-
-.oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- margin-right: 0.25em;
- vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
- display: inline-block;
- text-align: center;
- vertical-align: top;
-}
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
- display: inline-block;
- line-height: 1.9em;
- vertical-align: middle;
-}
-
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
- cursor: default;
-}
-
-.oo-ui-clippableElement-clippable {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
- overflow-y: hidden;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
- padding: 2em;
-}
-
-.oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 3em;
- right: 0;
- overflow-y: auto;
-}
-
-.oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
- position: absolute;
- left: 0;
- bottom: 0;
- right: 0;
-}
-
-.oo-ui-fieldLayout {
- margin-bottom: 1em;
-}
-
-.oo-ui-fieldLayout:last-child {
- margin-bottom: 0;
-}
-
-.oo-ui-fieldLayout:before,
-.oo-ui-fieldLayout:after {
- display: table;
- content: " ";
-}
-
-.oo-ui-fieldLayout:after {
- clear: both;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- display: block;
- float: right;
- width: 35%;
- padding-top: 0.5em;
- margin-left: 5%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
- display: block;
- float: right;
- width: 60%;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
- text-align: left;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
- display: inline-block;
- padding: 0.75em 0.5em 0.5em 0.5em;
- vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
- display: inline-block;
- padding: 0.5em 0;
- vertical-align: middle;
-}
-
-.oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
- display: inline-block;
- padding: 0.5em 0;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
- margin-top: 0.25em;
-}
-
-.oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
- z-index: 1;
-}
-
-.oo-ui-fieldsetLayout {
- position: relative;
- padding: 0;
- margin: 0;
-}
-
-.oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
- margin-top: 2em;
-}
-
-.oo-ui-fieldsetLayout-labeled {
- margin-top: -0.75em;
-}
-
-.oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
- padding: 0.25em 0;
- margin-bottom: 0.5em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
- padding-right: 1.75em;
- line-height: 1.33em;
-}
-
-.oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0.25em;
- right: 0;
- display: block;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-gridLayout {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-}
-
-.oo-ui-labelWidget {
- display: inline-block;
- padding: 0.5em 0;
-}
-
-.oo-ui-panelLayout {
- position: relative;
-}
-
-.oo-ui-panelLayout-scrollable {
- overflow-y: auto;
-}
-
-.oo-ui-panelLayout-expanded {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-}
-
-.oo-ui-stackLayout > .oo-ui-panelLayout {
- display: none;
-}
-
-.oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
- position: relative;
- display: block;
-}
-
-.oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
-.oo-ui-barToolGroup > .oo-ui-labeledElement-label {
- display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool {
- position: relative;
- display: inline-block;
- vertical-align: top;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link {
- display: block;
- height: 1.5em;
- padding: 0.25em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: block;
- width: 1.5em;
- height: 1.5em;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: none;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-barToolGroup .oo-ui-tool-title,
-.oo-ui-barToolGroup .oo-ui-tool-accel {
- display: none;
-}
-
-.oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
- cursor: pointer;
-}
-
-.oo-ui-listToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool-link {
- display: block;
- padding-left: 0.5em;
- white-space: nowrap;
- cursor: pointer;
-}
-
-.oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
- min-width: 8em;
-}
-
-.oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
- padding: 0.25em 0 0.25em 0;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool {
- display: block;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link {
- display: block;
- padding: 0 0.25em 0 1em;
- white-space: nowrap;
- cursor: pointer;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: none;
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-
-.oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
- cursor: default;
-}
-
-.oo-ui-popupToolGroup {
- position: relative;
- height: 2em;
- min-width: 2.5em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
- min-width: 3.5em;
-}
-
-.oo-ui-popupToolGroup-handle {
- display: block;
- cursor: pointer;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2em;
- height: 2em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
- left: 0;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
- right: 0.25em;
-}
-
-.oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin: 0 1em;
- font-size: 0.8em;
- line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup-header {
- margin: 0 0.6em;
- font-size: 0.8em;
- font-weight: bold;
- line-height: 2.6em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
- cursor: default;
-}
-
-.oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-right: 3em;
-}
-
-.oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
- margin-left: 2.25em;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
- position: absolute;
- top: 2em;
- right: -1px;
- z-index: 4;
- display: none;
-}
-
-.oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
- display: block;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
- display: inline-block;
- width: 2em;
- height: 2em;
- margin-left: 0.25em;
- vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
- display: inline-block;
- font-size: 0.8em;
- line-height: 2em;
- vertical-align: middle;
-}
-
-.oo-ui-popupToolGroup .oo-ui-tool-accel {
- display: none;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget {
- margin-right: 1.25em;
- font-size: 0.8em;
-}
-
-.oo-ui-popupTool .oo-ui-popupWidget-popup,
-.oo-ui-popupTool .oo-ui-popupWidget-anchor {
- z-index: 4;
-}
-
-.oo-ui-iconWidget {
- display: inline-block;
- width: 1.9em;
- height: 1.9em;
- line-height: 2.5em;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-
-.oo-ui-iconWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-indicatorWidget {
- display: inline-block;
- width: 1.9em;
- height: 1.9em;
- line-height: 2.5em;
- vertical-align: middle;
- background-position: center center;
- background-repeat: no-repeat;
- opacity: 0.8;
-}
-
-.oo-ui-indicatorWidget.oo-ui-widget-disabled {
- opacity: 0.2;
-}
-
-.oo-ui-selectWidget {
- padding: 0;
- margin: 0;
- list-style: none;
-}
-
-.oo-ui-optionWidget {
- position: relative;
- display: block;
- margin: 0;
- list-style: none;
- cursor: pointer;
- border: none;
-}
-
-.oo-ui-optionWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-
-.oo-ui-optionWidget .oo-ui-labeledElement-label {
- display: block;
- overflow: hidden;
- line-height: 1.5em;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
- position: absolute;
- top: 50%;
- width: 2em;
- height: 2em;
- margin-top: -1em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon {
- right: 0.5em;
-}
-
-.oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
- left: 0.5em;
-}
-
-.oo-ui-menuWidget {
- position: absolute;
-}
-
-.oo-ui-menuWidget input {
- position: absolute;
- width: 0;
- height: 0;
- overflow: hidden;
- opacity: 0;
-}
-
-.oo-ui-popupWidget-popup {
- position: absolute;
- z-index: 1;
- overflow: hidden;
-}
-
-.oo-ui-popupWidget-anchor {
- z-index: 1;
- display: none;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
- margin-top: 7px;
-}
-
-.oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
- position: absolute;
- display: block;
- background-repeat: no-repeat;
-}
-
-.oo-ui-popupWidget-head {
- height: 2.5em;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-popupWidget-head .oo-ui-buttonWidget {
- float: left;
- margin: 0.25em;
-}
-
-.oo-ui-popupWidget-head .oo-ui-labeledElement-label {
- float: right;
- margin: 0.75em 1em;
- cursor: default;
-}
-
-.oo-ui-popupWidget-body {
- overflow: hidden;
- clear: both;
-}
-
-.oo-ui-popupWidget-body-padded {
- padding: 0 1em;
-}
-
-.oo-ui-buttonGroupWidget {
- border-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
- margin-bottom: -1px;
- margin-right: -1px;
- border-radius: 0;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
- margin-right: 0;
- border-bottom-right-radius: 0.3em;
- border-top-right-radius: 0.3em;
-}
-
-.oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
- border-top-left-radius: 0.3em;
- border-bottom-left-radius: 0.3em;
-}
-
-.oo-ui-buttonOptionWidget {
- display: inline-block;
- background-color: transparent;
-}
-
-.oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
- position: relative;
- height: 1.9em;
-}
-
-.oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
-.oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
- position: static;
- display: inline-block;
- height: 1.9em;
- margin-top: 0;
- vertical-align: middle;
-}
-
-.oo-ui-buttonSelectWidget {
- display: inline-block;
- white-space: nowrap;
-}
-
-.oo-ui-buttonWidget {
- display: inline-block;
- vertical-align: middle;
-}
-
-.oo-ui-inlineMenuWidget {
- position: relative;
- display: inline-block;
- min-width: 20em;
- margin: 0.25em 0;
-}
-
-.oo-ui-inlineMenuWidget-handle {
- display: inline-block;
- width: 100%;
- height: 2.5em;
- cursor: pointer;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- position: absolute;
- top: 0;
- width: 2.5em;
- height: 2.5em;
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
- left: 0;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
- right: 0.25em;
-}
-
-.oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin: 0 0.5em;
- line-height: 2.5em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-right: 3em;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
- margin-left: 2em;
-}
-
-.oo-ui-inlineMenuWidget .oo-ui-menuWidget {
- z-index: 1;
- width: 100%;
-}
-
-.oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
- cursor: default;
-}
-
-.oo-ui-menuItemWidget {
- position: relative;
-}
-
-.oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
- display: none;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
- background-color: transparent;
-}
-
-.oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
- display: block;
-}
-
-.oo-ui-menuSectionItemWidget {
- cursor: default;
-}
-
-.oo-ui-outlineControlsWidget {
- height: 3em;
-}
-
-.oo-ui-outlineControlsWidget-items,
-.oo-ui-outlineControlsWidget-movers {
- float: right;
- height: 2em;
- padding: 0;
- margin: 0.5em;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
- float: right;
- width: 1.5em;
- height: 2em;
- margin: 0.5em 0.5em 0.5em 0;
- background-position: left center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-outlineControlsWidget-items {
- float: right;
- margin-right: 0;
-}
-
-.oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
- float: right;
-}
-
-.oo-ui-outlineControlsWidget-movers {
- float: left;
-}
-
-.oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
- float: left;
-}
-
-.oo-ui-outlineItemWidget {
- position: relative;
- padding: 0.75em;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-popupButtonWidget {
- position: relative;
-}
-
-.oo-ui-popupButtonWidget .oo-ui-popupWidget {
- position: absolute;
- right: 1em;
- cursor: auto;
-}
-
-.oo-ui-searchWidget-query {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- height: 4em;
- padding: 0 1em;
-}
-
-.oo-ui-searchWidget-query .oo-ui-textInputWidget {
- width: 100%;
- margin: 0.75em 0;
-}
-
-.oo-ui-searchWidget-results {
- position: absolute;
- top: 4em;
- left: 0;
- bottom: 0;
- right: 0;
- padding: 1em;
- overflow-x: hidden;
- overflow-y: auto;
- line-height: 0;
-}
-
-.oo-ui-textInputWidget {
- position: relative;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-textInputWidget input,
-.oo-ui-textInputWidget textarea {
- display: inline-block;
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- resize: none;
-}
-
-.oo-ui-textInputWidget-icon {
- position: absolute;
- top: 0;
- right: 0;
- height: 100%;
- background-position: left center;
- background-repeat: no-repeat;
-}
-
-.oo-ui-toggleSwitchWidget {
- position: relative;
- display: inline-block;
- width: 4em;
- height: 2em;
- overflow: hidden;
- vertical-align: middle;
- cursor: pointer;
- -webkit-transform: translateZ(0);
- -moz-transform: translateZ(0);
- -ms-transform: translateZ(0);
- -o-transform: translateZ(0);
- transform: translateZ(0);
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-.oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
- cursor: default;
-}
-
-.oo-ui-toggleSwitchWidget-grip {
- position: absolute;
- top: 0.25em;
- right: 0.25em;
- display: block;
- width: 1.5em;
- height: 1.5em;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- -webkit-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -moz-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -ms-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- -o-transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
- transition: right 200ms ease-in-out, margin-right 200ms ease-in-out;
-}
-
-.oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
- -webkit-transition: opacity 200ms ease-in-out;
- -moz-transition: opacity 200ms ease-in-out;
- -ms-transition: opacity 200ms ease-in-out;
- -o-transition: opacity 200ms ease-in-out;
- transition: opacity 200ms ease-in-out;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-touch-callout: none;
-}
-
-.oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
- right: 2.25em;
- margin-right: -2px;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
- right: 0.25em;
- margin-right: 0;
-}
-
-.oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
- display: none;
-}
-
-/* Icons */
-
-.oo-ui-icon-add-item {
- background-image: /* @embed */ url(images/icons/add-item.svg);
-}
-
-.oo-ui-icon-advanced {
- background-image: /* @embed */ url(images/icons/advanced.svg);
-}
-
-.oo-ui-icon-alert {
- background-image: /* @embed */ url(images/icons/alert.svg);
-}
-
-.oo-ui-icon-check {
- background-image: /* @embed */ url(images/icons/check.svg);
-}
-
-.oo-ui-icon-clear {
- background-image: /* @embed */ url(images/icons/clear.svg);
-}
-
-.oo-ui-icon-close {
- background-image: /* @embed */ url(images/icons/close.svg);
-}
-
-.oo-ui-icon-code {
- background-image: /* @embed */ url(images/icons/code.svg);
-}
-
-.oo-ui-icon-collapse {
- background-image: /* @embed */ url(images/icons/collapse.svg);
-}
-
-.oo-ui-icon-comment {
- background-image: /* @embed */ url(images/icons/comment.svg);
-}
-
-.oo-ui-icon-expand {
- background-image: /* @embed */ url(images/icons/expand.svg);
-}
-
-.oo-ui-icon-help {
- background-image: /* @embed */ url(images/icons/help.svg);
-}
-
-.oo-ui-icon-info {
- background-image: /* @embed */ url(images/icons/info.svg);
-}
-
-.oo-ui-icon-link {
- background-image: /* @embed */ url(images/icons/link.svg);
-}
-
-.oo-ui-icon-menu {
- background-image: /* @embed */ url(images/icons/menu.svg);
-}
-
-.oo-ui-icon-next {
- background-image: /* @embed */ url(images/icons/move-rtl.svg);
-}
-
-.oo-ui-icon-picture {
- background-image: /* @embed */ url(images/icons/picture.svg);
-}
-
-.oo-ui-icon-previous {
- background-image: /* @embed */ url(images/icons/move-ltr.svg);
-}
-
-.oo-ui-icon-redo {
- background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg);
-}
-
-.oo-ui-icon-remove {
- background-image: /* @embed */ url(images/icons/remove.svg);
-}
-
-.oo-ui-icon-search {
- background-image: /* @embed */ url(images/icons/search.svg);
-}
-
-.oo-ui-icon-settings {
- background-image: /* @embed */ url(images/icons/settings.svg);
-}
-
-.oo-ui-icon-tag {
- background-image: /* @embed */ url(images/icons/tag.svg);
-}
-
-.oo-ui-icon-undo {
- background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg);
-}
-
-.oo-ui-icon-window {
- background-image: /* @embed */ url(images/icons/window.svg);
-}
-
-/* Indicators */
-
-.oo-ui-indicator-alert {
- background-image: /* @embed */ url(images/indicators/alert.svg);
-}
-
-.oo-ui-indicator-down {
- background-image: /* @embed */ url(images/indicators/arrow-down.svg);
-}
-
-.oo-ui-indicator-next {
- background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
-}
-
-.oo-ui-indicator-previous {
- background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
-}
-
-.oo-ui-indicator-required {
- background-image: /* @embed */ url(images/indicators/required.svg);
-}
-
-.oo-ui-indicator-up {
- background-image: /* @embed */ url(images/indicators/arrow-up.svg);
-}
\ No newline at end of file
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>\r
-<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
- width="44.075px" height="44.076px" viewBox="0 0 44.075 44.076" enable-background="new 0 0 44.075 44.076" xml:space="preserve">\r
-<polygon fill="#FFFFFF" points="41.673,12.657 15.385,37.159 15.201,36.961 10.037,31.424 2.402,23.239 8.057,17.962 15.693,26.157 \r
- 36.319,6.917 "/>\r
-</svg>\r
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>\r
+<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->\r
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\r
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\r
+ width="44.075px" height="44.076px" viewBox="0 0 44.075 44.076" enable-background="new 0 0 44.075 44.076" xml:space="preserve">\r
+<polygon fill="#FFFFFF" points="41.673,12.657 15.385,37.159 15.201,36.961 10.037,31.424 2.402,23.239 8.057,17.962 15.693,26.157 \r
+ 36.319,6.917 "/>\r
+</svg>\r
/*!
- * OOjs v1.0.12 optimised for jQuery
+ * OOjs v1.1.0 optimised for jQuery
* https://www.mediawiki.org/wiki/OOjs
*
* Copyright 2011-2014 OOjs Team and other contributors.
* Released under the MIT license
* http://oojs.mit-license.org
*
- * Date: 2014-08-20T22:33:41Z
+ * Date: 2014-08-31T21:15:46Z
*/
( function ( global ) {
};
/**
- * Utility for common usage of Object#create for inheriting from one
- * prototype to another.
+ * Inherit from prototype to another using Object#create.
*
* Beware: This redefines the prototype, call before setting your prototypes.
+ *
* Beware: This redefines the prototype, can only be called once on a function.
- * If called multiple times on the same function, the previous prototype is lost.
- * This is how prototypal inheritance works, it can only be one straight chain
- * (just like classical inheritance in PHP for example). If you need to work with
- * multiple constructors consider storing an instance of the other constructor in a
- * property instead, or perhaps use a mixin (see OO.mixinClass).
+ * If called multiple times on the same function, the previous prototype is lost.
+ * This is how prototypal inheritance works, it can only be one straight chain
+ * (just like classical inheritance in PHP for example). If you need to work with
+ * multiple constructors consider storing an instance of the other constructor in a
+ * property instead, or perhaps use a mixin (see OO.mixinClass).
*
* function Thing() {}
* Thing.prototype.exists = function () {};
};
/**
- * Utility to copy over *own* prototype properties of a mixin.
+ * Copy over *own* prototype properties of a mixin.
+ *
* The 'constructor' (whether implicit or explicit) is not copied over.
*
* This does not create inheritance to the origin. If inheritance is needed
* use oo.inheritClass instead.
*
* Beware: This can redefine a prototype property, call before setting your prototypes.
+ *
* Beware: Don't call before oo.inheritClass.
*
* function Foo() {}
};
/**
- * Recursively compares properties between two objects.
+ * Recursively compare properties between two objects.
*
* A false result may be caused by property inequality or by properties in one object missing from
* the other. An asymmetrical test may also be performed, which checks only that properties in the
*
* If either a or b is null or undefined it will be treated as an empty object.
*
- * @param {Object|undefined} a First object to compare
- * @param {Object|undefined} b Second object to compare
+ * @param {Object|undefined|null} a First object to compare
+ * @param {Object|undefined|null} b Second object to compare
* @param {boolean} [asymmetrical] Whether to check only that b contains values from a
* @return {boolean} If the objects contain the same values as each other
*/
};
/**
- * Helper function for OO.getHash which sorts objects by key.
+ * Sort objects by key (helper function for OO.getHash).
*
* This is a callback passed into JSON.stringify.
*
/*global hasOwn */
-/**
- * @class OO.EventEmitter
- *
- * @constructor
- */
-oo.EventEmitter = function OoEventEmitter() {
- // Properties
+( function () {
/**
- * Storage of bound event handlers by event name.
+ * @class OO.EventEmitter
*
- * @property
+ * @constructor
*/
- this.bindings = {};
-};
+ oo.EventEmitter = function OoEventEmitter() {
+ // Properties
-oo.initClass( oo.EventEmitter );
-
-/* Methods */
+ /**
+ * Storage of bound event handlers by event name.
+ *
+ * @property
+ */
+ this.bindings = {};
+ };
-/**
- * Add a listener to events of a specific event.
- *
- * The listener can be a function or the string name of a method; if the latter, then the
- * name lookup happens at the time the listener is called.
- *
- * @param {string} event Type of event to listen to
- * @param {Function|string} method Function or method name to call when event occurs
- * @param {Array} [args] Arguments to pass to listener, will be prepended to emitted arguments
- * @param {Object} [context=null] Context object for function or method call
- * @throws {Error} Listener argument is not a function or a valid method name
- * @chainable
- */
-oo.EventEmitter.prototype.on = function ( event, method, args, context ) {
- var bindings;
+ oo.initClass( oo.EventEmitter );
- this.constructor.static.validateMethod( method, context );
+ /* Private helper functions */
- if ( hasOwn.call( this.bindings, event ) ) {
- bindings = this.bindings[event];
- } else {
- // Auto-initialize bindings list
- bindings = this.bindings[event] = [];
+ /**
+ * Validate a function or method call in a context
+ *
+ * For a method name, check that it names a function in the context object
+ *
+ * @private
+ * @param {Function|string} method Function or method name
+ * @param {Mixed} context The context of the call
+ * @throws {Error} A method name is given but there is no context
+ * @throws {Error} In the context object, no property exists with the given name
+ * @throws {Error} In the context object, the named property is not a function
+ */
+ function validateMethod( method, context ) {
+ // Validate method and context
+ if ( typeof method === 'string' ) {
+ // Validate method
+ if ( context === undefined || context === null ) {
+ throw new Error( 'Method name "' + method + '" has no context.' );
+ }
+ if ( !( method in context ) ) {
+ // Technically the method does not need to exist yet: it could be
+ // added before call time. But this probably signals a typo.
+ throw new Error( 'Method not found: "' + method + '"' );
+ }
+ if ( typeof context[method] !== 'function' ) {
+ // Technically the property could be replaced by a function before
+ // call time. But this probably signals a typo.
+ throw new Error( 'Property "' + method + '" is not a function' );
+ }
+ } else if ( typeof method !== 'function' ) {
+ throw new Error( 'Invalid callback. Function or method name expected.' );
+ }
}
- // Add binding
- bindings.push( {
- method: method,
- args: args,
- context: ( arguments.length < 4 ) ? null : context
- } );
- return this;
-};
-/**
- * Adds a one-time listener to a specific event.
- *
- * @param {string} event Type of event to listen to
- * @param {Function} listener Listener to call when event occurs
- * @chainable
- */
-oo.EventEmitter.prototype.once = function ( event, listener ) {
- var eventEmitter = this,
- listenerWrapper = function () {
- eventEmitter.off( event, listenerWrapper );
- listener.apply( eventEmitter, Array.prototype.slice.call( arguments, 0 ) );
- };
- return this.on( event, listenerWrapper );
-};
+ /* Methods */
-/**
- * Remove a specific listener from a specific event.
- *
- * @param {string} event Type of event to remove listener from
- * @param {Function|string} [method] Listener to remove. Must be in the same form as was passed
- * to "on". Omit to remove all listeners.
- * @param {Object} [context=null] Context object function or method call
- * @chainable
- * @throws {Error} Listener argument is not a function or a valid method name
- */
-oo.EventEmitter.prototype.off = function ( event, method, context ) {
- var i, bindings;
+ /**
+ * Add a listener to events of a specific event.
+ *
+ * The listener can be a function or the string name of a method; if the latter, then the
+ * name lookup happens at the time the listener is called.
+ *
+ * @param {string} event Type of event to listen to
+ * @param {Function|string} method Function or method name to call when event occurs
+ * @param {Array} [args] Arguments to pass to listener, will be prepended to emitted arguments
+ * @param {Object} [context=null] Context object for function or method call
+ * @throws {Error} Listener argument is not a function or a valid method name
+ * @chainable
+ */
+ oo.EventEmitter.prototype.on = function ( event, method, args, context ) {
+ var bindings;
- if ( arguments.length === 1 ) {
- // Remove all bindings for event
- delete this.bindings[event];
+ validateMethod( method, context );
+
+ if ( hasOwn.call( this.bindings, event ) ) {
+ bindings = this.bindings[event];
+ } else {
+ // Auto-initialize bindings list
+ bindings = this.bindings[event] = [];
+ }
+ // Add binding
+ bindings.push( {
+ method: method,
+ args: args,
+ context: ( arguments.length < 4 ) ? null : context
+ } );
return this;
- }
+ };
- this.constructor.static.validateMethod( method, context );
+ /**
+ * Add a one-time listener to a specific event.
+ *
+ * @param {string} event Type of event to listen to
+ * @param {Function} listener Listener to call when event occurs
+ * @chainable
+ */
+ oo.EventEmitter.prototype.once = function ( event, listener ) {
+ var eventEmitter = this,
+ listenerWrapper = function () {
+ eventEmitter.off( event, listenerWrapper );
+ listener.apply( eventEmitter, Array.prototype.slice.call( arguments, 0 ) );
+ };
+ return this.on( event, listenerWrapper );
+ };
- if ( !( event in this.bindings ) || !this.bindings[event].length ) {
- // No matching bindings
- return this;
- }
+ /**
+ * Remove a specific listener from a specific event.
+ *
+ * @param {string} event Type of event to remove listener from
+ * @param {Function|string} [method] Listener to remove. Must be in the same form as was passed
+ * to "on". Omit to remove all listeners.
+ * @param {Object} [context=null] Context object function or method call
+ * @chainable
+ * @throws {Error} Listener argument is not a function or a valid method name
+ */
+ oo.EventEmitter.prototype.off = function ( event, method, context ) {
+ var i, bindings;
- // Default to null context
- if ( arguments.length < 3 ) {
- context = null;
- }
+ if ( arguments.length === 1 ) {
+ // Remove all bindings for event
+ delete this.bindings[event];
+ return this;
+ }
- // Remove matching handlers
- bindings = this.bindings[event];
- i = bindings.length;
- while ( i-- ) {
- if ( bindings[i].method === method && bindings[i].context === context ) {
- bindings.splice( i, 1 );
+ validateMethod( method, context );
+
+ if ( !( event in this.bindings ) || !this.bindings[event].length ) {
+ // No matching bindings
+ return this;
}
- }
- // Cleanup if now empty
- if ( bindings.length === 0 ) {
- delete this.bindings[event];
- }
- return this;
-};
+ // Default to null context
+ if ( arguments.length < 3 ) {
+ context = null;
+ }
-/**
- * Emit an event.
- *
- * TODO: Should this be chainable? What is the usefulness of the boolean
- * return value here?
- *
- * @param {string} event Type of event
- * @param {Mixed} args First in a list of variadic arguments passed to event handler (optional)
- * @return {boolean} If event was handled by at least one listener
- */
-oo.EventEmitter.prototype.emit = function ( event ) {
- var i, len, binding, bindings, args, method;
-
- if ( event in this.bindings ) {
- // Slicing ensures that we don't get tripped up by event handlers that add/remove bindings
- bindings = this.bindings[event].slice();
- args = Array.prototype.slice.call( arguments, 1 );
- for ( i = 0, len = bindings.length; i < len; i++ ) {
- binding = bindings[i];
- if ( typeof binding.method === 'string' ) {
- // Lookup method by name (late binding)
- method = binding.context[ binding.method ];
- } else {
- method = binding.method;
+ // Remove matching handlers
+ bindings = this.bindings[event];
+ i = bindings.length;
+ while ( i-- ) {
+ if ( bindings[i].method === method && bindings[i].context === context ) {
+ bindings.splice( i, 1 );
}
- method.apply(
- binding.context,
- binding.args ? binding.args.concat( args ) : args
- );
}
- return true;
- }
- return false;
-};
-/**
- * Connect event handlers to an object.
- *
- * @param {Object} context Object to call methods on when events occur
- * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} methods List of
- * event bindings keyed by event name containing either method names, functions or arrays containing
- * method name or function followed by a list of arguments to be passed to callback before emitted
- * arguments
- * @chainable
- */
-oo.EventEmitter.prototype.connect = function ( context, methods ) {
- var method, args, event;
-
- for ( event in methods ) {
- method = methods[event];
- // Allow providing additional args
- if ( Array.isArray( method ) ) {
- args = method.slice( 1 );
- method = method[0];
- } else {
- args = [];
+ // Cleanup if now empty
+ if ( bindings.length === 0 ) {
+ delete this.bindings[event];
}
- // Add binding
- this.on( event, method, args, context );
- }
- return this;
-};
+ return this;
+ };
-/**
- * Disconnect event handlers from an object.
- *
- * @param {Object} context Object to disconnect methods from
- * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} [methods] List of
- * event bindings keyed by event name. Values can be either method names or functions, but must be
- * consistent with those used in the corresponding call to "connect".
- * @chainable
- */
-oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
- var i, event, bindings;
+ /**
+ * Emit an event.
+ *
+ * TODO: Should this be chainable? What is the usefulness of the boolean
+ * return value here?
+ *
+ * @param {string} event Type of event
+ * @param {Mixed} args First in a list of variadic arguments passed to event handler (optional)
+ * @return {boolean} If event was handled by at least one listener
+ */
+ oo.EventEmitter.prototype.emit = function ( event ) {
+ var i, len, binding, bindings, args, method;
+
+ if ( event in this.bindings ) {
+ // Slicing ensures that we don't get tripped up by event handlers that add/remove bindings
+ bindings = this.bindings[event].slice();
+ args = Array.prototype.slice.call( arguments, 1 );
+ for ( i = 0, len = bindings.length; i < len; i++ ) {
+ binding = bindings[i];
+ if ( typeof binding.method === 'string' ) {
+ // Lookup method by name (late binding)
+ method = binding.context[ binding.method ];
+ } else {
+ method = binding.method;
+ }
+ method.apply(
+ binding.context,
+ binding.args ? binding.args.concat( args ) : args
+ );
+ }
+ return true;
+ }
+ return false;
+ };
+
+ /**
+ * Connect event handlers to an object.
+ *
+ * @param {Object} context Object to call methods on when events occur
+ * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} methods List of
+ * event bindings keyed by event name containing either method names, functions or arrays containing
+ * method name or function followed by a list of arguments to be passed to callback before emitted
+ * arguments
+ * @chainable
+ */
+ oo.EventEmitter.prototype.connect = function ( context, methods ) {
+ var method, args, event;
- if ( methods ) {
- // Remove specific connections to the context
for ( event in methods ) {
- this.off( event, methods[event], context );
+ method = methods[event];
+ // Allow providing additional args
+ if ( Array.isArray( method ) ) {
+ args = method.slice( 1 );
+ method = method[0];
+ } else {
+ args = [];
+ }
+ // Add binding
+ this.on( event, method, args, context );
}
- } else {
- // Remove all connections to the context
- for ( event in this.bindings ) {
- bindings = this.bindings[event];
- i = bindings.length;
- while ( i-- ) {
- // bindings[i] may have been removed by the previous step's
- // this.off so check it still exists
- if ( bindings[i] && bindings[i].context === context ) {
- this.off( event, bindings[i].method, context );
+ return this;
+ };
+
+ /**
+ * Disconnect event handlers from an object.
+ *
+ * @param {Object} context Object to disconnect methods from
+ * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} [methods] List of
+ * event bindings keyed by event name. Values can be either method names or functions, but must be
+ * consistent with those used in the corresponding call to "connect".
+ * @chainable
+ */
+ oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
+ var i, event, bindings;
+
+ if ( methods ) {
+ // Remove specific connections to the context
+ for ( event in methods ) {
+ this.off( event, methods[event], context );
+ }
+ } else {
+ // Remove all connections to the context
+ for ( event in this.bindings ) {
+ bindings = this.bindings[event];
+ i = bindings.length;
+ while ( i-- ) {
+ // bindings[i] may have been removed by the previous step's
+ // this.off so check it still exists
+ if ( bindings[i] && bindings[i].context === context ) {
+ this.off( event, bindings[i].method, context );
+ }
}
}
}
- }
- return this;
-};
+ return this;
+ };
-/**
- * Validate a function or method call in a context
- *
- * For a method name, check that it names a function in the context object
- *
- * @static
- * @param {Function|string} method Function or method name
- * @param {Mixed} context The context of the call
- * @throws {Error} A method name is given but there is no context
- * @throws {Error} In the context object, no property exists with the given name
- * @throws {Error} In the context object, the named property is not a function
- */
-oo.EventEmitter.static.validateMethod = function ( method, context ) {
- // Validate method and context
- if ( typeof method === 'string' ) {
- // Validate method
- if ( context === undefined || context === null ) {
- throw new Error( 'Method name "' + method + '" has no context.' );
- }
- if ( !( method in context ) ) {
- // Technically the method does not need to exist yet: it could be
- // added before call time. But this probably signals a typo.
- throw new Error( 'Method not found: "' + method + '"' );
- }
- if ( typeof context[method] !== 'function' ) {
- // Technically the property could be replaced by a function before
- // call time. But this probably signals a typo.
- throw new Error( 'Property "' + method + '" is not a function' );
- }
- } else if ( typeof method !== 'function' ) {
- throw new Error( 'Invalid callback. Function or method name expected.' );
- }
-};
+}() );
/*global hasOwn */
r = trimmableText.length;
do {
m = Math.ceil( ( l + r ) / 2 );
- $trimmableText.text( trimmableText.substr( 0, m ) + '...' );
+ $trimmableText.text( trimmableText.slice( 0, m ) + '...' );
if ( $trimmableText.width() + pw > w ) {
// Text is too long
r = m - 1;
l = m;
}
} while ( l < r );
- $trimmableText.text( trimmableText.substr( 0, l ) + '...' );
+ $trimmableText.text( trimmableText.slice( 0, l ) + '...' );
break;
case 'center':
// TODO: Use binary search like for 'right'
// Begin with making the end shorter
side = 1;
while ( $trimmableText.outerWidth() + pw > w && i[0] > 0 ) {
- $trimmableText.text( trimmableText.substr( 0, i[0] ) + '...' + trimmableText.substr( i[1] ) );
+ $trimmableText.text( trimmableText.slice( 0, i[0] ) + '...' + trimmableText.slice( i[1] ) );
// Alternate between trimming the end and begining
if ( side === 0 ) {
// Make the begining shorter
// TODO: Use binary search like for 'right'
r = 0;
while ( $trimmableText.outerWidth() + pw > w && r < trimmableText.length ) {
- $trimmableText.text( '...' + trimmableText.substr( r ) );
+ $trimmableText.text( '...' + trimmableText.slice( r ) );
r++;
}
break;
inpParts = [
// Same start
- newVal.substring( 0, startMatches ),
+ newVal.slice( 0, startMatches ),
// Inserted content
- newVal.substring( startMatches, newVal.length - endMatches ),
+ newVal.slice( startMatches, newVal.length - endMatches ),
// Same end
- newVal.substring( newVal.length - endMatches )
+ newVal.slice( newVal.length - endMatches )
];
// Chop off characters from the end of the "inserted content" string
$('*', e).each(function () {
if (this.currentStyle.backgroundImage != 'none') {
var image = this.currentStyle.backgroundImage;
- image = this.currentStyle.backgroundImage.substring(5, image.length - 2);
+ image = this.currentStyle.backgroundImage.slice(5, image.length - 2);
$(this).css({
'backgroundImage': 'none',
'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
bits = candidate.split( / +/ );
src = bits[0];
if ( bits.length > 1 && bits[1].charAt( bits[1].length - 1 ) === 'x' ) {
- ratioStr = bits[1].substr( 0, bits[1].length - 1 );
+ ratioStr = bits[1].slice( 0, -1 );
ratio = parseFloat( ratioStr );
if ( ratio <= devicePixelRatio && ratio > selectedRatio ) {
selectedRatio = ratio;
'' : str.toString().replace( /\s+$/, '' );
},
ucFirst: function ( str ) {
- return str.charAt( 0 ).toUpperCase() + str.substr( 1 );
+ return str.charAt( 0 ).toUpperCase() + str.slice( 1 );
},
escapeRE: function ( str ) {
return str.replace ( /([\\{}()|.?*+\-\^$\[\]])/g, '\\$1' );
} else {
while ( selText.charAt( selText.length - 1 ) === ' ' ) {
// Exclude ending space char
- selText = selText.substring( 0, selText.length - 1 );
+ selText = selText.slice( 0, -1 );
post += ' ';
}
while ( selText.charAt( 0 ) === ' ' ) {
// Exclude prepending space char
- selText = selText.substring( 1, selText.length );
+ selText = selText.slice( 1 );
pre = ' ' + pre;
}
}
post += '\n';
}
}
- this.value = this.value.substring( 0, startPos ) + insertText +
- this.value.substring( endPos, this.value.length );
+ this.value = this.value.slice( 0, startPos ) + insertText +
+ this.value.slice( endPos );
// Setting this.value scrolls the textarea to the top, restore the scroll position
this.scrollTop = scrollTop;
if ( window.opera ) {
title: b.speedTip,
id: b.imageId || undefined,
'class': 'mw-toolbar-editbutton'
- } ).click( function () {
- toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText );
+ } ).click( function ( e ) {
+ if ( b.onClick !== undefined ) {
+ b.onClick( e );
+ } else {
+ toolbar.insertTags( b.tagOpen, b.tagClose, b.sampleText );
+ }
+
return false;
} );
isReady = false;
$toolbar = false;
+
/**
* @private
* @property {Array}
* by placing buttons in a queue if this method is called before
* the toolbar is created.
*
- * For compatiblity, passing the properties listed below as separate arguments
- * (in the listed order) is also supported.
+ * For backwards-compatibility, passing `imageFile`, `speedTip`, `tagOpen`, `tagClose`,
+ * `sampleText` and `imageId` as separate arguments (in this order) is also supported.
*
- * @param {Object} button Object with the following properties:
- * @param {string} button.imageFile
- * @param {string} button.speedTip
- * @param {string} button.tagOpen
- * @param {string} button.tagClose
- * @param {string} button.sampleText
- * @param {string} [button.imageId]
+ * @param {Object} button Object with the following properties.
+ * You are required to provide *either* the `onClick` parameter, or the three parameters
+ * `tagOpen`, `tagClose` and `sampleText`, but not both (they're mutually exclusive).
+ * @param {string} button.imageFile Image to use for the button.
+ * @param {string} button.speedTip Tooltip displayed when user mouses over the button.
+ * @param {Function} [button.onClick] Function to be executed when the button is clicked.
+ * @param {string} [button.tagOpen]
+ * @param {string} [button.tagClose]
+ * @param {string} [button.sampleText] Alternative to `onClick`. `tagOpen`, `tagClose` and
+ * `sampleText` together provide the markup that should be inserted into page text at
+ * current cursor position.
+ * @param {string} [button.imageId] `id` attribute of the button HTML element.
*/
addButton: function () {
if ( isReady ) {
}
},
/**
+ * Add multiple buttons to the toolbar (see also #addButton).
+ *
* Example usage:
+ *
* addButtons( [ { .. }, { .. }, { .. } ] );
* addButtons( { .. }, { .. } );
*
--- /dev/null
+/*!
+ * Hide collapsable rows in a collapsed table.
+ */
+table.collapsed tr.collapsable {
+ display: none;
+}
* Add an expand/collapse link and collapse by default if set to
* (with JS disabled, user will see all items)
*
- * See also:
- * - ImagePage.php#makeMetadataTable (creates the HTML)
- * - skins/common/shared.css (hides tr.collapsable inside table.collapsed)
+ * See also ImagePage.php#makeMetadataTable (creates the HTML)
*/
( function ( mw, $ ) {
$( function () {
// This will also cause the browser to scroll to given fragment
history.replaceState( /*data=*/ history.state, /*title=*/ document.title, /*url=*/ canonical );
+ // …except for IE 10 and 11. Prod it with a location.hash change.
+ if ( shouldChangeFragment && profile.name === 'msie' && profile.versionNumber >= 10 ) {
+ location.hash = fragment;
+ }
+
} else if ( shouldChangeFragment ) {
if ( profile.layout === 'webkit' && profile.layoutVersion < 420 ) {
// Released Safari w/ WebKit 418.9.1 messes up horribly
--- /dev/null
+/*!
+ * Display neat icons on redirect pages.
+ */
+
+/* Hide, but keep accessible for screen-readers. */
+.redirectTo {
+ overflow: hidden;
+ height: 0;
+ zoom: 1;
+}
+
+.redirectText {
+ list-style: none none;
+ display: inline;
+ /* shared.css has some very weird directionality-specific rules for 'ul' we need to override,
+ search for "Correct directionality when page dir is different from site/user dir" */
+ margin: 0 !important;
+ padding: 0 !important;
+}
+
+/* @noflip */
+.mw-content-ltr .redirectText li {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ padding-left: 42px;
+ /* @embed */
+ background: url(images/nextredirect-ltr.png) bottom left no-repeat;
+}
+
+/* @noflip */
+.mw-content-ltr .redirectText li:first-child {
+ padding-left: 47px;
+ /* @embed */
+ background: url(images/redirect-ltr.png) bottom left no-repeat;
+}
+
+/* @noflip */
+.mw-content-rtl .redirectText li {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ padding-right: 42px;
+ /* @embed */
+ background: url(images/nextredirect-rtl.png) bottom right no-repeat;
+}
+
+/* @noflip */
+.mw-content-rtl .redirectText li:first-child {
+ padding-right: 47px;
+ /* @embed */
+ background: url(images/redirect-rtl.png) bottom right no-repeat;
+}
// Return the Promise
return apiDeferred.promise( { abort: xhr.abort } ).fail( function ( code, details ) {
- if ( code !== 'abort' ) {
+ if ( !( code === 'http' && details && details.textStatus === 'abort' ) ) {
mw.log( 'mw.Api error: ', code, details );
}
} );
break;
case 'illative':
// Double the last letter and add 'n'
- word += word.substr( word.length - 1 ) + 'n';
+ word += word.slice( -1 ) + 'n';
break;
case 'inessive':
word += ( aou ? 'ssa' : 'ssä' );
case 'prefixed':
case 'תחילית': // the same word in Hebrew
// Duplicate prefixed "Waw", but only if it's not already double
- if ( word.substr( 0, 1 ) === 'ו' && word.substr( 0, 2 ) !== 'וו' ) {
+ if ( word.slice( 0, 1 ) === 'ו' && word.slice( 0, 2 ) !== 'וו' ) {
word = 'ו' + word;
}
// Remove the "He" if prefixed
- if ( word.substr( 0, 1 ) === 'ה' ) {
- word = word.substr( 1, word.length );
+ if ( word.slice( 0, 1 ) === 'ה' ) {
+ word = word.slice( 1 );
}
// Add a hyphen (maqaf) before numbers and non-Hebrew letters
- if ( word.substr( 0, 1 ) < 'א' || word.substr( 0, 1 ) > 'ת' ) {
+ if ( word.slice( 0, 1 ) < 'א' || word.slice( 0, 1 ) > 'ת' ) {
word = '־' + word;
}
}
switch ( form ) {
case 'genitive': // սեռական հոլով
- if ( word.substr( -1 ) === 'ա' ) {
- word = word.substr( 0, word.length - 1 ) + 'այի';
- } else if ( word.substr( -1 ) === 'ո' ) {
- word = word.substr( 0, word.length - 1 ) + 'ոյի';
- } else if ( word.substr( -4 ) === 'գիրք' ) {
- word = word.substr( 0, word.length - 4 ) + 'գրքի';
+ if ( word.slice( -1 ) === 'ա' ) {
+ word = word.slice( 0, -1 ) + 'այի';
+ } else if ( word.slice( -1 ) === 'ո' ) {
+ word = word.slice( 0, -1 ) + 'ոյի';
+ } else if ( word.slice( -4 ) === 'գիրք' ) {
+ word = word.slice( 0, -4 ) + 'գրքի';
} else {
word = word + 'ի';
}
}
// Checking if the $word is in plural form
if ( word.match( /тæ$/i ) ) {
- word = word.substring( 0, word.length - 1 );
+ word = word.slice( 0, -1 );
endAllative = 'æм';
}
// Works if word is in singular form.
// Checking if word ends on 'у'. 'У' can be either consonant 'W' or vowel 'U' in cyrillic Ossetic.
// Examples: {{grammar:genitive|аунеу}} = аунеуы, {{grammar:genitive|лæппу}} = лæппуйы.
else if ( word.match( /у$/i ) ) {
- if ( !word.substring( word.length - 2, word.length - 1 ).match( /[аæеёиоыэюя]$/i ) ) {
+ if ( !word.slice( -2, -1 ).match( /[аæеёиоыэюя]$/i ) ) {
jot = 'й';
}
} else if ( !word.match( /[бвгджзйклмнопрстфхцчшщьъ]$/i ) ) {
}
switch ( form ) {
case 'genitive': // родительный падеж
- if ( word.substr( word.length - 1 ) === 'ь' ) {
- word = word.substr(0, word.length - 1 ) + 'я';
- } else if ( word.substr( word.length - 2 ) === 'ия' ) {
- word = word.substr(0, word.length - 2 ) + 'ии';
- } else if ( word.substr( word.length - 2 ) === 'ка' ) {
- word = word.substr(0, word.length - 2 ) + 'ки';
- } else if ( word.substr( word.length - 2 ) === 'ти' ) {
- word = word.substr(0, word.length - 2 ) + 'тей';
- } else if ( word.substr( word.length - 2 ) === 'ды' ) {
- word = word.substr(0, word.length - 2 ) + 'дов';
- } else if ( word.substr( word.length - 1 ) === 'д' ) {
- word = word.substr(0, word.length - 1 ) + 'да';
- } else if ( word.substr( word.length - 3 ) === 'ные' ) {
- word = word.substr(0, word.length - 3 ) + 'ных';
- } else if ( word.substr( word.length - 3 ) === 'ник' ) {
- word = word.substr(0, word.length - 3 ) + 'ника';
+ if ( word.slice( -1 ) === 'ь' ) {
+ word = word.slice( 0, -1 ) + 'я';
+ } else if ( word.slice( -2 ) === 'ия' ) {
+ word = word.slice( 0, -2 ) + 'ии';
+ } else if ( word.slice( -2 ) === 'ка' ) {
+ word = word.slice( 0, -2 ) + 'ки';
+ } else if ( word.slice( -2 ) === 'ти' ) {
+ word = word.slice( 0, -2 ) + 'тей';
+ } else if ( word.slice( -2 ) === 'ды' ) {
+ word = word.slice( 0, -2 ) + 'дов';
+ } else if ( word.slice( -1 ) === 'д' ) {
+ word = word.slice( 0, -1 ) + 'да';
+ } else if ( word.slice( -3 ) === 'ные' ) {
+ word = word.slice( 0, -3 ) + 'ных';
+ } else if ( word.slice( -3 ) === 'ник' ) {
+ word = word.slice( 0, -3 ) + 'ника';
}
break;
case 'prepositional': // предложный падеж
- if ( word.substr( word.length - 1 ) === 'ь' ) {
- word = word.substr(0, word.length - 1 ) + 'е';
- } else if ( word.substr( word.length - 2 ) === 'ия' ) {
- word = word.substr(0, word.length - 2 ) + 'ии';
- } else if ( word.substr( word.length - 2 ) === 'ка' ) {
- word = word.substr(0, word.length - 2 ) + 'ке';
- } else if ( word.substr( word.length - 2 ) === 'ти' ) {
- word = word.substr(0, word.length - 2 ) + 'тях';
- } else if ( word.substr( word.length - 2 ) === 'ды' ) {
- word = word.substr(0, word.length - 2 ) + 'дах';
- } else if ( word.substr( word.length - 1 ) === 'д' ) {
- word = word.substr(0, word.length - 1 ) + 'де';
- } else if ( word.substr( word.length - 3 ) === 'ные' ) {
- word = word.substr(0, word.length - 3 ) + 'ных';
- } else if ( word.substr( word.length - 3 ) === 'ник' ) {
- word = word.substr(0, word.length - 3 ) + 'нике';
+ if ( word.slice( -1 ) === 'ь' ) {
+ word = word.slice( 0, -1 ) + 'е';
+ } else if ( word.slice( -2 ) === 'ия' ) {
+ word = word.slice( 0, -2 ) + 'ии';
+ } else if ( word.slice( -2 ) === 'ка' ) {
+ word = word.slice( 0, -2 ) + 'ке';
+ } else if ( word.slice( -2 ) === 'ти' ) {
+ word = word.slice( 0, -2 ) + 'тях';
+ } else if ( word.slice( -2 ) === 'ды' ) {
+ word = word.slice( 0, -2 ) + 'дах';
+ } else if ( word.slice( -1 ) === 'д' ) {
+ word = word.slice( 0, -1 ) + 'де';
+ } else if ( word.slice( -3 ) === 'ные' ) {
+ word = word.slice( 0, -3 ) + 'ных';
+ } else if ( word.slice( -3 ) === 'ник' ) {
+ word = word.slice( 0, -3 ) + 'нике';
}
break;
}
}
switch ( form ) {
case 'genitive': // родовий відмінок
- if ( word.substr( word.length - 4 ) !== 'вікі' && word.substr( word.length - 4 ) !== 'Вікі' ) {
- if ( word.substr( word.length - 1 ) === 'ь' ) {
- word = word.substr(0, word.length - 1 ) + 'я';
- } else if ( word.substr( word.length - 2 ) === 'ія' ) {
- word = word.substr(0, word.length - 2 ) + 'ії';
- } else if ( word.substr( word.length - 2 ) === 'ка' ) {
- word = word.substr(0, word.length - 2 ) + 'ки';
- } else if ( word.substr( word.length - 2 ) === 'ти' ) {
- word = word.substr(0, word.length - 2 ) + 'тей';
- } else if ( word.substr( word.length - 2 ) === 'ды' ) {
- word = word.substr(0, word.length - 2 ) + 'дов';
- } else if ( word.substr( word.length - 3 ) === 'ник' ) {
- word = word.substr(0, word.length - 3 ) + 'ника';
+ if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
+ if ( word.slice( -1 ) === 'ь' ) {
+ word = word.slice(0, -1 ) + 'я';
+ } else if ( word.slice( -2 ) === 'ія' ) {
+ word = word.slice(0, -2 ) + 'ії';
+ } else if ( word.slice( -2 ) === 'ка' ) {
+ word = word.slice(0, -2 ) + 'ки';
+ } else if ( word.slice( -2 ) === 'ти' ) {
+ word = word.slice(0, -2 ) + 'тей';
+ } else if ( word.slice( -2 ) === 'ды' ) {
+ word = word.slice(0, -2 ) + 'дов';
+ } else if ( word.slice( -3 ) === 'ник' ) {
+ word = word.slice(0, -3 ) + 'ника';
}
}
break;
case 'accusative': // знахідний відмінок
- if ( word.substr( word.length - 4 ) !== 'вікі' && word.substr( word.length - 4 ) !== 'Вікі' ) {
- if ( word.substr( word.length - 2 ) === 'ія' ) {
- word = word.substr(0, word.length - 2 ) + 'ію';
+ if ( word.slice( -4 ) !== 'вікі' && word.slice( -4 ) !== 'Вікі' ) {
+ if ( word.slice( -2 ) === 'ія' ) {
+ word = word.slice(0, -2 ) + 'ію';
}
}
break;
form = forms[index];
if ( /^\d+=/.test( form ) ) {
equalsPosition = form.indexOf( '=' );
- formCount = parseInt( form.substring( 0, equalsPosition ), 10 );
+ formCount = parseInt( form.slice( 0, equalsPosition ), 10 );
if ( formCount === count ) {
- return form.substr( equalsPosition + 1 );
+ return form.slice( equalsPosition + 1 );
}
forms[index] = undefined;
}
return grammarForms[form][word] || word;
}
return word;
- }
+ },
+ /**
+ * Turn a list of string into a simple list using commas and 'and'.
+ *
+ * See Language::listToText in languages/Language.php
+ *
+ * @param {string[]} list
+ * @return {string}
+ */
+ listToText: function ( list ) {
+ var text = '', i = 0;
+ for ( ; i < list.length; i++ ) {
+ text += list[i];
+ if ( list.length - 2 === i ) {
+ text += mw.msg( 'and' ) + mw.msg( 'word-separator' );
+ } else if ( list.length - 1 !== i ) {
+ text += mw.msg( 'comma-separator' );
+ }
+ }
+ return text;
+ }
} );
}( mediaWiki, jQuery ) );
}
/**
- * Efficiently replicate a string `n` times.
+ * Replicate a string 'n' times.
*
* @private
* @param {string} str The string to replicate
}
var buf = [];
- while (num) {
+ while ( num-- ) {
buf.push( str );
- str += str;
}
return buf.join( '' );
}
// Truncate fractional
if ( maxPlaces < fractional.length ) {
- valueParts[1] = fractional.substr( 0, maxPlaces );
+ valueParts[1] = fractional.slice( 0, maxPlaces );
}
} else {
if ( valueParts[1] ) {
// Truncate whole
if ( patternDigits.indexOf( '#' ) === -1 ) {
- valueParts[0] = valueParts[0].substr( valueParts[0].length - padLength );
+ valueParts[0] = valueParts[0].slice( valueParts[0].length - padLength );
}
}
if ( index !== -1 ) {
groupSize = patternParts[0].length - index - 1;
- remainder = patternParts[0].substr( 0, index );
+ remainder = patternParts[0].slice( 0, index );
index = remainder.lastIndexOf( ',' );
if ( index !== -1 ) {
groupSize2 = remainder.length - index - 1;
}
for ( whole = valueParts[0]; whole; ) {
- off = whole.length - groupSize;
-
- pieces.push( ( off > 0 ) ? whole.substr( off ) : whole );
+ off = groupSize ? whole.length - groupSize : 0;
+ pieces.push( ( off > 0 ) ? whole.slice( off ) : whole );
whole = ( off > 0 ) ? whole.slice( 0, off ) : '';
if ( groupSize2 ) {
groupSize = groupSize2;
+ groupSize2 = null;
}
}
valueParts[0] = pieces.reverse().join( options.group );
--- /dev/null
+/**
+ * Remote Scripting Library
+ * Copyright 2005 modernmethod, inc
+ * Under the open source BSD license
+ * http://www.modernmethod.com/sajax/
+ */
+
+/*jshint camelcase:false */
+/*global alert */
+( function ( mw ) {
+
+/**
+ * if sajax_debug_mode is true, this function outputs given the message into
+ * the element with id = sajax_debug; if no such element exists in the document,
+ * it is injected.
+ */
+function debug( text ) {
+ if ( !window.sajax_debug_mode ) {
+ return false;
+ }
+
+ var b, m,
+ e = document.getElementById( 'sajax_debug' );
+
+ if ( !e ) {
+ e = document.createElement( 'p' );
+ e.className = 'sajax_debug';
+ e.id = 'sajax_debug';
+
+ b = document.getElementsByTagName( 'body' )[0];
+
+ if ( b.firstChild ) {
+ b.insertBefore( e, b.firstChild );
+ } else {
+ b.appendChild( e );
+ }
+ }
+
+ m = document.createElement( 'div' );
+ m.appendChild( document.createTextNode( text ) );
+
+ e.appendChild( m );
+
+ return true;
+}
+
+/**
+ * Compatibility wrapper for creating a new XMLHttpRequest object.
+ */
+function createXhr() {
+ debug( 'sajax_init_object() called..' );
+ var a;
+ try {
+ // Try the new style before ActiveX so we don't
+ // unnecessarily trigger warnings in IE 7 when
+ // set to prompt about ActiveX usage
+ a = new XMLHttpRequest();
+ } catch ( xhrE ) {
+ try {
+ a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
+ } catch ( msXmlE ) {
+ try {
+ a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
+ } catch ( msXhrE ) {
+ a = null;
+ }
+ }
+ }
+ if ( !a ) {
+ debug( 'Could not create connection object.' );
+ }
+
+ return a;
+}
+
+/**
+ * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
+ * func_name - the name of the function to call. Must be registered in $wgAjaxExportList
+ * args - an array of arguments to that function
+ * target - the target that will handle the result of the call. If this is a function,
+ * if will be called with the XMLHttpRequest as a parameter; if it's an input
+ * element, its value will be set to the resultText; if it's another type of
+ * element, its innerHTML will be set to the resultText.
+ *
+ * Example:
+ * sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
+ *
+ * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
+ * (1, 2, 3) as the parameter list, and will show the result in the element
+ * with id = showFoo
+ */
+function doAjaxRequest( func_name, args, target ) {
+ var i, x, uri, post_data;
+ uri = mw.util.wikiScript() + '?action=ajax';
+ if ( window.sajax_request_type === 'GET' ) {
+ if ( uri.indexOf( '?' ) === -1 ) {
+ uri = uri + '?rs=' + encodeURIComponent( func_name );
+ } else {
+ uri = uri + '&rs=' + encodeURIComponent( func_name );
+ }
+ for ( i = 0; i < args.length; i++ ) {
+ uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
+ }
+ //uri = uri + '&rsrnd=' + new Date().getTime();
+ post_data = null;
+ } else {
+ post_data = 'rs=' + encodeURIComponent( func_name );
+ for ( i = 0; i < args.length; i++ ) {
+ post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
+ }
+ }
+ x = createXhr();
+ if ( !x ) {
+ alert( 'AJAX not supported' );
+ return false;
+ }
+
+ try {
+ x.open( window.sajax_request_type, uri, true );
+ } catch ( e ) {
+ if ( location.hostname === 'localhost' ) {
+ alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
+ }
+ throw e;
+ }
+ if ( window.sajax_request_type === 'POST' ) {
+ x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
+ x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
+ }
+ x.setRequestHeader( 'Pragma', 'cache=yes' );
+ x.setRequestHeader( 'Cache-Control', 'no-transform' );
+ x.onreadystatechange = function () {
+ if ( x.readyState !== 4 ) {
+ return;
+ }
+
+ debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
+
+ //if ( x.status != 200 )
+ // alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
+ //else
+
+ if ( typeof target === 'function' ) {
+ target( x );
+ } else if ( typeof target === 'object' ) {
+ if ( target.tagName === 'INPUT' ) {
+ if ( x.status === 200 ) {
+ target.value = x.responseText;
+ }
+ //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
+ } else {
+ if ( x.status === 200 ) {
+ target.innerHTML = x.responseText;
+ } else {
+ target.innerHTML = '<div class="error">Error: ' + x.status +
+ ' ' + x.statusText + ' (' + x.responseText + ')</div>';
+ }
+ }
+ } else {
+ alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
+ }
+ };
+
+ debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
+ x.send( post_data );
+ debug( func_name + ' waiting..' );
+
+ return true;
+}
+
+/**
+ * @return {boolean} Whether the browser supports AJAX
+ */
+function wfSupportsAjax() {
+ var request = createXhr(),
+ supportsAjax = request ? true : false;
+
+ request = undefined;
+ return supportsAjax;
+}
+
+// Expose + Mark as deprecated
+var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
+
+// Variables
+mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
+mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
+// Methods
+mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
+mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
+mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
+mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
+
+}( mediaWiki ) );
--- /dev/null
+/**
+ * MediaWiki Print style sheet for CSS2-capable browsers.
+ * Copyright Gabriel Wicke, http://www.aulinx.de/
+ *
+ * Derived from the plone (http://plone.org/) styles
+ * Copyright Alexander Limi
+ */
+
+/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
+
+/**
+ * Hide all the elements irrelevant for printing
+ */
+.noprint,
+div#jump-to-nav,
+.mw-jump,
+div.top,
+div#column-one,
+#colophon,
+.mw-editsection,
+.mw-editsection-like,
+.toctoggle,
+#toc.tochidden,
+div#f-poweredbyico,
+div#f-copyrightico,
+li#viewcount,
+li#about,
+li#disclaimer,
+li#mobileview,
+li#privacy,
+#footer-places,
+.mw-hidden-catlinks,
+tr.mw-metadata-show-hide-extended,
+span.mw-filepage-other-resolutions,
+#filetoc,
+.usermessage,
+.patrollink,
+#mw-navigation,
+#siteNotice {
+ 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;
+ margin: 0;
+ padding: 0;
+}
+
+ul {
+ list-style-type: square;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+}
+
+dt {
+ font-weight: bold;
+}
+
+p {
+ margin: 1em 0;
+ line-height: 1.2em;
+}
+
+pre, .mw-code {
+ border: 1pt dashed black;
+ white-space: pre;
+ font-size: 8pt;
+ overflow: auto;
+ padding: 1em 0;
+ background: white;
+ color: black;
+}
+
+/**
+ * MediaWiki-specific elements
+ */
+#globalWrapper {
+ width: 100% !important;
+ min-width: 0 !important;
+}
+
+.mw-body {
+ background: white;
+ border: none !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ direction: ltr;
+ color: black;
+}
+
+#column-content {
+ margin: 0 !important;
+}
+
+#column-content .mw-body {
+ padding: 1em;
+ margin: 0 !important;
+}
+
+#toc {
+ border: 1px solid #aaaaaa;
+ background-color: #f9f9f9;
+ padding: 5px;
+ display: -moz-inline-block;
+ display: inline-block;
+ display: table;
+ /* IE7 and earlier */
+ zoom: 1;
+ *display: inline;
+}
+
+#footer {
+ background: white;
+ color: black;
+ margin-top: 1em;
+ border-top: 1px solid #AAA;
+ direction: ltr;
+}
+
+img {
+ border: none;
+ vertical-align: middle;
+}
+
+/* math */
+span.texhtml {
+ font-family: serif;
+}
+
+/**
+ * Links
+ */
+a.stub,
+a.new {
+ color: #ba0000;
+ text-decoration: none;
+}
+
+a {
+ color: black !important;
+ background: none !important;
+ padding: 0 !important;
+}
+
+a:link, a:visited {
+ color: #520;
+ background: transparent;
+ text-decoration: underline;
+}
+
+/* Expand URLs for printing */
+.mw-body a.external.text:after,
+.mw-body a.external.autonumber:after {
+ content: " (" attr(href) ")";
+}
+
+/* Expand protocol-relative URLs for printing */
+.mw-body a.external.text[href^='//']:after,
+.mw-body a.external.autonumber[href^='//']:after {
+ content: " (https:" attr(href) ")";
+}
+
+/* MSIE/Win doesn't understand 'inherit' */
+a,
+a.external,
+a.new,
+a.stub {
+ color: black !important;
+ text-decoration: none !important;
+}
+
+/* Continue ... */
+a,
+a.external,
+a.new,
+a.stub {
+ color: inherit !important;
+ text-decoration: inherit !important;
+}
+
+/**
+ * Floating divs
+ */
+div.floatright {
+ float: right;
+ clear: right;
+ position: relative;
+ margin: 0.5em 0 0.8em 1.4em;
+}
+
+div.floatright p {
+ font-style: italic;
+}
+
+div.floatleft {
+ float: left;
+ clear: left;
+ position: relative;
+ margin: 0.5em 1.4em 0.8em 0;
+}
+
+div.floatleft p {
+ font-style: italic;
+}
+
+div.center {
+ text-align: center;
+}
+
+/**
+ * Thumbnails
+ */
+div.thumb {
+ border: none;
+ width: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.8em;
+ background-color: transparent;
+}
+
+div.thumbinner {
+ border: 1px solid #cccccc;
+ padding: 3px !important;
+ background-color: White;
+ font-size: 94%;
+ text-align: center;
+ overflow: hidden;
+}
+
+html .thumbimage {
+ border: 1px solid #cccccc;
+}
+
+html .thumbcaption {
+ border: none;
+ text-align: left;
+ line-height: 1.4em;
+ padding: 3px !important;
+ font-size: 94%;
+}
+
+div.magnify {
+ display: none;
+}
+
+/* @noflip */
+div.tright {
+ float: right;
+ clear: right;
+ margin: 0.5em 0 0.8em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+ float: left;
+ clear: left;
+ margin: 0.5em 1.4em 0.8em 0;
+}
+
+img.thumbborder {
+ border: 1px solid #dddddd;
+}
+
+/**
+ * Galleries (see shared.css for more info)
+ */
+li.gallerybox {
+ vertical-align: top;
+ display: inline-block;
+}
+
+ul.gallery, li.gallerybox {
+ zoom: 1;
+ *display: inline;
+}
+
+ul.gallery {
+ margin: 2px;
+ padding: 2px;
+ display: block;
+}
+
+li.gallerycaption {
+ font-weight: bold;
+ text-align: center;
+ display: block;
+ word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+ text-align: center;
+ border: 1px solid #ccc;
+ margin: 2px;
+}
+
+div.gallerytext {
+ overflow: hidden;
+ font-size: 94%;
+ padding: 2px 4px;
+ word-wrap: break-word;
+}
+
+/**
+ * Diff rendering
+ */
+table.diff {
+ background: white;
+}
+
+td.diff-otitle {
+ background: #ffffff;
+}
+
+td.diff-ntitle {
+ background: #ffffff;
+}
+
+td.diff-addedline {
+ background: #ccffcc;
+ font-size: smaller;
+ border: solid 2px black;
+}
+
+td.diff-deletedline {
+ background: #ffffaa;
+ font-size: smaller;
+ border: dotted 2px black;
+}
+
+td.diff-context {
+ background: #eeeeee;
+ font-size: smaller;
+}
+
+.diffchange {
+ color: silver;
+ font-weight: bold;
+ text-decoration: underline;
+}
+
+/**
+ * Table rendering
+ * As on shared.css but with white background.
+ */
+table.wikitable,
+table.mw_metadata {
+ margin: 1em 0;
+ border: 1px #aaa solid;
+ background: white;
+ 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;
+ padding: 0.2em;
+}
+
+table.wikitable > tr > th,
+table.wikitable > * > tr > th,
+.mw_metadata th {
+ text-align: center;
+ background: white;
+ font-weight: bold;
+}
+
+table.wikitable > caption,
+.mw_metadata caption {
+ font-weight: bold;
+}
+
+table.listing,
+table.listing td {
+ border: 1pt solid black;
+ border-collapse: collapse;
+}
+
+a.sortheader {
+ margin: 0 0.3em;
+}
+
+/**
+ * Categories
+ */
+.catlinks ul {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ list-style-type: none;
+ list-style-image: none;
+ vertical-align: middle !ie;
+}
+
+.catlinks li {
+ display: inline-block;
+ line-height: 1.15em;
+ padding: 0 .4em;
+ border-left: 1px solid #AAA;
+ margin: 0.1em 0;
+ zoom: 1;
+ display: inline !ie;
+}
+
+.catlinks li:first-child {
+ padding-left: .2em;
+ border-left: none;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
--- /dev/null
+/**
+ * oldshared.css
+ * This file contains CSS settings common to Wikistandard, Nostalgia and
+ * CologneBlue, the old pre-Monobook skins
+ */
+
+/* For clarity, explicitly state some recommendations from
+ * http://www.w3.org/TR/CSS21/sample.html to make sure the editsection links scale right
+ */
+
+h1 {
+ font-size: 2em;
+}
+
+h2 {
+ font-size: 1.5em;
+}
+
+h3 {
+ font-size: 1.17em;
+}
+
+h4 {
+ font-size: 1.11em;
+}
+
+h5 {
+ font-size: 1.05em;
+}
+
+h6 {
+ font-size: 1em;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bolder;
+}
+
+/* Now the custom parts */
+
+#footer {
+ clear: both;
+}
+
+/* images */
+/* @noflip */
+div.floatright {
+ float: right;
+ clear: right;
+ margin: 0 0 1em 1em;
+}
+
+/* @noflip */
+div.floatright p {
+ font-style: italic;
+}
+
+/* @noflip */
+div.floatleft {
+ float: left;
+ clear: left;
+ margin: 0.3em 0.5em 0.5em 0;
+}
+
+/* @noflip */
+div.floatleft p {
+ font-style: italic;
+}
+
+/* table standards */
+table.rimage {
+ float: right;
+ margin-left: 1em;
+ margin-bottom: 1em;
+ text-align: center;
+ font-size: smaller;
+}
+
+/* thumbnails */
+div.thumb {
+ margin-bottom: .5em;
+ border-style: solid;
+ border-color: white;
+ width: auto;
+}
+
+div.thumbinner {
+ border: 1px solid #ccc;
+ padding: 3px;
+ background-color: #f9f9f9;
+ font-size: 94%;
+ text-align: center;
+ overflow: hidden;
+}
+
+html .thumbimage {
+ border: 1px solid #ccc;
+}
+
+html .thumbcaption {
+ border: none;
+ line-height: 1.4em;
+ padding: 3px;
+ font-size: 94%;
+ text-align: left;
+}
+
+div.magnify {
+ float: right;
+ margin-left: 3px;
+}
+
+div.magnify a {
+ display: block;
+ /* Hide the text… */
+ text-indent: 15px;
+ white-space: nowrap;
+ overflow: hidden;
+ /* …and replace it with the image */
+ width: 15px;
+ height: 11px;
+ /* @embed */
+ background: url(images/magnify-clip-ltr.png) center center no-repeat;
+ /* Don't annoy people who copy-paste everything too much */
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* Temporary WMF deployment hack, to be removed before 1.24 release */
+div.magnify img {
+ display: none;
+}
+
+/* @noflip */
+div.tright {
+ clear: right;
+ float: right;
+ border-width: .5em 0 .8em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+ float: left;
+ clear: left;
+ margin-right: .5em;
+ border-width: .5em 1.4em .8em 0;
+}
+
+img.thumbborder {
+ border: 1px solid #dddddd;
+}
+
+/* Page history styling */
+/* the auto-generated edit comments */
+.autocomment {
+ color: #4b4b4b;
+}
+
+img {
+ border: none;
+}
+
+#toc,
+.toc {
+ border: 1px solid #bba;
+ background-color: #f7f8ff;
+ padding: 5px;
+ font-size: 95%;
+ text-align: center;
+ display: -moz-inline-block;
+ display: inline-block;
+ display: table;
+
+ /* IE7 and earlier */
+ zoom: 1;
+ *display: inline;
+
+ padding: 7px;
+}
+
+/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
+table#toc,
+table.toc {
+ border-collapse: collapse;
+}
+
+/* Remove additional paddings inside table-cells that are not present in <div>s */
+table#toc td,
+table.toc td {
+ padding: 0;
+}
+
+#toc h2,
+.toc h2 {
+ display: inline;
+ border: none;
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+}
+
+#toc ul,
+.toc ul {
+ list-style-type: none;
+ list-style-image: none;
+ padding: 0;
+ text-align: left;
+}
+
+#toc ul ul,
+.toc ul ul {
+ margin: 0 0 0 2em;
+}
+
+#toc .toctoggle,
+.toc .toctoggle {
+ font-size: 94%;
+}
+
+.error {
+ color: red;
+ font-size: larger;
+}
+
+/* preference page with js-genrated toc */
+#preftoc {
+ float: left;
+ margin: 1em 1em 1em 1em;
+ width: 13em;
+}
+
+#preftoc li {
+ border: 1px solid White;
+}
+
+#preftoc li.selected {
+ background-color: #f9f9f9;
+ border: 1px dashed #aaaaaa;
+}
+
+#preftoc a,
+#preftoc a:active {
+ display: block;
+ color: #005189;
+}
+
+.mw-prefs-buttons {
+ clear: left;
+ float: left;
+ margin-top: 1em;
+}
+
+div.htmlform-tip {
+ font-size: 94%;
+ margin-top: 0.4em;
+ color: #666;
+}
+
+fieldset.prefsection {
+ margin-top: 1em;
+}
+
+fieldset.operaprefsection {
+ margin-left: 15em;
+}
+
+/* emulate center */
+.center {
+ width: 100%;
+ text-align: center;
+}
+
+*.center * {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* small for tables and similar */
+.small {
+ font-size: 94%;
+}
+
+table.small {
+ font-size: 100%;
+}
+
+/* use this instead of #toc for page content */
+.toccolours {
+ border: 1px solid #aaaaaa;
+ background-color: #f9f9f9;
+ padding: 5px;
+ font-size: 95%;
+}
+
+#siteNotice {
+ border: 1px solid #aaaaaa;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+}
+
+.sharedUploadNotice {
+ font-style: italic;
+}
+
+span.unpatrolled {
+ font-weight: bold;
+ color: red;
+}
+
+span.updatedmarker {
+ color: black;
+ background-color: #00FF00;
+}
+
+div.gallerybox {
+ width: 150px;
+}
+
+span.comment {
+ font-style: italic;
+}
+
+span.changedby {
+ font-size: 95%;
+}
+
+.previewnote {
+ text-align: center;
+ color: #cc0000;
+}
+
+.editExternally {
+ border-style: solid;
+ border-width: 1px;
+ border-color: gray;
+ background: #ffffff;
+ padding: 3px;
+ margin-top: 0.5em;
+ float: left;
+ font-size: small;
+ text-align: center;
+}
+
+.editExternallyHelp {
+ font-style: italic;
+ color: gray;
+}
+
+li span.deleted {
+ text-decoration: line-through;
+ color: #888;
+ font-style: italic;
+}
+
+/* Classes for Exif data display */
+table.mw_metadata {
+ margin-left: 0.5em;
+}
+
+table.mw_metadata caption {
+ font-weight: bold;
+}
+
+table.mw_metadata th {
+ font-weight: normal;
+}
+
+table.mw_metadata td {
+ padding: 0.1em;
+}
+
+table.mw_metadata {
+ border: none;
+ border-collapse: collapse;
+}
+
+table.mw_metadata td,
+table.mw_metadata th {
+ border: 1px solid #aaaaaa;
+ padding-left: 4px;
+ padding-right: 4px;
+}
+
+table.mw_metadata th {
+ background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+ background-color: #fcfcfc;
+}
+
+table.mw_metadata td.spacer {
+ background: inherit;
+ border-top: none;
+ border-bottom: none;
+}
+
+.visualClear {
+ clear: both;
+}
+
+/* Allmessages table */
+#allmessagestable th {
+ background-color: #b2b2ff;
+}
+
+#allmessagestable tr.orig {
+ background-color: #ffe2e2;
+}
+
+#allmessagestable tr.new {
+ background-color: #e2ffe2;
+}
+
+#allmessagestable tr.def {
+ background-color: #f0f0ff;
+}
+
+#jump-to-nav {
+ display: none;
+}
+
+div.multipageimagenavbox {
+ border: solid 1px silver;
+ padding: 4px;
+ margin: 1em;
+ background: #f0f0f0;
+}
+
+div.multipageimagenavbox div.thumb {
+ border: none;
+ margin-left: 2em;
+ margin-right: 2em;
+}
+
+div.multipageimagenavbox hr {
+ margin: 6px;
+}
+
+table.multipageimage td {
+ text-align: center;
+}
+
+.templatesUsed {
+ margin-top: 1em;
+}
+
+.MediaTransformError {
+ border: thin solid #777;
+ background-color: #ccc;
+ padding: 0.1em;
+}
+
+.MediaTransformError td {
+ text-align: center;
+ vertical-align: middle;
+ font-size: 90%;
+}
+
+form#specialpages {
+ display: inline;
+}
+
+body {
+ direction: ltr;
+ unicode-bidi: embed;
+ background-color: #ffffec;
+}
+
+body.ns-0 {
+ background-color: white;
+}
+
+/** RTL specific CSS starts here **/
+
+/**
+ * Lists:
+ * The following lines don't have a visible effect on non-Gecko browsers
+ * They fix a problem with Gecko browsers rendering lists to the right of
+ * left-floated objects in an RTL layout.
+ */
+/* @noflip */
+html > body.rtl div#article ul {
+ display: table;
+}
+
+/* @noflip */
+html > body.rtl .mw-body ul#filetoc {
+ display: block;
+}
+
+/* RTL specific CSS ends here **/
--- /dev/null
+( function ( mw, $ ) {
+
+var ProtectionForm = window.ProtectionForm = {
+ existingMatch: false,
+
+ /**
+ * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
+ * on the protection form
+ *
+ * @param opts Object : parameters with members:
+ * tableId Identifier of the table containing UI bits
+ * labelText Text to use for the checkbox label
+ * numTypes The number of protection types
+ * existingMatch True if all the existing expiry times match
+ */
+ init: function ( opts ) {
+ var box, boxbody, row, cell, check, label;
+
+ if ( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) ) {
+ return false;
+ }
+
+ box = document.getElementById( opts.tableId );
+ if ( !box ) {
+ return false;
+ }
+
+ boxbody = box.getElementsByTagName( 'tbody' )[0];
+ row = document.createElement( 'tr' );
+ boxbody.insertBefore( row, boxbody.firstChild.nextSibling );
+
+ this.existingMatch = opts.existingMatch;
+
+ cell = document.createElement( 'td' );
+ row.appendChild( cell );
+ // If there is only one protection type, there is nothing to chain
+ if ( opts.numTypes > 1 ) {
+ check = document.createElement( 'input' );
+ check.id = 'mwProtectUnchained';
+ check.type = 'checkbox';
+ $( check ).click( function () {
+ ProtectionForm.onChainClick();
+ } );
+
+ label = document.createElement( 'label' );
+ label.htmlFor = 'mwProtectUnchained';
+ label.appendChild( document.createTextNode( opts.labelText ) );
+
+ cell.appendChild( check );
+ cell.appendChild( document.createTextNode( ' ' ) );
+ cell.appendChild( label );
+
+ check.checked = !this.areAllTypesMatching();
+ this.enableUnchainedInputs( check.checked );
+ }
+
+ $( '#mwProtect-reason' ).byteLimit( 180 );
+
+ this.updateCascadeCheckbox();
+
+ return true;
+ },
+
+ /**
+ * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
+ */
+ updateCascadeCheckbox: function () {
+ var i, lists, items, selected;
+
+ // For non-existent titles, there is no cascade option
+ if ( !document.getElementById( 'mwProtect-cascade' ) ) {
+ return;
+ }
+ lists = this.getLevelSelectors();
+ for ( i = 0; i < lists.length; i++ ) {
+ if ( lists[i].selectedIndex > -1 ) {
+ items = lists[i].getElementsByTagName( 'option' );
+ selected = items[ lists[i].selectedIndex ].value;
+ if ( !this.isCascadeableLevel( selected ) ) {
+ document.getElementById( 'mwProtect-cascade' ).checked = false;
+ document.getElementById( 'mwProtect-cascade' ).disabled = true;
+ return;
+ }
+ }
+ }
+ document.getElementById( 'mwProtect-cascade' ).disabled = false;
+ },
+
+ /**
+ * Checks if a cerain protection level is cascadeable.
+ * @param level {String}
+ * @return {Boolean}
+ */
+ isCascadeableLevel: function ( level ) {
+ var cascadeLevels, len, i;
+
+ cascadeLevels = mw.config.get( 'wgCascadeableLevels' );
+ // cascadeLevels isn't defined on all pages
+ if ( cascadeLevels ) {
+ for ( i = 0, len = cascadeLevels.length; i < len; i += 1 ) {
+ if ( cascadeLevels[i] === level ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ },
+
+ /**
+ * When protection levels are locked together, update the rest
+ * when one action's level changes
+ *
+ * @param source Element Level selector that changed
+ */
+ updateLevels: function ( source ) {
+ if ( !this.isUnchained() ) {
+ this.setAllSelectors( source.selectedIndex );
+ }
+ this.updateCascadeCheckbox();
+ },
+
+ /**
+ * When protection levels are locked together, update the
+ * expiries when one changes
+ *
+ * @param source Element expiry input that changed
+ */
+
+ updateExpiry: function ( source ) {
+ var expiry, listId, list;
+
+ if ( !this.isUnchained() ) {
+ expiry = source.value;
+ this.forEachExpiryInput( function ( element ) {
+ element.value = expiry;
+ } );
+ }
+ listId = source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' );
+ list = document.getElementById( listId );
+ if ( list && list.value !== 'othertime' ) {
+ if ( this.isUnchained() ) {
+ list.value = 'othertime';
+ } else {
+ this.forEachExpirySelector( function ( element ) {
+ element.value = 'othertime';
+ } );
+ }
+ }
+ },
+
+ /**
+ * When protection levels are locked together, update the
+ * expiry lists when one changes and clear the custom inputs
+ *
+ * @param source Element expiry selector that changed
+ */
+ updateExpiryList: function ( source ) {
+ var expiry;
+ if ( !this.isUnchained() ) {
+ expiry = source.value;
+ this.forEachExpirySelector( function ( element ) {
+ element.value = expiry;
+ } );
+ this.forEachExpiryInput( function ( element ) {
+ element.value = '';
+ } );
+ }
+ },
+
+ /**
+ * Update chain status and enable/disable various bits of the UI
+ * when the user changes the "unlock move permissions" checkbox
+ */
+ onChainClick: function () {
+ if ( this.isUnchained() ) {
+ this.enableUnchainedInputs( true );
+ } else {
+ this.setAllSelectors( this.getMaxLevel() );
+ this.enableUnchainedInputs( false );
+ }
+ this.updateCascadeCheckbox();
+ },
+
+ /**
+ * Returns true if the named attribute in all objects in the given array are matching
+ */
+ matchAttribute: function ( objects, attrName ) {
+ var i, element, value;
+
+ // Check levels
+ value = null;
+ for ( i = 0; i < objects.length; i++ ) {
+ element = objects[i];
+ if ( value === null ) {
+ value = element[attrName];
+ } else {
+ if ( value !== element[attrName] ) {
+ return false;
+ }
+ }
+ }
+ return true;
+ },
+
+ /**
+ * Are all actions protected at the same level, with the same expiry time?
+ *
+ * @return boolean
+ */
+ areAllTypesMatching: function () {
+ return this.existingMatch
+ && this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
+ && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
+ && this.matchAttribute( this.getExpiryInputs(), 'value' );
+ },
+
+ /**
+ * Is protection chaining off?
+ *
+ * @return bool
+ */
+ isUnchained: function () {
+ var element = document.getElementById( 'mwProtectUnchained' );
+ return element
+ ? element.checked
+ : true; // No control, so we need to let the user set both levels
+ },
+
+ /**
+ * Find the highest protection level in any selector
+ */
+ getMaxLevel: function () {
+ var maxIndex = -1;
+ this.forEachLevelSelector( function ( element ) {
+ if ( element.selectedIndex > maxIndex ) {
+ maxIndex = element.selectedIndex;
+ }
+ } );
+ return maxIndex;
+ },
+
+ /**
+ * Protect all actions at the specified level
+ *
+ * @param index int Protection level
+ */
+ setAllSelectors: function ( index ) {
+ this.forEachLevelSelector( function ( element ) {
+ if ( element.selectedIndex !== index ) {
+ element.selectedIndex = index;
+ }
+ } );
+ },
+
+ /**
+ * Apply a callback to each protection selector
+ *
+ * @param func callable Callback function
+ */
+ forEachLevelSelector: function ( func ) {
+ var i, selectors;
+
+ selectors = this.getLevelSelectors();
+ for ( i = 0; i < selectors.length; i++ ) {
+ func( selectors[i] );
+ }
+ },
+
+ /**
+ * Get a list of all protection selectors on the page
+ *
+ * @return Array
+ */
+ getLevelSelectors: function () {
+ var i, ours, all, element;
+
+ all = document.getElementsByTagName( 'select' );
+ ours = [];
+ for ( i = 0; i < all.length; i++ ) {
+ element = all[i];
+ if ( element.id.match( /^mwProtect-level-/ ) ) {
+ ours[ours.length] = element;
+ }
+ }
+ return ours;
+ },
+
+ /**
+ * Apply a callback to each expiry input
+ *
+ * @param func callable Callback function
+ */
+ forEachExpiryInput: function ( func ) {
+ var i, inputs;
+
+ inputs = this.getExpiryInputs();
+ for ( i = 0; i < inputs.length; i++ ) {
+ func( inputs[i] );
+ }
+ },
+
+ /**
+ * Get a list of all expiry inputs on the page
+ *
+ * @return Array
+ */
+ getExpiryInputs: function () {
+ var i, all, element, ours;
+
+ all = document.getElementsByTagName( 'input' );
+ ours = [];
+ for ( i = 0; i < all.length; i++ ) {
+ element = all[i];
+ if ( element.name.match( /^mwProtect-expiry-/ ) ) {
+ ours[ours.length] = element;
+ }
+ }
+ return ours;
+ },
+
+ /**
+ * Apply a callback to each expiry selector list
+ * @param func callable Callback function
+ */
+ forEachExpirySelector: function ( func ) {
+ var i, inputs;
+
+ inputs = this.getExpirySelectors();
+ for ( i = 0; i < inputs.length; i++ ) {
+ func( inputs[i] );
+ }
+ },
+
+ /**
+ * Get a list of all expiry selector lists on the page
+ *
+ * @return Array
+ */
+ getExpirySelectors: function () {
+ var i, all, ours, element;
+
+ all = document.getElementsByTagName( 'select' );
+ ours = [];
+ for ( i = 0; i < all.length; i++ ) {
+ element = all[i];
+ if ( element.id.match( /^mwProtectExpirySelection-/ ) ) {
+ ours[ours.length] = element;
+ }
+ }
+ return ours;
+ },
+
+ /**
+ * Enable/disable protection selectors and expiry inputs
+ *
+ * @param val boolean Enable?
+ */
+ enableUnchainedInputs: function ( val ) {
+ var first = true;
+
+ this.forEachLevelSelector( function ( element ) {
+ if ( first ) {
+ first = false;
+ } else {
+ element.disabled = !val;
+ }
+ } );
+ first = true;
+ this.forEachExpiryInput( function ( element ) {
+ if ( first ) {
+ first = false;
+ } else {
+ element.disabled = !val;
+ }
+ } );
+ first = true;
+ this.forEachExpirySelector( function ( element ) {
+ if ( first ) {
+ first = false;
+ } else {
+ element.disabled = !val;
+ }
+ } );
+ }
+};
+
+}( mediaWiki, jQuery ) );
--- /dev/null
+/**
+ * CSS in this file is used by *all* skins (that have any CSS at all). Be
+ * careful what you put in here, since what looks good in one skin may not in
+ * another, but don't ignore the poor pre-Monobook users either.
+ */
+
+/* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
+
+/**
+ * These classes should be used for text depending on the content direction.
+ * Content stuff like editsection, ul/ol and TOC depend on this.
+ */
+.mw-content-ltr {
+ /* @noflip */
+ direction: ltr;
+}
+
+.mw-content-rtl {
+ /* @noflip */
+ direction: rtl;
+}
+
+/* Most input fields should be in site direction */
+.sitedir-ltr textarea,
+.sitedir-ltr input {
+ /* @noflip */
+ direction: ltr;
+}
+
+.sitedir-rtl textarea,
+.sitedir-rtl input {
+ /* @noflip */
+ direction: rtl;
+}
+
+/* User-Agent styles for new HTML5 elements */
+mark {
+ background-color: yellow;
+ color: black;
+}
+
+/* Helper for wbr element on IE 8+; in HTML5, but not supported by default as of IE 11. */
+/* Note canonical HTML5 styles recommend "content: \u200B", but this doesn't work as of IE 11. */
+wbr {
+ display: inline-block;
+}
+
+/* Input types that should follow user direction, like buttons */
+/* TODO: What about buttons in wikipage content ? */
+input[type="submit"],
+input[type="button"],
+input[type="reset"],
+input[type="file"] {
+ direction: ltr;
+}
+
+/* Override default values */
+textarea[dir="ltr"],
+input[dir="ltr"] {
+ /* @noflip */
+ direction: ltr;
+}
+
+textarea[dir="rtl"],
+input[dir="rtl"] {
+ /* @noflip */
+ direction: rtl;
+}
+
+/* Default style for semantic tags */
+abbr[title],
+.explain[title] {
+ border-bottom: 1px dotted;
+ cursor: help;
+}
+
+/* Colored watchlist and recent changes numbers */
+.mw-plusminus-pos {
+ color: #006400; /* dark green */
+}
+
+.mw-plusminus-neg {
+ color: #8b0000; /* dark red */
+}
+
+.mw-plusminus-null {
+ color: #aaa; /* gray */
+}
+
+/**
+ * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
+ * [[Special:Watchlist/edit]] and in category listings.
+ */
+.allpagesredirect,
+.redirect-in-category,
+.watchlistredir {
+ font-style: italic;
+}
+
+/* Comment and username portions of RC entries */
+span.comment {
+ font-style: italic;
+}
+
+span.changedby {
+ font-size: 95%;
+}
+
+/* Math */
+.texvc {
+ direction: ltr;
+ unicode-bidi: embed;
+}
+
+img.tex {
+ vertical-align: middle;
+}
+
+span.texhtml {
+ font-family: serif;
+}
+
+/**
+ * Add a bit of margin space between the preview and the toolbar.
+ * This replaces the ugly <p><br /></p> we used to insert into the page source
+ */
+#wikiPreview.ontop {
+ margin-bottom: 1em;
+}
+
+/* Stop floats from intruding into edit area in previews */
+#editform,
+#toolbar,
+#wpTextbox1 {
+ clear: both;
+}
+
+#toolbar img {
+ cursor: pointer;
+}
+
+/**
+ * File description page
+ */
+
+div.mw-filepage-resolutioninfo {
+ font-size: smaller;
+}
+
+/**
+ * File histories
+ */
+h2#filehistory {
+ clear: both;
+}
+
+table.filehistory th,
+table.filehistory td {
+ vertical-align: top;
+}
+
+table.filehistory th {
+ text-align: left;
+}
+
+table.filehistory td.mw-imagepage-filesize,
+table.filehistory th.mw-imagepage-filesize {
+ white-space: nowrap;
+}
+
+table.filehistory td.filehistory-selected {
+ font-weight: bold;
+}
+
+/**
+ * Add a checkered background image on hover for file
+ * description pages. (bug 26470)
+ */
+.filehistory a img,
+#file img:hover {
+ /* @embed */
+ background: white url(images/checker.png) repeat;
+}
+
+/**
+ * rev_deleted stuff
+ */
+li span.deleted,
+span.history-deleted {
+ text-decoration: line-through;
+ color: #888;
+ font-style: italic;
+}
+
+/**
+ * Patrol stuff
+ */
+.not-patrolled {
+ background-color: #ffa;
+}
+
+.unpatrolled {
+ font-weight: bold;
+ color: red;
+}
+
+div.patrollink {
+ font-size: 75%;
+ text-align: right;
+}
+
+/**
+ * Forms
+ */
+td.mw-label {
+ text-align: right;
+}
+
+td.mw-input {
+ text-align: left;
+}
+
+td.mw-submit {
+ text-align: left;
+}
+
+td.mw-label {
+ vertical-align: top;
+}
+
+.prefsection td.mw-label {
+ width: 20%;
+}
+
+.prefsection table {
+ width: 100%;
+}
+
+.prefsection table.mw-htmlform-matrix {
+ width: auto;
+}
+
+.mw-icon-question {
+ /* SVG support using a transparent gradient to guarantee cross-browser
+ * compatibility (browsers able to understand gradient syntax support also SVG).
+ * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+ background-image: url(images/question.png);
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/question.svg);
+ background-repeat: no-repeat;
+ background-size: 13px 13px;
+ display: inline-block;
+ height: 13px;
+ width: 13px;
+ margin-left: 4px;
+}
+
+.mw-icon-question:lang(ar),
+.mw-icon-question:lang(fa),
+.mw-icon-question:lang(ur) {
+ -webkit-transform: scaleX(-1);
+ -ms-transform: scaleX(-1);
+ transform: scaleX(-1);
+}
+
+td.mw-submit {
+ white-space: nowrap;
+}
+
+table.mw-htmlform-nolabel td.mw-label {
+ width: 1px;
+}
+
+tr.mw-htmlform-vertical-label td.mw-label {
+ text-align: left !important;
+}
+
+.mw-htmlform-invalid-input td.mw-input input {
+ border-color: red;
+}
+
+.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
+ display: inline;
+ margin-right: 1em;
+ white-space: nowrap;
+}
+
+.mw-htmlform-matrix td {
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+}
+
+input#wpSummary {
+ width: 80%;
+ margin-bottom: 1em;
+}
+
+/**
+ * Image captions.
+ *
+ * This is only meant to provide the most basic of styles, visual settings shouldn't be added here.
+ */
+
+/* @noflip */
+.mw-content-ltr .thumbcaption {
+ text-align: left;
+}
+
+/* @noflip */
+.mw-content-ltr .magnify {
+ float: right;
+}
+
+/* @noflip */
+.mw-content-rtl .thumbcaption {
+ text-align: right;
+}
+
+/* @noflip */
+.mw-content-rtl .magnify {
+ float: left;
+}
+
+/**
+ * Categories
+ */
+#catlinks {
+ /**
+ * Overrides text justification (user preference)
+ * See bug 31990
+ */
+ text-align: left;
+}
+
+.catlinks ul {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ list-style-type: none;
+ list-style-image: none;
+ vertical-align: middle !ie;
+}
+
+.catlinks li {
+ display: inline-block;
+ line-height: 1.25em;
+ border-left: 1px solid #AAA;
+ margin: 0.125em 0;
+ padding: 0 0.5em;
+ zoom: 1;
+ display: inline !ie;
+}
+
+.catlinks li:first-child {
+ padding-left: 0.25em;
+ border-left: none;
+}
+
+/* (bug 5346) make category redirects italic */
+.catlinks li a.mw-redirect {
+ font-style: italic;
+}
+
+/**
+ * Hidden categories
+ */
+.mw-hidden-cats-hidden {
+ display: none;
+}
+
+.catlinks-allhidden {
+ display: none;
+}
+
+/**
+ * Convenience links to edit block, delete and protect reasons
+ * and upload licenses
+ */
+p.mw-ipb-conveniencelinks,
+p.mw-protect-editreasons,
+p.mw-filedelete-editreasons,
+p.mw-delete-editreasons,
+p.mw-revdel-editreasons,
+p.mw-upload-editlicenses {
+ font-size: 90%;
+ text-align: right;
+}
+
+/* Page history styling */
+
+/* The auto-generated edit comments */
+.autocomment {
+ color: gray;
+}
+
+#pagehistory .history-user {
+ margin-left: 0.4em;
+ margin-right: 0.2em;
+}
+
+#pagehistory span.minor {
+ font-weight: bold;
+}
+
+#pagehistory li {
+ border: 1px solid white;
+}
+
+#pagehistory li.selected {
+ background-color: #f9f9f9;
+ border: 1px dashed #aaa;
+}
+
+.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
+ float: right;
+}
+
+/** Generic minor/bot/newpage styling (recent changes) */
+.newpage,
+.minoredit,
+.botedit {
+ font-weight: bold;
+}
+
+#shared-image-dup,
+#shared-image-conflict {
+ font-style: italic;
+}
+
+/**
+ * Recreating deleted page warning
+ * Reupload file warning
+ * Page protection warning
+ * incl. log entries for these warnings
+ */
+div.mw-warning-with-logexcerpt {
+ padding: 3px;
+ margin-bottom: 3px;
+ border: 2px solid #2F6FAB;
+ clear: both;
+}
+
+div.mw-warning-with-logexcerpt ul li {
+ font-size: 90%;
+}
+
+/* (show/hide) revision deletion links */
+span.mw-revdelundel-link,
+strong.mw-revdelundel-link {
+ font-size: 90%;
+}
+
+span.mw-revdelundel-hidden,
+input.mw-revdelundel-hidden {
+ visibility: hidden;
+}
+
+td.mw-revdel-checkbox,
+th.mw-revdel-checkbox {
+ padding-right: 10px;
+ text-align: center;
+}
+
+/* red links; see bug 36276 */
+a.new {
+ color: #BA0000;
+}
+
+/* feed links */
+a.feedlink {
+ /* SVG support using a transparent gradient to guarantee cross-browser
+ * compatibility (browsers able to understand gradient syntax support also SVG).
+ * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+ background-image: url(images/feed-icon.png);
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
+ background-position: center left;
+ background-repeat: no-repeat;
+ background-size: 12px 12px;
+ padding-left: 16px;
+}
+
+/* Plainlinks - this can be used to switch
+ * off special external link styling */
+.plainlinks a.external {
+ background: none !important;
+ padding: 0 !important;
+}
+
+/* External URLs should always be treated as LTR (bug 4330) */
+/* @noflip */ .rtl a.external.free,
+.rtl a.external.autonumber {
+ direction: ltr;
+ unicode-bidi: embed;
+}
+
+/**
+ * wikitable class for skinning normal tables
+ * keep in sync with commonPrint.css
+ */
+table.wikitable {
+ margin: 1em 0;
+ background-color: #f9f9f9;
+ border: 1px #aaa solid;
+ border-collapse: collapse;
+ color: black;
+}
+
+table.wikitable > tr > th,
+table.wikitable > tr > td,
+table.wikitable > * > tr > th,
+table.wikitable > * > tr > td {
+ border: 1px #aaa solid;
+ padding: 0.2em;
+}
+
+table.wikitable > tr > th,
+table.wikitable > * > tr > th {
+ background-color: #f2f2f2;
+ text-align: center;
+}
+
+table.wikitable > caption {
+ font-weight: bold;
+}
+
+/* success and error messages */
+.error,
+.warning,
+.success {
+ font-size: larger;
+}
+
+.error {
+ color: #cc0000;
+}
+
+.warning {
+ color: #705000;
+}
+
+.success {
+ color: #009000;
+}
+
+.errorbox,
+.warningbox,
+.successbox {
+ border: 1px solid;
+ padding: .5em 1em;
+ margin-bottom: 1em;
+ display: -moz-inline-block;
+ display: inline-block;
+ zoom: 1;
+ *display: inline;
+}
+
+.errorbox h2,
+.warningbox h2,
+.successbox h2 {
+ font-size: 1em;
+ color: inherit;
+ font-weight: bold;
+ display: inline;
+ margin: 0 .5em 0 0;
+ border: none;
+}
+
+.errorbox {
+ color: #cc0000;
+ border-color: #fac5c5;
+ background-color: #fae3e3;
+}
+
+.warningbox {
+ color: #705000;
+ border-color: #fde29b;
+ background-color: #fdf1d1;
+}
+
+.successbox {
+ color: #009000;
+ border-color: #b7fdb5;
+ background-color: #e1fddf;
+}
+
+/* general info/warning box for SP */
+.mw-infobox {
+ border: 2px solid #ff7f00;
+ margin: 0.5em;
+ clear: left;
+ overflow: hidden;
+}
+
+.mw-infobox-left {
+ margin: 7px;
+ float: left;
+ width: 35px;
+}
+
+.mw-infobox-right {
+ margin: 0.5em 0.5em 0.5em 49px;
+}
+
+/* Note on preview page */
+.previewnote {
+ color: #c00;
+ margin-bottom: 1em;
+}
+
+.previewnote p {
+ text-indent: 3em;
+ margin: 0.8em 0;
+}
+
+.visualClear {
+ clear: both;
+}
+
+/**
+ * Data table style
+ *
+ * Transparent table with suddle borders
+ * and blue row-highlighting.
+ */
+.mw-datatable {
+ border-collapse: collapse;
+}
+
+.mw-datatable,
+.mw-datatable td,
+.mw-datatable th {
+ border: 1px solid #aaaaaa;
+ padding: 0 0.15em 0 0.15em;
+}
+
+.mw-datatable th {
+ background-color: #ddddff;
+}
+
+.mw-datatable td {
+ background-color: #ffffff;
+}
+
+.mw-datatable tr:hover td {
+ background-color: #eeeeff;
+}
+
+/* filetoc */
+ul#filetoc {
+ text-align: center;
+ border: 1px solid #aaaaaa;
+ background-color: #f9f9f9;
+ padding: 5px;
+ font-size: 95%;
+ margin-bottom: 0.5em;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+#filetoc li {
+ display: inline;
+ list-style-type: none;
+ padding-right: 2em;
+}
+
+/* Classes for Exif data display */
+table.mw_metadata {
+ font-size: 0.8em;
+ margin-left: 0.5em;
+ margin-bottom: 0.5em;
+ width: 400px;
+}
+
+table.mw_metadata caption {
+ font-weight: bold;
+}
+
+table.mw_metadata th {
+ font-weight: normal;
+}
+
+table.mw_metadata td {
+ padding: 0.1em;
+}
+
+table.mw_metadata {
+ border: none;
+ border-collapse: collapse;
+}
+
+table.mw_metadata td,
+table.mw_metadata th {
+ text-align: center;
+ border: 1px solid #aaaaaa;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+table.mw_metadata th {
+ background-color: #f9f9f9;
+}
+
+table.mw_metadata td {
+ background-color: #fcfcfc;
+}
+
+table.mw_metadata ul.metadata-langlist {
+ list-style-type: none;
+ list-style-image: none;
+ padding-right: 5px;
+ padding-left: 5px;
+ margin: 0;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+.mw-content-ltr ul,
+.mw-content-rtl .mw-content-ltr ul {
+ /* @noflip */
+ margin: 0.3em 0 0 1.6em;
+ padding: 0;
+}
+
+.mw-content-rtl ul,
+.mw-content-ltr .mw-content-rtl ul {
+ /* @noflip */
+ margin: 0.3em 1.6em 0 0;
+ padding: 0;
+}
+
+.mw-content-ltr ol,
+.mw-content-rtl .mw-content-ltr ol {
+ /* @noflip */
+ margin: 0.3em 0 0 3.2em;
+ padding: 0;
+}
+
+.mw-content-rtl ol,
+.mw-content-ltr .mw-content-rtl ol {
+ /* @noflip */
+ margin: 0.3em 3.2em 0 0;
+ padding: 0;
+}
+
+/* @noflip */
+.mw-content-ltr dd,
+.mw-content-rtl .mw-content-ltr dd {
+ margin-left: 1.6em;
+ margin-right: 0;
+}
+
+/* @noflip */
+.mw-content-rtl dd,
+.mw-content-ltr .mw-content-rtl dd {
+ margin-right: 1.6em;
+ margin-left: 0;
+}
+
+/* Galleries */
+/* These display attributes look nonsensical, but are needed to support IE and FF2 */
+/* Don't forget to update commonPrint.css */
+li.gallerybox {
+ vertical-align: top;
+ display: -moz-inline-box;
+ display: inline-block;
+}
+
+ul.gallery,
+li.gallerybox {
+ zoom: 1;
+ *display: inline;
+}
+
+ul.gallery {
+ margin: 2px;
+ padding: 2px;
+ display: block;
+}
+
+li.gallerycaption {
+ font-weight: bold;
+ text-align: center;
+ display: block;
+ word-wrap: break-word;
+}
+
+li.gallerybox div.thumb {
+ text-align: center;
+ border: 1px solid #ccc;
+ background-color: #f9f9f9;
+ margin: 2px;
+}
+
+li.gallerybox div.thumb img {
+ display: block;
+ margin: 0 auto;
+}
+
+div.gallerytext {
+ overflow: hidden;
+ font-size: 94%;
+ padding: 2px 4px;
+ word-wrap: break-word;
+}
+
+/* new gallery stuff */
+ul.mw-gallery-nolines li.gallerybox div.thumb {
+ background-color: transparent;
+ border: none;
+}
+
+ul.mw-gallery-nolines li.gallerybox div.gallerytext {
+ text-align: center;
+}
+
+/* height constrained gallery */
+
+ul.mw-gallery-packed li.gallerybox div.thumb,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb {
+ background-color: transparent;
+ border: none;
+}
+
+ul.mw-gallery-packed li.gallerybox div.thumb img,
+ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
+ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
+ margin: 0 auto;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox,
+ul.mw-gallery-packed-overlay li.gallerybox {
+ position: relative;
+}
+
+ul.mw-gallery-packed-hover div.gallerytextwrapper {
+ overflow: hidden;
+ height: 0;
+}
+
+ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
+ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
+ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
+ position: absolute;
+ background: white;
+ background: rgba(255, 255, 255, 0.8);
+ padding: 5px 10px;
+ bottom: 0;
+ left: 0; /* Needed for IE */
+ height: auto;
+ font-weight: bold;
+ margin: 2px; /* correspond to style on div.thumb */
+}
+
+ul.mw-gallery-packed-hover,
+ul.mw-gallery-packed-overlay,
+ul.mw-gallery-packed {
+ text-align: center;
+}
+
+.mw-ajax-loader {
+ /* @embed */
+ background-image: url(images/ajax-loader.gif);
+ background-position: center center;
+ background-repeat: no-repeat;
+ padding: 16px;
+ position: relative;
+ top: -16px;
+}
+
+.mw-small-spinner {
+ padding: 10px !important;
+ margin-right: 0.6em;
+ /* @embed */
+ background-image: url(images/spinner.gif);
+ background-position: center center;
+ background-repeat: no-repeat;
+}
+
+/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
+/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
+h1:lang(anp),
+h1:lang(as),
+h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
+h1:lang(bho),
+h1:lang(bn),
+h1:lang(gu),
+h1:lang(hi),
+h1:lang(kn),
+h1:lang(ks),
+h1:lang(ml),
+h1:lang(mr),
+h1:lang(my),
+h1:lang(mai),
+h1:lang(ne),
+h1:lang(new),
+h1:lang(or),
+h1:lang(pa),
+h1:lang(pi),
+h1:lang(sa),
+h1:lang(ta),
+h1:lang(te) {
+ line-height: 1.6em !important;
+}
+
+h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp),
+h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
+h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
+h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
+h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
+h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
+h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
+h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
+h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks),
+h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
+h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
+h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
+h2:lang(mai), h3:lang(mai), h4:lang(mai), h5:lang(mai), h6:lang(mai),
+h2:lang(ne), h3:lang(ne), h4:lang(ne), h5:lang(ne), h6:lang(ne),
+h2:lang(new), h3:lang(new), h4:lang(new), h5:lang(new), h6:lang(new),
+h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
+h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
+h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi),
+h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
+h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
+h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
+ line-height: 1.2em;
+}
+
+/* Localised ordered list numbering for some languages */
+ol:lang(bcc) li,
+ol:lang(bqi) li,
+ol:lang(fa) li,
+ol:lang(glk) li,
+ol:lang(kk-arab) li,
+ol:lang(mzn) li {
+ list-style-type: -moz-persian;
+ list-style-type: persian;
+}
+
+ol:lang(ckb) li {
+ list-style-type: -moz-arabic-indic;
+ list-style-type: arabic-indic;
+}
+
+ol:lang(hi) li,
+ol:lang(mr) li {
+ list-style-type: -moz-devanagari;
+ list-style-type: devanagari;
+}
+
+ol:lang(as) li,
+ol:lang(bn) li {
+ list-style-type: -moz-bengali;
+ list-style-type: bengali;
+}
+
+ol:lang(or) li {
+ list-style-type: -moz-oriya;
+ list-style-type: oriya;
+}
+
+#toc ul, .toc ul {
+ margin: .3em 0;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+/* @noflip */ .mw-content-ltr .toc ul,
+.mw-content-ltr #toc ul,
+.mw-content-rtl .mw-content-ltr .toc ul,
+.mw-content-rtl .mw-content-ltr #toc ul {
+ text-align: left;
+}
+
+/* @noflip */ .mw-content-rtl .toc ul,
+.mw-content-rtl #toc ul,
+.mw-content-ltr .mw-content-rtl .toc ul,
+.mw-content-ltr .mw-content-rtl #toc ul {
+ text-align: right;
+}
+
+/* @noflip */ .mw-content-ltr .toc ul ul,
+.mw-content-ltr #toc ul ul,
+.mw-content-rtl .mw-content-ltr .toc ul ul,
+.mw-content-rtl .mw-content-ltr #toc ul ul {
+ margin: 0 0 0 2em;
+}
+
+/* @noflip */ .mw-content-rtl .toc ul ul,
+.mw-content-rtl #toc ul ul,
+.mw-content-ltr .mw-content-rtl .toc ul ul,
+.mw-content-ltr .mw-content-rtl #toc ul ul {
+ margin: 0 2em 0 0;
+}
+
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+ direction: ltr;
+}
+
+/* tooltip styles */
+.mw-help-field-hint {
+ display: none;
+ margin-left: 2px;
+ margin-bottom: -8px;
+ padding: 0 0 0 15px;
+ /* @embed */
+ background-image: url(images/help-question.gif);
+ background-position: left center;
+ background-repeat: no-repeat;
+ cursor: pointer;
+ font-size: .8em;
+ text-decoration: underline;
+ color: #0645ad;
+}
+
+.mw-help-field-hint:hover {
+ /* @embed */
+ background-image: url(images/help-question-hover.gif);
+}
+
+.mw-help-field-data {
+ display: block;
+ background-color: #d6f3ff;
+ padding: 5px 8px 4px 8px;
+ border: 1px solid #5dc9f4;
+ margin-left: 20px;
+}
+
+#mw-clearyourcache,
+#mw-sitecsspreview,
+#mw-sitejspreview,
+#mw-usercsspreview,
+#mw-userjspreview {
+ direction: ltr;
+ unicode-bidi: embed;
+}
+
+/* Correct user & content directionality when viewing a diff */
+.diff-currentversion-title,
+.diff {
+ direction: ltr;
+ unicode-bidi: embed;
+}
+
+/* @noflip */ .diff-contentalign-right td {
+ direction: rtl;
+ unicode-bidi: embed;
+}
+
+/* @noflip */ .diff-contentalign-left td {
+ direction: ltr;
+ unicode-bidi: embed;
+}
+
+.diff-multi,
+.diff-otitle,
+.diff-ntitle,
+.diff-lineno {
+ direction: ltr !important;
+ unicode-bidi: embed;
+}
+
+#mw-revision-info,
+#mw-revision-info-current,
+#mw-revision-nav {
+ direction: ltr;
+ display: inline;
+}
+
+/* Images */
+
+/* @noflip */ div.tright,
+div.floatright,
+table.floatright {
+ clear: right;
+ float: right;
+}
+
+/* @noflip */ div.tleft,
+div.floatleft,
+table.floatleft {
+ float: left;
+ clear: left;
+}
+
+div.floatright,
+table.floatright,
+div.floatleft,
+table.floatleft {
+ position: relative;
+}
+
+/* bug 12205 */
+#mw-credits a {
+ unicode-bidi: embed;
+}
+
+/* Accessibility */
+.mw-jump,
+#jump-to-nav {
+ overflow: hidden;
+ height: 0;
+ zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
+}
+
+/* Print footer should be hidden by default in screen. */
+.printfooter {
+ display: none;
+}
+
+/* For developers */
+.xdebug-error {
+ position: absolute;
+ z-index: 99;
+}
+
+.mw-editsection,
+.toctoggle,
+#jump-to-nav {
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* Display editsection links smaller and next to headings */
+.mw-editsection,
+.mw-editsection-like {
+ font-size: small;
+ font-weight: normal;
+ margin-left: 1em;
+ vertical-align: baseline;
+ /* Reset line-height; headings tend to have it set to larger values */
+ line-height: 1em;
+ /* As .mw-editsection is a <span> (inline element), it is treated as part */
+ /* of the heading content when selecting text by multiple clicks and thus */
+ /* selected together with heading content, despite the user-select: none; */
+ /* rule set above. This enforces non-selection without changing the look. */
+ display: inline-block;
+}
+
+/* Correct directionality when page dir is different from site/user dir */
+/* @noflip */
+.mw-content-ltr .mw-editsection,
+.mw-content-rtl .mw-content-ltr .mw-editsection {
+ margin-left: 1em;
+}
+
+/* @noflip */
+.mw-content-rtl .mw-editsection,
+.mw-content-ltr .mw-content-rtl .mw-editsection {
+ margin-right: 1em;
+}
+
+/* Prevent citations and subscripts from interfering with the line-height */
+sup,
+sub {
+ line-height: 1;
+}
--- /dev/null
+/*jshint camelcase:false */
+( function ( mw, $ ) {
+ var ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
+ $license = $( '#wpLicense' ), uploadWarning, uploadLicense;
+
+ window.wgUploadWarningObj = uploadWarning = {
+ responseCache: { '': ' ' },
+ nameToCheck: '',
+ typing: false,
+ delay: 500, // ms
+ timeoutID: false,
+
+ keypress: function () {
+ if ( !ajaxUploadDestCheck ) {
+ return;
+ }
+
+ // Find file to upload
+ if ( !$( '#wpDestFile' ).length || !$( '#wpDestFile-warning' ).length ) {
+ return;
+ }
+
+ this.nameToCheck = $( '#wpDestFile' ).val();
+
+ // Clear timer
+ if ( this.timeoutID ) {
+ clearTimeout( this.timeoutID );
+ }
+ // Check response cache
+ if ( this.responseCache.hasOwnProperty( this.nameToCheck ) ) {
+ this.setWarning( this.responseCache[this.nameToCheck] );
+ return;
+ }
+
+ this.timeoutID = setTimeout( function () {
+ uploadWarning.timeout();
+ }, this.delay );
+ },
+
+ checkNow: function ( fname ) {
+ if ( !ajaxUploadDestCheck ) {
+ return;
+ }
+ if ( this.timeoutID ) {
+ clearTimeout( this.timeoutID );
+ }
+ this.nameToCheck = fname;
+ this.timeout();
+ },
+
+ timeout: function () {
+ var $spinnerDestCheck;
+ if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
+ return;
+ }
+ $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' );
+
+ ( new mw.Api() ).get( {
+ action: 'query',
+ titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
+ prop: 'imageinfo',
+ iiprop: 'uploadwarning',
+ indexpageids: ''
+ } ).done( function ( result ) {
+ var resultOut = '';
+ if ( result.query ) {
+ resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
+ }
+ $spinnerDestCheck.remove();
+ uploadWarning.processResult( resultOut, uploadWarning.nameToCheck );
+ } );
+ },
+
+ processResult: function ( result, fileName ) {
+ this.setWarning( result.html );
+ this.responseCache[fileName] = result.html;
+ },
+
+ setWarning: function ( warning ) {
+ $( '#wpDestFile-warning' ).html( 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( '' );
+ } else {
+ $( '#wpDestFileWarningAck' ).val( '1' );
+ }
+
+ }
+ };
+
+ uploadLicense = {
+
+ responseCache: { '': '' },
+
+ fetchPreview: function ( license ) {
+ var $spinnerLicense;
+ if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) {
+ return;
+ }
+ if ( this.responseCache.hasOwnProperty( license ) ) {
+ this.showPreview( this.responseCache[license] );
+ return;
+ }
+
+ $spinnerLicense = $.createSpinner().insertAfter( '#wpLicense' );
+
+ ( new mw.Api() ).get( {
+ action: 'parse',
+ text: '{{' + license + '}}',
+ title: $( '#wpDestFile' ).val() || 'File:Sample.jpg',
+ prop: 'text',
+ pst: ''
+ } ).done( function ( result ) {
+ $spinnerLicense.remove();
+ uploadLicense.processResult( result, license );
+ } );
+ },
+
+ processResult: function ( result, license ) {
+ this.responseCache[license] = result.parse.text['*'];
+ this.showPreview( this.responseCache[license] );
+ },
+
+ showPreview: function ( preview ) {
+ $( '#mw-license-preview' ).html( preview );
+ }
+
+ };
+
+ $( function () {
+ // Disable URL box if the URL copy upload source type is not selected
+ if ( !$( '#wpSourceTypeurl' ).prop( 'checked' ) ) {
+ $( '#wpUploadFileURL' ).prop( 'disabled', true );
+ }
+
+ // AJAX wpDestFile warnings
+ if ( ajaxUploadDestCheck ) {
+ // Insert an event handler that fetches upload warnings when wpDestFile
+ // has been changed
+ $( '#wpDestFile' ).change( function () {
+ uploadWarning.checkNow( $( this ).val() );
+ } );
+ // Insert a row where the warnings will be displayed just below the
+ // wpDestFile row
+ $( '#mw-htmlform-description tbody' ).append(
+ $( '<tr>' ).append(
+ $( '<td>' )
+ .attr( 'id', 'wpDestFile-warning' )
+ .attr( 'colspan', 2 )
+ )
+ );
+ }
+
+ if ( mw.config.get( 'wgAjaxLicensePreview' ) && $license.length ) {
+ // License selector check
+ $license.change( function () {
+ // We might show a preview
+ uploadLicense.fetchPreview( $license.val() );
+ } );
+
+ // License selector table row
+ $license.closest( 'tr' ).after(
+ $( '<tr>' ).append(
+ $( '<td>' ),
+ $( '<td>' ).attr( 'id', 'mw-license-preview' )
+ )
+ );
+ }
+
+ // fillDestFile setup
+ $.each( mw.config.get( 'wgUploadSourceIds' ), function ( index, sourceId ) {
+ $( '#' + sourceId ).change( function () {
+ var path, slash, backslash, fname;
+ if ( !mw.config.get( 'wgUploadAutoFill' ) ) {
+ return;
+ }
+ // Remove any previously flagged errors
+ $( '#mw-upload-permitted' ).attr( 'class', '' );
+ $( '#mw-upload-prohibited' ).attr( 'class', '' );
+
+ path = $( this ).val();
+ // Find trailing part
+ slash = path.lastIndexOf( '/' );
+ backslash = path.lastIndexOf( '\\' );
+ if ( slash === -1 && backslash === -1 ) {
+ fname = path;
+ } else if ( slash > backslash ) {
+ fname = path.slice( slash + 1 );
+ } else {
+ fname = path.slice( backslash + 1 );
+ }
+
+ // Clear the filename if it does not have a valid extension.
+ // URLs are less likely to have a useful extension, so don't include them in the
+ // extension check.
+ if (
+ mw.config.get( 'wgStrictFileExtensions' ) &&
+ mw.config.get( 'wgFileExtensions' ) &&
+ $( this ).attr( 'id' ) !== 'wpUploadFileURL'
+ ) {
+ if (
+ fname.lastIndexOf( '.' ) === -1 ||
+ $.inArray(
+ fname.slice( fname.lastIndexOf( '.' ) + 1 ).toLowerCase(),
+ $.map( mw.config.get( 'wgFileExtensions' ), function ( element ) {
+ return element.toLowerCase();
+ } )
+ ) === -1
+ ) {
+ // Not a valid extension
+ // Clear the upload and set mw-upload-permitted to error
+ $( this ).val( '' );
+ $( '#mw-upload-permitted' ).attr( 'class', 'error' );
+ $( '#mw-upload-prohibited' ).attr( 'class', 'error' );
+ // Clear wpDestFile as well
+ $( '#wpDestFile' ).val( '' );
+
+ return false;
+ }
+ }
+
+ // Replace spaces by underscores
+ fname = fname.replace( / /g, '_' );
+ // Capitalise first letter if needed
+ if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
+ fname = fname.charAt( 0 ).toUpperCase().concat( fname.slice( 1 ) );
+ }
+
+ // Output result
+ if ( $( '#wpDestFile' ).length ) {
+ // Call decodeURIComponent function to remove possible URL-encoded characters
+ // from the file name (bug 30390). Especially likely with upload-form-url.
+ // decodeURIComponent can throw an exception if input is invalid utf-8
+ try {
+ $( '#wpDestFile' ).val( decodeURIComponent( fname ) );
+ } catch ( err ) {
+ $( '#wpDestFile' ).val( fname );
+ }
+ uploadWarning.checkNow( fname );
+ }
+ } );
+ } );
+ } );
+}( mediaWiki, jQuery ) );
--- /dev/null
+/**
+ * MediaWiki legacy wikibits
+ */
+( function ( mw, $ ) {
+ var msg,
+ win = window,
+ ua = navigator.userAgent.toLowerCase(),
+ onloadFuncts = [];
+
+/**
+ * User-agent sniffing.
+ *
+ * @deprecated since 1.17 Use jquery.client instead
+ */
+
+msg = 'Use feature detection or module jquery.client instead.';
+
+mw.log.deprecate( win, 'clientPC', ua, msg );
+
+// Ignored dummy values
+mw.log.deprecate( win, 'is_gecko', false, msg );
+mw.log.deprecate( win, 'is_chrome_mac', false, msg );
+mw.log.deprecate( win, 'is_chrome', false, msg );
+mw.log.deprecate( win, 'webkit_version', false, msg );
+mw.log.deprecate( win, 'is_safari_win', false, msg );
+mw.log.deprecate( win, 'is_safari', false, msg );
+mw.log.deprecate( win, 'webkit_match', false, msg );
+mw.log.deprecate( win, 'is_ff2', false, msg );
+mw.log.deprecate( win, 'ff2_bugs', false, msg );
+mw.log.deprecate( win, 'is_ff2_win', false, msg );
+mw.log.deprecate( win, 'is_ff2_x11', false, msg );
+mw.log.deprecate( win, 'opera95_bugs', false, msg );
+mw.log.deprecate( win, 'opera7_bugs', false, msg );
+mw.log.deprecate( win, 'opera6_bugs', false, msg );
+mw.log.deprecate( win, 'is_opera_95', false, msg );
+mw.log.deprecate( win, 'is_opera_preseven', false, msg );
+mw.log.deprecate( win, 'is_opera', false, msg );
+mw.log.deprecate( win, 'ie6_bugs', false, msg );
+
+/**
+ * DOM utilities for handling of events, text nodes and selecting elements
+ *
+ * @deprecated since 1.17 Use jQuery instead
+ */
+msg = 'Use jQuery instead.';
+
+// Ignored dummy values
+mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
+mw.log.deprecate( win, 'onloadFuncts', [], msg );
+mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
+mw.log.deprecate( win, 'changeText', $.noop, msg );
+mw.log.deprecate( win, 'killEvt', $.noop, msg );
+mw.log.deprecate( win, 'addHandler', $.noop, msg );
+mw.log.deprecate( win, 'hookEvent', $.noop, msg );
+mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
+mw.log.deprecate( win, 'removeHandler', $.noop, msg );
+mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
+mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
+
+// Run a function after the window onload event is fired
+mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
+ if ( onloadFuncts ) {
+ onloadFuncts.push(hookFunct);
+ } else {
+ // If func queue is gone the event has happened already,
+ // run immediately instead of queueing.
+ hookFunct();
+ }
+}, msg );
+
+$( win ).on( 'load', function () {
+ var i, functs;
+
+ // Don't run twice
+ if ( !onloadFuncts ) {
+ return;
+ }
+
+ // Deference and clear onloadFuncts before running any
+ // hooks to make sure we don't miss any addOnloadHook
+ // calls.
+ functs = onloadFuncts.slice();
+ onloadFuncts = undefined;
+
+ // Execute the queued functions
+ for ( i = 0; i < functs.length; i++ ) {
+ functs[i]();
+ }
+} );
+
+/**
+ * Toggle checkboxes with shift selection
+ *
+ * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
+ */
+msg = 'Use jquery.checkboxShiftClick instead.';
+mw.log.deprecate( win, 'checkboxes', [], msg );
+mw.log.deprecate( win, 'lastCheckbox', null, msg );
+mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
+mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
+mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
+
+/**
+ * Add a button to the default editor toolbar
+ *
+ * @deprecated since 1.17 Use mw.toolbar instead
+ */
+mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
+mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
+
+/**
+ * Spinner creation, injection and removal
+ *
+ * @deprecated since 1.18 Use jquery.spinner instead
+ */
+mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
+mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
+
+/**
+ * Escape utilities
+ *
+ * @deprecated since 1.18 Use mw.html instead
+ */
+mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
+mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
+
+/**
+ * Display a message to the user
+ *
+ * @deprecated since 1.17 Use mediawiki.notify instead
+ * @param {string|HTMLElement} message To be put inside the message box
+ */
+mw.log.deprecate( win, 'jsMsg', function ( message ) {
+ if ( !arguments.length || message === '' || message === null ) {
+ return true;
+ }
+ if ( typeof message !== 'object' ) {
+ message = $.parseHTML( message );
+ }
+ mw.notify( message, { autoHide: true, tag: 'legacy' } );
+ return true;
+}, 'Use mediawiki.notify instead.' );
+
+/**
+ * Misc. utilities
+ *
+ * @deprecated since 1.17 Use mediawiki.util instead
+ */
+msg = 'Use mediawiki.util instead.';
+mw.log.deprecate( win, 'updateTooltipAccessKeys', mw.util.updateTooltipAccessKeys, msg );
+mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
+mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
+msg = 'Use jquery.accessKeyLabel instead.';
+mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
+mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
+
+/**
+ * Wikipage import methods
+ */
+
+// included-scripts tracker
+win.loadedScripts = {};
+
+win.importScript = function ( page ) {
+ var uri = mw.config.get( 'wgScript' ) + '?title=' +
+ mw.util.wikiUrlencode( page ) +
+ '&action=raw&ctype=text/javascript';
+ return win.importScriptURI( uri );
+};
+
+win.importScriptURI = function ( url ) {
+ if ( win.loadedScripts[url] ) {
+ return null;
+ }
+ win.loadedScripts[url] = true;
+ var s = document.createElement( 'script' );
+ s.setAttribute( 'src', url );
+ s.setAttribute( 'type', 'text/javascript' );
+ document.getElementsByTagName( 'head' )[0].appendChild( s );
+ return s;
+};
+
+win.importStylesheet = function ( page ) {
+ var uri = mw.config.get( 'wgScript' ) + '?title=' +
+ mw.util.wikiUrlencode( page ) +
+ '&action=raw&ctype=text/css';
+ return win.importStylesheetURI( uri );
+};
+
+win.importStylesheetURI = function ( url, media ) {
+ var l = document.createElement( 'link' );
+ l.rel = 'stylesheet';
+ l.href = url;
+ if ( media ) {
+ l.media = media;
+ }
+ document.getElementsByTagName('head')[0].appendChild( l );
+ return l;
+};
+
+}( mediaWiki, jQuery ) );
--- /dev/null
+/**
+ * MediaWiki style sheet for general styles on complex content
+ *
+ * Styles for complex things which are a standard part of page content
+ * (ie: the CSS classing built into the system), like the TOC.
+ */
+
+/* Table of Contents */
+#toc,
+.toc,
+.mw-warning {
+ border: 1px solid #aaa;
+ background-color: #f9f9f9;
+ padding: 5px;
+ font-size: 95%;
+}
+
+/**
+ * We want to display the ToC element with intrinsic width in block mode. The fit-content
+ * value for width is however not supported by large groups of browsers.
+ *
+ * We use display:table. Even though it should only contain other table-* display
+ * elements, there are no known problems with using this.
+ *
+ * Because IE < 8, FF 2 and other older browsers don't support display:table, we fallback to
+ * using inline-block mode, which features at least intrinsic width, but won't clear preceding
+ * inline elements. In practice inline elements surrounding the TOC are uncommon enough that
+ * this is an acceptable sacrifice.
+ */
+#toc,
+.toc {
+ display: -moz-inline-block;
+ display: inline-block;
+ display: table;
+
+ /* IE7 and earlier */
+ zoom: 1;
+ *display: inline;
+
+ padding: 7px;
+}
+
+/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
+table#toc,
+table.toc {
+ border-collapse: collapse;
+}
+
+/* Remove additional paddings inside table-cells that are not present in <div>s */
+table#toc td,
+table.toc td {
+ padding: 0;
+}
+
+#toc h2,
+.toc h2 {
+ display: inline;
+ border: none;
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+}
+
+#toc #toctitle,
+.toc #toctitle,
+#toc .toctitle,
+.toc .toctitle {
+ text-align: center;
+}
+
+#toc ul,
+.toc ul {
+ list-style-type: none;
+ list-style-image: none;
+ margin-left: 0;
+ padding: 0;
+ text-align: left;
+}
+
+#toc ul ul,
+.toc ul ul {
+ margin: 0 0 0 2em;
+}
+
+#toc .toctoggle,
+.toc .toctoggle {
+ font-size: 94%;
+}
+
+.toccolours {
+ border: 1px solid #aaa;
+ background-color: #f9f9f9;
+ padding: 5px;
+ font-size: 95%;
+}
+
+/* Warning */
+.mw-warning {
+ margin-left: 50px;
+ margin-right: 50px;
+ text-align: center;
+}
+
+/* Images */
+/* @noflip */div.floatright, table.floatright {
+ margin: 0 0 .5em .5em;
+ border: 0;
+}
+
+div.floatright p {
+ font-style: italic;
+}
+
+/* @noflip */div.floatleft, table.floatleft {
+ margin: 0 .5em .5em 0;
+ border: 0;
+}
+
+div.floatleft p {
+ font-style: italic;
+}
+
+/* Thumbnails */
+div.thumb {
+ margin-bottom: .5em;
+ width: auto;
+ background-color: transparent;
+}
+
+div.thumbinner {
+ border: 1px solid #ccc;
+ padding: 3px;
+ background-color: #f9f9f9;
+ font-size: 94%;
+ text-align: center;
+ overflow: hidden;
+}
+
+html .thumbimage {
+ border: 1px solid #ccc;
+}
+
+html .thumbcaption {
+ border: none;
+ line-height: 1.4em;
+ padding: 3px;
+ font-size: 94%;
+ /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+ text-align: left;
+}
+
+div.magnify {
+ /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+ float: right;
+ margin-left: 3px;
+}
+
+div.magnify a {
+ display: block;
+ /* Hide the text… */
+ text-indent: 15px;
+ white-space: nowrap;
+ overflow: hidden;
+ /* …and replace it with the image */
+ width: 15px;
+ height: 11px;
+ /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+ /* @embed */
+ background: url(images/magnify-clip-ltr.png) center center no-repeat;
+ /* Don't annoy people who copy-paste everything too much */
+ -moz-user-select: none;
+ -webkit-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+/* Temporary WMF deployment hack, to be removed before 1.24 release */
+div.magnify img {
+ display: none;
+}
+
+img.thumbborder {
+ border: 1px solid #dddddd;
+}
+
+/* Directionality-specific styles for thumbnails - their positioning depends on content language */
+
+/* @noflip */
+.mw-content-ltr .thumbcaption {
+ text-align: left;
+}
+
+/* @noflip */
+.mw-content-ltr .magnify {
+ float: right;
+ margin-left: 3px;
+ margin-right: 0;
+}
+
+/* @noflip */
+.mw-content-ltr div.magnify a {
+ /* @embed */
+ background-image: url(images/magnify-clip-ltr.png);
+}
+
+/* @noflip */
+.mw-content-rtl .thumbcaption {
+ text-align: right;
+}
+
+/* @noflip */
+.mw-content-rtl .magnify {
+ float: left;
+ margin-left: 0;
+ margin-right: 3px;
+}
+
+/* @noflip */
+.mw-content-rtl div.magnify a {
+ /* @embed */
+ background-image: url(images/magnify-clip-rtl.png);
+}
+
+/* @noflip */
+div.tright {
+ margin: .5em 0 1.3em 1.4em;
+}
+
+/* @noflip */
+div.tleft {
+ margin: .5em 1.4em 1.3em 0;
+}
--- /dev/null
+/*!
+ * Icons and colors for external links.
+ */
+
+/* Bug 66091 is blocking is from converting this file to LESS
+ * and using the .background-image-svg mixin. */
+
+/* SVG support using a transparent gradient to guarantee cross-browser
+ * compatibility (browsers able to understand gradient syntax support also SVG).
+ * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
+
+.mw-body a.external,
+.link-https {
+ background: url(images/external-ltr.png) center right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/external-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/external-ltr.svg);
+ padding-right: 15px;
+}
+
+.mw-body a.external[href^="mailto:"],
+.link-mailto {
+ background: url(images/mail.png) center right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/mail.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/mail.svg);
+ padding-right: 15px;
+}
+
+.mw-body a.external[href^="ftp://"],
+.link-ftp {
+ background: url(images/ftp-ltr.png) center right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/ftp-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/ftp-ltr.svg);
+ padding-right: 15px;
+}
+
+.mw-body a.external[href^="irc://"],
+.mw-body a.external[href^="ircs://"],
+.link-irc {
+ background: url(images/chat-ltr.png) center right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/chat-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/chat-ltr.svg);
+ padding-right: 15px;
+}
+
+.mw-body a.external[href$=".ogg"], .mw-body a.external[href$=".OGG"],
+.mw-body a.external[href$=".mid"], .mw-body a.external[href$=".MID"],
+.mw-body a.external[href$=".midi"], .mw-body a.external[href$=".MIDI"],
+.mw-body a.external[href$=".mp3"], .mw-body a.external[href$=".MP3"],
+.mw-body a.external[href$=".wav"], .mw-body a.external[href$=".WAV"],
+.mw-body a.external[href$=".wma"], .mw-body a.external[href$=".WMA"],
+.link-audio {
+ background: url(images/audio-ltr.png) center right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/audio-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/audio-ltr.svg);
+ padding-right: 15px;
+}
+
+.mw-body a.external[href$=".ogm"], .mw-body a.external[href$=".OGM"],
+.mw-body a.external[href$=".avi"], .mw-body a.external[href$=".AVI"],
+.mw-body a.external[href$=".mpeg"], .mw-body a.external[href$=".MPEG"],
+.mw-body a.external[href$=".mpg"], .mw-body a.external[href$=".MPG"],
+.link-video {
+ background: url(images/video.png) center right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/video.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/video.svg);
+ padding-right: 15px;
+}
+
+.mw-body a.external[href$=".pdf"], .mw-body a.external[href$=".PDF"],
+.mw-body a.external[href*=".pdf#"], .mw-body a.external[href*=".PDF#"],
+.mw-body a.external[href*=".pdf?"], .mw-body a.external[href*=".PDF?"],
+.link-document {
+ background: url(images/document-ltr.png) center right no-repeat;
+ /* @embed */
+ background-image: -webkit-linear-gradient(transparent, transparent), url(images/document-ltr.svg);
+ /* @embed */
+ background-image: linear-gradient(transparent, transparent), url(images/document-ltr.svg);
+ padding-right: 15px;
+}
+
+/* Interwiki styling */
+.mw-body a.extiw,
+.mw-body a.extiw:active {
+ color: #36b;
+}
+
+/* External link color */
+.mw-body a.external {
+ color: #36b;
+}
/* Hide the caption for frameless and plain floated images */
figure[typeof~="mw:Image/Frameless"] > figcaption,
figure[typeof~="mw:Image"] > figcaption { display: none }
-
-/*
- * Finally, some basic styling for Parsoid render testing.
- * Only Parsoid directly sets .mw-body-content directly on the body, so this
- * shouldn't affect anything else.
- */
-body.mw-body-content {
- background-color: #fff;
- padding: 0.8em;
-}
--- /dev/null
+/**
+ * MediaWiki style sheet for general styles on basic content elements
+ *
+ * Styles for basic elements: links, lists, etc...
+ *
+ * This style sheet is used by the Monobook and Vector skins.
+ */
+
+/* Links */
+a {
+ text-decoration: none;
+ color: #0645ad;
+ background: none;
+}
+
+a:visited {
+ color: #0b0080;
+}
+
+a:active {
+ color: #faa700;
+}
+
+a:hover, a:focus {
+ text-decoration: underline;
+}
+
+a.stub {
+ color: #772233;
+}
+
+a.new, #p-personal a.new {
+ color: #ba0000;
+}
+
+a.new:visited, #p-personal a.new:visited {
+ color: #a55858;
+}
+
+/* Interwiki Styling */
+.mw-body a.extiw,
+.mw-body a.extiw:active {
+ color: #36b;
+}
+
+.mw-body a.extiw:visited {
+ color: #636;
+}
+
+.mw-body a.extiw:active {
+ color: #b63;
+}
+
+/* External links */
+.mw-body a.external {
+ color: #36b;
+}
+
+.mw-body a.external:visited {
+ color: #636; /* bug 3112 */
+}
+
+.mw-body a.external:active {
+ color: #b63;
+}
+
+/* Inline Elements */
+img {
+ border: none;
+ vertical-align: middle;
+}
+
+hr {
+ height: 1px;
+ color: #aaa;
+ background-color: #aaa;
+ border: 0;
+ margin: .2em 0;
+}
+
+/* Structural Elements */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ color: black;
+ background: none;
+ font-weight: normal;
+ margin: 0;
+ overflow: hidden;
+ padding-top: .5em;
+ padding-bottom: .17em;
+ border-bottom: 1px solid #aaa;
+}
+
+h1 {
+ font-size: 188%;
+}
+
+h2 {
+ font-size: 150%;
+}
+
+h3,
+h4,
+h5,
+h6 {
+ border-bottom: none;
+ font-weight: bold;
+}
+
+h3 {
+ font-size: 132%;
+}
+
+h4 {
+ font-size: 116%;
+}
+
+h5 {
+ font-size: 108%;
+}
+
+h6 {
+ font-size: 100%;
+}
+
+/* Some space under the headers in the content area */
+h1,
+h2 {
+ margin-bottom: .6em;
+}
+
+h3,
+h4,
+h5 {
+ margin-bottom: .3em;
+}
+
+p {
+ margin: .4em 0 .5em 0;
+ line-height: 1.5em;
+}
+
+p img {
+ margin: 0;
+}
+
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: .3em 0 0 1.6em;
+ padding: 0;
+}
+
+ol {
+ line-height: 1.5em;
+ margin: .3em 0 0 3.2em;
+ padding: 0;
+ list-style-image: none;
+}
+
+li {
+ margin-bottom: .1em;
+}
+
+dt {
+ font-weight: bold;
+ margin-bottom: .1em;
+}
+
+dl {
+ margin-top: .2em;
+ margin-bottom: .5em;
+}
+
+dd {
+ line-height: 1.5em;
+ margin-left: 1.6em;
+ margin-bottom: .1em;
+}
+
+/* IE 6 and 7 lack support for quotes aroud the <q> element ('::before' and '::after'
+ pseudoelements, 'quotes' property). Let's italicize it instead (using the star hack). */
+q {
+ *font-style: italic;
+}
+
+pre, code, tt, kbd, samp, .mw-code {
+ /*
+ * Some browsers will render the monospace text too small, namely Firefox, Chrome and Safari.
+ * Specifying any valid, second value will trigger correct behavior without forcing a different font.
+ */
+ font-family: monospace, Courier;
+}
+
+code {
+ color: black;
+ background-color: #f9f9f9;
+ border: 1px solid #ddd;
+ border-radius: 2px;
+ padding: 1px 4px;
+}
+
+pre, .mw-code {
+ color: black;
+ background-color: #f9f9f9;
+ border: 1px solid #ddd;
+ padding: 1em;
+}
+
+/* Tables */
+table {
+ font-size: 100%;
+}
+
+/* Forms */
+fieldset {
+ border: 1px solid #2f6fab;
+ margin: 1em 0 1em 0;
+ padding: 0 1em 1em;
+ line-height: 1.5em;
+}
+
+fieldset.nested {
+ margin: 0 0 0.5em 0;
+ padding: 0 0.5em 0.5em;
+}
+
+legend {
+ padding: .5em;
+ font-size: 95%;
+}
+
+form {
+ border: none;
+ margin: 0;
+}
+
+textarea {
+ width: 100%;
+ padding: .1em;
+ display: block;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+select {
+ vertical-align: top;
+}
+
+/* Emulate Center */
+.center {
+ width: 100%;
+ text-align: center;
+}
+
+*.center * {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+/* Small for tables and similar */
+.small {
+ font-size: 94%;
+}
+
+table.small {
+ font-size: 100%;
+}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m43.47,259.4-3,3-3,0,0,4,3,0,3,3zm-1,2.5,0,5-1.5-1.5-2.5,0,0-2,2.5,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m43.9,262.5c0-0.6213,0.6213-1.243,1.243-0.6213,0,0,0.6213,0.6213,0.6213,2.485s-0.6213,2.485-0.6213,2.485c-0.6213,0.6213-1.243,0-1.243-0.6213,0,0,0.6213-0.6213,0.6213-1.864s-0.6213-1.864-0.6213-1.864z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m45.76,261.2c0-0.6213,0.6213-1.243,1.243-0.6213,0,0,1.243,1.243,1.243,3.728s-1.243,3.728-1.243,3.728c-0.6213,0.6213-1.243,0-1.243-0.6213,0,0,1.243-1.243,1.243-3.107s-1.243-3.107-1.243-3.107z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m42.47,259.4,3,3,3,0,0,4-3,0-3,3zm1,2.5,0,5,1.5-1.5,2.5,0,0-2-2.5,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m42.04,262.5c0-0.6213-0.6213-1.243-1.243-0.6213,0,0-0.6213,0.6213-0.6213,2.485s0.6213,2.485,0.6213,2.485c0.6213,0.6213,1.243,0,1.243-0.6213,0,0-0.6213-0.6213-0.6213-1.864s0.6213-1.864,0.6213-1.864z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m40.17,261.2c0-0.6213-0.6213-1.243-1.243-0.6213,0,0-1.243,1.243-1.243,3.728s1.243,3.728,1.243,3.728c0.6213,0.6213,1.243,0,1.243-0.6213,0,0-1.243-1.243-1.243-3.107s1.243-3.107,1.243-3.107z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m38.09,260.4-0.6213,0.6213,0,5.757,0.6213,0.6213,1.689,0-0.6213,2.728,4.311-2.728,4.379,0,0.6213-0.6213,0-5.757-0.6213-0.6213zm0.3787,1,9,0,0,5-4,0-2.902,1.897,0.9021-1.897-3,0z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m47.85,260.4,0.6213,0.6213,0,5.757-0.6213,0.6213-1.689,0,0.6213,2.728-4.311-2.728-4.379,0-0.6213-0.6213,0-5.757,0.6213-0.6213zm-0.3787,1-9,0,0,5,4,0,2.902,1.897-0.9021-1.897,3,0z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<path style="opacity:1;fill:#15a5ea;" d="m7.5,2,0,3,2.5,0,1-1-2.5,0,0-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m3,1,0,10,8,0,0-7-2.5-3zm1,1,4,0,2,2.5,0,5.5-6,0z"/>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<path style="opacity:1;fill:#15a5ea;" d="m5.5,2,0,3-2.5,0-1-1,2.5,0,0-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m10,1,0,10-8,0,0-7,2.5-3zm-1,1-4,0-2,2.5,0,5.5,6,0z"/>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="13"
+ height="110"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.5 r10040"
+ sodipodi:docname="external link icons.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.999999"
+ inkscape:cx="10.40536"
+ inkscape:cy="65.686256"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer5"
+ showgrid="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1283"
+ inkscape:window-height="711"
+ inkscape:window-x="1790"
+ inkscape:window-y="-6"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3246"
+ empspacing="4"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ originx="0px"
+ originy="-27.999997px" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="base"
+ style="display:none"
+ transform="translate(-505,-869.36218)">
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4646"
+ width="13"
+ height="12.999996"
+ x="505"
+ y="885.36218" />
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4646-4"
+ width="13"
+ height="12.999998"
+ x="505"
+ y="901.36218" />
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4646-4-6"
+ width="13"
+ height="12.999996"
+ x="505"
+ y="917.36218"
+ inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4646-4-6-9"
+ width="13"
+ height="12.999996"
+ x="505"
+ y="933.36218" />
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4646-4-6-6"
+ width="13"
+ height="12.999996"
+ x="505"
+ y="950.36218" />
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4646-4-6-2"
+ width="13"
+ height="12.999998"
+ x="505"
+ y="966.36218" />
+ <rect
+ style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ id="rect4646-44"
+ width="13"
+ height="12.999996"
+ x="505"
+ y="869.36218" />
+ </g>
+ <g
+ inkscape:label="sketch 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-505,-869.36218)"
+ style="display:none"
+ sodipodi:insensitive="true">
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507,870.36218 0,5 3,0 4,4 0,-13 -4,4 z"
+ id="path3194"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 517,869.36218 c 1,2 1,5 0,7"
+ id="path3196"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 520,867.36218 c 2,2 2,9 0,11"
+ id="path3198"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507.93861,989.90562 0,15.99988 13,0 0,-10.99988 -5,-5 z"
+ id="path3200"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 506.93861,918.90546 0,11.5 15,0 0,-11.5 z"
+ id="path3202"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 506.93861,918.90546 7.5,6 7.5,-6"
+ id="path3204"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507.93861,890.90546 3,0"
+ id="path3212"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507.93861,893.90546 3,0"
+ id="path3214"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507.93861,899.90546 3,0"
+ id="path3218"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507.93861,902.90546 3,0"
+ id="path3220"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 517.93861,890.90546 3,0"
+ id="path3222"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507.93861,896.90546 13,0"
+ id="path3224"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 517.93861,893.90546 3,0"
+ id="path3226"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 517.93861,899.90546 3,0"
+ id="path3230"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 517.93861,902.90546 3,0"
+ id="path3232"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 510.93861,890.90546 0,12 7,0 0,-12 z"
+ id="path3206"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 507.93861,888.90546 0,16"
+ id="path3208"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 520.93861,888.90546 0,16"
+ id="path3210"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 515.93861,989.90562 0,5 5,0"
+ id="path3234"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 513.93861,969.40546 c -2,0 -5,0 -7,0 l 0,10.99995 11,5e-5 c 0,-2.33332 0,-4.66668 0,-7"
+ id="path3236"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none"
+ d="m 513.93861,976.40546 5,-4 3,3 0,-10 -10,0 3,3 -4,5"
+ id="path3242"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:none;stroke:#0066ff;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 506.93861,940.40546 15,0 0,10 -6,0 -6,4 1,-4 -4,0 z"
+ id="path3244"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="fill:none;stroke:#5b9dff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 509.93861,972.40546 c 2,1 4,3 5,5"
+ id="path4641"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="sketch 2"
+ style="display:none"
+ transform="translate(0,-6.0000106)">
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 8.4921988,1.0623917 -4.0641234,4.064123 -3.2512987,0 0,5.6897733 3.2512987,0 4.0641234,4.064124 z m -1.6256494,4.064124 0,5.6897733 -1.6256493,-1.6256493 -2.438474,-1e-6 0,-2.438474 2.438474,1e-6 z"
+ id="path4755-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 9.3050235,5.1265157 c 0,-0.812824 0.8128245,-1.625649 1.6256495,-0.812824 0,0 0.812825,0.812824 0.812825,3.251298 0,2.4384743 -0.812825,3.2512993 -0.812825,3.2512993 -0.812825,0.812825 -1.6256495,0 -1.6256495,-0.812825 0,0 0.8128245,-0.8128243 0.8128245,-2.4384743 0,-1.625649 -0.8128245,-2.438474 -0.8128245,-2.438474 z"
+ id="path4760-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 11.743498,3.5008667 c 0,-0.812825 0.812824,-1.625649 1.625649,-0.812825 0,0 1.625649,1.62565 1.625649,4.876948 0,3.2512993 -1.625649,4.8769483 -1.625649,4.8769483 -0.812825,0.812825 -1.625649,0 -1.625649,-0.812824 0,0 1.625649,-1.62565 1.625649,-4.0641243 0,-2.438474 -1.625649,-4.064123 -1.625649,-4.064123 z"
+ id="path4762-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 2.8024261,23.008658 0,0.812825 10.5667209,0 0,-0.812825 z"
+ id="path4772"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 2.8024261,33.575379 10.5667209,0 0,-0.812825 -10.5667209,0 z"
+ id="path4774"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 2.8024261,25.447132 0,0.812824 2.438474,0 0,-0.812824 z m 8.1282469,0 0,0.812824 2.438474,0 0,-0.812824 z"
+ id="path4782"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 2.8024261,30.32408 0,0.812824 2.438474,0 0,-0.812824 z m 8.1282469,0 0,0.812824 2.438474,0 0,-0.812824 z"
+ id="path4778"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 2.8024261,28.698431 10.5667209,0 0,-0.812825 -10.5667209,0 z"
+ id="path4780"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 5.2409001,27.479194 0,1.625649 5.6897729,0 0,-1.625649 z"
+ id="path4793"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 4.4280754,23.008658 0,10.56672 7.3154226,0 0,-10.56672 z m 1.6256494,1.625649 4.0641232,0 0,7.315422 -4.0641232,0 z"
+ id="path4768"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 1.9896014,21.383009 1.6256493,0 0,13.818019 -1.6256493,0 z"
+ id="path4764"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 12.556322,21.383009 1.62565,0 0,13.818019 -1.62565,0 z"
+ id="path4766"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 1.9896014,44.954923 6.096185,5.689773 6.0961856,-5.689773 -0.812825,-0.812825 -1.625649,0.813196 -3.6577116,3.251298 -3.657711,-3.251298 -1.6256493,-0.813196 z"
+ id="path4800-4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 1.1767767,43.329273 0,11.379545 13.8180193,0 0,-11.379545 z m 1.6256494,1.625649 10.5667209,0 0,8.128247 -10.5667209,0 z"
+ id="path4795-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 1.9896014,62.024243 -0.8128247,0.812824 0,8.128247 0.8128247,0.812825 2.438474,0 -0.8128247,3.251297 5.6897728,-3.251297 4.8769485,0 0.812824,-0.812825 0,-8.128247 -0.812824,-0.812824 z m 0.8128247,1.625649 10.5667209,0 0,6.502598 -4.0641235,0 -3.5815088,2.133664 0.9144278,-2.133664 -3.8355164,0 z"
+ id="path4802-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 4.4280754,82.344856 10.5667206,0 0,10.56672 -3.251298,-3.25129 -3.2512992,2.43847 -0.8128247,-0.81282 4.0641239,-3.2513 1.625649,1.62565 0,-5.68978 -5.6897729,0 1.6256494,1.62565 -3.2512987,4.06413 -0.8128247,-0.81283 2.438474,-3.2513 z"
+ id="path4807-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 8.4921988,85.596156 -7.3154221,0 0,10.56672 10.5667213,0 0,-7.31542 -1.62565,0.81283 0,4.87694 -7.3154219,0 0,-7.31542 4.876948,0 z"
+ id="path4809-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 8.4921988,103.47831 0,4.87694 4.8769482,0 0,-1.62565 -3.251299,0 0,-3.25129 z"
+ id="path4818-67"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 1.9896014,102.66548 0,13.81802 12.1923706,0 0,-10.13799 -3.657711,-3.68003 z m 1.6256493,1.62565 6.5025973,0 2.438474,2.43847 0,8.12825 -8.9410713,0 z"
+ id="path4813-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 3.6152507,88.847456 c 0,-0.81282 0.8128247,-0.81282 0.8128247,-0.81282 2.438474,0.81282 4.0641234,2.43847 4.8769481,4.87694 0,0 0,0.81283 -0.8128247,0.81283 -1.6256494,-2.43847 -2.438474,-3.2513 -4.8769481,-4.87695 z"
+ id="path4822-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Layer"
+ style="display:none"
+ transform="translate(-10,-26.000007)">
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 19,20.999995 -4,4 -3,0 0,6 3,0 4,4 z m -1,2.5 0,9 -2.6,-2.5 -2.4,0 0,-4 2.5,0 z"
+ id="path4755"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none"
+ d="m 19.75,24.999995 c 0,-1 0.75,-1 0.75,-1 0,0 1.5,1.029412 1.5,3.5 0,2.470588 -1.5,3.5 -1.5,3.5 0,0 -0.75,0 -0.75,-1 0,0 1,-0.852941 1,-2.5 0,-1.647059 -1,-2.5 -1,-2.5 z"
+ id="path4760"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none"
+ d="m 22.25,23.999995 c 0,-1 0.75,-1 0.75,-1 0,0 2,1.205882 2,4.5 0,3.294118 -2,4.5 -2,4.5 0,0 -0.75,0 -0.75,-1 0,0 1.5,-1.029412 1.5,-3.5 0,-2.470588 -1.5,-3.5 -1.5,-3.5 z"
+ id="path4762"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 31.4375,79.875 -1,1 0,10 1,1 3,0 -1,4 7,-4 6,0 1,-1 0,-10 -1,-1 z m 1,2 13,0 0,8 -5,0 -4.40625,2.625 1.125,-2.625 -4.71875,0 z"
+ id="path4802"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 35.125,98.8125 13,0 0,13 -4,-4 -4,3 -1,-1 5,-4 2,2 0,-7 -7,0 2,2 -4,5 -1,-1 3,-4 z"
+ id="path4807"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 40.125,102.8125 -9,0 0,13 13,0 0,-9 -2,1 0,6 -9,0 0,-9 6,0 z"
+ id="path4809"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none"
+ d="m 34.125,106.8125 c 0,-1 1,-1 1,-1 3,1 5,3 6,6 0,0 0,1 -1,1 -2,-3 -3,-4 -6,-6 z"
+ id="path4822"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 12,50.499995 0,1 3,0 0,-1 -3,0 z m 9,0 0,1 3,0 0,-1 -3,0 z"
+ id="rect4841"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 12,44.499995 0,1 3,0 0,-1 -3,0 z m 9,0 0,1 3,0 0,-1 -3,0 z"
+ id="rect4843"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 12,52.999995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
+ id="rect4843-1"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 12,41.999995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
+ id="rect4843-17"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline"
+ d="m 12,47.499995 0,1 3,0 0,-1 z m 9,0 0,1 3,0 0,-1 z"
+ id="rect4841-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <rect
+ style="fill:#15a5ea;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4835"
+ width="7"
+ height="2"
+ x="4"
+ y="27"
+ transform="translate(10,19.999995)" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 2,21 1,0 0,14 -1,0 z"
+ id="path4826"
+ inkscape:connector-curvature="0"
+ transform="translate(10,19.999995)"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 13,21 1,0 0,14 -1,0 z"
+ id="path4828"
+ inkscape:connector-curvature="0"
+ transform="translate(10,19.999995)"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 4,22 0,12 8,0 0,-12 z m 1,1 6,0 0,10 -6,0 z"
+ transform="translate(10,19.999995)"
+ id="path4830"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <rect
+ style="fill:#3366bb;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4837"
+ width="8"
+ height="1"
+ x="4"
+ y="22"
+ transform="translate(10,19.999995)" />
+ <rect
+ style="fill:#3366bb;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ id="rect4839"
+ width="8"
+ height="1"
+ x="4"
+ y="33"
+ transform="translate(10,19.999995)" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none"
+ d="m 12,64.999995 6,5 6,-5 0.53033,-1.45299 -1.28033,0.45299 -5.25,4.5 -5.25,-4.5 -1.236136,-0.53033 z"
+ id="path4910"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none"
+ d="m 11,62.999995 0,10 14,0 0,-10 z m 1,1 12,0 0,8 -12,0 z"
+ id="path4905"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 19,121 0,5 5,0 -1,-1 -3,0 0,-3 z"
+ id="path4818-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 12,121 0,14 12,0 0,-10 -4,-4 z m 1,1 6.5,0 3.5,3.5 0,8.5 -10,0 z"
+ id="path4813-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Layer#1"
+ style="opacity:0.98999999"
+ transform="translate(0,-6.0000106)">
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 7,23.000004 -3,3 -3,0 0,4 3,0 3,3 z m -1,2.500001 0,5 -1.5,-1.500001 -2.5,0 0,-2 2.5,0 z"
+ id="path4755-9-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 7.4319858,26.075368 c 0,-0.621323 0.6213237,-1.242647 1.2426477,-0.621323 0,0 0.6213228,0.621323 0.6213228,2.485294 0,1.863971 -0.6213228,2.485294 -0.6213228,2.485294 -0.621324,0.621324 -1.2426477,0 -1.2426477,-0.621323 0,0 0.6213237,-0.621324 0.6213237,-1.863971 0,-1.242648 -0.6213237,-1.863971 -0.6213237,-1.863971 z"
+ id="path4760-1-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 9.2959563,24.832721 c 0,-0.621324 0.6213228,-1.242647 1.2426477,-0.621324 0,0 1.242646,1.242648 1.242646,3.727942 0,2.485294 -1.242646,3.727941 -1.242646,3.727941 -0.6213249,0.621324 -1.2426477,0 -1.2426477,-0.621323 0,0 1.2426477,-1.242647 1.2426477,-3.106618 0,-1.863971 -1.2426477,-3.106618 -1.2426477,-3.106618 z"
+ id="path4762-8-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccsccsc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+ d="m 2.4916056,40.000004 0,0.621323 8.0979164,0 0,-0.621323 z"
+ id="path4772-4"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+ d="m 2.4916056,48.000004 8.0979164,0 0,-0.621324 -8.0979164,0 z"
+ id="path4774-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+ d="m 2.4916056,41.919118 0,0.621323 1.8687499,0 0,-0.621323 z m 6.2291665,0 0,0.621323 1.8687499,0 0,-0.621323 z"
+ id="path4782-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+ d="m 2.4916056,45.589344 0,0.621322 1.8687499,0 0,-0.621322 z m 6.2291665,0 0,0.621322 1.8687499,0 0,-0.621322 z"
+ id="path4778-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:0.99215686;stroke:none;display:inline"
+ d="m 2.4916056,44.404412 8.0979164,0 0,-0.621323 -8.0979164,0 z"
+ id="path4780-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 4.3603555,43.472427 0,1.242647 4.3604166,0 0,-1.242647 z"
+ id="path4793-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 4,40.000004 0,8 5,0 0,-8 z m 1,1 3,0 0,6 -3,0 z"
+ id="path4768-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 2,39.000004 1,0 0,10 -1,0 z"
+ id="path4764-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 10,39.000004 1,0 0,10 -1,0 z"
+ id="path4766-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="M 1.8400738,58.055766 6.5000005,62.405031 11.159927,58.055766 10.538604,57.434442 9.2959563,58.056049 6.5000005,60.541343 3.7040445,58.056049 2.4613977,57.434442 z"
+ id="path4800-4-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 1,57.000008 0,8 11,0 0,-8 z m 1,1 9,0 0,6 -9,0 z"
+ id="path4795-8-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccc"
+ inkscape:export-filename="/home/rahah/elvidishu/steak/unreal/dev/skins/external link icons/mail.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="M 1.6213238,72.000004 1,72.621328 l 0,5.757352 0.6213238,0.621324 1.6894529,0 L 2.6894528,81.727943 7,79.000004 l 4.378677,0 L 12,78.37868 12,72.621328 11.378677,72.000004 z m 0.3786762,1 9,0 0,5 -4,0 L 4.0978858,79.896603 5,78.000004 l -3,0 z"
+ id="path4802-8-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 5,88.000004 7,0 0,7 -2,-2 -3,2 0,-1 3,-2.249999 1,1 0,-3.750001 -3.75,0 1,1 -2.25,3 -1,0 2,-3 z"
+ id="path4807-5-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 7,90.000004 -5,0 0,8 8,0 0,-5 -1,0 0,4 -6,0 0,-6 4,0 z"
+ id="path4809-7-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 7.5,105.00001 0,3 2.5,0 1,-1 -2.5,0 0,-3 z"
+ id="path4818-67-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#3366bb;fill-opacity:1;stroke:none;display:inline"
+ d="m 3,104 0,10 8,1e-5 0,-7 -2.5,-3 z m 1,1 4,1e-5 2,2.50001 0,5.49999 -6,0 z"
+ id="path4813-2-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccc" />
+ <path
+ style="fill:#15a5ea;fill-opacity:1;stroke:none;display:inline"
+ d="m 4.0827206,92.533089 c 0,-0.621319 0.6213239,-0.621319 0.6213239,-0.621319 1.8639706,0.621319 3.1066175,1.863968 3.7279413,3.727935 0,0 0,0.621328 -0.6213238,0.621328 C 6.5680151,94.397065 5.9466913,93.775738 4.0827206,92.533089 z"
+ id="path4822-8-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
+ d="m 1,8.500006 0,7.5001 1,-0.9872 0,-6.0129 2,0 2,1 4,-2e-4 0,2.0002 1,0 0,-2.5 -0.5,-0.5002 -4.5,2e-4 -2,-1 -2.5,0 z"
+ id="path3209"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccc" />
+ <path
+ style="fill:#16a4e8;fill-opacity:1;stroke:none;display:inline"
+ d="m 6,11.000106 -1,-10e-5 -2.5,0 -0.5,0.5 -1,4.5001 10,-10e-5 0,-4.4998 -0.5,-0.5 z m 0,1 4,-10e-5 0,3 -7.75,-1e-4 0.75,-3.0001 2,0 z"
+ id="path3215"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccc" />
+ <path
+ style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
+ d="m 2,17.000006 0,1 8,0 0,-1 z"
+ id="path3247"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#3465ba;fill-opacity:1;stroke:none;display:inline"
+ d="m 5,15.500006 0,2 2,0 0,-2 c 0,-0.5 -2,-0.5 -2,0 z"
+ id="path3249"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m41.47,259.4,7,0,0,7-2-2-3,2,0-1,3-2.25,1,1,0-3.75-3.75,0,1,1-2.25,3-1,0,2-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m43.47,261.4-5,0,0,8,8,0,0-5-1,0,0,4-6,0,0-6,4,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m40.55,263.9c0-0.6213,0.6213-0.6213,0.6213-0.6213,1.864,0.6213,3.107,1.864,3.728,3.728,0,0,0,0.6213-0.6213,0.6213-1.243-1.864-1.864-2.485-3.728-3.728z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.467808,-258.39005)">
+<path style="opacity:1;fill:#3366bb;" d="m44.47,259.4-7,0,0,7,2-2,3,2,0-1-3-2.25-1,1,0-3.75,3.75,0-1,1,2.25,3,1,0-2-3z"/>
+<path style="opacity:1;fill:#3366bb;" d="m42.47,261.4,5,0,0,8-8,0,0-5,1,0,0,4,6,0,0-6-4,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m45.39,263.9c0-0.6213-0.6213-0.6213-0.6213-0.6213-1.864,0.6213-3.107,1.864-3.728,3.728l0.6213,0.6213c1.243-1.864,1.864-2.485,3.728-3.728z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-136.35715,-374.43362)">
+<path style="opacity:1;fill:#3465ba;" d="m137.4,376.9,0,7.5,1-0.9872,0-6.013,2,0,2,1,4-0.0002,0,2,1,0,0-2.5-0.5-0.5002-4.5,0.0002-2-1-2.5,0z"/>
+<path style="opacity:1;fill:#16a4e8;" d="m142.4,379.4-1-0.0001-2.5,0-0.5,0.5-1,4.5,10-0.0001,0-4.5-0.5-0.5zm0,1,4-0.0001,0,3-7.75-0.0001,0.75-3,2,0z"/>
+<path style="opacity:1;fill:#3465ba;" d="m138.4,385.4,0,1,8,0,0-1z"/>
+<path style="opacity:1;fill:#3465ba;" d="m141.4,383.9,0,2,2,0,0-2c0-0.5-2-0.5-2,0z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-136.35715,-374.43362)">
+<path style="opacity:1;fill:#3465ba;" d="m148.4,376.9,0,7.5-1-0.9872,0-6.013-2,0-2,1-4-0.0002,0,2-1,0,0-2.5,0.5-0.5002,4.5,0.0002,2-1,2.5,0z"/>
+<path style="opacity:1;fill:#16a4e8;" d="m143.4,379.4,1-0.0001,2.5,0,0.5,0.5,1,4.5-10-0.0001,0-4.5,0.5-0.5zm0,1-4-0.0001,0,3,7.75-0.0001-0.75-3-2,0z"/>
+<path style="opacity:1;fill:#3465ba;" d="m147.4,385.4,0,1-8,0,0-1z"/>
+<path style="opacity:1;fill:#3465ba;" d="m144.4,383.9,0,2-2,0,0-2c0-0.5,2-0.5,2,0z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.47,-257.4)">
+<path style="fill:#15a5ea;" d="m38.31,261.4,4.66,4.349,4.66-4.349-0.6213-0.6213-1.243,0.6216-2.796,2.485-2.796-2.485-1.243-0.6216z"/>
+<path style="fill:#3366bb;" d="m37.47,260.4,0,8,11,0,0-8zm1,1,9,0,0,6-9,0z"/>
+</g>
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="13" width="13" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<g transform="translate(-36.4678,-258.39)">
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,260.4,0,0.6213,8.098,0,0-0.6213z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,268.4,8.098,0,0-0.6213-8.098,0z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,262.3,0,0.6213,1.869,0,0-0.6213zm6.229,0,0,0.6213,1.869,0,0-0.6213z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,266,0,0.6213,1.869,0,0-0.6213zm6.229,0,0,0.6213,1.869,0,0-0.6213z"/>
+<path style="opacity:1;fill-opacity:1;fill:#15a5ea;" d="m38.96,264.8,8.098,0,0-0.6213-8.098,0z"/>
+<path style="opacity:1;fill:#15a5ea;" d="m40.83,263.9,0,1.243,4.36,0,0-1.243z"/>
+<path style="opacity:1;fill:#3366bb;" d="m40.47,260.4,0,8,5,0,0-8zm1,1,3,0,0,6-3,0z"/>
+<path style="opacity:1;fill:#3366bb;" d="m38.47,259.4,1,0,0,10-1,0z"/>
+<path style="opacity:1;fill:#3366bb;" d="m46.47,259.4,1,0,0,10-1,0z"/>
+</g>
+</svg>
--- /dev/null
+/**
+ * MediaWiki style sheet for common core styles on interfaces
+ *
+ * Styles for the Monobook/Vector pattern of laying out common interfaces.
+ * These ids/classes are not built into the system,
+ * they are outputted by the actual MonoBook/Vector code by convention.
+ */
+
+/* Categories */
+.catlinks {
+ border: 1px solid #aaa;
+ background-color: #f9f9f9;
+ padding: 5px;
+ margin-top: 1em;
+ clear: both;
+}
+
+.usermessage {
+ background-color: #ffce7b;
+ border: 1px solid #ffa500;
+ color: black;
+ font-weight: bold;
+ margin: 2em 0 1em;
+ padding: .5em 1em;
+ vertical-align: middle;
+}
+
+#siteNotice {
+ position: relative;
+ text-align: center;
+ margin: 0;
+}
+
+#localNotice {
+ margin-bottom: 0.9em;
+}
+
+.firstHeading {
+ margin-bottom: .1em;
+ /* These two rules hack around bug 2013 (fix for more limited bug 11325).
+ * When bug 2013 is fixed properly, they should be removed. */
+ line-height: 1.2em;
+ padding-bottom: 0;
+}
+
+/* Sub-navigation */
+#siteSub {
+ display: none;
+}
+
+#jump-to-nav {
+ /* Negate #contentSub's margin and replicate it so that the jump to links don't affect the spacing */
+ margin-top: -1.4em;
+ margin-bottom: 1.4em;
+}
+
+#contentSub,
+#contentSub2 {
+ font-size: 84%;
+ line-height: 1.2em;
+ margin: 0 0 1.4em 1em;
+ color: #545454;
+ width: auto;
+}
+
+span.subpages {
+ display: block;
+}
/*
* Hide, but keep accessible for screen-readers.
- * Like .mw-jump, #jump-to-nav from skins/common/shared.css
+ * Like .mw-jump, #jump-to-nav from shared.css
*/
.mw-navigation-hint {
overflow: hidden;
var parts = $( this ).attr( 'href' ).split( 'search=' ),
lastpart = '',
prefix = 'search=';
- if ( parts.length > 1 && parts[1].indexOf( '&' ) >= 0 ) {
- lastpart = parts[1].substring( parts[1].indexOf( '&' ) );
+ if ( parts.length > 1 && parts[1].indexOf( '&' ) !== -1 ) {
+ lastpart = parts[1].slice( parts[1].indexOf( '&' ) );
} else {
prefix = '&search=';
}
background: url(images/glyph-people-large.png) no-repeat 50%;
margin: 0 auto;
padding-top: 4em;
-}
-
-#mw-createaccount-cta,
-#mw-createaccount-another {
font-size: 0.9em;
font-weight: normal;
text-align: center;
//
// Styleguide 2.1.
.mw-ui-button {
+ // Inherit the font rather than apply user agent stylesheet (bug 70072)
+ font-family: inherit;
font-size: 1em;
// Container layout
display: inline-block;
// </div>
// </form>
//
- // Styleguide 3.1.
+ // Styleguide 3.2.
.error,
.errorbox,
.warningbox,
word-wrap: break-word;
}
- // Colours taken from those for .errorbox in skins/common/shared.css
+ // Colours taken from those for .errorbox in shared.css
.error {
color: #cc0000;
border: 1px solid #fac5c5;
// This specifies styling for individual field validation error messages.
// Show them below the fields to prevent line break glitches, and leave
// some space between the field and the error message box.
- .mw-ui-vform-div .error, /* for backwards-compatibility, remove before 1.24 */
.mw-ui-vform-field .error {
display: block;
margin-top: 5px;
//
// (We use a broad definition of 'field' here: a purely textual information
// block is also a "field".)
-.mw-ui-vform-div, /* for backwards-compatibility, remove before 1.24 */
.mw-ui-vform-field {
display: block;
margin: 0 0 15px;
}
&:focus {
- box-shadow: inset .45em 0 0 #5088f7;
+ box-shadow: inset .45em 0 0 @colorProgressive;
border-color: @colorGrayDark;
// Remove focus glow on input[type="search"]
outline: 0;
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M1 10h10l-5-8.658z" fill="#00a"/></svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12"><path d="M1 2h10l-5 8.658z" fill="#00a"/></svg>
\ No newline at end of file
namespace = NS_MAIN;
title = title
// Strip colon
- .substr( 1 )
+ .slice( 1 )
// Trim underscores
.replace( rUnderscoreTrim, '' );
}
} else {
fragment = title
// Get segment starting after the hash
- .substr( i + 1 )
+ .slice( i + 1 )
// Convert to text
// NB: Must not be trimmed ("Example#_foo" is not the same as "Example#foo")
.replace( /_/g, ' ' );
title = title
// Strip hash
- .substr( 0, i )
+ .slice( 0, i )
// Trim underscores, again (strips "_" from "bar" in "Foo_bar_#quux")
.replace( rUnderscoreTrim, '' );
}
title.indexOf( '../' ) === 0 ||
title.indexOf( '/./' ) !== -1 ||
title.indexOf( '/../' ) !== -1 ||
- title.substr( title.length - 2 ) === '/.' ||
- title.substr( title.length - 3 ) === '/..'
+ title.slice( -2 ) === '/.' ||
+ title.slice( -3 ) === '/..'
)
) {
return false;
// Extensions are the non-empty segment after the last dot
ext = null;
} else {
- ext = title.substr( i + 1 );
- title = title.substr( 0, i );
+ ext = title.slice( i + 1 );
+ title = title.slice( 0, i );
}
return {
*/
switchPane: function ( e ) {
var currentPaneId = debug.$container.data( 'currentPane' ),
- requestedPaneId = $( this ).prop( 'id' ).substr( 9 ),
+ requestedPaneId = $( this ).prop( 'id' ).slice( 9 ),
$currentPane = $( '#mw-debug-pane-' + currentPaneId ),
$requestedPane = $( '#mw-debug-pane-' + requestedPaneId ),
hovDone = false;
gitInfo = '';
if ( this.data.gitRevision !== false ) {
- gitInfo = '(' + this.data.gitRevision.substring( 0, 7 ) + ')';
+ gitInfo = '(' + this.data.gitRevision.slice( 0, 7 ) + ')';
if ( this.data.gitViewUrl !== false ) {
gitInfo = $( '<a>' )
.attr( 'href', this.data.gitViewUrl )
}
bitDiv( 'phpversion' )
- .append( $( '<a href="//www.php.net/"></a>' ).text( 'PHP' ) )
+ .append( $( this.data.phpEngine === 'HHVM'
+ ? '<a href="http://hhvm.com/">HHVM</a>'
+ : '<a href="https://php.net/">PHP</a>'
+ ) )
.append( ': ' + this.data.phpVersion );
bitDiv( 'time' )
// only drop events if requested
dropThresholdPx = dropThresholdPx || 0;
- if ( !Array.prototype.map || !Array.prototype.reduce || !Array.prototype.filter ) {
- profile.container = profile.buildRequiresES5();
+ if (
+ !Array.prototype.map ||
+ !Array.prototype.reduce ||
+ !Array.prototype.filter ||
+ !document.createElementNS ||
+ !document.createElementNS.bind
+ ) {
+ profile.container = profile.buildRequiresBrowserFeatures();
} else if ( data.length === 0 ) {
profile.container = profile.buildNoData();
} else {
+ // Initialize createSvgElement (now that we know we have
+ // document.createElementNS and bind)
+ this.createSvgElement = document.createElementNS.bind( document, 'http://www.w3.org/2000/svg' );
+
// generate a flyout
profile.data = new ProfileData( data, profile.width, mergeThresholdPx, dropThresholdPx );
// draw it
return profile.container;
},
- buildRequiresES5: function () {
+ buildRequiresBrowserFeatures: function () {
return $( '<div>' )
- .text( 'An ES5 compatible javascript engine is required for the profile visualization.' )
+ .text( 'Certain browser features, including parts of ECMAScript 5 and document.createElementNS, are required for the profile visualization.' )
.get( 0 );
},
/**
* Creates DOM nodes appropriately namespaced for SVG.
+ * Initialized in init after checking support
*
* @param string tag to create
* @return DOMElement
*/
- createSvgElement: document.createElementNS
- ? document.createElementNS.bind( document, 'http://www.w3.org/2000/svg' )
- // throw a error for browsers which does not support document.createElementNS (IE<8)
- : function () { throw new Error( 'document.createElementNS not supported' ); },
+ createSvgElement: null,
/**
* @param DOMElement|undefined
ProfileData.groupOf = function ( label ) {
var pos, prefix = 'Profile section ended by close(): ';
if ( label.indexOf( prefix ) === 0 ) {
- label = label.substring( prefix.length );
+ label = label.slice( prefix.length );
}
pos = [ '::', ':', '-' ].reduce( function ( result, separator ) {
if ( pos === -1 ) {
return label;
} else {
- return label.substring( 0, pos );
+ return label.slice( 0, pos );
}
};
} );
function enhance( $root ) {
+ var $matrixTooltips, $autocomplete;
/**
* @ignore
} );
}
- var $matrixTooltips = $root.find( '.mw-htmlform-matrix .mw-htmlform-tooltip' );
+ $matrixTooltips = $root.find( '.mw-htmlform-matrix .mw-htmlform-tooltip' );
if ( $matrixTooltips.length ) {
mw.loader.using( 'jquery.tipsy', function () {
$matrixTooltips.tipsy( { gravity: 's' } );
} );
}
+ // Set up autocomplete fields
+ $autocomplete = $root.find( '.mw-htmlform-autocomplete' );
+ if ( $autocomplete.length ) {
+ mw.loader.using( 'jquery.suggestions', function () {
+ $autocomplete.suggestions( {
+ fetch: function ( val ) {
+ var $el = $( this );
+ $el.suggestions( 'suggestions',
+ $.grep( $el.data( 'autocomplete' ), function ( v ) {
+ return v.indexOf( val ) === 0;
+ } )
+ );
+ }
+ } );
+ } );
+ }
+
// Add/remove cloner clones without having to resubmit the form
$root.find( '.mw-htmlform-cloner-delete-button' ).click( function ( ev ) {
ev.preventDefault();
},
/**
- * Perform a substring search across the JavaScript and CSS source code
+ * Perform a string search across the JavaScript and CSS source code
* of all loaded modules and return an array of the names of the
* modules that matched.
*
*/
function makeRegexParser( regex ) {
return function () {
- var matches = input.substr( pos ).match( regex );
+ var matches = input.slice( pos ).match( regex );
if ( matches === null ) {
return null;
}
if ( parsedCloseTagResult === null ) {
// Closing tag failed. Return the start tag and contents.
- return [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ]
+ return [ 'CONCAT', input.slice( startOpenTagPos, endOpenTagPos ) ]
.concat( parsedHtmlContents );
}
// parsed HTML link.
//
// Concatenate everything from the tag, flattening the contents.
- result = [ 'CONCAT', input.substring( startOpenTagPos, endOpenTagPos ) ]
- .concat( parsedHtmlContents, input.substring( startCloseTagPos, endCloseTagPos ) );
+ result = [ 'CONCAT', input.slice( startOpenTagPos, endOpenTagPos ) ]
+ .concat( parsedHtmlContents, input.slice( startCloseTagPos, endCloseTagPos ) );
}
return result;
* @return {string} selected pluralized form according to current language
*/
plural: function ( nodes ) {
- var forms, count;
+ var forms, formIndex, node, count;
count = parseFloat( this.language.convertNumber( nodes[0], true ) );
forms = nodes.slice( 1 );
+ for ( formIndex = 0; formIndex < forms.length; formIndex++ ) {
+ node = forms[formIndex];
+ if ( node.jquery && node.hasClass( 'mediaWiki_htmlEmitter' ) ) {
+ // This is a nested node, already expanded.
+ forms[formIndex] = forms[formIndex].html();
+ }
+ }
return forms.length ? this.language.convertPlural( count, forms ) : '';
},
for ( i = 0; i < modules.length; i += 1 ) {
// Determine how many bytes this module would add to the query string
lastDotIndex = modules[i].lastIndexOf( '.' );
- // Note that these substr() calls work even if lastDotIndex == -1
+
+ // If lastDotIndex is -1, substr() returns an empty string
prefix = modules[i].substr( 0, lastDotIndex );
- suffix = modules[i].substr( lastDotIndex + 1 );
+ suffix = modules[i].slice( lastDotIndex + 1 );
+
bytesAdded = moduleMap[prefix] !== undefined
? suffix.length + 3 // '%2C'.length == 3
: modules[i].length + 3; // '%7C'.length == 3
}
for ( key in mw.loader.store.items ) {
- module = key.substring( 0, key.indexOf( '@' ) );
+ module = key.slice( 0, key.indexOf( '@' ) );
if ( mw.loader.store.getModuleKey( module ) !== key ) {
mw.loader.store.stats.expired++;
delete mw.loader.store.items[key];
// on links from hiding a notification.
.on( 'click', 'a', function ( e ) {
e.stopPropagation();
- } );
+ } )
+ .hide();
// Prepend the notification area to the content area and save it's object.
mw.util.$content.prepend( $area );
--- /dev/null
+/*!
+ * Structures generated by the TablePager PHP class
+ * in MediaWiki (used e.g. on Special:ListFiles).
+ */
+
+@import "mediawiki.mixins";
+
+.TablePager {
+ min-width: 80%;
+}
+
+.TablePager .TablePager_sort-ascending a {
+ padding-left: 15px;
+ background: none left center no-repeat;
+ .background-image-svg('images/arrow-sort-ascending.svg', 'images/arrow-sort-ascending.png');
+}
+
+.TablePager .TablePager_sort-descending a {
+ padding-left: 15px;
+ background: none left center no-repeat;
+ .background-image-svg('images/arrow-sort-descending.svg', 'images/arrow-sort-descending.png');
+}
+
+.TablePager_nav {
+ margin: 0 auto;
+}
+
+.TablePager_nav td {
+ padding: 3px;
+ text-align: center;
+ vertical-align: center;
+}
+
+.TablePager_nav a {
+ text-decoration: none;
+}
+
+.TablePager_nav td.TablePager_nav-first .TablePager_nav-disabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-disabled-fastforward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-prev .TablePager_nav-disabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-disabled-forward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-next .TablePager_nav-disabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-disabled-forward-ltr.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-last .TablePager_nav-disabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-disabled-fastforward-ltr.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-first .TablePager_nav-enabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-fastforward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-prev .TablePager_nav-enabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-forward-rtl.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-next .TablePager_nav-enabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-forward-ltr.png) center top no-repeat;
+}
+
+.TablePager_nav td.TablePager_nav-last .TablePager_nav-enabled {
+ padding-top: 25px;
+ /* @embed */
+ background: url(images/pager-arrow-fastforward-ltr.png) center top no-repeat;
+}
seed = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
for ( i = 0; i < 32; i++ ) {
r = Math.floor( Math.random() * seed.length );
- id += seed.substring( r, r + 1 );
+ id += seed.charAt( r );
}
return id;
},
--- /dev/null
+/**
+ * Simplified version of es5-sham#Object-create that also works around a bug
+ * in the actual es5-sham: https://github.com/es-shims/es5-shim/issues/252
+ *
+ * Does not:
+ * - Support empty inheritance via `Object.create(null)`.
+ * - Support getter and setter accessors via `Object.create( .., properties )`.
+ * - Support custom property descriptor (e.g. writable, configurtable, enumerable).
+ * - Leave behind an enumerable "__proto__" all over the place.
+ *
+ * @author Timo Tijhof, 2014
+ */
+
+// ES5 15.2.3.5
+// http://es5.github.com/#x15.2.3.5
+if ( !Object.create ) {
+ ( function () {
+ var hasOwn = Object.hasOwnProperty,
+ // https://developer.mozilla.org/en-US/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+ // http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+ isEnumBug = !{ valueOf: 0 }.propertyIsEnumerable( 'valueOf' );
+
+ // Reusable constructor function for Object.create
+ function Empty() {}
+
+ function defineProperty( object, key, property ) {
+ if ( hasOwn.call( property, 'value' ) ) {
+ object[ key ] = property.value;
+ } else {
+ object[ key ] = property;
+ }
+ }
+
+ Object.create = function create( prototype, properties ) {
+ var object, key;
+
+ if ( prototype !== Object( prototype ) ) {
+ throw new TypeError( 'Called on non-object' );
+ }
+
+ Empty.prototype = prototype;
+ object = new Empty();
+
+ if ( properties !== undefined ) {
+ if ( !isEnumBug ) {
+ for ( key in properties ) {
+ if ( hasOwn.call( properties, key ) ) {
+ defineProperty( object, key, properties[ key ] );
+ }
+ }
+ } else {
+ Object.keys( properties ).forEach( function ( key ) {
+ defineProperty( object, key, properties[ key ] );
+ } );
+ }
+ }
+
+ return object;
+ };
+
+ }() );
+}
var mediaWikiLoadStart = ( new Date() ).getTime();
/**
- * Returns false when run in a black-listed browser
+ * Returns false for Grade C supported browsers.
*
- * This function will be deleted after it's used, so do not expand it to be
- * generally useful beyond startup.
+ * This function should only be used by the Startup module, do not expand it to
+ * be generally useful beyond startup.
*
* See also:
- * - https://www.mediawiki.org/wiki/Compatibility#Browser
- * - http://jquerymobile.com/gbs/
- * - http://jquery.com/browser-support/
+ * - https://www.mediawiki.org/wiki/Compatibility#Browsers
+ * - https://jquery.com/browser-support/
*/
/*jshint unused: false */
( ua.indexOf( 'MSIE' ) !== -1 && parseFloat( ua.split( 'MSIE' )[1] ) < 7 ) ||
// Firefox < 3
( ua.indexOf( 'Firefox/' ) !== -1 && parseFloat( ua.split( 'Firefox/' )[1] ) < 3 ) ||
+ // Opera < 12
+ ( ua.indexOf( 'Opera/' ) !== -1 && ( ua.indexOf( 'Version/' ) === -1 ?
+ // "Opera/x.y"
+ parseFloat( ua.split( 'Opera/' )[1] ) < 10 :
+ // "Opera/9.80 ... Version/x.y"
+ parseFloat( ua.split( 'Version/' )[1] ) < 12
+ ) ) ||
+ // "Mozilla/0.0 ... Opera x.y"
+ ( ua.indexOf( 'Opera ' ) !== -1 && parseFloat( ua.split( ' Opera ' )[1] ) < 10 ) ||
// BlackBerry < 6
ua.match( /BlackBerry[^\/]*\/[1-5]\./ ) ||
// Open WebOS < 1.5
+++ /dev/null
-/**
- * Remote Scripting Library
- * Copyright 2005 modernmethod, inc
- * Under the open source BSD license
- * http://www.modernmethod.com/sajax/
- */
-
-/*jshint camelcase:false */
-/*global alert */
-( function ( mw ) {
-
-/**
- * if sajax_debug_mode is true, this function outputs given the message into
- * the element with id = sajax_debug; if no such element exists in the document,
- * it is injected.
- */
-function debug( text ) {
- if ( !window.sajax_debug_mode ) {
- return false;
- }
-
- var b, m,
- e = document.getElementById( 'sajax_debug' );
-
- if ( !e ) {
- e = document.createElement( 'p' );
- e.className = 'sajax_debug';
- e.id = 'sajax_debug';
-
- b = document.getElementsByTagName( 'body' )[0];
-
- if ( b.firstChild ) {
- b.insertBefore( e, b.firstChild );
- } else {
- b.appendChild( e );
- }
- }
-
- m = document.createElement( 'div' );
- m.appendChild( document.createTextNode( text ) );
-
- e.appendChild( m );
-
- return true;
-}
-
-/**
- * Compatibility wrapper for creating a new XMLHttpRequest object.
- */
-function createXhr() {
- debug( 'sajax_init_object() called..' );
- var a;
- try {
- // Try the new style before ActiveX so we don't
- // unnecessarily trigger warnings in IE 7 when
- // set to prompt about ActiveX usage
- a = new XMLHttpRequest();
- } catch ( xhrE ) {
- try {
- a = new window.ActiveXObject( 'Msxml2.XMLHTTP' );
- } catch ( msXmlE ) {
- try {
- a = new window.ActiveXObject( 'Microsoft.XMLHTTP' );
- } catch ( msXhrE ) {
- a = null;
- }
- }
- }
- if ( !a ) {
- debug( 'Could not create connection object.' );
- }
-
- return a;
-}
-
-/**
- * Perform an AJAX call to MediaWiki. Calls are handled by AjaxDispatcher.php
- * func_name - the name of the function to call. Must be registered in $wgAjaxExportList
- * args - an array of arguments to that function
- * target - the target that will handle the result of the call. If this is a function,
- * if will be called with the XMLHttpRequest as a parameter; if it's an input
- * element, its value will be set to the resultText; if it's another type of
- * element, its innerHTML will be set to the resultText.
- *
- * Example:
- * sajax_do_call( 'doFoo', [1, 2, 3], document.getElementById( 'showFoo' ) );
- *
- * This will call the doFoo function via MediaWiki's AjaxDispatcher, with
- * (1, 2, 3) as the parameter list, and will show the result in the element
- * with id = showFoo
- */
-function doAjaxRequest( func_name, args, target ) {
- var i, x, uri, post_data;
- uri = mw.util.wikiScript() + '?action=ajax';
- if ( window.sajax_request_type === 'GET' ) {
- if ( uri.indexOf( '?' ) === -1 ) {
- uri = uri + '?rs=' + encodeURIComponent( func_name );
- } else {
- uri = uri + '&rs=' + encodeURIComponent( func_name );
- }
- for ( i = 0; i < args.length; i++ ) {
- uri = uri + '&rsargs[]=' + encodeURIComponent( args[i] );
- }
- //uri = uri + '&rsrnd=' + new Date().getTime();
- post_data = null;
- } else {
- post_data = 'rs=' + encodeURIComponent( func_name );
- for ( i = 0; i < args.length; i++ ) {
- post_data = post_data + '&rsargs[]=' + encodeURIComponent( args[i] );
- }
- }
- x = createXhr();
- if ( !x ) {
- alert( 'AJAX not supported' );
- return false;
- }
-
- try {
- x.open( window.sajax_request_type, uri, true );
- } catch ( e ) {
- if ( location.hostname === 'localhost' ) {
- alert( 'Your browser blocks XMLHttpRequest to "localhost", try using a real hostname for development/testing.' );
- }
- throw e;
- }
- if ( window.sajax_request_type === 'POST' ) {
- x.setRequestHeader( 'Method', 'POST ' + uri + ' HTTP/1.1' );
- x.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
- }
- x.setRequestHeader( 'Pragma', 'cache=yes' );
- x.setRequestHeader( 'Cache-Control', 'no-transform' );
- x.onreadystatechange = function () {
- if ( x.readyState !== 4 ) {
- return;
- }
-
- debug( 'received (' + x.status + ' ' + x.statusText + ') ' + x.responseText );
-
- //if ( x.status != 200 )
- // alert( 'Error: ' + x.status + ' ' + x.statusText + ': ' + x.responseText );
- //else
-
- if ( typeof target === 'function' ) {
- target( x );
- } else if ( typeof target === 'object' ) {
- if ( target.tagName === 'INPUT' ) {
- if ( x.status === 200 ) {
- target.value = x.responseText;
- }
- //else alert( 'Error: ' + x.status + ' ' + x.statusText + ' (' + x.responseText + ')' );
- } else {
- if ( x.status === 200 ) {
- target.innerHTML = x.responseText;
- } else {
- target.innerHTML = '<div class="error">Error: ' + x.status +
- ' ' + x.statusText + ' (' + x.responseText + ')</div>';
- }
- }
- } else {
- alert( 'Bad target for sajax_do_call: not a function or object: ' + target );
- }
- };
-
- debug( func_name + ' uri = ' + uri + ' / post = ' + post_data );
- x.send( post_data );
- debug( func_name + ' waiting..' );
-
- return true;
-}
-
-/**
- * @return {boolean} Whether the browser supports AJAX
- */
-function wfSupportsAjax() {
- var request = createXhr(),
- supportsAjax = request ? true : false;
-
- request = undefined;
- return supportsAjax;
-}
-
-// Expose + Mark as deprecated
-var deprecationNotice = 'Sajax is deprecated, use jQuery.ajax or mediawiki.api instead.';
-
-// Variables
-mw.log.deprecate( window, 'sajax_debug_mode', false, deprecationNotice );
-mw.log.deprecate( window, 'sajax_request_type', 'GET', deprecationNotice );
-// Methods
-mw.log.deprecate( window, 'sajax_debug', debug, deprecationNotice );
-mw.log.deprecate( window, 'sajax_init_object', createXhr, deprecationNotice );
-mw.log.deprecate( window, 'sajax_do_call', doAjaxRequest, deprecationNotice );
-mw.log.deprecate( window, 'wfSupportsAjax', wfSupportsAjax, deprecationNotice );
-
-}( mediaWiki ) );
--- /dev/null
+../../resources/src/mediawiki.legacy/ajax.js
\ No newline at end of file
+++ /dev/null
-/**
- * MediaWiki style sheet for general styles on complex content
- *
- * Styles for complex things which are a standard part of page content
- * (ie: the CSS classing built into the system), like the TOC.
- */
-
-/* Table of Contents */
-#toc,
-.toc,
-.mw-warning {
- border: 1px solid #aaa;
- background-color: #f9f9f9;
- padding: 5px;
- font-size: 95%;
-}
-
-/**
- * We want to display the ToC element with intrinsic width in block mode. The fit-content
- * value for width is however not supported by large groups of browsers.
- *
- * We use display:table. Even though it should only contain other table-* display
- * elements, there are no known problems with using this.
- *
- * Because IE < 8, FF 2 and other older browsers don't support display:table, we fallback to
- * using inline-block mode, which features at least intrinsic width, but won't clear preceding
- * inline elements. In practice inline elements surrounding the TOC are uncommon enough that
- * this is an acceptable sacrifice.
- */
-#toc,
-.toc {
- display: -moz-inline-block;
- display: inline-block;
- display: table;
-
- /* IE7 and earlier */
- zoom: 1;
- *display: inline;
-
- padding: 7px;
-}
-
-/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
-table#toc,
-table.toc {
- border-collapse: collapse;
-}
-
-/* Remove additional paddings inside table-cells that are not present in <div>s */
-table#toc td,
-table.toc td {
- padding: 0;
-}
-
-#toc h2,
-.toc h2 {
- display: inline;
- border: none;
- padding: 0;
- font-size: 100%;
- font-weight: bold;
-}
-
-#toc #toctitle,
-.toc #toctitle,
-#toc .toctitle,
-.toc .toctitle {
- text-align: center;
-}
-
-#toc ul,
-.toc ul {
- list-style-type: none;
- list-style-image: none;
- margin-left: 0;
- padding: 0;
- text-align: left;
-}
-
-#toc ul ul,
-.toc ul ul {
- margin: 0 0 0 2em;
-}
-
-#toc .toctoggle,
-.toc .toctoggle {
- font-size: 94%;
-}
-
-.toccolours {
- border: 1px solid #aaa;
- background-color: #f9f9f9;
- padding: 5px;
- font-size: 95%;
-}
-
-/* Warning */
-.mw-warning {
- margin-left: 50px;
- margin-right: 50px;
- text-align: center;
-}
-
-/* Images */
-/* @noflip */div.floatright, table.floatright {
- margin: 0 0 .5em .5em;
- border: 0;
-}
-
-div.floatright p {
- font-style: italic;
-}
-
-/* @noflip */div.floatleft, table.floatleft {
- margin: 0 .5em .5em 0;
- border: 0;
-}
-
-div.floatleft p {
- font-style: italic;
-}
-
-/* Thumbnails */
-div.thumb {
- margin-bottom: .5em;
- width: auto;
- background-color: transparent;
-}
-
-div.thumbinner {
- border: 1px solid #ccc;
- padding: 3px;
- background-color: #f9f9f9;
- font-size: 94%;
- text-align: center;
- overflow: hidden;
-}
-
-html .thumbimage {
- border: 1px solid #ccc;
-}
-
-html .thumbcaption {
- border: none;
- line-height: 1.4em;
- padding: 3px;
- font-size: 94%;
- /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
- text-align: left;
-}
-
-div.magnify {
- /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
- float: right;
- margin-left: 3px;
-}
-
-div.magnify a {
- display: block;
- /* Hide the text… */
- text-indent: 15px;
- white-space: nowrap;
- overflow: hidden;
- /* …and replace it with the image */
- width: 15px;
- height: 11px;
- /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
- /* @embed */
- background: url(images/magnify-clip-ltr.png) center center no-repeat;
- /* Don't annoy people who copy-paste everything too much */
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-/* Temporary WMF deployment hack, to be removed before 1.24 release */
-div.magnify img {
- display: none;
-}
-
-img.thumbborder {
- border: 1px solid #dddddd;
-}
-
-/* Directionality-specific styles for thumbnails - their positioning depends on content language */
-
-/* @noflip */
-.mw-content-ltr .thumbcaption {
- text-align: left;
-}
-
-/* @noflip */
-.mw-content-ltr .magnify {
- float: right;
- margin-left: 3px;
- margin-right: 0;
-}
-
-/* @noflip */
-.mw-content-ltr div.magnify a {
- /* @embed */
- background-image: url(images/magnify-clip-ltr.png);
-}
-
-/* @noflip */
-.mw-content-rtl .thumbcaption {
- text-align: right;
-}
-
-/* @noflip */
-.mw-content-rtl .magnify {
- float: left;
- margin-left: 0;
- margin-right: 3px;
-}
-
-/* @noflip */
-.mw-content-rtl div.magnify a {
- /* @embed */
- background-image: url(images/magnify-clip-rtl.png);
-}
-
-/* @noflip */
-div.tright {
- margin: .5em 0 1.3em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
- margin: .5em 1.4em 1.3em 0;
-}
+++ /dev/null
-/**
- * MediaWiki style sheet for general styles on basic content elements
- *
- * Styles for basic elements: links, lists, etc...
- *
- * This style sheet is used by the Monobook and Vector skins.
- */
-
-/* Links */
-a {
- text-decoration: none;
- color: #0645ad;
- background: none;
-}
-
-a:visited {
- color: #0b0080;
-}
-
-a:active {
- color: #faa700;
-}
-
-a:hover, a:focus {
- text-decoration: underline;
-}
-
-a.stub {
- color: #772233;
-}
-
-a.new, #p-personal a.new {
- color: #ba0000;
-}
-
-a.new:visited, #p-personal a.new:visited {
- color: #a55858;
-}
-
-/* Interwiki Styling */
-.mw-body a.extiw,
-.mw-body a.extiw:active {
- color: #36b;
-}
-
-.mw-body a.extiw:visited {
- color: #636;
-}
-
-.mw-body a.extiw:active {
- color: #b63;
-}
-
-/* External links */
-.mw-body a.external {
- color: #36b;
-}
-
-.mw-body a.external:visited {
- color: #636; /* bug 3112 */
-}
-
-.mw-body a.external:active {
- color: #b63;
-}
-
-/* Inline Elements */
-img {
- border: none;
- vertical-align: middle;
-}
-
-hr {
- height: 1px;
- color: #aaa;
- background-color: #aaa;
- border: 0;
- margin: .2em 0;
-}
-
-/* Structural Elements */
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- color: black;
- background: none;
- font-weight: normal;
- margin: 0;
- overflow: hidden;
- padding-top: .5em;
- padding-bottom: .17em;
- border-bottom: 1px solid #aaa;
-}
-
-h1 {
- font-size: 188%;
-}
-
-h2 {
- font-size: 150%;
-}
-
-h3,
-h4,
-h5,
-h6 {
- border-bottom: none;
- font-weight: bold;
-}
-
-h3 {
- font-size: 132%;
-}
-
-h4 {
- font-size: 116%;
-}
-
-h5 {
- font-size: 108%;
-}
-
-h6 {
- font-size: 100%;
-}
-
-/* Some space under the headers in the content area */
-h1,
-h2 {
- margin-bottom: .6em;
-}
-
-h3,
-h4,
-h5 {
- margin-bottom: .3em;
-}
-
-p {
- margin: .4em 0 .5em 0;
- line-height: 1.5em;
-}
-
-p img {
- margin: 0;
-}
-
-ul {
- line-height: 1.5em;
- list-style-type: square;
- margin: .3em 0 0 1.6em;
- padding: 0;
-}
-
-ol {
- line-height: 1.5em;
- margin: .3em 0 0 3.2em;
- padding: 0;
- list-style-image: none;
-}
-
-li {
- margin-bottom: .1em;
-}
-
-dt {
- font-weight: bold;
- margin-bottom: .1em;
-}
-
-dl {
- margin-top: .2em;
- margin-bottom: .5em;
-}
-
-dd {
- line-height: 1.5em;
- margin-left: 1.6em;
- margin-bottom: .1em;
-}
-
-/* IE 6 and 7 lack support for quotes aroud the <q> element ('::before' and '::after'
- pseudoelements, 'quotes' property). Let's italicize it instead (using the star hack). */
-q {
- *font-style: italic;
-}
-
-pre, code, tt, kbd, samp, .mw-code {
- /*
- * Some browsers will render the monospace text too small, namely Firefox, Chrome and Safari.
- * Specifying any valid, second value will trigger correct behavior without forcing a different font.
- */
- font-family: monospace, Courier;
-}
-
-code {
- color: black;
- background-color: #f9f9f9;
- border: 1px solid #ddd;
- border-radius: 2px;
- padding: 1px 4px;
-}
-
-pre, .mw-code {
- color: black;
- background-color: #f9f9f9;
- border: 1px solid #ddd;
- padding: 1em;
-}
-
-/* Tables */
-table {
- font-size: 100%;
-}
-
-/* Forms */
-fieldset {
- border: 1px solid #2f6fab;
- margin: 1em 0 1em 0;
- padding: 0 1em 1em;
- line-height: 1.5em;
-}
-
-fieldset.nested {
- margin: 0 0 0.5em 0;
- padding: 0 0.5em 0.5em;
-}
-
-legend {
- padding: .5em;
- font-size: 95%;
-}
-
-form {
- border: none;
- margin: 0;
-}
-
-textarea {
- width: 100%;
- padding: .1em;
- display: block;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-select {
- vertical-align: top;
-}
-
-/* Emulate Center */
-.center {
- width: 100%;
- text-align: center;
-}
-
-*.center * {
- margin-left: auto;
- margin-right: auto;
-}
-
-/* Small for tables and similar */
-.small {
- font-size: 94%;
-}
-
-table.small {
- font-size: 100%;
-}
+++ /dev/null
-/**
- * MediaWiki style sheet for common core styles on interfaces
- *
- * Styles for the Monobook/Vector pattern of laying out common interfaces.
- * These ids/classes are not built into the system,
- * they are outputted by the actual MonoBook/Vector code by convention.
- */
-
-/* Categories */
-.catlinks {
- border: 1px solid #aaa;
- background-color: #f9f9f9;
- padding: 5px;
- margin-top: 1em;
- clear: both;
-}
-
-/* User Message */
-.usermessage {
- background-color: #ffce7b;
- border: 1px solid #ffa500;
- color: black;
- font-weight: bold;
- margin: 2em 0 1em;
- padding: .5em 1em;
- vertical-align: middle;
-}
-
-/* Site Notice (includes notices from CentralNotice extension) */
-#siteNotice {
- position: relative;
- text-align: center;
- margin: 0;
-}
-
-#localNotice {
- margin-bottom: 0.9em;
-}
-
-/* First h1 */
-.firstHeading,
-#firstHeading {
- margin-bottom: .1em;
- /* These two rules hack around bug 2013 (fix for more limited bug 11325).
- * When bug 2013 is fixed properly, they should be removed. */
- line-height: 1.2em;
- padding-bottom: 0;
-}
-
-/* Sub-navigation */
-#siteSub {
- display: none;
-}
-
-#jump-to-nav {
- /* Negate #contentSub's margin and replicate it so that the jump to links don't affect the spacing */
- margin-top: -1.4em;
- margin-bottom: 1.4em;
-}
-
-#contentSub, #contentSub2 {
- font-size: 84%;
- line-height: 1.2em;
- margin: 0 0 1.4em 1em;
- color: #545454;
- width: auto;
-}
-
-span.subpages {
- display: block;
-}
+++ /dev/null
-/**
- * MediaWiki Print style sheet for CSS2-capable browsers.
- * Copyright Gabriel Wicke, http://www.aulinx.de/
- *
- * Derived from the plone (http://plone.org/) styles
- * Copyright Alexander Limi
- */
-
-/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
-
-/**
- * Hide all the elements irrelevant for printing
- */
-.noprint,
-div#jump-to-nav,
-.mw-jump,
-div.top,
-div#column-one,
-#colophon,
-.mw-editsection,
-.mw-editsection-like,
-.toctoggle,
-#toc.tochidden,
-div#f-poweredbyico,
-div#f-copyrightico,
-li#viewcount,
-li#about,
-li#disclaimer,
-li#mobileview,
-li#privacy,
-#footer-places,
-.mw-hidden-catlinks,
-tr.mw-metadata-show-hide-extended,
-span.mw-filepage-other-resolutions,
-#filetoc,
-.usermessage,
-.patrollink,
-#mw-navigation,
-#siteNotice {
- 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;
- margin: 0;
- padding: 0;
-}
-
-ul {
- list-style-type: square;
-}
-
-h1, h2, h3, h4, h5, h6 {
- font-weight: bold;
-}
-
-dt {
- font-weight: bold;
-}
-
-p {
- margin: 1em 0;
- line-height: 1.2em;
-}
-
-pre, .mw-code {
- border: 1pt dashed black;
- white-space: pre;
- font-size: 8pt;
- overflow: auto;
- padding: 1em 0;
- background: white;
- color: black;
-}
-
-/**
- * MediaWiki-specific elements
- */
-#globalWrapper {
- width: 100% !important;
- min-width: 0 !important;
-}
-
-#content {
- background: white;
- border: none !important;
- padding: 0 !important;
- margin: 0 !important;
- direction: ltr;
- color: black;
-}
-
-#column-content {
- margin: 0 !important;
-}
-
-#column-content #content {
- padding: 1em;
- margin: 0 !important;
-}
-
-#toc {
- border: 1px solid #aaaaaa;
- background-color: #f9f9f9;
- padding: 5px;
- display: -moz-inline-block;
- display: inline-block;
- display: table;
- /* IE7 and earlier */
- zoom: 1;
- *display: inline;
-}
-
-#footer {
- background: white;
- color: black;
- margin-top: 1em;
- border-top: 1px solid #AAA;
- direction: ltr;
-}
-
-img {
- border: none;
- vertical-align: middle;
-}
-
-/* math */
-span.texhtml {
- font-family: serif;
-}
-
-/**
- * Links
- */
-a.stub,
-a.new {
- color: #ba0000;
- text-decoration: none;
-}
-
-a {
- color: black !important;
- background: none !important;
- padding: 0 !important;
-}
-
-a:link, a:visited {
- color: #520;
- background: transparent;
- text-decoration: underline;
-}
-
-/* Expand URLs for printing */
-#content a.external.text:after,
-#content a.external.autonumber:after {
- content: " (" attr(href) ")";
-}
-
-/* Expand protocol-relative URLs for printing */
-#content a.external.text[href^='//']:after,
-#content a.external.autonumber[href^='//']:after {
- content: " (https:" attr(href) ")";
-}
-
-/* MSIE/Win doesn't understand 'inherit' */
-a,
-a.external,
-a.new,
-a.stub {
- color: black !important;
- text-decoration: none !important;
-}
-
-/* Continue ... */
-a,
-a.external,
-a.new,
-a.stub {
- color: inherit !important;
- text-decoration: inherit !important;
-}
-
-/**
- * Floating divs
- */
-div.floatright {
- float: right;
- clear: right;
- position: relative;
- margin: 0.5em 0 0.8em 1.4em;
-}
-
-div.floatright p {
- font-style: italic;
-}
-
-div.floatleft {
- float: left;
- clear: left;
- position: relative;
- margin: 0.5em 1.4em 0.8em 0;
-}
-
-div.floatleft p {
- font-style: italic;
-}
-
-div.center {
- text-align: center;
-}
-
-/**
- * Thumbnails
- */
-div.thumb {
- border: none;
- width: auto;
- margin-top: 0.5em;
- margin-bottom: 0.8em;
- background-color: transparent;
-}
-
-div.thumbinner {
- border: 1px solid #cccccc;
- padding: 3px !important;
- background-color: White;
- font-size: 94%;
- text-align: center;
- overflow: hidden;
-}
-
-html .thumbimage {
- border: 1px solid #cccccc;
-}
-
-html .thumbcaption {
- border: none;
- text-align: left;
- line-height: 1.4em;
- padding: 3px !important;
- font-size: 94%;
-}
-
-div.magnify {
- display: none;
-}
-
-/* @noflip */
-div.tright {
- float: right;
- clear: right;
- margin: 0.5em 0 0.8em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
- float: left;
- clear: left;
- margin: 0.5em 1.4em 0.8em 0;
-}
-
-img.thumbborder {
- border: 1px solid #dddddd;
-}
-
-/**
- * Galleries (see shared.css for more info)
- */
-li.gallerybox {
- vertical-align: top;
- display: inline-block;
-}
-
-ul.gallery, li.gallerybox {
- zoom: 1;
- *display: inline;
-}
-
-ul.gallery {
- margin: 2px;
- padding: 2px;
- display: block;
-}
-
-li.gallerycaption {
- font-weight: bold;
- text-align: center;
- display: block;
- word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
- text-align: center;
- border: 1px solid #ccc;
- margin: 2px;
-}
-
-div.gallerytext {
- overflow: hidden;
- font-size: 94%;
- padding: 2px 4px;
- word-wrap: break-word;
-}
-
-/**
- * Diff rendering
- */
-table.diff {
- background: white;
-}
-
-td.diff-otitle {
- background: #ffffff;
-}
-
-td.diff-ntitle {
- background: #ffffff;
-}
-
-td.diff-addedline {
- background: #ccffcc;
- font-size: smaller;
- border: solid 2px black;
-}
-
-td.diff-deletedline {
- background: #ffffaa;
- font-size: smaller;
- border: dotted 2px black;
-}
-
-td.diff-context {
- background: #eeeeee;
- font-size: smaller;
-}
-
-.diffchange {
- color: silver;
- font-weight: bold;
- text-decoration: underline;
-}
-
-/**
- * Table rendering
- * As on shared.css but with white background.
- */
-table.wikitable,
-table.mw_metadata {
- margin: 1em 0;
- border: 1px #aaa solid;
- background: white;
- 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;
- padding: 0.2em;
-}
-
-table.wikitable > tr > th,
-table.wikitable > * > tr > th,
-.mw_metadata th {
- text-align: center;
- background: white;
- font-weight: bold;
-}
-
-table.wikitable > caption,
-.mw_metadata caption {
- font-weight: bold;
-}
-
-table.listing,
-table.listing td {
- border: 1pt solid black;
- border-collapse: collapse;
-}
-
-a.sortheader {
- margin: 0 0.3em;
-}
-
-/**
- * Categories
- */
-.catlinks ul {
- display: inline;
- margin: 0;
- padding: 0;
- list-style: none;
- list-style-type: none;
- list-style-image: none;
- vertical-align: middle !ie;
-}
-
-.catlinks li {
- display: inline-block;
- line-height: 1.15em;
- padding: 0 .4em;
- border-left: 1px solid #AAA;
- margin: 0.1em 0;
- zoom: 1;
- display: inline !ie;
-}
-
-.catlinks li:first-child {
- padding-left: .2em;
- border-left: none;
-}
+++ /dev/null
-/*
-Make RSS and Atom feeds at least semi-legible to folk who accidentally
-load them in a browser...
-
-Compatibility:
-* Mozilla is fine.
-* Safari 1.2: the RSS <link> text isn't shown
-* Opera 7.5 uses the style sheet instead of its native RSS mode.
-* IE/Mac 5.2: none of the :before content works; doesn't get the charset right and displays garbage for non-ASCII.
-* IE/Win 6.0: No background color, borders, font size, font weight, or :before content.
-
-*/
-
-/* RSS: */ rss, channel, title, link, description, language, generator, lastBuildDate, item, pubDate, author, comments, creator,
-/* Atom: */ feed, id, modified, tagline, entry, issued, created, updated, summary, comment {
- display: block;
-}
-
-rss, feed {
- background: white;
- color: black;
- margin: 1em;
- font-family: "Verdana", "Tahoma", "Arial", "Helvetica", sans-serif;
- line-height: 1.5em;
- font-size: 76%;
-}
-
-rss:before {
- content: "This RSS feed is meant to be read in a syndicated news reader, and isn't ideal for a web browser.";
-}
-
-feed:before {
- content: "This Atom feed is meant to be read in a syndicated news reader, and isn't ideal for a web browser.";
-}
-
-rss:before, feed:before {
- color: red;
- text-align: center;
- line-height: 2em;
-}
-
-channel > title,
-item > title,
-feed > title,
-entry > title {
- font-weight: bold;
- border-bottom: solid 1px #aaa;
- margin-left: -0.5em;
-}
-
-channel > title, feed > title {
- font-size: larger;
-}
-
-item > title, entry > title {
- font-size: large;
-}
-
-item, entry {
- margin-top: 1em;
- margin-left: 2em;
-}
-
-item > description, entry > summary {
- white-space: pre;
- overflow: auto;
- background: #f8f8ff;
-}
-
-pubDate:before {
- content: "Date: ";
-}
-
-link:before {
- content: "Link: ";
-}
-
-author:before, creator:before {
- content: "Author: ";
-}
-
-description:before {
- content: "Description: ";
-}
-
-id:before {
- content: "Id: ";
-}
-
-generator:before {
- content: "Generator: ";
-}
-
-language:before {
- content: "Language: ";
-}
-
-lastBuildDate:before {
- content: "Updated: ";
-}
-
-comments:before {
- content: "Comments page: ";
-}
-
-tagline:before {
- content: "Tagline: ";
-}
-
-issued:before {
- content: "Issued: ";
-}
-
-created:before {
- content: "Created: ";
-}
-
-modified:before {
- content: "Modified: ";
-}
-
-updated:before {
- content: "Updated: ";
-}
-
-summary:before {
- content: "Summary: ";
-}
-
-comment:before {
- content: "Comment: ";
-}
-
-pubDate:before, link:before, author:before, description:before,
-language:before, generator:before, lastBuildDate:before, comments:before,
-tagline:before, issued:before, created:before, modified:before,
-summary:before, comment:before, creator:before, id:before, updated:before {
- color: #224;
- font-weight: bold;
-}
-
-feed link:after {
- content: attr(href);
-}
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 256 256"><defs><linearGradient x1=".085" y1=".085" x2=".915" y2=".915" id="a"><stop offset="0" stop-color="#E3702D"/><stop offset=".107" stop-color="#EA7D31"/><stop offset=".35" stop-color="#F69537"/><stop offset=".5" stop-color="#FB9E3A"/><stop offset=".702" stop-color="#EA7C31"/><stop offset=".887" stop-color="#DE642B"/><stop offset="1" stop-color="#D95B29"/></linearGradient></defs><rect width="256" height="256" rx="55" ry="55" fill="#CC5D15"/><rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/><rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#a)"/><circle cx="68" cy="189" r="24" fill="#FFF"/><path d="M160 213h-34a82 82 0 0 0-82-82v-34a116 116 0 0 1 116 116zM184 213a140 140 0 0 0-140-140v-35a175 175 0 0 1 175 175z" fill="#FFF"/></svg>
\ No newline at end of file
+++ /dev/null
-The icons used here are derived from the crystalsvg icons in the the
-pics/crystalsvg/ directory of kdelibs-3.4.0 they were modified on 2005-05-15
-by Ævar Arnfjörð Bjarmason for use in MediaWiki.
-
-What follows is the contents of the LICENSE.crystalsvg file found in the pics/
-subdirectory of kdelibs-3.4.0:
-
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-This copyright and license notice covers all CrystalSVG images.
-Note the license notice contains an add-on.
-********************************************************************************
-KDE Crystal theme icons.
-Copyright (C) 2002 and following years KDE Artists
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation,
-version 2.1 of the License.
-This library 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
-Lesser General Public License for more details.
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- **** NOTE THIS ADD-ON ****
-The GNU Lesser General Public License or LGPL is written for software libraries
-in the first place. We expressly want the LGPL to be valid for this artwork
-library too.
-KDE Crystal theme icons is a special kind of software library, it is an
-artwork library, it's elements can be used in a Graphical User Interface, or
-GUI.
-Source code, for this library means:
- - for vectors svg;
- - for pixels, if applicable, the multi-layered formats xcf or psd, or
-otherwise png.
-The LGPL in some sections obliges you to make the files carry
-notices. With images this is in some cases impossible or hardly useful.
-With this library a notice is placed at a prominent place in the directory
-containing the elements. You may follow this practice.
-The exception in section 6 of the GNU Lesser General Public License covers
-the use of elements of this art library in a GUI.
-kde-artists [at] kde.org
-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" width="21.059" height="21.06"><path fill="#575757" d="M10.529 0c-5.814 0-10.529 4.714-10.529 10.529s4.715 10.53 10.529 10.53c5.816 0 10.529-4.715 10.529-10.53s-4.712-10.529-10.529-10.529zm-.002 16.767c-.861 0-1.498-.688-1.498-1.516 0-.862.637-1.534 1.498-1.534.828 0 1.5.672 1.5 1.534 0 .827-.672 1.516-1.5 1.516zm2.137-6.512c-.723.568-1 .931-1 1.739v.5h-2.205v-.603c0-1.517.449-2.136 1.154-2.688.707-.552 1.139-.845 1.139-1.637 0-.672-.414-1.051-1.24-1.051-.707 0-1.328.189-1.982.638l-1.051-1.807c.861-.604 1.93-1.034 3.342-1.034 1.912 0 3.516 1.051 3.516 3.066-.001 1.43-.794 2.188-1.673 2.877z"/></svg>
\ No newline at end of file
+++ /dev/null
-/**
- * oldshared.css
- * This file contains CSS settings common to Wikistandard, Nostalgia and
- * CologneBlue, the old pre-Monobook skins
- */
-
-/* For clarity, explicitly state some recommendations from
- * http://www.w3.org/TR/CSS21/sample.html to make sure the editsection links scale right
- */
-
-h1 {
- font-size: 2em;
-}
-
-h2 {
- font-size: 1.5em;
-}
-
-h3 {
- font-size: 1.17em;
-}
-
-h4 {
- font-size: 1.11em;
-}
-
-h5 {
- font-size: 1.05em;
-}
-
-h6 {
- font-size: 1em;
-}
-
-h1, h2, h3, h4, h5, h6 {
- font-weight: bolder;
-}
-
-/* Now the custom parts */
-
-#footer {
- clear: both;
-}
-
-/* images */
-/* @noflip */
-div.floatright {
- float: right;
- clear: right;
- margin: 0 0 1em 1em;
-}
-
-/* @noflip */
-div.floatright p {
- font-style: italic;
-}
-
-/* @noflip */
-div.floatleft {
- float: left;
- clear: left;
- margin: 0.3em 0.5em 0.5em 0;
-}
-
-/* @noflip */
-div.floatleft p {
- font-style: italic;
-}
-
-/* table standards */
-table.rimage {
- float: right;
- margin-left: 1em;
- margin-bottom: 1em;
- text-align: center;
- font-size: smaller;
-}
-
-/* thumbnails */
-div.thumb {
- margin-bottom: .5em;
- border-style: solid;
- border-color: white;
- width: auto;
-}
-
-div.thumbinner {
- border: 1px solid #ccc;
- padding: 3px;
- background-color: #f9f9f9;
- font-size: 94%;
- text-align: center;
- overflow: hidden;
-}
-
-html .thumbimage {
- border: 1px solid #ccc;
-}
-
-html .thumbcaption {
- border: none;
- line-height: 1.4em;
- padding: 3px;
- font-size: 94%;
- text-align: left;
-}
-
-div.magnify {
- float: right;
- margin-left: 3px;
-}
-
-div.magnify a {
- display: block;
- /* Hide the text… */
- text-indent: 15px;
- white-space: nowrap;
- overflow: hidden;
- /* …and replace it with the image */
- width: 15px;
- height: 11px;
- /* @embed */
- background: url(images/magnify-clip-ltr.png) center center no-repeat;
- /* Don't annoy people who copy-paste everything too much */
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-/* Temporary WMF deployment hack, to be removed before 1.24 release */
-div.magnify img {
- display: none;
-}
-
-/* @noflip */
-div.tright {
- clear: right;
- float: right;
- border-width: .5em 0 .8em 1.4em;
-}
-
-/* @noflip */
-div.tleft {
- float: left;
- clear: left;
- margin-right: .5em;
- border-width: .5em 1.4em .8em 0;
-}
-
-img.thumbborder {
- border: 1px solid #dddddd;
-}
-
-/* Page history styling */
-/* the auto-generated edit comments */
-.autocomment {
- color: #4b4b4b;
-}
-
-img {
- border: none;
-}
-
-#toc,
-.toc {
- border: 1px solid #bba;
- background-color: #f7f8ff;
- padding: 5px;
- font-size: 95%;
- text-align: center;
- display: -moz-inline-block;
- display: inline-block;
- display: table;
-
- /* IE7 and earlier */
- zoom: 1;
- *display: inline;
-
- padding: 7px;
-}
-
-/* CSS for backwards-compatibility with cached page renders and creative uses in wikitext */
-table#toc,
-table.toc {
- border-collapse: collapse;
-}
-
-/* Remove additional paddings inside table-cells that are not present in <div>s */
-table#toc td,
-table.toc td {
- padding: 0;
-}
-
-#toc h2,
-.toc h2 {
- display: inline;
- border: none;
- padding: 0;
- font-size: 100%;
- font-weight: bold;
-}
-
-#toc ul,
-.toc ul {
- list-style-type: none;
- list-style-image: none;
- padding: 0;
- text-align: left;
-}
-
-#toc ul ul,
-.toc ul ul {
- margin: 0 0 0 2em;
-}
-
-#toc .toctoggle,
-.toc .toctoggle {
- font-size: 94%;
-}
-
-.error {
- color: red;
- font-size: larger;
-}
-
-/* preference page with js-genrated toc */
-#preftoc {
- float: left;
- margin: 1em 1em 1em 1em;
- width: 13em;
-}
-
-#preftoc li {
- border: 1px solid White;
-}
-
-#preftoc li.selected {
- background-color: #f9f9f9;
- border: 1px dashed #aaaaaa;
-}
-
-#preftoc a,
-#preftoc a:active {
- display: block;
- color: #005189;
-}
-
-.mw-prefs-buttons {
- clear: left;
- float: left;
- margin-top: 1em;
-}
-
-div.htmlform-tip {
- font-size: 94%;
- margin-top: 0.4em;
- color: #666;
-}
-
-fieldset.prefsection {
- margin-top: 1em;
-}
-
-fieldset.operaprefsection {
- margin-left: 15em;
-}
-
-/* emulate center */
-.center {
- width: 100%;
- text-align: center;
-}
-
-*.center * {
- margin-left: auto;
- margin-right: auto;
-}
-
-/* small for tables and similar */
-.small {
- font-size: 94%;
-}
-
-table.small {
- font-size: 100%;
-}
-
-/* use this instead of #toc for page content */
-.toccolours {
- border: 1px solid #aaaaaa;
- background-color: #f9f9f9;
- padding: 5px;
- font-size: 95%;
-}
-
-#siteNotice {
- border: 1px solid #aaaaaa;
- padding-left: 0.5em;
- padding-right: 0.5em;
-}
-
-.redirectText {
- font-size: 150%;
- margin: 5px;
-}
-
-.sharedUploadNotice {
- font-style: italic;
-}
-
-span.unpatrolled {
- font-weight: bold;
- color: red;
-}
-
-span.updatedmarker {
- color: black;
- background-color: #00FF00;
-}
-
-div.gallerybox {
- width: 150px;
-}
-
-span.comment {
- font-style: italic;
-}
-
-span.changedby {
- font-size: 95%;
-}
-
-.previewnote {
- text-align: center;
- color: #cc0000;
-}
-
-.editExternally {
- border-style: solid;
- border-width: 1px;
- border-color: gray;
- background: #ffffff;
- padding: 3px;
- margin-top: 0.5em;
- float: left;
- font-size: small;
- text-align: center;
-}
-
-.editExternallyHelp {
- font-style: italic;
- color: gray;
-}
-
-li span.deleted {
- text-decoration: line-through;
- color: #888;
- font-style: italic;
-}
-
-/* Classes for Exif data display */
-table.mw_metadata {
- margin-left: 0.5em;
-}
-
-table.mw_metadata caption {
- font-weight: bold;
-}
-
-table.mw_metadata th {
- font-weight: normal;
-}
-
-table.mw_metadata td {
- padding: 0.1em;
-}
-
-table.mw_metadata {
- border: none;
- border-collapse: collapse;
-}
-
-table.mw_metadata td,
-table.mw_metadata th {
- border: 1px solid #aaaaaa;
- padding-left: 4px;
- padding-right: 4px;
-}
-
-table.mw_metadata th {
- background-color: #f9f9f9;
-}
-
-table.mw_metadata td {
- background-color: #fcfcfc;
-}
-
-table.mw_metadata td.spacer {
- background: inherit;
- border-top: none;
- border-bottom: none;
-}
-
-table.collapsed tr.collapsable {
- display: none;
-}
-
-.visualClear {
- clear: both;
-}
-
-/* Allmessages table */
-#allmessagestable th {
- background-color: #b2b2ff;
-}
-
-#allmessagestable tr.orig {
- background-color: #ffe2e2;
-}
-
-#allmessagestable tr.new {
- background-color: #e2ffe2;
-}
-
-#allmessagestable tr.def {
- background-color: #f0f0ff;
-}
-
-#jump-to-nav {
- display: none;
-}
-
-div.multipageimagenavbox {
- border: solid 1px silver;
- padding: 4px;
- margin: 1em;
- background: #f0f0f0;
-}
-
-div.multipageimagenavbox div.thumb {
- border: none;
- margin-left: 2em;
- margin-right: 2em;
-}
-
-div.multipageimagenavbox hr {
- margin: 6px;
-}
-
-table.multipageimage td {
- text-align: center;
-}
-
-/*
- Table pager (e.g. Special:Imagelist)
- - remove underlines from the navigation link
- - collapse borders
- - set the borders to outsets (similar to Special:Allmessages)
- - remove line wrapping for all td and th, set background color
- - restore line wrapping for the last two table cells (description and size)
-*/
-.TablePager_nav a {
- text-decoration: none;
-}
-
-.TablePager {
- border-collapse: collapse;
-}
-
-.TablePager,
-.TablePager td,
-.TablePager th {
- border: 0.15em solid #777777;
- padding: 0 0.15em 0 0.15em;
-}
-
-.TablePager th {
- background-color: #eeeeff;
-}
-
-.TablePager td {
- background-color: #ffffff;
-}
-
-.TablePager tr:hover td {
- background-color: #eeeeff;
-}
-
-.templatesUsed {
- margin-top: 1em;
-}
-
-.MediaTransformError {
- border: thin solid #777;
- background-color: #ccc;
- padding: 0.1em;
-}
-
-.MediaTransformError td {
- text-align: center;
- vertical-align: middle;
- font-size: 90%;
-}
-
-form#specialpages {
- display: inline;
-}
-
-body {
- direction: ltr;
- unicode-bidi: embed;
- background-color: #ffffec;
-}
-
-body.ns-0 {
- background-color: white;
-}
-
-/** RTL specific CSS starts here **/
-
-/**
- * Lists:
- * The following lines don't have a visible effect on non-Gecko browsers
- * They fix a problem with Gecko browsers rendering lists to the right of
- * left-floated objects in an RTL layout.
- */
-/* @noflip */
-html > body.rtl div#article ul {
- display: table;
-}
-
-/* @noflip */
-html > body.rtl div#bodyContent ul#filetoc {
- display: block;
-}
-
-/* RTL specific CSS ends here **/
+++ /dev/null
-( function ( mw, $ ) {
-
-var ProtectionForm = window.ProtectionForm = {
- existingMatch: false,
-
- /**
- * Set up the protection chaining interface (i.e. "unlock move permissions" checkbox)
- * on the protection form
- *
- * @param opts Object : parameters with members:
- * tableId Identifier of the table containing UI bits
- * labelText Text to use for the checkbox label
- * numTypes The number of protection types
- * existingMatch True if all the existing expiry times match
- */
- init: function ( opts ) {
- var box, boxbody, row, cell, check, label;
-
- if ( !( document.createTextNode && document.getElementById && document.getElementsByTagName ) ) {
- return false;
- }
-
- box = document.getElementById( opts.tableId );
- if ( !box ) {
- return false;
- }
-
- boxbody = box.getElementsByTagName( 'tbody' )[0];
- row = document.createElement( 'tr' );
- boxbody.insertBefore( row, boxbody.firstChild.nextSibling );
-
- this.existingMatch = opts.existingMatch;
-
- cell = document.createElement( 'td' );
- row.appendChild( cell );
- // If there is only one protection type, there is nothing to chain
- if ( opts.numTypes > 1 ) {
- check = document.createElement( 'input' );
- check.id = 'mwProtectUnchained';
- check.type = 'checkbox';
- $( check ).click( function () {
- ProtectionForm.onChainClick();
- } );
-
- label = document.createElement( 'label' );
- label.htmlFor = 'mwProtectUnchained';
- label.appendChild( document.createTextNode( opts.labelText ) );
-
- cell.appendChild( check );
- cell.appendChild( document.createTextNode( ' ' ) );
- cell.appendChild( label );
-
- check.checked = !this.areAllTypesMatching();
- this.enableUnchainedInputs( check.checked );
- }
-
- $( '#mwProtect-reason' ).byteLimit( 180 );
-
- this.updateCascadeCheckbox();
-
- return true;
- },
-
- /**
- * Sets the disabled attribute on the cascade checkbox depending on the current selected levels
- */
- updateCascadeCheckbox: function () {
- var i, lists, items, selected;
-
- // For non-existent titles, there is no cascade option
- if ( !document.getElementById( 'mwProtect-cascade' ) ) {
- return;
- }
- lists = this.getLevelSelectors();
- for ( i = 0; i < lists.length; i++ ) {
- if ( lists[i].selectedIndex > -1 ) {
- items = lists[i].getElementsByTagName( 'option' );
- selected = items[ lists[i].selectedIndex ].value;
- if ( !this.isCascadeableLevel( selected ) ) {
- document.getElementById( 'mwProtect-cascade' ).checked = false;
- document.getElementById( 'mwProtect-cascade' ).disabled = true;
- return;
- }
- }
- }
- document.getElementById( 'mwProtect-cascade' ).disabled = false;
- },
-
- /**
- * Checks if a cerain protection level is cascadeable.
- * @param level {String}
- * @return {Boolean}
- */
- isCascadeableLevel: function ( level ) {
- var cascadeLevels, len, i;
-
- cascadeLevels = mw.config.get( 'wgCascadeableLevels' );
- // cascadeLevels isn't defined on all pages
- if ( cascadeLevels ) {
- for ( i = 0, len = cascadeLevels.length; i < len; i += 1 ) {
- if ( cascadeLevels[i] === level ) {
- return true;
- }
- }
- }
- return false;
- },
-
- /**
- * When protection levels are locked together, update the rest
- * when one action's level changes
- *
- * @param source Element Level selector that changed
- */
- updateLevels: function ( source ) {
- if ( !this.isUnchained() ) {
- this.setAllSelectors( source.selectedIndex );
- }
- this.updateCascadeCheckbox();
- },
-
- /**
- * When protection levels are locked together, update the
- * expiries when one changes
- *
- * @param source Element expiry input that changed
- */
-
- updateExpiry: function ( source ) {
- var expiry, listId, list;
-
- if ( !this.isUnchained() ) {
- expiry = source.value;
- this.forEachExpiryInput( function ( element ) {
- element.value = expiry;
- } );
- }
- listId = source.id.replace( /^mwProtect-(\w+)-expires$/, 'mwProtectExpirySelection-$1' );
- list = document.getElementById( listId );
- if ( list && list.value !== 'othertime' ) {
- if ( this.isUnchained() ) {
- list.value = 'othertime';
- } else {
- this.forEachExpirySelector( function ( element ) {
- element.value = 'othertime';
- } );
- }
- }
- },
-
- /**
- * When protection levels are locked together, update the
- * expiry lists when one changes and clear the custom inputs
- *
- * @param source Element expiry selector that changed
- */
- updateExpiryList: function ( source ) {
- var expiry;
- if ( !this.isUnchained() ) {
- expiry = source.value;
- this.forEachExpirySelector( function ( element ) {
- element.value = expiry;
- } );
- this.forEachExpiryInput( function ( element ) {
- element.value = '';
- } );
- }
- },
-
- /**
- * Update chain status and enable/disable various bits of the UI
- * when the user changes the "unlock move permissions" checkbox
- */
- onChainClick: function () {
- if ( this.isUnchained() ) {
- this.enableUnchainedInputs( true );
- } else {
- this.setAllSelectors( this.getMaxLevel() );
- this.enableUnchainedInputs( false );
- }
- this.updateCascadeCheckbox();
- },
-
- /**
- * Returns true if the named attribute in all objects in the given array are matching
- */
- matchAttribute: function ( objects, attrName ) {
- var i, element, value;
-
- // Check levels
- value = null;
- for ( i = 0; i < objects.length; i++ ) {
- element = objects[i];
- if ( value === null ) {
- value = element[attrName];
- } else {
- if ( value !== element[attrName] ) {
- return false;
- }
- }
- }
- return true;
- },
-
- /**
- * Are all actions protected at the same level, with the same expiry time?
- *
- * @return boolean
- */
- areAllTypesMatching: function () {
- return this.existingMatch
- && this.matchAttribute( this.getLevelSelectors(), 'selectedIndex' )
- && this.matchAttribute( this.getExpirySelectors(), 'selectedIndex' )
- && this.matchAttribute( this.getExpiryInputs(), 'value' );
- },
-
- /**
- * Is protection chaining off?
- *
- * @return bool
- */
- isUnchained: function () {
- var element = document.getElementById( 'mwProtectUnchained' );
- return element
- ? element.checked
- : true; // No control, so we need to let the user set both levels
- },
-
- /**
- * Find the highest protection level in any selector
- */
- getMaxLevel: function () {
- var maxIndex = -1;
- this.forEachLevelSelector( function ( element ) {
- if ( element.selectedIndex > maxIndex ) {
- maxIndex = element.selectedIndex;
- }
- } );
- return maxIndex;
- },
-
- /**
- * Protect all actions at the specified level
- *
- * @param index int Protection level
- */
- setAllSelectors: function ( index ) {
- this.forEachLevelSelector( function ( element ) {
- if ( element.selectedIndex !== index ) {
- element.selectedIndex = index;
- }
- } );
- },
-
- /**
- * Apply a callback to each protection selector
- *
- * @param func callable Callback function
- */
- forEachLevelSelector: function ( func ) {
- var i, selectors;
-
- selectors = this.getLevelSelectors();
- for ( i = 0; i < selectors.length; i++ ) {
- func( selectors[i] );
- }
- },
-
- /**
- * Get a list of all protection selectors on the page
- *
- * @return Array
- */
- getLevelSelectors: function () {
- var i, ours, all, element;
-
- all = document.getElementsByTagName( 'select' );
- ours = [];
- for ( i = 0; i < all.length; i++ ) {
- element = all[i];
- if ( element.id.match( /^mwProtect-level-/ ) ) {
- ours[ours.length] = element;
- }
- }
- return ours;
- },
-
- /**
- * Apply a callback to each expiry input
- *
- * @param func callable Callback function
- */
- forEachExpiryInput: function ( func ) {
- var i, inputs;
-
- inputs = this.getExpiryInputs();
- for ( i = 0; i < inputs.length; i++ ) {
- func( inputs[i] );
- }
- },
-
- /**
- * Get a list of all expiry inputs on the page
- *
- * @return Array
- */
- getExpiryInputs: function () {
- var i, all, element, ours;
-
- all = document.getElementsByTagName( 'input' );
- ours = [];
- for ( i = 0; i < all.length; i++ ) {
- element = all[i];
- if ( element.name.match( /^mwProtect-expiry-/ ) ) {
- ours[ours.length] = element;
- }
- }
- return ours;
- },
-
- /**
- * Apply a callback to each expiry selector list
- * @param func callable Callback function
- */
- forEachExpirySelector: function ( func ) {
- var i, inputs;
-
- inputs = this.getExpirySelectors();
- for ( i = 0; i < inputs.length; i++ ) {
- func( inputs[i] );
- }
- },
-
- /**
- * Get a list of all expiry selector lists on the page
- *
- * @return Array
- */
- getExpirySelectors: function () {
- var i, all, ours, element;
-
- all = document.getElementsByTagName( 'select' );
- ours = [];
- for ( i = 0; i < all.length; i++ ) {
- element = all[i];
- if ( element.id.match( /^mwProtectExpirySelection-/ ) ) {
- ours[ours.length] = element;
- }
- }
- return ours;
- },
-
- /**
- * Enable/disable protection selectors and expiry inputs
- *
- * @param val boolean Enable?
- */
- enableUnchainedInputs: function ( val ) {
- var first = true;
-
- this.forEachLevelSelector( function ( element ) {
- if ( first ) {
- first = false;
- } else {
- element.disabled = !val;
- }
- } );
- first = true;
- this.forEachExpiryInput( function ( element ) {
- if ( first ) {
- first = false;
- } else {
- element.disabled = !val;
- }
- } );
- first = true;
- this.forEachExpirySelector( function ( element ) {
- if ( first ) {
- first = false;
- } else {
- element.disabled = !val;
- }
- } );
- }
-};
-
-}( mediaWiki, jQuery ) );
+++ /dev/null
-/**
- * CSS in this file is used by *all* skins (that have any CSS at all). Be
- * careful what you put in here, since what looks good in one skin may not in
- * another, but don't ignore the poor pre-Monobook users either.
- */
-
-/* GENERAL CLASSES FOR DIRECTIONALITY SUPPORT */
-
-/**
- * These classes should be used for text depending on the content direction.
- * Content stuff like editsection, ul/ol and TOC depend on this.
- */
-.mw-content-ltr {
- /* @noflip */
- direction: ltr;
-}
-
-.mw-content-rtl {
- /* @noflip */
- direction: rtl;
-}
-
-/* Most input fields should be in site direction */
-.sitedir-ltr textarea,
-.sitedir-ltr input {
- /* @noflip */
- direction: ltr;
-}
-
-.sitedir-rtl textarea,
-.sitedir-rtl input {
- /* @noflip */
- direction: rtl;
-}
-
-/* User-Agent styles for new HTML5 elements */
-mark {
- background-color: yellow;
- color: black;
-}
-
-/* Helper for wbr element on IE 8+; in HTML5, but not supported by default as of IE 11. */
-/* Note canonical HTML5 styles recommend "content: \u200B", but this doesn't work as of IE 11. */
-wbr {
- display: inline-block;
-}
-
-/* Input types that should follow user direction, like buttons */
-/* TODO: What about buttons in wikipage content ? */
-input[type="submit"],
-input[type="button"],
-input[type="reset"],
-input[type="file"] {
- direction: ltr;
-}
-
-/* Override default values */
-textarea[dir="ltr"],
-input[dir="ltr"] {
- /* @noflip */
- direction: ltr;
-}
-
-textarea[dir="rtl"],
-input[dir="rtl"] {
- /* @noflip */
- direction: rtl;
-}
-
-/* Default style for semantic tags */
-abbr[title],
-.explain[title] {
- border-bottom: 1px dotted;
- cursor: help;
-}
-
-/* Colored watchlist and recent changes numbers */
-.mw-plusminus-pos {
- color: #006400; /* dark green */
-}
-
-.mw-plusminus-neg {
- color: #8b0000; /* dark red */
-}
-
-.mw-plusminus-null {
- color: #aaa; /* gray */
-}
-
-/**
- * Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
- * [[Special:Watchlist/edit]] and in category listings.
- */
-.allpagesredirect,
-.redirect-in-category,
-.watchlistredir {
- font-style: italic;
-}
-
-/* Comment and username portions of RC entries */
-span.comment {
- font-style: italic;
-}
-
-span.changedby {
- font-size: 95%;
-}
-
-/* Math */
-.texvc {
- direction: ltr;
- unicode-bidi: embed;
-}
-
-img.tex {
- vertical-align: middle;
-}
-
-span.texhtml {
- font-family: serif;
-}
-
-/**
- * Add a bit of margin space between the preview and the toolbar.
- * This replaces the ugly <p><br /></p> we used to insert into the page source
- */
-#wikiPreview.ontop {
- margin-bottom: 1em;
-}
-
-/* Stop floats from intruding into edit area in previews */
-#editform,
-#toolbar,
-#wpTextbox1 {
- clear: both;
-}
-
-#toolbar img {
- cursor: pointer;
-}
-
-/**
- * File description page
- */
-
-div.mw-filepage-resolutioninfo {
- font-size: smaller;
-}
-
-/**
- * File histories
- */
-h2#filehistory {
- clear: both;
-}
-
-table.filehistory th,
-table.filehistory td {
- vertical-align: top;
-}
-
-table.filehistory th {
- text-align: left;
-}
-
-table.filehistory td.mw-imagepage-filesize,
-table.filehistory th.mw-imagepage-filesize {
- white-space: nowrap;
-}
-
-table.filehistory td.filehistory-selected {
- font-weight: bold;
-}
-
-/**
- * Add a checkered background image on hover for file
- * description pages. (bug 26470)
- */
-.filehistory a img,
-#file img:hover {
- /* @embed */
- background: white url(images/Checker-16x16.png) repeat;
-}
-
-/**
- * rev_deleted stuff
- */
-li span.deleted,
-span.history-deleted {
- text-decoration: line-through;
- color: #888;
- font-style: italic;
-}
-
-/**
- * Patrol stuff
- */
-.not-patrolled {
- background-color: #ffa;
-}
-
-.unpatrolled {
- font-weight: bold;
- color: red;
-}
-
-div.patrollink {
- font-size: 75%;
- text-align: right;
-}
-
-/**
- * Forms
- */
-td.mw-label {
- text-align: right;
-}
-
-td.mw-input {
- text-align: left;
-}
-
-td.mw-submit {
- text-align: left;
-}
-
-td.mw-label {
- vertical-align: top;
-}
-
-.prefsection td.mw-label {
- width: 20%;
-}
-
-.prefsection table {
- width: 100%;
-}
-
-.prefsection table.mw-htmlform-matrix {
- width: auto;
-}
-
-.mw-icon-question {
- /* SVG support using a transparent gradient to guarantee cross-browser
- * compatibility (browsers able to understand gradient syntax support also SVG).
- * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
- background-image: url(images/question-small.png);
- /* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url(images/question.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(images/question.svg);
- background-repeat: no-repeat;
- background-size: 13px 13px;
- display: inline-block;
- height: 13px;
- width: 13px;
- margin-left: 4px;
-}
-
-.mw-icon-question:lang(ar),
-.mw-icon-question:lang(fa),
-.mw-icon-question:lang(ur) {
- -webkit-transform: scaleX(-1);
- -ms-transform: scaleX(-1);
- transform: scaleX(-1);
-}
-
-td.mw-submit {
- white-space: nowrap;
-}
-
-table.mw-htmlform-nolabel td.mw-label {
- width: 1px;
-}
-
-tr.mw-htmlform-vertical-label td.mw-label {
- text-align: left !important;
-}
-
-.mw-htmlform-invalid-input td.mw-input input {
- border-color: red;
-}
-
-.mw-htmlform-flatlist div.mw-htmlform-flatlist-item {
- display: inline;
- margin-right: 1em;
- white-space: nowrap;
-}
-
-.mw-htmlform-matrix td {
- padding-left: 0.5em;
- padding-right: 0.5em;
-}
-
-input#wpSummary {
- width: 80%;
- margin-bottom: 1em;
-}
-
-/**
- * Image captions.
- *
- * This is only meant to provide the most basic of styles, visual settings shouldn't be added here.
- */
-
-/* @noflip */
-.mw-content-ltr .thumbcaption {
- text-align: left;
-}
-
-/* @noflip */
-.mw-content-ltr .magnify {
- float: right;
-}
-
-/* @noflip */
-.mw-content-rtl .thumbcaption {
- text-align: right;
-}
-
-/* @noflip */
-.mw-content-rtl .magnify {
- float: left;
-}
-
-/**
- * Categories
- */
-#catlinks {
- /**
- * Overrides text justification (user preference)
- * See bug 31990
- */
- text-align: left;
-}
-
-.catlinks ul {
- display: inline;
- margin: 0;
- padding: 0;
- list-style: none;
- list-style-type: none;
- list-style-image: none;
- vertical-align: middle !ie;
-}
-
-.catlinks li {
- display: inline-block;
- line-height: 1.25em;
- border-left: 1px solid #AAA;
- margin: 0.125em 0;
- padding: 0 0.5em;
- zoom: 1;
- display: inline !ie;
-}
-
-.catlinks li:first-child {
- padding-left: 0.25em;
- border-left: none;
-}
-
-/* (bug 5346) make category redirects italic */
-.catlinks li a.mw-redirect {
- font-style: italic;
-}
-
-/**
- * Hidden categories
- */
-.mw-hidden-cats-hidden {
- display: none;
-}
-
-.catlinks-allhidden {
- display: none;
-}
-
-/**
- * Convenience links to edit block, delete and protect reasons
- * and upload licenses
- */
-p.mw-ipb-conveniencelinks,
-p.mw-protect-editreasons,
-p.mw-filedelete-editreasons,
-p.mw-delete-editreasons,
-p.mw-revdel-editreasons,
-p.mw-upload-editlicenses {
- font-size: 90%;
- text-align: right;
-}
-
-/* Page history styling */
-
-/* The auto-generated edit comments */
-.autocomment {
- color: gray;
-}
-
-#pagehistory .history-user {
- margin-left: 0.4em;
- margin-right: 0.2em;
-}
-
-#pagehistory span.minor {
- font-weight: bold;
-}
-
-#pagehistory li {
- border: 1px solid white;
-}
-
-#pagehistory li.selected {
- background-color: #f9f9f9;
- border: 1px dashed #aaa;
-}
-
-.mw-history-revisiondelete-button, #mw-fileduplicatesearch-icon {
- float: right;
-}
-
-/** Generic minor/bot/newpage styling (recent changes) */
-.newpage,
-.minoredit,
-.botedit {
- font-weight: bold;
-}
-
-#shared-image-dup,
-#shared-image-conflict {
- font-style: italic;
-}
-
-/**
- * Recreating deleted page warning
- * Reupload file warning
- * Page protection warning
- * incl. log entries for these warnings
- */
-div.mw-warning-with-logexcerpt {
- padding: 3px;
- margin-bottom: 3px;
- border: 2px solid #2F6FAB;
- clear: both;
-}
-
-div.mw-warning-with-logexcerpt ul li {
- font-size: 90%;
-}
-
-/* (show/hide) revision deletion links */
-span.mw-revdelundel-link,
-strong.mw-revdelundel-link {
- font-size: 90%;
-}
-
-span.mw-revdelundel-hidden,
-input.mw-revdelundel-hidden {
- visibility: hidden;
-}
-
-td.mw-revdel-checkbox,
-th.mw-revdel-checkbox {
- padding-right: 10px;
- text-align: center;
-}
-
-/* red links; see bug 36276 */
-a.new {
- color: #BA0000;
-}
-
-/* feed links */
-a.feedlink {
- /* SVG support using a transparent gradient to guarantee cross-browser
- * compatibility (browsers able to understand gradient syntax support also SVG).
- * http://pauginer.tumblr.com/post/36614680636/invisible-gradient-technique */
- background-image: url(images/feed-icon.png);
- /* @embed */
- background-image: -webkit-linear-gradient(transparent, transparent), url(images/feed-icon.svg);
- /* @embed */
- background-image: linear-gradient(transparent, transparent), url(images/feed-icon.svg);
- background-position: center left;
- background-repeat: no-repeat;
- background-size: 12px 12px;
- padding-left: 16px;
-}
-
-/* Plainlinks - this can be used to switch
- * off special external link styling */
-.plainlinks a {
- background: none !important;
- padding: 0 !important;
-}
-
-/* External URLs should always be treated as LTR (bug 4330) */
-/* @noflip */ .rtl a.external.free,
-.rtl a.external.autonumber {
- direction: ltr;
- unicode-bidi: embed;
-}
-
-/**
- * wikitable class for skinning normal tables
- * keep in sync with commonPrint.css
- */
-table.wikitable {
- margin: 1em 0;
- background-color: #f9f9f9;
- border: 1px #aaa solid;
- border-collapse: collapse;
- color: black;
-}
-
-table.wikitable > tr > th,
-table.wikitable > tr > td,
-table.wikitable > * > tr > th,
-table.wikitable > * > tr > td {
- border: 1px #aaa solid;
- padding: 0.2em;
-}
-
-table.wikitable > tr > th,
-table.wikitable > * > tr > th {
- background-color: #f2f2f2;
- text-align: center;
-}
-
-table.wikitable > caption {
- font-weight: bold;
-}
-
-/**
- * Hide collapsable rows in a collapsed table.
- *
- * Used by ImagePage and the mediawiki.action.view.metadata module.
- */
-table.collapsed tr.collapsable {
- display: none;
-}
-
-/* success and error messages */
-.error,
-.warning,
-.success {
- font-size: larger;
-}
-
-.error {
- color: #cc0000;
-}
-
-.warning {
- color: #705000;
-}
-
-.success {
- color: #009000;
-}
-
-.errorbox,
-.warningbox,
-.successbox {
- border: 1px solid;
- padding: .5em 1em;
- margin-bottom: 1em;
- display: -moz-inline-block;
- display: inline-block;
- zoom: 1;
- *display: inline;
-}
-
-.errorbox h2,
-.warningbox h2,
-.successbox h2 {
- font-size: 1em;
- color: inherit;
- font-weight: bold;
- display: inline;
- margin: 0 .5em 0 0;
- border: none;
-}
-
-.errorbox {
- color: #cc0000;
- border-color: #fac5c5;
- background-color: #fae3e3;
-}
-
-.warningbox {
- color: #705000;
- border-color: #fde29b;
- background-color: #fdf1d1;
-}
-
-.successbox {
- color: #009000;
- border-color: #b7fdb5;
- background-color: #e1fddf;
-}
-
-/* general info/warning box for SP */
-.mw-infobox {
- border: 2px solid #ff7f00;
- margin: 0.5em;
- clear: left;
- overflow: hidden;
-}
-
-.mw-infobox-left {
- margin: 7px;
- float: left;
- width: 35px;
-}
-
-.mw-infobox-right {
- margin: 0.5em 0.5em 0.5em 49px;
-}
-
-/* Note on preview page */
-.previewnote {
- color: #c00;
- margin-bottom: 1em;
-}
-
-.previewnote p {
- text-indent: 3em;
- margin: 0.8em 0;
-}
-
-.visualClear {
- clear: both;
-}
-
-/**
- * Data table style
- *
- * Transparent table with suddle borders
- * and blue row-highlighting.
- */
-.mw-datatable {
- border-collapse: collapse;
-}
-
-.mw-datatable,
-.mw-datatable td,
-.mw-datatable th {
- border: 1px solid #aaaaaa;
- padding: 0 0.15em 0 0.15em;
-}
-
-.mw-datatable th {
- background-color: #ddddff;
-}
-
-.mw-datatable td {
- background-color: #ffffff;
-}
-
-.mw-datatable tr:hover td {
- background-color: #eeeeff;
-}
-
-/**
- * TablePager tables generated by the TablePager PHP class
- * in MediaWiki (e.g. Special:ListFiles).
- */
-.TablePager {
- min-width: 80%;
-}
-
-.TablePager_nav {
- margin: 0 auto;
-}
-
-.TablePager_nav td {
- padding: 3px;
- text-align: center;
-}
-
-.TablePager_nav a {
- text-decoration: none;
-}
-
-/* filetoc */
-ul#filetoc {
- text-align: center;
- border: 1px solid #aaaaaa;
- background-color: #f9f9f9;
- padding: 5px;
- font-size: 95%;
- margin-bottom: 0.5em;
- margin-left: 0;
- margin-right: 0;
-}
-
-#filetoc li {
- display: inline;
- list-style-type: none;
- padding-right: 2em;
-}
-
-/* Classes for Exif data display */
-table.mw_metadata {
- font-size: 0.8em;
- margin-left: 0.5em;
- margin-bottom: 0.5em;
- width: 400px;
-}
-
-table.mw_metadata caption {
- font-weight: bold;
-}
-
-table.mw_metadata th {
- font-weight: normal;
-}
-
-table.mw_metadata td {
- padding: 0.1em;
-}
-
-table.mw_metadata {
- border: none;
- border-collapse: collapse;
-}
-
-table.mw_metadata td,
-table.mw_metadata th {
- text-align: center;
- border: 1px solid #aaaaaa;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-table.mw_metadata th {
- background-color: #f9f9f9;
-}
-
-table.mw_metadata td {
- background-color: #fcfcfc;
-}
-
-table.mw_metadata ul.metadata-langlist {
- list-style-type: none;
- list-style-image: none;
- padding-right: 5px;
- padding-left: 5px;
- margin: 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-.mw-content-ltr ul,
-.mw-content-rtl .mw-content-ltr ul {
- /* @noflip */
- margin: 0.3em 0 0 1.6em;
- padding: 0;
-}
-
-.mw-content-rtl ul,
-.mw-content-ltr .mw-content-rtl ul {
- /* @noflip */
- margin: 0.3em 1.6em 0 0;
- padding: 0;
-}
-
-.mw-content-ltr ol,
-.mw-content-rtl .mw-content-ltr ol {
- /* @noflip */
- margin: 0.3em 0 0 3.2em;
- padding: 0;
-}
-
-.mw-content-rtl ol,
-.mw-content-ltr .mw-content-rtl ol {
- /* @noflip */
- margin: 0.3em 3.2em 0 0;
- padding: 0;
-}
-
-/* @noflip */
-.mw-content-ltr dd,
-.mw-content-rtl .mw-content-ltr dd {
- margin-left: 1.6em;
- margin-right: 0;
-}
-
-/* @noflip */
-.mw-content-rtl dd,
-.mw-content-ltr .mw-content-rtl dd {
- margin-right: 1.6em;
- margin-left: 0;
-}
-
-/* Galleries */
-/* These display attributes look nonsensical, but are needed to support IE and FF2 */
-/* Don't forget to update commonPrint.css */
-li.gallerybox {
- vertical-align: top;
- display: -moz-inline-box;
- display: inline-block;
-}
-
-ul.gallery,
-li.gallerybox {
- zoom: 1;
- *display: inline;
-}
-
-ul.gallery {
- margin: 2px;
- padding: 2px;
- display: block;
-}
-
-li.gallerycaption {
- font-weight: bold;
- text-align: center;
- display: block;
- word-wrap: break-word;
-}
-
-li.gallerybox div.thumb {
- text-align: center;
- border: 1px solid #ccc;
- background-color: #f9f9f9;
- margin: 2px;
-}
-
-li.gallerybox div.thumb img {
- display: block;
- margin: 0 auto;
-}
-
-div.gallerytext {
- overflow: hidden;
- font-size: 94%;
- padding: 2px 4px;
- word-wrap: break-word;
-}
-
-/* new gallery stuff */
-ul.mw-gallery-nolines li.gallerybox div.thumb {
- background-color: transparent;
- border: none;
-}
-
-ul.mw-gallery-nolines li.gallerybox div.gallerytext {
- text-align: center;
-}
-
-/* height constrained gallery */
-
-ul.mw-gallery-packed li.gallerybox div.thumb,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb {
- background-color: transparent;
- border: none;
-}
-
-ul.mw-gallery-packed li.gallerybox div.thumb img,
-ul.mw-gallery-packed-overlay li.gallerybox div.thumb img,
-ul.mw-gallery-packed-hover li.gallerybox div.thumb img {
- margin: 0 auto;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox,
-ul.mw-gallery-packed-overlay li.gallerybox {
- position: relative;
-}
-
-ul.mw-gallery-packed-hover div.gallerytextwrapper {
- overflow: hidden;
- height: 0;
-}
-
-ul.mw-gallery-packed-hover li.gallerybox:hover div.gallerytextwrapper,
-ul.mw-gallery-packed-overlay li.gallerybox div.gallerytextwrapper,
-ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapper {
- position: absolute;
- background: white;
- background: rgba(255, 255, 255, 0.8);
- padding: 5px 10px;
- bottom: 0;
- left: 0; /* Needed for IE */
- height: auto;
- font-weight: bold;
- margin: 2px; /* correspond to style on div.thumb */
-}
-
-ul.mw-gallery-packed-hover,
-ul.mw-gallery-packed-overlay,
-ul.mw-gallery-packed {
- text-align: center;
-}
-
-.mw-ajax-loader {
- /* @embed */
- background-image: url(images/ajax-loader.gif);
- background-position: center center;
- background-repeat: no-repeat;
- padding: 16px;
- position: relative;
- top: -16px;
-}
-
-.mw-small-spinner {
- padding: 10px !important;
- margin-right: 0.6em;
- /* @embed */
- background-image: url(images/spinner.gif);
- background-position: center center;
- background-repeat: no-repeat;
-}
-
-/* Language specific height correction for titles. Ref Bug 29405 and Bug 30809 */
-/* Languages like hi or ml require slightly more vertical space to show diacritics properly */
-h1:lang(anp),
-h1:lang(as),
-h1:lang(bh), /* Macrolanguage, used on bh.wikipedia.org, should be removed one day */
-h1:lang(bho),
-h1:lang(bn),
-h1:lang(gu),
-h1:lang(hi),
-h1:lang(kn),
-h1:lang(ks),
-h1:lang(ml),
-h1:lang(mr),
-h1:lang(my),
-h1:lang(mai),
-h1:lang(ne),
-h1:lang(new),
-h1:lang(or),
-h1:lang(pa),
-h1:lang(pi),
-h1:lang(sa),
-h1:lang(ta),
-h1:lang(te) {
- line-height: 1.6em !important;
-}
-
-h2:lang(anp), h3:lang(anp), h4:lang(anp), h5:lang(anp), h6:lang(anp),
-h2:lang(as), h3:lang(as), h4:lang(as), h5:lang(as), h6:lang(as),
-h2:lang(bho), h3:lang(bho), h4:lang(bho), h5:lang(bho), h6:lang(bho),
-h2:lang(bh), h3:lang(bh), h4:lang(bh), h5:lang(bh), h6:lang(bh),
-h2:lang(bn), h3:lang(bn), h4:lang(bn), h5:lang(bn), h6:lang(bn),
-h2:lang(gu), h3:lang(gu), h4:lang(gu), h5:lang(gu), h6:lang(gu),
-h2:lang(hi), h3:lang(hi), h4:lang(hi), h5:lang(hi), h6:lang(hi),
-h2:lang(kn), h3:lang(kn), h4:lang(kn), h5:lang(kn), h6:lang(kn),
-h2:lang(ks), h3:lang(ks), h4:lang(ks), h5:lang(ks), h6:lang(ks),
-h2:lang(ml), h3:lang(ml), h4:lang(ml), h5:lang(ml), h6:lang(ml),
-h2:lang(mr), h3:lang(mr), h4:lang(mr), h5:lang(mr), h6:lang(mr),
-h2:lang(my), h3:lang(my), h4:lang(my), h5:lang(my), h6:lang(my),
-h2:lang(mai), h3:lang(mai), h4:lang(mai), h5:lang(mai), h6:lang(mai),
-h2:lang(ne), h3:lang(ne), h4:lang(ne), h5:lang(ne), h6:lang(ne),
-h2:lang(new), h3:lang(new), h4:lang(new), h5:lang(new), h6:lang(new),
-h2:lang(or), h3:lang(or), h4:lang(or), h5:lang(or), h6:lang(or),
-h2:lang(pa), h3:lang(pa), h4:lang(pa), h5:lang(pa), h6:lang(pa),
-h2:lang(pi), h3:lang(pi), h4:lang(pi), h5:lang(pi), h6:lang(pi),
-h2:lang(sa), h3:lang(sa), h4:lang(sa), h5:lang(sa), h6:lang(sa),
-h2:lang(ta), h3:lang(ta), h4:lang(ta), h5:lang(ta), h6:lang(ta),
-h2:lang(te), h3:lang(te), h4:lang(te), h5:lang(te), h6:lang(te) {
- line-height: 1.2em;
-}
-
-/* Localised ordered list numbering for some languages */
-ol:lang(bcc) li,
-ol:lang(bqi) li,
-ol:lang(fa) li,
-ol:lang(glk) li,
-ol:lang(kk-arab) li,
-ol:lang(mzn) li {
- list-style-type: -moz-persian;
- list-style-type: persian;
-}
-
-ol:lang(ckb) li {
- list-style-type: -moz-arabic-indic;
- list-style-type: arabic-indic;
-}
-
-ol:lang(hi) li,
-ol:lang(mr) li {
- list-style-type: -moz-devanagari;
- list-style-type: devanagari;
-}
-
-ol:lang(as) li,
-ol:lang(bn) li {
- list-style-type: -moz-bengali;
- list-style-type: bengali;
-}
-
-ol:lang(or) li {
- list-style-type: -moz-oriya;
- list-style-type: oriya;
-}
-
-#toc ul, .toc ul {
- margin: .3em 0;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-/* @noflip */ .mw-content-ltr .toc ul,
-.mw-content-ltr #toc ul,
-.mw-content-rtl .mw-content-ltr .toc ul,
-.mw-content-rtl .mw-content-ltr #toc ul {
- text-align: left;
-}
-
-/* @noflip */ .mw-content-rtl .toc ul,
-.mw-content-rtl #toc ul,
-.mw-content-ltr .mw-content-rtl .toc ul,
-.mw-content-ltr .mw-content-rtl #toc ul {
- text-align: right;
-}
-
-/* @noflip */ .mw-content-ltr .toc ul ul,
-.mw-content-ltr #toc ul ul,
-.mw-content-rtl .mw-content-ltr .toc ul ul,
-.mw-content-rtl .mw-content-ltr #toc ul ul {
- margin: 0 0 0 2em;
-}
-
-/* @noflip */ .mw-content-rtl .toc ul ul,
-.mw-content-rtl #toc ul ul,
-.mw-content-ltr .mw-content-rtl .toc ul ul,
-.mw-content-ltr .mw-content-rtl #toc ul ul {
- margin: 0 2em 0 0;
-}
-
-#toc #toctitle,
-.toc #toctitle,
-#toc .toctitle,
-.toc .toctitle {
- direction: ltr;
-}
-
-/* tooltip styles */
-.mw-help-field-hint {
- display: none;
- margin-left: 2px;
- margin-bottom: -8px;
- padding: 0 0 0 15px;
- /* @embed */
- background-image: url(images/help-question.gif);
- background-position: left center;
- background-repeat: no-repeat;
- cursor: pointer;
- font-size: .8em;
- text-decoration: underline;
- color: #0645ad;
-}
-
-.mw-help-field-hint:hover {
- /* @embed */
- background-image: url(images/help-question-hover.gif);
-}
-
-.mw-help-field-data {
- display: block;
- background-color: #d6f3ff;
- padding: 5px 8px 4px 8px;
- border: 1px solid #5dc9f4;
- margin-left: 20px;
-}
-
-#mw-clearyourcache,
-#mw-sitecsspreview,
-#mw-sitejspreview,
-#mw-usercsspreview,
-#mw-userjspreview {
- direction: ltr;
- unicode-bidi: embed;
-}
-
-/* Correct user & content directionality when viewing a diff */
-.diff-currentversion-title,
-.diff {
- direction: ltr;
- unicode-bidi: embed;
-}
-
-/* @noflip */ .diff-contentalign-right td {
- direction: rtl;
- unicode-bidi: embed;
-}
-
-/* @noflip */ .diff-contentalign-left td {
- direction: ltr;
- unicode-bidi: embed;
-}
-
-.diff-multi,
-.diff-otitle,
-.diff-ntitle,
-.diff-lineno {
- direction: ltr !important;
- unicode-bidi: embed;
-}
-
-#mw-revision-info,
-#mw-revision-info-current,
-#mw-revision-nav {
- direction: ltr;
- display: inline;
-}
-
-/* Images */
-
-/* @noflip */ div.tright,
-div.floatright,
-table.floatright {
- clear: right;
- float: right;
-}
-
-/* @noflip */ div.tleft,
-div.floatleft,
-table.floatleft {
- float: left;
- clear: left;
-}
-
-div.floatright,
-table.floatright,
-div.floatleft,
-table.floatleft {
- position: relative;
-}
-
-/* bug 12205 */
-#mw-credits a {
- unicode-bidi: embed;
-}
-
-/* Accessibility */
-.mw-jump,
-#jump-to-nav {
- overflow: hidden;
- height: 0;
- zoom: 1; /* http://webaim.org/techniques/skipnav/#iequirk */
-}
-
-/* Print footer should be hidden by default in screen. */
-.printfooter {
- display: none;
-}
-
-/* For developers */
-.xdebug-error {
- position: absolute;
- z-index: 99;
-}
-
-.mw-editsection,
-.toctoggle,
-#jump-to-nav {
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-/* Display editsection links smaller and next to headings */
-.mw-editsection,
-.mw-editsection-like {
- font-size: small;
- font-weight: normal;
- margin-left: 1em;
- vertical-align: baseline;
- /* Reset line-height; headings tend to have it set to larger values */
- line-height: 1em;
- /* As .mw-editsection is a <span> (inline element), it is treated as part */
- /* of the heading content when selecting text by multiple clicks and thus */
- /* selected together with heading content, despite the user-select: none; */
- /* rule set above. This enforces non-selection without changing the look. */
- display: inline-block;
-}
-
-/* Correct directionality when page dir is different from site/user dir */
-/* @noflip */
-.mw-content-ltr .mw-editsection,
-.mw-content-rtl .mw-content-ltr .mw-editsection {
- margin-left: 1em;
-}
-
-/* @noflip */
-.mw-content-rtl .mw-editsection,
-.mw-content-ltr .mw-content-rtl .mw-editsection {
- margin-right: 1em;
-}
-
-/* Prevent citations and subscripts from interfering with the line-height */
-sup,
-sub {
- line-height: 1;
-}
+++ /dev/null
-/*jshint camelcase:false */
-( function ( mw, $ ) {
-var licenseSelectorCheck, wgUploadWarningObj, wgUploadLicenseObj, fillDestFilename,
- ajaxUploadDestCheck = mw.config.get( 'wgAjaxUploadDestCheck' ),
- fileExtensions = mw.config.get( 'wgFileExtensions' ),
- $spinnerDestCheck, $spinnerLicense;
-
-licenseSelectorCheck = window.licenseSelectorCheck = function () {
- var selector = document.getElementById( 'wpLicense' ),
- selection = selector.options[selector.selectedIndex].value;
- if ( selector.selectedIndex > 0 ) {
- if ( !selection ) {
- // Option disabled, but browser is broken and doesn't respect this
- selector.selectedIndex = 0;
- }
- }
- // We might show a preview
- wgUploadLicenseObj.fetchPreview( selection );
-};
-
-function uploadSetup() {
- // Disable URL box if the URL copy upload source type is not selected
- var ein,
- selector, ua, isMacIe, i,
- optionsTable, row, td,
- wpLicense, wpLicenseRow, wpLicenseTbody,
- uploadSourceIds, len, onchange,
- e = document.getElementById( 'wpSourceTypeurl' );
- if ( e ) {
- if ( !e.checked ) {
- ein = document.getElementById( 'wpUploadFileURL' );
- if ( ein ) {
- ein.disabled = true;
- }
- }
- }
-
- // For MSIE/Mac: non-breaking spaces cause the <option> not to render.
- // But for some reason, setting the text to itself works
- selector = document.getElementById( 'wpLicense' );
- if ( selector ) {
- ua = navigator.userAgent;
- isMacIe = ua.indexOf( 'MSIE' ) !== -1 && ua.indexOf( 'Mac' ) !== -1;
- if ( isMacIe ) {
- for ( i = 0; i < selector.options.length; i++ ) {
- selector.options[i].text = selector.options[i].text;
- }
- }
- }
-
- // AJAX wpDestFile warnings
- if ( ajaxUploadDestCheck ) {
- // Insert an event handler that fetches upload warnings when wpDestFile
- // has been changed
- document.getElementById( 'wpDestFile' ).onchange = function () {
- wgUploadWarningObj.checkNow( this.value );
- };
- // Insert a row where the warnings will be displayed just below the
- // wpDestFile row
- optionsTable = document.getElementById( 'mw-htmlform-description' ).tBodies[0];
- row = optionsTable.insertRow( 1 );
- td = document.createElement( 'td' );
- td.id = 'wpDestFile-warning';
- td.colSpan = 2;
-
- row.appendChild( td );
- }
-
- wpLicense = document.getElementById( 'wpLicense' );
- if ( mw.config.get( 'wgAjaxLicensePreview' ) && wpLicense ) {
- // License selector check
- wpLicense.onchange = licenseSelectorCheck;
-
- // License selector table row
- wpLicenseRow = wpLicense.parentNode.parentNode;
- wpLicenseTbody = wpLicenseRow.parentNode;
-
- row = document.createElement( 'tr' );
- td = document.createElement( 'td' );
- row.appendChild( td );
- td = document.createElement( 'td' );
- td.id = 'mw-license-preview';
- row.appendChild( td );
-
- wpLicenseTbody.insertBefore( row, wpLicenseRow.nextSibling );
- }
-
- // fillDestFile setup
- uploadSourceIds = mw.config.get( 'wgUploadSourceIds' );
- len = uploadSourceIds.length;
- onchange = function () {
- fillDestFilename( this.id );
- };
- for ( i = 0; i < len; i += 1 ) {
- document.getElementById( uploadSourceIds[i] ).onchange = onchange;
- }
-}
-
-wgUploadWarningObj = window.wgUploadWarningObj = {
- responseCache: { '': ' ' },
- nameToCheck: '',
- typing: false,
- delay: 500, // ms
- timeoutID: false,
-
- keypress: function () {
- var cached, destFile, warningElt;
-
- if ( !ajaxUploadDestCheck ) {
- return;
- }
-
- // Find file to upload
- destFile = document.getElementById( 'wpDestFile' );
- warningElt = document.getElementById( 'wpDestFile-warning' );
- if ( !destFile || !warningElt ) {
- return;
- }
-
- this.nameToCheck = destFile.value;
-
- // Clear timer
- if ( this.timeoutID ) {
- clearTimeout( this.timeoutID );
- }
- // Check response cache
- for ( cached in this.responseCache ) {
- if ( this.nameToCheck === cached ) {
- this.setWarning(this.responseCache[this.nameToCheck]);
- return;
- }
- }
-
- this.timeoutID = setTimeout( function () {
- wgUploadWarningObj.timeout();
- }, this.delay );
- },
-
- checkNow: function ( fname ) {
- if ( !ajaxUploadDestCheck ) {
- return;
- }
- if ( this.timeoutID ) {
- clearTimeout( this.timeoutID );
- }
- this.nameToCheck = fname;
- this.timeout();
- },
-
- timeout: function () {
- if ( !ajaxUploadDestCheck || this.nameToCheck === '' ) {
- return;
- }
- $spinnerDestCheck = $.createSpinner().insertAfter( '#wpDestFile' );
-
- var uploadWarningObj = this;
- ( new mw.Api() ).get( {
- action: 'query',
- titles: ( new mw.Title( this.nameToCheck, mw.config.get( 'wgNamespaceIds' ).file ) ).getPrefixedText(),
- prop: 'imageinfo',
- iiprop: 'uploadwarning',
- indexpageids: ''
- } ).done( function ( result ) {
- var resultOut = '';
- if ( result.query ) {
- resultOut = result.query.pages[result.query.pageids[0]].imageinfo[0];
- }
- uploadWarningObj.processResult( resultOut, uploadWarningObj.nameToCheck );
- } );
- },
-
- processResult: function ( result, fileName ) {
- $spinnerDestCheck.remove();
- $spinnerDestCheck = undefined;
- this.setWarning( result.html );
- this.responseCache[fileName] = result.html;
- },
-
- setWarning: function ( warning ) {
- var warningElt = document.getElementById( 'wpDestFile-warning' ),
- ackElt = document.getElementsByName( 'wpDestFileWarningAck' );
-
- this.setInnerHTML( warningElt, warning );
-
- // Set a value in the form indicating that the warning is acknowledged and
- // doesn't need to be redisplayed post-upload
- if ( !warning ) {
- ackElt[0].value = '';
- } else {
- ackElt[0].value = '1';
- }
-
- },
- setInnerHTML: function ( element, text ) {
- // Check for no change to avoid flicker in IE 7
- if ( element.innerHTML !== text ) {
- element.innerHTML = text;
- }
- }
-};
-
-fillDestFilename = window.fillDestFilename = function ( id ) {
- var e, path, slash, backslash, fname,
- found, ext, i,
- destFile;
- if ( !mw.config.get( 'wgUploadAutoFill' ) ) {
- return;
- }
- if ( !document.getElementById ) {
- return;
- }
- // Remove any previously flagged errors
- e = document.getElementById( 'mw-upload-permitted' );
- if ( e ) {
- e.className = '';
- }
-
- e = document.getElementById( 'mw-upload-prohibited' );
- if ( e ) {
- e.className = '';
- }
-
- path = document.getElementById( id ).value;
- // Find trailing part
- slash = path.lastIndexOf( '/' );
- backslash = path.lastIndexOf( '\\' );
- if ( slash === -1 && backslash === -1 ) {
- fname = path;
- } else if ( slash > backslash ) {
- fname = path.substring( slash + 1, 10000 );
- } else {
- fname = path.substring( backslash + 1, 10000 );
- }
-
- // Clear the filename if it does not have a valid extension.
- // URLs are less likely to have a useful extension, so don't include them in the
- // extension check.
- if ( mw.config.get( 'wgStrictFileExtensions' ) && fileExtensions && id !== 'wpUploadFileURL' ) {
- found = false;
- if ( fname.lastIndexOf( '.' ) !== -1 ) {
- ext = fname.substr( fname.lastIndexOf( '.' ) + 1 );
- for ( i = 0; i < fileExtensions.length; i += 1 ) {
- if ( fileExtensions[i].toLowerCase() === ext.toLowerCase() ) {
- found = true;
- break;
- }
- }
- }
- if ( !found ) {
- // Not a valid extension
- // Clear the upload and set mw-upload-permitted to error
- document.getElementById( id ).value = '';
- e = document.getElementById( 'mw-upload-permitted' );
- if ( e ) {
- e.className = 'error';
- }
-
- e = document.getElementById( 'mw-upload-prohibited' );
- if ( e ) {
- e.className = 'error';
- }
-
- // Clear wpDestFile as well
- e = document.getElementById( 'wpDestFile' );
- if ( e ) {
- e.value = '';
- }
-
- return false;
- }
- }
-
- // Replace spaces by underscores
- fname = fname.replace( / /g, '_' );
- // Capitalise first letter if needed
- if ( mw.config.get( 'wgCapitalizeUploads' ) ) {
- fname = fname.charAt( 0 ).toUpperCase().concat( fname.substring( 1, 10000 ) );
- }
-
- // Output result
- destFile = document.getElementById( 'wpDestFile' );
- if ( destFile ) {
- // Call decodeURIComponent function to remove possible URL-encoded characters
- // from the file name (bug 30390). Especially likely with upload-form-url.
- // decodeURIComponent can throw an exception in input is invalid utf-8
- try {
- destFile.value = decodeURIComponent( fname );
- } catch ( err ) {
- destFile.value = fname;
- }
- wgUploadWarningObj.checkNow( fname );
- }
-};
-
-window.toggleFilenameFiller = function () {
- if ( !document.getElementById ) {
- return;
- }
- var destName = document.getElementById( 'wpDestFile' ).value;
- mw.config.set( 'wgUploadAutoFill', !destName );
-};
-
-wgUploadLicenseObj = window.wgUploadLicenseObj = {
-
- responseCache: { '': '' },
-
- fetchPreview: function ( license ) {
- var cached, title;
- if ( !mw.config.get( 'wgAjaxLicensePreview' ) ) {
- return;
- }
- for ( cached in this.responseCache ) {
- if ( cached === license ) {
- this.showPreview( this.responseCache[license] );
- return;
- }
- }
-
- $spinnerLicense = $.createSpinner().insertAfter( '#wpLicense' );
-
- title = document.getElementById( 'wpDestFile' ).value;
- if ( !title ) {
- title = 'File:Sample.jpg';
- }
-
- ( new mw.Api() ).get( {
- action: 'parse',
- text: '{{' + license + '}}',
- title: title,
- prop: 'text',
- pst: ''
- } ).done( function ( result ) {
- wgUploadLicenseObj.processResult( result, license );
- } );
- },
-
- processResult: function ( result, license ) {
- $spinnerLicense.remove();
- $spinnerLicense = undefined;
- this.responseCache[license] = result.parse.text['*'];
- this.showPreview( this.responseCache[license] );
- },
-
- showPreview: function ( preview ) {
- var previewPanel = document.getElementById( 'mw-license-preview' );
- if ( previewPanel.innerHTML !== preview ) {
- previewPanel.innerHTML = preview;
- }
- }
-
-};
-
-$( uploadSetup );
-
-}( mediaWiki, jQuery ) );
+++ /dev/null
-/**
- * MediaWiki legacy wikibits
- */
-( function ( mw, $ ) {
- var msg,
- win = window,
- ua = navigator.userAgent.toLowerCase(),
- onloadFuncts = [];
-
-/**
- * User-agent sniffing.
- *
- * @deprecated since 1.17 Use jquery.client instead
- */
-
-msg = 'Use feature detection or module jquery.client instead.';
-
-mw.log.deprecate( win, 'clientPC', ua, msg );
-
-// Ignored dummy values
-mw.log.deprecate( win, 'is_gecko', false, msg );
-mw.log.deprecate( win, 'is_chrome_mac', false, msg );
-mw.log.deprecate( win, 'is_chrome', false, msg );
-mw.log.deprecate( win, 'webkit_version', false, msg );
-mw.log.deprecate( win, 'is_safari_win', false, msg );
-mw.log.deprecate( win, 'is_safari', false, msg );
-mw.log.deprecate( win, 'webkit_match', false, msg );
-mw.log.deprecate( win, 'is_ff2', false, msg );
-mw.log.deprecate( win, 'ff2_bugs', false, msg );
-mw.log.deprecate( win, 'is_ff2_win', false, msg );
-mw.log.deprecate( win, 'is_ff2_x11', false, msg );
-mw.log.deprecate( win, 'opera95_bugs', false, msg );
-mw.log.deprecate( win, 'opera7_bugs', false, msg );
-mw.log.deprecate( win, 'opera6_bugs', false, msg );
-mw.log.deprecate( win, 'is_opera_95', false, msg );
-mw.log.deprecate( win, 'is_opera_preseven', false, msg );
-mw.log.deprecate( win, 'is_opera', false, msg );
-mw.log.deprecate( win, 'ie6_bugs', false, msg );
-
-/**
- * DOM utilities for handling of events, text nodes and selecting elements
- *
- * @deprecated since 1.17 Use jQuery instead
- */
-msg = 'Use jQuery instead.';
-
-// Ignored dummy values
-mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
-mw.log.deprecate( win, 'onloadFuncts', [], msg );
-mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
-mw.log.deprecate( win, 'changeText', $.noop, msg );
-mw.log.deprecate( win, 'killEvt', $.noop, msg );
-mw.log.deprecate( win, 'addHandler', $.noop, msg );
-mw.log.deprecate( win, 'hookEvent', $.noop, msg );
-mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
-mw.log.deprecate( win, 'removeHandler', $.noop, msg );
-mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
-mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
-
-// Run a function after the window onload event is fired
-mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
- if ( onloadFuncts ) {
- onloadFuncts.push(hookFunct);
- } else {
- // If func queue is gone the event has happened already,
- // run immediately instead of queueing.
- hookFunct();
- }
-}, msg );
-
-$( win ).on( 'load', function () {
- var i, functs;
-
- // Don't run twice
- if ( !onloadFuncts ) {
- return;
- }
-
- // Deference and clear onloadFuncts before running any
- // hooks to make sure we don't miss any addOnloadHook
- // calls.
- functs = onloadFuncts.slice();
- onloadFuncts = undefined;
-
- // Execute the queued functions
- for ( i = 0; i < functs.length; i++ ) {
- functs[i]();
- }
-} );
-
-/**
- * Toggle checkboxes with shift selection
- *
- * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
- */
-msg = 'Use jquery.checkboxShiftClick instead.';
-mw.log.deprecate( win, 'checkboxes', [], msg );
-mw.log.deprecate( win, 'lastCheckbox', null, msg );
-mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
-mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
-mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
-
-/**
- * Add a button to the default editor toolbar
- *
- * @deprecated since 1.17 Use mw.toolbar instead
- */
-mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
-mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
-
-/**
- * Spinner creation, injection and removal
- *
- * @deprecated since 1.18 Use jquery.spinner instead
- */
-mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
-mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
-
-/**
- * Escape utilities
- *
- * @deprecated since 1.18 Use mw.html instead
- */
-mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
-mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
-
-/**
- * Display a message to the user
- *
- * @deprecated since 1.17 Use mediawiki.notify instead
- * @param {string|HTMLElement} message To be put inside the message box
- */
-mw.log.deprecate( win, 'jsMsg', function ( message ) {
- if ( !arguments.length || message === '' || message === null ) {
- return true;
- }
- if ( typeof message !== 'object' ) {
- message = $.parseHTML( message );
- }
- mw.notify( message, { autoHide: true, tag: 'legacy' } );
- return true;
-}, 'Use mediawiki.notify instead.' );
-
-/**
- * Misc. utilities
- *
- * @deprecated since 1.17 Use mediawiki.util instead
- */
-msg = 'Use mediawiki.util instead.';
-mw.log.deprecate( win, 'updateTooltipAccessKeys', mw.util.updateTooltipAccessKeys, msg );
-mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
-mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
-msg = 'Use jquery.accessKeyLabel instead.';
-mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
-mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
-
-/**
- * Wikipage import methods
- */
-
-// included-scripts tracker
-win.loadedScripts = {};
-
-win.importScript = function ( page ) {
- var uri = mw.config.get( 'wgScript' ) + '?title=' +
- mw.util.wikiUrlencode( page ) +
- '&action=raw&ctype=text/javascript';
- return win.importScriptURI( uri );
-};
-
-win.importScriptURI = function ( url ) {
- if ( win.loadedScripts[url] ) {
- return null;
- }
- win.loadedScripts[url] = true;
- var s = document.createElement( 'script' );
- s.setAttribute( 'src', url );
- s.setAttribute( 'type', 'text/javascript' );
- document.getElementsByTagName( 'head' )[0].appendChild( s );
- return s;
-};
-
-win.importStylesheet = function ( page ) {
- var uri = mw.config.get( 'wgScript' ) + '?title=' +
- mw.util.wikiUrlencode( page ) +
- '&action=raw&ctype=text/css';
- return win.importStylesheetURI( uri );
-};
-
-win.importStylesheetURI = function ( url, media ) {
- var l = document.createElement( 'link' );
- l.rel = 'stylesheet';
- l.href = url;
- if ( media ) {
- l.media = media;
- }
- document.getElementsByTagName('head')[0].appendChild( l );
- return l;
-};
-
-}( mediaWiki, jQuery ) );
--- /dev/null
+../../resources/src/mediawiki.legacy/wikibits.js
\ No newline at end of file
'ResourceLoaderTestCase' => "$testDir/phpunit/ResourceLoaderTestCase.php",
'ResourceLoaderTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
'ResourceLoaderFileModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
+ 'ResourceLoaderWikiModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php",
'TestUser' => "$testDir/phpunit/includes/TestUser.php",
'LessFileCompilationTest' => "$testDir/phpunit/LessFileCompilationTest.php",
builder (3.2.2)
childprocess (0.5.3)
ffi (~> 1.0, >= 1.0.11)
- cucumber (1.3.15)
+ cucumber (1.3.16)
builder (>= 2.1.2)
diff-lcs (>= 1.1.3)
gherkin (~> 2.12)
faker (>= 1.1.2)
yml_reader (>= 0.3)
diff-lcs (1.2.5)
- domain_name (0.5.19)
+ domain_name (0.5.20)
unf (>= 0.0.5, < 1.0.0)
- faker (1.3.0)
+ faker (1.4.3)
i18n (~> 0.5)
faraday (0.9.0)
multipart-post (>= 1.2, < 3)
headless (1.0.2)
http-cookie (1.0.2)
domain_name (~> 0.5)
- i18n (0.6.9)
+ i18n (0.6.11)
json (1.8.1)
- mediawiki_api (0.1.3)
+ mediawiki_api (0.2.1)
faraday (~> 0.9, >= 0.9.0)
faraday-cookie_jar (~> 0.0, >= 0.0.6)
- mediawiki_selenium (0.2.25)
+ mediawiki_selenium (0.3.2)
cucumber (~> 1.3, >= 1.3.10)
headless (~> 1.0, >= 1.0.1)
json (~> 1.8, >= 1.8.1)
+ mediawiki_api (~> 0.2, >= 0.2.1)
page-object (~> 1.0)
rest-client (~> 1.6, >= 1.6.7)
rspec-expectations (~> 2.14, >= 2.14.4)
multi_json (1.10.1)
multi_test (0.1.1)
multipart-post (2.0.0)
- page-object (1.0)
+ netrc (0.7.7)
+ page-object (1.0.2)
page_navigation (>= 0.9)
selenium-webdriver (>= 2.42.0)
watir-webdriver (>= 0.6.9)
page_navigation (0.9)
data_magic (>= 0.14)
- rest-client (1.6.7)
- mime-types (>= 1.16)
- rspec-expectations (2.99.1)
+ rest-client (1.7.2)
+ mime-types (>= 1.16, < 3.0)
+ netrc (~> 0.7)
+ rspec-expectations (2.99.2)
diff-lcs (>= 1.1.3, < 2.0)
- rubyzip (1.1.5)
+ rubyzip (1.1.6)
selenium-webdriver (2.42.0)
childprocess (>= 0.5.0)
multi_json (~> 1.0)
page_url URL.url("Special:Preferences#mw-prefsection-rendering")
checkbox(:auto_number_check, id: "mw-input-wpnumberheadings")
- checkbox(:collapse_sidebar_vector_check, id: "mw-input-wpvector-collapsiblenav")
radio_button(:cologne_blue, id: "mw-input-wpskin-cologneblue")
radio_button(:day_mo_year_radio, id: "mw-input-wpdate-dmy")
checkbox(:dont_show_aft_check, id: "mw-input-wparticlefeedback-disable")
"grunt": "0.4.2",
"grunt-contrib-jshint": "0.10.0",
"grunt-contrib-watch": "0.6.1",
- "grunt-banana-checker": "0.1.0",
+ "grunt-banana-checker": "0.2.0",
"grunt-jscs": "0.6.1",
"grunt-jsonlint": "1.0.4"
}
* Remove last character if it is a newline
* @group utility
* @param string $s
+ * @return string
*/
public static function chomp( $s ) {
if ( substr( $s, -1 ) === "\n" ) {
/**
* Get an input dictionary from a set of parser test files
* @param array $filenames
+ * @return string
*/
function getFuzzInput( $filenames ) {
$dict = '';
/**
* Get a memory usage breakdown
+ * @return array
*/
function getMemoryBreakdown() {
$memStats = array();
return $this->showSkipped();
}
$out = MWTidy::tidy( $out );
- $out = preg_replace( '/\s+$/', '', $out);
+ $out = preg_replace( '/\s+$/', '', $out );
}
if ( isset( $opts['showtitle'] ) ) {
/**
* Refactored in 1.22 to use ParserTestResult
* @param ParserTestResult $testResult
+ * @return bool
*/
function showTestResult( ParserTestResult $testResult ) {
if ( $testResult->isSuccess() ) {
* @param string $key Name of option val to retrieve
* @param array $opts Options array to look in
* @param mixed $default Default value returned if not found
+ * @return mixed
*/
private static function getOptionValue( $key, $opts, $default ) {
$key = strtolower( $key );
* Ideally this should replace the global configuration entirely.
* @param string $opts
* @param string $config
+ * @return RequestContext
*/
private function setupGlobals( $opts = '', $config = '' ) {
global $IP;
/**
* List of temporary tables to create, without prefix.
* Some of these probably aren't necessary.
+ * @return array
*/
private function listTables() {
$tables = array( 'user', 'user_properties', 'user_former_groups', 'page', 'page_restrictions',
!! end
+!! test
+Build table with {{!}}
+!! wikitext
+{{{!}} class="wikitable"
+! header
+! second header
+{{!}}- style="color:red;"
+{{!}} data {{!}}{{!}} style="color:red;" {{!}} second data
+{{!}}}
+!! html
+<table class="wikitable">
+<tr>
+<th> header
+</th>
+<th> second header
+</th></tr>
+<tr style="color:red;">
+<td> data </td>
+<td style="color:red;"> second data
+</td></tr></table>
+
+!! end
+
# The expected HTML structure in this test is debatable. The PHP parser does
# not parse this kind of table at all. The main focus for Parsoid is on
# round-tripping, so this output is ok for now. TODO: revisit!
</p>
!! end
+!! test
+Header with space, plus and underscore as entity
+!! wikitext
+Id should not contain + for spaces
+
+== Space between Text ==
+section 1
+
+== Space-Entity between Text ==
+section 2
+
+== Plus+between+Text ==
+section 3
+
+== Plus-Entity+between+Text ==
+section 4
+
+== Underscore_between_Text ==
+section 5
+
+== Underscore-Entity_between_Text ==
+section 6
+
+[[#Space between Text]]
+[[#Space-Entity between Text]]
+[[#Plus+between+Text]]
+[[#Plus-Entity+between+Text]]
+[[#Underscore_between_Text]]
+[[#Underscore-Entity_between_Text]]
+!! html
+<p>Id should not contain + for spaces
+</p>
+<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="#Space_between_Text"><span class="tocnumber">1</span> <span class="toctext">Space between Text</span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="#Space-Entity_between_Text"><span class="tocnumber">2</span> <span class="toctext">Space-Entity between Text</span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="#Plus.2Bbetween.2BText"><span class="tocnumber">3</span> <span class="toctext">Plus+between+Text</span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="#Plus-Entity.2Bbetween.2BText"><span class="tocnumber">4</span> <span class="toctext">Plus-Entity+between+Text</span></a></li>
+<li class="toclevel-1 tocsection-5"><a href="#Underscore_between_Text"><span class="tocnumber">5</span> <span class="toctext">Underscore_between_Text</span></a></li>
+<li class="toclevel-1 tocsection-6"><a href="#Underscore-Entity_between_Text"><span class="tocnumber">6</span> <span class="toctext">Underscore-Entity_between_Text</span></a></li>
+</ul>
+</div>
+
+<h2><span class="mw-headline" id="Space_between_Text">Space between Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=1" title="Edit section: Space between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 1
+</p>
+<h2><span class="mw-headline" id="Space-Entity_between_Text">Space-Entity between Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=2" title="Edit section: Space-Entity between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 2
+</p>
+<h2><span class="mw-headline" id="Plus.2Bbetween.2BText">Plus+between+Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=3" title="Edit section: Plus+between+Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 3
+</p>
+<h2><span class="mw-headline" id="Plus-Entity.2Bbetween.2BText">Plus-Entity+between+Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=4" title="Edit section: Plus-Entity+between+Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 4
+</p>
+<h2><span class="mw-headline" id="Underscore_between_Text">Underscore_between_Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=5" title="Edit section: Underscore between Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 5
+</p>
+<h2><span class="mw-headline" id="Underscore-Entity_between_Text">Underscore-Entity_between_Text</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&action=edit&section=6" title="Edit section: Underscore-Entity_between_Text">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<p>section 6
+</p><p><a href="#Space_between_Text">#Space between Text</a>
+<a href="#Space-Entity_between_Text">#Space-Entity between Text</a>
+<a href="#Plus.2Bbetween.2BText">#Plus+between+Text</a>
+<a href="#Plus-Entity.2Bbetween.2BText">#Plus-Entity+between+Text</a>
+<a href="#Underscore_between_Text">#Underscore_between_Text</a>
+<a href="#Underscore-Entity_between_Text">#Underscore-Entity_between_Text</a>
+</p>
+!! end
+
!! test
Headers with excess '=' characters
(Are similar tests necessary beyond the 1st level?)
* @param string $message
* @param bool $isHtml
*/
- public static function assertTag($matcher, $actual, $message = '', $isHtml = true) {
+ public static function assertTag( $matcher, $actual, $message = '', $isHtml = true ) {
//trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
- $dom = PHPUnit_Util_XML::load($actual, $isHtml);
- $tags = PHPUnit_Util_XML::findNodes($dom, $matcher, $isHtml);
- $matched = count($tags) > 0 && $tags[0] instanceof DOMNode;
+ $dom = PHPUnit_Util_XML::load( $actual, $isHtml );
+ $tags = PHPUnit_Util_XML::findNodes( $dom, $matcher, $isHtml );
+ $matched = count( $tags ) > 0 && $tags[0] instanceof DOMNode;
- self::assertTrue($matched, $message);
+ self::assertTrue( $matched, $message );
}
}
<?php
abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
- protected static function getResourceLoaderContext() {
+ protected static function getResourceLoaderContext( $lang = 'en' ) {
$resourceLoader = new ResourceLoader();
$request = new FauxRequest( array(
- 'lang' => 'en',
+ 'lang' => $lang,
'modules' => 'startup',
'only' => 'scripts',
'skin' => 'vector',
class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {
}
+
+class ResourceLoaderWikiModuleTestModule extends ResourceLoaderWikiModule {
+ // Override expected via PHPUnit mocks and stubs
+ protected function getPages( ResourceLoaderContext $context ) {
+ return array();
+ }
+}
--- /dev/null
+/* All of the combinations should result in the same output in LTR and RTL mode. */
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ background-image: url(simple-ltr.gif); }
--- /dev/null
+/* All of the combinations should result in the same output in LTR and RTL mode. */
+
+/*@noflip*/ .selector { /*@embed*/ background-image: url(simple-ltr.gif); }
+
+/*@noflip*/ .selector { background-image: /*@embed*/ url(simple-ltr.gif); }
+
+.selector { /*@noflip*/ /*@embed*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@embed*/ /*@noflip*/ background-image: url(simple-ltr.gif); }
+
+.selector { /*@noflip*/ background-image: /*@embed*/ url(simple-ltr.gif); }
-/* @noflip */
.unit-tests {
color: green;
border: 2px solid #eeeeee;
--- /dev/null
+{
+ "present-uk": "en",
+ "present-ru": "en",
+ "present-en": "en"
+}
--- /dev/null
+{
+ "present-uk": "ru",
+ "present-ru": "ru"
+}
--- /dev/null
+{
+ "present-uk": "uk"
+}
* @group Database
*/
class ArticleTablesTest extends MediaWikiLangTestCase {
-
/**
+ * Make sure that bug 14404 doesn't strike again. We don't want
+ * templatelinks based on the user language when {{int:}} is used, only the
+ * content language.
+ *
* @covers Title::getTemplateLinksFrom
* @covers Title::getLinksFrom
- * @todo give this test a real name explaining what is being tested here
*/
- public function testbug14404() {
+ public function testTemplatelinksUsesContentLanguage() {
$title = Title::newFromText( 'Bug 14404' );
$page = WikiPage::factory( $title );
$user = new User();
* User input text is passed to rtrim() by edit page. This is a simple
* wrapper around assertEquals() which calls rrtrim() to normalize the
* expected and actual texts.
+ * @param string $expected
+ * @param string $actual
+ * @param string $msg
*/
protected function assertEditedTextEquals( $expected, $actual, $msg = '' ) {
return $this->assertEquals( rtrim( $expected ), rtrim( $actual ), $msg );
return $page;
}
- /**
- * @todo split into a dataprovider and test method
- * @covers EditPage
- */
- public function testCreatePage() {
- $this->assertEdit(
- 'EditPageTest_testCreatePage',
- null,
- null,
- array(
- 'wpTextbox1' => "Hello World!",
+ public function provideCreatePages() {
+ return array(
+ array( 'expected article being created',
+ 'EditPageTest_testCreatePage',
+ null,
+ 'Hello World!',
+ EditPage::AS_SUCCESS_NEW_ARTICLE,
+ 'Hello World!'
),
- EditPage::AS_SUCCESS_NEW_ARTICLE,
- "Hello World!",
- "expected article being created"
- )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
-
- $this->assertEdit(
- 'EditPageTest_testCreatePage',
- null,
- null,
- array(
- 'wpTextbox1' => "",
+ array( 'expected article not being created if empty',
+ 'EditPageTest_testCreatePage',
+ null,
+ '',
+ EditPage::AS_BLANK_ARTICLE,
+ null
),
- EditPage::AS_BLANK_ARTICLE,
- null,
- "expected article not being created if empty"
- );
-
- $this->assertEdit(
- 'MediaWiki:January',
- null,
- 'UTSysop',
- array(
- 'wpTextbox1' => "Not January",
+ array( 'expected MediaWiki: page being created',
+ 'MediaWiki:January',
+ 'UTSysop',
+ 'Not January',
+ EditPage::AS_SUCCESS_NEW_ARTICLE,
+ 'Not January'
),
- EditPage::AS_SUCCESS_NEW_ARTICLE,
- "Not January",
- "expected MediaWiki: page being created"
- )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
-
- $this->assertEdit(
- 'MediaWiki:EditPageTest_testCreatePage',
- null,
- 'UTSysop',
- array(
- 'wpTextbox1' => "",
+ array( 'expected not-registered MediaWiki: page not being created if empty',
+ 'MediaWiki:EditPageTest_testCreatePage',
+ 'UTSysop',
+ '',
+ EditPage::AS_BLANK_ARTICLE,
+ null
),
- EditPage::AS_BLANK_ARTICLE,
- null,
- "expected not-registered MediaWiki: page not being created if empty"
- );
-
- $this->assertEdit(
- 'MediaWiki:January',
- null,
- 'UTSysop',
- array(
- 'wpTextbox1' => "",
+ array( 'expected registered MediaWiki: page being created even if empty',
+ 'MediaWiki:January',
+ 'UTSysop',
+ '',
+ EditPage::AS_SUCCESS_NEW_ARTICLE,
+ ''
),
- EditPage::AS_SUCCESS_NEW_ARTICLE,
- "",
- "expected registered MediaWiki: page being created even if empty"
- )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
-
- $this->assertEdit(
- 'MediaWiki:Ipb-default-expiry',
- null,
- 'UTSysop',
- array(
- 'wpTextbox1' => "",
+ array( 'expected registered MediaWiki: page whose default content is empty not being created if empty',
+ 'MediaWiki:Ipb-default-expiry',
+ 'UTSysop',
+ '',
+ EditPage::AS_BLANK_ARTICLE,
+ ''
),
- EditPage::AS_BLANK_ARTICLE,
- "",
- "expected registered MediaWiki: page whose default content is empty not being created if empty"
- );
-
- $this->assertEdit(
- 'MediaWiki:January',
- null,
- 'UTSysop',
- array(
- 'wpTextbox1' => "January",
+ array( 'expected MediaWiki: page not being created if text equals default message',
+ 'MediaWiki:January',
+ 'UTSysop',
+ 'January',
+ EditPage::AS_BLANK_ARTICLE,
+ null
+ ),
+ array( 'expected empty article being created',
+ 'EditPageTest_testCreatePage',
+ null,
+ '',
+ EditPage::AS_SUCCESS_NEW_ARTICLE,
+ '',
+ true
),
- EditPage::AS_BLANK_ARTICLE,
- null,
- "expected MediaWiki: page not being created if text equals default message"
);
+ }
- $this->assertEdit(
- 'EditPageTest_testCreatePage',
- null,
- null,
- array(
- 'wpTextbox1' => "",
- 'wpIgnoreBlankArticle' => 1,
- ),
- EditPage::AS_SUCCESS_NEW_ARTICLE,
- "",
- "expected empty article being created"
- )->doDeleteArticleReal( 'EditPageTest_testCreatePage' );
+ /**
+ * @dataProvider provideCreatePages
+ * @covers EditPage
+ */
+ public function testCreatePage( $desc, $pageTitle, $user, $editText, $expectedCode, $expectedText, $ignoreBlank = false ) {
+ $edit = array( 'wpTextbox1' => $editText );
+ if ( $ignoreBlank ) {
+ $edit['wpIgnoreBlankArticle'] = 1;
+ }
+
+ $page = $this->assertEdit( $pageTitle, null, $user, $edit, $expectedCode, $expectedText, $desc );
+
+ if ( $expectedCode != EditPage::AS_BLANK_ARTICLE ) {
+ $page->doDeleteArticleReal( $pageTitle );
+ }
}
public function testUpdatePage() {
);
}
+ /*
+ * Test cases for random functions could hypothetically fail,
+ * even though they shouldn't.
+ */
+
/**
* @covers ::wfRandom
*/
public function testRandom() {
- # This could hypothetically fail, but it shouldn't ;)
$this->assertFalse(
- wfRandom() == wfRandom() );
+ wfRandom() == wfRandom()
+ );
+ }
+
+ /**
+ * @covers ::wfRandomString
+ */
+ public function testRandomString() {
+ $this->assertFalse(
+ wfRandomString() == wfRandomString()
+ );
+ $this->assertEquals(
+ strlen( wfRandomString( 10 ) ), 10
+ );
+ $this->assertTrue(
+ preg_match( '/^[0-9a-f]+$/i', wfRandomString() ) === 1
+ );
}
/**
strlen( wfBaseConvert( $number, 2, 2, strlen( $number ) - 5 ) )
);
}
+
+ public function testLeadingZero() {
+ $this->assertSame( '24', wfBaseConvert( '010', 36, 16 ) );
+ $this->assertSame( '37d4', wfBaseConvert( '0b10', 36, 16 ) );
+ $this->assertSame( 'a734', wfBaseConvert( '0x10', 36, 16 ) );
+ }
}
+++ /dev/null
-<?php
-
-/**
- * @covers LocalisationCache
- */
-class LocalisationCacheTest extends MediaWikiTestCase {
- public function testPuralRulesFallback() {
- $cache = Language::getLocalisationCache();
-
- $this->assertEquals(
- $cache->getItem( 'ar', 'pluralRules' ),
- $cache->getItem( 'arz', 'pluralRules' ),
- 'arz plural rules (undefined) fallback to ar (defined)'
- );
-
- $this->assertEquals(
- $cache->getItem( 'ar', 'compiledPluralRules' ),
- $cache->getItem( 'arz', 'compiledPluralRules' ),
- 'arz compiled plural rules (undefined) fallback to ar (defined)'
- );
-
- $this->assertNotEquals(
- $cache->getItem( 'ksh', 'pluralRules' ),
- $cache->getItem( 'de', 'pluralRules' ),
- 'ksh plural rules (defined) dont fallback to de (defined)'
- );
-
- $this->assertNotEquals(
- $cache->getItem( 'ksh', 'compiledPluralRules' ),
- $cache->getItem( 'de', 'compiledPluralRules' ),
- 'ksh compiled plural rules (defined) dont fallback to de (defined)'
- );
- }
-}
'<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&lang=en&modules=test.bar%2Cbaz%2Cfoo&only=styles&skin=fallback&*">
'
),
- // Load private module (scripts)
+ // Load private module (only=scripts)
+ // This is asserted for completion (would get two condition wrappers),
+ // though in practice we'd never embed a module with only=scripts,
+ // that mode is reserved for hardcoded requests. Embedded modules
+ // would always be combined.
array(
array( 'test.quux', ResourceLoaderModule::TYPE_SCRIPTS ),
- '<script>if(window.mw){mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});}
-</script>
+ '<script>if(window.mw){
+if(window.mw){mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});}
+
+}</script>
'
),
// Load private module (combined)
array(
array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
- '<script>mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{});
-</script>
+ '<script>if(window.mw){
+mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{});
+
+}</script>
'
),
// Load module script with with ESI
array(
array( 'test.foo', ResourceLoaderModule::TYPE_STYLES, true ),
'<style><esi:include src="http://127.0.0.1:8080/w/load.php?debug=false&lang=en&modules=test.foo&only=styles&skin=fallback&*" /></style>
+',
+ ),
+ // Load no modules
+ array(
+ array( array(), ResourceLoaderModule::TYPE_COMBINED ),
+ '',
+ ),
+ // noscript group
+ array(
+ array( 'test.noscript', ResourceLoaderModule::TYPE_STYLES ),
+ '<noscript><link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&lang=en&modules=test.noscript&only=styles&skin=fallback&*"></noscript>
+'
+ ),
+ // Load two modules in separate groups
+ array(
+ array( array( 'test.group.foo', 'test.group.bar' ), ResourceLoaderModule::TYPE_COMBINED ),
+ '<script src="http://127.0.0.1:8080/w/load.php?debug=false&lang=en&modules=test.group.bar&skin=fallback&*"></script>
+<script src="http://127.0.0.1:8080/w/load.php?debug=false&lang=en&modules=test.group.foo&skin=fallback&*"></script>
',
),
);
'styles' => '/* pref-animate=off */ .mw-icon { transition: none; }',
'group' => 'private',
)),
+ 'test.noscript' => new ResourceLoaderTestModule( array(
+ 'styles' => '.mw-test-noscript { content: "style"; }',
+ 'group' => 'noscript',
+ )),
+ 'test.group.bar' => new ResourceLoaderTestModule( array(
+ 'styles' => '.mw-group-bar { content: "style"; }',
+ 'group' => 'bar',
+ )),
+ 'test.group.foo' => new ResourceLoaderTestModule( array(
+ 'styles' => '.mw-group-foo { content: "style"; }',
+ 'group' => 'foo',
+ )),
) );
$links = $method->invokeArgs( $out, $args );
// Strip comments to avoid variation due to wgDBname in WikiID and cache key
}
/**
- * @dataProvider provideBug31100
+ * @dataProvider provideSpecialNamesWithAndWithoutParameter
* @covers Title::fixSpecialName
- * @todo give this test a real name explaining what is being tested here
*/
- public function testBug31100FixSpecialName( $text, $expectedParam ) {
+ public function testFixSpecialNameRetainsParameter( $text, $expectedParam ) {
$title = Title::newFromText( $text );
$fixed = $title->fixSpecialName();
$stuff = explode( '/', $fixed->getDBkey(), 2 );
);
}
- public static function provideBug31100() {
+ public static function provideSpecialNamesWithAndWithoutParameter() {
return array(
array( 'Special:Version', null ),
array( 'Special:Version/', '' ),
$this->assertFalse( $user->checkPasswordValidity( 'Passpass' )->isGood() );
$this->assertEquals( 'password-login-forbidden', $user->getPasswordValidity( 'Passpass' ) );
}
+
+ /**
+ * @covers User::getCanonicalName()
+ * @dataProvider provideGetCanonicalName
+ */
+ public function testGetCanonicalName( $name, $expectedArray, $msg ) {
+ foreach ( $expectedArray as $validate => $expected ) {
+ $this->assertEquals(
+ User::getCanonicalName( $name, $validate === 'false' ? false : $validate ),
+ $expected,
+ $msg . ' (' . $validate . ')'
+ );
+ }
+ }
+
+ public function provideGetCanonicalName() {
+ return array(
+ array( ' trailing space ', array( 'creatable' => 'Trailing space' ), 'Trailing spaces' ),
+ // @todo FIXME: Maybe the createable name should be 'Talk:Username' or false to reject?
+ array( 'Talk:Username', array( 'creatable' => 'Username', 'usable' => 'Username',
+ 'valid' => 'Username', 'false' => 'Talk:Username' ), 'Namespace prefix' ),
+ array( ' name with # hash', array( 'creatable' => false, 'usable' => false ), 'With hash' ),
+ array( 'Multi spaces', array( 'creatable' => 'Multi spaces',
+ 'usable' => 'Multi spaces' ), 'Multi spaces' ),
+ array( 'lowercase', array( 'creatable' => 'Lowercase' ), 'Lowercase' ),
+ array( 'in[]valid', array( 'creatable' => false, 'usable' => false, 'valid' => false,
+ 'false' => 'In[]valid' ), 'Invalid' ),
+ array( 'with / slash', array( 'creatable' => false, 'usable' => false, 'valid' => false,
+ 'false' => 'With / slash' ), 'With slash' ),
+ );
+ }
}
--- /dev/null
+<?php
+/**
+ * @group Database
+ * @group Cache
+ * @covers LocalisationCache
+ * @author Niklas Laxström
+ */
+class LocalisationCacheTest extends MediaWikiTestCase {
+ protected function setUp() {
+ global $IP;
+
+ parent::setUp();
+ $this->setMwGlobals( array(
+ 'wgMessagesDirs' => array( "$IP/tests/phpunit/data/localisationcache" ),
+ 'wgExtensionMessagesFiles' => array(),
+ 'wgHooks' => array(),
+ ) );
+ }
+
+ public function testPuralRulesFallback() {
+ $cache = new LocalisationCache( array( 'store' => 'detect' ) );
+
+ $this->assertEquals(
+ $cache->getItem( 'ar', 'pluralRules' ),
+ $cache->getItem( 'arz', 'pluralRules' ),
+ 'arz plural rules (undefined) fallback to ar (defined)'
+ );
+
+ $this->assertEquals(
+ $cache->getItem( 'ar', 'compiledPluralRules' ),
+ $cache->getItem( 'arz', 'compiledPluralRules' ),
+ 'arz compiled plural rules (undefined) fallback to ar (defined)'
+ );
+
+ $this->assertNotEquals(
+ $cache->getItem( 'ksh', 'pluralRules' ),
+ $cache->getItem( 'de', 'pluralRules' ),
+ 'ksh plural rules (defined) dont fallback to de (defined)'
+ );
+
+ $this->assertNotEquals(
+ $cache->getItem( 'ksh', 'compiledPluralRules' ),
+ $cache->getItem( 'de', 'compiledPluralRules' ),
+ 'ksh compiled plural rules (defined) dont fallback to de (defined)'
+ );
+ }
+
+ public function testRecacheFallbacks() {
+ $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+ $lc->recache( 'uk' );
+ $this->assertEquals(
+ array(
+ 'present-uk' => 'uk',
+ 'present-ru' => 'ru',
+ 'present-en' => 'en',
+ ),
+ $lc->getItem( 'uk', 'messages' ),
+ 'Fallbacks are only used to fill missing data'
+ );
+ }
+
+ public function testRecacheFallbacksWithHooks() {
+ global $wgHooks;
+
+ // Use hook to provide updates for messages. This is what the
+ // LocalisationUpdate extension does. See bug 68781.
+ $wgHooks['LocalisationCacheRecacheFallback'][] = function (
+ LocalisationCache $lc,
+ $code,
+ array &$cache
+ ) {
+ if ( $code === 'ru' ) {
+ $cache['messages']['present-uk'] = 'ru-override';
+ $cache['messages']['present-ru'] = 'ru-override';
+ $cache['messages']['present-en'] = 'ru-override';
+ }
+ };
+
+ $lc = new LocalisationCache( array( 'store' => 'detect' ) );
+ $lc->recache( 'uk' );
+ $this->assertEquals(
+ array(
+ 'present-uk' => 'uk',
+ 'present-ru' => 'ru-override',
+ 'present-en' => 'ru-override',
+ ),
+ $lc->getItem( 'uk', 'messages' ),
+ 'Updates provided by hooks follow the normal fallback order.'
+ );
+ }
+}
--- /dev/null
+<?php
+
+/**
+ * Test for BloomCacheRedis class.
+ *
+ * @TODO: some generic base "redis test server conf" for all testing?
+ *
+ * @covers BloomCacheRedis
+ * @group Cache
+ */
+class BloomCacheRedisTest extends MediaWikiTestCase {
+ private static $suffix;
+
+ protected function setUp() {
+ parent::setUp();
+
+ self::$suffix = self::$suffix ? : mt_rand();
+
+ $fcache = BloomCache::get( 'main' );
+ if ( $fcache instanceof BloomCacheRedis ) {
+ $fcache->delete( "unit-testing-" . self::$suffix );
+ } else {
+ $this->markTestSkipped( 'The main bloom cache is not redis.' );
+ }
+ }
+
+ public function testBloomCache() {
+ $key = "unit-testing-" . self::$suffix;
+ $fcache = BloomCache::get( 'main' );
+ $count = 1500;
+
+ $this->assertTrue( $fcache->delete( $key ), "OK delete of filter '$key'." );
+ $this->assertTrue( $fcache->init( $key, $count, .001 ), "OK init of filter '$key'." );
+
+ $members = array();
+ for ( $i = 0; $i < $count; ++$i ) {
+ $members[] = "$i-value-$i";
+ }
+ $this->assertTrue( $fcache->add( $key, $members ), "Addition of members to '$key' OK." );
+
+ for ( $i = 0; $i < $count; ++$i ) {
+ $this->assertTrue( $fcache->isHit( $key, "$i-value-$i" ), "Hit on member '$i-value-$i'." );
+ }
+
+ $falsePositives = array();
+ for ( $i = $count; $i < 2 * $count; ++$i ) {
+ if ( $fcache->isHit( $key, "value$i" ) ) {
+ $falsePositives[] = "value$i";
+ }
+ }
+
+ $eFalsePositives = array(
+ 'value1763',
+ 'value2245',
+ 'value2353',
+ 'value2791',
+ 'value2898',
+ 'value2975'
+ );
+ $this->assertEquals( $eFalsePositives, $falsePositives, "Correct number of false positives found." );
+ }
+
+ protected function tearDown() {
+ parent::tearDown();
+
+ $fcache = BloomCache::get( 'main' );
+ if ( $fcache instanceof BloomCacheRedis ) {
+ $fcache->delete( "unit-testing-" . self::$suffix );
+ }
+ }
+}
--- /dev/null
+<?php
+
+/**
+ * @covers EnhancedChangesList
+ *
+ * @group Database
+ *
+ * @licence GNU GPL v2+
+ * @author Katie Filbert < aude.wiki@gmail.com >
+ */
+class EnhancedChangesListTest extends MediaWikiLangTestCase {
+
+ /**
+ * @var TestRecentChangesHelper
+ */
+ private $testRecentChangesHelper;
+
+ public function __construct( $name = null, array $data = array(), $dataName = '' ) {
+ parent::__construct( $name, $data, $dataName );
+
+ $this->testRecentChangesHelper = new TestRecentChangesHelper();
+ }
+
+ public function testBeginRecentChangesList_styleModules() {
+ $enhancedChangesList = $this->newEnhancedChangesList();
+ $enhancedChangesList->beginRecentChangesList();
+
+ $styleModules = $enhancedChangesList->getOutput()->getModuleStyles();
+
+ $this->assertContains(
+ 'mediawiki.special.changeslist',
+ $styleModules,
+ 'has mediawiki.special.changeslist'
+ );
+
+ $this->assertContains(
+ 'mediawiki.special.changeslist.enhanced',
+ $styleModules,
+ 'has mediawiki.special.changeslist.enhanced'
+ );
+ }
+
+ public function testBeginRecentChangesList_jsModules() {
+ $enhancedChangesList = $this->newEnhancedChangesList();
+ $enhancedChangesList->beginRecentChangesList();
+
+ $modules = $enhancedChangesList->getOutput()->getModules();
+
+ $this->assertContains( 'jquery.makeCollapsible', $modules, 'has jquery.makeCollapsible' );
+ $this->assertContains( 'mediawiki.icon', $modules, 'has mediawiki.icon' );
+ }
+
+ public function testBeginRecentChangesList_html() {
+ $enhancedChangesList = $this->newEnhancedChangesList();
+ $html = $enhancedChangesList->beginRecentChangesList();
+
+ $this->assertEquals( '<div class="mw-changeslist">', $html );
+ }
+
+ /**
+ * @todo more tests
+ */
+ public function testRecentChangesLine() {
+ $enhancedChangesList = $this->newEnhancedChangesList();
+ $enhancedChangesList->beginRecentChangesList();
+
+ $recentChange = $this->getEditChange( '20131103092153' );
+ $html = $enhancedChangesList->recentChangesLine( $recentChange, false );
+
+ $this->assertInternalType( 'string', $html );
+
+ $recentChange2 = $this->getEditChange( '20131103092253' );
+ $html = $enhancedChangesList->recentChangesLine( $recentChange2, false );
+
+ $this->assertEquals( '', $html );
+ }
+
+ /**
+ * @todo more tests for actual formatting, this is more of a smoke test
+ */
+ public function testEndRecentChangesList() {
+ $enhancedChangesList = $this->newEnhancedChangesList();
+ $enhancedChangesList->beginRecentChangesList();
+
+ $recentChange = $this->getEditChange( '20131103092153' );
+ $enhancedChangesList->recentChangesLine( $recentChange, false );
+
+ $recentChange2 = $this->getEditChange( '20131103092253' );
+ $enhancedChangesList->recentChangesLine( $recentChange2, false );
+
+ $html = $enhancedChangesList->endRecentChangesList();
+
+ preg_match_all( '/td class="mw-enhanced-rc-nested"/', $html, $matches );
+ $this->assertCount( 2, $matches[0] );
+ }
+
+ /**
+ * @return EnhancedChangesList
+ */
+ private function newEnhancedChangesList() {
+ $user = User::newFromId( 0 );
+ $context = $this->testRecentChangesHelper->getTestContext( $user );
+
+ return new EnhancedChangesList( $context );
+ }
+
+ /**
+ * @return RecentChange
+ */
+ private function getEditChange( $timestamp ) {
+ $user = $this->getTestUser();
+ $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
+ $user, 'Cat', $timestamp, 5, 191, 190, 0, 0
+ );
+
+ return $recentChange;
+ }
+
+ /**
+ * @return User
+ */
+ private function getTestUser() {
+ $user = User::newFromName( 'TestRecentChangesUser' );
+
+ if ( !$user->getId() ) {
+ $user->addToDatabase();
+ }
+
+ return $user;
+ }
+
+}
/**
* @covers OldChangesList
*
+ * @todo add tests to cover article link, timestamp, character difference,
+ * log entry, user tool links, direction marks, tags, rollback,
+ * watching users, and date header.
+ *
* @group Database
*
* @licence GNU GPL v2+
public function testRecentChangesLine_LogTitle() {
$oldChangesList = $this->getOldChangesList();
- $recentChange = $this->getLogChange( 'delete' );
+ $recentChange = $this->getLogChange( 'delete', 'delete' );
$line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
);
}
+ public function testRecentChangesLine_Flags() {
+ $oldChangesList = $this->getOldChangesList();
+ $recentChange = $this->getNewBotEditChange();
+
+ $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
+
+ $this->assertRegExp(
+ "/<abbr class='newpage' title='This edit created a new page'>N<\/abbr>/",
+ $line,
+ 'new page flag'
+ );
+
+ $this->assertRegExp(
+ "/<abbr class='botedit' title='This edit was performed by a bot'>b<\/abbr>/",
+ $line,
+ 'bot flag'
+ );
+ }
+
private function getNewBotEditChange() {
$user = $this->getTestUser();
$recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange(
- $user, 'Abc', '20131103212153', 0, 0
+ $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0
);
return $recentChange;
}
- private function getLogChange( $logType ) {
+ private function getLogChange( $logType, $logAction ) {
$user = $this->getTestUser();
$recentChange = $this->testRecentChangesHelper->makeLogRecentChange(
- $logType, $user, 'Abc', '20131103212153', 0, 0
+ $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0
);
return $recentChange;
$this->getContext(),
$this->getMessages(),
$this->testRecentChangesHelper->makeLogRecentChange(
+ 'delete',
'delete',
$this->getTestUser(),
'Abc',
return $this->makeRecentChange( $attribs, $counter, $watchingUsers );
}
- public function makeLogRecentChange( $logType, User $user, $titleText, $timestamp, $counter,
+ public function makeLogRecentChange( $logType, $logAction, User $user, $titleText, $timestamp, $counter,
$watchingUsers
) {
$attribs = array_merge(
'rc_type' => 3,
'rc_logid' => 25,
'rc_log_type' => $logType,
- 'rc_log_action' => $logType,
+ 'rc_log_action' => $logAction,
'rc_source' => 'mw.log'
)
);
public function testNewInstance() {
$config = GlobalVarConfig::newInstance();
$this->assertInstanceOf( 'GlobalVarConfig', $config );
+ $this->maybeStashGlobal( 'wgBaz' );
+ $GLOBALS['wgBaz'] = 'somevalue';
+ // Check prefix is set to 'wg'
+ $this->assertEquals( 'somevalue', $config->get( 'Baz' ) );
+ }
+
+ /**
+ * @covers GlobalVarConfig::__construct
+ * @dataProvider provideConstructor
+ */
+ public function testConstructor( $prefix ) {
+ $var = $prefix . 'GlobalVarConfigTest';
+ $rand = wfRandomString();
+ $this->maybeStashGlobal( $var );
+ $GLOBALS[$var] = $rand;
+ $config = new GlobalVarConfig( $prefix );
+ $this->assertInstanceOf( 'GlobalVarConfig', $config );
+ $this->assertEquals( $rand, $config->get( 'GlobalVarConfigTest' ) );
+ }
+
+ public static function provideConstructor() {
+ return array(
+ array( 'wg' ),
+ array( 'ef' ),
+ array( 'smw' ),
+ array( 'blahblahblahblah' ),
+ array( '' ),
+ );
}
public function provideGet() {
array( 'Foo', 'wg', 'default2' ),
array( 'Variable', 'ef', 'default3' ),
array( 'BAR', '', 'default4' ),
+ array( 'ThisGlobalWasNotSetAbove', 'wg', false )
);
}
*/
public function testGet( $name, $prefix, $expected ) {
$config = new GlobalVarConfig( $prefix );
+ if ( $expected === false ) {
+ $this->setExpectedException( 'ConfigException', 'GlobalVarConfig::getWithPrefix: undefined variable:' );
+ }
$this->assertEquals( $config->get( $name ), $expected );
}
);
}
+ private function maybeStashGlobal( $var ) {
+ if ( array_key_exists( $var, $GLOBALS ) ) {
+ // Will be reset after this test is over
+ $this->stashMwGlobals( $var );
+ }
+ }
+
/**
* @dataProvider provideSet
* @covers GlobalVarConfig::set
* @covers GlobalVarConfig::setWithPrefix
*/
public function testSet( $name, $prefix, $var ) {
- if ( array_key_exists( $var, $GLOBALS ) ) {
- // Will be reset after this test is over
- $this->stashMwGlobals( $var );
- }
+ $this->maybeStashGlobal( $var );
$config = new GlobalVarConfig( $prefix );
$random = wfRandomString();
$config->set( $name, $random );
$this->assertInstanceOf( 'ApiResult', $result );
$data = $result->getData();
- $expectedKeys = array( 'mwVersion', 'phpVersion', 'gitRevision', 'gitBranch',
+ $expectedKeys = array( 'mwVersion', 'phpEngine', 'phpVersion', 'gitRevision', 'gitBranch',
'gitViewUrl', 'time', 'log', 'debugLog', 'queries', 'request', 'memory',
'memoryPeak', 'includes', 'profile', '_element' );
class DeferredUpdatesTest extends MediaWikiTestCase {
public function testDoUpdates() {
- $updates = array (
+ $updates = array(
'1' => 'deferred update 1',
'2' => 'deferred update 2',
'3' => 'deferred update 3',
function () use ( $updates ) {
echo $updates['2'];
DeferredUpdates::addCallableUpdate(
- function() use ( $updates ) {
+ function () use ( $updates ) {
echo $updates['2-1'];
}
);
--- /dev/null
+<?php
+/**
+ * Unit tests for HTMLAutoCompleteSelectField
+ *
+ * @covers HTMLAutoCompleteSelectField
+ */
+class HtmlAutoCompleteSelectFieldTest extends MediaWikiTestCase {
+
+ var $options = array(
+ 'Bulgaria' => 'BGR',
+ 'Burkina Faso' => 'BFA',
+ 'Burundi' => 'BDI',
+ );
+
+ /**
+ * Verify that attempting to instantiate an HTMLAutoCompleteSelectField
+ * without providing any autocomplete options causes an exception to be
+ * thrown.
+ *
+ * @expectedException MWException
+ * @expectedExceptionMessage called without any autocompletions
+ */
+ function testMissingAutocompletions() {
+ new HTMLAutoCompleteSelectField( array( 'fieldname' => 'Test' ) );
+ }
+
+ /**
+ * Verify that the autocomplete options are correctly encoded as
+ * the 'data-autocomplete' attribute of the field.
+ *
+ * @covers HTMLAutoCompleteSelectField::getAttributes
+ */
+ function testGetAttributes() {
+ $field = new HTMLAutoCompleteSelectField( array(
+ 'fieldname' => 'Test',
+ 'autocomplete' => $this->options,
+ ) );
+
+ $attributes = $field->getAttributes( array() );
+ $this->assertEquals( array_keys( $this->options ),
+ FormatJson::decode( $attributes['data-autocomplete'] ),
+ "The 'data-autocomplete' attribute encodes autocomplete option keys as a JSON array."
+ );
+ }
+
+ /**
+ * Test that the optional select dropdown is included or excluded based on
+ * the presence or absence of the 'options' parameter.
+ */
+ function testOptionalSelectElement() {
+ $params = array(
+ 'fieldname' => 'Test',
+ 'autocomplete' => $this->options,
+ 'options' => $this->options,
+ );
+
+ $field = new HTMLAutoCompleteSelectField( $params );
+ $html = $field->getInputHTML( false );
+ $this->assertRegExp( '/select/', $html,
+ "When the 'options' parameter is set, the HTML includes a <select>" );
+
+ unset( $params['options'] );
+ $field = new HTMLAutoCompleteSelectField( $params );
+ $html = $field->getInputHTML( false );
+ $this->assertNotRegExp( '/select/', $html,
+ "When the 'options' parameter is not set, the HTML does not include a <select>" );
+ }
+}
if ( $cssB ) {
$transformedA = CSSJanus::transform( $cssA );
- $this->assertEquals( $transformedA, $cssB, 'Test A-B transformation' );
+ $this->assertEquals(
+ $transformedA,
+ str_replace( '/* @noflip */ ', '', $cssB ),
+ 'Test A-B transformation'
+ );
$transformedB = CSSJanus::transform( $cssB );
- $this->assertEquals( $transformedB, $cssA, 'Test B-A transformation' );
+ $this->assertEquals(
+ $transformedB,
+ str_replace( '/* @noflip */ ', '', $cssA ),
+ 'Test B-A transformation'
+ );
} else {
// If no B version is provided, it means
- // the output should equal the input.
+ // the output should equal the input (modulo @noflip annotations).
$transformedA = CSSJanus::transform( $cssA );
- $this->assertEquals( $transformedA, $cssA, 'Nothing was flipped' );
+ $this->assertEquals(
+ $transformedA,
+ str_replace( '/* @noflip */ ', '', $cssA ),
+ 'Nothing was flipped'
+ );
}
}
/**
* Set up the global variables for a consistent environment for each test.
* Ideally this should replace the global configuration entirely.
+ * @param array $opts
+ * @param string $config
+ * @return RequestContext
*/
protected function setupGlobals( $opts = array(), $config = '' ) {
global $wgFileBackends;
$this->markTestSkipped( "SKIPPED: tidy extension is not installed.\n" );
} else {
$out = MWTidy::tidy( $out );
- $out = preg_replace( '/\s+$/', '', $out);
+ $out = preg_replace( '/\s+$/', '', $out );
}
}
/**
* Get an input dictionary from a set of parser test files
* @param array $filenames
+ * @return string
*/
function getFuzzInput( $filenames ) {
$dict = '';
/**
* Get a memory usage breakdown
+ * @return array
*/
function getMemoryBreakdown() {
$memStats = array();
/**
* Get a Parser object
* @param Preprocessor $preprocessor
+ * @return Parser
*/
function getParser( $preprocessor = null ) {
global $wgParserConf;
/**
* Remove last character if it is a newline
* @param string $s
+ * @return string
*/
public function removeEndingNewline( $s ) {
if ( substr( $s, -1 ) === "\n" ) {
* @param string $key Name of option val to retrieve
* @param array $opts Options array to look in
* @param mixed $default Default value returned if not found
+ * @return mixed
*/
protected static function getOptionValue( $key, $opts, $default ) {
$key = strtolower( $key );
array( '<mw:toc>foo</mw:toc>', '<mw:toc>foo</mw:toc>', '<mw:toc> should survive tidy' ),
array( "<link foo=\"bar\" />\nfoo", '<link foo="bar"/>foo', '<link> should survive tidy' ),
array( "<meta foo=\"bar\" />\nfoo", '<meta foo="bar"/>foo', '<meta> should survive tidy' ),
- array( $testMathML , $testMathML, '<math> should survive tidy' ),
+ array( $testMathML, $testMathML, '<math> should survive tidy' ),
);
}
}
SkinFactory::getDefaultInstance()->register(
'fakeskin',
'FakeSkin',
- function(){
+ function () {
}
);
}
$this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] );
}
+ /**
+ * What happens when you mix @embed and @noflip?
+ * This really is an integration test, but oh well.
+ */
+ public function testMixedCssAnnotations( ) {
+ $basePath = __DIR__ . '/../../data/css';
+ $testModule = new ResourceLoaderFileModule( array(
+ 'localBasePath' => $basePath,
+ 'styles' => array( 'test.css' ),
+ ) );
+ $expectedModule = new ResourceLoaderFileModule( array(
+ 'localBasePath' => $basePath,
+ 'styles' => array( 'expected.css' ),
+ ) );
+
+ $contextLtr = self::getResourceLoaderContext( 'en' );
+ $contextRtl = self::getResourceLoaderContext( 'he' );
+
+ $this->assertEquals(
+ $expectedModule->getStyles( $contextLtr ),
+ $testModule->getStyles( $contextLtr ),
+ "/*@noflip*/ with /*@embed*/ gives correct results in LTR mode"
+ );
+ $this->assertEquals(
+ $expectedModule->getStyles( $contextLtr ),
+ $testModule->getStyles( $contextRtl ),
+ "/*@noflip*/ with /*@embed*/ gives correct results in RTL mode"
+ );
+ }
+
/**
* @dataProvider providePackedModules
* @covers ResourceLoader::makePackedModulesString
--- /dev/null
+<?php
+
+class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
+
+ /**
+ * @covers ResourceLoaderWikiModule::isKnownEmpty
+ * @dataProvider provideIsKnownEmpty
+ */
+ public function testIsKnownEmpty( $titleInfo, $group, $expected ) {
+ $module = $this->getMockBuilder( 'ResourceLoaderWikiModuleTestModule' )
+ ->setMethods( array( 'getTitleInfo', 'getGroup' ) )
+ ->getMock();
+ $module->expects( $this->any() )
+ ->method( 'getTitleInfo' )
+ ->will( $this->returnValue( $titleInfo ) );
+ $module->expects( $this->any() )
+ ->method( 'getGroup' )
+ ->will( $this->returnValue( $group ) );
+ $context = $this->getMockBuilder( 'ResourceLoaderContext' )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $this->assertEquals( $expected, $module->isKnownEmpty( $context ) );
+ }
+
+ public function provideIsKnownEmpty() {
+ return array(
+ // No valid pages
+ array( array(), 'test1', true ),
+ // 'site' module with a non-empty page
+ array(
+ array(
+ 'MediaWiki:Common.js' => array(
+ 'timestamp' => 123456789,
+ 'length' => 1234
+ )
+ ), 'site', false,
+ ),
+ // 'site' module with an empty page
+ array(
+ array(
+ 'MediaWiki:Monobook.js' => array(
+ 'timestamp' => 987654321,
+ 'length' => 0,
+ ),
+ ), 'site', false,
+ ),
+ // 'user' module with a non-empty page
+ array(
+ array(
+ 'User:FooBar/common.js' => array(
+ 'timestamp' => 246813579,
+ 'length' => 25,
+ ),
+ ), 'user', false,
+ ),
+ // 'user' module with an empty page
+ array(
+ array(
+ 'User:FooBar/monobook.js' => array(
+ 'timestamp' => 1357924680,
+ 'length' => 0,
+ ),
+ ), 'user', true,
+ ),
+ );
+ }
+}
public function testGetSkinNames() {
$factory = new SkinFactory();
// A fake callback we can use that will never be called
- $callback = function() {};
+ $callback = function () {
+ // NOP
+ };
$factory->register( 'skin1', 'Skin1', $callback );
$factory->register( 'skin2', 'Skin2', $callback );
$names = $factory->getSkinNames();
* Helper function to perform an async upload, execute the job and fetch
* the status
*
+ * @param string $token
+ * @param bool $ignoreWarnings
+ * @param bool $leaveMessage
* @return array The result of action=upload&statuskey=key
*/
private function doAsyncUpload( $token, $ignoreWarnings = false, $leaveMessage = false ) {
}
/**
- * Print high range characters as an hexadecimal
+ * Print high range characters as a hexadecimal
+ * @param string $string
+ * @return string
*/
function escaped( $string ) {
$escaped = '';
* @param Page $page Page to add the revision to
* @param string $text Revisions text
* @param string $summary Revisions summare
- *
+ * @return array
* @throws MWException
*/
protected function addRevision( Page $page, $text, $summary ) {
* @param WikiPage $page The page to add the revision to
* @param string $text The revisions text
* @param string $summary The revisions summare
- *
+ * @return int
* @throws MWException
*/
private function addRevision( $page, $text, $summary ) {
/**
* Get all registered modules from ResouceLoader.
+ * @return array
*/
protected static function getAllModules() {
global $wgEnableJavaScriptTest;
/**
* Filter to remove testUnitTestFileNamesEndWithTest false positives.
+ * @param string $filename
+ * @return bool
*/
public function filterSuites( $filename ) {
return strpos( $filename, __DIR__ . '/../suites/' ) !== 0;
/**
* Remove the dummy uploads directory
+ * @param string $dir
*/
private function teardownUploadDir( $dir ) {
if ( $this->keepUploads ) {
// Add two characters using scary black magic
spanText = $span.text();
d = findDivergenceIndex( origText, spanText );
- spanTextNew = spanText.substr( 0, d ) + origText[d] + origText[d] + '...';
+ spanTextNew = spanText.slice( 0, d ) + origText[d] + origText[d] + '...';
assert.gt( spanTextNew.length, spanText.length, 'Verify that the new span-length is indeed greater' );
'gender-msg-currentuser': '{{GENDER:|blue|pink|green}}',
'plural-msg': 'Found $1 {{PLURAL:$1|item|items}}',
-
+ // See https://bugzilla.wikimedia.org/69993
+ 'plural-msg-explicit-forms-nested': 'Found {{PLURAL:$1|$1 results|0=no results in {{SITENAME}}|1=$1 result}}',
// Assume the grammar form grammar_case_foo is not valid in any language
'grammar-msg': 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}',
);
} );
- QUnit.test( 'Plural', 3, function ( assert ) {
+ QUnit.test( 'Plural', 6, function ( assert ) {
assert.equal( formatParse( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
assert.equal( formatParse( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
assert.equal( formatParse( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
+ assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 6 ), 'Found 6 results', 'Plural message with explicit plural forms' );
+ assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 0 ), 'Found no results in ' + mw.config.get( 'wgSiteName' ), 'Plural message with explicit plural forms, with nested {{SITENAME}}' );
+ assert.equal( formatParse( 'plural-msg-explicit-forms-nested', 1 ), 'Found 1 result', 'Plural message with explicit plural forms with placeholder nested' );
} );
QUnit.test( 'Gender', 15, function ( assert ) {
assert.equal( mw.language.getData( 'en', 'invalidkey' ), undefined, 'Getter setter test for mw.language with invalid key' );
} );
+ QUnit.test( 'mw.language.commafy test', 9, function ( assert ) {
+ // Number grouping patterns are as per http://cldr.unicode.org/translation/number-patterns
+ assert.equal( mw.language.commafy( 1234.567, '###0.#####' ), '1234.567', 'Pattern with no digit grouping separator defined' );
+ assert.equal( mw.language.commafy( 123456789.567, '###0.#####' ), '123456789.567', 'Pattern with no digit grouping seperator defined, bigger decimal part' );
+ assert.equal( mw.language.commafy( 0.567, '###0.#####' ), '0.567', 'Decimal part 0' );
+ assert.equal( mw.language.commafy( '.567', '###0.#####' ), '0.567', 'Decimal part missing. replace with zero' );
+ assert.equal( mw.language.commafy( 1234, '##,#0.#####' ), '12,34', 'Pattern with no fractional part' );
+ assert.equal( mw.language.commafy( -1234.567, '###0.#####' ), '-1234.567', 'Negative number' );
+ assert.equal( mw.language.commafy( -1234.567, '#,###.00' ), '-1,234.56', 'Fractional part bigger than pattern.' );
+ assert.equal( mw.language.commafy( 123456789.567, '###,##0.00' ), '123,456,789.56', 'Decimal part as group of 3' );
+ assert.equal( mw.language.commafy( 123456789.567, '###,###,#0.00' ), '1,234,567,89.56', 'Decimal part as group of 3 and last one 2' );
+ } );
+
function grammarTest( langCode, test ) {
// The test works only if the content language is opt.language
// because it requires [lang].js to be loaded.
grammarTest( langCode, test );
}
} );
+
+ QUnit.test( 'List to text test', 4, function ( assert ) {
+ assert.equal( mw.language.listToText( [] ), '', 'Blank list' );
+ assert.equal( mw.language.listToText( ['a'] ), 'a', 'Single item' );
+ assert.equal( mw.language.listToText( ['a', 'b'] ), 'a and b', 'Two items' );
+ assert.equal( mw.language.listToText( ['a', 'b', 'c'] ), 'a, b and c', 'More than two items' );
+ } );
}( mediaWiki, jQuery ) );
// Confirm that mw.loader.load() works with protocol-relative URLs
target = target.replace( /https?:/, '' );
- assert.equal( target.substr( 0, 2 ), '//',
+ assert.equal( target.slice( 0, 2 ), '//',
'URL must be relative to test relative URLs!'
);
/*global isCompatible: true */
( function ( $ ) {
var testcases = {
- // Supported: Compatible
gradeA: [
// Chrome
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16',
'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1',
// Safari 5.0+
'Mozilla/5.0 (Macintosh; I; Intel Mac OS X 10_6_7; ru-ru) AppleWebKit/534.31+ (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1',
- // Opera 11+
- 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10',
+ // Opera 12+ (Presto-based)
+ 'Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00',
+ 'Opera/9.80 (Windows NT 5.1) Presto/2.12.388 Version/12.17',
+ // Opera 15+ (Chromium-based)
+ 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 OPR/15.0.1147.153',
+ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36 OPR/16.0.1196.62',
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36 OPR/23.0.1522.75',
// Internet Explorer 7+
'Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0; en-US)',
'Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; Media Center PC 4.0; SLCC1; .NET CLR 3.0.04320)',
// Android
'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Nexus One Build/ERD62) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17'
],
- // Supported: Uncompatible, serve basic content
gradeC: [
// Internet Explorer < 7
'Mozilla/2.0 (compatible; MSIE 3.03; Windows 3.1)',
'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98;)',
'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)',
- // Firefox < 3.6
+ // Firefox < 3
'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.2) Gecko/20060308 Firefox/1.5.0.2',
'Mozilla/5.0 (X11; U; Linux i686; nl; rv:1.8.1.1) Gecko/20070311 Firefox/2.0.0.1',
+ // Opera < 12
+ 'Mozilla/5.0 (Windows NT 5.0; U) Opera 7.54 [en]',
+ 'Opera/7.54 (Windows NT 5.0; U) [en]',
+ 'Mozilla/5.0 (Windows NT 5.1; U; en) Opera 8.0',
+ 'Opera/8.0 (X11; Linux i686; U; cs)',
+ 'Opera/9.00 (X11; Linux i686; U; de)',
+ 'Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1',
+ 'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.2.15 Version/10.00',
+ 'Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10',
+ 'Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62',
// BlackBerry < 6
'BlackBerry9300/5.0.0.716 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/133',
'BlackBerry7250/4.0.0 Profile/MIDP-2.0 Configuration/CLDC-1.1',
// Google Glass
'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Glass 1 Build/IMM76L; XE11) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'
],
- // No explicit support for or against these browsers, they're
- // given a shot at Grade A at their own risk.
+ // No explicit support for or against these browsers, they're given a shot at Grade A.
gradeX: [
// Firefox 3.6
'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3',
*/
interface ITestRecorder {
- /** Called at beginning of the parser test run */
+ /**
+ * Called at beginning of the parser test run
+ */
public function start();
- /** Called after each test */
+ /**
+ * Called after each test
+ * @param string $test
+ * @param bool $result
+ */
public function record( $test, $result );
- /** Called before finishing the test run */
+ /**
+ * Called before finishing the test run
+ */
public function report();
- /** Called at the end of the parser test run */
+ /**
+ * Called at the end of the parser test run
+ */
public function end();
}
/**
* This should be called before the table prefix is changed
+ * @param TestRecorder $parent
*/
function __construct( $parent ) {
parent::__construct( $parent );
* Returns a string giving information about when a test last had a status change.
* Could help to track down when regressions were introduced, as distinct from tests
* which have never passed (which are more change requests than regressions).
+ * @param string $testname
+ * @param string $after
+ * @return string
*/
private function getTestStatusInfo( $testname, $after ) {
// If we're looking at a test that has just been removed, then say when it first appeared.
$input = $this->checkSection( array( 'wikitext', 'input' ), false );
$result = $this->checkSection( array( 'html/php', 'html/*', 'html', 'result' ), false );
// some tests have "with tidy" and "without tidy" variants
- $tidy = $this->checkSection( array( 'html/php+tidy', 'html+tidy'), false );
+ $tidy = $this->checkSection( array( 'html/php+tidy', 'html+tidy' ), false );
if ( $tidy != false ) {
if ( $this->nextSubTest == 0 ) {
if ( $result != false ) {
function readNextTest() {
# Run additional subtests of previous test
- while ( $this->nextSubTest > 0 )
- if ( $this->setupCurrentTest() )
+ while ( $this->nextSubTest > 0 ) {
+ if ( $this->setupCurrentTest() ) {
return true;
+ }
+ }
$this->clearSection();
# Reset hooks for the delayed test object
if ( $this->section == 'end' ) {
$this->checkSection( 'test' );
do {
- if ( $this->setupCurrentTest() )
+ if ( $this->setupCurrentTest() ) {
return true;
+ }
} while ( $this->nextSubTest > 0 );
# go on to next test (since this was disabled)
$this->clearSection();
* mentioned before closing this section
* @param bool $fatal True iff an exception should be thrown if
* the section is not found.
+ * @return bool|string
*/
private function checkSection( $tokens, $fatal = true ) {
if ( is_null( $this->section ) ) {
* Called whenever we actually want to run the hook.
* Should be the case if we found the parserTest is not disabled
* @param ParserTest|NewParserTest $parserTest
+ * @return bool
*/
public function unleash( &$parserTest ) {
if ( !( $parserTest instanceof ParserTest || $parserTest instanceof NewParserTest ) ) {