Merge "Add LinkBatch to Special:UnwatchedPages"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 29 Oct 2016 20:28:09 +0000 (20:28 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 29 Oct 2016 20:28:09 +0000 (20:28 +0000)
21 files changed:
includes/api/i18n/pl.json
includes/api/i18n/pt.json
includes/api/i18n/zh-hans.json
includes/installer/i18n/zh-hans.json
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/rdbms/database/DatabaseSqlite.php
includes/libs/rdbms/database/IDatabase.php
languages/i18n/bs.json
languages/i18n/da.json
languages/i18n/diq.json
languages/i18n/gl.json
languages/i18n/id.json
languages/i18n/mhr.json
languages/i18n/nan.json
languages/i18n/ne.json
languages/i18n/pt.json
languages/i18n/ru.json
languages/i18n/udm.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
tests/phpunit/includes/db/LBFactoryTest.php

index 7fae7ae..7de4548 100644 (file)
        "apihelp-options-description": "Zmienia preferencje bieżącego użytkownika.\n\nMożna ustawiać tylko opcje zarejestrowane w rdzeniu, w zainstalowanych rozszerzeniach lub z kluczami o prefiksie <code>userjs-</code> (do wykorzystywania przez skrypty użytkowników).",
        "apihelp-options-param-reset": "Resetuj preferencje do domyślnych.",
        "apihelp-options-param-resetkinds": "Lista typów opcji do zresetowania, jeżeli ustawiono opcję <var>$1reset</var>.",
-       "apihelp-options-param-change": "Lista zmian, w formacie nazwa=wartość (np. skin=vector). Wartość nie może zawierać znaku pionowej kreski. Jeżeli nie zostanie podana wartość (a nawet znak równości), np., optionname|otheroption|..., to opcja zostanie zresetowana do jej wartości domyślnej.",
+       "apihelp-options-param-change": "Lista zmian, w formacie nazwa=wartość (np. skin=vector).  Jeżeli nie zostanie podana wartość (nawet znak równości), np., optionname|otheroption|..., to opcja zostanie zresetowana do jej wartości domyślnej. Jeżeli jakakolwiek podawana wartość zawiera znak pionowej kreski (<kbd>|</kbd>), użyj [[Special:ApiHelp/main#main/datatypes|alternatywnego separatora wielu wartości]] aby operacja się powiodła.",
        "apihelp-options-param-optionname": "Nazwa opcji, która powinna być ustawiona na wartość <var>$1optionvalue</var>.",
        "apihelp-options-param-optionvalue": "Wartość opcji, określona w <var>$1optionname</var>.",
        "apihelp-options-example-reset": "Resetuj wszystkie preferencje.",
index b01a042..9d26d2a 100644 (file)
@@ -40,6 +40,7 @@
        "apihelp-checktoken-param-token": "Chave a testar.",
        "apihelp-checktoken-param-maxtokenage": "Validade máxima da chave, em segundos.",
        "apihelp-checktoken-example-simple": "Testar a validade de uma chave <kbd>csrf</kbd>.",
+       "apihelp-clearhasmsg-description": "Limpa a indicação <code>hasmsg</code> do utilizador atual.",
        "apihelp-compare-param-fromtitle": "Primeiro título a comparar.",
        "apihelp-compare-param-fromid": "Primeiro identificador de página a comparar.",
        "apihelp-compare-param-fromrev": "Primeira revisão a comparar.",
        "apihelp-query+filearchive-example-simple": "Mostrar lista de todos os ficheiros eliminados",
        "apihelp-query+filerepoinfo-param-prop": "Propriedades do repositório a obter (em algumas wikis poderão haver mais disponíveis):\n;apiurl:URL para a API do repositório - útil para obter informação de imagens do servidor.\n;name:A chave para o repositório - usada, por exemplo, em <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e nos valores de retorno de [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:O nome legível da wiki repositório.\n;rooturl:URL de raiz para endereços de imagens.\n;local:Se o repositório é o local ou não.",
        "apihelp-query+fileusage-param-prop": "Que propriedades obter:",
+       "apihelp-query+fileusage-paramvalue-prop-redirect": "Indicar se a página é um redirecionamento.",
        "apihelp-query+imageinfo-paramvalue-prop-url": "Devolve URL para o ficheiro e página de descrição.",
        "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Adiciona o tipo MIME da miniatura (requer URL e o parâmetro $1urlwidth).",
        "apihelp-query+imageinfo-param-urlwidth": "Se $2prop=url está definido, será devolvido um URL para uma imagem redimensionada com este comprimento.\nPor razões de desempenho, se esta opção for usada não serão devolvidas mais de $1 imagens redimensionadas.",
index f498189..464cc2f 100644 (file)
        "api-help-param-integer-minmax": "{{PLURAL:$1|值}}必须介于$2和$3之间。",
        "api-help-param-upload": "必须被公布为使用multipart/form-data的一次文件上传。",
        "api-help-param-multi-separate": "通过<kbd>|</kbd>或[[Special:ApiHelp/main#main/datatypes|替代物]]隔开各值。",
-       "api-help-param-multi-max": "值的最高数字是{{PLURAL:$1|$1}}(对于机器人则是{{PLURAL:$2|$2}})。",
+       "api-help-param-multi-max": "值的最大数量是{{PLURAL:$1|$1}}(对于机器人则是{{PLURAL:$2|$2}})。",
        "api-help-param-default": "默认:$1",
        "api-help-param-default-empty": "默认:<span class=\"apihelp-empty\">(空)</span>",
        "api-help-param-token": "从[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]取回的“$1”令牌",
index 5d99079..2b7e705 100644 (file)
        "config-header-oracle": "Oracle设置",
        "config-header-mssql": "Microsoft SQL Server设置",
        "config-invalid-db-type": "无效的数据库类型",
-       "config-missing-db-name": "您必须为“{{int:config-db-name}}”输入内容。",
-       "config-missing-db-host": "您必须为“{{int:config-db-host}}”输入内容。",
-       "config-missing-db-server-oracle": "您必须为“{{int:config-db-host-oracle}}”输入内容。",
+       "config-missing-db-name": "您必须为“{{int:config-db-name}}”输入一个值。",
+       "config-missing-db-host": "您必须为“{{int:config-db-host}}”输入一个值。",
+       "config-missing-db-server-oracle": "您必须为“{{int:config-db-host-oracle}}”输入一个值。",
        "config-invalid-db-server-oracle": "无效的数据库TNS“$1”。请使用“TNS 名称”或者一个“轻松连接”字符串([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle 命名方法])",
        "config-invalid-db-name": "无效的数据库名称“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。",
        "config-invalid-db-prefix": "无效的数据库前缀“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。",
        "config-mysql-utf8": "UTF-8",
        "config-mysql-charset-help": "在<strong>二进制模式</strong>下,MediaWiki会将UTF-8编码的文本存于数据库的二进制字段中。相对于MySQL的UTF-8模式,这种方法效率更高,并允许您使用全范围的Unicode字符。\n\n在<strong>UTF-8模式</strong>下,MySQL将知道您数据使用的字符集,并能适当地提供和转换内容。但这样做您将无法在数据库中存储[https://zh.wikipedia.org/wiki/基本多文种平面 基本多文种平面]以外的字符。",
        "config-mssql-auth": "身份验证类型:",
-       "config-mssql-install-auth": "选择安装过程中链接数据库时将采用的身份验证方式。\n如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行服务器的用户的身份凭据。",
-       "config-mssql-web-auth": "选择Web服务器在通常wiki操作期间用来连接数据库服务器的身份验证方式。\n如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行Web服务器的用户的凭据。",
+       "config-mssql-install-auth": "选择安装过程中链接数据库时将采用的身份验证方式。如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行服务器的用户的身份凭据。",
+       "config-mssql-web-auth": "选择Web服务器在通常wiki操作期间用来连接数据库服务器的身份验证方式。如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行Web服务器的用户的凭据。",
        "config-mssql-sqlauth": "SQL Server 身份验证",
        "config-mssql-windowsauth": "Windows 身份验证",
        "config-site-name": "wiki的名称:",
        "config-license-gfdl": "GNU自由文档许可证1.3或更高版本",
        "config-license-pd": "公有领域",
        "config-license-cc-choose": "选择自定义的知识共享许可证",
-       "config-license-help": "许多公共wiki将所有用户贡献置于[http://freedomdefined.org/Definition 自由许可证]之下。这有助于构建社区的主人翁意识,并鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。\n\n如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,您应当选择<strong>{{int:config-license-cc-by-sa}}</strong>\n\nGNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
+       "config-license-help": "许多公共wiki将所有用户贡献置于[http://freedomdefined.org/Definition 自由许可证]之下。这有助于构建社区的主人翁意识,并鼓励长期贡献。对于非公共wiki或公司wiki,这并非必要条件。\n\n如果您希望使用来自维基百科的内容,并希望维基百科能接受复制自您的wiki的内容,您应当选择<strong>{{int:config-license-cc-by-sa}}</strong>\n\nGNU自由文档许可证是维基百科曾经使用过的许可证,并迄今有效。然而,该许可证难以理解,并会增加重用内容的难度。",
        "config-email-settings": "电子邮件设置",
        "config-enable-email": "启用出站电子邮件",
        "config-enable-email-help": "如果您希望使用电子邮件功能,请正确配置[http://www.php.net/manual/en/mail.configuration.php PHP的邮件设定]。如果您不需要任何电子邮件功能,请在此处禁用它。",
index 7e40495..c0d92aa 100644 (file)
@@ -48,19 +48,19 @@ class DatabasePostgres extends Database {
                parent::__construct( $params );
        }
 
-       function getType() {
+       public function getType() {
                return 'postgres';
        }
 
-       function implicitGroupby() {
+       public function implicitGroupby() {
                return false;
        }
 
-       function implicitOrderby() {
+       public function implicitOrderby() {
                return false;
        }
 
-       function hasConstraint( $name ) {
+       public function hasConstraint( $name ) {
                $conn = $this->getBindingHandle();
 
                $sql = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
@@ -72,16 +72,7 @@ class DatabasePostgres extends Database {
                return $this->numRows( $res );
        }
 
-       /**
-        * Usually aborts on failure
-        * @param string $server
-        * @param string $user
-        * @param string $password
-        * @param string $dbName
-        * @throws DBConnectionError|Exception
-        * @return resource|bool|null
-        */
-       function open( $server, $user, $password, $dbName ) {
+       public function open( $server, $user, $password, $dbName ) {
                # Test for Postgres support, to avoid suppressed fatal error
                if ( !function_exists( 'pg_connect' ) ) {
                        throw new DBConnectionError(
@@ -153,7 +144,7 @@ class DatabasePostgres extends Database {
 
                $this->determineCoreSchema( $this->mSchema );
                // The schema to be used is now in the search path; no need for explicit qualification
-               $this->mSchema = null;
+               $this->mSchema = '';
 
                return $this->mConn;
        }
@@ -164,7 +155,7 @@ class DatabasePostgres extends Database {
         * @param string $db
         * @return bool
         */
-       function selectDB( $db ) {
+       public function selectDB( $db ) {
                if ( $this->mDBname !== $db ) {
                        return (bool)$this->open( $this->mServer, $this->mUser, $this->mPassword, $db );
                } else {
@@ -172,7 +163,11 @@ class DatabasePostgres extends Database {
                }
        }
 
-       function makeConnectionString( $vars ) {
+       /**
+        * @param string[] $vars
+        * @return string
+        */
+       private function makeConnectionString( $vars ) {
                $s = '';
                foreach ( $vars as $name => $value ) {
                        $s .= "$name='" . str_replace( "'", "\\'", $value ) . "' ";
@@ -181,11 +176,6 @@ class DatabasePostgres extends Database {
                return $s;
        }
 
-       /**
-        * Closes a database connection, if it is open
-        * Returns success, true if already closed
-        * @return bool
-        */
        protected function closeConnection() {
                return $this->mConn ? pg_close( $this->mConn ) : true;
        }
@@ -231,7 +221,7 @@ class DatabasePostgres extends Database {
                }
        }
 
-       function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
+       public function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) {
                if ( $tempIgnore ) {
                        /* Check for constraint violation */
                        if ( $errno === '23505' ) {
@@ -249,15 +239,7 @@ class DatabasePostgres extends Database {
                parent::reportQueryError( $error, $errno, $sql, $fname, false );
        }
 
-       function queryIgnore( $sql, $fname = __METHOD__ ) {
-               return $this->query( $sql, $fname, true );
-       }
-
-       /**
-        * @param stdClass|ResultWrapper $res
-        * @throws DBUnexpectedError
-        */
-       function freeResult( $res ) {
+       public function freeResult( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -269,12 +251,7 @@ class DatabasePostgres extends Database {
                }
        }
 
-       /**
-        * @param ResultWrapper|stdClass $res
-        * @return stdClass
-        * @throws DBUnexpectedError
-        */
-       function fetchObject( $res ) {
+       public function fetchObject( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -296,7 +273,7 @@ class DatabasePostgres extends Database {
                return $row;
        }
 
-       function fetchRow( $res ) {
+       public function fetchRow( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -315,7 +292,7 @@ class DatabasePostgres extends Database {
                return $row;
        }
 
-       function numRows( $res ) {
+       public function numRows( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -334,7 +311,7 @@ class DatabasePostgres extends Database {
                return $n;
        }
 
-       function numFields( $res ) {
+       public function numFields( $res ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -342,7 +319,7 @@ class DatabasePostgres extends Database {
                return pg_num_fields( $res );
        }
 
-       function fieldName( $res, $n ) {
+       public function fieldName( $res, $n ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -356,16 +333,11 @@ class DatabasePostgres extends Database {
         *
         * @return int|null
         */
-       function insertId() {
+       public function insertId() {
                return $this->mInsertId;
        }
 
-       /**
-        * @param mixed $res
-        * @param int $row
-        * @return bool
-        */
-       function dataSeek( $res, $row ) {
+       public function dataSeek( $res, $row ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -373,7 +345,7 @@ class DatabasePostgres extends Database {
                return pg_result_seek( $res, $row );
        }
 
-       function lastError() {
+       public function lastError() {
                if ( $this->mConn ) {
                        if ( $this->mLastResult ) {
                                return pg_result_error( $this->mLastResult );
@@ -385,7 +357,7 @@ class DatabasePostgres extends Database {
                return $this->getLastPHPError() ?: 'No database connection';
        }
 
-       function lastErrno() {
+       public function lastErrno() {
                if ( $this->mLastResult ) {
                        return pg_result_error_field( $this->mLastResult, PGSQL_DIAG_SQLSTATE );
                } else {
@@ -393,7 +365,7 @@ class DatabasePostgres extends Database {
                }
        }
 
-       function affectedRows() {
+       public function affectedRows() {
                if ( !is_null( $this->mAffectedRows ) ) {
                        // Forced result for simulated queries
                        return $this->mAffectedRows;
@@ -419,7 +391,7 @@ class DatabasePostgres extends Database {
         * @param array $options
         * @return int
         */
-       function estimateRowCount( $table, $vars = '*', $conds = '',
+       public function estimateRowCount( $table, $vars = '*', $conds = '',
                $fname = __METHOD__, $options = []
        ) {
                $options['EXPLAIN'] = true;
@@ -436,16 +408,7 @@ class DatabasePostgres extends Database {
                return $rows;
        }
 
-       /**
-        * Returns information about an index
-        * If errors are explicitly ignored, returns NULL on failure
-        *
-        * @param string $table
-        * @param string $index
-        * @param string $fname
-        * @return bool|null
-        */
-       function indexInfo( $table, $index, $fname = __METHOD__ ) {
+       public function indexInfo( $table, $index, $fname = __METHOD__ ) {
                $sql = "SELECT indexname FROM pg_indexes WHERE tablename='$table'";
                $res = $this->query( $sql, $fname );
                if ( !$res ) {
@@ -460,15 +423,7 @@ class DatabasePostgres extends Database {
                return false;
        }
 
-       /**
-        * Returns is of attributes used in index
-        *
-        * @since 1.19
-        * @param string $index
-        * @param bool|string $schema
-        * @return array
-        */
-       function indexAttributes( $index, $schema = false ) {
+       public function indexAttributes( $index, $schema = false ) {
                if ( $schema === false ) {
                        $schema = $this->getCoreSchema();
                }
@@ -525,7 +480,7 @@ __INDEXATTR__;
                return $a;
        }
 
-       function indexUnique( $table, $index, $fname = __METHOD__ ) {
+       public function indexUnique( $table, $index, $fname = __METHOD__ ) {
                $sql = "SELECT indexname FROM pg_indexes WHERE tablename='{$table}'" .
                        " AND indexdef LIKE 'CREATE UNIQUE%(" .
                        $this->strencode( $this->indexName( $index ) ) .
@@ -538,7 +493,7 @@ __INDEXATTR__;
                return $res->numRows() > 0;
        }
 
-       function selectSQLText(
+       public function selectSQLText(
                $table, $vars, $conds = '', $fname = __METHOD__, $options = [], $join_conds = []
        ) {
                // Change the FOR UPDATE option as necessary based on the join conditions. Then pass
@@ -580,7 +535,7 @@ __INDEXATTR__;
         * @param array|string $options String or array. Valid options: IGNORE
         * @return bool Success of insert operation. IGNORE always returns true.
         */
-       function insert( $table, $args, $fname = __METHOD__, $options = [] ) {
+       public function insert( $table, $args, $fname = __METHOD__, $options = [] ) {
                if ( !count( $args ) ) {
                        return true;
                }
@@ -706,8 +661,10 @@ __INDEXATTR__;
         * @param array $selectOptions
         * @return bool
         */
-       function nativeInsertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
-               $insertOptions = [], $selectOptions = [] ) {
+       public function nativeInsertSelect(
+               $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
+               $insertOptions = [], $selectOptions = []
+       ) {
                $destTable = $this->tableName( $destTable );
 
                if ( !is_array( $insertOptions ) ) {
@@ -769,7 +726,7 @@ __INDEXATTR__;
                return $res;
        }
 
-       function tableName( $name, $format = 'quoted' ) {
+       public function tableName( $name, $format = 'quoted' ) {
                // Replace reserved words with better ones
                $name = $this->remappedTableName( $name );
 
@@ -800,13 +757,7 @@ __INDEXATTR__;
                return parent::tableName( $name, $format );
        }
 
-       /**
-        * Return the next in a sequence, save the value for retrieval via insertId()
-        *
-        * @param string $seqName
-        * @return int|null
-        */
-       function nextSequenceValue( $seqName ) {
+       public function nextSequenceValue( $seqName ) {
                $safeseq = str_replace( "'", "''", $seqName );
                $res = $this->query( "SELECT nextval('$safeseq')" );
                $row = $this->fetchRow( $res );
@@ -821,7 +772,7 @@ __INDEXATTR__;
         * @param string $seqName
         * @return int
         */
-       function currentSequenceValue( $seqName ) {
+       public function currentSequenceValue( $seqName ) {
                $safeseq = str_replace( "'", "''", $seqName );
                $res = $this->query( "SELECT currval('$safeseq')" );
                $row = $this->fetchRow( $res );
@@ -830,8 +781,7 @@ __INDEXATTR__;
                return $currval;
        }
 
-       # Returns the size of a text field, or -1 for "unlimited"
-       function textFieldSize( $table, $field ) {
+       public function textFieldSize( $table, $field ) {
                $table = $this->tableName( $table );
                $sql = "SELECT t.typname as ftype,a.atttypmod as size
                        FROM pg_class c, pg_attribute a, pg_type t
@@ -848,15 +798,15 @@ __INDEXATTR__;
                return $size;
        }
 
-       function limitResult( $sql, $limit, $offset = false ) {
+       public function limitResult( $sql, $limit, $offset = false ) {
                return "$sql LIMIT $limit " . ( is_numeric( $offset ) ? " OFFSET {$offset} " : '' );
        }
 
-       function wasDeadlock() {
+       public function wasDeadlock() {
                return $this->lastErrno() == '40P01';
        }
 
-       function duplicateTableStructure(
+       public function duplicateTableStructure(
                $oldName, $newName, $temporary = false, $fname = __METHOD__
        ) {
                $newName = $this->addIdentifierQuotes( $newName );
@@ -866,7 +816,7 @@ __INDEXATTR__;
                        "(LIKE $oldName INCLUDING DEFAULTS)", $fname );
        }
 
-       function listTables( $prefix = null, $fname = __METHOD__ ) {
+       public function listTables( $prefix = null, $fname = __METHOD__ ) {
                $eschema = $this->addQuotes( $this->getCoreSchema() );
                $result = $this->query(
                        "SELECT tablename FROM pg_tables WHERE schemaname = $eschema", $fname );
@@ -883,7 +833,7 @@ __INDEXATTR__;
                return $endArray;
        }
 
-       function timestamp( $ts = 0 ) {
+       public function timestamp( $ts = 0 ) {
                $ct = new ConvertibleTimestamp( $ts );
 
                return $ct->getTimestamp( TS_POSTGRES );
@@ -907,7 +857,7 @@ __INDEXATTR__;
         * @param int $offset
         * @return string
         */
-       function pg_array_parse( $text, &$output, $limit = false, $offset = 1 ) {
+       private function pg_array_parse( $text, &$output, $limit = false, $offset = 1 ) {
                if ( false === $limit ) {
                        $limit = strlen( $text ) - 1;
                        $output = [];
@@ -934,19 +884,10 @@ __INDEXATTR__;
                return $output;
        }
 
-       /**
-        * Return aggregated value function call
-        * @param array $valuedata
-        * @param string $valuename
-        * @return array
-        */
        public function aggregateValue( $valuedata, $valuename = 'value' ) {
                return $valuedata;
        }
 
-       /**
-        * @return string Wikitext of a link to the server software's web site
-        */
        public function getSoftwareLink() {
                return '[{{int:version-db-postgres-url}} PostgreSQL]';
        }
@@ -958,7 +899,7 @@ __INDEXATTR__;
         * @since 1.19
         * @return string Default schema for the current session
         */
-       function getCurrentSchema() {
+       public function getCurrentSchema() {
                $res = $this->query( "SELECT current_schema()", __METHOD__ );
                $row = $this->fetchRow( $res );
 
@@ -975,7 +916,7 @@ __INDEXATTR__;
         * @since 1.19
         * @return array List of actual schemas for the current sesson
         */
-       function getSchemas() {
+       public function getSchemas() {
                $res = $this->query( "SELECT current_schemas(false)", __METHOD__ );
                $row = $this->fetchRow( $res );
                $schemas = [];
@@ -994,7 +935,7 @@ __INDEXATTR__;
         * @since 1.19
         * @return array How to search for table names schemas for the current user
         */
-       function getSearchPath() {
+       public function getSearchPath() {
                $res = $this->query( "SHOW search_path", __METHOD__ );
                $row = $this->fetchRow( $res );
 
@@ -1010,7 +951,7 @@ __INDEXATTR__;
         *
         * @param array $search_path List of schemas to be searched by default
         */
-       function setSearchPath( $search_path ) {
+       private function setSearchPath( $search_path ) {
                $this->query( "SET search_path = " . implode( ", ", $search_path ) );
        }
 
@@ -1028,7 +969,7 @@ __INDEXATTR__;
         *
         * @param string $desiredSchema
         */
-       function determineCoreSchema( $desiredSchema ) {
+       private function determineCoreSchema( $desiredSchema ) {
                $this->begin( __METHOD__, self::TRANSACTION_INTERNAL );
                if ( $this->schemaExists( $desiredSchema ) ) {
                        if ( in_array( $desiredSchema, $this->getSchemas() ) ) {
@@ -1065,14 +1006,11 @@ __INDEXATTR__;
         * @since 1.19
         * @return string Core schema name
         */
-       function getCoreSchema() {
+       public function getCoreSchema() {
                return $this->mCoreSchema;
        }
 
-       /**
-        * @return string Version information from the database
-        */
-       function getServerVersion() {
+       public function getServerVersion() {
                if ( !isset( $this->numericVersion ) ) {
                        $conn = $this->getBindingHandle();
                        $versionInfo = pg_version( $conn );
@@ -1099,7 +1037,7 @@ __INDEXATTR__;
         * @param bool|string $schema
         * @return bool
         */
-       function relationExists( $table, $types, $schema = false ) {
+       private function relationExists( $table, $types, $schema = false ) {
                if ( !is_array( $types ) ) {
                        $types = [ $types ];
                }
@@ -1118,22 +1056,21 @@ __INDEXATTR__;
        }
 
        /**
-        * For backward compatibility, this function checks both tables and
-        * views.
+        * For backward compatibility, this function checks both tables and views.
         * @param string $table
         * @param string $fname
         * @param bool|string $schema
         * @return bool
         */
-       function tableExists( $table, $fname = __METHOD__, $schema = false ) {
+       public function tableExists( $table, $fname = __METHOD__, $schema = false ) {
                return $this->relationExists( $table, [ 'r', 'v' ], $schema );
        }
 
-       function sequenceExists( $sequence, $schema = false ) {
+       public function sequenceExists( $sequence, $schema = false ) {
                return $this->relationExists( $sequence, 'S', $schema );
        }
 
-       function triggerExists( $table, $trigger ) {
+       public function triggerExists( $table, $trigger ) {
                $q = <<<SQL
        SELECT 1 FROM pg_class, pg_namespace, pg_trigger
                WHERE relnamespace=pg_namespace.oid AND relkind='r'
@@ -1156,7 +1093,7 @@ SQL;
                return $rows;
        }
 
-       function ruleExists( $table, $rule ) {
+       public function ruleExists( $table, $rule ) {
                $exists = $this->selectField( 'pg_rules', 'rulename',
                        [
                                'rulename' => $rule,
@@ -1168,7 +1105,7 @@ SQL;
                return $exists === $rule;
        }
 
-       function constraintExists( $table, $constraint ) {
+       public function constraintExists( $table, $constraint ) {
                $sql = sprintf( "SELECT 1 FROM information_schema.table_constraints " .
                        "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s",
                        $this->addQuotes( $this->getCoreSchema() ),
@@ -1189,7 +1126,7 @@ SQL;
         * @param string $schema
         * @return bool
         */
-       function schemaExists( $schema ) {
+       public function schemaExists( $schema ) {
                if ( !strlen( $schema ) ) {
                        return false; // short-circuit
                }
@@ -1205,7 +1142,7 @@ SQL;
         * @param string $roleName
         * @return bool
         */
-       function roleExists( $roleName ) {
+       public function roleExists( $roleName ) {
                $exists = $this->selectField( '"pg_catalog"."pg_roles"', 1,
                        [ 'rolname' => $roleName ], __METHOD__ );
 
@@ -1217,7 +1154,7 @@ SQL;
         * @var string $field
         * @return PostgresField|null
         */
-       function fieldInfo( $table, $field ) {
+       public function fieldInfo( $table, $field ) {
                return PostgresField::fromText( $this, $table, $field );
        }
 
@@ -1227,7 +1164,7 @@ SQL;
         * @param int $index Field number, starting from 0
         * @return string
         */
-       function fieldType( $res, $index ) {
+       public function fieldType( $res, $index ) {
                if ( $res instanceof ResultWrapper ) {
                        $res = $res->result;
                }
@@ -1235,15 +1172,11 @@ SQL;
                return pg_field_type( $res, $index );
        }
 
-       /**
-        * @param string $b
-        * @return Blob
-        */
-       function encodeBlob( $b ) {
+       public function encodeBlob( $b ) {
                return new PostgresBlob( pg_escape_bytea( $b ) );
        }
 
-       function decodeBlob( $b ) {
+       public function decodeBlob( $b ) {
                if ( $b instanceof PostgresBlob ) {
                        $b = $b->fetch();
                } elseif ( $b instanceof Blob ) {
@@ -1253,16 +1186,12 @@ SQL;
                return pg_unescape_bytea( $b );
        }
 
-       function strencode( $s ) {
+       public function strencode( $s ) {
                // Should not be called by us
                return pg_escape_string( $this->getBindingHandle(), $s );
        }
 
-       /**
-        * @param string|int|null|bool|Blob $s
-        * @return string|int
-        */
-       function addQuotes( $s ) {
+       public function addQuotes( $s ) {
                $conn = $this->getBindingHandle();
 
                if ( is_null( $s ) ) {
@@ -1303,14 +1232,7 @@ SQL;
                return $ins;
        }
 
-       /**
-        * Various select options
-        *
-        * @param array $options An associative array of options to be turned into
-        *   an SQL query, valid keys are listed in the function.
-        * @return array
-        */
-       function makeSelectOptions( $options ) {
+       public function makeSelectOptions( $options ) {
                $preLimitTail = $postLimitTail = '';
                $startOpts = $useIndex = $ignoreIndex = '';
 
@@ -1345,15 +1267,15 @@ SQL;
                return [ $startOpts, $useIndex, $preLimitTail, $postLimitTail, $ignoreIndex ];
        }
 
-       function getDBname() {
+       public function getDBname() {
                return $this->mDBname;
        }
 
-       function getServer() {
+       public function getServer() {
                return $this->mServer;
        }
 
-       function buildConcat( $stringList ) {
+       public function buildConcat( $stringList ) {
                return implode( ' || ', $stringList );
        }
 
@@ -1365,11 +1287,6 @@ SQL;
                return '(' . $this->selectSQLText( $table, $fld, $conds, null, [], $join_conds ) . ')';
        }
 
-       /**
-        * @param string $field Field or column to cast
-        * @return string
-        * @since 1.28
-        */
        public function buildStringCast( $field ) {
                return $field . '::text';
        }
@@ -1387,16 +1304,8 @@ SQL;
                return parent::streamStatementEnd( $sql, $newLine );
        }
 
-       /**
-        * Check to see if a named lock is available. This is non-blocking.
-        * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
-        *
-        * @param string $lockName Name of lock to poll
-        * @param string $method Name of method calling us
-        * @return bool
-        * @since 1.20
-        */
        public function lockIsFree( $lockName, $method ) {
+               // http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
                $key = $this->addQuotes( $this->bigintFromLockName( $lockName ) );
                $result = $this->query( "SELECT (CASE(pg_try_advisory_lock($key))
                        WHEN 'f' THEN 'f' ELSE pg_advisory_unlock($key) END) AS lockstatus", $method );
@@ -1405,14 +1314,8 @@ SQL;
                return ( $row->lockstatus === 't' );
        }
 
-       /**
-        * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
-        * @param string $lockName
-        * @param string $method
-        * @param int $timeout
-        * @return bool
-        */
        public function lock( $lockName, $method, $timeout = 5 ) {
+               // http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
                $key = $this->addQuotes( $this->bigintFromLockName( $lockName ) );
                $loop = new WaitConditionLoop(
                        function () use ( $lockName, $key, $timeout, $method ) {
@@ -1431,14 +1334,8 @@ SQL;
                return ( $loop->invoke() === $loop::CONDITION_REACHED );
        }
 
-       /**
-        * See http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKSFROM
-        * PG DOCS: http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
-        * @param string $lockName
-        * @param string $method
-        * @return bool
-        */
        public function unlock( $lockName, $method ) {
+               // http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
                $key = $this->addQuotes( $this->bigintFromLockName( $lockName ) );
                $result = $this->query( "SELECT pg_advisory_unlock($key) as lockstatus", $method );
                $row = $this->fetchObject( $result );
index 46f7a5b..8236abf 100644 (file)
@@ -196,6 +196,10 @@ class DatabaseSqlite extends Database {
                return false;
        }
 
+       public function selectDB( $db ) {
+               return false; // doesn't make sense
+       }
+
        /**
         * @return string SQLite DB file path
         * @since 1.25
index c80fdec..f33dfc0 100644 (file)
@@ -1633,7 +1633,7 @@ interface IDatabase {
         * IDatabase::insert().
         *
         * @param string $b
-        * @return string
+        * @return string|Blob
         */
        public function encodeBlob( $b );
 
index 7a58964..93bd95a 100644 (file)
        "filehist-filesize": "Veličina datoteke",
        "filehist-comment": "Komentar",
        "imagelinks": "Upotreba datoteke",
-       "linkstoimage": "{{PLURAL:$1|Slijedeća stranica koristi|Slijedećih $1 stranica koriste}} ovu sliku:",
+       "linkstoimage": "{{PLURAL:$1|Sljedeća stranica koristi|Sljedeće $1 stranice koriste|Sljedećih $1 stranica koristi}} ovu datoteku:",
        "linkstoimage-more": "Više od $1 {{PLURAL:$1|datoteke|datoteka}} povezano je s ovom datotekom.\nSljedeći spisak pokazuje samo {{PLURAL:$1|prvu stranicu povezanu|prve $1 stranice povezane|prvih $1 stranica povezanih}} s ovom datotekom.\nOvdje je dostupan [[Special:WhatLinksHere/$2|potpuni spisak]].",
        "nolinkstoimage": "Nema stranica koje koriste ovu datoteku.",
        "morelinkstoimage": "Vidi [[Special:WhatLinksHere/$1|ostale linkove]] prema ovoj datoteci.",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|promijenio|promijenila}} je model sadržaja stranice $3 iz \"$4\" u \"$5\"",
        "logentry-contentmodel-change-revertlink": "vrati",
        "logentry-contentmodel-change-revert": "vrati",
-       "protectlogpage": "Zapisnik zaključavanja",
+       "protectlogpage": "Zapisnik zaštite",
        "protectlogtext": "Ispod je spisak promjena zaštićenja stranice.\nPogledajte [[Special:ProtectedPages|spisak zaštićenih stranica]] za pregled trenutno zaštićenih stranica.",
        "protectedarticle": "{{GENDER:|zaštitio|zaštitila}} je stranicu \"[[$1]]\"",
        "modifiedarticleprotection": "{{GENDER:|promijenio|promijenila}} je stepen zaštite stranice \"[[$1]]\"",
        "tooltip-ca-move": "Premjesti ovu stranicu",
        "tooltip-ca-watch": "Dodajte stranicu u listu praćnih članaka",
        "tooltip-ca-unwatch": "Ukloni ovu stranicu sa spiska praćenih članaka",
-       "tooltip-search": "Pretraži projekat {{SITENAME}}",
+       "tooltip-search": "Pretraži {{GRAMMAR:akuzativ|{{SITENAME}}}}",
        "tooltip-search-go": "Idi na stranicu s tačno ovim imenom ako postoji",
        "tooltip-search-fulltext": "Pretražite stranice s ovim tekstom",
        "tooltip-p-logo": "Glavna stranica",
        "mw-widgets-titleinput-description-redirect": "preusmjerava na $1",
        "randomrootpage": "Slučajna root stranica",
        "log-action-filter-block": "Vrsta blokiranja:",
+       "log-action-filter-contentmodel": "Vrsta izmjene modela sadržaja:",
        "log-action-filter-delete": "Vrsta brisanja:",
+       "log-action-filter-import": "Vrsta uvoza:",
+       "log-action-filter-managetags": "Vrsta uređivanja oznaka:",
+       "log-action-filter-move": "Vrsta premještanja:",
+       "log-action-filter-newusers": "Način stvaranja računa:",
+       "log-action-filter-patrol": "Vrsta patroliranja:",
+       "log-action-filter-protect": "Vrsta zaštite:",
+       "log-action-filter-rights": "Vrsta izmjene korisničkih prava:",
+       "log-action-filter-upload": "Vrsta postavljanja:",
        "log-action-filter-all": "Sve",
        "log-action-filter-block-block": "Blokiranje",
        "log-action-filter-block-reblock": "Izmjena blokiranja",
        "log-action-filter-block-unblock": "Deblokiranje",
+       "log-action-filter-contentmodel-change": "Izmjena modela sadržaja",
+       "log-action-filter-contentmodel-new": "Nova stranica s nestandardnim modelom sadržaja",
        "log-action-filter-delete-delete": "Brisanje stranice",
        "log-action-filter-delete-restore": "Vraćanje obrisane stranice",
        "log-action-filter-delete-event": "Brisanje unosa u zapisniku",
-       "log-action-filter-delete-revision": "Brisanje izmjene"
+       "log-action-filter-delete-revision": "Brisanje izmjene",
+       "log-action-filter-import-interwiki": "Uvoz između wikija",
+       "log-action-filter-import-upload": "Uvoz postavljanjem XML-a",
+       "log-action-filter-managetags-create": "Nova oznaka",
+       "log-action-filter-managetags-delete": "Brisanje oznake",
+       "log-action-filter-managetags-activate": "Aktiviranje oznake",
+       "log-action-filter-managetags-deactivate": "Deaktiviranje oznake",
+       "log-action-filter-move-move": "Premještanje bez presnimavanja preusmjerenja",
+       "log-action-filter-move-move_redir": "Premještanje s presnimavanjem preusmjerenja",
+       "log-action-filter-newusers-create": "Stvorio anonimni korisnik",
+       "log-action-filter-newusers-create2": "Stvorio registrirani korisnik",
+       "log-action-filter-newusers-autocreate": "Automatski stvoren",
+       "log-action-filter-newusers-byemail": "Stvoren lozinkom poslanom na adresu e-pošte",
+       "log-action-filter-patrol-patrol": "Ručno patrolirano",
+       "log-action-filter-patrol-autopatrol": "Automatski patrolirano",
+       "log-action-filter-protect-protect": "Dodavanje zaštite",
+       "log-action-filter-protect-modify": "Izmjena zaštite",
+       "log-action-filter-protect-unprotect": "Uklanjanje zaštite",
+       "log-action-filter-protect-move_prot": "Premještanje zaštite",
+       "log-action-filter-rights-rights": "Ručna izmjena",
+       "log-action-filter-rights-autopromote": "Automatska izmjena",
+       "log-action-filter-upload-upload": "Nova datoteka",
+       "log-action-filter-upload-overwrite": "Izmjena postojeće datoteke"
 }
index c2eeeba..4bf0dd6 100644 (file)
@@ -86,7 +86,7 @@
        "tog-enotifminoredits": "Send mig også en e-mail ved mindre ændringer af sider og filer på min overvågningsliste",
        "tog-enotifrevealaddr": "Vis min e-mailadresse i e-mails med besked om ændringer",
        "tog-shownumberswatching": "Vis antal brugere, der overvåger",
-       "tog-oldsig": "Nuværende signatur:",
+       "tog-oldsig": "Din nuværende signatur:",
        "tog-fancysig": "Behandl signatur som wikitekst uden automatisk henvisning",
        "tog-uselivepreview": "Benyt løbende forhåndsvisning",
        "tog-forceeditsummary": "Advar mig hvis jeg ikke udfylder beskrivelsesfeltet",
        "newwindow": "(åbner i et nyt vindue)",
        "cancel": "Afbryd",
        "moredotdotdot": "Mere...",
-       "morenotlisted": "Denne liste er ikke komplet.",
+       "morenotlisted": "Denne liste er måske ikke fuldstændig.",
        "mypage": "Side",
        "mytalk": "Diskussion",
        "anontalk": "Diskussion",
        "searchprofile-advanced-tooltip": "Søg i bestemte navnerum",
        "search-result-size": "$1 ({{PLURAL:$2|et ord|$2 ord}})",
        "search-result-category-size": "{{PLURAL:$1|1 medlem|$1 medlemmer}} ({{PLURAL:$2|1 underkategori|$2 underkategorier}}, {{PLURAL:$3|1 fil|$3 filer}})",
-       "search-redirect": "(omdirigering $1)",
+       "search-redirect": "(omdirigering fra $1)",
        "search-section": "(afsnit $1)",
        "search-category": "(kategorien $1)",
        "search-file-match": "(svarer til filens indhold)",
        "upload-copy-upload-invalid-domain": "Uploads af kopier er ikke tilgængelig fra dette domæne.",
        "upload-dialog-title": "Læg en fil op",
        "upload-dialog-button-cancel": "Annuller",
+       "upload-dialog-button-back": "Tilbage",
        "upload-dialog-button-done": "Færdig",
        "upload-dialog-button-save": "Gem",
        "upload-dialog-button-upload": "Læg op",
        "upload-form-label-infoform-description": "Beskrivelse",
        "upload-form-label-usage-title": "Anvendelse",
        "upload-form-label-usage-filename": "Filnavn",
+       "upload-form-label-own-work": "Dette er mit eget værk",
        "upload-form-label-infoform-categories": "Kategorier",
        "upload-form-label-infoform-date": "Dato",
        "upload-form-label-own-work-message-generic-local": "Jeg bekræfter at jeg uploader filen i overenstemmelse med betingelser for brug og licenseringspoltikken på {{SITENAME}}.",
        "export-download": "Tilbyd at gemme som en fil",
        "export-templates": "Medtag skabeloner",
        "export-pagelinks": "Inkluder henviste sider til en dybde på:",
+       "export-manual": "Tilføj sider manuelt:",
        "allmessages": "Alle beskeder",
        "allmessagesname": "Navn",
        "allmessagesdefault": "Standardtekst",
        "confirm-watch-top": "Tilføj denne side til din overvågningsliste?",
        "confirm-unwatch-button": "OK",
        "confirm-unwatch-top": "Fjern denne side fra din overvågningsliste?",
+       "confirm-rollback-button": "OK",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← forrige side",
        "imgmultipagenext": "næste side →",
        "htmlform-cloner-create": "Tilføj flere",
        "htmlform-cloner-delete": "Fjern",
        "htmlform-cloner-required": "Der kræves mindst en værdi.",
+       "htmlform-date-placeholder": "ÅÅÅÅ-MM-DD",
        "logentry-delete-delete": "$1 {{GENDER:$2|slettede}} siden $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|gendannede}} siden $3",
        "logentry-delete-event": "$1 {{GENDER:$2|ændrede}} synligheden af {{PLURAL:$5|en loghændelse|$5 loghændelser}} for siden $3: $4",
        "feedback-cancel": "Afbryd",
        "feedback-close": "Færdig",
        "feedback-dialog-title": "Indsend feedback",
-       "feedback-error-title": "Fejl",
        "feedback-error1": "Fejl: Ukendt resultat fra API",
        "feedback-error2": "Fejl: Redigering mislykkedes",
        "feedback-error3": "Fejl: Intet svar fra API",
        "feedback-submit": "Send",
        "feedback-thanks": "Tak! Dine tilbagemeldinger er blevet noteret på siden \"[$2 $1]\".",
        "feedback-thanks-title": "Tak!",
-       "searchsuggest-search": "Søg",
+       "searchsuggest-search": "Søg på {{SITENAME}}",
        "searchsuggest-containing": "indeholder...",
        "api-error-badaccess-groups": "Du har ikke tilladelse til at overføre filer til denne wiki.",
        "api-error-badtoken": "Intern fejl: ugyldigt mærke.",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Symboler",
        "special-characters-group-greek": "Græsk",
+       "special-characters-group-greekextended": "Udvidet græsk",
        "special-characters-group-cyrillic": "Kyrillisk",
        "special-characters-group-arabic": "Arabisk",
        "special-characters-group-arabicextended": "Udvidet arabisk",
        "log-action-filter-protect-protect": "Beskyttelse",
        "log-action-filter-protect-modify": "Ændring af beskyttelse",
        "log-action-filter-protect-unprotect": "Fjernede beskyttelse",
-       "log-action-filter-protect-move_prot": "Flyttede beskyttelse"
+       "log-action-filter-protect-move_prot": "Flyttede beskyttelse",
+       "authmanager-provider-temporarypassword": "Midlertidig adgangskode",
+       "edit-error-short": "Fejl: $1"
 }
index cd9fd62..bd3cfb0 100644 (file)
        "semiprotectedpagewarning": "'''Diqet: No pel pawyeno, teyna serkari eşkeni bıvurni.'''\nWexta ke şıma no pel vurneni diqet bıkeri, log bivini:",
        "cascadeprotectedwarning": "'''Diqet:''' Na pele kılit biya, tenya karberê idarekeri şenê ke naye bıvurnê, çıke na zerrey {{PLURAL:$1|na pela şipa-kılitkerdiye|nê pelanê şipanê-kılitkerdiyan}} dera:",
        "titleprotectedwarning": "'''Diqet: Na pele kılit biya, [[Special:ListGroupRights|heqê xususiy]] lazımê ke naye vırazê.'''\nLoge peniye cor de este:",
-       "templatesused": "{{PLURAL:$1|Şablon|Şabloni}} ke na pela de xebtênê:",
+       "templatesused": "{{PLURAL:$1|Şablon|Şabloni}} ke ena perrer de karneyayê:",
        "templatesusedpreview": "{{PLURAL:$1|Sablon|Sabloni}}  ke na verqayt de xebetnayê:",
        "templatesusedsection": "{{PLURAL:$1|Template|Templateyan}}  ke na qısım de xebetniyenê:",
        "template-protected": "(kılit biyo)",
index 5d7db72..0d5773d 100644 (file)
        "previewnote": "'''Lembre que esta é só unha vista previa e que aínda non gardou os seus cambios!'''",
        "continue-editing": "Ir ata a caixa de edición",
        "previewconflict": "Esta vista previa mostra o texto na área superior tal e como aparecerá se escolle gardar.",
-       "session_fail_preview": "Sentímolo! Non podemos procesar a súa edición porque se perderon os datos de inicio da sesión.\n\nA súa sesión pode que fose pechada. <strong> Por favor, verifique se aínda está conectado e probe de novo</strong>. En caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver a entrar na súa conta, e verifique que o seu navegador permite o uso de \"cookies\" neste sitio.",
+       "session_fail_preview": "Sentímolo! Non puidemos procesar a súa edición porque se perderon os datos de inicio da sesión.\n\nPoida que se pechase a súa sesión. <strong>Por favor, verifique que ten a sesión aberta e probe de novo.</strong>\nEn caso de que siga sen funcionar, intente [[Special:UserLogout|saír]] e volver entrar na súa conta e verifique que o seu navegador permite o uso de cookies neste sitio.",
        "session_fail_preview_html": "Sentímolo! Non foi posible procesar a edición debido á pérdida de datos da súa sesión.\n\n<em>Como a wiki {{SITENAME}} posibilita o uso de HTML puro, a vista previa está oculta por precaución contra ataques con JavaScript.</em>\n\n<strong>Se este é un intento lexítimo de edición probe de novo, por favor</strong>. \nEn caso de que continúe sen funcionar, intente [[Special:UserLogout|saír]] e volver a entrar na súa conta, e verifique se o seu navegador permite o uso de ''cookies'' deste sitio.",
        "token_suffix_mismatch": "'''Rexeitouse a súa edición porque o seu cliente confundiu os signos de puntuación na edición.'''\nRexeitouse a edición para evitar que se corrompa o texto do artigo.\nIsto pode acontecer porque estea a empregar un servizo de proxy anónimo defectuoso baseado na web.",
        "edit_form_incomplete": "'''Algunhas partes do formulario de edición non chegaron ao servidor; comprobe que a súa modificación está intacta e inténteo de novo.'''",
index 9814fea..ab3a2f9 100644 (file)
@@ -48,7 +48,8 @@
                        "Nemo bis",
                        "Mbrt",
                        "Beeyan",
-                       "Bonaditya"
+                       "Bonaditya",
+                       "Irus"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "category-file-count-limited": "Kategori ini memiliki {{PLURAL:$1|$1 berkas}} berikut.",
        "listingcontinuesabbrev": "samb.",
        "index-category": "Halaman yang diindeks",
-       "noindex-category": "Halaman yang tidak diindeks",
+       "noindex-category": "Halaman yang diindeks",
        "broken-file-category": "Halaman dengan gambar rusak",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Tentang",
        "talk": "Pembicaraan",
        "views": "Tampilan",
        "toolbox": "Perkakas",
+       "tool-link-userrights": "Simpan kelompok {{GENDER:$1|pengguna}}",
+       "tool-link-emailuser": "Kirim surel ke {{GENDER:$1|pengguna}} ini",
        "userpage": "Lihat halaman pengguna",
        "projectpage": "Lihat halaman proyek",
        "imagepage": "Lihat halaman berkas",
        "createacct-yourpasswordagain-ph": "Masukkan lagi kata sandi",
        "userlogin-remembermypassword": "Biarkan saya tetap masuk",
        "userlogin-signwithsecure": "Gunakan server aman",
+       "cannotlogin-title": "Tidak dapat masuk",
+       "cannotlogin-text": "Login ini tidak mungkin.",
        "cannotloginnow-title": "Tidak dapat masuk log saat ini",
        "cannotloginnow-text": "Masuk log tidak memungkinkan ketika menggunakan $1.",
+       "cannotcreateaccount-title": "Akun tak dapat dibuat",
+       "cannotcreateaccount-text": "Menetapkan account langsung tidak diaktifkan pada wiki ini.",
        "yourdomainname": "Domain Anda:",
        "password-change-forbidden": "Anda tidak dapat mengubah kata sandi pada wiki ini.",
        "externaldberror": "Telah terjadi kesalahan otentikasi basis data eksternal atau Anda tidak diizinkan melakukan kemaskini terhadap akun eksternal Anda.",
        "searchprofile-advanced-tooltip": "Pencarian di ruang nama tertentu",
        "search-result-size": "$1 ({{PLURAL:$2|$2 kata}})",
        "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkategori|$2 subkategori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
-       "search-redirect": "(pengalihan $1)",
+       "search-redirect": "(Dialihkan dari $1)",
        "search-section": "(bagian $1)",
        "search-category": "(kategori $1)",
        "search-file-match": "(cocok dengan isi berkas)",
        "rightslogtext": "Di bawah ini adalah log perubahan terhadap hak-hak pengguna.",
        "action-read": "membaca halaman ini",
        "action-edit": "menyunting halaman ini",
-       "action-createpage": "membuat halaman baru",
-       "action-createtalk": "membuat halaman pembicaraan baru",
+       "action-createpage": "Membuat halaman ini",
+       "action-createtalk": "Membuat halaman diskusi ini",
        "action-createaccount": "membuat akun pengguna ini",
        "action-autocreateaccount": "buat otomatis akun pengguna luar",
        "action-history": "lihat riwayat halaman ini",
        "upload-http-error": "Kesalahan HTTP terjadi: $1",
        "upload-copy-upload-invalid-domain": "Unggahan salinan tidak tersedia dari domain ini.",
        "upload-foreign-cant-upload": "Wiki ini tidak diatur untuk mengunggah berkas ke gudang penyimpangan asing.",
+       "upload-dialog-disabled": "Upload file menggunakan dialog ini dinonaktifkan pada wiki ini.",
        "upload-dialog-title": "Unggah berkas",
        "upload-dialog-button-cancel": "Batalkan",
        "upload-dialog-button-done": "Selesai",
index d4eeb0c..755433c 100644 (file)
@@ -10,7 +10,8 @@
                        "Сай",
                        "Санюн Вадик",
                        "아라",
-                       "Sergey Ivanov"
+                       "Sergey Ivanov",
+                       "Irus"
                ]
        },
        "tog-underline": "Кузе кылвер-влакым ӱлычын удыралаш?",
        "specialpages-group-pagetools": "Лаштык ӱзгар-влак",
        "specialpages-group-redirects": "Вес вере колтышо спецлаштык-влак",
        "external_image_whitelist": " #Оставьте эту строчку такой, как она есть<pre>\n#Разместите здесь фрагменты регулярных выражений (ту часть, что находится между //)\n#они будут соотнесены с URL внешних изображений.\n#Подходящие будут показаны как изображения, остальные будут показаны как ссылки на изображения.\n#Строки, начинающиеся с # считаются комментариями.\n#Строки не чувствительны к регистру\n\n#Размещайте фрагменты регулярных выражений над этой строчкой. Оставьте эту строчку такой, как она есть.</pre>",
+       "logentry-delete-delete": "$1 {{GENDER:$2|лыктын|лыктын}} странице $3",
        "revdelete-summary": "тӧрлатымаш-влакым возен ончыктымаш",
        "searchsuggest-search": "Кычалаш",
        "expand_templates_ok": "Йӧра",
index b7ed308..5f4b8b5 100644 (file)
        "version": "Pán-pún",
        "specialpages": "Te̍k-sû-ia̍h",
        "tag-filter": "[[Special:Tags|Piau-chhiam]] chhoē mi̍h:",
-       "tag-list-wrapper": "([[Special:Tags|$1 ê piau-chhiam]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|piau-chhiam}}]]: $2)",
        "logentry-move-move": "$1 {{GENDER:$2|sóa}} $3 chit ia̍h khì $4",
        "logentry-newusers-create": "已經{{GENDER:$2|開好}}用者口座 $1",
        "searchsuggest-search": "Chhoē {{SITENAME}}",
index 0456e94..a8e8f2e 100644 (file)
@@ -21,7 +21,8 @@
                        "Nirjal stha",
                        "राम प्रसाद जोशी",
                        "Matma Rex",
-                       "जनक राज भट्ट"
+                       "जनक राज भट्ट",
+                       "Suniltheblue"
                ]
        },
        "tog-underline": "रेखाङ्कित लिङ्क:",
        "feedback-thanks": "धन्यवाद! तपाईंको प्रतिक्रिया पृष्ठमा नियुक्त गरिएको छ \"[ $2  $1 ]\"।",
        "feedback-thanks-title": "धन्यवाद!",
        "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
-       "searchsuggest-search": "खोज",
+       "searchsuggest-search": "{{SITENAME}} मा खोज्नुहोस्",
        "searchsuggest-containing": "समावेश भएको...",
        "api-error-badaccess-groups": "यस विकिमा तपाईंलाई फाइल अपलोड गर्ने अनुमति छैन।",
        "api-error-badtoken": "आन्तरिक समस्याः खराब टोकन ।",
index 073f40f..fa11081 100644 (file)
        "nocookiesnew": "A conta de utilizador foi criada, mas neste momento não tem sessão iniciada.\nA {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu navegador.\nAtive-os e inicie sessão com o seu nome de utilizador e a sua palavra-passe, por favor.",
        "nocookieslogin": "A {{SITENAME}} utiliza ''cookies'' para autenticar os utilizadores.\nOs ''cookies'' estão desativados no seu navegador.\nAtive-os e tente novamente, por favor.",
        "nocookiesfornew": "A conta de utilizador não foi criada, porque não foi possível confirmar a sua origem.\nCertifique-se de que tem os ''cookies'' ativados, recarregue esta página e tente novamente.",
-       "createacct-loginerror": "A conta foi criada com êxito, mas não pôde ser autenticado automaticamente. Por favor, faça o [[Special:UserLogin|início de sessão manualmente]].",
+       "createacct-loginerror": "A conta foi criada, mas não foi possível iniciar a sessão automaticamente. Por favor, [[Special:UserLogin|inície a sessão manualmente]].",
        "noname": "Não especificou um nome de utilizador válido.",
        "loginsuccesstitle": "Autenticação bem sucedida",
        "loginsuccess": "'''Encontra-se agora ligado à {{SITENAME}} como \"$1\"'''.",
        "version-entrypoints": "URL de ponto de entrada",
        "version-entrypoints-header-entrypoint": "Ponto de entrada",
        "version-entrypoints-header-url": "URL",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Caminho dos artigos]",
+       "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Caminho dos <i>scripts</i>]",
        "version-libraries": "Bibliotecas instaladas",
        "version-libraries-library": "Biblioteca",
        "version-libraries-version": "Versão",
        "api-error-stashedfilenotfound": "O ficheiro escondido não foi encontrado ao tentar carregá-lo.",
        "api-error-stashpathinvalid": "O caminho no qual o ficheiro escondido deveria ter sido encontrado era inválido.",
        "api-error-stashfilestorage": "Ocorreu um erro no carregamento do ficheiro escondido.",
-       "api-error-stashzerolength": "O servidor não pôde esconder o ficheiro, porque ele tinha de comprimento zero.",
+       "api-error-stashzerolength": "Não foi possível o servidor esconder o ficheiro, porque este tinha comprimento zero.",
        "api-error-stashnotloggedin": "Tem de ter uma sessão iniciada para gravar ficheiros na área de ficheiros escondidos.",
        "api-error-stashwrongowner": "O ficheiro a que estava a tentar aceder na área de ficheiros escondidos não lhe pertence.",
        "api-error-stashnosuchfilekey": "O chave do ficheiro a que estava a tentar aceder na área de ficheiros escondidos não existe.",
        "authform-notoken": "Chave em falta",
        "authform-wrongtoken": "Chave errada",
        "specialpage-securitylevel-not-allowed-title": "Não permitido",
-       "specialpage-securitylevel-not-allowed": "Desculpe, não tem permissão para utilizar esta página porque a sua identidade não pôde ser verificada.",
+       "specialpage-securitylevel-not-allowed": "Desculpe, não tem permissão para utilizar esta página porque não foi possível verificar a sua identidade.",
        "authpage-cannot-login": "Não é possível iniciar sessão.",
        "authpage-cannot-login-continue": "Não é possível continuar a iniciar sessão. A sua sessão pode ter expirado.",
        "authpage-cannot-create": "Não é possível iniciar a criação da conta.",
index 913f1a6..61a35aa 100644 (file)
@@ -94,7 +94,8 @@
                        "Jdforrester",
                        "Jack who built the house",
                        "Cat1987",
-                       "SergeyButkov"
+                       "SergeyButkov",
+                       "Irus"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "undo-failure": "Правка не может быть отменена из-за несовместимости промежуточных изменений.",
        "undo-norev": "Правка не может быть отменена, так как её не существует или она была удалена.",
        "undo-nochange": "Правка, похоже, уже была отменена.",
-       "undo-summary": "Отмена правки $1, сделанной {{GENDER:$2|участником|участницей}} [[Special:Contribs/$2|$2]] ([[User talk:$2|обс.]])",
+       "undo-summary": "Отмена правки $1, сделанной {{GENDER:$2|участником|участницей}} [[Special:Contributions/$2|$2]] ([[User talk:$2|обс.]])",
        "undo-summary-username-hidden": "Отмена правки $1, сделанной участником, чьё имя скрыто",
        "cantcreateaccount-text": "Создание учётных записей с этого IP-адреса ('''$1''') было заблокировано {{GENDER:$3|участником|участницей|}} [[User:$3|$3]].\n\n$3 {{GENDER:$3|указал|указала}} следующую причину: ''$2''.",
        "cantcreateaccount-range-text": "{{GENDER:$3|Участник|Участница}} [[User:$3|$3]] {{GENDER:$3|установил|установила}} запрет на создание учётных записей из диапазона IP-адресов <strong>$1</strong>, включающего ваш IP-адрес (<strong>$4</strong>). \n\nБыла указана следующая причина: $2.",
index 4b39079..f82652e 100644 (file)
        "variants": "Вариантъёс",
        "navigation-heading": "Навигация",
        "errorpagetitle": "Янгыш",
+       "returnto": "Берыктон борды бам $1.",
        "tagline": "{{SITENAME}}-ысь материал",
        "help": "Валэктонъёс",
        "search": "Утчан",
        "welcomecreation-msg": "Тӥляд гожъямъёсты учётной кылдытэмын вал.\nТӥ быгатӥськоды воштэ {{SITENAME}} [[Special:Preferences|параметръёсты]] ке потэ тӥледлы.",
        "yourname": "Пырон ним:",
        "userlogin-yourname": "Пырон ним:",
+       "createacct-another-username-ph": "Учётной книга нимъёс пыртэмын",
        "yourpassword": "Лушкемкыл:",
        "userlogin-yourpassword": "Лушкемкыл",
+       "createacct-yourpasswordagain": "Пароль юнматэ",
        "cannotcreateaccount-title": "Уг быгатиськы гожъян кылдӥз учётной",
        "yourdomainname": "Тӥ доменэн:",
        "login": "Пырыны",
        "userlogin-resetpassword-link": "Тӥлесьтыд парольдэс куштыны?",
        "userlogin-helplink2": "Пыронъя юрттэт",
        "createacct-emailrequired": "Электронной почталэн адресэз",
+       "createacct-emailoptional": "Электронной почтаезлэн адресэз (необязательное)",
+       "createaccountmail": "Адрес электронной почта огдырлы кутӥ вылын возьматэм образъёсыныз но соослэн случайной сгенерировать пароль ыстыны",
        "createacct-submit": "Выль вики-авторлэн регистрациез",
        "createacct-another-submit": "Выль вики-авторлэн регистрациез",
        "loginerror": "Янгышъёс пырон",
        "autoblockedtext": "Тон IP-адрес, герӟет автоматически заблокирован а со, мар солэн кутыны луоно азьвыл кин ке но пырисьёс пӧлысь, заблокирован {{GENDER:$4|участник|куакеч}} $1. \nБлокировка возьмано луоз вуоно мугез:\n\n: \"$2\" - лы.\n\n* Кутскон блокировка: $8\n* Блокировка ортчиз: $6\n* Блокировка меретъёсыз: $7\n\nБыгатӥськод-а тон герӟаськемын $1 яке мукет котькудӥныз [[{{MediaWiki:Grouppage-sysop}}|администраторъёс]], блокировка мед эскерозы.\n\nУчком, мар кутыны уг быгато функцизэс \"гожтэт\", ас ке [[Special:Preferences|настройка персональной]] зуркатӥсь яке электронной почтаезлэн адресэз эн чуртна уг корректный, яке гожтӥськод ке, гожтэт ыстон укшась блокировка алон.\n\nТон IP-адрес — $3, блокировка идентификаторлэн — #$5.\nПожалуйста, аслэсьтым тодон-та вазиськонэз котьку возьмано.",
        "blockednoreason": "мугезлы эн возьмалэ",
        "loginreqlink": "пырыны",
+       "newarticletext": "Тон бам ссылкаос вылэ выжыса, со кема уз улы.\nСоос мед кылдозы, текст бичась укноос, улазы интыяськемын (умой-умой см. [$1 бам справочной]).\nЯнгыш-а тон татын луысалыд ке, кнопказэ зӥбиз гинэ <strong>берлань</strong> асьтэлэсь браузеръёстэс.",
        "noarticletext": "Али дыре та бамын текст ӧвӧл. \nТӥ быгатоды [[Special:Search/{{PAGENAME}}|шедьтыны со сярысь кыӵе ке ивор]] мукет бамъёсысь,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} шедьтыны журналъёсысь гожъямъёсыз], \nяке [{{fullurl:{{FULLPAGENAME}}|action=edit}} сыӵе нимын бам кылдытыны]</span>.",
+       "noarticletext-nopermission": "Али дыре та бам вылын кылкуэт ӧвӧл.\nТон быгатӥськод [[Special:Search/{{PAGENAME}}|сётэм йыръянъёс шедьто упоминание]] мукет бам вылын,\nяке <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} соответствующий журнал книгаез шедьтыны].</span> Тӥ дорын сётӥське юаськыны кылдӥз бам ӧвӧл.",
        "blocked-notice-logextract": "Пользователь заблокирован сётӥз та учырлы.\nСправка понна радъяськылӥсь журнал блокировка лапег берпуметӥ гожтэт:",
        "continue-editing": "Тупатъянэз азьланьтоно",
        "editing": "Тупатон: $1",
        "template-semiprotected": "(полузащищенный)",
        "nocreate-loggedin": "Тон доразы юаськыны кылдӥз выль бам ӧвӧл.",
        "permissionserrors": "Янгышъёс юаське",
+       "permissionserrorstext": "Тон дорын разрешенизы ӧвӧлэн, тазэ лэсьтом шуыса, со понна вуоно {{PLURAL:$1|мугез}}:",
+       "permissionserrorstext-withaction": "Правоез ӧвӧл, тон дорын $2 тӥ {{PLURAL:$1/1=мугез вуоно|мугез вуоно}}:",
        "content-model-wikitext": "викитекст",
-       "cantcreateaccount-text": "Та книгаез кылдытонлы учётной IP-адрес (<кужмо>$1</кужмо>) заблокировать луизы [[User:$3|$3]].\n\nМугез, вайиз $3 возьматэ <em>$2</сиоз>",
-       "cantcreateaccount-range-text": "Учётной кылдытон - гожъян IP-адрес диапазонын <кужмо>$1</strong>, Тон пыриське со IP-адрес (<кужмо>$4</кужмо>), заблокировать луизы [[User:$3|$3]].\n\nМугез, вайиз $3 возьматэ <em>$2</сиоз>",
+       "undo-summary": "Шонертон вошъян $1, лэсьтӥзы {{GENDER:$2|участник|куакеч}} [[Special:Contributions/$2|$2]] ([[User talk:$2|обс.]])",
+       "cantcreateaccount-text": "Та книгаез кылдытонлы учётной IP-адрес (<кужмо>$1</кужмо>) заблокировать луизы [[User:$3|$3]].\n\nМугез, вайиз $3 возьматэ <em>$2</em>",
+       "cantcreateaccount-range-text": "Учётной кылдытон - гожъян IP-адрес диапазонын <кужмо>$1</strong>, Тон пыриське со IP-адрес (<кужмо>$4</кужмо>), заблокировать луизы [[User:$3|$3]].\n\nМугез, вайиз $3 возьматэ <em>$2</em>",
        "viewpagelogs": "Та бамлы журналъёсыз возьматыны",
        "revisionasof": "Версия $1",
        "previousrevision": "← Вужгем",
        "prefs-editing": "Тупатон",
        "yourlanguage": "Интерфейслэн кылыз:",
        "prefs-preview": "Бамез эскерон",
+       "group-autoconfirmed": "Автоподтвержденный пыриськисьёс",
+       "group-bot": "Боты",
        "group-sysop": "Администраторъёс",
        "group-all": "(ваньзэ)",
+       "right-read": "лыдӟыны бам",
+       "right-edit": "правка бам",
+       "right-createpage": "бам кылдытон-а, уг-возьматэмзэ эскерон",
+       "right-createtalk": "создание бамлэн обсуждениосаз",
+       "right-createaccount": "выль книга кылдытон пыриськизы учётной",
+       "right-writeapi": "гожтэтъёсты кутон понна API",
        "newuserlogpage": "Викиавторъёсыз регистрациосын журнал",
+       "action-edit": "та бамез редактировать",
        "enhancedrc-history": "история",
        "recentchanges": "Выль тупатонъёс",
        "recentchanges-label-newpage": "Та тупатонэн выль бам кылдӥз",
        "sp-deletedcontributions-contribs": "тупатонъёсыз",
        "listusers-submit": "Возьматыны",
        "listusers-blocked": "(заблокировать{{GENDER:$1||а}})",
+       "listgrouprights": "Право группае пыриськисьёс",
+       "listgrouprights-summary": "Та группае пырисьёс возьматыны кулэ вики список улӥзы, право соответствующийгес солы возьматоно кариськиз. Оло, ас кожазы ватсаса ивортодэт улыны эрикрадэз сярысь.",
+       "listgrouprights-members": "(список пыриськисьёс)",
        "emailuser": "Викиавторлы гожтэт",
        "emailmessage": "Ивортон:",
        "watchlist": "Чаклан список",
        "watchlist-options": "Чаклан списокез тупатыны",
        "enotif_reset": "Вань бамъёсыз лыдӟем пусйыны",
        "historyaction-submit": "Возьматыны",
+       "deletionlog": "палэнэ журнал",
        "rollbacklink": "ӝог берыктыны",
        "restriction-edit": "Тупатон",
+       "undeletehistory": "Выльысь ке тон бамъёстэ, выльысь историяз луэм воштӥськонъёс вань.\nБӧрысь кылдӥзы выль бамъёс палэнэ кошконо луэ ке, сыӵе ик нимыз, историяз вошъяськонъёс предшествующий выльысь кылдозы.",
+       "undeletehistorynoadmin": "Статьяос палэнтэмын вал. Мугез но палэнэ список пыриды, со статьяе редактировать-озь палэнэгес, зӧк возьматэ. Текст статьяез удаленный администраторъёс гинэ учкыны быгатод.",
        "blanknamespace": "(Валтӥсез)",
        "contributions": "{{GENDER:$1|Викиавтор}} гожтэмъёсы",
        "contributions-title": "$1 викиавтор гожтэмъёсы",
        "mycontris": "Гожтэмъёс",
+       "nocontribs": "Критерии нокыӵе воштӥськонъёс та соответствующий шедьтыны уг луы.",
+       "sp-contributions-blocklog": "блокировка",
+       "sp-contributions-deleted": "шонертон палэнтыны {{GENDER:$1|участник|куакеч}}",
        "whatlinkshere": "Татчы чӧлсконъёс",
        "block": "Блокировка пыриськисьёс",
        "blockip": "Заблокировать пыриськисьёс",
+       "ipbreason-dropdown": "* Блокировка мугез кабес\n** Полы информациез оскизы\n** Вордскем палэнэ бам\n** Спам-сайтъя педпал чӧлскон\n** Текстлэсь визьем ватсан/жуг-жаг\n** Кышкытлыклэсь, пыриськыны уйиськон\n** Злоупотребление кӧня ке книга учётной\n** Пыриськисьёслэн нимъёссы пыриськисьёс",
+       "ipboptions": "2 час:2 hours,1 нуналлы:1 day,3 нуналлы:3 days,1 арняезлы:1 week,2 арняяз:2 weeks,1 толэзь:1 month,3 толэзь:3 months,6 толэзь:6 months,1 арлэн:1 year,бессрочно:infinite",
        "unblocked": "$1 разблокировать",
        "unblocked-id": "Блокировка $1 басьтоно луиз",
        "blocklist-target": "Ужпумъёс",
        "blocklist-reason": "Мугез",
+       "infiniteblock": "бессрочно",
+       "expiringblock": "йылпумъяськиз $1-ысь $2",
+       "anononlyblock": "аноним гинэ",
+       "noautoblockblock": "disconnect автоблокировка",
+       "createaccountblock": "гожъямъёстэс лэзьыны кылдытон учётной",
+       "emailblock": "лэзьымтэ гожтэт ыстон",
+       "blocklist-nousertalk": "тупатъяны ачиз уггес быгаты бамлэн обсуждениосаз",
        "blocklink": "блокировать карыны",
+       "unblocklink": "разблокировать",
+       "change-blocklink": "блокировка воштыны",
        "contribslink": "тупатонъёсыз",
+       "autoblocker": "Автоблокировка-со понна, мае тӥ IP-адрес кутыны али \"[[User:$1|$1]]\". \nБлокировка мугез $1: \"$2\"",
        "blocklogentry": "заблокировать [[$1]] дыр $2 $3",
        "reblock-logentry": "блокировка воштӥз [[$1]] дыр $2 $3",
-       "blocklogtext": "Блокировка но та журналлэн ужезлы разблокирование пользователь.\nЗаблокировать Автоматически IP-адрес уг возьма.\nПроизведениосыз печатласько эстониын [[нимысьтыз:сьӧд списокын|сьӧд списокын]], бан список блокъёс лэсьтыны.",
+       "blocklogtext": "Блокировка но та журналлэн ужезлы разблокирование пользователь.\nЗаблокировать Автоматически IP-адрес уг возьма.\nПроизведениосыз печатласько эстониын [[Special:BlockList|сьӧд списокын]], бан список блокъёс лэсьтыны.",
        "unblocklogentry": "разблокировать $1",
+       "block-log-flags-anononly": "пользователь гинэ нимтултэм",
+       "block-log-flags-nousertalk": "тупатъяны ачиз уггес быгаты бамлэн обсуждениосаз",
        "range_block_disabled": "Администратор диапазонэз блокировать али.",
        "move-watch": "Чаклан списоке пыртоно инъет но валтӥсь бамъёсыз",
        "allmessagesname": "Ивортон",
        "exif-disclaimer": "Кыл кутыны пумит луон",
        "namespacesall": "ваньзэ",
        "monthsall": "ваньзэ",
+       "confirmrecreate-noreason": "{{GENDER:$1|Участник|Куакеч|}}&nbsp;[[User:$1|$1]] ([[User talk:$1|обс]]) {{GENDER:$1|палэнтыны|палэнтыны}} таиз бере бам, кызьы тон сое редактировать карыны кутскиз. Пожалуйста, подтвердите, мар тон малпаськод та бамез зэм но выльысь кылдозы.",
        "confirm-watch-top": "Та бамез чаклан списокады пыртоно?",
        "autosumm-new": "Выль бам: «$1»",
+       "version": "Версия",
        "specialpages": "Ваньмыз панельёс",
+       "specialpages-group-login": "Тусбуяськыны / Гожтӥськоно",
+       "specialpages-group-users": "Пыриськисьёслэсь правооссэс но",
        "tag-filter": "[[Special:Tags|Тэгъёсыз]] фильтр:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Метка|Меткаос}}]]: $2)",
        "tags-title": "Меткаос",
+       "logentry-delete-delete": "$1 {{GENDER:$2|палэнтыны|палэнтыны}} бам $3",
        "logentry-newusers-create": "$1 нимо учётной запись {{GENDER:$2|кылдытэмын}} вал",
        "searchsuggest-search": "Утчано {{SITENAME}}",
        "searchsuggest-containing": "кудъёсаз вань...",
index 8745185..2904f42 100644 (file)
        "viewdeletedpage": "查看被删页面",
        "undeletepagetext": "以下{{PLURAL:$1|页面|$1个页面}}已被删除,但依然在归档中并可以被恢复。归档可能会被定时清理。",
        "undelete-fieldset-title": "还原版本",
-       "undeleteextrahelp": "要恢复该页面的整个历史记录时,不选中任何复选框直接点击'''''{{int:undeletebtn}}'''''。要选择性地恢复部分版本时,请选中相应版本前的复选框再点击'''''{{int:undeletebtn}}'''''。",
+       "undeleteextrahelp": "要恢复该页面的整个历史记录时,不选中任何复选框直接点击<strong><em>{{int:undeletebtn}}</em></strong>。要选择性地恢复部分版本时,请选中相应版本前的复选框再点击<strong><em>{{int:undeletebtn}}</em></strong>。",
        "undeleterevisions": "$1个{{PLURAL:$1|修订版本}}已删除",
        "undeletehistory": "如果您恢复了该页面,所有版本都会被恢复到版本历史中。如果本页删除后有一个同名的新页面建立,被恢复的版本将会出现在先前的历史中。",
        "undeleterevdel": "如果把最新版本部分删除,反删除将会无法进行。如果遇到这种情况,您必须反选或反隐藏最新已删除的版本。",
        "htmlform-select-badoption": "您指定的值不是有效选项。",
        "htmlform-int-invalid": "您指定的值不是整数。",
        "htmlform-float-invalid": "您指定的值不是数字。",
-       "htmlform-int-toolow": "您指定的值小于最小值$1",
+       "htmlform-int-toolow": "您指定的值小于最小值$1",
        "htmlform-int-toohigh": "您指定的值大于最大值$1",
        "htmlform-required": "本值必填",
        "htmlform-submit": "提交",
index 694c23d..434b9f8 100644 (file)
        "grant-basic": "基本權限",
        "grant-viewdeleted": "檢視已刪除的檔案及頁面",
        "grant-viewmywatchlist": "檢視您的監視清單",
+       "grant-viewrestrictedlogs": "檢視已限制的日誌項目",
        "newuserlogpage": "建立使用者日誌",
        "newuserlogpagetext": "此為建立使用者的日誌。",
        "rightslog": "使用者權限日誌",
        "version-poweredby-translators": " translatewiki.net 翻譯人員",
        "version-credits-summary": "我們感謝以下人士為 [[Special:Version|MediaWiki]] 作出的貢獻。",
        "version-license-info": "MediaWiki 為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但不負任何擔保責任;亦無隱含對適售性或 特定用途的適用性的情形擔保。詳情請參照 GNU 通用公共授權。\n\n您應已隨本程式收到 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 通用公共授權條款的副本];如果沒有,請寄信通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 線上閱讀]。",
-       "version-software": "已安裝的軟體",
+       "version-software": "已安裝的軟體",
        "version-software-product": "產品",
        "version-software-version": "版本",
        "version-entrypoints": "入口 URL",
index aed2d83..d8773f8 100644 (file)
@@ -58,17 +58,18 @@ class LBFactoryTest extends MediaWikiTestCase {
        }
 
        public function testLBFactorySimpleServer() {
-               global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype;
+               global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir;
 
                $servers = [
                        [
-                               'host'      => $wgDBserver,
-                               'dbname'    => $wgDBname,
-                               'user'      => $wgDBuser,
-                               'password'  => $wgDBpassword,
-                               'type'      => $wgDBtype,
-                               'load'      => 0,
-                               'flags'     => DBO_TRX // REPEATABLE-READ for consistency
+                               'host'        => $wgDBserver,
+                               'dbname'      => $wgDBname,
+                               'user'        => $wgDBuser,
+                               'password'    => $wgDBpassword,
+                               'type'        => $wgDBtype,
+                               'dbDirectory' => $wgSQLiteDataDir,
+                               'load'        => 0,
+                               'flags'       => DBO_TRX // REPEATABLE-READ for consistency
                        ],
                ];
 
@@ -86,26 +87,28 @@ class LBFactoryTest extends MediaWikiTestCase {
        }
 
        public function testLBFactorySimpleServers() {
-               global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype;
+               global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir;
 
                $servers = [
                        [ // master
-                               'host'     => $wgDBserver,
-                               'dbname'   => $wgDBname,
-                               'user'     => $wgDBuser,
-                               'password' => $wgDBpassword,
-                               'type'     => $wgDBtype,
-                               'load'     => 0,
-                               'flags'    => DBO_TRX // REPEATABLE-READ for consistency
+                               'host'        => $wgDBserver,
+                               'dbname'      => $wgDBname,
+                               'user'        => $wgDBuser,
+                               'password'    => $wgDBpassword,
+                               'type'        => $wgDBtype,
+                               'dbDirectory' => $wgSQLiteDataDir,
+                               'load'        => 0,
+                               'flags'       => DBO_TRX // REPEATABLE-READ for consistency
                        ],
                        [ // emulated slave
-                               'host'     => $wgDBserver,
-                               'dbname'   => $wgDBname,
-                               'user'     => $wgDBuser,
-                               'password' => $wgDBpassword,
-                               'type'     => $wgDBtype,
-                               'load'     => 100,
-                               'flags'    => DBO_TRX // REPEATABLE-READ for consistency
+                               'host'        => $wgDBserver,
+                               'dbname'      => $wgDBname,
+                               'user'        => $wgDBuser,
+                               'password'    => $wgDBpassword,
+                               'type'        => $wgDBtype,
+                               'dbDirectory' => $wgSQLiteDataDir,
+                               'load'        => 100,
+                               'flags'       => DBO_TRX // REPEATABLE-READ for consistency
                        ]
                ];
 
@@ -118,19 +121,23 @@ class LBFactoryTest extends MediaWikiTestCase {
                $dbw = $lb->getConnection( DB_MASTER );
                $this->assertTrue( $dbw->getLBInfo( 'master' ), 'master shows as master' );
                $this->assertEquals(
-                       $wgDBserver, $dbw->getLBInfo( 'clusterMasterHost' ), 'cluster master set' );
+                       ( $wgDBserver != '' ) ? $wgDBserver : 'localhost',
+                       $dbw->getLBInfo( 'clusterMasterHost' ),
+                       'cluster master set' );
 
                $dbr = $lb->getConnection( DB_SLAVE );
                $this->assertTrue( $dbr->getLBInfo( 'replica' ), 'slave shows as slave' );
                $this->assertEquals(
-                       $wgDBserver, $dbr->getLBInfo( 'clusterMasterHost' ), 'cluster master set' );
+                       ( $wgDBserver != '' ) ? $wgDBserver : 'localhost',
+                       $dbr->getLBInfo( 'clusterMasterHost' ),
+                       'cluster master set' );
 
                $factory->shutdown();
                $lb->closeAll();
        }
 
        public function testLBFactoryMulti() {
-               global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype;
+               global $wgDBserver, $wgDBname, $wgDBuser, $wgDBpassword, $wgDBtype, $wgSQLiteDataDir;
 
                $factory = new LBFactoryMulti( [
                        'sectionsByDB' => [],
@@ -145,6 +152,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                                'user'            => $wgDBuser,
                                'password'        => $wgDBpassword,
                                'type'            => $wgDBtype,
+                               'dbDirectory' => $wgSQLiteDataDir,
                                'flags'           => DBO_DEFAULT
                        ],
                        'hostsByName' => [
@@ -233,7 +241,7 @@ class LBFactoryTest extends MediaWikiTestCase {
        }
 
        private function newLBFactoryMulti( array $baseOverride = [], array $serverOverride = [] ) {
-               global $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, $wgDBtype;
+               global $wgDBserver, $wgDBuser, $wgDBpassword, $wgDBname, $wgDBtype, $wgSQLiteDataDir;
 
                return new LBFactoryMulti( $baseOverride + [
                        'sectionsByDB' => [],
@@ -247,6 +255,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                                'user' => $wgDBuser,
                                'password' => $wgDBpassword,
                                'type' => $wgDBtype,
+                               'dbDirectory' => $wgSQLiteDataDir,
                                'flags' => DBO_DEFAULT
                        ],
                        'hostsByName' => [
@@ -258,17 +267,32 @@ class LBFactoryTest extends MediaWikiTestCase {
        }
 
        public function testNiceDomains() {
-               global $wgDBname;
+               global $wgDBname, $wgDBtype;
+
+               if ( $wgDBtype === 'sqlite' ) {
+                       $tmpDir = $this->getNewTempDirectory();
+                       $dbPath = "$tmpDir/unit_test_db.sqlite";
+                       file_put_contents( $dbPath, '' );
+                       $tempFsFile = new TempFSFile( $dbPath );
+                       $tempFsFile->autocollect();
+               } else {
+                       $dbPath = null;
+               }
 
-               $factory = $this->newLBFactoryMulti();
+               $factory = $this->newLBFactoryMulti(
+                       [],
+                       [ 'dbFilePath' => $dbPath ]
+               );
                $lb = $factory->getMainLB();
 
-               $db = $lb->getConnectionRef( DB_MASTER );
-               $this->assertEquals(
-                       $wgDBname,
-                       $db->getDomainID()
-               );
-               unset( $db );
+               if ( $wgDBtype !== 'sqlite' ) {
+                       $db = $lb->getConnectionRef( DB_MASTER );
+                       $this->assertEquals(
+                               $wgDBname,
+                               $db->getDomainID()
+                       );
+                       unset( $db );
+               }
 
                /** @var Database $db */
                $db = $lb->getConnection( DB_MASTER, [], '' );
@@ -280,19 +304,19 @@ class LBFactoryTest extends MediaWikiTestCase {
                );
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'page' ),
                        "Correct full table name"
                );
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( $wgDBname ) . '.' . $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, $wgDBname ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( "$wgDBname.page" ),
                        "Correct full table name"
                );
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, 'nice_db' ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'nice_db.page' ),
                        "Correct full table name"
                );
@@ -303,12 +327,12 @@ class LBFactoryTest extends MediaWikiTestCase {
                        $db->getDomainID()
                );
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'my_page' ),
+                       $this->quoteTable( $db, 'my_page' ),
                        $db->tableName( 'page' ),
                        "Correct full table name"
                );
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'other_nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, 'other_nice_db' ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'other_nice_db.page' ),
                        "Correct full table name"
                );
@@ -318,9 +342,23 @@ class LBFactoryTest extends MediaWikiTestCase {
        }
 
        public function testTrickyDomain() {
+               global $wgDBtype;
+
+               if ( $wgDBtype === 'sqlite' ) {
+                       $tmpDir = $this->getNewTempDirectory();
+                       $dbPath = "$tmpDir/unit_test_db.sqlite";
+                       file_put_contents( $dbPath, '' );
+                       $tempFsFile = new TempFSFile( $dbPath );
+                       $tempFsFile->autocollect();
+               } else {
+                       $dbPath = null;
+               }
+
                $dbname = 'unittest-domain';
                $factory = $this->newLBFactoryMulti(
-                       [ 'localDomain' => $dbname ], [ 'dbname' => $dbname ] );
+                       [ 'localDomain' => $dbname ],
+                       [ 'dbname' => $dbname, 'dbFilePath' => $dbPath ]
+               );
                $lb = $factory->getMainLB();
                /** @var Database $db */
                $db = $lb->getConnection( DB_MASTER, [], '' );
@@ -332,19 +370,19 @@ class LBFactoryTest extends MediaWikiTestCase {
                );
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'page' ),
                        "Correct full table name"
                );
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( $dbname ) . '.' . $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, $dbname ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( "$dbname.page" ),
                        "Correct full table name"
                );
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, 'nice_db' ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'nice_db.page' ),
                        "Correct full table name"
                );
@@ -352,12 +390,12 @@ class LBFactoryTest extends MediaWikiTestCase {
                $factory->setDomainPrefix( 'my_' );
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'my_page' ),
+                       $this->quoteTable( $db, 'my_page' ),
                        $db->tableName( 'page' ),
                        "Correct full table name"
                );
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'other_nice_db' ) . '.' . $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, 'other_nice_db' ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'other_nice_db.page' ),
                        "Correct full table name"
                );
@@ -367,7 +405,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                \MediaWiki\restoreWarnings();
 
                $this->assertEquals(
-                       $db->addIdentifierQuotes( 'garbage-db' ) . '.' . $db->addIdentifierQuotes( 'page' ),
+                       $this->quoteTable( $db, 'garbage-db' ) . '.' . $this->quoteTable( $db, 'page' ),
                        $db->tableName( 'garbage-db.page' ),
                        "Correct full table name"
                );
@@ -375,4 +413,12 @@ class LBFactoryTest extends MediaWikiTestCase {
                $factory->closeAll();
                $factory->destroy();
        }
+
+       private function quoteTable( Database $db, $table ) {
+               if ( $db->getType() === 'sqlite' ) {
+                       return $table;
+               } else {
+                       return $db->addIdentifierQuotes( $table );
+               }
+       }
 }