Merge "watcheditem: Do not create the same TitleValue object twice"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 10 Jun 2019 20:27:02 +0000 (20:27 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 10 Jun 2019 20:27:02 +0000 (20:27 +0000)
118 files changed:
.travis.yml
RELEASE-NOTES-1.33 [deleted file]
RELEASE-NOTES-1.34
docs/extension.schema.v1.json
docs/extension.schema.v2.json
includes/DefaultSettings.php
includes/ForeignResourceManager.php
includes/Pingback.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBase.php
includes/api/i18n/it.json
includes/api/i18n/pl.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/cache/BacklinkCache.php
includes/cache/LinkBatch.php
includes/context/RequestContext.php
includes/db/DatabaseOracle.php
includes/deferred/LinksUpdate.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/DatabaseUpdater.php
includes/installer/i18n/ia.json
includes/installer/i18n/uk.json
includes/libs/objectcache/BagOStuff.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMssql.php
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/DatabaseSqlite.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/database/IMaintainableDatabase.php
includes/logging/LogPage.php
includes/logging/ManualLogEntry.php
includes/objectcache/SqlBagOStuff.php
includes/page/WikiPage.php
includes/registration/ExtensionJsonValidator.php
includes/session/SessionBackend.php
includes/skins/SkinTemplate.php
includes/specialpage/SpecialPage.php
includes/specials/SpecialUserLogout.php
includes/tidy/RemexCompatMunger.php
includes/tidy/RemexMungerData.php
includes/upload/UploadBase.php
includes/user/User.php
includes/watcheditem/WatchedItemStore.php
languages/i18n/ar.json
languages/i18n/ast.json
languages/i18n/awa.json
languages/i18n/bcc.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/co.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/exif/bg.json
languages/i18n/exif/mk.json
languages/i18n/exif/sdc.json [new file with mode: 0644]
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/fy.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lzh.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/my.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nqo.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ru.json
languages/i18n/sdc.json
languages/i18n/sh.json
languages/i18n/sl.json
languages/i18n/sv.json
languages/i18n/th.json
languages/i18n/uk.json
languages/i18n/vi.json
languages/i18n/wo.json
languages/i18n/yo.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/Maintenance.php
maintenance/importImages.php
maintenance/populateCategory.php
maintenance/populateInterwiki.php
maintenance/populateIpChanges.php
resources/src/jquery/jquery.suggestions.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.page.ready.js
tests/phpunit/data/upload/jpeg-a-href-in-metadata.jpg [new file with mode: 0644]
tests/phpunit/data/upload/png-embedded-breaks-ie5.png [new file with mode: 0644]
tests/phpunit/data/upload/png-plain.png [new file with mode: 0644]
tests/phpunit/includes/resourceloader/DerivativeResourceLoaderContextTest.php
tests/phpunit/includes/session/SessionBackendTest.php
tests/phpunit/includes/upload/UploadBaseTest.php
tests/selenium/specs/rollback.js

index e4a173d..ada60e4 100644 (file)
@@ -58,6 +58,7 @@ addons:
     - tidy
 
 before_script:
+  - echo 'opcache.enable_cli = 1' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini
   - composer install --prefer-source --quiet --no-interaction
   - if [ "$dbtype" = postgres ]; then psql -c "CREATE DATABASE traviswiki WITH OWNER travis;" -U postgres; fi
   - >
diff --git a/RELEASE-NOTES-1.33 b/RELEASE-NOTES-1.33
deleted file mode 100644 (file)
index f9826e2..0000000
+++ /dev/null
@@ -1,493 +0,0 @@
-= MediaWiki 1.33 =
-
-== MediaWiki 1.33.0-PRERELEASE ==
-
-THIS IS NOT A RELEASE YET
-
-MediaWiki 1.33 is a pre-release testing branch, and is not recommended for use
-in production.
-
-== Upgrading notes for 1.33 ==
-1.33 has several database changes since 1.32, and will not work without schema
-updates. Note that due to changes to some very large tables like the revision
-table, the schema update may take quite long (minutes on a medium sized site,
-many hours on a large site).
-
-Don't forget to always back up your database before upgrading!
-
-See the file UPGRADE for more detailed upgrade instructions, including
-important information when upgrading from versions prior to 1.11.
-
-Some specific notes for MediaWiki 1.33 upgrades are below:
-
-* Some external link searches will not work correctly until update.php (or
-  refreshExternallinksIndex.php) is run. These include searches for links using
-  IP addresses, internationalized domain names, and possibly mailto links.
-* If you ran migrateActors.php using an older version of MediaWiki and want to
-  run your wiki with $wgActorTableSchemaMigrationStage SCHEMA_COMPAT_READ_OLD,
-  note that log_search rows needed to find revision deletions by target user
-  were incorrectly deleted. See T215464 for details.
-* If revision deletions were performed when the wiki was configured with
-  $wgActorTableSchemaMigrationStage SCHEMA_COMPAT_WRITE_BOTH and without
-  migrateActors.php having been run, the log_search table may contain rows with
-  empty values for "target_author_actor" which will prevent log searches for
-  revision deletions by target user from finding those log entries. These rows
-  may be corrected by (re-)running migrateActors.php.
-
-For notes on 1.32.x and older releases, see HISTORY.
-
-=== Configuration changes for system administrators in 1.33 ===
-
-==== New configuration ====
-* $wgEnablePartialBlocks – This enables the Partial Blocks feature, which gives
-  accounts with block permissions the ability to block users, IPs, and IP ranges
-  from editing specific pages, while allowing them to edit the rest of the wiki.
-  It is a temporary setting for gradual enablement, current default to `false`,
-  and will be set to `true` and then removed once initial development completes.
-
-==== Changed configuration ====
-* $wgChangeTagsSchemaMigrationStage (T193868) — This temporary setting, added in
-  MediaWiki 1.32, now defaults to MIGRATION_NEW instead of MIGRATION_WRITE_BOTH.
-* $wgPasswordPolicy – There is a new password policy to check that the account's
-  password is not in the large blacklist. This is enabled by default for the
-  built-in user groups bureaucrat, sysop, interface-admin, and bot. To configure
-  this for other user groups, set the `PasswordNotInLargeBlacklist` flag `true`.
-* wgPasswordDefault – There is a new password type configuration using Argon2
-  password hashing (which requires PHP 7.2 and above). It's designed to resist
-  timing attacks, and (on systems with PHP 7.3+) GPU hacking; if you configure
-  argon2 to be used, by default, it will automatically choose the best available
-  algorithm depending on which version of PHP you have available. To use this,
-  you can set `$wgPasswordDefault = 'argon2';`.
-* $wgActorTableSchemaMigrationStage now defaults to reading the new schema.
-  update.php will back-populate the new database fields due to the changed
-  setting, which may take some time on large wikis. You can avoid downtime by
-  following a process like that described in T188327.
-
-==== Removed configuration ====
-* $wgTagStatisticsNewTable (T199334) — This temporary setting, added in
-  MediaWiki 1.32, has now been removed. When loading Special:Tags, MediaWiki
-  will now always use the `change_tag_def` instead of the `change_tag` table.
-* $wgUseTidy, $wgTidyBin, $wgTidyConf, $wgTidyOpts, $wgTidyInternal, and
-  $wgDebugTidy – These options, all deprecated since 1.26, have now all been
-  removed, as MediaWiki now always tidies user output. The $wgTidyConfig setting
-  remains only for experimental features and debugging, and should not be used.
-* $wgEnableParserCache – This setting has been deprecated since 1.26, has now
-  been removed. If you still desire to disable the parser cache, instead you can
-  set `$wgParserCacheType = CACHE_NONE;`.
-* $wgCommentTableSchemaMigrationStage – This temporary migration setting has now
-  been removed. Code finding it unset should treat it as being MIGRATION_NEW.
-* $wgAuth – This old setting, deprecated in 1.27, has been removed as part of
-  the removal of AuthPlugin.
-* $wgSitesCacheFile – This configuration was introduced in 1.25 with the intent
-  to allow sites to configure a file in which to cache the SiteStore database
-  table, but it was never used. SiteStore already caches its information by
-  default using BagOStuff (e.g. Memcached or APC).
-* $wgClockSkewFudge – This setting was used by User.php to let sites adjust by
-  how much MediaWiki would fudge when trying to minimize the chances of a
-  user.user_touched database update to the "current" timestamp being before the
-  value already there (e.g. due to clock skew between different servers). This
-  is no longer a problem, because the code now ensures the timestamp is always
-  higher than the previous one. The writes are guarded with CAS logic (check
-  and set), which prevents updates that would overlap.
-* $wgDBmysql5 (T196185) - This experimental setting, deprecated in 1.31, has
-  been removed.
-
-=== New user-facing features in 1.33 ===
-* (T96041) __EXPECTUNUSEDCATEGORY__ on a category page causes the category
-  to be hidden on Special:UnusedCategories.
-* (T210814) SVGs are now by default displayed in wiki language on image
-  pages.
-* Special:CreateAccount now warns the user if their chosen username has to be
-  normalized.
-* (T205040) Multilingual images are now be displayed in the current parse
-  language where available.
-* Special:ActiveUsers will no longer filter out users who became inactive since
-  the last time the active users query cache was updated.
-* (T215675) RecentChange and ManualLogEntry implement new Taggable interface.
-* (T215675) Added a hook, ManualLogEntryBeforePublish, to allow extensions
-  to modify (example: add tags) log entries.
-
-=== New developer features in 1.33 ===
-* The AuthManagerLoginAuthenticateAudit hook has a new parameter for
-  additional information about the authentication event.
-* TextContent::getText() was introduced as a replacement for
-  Content::getNativeData() for text-based content models.
-* (T214706) LinksUpdate::getAddedExternalLinks() and
-  LinksUpdate::getRemovedExternalLinks() were introduced.
-* (T213893) Added 'MaintenanceUpdateAddParams' hook
-* (T219655) The MarkPatrolled hook has a new parameter for the tags
-  associated with this entry in the patrol log.
-* (T212472) Extensions can now specify platform abilities they require to work,
-  limited to shell access for now.
-
-=== External library changes in 1.33 ===
-
-==== New external libraries ====
-* Added wikimedia/password-blacklist 0.1.4.
-* Added guzzlehttp/guzzle 6.3.3.
-* Added jakub-onderka/php-console-highlighter 0.3.2 explicitly (dev-only).
-
-==== Changed external libraries ====
-* Updated OOUI from v0.29.2 to v0.31.2.
-* Updated OOjs Router from pre-release to v0.2.0.
-* Updated moment from v2.19.3 to v2.24.0.
-* Updated wikimedia/xmp-reader from 0.6.0 to 0.6.2.
-* Updated wikimedia/scoped-callback from 2.0.0 to 3.0.0.
-* Updated wikimedia/ip-set from 1.2.0 to 2.0.1.
-  * The deprecated IPSet\IPSet alias was removed, Wikimedia\IPSet must be
-    used instead.
-* Updated qunitjs from 2.6.2 to 2.9.1.
-* Updated jquery-client from 2.0.1 to 2.0.2.
-* Updated psy/psysh from 0.9.6 to 0.9.9 (dev-only).
-* Updated nikic/php-parser from 3.1.3 to 3.1.5 (dev-only).
-* Updated pear/net_smtp from 1.8.0 to 1.8.1.
-* Updated cssjanus/cssjanus from 1.2.0 to 1.2.1.
-* Updated wikimedia/php-session-serializer from 1.0.6 to 1.0.7.
-
-==== Removed external libraries ====
-* (T219403) jquery.ui.spinner, deprecated since 1.31, was removed.
-
-=== Bug fixes in 1.33 ===
-* (T164211) Special:UserRights could sometimes fail with a
-  "conflict detected" error when there weren't any conflicts.
-* (T216029) Chrome redirects to Special:BadTitle after editing a section with
-  a non-Latin name on a page with non-Latin characters in title.
-
-=== Action API changes in 1.33 ===
-* (T198913) Added 'ApiOptions' hook.
-* The JSON formatversion=2 is no longer experimental.
-* Internal API errors (those with code beginning "internal_api_error") will
-  include the exception class name in a data field named "errorclass".
-  * Class names are not guaranteed to remain stable, and in particular database
-    exceptions will now include the "Wikimedia\Rdbms\" prefix in the class name.
-  * The code including an exception class name is deprecated. In the future,
-    all internal errors will use code "internal_api_error".
-* (T212356) When using action=delete on pages with many revisions, the module
-  may return a boolean-true 'scheduled' and no 'logid'. This signifies that the
-  deletion will be processed via the job queue.
-* action=setnotificationtimestamp will now update the watchlist asynchronously
-  if entirewatchlist is set, so updates may not be visible immediately
-* Block info will be added to "blocked" errors from more modules.
-* (T216245) Autoblocks will now be spread by action=edit and action=move.
-* action=query&meta=userinfo has a new uiprop, 'latestcontrib', that returns
-  the date of user's latest contribution.
-* (T25227) action=logout now requires to be posted and have a csrf token.
-
-=== Action API internal changes in 1.33 ===
-* A number of deprecated methods for API documentation, intended for overriding
-  by extensions, are no longer called by MediaWiki, and will emit deprecation
-  notices if your extension attempts to use them:
-  * ApiBase::getDescription() (deprecated in 1.25)
-  * ApiBase::getParamDescription() (deprecated in 1.25)
-  * ApiBase::getExamples() (deprecated in 1.25)
-  * ApiBase::getDescriptionMessage() (deprecated in 1.30)
-  Additionally, the  'APIGetDescription' and 'APIGetParamDescription' hooks have
-  been removed, as their only use was to let extensions override values returned
-  by getDescription() and getParamDescription(), respectively.
-* API error codes may only contain ASCII letters, numbers, underscore, and
-  hyphen. Methods such as ApiBase::dieWithError() and
-  ApiMessageTrait::setApiCode() will throw an InvalidArgumentException if
-  passed a bad code.
-* ApiBase::checkTitleUserPermissions() now takes an options array as its third
-  parameter. Passing a User object or null is deprecated.
-* The api-feature-usage log channel now has log context. The text message is
-  deprecated and will be removed in the future.
-
-=== Languages updated in 1.33 ===
-MediaWiki supports over 350 languages. Many localisations are updated regularly.
-Below only new and removed languages are listed, as well as changes to languages
-because of Phabricator reports.
-
-* (T203908) Added language support for Eastern Pwo (kjp).
-* (T213717) Fixed a translation error on Goan Konkani (gom-deva) translations
-  for NS_TEMPLATE.
-* (T212221) Added $digitTransformTable for Santali (sat).
-* (T216479) Added language support for Saisiyat (xsy).
-* (T219728) Added support for new Japanese era name "Reiwa"
-
-=== Breaking changes in 1.33 ===
-* The parameteter $lang in DifferenceEngine::setTextLanguage must be of type
-  Language. Other types are deprecated since 1.32.
-* Skin::doEditSectionLink requires type Language for the parameter $lang.
-  The parameters $tooltip and $lang are mandatory. Omitting the parameters is
-  deprecated since 1.32.
-* Language::truncate(), deprecated in 1.31, has been removed.
-* UtfNormal, deprecated in 1.25, was removed. Use UtfNormal\Validator directly
-  instead.
-* (T197179) In OOUI HTMLForm fields, the parameters 'notice', 'notice-messages',
-  and 'notice-message', which were deprecated in 1.32, were removed. Instead,
-  use 'help', 'help-message', and 'help-messages'.
-* (T197179) HTMLFormField::getNotices(), deprecated in 1.32, was removed.
-* The "Parsoid v1" compatibility mappings in ParsoidVirtualRESTService and
-  RestbaseVirtualRESTService, deprecated since 1.26, have been removed.
-  Use the RESTBase v1 or Parsoid v3 API instead.
-* ParserOptions defaults 'tidy' to true now, since the untidy modes of the
-  parser are being deprecated and ParserOptions::getCanonicalOverrides()
-  has always been true at any rate.
-* Support for disabling tidy and external tidy implementations has been removed.
-  This was deprecated in 1.32. The pure PHP Remex tidy implementation is now
-  used and no configuration is necessary.
-* A number of deprecated methods for API documentation, intended for overriding
-  by extensions, are no longer called by MediaWiki, and will emit deprecation
-  notices if your extension attempts to use them:
-  * ApiBase::getDescription() (deprecated in 1.25)
-  * ApiBase::getParamDescription() (deprecated in 1.25)
-  * ApiBase::getExamples() (deprecated in 1.25)
-  * ApiBase::getDescriptionMessage() (deprecated in 1.30)
-  Additionally, the  'APIGetDescription' and 'APIGetParamDescription' hooks have
-  been removed, as their only use was to let extensions override values returned
-  by getDescription() and getParamDescription(), respectively.
-* The authentication hooks 'AbortAutoAccount' 'AbortNewAccount', 'AbortLogin',
-  'LoginUserMigrated', 'UserCreateForm', and 'UserLoginForm', all deprecated by
-  the creation of AuthManager in 1.27, have been removed. This also means that
-  the FakeAuthTemplate and LoginForm classes are removed, that FakeAuthTemplate
-  is no longer passed into LoginSignupSpecialPage->getFieldDefinitions(), and
-  that LoginSignupSpecialPage->getBCFieldDefinitions() is removed.
-* The 'jquery.localize' module, deprecated in 1.32, has been removed. Instead,
-  use 'jquery.i18n'.
-* The hooks LanguageGetSpecialPageAliases and LanguageGetMagic, deprecated since
-  1.16, have now been removed. Instead, use $specialPageAliases or $magicWords
-  respectively in a $wgExtensionMessagesFiles file.
-* The following methods of the Preferences class, deprecated in 1.31, have been
-  removed:
-  * getSaveBlacklist()
-  * loadPreferenceValues()
-  * getOptionFromUser()
-  * profilePreferences()
-  * skinPreferences()
-  * filesPreferences()
-  * datetimePreferences()
-  * renderingPreferences()
-  * editingPreferences()
-  * rcPreferences()
-  * watchlistPreferences()
-  * searchPreferences()
-  * miscPreferences()
-  * generateSkinOptions()
-  * getDateOptions()
-  * getImageSizes()
-  * getThumbSizes()
-  * validateSignature()
-  * cleanSignature()
-  * getTimezoneOptions()
-  * filterIntval()
-  * filterTimezoneInput()
-  * getTimeZoneList()
-* mw.util.jsMessage(), deprecated in 1.20, was removed. Use mw.notify instead.
-* (T61113) User::EDIT_TOKEN_SUFFIX was removed. It was deprecated since 1.27.
-* The 'mediawiki.api' module aliases, deprecated in 1.32, have been removed.
-  Specifically: mediawiki.api.category, mediawiki.api.edit,
-  mediawiki.api.login, mediawiki.api.options, mediawiki.api.parse,
-  mediawiki.api.upload, mediawiki.api.user, mediawiki.api.watch,
-  mediawiki.api.messages, and mediawiki.api.rollback.
-* The 'jquery.byteLimit' module alias for 'jquery.lengthLimit',
-  deprecated in 1.31, was removed.
-* Revision::fetchRevision(), deprecated in 1.28, was removed.
-* Class SquidUpdate, deprecated in 1.27, was removed.
-* Title->getSquidURLs(), deprecated in 1.27, was removed. Instead, use
-  Title->getCdnUrls().
-* Title::escapeFragmentForURL(), deprecated in 1.30, was removed. Use
-  Sanitizer::escapeIdForLink() or escapeIdForExternalInterwiki() instead.
-* Title->canTalk(), deprecated in 1.30, was removed. Instead, use
-  Title->canHaveTalkPage().
-* Title's methods for site and user page related to CSS and JS, deprecated in
-  1.31, were removed:
-  * Title->isCssOrJsPage() — Use Title->isSiteConfigPage()
-  * Title->isCssJsSubpage() – Use Title->isUserConfigPage()
-  * Title->getSkinFromCssJsSubpage() – Use Title->getSkinFromConfigSubpage()
-  * Title->isCssSubpage() – Use Title->isUserCssConfigPage()
-  * Title->isJsSubpage() – Use Title->isUserJsConfigPage()
-* SiteSQLStore, deprecated in 1.27 and whose only method, ::newInstance(),
-  would return the global SiteStore instance, has been removed. You can get to
-  this via MediaWiki\MediaWikiServices::getInstance()->getSiteStore() directly.
-* Linker::formatSize, deprecated in 1.28, has been removed (with DummyLinker's).
-  Instead, use Language->formatSize() with the relevant Language object.
-* Linker::formatTemplates, deprecated in 1.28, has been removed (along with the
-  version in DummyLinker). You can use TemplatesOnThisPageFormatter directly.
-* EventRelayerGroup::singleton(), deprecated in 1.27, has been removed. You can
-  use MediaWikiServices::getInstance()->getEventRelayerGroup() directly.
-* LinkCache->addLink(), deprecated in 1.27, has been removed. It is thought to
-  be unused, and is distinct from OutputPage->addLink(), which remains.
-* JsonContent->getJsonData(), deprecated in 1.25, has been removed. Instead, use
-  JsonContent->getData().
-* MWExceptionHandler::getLogId(), deprecated in 1.27, has been removed, as the
-  exception ID is the same as the request ID, from WebRequest::getRequestId().
-* SearchEngine::getNearMatchResultSet(), deprecated in 1.27, has been removed.
-  You can use SearchEngine::getNearMatcher() instead.
-* EmailNotification::updateWatchlistTimestamp, deprecated in 1.27, has been
-  removed. Instead, use WatchedItemStore::updateNotificationTimestamp directly.
-* User::getGroupName() and ::getGroupMember(), both deprecated in 1.29, have
-  been removed. Instead, please use UserGroupMembership::getGroupName() and
-  UserGroupMembership::getGroupMemberName().
-* Backwards compatibility for setting wgSessionsInObjectCache to false or using
-  wgSessionHandler, both of which were deprecated in 1.27 with the introduction
-  of SessionManager, has been removed.
-* SessionManager::autoCreateUser, deprecated in 1.27, has been removed. Use
-  MediaWiki\Auth\AuthManager::autoCreateUser instead.
-* The mw.libs.jpegmeta property, deprecated in 1.31, was removed.
-  Use require( 'mediawiki.libs.jpegmeta' ) instead.
-* The mw.user.stickyRandomId() method, deprecated in 1.32, was removed.
-  Use mw.user.getPageviewToken() instead.
-* Removed deprecated class property WikiRevision::$importer.
-* ResourceLoaderFileModule::readStyleFiles() now requires its $context
-  parameter.
-* The ChangeList::insertArticleLink() method, that was deprecated in 1.27, has
-  been removed.
-* MessageBlobStore::__construct() now requires its $rl parameter.
-* Second parameter to Sanitizer::escapeIdReferenceList() (deprecated in 1.31)
-  has been removed.
-* The 'jquery.xmldom' module has been removed.
-* The 'jquery.mockjax' module has been removed.
-* The 'jquery.hidpi' module, deprecated in 1.32, has been removed.
-* AuthPlugin and related code, deprecated in 1.27, has been removed. Extensions
-  should instead use AuthManager. The following no longer exist:
-  * The AuthPlugin class itself and the related AuthPluginUser class and i18n
-  * The AuthPluginSetup and AuthPluginAutoCreate hooks
-  * The transitional wrapper classes AuthPluginPrimaryAuthenticationProvider,
-    AuthManagerAuthPlugin, and AuthManagerAuthPluginUser.
-  * The $wgAuth configuration setting and its use in Setup.php and unit tests
-* (T217772) The 'wgAvailableSkins' mw.config key in JavaScript, was removed.
-* Language::markNoConversion, deprecated in 1.32, has been removed. Use
-  LanguageConverter::markNoConversion instead.
-* BagOStuff::modifySimpleRelayEvent() method has been removed.
-* ParserOutput::getLegacyOptions, deprecated in 1.30, has been removed.
-  Use ParserOutput::allCacheVaryingOptions instead.
-* CdnCacheUpdate::newSimplePurge, deprecated in 1.27, has been removed.
-  Use CdnCacheUpdate::newFromTitles() instead.
-* Handling of multiple arguments by the Block constructor, deprecated in 1.26,
-  has been removed.
-* The translation of main page in Sardinian (sc) was changed from "Pàgina Base"
-  to "Pàgina printzipale". Existing wikis using this content language need to
-  move the main page or change the name through MediaWiki:Mainpage page.
-* wfSplitWikiID(), deprecated in 1.32, has been removed.
-* MessageBlobStore::getBlob(), deprecated in 1.27, has been removed.
-  Use ::getBlobs() instead.
-* The .background-size() LESS mixin, deprecated in 1.27, has been removed.
-* ReadOnlyMode::clearCache() and ConfiguredReadOnlyMode::clearCache() have been
-  removed. Use MediaWikiTestCase::overrideMwServices() instead.
-
-=== Deprecations in 1.33 ===
-* The configuration option $wgUseESI has been deprecated, and is expected
-  to be removed in a future release.
-* The configuration option $wgSquidPurgeUseHostHeader has been deprecated,
-  and is expected to be removed in a future release.
-* The configuration options $wgFixArabicUnicode and $wgFixMalayalamUnicode,
-  introduced in MW 1.17, have been deprecated.  These fixes will always be
-  applied for Arabic and Malayalam in the future.  Please enable these on
-  your local wiki (if you have them explicitly set to false) and run
-  maintenance/cleanupTitles.php to fix any existing page titles.
-* The LegacyHookPreAuthenticationProvider class, deprecated since its creation
-  in 1.27 as part of the AuthManager re-write, now emits deprecation warnings.
-  This will help identify the issue if you added it to $wgAuthManagerConfig.
-* wfSplitWikiId() is now deprecated. Cache key generation should have the wiki
-  domain ID as a key component and use makeGlobalKey().
-* (T202094) Title::getUserCaseDBKey() is deprecated; instead, please use
-  Title::getDBKey(), which doesn't vary case.
-* User::getPasswordValidity() is now deprecated. User::checkPasswordValidity()
-  returns the same information in a more useful format.
-* For Linker::generateTOC() and Linker::tocList(), passing strings or booleans
-  as the $lang parameter was deprecated. The same applies to DummyLinker.
-* The PasswordPolicy 'PasswordCannotBePopular' has been deprecated. To
-  follow best practices, it is reccommended to use 'PasswordNotInLargeBlacklist'
-  instead which blacklists 100,000 commonly used passwords.
-* (T208862) Action::requiresUnblock() is now called from
-  Title::getUserPermissionsErrors() and Title::userCan(). Previously, the method
-  was only called in Action::checkCanExecute(). Actions should ensure that their
-  requiresUnblock() returns the proper result (the default is `true`).
-* (T211608) The MediaWiki\Services namespace has been renamed to
-  Wikimedia\Services. The old name is still supported, but deprecated.
-* (T155582) Content::getNativeData has been deprecated. Please use model-
-  specific getters, such as TextContent::getText().
-* The class WebInstallerOutput is now marked as @private.
-* (T209699) The jquery.async module has been deprecated. JavaScript code that
-  needs asynchronous behaviour should use Promises.
-* Password::equals() is deprecated, use verify().
-* BaseTemplate::msgWiki() and QuickTemplate::msgWiki() will be removed. Use
-  other means to fetch a properly escaped message string or Message object.
-* (T126091) The 'ResourceLoaderTestModules' hook, which lets you declare QUnit
-  testing code for your JavaScript modules, is deprecated. Instead, you can now
-  use the new extension registration key 'QUnitTestModule'.
-* (T213426) The jquery.throttle-debounce module has been deprecated. JavaScript
-  code that needs this behaviour should use OO.ui.debounce/throttle.
-* The mw.language.specialCharacters property from the
-  'mediawiki.language.specialCharacters' module has been deprecated.
-  Use require( 'mediawiki.language.specialCharacters' ) instead.
-* ChangeTags::purgeTagUsageCache() has been deprecated, and is expected to be
-  removed in a future release.
-* Passing a User object or null as the third parameter to
-  ApiBase::checkTitleUserPermissions() has been deprecated. Pass an array
-  [ 'user' => $user ] instead.
-* (T211578) Block::prevents is deprecated. Use Block::isEmailBlocked,
-  Block::isCreateAccountBlocked and Block::isUsertalkEditAllowed to get and set
-  block properties; use Block::appliesToRight and Block::appliesToUsertalk to
-  check block behaviour.
-* The api-feature-usage log channel now has log context. The text message is
-  deprecated and will be removed in the future.
-* The FileBasedSiteLookup class has been deprecated. For a cacheable SiteLookup
-  implementation, use CachingSiteStore instead.
-* Language::viewPrevNext function is deprecated, use
-  SpecialPage::buildPrevNextNavigation instead
-* ManualLogEntry::setTags() is deprecated, use ManualLogEntry::addTags()
-  instead. The setTags() method was overriding the tags, addTags() doesn't
-  override, only adds new tags.
-* Block::isValid is deprecated, since it is no longer needed in core.
-* Calling Maintenance::hasArg() as well as Maintenance::getArg() with no
-  parameter has been deprecated. Please pass the argument number 0.
-* ResourceLoaderContext::expandModuleNames has been deprecated.
-  Use ResourceLoader::expandModuleNames instead.
-
-=== Other changes in 1.33 ===
-* (T201747) Html::openElement() warns if given an element name with a space
-  in it.
-* The implementation of buildStringCast() in Wikimedia\Rdbms\Database has
-  changed to explicitly cast. Subclasses relying on the base-class
-  implementation should check whether they need to override it now.
-* BagOStuff::add is now abstract and must explicitly be defined in subclasses.
-* LinksDeletionUpdate is now a subclass of LinksUpdate. As a consequence,
-  the following hooks will now be triggered upon page deletion in addition
-  to page updates: LinksUpdateConstructed, LinksUpdate, LinksUpdateComplete.
-  LinksUpdateAfterInsert is not triggered since deletions do not cause
-  insertions into links tables.
-* Category::newFromID( $id )->getID() will now return $id without any
-  validation, to avoid a mostly unnecessary DB query.
-* On Special:Version, the name for an extension can no longer be arbitrary
-  html when no link is specified.
-
-== Compatibility ==
-MediaWiki 1.33 requires PHP 7.0.13 or later. Although HHVM 3.18.5 or later is
-supported, it is generally advised to use PHP 7.0.13 or later for long term
-support.
-
-MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
-but support for them is somewhat less mature. There is experimental support for
-Oracle and Microsoft SQL Server.
-
-The supported versions are:
-
-* MySQL 5.5.8 or later
-* PostgreSQL 9.2 or later
-* SQLite 3.8.0 or later
-* Oracle 9.0.1 or later
-* Microsoft SQL Server 2005 (9.00.1399)
-
-== Online documentation ==
-Documentation for both end-users and site administrators is available on
-MediaWiki.org, and is covered under the GNU Free Documentation License (except
-for pages that explicitly state that their contents are in the public domain):
-
-       https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation
-
-== Mailing list ==
-A mailing list is available for MediaWiki user support and discussion:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
-
-A low-traffic announcements-only list is also available:
-
-       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
-
-It's highly recommended that you sign up for one of these lists if you're
-going to run a public MediaWiki, so you can be notified of security fixes.
-
-== IRC help ==
-There's usually someone online in #mediawiki on irc.freenode.net.
index dca64bd..76fa583 100644 (file)
@@ -42,6 +42,13 @@ For notes on 1.33.x and older releases, see HISTORY.
   variable $wgCdnMaxageLagged. The previous configuration variable names are
   deprecated, but will be used as the fall back if they are still set.
   Note that wgSquidPurgeUseHostHeader has not been renamed, as it is deprecated.
+* (T27707) File type checks for image uploads have been relaxed to allow files
+  containing some HTML markup in metadata. As a result, the $wgAllowTitlesInSVG
+  setting is no longer applied and is now always true. Note that MSIE 7 may
+  still be able to misinterpret certain malformed PNG files as HTML.
+* Introduced $wgVerifyMimeTypeIE to allow disabling the MSIE 6/7 file type
+  detection heuristic on upload, which is more conservative than the checks
+  that were changed above.
 * …
 
 ==== Removed configuration ====
@@ -193,6 +200,8 @@ because of Phabricator reports.
   directly.
 * HTMLForm::getErrors(), deprecated in 1.28, has been removed. Use
   getErrorsOrWarnings() instead.
+* SpecialPage::getTitle(), deprecated in 1.23, has been removed. Use
+  SpecialPage::getPageTitle() instead.
 * …
 
 === Deprecations in 1.34 ===
index cf02f2b..86fa1b3 100644 (file)
                },
                "ParserTestFiles": {
                        "type": "array",
-                       "description": "Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
+                       "description": "DEPRECATED: Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
                },
                "ServiceWiringFiles": {
                        "type": "array",
index f29f850..6076581 100644 (file)
                },
                "ParserTestFiles": {
                        "type": "array",
-                       "description": "Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
+                       "description": "DEPRECATED: Parser test suite files to be run by parserTests.php when no specific filename is passed to it"
                },
                "ServiceWiringFiles": {
                        "type": "array",
index ab1afe2..73d05ff 100644 (file)
@@ -1214,17 +1214,12 @@ $wgSVGMaxSize = 5120;
 $wgSVGMetadataCutoff = 262144;
 
 /**
- * Disallow <title> element in SVG files.
+ * Obsolete, no longer used.
+ * SVG file uploads now always allow <title> elements.
  *
- * MediaWiki will reject HTMLesque tags in uploaded files due to idiotic
- * browsers which can not perform basic stuff like MIME detection and which are
- * vulnerable to further idiots uploading crap files as images.
- *
- * When this directive is on, "<title>" will be allowed in files with an
- * "image/svg+xml" MIME type. You should leave this disabled if your web server
- * is misconfigured and doesn't send appropriate MIME types for SVG images.
+ * @deprecated 1.34
  */
-$wgAllowTitlesInSVG = false;
+$wgAllowTitlesInSVG = true;
 
 /**
  * Whether thumbnails should be generated in target language (usually, same as
@@ -1390,6 +1385,16 @@ $wgAntivirusRequired = true;
  */
 $wgVerifyMimeType = true;
 
+/**
+ * Determines whether extra checks for IE type detection should be applied.
+ * This is a conservative check for exactly what IE 6 or so checked for,
+ * and shouldn't trigger on for instance JPEG files containing links in EXIF
+ * metadata.
+ *
+ * @since 1.34
+ */
+$wgVerifyMimeTypeIE = true;
+
 /**
  * Sets the MIME type definition file to use by includes/libs/mime/MimeAnalyzer.php.
  * Set to null, to use built-in defaults only.
index dddbad5..80a12fe 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Maintenance
  */
 
+use Wikimedia\AtEase\AtEase;
+
 /**
  * Manage foreign resources registered with ResourceLoader.
  *
@@ -150,7 +152,7 @@ class ForeignResourceManager {
 
        /** @return string|false */
        private function cacheGet( $key ) {
-               return Wikimedia\quietCall( 'file_get_contents', "{$this->cacheDir}/$key.data" );
+               return AtEase::quietCall( 'file_get_contents', "{$this->cacheDir}/$key.data" );
        }
 
        private function cacheSet( $key, $data ) {
index f4e85ad..3b0ab2b 100644 (file)
@@ -196,7 +196,7 @@ class Pingback {
                                        'updatelog',
                                        [ 'ul_key' => 'PingBack', 'ul_value' => $id ],
                                        __METHOD__,
-                                       'IGNORE'
+                                       [ 'IGNORE' ]
                                );
 
                                if ( !$dbw->affectedRows() ) {
index f04ac66..b8672ee 100644 (file)
@@ -334,6 +334,12 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
                                        $this->setContinue( $row, $sortby );
                                        break;
                                }
+
+                               if ( $miser_ns !== null && !in_array( $row->page_namespace, $miser_ns ) ) {
+                                       // Miser mode namespace check
+                                       continue;
+                               }
+
                                $titles[] = Title::makeTitle( $row->page_namespace, $row->page_title );
                        }
                        $resultPageSet->populateFromTitles( $titles );
index 2505334..47ff0fb 100644 (file)
@@ -151,7 +151,8 @@ abstract class ApiQueryBase extends ApiBase {
 
        /**
         * Add a set of tables to the internal array
-        * @param string|string[] $tables Table name or array of table names
+        * @param string|array $tables Table name or array of table names
+        *  or nested arrays for joins using parentheses for grouping
         * @param string|null $alias Table alias, or null for no alias. Cannot be
         *  used with multiple tables
         */
index 6c83ca2..e29c34a 100644 (file)
        "apihelp-query+langlinks-paramvalue-prop-url": "Aggiunge l'URL completo.",
        "apihelp-query+langlinks-paramvalue-prop-autonym": "Aggiunge il nome nativo della lingua.",
        "apihelp-query+langlinks-param-dir": "La direzione in cui elencare.",
+       "apihelp-query+languageinfo-summary": "Restituisce informazioni sulle lingue disponibili.",
        "apihelp-query+languageinfo-paramvalue-prop-bcp47": "Il codice lingua BCP-47.",
+       "apihelp-query+languageinfo-example-simple": "Ottieni i codici lingua di tutte le lingue supportate.",
        "apihelp-query+links-param-namespace": "Mostra collegamenti solo in questi namespace.",
        "apihelp-query+links-param-limit": "Quanti collegamenti restituire.",
        "apihelp-query+links-param-dir": "La direzione in cui elencare.",
index f068ec0..e71a9dc 100644 (file)
        "apihelp-login-param-name": "Nazwa użytkownika.",
        "apihelp-login-param-password": "Hasło.",
        "apihelp-login-param-domain": "Domena (opcjonalnie).",
-       "apihelp-login-param-token": "Token logowania zdobyty w pierwszym zapytaniu.",
+       "apihelp-login-param-token": "Token logowania pobrany w pierwszym zapytaniu.",
        "apihelp-login-example-login": "Zaloguj się",
        "apihelp-logout-summary": "Wyloguj i wyczyść dane sesji.",
        "apihelp-logout-example-logout": "Wyloguj obecnego użytkownika.",
        "api-help-param-multi-all": "Aby wskazać wszystkie wartości, użyj <kbd>$1</kbd>.",
        "api-help-param-default": "Domyślnie: $1",
        "api-help-param-default-empty": "Domyślnie: <span class=\"apihelp-empty\">(puste)</span>",
-       "api-help-param-token": "Token \"$1\" zdobyty z [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token": "Token \"$1\" pobrany z [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-continue": "Gdy będzie dostępnych więcej wyników, użyj tego do kontynuowania.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(bez opisu)</span>",
        "api-help-examples": "{{PLURAL:$1|Przykład|Przykłady}}:",
index 6800b91..1e0d508 100644 (file)
        "apihelp-query+langlinks-param-inlanguagecode": "Código de idioma para nomes de idiomas localizados.",
        "apihelp-query+langlinks-example-simple": "Obter links de interligação da página <kbd>Main Page</kbd>.",
        "apihelp-query+languageinfo-summary": "Retornar informações sobre os idiomas disponíveis.",
+       "apihelp-query+languageinfo-extended-description": "Pode ser aplicada uma [[mw:API:Query#Continuing queries|continuação]] se a obtenção das informações demorar muito tempo para um só pedido.",
+       "apihelp-query+languageinfo-param-prop": "Quais informações obter para cada idioma.",
+       "apihelp-query+languageinfo-paramvalue-prop-code": "O código do idioma (este código é específico do MediaWiki, embora tenha semelhanças com outros padrões).",
+       "apihelp-query+languageinfo-paramvalue-prop-bcp47": "O código do idioma BCP-47.",
+       "apihelp-query+languageinfo-paramvalue-prop-dir": "A direção de escrita do idioma (<code>ltr</code>, da esquerda para a direita, ou <code>rtl</code>, da direita para a esquerda).",
+       "apihelp-query+languageinfo-paramvalue-prop-autonym": "O autônimo do idioma, isto é, o seu nome nesse idioma.",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "O nome do idioma no idioma especificado pelo parâmetro <var>lilang</var>, com a aplicação de idiomas de recurso se necessário.",
+       "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "Os códigos de idioma das idiomas de recurso configuradas para esta língua. O recurso final implícito para 'en' não é incluído (mas algum idiomas podem especificar 'en' como último recurso explicitamente).",
+       "apihelp-query+languageinfo-paramvalue-prop-variants": "Os códigos de idioma das variantes suportadas por esse idioma.",
+       "apihelp-query+languageinfo-param-code": "Códigos de idioma dos idiomas que devem ser devolvidas, ou <code>*</code> para todos os idiomas.",
+       "apihelp-query+languageinfo-example-simple": "Obter os códigos de idioma de todos os idiomas suportados.",
+       "apihelp-query+languageinfo-example-autonym-name-de": "Obter os autônimos e nomes em alemão de todos os idioma suportados.",
+       "apihelp-query+languageinfo-example-fallbacks-variants-oc": "Obter os idiomas de recurso e as variantes de occitânico.",
+       "apihelp-query+languageinfo-example-bcp47-dir": "Obter o código de língua BCP-47 e a direção de escrita de todas os idiomas suportados.",
        "apihelp-query+links-summary": "Retorna todos os links das páginas fornecidas.",
        "apihelp-query+links-param-namespace": "Mostre apenas links nesses espaços de nominais.",
        "apihelp-query+links-param-limit": "Quantos links retornar.",
index 8eb0d0f..f85840b 100644 (file)
        "apihelp-query+langlinks-param-dir": "A direção de listagem.",
        "apihelp-query+langlinks-param-inlanguagecode": "O código de língua para os nomes de língua localizados.",
        "apihelp-query+langlinks-example-simple": "Obter as hiperligações interlínguas da página <kbd>Main Page</kbd>.",
+       "apihelp-query+languageinfo-summary": "Devolver informações sobre as línguas disponíveis.",
+       "apihelp-query+languageinfo-extended-description": "Pode ser aplicada uma [[mw:API:Query#Continuing queries|continuação]] se a obtenção das informações demorar demasiado tempo para um só pedido.",
+       "apihelp-query+languageinfo-param-prop": "A informação a ser obtida para cada língua.",
+       "apihelp-query+languageinfo-paramvalue-prop-code": "O código da língua (este código é específico do MediaWiki, embora tenha semelhanças com outros padrões).",
+       "apihelp-query+languageinfo-paramvalue-prop-bcp47": "O código de língua BCP-47.",
+       "apihelp-query+languageinfo-paramvalue-prop-dir": "A direção de escrita da língua (<code>ltr</code>, da esquerda para a direita, ou <code>rtl</code>, da direita para a esquerda).",
+       "apihelp-query+languageinfo-paramvalue-prop-autonym": "O autónimo da língua, isto é, o seu nome nessa língua.",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "O nome da língua na língua especificada pelo parâmetro <var>lilang</var>, com a aplicação de línguas de recurso se necessário.",
+       "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "Os códigos de língua das línguas de recurso configuradas para esta língua. O recurso final implícito para 'en' não é incluído (mas algumas línguas podem especificar 'en' como último recurso explicitamente).",
+       "apihelp-query+languageinfo-paramvalue-prop-variants": "Os códigos de língua das variantes suportadas por esta língua.",
+       "apihelp-query+languageinfo-param-code": "Códigos de língua das línguas que devem ser devolvidas, ou <code>*</code> para todas as línguas.",
+       "apihelp-query+languageinfo-example-simple": "Obter os códigos de língua de todas as línguas suportadas.",
+       "apihelp-query+languageinfo-example-autonym-name-de": "Obter os autónimos e nomes em alemão de todas as línguas suportadas.",
+       "apihelp-query+languageinfo-example-fallbacks-variants-oc": "Obter as línguas de recurso e as variantes de occitânico.",
+       "apihelp-query+languageinfo-example-bcp47-dir": "Obter o código de língua BCP-47 e a direção de escrita de todas as línguas suportadas.",
        "apihelp-query+links-summary": "Devolve todas as hiperligações das páginas indicadas.",
        "apihelp-query+links-param-namespace": "Mostrar apenas as hiperligações destes espaços nominais.",
        "apihelp-query+links-param-limit": "O número de hiperligações a serem devolvidas.",
index 1407271..c2fb52a 100644 (file)
@@ -25,9 +25,9 @@
  * @copyright © 2011, Antoine Musso
  */
 
-use Wikimedia\Rdbms\ResultWrapper;
 use Wikimedia\Rdbms\FakeResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IResultWrapper;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -67,7 +67,7 @@ class BacklinkCache {
         *
         * Initialized with BacklinkCache::getLinks()
         * Cleared with BacklinkCache::clear()
-        * @var ResultWrapper[]
+        * @var IResultWrapper[]
         */
        protected $fullResultCache = [];
 
@@ -179,7 +179,7 @@ class BacklinkCache {
         * @param int|bool $endId
         * @param int $max
         * @param string $select 'all' or 'ids'
-        * @return ResultWrapper
+        * @return IResultWrapper
         */
        protected function queryLinks( $table, $startId, $endId, $max, $select = 'all' ) {
                $fromField = $this->getPrefix( $table ) . '_from';
@@ -472,7 +472,7 @@ class BacklinkCache {
 
        /**
         * Partition a DB result with backlinks in it into batches
-        * @param ResultWrapper $res Database result
+        * @param IResultWrapper $res Database result
         * @param int $batchSize
         * @param bool $isComplete Whether $res includes all the backlinks
         * @throws MWException
index 7a0826e..2573f8a 100644 (file)
@@ -22,7 +22,7 @@
  */
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
@@ -152,7 +152,7 @@ class LinkBatch {
         * parsing to avoid extra DB queries.
         *
         * @param LinkCache $cache
-        * @param ResultWrapper $res
+        * @param IResultWrapper $res
         * @return array Array of remaining titles
         */
        public function addResultToCache( $cache, $res ) {
@@ -188,7 +188,7 @@ class LinkBatch {
 
        /**
         * Perform the existence test query, return a ResultWrapper with page_id fields
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         */
        public function doQuery() {
                if ( $this->isEmpty() ) {
index aada514..4393abb 100644 (file)
@@ -22,6 +22,7 @@
  * @file
  */
 
+use Wikimedia\AtEase\AtEase;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
@@ -553,7 +554,7 @@ class RequestContext implements IContextSource, MutableContext {
                        $wgUser = $context->getUser(); // b/c
                        if ( $session && MediaWiki\Session\PHPSessionHandler::isEnabled() ) {
                                session_id( $session->getId() );
-                               Wikimedia\quietCall( 'session_start' );
+                               AtEase::quietCall( 'session_start' );
                        }
                        $request = new FauxRequest( [], false, $session );
                        $request->setIP( $params['ip'] );
index f4753d6..5df7aef 100644 (file)
@@ -26,6 +26,7 @@ use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\DatabaseDomain;
 use Wikimedia\Rdbms\Blob;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IResultWrapper;
 use Wikimedia\Rdbms\DBConnectionError;
 use Wikimedia\Rdbms\DBUnexpectedError;
 use Wikimedia\Rdbms\DBExpectedError;
@@ -250,7 +251,7 @@ class DatabaseOracle extends Database {
 
        /**
         * Frees resources associated with the LOB descriptor
-        * @param ResultWrapper|ORAResult $res
+        * @param IResultWrapper|ORAResult $res
         */
        function freeResult( $res ) {
                if ( $res instanceof ResultWrapper ) {
@@ -261,8 +262,8 @@ class DatabaseOracle extends Database {
        }
 
        /**
-        * @param ResultWrapper|ORAResult $res
-        * @return mixed
+        * @param IResultWrapper|ORAResult $res
+        * @return stdClass|bool
         */
        function fetchObject( $res ) {
                if ( $res instanceof ResultWrapper ) {
@@ -273,8 +274,8 @@ class DatabaseOracle extends Database {
        }
 
        /**
-        * @param ResultWrapper|ORAResult $res
-        * @return mixed
+        * @param IResultWrapper|ORAResult $res
+        * @return stdClass|bool
         */
        function fetchRow( $res ) {
                if ( $res instanceof ResultWrapper ) {
@@ -285,7 +286,7 @@ class DatabaseOracle extends Database {
        }
 
        /**
-        * @param ResultWrapper|ORAResult $res
+        * @param IResultWrapper|ORAResult $res
         * @return int
         */
        function numRows( $res ) {
@@ -297,7 +298,7 @@ class DatabaseOracle extends Database {
        }
 
        /**
-        * @param ResultWrapper|ORAResult $res
+        * @param IResultWrapper|ORAResult $res
         * @return int
         */
        function numFields( $res ) {
index 9d3309b..9adb2b0 100644 (file)
@@ -497,7 +497,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
 
                $insertBatches = array_chunk( $insertions, $bSize );
                foreach ( $insertBatches as $insertBatch ) {
-                       $this->getDB()->insert( $table, $insertBatch, __METHOD__, 'IGNORE' );
+                       $this->getDB()->insert( $table, $insertBatch, __METHOD__, [ 'IGNORE' ] );
                        $lbf->commitAndWaitForReplication(
                                __METHOD__, $this->ticket, [ 'domain' => $domainId ]
                        );
index 92be7d4..55c5053 100644 (file)
@@ -5,6 +5,7 @@
  *
  * Represents files in a repository.
  */
+use Wikimedia\AtEase\AtEase;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -2171,7 +2172,7 @@ abstract class File implements IDBAccessObject {
                        $metadata = $this->getMetadata();
 
                        if ( is_string( $metadata ) ) {
-                               $metadata = Wikimedia\quietCall( 'unserialize', $metadata );
+                               $metadata = AtEase::quietCall( 'unserialize', $metadata );
                        }
 
                        if ( !is_array( $metadata ) ) {
index 86b8bbb..dd8962d 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup FileAbstraction
  */
 
+use Wikimedia\AtEase\AtEase;
 use MediaWiki\Logger\LoggerFactory;
 use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
@@ -1337,7 +1338,7 @@ class LocalFile extends File {
                $options = [];
                $handler = MediaHandler::getHandler( $props['mime'] );
                if ( $handler ) {
-                       $metadata = Wikimedia\quietCall( 'unserialize', $props['metadata'] );
+                       $metadata = AtEase::quietCall( 'unserialize', $props['metadata'] );
 
                        if ( !is_array( $metadata ) ) {
                                $metadata = [];
@@ -1494,7 +1495,7 @@ class LocalFile extends File {
                                'img_sha1' => $this->sha1
                        ] + $commentFields + $actorFields,
                        __METHOD__,
-                       'IGNORE'
+                       [ 'IGNORE' ]
                );
                $reupload = ( $dbw->affectedRows() == 0 );
 
index b32be39..de7a347 100644 (file)
@@ -531,7 +531,7 @@ abstract class DatabaseUpdater {
                if ( $val && $this->canUseNewUpdatelog() ) {
                        $values['ul_value'] = $val;
                }
-               $this->db->insert( 'updatelog', $values, __METHOD__, 'IGNORE' );
+               $this->db->insert( 'updatelog', $values, __METHOD__, [ 'IGNORE' ] );
                $this->db->setFlag( DBO_DDLMODE );
        }
 
index 8bf48d8..67f769f 100644 (file)
@@ -55,7 +55,7 @@
        "config-unicode-pure-php-warning": "'''Aviso''': Le [https://pecl.php.net/intl extension PECL intl] non es disponibile pro exequer le normalisation Unicode; le systema recurre al implementation lente in PHP pur.\nSi tu sito ha un alte volumine de traffico, tu deberea informar te un poco super le [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalisation Unicode].",
        "config-unicode-update-warning": "'''Aviso''': Le version installate del bibliotheca inveloppante pro normalisation Unicode usa un version ancian del bibliotheca del [http://site.icu-project.org/ projecto ICU].\nTu deberea [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations actualisar lo] si le uso de Unicode importa a te.",
        "config-no-db": "Non poteva trovar un driver appropriate pro le base de datos! Es necessari installar un driver de base de datos pro PHP.\nLe sequente {{PLURAL:$2|typo|typos}} de base de datos es supportate: $1.\n\nSi tu compilava PHP tu mesme, reconfigura lo con un cliente de base de datos activate, per exemplo, usante <code>./configure --with-mysqli</code>.\nSi tu installava PHP ex un pacchetto Debian o Ubuntu, tu debe etiam installar, per exemplo, le modulo <code>php-mysql</code>.",
-       "config-outdated-sqlite": "'''Attention''': tu ha SQLite $1, que es inferior al version minimal requirite, $2. SQLite essera indisponibile.",
+       "config-outdated-sqlite": "<strong>Attention</strong>: tu ha SQLite $2, que es inferior al minime version requirite, $1. SQLite essera indisponibile.",
        "config-no-fts3": "'''Attention''': SQLite es compilate sin [//sqlite.org/fts3.html modulo FTS3]; functionalitate de recerca non essera disponibile in iste back-end.",
        "config-pcre-old": "<strong>Fatal:</strong> PCRE $1 o plus tarde es necessari.\nTu binario de PHP binary es ligate con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Plus information].",
        "config-pcre-no-utf8": "'''Fatal''': Le modulo PCRE de PHP pare haber essite compilate sin supporto de PCRE_UTF8.\nMediaWiki require supporto de UTF-8 pro functionar correctemente.",
index 5a88deb..321caef 100644 (file)
@@ -65,7 +65,7 @@
        "config-unicode-pure-php-warning": "'''Увага''': [https://pecl.php.net/intl міжнародне розширення PECL] не може провести нормалізацію Юнікоду.\nЯкщо ваш сайт має високий трафік, вам варто почитати про [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations нормалізацію Юнікоду].",
        "config-unicode-update-warning": "'''Увага''': Встановлена версія обгортки нормалізації Юнікоду використовує стару версію бібліотеки [http://site.icu-project.org/ проекту ICU].\nВи маєте [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations оновити версію], якщо плануєте повноцінно використовувати Юнікод.",
        "config-no-db": "Не вдалося знайти потрібний драйвер бази даних! Вам необхідно встановити драйвер бази даних для PHP. Підтримуються {{PLURAL:$2|такий тип|такі типи}} баз даних: $1.\n\nЯкщо ви скомпілювали PHP самостійно, переналаштуйте його з увімкненим клієнтом бази даних, наприклад за допомогою <code>./configure --with-mysqli</code>.\n\nЯкщо установлено PHP з пакетів Debian або Ubuntu, тоді ви також повинні встановити, наприклад, пакунок <code>php-mysql</code>.",
-       "config-outdated-sqlite": "'''Увага''': у Вас встановлена версія SQLite $1, а це нижче, ніж мінімально необхідна версія $2. SQLite буде недоступним.",
+       "config-outdated-sqlite": "<strong>Увага:</strong> у Вас встановлена версія SQLite $2, а це нижче, ніж мінімально необхідна версія $1. SQLite буде недоступним.",
        "config-no-fts3": "'''Увага''': SQLite зібраний без [//sqlite.org/fts3.html модуля FTS3], функції пошуку не будуть працювати у цій системі.",
        "config-pcre-old": "'''Фатальна помилка:''' потрібно PCRE версії $1 або пізнішої.\nВаш виконуваний файл PHP пов'язаний з PCRE версії $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Подробиці].",
        "config-pcre-no-utf8": "'''Помилка''': PCRE-модуть PHP, вочевидь, було зібрано без підтримки PCRE_UTF8.\nMediaWiki вимагає підтримку UTF-8 для коректної роботи.",
index 0dd7b57..321476b 100644 (file)
@@ -806,15 +806,17 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        }
 
        /**
+        * @internal For testing only
         * @return float UNIX timestamp
         * @codeCoverageIgnore
         */
-       protected function getCurrentTime() {
+       public function getCurrentTime() {
                return $this->wallClockOverride ?: microtime( true );
        }
 
        /**
-        * @param float|null &$time Mock UNIX timestamp for testing
+        * @internal For testing only
+        * @param float|null &$time Mock UNIX timestamp
         * @codeCoverageIgnore
         */
        public function setMockTime( &$time ) {
index de9ea55..fe23a38 100644 (file)
@@ -1284,7 +1284,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         * @param string $commentedSql SQL query with debugging/trace comment
         * @param bool $isEffectiveWrite Whether the query is a (non-temporary table) write
         * @param string $fname Name of the calling function
-        * @return bool|ResultWrapper True for a successful write query, ResultWrapper
+        * @return bool|IResultWrapper True for a successful write query, ResultWrapper
         *     object for a successful read query, or false on failure
         */
        private function attemptQuery( $sql, $commentedSql, $isEffectiveWrite, $fname ) {
@@ -4112,8 +4112,8 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         * a wrapper. Nowadays, raw database objects are never exposed to external
         * callers, so this is unnecessary in external code.
         *
-        * @param bool|ResultWrapper|resource $result
-        * @return bool|ResultWrapper
+        * @param bool|IResultWrapper|resource $result
+        * @return bool|IResultWrapper
         */
        protected function resultObject( $result ) {
                if ( !$result ) {
@@ -4603,7 +4603,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         * Delete a table
         * @param string $tableName
         * @param string $fName
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         * @since 1.18
         */
        public function dropTable( $tableName, $fName = __METHOD__ ) {
index 6d266ae..a532ec2 100644 (file)
@@ -1358,7 +1358,7 @@ class DatabaseMssql extends Database {
         * Delete a table
         * @param string $tableName
         * @param string $fName
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         * @since 1.18
         */
        public function dropTable( $tableName, $fName = __METHOD__ ) {
index 36c947f..6d28717 100644 (file)
@@ -277,7 +277,7 @@ abstract class DatabaseMysqlBase extends Database {
        abstract protected function mysqlSetCharset( $charset );
 
        /**
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @throws DBUnexpectedError
         */
        public function freeResult( $res ) {
@@ -301,7 +301,7 @@ abstract class DatabaseMysqlBase extends Database {
        abstract protected function mysqlFreeResult( $res );
 
        /**
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @return stdClass|bool
         * @throws DBUnexpectedError
         */
@@ -374,7 +374,7 @@ abstract class DatabaseMysqlBase extends Database {
 
        /**
         * @throws DBUnexpectedError
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @return int
         */
        function numRows( $res ) {
@@ -402,7 +402,7 @@ abstract class DatabaseMysqlBase extends Database {
        abstract protected function mysqlNumRows( $res );
 
        /**
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @return int
         */
        public function numFields( $res ) {
@@ -422,7 +422,7 @@ abstract class DatabaseMysqlBase extends Database {
        abstract protected function mysqlNumFields( $res );
 
        /**
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @param int $n
         * @return string
         */
@@ -437,7 +437,7 @@ abstract class DatabaseMysqlBase extends Database {
        /**
         * Get the name of the specified field in a result
         *
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @param int $n
         * @return string
         */
@@ -445,7 +445,7 @@ abstract class DatabaseMysqlBase extends Database {
 
        /**
         * mysql_field_type() wrapper
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @param int $n
         * @return string
         */
@@ -460,14 +460,14 @@ abstract class DatabaseMysqlBase extends Database {
        /**
         * Get the type of the specified field in a result
         *
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @param int $n
         * @return string
         */
        abstract protected function mysqlFieldType( $res, $n );
 
        /**
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @param int $row
         * @return bool
         */
@@ -482,7 +482,7 @@ abstract class DatabaseMysqlBase extends Database {
        /**
         * Move internal result pointer
         *
-        * @param ResultWrapper|resource $res
+        * @param IResultWrapper|resource $res
         * @param int $row
         * @return bool
         */
@@ -1490,7 +1490,7 @@ abstract class DatabaseMysqlBase extends Database {
        /**
         * @param string $tableName
         * @param string $fName
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         */
        public function dropTable( $tableName, $fName = __METHOD__ ) {
                if ( !$this->tableExists( $tableName, $fName ) ) {
index c9942a5..8e1b06d 100644 (file)
@@ -303,7 +303,7 @@ class DatabaseSqlite extends Database {
         * @param bool|string $file Database file name. If omitted, will be generated
         *   using $name and configured data directory
         * @param string $fname Calling function name
-        * @return ResultWrapper
+        * @return IResultWrapper
         */
        function attachDatabase( $name, $file = false, $fname = __METHOD__ ) {
                if ( !$file ) {
@@ -330,7 +330,7 @@ class DatabaseSqlite extends Database {
         * SQLite doesn't allow buffered results or data seeking etc, so we'll use fetchAll as the result
         *
         * @param string $sql
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         */
        protected function doQuery( $sql ) {
                $res = $this->getBindingHandle()->query( $sql );
@@ -346,7 +346,7 @@ class DatabaseSqlite extends Database {
        }
 
        /**
-        * @param ResultWrapper|mixed $res
+        * @param IResultWrapper|mixed $res
         */
        function freeResult( $res ) {
                if ( $res instanceof ResultWrapper ) {
@@ -357,7 +357,7 @@ class DatabaseSqlite extends Database {
        }
 
        /**
-        * @param ResultWrapper|array $res
+        * @param IResultWrapper|array $res
         * @return stdClass|bool
         */
        function fetchObject( $res ) {
@@ -384,7 +384,7 @@ class DatabaseSqlite extends Database {
        }
 
        /**
-        * @param ResultWrapper|mixed $res
+        * @param IResultWrapper|mixed $res
         * @return array|bool
         */
        function fetchRow( $res ) {
@@ -406,7 +406,7 @@ class DatabaseSqlite extends Database {
        /**
         * The PDO::Statement class implements the array interface so count() will work
         *
-        * @param ResultWrapper|array|false $res
+        * @param IResultWrapper|array|false $res
         * @return int
         */
        function numRows( $res ) {
@@ -417,7 +417,7 @@ class DatabaseSqlite extends Database {
        }
 
        /**
-        * @param ResultWrapper $res
+        * @param IResultWrapper $res
         * @return int
         */
        function numFields( $res ) {
@@ -432,7 +432,7 @@ class DatabaseSqlite extends Database {
        }
 
        /**
-        * @param ResultWrapper $res
+        * @param IResultWrapper $res
         * @param int $n
         * @return bool
         */
@@ -474,7 +474,7 @@ class DatabaseSqlite extends Database {
        }
 
        /**
-        * @param ResultWrapper|array $res
+        * @param IResultWrapper|array $res
         * @param int $row
         */
        function dataSeek( $res, $row ) {
@@ -990,7 +990,7 @@ class DatabaseSqlite extends Database {
         * @param string $newName
         * @param bool $temporary
         * @param string $fname
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         * @throws RuntimeException
         */
        function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = __METHOD__ ) {
@@ -1086,7 +1086,7 @@ class DatabaseSqlite extends Database {
         *
         * @param string $tableName
         * @param string $fName
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         * @throws DBReadOnlyError
         */
        public function dropTable( $tableName, $fName = __METHOD__ ) {
index 333bd81..90e30fa 100644 (file)
@@ -217,7 +217,7 @@ interface IDatabase {
         * the LB info array is set to that parameter. If it is called with two
         * parameters, the member with the given name is set to the given value.
         *
-        * @param string $name
+        * @param array|string $name
         * @param array|null $value
         */
        public function setLBInfo( $name, $value = null );
index 5706435..28e94a0 100644 (file)
@@ -150,7 +150,7 @@ interface IMaintainableDatabase extends IDatabase {
         * Delete a table
         * @param string $tableName
         * @param string $fName
-        * @return bool|ResultWrapper
+        * @return bool|IResultWrapper
         */
        public function dropTable( $tableName, $fName = __METHOD__ );
 
@@ -303,7 +303,7 @@ interface IMaintainableDatabase extends IDatabase {
         * @param string $table Table name
         * @param string $field Field name
         *
-        * @return Field
+        * @return false|Field
         */
        public function fieldInfo( $table, $field );
 }
index 1fc56bb..fe9e26f 100644 (file)
@@ -403,7 +403,7 @@ class LogPage {
                }
 
                $dbw = wfGetDB( DB_MASTER );
-               $dbw->insert( 'log_search', $data, __METHOD__, 'IGNORE' );
+               $dbw->insert( 'log_search', $data, __METHOD__, [ 'IGNORE' ] );
 
                return true;
        }
index 90c0a72..1d0bbfd 100644 (file)
@@ -335,7 +335,7 @@ class ManualLogEntry extends LogEntryBase implements Taggable {
                        }
                }
                if ( count( $rows ) ) {
-                       $dbw->insert( 'log_search', $rows, __METHOD__, 'IGNORE' );
+                       $dbw->insert( 'log_search', $rows, __METHOD__, [ 'IGNORE' ] );
                }
 
                return $this->id;
index 088f94e..5313ca4 100644 (file)
@@ -522,7 +522,7 @@ class SqlBagOStuff extends BagOStuff {
                                        'exptime' => $row->exptime
                                ],
                                __METHOD__,
-                               'IGNORE'
+                               [ 'IGNORE' ]
                        );
 
                        if ( $db->affectedRows() == 0 ) {
index 3814112..332b1ee 100644 (file)
@@ -1342,7 +1342,7 @@ class WikiPage implements Page, IDBAccessObject {
                                'page_len'          => 0, // Fill this in shortly...
                        ] + $pageIdForInsert,
                        __METHOD__,
-                       'IGNORE'
+                       [ 'IGNORE' ]
                );
 
                if ( $dbw->affectedRows() > 0 ) {
index ba5df52..0d95b22 100644 (file)
@@ -141,6 +141,12 @@ class ExtensionJsonValidator {
                        }
                }
 
+               // Deprecated stuff
+               if ( isset( $data->ParserTestFiles ) ) {
+                       // phpcs:ignore Generic.Files.LineLength.TooLong
+                       $extraErrors[] = '[ParserTestFiles] DEPRECATED: see <https://www.mediawiki.org/wiki/Manual:Extension.json/Schema#ParserTestFiles>';
+               }
+
                $validator = new Validator;
                $validator->check( $data, (object)[ '$ref' => 'file://' . $schemaPath ] );
                if ( $validator->isValid() && !$extraErrors ) {
index 0ea13e2..3f12563 100644 (file)
@@ -27,6 +27,7 @@ use CachedBagOStuff;
 use Psr\Log\LoggerInterface;
 use User;
 use WebRequest;
+use Wikimedia\AtEase\AtEase;
 
 /**
  * This is the actual workhorse for Session.
@@ -262,7 +263,7 @@ final class SessionBackend {
 
                        if ( $restart ) {
                                session_id( (string)$this->id );
-                               \Wikimedia\quietCall( 'session_start' );
+                               AtEase::quietCall( 'session_start' );
                        }
 
                        $this->autosave();
@@ -785,7 +786,7 @@ final class SessionBackend {
                                                'session' => $this->id,
                                ] );
                                session_id( (string)$this->id );
-                               \Wikimedia\quietCall( 'session_start' );
+                               AtEase::quietCall( 'session_start' );
                        }
                }
        }
index ef45d15..a7b7569 100644 (file)
@@ -622,7 +622,6 @@ class SkinTemplate extends Skin {
                        $returnto['returnto'] = $page;
                        $query = $request->getVal( 'returntoquery', $this->thisquery );
                        $paramsArray = wfCgiToArray( $query );
-                       unset( $paramsArray['logoutToken'] );
                        $query = wfArrayToCgi( $paramsArray );
                        if ( $query != '' ) {
                                $returnto['returntoquery'] = $query;
@@ -695,8 +694,7 @@ class SkinTemplate extends Skin {
                                        'href' => self::makeSpecialUrl( 'Userlogout',
                                                // Note: userlogout link must always contain an & character, otherwise we might not be able
                                                // to detect a buggy precaching proxy (T19790)
-                                               ( $title->isSpecial( 'Preferences' ) ? [] : $returnto )
-                                               + [ 'logoutToken' => $this->getUser()->getEditToken( 'logoutToken', $this->getRequest() ) ] ),
+                                               ( $title->isSpecial( 'Preferences' ) ? [] : $returnto ) ),
                                        'active' => false
                                ];
                        }
index b4e244c..eba406e 100644 (file)
@@ -658,18 +658,6 @@ class SpecialPage implements MessageLocalizer {
                return $this->msg( strtolower( $this->mName ) )->text();
        }
 
-       /**
-        * Get a self-referential title object
-        *
-        * @param string|bool $subpage
-        * @return Title
-        * @deprecated since 1.23, use SpecialPage::getPageTitle
-        */
-       function getTitle( $subpage = false ) {
-               wfDeprecated( __METHOD__, '1.23' );
-               return $this->getPageTitle( $subpage );
-       }
-
        /**
         * Get a self-referential title object
         *
index 568327d..62010d9 100644 (file)
@@ -26,7 +26,7 @@
  *
  * @ingroup SpecialPage
  */
-class SpecialUserLogout extends UnlistedSpecialPage {
+class SpecialUserLogout extends FormSpecialPage {
        function __construct() {
                parent::__construct( 'Userlogout' );
        }
@@ -35,41 +35,49 @@ class SpecialUserLogout extends UnlistedSpecialPage {
                return true;
        }
 
-       function execute( $par ) {
-               /**
-                * Some satellite ISPs use broken precaching schemes that log people out straight after
-                * they're logged in (T19790). Luckily, there's a way to detect such requests.
-                */
-               if ( isset( $_SERVER['REQUEST_URI'] ) && strpos( $_SERVER['REQUEST_URI'], '&amp;' ) !== false ) {
-                       wfDebug( "Special:UserLogout request {$_SERVER['REQUEST_URI']} looks suspicious, denying.\n" );
-                       throw new HttpError( 400, $this->msg( 'suspicious-userlogout' ), $this->msg( 'loginerror' ) );
-               }
+       public function isListed() {
+               return false;
+       }
 
-               $this->setHeaders();
-               $this->outputHeader();
+       protected function getGroupName() {
+               return 'login';
+       }
 
-               $out = $this->getOutput();
-               $user = $this->getUser();
-               $request = $this->getRequest();
+       protected function getFormFields() {
+               return [];
+       }
 
-               $logoutToken = $request->getVal( 'logoutToken' );
-               $urlParams = [
-                       'logoutToken' => $user->getEditToken( 'logoutToken', $request )
-               ] + $request->getValues();
-               unset( $urlParams['title'] );
-               $continueLink = $this->getFullTitle()->getFullUrl( $urlParams );
+       protected function getDisplayFormat() {
+               return 'ooui';
+       }
 
-               if ( $logoutToken === null ) {
-                       $this->getOutput()->addWikiMsg( 'userlogout-continue', $continueLink );
-                       return;
-               }
-               if ( !$this->getUser()->matchEditToken(
-                       $logoutToken, 'logoutToken', $this->getRequest(), 24 * 60 * 60
-               ) ) {
-                       $this->getOutput()->addWikiMsg( 'userlogout-sessionerror', $continueLink );
+       public function execute( $par ) {
+               if ( $this->getUser()->isAnon() ) {
+                       $this->setHeaders();
+                       $this->showSuccess();
                        return;
                }
 
+               parent::execute( $par );
+       }
+
+       public function alterForm( HTMLForm $form ) {
+               $form->setTokenSalt( 'logoutToken' );
+               $form->addHeaderText( $this->msg( 'userlogout-continue' ) );
+
+               $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
+       }
+
+       /**
+        * Process the form.  At this point we know that the user passes all the criteria in
+        * userCanExecute(), and if the data array contains 'Username', etc, then Username
+        * resets are allowed.
+        * @param array $data
+        * @throws MWException
+        * @throws ThrottledError|PermissionsError
+        * @return Status
+        */
+       public function onSubmit( array $data ) {
                // Make sure it's possible to log out
                $session = MediaWiki\Session\SessionManager::getGlobalSession();
                if ( !$session->canSetUser() ) {
@@ -83,25 +91,37 @@ class SpecialUserLogout extends UnlistedSpecialPage {
                }
 
                $user = $this->getUser();
-               $oldName = $user->getName();
 
                $user->logout();
+               return new Status();
+       }
 
-               $loginURL = SpecialPage::getTitleFor( 'Userlogin' )->getFullURL(
-                       $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
+       public function onSuccess() {
+               $this->showSuccess();
 
+               $user = $this->getUser();
+               $oldName = $user->getName();
                $out = $this->getOutput();
-               $out->addWikiMsg( 'logouttext', $loginURL );
-
                // Hook.
                $injected_html = '';
                Hooks::run( 'UserLogoutComplete', [ &$user, &$injected_html, $oldName ] );
                $out->addHTML( $injected_html );
+       }
+
+       private function showSuccess() {
+               $loginURL = SpecialPage::getTitleFor( 'Userlogin' )->getFullURL(
+                       $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
+
+               $out = $this->getOutput();
+               $out->addWikiMsg( 'logouttext', $loginURL );
 
                $out->returnToMain();
        }
 
-       protected function getGroupName() {
-               return 'login';
+       /**
+        * Let blocked users to log out and come back with their sockpuppets
+        */
+       public function requiresUnblock() {
+               return false;
        }
 }
index 0cc9905..a37f4f7 100644 (file)
@@ -482,9 +482,8 @@ class RemexCompatMunger implements TreeHandler {
        }
 
        public function comment( $preposition, $refElement, $text, $sourceStart, $sourceLength ) {
-               list( $parent, $refNode ) = $this->getParentForInsert( $preposition, $refElement );
-               $this->serializer->comment( $preposition, $refNode, $text,
-                       $sourceStart, $sourceLength );
+               list( , $refNode ) = $this->getParentForInsert( $preposition, $refElement );
+               $this->serializer->comment( $preposition, $refNode, $text, $sourceStart, $sourceLength );
        }
 
        public function error( $text, $pos ) {
index 08d148f..c0dd00b 100644 (file)
@@ -83,6 +83,8 @@ class RemexMungerData {
         * @return string
         */
        public function dump() {
+               $parts = [];
+
                if ( $this->childPElement ) {
                        $parts[] = 'childPElement=' . $this->childPElement->getDebugTag();
                }
index d905aa4..597c277 100644 (file)
@@ -404,7 +404,7 @@ abstract class UploadBase {
         * @return mixed True if the file is verified, an array otherwise
         */
        protected function verifyMimeType( $mime ) {
-               global $wgVerifyMimeType;
+               global $wgVerifyMimeType, $wgVerifyMimeTypeIE;
                if ( $wgVerifyMimeType ) {
                        wfDebug( "mime: <$mime> extension: <{$this->mFinalExtension}>\n" );
                        global $wgMimeTypeBlacklist;
@@ -412,17 +412,19 @@ abstract class UploadBase {
                                return [ 'filetype-badmime', $mime ];
                        }
 
-                       # Check what Internet Explorer would detect
-                       $fp = fopen( $this->mTempPath, 'rb' );
-                       $chunk = fread( $fp, 256 );
-                       fclose( $fp );
-
-                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
-                       $extMime = $magic->guessTypesForExtension( $this->mFinalExtension );
-                       $ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
-                       foreach ( $ieTypes as $ieType ) {
-                               if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
-                                       return [ 'filetype-bad-ie-mime', $ieType ];
+                       if ( $wgVerifyMimeTypeIE ) {
+                               # Check what Internet Explorer would detect
+                               $fp = fopen( $this->mTempPath, 'rb' );
+                               $chunk = fread( $fp, 256 );
+                               fclose( $fp );
+
+                               $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
+                               $extMime = $magic->guessTypesForExtension( $this->mFinalExtension );
+                               $ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
+                               foreach ( $ieTypes as $ieType ) {
+                                       if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
+                                               return [ 'filetype-bad-ie-mime', $ieType ];
+                                       }
                                }
                        }
                }
@@ -1262,12 +1264,11 @@ abstract class UploadBase {
         * @return bool True if the file contains something looking like embedded scripts
         */
        public static function detectScript( $file, $mime, $extension ) {
-               global $wgAllowTitlesInSVG;
-
                # ugly hack: for text files, always look at the entire file.
                # For binary field, just check the first K.
 
-               if ( strpos( $mime, 'text/' ) === 0 ) {
+               $isText = strpos( $mime, 'text/' ) === 0;
+               if ( $isText ) {
                        $chunk = file_get_contents( $file );
                } else {
                        $fp = fopen( $file, 'rb' );
@@ -1312,36 +1313,19 @@ abstract class UploadBase {
                        }
                }
 
-               /**
-                * Internet Explorer for Windows performs some really stupid file type
-                * autodetection which can cause it to interpret valid image files as HTML
-                * and potentially execute JavaScript, creating a cross-site scripting
-                * attack vectors.
-                *
-                * Apple's Safari browser also performs some unsafe file type autodetection
-                * which can cause legitimate files to be interpreted as HTML if the
-                * web server is not correctly configured to send the right content-type
-                * (or if you're really uploading plain text and octet streams!)
-                *
-                * Returns true if IE is likely to mistake the given file for HTML.
-                * Also returns true if Safari would mistake the given file for HTML
-                * when served with a generic content-type.
-                */
+               // Quick check for HTML heuristics in old IE and Safari.
+               //
+               // The exact heuristics IE uses are checked separately via verifyMimeType(), so we
+               // don't need them all here as it can cause many false positives.
+               //
+               // Check for `<script` and such still to forbid script tags and embedded HTML in SVG:
                $tags = [
-                       '<a href',
                        '<body',
                        '<head',
                        '<html', # also in safari
-                       '<img',
-                       '<pre',
                        '<script', # also in safari
-                       '<table'
                ];
 
-               if ( !$wgAllowTitlesInSVG && $extension !== 'svg' && $mime !== 'image/svg' ) {
-                       $tags[] = '<title';
-               }
-
                foreach ( $tags as $tag ) {
                        if ( strpos( $chunk, $tag ) !== false ) {
                                wfDebug( __METHOD__ . ": found something that may make it be mistaken for html: $tag\n" );
index c41697f..79b8420 100644 (file)
@@ -2549,7 +2549,7 @@ class User implements IDBAccessObject, UserIdentity {
                $dbw->insert( 'user_newtalk',
                        [ $field => $id, 'user_last_timestamp' => $dbw->timestampOrNull( $ts ) ],
                        __METHOD__,
-                       'IGNORE' );
+                       [ 'IGNORE' ] );
                if ( $dbw->affectedRows() ) {
                        wfDebug( __METHOD__ . ": set on ($field, $id)\n" );
                        return true;
index 60c1790..1a39945 100644 (file)
@@ -769,7 +769,7 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
                foreach ( $rowBatches 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' );
+                       $dbw->insert( 'watchlist', $toInsert, __METHOD__, [ 'IGNORE' ] );
                        $affectedRows += $dbw->affectedRows();
                        if ( $ticket ) {
                                $this->lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
index c5e09b8..39495af 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "اقتراح التغيير عند تسجيل الدخول",
        "easydeflate-invaliddeflate": "المحتوى المقدم لا يتم تفريغه بشكل صحيح",
        "unprotected-js": "لأسباب تتعلق بالأمان; لا يمكن تحميل جافا سكريبت من الصفحات غير المحمية; الرجاء إنشاء جافا سكريبت فقط في نطاق ميدياويكي: أو كصفحة فرعية للمستخدم",
-       "userlogout-continue": "إذا كنت ترغب في تسجيل الخروج، تُرجَى [$1 المتابعة إلى صفحة تسجيل الخروج].",
-       "userlogout-sessionerror": "فشل تسجيل الخروج بسبب خطأ في الجلسة، تُرجَى [$1 المحاولة مرة أخرى]."
+       "userlogout-continue": "هل تريد تسجيل الخروج؟"
 }
index 789362e..5552739 100644 (file)
@@ -15,7 +15,8 @@
                        "Matma Rex",
                        "Tokvo",
                        "Crucifunked",
-                       "Enolp"
+                       "Enolp",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Sorrayar enllaces:",
        "category-article-count": "{{PLURAL:$2|Esta categoría contien namái la páxina siguiente.|{{PLURAL:$1|La páxina siguiente ta|Les $1 páxines siguientes tán}} nesta categoría, d'un total de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|La páxina siguiente ta|Les $1 páxines siguientes tán}} na categoría actual.",
        "category-file-count": "{{PLURAL:$2|Esta categoría contien namái el ficheru siguiente.|{{PLURAL:$1|El ficheru siguiente ta|Los $1 ficheros siguientes tán}} nesta categoría, d'un total de $2.}}",
-       "category-file-count-limited": "{{PLURAL:$1El ficheru siguiente ta|Los $1 ficheeros siguientes tán}} na categoría actual.",
+       "category-file-count-limited": "{{PLURAL:$1|El ficheru siguiente ta|Los $1 ficheeros siguientes tán}} na categoría actual.",
        "listingcontinuesabbrev": "cont.",
        "index-category": "Páxines indexaes",
        "noindex-category": "Páxines sin indexar",
        "passwordpolicies-policyflag-suggestchangeonlogin": "suxerir cambiu al aniciar sesión",
        "easydeflate-invaliddeflate": "El conteníu dau nun ta comprimíu correutamente",
        "unprotected-js": "Por razones de seguridá, JavaScript nun puede cargase dende páxines ensin protexer. Crea javascript sólo nel espaciu de nomes MediaWiki: o como subpáxina d'usuariu",
-       "userlogout-continue": "Si desees zarrar la sesión [$1 sigui na páxina de finar sesión].",
-       "userlogout-sessionerror": "Falló salir por un error de sesión. [$1 Tenta nuevamente]."
+       "userlogout-continue": "Si desees zarrar la sesión [$1 sigui na páxina de finar sesión]."
 }
index 28449c2..c4273e9 100644 (file)
@@ -6,7 +6,8 @@
                        "Macofe",
                        "Matma Rex",
                        "Sfic",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Ajeetsinghawadh"
                ]
        },
        "tog-underline": "कड़ि अधोरेखन:",
        "special-characters-group-khmer": "खमेर",
        "special-characters-title-endash": "डैश",
        "special-characters-title-emdash": "बड्का डैश",
-       "special-characters-title-minus": "माइनस चिन्ह"
+       "special-characters-title-minus": "माइनस चिन्ह",
+       "userlogout-continue": "का आप लॉग आउट करा चाहत अहैं?"
 }
index 1aa60c6..0f8d534 100644 (file)
        "index-category": "سرتاک بوتگێن پێجان",
        "noindex-category": "سرتاک نبوتگین پیجان",
        "broken-file-category": "پیج گون پرشتگین لینک فایل",
-       "about": "باره",
+       "about": "بارہ‌ئا",
        "article": "محتوا صفحه",
        "newwindow": "(ته نوکین پنچره ی پچ کن)",
        "cancel": "کنسل",
        "morenotlisted": "ائ لیست پکا نه انت",
        "mypage": "دیم یا تاک",
        "mytalk": "گپ",
-       "anontalk": "گپ کن گون ای آی پی",
+       "anontalk": "گپ",
        "navigation": "گردگ",
        "and": "&#32;و",
        "faq": "ب.ج.س",
        "history_short": "دپتر",
        "history_small": "تاریخچگ",
        "updatedmarker": "په روچ بیتگین چه منی اهری  اهری  چارگ",
-       "printableversion": "نسخه چهاپی",
+       "printableversion": "چاپی بھر",
        "permalink": "دایمی لینک",
        "print": "چهاپ",
        "view": "دیستین",
        "viewhelppage": "بگیند کومکی دیما",
        "categorypage": "بگیند کتیگوریی دیما",
        "viewtalkpage": "به گند بحث آ",
-       "otherlanguages": "بی دگه زبانانی تا",
+       "otherlanguages": "پہ دگہ زباناں",
        "redirectedfrom": "(غیر مستقیم بوتگ چه $1)",
        "redirectpagesub": "صفحه غیر مستقیم",
        "redirectto": "مسیری ٹگل داتین بی:",
        "disclaimers": "بی میاری گیان",
        "disclaimerpage": "Project:عمومی بی میاریگان",
        "edithelp": "کمک اصلاح",
+       "helppage-top-gethelp": "کومک",
        "mainpage": "بُنیادی دیم",
        "mainpage-description": "بُنیادی دیم",
        "policy-url": "Project:سیاست",
-       "portal": "پرتال انجمن",
+       "portal": "دیوانءِ درگت",
        "portal-url": "Project:پرتال انجمن",
        "privacy": "سیاست حفظ اسرار",
        "privacypage": "Project:سیاست حفظ اسرار",
        "nstab-template": "تراشوان",
        "nstab-help": "رهنمایی تاکدیم",
        "nstab-category": "تهر",
+       "mainpage-nstab": "بنیادیءِ دݔم",
        "nosuchaction": "نی چشین عمل",
        "nosuchactiontext": "ای کاری که گون اای یو ار ال مشخص بیتت نامشخص انت.\nشما بلکین یو‌ارال شر ننوشتت یا رند چه هرابیت لینکی اتکگیت\nشی بلکین یک خطایی ته برنامه سایت {{SITENAME}} پیش داریت.",
        "nosuchspecialpage": "نی چشین حاصین صفحه",
        "createacct-reason": "دلیل:",
        "createacct-reason-ph": "پرچا شما ادگر نوکین اکانتء اڈ کن ات",
        "createacct-submit": "وتی اکانتء اڈ کن ات",
-       "createacct-another-submit": "ادگر Ø§Ú©Ø§Ù\86تء Ø§Ú\88 Ø¨Ú©Ù\86 Ø§Øª",
+       "createacct-another-submit": "سابÛ\92 Ø¬Û\8fÚ\88Ý\94Ù\86",
        "createacct-benefit-heading": "{{SITENAME}} شهسانی واسته هنچوش که شمئیء اڈ بیتگ",
        "createacct-benefit-body1": "$1 {{PLURAL:$1|اصلاح|اصلاح کتگان}}",
        "createacct-benefit-body2": "{{PLURAL:$1|تاک|تاکان}}",
        "nocookieslogin": "{{SITENAME}} په ورود کابران چه کوکی استفاده کنت.\nشمی کوکی غیر فعالنت.\nلطفا آییا فعال کنیت و دگه  سعی کنیت.",
        "nocookiesfornew": "اکانت اڈ نبیت، پرچا که ما نتوانت آئی منبعء رء تأیید کنین.\nپکا بزان ات که کوکی‌هان فعال انت، رندا پیجء چه نوک رلود کن ات و دوبارگ بچکاس ات.",
        "noname": "شما یک معتبرین نام کاربر مشخص نه کتت.",
-       "loginsuccesstitle": "Ù\88رÙ\88د Ù\85Ù\88Ù\81Ù\82Û\8cت Ø¢Ù\85Û\8cز",
+       "loginsuccesstitle": "Ù\85اÙ\86 Ø¨Û\8cت Ø§Ù\90ت",
        "loginsuccess": "''''شما الان وارد {{SITENAME}} په عنوان \"$1\".'''",
-       "nosuchuser": "Ù\87Ú\86 Ú©Ø§Ø±Ø¨Ø±Û\8c Ú¯Ù\88Ù\86 Ù\86اÙ\85 \"$1\" Ù\86Û\8cستÙ\86.\nکاربرÛ\8c Ù\86اÙ\85 Ø­Ø±Ù\81Ø´ Ù¾Ù\87 Ù\87Ù\88ر Ù\88 Ù\85زÙ\86Û\8c Ø­Ø³Ø§Ø³ Ø§Ù\86ت.\nÙ\88تÛ\8c Ø§Ù\85Ù\84اÙ\8aا Ú\86Ú© Ú©Ù\86Û\8cت Û\8cا [[Special:CreateAccount|Ù\86Ù\88Ú©Û\8cÙ\86 Ø­Ø³Ø§Ø¨Û\8c Ø´Ø±Ú©Ù\86Û\8cت]].",
+       "nosuchuser": "Ù\87Ú\86 Ú©Ø§Ø±Ø²Ù\88رکÛ\92 Ú¯Û\8fÚº \"$1\"Ø¡Ù\8e Ù\86اÙ\85ا Ù\86Ý\94ست Ø§Ù\90Ù\86ت.\nکارزÙ\88رÙ\88Ú©Û\8cØ¡Ù\90 Ù\86اÙ\85 Ù¾Û\81 Ú¯Ø§Ù\84Ø¡Ù\90 Ù\85زÙ\86Û\8c Ø¡Ù\8f Ú¾Ù\8fردÛ\8câ\80\8cئا Ø­Ø³Ø§Ø³ Ø§Ù\90Ù\86ت.\nÙ\88تÛ\8c Ù\84کتگÝ\94Úº Ú¯Ø§Ù\84اں Ø´Ø±Ù\91 Ø¨Û\81 Ú\86ار Ø§Ù\90ت Û\8cا[[Special:CreateAccount|Ù\86Û\8fÚ©Ý\94Úº Ø³Ø§Ø¨Û\92 Ø¬Û\8fÚ\88Ý\94Ù\86]]اÙ\90ت.",
        "nosuchusershort": "هچ کاربری گون نام  \"$1\"نیستن.\nوتی املايا کنترل کنیت",
        "nouserspecified": "شما باید یک نام کاربری مشخص کنیت.",
        "login-userblocked": "ائ کابر بلاک بیتگ. لاگین مان سیستمء اجازت نه انت.",
-       "wrongpassword": "اشتباهین کلمه رمز وارد بوت. دگه سعی کن.",
+       "wrongpassword": "گالگوَز اشی نئں واجہ میر. الکاپݔں گالگوَزا بہ لِک.",
        "wrongpasswordempty": "کلمه رمز وارد بیتگین هالیکنت. دگه سعی کن",
        "passwordtooshort": "پسورد ضرورانت چکم {{PLURAL:$1|۱ کرکتر|$1 کرکتر}} داشتگ بیت.",
+       "passwordinlargeblacklist": "اے گالگوَز سک آسانں دگہ گرانݔں گالگوَزے گچݔں کن",
        "password-name-match": "شمئی پسورد ضرورنت چه شمئی یوزرنامء پرک بیت انت.",
        "password-login-forbidden": "ائ یوزرنام ءُ پسوردء کارمرز اجازت نه انت.",
        "mailmypassword": "نوکین پسوردء بلوٹ",
        "pt-login": "لاگین",
        "pt-login-button": "لاگین",
        "pt-createaccount": "اکانتء اڈ بکن",
-       "pt-userlogout": "در Ø´Ù\8fتÙ\86",
+       "pt-userlogout": "در Ø¨Û\8cÛ\8cÚ¯",
        "php-mail-error-unknown": "نامالومین ارور مان تابع  mail()‎ پی‌اچ‌پی",
        "user-mail-no-addy": "جهد پر ایمیلء راهیگ گیر چه ایمیل ادرس",
        "user-mail-no-body": "جهد پر هالیگ یانکه هوردین ایمیلء راهیگء",
        "changepassword-success": "شمئی پسورد پر درستیء ٹگل بیت!",
        "changepassword-throttled": "شما انیگ پر لاگین کتنء چنت بار جهد کتگ ات. دزبندی انت پیسر چه پدایین جهدء $1 موه بداریت.",
        "botpasswords-label-create": "جوڑ کورتین",
+       "botpasswords-label-update": "پہ رۏچ",
+       "botpasswords-label-cancel": "بجَگ",
+       "botpasswords-label-delete": "کۏر کنگ",
+       "botpasswords-label-resetpassword": "گالگوَزءِ پاک کنگ",
        "resetpass_forbidden": "کلمات رمز نه توننت عوض بنت.",
        "resetpass-no-info": "په مستقیمین دسترسی په ای صفحه شما بایدن وارد سایت بیت",
        "resetpass-submit-loggedin": "عوض کتن کلمه رمز",
        "loginreqpagetext": "شما باید $1 په گندگ دگه صفحات.",
        "accmailtitle": "کلمه رمز دیم دات",
        "accmailtext": "یک پسوردء [[User talk:$1|$1]] پر $2 راهیگ بوت. بیت آئرا چه پیجء ''[[Special:ChangePassword|پسوردء ٹگل]]'' که لاگینء درگتء پیش دارگ بیت ٹگل دئیت.",
-       "newarticle": "(نوکین)",
+       "newarticle": "(نۏک)",
        "newarticletext": "شما رند چه یک لینکی په یک صفحه ی که هنو نیستند اتکگیت.\nپه شر کتن صفحه، شروع کن نوشتن ته جعبه جهلی(بچار  [$1 صفحه کمک]  په گیشترین اطلاعات).\nاگر شما اشتباهی ادانیت ته وتی بروزر دکمه ''Back'' بجن.",
        "anontalkpagetext": "----'' ای صفحه بحث انت په یک ناشناس کاربری که هنگت یک حسابی شر نه کتت یا آی ا ستفاده نه کتت. اچه ما بایدن آدرس آی پی عددی په پچاه آرگ آیی استفاده کنین.\nچوشن آدرس آی پی گون چندین کاربر استفاده بیت.\nاگه شما یک کاربر ناشناس ایت وی حس کنیت بی ربطین نظر مربوط شمی هست، لطفا [[Special:UserLogin|وارد بیت ]] یا [[Special:CreateAccount|حسابی شرکن]] دان چه هور بییگ گون ناسناسین کاربران پرهیز بیت.''",
        "noarticletext": "هنو هچ متنی ته ای صفحه نیست.\nشما تونیت [[Special:Search/{{PAGENAME}}|گردیت په عنوان صفحه]]  ته دگه صفحات یا<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} گردگ په مربوطین آمار],\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اصلاح ای صفحه]</span>.",
        "editwarning-warning": "گون در شتن چه ائ پیج ممکن انت شمئی پهکین شانس که تان انیگء کٹ کتگ ات بیران بیت.\nاگان شما لاگین کتگ ات، بیت که ائ هژاریء مان ای بهر «{{int:prefs-editing}}» وتی پریفرنسء نافعال بکن ات..",
        "editpage-notsupportedcontentformat-title": "توکداریگء فرمت ساپورٹ نه بیت",
        "editpage-notsupportedcontentformat-text": "ائ توکداریگء فرمت $1 مان ائ توکداریگء تهر $2 ساپورٹ نبیتگ انت.",
+       "slot-name-main": "بُنیگ",
        "content-model-wikitext": "ویکیسیاهگ",
        "content-model-text": "سادگین سیاهگ",
        "content-model-javascript": "جاوا اسکریپٹ",
        "histfirst": "پیسریگ ترین",
        "histlast": "نوکترین",
        "historysize": "({{PLURAL:$1|1 بایت|$1 بایت}})",
-       "historyempty": "(هالیک)",
+       "historyempty": "(ھچ)",
        "history-feed-title": "تاریح بازبینی",
        "history-feed-description": "تاریح بازبینی په ای صفحه ته ویکی",
        "history-feed-item-nocomment": "$1 ته $2",
        "notextmatches": "هچ متن صفحه هم دپ نهنت",
        "prevn": "پیشگین {{PLURAL:$1|$1}}",
        "nextn": "بعدی {{PLURAL:$1|$1}}",
+       "prev-page": "پُشتی تاک",
+       "next-page": "اݔدگہ تاک",
        "prevn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} پیشگین",
        "nextn-title": "$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} دگه",
        "shown-title": "پیش دار $1 {{PLURAL:$1|نتیجه|نتیجه}} ته هر صفحه",
        "search-interwiki-caption": "پروژه آن گوهار",
        "search-interwiki-default": "نتایج چه $1 :",
        "search-interwiki-more": "(گیشتر)",
+       "search-interwiki-more-results": "گݔشتر",
        "search-relatedarticle": "مربوطین",
        "searchrelated": "مربوط",
        "searchall": "کل",
        "prefs-labs": "اپشن پر چکاس",
        "prefs-user-pages": "کاربریگین تاکان",
        "prefs-personal": "نمایه کاربر",
-       "prefs-rc": "نوکین تغییرات",
+       "prefs-rc": "نۏکݔں ٹگلاں",
        "prefs-watchlist": "لیست چارگ",
+       "prefs-editwatchlist": "چارگ لیستءِ ٹگلݔنگ",
        "prefs-watchlist-days": "روچان په پیش دارگ ته لیست چارگ",
        "prefs-watchlist-days-max": "(مکسیمم $1 {{PLURAL:$1|روچ|روچ}})",
        "prefs-watchlist-edits": "گشیترین تعداد تغییرات په پیشدارگ ته پچین لیست چارگ:",
        "grouppage-bureaucrat": "{{ns:project}}:دیواندارآن",
        "grouppage-suppress": "{{ns:project}}:رویت",
        "right-read": "بوان صفحاتء",
-       "right-edit": "اصÙ\84اح Ú©Ù\86 ØµÙ\81حاتء",
+       "right-edit": "تاکءÙ\90 Ù¹Ú¯Ù\84",
        "right-createpage": "شرکن صفحاتء(که صفحات بحث نهنت)",
        "right-createtalk": "شرکتن صفحات بحث",
        "right-createaccount": "شرکتن نوکین حسابان کاربری",
        "double-redirect-fixer": "تعمیرکنوک غیر مستقیم",
        "brokenredirects": "پروشتگین غیر مستقیمان",
        "brokenredirectstext": "جهلیگین غیر مستقیم لینک بوتگن په صفحات نیستن:",
-       "brokenredirects-edit": "اصلاح",
+       "brokenredirects-edit": "ٹگلݔنگ",
        "brokenredirects-delete": "حذف",
        "withoutinterwiki": "صفحاتی بی لینکان زبان",
        "withoutinterwiki-summary": "جهلیگین صفحات په دگه نسخه آن زبان لینک نه بوتت:",
        "sp-contributions-search": "گردگ په مشارکتان",
        "sp-contributions-username": "آدرس آی پی یا نام کاربری",
        "sp-contributions-submit": "گردگ",
-       "whatlinkshere": "اÛ\8c Ù\84Û\8cÙ\86Ú©Û\8c Ú©Ù\87 Ø§Ø¯Ø§ Ù\87ست",
+       "whatlinkshere": "اÛ\92 Ù\84Û\8cÙ\86Ú©Û\92 Ú©Û\81 Ø§Ø¯Ø§ Ú¾Û\81",
        "whatlinkshere-title": "صفحاتی که لینگ بوتگنت په \"$1\"",
        "whatlinkshere-page": "صفحه:",
        "linkshere": "جهلیگی صفحات لینک بوت '''$2''':",
index c8cbee5..63611ff 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "прапаноўваць зьмену па ўваходзе",
        "easydeflate-invaliddeflate": "Пададзены зьмест ня сьціснуты адпаведным чынам",
        "unprotected-js": "З прычынаў бясьпекі JavaScript ня можа быць загружаны зь неабароненых сайтаў. Калі ласка, стварайце javascript выключна ў прасторы назваў MediaWiki: ці як падстаронку ўдзельніка",
-       "userlogout-continue": "Калі вы захочаце выйсьці з сыстэмы, калі ласка, [$1 пераходзьце на старонку выхаду].",
-       "userlogout-sessionerror": "Выхад з сыстэмы не адбыўся праз памылку сэсіі. Калі ласка, [$1 паспрабуйце зноў]."
+       "userlogout-continue": "Вы жадаеце выйсьці з сыстэмы?"
 }
index 919c6a6..042613f 100644 (file)
        "deleteprotected": "Не можете да изтриете страницата, защото е защитена.",
        "deleting-backlinks-warning": "<strong>Внимание:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Други страници]] сочат към или включват като шаблон страницата, която се опитвате да изтриете.",
        "rollback": "Отмяна на промените",
+       "rollback-confirmation-no": "Отказ",
        "rollbacklink": "отмяна",
        "rollbacklinkcount": "отмяна на $1 {{PLURAL:$1|редакция|редакции}}",
        "rollbacklinkcount-morethan": "отмяна на повече от $1 {{PLURAL:$1|редакция|редакции}}",
index 311e82b..8c1b440 100644 (file)
@@ -85,6 +85,7 @@
        "category-empty": "''Sta categuria ùn cuntene alcuna pagina o file multimediale.''",
        "hidden-categories": "{{PLURAL:$1|Categuria nascosta|Categurie nascoste}}",
        "hidden-category-category": "Categurie nascoste",
+       "listingcontinuesabbrev": "sèguita",
        "index-category": "Pagine indicizate",
        "about": "À prupositu",
        "article": "Articulu",
        "viewtalkpage": "Vede a discussione",
        "otherlanguages": "In altre lingue",
        "redirectpagesub": "Pagina di reindirizzamentu",
+       "redirectto": "Reindirizzamentu à:",
        "lastmodifiedat": "Ultima mudifica di sta pagina u $1 à e $2.",
        "protectedpage": "Pagina prutetta",
        "jumpto": "Andà à:",
        "mycustomcssprotected": "You do not have permission to edit this CSS page.",
        "virus-unknownscanner": "antivirus scunnisciutu:",
        "yourname": "Nome di cuntributore:",
+       "userlogin-yourname": "Nome di cuntributore",
        "yourpassword": "Parolla secreta:",
+       "userlogin-yourpassword": "Parolla secreta",
        "yourpasswordagain": "Ripete a parolla secreta:",
        "yourdomainname": "U to duminiu:",
        "login": "Cunnessione",
        "nav-login-createaccount": "Cunnessione / registramentu",
        "logout": "Scunnessione",
        "userlogout": "Scunnessione",
+       "userlogin-noaccount": "Ùn hai ancu un accessu?",
        "createaccount": "Registramentu",
+       "userlogin-resetpassword-link": "Ti sì scurdatu/a di a to parolla secreta?",
        "createacct-reason": "Mutivu",
+       "createacct-submit": "Registramentu",
+       "createacct-benefit-body2": "$1 {{PLURAL:$1|pàgina|pàgine}}",
        "loginsuccesstitle": "Cunnessione fatta",
        "acct_creation_throttle_hit": "Desulatu, ai digià fattu $1 registramenti. Ùn ne poi micca fà d'altri.",
        "accountcreated": "Registramentu fattu",
        "accountcreatedtext": "U registramentu di l'utilizatore $1 hè statu fattu.",
        "loginlanguagelabel": "Lingua: $1",
        "pt-login": "Cunnessione",
+       "pt-login-button": "Cunnessione",
+       "pt-userlogout": "Scunnessione",
        "retypenew": "Scrive torna a nova parulla secreta:",
        "resetpass-submit-cancel": "Cancillà",
        "bold_sample": "Grassettu",
        "italic_tip": "Italicu",
        "link_sample": "Titulu di u ligame",
        "link_tip": "Ligame internu",
+       "extlink_sample": "http://www.example.com tìtulu di ligame",
        "extlink_tip": "Ligamu esternu (cù u prefissu http:// )",
        "headline_sample": "Testu di intestatura",
        "headline_tip": "Intestamentu di 2° livellu",
        "revisionasof": "Versione di e $1",
        "revision-info": "Versione di e $4 à e $5 di $2",
        "previousrevision": "← Versione menu ricente",
+       "nextrevision": "Versione più nova →",
        "currentrevisionlink": "Ultima revisione",
        "cur": "att",
        "last": "ante",
        "searchprofile-articles-tooltip": "Circà in $1",
        "searchprofile-everything-tooltip": "Circà dapertuttu (incluse e pagine di discussione)",
        "search-result-size": "$1 ({{PLURAL:$2|1 parolla|$2 parolle}})",
+       "search-redirect": "(Reindirizzamentu da $1)",
        "search-section": "(sezzione $1)",
        "search-suggest": "Forse vulii dì $1",
        "searchrelated": "currilati",
+       "searchall": "tutti",
        "search-nonefound": "A ricerca ùn hà micca datu risultati.",
        "powersearch-ns": "Circà in u spaziu di nomi",
        "preferences": "Preferenze",
        "rcnotefrom": "Quì seguitanu e mudifiche dapoi u '''$2''' ('''$1''' à u massimu).",
        "rclistfrom": "Mustrà e mudifiche dapoi u $3 $2",
        "rcshowhideminor": "$1 i cambiamenti minori",
+       "rcshowhideminor-show": "Muscià",
+       "rcshowhideminor-hide": "piattà",
        "rcshowhidebots": "$1 i boti",
+       "rcshowhidebots-show": "Muscià",
+       "rcshowhidebots-hide": "piattà",
        "rcshowhideliu": "$1 i cuntributori righjistrati",
+       "rcshowhideliu-show": "Muscià",
+       "rcshowhideliu-hide": "piattà",
        "rcshowhideanons": "$1 i cuntributori anonimi",
        "rcshowhideanons-show": "Muscià",
+       "rcshowhideanons-hide": "piattà",
        "rcshowhidepatr": "$1 e mudifiche verificate",
        "rcshowhidemine": "$1 e mo cuntribuzioni",
-       "rclinks": "Mustrà l'ultime $1 mudifiche in i $2 ghjorni scorsi",
+       "rcshowhidemine-show": "Mustrà",
+       "rcshowhidemine-hide": "piattà",
+       "rclinks": "Mustrà l'ùltime $1 mudifiche in i $2 ghjorni scorsi",
+       "diff": "Differenza",
        "hist": "cron",
        "hide": "piattà",
        "show": "mustrà",
        "upload": "Incaricà un schedariu",
        "uploadbtn": "Incaricà un schedariu",
        "filename": "Nome di u schedariu",
+       "filedesc": "sommariu",
        "filestatus": "Statu di u dirittu d'autore:",
        "upload-file-error": "Errore internu",
        "license": "Licenzia:",
        "pager-newer-n": "{{PLURAL:$1|1 più ricente|$1 più ricenti}}",
        "pager-older-n": "{{PLURAL:$1|1 menu ricente|$1 menu ricenti}}",
        "booksources": "Libri di fonti",
+       "booksources-search": "Circà",
        "specialloguserlabel": "Utilizatore:",
        "speciallogtitlelabel": "Titulu:",
        "log": "Righjistramenti",
        "contributions": "Mudifiche fatte da i {{GENDER:$1|cuntributori|cuntributrici}}",
        "contributions-title": "Cuntribuzione di $1",
        "mycontris": "Cuntribuzioni",
+       "anoncontribs": "Cuntribuzioni",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
        "uctop": "attuale",
        "month": "Da u mese (è nanzu):",
        "sp-contributions-newbies": "Mustrà solu e mudifiche di i novi cuntributori",
        "sp-contributions-talk": "discussione",
        "sp-contributions-search": "Ricercà e cuntribuzione",
+       "sp-contributions-username": "Adrizzu IP o nome di cuntributore",
+       "sp-contributions-toponly": "Solu mustrà versioni attuali",
        "sp-contributions-submit": "Circà",
        "whatlinkshere": "Pagine chì leganu quì",
        "whatlinkshere-title": "Pagine ligate à \"$1\"",
+       "whatlinkshere-page": "Pàgina:",
        "linkshere": "E seguente pagine sò culligate à '''$2''':",
+       "isredirect": "Pàgina di reindirizzamentu",
        "istemplate": "inclusione",
        "whatlinkshere-prev": "{{PLURAL:$1|precidente|precidenti $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|seguente|seguenti $1}}",
        "whatlinkshere-links": "← ligami",
+       "whatlinkshere-hideredirs": "$1 reindirizzamenti",
        "whatlinkshere-hidetrans": "$1 inclusione",
        "whatlinkshere-hidelinks": "$1 ligami",
+       "whatlinkshere-filters": "Filtri",
        "ipaddressorusername": "Adrizzu IP o nome di cuntributore",
        "ipbreason": "Mutivu:",
        "ipboptions": "2 ore:2 hours,1 ghjornu:1 day,3 ghjorni:3 days,1 sittimana:1 week,2 sittimane:2 weeks,1 mese:1 month,3 mesi:3 months,6 mesi:6 months,1 annu:1 year,infinitu:infinite",
        "importfailed": "Importu fiascatu: $1",
        "importlogpage": "Importu log",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisione|revisione}}",
-       "tooltip-pt-userpage": "A to pagina di cuntributore",
-       "tooltip-pt-mytalk": "A to pagina di discussione",
-       "tooltip-pt-preferences": "E to preferenze",
+       "tooltip-pt-userpage": "{{GENDER:|A to}} pàgina di cuntributore",
+       "tooltip-pt-mytalk": "{{GENDER:|A to}} pàgina di discussione",
+       "tooltip-pt-preferences": "{{GENDER:|E to}}} preferenze",
        "tooltip-pt-watchlist": "Lista di e pagine ch'è tù suviti",
-       "tooltip-pt-mycontris": "Lista di e to cuntribuzioni",
+       "tooltip-pt-mycontris": "Lista di {{GENDER:|e to}} cuntribuzioni",
        "tooltip-pt-login": "U registramentu hè suggeritu, micca ubligatoriu",
        "tooltip-pt-logout": "Esce da a sessione",
        "tooltip-ca-talk": "Vede e discussione relative à sta pagina",
        "tooltip-ca-delete": "Supprime sta pagina",
        "tooltip-ca-move": "Move 'ssa pagina",
        "tooltip-ca-watch": "Aghjunghje 'ssa pagina à u listinu di e pagine ch'è tù suviti",
+       "tooltip-ca-unwatch": "Supprimà 'ssa pàgina da u listinu di e pàgine ch'è tù suviti",
        "tooltip-search": "Circà in {{SITENAME}}",
        "tooltip-search-go": "Andà à una pagina incù u titolu indicatu, s'ella esiste",
        "tooltip-search-fulltext": "Circà e pagine cuntinenti stu testu",
        "tooltip-n-help": "Pagine di aiutu",
        "tooltip-t-whatlinkshere": "Listinu di tutte e pagine chì sò ligate à quessa",
        "tooltip-t-recentchangeslinked": "Versione di l'ultime mudifiche à e pagine legate à quessa",
-       "tooltip-t-contributions": "Listinu di e mudifiche di 'ssu cuntributore",
+       "tooltip-t-contributions": "Listinu di e mudifiche {{GENDER:$1|di 'ssu cuntributore}}",
        "tooltip-t-specialpages": "Listinu di tutte e pagine spiciale",
        "tooltip-t-print": "Versione stampevule di 'ssa pagina",
        "tooltip-t-permalink": "Ligame permanente à e revisione di sta pagina",
        "tooltip-ca-nstab-main": "Vede u cuntenutu di l'articulu",
        "tooltip-ca-nstab-user": "Vede a pagina di cuntributore",
+       "tooltip-ca-nstab-special": "Questa hè una pàgina particulare chi ùn si pó micca esse mudificata",
        "tooltip-ca-nstab-project": "Vede a pagina di u prugettu",
        "tooltip-ca-nstab-template": "Vede u mudellu",
        "tooltip-ca-nstab-category": "Vede a pagina di categuria",
index cb6b65b..b5c6e88 100644 (file)
        "mw-widgets-abandonedit-discard": "Zahodit úpravy",
        "mw-widgets-abandonedit-keep": "Pokračovat v editování",
        "mw-widgets-abandonedit-title": "Jste si {{GENDER:|jist|jista|jisti}}?",
+       "mw-widgets-copytextlayout-copy": "Zkopírovat",
+       "mw-widgets-copytextlayout-copy-fail": "Nepodařilo se zkopírovat do schránky.",
+       "mw-widgets-copytextlayout-copy-success": "Zkopírováno do schránky.",
        "mw-widgets-dateinput-no-date": "Nevybráno žádné datum",
        "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "passwordpolicies-policyflag-suggestchangeonlogin": "navrhnout změnu při přihlášení",
        "easydeflate-invaliddeflate": "Poskytnutý obsah nebyl správně zkomprimován",
        "unprotected-js": "Z bezpečnostních důvodů nelze načítat JavaScript z nechráněných stran. Vyrábějte prosím JavaScriptové skripty jen ve jmenném prostoru MediaWiki: nebo jako uživatelskou podstránku",
-       "userlogout-continue": "Pokud se chcete odhlásit, [$1 pokračujte na odhlašovací stránku].",
-       "userlogout-sessionerror": "Kvůli chybě sezení se odhlášení nezdařilo. [$1 Zkuste to prosím znovu]."
+       "userlogout-continue": "Chcete se odhlásit?"
 }
index fd44443..169cda8 100644 (file)
        "passwordpolicies": "Password politikker",
        "passwordpolicies-group": "Gruppe",
        "passwordpolicies-policies": "Politikker",
-       "passwordpolicies-policy-passwordcannotmatchusername": "Adgangskoden kan ikke være det samme som brugernavnet"
+       "passwordpolicies-policy-passwordcannotmatchusername": "Adgangskoden kan ikke være det samme som brugernavnet",
+       "userlogout-continue": "Ønsker du at logge af?"
 }
index dcf3aaf..fb7dd16 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "Änderung bei der Anmeldung vorschlagen",
        "easydeflate-invaliddeflate": "Der angegebene Inhalt ist nicht ordnungsgemäß komprimiert",
        "unprotected-js": "Aus Sicherheitsgründen kann JavaScript-Code nicht mehr von ungeschützten Seiten geladen werden. Erstelle die JavaScript-Seite bitte ausschließlich im Namensraum „MediaWiki“ oder als Benutzerunterseite.",
-       "userlogout-continue": "Falls du dich abmelden möchtest, [$1 fahre bitte auf der Abmeldeseite fort].",
-       "userlogout-sessionerror": "Abmeldung aufgrund eines Sitzungsfehlers fehlgeschlagen. Bitte [$1 erneut versuchen]."
+       "userlogout-continue": "Falls du dich abmelden möchtest, [$1 fahre bitte auf der Abmeldeseite fort]."
 }
index 6ae5f80..838980e 100644 (file)
        "filestatus": "Weziyetê heqa telifi:",
        "filesource": "Çıme:",
        "ignorewarning": "İqazi qebul meke û dosya reyna bar ke",
-       "ignorewarnings": "Îkazi kebul meke",
+       "ignorewarnings": "Tembey qebul mekerê",
        "minlength1": "Nameyanê dosyayî de gani bî ezamî yew herf est biyê.",
        "illegalfilename": "\"$1\" no nameyê dosya de tayê karakteri nêşuxulyenî. newe ra tesel bıkerê",
        "filename-toolong": "Nameyê dosyayan 240 bayt ra derg do nêbo.",
        "listusers-blocked": "(kılit biyo)",
        "activeusers": "Lista karberanê aktifan",
        "activeusers-intro": "Ena yew lista karberê ke $1 {{PLURAL:$1|roc|rocan}} ra tepiya iştirak kerdo inan motneno.",
-       "activeusers-count": "{{PLURAL:$3|roce de|$3 rocan de}} '''$1''' {{PLURAL:$1|iştırak kerdo|iştıraki kerdê}}",
+       "activeusers-count": "{{PLURAL:$3|roce de|$3 rocan de}} $1 {{PLURAL:$1|iştırak kerdo|iştıraki kerdê}}",
        "activeusers-from": "Enê karberi ra tepya bımocne:",
        "activeusers-noresult": "Karberi nêdiyayê.",
        "activeusers-submit": "Karberanê aktivan bıasene",
index 59e5370..af10a59 100644 (file)
        "action-upload_by_url": "να επιφορτώσετε αυτό το αρχείο από μια διεύθυνση URL",
        "action-writeapi": "να χρησιμοποιήσετε το API για εγγραφή",
        "action-delete": "να διαγράψετε αυτή τη σελίδα",
-       "action-deleterevision": "διαγράψτε αναθεωρήσεις",
+       "action-deleterevision": "διαγράψετε αναθεωρήσεις",
        "action-deletelogentry": "διαγράψτε καταχωρήσεις καταγραφών",
        "action-deletedhistory": "προβάλετε διαγεγραμμένο ιστορικό σελίδας",
        "action-deletedtext": "να προβάλετε κείμενο διαγεγραμμένων αναθεωρήσεων",
        "deletionlog": "Καταγραφές διαγραφών",
        "log-name-create": "Αρχείο καταγραφών δημιουργίας σελίδων",
        "log-description-create": "Παρακάτω υπάρχει ένας κατάλογος των πιο πρόσφατων δημιουργιών σελίδας.",
+       "logentry-create-create": "$1 δημιούργησε τη σελίδα $3",
        "reverted": "Επαναφορά σε προηγούμενη αναθεώρηση",
        "deletecomment": "Λόγος:",
        "deleteotherreason": "Άλλος/πρόσθετος λόγος:",
index 0dd9fe0..851a6b2 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "suggest change on login",
        "easydeflate-invaliddeflate": "Content provided is not properly deflated",
        "unprotected-js": "For security reasons JavaScript cannot be loaded from unprotected pages. Please only create javascript in the MediaWiki: namespace or as a User subpage",
-       "userlogout-continue": "If you wish to log out please [$1 continue to the log out page].",
-       "userlogout-sessionerror": "Log out failed due to session error. Please [$1 try again]."
+       "userlogout-continue": "Do you want to log out?"
 }
index c665d2c..fdf7e8c 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "sugesti ŝanĝadon dum ensaluto",
        "easydeflate-invaliddeflate": "Provizita enhavo ne estas ĝuste densigita",
        "unprotected-js": "Pro sekurecaj kialoj, JavaScript ne povas esti ŝargata el neprotektataj paĝoj. Bonvolu nur krei JavaScript en la nomspaco MediaWiki: aŭ kiel subpaĝo de Uzanto.",
-       "userlogout-continue": "Se vi vola elsaluti, bonvolu  [$1 iri al la elsaluta paĝo].",
-       "userlogout-sessionerror": "Elsalutado malsukcesis pro sesia eraro. Bonvolu [$1 reprovi]."
+       "userlogout-continue": "Se vi vola elsaluti, bonvolu  [$1 iri al la elsaluta paĝo]."
 }
index 902e7dc..018131b 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "sugerir cambio al acceder a la cuenta",
        "easydeflate-invaliddeflate": "El contenido proporcionado no esta comprimido correctamente",
        "unprotected-js": "Por razones de seguridad, JavaScript no se puede cargar desde páginas desprotegidas. Crea javascript solo en MediaWiki: espacio de nombres o como subpágina de usuario",
-       "userlogout-continue": "Si deseas cerrar sesión, [$1 continúa a la página de cierre de sesión].",
-       "userlogout-sessionerror": "No se pudo cerrar la sesión debido a un error de sesión. [$1 Inténtalo de nuevo]."
+       "userlogout-continue": "Si deseas cerrar sesión, [$1 continúa a la página de cierre de sesión]."
 }
index ed6879a..f447601 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "soovita muutmist sisselogimisel",
        "easydeflate-invaliddeflate": "Ette antud sisu ei ole õigesti vähendatud",
        "unprotected-js": "Turvalisuse huvides ei saa JavaScripti laadida kaitsmata lehekülgedelt. Palun koosta JavaScripti ainult nimeruumis MediaWiki või kasutajate nimeruumi alamleheküljel.",
-       "userlogout-continue": "Kui soovid välja logida, siis palun [$1 mine väljalogimise leheküljele].",
-       "userlogout-sessionerror": "Väljalogimine ebaõnnestus seansitõrke tõttu. Palun [$1 proovi uuesti]."
+       "userlogout-continue": "Kui soovid välja logida, siis palun [$1 mine väljalogimise leheküljele]."
 }
index 92c83d9..7b12798 100644 (file)
        "exif-pngfilecomment": "Kоментар на PNG файл",
        "exif-disclaimer": "Уточнение",
        "exif-contentwarning": "Предупреждение за съдържанието",
-       "exif-giffilecomment": "Kоментар на GIF файл",
-       "exif-intellectualgenre": "Тип ÐµÐ»ÐµÐ¼ÐµÐ½Ñ\82",
+       "exif-giffilecomment": "Коментар на GIF файл",
+       "exif-intellectualgenre": "Тип Ð½Ð° Ð¾Ð±ÐµÐºÑ\82а",
        "exif-subjectnewscode": "Код на темата",
        "exif-event": "Изобразено събитие",
        "exif-organisationinimage": "Изобразена организация",
        "exif-personinimage": "Изобразена личност",
-       "exif-originalimageheight": "Ð\92иÑ\81оÑ\87ина Ð½Ð° Ð¸Ð·Ð¾Ð±Ñ\80ажениеÑ\82о Ð¿Ñ\80еди Ð½Ð°Ð¼Ð°Ð»Ñ\8fването",
-       "exif-originalimagewidth": "ШиÑ\80ина Ð½Ð° Ð¸Ð·Ð¾Ð±Ñ\80ажениеÑ\82о Ð¿Ñ\80еди Ð½Ð°Ð¼Ð°Ð»Ñ\8fването",
-       "exif-compression-1": "Ð\9dекомпресиран",
+       "exif-originalimageheight": "Ð\92иÑ\81оÑ\87ина Ð½Ð° Ð¸Ð·Ð¾Ð±Ñ\80ажениеÑ\82о Ð¿Ñ\80еди Ð¸Ð·Ñ\80Ñ\8fзването",
+       "exif-originalimagewidth": "ШиÑ\80ина Ð½Ð° Ð¸Ð·Ð¾Ð±Ñ\80ажениеÑ\82о Ð¿Ñ\80еди Ð¸Ð·Ñ\80Ñ\8fзването",
+       "exif-compression-1": "Ð\94екомпресиран",
        "exif-compression-5": "LZW",
        "exif-compression-6": "JPEG (стар)",
        "exif-compression-7": "JPEG",
index 89a5d4b..cad4da9 100644 (file)
@@ -42,7 +42,7 @@
        "exif-pixelxdimension": "Ширина на сликата",
        "exif-pixelydimension": "Висина на сликата",
        "exif-usercomment": "Кориснички коментари",
-       "exif-relatedsoundfile": "Ð\9fовÑ\80зана Ð°Ñ\83диоснимка",
+       "exif-relatedsoundfile": "Ð\9fовÑ\80зана Ð·Ð²Ñ\83Ñ\87на снимка",
        "exif-datetimeoriginal": "Датум и време на сликање",
        "exif-datetimedigitized": "Датум и време на дигитализација",
        "exif-subsectime": "Дел од секундата во кој е сликано",
diff --git a/languages/i18n/exif/sdc.json b/languages/i18n/exif/sdc.json
new file mode 100644 (file)
index 0000000..d555538
--- /dev/null
@@ -0,0 +1,63 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Felis",
+                       "Jun Misugi",
+                       "Midnight Gambler"
+               ]
+       },
+       "exif-imagewidth": "Larghèzia",
+       "exif-imagelength": "Althèzia",
+       "exif-bitspersample": "Bit pa campioni",
+       "exif-compression": "Tipu di cumprissioni",
+       "exif-photometricinterpretation": "Sthruttura di li punti",
+       "exif-orientation": "Orientamentu",
+       "exif-xresolution": "Difinizioni orizontari",
+       "exif-yresolution": "Difinizioni verthicari",
+       "exif-datetime": "Data e ora di lu ciambamentu di lu file",
+       "exif-imagedescription": "Deschrizioni di l'immàgina",
+       "exif-model": "Mudellu",
+       "exif-software": "Software usaddu",
+       "exif-artist": "Autori",
+       "exif-copyright": "Infuimmazioni i' lu dirittu d'autori",
+       "exif-exifversion": "Versioni di lu fuimmaddu Exif",
+       "exif-colorspace": "Ippàziu di li curori",
+       "exif-usercomment": "Noti di l'utenti",
+       "exif-exposuretime-format": "$1 sigundu ($2)",
+       "exif-flash": "Caratterìsthiga e cundizioni di lu lampu",
+       "exif-flashenergy": "Putènzia di lu lampu",
+       "exif-contrast": "Cuntrollu cuntrasthu",
+       "exif-languagecode": "Linga",
+       "exif-iimcategory": "Categuria",
+       "exif-orientation-1": "Noimmari",
+       "exif-componentsconfiguration-0": "assenti",
+       "exif-subjectdistance-value": "$1 metri",
+       "exif-meteringmode-0": "Ischunisciddu",
+       "exif-meteringmode-1": "Mèdia",
+       "exif-meteringmode-2": "Mèdia pisadda cintradda",
+       "exif-meteringmode-3": "Luzi puntuari",
+       "exif-meteringmode-4": "MultiLuzi",
+       "exif-meteringmode-5": "Taurozza basi",
+       "exif-meteringmode-255": "Althru",
+       "exif-lightsource-1": "Luzi diurna",
+       "exif-lightsource-4": "Lampu",
+       "exif-lightsource-17": "Luzi standard A",
+       "exif-lightsource-18": "Luzi standard B",
+       "exif-lightsource-19": "Luzi standard C",
+       "exif-lightsource-20": "Illuminanti D55",
+       "exif-lightsource-21": "Illuminanti D65",
+       "exif-lightsource-22": "Illuminanti D75",
+       "exif-lightsource-23": "Illuminanti D50",
+       "exif-focalplaneresolutionunit-2": "póddighi",
+       "exif-sensingmethod-1": "Nò difiniddu",
+       "exif-gaincontrol-0": "Nisciunu",
+       "exif-contrast-0": "Noimmari",
+       "exif-contrast-1": "Althu cuntrasthu",
+       "exif-contrast-2": "Bassu cuntrasthu",
+       "exif-saturation-0": "Noimmari",
+       "exif-sharpness-0": "Noimmari",
+       "exif-sharpness-1": "Minori nitiddèzia",
+       "exif-sharpness-2": "Maggiori nitiddèzia",
+       "exif-subjectdistancerange-0": "Ischuniscidda",
+       "exif-gpsspeed-n": "Nodi"
+}
index 137815f..70c0b67 100644 (file)
        "virus-scanfailed": "پویش ناموفق (کد $1)",
        "virus-unknownscanner": "ضدویروس ناشناخته:",
        "logouttext": "'''اکنون شما ثبت خروج کرده‌اید.'''\nتوجه داشته باشید که تا حافظهٔ نهان مرورگرتان را پاک نکنید، بعضی از صفحات ممکن است همچنان به گونه‌ای نمایش یابند که انگار وارد شده‌اید.",
+       "logging-out-notify": "از سامانه خارج‌شده‌اید، لطفا صبر پیشه کنید.",
+       "logout-failed": "الان امکان خروج از سامانه وجود ندارد:$1",
        "cannotlogoutnow-title": "الان امکان خروج از سامانه نیست",
        "cannotlogoutnow-text": "در زمان استفاده از $1 امکان خروج از سامانه وجود ندارد.",
        "welcomeuser": "خوشامدید $1!",
        "rcfilters-savedqueries-already-saved": "این پالایه‌ها اکنون ذخیره شده‌اند. تنظیمات‌تان را تغییر دهید تا یک پالایهٔ ذخیره شدهٔ جدید بسازید.",
        "rcfilters-restore-default-filters": "بازگردانی پالایه‌های پیش‌فرض",
        "rcfilters-clear-all-filters": "پاک‌کردن تمام پالایه‌ها",
-       "rcfilters-show-new-changes": "دیدن جدیدترین تغییرات",
+       "rcfilters-show-new-changes": "دیدن جدیدترین تغییرات از $1",
        "rcfilters-search-placeholder": "پالایش تغییرات (استفاده از منو یا جستجو برای نام پالایه)",
        "rcfilters-invalid-filter": "پالایهٔ نامعتبر",
        "rcfilters-empty-filter": "پالایه‌ای فعال نیست. همهٔ مشارکت‌های دیده می‌شوند.",
        "blocklist-addressblocks": "پنهان کردن تک آی‌پی‌های بسته شده",
        "blocklist-type": "نوع:",
        "blocklist-type-opt-all": "همه",
+       "blocklist-type-opt-sitewide": "کلی",
        "blocklist-type-opt-partial": "جزئی",
        "blocklist-rangeblocks": "پنهان کردن قطع دسترسی بازه‌ها",
        "blocklist-timestamp": "برچسب زمان",
        "blocklink": "بستن",
        "unblocklink": "باز شود",
        "change-blocklink": "تغییر قطع دسترسی",
+       "empty-username": "(نام کاربری موجود نیست)",
        "contribslink": "مشارکت‌ها",
        "emaillink": "ارسال ایمیل",
        "autoblocker": "به طور خودکار بسته شد چون آی‌پی شما به تازگی توسط کاربر «[[User:$1|$1]]» استفاده شده‌است.\nدلیل قطع دسترسی $1 چنین است \"$2\"",
        "mw-widgets-abandonedit-keep": "ادامه دادن به ویرایش",
        "mw-widgets-abandonedit-title": "آیا مطمئن هستید؟",
        "mw-widgets-copytextlayout-copy": "رونوشت",
+       "mw-widgets-copytextlayout-copy-fail": "خطا در کپی کردن به کلیپ‌برد",
+       "mw-widgets-copytextlayout-copy-success": "به کلیپ‌برد کپی شد.",
        "mw-widgets-dateinput-no-date": "هیچ داده‌ای انتخاب نشده",
        "mw-widgets-mediasearch-input-placeholder": "جستجو برای رسانه‌ها",
        "mw-widgets-mediasearch-noresults": "هیچ نتیجه‌ای پیدا نشد.",
        "passwordpolicies-policyflag-forcechange": "در هنگام ورود باید تغییر دهید",
        "passwordpolicies-policyflag-suggestchangeonlogin": "در هنگام ورود، پیشنهاد تغییر بده",
        "easydeflate-invaliddeflate": "محتوی تهیه‌شده به صورت درست خالی نشده‌است",
-       "unprotected-js": "به دلایل امنیتی، جاوااسکریپت نمی‌تواند از صفحات محافظت‌نشده بارگیری شود. لطفا جاوااسکریپت را تنها در فضای نام مدیاویکی: و یا در زیرصفحهٔ کاربری خودتان ایجاد کنید."
+       "unprotected-js": "به دلایل امنیتی، جاوااسکریپت نمی‌تواند از صفحات محافظت‌نشده بارگیری شود. لطفا جاوااسکریپت را تنها در فضای نام مدیاویکی: و یا در زیرصفحهٔ کاربری خودتان ایجاد کنید.",
+       "userlogout-continue": "آیا قصد خروج از سامانه را دارید؟"
 }
index 09417f4..afd803e 100644 (file)
        "virus-scanfailed": "virustarkistus epäonnistui (virhekoodi $1)",
        "virus-unknownscanner": "tuntematon virustutka:",
        "logouttext": "<strong>Olet nyt kirjautunut ulos.</strong>\n\nOta huomioon, että jotkut sivut saattavat näkyä edelleen ikään kuin olisit vielä kirjautuneena sisään siihen saakka kunnes tyhjennät selaimesi välimuistin.",
+       "logging-out-notify": "Sinua kirjataan ulos, odota hetki.",
        "cannotlogoutnow-title": "Nyt ei voi kirjautua ulos",
        "cannotlogoutnow-text": "Kirjautuminen ulos ei ole mahdollista käytettäessä $1.",
        "welcomeuser": "Tervetuloa $1!",
        "blankarticle": "<strong>Varoitus:</strong> Sivu, jota olet luomassa on tyhjä.\nJos napsautat ”$1” uudelleen, sivu luodaan ilman sisältöä.",
        "anoneditwarning": "<strong>Varoitus:</strong> Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos <strong>[$1 kirjaudut sisään]</strong> tai <strong>[$2 luot tunnuksen]</strong>, muokkauksesi kirjataan käyttäjätunnuksesi tekemiksi ja samalla saat käyttöösi hyödyllisiä välineitä.",
        "anonpreviewwarning": "''Et ole kirjautunut sisään. Tallentaminen kirjaa IP-osoitteesi tämän sivun muutoshistoriaan.''",
-       "missingsummary": "Et ole antanut yhteenvetoa. Jos valitset Tallenna uudelleen, niin muokkauksesi tallennetaan ilman yhteenvetoa.",
+       "missingsummary": "<strong>Huomautus:</strong> Et ole antanut yhteenvetoa.\nJos painat \"$1\" uudelleen, niin muokkauksesi tallennetaan ilman yhteenvetoa.",
        "selfredirect": "<strong>Varoitus:</strong> Olet tekemässä uudelleenohjausta, joka johtaa tästä sivusta tähän samaan sivuun. \n\nOlet ehkä määrittänyt ohjauksen kohteen väärin tai kenties muokkaat parhaillaan väärää sivua.\n\nJos painat toimintoa ”$1” uudestaan, tämä ohjaussivu luodaan joka tapauksessa.",
        "missingcommenttext": "Kirjoita kommentti.",
        "missingcommentheader": "<strong>Muistutus:</strong> Et ole antanut aiheotsikkoa tälle kommentille. Napsauta ”$1”, jos haluat tallentaa kommenttisi ilman sellaista.",
        "uploadnewversion-linktext": "Tallenna uusi versio tästä tiedostosta",
        "shared-repo-from": "kohteesta $1",
        "shared-repo": "yhteinen mediavarasto",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons",
        "filepage.css": "/* Tänne syötetty CSS-koodi sisältyy tiedoston kuvaussivulle sekä muunkielisille asiakaswikeille */",
        "upload-disallowed-here": "Et voi tallentaa uutta tiedostoa tämän tilalle.",
        "filerevert": "Tiedoston $1 palautus",
        "ipb-confirm": "Vahvista esto",
        "ipb-sitewide": "Sivuston laajuinen",
        "ipb-partial": "Osittainen",
+       "ipb-sitewide-help": "Kaikki sivut wikissä ja kaikki muu muokkaustoiminta.",
        "ipb-partial-help": "Tietyt sivut tai nimiavaruudet.",
        "ipb-pages-label": "Sivut",
        "ipb-namespaces-label": "Nimiavaruudet",
        "passwordpolicies-policy-maximalpasswordlength": "Salasanan tulee olla lyhyempi kuin $1 {{PLURAL:$1|merkki|merkkiä}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Salasana ei saa olla {{PLURAL:$1|suosittu salasana|$1 suosituimman salasanan listalla}}",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "Salasana ei voi olla 100,000 yleisimmin käytetyn joukossa.",
-       "unprotected-js": "Turvallisuussyistä JavaScriptiä ei voi ladata suojaamattomilta sivuilta. Luo JavaScript-sivuja vain MediaWiki-nimiavaruuteen tai käyttäjän alasivulle."
+       "unprotected-js": "Turvallisuussyistä JavaScriptiä ei voi ladata suojaamattomilta sivuilta. Luo JavaScript-sivuja vain MediaWiki-nimiavaruuteen tai käyttäjän alasivulle.",
+       "userlogout-continue": "Haluatko kirjautua ulos?"
 }
index ae29db9..07f305e 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "suggérer une modification à la connexion",
        "easydeflate-invaliddeflate": "Le contenu fourni n'est pas correctement développé",
        "unprotected-js": "Pour des raisons de sécurité, JavaScript ne peut pas être chargé depuis des pages non protégées. Veuillez ne créer du javascript que dans l’espace de noms MediaWiki: ou comme sous-page utilisateur",
-       "userlogout-continue": "Si vous voulez vous déconnecter, veuillez [$1 continuer vers la page de déconnexion].",
-       "userlogout-sessionerror": "Déconnexion échouée à cause d’une erreur de session. Veuillez [$1 réessayer]."
+       "userlogout-continue": "Voulez-vous vous déconnecter ?"
 }
index 3705352..ae90b48 100644 (file)
@@ -56,6 +56,7 @@
        "tog-watchlisthidebots": "Botbewurkings ferbergje yn 'e folchlist",
        "tog-watchlisthideminor": "Feroarings fan lytse betsjutting ferbergje yn 'e folchlist",
        "tog-watchlisthideliu": "Bewurkings fan oanmelde meidoggers ferbergje yn 'e folchlist",
+       "tog-watchlistreloadautomatically": "Folchlist automatysk werlade at in filter feroare wurdt (JavaScript fereaske)",
        "tog-watchlistunwatchlinks": "Direkte folch-/ûntfolchmarkearders taheakje ({{int:Watchlist-unwatch-undo}}/{{int:Watchlist-unwatch}}) oan folchlistsiden mei wizigings (JavaScript fereaske foar omskeakelmooglikheid)",
        "tog-watchlisthideanons": "Bewurkings fan anonime meidoggers ferbergje yn 'e folchlist",
        "tog-watchlisthidepatrolled": "Markearre feroarings op myn folchlist ferskûlje",
@@ -65,6 +66,7 @@
        "tog-showhiddencats": "Ferburgen kategoryen werjaan",
        "tog-norollbackdiff": "Gjin ferskillen sjen litte nei it útfieren fan weromdraaien",
        "tog-useeditwarning": "My warskôgje at ik in bewurkingsside mei net-bewarre wizigings ferlit",
+       "tog-prefershttps": "Oanmeld altiten in befeilige ferbining brûke",
        "tog-showrollbackconfirmation": "Befêstigingsdialooch sjen litte by it klikken op 'weromdraaie'",
        "underline-always": "Altyd",
        "underline-never": "Nea",
        "category-empty": "<em>Dizze kategory befettet op it stuit gjin siden of media.</em>",
        "hidden-categories": "Ferburgen {{PLURAL:$1|kategory|kategoryen}}",
        "hidden-category-category": "Ferburgen kategoryen",
-       "category-subcat-count": "{{PLURAL:$2|Dizze kategory hat allinne de folgjende ûnderkategory.|Dizze kategory hat de folgjende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}, fan yn totaal $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Dizze kategory hat allinne de neikommende ûnderkategory.|Dizze kategory hat de neikommende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}, fan yn totaal $2.}}",
        "category-subcat-count-limited": "Dizze kategory hat de folgjende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}.",
-       "category-article-count": "{{PLURAL:$2|Dizze kategory befettet allinne de folgjende side.|De folgjende {{PLURAL:$1|side is|$1 siden binne}} yn dizze kategory, fan yn totaal $2.}}",
+       "category-article-count": "{{PLURAL:$2|Dizze kategory befettet allinne de neikommende side.|De neikommende {{PLURAL:$1|side sit|$1 siden sitte}} yn dizze kategory, fan yn totaal $2.}}",
        "category-article-count-limited": "De folgjende {{PLURAL:$1|side is|$1 siden binne}} yn dizze kategory.",
        "category-file-count": "{{PLURAL:$2|Dizze kategory befettet it folgjende bestân.|Dizze kategory befettet {{PLURAL:$1|it folgjende bestân|$1 de folgjende bestannen}}, fan yn totaal $2.}}",
        "category-file-count-limited": "Dizze kategory befettet {{PLURAL:$1|it folgjende bestân|de folgjende $1 bestannen}}.",
        "toolbox": "Ark",
        "tool-link-userrights": "{{GENDER:$1|Meidochgroepen}} feroarje",
        "tool-link-userrights-readonly": "{{GENDER:$1|Meidochgroepen}} besjen",
+       "tool-link-emailuser": "Dizze {{GENDER:$1|meidogger|meidochster}} e-maile",
        "imagepage": "Besjoch bestânsside",
        "mediawikipage": "Berjochtside sjen litte",
        "templatepage": "Berjochtside lêze",
        "emailauthenticated": "Jo e-mailadres is befêstige op $2 om $3.",
        "emailnotauthenticated": "Jo e-mailadres is noch net befêstige.\nDer sil gjin e-mail stjoerd wurde foar alle neikommende funksjes.",
        "noemailprefs": "Jou in e-mailadres op om dizze funksjes te brûken.",
-       "emailconfirmlink": "Befêstigje jo netpostadres.",
+       "emailconfirmlink": "Jo e-mailadres befêstigje",
        "invalidemailaddress": "It e-mailadres is net akseptearre om't it in ûnjildige opmaak hat.\nJou beleaven in jildich e-mailadres op of lit it fjild leech.",
        "accountcreated": "Meidogger oanmakke",
        "accountcreatedtext": "It meidoggersakkount [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|oerlis]]) is oanmakke.",
        "template-protected": "(befeilige)",
        "template-semiprotected": "(semy-befeilige)",
        "hiddencategories": "Dizze side falt yn de folgjende ferburgen\n{{PLURAL:$1|kategory|kategoryen}}:",
-       "edittools": "<!-- Tekst hjir stiet ûnder bewurkingsfjilden en oanbringfjilden.  -->",
+       "edittools": "<!-- De tekst hjirre wurdt werjûn ûnder it bewurkingsfjild en oanbiedformulier. -->",
        "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}} hat de mûglikheid beheind om nije siden oan te meitsjen.\nJo kinne al weromgean en besteande siden bewurkje, [[Special:UserLogin|jo oanmelde of in akkount oanmeitsje]].",
        "nocreate-loggedin": "Jo meie gjin nije siden meitsje",
        "prefs-skin": "Foarmjouwing",
        "skin-preview": "Proefbyld",
        "datedefault": "Gjin foarkar",
+       "prefs-labs": "Eksperimintele funksjes",
        "prefs-user-pages": "Meidoggersiden",
        "prefs-personal": "Meidogger",
        "prefs-rc": "Koartlyn feroare",
        "prefs-pageswatchlist": "Folchsiden",
        "prefs-tokenwatchlist": "Kaai",
        "prefs-diffs": "Ferskillen",
+       "prefs-help-prefershttps": "Dizze foarkar wurdt by jo neikommende oanmelding tapast.",
        "userrights": "Behear fan meidoggerrjochten",
        "userrights-lookup-user": "Behear fan meidoggerrjochten",
        "userrights-user-editname": "Jou in meidochnamme:",
        "recentchanges-label-minor": "Dizze feroaring is fan lytse betsjutting",
        "recentchanges-label-bot": "Dizze bewurking is troch in bot útfierd",
        "recentchanges-label-unpatrolled": "Dizze wiziging is noch net neisjoen",
-       "recentchanges-label-plusminus": "De sidegrutte is mei dit oantal bytes wizige",
+       "recentchanges-label-plusminus": "Sidegrutte is safolle bytes wizige",
        "recentchanges-legend-heading": "<strong>Leginda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}<br />(sjoch ek de [[Special:NewPages|list mei nije siden]])",
        "recentchanges-submit": "Werjaan",
        "upload": "Bestân oanbiede",
        "uploadbtn": "Bestân oplade",
        "reuploaddesc": "Opladen annulearje en weromgean nei it oanbiedformulier",
+       "upload-tryagain": "Bestânsbeskriuwing bywurkje",
        "uploadnologin": "Net oanmeld",
        "uploadnologintext": "Jo moatte $1 om bestannen oplade te kinnen.",
        "upload_directory_missing": "De heechlaadmap ($1) is der net en koe net oanmakke wurde troch de webserver.",
        "upload_directory_read_only": "De webserver kin net skriuwe yn de oanbiedpad ($1).",
-       "uploaderror": "Oanbiedfout",
+       "uploaderror": "Flater by it opladen",
        "uploadtext": "Brûk it formulier dat hjir folget om bestannen op te laden.\nGean nei de [[Special:FileList|bestânslist]], om earder opladen bestannen te besjen of op te sykjen. De (wer)opladen bestannen wurde ek opnommen yn it [[Special:Log/upload|oanbiedloch]], fuortsmiten bestannen yn it [[Special:Log/delete|wiskloch]].\n\nBrûk in keppeling yn ien fan 'e neikommende foarmen, en heakje in bestân oan in side ta:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestân.jpg]]</nowiki></code></strong> om de folsleine ferzje fan it bestân te brûken\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestân.png|200px|thumb|left|alt. tekst]]</nowiki></code></strong> om in ôfbylding fan 200 pixel breed te brûken, yn in ramt oan de lofter kant mei \"alt. tekst\" as beskriuwing\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestân.ogg]]</nowiki></code></strong> foar it sûnder werjefte, streekrjocht ferwizen nei it bestân",
        "upload-permitted": "Talitten bestânstypen: $1.",
        "upload-preferred": "Oanwiisde bestânstypen: $1.",
        "filereuploadsummary": "Bestânsferoarings:",
        "filestatus": "Auteursrjochtensituaasje:",
        "filesource": "Boarne:",
-       "ignorewarning": "Negearje de warskôging en lis bestân dochs fêst.",
-       "ignorewarnings": "Negearje warskôgings",
+       "ignorewarning": "Warskôging negearje en bestân dochs bewarje",
+       "ignorewarnings": "Mooglike warskôgings negearje",
        "minlength1": "Bestânsnammen moatte minstens út ien teken bestean.",
        "illegalfilename": "De bestânsnamme \"$1\" befettet ûnjildige tekens.\nJou it bestân in oare namme en besykje him dan op 'e nij heech te laden.",
        "badfilename": "De ôfbyldnamme is feroare nei \"$1\".",
        "destfilename": "Bestânsnamme om op te slaan:",
        "upload-maxfilesize": "Maksimale bestânsgrutte: $1",
        "upload-description": "Bestânsbeskriuwing",
-       "upload-options": "Oplaadynstellingen",
-       "watchthisupload": "Folgje dit bestân",
+       "upload-options": "Opsjes foar it opladen",
+       "watchthisupload": "Dit bestân folgje",
        "filewasdeleted": "Der is earder in bestân mei dizze namme fuorthelle.\nRieplachtsje it $1 foar't jo him op'e nij tafoegje.",
        "filename-bad-prefix": "De namme fan it bestân dat jo oanbiede begjint mei '''\"$1\"''', dit wiist op in namme dy't automatysk troch in digitale kamera oanmakke wurdt. Feroarje de namme as jo wolle yn ien dy't in omskriuwing jout fan it bestân.",
        "filename-prefix-blacklist": " #<!-- lit dizze line exakt sa't er is --> <pre>\n# Syntax is as folget:\n#   * Alles fan in \"#\"-teken oan't de ein fan de line is in kommintaar\n#   * Elke net blanke line is a foarheaksel foar bestânsnammen sa't dy automatysk jûn wurde troch digitale kamera's\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # guon mobile tillefoanen\nIMG # algemien\nJD # Jenoptik\nMGP # Pentax\nPICT # ferskaat\n #</pre> <!-- lit dizze line exakt sa't er is -->",
        "filehist-filesize": "Bestânsgrutte",
        "filehist-comment": "Opmerkings",
        "imagelinks": "Bestânsgebrûk",
-       "linkstoimage": "Dizze {{PLURAL:$1|side is|$1 siden binne}} keppele oan it ôfbyld:",
+       "linkstoimage": "De neikommende {{PLURAL:$1|side brûkt|$1 siden brûke}} dit bestân:",
        "linkstoimage-more": "Der {{PLURAL:$2|is|binne}} mear as $1 {{PLURAL:$1|ferwizing|ferwizings}} nei dit bestân.\nDe folgjende list jout allinne de earste {{PLURAL:$1|ferwizing|$1 ferwizings}} nei dit bestân wer.\nDer is ek in [[Special:WhatLinksHere/$2|folsleine list]].",
        "nolinkstoimage": "Der binne gjin siden oan dit ôfbyld keppele.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Mear ferwizings]] nei dit bestân besjen.",
        "trackingcategories-name": "Berjochtnamme",
        "mailnologin": "Gjin adres beskikber",
        "mailnologintext": "Jo moatte [[Special:UserLogin|oanmelden]] wêze, en in jildich e-postadres [[Special:Preferences|ynsteld]] hawwe, om oan oare meidoggers e-post stjoere te kinnen.",
-       "emailuser": "E-mail dizze meidogger",
+       "emailuser": "Dizze meidogger e-maile",
+       "emailuser-title-target": "Dizze {{GENDER:$1|meidogger|meidochster}} e-maile",
        "emailuser-title-notarget": "E-mail nei meidogger",
        "emailpagetext": "Jo kinne it formulier hjirûnder brûke om in e-mailberjocht nei dizze {{GENDER:$1|meidogger|meidochster}} te stjoeren.\nIt e-mailadres opjûn yn [[Special:Preferences|jo ynstellings]] wurdt sichtber as it 'Fan'-adres yn de e-mail, dat de ûntfanger jo streekrjocht antwurdzje kin.",
        "defemailsubject": "E-mail fan {{SITENAME}}-meidogger \"$1\"",
        "undelete-show-file-submit": "Ja",
        "namespace": "Nammeromte:",
        "invert": "Seleksje útsein",
+       "namespace_association": "Byhearrende nammeromte",
        "blanknamespace": "(Haad)",
        "contributions": "Bydragen fan 'e {{GENDER:$1|meidogger|meidochster}}",
        "contributions-title": "Bydragen fan $1",
        "tooltip-feed-rss": "RSS-feed foar dizze side",
        "tooltip-feed-atom": "Atom-feed foar dizze side",
        "tooltip-t-contributions": "List fan bydragen troch dizze {{GENDER:$1|meidogger|meidochster}}",
-       "tooltip-t-emailuser": "Stjoer in e-mail nei dizze {{GENDER:$1|meidogger|meidochster}}",
+       "tooltip-t-emailuser": "In e-mail nei dizze {{GENDER:$1|meidogger|meidochster}} stjoere",
        "tooltip-t-upload": "Bestannen oplade",
        "tooltip-t-specialpages": "List fan alle bysûndere siden",
        "tooltip-t-print": "Ofdrukferzje fan dizze side",
        "tooltip-ca-nstab-mediawiki": "It systeemberjocht sjen litte",
        "tooltip-ca-nstab-template": "It berjocht sjen litte",
        "tooltip-ca-nstab-help": "Helpside sjen litte",
-       "tooltip-ca-nstab-category": "Kategory-side sjen litte",
+       "tooltip-ca-nstab-category": "De kategoryside sjen litte",
        "tooltip-minoredit": "Markearje dizze feroaring as fan lytse betsjutting",
        "tooltip-save": "Jo feroarings bewarje",
        "tooltip-preview": "Oerlêze foar't de side fêstlein is!",
        "file-nohires": "Gjin hegere resolúsje beskikber.",
        "svg-long-desc": "SVG-bestân, nominaal $1 × $2 pixels, bestânsgrutte: $3",
        "show-big-image": "Oarspronklik bestân",
+       "show-big-image-preview": "Grutte fan dit proefbyld: $1.",
        "show-big-image-other": "Oare {{PLURAL:$2|resolúsje|resolúsjes}}: $1.",
        "show-big-image-size": "$1 × $2 pixels",
        "newimages": "Galery mei nije ôfbylden",
-       "imagelisttext": "Dit is in list fan '''$1''' {{PLURAL:$1|bestân|bestannen}}, op $2.",
+       "imagelisttext": "Hjirûnder folget in list fan <strong>$1</strong> {{PLURAL:$1|bestân|bestannen}}, sortearre $2.",
        "newimages-summary": "Dizze bysûndere side lit de lêst opladen bestannen sjen.",
        "newimages-legend": "Filter",
        "noimages": "Neat te sjen.",
        "ilsubmit": "Sykje",
-       "bydate": "datum",
+       "bydate": "op datum",
        "sp-newimages-showfrom": "Nije bestannen besjen fan $2, $1 ôf",
        "video-dims": "$1, $2 × $3",
        "seconds-abbrev": "$1 s",
index 97dd12e..48b6019 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "suxerir cambio ó iniciar sesión",
        "easydeflate-invaliddeflate": "O contido fornecido non está debidamente comprimido",
        "unprotected-js": "Por motivos de seguridade non se pode cargar JavaScript desde páxinas non protexidas. Por favor, cree só JavaScript no espazo de nomes MediaWiki ou como subpáxina de usuario",
-       "userlogout-continue": "Se quere pechar a sesión, por favor, [$1 continúe á páxina de peche de sesión].",
-       "userlogout-sessionerror": "No se puido pechar a sesión debido a un erro de sesión. Por favor, [$1 ténteo de novo]."
+       "userlogout-continue": "Se quere pechar a sesión, por favor, [$1 continúe á páxina de peche de sesión]."
 }
index 50aa535..0c6121d 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "להציע שינוי בעת כניסה לחשבון",
        "easydeflate-invaliddeflate": "התוכן שהועבר אינו דחוס כנדרש",
        "unprotected-js": "מסיבות אבטחה, לא ניתן לטעון JavaScript מדפים שאינם מוגנים. ניתן ליצור סקריפטי JavaScript רק במרחב השם \"מדיה ויקי:\" או בדפי משנה של דף המשתמש.",
-       "userlogout-continue": "יש [$1 להמשיך לדף היציאה מהחשבון] כדי לצאת מהחשבון.",
-       "userlogout-sessionerror": "היציאה מהחשבון נכשלה בשל שגיאת אימות. יש [$1 לנסות שוב]."
+       "userlogout-continue": "האם ברצונך לצאת מהחשבון?"
 }
index 359cb7c..d7eb11f 100644 (file)
        "tooltip-summary": "Unesite kratki sažetak",
        "common.css": "/** Uređivanje ove CSS datoteke će se odraziti na sve skinove */",
        "common.js": "/* JavaScript kod na ovoj stranici će biti izvršen kod svakog suradnika pri svakom učitavanju svake stranice wikija. */",
-       "anonymous": "{{PLURAL:$1|anonimnoga suradnika/suradnice|$1 anonimna suradnika|$1 anonimnih suradnika}} projekta {{SITENAME}}",
-       "siteuser": "Suradnik $1 na projektu {{SITENAME}}",
+       "anonymous": "{{PLURAL:$1|1=anonimnoga suradnika/suradnice|$1 anonimnoga suradnika|$1 anonimna suradnika|$1 anonimnih suradnika}} projekta {{SITENAME}}",
+       "siteuser": "{{GENDER:$2|suradnik|suradnica}} $1 na projektu {{SITENAME}}",
        "anonuser": "{{SITENAME}} anonimni suradnik $1",
        "lastmodifiedatby": "Ova stranica posljednji je put uređena u $2, dana $1 a uređivao/la je $3.",
        "othercontribs": "Temelji se na radu $1.",
        "others": "drugih",
-       "siteusers": "{{PLURAL:$2|1={{GENDER:$1|suradnika|suradnice}}|suradnica i suradnika}} na projektu {{SITENAME}} $1",
+       "siteusers": "{{PLURAL:$2|1={{GENDER:$1|suradnika|suradnica}}|suradnica i suradnika}} na projektu {{SITENAME}} $1",
        "anonusers": "{{SITENAME}} {{PLURAL:$2|anonimni suradnik|anonimni suradnici}} $1",
        "creditspage": "Autori stranice",
        "nocredits": "Za ovu stranicu nema podataka o autorima.",
index bfc9303..1385d75 100644 (file)
        "passwordpolicies-policyflag-forcechange": "lecserélés követelése bejelentkezéskor",
        "passwordpolicies-policyflag-suggestchangeonlogin": "lecserélés ajánlása bejelentkezéskor",
        "unprotected-js": "Biztonsági okokból JavaScript nem tölthető be védtelen lapokról. Kérlek egyedül a MediaWiki névtérben készíts JavaScriptet, vagy szerkesztői allapként.",
-       "userlogout-continue": "Amennyiben ki szeretnél jelentkezni, [$1 használd a kijelentkezési oldalt].",
-       "userlogout-sessionerror": "Sikertelen kijelentkezés munkamenethiba miatt. Kérlek [$1 próbáld újra]."
+       "userlogout-continue": "Amennyiben ki szeretnél jelentkezni, [$1 használd a kijelentkezési oldalt]."
 }
index 900e4b1..fba1d63 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "suggerer cambio al apertura de session",
        "easydeflate-invaliddeflate": "Le contento fornite non es correctemente comprimite",
        "unprotected-js": "Pro motivos de securitate, non es possibile cargar codice JavaScript de paginas non protegite. Crea JavaScript solmente in le spatio de nomines \"MediaWiki:\" o como un subpagina de usator.",
-       "userlogout-continue": "Si tu vole clauder le session, [$1 continua al pagina pro clauder session].",
-       "userlogout-sessionerror": "Le clausura del session ha fallite a causa de un error de session. Per favor [$1 reproba]."
+       "userlogout-continue": "Vole tu clauder le session?"
 }
index 751bcf7..9785ce2 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "sarankan penggantian ketika masuk log",
        "easydeflate-invaliddeflate": "Isi yang disediakan tidak dikempiskan secara tepat",
        "unprotected-js": "Karena alasan keamanan Javascript tidak dapat dimuat dari halaman yang tidak dilindungi. Mohon hanya buat javascript di ruangnama MediaWiki: atau sebagai subhalaman  Pengguna",
-       "userlogout-continue": "Jika Anda yakin untuk keluar log, silakan [$1 melanjutkan].",
-       "userlogout-sessionerror": "Gagal keluar log karena galat sesi. Silakan [$1 coba lagi]."
+       "userlogout-continue": "Jika Anda yakin untuk keluar log, silakan [$1 melanjutkan]."
 }
index e507bca..4ac2710 100644 (file)
@@ -16,7 +16,8 @@
                        "Macofe",
                        "Stavanger7",
                        "Fanjiayi",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "RWMuc"
                ]
        },
        "tog-underline": "Ultracatenun:",
@@ -33,6 +34,8 @@
        "tog-watchdefault": "Automaticmen vigilar págines e files, queles yo ha redactet.",
        "tog-watchmoves": "Automaticmen vigilar págines e files, queles yo move.",
        "tog-watchdeletion": "Adjunter págines e dossieres, queles yo ha deleet a mi liste de vigilantie",
+       "tog-watchuploads": "Adjute nov files yo upload al mi liste del vigilat págines",
+       "tog-watchrollback": "Adjute págines, where yo ha fat un iteration, al mi liste del vigliat págines",
        "tog-minordefault": "Marcar omni li redactiones minori per contumacie",
        "tog-previewontop": "Monstrar prevision ante de buxe de redaction",
        "tog-previewonfirst": "Monstrar prevision in prim redaction",
        "tog-watchlisthidebots": "Ocultar redactiones de machine del liste de págines vigilat",
        "tog-watchlisthideminor": "Ocultar redactiones minori del liste de págines vigilat",
        "tog-watchlisthideliu": "Ocultar redactiones de usatores registrat del liste de págines vigilat",
+       "tog-watchlistreloadautomatically": "Recharge li liste del vigliat págines automaticamen quandeunc un filter es changear (yo besona JaveScript)",
+       "tog-watchlistunwatchlinks": "Adjunte directmen invigilat/vigilat ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) por vigilat págines con modificationes (yo besona JavaScript)",
        "tog-watchlisthideanons": "Ocultar redactiones de usatores anonim del liste de págines vigilat",
        "tog-watchlisthidepatrolled": "Ocultar redactiones vigilat del liste de págines vigilat",
+       "tog-watchlisthidecategorization": "Ocultar li categorisation de págines",
        "tog-ccmeonemails": "Inviar me copies de e-mailes que yo invia por altri usatores",
        "tog-diffonly": "Ne monstrar li contenete de págine in infra del changes",
        "tog-showhiddencats": "Monstrar categories ne visibil",
        "tog-norollbackdiff": "Omisser change pos de efectuar un rollback",
        "tog-useeditwarning": "Averti me, si yo abandona un págine con ínconservat changes",
-       "tog-prefershttps": "Sempre usar un secur connection, si tui session es activ.",
+       "tog-prefershttps": "Sempre usa un secur connection, si tui session es activ.",
        "underline-always": "Sempre",
        "underline-never": "Nequande",
        "underline-default": "secun li usatori surfacie o li navigator",
index f311e75..5e3bc65 100644 (file)
        "passwordpolicies-policy-passwordnotinlargeblacklist": "La password non può essere nell'elenco delle 100 000 password utilizzate più comunemente.",
        "easydeflate-invaliddeflate": "Il contenuto fornito non è compresso correttamente",
        "unprotected-js": "Per motivi di sicurezza, non è possibile caricare JavaScript da pagine non protette. Crea javascript solo nel namespace MediaWiki o come sottopagina Utente",
-       "userlogout-continue": "Se vuoi uscire [$1 vai alla pagina di logout].",
-       "userlogout-sessionerror": "Logout non riuscito per un errore nella sessione. [$1 Riprova]."
+       "userlogout-continue": "Vuoi uscire?"
 }
index 072e486..94f5ab0 100644 (file)
        "mw-widgets-abandonedit-keep": "編集を続行",
        "mw-widgets-abandonedit-title": "本当によろしいですか?",
        "mw-widgets-copytextlayout-copy": "コピー",
+       "mw-widgets-copytextlayout-copy-fail": "クリップボードにコピーできませんでした。",
        "mw-widgets-copytextlayout-copy-success": "クリップボードにコピーされました。",
        "mw-widgets-dateinput-no-date": "日付が選択されていません",
        "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD",
        "passwordpolicies-policyflag-suggestchangeonlogin": "ログイン時に変更を提案",
        "easydeflate-invaliddeflate": "提供されたコンテンツが適切に圧縮されていません",
        "unprotected-js": "セキュリティ上の理由から、JavaScriptは保護されていないページからは読み込みできません。MediaWiki: 名前空間内、利用者下位ページのいずれかでのみjavascriptを作成してください。",
-       "userlogout-continue": "ログアウトを行いたい場合、[$1 ログアウトページから実施]してください。",
-       "userlogout-sessionerror": "セッションエラーによりログアウトに失敗しました。再度 [$1 試行して]ください。"
+       "userlogout-continue": "ログアウトを行いたい場合、[$1 ログアウトページから実施]してください。"
 }
index 5efc974..af8afe7 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "로그인할 때 변경 제안",
        "easydeflate-invaliddeflate": "주어진 컨텐츠가 적절히 압축되지 않았습니다",
        "unprotected-js": "보안 상의 이유로 자바스크립트는 보호되지 않은 문서로부터 불러올 수 없습니다. 미디어위키: 이름공간이나 사용자의 하위 문서에서만 자바스크립트를 만들어 주십시오.",
-       "userlogout-continue": "로그아웃하려면 [$1 페이지 로그아웃 문서로 이동하십시오].",
-       "userlogout-sessionerror": "세션 오류로 인해 로그아웃을 실패했습니다. [$1 다시 시도]해 주십시오."
+       "userlogout-continue": "로그아웃하려면 [$1 페이지 로그아웃 문서로 이동하십시오]."
 }
index c275c29..853cd14 100644 (file)
        "virus-scanfailed": "De Scan huet net funktionéiert (Code $1)",
        "virus-unknownscanner": "onbekannten Antivirus:",
        "logouttext": "'''Dir sidd elo ausgeloggt.'''\n\nOpgepasst: Op verschiddene Säite kann et nach sou aus gesinn, wéi wann Dir nach ageloggt wiert, bis Dir Ärem Browser säin Tëschespäicher (cache) eidel maacht.",
+       "logout-failed": "Ausloggen ass elo net méiglech: $1",
        "cannotlogoutnow-title": "Ausloggen ass elo net méiglech",
        "cannotlogoutnow-text": "Ausloggen ass net méiglech wann Dir $1 benotzt.",
        "welcomeuser": "Wëllkomm $1!",
index 9c7c014..f23a157 100644 (file)
@@ -26,7 +26,8 @@
                        "逆襲的天邪鬼",
                        "Fitoschido",
                        "A2093064",
-                       "Vlad5250"
+                       "Vlad5250",
+                       "WAN233"
                ]
        },
        "tog-underline": "以底線識鏈接:",
        "group-autoconfirmed": "自證其簿",
        "group-bot": "僕",
        "group-sysop": "有秩",
+       "group-interface-admin": "司空",
        "group-bureaucrat": "門下",
        "group-suppress": "監",
        "group-all": "(眾)",
        "group-autoconfirmed-member": "自證其簿",
        "group-bot-member": "僕",
        "group-sysop-member": "有秩",
+       "group-interface-admin-member": "司空",
        "group-bureaucrat-member": "門下",
        "group-suppress-member": "監",
        "grouppage-user": "{{ns:project}}:簿",
        "grouppage-autoconfirmed": "{{ns:project}}:自證其簿",
        "grouppage-bot": "{{ns:project}}:僕",
        "grouppage-sysop": "{{ns:project}}:有秩",
+       "grouppage-interface-admin": "{{ns:project}}:司空",
        "grouppage-bureaucrat": "{{ns:project}}:門下",
        "grouppage-suppress": "{{ns:project}}:監",
        "right-read": "閱頁",
index 2584b70..8441adf 100644 (file)
        "protect-badnamespace-title": "Незаштитлив именски простор",
        "protect-badnamespace-text": "Страниците во овој именски простор не можат да се заштитуваат.",
        "protect-norestrictiontypes-text": "Страницава не може да се заштити бидејќи нема расположиви типови на ограничување.",
-       "protect-norestrictiontypes-title": "Ð\9dезаÑ\88Ñ\82иÑ\82ливи Ñ\81Ñ\82Ñ\80аниÑ\86и",
+       "protect-norestrictiontypes-title": "Ð\9dезаÑ\88Ñ\82иÑ\82лива Ñ\81Ñ\82Ñ\80аниÑ\86а",
        "protect-legend": "Потврдете ја заштитата",
        "protectcomment": "Причина:",
        "protectexpiry": "Истекува:",
        "protect-expiring-local": "истекува $1",
        "protect-expiry-indefinite": "бесконечно",
        "protect-cascade": "Заштити страници вклучени во оваа страница (каскадна заштита)",
-       "protect-cantedit": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¾ Ð¿Ñ\80омениÑ\82е Ñ\81Ñ\82епеноÑ\82 Ð½Ð° Ð·Ð°Ñ\88Ñ\82иÑ\82а Ð½Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ð½ÐµÐ¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° Ð·Ð° Ñ\82оа.",
+       "protect-cantedit": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¾ Ð¿Ñ\80омениÑ\82е Ñ\81Ñ\82епеноÑ\82 Ð½Ð° Ð·Ð°Ñ\88Ñ\82иÑ\82а Ð½Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а, Ð±Ð¸Ð´ÐµÑ\98Ñ\9cи Ð½ÐµÐ¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° Ð´Ð° Ñ\98а Ñ\83Ñ\80едÑ\83ваÑ\82е.",
        "protect-othertime": "Друго време:",
        "protect-othertime-op": "друго време",
        "protect-existing-expiry": "Постоечки рок на истекување: $3, $2",
        "tooltip-t-specialpages": "Список на сите службени страници",
        "tooltip-t-print": "Верзија на страницава наменета за печатење",
        "tooltip-t-permalink": "Постојана врска до оваа верзија на страницата",
-       "tooltip-ca-nstab-main": "Преглед на содржината",
+       "tooltip-ca-nstab-main": "Преглед на содржинската страница",
        "tooltip-ca-nstab-user": "Преглед на корисничката страница",
        "tooltip-ca-nstab-media": "Преглед на мултимедијалната податотека",
        "tooltip-ca-nstab-special": "Ова е службена страница и затоа не можете да ја уредувате",
        "passwordpolicies-policyflag-suggestchangeonlogin": "предложи измена при најава",
        "easydeflate-invaliddeflate": "Содржината не е соодветно прочистена",
        "unprotected-js": "JavaScript не може да се вчита од незаштитени страници од безбедносни причини. Создавајте JavaScript само во именскиот простор МедијаВики: или како корисничка потстраница",
-       "userlogout-continue": "Ако сакате да се одјавите, [$1 продолжете на одјавната стрнаица].",
-       "userlogout-sessionerror": "Одјавата не успеа поради седничка грешка. [$1 Обидете се пак]."
+       "userlogout-continue": "Дали сакате да се одјавите?"
 }
index 1d0acc3..ac5d598 100644 (file)
        "passwordpolicies-policyflag-forcechange": "ലോഗിൻ മാറ്റിയിരിക്കണം",
        "passwordpolicies-policyflag-suggestchangeonlogin": "ലോഗിൻ മാറ്റാൻ നിർദ്ദേശിക്കുന്നു",
        "unprotected-js": "സുരക്ഷാകാരണങ്ങളാൽ സംരക്ഷണമില്ലാത്ത താളുകളിൽ നിന്നും ജാവാസ്ക്രിപ്റ്റ് എടുത്തുപയോഗിക്കാൻ കഴിയില്ല. ജാവാസ്ക്രിപ്റ്റ് താളുകൾ മീഡിയവിക്കി: നാമമേഖലയിലോ ഉപയോക്തൃ ഉപതാളായോ മാത്രം സൃഷ്ടിക്കുക",
-       "userlogout-continue": "താങ്കൾ പുറത്ത് കടക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ [$1 ലോഗ് ഔട്ട് താളിലേക്ക് തുടരുക].",
-       "userlogout-sessionerror": "സെഷൻ പിഴവ് ഉണ്ടായതിനാൽ ലോഗ് ഔട്ട് പരാജയപ്പെട്ടു. ദയവായി [$1 വീണ്ടും ശ്രമിക്കുക]."
+       "userlogout-continue": "താങ്കൾ പുറത്ത് കടക്കാൻ ആഗ്രഹിക്കുന്നുവെങ്കിൽ [$1 ലോഗ് ഔട്ട് താളിലേക്ക് തുടരുക]."
 }
index dadcf9f..5f668ab 100644 (file)
        "exception-nologin-text-manual": "ဤစာမျက်နှာကို ဝင်ရောက်နိုင်ရန် သို့မဟုတ် အခြားလုပ်ဆောင်ချက်များ ရရှိနိုင်ရန် ကျေးဇူးပြု၍ $1 ပါ။",
        "virus-unknownscanner": "အမည်မသိအန်တီဗိုင်းရပ်စ် -",
        "logouttext": "<strong>သင်သည် လော့ဂ်အောက် လုပ်လိုက်ပြီဖြစ်သည်။</strong>",
+       "logging-out-notify": "အကောင့်မှ ထွက်နေပါသည်၊ ခေတ္တခဏ စောင့်ဆိုင်းပါ။",
        "cannotlogoutnow-title": "လော့ဂ်အောက်ထွက်၍ မရနိုင်သေးပါ",
        "cannotlogoutnow-text": "$1 ကိုအသုံးပြုနေစဉ်အတွင်း အကောင့်ထွက်ရန် မဖြစ်နိုင်ပါ။",
        "welcomeuser": "ကြိုဆိုပါတယ် $1!",
        "passwordpolicies-group": "အုပ်စု",
        "passwordpolicies-policies": "မူဝါဒများ",
        "passwordpolicies-policy-minimalpasswordlength": "စကားဝှက်တွင် အနည်းဆုံး {{PLURAL:$1|စကားလုံး|စကားလုံးများ}} $1 ခုရှိရမည်။",
-       "passwordpolicies-policy-passwordcannotmatchusername": "စကားဝှက်သည် အသုံးပြုသူအမည်နှင့် မတူညီရပါ"
+       "passwordpolicies-policy-passwordcannotmatchusername": "စကားဝှက်သည် အသုံးပြုသူအမည်နှင့် မတူညီရပါ",
+       "userlogout-continue": "အကောင့်မှ ထွက်လိုပါသလား"
 }
index c97fb36..3c8f618 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "foreslå endring ved innlogging",
        "easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert",
        "unprotected-js": "Av sikkerhetsårsaker kan ikke JavaScript lastes fra ubeskyttede sider. Bare skap JavaScript i MediaWiki-navnerommet eller som en brukerunderside",
-       "userlogout-continue": "Hvis du ønsker å logge ut, [$1 fortsett til utloggingssiden].",
-       "userlogout-sessionerror": "Utlogging mislyktes på grunn av en øktfeil. [$1 Prøv igjen]."
+       "userlogout-continue": "Hvis du ønsker å logge ut, [$1 fortsett til utloggingssiden]."
 }
index be6185a..4adfca2 100644 (file)
        "passwordpolicies-policyflag-forcechange": "moet gewijzigd worden bij het aanmelden",
        "passwordpolicies-policyflag-suggestchangeonlogin": "raad wijzigen aan bij het aanmelden",
        "unprotected-js": "Vanwege veiligheidsredenen kan er geen JavaScript geladen worden vanaf onbeveiligde pagina's. Gelieve alleen JavaScript pagina's aan te maken in de MediaWiki: naamruimte of als een subpagina van een gebruikerspagina.",
-       "userlogout-continue": "Als u zich wilt afmelden, [$1 gaat u naar de afmeldpagina].",
-       "userlogout-sessionerror": "Afmelden is mislukt vanwege een fout met de sessie. [$1 Probeer het opnieuw]."
+       "userlogout-continue": "Wilt u zich afmelden?"
 }
index c5d67e2..446174f 100644 (file)
        "revid": "versjon $1",
        "interfaceadmin-info": "$1\n\nLøyva for endring av CSS/JS/JSON-filer som gjeld heile nettstaden vart nyleg skilde ut frå <code>editinterface</code>-retten. Om du ikkje skjøner kvifor du får denne feilmeldinga, sjå [[mw:MediaWiki_1.32/interface-admin]].",
        "passwordpolicies-policy-passwordcannotmatchusername": "Passordet kan ikkje vera det same som brukarnamnet",
-       "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikkje passa med svartelista passord",
-       "userlogout-sessionerror": "Utlogging gjekk ikkje grunna ein øktfeil. [$1 Freist om att]."
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikkje passa med svartelista passord"
 }
index 618f18d..40405e6 100644 (file)
        "botpasswords-label-delete": "ߊ߬ ߖߏ߬ߛߌ߬",
        "botpasswords-label-resetpassword": "ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߦߟߍ߬ߡߊ߲߬",
        "botpasswords-bad-appid": "ߓߏߕ ߕߐ߮  \"$1\" ߓߍ߲߬ ߣߍ߲߬ ߕߍ߫.",
+       "botpasswords-insert-failed": "ߓߏߕ ߕߐ߮ ߟߊߘߏ߲߬ߠߌ߲ ߓߘߊ߫ ߗߌߙߏ߲߫  \"$1\" ߊ߬ ߕߎ߲߬ ߓߘߊ߫ ߟߊߘߏ߲߭ ߠߋ߬ ߓߊ߬؟",
+       "botpasswords-update-failed": "ߓߏߕ ߕߐ߮ ߟߏ߲ߘߐߦߊߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫  \"$1\" ߊ߬ ߓߘߊ߫ ߖߏ߬ߛߌ߫ ߟߋ߬ ߓߊ߬؟",
+       "botpasswords-created-title": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߘߊ߫ ߛߌ߲ߘߌ߫",
+       "botpasswords-created-body": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߏߕ ߕߐ߮ ߦߋ߫  \"$1\" {{GENDER:$2|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߦߋ߫ \"$2\" ߓߘߊ߫ ߛߌ߲ߘߌ߫.",
+       "botpasswords-updated-title": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߘߊ߫ ߟߏ߲ߘߐߦߊ߫",
+       "botpasswords-updated-body": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߏߕ ߕߐ߮ ߦߋ߫ \"$1\" {{GENDER:$2|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߦߋ߫ \"$2\" ߕߎ߲߬ ߓߘߊ߫ ߟߏ߲ߘߐߦߊ߫.",
+       "botpasswords-deleted-title": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߘߊ߫ ߖߏ߬ߛߌ߬",
+       "botpasswords-deleted-body": "ߓߏߕ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߓߏߕ ߕߐ߮ ߦߋ߫ \"$1\" {{GENDER:$2|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߦߋ߫ \"$2\" ߕߎ߲߬ ߓߘߊ߫ ߖߏ߬ߛߌ߬.",
        "resetpass_forbidden": "ߕߊ߬ߡߌ߲߬ߞߊ߲ ߕߴߛߋ߫ ߡߊߝߊ߬ߘߋ߲߬ ߠߊ߫.",
        "resetpass_forbidden-reason": "ߕߊ߬ߡߌ߲߬ߞߊ߲ ߕߴߛߋ߫ ߡߊߝߊ߬ߟߋ߲߬ ߠߊ߫: $1",
        "resetpass-no-info": "ߌ ߦߴߌ ߜߊ߲߬ߞߎ߲߬ ߡߎߣߎ߲߬ ߞߣߊ߬ ߕߏ߫ ߞߐߜߍ ߣߌ߲߬ ߡߊߛߐ߬ߘߐ߲߬ ߠߊ߫.",
        "changeemail-nochange": "ߖߊ߰ߣߌ߲߬ ߌ ߦߋ߫ ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ߫ ߜߘߍ߫ ߟߊߘߏ߲߬.",
        "resettokens": "ߖߐߟߐ߲ߞߐ ߡߊߝߊ߬ߟߋ߲߬",
        "resettokens-text": "ߌ ߦߋ߫ ߖߐߟߐ߲ߞߐ ߡߊߝߊ߬ߟߋ߲߬ ߡߍ߲ ߦߋ߫ ߘߎ߲߬ߘߎ߬ߡߊ߬ ߓߟߏߡߟߊ ߘߏ߫ ߟߎ߫ ߡߊߛߐ߬ߘߐ߲ ߠߊߘߤߊ߬ ߟߴߌ ߦߋ߫߸ ߡߍ߲ ߠߎ߬ ߛߘߌ߬ߣߍ߲߬ ߦߴߌ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߊ ߟߊ߫ ߦߊ߲߬.\n\nߌ ߞߊ߫ ߞߊ߲߫ ߞߵߏ߬ ߞߍ߫ ߣߴߌ ߣߐ߬ ߞߍ߫ ߘߴߊ߬ߟߎ߬ ߟߊߖߍ߲ߛߍ߲߫ ߠߊ߫ ߡߐ߱ ߘߏ߫ ߡߊ߬ ߓߌ߬ߟߊ߬ߒߘߐ߬ ߓߟߏߡߊ߬߸ ߥߟߊ߫ ߣߴߌ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߊ ߢߊߓߐߣߍ߲߫ ߞߍ߫ ߘߊ߫.",
+       "resettokens-no-tokens": "ߖߐߟߐ߲ߞߐ߫ ߡߊߝߊ߬ߟߋ߲߬ߕߊ߬ ߛߌ߫ ߕߍ߫ ߦߋ߲߬.",
+       "resettokens-tokens": "ߖߐߟߐ߲ߞߐ",
+       "resettokens-token-label": "$1 (ߛߋ߲߬ߠߊ߫ ߡߐߟߐ߲:$2)",
+       "resettokens-watchlist-token": "ߓߟߐߟߐ ߓߊߟߏ߫ ߖߐߟߐ߲ߞߐ (Atom/RSS) ߞߊ߬ ߓߍ߲߬ [[Special:Watchlist|changes to pages on your watchlist]] ߡߊ߬.",
+       "resettokens-done": "ߖߐߟߐ߲ߞߐ ߡߊߝߊ߬ߟߋ߲߬",
+       "resettokens-resetbutton": "ߖߐߟߐ߲ߞߐ߫ ߓߊߓߌ߬ߟߊ߬ߣߍ߲ ߡߊߝߊ߬ߟߋ߲߬",
        "bold_sample": "ߛߓߍߘߋ߲߫ ߞߎ߲ߓߊ",
        "bold_tip": "ߛߓߍߘߋ߲߫ ߞߎ߲ߓߊ",
        "italic_sample": "ߛߓߍߟߌ߫ ߡߊߖߍ߲߬ߞߍ߬ߣߍ߲",
        "sig_tip": "ߌ ߟߊ߫ ߞߟߊ߬ߣߐ ߕߎ߬ߡߊ߬ߘߊ ߓߊ߬ߘߌ߬ߟߊ߲߬ߡߊ",
        "hr_tip": "ߛߌ߬ߕߊ߬ߙߌ߬ ߢߊߡߌߟߏߡߊ (ߊ߬ ߕߐ߬ߝߍ߬ߦߊ߬ ߟߊߓߊ߯ߙߊ߫)",
        "summary": "ߟߊ߬ߘߛߏ߬ߟߌ:",
+       "subject": "ߝߐߡߊ",
        "minoredit": "ߣߌ߲߬ ߦߋ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߘߋ߬ߣߍ߲ ߘߏ߫ ߟߋ߬ ߘߌ߫",
        "watchthis": "ߞߐߜߍ ߣߌ߲߬ ߘߐߜߍ߫",
        "savearticle": "ߞߐߜߍ ߟߊߞߎ߲߬ߘߎ߬",
        "blankarticle": "<strong>ߖߊ߲߬ߓߌ߬ߟߊ߬ߟߌ</strong> ߌ ߦߋ߫ ߞߐߜߍ ߡߍ߲ ߛߌ߲ߘߌ ߞߊ߲߬ ߣߌ߲߬߸ ߊ߬ ߘߐߞߏߟߏ߲ ߠߋ߬.\nߣߴߌ ߞߊ߬  \"$1\" ߛߐ߲߬ߞߌ߲߫ ߡߎ߬ߕߎ߲߬߸ ߞߐߜߍ ߘߌ߫ ߛߌ߲ߘߌ߫ ߞߵߊ߬ ߕߘߍ߬ ߞߣߐߘߐ ߛߎ߯-ߎ߯-ߛߎ߫ ߕߴߊ߬ ߞߣߐ߫.",
        "anoneditwarning": "<strong>Warning:</strong> ߌ ߜߊ߲߬ߞߎ߲߬ߣߍ߲߬ ߕߍ߫.ߌ ߓߊ߯ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߛߎ߯-ߎ߯-ߛߎ߫ ߞߍ߫߸ ߌ ߟߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߘߌ߫ ߞߍ߫ ߦߋߕߊ ߘߌ߫.ߣߴߌ ߞߊ߬ ߜߊ߲߬ߞߎ߲߬ߠߌ߲߬ ߖߐ߲ߖߐ߲ ߞߍ߫ ߕߎ߬ߡߊ ߡߍ߲ <strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong> ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߣߍ߲ ߠߎ߬ ߘߌ߫ ߓߌ߬ߟߊ߬ ߌ ߜߊ߲߬ߞߎ߲߬ ߕߐ߮ ߟߊ߫߸ ߊ߬ ߣߌ߫ ߣߝߊ߬ ߜߘߍ߫ ߟߎ߫.",
        "anonpreviewwarning": "<em>ߌ ߜߊ߲߬ߞߎ߲߬ߣߍ߲߬ ߕߍ߫. ߟߊ߬ߞߎ߲߬ߘߎ߬ߟߌ ߘߴߌ ߟߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߟߊߡߙߊ߬ ߞߐߜߍ ߣߌ߲߬ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߘߐ߬ߝߐ ߘߐ߫</em>",
+       "missingsummary": "<strong>ߖߊ߲߬ߓߌ߬ߟߊ߬ߟߌ</strong> ߌ ߡߊ߫ ߟߊ߬ߘߛߏ߬ߟߌ߬ ߡߊߦߟߍ߬ߡߊ߲߬ߣߍ߲߬ ߛߌ߫ ߡߡߊߛߐ߫.ߣߴߌ ߞߊ߬  \"$1\" ߛߐ߲߬ߞߌ߲߫ ߏ߬ ߞߐ߫߸ ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߘߌ߫ ߟߊߞߎ߲߬ߘߎ߬ ߞߵߊ߬ ߕߘߍ߬ ߝߏߦߌ߬ ߕߴߊ߬ ߘߐ߫.",
+       "missingcommenttext": "ߞߊ߲߬ߞߎߡߊ ߘߏ߫ ߟߊߘߏ߲߬ ߖߊ߰ߣߌ߲߬.",
+       "missingcommentheader": "<strong>ߖߊ߲߬ߓߌ߬ߟߊ߬ߟߌ:</strong> ߌ ߡߊ߫ ߝߐߡߊ߫ ߛߌ߫ ߡߊߛߐ߫ ߞߊ߲߬ߞߎߡߊ ߣߌ߲߬ ߘߐ߫.ߣߴߌ ߞߊ߬ \"$1\" ߛߐ߲߬ߞߌ߲߬ ߕߎ߲߯ߣߌ߲߫߸ ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߘߌ߫ ߟߊߞߎ߲߬ߘߎ߫ ߞߵߊ߬ ߕߘߍ߬ ߝߋ߲߫ ߕߴߊ߬ ߞߣߐ߫.",
+       "summary-preview": "ߟߊ߬ߘߛߏ߬ߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߢߍߦߋߟߌ:",
+       "subject-preview": "ߝߐߡߊ ߢߍߦߋߟߌ:",
+       "blockedtitle": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߓߊ߬ߟߊ߲߬ߣߍ߲߫ ߠߋ߬",
        "blockedtext": "<strong>ߌ ߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ ߕߐ߮ ߥߟߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߓߘߊ߫ ߓߊ߬ߟߊ߲߬߸</strong>\n\nߌ ߓߊ߬ߟߊ߲߬ߣߍ߲߬ ߦߋ߫ $1 ߟߋ߬ ߓߟߏ߫.\nߞߎ߲߭ ߡߍ߲ ߦߴߊ߬ ߟ߫ߊ߫ <em>$2</em>.\n\n•ߓߊ߬ߟߊ߲߬ߠߌ߲ ߘߊߡߌ߬ߣߊ: $8\n•ߓߊ߬ߟߊ߲߬ߠߌ߲ ߛߕߊ ߝߊ: $6\n•ߓߊ߬ߟߊ߲߬ߠߌ߲ ߘߊ߬ߟߎ: $7 \n\nߌ ߘߌ߫ ߛߋ߫ ߗߋߛߓߍ ߗߋ߫ ߟߊ߫ $1 ߡߊ߬ ߥߟߊ߫ ߡߐ߰ ߜߘߍ߫ \n[[{{MediaWiki:Grouppage-sysop}}|administrator]] ߞߊ߬ ߘߊߘߐߖߊߥߏ ߞߍ߫ ߓߊ߬ߟߊ߲߬ߠߌ߲ ߞߊ߲߬.\nߌ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫  \"{{int:emailuser}}\" ߟߊߓߊ߯ߙߊ߫ ߟߊ߫߸ ߟߊ߬ߓߊ߰ߙߊ߬ߢߊ߬ ߖߐ߲ߖߐ߲ ߡߍ߲ ߦߋ߫ ߦߋ߲߬߸ ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ߫ ߖߐ߲ߖߐ߲߫ ߓߟߏߡߊߞߊ߬ߣߍ߲ ߘߏ߫ ߦߴߌ ߟߊ߫ [[Special:Preferences|account preferences]] ߘߐ߫߸ ߊ߬ ߣߴߌ ߡߊ߫ ߓߊ߬ߟߊ߲߬ ߊ߬ ߟߊߓߊ߯ߙߊ ߞߏߛߐ߲߬ ߘߋ߫. ߌ ߟߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߦߋ߫ $3 ߟߋ߬ ߘߌ߫ ߕߊ߲߬߸ ߊ߬ ߣߴߌ ߟߊ߫ ߛߊ߲߬ߓߊ߬ߕߐ߮ ߓߊ߬ߟߊ߲߬ߣߍ߲ ߦߋ߫ #$5 ߟߋ߬ ߘߌ߫.\nߖߊ߰ߣߌ߲߬ ߌ ߦߋ߫ ߛߊ߲ߝߍ߫ ߝߊߙߊ߲ߝߊ߯ߛߌ ߣߌ߲߬ ߓߍ߯ ߟߊߘߏ߲߬ ߌ ߟߊ߫ ߢߌ߬ߣߌ߲߬ߞߊ߬ߟߌ ߘߐ߫.",
+       "blockednoreason": "ߊ߬ ߞߎ߲߬ ߛߌ߫ ߡߊ߫ ߝߐ߫",
        "whitelistedittext": "ߖߊ߰ߣߌ߲߫ $1 ߞߊ߬ ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߫.",
        "confirmedittext": "ߌ ߦߴߌ ߟߊ߫ ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ ߟߊߛߙߋߦߊ߫߸ ߦߊ߲߬ߣߴߌ ߦߋ߫ ߞߐߜߍ ߡߊ߬ߦߟߍ߬ߡߊ߲߬.\nߖߊ߰ߣߌ߲߬ ߌ ߦߴߌ ߟߊ߫ ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ ߟߊߛߙߋߦߊ߫ ߌ ߟߊ߫   [[Special:Preferences|user preferences]] ߘߐ߫.",
+       "nosuchsectiontitle": "ߊ߬ ߕߍߣߊ߬ ߛߋ߫ ߟߊ߫ ߛߌ߰ߘߊ ߛߐ߬ߘߐ߲߬ ߠߊ߫",
+       "nosuchsectiontext": "ߌ ߦߋ߫ ߛߌ߰ߘߊ ߘߏ߫ ߟߋ߬ ߡߊߦߟߍ߬ߡߊ߲߬ ߞߏ ߘߐ߫ ߣߌ߲߬߸ ߡߍ߲ ߕߍ߫ ߦߋ߲߬.\nߊ߬ ߊ߬ ߛߋ߲߬ߓߐ߬ߣߍ߲߬ ߘߌ߫ ߞߍ߫ ߥߟߴߊ߬ ߖߏ߬ߛߌ߬ߣߍ߲߬ ߘߌ߫ ߞߍ߫ ߞߐߜߍ ߣߌ߲߬ ߦߋߟߌ߫ ߕߎߡߊ ߟߊ߫.",
        "loginreqtitle": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߞߊ߬ߣߌ߲߬ ߣߍ߲߫",
        "loginreqlink": "ߌ ߜߊ߲߬ߞߎ߲߬",
        "loginreqpagetext": "ߖߊ߰ߣߌ߲߫ $1 ߛߊ߫ ߞߐߜߍ ߕߐ߭ ߟߎ߬ ߘߌ߫ ߦߋ߫.",
        "userpage-userdoesnotexist": "ߖߊ߬ߕߋ߬ߘߊ߬ ߟߊߓߊ߯ߙߕߊ \"$1\" ߛߌ߲ߘߌߣߍ߲߫ ߕߍ߫. \nߝߛߍ߬ߝߛߍ߬ߟߌ ߞߍ߫߸ ߣߴߌ ߦߴߊ߬ ߝߍ߬ ߞߊ߬ ߞߐߜߍ ߣߌ߲߬ ߛߌ߲ߘߌ߫/ߡߊߦߟߍ߬ߡߊ߲߫.",
        "userpage-userdoesnotexist-view": "ߟߊ߬ߓߊ߰ߙߊ߬ ߖߊߕߋߘߊ \"$1\" ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲߫ ߕߍ߫.",
        "clearyourcache": "<strong>ߖߊ߲߬ߕߏ߬ߒߘߐ:</strong> ߞߎ߲߬ߘߎ߬ߟߌ ߞߐ߫، ߌ ߓߍߣߊ߬ ߢߌߣߌ߲߫ ߌ ߟߊ߫ ߓߟߐߟߐߞߐߜߍ ߞߙߏ ߘߐߞߊ߭ ߡߊ߬ ߞߊ߬ ߡߝߊ߬ߟߋ߲߬ߠߌ߲ ߠߎ߬ ߦߋ߫. * <strong>ߝߦߊߝߐߞߛ / ߛߝߊߙߌ:</strong> ߊ߬ ߡߌ߬ߣߊ߬ <em>Shift</em> ߘߌ߯ߟߌ߫ ߕߎߡߊ <em>Reload</em>، ߥߟߊ߫ ߞߵߊ߬ ߛߐ߲߬ߞߌ߲߫ ߥߟߊ߫ <em>Ctrl-F5</em> ߤߊߡߊ߲߫ <em>Ctrl-R</em> (<em>⌘-R</em> ߡߊߞߌ ߞߊ߲߬) * <strong>ߜ߭ߎߜ߭ߐߟ ߞߊ߲߬:</strong> ߊ߬ ߛߐ߲߬ߞߌ߲߫ <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> ߡߊߞߌ ߞߊ߲߬) * <strong>ߍ߲ߕߍߙߑߣߍߕ ߍߞߛߌߔߟߏߙߊ ߞߊ߲߬:</strong> ߊ߬ ߡߌ߬ߣߊ߬ <em>Ctrl</em> ߊ߬ ߛߐ߲߬ߞߌ߲߬ ߕߎߡߊ <em>Refresh</em>، ߥߟߊ߫ ߞߵߊ߬ ߛߐ߲߬ߞߌ߲߫ <em>Ctrl-F5</em> * <strong>ߏߔߋߙߊ:</strong> ߕߊ߯ ߞߊߕߙߍ߬ <em>Menu → ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߦߊ߬ߘߊ</em> (<em>Opera → ߞߐߡߊߛߙߋ</em> ߡߊߞߌ ߟߊ߫) ߞߊ߬ ߕߊ߯ ߏ߬ ߞߐ߫ <em>ߘߎ߲߬ߘߎ߬ߡߊ߬ & ߞߎ߲߬ߠߊ߬ߝߎߟߋ߲ → ߓߟߐߟߞߐߜߍߦߊ ߟߐ߲ߕߊ ߟߎ߫ ߖߏ߬ߛߌ߫ → ߖߌ߬ߦߊ߬ߓߍ ߟߎ߬ ߣߌ߫ ߞߐߕߐ߯ ߢߡߊߘߏ߲߰ߣߍ߲ ߠߎ߬</em>.",
+       "updated": "(ߊ߬ ߓߘߊ߫ ߟߏ߲ߘߐߦߊ߫)",
+       "note": "<strong>ߦߟߌߣߐ:</strong>",
        "previewnote": "<strong>ߌ ߖߊ߲߬ߓߌ߬ߟߊ߬ ߞߏ߫ ߣߌ߲߬ ߦߋ߫ ߢߍߝߟߍߟߌ ߘߐߙߐ߲߫ ߠߋ߬ ߘߌ߫.</strong>\nߌ ߟߊ߫ ߡߝߊ߬ߟߋ߲߬ߠߌ ߟߎ߫ ߡߊ߫ ߟߊߞߎ߲߬ߘߎ߬ ߝߟߐ߫ ߘߋ߬߹",
        "continue-editing": "ߥߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߬ ߞߣߍ ߞߊ߲߬",
        "editing": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߦߋ߫ ߛߋ߲߬ߠߊ߫ $1",
        "creating": "$1 ߛߌ߲ߘߟߌ ߦߋ߫ ߛߋ߲߬ߠߊ߫",
        "editingsection": "(ߛߌ߰ߘߊ߬) $1 ߡߊߦߟߍ߬ߡߊ߲ ߦߋ߫ ߛߋ߲߬ߠߊ߫",
+       "editingcomment": "(ߛߌ߰ߘߊ߬ ߞߎߘߊ߫) ߡߊߦߟߍ߬ߡߊ߲ ߦߴߌ ߘߐ߫ $1",
+       "editconflict": "ߝߐߢߐ߲߯ߞߐ ߡߊߦߟߍ߬ߡߊ߲߬: $1",
+       "yourtext": "ߌ ߟߊ߫ ߛߓߍߟߌ",
        "templatesused": "{{PLURAL:$1|ߞߙߊߞߏ|ߞߙߊߞߏ ߟߎ߫}} ߟߎ߫ ߟߊߓߊ߯ߙߊ߫ ߘߊ߫ ߞߐߜߍ ߣߌ߲߬ ߘߐ߫",
        "templatesusedpreview": "{{PLURAL:$1|ߞߙߊߞߏ|ߞߙߊߞߏ ߟߎ߬}} ߟߋ߬ ߟߊߓߊ߯ߙߊ߫ ߣߍ߲߫ ߢߍߦߋߟߌ ߣߌ߲߬ ߘߐ߫",
        "template-protected": "(ߊ߬ ߡߊߞߊ߲ߞߊ߲ߣߍ߲߫ ߠߋ߬)",
        "permissionserrorstext-withaction": "ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ߬ ߛߌ߫ ߕߴߌ ߦߋ߫ ߞߊ߬ $2߸ {{PLURAL:$1|ߞߏߛߐ߲߬|ߟߎ߬ ߞߏߛߐ߲߬}}",
        "recreate-moveddeleted-warn": "<strong>ߌ ߖߊ߲߬ߕߏ߫: ߌ ߦߋ߫ ߞߐߜߍ ߘߏ߫ ߟߋ߬ ߟߊߘߊ߲߫ ߞߏ ߘߐ߫ ߣߌ߲߬߸ ߡߍ߲ ߖߏ߬ߛߌ߬ߣߍ߲߬ ߡߎߣߎ߲߬.</strong> \nߌ ߓߛߌ߬ߞߌ߬ ߕߐ߫ ߟߋ߬ ߛߍ߲߸ ߣߴߌ ߘߌ߫ ߛߋ߫ ߞߐߜߍ ߣߌ߲߬ ߡߊߦߟߍ߬ߡߊ߲ ߘߊߓߊ߲߫ ߠߊ߫. \nߞߐߜߍ ߣߌ߲߬ ߦߟߌߣߐ ߖߏ߬ߛߌ߬ߣߍ߲ ߣߴߊ߬ ߛߋ߲߬ߓߐ߬ߣߍ߲ ߠߎ߬ ߡߊߘߊ߲ߣߍ߲߫ ߦߊ߲߬ ߠߋ ߟߊ߬ߣߐ߰ߦߊ߬ߟߌ ߘߌ߫:",
        "moveddeleted-notice": "ߞߐߜߍ ߣߌ߲߬ ߓߘߊ߫ ߖߏ߬ߛߌ߬.\nߖߏ߬ߛߌ߬ߟߌ߸ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ߸ ߊ߬ ߣߌ߫ ߞߐߜߍ ߛߓߍߟߌ ߟߎ߬ ߛߋ߲߬ߓߐ߸ ߏ߬ ߟߎ߫ ߓߍ߯ ߡߊߛߐߣߍ߲߫ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫.",
+       "log-fulllog": "ߘߎ߲ߛߓߍ ߘߝߊߣߍ߲ ߦߋ߫",
+       "edit-conflict": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߝߐߢߐ߲߯ߞߐ.",
+       "edit-no-change": "ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߕߎ߲߬ ߓߘߊ߫ ߡߊߓߌ߬ߟߊ߬߸ ߓߊߏ߬ ߡߝߊ߬ߟߋ߲߬ߠߌ߲߬ ߛߌ߫ ߕߎ߲߬ ߡߊ߫ ߞߍ߫ ߛߓߍߟߌ ߘߐ߫.",
        "postedit-confirmation-created": "ߞߐߜߍ ߓߘߊ߫ ߓߊ߲߫ ߛߌ߲ߘߌ߫ ߟߊ߫.",
        "postedit-confirmation-restored": "ߞߐߜߍ ߓߘߊ߫ ߓߊ߲߫ ߘߐߓߍ߲߬ ߠߊ߫.",
        "postedit-confirmation-saved": "ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߓߘߊ߫ ߟߊߞߎ߲߬ߘߎ߬.",
        "postedit-confirmation-published": "ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߓߘߊ߫ ߟߊߥߊ߲߬ߞߊ߫.",
+       "invalid-content-data": "ߞߣߐߘߐ ߓߟߏߡߟߊ ߓߍ߲߬ߓߊߟߌ",
+       "content-not-allowed-here": "\"$1\" ߞߣߐߘߐ ߟߊߘߤߊ߬ߣߍ߲߬ ߕߍ߫ ߞߐߜߍ ߘߐ߫ [[:$2]] ߛߍ߲ߞߍߘߊ ߘߐ߫  \"$3\"",
+       "editwarning-warning": "ߣߴߌ ߓߐ߫ ߘߊ߫ ߞߐߜߍ ߣߌ߲߬ ߞߊ߲߬߸ ߌ ߘߌ߫ ߓߣߐ߬ ߌ ߟߊ߫ ߡߊ߬ߝߊ߬ߟߋ߲߬ߠߌ߲߬ ߞߍߣߍ߲ ߠߎ߬ ߓߍ߯ ߘߐ߫.\nߣߴߌ ߘߏ߲߬ ߜߊ߲߬ߞߎ߲߬ߣߍ߲߬ ߞߍ߫ ߘߊ߫߸ ߌ ߘߌ߫ ߛߋ߫ ߖߊ߬ߛߙߋ߬ߡߊ߬ߟߊ ߣߌ߲߬ ߓߐ߫ ߟߴߊ߬ ߟߊ߫  \"{{int:prefs-editing}}\" ߘߐ߫߸ ߌ ߟߊ߫ ߟߊ߬ߝߌ߬ߛߦߊ߬ߟߌ ߥߟߊ߬ߘߊ ߘߐ߫.",
        "editpage-invalidcontentmodel-title": "ߞߣߐߘߐ ߛߎ߯ߦߊ ߞߐߡߊߓߌ߲ߓߌ߲߫ ߣߍ߲߫ ߕߍ߫",
        "editpage-invalidcontentmodel-text": "ߞߣߐߘߐ ߛߎ߯ߦߊ  \"$1\" ߞߐߡߊߓߌ߲ߓߌ߲߫ ߣߍ߲߫ ߕߍ߫.",
        "editpage-notsupportedcontentformat-title": "ߞߣߐߘߐ ߢߊ߲ߞߊ߲ ߞߐߡߊߓߌ߲ߓߌ߲߫ ߣߍ߲߫ ߕߍ߫.",
        "deprecated-self-close-category": "ߞߐߜߍ ߣߌ߲߬ ߦߋ߫ ߖߘߍ߬-ߘߊ߬ߕߎ߲߰ HTML ߟߊߓߊ߯ߙߊ߫ ߟߊ߫.",
        "deprecated-self-close-category-desc": "ߖߘߍ߬-ߘߊ߬ߕߎ߲߰ HTML ߘߎ߲ߛߓߍ߫ ߓߍ߲߬ߓߊߟߌ ߟߋ߬ ߦߋ߫ ߞߐߜߍ ߣߌ߲߬ ߘߐ߫߸ ߦߏ߫ <code>&lt;b/></code>ߥߟߊ߫<code>&lt;span/></code>.ߏ߬ ߢߝߍߕߊ߯ߟߌ ߘߌ߫ ߣߊ߬ ߦߟߍ߬ߡߊ߲߬ ߖߏߣߊ߫ ߞߊ߬ ߞߍ߫ HTLM5 ߘߎ߲߬ߘߎ߬ߡߦߊ߬ߟߌ ߘߌ߫߸ ߏ߬ ߘߐ߫ ߊ߬ߟߎ߬ ߥߞߌ߫ ߛߓߍߟߌ ߟߊߜߎ߬ߝߎ߲߬ߣߍ߲ ߠߋ߬.",
        "duplicate-args-warning": "<strong>ߖߊ߬ߛߙߋ߬ߡߊ߬ߟߊ</strong> [[:$1]] ߦߋ߫ ߞߟߌ߫ ߟߊ߫ [[:$2]] ߞߊ߬ ߕߊ߬ߡߌ߲߬ ߡߐ߬ߟߐ߲߬ ߞߋߟߋ߲߫ ߠߊ߫  \"$3\" ߘߊߘߐߓߍ߲ߠߌ߲ ߘߐ߫.ߡߐ߬ߟߐ߲߬ ߡߊߛߐߣߍ߲ ߞߐߟߕߊ ߘߐߙߐ߲߫ ߠߋ߬ ߟߊߓߊ߯ߙߊ߫ ߕߐ߫.",
+       "duplicate-args-category": "ߞߐߜߍ ߦߋ߫ ߘߊߘߐߡߌߘߊߞߎ߲ߢߊ߫ ߓߊߟߌߣߍ߲ ߠߎ߬ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫ ߞߙߊߞߏ ߞߟߌߟߌ ߘߐ߫",
+       "duplicate-args-category-desc": "ߞߙߊߞߏ ߞߟߌߟߌ ߟߎ߬ ߦߋ߫ ߞߐߜߍ ߘߐ߫߸ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߘߊߘߐߡߌߘߊߞߎ߲ߢߊ߫ ߓߊߟߌߣߍ߲ ߠߎ߬ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫߸ ߦߏ߫ <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ߥߟߊ߫ <code><nowiki>{{foo|bar|1=baz}}<nowiki></code>.",
+       "expensive-parserfunction-warning": "<strong>ߖߊ߬ߛߙߋ߬ߡߊ߬ߟߊ</strong> ߞߐߜߍ ߣߌ߲߬ ߞߣߐߘߐ ߟߎ߬ ߘߐߞߍ߫ ߣߍ߲߫ ߞߎߙߎ߲ߞߎߙߎ߲ߟߊ߲߫ ߘߊߜߍߟߍ߲ߓߊ ߟߎ߬ ߗߋߘߊ ߞߟߌߟߌ ߟߎ߬ ߟߋ߬ ߟߊ߫. \n\nߕߎ߬ߡߊ߬ߘߐ߫ ߊ߬ ߘߌ߫ ߞߍ߫ $2 ߘߎ߰ߟߊ߫ \n{{PLURAL:$2|ߞߟߌߟߌ|ߞߟߌߟߌ ߟߎ߬}}߸ ߘߌ߫ ߞߍ߫ {{PLURAL:$1|ߦߋ߫ ߞߟߌߟߌ $1 ߟߋ߬ ߘߌ߫ ߡߎ߬ߕߎ߲߬|ߦߋ߫ ߞߟߌߟߌ ߟߎ߬ $1 ߟߋ߬ ߘߌ߫ ߡߎ߬ߕߎ߲߬}}.",
        "undo-failure": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߘߐߛߊ߬ ߟߊ߫߸ ߝߘߏ߬ߒ߬ߡߊ߬ߟߌ߬ ߡߊߦߟߍߡߊ߲ߠߌ߲ ߞߏߛߐ߲߬.",
        "viewpagelogs": "ߞߐߜߍ ߣߌ߲߬ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߠߎ߬ ߦߋ߫",
+       "nohistory": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߘߐ߬ߝߐ߬ ߛߌ߫ ߕߍ߫ ߞߐߜߍ ߣߌ߲߬ ߠߊ߫",
        "currentrev-asof": "$1 ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߕߊ߬ߡߌ߲߬ߣߍ߲",
        "revisionasof": "ߊ߬ ߡߊߛߊ߬ߦߌ߲ ߦߊ߲߬ ߓߊ߫ 1$",
        "revision-info": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߣߍ߲߫ $1 ߟߋ߬ ߓߟߏ߫ {{GENDER:$6|$2}}$7",
        "history-fieldset-title": "ߣߐ߬ߡߊ߬ߛߊߦߌ߲ ߠߎ߬ ߛߍ߲ߛߍ߲߫",
        "histfirst": "ߞߘߐ߬ߡߊ߲ ߠߎ߬",
        "histlast": "ߞߎߘߊ ߟߎ߬",
+       "historysize": "{{PLURAL:$1|ߝߙߐ߬ߢߐ|$1 ߝߙߐ߬ߢߐ ߟߎ߬}}",
+       "historyempty": "ߘߐߞߏߟߏ߲",
        "history-feed-title": "ߡߊ߬ߛߊ߬ߦߌ߲߬ߠߌ߲ ߘߐ߬ߝߐ",
        "history-feed-description": "ߞߐߜߍ ߣߌ߲߬ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߘߐ߬ߝߐ߸ ߥߞߌ ߘߐ߫",
+       "history-feed-item-nocomment": "$1 $2 ߟߊ߫",
+       "history-feed-empty": "ߞߐߜߍ߫ ߡߊߢߌ߬ߣߌ߲߬ߞߊ߬ߣߍ߲ ߕߍ߫ ߦߋ߲߬ ߏ߬ ߞߐ߫.\nߊ߬ ߖߏ߬ߛߌ߬ߣߍ߲߬ ߘߌ߫ ߞߍ߫ ߥߞߌ ߘߐ߫ ߥߟߴߊ߬ ߕߐ߮ ߓߘߊ߫ ߦߟߍ߬ߡߊ߲߬.\nߊ߬ ߡߊߝߍߣߍ߲߫ [[Special:Search|searching on the wiki]] ߘߐ߫߸ ߞߐߜߍ߫ ߞߎߘߊ߫ ߟߎ߫ ߟߊ߫ ߞߏ ߘߐ߫.",
+       "history-edit-tags": "ߡߛߊ߬ߦߌ߲߬ߠߌ߲߬ ߓߊߓߌ߬ߟߊ߬ߣߍ߲ ߠߎ߬ ߞߏ߲߭ ߡߊߝߊ߬ߟߋ߲߬",
+       "rev-deleted-comment": "(ߟߊ߬ߘߛߏ߬ߟߌ ߛߋ߲߬ߓߐߣߍ߲ ߡߊߦߟߍ߬ߡߊ߲߫)",
+       "rev-deleted-user": "(ߟߊ߬ߓߊ߰ߙߊ߬ߕߐ߮ ߓߘߊ߫ ߛߋ߲߬ߓߐ߫)",
+       "rev-deleted-event": "(ߘߎ߲ߛߓߍ ߝߊߙߊ߲ߝߊ߯ߛߌ ߓߘߊ߫ ߛߋ߲߬ߓߐ߫)",
        "rev-delundel": "ߊ߬ ߦߋߢߊ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "rev-showdeleted": "ߦߌ߬ߘߊ߬ߟߌ",
+       "revisiondelete": "ߛߌ߰ߘߊ ߖߏ߬ߛߌ߬/ߖߏ߬ߛߌ߬ߣߍ߲ ߓߐ߫",
        "revdelete-show-file-submit": "ߐ߲߬ߐ߲߬ߐ߲߫",
+       "revdelete-legend": "ߦߋߟߌ ߟߊ߬ߘߐ߰ߦߊ߬ߟߌ ߟߊߘߏ߲߬",
+       "revdelete-hide-text": "ߛߓߍߟߌ ߟߊߢߊ߬",
+       "revdelete-hide-image": "ߞߐߕߐ߮ ߞߣߐߘߐ ߢߡߊߘߏ߲߰",
+       "revdelete-hide-name": "ߞߏ߲߭ ߣߌ߫ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߢߡߊߘߏ߲߰",
+       "revdelete-hide-comment": "ߟߊ߬ߘߛߏ߬ߣߍ߲ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "revdelete-hide-user": "ߛߓߍߦߟߊ ߟߊ߬ߓߊ߰ߙߊ߬ ߕߐ߮/IP ߛߊ߲߬ߓߊ߬ߕߐ߮",
+       "revdelete-hide-restricted": "ߓߟߏߡߟߊ ߖߏ߬ߛߌ߫ ߡߊ߬ߡߙߊ߬ߟߌ߬ߟߊ ߞߎ߲߬߸ ߊ߬ ߣߌ߫ ߘߏ ߟߎ߬ ߝߣߊ߫ ߞߎ߲߬.",
+       "revdelete-radio-same": "(ߌ ߞߊߣߵߊ߬ ߡߊߝߊ߬ߟߋ߲߬)",
+       "revdelete-radio-set": "ߢߡߊߘߏ߲߯ߠߌ߲ ߦߴߌ ߘߐ߫",
+       "revdelete-radio-unset": "ߦߋߕߊ",
+       "revdelete-suppress": "ߓߟߏߡߟߊ ߖߏ߬ߛߌ߫ ߡߊ߬ߡߙߊ߬ߟߌ߬ߟߊ ߞߎ߲߬߸ ߊ߬ ߣߌ߫ ߘߏ ߟߎ߬ ߝߣߊ߫ ߞߎ߲߬",
+       "revdelete-unsuppress": "ߟߊ߬ߘߐ߰ߦߊ߬ߟߌ ߛߋ߲߬ߓߐ߫ ߞߐߜߍ߫ ߟߢߊ߬ߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߘߐ߫",
+       "revdelete-log": "ߊ߬ ߛߊߓߎ",
+       "revdelete-submit": "ߊ߬ ߟߊߓߏ߬ߙߌ߬ {{PLURAL:$1|ߟߢߊ߬ߟߌ|ߟߢߊ߬ߟߌ ߟߎ߬}} ߓߊߓߌ߬ߟߊ߬ߣߍ߲ ߠߎ߬ ߞߊ߲߬",
+       "revdelete-success": "ߡߛߊ߬ߦߌ߲߬ߠߌ߲ ߦߋߟߌ ߓߘߊ߫ ߟߏ߲ߘߐߦߊ߫.",
+       "revdelete-failure": "ߟߢߊ߬ߟߌ ߦߋߟߌ ߕߍߣߊ߬ ߛߋ߫ ߟߊ߫ ߟߏ߲ߘߐߦߊ߫ ߟߊ߫: $1",
+       "logdelete-success": "ߘߎ߲ߛߓߍ ߦߋߟߌ ߟߊߘߏ߲߬ߠߌ߲.",
+       "logdelete-failure": "ߘߎ߲ߛߓߍ ߦߋߟߌ ߕߍߣߊ߬ ߛߋ߫ ߟߊ߫ ߟߊߘߏ߲߬ ߠߊ߫: $1",
+       "revdel-restore": "ߊ߬ ߦߋߢߊ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "pagehist": "ߞߐߜߍ ߟߊ߫ ߘߐ߬ߝߐ",
+       "deletedhist": "ߘߐ߬ߝߐ ߖߏ߬ߛߌ߬",
+       "revdelete-hide-current": "ߦߌߟߡߊ ߕߎ߬ߡߊ߬ߘߊ ߢߡߊߘߏ߲߯ߠߌ߲ ߝߎ߬ߕߎ߲߬ߕߌ $2߸ $1: ߣߌ߲߬ ߦߋ߫ ߥߊ߯ߕߌߣߍ߲ ߣߌ߲߬ ߟߢߊ߬ߟߌ ߟߋ߬ ߘߌ߫. ߊ߬ ߕߍߣߊ߬ ߢߡߊߘߏ߲߰ ߠߊ߫.",
+       "revdelete-show-no-access": "ߦߌߟߡߊ ߕߎ߬ߡߊ߬ߘߊ ߦߌ߬ߘߊ߬ߟߌ ߝߎ߬ߕߎ߲߬ߕߌ $2߸ $1: ߦߌߟߡߊ ߣߌ߲߬ ߓߘߊ߫ ߓߊ߲߫ ߣߐ߬ߣߐ߬ ߟߊ߫ \"ߡߊߓߍ߲߬ߣߍ߲\" ߘߌ߫.\nߌ ߕߍߣߊ߬ ߛߋ߫ ߟߴߊ߬ ߡߊߛߐ߬ߘߐ߲߬ ߠߊ߫.",
+       "revdelete-modify-no-access": "ߦߌߟߡߊ ߕߎ߬ߡߊ߬ߘߊ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߝߎ߬ߕߎ߲߬ߕߌ $2߸ $1: ߦߌߟߡߊ ߣߌ߲߬ ߓߘߊ߫ ߓߊ߲߫ ߣߐ߬ߣߐ߬ ߟߊ߫ ߴߴߡߊߓߍ߲߬ߣߍ߲ߴߴ ߘߌ߫.\nߌ ߕߍߣߊ߬ ߛߋ߫ ߟߴߊ߬ ߡߊߛߐ߬ߘߐ߲߬ ߠߊ߫.",
+       "revdelete-modify-missing": "ߦߌߟߡߊ ID $1 ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߝߎ߬ߕߎ߲߬ߕߌ: ߊ߬ ߓߘߊ߫ ߕߎߣߎ߲߫ ߓߟߏߡߟߊ ߝߊ߲ ߘߐ߫߹",
+       "revdelete-no-change": "<strong>ߖߊ߬ߛߙߋ߬ߡߊ߬ߟߊ</strong> ߦߌߟߡߊ ߟߢߊ߬ߟߌ ߕߎ߬ߡߊ߬ߘߊ $2߸ $1 ߦߋߟߌ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߡߊ߬ߢߌ߬ߣߌ߲߬ߞߊ߬ߟߌ ߦߴߊ߬ ߓߟߏ߫ ߞߘߐ߬ߡߊ߲߫.",
+       "revdelete-otherreason": "ߞߎ߲߬ ߡߊߞߊ߬ߝߏ߬ߕߊ߬/ߜߘߍ:",
+       "revdelete-reasonotherlist": "ߞߎ߲߬ ߜߘߍ ߟߎ߬",
+       "revdelete-edit-reasonlist": "ߖߏ߬ߛߌ߬ߟߌ ߞߎ߲߭ ߕߎ߬ߡߊ߬ߘߊ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "revdelete-offender": "ߟߢߊ߬ߟߌ ߛߓߍߦߟߊ:",
+       "suppressionlog": "ߘߎ߲ߛߓߍ ߖߏ߬ߛߌ߬ߟߌ",
+       "mergehistory": "ߞߐߜߍ ߟߊ߫ ߘߐ߬ߝߐ ߟߎ߬ ߞߍߢߐ߲߮ߞߊ߲߬",
+       "mergehistory-header": "ߞߐߜߍ ߣߌ߲߬ ߟߊߢߊ߬ߟߌ ߟߎ߬ ߞߍߢߐ߲߮ߞߊ߲߬ ߞߐߜߍ߫ ߛߎ߲߫ ߛߎ߮ ߞߋߟߋ߲ ߠߎ߬ ߟߊ߫ ߘߐ߬ߝߐ ߘߌ߫߸ ߞߐߜߍ߫ ߞߎߘߊ ߟߎ߬ ߘߐ߫.ߌ ߦߋ߫ ߟߴߊ߬ ߟߊ߫ ߞߏ߫ ߡߝߊ߬ߟߋ߲߬ߠߌ߲ ߏ߬ ߟߎ߬ ߘߐߡߌ߬ߣߊ߬ ߕߐ߫ ߟߋ߬ ߞߐߜߍ ߟߊ߫ ߘߐ߬ߝߐ ߘߐ߫ ߘߊߓߊ߲ߓߟߏߡߊ߬.",
+       "mergehistory-box": "ߞߐߜߍ߫ ߝߌ߬ߟߊ߬ ߟߎ߫ ߟߊ߫ ߘߐ߬ߝߐ ߞߍߢߐ߲߮ߞߊ߲߬:",
+       "mergehistory-from": "ߓߐߛߎ߲ ߞߐߜߍ:",
+       "mergehistory-into": "ߕߊ߯ߦߙߐ ߞߐߜߍ:",
+       "mergehistory-list": "ߞߍߢߐ߲߮ߞߊ߲ߕߊ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲ ߘߐ߬ߝߐ",
+       "mergehistory-go": "ߞߍߢߐ߲߮ߞߊ߲ߕߊ ߟߎ߬ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߦߌ߬ߘߊ߬",
+       "mergehistory-submit": "ߟߢߊ߬ߟߌ ߟߎ߬ ߞߍߢߐ߲߮ߞߊ߲߬",
+       "mergehistory-empty": "ߟߢߊ߬ߟߌ ߕߴߛߋ߫ ߞߍ߫ ߟߊ߫ ߢߐ߲߮ߞߊ߲߬.",
+       "mergehistory-done": "$3 {{PLURAL:$3|ߟߢߊ߬ߟߌ|ߟߢߊ߬ߟߌ ߟߎ߬}} $1 {{PLURAL:$3|ߕߘߍ߬ ߦߋ߫|ߕߎ߲߬ ߦߋ߫}} ߞߍߢߐ߲߮ߞߊ߲߬ [[:$2]] ߘߐ߫.",
+       "mergehistory-fail-bad-timestamp": "ߕߎ߬ߡߊ߬ߘߊ ߓߊ߬ߘߌ߬ߟߊ߲ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫.",
+       "mergehistory-fail-invalid-source": "ߞߐߜߍ ߓߐߛߎ߲ ߓߍ߲߬ߣߍ߲߫ ߕߍ߫.",
+       "mergehistory-fail-invalid-dest": "ߞߐߜߍ ߞߎ߲߬ߕߋߟߋ߲ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫",
+       "mergehistory-fail-no-change": "ߘߐ߬ߝߐ ߟߎ߬ ߞߍߢߐ߲߮ߞߊ߲߬ ߡߊ߫ ߟߢߊ߬ߟߌ߬ ߛߌ߫ ߞߍߢߐ߲߮ߞߊ߲߬. ߞߐߜߍ ߣߌ߫ ߕߎ߬ߡߊ߬ߘߊ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߝߛߍ߬ߝߛߍ߫ ߖߊ߰ߣߌ߲߬.",
+       "mergehistory-fail-permission": "ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ߬ ߘߐߥߛߊ߬ߣߍ߲߬ ߕߍ߫ ߞߊ߬ ߘߐ߬ߝߐ ߟߎ߬ ߞߍߢߐ߲߮ߞߊ߲߬.",
+       "mergehistory-fail-self-merge": "ߞߐߜߍ ߛߎ߲ ߣߴߊ߬ ߞߎ߲߬ߕߋߟߋ߲ ߕߍ߫ ߞߋߟߋ߲߫ ߘߌ߫.",
+       "mergehistory-no-source": "ߞߐߜߍ ߓߐߛߎ߲ $1 ߕߍ߫ ߦߋ߲߬.",
+       "mergehistory-no-destination": "ߞߐߜߍ ߞߎ߲߬ߕߋߟߋ߲ $1 ߕߍ߫ ߦߋ߲߬.",
+       "mergehistory-invalid-source": "ߞߐߜߍ ߓߐߛߎ߲ ߦߋ߫ ߞߍ߫ ߞߎ߲߬ߕߐ߮ ߓߍ߲߬ߣߍ߲ ߘߌ߫.",
+       "mergehistory-invalid-destination": "ߞߐߜߍ ߞߎ߲߬ߕߋߟߋ߲ ߦߋ߫ ߞߍ߫ ߞߎ߲߬ߕߐ߮ ߓߍ߲߬ߣߍ߲ ߘߌ߫.",
+       "mergehistory-autocomment": "ߞߍߢߐ߲߮ߞߊ߲߬ [[:$1]] ߦߊ߲߬ [[:$2]] ߘߐ߫",
+       "mergehistory-comment": "ߞߍߢߐ߲߮ߞߊ߲߬ [[:$1]] ߦߊ߲߬ ߘߐ߫ [[:$2]]: $3",
+       "mergehistory-same-destination": "ߓߐߛߎ߲ ߣߌ߫ ߞߐߜߍ ߞߎ߲߬ߕߋߟߋ߲ ߕߍߣߊ߬ ߞߍ߫ ߟߊ߫ ߞߋߟߋ߲߫ ߘߌ߫.",
+       "mergehistory-reason": "ߊ߬ ߛߊߓߎ:",
        "mergelog": "ߥߴߌ ߜߊ߲߬ߞߎ߲߬",
+       "revertmerge": "ߊ߬ ߓߐߢߐ߲߮ߞߊ߲߬",
        "history-title": "$1 ߡߛߊ߬ߦߌ߲߬ߠߌ߲ ߘߐ߬ߝߐ",
        "difference-title": "ߘߊ߲߬ߝߘߊ߬ߓߐ ߡߍ߲ ߦߋ߫ ߡߛߊ߬ߦߌ߲߬ߠߌ߲ $1 ߕߍ߫",
        "lineno": "$1 ߛߌ߬ߕߊߙߌ:",
        "diff-multi-sameuser": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} ߟߊ߬ߓߊ߰ߙߊ߬ ߞߋߟߋ߲ ߓߟߏ߫߸ ߏ߬ ߡߊ߫ ߦߌ߬ߘߊ߬)",
        "diff-multi-otherusers": "({{PLURAL:$1|ߕߍߟߐ ߡߊߛߊߦߌ߲߬ߞߏ߬ ߞߋߟߋ߲߫|ߕߍߟߐ ߡߊߛߊ߬ߦߌ߲}} {{PLURAL:$2|ߟߊߓߊ߯ߙߟߊ߫ ߘߏ߫ ߜߘߍ߫|ߟߊߓߊ߯ߙߟߊ ߟߎ߬}} ߏ߬ ߡߊ߫ ߟߊ߲ߞߣߍߡߊ߫)",
        "searchresults": "ߢߌߣߌ߲ߠߌ߲ ߞߐߝߟߌ ߟߎ߬",
+       "search-filter-title-prefix-reset": "ߞߐߜߍ ߓߍ߯ ߢߌߣߌ߲߫",
        "searchresults-title": "ߣߌ߲߬ \"$1\" ߢߌߣߌ߲ߠߌ߲ ߞߐߝߟߌ",
        "prevn": "ߕߊ߬ߡߌ߲߬ߣߍ߲ ߠߎ߬ {{PLURAL:$1|$1}}",
        "nextn": "ߟߊߕߎ߲߰ߠߊ {{PLURAL:$1|$1}}",
        "search-result-category-size": "{{PLURAL:$1|1 ߛߌ߲߬ߝߏ߲|$1 ߛߌ߲߬ߝߏ߲ ߠߎ߬}} ({{PLURAL:$2|1 ߦߌߟߡߊߙߋ߲|$2 ߦߌߟߡߊߙߋ߲ ߠߎ߬}}, {{PLURAL:$3|1 ߞߐߕߐ߮|$3 ߞߐߕߐ߮ ߟߎ߬}})",
        "search-redirect": "(ߌ ߟߊߞߎ߲߬ߛߌ߲߬ߣߍ߲߫ ߞߊ߬ ߓߐ߫ $1)",
        "search-section": "(ߕߍߕߍ߮ $1)",
+       "search-category": "(ߦߌߟߡߊ $1)",
        "search-file-match": "(ߞߐߕߐ߮ ߞߣߐߘߐ ߓߘߊ߫ ߟߊߞߊ߬ߝߏ߬)",
        "search-suggest": "ߌ ߞߊ߲߫ ߦߋ߫ ߣߌ߲߬ ߠߋ߬ ߡߊ߬ $1",
+       "search-interwiki-more-results": "ߞߐߝߟߌ߫ ߜߘߍ ߟߎ߬",
        "searchall": "ߊ߬ ߓߍ߯",
        "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 – $2</strong> of <strong>$3</strong>}}",
        "search-nonefound": "ߖߋ߬ߓߟߌ߬ ߛߌ߫ ߕߍ߫ ߢߌ߬ߣߌ߲߬ߞߊ߬ߟߌ ߣߌ߲߫ ߞߊ߲߬.",
+       "powersearch-legend": "ߢߌߣߌ߲ߠߌ߲ ߖߊ߲߬ߝߊ߬ߣߍ߲",
+       "powersearch-ns": "ߊ߬ ߢߌߣߌ߲߫ ߕߐ߯ߛߓߍ ߞߣߍ ߘߐ߫.",
+       "powersearch-togglelabel": "ߝߛߍ߬ߝߛߍ߬ߟߌ",
+       "preferences": "ߟߊ߬ߝߌ߬ߛߦߊ߬ߟߌ",
        "mypreferences": "ߟߊ߬ߝߌ߬ߛߦߊ߬ߟߌ",
+       "prefs-edits": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬ ߦߙߌߞߊ:",
+       "prefsnologintext2": "ߌ ߜߊ߲߬ߞߎ߲߫ ߖߊ߰ߣߌ߲߫ ߞߴߌ ߟߊ߫ ߟߊ߬ߝߌ߬ߛߦߊ߬ߟߌ ߡߊߝߊ߬ߟߋ߲߬.",
+       "prefs-skin": "ߝߊ߬ߘߌ",
+       "skin-preview": "ߊ߬ ߘߐߜߍ߫ ߡߎߣߎ߲߬",
+       "datedefault": "ߟߊ߬ߝߌ߬ߛߦߊ߬ߟߌ߬ ߕߴߦߋ߲߬",
+       "prefs-labs": "ߖߎ߯ߓߍߟߊ߲ ߢߍߕߊ߮",
+       "prefs-user-pages": "ߞߐߜߍ߫ ߟߊߓߊ߯ߙߕߊ ߟߎ߬",
+       "prefs-personal": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߢߊߞߙߍ",
+       "prefs-rc": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߎߘߊ ߟߎ߬",
+       "prefs-watchlist": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ",
+       "prefs-editwatchlist": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "prefs-editwatchlist-label": "ߌ ߟߊ߫ ߜߋ߬ߟߎ߬ߠߌ߲߬ ߛߙߍߘߍ ߘߏ߲߬ߘߊ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "prefs-editwatchlist-edit": "ߌ ߟߊ߫ ߜߋ߬ߟߎ߬ߠߌ߲߬ ߛߙߍߘߍ ߞߎ߲߬ߕߐ߮ ߟߎ߬ ߛߋ߲߬ߓߐ߫",
+       "prefs-editwatchlist-raw": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߡߎ߰ߡߍ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "prefs-editwatchlist-clear": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߖߏ߬ߛߌ߬",
+       "prefs-watchlist-days": "ߦߌ߬ߘߊ߬ߟߌ ߞߊߞߊ߲߫ ߞߊ߬ ߞߍ߫ ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߘߐ߫ ߟߏ߲ ߡߍ߲ ߠߎ߬ ߘߐ߫:",
+       "prefs-watchlist-days-max": "{{PLURAL:$1|ߟߏ߲|ߟߏ߲ ߠߎ߬}} ߞߐߘߊ߲ $1",
+       "prefs-watchlist-edits": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߝߙߍߕߍ ߞߐߘߊ߲ ߡߍ߲ ߦߌ߬ߘߊ߬ߕߊ ߦߋ߫ ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߘߐ߫.",
+       "prefs-watchlist-edits-max": "ߝߙߍߕߍ ߞߐߘߊ߲: ߁߀߀߀",
+       "prefs-watchlist-token": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߖߐߟߐ߲ߞߐ",
+       "prefs-watchlist-managetokens": "ߖߐߟߐ߲ߞߐ ߘߊߘߐߓߍ߲߭",
+       "prefs-resetpass": "ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߝߊ߬ߟߋ߲߬",
+       "prefs-changeemail": "ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ ߡߊߝߊ߬ߟߋ߲߬ ߥߟߊ߫ ߌ ߦߴߊ߬ ߛߋ߲߬ߓߐ߫",
+       "prefs-setemail": "ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ ߘߏ߫ ߟߊߘߏ߲߬",
+       "prefs-email": "ߢߎߡߍߙߋ߲ ߞߏ߲ߘߏ ߛߎߥߊ߲ߘߟߌ",
+       "saveprefs": "ߊ߬ ߟߊߞߎ߲߬ߘߎ߬",
        "timezoneregion-africa": "ߊߝߙߌߞߌ߬",
        "group-bot": "ߓߏߕ",
        "group-sysop": "ߞߎ߲߬ߠߊ߬ߛߌ߰ߟߊ",
index 0bd6958..d13d5d6 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "sugerowana zmiana po zalogowaniu",
        "easydeflate-invaliddeflate": "Dostarczona zawartość nie jest poprawnie skompresowana",
        "unprotected-js": "Ze względów bezpieczeństwa kod JavaScript nie może zostać załadowany z niezabezpieczonych stron. Prosimy dodawać JavaScript w przestrzeni MediaWiki lub jako podstronę strony użytkownika.",
-       "userlogout-continue": "Jeżeli chcesz się wylogować, [$1 przejdź so strony wylogowywania].",
-       "userlogout-sessionerror": "Wylogowywanie nie powiodło się ze względu na błąd związany z sesją. [$1 Spróbuj ponownie]."
+       "userlogout-continue": "Chcesz się wylogować?"
 }
index 3f2b4b0..8128d97 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "sugerir mudança na entrada",
        "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido",
        "unprotected-js": "Por razões de segurança o JavaScript não pode ser carregado de páginas desprotegidas. Por favor, crie apenas javascript no MediaWiki: namespace ou como uma subpágina do usuário",
-       "userlogout-continue": "Se pretende terminar a sessão [$1 continue para a página de saída], por favor.",
-       "userlogout-sessionerror": "A sua saída falhou devido a um erro da sessão. [$1 Tente novamente], por favor."
+       "userlogout-continue": "Você quer sair?"
 }
index 6cac6f1..3e6d572 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "sugerir alteração ao iniciar sessão",
        "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido",
        "unprotected-js": "Por motivos de segurança o JavaScript de páginas desprotegidas não pode ser carregado. Crie javascript só no espaço nominal/domínio MediaWiki: ou numa subpágina do utilizador",
-       "userlogout-continue": "Se pretende terminar a sessão [$1 prossiga para a página de saída], por favor.",
-       "userlogout-sessionerror": "A sua saída falhou devido a um erro da sessão. [$1 Tente novamente], por favor."
+       "userlogout-continue": "Se pretende terminar a sessão [$1 prossiga para a página de saída], por favor."
 }
index 364fff4..e0da190 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "Password policy flag that suggests changing invalid passwords on login.",
        "easydeflate-invaliddeflate": "Error message if the content passed to easydeflate was not deflated (compressed) properly",
        "unprotected-js": "Error message shown when trying to load javascript via action=raw that is not protected",
-       "userlogout-continue": "Shown if user attempted to log out without a token specified. Probably the user clicked on an old link that hasn't been updated to use the new system. $1 - url that user should click on in order to log out.",
-       "userlogout-sessionerror": "Shown when a user tries to log out with an invalid token. $1 is url with correct token that user should click."
+       "userlogout-continue": "Shown if user attempted to log out without a token specified. Probably the user clicked on an old link that hasn't been updated to use the new system. $1 - url that user should click on in order to log out."
 }
index 44cc422..f870148 100644 (file)
        "emailccsubject": "Копия вашего сообщения для $1: $2",
        "emailsent": "Письмо отправлено",
        "emailsenttext": "Ваше электронное сообщение отправлено.",
-       "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailuser}}» проекта {{SITENAME}}. Если {{GENDER:$2|вы}} ответите на это письмо, оно будет отослано напрямую {{GENDER:$1|отправителю}}, так что {{GENDER:$2|ваш}} адрес электронной почты станет известен {{GENDER:$1|ему|ей}}.",
+       "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailuser}}» проекта {{SITENAME}}. {{gender:$1|Отправителю|Отправительнице}} неизвестен ваш электронный адрес, пока вы не ответите {{gender:$1|ему|ей}}.",
        "usermessage-summary": "Оставить системное сообщение.",
        "usermessage-editor": "Системная доставка",
        "watchlist": "Список наблюдения",
        "passwordpolicies-policyflag-suggestchangeonlogin": "предложить изменение при входе",
        "easydeflate-invaliddeflate": "Предоставленное содержимое не спущено надлежащим образом",
        "unprotected-js": "По соображениям безопасности JavaScript нельзя загружать с незащищённых страниц. Пожалуйста, создавайте скрипты только в пространстве имён MediaWiki: или как подстраницы участника.",
-       "userlogout-continue": "Если вы хотите выйти, [$1 перейдите на страницу выхода].",
-       "userlogout-sessionerror": "Выход из системы не удался из-за ошибки сеанса. Пожалуйста, [$1 попробуйте ещё раз]."
+       "userlogout-continue": "Вы хотите выйти?"
 }
index 4bc580f..0c427e6 100644 (file)
        "category-article-count": "{{PLURAL:$2|Chistha categuria cunteni un'única pàgina, indicadda inogghi.|Chistha categuria cunteni {{PLURAL:$1|la pàgina indicadda|li $1 pàgini indicaddi}} inogghi, i' un tutari di $2.}}",
        "category-file-count": "{{PLURAL:$2|Chistha categuria cunteni unu únicu file, indicaddu inogghi.|{{PLURAL:$1|Lu file sighenti è|$1 Li file sighenti so}} inogghi, i' un tutari di $2.}}",
        "listingcontinuesabbrev": "(séguiddu)",
+       "broken-file-category": "Pàgini ki hani liadduri di file cu difetti",
        "about": "Infuimmazioni",
        "article": "Pagina",
        "newwindow": "(s'abbri in d'unu nobu balchoni)",
        "actions": "Azioni",
        "namespaces": "Tipi di pàgina:",
        "variants": "Varianti",
+       "navigation-heading": "Nabiggazioni",
        "errorpagetitle": "Errori",
        "returnto": "Turra a $1.",
        "tagline": "Da {{SITENAME}}.",
        "printableversion": "Versioni sthampabiri",
        "permalink": "Cullegamentu peimmanenti",
        "print": "Sthampa",
+       "view": "Liggì",
+       "view-foreign": "Vedi innantu $1",
        "edit": "Mudifigga",
        "create": "Cria",
        "delete": "Canzella",
        "otherlanguages": "Althri linghi",
        "redirectedfrom": "(Rinviu da $1)",
        "redirectpagesub": "Pàgina di rinviu",
-       "lastmodifiedat": "Ulthima mudìfigga pa la pàgina: $2, $1.",
+       "redirectto": "Rimandu a:",
+       "lastmodifiedat": "Ulthima mudìfigga pa la pàgina: $1, $2.",
        "viewcount": "Chistha pàgina è isthadda liggidda {{PLURAL:$1|una voltha|$1 volthi}}.",
        "protectedpage": "Pàgina broccadda",
        "jumpto": "Vai a:",
        "nstab-template": "Mudellu",
        "nstab-help": "Aggiuddu",
        "nstab-category": "Categuria",
+       "mainpage-nstab": "Pàgina prinzipari",
        "nosuchaction": "Operazioni no ricuniscidda",
        "nosuchactiontext": "L'indirizzu immessu no curripondi a unu cumandu ricunisciddu da lu software MediaWiki",
        "nosuchspecialpage": "Pàgina ippiziari no dipunìbiri",
        "perfcachedts": "Li dati chi seghini so cabaddi da una còpia i' la mimória cache di la bancadati. Ulthimu aggiornamentu: $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "L'aggiornamenti di la pàgina so timpuraniamenti suippesi. Li dati in edda cuntinuddi no sarani aggiornaddi.",
        "viewsource": "Vèdi còdizi",
+       "viewsource-title": "Vidé la fonti di $1",
        "actionthrottled": "Azioni limitadda",
        "actionthrottledtext": "Cumenti rimédiu anti-spam, v'è un lìmiti a l'azioni ch'è pussìbiri eseguì i'nu tempu isthabiriddu, e abà suparaddu. Pògu tèmpu e pói riprubà.",
        "protectedpagetext": "Chistha pàgina è isthadda prutiggidda pa impidinni la mudìfigga.",
-       "viewsourcetext": "È pussìbiri visuarizzà e cupià lu còdizi di chistha pàgina:",
+       "viewsourcetext": "È pussìbiri visuarizzà e cupià lu còdizi di chistha pàgina.",
        "protectedinterface": "Chistha pàgina cunteni un'erementu chi fazzi parthi di l'interfàccia utenti di lu software; è dunca prutiggidda pa evità pussìbiri abusi.",
        "editinginterface": "'''Attinzioni:''' Lu testhu di chistha pàgina fazzi parthi di l'interfàccia utenti di lu situ. Tutti li mudìfigghi arriggaddi a chistha pàgina si rifrèttini i' l'imbasciaddi visuarizzaddi pa tutti l'utenti. Pa li traduzioni, pa piazeri utirizà [https://translatewiki.net/wiki/Main_Page?setlang=sdc translatewiki.net], lu prugettu di lucarizazioni MediaWiki.",
        "cascadeprotected": "In chistha pàgina nò è pussìbiri effettuà mudìfigghi parchí è isthadda incrusa {{PLURAL:$1|i la sighenti pàgina indicadda, ch'è isthadda prutiggidda|i li sighenti pàgini indicaddi, chi so isthaddi prutiggiddi}} chirriendi la prutizioni \"ricussiba\":\n$2",
        "titleprotected": "Chisthu tìturu è isthaddu prutiggiddu da la criazioni da [[User:$1|$1]].\nLa rasgioni frunidda è <em>$2</em>.",
        "logouttext": "'''Iscidda effettuadda.'''\n\nSi pò sighì a usà {{SITENAME}} cumenti utenti anònimu oppuru eseguì una noba intradda, cu' lu matessi innòmu utenti o un'innòmu dibessu.\nZerthuni pàgini pudìani continuà a apparì cumenti si la iscidda nò fùssia avvinudda finaghì nò vèni puridda la mimória cache di lu propriu nabiggadori.",
        "yourname": "Innòmu utenti",
+       "userlogin-yourname": "Innòmu utenti",
+       "userlogin-yourname-ph": "Ischribi l'innommu d'utenti tóiu.",
        "yourpassword": "Paràura d'órdhini",
+       "userlogin-yourpassword": "Paràura d'órdhini",
+       "userlogin-yourpassword-ph": "Ischribi lu còditzi tóiu.",
+       "createacct-yourpassword-ph": "Ischribi un còditzi",
        "yourpasswordagain": "Ripeti la paràura d'órdhini",
+       "createacct-yourpasswordagain": "Cunfeimmà paràura d'órdini",
+       "createacct-yourpasswordagain-ph": "Turrà a ischribì lu còditzi",
+       "userlogin-remembermypassword": "Sighiddi a lassammi intraddu/a.",
        "yourdomainname": "Ippizzificà lu dumìniu",
        "externaldberror": "S'è verifiggaddu un errori cu lu server di autentificazioni esthernu, oppuru nò si diponi di l'autorizazioni nezzessàri pa aggiornà la propria registhrazioni estherna.",
        "login": "Intra",
        "logout": "Esci",
        "userlogout": "Esci",
        "notloggedin": "Intradda no effettuadda",
+       "userlogin-noaccount": "No ài una registhrazioni?",
+       "userlogin-joinproject": "Registhrà in {{SITENAME}}",
        "createaccount": "Crea una noba registhrazioni",
+       "userlogin-resetpassword-link": "Hai immintigaddu lu còdizi tóiu?",
+       "userlogin-helplink2": "Aggiuddu cun l'intradda.",
+       "createacct-emailoptional": "Indirizzu di postha erettrònica (opzionari)",
+       "createacct-email-ph": "Ischribi lu tóiu indirizzu di postha erettrònica",
        "createaccountmail": "via postha erettrònica",
        "createacct-reason": "Mutibu",
+       "createacct-submit": "Registhrazioni",
+       "createacct-benefit-heading": "{{SITENAME}} è criaddu pa jenti cumenti sei tu.",
+       "createacct-benefit-body1": "{{PLURAL:$1|Mudìfiggu|Mudìfigghi}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàgini}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|rizzenti autori}}",
        "badretype": "Li paràuri d'órdhini insiriddi nò cuinzidhini tra èddi.",
        "userexists": "L'innòmu utenti insiriddu è già utirizaddu. Pa pazieri chirria un'innòmu utenti dibessu.",
        "loginerror": "Errori i' l'intradda",
        "loginlanguagelabel": "Linga: $1",
        "pt-login": "Intra",
        "pt-login-button": "Intra",
+       "pt-createaccount": "Crea una noba registhrazioni",
        "pt-userlogout": "Iscidda",
        "changepassword": "Ciamba paràura d'órdhini",
        "resetpass_announce": "L'intradda è isthadda effettuadda cun un còdizi timpuràniu, inviaddu via postha erettrònica.\n\nPa cumprità la registhrazioni è nezzessàriu impusthà una noba paràura d'órdhini inogghi:",
        "resetpass_submit": "Impustha la paràura d'órdhini e intra",
        "changepassword-success": "La paràura d'órdhini tóia è isthadda mudìfiggadda. Abà sei intrendi...",
        "resetpass_forbidden": "No è pussìbiri mudifiggà li paràuri d'órdhini in {{SITENAME}}.",
+       "passwordreset": "Invia una noba paràura d'órdhini pa postha erettrònica",
        "passwordreset-username": "Innòmu utenti:",
        "changeemail-none": "(nisciunu)",
        "resettokens-tokens": "Token:",
        "preview": "Antiprimma",
        "showpreview": "Visuarizza antiprimma",
        "showdiff": "Musthra ciambamenti",
-       "anoneditwarning": "'''Attinzioni:''' Intradda nò effettuadda. I' la cronologia di la pàgina sarà rigisthraddu l'indirizzu IP tóiu.",
+       "anoneditwarning": "<strong>Warning:</strong> '''Attinzioni:''' Intradda nò effettuadda. I' la cronologia di la pàgina sarà rigisthraddu l'indirizzu IP tóiu si tu fai modìfichi.\nSi <strong>[$1 fai l'intradda]</strong> oppuru <strong>[$2 si tu crii una pàgina d'utenti]</strong>, li tó modìfichi sarani assignaddi a l'innommu d'utenti tóiu.",
        "missingsummary": "'''Promimória:''' Nò hai ippizzificaddu l'oggettu di la mudìfigga. Turrendi à incalchà '''Saivva la pàgina''' lu mudìfigga sarà saivvadda cun l'oggettu bioddu.",
        "missingcommenttext": "Insirì un cummentu in giossu.",
        "missingcommentheader": "'''Promimória:''' Nò hai ippizzificaddu l'intisthazioni di chisthu cummentu. Turrendi à incalchà '''Saivva la pagina''' lu mudìfigga sarà saivvadda chena intisthazioni.",
        "newarticle": "(Nóbu)",
        "newarticletext": "Lu cullegamentu sighiddu curripondi a'na pàgina nò ancora esisthenti.\n\nSi vói crià la pàgina abà, pói sùbidu ischribì in giossu (abbaidda li [$1 pàgini d'aggiuddu] pà maggiori infuimmazioni).\n\nS'ài sighiddu lu cullegamentu pa un'errori, è suffizenti incalchà lu buttoni '''Indareddu''' i' lu propriu nabiggadori.",
        "anontalkpagetext": "----''Chistha è la pàgina di dischussioni di un'utenti anònimu, chi no ha ancora criaddu una registhrazioni o, in dugna modu, no la usa. Pa identifiggallu è dunca nezzessàriu usà lu sóiu nùmaru di l'indirizzu IP. L'indirizzi IP, parò, poni assé cundibisi da più utenti. Si sei un'utenti anònimu e vói chi li cummenti prisenti in chistha pàgina no si rifèrini a te, [[Special:UserLogin|crea una noba registhrazion o intra]] cu' chidda ch'hai già pa evità d'assé confusu cu' althri utenti anònimi in futuru.''",
-       "noarticletext": "Abà chistha pàgina è biodda. È pussìbiri [[Special:Search/{{PAGENAME}}|zirchà chistu tituru]] i' l'althri pàgini di lu situ, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} zirchà i' li rigisthri curriraddi] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} mudifiggà la pagina abà]</span>.",
+       "noarticletext": "Abà chistha pàgina è biodda. È pussìbiri [[Special:Search/{{PAGENAME}}|zirchà chistu tìturu]] i' l'althri pàgini di lu situ, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} zirchà i' li rigisthri curriraddi] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} crià la pàgina abà]</span>.",
        "noarticletext-nopermission": "Abà chistha pàgina è biodda. È pussìbiri [[Special:Search/{{PAGENAME}}|zirchà chistu tìturu]] i' l'althri pàgini di lu situ, oppuru <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} zirchà i' li rigisthri reratibi]</span>, parò nò pói crià chistha pàgina.",
        "userpage-userdoesnotexist": "La registhrazioni \"<nowiki>$1</nowiki>\" nò curripundi a un'utenti rigisthraddu. Verifiggà chi s'aggia avveru gana di crià o mudìfiggà chistha pàgina.",
+       "userpage-userdoesnotexist-view": "No v'è nisciuna pàgina di l'utenti \"$1\".",
        "clearyourcache": "'''Nota:''' daboi abé saivaddu è nezzessàriu pulì la mimória cache di lu propriu nabiggadori pà vidé li ciambamenti. Pa '''Mozilla / Firefox / Safari''': fà clic i Ricàrrigga incalchendi lu buttoni di li maiuschuri, oppuru incalchà ''Ctrl-Maiusc-R'' (''Cmd-Maiusc-R'' i Mac); pa '''Internet Explorer:''' mantinì incalchaddu lu tasthu ''Ctrl'' mentri s'incalcha lu buttoni ''Aggiorna'' o incalchà ''Ctrl-F5''; pa '''Konqueror''': incalchà lu buttoni ''Ricarica'' o lu tasthu ''F5''; pa '''Opera''' pò assé nezzessàriu ibbuiddà cumpretamenti la mimória cache da lu menù ''Strumenti → Preferenze''.",
        "usercssyoucanpreview": "'''Suggerimentu:''' Usa lu buttoni '''Visuarizza antiprimma''' pa prubà li nobi CSS primma di sàivvaddi.",
        "userjsyoucanpreview": "'''Suggerimentu:''' Usa lu buttoni '''Visuarizza antiprimma''' pa prubà li nobi JS primma di sàivvaddi.",
        "session_fail_preview_html": "'''Semmu dipiazuddi, no è isthaddu pussìbiri elaburà la mudìfigga parchì sò andaddi pessi li dati reratibi a la sissioni.'''\n\n''Parchì in {{SITENAME}} è cunsintiddu l'usu di l'HTML chena limitazioni, l'antiprimma no è visuarizzadda, pa sigguriddai contru l'attacchi JavaScript.''\n\n'''Si lu probrema prisisthi, pói prubà à iscì e turrà a intrà.'''",
        "token_suffix_mismatch": "'''La mudìfigga nò è isthadda sàivvadda parchí lu nabiggadori à musthraddu di gesthì in modu erraddu i caràtteri di punteggiaddura i' lu identifigganti di la mudìfigga. Pa evità una pussìbiri corruzioni di lu testhu di la pàgina, è isthadda rifiutadda l'intrea mudìfigga. Chistha situazioni pó verifiggassi, calch’e voltha, candu so usaddi zerthuni sivvìzi di proxy anònimi via reti chi àni di l'errori.'''",
        "editing": "Mudìfigga di $1",
+       "creating": "Crià $1",
        "editingsection": "Mudifigga di $1 (sezzioni)",
        "editingcomment": "Mudifigga di $1 (cummentu)",
        "editconflict": "Cuntrasthu d'edizioni i $1",
        "semiprotectedpagewarning": "'''Nota:''' Chista pàgina è isthadda broccadda parchì soru li utenti registhraddi possiano mudìfiggarla.",
        "cascadeprotectedwarning": "'''Attinzioni:''' Chistha pàgina è isthadda broccadda in modu chi soru l'utenti cun pribiréggi di amministhradori possiano mudìfiggarla. Lu chi avvini parchí la pàgina è incrusa {{PLURAL:$1|i la pàgina indicadda ..., ch'è isthadda prutiggidda|i li pàgini indicaddi ..., chi so isthaddi prutiggiddi}} chirriendi la prutizioni \"ricussiba\":",
        "titleprotectedwarning": "'''ATTINZIONI: Chistha pàgina è isthadda broccadda in modu chi soru zerthuni utenti possiano crialla.'''",
-       "templatesused": "Mudelli utirizaddi in chistha pàgina:",
+       "templatesused": "{{PLURAL:$1|Mudellu utirizaddu|Mudelli utirizaddi}} in chistha pàgina:",
        "templatesusedpreview": "Mudelli utirizaddi in chisth'antiprimma:",
        "templatesusedsection": "Mudelli utirizaddi in chistha sezzioni:",
        "template-protected": "(prutiggiddu)",
        "permissionserrorstext": "Nò si diponi di li pimmissi nezzessàri a eseguì l'azioni dumandadda, pa {{PLURAL:$1|lu sighenti mutibu|li sighenti mutibi}}:",
        "permissionserrorstext-withaction": "Nò si diponi di li primmissi nezzessàri pa $2, pa {{PLURAL:$1|lu sighenti mutibu|li sighenti mutibi}}:",
        "recreate-moveddeleted-warn": "'''Attinzioni: s'è pa ricrià una pàgina già canzilladda in passadu.'''\n\nS'azzirthà chi sia avveru opporthunu continuà a mudìfiggà chistha pàgina. L'erencu di li reratibi canzilladduri vèni ripurthaddu inogghi pa cumudiddai:",
+       "moveddeleted-notice": "No z'è più chista pàgina.\nThe deletion, protection, and move log for the page are provided below for reference.",
        "undo-success": "Chistha mudìfigga pò assé annulladda. Verifiggà lu sighenti cuntrasthu prisintaddu pa s'azzirthà chi lu cuntinuddu curripundi a cantu disizaddu e dunca saivvà li mudìfigghi pa cumprità la procedura di annullamentu.",
        "undo-failure": "Impussìbiri annullà la mudìfigga a càusa d'un cuntrasthu cun mudìfigghi intermédi.",
        "undo-summary": "Annulladda la mudìfigga $1 di [[Special:Contributions/$2|$2]] ([[User talk:$2|Dischussioni]])",
        "currentrev": "Versioni currenti",
        "currentrev-asof": "Versioni currenti di li $1",
        "revisionasof": "Versioni di lu $1",
-       "revision-info": "Versioni di lu $1, autori: $2",
+       "revision-info": "Versioni di lu $1 pa {{GENDER:$6|$2}}$7",
        "previousrevision": "← Versioni mancu rizzenti",
        "nextrevision": "Versioni più rizzenti →",
        "currentrevisionlink": "Versioni currenti",
        "revertmerge": "Anulla unioni",
        "mergelogpagetext": "Inogghi v'è una listha di l'ulthimi operazioni d'unioni di la cronologia d'una pàgina in un'althra.",
        "history-title": "Cronologia di li mudìfigghi di \"$1\"",
+       "difference-title": "Diffarènzi tra li versioni di \"$1\"",
        "lineno": "Riga $1:",
        "compareselectedversions": "Cunfronta li versioni sciubaraddi",
        "editundo": "annulla",
        "shown-title": "Musthra {{PLURAL:$1|un risulthaddu|$1 risulthaddi}} pa pàgina",
        "viewprevnext": "Vèdi ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Z'è una pàgina ciamadda\"[[:$1]]\" in chisthu vichi.''' {{PLURAL:$2|0=|Vèdi puru li althri risulthaddi agattaddi.}}",
-       "searchmenu-new": "'''Crea la pàgina \"[[:$1]]\" in chistha vichi!''' {{PLURAL:$2|0=|Vèdi puru la pàgina agattadda cun la zercha tòia.|Vèdi puru li risulthaddi agattaddi .}}",
+       "searchmenu-new": "<strong>Crea la pàgina \"[[:$1]]\" in kistha vichi!</strong> {{PLURAL:$2|0=|Vèdi puru la pàgina agattadda cun la zercha tòia.|Vèdi puru li risulthaddi agattaddi.}}",
        "searchprofile-articles": "Bozi",
        "searchprofile-images": "Mùrthimediari",
        "searchprofile-everything": "Tuttu",
        "searchprofile-advanced-tooltip": "Zercha in althri tipi di pàgina",
        "search-result-size": "$1 ({{PLURAL:$2|una paraura|$2 parauri}})",
        "search-result-category-size": "{{PLURAL:$1|1 erementu|$1 erementi}} ({{PLURAL:$2|1 sottucateguria|$2 sottucateguri}}, {{PLURAL:$3|1 file|$3 file}})",
-       "search-redirect": "(rinviu $1)",
+       "search-redirect": "(Rinviu da $1)",
        "search-section": "(sezzioni $1)",
        "search-suggest": "Forsi zerchabi: $1",
        "search-interwiki-caption": "Prugetti fraddeddi",
        "searchrelated": "curriraddi",
        "searchall": "tutti",
        "showingresults": "Accó {{PLURAL:$1|màssimu '''1''' risulthaddu|màssimu li '''$1''' risulthaddi}} à partì da lu nùmaru #'''$2'''.",
+       "search-showingresults": "{{PLURAL:$4|Risulthaddu <strong>$1</strong> di <strong>$3</strong>|Risulthaddi <strong>$1 a $2</strong> di <strong>$3</strong>}}",
        "search-nonefound": "Nisciuni risulthaddi pa la to' zercha",
        "powersearch-legend": "Zercha abanzadda",
        "powersearch-ns": "Zercha i' li tipi di pàgina:",
        "recentchanges": "Ulthimi mudìfigghi",
        "recentchanges-legend": "Opzioni ùlthimi mudìfigghi",
        "recentchanges-summary": "Chistha pàgina prisinta li mudìfigghi più rizzenti a li cuntinuddi di lu situ.",
+       "recentchanges-noresult": "Nisciun ciambamentu i' lu tempu insignaddu.",
        "recentchanges-feed-description": "Chisthu feed cunteni li mudìfigghi più rizzenti a li cuntinuddi di lu situ.",
        "recentchanges-label-newpage": "Noba pàgina",
        "recentchanges-label-minor": "Chistha è una mudìfigga minori",
        "recentchanges-label-bot": "Chistha è una mudìfigga pa unu bot",
        "recentchanges-label-unpatrolled": "Mudìfigga nò ancora contrulladda",
-       "rcnotefrom": "Inogghi so erencaddi li mudìfigghi arriggaddi a parthì da '''$2''' (finz'a '''$1''').",
+       "recentchanges-label-plusminus": "A misura di la pàgina è isthadda ciambiadda di kisthu  innùmaru di byte",
+       "recentchanges-legend-heading": "<strong>Legenda:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vedi puru [[Special:NewPages|lu listhinu di li pàgini nobi]])",
+       "rcnotefrom": "Inogghi sottu {{PLURAL:$5|z'è la mudìfigga|zi sò li mudìfigghi}} a partì da <strong>$3, $4</strong> (màssimu <strong>$1</strong> ).",
        "rclistfrom": "Musthra li mudìfigghi arriggaddi à partì da $3 $2",
        "rcshowhideminor": "$1 li mudìfigghi minori",
+       "rcshowhideminor-show": "Ammusthrà",
+       "rcshowhideminor-hide": "Cuà",
        "rcshowhidebots": "$1 li bot",
+       "rcshowhidebots-show": "Ammusthrà",
+       "rcshowhidebots-hide": "Cuà",
        "rcshowhideliu": "$1 li utenti registhraddi",
+       "rcshowhideliu-show": "Ammusthrà",
+       "rcshowhideliu-hide": "Cuà",
        "rcshowhideanons": "$1 li utenti anònimi",
+       "rcshowhideanons-show": "Ammusthrà",
+       "rcshowhideanons-hide": "Cuà",
        "rcshowhidepatr": "$1 li mudìfigghi contrulladdi",
        "rcshowhidemine": "$1 li me' mudìfigghi",
+       "rcshowhidemine-show": "Ammusthrà",
+       "rcshowhidemine-hide": "Cuà",
        "rclinks": "Musthra li $1 mudìfigghi più rizzenti arriggaddi i' l'ulthimi $2 dì",
        "diff": "diff",
        "hist": "cron",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} addabòi mudìfigga",
        "newsectionsummary": "/* $1 */ noba sezzioni",
        "rc-enhanced-expand": "Musthrà dettagli (dumanda JavaScript)",
        "rc-enhanced-hide": "Cua dettàgli",
        "filehist-comment": "Oggettu",
        "imagelinks": "Utirizazioni di lu file",
        "linkstoimage": "{{PLURAL:$1|La sighenti pàgina pùnta|Li sighenti $1 pàgini pùntani}} a l'immàgina:",
-       "nolinkstoimage": "Nisciuna pàgina cunteni cullegamenti a l'immàgina.",
+       "nolinkstoimage": "Nisciuna pàgina utirizeggia chistha immàgina.",
        "sharedupload": "Chisthu file prubeni da $1 e pó assé utirizaddu da althri prugetti.",
        "sharedupload-desc-here": "Chisthu file prubeni da $1 e pó assé utirizaddu da althri prugetti. La deschrizioni di la [$2 pàgina di deschrizioni] è indicadda in giossu.",
        "uploadnewversion-linktext": "Carrigga una nóba versioni di chistu file",
        "pager-older-n": "{{PLURAL:$1|1 mancu rizzenti|$1 mancu rizzenti}}",
        "booksources": "Rifirimenti di libri",
        "booksources-search-legend": "Zercha rifirimenti di libri",
+       "booksources-search": "Zercha",
        "booksources-text": "Inogghi v'è una listha di cullegamenti bessu siti estherni chi vindani libri nobi e usaddi, attrabessu li quari è pussìbiri uttinì maggiori infuimmazioni i' lu testhu zirchaddu.",
        "specialloguserlabel": "Utenti:",
        "speciallogtitlelabel": "Tìturu:",
        "contributions": "{{GENDER:$1|Cuntributi utenti}}",
        "contributions-title": "Cuntributi di $1",
        "mycontris": "Li me' cuntributi",
+       "anoncontribs": "Cuntributi",
        "contribsub2": "Par {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nò so isthaddi acciappaddi mudifigghi cunfoimmi a li criteri sciubaraddi.",
        "uctop": "currenti",
        "sp-contributions-search": "Zercha cuntributi",
        "sp-contributions-username": "Indirizzu IP o nommu utenti:",
        "sp-contributions-toponly": "Soru musthrà li versioni attuari",
+       "sp-contributions-newonly": "Soru musthrà la primma versioni di la bozi (oppuru li criazioni di pàgini)",
        "sp-contributions-submit": "Zercha",
        "whatlinkshere": "Puntani inogghi",
        "whatlinkshere-title": "Pàgini chi pùntani a \"$1\"",
        "whatlinkshere-links": "← cullegamenti",
        "whatlinkshere-hideredirs": "$1 rinvii",
        "whatlinkshere-hidetrans": "$1 incrusioni",
-       "whatlinkshere-hidelinks": "$1 cullegamenti",
+       "whatlinkshere-hidelinks": "$1 liadduri",
        "whatlinkshere-hideimages": "$1 liadduri a file",
        "whatlinkshere-filters": "Filthri",
        "blockip": "Brocca utenti",
        "importlogpagetext": "Rigisthru di l'impurthazioni di pàgini d'althri wiki, cumpreti di cronologia.",
        "import-logentry-upload-detail": "{{PLURAL:$1|una ribisioni impurthadda|$1 ribisioni impurthaddi}}",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|una ribisioni impurthadda|$1 ribisioni impurthaddi}} da $2",
-       "tooltip-pt-userpage": "La pàgina utenti tóia",
+       "tooltip-pt-userpage": "{{GENDER:|La tóia}} pàgina utenti",
        "tooltip-pt-anonuserpage": "La pàgina utenti di chistu indirizzu IP",
-       "tooltip-pt-mytalk": "Pàgina di li tó dischussioni",
+       "tooltip-pt-mytalk": "{{GENDER:|La}} pàgina di li tó dischussioni",
        "tooltip-pt-anontalk": "Dischussioni i' li mudìfigghi arriggaddi da chisthu indirizzu IP",
-       "tooltip-pt-preferences": "Li tó prifirènzi",
+       "tooltip-pt-preferences": "{{GENDER:|Li tó}} prifirènzi",
        "tooltip-pt-watchlist": "La listha di li pàgini ch'isthai tinendi sottu osseivvazioni",
-       "tooltip-pt-mycontris": "Listha di li tó cuntributi",
+       "tooltip-pt-mycontris": "Listha di {{GENDER:|li tó}} cuntributi",
        "tooltip-pt-login": "La registhrazioni è cunsigliadda, puru si nò è ubbrigatória",
        "tooltip-pt-logout": "Iscidda",
+       "tooltip-pt-createaccount": "T'incuraggiemmu di crià una pàgina utenti e di registhratti, ma non è ubbrigatóriu.",
        "tooltip-ca-talk": "Vèdi li dischussioni reratibi a chistha pàgina",
-       "tooltip-ca-edit": "Pói mudìfiggà chistha pàgina. Pa piazeri usa lu buttoni d'antiprimma primma di saivvà",
+       "tooltip-ca-edit": "Pói mudifiggà chistha pàgina. Pa piazeri usa lu buttoni d'antiprimma primma di saivvà.",
        "tooltip-ca-addsection": "Ischuminzà una sezzioni noba",
        "tooltip-ca-viewsource": "Chistha pàgina è prutiggidda, ma pói vidé lu còdizi soiu.",
        "tooltip-ca-history": "Versioni prizzidenti di chistha pàgina",
        "tooltip-t-recentchangeslinked": "Erencu di li ulthimi mudìfigghi a li pàgini culligaddi a chistha",
        "tooltip-feed-rss": "Feed RSS pa chistha pàgina",
        "tooltip-feed-atom": "Feed Atom pa chistha pàgina",
-       "tooltip-t-contributions": "Listha di li cuntributi di chistu utenti",
+       "tooltip-t-contributions": "Listha di li cuntributi di {{GENDER:$1|chistu utenti}}",
        "tooltip-t-emailuser": "Invia un'imbasciadda di postha erettrònica a chisth'utenti",
        "tooltip-t-upload": "Carrigga file mùrthimediari",
        "tooltip-t-specialpages": "Listha di tutti li pàgini ippiziari",
        "spambot_username": "MediaWiki buggadda spam",
        "spam_reverting": "Turradda a l'ulthima versioni chena cullegamenti a $1",
        "spam_blanking": "Pàgina ibbiuddadda, tutti li ribisioni abìani cullegamenti a $1",
+       "simpleantispam-label": "Cumprobu cuntraspam\nNo <strong>not</strong> ischribì nudda drentu!",
+       "pageinfo-toolboxlink": "Iffuimmaziòni pa la pàgina",
        "pageinfo-contentpage-yes": "Sì",
        "pageinfo-protect-cascading-yes": "Sì",
        "markaspatrolleddiff": "Signa la mudìffiga cumenti verifiggadda",
        "file-nohires": "Nò so dipunìbiri versioni a risoruzioni maggiori.",
        "svg-long-desc": "file in fuimmaddu SVG, misuri nominari $1 × $2 punti, misuri di lu file: $3",
        "show-big-image": "File d'orìgini",
+       "show-big-image-preview": "Tàglia di kistha antiprimma: $1.",
+       "show-big-image-size": "$1 × $2 punti",
        "newimages": "Galleria di li file nobi",
        "imagelisttext": "Inogghi una listha di '''$1''' {{PLURAL:$1|file|file}} ordhinaddi pa $2.",
        "noimages": "Nò v'è nudda da vidé.",
        "metadata-help": "Chisthu file cunteni infuimmazzioni aggiuntibe, pó assé da la fotocamera o da lu scanner. Si lu file é isthaddu mudìfiggaddu, zerthuni dettàgli pudiani nò curripundì a li mudìfigghi arriggaddi.",
        "metadata-expand": "Musthra dettàgli",
        "metadata-collapse": "Cua dettàgli",
-       "metadata-fields": "Li campi reratibi a li metadi EXIF erencaddi in chist'imbasciadda sarani musthraddi i' la pàgina di l'immàgina candu la tabella di li metadati è prisenti i' lu fuimmaddu brebi. Pà impusthazioni pridifinidda, l'althri campi sarani cuaddi.\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": "Li campi reratibi a li metadati EXIF erencaddi in chist'imbasciadda sarani musthraddi i' la pàgina di l'immàgina candu la tabella di li metadati è prisenti i' lu fuimmaddu brebi. Pà impusthazioni pridifinidda, l'althri campi sarani cuaddi.\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",
        "namespacesall": "tutti",
        "monthsall": "tutti",
        "confirmemail": "Cunfèimma indirizzu di postha erettrònica",
        "watchlisttools-view": "Visuarizza li mudìfigghi attinenti",
        "watchlisttools-edit": "Visuarizza e mudìfigga la listha",
        "watchlisttools-raw": "Mudìfigga la listha in fuimmaddu testhu",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|dischussioni]])",
        "version": "Versioni",
        "version-other": "Althru",
        "version-software-version": "Versioni",
        "specialpages": "Pagini ippiziari",
        "specialpages-group-login": "Intra / registhrazioni",
        "tag-filter": "[[Special:Tags|Tag]] filthru:",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-active-yes": "Sì",
        "tags-edit": "mudifigga",
        "htmlform-submit": "Invia",
        "htmlform-reset": "Annulla mudifigghi",
        "htmlform-selectorother-other": "Althru",
        "htmlform-yes": "Sì",
-       "rightsnone": "(nisciunu)"
+       "logentry-delete-delete": "$1 {{GENDER:$2|à isthudaddu}} ra pàgina $3",
+       "logentry-newusers-create": "La registhrazioni di l'utenti $1 è isthadda {{GENDER:$2|criadda}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|à carriggaddu}} $3",
+       "rightsnone": "(nisciunu)",
+       "searchsuggest-search": "Zercha di dentru a {{SITENAME}}"
 }
index 1c2e2ee..5b15466 100644 (file)
        "help": "Pomoć",
        "help-mediawiki": "Pomoć o MediaWikiju",
        "search": "Traži / Тражи",
+       "search-ignored-headings": " #<!-- ne mijenjajte ništa u ovom redu --> <pre>\n# Zaglavlja što će biti zanemarena pri pretrazi.\n# Izmjene u ovome stupit će na snagu čim se stranica sa zaglavljem indeksira.\n# Možete nametnuti preindeksiranje stranice ako izvršite prazno uređivanje.\n# Sintaksa je sljedeća:\n#   * Sve od znaka \"#\" pa do kraja reda je komentar\n#   * Svaki neprazan red jest tačan naziv što treba se zanemariti, s tim da se razlikuju mala i velika slova i sve ostalo\nReference\nVanjski linkovi\nTakođer pogledajte\n #</pre> <!-- ne mijenjajte ništa u ovom redu -->",
        "searchbutton": "Traži",
        "go": "Idi / Иди",
        "searcharticle": "Idi",
        "botpasswords-updated-body": "Lozinka za bota \"$1\" {{GENDER:$2|korisnika|korisnice}} \"$2\" je izmjenjena.",
        "botpasswords-deleted-title": "Lozinka bota je obrisana",
        "botpasswords-deleted-body": "Lozinka za bota \"$1\" {{GENDER:$2|korisnika|korisnice}} \"$2\" je obrisana.",
+       "botpasswords-newpassword": "Nova lozinka za prijavu <strong>$1</strong> je <strong>$2</strong>. <em>Zapišite je za kasnije.</em> <br> (Za stare botove što zahtijevaju da prijavno ime bude isto kao i eventualno korisničko ime, možete uporabiti i <strong>$3</strong> kao korisničko ime, a <strong>$4</strong> kao lozinku.)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider nije dostupan.",
        "botpasswords-restriction-failed": "Ne možete se prijaviti zbog ograničenja lozinki za botove.",
        "botpasswords-invalid-name": "Navedeno korisničko ime ne sadrži rastavni znak za lozinke botova (\"$1\").",
        "mw-widgets-abandonedit-discard": "Odbaci uređivanja",
        "mw-widgets-abandonedit-keep": "Nastavi s uređivanjem",
        "mw-widgets-abandonedit-title": "Da li ste sigurni?",
+       "mw-widgets-copytextlayout-copy": "Kopiraj",
+       "mw-widgets-copytextlayout-copy-fail": "Nije uspjelo iskopirati u međuspremnik.",
+       "mw-widgets-copytextlayout-copy-success": "Iskopirano u međuspremnik.",
        "mw-widgets-dateinput-no-date": "Datum nije izabran",
        "mw-widgets-mediasearch-input-placeholder": "Pretražite slike/snimke",
        "mw-widgets-mediasearch-noresults": "Nisam pronašao ništa.",
        "linkaccounts-submit": "Spoji račune",
        "unlinkaccounts": "Razdvajanje računa",
        "unlinkaccounts-success": "Račun je razdvojen.",
+       "authenticationdatachange-ignored": "Promjena podataka u autenifikaciji nije obrađena. Možda nije postavljen provajder?",
        "userjsispublic": "Napomena: podstranice s JavaScriptom ne bi trebale sadržavati povjerljive podatke budući da ih drugi korisnici mogu vidjeti.",
        "userjsonispublic": "Imajte na umu: Podstranice s JSONom ne bi trebale sadržavati povjerljive podatke budući da su vidljive drugim korisnicima.",
        "usercssispublic": "Napomena: podstranice s CSS-om ne bi trebale sadržavati povjerljive podatke budući da ih drugi korisnici mogu vidjeti.",
        "passwordpolicies-policyflag-suggestchangeonlogin": "predloži izmjenu pri prijavi",
        "easydeflate-invaliddeflate": "Sadržaj nije ispravno pročišćen",
        "unprotected-js": "JavaScript ne može da se učita sa nezaštićenih stranica iz bezbednosnih razloga. Samo napravite JavaScript u imenskom prostoru MediaWiki: ili kao korisničku podstranicu",
-       "userlogout-continue": "Ako se želite odjaviti, [$1 nastavite na odjavnoj strnaici].",
-       "userlogout-sessionerror": "Odjava nije uspjela zbog sesijske pogreške. [$1 Pokušajte ponovo]."
+       "userlogout-continue": "Ako se želite odjaviti, [$1 nastavite na odjavnoj strnaici]."
 }
index 767546d..77ae281 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "predlagaj zamenjavo ob prijavi",
        "easydeflate-invaliddeflate": "Dana vsebina ni pravilno stisnjena",
        "unprotected-js": "Iz varnostnih razlogov JavaScripta ni možno naložiti z nezaščitenih strani. Prosimo, da JavaScript ustvarite samo v imenskem prostoru MediaWiki ali kot uporabniško podstran.",
-       "userlogout-continue": "Če se želite odjaviti, [$1 pojdite na stran za odjavo].",
-       "userlogout-sessionerror": "Odjava je spodletela zaradi napake seje. Prosimo, [$1 poskusite znova]."
+       "userlogout-continue": "Se želite odjaviti?"
 }
index 0331027..302e8b0 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "föreslå ändring vid inloggning",
        "easydeflate-invaliddeflate": "Innehåll som tillhandahålls är inte helt komprimerat",
        "unprotected-js": "Av säkerhetsskäl kan inte JavaScript läsas in från oskyddade sidor. Skapa endast JavaScript i namnrymden MediaWiki: eller som en användarundersida.",
-       "userlogout-continue": "Om du vill logga ut, var god [$1 fortsätt till utloggningssidan].",
-       "userlogout-sessionerror": "Utloggning misslyckades p.g.a. sessionsfel. Var god [$1 försök igen]."
+       "userlogout-continue": "Vill du logga ut?"
 }
index 9ef0dbb..aa43bb3 100644 (file)
        "passwordpolicies-policy-passwordcannotmatchblacklist": "ห้ามรหัสผ่านตรงกับรหัสผ่านที่ขึ้นบัญชีดำโดยเจาะจง",
        "passwordpolicies-policy-maximalpasswordlength": "รหัสผ่านจะต้องมีความยาวน้อยกว่า $1 อักขระ",
        "passwordpolicies-policy-passwordcannotbepopular": "ห้ามรหัสผ่านเป็น{{PLURAL:$1|รหัสผ่านยอดนิยม|ติดรายการ $1 รหัสผ่านยอดนิยม}}",
-       "userlogout-continue": "หากคุณต้องการออกจากระบบ โปรด[$1 ดำเนินการต่อไปยังหน้าออกจากระบบ]",
-       "userlogout-sessionerror": "การออกจากระบบล้มเหลวเนื่องจากเซสชันผิดพลาด โปรด[$1 ลองอีกครั้ง]"
+       "userlogout-continue": "หากคุณต้องการออกจากระบบ โปรด[$1 ดำเนินการต่อไปยังหน้าออกจากระบบ]"
 }
index f25095e..3537faa 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "запропонувати зміну при вході",
        "easydeflate-invaliddeflate": "Наданий вміст не стиснений належним чином",
        "unprotected-js": "З міркувань безпеки JavaScript не можна запускати з незахищених сторінок. Будь ласка, створюйте javascript лише в просторі MediaWiki, або як особисту підсторінку користувача.",
-       "userlogout-continue": "Якщо Ви хочете вийти із системи, [$1 перейдіть на сторінку виходу].",
-       "userlogout-sessionerror": "Вихід із системи не відбувся через помилку сесії. Будь ласка, [$1 спробуйте знову]."
+       "userlogout-continue": "Ви хочете вийти із системи?"
 }
index d799a17..8dfbd74 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "khuyên thay khi đăng nhập",
        "easydeflate-invaliddeflate": "Nội dung được cung cấp không được giải nén đúng cách",
        "unprotected-js": "Vì lý do an toàn JavaScript sẽ không được tải tại các trang không được khóa. Xin vui lòng chỉ tạo javascript tại không gian tên MediaWiki: hoặc tại trang con của trang Thành viên",
-       "userlogout-continue": "Nếu bạn muốn đăng xuất, xin hãy [$1 mở trang đăng xuất].",
-       "userlogout-sessionerror": "Thất bại khi đăng xuất vì lỗi phiên làm việc. Xin hãy [$1 thử lại]."
+       "userlogout-continue": "Nếu bạn muốn đăng xuất, xin hãy [$1 mở trang đăng xuất]."
 }
index ccf44ba..d4baf21 100644 (file)
        "redirectedfrom": "(Yoonalaat gu jóge $1)",
        "redirectpagesub": "Xëtu yoonalaat",
        "redirectto": "Jëmalewaat:",
-       "lastmodifiedat": "Coppite gu mujj gu xët wii $1 ci $2.<br />",
+       "lastmodifiedat": "$1 ci $2 lañ mujjee soppi xët wi.<br />",
        "viewcount": "Xët wii nemmeeku nañ ko {{PLURAL:$1|$1 yoon|$1 yoon}}.",
        "protectedpage": "Xët wees aar",
        "jumpto": "Dem:",
        "newarticle": "(Bees)",
        "newarticletext": "Da ngaa topp ab lëkkalekaay buy jëme ci aw xët wu amagul. ngir sos xët wi léegi, duggalal sa mbind ci boyot bii ci suuf (man ngaa yër [$1 xëtu ndimbal wi] ngir yeneeni xamle). Su fekkee njuumtee la fi indi cuqal ci '''dellu''' bu sa joowukaay.",
        "anontalkpagetext": "---- ''Yaa ngi ci xëtu waxtaanuwaayu ab jëfandikukatu alaxam, bu bindoogul ba fim ne mbaa jëfandikoowul am sàqam.\nKon ngir xàmmee ko fàw nga jëfandikoo màkkaanub IP wam. Te màkkaanub IP jëfandikukat yu bari man nañ koo bokk.\nSu fekkee jëfandikukatu alaxam nga, te nga gis ne dees laa féetale ay kàddu yoo moomul, ngalla [[Special:UserLogin|bindu]] walla [[Special:UserLogin|dugg]] ngir benn jaxase bañatee am ëllëg .''",
-       "noarticletext": "Fi mu ne ni amul menn mbind ci xët wii; man ngaa [[Special:Search/{{PAGENAME}}|seet koju xët wi]] ci yeneen xët, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} seet ci xëtu jagleel wi ],\nwalla [{{fullurl:{{FULLPAGENAME}}|action=edit}} soppi xët wii]</span>.",
+       "noarticletext": "Fi mu ne ni amul menn mbind ci xët wii.\nMan ngaa [[Special:Search/{{PAGENAME}}|seet koju xët wi]] ci yeneen xëti dal bi, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} seet ci xët yim séqal],\nwalla [{{fullurl:{{FULLPAGENAME}}|action=edit}} sos xët wii]</span>.",
        "noarticletext-nopermission": "Nii-nii amul menn mbind ci wii xët.\nMan ngaa [[Special:Search/{{PAGENAME}}|seet bii koj]] ci yeneen xët walla <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nga seet ciy yéenekaayam]</span>. Numu man a deme, amoo sañ-sañu sos wii xët.",
        "userpage-userdoesnotexist": "Mii sàqum jëfandikukat « <nowiki>$1</nowiki> » du bu ku-bindu. Seetal bu baax ndax da ngaa namma sos walla soppi wii xët.",
        "clearyourcache": "'''Karmat :''' Soo dence xët wi ba noppi, faaw nga far nëmbiitu sa joowukaay ngir man a gis say coppite, te nga, su dee '''Mozilla / Firefox / Safari :''' cuq ci ''yeesal'' te bësaale ''shift'', walla nga bës ''Shift-R'' walla ''Ctrl-F5'' (Command-R ci Mac ), su dee '''Konqueror''': cuq ''yeesal'' walla nga bës ''F5''; su dee '''Opera''' faral nëbiit li (''Jumtukaay → Tànneef'') su dee '''Internet Explorer:''' cuq ci ''yeesal te bësaale ''Ctrl''  walla nga bës ''Ctrl-F5''.",
        "permissionserrorstext": "Amuloo sañ-sañu àggali jëf ji nga tambali, ngax {{PLURAL:$1|lii toftal|yii toftal}} :",
        "permissionserrorstext-withaction": "Amoo sañ-sañu $2, ngir {{PLURAL:$1|lii di toftal |yii di toftal}} :",
        "recreate-moveddeleted-warn": "'''Moytul: yaa ngi nekk di sosaat aw xët wees faroon.'''\n\nWóorlul bu baax ndax sosaat xët wi di na doon li gën.\nXoolal yéenekaayu far gi ci suuf.",
-       "moveddeleted-notice": "Xët wii dañu koo far.\nJaar-jaaru far yeek tuddewaat yi moo ngi ci suuf ngir yeneen xibaar.",
+       "moveddeleted-notice": "Xët wii dañu koo far.\nJaar-jaaru far yeek aar yeek tuddewaat yu wii xët moo ngi ci suuf ngir yeneen xibaar.",
        "log-fulllog": "Wone yéenekaay bu matale",
        "edit-hook-aborted": "Dogug coppite gi ak xeet yi.\nLi ko waral xameesu ko",
        "edit-gone-missing": "Yeesalug xët wi antuwul.\nMel na ne dañu koo far.",
        "rcshowhidebots-show": "Wone",
        "rcshowhidebots-hide": "Nëbb",
        "rcshowhideliu": "$1 jëfandikukat yi bindu",
+       "rcshowhideliu-show": "Wone",
        "rcshowhideliu-hide": "Nëbb",
        "rcshowhideanons": "$1 jëfandikukat yu binduwul",
        "rcshowhideanons-show": "Wone",
        "recentchangeslinked-feed": "Coppite yi ko ñeel",
        "recentchangeslinked-toolbox": "Coppite yi ko ñeel",
        "recentchangeslinked-title": "Coppite yi ñeel $1",
-       "recentchangeslinked-summary": "Wii xëtu jagleel moo lay won coppite yu mujj ci xët yi lëkkalook wii. Xët yi ci sa [[Special:Watchlist|limu toppte]] ñoo '''duuf'''.",
+       "recentchangeslinked-summary": "Duggalal aw turu xët ngir gis coppitey xët yiy jóge walla yiy jëme ci moom. (ngir gis yi bokk ciw wàll, duggalal {{ns:category}}:Turu wàll wi). Coppitey xët yi ci [[Special:Watchlist|xët yi ngay topp]] ñoo '''duuf'''.",
        "recentchangeslinked-page": "Turu xët wi :",
        "recentchangeslinked-to": "Wone coppite yi ñeel xët yi lëkkalook xët wi nga joxe",
        "upload": "Yeb ab dencukaay",
        "imagelinks": "Njëfandikug dencukaay bi",
        "linkstoimage": "{{PLURAL:$1|Xët wii ci suuf ëmb na|$1 xët yii ci suuf ëmb nañu}} bii dencukaay:",
        "linkstoimage-more": "Lu ëpp $1 {{PLURAL:$1|xët lëkkale nañu leen|xët lëkkale nañu leen}} ak bii dencukaay.\nLim bii di toftal moo lay won {{PLURAL:$1|xët wi ñu njëkk a|xët yi ñu njëkk a}} lëkkale ak wii.\nAb [[Special:WhatLinksHere/$2|lim bu mat]] jàppandi na.",
-       "nolinkstoimage": "Amul wenn xët wu ëmb bii dencukaay.",
+       "nolinkstoimage": "Amul wenn xët wuy jëfandikoo bii dencukaay.",
        "morelinkstoimage": "Xool [[Special:WhatLinksHere/$1|yeneeni lëkkalekaay]] yuy jëme ci bii dencukaay.",
        "duplicatesoffile": "{{PLURAL:$1|Dencukaay bii|$1 Dencukaay  yii}} di toftal {{PLURAL:$1|ab duppitu|ay duppitu}} bii {{PLURAL:$2|la|lañu}} ([[Special:FileDuplicateSearch/$2|yeneeni faramfacce]])::",
        "sharedupload": "Dencukaay bii $1 la bàyyikoo, te man nañu koo jëfandikoo ci yeneen sémb.",
        "whatlinkshere-next": "{{PLURAL:$1|wi toftal|$1 yi toftal}}",
        "whatlinkshere-links": "← lëkkalekaay",
        "whatlinkshere-hideredirs": "$1 jubluwaat",
-       "whatlinkshere-hidetrans": "$1 mboole",
+       "whatlinkshere-hidetrans": "$1 boole",
        "whatlinkshere-hidelinks": "$1 lëkkalekaay",
        "whatlinkshere-hideimages": "$1 lëkkalekaayi nataal",
        "whatlinkshere-filters": "Seggukaay",
        "allmessagescurrent": "Bataaxal bi fi nekk",
        "allmessagestext": "Lii mo'y limu bataaxal yëpp yi am ci biir MediaWiki",
        "thumbnail-more": "Ngandal",
-       "tooltip-pt-userpage": "Sa xëtu jëfandikukat",
+       "tooltip-pt-userpage": "{GENDER:|Sa xëtu}} jëfandikukat",
        "tooltip-pt-anonuserpage": "Xëtu jëfandikukat wu bii màkkaanu IP",
-       "tooltip-pt-mytalk": "Sa xëtu waxtaanuwaay",
+       "tooltip-pt-mytalk": "{{GENDER:|Sa xëtu}} waxtaanuwaay",
        "tooltip-pt-anontalk": "Xëtu diisoowaay wu bii màkkaanu IP",
-       "tooltip-pt-preferences": "Say tànneef",
+       "tooltip-pt-preferences": "{{GENDER:|Say}} tànneef",
        "tooltip-pt-watchlist": "Limu xët yi ngay topp",
-       "tooltip-pt-mycontris": "Limu say cëru",
+       "tooltip-pt-mycontris": "{{GENDER:|Limu}} say cëru",
        "tooltip-pt-login": "Woo nan la ngir nga xammeku, waaye doonul lu manul-ñàkk.",
        "tooltip-pt-logout": "Génn",
        "tooltip-pt-createaccount": "Dees na la digal nga bindu te dugg, donte doonul lu manul-ñàkk",
        "tooltip-t-recentchangeslinked": "Limu coppite yu mujj yu xët yi lëkkalook wii",
        "tooltip-feed-rss": "Walug RSS ngir wii xët",
        "tooltip-feed-atom": "Walug Atom ngir wii xët",
-       "tooltip-t-contributions": "Xool limu cëru bu bii jëfandikukat",
+       "tooltip-t-contributions": "Limu cëru bu {{GENDER:$1|bii jëfandikukat}}",
        "tooltip-t-emailuser": "Yónne ab m-bataaxal bii jëfandikukat",
        "tooltip-t-upload": "Yeb ay dencukaay",
        "tooltip-t-specialpages": "Limu xëti jagleel yépp",
        "logentry-newusers-create": "Sàqum jëfandikukat $1 sos nañu ko",
        "logentry-upload-upload": "$1 {{GENDER:$2|moo yeb}} $3",
        "rightsnone": "(menn)",
-       "searchsuggest-search": "Seet"
+       "searchsuggest-search": "Seet ci {{SITENAME}}"
 }
index 7ddd206..1248a58 100644 (file)
        "category-file-count-limited": "{{PLURAL:$1|Fáìlì yìí|Àwọn fáìlì $1 yìí}} wà nìnú ẹ̀ka yìí.",
        "listingcontinuesabbrev": "tẹ̀síwájú",
        "index-category": "Àwọn ojúewé atọ́kasí",
-       "noindex-category": "Àwọn ojúewé àìjẹ́ atọ́kasí",
+       "noindex-category": "Àwọn ojúewé àì",
        "broken-file-category": "Àwọn ojúewé pẹ̀lú àwọn ìjápọ̀ fáìlì gígé",
        "about": "Nípa",
        "article": "Ojúewé àkóónú",
        "summary-preview": "Àkọ́yẹ̀wò àkótán àtúnṣe:",
        "subject-preview": "Àkọ́yẹ̀wò àkọlé ọ̀rọ̀:",
        "blockedtitle": "Ìdínà oníṣe",
-       "blockedtext": "'''Orúkọ oníṣe yín tàbí àdírẹ́sì IP yín ti jẹ́ dídílọ́nà.'''\n\n$1 ni ó ṣe ìdínà.\nÌdí tó fun ni ''$2''.\n\n* Ìbẹ̀rẹ̀ ìdínà: $8\n* Ìparí ìdínà: $6\n* Ẹni tí a fẹ́ dínà: $7\n\nẸ ṣ'èránṣẹ́ sí $1 tàbí [[{{MediaWiki:Grouppage-sysop}}|alámùójútó]] mìíràn láti fọ̀rọ̀wérọ̀ lórí ìdínà ọ̀ún.\nẸ kò le è 'ránṣẹ́ sí oníṣe yìí pẹ̀lú e-mail' àyàfi tí ojúọ̀nà e-mail tó dájú wà ní [[Special:Preferences|àwọn ìfẹ́ràn àpamọ́]] yín tí wọn kò sì ti dínà yín láti lò ó.\nÀdírẹ́sì IP yín lọ́wọ́lọ́wọ́ ni $3, bẹ́ ẹ̀ sì ni ID fún ìdínà yín ni #$5.\nẸ jọ̀wọ́ ẹ fi gbogbo ẹ̀kúnrẹ́rẹ́ òkè yìí kún ìbérè tí ẹ bá ṣe.",
+       "blockedtext": "<strong>Orúkọ oníṣe yín tàbí àdírẹ́sì IP yín ti jẹ́ dídílọ́nà.</strong>\n\n$1 ni ó ṣe ìdínà.\nÌdí tó fun ni <em>$2</em>.\n\n* Ìbẹ̀rẹ̀ ìdínà: $8\n* Òpin ìdínà: $6\n* Ẹni tí a fẹ́ dínà: $7\n\nẸ ṣ'èránṣẹ́ sí $1 tàbí [[{{MediaWiki:Grouppage-sysop}}|alámùójútó]] mìíràn láti fọ̀rọ̀wérọ̀ lórí ìdínà ọ̀ún.\nẸ kò le è lo \"{{int:emailuser}}\" àyàfi tí àdírẹ́sì e-mail tó dájú bá wà ní [[Special:Preferences|àwọn ìfẹ́ràn àpamọ́]] yín tí wọn kò sì ti dínà yín láti lò ó.\nÀdírẹ́sì IP yín lọ́wọ́lọ́wọ́ ni $3, bẹ́ ẹ̀ sì ni ID fún ìdínà yín ni #$5.\nẸ jọ̀wọ́ ẹ fi gbogbo ẹ̀kúnrẹ́rẹ́ òkè yìí kún ìbérè tí ẹ bá ṣe.",
        "autoblockedtext": "Àdírẹ́sì IP yín ti jẹ́ dídílọ́nà ní fúnrararẹ̀ nítorí pé ó jẹ́ lílò látọwọ́ oníṣe míràn tí ó jẹ́ dídílọ́nà látọwọ́ $1.\nÌdíẹ̀ tó ṣe jẹ́ bẹ́ẹ̀ nìyí:\n\n:''$2''\n\n\n* Ìbẹ̀rẹ̀ ìdínà: $8\n* Ìparí ìdínà: $6\n* Ẹni tí a fẹ́ dínà: $7\n\nẸ le ránṣẹ́ sí $1 tàbí ìkan láàrin [[{{MediaWiki:Grouppage-sysop}}|àwọn olùmójútó]] mìíràn láti fọ̀rọ̀wérọ̀ lórí ìdínà ọ̀ún.\n\nÀkíyèsí pé ẹ le mọ́ le lo ìní ''Ẹ fi e-mail ránṣẹ́ sí oníṣe yìí'' tí àdírẹ́sì e-mail tó tọ́ jẹ́ fífilórúkọsílẹ̀ sínú [[Special:Preferences|àwọn ìfẹ́ràn oníṣe]] yín tí wọn kò sì ti dínà yín láti lò ó.\n\nÀdírẹ́sì IP yín lọ́wọ́lọ́wọ́ ni $3, bẹ́ ẹ̀ sì ni ID fún ìdínà yín ni #$5.\nẸ jọ̀wọ́ ẹ fi gbogbo ẹ̀kúnrẹ́rẹ́ òkè yìí pọ̀mọ́ ìbérè tí ẹ bá ṣe.",
        "blockednoreason": "kó sí àlàyé kankan",
        "whitelistedittext": "Ẹ gbọ́dọ̀ $1 láti ṣ'àtúnṣe àwọn ojúewé.",
        "accmailtext": "A ti fi ọ̀rọ̀ìpamọ́ àrìnàkò tí a pèsè fún [[User talk:$1|$1]] ránṣẹ́ sí $2. Ẹ le ṣe àyípadà ọ̀rọ̀ìpamọ́ fún àpamọ́ tuntun yìí ní ibi ''[[Special:ChangePassword|àyípadà ọ̀rọ̀ìpamọ́]]'' lẹ́yìn tí ẹ bá ti jáwọlé.",
        "newarticle": "(Tuntun)",
        "newarticletext": "Ẹ ti tẹ̀lé ìjápọ̀ mọ́ ojúewé tí kò sí.\nLáti dá ojúewé yí ẹ bẹ̀rẹ̀ síní tẹ́kọ sí inú àpótí ìsàlẹ̀ yí (ẹ wo [$1 ojúewé ìrànlọ́wọ́ ] fun ẹ̀kúnrẹ́rẹ́ ).\nT'óbá sepé àsìse ló gbé yin dé bi, ẹ kọn bọ́tìnì ìpadàsẹ́yìn.",
-       "anontalkpagetext": "----\n<em>Ojúewé ìfọ̀rọ̀wérọ̀ yìí wà fún oníṣe aláílórúkọ tí kò tíì dá àkópamọ́, tàbí tí kò lò ó rárá.</em>\nBí bẹ́ẹ̀ laṣe únlo àdírẹ́ẹ̀sì IP oníyenọ́mbà láti dáamọ̀.\nIrú àdírẹ́ẹ̀sì IP báun ṣeéṣe kó jẹ́ pínpínlọ̀ pẹ̀lú àwọn oníṣe míràn.\nTó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n ùnsọ̀rọ̀ tí kò kàn yín sí i yín, ẹ jọ̀wọ́ [[Special:CreateAccount|ẹ dá àkópamọ́ kan]] tàbí [[Special:UserLogin|kí ẹ forúkọ wọlẹ́]] kó mọ́ baà sí ìdàrúpọ̀ lọ́jọ́ọwájú mọ́ àwọn oníṣe aláìlórúkọ mírán.",
+       "anontalkpagetext": "----\n<em>Ojúewé ìfọ̀rọ̀wérọ̀ yìí wà fún oníṣe aláílórúkọ tí kò tíì dá àkópamọ́, tàbí tí kò lò ó rárá.</em>\nBí bẹ́ẹ̀ laṣe únlo àdírẹ́ẹ̀sì IP oníyenọ́mbà láti dáamọ̀.\nIrú àdírẹ́ẹ̀sì IP báun ṣeéṣe kó jẹ́ pínpínlò pẹ̀lú àwọn oníṣe míràn.\nTó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì rò pé wọ́n ùnsọ̀rọ̀ tí kò kàn yín sí i yín, ẹ jọ̀wọ́ [[Special:CreateAccount|ẹ dá àkópamọ́ kan]] tàbí [[Special:UserLogin|kí ẹ forúkọ wọlẹ́]] kó mọ́ baà sí ìdàrúpọ̀ lọ́jọ́ọwájú mọ́ àwọn oníṣe aláìlórúkọ mírán.",
        "noarticletext": "Lọ́wọ́lọ́wọ́ kò sí ìkọ̀ nínú ojúewé yìí.\nẸ le [[Special:Search/{{PAGENAME}}|wá àkọlé ojúewé yìí]] nínú àwọn ojúewé mìíràn,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àkọọ́lẹ̀ rẹ̀], tàbí [{{fullurl:{{FULLPAGENAME}}|action=edit}} kí ẹ ṣ'àtúnṣe ojúewé òún]</span>.",
        "noarticletext-nopermission": "Lọ́wọ́lọ́wọ́ kò sí ìkọ̀ nínú ojúewé yìí.\nẸ le [[Special:Search/{{PAGENAME}}|wá àkọlé ojúewé yìí]] nínú àwọn ojúewé mìíràn, tàbí\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àwọn àkọọ́lẹ̀ tó bámu]</span>, sùgbọ́n ẹ kò ní àṣẹ láti ṣ'ẹ̀dá ojúewé yìí.",
        "missing-revision": "Àtúnyẹ̀wò #$1 ojúewé tó únjẹ́ \"{{FULLPAGENAME}}\" kò sí.\n\nÈyí únsábà ṣẹlẹ̀ nítorípé ẹ tẹ̀lé ìtàn àjápọ̀ tí kò ṣiṣẹ́ mọ́ wá sí orí ojúewé tó ti jẹ́ píparẹ́.\nẸ̀kúnrẹ́rẹ́ wà nínú [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} àkọọ́lẹ̀ ìparẹ́].",
        "userpage-userdoesnotexist": "Àkópamọ́ oníṣe \"<nowiki>$1</nowiki>\" kò tíì jẹ́ fíforúkọsílẹ̀.\nẸjọ̀wọ́ ẹ ṣ'àgbéyẹ̀wò bóyá ẹ fẹ́ dá/ṣàtúnṣe ojúewé yìí.",
        "userpage-userdoesnotexist-view": "Àpamọ́ oníṣe \"$1\" kò jẹ́ fífilórúkọsílẹ̀.",
        "blocked-notice-logextract": "Lọ́wọ́lọ́wọ́ oníṣe yìí jẹ́ dídílọ́nà.\nÀkọsílẹ̀ ìdínà àìpẹ́ nìyí nísàlẹ̀ fún ìtọ́kasí:",
-       "clearyourcache": "'''Àkíyèsí:''' Lẹ́yìn ìmúpamọ́, ó ṣe é ṣe kó jẹ́ pé ẹ gbọ́dọ̀ fo cache agbétàkùn yín láti rí àwọn ìyípadà.\n* '''Firefox / Safari:''' Ẹ di ''Shift'' mú bí ẹ ṣe ún tẹ ''Reload'', tàbí kí ẹ tẹ ''Ctrl-F5'' tàbí ''Ctrl-R'' (''⌘-R'' lórí Mac)\n* '''Google Chrome:''' Ẹ tẹ ''Ctrl-Shift-R'' (''⌘-Shift-R'' lórí Mac)\n* '''Internet Explorer:''' Ẹ di ''Ctrl'' mú bí ẹ ṣe ún tẹ ''Refresh,'' tàbí kí ẹ tẹ ''Ctrl-F5''\n* '''Opera:''' Ẹ pa cache rẹ́ nínú ''Tools → Preferences''",
+       "clearyourcache": "<strong>Àkíyèsí:</strong> Lẹ́yìn ìmúpamọ́, ó ṣe é ṣe kó jẹ́ pé ẹ gbọ́dọ̀ fo cache agbétàkùn yín láti rí àwọn àtúnṣe.\n* <strong>Firefox / Safari:</strong> Ẹ di <em>Shift</em> mú bí ẹ ṣe ún tẹ <em>Reload</em>, tàbí kí ẹ tẹ <em>Ctrl-F5</em> tàbí <em>Ctrl-R</em> (<em>⌘-R</em> lórí Mac)\n* <strong>Google Chrome:</strong> Ẹ tẹ <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> lórí Mac)\n* <strong>Internet Explorer:</strong> Ẹ di <em>Ctrl</em> mú bí ẹ ṣe ún tẹ <em>Refresh,</em> tàbí kí ẹ tẹ <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Ẹ lọ sí <em>Menu→Settings</em> (<em>Opera → Preferences</em> lórí Mac) lẹ́yìn náà ẹ lọ sí <em>Privacy & security → Clear browsing data → Cached images and files</em>",
        "usercssyoucanpreview": "'''Ìrànlọ́wọ́:''' Ẹ lo bọ́tìnì \"{{int:showpreview}}\" fún dídánwò CSS tuntun yín kí ẹ tó múupamọ́.",
        "userjsyoucanpreview": "'''Ìrànlọ́wọ́:''' Ẹ lo bọ́tìnì \"{{int:showpreview}}\" fún dídánwò JavaScript tuntun yín kí ẹ tó múupamọ́.",
        "usercsspreview": "''''Ẹ mọ́ gbàgbé pé àkọ́yẹ̀wò CSS oníṣe yín nìyí.'''\n'''Kò tíì jẹ́ mímúpamọ́!'''",
        "page_first": "àkọ́kọ́",
        "page_last": "tógbẹ̀yìn",
        "histlegend": "Àṣàyàn ìyàtọ̀: ẹ fagi sínú àpótí àwọn átúnyẹ̀wò tí ẹ fẹ́ ṣàfiwè, lẹ́yìn náà ẹ tẹ enter tàbí bọ́tìnì ìsàlẹ̀.<br />\nÀlàyé: '''({{int:cur}})''' = ìyàtọ̀ sí àtúnyẹ̀wò tìsinyìí, '''({{int:last}})''' = ìyàtọ̀ sí àtúnyẹ̀wò tókọjá, '''{{int:minoreditletter}}''' = àtúnṣe kékeré.",
-       "history-fieldset-title": "Ìwádìí fún àwọn àtùnyẹ̀wò",
+       "history-fieldset-title": "Ajọ̀ àwọn àtùnyẹ̀wò",
        "history-show-deleted": "Ajẹ́píparẹ́ níkan",
        "histfirst": "pípẹ́jùlọ",
        "histlast": "tuntunjùlọ",
        "editundo": "dápadà",
        "diff-empty": "(Kò ní yàtọ̀)",
        "diff-multi-sameuser": "({{PLURAL:$1|Àtúnyẹ̀wò inú àrin kan|Àwọn àtúnyẹ̀wò inú àrin $1}} látọwọ́ oníṣe kan náà kò jẹ́ híhàn)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Àtúnyẹ̀wò inú àrin kan|Àwọn àtúnyẹ̀wò inú àrin $1}} látọwọ́ {{PLURAL:$2|oníṣe|àwọn oníṣe}} kò hàn)",
        "diff-multi-manyusers": "({{PLURAL:$1|Àtúnyẹ̀wò inú àrin kan|Àwọn àtúnyẹ̀wò inú àrin $1}} látọwọ́ {{PLURAL:$2|oníṣe|àwọn oníṣe}} tó pọ̀ju $2 lọ kò jẹ́ fífihàn)",
        "difference-missing-revision": "{{PLURAL:$2|Àtúnyẹ̀wò kan|Àwọn àtúnyẹ̀wò $2}} ìyàtọ̀ yìí ($1) kò {{PLURAL:$2|sí|sí}}.\n\nÈyí ṣẹlẹ̀ nítorí pé ẹ tẹ̀lé àjápọ̀ ìyàtọ̀ tí kò ṣiṣẹ́ mọ́ wá sí ojúewé tó ti jẹ́ píparẹ́.\nẸ̀kúnrẹ́rẹ́ wà nínú [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} àkọọ́lẹ̀ ìparẹ́].",
        "searchresults": "Àwọn èsì àwárí",
        "rcfilters-savedqueries-apply-label": "Ìdáálẹ̀ ajọ̀",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Ìdáálẹ̀ ajọ̀ ìbẹ̀rẹ̀",
        "rcfilters-savedqueries-cancel-label": "Fagilé",
-       "rcnotefrom": "Àwọn àtúnṣe láti ''''$2''' (títí dé '''$1''' hàn) lábẹ́.",
+       "rcnotefrom": "Nísàlẹ̀ ni {{PLURAL:$5|àtúnṣe|àwọn àtúnṣe}} wà láti <strong>$3, $4</strong> (títí dé <strong>$1</strong> ló hàn).",
        "rclistfrom": "Àfihàn àwọn àtúnṣe tuntun nípa bíbẹ̀rẹ̀ láti $3 $2",
        "rcshowhideminor": "$1 àwọn àtúnṣe kékéèké",
        "rcshowhideminor-show": "Fi hàn",
        "filehist-comment": "Àríwí",
        "imagelinks": "Ìlò fáìlì",
        "linkstoimage": "{{PLURAL:$1|Ojúewé kan yìí|Àwọn ojúewé $1 wọ̀nyí}} únlo fáìlì yí:",
-       "linkstoimage-more": "{{PLURAL:$1|Ojúewé|Àwọn ojúewé}} tó pọ̀ju $1 lọ jápọ̀ mọ́ fáìlì yìí.\nÀkòjọ ìṣàlẹ̀ yìí ṣàfihàn {{PLURAL:$1|ojúewé àkọ́kọ́|ojúewé $1 àkọ́kọ́}} tó jápọ̀ mọ́ fáìlì yìí nìkan.\n[[Special:WhatLinksHere/$2|Àkójọ kíkúnrẹ́rẹ́]] wà nígbèéwọ́.",
+       "linkstoimage-more": "{{PLURAL:$1|Ojúewé|Àwọn ojúewé}} tó pọ̀ju $1 lọ ló únlo fáìlì yìí.\nÀtòjọ ìṣàlẹ̀ yìí ṣàfihàn {{PLURAL:$1|ojúewé àkọ́kọ́|ojúewé $1 àkọ́kọ́}} tó únlo fáìlì yìí nìkan.\n[[Special:WhatLinksHere/$2|Àtòjọ kíkúnrẹ́rẹ́]] wà nígbèéwọ́.",
        "nolinkstoimage": "Kò sí ojúewé tó únlo fáìlì yìí.",
        "morelinkstoimage": "Ìwòrán [[Special:WhatLinksHere/$1|àwọn ìjápọ̀ míhìn]] sí fáìlì yìí.",
        "linkstoimage-redirect": "$1 (àtúnjúwe fáìlì) $2",
        "booksources-text": "Nísàlẹ̀ ni àtòjọ àwọn àjápọ̀ mọ́ àwọn ibiìtakùn míràn tí wọ́n únta ìwé tuntun àti ìwé àtijọ́, wọ́n sì le ní ọ̀rọ̀ ẹ̀kúnrẹ́rẹ́ nípa àwọn ìwé tí ẹ únwá:",
        "booksources-invalid-isbn": "ISBN náà kò dà bíi pé ó jẹ́ oníìbámu; ẹ yẹ̀ ẹ́ wò bóyá àsìṣe wà láti ibi tó jẹ́ kíkọ wá.",
        "specialloguserlabel": "Olùṣe:",
-       "speciallogtitlelabel": "Àfojúsùn (àkọlé tàbí oníṣe):",
+       "speciallogtitlelabel": "Àfojúsùn (àkọlé tàbí{{ns:oníṣe}}:orúkọ fún oníṣe):",
        "log": "Àwọn àkọọ́lẹ̀",
        "all-logs-page": "Gbogbo àkọsílẹ̀",
        "alllogstext": "Ìfihàn àpapọ̀ gbogbo àwọn àkọọ́lẹ̀ tó wà fún {{SITENAME}}.\nẸ le dín iwó kù nípa yíyan irú àkọọ́lẹ̀, orúkọ oníṣe (irú lẹ́tà ṣe kókó), tàbí ojúewé tókàn (irú lẹ́tà ṣe kókó).",
        "pageinfo-length": "Ìgùn ojúewé (ní iye byte)",
        "pageinfo-article-id": "Nọ́mbà ìdámọ̀ ojúewé",
        "pageinfo-language": "Èdè àkóónú ojúewé",
-       "pageinfo-robot-policy": "Ipò ẹ̀rọ ìṣàwárí",
+       "pageinfo-content-model": "Aṣèjúwe àkóónú ojúewé",
+       "pageinfo-robot-policy": "Ìtò látọwọ́ róbọ́tì",
        "pageinfo-robot-index": "Gbígbàláàyè",
        "pageinfo-robot-noindex": "Àìgbàláàyè",
        "pageinfo-watchers": "Iye àwọn olùṣọ́ ojúewé",
        "pageinfo-few-watchers": "Iye {{PLURAL:$1|olùwòran|àwọn olùwòran}} kò ju $1 lọ",
-       "pageinfo-redirects-name": "Àwọn àtúnjúwe sí ojúewé yìí",
+       "pageinfo-redirects-name": "Iye àwọn àtúnjúwe sí ojúewé yìí",
        "pageinfo-subpages-name": "Àwọn ojúewé tó wà lábẹ́ ojúewé yìí",
        "pageinfo-subpages-value": "$1 ({{PLURAL:$2|àtúnjúwe|àtúnjúwe}} $2; {{PLURAL:$3|àìjẹ́-àtúnjúwe|àìjẹ́-àtúnjúwe}} $3)",
        "pageinfo-firstuser": "Olùdá ojúewé",
        "version-entrypoints-header-entrypoint": "Ojú ìwọlé",
        "version-entrypoints-header-url": "URL",
        "redirect": "Àþúnjúwe látọ̀dọ̀ fáìlì, oníṣe, ojúewé, àtúnwò, tàbí ID àkọọ́lẹ̀",
+       "redirect-summary": "Ojúewé pàtàkì yìí ṣàtúnjúwe sí fáìlì kan (nítorí orúkọ fáìlì), ojúewé kan (nítorí ID àtúnyẹ̀wò tàbí ID ojúewé), ojúewé oníṣe kan (nítorí ID onínọ́mbà oníṣe), tàbí àkọsílẹ̀ ìlò kan (nítorí ID àkọsílẹ̀). Ìlò: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Lọ",
        "redirect-lookup": "Bojúwò:",
        "redirect-value": "Iye:",
        "revdelete-unrestricted": "yọ ìpàlà fún àwọn olúmójútó",
        "logentry-move-move": "$1 {{GENDER:$2|ṣeyípòdà}} ojúewé $3 sí $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ṣeyípòdà}} ojúewé $3 sí $4 láìfi àtúnjúwe sílẹ̀",
-       "logentry-move-move_redir": "$1 ṣeyípòdà ojúewé $3 sí $4 lórí àtúnjúwe",
+       "logentry-move-move_redir": "$1 {{GENDER:$2|ṣeyípòdà}} ojúewé $3 sí $4 lórí àtúnjúwe",
        "logentry-move-move_redir-noredirect": "$1 ṣeyípòdà ojúewé $3 sí $4 lórí àtúnjúwe láìfi àtúnjúwe sílẹ̀",
        "logentry-patrol-patrol": "$1 ṣe àmí àtúnyẹ̀wò $4 ojúewé $3 bíi sísọ́",
        "logentry-patrol-patrol-auto": "$1 fúnraẹni {{GENDER:$2|ṣàmì}} àtúnyẹ̀wò $4 sí ojúewé $3 bíi síṣọ́",
index d178e25..a7183f3 100644 (file)
                        "佛壁灯",
                        "94rain",
                        "Viztor",
-                       "Ps2049"
+                       "Ps2049",
+                       "Suchichi02"
                ]
        },
        "tog-underline": "链接下划线:",
        "changeemail-no-info": "\n您必须登录以直接访问本页。",
        "changeemail-oldemail": "当前电子邮件地址:",
        "changeemail-newemail": "新的电子邮件地址:",
-       "changeemail-newemail-help": "此字段应留空,如果您希望移除您的电子邮件地址的话。如果电子邮件地址被移除,您将无法重置忘记的密码,并将不会接收来自此wiki的电子邮件。",
+       "changeemail-newemail-help": "如果您希望移除您的电子邮件地址的话此字段应留空。如果电子邮件地址被移除,您将无法重置忘记的密码,并将不会接收来自此wiki的电子邮件。",
        "changeemail-none": "(无)",
        "changeemail-password": "您的{{SITENAME}}密码:",
        "changeemail-submit": "更改电子邮件地址",
        "createaccountblock": "账户创建已禁用",
        "emailblock": "电子邮件停用",
        "blocklist-nousertalk": "不能编辑自己的讨论页",
-       "blocklist-editing": "编辑",
+       "blocklist-editing": "编辑",
        "blocklist-editing-sitewide": "编辑 (全站)",
        "blocklist-editing-page": "页面",
        "blocklist-editing-ns": "名字空间",
        "passwordpolicies-policyflag-suggestchangeonlogin": "建议在登录时更改",
        "easydeflate-invaliddeflate": "提供的内容未被适当缩小",
        "unprotected-js": "基于安全原因,JavaScript不能在未保护页面中载入。请在“MediaWiki:”名字空间或者用户子页面中添加JavaScript。",
-       "userlogout-continue": "如果你希望登出请[$1 点这里]。",
-       "userlogout-sessionerror": "登出失败,会话错误。请[$1 重试]"
+       "userlogout-continue": "如果你希望登出请[$1 点这里]。"
 }
index e723ec9..c01c98a 100644 (file)
        "passwordpolicies-policyflag-suggestchangeonlogin": "建議在登入時更改",
        "easydeflate-invaliddeflate": "提供的內容未被正常的壓縮",
        "unprotected-js": "基於安全因素,JavaScript 不能從未保護的頁面來載入。請僅在 MediaWiki:命名空間或使用者子頁面中建立 JavaScript。",
-       "userlogout-continue": "若您想要登出請[$1 繼續前至登出頁面]。",
-       "userlogout-sessionerror": "出於 session 錯誤造成登出失敗。請[$1 重試]。"
+       "userlogout-continue": "若您想要登出請[$1 繼續前至登出頁面]。"
 }
index 44ce9a5..6beda4e 100644 (file)
@@ -26,6 +26,7 @@ require_once __DIR__ . '/../includes/PHPVersionCheck.php';
 wfEntryPointCheck( 'text' );
 
 use MediaWiki\Shell\Shell;
+use Wikimedia\Rdbms\IResultWrapper;
 
 /**
  * @defgroup MaintenanceArchive Maintenance archives
@@ -1478,9 +1479,9 @@ abstract class Maintenance {
        /**
         * Perform a search index update with locking
         * @param int $maxLockTime The maximum time to keep the search index locked.
-        * @param string $callback The function that will update the function.
+        * @param callable $callback The function that will update the function.
         * @param IMaintainableDatabase $dbw
-        * @param array $results
+        * @param array|IResultWrapper $results
         */
        public function updateSearchIndex( $maxLockTime, $callback, $dbw, $results ) {
                $lockTime = time();
@@ -1724,7 +1725,7 @@ abstract class LoggedUpdateMaintenance extends Maintenance {
                        return false;
                }
 
-               $db->insert( 'updatelog', [ 'ul_key' => $key ], __METHOD__, 'IGNORE' );
+               $db->insert( 'updatelog', [ 'ul_key' => $key ], __METHOD__, [ 'IGNORE' ] );
 
                return true;
        }
index f27ea2f..dfa83cd 100644 (file)
@@ -306,7 +306,7 @@ class ImportImages extends Maintenance {
                                        $publishOptions = [];
                                        $handler = MediaHandler::getHandler( $props['mime'] );
                                        if ( $handler ) {
-                                               $metadata = Wikimedia\quietCall( 'unserialize', $props['metadata'] );
+                                               $metadata = \Wikimedia\AtEase\AtEase::quietCall( 'unserialize', $props['metadata'] );
 
                                                $publishOptions['headers'] = $handler->getContentHeaders( $metadata );
                                        } else {
index ce1506c..508960d 100644 (file)
@@ -137,7 +137,7 @@ TEXT
                        'updatelog',
                        [ 'ul_key' => 'populate category' ],
                        __METHOD__,
-                       'IGNORE'
+                       [ 'IGNORE' ]
                );
 
                return true;
index a654a1f..6cc86e0 100644 (file)
@@ -141,7 +141,7 @@ TEXT
                                                'iw_local' => 1
                                        ],
                                        __METHOD__,
-                                       'IGNORE'
+                                       [ 'IGNORE' ]
                                );
                        }
 
index 6e88dfa..80f8d30 100644 (file)
@@ -128,7 +128,7 @@ TEXT
                        }
 
                        if ( $insertRows ) {
-                               $dbw->insert( 'ip_changes', $insertRows, __METHOD__, 'IGNORE' );
+                               $dbw->insert( 'ip_changes', $insertRows, __METHOD__, [ 'IGNORE' ] );
 
                                $inserted += $dbw->affectedRows();
                        }
index f58d733..25f57ef 100644 (file)
@@ -10,8 +10,6 @@
  *
  *  $( '#textbox' ).suggestions();
  *
- * Uses jQuery.suggestions singleton internally.
- *
  * @class jQuery.plugin.suggestions
  */
 
 
 ( function () {
 
-       var hasOwn = Object.hasOwnProperty;
+       /**
+        * Cancel any delayed maybeFetch() call and callback the context so
+        * they can cancel any async fetching if they use AJAX or something.
+        *
+        * @param {Object} context
+        */
+       function cancel( context ) {
+               if ( context.data.timerID !== null ) {
+                       clearTimeout( context.data.timerID );
+               }
+               if ( typeof context.config.cancel === 'function' ) {
+                       context.config.cancel.call( context.data.$textbox );
+               }
+       }
 
        /**
-        * Used by jQuery.plugin.suggestions.
+        * Hide the element with suggestions and clean up some state.
         *
-        * @class jQuery.suggestions
-        * @singleton
-        * @private
+        * @param {Object} context
         */
-       $.suggestions = {
-               /**
-                * Cancel any delayed maybeFetch() call and callback the context so
-                * they can cancel any async fetching if they use AJAX or something.
-                *
-                * @param {Object} context
-                */
-               cancel: function ( context ) {
-                       if ( context.data.timerID !== null ) {
-                               clearTimeout( context.data.timerID );
-                       }
-                       if ( typeof context.config.cancel === 'function' ) {
-                               context.config.cancel.call( context.data.$textbox );
+       function hide( context ) {
+               // Remove any highlights, including on "special" items
+               context.data.$container.find( '.suggestions-result-current' ).removeClass( 'suggestions-result-current' );
+               // Hide the container
+               context.data.$container.hide();
+       }
+
+       /**
+        * Restore the text the user originally typed in the textbox, before it
+        * was overwritten by highlight(). This restores the value the currently
+        * displayed suggestions are based on, rather than the value just before
+        * highlight() overwrote it; the former is arguably slightly more sensible.
+        *
+        * @param {Object} context
+        */
+       function restore( context ) {
+               context.data.$textbox.val( context.data.prevText );
+       }
+
+       /**
+        * @param {Object} context
+        */
+       function special( context ) {
+               // Allow custom rendering - but otherwise don't do any rendering
+               if ( typeof context.config.special.render === 'function' ) {
+                       // Wait for the browser to update the value
+                       setTimeout( function () {
+                               // Render special
+                               var $special = context.data.$container.find( '.suggestions-special' );
+                               context.config.special.render.call( $special, context.data.$textbox.val(), context );
+                       }, 1 );
+               }
+       }
+
+       /**
+        * Ask the user-specified callback for new suggestions. Any previous delayed
+        * call to this function still pending will be canceled. If the value in the
+        * textbox is empty or hasn't changed since the last time suggestions were fetched,
+        * this function does nothing.
+        *
+        * @param {Object} context
+        * @param {boolean} delayed Whether or not to delay this by the currently configured amount of time
+        */
+       function update( context, delayed ) {
+               function maybeFetch() {
+                       var val = context.data.$textbox.val(),
+                               cache = context.data.cache,
+                               cacheHit;
+
+                       if ( typeof context.config.update.before === 'function' ) {
+                               context.config.update.before.call( context.data.$textbox );
                        }
-               },
-
-               /**
-                * Hide the element with suggestions and clean up some state.
-                *
-                * @param {Object} context
-                */
-               hide: function ( context ) {
-                       // Remove any highlights, including on "special" items
-                       context.data.$container.find( '.suggestions-result-current' ).removeClass( 'suggestions-result-current' );
-                       // Hide the container
-                       context.data.$container.hide();
-               },
-
-               /**
-                * Restore the text the user originally typed in the textbox, before it
-                * was overwritten by highlight(). This restores the value the currently
-                * displayed suggestions are based on, rather than the value just before
-                * highlight() overwrote it; the former is arguably slightly more sensible.
-                *
-                * @param {Object} context
-                */
-               restore: function ( context ) {
-                       context.data.$textbox.val( context.data.prevText );
-               },
-
-               /**
-                * Ask the user-specified callback for new suggestions. Any previous delayed
-                * call to this function still pending will be canceled. If the value in the
-                * textbox is empty or hasn't changed since the last time suggestions were fetched,
-                * this function does nothing.
-                *
-                * @param {Object} context
-                * @param {boolean} delayed Whether or not to delay this by the currently configured amount of time
-                */
-               update: function ( context, delayed ) {
-                       function maybeFetch() {
-                               var val = context.data.$textbox.val(),
-                                       cache = context.data.cache,
-                                       cacheHit;
-
-                               if ( typeof context.config.update.before === 'function' ) {
-                                       context.config.update.before.call( context.data.$textbox );
-                               }
 
-                               // Only fetch if the value in the textbox changed and is not empty, or if the results were hidden
-                               // if the textbox is empty then clear the result div, but leave other settings intouched
-                               if ( val.length === 0 ) {
-                                       $.suggestions.hide( context );
-                                       context.data.prevText = '';
-                               } else if (
-                                       val !== context.data.prevText ||
-                                       !context.data.$container.is( ':visible' )
-                               ) {
-                                       context.data.prevText = val;
-                                       // Try cache first
-                                       if ( context.config.cache && hasOwn.call( cache, val ) ) {
-                                               if ( mw.now() - cache[ val ].timestamp < context.config.cacheMaxAge ) {
-                                                       context.data.$textbox.suggestions( 'suggestions', cache[ val ].suggestions );
+                       // Only fetch if the value in the textbox changed and is not empty, or if the results were hidden
+                       // if the textbox is empty then clear the result div, but leave other settings intouched
+                       if ( val.length === 0 ) {
+                               hide( context );
+                               context.data.prevText = '';
+                       } else if (
+                               val !== context.data.prevText ||
+                               !context.data.$container.is( ':visible' )
+                       ) {
+                               context.data.prevText = val;
+                               // Try cache first
+                               if ( context.config.cache && val in cache ) {
+                                       if ( mw.now() - cache[ val ].timestamp < context.config.cacheMaxAge ) {
+                                               context.data.$textbox.suggestions( 'suggestions', cache[ val ].suggestions );
+                                               if ( typeof context.config.update.after === 'function' ) {
+                                                       context.config.update.after.call( context.data.$textbox, cache[ val ].metadata );
+                                               }
+                                               cacheHit = true;
+                                       } else {
+                                               // Cache expired
+                                               delete cache[ val ];
+                                       }
+                               }
+                               if ( !cacheHit && typeof context.config.fetch === 'function' ) {
+                                       context.config.fetch.call(
+                                               context.data.$textbox,
+                                               val,
+                                               function ( suggestions, metadata ) {
+                                                       suggestions = suggestions.slice( 0, context.config.maxRows );
+                                                       context.data.$textbox.suggestions( 'suggestions', suggestions );
                                                        if ( typeof context.config.update.after === 'function' ) {
-                                                               context.config.update.after.call( context.data.$textbox, cache[ val ].metadata );
+                                                               context.config.update.after.call( context.data.$textbox, metadata );
                                                        }
-                                                       cacheHit = true;
+                                                       if ( context.config.cache ) {
+                                                               cache[ val ] = {
+                                                                       suggestions: suggestions,
+                                                                       metadata: metadata,
+                                                                       timestamp: mw.now()
+                                                               };
+                                                       }
+                                               },
+                                               context.config.maxRows
+                                       );
+                               }
+                       }
+
+                       // Always update special rendering
+                       special( context );
+               }
+
+               // Cancels any delayed maybeFetch call, and invokes context.config.cancel.
+               cancel( context );
+
+               if ( delayed ) {
+                       // To avoid many started/aborted requests while typing, we're gonna take a short
+                       // break before trying to fetch data.
+                       context.data.timerID = setTimeout( maybeFetch, context.config.delay );
+               } else {
+                       maybeFetch();
+               }
+       }
+
+       /**
+        * Highlight a result in the results table
+        *
+        * @param {Object} context
+        * @param {jQuery|string} result `<tr>` to highlight, or 'prev' or 'next'
+        * @param {boolean} updateTextbox If true, put the suggestion in the textbox
+        */
+       function highlight( context, result, updateTextbox ) {
+               var selected = context.data.$container.find( '.suggestions-result-current' );
+               if ( !result.get || selected.get( 0 ) !== result.get( 0 ) ) {
+                       if ( result === 'prev' ) {
+                               if ( selected.hasClass( 'suggestions-special' ) ) {
+                                       result = context.data.$container.find( '.suggestions-result:last' );
+                               } else {
+                                       result = selected.prev();
+                                       if ( !( result.length && result.hasClass( 'suggestions-result' ) ) ) {
+                                               // there is something in the DOM between selected element and the wrapper, bypass it
+                                               result = selected.parents( '.suggestions-results > *' ).prev().find( '.suggestions-result' ).eq( 0 );
+                                       }
+
+                                       if ( selected.length === 0 ) {
+                                               // we are at the beginning, so lets jump to the last item
+                                               if ( context.data.$container.find( '.suggestions-special' ).html() !== '' ) {
+                                                       result = context.data.$container.find( '.suggestions-special' );
                                                } else {
-                                                       // Cache expired
-                                                       delete cache[ val ];
+                                                       result = context.data.$container.find( '.suggestions-results .suggestions-result:last' );
                                                }
                                        }
-                                       if ( !cacheHit && typeof context.config.fetch === 'function' ) {
-                                               context.config.fetch.call(
-                                                       context.data.$textbox,
-                                                       val,
-                                                       function ( suggestions, metadata ) {
-                                                               suggestions = suggestions.slice( 0, context.config.maxRows );
-                                                               context.data.$textbox.suggestions( 'suggestions', suggestions );
-                                                               if ( typeof context.config.update.after === 'function' ) {
-                                                                       context.config.update.after.call( context.data.$textbox, metadata );
-                                                               }
-                                                               if ( context.config.cache ) {
-                                                                       cache[ val ] = {
-                                                                               suggestions: suggestions,
-                                                                               metadata: metadata,
-                                                                               timestamp: mw.now()
-                                                                       };
-                                                               }
-                                                       },
-                                                       context.config.maxRows
-                                               );
-                                       }
                                }
+                       } else if ( result === 'next' ) {
+                               if ( selected.length === 0 ) {
+                                       // No item selected, go to the first one
+                                       result = context.data.$container.find( '.suggestions-results .suggestions-result:first' );
+                                       if ( result.length === 0 && context.data.$container.find( '.suggestions-special' ).html() !== '' ) {
+                                               // No suggestion exists, go to the special one directly
+                                               result = context.data.$container.find( '.suggestions-special' );
+                                       }
+                               } else {
+                                       result = selected.next();
+                                       if ( !( result.length && result.hasClass( 'suggestions-result' ) ) ) {
+                                               // there is something in the DOM between selected element and the wrapper, bypass it
+                                               result = selected.parents( '.suggestions-results > *' ).next().find( '.suggestions-result' ).eq( 0 );
+                                       }
 
-                               // Always update special rendering
-                               $.suggestions.special( context );
+                                       if ( selected.hasClass( 'suggestions-special' ) ) {
+                                               result = $( [] );
+                                       } else if (
+                                               result.length === 0 &&
+                                               context.data.$container.find( '.suggestions-special' ).html() !== ''
+                                       ) {
+                                               // We were at the last item, jump to the specials!
+                                               result = context.data.$container.find( '.suggestions-special' );
+                                       }
+                               }
                        }
-
-                       // Cancels any delayed maybeFetch call, and invokes context.config.cancel.
-                       $.suggestions.cancel( context );
-
-                       if ( delayed ) {
-                               // To avoid many started/aborted requests while typing, we're gonna take a short
-                               // break before trying to fetch data.
-                               context.data.timerID = setTimeout( maybeFetch, context.config.delay );
+                       selected.removeClass( 'suggestions-result-current' );
+                       result.addClass( 'suggestions-result-current' );
+               }
+               if ( updateTextbox ) {
+                       if ( result.length === 0 || result.is( '.suggestions-special' ) ) {
+                               restore( context );
                        } else {
-                               maybeFetch();
-                       }
-               },
-
-               /**
-                * @param {Object} context
-                */
-               special: function ( context ) {
-                       // Allow custom rendering - but otherwise don't do any rendering
-                       if ( typeof context.config.special.render === 'function' ) {
-                               // Wait for the browser to update the value
-                               setTimeout( function () {
-                                       // Render special
-                                       var $special = context.data.$container.find( '.suggestions-special' );
-                                       context.config.special.render.call( $special, context.data.$textbox.val(), context );
-                               }, 1 );
+                               context.data.$textbox.val( result.data( 'text' ) );
+                               // .val() doesn't call any event handlers, so
+                               // let the world know what happened
+                               context.data.$textbox.trigger( 'change' );
                        }
-               },
-
-               /**
-                * Sets the value of a property, and updates the widget accordingly
-                *
-                * @param {Object} context
-                * @param {string} property Name of property
-                * @param {Mixed} value Value to set property with
-                */
-               configure: function ( context, property, value ) {
-                       var newCSS,
-                               $result, $results, $spanForWidth, childrenWidth,
-                               regionIsFixed, regionPosition,
-                               i, expWidth, maxWidth, text;
-
-                       // Validate creation using fallback values
-                       switch ( property ) {
-                               case 'fetch':
-                               case 'cancel':
-                               case 'special':
-                               case 'result':
-                               case 'update':
-                               case '$region':
-                               case 'expandFrom':
-                                       context.config[ property ] = value;
-                                       break;
-                               case 'suggestions':
-                                       context.config[ property ] = value;
-                                       // Update suggestions
-                                       if ( context.data !== undefined ) {
-                                               if ( context.data.$textbox.val().length === 0 ) {
-                                                       // Hide the div when no suggestion exist
-                                                       $.suggestions.hide( context );
-                                               } else {
-                                                       // Rebuild the suggestions list
-                                                       context.data.$container.show();
-                                                       // Update the size and position of the list
-                                                       regionIsFixed = ( function () {
-                                                               var $el = context.config.$region;
-                                                               do {
-                                                                       if ( $el.css( 'position' ) === 'fixed' ) {
-                                                                               return true;
-                                                                       }
-                                                                       $el = $( $el[ 0 ].offsetParent );
-                                                               } while ( $el.length );
-                                                               return false;
-                                                       }() );
-                                                       regionPosition = regionIsFixed ?
-                                                               context.config.$region[ 0 ].getBoundingClientRect() :
-                                                               context.config.$region.offset();
-                                                       newCSS = {
-                                                               position: regionIsFixed ? 'fixed' : 'absolute',
-                                                               top: regionPosition.top + context.config.$region.outerHeight(),
-                                                               bottom: 'auto',
-                                                               width: context.config.$region.outerWidth(),
-                                                               height: 'auto'
-                                                       };
-
-                                                       // Process expandFrom, after this it is set to left or right.
-                                                       context.config.expandFrom = ( function ( expandFrom ) {
-                                                               var regionWidth, docWidth, regionCenter, docCenter,
-                                                                       docDir = $( document.documentElement ).css( 'direction' ),
-                                                                       $region = context.config.$region;
-
-                                                               // Backwards compatible
-                                                               if ( context.config.positionFromLeft ) {
-                                                                       expandFrom = 'left';
-
-                                                               // Catch invalid values, default to 'auto'
-                                                               } else if ( [ 'left', 'right', 'start', 'end', 'auto' ].indexOf( expandFrom ) === -1 ) {
-                                                                       expandFrom = 'auto';
+                       context.data.$textbox.trigger( 'change' );
+               }
+       }
+
+       /**
+        * Sets the value of a property, and updates the widget accordingly
+        *
+        * @param {Object} context
+        * @param {string} property Name of property
+        * @param {Mixed} value Value to set property with
+        */
+       function configure( context, property, value ) {
+               var newCSS,
+                       $result, $results, $spanForWidth, childrenWidth,
+                       regionIsFixed, regionPosition,
+                       i, expWidth, maxWidth, text;
+
+               // Validate creation using fallback values
+               switch ( property ) {
+                       case 'fetch':
+                       case 'cancel':
+                       case 'special':
+                       case 'result':
+                       case 'update':
+                       case '$region':
+                       case 'expandFrom':
+                               context.config[ property ] = value;
+                               break;
+                       case 'suggestions':
+                               context.config[ property ] = value;
+                               // Update suggestions
+                               if ( context.data !== undefined ) {
+                                       if ( context.data.$textbox.val().length === 0 ) {
+                                               // Hide the div when no suggestion exist
+                                               hide( context );
+                                       } else {
+                                               // Rebuild the suggestions list
+                                               context.data.$container.show();
+                                               // Update the size and position of the list
+                                               regionIsFixed = ( function () {
+                                                       var $el = context.config.$region;
+                                                       do {
+                                                               if ( $el.css( 'position' ) === 'fixed' ) {
+                                                                       return true;
                                                                }
+                                                               $el = $( $el[ 0 ].offsetParent );
+                                                       } while ( $el.length );
+                                                       return false;
+                                               }() );
+                                               regionPosition = regionIsFixed ?
+                                                       context.config.$region[ 0 ].getBoundingClientRect() :
+                                                       context.config.$region.offset();
+                                               newCSS = {
+                                                       position: regionIsFixed ? 'fixed' : 'absolute',
+                                                       top: regionPosition.top + context.config.$region.outerHeight(),
+                                                       bottom: 'auto',
+                                                       width: context.config.$region.outerWidth(),
+                                                       height: 'auto'
+                                               };
+
+                                               // Process expandFrom, after this it is set to left or right.
+                                               context.config.expandFrom = ( function ( expandFrom ) {
+                                                       var regionWidth, docWidth, regionCenter, docCenter,
+                                                               docDir = $( document.documentElement ).css( 'direction' ),
+                                                               $region = context.config.$region;
+
+                                                       // Backwards compatible
+                                                       if ( context.config.positionFromLeft ) {
+                                                               expandFrom = 'left';
+
+                                                       // Catch invalid values, default to 'auto'
+                                                       } else if ( [ 'left', 'right', 'start', 'end', 'auto' ].indexOf( expandFrom ) === -1 ) {
+                                                               expandFrom = 'auto';
+                                                       }
 
-                                                               if ( expandFrom === 'auto' ) {
-                                                                       if ( $region.data( 'searchsuggest-expand-dir' ) ) {
-                                                                               // If the markup explicitly contains a direction, use it.
-                                                                               expandFrom = $region.data( 'searchsuggest-expand-dir' );
+                                                       if ( expandFrom === 'auto' ) {
+                                                               if ( $region.data( 'searchsuggest-expand-dir' ) ) {
+                                                                       // If the markup explicitly contains a direction, use it.
+                                                                       expandFrom = $region.data( 'searchsuggest-expand-dir' );
+                                                               } else {
+                                                                       regionWidth = $region.outerWidth();
+                                                                       docWidth = $( document ).width();
+                                                                       if ( regionWidth > ( 0.85 * docWidth ) ) {
+                                                                               // If the input size takes up more than 85% of the document horizontally
+                                                                               // expand the suggestions to the writing direction's native end.
+                                                                               expandFrom = 'start';
                                                                        } else {
-                                                                               regionWidth = $region.outerWidth();
-                                                                               docWidth = $( document ).width();
-                                                                               if ( regionWidth > ( 0.85 * docWidth ) ) {
-                                                                                       // If the input size takes up more than 85% of the document horizontally
-                                                                                       // expand the suggestions to the writing direction's native end.
+                                                                               // Calculate the center points of the input and document
+                                                                               regionCenter = regionPosition.left + regionWidth / 2;
+                                                                               docCenter = docWidth / 2;
+                                                                               if ( Math.abs( regionCenter - docCenter ) < ( 0.10 * docCenter ) ) {
+                                                                                       // If the input's center is within 10% of the document center
+                                                                                       // use the writing direction's native end.
                                                                                        expandFrom = 'start';
                                                                                } else {
-                                                                                       // Calculate the center points of the input and document
-                                                                                       regionCenter = regionPosition.left + regionWidth / 2;
-                                                                                       docCenter = docWidth / 2;
-                                                                                       if ( Math.abs( regionCenter - docCenter ) < ( 0.10 * docCenter ) ) {
-                                                                                               // If the input's center is within 10% of the document center
-                                                                                               // use the writing direction's native end.
-                                                                                               expandFrom = 'start';
-                                                                                       } else {
-                                                                                               // Otherwise expand the input from the closest side of the page,
-                                                                                               // towards the side of the page with the most free open space
-                                                                                               expandFrom = regionCenter > docCenter ? 'right' : 'left';
-                                                                                       }
+                                                                                       // Otherwise expand the input from the closest side of the page,
+                                                                                       // towards the side of the page with the most free open space
+                                                                                       expandFrom = regionCenter > docCenter ? 'right' : 'left';
                                                                                }
                                                                        }
                                                                }
+                                                       }
 
-                                                               if ( expandFrom === 'start' ) {
-                                                                       expandFrom = docDir === 'rtl' ? 'right' : 'left';
+                                                       if ( expandFrom === 'start' ) {
+                                                               expandFrom = docDir === 'rtl' ? 'right' : 'left';
 
-                                                               } else if ( expandFrom === 'end' ) {
-                                                                       expandFrom = docDir === 'rtl' ? 'left' : 'right';
-                                                               }
+                                                       } else if ( expandFrom === 'end' ) {
+                                                               expandFrom = docDir === 'rtl' ? 'left' : 'right';
+                                                       }
 
-                                                               return expandFrom;
+                                                       return expandFrom;
 
-                                                       }( context.config.expandFrom ) );
+                                               }( context.config.expandFrom ) );
 
-                                                       if ( context.config.expandFrom === 'left' ) {
-                                                               // Expand from left
-                                                               newCSS.left = regionPosition.left;
-                                                               newCSS.right = 'auto';
+                                               if ( context.config.expandFrom === 'left' ) {
+                                                       // Expand from left
+                                                       newCSS.left = regionPosition.left;
+                                                       newCSS.right = 'auto';
+                                               } else {
+                                                       // Expand from right
+                                                       newCSS.left = 'auto';
+                                                       newCSS.right = document.documentElement.clientWidth -
+                                                               ( regionPosition.left + context.config.$region.outerWidth() );
+                                               }
+
+                                               context.data.$container.css( newCSS );
+                                               $results = context.data.$container.children( '.suggestions-results' );
+                                               $results.empty();
+                                               expWidth = -1;
+                                               for ( i = 0; i < context.config.suggestions.length; i++ ) {
+                                                       text = context.config.suggestions[ i ];
+                                                       $result = $( '<div>' )
+                                                               .addClass( 'suggestions-result' )
+                                                               .attr( 'rel', i )
+                                                               .data( 'text', context.config.suggestions[ i ] )
+                                                               .on( 'mousemove', function () {
+                                                                       context.data.selectedWithMouse = true;
+                                                                       highlight(
+                                                                               context,
+                                                                               $( this ).closest( '.suggestions-results .suggestions-result' ),
+                                                                               false
+                                                                       );
+                                                               } )
+                                                               .appendTo( $results );
+                                                       // Allow custom rendering
+                                                       if ( typeof context.config.result.render === 'function' ) {
+                                                               context.config.result.render.call( $result, context.config.suggestions[ i ], context );
                                                        } else {
-                                                               // Expand from right
-                                                               newCSS.left = 'auto';
-                                                               newCSS.right = $( 'body' ).width() - ( regionPosition.left + context.config.$region.outerWidth() );
+                                                               $result.text( text );
                                                        }
 
-                                                       context.data.$container.css( newCSS );
-                                                       $results = context.data.$container.children( '.suggestions-results' );
-                                                       $results.empty();
-                                                       expWidth = -1;
-                                                       for ( i = 0; i < context.config.suggestions.length; i++ ) {
-                                                               text = context.config.suggestions[ i ];
-                                                               $result = $( '<div>' )
-                                                                       .addClass( 'suggestions-result' )
-                                                                       .attr( 'rel', i )
-                                                                       .data( 'text', context.config.suggestions[ i ] )
-                                                                       .on( 'mousemove', function () {
-                                                                               context.data.selectedWithMouse = true;
-                                                                               $.suggestions.highlight(
-                                                                                       context,
-                                                                                       $( this ).closest( '.suggestions-results .suggestions-result' ),
-                                                                                       false
-                                                                               );
-                                                                       } )
-                                                                       .appendTo( $results );
-                                                               // Allow custom rendering
-                                                               if ( typeof context.config.result.render === 'function' ) {
-                                                                       context.config.result.render.call( $result, context.config.suggestions[ i ], context );
-                                                               } else {
-                                                                       $result.text( text );
-                                                               }
-
-                                                               if ( context.config.highlightInput ) {
-                                                                       $result.highlightText( context.data.prevText, { method: 'prefixHighlight' } );
-                                                               }
-
-                                                               // Widen results box if needed (new width is only calculated here, applied later).
-
-                                                               // The monstrosity below accomplishes two things:
-                                                               // * Wraps the text contents in a DOM element, so that we can know its width. There is
-                                                               //   no way to directly access the width of a text node, and we can't use the parent
-                                                               //   node width as it has text-overflow: ellipsis; and overflow: hidden; applied to
-                                                               //   it, which trims it to a smaller width.
-                                                               // * Temporarily applies position: absolute; to the wrapper to pull it out of normal
-                                                               //   document flow. Otherwise the CSS text-overflow: ellipsis; and overflow: hidden;
-                                                               //   rules would cause some browsers (at least all versions of IE from 6 to 11) to
-                                                               //   still report the "trimmed" width. This should not be done in regular CSS
-                                                               //   stylesheets as we don't want this rule to apply to other <span> elements, like
-                                                               //   the ones generated by jquery.highlightText.
-                                                               $spanForWidth = $result.wrapInner( '<span>' ).children();
-                                                               childrenWidth = $spanForWidth.css( 'position', 'absolute' ).outerWidth();
-                                                               $spanForWidth.contents().unwrap();
-
-                                                               if ( childrenWidth > $result.width() && childrenWidth > expWidth ) {
-                                                                       // factor in any padding, margin, or border space on the parent
-                                                                       expWidth = childrenWidth + ( context.data.$container.width() - $result.width() );
-                                                               }
+                                                       if ( context.config.highlightInput ) {
+                                                               $result.highlightText( context.data.prevText, { method: 'prefixHighlight' } );
                                                        }
 
-                                                       // Apply new width for results box, if any
-                                                       if ( expWidth > context.data.$container.width() ) {
-                                                               maxWidth = context.config.maxExpandFactor * context.data.$textbox.width();
-                                                               context.data.$container.width( Math.min( expWidth, maxWidth ) );
+                                                       // Widen results box if needed (new width is only calculated here, applied later).
+
+                                                       // The monstrosity below accomplishes two things:
+                                                       // * Wraps the text contents in a DOM element, so that we can know its width. There is
+                                                       //   no way to directly access the width of a text node, and we can't use the parent
+                                                       //   node width as it has text-overflow: ellipsis; and overflow: hidden; applied to
+                                                       //   it, which trims it to a smaller width.
+                                                       // * Temporarily applies position: absolute; to the wrapper to pull it out of normal
+                                                       //   document flow. Otherwise the CSS text-overflow: ellipsis; and overflow: hidden;
+                                                       //   rules would cause some browsers (at least all versions of IE from 6 to 11) to
+                                                       //   still report the "trimmed" width. This should not be done in regular CSS
+                                                       //   stylesheets as we don't want this rule to apply to other <span> elements, like
+                                                       //   the ones generated by jquery.highlightText.
+                                                       $spanForWidth = $result.wrapInner( '<span>' ).children();
+                                                       childrenWidth = $spanForWidth.css( 'position', 'absolute' ).outerWidth();
+                                                       $spanForWidth.contents().unwrap();
+
+                                                       if ( childrenWidth > $result.width() && childrenWidth > expWidth ) {
+                                                               // factor in any padding, margin, or border space on the parent
+                                                               expWidth = childrenWidth + ( context.data.$container.width() - $result.width() );
                                                        }
                                                }
-                                       }
-                                       break;
-                               case 'maxRows':
-                                       context.config[ property ] = Math.max( 1, Math.min( 100, value ) );
-                                       break;
-                               case 'delay':
-                                       context.config[ property ] = Math.max( 0, Math.min( 1200, value ) );
-                                       break;
-                               case 'cacheMaxAge':
-                                       context.config[ property ] = Math.max( 1, value );
-                                       break;
-                               case 'maxExpandFactor':
-                                       context.config[ property ] = Math.max( 1, value );
-                                       break;
-                               case 'cache':
-                               case 'submitOnClick':
-                               case 'positionFromLeft':
-                               case 'highlightInput':
-                                       context.config[ property ] = !!value;
-                                       break;
-                       }
-               },
-
-               /**
-                * Highlight a result in the results table
-                *
-                * @param {Object} context
-                * @param {jQuery|string} result `<tr>` to highlight, or 'prev' or 'next'
-                * @param {boolean} updateTextbox If true, put the suggestion in the textbox
-                */
-               highlight: function ( context, result, updateTextbox ) {
-                       var selected = context.data.$container.find( '.suggestions-result-current' );
-                       if ( !result.get || selected.get( 0 ) !== result.get( 0 ) ) {
-                               if ( result === 'prev' ) {
-                                       if ( selected.hasClass( 'suggestions-special' ) ) {
-                                               result = context.data.$container.find( '.suggestions-result:last' );
-                                       } else {
-                                               result = selected.prev();
-                                               if ( !( result.length && result.hasClass( 'suggestions-result' ) ) ) {
-                                                       // there is something in the DOM between selected element and the wrapper, bypass it
-                                                       result = selected.parents( '.suggestions-results > *' ).prev().find( '.suggestions-result' ).eq( 0 );
-                                               }
 
-                                               if ( selected.length === 0 ) {
-                                                       // we are at the beginning, so lets jump to the last item
-                                                       if ( context.data.$container.find( '.suggestions-special' ).html() !== '' ) {
-                                                               result = context.data.$container.find( '.suggestions-special' );
-                                                       } else {
-                                                               result = context.data.$container.find( '.suggestions-results .suggestions-result:last' );
-                                                       }
-                                               }
-                                       }
-                               } else if ( result === 'next' ) {
-                                       if ( selected.length === 0 ) {
-                                               // No item selected, go to the first one
-                                               result = context.data.$container.find( '.suggestions-results .suggestions-result:first' );
-                                               if ( result.length === 0 && context.data.$container.find( '.suggestions-special' ).html() !== '' ) {
-                                                       // No suggestion exists, go to the special one directly
-                                                       result = context.data.$container.find( '.suggestions-special' );
-                                               }
-                                       } else {
-                                               result = selected.next();
-                                               if ( !( result.length && result.hasClass( 'suggestions-result' ) ) ) {
-                                                       // there is something in the DOM between selected element and the wrapper, bypass it
-                                                       result = selected.parents( '.suggestions-results > *' ).next().find( '.suggestions-result' ).eq( 0 );
-                                               }
-
-                                               if ( selected.hasClass( 'suggestions-special' ) ) {
-                                                       result = $( [] );
-                                               } else if (
-                                                       result.length === 0 &&
-                                                       context.data.$container.find( '.suggestions-special' ).html() !== ''
-                                               ) {
-                                                       // We were at the last item, jump to the specials!
-                                                       result = context.data.$container.find( '.suggestions-special' );
+                                               // Apply new width for results box, if any
+                                               if ( expWidth > context.data.$container.width() ) {
+                                                       maxWidth = context.config.maxExpandFactor * context.data.$textbox.width();
+                                                       context.data.$container.width( Math.min( expWidth, maxWidth ) );
                                                }
                                        }
                                }
-                               selected.removeClass( 'suggestions-result-current' );
-                               result.addClass( 'suggestions-result-current' );
-                       }
-                       if ( updateTextbox ) {
-                               if ( result.length === 0 || result.is( '.suggestions-special' ) ) {
-                                       $.suggestions.restore( context );
+                               break;
+                       case 'maxRows':
+                               context.config[ property ] = Math.max( 1, Math.min( 100, value ) );
+                               break;
+                       case 'delay':
+                               context.config[ property ] = Math.max( 0, Math.min( 1200, value ) );
+                               break;
+                       case 'cacheMaxAge':
+                               context.config[ property ] = Math.max( 1, value );
+                               break;
+                       case 'maxExpandFactor':
+                               context.config[ property ] = Math.max( 1, value );
+                               break;
+                       case 'cache':
+                       case 'submitOnClick':
+                       case 'positionFromLeft':
+                       case 'highlightInput':
+                               context.config[ property ] = !!value;
+                               break;
+               }
+       }
+
+       /**
+        * Respond to keypress event
+        *
+        * @param {jQuery.Event} e
+        * @param {Object} context
+        * @param {number} key Code of key pressed
+        */
+       function keypress( e, context, key ) {
+               var selected,
+                       wasVisible = context.data.$container.is( ':visible' ),
+                       preventDefault = false;
+
+               switch ( key ) {
+                       // Arrow down
+                       case 40:
+                               if ( wasVisible ) {
+                                       highlight( context, 'next', true );
+                                       context.data.selectedWithMouse = false;
                                } else {
-                                       context.data.$textbox.val( result.data( 'text' ) );
-                                       // .val() doesn't call any event handlers, so
-                                       // let the world know what happened
-                                       context.data.$textbox.trigger( 'change' );
+                                       update( context, false );
+                               }
+                               preventDefault = true;
+                               break;
+                       // Arrow up
+                       case 38:
+                               if ( wasVisible ) {
+                                       highlight( context, 'prev', true );
+                                       context.data.selectedWithMouse = false;
                                }
+                               preventDefault = wasVisible;
+                               break;
+                       // Escape
+                       case 27:
+                               hide( context );
+                               restore( context );
+                               cancel( context );
                                context.data.$textbox.trigger( 'change' );
-                       }
-               },
-
-               /**
-                * Respond to keypress event
-                *
-                * @param {jQuery.Event} e
-                * @param {Object} context
-                * @param {number} key Code of key pressed
-                */
-               keypress: function ( e, context, key ) {
-                       var selected,
-                               wasVisible = context.data.$container.is( ':visible' ),
-                               preventDefault = false;
-
-                       switch ( key ) {
-                               // Arrow down
-                               case 40:
-                                       if ( wasVisible ) {
-                                               $.suggestions.highlight( context, 'next', true );
-                                               context.data.selectedWithMouse = false;
-                                       } else {
-                                               $.suggestions.update( context, false );
-                                       }
-                                       preventDefault = true;
-                                       break;
-                               // Arrow up
-                               case 38:
-                                       if ( wasVisible ) {
-                                               $.suggestions.highlight( context, 'prev', true );
-                                               context.data.selectedWithMouse = false;
-                                       }
-                                       preventDefault = wasVisible;
-                                       break;
-                               // Escape
-                               case 27:
-                                       $.suggestions.hide( context );
-                                       $.suggestions.restore( context );
-                                       $.suggestions.cancel( context );
-                                       context.data.$textbox.trigger( 'change' );
-                                       preventDefault = wasVisible;
-                                       break;
-                               // Enter
-                               case 13:
-                                       preventDefault = wasVisible;
-                                       selected = context.data.$container.find( '.suggestions-result-current' );
-                                       $.suggestions.hide( context );
-                                       if ( selected.length === 0 || context.data.selectedWithMouse ) {
-                                               // If nothing is selected or if something was selected with the mouse
-                                               // cancel any current requests and allow the form to be submitted
-                                               // (simply don't prevent default behavior).
-                                               $.suggestions.cancel( context );
-                                               preventDefault = false;
-                                       } else if ( selected.is( '.suggestions-special' ) ) {
-                                               if ( typeof context.config.special.select === 'function' ) {
-                                                       // Allow the callback to decide whether to prevent default or not
-                                                       if ( context.config.special.select.call( selected, context.data.$textbox, 'keyboard' ) === true ) {
-                                                               preventDefault = false;
-                                                       }
+                               preventDefault = wasVisible;
+                               break;
+                       // Enter
+                       case 13:
+                               preventDefault = wasVisible;
+                               selected = context.data.$container.find( '.suggestions-result-current' );
+                               hide( context );
+                               if ( selected.length === 0 || context.data.selectedWithMouse ) {
+                                       // If nothing is selected or if something was selected with the mouse
+                                       // cancel any current requests and allow the form to be submitted
+                                       // (simply don't prevent default behavior).
+                                       cancel( context );
+                                       preventDefault = false;
+                               } else if ( selected.is( '.suggestions-special' ) ) {
+                                       if ( typeof context.config.special.select === 'function' ) {
+                                               // Allow the callback to decide whether to prevent default or not
+                                               if ( context.config.special.select.call( selected, context.data.$textbox, 'keyboard' ) === true ) {
+                                                       preventDefault = false;
                                                }
-                                       } else {
-                                               if ( typeof context.config.result.select === 'function' ) {
-                                                       // Allow the callback to decide whether to prevent default or not
-                                                       if ( context.config.result.select.call( selected, context.data.$textbox, 'keyboard' ) === true ) {
-                                                               preventDefault = false;
-                                                       }
+                                       }
+                               } else {
+                                       if ( typeof context.config.result.select === 'function' ) {
+                                               // Allow the callback to decide whether to prevent default or not
+                                               if ( context.config.result.select.call( selected, context.data.$textbox, 'keyboard' ) === true ) {
+                                                       preventDefault = false;
                                                }
                                        }
-                                       break;
-                               default:
-                                       $.suggestions.update( context, true );
-                                       break;
-                       }
-                       if ( preventDefault ) {
-                               e.preventDefault();
-                               e.stopPropagation();
-                       }
+                               }
+                               break;
+                       default:
+                               update( context, true );
+                               break;
                }
-       };
+               if ( preventDefault ) {
+                       e.preventDefault();
+                       e.stopPropagation();
+               }
+       }
 
        // See file header for method documentation
        $.fn.suggestions = function () {
                                if ( typeof args[ 0 ] === 'object' ) {
                                        // Apply set of properties
                                        for ( key in args[ 0 ] ) {
-                                               $.suggestions.configure( context, key, args[ 0 ][ key ] );
+                                               configure( context, key, args[ 0 ][ key ] );
                                        }
                                } else if ( typeof args[ 0 ] === 'string' ) {
                                        if ( args.length > 1 ) {
                                                // Set property values
-                                               $.suggestions.configure( context, args[ 0 ], args[ 1 ] );
+                                               configure( context, args[ 0 ], args[ 1 ] );
                                        }
                                }
                        }
                                        prevText: null,
 
                                        // Cache of fetched suggestions
-                                       cache: {},
+                                       cache: Object.create( null ),
 
                                        // Number of results visible without scrolling
                                        visibleResults: 0,
                                                                if ( $result.get( 0 ) !== $other.get( 0 ) ) {
                                                                        return;
                                                                }
-                                                               $.suggestions.highlight( context, $result, true );
+                                                               highlight( context, $result, true );
                                                                if ( typeof context.config.result.select === 'function' ) {
                                                                        context.config.result.select.call( $result, context.data.$textbox, 'mouse' );
                                                                }
                                                                        // This will hide the link we're just clicking on, which causes problems
                                                                        // when done synchronously in at least Firefox 3.6 (T64858).
                                                                        setTimeout( function () {
-                                                                               $.suggestions.hide( context );
+                                                                               hide( context );
                                                                        } );
                                                                }
                                                                // Always bring focus to the textbox, as that's probably where the user expects it
                                                                        // This will hide the link we're just clicking on, which causes problems
                                                                        // when done synchronously in at least Firefox 3.6 (T64858).
                                                                        setTimeout( function () {
-                                                                               $.suggestions.hide( context );
+                                                                               hide( context );
                                                                        } );
                                                                }
                                                                // Always bring focus to the textbox, as that's probably where the user expects it
                                                        } )
                                                        .on( 'mousemove', function ( e ) {
                                                                context.data.selectedWithMouse = true;
-                                                               $.suggestions.highlight(
+                                                               highlight(
                                                                        context, $( e.target ).closest( '.suggestions-special' ), false
                                                                );
                                                        } )
                                        )
-                                       .appendTo( $( 'body' ) );
+                                       .appendTo( document.body );
 
                                $( this )
                                        // Stop browser autocomplete from interfering
                                        } )
                                        .on( 'keypress', function ( e ) {
                                                context.data.keypressedCount++;
-                                               $.suggestions.keypress( e, context, context.data.keypressed );
+                                               keypress( e, context, context.data.keypressed );
                                        } )
                                        .on( 'keyup', function ( e ) {
                                                // The keypress event is fired when a key is pressed down and that key normally
                                                        e.which === context.data.keypressed &&
                                                        allowed.indexOf( e.which ) !== -1
                                                ) {
-                                                       $.suggestions.keypress( e, context, context.data.keypressed );
+                                                       keypress( e, context, context.data.keypressed );
                                                }
                                        } )
                                        .on( 'blur', function () {
                                                if ( context.data.mouseDownOn.length > 0 ) {
                                                        return;
                                                }
-                                               $.suggestions.hide( context );
-                                               $.suggestions.cancel( context );
+                                               hide( context );
+                                               cancel( context );
                                        } );
                                // Load suggestions if the value is changed because there are already
                                // typed characters before the JavaScript is loaded.
                                if ( this.value !== this.defaultValue ) {
-                                       $.suggestions.update( context, false );
+                                       update( context, false );
                                }
                        }
 
index cc206b7..70e5102 100644 (file)
@@ -124,7 +124,7 @@ pre,
        background: #fff;
        color: #000;
        border: 1pt dashed #000;
-       padding: 1em 0;
+       padding: 1em;
        font-size: 8pt;
        white-space: pre-wrap;
        word-wrap: break-word;
index 630e3a6..4eba81d 100644 (file)
@@ -65,8 +65,6 @@
                        api.postWithToken( 'csrf', {
                                action: 'logout'
                        } ).done( function () {
-                               // Horrible hack until deprecation of logoutToken in GET is done
-                               returnUrl = returnUrl.replace( /logoutToken=.+?($|&)/g, 'logoutToken=%2B%5C' );
                                window.location = returnUrl;
                        } ).fail( function ( e ) {
                                mw.notify(
diff --git a/tests/phpunit/data/upload/jpeg-a-href-in-metadata.jpg b/tests/phpunit/data/upload/jpeg-a-href-in-metadata.jpg
new file mode 100644 (file)
index 0000000..5438736
Binary files /dev/null and b/tests/phpunit/data/upload/jpeg-a-href-in-metadata.jpg differ
diff --git a/tests/phpunit/data/upload/png-embedded-breaks-ie5.png b/tests/phpunit/data/upload/png-embedded-breaks-ie5.png
new file mode 100644 (file)
index 0000000..0af03fc
Binary files /dev/null and b/tests/phpunit/data/upload/png-embedded-breaks-ie5.png differ
diff --git a/tests/phpunit/data/upload/png-plain.png b/tests/phpunit/data/upload/png-plain.png
new file mode 100644 (file)
index 0000000..83e9130
Binary files /dev/null and b/tests/phpunit/data/upload/png-plain.png differ
index c210061..df9ddee 100644 (file)
@@ -30,6 +30,7 @@ class DerivativeResourceLoaderContextTest extends PHPUnit\Framework\TestCase {
        public function testChangeLanguageAndDirection() {
                $derived = new DerivativeResourceLoaderContext( self::makeContext() );
                $this->assertSame( $derived->getLanguage(), 'qqx', 'inherit from parent' );
+               $this->assertSame( $derived->getDirection(), 'ltr', 'inherit from parent' );
 
                $derived->setLanguage( 'nl' );
                $this->assertSame( $derived->getLanguage(), 'nl' );
index 48c3d17..a1fdf8a 100644 (file)
@@ -2,6 +2,7 @@
 
 namespace MediaWiki\Session;
 
+use Wikimedia\AtEase\AtEase;
 use Config;
 use MediaWikiTestCase;
 use User;
@@ -900,7 +901,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                $manager->globalSessionRequest = $request;
 
                session_id( self::SESSIONID );
-               \Wikimedia\quietCall( 'session_start' );
+               AtEase::quietCall( 'session_start' );
                $_SESSION['foo'] = __METHOD__;
                $backend->resetId();
                $this->assertNotEquals( self::SESSIONID, $backend->getId() );
@@ -938,7 +939,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                $manager->globalSessionRequest = $request;
 
                session_id( self::SESSIONID . 'x' );
-               \Wikimedia\quietCall( 'session_start' );
+               AtEase::quietCall( 'session_start' );
                $backend->unpersist();
                $this->assertSame( self::SESSIONID . 'x', session_id() );
                session_write_close();
index 58c69e3..cafc846 100644 (file)
@@ -585,6 +585,42 @@ class UploadBaseTest extends MediaWikiTestCase {
                        [ '<?xml version="1.0" encoding="WINDOWS-1252"?><svg></svg>', false ],
                ];
        }
+
+       /**
+        * @covers UploadBase::detectScript
+        * @dataProvider provideDetectScript
+        */
+       public function testDetectScript( $filename, $mime, $extension, $expected, $message ) {
+               $result = $this->upload->detectScript( $filename, $mime, $extension );
+               $this->assertSame( $expected, $result, $message );
+       }
+
+       public static function provideDetectScript() {
+               global $IP;
+               return [
+                       [
+                               "$IP/tests/phpunit/data/upload/png-plain.png",
+                               'image/png',
+                               'png',
+                               false,
+                               'PNG with no suspicious things in it, should pass.'
+                       ],
+                       [
+                               "$IP/tests/phpunit/data/upload/png-embedded-breaks-ie5.png",
+                               'image/png',
+                               'png',
+                               true,
+                               'PNG with embedded data that IE5/6 interprets as HTML; should be rejected.'
+                       ],
+                       [
+                               "$IP/tests/phpunit/data/upload/jpeg-a-href-in-metadata.jpg",
+                               'image/jpeg',
+                               'jpeg',
+                               false,
+                               'JPEG with innocuous HTML in metadata from a flickr photo; should pass (T27707).'
+                       ],
+               ];
+       }
 }
 
 class UploadTestHandler extends UploadBase {
index 2a79467..a18ee41 100644 (file)
@@ -41,7 +41,7 @@ describe( 'Rollback with confirmation', function () {
                assert.strictEqual( HistoryPage.rollbackConfirmableNo.getText(), 'Cancel' );
        } );
 
-       it( 'should offer a way to cancel rollbacks', function () {
+       it.skip( 'should offer a way to cancel rollbacks', function () {
                HistoryPage.rollback.click();
 
                HistoryPage.rollbackConfirmableNo.waitForVisible( 5000 );