Merge "Remove mention of $wgHTCPMulticastRouting, not present since MW 1.24"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 21 Oct 2018 18:03:42 +0000 (18:03 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 21 Oct 2018 18:03:42 +0000 (18:03 +0000)
49 files changed:
.gitignore
RELEASE-NOTES-1.33
composer.json
includes/AjaxResponse.php
includes/DefaultSettings.php
includes/OutputPage.php
includes/actions/RawAction.php
includes/auth/AuthManager.php
includes/clientpool/SquidPurgeClient.php
includes/installer/i18n/bg.json
includes/installer/i18n/da.json
includes/installer/i18n/en.json
includes/libs/objectcache/WANObjectCache.php
includes/mail/UserMailer.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialEmailuser.php
includes/watcheditem/WatchedItemStoreInterface.php
languages/i18n/ace.json
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/da.json
languages/i18n/en.json
languages/i18n/es-formal.json
languages/i18n/es.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/gom-latn.json
languages/i18n/he.json
languages/i18n/io.json
languages/i18n/it.json
languages/i18n/ko.json
languages/i18n/la.json
languages/i18n/mk.json
languages/i18n/mr.json
languages/i18n/nl.json
languages/i18n/pag.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/shn.json
languages/i18n/sr-ec.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/war.json
languages/i18n/zh-hant.json
maintenance/resetUserEmail.php
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.highlightCircles.seenunseen.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less
tests/phpunit/includes/ExtraParserTest.php

index 248931e..35c8fc6 100644 (file)
@@ -20,6 +20,8 @@ project.index
 ## Sublime
 sublime-*
 sftp-config.json
+## Visual Studio Code
+*.vscode
 
 # MediaWiki install & usage
 /cache
index 00a6938..5da6863 100644 (file)
@@ -56,6 +56,10 @@ because of Phabricator reports.
 * …
 
 === 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.
 * …
 
 === Other changes in 1.33 ===
index 2e13f90..d7a25e3 100644 (file)
@@ -44,7 +44,7 @@
                "wikimedia/php-session-serializer": "1.0.6",
                "wikimedia/purtle": "1.0.7",
                "wikimedia/relpath": "2.1.1",
-               "wikimedia/remex-html": "2.0.0",
+               "wikimedia/remex-html": "2.0.1",
                "wikimedia/running-stat": "1.2.1",
                "wikimedia/scoped-callback": "2.0.0",
                "wikimedia/utfnormal": "2.0.0",
index 0c11505..dfcf467 100644 (file)
@@ -186,6 +186,7 @@ class AjaxResponse {
                                # Surrogate-Control controls our CDN, Cache-Control downstream caches
 
                                if ( $this->mConfig->get( 'UseESI' ) ) {
+                                       wfDeprecated( '$wgUseESI = true', '1.33' );
                                        header( 'Surrogate-Control: max-age=' . $this->mCacheDuration . ', content="ESI/1.0"' );
                                        header( 'Cache-Control: s-maxage=0, must-revalidate, max-age=0' );
                                } else {
index ec44242..fa95633 100644 (file)
@@ -2736,6 +2736,7 @@ $wgUseSquid = false;
 
 /**
  * If you run Squid3 with ESI support, enable this (default:false):
+ * @deprecated in 1.33. This was a now-defunct experimental feature.
  */
 $wgUseESI = false;
 
@@ -2849,6 +2850,7 @@ $wgSquidServersNoPurge = [];
  * reverse).
  *
  * @since 1.21
+ * @deprecated since 1.33, will always be true in a future release.
  */
 $wgSquidPurgeUseHostHeader = true;
 
index a5f5fab..0cff578 100644 (file)
@@ -2460,6 +2460,7 @@ class OutputPage extends ContextSource {
                                !$this->haveCacheVaryCookies()
                        ) {
                                if ( $config->get( 'UseESI' ) ) {
+                                       wfDeprecated( '$wgUseESI = true', '1.33' );
                                        # We'll purge the proxy cache explicitly, but require end user agents
                                        # to revalidate against the proxy on each visit.
                                        # Surrogate-Control controls our CDN, Cache-Control downstream caches
index b5a6d3a..77a8b14 100644 (file)
@@ -129,6 +129,30 @@ class RawAction extends FormlessAction {
                        }
                }
 
+               // Don't allow loading non-protected pages as javascript.
+               // In future we may further restrict this to only CONTENT_MODEL_JAVASCRIPT
+               // in NS_MEDIAWIKI or NS_USER, as well as including other config types,
+               // but for now be more permissive. Allowing protected pages outside of
+               // NS_USER and NS_MEDIAWIKI in particular should be considered a temporary
+               // allowance.
+               if (
+                       $contentType === 'text/javascript' &&
+                       !$title->isUserJsConfigPage() &&
+                       !$title->inNamespace( NS_MEDIAWIKI ) &&
+                       !in_array( 'sysop', $title->getRestrictions( 'edit' ) ) &&
+                       !in_array( 'editprotected', $title->getRestrictions( 'edit' ) )
+               ) {
+
+                       $log = LoggerFactory::getInstance( "security" );
+                       $log->info( "Blocked loading unprotected JS {title} for {user}",
+                               [
+                                       'user' => $this->getUser()->getName(),
+                                       'title' => $title->getPrefixedDBKey(),
+                               ]
+                       );
+                       throw new HttpError( 403, wfMessage( 'unprotected-js' ) );
+               }
+
                $response->header( 'Content-type: ' . $contentType . '; charset=UTF-8' );
 
                $text = $this->getRawText();
index ab7ba0f..c2e6d32 100644 (file)
@@ -681,8 +681,9 @@ class AuthManager implements LoggerAwareInterface {
                        // Step 4: Authentication complete! Set the user in the session and
                        // clean up.
 
-                       $this->logger->info( 'Login for {user} succeeded', [
+                       $this->logger->info( 'Login for {user} succeeded from {clientip}', [
                                'user' => $user->getName(),
+                               'clientip' => $this->request->getIP(),
                        ] );
                        /** @var RememberMeAuthenticationRequest $req */
                        $req = AuthenticationRequest::getRequestByClass(
index a531cd1..36d72c2 100644 (file)
@@ -211,6 +211,7 @@ class SquidPurgeClient {
                        $request[] = "PURGE $path HTTP/1.1";
                        $request[] = "Host: $host";
                } else {
+                       wfDeprecated( '$wgSquidPurgeUseHostHeader = false', '1.33' );
                        $request[] = "PURGE $url HTTP/1.0";
                }
                $request[] = "Connection: Keep-Alive";
index 3805dfa..b3bcba3 100644 (file)
        "config-install-mainpage-failed": "Вмъкването на Началната страница беше невъзможно: $1",
        "config-install-done": "<strong>Поздравления!</strong>\nИнсталирането на МедияУики приключи успешно.\n\nИнсталаторът създаде файл <code>LocalSettings.php</code>.\nТой съдържа всичката необходима основна конфигурация на уикито.\n\nНеобходимо е той да бъде изтеглен и поставен в основната директория на уикито (директорията, в която е и index.php). Изтеглянето би трябвало да започне автоматично.\n\nАко изтеглянето не започне автоматично или е било прекратено, файлът може да бъде изтеглен чрез щракване на препратката по-долу:\n\n$3\n\n<strong>Забележка:</strong> Ако това не бъде извършено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му.\n\nКогато файлът вече е в основната директория, <strong>[$2 уикито ще е достъпно на този адрес]</strong>.",
        "config-install-done-path": "<strong>Поздравления!</strong>\nИнсталирането на МедияУики приключи успешно.\n\nИнсталаторът създаде файл <code>LocalSettings.php</code>.\nТой съдържа всички ваши настройки.\n\nНеобходимо е той да бъде изтеглен и поставен в <code>$4</code>. Изтеглянето би трябвало да започне автоматично.\n\nАко изтеглянето не започне автоматично или е било прекратено, файлът може да бъде изтеглен чрез щракване на препратката по-долу:\n\n$3\n\n<strong>Забележка:</strong> Ако това не бъде направено сега, генерираният конфигурационен файл няма да е достъпен на по-късен етап ако не бъде изтеглен сега или инсталацията приключи без изтеглянето му.\n\nКогато файлът вече е в основната директория, <strong>[$2 уикито ще е достъпно на този адрес]</strong>.",
-       "config-install-success": "МедияУики беше успешно инсталиран. Можете да посетите <$1$2> за да видите Вашето уики.\nАко имате въпроси, вижте списъка с често задавани въпроси:\n<https://www.mediawiki.org/wiki/Manual:FAQ> или използвайте някой от форумите за поддръжка на тази страница.",
+       "config-install-success": "МедияУики беше успешно инсталиран. Можете да посетите <$1$2> за да видите Вашето уики.\n\nАко имате въпроси, вижте списъка с често задавани въпроси:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или използвайте някой от форумите за поддръжка на тази страница.",
        "config-download-localsettings": "Изтегляне на <code>LocalSettings.php</code>",
        "config-help": "помощ",
        "config-help-tooltip": "щракнете за разгръщане",
index 54a4596..901953b 100644 (file)
        "config-upload-deleted": "Mappe for slettede filer:",
        "config-cc-again": "Vælg igen...",
        "config-extensions": "Udvidelser",
+       "config-install-step-done": "udført",
+       "config-install-step-failed": "mislykkedes",
+       "config-install-user-alreadyexists": "Brugeren \"$1\" findes allerede",
+       "config-install-user-create-failed": "Oprettelse af brugeren \"$1\" mislykkedes: $2",
+       "config-install-tables": "Opretter tabeller",
+       "config-install-mainpage-failed": "Kunne ikke indsætte forside: $1",
        "config-help": "hjælp",
        "config-help-tooltip": "klik for at udvide",
        "config-skins-screenshots": "$1 (skærmbilleder: $2)",
index 893df5a..5a63d32 100644 (file)
        "config-help": "help",
        "config-help-tooltip": "click to expand",
        "config-nofile": "File \"$1\" could not be found. Has it been deleted?",
-       "config-extension-link": "Did you know that your wiki supports [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYou can browse [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category] or the [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] to see the full list of extensions.",
+       "config-extension-link": "Did you know that your wiki supports [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensions]?\n\nYou can browse [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions by category].",
        "config-skins-screenshots": "$1 (screenshots: $2)",
        "config-skins-screenshot": "$1 ($2)",
        "config-extensions-requires": "$1 (requires $2)",
index 3af820b..e7586cf 100644 (file)
@@ -2225,7 +2225,17 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @codeCoverageIgnore
         */
        protected function getCurrentTime() {
-               return $this->wallClockOverride ?: microtime( true );
+               if ( $this->wallClockOverride ) {
+                       return $this->wallClockOverride;
+               }
+
+               $clockTime = (float)time(); // call this first
+               // microtime() uses an initial gettimeofday() call added to usage clocks.
+               // This can severely drift from time() and the microtime() value of other threads
+               // due to undercounting of the amount of time elapsed. Instead of seeing the current
+               // time as being in the past, use the value of time(). This avoids setting cache values
+               // that will immediately be seen as expired and possibly cause stampedes.
+               return max( microtime( true ), $clockTime );
        }
 
        /**
index 5d7afd3..102d615 100644 (file)
@@ -430,7 +430,7 @@ class UserMailer {
                        try {
                                foreach ( $to as $recip ) {
                                        $sent = mail(
-                                               $recip,
+                                               $recip->toString(),
                                                self::quotedPrintable( $subject ),
                                                $body,
                                                $headers,
index 013ceb2..b91273a 100644 (file)
@@ -606,6 +606,9 @@ class SpecialPageFactory {
                        'user' => $main->getUser(),
                        'language' => $main->getLanguage(),
                ];
+               if ( $main->canUseWikiPage() ) {
+                       $ctx['wikipage'] = $main->getWikiPage();
+               }
 
                // Override
                $wgTitle = $title;
@@ -633,6 +636,9 @@ class SpecialPageFactory {
                $main->setRequest( $ctx['request'] );
                $main->setUser( $ctx['user'] );
                $main->setLanguage( $ctx['language'] );
+               if ( isset( $ctx['wikipage'] ) ) {
+                       $main->setWikiPage( $ctx['wikipage'] );
+               }
 
                return $ret;
        }
index 7de44d8..342f6db 100644 (file)
@@ -92,7 +92,6 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                        'Text' => [
                                'type' => 'textarea',
                                'rows' => 20,
-                               'cols' => 80,
                                'label-message' => 'emailmessage',
                                'required' => true,
                        ],
@@ -106,12 +105,16 @@ class SpecialEmailUser extends UnlistedSpecialPage {
 
        public function execute( $par ) {
                $out = $this->getOutput();
+               $request = $this->getRequest();
                $out->addModuleStyles( 'mediawiki.special' );
 
                $this->mTarget = is_null( $par )
-                       ? $this->getRequest()->getVal( 'wpTarget', $this->getRequest()->getVal( 'target', '' ) )
+                       ? $request->getVal( 'wpTarget', $request->getVal( 'target', '' ) )
                        : $par;
 
+               // Make sure, that HTMLForm uses the correct target.
+               $request->setVal( 'wpTarget', $this->mTarget );
+
                // This needs to be below assignment of $this->mTarget because
                // getDescription() needs it to determine the correct page title.
                $this->setHeaders();
@@ -142,45 +145,22 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                                list( $title, $msg, $params ) = $error;
                                throw new ErrorPageError( $title, $msg, $params );
                }
-               // Got a valid target user name? Else ask for one.
-               $ret = self::getTarget( $this->mTarget, $this->getUser() );
-               if ( !$ret instanceof User ) {
-                       if ( $this->mTarget != '' ) {
-                               // Messages used here: notargettext, noemailtext, nowikiemailtext
-                               $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
-                               $out->wrapWikiMsg( "<p class='error'>$1</p>", $ret );
-                       }
-                       $out->addHTML( $this->userForm( $this->mTarget ) );
-
-                       return;
-               }
-
-               $this->mTargetObj = $ret;
-
-               // Set the 'relevant user' in the skin, so it displays links like Contributions,
-               // User logs, UserRights, etc.
-               $this->getSkin()->setRelevantUser( $this->mTargetObj );
 
+               // Make sure, that a submitted form isn't submitted to a subpage (which could be
+               // a non-existing username)
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getPageTitle() ); // Remove subpage
-               $form = new HTMLForm( $this->getFormFields(), $context );
-               // By now we are supposed to be sure that $this->mTarget is a user name
-               $form->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() );
-               $form->setSubmitTextMsg( 'emailsend' );
-               $form->setSubmitCallback( [ __CLASS__, 'uiSubmit' ] );
-               $form->setWrapperLegendMsg( 'email-legend' );
-               $form->loadData();
-
-               if ( !Hooks::run( 'EmailUserForm', [ &$form ] ) ) {
-                       return;
-               }
-
-               $result = $form->show();
-
-               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
-                       $out->setPageTitle( $this->msg( 'emailsent' ) );
-                       $out->addWikiMsg( 'emailsenttext', $this->mTarget );
-                       $out->returnToMain( false, $this->mTargetObj->getUserPage() );
+               $this->setContext( $context );
+
+               // A little hack: HTMLForm will check $this->mTarget only, if the form was posted, not
+               // if the user opens Special:EmailUser/Florian (e.g.). So check, if the user did that
+               // and show the "Send email to user" form directly, if so. Show the "enter username"
+               // form, otherwise.
+               $this->mTargetObj = self::getTarget( $this->mTarget );
+               if ( !$this->mTargetObj instanceof User ) {
+                       $this->userForm( $this->mTarget );
+               } else {
+                       $this->sendEmailForm();
                }
        }
 
@@ -323,47 +303,63 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         * @return string Form asking for user name.
         */
        protected function userForm( $name ) {
-               $this->getOutput()->addModules( 'mediawiki.userSuggest' );
-               $string = Html::openElement(
-                               'form',
-                               [ 'method' => 'get', 'action' => wfScript(), 'id' => 'askusername' ]
-                       ) .
-                       Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() ) .
-                       Html::openElement( 'fieldset' ) .
-                       Html::rawElement( 'legend', null, $this->msg( 'emailtarget' )->parse() ) .
-                       Html::label(
-                               $this->msg( 'emailusername' )->text(),
-                               'emailusertarget'
-                       ) . "\u{00A0}" .
-                       Html::input(
-                               'target',
-                               $name,
-                               'text',
-                               [
-                                       'id' => 'emailusertarget',
-                                       'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
-                                       'autofocus' => true,
-                                       'size' => 30,
-                               ]
-                       ) .
-                       ' ' .
-                       Html::submitButton( $this->msg( 'emailusernamesubmit' )->text(), [] ) .
-                       Html::closeElement( 'fieldset' ) .
-                       Html::closeElement( 'form' ) . "\n";
-
-               return $string;
+               $htmlForm = HTMLForm::factory( 'ooui', [
+                       'Target' => [
+                               'type' => 'user',
+                               'exists' => true,
+                               'label' => $this->msg( 'emailusername' )->text(),
+                               'id' => 'emailusertarget',
+                               'autofocus' => true,
+                               'value' => $name,
+                       ]
+               ], $this->getContext() );
+
+               $htmlForm
+                       ->setMethod( 'post' )
+                       ->setSubmitCallback( [ $this, 'sendEmailForm' ] )
+                       ->setFormIdentifier( 'userForm' )
+                       ->setSubmitProgressive()
+                       ->setId( 'askusername' )
+                       ->setWrapperLegendMsg( 'emailtarget' )
+                       ->setSubmitTextMsg( 'emailusernamesubmit' )
+                       ->show();
        }
 
-       /**
-        * Submit callback for an HTMLForm object, will simply call submit().
-        *
-        * @since 1.20
-        * @param array $data
-        * @param HTMLForm $form
-        * @return Status|bool
-        */
-       public static function uiSubmit( array $data, HTMLForm $form ) {
-               return self::submit( $data, $form->getContext() );
+       public function sendEmailForm() {
+               $out = $this->getOutput();
+
+               $ret = $this->mTargetObj;
+               if ( !$ret instanceof User ) {
+                       if ( $this->mTarget != '' ) {
+                               // Messages used here: notargettext, noemailtext, nowikiemailtext
+                               $ret = ( $ret == 'notarget' ) ? 'emailnotarget' : ( $ret . 'text' );
+                               return Status::newFatal( $ret );
+                       }
+                       return false;
+               }
+
+               $htmlForm = HTMLForm::factory( 'ooui', $this->getFormFields(), $this->getContext() );
+               // By now we are supposed to be sure that $this->mTarget is a user name
+               $htmlForm
+                       ->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() )
+                       ->setSubmitTextMsg( 'emailsend' )
+                       ->setSubmitCallback( [ __CLASS__, 'submit' ] )
+                       ->setFormIdentifier( 'sendEmailForm' )
+                       ->setWrapperLegendMsg( 'email-legend' )
+                       ->loadData();
+
+               if ( !Hooks::run( 'EmailUserForm', [ &$htmlForm ] ) ) {
+                       return false;
+               }
+
+               $result = $htmlForm->show();
+
+               if ( $result === true || ( $result instanceof Status && $result->isGood() ) ) {
+                       $out->setPageTitle( $this->msg( 'emailsent' ) );
+                       $out->addWikiMsg( 'emailsenttext', $this->mTarget );
+                       $out->returnToMain( false, $ret->getUserPage() );
+               }
+               return true;
        }
 
        /**
index ac5e215..274d3f4 100644 (file)
@@ -193,7 +193,7 @@ interface WatchedItemStoreInterface {
        public function addWatchBatchForUser( User $user, array $targets );
 
        /**
-        * Removes the an entry for the User watching the LinkTarget
+        * Removes an entry for the User watching the LinkTarget
         * Must be called separately for Subject & Talk namespaces
         *
         * @since 1.31
index b19a336..df835bd 100644 (file)
@@ -48,6 +48,7 @@
        "tog-watchlisthideliu": "Peusom atra geupeusaneut lé ureuëng ngui nyang tamöng nibak dapeuta keunalön",
        "tog-watchlisthideanons": "Peusöm atra nyang geupeusaneut lé ureuëng ngui hana geuturi nibak dapeuta keunalön",
        "tog-watchlisthidepatrolled": "Peusom neuandam teukawai bak dapeuta keunalön",
+       "tog-watchlisthidecategorization": "Peusom peukawan laman",
        "tog-ccmeonemails": "Peu'ék keu lôn seunalén surat-e nyang lôn peu'ék keu ureueng la'én",
        "tog-diffonly": "Bek peuleumah asoë laman di yup beunida neuandam",
        "tog-showhiddencats": "Peuleumah kawan teusom",
        "publishpage": "Peuteubiet mieng",
        "publishchanges": "Peuteubiet neuubah",
        "savechanges-start": "Keubah neuubah...",
+       "publishchanges-start": "Peuteubiet neuubah...",
        "preview": "Eu dilèë",
        "showpreview": "Peuleumah hasé",
        "showdiff": "Peuleumah neuubah",
        "rev-delundel": "peuleumah/peusom",
        "rev-showdeleted": "peudeuh",
        "revdelete-show-file-submit": "Nyoe",
+       "revdelete-hide-image": "Peusom asoe beureukaih",
        "revdelete-hide-comment": "Mohtasa neuandam",
        "revdelete-radio-same": "(bèk neugantoe)",
        "revdelete-radio-set": "Teusom",
        "datedefault": "Hana geunalak",
        "prefs-user-pages": "Laman ureueng ngui",
        "prefs-personal": "Profil ureueng ngui",
-       "prefs-rc": "Ban meuubah",
+       "prefs-rc": "Neuubah barô",
        "prefs-watchlist": "Dapeuta keunalön",
        "prefs-watchlist-days": "Jumeulah uroe nyang meupeudeuh bak dapeuta keunalön:",
        "prefs-watchlist-days-max": "{{PLURAL:$1|uroë}}",
        "recentchanges-summary": "Neukalön nyang ban meuubah bak wiki lam laman nyoe.",
        "recentchanges-noresult": "Hana neuubah lam lheuëng watèë nyoë nyang paih ngön syarat",
        "recentchanges-feed-description": "Seutöt neuubah barô lam wiki bak umpeuën nyoë.",
-       "recentchanges-label-newpage": "Hasé peusaneut nyoë jipeugöt laman barô",
-       "recentchanges-label-minor": "Nyoe geupeusaneut bacut",
+       "recentchanges-label-newpage": "Geupeugöt laman barô",
+       "recentchanges-label-minor": "Geupeusaneut bacut",
        "recentchanges-label-bot": "Geupeusaneut lé bot",
        "recentchanges-label-unpatrolled": "Hasé peusaneut nyoe goh lom geukalon",
-       "recentchanges-label-plusminus": "Seunipat laman geugantoë lé jeumeulah bita nyoë",
+       "recentchanges-label-plusminus": "Neuubah seunipat laman lam byte",
        "recentchanges-legend-heading": "<strong>Hareutoë:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (eu cit [[Special:NewPages|dapeuta laman barô]])",
        "rcfilters-legend-heading": "<strong>Dapeuta seuningkat:</strong>",
        "rcfilters-group-results-by-page": "Peusapat hasé meunurôt laman",
        "rcfilters-activefilters": "Seunaréng udép",
        "rcfilters-activefilters-hide": "Peusom",
+       "rcfilters-activefilters-hide-tooltip": "Peusom teumpat saréng aktif",
        "rcfilters-limit-title": "Hasé keu teupeuleumah",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|neuubah}}, $2",
        "rcfilters-date-popup-title": "Watèe nyang neumita",
        "rcfilters-filter-pageedits-label": "Peusaneut laman",
        "rcfilters-filter-newpages-label": "Peugöt laman",
        "rcfilters-filter-logactions-label": "Buet teucètèt",
-       "rcfilters-liveupdates-button": "Neuubah jinoe",
+       "rcfilters-liveupdates-button": "Neuubah langsông",
        "rcnotefrom": "Di yup nyoe nakeuh {{PLURAL:$5|neuubah}} yôh <strong>$3, $4</strong> (trôk 'an <strong>$1</strong> geupeuleumah).",
        "rclistfrom": "Peuleumah neuubah barô yôh $3 $2 kön",
        "rcshowhideminor": "$1 peusaneut bacut",
        "imagelinks": "Seuneungui beureukaih",
        "linkstoimage": "{{PLURAL:$1|laman}} di yup nyoe mupawôt u beureukaih nyoe:",
        "nolinkstoimage": "Hana laman nyang na meupawôt u beureukaih nyoe.",
+       "linkstoimage-redirect": "$1 (pinah beureukaih) $2",
        "sharedupload": "Beureukah nyoë dari $1 ngön kadang geunguy lé buët-buët la’én.",
        "sharedupload-desc-here": "Beureukaih nyoe nejih nibak $1 ngon kadang geunguy le proyek-proyek la'en.\nTeuneurang bak [$2 on teuneurangjih] geupeuleumah di yup nyoe.",
        "filepage-nofile": "Hana beureukaih ngön nan nyoe",
        "whatlinkshere-filters": "Saréng",
        "blockip": "Theun ureuëng ngui",
        "ipboptions": "2 jeum:2 hours,1 uroë:1 day,3 uroë:3 days,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite",
+       "ipbhidename": "Peusom nan ureueng ngui nibak hasé peusaneut ngön dapeuta",
        "ipblocklist": "Ureuëng ngui teutheun",
        "ipblocklist-submit": "Mita",
        "infiniteblock": "hana bataih",
        "pageinfo-header-basic": "Keutrangan peuneuphôn",
        "pageinfo-header-edits": "Riwayat peusaneut",
        "pageinfo-header-restrictions": "Lindông laman",
+       "pageinfo-header-properties": "Keutrangan laman",
        "pageinfo-display-title": "Judul tampilan",
        "pageinfo-default-sort": "Gunci urôt baku",
        "pageinfo-length": "Panyang laman (lam bit)",
        "pageinfo-robot-noindex": "Hana geupeuidin",
        "pageinfo-watchers": "Jumeulah ureueng kalön laman",
        "pageinfo-redirects-name": "Jumeulah peuninah u laman nyoe",
+       "pageinfo-subpages-name": "Jeumeulah aneuk laman nibak laman nyoe",
        "pageinfo-firstuser": "Ureueng peugöt laman",
        "pageinfo-firsttime": "Uroe buleuen pumeugot laman",
        "pageinfo-lastuser": "Ureueng peusaneut seuneulheueh",
        "pageinfo-edits": "Jumeulah hasé peusaneut ban dum",
        "pageinfo-authors": "Jumeulah ban dum ureueng teumuléh nyang mubida",
        "pageinfo-recent-edits": "Jumeulah peusaneut ban-ban nyoe (lam $1 nyoe)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Kawan}} teusom ($1)",
        "pageinfo-toolboxlink": "Keutrangan laman",
        "pageinfo-contentpage-yes": "Nyo",
        "patrol-log-page": "Log patroli",
        "tags-active-no": "H`an",
        "tags-hitcount": "$1 {{PLURAL:$1|neuubah}}",
        "logentry-delete-delete": "$1 {{GENDER:$2|geusampôh}} laman $3",
+       "revdelete-content-hid": "asoe geusom",
        "logentry-move-move": "$1 {{GENDER:$2|geupinah}} laman $3 u $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|geupinah}} laman $3 u $4 hana geubôh peuninah",
        "logentry-move-move_redir": "$1 {{GENDER:$2|geupinah}} laman $3 u $4 ateueh laman peuninah",
index c7b0604..346135c 100644 (file)
        "prefixindex": "كل الصفحات بالبادئة",
        "prefixindex-namespace": "كل الصفحات مع بادئة (نطاق $1)",
        "prefixindex-submit": "اعرض",
-       "prefixindex-strip": "أخÙ\81 Ø§Ù\84بادئة Ù\85Ù\86 Ø§Ù\84Ù\82ائÙ\85Ø©",
+       "prefixindex-strip": "إخÙ\81اء Ø§Ù\84بادئة Ù\81Ù\8a Ø§Ù\84Ù\86تائج",
        "shortpages": "صفحات قصيرة",
        "longpages": "صفحات طويلة",
        "deadendpages": "صفحات نهاية مسدودة",
index 84e4956..ea30326 100644 (file)
        "img-auth-badtitle": "Немагчыма стварыць слушную назву з «$1».",
        "img-auth-nologinnWL": "Вы не ўвайшлі ў сыстэму, а «$1» не знаходзіцца ў белым сьпісе.",
        "img-auth-nofile": "Файл «$1» не існуе.",
-       "img-auth-isdir": "Ð\92Ñ\8b Ñ\81пÑ\80абÑ\83еÑ\86е Ð°Ñ\82Ñ\80Ñ\8bмаÑ\86Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° Ð´Ñ\8bÑ\80Ñ\8dкÑ\82оÑ\80Ñ\8bÑ\96 «$1».\nДазволены толькі доступ да файлаў.",
-       "img-auth-streaming": "Ð\9fеÑ\80адаÑ\87а Ñ\81Ñ\82Ñ\80Ñ\83менÑ\8f «$1».",
+       "img-auth-isdir": "Ð\92Ñ\8b Ñ\81пÑ\80абÑ\83еÑ\86е Ð°Ñ\82Ñ\80Ñ\8bмаÑ\86Ñ\8c Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð´Ð° ÐºÐ°Ñ\82алÑ\91гÑ\83 «$1».\nДазволены толькі доступ да файлаў.",
+       "img-auth-streaming": "СÑ\82Ñ\80Ñ\83меннаÑ\8f Ð¿ÐµÑ\80адаÑ\87а «$1».",
        "img-auth-public": "Функцыя img_auth.php ужываецца для файла выхаду з прыватнай вікі.\nГэта вікі ўсталявана як публічная вікі.\nДля найлепшай бясьпекі img_auth.php выключана.",
        "img-auth-noread": "Удзельнік ня мае доступу на чытаньне «$1».",
        "http-invalid-url": "Няслушны URL-адрас: $1",
index 1a9d508..2cbd4aa 100644 (file)
        "ip_range_toolarge": "Забранено е блокиране на диапазони от IP адреси по-големи от /$1.",
        "ip_range_exceeded": "IP диапазонът превишава максималния диапазон. Позволен диапазон: /$1.",
        "proxyblocker": "Блокировач на проксита",
-       "proxyblockreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð²Ð¸ Ð±ÐµÑ\88е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан, Ñ\82Ñ\8aй ÐºÐ°Ñ\82о Ðµ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80. Ð¡Ð²Ñ\8aÑ\80жеÑ\82е Ñ\81е Ñ\81 Ð´Ð¾Ñ\81Ñ\82авÑ\87ика Ð²Ð¸ Ð½Ð° Ð¸нтернет и го информирайте за този сериозен проблем в сигурността.",
+       "proxyblockreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð\92и Ð±ÐµÑ\88е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан, Ñ\82Ñ\8aй ÐºÐ°Ñ\82о Ðµ Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80. Ð¡Ð²Ñ\8aÑ\80жеÑ\82е Ñ\81е Ñ\81 Ð´Ð¾Ñ\81Ñ\82авÑ\87ика Ñ\81и Ð½Ð° Ð\98нтернет и го информирайте за този сериозен проблем в сигурността.",
        "sorbs": "DNSBL",
-       "sorbsreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð²и е записан като анонимно достъпен междинен сървър в DNSBL на {{SITENAME}}.",
-       "sorbs_create_account_reason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð²Ð¸ Ðµ Ð·Ð°Ð¿Ð¸Ñ\81ан ÐºÐ°Ñ\82о Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80 Ð² DNSBL Ð½Ð° {{SITENAME}}. Не може да създадете сметка.",
+       "sorbsreason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð\92и е записан като анонимно достъпен междинен сървър в DNSBL на {{SITENAME}}.",
+       "sorbs_create_account_reason": "IP-адÑ\80еÑ\81Ñ\8aÑ\82 Ð\92и Ðµ Ð·Ð°Ð¿Ð¸Ñ\81ан ÐºÐ°Ñ\82о Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð¾ Ð´Ð¾Ñ\81Ñ\82Ñ\8aпен Ð¼ÐµÐ¶Ð´Ð¸Ð½ÐµÐ½ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80 Ð² DNSBL Ð½Ð° {{SITENAME}}.\nНе може да създадете сметка.",
        "cant-see-hidden-user": "Потребителят, който опитвате да блокирате, вече е блокиран и скрит. Тъй като нямате права да скривате потребители, не можете да видите или редактирате блокирането на потребителя.",
-       "ipbblocked": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\82е Ð¸ Ñ\80азблокиÑ\80аÑ\82е Ð´Ñ\80Ñ\83ги Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ели, Ð·Ð°Ñ\89оÑ\82о Ð²ие самият (самата) сте блокиран(а).",
+       "ipbblocked": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\82е Ð¸ Ñ\80азблокиÑ\80аÑ\82е Ð´Ñ\80Ñ\83ги Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ели, Ð·Ð°Ñ\89оÑ\82о Ð\92ие самият (самата) сте блокиран(а).",
        "ipbnounblockself": "Нямате право да се разблокирате сам(а).",
        "lockdb": "Заключване на базата от данни",
        "unlockdb": "Отключване на базата от данни",
-       "lockdbtext": "Заключването на базата от данни ще попречи на всички потребители да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и на всички други техни действия, изискващи промени в базата данни.\nПотвърдете, че искате точно това и ще отключите базата от данни, когато привършите с работата по подръжката.",
+       "lockdbtext": "Заключването на базата от данни ще попречи на всички потребители да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и на всички други техни действия, изискващи промени в базата данни.\nПотвърдете, че искате точно това и ще отключите базата от данни, когато привършите с работата по поддръжката.",
        "unlockdbtext": "Отключването на базата от данни ще възстанови способността на потребителите да редактират страници, да сменят своите настройки, да редактират своите списъци за наблюдение и изпълнението на всички други действия, изискващи промени в базата от данни.\nПотвърдете, че искате точно това.",
        "lockconfirm": "Да, наистина искам да заключа базата от данни.",
        "unlockconfirm": "Да, наистина искам да отключа базата от данни.",
        "movecategorypage-warning": "<strong>Внимание:</strong> На път сте да преместите категорийна страница. Моля, обърнете внимание, че ще бъде преместена само страницата на категорията. <em>Никоя</em> от страниците в старата категория <em>няма</em> да бъде прекатегоризирана.",
        "movenologintext": "Необходимо е да [[Special:UserLogin|влезете]], за да може да премествате страници.",
        "movenotallowed": "Нямате права за преместване на страници.",
-       "movenotallowedfile": "Ð\9dÑ\8fмаÑ\82е Ð¿Ñ\80ава Ð´Ð° Ð¿Ñ\80емеÑ\81Ñ\82ваÑ\82е файлове.",
-       "cant-move-user-page": "Ð\9dÑ\8fмаÑ\82е Ð½Ñ\83жниÑ\82е Ð¿Ñ\80ава Ð½а достъп, за да местите потребителски страници (можете да местите само подстраници).",
+       "movenotallowedfile": "Ð\9dÑ\8fмаÑ\82е Ð¿Ñ\80ава Ð·Ð° Ð¿Ñ\80емеÑ\81Ñ\82ване Ð½Ð° файлове.",
+       "cant-move-user-page": "Ð\9dÑ\8fмаÑ\82е Ð½Ñ\83жниÑ\82е Ð¿Ñ\80ава Ð·а достъп, за да местите потребителски страници (можете да местите само подстраници).",
        "cant-move-to-user-page": "Нямате нужните права на достъп, за да извършвате преместване на страници върху потребителски страници (можете да местите само върху подстраници от потребителското пространство).",
        "cant-move-category-page": "Нямате необходимите права за преместване на страници на категории.",
        "cant-move-to-category-page": "Нямате необходимите права за преместване на страница в страница на категория.",
        "cant-move-subpages": "Нямате права за преместване на подстраници.",
        "namespace-nosubpages": "Именно пространство „$1“ не позволява подстраници.",
        "newtitle": "Ново заглавие:",
-       "move-watch": "Наблюдаване на страницата",
+       "move-watch": "Наблюдаване на изходната и целевата страници",
        "movepagebtn": "Преместване",
        "pagemovedsub": "Преместването беше успешно",
        "movepage-moved": "<strong>Страницата „$1“ беше преместена под името „$2“</strong>",
index 5b286d7..ff229d2 100644 (file)
        "passwordreset-emailelement": "Brugernavn: \n$1\n\nMidlertidig adgangskode: \n$2",
        "passwordreset-emailsentemail": "Hvis denne e-mailadresse er knyttet til din konto, så vil en e-mail om nulstilling af adgangskoden blive sendt.",
        "passwordreset-emailsentusername": "Hvis der er en e-mailadresse forbundet med dette brugernavn, så vil en e-mail om nulstilling af adgangskoden blive sendt.",
+       "passwordreset-nocaller": "En kalder skal angives",
+       "passwordreset-nosuchcaller": "Kalderen findes ikke: $1",
        "passwordreset-invalidemail": "Ugyldig e-mailadresse",
        "passwordreset-nodata": "Hverken et brugernavn eller en e-mailadresse blev angivet",
        "changeemail": "Ændr eller fjern e-mailadresse",
index 5283a5b..e35af5a 100644 (file)
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Password cannot match specifically blacklisted passwords",
        "passwordpolicies-policy-maximalpasswordlength": "Password must be less than $1 {{PLURAL:$1|character|characters}} long",
        "passwordpolicies-policy-passwordcannotbepopular": "Password cannot be {{PLURAL:$1|the popular password|in the list of $1 popular passwords}}",
-       "easydeflate-invaliddeflate": "Content provided is not properly deflated"
+       "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"
 }
index 3a99aaa..8e490ef 100644 (file)
        "tooltip-pt-mycontris": "Una lista de {{GENDER:|sus}} contribuciones",
        "tooltip-pt-login": "Le invitamos a que se registre, aunque no es obligatorio",
        "tooltip-pt-createaccount": "Le invitamos a que cree una cuenta de usuario e inicie sesión, aunque ello no es obligatorio.",
-       "tooltip-ca-talk": "Discusión acerca del artículo",
+       "tooltip-ca-talk": "Discusión acerca de la página de contenido",
        "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-history": "Versiones anteriores de esta página y sus autores",
        "tooltip-ca-watch": "Añadir esta página a tu lista de seguimiento",
index 31eac2a..f5eb00d 100644 (file)
        "tooltip-pt-login-private": "Es necesario acceder a una cuenta para utilizar este wiki",
        "tooltip-pt-logout": "Salir de la sesión",
        "tooltip-pt-createaccount": "Te recomendamos crear una cuenta e iniciar sesión; sin embargo, no es obligatorio",
-       "tooltip-ca-talk": "Discusión acerca de la página de contenido",
+       "tooltip-ca-talk": "Discusión acerca de la página",
        "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-addsection": "Iniciar una sección nueva",
        "tooltip-ca-viewsource": "Esta página está protegida.\nPuedes ver su código fuente",
index 0986223..200f178 100644 (file)
        "pageinfo-recent-authors": "تعداد نویسندگان یکتای اخیر",
        "pageinfo-magic-words": "{{PLURAL:$1|حرف|حروف}} جادویی ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )",
-       "pageinfo-templates": "{{PLURAL:$1|الگو|الگو}} استفاده‌شده ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|الگوهای|الگوهای}} استفاده‌شده ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|صفحهٔ|صفحه‌های}} تراگنجانش‌شده در ($1)",
        "pageinfo-toolboxlink": "اطلاعات صفحه",
        "pageinfo-redirectsto": "تغییرمسیر به",
index 07b43d0..672d973 100644 (file)
        "prefixindex": "Toutes les pages commençant par…",
        "prefixindex-namespace": "Toutes les pages avec préfixe (espace de noms $1)",
        "prefixindex-submit": "Lister",
-       "prefixindex-strip": "Enlever le préfixe dans la liste",
+       "prefixindex-strip": "Masquer le préfixe dans les résultats",
        "shortpages": "Pages courtes",
        "longpages": "Pages longues",
        "deadendpages": "Pages en impasse",
index 4a36b53..1ff682d 100644 (file)
        "nosuchusershort": "\"$1\" hea nanvan konn vapurpi na.\nNanv boroitana chuk zali gai?",
        "nouserspecified": "Vapurpeachem nanv diunk-uch zai.",
        "login-userblocked": "Hea vapurpeak addaila. Sotrorombh korunk zaina.",
-       "wrongpassword": "Chukichem gupitutor ghatlam.\nUpkar korun portun proyotn kor.",
+       "wrongpassword": "Chukichem vaporpeachem nanv vo gupitutor ghatlam.\nUpkar korun portun proyotn kor.",
        "wrongpasswordempty": "Gupitutor ghalunk na.\nUpkar korun portun proyotn kor.",
        "passwordtoolong": "Gupitutor {{PLURAL:$1|1 vornn|$1 vornnam}} proros vhodlem asunk zaina.",
        "password-name-match": "Tujem gupitutor vapurpeachea nanva poros vegllem asunk zai.",
        "showpreview": "Zholok dakhoi",
        "showdiff": "Bodolpam dakhoi",
        "anoneditwarning": "<strong>Chotrai:</strong> Tuven sotrorombh korunk nai. Tu bodlopam korit zalear tuzo internet potto soglleank polleunk zatelem. Tu <strong>[$1 sotrorombh korit]</strong> vo <strong>[$2 kont rochit]</strong> zalear, tujeo bodlopam tuzo vagddiachem nanvak zoddteleo ani anik-ui faide asat.",
-       "missingcommenttext": "Upkar korun tumcheo xiro sokoil boroi.",
+       "missingcommenttext": "Upkar korun tumcheo xiro boroi.",
        "blockedtitle": "Vapurpeak addaila",
        "blockednoreason": "Kainch karonn diunk na",
        "loginreqtitle": "Sotrorombh gorjechem",
        "filehist-dimensions": "Akar",
        "filehist-comment": "vivek",
        "imagelinks": "Failicho vapor",
-       "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hea failik {{PLURAL:$1|zoddtta|zoddttat}}",
-       "nolinkstoimage": "Hea failik zoddpi panam nant",
+       "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hi fayl {{PLURAL:$1|vaporta|vaportat}}:",
+       "nolinkstoimage": "Hea faylik vaportat toslim panam nant",
        "sharedupload-desc-here": "Hi fail $1, hachi ani dusrea prokolpanim haka uzar korunk zata.\nHachem [$2 failichem vivron panan] asleli vivron khala dilea:",
        "upload-disallowed-here": "Tu hea faili voir borounk xokonai",
        "filedelete-otherreason": "Dusrem/aniki karon:",
        "watch": "Nodor dovor",
        "watchthispage": "Hea panar dixtt dovor",
        "unwatch": "Nodor kadd",
-       "watchlist-details": "Tujea sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}}, ulovpachim panam veglim mezonastanam.",
+       "watchlist-details": "Tujea Sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}} (te-bhair ulovpachim panam asat).",
        "wlheader-showupdated": "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
        "wlshowlast": "Xevottchim $1 voram $2 dis  dakhoi",
        "watchlist-options": "Sadurvollericheo poryay",
index 6216762..a121331 100644 (file)
        "prefixindex": "כל הדפים עם התחילית",
        "prefixindex-namespace": "כל הדפים עם התחילית (במרחב השם \"$1\")",
        "prefixindex-submit": "הצגה",
-       "prefixindex-strip": "×\94סתרת ×\94ת×\97×\99×\9c×\99ת ×\91רש×\99×\9e×\94",
+       "prefixindex-strip": "×\94סתרת ×\94ת×\97×\99×\9c×\99ת ×\91ת×\95צ×\90×\95ת",
        "shortpages": "דפים קצרים",
        "longpages": "דפים ארוכים",
        "deadendpages": "דפים ללא קישורים",
index 5184f3c..dc70102 100644 (file)
        "group-autoconfirmed": "Uzeri automatale konfirmita",
        "group-bot": "Roboti",
        "group-sysop": "Administreri",
+       "group-interface-admin": "Administreri dil interkonekto (interface)",
        "group-bureaucrat": "Burokrati",
        "group-suppress": "Efaceri",
        "group-all": "(omna)",
index 4268257..be08d90 100644 (file)
        "prefixindex": "Indice delle pagine per lettere iniziali",
        "prefixindex-namespace": "Tutte le pagine con il prefisso del namespace $1",
        "prefixindex-submit": "Mostra",
-       "prefixindex-strip": "Nascondi prefisso nell'elenco",
+       "prefixindex-strip": "Nascondi il prefisso nei risultati",
        "shortpages": "Pagine più corte",
        "longpages": "Pagine più lunghe",
        "deadendpages": "Pagine senza uscita",
index 826a37d..fbbe1db 100644 (file)
        "prefixindex": "접두어에 따른 문서 목록",
        "prefixindex-namespace": "접두어가 있는 모든 문서 ($1 이름공간)",
        "prefixindex-submit": "보이기",
-       "prefixindex-strip": "목록에서 접두어 생략",
+       "prefixindex-strip": "결과에서 접두어 숨기기",
        "shortpages": "내용이 적은 문서 목록",
        "longpages": "내용이 많은 문서 목록",
        "deadendpages": "막다른 문서 목록",
index 4f84304..f93a72a 100644 (file)
        "nospecialpagetext": "<strong>Paginam specialem invalidam petivisti.</strong>\n\nPro indice paginarum specialum validarum, vide [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erratum",
        "databaseerror": "Erratum in basi datorum",
-       "databaseerror-error": "Erraum: $1",
+       "databaseerror-error": "Erratum: $1",
        "readonly": "Basis datorum obstructa",
        "missingarticle-rev": "(ID numerus redactionis: $1)",
        "missingarticle-diff": "(Diss: $1, $2)",
        "pager-newer-n": "{{PLURAL:$1|recentiorem 1|recentiores $1}}",
        "pager-older-n": "{{PLURAL:$1|superiorem 1|superiores $1}}",
        "suppress": "Censura",
-       "apisandbox-examples": "Exempli",
+       "apisandbox-examples": "Exempla",
        "booksources": "Librorum fontes",
        "booksources-search-legend": "Fontes impressas quaerere",
        "booksources-search": "Quaerere",
index dd709c4..1676128 100644 (file)
        "prefixindex": "Сите страници (со претставка)",
        "prefixindex-namespace": "Сите страници со претставка (именски простор „$1“)",
        "prefixindex-submit": "Прикажи",
-       "prefixindex-strip": "Отстрани ја претставката во списокот",
+       "prefixindex-strip": "Отстрани ја претставката во исходот",
        "shortpages": "Кратки страници",
        "longpages": "Долги страници",
        "deadendpages": "Слепи страници",
index 3969a66..3da8f19 100644 (file)
        "autoblockedtext": "तुमचा आंतरजालीय अंकपत्ता आपोआप स्थगित केला आहे कारण तो इतर अशा सदस्याने वापरला, ज्याला $1ने प्रतिबंधित केले.\nआणि दिलेले कारण खालील प्रमाणे आहे\n::<em>$2</em>\nब्लॉकची सुरूवात: $8\nब्लॉकचा शेवट: $6\nकुणाला ब्लॉक करायचे आहे: $7\n\nतुम्ही $1शी संपर्क करू शकता किंवा इतर [[{{MediaWiki:Grouppage-sysop}}|प्रबंधकां पैकी]] एकाशी स्थगनाबद्दल चर्चा करू शकता.\n\n[[Special:Preferences|सदस्य पसंतीत]]त शाबीत विपत्र पत्ता नमूद असल्या शिवाय आणि तुम्हाला  तो वापरण्या पासून प्रतिबंधित केले असल्यास तुम्ही  \"{{int:emailuser}}\"  सुविधा  वापरू शकणार नाही.\nतुमचा सध्याचा अंकपत्ता $3 हा आहे, व तुमचा ब्लॉक क्रमांक #$5 हा आहे. \nतुमचा स्थगन क्र $5 आहे. कृपया या संदर्भातील चर्चेमध्ये वरील सर्व तपशिल उद्घृत करा.",
        "blockednoreason": "कारण दिलेले नाही",
        "whitelistedittext": "लेखांचे संपादन करण्यासाठी आधी $1 करा.",
-       "confirmedittext": "तुम्ही संपादने करण्यापूर्वी तुमचा विपत्र पत्ता प्रमाणित करणे आवश्यक आहे.Please set and validate तुमचा विपत्र पत्ता तुमच्या [[Special:Preferences|सदस्य पसंती]]तून लिहा व सिद्ध करा.",
+       "confirmedittext": "तुम्ही संपादने करण्यापूर्वी तुमचा विपत्र पत्ता प्रमाणित करणे आवश्यक आहे. तुमचा विपत्र पत्ता तुमच्या [[Special:Preferences|सदस्य पसंती]]तून लिहा व सिद्ध करा.",
        "nosuchsectiontitle": "असा विभाग नाही.",
        "nosuchsectiontext": "तुम्ही अस्तिवात नसलेला विभाग संपादन करण्याचा प्रयत्न केला आहे.हे पान आपण बघत असतांना तो हलविल्या किंवा वगळल्या गेला आहे.",
        "loginreqtitle": "सनोंद-प्रवेश आवश्यक आहे",
        "expand_templates_remove_nowiki": "निकालात <nowiki>खूणपतका दाखवू नका",
        "expand_templates_generate_xml": "XML चा पार्स (parse) वृक्ष दाखवा",
        "expand_templates_preview": "झलक",
-       "expand_templates_input_missing": "आपण काहीतरी आंतरदेय मजकूर पुरवावयास हवा.",
+       "expand_templates_input_missing": "à¤\86पण à¤\95ाहà¥\80तरà¥\80 à¤\86à¤\82तरदà¥\87य à¤µà¤¿à¤\95िमà¤\9cà¤\95à¥\82र à¤ªà¥\81रवावयास à¤¹à¤µà¤¾.",
        "pagelang-name": "पान",
        "pagelang-language": "भाषा",
        "pagelang-use-default": "अविचल भाषा वापरा",
        "log-action-filter-all": "सर्व",
        "log-action-filter-move-move": "उपरीलेखन (ओव्हररायटिंग) न-करता केलेली स्थानांतरणे",
        "log-action-filter-move-move_redir": "उपरीलेखनासह (ओव्हररायटिंग) असलेली स्थानांतरणे",
+       "log-action-filter-newusers-create": "अनामिक सदस्याद्वारे निर्मित",
+       "log-action-filter-newusers-create2": "नोंदणीकृत सदस्याद्वारे निर्मित",
+       "log-action-filter-newusers-autocreate": "स्वयंचलित निर्माण",
+       "log-action-filter-newusers-byemail": "विपत्राद्वारे पाठविलेल्या परवलीच्या शब्दाद्वारे निर्मित",
+       "log-action-filter-patrol-patrol": "मानवी गस्त",
+       "log-action-filter-patrol-autopatrol": "स्वयंचलित गस्त",
+       "log-action-filter-protect-protect": "संरक्षण",
+       "log-action-filter-protect-modify": "संरक्षण परिवर्तन",
+       "log-action-filter-protect-unprotect": "असुरक्षित",
+       "log-action-filter-protect-move_prot": "संरक्षण स्थानांतरीत केले",
        "log-action-filter-rights-rights": "मानवी बदल",
+       "log-action-filter-rights-autopromote": "स्वयंचलित बदल",
+       "log-action-filter-suppress-event": "नोंदी दडपणे",
+       "log-action-filter-suppress-revision": "आवृत्ती दडपणे",
+       "log-action-filter-suppress-delete": "पान दडपणे",
        "log-action-filter-suppress-block": "रोधामार्फत सदस्य दाबणे",
        "changecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) बदला",
+       "changecredentials-submit": "अधिकारपत्रे (क्रेडेंटियल्स) बदला",
        "removecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
+       "removecredentials-submit": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
        "edit-error-short": "त्रुटी: $1",
        "edit-error-long": "त्रुटी:$1",
        "passwordpolicies": "परवलीच्या शब्दांची नीती",
        "passwordpolicies-summary": "ही, या विकिवरील व्याख्यिकृत सदस्य गटांसाठी असलेली व सध्या प्रभावात असलेल्या परवलीच्या शब्दांच्या नीतींची यादी आहे.",
        "passwordpolicies-group": "गट",
        "passwordpolicies-policies": "नीती",
+       "passwordpolicies-policy-minimalpasswordlength": "परवलीचा शब्द हा किमान $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} जास्त लांबीचा हवा",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "सनोंद-प्रवेशास,परवलीचा शब्द हा किमान $1 {{PLURAL:$1|अक्षर}} लांबीचा असावयास हवा",
        "passwordpolicies-policy-passwordcannotmatchusername": "परवलीचा शब्द हा सदस्यनाव असू शकत नाही",
-       "passwordpolicies-policy-maximalpasswordlength": "परवलीचा शब्द हा $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} कमी लांबीचा हवा"
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "परवलीच्या शब्दाचे,विशिष्ट काळ्या यादीत टाकलेल्या परवलीच्या शब्दाशी अनुरूपन (मॅच) असू शकत नाही.",
+       "passwordpolicies-policy-maximalpasswordlength": "परवलीचा शब्द हा $1 {{PLURAL:$1|अक्षरापेक्षा|अक्षरांपेक्षा}} कमी लांबीचा हवा",
+       "passwordpolicies-policy-passwordcannotbepopular": "परवलीचा शब्द हा {{PLURAL:$1|the popular password|$1 प्रसिद्ध शब्दांच्या यादीतील असू शकत नाही}}"
 }
index 24fb0ae..f5f54da 100644 (file)
@@ -92,7 +92,8 @@
                        "Optilete",
                        "Goefie",
                        "AHmed Khaled",
-                       "Jeroen N"
+                       "Jeroen N",
+                       "Bdijkstra"
                ]
        },
        "tog-underline": "Verwijzingen onderstrepen:",
        "confirm-mcrundo-title": "Een wijziging ongedaan maken",
        "mcrundofailed": "Ongedaan maken mislukt",
        "mcrundo-missingparam": "Er ontbreken nodige parameters in het verzoek.",
+       "mcrundo-changed": "De pagina is gewijzigd sinds u de veranderingen hebt bekeken. Beoordeel alstublieft de nieuwe wijziging.",
        "mcrundo-parse-failed": "Kon de nieuwe versie niet verwerken: $1",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← vorige pagina",
index 679981d..bbfe052 100644 (file)
        "enhancedrc-history": "awaran",
        "recentchanges": "Sampot ran dinuma",
        "recentchanges-summary": "Tontonen so sankasampotan ran binalo ed ayan wiki diad panamegley to yan bolong.",
+       "recentchanges-feed-description": "Tontonen so sankasampotan ran binalo ed ayan wiki diad panamegley to yan feed.",
        "recentchanges-label-minor": "Melag yan dinuma",
        "recentchanges-submit": "Ipanengneng",
        "rcfilters-activefilters-hide": "Iyamot",
        "anoncontribs": "Saray entolong",
        "year": "Taon:",
        "sp-contributions-newbies-sub": "Para balo ran account",
+       "sp-contributions-blocklog": "log na aper",
        "sp-contributions-talk": "tongtongan",
        "sp-contributions-submit": "Anapen",
        "whatlinkshere": "Antoray akaturo dia",
        "ipbreason": "Katonongan",
        "ipbsubmit": "Isebel ed sayan manag-usar",
        "badipaddress": "Aga nayarin IP address",
+       "unblockip": "Ekalen so aper para ed manguusar",
        "ipusubmit": "Aga la isebel so ayan address",
+       "unblocked": "Inekal so aper para ed [[User:$1|$1]].",
        "autoblocklist-submit": "Anapen",
        "ipblocklist": "Listaan na saray sebel ran IP address san username",
        "blocklist-reason": "Katonongan",
        "ipblocklist-submit": "Anapen",
        "expiringblock": "nabalang no $1 $2",
        "blocklink": "aperen",
+       "unblocklink": "ekalen so aper",
        "contribslink": "saray entolong to",
+       "unblocklogentry": "nakal so aper na $1",
        "block-log-flags-noemail": "inaper so e-mail",
        "block-log-flags-nousertalk": "aga naduma so sarilin bolong para tongtongan",
        "move-page-legend": "Iyales so bolong",
index a17cfca..cbee32b 100644 (file)
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Password policy that enforces that passwords are not on a list of blacklisted passwords (often previously used during MediaWiki automated testing)",
        "passwordpolicies-policy-maximalpasswordlength": "Password policy that enforces a maximum number of characters a password must be. $1 - maximum number of characters that a password can be",
        "passwordpolicies-policy-passwordcannotbepopular": "Password policy that enforces that a password is not in a list of $1 number of \"popular\" passwords. $1 - number of popular passwords the password will be checked against",
-       "easydeflate-invaliddeflate": "Error message if the content passed to easydeflate was not deflated (compressed) properly"
+       "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"
 }
index 8b7585a..5fc5e1d 100644 (file)
        "prefixindex": "Tutte le pàggene cu 'u prefisse",
        "prefixindex-namespace": "Tutte le pàggene cu 'u prefisse ($1 namespace)",
        "prefixindex-submit": "Fà 'ndrucà",
-       "prefixindex-strip": "Strisce d'u prefisse jndr'à l'elenghe",
+       "prefixindex-strip": "Scunne 'u prefisse jndr'à le resultate",
        "shortpages": "Pàggene corte",
        "longpages": "Pàggene longhe",
        "deadendpages": "Pàggene senza collegamende",
index 4c86ecb..997b36e 100644 (file)
@@ -56,7 +56,7 @@
        "tog-prefershttps": "ၽွင်းၶဝ်ႈၸႂ်ႉတိုဝ်းၼၼ်ႉ ၸႂ်ႉတိုဝ်းၶွၼ်ႇၼႅၵ်ႉသျိၼ်ႇ ဢၼ်ႁူမ်ႇလူမ်ႈ",
        "underline-always": "ၵူႊယၢမ်း",
        "underline-never": "ဢမ်ႇႁဵတ်းသေပွၵ်ႈ",
-       "underline-default": "á\80\95á\80­á\80°á\80\84á\80ºá\81µá\82\85á\80\9dá\80ºá\82\88á\81¾á\81¢á\80\84á\80ºá\82\81á\81¢á\80\84á\80ºá\82\8aတၢင်းၼွၵ်ႈ ဢမ်ႇၼၼ် ပြၢဝ်းသိူဝ်ႇ",
+       "underline-default": "á\80\95á\80­á\80°á\80\84á\80ºá\81µá\82\85á\80\9dá\80ºá\82\88á\81¾á\81¢á\80\84á\80ºá\82\81á\81¢á\80\84á\80ºá\82\88တၢင်းၼွၵ်ႈ ဢမ်ႇၼၼ် ပြၢဝ်းသိူဝ်ႇ",
        "editfont-style": "ဢွင်ႈတီႈဢၼ်ထတ်းမႄး ဝႅပ်ႇယၢင်ႇၾွၼ်ႉ",
        "editfont-monospace": "ၾွၼ်ႉ မူဝ်ႇၼူဝ်သပဵတ်ႉ",
        "editfont-sansserif": "ၾွၼ်ႉ San-serif",
        "speciallogtitlelabel": "တီႈယိူင်း (ႁူဝ်ၶေႃႈ ဢမ်ႇၼၼ် {{ns:user}}: ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း တႃႇ ၽူႈၸႂ်ႉတိုဝ်း):",
        "log": "သၢႆမၢႆ",
        "logeventslist-submit": "ၼႄ",
+       "logeventslist-more-filters": "ၼႄပၼ်သဵၼ်ႈသၢႆမၢႆတၢင်ႇၸိူဝ်း",
        "all-logs-page": "သဵၼ်ႈမၢႆၵူၼ်းတင်းၼမ် တင်းမူတ်း",
        "alllogstext": "ႁူမ်ႈၵၼ်ၼႄဝႆႉပၼ် သဵၼ်ႈမၢႆတွင်း ၶွင် {{SITENAME}} ဢၼ်ၸၢင်ႈဢဝ်လႆႈၼၼ်ႉ။\nၸဝ်ႈၵဝ်ႇ ၸၢင်ႈ လိူၵ်ႈ ပိူင်ထၢၼ်ႈသဵၼ်ႈမၢႆတွင်း၊ ၽူႈၸႂ်ႉတိုဝ်း(ၼင်ႇတူဝ်လိၵ်ႈလဵၵ်ႉယႂ်ႇ)၊ ဢမ်ႇၼၼ် ၼႃႈလိၵ်ႈဢၼ်ၵပ်းၵၢႆႇ (ၼင်ႇတူဝ်လိၵ်ႈလဵၵ်ႉယႂ်ႇ) သေၵေႃႈ တူၺ်းလႆႈယူႇ။",
        "logempty": "ဢမ်ႇငမ်ႇၵၼ်တင်း တီႈၼႂ်းသဵၼ်ႈမၢႆ",
        "uctop": "(ယၢမ်းလဵဝ်)",
        "month": "တႄႇဢဝ်လိူၼ် (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
        "year": "တႄႇဢဝ်ပီ (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
+       "date": "ၸႄႇဢဝ်ဝၼ်းထီႉ (လႄႈ ၸဝ်ႉသေၼၼ်ႉ):",
        "sp-contributions-newbies": "ၼႄပၼ်လွင်ႈၶဝ်ႈႁူမ်ႈ ၶွင် ဢၶွင်ႉဢၼ်မႂ်ႇလၢႆလၢႆၵူၺ်းလႄႈ",
        "sp-contributions-newbies-sub": "တွၼ်ႈတႃႇဢၶွင်ႉ ဢၼ်မႂ်ႇ",
        "sp-contributions-blocklog": "မၢႆတမ်းၵၢၼ်​ႁေႉတတ်း",
index 0a788dc..8a5aab8 100644 (file)
        "externaldberror": "Дошло је до грешке при потврди идентитета базе података или вам није дозвољено да ажурирате свој спољни налог.",
        "login": "Пријава",
        "login-security": "Потврда вашег индентитета",
-       "nav-login-createaccount": "Ð\9fÑ\80иÑ\98ава / Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иÑ\98а",
+       "nav-login-createaccount": "Ð\9fÑ\80иÑ\98авиÑ\82е Ñ\81е / Ð¾Ñ\82воÑ\80иÑ\82е Ð½Ð°Ð»Ð¾Ð³",
        "logout": "Одјава",
        "userlogout": "Одјава",
        "notloggedin": "Нисте пријављени",
        "loginlanguagelabel": "Језик: $1",
        "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер изгледа да га је послао покварени прегледач или кеширани прокси.",
        "createacct-another-realname-tip": "Право име је опционално.\nАко одаберете да га наведете, биће коришћено за приписивање вашег рада.",
-       "pt-login": "Ð\9fÑ\80иÑ\98ава",
+       "pt-login": "Ð\9fÑ\80иÑ\98авиÑ\82е Ñ\81е",
        "pt-login-button": "Пријави ме",
        "pt-login-continue-button": "Настави пријављивање",
-       "pt-createaccount": "Ð\9eÑ\82ваÑ\80аÑ\9aе Ð½Ð°Ð»Ð¾Ð³Ð°",
+       "pt-createaccount": "Ð\9eÑ\82воÑ\80иÑ\82е Ð½Ð°Ð»Ð¾Ð³",
        "pt-userlogout": "Одјави ме",
        "php-mail-error-unknown": "Непозната грешка у функцији PHP mail().",
        "user-mail-no-addy": "Покушали сте да пошаљете имејл без имејл-адресе.",
        "namespace_association": "Повезани именски простор",
        "tooltip-namespace_association": "Означите ову кутијицу да бисте укључили и разговор или именски простор теме која је повезана са изабраним именским простором",
        "blanknamespace": "(главни)",
-       "contributions": "Доприноси {{GENDER:$1|корисника|кориснице}}",
+       "contributions": "{{GENDER:$1|Доприноси корисника|Доприноси кориснице|Кориснички доприноси}}",
        "contributions-title": "Доприноси {{GENDER:$1|корисника|кориснице}} $1",
        "mycontris": "Доприноси",
        "anoncontribs": "Доприноси",
        "tooltip-pt-userpage": "{{GENDER:|Ваша}} корисничка страница",
        "tooltip-pt-anonuserpage": "Корисничка страница за IP адресу с које уређујете",
        "tooltip-pt-mytalk": "{{GENDER:|Ваша}} страница за разговор",
-       "tooltip-pt-anontalk": "Дискусија о уређивањима са ове IP адресе",
+       "tooltip-pt-anontalk": "Дискусија о изменама са ове IP адресе",
        "tooltip-pt-preferences": "{{GENDER:|Ваша}} подешавања",
        "tooltip-pt-watchlist": "Списак страница које надгледате",
        "tooltip-pt-mycontris": "Списак {{GENDER:|ваших}} доприноса",
index 8da3909..7e23a0b 100644 (file)
        "prefixindex": "Усі сторінки, що починаються з",
        "prefixindex-namespace": "Усі сторінки з префіксом (простір назв $1)",
        "prefixindex-submit": "Показати",
-       "prefixindex-strip": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82и Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\83 Ñ\81пиÑ\81кÑ\83",
+       "prefixindex-strip": "Ð\9eпÑ\83Ñ\81Ñ\82иÑ\82и Ð¿Ñ\80еÑ\84Ñ\96кÑ\81 Ñ\83 Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82аÑ\85",
        "shortpages": "Короткі статті",
        "longpages": "Довгі статті",
        "deadendpages": "Сторінки без посилань",
index a5bc856..c20392f 100644 (file)
        "pageinfo-category-files": "فائلوں کی تعداد",
        "pageinfo-user-id": "صارف آئی ڈی",
        "pageinfo-file-hash": "ہیش قدر",
+       "pageinfo-view-protect-log": "اس صفحہ کے لیے نوشتہ محفوظ شدگی دیکھیے۔",
        "markaspatrolleddiff": "بطور مراجعت شدہ نشان زد کریں",
        "markaspatrolledtext": "اس صفحہ کو بطور مراجعت شدہ نشان زد کریں",
        "markaspatrolledtext-file": "فائل کے اس نسخے کو مراجعت شدہ نشان زد کریں",
index 2d5c8ad..6ebb34a 100644 (file)
        "summary-preview": "Pahiuna nga pagawas han dalikyat nga pulong:",
        "subject-preview": "Pahiuna nga pagawas hit himangrawan:",
        "blockedtitle": "Ginpugngan ini nga gumaramit",
-       "blockedtext": "'''An imo agnay-gumaramit o IP address in ginpugngan.'''\n\nAn pagpugong in ginhimo ni $1.\nAn rason nga ginhatag in ''$2''.\n\n* Pagtikang han pagpugong: $8\n* Paghuman han pagpugong: $6\n* Ginpupugngan: $7\n\nPuydi nimo bilngon hi $1 o iba liwat nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.\nDiri nimo magagamit an \"ig-email ini nga gumaramit\" nga feature antes may-ada balido nga email address nga nakabutang ha imo  [[Special:Preferences|mga preperensya han akawnt]] ngan waray ka pugngi paggamit hini.\nAn imo IP address yana in $3, ngan an imo pagpugong nga ID in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye ha bisan ano nga mga pakiana nga karuyag mo buhaton.",
+       "blockedtext": "'''An imo username o IP address in ginpugngan.'''\n\nAn pagpugong ginhimo ni $1.\nAn rason nga ginhatag kay tungod hin ''$2''.\n\n* Pagtikang han pagpugong: $8\n* Mahuhuman an pagpugong: $6\n* An pupugngan: $7\n\nPuydi nimo bilngon hi $1 o iba nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.\nDiri nimo magagamit an \"{{int:emailuser}}\" nga feature antes may-ada valid nga email address nga nakabutang ha imo  [[Special:Preferences|account preferences]] ngan waray ka pugngi paggamit hini.\nAn imo IP address yana in $3, ngan an imo block ID amo in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye kun mamamakyana ka.",
        "autoblockedtext": "An imo IP address in automatiko nga ginpugngan mahitungod nga ini in gingamit hin iba nga gumaramit, nga ginpugngan ni $1.\n\nAn rason nga ginhatag in ''$2''.\n\n* Pagtikang han pagpugong: $8\n* Paghuman han pagpugong: $6\n* Ginpupugngan: $7\n\nPuydi nimo bilngon hi $1 o iba liwat nga [[{{MediaWiki:Grouppage-sysop}}|magdudumara]] para makipaghimangraw hiunong hini nga pagpugong.\n\nGinpapasabot ka nga diri nimo magagamitan an \"ig-email ini nga gumaramit\" nga feature antes may-ada nimo balido nga email address nga nakarehistro ha imo  [[Special:Preferences|mga preperensya han gumaramit]] ngan waray ka pugngi hit paggamit hini.\n\nAn imo IP address yana in $3, ngan an imo pagpugong nga ID in #$5.  Alayon la paglakip han ngatanan nga aada ha igbaw nga mga detalye ha bisan ano nga mga pakiana nga karuyag mo buhaton.",
        "blockednoreason": "waray katadungan nga ginhatag",
        "whitelistedittext": "Kinahanglan mo mag-$1 para makaliwat han mga pakli.",
        "filehist-filesize": "Kadako han fayl",
        "filehist-comment": "Komento",
        "imagelinks": "Mga gamit hin paypay",
-       "linkstoimage": "An nasunod nga {{PLURAL:$1|pakli nasumpay|$1 mga pakli nasumpay}} hini nga paypay:",
-       "linkstoimage-more": "Labaw hin $1 {{PLURAL:$1|nga pakli násúmpay|nga mga pakli násúmpay}} ngadâ hini nga paypay là.\nAn nasunód nga taramdan nagpapakita han {{PLURAL:$1|syahan nga pakli nga násúmpay|syahan nga $1 nga pakli nga násúmpay}} ngadâ hini nga paypay là.\nIn [[Special:WhatLinksHere/$2|bug-os nga taramdan]] áadâ.$2",
-       "nolinkstoimage": "Waray mga pakli nga nasumpay hini nga fayl.",
+       "linkstoimage": "An masunod nga {{PLURAL:$1|ka pakli nagamit|$1 ka mga pakli nagamit}} hini nga file:",
+       "linkstoimage-more": "Labaw hin $1 {{PLURAL:$1|ka pakli nagamit|ka mga pakli nagamit}} hinin nga file.\nAn masunód nga taramdan nagpapakita han {{PLURAL:$1|syahan nga pakli|nauuna nga $1 ka mga pakli}} nga nagamit la hinin nga file.\nMayda inin [[Special:WhatLinksHere/$2|bug-os nga listahan]].",
+       "nolinkstoimage": "Waray pakli nga nagamit hinin nga file.",
        "linkstoimage-redirect": "$1 (redirecta an paypay) $2",
        "sharedupload": "Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.",
        "sharedupload-desc-there": "Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.\nAlayon pagkita han [$2 nga pakli hin pagpahayag mahitungod hini nga fayl] para hin dugang nga kasayuran.",
        "htmlform-reset": "Igbalik an mga pinamalyuan",
        "htmlform-selectorother-other": "iba",
        "logentry-delete-delete": "Hi $1 {{GENDER:$2|ginpara}} an pakli nga $3",
+       "logentry-delete-restore": "Hi $1 {{GENDER:$2|ginpabalik}} an pakli nga $3 ($4)",
        "logentry-delete-revision": "$1 {{GENDER:$2|ginbalyo-an}} an pagkakita hin {{PLURAL:$5|usa nga pagliwat|$5 nga mga pagliwat}} dida han pakli $3: $4",
        "revdelete-content-hid": "sulod nakatago",
        "revdelete-summary-hid": "An halipotay nga masisiring hiton pagliwat in nakatago",
index 2f74004..2145a3b 100644 (file)
        "prefixindex": "按詞頭查詢頁面",
        "prefixindex-namespace": "按詞頭查詢頁面 ($1 命名空間)",
        "prefixindex-submit": "顯示",
-       "prefixindex-strip": "於清單中省略詞頭",
+       "prefixindex-strip": "在結果隱藏字首",
        "shortpages": "過短的頁面",
        "longpages": "過長的頁面",
        "deadendpages": "無連結頁面",
index d6b4b79..771d19b 100644 (file)
@@ -65,6 +65,7 @@ class ResetUserEmail extends Maintenance {
                        // Kick whomever is currently controlling the account off
                        $user->setPassword( PasswordFactory::generateRandomPasswordString( 128 ) );
                }
+               $this->output( "Done!\n" );
        }
 }
 
index e90ce96..3d5bca2 100644 (file)
 div.mw-rcfilters-ui-highlights {
        body.mw-rcfilters-ui-initialized & {
                display: inline-block;
-               .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
        }
 
        &-color {
                &-none {
                        display: inline-block;
+                       .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
 
                        .mw-changeslist-watchedseen & {
                                .mw-rcfilters-ui-changesListWrapperWidget.mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
@@ -48,29 +48,28 @@ div.mw-rcfilters-ui-highlights {
 
                }
 
-       }
-
-       // Watchlist unseen highlighted fixes
-       // Seen (empty circle)
-       // There's no need to correct 'unseen' because that would be
-       // a filled colorful circle, which is the regular rendering
-       .mw-changeslist-watchedseen &-c1 {
-               .mw-rcfilters-circle-color( @highlight-c1, true, @highlight-c1, true );
-       }
+               // Watchlist unseen highlighted fixes
+               // Seen (empty circle)
+               // There's no need to correct 'unseen' because that would be
+               // a filled colorful circle, which is the regular rendering
+               .mw-changeslist-watchedseen &-c1 {
+                       .mw-rcfilters-circle-color( @highlight-c1, true, @highlight-c1, true );
+               }
 
-       .mw-changeslist-watchedseen &-c2 {
-               .mw-rcfilters-circle-color( @highlight-c2, true, @highlight-c2, true );
-       }
+               .mw-changeslist-watchedseen &-c2 {
+                       .mw-rcfilters-circle-color( @highlight-c2, true, @highlight-c2, true );
+               }
 
-       .mw-changeslist-watchedseen &-c3 {
-               .mw-rcfilters-circle-color( @highlight-c3, true, @highlight-c3, true );
-       }
+               .mw-changeslist-watchedseen &-c3 {
+                       .mw-rcfilters-circle-color( @highlight-c3, true, @highlight-c3, true );
+               }
 
-       .mw-changeslist-watchedseen &-c4 {
-               .mw-rcfilters-circle-color( @highlight-c4, true, @highlight-c4, true );
-       }
+               .mw-changeslist-watchedseen &-c4 {
+                       .mw-rcfilters-circle-color( @highlight-c4, true, @highlight-c4, true );
+               }
 
-       .mw-changeslist-watchedseen &-c5 {
-               .mw-rcfilters-circle-color( @highlight-c5, true, @highlight-c5, true );
+               .mw-changeslist-watchedseen &-c5 {
+                       .mw-rcfilters-circle-color( @highlight-c5, true, @highlight-c5, true );
+               }
        }
 }
index 324c900..94306ca 100644 (file)
                        width: 100%;
                }
        }
+}
 
-       &-highlights {
-               display: none;
-               padding: 0 @margin-circle 0 0;
-               text-align: right;
-               // The width is 5 circles times their diameter + individual margin
-               // and then plus the general margin
-               width: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * 5 )';
-               // And we want to shift the entire block to the left of the li
-               position: relative;
-               // Negative left margin of width + padding
-               margin-left: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * -5 - @{margin-circle} )';
-
-               .mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
-                       display: inline-block;
-               }
+.mw-rcfilters-ui-highlights {
+       display: none;
+       padding: 0 @margin-circle 0 0;
+       // The width is 5 circles times their diameter + individual margin
+       // and then plus the general margin
+       width: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * 5 )';
+       // And we want to shift the entire block to the left of the li
+       position: relative;
+       // Negative left margin of width + padding
+       margin-left: ~'calc( ( @{size-circle-result} + @{margin-circle-result} ) * -5 - @{margin-circle} )';
 
-               // This needs to be very specific, since these are
-               // position rules that should apply to all overrides
-               .mw-rcfilters-ui-changesListWrapperWidget .mw-rcfilters-ui-changesListWrapperWidget-highlights > div&-circle {
-                       vertical-align: middle;
-                       .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
-                       // This is to make the dots appear at the center of the
-                       // text itself; it's a horrendous hack and blame JamesF for it.
-                       margin-top: -2px;
-                       margin-right: @margin-circle-result;
-               }
+       .mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
+               display: inline-block;
+       }
+
+       // This needs to be very specific, since these are
+       // position rules that should apply to all overrides
+       .mw-rcfilters-ui-changesListWrapperWidget & > div {
+               vertical-align: middle;
+               .mw-rcfilters-circle( @size-circle-result, @size-circle-result, 0 );
+               // This is to make the dots appear at the center of the
+               // text itself; it's a horrendous hack and blame JamesF for it.
+               margin-top: -2px;
+               margin-right: @margin-circle-result;
+               float: right;
+       }
+
+       &-color {
+               &-none {
+                       .mw-rcfilters-circle-color( @highlight-none, true );
+                       display: inline-block;
 
-               &-color {
-                       &-none {
-                               .mw-rcfilters-circle-color( @highlight-none, true );
-                               display: inline-block;
-
-                               .mw-rcfilters-highlight-color-c1 &,
-                               .mw-rcfilters-highlight-color-c2 &,
-                               .mw-rcfilters-highlight-color-c3 &,
-                               .mw-rcfilters-highlight-color-c4 &,
-                               .mw-rcfilters-highlight-color-c5 & {
-                                       display: none;
-                               }
+                       .mw-rcfilters-highlight-color-c1 &,
+                       .mw-rcfilters-highlight-color-c2 &,
+                       .mw-rcfilters-highlight-color-c3 &,
+                       .mw-rcfilters-highlight-color-c4 &,
+                       .mw-rcfilters-highlight-color-c5 & {
+                               display: none;
                        }
-                       .result-circle( c1 );
-                       .result-circle( c2 );
-                       .result-circle( c3 );
-                       .result-circle( c4 );
-                       .result-circle( c5 );
                }
+               .result-circle( c1 );
+               .result-circle( c2 );
+               .result-circle( c3 );
+               .result-circle( c4 );
+               .result-circle( c5 );
        }
 }
 
index 7ce4d1e..fc317b7 100644 (file)
@@ -46,6 +46,25 @@ class ExtraParserTest extends MediaWikiTestCase {
                        $this->parser->parse( $longLine, $title, $options )->getText( [ 'unwrap' => true ] ) );
        }
 
+       /**
+        * @covers Parser::braceSubstitution
+        * @covers SpecialPageFactory::capturePath
+        */
+       public function testSpecialPageTransclusionRestoresGlobalState() {
+               $text = "{{Special:ApiHelp/help}}";
+               $title = Title::newFromText( 'testSpecialPageTransclusionRestoresGlobalState' );
+               $options = ParserOptions::newFromUser( new User() );
+
+               RequestContext::getMain()->setTitle( $title );
+               RequestContext::getMain()->getWikiPage()->CustomTestProp = true;
+
+               $parsed = $this->parser->parse( $text, $title, $options )->getText();
+               $this->assertContains( 'apihelp-header', $parsed );
+
+               // Verify that this property wasn't wiped out by the parse
+               $this->assertTrue( RequestContext::getMain()->getWikiPage()->CustomTestProp );
+       }
+
        /**
         * Test the parser entry points
         * @covers Parser::parse