Merge "Adding new subclass to HTMLForm for constructing a checkbox matrix"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 5 Mar 2013 20:09:21 +0000 (20:09 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 5 Mar 2013 20:09:21 +0000 (20:09 +0000)
205 files changed:
.gitignore
RELEASE-NOTES-1.21
docs/database.txt
docs/databases/ibm_db2.txt [deleted file]
includes/AutoLoader.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/HttpFunctions.old.php [deleted file]
includes/HttpFunctions.php
includes/ImagePage.php
includes/OutputPage.php
includes/Pager.php
includes/Revision.php
includes/Timestamp.php
includes/User.php
includes/WebRequest.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiComparePages.php
includes/api/ApiCreateAccount.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiImport.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiPageSet.php
includes/api/ApiParse.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryUsers.php
includes/api/ApiResult.php
includes/api/ApiRollback.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiTokens.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiWatch.php
includes/db/Database.php
includes/db/DatabaseIbm_db2.php [deleted file]
includes/db/LoadBalancer.php
includes/filebackend/FSFile.php
includes/filebackend/FileBackendStore.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filebackend/filejournal/FileJournal.php
includes/installer/Ibm_db2Installer.php [deleted file]
includes/installer/Ibm_db2Updater.php [deleted file]
includes/installer/Installer.i18n.php
includes/installer/Installer.php
includes/libs/CSSJanus.php
includes/logging/LogFormatter.php
includes/search/SearchIBM_DB2.php [deleted file]
includes/specials/SpecialNewpages.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialWatchlist.php
includes/templates/NoLocalSettings.php
includes/upload/UploadBase.php
includes/upload/UploadFromStash.php
languages/classes/LanguageLt.php [deleted file]
languages/classes/LanguageLv.php [deleted file]
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAst.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBho.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesCa.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesGd.php
languages/messages/MessagesGl.php
languages/messages/MessagesHe.php
languages/messages/MessagesHil.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesLa.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesMg.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMs.php
languages/messages/MessagesNb.php
languages/messages/MessagesNe.php
languages/messages/MessagesNn.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesSa.php
languages/messages/MessagesScn.php
languages/messages/MessagesSh.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSo.php
languages/messages/MessagesSv.php
languages/messages/MessagesTet.php
languages/messages/MessagesTh.php
languages/messages/MessagesTr.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVi.php
languages/messages/MessagesWar.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/createAndPromote.php
maintenance/ibm_db2/foreignkeys.sql [deleted file]
maintenance/ibm_db2/patch-categorylinks-better-collation.sql [deleted file]
maintenance/ibm_db2/patch-change_tag-indexes.sql [deleted file]
maintenance/ibm_db2/patch-change_tag.sql [deleted file]
maintenance/ibm_db2/patch-change_tag_summary.sql [deleted file]
maintenance/ibm_db2/patch-change_valid_tag.sql [deleted file]
maintenance/ibm_db2/patch-cl_collation-field.sql [deleted file]
maintenance/ibm_db2/patch-cl_sortkey_prefix-field.sql [deleted file]
maintenance/ibm_db2/patch-cl_type-field.sql [deleted file]
maintenance/ibm_db2/patch-external_user.sql [deleted file]
maintenance/ibm_db2/patch-ipb_allow_usertalk.sql [deleted file]
maintenance/ibm_db2/patch-iw_api-field.sql [deleted file]
maintenance/ibm_db2/patch-iw_api_and_wikiid.sql [deleted file]
maintenance/ibm_db2/patch-iw_wikiid-field.sql [deleted file]
maintenance/ibm_db2/patch-iwlinks.sql [deleted file]
maintenance/ibm_db2/patch-l10n_cache.sql [deleted file]
maintenance/ibm_db2/patch-log_search-rename-index.sql [deleted file]
maintenance/ibm_db2/patch-log_search.sql [deleted file]
maintenance/ibm_db2/patch-log_user_text.sql [deleted file]
maintenance/ibm_db2/patch-module_deps.sql [deleted file]
maintenance/ibm_db2/patch-msg_resource.sql [deleted file]
maintenance/ibm_db2/patch-msg_resource_links.sql [deleted file]
maintenance/ibm_db2/patch-rd_interwiki.sql [deleted file]
maintenance/ibm_db2/patch-ss_active_users.sql [deleted file]
maintenance/ibm_db2/patch-ul_value.sql [deleted file]
maintenance/ibm_db2/patch-uq61_msg_resource_links.sql [deleted file]
maintenance/ibm_db2/patch-uq81_msg_resource.sql [deleted file]
maintenance/ibm_db2/patch-uq96_module_deps.sql [deleted file]
maintenance/ibm_db2/patch-user_properties.sql [deleted file]
maintenance/ibm_db2/tables.sql [deleted file]
maintenance/mwdoc-filter.php
maintenance/syncFileBackend.php
resources/jquery/jquery.badge.css
resources/jquery/jquery.delayedBind.js
resources/jquery/jquery.qunit.completenessTest.js
resources/mediawiki.action/mediawiki.action.history.js
resources/mediawiki.action/mediawiki.action.view.postEdit.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.log.js
skins/Vector.php
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/parserTests.php
tests/phpunit/StructureTest.php
tests/phpunit/includes/TimestampTest.php
tests/phpunit/includes/api/ApiAccountCreationTest.php
tests/phpunit/includes/api/query/ApiQueryBasicTest.php
tests/phpunit/includes/api/query/ApiQueryContinue2Test.php [new file with mode: 0644]
tests/phpunit/includes/api/query/ApiQueryContinueTest.php [new file with mode: 0644]
tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php [new file with mode: 0644]
tests/phpunit/includes/api/query/ApiQueryTestBase.php [new file with mode: 0644]
tests/phpunit/includes/libs/CSSJanusTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/languages/LanguageLvTest.php
tests/phpunit/phpunit.php
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/testHelpers.inc

index 8dcba4e..ca87d93 100644 (file)
@@ -17,23 +17,23 @@ project.index
 sublime-*
 
 # MediaWiki install & usage
-cache
-docs/js
-images/[0-9a-f]
-images/archive
-images/deleted
-images/lockdir
-images/temp
-images/thumb
+/cache
+/docs/js
+/images/[0-9a-f]
+/images/archive
+/images/deleted
+/images/lockdir
+/images/temp
+/images/thumb
 ## Extension:EasyTimeline
-images/timeline
-images/tmp
-maintenance/.mweval_history
-maintenance/.mwsql_history
-maintenance/dev/data
-AdminSettings.php
-LocalSettings.php
-StartProfiler.php
+/images/timeline
+/images/tmp
+/maintenance/.mweval_history
+/maintenance/.mwsql_history
+/maintenance/dev/data
+/AdminSettings.php
+/LocalSettings.php
+/StartProfiler.php
 
 # Building & testing
 node_modules/
@@ -55,6 +55,6 @@ Thumbs.db
 .idea
 .metadata*
 .settings
-favicon.ico
-static*
-tags
+/favicon.ico
+/static*
+/tags
index 2353820..4f38f3a 100644 (file)
@@ -245,6 +245,12 @@ production.
   HTTP OPTIONS request.
 * (bug 44923) action=upload works correctly if the entire file is uploaded in
   the first chunk.
+* Added 'continue=' parameter to streamline client iteration over complex query results
+* (bug 44909) API parameters may now be marked as type "upload", which is now
+  used for action=upload's 'file' and 'chunk' parameters. This type will raise
+  an error during parameter validation if the parameter is given but not
+  recognized as an uploaded file.
+* (bug 44244) prop=info may now return the number of people watching each page.
 
 === API internal changes in 1.21 ===
 * For debugging only, a new global $wgDebugAPI removes many API restrictions when true.
@@ -259,6 +265,7 @@ production.
 * ApiQueryGeneratorBase::setGeneratorMode() now requires a pageset param.
 * $wgAPIGeneratorModules is now obsolete and will be ignored.
 * Added flags ApiResult::OVERRIDE and ADD_ON_TOP to setElement() and addValue()
+* Internal API calls will now include <warnings> in case of unused parameters
 
 === Languages updated in 1.21 ===
 
@@ -281,14 +288,15 @@ changes to languages because of Bugzilla reports.
   were using it, you have to either copy it to your extension, or install the
   Vector extension (and possibly disable its features using config settings if
   you don't want them).
+* Experimental IBM DB2 support was removed due to lack of interest and maintainership
 
 == Compatibility ==
 
 MediaWiki 1.21 requires PHP 5.3.2 or later.
 
 MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for IBM
-DB2 and Oracle.
+support for them is somewhat less mature. There is experimental support for
+Oracle.
 
 The supported versions are:
 
index c0a2412..65a597b 100644 (file)
@@ -180,7 +180,6 @@ MediaWiki does support the following other DBMSs to varying degrees.
 * PostgreSQL
 * SQLite
 * Oracle
-* IBM DB2
 * MSSQL
 
 More information can be found about each of these databases (known issues,
diff --git a/docs/databases/ibm_db2.txt b/docs/databases/ibm_db2.txt
deleted file mode 100644 (file)
index 3c3f381..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-== See also ==
-*[http://www.mediawiki.org/wiki/Manual:IBM_DB2 Installation instructions]
-*[http://ca.php.net/manual/en/function.db2-connect.php PHP Manual for DB2 functions]
\ No newline at end of file
index f4f4cb3..ed72b2f 100644 (file)
@@ -137,7 +137,6 @@ $wgAutoloadLocalClasses = array(
        'HTMLTextField' => 'includes/HTMLForm.php',
        'Http' => 'includes/HttpFunctions.php',
        'HttpError' => 'includes/Exception.php',
-       'HttpRequest' => 'includes/HttpFunctions.old.php',
        'ICacheHelper' => 'includes/CacheHelper.php',
        'IcuCollation' => 'includes/Collation.php',
        'IdentityCollation' => 'includes/Collation.php',
@@ -475,7 +474,6 @@ $wgAutoloadLocalClasses = array(
        'ChronologyProtector' => 'includes/db/LBFactory.php',
        'CloneDatabase' => 'includes/db/CloneDatabase.php',
        'DatabaseBase' => 'includes/db/Database.php',
-       'DatabaseIbm_db2' => 'includes/db/DatabaseIbm_db2.php',
        'DatabaseMssql' => 'includes/db/DatabaseMssql.php',
        'DatabaseMysql' => 'includes/db/DatabaseMysql.php',
        'DatabaseOracle' => 'includes/db/DatabaseOracle.php',
@@ -494,10 +492,6 @@ $wgAutoloadLocalClasses = array(
        'DBUnexpectedError' => 'includes/db/DatabaseError.php',
        'FakeResultWrapper' => 'includes/db/DatabaseUtility.php',
        'Field' => 'includes/db/DatabaseUtility.php',
-       'IBM_DB2Blob' => 'includes/db/DatabaseIbm_db2.php',
-       'IBM_DB2Field' => 'includes/db/DatabaseIbm_db2.php',
-       'IBM_DB2Helper' => 'includes/db/DatabaseIbm_db2.php',
-       'IBM_DB2Result' => 'includes/db/DatabaseIbm_db2.php',
        'LBFactory' => 'includes/db/LBFactory.php',
        'LBFactory_Fake' => 'includes/db/LBFactory.php',
        'LBFactory_Multi' => 'includes/db/LBFactory_Multi.php',
@@ -625,8 +619,6 @@ $wgAutoloadLocalClasses = array(
        'CliInstaller' => 'includes/installer/CliInstaller.php',
        'DatabaseInstaller' => 'includes/installer/DatabaseInstaller.php',
        'DatabaseUpdater' => 'includes/installer/DatabaseUpdater.php',
-       'Ibm_db2Installer' => 'includes/installer/Ibm_db2Installer.php',
-       'Ibm_db2Updater' => 'includes/installer/Ibm_db2Updater.php',
        'InstallDocFormatter' => 'includes/installer/InstallDocFormatter.php',
        'Installer' => 'includes/installer/Installer.php',
        'LocalSettingsGenerator' => 'includes/installer/LocalSettingsGenerator.php',
@@ -871,7 +863,6 @@ $wgAutoloadLocalClasses = array(
        'SearchEngine' => 'includes/search/SearchEngine.php',
        'SearchEngineDummy' => 'includes/search/SearchEngine.php',
        'SearchHighlighter' => 'includes/search/SearchEngine.php',
-       'SearchIBM_DB2' => 'includes/search/SearchIBM_DB2.php',
        'SearchMssql' => 'includes/search/SearchMssql.php',
        'SearchMySQL' => 'includes/search/SearchMySQL.php',
        'SearchNearMatchResultSet' => 'includes/search/SearchEngine.php',
index 7aad30c..73c097e 100644 (file)
@@ -5245,9 +5245,9 @@ $wgAllowCategorizedRecentChanges = false;
 $wgUseTagFilter = true;
 
 /**
- * If set to an integer, pages that are watched by more users than this
- * threshold will not require the unwatchedpages permission to view the
- * number of watchers.
+ * If set to an integer, pages that are watched by this many users or more
+ * will not require the unwatchedpages permission to view the number of
+ * watchers.
  *
  * @since 1.21
  */
index 46a3773..c4b0b47 100644 (file)
@@ -200,7 +200,6 @@ define( 'LIST_AND', 1 );
 define( 'LIST_SET', 2 );
 define( 'LIST_NAMES', 3);
 define( 'LIST_OR', 4);
-define( 'LIST_SET_PREPARED', 8);  // List of (?, ?, ?) for DatabaseIbm_db2
 /**@}*/
 
 /**
index 6aed2d3..d42edd7 100644 (file)
@@ -1167,7 +1167,7 @@ class EditPage {
         * since the post-edit state should only apply to the load right after the save.
         */
        protected function setPostEditCookie() {
-               global $wgCookiePrefix, $wgCookieDomain;;
+               global $wgCookiePrefix, $wgCookieDomain;
                $revisionId = $this->mArticle->getLatest();
                $postEditKey = self::POST_EDIT_COOKIE_KEY_PREFIX . $revisionId;
 
index a2b882f..79a4920 100644 (file)
@@ -329,6 +329,40 @@ function wfRandomString( $length = 32 ) {
        return substr( $str, 0, $length );
 }
 
+/**
+ * Given an array of non-normalised probabilities, this function will select
+ * an element and return the appropriate key
+ *
+ * @param $weights array
+ *
+ * @return bool|int|string
+ */
+function wfPickRandom( $weights ){
+       if ( !is_array( $weights ) || count( $weights ) == 0 ) {
+               return false;
+       }
+
+       $sum = array_sum( $weights );
+       if ( $sum == 0 ) {
+               # No loads on any of them
+               # In previous versions, this triggered an unweighted random selection,
+               # but this feature has been removed as of April 2006 to allow for strict
+               # separation of query groups.
+               return false;
+       }
+       $max = mt_getrandmax();
+       $rand = mt_rand( 0, $max ) / $max * $sum;
+
+       $sum = 0;
+       foreach ( $weights as $i => $w ) {
+               $sum += $w;
+               if ( $sum >= $rand ) {
+                       break;
+               }
+       }
+       return $i;
+}
+
 /**
  * We want some things to be included as literal characters in our title URLs
  * for prettiness, which urlencode encodes by default.  According to RFC 1738,
@@ -2434,11 +2468,6 @@ define( 'TS_ORACLE', 6 );
  */
 define( 'TS_POSTGRES', 7 );
 
-/**
- * DB2 format time
- */
-define( 'TS_DB2', 8 );
-
 /**
  * ISO 8601 basic format with no timezone: 19860209T200000Z.  This is used by ResourceLoader
  */
diff --git a/includes/HttpFunctions.old.php b/includes/HttpFunctions.old.php
deleted file mode 100644 (file)
index feb9b93..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Class alias kept for backward compatibility.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup HTTP
- */
-
-/**
- * HttpRequest was renamed to MWHttpRequest in order
- * to prevent conflicts with PHP's HTTP extension
- * which also defines an HttpRequest class.
- * http://www.php.net/manual/en/class.httprequest.php
- *
- * This is for backwards compatibility.
- * @since 1.17
- */
-class HttpRequest extends MWHttpRequest { }
index 6a348a6..892e0ed 100644 (file)
@@ -45,9 +45,7 @@ class Http {
         *                          Otherwise it will use $wgHTTPProxy (if set)
         *                          Otherwise it will use the environment variable "http_proxy" (if set)
         *    - noProxy             Don't use any proxy at all. Takes precedence over proxy value(s).
-        *    - sslVerifyHost       (curl only) Set to 2 to verify hostname against certificate
-        *                                  Setting to 1 (or true) will NOT verify the host name. It will
-        *                                  only check its existence. Setting to 0 (or false) disables entirely.
+        *    - sslVerifyHost       (curl only) Verify hostname against certificate
         *    - sslVerifyCert       (curl only) Verify SSL certificate
         *    - caInfo              (curl only) Provide CA information
         *    - maxRedirects        Maximum number of redirects to follow (defaults to 5)
@@ -187,15 +185,7 @@ class MWHttpRequest {
        protected $postData = null;
        protected $proxy = null;
        protected $noProxy = false;
-       /**
-        * Parameter passed to Curl that specifies whether
-        * to validate SSL certificates.
-        *
-        * Setting to 0 disables entirely. Setting to 1 checks
-        * the existence of a CN, but doesn't verify it. Setting
-        * to 2 (the default) actually verifies the host.
-        */
-       protected $sslVerifyHost = 2;
+       protected $sslVerifyHost = true;
        protected $sslVerifyCert = true;
        protected $caInfo = null;
        protected $method = "GET";
@@ -731,13 +721,8 @@ class CurlHttpRequest extends MWHttpRequest {
                }
                $this->curlOptions[CURLOPT_USERAGENT] = $this->reqHeaders['User-Agent'];
 
-               if ( isset( $this->sslVerifyHost ) ) {
-                       $this->curlOptions[CURLOPT_SSL_VERIFYHOST] = $this->sslVerifyHost;
-               }
-
-               if ( isset( $this->sslVerifyCert ) ) {
-                       $this->curlOptions[CURLOPT_SSL_VERIFYPEER] = $this->sslVerifyCert;
-               }
+               $this->curlOptions[CURLOPT_SSL_VERIFYHOST] = $this->sslVerifyHost ? 2 : 0;
+               $this->curlOptions[CURLOPT_SSL_VERIFYPEER] = $this->sslVerifyCert;
 
                if ( $this->caInfo ) {
                        $this->curlOptions[CURLOPT_CAINFO] = $this->caInfo;
index 0b814ec..998d607 100644 (file)
@@ -916,7 +916,7 @@ EOT
        public function getImageLimitsFromOption( $user, $optionName ) {
                global $wgImageLimits;
 
-               $option = intval( $user->getOption( $optionName ) );
+               $option = $user->getIntOption( $optionName );
                if ( !isset( $wgImageLimits[$option] ) ) {
                        $option = User::getDefaultOption( $optionName );
                }
index 8a95f04..6309ecb 100644 (file)
@@ -521,9 +521,11 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add only CSS of one or more modules recognized by the resource loader. Module
-        * styles added through this function will be loaded by the resource loader when
-        * the page loads.
+        * Add only CSS of one or more modules recognized by the resource loader.
+        *
+        * Module styles added through this function will be added using standard link CSS
+        * tags, rather than as a combined Javascript and CSS package. Thus, they will
+        * load when JavaScript is disabled (unless CSS also happens to be disabled).
         *
         * @param $modules Mixed: module name (string) or array of module names
         */
index 9e937e4..746b02e 100644 (file)
@@ -143,7 +143,7 @@ abstract class IndexPager extends ContextSource implements Pager {
                $this->mOffset = $this->mRequest->getText( 'offset' );
 
                # Use consistent behavior for the limit options
-               $this->mDefaultLimit = intval( $this->getUser()->getOption( 'rclimit' ) );
+               $this->mDefaultLimit = $this->getUser()->getIntOption( 'rclimit' );
                if ( !$this->mLimit ) {
                        // Don't override if a subclass calls $this->setLimit() in its constructor.
                        list( $this->mLimit, /* $offset */ ) = $this->mRequest->getLimitOffset();
index 4bdce87..df1e43e 100644 (file)
@@ -1587,7 +1587,7 @@ class Revision implements IDBAccessObject {
         */
        static function getTimestampFromId( $title, $id ) {
                $dbr = wfGetDB( DB_SLAVE );
-               // Casting fix for DB2
+               // Casting fix for databases that can't take '' for rev_id
                if ( $id == '' ) {
                        $id = 0;
                }
index 630ac53..3066ca9 100644 (file)
@@ -42,7 +42,6 @@ class MWTimestamp {
                TS_RFC2822 => 'D, d M Y H:i:s',
                TS_ORACLE => 'd-m-Y H:i:s.000000', // Was 'd-M-y h.i.s A' . ' +00:00' before r51500
                TS_POSTGRES => 'Y-m-d H:i:s',
-               TS_DB2 => 'Y-m-d H:i:s',
        );
 
        /**
@@ -118,8 +117,6 @@ class MWTimestamp {
                        # TS_POSTGRES
                } elseif ( preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.*\d* GMT$/', $ts, $da ) ) {
                        # TS_POSTGRES
-               } elseif (preg_match( '/^(\d{4})\-(\d\d)\-(\d\d) (\d\d):(\d\d):(\d\d)\.\d\d\d$/', $ts, $da ) ) {
-                       # TS_DB2
                } elseif ( preg_match( '/^[ \t\r\n]*([A-Z][a-z]{2},[ \t\r\n]*)?' . # Day of week
                                                                '\d\d?[ \t\r\n]*[A-Z][a-z]{2}[ \t\r\n]*\d{2}(?:\d{2})?' .  # dd Mon yyyy
                                                                '[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d[ \t\r\n]*:[ \t\r\n]*\d\d/S', $ts ) ) { # hh:mm:ss
index 03b1173..6a95a8f 100644 (file)
@@ -980,10 +980,13 @@ class User {
                }
 
                if ( $request->getSessionData( 'wsToken' ) ) {
-                       $passwordCorrect = $proposedUser->getToken( false ) === $request->getSessionData( 'wsToken' );
+                       $passwordCorrect = ( $proposedUser->getToken( false ) === $request->getSessionData( 'wsToken' ) );
                        $from = 'session';
                } elseif ( $request->getCookie( 'Token' ) ) {
-                       $passwordCorrect = $proposedUser->getToken( false ) === $request->getCookie( 'Token' );
+                       # Get the token from DB/cache and clean it up to remove garbage padding.
+                       # This deals with historical problems with bugs and the default column value.
+                       $token = rtrim( $proposedUser->getToken( false ) ); // correct token
+                       $passwordCorrect = ( strlen( $token ) && $token === $request->getCookie( 'Token' ) );
                        $from = 'cookie';
                } else {
                        # No session or persistent login cookie
@@ -2492,7 +2495,7 @@ class User {
         */
        public function getStubThreshold() {
                global $wgMaxArticleSize; # Maximum article size, in Kb
-               $threshold = intval( $this->getOption( 'stubthreshold' ) );
+               $threshold = $this->getIntOption( 'stubthreshold' );
                if ( $threshold > $wgMaxArticleSize * 1024 ) {
                        # If they have set an impossible value, disable the preference
                        # so we can use the parser cache again.
index 50da049..2195fbb 100644 (file)
@@ -741,7 +741,7 @@ class WebRequest {
                        $limit = 0;
                }
                if( ( $limit == 0 ) && ( $optionname != '' ) ) {
-                       $limit = (int)$wgUser->getOption( $optionname );
+                       $limit = $wgUser->getIntOption( $optionname );
                }
                if( $limit <= 0 ) {
                        $limit = $deflimit;
index aff7a2e..9e48e3a 100644 (file)
@@ -468,6 +468,9 @@ abstract class ApiBase extends ContextSource {
                                                                        $desc .= $paramPrefix . $intRangeStr;
                                                                }
                                                                break;
+                                                       case 'upload':
+                                                               $desc .= $paramPrefix . "Must be posted as a file upload using multipart/form-data";
+                                                               break;
                                                }
                                        }
 
@@ -756,7 +759,7 @@ abstract class ApiBase extends ContextSource {
                $pageObj = null;
                if ( isset( $params['title'] ) ) {
                        $titleObj = Title::newFromText( $params['title'] );
-                       if ( !$titleObj ) {
+                       if ( !$titleObj || $titleObj->isExternal() ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                        }
                        if ( !$titleObj->canExist() ) {
@@ -842,7 +845,7 @@ abstract class ApiBase extends ContextSource {
                                                        ? 'watchdefault' : 'watchcreations';
                                }
                                # Watch the article based on the user preference
-                               return (bool)$this->getUser()->getOption( $userOption );
+                               return $this->getUser()->getBoolOption( $userOption );
 
                        case 'nochange':
                                return $userWatching;
@@ -917,6 +920,29 @@ abstract class ApiBase extends ContextSource {
                        }
 
                        $value = $this->getMain()->getCheck( $encParamName );
+               } elseif ( $type == 'upload' ) {
+                       if ( isset( $default ) ) {
+                               // Having a default value is not allowed
+                               ApiBase::dieDebug( __METHOD__, "File upload param $encParamName's default is set to '$default'. File upload parameters may not have a default." );
+                       }
+                       if ( $multi ) {
+                               ApiBase::dieDebug( __METHOD__, "Multi-values not supported for $encParamName" );
+                       }
+                       $value = $this->getMain()->getUpload( $encParamName );
+                       if ( !$value->exists() ) {
+                               // This will get the value without trying to normalize it
+                               // (because trying to normalize a large binary file
+                               // accidentally uploaded as a field fails spectacularly)
+                               $value = $this->getMain()->getRequest()->unsetVal( $encParamName );
+                               if ( $value !== null ) {
+                                       $this->dieUsage(
+                                               "File upload param $encParamName is not a file upload; " .
+                                               "be sure to use multipart/form-data for your POST and include " .
+                                               "a filename in the Content-Disposition header.",
+                                               "badupload_{$encParamName}"
+                                       );
+                               }
+                       }
                } else {
                        $value = $this->getMain()->getVal( $encParamName, $default );
 
@@ -1013,6 +1039,8 @@ abstract class ApiBase extends ContextSource {
                                                        $value = $value[0];
                                                }
                                                break;
+                                       case 'upload': // nothing to do
+                                               break;
                                        default:
                                                ApiBase::dieDebug( __METHOD__, "Param $encParamName's type is unknown - $type" );
                                }
@@ -1213,7 +1241,7 @@ abstract class ApiBase extends ContextSource {
                'nocreatetext' => array( 'code' => 'cantcreate-anon', 'info' => "Anonymous users can't create new pages" ),
                'movenologintext' => array( 'code' => 'cantmove-anon', 'info' => "Anonymous users can't move pages" ),
                'movenotallowed' => array( 'code' => 'cantmove', 'info' => "You don't have permission to move pages" ),
-               'confirmedittext' => array( 'code' => 'confirmemail', 'info' => "You must confirm your e-mail address before you can edit" ),
+               'confirmedittext' => array( 'code' => 'confirmemail', 'info' => "You must confirm your email address before you can edit" ),
                'blockedtext' => array( 'code' => 'blocked', 'info' => "You have been blocked from editing" ),
                'autoblockedtext' => array( 'code' => 'autoblocked', 'info' => "Your IP address has been blocked automatically, because it was used by a blocked user" ),
 
@@ -1243,13 +1271,13 @@ abstract class ApiBase extends ContextSource {
                'ipb_already_blocked' => array( 'code' => 'alreadyblocked', 'info' => "The user you tried to block was already blocked" ),
                'ipb_blocked_as_range' => array( 'code' => 'blockedasrange', 'info' => "IP address \"\$1\" was blocked as part of range \"\$2\". You can't unblock the IP invidually, but you can unblock the range as a whole." ),
                'ipb_cant_unblock' => array( 'code' => 'cantunblock', 'info' => "The block you specified was not found. It may have been unblocked already" ),
-               'mailnologin' => array( 'code' => 'cantsend', 'info' => "You are not logged in, you do not have a confirmed e-mail address, or you are not allowed to send e-mail to other users, so you cannot send e-mail" ),
+               'mailnologin' => array( 'code' => 'cantsend', 'info' => "You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email" ),
                'ipbblocked' => array( 'code' => 'ipbblocked', 'info' => 'You cannot block or unblock users while you are yourself blocked' ),
                'ipbnounblockself' => array( 'code' => 'ipbnounblockself', 'info' => 'You are not allowed to unblock yourself' ),
                'usermaildisabled' => array( 'code' => 'usermaildisabled', 'info' => "User email has been disabled" ),
-               'blockedemailuser' => array( 'code' => 'blockedfrommail', 'info' => "You have been blocked from sending e-mail" ),
+               'blockedemailuser' => array( 'code' => 'blockedfrommail', 'info' => "You have been blocked from sending email" ),
                'notarget' => array( 'code' => 'notarget', 'info' => "You have not specified a valid target for this action" ),
-               'noemail' => array( 'code' => 'noemail', 'info' => "The user has not specified a valid e-mail address, or has chosen not to receive e-mail from other users" ),
+               'noemail' => array( 'code' => 'noemail', 'info' => "The user has not specified a valid email address, or has chosen not to receive email from other users" ),
                'rcpatroldisabled' => array( 'code' => 'patroldisabled', 'info' => "Patrolling is disabled on this wiki" ),
                'markedaspatrollederror-noautopatrol' => array( 'code' => 'noautopatrol', 'info' => "You don't have permission to patrol your own changes" ),
                'delete-toobig' => array( 'code' => 'bigdelete', 'info' => "You can't delete this page because it has more than \$1 revisions" ),
@@ -1278,7 +1306,7 @@ abstract class ApiBase extends ContextSource {
                'missingtitle-createonly' => array( 'code' => 'missingtitle-createonly', 'info' => "Missing titles can only be protected with 'create'" ),
                'cantblock' => array( 'code' => 'cantblock', 'info' => "You don't have permission to block users" ),
                'canthide' => array( 'code' => 'canthide', 'info' => "You don't have permission to hide user names from the block log" ),
-               'cantblock-email' => array( 'code' => 'cantblock-email', 'info' => "You don't have permission to block users from sending e-mail through the wiki" ),
+               'cantblock-email' => array( 'code' => 'cantblock-email', 'info' => "You don't have permission to block users from sending email through the wiki" ),
                'unblock-notarget' => array( 'code' => 'notarget', 'info' => "Either the id or the user parameter must be set" ),
                'unblock-idanduser' => array( 'code' => 'idanduser', 'info' => "The id and user parameters can't be used together" ),
                'cantunblock' => array( 'code' => 'permissiondenied', 'info' => "You don't have permission to unblock users" ),
@@ -1391,6 +1419,19 @@ abstract class ApiBase extends ContextSource {
                }
        }
 
+       /**
+        * Die with the $prefix.'badcontinue' error. This call is common enough to make it into the base method.
+        * @param $condition boolean will only die if this value is true
+        * @since 1.21
+        */
+       protected function dieContinueUsageIf( $condition ) {
+               if ( $condition ) {
+                       $this->dieUsage(
+                               'Invalid continue param. You should pass the original value returned by the previous query',
+                               'badcontinue' );
+               }
+       }
+
        /**
         * Return the error message related to a certain array
         * @param $error array Element of a getUserPermissionsErrors()-style array
@@ -1526,6 +1567,13 @@ abstract class ApiBase extends ContextSource {
                                        $ret[] = array( 'missingparam', $paramName );
                                }
                        }
+                       if ( array_key_exists( 'continue', $params ) ) {
+                               $ret[] = array(
+                                       array(
+                                               'code' => 'badcontinue',
+                                               'info' => 'Invalid continue param. You should pass the original value returned by the previous query'
+                                       ) );
+                       }
                }
 
                if ( $this->mustBePosted() ) {
index 2e4155a..b479310 100644 (file)
@@ -183,7 +183,7 @@ class ApiBlock extends ApiBase {
                        'anononly' => 'Block anonymous users only (i.e. disable anonymous edits for this IP)',
                        'nocreate' => 'Prevent account creation',
                        'autoblock' => 'Automatically block the last used IP address, and any subsequent IP addresses they try to login from',
-                       'noemail' => 'Prevent user from sending e-mail through the wiki. (Requires the "blockemail" right.)',
+                       'noemail' => 'Prevent user from sending email through the wiki. (Requires the "blockemail" right.)',
                        'hidename' => 'Hide the username from the block log. (Requires the "hideuser" right.)',
                        'allowusertalk' => 'Allow the user to edit their own talk page (depends on $wgBlockAllowsUTEdit)',
                        'reblock' => 'If the user is already blocked, overwrite the existing block',
index 6b894c1..79ffcb0 100644 (file)
@@ -85,7 +85,7 @@ class ApiComparePages extends ApiBase {
                        return $revision;
                } elseif( $titleText ) {
                        $title = Title::newFromText( $titleText );
-                       if( !$title ) {
+                       if( !$title || $title->isExternal() ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $titleText ) );
                        }
                        return $title->getLatestRevID();
index b6c6210..7a36ce8 100644 (file)
@@ -193,9 +193,9 @@ class ApiCreateAccount extends ApiBase {
                        'password' => "Password (ignored if {$p}mailpassword is set)",
                        'domain' => 'Domain for external authentication (optional)',
                        'token' => 'Account creation token obtained in first request',
-                       'email' => 'E-mail address of user (optional)',
+                       'email' => 'Email address of user (optional)',
                        'realname' => 'Real name of user (optional)',
-                       'mailpassword' => 'If set to any value, a random password will be e-mailed to the user',
+                       'mailpassword' => 'If set to any value, a random password will be emailed to the user',
                        'reason' => 'Optional reason for creating the account to be put in the logs',
                        'language' => 'Language code to set as default for the user (optional, defaults to content language)'
                );
index b642c6d..1b9df68 100644 (file)
@@ -46,10 +46,6 @@ class ApiEditPage extends ApiBase {
 
                $pageObj = $this->getTitleOrPageId( $params );
                $titleObj = $pageObj->getTitle();
-               if ( $titleObj->isExternal() ) {
-                       $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
-               }
-
                $apiResult = $this->getResult();
 
                if ( $params['redirect'] ) {
index 5a5c572..cd0d0cb 100644 (file)
@@ -154,6 +154,6 @@ class ApiEmailUser extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:E-mail';
+               return 'https://www.mediawiki.org/wiki/API:Email';
        }
 }
index 826171b..f5898fb 100644 (file)
@@ -42,7 +42,7 @@ class ApiExpandTemplates extends ApiBase {
 
                // Create title for parser
                $title_obj = Title::newFromText( $params['title'] );
-               if ( !$title_obj ) {
+               if ( !$title_obj || $title_obj->isExternal() ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
 
index 408805e..1f0a5fa 100644 (file)
@@ -105,7 +105,9 @@ class ApiImport extends ApiBase {
                                ApiBase::PARAM_REQUIRED => true
                        ),
                        'summary' => null,
-                       'xml' => null,
+                       'xml' => array(
+                               ApiBase::PARAM_TYPE => 'upload',
+                       ),
                        'interwikisource' => array(
                                ApiBase::PARAM_TYPE => $wgImportSources
                        ),
index 1dabbbf..7053ef3 100644 (file)
@@ -840,10 +840,9 @@ class ApiMain extends ApiBase {
                wfRunHooks( 'APIAfterExecute', array( &$module ) );
                $module->profileOut();
 
-               if ( !$this->mInternalMode ) {
-                       // Report unused params
-                       $this->reportUnusedParams();
+               $this->reportUnusedParams();
 
+               if ( !$this->mInternalMode ) {
                        //append Debug information
                        MWDebug::appendDebugInfoToApiResult( $this->getContext(), $this->getResult() );
 
@@ -919,6 +918,18 @@ class ApiMain extends ApiBase {
                return $this->getRequest()->getCheck( $name );
        }
 
+       /**
+        * Get a request upload, and register the fact that it was used, for logging.
+        *
+        * @since 1.21
+        * @param $name string Parameter name
+        * @return WebRequestUpload
+        */
+       public function getUpload( $name ) {
+               $this->mParamsUsed[$name] = true;
+               return $this->getRequest()->getUpload( $name );
+       }
+
        /**
         * Report unused parameters, so the client gets a hint in case it gave us parameters we don't know,
         * for example in case of spelling mistakes or a missing 'g' prefix for generators.
@@ -927,13 +938,17 @@ class ApiMain extends ApiBase {
                $paramsUsed = $this->getParamsUsed();
                $allParams = $this->getRequest()->getValueNames();
 
-               // Printer has not yet executed; don't warn that its parameters are unused
-               $printerParams = array_map(
-                       array( $this->mPrinter, 'encodeParamName' ),
-                       array_keys( $this->mPrinter->getFinalParams() ?: array() )
-               );
+               if ( !$this->mInternalMode ) {
+                       // Printer has not yet executed; don't warn that its parameters are unused
+                       $printerParams = array_map(
+                               array( $this->mPrinter, 'encodeParamName' ),
+                               array_keys( $this->mPrinter->getFinalParams() ?: array() )
+                       );
+                       $unusedParams = array_diff( $allParams, $paramsUsed, $printerParams );
+               } else {
+                       $unusedParams = array_diff( $allParams, $paramsUsed );
+               }
 
-               $unusedParams = array_diff( $allParams, $paramsUsed, $printerParams );
                if( count( $unusedParams ) ) {
                        $s = count( $unusedParams ) > 1 ? 's' : '';
                        $this->setWarning( "Unrecognized parameter$s: '" . implode( $unusedParams, "', '" ) . "'" );
index 3f54fee..ba1d6c9 100644 (file)
@@ -38,7 +38,7 @@ class ApiMove extends ApiBase {
 
                if ( isset( $params['from'] ) ) {
                        $fromTitle = Title::newFromText( $params['from'] );
-                       if ( !$fromTitle ) {
+                       if ( !$fromTitle || $fromTitle->isExternal() ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $params['from'] ) );
                        }
                } elseif ( isset( $params['fromid'] ) ) {
@@ -54,7 +54,7 @@ class ApiMove extends ApiBase {
                $fromTalk = $fromTitle->getTalkPage();
 
                $toTitle = Title::newFromText( $params['to'] );
-               if ( !$toTitle ) {
+               if ( !$toTitle || $toTitle->isExternal() ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['to'] ) );
                }
                $toTalk = $toTitle->getTalkPage();
index 954e5a1..1bb7e47 100644 (file)
@@ -46,8 +46,11 @@ class ApiPageSet extends ApiBase {
         */
        const DISABLE_GENERATORS = 1;
 
-       private $mDbSource, $mParams;
-       private $mResolveRedirects, $mConvertTitles, $mAllowGenerator;
+       private $mDbSource;
+       private $mParams;
+       private $mResolveRedirects;
+       private $mConvertTitles;
+       private $mAllowGenerator;
 
        private $mAllPages = array(); // [ns][dbkey] => page_id or negative when missing
        private $mTitles = array();
@@ -86,10 +89,26 @@ class ApiPageSet extends ApiBase {
                $this->profileOut();
        }
 
+       /**
+        * In case execute() is not called, call this method to mark all relevant parameters as used
+        * This prevents unused parameters from being reported as warnings
+        */
+       public function executeDryRun() {
+               $this->executeInternal( true );
+       }
+
        /**
         * Populate the PageSet from the request parameters.
         */
        public function execute() {
+               $this->executeInternal( false );
+       }
+
+       /**
+        * Populate the PageSet from the request parameters.
+        * @param bool $isDryRun If true, instantiates generator, but only to mark relevant parameters as used
+        */
+       private function executeInternal( $isDryRun ) {
                $this->profileIn();
 
                $generatorName = $this->mAllowGenerator ? $this->mParams['generator'] : null;
@@ -114,15 +133,27 @@ class ApiPageSet extends ApiBase {
                        $tmpPageSet = new ApiPageSet( $dbSource, ApiPageSet::DISABLE_GENERATORS );
                        $generator->setGeneratorMode( $tmpPageSet );
                        $this->mCacheMode = $generator->getCacheMode( $generator->extractRequestParams() );
-                       $generator->requestExtraData( $tmpPageSet );
-                       $tmpPageSet->execute();
+
+                       if ( !$isDryRun ) {
+                               $generator->requestExtraData( $tmpPageSet );
+                       }
+                       $tmpPageSet->executeInternal( $isDryRun );
 
                        // populate this pageset with the generator output
                        $this->profileOut();
                        $generator->profileIn();
-                       $generator->executeGenerator( $this );
-                       wfRunHooks( 'APIQueryGeneratorAfterExecute', array( &$generator, &$this ) );
-                       $this->resolvePendingRedirects();
+
+                       if ( !$isDryRun ) {
+                               $generator->executeGenerator( $this );
+                               wfRunHooks( 'APIQueryGeneratorAfterExecute', array( &$generator, &$this ) );
+                               $this->resolvePendingRedirects();
+                       } else {
+                               // Prevent warnings from being reported on these parameters
+                               $main = $this->getMain();
+                               foreach ( $generator->extractRequestParams() as $paramName => $param ) {
+                                       $main->getVal( $generator->encodeParamName( $paramName ) );
+                               }
+                       }
                        $generator->profileOut();
                        $this->profileIn();
 
@@ -148,25 +179,28 @@ class ApiPageSet extends ApiBase {
                                }
                                $dataSource = 'revids';
                        }
-                       // Populate page information with the original user input
-                       switch( $dataSource ) {
-                               case 'titles':
-                                       $this->initFromTitles( $this->mParams['titles'] );
-                                       break;
-                               case 'pageids':
-                                       $this->initFromPageIds( $this->mParams['pageids'] );
-                                       break;
-                               case 'revids':
-                                       if ( $this->mResolveRedirects ) {
-                                               $this->setWarning( 'Redirect resolution cannot be used together with the revids= parameter. ' .
-                                                       'Any redirects the revids= point to have not been resolved.' );
-                                       }
-                                       $this->mResolveRedirects = false;
-                                       $this->initFromRevIDs( $this->mParams['revids'] );
-                                       break;
-                               default:
-                                       // Do nothing - some queries do not need any of the data sources.
-                                       break;
+
+                       if ( !$isDryRun ) {
+                               // Populate page information with the original user input
+                               switch( $dataSource ) {
+                                       case 'titles':
+                                               $this->initFromTitles( $this->mParams['titles'] );
+                                               break;
+                                       case 'pageids':
+                                               $this->initFromPageIds( $this->mParams['pageids'] );
+                                               break;
+                                       case 'revids':
+                                               if ( $this->mResolveRedirects ) {
+                                                       $this->setWarning( 'Redirect resolution cannot be used together with the revids= parameter. ' .
+                                                               'Any redirects the revids= point to have not been resolved.' );
+                                               }
+                                               $this->mResolveRedirects = false;
+                                               $this->initFromRevIDs( $this->mParams['revids'] );
+                                               break;
+                                       default:
+                                               // Do nothing - some queries do not need any of the data sources.
+                                               break;
+                               }
                        }
                }
                $this->profileOut();
@@ -841,7 +875,7 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Given an array of title strings, convert them into Title objects.
-        * Alternativelly, an array of Title objects may be given.
+        * Alternatively, an array of Title objects may be given.
         * This method validates access rights for the title,
         * and appends normalization values to the output.
         *
index b81e5c7..ec8bfee 100644 (file)
@@ -161,7 +161,7 @@ class ApiParse extends ApiBase {
                        }
                } else { // Not $oldid, $pageid, $page. Hence based on $text
                        $titleObj = Title::newFromText( $title );
-                       if ( !$titleObj ) {
+                       if ( !$titleObj || $titleObj->isExternal() ) {
                                $this->dieUsageMsg( array( 'invalidtitle', $title ) );
                        }
                        if ( !$titleObj->canExist() ) {
index 118355c..832284f 100644 (file)
@@ -109,10 +109,11 @@ class ApiQuery extends ApiBase {
         */
        private $mPageSet;
 
-       private $params;
-       private $iwUrl;
+       private $mParams;
        private $mNamedDB = array();
        private $mModuleMgr;
+       private $mGeneratorContinue;
+       private $mUseLegacyContinue;
 
        /**
         * @param $main ApiMain
@@ -233,37 +234,37 @@ class ApiQuery extends ApiBase {
         * #5 Execute all requested modules
         */
        public function execute() {
-               $this->params = $this->extractRequestParams();
-               $this->iwUrl = $this->params['iwurl'];
+               $this->mParams = $this->extractRequestParams();
 
-               // Instantiate requested modules
-               $modules = array();
-               $this->instantiateModules( $modules, 'prop' );
-               $this->instantiateModules( $modules, 'list' );
-               $this->instantiateModules( $modules, 'meta' );
-
-               // Query modules may optimize data requests through the $this->getPageSet()
-               // object by adding extra fields from the page table.
-               // This function will gather all the extra request fields from the modules.
-               foreach ( $modules as $module ) {
-                       if ( !$this->getRequest()->wasPosted() && $module->mustBePosted() ) {
-                               $this->dieUsageMsgOrDebug( array( 'mustbeposted', $module->getModuleName() ) );
-                       }
+               // $pagesetParams is a array of parameter names used by the pageset generator
+               //   or null if pageset has already finished and is no longer needed
+               // $completeModules is a set of complete modules with the name as key
+               $this->initContinue( $pagesetParams, $completeModules );
 
-                       $module->requestExtraData( $this->mPageSet );
+               // Instantiate requested modules
+               $allModules = array();
+               $this->instantiateModules( $allModules, 'prop' );
+               $propModules = $allModules; // Keep a copy
+               $this->instantiateModules( $allModules, 'list' );
+               $this->instantiateModules( $allModules, 'meta' );
+
+               // Filter modules based on continue parameter
+               $modules = $this->initModules( $allModules, $completeModules, $pagesetParams !== null );
+
+               // Execute pageset if in legacy mode or if pageset is not done
+               if ( $completeModules === null || $pagesetParams !== null ) {
+                       // Populate page/revision information
+                       $this->mPageSet->execute();
+                       // Record page information (title, namespace, if exists, etc)
+                       $this->outputGeneralPageInfo();
+               } else {
+                       $this->mPageSet->executeDryRun();
                }
 
-               // Populate page/revision information
-               $this->mPageSet->execute();
                $cacheMode = $this->mPageSet->getCacheMode();
 
-               // Record page information (title, namespace, if exists, etc)
-               $this->outputGeneralPageInfo();
-
-               // Execute all requested modules.
-               /**
-                * @var $module ApiQueryBase
-                */
+               // Execute all unfinished modules
+               /** @var $module ApiQueryBase */
                foreach ( $modules as $module ) {
                        $params = $module->extractRequestParams();
                        $cacheMode = $this->mergeCacheMode(
@@ -276,6 +277,136 @@ class ApiQuery extends ApiBase {
 
                // Set the cache mode
                $this->getMain()->setCacheMode( $cacheMode );
+
+               if ( $completeModules === null ) {
+                       return; // Legacy continue, we are done
+               }
+
+               // Reformat query-continue result section
+               $result = $this->getResult();
+               $qc = $result->getData();
+               if ( isset( $qc['query-continue'] ) ) {
+                       $qc = $qc['query-continue'];
+                       $result->unsetValue( null, 'query-continue' );
+               } elseif ( $this->mGeneratorContinue !== null ) {
+                       $qc = array();
+               } else {
+                       // no more "continue"s, we are done!
+                       return;
+               }
+
+               // we are done with all the modules that do not have result in query-continue
+               $completeModules = array_merge( $completeModules, array_diff_key( $modules, $qc ) );
+               if ( $pagesetParams !== null ) {
+                       // The pageset is still in use, check if all props have finished
+                       $incompleteProps = array_intersect_key( $propModules, $qc );
+                       if ( count( $incompleteProps ) > 0 ) {
+                               // Properties are not done, continue with the same pageset state - copy current parameters
+                               $main = $this->getMain();
+                               $contValues = array();
+                               foreach ( $pagesetParams as $param ) {
+                                       // The param name is already prefix-encoded
+                                       $contValues[$param] = $main->getVal( $param );
+                               }
+                       } elseif ( $this->mGeneratorContinue !== null ) {
+                               // Move to the next set of pages produced by pageset, properties need to be restarted
+                               $contValues = $this->mGeneratorContinue;
+                               $pagesetParams = array_keys( $contValues );
+                               $completeModules = array_diff_key( $completeModules, $propModules );
+                       } else {
+                               // Done with the pageset, finish up with the the lists and meta modules
+                               $pagesetParams = null;
+                       }
+               }
+
+               $continue = '||' . implode( '|', array_keys( $completeModules ) );
+               if ( $pagesetParams !== null ) {
+                       // list of all pageset parameters to use in the next request
+                       $continue = implode( '|', $pagesetParams ) . $continue;
+               } else {
+                       // we are done with the pageset
+                       $contValues = array();
+                       $continue = '-' . $continue;
+               }
+               $contValues['continue'] = $continue;
+               foreach ( $qc as $qcModule ) {
+                       foreach ( $qcModule as $qcKey => $qcValue ) {
+                               $contValues[$qcKey] = $qcValue;
+                       }
+               }
+               $this->getResult()->addValue( null, 'continue', $contValues );
+       }
+
+       /**
+        * Parse 'continue' parameter into the list of complete modules and a list of generator parameters
+        * @param array|null $pagesetParams returns list of generator params or null if pageset is done
+        * @param array|null $completeModules returns list of finished modules (as keys), or null if legacy
+        */
+       private function initContinue( &$pagesetParams, &$completeModules ) {
+               $pagesetParams = array();
+               $continue = $this->mParams['continue'];
+               if ( $continue !== null ) {
+                       $this->mUseLegacyContinue = false;
+                       if ( $continue !== '' ) {
+                               // Format: ' pagesetParam1 | pagesetParam2 || module1 | module2 | module3 | ...
+                               // If pageset is done, use '-'
+                               $continue = explode( '||', $continue );
+                               $this->dieContinueUsageIf( count( $continue ) !== 2 );
+                               if ( $continue[0] === '-' ) {
+                                       $pagesetParams = null; // No need to execute pageset
+                               } elseif ( $continue[0] !== '' ) {
+                                       // list of pageset params that might need to be repeated
+                                       $pagesetParams = explode( '|', $continue[0] );
+                               }
+                               $continue = $continue[1];
+                       }
+                       if ( $continue !== '' ) {
+                               $completeModules = array_flip( explode( '|', $continue ) );
+                       } else {
+                               $completeModules = array();
+                       }
+               } else {
+                       $this->mUseLegacyContinue = true;
+                       $completeModules = null;
+               }
+       }
+
+       /**
+        * Validate sub-modules, filter out completed ones, and do requestExtraData()
+        * @param array $allModules An dict of name=>instance of all modules requested by the client
+        * @param array|null $completeModules list of finished modules, or null if legacy continue
+        * @param bool $usePageset True if pageset will be executed
+        * @return array of modules to be processed during this execution
+        */
+       private function initModules( $allModules, $completeModules, $usePageset ) {
+               $modules = $allModules;
+               $tmp = $completeModules;
+               $wasPosted = $this->getRequest()->wasPosted();
+               $main = $this->getMain();
+
+               /** @var $module ApiQueryBase */
+               foreach ( $allModules as $moduleName => $module ) {
+                       if ( !$wasPosted && $module->mustBePosted() ) {
+                               $this->dieUsageMsgOrDebug( array( 'mustbeposted', $moduleName ) );
+                       }
+                       if ( $completeModules !== null && array_key_exists( $moduleName, $completeModules ) ) {
+                               // If this module is done, mark all its params as used
+                               $module->extractRequestParams();
+                               // Make sure this module is not used during execution
+                               unset( $modules[$moduleName] );
+                               unset( $tmp[$moduleName] );
+                       } elseif ( $completeModules === null || $usePageset ) {
+                               // Query modules may optimize data requests through the $this->getPageSet()
+                               // object by adding extra fields from the page table.
+                               // This function will gather all the extra request fields from the modules.
+                               $module->requestExtraData( $this->mPageSet );
+                       } else {
+                               // Error - this prop module must have finished before generator is done
+                               $this->dieContinueUsageIf( $this->mModuleMgr->getModuleGroup( $moduleName ) === 'prop' );
+                       }
+               }
+               $this->dieContinueUsageIf( $completeModules !== null && count( $tmp ) !== 0 );
+               return $modules;
        }
 
        /**
@@ -306,9 +437,16 @@ class ApiQuery extends ApiBase {
         * @param $param string Parameter name to read modules from
         */
        private function instantiateModules( &$modules, $param ) {
-               if ( isset( $this->params[$param] ) ) {
-                       foreach ( $this->params[$param] as $moduleName ) {
-                               $modules[] = $this->mModuleMgr->getModule( $moduleName );
+               if ( isset( $this->mParams[$param] ) ) {
+                       foreach ( $this->mParams[$param] as $moduleName ) {
+                               $instance = $this->mModuleMgr->getModule( $moduleName, $param );
+                               if ( $instance === null ) {
+                                       ApiBase::dieDebug( __METHOD__, 'Error instantiating module' );
+                               }
+                               // Ignore duplicates. TODO 2.0: die()?
+                               if ( !array_key_exists( $moduleName, $modules ) ) {
+                                       $modules[$moduleName] = $instance;
+                               }
                        }
                }
        }
@@ -334,7 +472,7 @@ class ApiQuery extends ApiBase {
                if ( $values ) {
                        $result->addValue( 'query', 'converted', $values );
                }
-               $values = $pageSet->getInterwikiTitlesAsResult( $result, $this->iwUrl );
+               $values = $pageSet->getInterwikiTitlesAsResult( $result, $this->mParams['iwurl'] );
                if ( $values ) {
                        $result->addValue( 'query', 'interwiki', $values );
                }
@@ -392,7 +530,7 @@ class ApiQuery extends ApiBase {
                }
 
                if ( count( $pages ) ) {
-                       if ( $this->params['indexpageids'] ) {
+                       if ( $this->mParams['indexpageids'] ) {
                                $pageIDs = array_keys( $pages );
                                // json treats all map keys as strings - converting to match
                                $pageIDs = array_map( 'strval', $pageIDs );
@@ -403,11 +541,32 @@ class ApiQuery extends ApiBase {
                        $result->setIndexedTagName( $pages, 'page' );
                        $result->addValue( 'query', 'pages', $pages );
                }
-               if ( $this->params['export'] ) {
+               if ( $this->mParams['export'] ) {
                        $this->doExport( $pageSet, $result );
                }
        }
 
+       /**
+        * This method is called by the generator base when generator in the smart-continue
+        * mode tries to set 'query-continue' value. ApiQuery stores those values separately
+        * until the post-processing when it is known if the generation should continue or repeat.
+        * @param ApiQueryGeneratorBase $module generator module
+        * @param string $paramName
+        * @param mixed $paramValue
+        * @return bool true if processed, false if this is a legacy continue
+        */
+       public function setGeneratorContinue( $module, $paramName, $paramValue ) {
+               if ( $this->mUseLegacyContinue ) {
+                       return false;
+               }
+               $paramName = $module->encodeParamName( $paramName );
+               if ( $this->mGeneratorContinue === null ) {
+                       $this->mGeneratorContinue = array();
+               }
+               $this->mGeneratorContinue[$paramName] = $paramValue;
+               return true;
+       }
+
        /**
         * @param $pageSet ApiPageSet Pages to be exported
         * @param $result ApiResult Result to output to
@@ -440,7 +599,7 @@ class ApiQuery extends ApiBase {
                // It's not continuable, so it would cause more
                // problems than it'd solve
                $result->disableSizeCheck();
-               if ( $this->params['exportnowrap'] ) {
+               if ( $this->mParams['exportnowrap'] ) {
                        $result->reset();
                        // Raw formatter will handle this
                        $result->addValue( null, 'text', $exportxml );
@@ -471,6 +630,7 @@ class ApiQuery extends ApiBase {
                        'export' => false,
                        'exportnowrap' => false,
                        'iwurl' => false,
+                       'continue' => null,
                );
                if ( $flags ) {
                        $result += $this->getPageSet()->getFinalParams( $flags );
@@ -543,6 +703,10 @@ class ApiQuery extends ApiBase {
                        'export' => 'Export the current revisions of all given or generated pages',
                        'exportnowrap' => 'Return the export XML without wrapping it in an XML result (same format as Special:Export). Can only be used with export',
                        'iwurl' => 'Whether to get the full URL if the title is an interwiki link',
+                       'continue' => array(
+                               'When present, formats query-continue as key-value pairs that should simply be merged into the original request.',
+                               'This parameter must be set to an empty string in the initial query.',
+                               'This parameter is recommended for all new development, and will be made default in the next API version.' ),
                );
        }
 
@@ -563,8 +727,8 @@ class ApiQuery extends ApiBase {
 
        public function getExamples() {
                return array(
-                       'api.php?action=query&prop=revisions&meta=siteinfo&titles=Main%20Page&rvprop=user|comment',
-                       'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions',
+                       'api.php?action=query&prop=revisions&meta=siteinfo&titles=Main%20Page&rvprop=user|comment&continue=',
+                       'api.php?action=query&generator=allpages&gapprefix=API/&prop=revisions&continue=',
                );
        }
 
index 6b6b1a3..b0ecca8 100644 (file)
@@ -48,7 +48,7 @@ class ApiQueryAllMessages extends ApiQueryBase {
                if ( $params['enableparser'] ) {
                        if ( !is_null( $params['title'] ) ) {
                                $title = Title::newFromText( $params['title'] );
-                               if ( !$title ) {
+                               if ( !$title || $title->isExternal() ) {
                                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                                }
                        } else {
index 20751e1..1423c73 100644 (file)
@@ -374,19 +374,6 @@ abstract class ApiQueryBase extends ApiBase {
                $result->enableSizeCheck();
        }
 
-       /**
-        * Die with the $prefix.'badcontinue' error. This call is common enough to make it into the base method.
-        * @param $condition boolean will only die if this value is true
-        * @since 1.21
-        */
-       protected function dieContinueUsageIf( $condition ) {
-               if ( $condition ) {
-                       $this->dieUsage(
-                               'Invalid continue param. You should pass the original value returned by the previous query',
-                               'badcontinue' );
-               }
-       }
-
        /**
         * Get the Query database connection (read-only)
         * @return DatabaseBase
@@ -566,15 +553,6 @@ abstract class ApiQueryBase extends ApiBase {
                        array( 'invalidtitle', 'title' ),
                        array( 'invalidtitle', 'key' ),
                ) );
-               $params = $this->getFinalParams();
-               if ( array_key_exists( 'continue', $params ) ) {
-                       $errors = array_merge( $errors, array(
-                               array(
-                                       'code' => 'badcontinue',
-                                       'info' => 'Invalid continue param. You should pass the original value returned by the previous query'
-                               ),
-                       ) );
-               }
                return $errors;
        }
 }
@@ -625,6 +603,21 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
                }
        }
 
+       /**
+        * Overrides base in case of generator & smart continue to
+        * notify ApiQueryMain instead of adding them to the result right away.
+        * @param $paramName string Parameter name
+        * @param $paramValue string Parameter value
+        */
+       protected function setContinueEnumParameter( $paramName, $paramValue ) {
+               // If this is a generator and query->setGeneratorContinue() returns false, treat as before
+               if ( $this->mGeneratorPageSet === null
+                       || !$this->getQuery()->setGeneratorContinue( $this, $paramName, $paramValue )
+               ) {
+                       parent::setContinueEnumParameter( $paramName, $paramValue );
+               }
+       }
+
        /**
         * Execute this module as a generator
         * @param $resultPageSet ApiPageSet: All output should be appended to
index 7797205..a888d99 100644 (file)
@@ -33,7 +33,8 @@ class ApiQueryInfo extends ApiQueryBase {
 
        private $fld_protection = false, $fld_talkid = false,
                $fld_subjectid = false, $fld_url = false,
-               $fld_readable = false, $fld_watched = false, $fld_notificationtimestamp = false,
+               $fld_readable = false, $fld_watched = false, $fld_watchers = false,
+               $fld_notificationtimestamp = false,
                $fld_preload = false, $fld_displaytitle = false;
 
        private $params, $titles, $missing, $everything, $pageCounter;
@@ -41,7 +42,8 @@ class ApiQueryInfo extends ApiQueryBase {
        private $pageRestrictions, $pageIsRedir, $pageIsNew, $pageTouched,
                $pageLatest, $pageLength;
 
-       private $protections, $watched, $notificationtimestamps, $talkids, $subjectids, $displaytitles;
+       private $protections, $watched, $watchers, $notificationtimestamps, $talkids, $subjectids, $displaytitles;
+       private $showZeroWatchers = false;
 
        private $tokenFunctions;
 
@@ -248,6 +250,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $prop = array_flip( $this->params['prop'] );
                        $this->fld_protection = isset( $prop['protection'] );
                        $this->fld_watched = isset( $prop['watched'] );
+                       $this->fld_watchers = isset( $prop['watchers'] );
                        $this->fld_notificationtimestamp = isset( $prop['notificationtimestamp'] );
                        $this->fld_talkid = isset( $prop['talkid'] );
                        $this->fld_subjectid = isset( $prop['subjectid'] );
@@ -305,6 +308,10 @@ class ApiQueryInfo extends ApiQueryBase {
                        $this->getWatchedInfo();
                }
 
+               if ( $this->fld_watchers ) {
+                       $this->getWatcherInfo();
+               }
+
                // Run the talkid/subjectid query if requested
                if ( $this->fld_talkid || $this->fld_subjectid ) {
                        $this->getTSIDs();
@@ -384,6 +391,14 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['watched'] = '';
                }
 
+               if ( $this->fld_watchers ) {
+                       if ( isset( $this->watchers[$ns][$dbkey] ) ) {
+                               $pageInfo['watchers'] = $this->watchers[$ns][$dbkey];
+                       } elseif ( $this->showZeroWatchers ) {
+                               $pageInfo['watchers'] = 0;
+                       }
+               }
+
                if ( $this->fld_notificationtimestamp ) {
                        $pageInfo['notificationtimestamp'] = '';
                        if ( isset( $this->notificationtimestamps[$ns][$dbkey] ) ) {
@@ -675,6 +690,46 @@ class ApiQueryInfo extends ApiQueryBase {
                }
        }
 
+       /**
+        * Get the count of watchers and put it in $this->watchers
+        */
+       private function getWatcherInfo() {
+               global $wgUnwatchedPageThreshold;
+
+               if ( count( $this->everything ) == 0 ) {
+                       return;
+               }
+
+               $user = $this->getUser();
+               $canUnwatchedpages = $user->isAllowed( 'unwatchedpages' );
+               if ( !$canUnwatchedpages && !is_int( $wgUnwatchedPageThreshold ) ) {
+                       return;
+               }
+
+               $this->watchers = array();
+               $this->showZeroWatchers = $canUnwatchedpages;
+               $db = $this->getDB();
+
+               $lb = new LinkBatch( $this->everything );
+
+               $this->resetQueryParams();
+               $this->addTables( array( 'watchlist' ) );
+               $this->addFields( array( 'wl_title', 'wl_namespace', 'count' => 'COUNT(*)' ) );
+               $this->addWhere( array(
+                       $lb->constructSet( 'wl', $db )
+               ) );
+               $this->addOption( 'GROUP BY', array( 'wl_namespace', 'wl_title' ) );
+               if ( !$canUnwatchedpages ) {
+                       $this->addOption( 'HAVING', "COUNT(*) >= $wgUnwatchedPageThreshold" );
+               }
+
+               $res = $this->select( __METHOD__ );
+
+               foreach ( $res as $row ) {
+                       $this->watchers[$row->wl_namespace][$row->wl_title] = (int)$row->count;
+               }
+       }
+
        public function getCacheMode( $params ) {
                $publicProps = array(
                        'protection',
@@ -706,6 +761,7 @@ class ApiQueryInfo extends ApiQueryBase {
                                        'protection',
                                        'talkid',
                                        'watched', # private
+                                       'watchers', # private
                                        'notificationtimestamp', # private
                                        'subjectid',
                                        'url',
@@ -731,6 +787,7 @@ class ApiQueryInfo extends ApiQueryBase {
                                ' protection            - List the protection level of each page',
                                ' talkid                - The page ID of the talk page for each non-talk page',
                                ' watched               - List the watched status of each page',
+                               ' watchers              - The number of watchers, if allowed',
                                ' notificationtimestamp - The watchlist notification timestamp of each page',
                                ' subjectid             - The page ID of the parent page for each talk page',
                                ' url                   - Gives a full URL to the page, and also an edit URL',
@@ -764,6 +821,12 @@ class ApiQueryInfo extends ApiQueryBase {
                        'watched' => array(
                                'watched' => 'boolean'
                        ),
+                       'watchers' => array(
+                               'watchers' => array(
+                                       ApiBase::PROP_TYPE => 'integer',
+                                       ApiBase::PROP_NULLABLE => true
+                               )
+                       ),
                        'notificationtimestamp' => array(
                                'notificationtimestamp' => array(
                                        ApiBase::PROP_TYPE => 'timestamp',
index 6acca67..24849bd 100644 (file)
@@ -149,6 +149,26 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                $this->addTables( 'recentchanges' );
                $index = array( 'recentchanges' => 'rc_timestamp' ); // May change
                $this->addTimestampWhereRange( 'rc_timestamp', $params['dir'], $params['start'], $params['end'] );
+
+               if ( !is_null( $params['continue'] ) ) {
+                       $cont = explode( '|', $params['continue'] );
+                       if ( count( $cont ) != 2 ) {
+                               $this->dieUsage( 'Invalid continue param. You should pass the ' .
+                                                               'original value returned by the previous query', '_badcontinue' );
+                       }
+
+                       $timestamp = $this->getDB()->addQuotes( wfTimestamp( TS_MW, $cont[0] ) );
+                       $id = intval( $cont[1] );
+                       $op = $params['dir'] == 'descending' ? '<' : '>';
+
+                       $this->addWhere(
+                               "rc_timestamp $op $timestamp OR " .
+                               "(rc_timestamp = $timestamp AND " .
+                               "rc_id <= $id)"
+                       );
+               }
+
+
                $this->addWhereFld( 'rc_namespace', $params['namespace'] );
                $this->addWhereFld( 'rc_deleted', 0 );
 
@@ -229,8 +249,9 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                $this->dieUsage( 'You need the patrol right to request the patrolled flag', 'permissiondenied' );
                        }
 
+                       $this->addFields( 'rc_id' );
                        /* Add fields to our query if they are specified as a needed parameter. */
-                       $this->addFieldsIf( array( 'rc_id', 'rc_this_oldid', 'rc_last_oldid' ), $this->fld_ids );
+                       $this->addFieldsIf( array( 'rc_this_oldid', 'rc_last_oldid' ), $this->fld_ids );
                        $this->addFieldsIf( 'rc_comment', $this->fld_comment || $this->fld_parsedcomment );
                        $this->addFieldsIf( 'rc_user', $this->fld_user );
                        $this->addFieldsIf( 'rc_user_text', $this->fld_user || $this->fld_userid );
@@ -281,7 +302,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                foreach ( $res as $row ) {
                        if ( ++ $count > $params['limit'] ) {
                                // We've reached the one extra which shows that there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
+                               $this->setContinueEnumParameter( 'continue', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id );
                                break;
                        }
 
@@ -295,7 +316,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                }
                                $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
                                if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'start', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) );
+                                       $this->setContinueEnumParameter( 'continue', wfTimestamp( TS_ISO_8601, $row->rc_timestamp ) . '|' . $row->rc_id );
                                        break;
                                }
                        } else {
@@ -584,6 +605,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                                )
                        ),
                        'toponly' => false,
+                       'continue' => null,
                );
        }
 
@@ -621,6 +643,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        'limit' => 'How many total changes to return',
                        'tag' => 'Only list changes tagged with this tag',
                        'toponly' => 'Only list changes which are the latest revision',
+                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
index 50ea587..dff924f 100644 (file)
@@ -310,7 +310,7 @@ class ApiQueryUsers extends ApiQueryBase {
                                '  rights         - Lists all the rights the user(s) has',
                                '  editcount      - Adds the user\'s edit count',
                                '  registration   - Adds the user\'s registration timestamp',
-                               '  emailable      - Tags if the user can and wants to receive e-mail through [[Special:Emailuser]]',
+                               '  emailable      - Tags if the user can and wants to receive email through [[Special:Emailuser]]',
                                '  gender         - Tags the gender of the user. Returns "male", "female", or "unknown"',
                        ),
                        'users' => 'A list of users to obtain the same information for',
index 7ecfa8e..790f2d8 100644 (file)
@@ -295,7 +295,7 @@ class ApiResult extends ApiBase {
 
                $addOnTop = $flags & ApiResult::ADD_ON_TOP;
                if ( $path !== null ) {
-                       foreach ( (array) $path as $p ) {
+                       foreach ( (array)$path as $p ) {
                                if ( !isset( $data[$p] ) ) {
                                        if ( $addOnTop ) {
                                                $data = array( $p => array() ) + $data;
@@ -340,12 +340,12 @@ class ApiResult extends ApiBase {
         * Unset a value previously added to the result set.
         * Fails silently if the value isn't found.
         * For parameters, see addValue()
-        * @param $path array
+        * @param $path array|null
         * @param $name string
         */
        public function unsetValue( $path, $name ) {
                $data = &$this->mData;
-               if ( !is_null( $path ) ) {
+               if ( $path !== null ) {
                        foreach ( (array)$path as $p ) {
                                if ( !isset( $data[$p] ) ) {
                                        return;
index 6e55a5e..b9873f4 100644 (file)
@@ -181,7 +181,7 @@ class ApiRollback extends ApiBase {
 
                $this->mTitleObj = Title::newFromText( $params['title'] );
 
-               if ( !$this->mTitleObj ) {
+               if ( !$this->mTitleObj || $this->mTitleObj->isExternal() ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
                if ( !$this->mTitleObj->exists() ) {
index 3f5ebfe..8ef1a97 100644 (file)
@@ -259,7 +259,7 @@ class ApiSetNotificationTimestamp extends ApiBase {
        public function getDescription() {
                return array( 'Update the notification timestamp for watched pages.',
                        'This affects the highlighting of changed pages in the watchlist and history,',
-                       'and the sending of email when the "E-mail me when a page on my watchlist is',
+                       'and the sending of email when the "Email me when a page on my watchlist is',
                        'changed" preference is enabled.'
                );
        }
index 518bfce..7080f54 100644 (file)
  * @file
  */
 
-
 /**
  * @ingroup API
  */
 class ApiTokens extends ApiBase {
 
        public function execute() {
-               wfProfileIn( __METHOD__ );
                $params = $this->extractRequestParams();
                $res = array();
 
                $types = $this->getTokenTypes();
                foreach ( $params['type'] as $type ) {
-                       $type = strtolower( $type );
-
                        $val = call_user_func( $types[$type], null, null );
 
                        if ( $val === false ) {
@@ -49,7 +45,6 @@ class ApiTokens extends ApiBase {
                }
 
                $this->getResult()->addValue( null, $this->getModuleName(), $res );
-               wfProfileOut( __METHOD__ );
        }
 
        private function getTokenTypes() {
@@ -58,11 +53,11 @@ class ApiTokens extends ApiBase {
                        return $types;
                }
                wfProfileIn( __METHOD__ );
-               $types = array( 'patrol' => 'ApiQueryRecentChanges::getPatrolToken' );
+               $types = array( 'patrol' => array( 'ApiQueryRecentChanges', 'getPatrolToken' ) );
                $names = array( 'edit', 'delete', 'protect', 'move', 'block', 'unblock',
                        'email', 'import', 'watch', 'options' );
                foreach ( $names as $name ) {
-                       $types[$name] = 'ApiQueryInfo::get' . ucfirst( $name ) . 'Token';
+                       $types[$name] = array( 'ApiQueryInfo', 'get' . ucfirst( $name ) . 'Token' );
                }
                wfRunHooks( 'ApiTokensGetTokenTypes', array( &$types ) );
                ksort( $types );
@@ -81,54 +76,13 @@ class ApiTokens extends ApiBase {
        }
 
        public function getResultProperties() {
-               return array(
-                       '' => array(
-                               'patroltoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'edittoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'deletetoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'protecttoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'movetoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'blocktoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'unblocktoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'emailtoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'importtoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'watchtoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               ),
-                               'optionstoken' => array(
-                                       ApiBase::PROP_TYPE => 'string',
-                                       ApiBase::PROP_NULLABLE => true
-                               )
-                       )
+               $props = array(
+                       '' => array(),
                );
+
+               self::addTokenProperties( $props, $this->getTokenTypes() );
+
+               return $props;
        }
 
        public function getParamDescription() {
index bc7f6e7..55e7331 100644 (file)
@@ -75,7 +75,7 @@ class ApiUnblock extends ApiBase {
 
                $res['id'] = $block->getId();
                $target = $block->getType() == Block::TYPE_AUTO ? '' : $block->getTarget();
-               $res['user'] = $target;
+               $res['user'] = $target instanceof User ? $target->getName() : $target;
                $res['userid'] = $target instanceof User ? $target->getId() : 0;
                $res['reason'] = $params['reason'];
                $this->getResult()->addValue( null, $this->getModuleName(), $res );
index f53f065..4bbe568 100644 (file)
@@ -41,7 +41,7 @@ class ApiUndelete extends ApiBase {
                }
 
                $titleObj = Title::newFromText( $params['title'] );
-               if ( !$titleObj ) {
+               if ( !$titleObj || $titleObj->isExternal() ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
 
index 6ec3a71..05d3b5a 100644 (file)
@@ -184,8 +184,6 @@ class ApiUpload extends ApiBase {
         * @return array
         */
        private function getChunkResult( $warnings ) {
-               global $IP;
-
                $result = array();
 
                $result['result'] = 'Continue';
@@ -564,8 +562,6 @@ class ApiUpload extends ApiBase {
         * @return array
         */
        protected function performUpload( $warnings ) {
-               global $IP;
-
                // Use comment as initial page text by default
                if ( is_null( $this->mParams['text'] ) ) {
                        $this->mParams['text'] = $this->mParams['comment'];
@@ -683,7 +679,9 @@ class ApiUpload extends ApiBase {
                                ),
                        ),
                        'ignorewarnings' => false,
-                       'file' => null,
+                       'file' => array(
+                               ApiBase::PARAM_TYPE => 'upload',
+                       ),
                        'url' => null,
                        'filekey' => null,
                        'sessionkey' => array(
@@ -694,7 +692,9 @@ class ApiUpload extends ApiBase {
 
                        'filesize' => null,
                        'offset' => null,
-                       'chunk' => null,
+                       'chunk' => array(
+                               ApiBase::PARAM_TYPE => 'upload',
+                       ),
 
                        'async' => false,
                        'asyncdownload' => false,
index 2454e33..7106b06 100644 (file)
@@ -40,7 +40,7 @@ class ApiWatch extends ApiBase {
                $params = $this->extractRequestParams();
                $title = Title::newFromText( $params['title'] );
 
-               if ( !$title || $title->getNamespace() < 0 ) {
+               if ( !$title || $title->isExternal() || !$title->canExist() ) {
                        $this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
                }
 
index 05a0ca0..ff2f7f7 100644 (file)
@@ -728,7 +728,7 @@ abstract class DatabaseBase implements DatabaseType {
         */
        final public static function factory( $dbType, $p = array() ) {
                $canonicalDBTypes = array(
-                       'mysql', 'postgres', 'sqlite', 'oracle', 'mssql', 'ibm_db2'
+                       'mysql', 'postgres', 'sqlite', 'oracle', 'mssql'
                );
                $dbType = strtolower( $dbType );
                $class = 'Database' . ucfirst( $dbType );
diff --git a/includes/db/DatabaseIbm_db2.php b/includes/db/DatabaseIbm_db2.php
deleted file mode 100644 (file)
index 30bc665..0000000
+++ /dev/null
@@ -1,1727 +0,0 @@
-<?php
-/**
- * This is the IBM DB2 database abstraction layer.
- * See maintenance/ibm_db2/README for development notes
- * and other specific information.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Database
- * @author leo.petr+mediawiki@gmail.com
- */
-
-/**
- * This represents a column in a DB2 database
- * @ingroup Database
- */
-class IBM_DB2Field implements Field {
-       private $name = '';
-       private $tablename = '';
-       private $type = '';
-       private $nullable = false;
-       private $max_length = 0;
-
-       /**
-        * Builder method for the class
-        * @param $db DatabaseIbm_db2: Database interface
-        * @param $table String: table name
-        * @param $field String: column name
-        * @return IBM_DB2Field
-        */
-       static function fromText( $db, $table, $field ) {
-               global $wgDBmwschema;
-
-               $q = <<<SQL
-SELECT
-lcase( coltype ) AS typname,
-nulls AS attnotnull, length AS attlen
-FROM sysibm.syscolumns
-WHERE tbcreator=%s AND tbname=%s AND name=%s;
-SQL;
-               $res = $db->query(
-                       sprintf( $q,
-                               $db->addQuotes( $wgDBmwschema ),
-                               $db->addQuotes( $table ),
-                               $db->addQuotes( $field )
-                       )
-               );
-               $row = $db->fetchObject( $res );
-               if ( !$row ) {
-                       return null;
-               }
-               $n = new IBM_DB2Field;
-               $n->type = $row->typname;
-               $n->nullable = ( $row->attnotnull == 'N' );
-               $n->name = $field;
-               $n->tablename = $table;
-               $n->max_length = $row->attlen;
-               return $n;
-       }
-       /**
-        * Get column name
-        * @return string column name
-        */
-       function name() { return $this->name; }
-       /**
-        * Get table name
-        * @return string table name
-        */
-       function tableName() { return $this->tablename; }
-       /**
-        * Get column type
-        * @return string column type
-        */
-       function type() { return $this->type; }
-       /**
-        * Can column be null?
-        * @return bool true or false
-        */
-       function isNullable() { return $this->nullable; }
-       /**
-        * How much can you fit in the column per row?
-        * @return int length
-        */
-       function maxLength() { return $this->max_length; }
-}
-
-/**
- * Wrapper around binary large objects
- * @ingroup Database
- */
-class IBM_DB2Blob {
-       private $mData;
-
-       public function __construct( $data ) {
-               $this->mData = $data;
-       }
-
-       public function getData() {
-               return $this->mData;
-       }
-
-       public function __toString() {
-               return $this->mData;
-       }
-}
-
-/**
- * Wrapper to address lack of certain operations in the DB2 driver
- *  ( seek, num_rows )
- * @ingroup Database
- * @since 1.19
- */
-class IBM_DB2Result{
-       private $db;
-       private $result;
-       private $num_rows;
-       private $current_pos;
-       private $columns = array();
-       private $sql;
-
-       private $resultSet = array();
-       private $loadedLines = 0;
-
-       /**
-        * Construct and initialize a wrapper for DB2 query results
-        * @param $db DatabaseBase
-        * @param $result Object
-        * @param $num_rows Integer
-        * @param $sql String
-        * @param $columns Array
-        */
-       public function __construct( $db, $result, $num_rows, $sql, $columns ) {
-               $this->db = $db;
-
-               if( $result instanceof ResultWrapper ) {
-                       $this->result = $result->result;
-               } else {
-                       $this->result = $result;
-               }
-
-               $this->num_rows = $num_rows;
-               $this->current_pos = 0;
-               if ( $this->num_rows > 0 ) {
-                       // Make a lower-case list of the column names
-                       // By default, DB2 column names are capitalized
-                       //  while MySQL column names are lowercase
-
-                       // Is there a reasonable maximum value for $i?
-                       // Setting to 2048 to prevent an infinite loop
-                       for( $i = 0; $i < 2048; $i++ ) {
-                               $name = db2_field_name( $this->result, $i );
-                               if ( $name != false ) {
-                                       continue;
-                               }
-                               else {
-                                       return false;
-                               }
-
-                               $this->columns[$i] = strtolower( $name );
-                       }
-               }
-
-               $this->sql = $sql;
-       }
-
-       /**
-        * Unwrap the DB2 query results
-        * @return mixed Object on success, false on failure
-        */
-       public function getResult() {
-               if ( $this->result ) {
-                       return $this->result;
-               }
-               else return false;
-       }
-
-       /**
-        * Get the number of rows in the result set
-        * @return integer
-        */
-       public function getNum_rows() {
-               return $this->num_rows;
-       }
-
-       /**
-        * Return a row from the result set in object format
-        * @return mixed Object on success, false on failure.
-        */
-       public function fetchObject() {
-               if ( $this->result
-                               && $this->num_rows > 0
-                               && $this->current_pos >= 0
-                               && $this->current_pos < $this->num_rows )
-               {
-                       $row = $this->fetchRow();
-                       $ret = new stdClass();
-
-                       foreach ( $row as $k => $v ) {
-                               $lc = $this->columns[$k];
-                               $ret->$lc = $v;
-                       }
-                       return $ret;
-               }
-               return false;
-       }
-
-       /**
-        * Return a row form the result set in array format
-        * @return mixed Array on success, false on failure
-        * @throws DBUnexpectedError
-        */
-       public function fetchRow() {
-               if ( $this->result
-                               && $this->num_rows > 0
-                               && $this->current_pos >= 0
-                               && $this->current_pos < $this->num_rows )
-               {
-                       if ( $this->loadedLines <= $this->current_pos ) {
-                               $row = db2_fetch_array( $this->result );
-                               $this->resultSet[$this->loadedLines++] = $row;
-                               if ( $this->db->lastErrno() ) {
-                                       throw new DBUnexpectedError( $this->db, 'Error in fetchRow(): '
-                                               . htmlspecialchars( $this->db->lastError() ) );
-                               }
-                       }
-
-                       if ( $this->loadedLines > $this->current_pos ) {
-                               return $this->resultSet[$this->current_pos++];
-                       }
-
-               }
-               return false;
-       }
-
-       /**
-        * Free a DB2 result object
-        * @throws DBUnexpectedError
-        */
-       public function freeResult() {
-               unset( $this->resultSet );
-               if ( !@db2_free_result( $this->result ) ) {
-                       throw new DBUnexpectedError( $this, "Unable to free DB2 result\n" );
-               }
-       }
-}
-
-/**
- * Primary database interface
- * @ingroup Database
- */
-class DatabaseIbm_db2 extends DatabaseBase {
-       /*
-        * Inherited members
-       protected $mLastQuery = '';
-       protected $mPHPError = false;
-
-       protected $mServer, $mUser, $mPassword, $mConn = null, $mDBname;
-       protected $mOpened = false;
-
-       protected $mTablePrefix;
-       protected $mFlags;
-       protected $mTrxLevel = 0;
-       protected $mErrorCount = 0;
-       protected $mLBInfo = array();
-       protected $mFakeSlaveLag = null, $mFakeMaster = false;
-        *
-        */
-
-       /** Database server port */
-       protected $mPort = null;
-       /** Schema for tables, stored procedures, triggers */
-       protected $mSchema = null;
-       /** Whether the schema has been applied in this session */
-       protected $mSchemaSet = false;
-       /** Result of last query */
-       protected $mLastResult = null;
-       /** Number of rows affected by last INSERT/UPDATE/DELETE */
-       protected $mAffectedRows = null;
-       /** Number of rows returned by last SELECT */
-       protected $mNumRows = null;
-       /** Current row number on the cursor of the last SELECT */
-       protected $currentRow = 0;
-
-       /** Connection config options - see constructor */
-       public $mConnOptions = array();
-       /** Statement config options -- see constructor */
-       public $mStmtOptions = array();
-
-       /** Default schema */
-       const USE_GLOBAL = 'get from global';
-
-       /** Option that applies to nothing */
-       const NONE_OPTION = 0x00;
-       /** Option that applies to connection objects */
-       const CONN_OPTION = 0x01;
-       /** Option that applies to statement objects */
-       const STMT_OPTION = 0x02;
-
-       /** Regular operation mode -- minimal debug messages */
-       const REGULAR_MODE = 'regular';
-       /** Installation mode -- lots of debug messages */
-       const INSTALL_MODE = 'install';
-
-       /** Controls the level of debug message output */
-       protected $mMode = self::REGULAR_MODE;
-
-       /** Last sequence value used for a primary key */
-       protected $mInsertId = null;
-
-       ######################################
-       # Getters and Setters
-       ######################################
-
-       /**
-        * Returns true if this database supports (and uses) cascading deletes
-        * @return bool
-        */
-       function cascadingDeletes() {
-               return true;
-       }
-
-       /**
-        * Returns true if this database supports (and uses) triggers (e.g. on the
-        *  page table)
-        * @return bool
-        */
-       function cleanupTriggers() {
-               return true;
-       }
-
-       /**
-        * Returns true if this database is strict about what can be put into an
-        *  IP field.
-        * Specifically, it uses a NULL value instead of an empty string.
-        * @return bool
-        */
-       function strictIPs() {
-               return true;
-       }
-
-       /**
-        * Returns true if this database uses timestamps rather than integers
-        * @return bool
-        */
-       function realTimestamps() {
-               return true;
-       }
-
-       /**
-        * Returns true if this database does an implicit sort when doing GROUP BY
-        * @return bool
-        */
-       function implicitGroupby() {
-               return false;
-       }
-
-       /**
-        * Returns true if this database does an implicit order by when the column
-        *  has an index
-        * For example: SELECT page_title FROM page LIMIT 1
-        * @return bool
-        */
-       function implicitOrderby() {
-               return false;
-       }
-
-       /**
-        * Returns true if this database can do a native search on IP columns
-        * e.g. this works as expected: .. WHERE rc_ip = '127.42.12.102/32';
-        * @return bool
-        */
-       function searchableIPs() {
-               return true;
-       }
-
-       /**
-        * Returns true if this database can use functional indexes
-        * @return bool
-        */
-       function functionalIndexes() {
-               return true;
-       }
-
-       /**
-        * Returns a unique string representing the wiki on the server
-        * @return string
-        */
-       public function getWikiID() {
-               if( $this->mSchema ) {
-                       return "{$this->mDBname}-{$this->mSchema}";
-               } else {
-                       return $this->mDBname;
-               }
-       }
-
-       /**
-        * Returns the database software identifieir
-        * @return string
-        */
-       public function getType() {
-               return 'ibm_db2';
-       }
-
-       /**
-        * Returns the database connection object
-        * @return Object
-        */
-       public function getDb() {
-               return $this->mConn;
-       }
-
-       /**
-        *
-        * @param $server String: hostname of database server
-        * @param $user String: username
-        * @param $password String: password
-        * @param $dbName String: database name on the server
-        * @param $flags Integer: database behaviour flags (optional, unused)
-        * @param $schema String
-        */
-       public function __construct( $server = false, $user = false,
-                                                       $password = false,
-                                                       $dbName = false, $flags = 0,
-                                                       $schema = self::USE_GLOBAL )
-       {
-               global $wgDBmwschema;
-
-               if ( $schema == self::USE_GLOBAL ) {
-                       $this->mSchema = $wgDBmwschema;
-               } else {
-                       $this->mSchema = $schema;
-               }
-
-               // configure the connection and statement objects
-               $this->setDB2Option( 'db2_attr_case', 'DB2_CASE_LOWER',
-                       self::CONN_OPTION | self::STMT_OPTION );
-               $this->setDB2Option( 'deferred_prepare', 'DB2_DEFERRED_PREPARE_ON',
-                       self::STMT_OPTION );
-               $this->setDB2Option( 'rowcount', 'DB2_ROWCOUNT_PREFETCH_ON',
-                       self::STMT_OPTION );
-               parent::__construct( $server, $user, $password, $dbName, DBO_TRX | $flags );
-       }
-
-       /**
-        * Enables options only if the ibm_db2 extension version supports them
-        * @param $name String: name of the option in the options array
-        * @param $const String: name of the constant holding the right option value
-        * @param $type Integer: whether this is a Connection or Statement otion
-        */
-       private function setDB2Option( $name, $const, $type ) {
-               if ( defined( $const ) ) {
-                       if ( $type & self::CONN_OPTION ) {
-                               $this->mConnOptions[$name] = constant( $const );
-                       }
-                       if ( $type & self::STMT_OPTION ) {
-                               $this->mStmtOptions[$name] = constant( $const );
-                       }
-               } else {
-                       $this->installPrint(
-                               "$const is not defined. ibm_db2 version is likely too low." );
-               }
-       }
-
-       /**
-        * Outputs debug information in the appropriate place
-        * @param $string String: the relevant debug message
-        */
-       private function installPrint( $string ) {
-               wfDebug( "$string\n" );
-               if ( $this->mMode == self::INSTALL_MODE ) {
-                       print "<li><pre>$string</pre></li>";
-                       flush();
-               }
-       }
-
-       /**
-        * Opens a database connection and returns it
-        * Closes any existing connection
-        *
-        * @param $server String: hostname
-        * @param $user String
-        * @param $password String
-        * @param $dbName String: database name
-        * @throws DBConnectionError
-        * @return DatabaseBase a fresh connection
-        */
-       public function open( $server, $user, $password, $dbName ) {
-               wfProfileIn( __METHOD__ );
-
-               # Load IBM DB2 driver if missing
-               wfDl( 'ibm_db2' );
-
-               # Test for IBM DB2 support, to avoid suppressed fatal error
-               if ( !function_exists( 'db2_connect' ) ) {
-                       throw new DBConnectionError( $this, "DB2 functions missing, have you enabled the ibm_db2 extension for PHP?" );
-               }
-
-               global $wgDBport;
-
-               // Close existing connection
-               $this->close();
-               // Cache conn info
-               $this->mServer = $server;
-               $this->mPort = $port = $wgDBport;
-               $this->mUser = $user;
-               $this->mPassword = $password;
-               $this->mDBname = $dbName;
-
-               $this->openUncataloged( $dbName, $user, $password, $server, $port );
-
-               if ( !$this->mConn ) {
-                       $this->installPrint( "DB connection error\n" );
-                       $this->installPrint(
-                               "Server: $server, Database: $dbName, User: $user, Password: "
-                               . substr( $password, 0, 3 ) . "...\n" );
-                       $this->installPrint( $this->lastError() . "\n" );
-                       wfProfileOut( __METHOD__ );
-                       wfDebug( "DB connection error\n" );
-                       wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
-                       wfDebug( $this->lastError() . "\n" );
-                       throw new DBConnectionError( $this, $this->lastError() );
-               }
-
-               // Some MediaWiki code is still transaction-less (?).
-               // The strategy is to keep AutoCommit on for that code
-               //  but switch it off whenever a transaction is begun.
-               db2_autocommit( $this->mConn, DB2_AUTOCOMMIT_ON );
-
-               $this->mOpened = true;
-               $this->applySchema();
-
-               wfProfileOut( __METHOD__ );
-               return $this->mConn;
-       }
-
-       /**
-        * Opens a cataloged database connection, sets mConn
-        */
-       protected function openCataloged( $dbName, $user, $password ) {
-               wfSuppressWarnings();
-               $this->mConn = db2_pconnect( $dbName, $user, $password );
-               wfRestoreWarnings();
-       }
-
-       /**
-        * Opens an uncataloged database connection, sets mConn
-        */
-       protected function openUncataloged( $dbName, $user, $password, $server, $port )
-       {
-               $dsn = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$dbName;CHARSET=UTF-8;HOSTNAME=$server;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
-               wfSuppressWarnings();
-               $this->mConn = db2_pconnect( $dsn, "", "", array() );
-               wfRestoreWarnings();
-       }
-
-       /**
-        * Closes a database connection, if it is open
-        * Returns success, true if already closed
-        * @return bool
-        */
-       protected function closeConnection() {
-               return db2_close( $this->mConn );
-       }
-
-       /**
-        * Retrieves the most current database error
-        * Forces a database rollback
-        * @return bool|string
-        */
-       public function lastError() {
-               $connerr = db2_conn_errormsg();
-               if ( $connerr ) {
-                       //$this->rollback( __METHOD__ );
-                       return $connerr;
-               }
-               $stmterr = db2_stmt_errormsg();
-               if ( $stmterr ) {
-                       //$this->rollback( __METHOD__ );
-                       return $stmterr;
-               }
-
-               return false;
-       }
-
-       /**
-        * Get the last error number
-        * Return 0 if no error
-        * @return integer
-        */
-       public function lastErrno() {
-               $connerr = db2_conn_error();
-               if ( $connerr ) {
-                       return $connerr;
-               }
-               $stmterr = db2_stmt_error();
-               if ( $stmterr ) {
-                       return $stmterr;
-               }
-               return 0;
-       }
-
-       /**
-        * Is a database connection open?
-        * @return
-        */
-       public function isOpen() { return $this->mOpened; }
-
-       /**
-        * The DBMS-dependent part of query()
-        * @param  $sql String: SQL query.
-        * @throws DBUnexpectedError
-        * @return object Result object for fetch functions or false on failure
-        */
-       protected function doQuery( $sql ) {
-               $this->applySchema();
-
-               // Needed to handle any UTF-8 encoding issues in the raw sql
-               // Note that we fully support prepared statements for DB2
-               // prepare() and execute() should be used instead of doQuery() whenever possible
-               $sql = utf8_decode( $sql );
-
-               $ret = db2_exec( $this->mConn, $sql, $this->mStmtOptions );
-               if( $ret == false ) {
-                       $error = db2_stmt_errormsg();
-
-                       $this->installPrint( "<pre>$sql</pre>" );
-                       $this->installPrint( $error );
-                       throw new DBUnexpectedError( $this, 'SQL error: '
-                               . htmlspecialchars( $error ) );
-               }
-               $this->mLastResult = $ret;
-               $this->mAffectedRows = null; // Not calculated until asked for
-               return $ret;
-       }
-
-       /**
-        * @return string Version information from the database
-        */
-       public function getServerVersion() {
-               $info = db2_server_info( $this->mConn );
-               return $info->DBMS_VER;
-       }
-
-       /**
-        * Queries whether a given table exists
-        * @return boolean
-        */
-       public function tableExists( $table, $fname = __METHOD__ ) {
-               $schema = $this->mSchema;
-
-               $sql = "SELECT COUNT( * ) FROM SYSIBM.SYSTABLES ST WHERE ST.NAME = '" .
-                       strtoupper( $table ) .
-                       "' AND ST.CREATOR = '" .
-                       strtoupper( $schema ) . "'";
-               $res = $this->query( $sql );
-               if ( !$res ) {
-                       return false;
-               }
-
-               // If the table exists, there should be one of it
-               $row = $this->fetchRow( $res );
-               $count = $row[0];
-               if ( $count == '1' || $count == 1 ) {
-                       return true;
-               }
-
-               return false;
-       }
-
-       /**
-        * Fetch the next row from the given result object, in object form.
-        * Fields can be retrieved with $row->fieldname, with fields acting like
-        * member variables.
-        * If no more rows are available, false is returned.
-        *
-        * @param $res array|ResultWrapper SQL result object as returned from Database::query(), etc.
-        * @return object|bool
-        * @throws DBUnexpectedError Thrown if the database returns an error
-        */
-       public function fetchObject( $res ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-               wfSuppressWarnings();
-               $row = db2_fetch_object( $res );
-               wfRestoreWarnings();
-               if( $this->lastErrno() ) {
-                       throw new DBUnexpectedError( $this, 'Error in fetchObject(): '
-                               . htmlspecialchars( $this->lastError() ) );
-               }
-               return $row;
-       }
-
-       /**
-        * Fetch the next row from the given result object, in associative array
-        * form. Fields are retrieved with $row['fieldname'].
-        * If no more rows are available, false is returned.
-        *
-        * @param $res array|ResultWrapper SQL result object as returned from Database::query(), etc.
-        * @return array|bool
-        * @throws DBUnexpectedError Thrown if the database returns an error
-        */
-       public function fetchRow( $res ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-               if ( db2_num_rows( $res ) > 0) {
-                       wfSuppressWarnings();
-                       $row = db2_fetch_array( $res );
-                       wfRestoreWarnings();
-                       if ( $this->lastErrno() ) {
-                               throw new DBUnexpectedError( $this, 'Error in fetchRow(): '
-                                       . htmlspecialchars( $this->lastError() ) );
-                       }
-                       return $row;
-               }
-               return false;
-       }
-
-       /**
-        * Escapes strings
-        * Doesn't escape numbers
-        *
-        * @param $s String: string to escape
-        * @return string escaped string
-        */
-       public function addQuotes( $s ) {
-               //$this->installPrint( "DB2::addQuotes( $s )\n" );
-               if ( is_null( $s ) ) {
-                       return 'NULL';
-               } elseif ( $s instanceof Blob ) {
-                       return "'" . $s->fetch( $s ) . "'";
-               } elseif ( $s instanceof IBM_DB2Blob ) {
-                       return "'" . $this->decodeBlob( $s ) . "'";
-               }
-               $s = $this->strencode( $s );
-               if ( is_numeric( $s ) ) {
-                       return $s;
-               } else {
-                       return "'$s'";
-               }
-       }
-
-       /**
-        * Verifies that a DB2 column/field type is numeric
-        *
-        * @param $type String: DB2 column type
-        * @return Boolean: true if numeric
-        */
-       public function is_numeric_type( $type ) {
-               switch ( strtoupper( $type ) ) {
-                       case 'SMALLINT':
-                       case 'INTEGER':
-                       case 'INT':
-                       case 'BIGINT':
-                       case 'DECIMAL':
-                       case 'REAL':
-                       case 'DOUBLE':
-                       case 'DECFLOAT':
-                               return true;
-               }
-               return false;
-       }
-
-       /**
-        * Alias for addQuotes()
-        * @param $s String: string to escape
-        * @return string escaped string
-        */
-       public function strencode( $s ) {
-               // Bloody useless function
-               //  Prepends backslashes to \x00, \n, \r, \, ', " and \x1a.
-               //  But also necessary
-               $s = db2_escape_string( $s );
-               // Wide characters are evil -- some of them look like '
-               $s = utf8_encode( $s );
-               // Fix its stupidity
-               $from = array( "\\\\", "\\'", '\\n', '\\t', '\\"', '\\r' );
-               $to = array( "\\", "''", "\n", "\t", '"', "\r" );
-               $s = str_replace( $from, $to, $s ); // DB2 expects '', not \' escaping
-               return $s;
-       }
-
-       /**
-        * Switch into the database schema
-        */
-       protected function applySchema() {
-               if ( !( $this->mSchemaSet ) ) {
-                       $this->mSchemaSet = true;
-                       $this->begin( __METHOD__ );
-                       $this->doQuery( "SET SCHEMA = $this->mSchema" );
-                       $this->commit( __METHOD__ );
-               }
-       }
-
-       /**
-        * Start a transaction (mandatory)
-        */
-       protected function doBegin( $fname = 'DatabaseIbm_db2::begin' ) {
-               // BEGIN is implicit for DB2
-               // However, it requires that AutoCommit be off.
-
-               // Some MediaWiki code is still transaction-less (?).
-               // The strategy is to keep AutoCommit on for that code
-               //  but switch it off whenever a transaction is begun.
-               db2_autocommit( $this->mConn, DB2_AUTOCOMMIT_OFF );
-
-               $this->mTrxLevel = 1;
-       }
-
-       /**
-        * End a transaction
-        * Must have a preceding begin()
-        */
-       protected function doCommit( $fname = 'DatabaseIbm_db2::commit' ) {
-               db2_commit( $this->mConn );
-
-               // Some MediaWiki code is still transaction-less (?).
-               // The strategy is to keep AutoCommit on for that code
-               //  but switch it off whenever a transaction is begun.
-               db2_autocommit( $this->mConn, DB2_AUTOCOMMIT_ON );
-
-               $this->mTrxLevel = 0;
-       }
-
-       /**
-        * Cancel a transaction
-        */
-       protected function doRollback( $fname = 'DatabaseIbm_db2::rollback' ) {
-               db2_rollback( $this->mConn );
-               // turn auto-commit back on
-               // not sure if this is appropriate
-               db2_autocommit( $this->mConn, DB2_AUTOCOMMIT_ON );
-               $this->mTrxLevel = 0;
-       }
-
-       /**
-        * Makes an encoded list of strings from an array
-        * $mode:
-        *   LIST_COMMA         - comma separated, no field names
-        *   LIST_AND           - ANDed WHERE clause (without the WHERE)
-        *   LIST_OR            - ORed WHERE clause (without the WHERE)
-        *   LIST_SET           - comma separated with field names, like a SET clause
-        *   LIST_NAMES         - comma separated field names
-        *   LIST_SET_PREPARED  - like LIST_SET, except with ? tokens as values
-        * @param array $a
-        * @param int $mode
-        * @throws DBUnexpectedError
-        * @return string
-        */
-       function makeList( $a, $mode = LIST_COMMA ) {
-               if ( !is_array( $a ) ) {
-                       throw new DBUnexpectedError( $this,
-                               'DatabaseIbm_db2::makeList called with incorrect parameters' );
-               }
-
-               // if this is for a prepared UPDATE statement
-               // (this should be promoted to the parent class
-               //  once other databases use prepared statements)
-               if ( $mode == LIST_SET_PREPARED ) {
-                       $first = true;
-                       $list = '';
-                       foreach ( $a as $field => $value ) {
-                               if ( !$first ) {
-                                       $list .= ", $field = ?";
-                               } else {
-                                       $list .= "$field = ?";
-                                       $first = false;
-                               }
-                       }
-                       $list .= '';
-
-                       return $list;
-               }
-
-               // otherwise, call the usual function
-               return parent::makeList( $a, $mode );
-       }
-
-       /**
-        * Construct a LIMIT query with optional offset
-        * This is used for query pages
-        *
-        * @param $sql string SQL query we will append the limit too
-        * @param $limit integer the SQL limit
-        * @param bool|int $offset SQL offset (default false)
-        * @throws DBUnexpectedError
-        * @return string
-        */
-       public function limitResult( $sql, $limit, $offset=false ) {
-               if( !is_numeric( $limit ) ) {
-                       throw new DBUnexpectedError( $this,
-                               "Invalid non-numeric limit passed to limitResult()\n" );
-               }
-               if( $offset ) {
-                       if ( stripos( $sql, 'where' ) === false ) {
-                               return "$sql AND ( ROWNUM BETWEEN $offset AND $offset+$limit )";
-                       } else {
-                               return "$sql WHERE ( ROWNUM BETWEEN $offset AND $offset+$limit )";
-                       }
-               }
-               return "$sql FETCH FIRST $limit ROWS ONLY ";
-       }
-
-       /**
-        * Handle reserved keyword replacement in table names
-        *
-        * @param $name Object
-        * @param $format String Ignored parameter Default 'quoted'Boolean
-        * @return String
-        */
-       public function tableName( $name, $format = 'quoted' ) {
-               // we want maximum compatibility with MySQL schema
-               return $name;
-       }
-
-       /**
-        * Generates a timestamp in an insertable format
-        *
-        * @param $ts string timestamp
-        * @return String: timestamp value
-        */
-       public function timestamp( $ts = 0 ) {
-               // TS_MW cannot be easily distinguished from an integer
-               return wfTimestamp( TS_DB2, $ts );
-       }
-
-       /**
-        * Return the next in a sequence, save the value for retrieval via insertId()
-        * @param $seqName String: name of a defined sequence in the database
-        * @return int next value in that sequence
-        */
-       public function nextSequenceValue( $seqName ) {
-               // Not using sequences in the primary schema to allow for easier migration
-               //  from MySQL
-               // Emulating MySQL behaviour of using NULL to signal that sequences
-               // aren't used
-               /*
-               $safeseq = preg_replace( "/'/", "''", $seqName );
-               $res = $this->query( "VALUES NEXTVAL FOR $safeseq" );
-               $row = $this->fetchRow( $res );
-               $this->mInsertId = $row[0];
-               return $this->mInsertId;
-               */
-               return null;
-       }
-
-       /**
-        * This must be called after nextSequenceVal
-        * @return int Last sequence value used as a primary key
-        */
-       public function insertId() {
-               return $this->mInsertId;
-       }
-
-       /**
-        * Updates the mInsertId property with the value of the last insert
-        *  into a generated column
-        *
-        * @param $table      String: sanitized table name
-        * @param $primaryKey Mixed: string name of the primary key
-        * @param $stmt       Resource: prepared statement resource
-        *  of the SELECT primary_key FROM FINAL TABLE ( INSERT ... ) form
-        */
-       private function calcInsertId( $table, $primaryKey, $stmt ) {
-               if ( $primaryKey ) {
-                       $this->mInsertId = db2_last_insert_id( $this->mConn );
-               }
-       }
-
-       /**
-        * INSERT wrapper, inserts an array into a table
-        *
-        * $args may be a single associative array, or an array of arrays
-        *  with numeric keys, for multi-row insert
-        *
-        * @param $table   String: Name of the table to insert to.
-        * @param $args    Array: Items to insert into the table.
-        * @param $fname   String: Name of the function, for profiling
-        * @param $options String or Array. Valid options: IGNORE
-        *
-        * @return bool Success of insert operation. IGNORE always returns true.
-        */
-       public function insert( $table, $args, $fname = 'DatabaseIbm_db2::insert',
-               $options = array() )
-       {
-               if ( !count( $args ) ) {
-                       return true;
-               }
-               // get database-specific table name (not used)
-               $table = $this->tableName( $table );
-               // format options as an array
-               $options = IBM_DB2Helper::makeArray( $options );
-               // format args as an array of arrays
-               if ( !( isset( $args[0] ) && is_array( $args[0] ) ) ) {
-                       $args = array( $args );
-               }
-
-               // prevent insertion of NULL into primary key columns
-               list( $args, $primaryKeys ) = $this->removeNullPrimaryKeys( $table, $args );
-               // if there's only one primary key
-               // we'll be able to read its value after insertion
-               $primaryKey = false;
-               if ( count( $primaryKeys ) == 1 ) {
-                       $primaryKey = $primaryKeys[0];
-               }
-
-               // get column names
-               $keys = array_keys( $args[0] );
-               $key_count = count( $keys );
-
-               // If IGNORE is set, we use savepoints to emulate mysql's behavior
-               $ignore = in_array( 'IGNORE', $options ) ? 'mw' : '';
-
-               // assume success
-               $res = true;
-               // If we are not in a transaction, we need to be for savepoint trickery
-               if ( !$this->mTrxLevel ) {
-                       $this->begin( __METHOD__ );
-               }
-
-               $sql = "INSERT INTO $table ( " . implode( ',', $keys ) . ' ) VALUES ';
-               if ( $key_count == 1 ) {
-                       $sql .= '( ? )';
-               } else {
-                       $sql .= '( ?' . str_repeat( ',?', $key_count-1 ) . ' )';
-               }
-               $this->installPrint( "Preparing the following SQL:" );
-               $this->installPrint( "$sql" );
-               $this->installPrint( print_r( $args, true ));
-               $stmt = $this->prepare( $sql );
-
-               // start a transaction/enter transaction mode
-               $this->begin( __METHOD__ );
-
-               if ( !$ignore ) {
-                       //$first = true;
-                       foreach ( $args as $row ) {
-                               //$this->installPrint( "Inserting " . print_r( $row, true ));
-                               // insert each row into the database
-                               $res = $res & $this->execute( $stmt, $row );
-                               if ( !$res ) {
-                                       $this->installPrint( 'Last error:' );
-                                       $this->installPrint( $this->lastError() );
-                               }
-                               // get the last inserted value into a generated column
-                               $this->calcInsertId( $table, $primaryKey, $stmt );
-                       }
-               } else {
-                       $olde = error_reporting( 0 );
-                       // For future use, we may want to track the number of actual inserts
-                       // Right now, insert (all writes) simply return true/false
-                       $numrowsinserted = 0;
-
-                       // always return true
-                       $res = true;
-
-                       foreach ( $args as $row ) {
-                               $overhead = "SAVEPOINT $ignore ON ROLLBACK RETAIN CURSORS";
-                               db2_exec( $this->mConn, $overhead, $this->mStmtOptions );
-
-                               $res2 = $this->execute( $stmt, $row );
-
-                               if ( !$res2 ) {
-                                       $this->installPrint( 'Last error:' );
-                                       $this->installPrint( $this->lastError() );
-                               }
-                               // get the last inserted value into a generated column
-                               $this->calcInsertId( $table, $primaryKey, $stmt );
-
-                               $errNum = $this->lastErrno();
-                               if ( $errNum ) {
-                                       db2_exec( $this->mConn, "ROLLBACK TO SAVEPOINT $ignore",
-                                               $this->mStmtOptions );
-                               } else {
-                                       db2_exec( $this->mConn, "RELEASE SAVEPOINT $ignore",
-                                               $this->mStmtOptions );
-                                       $numrowsinserted++;
-                               }
-                       }
-
-                       $olde = error_reporting( $olde );
-                       // Set the affected row count for the whole operation
-                       $this->mAffectedRows = $numrowsinserted;
-               }
-               // commit either way
-               $this->commit( __METHOD__ );
-               $this->freePrepared( $stmt );
-
-               return $res;
-       }
-
-       /**
-        * Given a table name and a hash of columns with values
-        * Removes primary key columns from the hash where the value is NULL
-        *
-        * @param $table String: name of the table
-        * @param $args Array of hashes of column names with values
-        * @return Array: tuple( filtered array of columns, array of primary keys )
-        */
-       private function removeNullPrimaryKeys( $table, $args ) {
-               $schema = $this->mSchema;
-
-               // find out the primary keys
-               $keyres = $this->doQuery( "SELECT NAME FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = '"
-                       . strtoupper( $table )
-                       . "' AND TBCREATOR = '"
-                       . strtoupper( $schema )
-                       . "' AND KEYSEQ > 0" );
-
-               $keys = array();
-               for (
-                       $row = $this->fetchRow( $keyres );
-                       $row != null;
-                       $row = $this->fetchRow( $keyres )
-               )
-               {
-                       $keys[] = strtolower( $row[0] );
-               }
-               // remove primary keys
-               foreach ( $args as $ai => $row ) {
-                       foreach ( $keys as $key ) {
-                               if ( $row[$key] == null ) {
-                                       unset( $row[$key] );
-                               }
-                       }
-                       $args[$ai] = $row;
-               }
-               // return modified hash
-               return array( $args, $keys );
-       }
-
-       /**
-        * UPDATE wrapper, takes a condition array and a SET array
-        *
-        * @param $table  String: The table to UPDATE
-        * @param $values array An array of values to SET
-        * @param $conds  array An array of conditions ( WHERE ). Use '*' to update all rows.
-        * @param $fname  String: The Class::Function calling this function
-        *                ( for the log )
-        * @param $options array An array of UPDATE options, can be one or
-        *                 more of IGNORE, LOW_PRIORITY
-        * @return Boolean
-        */
-       public function update( $table, $values, $conds, $fname = 'DatabaseIbm_db2::update',
-               $options = array() )
-       {
-               $table = $this->tableName( $table );
-               $opts = $this->makeUpdateOptions( $options );
-               $sql = "UPDATE $opts $table SET "
-                       . $this->makeList( $values, LIST_SET_PREPARED );
-               if ( $conds != '*' ) {
-                       $sql .= " WHERE " . $this->makeList( $conds, LIST_AND );
-               }
-               $stmt = $this->prepare( $sql );
-               $this->installPrint( 'UPDATE: ' . print_r( $values, true ) );
-               // assuming for now that an array with string keys will work
-               // if not, convert to simple array first
-               $result = $this->execute( $stmt, $values );
-               $this->freePrepared( $stmt );
-
-               return $result;
-       }
-
-       /**
-        * DELETE query wrapper
-        *
-        * Use $conds == "*" to delete all rows
-        * @param array $table
-        * @param array|string $conds
-        * @param string $fname
-        * @throws DBUnexpectedError
-        * @return bool|ResultWrapper
-        */
-       public function delete( $table, $conds, $fname = 'DatabaseIbm_db2::delete' ) {
-               if ( !$conds ) {
-                       throw new DBUnexpectedError( $this,
-                               'DatabaseIbm_db2::delete() called with no conditions' );
-               }
-               $table = $this->tableName( $table );
-               $sql = "DELETE FROM $table";
-               if ( $conds != '*' ) {
-                       $sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND );
-               }
-               $result = $this->query( $sql, $fname );
-
-               return $result;
-       }
-
-       /**
-        * Returns the number of rows affected by the last query or 0
-        * @return Integer: the number of rows affected by the last query
-        */
-       public function affectedRows() {
-               if ( !is_null( $this->mAffectedRows ) ) {
-                       // Forced result for simulated queries
-                       return $this->mAffectedRows;
-               }
-               if( empty( $this->mLastResult ) ) {
-                       return 0;
-               }
-               return db2_num_rows( $this->mLastResult );
-       }
-
-       /**
-        * Returns the number of rows in the result set
-        * Has to be called right after the corresponding select query
-        * @param $res Object result set
-        * @return Integer: number of rows
-        */
-       public function numRows( $res ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-
-               if ( $this->mNumRows ) {
-                       return $this->mNumRows;
-               } else {
-                       return 0;
-               }
-       }
-
-       /**
-        * Moves the row pointer of the result set
-        * @param $res Object: result set
-        * @param $row Integer: row number
-        * @return bool success or failure
-        */
-       public function dataSeek( $res, $row ) {
-               if ( $res instanceof ResultWrapper ) {
-                       return $res = $res->result;
-               }
-               if ( $res instanceof IBM_DB2Result ) {
-                       return $res->dataSeek( $row );
-               }
-               wfDebug( "dataSeek operation in DB2 database\n" );
-               return false;
-       }
-
-       ###
-       # Fix notices in Block.php
-       ###
-
-       /**
-        * Frees memory associated with a statement resource
-        * @param $res Object: statement resource to free
-        * @throws DBUnexpectedError
-        * @return Boolean success or failure
-        */
-       public function freeResult( $res ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-               wfSuppressWarnings();
-               $ok = db2_free_result( $res );
-               wfRestoreWarnings();
-               if ( !$ok ) {
-                       throw new DBUnexpectedError( $this, "Unable to free DB2 result\n" );
-               }
-       }
-
-       /**
-        * Returns the number of columns in a resource
-        * @param $res Object: statement resource
-        * @return Number of fields/columns in resource
-        */
-       public function numFields( $res ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-               if ( $res instanceof IBM_DB2Result ) {
-                       $res = $res->getResult();
-               }
-               return db2_num_fields( $res );
-       }
-
-       /**
-        * Returns the nth column name
-        * @param $res Object: statement resource
-        * @param $n Integer: Index of field or column
-        * @return String name of nth column
-        */
-       public function fieldName( $res, $n ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-               if ( $res instanceof IBM_DB2Result ) {
-                       $res = $res->getResult();
-               }
-               return db2_field_name( $res, $n );
-       }
-
-       /**
-        * SELECT wrapper
-        *
-        * @param $table   Array or string, table name(s) (prefix auto-added)
-        * @param $vars    Array or string, field name(s) to be retrieved
-        * @param $conds   Array or string, condition(s) for WHERE
-        * @param $fname   String: calling function name (use __METHOD__)
-        *                 for logs/profiling
-        * @param $options array Associative array of options
-        *                 (e.g. array( 'GROUP BY' => 'page_title' )),
-        *                 see Database::makeSelectOptions code for list of
-        *                 supported stuff
-        * @param $join_conds array Associative array of table join conditions (optional)
-        *                    (e.g. array( 'page' => array('LEFT JOIN',
-        *                    'page_latest=rev_id') )
-        * @return Mixed: database result resource for fetch functions or false
-        *                 on failure
-        */
-       public function select( $table, $vars, $conds = '', $fname = 'DatabaseIbm_db2::select', $options = array(), $join_conds = array() )
-       {
-               $res = parent::select( $table, $vars, $conds, $fname, $options,
-                       $join_conds );
-               $sql = $this->selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
-
-               // We must adjust for offset
-               if ( isset( $options['LIMIT'] ) && isset ( $options['OFFSET'] ) ) {
-                       $limit = $options['LIMIT'];
-                       $offset = $options['OFFSET'];
-               }
-
-               // DB2 does not have a proper num_rows() function yet, so we must emulate
-               // DB2 9.5.4 and the corresponding ibm_db2 driver will introduce
-               //  a working one
-               // TODO: Yay!
-
-               // we want the count
-               $vars2 = array( 'count( * ) as num_rows' );
-               // respecting just the limit option
-               $options2 = array();
-               if ( isset( $options['LIMIT'] ) ) {
-                       $options2['LIMIT'] = $options['LIMIT'];
-               }
-               // but don't try to emulate for GROUP BY
-               if ( isset( $options['GROUP BY'] ) ) {
-                       return $res;
-               }
-
-               $res2 = parent::select( $table, $vars2, $conds, $fname, $options2,
-                       $join_conds );
-
-               $obj = $this->fetchObject( $res2 );
-               $this->mNumRows = $obj->num_rows;
-
-               return new ResultWrapper( $this, new IBM_DB2Result( $this, $res, $obj->num_rows, $vars, $sql ) );
-       }
-
-       /**
-        * Handles ordering, grouping, and having options ('GROUP BY' => colname)
-        * Has limited support for per-column options (colnum => 'DISTINCT')
-        *
-        * @private
-        *
-        * @param $options array Associative array of options to be turned into
-        *              an SQL query, valid keys are listed in the function.
-        * @return Array
-        */
-       function makeSelectOptions( $options ) {
-               $preLimitTail = $postLimitTail = '';
-               $startOpts = '';
-
-               $noKeyOptions = array();
-               foreach ( $options as $key => $option ) {
-                       if ( is_numeric( $key ) ) {
-                               $noKeyOptions[$option] = true;
-                       }
-               }
-
-               $preLimitTail .= $this->makeGroupByWithHaving( $options );
-
-               $preLimitTail .= $this->makeOrderBy( $options );
-
-               if ( isset( $noKeyOptions['DISTINCT'] )
-                       || isset( $noKeyOptions['DISTINCTROW'] ) )
-               {
-                       $startOpts .= 'DISTINCT';
-               }
-
-               return array( $startOpts, '', $preLimitTail, $postLimitTail );
-       }
-
-       /**
-        * Returns link to IBM DB2 free download
-        * @return String: wikitext of a link to the server software's web site
-        */
-       public static function getSoftwareLink() {
-               return '[http://www.ibm.com/db2/express/ IBM DB2]';
-       }
-
-       /**
-        * Get search engine class. All subclasses of this
-        * need to implement this if they wish to use searching.
-        *
-        * @return String
-        */
-       public function getSearchEngine() {
-               return 'SearchIBM_DB2';
-       }
-
-       /**
-        * Did the last database access fail because of deadlock?
-        * @return Boolean
-        */
-       public function wasDeadlock() {
-               // get SQLSTATE
-               $err = $this->lastErrno();
-               switch( $err ) {
-                       // This is literal port of the MySQL logic and may be wrong for DB2
-                       case '40001':   // sql0911n, Deadlock or timeout, rollback
-                       case '57011':   // sql0904n, Resource unavailable, no rollback
-                       case '57033':   // sql0913n, Deadlock or timeout, no rollback
-                       $this->installPrint( "In a deadlock because of SQLSTATE $err" );
-                       return true;
-               }
-               return false;
-       }
-
-       /**
-        * Ping the server and try to reconnect if it there is no connection
-        * The connection may be closed and reopened while this happens
-        * @return Boolean: whether the connection exists
-        */
-       public function ping() {
-               // db2_ping() doesn't exist
-               // Emulate
-               $this->close();
-               $this->openUncataloged( $this->mDBName, $this->mUser,
-                       $this->mPassword, $this->mServer, $this->mPort );
-
-               return false;
-       }
-       ######################################
-       # Unimplemented and not applicable
-       ######################################
-
-       /**
-        * Only useful with fake prepare like in base Database class
-        * @return      string
-        */
-       public function fillPreparedArg( $matches ) {
-               $this->installPrint( 'Not useful for DB2: fillPreparedArg()' );
-               return '';
-       }
-
-       ######################################
-       # Reflection
-       ######################################
-
-       /**
-        * Returns information about an index
-        * If errors are explicitly ignored, returns NULL on failure
-        * @param $table String: table name
-        * @param $index String: index name
-        * @param $fname String: function name for logging and profiling
-        * @return Object query row in object form
-        */
-       public function indexInfo( $table, $index,
-               $fname = 'DatabaseIbm_db2::indexExists' )
-       {
-               $table = $this->tableName( $table );
-               $sql = <<<SQL
-SELECT name as indexname
-FROM sysibm.sysindexes si
-WHERE si.name='$index' AND si.tbname='$table'
-AND sc.tbcreator='$this->mSchema'
-SQL;
-               $res = $this->query( $sql, $fname );
-               if ( !$res ) {
-                       return null;
-               }
-               $row = $this->fetchObject( $res );
-               if ( $row != null ) {
-                       return $row;
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * Returns an information object on a table column
-        * @param $table String: table name
-        * @param $field String: column name
-        * @return IBM_DB2Field
-        */
-       public function fieldInfo( $table, $field ) {
-               return IBM_DB2Field::fromText( $this, $table, $field );
-       }
-
-       /**
-        * db2_field_type() wrapper
-        * @param $res Object: result of executed statement
-        * @param $index Mixed: number or name of the column
-        * @return String column type
-        */
-       public function fieldType( $res, $index ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-               if ( $res instanceof IBM_DB2Result ) {
-                       $res = $res->getResult();
-               }
-               return db2_field_type( $res, $index );
-       }
-
-       /**
-        * Verifies that an index was created as unique
-        * @param $table String: table name
-        * @param $index String: index name
-        * @param $fname string function name for profiling
-        * @return Bool
-        */
-       public function indexUnique ( $table, $index,
-               $fname = 'DatabaseIbm_db2::indexUnique' )
-       {
-               $table = $this->tableName( $table );
-               $sql = <<<SQL
-SELECT si.name as indexname
-FROM sysibm.sysindexes si
-WHERE si.name='$index' AND si.tbname='$table'
-AND sc.tbcreator='$this->mSchema'
-AND si.uniquerule IN ( 'U', 'P' )
-SQL;
-               $res = $this->query( $sql, $fname );
-               if ( !$res ) {
-                       return null;
-               }
-               if ( $this->fetchObject( $res ) ) {
-                       return true;
-               }
-               return false;
-
-       }
-
-       /**
-        * Returns the size of a text field, or -1 for "unlimited"
-        * @param $table String: table name
-        * @param $field String: column name
-        * @return Integer: length or -1 for unlimited
-        */
-       public function textFieldSize( $table, $field ) {
-               $table = $this->tableName( $table );
-               $sql = <<<SQL
-SELECT length as size
-FROM sysibm.syscolumns sc
-WHERE sc.name='$field' AND sc.tbname='$table'
-AND sc.tbcreator='$this->mSchema'
-SQL;
-               $res = $this->query( $sql );
-               $row = $this->fetchObject( $res );
-               $size = $row->size;
-               return $size;
-       }
-
-       /**
-        * Description is left as an exercise for the reader
-        * @param $b Mixed: data to be encoded
-        * @return IBM_DB2Blob
-        */
-       public function encodeBlob( $b ) {
-               return new IBM_DB2Blob( $b );
-       }
-
-       /**
-        * Description is left as an exercise for the reader
-        * @param $b IBM_DB2Blob: data to be decoded
-        * @return mixed
-        */
-       public function decodeBlob( $b ) {
-               return "$b";
-       }
-
-       /**
-        * Convert into a list of string being concatenated
-        * @param $stringList Array: strings that need to be joined together
-        *                    by the SQL engine
-        * @return String: joined by the concatenation operator
-        */
-       public function buildConcat( $stringList ) {
-               // || is equivalent to CONCAT
-               // Sample query: VALUES 'foo' CONCAT 'bar' CONCAT 'baz'
-               return implode( ' || ', $stringList );
-       }
-
-       /**
-        * Generates the SQL required to convert a DB2 timestamp into a Unix epoch
-        * @param $column String: name of timestamp column
-        * @return String: SQL code
-        */
-       public function extractUnixEpoch( $column ) {
-               // TODO
-               // see SpecialAncientpages
-       }
-
-       ######################################
-       # Prepared statements
-       ######################################
-
-       /**
-        * Intended to be compatible with the PEAR::DB wrapper functions.
-        * http://pear.php.net/manual/en/package.database.db.intro-execute.php
-        *
-        * ? = scalar value, quoted as necessary
-        * ! = raw SQL bit (a function for instance)
-        * & = filename; reads the file and inserts as a blob
-        *     (we don't use this though...)
-        * @param $sql String: SQL statement with appropriate markers
-        * @param $func String: Name of the function, for profiling
-        * @return resource a prepared DB2 SQL statement
-        */
-       public function prepare( $sql, $func = 'DB2::prepare' ) {
-               $stmt = db2_prepare( $this->mConn, $sql, $this->mStmtOptions );
-               return $stmt;
-       }
-
-       /**
-        * Frees resources associated with a prepared statement
-        * @return Boolean success or failure
-        */
-       public function freePrepared( $prepared ) {
-               return db2_free_stmt( $prepared );
-       }
-
-       /**
-        * Execute a prepared query with the various arguments
-        * @param $prepared String: the prepared sql
-        * @param $args Mixed: either an array here, or put scalars as varargs
-        * @return Resource: results object
-        */
-       public function execute( $prepared, $args = null ) {
-               if( !is_array( $args ) ) {
-                       # Pull the var args
-                       $args = func_get_args();
-                       array_shift( $args );
-               }
-               $res = db2_execute( $prepared, $args );
-               if ( !$res ) {
-                       $this->installPrint( db2_stmt_errormsg() );
-               }
-               return $res;
-       }
-
-       /**
-        * For faking prepared SQL statements on DBs that don't support
-        * it directly.
-        * @param $preparedQuery String: a 'preparable' SQL statement
-        * @param $args Array of arguments to fill it with
-        * @return String: executable statement
-        */
-       public function fillPrepared( $preparedQuery, $args ) {
-               reset( $args );
-               $this->preparedArgs =& $args;
-
-               foreach ( $args as $i => $arg ) {
-                       db2_bind_param( $preparedQuery, $i+1, $args[$i] );
-               }
-
-               return $preparedQuery;
-       }
-
-       /**
-        * Switches module between regular and install modes
-        * @return string
-        */
-       public function setMode( $mode ) {
-               $old = $this->mMode;
-               $this->mMode = $mode;
-               return $old;
-       }
-
-       /**
-        * Bitwise negation of a column or value in SQL
-        * Same as (~field) in C
-        * @param $field String
-        * @return String
-        */
-       function bitNot( $field ) {
-               // expecting bit-fields smaller than 4bytes
-               return "BITNOT( $field )";
-       }
-
-       /**
-        * Bitwise AND of two columns or values in SQL
-        * Same as (fieldLeft & fieldRight) in C
-        * @param $fieldLeft String
-        * @param $fieldRight String
-        * @return String
-        */
-       function bitAnd( $fieldLeft, $fieldRight ) {
-               return "BITAND( $fieldLeft, $fieldRight )";
-       }
-
-       /**
-        * Bitwise OR of two columns or values in SQL
-        * Same as (fieldLeft | fieldRight) in C
-        * @param $fieldLeft String
-        * @param $fieldRight String
-        * @return String
-        */
-       function bitOr( $fieldLeft, $fieldRight ) {
-               return "BITOR( $fieldLeft, $fieldRight )";
-       }
-}
-
-class IBM_DB2Helper {
-       public static function makeArray( $maybeArray ) {
-               if ( !is_array( $maybeArray ) ) {
-                       return array( $maybeArray );
-               }
-
-               return $maybeArray;
-       }
-}
index 13fa466..311691d 100644 (file)
@@ -117,34 +117,14 @@ class LoadBalancer {
         * Given an array of non-normalised probabilities, this function will select
         * an element and return the appropriate key
         *
+        * @deprecated 1.21, use wfPickRandom()
+        *
         * @param $weights array
         *
-        * @return int
+        * @return bool|int|string
         */
        function pickRandom( $weights ) {
-               if ( !is_array( $weights ) || count( $weights ) == 0 ) {
-                       return false;
-               }
-
-               $sum = array_sum( $weights );
-               if ( $sum == 0 ) {
-                       # No loads on any of them
-                       # In previous versions, this triggered an unweighted random selection,
-                       # but this feature has been removed as of April 2006 to allow for strict
-                       # separation of query groups.
-                       return false;
-               }
-               $max = mt_getrandmax();
-               $rand = mt_rand( 0, $max ) / $max * $sum;
-
-               $sum = 0;
-               foreach ( $weights as $i => $w ) {
-                       $sum += $w;
-                       if ( $sum >= $rand ) {
-                               break;
-                       }
-               }
-               return $i;
+               return wfPickRandom( $weights );
        }
 
        /**
index acbc4a9..17a88c6 100644 (file)
@@ -28,6 +28,7 @@
  */
 class FSFile {
        protected $path; // path to file
+       private $sha1Base36 = null; // File Sha1Base36
 
        /**
         * Sets up the file object
@@ -193,20 +194,27 @@ class FSFile {
         * 160 log 2 / log 36 = 30.95, so the 160-bit hash fills 31 digits in base 36
         * fairly neatly.
         *
+        * @param $recache bool
         * @return bool|string False on failure
         */
-       public function getSha1Base36() {
+       public function getSha1Base36( $recache = false ) {
                wfProfileIn( __METHOD__ );
 
+               if ( $this->sha1Base36 !== null && !$recache ) {
+                       wfProfileOut( __METHOD__ );
+                       return $this->sha1Base36;
+               }
+
                wfSuppressWarnings();
-               $hash = sha1_file( $this->path );
+               $this->sha1Base36 = sha1_file( $this->path );
                wfRestoreWarnings();
-               if ( $hash !== false ) {
-                       $hash = wfBaseConvert( $hash, 16, 36, 31 );
+
+               if ( $this->sha1Base36 !== false ) {
+                       $this->sha1Base36 = wfBaseConvert( $this->sha1Base36, 16, 36, 31 );
                }
 
                wfProfileOut( __METHOD__ );
-               return $hash;
+               return $this->sha1Base36;
        }
 
        /**
@@ -242,11 +250,18 @@ class FSFile {
         * fairly neatly.
         *
         * @param $path string
+        * @param $recache bool
         *
         * @return bool|string False on failure
         */
-       public static function getSha1Base36FromPath( $path ) {
-               $fsFile = new self( $path );
-               return $fsFile->getSha1Base36();
+       public static function getSha1Base36FromPath( $path, $recache = false ) {
+               static $sha1Base36 = array();
+
+               if ( !isset( $sha1Base36[$path] ) || $recache ) {
+                       $fsFile = new self( $path );
+                       $sha1Base36[$path] = $fsFile->getSha1Base36();
+               }
+
+               return $sha1Base36[$path];
        }
 }
index b906af5..53c2698 100644 (file)
@@ -767,10 +767,7 @@ abstract class FileBackendStore extends FileBackend {
                $hash = $this->doGetFileSha1Base36( $params );
                wfProfileOut( __METHOD__ . '-miss-' . $this->name );
                wfProfileOut( __METHOD__ . '-miss' );
-               if ( $hash ) { // don't cache negatives
-                       $this->cheapCache->set( $path, 'sha1',
-                               array( 'hash' => $hash, 'latest' => $latest ) );
-               }
+               $this->cheapCache->set( $path, 'sha1', array( 'hash' => $hash, 'latest' => $latest ) );
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $hash;
index 44c6567..73f29a9 100644 (file)
@@ -99,6 +99,22 @@ class DBFileJournal extends FileJournal {
                );
        }
 
+       /**
+        * @see FileJournal::doGetPositionAtTime()
+        * @param $time integer|string timestamp
+        * @return integer|false
+        */
+       protected function doGetPositionAtTime( $time ) {
+               $dbw = $this->getMasterDB();
+
+               $encTimestamp = $dbw->addQuotes( $dbw->timestamp( $time ) );
+               return $dbw->selectField( 'filejournal', 'fj_id',
+                       array( 'fj_backend' => $this->backend, "fj_timestamp <= $encTimestamp" ),
+                       __METHOD__,
+                       array( 'ORDER BY' => 'fj_timestamp DESC' )
+               );
+       }
+
        /**
         * @see FileJournal::doGetChangeEntries()
         * @return Array
index d99384d..b0f39c3 100644 (file)
@@ -125,6 +125,23 @@ abstract class FileJournal {
         */
        abstract protected function doGetCurrentPosition();
 
+       /**
+        * Get the position ID of the latest journal entry at some point in time
+        *
+        * @param $time integer|string timestamp
+        * @return integer|false
+        */
+       final public function getPositionAtTime( $time ) {
+               return $this->doGetPositionAtTime( $time );
+       }
+
+       /**
+        * @see FileJournal::getPositionAtTime()
+        * @param $time integer|string timestamp
+        * @return integer|false
+        */
+       abstract protected function doGetPositionAtTime( $time );
+
        /**
         * Get an array of file change log entries.
         * A starting change ID and/or limit can be specified.
@@ -201,6 +218,15 @@ class NullFileJournal extends FileJournal {
                return false;
        }
 
+       /**
+        * @see FileJournal::doGetPositionAtTime()
+        * @param $time integer|string timestamp
+        * @return integer|false
+        */
+       protected function doGetPositionAtTime( $time ) {
+               return false;
+       }
+
        /**
         * @see FileJournal::doGetChangeEntries()
         * @return Array
diff --git a/includes/installer/Ibm_db2Installer.php b/includes/installer/Ibm_db2Installer.php
deleted file mode 100644 (file)
index bf19055..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-<?php
-/**
- * IBM_DB2-specific installer.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Deployment
- */
-
-/**
- * Class for setting up the MediaWiki database using IBM_DB2.
- *
- * @ingroup Deployment
- * @since 1.17
- */
-class Ibm_db2Installer extends DatabaseInstaller {
-
-
-       protected $globalNames = array(
-               'wgDBserver',
-               'wgDBport',
-               'wgDBname',
-               'wgDBuser',
-               'wgDBpassword',
-               'wgDBmwschema',
-       );
-
-       protected $internalDefaults = array(
-               '_InstallUser' => 'db2admin'
-       );
-
-       /**
-        * Get the DB2 database extension name
-        * @return string
-        */
-       public function getName() {
-               return 'ibm_db2';
-       }
-
-       /**
-        * Determine whether the DB2 database extension is currently available in PHP
-        * @return boolean
-        */
-       public function isCompiled() {
-               return self::checkExtension( 'ibm_db2' );
-       }
-
-       /**
-        * Generate a connection form for a DB2 database
-        * @return string
-        */
-       public function getConnectForm() {
-               return
-                       $this->getTextBox( 'wgDBserver', 'config-db-host', array(), $this->parent->getHelpBox( 'config-db-host-help' ) ) .
-                       $this->getTextBox( 'wgDBport', 'config-db-port', array(), $this->parent->getHelpBox( 'config-db-port' ) ) .
-                       Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', array(), wfMessage( 'config-db-wiki-settings' )->text() ) .
-                       $this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-db-name-help' ) ) .
-                       $this->getTextBox( 'wgDBmwschema', 'config-db-schema', array(), $this->parent->getHelpBox( 'config-db-schema-help' ) ) .
-                       Html::closeElement( 'fieldset' ) .
-                       $this->getInstallUserBox();
-       }
-
-       /**
-        * Validate and then execute the connection form for a DB2 database
-        * @return Status
-        */
-       public function submitConnectForm() {
-               // Get variables from the request
-               $newValues = $this->setVarsFromRequest(
-                       array( 'wgDBserver', 'wgDBport', 'wgDBname',
-                               'wgDBmwschema', 'wgDBuser', 'wgDBpassword' ) );
-
-               // Validate them
-               $status = Status::newGood();
-               if ( !strlen( $newValues['wgDBname'] ) ) {
-                       $status->fatal( 'config-missing-db-name' );
-               } elseif ( !preg_match( '/^[a-zA-Z0-9_]+$/', $newValues['wgDBname'] ) ) {
-                       $status->fatal( 'config-invalid-db-name', $newValues['wgDBname'] );
-               }
-               if ( !strlen( $newValues['wgDBmwschema'] ) ) {
-                       $status->fatal( 'config-invalid-schema' );
-               }
-               elseif ( !preg_match( '/^[a-zA-Z0-9_]*$/', $newValues['wgDBmwschema'] ) ) {
-                       $status->fatal( 'config-invalid-schema', $newValues['wgDBmwschema'] );
-               }
-               if ( !strlen( $newValues['wgDBport'] ) ) {
-                       $status->fatal( 'config-invalid-port' );
-               }
-               elseif ( !preg_match( '/^[0-9_]*$/', $newValues['wgDBport'] ) ) {
-                       $status->fatal( 'config-invalid-port', $newValues['wgDBport'] );
-               }
-
-               // Submit user box
-               if ( $status->isOK() ) {
-                       $status->merge( $this->submitInstallUserBox() );
-               }
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-
-               global $wgDBport;
-               $wgDBport = $newValues['wgDBport'];
-
-               // Try to connect
-               $status->merge( $this->getConnection() );
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-
-               $this->parent->setVar( 'wgDBuser', $this->getVar( '_InstallUser' ) );
-               $this->parent->setVar( 'wgDBpassword', $this->getVar( '_InstallPassword' ) );
-
-               return $status;
-       }
-
-       /**
-        * Open a DB2 database connection
-        * @return Status
-        */
-       public function openConnection() {
-               $status = Status::newGood();
-               try {
-                       $db = new DatabaseIbm_db2(
-                               $this->getVar( 'wgDBserver' ),
-                               $this->getVar( '_InstallUser' ),
-                               $this->getVar( '_InstallPassword' ),
-                               $this->getVar( 'wgDBname' ),
-                               0,
-                               $this->getVar( 'wgDBmwschema' )
-                       );
-                       $status->value = $db;
-               } catch ( DBConnectionError $e ) {
-                       $status->fatal( 'config-connection-error', $e->getMessage() );
-               }
-               return $status;
-       }
-
-       /**
-        * Create a DB2 database for MediaWiki
-        * @return Status
-        */
-       public function setupDatabase() {
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-               /**
-                * @var $conn DatabaseBase
-                */
-               $conn = $status->value;
-               $dbName = $this->getVar( 'wgDBname' );
-               if( !$conn->selectDB( $dbName ) ) {
-                       $conn->query( "CREATE DATABASE "
-                               . $conn->addIdentifierQuotes( $dbName )
-                               . " AUTOMATIC STORAGE YES"
-                               . " USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM"
-                               . " PAGESIZE 32768", __METHOD__ );
-                       $conn->selectDB( $dbName );
-               }
-               $this->setupSchemaVars();
-               return $status;
-       }
-
-       /**
-        * Create tables from scratch.
-        * First check if pagesize >= 32k.
-        *
-        * @return Status
-        */
-       public function createTables() {
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-               $this->db->selectDB( $this->getVar( 'wgDBname' ) );
-
-               if( $this->db->tableExists( 'user' ) ) {
-                       $status->warning( 'config-install-tables-exist' );
-                       return $status;
-               }
-
-               /* Check for pagesize */
-               $status = $this->checkPageSize();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-
-               $this->db->setFlag( DBO_DDLMODE ); // For Oracle's handling of schema files
-               $this->db->begin( __METHOD__ );
-
-               $error = $this->db->sourceFile( $this->db->getSchemaPath() );
-               if( $error !== true ) {
-                       $this->db->reportQueryError( $error, 0, '', __METHOD__ );
-                       $this->db->rollback( __METHOD__ );
-                       $status->fatal( 'config-install-tables-failed', $error );
-               } else {
-                       $this->db->commit( __METHOD__ );
-               }
-               // Resume normal operations
-               if( $status->isOk() ) {
-                       $this->enableLB();
-               }
-               return $status;
-       }
-
-       /**
-        * Check if database has a tablspace with pagesize >= 32k.
-        *
-        * @return Status
-        */
-       public function checkPageSize() {
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-               $this->db->selectDB( $this->getVar( 'wgDBname' ) );
-
-               try {
-                       $result = $this->db->query( 'SELECT PAGESIZE FROM SYSCAT.TABLESPACES FOR READ ONLY' );
-                       if( $result == false ) {
-                               $status->fatal( 'config-connection-error', '' );
-                       } else {
-                               $row = $this->db->fetchRow( $result );
-                               while ( $row ) {
-                                       if( $row[0] >= 32768 ) {
-                                               return $status;
-                                       }
-                                       $row = $this->db->fetchRow( $result );
-                               }
-                               $status->fatal( 'config-ibm_db2-low-db-pagesize', '' );
-                       }
-               } catch ( DBUnexpectedError $e ) {
-                       $status->fatal( 'config-connection-error', $e->getMessage() );
-               }
-
-               return $status;
-       }
-
-       /**
-        * Generate the code to store the DB2-specific settings defined by the configuration form
-        * @return string
-        */
-       public function getLocalSettings() {
-               $schema = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBmwschema' ) );
-               $port = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBport' ) );
-               return
-"# IBM_DB2 specific settings
-\$wgDBmwschema         = \"{$schema}\";
-\$wgDBport             = \"{$port}\";";
-       }
-
-       public function __construct( $parent ) {
-               parent::__construct( $parent );
-       }
-}
diff --git a/includes/installer/Ibm_db2Updater.php b/includes/installer/Ibm_db2Updater.php
deleted file mode 100644 (file)
index 33bf69c..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-<?php
-/**
- * IBM_DB2-specific updater.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Deployment
- */
-
-/**
- * Class for handling updates to IBM_DB2 databases.
- *
- * @ingroup Deployment
- * @since 1.17
- */
-class Ibm_db2Updater extends DatabaseUpdater {
-
-       /**
-        * Get the changes in the DB2 database scheme since MediaWiki 1.14
-        * @return array
-        */
-       protected function getCoreUpdateList() {
-               return array(
-                       // 1.14
-                       array( 'addField', 'site_stats',    'ss_active_users',  'patch-ss_active_users.sql' ),
-                       array( 'addField', 'ipblocks',      'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
-
-                       // 1.15
-                       array( 'addTable', 'change_tag',                        'patch-change_tag.sql' ),
-                       array( 'addTable', 'tag_summary',                       'patch-change_tag_summary.sql' ),
-                       array( 'addTable', 'valid_tag',                         'patch-change_valid_tag.sql' ),
-
-                       // 1.16
-                       array( 'addTable', 'user_properties',                   'patch-user_properties.sql' ),
-                       array( 'addTable', 'log_search',                        'patch-log_search.sql' ),
-                       array( 'addField', 'logging',       'log_user_text',    'patch-log_user_text.sql' ),
-                       array( 'addTable', 'l10n_cache',                        'patch-l10n_cache.sql' ),
-                       array( 'addTable', 'external_user',                     'patch-external_user.sql' ),
-                       array( 'addIndex', 'log_search',    'ls_field_val',     'patch-log_search-rename-index.sql' ),
-                       array( 'addIndex', 'change_tag',    'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
-                       array( 'addField', 'redirect',      'rd_interwiki',     'patch-rd_interwiki.sql' ),
-
-                       // 1.17
-                       array( 'addTable', 'iwlinks',                            'patch-iwlinks.sql' ),
-                       array( 'addField', 'updatelog',     'ul_value',          'patch-ul_value.sql' ),
-                       array( 'addField', 'interwiki',     'iw_api',            'patch-iw_api_and_wikiid.sql' ),
-                       array( 'addField', 'categorylinks', 'cl_collation',      'patch-categorylinks-better-collation.sql' ),
-                       array( 'addTable', 'msg_resource',                       'patch-msg_resource.sql' ),
-                       array( 'addTable', 'msg_resource_links',                 'patch-msg_resource_links.sql' ),
-                       array( 'addIndex', 'msg_resource_links', 'uq61_msg_resource_links', 'patch-uq_61_msg_resource_links.sql' ),
-                       array( 'addIndex', 'msg_resource',   'uq81_msg_resource', 'patch-uq_81_msg_resource.sql' ),
-                       array( 'addTable', 'module_deps',                        'patch-module_deps.sql' ),
-                       array( 'addIndex', 'module_deps',    'uq96_module_deps',  'patch-uq_96_module_deps.sql' ),
-                       array( 'addField', 'interwiki',      'iw_api',            'patch-iw_api-field.sql' ),
-                       array( 'addField', 'interwiki',      'iw_wikiid',         'patch-iw_wikiid-field.sql' ),
-                       array( 'addField', 'categorylinks',  'cl_sortkey_prefix', 'patch-cl_sortkey_prefix-field.sql' ),
-                       array( 'addField', 'categorylinks',  'cl_collation',      'patch-cl_collation-field.sql' ),
-                       array( 'addField', 'categorylinks',  'cl_type',           'patch-cl_type-field.sql' ),
-
-                       //1.18
-                       array( 'doUserNewTalkTimestampNotNull' ),
-                       array( 'addIndex', 'user',          'user_email',       'patch-user_email_index.sql' ),
-                       array( 'modifyField', 'user_properties', 'up_property', 'patch-up_property.sql' ),
-                       array( 'addTable', 'uploadstash',                       'patch-uploadstash.sql' ),
-                       array( 'addTable', 'user_former_groups',                'patch-user_former_groups.sql'),
-                       array( 'doRebuildLocalisationCache' ),
-
-                       // 1.19
-                       array( 'addIndex', 'logging',       'type_action',      'patch-logging-type-action-index.sql'),
-                       array( 'dropField', 'user',         'user_options', 'patch-drop-user_options.sql' ),
-                       array( 'addField', 'revision',      'rev_sha1',         'patch-rev_sha1.sql' ),
-                       array( 'addField', 'archive',       'ar_sha1',          'patch-ar_sha1.sql' ),
-
-                       // 1.21
-                       array( 'addField',      'revision',     'rev_content_format',           'patch-revision-rev_content_format.sql' ),
-                       array( 'addField',      'revision',     'rev_content_model',            'patch-revision-rev_content_model.sql' ),
-                       array( 'addField',      'archive',      'ar_content_format',            'patch-archive-ar_content_format.sql' ),
-                       array( 'addField',      'archive',      'ar_content_model',                 'patch-archive-ar_content_model.sql' ),
-                       array( 'addField',      'page',     'page_content_model',               'patch-page-page_content_model.sql' ),
-               );
-       }
-}
index ecee84c..0d910fd 100644 (file)
@@ -232,7 +232,7 @@ The directory you provide must be writable by the webserver during installation.
 It should '''not''' be accessible via the web, this is why we're not putting it where your PHP files are.
 
 The installer will write a <code>.htaccess</code> file along with it, but if that fails someone can gain access to your raw database.
-That includes raw user data (e-mail addresses, hashed passwords) as well as deleted revisions and other restricted data on the wiki.
+That includes raw user data (email addresses, hashed passwords) as well as deleted revisions and other restricted data on the wiki.
 
 Consider putting the database somewhere else altogether, for example in <code>/var/lib/mediawiki/yourwiki</code>.",
        'config-oracle-def-ts'            => 'Default tablespace:',
@@ -241,7 +241,6 @@ Consider putting the database somewhere else altogether, for example in <code>/v
        'config-type-postgres'            => 'PostgreSQL',
        'config-type-sqlite'              => 'SQLite',
        'config-type-oracle'              => 'Oracle',
-       'config-type-ibm_db2'             => 'IBM DB2',
        'config-support-info'             => 'MediaWiki supports the following database systems:
 
 $1
@@ -251,12 +250,10 @@ If you do not see the database system you are trying to use listed below, then f
        'config-support-postgres'         => '* $1 is a popular open source database system as an alternative to MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). There may be some minor outstanding bugs, and it is not recommended for use in a production environment.',
        'config-support-sqlite'           => '* $1 is a lightweight database system which is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)',
        'config-support-oracle'           => '* $1 is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])',
-       'config-support-ibm_db2'          => '* $1 is a commercial enterprise database. ([http://www.php.net/manual/en/ibm-db2.installation.php How to compile PHP with IBM DB2 support])',
        'config-header-mysql'             => 'MySQL settings',
        'config-header-postgres'          => 'PostgreSQL settings',
        'config-header-sqlite'            => 'SQLite settings',
        'config-header-oracle'            => 'Oracle settings',
-       'config-header-ibm_db2'           => 'IBM DB2 settings',
        'config-invalid-db-type'          => 'Invalid database type',
        'config-missing-db-name'          => 'You must enter a value for "Database name"',
        'config-missing-db-host'          => 'You must enter a value for "Database host"',
@@ -349,8 +346,6 @@ This is more efficient than MySQL's UTF-8 mode, and allows you to use the full r
 
 In '''UTF-8 mode''', MySQL will know what character set your data is in, and can present and convert it appropriately, but it will not let you store characters above the [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
 
-       'config-ibm_db2-low-db-pagesize'  => "Your DB2 database has a default tablespace with an insufficient pagesize. The pagesize has to be '''32K''' or greater.",
-
        'config-site-name'                => 'Name of wiki:',
        'config-site-name-help'           => "This will appear in the title bar of the browser and in various other places.",
        'config-site-name-blank'          => 'Enter a site name.',
@@ -378,16 +373,16 @@ Specify a different username.',
        'config-admin-password-blank'     => 'Enter a password for the administrator account.',
        'config-admin-password-same'      => 'The password must not be the same as the username.',
        'config-admin-password-mismatch'  => 'The two passwords you entered do not match.',
-       'config-admin-email'              => 'E-mail address:',
-       'config-admin-email-help'         => 'Enter an e-mail address here to allow you to receive e-mail from other users on the wiki, reset your password, and be notified of changes to pages on your watchlist. You can leave this field empty.',
+       'config-admin-email'              => 'Email address:',
+       'config-admin-email-help'         => 'Enter an email address here to allow you to receive email from other users on the wiki, reset your password, and be notified of changes to pages on your watchlist. You can leave this field empty.',
        'config-admin-error-user'         => 'Internal error when creating an admin with the name "<nowiki>$1</nowiki>".',
        'config-admin-error-password'     => 'Internal error when setting a password for the admin "<nowiki>$1</nowiki>": <pre>$2</pre>',
-       'config-admin-error-bademail'     => 'You have entered an invalid e-mail address.',
+       'config-admin-error-bademail'     => 'You have entered an invalid email address.',
        'config-subscribe'                => 'Subscribe to the [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements mailing list].',
        'config-subscribe-help'           => 'This is a low-volume mailing list used for release announcements, including important security announcements.
 You should subscribe to it and update your MediaWiki installation when new versions come out.',
-       'config-subscribe-noemail'        => 'You tried to subscribe to the release announcements mailing list without providing an e-mail address.
-Please provide an e-mail address if you wish to subscribe to the mailing list.',
+       'config-subscribe-noemail'        => 'You tried to subscribe to the release announcements mailing list without providing an email address.
+Please provide an email address if you wish to subscribe to the mailing list.',
        'config-almost-done'              => 'You are almost done!
 You can now skip the remaining configuration and install the wiki right now.',
        'config-optional-continue'        => 'Ask me more questions.',
@@ -428,22 +423,22 @@ If you want to be able to use text from Wikipedia, and you want Wikipedia to be
 Wikipedia previously used the GNU Free Documentation License.
 The GFDL is a valid license, but it is difficult to understand.
 It is also difficult to reuse content licensed under the GFDL.",
-       'config-email-settings'           => 'E-mail settings',
-       'config-enable-email'             => 'Enable outbound e-mail',
-       'config-enable-email-help'        => "If you want e-mail to work, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] need to be configured correctly.
-If you do not want any e-mail features, you can disable them here.",
-       'config-email-user'               => 'Enable user-to-user e-mail',
-       'config-email-user-help'          => 'Allow all users to send each other e-mail if they have enabled it in their preferences.',
+       'config-email-settings'           => 'Email settings',
+       'config-enable-email'             => 'Enable outbound email',
+       'config-enable-email-help'        => "If you want email to work, [http://www.php.net/manual/en/mail.configuration.php PHP's mail settings] need to be configured correctly.
+If you do not want any email features, you can disable them here.",
+       'config-email-user'               => 'Enable user-to-user email',
+       'config-email-user-help'          => 'Allow all users to send each other email if they have enabled it in their preferences.',
        'config-email-usertalk'           => 'Enable user talk page notification',
        'config-email-usertalk-help'      => 'Allow users to receive notifications on user talk page changes, if they have enabled it in their preferences.',
        'config-email-watchlist'          => 'Enable watchlist notification',
        'config-email-watchlist-help'     => 'Allow users to receive notifications about their watched pages if they have enabled it in their preferences.',
-       'config-email-auth'               => 'Enable e-mail authentication',
-       'config-email-auth-help'          => "If this option is enabled, users have to confirm their e-mail address using a link sent to them whenever they set or change it.
-Only authenticated e-mail addresses can receive e-mails from other users or change notification e-mails.
-Setting this option is '''recommended''' for public wikis because of potential abuse of the e-mail features.",
-       'config-email-sender'             => 'Return e-mail address:',
-       'config-email-sender-help'        => 'Enter the e-mail address to use as the return address on outbound e-mail.
+       'config-email-auth'               => 'Enable email authentication',
+       'config-email-auth-help'          => "If this option is enabled, users have to confirm their email address using a link sent to them whenever they set or change it.
+Only authenticated email addresses can receive emails from other users or change notification emails.
+Setting this option is '''recommended''' for public wikis because of potential abuse of the email features.",
+       'config-email-sender'             => 'Return email address:',
+       'config-email-sender-help'        => 'Enter the email address to use as the return address on outbound email.
 This is where bounces will be sent.
 Many mail servers require at least the domain name part to be valid.',
        'config-upload-settings'          => 'Images and file uploads',
@@ -652,7 +647,6 @@ Message shown when PHP parameter <code>suhosin.get.max_value_length</code> is be
 * $1 - a link to the SQLite home page having the anchor text "SQLite".',
        'config-support-oracle' => 'Parameters:
 * $1 - a link to the Oracle home page, the anchor text of which is "Oracle".',
-       'config-support-ibm_db2' => 'Used in the DBConnect step of the installer, explaining what is the ibm_db2 database',
        'config-connection-error' => '$1 is the external error from the database, such as "DB connection error: Access denied for user \'dba\'@\'localhost\' (using password: YES) (localhost)."
 
 If you\'re translating this message to a right-to-left language, consider writing <nowiki><div dir="ltr">$1.</div></nowiki>. (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as <nowiki><div dir="auto">$1.</div></nowiki>.)',
@@ -674,6 +668,8 @@ If you\'re translating this message to a right-to-left language, consider writin
 * {{msg-mw|config-profile-no-anon}}
 * {{msg-mw|config-profile-fishbowl}}
 * {{msg-mw|config-profile-private}}',
+       'config-email-settings' => '{{Identical|E-mail setting}}',
+       'config-email-user' => '{{Identical|Enable user-to-user e-mail}}',
        'config-upload-help' => 'The word "mode" here refers to the access rights given to various user groups when attempting to create and store files and/or subdiretories in the said directory on the server. It also refers to the <code>mode</code> command used to maipulate said right mask under Unix, Linux, and similar operating systems. A less operating-system-centric translation is fine.',
        'config-logo-help' => '',
        'config-cc-not-chosen' => '{{doc-important|Do not translate the "<code>proceed</code>" part.}}
@@ -2708,7 +2704,6 @@ Arabat cheñch anezho ma n'hoc'h eus ket ezhomm d'en ober.",
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => "Skoret eo ar reizhiadoù diaz titouroù da-heul gant MediaWiki :
 
 $1
@@ -2718,12 +2713,10 @@ Ma ne welit ket amañ dindan ar reizhiad diaz titouroù a fell deoc'h ober ganti
        'config-support-postgres' => "* Ur reizhiad diaz titouroù brudet ha digor eo $1. Gallout a ra ober evit MySQL ([http://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL]). Gallout a ra bezañ un nebeud drein bihan enni ha n'eo ket erbedet he implijout en un endro produiñ.",
        'config-support-sqlite' => "* $1 zo ur reizhiad diaz titouroù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)",
        'config-support-oracle' => '* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])',
-       'config-support-ibm_db2' => '* Un diaz titouroù evit embregerezhioù kenwerzhel eo $1.', # Fuzzy
        'config-header-mysql' => 'Arventennoù MySQL',
        'config-header-postgres' => 'Arventennoù PostgreSQL',
        'config-header-sqlite' => 'Arventennoù SQLite',
        'config-header-oracle' => 'Arventennoù Oracle',
-       'config-header-ibm_db2' => 'Arventennoù IBM DB2',
        'config-invalid-db-type' => 'Direizh eo ar seurt diaz roadennoù',
        'config-missing-db-name' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Anv an diaz titouroù"',
        'config-missing-db-host' => 'Ret eo deoc\'h merkañ un dalvoudenn evit "Ostiz an diaz titouroù"',
@@ -2808,7 +2801,7 @@ Gellout a rit tremen ar c'hefluniadur nevez ha staliañ ar wiki war-eeun.",
        'config-optional-continue' => "Sevel muioc'h a goulennoù ouzhin.",
        'config-optional-skip' => 'Aet on skuizh, staliañ ar wiki hepken.',
        'config-profile' => 'Profil ar gwirioù implijer :',
-       'config-profile-wiki' => 'Wiki hengounel', # Fuzzy
+       'config-profile-wiki' => 'Wiki digor',
        'config-profile-no-anon' => 'Krouidigezh ur gont ret',
        'config-profile-fishbowl' => 'Embanner aotreet hepken',
        'config-profile-private' => 'Wiki prevez',
@@ -2865,7 +2858,7 @@ Marteze e vo ezhomm kefluniañ pelloc'h met gallout a rit o gweredekaat bremañ.
        'config-install-alreadydone' => "'''Diwallit''': Staliet hoc'h eus MediaWiki dija war a seblant hag emaoc'h o klask e staliañ c'hoazh.
 Kit d'ar bajenn war-lerc'h, mar plij.",
        'config-install-begin' => 'Pa vo bet pouezet ganeoc\'h war "{{int:config-continue}}"  e krogo staliadur MediaWiki.
-Pouezit war Kent mar fell deoc\'h cheñch tra pe dra.', # Fuzzy
+Pouezit war "{{int:config-back}}" mar fell deoc\'h cheñch tra pe dra.',
        'config-install-step-done' => 'graet',
        'config-install-step-failed' => "c'hwitet",
        'config-install-extensions' => 'En ur gontañ an astennoù',
@@ -2900,9 +2893,10 @@ Gwiriit hag-eñ e c'hall an implijer « $1 » skrivañ er brastres « $2 ».",
 
 == Kregiñ ganti ==
 
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]", # Fuzzy
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Roll an arventennoù kefluniañ]
+* [//www.mediawiki.org/wiki/Manual:FAQ FAG MediaWiki]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Roll ar c'haozeadennoù diwar-benn dasparzhoù MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Lec'hiañ MediaWiki en ho yezh", # Fuzzy
 );
 
 /** Bosnian (bosanski)
@@ -6298,7 +6292,8 @@ $messages['gd'] = array(
 == Toiseach tòiseachaidh ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings Liosta suidheachadh nan roghainnean]
 * [//www.mediawiki.org/wiki/Manual:FAQ CÀBHA MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liosta puist nan sgaoilidhean MediaWiki]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liosta puist nan sgaoilidhean MediaWiki]
+* [//www.mediawiki.org/wiki/Localisation#Translation_resources Cuir do chànan air MediaWiki]",
 );
 
 /** Galician (galego)
@@ -7762,16 +7757,13 @@ Změń ju jenož, jeli su přeswědčiwe přičiny za to.',
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-mysql' => '* $1 je primarny cil za MediaWiki a podpěruje so najlěpje ([http://www.php.net/manual/en/mysql.installation.php Nawod ke kompilowanju  PHP z  MySQL-podpěru])',
        'config-support-postgres' => '* $1 je popularny system datoweje banki zjawneho žórła jako alternatiwa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php nawod za kompilowanje PHP z podpěru PostgreSQL]). Móhło hišće někotre zmylki eksistować, a njeporuča so jón w produktiwnej wokolinje wužiwać.',
        'config-support-oracle' => '* $1 je komercielna předewzaćelska datowa banka. ([http://www.php.net/manual/en/oci8.installation.php Nawod za kompilowanje PHP z OCI8-podpěru])',
-       'config-support-ibm_db2' => '* $1 je komercielna předewzaćelska datowa banka. ([http://www.php.net/manual/en/ibm-db2.installation.php How to compile PHP with IBM DB2 support])',
        'config-header-mysql' => 'Nastajenja MySQL',
        'config-header-postgres' => 'Nastajenja PostgreSQL',
        'config-header-sqlite' => 'Nastajenja SQLite',
        'config-header-oracle' => 'Nastajenja Oracle',
-       'config-header-ibm_db2' => 'Nastajenja IBM DB2',
        'config-invalid-db-type' => 'Njepłaćiwy typ datoweje banki',
        'config-missing-db-name' => 'Dyrbiš hódnotu za "Mjeno datoweje banki" zapodać',
        'config-missing-db-host' => 'Dyrbiš hódnotu za "Database host" zapodać',
@@ -9367,7 +9359,6 @@ Pertimbangkan untuk menempatkan basis data di tempat lain, misalnya di <code>/va
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki mendukung sistem basis data berikut:
 
 $1
@@ -9377,12 +9368,10 @@ Jika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah i
        'config-support-postgres' => '* $1 adalah sistem basis data sumber terbuka populer sebagai alternatif untuk MySQL ([http://www.php.net/manual/en/pgsql.installation.php cara mengompilasi PHP dengan dukungan PostgreSQL]). Mungkin ada beberapa bug terbuka dan alternatif ini tidak direkomendasikan untuk dipakai dalam lingkungan produksi.',
        'config-support-sqlite' => '* $1 adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)',
        'config-support-oracle' => '* $1 adalah basis data komersial untuka perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])',
-       'config-support-ibm_db2' => '* $1 adalah basis data-perusahaan komersial.', # Fuzzy
        'config-header-mysql' => 'Pengaturan MySQL',
        'config-header-postgres' => 'Pengaturan PostgreSQL',
        'config-header-sqlite' => 'Pengaturan SQLite',
        'config-header-oracle' => 'Pengaturan Oracle',
-       'config-header-ibm_db2' => 'Pengaturan IBM DB2',
        'config-invalid-db-type' => 'Jenis basis data tidak sah',
        'config-missing-db-name' => 'Anda harus memasukkan nilai untuk "Nama basis data"',
        'config-missing-db-host' => 'Anda harus memasukkan nilai untuk "Inang basis data"',
@@ -9467,7 +9456,6 @@ Basis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.",
 Ini lebih efisien daripada modus UTF-8 MySQL dan memungkinkan Anda untuk menggunakan ragam penuh karakter Unicode.
 
 Dalam '''modus UTF-8''', MySQL akan tahu apa set karakter data dan dapat menampilkan dan mengubahnya sesuai keperluan, tetapi tidak akan mengizinkan Anda menyimpan karakter di atas [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane].",
-       'config-ibm_db2-low-db-pagesize' => "Basis data DB2 Anda tidak memiliki pagesize yang cukup untuk tablespace bawaan. Pagesize harus sama atau lebih dari '''32K'''.",
        'config-site-name' => 'Nama wiki:',
        'config-site-name-help' => 'Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.',
        'config-site-name-blank' => 'Masukkan nama situs.',
@@ -10187,7 +10175,6 @@ PostgreSQLを使用している場合、UNIXソケットで接続するにはこ
        'config-type-postgres' => 'PostgreSQL',
        'config-type-sqlite' => 'SQLite',
        'config-type-oracle' => 'Oracle',
-       'config-type-ibm_db2' => 'IBM DB2',
        'config-support-info' => 'MediaWiki は以下のデータベース システムに対応しています:
 
 $1
        'config-support-postgres' => '* $1は、MySQLの代替として人気があるオープンソースのデータベースシステムです ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQLに対応したPHPをコンパイルする方法])',
        'config-support-sqlite' => '* $1は、良くサポートされている、軽量データベースシステムです。([http://www.php.net/manual/ja/pdo.installation.php SQLiteに対応したPHPをコンパイルする方法]、PDOを使用)',
        'config-support-oracle' => '* $1は商業企業のデータベースです。([http://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])',
-       'config-support-ibm_db2' => '* $1 は商業企業のデータベースです。([http://www.php.net/manual/en/ibm-db2.installation.php IBM DB2に対応したPHPをコンパイルする方法])',
        'config-header-mysql' => 'MySQL の設定',
        'config-header-postgres' => 'PostgreSQL の設定',
        'config-header-sqlite' => 'SQLite の設定',
        'config-header-oracle' => 'Oracle の設定',
-       'config-header-ibm_db2' => 'IBM DB2 の設定',
        'config-invalid-db-type' => '無効なデータベースの種類',
        'config-missing-db-name' => '「データベース名」を入力してください',
        'config-missing-db-host' => '「データベースのホスト」を入力してください',
@@ -10297,13 +10282,13 @@ chmod a+w $3</pre>',
        'config-project-namespace-help' => "ウィキペディアの例に従い、多くのウィキは、コンテンツのページとは分離したポリシーページを「'''プロジェクトの名前空間'''」に持っています。
 この名前空間内のページのページ名はすべて特定の接頭辞で始まります。それをここで指定できます。
 通常、この接頭辞はウィキ名に基づきますが、「#」や「:」のような区切り文字を含めることはできません。",
-       'config-ns-invalid' => '"<nowiki>$1</nowiki>"のように指定された名前空間は無効です。
-違うプロジェクト名前空間を指定してください。',
+       'config-ns-invalid' => '指定した名前空間「<nowiki>$1</nowiki>」は無効です。
+別のプロジェクト名前空間を指定してください。',
        'config-admin-box' => '管理アカウント',
        'config-admin-name' => '名前:',
        'config-admin-password' => 'パスワード:',
        'config-admin-password-confirm' => 'パスワードの再入力:',
-       'config-admin-help' => '希望するユーザー名をここに入力してください (例: "Joe Bloggs")。
+       'config-admin-help' => '希望するユーザー名をここに入力してください (例:「Joe Bloggs」)。
 この名前でこのウィキにログインすることになります。',
        'config-admin-name-blank' => '管理者のユーザー名を入力してください。',
        'config-admin-name-invalid' => '指定したユーザー名「<nowiki>$1</nowiki>」は無効です。
@@ -10313,8 +10298,9 @@ chmod a+w $3</pre>',
        'config-admin-password-mismatch' => '入力された2つのパスワードが一致しません。',
        'config-admin-email' => 'メールアドレス:',
        'config-admin-email-help' => 'メールアドレスを入力してください。他の利用者からのメールの受け取り、パスワードのリセット、ウォッチリストに登録したページの更新通知に使用します。空欄のままにすることもできます。',
-       'config-admin-error-user' => '"<nowiki>$1</nowiki>"という名前の管理者を作成する際に内部エラーが発生しました。',
-       'config-admin-error-password' => '管理者"<nowiki>$1</nowiki>"のパスワードを設定する際に内部エラーが発生しました: <pre>$2</pre>',
+       'config-admin-error-user' => '「<nowiki>$1</nowiki>」という名前の管理者を作成する際に内部エラーが発生しました。',
+       'config-admin-error-password' => '管理者「<nowiki>$1</nowiki>」のパスワードを設定する際に内部エラーが発生しました: <pre>$2</pre>',
+       'config-admin-error-bademail' => '無効なメールアドレスを入力しました。',
        'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce リリース告知のメーリングリスト]を購読する。',
        'config-subscribe-help' => 'これは、リリースの告知 (重要なセキュリティに関する案内を含む) に使用される、流量が少ないメーリングリストです。
 このメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。',
@@ -19823,22 +19809,33 @@ $messages['xal'] = array(
  * @author පසිඳු කාවින්ද
  */
 $messages['yi'] = array(
+       'config-information' => 'אינפֿארמאציע',
        'config-back' => '→ צוריק',
+       'config-continue' => 'פֿארזעצן ←',
        'config-page-language' => 'שפראַך',
        'config-page-name' => 'נאָמען',
        'config-page-options' => 'ברירות',
+       'config-db-type' => 'דאטנבאזע טיפ:',
+       'config-db-name' => 'דאטנבאזע נאָמען:',
+       'config-project-namespace' => 'פראיעקט נאָמענטייל:',
        'config-ns-generic' => 'פראיעקט',
        'config-admin-name' => 'אײַער נאָמען:',
        'config-admin-password' => 'פאַסווארט:',
+       'config-admin-password-mismatch' => 'די צוויי פאסוועטרט איר האט איינגעגעבן שטימען נישט.',
        'config-admin-email' => 'בליצפּאָסט אַדרעס:',
+       'config-install-tables' => 'שאפן טאבעלעס',
+       'config-install-tables-exist' => "'''ווארענונג''': זעט אויס אז די מעדיעוויקי טאבעלעס עקזיסטירן שוין.
+איבערהיפן שאפֿן.",
+       'config-download-localsettings' => 'אראפלאדן <code>LocalSettings.php</code>',
        'config-help' => 'הילף',
+       'config-nofile' => 'מ\'האט נישט געקענט טרעפן די טעקע "$1". צי האט מען זי אויסגעמעקט?',
        'mainpagetext' => "'''מעדיעוויקי אינסטאלירט מיט דערפאלג.'''",
        'mainpagedocfooter' => "גיט זיך אן עצה מיט [//meta.wikimedia.org/wiki/Help:Contents באניצער'ס וועגווײַזער] פֿאר אינפֿארמאציע וויאזוי זיך באנוצן מיט וויקי ווייכוואַרג.
 
 == נוצליכע וועבלינקען פֿאַר אנהייבערס ==
 * [//www.mediawiki.org/wiki/Manual:Configuration_settings רשימה פון קאנפֿיגוראציעס]
 * [//www.mediawiki.org/wiki/Manual:FAQ אפֿט געפֿרעגטע שאלות]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce מעדיעוויקי באפֿרײַאונג פאסטליסטע]",
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce מעדיעוויקי באפֿרײַאונג פאסטליסטע]* [//www.mediawiki.org/wiki/Localisation#Translation_resources איבערזעצן מעדיעוויקי אין אײַער שפראך]",
 );
 
 /** Yoruba (Yorùbá)
index 325f894..850fb31 100644 (file)
@@ -88,7 +88,6 @@ abstract class Installer {
                'postgres',
                'oracle',
                'sqlite',
-               'ibm_db2',
        );
 
        /**
index 76c5b6a..bfcbc97 100644 (file)
@@ -76,6 +76,9 @@ class CSSJanus {
                'cursor_west' => null,
                'four_notation_quantity' => null,
                'four_notation_color' => null,
+               'box_shadow' => null,
+               'text_shadow1' => null,
+               'text_shadow2' => null,
                'bg_horizontal_percentage' => null,
                'bg_horizontal_percentage_x' => null,
        );
@@ -96,7 +99,7 @@ class CSSJanus {
                $patterns['ident'] = "-?{$patterns['nmstart']}{$patterns['nmchar']}*";
                $patterns['quantity'] = "{$patterns['num']}(?:\s*{$patterns['unit']}|{$patterns['ident']})?";
                $patterns['possibly_negative_quantity'] = "((?:-?{$patterns['quantity']})|(?:inherit|auto))";
-               $patterns['color'] = "(#?{$patterns['nmchar']}+)";
+               $patterns['color'] = "(#?{$patterns['nmchar']}+|(?:rgba?|hsla?)\([ \d.,%-]+\))";
                $patterns['url_chars'] = "(?:{$patterns['url_special_chars']}|{$patterns['nonAscii']}|{$patterns['escape']})*";
                $patterns['lookahead_not_open_brace'] = "(?!({$patterns['nmchar']}|\r?\n|\s|#|\:|\.|\,|\+|>)*?{)";
                $patterns['lookahead_not_closing_paren'] = "(?!{$patterns['url_chars']}?{$patterns['valid_after_uri_chars']}\))";
@@ -113,8 +116,11 @@ class CSSJanus {
                $patterns['rtl_in_url'] = "/{$patterns['lookbehind_not_letter']}(rtl){$patterns['lookahead_for_closing_paren']}/i";
                $patterns['cursor_east'] = "/{$patterns['lookbehind_not_letter']}([ns]?)e-resize/";
                $patterns['cursor_west'] = "/{$patterns['lookbehind_not_letter']}([ns]?)w-resize/";
-               $patterns['four_notation_quantity'] = "/{$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}/i";
-               $patterns['four_notation_color'] = "/(-color\s*:\s*){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}/i";
+               $patterns['four_notation_quantity'] = "/(:\s*){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s+){$patterns['possibly_negative_quantity']}(\s*[;}])/i";
+               $patterns['four_notation_color'] = "/(-color\s*:\s*){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s+){$patterns['color']}(\s*[;}])/i";
+               $patterns['box_shadow'] = "/(box-shadow\s*:\s*(?:inset\s*)?){$patterns['possibly_negative_quantity']}/i";
+               $patterns['text_shadow1'] = "/(text-shadow\s*:\s*){$patterns['color']}(\s*){$patterns['possibly_negative_quantity']}/i";
+               $patterns['text_shadow2'] = "/(text-shadow\s*:\s*){$patterns['possibly_negative_quantity']}/i";
                // The two regexes below are parenthesized differently then in the original implementation to make the
                // callback's job more straightforward
                $patterns['bg_horizontal_percentage'] = "/(background(?:-position)?\s*:\s*[^%]*?)(-?{$patterns['num']})(%\s*(?:{$patterns['quantity']}|{$patterns['ident']}))/";
@@ -161,6 +167,7 @@ class CSSJanus {
                $css = self::fixCursorProperties( $css );
                $css = self::fixFourPartNotation( $css );
                $css = self::fixBackgroundPosition( $css );
+               $css = self::fixShadows( $css );
 
                // Detokenize stuff we tokenized before
                $css = $comments->detokenize( $css );
@@ -257,8 +264,43 @@ class CSSJanus {
         * @return string
         */
        private static function fixFourPartNotation( $css ) {
-               $css = preg_replace( self::$patterns['four_notation_quantity'], '$1$2$7$4$5$6$3', $css );
-               $css = preg_replace( self::$patterns['four_notation_color'], '$1$2$3$8$5$6$7$4', $css );
+               $css = preg_replace( self::$patterns['four_notation_quantity'], '$1$2$3$8$5$6$7$4$9', $css );
+               $css = preg_replace( self::$patterns['four_notation_color'], '$1$2$3$8$5$6$7$4$9', $css );
+
+               return $css;
+       }
+
+       /**
+        * Negates horizontal offset in box-shadow and text-shadow rules.
+        *
+        * @param $css string
+        * @return string
+        */
+       private static function fixShadows( $css ) {
+               // Flips the sign of a CSS value, possibly with a unit.
+               // (We can't just negate the value with unary minus due to the units.)
+               $flipSign = function ( $cssValue ) {
+                       // Don't mangle zeroes
+                       if ( intval( $cssValue ) === 0 ) {
+                               return $cssValue;
+                       } elseif ( $cssValue[0] === '-' ) {
+                               return substr( $cssValue, 1 );
+                       } else {
+                               return "-" . $cssValue;
+                       }
+               };
+
+               $css = preg_replace_callback( self::$patterns['box_shadow'], function ( $matches ) use ( $flipSign ) {
+                       return $matches[1] . $flipSign( $matches[2] );
+               }, $css );
+
+               $css = preg_replace_callback( self::$patterns['text_shadow1'], function ( $matches ) use ( $flipSign ) {
+                       return $matches[1] . $matches[2] . $matches[3] . $flipSign( $matches[4] );
+               }, $css );
+
+               $css = preg_replace_callback( self::$patterns['text_shadow2'], function ( $matches ) use ( $flipSign ) {
+                       return $matches[1] . $flipSign( $matches[2] );
+               }, $css );
 
                return $css;
        }
index eb8779f..4d3565d 100644 (file)
@@ -439,7 +439,7 @@ class LogFormatter {
                $entry = $this->entry;
                $params = $this->extractParameters();
                $params[0] = Message::rawParam( $this->getPerformerElement() );
-               $params[1] = $entry->getPerformer()->getName();
+               $params[1] = $this->canView( LogPage::DELETED_USER ) ? $entry->getPerformer()->getName() : '';
                $params[2] = Message::rawParam( $this->makePageLink( $entry->getTarget() ) );
 
                // Bad things happens if the numbers are not in correct order
diff --git a/includes/search/SearchIBM_DB2.php b/includes/search/SearchIBM_DB2.php
deleted file mode 100644 (file)
index ebc9d5a..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-<?php
-/**
- * IBM DB2 search engine
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Search
- */
-
-/**
- * Search engine hook base class for IBM DB2
- * @ingroup Search
- */
-class SearchIBM_DB2 extends SearchEngine {
-
-       /**
-        * Creates an instance of this class
-        * @param $db DatabaseIbm_db2: database object
-        */
-       function __construct( $db ) {
-               parent::__construct( $db );
-       }
-
-       /**
-        * Perform a full text search query and return a result set.
-        *
-        * @param $term String: raw search term
-        * @return SqlSearchResultSet
-        */
-       function searchText( $term ) {
-               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), true ) ) );
-               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
-       }
-
-       /**
-        * Perform a title-only search query and return a result set.
-        *
-        * @param $term String: taw search term
-        * @return SqlSearchResultSet
-        */
-       function searchTitle( $term ) {
-               $resultSet = $this->db->resultObject( $this->db->query( $this->getQuery( $this->filter( $term ), false ) ) );
-               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
-       }
-
-
-       /**
-        * Return a partial WHERE clause to exclude redirects, if so set
-        * @return String
-        */
-       function queryRedirect() {
-               if ( $this->showRedirects ) {
-                       return '';
-               } else {
-                       return 'AND page_is_redirect=0';
-               }
-       }
-
-       /**
-        * Return a partial WHERE clause to limit the search to the given namespaces
-        * @return String
-        */
-       function queryNamespaces() {
-               if( is_null( $this->namespaces ) )
-                       return '';
-               $namespaces = implode( ',', $this->namespaces );
-               if ( $namespaces == '' ) {
-                       $namespaces = '0';
-               }
-               return 'AND page_namespace IN (' . $namespaces . ')';
-       }
-
-       /**
-        * Return a LIMIT clause to limit results on the query.
-        * @return String
-        */
-       function queryLimit( $sql ) {
-               return $this->db->limitResult( $sql, $this->limit, $this->offset );
-       }
-
-       /**
-        * Does not do anything for generic search engine
-        * subclasses may define this though
-        * @return String
-        */
-       function queryRanking( $filteredTerm, $fulltext ) {
-               // requires Net Search Extender or equivalent
-               // return ' ORDER BY score(1)';
-               return '';
-       }
-
-       /**
-        * Construct the full SQL query to do the search.
-        * The guts shoulds be constructed in queryMain()
-        * @param $filteredTerm String
-        * @param $fulltext Boolean
-        * @return String
-        */
-       function getQuery( $filteredTerm, $fulltext ) {
-               return $this->queryLimit( $this->queryMain( $filteredTerm, $fulltext ) . ' ' .
-                       $this->queryRedirect() . ' ' .
-                       $this->queryNamespaces() . ' ' .
-                       $this->queryRanking( $filteredTerm, $fulltext ) . ' ' );
-       }
-
-
-       /**
-        * Picks which field to index on, depending on what type of query.
-        * @param $fulltext Boolean
-        * @return String
-        */
-       function getIndexField( $fulltext ) {
-               return $fulltext ? 'si_text' : 'si_title';
-       }
-
-       /**
-        * Get the base part of the search query.
-        *
-        * @param $filteredTerm String
-        * @param $fulltext Boolean
-        * @return String
-        */
-       function queryMain( $filteredTerm, $fulltext ) {
-               $match = $this->parseQuery( $filteredTerm, $fulltext );
-               $page = $this->db->tableName( 'page' );
-               $searchindex = $this->db->tableName( 'searchindex' );
-               return 'SELECT page_id, page_namespace, page_title ' .
-                       "FROM $page,$searchindex " .
-                       'WHERE page_id=si_page AND ' . $match;
-       }
-
-       /** @todo document
-        * @return string
-        */
-       function parseQuery( $filteredText, $fulltext ) {
-               global $wgContLang;
-               $lc = SearchEngine::legalSearchChars();
-               $this->searchTerms = array();
-
-               # @todo FIXME: This doesn't handle parenthetical expressions.
-               $m = array();
-               $q = array();
-
-               if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
-                               $filteredText, $m, PREG_SET_ORDER ) ) {
-                       foreach( $m as $terms ) {
-
-                               // Search terms in all variant forms, only
-                               // apply on wiki with LanguageConverter
-                               $temp_terms = $wgContLang->autoConvertToAllVariants( $terms[2] );
-                               if( is_array( $temp_terms )) {
-                                       $temp_terms = array_unique( array_values( $temp_terms ));
-                                       foreach( $temp_terms as $t )
-                                               $q[] = $terms[1] . $wgContLang->normalizeForSearch( $t );
-                               }
-                               else
-                                       $q[] = $terms[1] . $wgContLang->normalizeForSearch( $terms[2] );
-
-                               if ( !empty( $terms[3] ) ) {
-                                       $regexp = preg_quote( $terms[3], '/' );
-                                       if ( $terms[4] )
-                                               $regexp .= "[0-9A-Za-z_]+";
-                               } else {
-                                       $regexp = preg_quote(str_replace( '"', '', $terms[2]), '/' );
-                               }
-                               $this->searchTerms[] = $regexp;
-                       }
-               }
-
-               $searchon = $this->db->strencode( join( ',', $q ) );
-               $field = $this->getIndexField( $fulltext );
-
-               // requires Net Search Extender or equivalent
-               //return " CONTAINS($field, '$searchon') > 0 ";
-
-               return " lcase($field) LIKE lcase('%$searchon%')";
-       }
-
-       /**
-        * Create or update the search index record for the given page.
-        * Title and text should be pre-processed.
-        *
-        * @param $id Integer
-        * @param $title String
-        * @param $text String
-        */
-       function update( $id, $title, $text ) {
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->replace( 'searchindex',
-                       array( 'si_page' ),
-                       array(
-                               'si_page' => $id,
-                               'si_title' => $title,
-                               'si_text' => $text
-                       ), 'SearchIBM_DB2::update' );
-               // ?
-               //$dbw->query( "CALL ctx_ddl.sync_index('si_text_idx')" );
-               //$dbw->query( "CALL ctx_ddl.sync_index('si_title_idx')" );
-       }
-
-       /**
-        * Update a search index record's title only.
-        * Title should be pre-processed.
-        *
-        * @param $id Integer
-        * @param $title String
-        */
-       function updateTitle( $id, $title ) {
-               $dbw = wfGetDB( DB_MASTER );
-
-               $dbw->update( 'searchindex',
-                       array( 'si_title' => $title ),
-                       array( 'si_page'  => $id ),
-                       'SearchIBM_DB2::updateTitle',
-                       array() );
-       }
-}
index 0499e57..6e8e634 100644 (file)
@@ -53,7 +53,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                $opts->add( 'hidepatrolled', $this->getUser()->getBoolOption( 'newpageshidepatrolled' ) );
                $opts->add( 'hidebots', false );
                $opts->add( 'hideredirs', true );
-               $opts->add( 'limit', (int)$this->getUser()->getOption( 'rclimit' ) );
+               $opts->add( 'limit', $this->getUser()->getIntOption( 'rclimit' ) );
                $opts->add( 'offset', '' );
                $opts->add( 'namespace', '0' );
                $opts->add( 'username', '' );
index 7ea3a94..2cc5f9e 100644 (file)
@@ -42,8 +42,8 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        public function getDefaultOptions() {
                $opts = new FormOptions();
 
-               $opts->add( 'days', (int)$this->getUser()->getOption( 'rcdays' ) );
-               $opts->add( 'limit', (int)$this->getUser()->getOption( 'rclimit' ) );
+               $opts->add( 'days', $this->getUser()->getIntOption( 'rcdays' ) );
+               $opts->add( 'limit', $this->getUser()->getIntOption( 'rclimit' ) );
                $opts->add( 'from', '' );
 
                $opts->add( 'hideminor', $this->getUser()->getBoolOption( 'hideminor' ) );
index afc41bf..b6578a3 100644 (file)
@@ -939,8 +939,8 @@ class SpecialUndelete extends SpecialPage {
                        // source view for textual content
                        $sourceView = Xml::element( 'textarea', array(
                                'readonly' => 'readonly',
-                               'cols' => intval( $user->getOption( 'cols' ) ),
-                               'rows' => intval( $user->getOption( 'rows' ) ) ),
+                               'cols' => $user->getIntOption( 'cols' ),
+                               'rows' => $user->getIntOption( 'rows' ) ),
                                $content->getNativeData() . "\n" );
 
                        $previewButton = Xml::element( 'input', array(
index c1505a0..a37f5fb 100644 (file)
@@ -953,7 +953,7 @@ class UploadForm extends HTMLForm {
                                        ? 'filereuploadsummary'
                                        : 'fileuploadsummary',
                                'default' => $this->mComment,
-                               'cols' => intval( $this->getUser()->getOption( 'cols' ) ),
+                               'cols' => $this->getUser()->getIntOption( 'cols' ),
                                'rows' => 8,
                        )
                );
index 27701d4..634d06f 100644 (file)
@@ -747,7 +747,7 @@ class LoginForm extends SpecialPage {
                        case self::SUCCESS:
                                # We've verified now, update the real record
                                $user = $this->getUser();
-                               if( (bool)$this->mRemember != (bool)$user->getOption( 'rememberpassword' ) ) {
+                               if( (bool)$this->mRemember != $user->getBoolOption( 'rememberpassword' ) ) {
                                        $user->setOption( 'rememberpassword', $this->mRemember ? 1 : 0 );
                                        $user->saveSettings();
                                } else {
index bf2d08b..7114fc9 100644 (file)
@@ -226,7 +226,7 @@ class SpecialWatchlist extends SpecialPage {
 
                # Toggle watchlist content (all recent edits or just the latest)
                if( $values['extended'] ) {
-                       $limitWatchlist = intval( $user->getOption( 'wllimit' ) );
+                       $limitWatchlist = $user->getIntOption( 'wllimit' );
                        $usePage = false;
                } else {
                        # Top log Ids for a page are not stored
index bf5c487..2483e58 100644 (file)
  * @ingroup Templates
  */
 
+if ( !defined( 'MEDIAWIKI' ) ) {
+        die( "NoLocalSettings.php is not a valid MediaWiki entry point\n" );
+}
+
 if ( !isset( $wgVersion ) ) {
        $wgVersion = 'VERSION';
 }
index 3a37f11..49713fc 100644 (file)
@@ -239,7 +239,7 @@ abstract class UploadBase {
         * Get the base 36 SHA1 of the file
         * @return string
         */
-       protected function getTempFileSha1Base36() {
+       public function getTempFileSha1Base36() {
                return FSFile::getSha1Base36FromPath( $this->mTempPath );
        }
 
index 71ee96b..fd2416d 100644 (file)
@@ -133,7 +133,7 @@ class UploadFromStash extends UploadBase {
         * Get the base 36 SHA1 of the file
         * @return string
         */
-       protected function getTempFileSha1Base36() {
+       public function getTempFileSha1Base36() {
                return $this->mFileProps['sha1'];
        }
 
diff --git a/languages/classes/LanguageLt.php b/languages/classes/LanguageLt.php
deleted file mode 100644 (file)
index ac4ebda..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Lithuanian (Lietuvių) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Lithuanian (Lietuvių)
- *
- * @ingroup Language
- */
-class LanguageLt extends Language {
-       /* Word forms (with examples):
-               1 - vienas (1) lapas, dvidešimt vienas (21) lapas
-               2 - trys (3) lapai
-               3 - penkiolika (15) lapų
-       */
-
-       /**
-        * Lithuanian plural forms as per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#lt
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // if the number is not mentioned in message, then use $form[0] for singular and $form[1] for plural or zero
-               if ( count( $forms ) === 2 ) return $count == 1 ? $forms[0] : $forms[1];
-
-               $forms = $this->preConvertPlural( $forms, 3 );
-               // Form[0] if n mod 10 is 1 and n mod 100 not in 11..19;
-               if ( $count % 10 == 1 && $count % 100 != 11 ) return $forms[0];
-               // Forms[1] if n mod 10 in 2..9 and n mod 100 not in 11..19;
-               if ( $count % 10 >= 2 && ( $count % 100 < 10 || $count % 100 >= 20 ) ) return $forms[1];
-               return $forms[2];
-       }
-}
diff --git a/languages/classes/LanguageLv.php b/languages/classes/LanguageLv.php
deleted file mode 100644 (file)
index e76f6f9..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Latvian (Latviešu) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @author Niklas Laxström
- * @copyright Copyright © 2006, Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- * @ingroup Language
- */
-
-/**
- * Latvian (Latviešu)
- *
- * @ingroup Language
- */
-class LanguageLv extends Language {
-       /**
-        * Plural form transformations. Using the first form for words with the last digit 1, but not for words with the last digits 11, and the second form for all the others.
-        *
-        * Example: {{plural:{{NUMBEROFARTICLES}}|article|articles}}
-        *
-        * @param $count Integer
-        * @param $forms Array
-        * @return String
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // @todo FIXME: CLDR defines 3 plural forms instead of 2.  Form for 0 is missing.
-               //        http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#lv
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( ( $count % 10 == 1 ) && ( $count % 100 != 11 ) ) ? $forms[0] : $forms[1];
-       }
-}
index 25b82cc..7912159 100644 (file)
@@ -15,6 +15,7 @@
  * @author Ali1
  * @author Alnokta
  * @author Antime
+ * @author Arjanizary
  * @author Avocato
  * @author Bassem JARKAS
  * @author Chaos
@@ -566,18 +567,18 @@ $messages = array(
 'october-gen' => 'أكتوبر',
 'november-gen' => 'نوفمبر',
 'december-gen' => 'ديسمبر',
-'jan' => 'Ù\8aÙ\86اÙ\8aر',
-'feb' => 'فبراير',
-'mar' => 'مارس',
-'apr' => 'أبريل',
-'may' => 'مايو',
-'jun' => 'يونيو',
-'jul' => 'يوليو',
-'aug' => 'أغسطس',
-'sep' => 'سبتÙ\85بر',
-'oct' => 'Ø£Ù\83تÙ\88بر',
-'nov' => 'نوفمبر',
-'dec' => 'ديسمبر',
+'jan' => 'Ù\83اÙ\86Ù\88Ù\86 Ø§Ù\84ثاÙ\86Ù\8a',
+'feb' => 'شباط',
+'mar' => 'آذار',
+'apr' => 'نيسان',
+'may' => 'أيار',
+'jun' => 'حزيران',
+'jul' => 'تموز',
+'aug' => 'آب',
+'sep' => 'Ø£Ù\8aÙ\84Ù\88Ù\84',
+'oct' => 'تشرÙ\8aÙ\86 Ø§Ù\84Ø£Ù\88Ù\84',
+'nov' => 'تشرين الثاني',
+'dec' => 'كانون الأول',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|لا تصنيف|تصنيف|تصنيفان|تصنيفات}}',
@@ -986,7 +987,7 @@ $2',
 'loginlanguagelabel' => 'اللغة: $1',
 'suspicious-userlogout' => 'رفض طلب خروجك لأنه يبدو كأنه أرسل عن طريق متصفح معطوب أو وسيط تخزين.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "خطأ غير معروف في وظيفة البريد PHP's mail()",
 'user-mail-no-addy' => 'لقد حاولت إرسال بريد إلكتروني دون عنوان بريد إلكتروني.',
 'user-mail-no-body' => 'محاول ارسال بريد إلكتروني فارغ أو ذو نص قصير.',
@@ -1682,7 +1683,7 @@ $1",
 'prefs-displaywatchlist' => 'خصائص العرض',
 'prefs-diffs' => 'فروقات',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'يبدو أن عنوان البريد الإلكتروني صالح',
 'email-address-validity-invalid' => 'أدخل عنوان بريد إلكتروني صالح',
 
@@ -2287,6 +2288,10 @@ $1',
 ربما ينبغي أن تصل إلى صفحة أكثر ملائمة. <br />
 تعامل الصفحة كصفحة توضيح إذا كان بها قالب موجود في [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop' => 'صفحات مع خاصية الصفحة',
+'pageswithprop-text' => 'تسرد هذه الصفحة الصفحات التي تستخدم خاصية صفحة معينة.',
+'pageswithprop-prop' => 'اسم الخاصية:',
+
 'doubleredirects' => 'تحويلات مزدوجة',
 'doubleredirectstext' => 'هذه الصفحة تعرض الصفحات التي تحول إلى صفحات تحويل أخرى.
 كل سطر يحتوي على وصلات للتحويلة الأولى والثانية وهدف التحويلة الثانية، والذي عادة ما يشير إلى صفحة الهدف "الحقيقية"، التي من المفترض أن تحول إليها التحويلة الأولى.
@@ -2479,7 +2484,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'يمكنه إضافة كل المجموعات إلى حسابه الخاص',
 'listgrouprights-removegroup-self-all' => 'يمكنه إزالة كل المجموعات من حسابه الخاص',
 
-# E-mail user
+# Email user
 'mailnologin' => 'لا يوجد عنوان للإرسال',
 'mailnologintext' => 'يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.',
 'emailuser' => 'إرسال رسالة لهذا المستخدم',
@@ -3183,6 +3188,7 @@ $1',
 'import-error-interwiki' => 'تعذر أستيراد الصفحة "$1" بسبب أن إسمها محجوز للربط الخارجي (interwiki).',
 'import-error-special' => 'صفحة "$1" لم تستورد لأنها تنتمي إلى نطاق خاص يمنع الصفحات.',
 'import-error-invalid' => 'تعذر أستيراد الصفحة "$1" بسبب أن إسمها غير صحيح.',
+'import-error-unserialize' => 'مراجعة  $2  من صفحة " $1 " لا يمكن أن يكون أونسيرياليزيد. وأفيد المراجعة استخدام طراز المحتوى  $3  تسلسل ك  $4 .',
 'import-options-wrong' => 'خطأ {{PLURAL:$2|خيار|خيارات}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'إن عنوان الصفحة الجذر المعطاة هي ذات عنوان غير صالح.',
 'import-rootpage-nosubpage' => 'إن النطاق "$1" لصفحة الجذر لا يسمح بصفحات فرعية.',
@@ -3934,7 +3940,7 @@ $1',
 'monthsall' => 'الكل',
 'limitall' => 'الكل',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'تأكيد عنوان البريد الإلكتروني',
 'confirmemail_noemail' => 'ليس لديك عنوان بريد إلكتروني صحيح مسجل في [[Special:Preferences|تفضيلاتك]].',
 'confirmemail_text' => '{{SITENAME}} يجب تأكيد عنوانك الإلكتروني قبل استخدام خصائص البريد الإلكتروني.
@@ -4433,4 +4439,7 @@ $5
 'duration-centuries' => '{{PLURAL: $1||قرن واحد|قرنان|$1 قرون|$1 قرنًا|$1 قرن}}',
 'duration-millennia' => '{{PLURAL: $1||ألفية واحدة|ألفيتان|$1 ألفيات|$1 ألفية}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'صفحات مع خاصية الصفحة',
+'pageswithprop-submit' => 'اذهب',
 );
index a992f44..741d427 100644 (file)
@@ -1188,7 +1188,7 @@ $1',
 'listgrouprights-removegroup-self' => 'ܠܚܝ {{PLURAL:$2|ܟܢܘܫܬܐ|ܟܢܘܫܬ̈ܐ}} ܡܢ ܚܘܫܒܢܗ ܕܝܠܢܝܐ: $1',
 'listgrouprights-removegroup-self-all' => 'ܠܚܝ ܟܠ ܟܢܘܫܬ̈ܐ ܡܢ ܚܘܫܒܢܗ ܕܝܠܢܝܐ',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ܠܝܬ ܡܘܢܥܐ ܠܫܘܕܪܐ',
 'emailuser' => 'ܫܕܪ ܐܓܪܬܐ ܠܗܢܐ ܡܦܠܚܢܐ',
 'emailpage' => 'ܫܕܪ ܐܓܪܬܐ ܒܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܠܡܦܠܚܢܐ',
@@ -1698,7 +1698,7 @@ $1',
 'monthsall' => 'ܟܠ',
 'limitall' => 'ܟܠ',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ܫܪܪ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 'confirmemail_subject' => 'ܫܘܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܡܢ {{SITENAME}}',
 'confirmemail_invalidated' => 'ܫܘܪܪܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܐܬܒܛܠ',
@@ -1821,9 +1821,9 @@ $1',
 'logentry-move-move_redir-noredirect' => '$1 ܫܢܐ ܦܐܬܐ ܕ $3 ܠ $4 ܕܐܝܬܘܗܝ ܦܐܬܐ ܕܨܘܝܒܐ ܘܕܠܐ ܫܒܩܐ ܦܐܬܐ ܕܨܘܝܒܐ',
 'logentry-patrol-patrol' => '$1 ܫܘܕܥ ܬܢܝܬܐ $4 ܕܦܐܬܐ $3 ܟܪܝܟܬܐ',
 'logentry-patrol-patrol-auto' => '$1 ܝܬܐܝܬ ܫܘܕܥ ܬܢܝܬܐ $4 ܕܦܐܬܐ $3 ܟܪܝܟܬܐ',
-'logentry-newusers-newusers' => 'Ü\9aÜ\98Ü«Ü\92Ü¢Ü\90 Ü\95ܡܦܠÜ\9aÜ¢Ü\90 $1 Ü\90ܬÜ\92ܪÜ\90',
-'logentry-newusers-create' => 'Ü\9aÜ\98Ü«Ü\92Ü¢Ü\90 Ü\95ܡܦܠÜ\9aÜ¢Ü\90 $1 Ü\90ܬÜ\92ܪÜ\90',
-'logentry-newusers-create2' => 'Ü\9aÜ\98Ü«Ü\92Ü¢Ü\90 Ü\95ܡܦܠÜ\9aÜ¢Ü\90 $3 Ü\90ܬÜ\92ܪÜ\90 ܒܝܕ $1',
+'logentry-newusers-newusers' => 'Ü\9aÜ\98Ü«Ü\92Ü¢Ü\90 Ü\95ܡܦܠÜ\9aÜ¢Ü\90 $1 Ü\90ܬܬÜ\9fÜ\9dÜ¢',
+'logentry-newusers-create' => 'Ü\9aÜ\98Ü«Ü\92Ü¢Ü\90 Ü\95ܡܦܠÜ\9aÜ¢Ü\90 $1 Ü\90ܬܬÜ\9fÜ\9dÜ¢',
+'logentry-newusers-create2' => 'Ü\9aÜ\98Ü«Ü\92Ü¢Ü\90 Ü\95ܡܦܠÜ\9aÜ¢Ü\90 $3 Ü\90ܬܬÜ\9fÜ\9dÜ¢ ܒܝܕ $1',
 'logentry-newusers-autocreate' => 'ܚܘܫܒܢܐ $1 ܐܬܒܪܝ ܝܬܐܝܬ',
 'rightsnone' => '(ܠܐ ܡܕܡ)',
 
index f71437c..ae21f24 100644 (file)
@@ -575,7 +575,7 @@ Por favor espera enantes d'intentalo otra vuelta.",
 'loginlanguagelabel' => 'Llingua: $1',
 'suspicious-userlogout' => "Negósete'l pidimientu de desconexón porque paez que vien d'un restolador frañíu o d'un proxy de caché.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Fallu desconocíu na función mail() de PHP.',
 'user-mail-no-addy' => 'Intentasti unviar un corréu electrónicu ensin direición.',
 'user-mail-no-body' => "Trató d'unviar un corréu electrónicu con un cuerpu baleru o curtiu enforma.",
@@ -1272,7 +1272,7 @@ Esta información sedrá pública.",
 'prefs-displaywatchlist' => 'Opciones de vista',
 'prefs-diffs' => 'Diferencies',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'La direición de corréu paez válida',
 'email-address-validity-invalid' => 'Escribi una direición de corréu válida',
 
@@ -1874,6 +1874,10 @@ Alcuérdate de comprobar otros enllaces a les plantíes enantes d'esborrales.",
 'disambiguations-text' => "Les siguientes páxines contienen polo menos un enllaz a una '''páxina de dixebra'''. En cuenta d'ello habríen enllaciar a una páxina más apropiada.<br />
 Una páxina tratase como una páxina de dixebra si usa una plantía que tea enllaciada dende [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop' => 'Páxines con una propiedá de páxina',
+'pageswithprop-text' => "Esta páxina llista les páxines qu'usen una propiedá de páxina determinada.",
+'pageswithprop-prop' => 'Nome de la propiedá:',
+
 'doubleredirects' => 'Redireiciones dobles',
 'doubleredirectstext' => 'Esta páxina llista páxines que redireicionen a otres páxines de redireición.
 Cada filera contién enllaces a la primer y segunda redireición, asina como al oxetivu de la segunda redireición, que de vezu ye la páxina oxetivu "real", onde tendría d\'empobinar la primer redireición.
@@ -2064,7 +2068,7 @@ Pue haber [[{{MediaWiki:Listgrouprights-helppage}}|información adicional]] toca
 'listgrouprights-addgroup-self-all' => 'Amestar tolos grupos a la cuenta propia',
 'listgrouprights-removegroup-self-all' => 'Desaniciar tolos grupos de la cuenta propia',
 
-# E-mail user
+# Email user
 'mailnologin' => "Ensin direición d'unviu",
 'mailnologintext' => 'Has tar [[Special:UserLogin|identificáu]]
 y tener una direición de corréu válida nes tos [[Special:Preferences|preferencies]]
@@ -3472,7 +3476,7 @@ Los demás tarán anubríos de mou predetermináu.
 'monthsall' => 'toos',
 'limitall' => 'toos',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar direición de corréu',
 'confirmemail_noemail' => "Nun tienes una direición de corréu válida nes tos [[Special:Preferences|preferencies d'usuariu]].",
 'confirmemail_text' => "{{SITENAME}} requier que valides la to direición de corréu enantes d'usar les
@@ -3879,4 +3883,7 @@ D\'otra miente, pues usar el formulariu cenciellu d\'abaxo. El to comentariu apa
 'duration-centuries' => '$1 {{PLURAL:$1|sieglu|sieglos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenios}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Páxines con una propiedá de páxina',
+'pageswithprop-submit' => 'Dir',
 );
index 5c69c17..86f18f1 100644 (file)
@@ -764,7 +764,7 @@ $2',
 'loginlanguagelabel' => 'Мова: $1',
 'suspicious-userlogout' => 'Ваш запыт на выхад з сыстэмы быў адхілены, таму што выглядае, што ён быў дасланы пашкоджаным браўзэрам альбо кэшаваным проксі-сэрвэрам.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Узьнікла невядомая памылка ў функцыі PHP mail()',
 'user-mail-no-addy' => 'Спроба даслаць электронны ліст без адрасу дастаўкі',
 'user-mail-no-body' => 'Спроба даслаць ліст з пустым або надзвычай кароткім зьместам.',
@@ -1443,7 +1443,7 @@ $1",
 'prefs-displaywatchlist' => 'Налады паказу',
 'prefs-diffs' => 'Розьніцы вэрсіяў',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Выглядае слушна',
 'email-address-validity-invalid' => 'Неабходны слушны адрас!',
 
@@ -2027,6 +2027,10 @@ $1',
 Замест гэтага, яны павінны спасылацца на пэўныя старонкі.<br />
 Старонка лічыцца шматзначнай, калі яна ўтрымлівае шаблён назва якога знаходзіцца на старонцы [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop' => 'Старонкі з уласьцівасьцямі старонак',
+'pageswithprop-text' => 'На гэтай старонцы адлюстроўваюцца старонкі, якія ўжываюць пэўныя ўласьцівасьці старонак',
+'pageswithprop-prop' => 'Імя ўласьцівасьці:',
+
 'doubleredirects' => 'Двайныя перанакіраваньні',
 'doubleredirectstext' => 'На гэтай старонцы пададзены сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама мэтавую старонку другога перанакіраваньня, якая звычайна зьяўляецца «сапраўднай» мэтавай старонкай, куды павіннае спасылацца першае перанакіраваньне.
 <del>Закрэсьленыя</del> элемэнты былі выпраўленыя.',
@@ -2217,7 +2221,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Можа дадаць уласны рахунак да ўсіх груп',
 'listgrouprights-removegroup-self-all' => 'Можа выдаліць уласны рахунак з ўсіх груп',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Няма адрасу атрымальніка',
 'mailnologintext' => 'Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]] і мець пацьверджаны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], каб дасылаць лісты іншым удзельнікам.',
 'emailuser' => 'Даслаць ліст',
@@ -3599,7 +3603,7 @@ $1',
 'monthsall' => 'усе',
 'limitall' => 'усе',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Пацьвердзіць адрас электроннай пошты',
 'confirmemail_noemail' => 'Вы не пазначылі слушны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах удзельніка]].',
 'confirmemail_text' => '{{SITENAME}} патрабуе, каб Вы пацьвердзілі Ваш адрас электроннай пошты перад ўжываньнем магчымасьцяў электроннай пошты. Актывізуйце кнопку ніжэй, каб даслаць ліст з пацьверджаньнем на Ваш адрас. Ліст будзе ўтрымліваць спасылку з кодам; загрузіце спасылку ў Вашым браўзэры, каб пацьвердзіць, што Ваш адрас электроннай пошты зьяўляецца слушным.',
@@ -4010,4 +4014,7 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'duration-centuries' => '$1 {{PLURAL:$1|стагодзьдзе|стагодзьдзі|стагодзьдзяў}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячагодзьдзе|тысячагодзьдзі|тысячагодзьдзяў}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Старонкі з уласьцівасьцямі старонак',
+'pageswithprop-submit' => 'Паказаць',
 );
index e2cfcec..03eafd8 100644 (file)
@@ -731,7 +731,7 @@ $2',
 'loginlanguagelabel' => 'Език: $1',
 'suspicious-userlogout' => 'Заявката ви за излизане от системата беше отхвърлена, тъй като изглежда е била изпратена погрешка от браузъра или кеширащото прокси.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Неизвестна грешка в mail() функцията на PHP',
 'user-mail-no-addy' => 'Опитвате се да изпратите е-писмо без да е посочен адрес за електронна поща.',
 
@@ -1396,7 +1396,7 @@ $1",
 'prefs-displaywatchlist' => 'Видими настройки',
 'prefs-diffs' => 'Разлики',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Адресът за е-поща изглежда валиден',
 'email-address-validity-invalid' => 'Въведете валиден адрес за е-поща',
 
@@ -2108,7 +2108,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Може да добавя всички групи към своята сметка',
 'listgrouprights-removegroup-self-all' => 'Може да премахва всички групи от собствената сметка',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Няма електронна поща',
 'mailnologintext' => 'Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.',
 'emailuser' => 'Писмо до потребителя',
@@ -3380,7 +3380,7 @@ $1',
 'monthsall' => 'всички',
 'limitall' => 'всички',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Потвърждаване на адрес за електронна поща',
 'confirmemail_noemail' => 'Не сте посочили валиден адрес за електронна поща в [[Special:Preferences|настройки си]].',
 'confirmemail_text' => '{{SITENAME}} изисква да потвърдите адреса си за електронна поща преди да използвате възможностите за е-поща. Натиснете долния бутон, за да ви бъде изпратено писмо, съдържащо специално генерирана препратка, чрез която ще можете да потвърдите валидността на адреса си.',
index 2b2a528..6f30fdb 100644 (file)
@@ -581,7 +581,7 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'allpagessubmit' => 'जाईं',
 'allpagesprefix' => 'उपसर्ग के साथे पन्ना प्रदर्शन:',
 
-# E-mail user
+# Email user
 'emailuser' => 'ई प्रयोगकर्ता के ईमेल करीं',
 
 # Watchlist
@@ -749,7 +749,7 @@ Legend: '''({{int:cur}})''' = हाल के संशोधन के सा
 'monthsall' => 'सब',
 'limitall' => 'सब',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'इ-मेल पता कन्फर्म करीं',
 
 # Special:SpecialPages
index 0098433..fe75026 100644 (file)
@@ -291,7 +291,7 @@ $messages = array(
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Rummad |Rummad }}',
 'category_header' => 'Niver a bennadoù er rummad "$1"',
-'subcategories' => 'Isrummad',
+'subcategories' => 'Isrummad',
 'category-media-header' => 'Restroù liesvedia er rummad "$1"',
 'category-empty' => "''N'eus na pajenn na media ebet er rummad-mañ evit ar mare.''",
 'hidden-categories' => '{{PLURAL:$1|Rummad kuzhet|Rummad kuzhet}}',
@@ -450,7 +450,7 @@ $1',
 'youhavenewmessagesmulti' => "Kemennoù nevez zo ganeoc'h war $1",
 'editsection' => 'kemmañ',
 'editold' => 'kemmañ',
-'viewsourceold' => 'gwelet ar vammenn',
+'viewsourceold' => 'sellet ouzh tarzh an destenn',
 'editlink' => 'kemmañ',
 'viewsourcelink' => 'gwelet an tarzh',
 'editsectionhint' => 'Kemmañ ar rann : $1',
@@ -678,7 +678,7 @@ Gortozit a-raok klask en-dro.",
 'loginlanguagelabel' => 'Yezh : $1',
 'suspicious-userlogout' => 'Distaolet eo bet ho koulenn digevreañ rak kaset e oa bet gant ur merdeer direizhet pe krubuilhadenn ur proksi, evit doare.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Fazi dianav en arc'hwel postel () PHP",
 'user-mail-no-addy' => "Klasket kas ur postel hep lakaat ur chomlec'h postel.",
 
@@ -1350,7 +1350,7 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'prefs-displaywatchlist' => 'Dibarzhioù diskwel',
 'prefs-diffs' => "Diforc'hioù",
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "Reizh eo ar chomlec'h postel war a seblant",
 'email-address-validity-invalid' => "Ebarzhit ur chomlec'h postel reizh",
 
@@ -1529,7 +1529,7 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'rclinks' => "Diskouez an $1 kemm diwezhañ c'hoarvezet e-pad an $2 devezh diwezhañ<br />$3",
 'diff' => "diforc'h",
 'hist' => 'ist',
-'hide' => 'kuzhat',
+'hide' => 'Kuzhat',
 'show' => 'Diskouez',
 'minoreditletter' => 'D',
 'newpageletter' => 'N',
@@ -1544,9 +1544,9 @@ Ma skrivit anezhañ e vo implijet evit lakaat war wel ar pezh a vo bet degaset g
 'rc-old-title' => 'bet krouet da gentañ gant an anv "$1"',
 
 # Recent changes linked
-'recentchangeslinked' => 'Heuliañ al liammoù',
-'recentchangeslinked-feed' => 'Heuliañ al liammoù',
-'recentchangeslinked-toolbox' => 'Heuliañ al liammoù',
+'recentchangeslinked' => 'Heuliañ ar pajennoù liammet',
+'recentchangeslinked-feed' => 'Heuliañ ar pajennoù liammet',
+'recentchangeslinked-toolbox' => 'Heuliañ ar pajennoù liammet',
 'recentchangeslinked-title' => 'Kemmoù a denn da "$1"',
 'recentchangeslinked-noresult' => 'Kemm ebet war ar pajennoù liammet e-pad an amzer spisaet.',
 'recentchangeslinked-summary' => "Rollet eo war ar bajenn dibar-mañ ar c'hemmoù diwezhañ bet degaset war ar pajennoù liammet ouzh ur bajenn lakaet (pe ouzh izili ur rummad lakaet).
@@ -1941,6 +1941,8 @@ Marteze a-walc'h e fell deoc'h kemmañ an deskrivadur anezhi war ar [$2 bajenn d
 Padal e tlefent kas war-eeun d'an danvez anezho.<br />
 Sellet e vez ouzh ur bajenn evel ouzh ur bajenn disheñvelout ma ra gant ur patrom liammet ouzh [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop-prop' => 'Anv ar perzh :',
+
 'doubleredirects' => 'Adkasoù doubl',
 'doubleredirectstext' => 'Rollañ a ra ar bajenn-mañ ar pajennoù a adkas da bajennoù adkas all.
 War bep linenn ez eus liammoù war-du pajennoù an adkas kentañ hag en eil adkas, hag ivez war-du pajenn-dal an eil adkas zo sañset bezañ ar pal "gwirion" a zlefe an adkas kentañ kas di.
@@ -2133,7 +2135,7 @@ Gallout a ra bezañ [[{{MediaWiki:Listgrouprights-helppage}}|titouroù ouzhpenn]
 'listgrouprights-addgroup-self-all' => 'Gallout a ra ouzhpennañ an holl strolladoù da gont an-unan',
 'listgrouprights-removegroup-self-all' => 'Gallout a ra tennañ kuit an holl strolladoù eus kont an-unan.',
 
-# E-mail user
+# Email user
 'mailnologin' => "Chomlec'h ebet",
 'mailnologintext' => "Ret eo deoc'h bezañ [[Special:UserLogin|kevreet]]
 ha bezañ merket ur chomlec'h postel reizh en ho [[Special:Preferences|penndibaboù]]
@@ -3511,7 +3513,7 @@ Kuzhet e vo ar re all dre ziouer.
 'monthsall' => 'an holl',
 'limitall' => 'An holl',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Kadarnaat ar chomlec'h postel",
 'confirmemail_noemail' => "N'hoc'h eus ket spisaet chomlec'h postel mat ebet en ho [[Special:Preferences|penndibaboù implijer]].",
 'confirmemail_text' => "Rankout a ra ar wiki-mañ bezañ gwiriet ho chomlec'h postel a-raok gallout implijout nep arc'hwel postel. Implijit ar bouton a-is evit kas ur postel kadarnaat d'ho chomlec'h. Ul liamm ennañ ur c'hod a vo er postel. Kargit al liamm-se en o merdeer evit kadarnaat ho chomlec'h.",
@@ -3852,6 +3854,7 @@ Diskouezet eo ar skeudennoù gant ur pizhder uhel, erounit a ra ar restroù all
 'logentry-newusers-create' => 'Krouet eo bet ar gont implijer $1',
 'logentry-newusers-create2' => 'Gant $1 eo bet krouet ar gont implijer $3',
 'logentry-newusers-autocreate' => 'Krouet eo bet kont $1 ent emgefre',
+'logentry-rights-autopromote' => '$1 zo bet anvet ent emgefre a $4 da $5',
 'rightsnone' => '(netra)',
 
 # Feedback
@@ -3906,6 +3909,7 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'api-error-ok-but-empty' => 'Fazi diabarzh : respont ebet a-berzh ar servijer.',
 'api-error-overwrite' => "N'eo ket aotreet frikañ ur restr zo anezhi c'hoazh.",
 'api-error-stashfailed' => "Fazi diabarzh : dibosupl d'ar servijer enrollañ ar restr padennek.",
+'api-error-publishfailed' => "Fazi diabarzh : dibosupl d'ar servijer embann ar restr padennek.",
 'api-error-timeout' => "N'eo ket bet ar servijer evit respont en termen lakaet.",
 'api-error-unclassified' => "C'hoarvezet ez eus ur gudenn dianav.",
 'api-error-unknown-code' => 'Fazi dianav : "$1"',
@@ -3926,4 +3930,6 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'duration-centuries' => "$1 {{PLURAL:$1|c'hantved|kantved}}",
 'duration-millennia' => '$1 {{PLURAL:$1|milvloaz|milvoaz}}',
 
+# Unknown messages
+'pageswithprop-submit' => 'Mont',
 );
index b41c354..97d3ce6 100644 (file)
@@ -672,6 +672,7 @@ $2',
 'titleprotected' => 'Naslov stranice je zaštićen od postavljanja od strane korisnika [[User:$1|$1]].
 Iz razloga "\'\'$2\'\'".',
 'invalidtitle-knownnamespace' => 'Neispravan naslov s imenskim prostorom "$2" i tekstom "$3"',
+'invalidtitle-unknownnamespace' => 'Neispravan naslov s imenskim prostorom br. $1 i tekstom "$2"',
 'exception-nologin' => 'Niste prijavljeni',
 'exception-nologin-text' => 'Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.',
 
@@ -779,7 +780,7 @@ Molimo Vas da sačekate prije nego što pokušate ponovo.',
 'loginlanguagelabel' => 'Jezik: $1',
 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nepoznata greška u PHP funkciji mail()',
 'user-mail-no-addy' => 'Pokušaj slanja e-maila bez navedene e-mail adrese.',
 
@@ -948,6 +949,10 @@ Možete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] na drugim s
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tražiti u povezanim zapisima] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu]</span>.',
 'noarticletext-nopermission' => 'Trenutno nema teksta na ovoj stranici.
 Možete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane zapisnike]</span>, ali nemate dozvolu da napravite ovu stranicu.',
+'missing-revision' => 'Uređivanje broj $1 na stranici "{{PAGENAME}}" ne postoji.
+
+Ovo se obično dešava kada pratite zastarjelu vezu na stranice koja je obrisana.
+Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protokol brisanja].',
 'userpage-userdoesnotexist' => 'Korisnički račun "<nowiki>$1</nowiki>" nije registrovan.
 Molimo provjerite da li želite napraviti/izmijeniti ovu stranicu.',
 'userpage-userdoesnotexist-view' => 'Korisnički račun "$1" nije registrovan.',
@@ -1083,6 +1088,7 @@ Ovakvi argumenti se trebaju izbjegavati.',
 'expansion-depth-exceeded-warning' => 'Stranice koje su prekoračile dubinu proširenja',
 'parser-unstrip-loop-warning' => 'Pronađena petlja',
 'parser-unstrip-recursion-limit' => 'Prekoračeno ograničenje rekurzije ($1)',
+'converter-manual-rule-error' => 'Pronađena je greška u pravilu za ručno pretvaranje jezika',
 
 # "Undo" feature
 'undo-success' => 'Izmjena se može vratiti.
@@ -1463,7 +1469,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje za vaš rad.',
 'prefs-displaywatchlist' => 'Postavke izgleda',
 'prefs-diffs' => 'Razlike',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Izgleda valjano',
 'email-address-validity-invalid' => 'Neophodna valjana adresa!',
 
@@ -1957,6 +1963,7 @@ Opis sa njene [$2 stranice opisa datoteke] je prikazan ispod.',
 'uploadnewversion-linktext' => 'Postavite noviju verziju ove datoteke',
 'shared-repo-from' => 'iz $1',
 'shared-repo' => 'dijeljeni repozitorijum',
+'upload-disallowed-here' => 'Ne možete prepisati ovu datoteku.',
 
 # File reversion
 'filerevert' => 'Vrati $1',
@@ -2229,7 +2236,7 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 'listgrouprights-addgroup-self-all' => 'Može dodati sve grupe na svoj račun',
 'listgrouprights-removegroup-self-all' => 'Može ukloniti sve grupe sa svog računa',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nema adrese za slanje',
 'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]]
 i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]]
@@ -3610,7 +3617,7 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s
 'monthsall' => 'sve',
 'limitall' => 'sve',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potvrdite adresu e-pošte',
 'confirmemail_noemail' => 'Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].',
 'confirmemail_text' => 'Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. Aktivirajte dugme ispod kako bi ste poslali poštu za potvrdu na Vašu adresu. Pošta uključuje link koji sadrži kod; učitajte link u Vaš preglednik da bi ste potvrdili da je adresa Vaše e-pošte validna.',
index d35330d..159486b 100644 (file)
@@ -692,7 +692,7 @@ Si us plau, esperi abans de tornar-ho a intentar.",
 'loginlanguagelabel' => 'Llengua: $1',
 'suspicious-userlogout' => "S'ha denegat la vostra petició per tancar la sessió ja què sembla que va ser enviada per un navegador defectuós o un proxy cau.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Error desconegut en la funció mail() de PHP',
 'user-mail-no-addy' => "S'ha intentat enviar un missatge de correu electrònic sense adreça.",
 
@@ -1364,7 +1364,7 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'prefs-displaywatchlist' => 'Opcions de visualització',
 'prefs-diffs' => 'Difs',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L'adreça de correu electrònic sembla vàlida",
 'email-address-validity-invalid' => 'Escriviu una adreça vàlida de correu electrònic',
 
@@ -2125,7 +2125,7 @@ Pot ser que hi hagi més informació sobre drets individuals [[{{MediaWiki:Listg
 'listgrouprights-addgroup-self-all' => 'Afegir-se a qualsevol grup',
 'listgrouprights-removegroup-self-all' => 'Abandona tots els grups',
 
-# E-mail user
+# Email user
 'mailnologin' => "No enviïs l'adreça",
 'mailnologintext' => "Heu d'haver [[Special:UserLogin|entrat]]
 i tenir una direcció electrònica vàlida en les vostres [[Special:Preferences|preferències]]
@@ -3492,7 +3492,7 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o
 'monthsall' => 'tots',
 'limitall' => 'tots',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Confirma l'adreça de correu electrònic",
 'confirmemail_noemail' => "No heu introduït una direcció vàlida de correu electrònic en les vostres [[Special:Preferences|preferències d'usuari]].",
 'confirmemail_text' => "El projecte {{SITENAME}} necessita que valideu la vostra adreça de correu
index afcd744..40d4a5c 100644 (file)
@@ -281,6 +281,7 @@ $messages = array(
 'newwindow' => '(لە پەڕەیەکی نوێدا دەکرێتەوە)',
 'cancel' => 'ھەڵیوەشێنەوە',
 'moredotdotdot' => 'زیاتر',
+'morenotlisted' => 'درێژەی پێرست...',
 'mypage' => 'پەڕه‌',
 'mytalk' => 'لێدوان',
 'anontalk' => 'وتووێژ بۆ ئەم ئای‌پی یە',
@@ -1158,7 +1159,7 @@ $1",
 'search-interwiki-default' => '$1 ئەنجام:',
 'search-interwiki-more' => '(زیاتر)',
 'search-relatedarticle' => 'پەیوەست',
-'mwsuggest-disable' => 'پێشنیارەکانی AJAX نیشان مەدە',
+'mwsuggest-disable' => 'پێشنیارەکانی گەڕان ناچالاک بکە',
 'searcheverything-enable' => 'لە ھەموو بۆشایی‌‌ناوەکان دا بگەڕێ',
 'searchrelated' => 'پەیوەست',
 'searchall' => 'ھەموو',
@@ -1252,7 +1253,7 @@ $1",
 'timezoneregion-australia' => 'ئۆسترالیا',
 'timezoneregion-europe' => 'ئەورووپا',
 'timezoneregion-indian' => 'ئوقیانووسی ھیند',
-'timezoneregion-pacific' => 'ئوقیانووسی پاسیفیک',
+'timezoneregion-pacific' => 'ئۆقیانووسی پاسیفیک',
 'allowemail' => 'ڕێگە بدە بە بەکارھێنەرانی تر کە ئیمەیلم بۆ بنێرن',
 'prefs-searchoptions' => 'گەڕان',
 'prefs-namespaces' => 'بۆشایی‌ناوەکان',
@@ -1306,7 +1307,7 @@ $1",
 'prefs-displaywatchlist' => 'ھەڵبژاردەکانی نیشاندان',
 'prefs-diffs' => 'جیاوازییەکان',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ناونیشانی ئیمەیل دروست وە بەر چاو دێت',
 'email-address-validity-invalid' => 'ناونیشانێکی دروستی ئیمەیل بنووسە',
 
@@ -1989,7 +1990,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'زیادکردنی هەموو گرووپەکان بۆ سه‌ر هه‌ژماری خۆ',
 'listgrouprights-removegroup-self-all' => 'لابردنی هەموو گرووپەکان له‌ سه‌ر هه‌ژماری خۆ',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ناونیشان بۆ ناردن نییه‌',
 'mailnologintext' => 'ده‌بێ له‌ [[Special:UserLogin|ژووره‌وه‌]] بیت و ناونیشانێکی بڕواپێ‌کراوی ئی‌مه‌یلت له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کان]] دیاری کردبێت تا بتوانی ئی‌مه‌یل بنێریت بۆ به‌کارهێنه‌رانی دیکه‌.',
 'emailuser' => 'ئیمەیل بنێرە بۆ ئەم بەکارھێنەرە',
@@ -2568,7 +2569,7 @@ $1',
 '''ئاگاداربە: '''ھەناردنی ھەموو مێژووی پەڕەکان لەم فۆرمەوە لەبەر ھۆکاری ڕێخستن، داخراوە.",
 'export-submit' => 'هەناردن',
 'export-addcattext' => 'پەڕەکان زێدەبکە لە پۆلی:',
-'export-addcat' => 'زÛ\8eدÛ\95بکە',
+'export-addcat' => 'زÛ\8cاد بکە',
 'export-addnstext' => 'پەڕەکان زێدەبکە لە بۆشایی‌ناوی:',
 'export-addns' => 'زێدەبکە',
 'export-download' => 'وەک پەڕگە پاشەکەوتی بکە',
@@ -2765,6 +2766,7 @@ $1',
 'pageinfo-robot-noindex' => 'نەشیاو بۆ پێرستکردن',
 'pageinfo-views' => 'ژمارەی بینینەکان',
 'pageinfo-watchers' => 'ژمارەی چاودێرانی پەڕە',
+'pageinfo-few-watchers' => 'کەمتر لە $1 {{PLURAL:$1|چاوەدێر}}',
 'pageinfo-redirects-name' => 'ڕەوانەکەرەکان بۆ ئەم پەڕەیە',
 'pageinfo-subpages-name' => 'ژێرپەڕەکانی ئەم پەڕەیە',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ڕەوانەکەر}}; $3 {{PLURAL:$3|ڕەوانەنەکەر}})',
@@ -3131,7 +3133,7 @@ $1',
 'monthsall' => 'ھەموو',
 'limitall' => 'ھەموو',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'بڕواپێکردنی ناونیشانی ئیمەیل',
 'confirmemail_noemail' => 'لە [[Special:Preferences|هەڵبژاردەکانی بەکارهێنەر]] ناونیشانی ئی‌مەیلی گونجاوت دیاری نەکردووە.',
 'confirmemail_text' => '{{SITENAME}} بە پێویستی دەزانێ پێش کەڵک وەرگرتن لە تایبەتمەندیەکانی ئی‌مەیل، ناونیشانی ئی‌مەیلی خۆت ڕاچاو بکەیت.
index 6b12a2a..706ba27 100644 (file)
@@ -861,7 +861,7 @@ Počkejte chvíli, než to zkusíte znovu.',
 'loginlanguagelabel' => 'Jazyk: $1',
 'suspicious-userlogout' => 'Váš požadavek na odhlášení byl odmítnut, neboť to vypadá, že ho poslal rozbitý prohlížeč nebo cachující proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Neznámá chyba v PHP funkci mail()',
 'user-mail-no-addy' => 'Pokus o odeslání e-mailu bez e-mailové adresy',
 'user-mail-no-body' => 'Pokus o odeslání prázdného nebo nesmyslně krátkého e-mailu.',
@@ -1534,7 +1534,7 @@ Tuto operaci nelze vrátit zpět.',
 'prefs-displaywatchlist' => 'Možnosti zobrazení',
 'prefs-diffs' => 'Porovnání verzí',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mailová adresa vypadá platně',
 'email-address-validity-invalid' => 'Zadejte platnou e-mailovou adresu',
 
@@ -2121,6 +2121,10 @@ Vstup: <code>typ obsahu/podtyp</code>, např. <code>image/jpeg</code>.',
 Asi by místo toho měly odkazovat na konkrétnější stránku.<br />
 Stránka je považována za rozcestník, pokud používá některou ze šablon odkazovaných na [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Stránky s vlastností',
+'pageswithprop-text' => 'Tato stránka obsahuje seznam stránek, které používají zadanou vlastnost stránky.',
+'pageswithprop-prop' => 'Název vlastnosti:',
+
 'doubleredirects' => 'Dvojitá přesměrování',
 'doubleredirectstext' => 'Na této stránce je seznam přesměrování vedoucích na další přesměrování.
 Každý řádek obsahuje odkaz na první a druhé přesměrování a k tomu cíl druhého přesměrování, který obvykle ukazuje jméno „skutečné“ cílové stránky, na kterou by mělo první přesměrování odkazovat.
@@ -2312,7 +2316,7 @@ Povinná je přinejmenším doména nejvyššího řádu, např. „*.org“.<br
 'listgrouprights-addgroup-self-all' => 'Přidání svého účtu do libovolné skupiny',
 'listgrouprights-removegroup-self-all' => 'Vyřazení svého účtu z libovolné skupiny',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Bez odesílací adresy',
 'mailnologintext' => 'Pokud chcete posílat e-maily jiným uživatelům, musíte se [[Special:UserLogin|přihlásit]] a mít platnou e-mailovou adresu ve svém [[Special:Preferences|nastavení]].',
 'emailuser' => 'Poslat e-mail',
@@ -3692,7 +3696,7 @@ Obsahuje pouze seznam s odrážkami (řádka začíná s *). První odkaz na ř
 'monthsall' => 'všechny',
 'limitall' => 'vše',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potvrzení e-mailové adresy',
 'confirmemail_noemail' => 'Ve svém [[Special:Preferences|uživatelském nastavení]] jste nezadali platnou e-mailovou adresu.',
 'confirmemail_text' => 'Tato wiki vyžaduje, abyste před využíváním některých funkcí potvrdili svoji e-mailovou adresu. Kliknutím na tlačítko níže odešlete potvrzovací e-mail na vámi uvedenou adresu. Tento e-mail obsahuje odkaz a potvrzovací kód; zobrazením odkazované stránky ve svém internetovém prohlížeči potvrdíte, že zadaná adresa je platná.',
@@ -4154,4 +4158,7 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'duration-centuries' => '$1 {{PLURAL:$1|století}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisíciletí}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Stránky s vlastností',
+'pageswithprop-submit' => 'Provést',
 );
index afa83d5..56acaf1 100644 (file)
@@ -913,7 +913,7 @@ Bitte warte, bevor du es erneut probierst.',
 'loginlanguagelabel' => 'Sprache: $1',
 'suspicious-userlogout' => 'Deine Abmeldeanfrage wurde verweigert, da sie vermutlich von einem defekten Browser oder einem Cache-Proxy gesendet wurde.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Unbekannter Fehler mit der Funktion mail() von PHP',
 'user-mail-no-addy' => 'Versuchte, eine E-Mail ohne Angabe einer E-Mail-Adresse zu versenden.',
 'user-mail-no-body' => 'Es wurde versucht, eine E-Mail mit einem leeren oder zu kurzen Textkörper zu versenden.',
@@ -1581,7 +1581,7 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'prefs-displaywatchlist' => 'Anzeigeoptionen',
 'prefs-diffs' => 'Versionsvergleich',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Diese E-Mail-Adresse scheint gültig zu sein.',
 'email-address-validity-invalid' => 'Eine gültige E-Mail-Adresse ist erforderlich.',
 
@@ -2366,7 +2366,7 @@ Zusätzliche Informationen über einzelne Rechte können [[{{MediaWiki:Listgroup
 'listgrouprights-addgroup-self-all' => 'Kann alle Gruppen zum eigenen Konto hinzufügen',
 'listgrouprights-removegroup-self-all' => 'Kann alle Gruppen vom eigenen Konto entfernen',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Fehler beim E-Mail-Versand',
 'mailnologintext' => 'Du musst [[Special:UserLogin|angemeldet sein]] und eine bestätigte E-Mail-Adresse in deinen [[Special:Preferences|Einstellungen]] eingetragen haben, um anderen Benutzern E-Mails schicken zu können.',
 'emailuser' => 'E-Mail an diesen Benutzer',
@@ -3199,7 +3199,7 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-header-restrictions' => 'Seitenschutz',
 'pageinfo-header-properties' => 'Seiteneigenschaften',
 'pageinfo-display-title' => 'Anzeigetitel',
-'pageinfo-default-sort' => 'Standard-Sortierschlüssel',
+'pageinfo-default-sort' => 'Standardsortierschlüssel',
 'pageinfo-length' => 'Seitenlänge (in Bytes)',
 'pageinfo-article-id' => 'Seitenkennnummer',
 'pageinfo-language' => 'Seiteninhaltssprache',
@@ -3755,7 +3755,7 @@ Weitere werden standardmäßig nicht angezeigt.
 'monthsall' => 'alle',
 'limitall' => 'alle',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-Mail-Adresse bestätigen (Authentifizierung)',
 'confirmemail_noemail' => 'Du hast keine gültige E-Mail-Adresse in deinen [[Special:Preferences|persönlichen Einstellungen]] eingetragen.',
 'confirmemail_text' => '{{SITENAME}} erfordert, dass du deine E-Mail-Adresse bestätigst (authentifizieren), bevor du die erweiterten E-Mail-Funktionen benutzen kannst. Klicke bitte auf die unten stehende, mit „Bestätigungscode zuschicken“ beschriftete Schaltfläche, damit eine automatisch erstellte E-Mail an die angegebene Adresse geschickt wird. Diese E-Mail enthält eine Web-Adresse mit einem Bestätigungscode. Indem du diese Webseite in deinem Webbrowser öffnest, bestätigst du, dass die angegebene E-Mail-Adresse korrekt und gültig ist.',
index 95c7b88..a5f9ea4 100644 (file)
@@ -818,7 +818,7 @@ Bıne vındere u newe ra dest pê bıkere.',
 'loginlanguagelabel' => 'Zıwan: $1',
 'suspicious-userlogout' => 'Waştişê tu ya veciyayişi kebul nibiya cunki ihtimal o ke waştiş yew browser ya zi proksiyê heripiyaye ra ameya.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "PHP's mail() fonksiyoni de xırabin vıcyê.",
 'user-mail-no-addy' => 'Bê E-posta kerd ju e-posta bırşo cırê.',
 
@@ -1490,7 +1490,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'prefs-displaywatchlist' => 'Weçinayışê mocnayışi',
 'prefs-diffs' => 'Ferqi',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'e-posta adresi raştayo',
 'email-address-validity-invalid' => 'e-postayo raştay defiye de',
 
@@ -2272,7 +2272,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'listgrouprights-addgroup-self-all' => 'şıma eşkeni hesabê xo re heme gruban têare bıkerî',
 'listgrouprights-removegroup-self-all' => 'şıma hesabê xo ra eşkeni heme gruban bıveci',
 
-# E-mail user
+# Email user
 'mailnologin' => 'adresa erşawıtışi/ruşnayişi çina.',
 'mailnologintext' => 'qey karberanê binan re e-posta erşawıtış de gani şıma [[Special:UserLogin|hesab aker]]ê [[Special:Preferences|pelê tercihani]] de gani yew e-postayo meqbul bıbo.',
 'emailuser' => 'Ena karberi rê mesac bırse',
@@ -3751,7 +3751,7 @@ $8',
 'monthsall' => 'pêro',
 'limitall' => 'pêro',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Adresê e-posta tesdiq ker',
 'confirmemail_noemail' => 'Yew emaîlê tu raştîyê çin o ke [[Special:Preferences|tercihê karberî]] ayar bike.',
 'confirmemail_text' => 'Qey gurweyayışê e-postayê wikiyi gani veror e-postayê şıma araşt bıbo.
index af612ed..a758c2b 100644 (file)
@@ -649,7 +649,7 @@ Móžoš toś te zdźělenje ignorowaś, jolic toś te konto jo se jano zamólnj
 'loginlanguagelabel' => 'Rěc: $1',
 'suspicious-userlogout' => 'Twójo póžedanje za wótzjawjenim jo se wótpokazało, dokulaž zda se, až jo se pósłało pśez wobškóźony wobglědowak abo pufrowański proksy',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Njeznata zmólka w PHP-funkciji mail()',
 'user-mail-no-addy' => 'Jo se wopytało, e-mail bźez e-mailoweje adrese pósłaś',
 'user-mail-no-body' => 'Jo se wopytało, e-mail bźez teksta abo z pśekrotkim tekstom pósłaś',
@@ -1306,7 +1306,7 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'prefs-displaywatchlist' => 'Zwobraznjowańske opcije',
 'prefs-diffs' => 'Rozdźěle',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Zda se, až e-mailowa adresa jo płaśiwa',
 'email-address-validity-invalid' => 'Zapódaj płaśiwu e-mailowu adresu',
 
@@ -2082,7 +2082,7 @@ Jo nanejmjenjej głowna domena trěbna, na pśikład "*.org"<br />
 'listgrouprights-addgroup-self-all' => 'Móžo wše kupki swójskemu kontoju pśidaś',
 'listgrouprights-removegroup-self-all' => 'Móžo wše kupki ze swójskego konta wótpóraś',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Njejo móžno e-mailku pósłaś.',
 'mailnologintext' => 'Dejš [[Special:UserLogin|pśizjawjony]] byś a płaśiwu e-mailowu adresu w swójich [[Special:Preferences|nastajenjach]] měś, aby drugim wužywarjam e-mail pósłał.',
 'emailuser' => 'Toś tomu wužywarjeju e-mail pósłaś',
@@ -3433,7 +3433,7 @@ Slědujuce wótkaze w tej samej smužce se za wuwześa naglědaju, w kótarychž
 'monthsall' => 'wšykne',
 'limitall' => 'wšykne',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-mailowu adresu wobkšuśiś.',
 'confirmemail_noemail' => 'W swójich [[Special:Preferences|nastajenjach]] njejsy płaśecu e-mailowu adresu zapódał.',
 'confirmemail_text' => '{{SITENAME}} pomina, až wobkšuśijoš swóju e-mailowu adresu, nježlic až móžoš e-mailowe funkcije wužywaś. Tłocyš-lic na tłocatko, dostanjoš e-mailku, w kótarejž jo wótkaz z wobkšuśenskim gronidłom. Tłocenje na wótkaz wobkšuśijo, až twója e-mailowa adresa jo korektna.',
index 9ea15cd..d7f6016 100644 (file)
@@ -1773,7 +1773,7 @@ Details can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENA
 'showingresults'                   => "Showing below up to {{PLURAL:$1|'''1''' result|'''$1''' results}} starting with #'''$2'''.",
 'showingresultsnum'                => "Showing below {{PLURAL:$3|'''1''' result|'''$3''' results}} starting with #'''$2'''.",
 'showingresultsheader'             => "{{PLURAL:$5|Result '''$1''' of '''$3'''|Results '''$1 - $2''' of '''$3'''}} for '''$4'''",
-'nonefound'                        => "'''Note''': Only some namespaces are searched by default.
+'nonefound'                        => "'''Note:''' Only some namespaces are searched by default.
 Try prefixing your query with ''all:'' to search all content (including talk pages, templates, etc), or use the desired namespace as prefix.",
 'search-nonefound'                 => 'There were no results matching the query.',
 'powersearch'                      => 'Advanced search',
@@ -4411,7 +4411,7 @@ $8', # only translate this message to other languages if you have to change it
 'exif-iimcategory-evn' => 'Environment',
 'exif-iimcategory-hth' => 'Health',
 'exif-iimcategory-hum' => 'Human interest',
-'exif-iimcategory-lab' => 'Labour',
+'exif-iimcategory-lab' => 'Labor',
 'exif-iimcategory-lif' => 'Lifestyle and leisure',
 'exif-iimcategory-pol' => 'Politics',
 'exif-iimcategory-rel' => 'Religion and belief',
index a0f8627..8ef27aa 100644 (file)
@@ -819,7 +819,7 @@ Bonvolu ĝisatendi antaŭ retrovi.',
 'loginlanguagelabel' => 'Lingvo: $1',
 'suspicious-userlogout' => 'Via peto por elsaluti estis malpermesita ĉar verŝajne ĝi estis sendita de trompita retumilo aŭ kaŝiganta proksima servilo.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nekonata eraro en la funkcio mail() de PHP',
 'user-mail-no-addy' => 'Provis sendi retpoŝton sen retpoŝtadreso.',
 
@@ -1504,7 +1504,7 @@ Jen hazarde generita valoro por via uzo: $1',
 'prefs-displaywatchlist' => 'Montraj opcioj',
 'prefs-diffs' => 'Diferencoj',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Ŝajnas ke la retpoŝtadreso estas valida',
 'email-address-validity-invalid' => 'Tajpu validan retpoŝtadreson',
 
@@ -1685,7 +1685,7 @@ Jen hazarde generita valoro por via uzo: $1',
 'hist' => 'historio',
 'hide' => 'Kaŝi',
 'show' => 'Montri',
-'minoreditletter' => 'E',
+'minoreditletter' => 'e',
 'newpageletter' => 'N',
 'boteditletter' => 'R',
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|priatentanta uzanto|priatentantaj uzantoj}}]',
@@ -2275,7 +2275,7 @@ Estas [[{{MediaWiki:Listgrouprights-helppage}}|aldona informo]] pri individuaj r
 'listgrouprights-addgroup-self-all' => 'Povas aldoni ĉiujn grupojn al propra konto',
 'listgrouprights-removegroup-self-all' => 'Povas forigi ĉiujn grupojn de propra konto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Neniu alsendota adreso',
 'mailnologintext' => 'Vi nepre estu [[Special:UserLogin|salutanta]] kaj havanta validan retpoŝtadreson en viaj [[Special:Preferences|preferoj]] por retpoŝti al aliaj uzantoj.',
 'emailuser' => 'Retpoŝti ĉi tiun uzanton',
@@ -3675,7 +3675,7 @@ Aliaj estos kaŝitaj defaŭlte.
 'monthsall' => 'ĉiuj',
 'limitall' => 'ĉiuj',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Konfirmi retadreson',
 'confirmemail_noemail' => 'Vi ne havas validan retpoŝtan adreson notitan en viaj [[Special:Preferences|Preferoj]].',
 'confirmemail_text' => 'Ĉi tiu vikio postulas ke vi validigu vian retadreson antaŭ ol uzadi la retmesaĝpreferojn. Bonvolu alklaki la suban butonon por sendi konfirmesaĝon al via adreso. La mesaĝo entenos ligilon kun kodo; bonvolu alŝuti la ligilon en vian foliumilon por konfirmi ke via retadreso validas.',
index 84c3be1..17889f9 100644 (file)
@@ -658,7 +658,7 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Página',
-'nstab-user' => 'Usuario',
+'nstab-user' => 'Página de usuari{{gender:{{#titleparts:{{BASEPAGENAME}}|1}}|o|a|o}}',
 'nstab-media' => 'Media',
 'nstab-special' => 'Página especial',
 'nstab-project' => 'Página del proyecto',
@@ -867,7 +867,7 @@ Puedes ignorar este mensaje si esta cuenta fue creada por error.',
 'loginlanguagelabel' => 'Idioma: $1',
 'suspicious-userlogout' => 'Tu solicitud de desconexión ha sido denegada, pues parece haber sido enviada desde un navegador defectuoso o un proxy caché.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Error desconocido en la función mail() de PHP.',
 'user-mail-no-addy' => 'Se ha intentado enviar correo electrónico sin una dirección de correo electrónico.',
 'user-mail-no-body' => 'Trató de enviar un correo electrónico con un cuerpo vacío o excesivamente corto.',
@@ -1552,7 +1552,7 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'prefs-displaywatchlist' => 'Opciones de visualización',
 'prefs-diffs' => 'Diferencias',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'La dirección de correo electrónico parece ser válida',
 'email-address-validity-invalid' => 'Introduce una dirección de correo válida',
 
@@ -2335,7 +2335,7 @@ Puede haber información adicional sobre privilegios individuales en [[{{MediaWi
 'listgrouprights-addgroup-self-all' => 'Agregar todos los grupos a tu propia cuenta',
 'listgrouprights-removegroup-self-all' => 'Eliminar todos los grupos de tu propia cuenta',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ninguna dirección de envio',
 'mailnologintext' => 'Debes [[Special:UserLogin|iniciar sesión]] y tener una dirección electrónica válida en tus [[Special:Preferences|preferencias]] para enviar un correo electrónico a otros usuarios.',
 'emailuser' => 'Enviar un correo electrónico a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}}',
@@ -3738,7 +3738,7 @@ Existen otros campos que se mantendrán ocultos por defecto.
 'monthsall' => 'todos',
 'limitall' => 'Todos',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar dirección de correo electrónico',
 'confirmemail_noemail' => 'No tienes una dirección de correo electrónico válida en tus [[Special:Preferences|preferencias de usuario]].',
 'confirmemail_text' => '{{SITENAME}} requiere la validación de tu dirección de correo antes de usarlo. Pulsa el botón de abajo para enviar la confirmación.
index d914a18..b1ca22b 100644 (file)
@@ -787,7 +787,7 @@ Palun pea nüüd pisut vahet.',
 'loginlanguagelabel' => 'Keel: $1',
 'suspicious-userlogout' => 'Sinu väljalogimiskatse nurjus, sest see näis olevat katkise veebilehitseja või puhverserveri saadetud.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Tundmatu tõrge PHP funktsioonis mail().',
 'user-mail-no-addy' => 'Püüdsid saata e-kirja ilma meiliaadressita.',
 
@@ -1458,7 +1458,7 @@ See ei tohi olla pikem kui {{PLURAL:$1|üks märk|$1 märki}}.',
 'prefs-displaywatchlist' => 'Kuvasätted',
 'prefs-diffs' => 'Erinevused',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Sobiv e-posti aadress',
 'email-address-validity-invalid' => 'Sisesta sobiv e-posti aadress.',
 
@@ -2218,7 +2218,7 @@ Toetatud {{PLURAL:$2|protokoll|protokollid}}: <code>$1</code> (määramata proto
 'listgrouprights-addgroup-self-all' => 'Oma konto kõigisse rühmadesse lisada',
 'listgrouprights-removegroup-self-all' => 'Eemaldada ennast kõigist rühmadest',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Saatja aadress puudub',
 'mailnologintext' => 'Pead olema [[Special:UserLogin|sisse logitud]] ja sul peab [[Special:Preferences|eelistustes]] olema kehtiv e-posti aadress, et saata teistele kasutajatele e-kirju.',
 'emailuser' => 'Saada sellele kasutajale e-kiri',
@@ -3570,7 +3570,7 @@ Kui faili on rakendustarkvaraga töödeldud, võib osa andmeid olla muudetud võ
 'monthsall' => 'kõik',
 'limitall' => 'iga',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-posti aadressi kinnitamine',
 'confirmemail_noemail' => 'Sul pole [[Special:Preferences|eelistuste leheküljel]] e-posti aadressi määranud.',
 'confirmemail_text' => 'Enne kui saad e-postiga seotud teenuseid kasutada, pead oma e-posti aadressi õigsust kinnitama. Allpool olevat nuppu klõpsates saadetakse sulle e-posti teel kinnituskood. Aadressi kinnitamiseks klõpsa e-kirjas olevat linki.',
index 3e2784e..62599b8 100644 (file)
@@ -625,7 +625,7 @@ Berriro saiatu aurretik itxaron ezazu, mesedez.',
 'loginlanguagelabel' => 'Hizkuntza: $1',
 'suspicious-userlogout' => 'Saioa amaitzeko egin duzun eskaria ukatu da. Izan ere, ematen du eskari hori gaizki dabilen nabigatzaile edo cache proxy batek bidali duela.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHPren mail() funtzioan arazo ezezagun bat egon da.',
 
 # Change password dialog
@@ -1240,7 +1240,7 @@ $1 {{PLURAL:$1|karakteretik|karakteretik}} behera izan behar ditu.',
 'prefs-displaywatchlist' => 'Aukerak erakutsi',
 'prefs-diffs' => 'Ezberdintasunak',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-posta helbidea zuzena dela dirudi',
 'email-address-validity-invalid' => 'E-posta helbide zuzena idatzi',
 
@@ -1789,7 +1789,7 @@ Orrialde bat argipen motakoa dela antzeman ohi da [[MediaWiki:Disambiguationspag
 'listusers-editsonly' => 'Aldaketak egin dituzten erabiltzaileak soilik erakutsi',
 'listusers-creationsort' => 'Sorrera dataren arabera sailkatu',
 'usereditcount' => '{{PLURAL:$1|aldaketa $1|$1 aldaketa}}',
-'usercreated' => '$2-(e)tan $1-(a)n {{GENDER:$3|sortua}},',
+'usercreated' => '{{GENDER:$3|Sortze data}}: $1, $2',
 'newpages' => 'Orrialde berriak',
 'newpages-username' => 'Erabiltzaile izena:',
 'ancientpages' => 'Orrialde zaharrenak',
@@ -1870,7 +1870,7 @@ Baimendutako protokoloak: <code>$1</code> (protokoloa zehazten ez bada http:// h
 'linksearch-error' => 'Komodinak izenaren hasieran bakarrik agertu beharko lirateke.',
 
 # Special:ListUsers
-'listusersfrom' => 'Hemendik aurrerako erabiltzaileak bistaratu:',
+'listusersfrom' => 'Honela hasten diren erabiltzaileak bistaratu:',
 'listusers-submit' => 'Erakutsi',
 'listusers-noresult' => 'Ez da erabiltzailerik aurkitu.',
 'listusers-blocked' => '(blokeatua)',
@@ -1900,7 +1900,7 @@ Badago [[{{MediaWiki:Listgrouprights-helppage}}|informazio osagarria]] banakako
 'listgrouprights-addgroup-self-all' => 'Talde guztiak norbere kontura gehitu',
 'listgrouprights-removegroup-self-all' => 'Talde guztiak norbere kontutik ezabatu',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Bidalketa helbiderik ez',
 'mailnologintext' => 'Beste erabiltzaileei e-posta mezuak bidaltzeko [[Special:UserLogin|saioa hasi]] eta baliozko e-posta helbidea behar duzu izan zure [[Special:Preferences|hobespenetan]].',
 'emailuser' => 'Erabiltzaile honi e-posta bidali',
@@ -3118,7 +3118,7 @@ Zerrenda elementuak (hasieran * duten lerroak) baino ez dira kontuan hartzen. Le
 'monthsall' => 'guztiak',
 'limitall' => 'guztiak',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-posta helbidea egiaztatu',
 'confirmemail_noemail' => 'Ez daukazu e-posta helbiderik zehaztuta zure [[Special:Preferences|hobespenetan]].',
 'confirmemail_text' => 'Wiki honetan zure e-posta helbidea egiaztatzea beharrezkoa da e-postarekin zerikusia duten ezaugarriak erabili aurretik. Beheko botoia jo zure helbidera egiaztapen mezu bat bidaltzeko. Mezuan kode bat duen lotura bat joango da atxikita; lotura hori zure nabigatzailean ireki ezazu e-posta helbidea egiaztatzeko.',
index 41654e5..1c979a7 100644 (file)
@@ -586,7 +586,7 @@ $messages = array(
 'vector-action-protect' => 'محافظت',
 'vector-action-undelete' => 'احیا',
 'vector-action-unprotect' => 'تغییر سطح حفاظت',
-'vector-simplesearch-preference' => 'فعال کردن جستجوی ساده (فقط در پوستهٔ برداری)',
+'vector-simplesearch-preference' => 'فعال کردن نوار جستجوی ساده‌شده (فقط در پوستهٔ برداری)',
 'vector-view-create' => 'ایجاد',
 'vector-view-edit' => 'ویرایش',
 'vector-view-history' => 'نمایش تاریخچه',
@@ -949,7 +949,7 @@ $2',
 'loginlanguagelabel' => 'زبان: $1',
 'suspicious-userlogout' => 'درخواست شما برای خروج از سامانه رد شد زیرا به نظر می‌رسد که این درخواست توسط یک مرورگر معیوب یا پروکسی میانگیر ارسال شده باشد.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'خطای ناشناخته در تابع  mail()‎ پی‌اچ‌پی',
 'user-mail-no-addy' => 'تلاش برای ارسال نامه بدون یک آدرس رایانامه.',
 'user-mail-no-body' => 'تلاش برای فرستادن پست‌الکترونیک بی‌دلیل کوتاه یا خالی',
@@ -1643,7 +1643,7 @@ $1",
 'prefs-displaywatchlist' => 'گزینه‌های نمایش',
 'prefs-diffs' => 'تفاوت‌ها',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'نشانی رایانامه معتبر به نظر می رسد',
 'email-address-validity-invalid' => 'نشانی رایانامهٔ معتبر وارد کنید',
 
@@ -2429,7 +2429,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'listgrouprights-addgroup-self-all' => 'می‌تواند حساب خود را به تمام گروه‌ها اضافه کند',
 'listgrouprights-removegroup-self-all' => 'می‌تواند حساب خود را از تمام گروه‌ها حذف کند',
 
-# E-mail user
+# Email user
 'mailnologin' => 'نشانی‌ای از فرستنده موجود نیست',
 'mailnologintext' => 'برای فرستادن رایانامه به کاربران دیگر باید [[Special:UserLogin|به سامانه وارد شوید]] و نشانی رایانامهٔ معتبری در [[Special:Preferences|ترجیحات]] خود داشته باشید.',
 'emailuser' => 'فرستادن نامه به این کاربر',
@@ -2638,7 +2638,7 @@ $PAGEINTRO $NEWPAGE
 شما می‌توانید سطح محافظت این صفحه را تغییر بدهید اما این کار تاثیری بر محافظت آبشاری صفحه نخواهد گذاشت.',
 'protect-default' => 'همهٔ کاربرها',
 'protect-fallback' => 'فقط به کاربرهایی که دسترسی «$1» دارند، اجازه داده می‌شود',
-'protect-level-autoconfirmed' => 'فقط به کاربرهای تائیدشده اجازه بده',
+'protect-level-autoconfirmed' => 'اجازه فقط برای به کاربرهای تائیدشده',
 'protect-level-sysop' => 'فقط مدیران',
 'protect-summary-cascade' => 'آبشاری',
 'protect-expiring' => 'زمان سرآمدن $1 (UTC)',
@@ -3822,7 +3822,7 @@ $1',
 'monthsall' => 'همهٔ ماه‌ها',
 'limitall' => 'همه',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'تأیید نشانی رایانامه',
 'confirmemail_noemail' => 'شما در صفحهٔ [[Special:Preferences|ترجیحات کاربری]] خود نشانی رایانامه معتبری وارد نکرده‌اید.',
 'confirmemail_text' => 'این ویکی شما را ملزم به تأیید اعتبار رایانامه خود، پیش از استفاده از خدمات رایانامه در اینجا می‌کند. دکمهٔ زیرین را فعال کنید تا نامهٔ تأییدی به نشانی رایانامهٔ شما فرستاده شود. این نامه دربردارندهٔ پیوندی خواهد بود که حاوی یک کد است. پیوند را در مرورگر خود بار کنید (اجرا) کنید تا اعتبار نشانی رایانامهٔ شما تایید شود.',
index 314959c..bf8695f 100644 (file)
@@ -798,7 +798,7 @@ Odota ennen kuin yrität uudelleen.',
 'loginlanguagelabel' => 'Kieli: $1',
 'suspicious-userlogout' => 'Pyyntösi kirjautua ulos evättiin, koska se näytti rikkinäisen selaimen tai välimuistipalvelimen lähettämältä.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Tuntematon virhe PHP:n mail()-funktiossa',
 'user-mail-no-addy' => 'Yritit lähettää sähköpostia ilman sähköpostiosoitetta.',
 'user-mail-no-body' => 'Sähköpostin sisältö ei ole tarpeeksi pitkä.',
@@ -1457,7 +1457,7 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1',
 'prefs-displaywatchlist' => 'Näyttöasetukset',
 'prefs-diffs' => 'Erot',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Sähköpostiosoite vaikuttaa kelvolliselta',
 'email-address-validity-invalid' => 'Virheellinen sähköpostiosoite',
 
@@ -2226,7 +2226,7 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 'listgrouprights-addgroup-self-all' => 'Voi lisätä itsensä kaikkiin ryhmiin',
 'listgrouprights-removegroup-self-all' => 'Voi poistaa itsensä kaikista ryhmistä',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Lähettäjän osoite puuttuu',
 'mailnologintext' => 'Sinun pitää olla [[Special:UserLogin|kirjautuneena sisään]] ja [[Special:Preferences|asetuksissasi]] pitää olla toimiva ja <strong>varmennettu</strong> sähköpostiosoite, jotta voit lähettää sähköpostia muille käyttäjille.',
 'emailuser' => 'Lähetä sähköpostia tälle käyttäjälle',
@@ -3594,7 +3594,7 @@ Kaikki muut linkit ovat poikkeuksia eli toisin sanoen sivuja, joissa tiedostoa s
 'monthsall' => 'kaikki',
 'limitall' => 'kaikki',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Varmenna sähköpostiosoite',
 'confirmemail_noemail' => 'Sinulla ei ole kelvollista sähköpostiosoitetta [[Special:Preferences|asetuksissasi]].',
 'confirmemail_text' => 'Tämä wiki vaatii sähköpostiosoitteen varmentamisen, ennen kuin voit käyttää sähköpostitoimintoja. Lähetä alla olevasta painikkeesta varmennusviesti osoitteeseesi. Viesti sisältää linkin, jonka avaamalla varmennat sähköpostiosoitteesi.',
@@ -3993,4 +3993,6 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'duration-centuries' => '$1 {{PLURAL:$1|vuosisata|vuosisataa}}',
 'duration-millennia' => '$1 {{PLURAL:$1|vuosituhat|vuosituhatta}}',
 
+# Unknown messages
+'pageswithprop-submit' => 'Siirry',
 );
index 8b11d1c..ac3698a 100644 (file)
@@ -60,6 +60,7 @@
  * @author McDutchie
  * @author Meithal
  * @author Moyg
+ * @author Nicolas NALLET
  * @author Nicolas Raoul
  * @author Nnemo
  * @author Od1n
@@ -888,7 +889,7 @@ Veuillez attendre avant d'essayer à nouveau.",
 'loginlanguagelabel' => 'Langue : $1',
 'suspicious-userlogout' => "Votre demande de déconnexion a été refusée car il semble qu'elle a été envoyée par un navigateur cassé ou la mise en cache d'un proxy.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Erreur inconnue dans la fonction mail() de PHP.',
 'user-mail-no-addy' => "Tenté d'envoyer un courriel sans adresse de courriel",
 'user-mail-no-body' => "Essai d'envoi d'un courriel avec un corps vide ou déraisonnablement court.",
@@ -1473,7 +1474,7 @@ Essayez en utilisant le préfixe ''all:'' pour rechercher dans tout le contenu (
 'prefs-edit-boxsize' => 'Taille de la fenêtre de modification.',
 'rows' => 'Rangées :',
 'columns' => 'Colonnes :',
-'searchresultshead' => 'Recherches',
+'searchresultshead' => 'Filtrer avec cette valeur',
 'resultsperpage' => 'Nombre de réponses par page :',
 'stub-threshold' => 'Limite supérieure pour les <a href="#" class="stub">liens vers les ébauches</a> (octets) :',
 'stub-threshold-disabled' => 'Désactivé',
@@ -1554,7 +1555,7 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'prefs-displaywatchlist' => "Options d'affichage",
 'prefs-diffs' => 'Différences',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Semble valide',
 'email-address-validity-invalid' => 'Une adresse valide est nécessaire !',
 
@@ -2346,7 +2347,7 @@ Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuve
 'listgrouprights-addgroup-self-all' => "Peut s'ajouter tous les groupes à son propre compte",
 'listgrouprights-removegroup-self-all' => 'Peut se retirer tous les groupes de son propre compte',
 
-# E-mail user
+# Email user
 'mailnologin' => "Pas d'adresse d'expéditeur",
 'mailnologintext' => "Vous devez être [[Special:UserLogin|identifié]] et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]] pour pouvoir envoyer des courriels à d'autres utilisateurs.",
 'emailuser' => 'Lui envoyer un courriel',
@@ -3755,7 +3756,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'monthsall' => 'tous',
 'limitall' => 'tous',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Confirmer l'adresse de courriel",
 'confirmemail_noemail' => "Vous n'avez pas défini une adresse de courriel valide dans vos [[Special:Preferences|préférences]].",
 'confirmemail_text' => 'Ce wiki nécessite la vérification de votre adresse de courriel avant de pouvoir utiliser toute fonction de messagerie.
index 0cfc7d4..70ec290 100644 (file)
@@ -315,13 +315,13 @@ $messages = array(
 'tog-hidepatrolled' => 'Cachiér los changements gouardâs dedens los dèrriérs changements',
 'tog-newpageshidepatrolled' => 'Cachiér les pâges gouardâyes entre-mié la lista de les pâges novèles',
 'tog-extendwatchlist' => 'Ètendre la lista de siuvu por montrar tôs los changements et pas ren que los ples novéls',
-'tog-usenewrc' => 'Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de siuvu (il at fôta de JavaScript)',
+'tog-usenewrc' => 'Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de siuvu (at fôta de JavaScript)',
 'tog-numberheadings' => 'Numerotar ôtomaticament los titros de sèccion',
-'tog-showtoolbar' => 'Montrar la bârra d’outils de changement (il at fôta de JavaScript)',
-'tog-editondblclick' => 'Changiér des pâges sur doblo-clic (il at fôta de JavaScript)',
+'tog-showtoolbar' => 'Montrar la bârra d’outils de changement (at fôta de JavaScript)',
+'tog-editondblclick' => 'Changiér des pâges sur doblo-clic (at fôta de JavaScript)',
 'tog-editsection' => 'Activar lo changement de sèccions avouéc los lims « [changiér] »',
-'tog-editsectiononrightclick' => 'Activar lo changement de sèccions per clic drêt sur lors titros (il at fôta de JavaScript)',
-'tog-showtoc' => 'Montrar la trâbla de les matiéres (por les pâges qu’ont més de 3 sèccions)',
+'tog-editsectiononrightclick' => 'Activar lo changement de sèccions per clic drêt sur lors titros (at fôta de JavaScript)',
+'tog-showtoc' => 'Montrar la trâbla de les matiéres (por les pâges qu’ant més de 3 sèccions)',
 'tog-rememberpassword' => 'Sè rapelar de mon contresegno sur ceti navigator (por lo més $1 jorn{{PLURAL:$1||s}})',
 'tog-watchcreations' => 'Apondre les pâges que fé et pués los fichiérs que tèlèchârjo a ma lista de siuvu',
 'tog-watchdefault' => 'Apondre les pâges et los fichiérs que chanjo a ma lista de siuvu',
@@ -338,10 +338,10 @@ $messages = array(
 'tog-shownumberswatching' => 'Montrar lo nombro d’utilisators que siuvont na pâge',
 'tog-oldsig' => 'Signatura ègzistenta :',
 'tog-fancysig' => 'Trètar la signatura coment de vouiquitèxto (sen lim ôtomatico)',
-'tog-externaleditor' => 'Empleyér per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, il at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
-'tog-externaldiff' => 'Empleyér per dèfôt un comparator de defôr (solament por los utilisators avanciês, il at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-externaleditor' => 'Empleyér per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-externaldiff' => 'Empleyér per dèfôt un comparator de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
 'tog-showjumplinks' => 'Activar los lims d’accèssibilitât « {{int:jumpto}} »',
-'tog-uselivepreview' => 'Empleyér l’apèrçu rapido (il at fôta de JavaScript) (èxpèrimentâl)',
+'tog-uselivepreview' => 'Empleyér l’apèrçu rapido (at fôta de JavaScript) (èxpèrimentâl)',
 'tog-forceeditsummary' => 'Mè balyér na semonce quand j’é pas buchiê de rèsumâ de changement',
 'tog-watchlisthideown' => 'Cachiér los mins changements dedens la lista de siuvu',
 'tog-watchlisthidebots' => 'Cachiér los changements fêts per des robots dedens la lista de siuvu',
@@ -628,25 +628,25 @@ Na lista de les pâges spèciâles justes sè trôve dessus [[Special:SpecialPag
 
 # General errors
 'error' => 'Fôta',
-'databaseerror' => 'Fôta de la bâsa de donâs',
-'dberrortext' => 'Na fôta de sintaxa de la demanda dens la bâsa de donâs est arrevâye.
+'databaseerror' => 'Fôta de la bâsa de balyês',
+'dberrortext' => 'Na fôta de sintaxa de la demanda dens la bâsa de balyês est arrevâye.
 Cen pôt endicar na cofierie dedens la programeria.
-La dèrriére demanda trètâye per la bâsa de donâs ére :
+La dèrriére demanda trètâye per la bâsa de balyês ére :
 <blockquote><code>$1</code></blockquote>
 dês la fonccion « <code>$2</code> ».
-La bâsa de donâs at retornâ la fôta « <samp>$3 : $4</samp> ».',
-'dberrortextcl' => 'Na fôta de sintaxa de la demanda dens la bâsa de donâs est arrevâye.
-La dèrriére demanda trètâye per la bâsa de donâs ére :
+La bâsa de balyês at retornâ la fôta « <samp>$3 : $4</samp> ».',
+'dberrortextcl' => 'Na fôta de sintaxa de la demanda dens la bâsa de balyês est arrevâye.
+La dèrriére demanda trètâye per la bâsa de balyês ére :
 « $1 »
 dês la fonccion « $2 ».
-La bâsa de donâs at retornâ la fôta « $3 : $4 ».',
+La bâsa de balyês at retornâ la fôta « $3 : $4 ».',
 'laggedslavemode' => "'''Atencion :''' cela pâge pôt pas contegnir tôs los dèrriérs changements fêts.",
-'readonly' => 'Bâsa de donâs vèrrolyêe',
-'enterlockreason' => 'Buchiéd na rêson du vèrroly et pués n’èstimacion de la sina durâ',
-'readonlytext' => 'Ora la bâsa de donâs est vèrrolyêe por les entrâs novèles et los ôtros changements, de sûr por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
+'readonly' => 'Bâsa de balyês vèrrolyêe',
+'enterlockreason' => 'Buchiéd na rêson du vèrroly et pués un’èstimacion de la sina durâ',
+'readonlytext' => 'Ora la bâsa de balyês est vèrrolyêe por les entrâs novèles et los ôtros changements, de sûr por pèrmetre la sina mantegnence, dês cen tot tornerat en ôrdre.
 
 L’administrator que l’at vèrrolyê at balyê cet’èxplicacion : $1',
-'missing-article' => 'La bâsa de donâs at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, apelâye « $1 » $2.
+'missing-article' => 'La bâsa de balyês at pas trovâ lo tèxto d’una pâge qu’el arêt diu trovar, apelâye « $1 » $2.
 
 En g·ènèral cen arreve en siuvent un lim d’una dif d’un historico dèpassâ(ye) de vers na pâge qu’est étâye suprimâye.
 
@@ -654,7 +654,7 @@ S’o est pas lo câs, pôt étre na cofierie dedens la programeria.
 Se vos plét, signalâd-la a un [[Special:ListUsers/sysop|administrator]] sen oubliar de lui endicar l’URL du lim.',
 'missingarticle-rev' => '(numerô de vèrsion : $1)',
 'missingarticle-diff' => '(dif : $1, $2)',
-'readonly_lag' => 'La bâsa de donâs est étâye vèrrolyêe ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.',
+'readonly_lag' => 'La bâsa de balyês est étâye vèrrolyêe ôtomaticament pendent que los sèrviors secondèros ratrapont lor retârd sur lo sèrvior principâl.',
 'internalerror' => 'Fôta de dedens',
 'internalerror_info' => 'Fôta de dedens : $1',
 'fileappenderrorread' => 'Y at pas moyen de liére « $1 » pendent l’aponsa.',
@@ -676,10 +676,10 @@ Nion’èxplicacion est étâye balyêe.',
 'badtitle' => 'Crouyo titro',
 'badtitletext' => 'Lo titro de la pâge demandâye est pas justo, vouedo ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
 Contint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.',
-'perfcached' => 'Cetes donâs sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
-'perfcachedts' => 'Cetes donâs sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
-'querypage-no-updates' => 'Ora les mises a jorn por ceta pâge sont dèsactivâyes.
-Les donâs ique seront pas betâyes a jorn.',
+'perfcached' => 'Cetes balyês sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
+'perfcachedts' => 'Cetes balyês sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|un rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
+'querypage-no-updates' => 'Ora les mêses a jorn por ceta pâge sont dèsactivâyes.
+Les balyês ique seront pas betâyes a jorn.',
 'wrong_wfQuery_params' => 'Paramètros fôx dessus wfQuery()<br />
 Fonccion : $1<br />
 Demanda : $2',
@@ -691,7 +691,7 @@ Se vos plét, tornâd èprovar dens un tôrn.',
 'protectedpagetext' => 'Ceta pâge est étâye protègiêe por empachiér son changement ou ben d’ôtres accions.',
 'viewsourcetext' => 'Vos pouede vêre et copiyér lo tèxto sôrsa de ceta pâge :',
 'viewyourtext' => "Vos pouede vêre et copiyér lo tèxto sôrsa de '''voutros changements''' a ceta pâge :",
-'protectedinterface' => 'Cela pâge-que balye de tèxto d’entèrface por la programeria sur ceti vouiqui, et el est vêr protègiêe por èvitar los abus.
+'protectedinterface' => 'Cela pâge-que balye de tèxto d’entèrface por la programeria sur ceti vouiqui et est vêr protègiêe por èvitar los abus.
 Por apondre ou ben changiér des traduccions sur tôs los vouiquis, se vos plét empleyéd [//translatewiki.net/ translatewiki.net], lo projèt de localisacion de MediaWiki.',
 'editinginterface' => "'''Atencion :''' vos éte aprés changiér na pâge empleyêe por fâre lo tèxto d’entèrface de la programeria.
 Los changements sè cognetront sur l’aparence de l’entèrface utilisator por los ôtros utilisators de ceti vouiqui.
@@ -733,7 +733,7 @@ Oubliâd pas de changiér voutres [[Special:Preferences|prèferences dessus {{SI
 'securelogin-stick-https' => 'Réstar branchiê en HTTPS aprés lo branchement',
 'yourdomainname' => 'Voutron domêno :',
 'password-change-forbidden' => 'Vos pouede pas changiér los contresegnos sur ceti vouiqui.',
-'externaldberror' => 'Ou ben na fôta est arrevâye avouéc la bâsa de donâs d’ôtentificacion de defôr ou ben vos éte pas ôtorisâ{{GENDER:||ye|(ye)}} a betar a jorn voutron compto de defôr.',
+'externaldberror' => 'Ou ben na fôta est arrevâye avouéc la bâsa de balyês d’ôtentificacion de defôr ou ben vos éte pas ôtorisâ{{GENDER:||ye|(ye)}} a betar a jorn voutron compto de defôr.',
 'login' => 'Branchement',
 'nav-login-createaccount' => 'Sè branchiér / fâre un compto',
 'loginprompt' => "Vos dête activar los tèmouens (''cookies'') por vos branchiér a {{SITENAME}}.",
@@ -783,7 +783,7 @@ Se vos plét, tornâd èprovar.',
 'passwordremindertitle' => 'Contresegno temporèro novél por {{SITENAME}}',
 'passwordremindertext' => 'Yon (probâblament vos, dês l’adrèce IP $1) at demandâ un contresegno
 novél por {{SITENAME}} ($4). Un contresegno temporèro est étâ fêt por
-l’utilisator « $2 » et il est « $3 ». S’o ére voutra entencion, vos vos devréd
+l’utilisator « $2 » et est « $3 ». S’o ére voutron entencion, vos vos devréd
 branchiér et pués chouèsir un contresegno novél.
 Voutron contresegno temporèro èxpirerat dens {{PLURAL:$5|un jorn|$5 jorns}}.
 
@@ -791,7 +791,7 @@ Se cela demanda vint pas de vos ou ben que vos vos éte rapelâ
 de voutron contresegno et que vos souhètâd pas més lo changiér, vos
 pouede ignorar ceti mèssâjo et continuar a empleyér voutron viely contresegno.',
 'noemail' => 'Nion’adrèce èlèctronica est étâye encartâye por l’utilisator « $1 ».',
-'noemailcreate' => 'Vos dête balyér n’adrèce èlèctronica justa',
+'noemailcreate' => 'Vos dête balyér un’adrèce èlèctronica justa',
 'passwordsent' => 'Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».
 Se vos plét, tornâd-vos branchiér aprés l’avêr reçu.',
 'blocked-mailpassword' => 'Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.',
@@ -800,15 +800,15 @@ Devant qu’un ôtro mèssâjo seye mandâ a ceti compto, vos devréd siuvre les
 'throttled-mailpassword' => 'Un mèssâjo de sovegnence de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
 Por èvitar los abus, ren que yon serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
 'mailerror' => 'Fôta pendent l’èxpèdicion du mèssâjo : $1',
-'acct_creation_throttle_hit' => 'Des visitors de cél vouiqui-que qu’emplèyont voutron adrèce IP ont fêt $1 compto{{PLURAL:$1||s}} pendent lo jorn passâ, cen qu’est lo més ôtorisâ dens ceti temps.
+'acct_creation_throttle_hit' => 'Des visitors de cél vouiqui-que qu’emplèyont voutron adrèce IP ant fêt $1 compto{{PLURAL:$1||s}} pendent lo jorn passâ, cen qu’est lo més ôtorisâ dens ceti temps.
 Du côp los visitors qu’emplèyont cel’adrèce IP pôvont fâre gins de compto por lo moment.',
 'emailauthenticated' => 'Voutron adrèce èlèctronica est étâye ôtentifiâye lo $2 a $3.',
 'emailnotauthenticated' => 'Voutron adrèce èlèctronica est p’oncor ôtentifiâye.
 Nion mèssâjo serat mandâ por châcuna de cetes fonccionalitâts.',
-'noemailprefs' => 'Spècifiâd n’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccionalitâts.',
+'noemailprefs' => 'Spècifiâd un’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccionalitâts.',
 'emailconfirmlink' => 'Confirmâd voutron adrèce èlèctronica',
 'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye, semble avêr un format pas justo.
-Se vos plét, buchiéd n’adrèce bien formatâye ou ben lèssiéd cél champ vouedo.',
+Se vos plét, buchiéd un’adrèce bien formatâye ou ben lèssiéd cél champ vouedo.',
 'cannotchangeemail' => 'Les adrèces èlèctroniques des comptos pôvont pas étre changiêes sur ceti vouiqui.',
 'emaildisabled' => 'Ceti seto pôt pas mandar des mèssâjos.',
 'accountcreated' => 'Compto fêt',
@@ -823,12 +823,12 @@ Ignorâd ceti mèssâjo se cél compto est étâ fêt per fôta.',
 Se vos plét, atende devant que tornar èprovar.',
 'login-abort-generic' => 'Voutra tentativa de branchement at pas reussi - Anulâye',
 'loginlanguagelabel' => 'Lengoua : $1',
-'suspicious-userlogout' => 'Voutra demanda de dèbranchement est étâye refusâye, semble qu’el est étâye mandâye per un navigator câsso ou ben la misa en cacho d’un proxi.',
+'suspicious-userlogout' => 'Voutra demanda de dèbranchement est étâye refusâye, semble qu’el est étâye mandâye per un navigator câsso ou ben la mêsa en cacho d’un proxi.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Fôta encognua dens la fonccion mail() de PHP.',
-'user-mail-no-addy' => 'Il at èprovâ de mandar un mèssâjo sen adrèce èlèctronica.',
-'user-mail-no-body' => 'Il at èprovâ de mandar un mèssâjo avouéc un côrp vouedo ou ben dèrêsonâblament côrt.',
+'user-mail-no-addy' => 'Èprôva de mandar un mèssâjo sen adrèce èlèctronica.',
+'user-mail-no-body' => 'Èprôva de mandar un mèssâjo avouéc un côrp vouedo ou ben dèrêsonâblament côrt.',
 
 # Change password dialog
 'resetpass' => 'Changiér lo contresegno',
@@ -851,11 +851,11 @@ Pôt-étre vos éd ja changiê voutron contresegno avouéc reusséta ou ben dema
 'resetpass-temp-password' => 'Contresegno temporèro :',
 
 # Special:PasswordReset
-'passwordreset' => 'Remisa a zérô du contresegno',
+'passwordreset' => 'Remês’a zérô du contresegno',
 'passwordreset-text' => 'Rempléd ceti formulèro por recêvre un mèssâjo de sovegnence des dètalys de voutron compto.',
-'passwordreset-legend' => 'Remetre a zérô lo contresegno',
-'passwordreset-disabled' => 'La remisa a zérô des contresegnos est étâye dèsactivâye sur ceti vouiqui.',
-'passwordreset-pretext' => '{{PLURAL:$1||Buchiéd yona de les piéces de donâs ce-desot}}',
+'passwordreset-legend' => 'Rebetar a zérô lo contresegno',
+'passwordreset-disabled' => 'La remês’a zérô des contresegnos est étâye dèsactivâye sur ceti vouiqui.',
+'passwordreset-pretext' => '{{PLURAL:$1||Buchiéd yona de les piéces de balyês ce-desot}}',
 'passwordreset-username' => 'Nom d’utilisator :',
 'passwordreset-domain' => 'Domêno :',
 'passwordreset-capture' => 'Est-o que vos voléd vêre lo mèssâjo que rèsulte ?',
@@ -965,7 +965,7 @@ La rêson balyêe est :
 
 Vos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.
 
-Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » du muens que vos èyâd n’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyâd pas étâ blocâ de l’empleyér.
+Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » du muens que vos èyâd un’adrèce èlèctronica justa encartâye dens voutres [[Special:Preferences|prèferences]] et que vos seyâd pas étâ blocâ de l’empleyér.
 
 Voutron adrèce IP d’ora est $3, et l’identifient de blocâjo est $5.
 Se vos plét, entrebetâd tôs los dètalys ce-dessus dedens na demanda la quinta que seye que vos faréd.",
@@ -989,8 +989,8 @@ Por fâre cela pâge, buchiéd voutron tèxto dedens la bouèta ce-desot (vêde
 Se vos éte arrevâ{{GENDER:||ye|(ye)}} ice per fôta, clicâd sur lo boton '''Devant''' de voutron navigator.",
 'anontalkpagetext' => "----''O est la pâge de discussion d’un utilisator anonimo qu’at p’oncor fêt un compto ou ben que nen emplèye pas.
 Por cen nos devens empleyér la sin’adrèce IP numerica por lo recognetre.
-N’adrèce IP d’ense pôt étre partagiêe per un mouél d’utilisators.
-Se vos éte {{GENDER:|un utilisator|n’utilisatrice|un utilisator}} anonim{{GENDER:|o|a|o}} et pués se vos constatâd que des comentèros que vos regârdont pas vos sont étâs adrèciês, se vos plét [[Special:UserLogin/signup|féte un compto]] ou ben [[Special:UserLogin|branchiéd-vos]] por èvitar tota confusion que vint avouéc d’ôtros utilisators anonimos.''",
+Un’adrèce IP d’ense pôt étre partagiêe per un mouél d’utilisators.
+Se vos éte {{GENDER:|un utilisator|un’utilisatrice|un utilisator}} anonim{{GENDER:|o|a|o}} et pués se vos constatâd que des comentèros que vos regârdont pas vos sont étâs adrèciês, se vos plét [[Special:UserLogin/signup|féte un compto]] ou ben [[Special:UserLogin|branchiéd-vos]] por èvitar tota confusion que vint avouéc d’ôtros utilisators anonimos.''",
 'noarticletext' => 'Ora y at gins de tèxto dedens cela pâge.
 Vos pouede [[Special:Search/{{PAGENAME}}|fâre na rechèrche sur cél titro]] dedens les ôtres pâges,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} rechèrchiér dedens los jornals liyês]
@@ -1041,7 +1041,7 @@ Se cen tôrne pas reussir, [[Special:UserLogout|dèbranchiéd-vos]] et pués tor
 'token_suffix_mismatch' => "'''Voutron changement est pas étâ accèptâ, voutron cliant at mècllâ los caractèros de ponctuacion dedens lo jeton de changement.'''
 Lo changement est étâ refusâ por empachiér la corrupcion du tèxto de la pâge.
 Des côps ceti problèmo arreve quand vos empleyéd un sèrviço de proxi Vouèbe anonimo qu’est pas de sûr.",
-'edit_form_incomplete' => "'''Quârques parties du formulèro de changement ont pas avengiê lo sèrvior ; controlâd que voutros changements sont entiérs et pués tornâd èprovar.'''",
+'edit_form_incomplete' => "'''Quârques parties du formulèro de changement ant pas avengiê lo sèrvior ; controlâd que voutros changements sont entiérs et pués tornâd èprovar.'''",
 'editing' => 'Changement de $1',
 'creating' => 'Crèacion de $1',
 'editingsection' => 'Changement de $1 (sèccion)',
@@ -1069,15 +1069,15 @@ Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo ou ben que vos l’é
 '''Empleyéd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
 'longpageerror' => "'''Fôta : lo tèxto que vos éd mandâ fât {{PLURAL:$1|un Kio|$1 Kio}}, cen que dèpâsse la limita fixâye a {{PLURAL:$2|un Kio|$2 Kio}}.'''
 Pôt pas étre encartâ.",
-'readonlywarning' => "'''Atencion : la bâsa de donâs est étâye vèrrolyêe por mantegnence, vos porréd vêr pas encartar voutros changements d’abôrd.'''
+'readonlywarning' => "'''Atencion : la bâsa de balyês est étâye vèrrolyêe por mantegnence, vos porréd vêr pas encartar voutros changements d’abôrd.'''
 Vos pouede copiyér et côlar voutron tèxto dedens un fichiér tèxto et pués l’encartar por ples târd.
 
-L’administrator qu’at vèrrolyê la bâsa de donâs at balyê cet’èxplicacion : $1",
-'protectedpagewarning' => "'''Atencion : ceta pâge est étâye protègiêe de façon que solament los utilisators qu’ont lo statut d’administrator la pouessont changiér.'''
+L’administrator qu’at vèrrolyê la bâsa de balyês at balyê cet’èxplicacion : $1",
+'protectedpagewarning' => "'''Atencion : ceta pâge est étâye protègiêe de façon que solament los utilisators qu’ant lo statut d’administrator la pouessont changiér.'''
 Por refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
 'semiprotectedpagewarning' => "'''Nota :''' ceta pâge est étâye protègiêe de façon que solament los utilisators encartâs la pouessont changiér.
 Por refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
-'cascadeprotectedwarning' => "'''Atencion :''' cela pâge-que est étâye protègiêe de façon que solament los utilisators qu’ont lo statut d’administrator la pouessont changiér, perce qu’el est entrebetâye dedens {{PLURAL:$1|ceta pâge protègiêe|cetes pâges protègiêes}} avouéc la « protèccion en cascâda » activâye :",
+'cascadeprotectedwarning' => "'''Atencion :''' cela pâge-que est étâye protègiêe de façon que solament los utilisators qu’ant lo statut d’administrator la pouessont changiér, perce qu’el est entrebetâye dedens {{PLURAL:$1|ceta pâge protègiêe|cetes pâges protègiêes}} avouéc la « protèccion en cascâda » activâye :",
 'titleprotectedwarning' => "'''Atencion : ceta pâge est étâye protègiêe de façon que des [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre.'''
 Por refèrence, la dèrriére entrâ du jornal est balyêe ce-desot :",
 'templatesused' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} per ceta pâge :',
@@ -1112,7 +1112,7 @@ Semble que seye étâye suprimâye.',
 Ègziste ja.',
 'defaultmessagetext' => 'Mèssâjo per dèfôt',
 'content-failed-to-parse' => 'Falyita de l’analisa du contegnu de $2 por lo modèlo $1 : $3',
-'invalid-content-data' => 'Donâs du contegnu pas justes',
+'invalid-content-data' => 'Balyês du contegnu pas justes',
 'content-not-allowed-here' => 'Lo contegnu « $1 » est pas ôtorisâ sur la pâge [[$2]]',
 
 # Content models
@@ -1169,7 +1169,7 @@ La rêson balyêe per $3 ére ''$2''.",
 'cur' => 'd’ora',
 'next' => 'aprés',
 'last' => 'devant',
-'page_first' => 'Premiére',
+'page_first' => 'premiére',
 'page_last' => 'dèrriére',
 'histlegend' => "Chouèx de difs : pouentâd les câses de les vèrsions a comparar et pués apoyéd dessus « Entrâ » ou ben lo boton d’avâl.<br />
 Lègenda : '''({{int:cur}})''' = difèrence avouéc la vèrsion d’ora, '''({{int:last}})''' = difèrence avouéc la vèrsion devant, '''{{int:minoreditletter}}''' = petiôt changement.",
@@ -1186,7 +1186,7 @@ Lègenda : '''({{int:cur}})''' = difèrence avouéc la vèrsion d’ora, '''({{i
 'history-feed-item-nocomment' => '$1 lo $3 a $4',
 'history-feed-empty' => 'La pâge demandâye ègziste pas.
 Pôt-étre el est étâye suprimâye du vouiqui ou ben renomâye.
-Èprovâd de [[Special:Search|rechèrchiér sur lo vouiqui]] por trovar des pâges novèles que vont avouéc.',
+Èprovâd de [[Special:Search|rechèrchiér sur lo vouiqui]] por trovar des pâges novèles que vant avouéc.',
 
 # Revision deletion
 'rev-deleted-comment' => '(rèsumâ de changement enlevâ)',
@@ -1238,7 +1238,7 @@ Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cach
 'revdelete-confirm' => 'Se vos plét, confirmâd qu’o est franc cen que vos voléd fâre, que vos en compregnéd les consèquences et pués que vos o féte en acôrd avouéc les [[{{MediaWiki:Policy-url}}|règlles de dedens]].',
 'revdelete-suppress-text' => "La rèprèssion dêt étre empleyêe '''ren que''' dens cetos câs :
 * Enformacions que pôvont étre difamatouères
-* Enformacions a sè que vont pas avouéc
+* Enformacions a sè que vant pas avouéc
 *: ''adrèces et numerôs de tèlèfono, numerôs de sècuritât sociâla, et tot cen que vat avouéc''",
 'revdelete-legend' => 'Dèfenir des rèstriccions de visibilitât',
 'revdelete-hide-text' => 'Cachiér lo tèxto de la vèrsion',
@@ -1246,11 +1246,11 @@ Los ôtros administrators de {{SITENAME}} porront tojorn arrevar u contegnu cach
 'revdelete-hide-name' => 'Cachiér l’accion et la ciba',
 'revdelete-hide-comment' => 'Cachiér lo rèsumâ de changement',
 'revdelete-hide-user' => 'Cachiér lo nom d’utilisator / l’adrèce IP du contributor',
-'revdelete-hide-restricted' => 'Rèprimar celes donâs ux administrators et pués ux ôtros',
+'revdelete-hide-restricted' => 'Rèprimar celes balyês ux administrators et pués ux ôtros',
 'revdelete-radio-same' => '(pas changiér)',
 'revdelete-radio-set' => 'Ouè',
 'revdelete-radio-unset' => 'Nan',
-'revdelete-suppress' => 'Rèprimar celes donâs ux administrators et pués ux ôtros',
+'revdelete-suppress' => 'Rèprimar celes balyês ux administrators et pués ux ôtros',
 'revdelete-unsuppress' => 'Enlevar les rèstriccions sur les vèrsions refêtes',
 'revdelete-log' => 'Rêson :',
 'revdelete-submit' => 'Aplicar a {{PLURAL:$1|la vèrsion chouèsia|les vèrsions chouèsies}}',
@@ -1271,14 +1271,14 @@ Pôt pas étre cachiêe.',
 Vos y éd pas accès.',
 'revdelete-modify-no-access' => 'Fôta en changient la piéce datâye du $1 a $2 : el est marcâye coment « rètrenta ».
 Vos y éd pas accès.',
-'revdelete-modify-missing' => 'Fôta en changient la piéce avouéc l’identifient $1 : el est manquenta dedens la bâsa de donâs !',
+'revdelete-modify-missing' => 'Fôta en changient la piéce avouéc l’identifient $1 : el est manquenta dedens la bâsa de balyês !',
 'revdelete-no-change' => "'''Atencion :''' la piéce datâye du $1 a $2 at ja la configuracion de visibilitât demandâye.",
 'revdelete-concurrent-change' => 'Fôta en changient la piéce datâye du $1 a $2 : lo sin statut semble étre étâ changiê per un ôtro justo que vos èprovâvâd d’o changiér.
 Se vos plét, controlâd los jornals.',
 'revdelete-only-restricted' => 'Fôta en cachient la piéce datâye du $1 a $2 : vos pouede pas rèprimar celes piéces de la vua ux administrators sen chouèsir avouéc des ôtros chouèx de visibilitât.',
 'revdelete-reason-dropdown' => '*Rêsons corentes de suprèssion
 ** Violacion du drêt d’ôtor
-** Comentèros ou ben enformacions a sè que vont pas avouéc
+** Comentèros ou ben enformacions a sè que vant pas avouéc
 ** Nom d’utilisator que vat pas avouéc
 ** Enformacions que pôvont étre difamatouères',
 'revdelete-otherreason' => 'Ôtra rêson / rêson de ples :',
@@ -1288,7 +1288,7 @@ Se vos plét, controlâd los jornals.',
 
 # Suppression log
 'suppressionlog' => 'Jornal de les suprèssions',
-'suppressionlogtext' => 'Vê-que na lista de les suprèssions et des blocâjos qu’ont de contegnu cachiê ux administrators.
+'suppressionlogtext' => 'Vê-que na lista de les suprèssions et des blocâjos qu’ant de contegnu cachiê ux administrators.
 Vêde la [[Special:BlockList|lista des blocâjos]] por la lista des banissements et des blocâjos que sont ora actifs.',
 
 # History merging
@@ -1301,7 +1301,7 @@ Assurâd-vos que cél changement consèrverat la continuitât de l’historico d
 'mergehistory-list' => 'Historico des changements que pôvont étre fusionâs',
 'mergehistory-merge' => 'Cetes vèrsions de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].
 Empleyéd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècifiâye.
-Notâd que l’usâjo des lims de navigacion remetrat a zérô cela colona.',
+Notâd que l’usâjo des lims de navigacion rebeterat a zérô cela colona.',
 'mergehistory-go' => 'Montrar los changements que pôvont étre fusionâs',
 'mergehistory-submit' => 'Fusionar les vèrsions',
 'mergehistory-empty' => 'Niona vèrsion pôt étre fusionâye.',
@@ -1342,7 +1342,7 @@ Vos pouede trovar més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|
 'searchresults' => 'Rèsultats de la rechèrche',
 'searchresults-title' => 'Rèsultats de la rechèrche por « $1 »',
 'searchresulttext' => 'Por més d’enformacions sur la rechèrche dedens {{SITENAME}}, vêde [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => "Vos éd rechèrchiê « '''[[:$1]]''' » ([[Special:Prefixindex/$1|totes les pâges que començont per « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|totes les pâges qu’ont un lim de vers « $1 »]])",
+'searchsubtitle' => "Vos éd rechèrchiê « '''[[:$1]]''' » ([[Special:Prefixindex/$1|totes les pâges que començont per « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|totes les pâges qu’ant un lim de vers « $1 »]])",
 'searchsubtitleinvalid' => "Vos éd rechèrchiê « '''$1''' »",
 'toomanymatches' => 'Un mouél de corrèspondances est étâ retornâ, se vos plét èprovâd na rechèrche difèrenta',
 'titlematches' => 'Corrèspondances dedens los titros de les pâges',
@@ -1406,10 +1406,10 @@ Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 # Quickbar
 'qbsettings' => 'Bârra rapida',
 'qbsettings-none' => 'Pas yona',
-'qbsettings-fixedleft' => 'Fixa gôche',
-'qbsettings-fixedright' => 'Fixa drêta',
-'qbsettings-floatingleft' => 'Fllotenta gôche',
-'qbsettings-floatingright' => 'Fllotenta drêta',
+'qbsettings-fixedleft' => 'Fixa gôche',
+'qbsettings-fixedright' => 'Fixa drêta',
+'qbsettings-floatingleft' => 'Fllotenta gôche',
+'qbsettings-floatingright' => 'Fllotenta drêta',
 'qbsettings-directionality' => 'Fixa, d’aprés la dirèccionalitât d’ècritura de voutra lengoua',
 
 # Preferences page
@@ -1437,7 +1437,7 @@ Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 'prefs-misc' => 'De totes sôrtes',
 'prefs-resetpass' => 'Changiér lo contresegno',
 'prefs-changeemail' => 'Changiér l’adrèce èlèctronica',
-'prefs-setemail' => 'Dèfenir n’adrèce èlèctronica',
+'prefs-setemail' => 'Dèfenir un’adrèce èlèctronica',
 'prefs-email' => 'Chouèx de mèssageria èlèctronica',
 'prefs-rendering' => 'Aparence',
 'saveprefs' => 'Encartar',
@@ -1460,7 +1460,7 @@ Tôs celos que cognessont cela cllâf porront liére voutra lista de siuvu, chou
 Vê-que na valor fêta per hasârd que vos pouede empleyér : $1',
 'savedprefs' => 'Voutres prèferences sont étâyes encartâyes.',
 'timezonelegend' => 'Fus horèro :',
-'localtime' => 'Hora locala :',
+'localtime' => 'Hora locâla :',
 'timezoneuseserverdefault' => 'Empleyér la valor du vouiqui per dèfôt ($1)',
 'timezoneuseoffset' => 'Ôtro (spècifiar lo dècalâjo)',
 'timezoneoffset' => 'Dècalâjo horèro¹ :',
@@ -1512,9 +1512,9 @@ Dêt pas dèpassar $1 caractèro{{PLURAL:$1||s}}.',
 Cel’enformacion serat publica.',
 'email' => 'Mèssageria èlèctronica',
 'prefs-help-realname' => 'U chouèx : se vos lo balyéd, serat empleyê por vos atribuar voutres ôvres.',
-'prefs-help-email' => 'U chouèx : mas el est nècèssèra por remetre a zérô voutron contresegno, se vos vegnévâd a l’oubliar.',
+'prefs-help-email' => 'L’adrèce èlèctronica est u chouèx, mas el est nècèssèra por rebetar a zérô voutron contresegno, se vos vegnévâd a l’oubliar.',
 'prefs-help-email-others' => 'Vos porriâd asse-ben chouèsir de lèssiér los ôtros sè veriér vers vos per mèssageria èlèctronica avouéc un lim sur voutra pâge utilisator ou ben de discussion sen que seye nècèssèro de rèvèlar voutron identitât.',
-'prefs-help-email-required' => 'N’adrèce èlèctronica est nècèssèra.',
+'prefs-help-email-required' => 'Un’adrèce èlèctronica est nècèssèra.',
 'prefs-info' => 'Enformacions de bâsa',
 'prefs-i18n' => 'Entèrnacionalisacion',
 'prefs-signature' => 'Signatura',
@@ -1530,9 +1530,9 @@ Cel’enformacion serat publica.',
 'prefs-displaywatchlist' => 'Chouèx de vua',
 'prefs-diffs' => 'Difèrences',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'L’adrèce èlèctronica semble justa',
-'email-address-validity-invalid' => 'Buchiéd n’adrèce èlèctronica justa',
+'email-address-validity-invalid' => 'Buchiéd un’adrèce èlèctronica justa',
 
 # User rights
 'userrights' => 'Administracion des drêts d’utilisator',
@@ -1550,7 +1550,7 @@ Cel’enformacion serat publica.',
 * Na petiôt’ètêla (*) endique que vos pouede pas enlevar cela tropa setout que vos l’éd apondua ou ben l’una l’ôtra.',
 'userrights-reason' => 'Rêson :',
 'userrights-no-interwiki' => 'Vos éd pas la pèrmission de changiér des drêts d’utilisator dessus d’ôtros vouiquis.',
-'userrights-nodatabase' => 'La bâsa de donâs « $1 » ègziste pas ou ben el est pas locala.',
+'userrights-nodatabase' => 'La bâsa de balyês « $1 » ègziste pas ou ben est pas locâla.',
 'userrights-nologin' => 'Vos vos dête [[Special:UserLogin|branchiér]] avouéc un compto d’administrator por balyér des drêts d’utilisator.',
 'userrights-notallowed' => 'Voutron compto at pas la pèrmission de balyér ou ben enlevar des drêts d’utilisator.',
 'userrights-changeable-col' => 'Les tropes que vos pouede changiér',
@@ -1596,16 +1596,16 @@ Cel’enformacion serat publica.',
 'right-reupload' => 'Ècllafar un fichiér ègzistent',
 'right-reupload-own' => 'Ècllafar un fichiér ègzistent tèlèchargiê per sè-mémo',
 'right-reupload-shared' => 'Ècllafar localament un fichiér present sur un dèpôt de fichiérs mèdia partagiê',
-'right-upload_by_url' => 'Tèlèchargiér un fichiér dês n’URL',
+'right-upload_by_url' => 'Tèlèchargiér un fichiér dês un’URL',
 'right-purge' => 'Purgiér lo cacho du seto d’una pâge sen confirmacion',
 'right-autoconfirmed' => 'Changiér les pâges mié-protègiêes',
 'right-bot' => 'Étre trètâ coment na mètoda ôtomatisâye',
-'right-nominornewtalk' => 'Pas dècllenchiér la notificacion de mèssâjo novél quand font un petiôt changement sur la pâge de discussion d’un utilisator',
+'right-nominornewtalk' => 'Pas dècllenchiér la notificacion de mèssâjo novél quand fant un petiôt changement sur la pâge de discussion d’un utilisator',
 'right-apihighlimits' => 'Empleyér des limites ples hôtes dedens les demandes API',
 'right-writeapi' => 'Empleyér l’API d’ècritura',
 'right-delete' => 'Suprimar des pâges',
-'right-bigdelete' => 'Suprimar des pâges qu’ont un grôs historico',
-'right-deletelogentry' => 'Suprimar et refâre n’entrâ spècifica du jornal',
+'right-bigdelete' => 'Suprimar des pâges qu’ant un grôs historico',
+'right-deletelogentry' => 'Suprimar et refâre un’entrâ spècifica du jornal',
 'right-deleterevision' => 'Suprimar et refâre na vèrsion spècifica d’una pâge',
 'right-deletedhistory' => 'Vêre les entrâs suprimâyes de l’historico sen lor tèxto',
 'right-deletedtext' => 'Vêre lo tèxto suprimâ et los changements entre les vèrsions suprimâyes',
@@ -1637,10 +1637,10 @@ Cel’enformacion serat publica.',
 'right-mergehistory' => 'Fusionar los historicos de les pâges',
 'right-userrights' => 'Changiér tôs los drêts d’un utilisator',
 'right-userrights-interwiki' => 'Changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui',
-'right-siteadmin' => 'Vèrrolyér et dèvèrrolyér la bâsa de donâs',
+'right-siteadmin' => 'Vèrrolyér et dèvèrrolyér la bâsa de balyês',
 'right-override-export-depth' => 'Èxportar les pâges avouéc les pâges liyêes tant qu’a na provondior de 5 nivéls',
 'right-sendemail' => 'Mandar un mèssâjo ux ôtros utilisators',
-'right-passwordreset' => 'Vêre los mèssâjos de remisa a zérô des contresegnos',
+'right-passwordreset' => 'Vêre los mèssâjos de remês’a zérô des contresegnos',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Jornal de les crèacions d’utilisators',
@@ -1664,7 +1664,7 @@ Cel’enformacion serat publica.',
 'action-upload' => 'tèlèchargiér cél fichiér',
 'action-reupload' => 'ècllafar cél fichiér ègzistent',
 'action-reupload-shared' => 'ècllafar localament cél fichiér present sur un dèpôt partagiê',
-'action-upload_by_url' => 'tèlèchargiér cél fichiér dês n’URL',
+'action-upload_by_url' => 'tèlèchargiér cél fichiér dês un’URL',
 'action-writeapi' => 'empleyér l’API d’ècritura',
 'action-delete' => 'suprimar cela pâge',
 'action-deleterevision' => 'suprimar cela vèrsion',
@@ -1684,7 +1684,7 @@ Cel’enformacion serat publica.',
 'action-mergehistory' => 'fusionar l’historico de cela pâge',
 'action-userrights' => 'changiér tôs los drêts d’utilisator',
 'action-userrights-interwiki' => 'changiér los drêts d’utilisator des utilisators que sont sur un ôtro vouiqui',
-'action-siteadmin' => 'vèrrolyér ou ben dèvèrrolyér la bâsa de donâs',
+'action-siteadmin' => 'vèrrolyér ou ben dèvèrrolyér la bâsa de balyês',
 'action-sendemail' => 'mandar des mèssâjos',
 
 # Recent changes
@@ -1719,7 +1719,7 @@ Cel’enformacion serat publica.',
 'rc_categories_any' => 'Totes',
 'rc-change-size-new' => '$1 octèt{{PLURAL:$1||s}} aprés changement',
 'newsectionsummary' => '/* $1 */ novèla sèccion',
-'rc-enhanced-expand' => 'Montrar los dètalys (il at fôta de JavaScript)',
+'rc-enhanced-expand' => 'Montrar los dètalys (at fôta de JavaScript)',
 'rc-enhanced-hide' => 'Cachiér los dètalys',
 'rc-old-title' => 'fêta avouéc lo titro originâl « $1 »',
 
@@ -1741,7 +1741,7 @@ Les pâges de voutra [[Special:Watchlist|lista de siuvu]] sont en '''grâs'''.",
 'upload-tryagain' => 'Mandar la dèscripcion du fichiér changiê',
 'uploadnologin' => 'Pas branchiê(ye)',
 'uploadnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê(ye)]] por povêr tèlèchargiér des fichiérs.',
-'upload_directory_missing' => 'Lo rèpèrtouèro de tèlèchargement ($1) est manquent et il at pas possu étre fêt per lo sèrvior Vouèbe.',
+'upload_directory_missing' => 'Lo rèpèrtouèro de tèlèchargement ($1) est manquent et at pas possu étre fêt per lo sèrvior Vouèbe.',
 'upload_directory_read_only' => 'Lo rèpèrtouèro de tèlèchargement ($1) est pas accèssiblo en ècritura dês lo sèrvior Vouèbe.',
 'uploaderror' => 'Fôta pendent lo tèlèchargement',
 'upload-recreate-warning' => "'''Atencion : un fichiér avouéc cél nom est étâ suprimâ ou ben dèplaciê.'''
@@ -1788,7 +1788,7 @@ Se vos plét, renomâd-lo et pués tornâd-lo tèlèchargiér.',
 'filename-tooshort' => 'Lo nom du fichiér est trop côrt.',
 'filetype-banned' => 'Cél tipo de fichiér est dèfendu.',
 'verification-error' => 'Cél fichiér pâsse pas lo contrôlo des fichiérs.',
-'hookaborted' => 'Lo changement que vos éd èprovâ de fâre est étâ anulâ per n’èxtension.',
+'hookaborted' => 'Lo changement que vos éd èprovâ de fâre est étâ anulâ per un’èxtension.',
 'illegal-filename' => 'Lo nom du fichiér est pas ôtorisâ.',
 'overwrite' => 'Ècllafar un fichiér ègzistent est pas ôtorisâ.',
 'unknown-error' => 'Na fôta encognua est arrevâ.',
@@ -1811,12 +1811,12 @@ Por o fâre, vos la devréd changiér a la man.
 * Nom du fichiér a tèlèchargiér : <strong>[[:$1]]</strong>
 * Nom du fichiér ègzistent : <strong>[[:$2]]</strong>
 Se vos plét, chouèsésséd-nen un ôtro.',
-'fileexists-thumbnail-yes' => "Lo fichiér semble étre n’émâge en talye rèduita ''(figura)''.
+'fileexists-thumbnail-yes' => "Lo fichiér semble étre un’émâge en talye rèduita ''(figura)''.
 [[$1|thumb]]
 Se vos plét, controlâd lo fichiér <strong>[[:$1]]</strong>.
 Se lo fichiér controlâ est la mém’émâge avouéc la talye originâla, y at pas fôta de tèlèchargiér na figura.",
 'file-thumbnail-no' => "Lo nom du fichiér comence per <strong>$1</strong>.
-Semble étre n’émâge en talye rèduita ''(figura)''.
+Semble étre un’émâge en talye rèduita ''(figura)''.
 Se vos éd cel’émâge en plêna rèsolucion, tèlèchargiéd-la, ôtrament changiéd lo sin nom, se vos plét.",
 'fileexists-forbidden' => 'Un fichiér avouéc cél nom ègziste ja et pôt pas étre ècllafâ.
 Se vos voléd adés tèlèchargiér voutron fichiér, se vos plét tornâd arriér et pués empleyéd un novél nom.
@@ -1900,7 +1900,7 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 'backend-fail-notsame' => 'Un fichiér pas pariér ègziste ja a « $1 ».',
 'backend-fail-invalidpath' => '« $1 » est pas un chemin de stocâjo justo.',
 'backend-fail-delete' => 'Y at pas moyen de suprimar lo fichiér « $1 ».',
-'backend-fail-describe' => 'Y at pas moyen de changiér les mètadonâs du fichiér « $1 ».',
+'backend-fail-describe' => 'Y at pas moyen de changiér les mètabalyês du fichiér « $1 ».',
 'backend-fail-alreadyexists' => 'Lo fichiér « $1 » ègziste ja.',
 'backend-fail-store' => 'Y at pas moyen de stocar lo fichiér « $1 » dedens « $2 ».',
 'backend-fail-copy' => 'Y at pas moyen de copiyér lo fichiér « $1 » vers « $2 ».',
@@ -1920,8 +1920,8 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 'backend-fail-usable' => 'Y at pas moyen de liére d’ècrire lo fichiér « $1 » a côsa de pèrmissions ensufisentes ou ben de rèpèrtouèros / conteniors manquents.',
 
 # File journal errors
-'filejournal-fail-dbconnect' => 'Y at pas moyen de sè branchiér a la bâsa de donâs du jornal por lo sistèmo de stocâjo « $1 ».',
-'filejournal-fail-dbquery' => 'Y at pas moyen de betar a jorn la bâsa de donâs du jornal por lo sistèmo de stocâjo « $1 ».',
+'filejournal-fail-dbconnect' => 'Y at pas moyen de sè branchiér a la bâsa de balyês du jornal por lo sistèmo de stocâjo « $1 ».',
+'filejournal-fail-dbquery' => 'Y at pas moyen de betar a jorn la bâsa de balyês du jornal por lo sistèmo de stocâjo « $1 ».',
 
 # Lock manager
 'lockmanager-notlocked' => 'Y at pas moyen de dèvèrrolyér « $1 » ; il est pas vèrrolyê.',
@@ -1930,8 +1930,8 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 'lockmanager-fail-acquirelock' => 'Y at pas moyen d’avêr lo vèrroly por « $1 ».',
 'lockmanager-fail-openlock' => 'Y at pas moyen d’uvrir lo fichiér de vèrroly por « $1 ».',
 'lockmanager-fail-releaselock' => 'Y at pas moyen de relâchiér lo vèrroly por « $1 ».',
-'lockmanager-fail-db-bucket' => 'Y at pas moyen de sè veriér vers prod de bâses de donâs de vèrroly dedens la sèlye $1.',
-'lockmanager-fail-db-release' => 'Y at pas moyen de relâchiér los vèrrolys sur la bâsa de donâs $1.',
+'lockmanager-fail-db-bucket' => 'Y at pas moyen de sè veriér vers prod de bâses de balyês de vèrroly dedens la sèlye $1.',
+'lockmanager-fail-db-release' => 'Y at pas moyen de relâchiér los vèrrolys sur la bâsa de balyês $1.',
 'lockmanager-fail-svr-acquire' => 'Y at pas moyen d’avêr des vèrrolys sur lo sèrvior $1.',
 'lockmanager-fail-svr-release' => 'Y at pas moyen de relâchiér los vèrrolys sur lo sèrvior $1.',
 
@@ -1948,7 +1948,7 @@ Pôt pas étre controlâ coment fôt por la sècuritât.',
 'uploadstash-summary' => 'Ceta pâge balye accès ux fichiérs que sont tèlèchargiês ou ben en côrs de tèlèchargement, mas sont p’oncor publeyês dedens lo vouiqui. Celos fichiérs sont p’oncor visiblos, solament por l’utilisator que los at tèlèchargiês.',
 'uploadstash-clear' => 'Èfaciér los fichiérs en cacho',
 'uploadstash-nofiles' => 'Vos éd gins de fichiér en cacho.',
-'uploadstash-badtoken' => 'L’ègzécucion de cel’accion at pas reussi, pôt-étre perce que voutros identifients de changement ont èxpirâ. Tornâd èprovar.',
+'uploadstash-badtoken' => 'L’ègzécucion de cel’accion at pas reussi, pôt-étre perce que voutros identifients de changement ant èxpirâ. Tornâd èprovar.',
 'uploadstash-errclear' => 'L’èfacement des fichiérs at pas reussi.',
 'uploadstash-refresh' => 'Rafrèchir la lista des fichiérs',
 'invalid-chunk-offset' => 'Dèplacement de bocon pas justo',
@@ -1989,13 +1989,13 @@ Se vos plét, tornâd controlar que l’URL est justa et pués que lo seto est e
 'upload-curl-error28' => 'Dèlê dèpassâ pendent lo tèlèchargement',
 'upload-curl-error28-text' => 'Lo seto at tardâ bien a rèpondre.
 Se vos plét, controlâd que lo seto est en legne, atende un pou et pués tornâd èprovar.
-Vos pouede asse-ben èprovar a n’hora de muendra afluence.',
+Vos pouede asse-ben èprovar a un’hora de muendra afluence.',
 
 'license' => 'Licence :',
 'license-header' => 'Licence',
 'nolicense' => 'Pas yona chouèsia',
 'license-nopreview' => '(Apèrçu pas disponiblo)',
-'upload_source_url' => ' (n’URL justa et accèssibla publicament)',
+'upload_source_url' => ' (un’URL justa et accèssibla publicament)',
 'upload_source_file' => ' (un fichiér sur voutron ordenator)',
 
 # Special:ListFiles
@@ -2063,7 +2063,7 @@ Pôt-étre vos voléd changiér la dèscripcion sur la sina [$2 pâge de dèscri
 'filerevert-defaultcomment' => 'Rèvocâ a la vèrsion du $1 a $2',
 'filerevert-submit' => 'Rèvocar',
 'filerevert-success' => "'''[[Media:$1|$1]]''' est étâ rèvocâ a la [$4 vèrsion du $2 a $3].",
-'filerevert-badversion' => 'Y at gins de vèrsion locala devant de cél fichiér avouéc l’horodatâjo balyê.',
+'filerevert-badversion' => 'Y at gins de vèrsion locâla devant de cél fichiér avouéc l’horodatâjo balyê.',
 
 # File deletion
 'filedelete' => 'Suprimar $1',
@@ -2130,12 +2130,12 @@ Oubliâd pas de controlar s’y at gins d’ôtro lim de vers los modèlos devan
 'statistics-views-peredit' => 'Vues per changement',
 'statistics-users' => '[[Special:ListUsers|Utilisators]] encartâs',
 'statistics-users-active' => 'Utilisators actifs',
-'statistics-users-active-desc' => 'Utilisators qu’ont fêt por lo muens n’accion pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}',
+'statistics-users-active-desc' => 'Utilisators qu’ant fêt por lo muens un’accion pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}',
 'statistics-mostpopular' => 'Pâges les ples vues',
 
-'disambiguations' => 'Pâges qu’ont des lims de vers des pâges d’homonimia',
+'disambiguations' => 'Pâges qu’ant des lims de vers des pâges d’homonimia',
 'disambiguationspage' => 'Template:Homonimia',
-'disambiguations-text' => "Cetes pâges ont por lo muens un lim de vers na '''pâge d’homonimia'''.
+'disambiguations-text' => "Cetes pâges ant por lo muens un lim de vers na '''pâge d’homonimia'''.
 Devriant pletout pouentar vers na pâge que vat avouéc.<br />
 Na pâge est trètâye coment na pâge d’homonimia s’emplèye un modèlo liyê a [[MediaWiki:Disambiguationspage]].",
 
@@ -2154,7 +2154,7 @@ Ora redirige vers [[$2]].',
 'brokenredirects-delete' => 'suprimar',
 
 'withoutinterwiki' => 'Pâges sen lims entèrlengoues',
-'withoutinterwiki-summary' => 'Cetes pâges ont gins de lim de vers d’ôtres lengoues.',
+'withoutinterwiki-summary' => 'Cetes pâges ant gins de lim de vers d’ôtres lengoues.',
 'withoutinterwiki-legend' => 'Prèfixo',
 'withoutinterwiki-submit' => 'Montrar',
 
@@ -2219,7 +2219,7 @@ Ora redirige vers [[$2]].',
 'move' => 'Dèplaciér',
 'movethispage' => 'Dèplaciér ceta pâge',
 'unusedimagestext' => 'Cetos fichiérs ègzistont, mas sont pas entrebetâs dedens niona pâge.
-Se vos plét, notâd que d’ôtros setos Vouèbe pôvont avêr un lim de vers un fichiér avouéc n’URL drêta, donc un fichiér pôt adés étre listâ ique pendent qu’il est en usâjo actif.',
+Se vos plét, notâd que d’ôtros setos Vouèbe pôvont avêr un lim de vers un fichiér avouéc un’URL drêta, donc un fichiér pôt adés étre listâ ique pendent qu’il est en usâjo actif.',
 'unusedcategoriestext' => 'Cetes catègories ègzistont, mas nion’ôtra pâge niona catègorie les emplèye.',
 'notargettitle' => 'Niona ciba',
 'notargettext' => 'Vos éd pas spècifiâ na pâge un utilisator ciba sur laquinta / loquint vos souhètâd fâre cel’accion.',
@@ -2263,7 +2263,7 @@ Vos pouede rètrendre la vua en chouèséssent un tipo de jornal, lo nom d’uti
 'allpagesnext' => 'Aprés',
 'allpagessubmit' => 'Listar',
 'allpagesprefix' => 'Fâre vêre les pâges que començont per lo prèfixo :',
-'allpagesbadtitle' => 'Lo titro de la pâge balyêe est pas justo ou ben il at un prèfixo entèrlengoua ou entèrvouiqui resèrvâ.
+'allpagesbadtitle' => 'Lo titro de la pâge balyêe est pas justo ou ben contint un prèfixo entèrlengoua ou entèrvouiqui resèrvâ.
 Contint de sûr yon ou ben un mouél de caractèros que pôvont pas étre empleyês dedens los titros.',
 'allpages-bad-ns' => '{{SITENAME}} at gins d’èspâço de noms « $1 ».',
 'allpages-hide-redirects' => 'Cachiér les redirèccions',
@@ -2293,7 +2293,7 @@ Vêde asse-ben les [[Special:WantedCategories|catègories demandâyes]].',
 'linksearch-ns' => 'Èspâço de noms :',
 'linksearch-ok' => 'Rechèrchiér',
 'linksearch-text' => 'Des caractèros j·oquères coment « *.wikipedia.org » pôvont étre empleyês.
-Ils ont fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *.org ».<br />
+Ils ant fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *.org ».<br />
 {{PLURAL:$2|Protocolo recognu|Protocolos recognus}} : <code>$1</code> (http:// per dèfôt se nion protocolo est spècifiâ).',
 'linksearch-line' => '$1 est liyê dês $2',
 'linksearch-error' => 'Los caractèros j·oquères pôvont étre empleyês ren qu’u comencement du nom de domêno de l’hôto.',
@@ -2306,7 +2306,7 @@ Ils ont fôta de por lo muens un domêno de nivél de dessus, per ègzemplo « *
 
 # Special:ActiveUsers
 'activeusers' => 'Lista des utilisators actifs',
-'activeusers-intro' => 'O est na lista des utilisators qu’ont ègzèrciê n’activitât la quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.',
+'activeusers-intro' => 'O est na lista des utilisators qu’ant ègzèrciê un’activitât la quinta que seye pendent {{PLURAL:$1|lo jorn passâ|los $1 jorns passâs}}.',
 'activeusers-count' => '$1 accion{{PLURAL:$1||s}} pendent {{PLURAL:$3|lo jorn passâ|los $3 jorns passâs}}',
 'activeusers-from' => 'Fâre vêre los utilisators dês :',
 'activeusers-hidebots' => 'Cachiér los robots',
@@ -2332,9 +2332,9 @@ Y pôt avêr [[{{MediaWiki:Listgrouprights-helppage}}|més d’enformacions]] su
 'listgrouprights-addgroup-self-all' => 'Sè pôt apondre totes les tropes a son prôpro compto',
 'listgrouprights-removegroup-self-all' => 'Sè pôt enlevar totes les tropes de son prôpro compto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nion’adrèce d’èxpèdior',
-'mailnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê]] et avêr spècifiâ n’adrèce èlèctronica justa dens voutres [[Special:Preferences|prèferences]] por povêr mandar des mèssâjos a d’ôtros utilisators.',
+'mailnologintext' => 'Vos dête étre [[Special:UserLogin|branchiê]] et avêr spècifiâ un’adrèce èlèctronica justa dens voutres [[Special:Preferences|prèferences]] por povêr mandar des mèssâjos a d’ôtros utilisators.',
 'emailuser' => 'Lui mandar un mèssâjo',
 'emailuser-title-target' => 'Mandar un mèssâjo a cet’utilisat{{GENDER:$1|or|rice}}',
 'emailuser-title-notarget' => 'Mandar un mèssâjo a l’utilisator',
@@ -2346,7 +2346,7 @@ L’adrèce èlèctronica que vos éd buchiêe dens voutres [[Special:Preference
 'usermaildisabled' => 'L’èxpèdicion de mèssâjos entre utilisators est dèsactivâye',
 'usermaildisabledtext' => 'Vos pouede pas mandar de mèssâjos a d’ôtros utilisators sur ceti vouiqui',
 'noemailtitle' => 'Nion’adrèce èlèctronica',
-'noemailtext' => 'Cet’utilisator at pas spècifiâ n’adrèce èlèctronica justa.',
+'noemailtext' => 'Cet’utilisator at pas spècifiâ un’adrèce èlèctronica justa.',
 'nowikiemailtitle' => 'Niona mèssageria èlèctronica ôtorisâye',
 'nowikiemailtext' => 'Cél utilisator at chouèsi de pas recêvre de mèssâjos de la pârt d’ôtros utilisators.',
 'emailnotarget' => 'Nom d’utilisator du dèstinatèro pas ègzistent pas justo.',
@@ -2366,7 +2366,7 @@ L’adrèce èlèctronica que vos éd buchiêe dens voutres [[Special:Preference
 'emailuserfooter' => 'Ceti mèssâjo est étâ mandâ per « $1 » a « $2 » per la fonccion « Lui mandar un mèssâjo » de {{SITENAME}}.',
 
 # User Messenger
-'usermessage-summary' => 'Il at lèssiê un mèssâjo sistèmo.',
+'usermessage-summary' => 'At lèssiê un mèssâjo sistèmo.',
 'usermessage-editor' => 'Mèssagiér du sistèmo',
 'usermessage-template' => 'MediaWiki:MèssâjoUtilisator',
 
@@ -2754,7 +2754,7 @@ Vêde la [[Special:BlockList|lista des blocâjos]] por revêre los blocâjos.',
 'blocklist-params' => 'Paramètres de blocâjo',
 'blocklist-reason' => 'Rêson',
 'ipblocklist-submit' => 'Rechèrchiér',
-'ipblocklist-localblock' => 'Blocâjo local',
+'ipblocklist-localblock' => 'Blocâjo locâl',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|Ôtro blocâjo|Ôtros blocâjos}}',
 'infiniteblock' => 'sen fin',
 'expiringblock' => 'èxpire lo $1 a $2',
@@ -3735,7 +3735,7 @@ Los ôtros champs seront cachiês per dèfôt.
 'monthsall' => 'tôs',
 'limitall' => 'tôs',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar l’adrèce èlèctronica',
 'confirmemail_noemail' => 'Vos éd pas dèfeni una adrèce èlèctronica valida dens voutres [[Special:Preferences|prèferences]].',
 'confirmemail_text' => '{{SITENAME}} at fôta du contrôlo de voutra adrèce èlèctronica devant que povêr utilisar tota fonccion de mèssageria.
index 29f58eb..07775cb 100644 (file)
@@ -547,7 +547,7 @@ Fuirich ort mus feuch thu ris a-rithist.",
 'loginlanguagelabel' => 'Cànan: $1',
 'suspicious-userlogout' => "Chaidh d' iarrtas airson clàradh a-mach a dhiùltadh a chionn 's gu bheil coltas gun deach a chur le brabhsair briste no le progsaidh tasglannaidh.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Mearachd neo-aithichte san fheart mail() aig PHP.',
 'user-mail-no-addy' => 'Cha do ghabh am post-d a chur leis nach robh seòladh puist-d ann.',
 'user-mail-no-body' => 'Bha bodhaig na teachdaireachd bàn no air leth goirid.',
@@ -1156,7 +1156,7 @@ Chithear an tuairisgeul a tha aice air [duilleag tuairisgeul an fhaidhle $2] gu
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'nmembers' => '$1 {{PLURAL:$1|bhall|bhall|buill|ball}}',
-'nviews' => '$1 {{PLURAL:$1|sealladh|shealladh|sealladh|shealladh|seallaidhean|sealladh}}',
+'nviews' => '$1 {{PLURAL:$1|sealladh|shealladh|seallaidhean|sealladh}}',
 'uncategorizedpages' => 'Duilleagan gun roinn-seòrsa',
 'uncategorizedcategories' => 'Roinnean-seòrsa gun roinn-seòrsa',
 'unusedimages' => 'Faidhlichean gun chleachdadh',
@@ -1193,18 +1193,18 @@ Chithear an tuairisgeul a tha aice air [duilleag tuairisgeul an fhaidhle $2] gu
 
 # Special:Categories
 'categories' => 'Roinnean-seòrsa',
-'categoriespagetext' => "Tha duilleagan no meadhan {{PLURAL:$1|san roinn-seòrsa|san roinn-seòrsa|san roinn-seòrsa|san roinn-seòrsa|sna roinntean-seòrsa|san roinn-seòrsa}} a leanas.
+'categoriespagetext' => "Tha duilleagan no meadhan {{PLURAL:$1|san roinn-seòrsa|sna roinntean-seòrsa|}} a leanas.
 Chan fhaicear [[Special:UnusedCategories|roinntean-seòrsa gun chleachdadh an-seo]].
 Thoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan iarraidh cuideachd]].",
 
 # Special:LinkSearch
-'linksearch' => 'Ceanglaichean dhan taobh a-muigh',
+'linksearch' => 'Lorg sna ceanglaichean dhan taobh a-muigh',
 'linksearch-line' => "Tha $1 a' ceangal an-seo o $2",
 
 # Special:ListGroupRights
 'listgrouprights-members' => '(liosta de bhuill)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Cuir post-dealain dhan chleachdaiche seo',
 'emailfrom' => 'O:',
 'emailto' => 'Gu:',
@@ -1217,8 +1217,8 @@ Thoir sùil air na [[Special:WantedCategories|roinntean-seòrsa a thathar 'gan i
 'mywatchlist' => 'An clàr-faire',
 'watchlistfor2' => 'Do $1 $2',
 'nowatchlist' => "Chan eil rud sam bith air a' chlàr-fhaire agad.",
-'addedwatchtext' => "Chaidh an duilleag \"[[:\$1]]\" a chur ri [[Special:Watchlist|do chlàr-faire]].
-Nochdaidh mùthaidhean a nithear air an duilleag seo 's air an duilleag deasbaireachd a tha co-cheangailte ris an-seo san àm ri teachd agus nochdaidh an duilleag ann an litrichean '''troma''' ann an [[Special:RecentChanges|liosta nam mùthaidhean ùra]] gum bi e furasta ri fhaicinn.",
+'addedwatchtext' => 'Chaidh an duilleag "[[:$1]]" a chur ri [[Special:Watchlist|do chlàr-faire]].
+Nochdaidh mùthaidhean a nithear air an duilleag seo \'s air an duilleag deasbaireachd a tha co-cheangailte ris an-seo san àm ri teachd.',
 'removedwatchtext' => 'Chaidh an duilleag "[[:$1]]" a thoirt air falbh o [[Special:Watchlist|do chlàr-faire]].',
 'watch' => 'Cum sùil air',
 'watchthispage' => 'Cum sùil air an duilleag seo',
@@ -1227,8 +1227,8 @@ Nochdaidh mùthaidhean a nithear air an duilleag seo 's air an duilleag deasbair
 'watchlist-details' => 'Tha {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} air do chlàr-faire, gun luaidh air na duilleagan deasbaireachd.',
 'watchmethod-recent' => "A' sgrùdadh deasachaidhean ùra airson duilleagan air d' fhaire",
 'watchmethod-list' => "A' sgrùdadh duilleagan air d' fhaire airson deasachaidhean ùra",
-'watchlistcontains' => 'Tha $1 {{PLURAL:$1|duilleag|dhuilleag|duilleag|dhuilleag|duilleagan|duilleag}} air do chlàr-faire.',
-'wlnote' => 'Seo $1 {{PLURAL:$1|mhùthadh mu dheireadh|mhùthadh mu dheireadh|na mùthaidhean mu dheireadh|mùthadh mu dheireadh}} anns na $2 {{PLURAL:$2|uair|uair|uairean|uair}} mu dheireadh.',
+'watchlistcontains' => 'Tha $1 {{PLURAL:$1|duilleag|dhuilleag|duilleagan|duilleag}} air do chlàr-faire.',
+'wlnote' => 'Seo {{PLURAL:$1|an $1 mhùthadh|$1 mhùthadh|na $1 mùthaidhean|$1 mùthadh}} mu dheireadh san {{PLURAL:$2|$2 uair a thìde|$2 uair a thìde|$2 uairean a thìde|$2 uair a thìde}} mu dheireadh, mar a bha e $3, $4.',
 'wlshowlast' => 'Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh $3',
 'watchlist-options' => 'Roghainnean mo chlàir-faire',
 
@@ -1267,8 +1267,8 @@ Seall air $2 airson clàr de dhuilleagan a chaidh a sguabadh às o chionn ghoiri
 
 # Protect
 'protectlogpage' => 'Loga an dìon',
-'protectlogtext' => "Tha liosta na chaidh a dhìon 's a neo-dhìon gu h-ìosal.
-Cuir sùil air [[Special:ProtectedPages|liosta nan duilleagan fo dhìon]] airson liosta na fheadhainn a tha fo dhìon an-dràsta fhèin.",
+'protectlogtext' => 'Tha liosta na chaidh a dhìon gu h-ìosal.
+Cuir sùil air [[Special:ProtectedPages|liosta nan duilleagan fo dhìon]] airson liosta na fheadhainn a tha fo dhìon an-dràsta fhèin.',
 'protectedarticle' => '"[[$1]]" air a dhìon',
 'modifiedarticleprotection' => 'a dh\'atharraich an ìre dìon de "[[$1]]"',
 'unprotectedarticle' => 'a neo-dhìon "[[$1]]"',
@@ -1282,12 +1282,12 @@ Cuir sùil air [[Special:ProtectedPages|liosta nan duilleagan fo dhìon]] airson
 'protect-text' => "Chì thu an ìre dìon dhen duilleag '''$1''' an-seo agus is urrainn dhut atharrachadh an-seo.",
 'protect-locked-access' => "Chan eil cead aig a' chunntas agad an ìre dìon de dhuilleag atharrachadh.
 Seo roghainnean làithreach na duilleige '''$1''':",
-'protect-cascadeon' => "Tha an duilleag seo fo dhìon an-dràsta a chionn 's gu bheil e air a ghabhail a-steach {{PLURAL:$1|san duilleag|sna duilleagan|san duilleag|sna duilleagan|san duilleag|sna duilleagan}} a leanas aig a bheil dìon easach air.
+'protect-cascadeon' => "Tha an duilleag seo fo dhìon an-dràsta a chionn 's gu bheil e air a ghabhail a-steach {{PLURAL:$1|$1  duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} a leanas aig a bheil dìon easach air.
 'S urrainn dhut ìre dìon na duilleige seo atharrachadh ach cha bhi buaidh air an dìon easach.",
 'protect-default' => 'Ceadaich a h-uile cleachdaiche',
-'protect-fallback' => 'Iarr cead "$1"',
-'protect-level-autoconfirmed' => 'Cuir bacadh air cleachdaichean ùra is feadhainn gun chlàrachadh',
-'protect-level-sysop' => 'Rianadairean a-mhàin',
+'protect-fallback' => 'Na ceadaich ach do chleachdaichean aig a bheil cead "$1"',
+'protect-level-autoconfirmed' => 'Na ceadaich ach cleachdaichean a chaidh an dearbhadh gu fèin-obrachail',
+'protect-level-sysop' => 'Na ceadaich ach rianadairean',
 'protect-summary-cascade' => 'mar eas',
 'protect-expiring' => 'falbhaidh an ùine air $1 (UTC)',
 'protect-cascade' => "Dìon duilleagan a tha 'gan gabhail a-steach san duilleag seo (dìon mar eas)",
@@ -1296,7 +1296,7 @@ Seo roghainnean làithreach na duilleige '''$1''':",
 'restriction-level' => 'Ìre bacaidh:',
 
 # Undelete
-'undeleterevisions' => 'Chaidh $1 {{PLURAL:$1|leth-bhreac|leth-bhreac|leth-bhreac|leth-bhreac|leth-bhreacan|leth-bhreac}} a chur san tasg-lann',
+'undeleterevisions' => 'Chaidh {{PLURAL:$1|$1 leth-bhreac|$1 leth-bhreac|$1 leth-bhreacan|$1 leth-bhreac}} a chur san tasg-lann',
 'undeletelink' => 'seall/aisig',
 'undeleteviewlink' => 'seall',
 
@@ -1349,8 +1349,8 @@ Seo roghainnean làithreach na duilleige '''$1''':",
 'ipboptions' => '2 uair a thìde:2 hours, 1 latha:1 day, 3 làithean:3 days, 1 seachdain:1 week, 2 sheachdain:2 weeks, 1 mhìos:1 month, 3 mìosan:3 months, 6 mìosan:6 months, 1 bhliadhna:1 year,neo-chrìochnach:infinite',
 'badipaddress' => "Chan eil an seòladh IP aig a' cleachdair seo iomchaidh",
 'blockipsuccesssub' => "Shoirbhich leat leis a' bhacadh",
-'blockipsuccesstext' => "Tha [[Special:Contributions/$1|$1]] air a bhacadh.
-<br />Faic [[Special:BlockList|Liosta nan IP baicte]] na bacaidhean a dh'ath-sgrùdadh.",
+'blockipsuccesstext' => 'Chaidh [[Special:Contributions/$1|$1]] a bhacadh.
+<br />Faic [[Special:BlockList|liosta nan IP bacte]] gus sùile a thoirt air na bacaidhean.',
 'unblockip' => 'Neo-bhac an cleachdaiche',
 'ipusubmit' => 'Thoir air falbh am bacadh seo',
 'ipblocklist' => 'Cleachdaichean a chaidh a bhacadh',
@@ -1377,7 +1377,7 @@ Seo roghainnean làithreach na duilleige '''$1''':",
 'movepagetext' => "Ma chleachdas tu am foirm gu h-ìosal, cuiridh tu ainm ùr air 's gluaisidh tu a h-eachdraidh gu lèir dhan ainm ùr.
 Bidh an seann tiotal 'na ath-sheòladh dhan tiotal ùr an uairsin.
 'S urrainn dhut ath-sheòladh sam bith a tha a' dol dhan tiotal tùsail ùrachadh leis fhèin.
-Mura dèan thu sin, dèan cinntach gun cuir thu sùil air eagal 's gum bi [[Special:DoubleRedirects|ath-sheòlaidhean dùbailte]] no [[Special:BrokenRedirects|briste]] ann.
+Mura dèan thu sin, dèan cinnteach gun cuir thu sùil air eagal 's gum bi [[Special:DoubleRedirects|ath-sheòlaidhean dùbailte]] no [[Special:BrokenRedirects|briste]] ann.
 'S ann ort-sa a tha an t-uallach airson dèanamh cinntach gu bheil na ceanglaichean a' dol dha na h-àitichean ceart.
 
 Thoir an aire '''nach dèid''' an duilleag a ghluasad ma tha duilleag air an tiotal ùr mu thràth ach ma bhios e falamh no 'na ath-sheòladh 's mur eil eachdraidh deasachaidh ann.
@@ -1385,7 +1385,7 @@ Thoir an aire '''nach dèid''' an duilleag a ghluasad ma tha duilleag air an tio
 
 '''Rabhadh!'''
 Faodaidh seo a bhith 'na atharrachadh mòr ris nach bi dùil air duilleag air a bheil fèill mhòr;
-dèan cinntach gu bheil thu a' tuigsinn dè a' bhuaidh a bhios agad mus dèid thu air adhart.",
+dèan cinnteach gu bheil thu a' tuigsinn dè a' bhuaidh a bhios agad mus dèid thu air adhart.",
 'movepagetalktext' => "Thèid an duilleag deasbaireachd a tha co-cheangailte ris a ghluasad 'na cois '''ach:'''
 *Ma tha duilleag deasbaireachd nach eil falamh aig an ainm ùr mu thràth, no
 *Ma bheir thu air falbh a' chromag on bhogsa gu h-ìosal
@@ -1485,11 +1485,11 @@ Tadhail air [//www.mediawiki.org/wiki/Localisation Ionadaileadh MediaWiki] is [/
 'tooltip-summary' => 'Cuir a-steach gearr-chunntas',
 
 # Attribution
-'anonymous' => '{{PLURAL:$1|Cleachdaiche|Cleachdaichean|Cleachdaichean|Cleachdaichean|Cleachdaichean|Cleachdaichean}} gun ainm o {{SITENAME}}',
+'anonymous' => '{{PLURAL:$1|cleachdaiche|cleachdaichean}} gun ainm o {{SITENAME}}',
 'siteuser' => 'cleachdaiche {{SITENAME}} $1',
 'othercontribs' => 'Stèidhichte air obair le $1.',
 'others' => 'eile',
-'siteusers' => '{{PLURAL:$2|chleachdaiche|chleachdaiche|chleachdaiche|chleachdaiche|cleachdaichean|cleachdaiche}} {{SITENAME}} $1',
+'siteusers' => '{{PLURAL:$2|cleachdaiche|cleachdaichean}} {{SITENAME}} $1',
 
 # Browsing diffs
 'previousdiff' => '← Mùthadh nas sine',
index ba667a1..c2ed6cc 100644 (file)
@@ -545,7 +545,7 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Páxina',
-'nstab-user' => 'Páxina de {{GENDER:{{BASEPAGENAME}}|usuario|usuaria}}',
+'nstab-user' => 'Páxina de {{GENDER:{{#titleparts:{{BASEPAGENAME}}|1}}|usuario|usuaria}}',
 'nstab-media' => 'Páxina multimedia',
 'nstab-special' => 'Páxina especial',
 'nstab-project' => 'Páxina do proxecto',
@@ -764,7 +764,7 @@ Por favor, agarde antes de probar outra vez.',
 'loginlanguagelabel' => 'Lingua: $1',
 'suspicious-userlogout' => 'Rexeitouse a súa petición de saír do sistema porque semella que a enviou un navegador roto ou a caché dun proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Erro descoñecido na función mail() do PHP.',
 'user-mail-no-addy' => 'Intentou enviar un correo sen enderezo de correo electrónico.',
 'user-mail-no-body' => 'Intentou enviar un correo baleiro ou cun corpo curto de máis.',
@@ -1454,7 +1454,7 @@ Ha de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.',
 'prefs-displaywatchlist' => 'Opcións de visualización',
 'prefs-diffs' => 'Diferenzas',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'O enderezo de correo electrónico semella válido',
 'email-address-validity-invalid' => 'Escriba un enderezo de correo electrónico válido',
 
@@ -2252,7 +2252,7 @@ Se quere máis información acerca dos dereitos individuais, pode atopala [[{{Me
 'listgrouprights-addgroup-self-all' => 'Pode engadir todos os grupos pola súa propia conta',
 'listgrouprights-removegroup-self-all' => 'Pode eliminar todos os grupos pola súa propia conta',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Non existe enderezo para o envío',
 'mailnologintext' => 'Debe [[Special:UserLogin|acceder ao sistema]] e ter rexistrado un enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias]] para enviar correos electrónicos a outros usuarios.',
 'emailuser' => 'Enviar un correo electrónico a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}}',
@@ -3660,7 +3660,7 @@ Os demais agocharanse por omisión.
 'monthsall' => 'todos',
 'limitall' => 'todas',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar o enderezo de correo electrónico',
 'confirmemail_noemail' => 'Non ten rexistrado ningún enderezo de correo electrónico válido nas súas [[Special:Preferences|preferencias de usuario]].',
 'confirmemail_text' => '{{SITENAME}} require que lle dea validez ao seu enderezo de correo electrónico antes de utilizar as funcións relacionadas con el.
index a62ba4f..ebc13bc 100644 (file)
@@ -865,7 +865,7 @@ $2',
 'loginlanguagelabel' => 'שפה: $1',
 'suspicious-userlogout' => 'בקשתכם לצאת מהחשבון נדחתה כיוון שנראה שהיא נשלחה על ידי דפדפן שבור או שרת פרוקסי עם זיכרון מטמון.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'שגיאה לא ידועה בפונקציה mail()‎ של PHP',
 'user-mail-no-addy' => 'ניסיון לשלוח דוא"ל ללא כתובת דוא"ל.',
 'user-mail-no-body' => 'ניסיון לשלוח דוא"ל עם תוכן ריק או קצר מאוד.',
@@ -1551,7 +1551,7 @@ $1",
 'prefs-displaywatchlist' => 'אפשרויות תצוגה',
 'prefs-diffs' => 'הבדלים בין גרסאות',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'כתובת הדואר האלקטרוני נראית תקינה',
 'email-address-validity-invalid' => 'יש להקליד כתובת דואר אלקטרוני תקינה',
 
@@ -2149,6 +2149,10 @@ $1',
 ייתכן שעליהם לקשר במקום זאת לדף מתאים יותר.<br />
 דף נחשב לדף פירושונים אם הוא משתמש בתבנית המקושרת מהדף [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'דפים עם מאפיין דף',
+'pageswithprop-text' => 'הדף הזה נותן רשימה של דפים שמשתמשים במאפיין דף מסוים.',
+'pageswithprop-prop' => 'שם המאפיין:',
+
 'doubleredirects' => 'הפניות כפולות',
 'doubleredirectstext' => 'בדף הזה מופיעה רשימת דפי הפניה שמפנים לדפי הפניה אחרים.
 כל שורה מכילה קישור לשתי ההפניות הראשונות, וכן את היעד של ההפניה השנייה, שהיא לרוב היעד ה"אמיתי" של ההפניה, שההפניה הראשונה אמורה להצביע אליו.
@@ -2341,7 +2345,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'הוספת כל הקבוצות לחשבון האישי',
 'listgrouprights-removegroup-self-all' => 'הסרת כל הקבוצות מהחשבון האישי',
 
-# E-mail user
+# Email user
 'mailnologin' => 'אין כתובת לשליחה',
 'mailnologintext' => 'עליכם [[Special:UserLogin|להיכנס לחשבון]] ולהגדיר לעצמכם כתובת דואר אלקטרוני תקינה ב[[Special:Preferences|העדפות המשתמש]] שלכם כדי לשלוח דואר למשתמש אחר.',
 'emailuser' => 'שליחת דואר אלקטרוני למשתמש זה',
@@ -3751,7 +3755,7 @@ $1',
 'monthsall' => 'הכול',
 'limitall' => 'הכול',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'אימות כתובת דוא"ל',
 'confirmemail_noemail' => 'אין לכם כתובת דוא"ל תקפה המוגדרת ב[[Special:Preferences|העדפות המשתמש]] שלכם.',
 'confirmemail_text' => 'אתר זה דורש שתאמתו את כתובת הדוא"ל שלכם לפני שתשתמשו בשירותי הדוא"ל. לחצו על הכפתור למטה כדי לשלוח דוא"ל עם קוד אימות לכתובת הדוא"ל שהזנתם. טענו את הקישור בדפדפן שלכם כדי לאשר שכתובת הדוא"ל תקפה.',
@@ -4214,4 +4218,7 @@ $5
 'duration-centuries' => '{{PLURAL:$1|מאה שנה|מאתיים שנה|$1 מאות שנים}}',
 'duration-millennia' => '{{PLURAL:$1|אלף שנה|אלפיים שנה|$1 אלפי שנים}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'דפים עם מאפיין דף',
+'pageswithprop-submit' => 'שליחה',
 );
index 63c8abb..7b38419 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Anjoeli9806
+ * @author Berniemack
  * @author Erythrii
  * @author Jose77
  * @author Kguirnela
@@ -65,7 +66,7 @@ $messages = array(
 
 'underline-always' => 'Pirmi',
 'underline-never' => 'Indi',
-'underline-default' => 'Human na nga iya sang brawser',
+'underline-default' => 'Gintakda sang browser ukon panit',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Ilisan ang laragway  sang font sa lugar:',
@@ -150,8 +151,9 @@ $messages = array(
 'newwindow' => '(gabukas sa bag-o nga bintana)',
 'cancel' => 'Kanselahon',
 'moredotdotdot' => 'Madamo pa...',
-'mypage' => 'Akon panid',
-'mytalk' => 'Akon paghisayranay',
+'morenotlisted' => 'Madamu pa ang wala nalista...',
+'mypage' => 'Akon Panid',
+'mytalk' => 'Paghisayranay',
 'anontalk' => 'Paghisayranay sang sining IP address',
 'navigation' => 'Nabigayson',
 'and' => '&#32;kag',
@@ -173,7 +175,7 @@ $messages = array(
 'vector-action-protect' => 'Pangapinan',
 'vector-action-undelete' => 'Dulaon ang pagpanas',
 'vector-action-unprotect' => 'Ilisan ang pagpangapin',
-'vector-simplesearch-preference' => 'Sugtan ang mas ginpamaayo nga suhestiyon sa pagpangita (Para sa vector nga panit lamang)',
+'vector-simplesearch-preference' => 'Sugdan ang mas ginpamaayo nga suhestiyon sa pagpangita (Para sa vector nga panit lamang)',
 'vector-view-create' => 'Himuon',
 'vector-view-edit' => 'Ilisan',
 'vector-view-history' => 'Lantawon ang kasaysayan',
@@ -183,6 +185,7 @@ $messages = array(
 'namespaces' => 'Ngalan-espasyo',
 'variants' => 'Mga nagkalain-lain',
 
+'navigation-heading' => 'Menu sang nabigasyon',
 'errorpagetitle' => 'Sala/Eror',
 'returnto' => 'Balik sa $1.',
 'tagline' => 'Halin sa {{SITENAME}}',
@@ -394,7 +397,7 @@ Pagpamangkot: $2',
 'actionthrottled' => 'Ang paghulag ginpunggan',
 'actionthrottledtext' => 'Bilang pagpangontra sa span, ginalimitahan ka sa pagbuhat sang sini nga paghulag sa tuman ka damo nga beses sa malip-ot nga tinion, kag naglapaw ka na sa sini nga patakaran.
 Palihog tilawan mo liwat pagkatapos sang malip-ot nga tinion.',
-'protectedpagetext' => 'Ang ini nga panid ginpangapinan agod to mapunggan ang pag-ilis sini.',
+'protectedpagetext' => 'Ang ini nga panid ginprotektaran agud mapunggan ang pag-ilis sini.',
 'viewsourcetext' => 'Mahimo mo nga makita kag makopya ang ginhalinan sang sini nga panid:',
 'viewyourtext' => "Mahimo mo nga makita kag makopya ang ginhalinan sang '''imo mga pagbag-o''' sa sini nga panid:",
 'protectedinterface' => 'Ang ini nga panid nagahatag sang mga teksto sang interface para sa software, kag ginapangapinan agod indi maabuso.',
@@ -428,6 +431,9 @@ Ang administrador nga nag-kandado sini naghatag sang paathag nga: "$3".',
 
 Makapadayon ka sa gihapon sa paggamit sang {{SITENAME}} nga indi makilal-an, ukon mahimo ka man <span class='plainlinks'>[$1 magsulod liwat]</span> bilang amo sa gihapon ukon lain nga nga manug-gamit.
 Tandaan nga may mga panid nga mahimo ma-display sa gihapon nga daw nakasulod ka sa gihapon, hasta mapanas mo na ang tinago sang imo brawser.",
+'welcomeuser' => 'Malipayon nga pag-abot. $1!',
+'welcomecreation-msg' => 'Nahimo na ang imo nga account.
+Indi pagkalimtan ang pag-ilis sa imo nga [[Special:Preferences|{{SITENAME}} pagpasulabi]].',
 'yourname' => 'Ngalan sang Manog-gamit:',
 'yourpassword' => 'Kontra-senyas:',
 'yourpasswordagain' => 'Suliton ang kontra-senyas:',
@@ -529,9 +535,10 @@ Palihog maghulat anay bag-o tilawan liwat.',
 'loginlanguagelabel' => 'Hambalanon: $1',
 'suspicious-userlogout' => 'Ang imo pagpangabay nga mag-guha ginpungga bangud nga ini mahimo nga ginpadala sang guba nga brawser ukon sang proksy nga nagapang-tago.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Wala nahibaluan nga sala sa kapuslanan nga sulat() sang PHP.',
 'user-mail-no-addy' => 'Gintilawan nga magpadala sang e-mail biskan wala sang e-mail adres.',
+'user-mail-no-body' => 'Nakatilaw magpadala sang email nga waay unod ukon malip-ot katama ang unod sang mensahe.',
 
 # Change password dialog
 'resetpass' => 'Ilisan ang pasword',
@@ -597,6 +604,7 @@ Temporaryo nga pasword: $2',
 'changeemail-oldemail' => 'E-mail adres sa subong:',
 'changeemail-newemail' => 'Bag-o nga e-mail adres:',
 'changeemail-none' => '(wala)',
+'changeemail-password' => 'Ang imong {{SITENAME}} nga password:',
 'changeemail-submit' => 'Ilisan and E-mail',
 'changeemail-cancel' => 'Kanselahon',
 
@@ -693,7 +701,7 @@ Kon ikaw manuggamit nga wala makilal-i kag nabatyagan mo nga may mga komento nga
 Pwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga pahina]] sa iban man nga pahina,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs],
 o [{{fullurl:{{FULLPAGENAME}}|action=edit}} islan ini nga pahina]</span>.',
-'noarticletext-nopermission' => 'Wala subong sang teksto ang ini nga panid.
+'noarticletext-nopermission' => 'Wala subong sang teksto ang sini nga panid.
 Pwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga panid]] sa iban man nga panid,
 ukon <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs]</span>.',
 'missing-revision' => 'Ang ini nga pag-ilis nga #$1 sang panid nga ginhinanglan nga "{{PAGENAME}}" wala naga-eksister.
@@ -809,6 +817,15 @@ Ini nagapakita nga gindula na.',
 'edit-already-exists' => 'Indi mahimo ang bag-o nga panid.
 Naga-eksister na ini.',
 'defaultmessagetext' => 'Teksto sang mensahe nga wala pa ma-ilisan',
+'content-failed-to-parse' => 'Di matuman ang pag-parse $2 nga unod para sa $1 nga modelo: $3',
+'invalid-content-data' => 'May ara sala sa data.',
+'content-not-allowed-here' => '"$1" nga sulod indi pwede sa panid [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'tekstong wiki',
+'content-model-text' => 'tekstong ordinaryo',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Pahibalo:''' Ang ini nga panid may yara sang madamo nga mahal nga pagtawag sang kapusalanan parser.
@@ -1104,7 +1121,7 @@ Tandai nga ang ila nga palasulundan sang mga unod sang {{SITENAME}} mahimo nga m
 
 # Preferences page
 'preferences' => 'Mga Ginabasehan',
-'mypreferences' => 'Akon pagpalabi',
+'mypreferences' => 'Mga Ginabasehan',
 'prefs-edits' => 'Numero sang mga gin-ilisan:',
 'prefsnologin' => 'Wala naka-sulod',
 'prefsnologintext' => 'Kinahanglan nga ikaw <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakasulod]</span> agod nga mabuhat ang pag-ilis sang mga ginapalabi.',
@@ -1206,39 +1223,193 @@ Kon imo ini luyag nga ihatag, ini gamiton sa paghatag sing pagkilala sa imo nga
 'prefs-help-email-others' => 'Mahimo mo man pilion nga ma-kontak ka sang iban paagi sa e-mail paagi sa isa ka link sa imo manuggamit ukon gina-hisayranay nga panid.
 Ang imo adres sang e-mail wala ginapakita kon kontakon ka sang iban.',
 'prefs-help-email-required' => 'Kinahanglan ang imo e-mail',
+'prefs-info' => 'Tig-una nga impormasyon',
+'prefs-i18n' => 'nternasyonalisasyon',
 'prefs-signature' => 'pirma',
+'prefs-dateformat' => 'Porma sang petsa ukon adlaw',
+'prefs-timeoffset' => 'Pagintsakto sa oras',
+'prefs-advancedediting' => 'Mas progresibo nga pilian',
+'prefs-advancedrc' => 'Mas progresibo nga pilian',
+'prefs-advancedrendering' => 'Mas progresibo nga pilian',
+'prefs-advancedsearchoptions' => 'Mas progresibo nga pilian',
+'prefs-advancedwatchlist' => 'Mas progresibo nga pilian',
+'prefs-displayrc' => 'Ipagwa ang mga pagpilian',
+'prefs-displaysearchoptions' => 'Ipagwa ang mga pagpilian',
+'prefs-displaywatchlist' => 'Ipagwa ang mga pagpilian',
+'prefs-diffs' => 'Mga ginalainan',
+
+# User preference: email validation using jQuery
+'email-address-validity-valid' => 'Ang nasambit nga e-mail pwede batunon',
+'email-address-validity-invalid' => 'Magsulod sang isa ka mabaton nga e-mail address.',
+
+# User rights
+'userrights' => 'Tagdumala sang mga derecho sang mga tig-gamit',
+'userrights-lookup-user' => 'Tagdumalaon ang mga grupo sang tiggamit',
+'userrights-user-editname' => 'Mag-intra sang isa ka pangalan sang tiggamit:',
+'editusergroup' => 'Lainon ang mga grupo sang tiggamit',
+'editinguser' => "Guinabag-o ang kinamatarong sang naga-usar '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Lainon ang mga grupo sang tiggamit',
+'saveusergroups' => 'Luwason ang mga grupo sang tiggamit',
+'userrights-groupsmember' => 'Kaupod sang:',
+'userrights-groupsmember-auto' => 'Kaupod sang:',
+'userrights-groups-help' => 'Pwede nyo lainon ang mga grupo sang tiggamit sini sa:
+* Kahon nga may ara check nga nagasiling ang tiggamit amo nga kaupod sa grupo.
+* Kahot nga wala sing check nagasiling nga indi kaupod ang tiggamit sa grupo.
+* Ginaindikar sang * nga ginadilian na ang pagpanas sa grupo kon imo na ni nga gindugang, ukon ang suli sini.',
+'userrights-reason' => 'Rason:',
+'userrights-no-interwiki' => 'Wala ka permiso nga lainon ang layi sang tiggamit sa iban nga mga wiki.',
+'userrights-nodatabase' => 'Wala nagagwa ang datos $1 ukon indi ini lokal.',
+'userrights-nologin' => 'Kinahanglang [[Special:UserLogin|log in]] pinaagi sa isa account nga tagdumala para matagaan sang derecho sang tiggamit.',
+'userrights-notallowed' => 'Ang imo nga account waay sing permiso para magdugang ukon magpanas sang kinamatarong sang mga naga-usar.',
+'userrights-changeable-col' => 'Mga grupo nga pwede mong baguhon.',
+'userrights-unchangeable-col' => 'Mga grupo nga indi mo pwede baguhon.',
 
 # Groups
 'group' => 'Grupo:',
+'group-user' => 'Mga Naga-usar',
+'group-autoconfirmed' => 'Mga naga-usar nga awtomatikong guinkompirma',
+'group-bot' => 'Mga bot',
 'group-sysop' => 'Mga Administrador',
-
+'group-bureaucrat' => 'Mga byurokratiko',
+'group-all' => '(tanan)',
+
+'group-user-member' => '{{GENDER:$1|naga-usar}}',
+'group-autoconfirmed-member' => '{GENDER:$1|naga-usar nga awtomatikong nakompirma}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|tagdumala}}',
+'group-bureaucrat-member' => '{{GENDER:$1|byurokratiko}}',
+'group-suppress-member' => '{{GENDER:$1|oversight}}',
+
+'grouppage-user' => '{{ns:project}}:Mga Naga-usar',
+'grouppage-autoconfirmed' => '{{ns:project}}:Mga naga-usar nga awtomatikong nakompirma.',
+'grouppage-bot' => '{{ns:project}}:Bots',
 'grouppage-sysop' => '{{ns:project}}:Mga Administrador',
+'grouppage-bureaucrat' => '{{ns:project}}:Mga Byurokratiko',
 
 # Rights
 'right-read' => 'Basahan ang panid',
 'right-edit' => 'Ilisan ang panid',
+'right-createpage' => 'Maghimo sang mga panid (nga indi mga panid sang diskusyon)',
+'right-createtalk' => 'Maghimu sang mga panid para sa diskusyon.',
+'right-createaccount' => 'Maghimu sang bag-o nga mga accounts para sa mga naga-usar',
+'right-minoredit' => 'Markahan kon gamay ukon dyutay lang ang guinbag-o sa unod.',
+'right-move' => 'Saylohon ining panid:',
+'right-move-subpages' => 'Saylohon ang mga panid lakip sa mga panid nga kaupod sini',
+'right-move-rootuserpages' => 'Saylohon ang mga panid nga gingikanan.',
+'right-movefile' => 'Isaylo ang mga dokumento ukon files.',
+'right-suppressredirect' => 'Indi makahimu sang isa ka pagsaylo halin sa mga daan nga nalan kon ginasaylo na sa isa ka panid.',
+'right-upload' => 'Magkarga sang mga files',
+'right-reupload' => 'Islan ang mga naga-eksistar nga mga files.',
+'right-reupload-own' => 'Islan ang mga files nga ginkarga sang iya kaugalingon.',
+'right-reupload-shared' => 'Islan ang mga files sa ginabahin nga bulutangan sang midya sa lokal.',
+'right-upload_by_url' => 'Magkarga sang mga files ukon dokumento halin sa isa ka URL address.',
+'right-purge' => 'Limpyuha ang bulutangan sang site para sa isa ka panid nga waay sing kumpirmasyon',
+'right-autoconfirmed' => 'Islan ang mga panid nga ginprotektar dyutay.',
+'right-bot' => 'Mahimo nga isa ka proseso nga awtomatiko',
+'right-nominornewtalk' => 'Wala nga dyutay nga pagbag-o sa mga panid sang diskusyon para makasugod sang isa ka abiso nagasiling nga may bag-ong mensahe.',
+'right-apihighlimits' => 'Mag-usar sang mas mataas nga limitasyon para sa mga pamangkot sa API.',
+'right-writeapi' => 'Pag-usar sang ginsulat nga API',
+'right-delete' => 'Panason ang panid',
+'right-bigdelete' => 'Panason ang mga panid nga may daku nga maragtas',
+'right-deletelogentry' => 'Panason kag indi panason ang mga partikular nga mga log entries',
+'right-deleterevision' => 'Panason kag indi panason ang mga partikular nga mga pagbag-o sang mga panid.',
+'right-deletedhistory' => 'Tan-awa ang mga ginpanas nga mga entries nga waay kaupod nga teksto.',
+'right-deletedtext' => 'Tan-awa ang napanas nga mga teksto kag pagbag-o sa tunga sang duha ka rebisyon.',
+'right-browsearchive' => 'Pangitaa ang mga ginpanas nga mga panid',
+'right-undelete' => 'Buhion liwat ang isa ka panid.',
+'right-suppressrevision' => 'Liwaton kag ibalik ang mga pagbag-o nga gintago halin sa mga tagdumala.',
+'right-suppressionlog' => 'Tan-awon ang mga pribadong log.',
+'right-block' => 'Indi pasugtan ang iban nga mga naga-usar sa pagbag-o',
+'right-blockemail' => 'Indi pasugtan ang isa ka naga-usar para magpadala sang email.',
+'right-hideuser' => 'Indi pasugta ang ang isa ka naga-usar kag itago ini halin sa publiko.',
+'right-ipblock-exempt' => 'Indi pag-agihan ang mga indi ginpasugtan nga mga IP blocks, auto blocks kag range blocks.',
+'right-proxyunbannable' => 'Indi pagagihan ang mga awtomatiko nga pagharang sang mga proxies.',
+'right-unblockself' => 'Panason ang pagkaharang sa ila kaugalingon',
+'right-protect' => 'Islan ang grado sang proteksyon kag baguhon ang mga ginprotektar nga mga panid',
+'right-editprotected' => 'Baguhon ang mga panid nga ginprotekta (waay sing proteksyon nga de-grado)',
+'right-editinterface' => 'Baguhon ang user interface.',
+'right-editusercssjs' => 'Baguhon ang mga CSS kag Javascript nga files sang iban nga naga-usar.',
+'right-editusercss' => 'Baguhon ang mga CSS files sang iban nga naga-usar.',
+'right-edituserjs' => 'Baguhon ang mga Javascript files sang iban nga mga naga-usar.',
+'right-rollback' => 'Dasigay nga ibalik sa nahauna nga estado ang mga pagbag-o sang ulihi nga naga-usar nga nabag-o sa isa ka partikular nga panid.',
+'right-markbotedits' => 'Markahan ang mga rolled back nga mga ginbag-o bilang mga ginbag-o sang mga bot.',
+'right-noratelimit' => 'Indi maapektuhan sang mga limitasyon.',
+'right-import' => 'Mag-importe sang mga panid halin sa iban nga wikis',
+'right-importupload' => 'Mag-importe sang mga panid halin sa pagkarga sang files',
+'right-patrol' => 'Markahan bilang "ginabantayan" ang mga pagbag-o sang iban.',
+'right-autopatrol' => 'Awtomatikong markahan nga ginabantayan ang mga pagbag-o sa sarili.',
+'right-patrolmarks' => 'Tan-awa ang mga sining karon lamang nga mga ginbag-o kag markahan ini nga ginabantayan',
+'right-unwatchedpages' => 'Tan-awa ang listahan sang mga indi ginabantayan nga mga panid',
+'right-mergehistory' => 'Tingbon ang mga maragtas sang mga panid',
+'right-userrights' => 'Baguhon ang tanan nga kinamatarong sang mga naga-usar',
+'right-userrights-interwiki' => 'Bagohon ang kinamatarong sang mga naga-usar sa iban nga mga wiki.',
+'right-siteadmin' => 'Isira kag abrihan ang bulutangan sang mga impormasyon',
+'right-override-export-depth' => 'Ipagwa ang mga panid kaupod ang mga sugpon nga mga panid tubtub isa idalum nga 5.',
+'right-sendemail' => 'Magpadala sang email sa iban nga naga-usar',
+'right-passwordreset' => 'Tan-awa ang mga email sang password reset',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Naga-usar nga ginhimo log',
+'newuserlogpagetext' => 'Ini ang isa ka log sang mga ginhimo sang naga-usar',
 
 # User rights log
 'rightslog' => 'Karapatan sang naga-usar log',
+'rightslogtext' => 'Ini ang lista sang mga ginbag-o nga mga kinamatarong sang naga-usar.',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'Basahon ang ini nga panid',
 'action-edit' => 'islan ini nga pahina',
+'action-createpage' => 'Maghimo sang mga panid',
+'action-createtalk' => 'Maghimo sang mga panid sang mga diskusyon.',
+'action-createaccount' => 'Himuon ini sang account sang naga-gamit.',
+'action-minoredit' => 'Markahan ang sini nga pagbag-o nga dyutay ukon gamay lang',
+'action-move' => 'Isaylo ang sini nga panid',
+'action-move-subpages' => 'Isaylo ang sini nga panid, lakip na sa mga panid nga kaupod sini',
+'action-move-rootuserpages' => 'Isaylo ang mga panid nga guingikanan',
+'action-movefile' => 'Isaylo sini nga file',
+'action-upload' => 'Kargahon sini nga file',
+'action-reupload' => 'Lainon ang naga-eksistar na nga file',
+'action-reupload-shared' => 'Lainon ang mga file sa bulutangan nga ginabahin',
+'action-upload_by_url' => 'Ikarga sini nga file halin sa isa ka URL',
+'action-writeapi' => 'Pag-usar sang ginsulat nga API',
+'action-delete' => 'Panason ini nga pahina',
+'action-deleterevision' => 'Panason ang sini nga pagbag-o',
+'action-deletedhistory' => 'Tan-awon ang ginpanas nga maragtas sang sini nga panid',
+'action-browsearchive' => 'Pangitaa ang mga ginpanas nga mga panid',
+'action-undelete' => 'Indi panason ang sini nga panid',
+'action-suppressrevision' => 'Ireview kag ibalik ang mga gintago nga mga rebisyon',
+'action-suppressionlog' => 'Tan-awa ang sini nga pribado nga log.',
+'action-block' => 'Indi pasugtan ang iban nga mga naga-usar sa pagbag-o',
+'action-protect' => 'Baguhon ang nibel sang proteksyon para sa sini nga panid',
+'action-rollback' => 'Dasigay nga ibalik sa nahauna nga estado ang mga pagbag-o sang ulihi nga naga-usar nga nabag-o sa isa ka partikular nga panid.',
+'action-import' => 'Importehon ang sini nga panid halin sa iban nga wiki',
+'action-importupload' => 'Importehon ang sini nga panid halin sa ginkarga nga file',
+'action-patrol' => 'Markahan bilang "ginabantayan" ang mga pagbag-o sang iban.',
+'action-autopatrol' => 'Markahan bilang "ginabantayan" ang imo nga mga ginhimo nga pagbag-o',
+'action-mergehistory' => 'Tingbon ang mga maragtas sang mga panid',
+'action-userrights' => 'Baguhon ang tanan nga kinamatarong sang mga naga-usar',
+'action-userrights-interwiki' => 'Bagohon ang kinamatarong sang mga naga-usar sa iban nga mga wiki.',
+'action-siteadmin' => 'Isira kag abrihan ang bulutangan sang mga impormasyon',
+'action-sendemail' => 'Magpadala sang mga email',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|bag-ohon|mga ginbag-o}}',
 'recentchanges' => 'Mga Bag-o nga Inislan',
 'recentchanges-legend' => 'Mga pililian sa bag-o lang na himo',
+'recentchanges-summary' => 'La-uton ang pina gid ka bag-o nga nahimo sa may wiki sa ini nga feed',
 'recentchanges-feed-description' => 'La-uton ang pina gid ka bag-o nga nahimo sa may wiki sa ini nga feed.',
+'recentchanges-label-newpage' => 'Ang sini nga pagbag-o nakahimo sang bag-o nga panid',
 'recentchanges-label-minor' => 'Diotay ilis ini',
+'recentchanges-label-bot' => 'Ang sini nga pagbag-o ginubra sang isa ka bot',
+'recentchanges-label-unpatrolled' => 'Ang sini nga pagbag-o indi pa ginbantayan',
 'rcnote' => "Diri sa idalum {{PLURAL:$1|ay '''1''' na bag-o|sang nagligad '''$1''' mga nabag-o}} sa naligad {{PLURAL:$2|adlaw|'''$2''' adlaw}}, sang mga $5, $4.",
+'rcnotefrom' => "Yara sa idalum ang mga guinbag-o halin '''$2''' (tubtub '''$1''' ang ginpagwa).",
 'rclistfrom' => 'Ipakita ang bag-o lang nahimo halin sa $1',
 'rcshowhideminor' => '$1 menor nga mga inislan',
 'rcshowhidebots' => '$1 bots',
 'rcshowhideliu' => '$1 mga ga-usar nga naka sulod',
 'rcshowhideanons' => '$1 di nagpakilala nga mga ga-usar',
+'rcshowhidepatr' => '$1 ginabantyan nga pagbag-o',
 'rcshowhidemine' => '$1 akon mga inislan',
 'rclinks' => 'Ipakita ang nagligad $1 nga nabag-o lang sang $2 adlaw<br />$3',
 'diff' => 'diff',
@@ -1248,14 +1419,21 @@ Ang imo adres sang e-mail wala ginapakita kon kontakon ka sang iban.',
 'minoreditletter' => 'm',
 'newpageletter' => 'B',
 'boteditletter' => 'b',
+'number_of_watching_users_pageview' => '[$1 ginabantayan {{PLURAL:$1|naga-usar|mga naga-usar}}]',
+'rc_categories' => 'Limitahan ang mga kategorya (ibulag lakip sang "|")',
+'rc_categories_any' => 'Bisan ano',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte|mga bytes}} despues sang pagbag-o',
+'newsectionsummary' => '/* $1 */ bag-o nga seksyon',
 'rc-enhanced-expand' => 'Ipakita ang mga detalye (nagakilanlan sang JavaScript)',
 'rc-enhanced-hide' => 'Tagu-on ang mga detalye',
+'rc-old-title' => 'orihinal nga ginhimo bilang "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'May labot nga pag-ilis',
 'recentchangeslinked-feed' => 'May labot nga pag-ilis',
 'recentchangeslinked-toolbox' => 'May labot nga pag-ilis',
 'recentchangeslinked-title' => 'Mga ginlain nga kapareho kay "$1"',
+'recentchangeslinked-noresult' => 'Wala mga pagbag-o sa mga sugpon nga mga panid sa ginhatag nga tiempo.',
 'recentchangeslinked-summary' => "Ini ang mga lista sang mga bag-o lang gid nga nahimo nga mga pahina nga gintabid halin sa gin klaro nga pahina (o mga katapo sa mga kategorya nga gin klaro).
 Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'recentchangeslinked-page' => 'Ngalan ka Pahina:',
@@ -1264,10 +1442,46 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 # Upload
 'upload' => 'Uplod file',
 'uploadbtn' => 'Karga file',
+'reuploaddesc' => 'Kanselahon ang pag-karga kag magbalik sa porma sang pag-karga.',
+'upload-tryagain' => 'Ipasa ang ginlarawan nga ginbag-o nga file',
 'uploadnologin' => 'Wala naka-sulod',
+'uploadnologintext' => 'Kinahanglan [[Special:UserLogin|nakalagda]] para makarga ang mga files.',
+'upload_directory_missing' => 'Nadula ang direktoryo sang pag-karga ($1) kag indi na ini mahimo sang webserver.',
+'upload_directory_read_only' => 'Ang direktoryo sang pag-karga ($1) indi pwede masulat sang webserver.',
+'uploaderror' => 'May sala sa pag-karga',
+'upload-recreate-warning' => "'''Abiso: Ang isa ka file nga amo ang iya ngalan ginpanas na ukon ginsaylo'''
+
+Ang log sang pagpanas kag pagsaylo para sa sini nga panid ginahatag diri para sa imo nga kombinyensya.",
+'uploadtext' => "Usaron ang porma sa idalum para makakarga sang mga file. Para matan-aw ukon mapangita ang mga file nga ginkarga na, kadto sa:[Special:FileList|lista sang mga files nga ginkarga]], ang mga ginkarga liwat nakalista sa: [[Special:Log/upload|lista sang mga ginkarga]], ang mga ginpanas [[Special:Log/delete|lista sang mga ginpanas]].
+
+Para maupod ang isa ka file sa isa ka panid, usaron ang sini nga sugpon sa mga masunod nga mga porma:
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' para mausar ang bilog nga bersyon sang file
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' para mausar ang isa ka 200 ka pixel nga mas pinalapad nga bersyon sa isa ka karton sa wala nga bahin lakip ang 'alt teksto' bilang paglarawan
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' para direkta nga masugpunan ang file, bisan indi na ini ipagwa.",
+'upload-permitted' => 'Mga ginpasugtan nga mga tipo sang files: $1',
+'upload-preferred' => 'Mga mas gusto nga mga tipo sang mga file: $1',
+'upload-prohibited' => 'Mga ginadilian nga mga tipo sang mga files: $1',
+'uploadlog' => 'Lista sang mga ginkarga',
 'uploadlogpage' => 'Uplod log',
+'uploadlogpagetext' => 'Ara sa idalum ang listahan sang pinakaulihi nga mga ginkarnga nga mga files: [[Special:NewFiles|gallery of new files]] para sa mas biswal nga pagtan-aw.',
+'filename' => 'Ngalan sang file',
 'filedesc' => 'Kabilogan',
 'fileuploadsummary' => 'Kabilogan:',
+'filereuploadsummary' => 'Mga pagbag-o sang file:',
+'filestatus' => 'Ang estado sang copyright:',
+'filesource' => 'Guinghalinan:',
+'uploadedfiles' => 'Mga ginkarga nga file',
+'ignorewarning' => 'Indi pagsapaka ang abiso kag basta luwason lang ang file',
+'ignorewarnings' => 'Indi pagsapaka ang tanan nga mga abiso',
+'minlength1' => 'Kinahanglan may ara isa ka letra para sa ngalan sang file.',
+'illegalfilename' => 'Ang ngalan sang file "$1" may ara nga mga karakter nga ginadilian sa mga titulo sang mga panid. Palihug maghatag sang iban nga ngalan sa file kag kargahon ini liwat.',
+'filename-toolong' => 'Ang mga ngalan sang files indi pwede masubra sa 240 ka bytes.',
+'badfilename' => 'Ang ngalan sang file ginbag-o bilang "$1".',
+'filetype-mime-mismatch' => 'Ang sugpon sang file ".$1" indi nagaparehas sa na nabal-an nga tipo nga MIME sang file ($2).',
+'filetype-badmime' => 'Ginadilian ang pagkarga sang mga files nga may tipo nga MIME "$1"',
+'filetype-bad-ie-mime' => 'Indi makarga ang sini nga file tungod ang Internet Explorer gindetect ini bilang "$1", nga ginadilian kag isa ka potensyal nga file nga makahalit.',
+'filetype-unwanted-type' => "Isa ka indi gusto nga tipo sang file ang '''\".\$1\"'''
+Ang gusto nga {{PLURAL:\$3|tipo sang file amo|mga tipo sang file amo ang}} \$2.",
 'empty-file' => 'Ang dokumeto ginapadala mo wala unod.',
 'file-too-large' => 'Ang dokumeto ginapadala mo madako gid.',
 'filename-tooshort' => 'Ang ngalan sang dokumento malipot gid.',
@@ -1275,11 +1489,14 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'uploadedimage' => 'na-uplod "[[$1]]"',
 'watchthisupload' => 'Bantayan ining panid',
 
+'license' => 'Pagpanglisensya',
 'license-header' => 'Pagpanglisensya',
 
 # File description page
+'file-anchor-link' => 'File',
 'filehist' => 'Historya file',
 'filehist-help' => 'I-klik sa may petsa/oras para makita ang file sa ina nga oras.',
+'filehist-revert' => 'Ibalik',
 'filehist-current' => 'subong',
 'filehist-datetime' => 'Petsa/Oras',
 'filehist-thumb' => 'Thumbnail',
@@ -1287,9 +1504,11 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'filehist-user' => 'Naga-usar',
 'filehist-dimensions' => 'Mga Takus',
 'filehist-comment' => 'Komentar',
-'imagelinks' => 'File Tabid',
+'imagelinks' => 'Pagusar sang file',
 'linkstoimage' => 'Ang nagakasunod {{PLURAL:$1|pahina nga mga tabid|$1 mga pahina mga tabid}} sa sini nga file:',
+'nolinkstoimage' => 'Waay sing panid nga nakasugpon sa sini nga file.',
 'sharedupload' => 'Ini nga file gikan sa $1 kag pwede ma usar sang iban nga mga proyekto.',
+'sharedupload-desc-here' => 'Ang sini nga file amo halin sa $1 kag pwede ini mausar sa lain nga mga proyekto. Ang ginalarawan sang iya nga [$2 panid sang paglarawan sang file] amo ang ginpagwa sa idalum.',
 'uploadnewversion-linktext' => 'Uplod sang bag-o nga bersiyon sang sini nga file',
 
 # File deletion
@@ -1301,6 +1520,8 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 # Statistics
 'statistics' => 'Mga Statistik',
 
+'disambiguationspage' => 'Template:disambig',
+
 'brokenredirects-edit' => 'ilisan',
 'brokenredirects-delete' => 'panason',
 
@@ -1309,6 +1530,7 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'nmembers' => '$1 {{PLURAL:$1|membro|mga membro}}',
 'popularpages' => 'Ang panid nagakilala gid',
 'prefixindex' => 'Tanan nga mga pahina nga may-ara prefiks',
+'usercreated' => '{{GENDER:$3|Ginhimo}} sa $1 kag $2',
 'newpages' => 'Mga Bag-o nga Pahina',
 'newpages-username' => 'Ngalan sang Manog-gamit:',
 'move' => 'Saylohon',
@@ -1335,20 +1557,25 @@ Mga Pahina sa [[Special:Watchlist|imo lista-lantaw]] ay '''dukot'''.",
 'allpagesnext' => 'Dason',
 'allpagessubmit' => 'Sige',
 
+# Special:Categories
+'categories' => 'Mga kategorya',
+
 # Special:LinkSearch
 'linksearch' => 'Eksternal na mga tabid',
 'linksearch-ok' => 'Pangita-a',
+'linksearch-line' => '$1 amo nakasugpon sa $2',
 
 # Special:ListGroupRights
 'listgrouprights-group' => 'Grupo',
 'listgrouprights-members' => '(lista sang mga membro)',
 
-# E-mail user
+# Email user
 'emailuser' => 'I-email ini nga naga-usar',
 
 # Watchlist
-'watchlist' => 'Akon Ginabantayan',
-'mywatchlist' => 'Akon Ginabantayan',
+'watchlist' => 'Ginabantayan',
+'mywatchlist' => 'Ginabantayan',
+'watchlistfor2' => 'Para sa $1 $2',
 'watchnologin' => 'Wala naka-sulod',
 'addedwatchtext' => "Ang pahina \"[[:\$1]]\" ay nadugang sa imo [[Special:Watchlist|lista sang pagtan-aw]].
 Buwas-damlag nga pagbag-o sang pahina kag ang iya upod na hisayrany pahina ay ipagalista didto, kag ang pahina magapakita balang '''dukot''' sa may [[Special:RecentChanges|lista sang mga bag-o lang na-islan]] para mahapos lang ini kuhaon.",
@@ -1370,6 +1597,7 @@ Buwas-damlag nga pagbag-o sang pahina kag ang iya upod na hisayrany pahina ay ip
 'confirmdeletetext' => 'Ikaw ay magapanas sang pahina upod sang tanan niya nga historya.
 Palihog lang nga sigurado nga kinagusto mo ini nga himuon, nga na-intindihan mo ang resulta sang ginahimo mo, kag ang gina obra mo ga santo upod sa [[{{MediaWiki:Policy-url}}|polisiya]].',
 'actioncomplete' => 'Kompleto nga aksiyon',
+'actionfailed' => 'Indi madinalag-on ang paghulag',
 'deletedtext' => '"$1" ay nakakas na.
 Lantawa $2 para sa mga lista sang mga bag-o lang ginkakas.',
 'dellogpage' => 'Ginkakas na log',
@@ -1411,6 +1639,7 @@ Pwede mo mabag-o ang lebel sang proteksiyon sang pahina, pero indi ini ma apektu
 
 # Undelete
 'undeletelink' => 'tan-aw/ginbalik',
+'undeleteviewlink' => 'Tan-awa',
 'undelete-search-submit' => 'Pangita-a',
 
 # Namespace form on various pages
@@ -1419,9 +1648,9 @@ Pwede mo mabag-o ang lebel sang proteksiyon sang pahina, pero indi ini ma apektu
 'blanknamespace' => '(Mayor)',
 
 # Contributions
-'contributions' => 'Naga-usar nga mga kontribusyon',
+'contributions' => 'Mga kontribusyon sang {{GENDER:$1|naga-usar}}',
 'contributions-title' => 'Mga Kontribusyon sang Naga-Usar para $1',
-'mycontris' => 'Akon contribusyon',
+'mycontris' => 'Kontribusyon',
 'contribsub2' => 'Para $1 ($2)',
 'uctop' => '(ibabaw)',
 'month' => 'Halin sa bulan (kag sang timprano):',
@@ -1429,9 +1658,12 @@ Pwede mo mabag-o ang lebel sang proteksiyon sang pahina, pero indi ini ma apektu
 
 'sp-contributions-newbies' => 'Ipakita ang mga kontribusyon sang mga bag-o nga akawnts lamang',
 'sp-contributions-blocklog' => 'pugong log',
+'sp-contributions-uploads' => 'Mga ginkarga',
+'sp-contributions-logs' => 'Mga lista',
 'sp-contributions-talk' => 'Hisayranay',
 'sp-contributions-search' => 'Mangita para sa mga knotribusyon',
 'sp-contributions-username' => 'IP Adres ukon ngalan sang naga-user:',
+'sp-contributions-toponly' => 'Ipagwa lang ang mga ginbag-o nga mga ulihi nga rebisyon',
 'sp-contributions-submit' => 'Pangita-a',
 
 # What links here
@@ -1439,23 +1671,32 @@ Pwede mo mabag-o ang lebel sang proteksiyon sang pahina, pero indi ini ma apektu
 'whatlinkshere-title' => 'Mga pahina nga naga tabid sa $1',
 'whatlinkshere-page' => 'Pahina:',
 'linkshere' => "Ang mga sumunod nga pahina ay nagatabid sa '''[[:$1]]''':",
+'nolinkshere' => "Waay panid nga nakasugpon sa '''[[:$1]]'''.",
 'isredirect' => 'pahina sa ginadirekta liwat',
 'istemplate' => 'transklusyon',
-'isimage' => 'laragway tabid',
+'isimage' => 'Ang sugpon sang file',
 'whatlinkshere-prev' => '{{PLURAL:$1|antes|antes $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|dasun|dasun $1}}',
 'whatlinkshere-links' => '← mga tabid',
 'whatlinkshere-hideredirs' => '$1 mga gin direkta liwat',
 'whatlinkshere-hidetrans' => '$1 mga transklusyon',
 'whatlinkshere-hidelinks' => '$1 mga tabid',
+'whatlinkshere-hideimages' => '$1 sugpon sang file',
 'whatlinkshere-filters' => 'Mga Sala-an',
 
 # Block/unblock
 'blockip' => 'i-Pugong ang naga-usar',
 'ipbreason' => 'Rason:',
+'ipbother' => 'Iban nga oras:',
 'ipboptions' => '2 oras:2 hours,1 adlaw:1 day,3 adlaw:3 days,1 semana:1 week,2 semana:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 tu-ig:1 year,wala katapusan:infinite',
+'ipbotheroption' => 'lain',
+'ipbotherreason' => 'Iban ukon dugang nga rason:',
+'ipbhidename' => 'Itago ang ngalan sang tiggamit sa mga pagbag-o kag mga listahan.',
 'ipblocklist' => 'Napunggan nga mga manug-usar',
+'blocklist-rangeblocks' => 'Itago ang mga bloke sang ginasakupan',
+'blocklist-reason' => 'Rason:',
 'ipblocklist-submit' => 'Pangita-a',
+'emailblock' => 'Gintapna ang e-mail',
 'blocklink' => 'harang',
 'unblocklink' => 'di pagpugong',
 'change-blocklink' => 'pagbag-o sang pugong',
@@ -1465,6 +1706,12 @@ Pwede mo mabag-o ang lebel sang proteksiyon sang pahina, pero indi ini ma apektu
 'unblocklogentry' => 'di pagpugong $1',
 'block-log-flags-nocreate' => 'paghimo sang akawnt ay gin untat',
 
+# Developer tools
+'lockconfirm' => 'Huo, gusto ko gid isirado ang bulutangan sang impormasyon.',
+'unlockconfirm' => 'Huo, gusto ko gid abrihon ang bulutangan sang impormasyon.',
+'lockbtn' => 'Isira ang bulutangan sang impormasyon.',
+'unlockbtn' => 'Abrihon ang bulutangan sang impormasyon.',
+
 # Move page
 'move-page-legend' => 'Saylohon ining panid',
 'movepagetext' => "Sa pagamit sang lista sa idalum ay magahatag ini sang bag-o na ngalan, pagasaylohon niya ang tanan nga historya sa bag-o nga ngalan.
@@ -1504,20 +1751,45 @@ Palihog lang sang pagkombinar sa ila sang ensakto.'''",
 
 # Export
 'export' => 'Eksport sa mga pahina',
+'exporttext' => 'Pwede mo ipagwa ang isa ka teksto kag lainon ang maragtas sang isa ka partikular nga panid ukon grupo sang mga panid nga nakabutang sa XML. Pwede ini ipagwa sa iban nga wiki pinaagi sa MediaWiki [[Special:Import|pahinang angkat]].
+
+Para magwa ang mga panid, isulod ang titulo sa text box sa idalum, isa ka titulo tagsa kurit, kag pilion kon gusto mo ang subong nga bersyon ukon ang mga daan nga bersyon, kaupod ang mga panid sang maragtas, ukon ang subong nga bersyon kaupod ang impormasyon sang mga pinakaulihi nga guinbag-o.
+
+Sa ulihi nga kaso, pwede ka magusar sang isa ka sugpon, tulad sa [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para sa panid "[[{{MediaWiki:Mainpage}}]]".',
+'exportall' => 'Ipagwa tanan nga mga panid',
 
 # Namespace 8 related
 'allmessages' => 'Mga mensahe sang sistema',
+'allmessagesname' => 'Ngalan',
+'allmessagesdefault' => 'Ang gindestino nga teksto',
 
 # Thumbnails
 'thumbnail-more' => 'Padaku-on',
+'thumbnail_error' => 'May ara sala sa paghimo sang thumbnail: $1',
+
+# Special:Import
+'import-options-wrong' => 'Sala {{PLURAL:$2|pili|mga pagpilian}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Ang ginhatag nga gingikanan nga panid indi mabaton ang iya nga titulo.',
+'import-rootpage-nosubpage' => 'Ang espasyo sang ngalan nga "$1" nga gingikanang panid indi ginapasugtan ang kaupod nga mga panid.',
+
+# Import log
+'importlogpage' => 'Listahan sang mga importe',
+'importlogpagetext' => 'Mga importeng administratibo sang mga panid nga may maragtas sang pagbag-o halin sa iban nga wiki.',
+
+# JavaScriptTest
+'javascripttest-pagetext-frameworks' => 'Palihug pilion ang isa sa mga masunod nga mga testing frameworks: $1',
+'javascripttest-pagetext-skins' => 'Pilion ang isa ka panit para magdalagan sa imo nga eksamin:',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Ang imo kaugalingon nga pahina',
+'tooltip-pt-anonuserpage' => 'Ang panid sang tiggamit para sa IP address imo ginbag-o bilang',
 'tooltip-pt-mytalk' => 'Ang imo pahina sang paghisayranay',
+'tooltip-pt-anontalk' => 'Istorya kapin sa mga pagbag-o nga ginhimo sa ip address nga ini',
 'tooltip-pt-preferences' => 'Akon pagpalabi',
 'tooltip-pt-watchlist' => 'Ang lista sang mga pahina nga imo ginabantayan para bag-ohon',
 'tooltip-pt-mycontris' => 'Lista sang imo kontribusyon',
 'tooltip-pt-login' => 'Gina-abi-abi ikaw nga man magsulod paagi sa pag log-in, apang indi ini kinahanglan gid buhaton',
+'tooltip-pt-anonlogin' => 'Ginasuportahan ka nga magsulod, ugaling indi ini kinahanglan.',
 'tooltip-pt-logout' => 'Mag guha',
 'tooltip-ca-talk' => 'Paghisayranay nahanungod sini nga panid',
 'tooltip-ca-edit' => 'Puede nimo islan ang unod sang sini nga panid. Palihog gamit sang preview button antes permanentehon ang gin ilisan.',
@@ -1526,7 +1798,9 @@ Palihog lang sang pagkombinar sa ila sang ensakto.'''",
 Pwede mo matan-aw ang iya ginhalinan',
 'tooltip-ca-history' => 'Nagligad nga rebisyon sa sini nga pahina',
 'tooltip-ca-protect' => 'Protektahan ini nga pahina',
+'tooltip-ca-unprotect' => 'Ilisan ang pagpangapin sa sini nga panid',
 'tooltip-ca-delete' => 'Panason ini nga pahina',
+'tooltip-ca-undelete' => 'Ibalik ang mga paglain nga ginhimo sa panid nga ini antes nga ini ginpanas.',
 'tooltip-ca-move' => 'Saylohon ining panid',
 'tooltip-ca-watch' => 'I-dugang ini nga pahina sa imo listahan sang palangitaon',
 'tooltip-ca-unwatch' => 'Kuhaon ini nga pahina sa imo lista sang ginabantayan',
@@ -1553,10 +1827,13 @@ Pwede mo matan-aw ang iya ginhalinan',
 'tooltip-t-permalink' => 'Permanente nga tabid sa sini nga rebisyon sang pahina',
 'tooltip-ca-nstab-main' => 'Tan-awon ang unod sang pahina',
 'tooltip-ca-nstab-user' => 'Tan-awon ang pahina sang naga-usar',
+'tooltip-ca-nstab-media' => 'Tan-awon ang panid sang midya.',
 'tooltip-ca-nstab-special' => 'Espesyal ini nga pahina, indi mo ini ma islan sang iya kaugalingon nga pahina',
 'tooltip-ca-nstab-project' => 'Tan-awon ang pahina ka proyekto',
 'tooltip-ca-nstab-image' => 'Tan-awon ang pahina sang file',
+'tooltip-ca-nstab-mediawiki' => 'Tan-awon ang mensahe sang sistema',
 'tooltip-ca-nstab-template' => 'Tan-awon ang templeyt',
+'tooltip-ca-nstab-help' => 'Tan-awon ang panid sang bulig',
 'tooltip-ca-nstab-category' => 'Tan-awon ang pahina nga kategorya',
 'tooltip-minoredit' => 'Markahan ini bilang menor nga pag-ilis',
 'tooltip-save' => 'Permanentehon ang imo gin islan',
@@ -1564,11 +1841,23 @@ Pwede mo matan-aw ang iya ginhalinan',
 'tooltip-diff' => 'Ipakita ang mga bag-o nga nahimo mo sa teksto',
 'tooltip-compareselectedversions' => 'Lantawa ang ginalian sang duwa ka napilian nga rebisyon sa sini nga pahina',
 'tooltip-watch' => 'Idugang ini nga pahina sa imo lista nga ginabantayan',
+'tooltip-watchlistedit-normal-submit' => 'Pagpanason ang mga titulo',
+'tooltip-watchlistedit-raw-submit' => 'Iupdate ang listahan sang mga ginatan-aw.',
+'tooltip-recreate' => 'Liwat nga himuon ang panid bisan ini napanas na',
+'tooltip-upload' => 'Sugdan ang pagkarga',
 'tooltip-rollback' => '"Panumbalik" ginabalik ang (mga) na-islan sa sini nga pahina sa pinaka ulihi nga kontributor sa isa lang ka klik',
 'tooltip-undo' => '"Indi pag-obrahon" ginabalik ang gin-islan kag gabukas sa isaln form sa may prebyu mode.
 Gapasugot sa pagdugang sang rason sa kabilugan.',
+'tooltip-preferences-save' => 'kon pagpalabi',
 'tooltip-summary' => 'Maghatag sing diutay nga eksplikasyon',
 
+# Metadata
+'notacceptable' => 'Indi makahatag sang impormasyon ang serbidor sang wiki sa porma nga mabasahan sang imo nga kliyente.',
+
+# Attribution
+'anonymous' => 'Indi kilala {{PLURAL:$1|tagagamit|mga tagagamit}} sang {{SITENAME}}',
+'siteuser' => 'Tiggamit {{SITENAME}} sang $1',
+
 # Browsing diffs
 'previousdiff' => '← Mas daan nga na-islan',
 'nextdiff' => 'Mas bag-o nga gin-islan →',
@@ -1595,22 +1884,41 @@ Ano man nga pasunod nga tabid sa parehas nga linya ay ginasugtan bilang eksepsiy
 Kung ang ini nga file ginliwat halin sa orihinal nga porma, basi indi gina pakita ang naliwat nga file sang iban nga mga detalye.',
 'metadata-expand' => 'Ipakita ang mga dugang nga detalye',
 'metadata-collapse' => 'Tagu-on ang mga dugang nga detalye',
-'metadata-fields' => 'EXIF metadata fields nga nalista sa ini nga mensahe ay pagadal-on sa mga laragway nga gina pakita sa pahina kun ang metadata table ay narumpag.
+'metadata-fields' => 'Ang mga imahen sang EXIF metadata fields nga nalista sa ini nga mensahe ay pagadal-on sa mga laragway nga gina pakita sa pahina kun ang metadata table ay narumpag.
 Ang iban ay pagataguon sang default.
-* make
-* model
+* himo
+* modelo
 * datetimeoriginal
-* exposuretime
+* tyempo sang exposure
 * fnumber
 * isospeedratings
 * focallength
-* artist
+* artista
 * copyright
 * imagedescription
 * gpslatitude
 * gpslongitude
 * gpsaltitude',
 
+# EXIF tags
+'exif-lightsource' => 'Ginghalinan sang sanag',
+'exif-flash' => 'Igpat',
+'exif-subjectarea' => 'Subject area',
+'exif-flashenergy' => 'Kabaskug sang igpat',
+'exif-focalplaneyresolution' => 'Resolusyong Y sa focal plane',
+'exif-focalplaneresolutionunit' => 'Yunit sang resolusyon sang focal plane',
+'exif-subjectlocation' => 'Lokasyon sang tuyo',
+'exif-exposureindex' => 'Antas sang exposure',
+'exif-sensingmethod' => 'Pamaagi sang pagpabatyag',
+'exif-filesource' => 'Ginhalinan sang file',
+'exif-scenetype' => 'Tipo sang larawan',
+'exif-customrendered' => 'Ginaproseso ang ginpersonalisado nga imahen',
+'exif-exposuremode' => 'Tipo sang exposure',
+'exif-whitebalance' => 'Balanse sang kaputian',
+'exif-digitalzoomratio' => 'Antas sang digital zoom',
+'exif-focallengthin35mmfilm' => 'Laba sang pokus sang film nga 35 mm',
+'exif-scenecapturetype' => 'Tipo sang pag-kuha sang litrato',
+
 # External editor support
 'edit-externally' => 'Islan ini nga file gamit ang eksternal nga aplikasyon',
 'edit-externally-help' => '(Lantawa ang [//www.mediawiki.org/wiki/Manual:External_editors tudlo sa pag panugod] para sa mga dugang nga impormasyon)',
@@ -1631,6 +1939,9 @@ Ang iban ay pagataguon sang default.
 'watchlisttools-edit' => 'Tan-awon kag islan ang listahan nga ginalantaw',
 'watchlisttools-raw' => 'Islan ang hindi pa tapos na listahan sang nagalantaw',
 
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'Abiso:\'\'\' Ang default sort key nga "$2" ginabag-o sang nauna nga default sort key nga "$1".',
+
 # Special:Version
 'version-specialpages' => 'Pinasahi nga mga panid',
 
@@ -1640,6 +1951,19 @@ Ang iban ay pagataguon sang default.
 # Special:SpecialPages
 'specialpages' => 'Espesyal nga mga panid',
 
+# External image whitelist
+'external_image_whitelist' => ' #Pabay-an lang ang ini nga linya nga amu ni<pre>
+#Ibutang ang mga piraso sang mga regular nga expressions (amo lang nga parte nga yara sa tunga sang //) sa idalum
+#Ini ibagay sa mga URLs sang mga imahen (hotlinked ukon ginsugpon) sa gwa.
+#Ang mga nagakabagay nga mga imahen ini igapagwa, kon indi ang sugpon ukon link lang sang imahen ang igapagwa.
+#Mga linya nga nagasugod sa # tratuhon bilang komento.
+#Ini indi sensitibo sa kapitalisasyon
+
+#Ibutang ang tanan nga regex fragments sa babaw sang linya. Pabay-i lang ang linya nga amu ina</pre>',
+
+# Special:Tags
+'tag-filter' => 'Ginpangsala sa [[Special:Tags|marka]]:',
+
 # New logging system
 'revdelete-restricted' => 'ginapatuman nga pagbawal sa mga administrador',
 'revdelete-unrestricted' => 'ginkakas nga pagbawal sa mga administrador',
index 0077841..a91c38e 100644 (file)
@@ -647,7 +647,7 @@ Móžeš tutu zdźělenku ignorować, jeli so wužiwarske konto zmylnje wutwori
 'loginlanguagelabel' => 'Rěč: $1',
 'suspicious-userlogout' => 'Twoje naprašowanje za wotzjewjenje bu wotpokazane, dokelž zda so, jako by so přez wobškodźeny wobhladowak abo pufrowacy proksy pósłało',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Njeznaty zmylk w PHP-funkciji mail()',
 'user-mail-no-addy' => 'Je so spytało e-mejl bjez e-mejloweje adresy słać.',
 'user-mail-no-body' => 'Je so spytało, e-mejl bjez teksta abo z překrótkim tekstom pósłać',
@@ -1308,7 +1308,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'prefs-displaywatchlist' => 'Zwobraznjenske opcije',
 'prefs-diffs' => 'Rozdźěle',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Zda so, zo e-mejlowa adresa je płaćiwa',
 'email-address-validity-invalid' => 'Zapodaj płaćiwu e-mejlowu adresu',
 
@@ -2085,7 +2085,7 @@ Znajmjeńša hłowna domena je trěbna, na přikład "*.org".<br />
 'listgrouprights-addgroup-self-all' => 'Móže wšě skupiny swójskemu kontu přidać',
 'listgrouprights-removegroup-self-all' => 'Móže wšě skupiny ze swójskeho konta wotstronić',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Njejsy přizjewjeny.',
 'mailnologintext' => 'Dyrbiš [[Special:UserLogin|přizjewjeny]] być a płaćiwu e-mejlowu adresu w swojich [[Special:Preferences|nastajenjach]] měć, zo by druhim wužiwarjam mejlki pósłać móhł.',
 'emailuser' => 'Wužiwarjej mejlku pósłać',
@@ -3429,7 +3429,7 @@ Nasledne wotkazy na samsnej lince definuja wuwzaća, hdźež so wobraz smě naje
 'monthsall' => 'wšě',
 'limitall' => 'wšě',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Emailowu adresu wobkrućić',
 'confirmemail_noemail' => 'Njejsy płaćiwu e-mejlowu adresu w swojich [[Special:Preferences|nastajenjach]] podał.',
 'confirmemail_text' => 'Tutón wiki žada, zo swoju e-mejlowu adresu wobkrućiš, prjedy hač e-mejlowe funkcije wužiješ. Zaktiwuzij tłóčatko deleka, zo by swojej adresy wobkrućensku mejlku pósłał. Mejlka zapřijmje wotkaz, kotryž kod wobsahuje; wočiń wotkaz we swojim wobhladowaku, zo by wobkrućił, zo twoja e-mejlowa adresa je płaćiwa.',
index fdb1293..a9d9597 100644 (file)
@@ -815,7 +815,7 @@ Várj egy kicsit, mielőtt újra próbálkozol.',
 'loginlanguagelabel' => 'Nyelv: $1',
 'suspicious-userlogout' => 'A kijelentkezési kérésed vissza lett utasítva, mert úgy tűnik, hogy egy hibás böngésző vagy gyorsítótárazó proxy küldte.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Ismeretlen hiba a PHP mail() függvényében',
 'user-mail-no-addy' => 'E-mail üzenetet próbáltál küldeni e-mail cím megadása nélkül.',
 'user-mail-no-body' => 'Üres vagy nagyon rövid email-t próbáltál küldeni.',
@@ -1481,7 +1481,7 @@ A műveletet nem lehet visszavonni.',
 'prefs-displaywatchlist' => 'Megjelenítési beállítások',
 'prefs-diffs' => 'Eltérések (diffek)',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Az e-mail cím érvényesnek tűnik',
 'email-address-validity-invalid' => 'Írj be egy érvényes e-mail címet',
 
@@ -2257,7 +2257,7 @@ Az egyes csoportokról további információt [[{{MediaWiki:Listgrouprights-help
 'listgrouprights-addgroup-self-all' => 'az összes csoportot hozzáadhatja a saját fiókjához',
 'listgrouprights-removegroup-self-all' => 'az összes csoporból eltávolíthatja a saját fiókját',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nincs feladó',
 'mailnologintext' => 'Ahhoz hogy másoknak e-mailt küldhess, [[Special:UserLogin|be kell jelentkezned]] és meg kell adnod egy érvényes e-mail címet a [[Special:Preferences|beállításaidban]].',
 'emailuser' => 'E-mail küldése ezen szerkesztőnek',
@@ -3654,7 +3654,7 @@ míg a többi elem a táblázat összecsukása után alapértelmezett esetben re
 'monthsall' => 'mind',
 'limitall' => 'mind',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-mail cím megerősítése',
 'confirmemail_noemail' => 'Nincs érvényes e-mail cím megadva a [[Special:Preferences|beállításaidnál]].',
 'confirmemail_text' => 'Meg kell erősítened az e-mail címed, mielőtt használhatnád a(z) {{SITENAME}} levelezési rendszerét. Nyomd meg az alsó gombot, hogy kaphass egy e-mailt, melyben megtalálod a megerősítéshez szükséges kódot. Töltsd be a kódot a böngésződbe, hogy aktiválhasd az e-mail címedet.',
index c26eab9..4d5fcfc 100644 (file)
@@ -750,7 +750,7 @@ $2',
 Խնդրում ենք սպասել որոշ ժամանակ կրկին փորձելուց առաջ։',
 'loginlanguagelabel' => 'Լեզու՝ $1',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Անհայտ սխալ PHP-ի mail() ֆունկցիայում',
 'user-mail-no-addy' => 'Փորձվեց ուղարկել էլ․ նամակ առանց էլ․ հասցեի։',
 
@@ -1298,7 +1298,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'prefs-displaywatchlist' => 'Ցուցադրման ընտրանքներ',
 'prefs-diffs' => 'Տարբերություններ',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Էլ. հասցեն վավերական է',
 'email-address-validity-invalid' => 'Մուտքագրեք վավերական էլ. հասցե',
 
@@ -1760,7 +1760,7 @@ $1-ը հղվել է $2 ից',
 'listgrouprights-members' => '(անդամների ցանկ)',
 'listgrouprights-addgroup' => 'Ավելացնեել {{PLURAL:$2|խումբ|խմբեր}}՝  $1',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ուղարկման հասցե չկա',
 'mailnologintext' => 'Անհրաժեշտ է [[Special:UserLogin|մտնել համակարգ]] և ունենալ գործող էլ-փոստի հասցե ձեր [[Special:Preferences|նախընտրություններում]]՝ ուրիշ մասնակիցներին էլեկտրոնային նամակներ ուղարկելու համար։',
 'emailuser' => 'էլ-նամակ ուղարկել այս մասնակցին',
@@ -2558,7 +2558,7 @@ $1',
 'monthsall' => 'բոլոր',
 'limitall' => 'բոլոր',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Էլ-հասցեի վավերացում',
 'confirmemail_noemail' => 'Դուք չեք նշել գործող էլ-հասցե ձեր [[Special:Preferences|նախընտրություններում]]։',
 'confirmemail_text' => 'Այս վիքիում անհրաժեշտ է վավերացնել էլ-հասցեն մինչև էլ-փոստի վրա հիմնված հնարավորությունների օգտագործելը։ Մատնահարեք ստորև կոճակին՝ ձեր հասցեին վավերացման նամակ ուղարկելու համար։ Ուղերձում կգտնեք վավերացման կոդով հղում, որին հետևելով կվավերացնեք ձեր էլ-հասցեն։',
index aafbd4c..8426896 100644 (file)
@@ -658,7 +658,7 @@ Per favor attende ante de probar lo novemente.',
 'loginlanguagelabel' => 'Lingua: $1',
 'suspicious-userlogout' => 'Le requesta de clauder le session ha essite refusate proque illo pare haber essite inviate per un navigator o proxy de cache defectuose.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Error incognite in le function mail() de PHP',
 'user-mail-no-addy' => 'Tentava inviar e-mail sin adresse de e-mail.',
 'user-mail-no-body' => 'Tentava inviar e-mail con texto vacue o multo curte.',
@@ -1213,7 +1213,7 @@ Detalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}
 'search-interwiki-default' => 'Resultatos de $1:',
 'search-interwiki-more' => '(plus)',
 'search-relatedarticle' => 'Connexe',
-'mwsuggest-disable' => 'Disactivar suggestiones via AJAX',
+'mwsuggest-disable' => 'Disactivar suggestiones de recerca',
 'searcheverything-enable' => 'Cercar in tote le spatios de nomines',
 'searchrelated' => 'connexe',
 'searchall' => 'totes',
@@ -1362,7 +1362,7 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'prefs-displaywatchlist' => 'Optiones de presentation',
 'prefs-diffs' => 'Differentias',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Sembla valide',
 'email-address-validity-invalid' => 'Un adresse valide es obligatori!',
 
@@ -1966,6 +1966,10 @@ Template:Disambiguation',
 Istes debe forsan ligar directemente al articulo sur le thema in question.<br />
 Un pagina se tracta como pagina de disambiguation si illo usa un patrono que es ligate ab [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Paginas con un proprietate de pagina',
+'pageswithprop-text' => 'Iste pagina lista le paginas que usa un certe proprietate de pagina.',
+'pageswithprop-prop' => 'Nomine del proprietate:',
+
 'doubleredirects' => 'Redirectiones duple',
 'doubleredirectstext' => 'Iste pagina lista paginas de redirection verso altere paginas de redirection.
 Cata linea contine ligamines al prime e al secunde redirection, con le destination del secunde redirection. Iste es normalmente le "ver" pagina de destination, al qual le prime redirection tamben deberea punctar.
@@ -2158,7 +2162,7 @@ Il pote haber [[{{MediaWiki:Listgrouprights-helppage}}|informationes additional]
 'listgrouprights-addgroup-self-all' => 'Pote adder tote le gruppos al proprie conto',
 'listgrouprights-removegroup-self-all' => 'Pote remover tote le gruppos del proprie conto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Necun adresse de invio',
 'mailnologintext' => 'Tu debe [[Special:UserLogin|aperir un session]]
 e haber un adresse de e-mail valide in tu [[Special:Preferences|preferentias]]
@@ -2242,26 +2246,27 @@ Le modificationes futur in iste pagina e in le pagina de discussion associate es
 'enotif_subject_moved' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|renominate}} per $2',
 'enotif_subject_restored' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|restaurate}} per $2',
 'enotif_subject_changed' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|modificate}} per $2',
+'enotif_body_intro_deleted' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|delite}} le $PAGEEDITDATE per $2, vide $3.',
+'enotif_body_intro_created' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|create}} le $PAGEEDITDATE per $2, vide $3 pro le version actual.',
+'enotif_body_intro_moved' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|renominate}} le $PAGEEDITDATE per $2, vide $3 pro le version actual.',
+'enotif_body_intro_restored' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|restaurate}} le $PAGEEDITDATE per $2, vide $3 pro le version actual.',
+'enotif_body_intro_changed' => 'Le pagina $1 de {{SITENAME}} ha essite {{GENDER:$2|modificate}} le $PAGEEDITDATE per $2, vide $3 pro le version actual.',
 'enotif_lastvisited' => 'Vide $1 pro tote le modificationes depost tu ultime visita.',
 'enotif_lastdiff' => 'Vide $1 pro revider iste modification.',
 'enotif_anon_editor' => 'usator anonyme $1',
 'enotif_body' => 'Car $WATCHINGUSERNAME,
 
-
-Le pagina de {{SITENAME}} titulate $PAGETITLE ha essite $CHANGEDORCREATED le $PAGEEDITDATE per $PAGEEDITOR. Vide $PAGETITLE_URL pro le version actual.
-
-$NEWPAGE
+$PAGEINTRO $NEWPAGE
 
 Summario del redactor: $PAGESUMMARY $PAGEMINOREDIT
 
 Pro contactar le redactor:
-e-mail: $PAGEEDITOR_EMAIL
+mail: $PAGEEDITOR_EMAIL
 wiki: $PAGEEDITOR_WIKI
 
-Si tu non visita iste pagina, tu non recipera altere notificationes in caso de modificationes ulterior.
-Como alternativa tu pote reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
+Tu non recipera altere notificationes de activitate si tu non visita iste pagina. Tu pote anque reinitialisar le optiones de notification pro tote le paginas in tu observatorio.
 
-             Le systema de notification de {{SITENAME}}, a tu servicio
+Le systema de notification de {{SITENAME}}, a tu servicio
 
 -- 
 Pro configurar le notification per e-mail, visita
@@ -2351,6 +2356,8 @@ Vide le [[Special:ProtectedPages|lista de paginas protegite]] pro le lista de pr
 'prot_1movedto2' => 'displaciava [[$1]] verso [[$2]]',
 'protect-badnamespace-title' => 'Spatio de nomines non protegibile',
 'protect-badnamespace-text' => 'Le paginas in iste spatio de nomines non pote esser protegite.',
+'protect-norestrictiontypes-text' => 'Iste pagina non pote esser protegite perque il non ha alcun typo de restriction disponibile.',
+'protect-norestrictiontypes-title' => 'Pagina non protegibile',
 'protect-legend' => 'Confirmar protection',
 'protectcomment' => 'Motivo:',
 'protectexpiry' => 'Expiration:',
@@ -2678,7 +2685,7 @@ Pro blocar o disblocar le base de datos, le servitor web debe poter scriber a is
 'move-page' => 'Renominar $1',
 'move-page-legend' => 'Renominar pagina',
 'movepagetext' => "Per medio del formulario hic infra tu pote renominar un pagina, transferente tote su historia al nove nomine.
-Le titulo anterior devenira un pagina de redirection verso le nove titulo.
+Le ancian titulo devenira un pagina de redirection verso le nove titulo.
 Tu pote actualisar automaticamente le redirectiones que puncta verso le titulo original.
 Si tu prefere non facer isto, non oblida de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].
 Tu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte.
@@ -2690,12 +2697,12 @@ Isto te lassa le possibilitate de restaurar le titulo original de un pagina si t
 Isto pote esser un cambio drastic e inexpectate pro un pagina popular;
 per favor assecura te de haber comprendite le consequentias de isto ante de continuar.",
 'movepagetext-noredirectfixer' => "Per medio del formulario infra tu pote renominar un pagina, transferente tote su historia al nove nomine.
-Le titulo anterior devenira un pagina de redirection verso le nove titulo.
-Assecura te de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].
+Le ancian titulo devenira un pagina de redirection verso le nove titulo.
+Non oblida de reparar omne redirectiones [[Special:DoubleRedirects|duple]] o [[Special:BrokenRedirects|rupte]].
 Tu ha le responsabilitate de assecurar que le ligamines continua a punctar verso le paginas correcte.
 
-Nota que le pagina '''non''' essera renominate si existe ja un pagina sub le nove titulo, salvo si illo es vacue o un redirection e non ha un historia de modificationes passate.
-Isto vole dicer que tu pote renominar un pagina retro a su titulo original si tu ha committite un error, ben que tu non pote superscriber un pagina existente.
+Nota que le pagina '''non''' essera renominate si existe jam un pagina sub le nove titulo, excepte si iste es un redirection sin historia de modificationes passate.
+Isto te lassa le possibilitate de restaurar le titulo original de un pagina si tu ha committite un error, sin permitter te de supplantar un pagina existente.
 
 '''Attention!'''
 Isto pote esser un cambio drastic e inexpectate pro un pagina popular;
@@ -2864,6 +2871,7 @@ Salveguarda lo in tu computator e incarga lo hic.',
 'import-error-interwiki' => 'Le pagina "$1" non es importate perque su nomine es reservate pro ligation externe (interwiki).',
 'import-error-special' => 'Le pagina "$1" non es importate perque illo pertine a un spatio de nomines special que non permitte paginas.',
 'import-error-invalid' => 'Le pagina "$1" non es importate perque su nomine es invalide.',
+'import-error-unserialize' => 'Le version $2 del pagina "$1" non pote esser disserialisate. Il ha essite reportate que iste version usa le modello de contento $3 serialisate como $4.',
 'import-options-wrong' => 'Mal {{PLURAL:$2|option|optiones}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'Le pagina radice specificate es un titulo invalide.',
 'import-rootpage-nosubpage' => 'Le spatio de nomines "$1" del pagina radice non permitte subpaginas.',
@@ -3025,6 +3033,7 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-robot-noindex' => 'Non indexabile',
 'pageinfo-views' => 'Numero de visitas',
 'pageinfo-watchers' => 'Numero de observatores del pagina',
+'pageinfo-few-watchers' => 'Minus de $1 {{PLURAL:$1|observator|observatores}}',
 'pageinfo-redirects-name' => 'Redirectiones verso iste pagina',
 'pageinfo-subpages-name' => 'Subpaginas de iste pagina',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirection|redirectiones}}; $3 {{PLURAL:$3|non-redirection|non-redirectiones}})',
@@ -3039,6 +3048,7 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola|Parolas}} magic ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria|Categorias}} celate ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Patrono|Patronos}} transcludite ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|Pagina|Paginas}} in que iste pagina es transcludite ($1)',
 'pageinfo-toolboxlink' => 'Information sur le pagina',
 'pageinfo-redirectsto' => 'Redirige a',
 'pageinfo-redirectsto-info' => 'info',
@@ -3047,6 +3057,10 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-protect-cascading' => 'Protection in cascada a partir de hic',
 'pageinfo-protect-cascading-yes' => 'Si',
 'pageinfo-protect-cascading-from' => 'Protection in cascada a partir de',
+'pageinfo-category-info' => 'Information de categoria',
+'pageinfo-category-pages' => 'Numero de paginas',
+'pageinfo-category-subcats' => 'Numero de subcategorias',
+'pageinfo-category-files' => 'Numero de files',
 
 # Skin names
 'skinname-standard' => 'Classic',
@@ -3103,6 +3117,7 @@ Le execution de illo pote compromitter le securitate de tu systema.",
 'file-nohires' => 'Non disponibile in resolution plus alte.',
 'svg-long-desc' => 'File SVG, dimensiones nominal: $1 × $2 pixels, grandor del file: $3',
 'svg-long-desc-animated' => 'File SVG animate, dimensiones nominal: $1 × $2 pixels, grandor del file: $3',
+'svg-long-error' => 'File SVG invalide: $1',
 'show-big-image' => 'Plen resolution',
 'show-big-image-preview' => ' Dimension de iste previsualisation: $1.',
 'show-big-image-other' => 'Altere {{PLURAL:$2|resolution|resolutiones}}: $1.',
@@ -3132,6 +3147,8 @@ Le execution de illo pote compromitter le securitate de tu systema.",
 'minutes' => '{{PLURAL:$1|$1 minuta|$1 minutas}}',
 'hours' => '{{PLURAL:$1|$1 hora|$1 horas}}',
 'days' => '{{PLURAL:$1|$1 die|$1 dies}}',
+'months' => '{{PLURAL:$1|$1 mense|$1 menses}}',
+'years' => '{{PLURAL:$1|$1 anno|$1 annos}}',
 'ago' => '$1 retro',
 'just-now' => 'Justo nunc',
 
@@ -3563,7 +3580,7 @@ Le alteres essera initialmente celate.
 'monthsall' => 'totes',
 'limitall' => 'totes',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar adresse de e-mail',
 'confirmemail_noemail' => 'Tu non ha configurate un adresse de e-mail valide in tu [[Special:Preferences|preferentias de usator]].',
 'confirmemail_text' => '{{SITENAME}} require que tu valida tu adresse de e-mail ante que tu usa functiones involvente e-mail.
@@ -3794,7 +3811,7 @@ Le imagines se monstra in plen resolution, le altere typos de file se executa di
 'specialpages-group-highuse' => 'Paginas multo usate',
 'specialpages-group-pages' => 'Listas de paginas',
 'specialpages-group-pagetools' => 'Instrumentos pro paginas',
-'specialpages-group-wiki' => 'Datos e instrumentos pro Wiki',
+'specialpages-group-wiki' => 'Datos e instrumentos',
 'specialpages-group-redirects' => 'Redirection de paginas special',
 'specialpages-group-spam' => 'Instrumentos antispam',
 
@@ -3891,6 +3908,7 @@ Le imagines se monstra in plen resolution, le altere typos de file se executa di
 'logentry-newusers-newusers' => 'Le conto de usator $1 ha essite create',
 'logentry-newusers-create' => 'Le conto de usator $1 ha essite create',
 'logentry-newusers-create2' => 'Le conto de usator $3 ha essite create per $1',
+'logentry-newusers-byemail' => 'Le conto de usator $3 ha essite create per $1 e le contrasigno ha essite inviate per e-mail',
 'logentry-newusers-autocreate' => 'Le conto $1 ha essite create automaticamente',
 'logentry-rights-rights' => '$1 cambiava le appertinentia a gruppos pro $3 de $4 a $5',
 'logentry-rights-rights-legacy' => '$1 cambiava le appertinentia a gruppos pro $3',
@@ -3949,6 +3967,7 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'api-error-ok-but-empty' => 'Error interne: nulle responsa del servitor.',
 'api-error-overwrite' => 'Superscriber un file existente non es permittite.',
 'api-error-stashfailed' => 'Error interne: le servitor non poteva immagazinar le file temporari.',
+'api-error-publishfailed' => 'Error interne: le servitor non poteva publicar le file temporari.',
 'api-error-timeout' => 'Le servitor non ha respondite intra le tempore expectate.',
 'api-error-unclassified' => 'Un error incognite ha occurrite.',
 'api-error-unknown-code' => 'Error incognite: "$1"',
@@ -3969,4 +3988,7 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'duration-centuries' => '$1 {{PLURAL:$1|seculo|seculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennio|millennios}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Paginas con un proprietate de pagina',
+'pageswithprop-submit' => 'Va',
 );
index 7df415a..d03eb29 100644 (file)
@@ -837,7 +837,7 @@ Silakan menunggu sebelum mencoba lagi.',
 'loginlanguagelabel' => 'Bahasa: $1',
 'suspicious-userlogout' => 'Permintaan Anda untuk keluar log ditolak karena tampaknya dikirim oleh penjelajah yang rusak atau proksi penyinggah.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Kesalahan yang tidak dikenal dalam fungsi mail() PHP',
 'user-mail-no-addy' => 'Mencoba mengirimkan surel tanpa alamat surel.',
 'user-mail-no-body' => 'Mencoba untuk mengirim surel kosong atau terlalu pendek.',
@@ -1139,10 +1139,10 @@ Beberapa templat akan diabaikan.',
 'converter-manual-rule-error' => 'Kesalahan terdeteksi di aturan manual konversi bahasa',
 
 # "Undo" feature
-'undo-success' => 'Suntingan ini dapat dibatalkan. Tolong cek perbandingan di bawah untuk meyakinkan bahwa benar itu yang Anda ingin lakukan, lalu simpan perubahan tersebut untuk menyelesaikan pembatalan suntingan.',
-'undo-failure' => 'Suntingan ini tidak dapat dibatalkan karena konflik penyuntingan antara.',
-'undo-norev' => 'Suntingan ini tidak dapat dibatalkan karena halaman tidak ditemukan atau telah dihapuskan.',
-'undo-summary' => 'Membatalkan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]])',
+'undo-success' => 'Suntingan ini dapat dibalikkan. Silakan periksa perbandingan di bawah untuk meyakinkan bahwa benar itu yang Anda ingin lakukan, lalu simpan perubahan tersebut untuk menyelesaikan pembalikkan suntingan.',
+'undo-failure' => 'Suntingan ini tidak dapat dibalikkan karena konflik penyuntingan antara.',
+'undo-norev' => 'Suntingan ini tidak dapat dibalikkan karena halaman tidak ditemukan atau telah dihapuskan.',
+'undo-summary' => 'Membalikkan revisi $1 oleh [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Akun tak dapat dibuat',
@@ -1320,7 +1320,7 @@ Pastikan bahwa perubahan ini tetap mempertahankan kontinuitas versi terdahulu ha
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Bandingkan versi terpilih',
 'showhideselectedversions' => 'Tampilkan/sembunyikan versi terpilih',
-'editundo' => 'batalkan',
+'editundo' => 'balikkan',
 'diff-multi' => '({{PLURAL:$1|Satu|$1}} revisi antara oleh {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Satu|$1}} revisi antara oleh lebih dari $2 {{PLURAL:$2|satu|$2}} pengguna tak ditampilkan)',
 'difference-missing-revision' => '{{PLURAL:$2|Satu revisi|$2 revisi}} dari perbedaan ini ($1) {{PLURAL:$2|tidak|tidak}} ditemukan.
@@ -1519,7 +1519,7 @@ Jika Anda memberikannya, nama asli Anda akan digunakan untuk memberi pengenalan
 'prefs-displaywatchlist' => 'Pilihan tampilan',
 'prefs-diffs' => 'Beda',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamat surel tampaknya sah',
 'email-address-validity-invalid' => 'Masukkan alamat surel yang sah',
 
@@ -1992,7 +1992,7 @@ Ketika disaring oleh pengguna, hanya vesi berkas terbaru dari berkas yang penggu
 'filehist-help' => 'Klik pada tanggal/waktu untuk melihat berkas ini pada saat tersebut.',
 'filehist-deleteall' => 'hapus semua',
 'filehist-deleteone' => 'hapus',
-'filehist-revert' => 'kembalikan',
+'filehist-revert' => 'batalkan',
 'filehist-current' => 'terkini',
 'filehist-datetime' => 'Tanggal/Waktu',
 'filehist-thumb' => 'Miniatur',
@@ -2031,13 +2031,13 @@ Mungkin Anda ingin menyunting keterangan pada [$2 halaman deskripsi berkas] di s
 'upload-disallowed-here' => 'Anda tidak bisa menimpa berkas ini.',
 
 # File reversion
-'filerevert' => 'Kembalikan $1',
-'filerevert-legend' => 'Kembalikan berkas',
-'filerevert-intro' => "Anda mengembalikan '''[[Media:$1|$1]]''' ke versi [$4 pada $3, $2].",
+'filerevert' => 'Batalkan $1',
+'filerevert-legend' => 'Batalkan berkas',
+'filerevert-intro' => "Anda membatalkan '''[[Media:$1|$1]]''' ke versi [$4 pada $3, $2].",
 'filerevert-comment' => 'Alasan:',
-'filerevert-defaultcomment' => 'Dikembalikan ke versi pada $2, $1',
-'filerevert-submit' => 'Kembalikan',
-'filerevert-success' => "'''[[Media:$1|$1]]''' telah dikembalikan ke versi [$4 pada $3, $2]",
+'filerevert-defaultcomment' => 'Dibatalkan ke versi pada $2, $1',
+'filerevert-submit' => 'Batalkan',
+'filerevert-success' => "'''[[Media:$1|$1]]''' telah dibatalkan ke versi [$4 pada $3, $2]",
 'filerevert-badversion' => 'Tidak ada versi lokal terdahulu dari berkas ini dengan stempel waktu yang dimaksud.',
 
 # File deletion
@@ -2305,7 +2305,7 @@ Perlu sedikitnya satu domain tingkat atas, misalnya "*.org".<br />
 'listgrouprights-addgroup-self-all' => 'Dapat menambahkan semua grup ke akun sendiri',
 'listgrouprights-removegroup-self-all' => 'Menghapus semua kelompok dari akun sendiri',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Tidak ada alamat surel',
 'mailnologintext' => 'Anda harus [[Special:UserLogin|masuk log]] dan mempunyai alamat surel yang sah di dalam [[Special:Preferences|preferensi]] untuk mengirimkan surel kepada pengguna lain.',
 'emailuser' => 'Surel pengguna',
@@ -2442,7 +2442,7 @@ Umpan balik dan bantuan lebih lanjut:
 'dellogpage' => 'Log penghapusan',
 'dellogpagetext' => 'Di bawah ini adalah log penghapusan halaman. Semua waktu yang ditunjukkan adalah waktu server.',
 'deletionlog' => 'log penghapusan',
-'reverted' => 'Dikembalikan ke revisi sebelumnya',
+'reverted' => 'Dibatalkan ke revisi sebelumnya',
 'deletecomment' => 'Alasan:',
 'deleteotherreason' => 'Alasan lain/tambahan:',
 'deletereasonotherlist' => 'Alasan lain',
@@ -2463,16 +2463,16 @@ Menghapus halaman ini dapat menyebabkan masalah dalam operasional basis data {{S
 'rollbacklinkcount' => 'kembalikan $1 {{PLURAL:$1|suntingan|suntingan}}',
 'rollbacklinkcount-morethan' => 'kembalikan lebih dari $1 {{PLURAL:$1|suntingan|suntingan}}',
 'rollbackfailed' => 'Pengembalian gagal dilakukan',
-'cantrollback' => 'Tidak dapat mengembalikan suntingan;
+'cantrollback' => 'Tidak dapat membatalkan suntingan;
 kontributor terakhir adalah satu-satunya penulis halaman ini.',
 'alreadyrolled' => 'Tidak dapat melakukan pengembalian ke revisi terakhir [[:$1]] oleh [[User:$2|$2]] ([[User talk:$2|bicara]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
 pengguna lain telah menyunting atau melakukan pengembalian terhadap halaman ini.
 
 Suntingan terakhir dilakukan oleh [[User:$3|$3]] ([[User talk:$3|bicara]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Komentar penyuntingan adalah: \"''\$1''\".",
-'revertpage' => '←Suntingan [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]]) dikembalikan ke versi terakhir oleh [[User:$1|$1]]',
+'revertpage' => '←Suntingan [[Special:Contributions/$2|$2]] ([[User talk:$2|bicara]]) dibatalkan ke versi terakhir oleh [[User:$1|$1]]',
 'revertpage-nouser' => 'Pengembalian suntingan oleh (pengguna dihapus) ke suntingan terakhir oleh [[User:$1|$1]]',
-'rollback-success' => 'Pengembalian suntingan oleh $1; dikembalikan ke versi terakhir oleh $2.',
+'rollback-success' => 'Pembatalan suntingan oleh $1; dibatalkan ke versi terakhir oleh $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Kegagalan sesi',
@@ -2859,7 +2859,7 @@ Dalam kasus tersebut, apabila diinginkan, Anda dapat memindahkan atau menggabung
 'movesubpagetext' => 'Halaman ini memiliki $1 {{PLURAL:$1|subhalaman|subhalaman}} seperti ditampilkan berikut.',
 'movenosubpage' => 'Halaman ini tak memiliki subhalaman.',
 'movereason' => 'Alasan:',
-'revertmove' => 'kembalikan',
+'revertmove' => 'batalkan',
 'delete_and_move' => 'Hapus dan pindahkan',
 'delete_and_move_text' => '==Penghapusan diperlukan==
 Halaman yang dituju, "[[:$1]]", telah mempunyai isi. Apakah Anda hendak menghapusnya untuk memberikan ruang bagi pemindahan?',
@@ -3072,8 +3072,8 @@ Simpan ke komputer Anda dan unggah ke sini.',
 'tooltip-watchlistedit-raw-submit' => 'Perbarui daftar pantauan',
 'tooltip-recreate' => 'Buat ulang halaman walaupun sebenarnya telah dihapus',
 'tooltip-upload' => 'Mulai pemuatan',
-'tooltip-rollback' => 'Mengembalikan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.',
-'tooltip-undo' => 'Mengembalikan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.',
+'tooltip-rollback' => '"Kembalikan" membatalkan suntingan-suntingan di halaman ini ke kontributor terakhir dalam satu kali klik.',
+'tooltip-undo' => '"Balikkan" membatalkan revisi ini dan membuka kotak penyuntingan dengan mode pratayang. Alasan dapat ditambahkan di kotak ringkasan.',
 'tooltip-preferences-save' => 'Simpan preferensi',
 'tooltip-summary' => 'Masukkan sebuah ringkasan pendek',
 
@@ -3133,7 +3133,7 @@ Simpan ke komputer Anda dan unggah ke sini.',
 Ini mungkin disebabkan oleh pranala ke situs luar yang termasuk dalam daftar hitam.',
 'spamprotectionmatch' => 'Teks berikut ini memancing filter spam kami: $1',
 'spambot_username' => 'Pembersihan span MediaWiki',
-'spam_reverting' => 'Mengembalikan ke versi terakhir yang tak memiliki pranala ke $1',
+'spam_reverting' => 'Membatalkan ke versi terakhir yang tak memiliki pranala ke $1',
 'spam_blanking' => 'Semua revisi yang memiliki pranala ke $1, pengosongan',
 'spam_deleting' => 'Semua revisi yang memiliki pranala ke $1, penghapusan',
 
@@ -3782,7 +3782,7 @@ $8',
 'monthsall' => 'semua',
 'limitall' => 'semua',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Konfirmasi alamat surel',
 'confirmemail_noemail' => 'Anda tidak memberikan alamat surel yang sah di [[Special:Preferences|preferensi pengguna]] Anda.',
 'confirmemail_text' => '{{SITENAME}} mengharuskan Anda untuk melakukan konfirmasi atas alamat surel Anda sebelum fitur-fitur surel dapat digunakan.
@@ -4123,7 +4123,7 @@ Gambar ditampilkan dalam resolusi penuh dan tipe lain berkas akan dibuka langsun
 'htmlform-int-toohigh' => 'Nilai yang Anda masukkan melebihi nilai maksimum $1',
 'htmlform-required' => 'Nilai ini diperlukan',
 'htmlform-submit' => 'Kirim',
-'htmlform-reset' => 'Batalkan perubahan',
+'htmlform-reset' => 'Balikkan perubahan',
 'htmlform-selectorother-other' => 'Lain-lain',
 
 # SQLite database support
index 51f3ea6..125f2c6 100644 (file)
@@ -553,7 +553,7 @@ Pangaasi nga agurayka sakbay nga agipadas manen.',
 'loginlanguagelabel' => 'Pagsasao: $1',
 'suspicious-userlogout' => 'Naiparit ti panagkiddawmo a rummuar  ngamin ket kasla inpatulod ti nadadael a "panagbasabasa" wenno "caching proxy".',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Di am-ammo a biddut iti surat ti PHP  () a pamay-an.',
 'user-mail-no-addy' => 'Pinadas nga impatulod ti e-surat nga awan ti e-surat a pagtaengan.',
 'user-mail-no-body' => 'Nangpadaska a nangipatulod ti e-surat nga awan linaonna wenno ababa laeng a bagi.',
@@ -1259,7 +1259,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'prefs-displaywatchlist' => 'Ipakita dagiti pagpilian',
 'prefs-diffs' => 'Sabali',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Ti e-surat a pagtaengan ket kasla umiso',
 'email-address-validity-invalid' => 'Ikabil ti umiso nga e-surat a pagtaengan',
 
@@ -2042,7 +2042,7 @@ Adda pay ngata [[{{MediaWiki:Listgrouprights-helppage}}|adu pay a pakaammo]] a m
 'listgrouprights-addgroup-self-all' => 'Inayon amin dagiti bunggoy ti bukodmo a pakabilangan',
 'listgrouprights-removegroup-self-all' => 'Ikkatem amin dagiti bunggoy ti bukod a pakabilangan',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Awan ti pagipatulodan a pagtaengan',
 'mailnologintext' => 'Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga e-surat a pagtaengan idiay [[Special:Preferences|kaykayatmo]] ti agipatulod ti e-surat kadagiti sabsabali nga agar-aramat.',
 'emailuser' => 'E-suratan daytoy nga agar-aramat',
@@ -3411,7 +3411,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'monthsall' => 'amin',
 'limitall' => 'amin',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Pasingkedan ti e-surat a pagtaengam',
 'confirmemail_noemail' => 'Awan ti umisu nga e-surat a pagtaengam a naikabil idiay [[Special:Preferences|kaykayat ti agar-aramat]].',
 'confirmemail_text' => 'Ti {{SITNAME}} ket masapulna a pasingkedam ti e-surat a pagtaengam sakbay nga agusar ti -surat a langa.
index 736b2ce..0e7e82d 100644 (file)
@@ -680,7 +680,7 @@ Vinsamlegast veldu þér annað.',
 {{SITENAME}} notar vefkökur til að skrá inn notendur.
 Þú hefur lokað fyrir vefkökur.
 Gjörðu svo vel og opnaðu fyrir þær, skráðu þig svo inn með notandanafni og lykilorði.',
-'nocookieslogin' => '{{SITENAME}} notar vefkökur til innskráningar. Vafrinn þinn er ekki að taka á móti þeim sem gerir það ókleyft að innskrá þig. Vinsamlegast virkjaðu móttöku kakna í vafranum þínum til að geta skráð þig inn.',
+'nocookieslogin' => '{{SITENAME}} notar vefkökur til innskráningar. Vafrinn þinn er ekki að taka á móti þeim. Vinsamlegast virkjaðu móttöku kakna í vafranum þínum til að geta skráð þig inn.',
 'nocookiesfornew' => 'Notenda aðgangurinn var ekki stofnaður, því ekki fannst uppruni beiðnarinnar.
 Gakktu úr skugga um að vefkökur séu virkar, endurhladdu þessari síðu og reyndu aftur.',
 'noname' => 'Þú hefur ekki tilgreint gilt notandanafn.',
@@ -740,7 +740,7 @@ Vinsamlegast reynið aftur síðar.',
 'loginlanguagelabel' => 'Tungumál: $1',
 'suspicious-userlogout' => 'Beiðni um útskráningu hafnað því hún var líklegast send frá biluðum vafra eða vefseli sem hefur vistað vefsíðuna í flýtiminni.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Óþekkt villa í PHP mail() aðgerð.',
 'user-mail-no-addy' => 'Gat ekki sent tölvupóst því ekkert tölvupóstfang fannst.',
 'user-mail-no-body' => 'Reyndi að senda tölvupóst með engu eða verulega stuttu meginmáli.',
@@ -877,14 +877,14 @@ Athugaðu að þú getur ekki notað „Senda þessum notanda tölvupóst“ að
 Núverandi vistfang þitt er $3, og bönnunarnúmerið er #$5.
 Vinsamlegast tilgreindu allt að ofanverðu í fyrirspurnum þínum.",
 'blockednoreason' => 'engin ástæða gefin',
-'whitelistedittext' => 'Þú þarft að $1 til að breyta síðum.',
+'whitelistedittext' => 'Þú þarft að $1 þig til að breyta síðum.',
 'confirmedittext' => 'Þú verður að staðfesta netfangið þitt áður en þú getur breytt síðum. Vinsamlegast stilltu og staðfestu netfangið þitt í gegnum [[Special:Preferences|stillingarnar]].',
 'nosuchsectiontitle' => 'Hluti ekki til',
 'nosuchsectiontext' => 'Þú reyndir að breyta hluta sem er ekki til.
 Hlutinn gæti hafa verið fluttur til eða hent á meðan þú varst að skoða síðuna.',
 'loginreqtitle' => 'Innskráningar krafist',
 'loginreqlink' => 'innskrá',
-'loginreqpagetext' => 'Þú þarft að $1 til að geta séð aðrar síður.',
+'loginreqpagetext' => 'Þú þarft að $1 þig til að geta séð aðrar síður.',
 'accmailtitle' => 'Lykilorð sent.',
 'accmailtext' => "Lykilorðið fyrir [[User talk:$1|$1]] hefur verið sent á $2.
 
@@ -1422,7 +1422,7 @@ Tölvupóstfang þitt er ekki gefið upp þegar aðrir notendur hafa samband vi
 'prefs-displaywatchlist' => 'Útlitsmöguleikar',
 'prefs-diffs' => 'Breytingar',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Netfang virðist vera virkt.',
 'email-address-validity-invalid' => 'Settu inn rétt netfang',
 
@@ -2203,7 +2203,7 @@ Leitin þarf að minnsta kosti að innihalda rótarlén, eins og "*.org"
 'listgrouprights-addgroup-self-all' => 'Bæta sjálfum sér í alla hópa',
 'listgrouprights-removegroup-self-all' => 'Fjarlægja sjálfan sig úr öllum hópum',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ekkert netfang til að senda á',
 'mailnologintext' => 'Þú verður að vera [[Special:UserLogin|innskráð(ur)]] auk þess að hafa gilt netfang í [[Special:Preferences|stillingunum]] þínum til að senda tölvupóst til annara notenda.',
 'emailuser' => 'Senda þessum notanda tölvupóst',
@@ -2245,7 +2245,7 @@ Póstfangið sem þú tilgreindir í [[Special:Preferences|stillingunum þínum]
 'mywatchlist' => 'Vaktlisti',
 'watchlistfor2' => 'Eftir $1 $2',
 'nowatchlist' => 'Vaktlistinn er tómur.',
-'watchlistanontext' => 'Vinsamlegast $1 til að skoða eða breyta vaktlistanum þínum.',
+'watchlistanontext' => 'Vinsamlegast $1ðu þig til að skoða eða breyta vaktlistanum þínum.',
 'watchnologin' => 'Óinnskráð(ur)',
 'watchnologintext' => 'Þú verður að vera [[Special:UserLogin|innskáð(ur)]] til að geta breytt vaktlistanum.',
 'addwatch' => 'Bæta á vaktlistann',
@@ -3548,7 +3548,7 @@ Ef skránni hefur verið breytt, kann að vera að einhverjar upplýsingar eigi
 'monthsall' => 'allir',
 'limitall' => 'alla',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Staðfesta netfang',
 'confirmemail_noemail' => 'Þú hefur ekki gefið upp gilt netfang í [[Special:Preferences|notandastillingum]] þínum.',
 'confirmemail_text' => '{{SITENAME}} krefst þess að þú staðfestir netfangið þitt áður en að þú getur notað eiginleika tengt því. Smelltu á hnappinn að neðan til að fá staðfestingarpóst sendan á netfangið. Pósturinn mun innihalda tengil með kóða í sér; opnaðu tengilinn í vafranum til að staðfesta að netfangið sé rétt.',
@@ -3564,7 +3564,7 @@ Athugaðu hvort ógild tákn séu í netfanginu þínu.
 
 Póstþjónninn skilaði: $1',
 'confirmemail_invalid' => 'Ógildur staðfestingarkóði. Hann gæti verið útrunninn.',
-'confirmemail_needlogin' => 'Þú verður að $1 til að staðfesta netfangið þitt.',
+'confirmemail_needlogin' => 'Þú verður að $1 þig til að staðfesta netfangið þitt.',
 'confirmemail_success' => 'Netfang þitt hefur verið staðfest. Þú getur nú [[Special:UserLogin|skráð þig inn]] og vafrað um wiki-kerfið.',
 'confirmemail_loggedin' => 'Netfang þitt hefur verið staðfest.',
 'confirmemail_error' => 'Eitthvað fór úrskeiðis við vistun staðfestingarinnar.',
index f9de737..b10d7d7 100644 (file)
@@ -784,7 +784,7 @@ Riprovare più tardi.',
 'loginlanguagelabel' => 'Lingua: $1',
 'suspicious-userlogout' => 'La tua richiesta di disconnessione è stata negata perché sembra inviata da un browser non funzionante o un proxy di caching.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Errore sconosciuto nella funzione PHP mail()',
 'user-mail-no-addy' => 'Hai cercato di inviare una e-mail senza un indirizzo.',
 'user-mail-no-body' => 'Tentato di inviare una e-mail con un testo vuoto o estremamente breve.',
@@ -1443,7 +1443,7 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'prefs-displaywatchlist' => 'Opzioni di visualizzazione',
 'prefs-diffs' => 'Differenze',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L'indirizzo e-mail sembra valido",
 'email-address-validity-invalid' => 'Inserisci un indirizzo e-mail valido',
 
@@ -2024,6 +2024,8 @@ Probabilmente vuoi modificare la descrizione presente nella [$2 pagina di descri
 Esse potrebbero dover puntare a una pagina più appropriata.<br />
 Vengono considerate pagine di disambiguazione tutte quelle che contengono i template elencati in [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Pagine con una pagina di proprietà',
+'pageswithprop-text' => 'Questa pagina elenca le pagine che utilizzano una particolare pagina di proprietà.',
 'pageswithprop-prop' => 'Nome proprietà:',
 
 'doubleredirects' => 'Redirect doppi',
@@ -2217,7 +2219,7 @@ Potrebbero esserci [[{{MediaWiki:Listgrouprights-helppage}}|ulteriori informazio
 'listgrouprights-addgroup-self-all' => 'Può aggiungersi a tutti i gruppi',
 'listgrouprights-removegroup-self-all' => 'Può rimuoversi da tutti i gruppi',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nessun indirizzo cui inviare il messaggio',
 'mailnologintext' => 'Per inviare messaggi e-mail ad altri utenti è necessario [[Special:UserLogin|accedere al sito]] e aver registrato un indirizzo valido nelle proprie [[Special:Preferences|preferenze]].',
 'emailuser' => "Scrivi all'utente",
@@ -3592,7 +3594,7 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o
 'monthsall' => 'tutti',
 'limitall' => 'tutti',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Conferma indirizzo email',
 'confirmemail_noemail' => 'Non è stato indicato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]].',
 'confirmemail_text' => "{{SITENAME}} richiede la verifica dell'indirizzo e-mail prima di poter usare le relative funzioni. Premere il pulsante qui sotto per inviare una richiesta di conferma al proprio indirizzo; nel messaggio è presente un collegamento che contiene un codice. Visitare il collegamento con il proprio browser per confermare che l'indirizzo e-mail è valido.",
@@ -4005,5 +4007,6 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'duration-millennia' => '$1 {{PLURAL:$1|millennio|millenni}}',
 
 # Unknown messages
+'pageswithprop-legend' => 'Pagine con una pagina di proprietà',
 'pageswithprop-submit' => 'Vai',
 );
index ff1dec3..9774ff6 100644 (file)
@@ -883,7 +883,7 @@ Cookieを有効にしていることを確認して、このページを再読
 'loginlanguagelabel' => '言語: $1',
 'suspicious-userlogout' => '壊れたブラウザーまたはキャッシュプロキシによって送信された可能性があるため、ログアウト要求は拒否されました。',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHPのmail()関数での不明なエラーです。',
 'user-mail-no-addy' => 'メールアドレスなしでメールを送信しようとしました。',
 'user-mail-no-body' => '本文が空、またはあまりにも短いメールは送信できません。',
@@ -1296,7 +1296,7 @@ $3が示した理由: ''$2''",
 追加の制限がかけられない限り、{{SITENAME}}の他の管理者は同じインターフェイスを使って非表示の内容の取得や復元ができます。",
 'revdelete-confirm' => 'この操作を行おうとしていること、その結果を理解していること、[[{{MediaWiki:Policy-url}}|方針]]に従っていること、を確認してください。',
 'revdelete-suppress-text' => "秘匿は、'''以下の場合に限って'''使用すべきです:
-* 名誉毀損の恐れのある記述
+* 名誉毀損のおそれがある記述
 * 非公開個人情報
 *: ''自宅の住所、電話番号、社会保障番号など''",
 'revdelete-legend' => '閲覧レベル制限を設定',
@@ -1593,7 +1593,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'prefs-displaywatchlist' => '表示の設定',
 'prefs-diffs' => '差分',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'メールアドレスは有効のようです',
 'email-address-validity-invalid' => '有効なメールアドレスを入力してください',
 
@@ -2404,10 +2404,10 @@ contenttype/subtypeの形式で入力してください (例: <code>image/jpeg</
 'listgrouprights-removegroup-all' => '全グループを除去可能',
 'listgrouprights-addgroup-self' => '自身のアカウントに{{PLURAL:$2|グループ}}を追加: $1',
 'listgrouprights-removegroup-self' => '自身のアカウントから{{PLURAL:$2|グループ}}を除去: $1',
-'listgrouprights-addgroup-self-all' => '自のアカウントに全グループを追加可能',
-'listgrouprights-removegroup-self-all' => '自のアカウントから全グループを除去可能',
+'listgrouprights-addgroup-self-all' => '自のアカウントに全グループを追加可能',
+'listgrouprights-removegroup-self-all' => '自のアカウントから全グループを除去可能',
 
-# E-mail user
+# Email user
 'mailnologin' => '送信アドレスがありません',
 'mailnologintext' => '他の利用者宛にメールを送信するためには、[[Special:UserLogin|ログイン]]し、[[Special:Preferences|個人設定]]で有効なメールアドレスを設定する必要があります。',
 'emailuser' => 'この利用者にメールを送信',
@@ -3895,7 +3895,7 @@ Variants for Chinese language
 'monthsall' => 'すべて',
 'limitall' => 'すべて',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'メールアドレスの確認',
 'confirmemail_noemail' => '[[Special:Preferences|個人設定]]で有効なメールアドレスが指定されていません。',
 'confirmemail_text' => '{{SITENAME}}では、メール機能を使用する前にメールアドレスの検証が必要です。
@@ -3972,7 +3972,7 @@ $5
 'scarytranscludetoolong' => '[URLが長すぎます]',
 
 # Delete conflict
-'deletedwhileediting' => "'''警告''': このページが、編集開始後に削除されました!",
+'deletedwhileediting' => "'''警告:''' このページが、編集開始後に削除されました!",
 'confirmrecreate' => "あなたが編集を開始した後、[[User:$1|$1]] ([[User talk:$1|トーク]]) がこのページを以下の理由で削除しました:
 : ''$2''
 このままこのページを本当に再作成していいか確認してください。",
@@ -4383,5 +4383,6 @@ MediaWikiは、有用であることを期待して配布されていますが
 'duration-millennia' => '$1{{PLURAL:$1|,000 年}}',
 
 # Unknown messages
+'pageswithprop-legend' => 'ページプロパティがあるページ',
 'pageswithprop-submit' => '実行',
 );
index 97bb77b..8956b61 100644 (file)
@@ -686,7 +686,7 @@ $1 საათში.',
 'loginlanguagelabel' => 'ენა: $1',
 'suspicious-userlogout' => 'თქვენი მოთხოვნა გასვლის შესახებ გაუქმებულია, რადგანაც იგი გავს ქეშირებადი პროქსის ან არაკორექტული ბრაუზერის მოთხოვნას.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'ამოუცნობი შეცდომა PHP-ის mail() ფუნქციაში',
 'user-mail-no-addy' => 'ცდილობდა ელ-ფოსტის გაგზავნას ელ-ფოსტის მისამართის გარეშე.',
 'user-mail-no-body' => 'ცდილობდა ცარიელი ან უაზროდ მოკლე შინაარსის ელექტრონული წერილის გაგზავნას.',
@@ -1098,11 +1098,11 @@ $3 -ემ ამგვარი ახსნა : ''$2''",
 'revdelete-hide-name' => 'დამალეთ მოქმედება და მისი ობიექტი',
 'revdelete-hide-comment' => 'რედაქტირების კომენტარის დამალვა',
 'revdelete-hide-user' => 'რედაქტორის მომხ. სახელის/IP-ს დამალვა',
-'revdelete-hide-restricted' => 'á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83\94á\83\97 á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\94á\83\91á\83\98 á\83\90á\83\93á\83\9bá\83\98á\83\9cá\83\97á\83\90á\83\92á\83\90á\83\9cá\83\90á\83ª',
+'revdelete-hide-restricted' => 'á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83\94á\83\97 á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\94á\83\91á\83\98 á\83\90á\83\93á\83\9bá\83\98á\83\9cá\83\98á\83¡á\83¢á\83 á\83\90á\83¢á\83\9dá\83 á\83\97á\83\90á\83\92á\83\90á\83\9c',
 'revdelete-radio-same' => '(არ შეცვალოთ)',
 'revdelete-radio-set' => 'დიახ',
 'revdelete-radio-unset' => 'არა',
-'revdelete-suppress' => 'á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83\94á\83\97 á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\94á\83\91á\83\98 á\83\90á\83\93á\83\9bá\83\98á\83\9cá\83\97á\83\90á\83\92á\83\90á\83\9cá\83\90á\83ª',
+'revdelete-suppress' => 'á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83\94á\83\97 á\83\9bá\83\9dá\83\9cá\83\90á\83ªá\83\94á\83\9bá\83\94á\83\91á\83\98 á\83\90á\83\93á\83\9bá\83\98á\83\9cá\83\98á\83¡á\83¢á\83 á\83\90á\83¢á\83\9dá\83 á\83\97á\83\90á\83\92á\83\90á\83\9c',
 'revdelete-unsuppress' => 'მოხსენით შეზღუდვა ვერსიების აღდგენისგან',
 'revdelete-log' => 'მიზეზი:',
 'revdelete-submit' => '{{PLURAL:$1|არჩეული ვერსიის|არჩეული ვერსიების}} განხორციელება',
@@ -1376,7 +1376,7 @@ $1",
 'prefs-displaywatchlist' => 'გამოსახვის კონფიგურაციები',
 'prefs-diffs' => 'სხვაობა ვერსიებს შორის',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ელ-ფოსტის მისამართი სწორად გამოიყურება',
 'email-address-validity-invalid' => 'მიუთითეთ სწორი ელ-ფოსტის მისამართი',
 
@@ -1571,7 +1571,7 @@ $1",
 'newsectionsummary' => '/* $1 */ ახალი სექცია',
 'rc-enhanced-expand' => 'დამატებითი ინფორმაციის ჩვენება (მოითხოვს ჯავასკრიპტს)',
 'rc-enhanced-hide' => 'დამატებითი ინფორმაციის დამალვა',
-'rc-old-title' => 'თავდაპირველად შექმნილი როგორც "$1"',
+'rc-old-title' => 'თავდაპირველად შექმნილი როგორც „$1“',
 
 # Recent changes linked
 'recentchangeslinked' => 'დაკავშირებული ცვლილებები',
@@ -2156,7 +2156,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'შეუძლია ყელა ჯგუფია ჩამატება ანგარიშს.',
 'listgrouprights-removegroup-self-all' => 'შეუძლია თავისი ანგარიშის ყველა ჯგუფის წაშლა.',
 
-# E-mail user
+# Email user
 'mailnologin' => 'გამგზავნი მისამართი არ არის მითითებული.',
 'mailnologintext' => 'თქვენ უნდა [[Special:UserLogin|წარადგენილი იყოთ სისტემისადმი]] და გქონდეთ წესიერი ელექტრონული ფოსტის მისამართი თქვენს [[Special:Preferences|კონფიგურაციაში]] იმისთვის, რომ გაუგზავნოთ წერილების სხვა მომხმარებლებს.',
 'emailuser' => 'გაუგზავნეთ იმეილი ამ მომხმარებელს',
@@ -3583,7 +3583,7 @@ $8',
 'monthsall' => 'ყველა',
 'limitall' => 'ყველა',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ელ. ფოსტის მისამართის დადასტურება',
 'confirmemail_noemail' => 'თქვენ არ გაქვს მითითებული მართებული ელმისამართი [[Special:Preferences|მომხმარებლის პარამეტრებში]].',
 'confirmemail_text' => '{{SITENAME}} ითხოვს თქვენი ელ. ფოსტის დადასტურებას, სანამ ელ.
index 077d775..e5b8892 100644 (file)
@@ -263,18 +263,18 @@ $magicWords = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'គូសបន្ទាត់ក្រោម​តំណភ្ជាប់៖',
-'tog-justify' => 'á\9e\8fá\9f\86រឹម​កថាខណ្ឌ',
-'tog-hideminor' => 'á\9e\9bá\9e¶á\9e\80á\9f\8bâ\80\8bá\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85â\80\8bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\94á\9f\86លាស់ប្ដូរថ្មីៗ',
-'tog-hidepatrolled' => 'លាក់​កំណែប្រែ​ដែល​បាន​ល្បាត នៅ​ក្នុង​បំលាស់ប្ដូរ​ថ្មីៗ',
-'tog-newpageshidepatrolled' => 'លាក់​ទំព័រ​ដែល​បាន​ល្បាត ពី​បញ្ជី​ទំព័រ​ថ្មី',
-'tog-extendwatchlist' => 'á\9e\96á\9e\84á\9f\92á\9e\9aá\9e¸á\9e\80â\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93â\80\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸â\80\8bá\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bâ\80\8bá\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9a á\9e\98á\9e·á\9e\93â\80\8bá\9e\98á\9f\82á\9e\93â\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\82â\80\8bá\9e\94á\9f\86លាស់ប្ដូរថ្មី​ៗ​នោះ​ទេ',
-'tog-usenewrc' => ' បំលាស់ប្ដូរជាក្រុមតាមទំព័រ ក្នុងបំលាស់ប្តូរថ្មីៗនិងបញ្ជីតាមដាន (តម្រូវឲ្យមាន JavaScript)',
+'tog-justify' => 'á\9e\8fá\9e\98á\9f\92រឹម​កថាខណ្ឌ',
+'tog-hideminor' => 'á\9e\9bá\9e¶á\9e\80á\9f\8bâ\80\8bá\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85â\80\8bá\9e\96á\9e¸á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\94á\9e\93á\9f\92លាស់ប្ដូរថ្មីៗ',
+'tog-hidepatrolled' => 'លាក់​កំណែប្រែ​ដែល​បាន​ល្បាតពីបញ្ជីបន្លាស់ប្ដូរ​ថ្មីៗ',
+'tog-newpageshidepatrolled' => 'លាក់​ទំព័រ​ដែល​បាន​ល្បាតពី​បញ្ជី​ទំព័រ​ថ្មី',
+'tog-extendwatchlist' => 'á\9e\96á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\8fâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¸á\9e\8fá\9e¶á\9e\98á\9e\8aá\9e¶á\9e\93â\80\8bá\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸â\80\8bá\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bâ\80\8bá\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e¢á\9e\9fá\9f\8b á\9e\98á\9e·á\9e\93â\80\8bá\9e\98á\9f\82á\9e\93â\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\82â\80\8bá\9e\94á\9e\93á\9f\92លាស់ប្ដូរថ្មី​ៗ​នោះ​ទេ',
+'tog-usenewrc' => 'បន្លាស់ប្ដូរជាក្រុមតាមទំព័រ ក្នុងបន្លាស់ប្តូរថ្មីៗនិងបញ្ជីតាមដាន (តម្រូវឲ្យមាន JavaScript)',
 'tog-numberheadings' => 'បង្ហាញលេខ​ចំណងជើងរង​ដោយស្វ័យប្រវត្តិ',
 'tog-showtoolbar' => 'បង្ហាញ​របារឧបករណ៍កែប្រែ (តម្រូវអោយមាន JavaScript)',
 'tog-editondblclick' => 'កែប្រែទំព័រដោយចុចពីរដង​ជាប់គ្នា (តម្រូវអោយមាន JavaScript)',
-'tog-editsection' => 'á\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8fá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82â\80\8bá\9e\95á\9f\92á\9e\93á\9f\82á\9e\80á\9e\8eá\9e¶á\9e\98á\9e½á\9e\99â\80\8bá\9e\8fá\9e¶á\9e\98â\80\8bá\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8b[កែប្រែ]',
-'tog-editsectiononrightclick' => 'អនុញ្ញាត​កែប្រែ​​ផ្នែកណាមួយ ដោយ​ចុចស្តាំកណ្តុរ​លើ​ចំណងជើង​របស់វា (តម្រូវអោយមាន JavaScript)',
-'tog-showtoc' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\8fá\9e¶á\9e\9aá\9e¶á\9e\84á\9e\98á\9e¶á\9e\8fá\9e·á\9e\80á\9e¶ (á\9e\85á\9f\86á\9e\96á\9f\84á\9f\87ទំព័រ​ដែលមាន​ចំណងជើងរង​លើសពី៣)',
+'tog-editsection' => 'á\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8fá\9e¢á\9f\84á\9e\99á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82â\80\8bá\9e\95á\9f\92á\9e\93á\9f\82á\9e\80á\9e\8eá\9e¶á\9e\98á\9e½á\9e\99â\80\8bá\9e\8fá\9e¶á\9e\98â\80\8bá\9e\9aá\9e\99á\9f\88á\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8b [កែប្រែ]',
+'tog-editsectiononrightclick' => 'á\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8fâ\80\8bá\9e¢á\9f\84á\9e\99á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82â\80\8bâ\80\8bá\9e\95á\9f\92á\9e\93á\9f\82á\9e\80á\9e\8eá\9e¶á\9e\98á\9e½á\9e\99 á\9e\8aá\9f\84á\9e\99â\80\8bá\9e\85á\9e»á\9e\85á\9e\9fá\9f\92á\9e\8fá\9e¶á\9f\86á\9e\80á\9e\8eá\9f\92á\9e\8fá\9e»á\9e\9aâ\80\8bá\9e\9bá\9e¾â\80\8bá\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84â\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9cá\9e¶ (á\9e\8fá\9e\98á\9f\92á\9e\9aá\9e¼á\9e\9cá\9e¢á\9f\84á\9e\99á\9e\98á\9e¶á\9e\93 JavaScript)',
+'tog-showtoc' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\8fá\9e¶á\9e\9aá\9e¶á\9e\84á\9e\98á\9e¶á\9e\8fá\9e·á\9e\80á\9e¶ (á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bទំព័រ​ដែលមាន​ចំណងជើងរង​លើសពី៣)',
 'tog-rememberpassword' => 'ចងចាំ​ការកត់ឈ្មោះចូលរបស់ខ្ញុំ​លើកុំព្យូទ័រនេះ (សំរាប់រយៈពេលយ៉ាងយូរ$1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})',
 'tog-watchcreations' => 'បន្ថែម​ទំព័រ​ទាំងឡាយដែលខ្ញុំបង្កើត​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ',
 'tog-watchdefault' => 'បន្ថែម​ទំព័រទាំងឡាយ​ដែលខ្ញុំកែប្រែ​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ',
@@ -282,12 +282,12 @@ $messages = array(
 'tog-watchdeletion' => 'បន្ថែម​ទំព័រទាំងឡាយ​ដែលខ្ញុំលុបចោល​ទៅ​បញ្ជីតាមដាន​របស់ខ្ញុំ',
 'tog-minordefault' => "ចំណាំ​គ្រប់កំណែប្រែ​របស់ខ្ញុំ​ថាជា​'កំណែប្រែតិចតួច'",
 'tog-previewontop' => 'បង្ហាញ​ការមើលមុន​ពីលើ​ប្រអប់​កែប្រែ',
-'tog-previewonfirst' => 'បង្ហាញ​ការមើលមុន​ចំពោះ​កំណែប្រែ​ដំបូង',
+'tog-previewonfirst' => 'បង្ហាញ​ការមើលមុនសម្រាប់កំណែប្រែ​ដំបូងគេ',
 'tog-nocache' => 'មិនប្រើសតិភ្ជាប់​នៃ​ទំព័រ',
-'tog-enotifwatchlistpages' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\80á\9e¶á\9e\9bá\9e\94á\9e¾â\80\8bá\9e\98á\9e¶á\9e\93á\9e\94á\9f\86លាស់ប្ដូរនៃទំព័រ​ណាមួយដែលមានក្នុងបញ្ជីតាមដានរបស់ខ្ញុំ',
-'tog-enotifusertalkpages' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\80á\9e¶á\9e\9bá\9e\94á\9e¾â\80\8bá\9e\98á\9e¶á\9e\93á\9e\94á\9f\86លាស់ប្ដូរ​នៅ​ក្នុងទំព័រពិភាក្សា​របស់ខ្ញុំ',
-'tog-enotifminoredits' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\96á\9f\81á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\94á\9f\86លាស់ប្ដូរតិចតួច​លើទំព័រឬឯកសារផងដែរ​',
-'tog-enotifrevealaddr' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8bâ\80\8bá\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\80á\9f\92á\9e\9aá\9e¾á\9e\93á\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80â\80\8bá\9e\93á\9e¶á\9e\93á\9e',
+'tog-enotifwatchlistpages' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\80á\9e¶á\9e\9bá\9e\94á\9e¾â\80\8bá\9e\98á\9e¶á\9e\93á\9e\94á\9e\93á\9f\92លាស់ប្ដូរនៃទំព័រ​ណាមួយដែលមានក្នុងបញ្ជីតាមដានរបស់ខ្ញុំ',
+'tog-enotifusertalkpages' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\80á\9e¶á\9e\9bá\9e\94á\9e¾â\80\8bá\9e\98á\9e¶á\9e\93á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ​នៅ​ក្នុងទំព័រពិភាក្សា​របស់ខ្ញុំ',
+'tog-enotifminoredits' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\96á\9f\81á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\94á\9e\93á\9f\92លាស់ប្ដូរតិចតួច​លើទំព័រឬឯកសារផងដែរ​',
+'tog-enotifrevealaddr' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86â\80\8bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8bâ\80\8bá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\80á\9f\92á\9e\9aá\9e¾á\9e\93á\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80â\80\8b',
 'tog-shownumberswatching' => 'បង្ហាញ​ចំនួនអ្នកប្រើប្រាស់​ដែលតាមដាន​ទំព័រនេះ',
 'tog-oldsig' => 'ហត្ថលេខាមានហើយ៖',
 'tog-fancysig' => 'ចុះហត្ថលេខា​ជា​អត្ថបទវិគី​ (ដោយ​គ្មានតំណភ្ជាប់​ស្វ័យប្រវត្តិ)',
@@ -302,8 +302,8 @@ $messages = array(
 'tog-watchlisthideliu' => 'លាក់កំណែប្រែរបស់អ្នកប្រើប្រាស់ដែលបានកត់ឈ្មោះចូលពីបញ្ជីតាមដាន',
 'tog-watchlisthideanons' => 'លាក់កំណែប្រែរបស់អ្នកប្រើប្រាស់អនាមិកពីបញ្ជីតាមដាន',
 'tog-watchlisthidepatrolled' => 'លាក់​កំណែប្រែ​ដែល​បាន​ល្បាតពី​បញ្ជីតាមដាន',
-'tog-ccmeonemails' => 'ផ្ញើច្បាប់ចម្លង​អ៊ីមែលដែលខ្ញុំផ្ញើទៅកាន់អ្នកប្រើប្រាស់ផ្សេងទៀតមកខ្ញុំផងដែរ',
-'tog-diffonly' => 'á\9e\80á\9e»á\9f\86á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\81á\9f\92á\9e\9bá\9e¹á\9e\98á\9e\9fá\9e¶á\9e\9aá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\85á\9e\96á\9e¸á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\8fá\9e¶á\9e\9aá\9e¶á\9e\84á\9e\94á\9f\92á\9e\9aá\9f\80á\9e\94á\9e\92á\9f\80á\9e\94á\9e\85á\9f\86á\9e\93ុចខុសគ្នា',
+'tog-ccmeonemails' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e\85á\9f\92á\9e\94á\9e¶á\9e\94á\9f\8bá\9e\85á\9e\98á\9f\92á\9e\9bá\9e\84â\80\8bá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\8aá\9f\82á\9e\9bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85á\9e\80á\9e¶á\9e\93á\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\91á\9f\80á\9e\8fá\9e\98á\9e\80á\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\81á\9f\92á\9e\9bá\9e½á\9e\93á\9e¯á\9e\84á\9e\95á\9e\84á\9e\8aá\9f\82á\9e\9a',
+'tog-diffonly' => 'á\9e\80á\9e»á\9f\86á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\81á\9f\92á\9e\9bá\9e¹á\9e\98á\9e\9fá\9e¶á\9e\9aá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\85á\9e\96á\9e¸á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\8fá\9e¶á\9e\9aá\9e¶á\9e\84á\9e\94á\9f\92á\9e\9aá\9f\80á\9e\94á\9e\92á\9f\80á\9e\94á\9e\85á\9f\86á\9e\8eុចខុសគ្នា',
 'tog-showhiddencats' => 'បង្ហាញចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានលាក់',
 'tog-norollbackdiff' => 'បំភ្លេច​ភាព​ខុស​គ្នា​បន្ទាប់​ពី​អនុវត្តការ​ស្ដារវិញ',
 
@@ -312,7 +312,7 @@ $messages = array(
 'underline-default' => 'តាមលំនាំដើមនៃ​កម្មវិធី​រុករក​',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'កែសម្រួល​រចនាបទ​ពុម្ព​អក្សរ​សម្រាប់​តំបន់​',
+'editfont-style' => '​រចនាបថ​ពុម្ព​អក្សរ​ក្នុងប្រអប់កែប្រែ​៖',
 'editfont-default' => 'លំនាំដើមនៃ​កម្មវិធី​រុករក​',
 'editfont-monospace' => 'ពុម្ព​អក្សរ​ដែល​ដក​ឃ្លា​តែមួយ​',
 'editfont-sansserif' => 'ពុម្ពអក្សរ​​គ្មានកន្ទុយ (Sans-serif font)',
@@ -385,9 +385,9 @@ $messages = array(
 'category-file-count' => '{{PLURAL:$2|ចំណាត់ថ្នាក់ក្រុមនេះមានឯកសារមួយដូចខាងក្រោម។|{{PLURAL:$1|ឯកសារមួយ|ឯកសារចំនួន$1}}ក្នុងចំណោមឯកសារសរុប $2 ដូចខាងក្រោមស្ថិតនៅក្នុងចំណាត់ថ្នាក់ក្រុមនេះ។}}',
 'category-file-count-limited' => '{{PLURAL:$1|ឯកសារមួយ|ឯកសារចំនួន$1}}ដូចខាងក្រោមស្ថិតនៅក្នុងចំណាត់ថ្នាក់ក្រុមនេះ។',
 'listingcontinuesabbrev' => 'បន្ត',
-'index-category' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\92á\9f\92á\9e\9cá\9e¾លិបិក្រម',
-'noindex-category' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\92á\9f\92á\9e\9cá\9e¾លិបិក្រម',
-'broken-file-category' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\81á\9e¼á\9e\85',
+'index-category' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93លិបិក្រម',
+'noindex-category' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\82á\9f\92á\9e\98á\9e¶á\9e\93លិបិក្រម',
+'broken-file-category' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\8aá\9e¶á\9e\85á\9f\8bá\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8b',
 
 'about' => 'អំពី',
 'article' => 'មាតិកាអត្ថបទ',
@@ -525,7 +525,7 @@ $1',
 'retrievedfrom' => 'បានពី "$1"',
 'youhavenewmessages' => 'អ្នកមាន $1 ($2)។',
 'newmessageslink' => 'សារថ្មីៗ',
-'newmessagesdifflink' => 'á\9e\94á\9f\86លាស់ប្ដូរចុងក្រោយ',
+'newmessagesdifflink' => 'á\9e\94á\9e\93á\9f\92លាស់ប្ដូរចុងក្រោយ',
 'youhavenewmessagesfromusers' => 'អ្នកមាន $1 ទទួលបានពី {{PLURAL:$3|អ្នកប្រើប្រាស់ម្នាក់|អុ្នកប្រើប្រាស់ចំនួន $3 នាក់}} ($2)។',
 'youhavenewmessagesmanyusers' => 'អ្នកមាន $1 ទទួលបានពីអ្នកប្រើប្រាស់ជាច្រើន ($2)។',
 'newmessageslinkplural' => '{{PLURAL:$1|សារថ្មីមួយ|សារថ្មី}}',
@@ -553,8 +553,8 @@ $1',
 'page-rss-feed' => 'បម្រែបម្រួល RSS Feed នៃ "$1"',
 'page-atom-feed' => 'បម្រែបម្រួល Atom Feed នៃ "$1"',
 'red-link-title' => '$1 (ទំព័រនេះមិនទាន់​មាននៅឡើយទេ)',
-'sort-descending' => 'á\9e\8fá\9f\86រៀបតាមលំដាប់ចុះ',
-'sort-ascending' => 'á\9e\8fá\9f\86រៀបតាមលំដាប់ឡើង',
+'sort-descending' => 'á\9e\8fá\9e\98á\9f\92រៀបតាមលំដាប់ចុះ',
+'sort-ascending' => 'á\9e\8fá\9e\98á\9f\92រៀបតាមលំដាប់ឡើង',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'អត្ថបទ',
@@ -569,11 +569,11 @@ $1',
 'nstab-category' => 'ចំណាត់ថ្នាក់ក្រុម',
 
 # Main script and global functions
-'nosuchaction' => 'á\9e\98á\9e·á\9e\93មានសកម្មភាពបែបនេះទេ',
+'nosuchaction' => 'á\9e\82á\9f\92មានសកម្មភាពបែបនេះទេ',
 'nosuchactiontext' => 'សកម្មភាព​បានបង្ហាញដោយ URL មិន​ត្រឹមត្រូវ​។
 អ្នក​ប្រហែលជាបាន​វាយ URL ខុស បើ​មិន​ដូច្នេះ​ទេ​មាន​តែ​តំណភ្ជាប់​មិន​ត្រឹមត្រូវ​។
 នេះ​ក៏​អាច​បញ្ជាក់​ប្រាប់​ពី​កំហុស​នៅ​ក្នុង​ផ្នែកទន់​ប្រើដោយ {{SITENAME}} ។',
-'nosuchspecialpage' => 'á\9e\98á\9e·á\9e\93មានទំព័រពិសេសបែបនេះទេ',
+'nosuchspecialpage' => 'á\9e\82á\9f\92មានទំព័រពិសេសបែបនេះទេ',
 'nospecialpagetext' => '<strong>អ្នកបានស្នើរក​ទំព័រពិសេសមិនទាន់មាន។</strong>
 
 អ្នកអាចមើលបញ្ជី​នៃ​ទំព័រពិសេស​ៗនៅ [[Special:SpecialPages|{{int:specialpages}}]]។',
@@ -581,7 +581,7 @@ $1',
 # General errors
 'error' => 'មានបញ្ហា',
 'databaseerror' => 'មូលដ្ឋានទិន្នន័យមានបញ្ហា',
-'laggedslavemode' => "'''á\9e\94á\9f\92á\9e\9aá\9e\99á\9f\90á\9e\8fá\9f\92á\9e\93á\9f\96''' á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87â\80\8bá\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\91á\9e»á\9e\80â\80\8bá\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\90á\9f\92á\9e\98á\9e¸á\9f\97ទេ។",
+'laggedslavemode' => "'''á\9e\94á\9f\92á\9e\9aá\9e\99á\9f\90á\9e\8fá\9f\92á\9e\93á\9f\96''' á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\93á\9f\81á\9f\87â\80\8bá\9e\94á\9f\92á\9e\9aá\9e á\9f\82á\9e\9bá\9e\87á\9e¶á\9e\82á\9f\92á\9e\98á\9e¶á\9e\93á\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\9fá\9e\98á\9f\90á\9e\99ទេ។",
 'readonly' => 'មូលដ្ឋានទិន្នន័យត្រូវបានចាក់សោ',
 'enterlockreason' => 'សូមផ្ដល់ហេតុផលសម្រាប់ការជាប់សោ ព្រមទាំងកាលបរិច្ឆេទដោះសោវិញ',
 'readonlytext' => 'ពេលនេះ​មូលដ្ឋានទិន្នន័យ​កំពុងជាប់សោ ដើម្បីកុំឱ្យមាន​ការបញ្ចូល​ទិន្នន័យ​ថ្មីៗ​ឬ​ការកែប្រែ​ផ្សេងៗ។ នេះ​ប្រហែលគ្រាន់តែជាការ​ត្រួតពិនិត្យនិងថែទាំ​មូលដ្ឋានទិន្នន័យប្រចាំថ្ងៃ ដែលជាធម្មតាវានឹងវិលមកសភាពដើមវិញ​ក្នុងពេលឆាប់ៗ។
@@ -611,9 +611,9 @@ $1',
 'cannotdelete' => 'មិនអាច​លុបចោលទំព័រឬឯកសារដែលមានឈ្មោះ "$1"បានទេ។
 
 វាប្រហែលជាត្រូវបាន​នរណាម្នាក់ផ្សេងទៀតលុបចោលហើយ។',
-'cannotdelete-title' => 'មិនអាចលុបទំព័រ "$1"',
+'cannotdelete-title' => 'មិនអាចលុបទំព័រ "$1"​បានទេ',
 'badtitle' => 'ចំណងជើង​មិនល្អ',
-'badtitletext' => 'ចំណងជើងទំព័រដែលបានស្នើ គ្មានសុពលភាព, ទទេ, ឬ ចំណងជើងតំណភ្ជាប់អន្តរភាសាឬអន្តរវិគី មិនត្រឹមត្រូវ ។ ប្រហែលជាមានតួអក្សរមួយឬច្រើន ដែលជាតួអក្សរហាមប្រើ​ក្នុង​ចំណងជើង។',
+'badtitletext' => 'ចំណងជើងទំព័រដែលបានស្នើមិនអាចប្រើបាន គ្មានសរសេរអ្វី ឬមានចំណងជើងតំណភ្ជាប់អន្តរភាសាឬអន្តរវិគីមិនត្រឹមត្រូវ ។ វាក៏ប្រហែលជាមានតួអក្សរមួយឬច្រើន ដែលជាតួអក្សរហាមប្រើ​ក្នុង​ចំណងជើងផងដែរ។',
 'perfcached' => 'ទិន្នន័យទាំងនេះត្រូវបានដាក់ទៅសតិភ្ជាប់និងប្រហែលជាមិនទាន់សម័យ ។ ជាអតិបរមា {{PLURAL:$1|លទ្ធផលមួយ|លទ្ធផលចំនួន $1}} អាចប្រើបាននៅក្នុងសតិភ្ជាប់។',
 'perfcachedts' => 'ទិន្នន័យខាងក្រោមនេះត្រូវបានដាក់ក្នុងសតិភ្ជាប់ និង បានត្រូវបន្ទាន់សម័យចុងក្រោយនៅ $1។ ជាអតិបរមា {{PLURAL:$4|លទ្ធផលមួយ|លទ្ធផលចំនួន $4}} អាចប្រើបាននៅក្នុងសតិភ្ជាប់។',
 'querypage-no-updates' => 'ការបន្ទាន់សម័យសម្រាប់ទំព័រនេះគឺមិនអាចធ្វើទៅរួចទេនាពេលឥឡូវទេ។
@@ -630,7 +630,7 @@ $1',
 សូមព្យាយាមម្ដងទៀតក្នុងរយៈពេលប៉ុន្មាននាទីទៀត។',
 'protectedpagetext' => 'ទំព័រនេះបានត្រូវការពារមិនឱ្យកែប្រែ​ឬធ្វើសកម្មភាពផ្សេងទៀតលើវា។',
 'viewsourcetext' => 'អ្នកអាចមើលនិងចម្លងកូដរបស់ទំព័រនេះ៖',
-'viewyourtext' => "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\98á\9e¾á\9e\9bá\9e\93á\9e·á\9e\84á\9e\85á\9e\98á\9f\92á\9e\9bá\9e\84á\9e\80á\9e¼á\9e\8aá\9e\9aá\9e\94á\9e\9fá\9f\8b'''á\9e\80á\9e¶á\9e\9aá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80'''á\9e\91á\9f\85កាន់ទំព័រនេះ៖",
+'viewyourtext' => "á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\98á\9e¾á\9e\9bá\9e\93á\9e·á\9e\84á\9e\85á\9e\98á\9f\92á\9e\9bá\9e\84á\9e\80á\9e¼á\9e\8aá\9e\9aá\9e\94á\9e\9fá\9f\8b'''á\9e\80á\9e¶á\9e\9aá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80'''á\9e\98á\9e\80កាន់ទំព័រនេះ៖",
 'protectedinterface' => 'ទំព័រនេះផ្ដល់នូវអត្ថបទអន្តរមុខសម្រាប់សូហ្វវែរនៅក្នុងវិគីនេះ និងត្រូវបានចាក់សោដើម្បីចៀសវាងការបំពាន។
 ដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែសំរាប់វិគីទាំងអស់ សូមប្រើប្រាស់ [//translatewiki.net/ translatewiki.net] ដែលជាគំរោងបកប្រែរបស់MediaWiki។',
 'editinginterface' => "'''ប្រយ័ត្ន៖''' អ្នកកំពុងតែកែប្រែទំព័រដែលបានប្រើប្រាស់​ដើម្បីផ្ដល់ជូនអន្តរមុខសម្រាប់សូហ្វវែរ។ បំលាស់ប្ដូរចំពោះទំព័រនេះ​នឹងប៉ះពាល់ដល់ទ្រង់ទ្រាយរបស់ទំព័រអន្តរមុខសំរាប់អ្នកប្រើប្រាស់​ជាច្រើន ដែលប្រើប្រាស់វិគីនេះ។ ដើម្បីបន្ថែមឬផ្លាស់ប្ដូរការបកប្រែ​សំរាប់វិគីទាំងអស់ សូបប្រើប្រាស់  [//translatewiki.net/wiki/Main_Page?setlang=km translatewiki.net] គម្រោង​បកប្រែរបស់មេឌាវិគី ។",
@@ -646,8 +646,10 @@ $2',
 'filereadonlyerror' => 'មិនអាចកែប្រែឯកសារ "$1" បានទេពីព្រោះថតឯកសារ "$2" ស្ថិតក្នុងម៉ូដសំរាប់តែអានប៉ុណ្ណោះ។
 
 អភិបាលដែលបានចាក់សោរវាបានផ្ដល់សេចក្ដីពន្យល់បែបនេះ៖ "$3"។',
+'invalidtitle-knownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះ "$2" និងអត្ថបទ "$3"',
+'invalidtitle-unknownnamespace' => 'ចំណងជើងមិនត្រឹមត្រូវដែលមានលំហឈ្មោះមិនស្គាល់លេខ $1 និងអត្ថបទ "$2"',
 'exception-nologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
-'exception-nologin-text' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\93á\9f\81á\9f\87á\9e\8fá\9f\86រូវអោយអ្នកធ្វើការកត់ឈ្មោះចូលទៅក្នុងវិគីនេះ។',
+'exception-nologin-text' => 'á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e¬á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\93á\9f\81á\9f\87á\9e\8fá\9e\98á\9f\92រូវអោយអ្នកធ្វើការកត់ឈ្មោះចូលទៅក្នុងវិគីនេះ។',
 
 # Virus scanner
 'virus-badscanner' => "ការ​កំណត់​រចនា​សម្ព័ន្ធ​មិន​ល្អ​៖ កម្មវិធី​ស្កេន​មេរោគមិន​ស្គាល់​៖ ''$1''",
@@ -664,17 +666,17 @@ $2',
 'welcomecreation-msg' => 'គណនីរបស់អ្នកត្រូវបានបង្កើតហើយ។
 កុំភ្លេចផ្លាស់ប្ដូរ[[Special:Preferences|ចំណង់ចំណូលចិត្ត{{SITENAME}}]]របស់អ្នក។',
 'yourname' => 'អត្តនាម៖',
-'yourpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់៖',
-'yourpasswordagain' => 'á\9e\9cá\9e¶á\9e\99á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ម្តងទៀត៖',
+'yourpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់៖',
+'yourpasswordagain' => 'á\9e\9cá\9e¶á\9e\99á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ម្តងទៀត៖',
 'remembermypassword' => 'ចងចាំកំណត់ឈ្មោះចូលរបស់ខ្ញុំក្នុងកុំព្យូទ័រនេះ (សំរាប់រយៈពេលយូរបំផុត $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})',
 'securelogin-stick-https' => 'នៅភ្ជាប់ទៅ HTTPS ដដែលបន្ទាប់ពីចុះឈ្មោះចូលហើយក៏ដោយ',
 'yourdomainname' => 'ដូម៉ែនរបស់អ្នក៖',
-'password-change-forbidden' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ក្នុងវិគីនេះទេ។',
+'password-change-forbidden' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ក្នុងវិគីនេះទេ។',
 'externaldberror' => 'មាន​​បញ្ហាក្នុងការ​បញ្ជាក់​ផ្ទៀង​ផ្ទាត់​​មូលដ្ឋាន​ទិន្នន័យ​ ឬ​អ្នក​មិន​ត្រូវ​បាន​អនុញ្ញាត​ឲ្យ​បន្ទាន់​សម័យ​គណនី​ខាង​ក្រៅ​របស់​អ្នក​។​
 ​',
 'login' => 'កត់ឈ្មោះចូល',
 'nav-login-createaccount' => 'កត់ឈ្មោះចូលឬបង្កើតគណនី',
-'loginprompt' => 'អ្នក​ត្រូវតែ​មាន​ខូគី ដើម្បី​អាច​កត់ឈ្មោះចូល​{{SITENAME}}។',
+'loginprompt' => 'á\9e¢á\9f\92á\9e\93á\9e\80â\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82â\80\8bá\9e\98á\9e¶á\9e\93â\80\8bá\9e\81á\9e¼á\9e\82á\9e¸ á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸â\80\8bá\9e¢á\9e¶á\9e\85â\80\8bá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bâ\80\8b{{SITENAME}}á\9e\94á\9e¶á\9e\93á\9f\94',
 'userlogin' => 'កត់ឈ្មោះចូលឬបង្កើតគណនី',
 'userloginnocreate' => 'កត់ឈ្មោះចូល',
 'logout' => 'កត់ឈ្មោះចេញ',
@@ -685,10 +687,10 @@ $2',
 'createaccount' => 'បង្កើតគណនី',
 'gotaccount' => "បើលោកអ្នកមានគណនីសម្រាប់ប្រើហើយ  សូម'''$1'''។",
 'gotaccountlink' => 'កត់ឈ្មោះចូល',
-'userlogin-resetlink' => 'á\9e\8fá\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93á\9e\9bá\9f\86á\9e¢á\9e·á\9e\8fá\9e\9fá\9f\86រាប់កត់ឈ្មោះចូលហើយ?',
+'userlogin-resetlink' => 'á\9e\8fá\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93á\9e\9bá\9e\98á\9f\92á\9e¢á\9e·á\9e\8fá\9e\9fá\9e\98á\9f\92រាប់កត់ឈ្មោះចូលហើយ?',
 'createaccountmail' => 'ប្រើប្រាស់ពាក្យសំងាត់ព្រៀងបណ្ដោះអាសនុ្ន រួចផ្ញើវាទៅកាន់អាសយដ្ឋានអ៊ីមែលខាងក្រោម',
 'createaccountreason' => 'មូលហេតុ៖',
-'badretype' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9e¶á\9e\93បញ្ចូលនោះ គឺមិនស៊ីគ្នាទេ។',
+'badretype' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9e¶á\9e\93á\9e\9cá\9e¶á\9e\99បញ្ចូលនោះ គឺមិនស៊ីគ្នាទេ។',
 'userexists' => 'អត្តនាមដែលអ្នកបានវាយបញ្ចូលមានគេប្រើហើយ។
 សូមជ្រើសរើសអត្តនាមផ្សេងពីនេះ។',
 'loginerror' => 'កំហុសនៃការកត់ឈ្មោះចូល',
@@ -716,34 +718,34 @@ $2',
 សូម​ពិនិត្យ​​អក្ខរាវិរុទ្ធ​របស់អ្នក ។',
 'nouserspecified' => 'អ្នកត្រូវតែ​ផ្ដល់អត្តនាម។',
 'login-userblocked' => 'អ្នកប្រើប្រាស់នេះស្ថិតក្រោមការហាមឃាត់។ មិនអនុញ្ញាតអោយកត់ឈ្មោះចូលទេ។',
-'wrongpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93បញ្ចូល​មិនត្រឹមត្រូវទេ។
+'wrongpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\9cá\9e¶á\9e\99បញ្ចូល​មិនត្រឹមត្រូវទេ។
 
 សូមព្យាយាម​ម្តងទៀត។',
-'wrongpasswordempty' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93បញ្ចូលទេ។
+'wrongpasswordempty' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9cá\9e¶á\9e\99បញ្ចូលទេ។
 
 សូមព្យាយាម​ម្តងទៀត។',
-'passwordtooshort' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ត្រូវ​មាន​យ៉ាងតិចណាស់​ {{PLURAL:$1|១ តួអក្សរ|$1តួអក្សរ}}។',
-'password-name-match' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82á\9e\81á\9e»á\9e\9fá\9e\82á\9f\92á\9e\93á\9e¶á\9e\96á\9e¸á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87របស់អ្នក។',
-'password-login-forbidden' => 'á\9e á\9e¶á\9e\98á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\98á\9e\98á\9e·á\9e\93á\9e¢á\9f\84á\9e\99á\9e\94á\9f\92á\9e\9aá\9e¾á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98á\9e\93á\9e·á\9e\84á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់នេះ។',
-'mailmypassword' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មី',
-'passwordremindertitle' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់បណ្តោះអាសន្នថ្មីសម្រាប់{{SITENAME}}',
-'passwordremindertext' => 'á\9e\98á\9e¶á\9e\93á\9e¢á\9f\92á\9e\93á\9e\80á\9e\8eá\9e¶á\9e\98á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8b (á\9e\94á\9f\92á\9e\9aá\9e á\9f\82á\9e\9bá\9e\87á\9e¶á\9e¢á\9f\92á\9e\93á\9e\80, á\9e\96á\9e¸á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93 IP $1) á\9e\94á\9e¶á\9e\93á\9e\9fá\9f\92á\9e\93á\9e¾á\9e\9fá\9e»á\9f\86á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មីមួយពី {{SITENAME}} ($4)។
\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9f\92á\9e\93á\9e\98á\9e½á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b "$2" á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9f\85á\9e\87á\9e¶ "$3"á\9f\94 á\9e\94á\9e¾á\9e\9fá\9e·á\9e\93á\9e\87á\9e¶á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\85á\9f\81á\9e\8fá\9e\93á\9e¶á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80 á\9e\9fá\9e¼á\9e\98á\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bâ\80\8bá\9e á\9e¾á\9e\99á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មី។
\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់​បណ្ដោះអាសន្ន​របស់​អ្នក នឹង​ត្រូវ​ផុតកំណត់​ក្នុង​រយៈពេល {{PLURAL:$5|មួយ​ថ្ងៃ|$5ថ្ងៃ}} ។
-
\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e\9aá\9e\8eá\9e¸á\9e\98á\9e¶á\9e\93á\9e¢á\9f\92á\9e\93á\9e\80á\9e\8eá\9e¶á\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\9fá\9f\92á\9e\93á\9e¾á\9e\9fá\9e»á\9f\86á\9e\93á\9f\81á\9f\87 á\9e¬ á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\80á\9e\83á\9e¾á\9e\89á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\85á\9e¶á\9e\9fá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\9cá\9e·á\9e\89 á\9e á\9e¾á\9e\99á\9e\98á\9e·á\9e\93á\9e\85á\9e\84á\9f\8bá\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\91á\9f\81á\9e\93á\9f\84á\9f\87 á\9e\9fá\9e¼á\9e\98á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\94á\9f\86á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9e¸á\9e\9fá\9e¶á\9e\9aá\9e\93á\9f\81á\9f\87 á\9e á\9e¾á\9e\99á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ចាស់របស់អ្នកបន្តទៀត។',
+'passwordtooshort' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ត្រូវ​មាន​យ៉ាងតិចណាស់​ {{PLURAL:$1|១ តួអក្សរ|$1តួអក្សរ}}។',
+'password-name-match' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82á\9e\81á\9e»á\9e\9fá\9e\82á\9f\92á\9e\93á\9e¶á\9e\96á\9e¸á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98របស់អ្នក។',
+'password-login-forbidden' => 'á\9e á\9e¶á\9e\98á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\98á\9e\98á\9e·á\9e\93á\9e¢á\9f\84á\9e\99á\9e\94á\9f\92á\9e\9aá\9e¾á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98á\9e\93á\9e·á\9e\84á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់នេះ។',
+'mailmypassword' => 'á\9e\95á\9f\92á\9e\89á\9e¾á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មី',
+'passwordremindertitle' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់បណ្តោះអាសន្នថ្មីសម្រាប់{{SITENAME}}',
+'passwordremindertext' => 'á\9e\98á\9e¶á\9e\93á\9e¢á\9f\92á\9e\93á\9e\80á\9e\8eá\9e¶á\9e\98á\9f\92á\9e\93á\9e¶á\9e\80á\9f\8b (á\9e\94á\9f\92á\9e\9aá\9e á\9f\82á\9e\9bá\9e\87á\9e¶á\9e¢á\9f\92á\9e\93á\9e\80, á\9e\96á\9e¸á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93 IP $1) á\9e\94á\9e¶á\9e\93á\9e\9fá\9f\92á\9e\93á\9e¾á\9e\9fá\9e»á\9f\86á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មីមួយពី {{SITENAME}} ($4)។
\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9f\92á\9e\93á\9e\98á\9e½á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b "$2" á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9f\85á\9e\87á\9e¶ "$3"á\9f\94 á\9e\94á\9e¾á\9e\9fá\9e·á\9e\93á\9e\87á\9e¶á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\85á\9f\81á\9e\8fá\9e\93á\9e¶á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80 á\9e\9fá\9e¼á\9e\98á\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bâ\80\8bá\9e á\9e¾á\9e\99á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មី។
\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់​បណ្ដោះអាសន្ន​របស់​អ្នក នឹង​ត្រូវ​ផុតកំណត់​ក្នុង​រយៈពេល {{PLURAL:$5|មួយ​ថ្ងៃ|$5ថ្ងៃ}} ។
+
\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e\9aá\9e\8eá\9e¸á\9e\98á\9e¶á\9e\93á\9e¢á\9f\92á\9e\93á\9e\80á\9e\8eá\9e¶á\9e\95á\9f\92á\9e\9fá\9f\81á\9e\84á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\9fá\9f\92á\9e\93á\9e¾á\9e\9fá\9e»á\9f\86á\9e\93á\9f\81á\9f\87 á\9e¬ á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\80á\9e\83á\9e¾á\9e\89á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\85á\9e¶á\9e\9fá\9f\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\9cá\9e·á\9e\89 á\9e á\9e¾á\9e\99á\9e\98á\9e·á\9e\93á\9e\85á\9e\84á\9f\8bá\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\91á\9f\81á\9e\93á\9f\84á\9f\87 á\9e\9fá\9e¼á\9e\98á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\94á\9f\86á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e\96á\9e¸á\9e\9fá\9e¶á\9e\9aá\9e\93á\9f\81á\9f\87 á\9e á\9e¾á\9e\99á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ចាស់របស់អ្នកបន្តទៀត។',
 'noemail' => 'គ្មានអាសយដ្ឋានអ៊ីមែលណាមួយត្រូវបានកត់ត្រាទុកសម្រាប់អ្នកប្រើឈ្មោះ "$1" ទេ។',
 'noemailcreate' => 'អ្នកត្រូវតែផ្ដល់អាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវមួយ',
-'passwordsent' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់​ថ្មី​ត្រូវ​បាន​ផ្ញើទៅ​អាសយដ្ឋាន​អ៊ីមែល​ដែល​បាន​ចុះបញ្ជី​សម្រាប់អ្នកប្រើឈ្មោះ "$1" ។
+'passwordsent' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់​ថ្មី​ត្រូវ​បាន​ផ្ញើទៅ​អាសយដ្ឋាន​អ៊ីមែល​ដែល​បាន​ចុះបញ្ជី​សម្រាប់អ្នកប្រើឈ្មោះ "$1" ។
 
\9e\9fá\9e¼á\9e\98â\80\8bá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bâ\80\8bá\9e\98á\9f\92á\9e\8fá\9e\84á\9e\91á\9f\80á\9e\8fâ\80\8bá\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\94á\9f\8bá\9e\96á\9e¸â\80\8bá\9e¢á\9f\92á\9e\93á\9e\80â\80\8bá\9e\94á\9e¶á\9e\93â\80\8bá\9e\91á\9e\91á\9e½á\9e\9bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មីនោះ។',
-'blocked-mailpassword' => 'á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IPá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e á\9e¶á\9e\98á\9e\83á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e·á\9e\93á\9e¢á\9f\84á\9e\99á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82 á\9e\93á\9e·á\9e\84á\9e\98á\9e·á\9e\93á\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8fá\9e±á\9f\92á\9e\99á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\98á\9e»á\9e\81á\9e\84á\9e¶á\9e\9aá\9e\9fá\9e\84á\9f\92á\9e\82á\9f\92á\9e\9aá\9f\84á\9f\87á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ដើម្បីបង្ការការបំពានទេ។',
-'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87ហើយ។
\9e\9fá\9e¼á\9e\98â\80\8bá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bâ\80\8bá\9e\98á\9f\92á\9e\8fá\9e\84á\9e\91á\9f\80á\9e\8fâ\80\8bá\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\94á\9f\8bá\9e\96á\9e¸â\80\8bá\9e¢á\9f\92á\9e\93á\9e\80â\80\8bá\9e\94á\9e¶á\9e\93â\80\8bá\9e\91á\9e\91á\9e½á\9e\9bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មីនោះ។',
+'blocked-mailpassword' => 'á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93IPá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e á\9e¶á\9e\98á\9e\83á\9e¶á\9e\8fá\9f\8bá\9e\98á\9e·á\9e\93á\9e¢á\9f\84á\9e\99á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82 á\9e\93á\9e·á\9e\84á\9e\98á\9e·á\9e\93á\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8fá\9e±á\9f\92á\9e\99á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\98á\9e»á\9e\81á\9e\84á\9e¶á\9e\9aá\9e\9fá\9e\84á\9f\92á\9e\82á\9f\92á\9e\9aá\9f\84á\9f\87á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ដើម្បីបង្ការការបំពានទេ។',
+'eauthentsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\95á\9f\92á\9e\91á\9f\80á\9e\84á\9e\95á\9f\92á\9e\91á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\94á\9e\89á\9f\92á\9e\87á\9e¶á\9e\80á\9f\8bá\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\89á\9e¾á\9e\91á\9f\85â\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\85á\9e»á\9f\87á\9e\8fá\9f\92á\9e\9aá\9eហើយ។
 
 មុននឹងមាន​អ៊ីមែលផ្សេងមួយទៀត​ត្រូវផ្ញើទៅ​គណនីនេះ អ្នកត្រូវតែ​ធ្វើតាមសេចក្តីណែនាំ​ក្នុងអ៊ីមែល​នោះ ដើម្បីបញ្ជាក់ថា​គណនីបច្ចុប្បន្ន​ពិតជា​របស់អ្នកពិតប្រាកដមែន។',
-'throttled-mailpassword' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ត្រូវបានផ្ញើទៅឱ្យអ្នកតាំងពី{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}មុននេះហើយ។
+'throttled-mailpassword' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ត្រូវបានផ្ញើទៅឱ្យអ្នកតាំងពី{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}មុននេះហើយ។
 
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\84á\9f\92á\9e\80á\9e¶á\9e\9aá\9e¢á\9f\86á\9e\96á\9e¾á\9e\94á\9f\86á\9e\96á\9e¶á\9e\93 á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់តែមួយគត់នឹងត្រូវបាន​ផ្ញើក្នុងរយៈពេល{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}។',
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\94á\9e\84á\9f\92á\9e\80á\9e¶á\9e\9aá\9e¢á\9f\86á\9e\96á\9e¾á\9e\94á\9f\86á\9e\96á\9e¶á\9e\93 á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់តែមួយគត់នឹងត្រូវបាន​ផ្ញើក្នុងរយៈពេល{{PLURAL:$1|មួយម៉ោង|$1ម៉ោង}}។',
 'mailerror' => 'បញ្ហាក្នុងការផ្ញើអ៊ីមែល៖ $1',
 'acct_creation_throttle_hit' => 'អ្នកទស្សនា​វិគី​នេះ​ដោយ​ប្រើប្រាស់​អាសយដ្ឋានIPរបស់​អ្នក​ បានបង្កើត{{PLURAL:$1|គណនីមួយ|គណនីចំនួន$1}}នៅ​ថ្ងៃ​ចុងក្រោយ។ ចំនួននេះ​ជា​ចំនួន​អតិបរមារ​ដែល​ត្រូវ​បាន​អនុញ្ញាត​សម្រាប់​រយៈពេល​នេះ​។
 
@@ -756,7 +758,7 @@ $2',
 'emailconfirmlink' => 'ផ្ទៀងផ្ទាត់បញ្ជាក់អាសយដ្ឋានអ៊ីមែលរបស់អ្នក',
 'invalidemailaddress' => 'អាសយដ្ឋានអ៊ីមែល​នេះមិនអាចទទួលយកបានទេ​ដោយសារវាមានទម្រង់​​មិនត្រឹមត្រូវ។
 
\9e\9fá\9e¼á\9e\98á\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bâ\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\98á\9e½á\9e\99â\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93â\80\8bá\9e\91á\9e\98á\9f\92á\9e\9aá\9e\84á\9f\8bâ\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9c á\9e¬á\9e\98á\9e½á\9e\99á\9e\80á\9f\8fá\9e\91á\9e»á\9e\80á\9e\9cá\9e¶á\9e\9bá\9e\93á\9f\84á\9f\87á\9e±á\9f\92á\9e\99នៅទំនេរ​​។',
\9e\9fá\9e¼á\9e\98á\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bâ\80\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e\98á\9e½á\9e\99â\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93â\80\8bá\9e\91á\9e\98á\9f\92á\9e\9aá\9e\84á\9f\8bâ\80\8bá\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9c á\9e¬á\9e\98á\9e½á\9e\99á\9e\80á\9f\8fá\9e\91á\9e»á\9e\80á\9e±á\9f\92á\9e\99á\9e\94á\9f\92á\9e\9aá\9e¡á\9f\84á\9f\87á\9e\93á\9f\84á\9f\87នៅទំនេរ​​។',
 'cannotchangeemail' => 'អាសយដ្ឋានអ៊ីមែលរបស់គណនីមិនអាចប្ដូរបានទេនៅលើវិគីនេះ។',
 'emaildisabled' => 'វិបសៃថ៍នេះមិនអាចផ្ញើអ៊ីមែលបានទេ។',
 'accountcreated' => 'គណនីរបស់លោកអ្នកត្រូវបានបង្កើតហើយ',
@@ -768,47 +770,47 @@ $2',
 
 អ្នកអាចបំភ្លេចពីសារនេះ ប្រសិនបើ​គណនីនេះត្រូវបានបង្កើតដោយមានបញ្ហា។',
 'usernamehasherror' => 'អត្តនាមមិនអាចមានតួអក្សរដែលជាសញ្ញាបានទេ',
-'login-throttled' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9e¶á\9e\93á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9fá\9f\86រេចច្រើនដងពេកហើយ។​
+'login-throttled' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9e¶á\9e\93á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92រេចច្រើនដងពេកហើយ។​
 
 សូមរងចាំមួយរយៈ មុនពេលសាកល្បងម្ដងទៀត។',
-'login-abort-generic' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\85á\9e»á\9f\87á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9fá\9f\86រេចទេ។ ការចុះឈ្មោះចូលត្រូវបានបោះបង់។',
+'login-abort-generic' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e\85á\9e»á\9f\87á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92រេចទេ។ ការចុះឈ្មោះចូលត្រូវបានបោះបង់។',
 'loginlanguagelabel' => 'ភាសា៖ $1',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'កំហុសមិនស្គាល់នៅក្នុងអនុគមន៍ mail() របស់ PHP',
 'user-mail-no-addy' => 'បានព្យាយាមផ្ញើអ៊ីមែលដោយមិនបានដាក់អាសដ្ឋានអ៊ីមែល។',
 
 # Change password dialog
-'resetpass' => 'â\80\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់​',
-'resetpass_announce' => 'អ្នកបានកត់ឈ្មោះចូលដោយ​អក្សរកូដអ៊ីមែល​បណ្តោះអាសន្ន​មួយ​។
+'resetpass' => 'â\80\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់​',
+'resetpass_announce' => 'អ្នកបានកត់ឈ្មោះចូលដោយ​អក្សរកូដ​បណ្តោះអាសន្ន​មួយដែលយើងខ្ញុំបានអ៊ីមែលទៅឱ្យ​។
 
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸â\80\8bá\9e\94á\9e\89á\9f\92á\9e\85á\9e\94á\9f\8bâ\80\8bá\9e\80á\9e¶á\9e\9aá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b á\9e¢á\9f\92á\9e\93á\9e\80á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82â\80\8bá\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មី​មួយនៅទីនេះ៖',
\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸â\80\8bá\9e\94á\9e\89á\9f\92á\9e\85á\9e\94á\9f\8bâ\80\8bá\9e\80á\9e¶á\9e\9aá\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\85á\9e¼á\9e\9b á\9e¢á\9f\92á\9e\93á\9e\80á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82â\80\8bá\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មី​មួយនៅទីនេះ៖',
 'resetpass_text' => '<!-- បន្ថែមឃ្លានៅទីនេះ -->',
-'resetpass_header' => 'á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់​គណនី',
-'oldpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ចាស់៖',
-'newpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មី៖',
-'retypenew' => 'á\9e\9fá\9e¼á\9e\98á\9e\9cá\9e¶á\9e\99á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មី​ម្តងទៀត៖',
-'resetpass_submit' => 'á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់និង​កត់ឈ្មោះចូល',
-'resetpass_success' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់របស់អ្នកត្រូវបានផ្លាស់ប្តូរបានសំរេចហើយ! ឥឡូវនេះកំពុងកត់ឈ្មោះចូល...',
-'resetpass_forbidden' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់មិនអាចផ្លាស់ប្តូរបានទេ',
+'resetpass_header' => 'á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់​គណនី',
+'oldpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ចាស់៖',
+'newpassword' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មី៖',
+'retypenew' => 'á\9e\9fá\9e¼á\9e\98á\9e\9cá\9e¶á\9e\99á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មី​ម្តងទៀត៖',
+'resetpass_submit' => 'á\9e\8aá\9e¶á\9e\80á\9f\8bá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់និង​កត់ឈ្មោះចូល',
+'resetpass_success' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់របស់អ្នកត្រូវបានផ្លាស់ប្តូរបានសំរេចហើយ! ឥឡូវនេះកំពុងកត់ឈ្មោះចូល...',
+'resetpass_forbidden' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់មិនអាចផ្លាស់ប្តូរបានទេ',
 'resetpass-no-info' => 'អ្នក​ចាំបាច់​ត្រូវតែ​កត់ឈ្មោះចូល ដើម្បី​ចូលទៅកាន់​ទំព័រ​នេះ​ដោយផ្ទាល់​។',
-'resetpass-submit-loggedin' => 'á\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់',
+'resetpass-submit-loggedin' => 'á\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់',
 'resetpass-submit-cancel' => 'បោះបង់',
 'resetpass-wrong-oldpass' => 'ពាក្យ​សម្ងាត់​បណ្ដោះ​អាសន្ន​ ឬ​បច្ចុប្បន្នមិន​ត្រឹមត្រូវ​។
 
\9e¢á\9f\92á\9e\93á\9e\80â\80\8bâ\80\8bá\9e\94á\9f\92á\9e\9aá\9e á\9f\82á\9e\9bâ\80\8bá\9e\87á\9e¶â\80\8bá\9e\94á\9e¶á\9e\93â\80\8bá\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\9bá\9f\81á\9e\81â\80\8bá\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\9aá\9e½á\9e\85á\9e á\9e¾á\9e\8fá\9e\99 á\9e¬â\80\8bá\9e\94á\9e¶á\9e\93á\9e\9fá\9f\92á\9e\93á\9e¾â\80\8bá\9e\9fá\9e»á\9f\86â\80\8bá\9e\9bá\9f\81á\9e\81​សម្ងាត់​​បណ្ដោះ​អាសន្ន​​ថ្មី​មួយ​ហើយ។',
-'resetpass-temp-password' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់បណ្តោះអាសន្ន:',
\9e¢á\9f\92á\9e\93á\9e\80â\80\8bâ\80\8bá\9e\94á\9f\92á\9e\9aá\9e á\9f\82á\9e\9bâ\80\8bá\9e\87á\9e¶â\80\8bá\9e\94á\9e¶á\9e\93â\80\8bá\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bâ\80\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\9aá\9e½á\9e\85á\9e á\9e¾á\9e\99 á\9e¬â\80\8bá\9e\94á\9e¶á\9e\93á\9e\9fá\9f\92á\9e\93á\9e¾â\80\8bá\9e\9fá\9e»á\9f\86â\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99​សម្ងាត់​​បណ្ដោះ​អាសន្ន​​ថ្មី​មួយ​ហើយ។',
+'resetpass-temp-password' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់បណ្តោះអាសន្ន:',
 
 # Special:PasswordReset
-'passwordreset' => 'á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់​សាឡើងវិញ',
+'passwordreset' => 'á\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់​សាឡើងវិញ',
 'passwordreset-text' => 'បំពេញសំណុំបែបបទនេះដើម្បីទទួលបានអ៊ីម៉ែលក្រើនរំលឹកពីព័ត៌មានលំអិតរបស់គណនីរបស់អ្នក។',
-'passwordreset-legend' => 'á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9f\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ដើម',
-'passwordreset-disabled' => 'á\9e\98á\9e»á\9e\81á\9e\84á\9e¶á\9e\9aá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9f\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។',
+'passwordreset-legend' => 'á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9f\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ដើម',
+'passwordreset-disabled' => 'á\9e\98á\9e»á\9e\81á\9e\84á\9e¶á\9e\9aá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\91á\9f\85á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ដើមត្រូវបានបិទមិនអោយប្រើនៅលើវិគីនេះ។',
 'passwordreset-pretext' => '{{PLURAL:$1||វាយបញ្ចូលផ្នែកមួយនៃទិន្នន័យខាងក្រោម}}',
 'passwordreset-username' => 'អត្តនាម៖',
 'passwordreset-domain' => 'ដូម៉ែន៖',
 'passwordreset-capture' => 'មើលអ៊ីមែលលទ្ធផល?',
-'passwordreset-capture-help' => 'á\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\82á\9e¼á\9e\9fá\9e\92á\9e¸á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¢á\9e\94á\9f\8bá\9e\93á\9f\81á\9f\87 á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9b (á\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់បណ្ដោះអាសន្ន) មិនត្រូវបានបង្ហាញដូចគ្នានឹងអ៊ីមែលដែលនឹងត្រូវផ្ញើទៅទៅកាន់អ្នកប្រើប្រាស់ដែរ។',
+'passwordreset-capture-help' => 'á\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\82á\9e¼á\9e\9fá\9e\92á\9e¸á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¢á\9e\94á\9f\8bá\9e\93á\9f\81á\9f\87 á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9b (á\9e\8aá\9f\82á\9e\9bá\9e\98á\9e¶á\9e\93á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់បណ្ដោះអាសន្ន) មិនត្រូវបានបង្ហាញដូចគ្នានឹងអ៊ីមែលដែលនឹងត្រូវផ្ញើទៅទៅកាន់អ្នកប្រើប្រាស់ដែរ។',
 'passwordreset-email' => 'អាសយដ្ឋានអ៊ីមែល៖',
 'passwordreset-emailtitle' => 'ព័ត៌មានលំអិតពីគណនីនៅលើ {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'មាននរណាម្នាក់ (ប្រហែលជាខ្លួនអ្នកផ្ទាល់, មកពីអាស័យដ្ឋាន IP $1) បានស្នើសុំសារក្រើនរំលឹកពីព័ត៌មានពិស្ដារ
@@ -817,29 +819,29 @@ $2',
 
 $2
 
-{{PLURAL:$3|á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9f\92á\9e\93á\9e\93á\9f\81á\9f\87\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
\9e\99á\9e\80á\9e\9bá\9f\92á\9e¢á\9e¢á\9f\92á\9e\93á\9e\80á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\9aá\9e½á\9e\85á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\9aá\9e¾á\9e\9fá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
\9e¬á\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\80á\9e\83á\9e¾á\9e\89á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
\9e\80á\9e»á\9f\86á\9e\81á\9f\92á\9e\9cá\9e\9bá\9f\8bá\9e\87á\9e¶á\9e\98á\9e½á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\98á\9e½á\9e\99á\9e\93á\9f\81á\9f\87 á\9e á\9e¾á\9e\99á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ចាស់របស់អ្នកទៅបានហើយ។',
+{{PLURAL:$3|á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9f\92á\9e\93á\9e\93á\9f\81á\9f\87\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
\9e\99á\9e\80á\9e\9bá\9f\92á\9e¢á\9e¢á\9f\92á\9e\93á\9e\80á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\9aá\9e½á\9e\85á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\9aá\9e¾á\9e\9fá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
\9e¬á\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\80á\9e\83á\9e¾á\9e\89á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
\9e\94á\9f\86á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e¢á\9f\86á\9e\96á\9e¸á\9e\9fá\9e¶á\9e\9aá\9e\98á\9e½á\9e\99á\9e\93á\9f\81á\9f\87 á\9e á\9e¾á\9e\99á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ចាស់របស់អ្នកទៅបានហើយ។',
 'passwordreset-emailtext-user' => 'អ្នកប្រើប្រាស់ $1 នៅក្នុង {{SITENAME}} បានស្នើសុំសារក្រើនរំលឹកអំពីព័ត៌មានពិស្ដាររបស់គណនីរបស់អ្នកនៅក្នុង {{SITENAME}} ($4)។
  {{PLURAL:$3|គណនី|គណនី}}អ្នកប្រើប្រាស់ដូចតទៅនេះមានជាប់ទាក់ទិននឹងអាស័យដ្ឋានអ៊ីមែលនេះ៖
 
 $2
 
-{{PLURAL:$3|á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9f\92á\9e\93á\9e\93á\9f\81á\9f\87\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
\9e\99á\9e\80á\9e\9bá\9f\92á\9e¢á\9e¢á\9f\92á\9e\93á\9e\80á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\9aá\9e½á\9e\85á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\9aá\9e¾á\9e\9fá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
\9e¬á\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\80á\9e\83á\9e¾á\9e\89á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
\9e\80á\9e»á\9f\86á\9e\81á\9f\92á\9e\9cá\9e\9bá\9f\8bá\9e\87á\9e¶á\9e\98á\9e½á\9e\99á\9e\9fá\9e¶á\9e\9aá\9e\98á\9e½á\9e\99á\9e\93á\9f\81á\9f\87 á\9e á\9e¾á\9e\99á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ចាស់របស់អ្នកទៅបានហើយ។',
-'passwordreset-emailelement' => 'á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b៖ $1
\9e\9bá\9f\81á\9e\81សម្ងាត់បណ្ដោះអាសន្ន៖ $2',
-'passwordreset-emailsent' => 'á\9e¢á\9e¸á\9e»á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9e\98á\9e½á\9e\99បានផ្ញើទៅហើយ។',
+{{PLURAL:$3|á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bá\9e\94á\9e\8eá\9f\92á\9e\8aá\9f\84á\9f\87á\9e¢á\9e¶á\9e\9fá\9e\93á\9f\92á\9e\93á\9e\93á\9f\81á\9f\87\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់បណ្ដោះអាសន្នទាំងនេះ}} និងហួសសុពលភាពក្នុងរយៈពេល {{PLURAL:$5|មួយថ្ងៃ|$5 ថ្ងៃ}}។
\9e\99á\9e\80á\9e\9bá\9f\92á\9e¢á\9e¢á\9f\92á\9e\93á\9e\80á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\80á\9e\8fá\9f\8bá\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\9aá\9e½á\9e\85á\9e\87á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\9aá\9e¾á\9e\9fá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ថ្មីមួយ។ ប្រសិនបើមាននរណាម្នាក់ផ្សេងធ្វើការស្នើសុំនេះ 
\9e¬á\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\80á\9e\83á\9e¾á\9e\89á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ដើមរបស់អ្នកហើយអ្នកមិនប្រាថ្នាផ្លាស់ប្ដូរវាទៀតទេនោះ អ្នកគ្រាន់តែ
\9e\94á\9f\86á\9e\97á\9f\92á\9e\9bá\9f\81á\9e\85á\9e¢á\9f\86á\9e\96á\9e¸á\9e\9fá\9e¶á\9e\9aá\9e\98á\9e½á\9e\99á\9e\93á\9f\81á\9f\87 á\9e á\9e¾á\9e\99á\9e\94á\9e\93á\9f\92á\9e\8fá\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ចាស់របស់អ្នកទៅបានហើយ។',
+'passwordreset-emailelement' => 'á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98៖ $1
\9e\96á\9e¶á\9e\80á\9f\92á\9e\99សម្ងាត់បណ្ដោះអាសន្ន៖ $2',
+'passwordreset-emailsent' => 'á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9e\98á\9e½á\9e\99á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cបានផ្ញើទៅហើយ។',
 'passwordreset-emailsent-capture' => 'អ៊ីមែលរំលឹកមួយដូចបង្ហាញខាងក្រោមត្រូវបានផ្ញើទៅហើយ។',
 'passwordreset-emailerror-capture' => 'អ៊ីមែលរំលឹកមួយដូចបង្ហាញខាងក្រោមត្រូវបានបង្កើតហើយ ប៉ុន្តែការផ្ញើទៅកាន់អ្នកប្រើប្រាស់មិនបានសំរេចទេ៖ $1',
 
 # Special:ChangeEmail
 'changeemail' => 'ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែល',
 'changeemail-header' => 'ផ្លាស់ប្ដូរអាសយដ្ឋានអ៊ីមែលសំរាប់គណនីនេះ',
-'changeemail-text' => 'á\9e\9fá\9e¼á\9e\98á\9e\94á\9f\86á\9e\96á\9f\81á\9e\89á\9e\9fá\9f\86á\9e\93á\9e»á\9f\86á\9e\94á\9f\82á\9e\94á\9e\94á\9e\91á\9e\93á\9f\81á\9f\87á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9f\94 á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ដើម្បីអះអាងលើការផ្លាស់ប្ដូរនេះ។',
+'changeemail-text' => 'á\9e\9fá\9e¼á\9e\98á\9e\94á\9f\86á\9e\96á\9f\81á\9e\89á\9e\9fá\9f\86á\9e\93á\9e»á\9f\86á\9e\94á\9f\82á\9e\94á\9e\94á\9e\91á\9e\93á\9f\81á\9f\87á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\95á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9f\94 á\9e¢á\9f\92á\9e\93á\9e\80á\9e\93á\9e¹á\9e\84á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ដើម្បីអះអាងលើការផ្លាស់ប្ដូរនេះ។',
 'changeemail-no-info' => 'អ្នក​ចាំបាច់​ត្រូវតែ​កត់ឈ្មោះចូល ដើម្បី​ចូលទៅកាន់​ទំព័រ​នេះ​ដោយផ្ទាល់​។',
 'changeemail-oldemail' => 'អាសយដ្ឋានអ៊ីមែលបច្ចុប្បន្ន៖',
 'changeemail-newemail' => 'អាសយដ្ឋានអ៊ីមែលថ្មី៖',
@@ -877,14 +879,14 @@ $2
 'preview' => 'មើលជាមុន',
 'showpreview' => 'បង្ហាញ​ការមើលជាមុន',
 'showlivepreview' => 'មើលជាមុនដោយផ្ទាល់',
-'showdiff' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\94á\9f\86លាស់ប្ដូរ',
+'showdiff' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\94á\9e\93á\9f\92លាស់ប្ដូរ',
 'anoneditwarning' => "'''ប្រយ័ត្ន ៖''' អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ អាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។",
 'anonpreviewwarning' => "''អ្នកមិនបានកត់ឈ្មោះចូល​ទេ។ ប្រសិនបើអ្នកធ្វើការរក្សាទុក នោះអាសយដ្ឋានIPរបស់អ្នក​នឹងត្រូវបាន​កត់ត្រាទុក​ក្នុងប្រវត្តិកែប្រែ​នៃទំព័រ​នេះ។''",
 'missingsummary' => "'''រំលឹក៖''' អ្នកមិនទាន់បានផ្ដល់ចំណារពន្យល់អំពីកំណែប្រែនេះទេ។
 
 បើសិនជាអ្នកចុច '''រក្សាទុក''' ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានចំណារពន្យល់។",
-'missingcommenttext' => 'á\9e\9fá\9e¼á\9e\98á\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\98á\9e½á\9e\99á\9e\9cá\9e·á\9e\85á\9e¶á\9e\9aនៅខាងក្រោម។',
-'missingcommentheader' => "'''á\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9f\96''' á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e±á\9f\92á\9e\99á\9e\93á\9e¼á\9e\9c á\9e\94á\9f\92á\9e\9aá\9e\92á\9e¶á\9e\93á\9e\94á\9e\91\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84 á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\9cá\9e·á\9e\85á\9e¶á\9e\9aនេះទេ។
+'missingcommenttext' => 'á\9e\9fá\9e¼á\9e\98á\9e\9cá\9e¶á\9e\99á\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\99á\9f\84á\9e\94á\9e\9bá\9f\8bá\9e\98á\9e½á\9e\99នៅខាងក្រោម។',
+'missingcommentheader' => "'''á\9e\9aá\9f\86á\9e\9bá\9e¹á\9e\80á\9f\96''' á\9e¢á\9f\92á\9e\93á\9e\80á\9e\98á\9e·á\9e\93á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\94á\9e¶á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e±á\9f\92á\9e\99á\9e\93á\9e¼á\9e\9c á\9e\94á\9f\92á\9e\9aá\9e\92á\9e¶á\9e\93á\9e\94á\9e\91\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84 á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\98á\9e\8fá\9e·á\9e\99á\9f\84á\9e\94á\9e\9bá\9f\8bនេះទេ។
 បើសិនជាអ្នកចុច \"{{int:savearticle}}\" ម្ដងទៀតនោះកំណែប្រែរបស់អ្នកនឹងត្រូវរក្សាទុកដោយគ្មានវា។",
 'summary-preview' => 'ការមើលជាមុនរបស់ចំណារពន្យល់:',
 'subject-preview' => 'ការមើលជាមុនរបស់ប្រធានបទ/ចំណងជើង:',
@@ -934,10 +936,10 @@ $2
 'loginreqtitle' => 'តម្រូវអោយកត់ឈ្មោះចូល',
 'loginreqlink' => 'កត់ឈ្មោះចូល',
 'loginreqpagetext' => 'អ្នកត្រូវតែ$1ដើម្បីមើលទំព័រដទៃផ្សេងទៀត។',
-'accmailtitle' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ត្រូវបានផ្ញើរួចហើយ។',
-'accmailtext' => "á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់​ដែល​បាន​បង្កើត​ដោយ​ចៃដន្យ​សម្រាប់ [[User talk:$1|$1]] ត្រូវបានផ្ញើទៅ $2 ហើយ​។
+'accmailtitle' => 'á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ត្រូវបានផ្ញើរួចហើយ។',
+'accmailtext' => "á\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់​ដែល​បាន​បង្កើត​ដោយ​ចៃដន្យ​សម្រាប់ [[User talk:$1|$1]] ត្រូវបានផ្ញើទៅ $2 ហើយ​។
 
\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bâ\80\8bá\9e\82á\9e\8eá\9e\93á\9e¸â\80\8bá\9e\90á\9f\92á\9e\98á\9e¸â\80\8bá\9e\93á\9f\81á\9f\87 á\9e¢á\9e¶á\9e\85â\80\8bâ\80\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\94á\9e¶á\9e\93á\9e\93á\9f\85â\80\8bâ\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9a ''[[Special:ChangePassword|á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់]]'' បន្ទាប់ពីកត់ឈ្មោះចូលហើយ​។",
\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92á\9e\84á\9e¶á\9e\8fá\9f\8bâ\80\8bá\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bâ\80\8bá\9e\82á\9e\8eá\9e\93á\9e¸â\80\8bá\9e\90á\9f\92á\9e\98á\9e¸â\80\8bá\9e\93á\9f\81á\9f\87 á\9e¢á\9e¶á\9e\85â\80\8bâ\80\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\94á\9e¶á\9e\93á\9e\93á\9f\85â\80\8bâ\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9a ''[[Special:ChangePassword|á\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់]]'' បន្ទាប់ពីកត់ឈ្មោះចូលហើយ​។",
 'newarticle' => '(ថ្មី)',
 'newarticletext' => "អ្នកបានតាម​តំណភ្ជាប់​ទៅ​ទំព័រដែលមិនទាន់មាននៅឡើយ។
 ដើម្បីបង្កើតទំព័រនេះ សូមចាប់ផ្ដើមវាយ​ក្នុងប្រអប់ខាងក្រោម (សូមមើល [[{{MediaWiki:Helppage}}|ទំព័រ​ជំនួយ]] សម្រាប់​ព័ត៌មានបន្ថែម)។
@@ -977,7 +979,7 @@ $2
 'userinvalidcssjstitle' => "'''ប្រយ័ត្ន៖''' គ្មានសំបក \"\$1\"។ ចងចាំថា ទំព័រផ្ទាល់ខ្លួន .css និង .js ប្រើប្រាស់ ចំណងជើង ជាអក្សរតូច, ឧទាហរណ៍  {{ns:user}}:Foo/vector.css ត្រឹមត្រូវ, រីឯ {{ns:user}}:Foo/Vector.css មិនត្រឹមត្រូវ។",
 'updated' => '(បានបន្ទាន់សម័យ)',
 'note' => "'''ចំណាំ៖'''",
-'previewnote' => "'''á\9e\9fá\9e¼á\9e\98á\9e\85á\9e¶á\9f\86á\9e\90á\9e¶á\9e\93á\9f\81á\9f\87á\9e\82á\9f\92á\9e\9aá\9e¶á\9e\93á\9f\8bá\9e\8fá\9f\82á\9e\87á\9e¶â\80\8bá\9e\80á\9e¶á\9e\9aá\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¾á\9e\9bá\9e\87á\9e¶á\9e\98á\9e»á\9e\93á\9e\94á\9f\89á\9e»á\9e\8eá\9f\92á\9e\8eá\9f\84á\9f\87á\9f\94 á\9e\94á\9f\86លាស់ប្ដូរ​របស់អ្នកមិនទាន់បាន​រក្សាទុកទេ!'''",
+'previewnote' => "'''á\9e\9fá\9e¼á\9e\98á\9e\85á\9e¶á\9f\86á\9e\90á\9e¶á\9e\93á\9f\81á\9f\87á\9e\82á\9f\92á\9e\9aá\9e¶á\9e\93á\9f\8bá\9e\8fá\9f\82á\9e\87á\9e¶â\80\8bá\9e\80á\9e¶á\9e\9aá\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\80á\9e¶á\9e\9aá\9e\98á\9e¾á\9e\9bá\9e\87á\9e¶á\9e\98á\9e»á\9e\93á\9e\94á\9f\89á\9e»á\9e\8eá\9f\92á\9e\8eá\9f\84á\9f\87á\9f\94 á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ​របស់អ្នកមិនទាន់បាន​រក្សាទុកទេ!'''",
 'continue-editing' => 'ទៅកាន់កន្លែងសំរាប់ធ្វើការកែប្រែ',
 'previewconflict' => 'ការមើលមុននេះយោងតាមអត្ថបទក្នុងប្រអប់កែប្រែខាងលើ។ ទំព័រអត្ថបទនឹងបង្ហាញចេញបែបនេះប្រសិនបើអ្នកជ្រើសរើសរក្សាទុក។',
 'session_fail_preview' => "'''សូមអភ័យទោស! យើងមិនអាចរក្សាទុកការកែប្រែរបស់អ្នកបានទេ ដោយសារបាត់ទិន្នន័យវេនការងារ។
@@ -1006,8 +1008,8 @@ $2
 'editingold' => "'''បម្រាម:អ្នកកំពុងតែកែកំណែប្រែដែលហួសសម័យរបស់ទំព័រនេះ។
 
 ប្រសិនបើអ្នករក្សាវាទុក កំណែប្រែពីមុនទាំងប៉ុន្មាននឹងត្រូវបាត់បង់។'''",
-'yourdiff' => 'á\9e\85á\9f\86á\9e\93ុចខុសគ្នា',
-'copyrightwarning' => "á\9e\9fá\9e¼á\9e\98á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\80á\9e\8fá\9f\8bá\9e\9fá\9e\98á\9f\92á\9e\82á\9e¶á\9e\9bá\9f\8bâ\80\8bá\9e\90á\9e¶ á\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\80á\9e¶á\9e\9aá\9e\9aá\9e½á\9e\98á\9e\85á\9f\86á\9e\8eá\9f\82á\9e\80â\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80â\80\8bá\9e\93á\9f\85á\9e\9bá\9e¾{{SITENAME}} á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93â\80\8bá\9e\95á\9f\92á\9e\9fá\9e\96á\9f\92á\9e\9cá\9e\95á\9f\92á\9e\9fá\9e¶á\9e\99â\80\8bá\9e\8fá\9e¶á\9e\98â\80\8bá\9e\9bá\9e·á\9e\81á\9e·á\9e\8fá\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8f $2 (á\9e\9fá\9e¼á\9e\98â\80\8bá\9e\98á\9e¾á\9e\9b $1 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93â\80\8bá\9e\9bá\9f\86អិត) ។ បើអ្នកមិនចង់ឱ្យ​​ត្រូវបានអ្នកដទៃធ្វើការកែប្រែ ផ្សព្វផ្សាយបន្តសំណេរ​របស់អ្នកទេនោះ សូមអ្នកកុំដាក់​ស្នើវា​នៅទីនេះអី។<br />
+'yourdiff' => 'á\9e\85á\9f\86á\9e\8eុចខុសគ្នា',
+'copyrightwarning' => "á\9e\9fá\9e¼á\9e\98á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\80á\9e¶á\9e\9aá\9e\80á\9e\8fá\9f\8bá\9e\9fá\9e\98á\9f\92á\9e\82á\9e¶á\9e\9bá\9f\8bâ\80\8bá\9e\90á\9e¶ á\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\80á\9e¶á\9e\9aá\9e\9aá\9e½á\9e\98á\9e\85á\9f\86á\9e\8eá\9f\82á\9e\80â\80\8bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80â\80\8bá\9e\93á\9f\85á\9e\9bá\9e¾{{SITENAME}} á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\94á\9e¶á\9e\93â\80\8bá\9e\95á\9f\92á\9e\9fá\9e\96á\9f\92á\9e\9cá\9e\95á\9f\92á\9e\9fá\9e¶á\9e\99â\80\8bá\9e\8fá\9e¶á\9e\98â\80\8bá\9e\9bá\9e·á\9e\81á\9e·á\9e\8fá\9e¢á\9e\93á\9e»á\9e\89á\9f\92á\9e\89á\9e¶á\9e\8f $2 (á\9e\9fá\9e¼á\9e\98â\80\8bá\9e\98á\9e¾á\9e\9b $1 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93â\80\8bá\9e\9bá\9e\98á\9f\92អិត) ។ បើអ្នកមិនចង់ឱ្យ​​ត្រូវបានអ្នកដទៃធ្វើការកែប្រែ ផ្សព្វផ្សាយបន្តសំណេរ​របស់អ្នកទេនោះ សូមអ្នកកុំដាក់​ស្នើវា​នៅទីនេះអី។<br />
 អ្នកត្រូវសន្យាថា ​អ្នកសរសេរវា​ដោយខ្លួនអ្នក ឬបានចម្លងវា​ពី​កម្មសិទ្ធិសាធារណៈឬពីប្រភពសេរី ។
 '''មិនត្រូវ​ដាក់ស្នើ​ការងារមានជាប់កម្មសិទ្ឋិបញ្ញាដោយគ្មានការអនុញ្ញាតទេ!'''",
 'copyrightwarning2' => "សូមធ្វើការកត់សម្គាល់​ថា គ្រប់ការរួមចំណែក​ទៅ {{SITENAME}} អាច​ត្រូវបាន​កែប្រែ​ ផ្លាស់ប្ដូរ រឺលុបចោល ដោយអ្នករួមចំណែកដទៃទៀត។
@@ -1106,7 +1108,7 @@ $2
 'last' => 'ចុងក្រោយ',
 'page_first' => 'ដំបូង',
 'page_last' => 'ចុងក្រោយ',
-'histlegend' => "ជម្រើស៖ សូមគូសក្នុងកូនប្រអប់ពីមុខកំណែដែលអ្នកចង់ប្រៀបធៀប រួចចុចច្នុច enter ឬប៊ូតុងនៅខាងក្រោម។<br />
+'histlegend' => "ជម្រើស៖ សូមគូសក្នុងកូនប្រអប់ពីមុខកំណែដែលអ្នកចង់ប្រៀបធៀប រួចចុចច្នុច ENTER ឬប៊ូតុងនៅខាងក្រោម។<br />
 '''ពាក្យតំណាង'''៖(បច្ចុប្បន្ន) = ភាពខុសគ្នាជាមួយនឹងកំណែបច្ចុប្បន្ន, (ចុងក្រោយ) = ភាពខុសគ្នារវាងកំណែប្រែពីមុន, តិច = កំណែប្រែតិចតួច",
 'history-fieldset-title' => 'ស្វែងរកក្នុងប្រវត្តិ',
 'history-show-deleted' => 'តែទំព័រលុបចោលប៉ុណ្ណោះ',
@@ -1183,7 +1185,7 @@ $2
 'revdelete-unsuppress' => 'ដកចេញការដាក់កំហិតលើកំណែដែលបានស្តារឡើងវិញ',
 'revdelete-log' => 'មូលហេតុ៖',
 'revdelete-submit' => 'អនុវត្តទៅលើ{{PLURAL:$1|កំណែ|កំណែទាំងឡាយ}}ដែលបានជ្រើសយក',
-'revdelete-success' => "'''á\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\9fá\9e\98á\9f\90á\9e\99á\9e\82á\9f\86á\9e á\9e¾á\9e\89á\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9e¶á\9e\93á\9e\9fá\9f\86រេច។'''",
+'revdelete-success' => "'''á\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\93á\9f\8bá\9e\9fá\9e\98á\9f\90á\9e\99á\9e\82á\9f\86á\9e á\9e¾á\9e\89á\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92រេច។'''",
 'revdelete-failure' => "'''មិន​អាចបន្ទាន់សម័យគំហើញនៃ​កំណែប្រែ​បាន​៖'''
 $1",
 'logdelete-success' => "'''បានកំណត់គំហើញកំណត់ហេតុដោយជោគជ័យ។'''",
@@ -1294,7 +1296,7 @@ $1",
 'searchprofile-project-tooltip' => 'ស្វែងរកក្នុង $1',
 'searchprofile-images-tooltip' => 'ស្វែងរកឯកសាររូបភាព',
 'searchprofile-everything-tooltip' => 'ស្វែងរកក្នុងខ្លឹមសារទាំងអស់(រួមបញ្ចូលទាំងទំព័រពិភាក្សា)',
-'searchprofile-advanced-tooltip' => 'á\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e\97á\9f\81á\9e\91á\9e\80á\9f\86á\9e\93ត់ដោយអ្នកប្រើប្រាស់',
+'searchprofile-advanced-tooltip' => 'á\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e\97á\9f\81á\9e\91á\9e\80á\9f\86á\9e\8eត់ដោយអ្នកប្រើប្រាស់',
 'search-result-size' => '$1({{PLURAL:$2|១ពាក្យ|$2ពាក្យ}})',
 'search-result-category-size' => '{{PLURAL:$1|សមាជិកម្នាក់|សមាជិក$1នាក់}} ({{PLURAL:$2|ចំណាត់ថ្នាក់ក្រុមរង១|$2 ចំណាត់ថ្នាក់ក្រុមរង}}, {{PLURAL:$3|1 ឯកសារ|$3 ឯកសារ}})',
 'search-result-score' => 'កម្រិតទាក់ទិន៖ $1%',
@@ -1305,7 +1307,7 @@ $1",
 'search-interwiki-default' => 'លទ្ធផលពី$1៖',
 'search-interwiki-more' => '(បន្ថែមទៀត)',
 'search-relatedarticle' => 'ទាក់ទិន',
-'mwsuggest-disable' => 'á\9e\98á\9e·á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\9fá\9f\86á\9e\93ើAJAX',
+'mwsuggest-disable' => 'á\9e\98á\9e·á\9e\93á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\9fá\9f\86á\9e\8eើAJAX',
 'searcheverything-enable' => 'ស្វែងរកនៅក្នុងលំហឈ្មោះទាំងអស់',
 'searchrelated' => 'ទាក់ទិន',
 'searchall' => 'ទាំងអស់',
@@ -1317,7 +1319,7 @@ $1",
 'search-nonefound' => 'មិនមានលទ្ធផលណាមួយ​ត្រូវគ្នានឹងសំណើសុំនេះទេ',
 'powersearch' => 'ស្វែងរកថ្នាក់ខ្ពស់',
 'powersearch-legend' => 'ស្វែងរកថ្នាក់ខ្ពស់',
-'powersearch-ns' => 'á\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\94á\9f\92á\9e\9aá\9e\97á\9f\81á\9e\91៖',
+'powersearch-ns' => 'á\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\9bá\9f\86á\9e á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87៖',
 'powersearch-redir' => 'បញ្ជីការបញ្ជូនបន្ត',
 'powersearch-field' => 'ស្វែងរក',
 'powersearch-togglelabel' => 'គូសធីក៖',
@@ -1343,7 +1345,7 @@ $1",
 'prefs-edits' => 'ចំនួនកំណែប្រែ៖',
 'prefsnologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
 'prefsnologintext' => 'អ្នកចាំបាច់ត្រូវតែ<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} កត់ឈ្មោះចូល]</span> ដើម្បីកំណត់ចំណង់ចំណូលចិត្តរបស់អ្នក។',
-'changepassword' => 'á\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់',
+'changepassword' => 'á\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់',
 'prefs-skin' => 'សំបក',
 'skin-preview' => 'មើលជាមុន',
 'datedefault' => 'គ្មានចំណូលចិត្ត',
@@ -1352,21 +1354,21 @@ $1",
 'prefs-labs' => 'មុខងារពិសេសថ្មីៗដែលស្ថិតក្រោមការពិសោធន៍នៅឡើយ',
 'prefs-user-pages' => 'ទំព័រអ្នកប្រើប្រាស់',
 'prefs-personal' => 'ប្រវត្តិរូប',
-'prefs-rc' => 'á\9e\94á\9f\86លាស់ប្ដូរថ្មីៗ',
+'prefs-rc' => 'á\9e\94á\9e\93á\9f\92លាស់ប្ដូរថ្មីៗ',
 'prefs-watchlist' => 'បញ្ជីតាមដាន',
 'prefs-watchlist-days' => 'ចំនួនថ្ងៃត្រូវបង្ហាញក្នុងបញ្ជីតាមដាន៖',
 'prefs-watchlist-days-max' => 'អតិបរមា $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}}',
 'prefs-watchlist-edits' => 'ចំនួនអតិបរមានៃបំលាស់ប្តូរត្រូវបង្ហាញក្នុងបញ្ជីតាមដានដែលបានពង្រីក៖',
 'prefs-watchlist-edits-max' => 'ចំនួនអតិបរមា៖ ១០០០',
 'prefs-misc' => 'ផ្សេងៗ',
-'prefs-resetpass' => 'á\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់',
+'prefs-resetpass' => 'á\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់',
 'prefs-changeemail' => 'ផ្លាស់ប្ដូរអ៊ីមែល',
 'prefs-setemail' => 'ដាក់អាសយដ្ឋានអ៊ីមែលមួយ',
 'prefs-email' => '
 ជំរើសទាក់ទិននឹងអ៊ីមែល',
 'prefs-rendering' => 'ការរចនា',
 'saveprefs' => 'រក្សាទុក',
-'resetprefs' => 'á\9e\9bá\9e»á\9e\94á\9e\85á\9f\84á\9e\9bá\9e\94á\9f\86លាស់ប្ដូរមិនបានរក្សាទុក',
+'resetprefs' => 'á\9e\9bá\9e»á\9e\94á\9e\85á\9f\84á\9e\9bá\9e\94á\9e\93á\9f\92លាស់ប្ដូរមិនបានរក្សាទុក',
 'restoreprefs' => 'ស្ដារ​ការកំណត់​ទាំងអស់​ទៅ​លំនាំដើម',
 'prefs-editing' => 'កំណែប្រែ',
 'prefs-edit-boxsize' => 'ទំហំរបស់ផ្ទាំងកែប្រែទំព័រ។',
@@ -1376,7 +1378,7 @@ $1",
 'resultsperpage' => 'ចំនួនលទ្ធផលក្នុងមួយទំព័រ៖',
 'stub-threshold' => 'ទំហំអប្បបរមាសំរាប់ដាក់ជាទំរង់<a href="#" class="stub">តំណភ្ជាប់ទៅទំព័រកំប៉ិចកំប៉ុក</a> (គិតជាបៃ)៖',
 'stub-threshold-disabled' => 'មិនប្រើ',
-'recentchangesdays' => 'ចំនួនថ្ងៃបង្ហាញក្នុង ទំព័របំលាស់ប្តូរថ្មីៗ៖',
+'recentchangesdays' => 'ចំនួនថ្ងៃបង្ហាញក្នុងទំព័របន្លាស់ប្តូរថ្មីៗ៖',
 'recentchangesdays-max' => '(អតិបរមា $1 {{PLURAL:$1|ថ្ងៃ|ថ្ងៃ}})',
 'recentchangescount' => 'ចំនួន​កំណែប្រែ​ដែល​ត្រូវ​បង្ហាញ​តាមលំនាំដើម:',
 'prefs-help-recentchangescount' => 'រាប់បញ្ចូលទាំងការកែប្រែនាពេលថ្មី ប្រវត្តិទំព័រនិងកំណត់ហេតុនានា។',
@@ -1432,7 +1434,7 @@ $1",
 'prefs-help-gender' => 'ដាក់ក៏បានមិនដាក់ក៏បាន៖ ប្រើសំរាប់អោយសូហ្វវែរហៅតាមភេទអោយបាមត្រឹមត្រូវ។ ព័ត៌មាននេះនឹងត្រូវបង្ហាញជាសាធារណៈ។',
 'email' => 'អ៊ីមែល',
 'prefs-help-realname' => 'អ្នកអាចផ្ដល់ឈ្មោះពិតរបស់អ្នកក៏បានមិនផ្ដល់ក៏បាន។ បើអ្នកផ្ដល់ឱ្យ វានឹងត្រូវបានប្រើប្រាស់់ដើម្បីបញ្ជាក់ភាពជាម្ចាស់​លើការរួមចំណែក​នានា​របស់អ្នក។',
-'prefs-help-email' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9e\98á\9e·á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9f\94 á\9e\94á\9f\89á\9e»á\9e\93á\9f\92á\9e\8aá\9f\82á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\8aá\9f\82á\9e\9bá\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e¢á\9f\84á\9e\99á\9e\93á\9e¹á\9e\84á\9e\98á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e\99á\9f\84á\9e\87á\9e\93á\9f\8dá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e¶á\9e\9aá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ ពេលដែលអ្នកភ្លេចវា។',
+'prefs-help-email' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9e\98á\9e·á\9e\93á\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e\80á\9f\8fá\9e\94á\9e¶á\9e\93á\9f\94 á\9e\94á\9f\89á\9e»á\9e\93á\9f\92á\9e\8aá\9f\82á\9e¢á\9e¶á\9e\9fá\9e\99á\9e\8aá\9f\92á\9e\8bá\9e¶á\9e\93á\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\8aá\9f\82á\9e\9bá\9e\95á\9f\92á\9e\8aá\9e\9bá\9f\8bá\9e¢á\9f\84á\9e\99á\9e\93á\9e¹á\9e\84á\9e\98á\9e¶á\9e\93á\9e\94á\9f\92á\9e\9aá\9e\99á\9f\84á\9e\87á\9e\93á\9f\8dá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e¶á\9e\9aá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ ពេលដែលអ្នកភ្លេចវា។',
 'prefs-help-email-others' => 'អ្នកក៏អាចជ្រើសរើស​ការផ្ដល់លទ្ឋភាព​​ឱ្យអ្នកដទៃទាក់ទងអ្នក​តាមរយៈ​​ទំព័រអ្នកប្រើប្រាស់​​ឬទំព័រពិភាក្សារបស់អ្នក​​ដោយមិនចាំបាច់ឱ្យគេដឹងពីអត្តសញ្ញាណរបស់អ្នកផងដែរ។',
 'prefs-help-email-required' => 'អាសយដ្ឋានអ៊ីមែលត្រូវការជាចាំបាច់។',
 'prefs-info' => 'ព័ត៌មានផ្ទាល់​ខ្លួន',
@@ -1450,7 +1452,7 @@ $1",
 'prefs-displaywatchlist' => 'ជំរើសការបង្ហាញ',
 'prefs-diffs' => 'ភាពខុសគ្នា',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'អាសយដ្ឋានអ៊ីមែលហាក់មានសុពលភាព',
 'email-address-validity-invalid' => 'បញ្ចូលអាសយដ្ឋានអ៊ីមែលដែលមានសុពលភាព',
 
@@ -1481,7 +1483,7 @@ $1",
 'group-user' => 'អ្នកប្រើប្រាស់',
 'group-autoconfirmed' => 'អ្នកប្រើប្រាស់ទទួលស្គាល់ដោយស្វ័យប្រវត្តិ',
 'group-bot' => 'រូបយន្ត',
-'group-sysop' => 'á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e\97á\9e·á\9e\94á\9e¶á\9e\9b',
+'group-sysop' => 'អភិបាល',
 'group-bureaucrat' => 'អ្នកការិយាល័យ',
 'group-suppress' => 'អធិការ',
 'group-all' => '(ទាំងអស់)',
@@ -1489,7 +1491,7 @@ $1",
 'group-user-member' => '{{GENDER:$1|អ្នកប្រើប្រាស់}}',
 'group-autoconfirmed-member' => '{{GENDER:$1|អ្នកប្រើប្រាស់ទទួលស្គាល់ដោយស្វ័យប្រវត្តិ}}',
 'group-bot-member' => '{{GENDER:$1|រូបយន្ត}}',
-'group-sysop-member' => '{{GENDER:$1|á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e\97á\9e·á\9e\94á\9e¶á\9e\9b}}',
+'group-sysop-member' => '{{GENDER:$1|អភិបាល}}',
 'group-bureaucrat-member' => '{{GENDER:$1|អ្នកការិយាល័យ}}',
 'group-suppress-member' => '{{GENDER:$1|អធិការ}}',
 
@@ -1523,11 +1525,13 @@ $1",
 'right-writeapi' => 'ការប្រើប្រាស់ API សម្រាប់​សរសេរ',
 'right-delete' => 'លុបទំព័រចោល',
 'right-bigdelete' => 'លុបទំព័រទាំងឡាយដែលមានប្រវត្តិវែង',
+'right-deletelogentry' => 'លប់និងឈប់លុបកំណត់ហេតុច្បាស់លាស់ណាមួយ',
 'right-deleterevision' => 'លុប​និង​ឈប់​លុប​កំណែ​ប្រែ​ច្បាស់លាស់​នៃ​ទំព័រ​',
-'right-deletedhistory' => 'មើលកំនត់ត្រាប្រវត្តិដែលត្រូវបានលុបចោល ដោយគ្មានអត្ថបទភ្ជាប់របស់វា',
+'right-deletedhistory' => 'មើលកំណត់ត្រាប្រវត្តិដែលត្រូវបានលុបចោល ដោយគ្មានអត្ថបទភ្ជាប់របស់វា',
+'right-deletedtext' => 'មើលផ្នែកអត្ថបទដែលបានលប់និងបន្លាស់ប្ដូររវាងកំណែទាំងឡាយដែលបានលុបចោល',
 'right-browsearchive' => 'ស្វែងរកទំព័រដែលត្រូវបានលុបចោល',
 'right-undelete' => 'ឈប់លុបទំព័រមួយ',
-'right-suppressrevision' => 'á\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99á\9e\93á\9e·á\9e\84á\9e\9fá\9f\92á\9e\8aá\9e¶á\9e\9aá\9e\80á\9f\86á\9e\8eá\9f\82á\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e\97á\9e·á\9e\94á\9e¶á\9e\9bá\9e\94á\9e¶á\9e\93á\9e\9bá\9e¶á\9e\80á\9f\8b',
+'right-suppressrevision' => 'ពិនិត្យនិងស្ដារកំណែដែលអភិបាលបានលាក់',
 'right-suppressionlog' => 'មើលកំណត់ហេតុឯកជន',
 'right-block' => 'ហាមមិនឱ្យអ្នកប្រើប្រាស់ដទៃទៀតធ្វើការកែប្រែ',
 'right-blockemail' => 'ហាមឃាត់អ្នកប្រើប្រាស់ម្នាក់មិនអោយផ្ញើអ៊ីមែល',
@@ -1542,21 +1546,21 @@ $1",
 'right-editusercss' => 'កែប្រែឯកសារ CSS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត',
 'right-edituserjs' => 'កែប្រែឯកសារ JS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត',
 'right-rollback' => 'ត្រឡប់យ៉ាងរហ័សនូវកំណែប្រែទំព័រវិសេសណាមួយ​ដែលធ្វើឡើងដោយ​អ្នកប្រើប្រាស់ចុងក្រោយគេ។',
-'right-markbotedits' => 'á\9e\85á\9f\86á\9e\93á\9e¶á\9f\86á\9e\80á\9f\86á\9e\93á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8fá\9f\92á\9e\9aá\9e¡á\9e\94á\9f\8bá\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\90á\9e¶á\9e\87á\9e¶á\9e\80á\9f\86á\9e\93ែប្រែដោយរូបយន្ត',
+'right-markbotedits' => 'á\9e\85á\9f\86á\9e\8eá\9e¶á\9f\86á\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8fá\9f\92á\9e\9aá\9e¡á\9e\94á\9f\8bá\9e¡á\9e¾á\9e\84á\9e\9cá\9e·á\9e\89á\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\90á\9e¶á\9e\87á\9e¶á\9e\80á\9f\86á\9e\8eែប្រែដោយរូបយន្ត',
 'right-noratelimit' => 'មិនទទួលរងឥទ្ធិពលពីការដាក់កំហិតណាទាំងអស់',
 'right-import' => 'នាំចូលទំព័រនានាពីវិគីផ្សេងៗទៀត',
 'right-importupload' => 'នាំចូលទំព័រនានាពីឯកសារដែលបានផ្ទុកឡើង',
 'right-patrol' => 'ចំណាំកំណែប្រែរបស់អ្នកដ៏ទៃថាជាកំណែប្រែបានល្បាត',
-'right-autopatrol' => 'á\9e\80á\9e\8fá\9f\8bá\9e\9fá\9e\98á\9f\92á\9e\82á\9e¶á\9e\9bá\9f\8bá\9e\8aá\9f\84á\9e\99á\9e\9fá\9f\92á\9e\9cá\9f\90á\9e\99á\9e\94á\9f\92á\9e\9aá\9e\9cá\9e\8fá\9f\92á\9e\8fá\9e·á\9e\93á\9e¼á\9e\9cá\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\90á\9e¶á\9e\87á\9e¶á\9e\80á\9f\86á\9e\93ែប្រែបានល្បាត',
-'right-patrolmarks' => 'á\9e\98á\9e¾á\9e\80​កំណត់​សម្គាល់​ល្បាត​ដែល​ផ្លាស់​ប្តូរ​ថ្មី​ៗ​',
+'right-autopatrol' => 'á\9e\80á\9e\8fá\9f\8bá\9e\9fá\9e\98á\9f\92á\9e\82á\9e¶á\9e\9bá\9f\8bá\9e\8aá\9f\84á\9e\99á\9e\9fá\9f\92á\9e\9cá\9f\90á\9e\99á\9e\94á\9f\92á\9e\9aá\9e\9cá\9e\8fá\9f\92á\9e\8fá\9e·á\9e\93á\9e¼á\9e\9cá\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e\81á\9f\92á\9e\89á\9e»á\9f\86á\9e\90á\9e¶á\9e\87á\9e¶á\9e\80á\9f\86á\9e\8eែប្រែបានល្បាត',
+'right-patrolmarks' => 'á\9e\98á\9e¾á\9e\9b​កំណត់​សម្គាល់​ល្បាត​ដែល​ផ្លាស់​ប្តូរ​ថ្មី​ៗ​',
 'right-unwatchedpages' => 'បង្ហាញបញ្ជីទំព័រនានាដែលមិនត្រូវបានមើល',
 'right-mergehistory' => 'ច្របាច់ប្រវត្តិរបស់ទំព័រនានាបញ្ចូលគ្នា',
-'right-userrights' => 'á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9aá\9e¶á\9e\9bá\9f\8bá\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\93á\9f\83á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9eស់',
+'right-userrights' => 'á\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\9fá\9e·á\9e\91á\9f\92á\9e\92á\9e·á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\91á\9e¶á\9f\86á\9e\84á\9e¢ស់',
 'right-userrights-interwiki' => 'កែប្រែសិទ្ធិអ្នកប្រើប្រាស់នៅលើវិគីផ្សេងៗទៀត',
 'right-siteadmin' => 'ចាក់សោនិងបើកសោមូលដ្ឋានទិន្នន័យ',
 'right-override-export-depth' => 'នាំចេញទំព័ររួមទាំងទំព័រដែលមានភ្ជាប់តំណភ្ជាប់​រហូតដល់លំដាប់ទី៥',
 'right-sendemail' => 'ផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើដទៃ',
-'right-passwordreset' => 'á\9e\98á\9e¾á\9e\9bá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\86ងាត់ឡើងវិញ',
+'right-passwordreset' => 'á\9e\98á\9e¾á\9e\9bá\9e¢á\9f\8aá\9e¸á\9e\98á\9f\82á\9e\9bá\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\80á\9f\86á\9e\8eá\9e\8fá\9f\8bá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9e\98á\9f\92ងាត់ឡើងវិញ',
 
 # Special:Log/newusers
 'newuserlogpage' => 'កំណត់ហេតុនៃការបង្កើតគណនី',
@@ -1603,8 +1607,8 @@ $1",
 'action-sendemail' => 'ផ្ញើអ៊ីមែល',
 
 # Recent changes
-'nchanges' => '$1 {{PLURAL:$1|á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9a\9e\94á\9f\86លាស់ប្ដូរ}}',
-'recentchanges' => 'á\9e\94á\9f\86លាស់ប្ដូរ​ថ្មីៗ',
+'nchanges' => '$1 {{PLURAL:$1|á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9a\9e\94á\9e\93á\9f\92លាស់ប្ដូរ}}',
+'recentchanges' => 'á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ​ថ្មីៗ',
 'recentchanges-legend' => 'ជម្រើសនានា​ សម្រាប់ការបង្ហាញបន្លាស់ប្ដូរថ្មីៗ',
 'recentchanges-summary' => 'តាមដានរាល់បំលាស់ប្ដូរថ្មីៗបំផុតចំពោះវិគីនៅលើទំព័រនេះ។',
 'recentchanges-feed-description' => 'តាមដាន​បន្លាស់ប្ដូរថ្មីៗ​បំផុត​នៃ​វិគី​នេះក្នុង​មតិព័ត៌មាន​នេះ​។',
@@ -1612,16 +1616,16 @@ $1",
 'recentchanges-label-minor' => 'នេះជាការកែប្រែតិចតួចមួយប៉ុណ្ណោះ',
 'recentchanges-label-bot' => 'ការកែប្រែនេះត្រូវបានធ្វើឡើងដោយរូបយន្ត',
 'recentchanges-label-unpatrolled' => 'ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ',
-'rcnote' => "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98â\80\8bá\9e\93á\9f\81á\9f\87â\80\8bá\9e\87á\9e¶â\80\8b{{PLURAL:$1|á\9f¡á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9a|'''$1'''á\9e\94á\9f\86លាស់ប្ដូរ}}​ចុងក្រោយក្នុងរយៈពេល​{{PLURAL:$2|ថ្ងៃ|'''$2'''ថ្ងៃ}}​ចុងក្រោយគិតត្រឹម$5 $4 ។",
-'rcnotefrom' => "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\93á\9e¶á\9e\93á\9e¶á\9e\82á\9e·á\9e\8fá\9e\85á\9e¶á\9e\94á\9f\8bá\9e\8fá\9e¶á\9f\86á\9e\84á\9e\96á\9e¸ '''$2''' (á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e¢á\9e\8fá\9e·á\9e\94á\9e\9aá\9e\98á\9e¶ '''$1''' á\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9a)។",
-'rclistfrom' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\94á\9f\86លាស់ប្ដូរថ្មីៗចាប់តាំងពី $1',
+'rcnote' => "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98â\80\8bá\9e\93á\9f\81á\9f\87â\80\8bá\9e\87á\9e¶â\80\8b{{PLURAL:$1|á\9f¡á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9a|'''$1'''á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ}}​ចុងក្រោយក្នុងរយៈពេល​{{PLURAL:$2|ថ្ងៃ|'''$2'''ថ្ងៃ}}​ចុងក្រោយគិតត្រឹម$5 $4 ។",
+'rcnotefrom' => "á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aá\9e\93á\9e¶á\9e\93á\9e¶á\9e\82á\9e·á\9e\8fá\9e\85á\9e¶á\9e\94á\9f\8bá\9e\8fá\9e¶á\9f\86á\9e\84á\9e\96á\9e¸ '''$2''' (á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e¢á\9e\8fá\9e·á\9e\94á\9e\9aá\9e\98á\9e¶á\9e\85á\9f\86á\9e\93á\9e½á\9e\93 '''$1''')។",
+'rclistfrom' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\94á\9e\93á\9f\92លាស់ប្ដូរថ្មីៗចាប់តាំងពី $1',
 'rcshowhideminor' => '$1កំណែប្រែ​តិចតួច',
 'rcshowhidebots' => '$1រូបយន្ត',
 'rcshowhideliu' => '$1អ្នកប្រើប្រាស់ដែលបានកត់ឈ្មោះចូល',
 'rcshowhideanons' => '$1អ្នកប្រើប្រាស់អនាមិក',
 'rcshowhidepatr' => '$1កំណែប្រែដែលបានល្បាត',
 'rcshowhidemine' => '$1កំណែប្រែរបស់ខ្ញុំ',
-'rclinks' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\94á\9f\86លាស់ប្ដូរ$1ចុងក្រោយធ្វើឡើងក្នុងរយៈពេល$2ថ្ងៃចុងក្រោយ<br />$3',
+'rclinks' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ$1ចុងក្រោយធ្វើឡើងក្នុងរយៈពេល$2ថ្ងៃចុងក្រោយ<br />$3',
 'diff' => 'ប្រៀបធៀប',
 'hist' => 'ប្រវត្តិ',
 'hide' => 'លាក់',
@@ -1633,7 +1637,7 @@ $1",
 'rc_categories' => 'កម្រិតទីតាំងចំណាត់ថ្នាក់ក្រុម(ខណ្ឌដោយសញ្ញា "|")',
 'rc_categories_any' => 'មួយណាក៏បាន',
 'rc-change-size' => '$1',
-'rc-change-size-new' => '$1 {{PLURAL:$1|á\9e\94á\9f\83\9e\94á\9f\83}} á\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\94á\9f\8bá\9e\96á\9e¸á\9e\94á\9f\86លាស់ប្ដូរ',
+'rc-change-size-new' => '$1 {{PLURAL:$1|á\9e\94á\9f\83\9e\94á\9f\83}} á\9e\94á\9e\93á\9f\92á\9e\91á\9e¶á\9e\94á\9f\8bá\9e\96á\9e¸á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ',
 'newsectionsummary' => '/* $1 */ ផ្នែកថ្មី',
 'rc-enhanced-expand' => 'បង្ហាញព័ត៌មានលំអិត (តម្រូវអោយមាន JavaScript)',
 'rc-enhanced-hide' => 'លាក់ព័ត៌មានលំអិត',
@@ -1641,7 +1645,7 @@ $1",
 
 # Recent changes linked
 'recentchangeslinked' => 'បន្លាស់ប្ដូរពាក់ព័ន្ធ',
-'recentchangeslinked-feed' => 'á\9e\94á\9f\86លាស់ប្ដូរពាក់ព័ន្ធ',
+'recentchangeslinked-feed' => 'á\9e\94á\9e\93á\9f\92លាស់ប្ដូរពាក់ព័ន្ធ',
 'recentchangeslinked-toolbox' => 'បន្លាស់ប្ដូរពាក់ព័ន្ធ',
 'recentchangeslinked-title' => 'បន្លាស់ប្ដូរ​ទាក់ទងនឹង "$1"',
 'recentchangeslinked-noresult' => 'គ្មានបន្លាស់ប្ដូរ​លើទំព័រ​ដែលត្រូវបានតភ្ជាប់ ក្នុងថេរវេលា​ដែលត្រូវបានផ្តល់ឱ្យ ។',
@@ -1657,7 +1661,7 @@ $1",
 'uploadnologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
 'uploadnologintext' => 'អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] ដើម្បីមានសិទ្ធិផ្ទុកឯកសារទាំងឡាយឡើង។',
 'upload_directory_missing' => 'ថតសំរាប់ទុកឯកសារផ្ទុកឡើង ($1) បាត់ ហើយប្រព័ន្ធបំរើការមិនអាចបង្កើតវាបានទេ។',
-'upload_directory_read_only' => 'á\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9f\86រើការមិនអាចសរសេរចូលទៅក្នុងថតសំរាប់ទុកឯកសារផ្ទុកឡើង ($1) ទេ។',
+'upload_directory_read_only' => 'á\9e\94á\9f\92á\9e\9aá\9e\96á\9f\90á\9e\93á\9f\92á\9e\92á\9e\94á\9e\98á\9f\92រើការមិនអាចសរសេរចូលទៅក្នុងថតសំរាប់ទុកឯកសារផ្ទុកឡើង ($1) ទេ។',
 'uploaderror' => 'បញ្ហាក្នុងការផ្ទុកឡើង',
 'upload-recreate-warning' => "''ប្រយ័ត្ន៖ ឯកសារដែលមានឈ្មោះដូចគ្នានេះត្រូវបានលុបចោលឬប្ដូរទីតាំង។'''
 
@@ -1682,16 +1686,16 @@ $1",
 'filename' => 'ឈ្មោះឯកសារ',
 'filedesc' => 'ចំណារពន្យល់',
 'fileuploadsummary' => 'ចំណារពន្យល់៖',
-'filereuploadsummary' => 'á\9e\94á\9f\86លាស់ប្ដូរ​ឯកសារ​៖',
+'filereuploadsummary' => 'á\9e\94á\9e\93á\9f\92លាស់ប្ដូរ​ឯកសារ​៖',
 'filestatus' => 'ស្ថានភាពរក្សាសិទ្ធិ៖',
 'filesource' => 'ប្រភព',
 'uploadedfiles' => 'ឯកសារដែលត្រូវបានផ្ទុកឡើង',
-'ignorewarning' => 'មិនខ្វល់​ការព្រមាន ហើយរក្សាទុក​ឯកសារ​តែម្តង។',
-'ignorewarnings' => 'មិនខ្វល់​ការព្រមាន​ណាមួយ',
+'ignorewarning' => 'á\9e\98á\9e·á\9e\93á\9e\81á\9f\92á\9e\9cá\9e\9bá\9f\8bâ\80\8bá\9e\96á\9e¸á\9e\80á\9e¶á\9e\9aá\9e\96á\9f\92á\9e\9aá\9e\98á\9e¶á\9e\93 á\9e á\9e¾á\9e\99á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶á\9e\91á\9e»á\9e\80â\80\8bá\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aâ\80\8bá\9e\8fá\9f\82á\9e\98á\9f\92á\9e\8fá\9e\84á\9f\94',
+'ignorewarnings' => 'á\9e\98á\9e·á\9e\93á\9e\81á\9f\92á\9e\9cá\9e\9bá\9f\8bâ\80\8bá\9e\96á\9e¸á\9e\80á\9e¶á\9e\9aá\9e\96á\9f\92á\9e\9aá\9e\98á\9e¶á\9e\93â\80\8bá\9e\8eá\9e¶á\9e\98á\9e½á\9e\99',
 'minlength1' => 'ឈ្មោះឯកសារ​ត្រូវមាន​យ៉ាងតិច​១​អក្សរ។',
 'illegalfilename' => 'ឈ្មោះឯកសារ "$1" មាន​អក្សរ​ហាមឃាត់​​ក្នុងចំណងជើងទំព័រ។ សូម​ប្តូរឈ្មោះ​ឯកសារ ហើយ​ព្យាយាមផ្ទុកវា​ឡើង​ម្តងទៀត។',
 'filename-toolong' => 'ឈ្មោះឯកសារមិនអាចវែងជាង 240 បៃទេ។',
-'badfilename' => 'ឈ្មោះឯកសារ បានត្រូវប្តូរ ជា "$1" ។',
+'badfilename' => 'ឈ្មោះឯកសារត្រូវបានប្តូរជា "$1" ។',
 'filetype-mime-mismatch' => 'កន្ទុយរបស់ឯកសារ ".$1" មិនត្រូវគ្នានឹងប្រភេទ MIME របស់ឯកសារ ($2) ទេ។',
 'filetype-badmime' => 'ឯកសារ​ប្រភេទ MIME "$1" មិនត្រូវបាន​អនុញ្ញាត​ឱ្យផ្ទុកឡើង។',
 'filetype-bad-ie-mime' => 'មិនអាចផ្ទុកឯកសារនេះឡើងបានទេ ព្រោះInternet Explorerបានរកឃើញថាឯកសារនេះជា "$1" ដែលជាប្រភេទឯកសារហាមឃាត់និងមានគ្រោះថ្នាក់ខ្លាំង។',
@@ -1700,7 +1704,7 @@ $1",
 {{PLURAL:$3|ប្រភេទឯកសារ|ប្រភេទឯកសារ}}ដែលគេចង់បានគឺ $2។',
 'filetype-banned-type' => '\'\'\'".$1"\'\'\' {{PLURAL:$4|មិនមែនជា​ប្រភេទ​ឯកសារ​ដែល​ត្រូវ​បាន​គេ​អនុញ្ញាត​ទេ|មិនមែនជា​ប្រភេទ​ឯកសារ​ដែល​ត្រូវ​បាន​គេ​អនុញ្ញាត​ទេ​}}។
 {{PLURAL:$3|ប្រភេទឯកសារ​|ប្រភេទឯកសារ​}}ដែល​ត្រូវ​បាន​គេ​អនុញ្ញាត​គឺ $2 ។',
-'filetype-missing' => 'ឯកសារ មិនមានកន្ទុយ (ដូចជា ".jpg")។',
+'filetype-missing' => 'ឯកសារគ្មានកន្ទុយ (ដូចជា ".jpg")។',
 'empty-file' => 'ឯកសារដែលអ្នកបានដាក់ស្នើគឺទទេ។',
 'file-too-large' => 'ឯកសារដែលអ្នកបានដាក់ស្នើធំពេកហើយ។',
 'filename-tooshort' => 'ឈ្មោះឯកសារខ្លីពេកហើយ។',
@@ -1762,7 +1766,7 @@ $1",
 'uploadscripted' => 'ឯកសារនេះមានកូដHTMLឬស្គ្រីបដែលអាចអោយឧបករណ៍រាវរកវិបសាយមានការយល់ច្រលំ។',
 'uploadvirus' => 'ឯកសារមានមេរោគ!
 
\9e\9fá\9f\81á\9e\85á\9e\80á\9f\92á\9e\8fá\9e¸á\9e\9bá\9f\86អិត៖ $1',
\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93á\9e\9bá\9e\98á\9f\92អិត៖ $1',
 'uploadjava' => 'ឯកសារនេះជាប្រភេទ ZIP ដែលមានផ្ទុក Java .class។
 ការផ្ទុកឡើងឯកសារ Java ត្រូវបានហាមឃាត់ ព្រោះវាអាចធ្វើមានបញ្ហាក្នុងការឆ្លងកុងត្រូលសុវត្តិភាព។',
 'upload-source' => 'ឯកសារប្រភព',
@@ -1791,8 +1795,8 @@ JD # Jenoptik
 MGP # ម៉ាក Pentax
 PICT # ផ្សេង​ៗ​
   #</pre> <!-- leave this line exactly as it is -->',
-'upload-success-subj' => 'á\9e\95á\9f\92á\9e\91á\9e»á\9e\80á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e¡á\9e¾á\9e\84á\9e\94á\9e¶á\9e\93á\9e\9fá\9f\86រេច',
-'upload-success-msg' => 'á\9e\80á\9e¶á\9e\9aá\9e\95á\9f\92á\9e\91á\9e»á\9e\80á\9e¡á\9e¾á\9e\84á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\96á\9e¸ [$2] á\9e\94á\9e¶á\9e\93á\9e\91á\9e\91á\9e½á\9e\9bá\9e\87á\9f\84á\9e\82á\9e\87á\9f\90យ។ អ្នកអាចរកវាបាននៅទៅនេះ៖ [[:{{ns:file}}:$1]]',
+'upload-success-subj' => 'á\9e\95á\9f\92á\9e\91á\9e»á\9e\80á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e¡á\9e¾á\9e\84á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92រេច',
+'upload-success-msg' => 'á\9e\80á\9e¶á\9e\9aá\9e\95á\9f\92á\9e\91á\9e»á\9e\80á\9e¡á\9e¾á\9e\84á\9e\9aá\9e\94á\9e\9fá\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\96á\9e¸ [$2] á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92á\9e\9aá\9f\81á\9e\85á\9e á\9e¾យ។ អ្នកអាចរកវាបាននៅទៅនេះ៖ [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => 'បញ្ហាក្នុងការផ្ទុកឡើង',
 'upload-failure-msg' => 'មានបញ្ហាមួយជាមួយការផ្ទុកឡើងរបស់អ្នកពី [$2]៖
 
@@ -1805,14 +1809,14 @@ $1',
 'upload-file-error' => 'បញ្ហាផ្នែកខាងក្នុង',
 'upload-file-error-text' => 'បញ្ហាផ្នែកខាងក្នុងបានកើតឡើង​ នៅពេលព្យាយាមបង្កើតឯកសារបណ្ដោះអាសន្នមួយ​នៅក្នុងម៉ាស៊ីនបម្រើការ។
 
\9e\9fá\9e¼á\9e\98á\9e\91á\9f\86á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\91á\9f\86á\9e\93á\9e\84[[Special:ListUsers/sysop|á\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e\97á\9e·á\9e\94á\9e¶á\9e\9b]]á\9f\94',
+សូមទំនាក់ទំនង[[Special:ListUsers/sysop|អភិបាល]]។',
 'upload-misc-error' => 'បញ្ហាក្នុងការផ្ទុកឡើង',
 'upload-misc-error-text' => 'បញ្ហាដែលមិនស្គាល់មួយបានកើតឡើងនៅក្នុងកំឡុងពេលផ្ទុកឡើង។
 
 ចូរផ្ទៀងផ្ទាត់ថា URL គឺមានសុពលភាពហើយអាចដំណើរការ រួចហើយ​ព្យាយាមម្តងទៀត។
 
\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e\94á\9e\89á\9f\92á\9e á\9e¶á\9e\93á\9f\85á\9e\8fá\9f\82á\9e\80á\9e¾á\9e\8fá\9e¡á\9e¾á\9e\84 á\9e\9fá\9e¼á\9e\98á\9e\91á\9f\86á\9e\93á\9e¶á\9e\80á\9f\8bá\9e\91á\9f\86á\9e\93á\9e\84[[Special:ListUsers/sysop|អ្នកអភិបាល]]។',
-'upload-too-many-redirects' => 'URLá\9e\93á\9f\81á\9f\87á\9e\98á\9e¶á\9e\93á\9e\8fá\9f\86á\9e\93ភ្ជាប់បញ្ជូនបន្តច្រើនពេកហើយ',
\9e\94á\9f\92á\9e\9aá\9e\9fá\9e·á\9e\93á\9e\94á\9e¾á\9e\94á\9e\89á\9f\92á\9e á\9e¶á\9e\93á\9f\85á\9e\8fá\9f\82á\9e\80á\9e¾á\9e\8fá\9e¡á\9e¾á\9e\84 á\9e\9fá\9e¼á\9e\98á\9e\91á\9e¶á\9e\80á\9f\8bá\9e\91á\9e\84á\9e\91á\9f\85[[Special:ListUsers/sysop|អ្នកអភិបាល]]។',
+'upload-too-many-redirects' => 'URLá\9e\93á\9f\81á\9f\87á\9e\98á\9e¶á\9e\93á\9e\8fá\9f\86á\9e\8eភ្ជាប់បញ្ជូនបន្តច្រើនពេកហើយ',
 'upload-unknown-size' => 'មិនដឹងទំហំ',
 'upload-http-error' => 'មានកំហុសHTTPមួយបានកើតឡើង៖ $1',
 
@@ -1832,7 +1836,7 @@ $1',
 'backend-fail-maxsize' => 'មិនអាចសរសេរឯកសារ "$1" បានទេពីព្រោះវាមានទំហំធំជាង {{PLURAL:$2|មួយបៃ|$2 បៃ}}.',
 
 # Special:UploadStash
-'uploadstash-errclear' => 'á\9e\80á\9e¶á\9e\9aá\9e\9fá\9f\86á\9e¢á\9e¶á\9e\8fá\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9fá\9f\86រេច។',
+'uploadstash-errclear' => 'á\9e\80á\9e¶á\9e\9aá\9e\9fá\9e\98á\9f\92á\9e¢á\9e¶á\9e\8fá\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92រេច។',
 'uploadstash-refresh' => 'ផ្ទុកបញ្ជីឯកសារឡើងវិញ',
 
 # img_auth script messages
@@ -1859,11 +1863,11 @@ $1',
 អ្នកគួរតែសាកល្បងនៅពេលដែលវិបសាយនេះមិនសូវរវល់។',
 
 'license' => 'អាជ្ញាប័ណ្ណ',
-'license-header' => 'á\9e\8aá\9e¶á\9e\80á\9f\8bâ\80\8bá\9e\87á\9e​អាជ្ញាប័ណ្ណ',
+'license-header' => 'á\9e\80á\9e¶á\9e\9aá\9e\8aá\9e¶á\9e\80á\9f\8b​អាជ្ញាប័ណ្ណ',
 'nolicense' => 'គ្មាន',
 'license-nopreview' => '(មិនទាន់មានការបង្ហាញការមើលជាមុនទេ)',
-'upload_source_url' => ' (URL ត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)',
-'upload_source_file' => ' (ឯកសារក្នុងកុំព្យូទ័ររបស់អ្នក)',
+'upload_source_url' => '(URL ត្រឹមត្រូវនិងបើកចំហជាសាធារណៈ)',
+'upload_source_file' => '(ឯកសារក្នុងកុំព្យូទ័ររបស់អ្នក)',
 
 # Special:ListFiles
 'listfiles-summary' => 'ទំព័រពិសេស​នេះ​បង្ហាញ​គ្រប់​ឯកសារ​ដែល​បានផ្ទុកឡើង។
@@ -1897,7 +1901,7 @@ $1',
 'filehist-filesize' => 'ទំហំឯកសារ',
 'filehist-comment' => 'យោបល់',
 'filehist-missing' => 'ឯកសារបាត់បង់',
-'imagelinks' => 'á\9e\94á\9f\86á\9e\9aá\9e¾á\9e\94á\9f\86រាស់ឯកសារ',
+'imagelinks' => 'á\9e\94á\9e\98á\9f\92á\9e\9aá\9e¾á\9e\94á\9e\98á\9f\92រាស់ឯកសារ',
 'linkstoimage' => '{{PLURAL:$1|ទំព័រ​|$1 ទំព័រ}} ខាងក្រោម​មានតំណភ្ជាប់មក​ឯកសារនេះ ៖',
 'linkstoimage-more' => 'មាន​​{{PLURAL:$1|តំណ​ភ្ជាប់ទំព័រ​}}ច្រើន​ជាង​ $1 មក​កាន់​ឯកសារ​នេះ​។
 បញ្ជី​នេះ​បង្ហាញ​អំពី​{{PLURAL:$1|តំណ​ភ្ជាប់ទំព័រដំបូង​​|តំណ​ភ្ជាប់ទំព័រ $1ដំបូង​}}មក​កាន់​ឯកសារ​នេះប៉ុណ្ណោះ​​។
@@ -1905,14 +1909,18 @@ $1',
 'nolinkstoimage' => 'គ្មានទំព័រណាមួយដែលតភ្ជាប់មកឯកសារនេះទេ។',
 'morelinkstoimage' => 'មើល [[Special:WhatLinksHere/$1|តំណភ្ជាប់បន្ថែមទៀត]] ដែលតភ្ជាប់មកកាន់ឯកសារនេះ។',
 'linkstoimage-redirect' => '$1 (ឯកសារបញ្ជូនបន្ត) $2',
-'duplicatesoffile' => '{{PLURAL:$1|file is a duplicate|$1 á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aâ\80\8bá\9e\87á\9e¶á\9e\85á\9f\92á\9e\94á\9e¶á\9e\94á\9f\8bá\9e\85á\9e\98á\9f\92á\9e\9bá\9e\84}}á\9e\8aá\9e¼á\9e\85á\9e\8fá\9e\91á\9f\85â\80\8bá\9e\93á\9f\83â\80\8bá\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aâ\80\8bá\9e\93á\9f\81á\9f\87â\80\8b ([[Special:FileDuplicateSearch/$2|á\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93â\80\8bá\9e\9bá\9f\86អិត]])​៖',
+'duplicatesoffile' => '{{PLURAL:$1|file is a duplicate|$1 á\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aâ\80\8bá\9e\87á\9e¶á\9e\85á\9f\92á\9e\94á\9e¶á\9e\94á\9f\8bá\9e\85á\9e\98á\9f\92á\9e\9bá\9e\84}}á\9e\8aá\9e¼á\9e\85á\9e\8fá\9e\91á\9f\85â\80\8bá\9e\93á\9f\83â\80\8bá\9e¯á\9e\80á\9e\9fá\9e¶á\9e\9aâ\80\8bá\9e\93á\9f\81á\9f\87â\80\8b ([[Special:FileDuplicateSearch/$2|á\9e\96á\9f\90á\9e\8fá\9f\8cá\9e\98á\9e¶á\9e\93â\80\8bá\9e\9bá\9e\98á\9f\92អិត]])​៖',
 'sharedupload' => 'ឯកសារ​នេះ​​បាន​មក​ពី $1 និង​អាច​ត្រូវ​បាន​ប្រើប្រាស់​នៅ​គម្រោង​ដទៃ​ទៀត។',
 'sharedupload-desc-there' => 'ឯកសារ​នេះ​មក​ពី ​$1 និង​អាច​ត្រូវ​បាន​ប្រើប្រាស់​ដោយ​គម្រោង​ផ្សេង​ៗ​ដទៃ​ទៀត​។
 សូម​មើល​[ទំព័របរិយាយ​ឯកសារ​ $2] សម្រាប់​ព័ត៌មាន​បន្ថែម​។',
-'sharedupload-desc-here' => 'ឯកសារនេះមានប្រភពមកពី $1  និងអាចត្រូវបានប្រើដោយគំរោងដ៏ទៃទៀត។
-ការពណ៌នានៅលើ [$2 ទំព័រពណ៌នា]អំពីវា មានបង្ហាញខាងក្រោមនេះ។',
+'sharedupload-desc-here' => 'ឯកសារនេះមានប្រភពមកពី $1  និងអាចត្រូវបានប្រើដោយគម្រោងដ៏ទៃទៀត។
+ការពណ៌នានៅលើ[$2 ទំព័រពណ៌នា]អំពីវា មានបង្ហាញខាងក្រោមនេះ។',
+'sharedupload-desc-edit' => 'ឯកសារនេះមានប្រភពមកពី $1  និងអាចត្រូវបានប្រើដោយគម្រោងដ៏ទៃទៀត។
+ប្រហែលជាអ្នកចង់កែប្រែការពណ៌នានៅលើ[$2 ទំព័រពណ៌នា]អំពីវានៅទីនោះ។',
+'sharedupload-desc-create' => 'ឯកសារនេះមានប្រភពមកពី $1  និងអាចត្រូវបានប្រើដោយគម្រោងដ៏ទៃទៀត។
+ប្រហែលជាអ្នកកែប្រែការពណ៌នានៅលើ[$2 ទំព័រពណ៌នា]អំពីវានៅទីនោះ។',
 'filepage-nofile' => 'គ្មានឯកសារ​ដែលមានឈ្មោះនេះទេ។',
-'filepage-nofile-link' => 'គ្មានរូបភាពដែលមានឈ្មោះនេះទេ។ ប៉ុន្តែអ្នកអាច [$1 ផ្ទុក​វា​ឡើង​] ។',
+'filepage-nofile-link' => 'គ្មានរូបភាពដែលមានឈ្មោះនេះទេ។ ប៉ុន្តែអ្នកអាច[$1 ផ្ទុក​វា​ឡើង​] ។',
 'uploadnewversion-linktext' => 'ផ្ទុកឡើងមួយកំណែថ្មីនៃឯកសារនេះ',
 'shared-repo-from' => 'ពី $1',
 'shared-repo' => 'ឃ្លាំងរួម​',
@@ -1989,7 +1997,7 @@ $1',
 'statistics-edits' => 'ការកែប្រែទំព័រចាប់តាំងពី{{SITENAME}}ត្រូវបានដំឡើង',
 'statistics-edits-average' => 'កំណែប្រែជាមធ្យមក្នុងមួយទំព័រ',
 'statistics-views-total' => 'ចំនួនការចូលមើលសរុប',
-'statistics-views-total-desc' => 'á\9e\98á\9e·á\9e\93á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\80á\9e¶á\9e\9aá\9e\85á\9e¼á\9e\9bá\9e\98á\9e¾á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\98á\9e·á\9e\93á\9e\98á\9e¶á\9e\93និងទំព័រពិសេសៗទេ',
+'statistics-views-total-desc' => 'á\9e\98á\9e·á\9e\93á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bá\9e\80á\9e¶á\9e\9aá\9e\85á\9e¼á\9e\9bá\9e\98á\9e¾á\9e\9bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8aá\9f\82á\9e\9bá\9e\82á\9f\92á\9e\98á\9e¶á\9e\93á\9e\9aá\9e¼á\9e\94á\9e\9aá\9e¶á\9e\84និងទំព័រពិសេសៗទេ',
 'statistics-views-peredit' => 'ចំនួនការចូលមើលក្នុងមួយកំណែប្រែ',
 'statistics-users' => '[[Special:ListUsers|អ្នកប្រើប្រាស់]]ដែលបានចុះឈ្មោះ',
 'statistics-users-active' => 'អ្នកប្រើប្រាស់សកម្ម',
@@ -2073,7 +2081,7 @@ $1',
 'protectedtitlesempty' => 'មិន​មាន​ចំណងជើង​ណា​ដែល​ត្រូវ​បាន​ការពារ​ជាមួយនឹង​ប៉ារ៉ាម៉ែត​ទាំងនេះ​ទេ​នាពេលថ្មីៗនេះ។',
 'listusers' => 'បញ្ជីអ្នកប្រើប្រាស់',
 'listusers-editsonly' => 'បង្ហាញតែអ្នកប្រើប្រាស់ដែលបានកែប្រែអត្ថបទប៉ុណ្ណោះ',
-'listusers-creationsort' => 'á\9e\8fá\9f\86រៀបតាមលំដាប់កាលបរិច្ឆេទបង្កើត',
+'listusers-creationsort' => 'á\9e\8fá\9e\98á\9f\92រៀបតាមលំដាប់កាលបរិច្ឆេទបង្កើត',
 'usereditcount' => '$1 {{PLURAL:$1|កំណែប្រែ|កំណែប្រែ}}',
 'usercreated' => '{{GENDER:$3|បានបង្កើត}}នៅ$1  $2',
 'newpages' => 'ទំព័រថ្មីៗ',
@@ -2104,7 +2112,7 @@ $1',
 
 # Special:Log
 'specialloguserlabel' => 'អ្នកប្រព្រឹត្តិ៖',
-'speciallogtitlelabel' => 'á\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85 (á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\8fបទឬអត្តនាមអ្នកប្រើប្រាស់)៖',
+'speciallogtitlelabel' => 'á\9e\82á\9f\84á\9e\9bá\9e\8aá\9f\85 (á\9e\85á\9f\86á\9e\8eá\9e\84á\9e\87á\9e¾á\9e\84á\9e¢á\9e\8fá\9f\92á\9e\90បទឬអត្តនាមអ្នកប្រើប្រាស់)៖',
 'log' => 'កំណត់ហេតុ',
 'all-logs-page' => 'កំណត់ហេតុសាធារណៈទាំងអស់',
 'alllogstext' => 'ការបង្ហាញកំណត់ហេតុទាំងអស់របស់{{SITENAME}}។
@@ -2128,8 +2136,8 @@ $1',
 'allpagesnext' => 'បន្ទាប់',
 'allpagessubmit' => 'ទៅ',
 'allpagesprefix' => 'បង្ហាញទំព័រដែលចាប់ផ្ដើមដោយ ៖',
-'allpagesbadtitle' => 'ចំណងជើង​ទំព័រ​ដែល​ត្រូវ​បាន​ផ្តល់ឱ្យ​គឺ​គ្មាន​សុពលភាព​ឬក៏​មាន​បុព្វបទ​ដែល​មាន​អន្តរភាសា​ឬអ​ន្តរវីគី​។ ប្រហែលជា​វា​មាន​អក្សរ​មួយ​ឬ​ច្រើន ដែល​មិន​អាច​ត្រូវ​ប្រើ​នៅក្នុង​ចំណងជើង​។',
-'allpages-bad-ns' => '{{SITENAME}}á\9e\98á\9e·á\9e\93á\9e\98á\9e¶á\9e\93á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87á\9e\94á\9f\92á\9e\9aá\9e\97á\9f\81á\9e\91"$1"ទេ។',
+'allpagesbadtitle' => 'ចំណងជើង​ទំព័រ​ដែល​ត្រូវ​បាន​ផ្តល់ឱ្យ​គឺ​គ្មាន​សុពលភាព​ឬក៏​មាន​បុព្វបទ​ដែល​មាន​អន្តរភាសា​ឬអ​ន្តរវីគី​។ ប្រហែលជា​វា​មាន​អក្សរ​មួយ​ឬ​ច្រើន ដែលគេហាមមិនឱ្យប្រើ​នៅក្នុង​ចំណងជើង​។',
+'allpages-bad-ns' => '{{SITENAME}}á\9e\82á\9f\92á\9e\98á\9e¶á\9e\93á\9e\9bá\9f\86á\9e á\9e\88á\9f\92á\9e\98á\9f\84á\9f\87"$1"ទេ។',
 'allpages-hide-redirects' => 'លាក់ការបញ្ជូនបន្ត',
 
 # SpecialCachedPage
@@ -2162,7 +2170,7 @@ $1',
 # Special:ListUsers
 'listusersfrom' => 'បង្ហាញអ្នកប្រើប្រាស់ចាប់ផ្តើមពី៖',
 'listusers-submit' => 'បង្ហាញ',
-'listusers-noresult' => 'á\9e\98á\9e·á\9e\93á\9e\98á\9e¶á\9e\93á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bá\9e\93á\9f\85á\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9f\92á\9e\9aá\9e»á\9e\98នេះទេ។',
+'listusers-noresult' => 'á\9e\9aá\9e\80á\9e\98á\9e·á\9e\93á\9e\83á\9e¾á\9e\89á\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8bនេះទេ។',
 'listusers-blocked' => '(ស្ថិតក្រោមការហាមឃាត់)',
 
 # Special:ActiveUsers
@@ -2171,7 +2179,7 @@ $1',
 'activeusers-count' => '{{PLURAL:$1|សកម្មភាព|សកម្មភាព}}ចំនួន$1 ក្នុងរយៈពេល{{PLURAL:$3|១ថ្ងៃ|$3 ថ្ងៃ}}ចុងក្រោយ',
 'activeusers-from' => 'បង្ហាញអត្តនាមផ្ដើមដោយ៖',
 'activeusers-hidebots' => 'លាក់រូបយន្ត',
-'activeusers-hidesysops' => 'á\9e\9bá\9e¶á\9e\80á\9f\8bá\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e\97á\9e·á\9e\94á\9e¶á\9e\9b',
+'activeusers-hidesysops' => 'លាក់អភិបាល',
 'activeusers-noresult' => 'អ្នកប្រើប្រាស់​រកមិនឃើញ​។​',
 
 # Special:ListGroupRights
@@ -2192,8 +2200,8 @@ $1',
 'listgrouprights-addgroup-self-all' => 'បន្ថែម​ក្រុម​ទាំងអស់​ទៅ​គណនី​ផ្ទាល់ខ្លួន​',
 'listgrouprights-removegroup-self-all' => 'យក​ចេញ​​ក្រុម​ទាំងអស់​ពី​​គណនី​ផ្ទាល់ខ្លួន​',
 
-# E-mail user
-'mailnologin' => 'á\9e\98á\9e·á\9e\93មានអាសយដ្ឋានផ្ញើទេ',
+# Email user
+'mailnologin' => 'á\9e\82á\9f\92មានអាសយដ្ឋានផ្ញើទេ',
 'mailnologintext' => 'អ្នកត្រូវតែ [[Special:UserLogin|កត់ឈ្មោះចូល]] និង មានអាសយដ្ឋានអ៊ីមែលមានសុពលភាពមួយ ក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នក ដើម្បីមានសិទ្ធិផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ដទៃទៀត។',
 'emailuser' => 'ផ្ញើអ៊ីមែល​ទៅកាន់​អ្នក​ប្រើប្រាស់នេះ',
 'emailuser-title-target' => 'ផ្ញើសារទៅកាន់ {{GENDER:$1|អ្នកប្រើប្រាស់}} នេះ',
@@ -2209,7 +2217,7 @@ $1',
 'noemailtext' => 'អ្នកប្រើប្រាស់នេះមិនបានផ្ដល់អាសយដ្ឋានអ៊ីមែលដែលមានសុពលភាពទេ។',
 'nowikiemailtitle' => 'មិនអនុញ្ញាតអោយប្រើអ៊ីមែល',
 'nowikiemailtext' => 'អ្នក​ប្រើប្រាស់​នេះ​បាន​ជ្រើសរើស​មិន​ទទួល​អ៊ីមែល​ពីអ្នកប្រើប្រាស់​ដទៃ​ទៀត​។',
-'emailnotarget' => 'á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98á\9e¢á\9f\92á\9e\93á\9e\80á\9e\91á\9e\91á\9e½á\9e\9bá\9e\98á\9e·á\9e\93á\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e¬á\9e\87á\9e¶á\9e¢á\9e\8fá\9f\92á\9e\8fá\9e\93á\9e¶á\9e\98á\9e\8aá\9f\82á\9e\9bá\9e\82á\9f\92á\9e\98á\9e¶á\9e\93á\9f\94',
+'emailnotarget' => 'អត្តនាមអ្នកទទួលមិនត្រឹមត្រូវឬគ្មាន។',
 'emailtarget' => 'វាយបញ្ចូលអត្តនាមអ្នកទទួល',
 'emailusername' => 'អត្តនាម៖',
 'emailusernamesubmit' => 'ដាក់ស្នើ',
@@ -2232,7 +2240,7 @@ $1',
 # Watchlist
 'watchlist' => 'បញ្ជីតាមដាន',
 'mywatchlist' => 'បញ្ជីតាមដាន​',
-'watchlistfor2' => 'á\9e\9fá\9f\86រាប់ $1 $2',
+'watchlistfor2' => 'á\9e\9fá\9e\98á\9f\92រាប់ $1 $2',
 'nowatchlist' => 'គ្មានអ្វីនៅក្នុងបញ្ជីតាមដានរបស់អ្នកទេ។',
 'watchlistanontext' => 'សូម $1 ដើម្បី​មើល​ឬ​កែប្រែ​របស់​ក្នុង​បញ្ជីតាមដាន​របស់អ្នក។',
 'watchnologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
@@ -2267,8 +2275,8 @@ $1',
 'enotif_mailer' => 'ភ្នាក់ងារផ្ញើអ៊ីមែលផ្ដល់ដំណឹងរបស់ {{SITENAME}}',
 'enotif_reset' => 'កត់សម្គាល់រាល់គ្រប់ទំព័រដែលបានចូលមើល',
 'enotif_impersonal_salutation' => 'អ្នកប្រើប្រាស់ {{SITENAME}}',
-'enotif_lastvisited' => 'á\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99 $1 á\9e\85á\9f\86á\9e\96á\9f\84á\9f\87á\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9a á\9e\8fá\9e¶á\9f\86á\9e\84á\9e\96á\9e¸á\9e\96á\9f\81á\9e\9bá\9e\85á\9e¼á\9e\9bá\9e\98á\9e¾á\9e\9b ចុងក្រោយ។',
-'enotif_lastdiff' => 'á\9e\9fá\9e¼á\9e\98á\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99$1á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\98á\9e¾á\9e\9bá\9e\94á\9f\86លាស់ប្តូរនេះ។',
+'enotif_lastvisited' => 'á\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99 $1 á\9e\9fá\9e\98á\9f\92á\9e\9aá\9e¶á\9e\94á\9f\8bá\9e\82á\9f\92á\9e\9aá\9e\94á\9f\8bá\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8fá\9e¼á\9e\9aá\9e\8fá\9e¶á\9f\86á\9e\84á\9e\96á\9e¸á\9e\96á\9f\81á\9e\9bá\9e\85á\9e¼á\9e\9bá\9e\98á\9e¾á\9e\9bចុងក្រោយ។',
+'enotif_lastdiff' => 'á\9e\9fá\9e¼á\9e\98á\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99$1á\9e\8aá\9e¾á\9e\98á\9f\92á\9e\94á\9e¸á\9e\98á\9e¾á\9e\9bá\9e\94á\9e\93á\9f\92លាស់ប្តូរនេះ។',
 'enotif_anon_editor' => 'អ្នកប្រើប្រាស់អនាមិក $1',
 'enotif_body' => 'ជូនចំពោះ $WATCHINGUSERNAME ជាទីរាប់អាន,
 
@@ -2319,8 +2327,8 @@ $UNWATCHURL
 'historywarning' => "'''ប្រយ័ត្ន​៖''' ទំព័រដែលអ្នកបំរុងនឹងលុប មានប្រវត្តិ​ចំនួនប្រហែល $1 {{PLURAL:$1|កំណែ|កំណែ}}៖",
 'confirmdeletetext' => 'អ្នកប្រុងនឹងលុបចោលទាំងស្រុង នូវទំព័រមួយដោយរួមបញ្ចូលទាំងប្រវត្តិកែប្រែរបស់វាផង។
 សូមអ្នកអះអាងថា អ្នកពិតជាមានចេតនាធ្វើបែបហ្នឹង និងថាអ្នកបានយល់ច្បាស់ពីផលវិបាកទាំងឡាយដែលអាចកើតមាន និង​សូមអះអាងថា អ្នកធ្វើស្របតាម [[{{MediaWiki:Policy-url}}|គោលការណ៍]]។',
-'actioncomplete' => 'á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\9aá\9e½á\9e\85á\9e\9aá\9e¶á\9e\9bá\9f\8bá\9e\87á\9e¶á\9e\9fá\9f\92á\9e\90á\9e¶á\9e\96á\9e\9a',
-'actionfailed' => 'á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96â\80\8bá\9e\94á\9e\9aá\9e¶á\9e\87á\9f\90á\9e\99',
+'actioncomplete' => 'á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92á\9e\9aá\9f\81á\9e\85',
+'actionfailed' => 'á\9e\9fá\9e\80á\9e\98á\9f\92á\9e\98á\9e\97á\9e¶á\9e\96â\80\8bá\9e\98á\9e·á\9e\93á\9e\94á\9e¶á\9e\93á\9e\9fá\9e\98á\9f\92á\9e\9aá\9f\81á\9e\85',
 'deletedtext' => '"$1"ត្រូវបានលុបចោលរួចហើយ។
 
 សូមមើល$2សំរាប់បញ្ជីនៃការលុបចោលនាពេលថ្មីៗ។',
@@ -2843,7 +2851,7 @@ $1',
 'tooltip-pt-mytalk' => 'ទំព័រពិភាក្សា​របស់អ្នក​',
 'tooltip-pt-anontalk' => 'ការពិភាក្សាអំពីកំណែប្រែដែល​ធ្វើ​ឡើង​ចេញ​ពីអាសយដ្ឋាន IP នេះ',
 'tooltip-pt-preferences' => 'ចំណង់ចំណូលចិត្ត',
-'tooltip-pt-watchlist' => 'á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸â\80\8bá\9e\93á\9f\83â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\86á\9e\96á\9e»á\9e\84â\80\8bá\9e\8fá\9f\92á\9e\9aá\9e½á\9e\8fá\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99â\80\8bá\9e\9aá\9e\80â\80\8bá\9e\94á\9f\86លាស់ប្ដូរ',
+'tooltip-pt-watchlist' => 'á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸â\80\8bá\9e\93á\9f\83â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\80á\9f\86á\9e\96á\9e»á\9e\84â\80\8bá\9e\8fá\9f\92á\9e\9aá\9e½á\9e\8fá\9e\96á\9e·á\9e\93á\9e·á\9e\8fá\9f\92á\9e\99â\80\8bá\9e\9aá\9e\80â\80\8bá\9e\94á\9e\93á\9f\92លាស់ប្ដូរ',
 'tooltip-pt-mycontris' => 'បញ្ជី​នៃ​ការរួមចំណែក​របស់​អ្នក',
 'tooltip-pt-login' => 'អ្នកត្រូវបានលើកទឹកចិត្តឱ្យកត់ឈ្មោះចូល។ ប៉ុន្តែនេះមិនមែនជាការបង្ខំទេ។',
 'tooltip-pt-anonlogin' => 'អ្នកត្រូវបានលើកទឹកចិត្តឱ្យកត់ឈ្មោះចូល មិនមែនជាការបង្ខំទេ។',
@@ -2851,7 +2859,7 @@ $1',
 'tooltip-ca-talk' => 'ការពិភាក្សា​អំពីទំព័រខ្លឹមសារ​នេះ',
 'tooltip-ca-edit' => "អ្នកអាច​កែប្រែ​ទំព័រ​នេះ ។ សូមប្រើប្រាស់​ប៊ូតុង 'បង្ហាញការមើលមុន' មុននឹង​រក្សាទុក​វា  ។",
 'tooltip-ca-addsection' => 'ចាប់​ផ្ដើមផ្នែកថ្មីមួយក្នុងទំព័រពិភាក្សានេះ',
-'tooltip-ca-viewsource' => 'ទំព័រ​នេះ​បានត្រូវការពារ ។ អ្នកអាច​មើល​អក្សរកូដ​របស់វា ។',
+'tooltip-ca-viewsource' => 'ទំព័រ​នេះ​បានត្រូវការពារ ។ អ្នកអាច​មើល​អក្សរកូដ​របស់វាបាន ។',
 'tooltip-ca-history' => 'កំណែកន្លងមករបស់ទំព័រនេះ ។',
 'tooltip-ca-protect' => 'ការពារ​ទំព័រនេះ',
 'tooltip-ca-unprotect' => 'ផ្លាស់ប្ដូរការការពារទំព័រនេះ',
@@ -2866,7 +2874,7 @@ $1',
 'tooltip-p-logo' => 'ទំព័រដើម',
 'tooltip-n-mainpage' => 'ចូលមើលទំព័រដើម',
 'tooltip-n-mainpage-description' => 'ចូលមើលទំព័រដើម',
-'tooltip-n-portal' => 'អំពីគម្រោង វិធីប្រើប្រាស់ និង ការស្វែងរកព័ត៌មាន',
+'tooltip-n-portal' => 'អំពីគម្រោង វិធីប្រើប្រាស់ និងការស្វែងរកព័ត៌មាន',
 'tooltip-n-currentevents' => 'រកមើលព័ត៌មានទាក់ទិននឹងព្រឹត្តិការណ៍បច្ចុប្បន្ន',
 'tooltip-n-recentchanges' => 'បញ្ជី​នៃ​បន្លាស់ប្ដូរថ្មីៗ​នៅក្នុងវិគីនេះ',
 'tooltip-n-randompage' => 'ផ្ទុក​ទំព័រចៃដន្យ​មួយទំព័រ',
@@ -2892,18 +2900,18 @@ $1',
 'tooltip-ca-nstab-help' => 'មើលទំព័រជំនួយ',
 'tooltip-ca-nstab-category' => 'មើល​ទំព័រ​ចំណាត់ថ្នាក់ក្រុម',
 'tooltip-minoredit' => "ចំណាំ​កំណែប្រែនេះ​ថាជា 'កំណែប្រែ​តិចតួច'",
-'tooltip-save' => 'á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶á\9e\94á\9f\86លាស់ប្ដូររបស់អ្នកទុក',
-'tooltip-preview' => 'មើលមុន​បំលាស់ប្ដូរ​របស់អ្នក។ សូមប្រើប្រាស់​វា​មុននឹង​រក្សាទុក!',
-'tooltip-diff' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\94á\9f\86á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9e¶á\9e\93á\9e\92á\9f\92á\9e\9cá\9e¾â\80\8bâ\80\8bá\9e\85á\9f\86á\9e\96á\9f\84á\9f\87á\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91á\9f\94',
+'tooltip-save' => 'á\9e\9aá\9e\80á\9f\92á\9e\9fá\9e¶á\9e\94á\9e\93á\9f\92លាស់ប្ដូររបស់អ្នកទុក',
+'tooltip-preview' => 'មើល​បន្លាស់ប្ដូរ​របស់អ្នកជាមុន។ សូមប្រើប្រាស់​វា​មុននឹង​រក្សាទុក!',
+'tooltip-diff' => 'á\9e\94á\9e\84á\9f\92á\9e á\9e¶á\9e\89â\80\8bá\9e\94á\9e\93á\9f\92á\9e\9bá\9e¶á\9e\9fá\9f\8bá\9e\94á\9f\92á\9e\8aá\9e¼á\9e\9aâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e\94á\9e¶á\9e\93á\9e\92á\9f\92á\9e\9cá\9e¾â\80\8bâ\80\8bá\9e\9bá\9e¾á\9e¢á\9e\8fá\9f\92á\9e\90á\9e\94á\9e\91',
 'tooltip-compareselectedversions' => 'មើលភាពខុសគ្នា​រវាងកំណែ​ទាំង២របស់ទំព័រ​នេះ។',
 'tooltip-watch' => 'បន្ថែម​ទំព័រនេះ​ទៅ​បញ្ជីតាមដាន​របស់អ្នក',
 'tooltip-recreate' => 'បង្កើតទំព័រនេះឡើងវិញ ទោះបីជាវាបានត្រូវលុបចេញក៏ដោយ',
 'tooltip-upload' => 'ចាប់ផ្តើមផ្ទុកឡើងឯកសារ',
 'tooltip-rollback' => '"ត្រឡប់​"កំណែ​ប្រែ​ធ្វើឡើងដោយអ្នក​រួម​ចំណែក​ចុង​ក្រោយ​គេ ទៅកំណែប្រែមុននោះវិញ​ ដោយគ្រាន់​តែ​ចុច​មួយ​ច្នុចប៉ុណ្ណោះ​',
 'tooltip-undo' => '"មិន​ធ្វើ​វិញ"​ ត្រឡប់​កំណែ​នេះឡើង​វិញ​ និង​បើក​បែប​បទ​កែប្រែ​ក្នុង​ទម្រង់​មើល​ជាមុន​។
\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\94á\9e\93á\9f\92á\9e\90á\9f\82á\9e\98â\80\8bá\9e\98á\9e¼á\9e\9bâ\80\8bá\9e á\9f\81á\9e\8fá\9e»â\80\8bá\9e\93á\9f\85â\80\8bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8bá\9e\9fá\9f\81á\9e\85á\9e\80á\9f\92á\9e\8aá\9e¸â\80\8bá\9e\9fá\9e\84á\9f\92á\9e\81á\9f\81á\9e\94​បាន។',
\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\94á\9e\93á\9f\92á\9e\90á\9f\82á\9e\98â\80\8bá\9e\98á\9e¼á\9e\9bâ\80\8bá\9e á\9f\81á\9e\8fá\9e»â\80\8bá\9e\93á\9f\85â\80\8bá\9e\80á\9f\92á\9e\93á\9e»á\9e\84â\80\8bá\9e\85á\9f\86á\9e\8eá\9e¶á\9e\9aá\9e\96á\9e\93á\9f\92á\9e\99á\9e\9bá\9f\8b​បាន។',
 'tooltip-preferences-save' => 'រក្សាទុកចំណង់ចំណូលចិត្ត',
-'tooltip-summary' => 'á\9e\94á\9e\89á\9f\92á\9e\85á\9e¼á\9e\9bចំណារពន្យល់ថ្មីមួយ',
+'tooltip-summary' => 'á\9e\9fá\9e\9aá\9e\9fá\9f\81á\9e\9aចំណារពន្យល់ថ្មីមួយ',
 
 # Stylesheets
 'common.css' => '/* CSS បានដាក់ទីនេះនឹងមានអនុភាពលើគ្រប់សំបកទាំងអស់ */',
@@ -3023,7 +3031,7 @@ $1',
 'file-info' => 'ទំហំឯកសារ៖ $1, ប្រភេទ MIME ៖ $2',
 'file-info-size' => '$1 × $2 ភីកសែល ទំហំឯកសារ៖ $3 ប្រភេទ MIME៖ $4',
 'file-info-size-pages' => '$1 × $2 ភិចសែល, ទំហំឯកសារ: $3, ប្រភេទ MIME: $4, $5 {{PLURAL:$5|ទំព័រ|ទំព័រ}}',
-'file-nohires' => 'គ្មានភាពម៉ត់ ដែលខ្ពស់ជាង។',
+'file-nohires' => 'គ្មានភាពម៉ត់ខ្ពស់ជាងនេះទេ។',
 'svg-long-desc' => 'ឯកសារប្រភេទSVG  $1 × $2 ភីកសែល ទំហំឯកសារ៖ $3',
 'svg-long-desc-animated' => 'ឯកសារជីវចល SVG, ជាធម្មតា $1 × $2 ភិចសែល, ទំហំឯកសារ: $3',
 'show-big-image' => 'រូបភាពពេញ',
@@ -3348,7 +3356,7 @@ $1',
 'monthsall' => 'ទាំងអស់',
 'limitall' => 'ទាំងអស់​',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'បញ្ជាក់ទទួលស្គាល់អាសយដ្ឋានអ៊ីមែល',
 'confirmemail_noemail' => 'អ្នកមិនមានអាសយដ្ឋានអ៊ីមែលត្រឹមត្រូវមួយ ដាក់នៅក្នុង[[Special:Preferences|ចំណង់ចំណូលចិត្ត]]របស់អ្នកទេ។',
 'confirmemail_text' => '{{SITENAME}}តំរូវអោយអ្នកបញ្ជាក់សុពលភាពរបស់អាសយដ្ឋានអ៊ីមែលរបស់អ្នកមុននឹងអ្នកមានសិទ្ធប្រើមុខងារអ៊ីមែល។
@@ -3510,7 +3518,7 @@ $5
 'watchlistedit-raw-removed' => '{{PLURAL:$1|១ចំណងជើងបានត្រូវ|$1ចំណងជើងបានត្រូវ}}ដកចេញ៖',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'á\9e\98á\9e¾á\9e\9bá\9e\94á\9f\86លាស់ប្ដូរពាក់ព័ន្ធ',
+'watchlisttools-view' => 'á\9e\98á\9e¾á\9e\9bá\9e\94á\9e\93á\9f\92លាស់ប្ដូរពាក់ព័ន្ធ',
 'watchlisttools-edit' => 'មើលនិងកែប្រែបញ្ជីតាមដាន',
 'watchlisttools-raw' => 'កែប្រែបញ្ជីតាមដានឆៅ',
 
index 3fbd1f6..0c50dcf 100644 (file)
@@ -860,7 +860,7 @@ $2',
 'loginlanguagelabel' => '언어: $1',
 'suspicious-userlogout' => '브라우저에 이상이 있거나 캐싱 프록시에서 로그아웃을 요청했기 때문에 로그아웃이 거부되었습니다.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP의 mail() 함수에서 알 수 없는 오류가 발생했습니다.',
 'user-mail-no-addy' => '받는이의 이메일 주소가 없으면 이메일을 보낼 수 없습니다.',
 'user-mail-no-body' => '비어 있거나 지나치게 짧은 본문으로 이메일을 보내려고 했습니다.',
@@ -1559,7 +1559,7 @@ HTML 태그를 확인하세요.',
 'prefs-displaywatchlist' => '보이기 설정',
 'prefs-diffs' => '차이',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => '이메일 주소가 유효한 것으로 보입니다.',
 'email-address-validity-invalid' => '유효한 이메일 주소를 입력해주세요.',
 
@@ -2364,7 +2364,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'listgrouprights-addgroup-self-all' => '자신에게 모든 권한을 부여',
 'listgrouprights-removegroup-self-all' => '자신의 계정에서 모든 권한을 해제',
 
-# E-mail user
+# Email user
 'mailnologin' => '보낼 이메일 주소가 없음',
 'mailnologintext' => '다른 사용자에게 이메일을 보내려면 [[Special:UserLogin|로그인]]한 다음 [[Special:Preferences|사용자 환경 설정]]에서 자신의 이메일 주소를 저장해야 합니다.',
 'emailuser' => '이메일 보내기',
@@ -3800,7 +3800,7 @@ Variants for Chinese language
 'monthsall' => '모든 달',
 'limitall' => '모두',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => '이메일 주소 확인',
 'confirmemail_noemail' => '[[Special:Preferences|환경 설정]]에 이메일을 설정하지 않았습니다.',
 'confirmemail_text' => '{{SITENAME}}에서는 이메일 기능을 사용하기 전에 이메일 인증을 받아야 합니다.
index bc23d07..574c201 100644 (file)
@@ -563,7 +563,7 @@ $2',
 'loginlanguagelabel' => 'Тил: $1',
 'suspicious-userlogout' => 'Терс браузер неда кэш этиучу прокси берген соруугъа ушагъаны ючюн, Сизни чыгъаргъа сорууугъуз алынмагъанды.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "PHP's mail() функцияда белгили болмагъан халат",
 'user-mail-no-addy' => 'Бир e-mail адрес болмагъанлай e-mail иерге кюрешди',
 
@@ -1219,7 +1219,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'prefs-displaywatchlist' => 'Кёрюнюуню джарашдырыулары',
 'prefs-diffs' => 'Версияланы башхалыкълары',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail адрес тюзге ушайды',
 'email-address-validity-invalid' => 'Тюз e-mail адрес джазыгъыз!',
 
@@ -1944,7 +1944,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'listgrouprights-addgroup-self-all' => 'Бютеу къауумланы кесини тергеу джазыууна къошаллыкъды',
 'listgrouprights-removegroup-self-all' => 'Кесини тергеу джазыуундан бютеу къауумланы къораталлыкъды',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Джиберирге адрес джокъду',
 'mailnologintext' => 'Башха къошулуучулагъа эл. почта джиберелир ючюн [[Special:UserLogin|системагъа кирирге]] керексиз эм [[Special:Preferences|джарашдырыуланы]] бетинде джараулу эл. почта адрес болургъа керекди.',
 'emailuser' => 'Къошулуучугъа письмо',
@@ -2734,6 +2734,7 @@ MediaWiki локализациясына юлюш къошаргъа излей
 'markedaspatrollederror' => 'Сыналмаганды',
 'markedaspatrollederrortext' => 'Сыналгъан кибик белгилер ючюн версия белгилерге керексиз.',
 'markedaspatrollederror-noautopatrol' => 'Кесигизни тюрлендириулеригизни, сыналгъан кибик белгилерге эркинлигигиз джокъду.',
+'markedaspatrollednotify' => '«$1» бетдеги бу тюрлениу тинтиб къаралгъанча белгиленди.',
 
 # Patrol log
 'patrol-log-page' => 'Патруль этиуню журналы',
@@ -3207,7 +3208,7 @@ $1',
 'monthsall' => 'бютеу',
 'limitall' => 'бютеую',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Электорн адресни мюкюл эт',
 'confirmemail_noemail' => '[[Special:Preferences|джарашдырыулада]] тамамланнган, джараулу электрон адресигиз джокоъду.',
 'confirmemail_text' => 'Викини электрон почтасыны адреси бла хайырланыб башлауну аллы бла, аны мюкюл этериге керекди.
index e7a1a67..578a019 100644 (file)
@@ -1437,7 +1437,7 @@ Vide etiam [[Special:WantedCategories|categorias desideratas]].',
 'listgrouprights-addgroup-self-all' => 'Addere omnes greges ad rationem propriam',
 'listgrouprights-removegroup-self-all' => 'Removere omnes greges ex ratione propria',
 
-# E-mail user
+# Email user
 'emailuser' => 'Litteras electronicas usori mittere',
 'emailpage' => 'Mittere litteras electronicas huic usori',
 'emailpagetext' => 'Forma subter nuntium ad usorem mittet.
@@ -2227,7 +2227,7 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 'namespacesall' => 'omnia',
 'monthsall' => 'omnes',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Inscriptionem electronicam adfirmare',
 'confirmemail_noemail' => 'Non est tibi inscriptio electronica valida in [[Special:Preferences|tuis praeferentiis]] posita.',
 'confirmemail_text' => '{{SITENAME}} te postulat inscriptionem tuam electronicam adfirmare priusquam proprietatibus litterarum electronicarum fruaris. Imprime botonem subter ut nuntium adfirmationis tibi mittatur. Nuntio nexus inerit quod est scribendus in tuo navigatro interretiali ut validum adfirmes tuam inscriptionem electronicam.',
index 9be20ea..7d21f9e 100644 (file)
@@ -688,7 +688,7 @@ Waart w.e.g. ier Dir et nach eng Kéier versicht.",
 'loginlanguagelabel' => 'Sprooch: $1',
 'suspicious-userlogout' => 'Är Ufro fir Iech auszeloggen gouf refuséiert well et esou ausgesäit wéi wann se vun engem Futtise Browser oder Proxy-Tëschespäicher kënnt.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Onbekannte Feeler an der PHP-Mail-Fonctioun',
 'user-mail-no-addy' => 'Huet versicht eng Mail ouni Mailadress ze schécken',
 'user-mail-no-body' => 'Et gouf probéiert eng E-Mail ouni Text oder mat engem ze kuerzen Text ze schécken.',
@@ -1351,7 +1351,7 @@ Si muss manner wéi $1 {{PLURAL:$1|Zeechen|Zeechen}} hunn.',
 'prefs-displaywatchlist' => 'Optioune vun deem wat gewise gëtt',
 'prefs-diffs' => 'Ënnerscheeder',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "D'E-Mailadress schéngt valabel ze sinn",
 'email-address-validity-invalid' => 'Gitt eng valabel e-Mailadress an',
 
@@ -1708,6 +1708,8 @@ Wann de Problem weider besteet, dann un de [[Special:ListUsers/sysop|Administrat
 'backend-fail-create' => 'De Fichier $1 konnt net geschriwwe ginn.',
 'backend-fail-maxsize' => 'De Fichier $1 konnt net geschriwwe gi well e méi grouss ass wéi {{PLURAL:$2|ee Byte|$2 Byten}}.',
 'backend-fail-readonly' => 'De Späicher-Backend "$1" kann elo nëmme geliest ginn (read-only). De Grond deen ugi gouf war: "$2"',
+'backend-fail-connect' => 'Keng Verbindung mam Backend vum Späicher "$1".',
+'backend-fail-internal' => 'Onbekannte Feeler am Backend vum Späicher: "$1"',
 
 # Lock manager
 'lockmanager-notlocked' => '"$1" konnt net fräigeschalt ginn; $1 ass net gespaart.',
@@ -1921,6 +1923,9 @@ Dir musst ëmmer de Medien- a Subtyp aginn: z. Bsp. <code>image/jpeg</code>.",
 Si sollte am beschten op déi eigentlech gemengte Säit verlinkt sinn.<br />
 Eng Säite gëtt als Homonymie-Säit behandelt, wa si eng Schabloun benotzt déi vu [[MediaWiki:Disambiguationspage]] verlinkt ass.",
 
+'pageswithprop' => 'Säite mat enger Säiten-Eegeschaft',
+'pageswithprop-prop' => 'Numm vun der Eegeschaft:',
+
 'doubleredirects' => 'Duebel Viruleedungen',
 'doubleredirectstext' => 'Op dëser Säit stinn déi Säiten déi op aner Viruleedungssäite viruleeden.
 An all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d\'Zil vun der zweeter Viruleedung, déi normalerweis déi "richteg" Zilsäit ass, op déi déi éischt Viruleedung hilinke soll.
@@ -2111,7 +2116,7 @@ Et ginn [[{{MediaWiki:Listgrouprights-helppage}}|zousätzlech Informatiounen]] i
 'listgrouprights-addgroup-self-all' => 'däerf all Gruppe bäi säin eegene Benotzerkont derbäisetzen',
 'listgrouprights-removegroup-self-all' => 'Däerf all Gruppe vu sengem eegene Benotzerkont ewechhuelen',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Keng E-Mailadress',
 'mailnologintext' => 'Dir musst [[Special:UserLogin|ugemellt]] sinn an eng gëlteg E-Mail Adress an Äre [[Special:Preferences|Astellungen]] aginn hunn, fir engem anere Benotzer eng E-Mail ze schécken.',
 'emailuser' => 'Dësem Benotzer eng E-Mail schécken',
@@ -3475,7 +3480,7 @@ Déi aner sinn am Standard verstoppt.
 'monthsall' => 'all',
 'limitall' => 'all',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-Mailadress confirméieren',
 'confirmemail_noemail' => 'Dir hutt keng gëlteg E-Mail-Adress an Äre [[Special:Preferences|Benotzerastellungen]] agedro.',
 'confirmemail_text' => "Ier Dir d'E-Mailfunktioune vun {{SITENAME}} benotze kënnt musst dir als éischt Är E-Mailadress confirméieren. Dréckt w.e.g. de Knäppchen hei ënnendrënner fir eng Confirmatiouns-E-Mail op déi Adress ze schécken déi Dir uginn hutt. An där E-Mail steet e Link mat engem Code, deen dir dann an Ärem Browser opmaache musst fir esou ze bestätegen, datt Är Adress och wierklech existéiert a valabel ass.",
@@ -3860,4 +3865,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'duration-centuries' => '$1 {{PLURAL:$1|Joerhonnert|Joerhonnerten}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Millenaire|Millenairen}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Säite mat enger Säiten-Eegeschaft',
+'pageswithprop-submit' => 'Lass',
 );
index c878725..173fcff 100644 (file)
@@ -924,7 +924,7 @@ $messages = array(
 'listgrouprights-group' => 'КIеретI',
 'listgrouprights-members' => '(уьзвийрин сиягь)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Уртахдиз чар кхьихь',
 'emailusername' => 'Уртахдин тlвар:',
 'emailusernamesubmit' => 'Ракъурун',
index fd1d848..f43f755 100644 (file)
@@ -717,7 +717,7 @@ Andraso kely ary andramo indray.",
 'loginlanguagelabel' => 'fiteny : $1',
 'suspicious-userlogout' => "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Hadisoana tsy fantatra tao amin'ny tao mial() an'i PHP.",
 'user-mail-no-addy' => 'Nanandrana nandefa imailaka tsy misy adiresy imailaka.',
 
@@ -1370,7 +1370,7 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'prefs-displaywatchlist' => 'Safidin-tseho',
 'prefs-diffs' => 'Diff',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Adiresy imailaka mameno fepetra',
 'email-address-validity-invalid' => 'Ilaina ny mametraka adiresy imailaka mameno fepetra',
 
@@ -2100,7 +2100,7 @@ Protokoly zaka <code>$1</code> aza ampiana ao amin'ny karokao izy ireo.",
 'listgrouprights-addgroup-self-all' => "Manampy ny vondrom-pikambana rehetra amin'ny kaontiny",
 'listgrouprights-removegroup-self-all' => "Manala ny vondrom-pikambana rehetra amin'ny kaontiny",
 
-# E-mail user
+# Email user
 'mailnologin' => 'Tsy misy adiresy handefasana ny tenimiafina',
 'mailnologintext' => "Mila [[Special:UserLogin|miditra]] ianao sady manana imailaka mandeha sy voamarina ao amin'ny [[Special:Preferences|mombamomba anao]] vao afaka mandefa imailaka amin'ny mpikambana hafa.",
 'emailuser' => 'Andefaso imailaka io mpikambana io',
@@ -3090,7 +3090,7 @@ Tokony sary tsy misy na sary tsy izy ny rohy voalohany anaty andalana iray .
 'monthsall' => 'rehetra',
 'limitall' => 'rehetra',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Fanamarinana adiresy imailaka.',
 'confirmemail_noemail' => "Tsy nilaza adiresy imailaka azo ampiasaina ianao tao amin'ny [[Special:Preferences|safidinao]].",
 'confirmemail_text' => "
index 29a9ad8..0f009cc 100644 (file)
@@ -184,7 +184,7 @@ $messages = array(
 'vector-simplesearch-preference' => 'Aktifkan kotak pancarian sadarano (hanyo kulik Vector)',
 'vector-view-create' => 'Buek',
 'vector-view-edit' => 'Suntiang',
-'vector-view-history' => 'Riwayaik lalu',
+'vector-view-history' => 'Riwayaik',
 'vector-view-view' => 'Baco',
 'vector-view-viewsource' => 'Caliak sumber',
 'actions' => 'Tindakan',
@@ -493,30 +493,30 @@ Cubo pariso baliak ejaan Sanak.',
 Jikok urang lain nan malakukan pamintaan iko, atau jikok Sanak alah mangingek kato sandi Sanak dan akan tetap manggunokan kato sandi tasabuik, sila abaikan pasan iko dan tatap gunokan kato sandi lamo Sanak.',
 'noemail' => 'Indak ado alamaik surel nan tacatat untuak pangguno "$1".',
 'noemailcreate' => 'Sanak paralu manyadiokan alamaik surel nan sah',
-'passwordsent' => 'Kato sandi baharu alah dikiriman ka alamaik surel nan didaftakan untuak "$1".
-Sila masuak log baliak sasudah manarimo surel tasabuik.',
+'passwordsent' => 'Kato sandi baru alah dikiriman ka alamaik surel nan didaftakan untuak "$1".
+Silakan masuak log baliak sasudah manarimo surel tasabuik.',
 'blocked-mailpassword' => 'Alamaik IP Sanak diblokir dari panyuntingan dan karanonyo indak diizinan manggunokan fungsi pangingek kato sandi untuak mancegah panyalahgunoan.',
-'eauthentsent' => 'Sabuah surel untuak konfirmasi alah dikirim ka alamaik surel.
-Sanak harus mangikuti instruksi di dalam surel tasabuik untuak malakukan konfirmasi bahawa alamaik tasabuik adolah batua kapunyoan Sanak. {{SITENAME}} indak akan mangaktifan fitur surel jikok langkah iko alun dilakuan.',
+'eauthentsent' => 'Surel untuak konfirmasi alah dikirim ka alamaik surel Sanak.
+Ikuti instruksi dalam surel tasabuik untuak malakuan konfirmasi jikok alamaik tasabuik adolah batua punyo Sanak. {{SITENAME}} indak akan mangaktifan fitur surel jikok langkah ko alun dilakuan.',
 'throttled-mailpassword' => 'Suatu pangingat kato sandi alah dikiriman dalam {{PLURAL:$1|jam|$1 jam}} tarakhir.
 Untuak manghindari panyalahgunoan, hanyo ciek kato sandi nan akan dikiriman satiok {{PLURAL:$1|jam|$1 jam}}.',
 'mailerror' => 'Kasalahan dalam mangirimkan surel: $1',
 'acct_creation_throttle_hit' => 'Pangunjung wiki iko jo alamaik IP nan samo jo Sanak alah mambuek {{PLURAL:$1|1 akun|$1 akun}} dalam sahari tarakhir, hinggo jumlah maksimum nan diizinan.
 Karanonyo, pangunjuang jo alamaik IP iko indak dapek baliak mambuek akun lain untuak samantaro.',
 'emailauthenticated' => 'Alamaik surel Sanak lah dikonfirmasi pado $3, $2.',
-'emailnotauthenticated' => 'Alamaik surel Sanak alum dikonfirmasi. Sabalun dikonfirmasi Sanak ndak bisa manggunokan fitur surel.',
-'noemailprefs' => 'Sanak harus mamasukan alamaik surel di preferensi Sanak untuak dapek manggunokan fitur-fitur iko.',
-'emailconfirmlink' => 'Konfirmasikan alamaik surel Sanak',
-'invalidemailaddress' => 'Alamaik surel iko indak dapek ditarimo karano formatnyo indak sasuai.
-Harap masuakan alamaik surel dalam format nan batua atau kosoangan isian tasabuik.',
-'cannotchangeemail' => 'Alamat e-mail sanak indak bisa diubah di wiki ko.',
-'emaildisabled' => 'Situs iko indak bisa mangirim e-mail.',
+'emailnotauthenticated' => 'Alamaik surel Sanak alun dikonfirmasi. Sabalun dikonfirmasi Sanak indak dapek manggunoan fitur surel.',
+'noemailprefs' => 'Sanak harus mamasukan alamaik surel di pangaturan Sanak untuak dapek manggunoan fitur-fitur ko.',
+'emailconfirmlink' => 'Konfirmasi alamaik surel Sanak',
+'invalidemailaddress' => 'Alamaik surel iko indak dapek ditarimo dek formatnyo indak sasuai.
+Harap masuakan alamaik surel dalam format nan bana atau kosoangan isian tasabuik.',
+'cannotchangeemail' => 'Alamaik surel Sanak indak bisa diubah di wiki ko.',
+'emaildisabled' => 'Situs web ko indak dapek mangirim surel.',
 'accountcreated' => 'Akun dibuek',
 'accountcreatedtext' => 'Akun pangguno untuak $1 alah dibuek.',
 'createaccount-title' => 'Pambuekan akun untuak {{SITENAME}}',
 'createaccount-text' => 'Sasaurang alah mambuek sabuah akun untuak alamaik surel Sanak di {{SITENAME}} ($4) jo namo "$2" dan kato sandi "$3". Sanak dianjuakan untuak masuak log dan mangganti kato sandi Sanak kini.
 
-Sanak dapek maabaikan pasan iko jikok akun iko dibuek karano suatu kasalahan.',
+Sanak dapek mangacuahkan pasan ko jikok akun ko dibuek dek ado kasalahan.',
 'usernamehasherror' => 'Namo pangguno indak bisa mangandung tando paga',
 'login-throttled' => 'Sanak alah bakali-kali mancoba masuak log.
 Sila manunggu sabalun mancubo baliak.',
@@ -524,14 +524,14 @@ Sila manunggu sabalun mancubo baliak.',
 'loginlanguagelabel' => 'Baso: $1',
 'suspicious-userlogout' => 'Pamintaan Sanak untuak kalua log ditolak karano tampaknyo dikirim oleh panjalajah nan rusak atau proksi panyinggah.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Kasalahan nan indak dikana dalam fungsi mail() PHP',
-'user-mail-no-addy' => 'Mancubo mangirim e-mail tanpa alamat e-mail nan sah.',
+'user-mail-no-addy' => 'Mancubo mangirim surel tanpa alamaik surel nan sah.',
 'user-mail-no-body' => 'Mancubo kirim surel kosong atau pasan talalu pendek',
 
 # Change password dialog
 'resetpass' => 'Tuka kato sandi',
-'resetpass_announce' => 'Sanak alah masauk log jo kode samantaro nan dikirim malalui surel. Untuak malanjuikkan, Sanak harus mamasuakan kato sandi baru di siko:',
+'resetpass_announce' => 'Sanak alah masauk log jo kode samantaro nan dikirim malalui surel. Untuak malanjuikan, Sanak harus mamasuakan kato sandi baru di siko:',
 'resetpass_header' => 'Tuka kato sandi akun',
 'oldpassword' => 'Kato sandi lamo:',
 'newpassword' => 'Kato sandi baharu:',
@@ -549,35 +549,30 @@ Sanak mungkin alah berhasil mangganti kato sandi Sanak atau alah maminto kato sa
 
 # Special:PasswordReset
 'passwordreset' => 'Setel ulang sandi',
-'passwordreset-text' => 'Langkapi formulir iko untuak manarimo surel pangingek detail akun Sanak.',
+'passwordreset-text' => 'Lengkapi formulir ko untuak manarimo surel pangingek pado detil akun Sanak.',
 'passwordreset-legend' => 'Tuka baliak kato sandi',
 'passwordreset-disabled' => 'Panukaran baliak kato sandi alah dimatian di wiki iko.',
 'passwordreset-pretext' => '{{PLURAL:$1||Masuakan ciek data di bawah iko}}',
 'passwordreset-username' => 'Namo pangguno:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'Caliak kaputusannyo?',
-'passwordreset-capture-help' => 'Kalau sanak meancek boks iko, e-mail (jo kato kunci samantaro) akan dicaliakkan ka sanak.',
+'passwordreset-capture-help' => 'Kalau sanak mancentang kotak ko, surel (jo kato sandi samantaro) akan nampak jo Sanak.',
 'passwordreset-email' => 'Alamaik surel:',
 'passwordreset-emailtitle' => 'Detail akun di {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Sasaurang (mungkin Sanak, dari alamaik IP $1) maminta pangingek
-detail akun untuak {{SITENAME}} ($4). {{PLURAL:$3|Akun|Akun-akun}} barikuik
-takaik jo alamaik surel iko:
+detil akun untuak {{SITENAME}} ($4). {{PLURAL:$3|Akun}} barikuik takaik jo alamaik surel iko:
 
 $2
 
-{{PLURAL:$3|Sandi samantaro|Sandi samantaro}} barikuik akan kadaluwarsa dalam {{PLURAL:$5|sahari|$5 hari}}.
-Sanak harus masuak dan mamiliah sandi baharu kini. Jikok urang lain mambuek
-pamintaan iko atau jikok Sanak ingek sandi asali dan indak lai
-ingin maubahnyo, Sanak dapek mabaikan pasan iko dan taruih manggunoan sandi lamo.',
-'passwordreset-emailtext-user' => 'Sasaurang (mungkin Sanak, dari alamaik IP $1) maminta pangingek detail akun untuak {{SITENAME}} ($4).
-{{PLURAL:$3|Akun|Akun-akun}} barikuik takaik jo alamaik surel iko:
+{{PLURAL:$3|Sandi samantaro}} barikuik akan kadaluwarsa dalam {{PLURAL:$5|$5 hari}}.
+Sanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan sandi lamo.',
+'passwordreset-emailtext-user' => 'Sasaurang (mungkin Sanak, dari alamaik IP $1) maminta pangingek detil akun untuak {{SITENAME}} ($4).
+{{PLURAL:$3|Akun}} barikuik takaik jo alamaik surel ko:
 
 $2
 
-{{PLURAL:$3|Sandi samantaro|Sandi samantaro}} barikuik akan kadaluwarsa dalam {{PLURAL:$5|sahari|$5 hari}}.
-Sanak harus masuak dan mamiliah sandi baharu kini. Jikok urang lain mambuek
-pamintaan iko atau jikok Sanak ingek sandi asali dan indak lai
-ingin maubahnyo, Sanak dapek maabaikan pasan iko dan taruih manggunokan sandi lamo.',
+{{PLURAL:$3|Sandi samantaro}} barikuik akan kadaluwarsa dalam {{PLURAL:$5|$5 hari}}.
+Sanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan sandi lamo.',
 'passwordreset-emailelement' => 'Namo pangguno: $1
 Sandi samantaro: $2',
 'passwordreset-emailsent' => 'Surel pangingek alah dikiriman.',
@@ -585,8 +580,8 @@ Sandi samantaro: $2',
 'passwordreset-emailerror-capture' => 'Surel pangingek, nan ditampilkan di bawah, alah dibuek, tapi pengirimannyo gagal ka pangguno: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'Tuka alamat e-mail.',
-'changeemail-header' => 'Ganti alamat e-mail.',
+'changeemail' => 'Tuka alamaik surel.',
+'changeemail-header' => 'Ganti alamaik surel.',
 'changeemail-text' => 'Isi formulir ko untuak mangganti alamat surel. Sanak harus mamasuakkan kato sandi untuak mayakinkan parubahan.',
 'changeemail-no-info' => 'Sanak harus masuak log untuak mangakses laman ko.',
 'changeemail-oldemail' => 'Alamat surel kini:',
@@ -611,7 +606,7 @@ Sandi samantaro: $2',
 'nowiki_tip' => 'Abaikan format wiki',
 'image_tip' => 'Cantumkan berkas',
 'media_tip' => 'Pautan berkas',
-'sig_tip' => 'Tandotangan sanak jo waktu',
+'sig_tip' => 'Tandotangan sanak jo wakatu',
 'hr_tip' => 'Garih mandata',
 
 # Edit pages
@@ -619,11 +614,11 @@ Sandi samantaro: $2',
 'subject' => 'Subjek/judul:',
 'minoredit' => 'Suntiangan ketek',
 'watchthis' => 'Pantau laman ko',
-'savearticle' => 'Simpan laman',
+'savearticle' => 'Simpan',
 'preview' => 'Caliak',
-'showpreview' => 'Caliak pratonton',
+'showpreview' => 'Pratonton',
 'showlivepreview' => 'Pratayang langsuang',
-'showdiff' => 'Caliak parubahan',
+'showdiff' => 'Parubahan',
 'anoneditwarning' => "'''Ingek:''' Sanak alun masuak log.
 Alamat IP sanak tacatat pado riwayaik suntiangan laman ko.",
 'anonpreviewwarning' => "''Sanak alun masuak log. Manyimpan laman akan manyababkan alamaik IP Sanak tacatat pado riwayat suntiangan laman iko.''",
@@ -699,7 +694,7 @@ Entri log pamblokiran tabaru disadioan di bawah ko untuak referensi:',
 * '''Firefox / Safari:''' Tahan ''Shift'' sambia mangklik ''Reload'', atau takan ''Ctrl-F5'' atau ''Ctrl-R'' (''⌘-R'' di Mac)
 * '''Google Chrome:''' Takan ''Ctrl-Shift-R'' (''⌘-Shift-R'' di Mac)
 * '''Internet Explorer:''' Tahan ''Ctrl'' sambia mangklik ''Refresh'', atau takan ''Ctrl-F5''
-* '''Opera:''' Barasiahkan tembolok di ''Tools → Preferences''",
+* '''Opera:''' Barasiahkan singgahan di ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Tips:''' Gunoan tombol \"{{int:showpreview}}\" untuak mauji CSS baharu Sanak sabalun manyimpannyo.",
 'userjsyoucanpreview' => "'''Tips:''' Gunoan tombol \"{{int:showpreview}}\" untuak mauji JS baharu Sanak sabalun manyimpannyo.",
 'usercsspreview' => "'''Ingeklah bahawa Sanak sadang manampilan pratayang dari CSS Sanak.
@@ -712,19 +707,19 @@ Pratayang iko alun disimpan!'''",
 'userinvalidcssjstitle' => "'''Paringatan:''' Kulik \"\$1\" indak ditamuan. Harap diingek bahawa laman .css dan .js manggunokan huruf kecil, contoh {{ns:user}}:Foo/vector.css dan bukannyo {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Dipabaharui)',
 'note' => "'''Catatan:'''",
-'previewnote' => "'''Ingek ko hanyo pratonton'''
+'previewnote' => "'''Ingek iko hanyo pratonton'''
 Parubahan Sanak alun disimpan!",
 'continue-editing' => 'Pai ka area mangedit.',
 'previewconflict' => 'Pratayang iko mancaminan teks pado bagian ateh kotak suntiangan teks sabagaimano akan taliek bilo Sanak manyimpannyo.',
 'session_fail_preview' => "'''Maaf, kami ndak dapek mangolah suntiangan Sanak akibat tahapuihnyo data sesi.
 Sila cubo sakali lai.
 Jikok masih indak barhasil, cubolah [[Special:UserLogout|kalua log]] dan masuak log baliak.'''",
-'session_fail_preview_html' => "'''Kami indak dapek mamproses suntiangan Sanak karano hilangnyo data sesi.'''
+'session_fail_preview_html' => "'''Kami indak dapek mamproses suntiangan Sanak karano hilangnyo sesi data.'''
 
-''Karano {{SITENAME}} mangizinan panggunoan HTML mantah, pratayang alah disurukan sabagai pancagahan terhadap serangan JavaScript.''
+''Dek {{SITENAME}} mangizinan panggunoan HTML mantah, pratonton alah disuruakan sabagai pancagahan terhadok sarangan JavaScript.''
 
-'''Jikok iko marupokan upayo suntiangan nan sahih, sila cubo lai.
-Jikok masih tatap indak bahasil, cubolah [[Special:UserLogout|kalua log]] dan masuak baliak.'''",
+'''Jikok iko marupoan suntiangan nan sah, silakan cubo lai.
+Jikok masih jo indak barasil, cubolah [[Special:UserLogout|kalua log]] dan masuak baliak.'''",
 'token_suffix_mismatch' => "'''Suntiangan Sanak ditolak karano aplikasi klien Sanak maubah karakter tando baco pado suntiangan.'''
 Suntiangan tasabuik ditolak untuak mancegah kasalahan pado teks laman.
 Hal iko kadang tajadi jikok Sanak manggunokan layanan proxy anonim babasis web nan bamasalah.",
@@ -732,27 +727,27 @@ Hal iko kadang tajadi jikok Sanak manggunokan layanan proxy anonim babasis web n
 'editing' => 'Manyuntiang $1',
 'creating' => 'Mambuek $1',
 'editingsection' => 'Suntiang $1 (bagian)',
-'editingcomment' => 'Manyuntiang $1 (bahagian baharu)',
+'editingcomment' => 'Manyuntiang $1 (bagian baru)',
 'editconflict' => 'Konflik panyuntiangan: $1',
-'explainconflict' => "Urang lain alah manyuntiang laman iko sajak Sanak mulai manyuntiangnyo.
-Bagian ateh teks iko manganduang teks laman saat iko.
+'explainconflict' => "Urang lain lah manyuntiang laman ko sajak Sanak mulai manyuntiangnyo.
+Bagian ateh teks ko manganduang teks laman saat kini ko.
 Parubahan nan Sanak lakuan ditunjuakan pado bagian bawah teks.
-Sanak hanyo paralu magabungan parubahan Sanak jo teks nan alah ado.
-'''Hanyo''' teks pado bagian ateh lamanlah nan akan disimpan apobilo Sanak manakan \"{{int:savearticle}}\".",
+Sanak hanyo paralu manggabungan parubahan Sanak jo teks nan lah ado.
+'''Hanyo''' teks pado bagian ateh lamanlah nan akan disimpan jikok Sanak manakan \"{{int:savearticle}}\".",
 'yourtext' => 'Teks Sanak',
 'storedversion' => 'Versi tasimpan',
-'nonunicodebrowser' => "'''Paringatan: Panjalajah web Sanak indak mandukung unicode.'''
-Alah tadapek sabuah solusi agar Sanak dapek manyuntiang laman jo aman: karakter non-ASCII akan muncua dalam kotak edit sabagai kode heksadesimal.",
+'nonunicodebrowser' => "'''Paringatan: Panjalajah web Sanak indak mandukuang Unicode.'''
+Alah ado solusi bia Sanak dapek manyuntiang laman sacaro aman: karakter non-ASCII akan muncua dalam kotak suntiang sabagai kode heksadesimal.",
 'editingold' => "'''Paringatan:
-Sanak manyuntiang revisi lama suatu laman.
-Jikok Sanak manyimpannyo, parubahan-parubahan nan dibuek sajak revisi iko akan hilang.'''",
+Sanak manyuntiang revisi lamo suatu laman.
+Jikok Sanak manyimpannyo, parubahan-parubahan nan dibuek sajak revisi ko akan hilang.'''",
 'yourdiff' => 'Pambedoan',
 'copyrightwarning' => "Untuak diingek bahaso apo nan disumbang kapado {{SITENAME}} dianggap lah dilapeh di bawah $2 (caliak $1 untuak langkoknyo).
 Jikok awak indak ingin apo nan ditulih tu disuntiang dan disebaran, jan dikirim tulisan tu ka siko.<br />
 Awak musti bajanji juo bahaso iko adolah asia karya awak surang, atau disalin dari sumber miliak basamo atau sumber bebas lainnyo.
 '''Jan dikirim karya bahak cipta nan indak baizin!'''",
 'copyrightwarning2' => "Parhatikan bahawa sadoalah kontribusi terhadap {{SITENAME}} dapek disuntiang, diubah, atau dihapuih oleh panyumbang lainnyo. Jikok Sanak indak ingin tulisan Sanak disuntiang urang lain, jan kiriman ka siko.<br />Sanak jua bajanji bahawa iko adolah hasil karyo Sanak surang, atau disalin dari sumber miliak umum atau sumber bebas nan lain (liek $1 untuak informasi labiah lanjuik). '''JAN KIRIMAN KARYO NAN DILINDUNGI HAK CIPTA TANPA IJIN!'''",
-'longpageerror' => "'''KASALAHAN: Teks nan Sanak kiriman sagadang {{PLURAL:$1|kilobita|$1 kilobita}}, nan barati labiah gadang dari jumlah maksimum {{PLURAL:$2|kilobita|$2 kilobita}}. Teks indak dapek disimpan.'''",
+'longpageerror' => "'''Kasalahan: Teks nan Sanak kiriman sagadang {{PLURAL:$1|$1 kilobita}}, barati labiah gadang dari jumlah maksimum {{PLURAL:$2|$2 kilobita}}. Teks indak dapek disimpan.'''",
 'readonlywarning' => "'''PARINGATAN: Basis data sadang dikunci untuak pamaliharaan, sahinggo saat iko Sanak indak dapek manyimpan hasil suntiangan.''' 
 Sanak mungkin paralu manyalin teks suntiangan Sanak ko dan simpankan ka sabuah berkas teks guno mamuekannyo baliak kundian.
 
@@ -761,22 +756,22 @@ Panguruih nan mangunci basis data maagiahan panjalehan barikuik: $1",
 Entri catatan tarakhir disadioan di bawah untuak referensi:",
 'semiprotectedpagewarning' => "'''Paringatan: Laman iko sadang dilinduangi sahinggo hanyo pangguno tadafta nan bisa manyuntiangnyo.'''
 Entri catatan tarakhir disadioan di bawah untuak referensi:",
-'cascadeprotectedwarning' => "'''PARINGATAN:''' Laman iko sadang dilinduangi sahinggo hanyo pangguno jo hak akses pangurus sajo nan dapek manyuntiangnyo karano disaratokan dalam {{PLURAL:$1|laman|laman-laman}} barikuik nan alah dilinduangi jo opsi 'palinduangan runtun':",
+'cascadeprotectedwarning' => "'''Paringatan:''' Laman ko sadang dilinduangi jadi hanyo pangguno jo hak akses panguruih sajo nan dapek manyuntiangnyo karano disaratoan dalam {{PLURAL:$1|laman}} nan alah dilinduangi jo palinduangan batingkek:",
 'titleprotectedwarning' => "'''Paringatan: Laman iko alah dilinduangi sahinggo diparaluan [[Special:ListGroupRights|hak khusus]] untuak mambueknyo.'''
 Entri catatan tarakhir disadioan di bawah untuak referensi:",
-'templatesused' => '{{PLURAL:$1|Templat}} yang digunoan di laman ko:',
-'templatesusedpreview' => '{{PLURAL:$1|Templat|Templat}} yang digunoan dalam pratonton ko:',
-'templatesusedsection' => '{{PLURAL:$1|Templat|Templat}} nan digunoan di bagian iko:',
+'templatesused' => '{{PLURAL:$1|Templat}} nan digunoan di laman ko:',
+'templatesusedpreview' => '{{PLURAL:$1|Templat}} nan digunoan dalam pratonton ko:',
+'templatesusedsection' => '{{PLURAL:$1|Templat}} nan digunoan di bagian ko:',
 'template-protected' => '(dilinduangi)',
-'template-semiprotected' => '(semi-perlindungan)',
+'template-semiprotected' => '(palinduangan semi)',
 'hiddencategories' => 'Laman ko marupokan kalompok dari {{PLURAL:$1|$1 kategori tapandam}}:',
-'nocreatetext' => '{{SITENAME}} alah mambatasi pambuekan laman-laman baharu.
-Sanak dapek baliak dan manyuntiang laman nan alah ado, atau sila [[Special:UserLogin|masuak log atau mambuek akun]].',
+'nocreatetext' => '{{SITENAME}} lah mambatasi pambuekan laman-laman baru.
+Sanak dapek baliak dan manyuntiang laman nan alah ado, atau [[Special:UserLogin|masuak log - mambuek akun]].',
 'nocreate-loggedin' => 'Sanak ndak mampunyoi hak akses untuak mambuek laman baharu.',
 'sectioneditnotsupported-title' => 'Panyuntiangan bagian indak didukuang',
 'sectioneditnotsupported-text' => 'Panyuntiangan bagian indak didukuang di laman suntiang iko.',
 'permissionserrors' => 'Kasalahan Hak Akses',
-'permissionserrorstext' => 'Sanak ndak mampunyoi hak untuak malakuan hal itu karano {{PLURAL:$1|alasan|alasan-alasan}} barikuik:',
+'permissionserrorstext' => 'Sanak indak ado hak untuak malakuannyo dek {{PLURAL:$1|alasan}} barikuik:',
 'permissionserrorstext-withaction' => 'Awak indak punyo hak akses untuak $2, karano {{PLURAL:$1|alasan}} barikuik:',
 'recreate-moveddeleted-warn' => "'''Ingek: Sanak mambuek ulang suatu laman nan alah dihapuih.'''
 
@@ -981,11 +976,25 @@ Cubo awali permintaan awak tu jo ''all:'' untuak mancari sado kandungan (tamasua
 'powersearch-togglelabel' => 'Piliah:',
 'powersearch-toggleall' => 'Sadonyo',
 'powersearch-togglenone' => 'Dak ado',
+'search-external' => 'Pancarian lua',
+'searchdisabled' => 'Pancarian {{SITENAME}} dimatian.
+Sanak samantaro dapek mancari lewaik Google.
+Ingek indeks Google untuak {{SITENAME}} mungkin lah kadaluarsa.',
+
+# Quickbar
+'qbsettings' => 'Bar pinteh',
+'qbsettings-none' => 'Indak ado',
+'qbsettings-fixedleft' => 'Rato kiri',
+'qbsettings-fixedright' => 'Rato kanan',
+'qbsettings-floatingleft' => 'Mangambang di kiri',
+'qbsettings-floatingright' => 'Mangambang di kanan',
+'qbsettings-directionality' => 'Tetap, tagantuang pado skrip bahaso Sanak',
 
 # Preferences page
 'preferences' => 'Pangaturan',
 'mypreferences' => 'Pangaturan',
 'prefs-edits' => 'Jumlah suntiangan:',
+'prefsnologin' => 'Alun masuak log',
 'prefsnologintext' => 'Sanak musti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} masuak log]</span> untuak mengeset pangaturan.',
 'changepassword' => 'Tuka kato sandi',
 'prefs-skin' => 'Kulik',
@@ -1098,15 +1107,31 @@ Alamaik surel tu indakkan tau dek urang nan manghubungi sanak tu.',
 'prefs-displaywatchlist' => 'Pilihan tampilan',
 'prefs-diffs' => 'Pabedoan',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamaik surel nampaknyo sah',
-'email-address-validity-invalid' => 'Masuakkan alamaik surel nan sah',
+'email-address-validity-invalid' => 'Masuakan alamaik surel nan sah',
 
 # User rights
 'userrights' => 'Manajemen hak pangguno',
 'userrights-lookup-user' => 'Mangatua kalompok pangguno',
-'userrights-user-editname' => 'Masuakkan namo pangguno:',
+'userrights-user-editname' => 'Masuakan namo pangguno:',
 'editusergroup' => 'Suntiang kalompok pangguno',
+'editinguser' => "Mangganti hak akses pangguno '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Suntiang kalompok pangguno',
+'saveusergroups' => 'Simpan kalompok pangguno',
+'userrights-groupsmember' => 'Anggota dari:',
+'userrights-groupsmember-auto' => 'Anggota implisit dari:',
+'userrights-groups-help' => 'Sanak dapek mangubah kalompok pangguno ko:
+* Kotak jo tando cek marupoan kalompok pangguno tasabuik
+* Kotak tanpa tando cek bararti pangguno ko bukan anggota kalompok tasabuik
+* Tando * manandoi Sanak indak dapek mambatalan kalompok tasabuik bilo Sanak alah manambahannyo, atau sabaliaknyo.',
+'userrights-reason' => 'Alasan:',
+'userrights-no-interwiki' => 'Sanak indak bahak untuak mangubah hak pangguno di wiki lain.',
+'userrights-nodatabase' => 'Basis data $1 indak ado atau bukan disiko.',
+'userrights-nologin' => 'Sanak musti [[Special:UserLogin|masuak log]] jo akun panguruih untuak dapek mangubah hak pangguno.',
+'userrights-notallowed' => 'Akun Sanak indak ado izin untuak manambah atau malapeh hak pangguno.',
+'userrights-changeable-col' => 'Kalompok nan dapek Sanak ubah',
+'userrights-unchangeable-col' => 'Kalompok nan indak dapek Sanak ubah',
 
 # Groups
 'group' => 'Kalompok:',
@@ -1119,17 +1144,38 @@ Alamaik surel tu indakkan tau dek urang nan manghubungi sanak tu.',
 'group-all' => '(sadonyo)',
 
 'group-user-member' => '{{GENDER:$1|pangguno}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|pangguno takonfirmasi otomatis}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|panguruih}}',
+'group-bureaucrat-member' => '{{GENDER:$1|birokrat}}',
+'group-suppress-member' => '{{GENDER:$1|pangawas}}',
 
 'grouppage-user' => '{{ns:project}}:Pangguno',
-'grouppage-sysop' => '{{ns:project}}:Pengurus',
+'grouppage-autoconfirmed' => '{{ns:project}}:Pangguno takonfirmasi otomatis',
+'grouppage-bot' => '{{ns:project}}:Bot',
+'grouppage-sysop' => '{{ns:project}}:Panguruih',
+'grouppage-bureaucrat' => '{{ns:project}}:Birokrat',
+'grouppage-suppress' => '{{ns:project}}:Pangawas',
 
 # Rights
+'right-read' => 'Mambaco laman',
+'right-edit' => 'Manyuntiang laman',
 'right-createpage' => 'Mambuek laman baru (nan bukan laman diskusi)',
 'right-createtalk' => 'Mambuek laman diskusi',
 'right-createaccount' => 'Mambuek akun baru',
+'right-minoredit' => 'Manandoi suntiangan ketek',
+'right-move' => 'Mamindahan laman',
+'right-move-subpages' => 'Mamindahan laman jo kasado sub laman',
+'right-move-rootuserpages' => 'Mamindahan laman pangguno',
+'right-movefile' => 'Mamindahan berkas',
+'right-suppressredirect' => 'Indak mambuek pangaliahan wakatu mamindahan laman',
+'right-upload' => 'Mamuek berkas',
+'right-reupload' => 'Manimpo berkas lamo',
+'right-reupload-own' => 'Manimpo berkas nan dimuek surang',
 
 # Special:Log/newusers
 'newuserlogpage' => 'Log pangguno baru',
+'newuserlogpagetext' => 'Di bawah ko log pandaftaran pangguno baru',
 
 # User rights log
 'rightslog' => 'Log parubahan hak akses',
@@ -1164,8 +1210,8 @@ Alamaik surel tu indakkan tau dek urang nan manghubungi sanak tu.',
 'rclinks' => 'Tunjuakkan $1 parubahan tabaru dalam $2 hari tarakhia<br />$3',
 'diff' => 'bedo',
 'hist' => 'sijarah',
-'hide' => 'Suruakkan',
-'show' => 'Tampilkan',
+'hide' => 'Suruakan',
+'show' => 'Tunjuakan',
 'minoreditletter' => 'k',
 'newpageletter' => 'B',
 'boteditletter' => 'b',
@@ -1213,6 +1259,10 @@ Koq Sanak ado versi resolusi panuah dari gambar ko, cubolah muekan berkas tasabu
 'license-header' => 'Lisensi',
 
 # Special:ListFiles
+'listfiles' => 'Dafta berkas',
+'listfiles_thumb' => 'Miniatur',
+'listfiles_date' => 'Tanggal',
+'listfiles_name' => 'Namo',
 'listfiles_user' => 'Pangguno',
 'listfiles_size' => 'Ukuran',
 'listfiles_description' => 'Katarangan',
@@ -1222,9 +1272,11 @@ Koq Sanak ado versi resolusi panuah dari gambar ko, cubolah muekan berkas tasabu
 'file-anchor-link' => 'Berkas',
 'filehist' => 'Riwayaik berkas',
 'filehist-help' => 'Klik pado tanggal/waktu untuak malihek berkas pado maso tu',
-'filehist-revert' => 'baliakkan',
+'filehist-deleteall' => 'hapuih sadonyo',
+'filehist-deleteone' => 'hapuih',
+'filehist-revert' => 'baliakan',
 'filehist-current' => 'kini ko',
-'filehist-datetime' => 'Tanggal/Waktu',
+'filehist-datetime' => 'Tanggal/Wakatu',
 'filehist-thumb' => 'Miniatur',
 'filehist-thumbtext' => 'Miniatur untuak versi per $1',
 'filehist-nothumb' => 'Miniatur indak ado',
@@ -1236,10 +1288,30 @@ Koq Sanak ado versi resolusi panuah dari gambar ko, cubolah muekan berkas tasabu
 'imagelinks' => 'Panggunoan berkas',
 'linkstoimage' => 'Barikuik ko {{PLURAL:$1|$1 laman nan takaik}} jo berkas:',
 'nolinkstoimage' => 'Indak ado laman nan batauik ka berkas ko.',
+'linkstoimage-redirect' => '$1 (pangaliahan berkas) $2',
 'sharedupload' => 'Berkas ko barasal dari $1 dan mungkin digunoan oleh berbagai proyek lain.',
 'sharedupload-desc-here' => 'Berkas ko dari $1, mungkin juo digunoan untuak proyek-proyek lain.
 Informasi dari [$2 laman katarangannyo] ado di bawah.',
+'filepage-nofile' => 'Indak ado berkas banomo iko.',
+'filepage-nofile-link' => 'Indak ado berkas banamo iko, tapi sanak dapek [$1 mamueknyo].',
 'uploadnewversion-linktext' => 'Unggah versi baru dari berkas ko',
+'shared-repo-from' => 'dari $1',
+'shared-repo' => 'repositori basamo',
+'upload-disallowed-here' => 'Sanak indak dapaek manimpo berkas ko.',
+
+# File reversion
+'filerevert' => 'Baliakan $1',
+'filerevert-legend' => 'Baliakan berkas',
+'filerevert-intro' => "Sanank ka mambaliakan berkas '''[[Media:$1|$1]]''' ka versi [$4 pado $3, $2].",
+'filerevert-comment' => 'Alasan:',
+'filerevert-defaultcomment' => 'Baliakan ka versi pado $2, $1',
+'filerevert-submit' => 'Baliakan',
+'filerevert-success' => "'''[[Media:$1|$1]]''' lah dibaliakan ka versi [$4 pado $3, $2]",
+'filerevert-badversion' => 'Indak ado versi lokal tadahulu dari berkas ko pado wakatu nan dituju.',
+
+# File deletion
+'filedelete' => 'Hapuih $1',
+'filedelete-legend' => 'Hapuih berkas',
 
 # Random page
 'randompage' => 'Laman sumbarang',
@@ -1270,6 +1342,8 @@ Informasi dari [$2 laman katarangannyo] ado di bawah.',
 
 'doubleredirects' => 'Pangaliahan ganda',
 
+'withoutinterwiki-submit' => 'Tunjuakan',
+
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bita}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori}}',
@@ -1288,6 +1362,8 @@ Informasi dari [$2 laman katarangannyo] ado di bawah.',
 'deadendpages' => 'Laman buntu',
 'deadendpagestext' => 'Laman-laman ko indak ad pautan ka laman lain di {{SITENAME}}.',
 'protectedpages' => 'Laman nan dilinduangi',
+'protectedpages-indef' => 'Untuak palinduangan salamonyo',
+'protectedpages-cascade' => 'Untuak palinduangan batingkek',
 'usereditcount' => '$1 {{PLURAL:$1|suntiangan}}',
 'usercreated' => '{{GENDER:$3|Dibuek}} pado $1 pukua $2',
 'newpages' => 'Laman baru',
@@ -1306,31 +1382,78 @@ Harap paratikan bahwa situs web lain mungkin ado tautan ka suatu berkas jo URL l
 'booksources-go' => 'Tuju',
 
 # Special:Log
+'specialloguserlabel' => 'Pangguno:',
+'speciallogtitlelabel' => 'Target (judul atau pangguno):',
 'log' => 'Log',
+'all-logs-page' => 'Sado log publik',
+'alllogstext' => 'Gabungan kasado log nan ado di {{SITENAME}}.
+Sanak dapek mamiliah jenis log nan ado, namo pangguno (bedoan huruf ketek/gadang), atau judul laman (bedoan huruf ketek/gadang).',
+'logempty' => 'Indak basobok entri log nan sasuai.',
+'log-title-wildcard' => 'Cari judul nan diawali jo teks ko',
+'showhideselectedlogentries' => 'Tunjuakan/Suruakan entri log tapiliah',
 
 # Special:AllPages
 'allpages' => 'Kasado laman',
 'alphaindexline' => '$1 sampai $2',
+'nextpage' => 'Laman salanjuiknyo ($1)',
 'prevpage' => 'Laman sabalunnyo ($1)',
-'allpagesfrom' => 'Tampilkan laman mulai dari:',
-'allpagesto' => 'Tampilkan laman hinggo:',
-'allarticles' => 'Semua laman',
+'allpagesfrom' => 'Tunjuakan laman mulai dari:',
+'allpagesto' => 'Tunjuakan laman sampai:',
+'allarticles' => 'Kasado laman',
+'allinnamespace' => 'Kasado laman (ruang namo $1)',
+'allnotinnamespace' => 'Kasado laman (bukan ruang namo $1)',
+'allpagesprev' => 'Sabalun',
+'allpagesnext' => 'Lanjuik',
 'allpagessubmit' => 'Tuju',
+'allpagesprefix' => 'Tunjuakan laman jo awalan:',
+'allpages-bad-ns' => '{{SITENAME}} indak ado ruang namo "$1".',
+'allpages-hide-redirects' => 'Suruakan pangaliahan',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Caliak versi baru.',
 
 # Special:Categories
 'categories' => 'Kategori',
 'categoriespagetext' => '{{PLURAL:$1|Isi kategori}} ko ado laman atau media.
 [[Special:UnusedCategories|Kategori nan indak tapakai]] indak nampak di siko.
 Lihek pulo [[Special:WantedCategories|kategori nan diinginkan]].',
+'categoriesfrom' => 'Tunjuakan kategori mulai jo:',
+'special-categories-sort-count' => 'uruikan manuruik jumlah',
+'special-categories-sort-abc' => 'uruikan manuruik abjad',
+
+# Special:DeletedContributions
+'deletedcontributions' => 'Jariah nan dihapuih',
+'deletedcontributions-title' => 'Jariah nan dihapuih',
+'sp-deletedcontributions-contribs' => 'Jariah',
 
 # Special:LinkSearch
 'linksearch' => 'Pancarian pautan lua',
+'linksearch-pat' => 'Pola pancarian:',
+'linksearch-ns' => 'Ruang namo:',
+'linksearch-ok' => 'Cari',
 'linksearch-line' => '$1 tapauik dari $2',
 
+# Special:ListUsers
+'listusersfrom' => 'Tunjuakan pangguno mulai dari:',
+'listusers-submit' => 'Tunjuakan',
+'listusers-noresult' => 'Pangguno indak basobok.',
+'listusers-blocked' => '(tasakek)',
+
+# Special:ActiveUsers
+'activeusers' => 'Dafta pangguno aktif',
+'activeusers-from' => 'Tunjuakan pangguno mulai dari:',
+'activeusers-hidebots' => 'Suruakan bot',
+'activeusers-hidesysops' => 'Suruakan panguruih',
+'activeusers-noresult' => 'Pangguno indak basobok',
+
 # Special:ListGroupRights
+'listgrouprights' => 'Dafta kalompok pangguno',
+'listgrouprights-group' => 'Kalompok',
+'listgrouprights-rights' => 'Hak',
+'listgrouprights-helppage' => 'Help:Hak akses',
 'listgrouprights-members' => '(dafta anggota)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Surel pangguno',
 'emailuser-title-target' => 'Kirim surel ka {{GENDER:$1|panggun}} ko',
 'emailuser-title-notarget' => 'Kirim surel',
@@ -1350,11 +1473,11 @@ Alamaik surel nan Sanak masuakkan di [[Special:Preferences|pangaturan akun]] aka
 'emailccme' => 'Kirimkan denai salinan pasan.',
 
 # Watchlist
-'watchlist' => 'Dafta pantau',
-'mywatchlist' => 'Dafta pantau',
+'watchlist' => 'Pantauan',
+'mywatchlist' => 'Pantauan',
 'watchlistfor2' => 'Untuak $1 $2',
-'addedwatchtext' => "Laman \"[[:\$1]]\" lah ditambahkan ka [[Special:Watchlist|senarai pantauan awak]].
-Parubahan laman ko tamasuak laman otanyo akan ditampilkan dalam '''cetak taba''' pado [[Special:RecentChanges|senarai parubahan]] agar lebih mudah manjagonyo.",
+'addedwatchtext' => "Laman \"[[:\$1]]\" lah ditambahkan ka [[Special:Watchlist|dafta pantauan Sanak]].
+Parubahan laman ko tamasuak laman rundiangnyo akan ditampilan pado [[Special:RecentChanges|dafta parubahan]] '''bacetak taba''' agar labiah mudah mancaliaknyo.",
 'removewatch' => 'Hapuih dari dafta pantau',
 'removedwatchtext' => 'Laman "[[:$1]]" lah dihapuih dari [[Special:Watchlist|dafta pantau Sanak]].',
 'watch' => 'Pantau',
@@ -1393,15 +1516,17 @@ Caliak $2 untuak rakam jajak laman nan lah dihapuih.',
 
 # Protect
 'protectlogpage' => 'Log palinduangan',
+'protectlogtext' => 'Di bawah ko dafta parubahan tahadok palinduangan laman.
+Caliak [[Special:ProtectedPages|dafta laman talinduang]] untuak dafta palinduangan laman tabaru.',
 'protectedarticle' => 'malinduangkan "[[$1]]"',
-'modifiedarticleprotection' => 'maubah tingkek perlindungan "[[$1]]"',
+'modifiedarticleprotection' => 'maubah tingkek palinduangan "[[$1]]"',
 'protectcomment' => 'Alasan:',
 'protectexpiry' => 'Kadaluwarsa:',
 'protect_expiry_invalid' => 'Maso kadaluwarsa indak balaku',
 'protect_expiry_old' => 'Maso kadaluwarsa adolah pado maso lampau',
-'protect-text' => "Awak buliah malihek jo mangganti tingkek perlindungan di siko untuak laman '''$1'''.",
-'protect-locked-access' => "Akun awak indak berhak untuak maubah tingkek perlindungan laman ko.
-Berikut ko pengaturan yang balaku untuak laman '''$1''':",
+'protect-text' => "Sanak buliah malihek jo mangganti tingkek palinduangan untuak laman '''$1'''.",
+'protect-locked-access' => "Akun Sanak indak bahak untuak maubah tingkek palinduangan laman ko.
+Barikuik ko pangaturan nan balaku untuak laman '''$1''':",
 'protect-cascadeon' => 'Laman ko sedang dilindungi karano tamasuak dalam {{PLURAL:$1|laman|laman}} aktif perlindungan batingkek.
 Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlindungan batingkeknyo.',
 'protect-default' => 'Semua pangguno diizinkan',
@@ -1419,7 +1544,21 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'protect-existing-expiry' => 'Alah sampai: $3, $2',
 'protect-otherreason' => 'Alasan lain/tambahan:',
 'protect-otherreason-op' => 'Alasan lain',
-'restriction-type' => 'Perlindungan:',
+'protect-dropdown' => '*Alasan umum palinduangan
+** Vandal baulang
+** Spam baulang
+** Parang suntiangan
+** Laman balalu lintas tinggi
+** Digunoan di Palanta
+** Templat baresiko tinggi
+** Berkas nan banyak digunoan
+** Baulang kali dihapuih dalam waktu dakek
+** Baulang kali dialiahan tanpa barundiang
+** Baulang kali dikosongan
+** Pamintaan pangguno',
+'protect-edit-reasonlist' => 'Suntiang alasan palinduangan',
+'protect-expiry-options' => '1 jam:1 hour,1 ari:1 day,1 minggu:1 week,2 minggu:2 weeks,1 bulan:1 month,3 bulan:3 months,6 bulan:6 months,1 taun:1 year,salamonyo:infinite',
+'restriction-type' => 'Palinduangan:',
 'restriction-level' => 'Tingkek larangan:',
 'minimum-size' => 'Ukuran min',
 'maximum-size' => 'Ukuran max',
@@ -1431,8 +1570,19 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'restriction-create' => 'Buek',
 'restriction-upload' => 'Muek',
 
+# Restriction levels
+'restriction-level-sysop' => 'palinduangan panuah',
+'restriction-level-autoconfirmed' => 'palinduangan semi',
+'restriction-level-all' => 'sado tingkek',
+
 # Undelete
-'undeletelink' => 'caliak/cegakkan',
+'undelete' => 'Caliak laman nan dihapuih',
+'undeletepage' => 'Caliak dan baliakan laman tahapuih',
+'undeletepagetitle' => "'''Iko dafta revisi nan dihapuih dari [[:$1|$1]]'''.",
+'viewdeletedpage' => 'Caliak laman nan dihapuih',
+'undelete-nodiff' => 'Indak ado basobok revisi lamo',
+'undeletebtn' => 'Baliakan',
+'undeletelink' => 'caliak/baliakan',
 'undeleteviewlink' => 'caliak',
 
 # Namespace form on various pages
@@ -1451,11 +1601,17 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'year' => 'Dari taun (dan sabalunnyo):',
 
 'sp-contributions-newbies' => 'Tampilkan jariah pangguno baru sajo',
+'sp-contributions-newbies-sub' => 'Untuak pangguno baru',
+'sp-contributions-newbies-title' => 'Jariah pangguno baru',
 'sp-contributions-blocklog' => 'log pamblokiran',
-'sp-contributions-deleted' => 'kontribusi pangguno nan lah batiadoan',
+'sp-contributions-deleted' => 'jariah pangguno nan lah dihapuih',
 'sp-contributions-uploads' => 'muek',
 'sp-contributions-logs' => 'log',
 'sp-contributions-talk' => 'maota',
+'sp-contributions-userrights' => 'pangalolaan hak pangguno',
+'sp-contributions-blocked-notice' => 'Pangguno ko sadang kanai sakek. log pamblokiran tarakhia ditunjuakan disiko untuak referensi:',
+'sp-contributions-blocked-notice-anon' => 'Alamaik IP ko tangah diblokir.
+Entri log pamblokiran tabaru ado di bawah ko untuak referensi:',
 'sp-contributions-search' => 'Cari jariah',
 'sp-contributions-username' => 'Alamat IP atau namo pangguno:',
 'sp-contributions-toponly' => 'Hanyo manampilan suntiangan nan tarakhia',
@@ -1467,7 +1623,8 @@ Awak dapek maubah tingkek perlindungannyo, walaupun indak pangaruah pado perlind
 'whatlinkshere-page' => 'Laman:',
 'linkshere' => "Laman-laman ko bakaik ka '''[[:$1]]''':",
 'nolinkshere' => "Indak ado laman nan punyo tautan ka '''[[:$1]]'''.",
-'isredirect' => 'laman pengaliahan',
+'nolinkshere-ns' => "Indak ado pautan laman ka '''[[:$1]]''' pado ruang namo nan dipiliah.",
+'isredirect' => 'laman pangaliahan',
 'istemplate' => 'transklusi',
 'isimage' => 'pautan berkas',
 'whatlinkshere-prev' => '{{PLURAL:$1|sabalunnyo}}',
@@ -1520,19 +1677,71 @@ Liek [[Special:BlockList|dafta sakek]] buek maninjaunyo.',
 'ipb-blockingself' => 'Angku ka manyakek diri surang! Lai yakin apo nan dikarajoan?',
 'ipb-edit-dropdown' => 'Suntiang alasan manyakek',
 'ipb-unblock-addr' => 'Lapeh sakek $1',
-'blocklist' => 'Pangguno tablokir',
-'ipblocklist' => 'Pangguno tablokir',
+'ipb-unblock' => 'Lapeh sakek pangguno atau alamaik IP',
+'ipb-blocklist' => 'Caliak nan disakek',
+'ipb-blocklist-contribs' => 'Jariah untuak $1',
+'unblockip' => 'Lapeh sakek',
+'unblockiptext' => 'Gunoan formulir ko untuak mangambalian hak akses alamaik IP atau pangguno nan kanai sakek',
+'ipusubmit' => 'Lapeh sakek ko',
+'unblocked' => '[[User:$1|$1]] lah dilapeh sakeknyo',
+'unblocked-range' => '$1 lah dilapeh sakeknyo',
+'unblocked-id' => 'Sakek $1 lah dilapeh',
+'blocklist' => 'Pangguno kanai sakek',
+'ipblocklist' => 'Pangguno kanai sakek',
+'ipblocklist-legend' => 'Cari pangguno kanai sakek',
+'blocklist-userblocks' => 'Suruakan akun tasakek',
+'blocklist-tempblocks' => 'Suruakan sakek samantaro',
+'blocklist-addressblocks' => 'Suruakan ciek IP tasakek',
+'blocklist-rangeblocks' => 'Suruakan wilayah sakek',
+'blocklist-timestamp' => 'tando wakatu',
+'blocklist-target' => 'Target',
+'blocklist-expiry' => 'Kadaluwarsa',
+'blocklist-by' => 'Panguruih nan manyakek',
+'blocklist-params' => 'Parameter sakek',
+'blocklist-reason' => 'Alasan',
+'ipblocklist-submit' => 'Cari',
+'ipblocklist-localblock' => 'Sakek lokal',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|Sakek}} lain',
+'infiniteblock' => 'salamonyo',
+'expiringblock' => 'habih pado $1 di $2',
+'anononlyblock' => 'hanyo anon.',
+'noautoblockblock' => 'sakek otomatis dimatian',
+'createaccountblock' => 'mambuek akun dimatian',
+'emailblock' => 'surel diblokir',
+'blocklist-nousertalk' => 'indak dapek manyuntiang laman maota surang',
+'ipblocklist-empty' => 'Dafta sakek ko kosong.',
+'ipblocklist-no-results' => 'Alamaik IP atau pangguno nan dimintak indak disakek.',
 'blocklink' => 'sakek',
-'unblocklink' => 'hilangkan sakek',
+'unblocklink' => 'lapeh sakek',
 'change-blocklink' => 'ubah sakek',
 'contribslink' => 'jariah',
-'blocklogpage' => 'Log pamblokiran',
+'emaillink' => 'kirim surel',
+'autoblocker' => 'Sakek otomatis dek alamaik IP lah digunoan jo "[[User:$1|$1]]".
+Alasan disakek untuak $1 adolah "\'\'$2\'\'"',
+'blocklogpage' => 'Log sakek',
 'blocklogentry' => 'Manyakek [[$1]] dalam maso $2 $3',
-'unblocklogentry' => 'mahilangkan sakek $1',
-'block-log-flags-nocreate' => 'mambuek akun dimatikan',
+'unblocklogentry' => 'lapeh sakek $1',
+'block-log-flags-anononly' => 'hanyo pangguno anonim',
+'block-log-flags-nocreate' => 'mambuek akun dimatian',
+'block-log-flags-noautoblock' => 'sakek otomatis dimatian',
+'block-log-flags-noemail' => 'surel diblokir',
+'block-log-flags-nousertalk' => 'indak dapek manyuntiang laman maota surang',
+'block-log-flags-angry-autoblock' => 'sistim sakek otomatis diaktifkan',
+'block-log-flags-hiddenname' => 'namo pangguno tasuruak',
+'ipb_already_blocked' => '"$1" alah disakek',
+'ipb-needreblock' => '$1 alah tasakek. Apo nio diubah pangaturannyo?',
+'ipb-otherblocks-header' => '{{PLURAL:$1|Sakek}} lain',
 'blockme' => 'Sakek denai',
+'proxyblocker' => 'Sakek proksi',
+'proxyblocker-disabled' => 'Fungsi ko dimatian',
+
+# Developer tools
+'lockdb' => 'Kunci basis data',
+'unlockdb' => 'Bukak kunci basis data',
 
 # Move page
+'move-page' => 'Pindahan $1',
+'move-page-legend' => 'Pindahan laman',
 'movepagetext' => "Formulir di bawah ko digunoan untuak maubah namo suatu laman dan mamindahan sadonyo data riwayaik ka namo baru. 
 Judua lamo tu ka manjadi laman paraliahan manuju judua nan baru. 
 Awak dapek mampabarui paraliahan-paraliahan nan manuju ka judua lamo sacaro otomatis.
@@ -1549,16 +1758,28 @@ Iko dapek maakibaikan parubahan nan indak dipakiroan pado laman nan populer; jad
 
 Dalam kasus tu, kok amuah Angku dapek mamindahkan ataupun manggabuangkan laman sacaro manual.",
 'movearticle' => 'Pindahkan laman',
+'movenologin' => 'Alun masuak log',
+'movenologintext' => 'Sanak musti pangguno tadafta dan [[Special:UserLogin|masuak lo]] untuak mamindahan laman.',
+'movenotallowed' => 'Sanak indak ado izin untuak mamindahan laman.',
+'movenotallowedfile' => 'Sanak indak ado izin untuak mamindahan berkas.',
+'cant-move-user-page' => 'Sanak indak ado izin untuak mamindahan laman pangguno (bagian dari sub laman).',
+'cant-move-to-user-page' => 'Sanak indak ado izin untuak mamindahan laman ka laman pangguno (salain ka sub laman pangguno).',
 'newtitle' => 'Ka judul baru:',
 'move-watch' => 'Pantau laman ko',
-'movepagebtn' => 'Pindahkan laman',
+'movepagebtn' => 'Pindahan laman',
 'pagemovedsub' => 'Pamindahan berhasil',
-'movepage-moved' => '\'\'\'"$1" lah dipindahkan ka "$2"\'\'\'',
-'articleexists' => 'Laman dengan namo tu lah ado, atau namo yang awak pilih indak tapek. Silakan pilih namo lain',
-'talkexists' => "'''Laman tersebut berhasil dipindahkan, tapi laman otanyo indak dapek dipindahkan karano lah ado laman ota pado judul yang baru. Silakan digabuang laman ota tu sacaro manual.'''",
-'movedto' => 'dipindahkan ka',
-'movetalk' => 'Pindahkan laman ota yang takaik',
-'movelogpage' => 'Log pemindahan',
+'movepage-moved' => '\'\'\'"$1" lah dipindahan ka "$2"\'\'\'',
+'movepage-moved-redirect' => 'Pangaliahan lah dibuek.',
+'movepage-moved-noredirect' => 'Pangaliahan indak dibuek.',
+'articleexists' => 'Laman nan banamo tu lah ado, atau namo nan Sanak piliah indak tapek.
+Silakan piliah namo lain.',
+'cantmove-titleprotected' => 'Sanak indak dapek mamindahan laman kasiko dek judul barunyo kanai linduang dari dibuek',
+'talkexists' => "'''Laman tasabuik barasil dipindahan, tapi laman rundiangnyo indak dapek dipindahan dek lah ado laman rundiang disinan. Silakan digabuang laman rundiang tu sacaro manual.'''",
+'movedto' => 'pindahan ka',
+'movetalk' => 'Pindahan laman rundiang nan takaik',
+'move-subpages' => 'Pindahan sub laman (sampai $1)',
+'move-talk-subpages' => 'Pindahan sub laman dari laman rundiang (sampai $1)',
+'movelogpage' => 'Log pamindahan',
 'movereason' => 'Alasan:',
 'revertmove' => 'baliakkan',
 
@@ -1573,6 +1794,12 @@ Dalam kasus tu, kok amuah Angku dapek mamindahkan ataupun manggabuangkan laman s
 'thumbnail-more' => 'Pagadang',
 'thumbnail_error' => 'Gagal mambuek miniatur: $1',
 
+# Special:Import
+'importstart' => 'Mangimpor laman...',
+
+# Import log
+'import-logentry-upload' => 'mangimpor [[$1]] malalui pamuekan berkas',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Laman pangguno Sanak',
 'tooltip-pt-anonuserpage' => 'Laman pangguno IP Sanak',
@@ -1681,6 +1908,10 @@ Sanak hanyo buliah mancaliak sumbernyo sajo',
 'markaspatrolledtext' => 'Tandoi laman ko lah dipatroli',
 'markedaspatrolled' => 'Tandoi lah dipatroli',
 
+# Patrol log
+'patrol-log-page' => 'Log patroli',
+'log-show-hide-patrol' => '$1 log patroli',
+
 # Browsing diffs
 'previousdiff' => '← Revisi sabalunnyo',
 'nextdiff' => 'Revisi salanjuiknyo →',
@@ -1825,15 +2056,23 @@ Nan lainnyo akan tasuruak sacaro baku.
 'monthsall' => 'sadonyo',
 'limitall' => 'sadonyo',
 
+# Watchlist editor
+'watchlistedit-raw-titles' => 'Judul:',
+'watchlistedit-raw-submit' => 'Pabarui pantauan',
+'watchlistedit-raw-done' => 'Pantauan Sanak lah dipabarui',
+'watchlistedit-raw-added' => '{{PLURAL:$1|$1 judul lah}} ditambahan:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|$1 judul lah}} dibuang:',
+
 # Watchlist editing tools
-'watchlisttools-view' => 'Tampilkan parubahan takaik',
-'watchlisttools-edit' => 'Tampilkan sarato suntiang dafta pantau',
+'watchlisttools-view' => 'Tunjuakan parubahan takaik',
+'watchlisttools-edit' => 'Tunjuakan sarato suntiang dafta pantau',
 'watchlisttools-raw' => 'Suntiang pantauan mantah',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|maota]])',
 
 # Core parser functions
+'unknown_extension_tag' => 'Tag ekstensi "$1" indak tau',
 'duplicate-defaultsort' => '\'\'\'Peringatan:\'\'\' Kunci panguruitan default "$2" sabalunnyo mangabaikan kunci panguruitan default "$1".',
 
 # Special:Version
@@ -1849,6 +2088,8 @@ Nan lainnyo akan tasuruak sacaro baku.
 'version-license' => 'Lisensi',
 'version-poweredby-credits' => "Wiki ko didukuang jo '''[//www.mediawiki.org/ MediaWiki]''', hak cipta © 2001-$1 $2.",
 'version-poweredby-others' => 'lainnyo',
+'version-software' => 'Parangkaik lunak tapasang',
+'version-software-product' => 'Produk',
 'version-software-version' => 'Versi',
 'version-entrypoints-header-url' => 'URL',
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Artikel path]',
index d2ebe69..b62520c 100644 (file)
@@ -866,7 +866,7 @@ $2',
 'loginlanguagelabel' => 'Јазик: $1',
 'suspicious-userlogout' => 'Вашето барање за одјава е одбиено бидејќи се чини дека е испратено од расипан прелистувач или кеширачки застапник (proxy).',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Непозната грешка во функцијата mail() на PHP',
 'user-mail-no-addy' => 'Се обидовте да испратите порака без да внесете адреса',
 'user-mail-no-body' => 'Се обидовте да испратите писмо кое е празно или со неразумно куса содржина.',
@@ -1560,7 +1560,7 @@ $1",
 'prefs-displaywatchlist' => 'Нагодувања на приказот',
 'prefs-diffs' => 'Разлики',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Исправно',
 'email-address-validity-invalid' => 'Се бара исправна адреса!',
 
@@ -2363,7 +2363,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Може да ги додаде сите групи на сопствената корисничка сметка',
 'listgrouprights-removegroup-self-all' => 'Може да ги избрише сите групи од сопствената корисничка сметка',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Нема адреса за праќање',
 'mailnologintext' => 'Мора да сте [[Special:UserLogin|најавени]] и да имате важечка е-поштенска адреса во вашите [[Special:Preferences|нагодувања]] за да може да праќате е-пошта до други корисници.',
 'emailuser' => 'Пиши е-пошта на корисникот',
@@ -3853,7 +3853,7 @@ Variants for Chinese language
 'monthsall' => 'сите',
 'limitall' => 'сите',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Потврда на е-поштенска адреса',
 'confirmemail_noemail' => 'Немате наведено важечка е-поштенска адреса во вашите [[Special:Preferences|нагодувања]].',
 'confirmemail_text' => '{{SITENAME}} бара да ја потврдите вашата е-поштенска адреса пред да ги користите можностите за е-пошта.
index e16c6ac..8cb57d6 100644 (file)
@@ -831,7 +831,7 @@ $2',
 'loginlanguagelabel' => 'ഭാഷ: $1',
 'suspicious-userlogout' => 'ലോഗൗട്ട് ചെയ്യാനുള്ള താങ്കളുടെ അഭ്യർത്ഥന നിരസിച്ചിരിക്കുന്നു, കാരണം അത് തകർന്ന ബ്രൗസറിൽ നിന്നോ കാഷിങ് പ്രോക്സിയിൽ നിന്നോ ഉണ്ടായതുപോലെ അനുഭവപ്പെടുന്നു.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'പി.എച്ച്.പി.യുടെ main() ഫങ്ഷനിൽ അപരിചിതമായ പിഴവ്',
 'user-mail-no-addy' => 'ഇമെയിൽ വിലാസം ഇല്ലാതെയാണ് ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചത്',
 'user-mail-no-body' => 'ശൂന്യമായതോ അസാമാന്യമായി ചെറുതോ ആയ ഉള്ളടക്കമുള്ള ഇമെയിൽ അയയ്ക്കാൻ ശ്രമിച്ചു.',
@@ -1382,7 +1382,7 @@ $1",
 # Preferences page
 'preferences' => 'ക്രമീകരണങ്ങൾ',
 'mypreferences' => 'ക്രമീകരണങ്ങൾ',
-'prefs-edits' => 'à´\86à´\95àµ\86 à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ:',
+'prefs-edits' => 'ആകെ തിരുത്തുകൾ:',
 'prefsnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
 'prefsnologintext' => 'ഉപയോക്തൃക്രമീകരണങ്ങൾ മാറ്റാൻ താങ്കൾ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ലോഗിൻ]</span> ചെയ്തിരിക്കണം.',
 'changepassword' => 'രഹസ്യവാക്ക് മാറ്റുക',
@@ -1496,7 +1496,7 @@ $1",
 'prefs-displaywatchlist' => 'പ്രദർശന ഐച്ഛികങ്ങൾ',
 'prefs-diffs' => 'വ്യത്യാസങ്ങൾ',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'സാധുതയുള്ളതെന്ന് തോന്നുന്നു',
 'email-address-validity-invalid' => 'സാധുതയുള്ള വിലാസം ആവശ്യമാണ്!',
 
@@ -2271,7 +2271,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'listgrouprights-addgroup-self-all' => 'എല്ലാ സംഘങ്ങളേയും സ്വന്തം അംഗത്വത്തിൽ ചേർക്കുക',
 'listgrouprights-removegroup-self-all' => 'സ്വന്തം അംഗത്വത്തിൽ നിന്ന് എല്ലാ സംഘങ്ങളേയും നീക്കംചെയ്യുക',
 
-# E-mail user
+# Email user
 'mailnologin' => 'അയയ്ക്കാനുള്ള വിലാസം ലഭ്യമല്ല',
 'mailnologintext' => 'മറ്റ് ഉപയോക്താക്കൾക്കു ഇമെയിലയക്കുവാൻ താങ്കൾ [[Special:UserLogin|ലോഗിൻ]] ചെയ്തിരിക്കുകയും, സാധുവായ ഒരു ഇമെയിൽ വിലാസം താങ്കളുടെ [[Special:Preferences|ക്രമീകരണങ്ങൾ]] താളിൽ സജ്ജീകരിച്ചിരിക്കുകയും വേണം.',
 'emailuser' => 'ഈ ഉപയോക്താവിനു ഇമെയിൽ അയക്കുക',
@@ -3105,7 +3105,7 @@ $1',
 'pageinfo-title' => '"$1" എന്ന താളിന്റെ വിവരങ്ങൾ',
 'pageinfo-not-current' => 'ക്ഷമിക്കുക, പഴയ നാൾപ്പതിപ്പുകളിൽ ഈ വിവരം പ്രദർശിപ്പിക്കുക അസാദ്ധ്യമാണ്.',
 'pageinfo-header-basic' => 'അടിസ്ഥാനവിവരങ്ങൾ',
-'pageinfo-header-edits' => 'തിരàµ\81à´¤àµ\8dതൽà´\9aà´°à´¿à´¤àµ\8dà´°à´\82',
+'pageinfo-header-edits' => 'തിരàµ\81à´¤àµ\8dà´¤àµ\81à´\95à´³àµ\81à´\9fàµ\86 à´¨à´¾àµ¾à´µà´´à´¿',
 'pageinfo-header-restrictions' => 'സംരക്ഷണം',
 'pageinfo-header-properties' => 'താളിന്റെ ഗുണഗണങ്ങൾ',
 'pageinfo-display-title' => 'പ്രദർശിപ്പിക്കേണ്ട തലക്കെട്ട്',
@@ -3661,7 +3661,7 @@ $1',
 'monthsall' => 'എല്ലാം',
 'limitall' => 'എല്ലാം',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ഇ-മെയിൽ വിലാസം സ്ഥിരീകരിക്കൽ',
 'confirmemail_noemail' => '[[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളുടെ കൂടെ]] സാധുവായൊരു ഇ-മെയിൽ വിലാസം സജ്ജീകരിച്ചിട്ടില്ല.',
 'confirmemail_text' => '{{SITENAME}} സം‌രംഭത്തിൽ ഇ-മെയിൽ സൗകര്യം ഉപയോഗിക്കണമെങ്കിൽ താങ്കൾ താങ്കളുടെ ഇ-മെയിൽ വിലാസത്തിന്റെ സാധുത തെളിയിച്ചിരിക്കണം. താങ്കളുടെ ഇ-മെയിൽ വിലാസത്തിലേക്ക് സ്ഥിരീകരണ മെയിൽ അയക്കുവാൻ താഴെയുള്ള ബട്ടൺ അമർത്തുക. താങ്കൾക്ക് അയക്കുന്ന ഇ-മെയിലിൽ ഒരു സ്ഥിരീകരണ കോഡ് ഉണ്ട്. ആ കോഡിൽ അമർത്തിയാൽ താങ്കളുടെ വിലാസത്തിന്റെ സാധുത തെളിയിക്കപ്പെടും.',
@@ -4071,4 +4071,6 @@ $5
 'duration-centuries' => '{{PLURAL:$1|ഒരു നൂറ്റാണ്ട്|$1 നൂറ്റാണ്ട്}}',
 'duration-millennia' => '{{PLURAL:$1|ഒരു സഹസ്രാബ്ദം|$1 സഹസ്രാബ്ദം}}',
 
+# Unknown messages
+'pageswithprop-submit' => 'പോകൂ',
 );
index 3761e40..5a679d7 100644 (file)
@@ -697,7 +697,7 @@ Sila tunggu sebentar dan cuba lagi.',
 'loginlanguagelabel' => 'Bahasa: $1',
 'suspicious-userlogout' => 'Permintaan anda untuk log keluar ditolak kerana ia kelihatan seperti dihantar oleh pelayar rosak atau proksi pengagregatan.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Ralat tak diketahui dalam fungsi mail() PHP',
 'user-mail-no-addy' => 'E-eml cuba dihantar tanpa alamat e-mel',
 'user-mail-no-body' => 'Anda telah cuba menghantar e-mel dengan isi yang kosong atau terlampau ringkas.',
@@ -1368,7 +1368,7 @@ Tindakan ini tidak boleh dibatalkan.',
 'prefs-displaywatchlist' => 'Pilihan paparan',
 'prefs-diffs' => 'Beza',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Alamat e-mel adalah sah',
 'email-address-validity-invalid' => 'Sila masukkan alamat e-mel yang sah',
 
@@ -1957,6 +1957,10 @@ Mungkin anda ingin menyunting keterangan pada [$2 laman penerangan failnya] di s
 Pautan ini sepatutnya ditujukan ke topik yang sepatutnya.<br />
 Sesebuah laman dianggap sebagai laman penyahkekaburan jika ia menggunakan templat yang dipaut dari [[MediaWiki:Disambiguationspage]]",
 
+'pageswithprop' => 'Halaman dengan sifat halaman',
+'pageswithprop-text' => 'Halaman ini menyenaraikan halaman-halaman yang menggunakan sifat halaman yang tertentu.',
+'pageswithprop-prop' => 'Nama sifat:',
+
 'doubleredirects' => 'Lencongan berganda',
 'doubleredirectstext' => 'Yang berikut ialah senarai laman yang melencong ke laman lencongan lain. Setiap baris mengandungi pautan ke laman lencongan pertama dan kedua, serta baris pertama bagi teks lencongan kedua, lazimnya merupakan laman sasaran "sebenar", yang sepatutnya ditujui oleh lencongan pertama.
 Masukan yang <del>dipotong</del> telah diselesaikan.',
@@ -2146,7 +2150,7 @@ Anda boleh mengetahui [[{{MediaWiki:Listgrouprights-helppage}}|maklumat tambahan
 'listgrouprights-addgroup-self-all' => 'Menyertai semua kumpulan',
 'listgrouprights-removegroup-self-all' => 'Keluar daripada semua kumpulan',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Tiada alamat e-mel',
 'mailnologintext' => 'Anda perlu [[Special:UserLogin|log masuk]]
 terlebih dahulu dan mempunyai alamat e-mel yang sah dalam
@@ -3534,7 +3538,7 @@ Ruangan-ruangan yang lain pula akan disembunyikan pada asali.
 'monthsall' => 'semua',
 'limitall' => 'semua',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Sahkan alamat e-mel',
 'confirmemail_noemail' => 'Anda belum menetapkan alamat e-mel yang sah dalam [[Special:Preferences|laman keutamaan]] anda.',
 'confirmemail_text' => '{{SITENAME}} menghendaki supaya anda mengesahkan alamat e-mel anda sebelum menggunakan ciri-ciri e-mel.
@@ -3945,4 +3949,7 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'duration-centuries' => '$1 abad',
 'duration-millennia' => '$1 alaf',
 
+# Unknown messages
+'pageswithprop-legend' => 'Halaman dengan sifat halaman',
+'pageswithprop-submit' => 'Pergi',
 );
index 28834b3..0309922 100644 (file)
@@ -817,7 +817,7 @@ Du kan ignorere denne beskjeden dersom kontoen ble opprettet ved en feil.',
 'loginlanguagelabel' => 'Språk: $1',
 'suspicious-userlogout' => 'Din forespørsel om å logge ut ble nektet fordi den så ut til å ha bli sendt av en ødelagt nettleser eller en mellomtjener.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Ukjent feil i PHPs mail()-funksjon',
 'user-mail-no-addy' => 'Forsøkte å sende e-post uten e-postadresse',
 'user-mail-no-body' => 'Prøvde å sende e-post med tom eller for kort brødtekst.',
@@ -1502,7 +1502,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'prefs-displaywatchlist' => 'Visningsalternativer',
 'prefs-diffs' => 'Forskjeller',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-postadressen ser gyldig ut',
 'email-address-validity-invalid' => 'Skriv inn en gyldig e-postadresse',
 
@@ -2092,6 +2092,8 @@ Kanskje du vil redigere beskrivelsen på dens [$2 filbeskrivelsesside].',
 De burde i stedet lenke til en passende innholdsside.<br />
 En side anses om en pekerside om den inneholder en mal som det lenkes til fra [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Sider med sideverdi',
+
 'doubleredirects' => 'Doble omdirigeringer',
 'doubleredirectstext' => 'Denne siden lister opp de sidene som er omdirigeringer til andre omdirigeringssider.
 Hver rad inneholder lenker til første og andre omdirigering, samt målet for den andre omdirigeringen, som vanligvis er den «virkelige» målsiden som den første omdirigeringen burde peke til.
@@ -2282,7 +2284,7 @@ Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrou
 'listgrouprights-addgroup-self-all' => 'Kan legge til alle grupper til egen konto',
 'listgrouprights-removegroup-self-all' => 'Kan ta bort alle grupper fra egen konto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ingen avsenderadresse',
 'mailnologintext' => 'Du må være [[Special:UserLogin|logget inn]] og ha en gyldig e-postadresse satt i [[Special:Preferences|brukerinnstillingene]] for å sende e-post til andre brukere.',
 'emailuser' => 'E-post til denne brukeren',
@@ -2779,7 +2781,7 @@ Du kan oppdatere omdirigeringer som peker til den opprinnelige tittelen automati
 Om du velger å ikke gjøre det, sjekk at flyttingen ikke fører til [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]].
 Du er ansvarlig for at lenker fortsetter å peke til de sidene de er ment å peke til.
 
-Legg merke til at siden '''ikke''' kan flyttes hvis det allerede finnes en side med den nye tittelen, med mindre den er tom eller er en omdirigeringsside uten historikk.
+Legg merke til at siden '''ikke''' kan flyttes hvis det allerede finnes en side med den nye tittelen, med mindre sistnevnte er tom eller er en omdirigeringsside uten historikk.
 Det betyr at du kan flytte en side tilbake dit den kom fra hvis du gjør en feil, og du kan ikke overskrive eksisterende sider ved et uhell.
 
 '''Advarsel!'''
@@ -3663,7 +3665,7 @@ Rotert 90° mot klokka og vridd vertikalt',
 'monthsall' => 'alle',
 'limitall' => 'alle',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Bekreft e-postadresse',
 'confirmemail_noemail' => 'Du har ikke oppgitt en gyldig e-postadresse i [[Special:Preferences|innstillingene dine]].',
 'confirmemail_text' => 'Du må bekrefte e-postadressen din før du kan benytte deg av e-posttjenester på {{SITENAME}}. Trykk på knappen under for å sende en bekreftelsesmelding til e-postadressen din. Meldingen vil inneholde en lenke med en kode; følg lenken for å bekrefte at e-postadressen er gyldig.',
@@ -4084,4 +4086,6 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'duration-centuries' => '$1 {{PLURAL:$1|århundre|århundrer}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Sider med en sideverdi',
 );
index 9e40c5a..3eb03d1 100644 (file)
@@ -552,7 +552,7 @@ $2',
 'loginlanguagelabel' => 'भाषा: $1',
 'suspicious-userlogout' => 'तपाईंको निर्गमन अनुरोध अस्विकार गरिन्छ किन कि यो खराब ब्राउजर वा क्यासिङ प्रोक्सिले पठाएको जस्तो देखिन्छ।',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP मेल() क्रियामा अज्ञात त्रुटि',
 'user-mail-no-addy' => 'इमेल ठेगाना बिना नै इमेल पठाउन खोजिएको थियो।',
 
@@ -1195,7 +1195,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'prefs-displaywatchlist' => 'प्रदर्शन विकल्पहरू',
 'prefs-diffs' => 'diffs(भिन्नता)',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ई मेल ठेगाना मान्य भएको प्रतीत हुन्छ',
 'email-address-validity-invalid' => 'मान्य ईमेल ठेगाना दिनुहोस्',
 
@@ -1831,7 +1831,7 @@ $1',
 'listgrouprights-removegroup-self' => '{{PLURAL:$2|समूह|समूहहरु}} यस  $1 खाताबाट हटाउने',
 'listgrouprights-addgroup-self-all' => 'सबै समूहहरु निजी खातामा थप्ने',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ईमेल पठाउने ठेगाना नै भएन ।',
 'mailnologintext' => 'तपाईले अरु प्रयोगकर्ताहरुलाई ईमेल पठाउनको लागि आफु पहिले [[Special:UserLogin|प्रवेश(लगइन)गरेको]] हुनुपर्छ र [[Special:Preferences|आफ्नो रोजाइहरुमा]] एउटा वैध ईमेल ठेगाना भएको हुनुपर्छ।',
 'emailuser' => 'यो प्रयोगकर्तालाई ई-मेल पठाउनुहोस्',
@@ -3072,7 +3072,7 @@ $8',
 'monthsall' => 'सबै',
 'limitall' => 'सबै',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'इमेल ठेगाना पक्का गर्नुहोस्',
 'confirmemail_noemail' => 'तपाईको प्रयोगकर्ता [[Special:Preferences|अभिरुचीमा]] मान्य इमेल ठेगाना राखीएको छैन ।',
 'confirmemail_pending' => 'तपाईको इमेलमा प्रपाणिकरण कोड पहिले नै पठाइ सकिएको छ;
index 048ccde..55c7e3a 100644 (file)
@@ -800,7 +800,7 @@ Du kan sjå bort frå denne meldinga dersom kontoen vart oppretta med eit uhell.
 'loginlanguagelabel' => 'Språk: $1',
 'suspicious-userlogout' => 'Førespurnaden din om å logge ut vart nekta fordi han såg ut til å vere sendt av ein øydelagt nettlesar eller mellomtenar.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Ukjend feil i PHPs mail()-funksjon',
 'user-mail-no-addy' => '↓Prøvde å senda e-post utan e-postadresse',
 'user-mail-no-body' => 'Freista å senda e-post med tom eller urimeleg stutt brødtekst.',
@@ -895,7 +895,8 @@ Mellombels passord: $2',
 'showpreview' => 'Førehandsvis',
 'showlivepreview' => 'Levande førehandsvising',
 'showdiff' => 'Vis skilnader',
-'anoneditwarning' => "'''Åtvaring:''' Du er ikkje innlogga. IP-adressa di vert lagra i historikken for sida.",
+'anoneditwarning' => "'''Åtvaring:''' Du er ikkje innlogga.
+IP-adressa di vert lagra i endringshistorikken til sida.",
 'anonpreviewwarning' => "''Du er ikkje innlogga. Lagrar du vil IP-adressa di verta førd opp i endringshistorikken til denne sida.''",
 'missingsummary' => "'''Påminning:''' Du har ikkje skrive noko endringssamandrag. Dersom du trykkjer «Lagre» ein gong til, vert endringa di lagra utan.",
 'missingcommenttext' => 'Ver venleg og skriv ein kommentar nedanfor.',
@@ -1449,7 +1450,7 @@ Dette kan ikkje tilbakestillast.',
 'prefs-i18n' => 'Internasjonalisering',
 'prefs-signature' => 'Signatur',
 'prefs-dateformat' => 'Datoformat',
-'prefs-timeoffset' => 'Tidsforskuving',
+'prefs-timeoffset' => 'Tidforskuving',
 'prefs-advancedediting' => 'Avanserte val',
 'prefs-advancedrc' => 'Avanserte val',
 'prefs-advancedrendering' => 'Avanserte val',
@@ -1460,7 +1461,7 @@ Dette kan ikkje tilbakestillast.',
 'prefs-displaywatchlist' => 'Val for vising',
 'prefs-diffs' => 'Skilnader',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-postadressa ser ut til å vera gyldig',
 'email-address-validity-invalid' => 'Skriv inn ei gyldig e-postaddresse.',
 
@@ -2044,6 +2045,10 @@ Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
 Dei bør kan henda lenkja til ei meir passande side i staden.<br />
 Ei side vert handsama som ei fleirtydingsside om ho nyttar ein mal som er lenkja til frå [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Sider med ein sideeigenskap',
+'pageswithprop-text' => 'Denne sida listar opp sider som nyttar ein viss sideeigenskap.',
+'pageswithprop-prop' => 'Namn på eigenskap:',
+
 'doubleredirects' => 'Doble omdirigeringar',
 'doubleredirectstext' => 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på. <del>Overstrykne</del> liner har vorte retta på.',
 'double-redirect-fixed-move' => '[[$1]] har blitt flytta, og er no ei omdirigering til [[$2]]',
@@ -2230,7 +2235,7 @@ Det er påkravt med eit toppnivådomene, til dømes «*.org».<br />
 'listgrouprights-addgroup-self-all' => 'Kan leggja til alle gruppene til sin eigen konto',
 'listgrouprights-removegroup-self-all' => 'Kan ta vekk alle gruppene frå sin eigen konto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Inga avsendaradresse',
 'mailnologintext' => 'Du lyt vera [[Special:UserLogin|innlogga]] og ha ei gyldig e-postadresse sett i [[Special:Preferences|brukarinnstillingane]] for å sende e-post åt andre brukarar.',
 'emailuser' => 'Send e-post åt denne brukaren',
@@ -3591,7 +3596,7 @@ Andre er gøymde som standard.
 'monthsall' => 'alle',
 'limitall' => 'alle',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Stadfest e-postadresse',
 'confirmemail_noemail' => 'Du har ikkje gjeve ei gyldig e-postadresse i [[Special:Preferences|innstillingane dine]].',
 'confirmemail_text' => '{{SITENAME}} krev at du stadfester e-postadressa di
@@ -3988,4 +3993,7 @@ Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på
 'duration-centuries' => '$1 {{PLURAL:$1|hundreår|hundreår}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tusenår|tusenår}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Sider med ein sideeigenskap',
+'pageswithprop-submit' => 'Gå',
 );
index 2e34445..477e2b0 100644 (file)
@@ -784,7 +784,7 @@ Esperatz abans d’ensajar tornamai.',
 'loginlanguagelabel' => 'Lenga: $1',
 'suspicious-userlogout' => 'Vòstra demanda de desconnexion es estada refusada perque sembla qu’es estada mandada per un navigador copat o la mesa en escondedor d’un proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Error desconeguda dins la foncion mail() de PHP.',
 
 # Change password dialog
@@ -1396,7 +1396,7 @@ Tanben podètz causir de permetre a d’autres de vos contactar per vòstra pagi
 'prefs-displaywatchlist' => "Opcions d'afichatge",
 'prefs-diffs' => 'Diferéncias',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L'adreça electronica sembla bona",
 'email-address-validity-invalid' => 'entrar una adreça electronica valida',
 
@@ -2105,7 +2105,7 @@ I pòt aver [[{{MediaWiki:Listgrouprights-helppage}}|d'entresenhas complementàr
 'listgrouprights-addgroup-self-all' => 'Se pòt apondre totes los gropes a son compte pròpri',
 'listgrouprights-removegroup-self-all' => 'Se pòt levar totes los gropes de son compte pròpri',
 
-# E-mail user
+# Email user
 'mailnologin' => "Pas d'adreça",
 'mailnologintext' => 'Vos cal èsser [[Special:UserLogin|connectat(ada)]]
 e aver indicat una adreça electronica valida dins vòstras [[Special:Preferences|preferéncias]]
@@ -3408,7 +3408,7 @@ Los autres ligams sus la meteissa linha son considerats coma d'excepcions, per e
 'monthsall' => 'totes',
 'limitall' => 'totes',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Confirmar l'adreça de corrièr electronic",
 'confirmemail_noemail' => 'L’adreça de corrièr electronic configurada dins vòstras [[Special:Preferences|preferéncias]] es pas valida.',
 'confirmemail_text' => '{{SITENAME}} necessita la verificacion de vòstra adreça de corrièr electronic abans de poder utilizar tota foncion de messatjariá. Utilizatz lo boton çaijós per mandar un corrièr electronic de confirmacion a vòstra adreça. Lo corrièr contendrà un ligam contenent un còde, cargatz aqueste ligam dins vòstre navigador per validar vòstra adreça.',
index fbfbb57..18c04c4 100644 (file)
@@ -353,7 +353,7 @@ $messages = array(
 'november-gen' => 'ନଭେମ୍ବର',
 'december-gen' => 'ଡିସେମ୍ବର',
 'jan' => 'ଜାନୁଆରୀ',
-'feb' => 'ଫà­\87ବà­\8dରà­\81ଆରୀ',
+'feb' => 'ଫà­\87ବà­\83ଆରୀ',
 'mar' => 'ମାର୍ଚ୍ଚ',
 'apr' => 'ଅପ୍ରେଲ',
 'may' => 'ମଇ',
@@ -542,7 +542,7 @@ $1',
 'feedlinks' => 'ଫିଡ଼:',
 'feed-invalid' => 'ଅଚଳ ସବସ୍କ୍ରିପସନ ଫିଡ଼ ପ୍ରକାର ।',
 'feed-unavailable' => 'ସିଣ୍ଡିକେସନ ଫିଡ଼ସବୁ ମିଳୁନାହିଁ',
-'site-rss-feed' => '$1 à¬\86ରà­\87ସà­\87ସ ଫିଡ଼',
+'site-rss-feed' => '$1 à¬\86ରà¬\8fସà¬\8fସ ଫିଡ଼',
 'site-atom-feed' => '$1 ଆଟମ ଫିଡ଼',
 'page-rss-feed' => '$1 ଟି ଆରେସେସ ଫିଡ଼',
 'page-atom-feed' => '$1 ଟି ଆଟମ ଫିଡ଼',
@@ -651,7 +651,7 @@ $2',
 'filereadonlyerror' => 'ଫାଇଲ ଧାରକ "$2"ଟି ଖାଲି ପଢିବା ହେବାଭଳି ରହିଥିବା ହେତୁ ଏଥିରେ ଥିବା $1 ପାଇଲଟିକୁ ବଦଳା ଯାଇପାରିବ ନାହିଁ ।
 
 ଯେଉଁ ପରିଚ୍ଛା ଏହାକୁ ବନ୍ଦ କରିଛନ୍ତି ସେ ଏହି ବିବରଣୀ ଦେଇଛନ୍ତି: "$3"',
-'invalidtitle-knownnamespace' => '"$2" à¬¨à­\87ମà­\8dସà­\8dପà­\87ସ à¬\8fବà¬\82 "$3" à¬²à­\87à¬\96ାଥିବା à¬\85ବà­\88ଧ à¬¶à­\80ରà­\8dଷà¬\95 à¥¤',
+'invalidtitle-knownnamespace' => '"$2" ନେମସ୍ପେସ ଏବଂ "$3" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।',
 'invalidtitle-unknownnamespace' => '"$1" ନେମ୍ସ୍ପେସ ଏବଂ "$2" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।',
 'exception-nologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'exception-nologin-text' => 'ଏହା କରିବାକୁ ହେଲେ ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଲଗଇନ କରିବାକୁ ପଡିବ ।',
@@ -764,12 +764,12 @@ continue using your old password.',
 ଯଦି ଭୁଲରେ ଏହି ଖାତାଟି ତିଆରି କରାଯାଇଥାଏ, ତେବେ ଏହି ସୂଚନାଟିକୁ ଅଣଦେଖା କରିବେ ।',
 'usernamehasherror' => 'ଇଉଜର ନାମରେ ହାସ ଅକ୍ଷର (hash characters) ରହି ପାରିବନାହିଁ',
 'login-throttled' => 'ଆପଣ ବହୁ ଥର ଲଗ ଇନ କରିବାର ଉଦ୍ୟମ କରିଅଛନ୍ତି ।
-ଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରିବା ଆଗରୁ କିଛି କାଳ ଅପେକ୍ଷ କରନ୍ତୁ ।',
+ଦୟାକରି ଆଉଥରେ ଚେଷ୍ଟା କରିବା ଆଗରୁ କିଛି କାଳ ଅପେକ୍ଷ କରନ୍ତୁ ।',
 'login-abort-generic' => 'ଆପଣଙ୍କ ଲଗ ଇନ ଅସଫଳ ହେଲା - ନାକଚ କରିଦିଆଗଲା',
 'loginlanguagelabel' => 'ଭାଷା: $1',
 'suspicious-userlogout' => 'ଲଗ ଆଉଟ କରିବା ନିମନ୍ତେ ଆପଣ କରିଥିବା ଆବେଦନ ନାକଚ କରିଦିଆଗଲା କାରଣ ଲାଗୁଅଛି ଯେ ଏହା ଏକ ଅସ୍ଥିର ବ୍ରାଉଜରରୁ ପଠାଯାଇଅଛି ଅବା ପ୍ରକ୍ସି ଧରାଯାଇଅଛି ।',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'PHP ର ମେଲ() କାମରେ ଅଜଣା ଅସୁବିଧା ।',
 'user-mail-no-addy' => 'ଏକ ଇ-ମେଲ ଠିକଣା ବିନା ଇ-ମେଲ ପଠାଇବାକୁ ଚେଷ୍ଟା କଲୁଁ ।',
 'user-mail-no-body' => 'ଏକ ଖାଲି କିମ୍ବା ଅଦରକାରୀ ଛୋଟ ଲେଖା ଥିବା ମେଲ ପଠେଇବାକୁ ଚେଷ୍ଟା କରିଥିଲେ',
@@ -783,9 +783,9 @@ continue using your old password.',
 'newpassword' => 'ନୂଆ ପାସୱାର୍ଡ଼:',
 'retypenew' => 'ପାସୱାର୍ଡ଼ ଆଉଥରେ ଦିଅନ୍ତୁ:',
 'resetpass_submit' => 'ପାସୱାର୍ଡ଼ଟିଏ ଦେଇ ଲଗ ଇନ କରନ୍ତୁ',
-'resetpass_success' => 'à¬\86ପଣà¬\99à­\8dà¬\95 à¬ªà¬¾à¬¸à¬¬ାର୍ଡ଼ଟି ବଦଳାଇ ଦିଆଗଲା !
+'resetpass_success' => 'à¬\86ପଣà¬\99à­\8dà¬\95 à¬ªà¬¾à¬¸à­±ାର୍ଡ଼ଟି ବଦଳାଇ ଦିଆଗଲା !
 ଏବେ ଲଗ ଇନ କରୁଅଛୁଁ...',
-'resetpass_forbidden' => 'ପାସବାର୍ଡ଼ମାନ ବଦଳା ଯାଇପାରିବ ନାହିଁ',
+'resetpass_forbidden' => 'ପାସୱାର୍ଡ଼ମାନ ବଦଳା ଯାଇପାରିବ ନାହିଁ',
 'resetpass-no-info' => 'ଏହି ପୃଷ୍ଠାଟିକୁ ସିଧା ଖୋଲିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ ଲଗ ଇନ କରିବାକୁ ପଡ଼ିବ ।',
 'resetpass-submit-loggedin' => 'ପାସୱାର୍ଡ଼ ବଦଳାନ୍ତୁ',
 'resetpass-submit-cancel' => 'ନାକଚ',
@@ -797,7 +797,7 @@ continue using your old password.',
 'passwordreset' => 'ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ',
 'passwordreset-text' => 'ନିଜ ଖାତାର ସବିଶେଷ ବିବରଣୀ ଏକ ଇ-ମେଲରେ ପାଇବା ପାଇଁ ଏହି ଆବେଦନ ପତ୍ରଟି ପୂରଣ କରନ୍ତୁ ।',
 'passwordreset-legend' => 'ପାସୱାର୍ଡ଼ ପୁନସ୍ଥାପନ କରନ୍ତୁ',
-'passwordreset-disabled' => 'ପାସବାର୍ଡ଼କୁ ପୁରାପୁରି ମୂଳକୁ ଫେରାଇବା ଏହି ଉଇକିରେ ଅଚଳ କରାଯାଇଅଛି ।',
+'passwordreset-disabled' => 'ପାସୱାର୍ଡ଼କୁ ପୁରାପୁରି ମୂଳକୁ ଫେରାଇବା ଏହି ଉଇକିରେ ଅଚଳ କରାଯାଇଅଛି ।',
 'passwordreset-pretext' => '{{PLURAL:$1||ତଳେ ଥିବା ତଥ୍ୟସମୂହରୁ କୌଣସି ଗୋଟିଏ ଦିଅନ୍ତୁ}}',
 'passwordreset-username' => 'ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:',
 'passwordreset-domain' => 'ଡୋମେନ:',
@@ -917,16 +917,16 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'loginreqtitle' => 'ଲଗ ଇନ ଲୋଡ଼ା',
 'loginreqlink' => 'ଲଗଇନ',
 'loginreqpagetext' => 'ବାକି ପୃଷ୍ଠାମାନ ଦେଖିବା ନିମନ୍ତେ ଆପଣଙ୍କୁ $1 କରିବାକୁ ପଡ଼ିବ ।',
-'accmailtitle' => 'ପାସବାର୍ଡ଼ଟି ପଠାଇ ଦିଆଗଲା ।',
-'accmailtext' => "[[User talk:$1|$1]]à¬\99à­\8dà¬\95 à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\8fà¬\95 à¬¯à¬¾à¬¹à¬¿à¬¤à¬¾à¬¹à¬¿ à¬ªà¬¾à¬¸à¬¬ାର୍ଡ଼ $2ଙ୍କ ନିକଟକୁ ପଠାଗଲା ।
+'accmailtitle' => 'ପାସୱାର୍ଡ଼ଟି ପଠାଇ ଦିଆଗଲା ।',
+'accmailtext' => "[[User talk:$1|$1]]à¬\99à­\8dà¬\95 à¬¨à¬¿à¬®à¬¨à­\8dତà­\87 à¬\8fà¬\95 à¬¯à¬¾à¬¹à¬¿à¬¤à¬¾à¬¹à¬¿ à¬ªà¬¾à¬¸à­±ାର୍ଡ଼ $2ଙ୍କ ନିକଟକୁ ପଠାଗଲା ।
 
-à¬\8fହି à¬ªà¬¾à¬¸à¬¬à¬¾à¬°à­\8dଡ଼à¬\9fି ''[[Special:ChangePassword|ପାସବାରà­\8dଡ଼  ବଦଳାଇବା]]'' ପୃଷ୍ଠାରେ ଲଗଇନ କରି କରାଯାଇପାରିବ ।",
+à¬\8fହି à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼à¬\9fି ''[[Special:ChangePassword|ପାସୱାରà­\8dଡ଼ ବଦଳାଇବା]]'' ପୃଷ୍ଠାରେ ଲଗଇନ କରି କରାଯାଇପାରିବ ।",
 'newarticle' => '(ନୁଆ)',
 'newarticletext' => "ଆପଣ ଖୋଲିଥିବା ଲିଙ୍କଟିରେ ଏଯାଏଁ କିଛିବି ପୃଷ୍ଠା ନାହିଁ ।
 ଏହି ପୃଷ୍ଠାଟିକୁ ତିଆରି କରିବା ପାଇଁ ତଳ ବାକ୍ସରେ ଟାଇପ କରନ୍ତୁ (ଅଧିକ ଜାଣିବା ପାଇଁ [[{{MediaWiki:Helppage}}|ସାହାଯ୍ୟ ପୃଷ୍ଠା]] ଦେଖନ୍ତୁ) ।
 ଯଦି ଆପଣ ଏଠାକୁ ଭୁଲରେ ଆସିଯାଇଥାନ୍ତି ତେବେ ଆପଣଙ୍କ ବ୍ରାଉଜରର '''Back''' ପତିଟି ଦବାନ୍ତୁ ।",
 'anontalkpagetext' => "----''ଏହା ଏକ IP ଖାତା ଖୋଲିନଥିବା ବା ଖାତା ବ୍ୟବହାର କରିନଥିବା ଜଣେ ବେନାମି ସଭ୍ୟଙ୍କର ଆଲୋଚନା ପୃଷ୍ଠା ।
-ତà­\87ଣà­\81 à¬\86ମà­\8dଭà­\87 à¬¸à¬\99à­\8dà¬\96à­\8dà­\9fା à¬¦à­\87à¬\87 à¬¸à­\82à¬\9aିତ IP ଠିକଣା ଦେଇ ତାହାଙ୍କୁ ଜାଣିବା ।
+ତà­\87ଣà­\81 à¬\86ମà­\8dଭà­\87 à¬¸à¬\82à¬\96à­\8dà­\9fା à¬¦à­\87à¬\87 à¬¸à­\82à¬\9aà­\80ତ IP ଠିକଣା ଦେଇ ତାହାଙ୍କୁ ଜାଣିବା ।
 ଏହି ପ୍ରକାରର IP ଠିକଣା ବହୁ ସଭ୍ୟଙ୍କ ଦେଇ ବଣ୍ଟା ବି ଯାଇପାରେ ।
 ଯଦି ଆପଣ ଜଣେ ଅଜଣା ସଭ୍ୟ ଓ ଭାବୁଛନ୍ତି ଇଆଡୁ ସିଆଡୁ ମତାମତ ସବୁ ଆପଣଙ୍କ ଉପରେ ଦିଆଯାଇଛି ତେବେ ଦୟାକରି [[Special:UserLogin/signup|ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ]] କିମ୍ବା [[Special:UserLogin|ଆଗରୁ ଥିବା ଖାତାରେ ଲଗ ଇନ କରନ୍ତୁ]] ଯାହା ବେନାମି ସଭ୍ୟଙ୍କୁ ନେଇ ଉପୁଜିଥିବା ଦ୍ଵନ୍ଦର ସମାଧାନ କରିବ ।''",
 'noarticletext' => 'ଏହି ପୃଷ୍ଠାଟିରେ କିଛି ବି ଲେଖା ନାହିଁ ।
@@ -1048,7 +1048,7 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'edit-conflict' => 'ବଦଳାଇବା ଦ୍ଵନ୍ଦ.',
 'edit-no-change' => 'ଆପଣଙ୍କ ସମ୍ପାଦନାକୁ ଅଣଦେଖା କରାଗଲା, କାରଣ ଲେଖାରେ କିଛି ବି ବଦଳ କରାଯାଇନଥିଲା ।',
 'edit-already-exists' => 'ନୂଆ ପୃଷ୍ଠାଟିଏ ତିଆରି କରିପାରିଲୁଁ ନାହିଁ ।
-à¬\8fହା à¬\85ଗରୁ ଅଛି ।',
+à¬\8fହା à¬\86ଗରୁ ଅଛି ।',
 'defaultmessagetext' => 'ଡିଫଲ୍ଟ ମେସେଜ ଲେଖାଗୁଡିକ',
 'content-failed-to-parse' => '$1 ପ୍ରକାର ପାଇଁ $2 ଲେଖାକୁ ବର୍ଣ୍ଣନା କରିପାରିଲା ନାହିଁ: $3',
 'invalid-content-data' => 'ଅବୈଧ ଆଧାର ତଥ୍ୟ',
@@ -1445,12 +1445,12 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'gender-unknown' => 'ଲୁଚାଯାଇଥିବା',
 'gender-male' => 'ପୁରୁଷ',
 'gender-female' => 'ନାରୀ',
-'prefs-help-gender' => 'à¬\87à¬\9aà­\8dà¬\9bାଧିନ: à¬¸à¬«à­\8dà¬\9fବେରରେ ଲିଙ୍ଗବାଚକ ସମ୍ବୋଧନ ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଇଥାଏ ।
+'prefs-help-gender' => 'à¬\87à¬\9aà­\8dà¬\9bାଧିନ: à¬¸à¬«à­\8dà¬\9fà­±େରରେ ଲିଙ୍ଗବାଚକ ସମ୍ବୋଧନ ନିମନ୍ତେ ବ୍ୟବହାର କରାଯାଇଥାଏ ।
 ଏହି ତଥ୍ୟ ସାଧାରଣରେ ପ୍ରକାଶିତ ।',
 'email' => 'ଇ-ମେଲ',
 'prefs-help-realname' => 'ପ୍ରକୃତ ନାମ ଦେବା ଆପଣଙ୍କ ଉପରେ ନିର୍ଭର କରେ ।
 ଯଦି ଆପଣ ଏହା ଦିଅନ୍ତି, ତେବେ ଏହା ଆପଣଙ୍କ କାମ ପାଇଁ ଶ୍ରେୟ ଦେବାରେ ବ୍ୟବହାର କରାଯାଇପାରିବ ।',
-'prefs-help-email' => 'à¬\87-ମà­\87ଲ à¬ à¬¿à¬\95ଣାà¬\9fି à¬\87à¬\9aà­\8dà¬\9bାଧà­\80ନ, à¬\95ିନà­\8dତà­\81 à¬\86ପଣ à¬ªà¬¾à¬¸à¬¬à¬¾à¬°à­\8dଡ଼à¬\9fି à¬¯à¬¦ି ଭୁଲିଗଲେ ତାହା ଆଉଥରେ ତିଆରିବା ପାଇଁ ଏହା କାମରେ ଲାଗିବ ।',
+'prefs-help-email' => 'à¬\87-ମà­\87ଲ à¬ à¬¿à¬\95ଣାà¬\9fି à¬\87à¬\9aà­\8dà¬\9bାଧà­\80ନ, à¬\95ିନà­\8dତà­\81 à¬\86ପଣ à¬¯à¬¦à¬¿ à¬ªà¬¾à¬¸à­±à¬¾à¬°à­\8dଡ଼à¬\9fି ଭୁଲିଗଲେ ତାହା ଆଉଥରେ ତିଆରିବା ପାଇଁ ଏହା କାମରେ ଲାଗିବ ।',
 'prefs-help-email-others' => 'ଆପଣ ନିଜର ଇ-ମେଲଟିଏ ନିଜର ସଭ୍ୟ ବା ଆଲୋଚନା ପୃଷ୍ଠାରେ ଦେଇ ଅନ୍ୟମାନଙ୍କୁ ଇ-ମେଲରେ ଯୋଗଯୋଗ କରିବାର ସୁବିଧା ଦେଇପାରିବେ ।
 ଆପଣଙ୍କୁ କେହି ମେଲ କଲେ ଆପଣଙ୍କ ଇ-ମେଲ ତାହାଙ୍କୁ ଦେଖାଯିବ ନାହିଁ ।',
 'prefs-help-email-required' => 'ଇ-ମେଲ ଠିକଣାଟି ଲୋଡ଼ା ।',
@@ -1469,7 +1469,7 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'prefs-displaywatchlist' => 'ଦେଖଣା ବିକଳ୍ପ',
 'prefs-diffs' => 'ତଫାତସବୁ',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ଇ-ମେଲ ଠିକଣା ବୈଧ ଭଳି ଲାଗୁଅଛି',
 'email-address-validity-invalid' => 'ଏକ ସଠିକ ଇ-ମେଲ ଠିକଣା ଦିଅନ୍ତୁ',
 
@@ -1550,7 +1550,7 @@ HTML ଟାଗ ପରଖିନିଅନ୍ତୁ ।',
 'right-deletedtext' => 'ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଓ ଲିଭାଇ ଦିଆଯାଇଥିବା ଲେଖା ଭିତରର ସଙ୍କଳନର ବଦଳ ଦେଖିବେ',
 'right-browsearchive' => 'ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାସବୁକୁ ଖୋଜିବେ',
 'right-undelete' => 'ଲିଭାଇ ଦିଆଯାଇଥିବା ପୃଷ୍ଠାଟିଏକୁ ଫେରାଇ ଆଣିବେ',
-'right-suppressrevision' => 'ପରିà¬\9bାମାନଙ୍କଠାରୁ ଲୁଚାଯାଇଥିବା ସଙ୍କଳନ ପରଖିବେ ଓ ଲେଉଟାଇବେ',
+'right-suppressrevision' => 'ପରିà¬\9aାଳà¬\95ମାନଙ୍କଠାରୁ ଲୁଚାଯାଇଥିବା ସଙ୍କଳନ ପରଖିବେ ଓ ଲେଉଟାଇବେ',
 'right-suppressionlog' => 'ବ୍ୟକ୍ତିଗତ ଲଗ ଦେଖାଇବେ',
 'right-block' => 'ବାକି ସଭ୍ୟମାନଙ୍କୁ ସମ୍ପାଦନାରୁ ବାରଣ କରିବେ',
 'right-blockemail' => 'ଇ-ମେଲ ପଠାଇବାରୁ ଜଣେ ସଭ୍ୟଙ୍କୁ ବାରଣ କରିବେ',
@@ -2254,7 +2254,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 'listgrouprights-addgroup-self-all' => 'ନିଜ ଖାତାରେ ସବୁଯାକ ଗୋଠ ଯୋଡ଼ିବେ',
 'listgrouprights-removegroup-self-all' => 'ନିଜ ଖାତାରୁ ସବୁଯାକ ଗୋଠ ହଟାଇଦେବେ',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ଗୋଟିଏ ବି ପଠାଇବା ଠିକଣା ନାହିଁ',
 'mailnologintext' => 'ଆପଣ ନିଜ [[Special:Preferences|ପସନ୍ଦସବୁ]]ରେ [[Special:UserLogin|ଲଗ ଇନ]] କରିଥିଲେ ଓ ନିଜର ଏକ ସଚଳ ଇ-ମେଲ ଠିକଣା ଥିଲେ ଯାଇ ବାକି ସବୁ ସଭ୍ୟଙ୍କୁ ଇ-ମେଲ ପଠାଇପାରିବେ ।',
 'emailuser' => 'ଏହି ସଭ୍ୟଙ୍କୁ ଇମେଲ କରିବେ',
@@ -3626,7 +3626,7 @@ $1',
 'monthsall' => 'ସବୁ',
 'limitall' => 'ସବୁ',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ଆପଣଙ୍କ ଇମେଲ ଠିକଣା ଟି ଠିକ ବୋଲି ଥୟ କରନ୍ତୁ',
 'confirmemail_noemail' => '[[Special:Preferences|ଆପଣଙ୍କ ପସନ୍ଦ]] ଭିତରେ  ଏକ ସଠିକ ଇମେଲ ଠିକଣା ଦିଆଯାଇନାହିଁ ।',
 'confirmemail_text' => 'ଆପଣା ଇମେଲ ସୁବିଧା ବ୍ୟବହାର କରିବା ଆଗରୁ {{SITENAME}}ରେ ଆପଣଙ୍କର ଇମେଲ ଠିକଣା ଥୟ କରିବାକୁ ପଡ଼ିବ ।
index 5cc7fc1..ce32151 100644 (file)
@@ -622,7 +622,7 @@ $1',
 'login-abort-generic' => 'غونډال کې مو ننوتل نابريالی شو - ناڅاپي بند شو',
 'loginlanguagelabel' => 'ژبه: $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => 'د يوې برېښليک پتې پرته د برېښليک لېږلو هڅه شوې.',
 
 # Change password dialog
@@ -1097,7 +1097,7 @@ $1',
 'prefs-displaywatchlist' => 'د ښکارېدنې خوښنې',
 'prefs-diffs' => 'توپيرونه',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'برېښليک پته سمه ښکاري',
 'email-address-validity-invalid' => 'يوه سمه برېښليک پته وليکۍ',
 
@@ -1602,7 +1602,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'خپل ګڼون کې ټولې ډلې ورګډول',
 'listgrouprights-removegroup-self-all' => 'خپل ګڼون نه ټولې ډلې ليري کول',
 
-# E-mail user
+# Email user
 'mailnologin' => 'هېڅ کومه لېږل شوې پته نشته',
 'emailuser' => 'کارن ته برېښليک لېږل',
 'emailuser-title-target' => 'دې {{GENDER:$1|کارن}} ته برېښليک لېږل',
@@ -2425,7 +2425,7 @@ $1',
 'monthsall' => 'ټول',
 'limitall' => 'ټول',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'د برېښليک پتې پخلی وکړی',
 'confirmemail_noemail' => 'تاسې يوه سمه برېښليک پته نه ده ثبته کړې مهرباني وکړی [[Special:Preferences|د کارن غوره توبونه]] مو بدل کړۍ.',
 'confirmemail_send' => 'يو تاييدي کوډ لېږل',
index 2b684d8..73b7c2f 100644 (file)
@@ -819,7 +819,7 @@ Aguarde antes de tentar novamente, por favor.',
 'loginlanguagelabel' => 'Língua: $1',
 'suspicious-userlogout' => 'O seu pedido para sair foi negado porque parece ter sido enviado por um browser danificado ou por um proxy com cache.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Erro desconhecido na função mail() do PHP',
 'user-mail-no-addy' => 'Tentou enviar uma mensagem sem um endereço de correio electrónico',
 
@@ -1511,7 +1511,7 @@ Esta informação será pública.',
 'prefs-displaywatchlist' => 'Opções de apresentação',
 'prefs-diffs' => 'Diferenças',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Parece válido',
 'email-address-validity-invalid' => 'Endereço válido necessário!',
 
@@ -2303,7 +2303,7 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações
 'listgrouprights-addgroup-self-all' => 'Adicionar a própria conta a todos os grupos',
 'listgrouprights-removegroup-self-all' => 'Remover a própria conta de todos os grupos',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Não existe endereço de envio',
 'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e possuir um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio electrónico a outros utilizadores.',
 'emailuser' => 'Enviar correio electrónico a este utilizador',
@@ -3680,7 +3680,7 @@ Caso o ficheiro tenha sido modificado a partir do seu estado original, alguns de
 'monthsall' => 'todos',
 'limitall' => 'tudo',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar endereço de correio electrónico',
 'confirmemail_noemail' => 'Não tem um endereço de correio electrónico válido nas suas [[Special:Preferences|preferências de utilizador]].',
 'confirmemail_text' => 'A {{SITENAME}} requer que valide o seu endereço de correio electrónico antes de usar as funcionalidades de correio.
index a1ff3eb..7eff256 100644 (file)
@@ -823,7 +823,7 @@ Por favor aguarde antes de tentar novamente.',
 'loginlanguagelabel' => 'Idioma: $1',
 'suspicious-userlogout' => 'Sua solicitação para sair foi negada porque aparentemente foi enviada por um navegador danificado ou por um servidor proxy com cache.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Erro desconhecido na função mail() do PHP',
 'user-mail-no-addy' => 'Tentou enviar uma mensagem sem um endereço de e-mail.',
 'user-mail-no-body' => 'Você tentou enviar com o campo de e-mail vazio ou com poucos caracteres.',
@@ -1508,7 +1508,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'prefs-displaywatchlist' => 'Opções de exibição',
 'prefs-diffs' => 'Diferenças',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Parece válido',
 'email-address-validity-invalid' => 'Forneça um endereço de e-mail válido',
 
@@ -2114,6 +2114,10 @@ Talvez você deseje editar a descrição na sua [$2 página de descrição de ar
 Talvez fosse melhor que possuissem links para uma página mais específica.</br>
 Uma página é considerada como de desambiguação se utilizar uma predefinição que esteja definida em [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Páginas com uma propriedade de página',
+'pageswithprop-text' => 'Esta página lista as páginas que usam uma determinada propriedade de página.',
+'pageswithprop-prop' => 'Nome da propriedade:',
+
 'doubleredirects' => 'Redirecionamentos duplos',
 'doubleredirectstext' => 'Esta página lista as páginas que redirecionam para outros redirecionamentos.
 Cada linha contém links para o primeiro e o segundo redirecionamentos, juntamente com o alvo do segundo redirecionamento, que é geralmente a verdadeira página de destino, para a qual o primeiro redirecionamento deveria apontar.
@@ -2304,7 +2308,7 @@ Pode haver [[{{MediaWiki:Listgrouprights-helppage}}|informações adicionais]] s
 'listgrouprights-addgroup-self-all' => 'Pode adicionar todos os grupos à própria conta',
 'listgrouprights-removegroup-self-all' => 'Pode remover todos os grupos da própria conta',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nenhum endereço de envio',
 'mailnologintext' => 'Necessita de estar [[Special:UserLogin|autenticado]] e de possuir um endereço de e-mail válido nas suas [[Special:Preferences|preferências]] para poder enviar um e-mail a outros usuários.',
 'emailuser' => 'Enviar-lhe um e-mail',
@@ -2512,7 +2516,7 @@ Esta é a configuração atual para a página '''$1''':",
 'protect-fallback' => 'Permitir apenas os usuários com privilégio de "$1"',
 'protect-level-autoconfirmed' => 'Permitir apenas usuários auto-confirmados',
 'protect-level-sysop' => 'Permitir apenas administradores',
-'protect-summary-cascade' => 'p. progressiva',
+'protect-summary-cascade' => 'em cascata',
 'protect-expiring' => 'expira em $1 (UTC)',
 'protect-expiring-local' => 'expira $1',
 'protect-expiry-indefinite' => 'indefinidamente',
@@ -2987,6 +2991,7 @@ Salve o arquivo no seu computador e importe-o aqui.',
 'import-error-interwiki' => 'A página "$1" não pôde ser importada pois seu nome está reservado para um link interwik.',
 'import-error-special' => 'A página "$1" não pôde ser importada porque ela pertence a um espaço nominal especial que não suporta páginas.',
 'import-error-invalid' => 'A página "$1" não pôde ser importada por seu nome ser inválido.',
+'import-error-unserialize' => 'Revisão  $2  da página " $1 " não pôde ser desserializada. A revisão foi relatada para usar o modelo de conteúdo  $3  serializado como  $4',
 'import-options-wrong' => '{{PLURAL:$2|Opção com erro|Opções com erros}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'A página raiz dada é um título inválido.',
 'import-rootpage-nosubpage' => 'O espaço nominal $1 da página principal não permite subpáginas.',
@@ -3138,6 +3143,7 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 'pageinfo-robot-noindex' => 'Não indexável',
 'pageinfo-views' => 'Número de visitas',
 'pageinfo-watchers' => 'Número de vigilantes da página',
+'pageinfo-few-watchers' => 'Menos de  $1  {{PLURAL:$1|vigilante|vigilantes}}',
 'pageinfo-redirects-name' => 'Redirecionamentos para esta página',
 'pageinfo-subpages-name' => 'Subpáginas desta página',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não redirecionamento|não redirecionamentos}})',
@@ -3684,7 +3690,7 @@ Por padrão, outros campos estarão ocultos.
 'monthsall' => 'todos',
 'limitall' => 'todas',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmar endereço de E-mail',
 'confirmemail_noemail' => 'Não possui um endereço de e-mail válido indicado nas suas [[Special:Preferences|preferências de usuário]].',
 'confirmemail_text' => '{{SITENAME}} requer o seu endereço de e-mail esteja validado antes de utilizar as funcionalidades que requerem um endereço de e-mail.
@@ -3823,7 +3829,7 @@ Tente a previsão comum.',
 'watchlistedit-normal-explain' => 'Os títulos das páginas de sua lista de vigiadas são exibidos abaixo.
 Para remover um título, marque a caixa ao lado do mesmo e clique "{{int:Watchlistedit-normal-submit}}".
 Você pode também [[Special:EditWatchlist/raw|editar a lista de páginas vigiadas em forma de texto]].',
-'watchlistedit-normal-submit' => 'Remover Títulos',
+'watchlistedit-normal-submit' => 'Remover páginas',
 'watchlistedit-normal-done' => '{{PLURAL:$1|um título foi removido|$1 títulos foram removidos}} de sua lista de páginas vigiadas:',
 'watchlistedit-raw-title' => 'Edição crua da lista de páginas vigiadas',
 'watchlistedit-raw-legend' => 'Edição crua da lista de páginas vigiadas',
@@ -4069,6 +4075,7 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'api-error-ok-but-empty' => 'Erro interno: não há resposta do servidor.',
 'api-error-overwrite' => 'Não é permitido sobrescrever um arquivo já existente.',
 'api-error-stashfailed' => 'Erro interno: o servidor não conseguiu armazenar o arquivo temporário.',
+'api-error-publishfailed' => 'Erro interno: O servidor falhou ao publicar o arquivo temporário.',
 'api-error-timeout' => 'O servidor não respondeu dentro do tempo esperado.',
 'api-error-unclassified' => 'Ocorreu um erro desconhecido',
 'api-error-unknown-code' => 'Erro desconhecido: "$1"',
@@ -4089,4 +4096,7 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milênio|milênios}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Páginas com uma propriedade de página',
+'pageswithprop-submit' => 'Ir',
 );
index 465b7f5..57be6de 100644 (file)
  * @author Usarker
  * @author Verdy p
  * @author Vinhtantran
+ * @author Vivaelcelta
  * @author Waldir
  * @author Whym
  * @author Yekrats
@@ -342,7 +343,8 @@ Parameters:
 
 Parameters:
 * $1 - number of files shown',
-'listingcontinuesabbrev' => 'Shown in contiuation of each first letter group.
+'listingcontinuesabbrev' => 'Shown in contiuation of each first letter group. This message follows the first letter.
+
 See http://test.wikipedia.org/wiki/Category:Test_ko?uselang={{SUBPAGENAME}}, for example.',
 'index-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where pages with the <nowiki>__INDEX__</nowiki> behaviour switch are listed. For description of this behaviour switch see [[mw:Help:Magic_words#Behavior_switches|MediaWiki]].',
 'noindex-category' => 'Name of the [[mw:Help:Tracking categories|tracking category]] where pages with the <nowiki>__NOINDEX__</nowiki> behaviour switch are listed. For description of this behaviour switch see [[mw:Help:Magic_words#Behavior_switches|MediaWiki]].',
@@ -449,7 +451,7 @@ This can also appear in the credits page if the credits feature is enabled,for e
 Used to identify the source of copied information.',
 'help' => 'General text (noun) used in the sidebar (by default).
 
-See also [[MediaWiki:Helppage/{{SUBPAGENAME}}|{{int:helppage}}]] and [[MediaWiki:Edithelp/{{SUBPAGENAME}}|{{int:edithelp}}]].
+See also {{msg-mw|Helppage}} and {{msg-mw|Edithelp}}.
 
 See also:
 * {{msg-mw|Help}}
@@ -465,16 +467,14 @@ See also:
 * {{msg-mw|Accesskey-search}}
 * {{msg-mw|Tooltip-search}}
 {{Identical|Search}}',
-'searchbutton' => 'The button you can see in the sidebar, below the search input box. The "Go" button is [[MediaWiki:Searcharticle/{{SUBPAGENAME}}]].
-
+'searchbutton' => 'The button you can see in the sidebar, below the search input box. The "Go" button is {{msg-mw|Searcharticle}}.
 {{Identical|Search}}',
 'go' => 'See also:
 * {{msg-mw|Go}}
 * {{msg-mw|Accesskey-search-go}}
 * {{msg-mw|Tooltip-search-go}}
 {{Identical|Go}}',
-'searcharticle' => 'Button description in the search menu displayed on every page. The "Search" button is [[MediaWiki:Searchbutton/{{SUBPAGENAME}}]].
-
+'searcharticle' => 'Button description in the search menu displayed on every page. The "Search" button is {{msg-mw|Searchbutton}}.
 {{Identical|Go}}',
 'history' => '{{Identical|Page history}}',
 'history_short' => 'Text used on the history tab.
@@ -814,7 +814,8 @@ See also:
 * {{msg-mw|Accesskey-ca-nstab-main}}
 * {{msg-mw|Tooltip-ca-nstab-main}}
 {{Identical|Page}}',
-'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>{{GENDER:{{BASEPAGENAME}}|male form|female form}}</nowiki> if needed.
+'nstab-user' => 'The name for the tab of the user namespace. Example: [[User:Example]]. It is possible to use <nowiki>
+{{GENDER:{{#titleparts:{{BASEPAGENAME}}|1}}|male form|female form}}</nowiki> if needed.
 
 See also:
 * {{msg-mw|Nstab-user}}
@@ -1034,10 +1035,8 @@ Parameters:
 * $1 - an URL to [[Special:Userlogin]] containing <code>returnto</code> and <code>returntoquery</code> parameters',
 'welcomeuser' => 'Text for a welcome heading that users see after registering a user account. $1 is the username of the new user. See [[bugzilla:42215]]',
 'welcomecreation-msg' => 'A welcome message users see after registering a user account, following a welcomeuser heading. $1 is the username of the new user. Replaces welcomecreation in 1.21wmf5,see [[bugzilla:42215]]',
-'yourname' => "In user preferences
-
-<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.
-
+'yourname' => "{{doc-important|<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.}}
+In user preferences.
 {{Identical|Username}}",
 'yourpassword' => 'In user preferences
 
@@ -1077,8 +1076,9 @@ See also:
 'notloggedin' => 'This message is displayed in the standard skin when not logged in. The message is placed above the login link in the top right corner of pages.
 
 {{Identical|Not logged in}}',
-'nologin' => 'A message shown in the log in form. $1 is a link to the account creation form, and the text of it is "[[MediaWiki:Nologinlink/{{SUBPAGENAME}}|{{int:nologinlink}}]]".',
-'nologinlink' => 'Text of the link to the account creation form. Before that link, the message [[MediaWiki:Nologin/{{SUBPAGENAME}}]] appears.
+'nologin' => 'A message shown in the log in form. Parameters:
+* $1 - a link to the account creation form, and the text of it is {{msg-mw|Nologinlink}}',
+'nologinlink' => 'Text of the link to the account creation form. Before that link, the message {{msg-mw|Nologin}} appears.
 {{Identical|Create an account}}',
 'createaccount' => 'The title of [[Special:CreateAccount]], where users can register a new account. Used on [[Special:SpecialPages]] and on the submit button in the form where you register a new account.
 
@@ -1086,8 +1086,7 @@ It is also used on the top of the page for logged out users, where it appears ne
 {{Identical|Create account}}',
 'gotaccount' => 'A message shown in the account creation form.
 * $1 - a link to the log in form, and the text of it is {{msg-mw|Gotaccountlink}}',
-'gotaccountlink' => 'Text of the link to the log in form. Before that link, the message [[MediaWiki:Gotaccount/{{SUBPAGENAME}}]] appears.
-
+'gotaccountlink' => 'Text of the link to the log in form. Before that link, the message {{msg-mw|Gotaccount}} appears.
 {{Identical|Log in}}',
 'userlogin-resetlink' => 'Used on the login page.',
 'createaccountmail' => 'Button text for creating a new account and sending the new password to the specified e-mail address directly, as used on [[Special:UserLogin/signup]] if creating accounts by e-mail is allowed.',
@@ -1107,9 +1106,11 @@ Defaults to '''nocookieslogin''' ({{int:nocookieslogin}})",
 'noname' => 'Error message.',
 'loginsuccesstitle' => 'The title of the page saying that you are logged in. The content of the page is the message {{msg-mw|Loginsuccess}}.
 {{Identical|Login successful}}',
-'loginsuccess' => 'The content of the page saying that you are logged in. The title of the page is "[[MediaWiki:Loginsuccesstitle/{{SUBPAGENAME}}|{{int:loginsuccesstitle}}]]". $1 is the name of the logged in user.
+'loginsuccess' => 'The content of the page saying that you are logged in. The title of the page is {{msg-mw|Loginsuccesstitle}}.
 
-<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is supported.',
+Parameters:
+* $1 - the name of the logged in user
+{{Gender}}',
 'nosuchuser' => 'Displayed when trying to log in with an unexisting username. When you are not allowed to create an account, the message {{msg-mw|nosuchusershort}} is displayed.',
 'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg-mw|nosuchusershort}} is displayed.",
 'nouserspecified' => 'Used as error message when username to fetch is not specified.',
@@ -1144,7 +1145,8 @@ Parameters:
 * $1 - password reminder resend time (in hours)',
 'mailerror' => 'Used as error message in sending confirmation mail to user. Parameters:
 * $1 - new mail address',
-'acct_creation_throttle_hit' => 'Errormessage at [[Special:CreateAccount]].
+'acct_creation_throttle_hit' => 'Error message at [[Special:CreateAccount]].
+
 "in the last day" precisely means: during the lasts 86400 seconds (24 hours) ending right now.',
 'emailauthenticated' => 'In user preferences ([[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}) and on [[Special:ConfirmEmail]].
 
@@ -1180,7 +1182,7 @@ See also:
 {{Identical|Language}}',
 'suspicious-userlogout' => 'Used when the logout request looks suspicious, in Special:UserLogout.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Used as error message when <code>mail()</code> returned empty error message.',
 'user-mail-no-addy' => 'This is the error message in case an e-mail could not be sent because there was no e-mail address to send it to.',
 'user-mail-no-body' => 'This is the error message in case an e-mail has an empty or unreasonably short body',
@@ -1239,8 +1241,8 @@ Parameters:
 * $3 - the number of repetitions in $2
 * $4 - base URL of the wiki',
 'passwordreset-emailelement' => "This is a body of a reminder email to allow them into the system with a new password. Parameters:
-* $1 will be the user's login name. This parameter can be used for GENDER.
-* $2 will be the temporary password given by the system.",
+* $1 - the user's login name. This parameter can be used for GENDER.
+* $2 - the temporary password given by the system",
 'passwordreset-emailsent' => 'Used in [[Special:PasswordReset]].
 
 See also:
@@ -1375,24 +1377,24 @@ Should match: {{msg-mw|summary}}.',
 'blockedtitle' => 'Used as title displayed for blocked users. The corresponding message body is one of the following messages:
 * {{msg-mw|Blockedtext|notext=1}}
 * {{msg-mw|Autoblockedtext|notext=1}}',
-'blockedtext' => 'Text displayed to blocked users. Parameters:
+'blockedtext' => "Text displayed to blocked users. Parameters:
 * $1 - the blocking sysop (with a link to his/her userpage)
 * $2 - the reason for the block
 * $3 - the current IP address of the blocked user
-* $4 - the blocking sysops username (plain text, without the link)
+* $4 - the blocking sysop's username (plain text, without the link)
 * $5 - the unique numeric identifier of the applied autoblock
 * $6 - the expiry of the block
 * $7 - the intended target of the block (what the blocking user specified in the blocking form)
-* $8 - the timestamp when the block started',
-'autoblockedtext' => 'Text displayed to automatically blocked users. Parameters:
+* $8 - the timestamp when the block started",
+'autoblockedtext' => "Text displayed to automatically blocked users. Parameters:
 * $1 - the blocking sysop (with a link to his/her userpage)
 * $2 - the reason for the block
 * $3 - the current IP address of the blocked user
-* $4 - the blocking sysops username (plain text, without the link). Use it for GENDER.
+* $4 - the blocking sysop's username (plain text, without the link). Use it for GENDER.
 * $5 - the unique numeric identifier of the applied autoblock
 * $6 - the expiry of the block
 * $7 - the intended target of the block (what the blocking user specified in the blocking form)
-* $8 - the timestamp when the block started',
+* $8 - the timestamp when the block started",
 'blockednoreason' => 'Substituted with <code>$2</code> in the following message if the reason is not given:
 * {{msg-mw|cantcreateaccount-text}}.
 {{Identical|No reason given}}',
@@ -1580,15 +1582,15 @@ See also:
 * {{msg-mw|edit-gone-missing}}
 * {{msg-mw|edit-conflict}}
 * {{msg-mw|edit-no-change}}',
-'defaultmessagetext' => 'Caption above the default message text shown on the left-hand side of a diff displayed after clicking “Show changes” when creating a new page in the MediaWiki: namespace',
+'defaultmessagetext' => 'Caption above the default message text shown on the left-hand side of a diff displayed after clicking "Show changes" when creating a new page in the MediaWiki: namespace',
 'content-failed-to-parse' => "Error message indicating that the page's content can not be saved because it is syntactically invalid. This may occurr for content types using serialization or a strict markup syntax.
 *$1 – content model ({{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}})
 *$2 – content format as MIME type (e.g. <tt>text/css</tt>)
 *$3 – specific error message",
 'invalid-content-data' => "Error message indicating that the page's content can not be saved because it is invalid. This may occurr for content types with internal consistency constraints.",
 'content-not-allowed-here' => 'Error message indicating that the desired content model is not supported in given localtion.
-* $1 is the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}
-* $2 is the title of the page in question.',
+* $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}
+* $2 - the title of the page in question',
 
 # Content models
 'content-model-wikitext' => 'Name for the wikitext content model, used when decribing what type of content a page contains.
@@ -1713,9 +1715,9 @@ See the error message:
 * $2 is a date (optional)
 * $3 is a time (optional)',
 'revisionasof' => 'Used on a difference page when comparing different versions of a page or when viewing an non-current version of a page. See {{msg-mw|Currentrev-asof}} for the message for the current version.
-* $1 is the date/time at which the revision was created. Example: "\'\'Revision as of 14:44, 24 January 2008\'\'".
-* $2 is the date at which the revision was created.
-* $3 is the time at which the revision was created.',
+* $1 - the date/time at which the revision was created. Example: "\'\'Revision as of 14:44, 24 January 2008\'\'".
+* $2 - the date at which the revision was created
+* $3 - the time at which the revision was created',
 'revision-info' => 'Appears just below the page title when an old version of the page is being viewed.
 
 Parameters:
@@ -2134,8 +2136,8 @@ This message has sometimes a tooltip {{msg-mw|tooltip-undo}}
 *Parameter $1 is the number of revisions
 *Parameter $2 is the number of distinct users who made those revisions",
 'diff-multi-manyusers' => "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions have been edited by more than 100 users. Parameters:
-* $1 is the number of revisions, will always be 101 or more.
-* $2 is the number of users that were found, which was limited at 100.",
+* $1 - the number of revisions, will always be 101 or more
+* $2 - the number of users that were found, which was limited at 100",
 'difference-missing-revision' => 'Text displayed when the requested revision does not exist using a diff link.
 
 Example: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with invalid revision#]
@@ -2253,8 +2255,8 @@ See also:
 * {{msg-mw|Searchprofile-advanced|message}}
 * {{msg-mw|Searchprofile-advanced-tooltip|tooltip}}',
 'search-result-size' => 'Shown per line of a [[Special:Search|search result]]
-* $1 is the size of the page in bytes, but no need to add "byte" or similar as the unit is added by special function.
-* $2 is the sum of all words in this page.',
+* $1 - the size of the page in bytes, but no need to add "byte" or similar as the unit is added by special function
+* $2 - the sum of all words in this page',
 'search-result-category-size' => '* $1 - number of members in this category. $1 is equal to $2+$3.
 * $2 - number of subcategories
 * $3 - number of files',
@@ -2273,7 +2275,7 @@ $1 is the relevance of this result in per cent.
 'search-relatedarticle' => 'This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]
 {{Identical|Related}}',
 'mwsuggest-disable' => "The text of an option on the 'search options' tab of a user's Preferences.",
-'searcheverything-enable' => 'Used in [[Special:Preferences]], tab “Search”.',
+'searcheverything-enable' => 'Used in [[Special:Preferences]], tab "Search".',
 'searchrelated' => 'This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]
 {{Identical|Related}}',
 'searchall' => '{{Identical|All}}',
@@ -2543,7 +2545,7 @@ Used in [[Special:Preferences]], tab "Watchlist". The display options refer to:
 * {{msg-mw|Prefs-watchlist-edits}}',
 'prefs-diffs' => 'Used in [[Special:Preferences]], tab "Misc".',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Used as hint for {{msg-mw|changeemail-newemail}} field in [[Special:ChangeEmail]], when the provided E-mail address is valid.',
 'email-address-validity-invalid' => 'Used as warning for {{msg-mw|changeemail-newemail}} field in [[Special:ChangeEmail]], when the provided E-mail address is invalid.',
 
@@ -2564,14 +2566,14 @@ Used in [[Special:Preferences]], tab "Watchlist". The display options refer to:
 'userrights-groupsmember' => 'Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.
 
 Parameters:
-* $1 - the number of items in the list following the message, for PLURAL.
-* $2 - the user name, for GENDER.',
+* $1 - the number of items in the list following the message, for PLURAL
+* $2 - the user name, for GENDER',
 'userrights-groupsmember-auto' => 'Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.
 "Implicit" is for groups that the user was automatically added to (such as "autoconfirmed"); cf. {{msg-mw|userrights-groupsmember}}
 
 Parameters
-* $1 - the number of items in the list following the message, for PLURAL.
-* $2 - the user name, for GENDER.',
+* $1 - the number of items in the list following the message, for PLURAL
+* $2 - the user name, for GENDER',
 'userrights-groupsmember-type' => '{{optional}}
 Parameters:
 * $1 is list of group names.
@@ -3182,7 +3184,7 @@ See also:
 * {{msg-mw|http-invalid-url}}
 * {{msg-mw|upload-copy-upload-invalid-domain}}
 * {{msg-mw|tmp-create-error}}',
-'large-file' => 'Variables $1 and $2 have appropriate unit symbols already. See for example [[Mediawiki:size-kilobytes]].',
+'large-file' => 'Variables $1 and $2 have appropriate unit symbols already. See for example {{msg-mw|Size-kilobytes}}.',
 'largefileserver' => 'Error message when uploading a file whose size is larger than the maximum allowed',
 'emptyfile' => 'Error message when trying to upload an empty file',
 'windows-nonascii-filename' => 'Used as error message when uploading a file.
@@ -3397,14 +3399,14 @@ See also:
 'backend-fail-alreadyexists' => 'Parameters:
 * $1 is a filename.',
 'backend-fail-store' => 'Parameters:
-* $1 is a filename
-* $2 is a storage path.',
+* $1 - a filename
+* $2 - a storage path',
 'backend-fail-copy' => 'Parameters:
-* $1 is a file path
-* $2 is a file path.',
+* $1 - a file path
+* $2 - a file path',
 'backend-fail-move' => 'Parameters:
-* $1 is a file path
-* $2 is a file path.',
+* $1 - a file path
+* $2 - a file path',
 'backend-fail-opentemp' => 'Used as error message.
 {{Related|Backend-fail}}',
 'backend-fail-writetemp' => 'Used as error message.
@@ -3425,8 +3427,8 @@ See also:
 'backend-fail-contenttype' => '$1 is a storage (file) path',
 'backend-fail-batchsize' => 'Error message when the limit of operations to be done at once in the file backend was reached.
 Parameters:
-* $1 is the number of operations attempted at once in this case.
-* $2 is the maximum number of operations that can be attempted at once.
+* $1 - the number of operations attempted at once in this case
+* $2 - the maximum number of operations that can be attempted at once
 
 A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
 'backend-fail-usable' => 'Parameters:
@@ -3577,13 +3579,15 @@ See also:
 * {{msg-mw|Upload-curl-error28|title}}
 * {{msg-mw|Upload-curl-error28-text|body}}',
 
-'license' => 'This appears in the upload form for the license drop-down. The header in the file description page is now at {{msg-mw|License-header}}.',
+'license' => 'This appears in the upload form for the license drop-down. The header in the file description page is now at {{msg-mw|License-header}}.
+{{Identical|Licensing}}',
 'license-header' => 'Used as section header in [[Special:Upload]].
 
 See also:
 * {{msg-mw|Filedesc}}
 * {{msg-mw|Filestatus}}
-* {{msg-mw|Filesource}}',
+* {{msg-mw|Filesource}}
+{{Identical|Licensing}}',
 'nolicense' => '{{Identical|None selected}}',
 'license-nopreview' => 'Error message when a certain license does not exist',
 'upload_source_url' => 'Used in [[Special:Upload]].
@@ -4088,8 +4092,8 @@ In order to translate ''Unused categories'' and ''wanted categories'' see {{msg|
 'deletedcontributions-title' => 'Title of [[Special:DeletedContributions]] (extension), a special page with a list of edits to pages which were deleted. Only viewable by sysops.
 
 {{Identical|Deleted user contributions}}',
-'sp-deletedcontributions-contribs' => 'Link to user’s contributions on [[Special:DeletedContributions]].
-{{Identical|Contribution}}',
+'sp-deletedcontributions-contribs' => "Link to user's contributions on [[Special:DeletedContributions]].
+{{Identical|Contribution}}",
 
 # Special:LinkSearch
 'linksearch' => 'Title of [[Special:LinkSearch|special page]] and legend of fieldset on that page.
@@ -4170,29 +4174,31 @@ See also:
 * $1 is the text from the 'right-...' messages, i.e. {{msg-mw|right-edit}}
 * $2 is the codename of this right",
 'listgrouprights-addgroup' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
-* $1 is an enumeration of group names.
-* $2 is the number of group names in $1.
-See also {{msg|listgrouprights-removegroup}}.',
+* $1 - an enumeration of group names
+* $2 - the number of group names in $1
+See also:
+* {{msg-mw|listgrouprights-removegroup}}',
 'listgrouprights-removegroup' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
-* $1 is an enumeration of group names.
-* $2 is the number of group names in $1.
-See also {{msg|listgrouprights-addgroup}}.',
+* $1 - an enumeration of group names
+* $2 - the number of group names in $1
+See also:
+* {{msg-mw|listgrouprights-addgroup}}',
 'listgrouprights-addgroup-all' => 'Used on [[Special:ListGroupRights]].
 {{Related|Listgrouprights}}',
 'listgrouprights-removegroup-all' => 'Used on [[Special:ListGroupRights]].
 {{Related|Listgrouprights}}',
 'listgrouprights-addgroup-self' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
-* $1 are the group names.
-* $2 is the number of group names in $1.',
+* $1 - the group names
+* $2 - the number of group names in $1',
 'listgrouprights-removegroup-self' => 'This is an individual right for groups, used on [[Special:ListGroupRights]].
-* $1 are the group names.
-* $2 is the number of group names in $1.',
+* $1 - the group names
+* $2 - the number of group names in $1',
 'listgrouprights-addgroup-self-all' => 'Used on [[Special:ListGroupRights]].
 {{Related|Listgrouprights}}',
 'listgrouprights-removegroup-self-all' => 'Used on [[Special:ListGroupRights]].
 {{Related|Listgrouprights}}',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Used in [[Special:EmailUser]].
 
 Used as title of the error message {{msg-mw|Mailnologintext}}.',
@@ -4211,7 +4217,7 @@ See also:
 'emailpage' => "Title of special page [[Special:EmailUser]], when it is the destination of the sidebar link {{msg-mw|Emailuser}} on a user's page.",
 'emailpagetext' => 'This is the text that is displayed above the e-mail form on [[Special:EmailUser]].
 
-Special:EmailUser appears when you click on the link "E-mail this user" in the sidebar, but only if there is an e-mail address in the recipient\'s user preferences. If there isn\'t then the message [[Mediawiki:Noemailtext]] will appear instead of Special:EmailUser.',
+Special:EmailUser appears when you click on the link "E-mail this user" in the sidebar, but only if there is an e-mail address in the recipient\'s user preferences. If there isn\'t then the message {{msg-mw|Noemailtext}} will appear instead of Special:EmailUser.',
 'defemailsubject' => 'The default subject of EmailUser emails. Parameters:
 * $1 is the username of the user sending the email and can be used for GENDER.',
 'usermaildisabled' => 'Caption for an error message ({{msg-mw|Usermaildisabledtext}}) shown when the user-to-user e-mail feature is disabled on the wiki (see [[mw:Manual:$wgEnableEmail]], [[mw:Manual:$wgEnableUserEmail]]).',
@@ -4333,11 +4339,14 @@ See also:
 * {{msg-mw|Watchmethod-recent}}',
 'watchlistcontains' => '* $1 - number of pages in your watchlist',
 'wlnote' => 'Used on [[Special:Watchlist]] when the maximum number of days is specified.
+
 Similar to {{msg-mw|rcnote}} which is used on [[Special:RecentChanges]].
-* $1 is the number of changes shown,
-* $2 is the number of hours for which the changes are shown,
-* $3 is a date alone,
-* $4 is a time alone.',
+
+Parameters:
+* $1 - the number of changes shown
+* $2 - the number of hours for which the changes are shown
+* $3 - a date alone
+* $4 - a time alone',
 'wlshowlast' => 'Appears on [[Special:Watchlist]]. Parameters:
 * $1 - a choice of different numbers of hours ("1 | 2 | 6 | 12")
 * $2 - a choice of different numbers of days ("1 | 3 | 7")
@@ -4351,8 +4360,8 @@ See also:
 * {{msg-mw|enotif reset|Submit button text}}',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching' => 'Text displayed when clicked on the watch tab: [[MediaWiki:Watch/{{SUBPAGENAME}}|{{int:watch}}]]. It means the wiki is adding that page to your watchlist.',
-'unwatching' => 'Text displayed when clicked on the unwatch tab: [[MediaWiki:Unwatch/{{SUBPAGENAME}}|{{int:unwatch}}]]. It means the wiki is removing that page from your watchlist.',
+'watching' => 'Text displayed when clicked on the watch tab: {{msg-mw|Watch}}. It means the wiki is adding that page to your watchlist.',
+'unwatching' => 'Text displayed when clicked on the unwatch tab: {{msg-mw|Unwatch}}. It means the wiki is removing that page from your watchlist.',
 'watcherrortext' => 'When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed.
 
 This message is used raw and should not contain wikitext.
@@ -4692,7 +4701,9 @@ See also:
 {{Identical|View deleted pages}}',
 'undeletepagetext' => '* $1 - number of pages',
 'undelete-fieldset-title' => 'Used as the title of the fieldset.',
-'undeleteextrahelp' => "Help message displayed when restoring history of a page. In your language, ''Restore'' is called ''[[MediaWiki:Undeletebtn/{{SUBPAGENAME}}|{{int:Undeletebtn}}]]'' ({{msg|Undeletebtn}}), The ''Reset'' button is called ''[[MediaWiki:Undeletereset/{{SUBPAGENAME}}|{{int:Undeletereset}}]]'' ({{msg|Undeletereset}}).",
+'undeleteextrahelp' => "Help message displayed when restoring history of a page.
+
+In your language, ''Restore'' is called {{msg-mw|Undeletebtn}}, the ''Reset'' button is called {{msg-mw|Undeletereset}}.",
 'undeleterevisions' => '* $1 - number of revisions',
 'undeletehistory' => 'Used in [[Special:Undelete]].
 
@@ -5256,10 +5267,11 @@ The page name of [[Special:Log/block]]. Also appears in the drop down menu of [[
 'blocklog-showsuppresslog' => 'Parameters:
 * $1 is the blocked user. Can be used for GENDER (optional)',
 'blocklogentry' => 'This is the text of an entry in the Block log, and recent changes, after hour (and date, only in the Block log) and sysop name:
-* $1 is the blocked user or IP (with link to contributions and talk)
-* $2 is the duration of the block (hours, days etc.) or the specified expiry date
-* $3 contains "(details) (\'\'reason\'\')"
-See also {{msg-mw|Blocklistline}}.',
+* $1 - the blocked user or IP (with link to contributions and talk)
+* $2 - the duration of the block (hours, days etc.) or the specified expiry date
+* $3 - contains "(details) (\'\'reason\'\')"
+See also:
+* {{msg-mw|Blocklistline}}',
 'reblock-logentry' => 'This is the text of an entry in the Block log (and Recent Changes), after hour (and date, only in the Block log) and sysop name:
 * $1 is the user being reblocked
 * $2 is the expiry time of the block
@@ -6026,11 +6038,14 @@ See also:
 'import-error-special' => '* $1 - page title',
 'import-error-invalid' => '* $1 - page title',
 'import-error-unserialize' => 'Import error message displayed when a revision could not be unserialized.
-This may happen if the content got corrupted or the serialization format is mis-reported. Parameters:
-* $1 is the name of the page the offending revision belongs to.
-* $2 is the ID of the offending revision, as reported in the dump that is being imported.
-* $3 is the content model reported for the offending revision in the dump that is being imported.
-* $4 is the serialization format reported for the offending revision in the dump that is being imported.',
+
+This may happen if the content got corrupted or the serialization format is mis-reported.
+
+Parameters:
+* $1 - the name of the page the offending revision belongs to
+* $2 - the ID of the offending revision, as reported in the dump that is being imported
+* $3 - the content model reported for the offending revision in the dump that is being imported
+* $4 - the serialization format reported for the offending revision in the dump that is being imported',
 'import-options-wrong' => 'Used on [[Special:Import]], when one of the options has an error.',
 'import-rootpage-invalid' => 'Used on [[Special:Import]], when the root page is invalid.',
 'import-rootpage-nosubpage' => 'Used on [[Special:Import]], when the import namespace does not support subpages. Parameters:
@@ -6307,7 +6322,7 @@ See also:
 * {{msg-mw|Accesskey-t-upload}}
 * {{msg-mw|Tooltip-t-upload}}
 {{Identical|Upload file}}',
-'tooltip-t-specialpages' => 'The tooltip when hovering over the link "[[MediaWiki:Specialpages/{{SUBPAGENAME}}|{{int:specialpages}}]]" going to a list of all special pages available in the wiki.
+'tooltip-t-specialpages' => 'The tooltip when hovering over the link {{msg-mw|Specialpages}} going to a list of all special pages available in the wiki.
 
 See also:
 * {{msg-mw|Specialpages}}
@@ -6514,9 +6529,13 @@ JS for users using Monobook skin.',
 
 # Attribution
 'anonymous' => 'This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}). Note that this action is disabled by default (currently enabled on translatewiki.net).
-This message appears at the very end of the list of names in the message [[MediaWiki:Othercontribs/{{SUBPAGENAME}}|othercontribs]]. If there are no anonymous users in the credits list then this message does not appear at all.
 
-* $1 is the number of anonymous users in the message',
+This message appears at the very end of the list of names in the message {{msg-mw|Othercontribs}}.
+
+If there are no anonymous users in the credits list then this message does not appear at all.
+
+Parameters:
+* $1 - the number of anonymous users in the message',
 'siteuser' => "This message is shown when viewing the credits of a page ([{{fullurl:Main Page|action=credits}} example]). Note that this action is disabled by default, but currently enabled on translatewiki.net. This message is the variable $3 in the message {{msg-mw|lastmodifiedatby}}. This message only appears if a user has not entered their 'real name' in their preferences. See also {{msg-mw|Siteusers}}.
 
 Parameters:
@@ -6542,26 +6561,33 @@ Parameters:
 * $2 - (Optional) the count of names in $1',
 'others' => 'The following explanation is guesswork. This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}). Note that this action is disabled by default (currently enabled on translatewiki.net - to use type <nowiki>&action=credits</nowiki> at the end of any URL in the address bar).
 
-The message appears at the end of the list of credits given in the message [[Mediawiki:Othercontribs/{{SUBPAGENAME}}]] if the number of contributors is above a certain level.
+The message appears at the end of the list of credits given in the message {{msg-mw|Othercontribs}} if the number of contributors is above a certain level.
 {{Identical|Other}}',
 'siteusers' => 'This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}). Note that this action is disabled by default (currently enabled on translatewiki.net).
-It should be in a form that fits with [[MediaWiki:Othercontribs/{{SUBPAGENAME}}|othercontribs]].
 
-* $1 is a list of user names (example: "\'\'Jim, Janet, Jane, Joe\'\'") where the user has not put his \'real name\' in his preferences.
-* $2 is the number of user names in $1
+It should be in a form that fits with {{msg-mw|Othercontribs}}.
 
-If there is more than one user in the list then the message {{msg-mw|and}} appears before the last name. If $2 is NIL then this message does not appear at all.
+Parameters:
+* $1 - a list of user names (example: "\'\'Jim, Janet, Jane, Joe\'\'") where the user has not put his \'real name\' in his preferences.
+* $2 - the number of user names in $1
 
-See also {{msg-mw|Siteuser}}.',
+If there is more than one user in the list then the message {{msg-mw|And}} appears before the last name. If $2 is NULL then this message does not appear at all.
+
+See also:
+* {{msg-mw|Siteuser}}',
 'anonusers' => 'This message is shown when viewing the credits of a page (example: {{fullurl:Support|action=credits}}). Note that this action is disabled by default (currently enabled on translatewiki.net).
-It should be in a form that fits with [[MediaWiki:Othercontribs/{{SUBPAGENAME}}|othercontribs]].
 
-* $1 is a list of IP addresses
-* $2 is the number of IP addresses in $1
+It should be in a form that fits with {{msg-mw|Othercontribs}}.
+
+Parameters:
+* $1 - a list of IP addresses
+* $2 - the number of IP addresses in $1
 
 If there is more than one user in the list then the message {{msg-mw|and}} appears before the last name. If $2 is NIL then this message does not appear at all.
 
-See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
+See also:
+* {{msg-mw|Anonuser}}
+* {{msg-mw|Siteusers}}',
 'creditspage' => "This message is the ''contentSub'' (the grey subtitle) shown when viewing credits of a page (example: {{fullurl:Project:News|action=credits}}). Note that the credits action is disabled by default (currently enabled on translatewiki.net).",
 'nocredits' => 'This message is shown when viewing the credits of a page (example: {{fullurl:Main Page|action=credits}}) but when there are no credits available. Note that the credits action is disabled by default (currently enabled on translatewiki.net).',
 
@@ -6626,9 +6652,9 @@ Parameters:
 
 Used as link text, linked to '{{int:Prefixindex}}' page ([[Special:PrefixIndex]]).",
 'pageinfo-subpages-value' => 'Parameters:
-* $1 is the number of subpages of the page.
-* $2 is the number of subpages of the page that are redirects.
-* $3 is the number of subpages of the page that are not redirects.',
+* $1 - the number of subpages of the page
+* $2 - the number of subpages of the page that are redirects
+* $3 - the number of subpages of the page that are not redirects',
 'pageinfo-firstuser' => 'The user who created the page.',
 'pageinfo-firsttime' => 'The date and time the page was created.',
 'pageinfo-lastuser' => 'The last user who edited the page.',
@@ -6774,9 +6800,9 @@ See also:
 'widthheightpage' => 'This message is used on image pages in the dimensions column in the file history section for images  with more than one page.
 
 Parameters:
-* $1 is the width of the image pages in pixels.
-* $2 is the height of the image pages in pixels.
-* $3 is the number of pages in the file.',
+* $1 - the width of the image pages in pixels
+* $2 - the height of the image pages in pixels
+* $3 - the number of pages in the file',
 'file-info' => 'File info displayed on file description page.',
 'file-info-size' => 'File info displayed on file description page.
 
@@ -6788,21 +6814,21 @@ Parameters:
 'file-info-size-pages' => 'File info displayed on file description page, when the file is a multi-page document, with at least two pages. Like {{msg-mw|file-info-size}} but $5 is the total number of pages in the document.
 
 Parameters:
-* $1 is the width of the image pages in pixels.
-* $2 is the height of the image pagess in pixels.
-* $3 is the file size as a number followed by a unit — for example: 99 KB
-* $4 is the MIME type, a formalized textual information — for example: <code>image/jpeg</code>
-* $5 is the total number of pages in the document.',
+* $1 - the width of the image pages in pixels
+* $2 - the height of the image pagess in pixels
+* $3 - the file size as a number followed by a unit — for example: 99 KB
+* $4 - the MIME type, a formalized textual information — for example: <code>image/jpeg</code>
+* $5 - the total number of pages in the document',
 'file-nohires' => 'File info displayed on file description page. For example of message in use see [[:File:Mouse10.gif]].',
 'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.svg]].
 
-Start with a lowercase letter, unless the first word is “SVG”.',
+Start with a lowercase letter, unless the first word is "SVG".',
 'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}.
-* $1 is the width in pixels
-* $2 is the height in pixels, and
-* $3 is the file size including a unit (for example "10 KB").
+* $1 - the width in pixels
+* $2 - the height in pixels
+* $3 - the file size including a unit (for example "10 KB")
 
-Start with a lowercase letter, unless the first word is “SVG”.',
+Start with a lowercase letter, unless the first word is "SVG".',
 'svg-long-error' => 'Displayed for invalid SVG file metadata. Parameters:
 * $1 - the error message
 See also:
@@ -6810,10 +6836,9 @@ See also:
 'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.',
 'show-big-image-preview' => 'Message shown under the image description page thumbnail, next to {{msg-mw|show-big-image-other}}.',
 'show-big-image-other' => 'Message shown under the image description page thumbnail, next to {{msg-mw|show-big-image-preview}}, if the image is in high resolution.',
-'show-big-image-size' => '
-Parameters:
-* $1 is the width of the image(s) in pixels.
-* $2 is the height of the image(s) in pixels.',
+'show-big-image-size' => 'Parameters:
+* $1 - the width of the image(s) in pixels
+* $2 - the height of the image(s) in pixels',
 'file-info-gif-looped' => 'Part of the information provided about a [[w:Gif|.gif file]] on its file description page. Looped means repeating in the context of an animated gif. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop. For example of message in use see [[:File:Mouse10.gif]].',
 'file-info-gif-frames' => 'Part of the information provided about a [[w:Gif|.gif file]] on its file description page.',
 'file-info-png-looped' => 'Part of the information provided about a [[w:APNG|.apng file]] on its file description page. Looped means repeating indefinetly in the context of an animated png. It is a sequence of images, each displayed after the other, and the first one displayed after the last, in a never ending loop.',
@@ -7002,8 +7027,8 @@ Varient Option for wikis with variants conversion enabled.',
 # Metadata
 'metadata' => 'The title of a section on an image description page, with information and data about the image. For example of message in use see [[commons:File:Titan-crystal_bar.JPG|Commons]].
 {{Identical|Metadata}}',
-'metadata-expand' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on this link, you can see more data and information. For the link to hide back the less important data, see "[[MediaWiki:Metadata-collapse/{{SUBPAGENAME}}|{{int:metadata-collapse}}]]".',
-'metadata-collapse' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on the link "[[MediaWiki:Metadata-expand/{{SUBPAGENAME}}|{{int:metadata-expand}}]]", you can see more data and information. This message is for the link to hide back the less important data.',
+'metadata-expand' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on this link, you can see more data and information. For the link to hide back the less important data, see {{msg-mw|Metadata-collapse}}.',
+'metadata-collapse' => 'On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on the link {{msg-mw|Metadata-expand}}, you can see more data and information. This message is for the link to hide back the less important data.',
 'metadata-fields' => '{{doc-important|Do not translate list items, only translate the text! So leave "<code>* make</code>" and the other items exactly as they are.}}
 The sentences are for explanation only and are not shown to the user.',
 'metadata-langitem' => '{{optional}}
@@ -7862,7 +7887,7 @@ $1 is maxaperture in APEX units (APEX aperture units = 2log<sub>2</sub>(f-number
 'exif-iimcategory-hum' => 'Displayed as part of the iimcategory field if the 3 letter code is recognized, or as part {{msg-mw|exif-subjectnewscode-value}}',
 'exif-iimcategory-lab' => 'Displayed as part of the iimcategory field if the 3 letter code is recognized, or as part {{msg-mw|exif-subjectnewscode-value}}
 
-"Labour" here refers to all news on labour issues; employment; unemployment; work relations; labour disputes; strikes; legislation; unions; job related issues; government policy. (at least, according to Reuters.)',
+"Labor" here refers to all news on labor issues; employment; unemployment; work relations; labor disputes; strikes; legislation; unions; job related issues; government policy. (at least, according to Reuters.)',
 'exif-iimcategory-lif' => 'Displayed as part of the iimcategory field if the 3 letter code is recognized, or as part {{msg-mw|exif-subjectnewscode-value}}',
 'exif-iimcategory-pol' => 'Displayed as part of the iimcategory field if the 3 letter code is recognized, or as part {{msg-mw|exif-subjectnewscode-value}}',
 'exif-iimcategory-rel' => 'Displayed as part of the iimcategory field if the 3 letter code is recognized, or as part {{msg-mw|exif-subjectnewscode-value}}',
@@ -7899,14 +7924,13 @@ This message is variable $3 in the message {{msg-mw|Wlshowlast}}.
 'namespacesall' => 'In special page [[Special:WhatLinksHere]]. Drop-down box option for namespace.
 
 {{Identical|All}}',
-'monthsall' => 'Used in a drop-down box on [[Special:Contributions]] as an option for "all months". See also [[MediaWiki:Month/{{SUBPAGENAME}}]].
-
+'monthsall' => 'Used in a drop-down box on [[Special:Contributions]] as an option for "all months". See also {{msg-mw|Month}}.
 {{Identical|All}}',
 'limitall' => 'Used on [[Special:AllMessages]] (and potentially other TablePager based tables) to display "all" the messages.
 
 {{Identical|All}}',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Title of [[Special:ConfirmEmail]] page.',
 'confirmemail_noemail' => 'Failure message on [[Special:ConfirmEmail]].',
 'confirmemail_text' => 'Explanation on [[Special:ConfirmEmail]]',
@@ -8696,11 +8720,11 @@ $4 is the gender of the target user.',
 'api-error-badtoken' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-copyuploaddisabled' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-duplicate' => 'API error message that can be used for client side localisation of API errors. Parameters:
-* $1 is a number of files
-* $2 is a link to a list of duplicate files.',
+* $1 - a number of files
+* $2 - a link to a list of duplicate files',
 'api-error-duplicate-archive' => 'API error message that can be used for client side localisation of API errors. Parameters:
-* $1 is a number of files
-* $2 is a link to a list of duplicate files.',
+* $1 - a number of files
+* $2 - a link to a list of duplicate files',
 'api-error-duplicate-archive-popup-title' => 'API error message that can be used for client side localisation of API errors. Parameters:
 * $1 is a number of files.',
 'api-error-duplicate-popup-title' => 'This message is a pop-up title shown in case one or more files exactly equal to the one just uploaded are already present. The word "duplicate" is an adjective.',
index fd1c171..0a58032 100644 (file)
@@ -804,7 +804,7 @@ Vă rugăm să așteptați până să mai încercați.',
 'loginlanguagelabel' => 'Limba: $1',
 'suspicious-userlogout' => 'Cererea dumneavoastră de a închide sesiunea a fost refuzată întrucât pare că a fost trimisă printr-o eroare a navigatorului sau de un proxy memorat în cache.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Eroare necunoscută în funcția PHP mail()',
 'user-mail-no-addy' => 'S-a încercat trimiterea e-mailului fără o adresă de e-mail.',
 'user-mail-no-body' => 'S-a încercat trimiterea unui e-mail fără conținut sau nejustificat de scurt.',
@@ -1489,7 +1489,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'prefs-displaywatchlist' => 'Opțiuni de afișare',
 'prefs-diffs' => 'Diferențe',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Adresa de e-mail pare validă',
 'email-address-validity-invalid' => 'Introduceți o adresă de e-mail validă',
 
@@ -2085,6 +2085,10 @@ Lista tipurilor MIME recunoscute de MediaWiki poate fi găsită la [http://svn.w
 Acestea ar trebui să conțină legături către un articol mai potrivit.<br />
 O pagină este considerată o pagină de dezambiguizare dacă folosește formate care apar la [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Pagini cu o proprietate de pagină',
+'pageswithprop-text' => 'Această pagină listează paginile care utilizează o anumită proprietate de pagină.',
+'pageswithprop-prop' => 'Numele proprietății:',
+
 'doubleredirects' => 'Redirecționări duble',
 'doubleredirectstext' => 'Această listă conține pagini care redirecționează la alte pagini de redirecționare.
 Fiecare rând conține legături la primele două redirecționări, precum și ținta celei de-a doua redirecționări, care este de obicei pagina țintă "reală", către care ar trebui să redirecționeze prima pagină.
@@ -2275,7 +2279,7 @@ Pot exista [[{{MediaWiki:Listgrouprights-helppage}}|informații suplimentare]] d
 'listgrouprights-addgroup-self-all' => 'Pot fi adăugate toate grupurile contului propriu',
 'listgrouprights-removegroup-self-all' => 'Pot fi șterse toate grupurile din contul propriu',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nu există adresă de trimitere',
 'mailnologintext' => 'Trebuie să fii [[Special:UserLogin|autentificat]] și să ai o adresă validă de e-mail în [[Special:Preferences|preferințe]] pentru a trimite e-mail altor utilizatori.',
 'emailuser' => 'Trimiteți un e-mail',
@@ -3666,7 +3670,7 @@ Altele vor fi ascunse implicit.
 'monthsall' => 'toate',
 'limitall' => 'toate',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Confirmă adresa de e-mail',
 'confirmemail_noemail' => 'Nu aveți o adresă de e-mail validă setată la [[Special:Preferences|preferințe]].',
 'confirmemail_text' => '{{SITENAME}} solicită validarea adresei de e-mail înaintea utilizării funcțiilor specifice poștei electronice.
@@ -4060,4 +4064,7 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'duration-centuries' => '$1 {{PLURAL:$1|secol|secole|de secole}}',
 'duration-millennia' => '$1 {{PLURAL:$1|mileniu|milenii|de milenii}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Pagini cu o proprietate de pagină',
+'pageswithprop-submit' => 'Du-te',
 );
index e9c1fea..0157ad5 100644 (file)
@@ -554,7 +554,7 @@ Pe piacere vide c'aspitte 'nu picche de timbe apprime de pruvà 'n'otra vote.",
 'loginlanguagelabel' => 'Lénga: $1',
 'suspicious-userlogout' => "'A richiesta toje de assè ha state bloccate purcè pare ca ha state mannate da 'nu browser scuasciate o da 'a cache de 'nu proxy.",
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Errore scanusciute jndr'à funzione PHP mail()",
 'user-mail-no-addy' => "E' pruvate a mannà 'na mail senze 'u 'ndirizze mail",
 'user-mail-no-body' => "Pruvate a mannà 'na mail cu 'nu cuèrpe vacande o troppe curte.",
@@ -1254,7 +1254,7 @@ Ce tu 'u mitte, a fatje ca è fatte t'avène ricanusciute.",
 'prefs-displaywatchlist' => "Fà vedè l'opzione",
 'prefs-diffs' => 'Diff',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => "L'indirizze e-mail pare valide",
 'email-address-validity-invalid' => "Mitte 'n'indirizze e-mail valide",
 
@@ -2062,7 +2062,7 @@ Ponne stà [[{{MediaWiki:Listgrouprights-helppage}}|'mbormaziune de cchiù]] sus
 'listgrouprights-addgroup-self-all' => "Mitte tutte le gruppe sus a 'u cunde utende mije",
 'listgrouprights-removegroup-self-all' => "Live tutte le gruppe da 'u cunde utende mije",
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nisciune indirizze de invie',
 'mailnologintext' => "Tu a essere [[Special:UserLogin|collegate]] e a avè 'n'indirizze email valide jndr'à le [[Special:Preferences|preferenze]] tue pe mannà 'na mail a otre utinde.",
 'emailuser' => "Manne n'email a stu utende",
@@ -3595,7 +3595,7 @@ $8',
 'monthsall' => 'tutte',
 'limitall' => 'tutte',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Conferme l'indirizze e-mail",
 'confirmemail_noemail' => "Tu non ge tine 'n'indirizze e-mail valide configurate sus a le [[Special:Preferences|preferenze tue]].",
 'confirmemail_text' => "{{SITENAME}} richiede ca tu ha validà l'indirizze email tue apprime de ausà 'a funzione de l'email.
index fc02919..956bf31 100644 (file)
@@ -911,7 +911,7 @@ $2',
 'loginlanguagelabel' => 'Язык: $1',
 'suspicious-userlogout' => 'Ваш запрос на завершение сеанса отклонён, так как он похож на запрос, отправленный некорректным браузером или кэширующим прокси.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Неизвестная ошибка в PHP-функции mail()',
 'user-mail-no-addy' => 'Пытался отправить электронное письмо без адреса электронной почты',
 'user-mail-no-body' => 'Пытался отправить электронное письмо с пустым или бессмысленно коротким содержанием.',
@@ -1601,7 +1601,7 @@ $1",
 'prefs-displaywatchlist' => 'Настройки отображения',
 'prefs-diffs' => 'Разница версий',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Выглядит корректно',
 'email-address-validity-invalid' => 'Введите корректный адрес электронной почты!',
 
@@ -2194,6 +2194,10 @@ $1',
 Вместо этого они, вероятно, должны указывать на соответствующую конкретную страницу.<br />
 Страница считается многозначной, если на ней размещён шаблон, имя которого указано на странице [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Страницы с переопределёнными свойствами',
+'pageswithprop-text' => 'Здесь перечислены страницы, у которых были вручную переопределены отдельные свойства.',
+'pageswithprop-prop' => 'Название свойства:',
+
 'doubleredirects' => 'Двойные перенаправления',
 'doubleredirectstext' => 'На этой странице представлен список перенаправлений на другие перенаправления.
 Каждая строка содержит ссылки на первое и второе перенаправления, а также целевую страницу второго перенаправления, в которой обычно указывается название страницы, куда должно ссылаться первое перенаправление.
@@ -2387,7 +2391,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Может добавлять все группы к своей учётной записи',
 'listgrouprights-removegroup-self-all' => 'может удалять все группы со своей учётной записи',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Адрес для отправки отсутствует',
 'mailnologintext' => 'Вы должны [[Special:UserLogin|представиться системе]] и иметь действительный адрес электронной почты в ваших [[Special:Preferences|настройках]], чтобы иметь возможность отправлять электронную почту другим участникам.',
 'emailuser' => 'Письмо участнику',
@@ -3798,7 +3802,7 @@ $1',
 'monthsall' => 'все',
 'limitall' => 'все',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Подтверждение адреса электронной почты',
 'confirmemail_noemail' => 'Вы не задали корректный адрес электронной почты в своих [[Special:Preferences|настройках]].',
 'confirmemail_text' => 'Вики-движок требует подтверждения адреса электронной почты перед тем, как начать с ним работать.
@@ -4282,4 +4286,7 @@ MediaWiki распространяется в надежде, что она бу
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Страницы с переопределёнными свойствами',
+'pageswithprop-submit' => 'Найти',
 );
index e4d50ea..6f30d2a 100644 (file)
@@ -542,7 +542,7 @@ $1',
 'youhavenewmessages' => 'भवदर्थम् $1 सन्ति। ($2).',
 'newmessageslink' => 'नूतनाः सन्देशाः',
 'newmessagesdifflink' => 'अन्तिमं परिवर्तनम्',
-'youhavenewmessagesfromusers' => 'भवदरà¥\8dथà¤\82 {{PLURAL:$3|à¤\85नà¥\8dयसà¥\8dमातà¥\8d à¤¸à¤¦à¤¸à¥\8dयातà¥\8d à¤¸à¤¨à¥\8dदà¥\87शà¥\8bऽसà¥\8dति।|$3 à¤\85नà¥\8dयà¥\87भà¥\8dयà¤\83 à¤¸à¤¦à¤¸à¥\8dयà¥\87भà¥\8dयà¤\83 à¤¸à¤¨à¥\8dदà¥\87शाà¤\83 à¤¸à¤¨à¥\8dति।}}। (सदà¥\8dयà¤\83 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनमà¥\8d।)',
+'youhavenewmessagesfromusers' => 'भवदरà¥\8dथमà¥\8d {{PLURAL:$3|à¤\85नà¥\8dयसà¥\8dमातà¥\8d à¤¸à¤¦à¤¸à¥\8dयातà¥\8d|$3 à¤¸à¤¦à¤¸à¥\8dयà¥\87भà¥\8dयà¤\83}} $1 à¤\85सà¥\8dति ($2)।',
 'youhavenewmessagesmanyusers' => 'नैकेभ्यः योजकेभ्यः ते $1 सन्ति $2 ।',
 'newmessageslinkplural' => '{{PLURAL:$1|नूतनः सन्देशः|नूतनसन्देशाः}}',
 'newmessagesdifflinkplural' => 'सद्यः {{PLURAL:$1|परिवर्तनम्|परिवर्तनानि}}',
@@ -783,7 +783,7 @@ You may ignore this message, if this account was created in error.',
 'loginlanguagelabel' => 'भाषा : $1',
 'suspicious-userlogout' => 'भवतः सत्राद् बहिर्गमनस्य अनुरोधः अस्वीकृतोऽस्ति, यस्मादेतत् भग्नादेकस्मात् ब्राउज़र्तः अथवा स्वल्पसञ्चयि-प्रॉक्सितः प्रेषित आसीत्।',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'पीएच्पी इत्येतस्य mail() फलने अज्ञाता काऽपि त्रुटिर्जाता।',
 'user-mail-no-addy' => 'ईपत्रसङ्केतं विना ईपत्रप्रेषणस्य प्रयासः कृतः ।',
 
@@ -1430,7 +1430,7 @@ You can still [$1 view this revision]",
 'prefs-displaywatchlist' => 'प्रदर्शनविकल्पाः',
 'prefs-diffs' => 'अन्तरम्',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'प्रयुक्तः विद्युन्मानपत्रसङ्केतः मानितः ।',
 'email-address-validity-invalid' => 'मान्यः विद्युन्मानपत्रसङ्केतः योजनीयः ।',
 
@@ -2204,7 +2204,7 @@ See https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'listgrouprights-addgroup-self-all' => 'स्वस्थाने सर्वसमूहान योजयतु ।',
 'listgrouprights-removegroup-self-all' => 'स्वस्थानात् सर्वसमूहान् अपनयतु ।',
 
-# E-mail user
+# Email user
 'mailnologin' => 'सम्प्रेषणस्य सङ्केतः नास्ति ।',
 'mailnologintext' => 'अस्य योजकेभ्यः विद्युन्मानपत्रप्रेषणार्थम् [[Special:UserLogin|नामाभिलेखनम्]] आवश्यकम् [[Special:Preferences|आद्यता]]यां प्रेषयितुं विद्युन्मानपत्रसङ्केतः आवश्यकः ।',
 'emailuser' => 'एतस्मै योजकाय ईपत्रं प्रेष्यताम्',
@@ -3558,7 +3558,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'monthsall' => 'सर्वाणि',
 'limitall' => 'सर्वाणि',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ईपत्रसङ्केतः प्रमाणीक्रियताम्',
 'confirmemail_noemail' => 'भवतः योजकाद्यतायां व्यवस्थापितः विद्युन्मानपत्रसङ्केतः मान्यं नाश्ति ।  [[Special:Preferences|user preferences]]',
 'confirmemail_text' => '{{SITENAME}} इत्यत्र विद्युन्मानसुविधोपयोगात् पूर्वं भवतः विद्युन्मानपत्रसङ्केतं मान्यं करोतु । 
index 3e1d325..94ec90a 100644 (file)
@@ -1753,7 +1753,7 @@ Protucolli suppurtati: <code>$1</code>',
 'listgrouprights-addgroup-self-all' => 'Junci tutti li gruppa ô propriu account',
 'listgrouprights-removegroup-self-all' => 'Può livari tutti li gruppi dô propriu account',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nuddu ndirizzu cui mannari lu missaggiu',
 'mailnologintext' => 'Hai a fari lu [[Special:UserLogin|login]] e aver riggistratu na casella e-mail vàlida ntê tò [[Special:Preferences|prifirenzi]] pi mannari posta alittrònica a àutri Utenti.',
 'emailuser' => "Manna n'imail a stu utenti",
@@ -2777,7 +2777,7 @@ Li lijami succissivi, supra la stissa riga, sunnu cunzidirati comu eccizzioni (p
 'namespacesall' => 'Tutti',
 'monthsall' => 'tutti',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Cunferma ndirizzu e-mail',
 'confirmemail_noemail' => 'Nun hà statu ndicatu un ndirizzu e-mail vàlidu ntê propi [[Special:Preferences|prifirenzi]].',
 'confirmemail_text' => "Stu situ richiedi la virìfica di l ndirizzu e-mail prima di putiri usari li funzioni cunnessi a l'email. Prèmiri lu pulsanti ccà sutta pi mannari na richiesta di cunferma a lu propiu ndirizzu; ntô missaggiu è prisenti un culligamenti ca cunteni un còdici. Visitari lu culligamentu cu lu propiu browser pi cunfirmari ca lu ndirizzu e-mail è vàlidu.",
index c33c931..ffd9dc3 100644 (file)
@@ -717,7 +717,7 @@ Molimo Vas da sačekate prije nego što pokušate ponovo.',
 'loginlanguagelabel' => 'Jezik: $1',
 'suspicious-userlogout' => 'Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Nepoznata greška u PHP funkciji mail()',
 'user-mail-no-addy' => 'Pokušaj slanja e-maila bez e-mail adrese.',
 'user-mail-no-body' => 'Pokušano slanje e-maila s praznim ili nerazumno kratkim sadržajem.',
@@ -1414,7 +1414,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.',
 'prefs-displaywatchlist' => 'Postavke prikaza',
 'prefs-diffs' => 'Razlike',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail adresa izgleda valjano',
 'email-address-validity-invalid' => 'Unesite valjanu e-mail adresu',
 
@@ -2195,7 +2195,7 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 'listgrouprights-addgroup-self-all' => 'Može dodati sve grupe na svoj račun',
 'listgrouprights-removegroup-self-all' => 'Može ukloniti sve grupe sa svog računa',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Nema adrese za slanje',
 'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]] da biste slali e-poštu drugim korisnicima.',
 'emailuser' => 'Pošalji E-mail ovom korisniku',
@@ -3577,7 +3577,7 @@ Svi drugi linkovi u istoj liniji se smatraju izuzecima, npr. kod stranica gdje s
 'monthsall' => 'sve',
 'limitall' => 'sve',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potvrdite adresu e-pošte',
 'confirmemail_noemail' => 'Niste unijeli tačnu e-mail adresu u Vaše [[Special:Preferences|korisničke postavke]].',
 'confirmemail_text' => 'Ova viki zahtjeva da potvrdite adresu Vaše e-pošte prije nego što koristite mogućnosti e-pošte. ž
index 34d3fbe..8fe62a8 100644 (file)
@@ -781,7 +781,7 @@ Prosím, počkajte predtým, než to skúsite znova.',
 'loginlanguagelabel' => 'Jazyk: $1',
 'suspicious-userlogout' => 'Vaša požiadavka odhlásiť sa bola zamietnutá, pretože to vyzerá, že ju poslal pokazený prehliadač alebo proxy server.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Neznáma chyba vo funkcii PHP mail()',
 'user-mail-no-addy' => 'Pokus o odoslanie e-mailu bez e-mailovej adresy.',
 
@@ -1463,7 +1463,7 @@ Musí obsahovať menej ako $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'prefs-displaywatchlist' => 'Možnosti zobrazenia',
 'prefs-diffs' => 'Rozdiely',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Formát e-mailovej adresa vyzerá byť správny',
 'email-address-validity-invalid' => 'Zadajte platnú e-mailovú adresu',
 
@@ -2242,7 +2242,7 @@ Môžete si prečítať [[{{MediaWiki:Listgrouprights-helppage}}|ďalšie inform
 'listgrouprights-addgroup-self-all' => 'Do vlastného účtu je možné pridať všetky skupiny',
 'listgrouprights-removegroup-self-all' => 'Z vlastného účtu je možné odstrániť všetky skupiny',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Žiadna adresa na zaslanie',
 'mailnologintext' => 'Musíte byť [[Special:UserLogin|prihlásený]] a mať platnú e-mailovú adresu vo vašich [[Special:Preferences|nastaveniach]], aby ste mohli iným používateľom posielať e-maily.',
 'emailuser' => 'E-mail tomuto používateľovi',
@@ -3627,7 +3627,7 @@ Ostatné budú predvolene skryté.
 'monthsall' => 'všetky',
 'limitall' => 'všetky',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potvrdiť e-mailovú adresu',
 'confirmemail_noemail' => 'Nenastavili ste platnú emailovú adresu vo svojich [[Special:Preferences|Nastaveniach]].',
 'confirmemail_text' => '{{SITENAME}} vyžaduje, aby ste potvrdili platnosť vašej e-mailovej adresy
index bd709c6..4c28cab 100644 (file)
@@ -701,7 +701,7 @@ Prosimo počakajte, preden poskusite znova.',
 'loginlanguagelabel' => 'Jezik: $1',
 'suspicious-userlogout' => 'Vaša zahteva za odjavo je bila zavrnjena, saj kaže, da je bila poslana iz pokvarjenega brskalnika ali proxyja s predpomnilnikom.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Neznana napaka v funkciji PHP mail()',
 'user-mail-no-addy' => 'Poskušal poslati e-pošto brez e-poštnega naslova',
 'user-mail-no-body' => 'Poskušali ste poslati e-pošto s prazno ali nerazumno kratko vsebino.',
@@ -1392,7 +1392,7 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'prefs-displaywatchlist' => 'Možnosti prikaza',
 'prefs-diffs' => 'Primerjave',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Izgleda veljaven',
 'email-address-validity-invalid' => 'Obvezen je veljaven naslov!',
 
@@ -1997,6 +1997,10 @@ Preden jih izbrišete, preverite še druge povezave nanje.',
 Namesto tega bi morda bilo bolje, da se povezujejo na primernejše strani.<br />
 Stran se obravnava kot razločitvena, če uporablja predloge, povezane z [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Strani z lastnostmi strani',
+'pageswithprop-text' => 'Stran navaja vse strani, ki uporabljajo določene lastnosti strani.',
+'pageswithprop-prop' => 'Ime lastnosti:',
+
 'doubleredirects' => 'Dvojne preusmeritve',
 'doubleredirectstext' => 'Ta stran navaja strani, ki se preusmerjajo na druge preusmeritvene strani.
 Vsaka vrstica vsebuje povezavo do prve in druge preusmeritve, kakor tudi do cilja druge preusmeritve, ki je po navadi »prava« ciljna stran, na katero naj bi kazala prva preusmeritev.
@@ -2188,7 +2192,7 @@ Morda so na razpolago tudi [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 'listgrouprights-addgroup-self-all' => 'Lastni račun dodaj v vse skupine',
 'listgrouprights-removegroup-self-all' => 'Lastni račun odstrani iz vseh skupin',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Manjka naslov pošiljatelja',
 'mailnologintext' => 'Za pošiljanje e-pošte drugim uporabnikom se [[Special:UserLogin|prijavite]] in v [[Special:Preferences|nastavitvah]] vpišite veljaven e-poštni naslov.',
 'emailuser' => 'Pošlji uporabniku e-pismo',
@@ -2325,7 +2329,7 @@ Za zapise nedavnih brisanj glej $2.',
 'dellogpage' => 'Dnevnik brisanja',
 'dellogpagetext' => 'Spodaj je prikazan seznam nedavnih brisanj.',
 'deletionlog' => 'dnevnik brisanja',
-'reverted' => 'Vrnjeno na prejšnje urejanje.',
+'reverted' => 'Vrnjeno na prejšnjo redakcijo.',
 'deletecomment' => 'Razlog:',
 'deleteotherreason' => 'Drugi/dodatni razlogi:',
 'deletereasonotherlist' => 'Drug razlog',
@@ -3126,7 +3130,7 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'video-dims' => '$1, $2&nbsp;×&nbsp;$3',
 'seconds-abbrev' => '$1 s',
-'minutes-abbrev' => '$1 m',
+'minutes-abbrev' => '$1 min',
 'hours-abbrev' => '$1 h',
 'days-abbrev' => '$1 d',
 'seconds' => '$1 {{PLURAL:$1|sekunda|sekundi|sekunde|sekund}}',
@@ -3568,7 +3572,7 @@ Druga bodo po privzetem skrita.
 'monthsall' => 'vse',
 'limitall' => 'vse',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Potrditev naslova elektronske pošte',
 'confirmemail_noemail' => 'Nimate določenega veljavnega e-poštnega naslova v vaših [[Special:Preferences|uporabniških nastavitvah]].',
 'confirmemail_text' => 'Za uporabo e-poštnih možnosti {{GRAMMAR:rodilnik|{{SITENAME}}}} morate najprej potrditi svoj e-poštni naslov.
@@ -3661,6 +3665,9 @@ Prosimo, potrdite, da jo resnično želite znova ustvariti.",
 'confirm-unwatch-button' => 'V redu',
 'confirm-unwatch-top' => 'Odstranim stran z vašega spiska nadzorov?',
 
+# Separators for various lists, etc.
+'percent' => '$1 %',
+
 # Multipage image navigation
 'imgmultipageprev' => '← prejšnja stran',
 'imgmultipagenext' => 'naslednja stran →',
@@ -3978,4 +3985,7 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'duration-centuries' => '$1 {{PLURAL:$1|stoletje|stoletji|stoletja|stoletij}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisočletje|tisočletji|tisočletja|tisočletij}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Strani z lastnostmi strani',
+'pageswithprop-submit' => 'Pojdi',
 );
index d93c164..36e0bb8 100644 (file)
@@ -472,7 +472,7 @@ Fadlan waxyar sug intii aadan soo gelin.',
 'login-abort-generic' => 'Ma u soo gali karin gudaha - waa la noqay',
 'loginlanguagelabel' => 'Luqada: $1',
 
-# E-mail sending
+# Email sending
 'user-mail-no-addy' => "Isku dayday in aa dirto e-mail ayada oo ciwaan e-mail la'aan ah.",
 
 # Change password dialog
@@ -1068,7 +1068,7 @@ Tafaasiishiisa waxee ku qorantahay [$2 bogga tafaasiisha faylka] oo ka arki kart
 # Special:ListGroupRights
 'listgrouprights-members' => '(Inta ka mid ah liiskooda)',
 
-# E-mail user
+# Email user
 'mailnologin' => "Ma'jiro cinwaan wax lagu diro",
 'mailnologintext' => 'Waa in aad [[Special:UserLogin|gudaha ku jirtaa]]
 kuna haysatid E-boosto sax ah [[Special:Preferences|dooqyadaada]],
@@ -1163,6 +1163,7 @@ Faalada iyo helista caawinaad dheeraad ah:
 # Rollback
 'rollback_short' => 'Soo celi',
 'rollbacklink' => 'dib u soo celi',
+'rollbacklinkcount-morethan' => 'soo celinta in kabadan $1 {{PLURAL:$1|badal|badallo}}',
 'revertpage' => 'Wuxuu dib u noqay badalkii oo sameeyay  [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) kuna celiyay badalkii ka  danbeeyay oo sameeyay  [[User:$1|$1]]',
 'revertpage-nouser' => 'Wuxuu dib u noqay bedelyada (magaca isticmaalaha waa laga saaray) kuna celiyay  [[User:$1|$1]]',
 'rollback-success' => 'Wuxuu dib u noqay bedelka oo sameeyay  $1;
@@ -1421,7 +1422,7 @@ Hadii faylka wax laga badalay sida oo markiisa hore ahaa, waxaa laga yaabaa in e
 'namespacesall' => 'dhamaan',
 'monthsall' => 'Dhamaan',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail_noemail' => 'Kuma haysatid cinwaan E-boosto sax [[Special:Preferences|isticmaala dooqiisa]].',
 
 # action=watch/unwatch
index 60a5d8d..9a531b8 100644 (file)
@@ -822,7 +822,7 @@ Vänta innan du försöker igen.',
 'loginlanguagelabel' => 'Språk: $1',
 'suspicious-userlogout' => 'Din begäran om att logga ut nekades eftersom det ser ut som det skickades av en trasig webbläsare eller cachande proxy.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "Okänt fel i PHP's mail()-funktion",
 'user-mail-no-addy' => 'Försökte skicka e-post utan en e-postadress',
 'user-mail-no-body' => 'Försökte skicka e-post med tomt eller orimligt kort innehåll.',
@@ -1503,7 +1503,7 @@ Om du väljer att ange ditt riktiga namn, kommer det att användas för att till
 'prefs-displaywatchlist' => 'Visningalternativ',
 'prefs-diffs' => 'Skillnader',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Ser giltig ut',
 'email-address-validity-invalid' => 'Giltig adress krävs!',
 
@@ -2097,6 +2097,10 @@ Innan mallarna raderas, kontrollera att det inte finns andra länkar till dem.',
 De bör troligtvis ändras så att de länkar till en mer passande sida istället.<br />
 En sida anses vara en förgreningssida om den inkluderar en mall som länkas till från [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Sidor med en sidegenskap',
+'pageswithprop-text' => 'Denna sida listar sidor som använder en speciell sidegenskap.',
+'pageswithprop-prop' => 'Egenskapsnamn:',
+
 'doubleredirects' => 'Dubbla omdirigeringar',
 'doubleredirectstext' => 'Det här är en lista över sidor som dirigerar om till andra omdirigeringssidor. Varje rad innehåller länkar till den första och andra omdirigeringsidan, samt till målet för den andra omdirigeringen. Målet för den andra omdirigeringen är ofta den "riktiga" sidan, som den första omdirigeringen egentligen ska leda till.
 <del>Stryk över</del> poster som har åtgärdats.',
@@ -2286,7 +2290,7 @@ Det kan finnas [[{{MediaWiki:Listgrouprights-helppage}}|ytterligare information]
 'listgrouprights-addgroup-self-all' => 'Kan lägga till alla grupperna till sitt eget konto',
 'listgrouprights-removegroup-self-all' => 'Kan ta bort alla grupperna från sitt eget konto',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Ingen adress att skicka till',
 'mailnologintext' => 'För att kunna skicka e-post till andra användare, måste du vara [[Special:UserLogin|inloggad]] och ha angivit en korrekt e-postadress i dina [[Special:Preferences|användarinställningar]].',
 'emailuser' => 'Skicka e-post till den här användaren',
@@ -3691,7 +3695,7 @@ Andra kommer att gömmas som standard
 'monthsall' => 'alla',
 'limitall' => 'alla',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Bekräfta e-postadress',
 'confirmemail_noemail' => 'Du har inte angivit någon giltig e-postadress i dina [[Special:Preferences|inställningar]].',
 'confirmemail_text' => 'Innan du kan använda {{SITENAME}}s funktioner för e-post måste du bekräfta din e-postadress. Aktivera knappen nedan för att skicka en bekräftelsekod till din e-postadress. Mailet kommer att innehålla en länk, som innehåller en kod. Genom att klicka på den länken eller kopiera den till din webbläsares fönster för webbadresser, bekräftar du att din e-postadress fungerar.',
@@ -4096,4 +4100,7 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'duration-centuries' => '$1 {{PLURAL:$1|sekel|sekel}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Sidor med en sidegenskap',
+'pageswithprop-submit' => 'Gå',
 );
index ebde245..c15263a 100644 (file)
@@ -639,7 +639,7 @@ Ita-nia mudansa la armazenadu seidauk!",
 'listgrouprights-rights' => 'Priviléjiu',
 'listgrouprights-members' => '(lista membru nian)',
 
-# E-mail user
+# Email user
 'emailuser' => "Haruka korreiu eletróniku ba uza-na'in ne'e",
 'defemailsubject' => '{{SITENAME}} - korreiu eletróniku husi uza-na\'in "$1"',
 'noemailtitle' => "Lá'os diresaun korreiu eletróniku",
index 7b4cbe5..30a3d36 100644 (file)
@@ -691,7 +691,7 @@ $1',
 'loginlanguagelabel' => 'ภาษา: $1',
 'suspicious-userlogout' => 'คำขอล็อกเอาต์ของคุณถูกปฏิเสธเพราะดูเหมือนส่งมาจากเบราว์เซอร์หรือพร็อกซีแคชที่เสีย',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'เกิดข้อผิดพลาดไม่ทราบสาเหตุในฟังก์ชัน mail() ของพีเอชพี',
 'user-mail-no-addy' => 'พยายามส่งอีเมลโดยไม่มีที่อยู่อีเมล',
 'user-mail-no-body' => 'พยายามส่งอีเมลที่มีเนื้อหาว่างหรือสั้นอย่างไร้เหตุผล',
@@ -1347,7 +1347,7 @@ $1",
 'prefs-displaywatchlist' => 'ตัวเลือกผลแสดง',
 'prefs-diffs' => 'ผลต่าง',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ที่อยู่อีเมลดูถูกต้อง',
 'email-address-validity-invalid' => 'ป้อนที่อยู่อีเมลที่ถูกต้อง',
 
@@ -2075,7 +2075,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'เพิ่มทุกกลุ่มเข้าไปในบัญชีนี้',
 'listgrouprights-removegroup-self-all' => 'นำทุกกลุ่มออกจากบัญชีนี้',
 
-# E-mail user
+# Email user
 'mailnologin' => 'ไม่มีที่อยู่ส่ง',
 'mailnologintext' => 'คุณต้อง[[Special:UserLogin|ล็อกอิน]]และมีที่อยู่อีเมลที่สมเหตุสมผลใน[[Special:Preferences|การตั้งค่า]]ของคุณ ในการส่งอีเมลหาผู้ใช้อื่น',
 'emailuser' => 'ส่งอีเมลหาผู้ใช้นี้',
@@ -3333,7 +3333,7 @@ $1',
 'monthsall' => 'ทั้งหมด',
 'limitall' => 'ทั้งหมด',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'ยืนยันอีเมล',
 'confirmemail_noemail' => 'ไม่ได้ใส่อีเมลในส่วน [[Special:Preferences|การตั้งค่าส่วนตัว]]',
 'confirmemail_text' => 'ถ้าต้องการใช้คำสั่งพิเศษในด้านอีเมสล จำเป็นต้องใส่ค่าอีเมลก่อน โดยกดที่ปุ่มด้านล่าง และทางระบบจะส่งไปที่อีเมลนี้ ในอีเมลจะมีลิงก์ซึ่งมีรหัสสำหรับยืนยันอีเมล',
index 8976908..7f05e5e 100644 (file)
@@ -844,7 +844,7 @@ Lütfen tekrar denemeden önce bekleyin.',
 'loginlanguagelabel' => 'Dil: $1',
 'suspicious-userlogout' => 'Çıkış isteğiniz reddedildi çünkü bozuk bir tarayıcı ya da önbellekli vekil tarafından gönerilmiş gibi görünüyor.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => "PHP's mail() fonksiyonunda bilinmeyen hata",
 'user-mail-no-addy' => 'Bir e-posta adresi olmadan e-posta göndermeye çalıştı.',
 
@@ -918,7 +918,7 @@ Geçici şifre: $2',
 'italic_tip' => 'Eğik yazı',
 'link_sample' => 'Bağlantı başlığı',
 'link_tip' => 'İç bağlantı',
-'extlink_sample' => 'http://www.example.com adres açıklaması',
+'extlink_sample' => 'http://www.example.com bağlantı başlığı',
 'extlink_tip' => 'Dış bağlantı (Adresin önüne http:// koymayı unutmayın)',
 'headline_sample' => 'Başlık metni',
 'headline_tip' => '2. seviye başlık',
@@ -1150,7 +1150,7 @@ $3 tarafından verilen sebep ''$2''",
 'revisionasof' => '$1 tarihindeki hâli',
 'revision-info' => '$2 tarafından oluşturulmuş $1 tarihli sürüm',
 'previousrevision' => '← Önceki hâli',
-'nextrevision' => 'Sonraki hali →',
+'nextrevision' => 'Sonraki hâli →',
 'currentrevisionlink' => 'en güncel halini göster',
 'cur' => 'fark',
 'next' => 'sonraki',
@@ -1360,7 +1360,7 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 'search-interwiki-default' => '$1 sonuçlar:',
 'search-interwiki-more' => '(daha çok)',
 'search-relatedarticle' => 'ilgili',
-'mwsuggest-disable' => 'AJAX önerilerini devre dışı bırak',
+'mwsuggest-disable' => 'Arama önerilerini devre dışı bırak',
 'searcheverything-enable' => 'Tüm ad alanlarında ara',
 'searchrelated' => 'ilgili',
 'searchall' => 'hepsi',
@@ -1506,7 +1506,7 @@ Diğer kullanıcılar sizinle bu yolla iletişime geçtiğinde e-posta adresiniz
 'prefs-displaywatchlist' => 'Görüntüleme seçenekleri',
 'prefs-diffs' => 'Farklar',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-posta adresi geçerli görünüyor',
 'email-address-validity-invalid' => 'Geçerli bir e-posta adresi girin',
 
@@ -2245,7 +2245,7 @@ Bireysel haklarla ilgili [[{{MediaWiki:Listgrouprights-helppage}}|daha fazla bil
 'listgrouprights-addgroup-self-all' => 'Kendi hesabına tüm grupları ekleyebilir',
 'listgrouprights-removegroup-self-all' => 'Kendi hesabından tüm grupları çıkarabilir',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Gönderi adresi yok.',
 'mailnologintext' => 'Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.',
 'emailuser' => 'Bu kullanıcıya e-posta gönder',
@@ -2552,7 +2552,7 @@ $1',
 'nocontribs' => 'Bu kriterlere uyan değişiklik bulunamadı',
 'uctop' => '(son)',
 'month' => 'Ay:',
-'year' => 'Yıl:',
+'year' => 'Bu yıla kadar (ve önceki yıllar):',
 
 'sp-contributions-newbies' => 'Sadece yeni kullanıcıların katkılarını göster',
 'sp-contributions-newbies-sub' => 'Yeni kullanıcılar için',
@@ -3591,7 +3591,7 @@ Diğerleri varsayılan olarak gizlenecektir.
 'monthsall' => 'hepsi',
 'limitall' => 'tümü',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'E-posta adresini onayla',
 'confirmemail_noemail' => '[[Special:Preferences|Kullanıcı tercihlerinizde]] tanımlanmış uygun bir e-posta adresiniz yok.',
 'confirmemail_text' => "Viki'nin e-posta işlevlerini kullanmabilmek için, önce e-posta adresinizin doğrulanması gerekiyor.
@@ -3706,7 +3706,7 @@ Sayfayı baştan açmak isityorsanız, lütfen onaylayın.",
 'autosumm-blank' => 'Sayfayı boşalttı',
 'autosumm-replace' => "Sayfa içeriği '$1' ile değiştiriliyor",
 'autoredircomment' => '[[$1]] sayfasına yönlendirildi',
-'autosumm-new' => "Sayfa oluşturdu, içeriği: '$1'",
+'autosumm-new' => 'Yeni sayfa: "$1"',
 
 # Live preview
 'livepreview-loading' => 'Yükleniyor...',
index 907b52e..ad530a5 100644 (file)
@@ -16,6 +16,7 @@
  * @author AlexSm
  * @author Andrijko Z.
  * @author Arturyatsko
+ * @author AtUkr
  * @author Base
  * @author Dim Grits
  * @author DixonD
@@ -869,7 +870,7 @@ $1',
 'loginlanguagelabel' => 'Мова: $1',
 'suspicious-userlogout' => 'Ваш запит на завершення сеанса відхилений, оскільки він схожий на запит, відправлений зіпсованим веб-оглядачем або кешуючим проксі-сервером.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Невідома помилка в PHP-mail() функції',
 'user-mail-no-addy' => 'Спроба надсилання електронної пошти без зазначеної адреси електронної пошти.',
 'user-mail-no-body' => 'Спроба надіслати електронного листа з порожнім або надто коротким вмістом.',
@@ -1559,7 +1560,7 @@ $1",
 'prefs-displaywatchlist' => 'Налаштування показу',
 'prefs-diffs' => 'Різниці версій',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Адреса електронної пошти є чинною',
 'email-address-validity-invalid' => 'Введіть чинну адресу електронної пошти',
 
@@ -2164,6 +2165,10 @@ $1',
 Ймовірно, вони повинні вказувати на відповідну конкретну статтю.<br />
 Сторінка вважається багатозначною, якщо на ній розміщений шаблон, назва якого є на сторінці [[MediaWiki:Disambiguationspage]].",
 
+'pageswithprop' => 'Сторінки з перевизначеними властивостями',
+'pageswithprop-text' => 'Тут перераховані сторінки, у яких були вручну перевизначені окремі властивості.',
+'pageswithprop-prop' => 'Назва властивості:',
+
 'doubleredirects' => 'Подвійні перенаправлення',
 'doubleredirectstext' => 'На цій сторінці наведено список перенаправлень на інші перенаправлення.
 Кожен рядок містить посилання на перше та друге перенаправлення, а також перший рядок тексту другого перенаправлення, що зазвичай містить «реальне» перенаправлення на необхідну сторінку, куди повинно вказувати й перше перенаправлення.
@@ -2357,7 +2362,7 @@ $1',
 'listgrouprights-addgroup-self-all' => 'Може додавати всі групи до свого облікового запису',
 'listgrouprights-removegroup-self-all' => 'може вилучати всі групи зі свого облікового запису',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Відсутня адреса для відправки',
 'mailnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]] і мати підтверджену адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.',
 'emailuser' => 'Надіслати листа',
@@ -3001,7 +3006,7 @@ $1',
 'importinterwiki' => 'Міжвікі імпорт',
 'import-interwiki-text' => 'Вкажіть вікі й назву імпортованої сторінки.
 Дати змін й імена авторів буде збережено.
\92Ñ\81Ñ\96 Ð¾Ð¿ÐµÑ\80аÑ\86Ñ\96Ñ\97 Ð¼ÐµÐ¶Ð²Ñ\96кÑ\96 імпорту реєструються в [[Special:Log/import|відповідному протоколі]].',
£Ñ\81Ñ\96 Ð¾Ð¿ÐµÑ\80аÑ\86Ñ\96Ñ\97 Ð¼Ñ\96жвÑ\96кÑ\96-імпорту реєструються в [[Special:Log/import|відповідному протоколі]].',
 'import-interwiki-source' => 'Вікі/сторінка-джерело',
 'import-interwiki-history' => 'Копіювати всю історію змін цієї сторінки',
 'import-interwiki-templates' => 'Включити всі шаблони',
@@ -3865,7 +3870,7 @@ $8',
 'monthsall' => 'всі',
 'limitall' => 'усі',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Підтвердження адреси ел. пошти',
 'confirmemail_noemail' => 'Ви не зазначили коректну адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях користувача]].',
 'confirmemail_text' => 'Вікі-двигун потребує підтвердження адреси електронної пошти перед початком роботи. Натисніть на кнопку, щоб за вказаною адресою одержати листа, який міститиме посилання на спеціальну сторінку, після відкриття якої у браузері адреса електронної пошти буде вважатися підтвердженою.',
@@ -4344,4 +4349,7 @@ MediaWiki поширюється в надії, що вона буде кори
 'duration-centuries' => '$1 {{PLURAL:$1|століття|століття|століть}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тисячоліття|тисячоліття|тисячоліть}}',
 
+# Unknown messages
+'pageswithprop-legend' => 'Сторінки з перевизначеними властивостями',
+'pageswithprop-submit' => 'Перейти',
 );
index e01943a..8489a3e 100644 (file)
@@ -1113,7 +1113,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'listgrouprights-helppage' => 'Help:Guruhlar huquqlari',
 'listgrouprights-members' => '(a’zolar ro‘yxati)',
 
-# E-mail user
+# Email user
 'emailuser' => 'Foydalanuvchiga maktub',
 'emailuser-title-target' => 'Ushbu {{GENDER:$1|foydalanuvchi}}ga maktub joʻnatish',
 'emailuser-title-notarget' => 'Foydalanuvchiga elektron maktub yozish',
@@ -1122,7 +1122,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'defemailsubject' => '{{SITENAME}} — $1 tomonidan maktub',
 'usermaildisabled' => 'Foydalanuvchi elektron pochtasi o‘chirilgan',
 'noemailtitle' => 'Elektron pochta manzili mavjud emas',
-'noemailtext' => "Bu foydalanuvchi e-mail manzil ko'rsatgani yo'q.",
+'noemailtext' => 'Bu foydalanuvchi e-mail manzil koʻrsatgani yoʻq.',
 'nowikiemailtitle' => 'Maktub joʻnatishga ruxsat yoʻq',
 'emailtarget' => 'Oluvchi ishtirokchining ismini kiriting',
 'emailusername' => 'Ishtirokchi nomi:',
index f94c572..18b469d 100644 (file)
@@ -791,7 +791,7 @@ Xin hãy đợi chốc lát rồi thử lại.',
 'loginlanguagelabel' => 'Ngôn ngữ: $1',
 'suspicious-userlogout' => 'Đã bỏ qua yêu cầu đăng xuất bạn, hình như được gửi từ trình duyệt hoặc máy proxy nhớ đệm hư.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Lỗi không rõ trong hàm PHP mail()',
 'user-mail-no-addy' => 'Không có địa chỉ để gửi thư điện tử đến',
 'user-mail-no-body' => 'Không thể gửi thư điện tử rỗng hoặc có nội dung ngắn một cách vô lý.',
@@ -1476,7 +1476,7 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'prefs-displaywatchlist' => 'Tùy chọn hiển thị',
 'prefs-diffs' => 'Khác biệt',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Có vẻ hợp lệ',
 'email-address-validity-invalid' => 'Yêu cầu địa chỉ hợp lệ!',
 
@@ -2261,7 +2261,7 @@ Có [[{{MediaWiki:Listgrouprights-helppage}}|thông tin thêm]] về từng nhó
 'listgrouprights-addgroup-self-all' => 'Có thể đưa tài khoản của chính mình vào tất cả các nhóm',
 'listgrouprights-removegroup-self-all' => 'Có thể loại tài khoản của chính mình ra khỏi tất cả các nhóm',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Không có địa chỉ gửi thư',
 'mailnologintext' => 'Bạn phải [[Special:UserLogin|đăng nhập]] và khai báo một địa chỉ thư điện tử hợp lệ trong phần [[Special:Preferences|tùy chọn cá nhân]] thì mới gửi được thư cho người khác.',
 'emailuser' => 'Gửi thư cho người này',
@@ -3713,7 +3713,7 @@ Những thông tin khác mặc định sẽ được ẩn đi.
 'monthsall' => 'tất cả',
 'limitall' => 'tất cả',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Xác nhận thư điện tử',
 'confirmemail_noemail' => 'Bạn chưa đưa vào địa chỉ thư điện tử hợp lệ ở [[Special:Preferences|tùy chọn cá nhân]].',
 'confirmemail_text' => '{{SITENAME}} đòi hỏi bạn xác minh thư điện tử của mình
index 766b3e5..5d81dd2 100644 (file)
@@ -532,7 +532,7 @@ San-o matagan pa hin iba nga e-mail para ha imo akawnt, kinahanglan mo sundon an
 'login-abort-generic' => 'An imo paglog-in in diri malinamposon - Naundang',
 'loginlanguagelabel' => 'Pinulongan: $1',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Waray kasabti ha kanan PHP mail() function.',
 
 # Change password dialog
@@ -921,7 +921,7 @@ An imo e-mail address in diri makikit-an kun an iba nga mga gumaramit in makonta
 'prefs-displaywatchlist' => 'Mga pirilion hiunong han ginpapakita',
 'prefs-diffs' => 'Mga kaibhan',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'E-mail address in baga puydi',
 
 # User rights
@@ -1376,7 +1376,7 @@ An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakit
 'listgrouprights-addgroup-all' => 'Igdugang ngatanan nga mga hugpo',
 'listgrouprights-removegroup-all' => 'Igtanggal ngatanan nga mga hugpo',
 
-# E-mail user
+# Email user
 'emailuser' => 'Ig-e-mail ini nga gumaramit',
 'emailuser-title-target' => 'Ig-E-mail ini nga {{HENERO:$1|gumaramit}}',
 'emailuser-title-notarget' => 'Gumaramit han e-mail',
@@ -2042,7 +2042,7 @@ An iba in daan nakatago.
 'monthsall' => 'ngatanan',
 'limitall' => 'ngatanan',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'Igkompirma an e-mail address',
 'confirmemail_sent' => 'Ginpadara an kompirmasyon han e-mail.',
 'confirmemail_needlogin' => 'Kinahanglanon mo hin $1 para makakompirma han imo e-mail address.',
index 8a21cc4..d520b8c 100644 (file)
@@ -700,7 +700,7 @@ $2',
 'loginlanguagelabel' => 'שפראך: $1',
 'suspicious-userlogout' => ' אײַער בקשה אַרויסלאָגירן זיך איז אפגעלייגט געווארן ווייַל אייגנטלעך איז זי געשיקט דורך אַ צעבראכענעם בלעטערער אָדער א פראקסי מיט א זאפאס.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'אומבאַקאַנט טעות אין()mail פֿונקציע פֿון PHP.',
 'user-mail-no-addy' => 'געפרוווט צו שיקן ע-פּאָסט אָן אַן ע-פּאָסט אַדרעס.',
 'user-mail-no-body' => 'האט פרובירט צו שיקן א בליצבריוו וואס זיין אינהאלט איז ליידיק אדער גאר קורץ.',
@@ -1377,7 +1377,7 @@ $1",
 'prefs-displaywatchlist' => 'ווײַזן אפציעס',
 'prefs-diffs' => 'צווישנשיידן',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'ע-פּאָסט אַדרעס זעט אויס גילטיק',
 'email-address-validity-invalid' => 'לייגט אַרײַן א גילטיקן ע־פאסט אַדרעס',
 
@@ -2093,7 +2093,7 @@ $1",
 'listgrouprights-addgroup-self-all' => 'צולייגן אַלע גרופעס צו אייגענער קאנטע',
 'listgrouprights-removegroup-self-all' => 'אראָפנעמען אַלע גרופעס פֿון אייגענער קאנטע',
 
-# E-mail user
+# Email user
 'mailnologin' => 'נישטא קיין אדרעס צו שיקן',
 'mailnologintext' => 'איר ברויכט זײַן [[Special:UserLogin|אַרײַנלאגירט]] און האָבן א גילטיגן ע־פאסט אַדרעס אין אײַער [[Special:Preferences|פרעפֿערענצן]] צו שיקן ע־פאסט צו אַנדערע באַניצער.',
 'emailuser' => 'שיקן ע-פאסט צו דעם באַניצער',
@@ -2812,7 +2812,7 @@ $1',
 'tooltip-pt-anonlogin' => "עס איז רעקאָמענדירט זיך אײַנשרײַבן; ס'איז אָבער נישט קײַן פֿליכט",
 'tooltip-pt-logout' => 'ארויסלאגירן',
 'tooltip-ca-talk' => 'שמועס וועגן דעם אינהאַלט בלאַט',
-'tooltip-ca-edit' => "איר קענט ענדערן דעם בלאט. ביטע באניצט דעם ''פֿאָרויסדיקער אויסקוק'' קנעפל בעפֿארן אפהיטן",
+'tooltip-ca-edit' => "איר קענט ענדערן דעם בלאט. ביטע באניצט דעם ''פֿארויסקוק'' קנעפל בעפֿארן אפהיטן",
 'tooltip-ca-addsection' => 'אָנהייבן א נײַע אָפטיילונג',
 'tooltip-ca-viewsource' => 'דאס איז א פֿארשלאסענער בלאט, איר קענט נאר באַקוקן זיין מקור',
 'tooltip-ca-history' => 'פריערדיגע ווערסיעס פון דעם בלאט.',
@@ -2903,6 +2903,7 @@ $1',
 'spamprotectiontitle' => 'ספעם באשיצונג פילטער',
 'spambot_username' => 'מעדיעוויקי ספאם פוצן',
 'spam_reverting' => 'צוריקגעשטעלט צו דער לעצטער ווערסיע אן לינקען צו $1',
+'spam_blanking' => 'אלע רעוויזיעס האבן לינקען צו $1, אויסליידיקן',
 'spam_deleting' => 'אלע רעוויזיעס האבן לינקען צו $1, אויסמעקן',
 
 # Info page
@@ -2922,6 +2923,7 @@ $1',
 'pageinfo-robot-noindex' => 'נישט אינדעקסירבאר',
 'pageinfo-views' => 'צאַל קוקן',
 'pageinfo-watchers' => '!צאָל בלאט אויפֿפאַסער',
+'pageinfo-few-watchers' => 'ווינציקער ווי $1 {{PLURAL:$1|אויפֿפאסער}}',
 'pageinfo-redirects-name' => 'ווײַטערפירונגען צו דעם בלאט',
 'pageinfo-subpages-name' => 'אונטערבלעטער פון דעם בלאט',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ווײַטערפירונג|ווײַטערפירונגען}}; $3 {{PLURAL:$3|סתם בלאט|סתם בלעטער}})',
@@ -2936,12 +2938,15 @@ $1',
 'pageinfo-magic-words' => '{{PLURAL:$1|מאגיש ווארט|מאגישע ווערטער}} ($1)',
 'pageinfo-hidden-categories' => 'באהאלטענע {{PLURAL:$1|קאטעגאריע|קאטעגאריעס}} ($1)',
 'pageinfo-templates' => ' {{PLURAL:$1|אריבערגעשלאסענער מוסטער|אריבערגשלאסענע מוסטערן}} ($1)',
+'pageinfo-transclusions' => '{{PLURAL:$1|בלאט|בלעטער}} אריבעגעשלאסן אויף ($1)',
 'pageinfo-toolboxlink' => 'בלאַט־אינפֿארמאַציע',
 'pageinfo-redirectsto' => 'פירט ווײַטער צו',
 'pageinfo-redirectsto-info' => 'אינפֿארמאַציע',
 'pageinfo-contentpage' => 'געציילט ווי אן אינהאלט בלאט',
 'pageinfo-contentpage-yes' => 'יאָ',
+'pageinfo-protect-cascading' => 'שיצונגען קאסקאדירן פון דאנעט',
 'pageinfo-protect-cascading-yes' => 'יאָ',
+'pageinfo-protect-cascading-from' => 'שיצונגען קאסקאדירן פון',
 'pageinfo-category-info' => 'קאטעגאריע אינפארמאציע',
 'pageinfo-category-pages' => 'צאָל בלעטער',
 'pageinfo-category-subcats' => 'צאָל אונטערקאטעגאריעס',
@@ -3144,6 +3149,7 @@ $1',
 'exif-sharpness' => 'שארף',
 'exif-devicesettingdescription' => 'אפאראט שטעלונגען אראפמאלונג',
 'exif-imageuniqueid' => 'בילד־ID',
+'exif-gpsversionid' => 'GPS טאַג ווערסיע',
 'exif-gpslatituderef' => 'צפון אדער דרום גארטל־ליניע',
 'exif-gpslatitude' => 'גארטל־ליניע',
 'exif-gpslongituderef' => 'מזרח אדער מערב לענג',
@@ -3153,6 +3159,7 @@ $1',
 'exif-gpstimestamp' => 'GPS צייט (אטאם־זייגער)',
 'exif-gpssatellites' => 'סאטעליטן געניצט פאר מעסטן',
 'exif-gpsstatus' => 'אויפנעמער סטאטוס',
+'exif-gpsmeasuremode' => 'מעסטן מאדע',
 'exif-gpsdop' => 'מאס פוקנטליכקייט',
 'exif-gpsspeedref' => 'גיך איינהייט',
 'exif-gpsspeed' => 'גיך פון GPS־אויפֿנעמער',
@@ -3303,7 +3310,7 @@ $1',
 'exif-sharpness-1' => 'ווייך',
 'exif-sharpness-2' => 'הארט',
 
-'exif-subjectdistancerange-0' => '×\90×\95×\9e×\91×\90Ö·×\95×\95×\99סט',
+'exif-subjectdistancerange-0' => '×\90×\95×\9e×\91×\90Ö·×\95×\95×\90×\95סט',
 'exif-subjectdistancerange-1' => 'מאקרא',
 'exif-subjectdistancerange-2' => 'נאנטע ווייזונג',
 'exif-subjectdistancerange-3' => 'ווײַטע ווײַזונג',
@@ -3320,6 +3327,8 @@ $1',
 'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|מעטער|מעטער}} איבערן ים־שפיגלl',
 'exif-gpsaltitude-below-sealevel' => '$1 {{PLURAL:$1|מעטער|מעטער}} אונטערן ים־שפיגל',
 
+'exif-gpsstatus-a' => "מ'האלט אינמיטן מעסטן",
+
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'ק"מ אין א שעה',
 'exif-gpsspeed-m' => 'מייל פער שעה',
@@ -3393,7 +3402,7 @@ $1',
 'monthsall' => 'אלע',
 'limitall' => 'אַלע',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => 'באַשטעטיקט בליצפּאָסט אַדרעס',
 'confirmemail_noemail' => 'איר האט נישט קיין גוטן בליצבריוו אַדרעס אין אײַער [[Special:Preferences|באניצער פרעפֿערענצן]].',
 'confirmemail_text' => 'די וויקי פארלאנגט אז איר זאלט באשטעטיגן אייער בליצפאסט אדרעס איידער איר באניצט זיך מיט דער ע-פאסט באדינסט. דרוקט אויפן קנעפל אונטן כדי צו שיקן א באשטעטיגונג קאד צו אייער אדרעס. לאדט אן דעם לינק אין אייער בלעטערער צו באשטעטיגן אז אייער אדרעס איז גילטיג.',
@@ -3583,6 +3592,7 @@ $5
 'version' => 'ווערסיע',
 'version-extensions' => 'אינסטאלירטע פארברייטערונגען',
 'version-specialpages' => 'ספעציעלע בלעטער',
+'version-parserhooks' => 'פארזער פארברייטונגען',
 'version-variables' => 'וואַריאַבלען',
 'version-skins' => 'באניצער־אייבערפלאכן',
 'version-other' => 'אנדער',
index 1ae93eb..47d8d0f 100644 (file)
@@ -565,7 +565,7 @@ E-mail kankan kò ní jẹ́ fífiránṣẹ́ fún ìkankan nínú àwọn ìn
 'loginlanguagelabel' => 'Èdè: $1',
 'suspicious-userlogout' => 'Ìtọrọ tí ẹ ṣe láti bọ́sóde jẹ̀ kíkọ̀ nítorípé ó dà bí pé ó jẹ́ fífiránṣẹ́ látọ̀dọ̀ awòtakùn (browser) àìdára tàbí ẹ̀rọ-ìwọ̀fà ìmúpamọ́ onígbàdíẹ̀.',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => 'Àsìṣe àìmọ̀ nínú ìgbéṣe mail() ti PHP',
 'user-mail-no-addy' => 'Ó fẹ́ fi e-mail ránṣẹ́ láìsí àdírẹ́sì e-mail.',
 
@@ -1259,7 +1259,7 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 'prefs-displaywatchlist' => 'Ìfihàn àwọn àṣàyàn',
 'prefs-diffs' => 'Àwọn ìyàtọ̀',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => 'Àdírẹ́ẹ̀sì e-mail dà bí èyí tótọ́',
 'email-address-validity-invalid' => 'Ẹ tẹ e-mail tótọ́',
 
@@ -2044,7 +2044,7 @@ Orúkọ ibiàyè pọndandan, fún àpẹrẹ "*.org".<br />
 'listgrouprights-addgroup-self-all' => 'Ìfikún gbogbo ẹgbẹ́ mọ́ àpamọ́ araẹni',
 'listgrouprights-removegroup-self-all' => 'Ìyọkúrò gbogbo ẹgbẹ́ kúrò nínú àpamọ́ araẹni',
 
-# E-mail user
+# Email user
 'mailnologin' => 'Kò sí àdírẹ́sì àfiránṣẹ́',
 'mailnologintext' => 'Ẹ gbọ́dọ̀ ti [[Special:UserLogin|wọlé]] kí ẹ sì ní àdírẹ́ẹ̀sì e-mail oníìbámu nínú [[Special:Preferences|àwọn ìfẹ́ràn]] yín láti le baà le fi e-mail ránṣẹ́ sí àwọn onísẹ míràn.',
 'emailuser' => 'Ẹ fi e-mail ránṣẹ́ sí oníṣe yìí',
@@ -3261,7 +3261,7 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'monthsall' => 'gbogbo',
 'limitall' => 'gbogbo',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => "Ṣè'múdájú àdírẹ́ẹ̀sì e-mail",
 'confirmemail_noemail' => 'Ẹ kò tíì ṣètò àdírẹ́ẹ̀sì e-mail tó tótọ́ nínú [[Special:Preferences|ìfẹ́ràn oníṣe]] yín.',
 'confirmemail_send' => 'Fi àmìọ̀rọ̀ ìmúdájú ránṣẹ́',
index 9354cda..995cf1b 100644 (file)
@@ -835,7 +835,7 @@ $2',
 'loginlanguagelabel' => '语言:$1',
 'suspicious-userlogout' => '注销请求被拒绝,因为它似乎是由有设计缺陷的浏览器或缓存代理发出的。',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 函数中的未知错误',
 'user-mail-no-addy' => '尝试发送邮件而不附带电子邮件地址。',
 'user-mail-no-body' => '试图发送空的或者主体短得不合理的电子邮件。',
@@ -862,7 +862,7 @@ $2',
 'passwordreset-text' => '完成该表格以接收你账户信息的邮件提醒。',
 'passwordreset-legend' => '重置密码',
 'passwordreset-disabled' => '此wiki已经禁用密码重置。',
-'passwordreset-pretext' => '{{PLURAL:$1||输入下面的数据之一}}',
+'passwordreset-pretext' => '{{PLURAL:$1||输入下面的数据之一}}',
 'passwordreset-username' => '用户名:',
 'passwordreset-domain' => '域:',
 'passwordreset-capture' => '查看生成的电子邮件吗?',
@@ -1456,7 +1456,7 @@ $1",
 'prefs-displaywatchlist' => '显示',
 'prefs-diffs' => '差异对比',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => '电子邮件地址有效',
 'email-address-validity-invalid' => '请输入有效的电子邮件地址',
 
@@ -2020,6 +2020,8 @@ $1',
 'disambiguationspage' => 'Template:消歧义',
 'disambiguations-text' => "以下的页面都有到'''消歧义页'''的链接,但它们可能可以链接到更适当的页面。<br />一个页面如果使用了[[MediaWiki:Disambiguationspage]]内的模板,则会被视为消歧义页。",
 
+'pageswithprop-prop' => '属性名称:',
+
 'doubleredirects' => '双重重定向页',
 'doubleredirectstext' => '本页面列出重定向至其他重定向页的页面。每行含有第一及第二重定向的链接和第二重定向的目标(通常是第一重定向应该指向的“真实”目标页面)。<del>带删除线的</del>条目已被解决。',
 'double-redirect-fixed-move' => '[[$1]]已被移动。它现在重定向至[[$2]]。',
@@ -2207,7 +2209,7 @@ $1',
 'listgrouprights-addgroup-self-all' => '添加所有用户组至自己的账户',
 'listgrouprights-removegroup-self-all' => '删除自己的账户的所有用户组',
 
-# E-mail user
+# Email user
 'mailnologin' => '无电子邮件地址',
 'mailnologintext' => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
 'emailuser' => '电邮联系',
@@ -3610,7 +3612,7 @@ Variants for Chinese language
 'monthsall' => '全部',
 'limitall' => '全部',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => '确认邮箱地址',
 'confirmemail_noemail' => '你还没有在你的[[Special:Preferences|系统设置]]中设置有效的电子邮件地址。',
 'confirmemail_text' => '{{SITENAME}}要求您在使用邮件功能之前验证您的邮箱地址。
@@ -4012,4 +4014,6 @@ MediaWiki发表时预期有用,但对此'''无任何保证''',亦无隐含
 'duration-centuries' => '$1个世纪',
 'duration-millennia' => '$1千年',
 
+# Unknown messages
+'pageswithprop-submit' => '提交',
 );
index 666a98d..4b547a0 100644 (file)
@@ -753,7 +753,7 @@ $2',
 'loginlanguagelabel' => '語言:$1',
 'suspicious-userlogout' => '您登出的要求已經被拒絕,因為它可能是由已損壞的瀏覽器或者快取代理傳送。',
 
-# E-mail sending
+# Email sending
 'php-mail-error-unknown' => '在 PHP 的 mail() 參數中的未知錯誤',
 'user-mail-no-addy' => '嘗試不帶電郵地址發送電郵。',
 'user-mail-no-body' => '試圖發送空的或主體不合理短的電子郵件。',
@@ -1271,7 +1271,7 @@ $1",
 'showingresults' => '下面顯示從第 <b>$2</b> 條開始的 <b>$1</b> 條結果:',
 'showingresultsnum' => "下面顯示從第 '''$2''' 條開始的 '''{{PLURAL:$3|1|$3}}''' 條結果。",
 'showingresultsheader' => "對'''$4'''的{{PLURAL:$5|第'''$1'''至第'''$3'''項結果|第'''$1 - $2'''項,共'''$3'''項結果}}",
-'nonefound' => "'''注意''': 只有一些名字空間是會作為預設搜尋。嘗試''all:''去搜尋全部的頁面(包埋討論頁面、模板等),或可用需要的名字空間作為前綴。",
+'nonefound' => "'''注意:'''只有一些名字空間是會作為預設搜尋。嘗試''all:''去搜尋全部的頁面(包埋討論頁面、模板等),或可用需要的名字空間作為前綴。",
 'search-nonefound' => '在查詢中無結果相符。',
 'powersearch' => '進階搜尋',
 'powersearch-legend' => '進階搜尋',
@@ -1409,7 +1409,7 @@ $1",
 'prefs-displaywatchlist' => '顯示選項',
 'prefs-diffs' => '差異',
 
-# User preference: e-mail validation using jQuery
+# User preference: email validation using jQuery
 'email-address-validity-valid' => '電子郵件地址有效',
 'email-address-validity-invalid' => '請提供一個有效的電子郵件地址',
 
@@ -2178,7 +2178,7 @@ Template:消除歧義',
 'listgrouprights-addgroup-self-all' => '在自己的賬戶中加入所有群組',
 'listgrouprights-removegroup-self-all' => '在自己的賬戶中移除所有群組',
 
-# E-mail user
+# Email user
 'mailnologin' => '無電郵地址',
 'mailnologintext' => '您必須先[[Special:UserLogin|登入]]
 並在[[Special:Preferences|偏好設定]]
@@ -3593,7 +3593,7 @@ Variants for Chinese language
 'monthsall' => '全部',
 'limitall' => '全部',
 
-# E-mail address confirmation
+# Email address confirmation
 'confirmemail' => '確認郵箱位址',
 'confirmemail_noemail' => '您沒有在您的[[Special:Preferences|用戶設定]]裡面輸入一個有效的 email 位址。',
 'confirmemail_text' => '{{SITENAME}}要求您在使用郵件功能之前驗證您的郵箱位址。
@@ -3660,7 +3660,7 @@ $5
 'scarytranscludetoolong' => '[URL 地址太長]',
 
 # Delete conflict
-'deletedwhileediting' => '警告: 此頁在您開始編輯之後已經被刪除﹗',
+'deletedwhileediting' => "'''警告:'''此頁在您開始編輯之後已經被刪除﹗",
 'confirmrecreate' => "在您開始編輯這個頁面後,用戶[[User:$1|$1]] ([[User talk:$1|對話]])以下列原因刪除了這個頁面:
 : ''$2''
 請確認在您重新創建頁面前三思。",
index ad5333f..81fbbb3 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Maintenance
  * @author Rob Church <robchur@gmail.com>
+ * @author Pablo Castellano <pablo@anche.no>
  */
 
 require_once( __DIR__ . '/Maintenance.php' );
@@ -31,50 +32,82 @@ require_once( __DIR__ . '/Maintenance.php' );
  */
 class CreateAndPromote extends Maintenance {
 
+       static $permitRoles = array( 'sysop', 'bureaucrat' );
+
        public function __construct() {
                parent::__construct();
-               $this->mDescription = "Create a new user account";
-               $this->addOption( "sysop", "Grant the account sysop rights" );
-               $this->addOption( "bureaucrat", "Grant the account bureaucrat rights" );
+               $this->mDescription = "Create a new user account and/or grant it additional rights";
+               $this->addOption( "force", "If acccount exists already, just grant it rights or change password." );
+               foreach( self::$permitRoles as $role ) {
+                       $this->addOption( $role, "Add the account to the {$role} group" );
+               }
                $this->addArg( "username", "Username of new user" );
-               $this->addArg( "password", "Password to set);
+               $this->addArg( "password", "Password to set (not required if --force is used)", false);
        }
 
        public function execute() {
                $username = $this->getArg( 0 );
                $password = $this->getArg( 1 );
-
-               $this->output( wfWikiID() . ": Creating and promoting User:{$username}..." );
+               $force = $this->hasOption( 'force' );
+               $inGroups = array();
 
                $user = User::newFromName( $username );
                if ( !is_object( $user ) ) {
                        $this->error( "invalid username.", true );
-               } elseif ( 0 != $user->idForName() ) {
-                       $this->error( "account exists.", true );
                }
 
-               # Try to set the password
-               try {
-                       $user->setPassword( $password );
-               } catch ( PasswordError $pwe ) {
-                       $this->error( $pwe->getText(), true );
+               $exists = ( 0 !== $user->idForName() );
+
+               if ( $exists && !$force ) {
+                       $this->error( "Account exists. Perhaps you want the --force option?", true );
+               } else if ( !$exists && !$password ) {
+                       $this->error( "Argument <password> required!", false );
+                       $this->maybeHelp( true );
+               } else if ( $exists ) {
+                       $inGroups = $user->getGroups();
                }
 
-               # Insert the account into the database
-               $user->addToDatabase();
-               $user->saveSettings();
+               $promotions = array_diff( array_filter( self::$permitRoles, array( $this, 'hasOption' ) ), $inGroups );
 
-               # Promote user
-               if ( $this->hasOption( 'sysop' ) ) {
-                       $user->addGroup( 'sysop' );
+               if ( $exists && !$password && count( $promotions ) === 0 ) {
+                       $this->output( "Account exists and nothing to do.\n" );
+                       return;
+               } else if ( count( $promotions ) !== 0 ) {
+                       $promoText = "User:{$username} into " . implode( ', ', $promotions ) . "...\n";
+                       if ( $exists ) {
+                               $this->output( wfWikiID() . ": Promoting $promoText" );
+                       } else {
+                               $this->output( wfWikiID() . ": Creating and promoting $promoText" );
+                       }
                }
-               if ( $this->hasOption( 'bureaucrat' ) ) {
-                       $user->addGroup( 'bureaucrat' );
+
+               if ( $password ) {
+                       # Try to set the password
+                       try {
+                               $user->setPassword( $password );
+                               if ( $exists ) {
+                                       $this->output( "Password set.\n" );
+                                       $user->saveSettings();
+                               }
+                       } catch ( PasswordError $pwe ) {
+                               $this->error( $pwe->getText(), true );
+                       }
                }
 
-               # Increment site_stats.ss_users
-               $ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
-               $ssu->doUpdate();
+               if ( !$exists ) {
+                       # Insert the account into the database
+                       $user->addToDatabase();
+                       $user->saveSettings();
+               }
+
+               # Promote user
+               array_map( array( $user, 'addGroup' ), $promotions );
+
+               if ( !$exists ) {
+                       # Increment site_stats.ss_users
+                       $ssu = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
+                       $ssu->doUpdate();
+               }
 
                $this->output( "done.\n" );
        }
diff --git a/maintenance/ibm_db2/foreignkeys.sql b/maintenance/ibm_db2/foreignkeys.sql
deleted file mode 100644 (file)
index 4f1450d..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
--- good
-ALTER TABLE user_groups ADD CONSTRAINT USER_GROUPS_FK1 FOREIGN KEY (ug_user) REFERENCES user(user_id) ON DELETE CASCADE
-;
-
--- good
-ALTER TABLE user_newtalk ADD CONSTRAINT USER_NEWTALK_FK1 FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE
-;
-
--- referenced value not found
-ALTER TABLE revision ADD CONSTRAINT REVISION_PAGE_FK FOREIGN KEY (rev_page) REFERENCES page(page_id) ON DELETE CASCADE
-;
--- referenced value not found
-ALTER TABLE revision ADD CONSTRAINT REVISION_USER_FK FOREIGN KEY (rev_user) REFERENCES user(user_id) ON DELETE RESTRICT
-;
-
--- good
-ALTER TABLE page_restrictions ADD CONSTRAINT PAGE_RESTRICTIONS_PAGE_FK FOREIGN KEY (pr_page) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- good
-ALTER TABLE page_props ADD CONSTRAINT PAGE_PROPS_PAGE_FK FOREIGN KEY (pp_page) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- cannot contain null values
--- ALTER TABLE archive ADD CONSTRAINT ARCHIVE_USER_FK FOREIGN KEY (ar_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- referenced value not found
-ALTER TABLE redirect ADD CONSTRAINT REDIRECT_FROM_FK FOREIGN KEY (rd_from) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- referenced value not found
-ALTER TABLE pagelinks ADD CONSTRAINT PAGELINKS_FROM_FK FOREIGN KEY (pl_from) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- good
-ALTER TABLE templatelinks ADD CONSTRAINT TEMPLATELINKS_FROM_FK FOREIGN KEY (tl_from) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- good
-ALTER TABLE imagelinks ADD CONSTRAINT IMAGELINKS_FROM_FK FOREIGN KEY (il_from) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- good
-ALTER TABLE categorylinks ADD CONSTRAINT CATEGORYLINKS_FROM_FK FOREIGN KEY (cl_from) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- good
-ALTER TABLE externallinks ADD CONSTRAINT EXTERNALLINKS_FROM_FK FOREIGN KEY (el_from) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- good
-ALTER TABLE langlinks ADD CONSTRAINT LANGLINKS_FROM_FK FOREIGN KEY (ll_from) REFERENCES page(page_id) ON DELETE CASCADE
-;
-
--- cannot contain null values
--- ALTER TABLE ipblocks ADD CONSTRAINT IPBLOCKS_USER_FK FOREIGN KEY (ipb_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- good
-ALTER TABLE ipblocks ADD CONSTRAINT IPBLOCKS_BY_FK FOREIGN KEY (ipb_by) REFERENCES user(user_id) ON DELETE CASCADE
-;
-
--- cannot contain null values
--- ALTER TABLE image ADD CONSTRAINT IMAGE_USER_FK FOREIGN KEY (img_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- cannot contain null values
--- ALTER TABLE oldimage ADD CONSTRAINT OLDIMAGE_USER_FK FOREIGN KEY (oi_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- good
-ALTER TABLE oldimage ADD CONSTRAINT OLDIMAGE_NAME_FK FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE
-;
-
--- cannot contain null values
--- ALTER TABLE filearchive ADD CONSTRAINT FILEARCHIVE_DELETED_USER_FK FOREIGN KEY (fa_deleted_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- cannot contain null values
--- ALTER TABLE filearchive ADD CONSTRAINT FILEARCHIVE_USER_FK FOREIGN KEY (fa_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- cannot contain null values
--- ALTER TABLE recentchanges ADD CONSTRAINT RECENTCHANGES_USER_FK FOREIGN KEY (rc_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- cannot contain null values
--- ALTER TABLE recentchanges ADD CONSTRAINT RECENTCHANGES_CUR_ID_FK FOREIGN KEY (rc_cur_id) REFERENCES page(page_id) ON DELETE SET NULL
---;
-
--- good
-ALTER TABLE watchlist ADD CONSTRAINT WATCHLIST_USER_FK FOREIGN KEY (wl_user) REFERENCES user(user_id) ON DELETE CASCADE
-;
-
--- cannot contain null values
--- ALTER TABLE protected_titles ADD CONSTRAINT PROTECTED_TITLES_USER_FK FOREIGN KEY (pt_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
-
--- cannot contain null values
--- ALTER TABLE logging ADD CONSTRAINT LOGGING_USER_FK FOREIGN KEY (log_user) REFERENCES user(user_id) ON DELETE SET NULL
---;
\ No newline at end of file
diff --git a/maintenance/ibm_db2/patch-categorylinks-better-collation.sql b/maintenance/ibm_db2/patch-categorylinks-better-collation.sql
deleted file mode 100644 (file)
index 568d5cd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---
--- patch-categorylinks-better-collation.sql
---
---
--- Track category inclusions *used inline*
--- This tracks a single level of category membership
--- (folksonomic tagging, really).
---
-CREATE TABLE categorylinks (
-  cl_from       BIGINT      NOT NULL  DEFAULT 0,
-  -- REFERENCES page(page_id) ON DELETE CASCADE,
-  cl_to         VARCHAR(255)         NOT NULL,
-  -- cl_sortkey has to be at least 86 wide
-  -- in order to be compatible with the old MySQL schema from MW 1.10
-  --cl_sortkey    VARCHAR(86),
-  cl_sortkey VARCHAR(230) FOR BIT DATA  NOT NULL ,
-  cl_sortkey_prefix VARCHAR(255) FOR BIT DATA  NOT NULL ,
-  cl_timestamp  TIMESTAMP(3)  NOT NULL,
-  cl_collation VARCHAR(32) FOR BIT DATA  NOT NULL ,
-  cl_type VARCHAR(6) FOR BIT DATA  NOT NULL
-);
diff --git a/maintenance/ibm_db2/patch-change_tag-indexes.sql b/maintenance/ibm_db2/patch-change_tag-indexes.sql
deleted file mode 100644 (file)
index 1621a03..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-CREATE UNIQUE INDEX change_tag_rc_tag ON change_tag (ct_rc_id,ct_tag);
-CREATE UNIQUE INDEX change_tag_log_tag ON change_tag (ct_log_id,ct_tag);
-CREATE UNIQUE INDEX change_tag_rev_tag ON change_tag (ct_rev_id,ct_tag);
--- Covering index, so we can pull all the info only out of the index.
-CREATE INDEX change_tag_tag_id ON change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
diff --git a/maintenance/ibm_db2/patch-change_tag.sql b/maintenance/ibm_db2/patch-change_tag.sql
deleted file mode 100644 (file)
index 3b6f9d5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
--- A table to track tags for revisions, logs and recent changes.
-CREATE TABLE change_tag (
-  ct_rc_id INTEGER,
-  ct_log_id INTEGER,
-  ct_rev_id INTEGER,
-  ct_tag varchar(255) NOT NULL,
-  ct_params CLOB(64K) INLINE LENGTH 4096
-);
diff --git a/maintenance/ibm_db2/patch-change_tag_summary.sql b/maintenance/ibm_db2/patch-change_tag_summary.sql
deleted file mode 100644 (file)
index 768cbfa..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
--- Rollup table to pull a LIST of tags simply
-CREATE TABLE tag_summary (
-  ts_rc_id INTEGER,
-  ts_log_id INTEGER,
-  ts_rev_id INTEGER,
-  ts_tags CLOB(64K) INLINE LENGTH 4096 NOT NULL
-);
diff --git a/maintenance/ibm_db2/patch-change_valid_tag.sql b/maintenance/ibm_db2/patch-change_valid_tag.sql
deleted file mode 100644 (file)
index 9bdcbc9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE valid_tag (
-  vt_tag varchar(255) NOT NULL PRIMARY KEY
-);
diff --git a/maintenance/ibm_db2/patch-cl_collation-field.sql b/maintenance/ibm_db2/patch-cl_collation-field.sql
deleted file mode 100644 (file)
index 6999dac..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE categorylinks ADD cl_collation VARCHAR(32) FOR BIT DATA  NOT NULL
diff --git a/maintenance/ibm_db2/patch-cl_sortkey_prefix-field.sql b/maintenance/ibm_db2/patch-cl_sortkey_prefix-field.sql
deleted file mode 100644 (file)
index 58b7814..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE categorylinks ADD cl_sortkey_prefix VARCHAR(255) FOR BIT DATA  NOT NULL
diff --git a/maintenance/ibm_db2/patch-cl_type-field.sql b/maintenance/ibm_db2/patch-cl_type-field.sql
deleted file mode 100644 (file)
index 5952c98..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE categorylinks ADD cl_type VARCHAR(6) FOR BIT DATA  NOT NULL
diff --git a/maintenance/ibm_db2/patch-external_user.sql b/maintenance/ibm_db2/patch-external_user.sql
deleted file mode 100644 (file)
index 96cb823..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE TABLE external_user (
-  -- Foreign key to user_id
-  eu_local_id                  BIGINT NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-
-  -- Some opaque identifier provided by the external database
-  eu_external_id               VARCHAR(255) NOT NULL
-);
diff --git a/maintenance/ibm_db2/patch-ipb_allow_usertalk.sql b/maintenance/ibm_db2/patch-ipb_allow_usertalk.sql
deleted file mode 100644 (file)
index 6274bb2..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-CREATE TABLE ipblocks (
-  ipb_id                INTEGER      NOT NULL  PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  --DEFAULT nextval('ipblocks_ipb_id_val'),
-  ipb_address           VARCHAR(1024),
-  ipb_user              BIGINT NOT NULL DEFAULT 0,
-  --           REFERENCES user(user_id) ON DELETE SET NULL,
-  ipb_by                BIGINT      NOT NULL DEFAULT 0,
-  --  REFERENCES user(user_id) ON DELETE CASCADE,
-  ipb_by_text           VARCHAR(255)         NOT NULL  DEFAULT '',
-  ipb_reason            VARCHAR(1024)         NOT NULL,
-  ipb_timestamp         TIMESTAMP(3)  NOT NULL,
-  ipb_auto              SMALLINT     NOT NULL  DEFAULT 0,
-  ipb_anon_only         SMALLINT     NOT NULL  DEFAULT 0,
-  ipb_create_account    SMALLINT     NOT NULL  DEFAULT 1,
-  ipb_enable_autoblock  SMALLINT     NOT NULL  DEFAULT 1,
-  ipb_expiry            TIMESTAMP(3)  NOT NULL,
-  ipb_range_start       VARCHAR(1024),
-  ipb_range_end         VARCHAR(1024),
-  ipb_deleted           SMALLINT     NOT NULL  DEFAULT 0,
-  ipb_block_email       SMALLINT     NOT NULL  DEFAULT 0,
-  ipb_allow_usertalk    SMALLINT     NOT NULL  DEFAULT 0
-
-);
diff --git a/maintenance/ibm_db2/patch-iw_api-field.sql b/maintenance/ibm_db2/patch-iw_api-field.sql
deleted file mode 100644 (file)
index dd732a5..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE interwiki ADD iw_api CLOB(64K) INLINE LENGTH 4096 NOT NULL
diff --git a/maintenance/ibm_db2/patch-iw_api_and_wikiid.sql b/maintenance/ibm_db2/patch-iw_api_and_wikiid.sql
deleted file mode 100644 (file)
index 1b1e359..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE TABLE interwiki (
-  iw_prefix  VARCHAR(32)      NOT NULL  UNIQUE,
-  iw_url     CLOB(64K) INLINE LENGTH 4096      NOT NULL,
-  iw_api     CLOB(64K) INLINE LENGTH 4096      NOT NULL,
-  iw_wikiid  varchar(64) NOT NULL,
-  iw_local   SMALLINT  NOT NULL,
-  iw_trans   SMALLINT  NOT NULL  DEFAULT 0
-);
diff --git a/maintenance/ibm_db2/patch-iw_wikiid-field.sql b/maintenance/ibm_db2/patch-iw_wikiid-field.sql
deleted file mode 100644 (file)
index fe49e3c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE interwiki ADD iw_wikiid varchar(64) NOT NULL
diff --git a/maintenance/ibm_db2/patch-iwlinks.sql b/maintenance/ibm_db2/patch-iwlinks.sql
deleted file mode 100644 (file)
index 2902512..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE  TABLE "IWLINKS"
-(
-"IWL_FROM" INT  NOT NULL ,
-"IWL_PREFIX" VARCHAR(20) FOR BIT DATA  NOT NULL ,
-"IWL_TITLE" VARCHAR(255) FOR BIT DATA  NOT NULL
-)
-;
diff --git a/maintenance/ibm_db2/patch-l10n_cache.sql b/maintenance/ibm_db2/patch-l10n_cache.sql
deleted file mode 100644 (file)
index 49ebed2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE TABLE l10n_cache (
-  -- Language code
-  lc_lang                      VARCHAR(32) NOT NULL,
-  -- Cache key
-  lc_key                       VARCHAR(255) NOT NULL,
-  -- Value
-  lc_value                     CLOB(16M) INLINE LENGTH 4096 NOT NULL
-);
diff --git a/maintenance/ibm_db2/patch-log_search-rename-index.sql b/maintenance/ibm_db2/patch-log_search-rename-index.sql
deleted file mode 100644 (file)
index a6a696e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE TABLE log_search (
-  -- The type of ID (rev ID, log ID, rev TIMESTAMP(3), username)
-  ls_field VARCHAR(32) FOR BIT DATA NOT NULL,
-  -- The value of the ID
-  ls_value varchar(255) NOT NULL,
-  -- Key to log_id
-  ls_log_id BIGINT NOT NULL default 0
-);
diff --git a/maintenance/ibm_db2/patch-log_search.sql b/maintenance/ibm_db2/patch-log_search.sql
deleted file mode 100644 (file)
index a6a696e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE TABLE log_search (
-  -- The type of ID (rev ID, log ID, rev TIMESTAMP(3), username)
-  ls_field VARCHAR(32) FOR BIT DATA NOT NULL,
-  -- The value of the ID
-  ls_value varchar(255) NOT NULL,
-  -- Key to log_id
-  ls_log_id BIGINT NOT NULL default 0
-);
diff --git a/maintenance/ibm_db2/patch-log_user_text.sql b/maintenance/ibm_db2/patch-log_user_text.sql
deleted file mode 100644 (file)
index 3534057..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-CREATE TABLE logging (
-  log_id                       BIGINT      NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  --PRIMARY KEY DEFAULT nextval('log_log_id_seq'),
-  log_type                     VARCHAR(32)         NOT NULL,
-  log_action           VARCHAR(32)         NOT NULL,
-  log_timestamp                TIMESTAMP(3)  NOT NULL,
-  log_user                     BIGINT NOT NULL DEFAULT 0,
-  --                REFERENCES user(user_id) ON DELETE SET NULL,
-  -- Name of the user who performed this action
-  log_user_text                VARCHAR(255) NOT NULL default '',
-  log_namespace                SMALLINT     NOT NULL,
-  log_title                    VARCHAR(255)         NOT NULL,
-  log_page                     BIGINT,
-  log_comment          VARCHAR(255),
-  log_params           CLOB(64K) INLINE LENGTH 4096,
-  log_deleted          SMALLINT     NOT NULL DEFAULT 0
-);
diff --git a/maintenance/ibm_db2/patch-module_deps.sql b/maintenance/ibm_db2/patch-module_deps.sql
deleted file mode 100644 (file)
index 5058d1f..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-CREATE  TABLE "MODULE_DEPS" (
-"MD_MODULE" VARCHAR(255) FOR BIT DATA  NOT NULL ,
-"MD_SKIN" VARCHAR(32) FOR BIT DATA  NOT NULL ,
-"MD_DEPS" CLOB(16M) INLINE LENGTH 4096 NOT NULL
-)
-;
diff --git a/maintenance/ibm_db2/patch-msg_resource.sql b/maintenance/ibm_db2/patch-msg_resource.sql
deleted file mode 100644 (file)
index 58b3dd6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE  TABLE "MSG_RESOURCE"
-(
-"MR_RESOURCE" VARCHAR(255) FOR BIT DATA  NOT NULL ,
-"MR_LANG" VARCHAR(32) FOR BIT DATA  NOT NULL ,
-"MR_BLOB" BLOB NOT NULL ,
-"MR_TIMESTAMP" TIMESTAMP(3)  NOT NULL
-)
-;
diff --git a/maintenance/ibm_db2/patch-msg_resource_links.sql b/maintenance/ibm_db2/patch-msg_resource_links.sql
deleted file mode 100644 (file)
index 4c0ff91..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-CREATE  TABLE "MSG_RESOURCE_LINKS"
-(
-"MRL_RESOURCE" VARCHAR(255) FOR BIT DATA  NOT NULL ,
-"MRL_MESSAGE" VARCHAR(255) FOR BIT DATA  NOT NULL
-)
-;
diff --git a/maintenance/ibm_db2/patch-rd_interwiki.sql b/maintenance/ibm_db2/patch-rd_interwiki.sql
deleted file mode 100644 (file)
index c162548..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE TABLE redirect (
-  rd_from       BIGINT  NOT NULL  PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  --REFERENCES page(page_id) ON DELETE CASCADE,
-  rd_namespace  SMALLINT NOT NULL  DEFAULT 0,
-  rd_title      VARCHAR(255)     NOT NULL DEFAULT '',
-  rd_interwiki  varchar(32),
-  rd_fragment   VARCHAR(255)
-);
diff --git a/maintenance/ibm_db2/patch-ss_active_users.sql b/maintenance/ibm_db2/patch-ss_active_users.sql
deleted file mode 100644 (file)
index f0e6d14..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-CREATE TABLE site_stats (
-  ss_row_id         BIGINT       NOT NULL  UNIQUE,
-  ss_total_views    BIGINT            DEFAULT 0,
-  ss_total_edits    BIGINT            DEFAULT 0,
-  ss_good_articles  BIGINT             DEFAULT 0,
-  ss_total_pages    INTEGER            DEFAULT -1,
-  ss_users          INTEGER            DEFAULT -1,
-  ss_active_users   INTEGER            DEFAULT -1,
-  ss_admins         INTEGER            DEFAULT -1,
-  ss_images         INTEGER            DEFAULT 0
-);
diff --git a/maintenance/ibm_db2/patch-ul_value.sql b/maintenance/ibm_db2/patch-ul_value.sql
deleted file mode 100644 (file)
index cd00f8e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE updatelog (
-  ul_key VARCHAR(255) NOT NULL PRIMARY KEY
-);
diff --git a/maintenance/ibm_db2/patch-uq61_msg_resource_links.sql b/maintenance/ibm_db2/patch-uq61_msg_resource_links.sql
deleted file mode 100644 (file)
index d9185c0..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE UNIQUE INDEX "UQ61_MSG_RESOURCE_LINKS" ON "MSG_RESOURCE_LINKS"
-(
-"MRL_MESSAGE",
-"MRL_RESOURCE"
-)
-ALLOW REVERSE SCANS
-;
diff --git a/maintenance/ibm_db2/patch-uq81_msg_resource.sql b/maintenance/ibm_db2/patch-uq81_msg_resource.sql
deleted file mode 100644 (file)
index 8ed8537..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE UNIQUE INDEX "UQ81_MSG_RESOURCE" ON "MSG_RESOURCE"
-(
-"MR_RESOURCE"
-,"MR_LANG"
-)
-ALLOW REVERSE SCANS
-;
diff --git a/maintenance/ibm_db2/patch-uq96_module_deps.sql b/maintenance/ibm_db2/patch-uq96_module_deps.sql
deleted file mode 100644 (file)
index e0cc879..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-CREATE UNIQUE INDEX "UQ96_MODULE_DEPS" ON "MODULE_DEPS"
-(
-"MD_MODULE"
-,"MD_SKIN"
-)
-ALLOW REVERSE SCANS
-;
diff --git a/maintenance/ibm_db2/patch-user_properties.sql b/maintenance/ibm_db2/patch-user_properties.sql
deleted file mode 100644 (file)
index 6798604..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE user_properties (
-  -- Foreign key to user.user_id
-  up_user BIGINT NOT NULL,
-
-  -- Name of the option being saved. This is indexed for bulk lookup.
-  up_property VARCHAR(32) FOR BIT DATA NOT NULL,
-
-  -- Property value as a string.
-  up_value CLOB(64K) INLINE LENGTH 4096
-);
diff --git a/maintenance/ibm_db2/tables.sql b/maintenance/ibm_db2/tables.sql
deleted file mode 100644 (file)
index 2edb7f0..0000000
+++ /dev/null
@@ -1,929 +0,0 @@
--- IBM DB2
-
--- SQL to create the initial tables for the MediaWiki database.
--- This is read and executed by the install script; you should
--- not have to run it by itself unless doing a manual install.
-
--- Notes:
---  * DB2 will convert all table and column names to all caps internally.
---  * DB2 has a 32k limit on SQL filesize, so it may be necessary
---     to split this into two files soon.
-
-
-CREATE TABLE user (
-  -- Needs to start with 0
-  user_id                   BIGINT
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 0),
-  user_name                 VARCHAR(255) NOT NULL UNIQUE,
-  user_real_name            VARCHAR(255),
-  user_password             VARCHAR(1024),
-  user_newpassword          VARCHAR(1024),
-  user_newpass_time         TIMESTAMP(3),
-  user_token                VARCHAR(255),
-  user_email                VARCHAR(1024),
-  user_email_token          VARCHAR(255),
-  user_email_token_expires  TIMESTAMP(3),
-  user_email_authenticated  TIMESTAMP(3),
-  -- obsolete, replace by user_properties table
-  -- user_options              CLOB(64K) INLINE LENGTH 4096,
-  user_touched              TIMESTAMP(3),
-  user_registration         TIMESTAMP(3),
-  user_editcount            INTEGER
-);
-CREATE INDEX user_email_token_idx
-  ON user (user_email_token);
-CREATE UNIQUE INDEX user_include_idx
-  ON user (user_id)
-  INCLUDE (user_name, user_real_name, user_password, user_newpassword,
-    user_newpass_time, user_token,
-    user_email, user_email_token, user_email_token_expires,
-    user_email_authenticated,
-    user_touched, user_registration, user_editcount);
-CREATE UNIQUE INDEX user_email
-  ON user (user_email);
-
-
-
--- Create a dummy user to satisfy fk contraints especially with revisions
-INSERT INTO user(
-  user_name,    user_real_name,           user_password,  user_newpassword,   user_newpass_time,
-  user_email,   user_email_authenticated, user_token,     user_registration,  user_editcount
-)
-VALUES (
-  'Anonymous',  '',                       NULL,           NULL,               CURRENT_TIMESTAMP,
-  NULL,         NULL,                     NULL,           CURRENT_TIMESTAMP,  0
-);
-
-
-
-CREATE TABLE user_groups (
-  ug_user   BIGINT NOT NULL DEFAULT 0,
-  --    REFERENCES user(user_id) ON DELETE CASCADE,
-  ug_group  VARCHAR(255) NOT NULL
-);
-CREATE INDEX user_groups_unique
-  ON user_groups (ug_user, ug_group);
-
-
-
-CREATE TABLE user_newtalk (
-  -- registered users key
-  user_id              BIGINT NOT NULL DEFAULT 0,
-  --  REFERENCES user(user_id) ON DELETE CASCADE,
-  -- anonymous users key
-  user_ip              VARCHAR(40),
-  user_last_timestamp  TIMESTAMP(3)
-);
-CREATE INDEX user_newtalk_id_idx
-  ON user_newtalk (user_id);
-CREATE INDEX user_newtalk_ip_idx
-  ON user_newtalk (user_ip);
-CREATE UNIQUE INDEX user_newtalk_include_idx
-  ON user_newtalk (user_id, user_ip)
-  INCLUDE (user_last_timestamp);
-
-
-
-CREATE TABLE page (
-  page_id            BIGINT
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  page_namespace     SMALLINT NOT NULL,
-  page_title         VARCHAR(255) NOT NULL,
-  page_restrictions  VARCHAR(1024),
-  page_counter       BIGINT NOT NULL DEFAULT 0,
-  page_is_redirect   SMALLINT NOT NULL DEFAULT 0,
-  page_is_new        SMALLINT NOT NULL DEFAULT 0,
-  page_random        NUMERIC(15,14) NOT NULL,
-  page_touched       TIMESTAMP(3),
-  page_latest        BIGINT NOT NULL, -- FK?
-  page_len           BIGINT NOT NULL
-);
-CREATE UNIQUE INDEX page_unique_name
-  ON page (page_namespace, page_title);
-CREATE INDEX page_random_idx
-  ON page (page_random);
-CREATE INDEX page_len_idx
-  ON page (page_len);
-CREATE UNIQUE INDEX page_id_include
-  ON page (page_id)
-  INCLUDE (page_namespace, page_title, page_restrictions, page_counter, page_is_redirect, page_is_new, page_random, page_touched, page_latest, page_len);
-CREATE UNIQUE INDEX page_name_include
-  ON page (page_namespace, page_title)
-  INCLUDE (page_id, page_restrictions, page_counter, page_is_redirect, page_is_new, page_random, page_touched, page_latest, page_len);
-
-
-
-CREATE TABLE revision (
-  rev_id            BIGINT
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  rev_page          BIGINT NOT NULL DEFAULT 0,
-  --      REFERENCES page (page_id) ON DELETE CASCADE,
-  rev_text_id       BIGINT, -- FK
-  rev_comment       VARCHAR(1024),
-  rev_user          BIGINT NOT NULL DEFAULT 0,
-  --  REFERENCES user(user_id) ON DELETE RESTRICT,
-  rev_user_text     VARCHAR(255) NOT NULL,
-  rev_timestamp     TIMESTAMP(3) NOT NULL,
-  rev_minor_edit    SMALLINT NOT NULL DEFAULT 0,
-  rev_deleted       SMALLINT NOT NULL DEFAULT 0,
-  rev_len           BIGINT,
-  rev_parent_id     BIGINT DEFAULT NULL,
-  rev_sha1          VARCHAR(255) NOT NULL DEFAULT ''
-);
-CREATE UNIQUE INDEX revision_unique
-  ON revision (rev_page, rev_id);
-CREATE INDEX rev_text_id_idx
-  ON revision (rev_text_id);
-CREATE INDEX rev_timestamp_idx
-  ON revision (rev_timestamp);
-CREATE INDEX rev_user_idx
-  ON revision (rev_user);
-CREATE INDEX rev_user_text_idx
-  ON revision (rev_user_text);
-
-
-
-CREATE TABLE text ( -- replaces reserved word 'text'
-  old_id     INTEGER
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  old_text   CLOB(16M) INLINE LENGTH 4096,
-  old_flags  VARCHAR(1024)
-);
-
-
-
-CREATE TABLE page_restrictions (
-  pr_id      BIGINT
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  pr_page    INTEGER NOT NULL DEFAULT 0,
-  --(used to be nullable)
-  --  REFERENCES page (page_id) ON DELETE CASCADE,
-  pr_type    VARCHAR(60) NOT NULL,
-  pr_level   VARCHAR(60) NOT NULL,
-  pr_cascade SMALLINT NOT NULL,
-  pr_user    INTEGER,
-  pr_expiry  TIMESTAMP(3)
-  --PRIMARY KEY (pr_page, pr_type)
-);
---ALTER TABLE page_restrictions ADD CONSTRAINT page_restrictions_pk PRIMARY KEY (pr_page, pr_type);
-CREATE UNIQUE INDEX pr_pagetype
-  ON page_restrictions (pr_page, pr_type);
-CREATE INDEX pr_typelevel
-  ON page_restrictions (pr_type, pr_level);
-CREATE INDEX pr_level
-  ON page_restrictions (pr_level);
-CREATE INDEX pr_cascade
-  ON page_restrictions (pr_cascade);
-
-
-
-CREATE TABLE page_props (
-  pp_page      INTEGER NOT NULL DEFAULT 0,
-  -- REFERENCES page (page_id) ON DELETE CASCADE,
-  pp_propname  VARCHAR(255) NOT NULL,
-  pp_value     CLOB(64K) INLINE LENGTH 4096 NOT NULL,
-  PRIMARY KEY (pp_page, pp_propname)
-);
-CREATE INDEX page_props_propname
-  ON page_props (pp_propname);
-
-
-
-CREATE TABLE archive (
-  ar_namespace   SMALLINT NOT NULL,
-  ar_title       VARCHAR(255) NOT NULL,
-  ar_text        CLOB(16M) INLINE LENGTH 4096,
-  ar_comment     VARCHAR(1024),
-  ar_user        BIGINT NOT NULL,
-  -- no foreign keys in MySQL
-  -- REFERENCES user(user_id) ON DELETE SET NULL,
-  ar_user_text   VARCHAR(255) NOT NULL,
-  ar_timestamp   TIMESTAMP(3) NOT NULL,
-  ar_minor_edit  SMALLINT NOT NULL DEFAULT 0,
-  ar_flags       VARCHAR(1024),
-  ar_rev_id      INTEGER,
-  ar_text_id     INTEGER,
-  ar_deleted     SMALLINT NOT NULL DEFAULT 0,
-  ar_len         INTEGER,
-  ar_page_id     INTEGER,
-  ar_parent_id   INTEGER,
-  ar_sha1        VARCHAR(255) NOT NULL DEFAULT ''
-);
-CREATE INDEX archive_name_title_timestamp
-  ON archive (ar_namespace, ar_title, ar_timestamp);
-CREATE INDEX archive_user_text
-  ON archive (ar_user_text);
-
-
-
-CREATE TABLE redirect (
-  rd_from       BIGINT NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  --REFERENCES page(page_id) ON DELETE CASCADE,
-  rd_namespace  SMALLINT NOT NULL DEFAULT 0,
-  rd_title      VARCHAR(255) NOT NULL DEFAULT '',
-  rd_interwiki  VARCHAR(32),
-  rd_fragment   VARCHAR(255)
-);
-CREATE INDEX redirect_ns_title
-  ON redirect (rd_namespace, rd_title, rd_from);
-
-
-CREATE TABLE pagelinks (
-  pl_from       BIGINT NOT NULL DEFAULT 0,
-  -- REFERENCES page(page_id) ON DELETE CASCADE,
-  pl_namespace  SMALLINT NOT NULL,
-  pl_title      VARCHAR(255) NOT NULL
-);
-CREATE UNIQUE INDEX pagelink_unique
-  ON pagelinks (pl_from, pl_namespace, pl_title);
-
-
-
-CREATE TABLE templatelinks (
-  tl_from       BIGINT NOT NULL DEFAULT 0,
-  --  REFERENCES page(page_id) ON DELETE CASCADE,
-  tl_namespace  SMALLINT NOT NULL,
-  tl_title      VARCHAR(255) NOT NULL
-);
-CREATE UNIQUE INDEX templatelinks_unique
-  ON templatelinks (tl_namespace, tl_title, tl_from);
-CREATE UNIQUE INDEX tl_from_idx
-  ON templatelinks (tl_from, tl_namespace, tl_title);
-
-
-
-CREATE TABLE imagelinks (
-  il_from  BIGINT NOT NULL DEFAULT 0,
-  -- REFERENCES page(page_id) ON DELETE CASCADE,
-  il_to    VARCHAR(255) NOT NULL
-);
-CREATE UNIQUE INDEX il_from_idx
-  ON imagelinks (il_to, il_from);
-CREATE UNIQUE INDEX il_to_idx
-  ON imagelinks (il_from, il_to);
-
-
-
-CREATE TABLE categorylinks (
-  cl_from           BIGINT NOT NULL DEFAULT 0,
-  -- REFERENCES page(page_id) ON DELETE CASCADE,
-  cl_to             VARCHAR(255) NOT NULL,
-  -- cl_sortkey has to be at least 86 wide
-  -- in order to be compatible with the old MySQL schema from MW 1.10
-  --cl_sortkey    VARCHAR(86),
-  cl_sortkey        VARCHAR(230) FOR BIT DATA NOT NULL,
-  cl_sortkey_prefix VARCHAR(255) FOR BIT DATA NOT NULL,
-  cl_timestamp      TIMESTAMP(3) NOT NULL,
-  cl_collation      VARCHAR(32) FOR BIT DATA NOT NULL,
-  cl_type           VARCHAR(6) FOR BIT DATA NOT NULL
-);
-CREATE UNIQUE INDEX cl_from
-  ON categorylinks (cl_from, cl_to);
-CREATE INDEX cl_sortkey
-  ON categorylinks (cl_to, cl_sortkey, cl_from);
-
-
-
-CREATE TABLE externallinks (
-  el_from   BIGINT NOT NULL DEFAULT 0,
-  -- REFERENCES page(page_id) ON DELETE CASCADE,
-  el_to     VARCHAR(1024) NOT NULL,
-  el_index  VARCHAR(1024) NOT NULL
-);
-CREATE INDEX externallinks_from_to
-  ON externallinks (el_from, el_to);
-CREATE INDEX externallinks_index
-  ON externallinks (el_index);
-
-
-
---
--- Track external user accounts, if ExternalAuth is used
---
-CREATE TABLE external_user (
-  -- Foreign key to user_id
-  eu_local_id      BIGINT NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-
-  -- Some opaque identifier provided by the external database
-  eu_external_id    VARCHAR(255) NOT NULL
-);
-CREATE UNIQUE INDEX eu_external_id_idx
-  ON external_user (eu_external_id)
-  INCLUDE (eu_local_id);
-CREATE UNIQUE INDEX eu_local_id_idx
-  ON external_user (eu_local_id)
-  INCLUDE (eu_external_id);
-
-
-
-CREATE TABLE langlinks (
-  ll_from    BIGINT NOT NULL DEFAULT 0,
-  -- REFERENCES page (page_id) ON DELETE CASCADE,
-  ll_lang    VARCHAR(20),
-  ll_title   VARCHAR(255)
-);
-CREATE UNIQUE INDEX langlinks_unique
-  ON langlinks (ll_from, ll_lang);
-CREATE INDEX langlinks_lang_title
-  ON langlinks (ll_lang, ll_title);
-
-
-
-CREATE TABLE site_stats (
-  ss_row_id         BIGINT NOT NULL UNIQUE,
-  ss_total_views    BIGINT DEFAULT 0,
-  ss_total_edits    BIGINT DEFAULT 0,
-  ss_good_articles  BIGINT DEFAULT 0,
-  ss_total_pages    INTEGER DEFAULT -1,
-  ss_users          INTEGER DEFAULT -1,
-  ss_active_users   INTEGER DEFAULT -1,
-  ss_admins         INTEGER DEFAULT -1,
-  ss_images         INTEGER DEFAULT 0
-);
-
-
-
-CREATE TABLE hitcounter (
-  hc_id  BIGINT NOT NULL
-);
-
-
-
-CREATE TABLE ipblocks (
-  ipb_id                INTEGER NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  ipb_address           VARCHAR(1024),
-  ipb_user              BIGINT NOT NULL DEFAULT 0,
-  --           REFERENCES user(user_id) ON DELETE SET NULL,
-  ipb_by                BIGINT NOT NULL DEFAULT 0,
-  --  REFERENCES user(user_id) ON DELETE CASCADE,
-  ipb_by_text           VARCHAR(255) NOT NULL DEFAULT '',
-  ipb_reason            VARCHAR(1024) NOT NULL,
-  ipb_timestamp         TIMESTAMP(3) NOT NULL,
-  ipb_auto              SMALLINT NOT NULL DEFAULT 0,
-  ipb_anon_only         SMALLINT NOT NULL DEFAULT 0,
-  ipb_create_account    SMALLINT NOT NULL DEFAULT 1,
-  ipb_enable_autoblock  SMALLINT NOT NULL DEFAULT 1,
-  ipb_expiry            TIMESTAMP(3) NOT NULL,
-  ipb_range_start       VARCHAR(1024),
-  ipb_range_end         VARCHAR(1024),
-  ipb_deleted           SMALLINT NOT NULL DEFAULT 0,
-  ipb_block_email       SMALLINT NOT NULL DEFAULT 0,
-  ipb_allow_usertalk    SMALLINT NOT NULL DEFAULT 0,
-  ipb_parent_block_id             INTEGER DEFAULT NULL
-  -- REFERENCES ipblocks(ipb_id) ON DELETE SET NULL
-
-);
-CREATE INDEX ipb_address
-  ON ipblocks (ipb_address);
-CREATE INDEX ipb_user
-  ON ipblocks (ipb_user);
-CREATE INDEX ipb_range
-  ON ipblocks (ipb_range_start, ipb_range_end);
-
-
-
-CREATE TABLE image (
-  img_name         VARCHAR(255) NOT NULL
-    PRIMARY KEY,
-  img_size         BIGINT NOT NULL,
-  img_width        INTEGER NOT NULL,
-  img_height       INTEGER NOT NULL,
-  img_metadata     CLOB(16M) INLINE LENGTH 4096 NOT NULL DEFAULT '',
-  img_bits         SMALLINT,
-  img_media_type   VARCHAR(255),
-  img_major_mime   VARCHAR(255) DEFAULT 'unknown',
-  img_minor_mime   VARCHAR(32) DEFAULT 'unknown',
-  img_description  VARCHAR(1024) NOT NULL DEFAULT '',
-  img_user         BIGINT NOT NULL DEFAULT 0,
-  --         REFERENCES user(user_id) ON DELETE SET NULL,
-  img_user_text    VARCHAR(255) NOT NULL DEFAULT '',
-  img_timestamp    TIMESTAMP(3),
-  img_sha1         VARCHAR(255) NOT NULL DEFAULT ''
-);
-CREATE INDEX img_size_idx
-  ON image (img_size);
-CREATE INDEX img_timestamp_idx
-  ON image (img_timestamp);
-CREATE INDEX img_sha1
-  ON image (img_sha1);
-
-
-CREATE TABLE oldimage (
-  oi_name          VARCHAR(255) NOT NULL DEFAULT '',
-  oi_archive_name  VARCHAR(255) NOT NULL,
-  oi_size          BIGINT NOT NULL,
-  oi_width         INTEGER NOT NULL,
-  oi_height        INTEGER NOT NULL,
-  oi_bits          SMALLINT NOT NULL,
-  oi_description   VARCHAR(1024),
-  oi_user          BIGINT NOT NULL DEFAULT 0,
-  --            REFERENCES user(user_id) ON DELETE SET NULL,
-  oi_user_text     VARCHAR(255) NOT NULL,
-  oi_timestamp     TIMESTAMP(3) NOT NULL,
-  oi_metadata      CLOB(16M) INLINE LENGTH 4096 NOT NULL DEFAULT '',
-  oi_media_type    VARCHAR(255),
-  oi_major_mime    VARCHAR(255) NOT NULL DEFAULT 'unknown',
-  oi_minor_mime    VARCHAR(255) NOT NULL DEFAULT 'unknown',
-  oi_deleted       SMALLINT NOT NULL DEFAULT 0,
-  oi_sha1          VARCHAR(255) NOT NULL DEFAULT ''
-  --FOREIGN KEY (oi_name) REFERENCES image(img_name) ON DELETE CASCADE
-);
-CREATE INDEX oi_name_timestamp
-  ON oldimage (oi_name, oi_timestamp);
-CREATE INDEX oi_name_archive_name
-  ON oldimage (oi_name, oi_archive_name);
-CREATE INDEX oi_sha1
-  ON oldimage (oi_sha1);
-
-
-
-CREATE TABLE filearchive (
-  fa_id                 INTEGER NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  fa_name               VARCHAR(255) NOT NULL,
-  fa_archive_name       VARCHAR(255),
-  fa_storage_group      VARCHAR(255),
-  fa_storage_key        VARCHAR(64) DEFAULT '',
-  fa_deleted_user       BIGINT NOT NULL DEFAULT 0,
-  --            REFERENCES user(user_id) ON DELETE SET NULL,
-  fa_deleted_timestamp  TIMESTAMP(3) NOT NULL,
-  fa_deleted_reason     VARCHAR(255),
-  fa_size               BIGINT NOT NULL,
-  fa_width              INTEGER NOT NULL,
-  fa_height             INTEGER NOT NULL,
-  fa_metadata           CLOB(16M) INLINE LENGTH 4096 NOT NULL DEFAULT '',
-  fa_bits               SMALLINT,
-  fa_media_type         VARCHAR(255),
-  fa_major_mime         VARCHAR(255) DEFAULT 'unknown',
-  fa_minor_mime         VARCHAR(255) DEFAULT 'unknown',
-  fa_description        VARCHAR(1024) NOT NULL,
-  fa_user               BIGINT NOT NULL DEFAULT 0,
-  --            REFERENCES user(user_id) ON DELETE SET NULL,
-  fa_user_text          VARCHAR(255) NOT NULL,
-  fa_timestamp          TIMESTAMP(3),
-  fa_deleted            SMALLINT NOT NULL DEFAULT 0
-);
-CREATE INDEX fa_name_time
-  ON filearchive (fa_name, fa_timestamp);
-CREATE INDEX fa_dupe
-  ON filearchive (fa_storage_group, fa_storage_key);
-CREATE INDEX fa_notime
-  ON filearchive (fa_deleted_timestamp);
-CREATE INDEX fa_nouser
-  ON filearchive (fa_deleted_user);
-
-
-
-CREATE TABLE recentchanges (
-  rc_id              INTEGER NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  rc_timestamp       TIMESTAMP(3) NOT NULL,
-  rc_cur_time        TIMESTAMP(3) NOT NULL,
-  rc_user            BIGINT NOT NULL DEFAULT 0,
-  --        REFERENCES user(user_id) ON DELETE SET NULL,
-  rc_user_text       VARCHAR(255) NOT NULL,
-  rc_namespace       SMALLINT NOT NULL,
-  rc_title           VARCHAR(255) NOT NULL,
-  rc_comment         VARCHAR(255),
-  rc_minor           SMALLINT NOT NULL DEFAULT 0,
-  rc_bot             SMALLINT NOT NULL DEFAULT 0,
-  rc_new             SMALLINT NOT NULL DEFAULT 0,
-  rc_cur_id          BIGINT NOT NULL DEFAULT 0,
-  --            REFERENCES page(page_id) ON DELETE SET NULL,
-  rc_this_oldid      BIGINT NOT NULL,
-  rc_last_oldid      BIGINT NOT NULL,
-  rc_type            SMALLINT NOT NULL DEFAULT 0,
-  rc_moved_to_ns     SMALLINT,
-  rc_moved_to_title  VARCHAR(255),
-  rc_patrolled       SMALLINT NOT NULL DEFAULT 0,
-  rc_ip              VARCHAR(40),  -- was CIDR type
-  rc_old_len         INTEGER,
-  rc_new_len         INTEGER,
-  rc_deleted         SMALLINT NOT NULL DEFAULT 0,
-  rc_logid           BIGINT NOT NULL DEFAULT 0,
-  rc_log_type        VARCHAR(255),
-  rc_log_action      VARCHAR(255),
-  rc_params          CLOB(64K) INLINE LENGTH 4096
-);
-CREATE INDEX rc_timestamp
-  ON recentchanges (rc_timestamp);
-CREATE INDEX rc_namespace_title
-  ON recentchanges (rc_namespace, rc_title);
-CREATE INDEX rc_cur_id
-  ON recentchanges (rc_cur_id);
-CREATE INDEX new_name_timestamp
-  ON recentchanges (rc_new, rc_namespace, rc_timestamp);
-CREATE INDEX rc_ip
-  ON recentchanges (rc_ip);
-
-
-
-CREATE TABLE watchlist (
-  wl_user                   BIGINT NOT NULL DEFAULT 0,
-  --  REFERENCES user(user_id) ON DELETE CASCADE,
-  wl_namespace              SMALLINT NOT NULL DEFAULT 0,
-  wl_title                  VARCHAR(255) NOT NULL,
-  wl_notificationtimestamp  TIMESTAMP(3)
-);
-CREATE UNIQUE INDEX wl_user_namespace_title
-  ON watchlist (wl_namespace, wl_title, wl_user);
-
-
-
-CREATE TABLE interwiki (
-  iw_prefix  VARCHAR(32) NOT NULL UNIQUE,
-  iw_url     CLOB(64K) INLINE LENGTH 4096 NOT NULL,
-  iw_api     CLOB(64K) INLINE LENGTH 4096 NOT NULL,
-  iw_wikiid  VARCHAR(64) NOT NULL,
-  iw_local   SMALLINT NOT NULL,
-  iw_trans   SMALLINT NOT NULL DEFAULT 0
-);
-
-
-
-CREATE TABLE querycache (
-  qc_type       VARCHAR(255) NOT NULL,
-  qc_value      BIGINT NOT NULL,
-  qc_namespace  INTEGER NOT NULL,
-  qc_title      VARCHAR(255) NOT NULL
-);
-CREATE INDEX querycache_type_value
-  ON querycache (qc_type, qc_value);
-
-
-
-CREATE TABLE querycache_info (
-  qci_type        VARCHAR(255) UNIQUE NOT NULL,
-  qci_timestamp   TIMESTAMP(3)
-);
-
-
-
-CREATE TABLE querycachetwo (
-  qcc_type          VARCHAR(255) NOT NULL,
-  qcc_value         BIGINT NOT NULL DEFAULT 0,
-  qcc_namespace     INTEGER NOT NULL DEFAULT 0,
-  qcc_title         VARCHAR(255) NOT NULL DEFAULT '',
-  qcc_namespacetwo  INTEGER NOT NULL DEFAULT 0,
-  qcc_titletwo      VARCHAR(255) NOT NULL DEFAULT ''
-);
-CREATE INDEX querycachetwo_type_value
-  ON querycachetwo (qcc_type, qcc_value);
-CREATE INDEX querycachetwo_title
-  ON querycachetwo (qcc_type, qcc_namespace, qcc_title);
-CREATE INDEX querycachetwo_titletwo
-  ON querycachetwo (qcc_type, qcc_namespacetwo, qcc_titletwo);
-
-
-
-CREATE TABLE objectcache (
-  keyname   VARCHAR(255) NOT NULL UNIQUE, -- was nullable
-  value     CLOB(16M) INLINE LENGTH 4096 NOT NULL DEFAULT '',
-  exptime   TIMESTAMP(3) NOT NULL
-);
-CREATE INDEX objectcacache_exptime
-  ON objectcache (exptime);
-
-
-
-CREATE TABLE transcache (
-  tc_url       VARCHAR(255) NOT NULL UNIQUE,
-  tc_contents  CLOB(64K) INLINE LENGTH 4096 NOT NULL,
-  tc_time      TIMESTAMP(3) NOT NULL
-);
-
-
-
-CREATE TABLE logging (
-  log_id          BIGINT NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  log_type        VARCHAR(32) NOT NULL,
-  log_action      VARCHAR(32) NOT NULL,
-  log_timestamp   TIMESTAMP(3) NOT NULL,
-  log_user        BIGINT NOT NULL DEFAULT 0,
-  --                REFERENCES user(user_id) ON DELETE SET NULL,
-  -- Name of the user who performed this action
-  log_user_text   VARCHAR(255) NOT NULL DEFAULT '',
-  log_namespace   SMALLINT NOT NULL,
-  log_title       VARCHAR(255) NOT NULL,
-  log_page        BIGINT,
-  log_comment     VARCHAR(255),
-  log_params      CLOB(64K) INLINE LENGTH 4096,
-  log_deleted     SMALLINT NOT NULL DEFAULT 0
-);
-CREATE INDEX logging_type_name
-  ON logging (log_type, log_timestamp);
-CREATE INDEX logging_user_time
-  ON logging (log_timestamp, log_user);
-CREATE INDEX logging_page_time
-  ON logging (log_namespace, log_title, log_timestamp);
-CREATE INDEX log_user_type_time
-  ON logging (log_user, log_type, log_timestamp);
-CREATE INDEX log_page_id_time
-  ON logging (log_page, log_timestamp);
-CREATE UNIQUE INDEX type_action
-  ON logging (log_type, log_action, log_timestamp);
-
-
-
-CREATE TABLE trackbacks (
-  tb_id     INTEGER NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  -- foreign key also in MySQL
-  tb_page   INTEGER,
-  -- REFERENCES page(page_id) ON DELETE CASCADE,
-  tb_title  VARCHAR(255) NOT NULL,
-  tb_url    CLOB(64K) INLINE LENGTH 4096 NOT NULL,
-  tb_ex     CLOB(64K) INLINE LENGTH 4096,
-  tb_name   VARCHAR(255)
-);
-CREATE INDEX trackback_page
-  ON trackbacks (tb_page);
-
-
-
-CREATE TABLE job (
-  job_id         BIGINT NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  job_cmd        VARCHAR(255) NOT NULL,
-  job_namespace  SMALLINT NOT NULL,
-  job_title      VARCHAR(255) NOT NULL,
-  job_params     CLOB(64K) INLINE LENGTH 4096 NOT NULL
-);
-CREATE INDEX job_cmd_namespace_title
-  ON job (job_cmd, job_namespace, job_title);
-
-
-
---TODO
---CREATE FUNCTION add_interwiki (TEXT, INT, SMALLINT) RETURNS INT LANGUAGE SQL AS
---$mw$
---  INSERT INTO interwiki (iw_prefix, iw_url, iw_local) VALUES ($1,$2,$3);
---  SELECT 1;
---$mw$;
-
-
-
--- hack implementation
--- should be replaced with OmniFind, Contains(), etc
-CREATE TABLE searchindex (
-  si_page   BIGINT NOT NULL,
-  si_title  VARCHAR(255) NOT NULL DEFAULT '',
-  si_text   CLOB NOT NULL
-);
-
-
-
--- This table is not used unless profiling is turned on
-CREATE TABLE profiling (
-  pf_count   INTEGER NOT NULL DEFAULT 0,
-  pf_time    NUMERIC(18,10) NOT NULL DEFAULT 0,
-  pf_memory  NUMERIC(18,10) NOT NULL DEFAULT 0,
-  pf_name    VARCHAR(255) NOT NULL,
-  pf_server  VARCHAR(255)
-);
-CREATE UNIQUE INDEX pf_name_server
-  ON profiling (pf_name, pf_server);
-
-
-
-CREATE TABLE protected_titles (
-  pt_namespace   INTEGER NOT NULL,
-  pt_title       VARCHAR(255) NOT NULL,
-  pt_user        BIGINT NOT NULL DEFAULT 0,
-  --       REFERENCES user(user_id) ON DELETE SET NULL,
-  pt_reason      VARCHAR(1024),
-  pt_timestamp   TIMESTAMP(3) NOT NULL,
-  pt_expiry      TIMESTAMP(3),
-  pt_create_perm VARCHAR(60) NOT NULL DEFAULT ''
-);
-CREATE UNIQUE INDEX protected_titles_unique
-  ON protected_titles (pt_namespace, pt_title);
-
-
-
-CREATE TABLE updatelog (
-  ul_key VARCHAR(255) NOT NULL
-    PRIMARY KEY
-);
-
-
-
-CREATE TABLE category (
-  cat_id       INTEGER NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  cat_title    VARCHAR(255) NOT NULL,
-  cat_pages    INTEGER NOT NULL DEFAULT 0,
-  cat_subcats  INTEGER NOT NULL DEFAULT 0,
-  cat_files    INTEGER NOT NULL DEFAULT 0,
-  cat_hidden   SMALLINT NOT NULL DEFAULT 0
-);
-CREATE UNIQUE INDEX category_title
-  ON category (cat_title);
-CREATE INDEX category_pages
-  ON category (cat_pages);
-
-
-
--- A table to track tags for revisions, logs and recent changes.
-CREATE TABLE change_tag (
-  ct_rc_id    INTEGER,
-  ct_log_id   INTEGER,
-  ct_rev_id   INTEGER,
-  ct_tag      VARCHAR(255) NOT NULL,
-  ct_params   CLOB(64K) INLINE LENGTH 4096
-);
-CREATE UNIQUE INDEX change_tag_rc_tag
-  ON change_tag (ct_rc_id, ct_tag);
-CREATE UNIQUE INDEX change_tag_log_tag
-  ON change_tag (ct_log_id, ct_tag);
-CREATE UNIQUE INDEX change_tag_rev_tag
-  ON change_tag (ct_rev_id, ct_tag);
--- Covering index, so we can pull all the info only out of the index.
-CREATE INDEX change_tag_tag_id
-  ON change_tag (ct_tag, ct_rc_id, ct_rev_id, ct_log_id);
-
-
-
--- Rollup table to pull a LIST of tags simply
-CREATE TABLE tag_summary (
-  ts_rc_id  INTEGER,
-  ts_log_id INTEGER,
-  ts_rev_id INTEGER,
-  ts_tags   CLOB(64K) INLINE LENGTH 4096 NOT NULL
-);
-CREATE UNIQUE INDEX tag_summary_rc_id
-  ON tag_summary (ts_rc_id);
-CREATE UNIQUE INDEX tag_summary_log_id
-  ON tag_summary (ts_log_id);
-CREATE UNIQUE INDEX tag_summary_rev_id
-  ON tag_summary (ts_rev_id);
-
-
-
-CREATE TABLE valid_tag (
-  vt_tag VARCHAR(255) NOT NULL
-    PRIMARY KEY
-);
-
-
-
---
--- User preferences and perhaps other fun stuff. :)
--- Replaces the old user.user_options blob, with a couple nice properties:
---
--- 1) We only store non-default settings, so changes to the DEFAULTs
---    are now reflected for everybody, not just new accounts.
--- 2) We can more easily do bulk lookups, statistics, or modifications of
---    saved options since it's a sane table structure.
---
-CREATE TABLE user_properties (
-  -- Foreign key to user.user_id
-  up_user       BIGINT NOT NULL,
-  -- Name of the option being saved. This is indexed for bulk lookup.
-  up_property   VARCHAR(255) FOR BIT DATA NOT NULL,
-  -- Property value as a string.
-  up_value      CLOB(64K) INLINE LENGTH 4096
-);
-CREATE UNIQUE INDEX user_properties_user_property
-  ON user_properties (up_user, up_property);
-CREATE INDEX user_properties_property
-  ON user_properties (up_property);
-
-CREATE TABLE log_search (
-  -- The type of ID (rev ID, log ID, rev TIMESTAMP(3), username)
-  ls_field    VARCHAR(32) FOR BIT DATA NOT NULL,
-  -- The value of the ID
-  ls_value    VARCHAR(255) NOT NULL,
-  -- Key to log_id
-  ls_log_id   BIGINT NOT NULL DEFAULT 0
-);
-CREATE UNIQUE INDEX ls_field_val
-  ON log_search (ls_field, ls_value, ls_log_id);
-CREATE INDEX ls_log_id
-  ON log_search (ls_log_id);
-
-
-
--- Table for storing localisation data
-CREATE TABLE l10n_cache (
-  -- Language code
-  lc_lang       VARCHAR(32) NOT NULL,
-  -- Cache key
-  lc_key        VARCHAR(255) NOT NULL,
-  -- Value
-  lc_value      CLOB(16M) INLINE LENGTH 4096 NOT NULL
-);
-CREATE INDEX lc_lang_key
-  ON l10n_cache (lc_lang, lc_key);
-
-
-
-CREATE TABLE msg_resource_links
-(
-  mrl_resource  VARCHAR(255) FOR BIT DATA NOT NULL,
-  mrl_message   VARCHAR(255) FOR BIT DATA NOT NULL
-);
-CREATE UNIQUE INDEX uq61_msg_resource_links
-  ON msg_resource_links (mrl_message, mrl_resource);
--- All DB2 indexes DEFAULT to allowing reverse scans
-
-
-
-CREATE TABLE msg_resource
-(
-  mr_resource   VARCHAR(255) FOR BIT DATA NOT NULL,
-  mr_lang       VARCHAR(32) FOR BIT DATA NOT NULL,
-  mr_blob       CLOB(64K) INLINE LENGTH 4096 NOT NULL,
-  mr_timestamp  TIMESTAMP(3) NOT NULL
-);
-CREATE UNIQUE INDEX uq81_msg_resource
-  ON msg_resource (mr_resource, mr_lang);
--- All DB2 indexes DEFAULT to allowing reverse scans
-
-
-
-CREATE TABLE module_deps (
-  md_module VARCHAR(255) FOR BIT DATA NOT NULL,
-  md_skin   VARCHAR(32) FOR BIT DATA NOT NULL,
-  md_deps   CLOB(16M) INLINE LENGTH 4096 NOT NULL
-);
-CREATE UNIQUE INDEX uq96_module_deps
-  ON module_deps (md_module, md_skin);
--- All DB2 indexes DEFAULT to allowing reverse scans
-
-
-
-CREATE TABLE iwlinks
-(
-  iwl_from    INTEGER NOT NULL,
-  iwl_prefix  VARCHAR(20) FOR BIT DATA NOT NULL,
-  iwl_title   VARCHAR(255) FOR BIT DATA NOT NULL
-);
-
-
-
---
--- Store information about newly uploaded files before they're
--- moved into the actual filestore
---
-CREATE TABLE uploadstash (
-  us_id           BIGINT NOT NULL
-    PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
-  -- the user who uploaded the file.
-  us_user         BIGINT NOT NULL,
-  -- file key. this is how applications actually search for the file.
-  -- this might go away, or become the primary key.
-  us_key          VARCHAR(255) NOT NULL,
-  -- the original path
-  us_orig_path    VARCHAR(255) NOT NULL,
-  -- the temporary path at which the file is actually stored
-  us_path         VARCHAR(255) NOT NULL,
-  -- which type of upload the file came from (sometimes)
-  us_source_type  VARCHAR(50),
-  -- the date/time on which the file was added
-  us_timestamp    TIMESTAMP(3) NOT NULL,
-  us_status       VARCHAR(50) NOT NULL,
-  -- file properties from File::getPropsFromPath.  these may prove unnecessary.
-  --
-  us_size         BIGINT NOT NULL,
-  -- this hash comes from File::sha1Base36(), and is 31 characters
-  us_sha1         VARCHAR(31) NOT NULL,
-  us_mime         VARCHAR(255),
-  -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
-  us_media_type   VARCHAR(30)
-    CONSTRAINT my_constraint
-      CHECK (
-        us_media_type in (
-          'UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA',
-          'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'
-      )
-    ) DEFAULT NULL,
-  -- image-specific properties
-  us_image_width  BIGINT,
-  us_image_height BIGINT,
-  us_image_bits   INTEGER
-);
--- sometimes there's a delete for all of a user's stuff.
-CREATE INDEX us_user
-  ON uploadstash (us_user);
--- pick out files by key, enforce key UNIQUEness
-CREATE UNIQUE INDEX us_key
-  ON uploadstash (us_key);
--- the abandoned upload cleanup script needs this
-CREATE INDEX us_timestamp
-  ON uploadstash (us_timestamp);
-
-
-
--- Stores the groups the user has once belonged to.
--- The user may still belong these groups. Check user_groups.
-CREATE TABLE user_former_groups (
-  ufg_user   BIGINT NOT NULL DEFAULT 0,
-  ufg_group  VARCHAR(16) FOR BIT DATA NOT NULL
-);
-CREATE UNIQUE INDEX ufg_user_group
-  ON user_former_groups (ufg_user, ufg_group);
index ab05a3e..6eeb48d 100644 (file)
  * @file
  */
 
+if ( PHP_SAPI != 'cli' ) {
+       die( "This filter can only be run from the command line.\n" );
+}
+
 $source = file_get_contents( $argv[1] );
 $regexp = '#\@var\s+([^\s]+)([^/]+)/\s+(var|public|protected|private)\s+(\$[^\s;=]+)#';
 $replac = '${2} */ ${3} ${1} ${4}';
index e279ccb..a93ad79 100644 (file)
@@ -39,6 +39,7 @@ class SyncFileBackend extends Maintenance {
                $this->addOption( 'end', 'Ending journal ID', false, true );
                $this->addOption( 'posdir', 'Directory to read/record journal positions', false, true );
                $this->addOption( 'posdump', 'Just dump current journal position into the position dir.' );
+               $this->addOption( 'postime', 'For position dumps, get the ID at this time', false, true );
                $this->addOption( 'verbose', 'Verbose mode', false, false, 'v' );
                $this->setBatchSize( 50 );
        }
@@ -54,7 +55,11 @@ class SyncFileBackend extends Maintenance {
                        if ( !$this->hasOption( 'posdir' ) ) {
                                $this->error( "Param posdir required!", 1 );
                        }
-                       $id = (int)$src->getJournal()->getCurrentPosition(); // default to 0
+                       if ( $this->hasOption( 'postime' ) ) {
+                               $id = (int)$src->getJournal()->getPositionAtTime( $this->getOption( 'postime' ) );
+                       } else {
+                               $id = (int)$src->getJournal()->getCurrentPosition();
+                       }
                        $this->output( "Current journal position is $id.\n" );
                        if ( file_put_contents( $posFile, $id, LOCK_EX ) !== false ) {
                                $this->output( "Saved journal position file.\n" );
index 8dda42e..cc8553c 100644 (file)
@@ -3,9 +3,6 @@
        -moz-border-radius: 2px;
        -webkit-border-radius: 2px;
        border-radius: 2px;
-       -moz-box-shadow: 0px 1px 4px #ccc;
-       -webkit-box-shadow: 0px 1px 4px #ccc;
-       box-shadow: 0px 1px 4px #ccc;
        padding: 0 3px;
        text-align: center;
        font-size: 12px;
index 5d32b6b..40f3d44 100644 (file)
@@ -43,12 +43,12 @@ $.fn.extend( {
                                        $(this).data( '_delayedBindTimerID-' + encEvent + '-' + timeout, timerID );
                                } );
                        }
-                       
+
                        // Bottom half
                        $(this).bind( '_delayedBind-' + encEvent + '-' + timeout, data, callback );
                } );
        },
-       
+
        /**
         * Cancel the timers for delayed events on the selected elements.
         */
@@ -61,7 +61,7 @@ $.fn.extend( {
                        }
                } );
        },
-       
+
        /**
         * Unbind an event bound with delayedBind()
         */
index ef28948..20e6678 100644 (file)
@@ -12,8 +12,6 @@
  *
  * @author Timo Tijhof, 2011-2012
  */
-/*global jQuery, QUnit */
-/*jshint eqeqeq:false, eqnull:false, forin:false */
 ( function ( $ ) {
        'use strict';
 
index 55f799e..e9d320c 100644 (file)
@@ -119,7 +119,7 @@ jQuery( document ).ready( function ( $ ) {
                        e.preventDefault();
                        return false; // Because the submit is special, return false as well.
                }
-               
+
                // Continue natural browser handling other wise
                return true;
        } );
index c70791c..a11233f 100644 (file)
@@ -1,4 +1,9 @@
 ( function ( mw, $ ) {
+       // Only a view can be a post-edit.
+       if ( mw.config.get( 'wgAction' ) !== 'view' ) {
+               return;
+       }
+
        // Matches EditPage::POST_EDIT_COOKIE_KEY_PREFIX
        var cookieKey = mw.config.get( 'wgCookiePrefix' ) + 'PostEditRevision' + mw.config.get( 'wgCurRevisionId' );
 
index b5b42e1..4dbf04c 100644 (file)
@@ -42,22 +42,22 @@ var mw = ( function ( $, undefined ) {
                 */
                get: function ( selection, fallback ) {
                        var results, i;
+                       // If we only do this in the `return` block, it'll fail for the
+                       // call to get() from the mutli-selection block.
+                       fallback = arguments.length > 1 ? fallback : null;
 
                        if ( $.isArray( selection ) ) {
                                selection = slice.call( selection );
                                results = {};
-                               for ( i = 0; i < selection.length; i += 1 ) {
+                               for ( i = 0; i < selection.length; i++ ) {
                                        results[selection[i]] = this.get( selection[i], fallback );
                                }
                                return results;
                        }
 
                        if ( typeof selection === 'string' ) {
-                               if ( this.values[selection] === undefined ) {
-                                       if ( fallback !== undefined ) {
-                                               return fallback;
-                                       }
-                                       return null;
+                               if ( !hasOwn.call( this.values, selection ) ) {
+                                       return fallback;
                                }
                                return this.values[selection];
                        }
@@ -86,7 +86,7 @@ var mw = ( function ( $, undefined ) {
                                }
                                return true;
                        }
-                       if ( typeof selection === 'string' && value !== undefined ) {
+                       if ( typeof selection === 'string' && arguments.length > 1 ) {
                                this.values[selection] = value;
                                return true;
                        }
@@ -103,14 +103,14 @@ var mw = ( function ( $, undefined ) {
                        var s;
 
                        if ( $.isArray( selection ) ) {
-                               for ( s = 0; s < selection.length; s += 1 ) {
-                                       if ( this.values[selection[s]] === undefined ) {
+                               for ( s = 0; s < selection.length; s++ ) {
+                                       if ( typeof selection[s] !== 'string' || !hasOwn.call( this.values, selection[s] ) ) {
                                                return false;
                                        }
                                }
                                return true;
                        }
-                       return this.values[selection] !== undefined;
+                       return typeof selection === 'string' && hasOwn.call( this.values, selection );
                }
        };
 
@@ -970,8 +970,8 @@ var mw = ( function ( $, undefined ) {
                         *
                         * @private
                         * @param {string|string[]} dependencies Module name or array of string module names
-                        * @param {Function} ready Callback to execute when all dependencies are ready
-                        * @param {Function} error Callback to execute when any dependency fails
+                        * @param {Function} [ready] Callback to execute when all dependencies are ready
+                        * @param {Function} [error] Callback to execute when any dependency fails
                         * @param {boolean} [async] If true, load modules asynchronously even if
                         *  document ready has not yet occurred.
                         */
@@ -1447,7 +1447,7 @@ var mw = ( function ( $, undefined ) {
                                                return;
                                        }
                                        // Since some modules are not yet ready, queue up a request.
-                                       request( filtered, null, null, async );
+                                       request( filtered, undefined, undefined, async );
                                },
 
                                /**
index 4ea1a88..ee08b12 100644 (file)
@@ -41,7 +41,7 @@
                                 ':' + ( d.getSeconds() < 10 ? '0' + d.getSeconds() : d.getSeconds() ) +
                                 '.' + ( d.getMilliseconds() < 10 ? '00' + d.getMilliseconds() : ( d.getMilliseconds() < 100 ? '0' + d.getMilliseconds() : d.getMilliseconds() ) ),
                                 $log = $( '#mw-log-console' );
-       
+
                        if ( !$log.length ) {
                                $log = $( '<div id="mw-log-console"></div>' ).css( {
                                                overflow: 'auto',
index ee68abb..3e01d23 100644 (file)
@@ -194,7 +194,7 @@ class VectorTemplate extends BaseTemplate {
                                <!-- jumpto -->
                                <div id="jump-to-nav" class="mw-jump">
                                        <?php $this->msg( 'jumpto' ) ?>
-                                       <a href="#mw-head"><?php $this->msg( 'jumptonavigation' ) ?></a><?php $this->msg( 'comma-separator' ) ?>
+                                       <a href="#mw-navigation"><?php $this->msg( 'jumptonavigation' ) ?></a><?php $this->msg( 'comma-separator' ) ?>
                                        <a href="#p-search"><?php $this->msg( 'jumptosearch' ) ?></a>
                                </div>
                                <!-- /jumpto -->
index 13217e2..ce621f4 100644 (file)
@@ -131,6 +131,7 @@ class ParserTest {
                }
 
                $this->runDisabled = isset( $options['run-disabled'] );
+               $this->runParsoid = isset( $options['run-parsoid'] );
 
                $this->hooks = array();
                $this->functionHooks = array();
index 9e0b6a4..492edb6 100644 (file)
@@ -21,6 +21,8 @@
 # language=XXX  set content language to XXX for this test
 # variant=XXX   set the variant of language for this test (eg zh-tw)
 # disabled      do not run test
+# parsoid       parsoid-only test (not run by PHP parser)
+# php           php-only test (not run by the parsoid parser)
 # showtitle     make the first line the title
 # comment       run through Linker::formatComment() instead of main parser
 # local         format section links in edit comment text as local links
@@ -491,7 +493,6 @@ Italics and bold: other quote tests: (3,2,3,3)
 !!end
 
 
-
 !! test
 Italics and bold: other quote tests: (3,(2,2),3)
 !! input
@@ -501,6 +502,16 @@ Italics and bold: other quote tests: (3,(2,2),3)
 </p>
 !!end
 
+
+!! test
+Italicized possessive
+!! input
+The ''[[Main Page]]'''s talk page.
+!! result
+<p>The <i><a href="/wiki/Main_Page" title="Main Page">Main Page</a>'</i>s talk page.
+</p>
+!! end
+
 ###
 ### <nowiki> test cases
 ###
@@ -1798,7 +1809,7 @@ Table / list interaction: lists nested in tables nested in indented lists
 !! test
 Definition Lists: Nesting: Multi-level (Parsoid only)
 !! options
-disabled
+parsoid
 !! input
 ;t1 :d1
 ;;t2 ::d2
@@ -1828,7 +1839,7 @@ disabled
 !! test
 Definition Lists: Nesting: Test 2 (Parsoid only)
 !! options
-disabled
+parsoid
 !! input
 ;t1
 ::d2
@@ -1848,7 +1859,7 @@ disabled
 !! test
 Definition Lists: Nesting: Test 3 (Parsoid only)
 !! options
-disabled
+parsoid
 !! input
 :;t1
 ::::d2
@@ -2488,6 +2499,17 @@ External links: multiple legal whitespace is fine, Magnus. Don't break it please
 </p>
 !! end
 
+!! test
+External links: link text with spaces
+!! input
+[http://www.example.com a b c]
+[http://www.example.com ''a'' ''b'']
+!! result
+<p><a rel="nofollow" class="external text" href="http://www.example.com">a b c</a>
+<a rel="nofollow" class="external text" href="http://www.example.com"><i>a</i> <i>b</i></a>
+</p>
+!! end
+
 !! test
 External links: wiki links within external link (Bug 3695)
 !! input
@@ -2648,21 +2670,6 @@ External link containing double-single-quotes with no space separating the url f
 </p>
 !! end
 
-!!test
-Text in square brackets that is not a link should parse as text
-!!input
-[foo]
-[{{echo|foo}}]
-[url={{echo|foo}}]
-[url=http://example.com]
-!!result
-<p>[foo]
-[foo]
-[url=foo]
-[url=<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>]
-</p>
-!!end
-
 !! test
 URL-encoding in URL functions (single parameter)
 !! input
@@ -2717,6 +2724,8 @@ Non-extlinks in brackets
 [{{echo|foo}} ''bar'']
 [{{echo|foo}}l's] errand
 [{{echo|foo}}l's errand]
+[url={{echo|foo}}]
+[url=http://example.com]
 !! result
 <p>[foo]
 [foo bar]
@@ -2728,6 +2737,8 @@ Non-extlinks in brackets
 [foo <i>bar</i>]
 [fool's] errand
 [fool's errand]
+[url=foo]
+[url=<a rel="nofollow" class="external free" href="http://example.com">http://example.com</a>]
 </p>
 !! end
 
@@ -4287,7 +4298,7 @@ disabled
 List embedded in a non-block tag
 (Ugly Parsoid output -- worth fixing; Disabled for PHP parser since it relies on Tidy)
 !! options
-disabled
+parsoid
 !!input
 <small>
 * foo
@@ -5829,7 +5840,7 @@ Templates: HTML Tables: 4f. Generating a single tag of a HTML table
 !!end
 
 !!test
-Templates: Wiki Tables: 1. Fostering of entire template content
+Templates: Wiki Tables: 1a. Fostering of entire template content
 !!input
 {|
 {{echo|a}}
@@ -5841,6 +5852,24 @@ a
 
 !!end
 
+!!test
+Templates: Wiki Tables: 1b. Fostering of entire template content
+!!input
+{|
+{{echo|<div>}}
+foo
+{{echo|</div>}}
+|}
+!!result
+<table>
+<div>
+<p>foo
+</p>
+</div>
+<tr><td></td></tr></table>
+
+!!end
+
 !!test
 Templates: Wiki Tables: 2. Fostering of partial template content
 !!input
@@ -5882,7 +5911,7 @@ Templates: Wiki Tables: 4. Templated tags, no content
 !!end
 
 !!test
-Templates: Wiki Tables: 4. Templated tags, regular td-tags
+Templates: Wiki Tables: 5. Templated tags, regular td-tags
 !!input
 {{tbl-start}}
 |foo
@@ -5896,7 +5925,7 @@ Templates: Wiki Tables: 4. Templated tags, regular td-tags
 !!end
 
 !!test
-Templates: Wiki Tables: 4. Templated tags, templated td-tags
+Templates: Wiki Tables: 6. Templated tags, templated td-tags
 !!input
 {{tbl-start}}
 {{!}}foo
@@ -5969,7 +5998,7 @@ a<div>bc</div>de
 Templates: Ugly templates: 1. Navbox template parses badly leading to table misnesting
 (Parsoid-centric)
 !! options
-disabled
+parsoid
 !!input
 {|
 |{{echo|foo</table>}}
@@ -5986,7 +6015,7 @@ bar</span><span about="#mwt1">
 Templates: Ugly templates: 2. Navbox template parses badly leading to table misnesting
 (Parsoid-centric)
 !! options
-disabled
+parsoid
 !!input
 <table>
   <tr>
@@ -7093,6 +7122,37 @@ Custom class
 </p>
 !! end
 
+!! test
+Localized image handling (1).
+!! options
+language=es
+!! input
+[[Archivo:Foobar.jpg|izquierda|enlace=foo|caption]]
+!! result
+<div class="floatleft"><a href="/wiki/Foo" title="caption"><img alt="caption" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+
+!! end
+
+!! test
+Localized image handling (2).
+!! options
+language=es
+!! input
+[[Archivo:Foobar.jpg|miniatura|izquierda|enlace=foo|caption]]
+!! result
+<div class="thumb tleft"><div class="thumbinner" style="width:182px;"><a href="/wiki/Foo" title="Foo"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/Archivo:Foobar.jpg" class="internal" title="Aumentar"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
+
+!! end
+
+!! test
+"border", "frameless" and "class" attributes on an image.
+!! input
+[[File:Foobar.jpg|frameless|border|class=extra|caption]]
+!! result
+<p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="extra thumbborder" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
+</p>
+!! end
+
 !! article
 File:Barfoo.jpg
 !! text
@@ -13647,7 +13707,7 @@ HTML tag with broken attribute value quoting
 !! test
 Parsoid-only: HTML tag with broken attribute value quoting
 !! options
-disabled
+parsoid
 !! input
 <span title="Hello world>Foo</span>
 !! result
@@ -13689,7 +13749,7 @@ Table with broken attribute value quoting on consecutive lines
 !! test
 Parsoid-only: Table with broken attribute value quoting on consecutive lines
 !! options
-disabled
+parsoid
 !! input
 {|
 | title="Hello world|Foo
@@ -13699,7 +13759,7 @@ disabled
 <table>
 <tr>
 <td title="Hello world">Foo
-</td><td style="color: red;">Bar
+</td><td style="color: red">Bar
 </td></tr></table>
 
 !! end
@@ -13749,6 +13809,27 @@ Accept empty attributes in th-cells
 
 !!end
 
+!!test
+Empty table rows go away
+!!input
+{|
+| Hello
+| there
+|- class="foo"
+|-
+|}
+!! result
+<table>
+<tr>
+<td> Hello
+</td>
+<td> there
+</td></tr>
+
+</table>
+
+!! end
+
 TODO:
 more images
 more tables
index 4d2c402..804a30c 100644 (file)
@@ -24,7 +24,7 @@
  * @ingroup Testing
  */
 
-$otions = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record', 'run-disabled' );
+$otions = array( 'quick', 'color', 'quiet', 'help', 'show-output', 'record', 'run-disabled', 'run-parsoid' );
 $optionsWithArgs = array( 'regex', 'filter', 'seed', 'setversion' );
 
 require_once( __DIR__ . '/../maintenance/commandLine.inc' );
@@ -53,6 +53,7 @@ Options:
   --seed <n>       Start the fuzz test from the specified seed
   --help           Show this help message
   --run-disabled   run disabled tests
+  --run-parsoid    run parsoid tests (normally disabled)
 
 ENDS;
        exit( 0 );
index e3e2138..a942098 100644 (file)
@@ -18,6 +18,8 @@ class StructureTest extends MediaWikiTestCase {
                $testClassRegex = implode( '|', array(
                        'ApiFormatTestBase',
                        'ApiTestCase',
+                       'ApiQueryTestBase',
+                       'ApiQueryContinueTestBase',
                        'MediaWikiLangTestCase',
                        'MediaWikiTestCase',
                        'PHPUnit_Framework_TestCase',
index 91c23ec..0690683 100644 (file)
@@ -78,7 +78,6 @@ class TimestampTest extends MediaWikiTestCase {
                        array( TS_RFC2822, 'Tue, 31 Jul 2012 19:01:08 GMT', '20120731190108' ),
                        array( TS_ORACLE, '31-07-2012 19:01:08.000000', '20120731190108' ),
                        array( TS_POSTGRES, '2012-07-31 19:01:08 GMT', '20120731190108' ),
-                       array( TS_DB2, '2012-07-31 19:01:08', '20120731190108' ),
                        // Some extremes and weird values
                        array( TS_ISO_8601, '9999-12-31T23:59:59Z', '99991231235959' ),
                        array( TS_UNIX, '-62135596801', '00001231235959' )
index af499d1..94082e5 100644 (file)
@@ -7,14 +7,9 @@
  */
 class ApiCreateAccountTest extends ApiTestCase {
        function setUp() {
-               global $wgHooks;
                parent::setUp();
                LoginForm::setCreateaccountToken();
-
-               $hooks = $wgHooks;
-               Hooks::clear( 'AlternateUserMailer' );
-               $hooks['AlternateUserMailer'] = array( function () { return false; } );
-               $this->setMwGlobals( array( 'wgHooks' => $hooks ) );
+               $this->setMwGlobals( array( 'wgEnableEmail' => true ) );
        }
 
        /**
@@ -147,10 +142,6 @@ class ApiCreateAccountTest extends ApiTestCase {
         * @expectedException UsageException
         */
        function testInvalidEmail() {
-               global $wgEnableEmail;
-               if ( !$wgEnableEmail ) {
-                       $this->markTestSkipped( 'email is not enabled, so createaccount does not check it' );
-               }
                $this->doApiRequest( array(
                        'action' => 'createaccount',
                        'name' => 'Test User',
index a5ca256..6d4e371 100644 (file)
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- *
- * These tests validate basic functionality of the api query module
+ */
+
+require_once( 'ApiQueryTestBase.php' );
+
+/** These tests validate basic functionality of the api query module
  *
  * @group API
  * @group Database
  * @group medium
  */
-class ApiQueryBasicTest extends ApiTestCase {
+class ApiQueryBasicTest extends ApiQueryTestBase {
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
         * @see MediaWikiTestCase::addDBData()
@@ -296,20 +299,6 @@ class ApiQueryBasicTest extends ApiTestCase {
                        self::$categorymembers ) );
        }
 
-       /**
-        * Merges all requests (parameter arrays) into one
-        * @return array
-        */
-       private function merge( /*...*/ ) {
-               $request = array();
-               $expected = array();
-               foreach ( func_get_args() as $v ) {
-                       $request = array_merge_recursive( $request, $v[0] );
-                       $this->mergeExpected( $expected, $v[1] );
-               }
-               return array( $request, $expected );
-       }
-
        /**
         * Recursively merges the expected values in the $item into the $all
         */
@@ -327,38 +316,6 @@ class ApiQueryBasicTest extends ApiTestCase {
                }
        }
 
-       /**
-        * Checks that the request's result matches the expected results.
-        * @param $values array is a two element array( request, expected_results )
-        * @throws Exception
-        */
-       private function check( $values ) {
-               $request = $values[0];
-               $expected = $values[1];
-               if ( !array_key_exists( 'action', $request ) ) {
-                       $request['action'] = 'query';
-               }
-               foreach ( $request as &$val ) {
-                       if ( is_array( $val ) ) {
-                               $val = implode( '|', array_unique( $val ) );
-                       }
-               }
-               $result = $this->doApiRequest( $request );
-               $result = $result[0];
-               $expected = array( 'query' => $expected );
-               try {
-                       $this->assertQueryResults( $expected, $result );
-               } catch ( Exception $e ) {
-                       print( "\nRequest:\n" );
-                       print_r( $request );
-                       print( "\nExpected:\n" );
-                       print_r( $expected );
-                       print( "\nResult:\n" );
-                       print_r( $result );
-                       throw $e; // rethrow it
-               }
-       }
-
        /**
         * Recursively compare arrays, ignoring mismatches in numeric key and pageids.
         * @param $expected array expected values
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php b/tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
new file mode 100644 (file)
index 0000000..0a3ac1d
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright © 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+require_once( 'ApiQueryContinueTestBase.php' );
+
+/**
+ * @group API
+ * @group Database
+ * @group medium
+ */
+class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
+       /**
+        * Create a set of pages. These must not change, otherwise the tests might give wrong results.
+        * @see MediaWikiTestCase::addDBData()
+        */
+       function addDBData() {
+               try {
+                       $this->editPage( 'AQCT73462-A', '**AQCT73462-A**  [[AQCT73462-B]] [[AQCT73462-C]]' );
+                       $this->editPage( 'AQCT73462-B', '[[AQCT73462-A]]  **AQCT73462-B** [[AQCT73462-C]]' );
+                       $this->editPage( 'AQCT73462-C', '[[AQCT73462-A]]  [[AQCT73462-B]] **AQCT73462-C**' );
+                       $this->editPage( 'AQCT73462-A', '**AQCT73462-A**  [[AQCT73462-B]] [[AQCT73462-C]]' );
+                       $this->editPage( 'AQCT73462-B', '[[AQCT73462-A]]  **AQCT73462-B** [[AQCT73462-C]]' );
+                       $this->editPage( 'AQCT73462-C', '[[AQCT73462-A]]  [[AQCT73462-B]] **AQCT73462-C**' );
+               } catch ( Exception $e ) {
+                       $this->exceptionFromAddDBData = $e;
+               }
+       }
+
+       /**
+        * @medium
+        */
+       public function testA() {
+               $this->mVerbose = false;
+               $mk = function( $g, $p, $gDir ) {
+                       return array(
+                               'generator' => 'allpages',
+                               'gapprefix' => 'AQCT73462-',
+                               'prop' => 'links',
+                               'gaplimit' => "$g",
+                               'pllimit' => "$p",
+                               'gapdir' => $gDir ? "ascending" : "descending",
+                       );
+               };
+               // generator + 1 prop + 1 list
+               $data = $this->query( $mk(99,99,true), 1, 'g1p', false );
+               $this->checkC( $data, $mk(1,1,true), 6, 'g1p-11t' );
+               $this->checkC( $data, $mk(2,2,true), 3, 'g1p-22t' );
+               $this->checkC( $data, $mk(1,1,false), 6, 'g1p-11f' );
+               $this->checkC( $data, $mk(2,2,false), 3, 'g1p-22f' );
+       }
+}
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinueTest.php b/tests/phpunit/includes/api/query/ApiQueryContinueTest.php
new file mode 100644 (file)
index 0000000..cb8f181
--- /dev/null
@@ -0,0 +1,313 @@
+<?php
+/**
+ * Copyright © 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+require_once( 'ApiQueryContinueTestBase.php' );
+
+/**
+ * These tests validate the new continue functionality of the api query module by
+ * doing multiple requests with varying parameters, merging the results, and checking
+ * that the result matches the full data received in one no-limits call.
+ *
+ * @group API
+ * @group Database
+ * @group medium
+ */
+class ApiQueryContinueTest extends ApiQueryContinueTestBase {
+       /**
+        * Create a set of pages. These must not change, otherwise the tests might give wrong results.
+        * @see MediaWikiTestCase::addDBData()
+        */
+       function addDBData() {
+               try {
+                       $this->editPage( 'Template:AQCT-T1', '**Template:AQCT-T1**' );
+                       $this->editPage( 'Template:AQCT-T2', '**Template:AQCT-T2**' );
+                       $this->editPage( 'Template:AQCT-T3', '**Template:AQCT-T3**' );
+                       $this->editPage( 'Template:AQCT-T4', '**Template:AQCT-T4**' );
+                       $this->editPage( 'Template:AQCT-T5', '**Template:AQCT-T5**' );
+
+                       $this->editPage( 'AQCT-1', '**AQCT-1** {{AQCT-T2}} {{AQCT-T3}} {{AQCT-T4}} {{AQCT-T5}}' );
+                       $this->editPage( 'AQCT-2', '[[AQCT-1]] **AQCT-2** {{AQCT-T3}} {{AQCT-T4}} {{AQCT-T5}}' );
+                       $this->editPage( 'AQCT-3', '[[AQCT-1]] [[AQCT-2]] **AQCT-3** {{AQCT-T4}} {{AQCT-T5}}' );
+                       $this->editPage( 'AQCT-4', '[[AQCT-1]] [[AQCT-2]] [[AQCT-3]] **AQCT-4** {{AQCT-T5}}' );
+                       $this->editPage( 'AQCT-5', '[[AQCT-1]] [[AQCT-2]] [[AQCT-3]] [[AQCT-4]] **AQCT-5**' );
+               } catch ( Exception $e ) {
+                       $this->exceptionFromAddDBData = $e;
+               }
+       }
+
+       /**
+        * Test smart continue - list=allpages
+        * @medium
+        */
+       public function test1List() {
+               $this->mVerbose = false;
+               $mk = function( $l ) {
+                       return array(
+                               'list' => 'allpages',
+                               'apprefix' => 'AQCT-',
+                               'aplimit' => "$l",
+                       );
+               };
+               $data = $this->query( $mk(99), 1, '1L', false );
+
+               // 1 list
+               $this->checkC( $data, $mk(1), 5, '1L-1' );
+               $this->checkC( $data, $mk(2), 3, '1L-2' );
+               $this->checkC( $data, $mk(3), 2, '1L-3' );
+               $this->checkC( $data, $mk(4), 2, '1L-4' );
+               $this->checkC( $data, $mk(5), 1, '1L-5' );
+       }
+
+       /**
+        * Test smart continue - list=allpages|alltransclusions
+        * @medium
+        */
+       public function test2Lists() {
+               $this->mVerbose = false;
+               $mk = function( $l1, $l2 ) {
+                       return array(
+                               'list' => 'allpages|alltransclusions',
+                               'apprefix' => 'AQCT-',
+                               'atprefix' => 'AQCT-',
+                               'atunique' => '',
+                               'aplimit' => "$l1",
+                               'atlimit' => "$l2",
+                       );
+               };
+               // 2 lists
+               $data = $this->query( $mk(99,99), 1, '2L', false );
+               $this->checkC( $data, $mk(1,1), 5, '2L-11' );
+               $this->checkC( $data, $mk(2,2), 3, '2L-22' );
+               $this->checkC( $data, $mk(3,3), 2, '2L-33' );
+               $this->checkC( $data, $mk(4,4), 2, '2L-44' );
+               $this->checkC( $data, $mk(5,5), 1, '2L-55' );
+       }
+
+       /**
+        * Test smart continue - generator=allpages, prop=links
+        * @medium
+        */
+       public function testGen1Prop() {
+               $this->mVerbose = false;
+               $mk = function( $g, $p ) {
+                       return array(
+                               'generator' => 'allpages',
+                               'gapprefix' => 'AQCT-',
+                               'gaplimit' => "$g",
+                               'prop' => 'links',
+                               'pllimit' => "$p",
+                       );
+               };
+               // generator + 1 prop
+               $data = $this->query( $mk(99,99), 1, 'G1P', false );
+               $this->checkC( $data, $mk(1,1), 11, 'G1P-11' );
+               $this->checkC( $data, $mk(2,2), 6, 'G1P-22' );
+               $this->checkC( $data, $mk(3,3), 4, 'G1P-33' );
+               $this->checkC( $data, $mk(4,4), 3, 'G1P-44' );
+               $this->checkC( $data, $mk(5,5), 2, 'G1P-55' );
+       }
+
+       /**
+        * Test smart continue - generator=allpages, prop=links|templates
+        * @medium
+        */
+       public function testGen2Prop() {
+               $this->mVerbose = false;
+               $mk = function( $g, $p1, $p2 ) {
+                       return array(
+                               'generator' => 'allpages',
+                               'gapprefix' => 'AQCT-',
+                               'gaplimit' => "$g",
+                               'prop' => 'links|templates',
+                               'pllimit' => "$p1",
+                               'tllimit' => "$p2",
+                       );
+               };
+               // generator + 2 props
+               $data = $this->query( $mk(99,99,99), 1, 'G2P', false );
+               $this->checkC( $data, $mk(1,1,1), 16, 'G2P-111' );
+               $this->checkC( $data, $mk(2,2,2), 9, 'G2P-222' );
+               $this->checkC( $data, $mk(3,3,3), 6, 'G2P-333' );
+               $this->checkC( $data, $mk(4,4,4), 4, 'G2P-444' );
+               $this->checkC( $data, $mk(5,5,5), 2, 'G2P-555' );
+               $this->checkC( $data, $mk(5,1,1), 10, 'G2P-511' );
+               $this->checkC( $data, $mk(4,2,2), 7, 'G2P-422' );
+               $this->checkC( $data, $mk(2,3,3), 7, 'G2P-233' );
+               $this->checkC( $data, $mk(2,4,4), 5, 'G2P-244' );
+               $this->checkC( $data, $mk(1,5,5), 5, 'G2P-155' );
+       }
+
+       /**
+        * Test smart continue - generator=allpages, prop=links, list=alltransclusions
+        * @medium
+        */
+       public function testGen1Prop1List() {
+               $this->mVerbose = false;
+               $mk = function( $g, $p, $l ) {
+                       return array(
+                               'generator' => 'allpages',
+                               'gapprefix' => 'AQCT-',
+                               'gaplimit' => "$g",
+                               'prop' => 'links',
+                               'pllimit' => "$p",
+                               'list' => 'alltransclusions',
+                               'atprefix' => 'AQCT-',
+                               'atunique' => '',
+                               'atlimit' => "$l",
+                       );
+               };
+               // generator + 1 prop + 1 list
+               $data = $this->query( $mk(99,99,99), 1, 'G1P1L', false );
+               $this->checkC( $data, $mk(1,1,1), 11, 'G1P1L-111' );
+               $this->checkC( $data, $mk(2,2,2), 6, 'G1P1L-222' );
+               $this->checkC( $data, $mk(3,3,3), 4, 'G1P1L-333' );
+               $this->checkC( $data, $mk(4,4,4), 3, 'G1P1L-444' );
+               $this->checkC( $data, $mk(5,5,5), 2, 'G1P1L-555' );
+               $this->checkC( $data, $mk(5,5,1), 4, 'G1P1L-551' );
+               $this->checkC( $data, $mk(5,5,2), 2, 'G1P1L-552' );
+       }
+
+       /**
+        * Test smart continue - generator=allpages, prop=links|templates,
+        *                                         list=alllinks|alltransclusions, meta=siteinfo
+        * @medium
+        */
+       public function testGen2Prop2List1Meta() {
+               $this->mVerbose = false;
+               $mk = function( $g, $p1, $p2, $l1, $l2 ) {
+                       return array(
+                               'generator' => 'allpages',
+                               'gapprefix' => 'AQCT-',
+                               'gaplimit' => "$g",
+                               'prop' => 'links|templates',
+                               'pllimit' => "$p1",
+                               'tllimit' => "$p2",
+                               'list' => 'alllinks|alltransclusions',
+                               'alprefix' => 'AQCT-',
+                               'alunique' => '',
+                               'allimit' => "$l1",
+                               'atprefix' => 'AQCT-',
+                               'atunique' => '',
+                               'atlimit' => "$l2",
+                               'meta' => 'siteinfo',
+                               'siprop' => 'namespaces',
+                       );
+               };
+               // generator + 1 prop + 1 list
+               $data = $this->query( $mk(99,99,99,99,99), 1, 'G2P2L1M', false );
+               $this->checkC( $data, $mk(1,1,1,1,1), 16, 'G2P2L1M-11111' );
+               $this->checkC( $data, $mk(2,2,2,2,2), 9, 'G2P2L1M-22222' );
+               $this->checkC( $data, $mk(3,3,3,3,3), 6, 'G2P2L1M-33333' );
+               $this->checkC( $data, $mk(4,4,4,4,4), 4, 'G2P2L1M-44444' );
+               $this->checkC( $data, $mk(5,5,5,5,5), 2, 'G2P2L1M-55555' );
+               $this->checkC( $data, $mk(5,5,5,1,1), 4, 'G2P2L1M-55511' );
+               $this->checkC( $data, $mk(5,5,5,2,2), 2, 'G2P2L1M-55522' );
+               $this->checkC( $data, $mk(5,1,1,5,5), 10, 'G2P2L1M-51155' );
+               $this->checkC( $data, $mk(5,2,2,5,5), 5, 'G2P2L1M-52255' );
+       }
+
+       /**
+        * Test smart continue - generator=templates, prop=templates
+        * @medium
+        */
+       public function testSameGenAndProp() {
+               $this->mVerbose = false;
+               $mk = function( $g, $gDir, $p, $pDir ) {
+                       return array(
+                               'titles' => 'AQCT-1',
+                               'generator' => 'templates',
+                               'gtllimit' => "$g",
+                               'gtldir' => $gDir ? 'ascending' : 'descending',
+                               'prop' => 'templates',
+                               'tllimit' => "$p",
+                               'tldir' => $pDir ? 'ascending' : 'descending',
+                       );
+               };
+               // generator + 1 prop
+               $data = $this->query( $mk(99,true,99,true), 1, 'G=P', false );
+
+               $this->checkC( $data, $mk(1,true,1,true), 4, 'G=P-1t1t' );
+               $this->checkC( $data, $mk(2,true,2,true), 2, 'G=P-2t2t' );
+               $this->checkC( $data, $mk(3,true,3,true), 2, 'G=P-3t3t' );
+               $this->checkC( $data, $mk(1,true,3,true), 4, 'G=P-1t3t' );
+               $this->checkC( $data, $mk(3,true,1,true), 2, 'G=P-3t1t' );
+
+               $this->checkC( $data, $mk(1,true,1,false), 4, 'G=P-1t1f' );
+               $this->checkC( $data, $mk(2,true,2,false), 2, 'G=P-2t2f' );
+               $this->checkC( $data, $mk(3,true,3,false), 2, 'G=P-3t3f' );
+               $this->checkC( $data, $mk(1,true,3,false), 4, 'G=P-1t3f' );
+               $this->checkC( $data, $mk(3,true,1,false), 2, 'G=P-3t1f' );
+
+               $this->checkC( $data, $mk(1,false,1,true), 4, 'G=P-1f1t' );
+               $this->checkC( $data, $mk(2,false,2,true), 2, 'G=P-2f2t' );
+               $this->checkC( $data, $mk(3,false,3,true), 2, 'G=P-3f3t' );
+               $this->checkC( $data, $mk(1,false,3,true), 4, 'G=P-1f3t' );
+               $this->checkC( $data, $mk(3,false,1,true), 2, 'G=P-3f1t' );
+
+               $this->checkC( $data, $mk(1,false,1,false), 4, 'G=P-1f1f' );
+               $this->checkC( $data, $mk(2,false,2,false), 2, 'G=P-2f2f' );
+               $this->checkC( $data, $mk(3,false,3,false), 2, 'G=P-3f3f' );
+               $this->checkC( $data, $mk(1,false,3,false), 4, 'G=P-1f3f' );
+               $this->checkC( $data, $mk(3,false,1,false), 2, 'G=P-3f1f' );
+       }
+
+       /**
+        * Test smart continue - generator=allpages, list=allpages
+        * @medium
+        */
+       public function testSameGenList() {
+               $this->mVerbose = false;
+               $mk = function( $g, $gDir, $l, $pDir ) {
+                       return array(
+                               'generator' => 'allpages',
+                               'gapprefix' => 'AQCT-',
+                               'gaplimit' => "$g",
+                               'gapdir' => $gDir ? 'ascending' : 'descending',
+                               'list' => 'allpages',
+                               'apprefix' => 'AQCT-',
+                               'aplimit' => "$l",
+                               'apdir' => $pDir ? 'ascending' : 'descending',
+                       );
+               };
+               // generator + 1 list
+               $data = $this->query( $mk(99,true,99,true), 1, 'G=L', false );
+
+               $this->checkC( $data, $mk(1,true,1,true), 5, 'G=L-1t1t' );
+               $this->checkC( $data, $mk(2,true,2,true), 3, 'G=L-2t2t' );
+               $this->checkC( $data, $mk(3,true,3,true), 2, 'G=L-3t3t' );
+               $this->checkC( $data, $mk(1,true,3,true), 5, 'G=L-1t3t' );
+               $this->checkC( $data, $mk(3,true,1,true), 5, 'G=L-3t1t' );
+               $this->checkC( $data, $mk(1,true,1,false), 5, 'G=L-1t1f' );
+               $this->checkC( $data, $mk(2,true,2,false), 3, 'G=L-2t2f' );
+               $this->checkC( $data, $mk(3,true,3,false), 2, 'G=L-3t3f' );
+               $this->checkC( $data, $mk(1,true,3,false), 5, 'G=L-1t3f' );
+               $this->checkC( $data, $mk(3,true,1,false), 5, 'G=L-3t1f' );
+               $this->checkC( $data, $mk(1,false,1,true), 5, 'G=L-1f1t' );
+               $this->checkC( $data, $mk(2,false,2,true), 3, 'G=L-2f2t' );
+               $this->checkC( $data, $mk(3,false,3,true), 2, 'G=L-3f3t' );
+               $this->checkC( $data, $mk(1,false,3,true), 5, 'G=L-1f3t' );
+               $this->checkC( $data, $mk(3,false,1,true), 5, 'G=L-3f1t' );
+               $this->checkC( $data, $mk(1,false,1,false), 5, 'G=L-1f1f' );
+               $this->checkC( $data, $mk(2,false,2,false), 3, 'G=L-2f2f' );
+               $this->checkC( $data, $mk(3,false,3,false), 2, 'G=L-3f3f' );
+               $this->checkC( $data, $mk(1,false,3,false), 5, 'G=L-1f3f' );
+               $this->checkC( $data, $mk(3,false,1,false), 5, 'G=L-3f1f' );
+       }
+}
diff --git a/tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php b/tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
new file mode 100644 (file)
index 0000000..4717479
--- /dev/null
@@ -0,0 +1,203 @@
+<?php
+/**
+ *
+ *
+ * Created on Jan 1, 2013
+ *
+ * Copyright © 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+require_once( 'ApiQueryTestBase.php' );
+
+abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
+
+       /**
+        * Enable to print in-depth debugging info during the test run
+        */
+       protected $mVerbose = false;
+
+       /**
+        * Run query() and compare against expected values
+        */
+       protected function checkC( $expected, $params, $expectedCount, $id, $continue = true  ) {
+               $result = $this->query( $params, $expectedCount, $id, $continue );
+               $this->assertResult( $expected, $result, $id );
+       }
+
+       /**
+        * Run query in a loop until no more values are available
+        * @param array $params api parameters
+        * @param int $expectedCount max number of iterations
+        * @param string $id unit test id
+        * @param boolean $useContinue true to use smart continue
+        * @return mixed: merged results data array
+        * @throws Exception
+        */
+       protected function query( $params, $expectedCount, $id, $useContinue = true ) {
+               if ( isset( $params['action'] ) ) {
+                       $this->assertEquals( 'query', $params['action'], 'Invalid query action');
+               } else {
+                       $params['action'] = 'query';
+               }
+               if ( $useContinue && !isset( $params['continue'] ) ) {
+                       $params['continue'] = '';
+               }
+               $count = 0;
+               $result = array();
+               $continue = array();
+               do {
+                       $request = array_merge( $params, $continue );
+                       uksort( $request, function( $a, $b ) {
+                               // put 'continue' params at the end - lazy method
+                               $a = strpos( $a, 'continue' ) !== false ? 'zzz ' . $a : $a;
+                               $b = strpos( $b, 'continue' ) !== false ? 'zzz ' . $b : $b;
+                               return strcmp( $a, $b );
+                       } );
+                       $reqStr = http_build_query( $request );
+                       //$reqStr = str_replace( '&', ' & ', $reqStr );
+                       $this->assertLessThan( $expectedCount, $count, "$id more data: $reqStr" );
+                       if ( $this->mVerbose ) {
+                               print ("$id (#$count): $reqStr\n");
+                       }
+                       try {
+                               $data = $this->doApiRequest( $request );
+                       } catch ( Exception $e ) {
+                               throw new Exception( "$id on $count", 0, $e );
+                       }
+                       $data = $data[0];
+                       if ( isset( $data['warnings'] ) ) {
+                               $warnings = json_encode( $data['warnings'] );
+                               $this->fail( "$id Warnings on #$count in $reqStr\n$warnings" );
+                       }
+                       $this->assertArrayHasKey( 'query', $data, "$id no 'query' on #$count in $reqStr" );
+                       if ( isset( $data['continue'] ) ) {
+                               $continue = $data['continue'];
+                               unset( $data['continue'] );
+                       } else {
+                               $continue = array();
+                       }
+                       if ( $this->mVerbose ) {
+                               $this->printResult( $data );
+                       }
+                       $this->mergeResult( $result, $data );
+                       $count++;
+                       if ( empty( $continue ) ) {
+                               // $this->assertEquals( $expectedCount, $count, "$id finished early" );
+                               if ( $expectedCount > $count ) {
+                                       print "***** $id Finished early in $count turns. $expectedCount was expected\n";
+                               }
+                               return $result;
+                       } elseif ( !$useContinue ) {
+                               $this->assertFalse( 'Non-smart query must be requested all at once' );
+                       }
+               } while( true );
+       }
+
+       private function printResult( $data ) {
+               $q = $data['query'];
+               $print = array();
+               if (isset($q['pages'])) {
+                       foreach ($q['pages'] as $p) {
+                               $m = $p['title'];
+                               if (isset($p['links'])) {
+                                       $m .= '/[' . implode(',', array_map(
+                                               function ($v) {
+                                                       return $v['title'];
+                                               },
+                                               $p['links'])) . ']';
+                               }
+                               if (isset($p['categories'])) {
+                                       $m .= '/(' . implode(',', array_map(
+                                               function ($v) {
+                                                       return str_replace('Category:', '', $v['title']);
+                                               },
+                                               $p['categories'])) . ')';
+                               }
+                               $print[] = $m;
+                       }
+               }
+               if (isset($q['allcategories'])) {
+                       $print[] = '*Cats/(' . implode(',', array_map(
+                               function ($v) { return $v['*']; },
+                               $q['allcategories'])) . ')';
+               }
+               self::GetItems( $q, 'allpages', 'Pages', $print );
+               self::GetItems( $q, 'alllinks', 'Links', $print );
+               self::GetItems( $q, 'alltransclusions', 'Trnscl', $print );
+               print(' ' . implode('  ', $print) . "\n");
+       }
+
+       private static function GetItems( $q, $moduleName, $name, &$print ) {
+               if (isset($q[$moduleName])) {
+                       $print[] = "*$name/[" . implode(',',
+                               array_map( function ($v) { return $v['title']; },
+                                               $q[$moduleName])) . ']';
+               }
+       }
+
+       /**
+        * Recursively merge the new result returned from the query to the previous results.
+        * @param mixed $results
+        * @param mixed $newResult
+        * @param bool $numericIds If true, treat keys as ids to be merged instead of appending
+        */
+       protected function mergeResult( &$results, $newResult, $numericIds = false ) {
+               $this->assertEquals( is_array( $results ), is_array( $newResult ), 'Type of result and data do not match' );
+               if ( !is_array( $results ) ) {
+                       $this->assertEquals( $results, $newResult, 'Repeated result must be the same as before' );
+               } else {
+                       $sort = null;
+                       foreach( $newResult as $key => $value ) {
+                               if ( !$numericIds && $sort === null ) {
+                                       if ( !is_array( $value ) ) {
+                                               $sort = false;
+                                       } elseif ( array_key_exists( 'title', $value ) ) {
+                                               $sort = function( $a, $b ) {
+                                                       return strcmp( $a['title'], $b['title'] );
+                                               };
+                                       } else {
+                                               $sort = false;
+                                       }
+                               }
+                               $keyExists = array_key_exists( $key, $results );
+                               if ( is_numeric( $key ) ) {
+                                       if ( $numericIds ) {
+                                               if ( !$keyExists ) {
+                                                       $results[$key] = $value;
+                                               } else {
+                                                       $this->mergeResult( $results[$key], $value );
+                                               }
+                                       } else {
+                                               $results[] = $value;
+                                       }
+                               } elseif ( !$keyExists ) {
+                                       $results[$key] = $value;
+                               } else {
+                                       $this->mergeResult( $results[$key], $value, $key === 'pages' );
+                               }
+                       }
+                       if ( $numericIds ) {
+                               ksort( $results, SORT_NUMERIC );
+                       } elseif ( $sort !== null && $sort !== false ) {
+                               uasort( $results, $sort );
+                       }
+               }
+       }
+}
diff --git a/tests/phpunit/includes/api/query/ApiQueryTestBase.php b/tests/phpunit/includes/api/query/ApiQueryTestBase.php
new file mode 100644 (file)
index 0000000..7b9f8ed
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+/**
+ *
+ *
+ * Created on Feb 10, 2013
+ *
+ * Copyright © 2013 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+
+/** This class has some common functionality for testing query module
+ */
+abstract class ApiQueryTestBase extends ApiTestCase {
+
+       const PARAM_ASSERT = <<<STR
+Each parameter must be an array of two elements,
+first - an array of params to the API call,
+and the second array - expected results as returned by the API
+STR;
+
+       /**
+        * Merges all requests parameter + expected values into one
+        * @param ... list of arrays, each of which contains exactly two
+        * @return array
+        */
+       protected function merge( /*...*/ ) {
+               $request = array();
+               $expected = array();
+               foreach ( func_get_args() as $v ) {
+                       list( $req, $exp ) = $this->validateRequestExpectedPair( $v );
+                       $request = array_merge_recursive( $request, $req );
+                       $this->mergeExpected( $expected, $exp );
+               }
+               return array( $request, $expected );
+       }
+
+       /**
+        * Check that the parameter is a valid two element array,
+        * with the first element being API request and the second - expected result
+        */
+       private function validateRequestExpectedPair( $v ) {
+               $this->assertType( 'array', $v, self::PARAM_ASSERT );
+               $this->assertEquals( 2, count($v), self::PARAM_ASSERT );
+               $this->assertArrayHasKey( 0, $v, self::PARAM_ASSERT );
+               $this->assertArrayHasKey( 1, $v, self::PARAM_ASSERT );
+               $this->assertType( 'array', $v[0], self::PARAM_ASSERT );
+               $this->assertType( 'array', $v[1], self::PARAM_ASSERT );
+               return $v;
+       }
+
+       /**
+        * Recursively merges the expected values in the $item into the $all
+        */
+       private function mergeExpected( &$all, $item ) {
+               foreach ( $item as $k => $v ) {
+                       if ( array_key_exists( $k, $all ) ) {
+                               if ( is_array ( $all[$k] ) ) {
+                                       $this->mergeExpected( $all[$k], $v );
+                               } else {
+                                       $this->assertEquals( $all[$k], $v );
+                               }
+                       } else {
+                               $all[$k] = $v;
+                       }
+               }
+       }
+
+       /**
+        * Checks that the request's result matches the expected results.
+        * @param $values array is a two element array( request, expected_results )
+        * @throws Exception
+        */
+       protected function check( $values ) {
+               list( $req, $exp ) = $this->validateRequestExpectedPair( $values );
+               if ( !array_key_exists( 'action', $req ) ) {
+                       $req['action'] = 'query';
+               }
+               foreach ( $req as &$val ) {
+                       if ( is_array( $val ) ) {
+                               $val = implode( '|', array_unique( $val ) );
+                       }
+               }
+               $result = $this->doApiRequest( $req );
+               $this->assertResult( array( 'query' => $exp ), $result[0], $req );
+       }
+
+       protected function assertResult( $exp, $result, $message = '' ) {
+               try {
+                       $this->assertResultRecursive( $exp, $result );
+               } catch ( Exception $e ) {
+                       if ( is_array( $message ) ) {
+                               $message = http_build_query( $message );
+                       }
+                       print( "\nRequest: $message\n" );
+                       print( "\nExpected:\n" );
+                       print_r( $exp );
+                       print( "\nResult:\n" );
+                       print_r( $result );
+                       throw $e; // rethrow it
+               }
+       }
+
+       /**
+        * Recursively compare arrays, ignoring mismatches in numeric key and pageids.
+        * @param $expected array expected values
+        * @param $result array returned values
+        */
+       private function assertResultRecursive( $expected, $result ) {
+               reset( $expected );
+               reset( $result );
+               while ( true ) {
+                       $e = each( $expected );
+                       $r = each( $result );
+                       // If either of the arrays is shorter, abort. If both are done, success.
+                       $this->assertEquals( (bool)$e, (bool)$r );
+                       if ( !$e ) {
+                               break; // done
+                       }
+                       // continue only if keys are identical or both keys are numeric
+                       $this->assertTrue( $e['key'] === $r['key'] || ( is_numeric( $e['key'] ) && is_numeric( $r['key'] ) ) );
+                       // don't compare pageids
+                       if ( $e['key'] !== 'pageid' ) {
+                               // If values are arrays, compare recursively, otherwise compare with ===
+                               if ( is_array( $e['value'] ) && is_array( $r['value'] ) ) {
+                                       $this->assertResultRecursive( $e['value'], $r['value'] );
+                               } else {
+                                       $this->assertEquals( $e['value'], $r['value'] );
+                               }
+                       }
+               }
+       }
+}
index 26747b9..a4bd512 100644 (file)
@@ -151,14 +151,21 @@ class CSSJanusTest extends MediaWikiTestCase {
                                '#settings td p strong'
                        ),
                        array(
-                               # Not sure how 4+ values should behave,
-                               # testing to make sure changes are detected
-                               '.foo { x-unknown: 1 2 3 4 5; }',
-                               '.foo { x-unknown: 1 4 3 2 5; }',
+                               // Test the colors regex
+                               '.foo { border-color: red green blue white }',
+                               '.foo { border-color: red white blue green }',
                        ),
                        array(
-                               '.foo { x-unknown: 1 2 3 4 5 6; }',
-                               '.foo { x-unknown: 1 4 3 2 5 6; }',
+                               // Test the colors regex harder
+                               '.foo { border-color: red #f00 rgb(255, 0, 0%) rgba(100%, 0, 0, 0) }',
+                               '.foo { border-color: red rgba(100%, 0, 0, 0) rgb(255, 0, 0%) #f00 }',
+                       ),
+                       array(
+                               // Do not bork 4+ values
+                               '.foo { x-unknown: 1 2 3 4 5; }'
+                       ),
+                       array(
+                               '.foo { x-unknown: 1 2 3 4 5 6; }'
                        ),
 
                        // Shorthand / Three notation
@@ -179,6 +186,28 @@ class CSSJanusTest extends MediaWikiTestCase {
                                '.foo { padding: 1px; }'
                        ),
 
+                       // text-shadow and box-shadow
+                       array(
+                               '.foo { box-shadow: -6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                               '.foo { box-shadow: 6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                       ),
+                       array(
+                               '.foo { box-shadow: inset -6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                               '.foo { box-shadow: inset 6px 3px 8px 5px rgba(0, 0, 0, 0.25); }',
+                       ),
+                       array(
+                               '.foo { text-shadow: orange 2px 0; }',
+                               '.foo { text-shadow: orange -2px 0; }',
+                       ),
+                       array(
+                               '.foo { text-shadow: 2px 0 orange; }',
+                               '.foo { text-shadow: -2px 0 orange; }',
+                       ),
+                       array(
+                               // Don't mangle zeroes
+                               '.foo { text-shadow: orange 0 2px; }'
+                       ),
+
                        // Direction
                        // Note: This differs from the Python implementation,
                        // see also CSSJanus::fixDirection for more info.
index f8d0c37..bf6931a 100644 (file)
@@ -16,6 +16,7 @@ class NewParserTest extends MediaWikiTestCase {
 
        public $keepUploads = false;
        public $runDisabled = false;
+       public $runParsoid = false;
        public $regex = '';
        public $showProgress = true;
        public $savedInitialGlobals = array();
index efb6de6..bd0c759 100644 (file)
@@ -10,13 +10,13 @@ class LanguageLvTest extends LanguageClassesTestCase {
 
        /** @dataProvider providerPlural */
        function testPlural( $result, $value ) {
-               $forms = array( 'one', 'other' );
+               $forms = array( 'zero', 'one', 'other' );
                $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
        }
 
        function providerPlural() {
                return array(
-                       array( 'other', 0 ), #this must be zero form as per CLDR
+                       array( 'zero', 0 ),
                        array( 'one', 1 ),
                        array( 'other', 11 ),
                        array( 'one', 21 ),
index cce5dde..2ec0744 100755 (executable)
@@ -47,6 +47,12 @@ class PHPUnitMaintClass extends Maintenance {
                $wgLocaltimezone = 'UTC';
 
                $wgLocalisationCacheConf['storeClass'] = 'LCStore_Null';
+
+               // Bug 44192 Do not attempt to send a real e-mail
+               Hooks::clear( 'AlternateUserMailer' );
+               Hooks::register( 'AlternateUserMailer',
+                       function() { return false; }
+               );
        }
 
        public function execute() {
index 45c3c5a..b599b02 100644 (file)
                assert.strictEqual( window.mw, window.mediaWiki, 'mw alias to mediaWiki' );
        } );
 
-       QUnit.test( 'mw.Map', 17, function ( assert ) {
+       QUnit.test( 'mw.Map', 27, function ( assert ) {
                var arry, conf, funky, globalConf, nummy, someValues;
 
-               assert.ok( mw.Map, 'mw.Map defined' );
-
                conf = new mw.Map();
                // Dummy variables
                funky = function () {};
                arry = [];
                nummy = 7;
 
-               // Tests for input validation
-               assert.strictEqual( conf.get( 'inexistantKey' ), null, 'Map.get returns null if selection was a string and the key was not found' );
-               assert.strictEqual( conf.set( 'myKey', 'myValue' ), true, 'Map.set returns boolean true if a value was set for a valid key string' );
+               // Single get and set
+
+               assert.strictEqual( conf.set( 'foo', 'Bar' ), true, 'Map.set returns boolean true if a value was set for a valid key string' );
+               assert.equal( conf.get( 'foo' ), 'Bar', 'Map.get returns a single value value correctly' );
+
+               assert.strictEqual( conf.get( 'example' ), null, 'Map.get returns null if selection was a string and the key was not found' );
+               assert.strictEqual( conf.get( 'example', arry ), arry, 'Map.get returns fallback by reference if the key was not found' );
+               assert.strictEqual( conf.get( 'example', undefined ), undefined, 'Map.get supports `undefined` as fallback instead of `null`' );
+
+               assert.strictEqual( conf.get( 'constructor' ), null, 'Map.get does not look at Object.prototype of internal storage (constructor)' );
+               assert.strictEqual( conf.get( 'hasOwnProperty' ), null, 'Map.get does not look at Object.prototype of internal storage (hasOwnProperty)' );
+
+               conf.set( 'hasOwnProperty', function () { return true; } );
+               assert.strictEqual( conf.get( 'example', 'missing' ), 'missing', 'Map.get uses neutral hasOwnProperty method (positive)' );
+
+               conf.set( 'example', 'Foo' );
+               conf.set( 'hasOwnProperty', function () { return false; } );
+               assert.strictEqual( conf.get( 'example' ), 'Foo', 'Map.get uses neutral hasOwnProperty method (negative)' );
+
+               assert.strictEqual( conf.set( 'constructor', 42 ), true, 'Map.set for key "constructor"' );
+               assert.strictEqual( conf.get( 'constructor' ), 42, 'Map.get for key "constructor"' );
+
+               assert.strictEqual( conf.set( 'ImUndefined', undefined ), true, 'Map.set allows setting value to `undefined`' );
+               assert.equal( conf.get( 'ImUndefined', 'fallback' ), undefined , 'Map.get supports retreiving value of `undefined`' );
+
                assert.strictEqual( conf.set( funky, 'Funky' ), false, 'Map.set returns boolean false if key was invalid (Function)' );
                assert.strictEqual( conf.set( arry, 'Arry' ), false, 'Map.set returns boolean false if key was invalid (Array)' );
                assert.strictEqual( conf.set( nummy, 'Nummy' ), false, 'Map.set returns boolean false if key was invalid (Number)' );
-               assert.equal( conf.get( 'myKey' ), 'myValue', 'Map.get returns a single value value correctly' );
-               assert.strictEqual( conf.get( nummy ), null, 'Map.get ruturns null if selection was invalid (Number)' );
+
                assert.strictEqual( conf.get( funky ), null, 'Map.get ruturns null if selection was invalid (Function)' );
+               assert.strictEqual( conf.get( nummy ), null, 'Map.get ruturns null if selection was invalid (Number)' );
+
+               conf.set( String( nummy ), 'I used to be a number' );
+
+               assert.strictEqual( conf.exists( 'doesNotExist' ), false, 'Map.exists where property does not exist' );
+               assert.strictEqual( conf.exists( 'ImUndefined' ), true, 'Map.exists where value is `undefined`' );
+               assert.strictEqual( conf.exists( nummy ), false, 'Map.exists where key is invalid but looks like an existing key' );
 
                // Multiple values at once
                someValues = {
                        'notExist': null
                }, 'Map.get return includes keys that were not found as null values' );
 
-               assert.strictEqual( conf.exists( 'foo' ), true, 'Map.exists returns boolean true if a key exists' );
-               assert.strictEqual( conf.exists( 'notExist' ), false, 'Map.exists returns boolean false if a key does not exists' );
 
                // Interacting with globals and accessing the values object
                assert.strictEqual( conf.get(), conf.values, 'Map.get returns the entire values object by reference (if called without arguments)' );
 
                conf.set( 'globalMapChecker', 'Hi' );
 
-               assert.ok( false === 'globalMapChecker' in window, 'new mw.Map did not store its values in the global window object by default' );
+               assert.ok( 'globalMapChecker' in window === false, 'new mw.Map did not store its values in the global window object by default' );
 
                globalConf = new mw.Map( true );
                globalConf.set( 'anotherGlobalMapChecker', 'Hello' );
index 1e51d80..02fcf24 100644 (file)
@@ -450,6 +450,7 @@ class TestFileIterator implements Iterator {
                                        }
 
                                        if ( ( ( preg_match( '/\\bdisabled\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runDisabled )
+                                               || ( preg_match( '/\\bparsoid\\b/i', $this->sectionData['options'] ) && !$this->parserTest->runParsoid )
                                                || !preg_match( "/" . $this->parserTest->regex . "/i", $this->sectionData['test'] ) )
                                        ) {
                                                # disabled test