Index: branches/new-checkuser/CheckUser_api.php |
— | — | @@ -1,148 +0,0 @@ |
2 | | -<?php |
3 | | - |
4 | | -/* |
5 | | - * Created on Jan 14, 2009 |
6 | | - * |
7 | | - * Copyright (C) 2009 Soxred93 soxred93 [-at-] gee mail [-dot-] com, |
8 | | - * |
9 | | - * This program is free software; you can redistribute it and/or modify |
10 | | - * it under the terms of the GNU General Public License as published by |
11 | | - * the Free Software Foundation; either version 2 of the License, or |
12 | | - * (at your option) any later version. |
13 | | - * |
14 | | - * This program is distributed in the hope that it will be useful, |
15 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17 | | - * GNU General Public License for more details. |
18 | | - * |
19 | | - * You should have received a copy of the GNU General Public License along |
20 | | - * with this program; if not, write to the Free Software Foundation, Inc., |
21 | | - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
22 | | - * http://www.gnu.org/copyleft/gpl.html |
23 | | - */ |
24 | | - |
25 | | -if (!defined('MEDIAWIKI')) { |
26 | | - // Eclipse helper - will be ignored in production |
27 | | - require_once ('ApiBase.php'); |
28 | | -} |
29 | | - |
30 | | -class CheckUserApi extends ApiBase { |
31 | | - |
32 | | - public function execute() { |
33 | | - global $wgUser; |
34 | | - $this->getMain()->requestWriteMode(); |
35 | | - $params = $this->extractRequestParams(); |
36 | | - |
37 | | - if(is_null($params['user'])) |
38 | | - $this->dieUsageMsg(array('missingparam', 'user')); |
39 | | - if(is_null($params['type'])) |
40 | | - $this->dieUsageMsg(array('missingparam', 'type')); |
41 | | - if(is_null($params['duration'])) |
42 | | - $this->dieUsageMsg(array('missingparam', 'duration')); |
43 | | - if(!isset($params['reason'])) { |
44 | | - $reason = ''; |
45 | | - } |
46 | | - else { |
47 | | - $reason = $params['reason']; |
48 | | - } |
49 | | - if(!$wgUser->isAllowed('checkuser')) |
50 | | - $this->dieUsageMsg(array('cantcheckuser')); |
51 | | - |
52 | | - $user = $params['user']; |
53 | | - $checktype = $params['type']; |
54 | | - $period = $params['duration']; |
55 | | - |
56 | | - # An IPv4? |
57 | | - if( preg_match( '#^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(/\d{1,2}|)$#', $user ) ) { |
58 | | - $ip = $user; |
59 | | - $name = ''; |
60 | | - $xff = ''; |
61 | | - # An IPv6? |
62 | | - } else if( preg_match( '#^[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})+(/\d{1,3}|)$#', $user ) ) { |
63 | | - $ip = IP::sanitizeIP($user); |
64 | | - $name = ''; |
65 | | - $xff = ''; |
66 | | - # An IPv4 XFF string? |
67 | | - } else if( preg_match( '#^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(/\d{1,2}|)/xff$#', $user, $matches ) ) { |
68 | | - list( $junk, $xffip, $xffbit) = $matches; |
69 | | - $ip = ''; |
70 | | - $name = ''; |
71 | | - $xff = $xffip . $xffbit; |
72 | | - # An IPv6 XFF string? |
73 | | - } else if( preg_match( '#^([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4})+)(/\d{1,3}|)/xff$#', $user, $matches ) ) { |
74 | | - list( $junk, $xffip, $xffbit ) = $matches; |
75 | | - $ip = ''; |
76 | | - $name = ''; |
77 | | - $xff = IP::sanitizeIP( $xffip ) . $xffbit; |
78 | | - # A user? |
79 | | - } else { |
80 | | - $ip = ''; |
81 | | - $name = $user; |
82 | | - $xff = ''; |
83 | | - } |
84 | | - |
85 | | - if( $checktype=='subuserips' ) { |
86 | | - $res = $this->doUserIPsRequest( $name, $reason, $period ); |
87 | | - } else if( $xff && $checktype=='subipedits' ) { |
88 | | - $res = $this->doIPEditsRequest( $xff, true, $reason, $period ); |
89 | | - } else if( $checktype=='subipedits' ) { |
90 | | - $res = $this->doIPEditsRequest( $ip, false, $reason, $period ); |
91 | | - } else if( $xff && $checktype=='subipusers' ) { |
92 | | - $res = $this->doIPUsersRequest( $xff, true, $reason, $period ); |
93 | | - } else if( $checktype=='subipusers' ) { |
94 | | - $res = $this->doIPUsersRequest( $ip, false, $reason, $period ); |
95 | | - } else if( $checktype=='subuseredits' ) { |
96 | | - $res = $this->doUserEditsRequest( $user, $reason, $period ); |
97 | | - } |
98 | | - |
99 | | - if( !is_null( $res ) ) { |
100 | | - $this->getResult()->setIndexedTagName($res, 'cu'); |
101 | | - $this->getResult()->addValue(null, $this->getModuleName(), $res); |
102 | | - } |
103 | | - } |
104 | | - |
105 | | - public function __construct($main, $action) { |
106 | | - parent :: __construct($main, $action); |
107 | | - ApiBase::$messageMap['cantcheckuser'] = array('code' => 'cantcheckuser', 'info' => "You dont have permission to run a checkuser"); |
108 | | - ApiBase::$messageMap['checkuserlogfail'] = array('code' => 'checkuserlogfail', 'info' => "Inserting a log entry failed"); |
109 | | - ApiBase::$messageMap['nomatch'] = array('code' => 'nomatch', 'info' => "No matches found"); |
110 | | - ApiBase::$messageMap['nomatchedit'] = array('code' => 'nomatch', 'info' => "No matches found. Last edit was on $1 at $2"); |
111 | | - } |
112 | | - |
113 | | - public function mustBePosted() { return true; } |
114 | | - |
115 | | - public function getAllowedParams() { |
116 | | - return array ( |
117 | | - 'user' => null, |
118 | | - 'type' => null, |
119 | | - 'duration' => null, |
120 | | - 'reason' => null, |
121 | | - ); |
122 | | - } |
123 | | - |
124 | | - public function getParamDescription() { |
125 | | - return array ( |
126 | | - 'user' => 'The user (or IP) you want to check', |
127 | | - 'type' => 'The type of check you want to make (subuserips, subipedits, subipusers, or subuseredits)', |
128 | | - 'duration' => 'How far back you want to check', |
129 | | - 'reason' => 'The reason for checking', |
130 | | - ); |
131 | | - } |
132 | | - |
133 | | - public function getDescription() { |
134 | | - return array ( |
135 | | - 'Run a CheckUser on a username or IP address' |
136 | | - ); |
137 | | - } |
138 | | - |
139 | | - protected function getExamples() { |
140 | | - return array( |
141 | | - 'api.php?action=checkuser&user=127.0.0.1/xff&type=subipedits&duration=all', |
142 | | - 'api.php?action=checkuser&user=Example&type=subuserips&duration=2_weeks', |
143 | | - ); |
144 | | - } |
145 | | - |
146 | | - public function getVersion() { |
147 | | - return __CLASS__ . ': $Id: CheckUser_api.php 45575 2009-01-14 22:50:32Z soxred93 $'; |
148 | | - } |
149 | | -} |
\ No newline at end of file |
Index: branches/new-checkuser/SpecialCheckUser.php |
— | — | @@ -1,1285 +0,0 @@ |
2 | | -<?php |
3 | | - |
4 | | -if ( !defined( 'MEDIAWIKI' ) ) { |
5 | | - echo "CheckUser extension\n"; |
6 | | - exit( 1 ); |
7 | | -} |
8 | | - |
9 | | - |
10 | | -class SpecialCheckUser extends SpecialPage |
11 | | -{ |
12 | | - function SpecialCheckUser() { |
13 | | - global $wgUser; |
14 | | - if ( $wgUser->isAllowed( 'checkuser' ) || !$wgUser->isAllowed( 'checkuser-log' ) ) { |
15 | | - SpecialPage::SpecialPage('CheckUser', 'checkuser'); |
16 | | - } else { |
17 | | - SpecialPage::SpecialPage('CheckUser', 'checkuser-log'); |
18 | | - } |
19 | | - wfLoadExtensionMessages('SpecialCheckUser'); |
20 | | - } |
21 | | - |
22 | | - function execute( $subpage ) { |
23 | | - global $wgRequest, $wgOut, $wgUser, $wgContLang; |
24 | | - |
25 | | - $this->setHeaders(); |
26 | | - $this->sk = $wgUser->getSkin(); |
27 | | - |
28 | | - // This is horribly shitty. |
29 | | - // Lacking formal aliases, it's tough to ensure we have compatibility. |
30 | | - // Links may break, which sucks. |
31 | | - // Language fallbacks will not always be properly utilized. |
32 | | - $logMatches = array( |
33 | | - wfMsgForContent( 'checkuser-log-subpage' ), |
34 | | - 'Log' |
35 | | - ); |
36 | | - |
37 | | - foreach( $logMatches as $log ) { |
38 | | - if ( str_replace( '_', ' ', $wgContLang->lc( $subpage ) ) |
39 | | - == str_replace( '_ ', ' ', $wgContLang->lc( $log ) ) ) { |
40 | | - if( !$wgUser->isAllowed( 'checkuser-log' ) ) { |
41 | | - $wgOut->permissionRequired( 'checkuser-log' ); |
42 | | - return; |
43 | | - } |
44 | | - |
45 | | - $this->showLog(); |
46 | | - return; |
47 | | - } |
48 | | - } |
49 | | - |
50 | | - if( !$wgUser->isAllowed( 'checkuser' ) ) { |
51 | | - if ( $wgUser->isAllowed( 'checkuser-log' ) ) { |
52 | | - $wgOut->addWikiText( wfMsg( 'checkuser-summary' ) . |
53 | | - "\n\n[[" . $this->getLogSubpageTitle()->getPrefixedText() . |
54 | | - '|' . wfMsg( 'checkuser-showlog' ) . ']]' |
55 | | - ); |
56 | | - return; |
57 | | - } |
58 | | - |
59 | | - $wgOut->permissionRequired( 'checkuser' ); |
60 | | - return; |
61 | | - } |
62 | | - |
63 | | - $user = $wgRequest->getText( 'user' ) ? |
64 | | - $wgRequest->getText( 'user' ) : $wgRequest->getText( 'ip' ); |
65 | | - $user = trim($user); |
66 | | - $reason = $wgRequest->getText( 'reason' ); |
67 | | - $blockreason = $wgRequest->getText( 'blockreason' ); |
68 | | - $checktype = $wgRequest->getVal( 'checktype' ); |
69 | | - $period = $wgRequest->getInt( 'period' ); |
70 | | - $users = $wgRequest->getArray( 'users' ); |
71 | | - $tag = $wgRequest->getBool('usetag') ? trim( $wgRequest->getVal( 'tag' ) ) : ""; |
72 | | - $talkTag = $wgRequest->getBool('usettag') ? trim( $wgRequest->getVal( 'talktag' ) ) : ""; |
73 | | - |
74 | | - # An IPv4? An IPv6? CIDR included? |
75 | | - if( IP::isIPAddress($user) ) { |
76 | | - $ip = IP::sanitizeIP($user); |
77 | | - $name = ''; |
78 | | - $xff = ''; |
79 | | - # An IPv4/IPv6 XFF string? CIDR included? |
80 | | - } else if( preg_match('/^(.+)\/xff$/',$user,$m) && IP::isIPAddress($m[1]) ) { |
81 | | - $ip = ''; |
82 | | - $name = ''; |
83 | | - $xff = IP::sanitizeIP($m[1]); |
84 | | - # A user? |
85 | | - } else { |
86 | | - $ip = ''; |
87 | | - $name = $user; |
88 | | - $xff = ''; |
89 | | - } |
90 | | - |
91 | | - $this->doForm( $user, $reason, $checktype, $ip, $xff, $name, $period ); |
92 | | - # Perform one of the various submit operations... |
93 | | - if( $wgRequest->wasPosted() ) { |
94 | | - if( $wgRequest->getVal('action') === 'block' ) { |
95 | | - $this->doMassUserBlock( $users, $blockreason, $tag, $talkTag ); |
96 | | - } else if( $checktype=='subuserips' ) { |
97 | | - $this->doUserIPsRequest( $name, $reason, $period ); |
98 | | - } else if( $xff && $checktype=='subipedits' ) { |
99 | | - $this->doIPEditsRequest( $xff, true, $reason, $period ); |
100 | | - } else if( $checktype=='subipedits' ) { |
101 | | - $this->doIPEditsRequest( $ip, false, $reason, $period ); |
102 | | - } else if( $xff && $checktype=='subipusers' ) { |
103 | | - $this->doIPUsersRequest( $xff, true, $reason, $period, $tag, $talkTag ); |
104 | | - } else if( $checktype=='subipusers' ) { |
105 | | - $this->doIPUsersRequest( $ip, false, $reason, $period, $tag, $talkTag ); |
106 | | - } else if( $checktype=='subuseredits' ) { |
107 | | - $this->doUserEditsRequest( $user, $reason, $period ); |
108 | | - } |
109 | | - } |
110 | | - # Add CIDR calculation convenience form |
111 | | - $this->addJsCIDRForm(); |
112 | | - $this->addStyles(); |
113 | | - } |
114 | | - |
115 | | - /** |
116 | | - * As we use the same small set of messages in various methods and that |
117 | | - * they are called often, we call them once and save them in $this->message |
118 | | - */ |
119 | | - protected function preCacheMessages() { |
120 | | - // Precache various messages |
121 | | - if( !isset( $this->message ) ) { |
122 | | - foreach( explode(' ', 'diff hist minoreditletter newpageletter blocklink log' ) as $msg ) { |
123 | | - $this->message[$msg] = wfMsgExt( $msg, array( 'escape') ); |
124 | | - } |
125 | | - } |
126 | | - } |
127 | | - |
128 | | - public function getLogSubpageTitle() { |
129 | | - if ( !isset( $this->logSubpageTitle ) ) { |
130 | | - $this->logSubpageTitle = $this->getTitle( wfMsgForContent( 'checkuser-log-subpage' ) ); |
131 | | - } |
132 | | - return $this->logSubpageTitle; |
133 | | - } |
134 | | - |
135 | | - protected function doForm( $user, $reason, $checktype, $ip, $xff, $name, $period ) { |
136 | | - global $wgOut, $wgUser; |
137 | | - $action = $this->getTitle()->escapeLocalUrl(); |
138 | | - # Fill in requested type if it makes sense |
139 | | - $encipusers = $encipedits = $encuserips = $encuseredits = 0; |
140 | | - if( $checktype=='subipusers' && ( $ip || $xff ) ) |
141 | | - $encipusers = 1; |
142 | | - else if( $checktype=='subipedits' && ( $ip || $xff ) ) |
143 | | - $encipedits = 1; |
144 | | - else if( $checktype=='subuserips' && $name ) |
145 | | - $encuserips = 1; |
146 | | - else if( $checktype=='subuseredits' && $name ) |
147 | | - $encuseredits = 1; |
148 | | - # Defaults otherwise |
149 | | - else if( $ip || $xff ) |
150 | | - $encipedits = 1; |
151 | | - else |
152 | | - $encuserips = 1; |
153 | | - # Compile our nice form |
154 | | - # User box length should fit things like "2001:0db8:85a3:08d3:1319:8a2e:0370:7344/100/xff" |
155 | | - if( $wgUser->isAllowed( 'checkuser-log' ) ) { |
156 | | - $wgOut->addWikiText( wfMsg( 'checkuser-summary' ) . |
157 | | - "\n\n[[" . $this->getLogSubpageTitle()->getPrefixedText() . |
158 | | - '|' . wfMsg( 'checkuser-showlog' ) . ']]' |
159 | | - ); |
160 | | - } |
161 | | - $form = "<form name='checkuserform' id='checkuserform' action=\"$action\" method='post'>"; |
162 | | - $form .= "<fieldset><legend>".wfMsgHtml( "checkuser-query" )."</legend>"; |
163 | | - $form .= "<table border='0' cellpadding='2'><tr>"; |
164 | | - $form .= "<td>".wfMsgHtml( "checkuser-target" ).":</td>"; |
165 | | - $form .= "<td>".Xml::input( 'user', 46, $user, array( 'id' => 'checktarget' ) ); |
166 | | - $form .= " ".$this->getPeriodMenu( $period ) . "</td>"; |
167 | | - $form .= "</tr><tr>"; |
168 | | - $form .= "<td></td><td class='checkuserradios'><table border='0' cellpadding='3'><tr>"; |
169 | | - $form .= "<td>".Xml::radio( 'checktype', 'subuserips', $encuserips, array('id' => 'subuserips') ); |
170 | | - $form .= " ".Xml::label( wfMsgHtml("checkuser-ips"), 'subuserips' )."</td>"; |
171 | | - $form .= "<td>".Xml::radio( 'checktype', 'subipedits', $encipedits, array('id' => 'subipedits') ); |
172 | | - $form .= " ".Xml::label( wfMsgHtml("checkuser-edits"), 'subipedits' )."</td>"; |
173 | | - $form .= "<td>".Xml::radio( 'checktype', 'subipusers', $encipusers, array('id' => 'subipusers') ); |
174 | | - $form .= " ".Xml::label( wfMsgHtml("checkuser-users"), 'subipusers' )."</td>"; |
175 | | - $form .= "<td>".Xml::radio( 'checktype', 'subuseredits', $encuseredits, array('id' => 'subuseredits') ); |
176 | | - $form .= " ".Xml::label( wfMsgHtml("checkuser-account"), 'subuseredits' )."</td>"; |
177 | | - $form .= "</tr></table></td>"; |
178 | | - $form .= "</tr><tr>"; |
179 | | - $form .= "<td>".wfMsgHtml( "checkuser-reason" )."</td>"; |
180 | | - $form .= "<td>".Xml::input( 'reason', 46, $reason, array( 'maxlength' => '150', 'id' => 'checkreason' ) ); |
181 | | - $form .= " ".Xml::submitButton( wfMsgHtml('checkuser-check'), |
182 | | - array('id' => 'checkusersubmit','name' => 'checkusersubmit') )."</td>"; |
183 | | - $form .= "</tr></table></fieldset></form>"; |
184 | | - # Output form |
185 | | - $wgOut->addHTML( $form ); |
186 | | - } |
187 | | - |
188 | | - /** |
189 | | - * Add CSS/JS |
190 | | - */ |
191 | | - protected function addStyles() { |
192 | | - global $wgScriptPath, $wgCheckUserStyleVersion, $wgOut; |
193 | | - $encJSFile = htmlspecialchars( "$wgScriptPath/extensions/CheckUser/checkuser.js?$wgCheckUserStyleVersion" ); |
194 | | - $wgOut->addScript( "<script type=\"text/javascript\" src=\"$encJSFile\"></script>" ); |
195 | | - } |
196 | | - |
197 | | - /** |
198 | | - * Get a selector of time period options |
199 | | - * @param int $selected, selected level |
200 | | - */ |
201 | | - protected function getPeriodMenu( $selected=null ) { |
202 | | - $s = "<label for='period'>" . wfMsgHtml('checkuser-period') . "</label> "; |
203 | | - $s .= Xml::openElement( 'select', array('name' => 'period','id' => 'period','style' => 'margin-top:.2em;') ); |
204 | | - $s .= Xml::option( wfMsg( "checkuser-week-1" ), 7, $selected===7 ); |
205 | | - $s .= Xml::option( wfMsg( "checkuser-week-2" ), 14, $selected===14 ); |
206 | | - $s .= Xml::option( wfMsg( "checkuser-month" ), 31, $selected===31 ); |
207 | | - $s .= Xml::option( wfMsg( "checkuser-all" ), 0, $selected===0 ); |
208 | | - $s .= Xml::closeElement('select')."\n"; |
209 | | - return $s; |
210 | | - } |
211 | | - |
212 | | - /** |
213 | | - * Make a quick JS form for admins to calculate block ranges |
214 | | - */ |
215 | | - protected function addJsCIDRForm() { |
216 | | - global $wgOut; |
217 | | - $s = '<fieldset id="mw-checkuser-cidrform" style="display:none; clear:both;">'. |
218 | | - '<legend>'.wfMsgHtml('checkuser-cidr-label').'</legend>'; |
219 | | - $s .= '<textarea id="mw-checkuser-iplist" rows="5" cols="50" onkeyup="updateCIDRresult()" onclick="updateCIDRresult()"></textarea><br/>'; |
220 | | - $s .= wfMsgHtml('checkuser-cidr-res') . ' ' . |
221 | | - Xml::input( 'mw-checkuser-cidr-res',35,'',array('id'=>'mw-checkuser-cidr-res') ) . |
222 | | - ' <strong id="mw-checkuser-ipnote"></strong>'; |
223 | | - $s .= '</fieldset>'; |
224 | | - $wgOut->addHTML( $s ); |
225 | | - } |
226 | | - |
227 | | - /** |
228 | | - * Block a list of selected users |
229 | | - * @param array $users |
230 | | - * @param string $reason |
231 | | - * @param string $tag |
232 | | - */ |
233 | | - protected function doMassUserBlock( $users, $reason = '', $tag = '', $talkTag = '' ) { |
234 | | - global $wgOut, $wgUser, $wgCheckUserMaxBlocks, $wgLang; |
235 | | - if( empty($users) || $wgUser->isBlocked(false) ) { |
236 | | - $wgOut->addWikiText( wfMsgExt('checkuser-block-failure',array('parsemag')) ); |
237 | | - return; |
238 | | - } else if( count($users) > $wgCheckUserMaxBlocks ) { |
239 | | - $wgOut->addWikiText( wfMsgExt('checkuser-block-limit',array('parsemag')) ); |
240 | | - return; |
241 | | - } else if( !$reason ) { |
242 | | - $wgOut->addWikiText( wfMsgExt('checkuser-block-noreason',array('parsemag')) ); |
243 | | - return; |
244 | | - } |
245 | | - $safeUsers = IPBlockForm::doMassUserBlock( $users, $reason, $tag, $talkTag ); |
246 | | - if( !empty( $safeUsers ) ) { |
247 | | - $n = count( $safeUsers ); |
248 | | - $ulist = $wgLang->listToText( $safeUsers ); |
249 | | - $wgOut->addWikiText( wfMsgExt( 'checkuser-block-success', 'parsemag', $ulist, $wgLang->formatNum( $n ) ) ); |
250 | | - } else { |
251 | | - $wgOut->addWikiText( wfMsgExt( 'checkuser-block-failure', 'parsemag' ) ); |
252 | | - } |
253 | | - } |
254 | | - |
255 | | - protected function noMatchesMessage( $userName ) { |
256 | | - global $wgLang; |
257 | | - $dbr = wfGetDB( DB_SLAVE ); |
258 | | - $user_id = User::idFromName($userName); |
259 | | - if( $user_id ) { |
260 | | - $revEdit = $dbr->selectField( 'revision', |
261 | | - 'rev_timestamp', |
262 | | - array( 'rev_user' => $user_id ), |
263 | | - __METHOD__, |
264 | | - array( 'ORDER BY' => 'rev_timestamp DESC') |
265 | | - ); |
266 | | - } else { |
267 | | - $revEdit = $dbr->selectField( 'revision', |
268 | | - 'rev_timestamp', |
269 | | - array( 'rev_user_text' => $userName ), |
270 | | - __METHOD__, |
271 | | - array( 'ORDER BY' => 'rev_timestamp DESC') |
272 | | - ); |
273 | | - } |
274 | | - $logEdit = 0; |
275 | | - if( $user_id ) { |
276 | | - $logEdit = $dbr->selectField( 'logging', |
277 | | - 'log_timestamp', |
278 | | - array( 'log_user' => $user_id ), |
279 | | - __METHOD__, |
280 | | - array( 'ORDER BY' => 'log_timestamp DESC') |
281 | | - ); |
282 | | - } |
283 | | - $lastEdit = max( $revEdit, $logEdit ); |
284 | | - if( $lastEdit ) { |
285 | | - $lastEditDate = $wgLang->date( wfTimestamp(TS_MW,$lastEdit), true ); |
286 | | - $lastEditTime = $wgLang->time( wfTimestamp(TS_MW,$lastEdit), true ); |
287 | | - return wfMsgHtml( 'checkuser-nomatch-edits', $lastEditDate, $lastEditTime ); |
288 | | - } |
289 | | - return wfMsgExt('checkuser-nomatch','parse'); |
290 | | - } |
291 | | - |
292 | | - /** |
293 | | - * @param string $ip |
294 | | - * @param bool $xfor |
295 | | - * @param string $reason |
296 | | - * Get all IPs used by a user |
297 | | - * Shows first and last date and number of edits |
298 | | - */ |
299 | | - protected function doUserIPsRequest( $user , $reason = '', $period = 0 ) { |
300 | | - global $wgOut, $wgLang, $wgUser; |
301 | | - |
302 | | - $userTitle = Title::newFromText( $user, NS_USER ); |
303 | | - if( !is_null( $userTitle ) ) { |
304 | | - // normalize the username |
305 | | - $user = $userTitle->getText(); |
306 | | - } |
307 | | - # IPs are passed in as a blank string |
308 | | - if( !$user ) { |
309 | | - $wgOut->addWikiMsg( 'nouserspecified' ); |
310 | | - return; |
311 | | - } |
312 | | - # Get ID, works better than text as user may have been renamed |
313 | | - $user_id = User::idFromName($user); |
314 | | - |
315 | | - # If user is not IP or nonexistent |
316 | | - if( !$user_id ) { |
317 | | - $s = wfMsgExt('nosuchusershort',array('parse'),$user); |
318 | | - $wgOut->addHTML( $s ); |
319 | | - return; |
320 | | - } |
321 | | - |
322 | | - if( !$this->addLogEntry( 'userips', 'user', $user, $reason, $user_id ) ) { |
323 | | - $wgOut->addHTML( '<p>'.wfMsgHtml('checkuser-log-fail').'</p>' ); |
324 | | - } |
325 | | - $dbr = wfGetDB( DB_SLAVE ); |
326 | | - $time_conds = $this->getTimeConds( $period ); |
327 | | - # Ordering by the latest timestamp makes a small filesort on the IP list |
328 | | - $cu_changes = $dbr->tableName( 'cu_changes' ); |
329 | | - $use_index = $dbr->useIndexClause( 'cuc_user_ip_time' ); |
330 | | - $sql = "SELECT cuc_ip,cuc_ip_hex, COUNT(*) AS count, |
331 | | - MIN(cuc_timestamp) AS first, MAX(cuc_timestamp) AS last |
332 | | - FROM $cu_changes $use_index WHERE cuc_user = $user_id AND $time_conds |
333 | | - GROUP BY cuc_ip,cuc_ip_hex ORDER BY last DESC LIMIT 5001"; |
334 | | - |
335 | | - $ret = $dbr->query( $sql, __METHOD__ ); |
336 | | - if( !$dbr->numRows( $ret ) ) { |
337 | | - $s = $this->noMatchesMessage($user)."\n"; |
338 | | - } else { |
339 | | - $blockip = SpecialPage::getTitleFor( 'blockip' ); |
340 | | - $ips_edits = array(); |
341 | | - $counter = 0; |
342 | | - while( $row = $dbr->fetchObject($ret) ) { |
343 | | - if( $counter >= 5000 ) { |
344 | | - $wgOut->addHTML( wfMsgExt('checkuser-limited',array('parse')) ); |
345 | | - break; |
346 | | - } |
347 | | - $ips_edits[$row->cuc_ip] = $row->count; |
348 | | - $ips_first[$row->cuc_ip] = $row->first; |
349 | | - $ips_last[$row->cuc_ip] = $row->last; |
350 | | - $ips_hex[$row->cuc_ip] = $row->cuc_ip_hex; |
351 | | - ++$counter; |
352 | | - } |
353 | | - // Count pinging might take some time...make sure it is there |
354 | | - wfSuppressWarnings(); |
355 | | - set_time_limit(60); |
356 | | - wfRestoreWarnings(); |
357 | | - |
358 | | - $logs = SpecialPage::getTitleFor( 'Log' ); |
359 | | - $blocklist = SpecialPage::getTitleFor( 'Ipblocklist' ); |
360 | | - $s = '<div id="checkuserresults"><ul>'; |
361 | | - foreach( $ips_edits as $ip => $edits ) { |
362 | | - $s .= '<li>'; |
363 | | - $s .= '<a href="' . |
364 | | - $this->getTitle()->escapeLocalURL( 'user='.urlencode($ip) . '&reason='.urlencode($reason) ) . '">' . |
365 | | - htmlspecialchars($ip) . '</a>'; |
366 | | - $s .= ' (<a href="' . $blockip->escapeLocalURL( 'ip='.urlencode($ip) ).'">' . |
367 | | - wfMsgHtml('blocklink') . '</a>)'; |
368 | | - if( $ips_first[$ip] == $ips_last[$ip] ) { |
369 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$ips_first[$ip]), true ) . ') '; |
370 | | - } else { |
371 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$ips_first[$ip]), true ) . |
372 | | - ' -- ' . $wgLang->timeanddate( wfTimestamp(TS_MW,$ips_last[$ip]), true ) . ') '; |
373 | | - } |
374 | | - $s .= ' <strong>[' . $edits . ']</strong>'; |
375 | | - |
376 | | - # If we get some results, it helps to know if the IP in general |
377 | | - # has a lot more edits, e.g. "tip of the iceberg"... |
378 | | - $ipedits = $dbr->estimateRowCount( 'cu_changes', '*', |
379 | | - array( 'cuc_ip_hex' => $ips_hex[$ip] ), |
380 | | - __METHOD__ ); |
381 | | - # If small enough, get a more accurate count |
382 | | - if( $ipedits <= 1000 ) { |
383 | | - $ipedits = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
384 | | - array( 'cuc_ip_hex' => $ips_hex[$ip] ), |
385 | | - __METHOD__ ); |
386 | | - } |
387 | | - if( $ipedits > $ips_edits[$ip] ) { |
388 | | - $s .= ' <i>(' . wfMsgHtml('checkuser-ipeditcount',$ipedits) . ')</i>'; |
389 | | - } |
390 | | - |
391 | | - # If this IP is blocked, give a link to the block log |
392 | | - $block = new Block(); |
393 | | - $block->fromMaster( false ); // use slaves |
394 | | - if( $block->load( $ip, 0 ) ) { |
395 | | - if( IP::isIPAddress($block->mAddress) && strpos($block->mAddress,'/') ) { |
396 | | - $userpage = Title::makeTitle( NS_USER, $block->mAddress ); |
397 | | - $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml('checkuser-blocked'), |
398 | | - 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
399 | | - $s .= ' <strong>(' . $blocklog . ' - ' . $block->mAddress . ')</strong>'; |
400 | | - } else if( $block->mAuto ) { |
401 | | - $blocklog = $this->sk->makeKnownLinkObj( $blocklist, wfMsgHtml('checkuser-blocked'), |
402 | | - 'ip=' . urlencode( "#$block->mId" ) ); |
403 | | - $s .= ' <strong>(' . $blocklog . ')</strong>'; |
404 | | - } else { |
405 | | - $userpage = Title::makeTitle( NS_USER, $ip ); |
406 | | - $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml('checkuser-blocked'), |
407 | | - 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
408 | | - $s .= ' <strong>(' . $blocklog . ')</strong>'; |
409 | | - } |
410 | | - } |
411 | | - $s .= "<div style='margin-left:5%'>"; |
412 | | - $s .= "<small>" . wfMsgExt('checkuser-toollinks',array('parseinline'),urlencode($ip)) . "</small>"; |
413 | | - $s .= "</div>"; |
414 | | - $s .= "</li>\n"; |
415 | | - } |
416 | | - $s .= '</ul></div>'; |
417 | | - } |
418 | | - $wgOut->addHTML( $s ); |
419 | | - $dbr->freeResult( $ret ); |
420 | | - } |
421 | | - |
422 | | - /** |
423 | | - * @param string $ip |
424 | | - * @param bool $xfor |
425 | | - * @param string $reason |
426 | | - * Shows all edits in Recent Changes by this IP (or range) and who made them |
427 | | - */ |
428 | | - protected function doIPEditsRequest( $ip, $xfor = false, $reason = '', $period = 0 ) { |
429 | | - global $wgUser, $wgOut, $wgLang; |
430 | | - $dbr = wfGetDB( DB_SLAVE ); |
431 | | - # Invalid IPs are passed in as a blank string |
432 | | - $ip_conds = $this->getIpConds( $dbr, $ip, $xfor ); |
433 | | - if( !$ip || $ip_conds === false ) { |
434 | | - $wgOut->addWikiMsg( 'badipaddress' ); |
435 | | - return; |
436 | | - } |
437 | | - |
438 | | - $logType = 'ipedits'; |
439 | | - if( $xfor ) { |
440 | | - $logType .= '-xff'; |
441 | | - } |
442 | | - # Record check... |
443 | | - if( !$this->addLogEntry( $logType, 'ip', $ip, $reason ) ) { |
444 | | - $wgOut->addWikiMsg( 'checkuser-log-fail' ); |
445 | | - } |
446 | | - |
447 | | - $ip_conds = $dbr->makeList( $ip_conds, LIST_AND ); |
448 | | - $time_conds = $this->getTimeConds( $period ); |
449 | | - $cu_changes = $dbr->tableName( 'cu_changes' ); |
450 | | - # Ordered in descent by timestamp. Can cause large filesorts on range scans. |
451 | | - # Check how many rows will need sorting ahead of time to see if this is too big. |
452 | | - # Also, if we only show 5000, too many will be ignored as well. |
453 | | - $index = $xfor ? 'cuc_xff_hex_time' : 'cuc_ip_hex_time'; |
454 | | - if( strpos($ip,'/') !== false ) { |
455 | | - # Quick index check only OK if no time constraint |
456 | | - if( $period ) { |
457 | | - $rangecount = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
458 | | - array( $ip_conds, $time_conds ), |
459 | | - __METHOD__, |
460 | | - array( 'USE INDEX' => $index ) ); |
461 | | - } else { |
462 | | - $rangecount = $dbr->estimateRowCount( 'cu_changes', '*', |
463 | | - array( $ip_conds ), |
464 | | - __METHOD__, |
465 | | - array( 'USE INDEX' => $index ) ); |
466 | | - } |
467 | | - // Sorting might take some time...make sure it is there |
468 | | - wfSuppressWarnings(); |
469 | | - set_time_limit(60); |
470 | | - wfRestoreWarnings(); |
471 | | - } |
472 | | - $counter = 0; |
473 | | - # See what is best to do after testing the waters... |
474 | | - if( isset($rangecount) && $rangecount > 5000 ) { |
475 | | - $use_index = $dbr->useIndexClause( $index ); |
476 | | - $sql = "SELECT cuc_ip_hex, COUNT(*) AS count, |
477 | | - MIN(cuc_timestamp) AS first, MAX(cuc_timestamp) AS last |
478 | | - FROM $cu_changes $use_index |
479 | | - WHERE $ip_conds AND $time_conds |
480 | | - GROUP BY cuc_ip_hex ORDER BY cuc_ip_hex LIMIT 5001"; |
481 | | - $ret = $dbr->query( $sql, __METHOD__ ); |
482 | | - # List out each IP that has edits |
483 | | - $s = wfMsgExt('checkuser-too-many',array('parse')); |
484 | | - $s .= '<ol>'; |
485 | | - while( $row = $ret->fetchObject() ) { |
486 | | - if( $counter >= 5000 ) { |
487 | | - $wgOut->addHTML( wfMsgExt('checkuser-limited',array('parse')) ); |
488 | | - break; |
489 | | - } |
490 | | - # Convert the IP hexes into normal form |
491 | | - if( strpos($row->cuc_ip_hex,'v6-') !==false ) { |
492 | | - $ip = substr( $row->cuc_ip_hex, 3 ); |
493 | | - $ip = IP::HextoOctet( $ip ); |
494 | | - } else { |
495 | | - $ip = long2ip( wfBaseConvert($row->cuc_ip_hex, 16, 10, 8) ); |
496 | | - } |
497 | | - $s .= '<li><a href="'. |
498 | | - $this->getTitle()->escapeLocalURL( 'user='.urlencode($ip).'&reason='.urlencode($reason).'&checktype=subipusers' ) . |
499 | | - '">'.$ip.'</a>'; |
500 | | - if( $row->first == $row->last ) { |
501 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$row->first), true ) . ') '; |
502 | | - } else { |
503 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$row->first), true ) . |
504 | | - ' -- ' . $wgLang->timeanddate( wfTimestamp(TS_MW,$row->last), true ) . ') '; |
505 | | - } |
506 | | - $s .= " [<strong>" . $row->count . "</strong>]</li>\n"; |
507 | | - ++$counter; |
508 | | - } |
509 | | - $s .= '</ol>'; |
510 | | - $dbr->freeResult( $ret ); |
511 | | - |
512 | | - $wgOut->addHTML( $s ); |
513 | | - return; |
514 | | - } else if( isset($rangecount) && !$rangecount ) { |
515 | | - $s = $this->noMatchesMessage($ip)."\n"; |
516 | | - $wgOut->addHTML( $s ); |
517 | | - return; |
518 | | - } |
519 | | - # OK, do the real query... |
520 | | - $use_index = $dbr->useIndexClause( $index ); |
521 | | - $sql = "SELECT cuc_namespace,cuc_title,cuc_user,cuc_user_text,cuc_comment,cuc_actiontext, |
522 | | - cuc_timestamp,cuc_minor,cuc_page_id,cuc_type,cuc_this_oldid,cuc_last_oldid,cuc_ip,cuc_xff,cuc_agent |
523 | | - FROM $cu_changes $use_index WHERE $ip_conds AND $time_conds ORDER BY cuc_timestamp DESC LIMIT 5001"; |
524 | | - $ret = $dbr->query( $sql, __METHOD__ ); |
525 | | - |
526 | | - if( !$dbr->numRows( $ret ) ) { |
527 | | - $s = $this->noMatchesMessage($ip)."\n"; |
528 | | - } else { |
529 | | - # Cache common messages |
530 | | - $this->preCacheMessages(); |
531 | | - # Try to optimize this query |
532 | | - $lb = new LinkBatch; |
533 | | - while( $row = $ret->fetchObject() ) { |
534 | | - $userText = str_replace( ' ', '_', $row->cuc_user_text ); |
535 | | - $lb->add( $row->cuc_namespace, $row->cuc_title ); |
536 | | - $lb->add( NS_USER, $userText ); |
537 | | - $lb->add( NS_USER_TALK, $userText ); |
538 | | - } |
539 | | - $lb->execute(); |
540 | | - $ret->seek( 0 ); |
541 | | - # List out the edits |
542 | | - $s = '<div id="checkuserresults">'; |
543 | | - while( $row = $ret->fetchObject() ) { |
544 | | - if( $counter >= 5000 ) { |
545 | | - $wgOut->addHTML( wfMsgExt('checkuser-limited',array('parse')) ); |
546 | | - break; |
547 | | - } |
548 | | - $s .= $this->CUChangesLine( $row, $reason ); |
549 | | - ++$counter; |
550 | | - } |
551 | | - $s .= '</ul></div>'; |
552 | | - $dbr->freeResult( $ret ); |
553 | | - } |
554 | | - |
555 | | - $wgOut->addHTML( $s ); |
556 | | - } |
557 | | - |
558 | | - /** |
559 | | - * @param string $nuser |
560 | | - * @param string $reason |
561 | | - * Shows all edits in Recent Changes by this user |
562 | | - */ |
563 | | - protected function doUserEditsRequest( $user, $reason = '', $period = 0 ) { |
564 | | - global $wgUser, $wgOut, $wgLang; |
565 | | - |
566 | | - $userTitle = Title::newFromText( $user, NS_USER ); |
567 | | - if( !is_null( $userTitle ) ) { |
568 | | - // normalize the username |
569 | | - $user = $userTitle->getText(); |
570 | | - } |
571 | | - # IPs are passed in as a blank string |
572 | | - if( !$user ) { |
573 | | - $wgOut->addWikiMsg( 'nouserspecified' ); |
574 | | - return; |
575 | | - } |
576 | | - # Get ID, works better than text as user may have been renamed |
577 | | - $user_id = User::idFromName($user); |
578 | | - |
579 | | - # If user is not IP or nonexistent |
580 | | - if( !$user_id ) { |
581 | | - $s = wfMsgExt('nosuchusershort',array('parse'),$user); |
582 | | - $wgOut->addHTML( $s ); |
583 | | - return; |
584 | | - } |
585 | | - |
586 | | - # Record check... |
587 | | - if( !$this->addLogEntry( 'useredits', 'user', $user, $reason, $user_id ) ) { |
588 | | - $wgOut->addHTML( '<p>'.wfMsgHtml('checkuser-log-fail').'</p>' ); |
589 | | - } |
590 | | - |
591 | | - $dbr = wfGetDB( DB_SLAVE ); |
592 | | - $user_cond = "cuc_user = '$user_id'"; |
593 | | - $time_conds = $this->getTimeConds( $period ); |
594 | | - $cu_changes = $dbr->tableName( 'cu_changes' ); |
595 | | - # Ordered in descent by timestamp. Causes large filesorts if there are many edits. |
596 | | - # Check how many rows will need sorting ahead of time to see if this is too big. |
597 | | - # If it is, sort by IP,time to avoid the filesort. |
598 | | - if( $period ) { |
599 | | - $count = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
600 | | - array( $user_cond, $time_conds ), |
601 | | - __METHOD__, |
602 | | - array( 'USE INDEX' => 'cuc_user_ip_time' ) ); |
603 | | - } else { |
604 | | - $count = $dbr->estimateRowCount( 'cu_changes', '*', |
605 | | - array( $user_cond, $time_conds ), |
606 | | - __METHOD__, |
607 | | - array( 'USE INDEX' => 'cuc_user_ip_time' ) ); |
608 | | - } |
609 | | - # Cache common messages |
610 | | - $this->preCacheMessages(); |
611 | | - # See what is best to do after testing the waters... |
612 | | - if( $count > 5000 ) { |
613 | | - $wgOut->addHTML( wfMsgExt('checkuser-limited',array('parse')) ); |
614 | | - $use_index = $dbr->useIndexClause( 'cuc_user_ip_time' ); |
615 | | - $sql = "SELECT * FROM $cu_changes $use_index |
616 | | - WHERE $user_cond AND $time_conds |
617 | | - ORDER BY cuc_ip ASC, cuc_timestamp DESC LIMIT 5000"; |
618 | | - $ret = $dbr->query( $sql, __METHOD__ ); |
619 | | - # Try to optimize this query |
620 | | - $lb = new LinkBatch; |
621 | | - while( $row = $ret->fetchObject() ) { |
622 | | - $lb->add( $row->cuc_namespace, $row->cuc_title ); |
623 | | - } |
624 | | - $lb->execute(); |
625 | | - $ret->seek( 0 ); |
626 | | - $s = ''; |
627 | | - while( $row = $ret->fetchObject() ) { |
628 | | - if( !$ip = htmlspecialchars($row->cuc_ip) ) { |
629 | | - continue; |
630 | | - } |
631 | | - if( !isset($lastIP) ) { |
632 | | - $lastIP = $row->cuc_ip; |
633 | | - $s .= "\n<h2>$ip</h2>\n<div class=\"special\">"; |
634 | | - } else if( $lastIP != $row->cuc_ip ) { |
635 | | - $s .= "</ul></div>\n<h2>$ip</h2>\n<div class=\"special\">"; |
636 | | - $lastIP = $row->cuc_ip; |
637 | | - unset($this->lastdate); // start over |
638 | | - } |
639 | | - $s .= $this->CUChangesLine( $row, $reason ); |
640 | | - } |
641 | | - $s .= '</ul></div>'; |
642 | | - $dbr->freeResult( $ret ); |
643 | | - |
644 | | - $wgOut->addHTML( $s ); |
645 | | - return; |
646 | | - } |
647 | | - // Sorting might take some time...make sure it is there |
648 | | - wfSuppressWarnings(); |
649 | | - set_time_limit(60); |
650 | | - wfRestoreWarnings(); |
651 | | - # OK, do the real query... |
652 | | - $use_index = $dbr->useIndexClause( 'cuc_user_ip_time' ); |
653 | | - $sql = "SELECT * FROM $cu_changes $use_index |
654 | | - WHERE $user_cond AND $time_conds ORDER BY cuc_timestamp DESC LIMIT 5000"; |
655 | | - $ret = $dbr->query( $sql, __METHOD__ ); |
656 | | - |
657 | | - if( !$dbr->numRows( $ret ) ) { |
658 | | - $s = $this->noMatchesMessage($user)."\n"; |
659 | | - } else { |
660 | | - # Try to optimize this query |
661 | | - $lb = new LinkBatch; |
662 | | - while( $row = $ret->fetchObject() ) { |
663 | | - $lb->add( $row->cuc_namespace, $row->cuc_title ); |
664 | | - } |
665 | | - $lb->execute(); |
666 | | - $ret->seek( 0 ); |
667 | | - # List out the edits |
668 | | - $s = '<div id="checkuserresults">'; |
669 | | - while( $row = $ret->fetchObject() ) { |
670 | | - $s .= $this->CUChangesLine( $row, $reason ); |
671 | | - } |
672 | | - $s .= '</ul></div>'; |
673 | | - $dbr->freeResult( $ret ); |
674 | | - } |
675 | | - |
676 | | - $wgOut->addHTML( $s ); |
677 | | - } |
678 | | - |
679 | | - /** |
680 | | - * @param string $ip |
681 | | - * @param bool $xfor |
682 | | - * @param string $reason |
683 | | - * @param int $period |
684 | | - * @param string $tag |
685 | | - * @param string $talkTag |
686 | | - * Lists all users in recent changes who used an IP, newest to oldest down |
687 | | - * Outputs usernames, latest and earliest found edit date, and count |
688 | | - * List unique IPs used for each user in time order, list corresponding user agent |
689 | | - */ |
690 | | - protected function doIPUsersRequest( $ip, $xfor = false, $reason = '', $period = 0, $tag='', $talkTag='' ) { |
691 | | - global $wgUser, $wgOut, $wgLang; |
692 | | - $dbr = wfGetDB( DB_SLAVE ); |
693 | | - # Invalid IPs are passed in as a blank string |
694 | | - $ip_conds = $this->getIpConds( $dbr, $ip, $xfor ); |
695 | | - if( !$ip || $ip_conds === false ) { |
696 | | - $wgOut->addWikiMsg( 'badipaddress' ); |
697 | | - return; |
698 | | - } |
699 | | - |
700 | | - $logType = 'ipusers'; |
701 | | - if( $xfor ) { |
702 | | - $logType .= '-xff'; |
703 | | - } |
704 | | - # Log the check... |
705 | | - if( !$this->addLogEntry( $logType, 'ip', $ip, $reason ) ) { |
706 | | - $wgOut->addHTML( '<p>'.wfMsgHtml('checkuser-log-fail').'</p>' ); |
707 | | - } |
708 | | - |
709 | | - $ip_conds = $dbr->makeList( $ip_conds, LIST_AND ); |
710 | | - $time_conds = $this->getTimeConds( $period ); |
711 | | - $cu_changes = $dbr->tableName( 'cu_changes' ); |
712 | | - $index = $xfor ? 'cuc_xff_hex_time' : 'cuc_ip_hex_time'; |
713 | | - # Ordered in descent by timestamp. Can cause large filesorts on range scans. |
714 | | - # Check how many rows will need sorting ahead of time to see if this is too big. |
715 | | - if( strpos($ip,'/') !==false ) { |
716 | | - # Quick index check only OK if no time constraint |
717 | | - if( $period ) { |
718 | | - $rangecount = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
719 | | - array( $ip_conds, $time_conds ), |
720 | | - __METHOD__, |
721 | | - array( 'USE INDEX' => $index ) ); |
722 | | - } else { |
723 | | - $rangecount = $dbr->estimateRowCount( 'cu_changes', '*', |
724 | | - array( $ip_conds ), |
725 | | - __METHOD__, |
726 | | - array( 'USE INDEX' => $index ) ); |
727 | | - } |
728 | | - // Sorting might take some time...make sure it is there |
729 | | - wfSuppressWarnings(); |
730 | | - set_time_limit(120); |
731 | | - wfRestoreWarnings(); |
732 | | - } |
733 | | - // Are there too many edits? |
734 | | - if( isset($rangecount) && $rangecount > 10000 ) { |
735 | | - $use_index = $dbr->useIndexClause( $index ); |
736 | | - $sql = "SELECT cuc_ip_hex, COUNT(*) AS count, |
737 | | - MIN(cuc_timestamp) AS first, MAX(cuc_timestamp) AS last |
738 | | - FROM $cu_changes $use_index WHERE $ip_conds AND $time_conds |
739 | | - GROUP BY cuc_ip_hex ORDER BY cuc_ip_hex LIMIT 5001"; |
740 | | - $ret = $dbr->query( $sql, __METHOD__ ); |
741 | | - # List out each IP that has edits |
742 | | - $s = '<h5>' . wfMsg('checkuser-too-many') . '</h5>'; |
743 | | - $s .= '<ol>'; |
744 | | - $counter = 0; |
745 | | - while( $row = $ret->fetchObject() ) { |
746 | | - if( $counter >= 5000 ) { |
747 | | - $wgOut->addHTML( wfMsgExt('checkuser-limited',array('parse')) ); |
748 | | - break; |
749 | | - } |
750 | | - # Convert the IP hexes into normal form |
751 | | - if( strpos($row->cuc_ip_hex,'v6-') !==false ) { |
752 | | - $ip = substr( $row->cuc_ip_hex, 3 ); |
753 | | - $ip = IP::HextoOctet( $ip ); |
754 | | - } else { |
755 | | - $ip = long2ip( wfBaseConvert($row->cuc_ip_hex, 16, 10, 8) ); |
756 | | - } |
757 | | - $s .= '<li><a href="'. |
758 | | - $this->getTitle()->escapeLocalURL( 'user='.urlencode($ip).'&reason='.urlencode($reason).'&checktype=subipusers' ) . |
759 | | - '">'.$ip.'</a>'; |
760 | | - if( $row->first == $row->last ) { |
761 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$row->first), true ) . ') '; |
762 | | - } else { |
763 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$row->first), true ) . |
764 | | - ' -- ' . $wgLang->timeanddate( wfTimestamp(TS_MW,$row->last), true ) . ') '; |
765 | | - } |
766 | | - $s .= " [<strong>" . $row->count . "</strong>]</li>\n"; |
767 | | - ++$counter; |
768 | | - } |
769 | | - $s .= '</ol>'; |
770 | | - $dbr->freeResult( $ret ); |
771 | | - |
772 | | - $wgOut->addHTML( $s ); |
773 | | - return; |
774 | | - } else if( isset($rangecount) && !$rangecount ) { |
775 | | - $s = $this->noMatchesMessage($ip)."\n"; |
776 | | - $wgOut->addHTML( $s ); |
777 | | - return; |
778 | | - } |
779 | | - |
780 | | - global $wgMemc; |
781 | | - # OK, do the real query... |
782 | | - $use_index = $dbr->useIndexClause( $index ); |
783 | | - $sql = "SELECT cuc_user_text, cuc_timestamp, cuc_user, cuc_ip, cuc_agent, cuc_xff |
784 | | - FROM $cu_changes $use_index WHERE $ip_conds AND $time_conds |
785 | | - ORDER BY cuc_timestamp DESC LIMIT 10000"; |
786 | | - $ret = $dbr->query( $sql, __METHOD__ ); |
787 | | - |
788 | | - $users_first = $users_last = $users_edits = $users_ids = array(); |
789 | | - if( !$dbr->numRows( $ret ) ) { |
790 | | - $s = $this->noMatchesMessage($ip)."\n"; |
791 | | - } else { |
792 | | - global $wgAuth; |
793 | | - while( ($row = $dbr->fetchObject($ret) ) != false ) { |
794 | | - if( !array_key_exists( $row->cuc_user_text, $users_edits ) ) { |
795 | | - $users_last[$row->cuc_user_text] = $row->cuc_timestamp; |
796 | | - $users_edits[$row->cuc_user_text] = 0; |
797 | | - $users_ids[$row->cuc_user_text] = $row->cuc_user; |
798 | | - $users_infosets[$row->cuc_user_text] = array(); |
799 | | - $users_agentsets[$row->cuc_user_text] = array(); |
800 | | - } |
801 | | - $users_edits[$row->cuc_user_text] += 1; |
802 | | - $users_first[$row->cuc_user_text] = $row->cuc_timestamp; |
803 | | - # Treat blank or NULL xffs as empty strings |
804 | | - $xff = empty($row->cuc_xff) ? null : $row->cuc_xff; |
805 | | - $xff_ip_combo = array( $row->cuc_ip, $xff ); |
806 | | - # Add this IP/XFF combo for this username if it's not already there |
807 | | - if( !in_array($xff_ip_combo,$users_infosets[$row->cuc_user_text]) ) { |
808 | | - $users_infosets[$row->cuc_user_text][] = $xff_ip_combo; |
809 | | - } |
810 | | - # Add this agent string if it's not already there; 10 max. |
811 | | - if( count($users_agentsets[$row->cuc_user_text]) < 10 ) { |
812 | | - if( !in_array($row->cuc_agent,$users_agentsets[$row->cuc_user_text]) ) { |
813 | | - $users_agentsets[$row->cuc_user_text][] = $row->cuc_agent; |
814 | | - } |
815 | | - } |
816 | | - } |
817 | | - $dbr->freeResult( $ret ); |
818 | | - |
819 | | - $logs = SpecialPage::getTitleFor( 'Log' ); |
820 | | - $blocklist = SpecialPage::getTitleFor( 'Ipblocklist' ); |
821 | | - |
822 | | - $action = $this->getTitle()->escapeLocalUrl( 'action=block' ); |
823 | | - $s = "<form name='checkuserblock' id='checkuserblock' action=\"$action\" method='post'>"; |
824 | | - $s .= '<div id="checkuserresults"><ul>'; |
825 | | - foreach( $users_edits as $name => $count ) { |
826 | | - $s .= '<li>'; |
827 | | - $s .= Xml::check( 'users[]', false, array( 'value' => $name ) ) . ' '; |
828 | | - # Load user object |
829 | | - $user = User::newFromName( $name, false ); |
830 | | - # Add user tool links |
831 | | - $s .= $this->sk->userLink( -1 , $name ) . $this->sk->userToolLinks( -1 , $name ); |
832 | | - # Add CheckUser link |
833 | | - $s .= ' (<a href="' . $this->getTitle()->escapeLocalURL( 'user='.urlencode($name) . |
834 | | - '&reason='.urlencode($reason) ) . '">' . wfMsgHtml('checkuser-check') . '</a>)'; |
835 | | - # Show edit time range |
836 | | - if( $users_first[$name] == $users_last[$name] ) { |
837 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$users_first[$name]), true ) . ') '; |
838 | | - } else { |
839 | | - $s .= ' (' . $wgLang->timeanddate( wfTimestamp(TS_MW,$users_first[$name]), true ) . |
840 | | - ' -- ' . $wgLang->timeanddate( wfTimestamp(TS_MW,$users_last[$name]), true ) . ') '; |
841 | | - } |
842 | | - # Total edit count |
843 | | - $s .= ' [<strong>' . $count . '</strong>]<br />'; |
844 | | - # Check if this user or IP is blocked. If so, give a link to the block log... |
845 | | - $block = new Block(); |
846 | | - $block->fromMaster( false ); // use slaves |
847 | | - $ip = IP::isIPAddress( $name ) ? $name : ''; |
848 | | - $flags = array(); |
849 | | - if( $block->load( $ip, $users_ids[$name] ) ) { |
850 | | - // Range blocked? |
851 | | - if( IP::isIPAddress($block->mAddress) && strpos($block->mAddress,'/') ) { |
852 | | - $userpage = Title::makeTitle( NS_USER, $block->mAddress ); |
853 | | - $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml('checkuser-blocked'), |
854 | | - 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
855 | | - $flags[] = '<strong>(' . $blocklog . ' - ' . $block->mAddress . ')</strong>'; |
856 | | - // Auto blocked? |
857 | | - } else if( $block->mAuto ) { |
858 | | - $blocklog = $this->sk->makeKnownLinkObj( $blocklist, |
859 | | - wfMsgHtml('checkuser-blocked'), 'ip=' . urlencode( "#{$block->mId}" ) ); |
860 | | - $flags[] = '<strong>(' . $blocklog . ')</strong>'; |
861 | | - } else { |
862 | | - $userpage = Title::makeTitle( NS_USER, $name ); |
863 | | - $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml('checkuser-blocked'), |
864 | | - 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
865 | | - $flags[] = '<strong>(' . $blocklog . ')</strong>'; |
866 | | - } |
867 | | - // IP that is blocked on all wikis? |
868 | | - } else if( $ip === $name && $user->isBlockedGlobally( $ip ) ) { |
869 | | - $flags[] = '<strong>(' . wfMsgHtml('checkuser-gblocked') . ')</strong>'; |
870 | | - } else if( self::userWasBlocked( $name ) ) { |
871 | | - $userpage = Title::makeTitle( NS_USER, $name ); |
872 | | - $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml('checkuser-wasblocked'), |
873 | | - 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
874 | | - $flags[] = '<strong>(' . $blocklog . ')</strong>'; |
875 | | - } |
876 | | - # Show if account is local only |
877 | | - $authUser = $wgAuth->getUserInstance( $user ); |
878 | | - if( $user->getId() && $authUser->getId() === 0 ) { |
879 | | - $flags[] = '<strong>(' . wfMsgHtml('checkuser-localonly') . ')</strong>'; |
880 | | - } |
881 | | - # Check for extra user rights... |
882 | | - if( $users_ids[$name] ) { |
883 | | - $user = User::newFromId( $users_ids[$name] ); |
884 | | - if( $user->isLocked() ) { |
885 | | - $flags[] = '<b>(' . wfMsgHtml('checkuser-locked') . ')</b>'; |
886 | | - } |
887 | | - $list = array(); |
888 | | - foreach( $user->getGroups() as $group ) { |
889 | | - $list[] = self::buildGroupLink( $group ); |
890 | | - } |
891 | | - $groups = $wgLang->commaList( $list ); |
892 | | - if( $groups ) { |
893 | | - $flags[] = '<i>(' . $groups . ')</i>'; |
894 | | - } |
895 | | - } |
896 | | - # Check how many accounts the user made recently? |
897 | | - if( $ip ) { |
898 | | - $key = wfMemcKey( 'acctcreate', 'ip', $ip ); |
899 | | - $count = intval( $wgMemc->get( $key ) ); |
900 | | - if( $count ) { |
901 | | - $flags[] = '<strong>[' . wfMsgExt( 'checkuser-accounts', 'parsemag', $wgLang->formatNum( $count ) ) . ']</strong>'; |
902 | | - } |
903 | | - } |
904 | | - $s .= implode(' ',$flags); |
905 | | - $s .= '<ol>'; |
906 | | - # List out each IP/XFF combo for this username |
907 | | - for( $i = (count($users_infosets[$name]) - 1); $i >= 0; $i-- ) { |
908 | | - $set = $users_infosets[$name][$i]; |
909 | | - # IP link |
910 | | - $s .= '<li>'; |
911 | | - $s .= '<a href="'.$this->getTitle()->escapeLocalURL( 'user='.urlencode($set[0]) ).'">'.htmlspecialchars($set[0]).'</a>'; |
912 | | - # XFF string, link to /xff search |
913 | | - if( $set[1] ) { |
914 | | - # Flag our trusted proxies |
915 | | - list($client,$trusted) = efGetClientIPfromXFF($set[1],$set[0]); |
916 | | - $c = $trusted ? '#F0FFF0' : '#FFFFCC'; |
917 | | - $s .= ' <span style="background-color: '.$c.'"><strong>XFF</strong>: '; |
918 | | - $s .= $this->sk->makeKnownLinkObj( $this->getTitle(), |
919 | | - htmlspecialchars( $set[1] ), |
920 | | - "user=" . urlencode( $client ) . "/xff" )."</span>"; |
921 | | - } |
922 | | - $s .= "</li>\n"; |
923 | | - } |
924 | | - $s .= '</ol><br /><ol>'; |
925 | | - # List out each agent for this username |
926 | | - for( $i = (count($users_agentsets[$name]) - 1); $i >= 0; $i-- ) { |
927 | | - $agent = $users_agentsets[$name][$i]; |
928 | | - $s .= "<li><i>" . htmlspecialchars($agent) . "</i></li>\n"; |
929 | | - } |
930 | | - $s .= '</ol>'; |
931 | | - $s .= '</li>'; |
932 | | - } |
933 | | - $s .= "</ul></div>\n"; |
934 | | - if( $wgUser->isAllowed('block') && !$wgUser->isBlocked() ) { |
935 | | - $s .= "<fieldset>\n"; |
936 | | - $s .= "<legend>" . wfMsgHtml('checkuser-massblock') . "</legend>\n"; |
937 | | - $s .= "<p>" . wfMsgExt('checkuser-massblock-text',array('parseinline')) . "</p>\n"; |
938 | | - $s .= '<table><tr>' . |
939 | | - '<td>' . Xml::check( 'usetag', false, array('id' => 'usetag') ) . '</td>' . |
940 | | - '<td>' . Xml::label( wfMsgHtml( "checkuser-blocktag" ), 'usetag' ) . '</td>' . |
941 | | - '<td>' . Xml::input( 'tag', 46, $tag, array('id' => 'blocktag') ) . '</td>' . |
942 | | - '</tr><tr>' . |
943 | | - '<td>' . Xml::check( 'usettag', false, array('id' => 'usettag') ) . '</td>' . |
944 | | - '<td>' . Xml::label( wfMsgHtml( "checkuser-blocktag-talk" ), 'usettag' ) . '</td>' . |
945 | | - '<td>' . Xml::input( 'talktag', 46, $talkTag, array('id' => 'talktag') ).'</td>'. |
946 | | - '</tr></table>'; |
947 | | - $s .= "<p>" . wfMsgHtml( "checkuser-reason" ) . ' '; |
948 | | - $s .= Xml::input( 'blockreason', 46, '', array( 'maxlength' => '150', 'id' => 'blockreason' ) ); |
949 | | - $s .= ' ' . Xml::submitButton( wfMsgHtml('checkuser-massblock-commit'), |
950 | | - array('id' => 'checkuserblocksubmit','name' => 'checkuserblock') ) . "</p>\n"; |
951 | | - $s .= "</fieldset>\n"; |
952 | | - } |
953 | | - $s .= '</form>'; |
954 | | - } |
955 | | - |
956 | | - $wgOut->addHTML( $s ); |
957 | | - } |
958 | | - |
959 | | - /** |
960 | | - * @param $row |
961 | | - * @return a streamlined recent changes line with IP data |
962 | | - */ |
963 | | - protected function CUChangesLine( $row, $reason ) { |
964 | | - global $wgLang; |
965 | | - # Add date headers |
966 | | - $date = $wgLang->date( wfTimestamp(TS_MW,$row->cuc_timestamp), true, true ); |
967 | | - if( !isset($this->lastdate) ) { |
968 | | - $this->lastdate = $date; |
969 | | - $line = "\n<h4>$date</h4>\n<ul class=\"special\">"; |
970 | | - } else if( $date != $this->lastdate ) { |
971 | | - $line = "</ul>\n<h4>$date</h4>\n<ul class=\"special\">"; |
972 | | - $this->lastdate = $date; |
973 | | - } else { |
974 | | - $line = ''; |
975 | | - } |
976 | | - $line .= "<li>"; |
977 | | - # Create diff/hist/page links |
978 | | - $line .= $this->getLinksFromRow( $row ); |
979 | | - # Show date |
980 | | - $line .= ' . . ' . $wgLang->time( wfTimestamp(TS_MW,$row->cuc_timestamp), true, true ) . ' . . '; |
981 | | - # Userlinks |
982 | | - $line .= $this->sk->userLink( $row->cuc_user, $row->cuc_user_text ); |
983 | | - $line .= $this->sk->userToolLinks( $row->cuc_user, $row->cuc_user_text ); |
984 | | - # Action text, hackish ... |
985 | | - if( $row->cuc_actiontext ) |
986 | | - $line .= ' ' . $this->sk->formatComment( $row->cuc_actiontext ) . ' '; |
987 | | - # Comment |
988 | | - $line .= $this->sk->commentBlock( $row->cuc_comment ); |
989 | | - |
990 | | - $cuTitle = SpecialPage::getTitleFor( 'CheckUser' ); |
991 | | - $line .= '<br /> <small>'; |
992 | | - # IP |
993 | | - $line .= ' <strong>IP</strong>: '.$this->sk->makeKnownLinkObj( $cuTitle, |
994 | | - htmlspecialchars( $row->cuc_ip ), |
995 | | - "user=".urlencode( $row->cuc_ip ).'&reason='.urlencode($reason) ); |
996 | | - # XFF |
997 | | - if( $row->cuc_xff !=null ) { |
998 | | - # Flag our trusted proxies |
999 | | - list($client,$trusted) = efGetClientIPfromXFF($row->cuc_xff,$row->cuc_ip); |
1000 | | - $c = $trusted ? '#F0FFF0' : '#FFFFCC'; |
1001 | | - $line .= ' <span class="mw-checkuser-xff" style="background-color: '.$c.'">'. |
1002 | | - '<strong>XFF</strong>: '; |
1003 | | - $line .= $this->sk->makeKnownLinkObj( $cuTitle, |
1004 | | - htmlspecialchars( $row->cuc_xff ), |
1005 | | - "user=".urlencode($client)."/xff&reason=".urlencode($reason) )."</span>"; |
1006 | | - } |
1007 | | - # User agent |
1008 | | - $line .= ' <span class="mw-checkuser-agent" style="color:#888;">' . |
1009 | | - htmlspecialchars( $row->cuc_agent )."</span>"; |
1010 | | - |
1011 | | - $line .= "</small></li>\n"; |
1012 | | - |
1013 | | - return $line; |
1014 | | - } |
1015 | | - |
1016 | | - /** |
1017 | | - * @param $row |
1018 | | - * @create diff/hist/page link |
1019 | | - */ |
1020 | | - protected function getLinksFromRow( $row ) { |
1021 | | - // Log items (old format) and events to logs |
1022 | | - if( $row->cuc_type == RC_LOG && $row->cuc_namespace == NS_SPECIAL ) { |
1023 | | - list( $specialName, $logtype ) = SpecialPage::resolveAliasWithSubpage( $row->cuc_title ); |
1024 | | - $logname = LogPage::logName( $logtype ); |
1025 | | - $title = Title::makeTitle( $row->cuc_namespace, $row->cuc_title ); |
1026 | | - $links = '(' . $this->sk->makeKnownLinkObj( $title, $logname ) . ')'; |
1027 | | - // Log items |
1028 | | - } elseif( $row->cuc_type == RC_LOG ) { |
1029 | | - $title = Title::makeTitle( $row->cuc_namespace, $row->cuc_title ); |
1030 | | - $links = '(' . $this->sk->makeKnownLinkObj( SpecialPage::getTitleFor( 'Log' ), $this->message['log'], |
1031 | | - wfArrayToCGI( array('page' => $title->getPrefixedText() ) ) ) . ')'; |
1032 | | - } else { |
1033 | | - $title = Title::makeTitle( $row->cuc_namespace, $row->cuc_title ); |
1034 | | - # New pages |
1035 | | - if( $row->cuc_type == RC_NEW ) { |
1036 | | - $links = '(' . $this->message['diff'] . ') '; |
1037 | | - } else { |
1038 | | - # Diff link |
1039 | | - $links = ' (' . $this->sk->makeKnownLinkObj( $title, $this->message['diff'], |
1040 | | - wfArrayToCGI( array( |
1041 | | - 'curid' => $row->cuc_page_id, |
1042 | | - 'diff' => $row->cuc_this_oldid, |
1043 | | - 'oldid' => $row->cuc_last_oldid ) ) ) . ') '; |
1044 | | - } |
1045 | | - # History link |
1046 | | - $links .= ' (' . $this->sk->makeKnownLinkObj( $title, $this->message['hist'], |
1047 | | - wfArrayToCGI( array( |
1048 | | - 'curid' => $row->cuc_page_id, |
1049 | | - 'action' => 'history' ) ) ) . ') . . '; |
1050 | | - # Some basic flags |
1051 | | - if( $row->cuc_type == RC_NEW ) |
1052 | | - $links .= '<span class="newpage">' . $this->message['newpageletter'] . '</span>'; |
1053 | | - if( $row->cuc_minor ) |
1054 | | - $links .= '<span class="minor">' . $this->message['minoreditletter'] . '</span>'; |
1055 | | - # Page link |
1056 | | - $links .= ' ' . $this->sk->makeLinkObj( $title ); |
1057 | | - } |
1058 | | - return $links; |
1059 | | - } |
1060 | | - |
1061 | | - protected static function userWasBlocked( $name ) { |
1062 | | - $userpage = Title::makeTitle( NS_USER, $name ); |
1063 | | - return wfGetDB( DB_SLAVE )->selectField( 'logging', '1', |
1064 | | - array( 'log_type' => array('block','suppress'), |
1065 | | - 'log_action' => 'block', |
1066 | | - 'log_namespace' => $userpage->getNamespace(), |
1067 | | - 'log_title' => $userpage->getDBKey() ), |
1068 | | - __METHOD__, |
1069 | | - array( 'USE INDEX' => 'page_time' ) ); |
1070 | | - } |
1071 | | - |
1072 | | - /** |
1073 | | - * Format a link to a group description page |
1074 | | - * |
1075 | | - * @param string $group |
1076 | | - * @return string |
1077 | | - */ |
1078 | | - protected static function buildGroupLink( $group ) { |
1079 | | - static $cache = array(); |
1080 | | - if( !isset( $cache[$group] ) ) |
1081 | | - $cache[$group] = User::makeGroupLinkHtml( $group, User::getGroupMember( $group ) ); |
1082 | | - return $cache[$group]; |
1083 | | - } |
1084 | | - |
1085 | | - /** |
1086 | | - * @param Database $db |
1087 | | - * @param string $ip |
1088 | | - * @param string $xfor |
1089 | | - * @return mixed array/false conditions |
1090 | | - */ |
1091 | | - protected function getIpConds( $db, $ip, $xfor = false ) { |
1092 | | - $type = ( $xfor ) ? 'xff' : 'ip'; |
1093 | | - // IPv4 CIDR, 16-32 bits |
1094 | | - if( preg_match( '#^(\d+\.\d+\.\d+\.\d+)/(\d+)$#', $ip, $matches ) ) { |
1095 | | - if( $matches[2] < 16 || $matches[2] > 32 ) |
1096 | | - return false; // invalid |
1097 | | - list( $start, $end ) = IP::parseRange( $ip ); |
1098 | | - return array( 'cuc_'.$type.'_hex BETWEEN ' . $db->addQuotes( $start ) . ' AND ' . $db->addQuotes( $end ) ); |
1099 | | - } else if( preg_match( '#^\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}/(\d+)$#', $ip, $matches ) ) { |
1100 | | - // IPv6 CIDR, 96-128 bits |
1101 | | - if( $matches[1] < 96 || $matches[1] > 128 ) |
1102 | | - return false; // invalid |
1103 | | - list( $start, $end ) = IP::parseRange6( $ip ); |
1104 | | - return array( 'cuc_'.$type.'_hex BETWEEN ' . $db->addQuotes( $start ) . ' AND ' . $db->addQuotes( $end ) ); |
1105 | | - } else if( preg_match( '#^(\d+)\.(\d+)\.(\d+)\.(\d+)$#', $ip ) ) { |
1106 | | - // 32 bit IPv4 |
1107 | | - $ip_hex = IP::toHex( $ip ); |
1108 | | - return array( 'cuc_'.$type.'_hex' => $ip_hex ); |
1109 | | - } else if( preg_match( '#^\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}$#', $ip ) ) { |
1110 | | - // 128 bit IPv6 |
1111 | | - $ip_hex = IP::toHex( $ip ); |
1112 | | - return array( 'cuc_'.$type.'_hex' => $ip_hex ); |
1113 | | - } |
1114 | | - // throw away this query, incomplete IP, these don't get through the entry point anyway |
1115 | | - return false; // invalid |
1116 | | - } |
1117 | | - |
1118 | | - protected function getTimeConds( $period ) { |
1119 | | - if( !$period ) { |
1120 | | - return "1 = 1"; |
1121 | | - } |
1122 | | - $dbr = wfGetDB( DB_SLAVE ); |
1123 | | - $cutoff_unixtime = time() - ($period * 24 * 3600); |
1124 | | - $cutoff_unixtime = $cutoff_unixtime - ($cutoff_unixtime % 86400); |
1125 | | - $cutoff = $dbr->addQuotes( $dbr->timestamp( $cutoff_unixtime ) ); |
1126 | | - return "cuc_timestamp > $cutoff"; |
1127 | | - } |
1128 | | - |
1129 | | - protected function showLog() { |
1130 | | - global $wgRequest, $wgOut; |
1131 | | - $type = $wgRequest->getVal( 'cuSearchType' ); |
1132 | | - $target = $wgRequest->getVal( 'cuSearch' ); |
1133 | | - $year = $wgRequest->getIntOrNull( 'year' ); |
1134 | | - $month = $wgRequest->getIntOrNull( 'month' ); |
1135 | | - $error = false; |
1136 | | - $dbr = wfGetDB( DB_SLAVE ); |
1137 | | - $searchConds = false; |
1138 | | - |
1139 | | - $wgOut->setPageTitle( wfMsg( 'checkuser-log' ) ); |
1140 | | - |
1141 | | - $wgOut->addHTML( $this->sk->makeKnownLinkObj( $this->getTitle(), wfMsgHtml( 'checkuser-log-return' ) ) ); |
1142 | | - |
1143 | | - if ( $type === null ) { |
1144 | | - $type = 'target'; |
1145 | | - } elseif ( $type == 'initiator' ) { |
1146 | | - $user = User::newFromName( $target ); |
1147 | | - if ( !$user || !$user->getID() ) { |
1148 | | - $error = 'checkuser-user-nonexistent'; |
1149 | | - } else { |
1150 | | - $searchConds = array( 'cul_user' => $user->getID() ); |
1151 | | - } |
1152 | | - } else /* target */ { |
1153 | | - $type = 'target'; |
1154 | | - // Is it an IP? |
1155 | | - list( $start, $end ) = IP::parseRange( $target ); |
1156 | | - if ( $start !== false ) { |
1157 | | - if ( $start == $end ) { |
1158 | | - $searchConds = array( 'cul_target_hex = ' . $dbr->addQuotes( $start ) . ' OR ' . |
1159 | | - '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . |
1160 | | - 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' |
1161 | | - ); |
1162 | | - } else { |
1163 | | - $searchConds = array( |
1164 | | - '(cul_target_hex >= ' . $dbr->addQuotes( $start ) . ' AND ' . |
1165 | | - 'cul_target_hex <= ' . $dbr->addQuotes( $end ) . ') OR ' . |
1166 | | - '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . |
1167 | | - 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' |
1168 | | - ); |
1169 | | - } |
1170 | | - } else { |
1171 | | - // Is it a user? |
1172 | | - $user = User::newFromName( $target ); |
1173 | | - if ( $user && $user->getID() ) { |
1174 | | - $searchConds = array( |
1175 | | - 'cul_type' => 'userips', |
1176 | | - 'cul_target_id' => $user->getID(), |
1177 | | - ); |
1178 | | - } else if ( $target ) { |
1179 | | - $error = 'checkuser-user-nonexistent'; |
1180 | | - } |
1181 | | - } |
1182 | | - } |
1183 | | - |
1184 | | - $searchTypes = array( 'initiator', 'target' ); |
1185 | | - $select = "<select name=\"cuSearchType\" style='margin-top:.2em;'>\n"; |
1186 | | - foreach ( $searchTypes as $searchType ) { |
1187 | | - if ( $type == $searchType ) { |
1188 | | - $checked = 'selected="selected"'; |
1189 | | - } else { |
1190 | | - $checked = ''; |
1191 | | - } |
1192 | | - $caption = wfMsgHtml( 'checkuser-search-' . $searchType ); |
1193 | | - $select .= "<option value=\"$searchType\" $checked>$caption</option>\n"; |
1194 | | - } |
1195 | | - $select .= "</select>"; |
1196 | | - |
1197 | | - $encTarget = htmlspecialchars( $target ); |
1198 | | - $msgSearch = wfMsgHtml( 'checkuser-search' ); |
1199 | | - $input = "<input type=\"text\" name=\"cuSearch\" value=\"$encTarget\" size=\"40\"/>"; |
1200 | | - $msgSearchForm = wfMsgHtml( 'checkuser-search-form', $select, $input ); |
1201 | | - $formAction = $this->getLogSubpageTitle()->escapeLocalURL(); |
1202 | | - $msgSearchSubmit = ' ' . wfMsgHtml( 'checkuser-search-submit' ) . ' '; |
1203 | | - |
1204 | | - $s = "<form method='get' action=\"$formAction\">\n" . |
1205 | | - "<fieldset><legend>$msgSearch</legend>\n" . |
1206 | | - "<p>$msgSearchForm</p>\n" . |
1207 | | - "<p>" . $this->getDateMenu( $year, $month ) . " \n" . |
1208 | | - "<input type=\"submit\" name=\"cuSearchSubmit\" value=\"$msgSearchSubmit\"/></p>\n" . |
1209 | | - "</fieldset></form>\n"; |
1210 | | - $wgOut->addHTML( $s ); |
1211 | | - |
1212 | | - if ( $error !== false ) { |
1213 | | - $wgOut->addWikiText( '<div class="errorbox">' . wfMsg( $error ) . '</div>' ); |
1214 | | - return; |
1215 | | - } |
1216 | | - |
1217 | | - $pager = new CheckUserLogPager( $this, $searchConds, $year, $month ); |
1218 | | - $wgOut->addHTML( |
1219 | | - $pager->getNavigationBar() . |
1220 | | - $pager->getBody() . |
1221 | | - $pager->getNavigationBar() ); |
1222 | | - } |
1223 | | - |
1224 | | - /** |
1225 | | - * @return string Formatted HTML |
1226 | | - * @param int $year |
1227 | | - * @param int $month |
1228 | | - */ |
1229 | | - protected function getDateMenu( $year, $month ) { |
1230 | | - # Offset overrides year/month selection |
1231 | | - if( $month && $month !== -1 ) { |
1232 | | - $encMonth = intval( $month ); |
1233 | | - } else { |
1234 | | - $encMonth = ''; |
1235 | | - } |
1236 | | - if ( $year ) { |
1237 | | - $encYear = intval( $year ); |
1238 | | - } else if( $encMonth ) { |
1239 | | - $thisMonth = intval( gmdate( 'n' ) ); |
1240 | | - $thisYear = intval( gmdate( 'Y' ) ); |
1241 | | - if( intval($encMonth) > $thisMonth ) { |
1242 | | - $thisYear--; |
1243 | | - } |
1244 | | - $encYear = $thisYear; |
1245 | | - } else { |
1246 | | - $encYear = ''; |
1247 | | - } |
1248 | | - return Xml::label( wfMsg( 'year' ), 'year' ) . ' '. |
1249 | | - Xml::input( 'year', 4, $encYear, array('id' => 'year', 'maxlength' => 4) ) . |
1250 | | - ' '. |
1251 | | - Xml::label( wfMsg( 'month' ), 'month' ) . ' '. |
1252 | | - Xml::monthSelector( $encMonth, -1 ); |
1253 | | - } |
1254 | | - |
1255 | | - protected function addLogEntry( $logType, $targetType, $target, $reason, $targetID = 0 ) { |
1256 | | - global $wgUser; |
1257 | | - |
1258 | | - if ( $targetType == 'ip' ) { |
1259 | | - list( $rangeStart, $rangeEnd ) = IP::parseRange( $target ); |
1260 | | - $targetHex = $rangeStart; |
1261 | | - if ( $rangeStart == $rangeEnd ) { |
1262 | | - $rangeStart = $rangeEnd = ''; |
1263 | | - } |
1264 | | - } else { |
1265 | | - $targetHex = $rangeStart = $rangeEnd = ''; |
1266 | | - } |
1267 | | - |
1268 | | - $dbw = wfGetDB( DB_MASTER ); |
1269 | | - $cul_id = $dbw->nextSequenceValue( 'cu_log_cul_id_seq' ); |
1270 | | - $dbw->insert( 'cu_log', |
1271 | | - array( |
1272 | | - 'cul_id' => $cul_id, |
1273 | | - 'cul_timestamp' => $dbw->timestamp(), |
1274 | | - 'cul_user' => $wgUser->getID(), |
1275 | | - 'cul_user_text' => $wgUser->getName(), |
1276 | | - 'cul_reason' => $reason, |
1277 | | - 'cul_type' => $logType, |
1278 | | - 'cul_target_id' => $targetID, |
1279 | | - 'cul_target_text' => $target, |
1280 | | - 'cul_target_hex' => $targetHex, |
1281 | | - 'cul_range_start' => $rangeStart, |
1282 | | - 'cul_range_end' => $rangeEnd, |
1283 | | - ), __METHOD__ ); |
1284 | | - return true; |
1285 | | - } |
1286 | | -} |
\ No newline at end of file |
Index: branches/new-checkuser/CheckUser_body.php |
— | — | @@ -5,9 +5,1325 @@ |
6 | 6 | exit( 1 ); |
7 | 7 | } |
8 | 8 | |
| 9 | +class CheckUser extends SpecialPage { |
9 | 10 | |
10 | | -class CheckUser |
11 | | -{ |
| 11 | + /** |
| 12 | + * Constructor -- set up the new special page |
| 13 | + */ |
| 14 | + public function __construct() { |
| 15 | + global $wgUser; |
| 16 | + if ( $wgUser->isAllowed( 'checkuser' ) || !$wgUser->isAllowed( 'checkuser-log' ) ) { |
| 17 | + parent::__construct( 'CheckUser', 'checkuser' ); |
| 18 | + } else { |
| 19 | + parent::__construct( 'CheckUser', 'checkuser-log' ); |
| 20 | + } |
| 21 | + wfLoadExtensionMessages( 'CheckUser' ); |
| 22 | + } |
| 23 | + |
| 24 | + public function execute( $subpage ) { |
| 25 | + global $wgRequest, $wgOut, $wgUser, $wgContLang; |
| 26 | + |
| 27 | + $this->setHeaders(); |
| 28 | + $this->sk = $wgUser->getSkin(); |
| 29 | + |
| 30 | + // This is horribly shitty. |
| 31 | + // Lacking formal aliases, it's tough to ensure we have compatibility. |
| 32 | + // Links may break, which sucks. |
| 33 | + // Language fallbacks will not always be properly utilized. |
| 34 | + $logMatches = array( |
| 35 | + wfMsgForContent( 'checkuser-log-subpage' ), |
| 36 | + 'Log' |
| 37 | + ); |
| 38 | + |
| 39 | + foreach( $logMatches as $log ) { |
| 40 | + if ( str_replace( '_', ' ', $wgContLang->lc( $subpage ) ) |
| 41 | + == str_replace( '_ ', ' ', $wgContLang->lc( $log ) ) ) { |
| 42 | + if( !$wgUser->isAllowed( 'checkuser-log' ) ) { |
| 43 | + $wgOut->permissionRequired( 'checkuser-log' ); |
| 44 | + return; |
| 45 | + } |
| 46 | + |
| 47 | + $this->showLog(); |
| 48 | + return; |
| 49 | + } |
| 50 | + } |
| 51 | + |
| 52 | + if( !$wgUser->isAllowed( 'checkuser' ) ) { |
| 53 | + if ( $wgUser->isAllowed( 'checkuser-log' ) ) { |
| 54 | + $wgOut->addWikiText( wfMsg( 'checkuser-summary' ) . |
| 55 | + "\n\n[[" . $this->getLogSubpageTitle()->getPrefixedText() . |
| 56 | + '|' . wfMsg( 'checkuser-showlog' ) . ']]' |
| 57 | + ); |
| 58 | + return; |
| 59 | + } |
| 60 | + |
| 61 | + $wgOut->permissionRequired( 'checkuser' ); |
| 62 | + return; |
| 63 | + } |
| 64 | + |
| 65 | + $user = $wgRequest->getText( 'user' ) ? |
| 66 | + $wgRequest->getText( 'user' ) : $wgRequest->getText( 'ip' ); |
| 67 | + $user = trim( $user ); |
| 68 | + $reason = $wgRequest->getText( 'reason' ); |
| 69 | + $blockreason = $wgRequest->getText( 'blockreason' ); |
| 70 | + $checktype = $wgRequest->getVal( 'checktype' ); |
| 71 | + $period = $wgRequest->getInt( 'period' ); |
| 72 | + $users = $wgRequest->getArray( 'users' ); |
| 73 | + $tag = $wgRequest->getBool('usetag') ? trim( $wgRequest->getVal( 'tag' ) ) : ''; |
| 74 | + $talkTag = $wgRequest->getBool('usettag') ? trim( $wgRequest->getVal( 'talktag' ) ) : ''; |
| 75 | + |
| 76 | + # An IPv4? An IPv6? CIDR included? |
| 77 | + if( IP::isIPAddress( $user ) ) { |
| 78 | + $ip = IP::sanitizeIP( $user ); |
| 79 | + $name = ''; |
| 80 | + $xff = ''; |
| 81 | + # An IPv4/IPv6 XFF string? CIDR included? |
| 82 | + } elseif( preg_match( '/^(.+)\/xff$/', $user, $m ) && IP::isIPAddress( $m[1] ) ) { |
| 83 | + $ip = ''; |
| 84 | + $name = ''; |
| 85 | + $xff = IP::sanitizeIP( $m[1] ); |
| 86 | + # A user? |
| 87 | + } else { |
| 88 | + $ip = ''; |
| 89 | + $name = $user; |
| 90 | + $xff = ''; |
| 91 | + } |
| 92 | + |
| 93 | + $this->doForm( $user, $reason, $checktype, $ip, $xff, $name, $period ); |
| 94 | + # Perform one of the various submit operations... |
| 95 | + if( $wgRequest->wasPosted() ) { |
| 96 | + if( $wgRequest->getVal( 'action' ) === 'block' ) { |
| 97 | + $this->doMassUserBlock( $users, $blockreason, $tag, $talkTag ); |
| 98 | + } elseif( !$this->checkReason( $reason ) ) { |
| 99 | + $wgOut->addWikiText( wfMsgExt( 'checkuser-noreason', array( 'parsemag' ) ) ); |
| 100 | + } elseif( $checktype == 'subuserips' ) { |
| 101 | + $this->doUserIPsRequest( $name, $reason, $period ); |
| 102 | + } elseif( $xff && $checktype == 'subipedits' ) { |
| 103 | + $this->doIPEditsRequest( $xff, true, $reason, $period ); |
| 104 | + } elseif( $checktype == 'subipedits' ) { |
| 105 | + $this->doIPEditsRequest( $ip, false, $reason, $period ); |
| 106 | + } elseif( $xff && $checktype == 'subipusers' ) { |
| 107 | + $this->doIPUsersRequest( $xff, true, $reason, $period, $tag, $talkTag ); |
| 108 | + } elseif( $checktype == 'subipusers' ) { |
| 109 | + $this->doIPUsersRequest( $ip, false, $reason, $period, $tag, $talkTag ); |
| 110 | + } elseif( $checktype == 'subuseredits' ) { |
| 111 | + $this->doUserEditsRequest( $user, $reason, $period ); |
| 112 | + } |
| 113 | + } |
| 114 | + # Add CIDR calculation convenience form |
| 115 | + $this->addJsCIDRForm(); |
| 116 | + $this->addStyles(); |
| 117 | + } |
| 118 | + |
| 119 | + /** |
| 120 | + * As we use the same small set of messages in various methods and that |
| 121 | + * they are called often, we call them once and save them in $this->message |
| 122 | + */ |
| 123 | + protected function preCacheMessages() { |
| 124 | + // Precache various messages |
| 125 | + if( !isset( $this->message ) ) { |
| 126 | + foreach( explode( ' ', 'diff hist minoreditletter newpageletter blocklink log' ) as $msg ) { |
| 127 | + $this->message[$msg] = wfMsgExt( $msg, array( 'escape' ) ); |
| 128 | + } |
| 129 | + } |
| 130 | + } |
| 131 | + |
| 132 | + public function getLogSubpageTitle() { |
| 133 | + if ( !isset( $this->logSubpageTitle ) ) { |
| 134 | + $this->logSubpageTitle = $this->getTitle( wfMsgForContent( 'checkuser-log-subpage' ) ); |
| 135 | + } |
| 136 | + return $this->logSubpageTitle; |
| 137 | + } |
| 138 | + |
| 139 | + protected function doForm( $user, $reason, $checktype, $ip, $xff, $name, $period ) { |
| 140 | + global $wgOut, $wgUser; |
| 141 | + $action = $this->getTitle()->escapeLocalUrl(); |
| 142 | + # Fill in requested type if it makes sense |
| 143 | + $encipusers = $encipedits = $encuserips = $encuseredits = 0; |
| 144 | + if( $checktype == 'subipusers' && ( $ip || $xff ) ) { |
| 145 | + $encipusers = 1; |
| 146 | + } elseif( $checktype == 'subipedits' && ( $ip || $xff ) ) { |
| 147 | + $encipedits = 1; |
| 148 | + } elseif( $checktype == 'subuserips' && $name ) { |
| 149 | + $encuserips = 1; |
| 150 | + } elseif( $checktype == 'subuseredits' && $name ) { |
| 151 | + $encuseredits = 1; |
| 152 | + # Defaults otherwise |
| 153 | + } elseif( $ip || $xff ) { |
| 154 | + $encipedits = 1; |
| 155 | + } else { |
| 156 | + $encuserips = 1; |
| 157 | + } |
| 158 | + # Compile our nice form |
| 159 | + # User box length should fit things like "2001:0db8:85a3:08d3:1319:8a2e:0370:7344/100/xff" |
| 160 | + if( $wgUser->isAllowed( 'checkuser-log' ) ) { |
| 161 | + $wgOut->addWikiText( wfMsg( 'checkuser-summary' ) . |
| 162 | + "\n\n[[" . $this->getLogSubpageTitle()->getPrefixedText() . |
| 163 | + '|' . wfMsg( 'checkuser-showlog' ) . ']]' |
| 164 | + ); |
| 165 | + } |
| 166 | + $form = "<form name='checkuserform' id='checkuserform' action=\"$action\" method='post'>"; |
| 167 | + $form .= '<fieldset><legend>' . wfMsgHtml( 'checkuser-query' ) . '</legend>'; |
| 168 | + $form .= '<table border="0" cellpadding="2"><tr>'; |
| 169 | + $form .= '<td>' . wfMsgHtml( 'checkuser-target' ) . '</td>'; |
| 170 | + $form .= '<td>' . Xml::input( 'user', 46, $user, array( 'id' => 'checktarget' ) ); |
| 171 | + $form .= ' ' . $this->getPeriodMenu( $period ) . '</td>'; |
| 172 | + $form .= '</tr><tr>'; |
| 173 | + $form .= '<td></td><td class="checkuserradios"><table border="0" cellpadding="3"><tr>'; |
| 174 | + $form .= '<td>' . Xml::radio( 'checktype', 'subuserips', $encuserips, array( 'id' => 'subuserips' ) ); |
| 175 | + $form .= ' ' . Xml::label( wfMsgHtml( 'checkuser-ips' ), 'subuserips' ) . '</td>'; |
| 176 | + $form .= '<td>' . Xml::radio( 'checktype', 'subipedits', $encipedits, array( 'id' => 'subipedits' ) ); |
| 177 | + $form .= ' ' . Xml::label( wfMsgHtml( 'checkuser-edits' ), 'subipedits' ) . '</td>'; |
| 178 | + $form .= '<td>' . Xml::radio( 'checktype', 'subipusers', $encipusers, array( 'id' => 'subipusers' ) ); |
| 179 | + $form .= ' ' . Xml::label( wfMsgHtml( 'checkuser-users' ), 'subipusers' ) . '</td>'; |
| 180 | + $form .= '<td>' . Xml::radio( 'checktype', 'subuseredits', $encuseredits, array( 'id' => 'subuseredits' ) ); |
| 181 | + $form .= ' ' . Xml::label( wfMsgHtml( 'checkuser-account' ), 'subuseredits' ) . '</td>'; |
| 182 | + $form .= '</tr></table></td>'; |
| 183 | + $form .= '</tr><tr>'; |
| 184 | + $form .= '<td>' . wfMsgHtml( 'checkuser-reason' ) . '</td>'; |
| 185 | + $form .= '<td>' . Xml::input( 'reason', 46, $reason, array( 'maxlength' => '150', 'id' => 'checkreason' ) ); |
| 186 | + $form .= ' ' . Xml::submitButton( wfMsgHtml( 'checkuser-check' ), |
| 187 | + array( 'id' => 'checkusersubmit', 'name' => 'checkusersubmit' ) ) . '</td>'; |
| 188 | + $form .= '</tr></table></fieldset></form>'; |
| 189 | + # Output form |
| 190 | + $wgOut->addHTML( $form ); |
| 191 | + } |
| 192 | + |
| 193 | + /** |
| 194 | + * Add CSS/JS |
| 195 | + */ |
| 196 | + protected function addStyles() { |
| 197 | + global $wgScriptPath, $wgCheckUserStyleVersion, $wgOut; |
| 198 | + $encJSFile = htmlspecialchars( "$wgScriptPath/extensions/CheckUser/checkuser.js?$wgCheckUserStyleVersion" ); |
| 199 | + $wgOut->addScript( "<script type=\"text/javascript\" src=\"$encJSFile\"></script>" ); |
| 200 | + } |
| 201 | + |
| 202 | + /** |
| 203 | + * Get a selector of time period options |
| 204 | + * @param int $selected, selected level |
| 205 | + */ |
| 206 | + protected function getPeriodMenu( $selected = null ) { |
| 207 | + $s = '<label for="period">' . wfMsgHtml( 'checkuser-period' ) . '</label> '; |
| 208 | + $s .= Xml::openElement( 'select', array( 'name' => 'period', 'id' => 'period', 'style' => 'margin-top:.2em;' ) ); |
| 209 | + $s .= Xml::option( wfMsg( 'checkuser-week-1' ), 7, $selected === 7 ); |
| 210 | + $s .= Xml::option( wfMsg( 'checkuser-week-2' ), 14, $selected === 14 ); |
| 211 | + $s .= Xml::option( wfMsg( 'checkuser-month' ), 31, $selected === 31 ); |
| 212 | + $s .= Xml::option( wfMsg( 'checkuser-all' ), 0, $selected === 0 ); |
| 213 | + $s .= Xml::closeElement( 'select' ) . "\n"; |
| 214 | + return $s; |
| 215 | + } |
| 216 | + |
| 217 | + /** |
| 218 | + * Make a quick JS form for admins to calculate block ranges |
| 219 | + */ |
| 220 | + protected function addJsCIDRForm() { |
| 221 | + global $wgOut; |
| 222 | + $s = '<fieldset id="mw-checkuser-cidrform" style="display:none; clear:both;">' . |
| 223 | + '<legend>' . wfMsgHtml( 'checkuser-cidr-label' ) . '</legend>'; |
| 224 | + $s .= '<textarea id="mw-checkuser-iplist" rows="5" cols="50" onkeyup="updateCIDRresult()" onclick="updateCIDRresult()"></textarea><br />'; |
| 225 | + $s .= wfMsgHtml( 'checkuser-cidr-res' ) . ' ' . |
| 226 | + Xml::input( 'mw-checkuser-cidr-res', 35, '', array( 'id' => 'mw-checkuser-cidr-res' ) ) . |
| 227 | + ' <strong id="mw-checkuser-ipnote"></strong>'; |
| 228 | + $s .= '</fieldset>'; |
| 229 | + $wgOut->addHTML( $s ); |
| 230 | + } |
| 231 | + |
| 232 | + /** |
| 233 | + * Block a list of selected users |
| 234 | + * @param array $users |
| 235 | + * @param string $reason |
| 236 | + * @param string $tag |
| 237 | + */ |
| 238 | + protected function doMassUserBlock( $users, $reason = '', $tag = '', $talkTag = '' ) { |
| 239 | + global $wgOut, $wgUser, $wgCheckUserMaxBlocks, $wgLang; |
| 240 | + if( empty( $users ) || $wgUser->isBlocked( false ) ) { |
| 241 | + $wgOut->addWikiText( wfMsgExt( 'checkuser-block-failure', array( 'parsemag' ) ) ); |
| 242 | + return; |
| 243 | + } elseif( count( $users ) > $wgCheckUserMaxBlocks ) { |
| 244 | + $wgOut->addWikiText( wfMsgExt( 'checkuser-block-limit', array( 'parsemag' ) ) ); |
| 245 | + return; |
| 246 | + } elseif( !$reason ) { |
| 247 | + $wgOut->addWikiText( wfMsgExt( 'checkuser-block-noreason', array( 'parsemag' ) ) ); |
| 248 | + return; |
| 249 | + } |
| 250 | + $safeUsers = IPBlockForm::doMassUserBlock( $users, $reason, $tag, $talkTag ); |
| 251 | + if( !empty( $safeUsers ) ) { |
| 252 | + $n = count( $safeUsers ); |
| 253 | + $ulist = $wgLang->listToText( $safeUsers ); |
| 254 | + $wgOut->addWikiText( wfMsgExt( 'checkuser-block-success', 'parsemag', |
| 255 | + $ulist, $wgLang->formatNum( $n ) ) ); |
| 256 | + } else { |
| 257 | + $wgOut->addWikiText( wfMsgExt( 'checkuser-block-failure', 'parsemag' ) ); |
| 258 | + } |
| 259 | + } |
| 260 | + |
| 261 | + protected function noMatchesMessage( $userName ) { |
| 262 | + global $wgLang; |
| 263 | + $dbr = wfGetDB( DB_SLAVE ); |
| 264 | + $user_id = User::idFromName( $userName ); |
| 265 | + if( $user_id ) { |
| 266 | + $revEdit = $dbr->selectField( 'revision', |
| 267 | + 'rev_timestamp', |
| 268 | + array( 'rev_user' => $user_id ), |
| 269 | + __METHOD__, |
| 270 | + array( 'ORDER BY' => 'rev_timestamp DESC') |
| 271 | + ); |
| 272 | + } else { |
| 273 | + $revEdit = $dbr->selectField( 'revision', |
| 274 | + 'rev_timestamp', |
| 275 | + array( 'rev_user_text' => $userName ), |
| 276 | + __METHOD__, |
| 277 | + array( 'ORDER BY' => 'rev_timestamp DESC') |
| 278 | + ); |
| 279 | + } |
| 280 | + $logEdit = 0; |
| 281 | + if( $user_id ) { |
| 282 | + $logEdit = $dbr->selectField( 'logging', |
| 283 | + 'log_timestamp', |
| 284 | + array( 'log_user' => $user_id ), |
| 285 | + __METHOD__, |
| 286 | + array( 'ORDER BY' => 'log_timestamp DESC') |
| 287 | + ); |
| 288 | + } |
| 289 | + $lastEdit = max( $revEdit, $logEdit ); |
| 290 | + if( $lastEdit ) { |
| 291 | + $lastEditDate = $wgLang->date( wfTimestamp( TS_MW, $lastEdit ), true ); |
| 292 | + $lastEditTime = $wgLang->time( wfTimestamp( TS_MW, $lastEdit ), true ); |
| 293 | + return wfMsgExt( 'checkuser-nomatch-edits', 'parse', $lastEditDate, $lastEditTime ); |
| 294 | + } |
| 295 | + return wfMsgExt( 'checkuser-nomatch','parse' ); |
| 296 | + } |
| 297 | + |
| 298 | + protected function checkReason( $reason ) { |
| 299 | + global $wgCheckUserForceSummary; |
| 300 | + return ( !$wgCheckUserForceSummary || strlen( $reason ) ); |
| 301 | + } |
| 302 | + |
| 303 | + /** |
| 304 | + * @param string $ip |
| 305 | + * @param bool $xfor |
| 306 | + * @param string $reason |
| 307 | + * Get all IPs used by a user |
| 308 | + * Shows first and last date and number of edits |
| 309 | + */ |
| 310 | + protected function doUserIPsRequest( $user , $reason = '', $period = 0 ) { |
| 311 | + global $wgOut, $wgLang, $wgUser; |
| 312 | + |
| 313 | + $userTitle = Title::newFromText( $user, NS_USER ); |
| 314 | + if( !is_null( $userTitle ) ) { |
| 315 | + // normalize the username |
| 316 | + $user = $userTitle->getText(); |
| 317 | + } |
| 318 | + # IPs are passed in as a blank string |
| 319 | + if( !$user ) { |
| 320 | + $wgOut->addWikiMsg( 'nouserspecified' ); |
| 321 | + return; |
| 322 | + } |
| 323 | + # Get ID, works better than text as user may have been renamed |
| 324 | + $user_id = User::idFromName( $user ); |
| 325 | + |
| 326 | + # If user is not IP or nonexistent |
| 327 | + if( !$user_id ) { |
| 328 | + $s = wfMsgExt( 'nosuchusershort', array( 'parse' ), $user ); |
| 329 | + $wgOut->addHTML( $s ); |
| 330 | + return; |
| 331 | + } |
| 332 | + |
| 333 | + # Record check... |
| 334 | + if( !$this->addLogEntry( 'userips', 'user', $user, $reason, $user_id ) ) { |
| 335 | + $wgOut->addHTML( '<p>' . wfMsgHtml( 'checkuser-log-fail' ) . '</p>' ); |
| 336 | + } |
| 337 | + $dbr = wfGetDB( DB_SLAVE ); |
| 338 | + $time_conds = $this->getTimeConds( $period ); |
| 339 | + # Ordering by the latest timestamp makes a small filesort on the IP list |
| 340 | + $cu_changes = $dbr->tableName( 'cu_changes' ); |
| 341 | + $use_index = $dbr->useIndexClause( 'cuc_user_ip_time' ); |
| 342 | + $sql = "SELECT cuc_ip,cuc_ip_hex, COUNT(*) AS count, |
| 343 | + MIN(cuc_timestamp) AS first, MAX(cuc_timestamp) AS last |
| 344 | + FROM $cu_changes $use_index WHERE cuc_user = $user_id AND $time_conds |
| 345 | + GROUP BY cuc_ip,cuc_ip_hex ORDER BY last DESC LIMIT 5001"; |
| 346 | + |
| 347 | + $ret = $dbr->query( $sql, __METHOD__ ); |
| 348 | + if( !$dbr->numRows( $ret ) ) { |
| 349 | + $s = $this->noMatchesMessage( $user ) . "\n"; |
| 350 | + } else { |
| 351 | + $blockip = SpecialPage::getTitleFor( 'Blockip' ); |
| 352 | + $ips_edits = array(); |
| 353 | + $counter = 0; |
| 354 | + while( $row = $dbr->fetchObject( $ret ) ) { |
| 355 | + if( $counter >= 5000 ) { |
| 356 | + $wgOut->addHTML( wfMsgExt( 'checkuser-limited', array( 'parse' ) ) ); |
| 357 | + break; |
| 358 | + } |
| 359 | + $ips_edits[$row->cuc_ip] = $row->count; |
| 360 | + $ips_first[$row->cuc_ip] = $row->first; |
| 361 | + $ips_last[$row->cuc_ip] = $row->last; |
| 362 | + $ips_hex[$row->cuc_ip] = $row->cuc_ip_hex; |
| 363 | + ++$counter; |
| 364 | + } |
| 365 | + // Count pinging might take some time...make sure it is there |
| 366 | + wfSuppressWarnings(); |
| 367 | + set_time_limit( 60 ); |
| 368 | + wfRestoreWarnings(); |
| 369 | + |
| 370 | + $logs = SpecialPage::getTitleFor( 'Log' ); |
| 371 | + $s = '<div id="checkuserresults"><ul>'; |
| 372 | + foreach( $ips_edits as $ip => $edits ) { |
| 373 | + $s .= '<li>'; |
| 374 | + $s .= '<a href="' . |
| 375 | + $this->getTitle()->escapeLocalURL( 'user=' . urlencode( $ip ) . '&reason=' . urlencode( $reason ) ) . '">' . |
| 376 | + htmlspecialchars( $ip ) . '</a>'; |
| 377 | + $s .= ' (<a href="' . $blockip->escapeLocalURL( 'ip=' . urlencode( $ip ) ) . '">' . |
| 378 | + wfMsgHtml( 'blocklink' ) . '</a>)'; |
| 379 | + if( $ips_first[$ip] == $ips_last[$ip] ) { |
| 380 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $ips_first[$ip] ), true ) . ') '; |
| 381 | + } else { |
| 382 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $ips_first[$ip] ), true ) . |
| 383 | + ' -- ' . $wgLang->timeanddate( wfTimestamp( TS_MW, $ips_last[$ip] ), true ) . ') '; |
| 384 | + } |
| 385 | + $s .= ' <strong>[' . $edits . ']</strong>'; |
| 386 | + |
| 387 | + # If we get some results, it helps to know if the IP in general |
| 388 | + # has a lot more edits, e.g. "tip of the iceberg"... |
| 389 | + $ipedits = $dbr->estimateRowCount( 'cu_changes', '*', |
| 390 | + array( 'cuc_ip_hex' => $ips_hex[$ip], $time_conds ), |
| 391 | + __METHOD__ ); |
| 392 | + # If small enough, get a more accurate count |
| 393 | + if( $ipedits <= 1000 ) { |
| 394 | + $ipedits = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
| 395 | + array( 'cuc_ip_hex' => $ips_hex[$ip], $time_conds ), |
| 396 | + __METHOD__ ); |
| 397 | + } |
| 398 | + if( $ipedits > $ips_edits[$ip] ) { |
| 399 | + $s .= ' <i>(' . wfMsgHtml( 'checkuser-ipeditcount', $ipedits ) . ')</i>'; |
| 400 | + } |
| 401 | + |
| 402 | + # If this IP is blocked, give a link to the block log |
| 403 | + $s.= $this->getIPBlockInfo( $ip ); |
| 404 | + $s .= '<div style="margin-left:5%">'; |
| 405 | + $s .= '<small>' . wfMsgExt( 'checkuser-toollinks', array( 'parseinline' ), urlencode( $ip ) ) . '</small>'; |
| 406 | + $s .= '</div>'; |
| 407 | + $s .= "</li>\n"; |
| 408 | + } |
| 409 | + $s .= '</ul></div>'; |
| 410 | + } |
| 411 | + $wgOut->addHTML( $s ); |
| 412 | + $dbr->freeResult( $ret ); |
| 413 | + } |
| 414 | + |
| 415 | + protected function getIPBlockInfo( $ip ) { |
| 416 | + static $blocklist; |
| 417 | + $blocklist = SpecialPage::getTitleFor( 'Ipblocklist' ); |
| 418 | + $block = new Block(); |
| 419 | + $block->fromMaster( false ); // use slaves |
| 420 | + if( $block->load( $ip, 0 ) ) { |
| 421 | + if( IP::isIPAddress( $block->mAddress ) && strpos( $block->mAddress, '/' ) ) { |
| 422 | + $userpage = Title::makeTitle( NS_USER, $block->mAddress ); |
| 423 | + $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml( 'checkuser-blocked' ), |
| 424 | + 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
| 425 | + return ' <strong>(' . $blocklog . ' - ' . $block->mAddress . ')</strong>'; |
| 426 | + } elseif( $block->mAuto ) { |
| 427 | + $blocklog = $this->sk->makeKnownLinkObj( $blocklist, wfMsgHtml( 'checkuser-blocked' ), |
| 428 | + 'ip=' . urlencode( "#$block->mId" ) ); |
| 429 | + return ' <strong>(' . $blocklog . ')</strong>'; |
| 430 | + } else { |
| 431 | + $userpage = Title::makeTitle( NS_USER, $ip ); |
| 432 | + $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml( 'checkuser-blocked' ), |
| 433 | + 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
| 434 | + return ' <strong>(' . $blocklog . ')</strong>'; |
| 435 | + } |
| 436 | + } |
| 437 | + return ''; |
| 438 | + } |
| 439 | + |
| 440 | + /** |
| 441 | + * @param string $ip |
| 442 | + * @param bool $xfor |
| 443 | + * @param string $reason |
| 444 | + * Shows all edits in Recent Changes by this IP (or range) and who made them |
| 445 | + */ |
| 446 | + protected function doIPEditsRequest( $ip, $xfor = false, $reason = '', $period = 0 ) { |
| 447 | + global $wgUser, $wgOut, $wgLang; |
| 448 | + $dbr = wfGetDB( DB_SLAVE ); |
| 449 | + # Invalid IPs are passed in as a blank string |
| 450 | + $ip_conds = $this->getIpConds( $dbr, $ip, $xfor ); |
| 451 | + if( !$ip || $ip_conds === false ) { |
| 452 | + $wgOut->addWikiMsg( 'badipaddress' ); |
| 453 | + return; |
| 454 | + } |
| 455 | + |
| 456 | + $logType = 'ipedits'; |
| 457 | + if( $xfor ) { |
| 458 | + $logType .= '-xff'; |
| 459 | + } |
| 460 | + # Record check... |
| 461 | + if( !$this->addLogEntry( $logType, 'ip', $ip, $reason ) ) { |
| 462 | + $wgOut->addWikiMsg( 'checkuser-log-fail' ); |
| 463 | + } |
| 464 | + |
| 465 | + $ip_conds = $dbr->makeList( $ip_conds, LIST_AND ); |
| 466 | + $time_conds = $this->getTimeConds( $period ); |
| 467 | + $cu_changes = $dbr->tableName( 'cu_changes' ); |
| 468 | + # Ordered in descent by timestamp. Can cause large filesorts on range scans. |
| 469 | + # Check how many rows will need sorting ahead of time to see if this is too big. |
| 470 | + # Also, if we only show 5000, too many will be ignored as well. |
| 471 | + $index = $xfor ? 'cuc_xff_hex_time' : 'cuc_ip_hex_time'; |
| 472 | + if( strpos( $ip, '/' ) !== false ) { |
| 473 | + # Quick index check only OK if no time constraint |
| 474 | + if( $period ) { |
| 475 | + $rangecount = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
| 476 | + array( $ip_conds, $time_conds ), |
| 477 | + __METHOD__, |
| 478 | + array( 'USE INDEX' => $index ) ); |
| 479 | + } else { |
| 480 | + $rangecount = $dbr->estimateRowCount( 'cu_changes', '*', |
| 481 | + array( $ip_conds ), |
| 482 | + __METHOD__, |
| 483 | + array( 'USE INDEX' => $index ) ); |
| 484 | + } |
| 485 | + // Sorting might take some time...make sure it is there |
| 486 | + wfSuppressWarnings(); |
| 487 | + set_time_limit( 60 ); |
| 488 | + wfRestoreWarnings(); |
| 489 | + } |
| 490 | + $counter = 0; |
| 491 | + # See what is best to do after testing the waters... |
| 492 | + if( isset( $rangecount ) && $rangecount > 5000 ) { |
| 493 | + $use_index = $dbr->useIndexClause( $index ); |
| 494 | + $sql = "SELECT cuc_ip_hex, COUNT(*) AS count, |
| 495 | + MIN(cuc_timestamp) AS first, MAX(cuc_timestamp) AS last |
| 496 | + FROM $cu_changes $use_index |
| 497 | + WHERE $ip_conds AND $time_conds |
| 498 | + GROUP BY cuc_ip_hex ORDER BY cuc_ip_hex LIMIT 5001"; |
| 499 | + $ret = $dbr->query( $sql, __METHOD__ ); |
| 500 | + # List out each IP that has edits |
| 501 | + $s = wfMsgExt( 'checkuser-too-many', array( 'parse' ) ); |
| 502 | + $s .= '<ol>'; |
| 503 | + while( $row = $ret->fetchObject() ) { |
| 504 | + if( $counter >= 5000 ) { |
| 505 | + $wgOut->addHTML( wfMsgExt( 'checkuser-limited', array( 'parse' ) ) ); |
| 506 | + break; |
| 507 | + } |
| 508 | + # Convert the IP hexes into normal form |
| 509 | + if( strpos( $row->cuc_ip_hex, 'v6-' ) !==false ) { |
| 510 | + $ip = substr( $row->cuc_ip_hex, 3 ); |
| 511 | + $ip = IP::HextoOctet( $ip ); |
| 512 | + } else { |
| 513 | + $ip = long2ip( wfBaseConvert( $row->cuc_ip_hex, 16, 10, 8 ) ); |
| 514 | + } |
| 515 | + $s .= '<li><a href="' . |
| 516 | + $this->getTitle()->escapeLocalURL( 'user=' . urlencode( $ip ) . '&reason=' . urlencode( $reason ) . '&checktype=subipusers' ) . |
| 517 | + '">' . $ip . '</a>'; |
| 518 | + if( $row->first == $row->last ) { |
| 519 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $row->first ), true ) . ') '; |
| 520 | + } else { |
| 521 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $row->first ), true ) . |
| 522 | + ' -- ' . $wgLang->timeanddate( wfTimestamp( TS_MW, $row->last ), true ) . ') '; |
| 523 | + } |
| 524 | + $s .= ' [<strong>' . $row->count . "</strong>]</li>\n"; |
| 525 | + ++$counter; |
| 526 | + } |
| 527 | + $s .= '</ol>'; |
| 528 | + $dbr->freeResult( $ret ); |
| 529 | + |
| 530 | + $wgOut->addHTML( $s ); |
| 531 | + return; |
| 532 | + } elseif( isset( $rangecount ) && !$rangecount ) { |
| 533 | + $s = $this->noMatchesMessage( $ip ) . "\n"; |
| 534 | + $wgOut->addHTML( $s ); |
| 535 | + return; |
| 536 | + } |
| 537 | + # OK, do the real query... |
| 538 | + $use_index = $dbr->useIndexClause( $index ); |
| 539 | + $sql = "SELECT cuc_namespace,cuc_title,cuc_user,cuc_user_text,cuc_comment,cuc_actiontext, |
| 540 | + cuc_timestamp,cuc_minor,cuc_page_id,cuc_type,cuc_this_oldid,cuc_last_oldid,cuc_ip,cuc_xff,cuc_agent |
| 541 | + FROM $cu_changes $use_index WHERE $ip_conds AND $time_conds ORDER BY cuc_timestamp DESC LIMIT 5001"; |
| 542 | + $ret = $dbr->query( $sql, __METHOD__ ); |
| 543 | + |
| 544 | + if( !$dbr->numRows( $ret ) ) { |
| 545 | + $s = $this->noMatchesMessage( $ip ) . "\n"; |
| 546 | + } else { |
| 547 | + # Cache common messages |
| 548 | + $this->preCacheMessages(); |
| 549 | + # Try to optimize this query |
| 550 | + $lb = new LinkBatch; |
| 551 | + while( $row = $ret->fetchObject() ) { |
| 552 | + $userText = str_replace( ' ', '_', $row->cuc_user_text ); |
| 553 | + $lb->add( $row->cuc_namespace, $row->cuc_title ); |
| 554 | + $lb->add( NS_USER, $userText ); |
| 555 | + $lb->add( NS_USER_TALK, $userText ); |
| 556 | + } |
| 557 | + $lb->execute(); |
| 558 | + $ret->seek( 0 ); |
| 559 | + # List out the edits |
| 560 | + $s = '<div id="checkuserresults">'; |
| 561 | + while( $row = $ret->fetchObject() ) { |
| 562 | + if( $counter >= 5000 ) { |
| 563 | + $wgOut->addHTML( wfMsgExt( 'checkuser-limited', array( 'parse' ) ) ); |
| 564 | + break; |
| 565 | + } |
| 566 | + $s .= $this->CUChangesLine( $row, $reason ); |
| 567 | + ++$counter; |
| 568 | + } |
| 569 | + $s .= '</ul></div>'; |
| 570 | + $dbr->freeResult( $ret ); |
| 571 | + } |
| 572 | + |
| 573 | + $wgOut->addHTML( $s ); |
| 574 | + } |
| 575 | + |
| 576 | + /** |
| 577 | + * @param string $user |
| 578 | + * @param string $reason |
| 579 | + * Shows all edits in Recent Changes by this user |
| 580 | + */ |
| 581 | + protected function doUserEditsRequest( $user, $reason = '', $period = 0 ) { |
| 582 | + global $wgUser, $wgOut, $wgLang; |
| 583 | + |
| 584 | + $userTitle = Title::newFromText( $user, NS_USER ); |
| 585 | + if( !is_null( $userTitle ) ) { |
| 586 | + // normalize the username |
| 587 | + $user = $userTitle->getText(); |
| 588 | + } |
| 589 | + # IPs are passed in as a blank string |
| 590 | + if( !$user ) { |
| 591 | + $wgOut->addWikiMsg( 'nouserspecified' ); |
| 592 | + return; |
| 593 | + } |
| 594 | + # Get ID, works better than text as user may have been renamed |
| 595 | + $user_id = User::idFromName( $user ); |
| 596 | + |
| 597 | + # If user is not IP or nonexistent |
| 598 | + if( !$user_id ) { |
| 599 | + $s = wfMsgExt( 'nosuchusershort', array( 'parse' ), $user ); |
| 600 | + $wgOut->addHTML( $s ); |
| 601 | + return; |
| 602 | + } |
| 603 | + |
| 604 | + # Record check... |
| 605 | + if( !$this->addLogEntry( 'useredits', 'user', $user, $reason, $user_id ) ) { |
| 606 | + $wgOut->addHTML( '<p>' . wfMsgHtml( 'checkuser-log-fail' ) . '</p>' ); |
| 607 | + } |
| 608 | + |
| 609 | + $dbr = wfGetDB( DB_SLAVE ); |
| 610 | + $user_cond = "cuc_user = '$user_id'"; |
| 611 | + $time_conds = $this->getTimeConds( $period ); |
| 612 | + $cu_changes = $dbr->tableName( 'cu_changes' ); |
| 613 | + # Ordered in descent by timestamp. Causes large filesorts if there are many edits. |
| 614 | + # Check how many rows will need sorting ahead of time to see if this is too big. |
| 615 | + # If it is, sort by IP,time to avoid the filesort. |
| 616 | + if( $period ) { |
| 617 | + $count = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
| 618 | + array( $user_cond, $time_conds ), |
| 619 | + __METHOD__, |
| 620 | + array( 'USE INDEX' => 'cuc_user_ip_time' ) ); |
| 621 | + } else { |
| 622 | + $count = $dbr->estimateRowCount( 'cu_changes', '*', |
| 623 | + array( $user_cond, $time_conds ), |
| 624 | + __METHOD__, |
| 625 | + array( 'USE INDEX' => 'cuc_user_ip_time' ) ); |
| 626 | + } |
| 627 | + # Cache common messages |
| 628 | + $this->preCacheMessages(); |
| 629 | + # See what is best to do after testing the waters... |
| 630 | + if( $count > 5000 ) { |
| 631 | + $wgOut->addHTML( wfMsgExt( 'checkuser-limited', array( 'parse' ) ) ); |
| 632 | + $use_index = $dbr->useIndexClause( 'cuc_user_ip_time' ); |
| 633 | + $sql = "SELECT * FROM $cu_changes $use_index |
| 634 | + WHERE $user_cond AND $time_conds |
| 635 | + ORDER BY cuc_ip ASC, cuc_timestamp DESC LIMIT 5000"; |
| 636 | + $ret = $dbr->query( $sql, __METHOD__ ); |
| 637 | + # Try to optimize this query |
| 638 | + $lb = new LinkBatch; |
| 639 | + while( $row = $ret->fetchObject() ) { |
| 640 | + $lb->add( $row->cuc_namespace, $row->cuc_title ); |
| 641 | + } |
| 642 | + $lb->execute(); |
| 643 | + $ret->seek( 0 ); |
| 644 | + $s = ''; |
| 645 | + while( $row = $ret->fetchObject() ) { |
| 646 | + if( !$ip = htmlspecialchars( $row->cuc_ip ) ) { |
| 647 | + continue; |
| 648 | + } |
| 649 | + if( !isset( $lastIP ) ) { |
| 650 | + $lastIP = $row->cuc_ip; |
| 651 | + $s .= "\n<h2>$ip</h2>\n<div class=\"special\">"; |
| 652 | + } elseif( $lastIP != $row->cuc_ip ) { |
| 653 | + $s .= "</ul></div>\n<h2>$ip</h2>\n<div class=\"special\">"; |
| 654 | + $lastIP = $row->cuc_ip; |
| 655 | + unset( $this->lastdate ); // start over |
| 656 | + } |
| 657 | + $s .= $this->CUChangesLine( $row, $reason ); |
| 658 | + } |
| 659 | + $s .= '</ul></div>'; |
| 660 | + $dbr->freeResult( $ret ); |
| 661 | + |
| 662 | + $wgOut->addHTML( $s ); |
| 663 | + return; |
| 664 | + } |
| 665 | + // Sorting might take some time...make sure it is there |
| 666 | + wfSuppressWarnings(); |
| 667 | + set_time_limit( 60 ); |
| 668 | + wfRestoreWarnings(); |
| 669 | + # OK, do the real query... |
| 670 | + $use_index = $dbr->useIndexClause( 'cuc_user_ip_time' ); |
| 671 | + $sql = "SELECT * FROM $cu_changes $use_index |
| 672 | + WHERE $user_cond AND $time_conds ORDER BY cuc_timestamp DESC LIMIT 5000"; |
| 673 | + $ret = $dbr->query( $sql, __METHOD__ ); |
| 674 | + |
| 675 | + if( !$dbr->numRows( $ret ) ) { |
| 676 | + $s = $this->noMatchesMessage( $user ) . "\n"; |
| 677 | + } else { |
| 678 | + # Try to optimize this query |
| 679 | + $lb = new LinkBatch; |
| 680 | + while( $row = $ret->fetchObject() ) { |
| 681 | + $lb->add( $row->cuc_namespace, $row->cuc_title ); |
| 682 | + } |
| 683 | + $lb->execute(); |
| 684 | + $ret->seek( 0 ); |
| 685 | + # List out the edits |
| 686 | + $s = '<div id="checkuserresults">'; |
| 687 | + while( $row = $ret->fetchObject() ) { |
| 688 | + $s .= $this->CUChangesLine( $row, $reason ); |
| 689 | + } |
| 690 | + $s .= '</ul></div>'; |
| 691 | + $dbr->freeResult( $ret ); |
| 692 | + } |
| 693 | + |
| 694 | + $wgOut->addHTML( $s ); |
| 695 | + } |
| 696 | + |
| 697 | + /** |
| 698 | + * @param string $ip |
| 699 | + * @param bool $xfor |
| 700 | + * @param string $reason |
| 701 | + * @param int $period |
| 702 | + * @param string $tag |
| 703 | + * @param string $talkTag |
| 704 | + * Lists all users in recent changes who used an IP, newest to oldest down |
| 705 | + * Outputs usernames, latest and earliest found edit date, and count |
| 706 | + * List unique IPs used for each user in time order, list corresponding user agent |
| 707 | + */ |
| 708 | + protected function doIPUsersRequest( $ip, $xfor = false, $reason = '', $period = 0, $tag = '', $talkTag = '' ) { |
| 709 | + global $wgUser, $wgOut, $wgLang; |
| 710 | + $dbr = wfGetDB( DB_SLAVE ); |
| 711 | + # Invalid IPs are passed in as a blank string |
| 712 | + $ip_conds = $this->getIpConds( $dbr, $ip, $xfor ); |
| 713 | + if( !$ip || $ip_conds === false ) { |
| 714 | + $wgOut->addWikiMsg( 'badipaddress' ); |
| 715 | + return; |
| 716 | + } |
| 717 | + |
| 718 | + $logType = 'ipusers'; |
| 719 | + if( $xfor ) { |
| 720 | + $logType .= '-xff'; |
| 721 | + } |
| 722 | + # Log the check... |
| 723 | + if( !$this->addLogEntry( $logType, 'ip', $ip, $reason ) ) { |
| 724 | + $wgOut->addHTML( '<p>'.wfMsgHtml('checkuser-log-fail').'</p>' ); |
| 725 | + } |
| 726 | + |
| 727 | + $ip_conds = $dbr->makeList( $ip_conds, LIST_AND ); |
| 728 | + $time_conds = $this->getTimeConds( $period ); |
| 729 | + $cu_changes = $dbr->tableName( 'cu_changes' ); |
| 730 | + $index = $xfor ? 'cuc_xff_hex_time' : 'cuc_ip_hex_time'; |
| 731 | + # Ordered in descent by timestamp. Can cause large filesorts on range scans. |
| 732 | + # Check how many rows will need sorting ahead of time to see if this is too big. |
| 733 | + if( strpos( $ip, '/' ) !== false ) { |
| 734 | + # Quick index check only OK if no time constraint |
| 735 | + if( $period ) { |
| 736 | + $rangecount = $dbr->selectField( 'cu_changes', 'COUNT(*)', |
| 737 | + array( $ip_conds, $time_conds ), |
| 738 | + __METHOD__, |
| 739 | + array( 'USE INDEX' => $index ) ); |
| 740 | + } else { |
| 741 | + $rangecount = $dbr->estimateRowCount( 'cu_changes', '*', |
| 742 | + array( $ip_conds ), |
| 743 | + __METHOD__, |
| 744 | + array( 'USE INDEX' => $index ) ); |
| 745 | + } |
| 746 | + // Sorting might take some time...make sure it is there |
| 747 | + wfSuppressWarnings(); |
| 748 | + set_time_limit( 120 ); |
| 749 | + wfRestoreWarnings(); |
| 750 | + } |
| 751 | + // Are there too many edits? |
| 752 | + if( isset( $rangecount ) && $rangecount > 10000 ) { |
| 753 | + $use_index = $dbr->useIndexClause( $index ); |
| 754 | + $sql = "SELECT cuc_ip_hex, COUNT(*) AS count, |
| 755 | + MIN(cuc_timestamp) AS first, MAX(cuc_timestamp) AS last |
| 756 | + FROM $cu_changes $use_index WHERE $ip_conds AND $time_conds |
| 757 | + GROUP BY cuc_ip_hex ORDER BY cuc_ip_hex LIMIT 5001"; |
| 758 | + $ret = $dbr->query( $sql, __METHOD__ ); |
| 759 | + # List out each IP that has edits |
| 760 | + $s = '<h5>' . wfMsg( 'checkuser-too-many' ) . '</h5>'; |
| 761 | + $s .= '<ol>'; |
| 762 | + $counter = 0; |
| 763 | + while( $row = $ret->fetchObject() ) { |
| 764 | + if( $counter >= 5000 ) { |
| 765 | + $wgOut->addHTML( wfMsgExt( 'checkuser-limited', array( 'parse' ) ) ); |
| 766 | + break; |
| 767 | + } |
| 768 | + # Convert the IP hexes into normal form |
| 769 | + if( strpos( $row->cuc_ip_hex, 'v6-' ) !==false ) { |
| 770 | + $ip = substr( $row->cuc_ip_hex, 3 ); |
| 771 | + $ip = IP::HextoOctet( $ip ); |
| 772 | + } else { |
| 773 | + $ip = long2ip( wfBaseConvert( $row->cuc_ip_hex, 16, 10, 8 ) ); |
| 774 | + } |
| 775 | + $s .= '<li><a href="' . |
| 776 | + $this->getTitle()->escapeLocalURL( 'user=' . urlencode( $ip ) . '&reason=' . urlencode( $reason ) . '&checktype=subipusers' ) . |
| 777 | + '">' . $ip . '</a>'; |
| 778 | + if( $row->first == $row->last ) { |
| 779 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $row->first ), true ) . ') '; |
| 780 | + } else { |
| 781 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $row->first ), true ) . |
| 782 | + ' -- ' . $wgLang->timeanddate( wfTimestamp( TS_MW, $row->last ), true ) . ') '; |
| 783 | + } |
| 784 | + $s .= ' [<strong>' . $row->count . "</strong>]</li>\n"; |
| 785 | + ++$counter; |
| 786 | + } |
| 787 | + $s .= '</ol>'; |
| 788 | + $dbr->freeResult( $ret ); |
| 789 | + |
| 790 | + $wgOut->addHTML( $s ); |
| 791 | + return; |
| 792 | + } elseif( isset( $rangecount ) && !$rangecount ) { |
| 793 | + $s = $this->noMatchesMessage( $ip ) . "\n"; |
| 794 | + $wgOut->addHTML( $s ); |
| 795 | + return; |
| 796 | + } |
| 797 | + |
| 798 | + global $wgMemc; |
| 799 | + # OK, do the real query... |
| 800 | + $use_index = $dbr->useIndexClause( $index ); |
| 801 | + $sql = "SELECT cuc_user_text, cuc_timestamp, cuc_user, cuc_ip, cuc_agent, cuc_xff |
| 802 | + FROM $cu_changes $use_index WHERE $ip_conds AND $time_conds |
| 803 | + ORDER BY cuc_timestamp DESC LIMIT 10000"; |
| 804 | + $ret = $dbr->query( $sql, __METHOD__ ); |
| 805 | + |
| 806 | + $users_first = $users_last = $users_edits = $users_ids = array(); |
| 807 | + if( !$dbr->numRows( $ret ) ) { |
| 808 | + $s = $this->noMatchesMessage( $ip ) . "\n"; |
| 809 | + } else { |
| 810 | + global $wgAuth; |
| 811 | + while( ( $row = $dbr->fetchObject( $ret ) ) != false ) { |
| 812 | + if( !array_key_exists( $row->cuc_user_text, $users_edits ) ) { |
| 813 | + $users_last[$row->cuc_user_text] = $row->cuc_timestamp; |
| 814 | + $users_edits[$row->cuc_user_text] = 0; |
| 815 | + $users_ids[$row->cuc_user_text] = $row->cuc_user; |
| 816 | + $users_infosets[$row->cuc_user_text] = array(); |
| 817 | + $users_agentsets[$row->cuc_user_text] = array(); |
| 818 | + } |
| 819 | + $users_edits[$row->cuc_user_text] += 1; |
| 820 | + $users_first[$row->cuc_user_text] = $row->cuc_timestamp; |
| 821 | + # Treat blank or NULL xffs as empty strings |
| 822 | + $xff = empty( $row->cuc_xff ) ? null : $row->cuc_xff; |
| 823 | + $xff_ip_combo = array( $row->cuc_ip, $xff ); |
| 824 | + # Add this IP/XFF combo for this username if it's not already there |
| 825 | + if( !in_array( $xff_ip_combo, $users_infosets[$row->cuc_user_text] ) ) { |
| 826 | + $users_infosets[$row->cuc_user_text][] = $xff_ip_combo; |
| 827 | + } |
| 828 | + # Add this agent string if it's not already there; 10 max. |
| 829 | + if( count( $users_agentsets[$row->cuc_user_text] ) < 10 ) { |
| 830 | + if( !in_array( $row->cuc_agent, $users_agentsets[$row->cuc_user_text] ) ) { |
| 831 | + $users_agentsets[$row->cuc_user_text][] = $row->cuc_agent; |
| 832 | + } |
| 833 | + } |
| 834 | + } |
| 835 | + $dbr->freeResult( $ret ); |
| 836 | + |
| 837 | + $action = $this->getTitle()->escapeLocalURL( 'action=block' ); |
| 838 | + $s = "<form name='checkuserblock' id='checkuserblock' action=\"$action\" method='post'>"; |
| 839 | + $s .= '<div id="checkuserresults"><ul>'; |
| 840 | + foreach( $users_edits as $name => $count ) { |
| 841 | + $s .= '<li>'; |
| 842 | + $s .= Xml::check( 'users[]', false, array( 'value' => $name ) ) . ' '; |
| 843 | + # Load user object |
| 844 | + $user = User::newFromName( $name, false ); |
| 845 | + # Add user tool links |
| 846 | + $s .= $this->sk->userLink( -1 , $name ) . $this->sk->userToolLinks( -1 , $name ); |
| 847 | + # Add CheckUser link |
| 848 | + $s .= ' (<a href="' . $this->getTitle()->escapeLocalURL( 'user=' . urlencode( $name ) . |
| 849 | + '&reason=' . urlencode( $reason ) ) . '">' . wfMsgHtml( 'checkuser-check' ) . '</a>)'; |
| 850 | + # Show edit time range |
| 851 | + if( $users_first[$name] == $users_last[$name] ) { |
| 852 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $users_first[$name] ), true ) . ') '; |
| 853 | + } else { |
| 854 | + $s .= ' (' . $wgLang->timeanddate( wfTimestamp( TS_MW, $users_first[$name] ), true ) . |
| 855 | + ' -- ' . $wgLang->timeanddate( wfTimestamp( TS_MW, $users_last[$name] ), true ) . ') '; |
| 856 | + } |
| 857 | + # Total edit count |
| 858 | + $s .= ' [<strong>' . $count . '</strong>]<br />'; |
| 859 | + # Check if this user or IP is blocked. If so, give a link to the block log... |
| 860 | + $ip = IP::isIPAddress( $name ) ? $name : ''; |
| 861 | + $flags = $this->userBlockFlags( $ip, $users_ids[$name], $user ); |
| 862 | + # Show if account is local only |
| 863 | + $authUser = $wgAuth->getUserInstance( $user ); |
| 864 | + if( $user->getId() && $authUser->getId() === 0 ) { |
| 865 | + $flags[] = '<strong>(' . wfMsgHtml( 'checkuser-localonly' ) . ')</strong>'; |
| 866 | + } |
| 867 | + # Check for extra user rights... |
| 868 | + if( $users_ids[$name] ) { |
| 869 | + if( $user->isLocked() ) { |
| 870 | + $flags[] = '<b>(' . wfMsgHtml( 'checkuser-locked' ) . ')</b>'; |
| 871 | + } |
| 872 | + $list = array(); |
| 873 | + foreach( $user->getGroups() as $group ) { |
| 874 | + $list[] = self::buildGroupLink( $group ); |
| 875 | + } |
| 876 | + $groups = $wgLang->commaList( $list ); |
| 877 | + if( $groups ) { |
| 878 | + $flags[] = '<i>(' . $groups . ')</i>'; |
| 879 | + } |
| 880 | + } |
| 881 | + # Check how many accounts the user made recently? |
| 882 | + if( $ip ) { |
| 883 | + $key = wfMemcKey( 'acctcreate', 'ip', $ip ); |
| 884 | + $count = intval( $wgMemc->get( $key ) ); |
| 885 | + if( $count ) { |
| 886 | + $flags[] = '<strong>[' . wfMsgExt( 'checkuser-accounts', 'parsemag', $wgLang->formatNum( $count ) ) . ']</strong>'; |
| 887 | + } |
| 888 | + } |
| 889 | + $s .= implode( ' ', $flags ); |
| 890 | + $s .= '<ol>'; |
| 891 | + # List out each IP/XFF combo for this username |
| 892 | + for( $i = ( count( $users_infosets[$name] ) - 1 ); $i >= 0; $i-- ) { |
| 893 | + $set = $users_infosets[$name][$i]; |
| 894 | + # IP link |
| 895 | + $s .= '<li>'; |
| 896 | + $s .= '<a href="'.$this->getTitle()->escapeLocalURL( 'user=' . urlencode( $set[0] ) ) . '">' . htmlspecialchars( $set[0] ) . '</a>'; |
| 897 | + # XFF string, link to /xff search |
| 898 | + if( $set[1] ) { |
| 899 | + # Flag our trusted proxies |
| 900 | + list( $client, $trusted ) = efGetClientIPfromXFF( $set[1], $set[0] ); |
| 901 | + $c = $trusted ? '#F0FFF0' : '#FFFFCC'; |
| 902 | + $s .= ' <span style="background-color: ' . $c . '"><strong>XFF</strong>: '; |
| 903 | + $s .= $this->sk->makeKnownLinkObj( $this->getTitle(), |
| 904 | + htmlspecialchars( $set[1] ), |
| 905 | + 'user=' . urlencode( $client ) . '/xff' ) . '</span>'; |
| 906 | + } |
| 907 | + $s .= "</li>\n"; |
| 908 | + } |
| 909 | + $s .= '</ol><br /><ol>'; |
| 910 | + # List out each agent for this username |
| 911 | + for( $i = ( count( $users_agentsets[$name] ) - 1 ); $i >= 0; $i-- ) { |
| 912 | + $agent = $users_agentsets[$name][$i]; |
| 913 | + $s .= '<li><i>' . htmlspecialchars( $agent ) . "</i></li>\n"; |
| 914 | + } |
| 915 | + $s .= '</ol>'; |
| 916 | + $s .= '</li>'; |
| 917 | + } |
| 918 | + $s .= "</ul></div>\n"; |
| 919 | + if( $wgUser->isAllowed( 'block' ) && !$wgUser->isBlocked() ) { |
| 920 | + $s .= "<fieldset>\n"; |
| 921 | + $s .= '<legend>' . wfMsgHtml( 'checkuser-massblock' ) . "</legend>\n"; |
| 922 | + $s .= '<p>' . wfMsgExt( 'checkuser-massblock-text', array( 'parseinline' ) ) . "</p>\n"; |
| 923 | + $s .= '<table><tr>' . |
| 924 | + '<td>' . Xml::check( 'usetag', false, array( 'id' => 'usetag' ) ) . '</td>' . |
| 925 | + '<td>' . Xml::label( wfMsgHtml( 'checkuser-blocktag' ), 'usetag' ) . '</td>' . |
| 926 | + '<td>' . Xml::input( 'tag', 46, $tag, array( 'id' => 'blocktag' ) ) . '</td>' . |
| 927 | + '</tr><tr>' . |
| 928 | + '<td>' . Xml::check( 'usettag', false, array('id' => 'usettag' ) ) . '</td>' . |
| 929 | + '<td>' . Xml::label( wfMsgHtml( 'checkuser-blocktag-talk' ), 'usettag' ) . '</td>' . |
| 930 | + '<td>' . Xml::input( 'talktag', 46, $talkTag, array( 'id' => 'talktag' ) ) . '</td>'. |
| 931 | + '</tr></table>'; |
| 932 | + $s .= '<p>' . wfMsgHtml( 'checkuser-reason' ) . ' '; |
| 933 | + $s .= Xml::input( 'blockreason', 46, '', array( 'maxlength' => '150', 'id' => 'blockreason' ) ); |
| 934 | + $s .= ' ' . Xml::submitButton( wfMsgHtml( 'checkuser-massblock-commit' ), |
| 935 | + array( 'id' => 'checkuserblocksubmit', 'name' => 'checkuserblock' ) ) . "</p>\n"; |
| 936 | + $s .= "</fieldset>\n"; |
| 937 | + } |
| 938 | + $s .= '</form>'; |
| 939 | + } |
| 940 | + |
| 941 | + $wgOut->addHTML( $s ); |
| 942 | + } |
| 943 | + |
| 944 | + protected function userBlockFlags( $ip, $userId, $user ) { |
| 945 | + static $logs, $blocklist; |
| 946 | + $logs = SpecialPage::getTitleFor( 'Log' ); |
| 947 | + $blocklist = SpecialPage::getTitleFor( 'Ipblocklist' ); |
| 948 | + $block = new Block(); |
| 949 | + $block->fromMaster( false ); // use slaves |
| 950 | + $flags = array(); |
| 951 | + if( $block->load( $ip, $userId ) ) { |
| 952 | + // Range blocked? |
| 953 | + if( IP::isIPAddress( $block->mAddress ) && strpos( $block->mAddress, '/' ) ) { |
| 954 | + $userpage = Title::makeTitle( NS_USER, $block->mAddress ); |
| 955 | + $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml( 'checkuser-blocked' ), |
| 956 | + 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
| 957 | + $flags[] = '<strong>(' . $blocklog . ' - ' . $block->mAddress . ')</strong>'; |
| 958 | + // Auto blocked? |
| 959 | + } elseif( $block->mAuto ) { |
| 960 | + $blocklog = $this->sk->makeKnownLinkObj( $blocklist, |
| 961 | + wfMsgHtml( 'checkuser-blocked' ), 'ip=' . urlencode( "#{$block->mId}" ) ); |
| 962 | + $flags[] = '<strong>(' . $blocklog . ')</strong>'; |
| 963 | + } else { |
| 964 | + $userpage = $user->getUserPage(); |
| 965 | + $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml( 'checkuser-blocked' ), |
| 966 | + 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
| 967 | + $flags[] = '<strong>(' . $blocklog . ')</strong>'; |
| 968 | + } |
| 969 | + // IP that is blocked on all wikis? |
| 970 | + } elseif( $ip == $user->getName() && $user->isBlockedGlobally( $ip ) ) { |
| 971 | + $flags[] = '<strong>(' . wfMsgHtml( 'checkuser-gblocked' ) . ')</strong>'; |
| 972 | + } elseif( self::userWasBlocked( $user->getName() ) ) { |
| 973 | + $userpage = $user->getUserPage(); |
| 974 | + $blocklog = $this->sk->makeKnownLinkObj( $logs, wfMsgHtml( 'checkuser-wasblocked' ), |
| 975 | + 'type=block&page=' . urlencode( $userpage->getPrefixedText() ) ); |
| 976 | + $flags[] = '<strong>(' . $blocklog . ')</strong>'; |
| 977 | + } |
| 978 | + return $flags; |
| 979 | + } |
| 980 | + |
| 981 | + /** |
| 982 | + * @param Row $row |
| 983 | + * @param string $reason |
| 984 | + * @return a streamlined recent changes line with IP data |
| 985 | + */ |
| 986 | + protected function CUChangesLine( $row, $reason ) { |
| 987 | + global $wgLang; |
| 988 | + static $cuTitle, $flagCache; |
| 989 | + $cuTitle = SpecialPage::getTitleFor( 'CheckUser' ); |
| 990 | + # Add date headers as needed |
| 991 | + $date = $wgLang->date( wfTimestamp( TS_MW, $row->cuc_timestamp ), true, true ); |
| 992 | + if( !isset( $this->lastdate ) ) { |
| 993 | + $this->lastdate = $date; |
| 994 | + $line = "\n<h4>$date</h4>\n<ul class=\"special\">"; |
| 995 | + } elseif( $date != $this->lastdate ) { |
| 996 | + $line = "</ul>\n<h4>$date</h4>\n<ul class=\"special\">"; |
| 997 | + $this->lastdate = $date; |
| 998 | + } else { |
| 999 | + $line = ''; |
| 1000 | + } |
| 1001 | + $line .= '<li>'; |
| 1002 | + # Create diff/hist/page links |
| 1003 | + $line .= $this->getLinksFromRow( $row ); |
| 1004 | + # Show date |
| 1005 | + $line .= ' . . ' . $wgLang->time( wfTimestamp( TS_MW, $row->cuc_timestamp ), true, true ) . ' . . '; |
| 1006 | + # Userlinks |
| 1007 | + $line .= $this->sk->userLink( $row->cuc_user, $row->cuc_user_text ); |
| 1008 | + $line .= $this->sk->userToolLinks( $row->cuc_user, $row->cuc_user_text ); |
| 1009 | + # Get block info |
| 1010 | + if( isset( $flagCache[$row->cuc_user_text] ) ) { |
| 1011 | + $flags = $flagCache[$row->cuc_user_text]; |
| 1012 | + } else { |
| 1013 | + $user = User::newFromName( $row->cuc_user_text, false ); |
| 1014 | + $ip = IP::isIPAddress( $row->cuc_user_text ) ? $row->cuc_user_text : ''; |
| 1015 | + $flags = $this->userBlockFlags( $ip, $row->cuc_user, $user ); |
| 1016 | + $flagCache[$row->cuc_user_text] = $flags; |
| 1017 | + } |
| 1018 | + # Add any block information |
| 1019 | + if( count( $flags ) ) { |
| 1020 | + $line .= ' ' . implode( ' ', $flags ); |
| 1021 | + } |
| 1022 | + # Action text, hackish ... |
| 1023 | + if( $row->cuc_actiontext ) { |
| 1024 | + $line .= ' ' . $this->sk->formatComment( $row->cuc_actiontext ) . ' '; |
| 1025 | + } |
| 1026 | + # Comment |
| 1027 | + $line .= $this->sk->commentBlock( $row->cuc_comment ); |
| 1028 | + $line .= '<br /> <small>'; |
| 1029 | + # IP |
| 1030 | + $line .= ' <strong>IP</strong>: ' . $this->sk->makeKnownLinkObj( $cuTitle, |
| 1031 | + htmlspecialchars( $row->cuc_ip ), 'user=' . urlencode( $row->cuc_ip ) . '&reason=' . urlencode( $reason ) ); |
| 1032 | + # XFF |
| 1033 | + if( $row->cuc_xff != null ) { |
| 1034 | + # Flag our trusted proxies |
| 1035 | + list( $client, $trusted ) = efGetClientIPfromXFF( $row->cuc_xff, $row->cuc_ip ); |
| 1036 | + $c = $trusted ? '#F0FFF0' : '#FFFFCC'; |
| 1037 | + $line .= ' <span class="mw-checkuser-xff" style="background-color: ' . $c . '">' . |
| 1038 | + '<strong>XFF</strong>: '; |
| 1039 | + $line .= $this->sk->makeKnownLinkObj( $cuTitle, |
| 1040 | + htmlspecialchars( $row->cuc_xff ), |
| 1041 | + 'user=' . urlencode( $client ) . '/xff&reason=' . urlencode( $reason ) ) . '</span>'; |
| 1042 | + } |
| 1043 | + # User agent |
| 1044 | + $line .= ' <span class="mw-checkuser-agent" style="color:#888;">' . |
| 1045 | + htmlspecialchars( $row->cuc_agent ) . '</span>'; |
| 1046 | + |
| 1047 | + $line .= "</small></li>\n"; |
| 1048 | + |
| 1049 | + return $line; |
| 1050 | + } |
| 1051 | + |
| 1052 | + /** |
| 1053 | + * @param $row |
| 1054 | + * @create diff/hist/page link |
| 1055 | + */ |
| 1056 | + protected function getLinksFromRow( $row ) { |
| 1057 | + // Log items (old format) and events to logs |
| 1058 | + if( $row->cuc_type == RC_LOG && $row->cuc_namespace == NS_SPECIAL ) { |
| 1059 | + list( $specialName, $logtype ) = SpecialPage::resolveAliasWithSubpage( $row->cuc_title ); |
| 1060 | + $logname = LogPage::logName( $logtype ); |
| 1061 | + $title = Title::makeTitle( $row->cuc_namespace, $row->cuc_title ); |
| 1062 | + $links = '(' . $this->sk->makeKnownLinkObj( $title, $logname ) . ')'; |
| 1063 | + // Log items |
| 1064 | + } elseif( $row->cuc_type == RC_LOG ) { |
| 1065 | + $title = Title::makeTitle( $row->cuc_namespace, $row->cuc_title ); |
| 1066 | + $links = '(' . $this->sk->makeKnownLinkObj( SpecialPage::getTitleFor( 'Log' ), $this->message['log'], |
| 1067 | + wfArrayToCGI( array( 'page' => $title->getPrefixedText() ) ) ) . ')'; |
| 1068 | + } else { |
| 1069 | + $title = Title::makeTitle( $row->cuc_namespace, $row->cuc_title ); |
| 1070 | + # New pages |
| 1071 | + if( $row->cuc_type == RC_NEW ) { |
| 1072 | + $links = '(' . $this->message['diff'] . ') '; |
| 1073 | + } else { |
| 1074 | + # Diff link |
| 1075 | + $links = ' (' . $this->sk->makeKnownLinkObj( $title, $this->message['diff'], |
| 1076 | + wfArrayToCGI( array( |
| 1077 | + 'curid' => $row->cuc_page_id, |
| 1078 | + 'diff' => $row->cuc_this_oldid, |
| 1079 | + 'oldid' => $row->cuc_last_oldid ) ) ) . ') '; |
| 1080 | + } |
| 1081 | + # History link |
| 1082 | + $links .= ' (' . $this->sk->makeKnownLinkObj( $title, $this->message['hist'], |
| 1083 | + wfArrayToCGI( array( |
| 1084 | + 'curid' => $row->cuc_page_id, |
| 1085 | + 'action' => 'history' ) ) ) . ') . . '; |
| 1086 | + # Some basic flags |
| 1087 | + if( $row->cuc_type == RC_NEW ) { |
| 1088 | + $links .= '<span class="newpage">' . $this->message['newpageletter'] . '</span>'; |
| 1089 | + } |
| 1090 | + if( $row->cuc_minor ) { |
| 1091 | + $links .= '<span class="minor">' . $this->message['minoreditletter'] . '</span>'; |
| 1092 | + } |
| 1093 | + # Page link |
| 1094 | + $links .= ' ' . $this->sk->makeLinkObj( $title ); |
| 1095 | + } |
| 1096 | + return $links; |
| 1097 | + } |
| 1098 | + |
| 1099 | + protected static function userWasBlocked( $name ) { |
| 1100 | + $userpage = Title::makeTitle( NS_USER, $name ); |
| 1101 | + return wfGetDB( DB_SLAVE )->selectField( 'logging', '1', |
| 1102 | + array( 'log_type' => array( 'block', 'suppress' ), |
| 1103 | + 'log_action' => 'block', |
| 1104 | + 'log_namespace' => $userpage->getNamespace(), |
| 1105 | + 'log_title' => $userpage->getDBkey() ), |
| 1106 | + __METHOD__, |
| 1107 | + array( 'USE INDEX' => 'page_time' ) ); |
| 1108 | + } |
| 1109 | + |
| 1110 | + /** |
| 1111 | + * Format a link to a group description page |
| 1112 | + * |
| 1113 | + * @param string $group |
| 1114 | + * @return string |
| 1115 | + */ |
| 1116 | + protected static function buildGroupLink( $group ) { |
| 1117 | + static $cache = array(); |
| 1118 | + if( !isset( $cache[$group] ) ) { |
| 1119 | + $cache[$group] = User::makeGroupLinkHtml( $group, User::getGroupMember( $group ) ); |
| 1120 | + } |
| 1121 | + return $cache[$group]; |
| 1122 | + } |
| 1123 | + |
| 1124 | + /** |
| 1125 | + * @param Database $db |
| 1126 | + * @param string $ip |
| 1127 | + * @param string $xfor |
| 1128 | + * @return mixed array/false conditions |
| 1129 | + */ |
| 1130 | + protected function getIpConds( $db, $ip, $xfor = false ) { |
| 1131 | + $type = ( $xfor ) ? 'xff' : 'ip'; |
| 1132 | + // IPv4 CIDR, 16-32 bits |
| 1133 | + if( preg_match( '#^(\d+\.\d+\.\d+\.\d+)/(\d+)$#', $ip, $matches ) ) { |
| 1134 | + if( $matches[2] < 16 || $matches[2] > 32 ) { |
| 1135 | + return false; // invalid |
| 1136 | + } |
| 1137 | + list( $start, $end ) = IP::parseRange( $ip ); |
| 1138 | + return array( 'cuc_' . $type . '_hex BETWEEN ' . $db->addQuotes( $start ) . ' AND ' . $db->addQuotes( $end ) ); |
| 1139 | + } elseif( preg_match( '#^\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}/(\d+)$#', $ip, $matches ) ) { |
| 1140 | + // IPv6 CIDR, 96-128 bits |
| 1141 | + if( $matches[1] < 96 || $matches[1] > 128 ) { |
| 1142 | + return false; // invalid |
| 1143 | + } |
| 1144 | + list( $start, $end ) = IP::parseRange6( $ip ); |
| 1145 | + return array( 'cuc_' . $type . '_hex BETWEEN ' . $db->addQuotes( $start ) . ' AND ' . $db->addQuotes( $end ) ); |
| 1146 | + } elseif( preg_match( '#^(\d+)\.(\d+)\.(\d+)\.(\d+)$#', $ip ) ) { |
| 1147 | + // 32 bit IPv4 |
| 1148 | + $ip_hex = IP::toHex( $ip ); |
| 1149 | + return array( 'cuc_'.$type.'_hex' => $ip_hex ); |
| 1150 | + } elseif( preg_match( '#^\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}:\w{1,4}$#', $ip ) ) { |
| 1151 | + // 128 bit IPv6 |
| 1152 | + $ip_hex = IP::toHex( $ip ); |
| 1153 | + return array( 'cuc_' . $type . '_hex' => $ip_hex ); |
| 1154 | + } |
| 1155 | + // throw away this query, incomplete IP, these don't get through the entry point anyway |
| 1156 | + return false; // invalid |
| 1157 | + } |
| 1158 | + |
| 1159 | + protected function getTimeConds( $period ) { |
| 1160 | + if( !$period ) { |
| 1161 | + return '1 = 1'; |
| 1162 | + } |
| 1163 | + $dbr = wfGetDB( DB_SLAVE ); |
| 1164 | + $cutoff_unixtime = time() - ( $period * 24 * 3600 ); |
| 1165 | + $cutoff_unixtime = $cutoff_unixtime - ( $cutoff_unixtime % 86400 ); |
| 1166 | + $cutoff = $dbr->addQuotes( $dbr->timestamp( $cutoff_unixtime ) ); |
| 1167 | + return "cuc_timestamp > $cutoff"; |
| 1168 | + } |
| 1169 | + |
| 1170 | + protected function showLog() { |
| 1171 | + global $wgRequest, $wgOut; |
| 1172 | + $type = $wgRequest->getVal( 'cuSearchType' ); |
| 1173 | + $target = $wgRequest->getVal( 'cuSearch' ); |
| 1174 | + $year = $wgRequest->getIntOrNull( 'year' ); |
| 1175 | + $month = $wgRequest->getIntOrNull( 'month' ); |
| 1176 | + $error = false; |
| 1177 | + $dbr = wfGetDB( DB_SLAVE ); |
| 1178 | + $searchConds = false; |
| 1179 | + |
| 1180 | + $wgOut->setPageTitle( wfMsg( 'checkuser-log' ) ); |
| 1181 | + |
| 1182 | + $wgOut->addHTML( $this->sk->makeKnownLinkObj( $this->getTitle(), wfMsgHtml( 'checkuser-log-return' ) ) ); |
| 1183 | + |
| 1184 | + if ( $type === null ) { |
| 1185 | + $type = 'target'; |
| 1186 | + } elseif ( $type == 'initiator' ) { |
| 1187 | + $user = User::newFromName( $target ); |
| 1188 | + if ( !$user || !$user->getID() ) { |
| 1189 | + $error = 'checkuser-user-nonexistent'; |
| 1190 | + } else { |
| 1191 | + $searchConds = array( 'cul_user' => $user->getID() ); |
| 1192 | + } |
| 1193 | + } else /* target */ { |
| 1194 | + $type = 'target'; |
| 1195 | + // Is it an IP? |
| 1196 | + list( $start, $end ) = IP::parseRange( $target ); |
| 1197 | + if ( $start !== false ) { |
| 1198 | + if ( $start == $end ) { |
| 1199 | + $searchConds = array( 'cul_target_hex = ' . $dbr->addQuotes( $start ) . ' OR ' . |
| 1200 | + '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . |
| 1201 | + 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' |
| 1202 | + ); |
| 1203 | + } else { |
| 1204 | + $searchConds = array( |
| 1205 | + '(cul_target_hex >= ' . $dbr->addQuotes( $start ) . ' AND ' . |
| 1206 | + 'cul_target_hex <= ' . $dbr->addQuotes( $end ) . ') OR ' . |
| 1207 | + '(cul_range_end >= ' . $dbr->addQuotes( $start ) . ' AND ' . |
| 1208 | + 'cul_range_start <= ' . $dbr->addQuotes( $end ) . ')' |
| 1209 | + ); |
| 1210 | + } |
| 1211 | + } else { |
| 1212 | + // Is it a user? |
| 1213 | + $user = User::newFromName( $target ); |
| 1214 | + if ( $user && $user->getID() ) { |
| 1215 | + $searchConds = array( |
| 1216 | + 'cul_type' => array( 'userips', 'useredits' ), |
| 1217 | + 'cul_target_id' => $user->getID(), |
| 1218 | + ); |
| 1219 | + } elseif ( $target ) { |
| 1220 | + $error = 'checkuser-user-nonexistent'; |
| 1221 | + } |
| 1222 | + } |
| 1223 | + } |
| 1224 | + |
| 1225 | + $searchTypes = array( 'initiator', 'target' ); |
| 1226 | + $select = "<select name=\"cuSearchType\" style='margin-top:.2em;'>\n"; |
| 1227 | + foreach ( $searchTypes as $searchType ) { |
| 1228 | + if ( $type == $searchType ) { |
| 1229 | + $checked = 'selected="selected"'; |
| 1230 | + } else { |
| 1231 | + $checked = ''; |
| 1232 | + } |
| 1233 | + $caption = wfMsgHtml( 'checkuser-search-' . $searchType ); |
| 1234 | + $select .= "<option value=\"$searchType\" $checked>$caption</option>\n"; |
| 1235 | + } |
| 1236 | + $select .= '</select>'; |
| 1237 | + |
| 1238 | + $encTarget = htmlspecialchars( $target ); |
| 1239 | + $msgSearch = wfMsgHtml( 'checkuser-search' ); |
| 1240 | + $input = "<input type=\"text\" name=\"cuSearch\" value=\"$encTarget\" size=\"40\"/>"; |
| 1241 | + $msgSearchForm = wfMsgHtml( 'checkuser-search-form', $select, $input ); |
| 1242 | + $formAction = $this->getLogSubpageTitle()->escapeLocalURL(); |
| 1243 | + $msgSearchSubmit = ' ' . wfMsgHtml( 'checkuser-search-submit' ) . ' '; |
| 1244 | + |
| 1245 | + $s = "<form method='get' action=\"$formAction\">\n" . |
| 1246 | + "<fieldset><legend>$msgSearch</legend>\n" . |
| 1247 | + "<p>$msgSearchForm</p>\n" . |
| 1248 | + "<p>" . $this->getDateMenu( $year, $month ) . " \n" . |
| 1249 | + "<input type=\"submit\" name=\"cuSearchSubmit\" value=\"$msgSearchSubmit\"/></p>\n" . |
| 1250 | + "</fieldset></form>\n"; |
| 1251 | + $wgOut->addHTML( $s ); |
| 1252 | + |
| 1253 | + if ( $error !== false ) { |
| 1254 | + $wgOut->addWikiText( '<div class="errorbox">' . wfMsg( $error ) . '</div>' ); |
| 1255 | + return; |
| 1256 | + } |
| 1257 | + |
| 1258 | + $pager = new CheckUserLogPager( $this, $searchConds, $year, $month ); |
| 1259 | + $wgOut->addHTML( |
| 1260 | + $pager->getNavigationBar() . |
| 1261 | + $pager->getBody() . |
| 1262 | + $pager->getNavigationBar() |
| 1263 | + ); |
| 1264 | + } |
| 1265 | + |
| 1266 | + /** |
| 1267 | + * @return string Formatted HTML |
| 1268 | + * @param int $year |
| 1269 | + * @param int $month |
| 1270 | + */ |
| 1271 | + protected function getDateMenu( $year, $month ) { |
| 1272 | + # Offset overrides year/month selection |
| 1273 | + if( $month && $month !== -1 ) { |
| 1274 | + $encMonth = intval( $month ); |
| 1275 | + } else { |
| 1276 | + $encMonth = ''; |
| 1277 | + } |
| 1278 | + if ( $year ) { |
| 1279 | + $encYear = intval( $year ); |
| 1280 | + } elseif( $encMonth ) { |
| 1281 | + $thisMonth = intval( gmdate( 'n' ) ); |
| 1282 | + $thisYear = intval( gmdate( 'Y' ) ); |
| 1283 | + if( intval( $encMonth ) > $thisMonth ) { |
| 1284 | + $thisYear--; |
| 1285 | + } |
| 1286 | + $encYear = $thisYear; |
| 1287 | + } else { |
| 1288 | + $encYear = ''; |
| 1289 | + } |
| 1290 | + return Xml::label( wfMsg( 'year' ), 'year' ) . ' ' . |
| 1291 | + Xml::input( 'year', 4, $encYear, array( 'id' => 'year', 'maxlength' => 4 ) ) . |
| 1292 | + ' ' . |
| 1293 | + Xml::label( wfMsg( 'month' ), 'month' ) . ' ' . |
| 1294 | + Xml::monthSelector( $encMonth, -1 ); |
| 1295 | + } |
| 1296 | + |
| 1297 | + protected function addLogEntry( $logType, $targetType, $target, $reason, $targetID = 0 ) { |
| 1298 | + global $wgUser; |
| 1299 | + |
| 1300 | + if ( $targetType == 'ip' ) { |
| 1301 | + list( $rangeStart, $rangeEnd ) = IP::parseRange( $target ); |
| 1302 | + $targetHex = $rangeStart; |
| 1303 | + if ( $rangeStart == $rangeEnd ) { |
| 1304 | + $rangeStart = $rangeEnd = ''; |
| 1305 | + } |
| 1306 | + } else { |
| 1307 | + $targetHex = $rangeStart = $rangeEnd = ''; |
| 1308 | + } |
| 1309 | + |
| 1310 | + $dbw = wfGetDB( DB_MASTER ); |
| 1311 | + $cul_id = $dbw->nextSequenceValue( 'cu_log_cul_id_seq' ); |
| 1312 | + $dbw->insert( 'cu_log', |
| 1313 | + array( |
| 1314 | + 'cul_id' => $cul_id, |
| 1315 | + 'cul_timestamp' => $dbw->timestamp(), |
| 1316 | + 'cul_user' => $wgUser->getID(), |
| 1317 | + 'cul_user_text' => $wgUser->getName(), |
| 1318 | + 'cul_reason' => $reason, |
| 1319 | + 'cul_type' => $logType, |
| 1320 | + 'cul_target_id' => $targetID, |
| 1321 | + 'cul_target_text' => $target, |
| 1322 | + 'cul_target_hex' => $targetHex, |
| 1323 | + 'cul_range_start' => $rangeStart, |
| 1324 | + 'cul_range_end' => $rangeEnd, |
| 1325 | + ), __METHOD__ ); |
| 1326 | + return true; |
| 1327 | + } |
12 | 1328 | } |
13 | 1329 | |
14 | 1330 | class CheckUserLogPager extends ReverseChronologicalPager { |
— | — | @@ -38,21 +1354,21 @@ |
39 | 1355 | |
40 | 1356 | $user = $skin->userLink( $row->cul_user, $row->user_name ); |
41 | 1357 | |
42 | | - if ( $row->cul_type == 'userips' ) { |
43 | | - $target = $skin->userLink( $row->cul_target_id, $row->cul_target_text ) . |
| 1358 | + if ( $row->cul_type == 'userips' || $row->cul_type == 'useredits' ) { |
| 1359 | + $target = $skin->userLink( $row->cul_target_id, $row->cul_target_text ) . |
44 | 1360 | $skin->userToolLinks( $row->cul_target_id, $row->cul_target_text ); |
45 | 1361 | } else { |
46 | 1362 | $target = $row->cul_target_text; |
47 | 1363 | } |
48 | 1364 | |
49 | | - return '<li>' . |
50 | | - $wgLang->timeanddate( wfTimestamp(TS_MW,$row->cul_timestamp), true ) . |
| 1365 | + return '<li>' . |
| 1366 | + $wgLang->timeanddate( wfTimestamp( TS_MW, $row->cul_timestamp ), true ) . |
51 | 1367 | wfMsg( 'comma-separator' ) . |
52 | | - wfMsg( |
| 1368 | + wfMsg( |
53 | 1369 | 'checkuser-log-' . $row->cul_type, |
54 | 1370 | $user, |
55 | | - $target |
56 | | - ) . |
| 1371 | + $target |
| 1372 | + ) . |
57 | 1373 | $comment . |
58 | 1374 | '</li>'; |
59 | 1375 | } |
— | — | @@ -78,10 +1394,9 @@ |
79 | 1395 | } |
80 | 1396 | |
81 | 1397 | function getQueryInfo() { |
82 | | - global $wgRequest; |
83 | 1398 | $this->searchConds[] = 'user_id = cul_user'; |
84 | 1399 | return array( |
85 | | - 'tables' => array('cu_log','user'), |
| 1400 | + 'tables' => array( 'cu_log', 'user' ), |
86 | 1401 | 'fields' => $this->selectFields(), |
87 | 1402 | 'conds' => $this->searchConds |
88 | 1403 | ); |
— | — | @@ -94,9 +1409,11 @@ |
95 | 1410 | function getTitle() { |
96 | 1411 | return $this->specialPage->getLogSubpageTitle(); |
97 | 1412 | } |
98 | | - |
| 1413 | + |
99 | 1414 | function selectFields() { |
100 | | - return array('cul_id','cul_timestamp','cul_user','cul_reason','cul_type', |
101 | | - 'cul_target_id','cul_target_text','user_name'); |
| 1415 | + return array( |
| 1416 | + 'cul_id', 'cul_timestamp', 'cul_user', 'cul_reason', 'cul_type', |
| 1417 | + 'cul_target_id', 'cul_target_text', 'user_name' |
| 1418 | + ); |
102 | 1419 | } |
103 | 1420 | } |
Property changes on: branches/new-checkuser/CheckUser_body.php |
___________________________________________________________________ |
Deleted: svn:eol-style |
104 | 1421 | - native |
Index: branches/new-checkuser/CheckUser.i18n.php |
— | — | @@ -2,33 +2,38 @@ |
3 | 3 | /** |
4 | 4 | * Internationalisation file for CheckUser extension. |
5 | 5 | * |
6 | | - * @addtogroup Extensions |
7 | | -*/ |
| 6 | + * @file |
| 7 | + * @ingroup Extensions |
| 8 | + */ |
8 | 9 | |
9 | 10 | $messages = array(); |
10 | 11 | |
| 12 | +/** English |
| 13 | + * @author Tim Starling |
| 14 | + * @author Aaron Schulz |
| 15 | + */ |
11 | 16 | $messages['en'] = array( |
12 | | - 'checkuser-summary' => 'This tool scans recent changes to retrieve the IPs used by a user or show the edit/user data for an IP. |
13 | | -Users and edits by a client IP can be retrieved via XFF headers by appending the IP with "/xff". IPv4 (CIDR 16-32) and IPv6 (CIDR 96-128) are supported. |
| 17 | + 'checkuser-summary' => 'This tool scans recent changes to retrieve the IP addresses used by a user or show the edit/user data for an IP address. |
| 18 | +Users and edits by a client IP address can be retrieved via XFF headers by appending the IP address with "/xff". IPv4 (CIDR 16-32) and IPv6 (CIDR 96-128) are supported. |
14 | 19 | No more than 5000 edits will be returned for performance reasons. |
15 | 20 | Use this in accordance with policy.', |
16 | 21 | 'checkuser-desc' => 'Grants users with the appropriate permission the ability to check user\'s IP addresses and other information', |
17 | 22 | 'checkuser-logcase' => 'The log search is case sensitive.', |
18 | 23 | 'checkuser' => 'Check user', |
19 | | - 'checkuser-contribs' => 'check user IPs', |
| 24 | + 'checkuser-contribs' => 'check user IP addresses', |
20 | 25 | 'group-checkuser' => 'Check users', |
21 | 26 | 'group-checkuser-member' => 'Check user', |
22 | 27 | 'right-checkuser' => "Check user's IP addresses and other information", |
23 | | - 'right-checkuser-log' => "View the checkuser log", |
| 28 | + 'right-checkuser-log' => 'View the checkuser log', |
24 | 29 | 'grouppage-checkuser' => '{{ns:project}}:Check user', |
25 | 30 | 'checkuser-reason' => 'Reason:', |
26 | 31 | 'checkuser-showlog' => 'Show log', |
27 | 32 | 'checkuser-log' => 'CheckUser log', |
28 | 33 | 'checkuser-query' => 'Query recent changes', |
29 | | - 'checkuser-target' => 'User or IP', |
| 34 | + 'checkuser-target' => 'IP address or username:', |
30 | 35 | 'checkuser-users' => 'Get users', |
31 | | - 'checkuser-edits' => 'Get edits from IP', |
32 | | - 'checkuser-ips' => 'Get IPs', |
| 36 | + 'checkuser-edits' => 'Get edits from IP address', |
| 37 | + 'checkuser-ips' => 'Get IP addresses', |
33 | 38 | 'checkuser-account' => 'Get account edits', |
34 | 39 | 'checkuser-search' => 'Search', |
35 | 40 | 'checkuser-period' => 'Duration:', |
— | — | @@ -36,7 +41,7 @@ |
37 | 42 | 'checkuser-week-2' => 'last two weeks', |
38 | 43 | 'checkuser-month' => 'last 30 days', |
39 | 44 | 'checkuser-all' => 'all', |
40 | | - 'checkuser-cidr-label' => 'Find common range and affected addresses for a list of IPs', |
| 45 | + 'checkuser-cidr-label' => 'Find common range and affected IP addresses for a list of IP addresses', |
41 | 46 | 'checkuser-cidr-res' => 'Common CIDR:', |
42 | 47 | 'checkuser-empty' => 'The log contains no items.', |
43 | 48 | 'checkuser-nomatch' => 'No matches found.', |
— | — | @@ -60,8 +65,9 @@ |
61 | 66 | 'checkuser-block-failure' => '\'\'\'No users blocked.\'\'\'', |
62 | 67 | 'checkuser-block-limit' => 'Too many users selected.', |
63 | 68 | 'checkuser-block-noreason' => 'You must give a reason for the blocks.', |
| 69 | + 'checkuser-noreason' => 'You must give a reason for this query.', |
64 | 70 | 'checkuser-accounts' => '$1 new {{PLURAL:$1|account|accounts}}', |
65 | | - 'checkuser-too-many' => 'Too many results, please narrow down the CIDR. |
| 71 | + 'checkuser-too-many' => 'Too many results (according to query estimate), please narrow down the CIDR. |
66 | 72 | Here are the IPs used (5000 max, sorted by address):', |
67 | 73 | 'checkuser-user-nonexistent' => 'The specified user does not exist.', |
68 | 74 | 'checkuser-search-form' => 'Find log entries where the $1 is $2', |
— | — | @@ -71,30 +77,31 @@ |
72 | 78 | 'checkuser-ipeditcount' => '~$1 from all users', |
73 | 79 | 'checkuser-log-subpage' => 'Log', |
74 | 80 | 'checkuser-log-return' => 'Return to CheckUser main form', |
75 | | - |
| 81 | + |
76 | 82 | 'checkuser-limited' => '\'\'\'These results have been truncated for performance reasons.\'\'\'', |
77 | 83 | |
78 | | - 'checkuser-log-userips' => '$1 got IPs for $2', |
| 84 | + 'checkuser-log-userips' => '$1 got IP addresses for $2', |
79 | 85 | 'checkuser-log-ipedits' => '$1 got edits for $2', |
80 | 86 | 'checkuser-log-ipusers' => '$1 got users for $2', |
81 | 87 | 'checkuser-log-ipedits-xff' => '$1 got edits for XFF $2', |
82 | 88 | 'checkuser-log-ipusers-xff' => '$1 got users for XFF $2', |
83 | 89 | 'checkuser-log-useredits' => '$1 got edits for $2', |
84 | | - |
| 90 | + |
85 | 91 | 'checkuser-autocreate-action' => 'was automatically created', |
86 | 92 | 'checkuser-email-action' => 'sent an email to user "$1"', |
87 | 93 | 'checkuser-reset-action' => 'reset password for user "$1"', |
88 | | - |
| 94 | + |
89 | 95 | 'checkuser-toollinks' => '<span class="plainlinks">[[http://openrbl.org/query?$1 RDNS] · |
90 | 96 | [http://www.robtex.com/rbls/$1.html RBLs] · |
91 | 97 | [http://www.dnsstuff.com/tools/tracert.ch?ip=$1 Traceroute] · |
92 | 98 | [http://www.ip2location.com/$1 Geolocate] · |
93 | | -[http://toolserver.org/~krimpet/torcheck.php?ip=$1 Tor check] · |
| 99 | +[http://toolserver.org/~overlordq/scripts/checktor.fcgi?ip=$1 Tor check] · |
94 | 100 | [http://ws.arin.net/whois/?queryinput=$1 WHOIS]]</span>', # do not translate or duplicate this message to other languages |
95 | 101 | ); |
96 | 102 | |
97 | 103 | /** Message documentation (Message documentation) |
98 | 104 | * @author Darth Kule |
| 105 | + * @author Fryed-peach |
99 | 106 | * @author Jon Harald Søby |
100 | 107 | * @author Kwj2772 |
101 | 108 | * @author Lejonel |
— | — | @@ -104,17 +111,22 @@ |
105 | 112 | * @author Raymond |
106 | 113 | * @author Siebrand |
107 | 114 | * @author Slomox |
| 115 | + * @author Tgr |
108 | 116 | */ |
109 | 117 | $messages['qqq'] = array( |
110 | 118 | 'checkuser-desc' => 'Short description of the CheckUser extension, shown on [[Special:Version]]', |
111 | 119 | 'checkuser' => 'Check user extension. The name of the special page where checkusers can check the IP addresses of users. The message is used in the list of special pages, and at the top of [[Special:Checkuser]]. |
112 | 120 | |
113 | 121 | {{Identical|Check user}}', |
| 122 | + 'group-checkuser' => '{{Identical|Check user}}', |
114 | 123 | 'group-checkuser-member' => '{{Identical|Check user}}', |
115 | 124 | 'right-checkuser' => '{{doc-right}}', |
116 | 125 | 'right-checkuser-log' => '{{doc-right}}', |
| 126 | + 'grouppage-checkuser' => '{{Identical|Check user}}', |
117 | 127 | 'checkuser-reason' => '{{Identical|Reason}}', |
| 128 | + 'checkuser-target' => '{{Identical|IP address or username}}', |
118 | 129 | 'checkuser-search' => '{{Identical|Search}}', |
| 130 | + 'checkuser-period' => '{{Identical|Duration}}', |
119 | 131 | 'checkuser-all' => '{{Identical|All}}', |
120 | 132 | 'checkuser-nomatch-edits' => '* $1 = date |
121 | 133 | * $2 = time', |
— | — | @@ -144,6 +156,8 @@ |
145 | 157 | 'checkuser-log-ipusers-xff' => 'This is an entry in the checkuser log when a checkuser checks which users have used an XFF IP address (XFF means X-Forwarded-For. Some providers use proxies to forward user requests. This effectively means anonymization of requests. To make the requesting user identifiable again, the original requesting IP is transmitted in a separate HTTP header, the XFF header.). |
146 | 158 | *Parameter $1 is the user who did the check |
147 | 159 | *Parameter $2 is the IP address', |
| 160 | + 'checkuser-log-useredits' => ":'''$1:''' name of checkuser |
| 161 | +:'''$2:''' name of user whose edits were inspected", |
148 | 162 | 'checkuser-autocreate-action' => 'Text of the event displayed in the CheckUser results, corresponding to the automatic creation of a new user account (by CentralAuth).', |
149 | 163 | ); |
150 | 164 | |
— | — | @@ -172,25 +186,66 @@ |
173 | 187 | $messages['af'] = array( |
174 | 188 | 'checkuser-logcase' => 'Die logboek soek-funksie is kassensitief.', |
175 | 189 | 'checkuser' => 'Kontroleer gebruiker', |
| 190 | + 'checkuser-contribs' => 'kontroleer gebruiker se IP-adresse', |
176 | 191 | 'group-checkuser' => 'Kontroleer gebruikers', |
177 | | - 'group-checkuser-member' => 'Kontroleer gebruiker', |
| 192 | + 'group-checkuser-member' => 'kontrolegebruiker', |
178 | 193 | 'right-checkuser' => 'Besigtig gebruikers se IP-adresse en ander gegewens', |
179 | | - 'checkuser-reason' => 'Rede', |
| 194 | + 'grouppage-checkuser' => '{{ns:project}}:Kontrolegebruiker', |
| 195 | + 'checkuser-reason' => 'Rede:', |
180 | 196 | 'checkuser-showlog' => 'Wys logboek', |
181 | | - 'checkuser-target' => 'Gebruiker of IP', |
| 197 | + 'checkuser-query' => 'Navraag op onlangse wysigings', |
| 198 | + 'checkuser-target' => 'IP-adres of gebruikersnaam:', |
182 | 199 | 'checkuser-users' => 'Kry gebruikers', |
183 | 200 | 'checkuser-edits' => 'Kry wysigings vanaf IP', |
184 | 201 | 'checkuser-ips' => 'Kry IPs', |
185 | 202 | 'checkuser-search' => 'Soek', |
| 203 | + 'checkuser-period' => 'Duur:', |
| 204 | + 'checkuser-week-1' => 'laaste week', |
| 205 | + 'checkuser-week-2' => 'laaste twee weke', |
| 206 | + 'checkuser-month' => 'laaste 30 dae', |
| 207 | + 'checkuser-all' => 'alle', |
| 208 | + 'checkuser-cidr-res' => 'Gemeenskaplike CIDR:', |
186 | 209 | 'checkuser-empty' => 'Die logboek het geen inskrywings nie.', |
187 | 210 | 'checkuser-nomatch' => 'Geen resultate gevind.', |
| 211 | + 'checkuser-nomatch-edits' => 'Niks gevind nie. |
| 212 | +Die Laaste wysig was op $1 op $2.', |
188 | 213 | 'checkuser-check' => 'Kontroleer', |
189 | 214 | 'checkuser-log-fail' => 'Kan nie logboek inskrywing byvoeg nie', |
190 | 215 | 'checkuser-nolog' => 'Logboek lêer nie gevind.', |
191 | 216 | 'checkuser-blocked' => 'Versper', |
| 217 | + 'checkuser-gblocked' => 'Globaal geblokkeer', |
| 218 | + 'checkuser-locked' => 'Gesluit', |
| 219 | + 'checkuser-wasblocked' => 'Vantevore geblokkeer gewees', |
| 220 | + 'checkuser-localonly' => 'Nie verenig nie', |
| 221 | + 'checkuser-massblock' => 'Blok geselekteerde gebruikers', |
| 222 | + 'checkuser-blocktag' => 'Vervang gebruikersbladsye met:', |
| 223 | + 'checkuser-blocktag-talk' => 'Vervang besprekingsbladsye met:', |
| 224 | + 'checkuser-massblock-commit' => 'Blok geselekteerde gebruikers', |
| 225 | + 'checkuser-block-success' => "'''Die {{PLURAL:$2|gebruiker|gebruikers}} $1 {{PLURAL:$2|is|is}} nou geblokkeer.'''", |
| 226 | + 'checkuser-block-failure' => "'''Geen gebruikers geblokkeer nie.'''", |
| 227 | + 'checkuser-block-limit' => 'Te veel gebruikers gekies.', |
| 228 | + 'checkuser-block-noreason' => "U moet 'n rede vir die blokkades verskaf.", |
| 229 | + 'checkuser-noreason' => "U moet 'n rede vir hierdie navraag verskaf.", |
| 230 | + 'checkuser-accounts' => '$1 nuwe {{PLURAL:$1|gebruiker|gebruikers}}', |
| 231 | + 'checkuser-too-many' => 'Te veel resultate (volgens skatting). Maak die IP-reeks kleiner. |
| 232 | +Hieronder word die gebruikte IP-adresse weergegee (maksimum 5000, op IP-adres gesorteer):', |
| 233 | + 'checkuser-user-nonexistent' => 'Die gespesifiseerde gebruiker bestaan nie.', |
| 234 | + 'checkuser-search-form' => 'Vind logboekinskrywings waar $1 $2 is', |
192 | 235 | 'checkuser-search-submit' => 'Soek', |
| 236 | + 'checkuser-search-initiator' => 'aanvraer', |
193 | 237 | 'checkuser-search-target' => 'teiken', |
| 238 | + 'checkuser-ipeditcount' => '~$1 van alle gebruikers', |
194 | 239 | 'checkuser-log-subpage' => 'Logboek', |
| 240 | + 'checkuser-limited' => "'''Hierdie resultate is vir prestasieredes afgekap.'''", |
| 241 | + 'checkuser-log-userips' => '$1 het die IP-adresse deur $2 opgevra', |
| 242 | + 'checkuser-log-ipedits' => '$1 het die wysigings deur $2 opgevra', |
| 243 | + 'checkuser-log-ipusers' => '$1 het die gebruikers vir $2 opgevra', |
| 244 | + 'checkuser-log-ipedits-xff' => '$1 het die wysigings deur XFF $2 opgevra', |
| 245 | + 'checkuser-log-ipusers-xff' => '$1 het die gebruikers van XFF $2 opgevra', |
| 246 | + 'checkuser-log-useredits' => '$1 het die wysigings deur $2 aangevra', |
| 247 | + 'checkuser-autocreate-action' => 'is outomaties geskep', |
| 248 | + 'checkuser-email-action' => 'het \'n e-pos aan gebruiker "$1" gestuur', |
| 249 | + 'checkuser-reset-action' => 'herstel gebruiker "$1" se wagwoord', |
195 | 250 | ); |
196 | 251 | |
197 | 252 | /** Amharic (አማርኛ) |
— | — | @@ -277,12 +332,12 @@ |
278 | 333 | 'checkuser-showlog' => 'عرض السجل', |
279 | 334 | 'checkuser-log' => 'سجل تدقيق المستخدم', |
280 | 335 | 'checkuser-query' => 'فحص أحدث التغييرات', |
281 | | - 'checkuser-target' => 'مستخدم أو عنوان أيبي', |
| 336 | + 'checkuser-target' => 'عنوان الأيبي أو اسم المستخدم:', |
282 | 337 | 'checkuser-users' => 'اعرض المستخدمين', |
283 | 338 | 'checkuser-edits' => 'اعرض التعديلات من الأيبي', |
284 | 339 | 'checkuser-ips' => 'اعرض الأيبيهات', |
285 | 340 | 'checkuser-account' => 'الحصول على تعديلات الحساب', |
286 | | - 'checkuser-search' => 'بحث', |
| 341 | + 'checkuser-search' => 'ابحث', |
287 | 342 | 'checkuser-period' => 'المدة:', |
288 | 343 | 'checkuser-week-1' => 'آخر أسبوع', |
289 | 344 | 'checkuser-week-2' => 'آخر أسبوعين', |
— | — | @@ -312,12 +367,13 @@ |
313 | 368 | 'checkuser-block-failure' => "'''لا مستخدمون تم منعهم.'''", |
314 | 369 | 'checkuser-block-limit' => 'تم اختيار عدد كبير من المستخدمين.', |
315 | 370 | 'checkuser-block-noreason' => 'يجب أن تعطي سببا لعمليات المنع.', |
| 371 | + 'checkuser-noreason' => 'يجب أن تقدم سببًا لهذا الاستعلام.', |
316 | 372 | 'checkuser-accounts' => '$1 {{PLURAL:$1|حساب|حساب}} جديد', |
317 | | - 'checkuser-too-many' => 'نتائج كثيرة جدا، من فضلك قلل الCIDR. |
| 373 | + 'checkuser-too-many' => 'نتائج كثيرة جدا (بناء على استعلام تقريبي)، من فضلك قلل CIDR. |
318 | 374 | هذه هي الأيبيهات المستخدمة (5000 كحد أقصى، مرتبة بالعنوان):', |
319 | 375 | 'checkuser-user-nonexistent' => 'المستخدم المحدد غير موجود.', |
320 | 376 | 'checkuser-search-form' => 'اعثر على مدخلات السجل حيث $1 هو $2', |
321 | | - 'checkuser-search-submit' => 'بحث', |
| 377 | + 'checkuser-search-submit' => 'ابحث', |
322 | 378 | 'checkuser-search-initiator' => 'بادىء', |
323 | 379 | 'checkuser-search-target' => 'هدف', |
324 | 380 | 'checkuser-ipeditcount' => '~$1 من كل المستخدمين', |
— | — | @@ -335,13 +391,22 @@ |
336 | 392 | 'checkuser-reset-action' => 'أعد ضبط كلمة السر للمستخدم "$1"', |
337 | 393 | ); |
338 | 394 | |
| 395 | +/** Aramaic (ܐܪܡܝܐ) |
| 396 | + * @author Basharh |
| 397 | + */ |
| 398 | +$messages['arc'] = array( |
| 399 | + 'checkuser-reason' => 'ܥܠܬܐ:', |
| 400 | + 'checkuser-showlog' => 'ܚܘܝ ܣܓܠܐ', |
| 401 | + 'checkuser-all' => 'ܟܠ', |
| 402 | +); |
| 403 | + |
339 | 404 | /** Egyptian Spoken Arabic (مصرى) |
340 | 405 | * @author Ghaly |
341 | 406 | * @author Meno25 |
342 | 407 | * @author Ramsis II |
343 | 408 | */ |
344 | 409 | $messages['arz'] = array( |
345 | | - 'checkuser-summary' => 'الوسيلة دى بتدور فى احدث التغييرات علشان ترجع الايبيهات اللى استعملها يوزر او علشان تعرض بيانات التعديل/اليوزر لعنوان الاى بي. |
| 410 | + 'checkuser-summary' => 'الوسيلة دى بتدور فى احدث التغييرات علشان ترجع الايبيهات اللى استعملها يوزر او علشان تعرض بيانات التعديل/اليوزر لعنوان الاى بى. |
346 | 411 | اليوزرز و التعديلات اللى اتعملت من أى بى عميل ممكن تترجع عن طريق عناوين XFF لو زودت على الاى بى "/xff". |
347 | 412 | IPv4 (CIDR 16-32) و IPv6 (CIDR 96-128) مدعومين. |
348 | 413 | مش اكتر من 5000 تعديل ممكن تتعرض بسبب الاداء. |
— | — | @@ -358,7 +423,7 @@ |
359 | 424 | 'checkuser-showlog' => 'عرض السجل', |
360 | 425 | 'checkuser-log' => 'سجل تشييك اليوزر', |
361 | 426 | 'checkuser-query' => 'دور على احدث التغييرات', |
362 | | - 'checkuser-target' => 'يوزر او اى بي', |
| 427 | + 'checkuser-target' => 'اى بى او يوزر:', |
363 | 428 | 'checkuser-users' => 'هات اليوزرز', |
364 | 429 | 'checkuser-edits' => 'هات التعديلات من الاى بي', |
365 | 430 | 'checkuser-ips' => 'هات الايبيهات', |
— | — | @@ -384,12 +449,12 @@ |
385 | 450 | 'checkuser-wasblocked' => 'اتمنع قبل كدا', |
386 | 451 | 'checkuser-localonly' => 'مش متوحد', |
387 | 452 | 'checkuser-massblock' => 'امنع اليوزرز اللى اخترتهم.', |
388 | | - 'checkuser-massblock-text' => 'الحسابات اللى انت اختارتها ح يتمنعو على طول،مش ح يقدرو يفتحو حسابات و ح يتمنعو اوتوماتيكي. |
| 453 | + 'checkuser-massblock-text' => 'الحسابات اللى انت اختارتها ح يتمنعو على طول،مش ح يقدرو يفتحو حسابات و ح يتمنعو اوتوماتيكى. |
389 | 454 | عناوين الاى بى ح تتمنع لمدة اسبوع واحد بالنسبة للى بيستعملو الاى بى و مش ح يقدرو يفتحو حسابات.', |
390 | 455 | 'checkuser-blocktag' => 'بدل صفحات اليوزرز بـ:', |
391 | 456 | 'checkuser-blocktag-talk' => 'بدل صفحة النقاش ب', |
392 | 457 | 'checkuser-massblock-commit' => 'امنع اليوزرز اللى اخترتهم', |
393 | | - 'checkuser-block-success' => "'''الـ {{PLURAL:$2|يوزر|يوزرز}} $1 {{PLURAL:$2|بقى ممنوع|بقو ممنوعين}} دلوقتي.'''", |
| 458 | + 'checkuser-block-success' => "'''الـ {{PLURAL:$2|يوزر|يوزرز}} $1 {{PLURAL:$2|بقى ممنوع|بقو ممنوعين}} دلوقتى.'''", |
394 | 459 | 'checkuser-block-failure' => "'''مافيش يوزرز ممنوعين'''", |
395 | 460 | 'checkuser-block-limit' => 'انت اخترت يوزرز كتار جدا.', |
396 | 461 | 'checkuser-block-noreason' => 'لازم تدى سبب لعمليات المنع.', |
— | — | @@ -595,7 +660,7 @@ |
596 | 661 | 'checkuser-showlog' => 'Паказаць журнал', |
597 | 662 | 'checkuser-log' => 'Журнал праверак удзельнікаў', |
598 | 663 | 'checkuser-query' => 'Запытаць апошнія зьмены', |
599 | | - 'checkuser-target' => 'Рахунак удзельніка альбо IP-адрас', |
| 664 | + 'checkuser-target' => 'IP-адрас альбо рахунак удзельніка:', |
600 | 665 | 'checkuser-users' => 'Атрымаць рахункі ўдзельнікаў', |
601 | 666 | 'checkuser-edits' => 'Атрымаць рэдагаваньні, зробленыя з IP-адрасу', |
602 | 667 | 'checkuser-ips' => 'Атрымаць IP-адрасы', |
— | — | @@ -630,8 +695,9 @@ |
631 | 696 | 'checkuser-block-failure' => "'''Няма заблякаваных рахункаў удзельнікаў.'''", |
632 | 697 | 'checkuser-block-limit' => 'Выбрана зашмат рахункаў удзельнікаў.', |
633 | 698 | 'checkuser-block-noreason' => 'Вам неабходна пазначыць прычыну блякаваньня.', |
| 699 | + 'checkuser-noreason' => 'Вам неабходна падаць прычыну гэтага запыту.', |
634 | 700 | 'checkuser-accounts' => '$1 {{PLURAL:$1|новы рахунак|новыя рахункі|новых рахункаў}}', |
635 | | - 'checkuser-too-many' => 'Зашмат вынікаў, калі ласка, абмяжуйце CIDR. |
| 701 | + 'checkuser-too-many' => 'Зашмат вынікаў (згодна з адзнакай запыту), калі ласка, абмяжуйце CIDR. |
636 | 702 | Тут пададзеныя ўжытыя ІР-адрасы (максымум 5000, адсартаваныя паводле адрасу):', |
637 | 703 | 'checkuser-user-nonexistent' => 'Пазначанага рахунку ўдзельніка не існуе.', |
638 | 704 | 'checkuser-search-form' => 'Пошук запісаў у журнале, дзе $1 зьяўляецца $2', |
— | — | @@ -657,6 +723,7 @@ |
658 | 724 | * @author Borislav |
659 | 725 | * @author DCLXVI |
660 | 726 | * @author Spiritia |
| 727 | + * @author Turin |
661 | 728 | */ |
662 | 729 | $messages['bg'] = array( |
663 | 730 | 'checkuser-summary' => 'Този инструмент сканира последните промени и извлича IP адресите, използвани от потребител или показва информацията за редакциите/потребителя за посоченото IP. |
— | — | @@ -665,6 +732,7 @@ |
666 | 733 | 'checkuser-desc' => 'Предоставя на потребители с подходящите права възможност за проверка на потребителски IP адреси и друга информация', |
667 | 734 | 'checkuser-logcase' => 'Търсенето в дневника различава главни от малки букви.', |
668 | 735 | 'checkuser' => 'Проверяване на потребител', |
| 736 | + 'checkuser-contribs' => 'проверка на IP-адреса на потребителя', |
669 | 737 | 'group-checkuser' => 'Проверяващи', |
670 | 738 | 'group-checkuser-member' => 'Проверяващ', |
671 | 739 | 'right-checkuser' => 'проверяване на потребителски IP адреси и друга информация', |
— | — | @@ -674,7 +742,7 @@ |
675 | 743 | 'checkuser-showlog' => 'Показване на дневника', |
676 | 744 | 'checkuser-log' => 'Дневник на проверяващите', |
677 | 745 | 'checkuser-query' => 'Заявка към последните промени', |
678 | | - 'checkuser-target' => 'Потребител или IP', |
| 746 | + 'checkuser-target' => 'IP-адрес или потребителско име:', |
679 | 747 | 'checkuser-users' => 'Извличане на потребители', |
680 | 748 | 'checkuser-edits' => 'Извличане на редакции от IP', |
681 | 749 | 'checkuser-ips' => 'Извличане на IP адреси', |
— | — | @@ -693,6 +761,8 @@ |
694 | 762 | 'checkuser-nolog' => 'Не беше открит дневник.', |
695 | 763 | 'checkuser-blocked' => 'Блокиран', |
696 | 764 | 'checkuser-gblocked' => 'Глобално блокиран', |
| 765 | + 'checkuser-locked' => 'Заключено', |
| 766 | + 'checkuser-wasblocked' => 'Блокиран преди време', |
697 | 767 | 'checkuser-massblock' => 'Блокиране на избраните потребители', |
698 | 768 | 'checkuser-blocktag' => 'Заместване на потребителските страници с:', |
699 | 769 | 'checkuser-blocktag-talk' => 'Заместване на беседите с:', |
— | — | @@ -701,6 +771,7 @@ |
702 | 772 | 'checkuser-block-failure' => "'''Няма блокирани потребители.'''", |
703 | 773 | 'checkuser-block-limit' => 'Избрани са твърде много потребители.', |
704 | 774 | 'checkuser-block-noreason' => 'Трябва да се посочи причина за блокиранията.', |
| 775 | + 'checkuser-noreason' => 'Необходимо е да се посочи основание за тази заявка.', |
705 | 776 | 'checkuser-accounts' => '$1 {{PLURAL:$1|нова сметка|нови сметки}}', |
706 | 777 | 'checkuser-too-many' => 'Твърде много резултати. Показани са използваните IP адреси (най-много 5000, сортирани по адрес):', |
707 | 778 | 'checkuser-user-nonexistent' => 'Посоченият потребител не съществува.', |
— | — | @@ -717,6 +788,7 @@ |
718 | 789 | 'checkuser-log-ipedits-xff' => '$1 е получил редакции за XFF $2', |
719 | 790 | 'checkuser-log-ipusers-xff' => '$1 е получил потребители за XFF $2', |
720 | 791 | 'checkuser-email-action' => 'изпрати е-писмо на потребител „$1“', |
| 792 | + 'checkuser-reset-action' => 'промяна на парола за потребител "$1"', |
721 | 793 | ); |
722 | 794 | |
723 | 795 | /** Bengali (বাংলা) |
— | — | @@ -734,7 +806,7 @@ |
735 | 807 | 'group-checkuser' => 'ব্যবহারকারীসমূহ পরীক্ষণ', |
736 | 808 | 'group-checkuser-member' => 'ব্যবহারকারী পরীক্ষণ', |
737 | 809 | 'grouppage-checkuser' => '{{ns:project}}:ব্যবহারকারী পরীক্ষণ', |
738 | | - 'checkuser-reason' => 'কারণ', |
| 810 | + 'checkuser-reason' => 'কারণ:', |
739 | 811 | 'checkuser-showlog' => 'লগ দেখাও', |
740 | 812 | 'checkuser-log' => 'CheckUser লগ', |
741 | 813 | 'checkuser-query' => 'সাম্প্রতিক পরিবর্তনসমূহ জানুন', |
— | — | @@ -743,6 +815,11 @@ |
744 | 816 | 'checkuser-edits' => 'আইপি থেকে সম্পাদনাসমূহ পাওয়া যাবে', |
745 | 817 | 'checkuser-ips' => 'আইপি সমূহ পাওয়া যাবে', |
746 | 818 | 'checkuser-search' => 'অনুসন্ধান', |
| 819 | + 'checkuser-period' => 'সময়:', |
| 820 | + 'checkuser-week-1' => 'পূর্ববর্তী সপ্তাহ', |
| 821 | + 'checkuser-week-2' => 'পূর্ববর্তী দুই সপ্তাহ', |
| 822 | + 'checkuser-month' => 'পূর্ববর্তী ৩০ দিন', |
| 823 | + 'checkuser-all' => 'সমস্ত', |
747 | 824 | 'checkuser-empty' => 'এই লগে কিছুই নেই।', |
748 | 825 | 'checkuser-nomatch' => 'এর সাথে মিলে এমন কিছু পাওয়া যায়নি।', |
749 | 826 | 'checkuser-check' => 'পরীক্ষা করুন', |
— | — | @@ -766,45 +843,81 @@ |
767 | 844 | ); |
768 | 845 | |
769 | 846 | /** Breton (Brezhoneg) |
| 847 | + * @author Fohanno |
770 | 848 | * @author Fulup |
| 849 | + * @author Y-M D |
771 | 850 | */ |
772 | 851 | $messages['br'] = array( |
773 | 852 | 'checkuser-summary' => "Furchal a ra an ostilh-mañ ar c'hemmoù diwezhañ a-benn klask ar chomlec'h IP implijet gant un implijer bennak, diskouez a ra holl degasadennoù ur chomlec'h IP (ha pa vefe bet enrollet), pe roll ar c'hontoù implijet gant ur chomlec'h IP. Gallout a ra ar c'hontoù hag ar c'hemmoù bezañ kavet gant un IP XFF mard echu gant \"/xff\". Posupl eo implijout ar protokoloù IPv4 (CIDR 16-32) hag IPv6 (CIDR 96-128). Bevennet eo an niver a gemmoù a c'haller lakaat war wel da {{formatnum:5000}} evit abegoù nerzh ar servijer. Grit gant an ostilh-mañ en ur zoujañ d'ar garta implijout.", |
774 | 853 | 'checkuser-desc' => "Reiñ a ra an tu d'an dud aotreet evit se da wiriañ chomlec'hioù IP an implijerien ha da gaout titouroù all", |
775 | 854 | 'checkuser-logcase' => "Kizidik eo ar c'hlask er marilh ouzh an direnneg (pennlizherennoù/lizherennoù munud)", |
776 | 855 | 'checkuser' => 'Gwiriañ an implijer', |
| 856 | + 'checkuser-contribs' => "gwiriañ chomlec'hioù IP an implijer", |
777 | 857 | 'group-checkuser' => 'Gwiriañ an implijerien', |
778 | 858 | 'group-checkuser-member' => 'Gwiriañ an implijer', |
| 859 | + 'right-checkuser' => "Gwiriañ chomlec'h IP ha titouroù all un implijer", |
| 860 | + 'right-checkuser-log' => 'Sellet ouzh roll ar wiriadennoù bet graet gant an implijerien', |
779 | 861 | 'grouppage-checkuser' => '{{ns:project}}:Gwiriañ an implijer', |
780 | | - 'checkuser-reason' => 'Abeg', |
| 862 | + 'checkuser-reason' => 'Abeg :', |
781 | 863 | 'checkuser-showlog' => 'Diskouez ar marilh', |
782 | 864 | 'checkuser-log' => 'Marilh kontrolliñ an implijerien', |
783 | 865 | 'checkuser-query' => "Klask dre ar c'hemmoù diwezhañ", |
784 | | - 'checkuser-target' => 'Implijer pe IP', |
| 866 | + 'checkuser-target' => 'Anv implijer pe IP :', |
785 | 867 | 'checkuser-users' => 'Kavout an implijerien', |
786 | 868 | 'checkuser-edits' => "Kavout degasadennoù ar chomlec'h IP", |
787 | 869 | 'checkuser-ips' => "Kavout ar chomlec'hioù IP", |
| 870 | + 'checkuser-account' => 'Gwelet kemmoù ar gont', |
788 | 871 | 'checkuser-search' => 'Klask', |
| 872 | + 'checkuser-period' => 'Pad :', |
| 873 | + 'checkuser-week-1' => 'Er sizhun ziwezhañ', |
| 874 | + 'checkuser-week-2' => 'en div sizhunvezh ziwezhañ', |
| 875 | + 'checkuser-month' => 'en 30 devezh diwezhañ', |
| 876 | + 'checkuser-all' => 'pep tra', |
| 877 | + 'checkuser-cidr-label' => "Klask ul lijorenn boutin hag ar chomlerc'hioù lakaet evit ur roll chomlec'hioù IP", |
| 878 | + 'checkuser-cidr-res' => 'Lijorenn CIDR boutin :', |
789 | 879 | 'checkuser-empty' => "N'eus pennad ebet er marilh", |
790 | 880 | 'checkuser-nomatch' => "N'eus bet kavet netra.", |
| 881 | + 'checkuser-nomatch-edits' => "N'eobet kavet reveziadenn ebet. Ar c'hemm diwezhañ a oa d'an $1 da $2.", |
791 | 882 | 'checkuser-check' => 'Gwiriañ', |
792 | 883 | 'checkuser-log-fail' => "Dibosupl ouzhpennañ ar moned d'ar marilh", |
793 | 884 | 'checkuser-nolog' => 'Restr ebet er marilh', |
794 | 885 | 'checkuser-blocked' => 'Stanket', |
795 | | - 'checkuser-too-many' => "Re a zisoc'hoù, strishaat ar CIDR mar plij. |
796 | | -Setu an IPoù implijet (5000 d'ar muiañ, urzhiet dre ar chomlec'h)", |
| 886 | + 'checkuser-gblocked' => 'Stankañ en un doare hollek', |
| 887 | + 'checkuser-locked' => 'Prennet', |
| 888 | + 'checkuser-wasblocked' => 'Bet stanket a-raok', |
| 889 | + 'checkuser-localonly' => "N'eo ket unvanet", |
| 890 | + 'checkuser-massblock' => 'Stankañ an implijerien dibabet', |
| 891 | + 'checkuser-massblock-text' => "Ar gontoù dibabet a vo stanket da viken, gant ar stankadur emgefre gweredekaat ha krouidigezh ur gont diweredekaat. |
| 892 | +Ar chomlec'hioù IP a vo stanket e-pad ur sizhunvezh hepken evit an implijerien a ra gant an IP ha krouidigezh ur gont a vo diweredekaat.", |
| 893 | + 'checkuser-blocktag' => "Erlec'hiañ ar bajennoù implijer gant :", |
| 894 | + 'checkuser-blocktag-talk' => "Erlec'hiañ ar bajennoù kaozeal gant :", |
| 895 | + 'checkuser-massblock-commit' => 'Stankañ an implijer dibabet', |
| 896 | + 'checkuser-block-success' => "'''Stanket eo an {{PLURAL:$2|implijer|implijerien}} $1 bremañ'''", |
| 897 | + 'checkuser-block-failure' => '"N\'eus implijer stanket ebet."', |
| 898 | + 'checkuser-block-limit' => 'Re a implijerien diuzet.', |
| 899 | + 'checkuser-block-noreason' => "Ret eo deoc'h abegiñ ar stankadennoù.", |
| 900 | + 'checkuser-noreason' => "Ret eo deoc'h abegiñ evit ar reked-mañ.", |
| 901 | + 'checkuser-accounts' => '$1 {{PLURAL:$1|kont|kontoù}} nevez', |
| 902 | + 'checkuser-too-many' => "Re a zisoc'hoù (hervez istimadur ar reked), strishaat ar CIDR mar plij. |
| 903 | +Setu an IPoù implijet (5000 d'ar muiañ, urzhiet dre ar chomlec'h) :", |
797 | 904 | 'checkuser-user-nonexistent' => "N'eus ket eus an implijer merket", |
798 | 905 | 'checkuser-search-form' => "Kavout marilh ar monedoù m'eo $1 evit $2", |
799 | 906 | 'checkuser-search-submit' => 'Klask', |
800 | 907 | 'checkuser-search-initiator' => 'deraouer', |
801 | 908 | 'checkuser-search-target' => 'pal', |
| 909 | + 'checkuser-ipeditcount' => '~$1 eus an holl implijerien', |
802 | 910 | 'checkuser-log-subpage' => 'Marilh', |
803 | 911 | 'checkuser-log-return' => "Distreiñ da furmskrid pennañ ar c'hontrolliñ implijerien", |
| 912 | + 'checkuser-limited' => "'''An disoc'hoù-mañ a zo bet troc'het evit abegoù liammet gant an efedusted.'''", |
804 | 913 | 'checkuser-log-userips' => '$1 en deus kavet IPoù evit $2', |
805 | 914 | 'checkuser-log-ipedits' => '$1 en deus kavet kemmoù evit $2', |
806 | 915 | 'checkuser-log-ipusers' => '$1 en deus kavet implijerien evit $2', |
807 | 916 | 'checkuser-log-ipedits-xff' => '$1 en deus kavet kemmoù evit $2 dre XFF', |
808 | 917 | 'checkuser-log-ipusers-xff' => 'Kavet en deus $1 implijerien $2 dre XFF', |
| 918 | + 'checkuser-log-useredits' => '$1 a zo bet kemmet gant $2', |
| 919 | + 'checkuser-autocreate-action' => 'bet krouet ez otomatikel', |
| 920 | + 'checkuser-email-action' => "en deus kaset ur postel d'an implijer « $1 »", |
| 921 | + 'checkuser-reset-action' => 'adderaouekaat ar ger-tremen evit an implijer « $1 »', |
809 | 922 | ); |
810 | 923 | |
811 | 924 | /** Bosnian (Bosanski) |
— | — | @@ -828,7 +941,7 @@ |
829 | 942 | 'checkuser-showlog' => 'Prikaži zapis', |
830 | 943 | 'checkuser-log' => 'Zapis CheckUsera', |
831 | 944 | 'checkuser-query' => 'Pretraži nedavne izmjene', |
832 | | - 'checkuser-target' => 'Korisnik ili IP', |
| 945 | + 'checkuser-target' => 'IP adresa ili korisničko ime:', |
833 | 946 | 'checkuser-users' => 'Nađi korisnike', |
834 | 947 | 'checkuser-edits' => 'Nađi izmjene sa IP adrese', |
835 | 948 | 'checkuser-ips' => 'Nađi IP adrese', |
— | — | @@ -863,8 +976,9 @@ |
864 | 977 | 'checkuser-block-failure' => "'''Nijedan korisnik nije blokiran.'''", |
865 | 978 | 'checkuser-block-limit' => 'Previše korisnika odabrano.', |
866 | 979 | 'checkuser-block-noreason' => 'Morate navesti razlog za blokiranje.', |
| 980 | + 'checkuser-noreason' => 'Morate navesti razlog za ovaj upit.', |
867 | 981 | 'checkuser-accounts' => '$1 {{PLURAL:$1|novi korisnik|nova korisnika|novih korisnika}}', |
868 | | - 'checkuser-too-many' => 'Pronađeno previše rezultata, molimo da suzite CIDR. |
| 982 | + 'checkuser-too-many' => 'Pronađeno previše rezultata (po procjeni upita), molimo da suzite CIDR. |
869 | 983 | Ovdje su prikazane korištene IP adrese (najviše 5000, poredano po adresi):', |
870 | 984 | 'checkuser-user-nonexistent' => 'Navedeni korisnik ne postoji.', |
871 | 985 | 'checkuser-search-form' => 'Nađi stavke zapisa gdje je $1 jednako $2', |
— | — | @@ -892,6 +1006,8 @@ |
893 | 1007 | * @author Juanpabl |
894 | 1008 | * @author Paucabot |
895 | 1009 | * @author SMP |
| 1010 | + * @author Solde |
| 1011 | + * @author Ssola |
896 | 1012 | * @author Toniher |
897 | 1013 | */ |
898 | 1014 | $messages['ca'] = array( |
— | — | @@ -901,6 +1017,7 @@ |
902 | 1018 | 'checkuser-desc' => "Permet als usuaris amb els permisos adients l'habilitat de comprovar les adreces IP que fan servir els usuaris enregistrats.", |
903 | 1019 | 'checkuser-logcase' => 'Les majúscules es tracten de manera diferenciada en la cerca dins el registre.', |
904 | 1020 | 'checkuser' => "Comprova l'usuari", |
| 1021 | + 'checkuser-contribs' => "comprova les IP de l'usuari", |
905 | 1022 | 'group-checkuser' => 'Checkusers', |
906 | 1023 | 'group-checkuser-member' => 'CheckUser', |
907 | 1024 | 'right-checkuser' => 'Comprovar les adreces IP i altra informació dels usuaris', |
— | — | @@ -910,7 +1027,7 @@ |
911 | 1028 | 'checkuser-showlog' => 'Mostra registre', |
912 | 1029 | 'checkuser-log' => 'Registre de Checkuser', |
913 | 1030 | 'checkuser-query' => 'Cerca als canvis recents', |
914 | | - 'checkuser-target' => 'Usuari o IP', |
| 1031 | + 'checkuser-target' => "Adreça IP o nom d'usuari:", |
915 | 1032 | 'checkuser-users' => 'Retorna els usuaris', |
916 | 1033 | 'checkuser-edits' => 'Retorna les edicions de la IP', |
917 | 1034 | 'checkuser-ips' => 'Retorna adreces IP', |
— | — | @@ -921,10 +1038,12 @@ |
922 | 1039 | 'checkuser-week-2' => 'Darreres dues setmanes', |
923 | 1040 | 'checkuser-month' => 'Darrers 30 dies', |
924 | 1041 | 'checkuser-all' => 'tot', |
| 1042 | + 'checkuser-cidr-label' => "Troba un rang comú i les adreces afectades per una llista d'IP", |
| 1043 | + 'checkuser-cidr-res' => 'CIDR comú:', |
925 | 1044 | 'checkuser-empty' => 'El registre no conté entrades.', |
926 | 1045 | 'checkuser-nomatch' => "No s'han trobat coincidències.", |
927 | 1046 | 'checkuser-nomatch-edits' => "No s'ha trobat. |
928 | | -L'última edició va ser el $1 a $2.", |
| 1047 | +L'última modificació va ser el $1 a $2.", |
929 | 1048 | 'checkuser-check' => 'Comprova', |
930 | 1049 | 'checkuser-log-fail' => "No s'ha pogut afegir al registre", |
931 | 1050 | 'checkuser-nolog' => "No s'ha trobat el fitxer del registre.", |
— | — | @@ -943,8 +1062,10 @@ |
944 | 1063 | 'checkuser-block-failure' => "'''No s'han blocat usuaris.'''", |
945 | 1064 | 'checkuser-block-limit' => 'Massa usuaris seleccionats.', |
946 | 1065 | 'checkuser-block-noreason' => "Heu d'indicar un motiu pels bloquejos.", |
| 1066 | + 'checkuser-noreason' => 'Heu de donar un motiu per a executar aquesta consulta.', |
947 | 1067 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nou compte|nous comptes}}', |
948 | | - 'checkuser-too-many' => 'Hi ha massa resultats, cal que useu un CIDR més petit. Aquí teniu les IP usades (màx. 5000 ordenades per adreça):', |
| 1068 | + 'checkuser-too-many' => "Hi ha massa resultats (d'acord amb l'estimació de la consulta), cal que useu un CIDR més petit. |
| 1069 | +Aquí teniu les IP usades (màx. 5000 ordenades per adreça):", |
949 | 1070 | 'checkuser-user-nonexistent' => "L'usuari especificat no existeix.", |
950 | 1071 | 'checkuser-search-form' => 'Cerca entrades al registre on $1 és $2', |
951 | 1072 | 'checkuser-search-submit' => 'Cerca', |
— | — | @@ -1013,7 +1134,7 @@ |
1014 | 1135 | 'checkuser-showlog' => 'Zobrazit záznamy', |
1015 | 1136 | 'checkuser-log' => 'Kniha kontroly uživatelů', |
1016 | 1137 | 'checkuser-query' => 'Dotaz na poslední změny', |
1017 | | - 'checkuser-target' => 'Uživatel nebo IP', |
| 1138 | + 'checkuser-target' => 'IP adresa nebo uživatelské jméno:', |
1018 | 1139 | 'checkuser-users' => 'Najít uživatele', |
1019 | 1140 | 'checkuser-edits' => 'Najít editace z IP', |
1020 | 1141 | 'checkuser-ips' => 'Najít IP adresy', |
— | — | @@ -1046,8 +1167,10 @@ |
1047 | 1168 | 'checkuser-block-failure' => "'''Žádný uživatel nebyl zablokován.'''", |
1048 | 1169 | 'checkuser-block-limit' => 'Vybráno příliš mnoho uživatelů', |
1049 | 1170 | 'checkuser-block-noreason' => 'Musíte zadat důvod blokování', |
| 1171 | + 'checkuser-noreason' => 'K tomuto dotazu musíte uvést důvod.', |
1050 | 1172 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nový účet|nové účty|nových účtů}}', |
1051 | | - 'checkuser-too-many' => 'Příliš mnoho výsledků, zkuste omezit CIDR. Níže jsou použité IP adresy (nejvýše 500, seřazené abecedně):', |
| 1173 | + 'checkuser-too-many' => 'Příliš mnoho výsledků (podle odhadu dotazu), zkuste omezit CIDR. |
| 1174 | +Níže jsou použité IP adresy (nejvýše 5000, seřazené podle adresy):', |
1052 | 1175 | 'checkuser-user-nonexistent' => 'Zadaný uživatel neexistuje.', |
1053 | 1176 | 'checkuser-search-form' => 'Hledej záznamy, kde $1 je $2', |
1054 | 1177 | 'checkuser-search-submit' => 'Hledat', |
— | — | @@ -1083,6 +1206,7 @@ |
1084 | 1207 | 'checkuser-desc' => "Yn rhoi'r gallu i ddefnyddwyr awdurdodedig archwilio cyfeiriadau IP defnyddwyr a gwybodaeth arall amdanynt.", |
1085 | 1208 | 'checkuser-logcase' => 'Yn gwahaniaethu rhwng llythrennau mawr a bach wrth chwilio.', |
1086 | 1209 | 'checkuser' => 'Archwilio defnyddwyr', |
| 1210 | + 'checkuser-contribs' => 'archwilio IP y defnyddiwr', |
1087 | 1211 | 'group-checkuser' => 'Archwilwyr defnyddwyr', |
1088 | 1212 | 'group-checkuser-member' => 'Archwiliwr defnyddwyr', |
1089 | 1213 | 'right-checkuser' => 'Archwilio cyfeiriadau IP defnyddwyr a gwybodaeth arall amdanynt', |
— | — | @@ -1091,7 +1215,11 @@ |
1092 | 1216 | 'checkuser-reason' => 'Rheswm:', |
1093 | 1217 | 'checkuser-showlog' => 'Dangos y lòg', |
1094 | 1218 | 'checkuser-log' => 'Lòg archwilio defnyddwyr', |
1095 | | - 'checkuser-target' => 'Defnyddiwr neu IP', |
| 1219 | + 'checkuser-target' => 'Defnyddiwr neu gyfeiriad IP:', |
| 1220 | + 'checkuser-users' => 'Nôl defnyddwyr', |
| 1221 | + 'checkuser-edits' => "Nôl golygiadau o'r IP", |
| 1222 | + 'checkuser-ips' => 'Nôl IPau', |
| 1223 | + 'checkuser-account' => "Nôl y golygiadau a wneuthpwyd trwy'r cyfrif hwn", |
1096 | 1224 | 'checkuser-search' => 'Chwilio', |
1097 | 1225 | 'checkuser-period' => 'Cyfnod:', |
1098 | 1226 | 'checkuser-week-1' => 'yr wythnos ddiwethaf', |
— | — | @@ -1101,17 +1229,27 @@ |
1102 | 1230 | 'checkuser-empty' => "Mae'r lòg yn wag.", |
1103 | 1231 | 'checkuser-check' => 'Archwilio', |
1104 | 1232 | 'checkuser-log-fail' => 'Yn methu ychwanegu cofnod lòg', |
| 1233 | + 'checkuser-blocked' => 'Wedi ei flocio', |
| 1234 | + 'checkuser-gblocked' => "Wedi ei flocio'n wici-gyfan", |
| 1235 | + 'checkuser-locked' => 'Ar glo', |
| 1236 | + 'checkuser-wasblocked' => "Wedi blocio o'r blaen", |
| 1237 | + 'checkuser-block-noreason' => 'Rhaid cynnig rheswm dros y blociau.', |
| 1238 | + 'checkuser-noreason' => 'Rhaid cynnig rheswm dros yr ymholiad hwn.', |
1105 | 1239 | 'checkuser-accounts' => '$1 {{PLURAL:$1|cyfrif|cyfrif|gyfrif|chyfrif|chyfrif|cyfrif}} newydd', |
1106 | 1240 | 'checkuser-search-form' => "Chwilio am gofnodion lòg gyda'r $1 $2", |
1107 | 1241 | 'checkuser-search-submit' => 'Chwilio', |
1108 | 1242 | 'checkuser-log-subpage' => 'Lòg', |
| 1243 | + 'checkuser-log-return' => 'Dychwelyd at y brif ffurflen Archwilio Defnyddwyr', |
| 1244 | + 'checkuser-autocreate-action' => "wedi ei greu'n awtomatig", |
1109 | 1245 | 'checkuser-email-action' => 'wedi anfon e-bost at y defnyddiwr "$1"', |
1110 | 1246 | 'checkuser-reset-action' => 'wedi ailosod y cyfrinair ar gyfer y defnyddiwr "$1"', |
1111 | 1247 | ); |
1112 | 1248 | |
1113 | 1249 | /** Danish (Dansk) |
1114 | 1250 | * @author Amjaabc |
| 1251 | + * @author Byrial |
1115 | 1252 | * @author Fredelige |
| 1253 | + * @author Masz |
1116 | 1254 | * @author Morten LJ |
1117 | 1255 | */ |
1118 | 1256 | $messages['da'] = array( |
— | — | @@ -1123,8 +1261,10 @@ |
1124 | 1262 | 'checkuser' => 'Checkbruger', |
1125 | 1263 | 'group-checkuser' => 'Checkbrugere', |
1126 | 1264 | 'group-checkuser-member' => 'Checkbruger', |
| 1265 | + 'right-checkuser' => 'Tjekke en brugers IP-adresser og andre oplysninger', |
| 1266 | + 'right-checkuser-log' => 'Se checkuser-loggen', |
1127 | 1267 | 'grouppage-checkuser' => '{{ns:project}}:Checkbruger', |
1128 | | - 'checkuser-reason' => 'Begrundelse', |
| 1268 | + 'checkuser-reason' => 'Begrundelse:', |
1129 | 1269 | 'checkuser-showlog' => 'Vis log', |
1130 | 1270 | 'checkuser-log' => 'Checkbrugerlog', |
1131 | 1271 | 'checkuser-query' => 'Søg i seneste ændringer', |
— | — | @@ -1176,14 +1316,14 @@ |
1177 | 1317 | 'checkuser-contribs' => 'IP-Adressen von Benutzer prüfen', |
1178 | 1318 | 'group-checkuser' => 'Checkuser', |
1179 | 1319 | 'group-checkuser-member' => 'Checkuser-Berechtigter', |
1180 | | - 'right-checkuser' => 'Prüfung von IP-Adressen sowie Verbindungen zwischen IPs und angemeldeten Benutzern', |
1181 | | - 'right-checkuser-log' => 'Ansehen des Checkuser-Logbuches', |
| 1320 | + 'right-checkuser' => 'IP-Adressen sowie Verbindungen zwischen IP-Adressen und angemeldeten Benutzern prüfen', |
| 1321 | + 'right-checkuser-log' => 'Checkuser-Logbuch ansehen', |
1182 | 1322 | 'grouppage-checkuser' => '{{ns:project}}:CheckUser', |
1183 | 1323 | 'checkuser-reason' => 'Grund:', |
1184 | 1324 | 'checkuser-showlog' => 'Logbuch anzeigen', |
1185 | 1325 | 'checkuser-log' => 'Checkuser-Logbuch', |
1186 | 1326 | 'checkuser-query' => 'Letzte Änderungen abfragen', |
1187 | | - 'checkuser-target' => 'Benutzer oder IP-Adresse', |
| 1327 | + 'checkuser-target' => 'IP-Adresse oder Benutzername:', |
1188 | 1328 | 'checkuser-users' => 'Hole Benutzer', |
1189 | 1329 | 'checkuser-edits' => 'Hole Bearbeitungen von IP-Adresse', |
1190 | 1330 | 'checkuser-ips' => 'Hole IP-Adressen', |
— | — | @@ -1198,7 +1338,7 @@ |
1199 | 1339 | 'checkuser-cidr-res' => 'Gemeinschaftliche CIDR:', |
1200 | 1340 | 'checkuser-empty' => 'Das Logbuch enthält keine Einträge.', |
1201 | 1341 | 'checkuser-nomatch' => 'Keine Übereinstimmungen gefunden.', |
1202 | | - 'checkuser-nomatch-edits' => 'Keine Übereinstimmungen gefunden. Letzte Bearbeitung hat am $1 um $2 stattgefunden.', |
| 1342 | + 'checkuser-nomatch-edits' => 'Keine Übereinstimmungen gefunden. Letzte Bearbeitung hat am $1 um $2 Uhr stattgefunden.', |
1203 | 1343 | 'checkuser-check' => 'Ausführen', |
1204 | 1344 | 'checkuser-log-fail' => 'Logbuch-Eintrag kann nicht hinzugefügt werden.', |
1205 | 1345 | 'checkuser-nolog' => 'Keine Logbuchdatei vorhanden.', |
— | — | @@ -1217,8 +1357,9 @@ |
1218 | 1358 | 'checkuser-block-failure' => "'''Es wurden keine Benutzer gesperrt.'''", |
1219 | 1359 | 'checkuser-block-limit' => 'Es wurden zuviele Benutzer ausgewählt.', |
1220 | 1360 | 'checkuser-block-noreason' => 'Du musst einen Grund für die Sperre angeben.', |
| 1361 | + 'checkuser-noreason' => 'Für diese Abfrage muss eine Begründung angegeben werden.', |
1221 | 1362 | 'checkuser-accounts' => '{{PLURAL:$1|1 neues Benutzerkonto|$1 neue Benutzerkonten}}', |
1222 | | - 'checkuser-too-many' => 'Die Ergebnisliste ist zu lang, bitte grenze den IP-Bereich weiter ein. Hier sind die benutzten IP-Adressen (maximal 5000, sortiert nach Adresse):', |
| 1363 | + 'checkuser-too-many' => 'Die Ergebnisliste ist zu lang (nach der Schätzung), bitte grenze den IP-Bereich weiter ein. Hier sind die benutzten IP-Adressen (maximal 5000, sortiert nach Adresse):', |
1223 | 1364 | 'checkuser-user-nonexistent' => 'Das angegebene Benutzerkonto ist nicht vorhanden.', |
1224 | 1365 | 'checkuser-search-form' => 'Suche Logbucheinträge, bei denen $1 $2 ist.', |
1225 | 1366 | 'checkuser-search-submit' => 'Suche', |
— | — | @@ -1240,12 +1381,97 @@ |
1241 | 1382 | ); |
1242 | 1383 | |
1243 | 1384 | /** German (formal address) (Deutsch (Sie-Form)) |
| 1385 | + * @author Imre |
1244 | 1386 | * @author Umherirrender |
1245 | 1387 | */ |
1246 | 1388 | $messages['de-formal'] = array( |
| 1389 | + 'checkuser-summary' => 'Dieses Werkzeug durchsucht die letzten Änderungen, um die IP-Adressen eines Benutzers bzw. die Bearbeitungen/Benutzernamen für eine IP-Adresse zu ermitteln. Benutzer und Bearbeitungen einer IP-Adresse können auch nach Informationen aus den XFF-Headern abgefragt werden, indem der IP-Adresse ein „/xff“ angehängt wird. IPv4 (CIDR 16-32) und IPv6 (CIDR 96-128) werden unterstützt. |
| 1390 | +Aus Performance-Gründen werden maximal 5000 Bearbeitungen ausgegeben. Benutzen Sie CheckUser ausschließlich in Übereinstimmung mit den Datenschutzrichtlinien.', |
1247 | 1391 | 'checkuser-block-noreason' => 'Sie müssen einen Grund für die Sperre angeben.', |
| 1392 | + 'checkuser-too-many' => 'Die Ergebnisliste ist zu lang (nach der Schätzung), bitte grenzen Sie den IP-Bereich weiter ein. Hier sind die benutzten IP-Adressen (maximal 5000, sortiert nach Adresse):', |
1248 | 1393 | ); |
1249 | 1394 | |
| 1395 | +/** Zazaki (Zazaki) |
| 1396 | + * @author Mirzali |
| 1397 | + * @author Xoser |
| 1398 | + */ |
| 1399 | +$messages['diq'] = array( |
| 1400 | + 'checkuser-summary' => 'Ena xacet vurnayişanê neweyî skan keno ke adresanê IPyan reyan biyaro ke bimucne datayê karberî ser yew adresê IPyî. |
| 1401 | +Karberan u vurnayîşan ke yew IPyê karberî kerd reyna yeno pê XFF u "/xff". IPv4 (CIDR 16-32) u IPv6 (CIDR 96-128) rê zi destek beno. |
| 1402 | +5000 zafyer vurnayîşan sero netice nidano, qe performans hedi beno. |
| 1403 | +Ena politika ma ser kar bike.', |
| 1404 | + 'checkuser-desc' => 'Karberan rê destur bide ke adresanê IPyan u enformasyonê bînan kontrol bike', |
| 1405 | + 'checkuser-logcase' => 'Ena bigêrayîşê logî case sensitive o.', |
| 1406 | + 'checkuser' => 'Karber kontrol bike', |
| 1407 | + 'checkuser-contribs' => 'Adresê IP yê karberî kontrol bike', |
| 1408 | + 'group-checkuser' => 'Karberî kontrol bike', |
| 1409 | + 'group-checkuser-member' => 'Karber kontrol bike', |
| 1410 | + 'right-checkuser' => 'Adresê IP yê karberî u enformasyonê binî kontrol bike', |
| 1411 | + 'right-checkuser-log' => 'Logê karber-kontrolî bivîne', |
| 1412 | + 'grouppage-checkuser' => '{{ns:project}}:Karber kontrol bike', |
| 1413 | + 'checkuser-reason' => 'Sebeb:', |
| 1414 | + 'checkuser-showlog' => 'Logê mucnayîşî', |
| 1415 | + 'checkuser-log' => 'Logê karber-kontrolî', |
| 1416 | + 'checkuser-query' => 'Bigêrayîşî de vurnayîşanê penîyan', |
| 1417 | + 'checkuser-target' => 'Adresa IPi ya zi namey karberi:', |
| 1418 | + 'checkuser-users' => 'Karberî bivîne', |
| 1419 | + 'checkuser-edits' => 'Bivîne vurnayîşê ke IP ra', |
| 1420 | + 'checkuser-ips' => 'Adresê IPyî bivîne', |
| 1421 | + 'checkuser-account' => 'Bivîne vurnayîşê hesabî', |
| 1422 | + 'checkuser-search' => 'Bigêre', |
| 1423 | + 'checkuser-period' => 'Sure:', |
| 1424 | + 'checkuser-week-1' => 'hefteyê verînî', |
| 1425 | + 'checkuser-week-2' => 'di hefteyê verînî', |
| 1426 | + 'checkuser-month' => '30 rocê verînî', |
| 1427 | + 'checkuser-all' => 'hemî', |
| 1428 | + 'checkuser-cidr-label' => 'Qe yew listeyê IPyanî, yew menzilê ortakî u adresanê IPyanî bivîne', |
| 1429 | + 'checkuser-cidr-res' => 'CIDRê muşterekî', |
| 1430 | + 'checkuser-empty' => 'Ena log de çik çin o.', |
| 1431 | + 'checkuser-nomatch' => 'Çik çin o.', |
| 1432 | + 'checkuser-nomatch-edits' => 'Çik çin o. |
| 1433 | +Vurnayîşê tewr penî seet $1 u rocê $2 de biyo.', |
| 1434 | + 'checkuser-check' => 'Kontrol bike', |
| 1435 | + 'checkuser-log-fail' => 'Nieşkeno log debiker', |
| 1436 | + 'checkuser-nolog' => 'Dosyayê logî çin o.', |
| 1437 | + 'checkuser-blocked' => 'Blok biya', |
| 1438 | + 'checkuser-gblocked' => 'Global de blok biya', |
| 1439 | + 'checkuser-locked' => 'Kilit biya', |
| 1440 | + 'checkuser-wasblocked' => 'Verni de blok biya', |
| 1441 | + 'checkuser-localonly' => 'Yew niyo', |
| 1442 | + 'checkuser-massblock' => 'Karberê ke ti weçîno înan blok bike', |
| 1443 | + 'checkuser-massblock-text' => 'Hesabanê weçineye ebedi blok beno, pê otoblokî a biyo u hesab viraştişî qefilnayo. |
| 1444 | +Adresanê IPyan yew hefte blok beno, pê hesab viraştişî qefilnayo.', |
| 1445 | + 'checkuser-blocktag' => 'Pelanê karberan pê înan bivurne:', |
| 1446 | + 'checkuser-blocktag-talk' => 'Pelanê minaqeşeyî pê înan bivurne:', |
| 1447 | + 'checkuser-massblock-commit' => 'Karberê ke ti weçîno înan blok bike', |
| 1448 | + 'checkuser-block-success' => "'''{{PLURAL:$2|Karber|Karberan}} $1 eka blok bi{{PLURAL:$2|y|yê}}.'''", |
| 1449 | + 'checkuser-block-failure' => "'''Çew blok nibiya.'''", |
| 1450 | + 'checkuser-block-limit' => 'Ti zaf karberan weçino.', |
| 1451 | + 'checkuser-block-noreason' => 'Qe blokan, ti gani yew sebeb bide.', |
| 1452 | + 'checkuser-noreason' => 'Qe bigêrayîşî, ti gani yew sebeb bide.', |
| 1453 | + 'checkuser-accounts' => '$1 {{PLURAL:$1|hesab|hesaban}} newî', |
| 1454 | + 'checkuser-too-many' => 'Zaf neticiyan esto (ser texminê cigeyrayîşî), şima ra rica keno CIDR qickek bike. |
| 1455 | +Tiya de IPyan ke sero kar biyo (5000 max, pê adresan):', |
| 1456 | + 'checkuser-user-nonexistent' => 'Karbero ke ti specife kerd, ay database ma de niesto.', |
| 1457 | + 'checkuser-search-form' => 'Entryanê logan ke $1 biy $2, înan bivîne', |
| 1458 | + 'checkuser-search-submit' => 'Bigêre', |
| 1459 | + 'checkuser-search-initiator' => 'başlî kerdoğ', |
| 1460 | + 'checkuser-search-target' => 'hedef', |
| 1461 | + 'checkuser-ipeditcount' => '~$1 karberanê hemî ra', |
| 1462 | + 'checkuser-log-subpage' => 'Log', |
| 1463 | + 'checkuser-log-return' => 'Farmê serî CheckUser rê reyna şî', |
| 1464 | + 'checkuser-limited' => "'''Ena neticeyan qe sebabanê performansî ra kilm kerd.'''", |
| 1465 | + 'checkuser-log-userips' => 'Qe $2, $1adresanê IPyan girewt', |
| 1466 | + 'checkuser-log-ipedits' => 'Qe $2, $1vurnayîşan girewt', |
| 1467 | + 'checkuser-log-ipusers' => 'Qe $2, $1 karberan girewt', |
| 1468 | + 'checkuser-log-ipedits-xff' => 'Qe $2, $1vurnayîşan ser XFF girewt', |
| 1469 | + 'checkuser-log-ipusers-xff' => 'Qe $2, $1karberan ser XFF girewt', |
| 1470 | + 'checkuser-log-useredits' => 'Qe $2, $1vurnayîşan girewt', |
| 1471 | + 'checkuser-autocreate-action' => 'otomatikî ra virziyo', |
| 1472 | + 'checkuser-email-action' => 'karberê $1î rê email şîravt', |
| 1473 | + 'checkuser-reset-action' => "qe karberê ''$1''î parola reset bike", |
| 1474 | +); |
| 1475 | + |
1250 | 1476 | /** Lower Sorbian (Dolnoserbski) |
1251 | 1477 | * @author Michawiki |
1252 | 1478 | */ |
— | — | @@ -1266,7 +1492,7 @@ |
1267 | 1493 | 'checkuser-showlog' => 'Protokol pokazaś', |
1268 | 1494 | 'checkuser-log' => 'Protokol kontrole wužywarjow', |
1269 | 1495 | 'checkuser-query' => 'Aktualne změny wótpšašaś', |
1270 | | - 'checkuser-target' => 'Wužywaŕ abo IP', |
| 1496 | + 'checkuser-target' => 'IP-adresa abo wužywarske mě:', |
1271 | 1497 | 'checkuser-users' => 'Wužywarjow wobstaraś', |
1272 | 1498 | 'checkuser-edits' => 'Změny z IP wobstaraś', |
1273 | 1499 | 'checkuser-ips' => 'IP-adrese wobstraś', |
— | — | @@ -1301,8 +1527,9 @@ |
1302 | 1528 | 'checkuser-block-failure' => "'''Žedne wužywarje blokěrowane.'''", |
1303 | 1529 | 'checkuser-block-limit' => 'Pśewjele wužywarjow wubrane.', |
1304 | 1530 | 'checkuser-block-noreason' => 'Musyš pśicynu za blokěrowanja pódaś.', |
| 1531 | + 'checkuser-noreason' => 'Musyš pśicynu za toś to wótpšašanje pódaś.', |
1305 | 1532 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nowe konto|nowej konśe|nowe konta|nowych kontow}}', |
1306 | | - 'checkuser-too-many' => 'Pśewjele wuslědkow, pšosym wobgranicuj IP-wobcerk. How su wužywane IP-adrese (maks. 5000, pséwuběrane pó adresu):', |
| 1533 | + 'checkuser-too-many' => 'Pśewjele wuslědkow (pó pówoblicenju napšašowanja), pšosym wobgranicuj CIDR. How su wužywane IP-adrese (maks. 5000, pséwuběrane pó adresu):', |
1307 | 1534 | 'checkuser-user-nonexistent' => 'Pódany wužywaŕ njeeksistěrujo.', |
1308 | 1535 | 'checkuser-search-form' => 'Protokolowe zapiski namakaś, źož $1 jo $2', |
1309 | 1536 | 'checkuser-search-submit' => 'Pytaś', |
— | — | @@ -1391,8 +1618,10 @@ |
1392 | 1619 | 'checkuser-block-failure' => "'''Κανένας χρήστης φραγμένος.'''", |
1393 | 1620 | 'checkuser-block-limit' => 'Έχουν επιλεχθεί πάρα πολλοί χρήστες.', |
1394 | 1621 | 'checkuser-block-noreason' => 'Πρέπει να αιτιολογήσετε τις φραγές.', |
| 1622 | + 'checkuser-noreason' => 'Πρέπει να δώσετε μια αιτία για αυτή την ερώτηση.', |
1395 | 1623 | 'checkuser-accounts' => '$1 {{PLURAL:$1|νέος λογαριασμός|νέοι λογαριασμοί}}', |
1396 | | - 'checkuser-too-many' => 'Πάρα πολλά αποτελέσματα, παρακαλούμε στενέψτε το CIDR. Παρακάτω είναι οι διευθύνσεις IP που χρησιμοποιούνται (με ανώτατο όριο τις 5000, ταξινομημένες κατά διεύθυνση):', |
| 1624 | + 'checkuser-too-many' => 'Πάρα πολλά αποτελέσματα (σύμφωνα με την εκτίμηση σειράς), παρακαλούμε στενέψτε το CIDR. |
| 1625 | +Παρακάτω είναι οι διευθύνσεις IP που χρησιμοποιούνται (με ανώτατο όριο τις 5000, ταξινομημένες κατά διεύθυνση):', |
1397 | 1626 | 'checkuser-user-nonexistent' => 'Ο συγκεκριμένος χρήστης δεν υπάρχει.', |
1398 | 1627 | 'checkuser-search-form' => 'Εύρεση εγγραφών του αρχείου καταγραφής στις οποίες ο $1 είναι $2', |
1399 | 1628 | 'checkuser-search-submit' => 'Αναζήτηση', |
— | — | @@ -1426,6 +1655,7 @@ |
1427 | 1656 | 'checkuser-desc' => 'Rajtigas al uzantoj kun la taŭga permeso la kapableco kontroli la IP-adreson de uzanto kaj alia informo', |
1428 | 1657 | 'checkuser-logcase' => 'La protokola serĉo estas usklecodistinga.', |
1429 | 1658 | 'checkuser' => 'Kontrola uzanto', |
| 1659 | + 'checkuser-contribs' => 'kontroli IP-adresojn de uzantoj', |
1430 | 1660 | 'group-checkuser' => 'Kontrolaj uzantoj', |
1431 | 1661 | 'group-checkuser-member' => 'Kontrola uzanto', |
1432 | 1662 | 'right-checkuser' => 'Kontroli la IP-adreson kaj alian informon de uzanto', |
— | — | @@ -1435,7 +1665,7 @@ |
1436 | 1666 | 'checkuser-showlog' => 'Montri protokolon', |
1437 | 1667 | 'checkuser-log' => 'Protokolo pri kontrolado de uzantoj', |
1438 | 1668 | 'checkuser-query' => 'Informomendu lastatempajn ŝanĝojn', |
1439 | | - 'checkuser-target' => 'Uzanto aŭ IP-adreso', |
| 1669 | + 'checkuser-target' => 'IP-adreso aŭ salutnomo:', |
1440 | 1670 | 'checkuser-users' => 'Akiri uzantojn', |
1441 | 1671 | 'checkuser-edits' => 'Trovi redaktojn de IP-adreso', |
1442 | 1672 | 'checkuser-ips' => 'Preni IP-adresojn', |
— | — | @@ -1459,18 +1689,19 @@ |
1460 | 1690 | 'checkuser-locked' => 'Ŝlosita', |
1461 | 1691 | 'checkuser-wasblocked' => 'Antaŭe forbarita', |
1462 | 1692 | 'checkuser-localonly' => 'Nekunigita', |
1463 | | - 'checkuser-massblock' => 'Forbari selektitajn uzantojn', |
1464 | | - 'checkuser-massblock-text' => 'Selektitaj kontoj estos forbaritaj senlime, kun aŭtomata forbaro ŝaltita kaj kont-kreado malŝaltita. |
1465 | | -IP-adresoj estos forbarita 1 semajnon por IP-uzantoj kun kont-kreado malpermesita.', |
| 1693 | + 'checkuser-massblock' => 'Forbari elektitajn uzantojn', |
| 1694 | + 'checkuser-massblock-text' => 'Elektitaj kontoj estos forbaritaj senlime, kun aŭtomata forbaro ŝaltita kaj kont-kreado malŝaltita. |
| 1695 | +IP-adresoj estos forbarita 1 semajnon por IP-uzantoj kun kont-kreado malŝaltita.', |
1466 | 1696 | 'checkuser-blocktag' => 'Anstataŭigi uzanto-paĝojn kun:', |
1467 | 1697 | 'checkuser-blocktag-talk' => 'Anstataŭigi diskuto-paĝojn kun:', |
1468 | | - 'checkuser-massblock-commit' => 'Forbari selektitajn uzantojn', |
| 1698 | + 'checkuser-massblock-commit' => 'Forbari elektitajn uzantojn', |
1469 | 1699 | 'checkuser-block-success' => "'''La {{PLURAL:$2|uzanto|uzantoj}} $1 estas nun {{PLURAL:$2|forbarita|forbaritaj}}.'''", |
1470 | 1700 | 'checkuser-block-failure' => "'''Neniuj uzantoj forbariĝis.'''", |
1471 | | - 'checkuser-block-limit' => 'Tro da uzantoj selektitaj.', |
| 1701 | + 'checkuser-block-limit' => 'Tro da uzantoj elektitaj.', |
1472 | 1702 | 'checkuser-block-noreason' => 'Vi devas doni kialon por la forbaroj.', |
| 1703 | + 'checkuser-noreason' => 'Vi devas doni kialon por ĉi tiu informomendo.', |
1473 | 1704 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nova konto|novaj kontoj}}', |
1474 | | - 'checkuser-too-many' => 'Tro da rezultoj. Bonvolu malvastigi la CIDR. |
| 1705 | + 'checkuser-too-many' => 'Tro da rezultoj, laŭ taskoj de serĉomendo. Bonvolu malvastigi la CIDR. |
1475 | 1706 | Jen la IP-adresoj uzitaj (maksimume 5000, ordigita laŭ adresoj):', |
1476 | 1707 | 'checkuser-user-nonexistent' => 'La donata uzanto ne ekzistas.', |
1477 | 1708 | 'checkuser-search-form' => 'Trovi protokolerojn en kiu la $1 estas $2', |
— | — | @@ -1494,11 +1725,14 @@ |
1495 | 1726 | |
1496 | 1727 | /** Spanish (Español) |
1497 | 1728 | * @author Aleator |
| 1729 | + * @author AlimanRuna |
1498 | 1730 | * @author Crazymadlover |
1499 | 1731 | * @author Dferg |
1500 | 1732 | * @author Dmcdevit |
1501 | 1733 | * @author Jatrobat |
1502 | 1734 | * @author Lin linao |
| 1735 | + * @author Locos epraix |
| 1736 | + * @author Manuelt15 |
1503 | 1737 | * @author Muro de Aguas |
1504 | 1738 | * @author Piolinfax |
1505 | 1739 | * @author Remember the dot |
— | — | @@ -1509,24 +1743,25 @@ |
1510 | 1744 | $messages['es'] = array( |
1511 | 1745 | 'checkuser-summary' => 'Esta herramienta explora los cambios recientes para obtener las IPs utilizadas por un usuario o para mostrar la información de ediciones/usuarios de una IP. |
1512 | 1746 | También se pueden obtener los usuarios y las ediciones de un cliente IP vía XFF añadiendo "/xff". IPv4 (CIDR 16-32) y IPv6 (CIDR 96-128) funcionan. |
1513 | | -No se muestran más de 5000 ediciones por motivos de rendimiento. Usa esta herramienta en acuerdo con la ley orgánica de protección de datos.', |
1514 | | - 'checkuser-desc' => 'Permite a los usuarios que tienen permiso especial comprobar las IPs de los usuarios además de otra información.', |
1515 | | - 'checkuser-logcase' => 'El buscador de registros distingue entre mayúsculas y minúsculas.', |
| 1747 | +No se muestran más de 5000 ediciones por motivos de rendimiento. |
| 1748 | +Usa esta herramienta de acuerdo con las políticas correspondientes.', |
| 1749 | + 'checkuser-desc' => 'Permite a los usuarios que tienen permiso especial comprobar las IP de los usuarios además de otra información.', |
| 1750 | + 'checkuser-logcase' => 'La búsqueda en el registro distingue entre mayúsculas y minúsculas.', |
1516 | 1751 | 'checkuser' => 'Verificador de usuarios', |
1517 | 1752 | 'checkuser-contribs' => 'Verificar IPs de usuario', |
1518 | 1753 | 'group-checkuser' => 'Verificadores de usuarios', |
1519 | 1754 | 'group-checkuser-member' => 'Verificador de usuarios', |
1520 | 1755 | 'right-checkuser' => 'Comprobar las IPs de los usuarios y obtener otra información relacionada', |
1521 | 1756 | 'right-checkuser-log' => 'Ver el registro de verificación de usuarios', |
1522 | | - 'grouppage-checkuser' => '{{ns:project}}:verificador de usuarios', |
| 1757 | + 'grouppage-checkuser' => '{{ns:project}}:Verificador de usuarios', |
1523 | 1758 | 'checkuser-reason' => 'Motivo:', |
1524 | 1759 | 'checkuser-showlog' => 'Ver registro', |
1525 | 1760 | 'checkuser-log' => 'Registro de CheckUser', |
1526 | 1761 | 'checkuser-query' => 'Buscar en cambios recientes', |
1527 | | - 'checkuser-target' => 'Usuario o IP', |
| 1762 | + 'checkuser-target' => 'Usuario o dirección IP:', |
1528 | 1763 | 'checkuser-users' => 'Obtener usuarios', |
1529 | 1764 | 'checkuser-edits' => 'Obtener ediciones de IP', |
1530 | | - 'checkuser-ips' => 'Obtener IPs', |
| 1765 | + 'checkuser-ips' => 'Obtener IP', |
1531 | 1766 | 'checkuser-account' => 'Ver contribuciones de la cuenta', |
1532 | 1767 | 'checkuser-search' => 'Buscar', |
1533 | 1768 | 'checkuser-period' => 'Duración:', |
— | — | @@ -1534,7 +1769,7 @@ |
1535 | 1770 | 'checkuser-week-2' => 'últimas dos semanas', |
1536 | 1771 | 'checkuser-month' => 'últimos 30 días', |
1537 | 1772 | 'checkuser-all' => 'todos', |
1538 | | - 'checkuser-cidr-label' => 'Encontrar rango común y afectados de una lista de direcciones de IPs', |
| 1773 | + 'checkuser-cidr-label' => 'Encontrar rango común y afectados de una lista de direcciones de IP', |
1539 | 1774 | 'checkuser-cidr-res' => 'CIDR común:', |
1540 | 1775 | 'checkuser-empty' => 'No hay elementos en el registro.', |
1541 | 1776 | 'checkuser-nomatch' => 'No hay elementos en el registro con esas condiciones.', |
— | — | @@ -1547,10 +1782,10 @@ |
1548 | 1783 | 'checkuser-gblocked' => 'Bloqueado globalmente', |
1549 | 1784 | 'checkuser-locked' => 'Cuenta bloqueada globalmente', |
1550 | 1785 | 'checkuser-wasblocked' => 'Bloqueado anteriormente', |
1551 | | - 'checkuser-localonly' => 'No unificado', |
| 1786 | + 'checkuser-localonly' => 'No unificada', |
1552 | 1787 | 'checkuser-massblock' => 'Bloquear usuarios seleccionados', |
1553 | 1788 | 'checkuser-massblock-text' => 'Las cuentas seleccionadas serán bloqueadas de forma indefinida, con el autobloqueo habilitado y la creación de cuentas deshabilitada. |
1554 | | -Las direcciones IP serán bloqueadas durante una semana con la creación de cuentas deshabilitada.', |
| 1789 | +Las direcciones IP serán bloqueadas durante una semana para usuarios anónimos sólamente con la creación de cuentas deshabilitada.', |
1555 | 1790 | 'checkuser-blocktag' => 'Reemplazar páginas del usuario con:', |
1556 | 1791 | 'checkuser-blocktag-talk' => 'Reemplazar las páginas de discusión con:', |
1557 | 1792 | 'checkuser-massblock-commit' => 'Bloquear usuarios seleccionados', |
— | — | @@ -1558,8 +1793,10 @@ |
1559 | 1794 | 'checkuser-block-failure' => "'''No hay usuarios bloqueados.'''", |
1560 | 1795 | 'checkuser-block-limit' => 'Demasiados usarios seleccionados.', |
1561 | 1796 | 'checkuser-block-noreason' => 'Debe dar una razón para los bloqueos.', |
| 1797 | + 'checkuser-noreason' => 'Debes dar una razón para esta consulta.', |
1562 | 1798 | 'checkuser-accounts' => '$1 {{PLURAL:$1|cuenta nueva|cuentas nuevas}}', |
1563 | | - 'checkuser-too-many' => 'Hay demasiados resultados. Por favor limita el CIDR. Aquí se ven las IPs usadas (máximo 5000, ordenadas según dirección):', |
| 1799 | + 'checkuser-too-many' => 'Hay demasiados resultados (estimado), por favor limita el CIDR. |
| 1800 | +Aquí se ven las IPs usadas (máximo 5000, ordenadas según dirección):', |
1564 | 1801 | 'checkuser-user-nonexistent' => 'El usuario especificado no existe.', |
1565 | 1802 | 'checkuser-search-form' => 'Encontrar entradas de registros en las que el $1 es $2', |
1566 | 1803 | 'checkuser-search-submit' => 'Buscar', |
— | — | @@ -1577,47 +1814,63 @@ |
1578 | 1815 | 'checkuser-log-useredits' => '$1 obtuvo las contribuciones de $2', |
1579 | 1816 | 'checkuser-autocreate-action' => 'fue creada automáticamente', |
1580 | 1817 | 'checkuser-email-action' => 'envió correo electrónico al usuario «$1»', |
1581 | | - 'checkuser-reset-action' => 'anular contraseña para el usuario «$1»', |
| 1818 | + 'checkuser-reset-action' => 'solicitó un recordatorio de contraseña para el usuario «$1»', |
1582 | 1819 | ); |
1583 | 1820 | |
1584 | 1821 | /** Estonian (Eesti) |
1585 | 1822 | * @author Avjoska |
| 1823 | + * @author Pikne |
1586 | 1824 | * @author WikedKentaur |
1587 | 1825 | */ |
1588 | 1826 | $messages['et'] = array( |
| 1827 | + 'checkuser-desc' => 'Võimaldab vajalike õigustega kasutajal teise kasutaja IP-aadresse ja muud teavet kontrollida.', |
| 1828 | + 'checkuser-logcase' => 'Logi otsing on tõusutundlik.', |
| 1829 | + 'right-checkuser' => 'Kontrollida kasutajate IP-aadresse ja muud teavet', |
| 1830 | + 'checkuser-reason' => 'Põhjus:', |
| 1831 | + 'checkuser-showlog' => 'Näita logi', |
| 1832 | + 'checkuser-target' => 'IP-aadress või kasutajanimi:', |
1589 | 1833 | 'checkuser-search' => 'Otsi', |
1590 | 1834 | 'checkuser-period' => 'Ajavahemik:', |
1591 | 1835 | 'checkuser-week-1' => 'viimane nädal', |
1592 | 1836 | 'checkuser-week-2' => 'viimased kaks nädalat', |
1593 | 1837 | 'checkuser-month' => 'viimased 30 päeva', |
1594 | 1838 | 'checkuser-all' => 'kõik', |
| 1839 | + 'checkuser-nomatch' => 'Tulemusi ei leitud.', |
1595 | 1840 | 'checkuser-nolog' => 'Logifaili ei leitud.', |
1596 | 1841 | 'checkuser-blocked' => 'Blokeeritud', |
1597 | 1842 | 'checkuser-gblocked' => 'Globaalselt blokeeritud', |
1598 | 1843 | 'checkuser-locked' => 'Lukustatud', |
1599 | 1844 | 'checkuser-wasblocked' => 'Eelnevalt blokeeritud', |
| 1845 | + 'checkuser-localonly' => 'Ei ole globaalset kontot', |
| 1846 | + 'checkuser-massblock' => 'Blokeeri valitud kasutajad', |
1600 | 1847 | 'checkuser-blocktag' => 'Asenda kasutajalehed:', |
1601 | 1848 | 'checkuser-blocktag-talk' => 'Asenda arutelulehed:', |
1602 | 1849 | 'checkuser-massblock-commit' => 'Blokeeri valitud kasutajad', |
| 1850 | + 'checkuser-block-success' => "'''{{PLURAL:$2|Kasutaja|Kasutajad}} $1 on nüüd blokeeritud.'''", |
1603 | 1851 | 'checkuser-block-failure' => "'''Ühtegi kasutajat ei blokeeritud.'''", |
1604 | 1852 | 'checkuser-block-limit' => 'Liiga palju kasutajaid valitud.', |
1605 | 1853 | 'checkuser-block-noreason' => 'Blokeeringule peab andma põhjenduse.', |
| 1854 | + 'checkuser-user-nonexistent' => 'Etteantud kasutajat pole olemas.', |
1606 | 1855 | 'checkuser-search-submit' => 'Otsi', |
1607 | 1856 | 'checkuser-search-initiator' => 'initsiaator', |
1608 | 1857 | 'checkuser-search-target' => 'sihtmärk', |
| 1858 | + 'checkuser-log-subpage' => 'Logi', |
1609 | 1859 | 'checkuser-autocreate-action' => 'alustati automaatselt', |
1610 | 1860 | 'checkuser-email-action' => 'e-kiri kasutajale "$1" saadetud', |
1611 | 1861 | ); |
1612 | 1862 | |
1613 | 1863 | /** Basque (Euskara) |
| 1864 | + * @author An13sa |
1614 | 1865 | * @author Kobazulo |
1615 | 1866 | */ |
1616 | 1867 | $messages['eu'] = array( |
1617 | 1868 | 'checkuser' => 'Erabiltzailea egiaztatu', |
1618 | 1869 | 'group-checkuser' => 'Erabiltzaileak egiaztatu', |
1619 | 1870 | 'group-checkuser-member' => 'Erabiltzailea egiaztatu', |
| 1871 | + 'grouppage-checkuser' => '{{ns:project}}:Lankidea egiaztatu', |
1620 | 1872 | 'checkuser-reason' => 'Arrazoia:', |
1621 | | - 'checkuser-target' => 'Lankidea edo IPa', |
| 1873 | + 'checkuser-showlog' => 'Erregistroa erakutsi', |
| 1874 | + 'checkuser-target' => 'IP helbide edo lankide izena:', |
1622 | 1875 | 'checkuser-users' => 'Lankideak ikusi', |
1623 | 1876 | 'checkuser-edits' => 'IP baten ekarpenak ikusi', |
1624 | 1877 | 'checkuser-ips' => 'IPak ikusi', |
— | — | @@ -1629,13 +1882,18 @@ |
1630 | 1883 | 'checkuser-month' => 'azken 30 egunak', |
1631 | 1884 | 'checkuser-all' => 'guztiak', |
1632 | 1885 | 'checkuser-nomatch' => 'Ez da bat datorren emaitzarik aurkitu.', |
| 1886 | + 'checkuser-check' => 'Egiaztatu', |
1633 | 1887 | 'checkuser-blocked' => 'Blokeatua', |
1634 | 1888 | 'checkuser-gblocked' => 'Proiektu guztietarako blokeatua', |
1635 | 1889 | 'checkuser-locked' => 'Babestua', |
1636 | 1890 | 'checkuser-wasblocked' => 'Aurretik blokeatua', |
| 1891 | + 'checkuser-localonly' => 'Batu gabe', |
1637 | 1892 | 'checkuser-massblock' => 'Hautatutako lankideak blokeatu', |
| 1893 | + 'checkuser-massblock-commit' => 'Aukeratutako erabiltzaileak blokeatu', |
| 1894 | + 'checkuser-block-success' => "'''$1 {{PLURAL:$2|erabiltzailea|erabiltzaileak}} blokeaturik {{PLURAL:$2|dago|daude}} orain.'''", |
1638 | 1895 | 'checkuser-block-limit' => 'Lankide gehiegi hautatu duzu.', |
1639 | 1896 | 'checkuser-search-submit' => 'Bilatu', |
| 1897 | + 'checkuser-log-subpage' => 'Erregistroa', |
1640 | 1898 | 'checkuser-autocreate-action' => 'automatikoki sortua izan da', |
1641 | 1899 | 'checkuser-email-action' => '"$1" lankideari posta elektroniko bat bidali', |
1642 | 1900 | 'checkuser-reset-action' => '"$1" lankideari pasahitza berrezarri', |
— | — | @@ -1653,32 +1911,37 @@ |
1654 | 1912 | * @author Huji |
1655 | 1913 | */ |
1656 | 1914 | $messages['fa'] = array( |
1657 | | - 'checkuser-summary' => 'این ابزار تغییرات اخیر را برای به دست آوردن نشانیهای اینترنتی (IP) استفاده شده توسط یک کاربر و یا تعیین ویرایشهای انجام شده از طریق یک نشانی اینترنتی جستجو میکند. |
1658 | | -کاربرها و ویرایشهای مرتبط با یک نشانی اینترنتی را میتوان با توجه به اطلاعات سرآیند XFF (با افزودن «/xff» به انتهای نشانی IP) پیدا کرد. |
1659 | | -هر دو پروتکل IPv4 (معادل CIDR 16-32) و IPv6 (معادل CIDR 96-128) توسط این ابزار پشتیبانی میشوند.', |
| 1915 | + 'checkuser-summary' => 'این ابزار تغییرات اخیر را برای به دست آوردن نشانیهای آیپی استفاده شده توسط یک کاربر و یا تعیین ویرایشها و اطلاعات کاربری مرتبط با یک نشانی آیپی جستجو میکند. |
| 1916 | +کاربرها و ویرایشهای مرتبط با یک نشانی آیپی را میتوان با توجه به اطلاعات سرآیند XFF (با افزودن «/xff» به انتهای نشانی آیپی) پیدا کرد. |
| 1917 | +هر دو پروتکل IPv4 (معادل CIDR 16-32) و IPv6 (معادل CIDR 96-128) توسط این ابزار پشتیبانی میشوند. |
| 1918 | +بنا به دلایل عملکردی، بیش از ۵۰۰۰ ویرایش بازگردانده نمیشود. |
| 1919 | +از این ابزار طبق سیاستها استفاده کنید.', |
1660 | 1920 | 'checkuser-desc' => 'به کاربرها اختیارات لازم را برای بررسی نشانی اینترنتی کاربرها و اطلاعات دیگر میدهد', |
1661 | 1921 | 'checkuser-logcase' => 'جستجوی سیاهه به کوچک یا بزرگ بودن حروف حساس است.', |
1662 | 1922 | 'checkuser' => 'بازرسی کاربر', |
| 1923 | + 'checkuser-contribs' => 'بازرسی نشانیهای آیپی کاربر', |
1663 | 1924 | 'group-checkuser' => 'بازرسان کاربر', |
1664 | 1925 | 'group-checkuser-member' => 'بازرس کاربر', |
1665 | | - 'right-checkuser' => 'بررسی نشانی اینترنتی و دیگر اطلاعات کاربرها', |
| 1926 | + 'right-checkuser' => 'بازرسی نشانی اینترنتی و دیگر اطلاعات کاربر', |
1666 | 1927 | 'right-checkuser-log' => 'مشاهدهٔ سیاههٔ بازرسی کاربر', |
1667 | 1928 | 'grouppage-checkuser' => '{{ns:project}}:بازرسی کاربر', |
1668 | | - 'checkuser-reason' => 'دلیل', |
| 1929 | + 'checkuser-reason' => 'دلیل:', |
1669 | 1930 | 'checkuser-showlog' => 'نمایش سیاهه', |
1670 | | - 'checkuser-log' => 'سیاهه بازرسی کاربر', |
| 1931 | + 'checkuser-log' => 'سیاههٔ بازرسی کاربر', |
1671 | 1932 | 'checkuser-query' => 'جستجوی تغییرات اخیر', |
1672 | | - 'checkuser-target' => 'کاربر یا نشانی اینترنتی', |
| 1933 | + 'checkuser-target' => 'نشانی آیپی یا نام کاربری:', |
1673 | 1934 | 'checkuser-users' => 'فهرست کردن کاربرها', |
1674 | 1935 | 'checkuser-edits' => 'نمایش ویرایشهای مربوط به این نشانی اینترنتی', |
1675 | | - 'checkuser-ips' => 'فهرست کردن نشانیهای اینترنتی', |
1676 | | - 'checkuser-account' => 'دریافت ویرایشهای حساب', |
| 1936 | + 'checkuser-ips' => 'فهرست کردن نشانیهای آیپی', |
| 1937 | + 'checkuser-account' => 'دریافت ویرایشهای حساب کاربری', |
1677 | 1938 | 'checkuser-search' => 'جستجو', |
1678 | 1939 | 'checkuser-period' => 'بازه زمانی:', |
1679 | 1940 | 'checkuser-week-1' => 'هفتهٔ گذشته', |
1680 | 1941 | 'checkuser-week-2' => 'دو هفتهٔ گذشته', |
1681 | 1942 | 'checkuser-month' => '۳۰ روز گذشته', |
1682 | 1943 | 'checkuser-all' => 'همه', |
| 1944 | + 'checkuser-cidr-label' => 'پیدا کردن بازههای متداول و تاثیرپذیرفته نشانیهای آیپی برای یک فهرست از نشانیهای آیپی', |
| 1945 | + 'checkuser-cidr-res' => 'CIDR مشترک', |
1683 | 1946 | 'checkuser-empty' => 'سیاهه خالی است.', |
1684 | 1947 | 'checkuser-nomatch' => 'موردی که مطابقت داشته باشد پیدا نشد.', |
1685 | 1948 | 'checkuser-nomatch-edits' => 'مورد مطابق پیدا نشد. |
— | — | @@ -1700,8 +1963,10 @@ |
1701 | 1964 | 'checkuser-block-failure' => "'''هیچ کاربری بسته نشد.'''", |
1702 | 1965 | 'checkuser-block-limit' => 'تعداد بیش از اندازهای از کاربران انتخاب شدهاند.', |
1703 | 1966 | 'checkuser-block-noreason' => 'شما باید دلیلی برای قطع دسترسیها ارائه کنید.', |
1704 | | - 'checkuser-accounts' => '$1 {{PLURAL:$1|حساب|حساب}} جدید', |
1705 | | - 'checkuser-too-many' => 'تعداد نتایج بسیار زیاد است. لطفاً CIDR را باریکتر کنید. در زیر نشانیهای اینترنتی استفاده شده را میبینید (حداثر ۵۰۰۰ مورد، به ترتیب نشانی):', |
| 1967 | + 'checkuser-noreason' => 'شما باید دلیلی برای این درخواست وارد کنید.', |
| 1968 | + 'checkuser-accounts' => '$1 {{PLURAL:$1|حساب|حساب}} کاربری جدید', |
| 1969 | + 'checkuser-too-many' => 'تعداد نتایج بسیار زیاد است (طبق تخمینها)، لطفاً CIDR را باریکتر کنید. |
| 1970 | +در زیر نشانیهای اینترنتی استفاده شده را میبینید (حداثر ۵۰۰۰ مورد، به ترتیب نشانی):', |
1706 | 1971 | 'checkuser-user-nonexistent' => 'کاربر مورد نظر وجود ندارد.', |
1707 | 1972 | 'checkuser-search-form' => 'پیدا کردن مواردی در سیاههها که $1 همان $2 است', |
1708 | 1973 | 'checkuser-search-submit' => 'جستجو', |
— | — | @@ -1718,7 +1983,7 @@ |
1719 | 1984 | 'checkuser-log-ipusers-xff' => '$1 کاربرهای مربوط به XFF $2 را گرفت', |
1720 | 1985 | 'checkuser-log-useredits' => '$1 ویرایشهای $2 را گرفت', |
1721 | 1986 | 'checkuser-autocreate-action' => 'به طور خودکار ساخته شد', |
1722 | | - 'checkuser-email-action' => 'نامه الکترونیکی به کاربر «$1» فرستاد', |
| 1987 | + 'checkuser-email-action' => 'نامهٔ الکترونیکی به کاربر «$1» فرستاد', |
1723 | 1988 | 'checkuser-reset-action' => 'گذرواژه کاربر «$1» را از نو تنظیم کرد', |
1724 | 1989 | ); |
1725 | 1990 | |
— | — | @@ -1729,6 +1994,9 @@ |
1730 | 1995 | * @author Jaakonam |
1731 | 1996 | * @author Jack Phoenix |
1732 | 1997 | * @author Nike |
| 1998 | + * @author Str4nd |
| 1999 | + * @author Varusmies |
| 2000 | + * @author ZeiP |
1733 | 2001 | */ |
1734 | 2002 | $messages['fi'] = array( |
1735 | 2003 | 'checkuser-summary' => 'Tämän työkalun avulla voidaan tutkia tuoreet muutokset ja paljastaa käyttäjien IP-osoitteet tai noutaa IP-osoitteiden muokkaukset ja käyttäjätiedot. |
— | — | @@ -1736,6 +2004,7 @@ |
1737 | 2005 | 'checkuser-desc' => 'Antaa oikeutetuille käyttäjille mahdollisuuden tarkistaa käyttäjän IP-osoitteet ja muita tietoja.', |
1738 | 2006 | 'checkuser-logcase' => 'Haku lokista on kirjainkokoriippuvainen.', |
1739 | 2007 | 'checkuser' => 'Osoitepaljastin', |
| 2008 | + 'checkuser-contribs' => 'tarkista käyttäjän IP-osoitteet', |
1740 | 2009 | 'group-checkuser' => 'osoitepaljastimen käyttäjät', |
1741 | 2010 | 'group-checkuser-member' => 'osoitepaljastimen käyttäjä', |
1742 | 2011 | 'right-checkuser' => 'Tarkastaa käyttäjän käyttämät IP-osoitteet sekä muut tiedot', |
— | — | @@ -1745,7 +2014,7 @@ |
1746 | 2015 | 'checkuser-showlog' => 'Näytä loki', |
1747 | 2016 | 'checkuser-log' => 'Osoitepaljastinloki', |
1748 | 2017 | 'checkuser-query' => 'Hae tuoreet muutokset', |
1749 | | - 'checkuser-target' => 'Käyttäjä tai IP-osoite', |
| 2018 | + 'checkuser-target' => 'IP-osoite tai käyttäjätunnus', |
1750 | 2019 | 'checkuser-users' => 'Hae käyttäjät', |
1751 | 2020 | 'checkuser-edits' => 'Hae IP-osoitteen muokkaukset', |
1752 | 2021 | 'checkuser-ips' => 'Hae IP-osoitteet', |
— | — | @@ -1756,6 +2025,8 @@ |
1757 | 2026 | 'checkuser-week-2' => 'viimeiset kaksi viikkoa', |
1758 | 2027 | 'checkuser-month' => 'viimeiset 30 päivää', |
1759 | 2028 | 'checkuser-all' => 'kaikki', |
| 2029 | + 'checkuser-cidr-label' => 'Etsi yleinen osoiteavaruus annetulle IP-luettelolle', |
| 2030 | + 'checkuser-cidr-res' => 'Yleinen CIDR', |
1760 | 2031 | 'checkuser-empty' => 'Ei lokitapahtumia.', |
1761 | 2032 | 'checkuser-nomatch' => 'Hakuehtoihin sopivia tuloksia ei löytynyt.', |
1762 | 2033 | 'checkuser-nomatch-edits' => 'Osumia ei löytynyt. |
— | — | @@ -1778,8 +2049,10 @@ |
1779 | 2050 | 'checkuser-block-failure' => "'''Yhtään käyttäjää ei estetty.'''", |
1780 | 2051 | 'checkuser-block-limit' => 'Liian monta käyttäjää valittu.', |
1781 | 2052 | 'checkuser-block-noreason' => 'Estoille on annettava syy.', |
| 2053 | + 'checkuser-noreason' => 'Sinun tulee antaa syy tälle kyselylle.', |
1782 | 2054 | 'checkuser-accounts' => '$1 {{PLURAL:$1|uusi tunnus|uutta tunnusta}}', |
1783 | | - 'checkuser-too-many' => 'Liian monta tulosta, rajoita IP-osoitetta:', |
| 2055 | + 'checkuser-too-many' => 'Liian monta tulosta (kyselyarvion mukaan), pienennä CIDR-aluetta. |
| 2056 | +Käytetyt IP:t (enintään 5000, järjestetty osoitteen mukaan):', |
1784 | 2057 | 'checkuser-user-nonexistent' => 'Määritettyä käyttäjää ei ole olemassa.', |
1785 | 2058 | 'checkuser-search-form' => 'Etsi lokimerkintöjä, joissa $1 on $2', |
1786 | 2059 | 'checkuser-search-submit' => 'Hae', |
— | — | @@ -1815,6 +2088,7 @@ |
1816 | 2089 | * @author ChrisPtDe |
1817 | 2090 | * @author Grondin |
1818 | 2091 | * @author IAlex |
| 2092 | + * @author Peter17 |
1819 | 2093 | * @author PieRRoMaN |
1820 | 2094 | * @author Sherbrooke |
1821 | 2095 | * @author Verdy p |
— | — | @@ -1838,7 +2112,7 @@ |
1839 | 2113 | 'checkuser-showlog' => 'Afficher le journal', |
1840 | 2114 | 'checkuser-log' => 'Journal des vérifications d’utilisateurs', |
1841 | 2115 | 'checkuser-query' => 'Recherche des modifications récentes', |
1842 | | - 'checkuser-target' => 'Nom d’utilisateur ou adresse IP', |
| 2116 | + 'checkuser-target' => 'Nom d’utilisateur ou adresse IP :', |
1843 | 2117 | 'checkuser-users' => 'Obtenir les utilisateurs', |
1844 | 2118 | 'checkuser-edits' => 'Obtenir les modifications par une adresse IP', |
1845 | 2119 | 'checkuser-ips' => 'Obtenir les adresses IP', |
— | — | @@ -1872,9 +2146,10 @@ |
1873 | 2147 | 'checkuser-block-failure' => "'''Aucun utilisateur bloqué.'''", |
1874 | 2148 | 'checkuser-block-limit' => 'Trop d’utilisateurs sélectionnés.', |
1875 | 2149 | 'checkuser-block-noreason' => 'Vous devez donner un motif justifiant les blocages.', |
| 2150 | + 'checkuser-noreason' => 'Vous devez donner une raison pour cette requête.', |
1876 | 2151 | 'checkuser-accounts' => '$1 nouveau{{PLURAL:$1||x}} compte{{PLURAL:$1||s}}', |
1877 | | - 'checkuser-too-many' => 'Trop de résultats, veuillez affiner l’étendue CIDR. |
1878 | | -Voici un extrait des IP utilisées ({{formatnum:5000}} maximum, triées par adresse) :', |
| 2152 | + 'checkuser-too-many' => "Trop de résultats (selon l'estimation de la requête), veuillez affiner l’étendue CIDR. |
| 2153 | +Voici un extrait des IP utilisées ({{formatnum:5000}} maximum, triées par adresse) :", |
1879 | 2154 | 'checkuser-user-nonexistent' => 'L’utilisateur indiqué n’existe pas.', |
1880 | 2155 | 'checkuser-search-form' => 'Chercher les entrées de journal où $1 est $2.', |
1881 | 2156 | 'checkuser-search-submit' => 'Rechercher', |
— | — | @@ -1931,37 +2206,68 @@ |
1932 | 2207 | 'checkuser-desc' => 'Balye la possibilitât a les gens qu’ont la pèrmission que vat avouéc de controlar les adrèces IP des utilisators et pués d’ôtres enformacions los regardent.', |
1933 | 2208 | 'checkuser-logcase' => 'La rechèrche dens lo jornal est sensibla a la câssa.', |
1934 | 2209 | 'checkuser' => 'Controlor d’utilisator', |
| 2210 | + 'checkuser-contribs' => 'controlar les adrèces IP ux utilisators', |
1935 | 2211 | 'group-checkuser' => 'Controlors d’utilisator', |
1936 | 2212 | 'group-checkuser-member' => 'Controlor d’utilisator', |
| 2213 | + 'right-checkuser' => 'Controlar les adrèces IP ux utilisators et ôtres enformacions', |
| 2214 | + 'right-checkuser-log' => 'Vêre lo jornal des contrôlos d’utilisators', |
1937 | 2215 | 'grouppage-checkuser' => '{{ns:project}}:Controlors d’utilisator', |
1938 | | - 'checkuser-reason' => 'Rêson', |
| 2216 | + 'checkuser-reason' => 'Rêson :', |
1939 | 2217 | 'checkuser-showlog' => 'Afichiér lo jornal', |
1940 | | - 'checkuser-log' => 'Jornal de controlor d’utilisator', |
| 2218 | + 'checkuser-log' => 'Jornal des contrôlos d’utilisators', |
1941 | 2219 | 'checkuser-query' => 'Rechèrche per los dèrriérs changements', |
1942 | | - 'checkuser-target' => 'Nom d’utilisator ou adrèce IP', |
1943 | | - 'checkuser-users' => 'Obtegnir los utilisators', |
1944 | | - 'checkuser-edits' => 'Obtegnir les modificacions de l’adrèce IP', |
1945 | | - 'checkuser-ips' => 'Obtegnir les adrèces IP', |
| 2220 | + 'checkuser-target' => 'Adrèce IP ou ben nom d’utilisator :', |
| 2221 | + 'checkuser-users' => 'Avêr los utilisators', |
| 2222 | + 'checkuser-edits' => 'Avêr los changements per una adrèce IP', |
| 2223 | + 'checkuser-ips' => 'Avêr les adrèces IP', |
| 2224 | + 'checkuser-account' => 'Avêr los changements du compto', |
1946 | 2225 | 'checkuser-search' => 'Rechèrche', |
| 2226 | + 'checkuser-period' => 'Temps :', |
| 2227 | + 'checkuser-week-1' => 'la semana passâ', |
| 2228 | + 'checkuser-week-2' => 'les doves semanes passâs', |
| 2229 | + 'checkuser-month' => 'los 30 jorns passâs', |
| 2230 | + 'checkuser-all' => 'tot', |
| 2231 | + 'checkuser-cidr-label' => 'Chèrchiér una plage comena et les adrèces afèctâs por una lista d’adrèces IP', |
| 2232 | + 'checkuser-cidr-res' => 'Plage CIDR comena :', |
1947 | 2233 | 'checkuser-empty' => 'Lo jornal contint gins d’articllo.', |
1948 | 2234 | 'checkuser-nomatch' => 'Rechèrches que balyont ren.', |
1949 | 2235 | 'checkuser-check' => 'Rechèrche', |
1950 | 2236 | 'checkuser-log-fail' => 'Empossiblo d’apondre l’entrâ du jornal.', |
1951 | 2237 | 'checkuser-nolog' => 'Niona entrâ dens lo jornal.', |
1952 | 2238 | 'checkuser-blocked' => 'Blocâ', |
1953 | | - 'checkuser-too-many' => 'Trop de rèsultats. Volyéd limitar la rechèrche sur les adrèces IP :', |
| 2239 | + 'checkuser-gblocked' => 'Blocâ dens l’ensemblo', |
| 2240 | + 'checkuser-locked' => 'Vèrrolyê', |
| 2241 | + 'checkuser-wasblocked' => 'Blocâ dês devant', |
| 2242 | + 'checkuser-localonly' => 'Pas unifiâ', |
| 2243 | + 'checkuser-massblock' => 'Blocar los utilisators chouèsis', |
| 2244 | + 'checkuser-blocktag' => 'Remplaciér les pâges utilisator per :', |
| 2245 | + 'checkuser-blocktag-talk' => 'Remplaciér les pâges de discussion per :', |
| 2246 | + 'checkuser-massblock-commit' => 'Blocar los utilisators chouèsis', |
| 2247 | + 'checkuser-block-success' => "'''{{PLURAL:$2|L’utilisator $1 est ora blocâ|Cetos $2 utilisators sont ora blocâs : $1}}.'''", |
| 2248 | + 'checkuser-block-failure' => "'''Gins d’utilisator blocâ.'''", |
| 2249 | + 'checkuser-block-limit' => 'Trop d’utilisators chouèsis.', |
| 2250 | + 'checkuser-block-noreason' => 'Vos dête balyér una rêson por los blocâjos.', |
| 2251 | + 'checkuser-noreason' => 'Vos dête balyér una rêson por cela requéta.', |
| 2252 | + 'checkuser-accounts' => '$1 compto{{PLURAL:$1||s}} novél{{PLURAL:$1||s}}', |
| 2253 | + 'checkuser-too-many' => 'Trop de rèsultats (d’aprés l’èstimacion de la requéta), volyéd èpurar l’ètendua CIDR. |
| 2254 | +Vê-que un èxtrèt a les adrèces IP utilisâs ({{formatnum:5000}} u més, triyês per adrèce) :', |
1954 | 2255 | 'checkuser-user-nonexistent' => 'L’utilisator endicâ ègziste pas.', |
1955 | 2256 | 'checkuser-search-form' => 'Chèrchiér lo jornal de les entrâs yô que $1 est $2.', |
1956 | 2257 | 'checkuser-search-submit' => 'Rechèrchiér', |
1957 | 2258 | 'checkuser-search-initiator' => 'l’iniciator', |
1958 | 2259 | 'checkuser-search-target' => 'la ciba', |
| 2260 | + 'checkuser-ipeditcount' => '~$1 per tôs los utilisators', |
1959 | 2261 | 'checkuser-log-subpage' => 'Jornal', |
1960 | 2262 | 'checkuser-log-return' => 'Tornar u formulèro principâl du contrôlo d’utilisator', |
1961 | 2263 | 'checkuser-log-userips' => '$1 at obtegnu des IP por $2', |
1962 | | - 'checkuser-log-ipedits' => '$1 at obtegnu des modificacions por $2', |
| 2264 | + 'checkuser-log-ipedits' => '$1 at avu des changements per l’adrèce IP $2', |
1963 | 2265 | 'checkuser-log-ipusers' => '$1 at obtegnu des utilisators por $2', |
1964 | | - 'checkuser-log-ipedits-xff' => '$1 at obtegnu des modificacions por XFF $2', |
| 2266 | + 'checkuser-log-ipedits-xff' => '$1 at avu des changements per l’adrèce XFF $2', |
1965 | 2267 | 'checkuser-log-ipusers-xff' => '$1 at obtegnu des utilisators por XFF $2', |
| 2268 | + 'checkuser-log-useredits' => '$1 at avu des changements per $2', |
| 2269 | + 'checkuser-autocreate-action' => 'at étâ fêt ôtomaticament', |
| 2270 | + 'checkuser-email-action' => 'at mandâ un mèssâjo a l’utilisator « $1 »', |
| 2271 | + 'checkuser-reset-action' => 'tôrne inicialisar lo mot de pâssa por l’utilisator « $1 »', |
1966 | 2272 | ); |
1967 | 2273 | |
1968 | 2274 | /** Western Frisian (Frysk) |
— | — | @@ -1974,6 +2280,7 @@ |
1975 | 2281 | |
1976 | 2282 | /** Irish (Gaeilge) |
1977 | 2283 | * @author Alison |
| 2284 | + * @author Tameamseo |
1978 | 2285 | */ |
1979 | 2286 | $messages['ga'] = array( |
1980 | 2287 | 'checkuser-summary' => 'Scanann an uirlis seo na athruithe is déanaí chun na seolaidh IP úsáideoira a fháil ná taispeáin na sonraí eagarthóireachta/úsáideoira don seoladh IP. |
— | — | @@ -1992,6 +2299,7 @@ |
1993 | 2300 | 'checkuser-users' => 'Faigh úsáideoira', |
1994 | 2301 | 'checkuser-edits' => 'Faigh athruithe don seoladh IP seo', |
1995 | 2302 | 'checkuser-ips' => 'Faigh Seolaidh IP', |
| 2303 | + 'checkuser-account' => 'Faigh athruithe don chuntas seo', |
1996 | 2304 | 'checkuser-search' => 'Cuardaigh', |
1997 | 2305 | 'checkuser-week-1' => 'an tseachtain seo caite', |
1998 | 2306 | 'checkuser-week-2' => 'dhá sheachtain seo caite', |
— | — | @@ -2005,6 +2313,7 @@ |
2006 | 2314 | 'checkuser-blocked' => 'Cosanta', |
2007 | 2315 | 'checkuser-gblocked' => 'Cosanta domhandach', |
2008 | 2316 | 'checkuser-locked' => 'Glasáilte', |
| 2317 | + 'checkuser-massblock' => 'Cuir cosc ar na húsáideoirí roghnaithe', |
2009 | 2318 | 'checkuser-massblock-commit' => 'Cur cosc ar na n-úsáideoirí roghnaithe', |
2010 | 2319 | 'checkuser-block-success' => "'''Tá {{PLURAL:$2|an úsáideoir|na n-úsáideoirí}} $1 coiscthe anois.'''", |
2011 | 2320 | 'checkuser-block-failure' => "'''Níl aon úsáideoirí coiscthe.'''", |
— | — | @@ -2045,11 +2354,11 @@ |
2046 | 2355 | 'right-checkuser' => 'Comprobar os enderezos IP dos usuarios e outra información', |
2047 | 2356 | 'right-checkuser-log' => 'Ver o rexistro de comprobadores de usuarios', |
2048 | 2357 | 'grouppage-checkuser' => '{{ns:project}}:Verificador de usuarios', |
2049 | | - 'checkuser-reason' => 'Razón:', |
| 2358 | + 'checkuser-reason' => 'Motivo:', |
2050 | 2359 | 'checkuser-showlog' => 'Amosar o rexistro', |
2051 | 2360 | 'checkuser-log' => 'Rexistro de comprobacións de usuarios', |
2052 | 2361 | 'checkuser-query' => 'Consulta de cambios recentes', |
2053 | | - 'checkuser-target' => 'Usuario ou enderezo IP', |
| 2362 | + 'checkuser-target' => 'Enderezo IP ou nome de usuario:', |
2054 | 2363 | 'checkuser-users' => 'Obter os usuarios', |
2055 | 2364 | 'checkuser-edits' => 'Obter as edicións do enderezo IP', |
2056 | 2365 | 'checkuser-ips' => 'Obter os enderezos IP', |
— | — | @@ -2084,8 +2393,10 @@ |
2085 | 2394 | 'checkuser-block-failure' => "'''Non hai ningún usuario bloqueado.'''", |
2086 | 2395 | 'checkuser-block-limit' => 'Hai seleccionados demasiados usuarios.', |
2087 | 2396 | 'checkuser-block-noreason' => 'Debe dar unha razón para os bloqueos.', |
| 2397 | + 'checkuser-noreason' => 'Debe dar unha razón para esta pescuda.', |
2088 | 2398 | 'checkuser-accounts' => '{{PLURAL:$1|Unha nova conta|$1 novas contas}}', |
2089 | | - 'checkuser-too-many' => 'Hai demasiados resultados, restrinxa o enderezo IP:', |
| 2399 | + 'checkuser-too-many' => 'Hai demasiados resultados (segundo a estimación da pesquisa), restrinxa o CIDR. |
| 2400 | +Aquí están os enderezos IP usados (máximo 5.000, ordenados por enderezo):', |
2090 | 2401 | 'checkuser-user-nonexistent' => 'Non existe o usuario especificado.', |
2091 | 2402 | 'checkuser-search-form' => 'Atopar as entradas do rexistro nas que $1 é $2', |
2092 | 2403 | 'checkuser-search-submit' => 'Procurar', |
— | — | @@ -2122,6 +2433,7 @@ |
2123 | 2434 | 'checkuser-search' => 'Ζητεῖν', |
2124 | 2435 | 'checkuser-period' => 'Διάρκεια:', |
2125 | 2436 | 'checkuser-all' => 'ἅπασαι', |
| 2437 | + 'checkuser-check' => 'Ἐλέγχειν', |
2126 | 2438 | 'checkuser-wasblocked' => 'Προηγουμένως πεφραγμένος', |
2127 | 2439 | 'checkuser-search-submit' => 'Ζητεῖν', |
2128 | 2440 | 'checkuser-search-initiator' => 'ἐγκαινιαστής', |
— | — | @@ -2148,7 +2460,7 @@ |
2149 | 2461 | 'checkuser-showlog' => 'Logbuech aazeige', |
2150 | 2462 | 'checkuser-log' => 'Checkuser-Logbuech', |
2151 | 2463 | 'checkuser-query' => 'Letchte Änderige abfroge', |
2152 | | - 'checkuser-target' => 'Benutzer oder IP-Adräss', |
| 2464 | + 'checkuser-target' => 'IP-Adräss oder Benutzername:', |
2153 | 2465 | 'checkuser-users' => 'Hol Benutzer', |
2154 | 2466 | 'checkuser-edits' => 'Hol Bearbeitige vun ere IP-Adräss', |
2155 | 2467 | 'checkuser-ips' => 'Hol IP-Adrässe', |
— | — | @@ -2182,8 +2494,9 @@ |
2183 | 2495 | 'checkuser-block-failure' => "'''S sin kei Benutzer gsperrt wore.'''", |
2184 | 2496 | 'checkuser-block-limit' => 'S sin zvyl Benutzer usgwählt wore.', |
2185 | 2497 | 'checkuser-block-noreason' => 'Du muesch e Grund fir d Sperri aagee.', |
| 2498 | + 'checkuser-noreason' => 'Du muesch e Grund fir die Abfrog aagee.', |
2186 | 2499 | 'checkuser-accounts' => '{{PLURAL:$1|1 nej Benutzerkonto|$1 neiji Benutzerkonte}}', |
2187 | | - 'checkuser-too-many' => 'D Ergebnislischt isch z lang, bitte grenz dr IP-Beryych wyter yy. Do sin di benutzten IP-Adrässe (maximal 5000, sortiert noch Adrässe):', |
| 2500 | + 'checkuser-too-many' => 'D Ergebnislischt isch z lang (noch ere Abfrogs-Schätzig), bitte gränz dr IP-Beryych wyter yy. Do sin di benutzten IP-Adrässe (maximal 5000, sortiert noch Adrässe):', |
2188 | 2501 | 'checkuser-user-nonexistent' => 'S Benutzerkonto, wu Du aagee hesch, isch nit vorhande.', |
2189 | 2502 | 'checkuser-search-form' => 'Suech Logbuechyyträg, wu $1 byyn ene $2 isch.', |
2190 | 2503 | 'checkuser-search-submit' => 'Suech', |
— | — | @@ -2216,7 +2529,7 @@ |
2217 | 2530 | * @author MacTire02 |
2218 | 2531 | */ |
2219 | 2532 | $messages['gv'] = array( |
2220 | | - 'checkuser-reason' => 'Fa', |
| 2533 | + 'checkuser-reason' => 'Fa:', |
2221 | 2534 | 'checkuser-search' => 'Ronsaghey', |
2222 | 2535 | 'checkuser-search-submit' => 'Ronsaghey', |
2223 | 2536 | ); |
— | — | @@ -2242,6 +2555,8 @@ |
2243 | 2556 | /** Hebrew (עברית) |
2244 | 2557 | * @author Amire80 |
2245 | 2558 | * @author Rotem Liss |
| 2559 | + * @author Rotemliss |
| 2560 | + * @author YaronSh |
2246 | 2561 | */ |
2247 | 2562 | $messages['he'] = array( |
2248 | 2563 | 'checkuser-summary' => 'כלי זה סורק את השינויים האחרונים במטרה למצוא את כתובות ה־IP שהשתמש בהן משתמש מסוים או כדי להציג את כל המידע על המשתמשים שהשתמשו בכתובת IP ועל העריכות שבוצעו ממנה. |
— | — | @@ -2260,7 +2575,7 @@ |
2261 | 2576 | 'checkuser-showlog' => 'הצגת יומן', |
2262 | 2577 | 'checkuser-log' => 'יומן בדיקות', |
2263 | 2578 | 'checkuser-query' => 'בדיקת שינויים אחרונים', |
2264 | | - 'checkuser-target' => 'שם משתמש או כתובת IP', |
| 2579 | + 'checkuser-target' => 'שם משתמש או כתובת IP:', |
2265 | 2580 | 'checkuser-users' => 'הצגת משתמשים', |
2266 | 2581 | 'checkuser-edits' => 'הצגת עריכות מכתובת IP מסוימת', |
2267 | 2582 | 'checkuser-ips' => 'הצגת כתובות IP', |
— | — | @@ -2295,8 +2610,10 @@ |
2296 | 2611 | 'checkuser-block-failure' => "'''לא נחסמו משתמשים.'''", |
2297 | 2612 | 'checkuser-block-limit' => 'נבחרו יותר מדי משתמשים.', |
2298 | 2613 | 'checkuser-block-noreason' => 'עליכם לתת סיבה לחסימות.', |
| 2614 | + 'checkuser-noreason' => 'עליכם לכתוב סיבה לבדיקה זו.', |
2299 | 2615 | 'checkuser-accounts' => '{{PLURAL:$1|חשבון חדש אחד|$1 חשבונות חדשים}}', |
2300 | | - 'checkuser-too-many' => 'נמצאו תוצאות רבות מדי, אנא צמצמו את טווח כתובות ה־IP. להלן כתובת ה־IP שנעשה בהן שימוש (מוצגות 5,000 לכל היותר, וממוינות):', |
| 2616 | + 'checkuser-too-many' => 'נמצאו תוצאות רבות מדי (לפי הערכה של השאילתה), אנא צמצמו את טווח כתובות ה־IP. |
| 2617 | +להלן כתובות ה־IP שנעשה בהן שימוש (מוצגות 5,000 לכל היותר, וממוינות לפי כתובת):', |
2301 | 2618 | 'checkuser-user-nonexistent' => 'המשתמש לא נמצא.', |
2302 | 2619 | 'checkuser-search-form' => 'מציאת ערכים ביומן שבהם ה$1 הוא $2', |
2303 | 2620 | 'checkuser-search-submit' => 'חיפוש', |
— | — | @@ -2376,14 +2693,15 @@ |
2377 | 2694 | |
2378 | 2695 | /** Croatian (Hrvatski) |
2379 | 2696 | * @author Dalibor Bosits |
| 2697 | + * @author Ex13 |
2380 | 2698 | * @author SpeedyGonsales |
2381 | | - * @author Suradnik13 |
2382 | 2699 | */ |
2383 | 2700 | $messages['hr'] = array( |
2384 | 2701 | 'checkuser-summary' => 'Ovaj alat pretražuje nedavne promjene i pronalazi IP adrese suradnika ili prikazuje uređivanja/ime suradnika ako je zadana IP adresa. Suradnici i uređivanja mogu biti dobiveni po XFF zaglavljima dodavanjem "/xff" na kraj IP adrese. Podržane su IPv4 (CIDR 16-32) i IPv6 (CIDR 96-128) adrese. Rezultat ima maksimalno 5.000 zapisa iz tehničkih razloga. Rabite ovaj alat u skladu s pravilima.', |
2385 | 2702 | 'checkuser-desc' => 'Daje suradniku pravo za provjeriti IP adrese suradnika i druge informacije', |
2386 | 2703 | 'checkuser-logcase' => 'Pretraživanje evidencije razlikuje velika i mala slova', |
2387 | 2704 | 'checkuser' => 'Provjeri suradnika', |
| 2705 | + 'checkuser-contribs' => 'provjeri suradničke IP adrese', |
2388 | 2706 | 'group-checkuser' => 'Provjeritelji', |
2389 | 2707 | 'group-checkuser-member' => 'Provjeritelj', |
2390 | 2708 | 'right-checkuser' => 'Provjeravanje IP adrese suradnika i drugih informacija', |
— | — | @@ -2428,6 +2746,7 @@ |
2429 | 2747 | 'checkuser-block-failure' => "'''Nema blokiranih suradnika.'''", |
2430 | 2748 | 'checkuser-block-limit' => 'Odabrano je previše suradnika.', |
2431 | 2749 | 'checkuser-block-noreason' => 'Morate upisati razlog za blokiranje.', |
| 2750 | + 'checkuser-noreason' => 'Morate navesti razlog za ovaj upit.', |
2432 | 2751 | 'checkuser-accounts' => '$1 {{PLURAL:$1|novi račun|novih računa}}', |
2433 | 2752 | 'checkuser-too-many' => 'Previše rezultata, molimo suzite opseg (CIDR). Slijede rabljene IP adrese (najviše njih 5000, poredano abecedno):', |
2434 | 2753 | 'checkuser-user-nonexistent' => 'Traženi suradnik (suradničko ime) ne postoji.', |
— | — | @@ -2469,7 +2788,7 @@ |
2470 | 2789 | 'checkuser-showlog' => 'Protokol pokazać', |
2471 | 2790 | 'checkuser-log' => 'Protokol wužiwarskeje kontrole', |
2472 | 2791 | 'checkuser-query' => 'Poslednje změny wotprašeć', |
2473 | | - 'checkuser-target' => 'Wužiwar abo IP-adresa', |
| 2792 | + 'checkuser-target' => 'IP-adresa abo wužiwarske mjeno:', |
2474 | 2793 | 'checkuser-users' => 'Wužiwarjow pokazać', |
2475 | 2794 | 'checkuser-edits' => 'Změny z IP-adresy přinjesć', |
2476 | 2795 | 'checkuser-ips' => 'IP-adresy pokazać', |
— | — | @@ -2504,8 +2823,10 @@ |
2505 | 2824 | 'checkuser-block-failure' => "'''Žane wužiwarjo zablokowani.'''", |
2506 | 2825 | 'checkuser-block-limit' => 'Přewjele wužiwarjow wubrane.', |
2507 | 2826 | 'checkuser-block-noreason' => 'Dyrbiš přičinu za zablokowanja podać.', |
| 2827 | + 'checkuser-noreason' => 'Dyrbiš přičinu za tute wotprašowanje podać.', |
2508 | 2828 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nowe konto|nowej konće|nowe konta|nowych kontow}}', |
2509 | | - 'checkuser-too-many' => 'Přewjele wuslědkow, prošu zamjezuj IP-adresu:', |
| 2829 | + 'checkuser-too-many' => 'Přewjele wuslědkow (po taksowanju naprašowanja), prošu zamjezuj CIDR. |
| 2830 | +Tu su wužiwane IP (maks. 5000, po adresy sortěrowane):', |
2510 | 2831 | 'checkuser-user-nonexistent' => 'Podaty wužiwar njeeksistuje.', |
2511 | 2832 | 'checkuser-search-form' => 'Protokolowe zapiski namakać, hdźež $1 je $2', |
2512 | 2833 | 'checkuser-search-submit' => 'Pytać', |
— | — | @@ -2529,6 +2850,7 @@ |
2530 | 2851 | /** Hungarian (Magyar) |
2531 | 2852 | * @author Dani |
2532 | 2853 | * @author Dorgan |
| 2854 | + * @author Glanthor Reviol |
2533 | 2855 | * @author Grin |
2534 | 2856 | * @author KossuthRad |
2535 | 2857 | * @author Terik |
— | — | @@ -2541,6 +2863,7 @@ |
2542 | 2864 | 'checkuser-desc' => 'Lehetővé teszi olyan felhasználói jogok kiosztását, mely segítségével megtekinthetőek a felhasználók IP-címei és más adatok', |
2543 | 2865 | 'checkuser-logcase' => 'A kereső kis- és nagybetűérzékeny.', |
2544 | 2866 | 'checkuser' => 'IP-ellenőr', |
| 2867 | + 'checkuser-contribs' => 'az IP-ellenőr IP-címei', |
2545 | 2868 | 'group-checkuser' => 'IP-ellenőrök', |
2546 | 2869 | 'group-checkuser-member' => 'IP-ellenőr', |
2547 | 2870 | 'right-checkuser' => 'a felhasználók IP-címének és más adatainak ellenőrzése', |
— | — | @@ -2550,7 +2873,7 @@ |
2551 | 2874 | 'checkuser-showlog' => 'Napló megjelenítése', |
2552 | 2875 | 'checkuser-log' => 'IP-ellenőr-napló', |
2553 | 2876 | 'checkuser-query' => 'Kétséges aktuális változások', |
2554 | | - 'checkuser-target' => 'Felhasználó vagy IP-cím', |
| 2877 | + 'checkuser-target' => 'IP-cím vagy felhasználónév:', |
2555 | 2878 | 'checkuser-users' => 'Felhasználók keresése', |
2556 | 2879 | 'checkuser-edits' => 'Szerkesztések keresése IP-cím alapján', |
2557 | 2880 | 'checkuser-ips' => 'IP-címek keresése', |
— | — | @@ -2581,12 +2904,14 @@ |
2582 | 2905 | 'checkuser-blocktag' => 'Szerkesztői lapok cseréje erre:', |
2583 | 2906 | 'checkuser-blocktag-talk' => 'Vitalapok cseréje erre:', |
2584 | 2907 | 'checkuser-massblock-commit' => 'Kiválasztott szerkesztők blokkolása', |
2585 | | - 'checkuser-block-success' => "'''A következő szerkesztők blokkolva lettek: $1.'''", |
| 2908 | + 'checkuser-block-success' => "'''A következő {{PLURAL:$2|szerkesztő|szerkesztők}} blokkolva {{PLURAL:$2|lett|lettek}}: $1.'''", |
2586 | 2909 | 'checkuser-block-failure' => "'''Nem lettek szerkesztők blokkolva.'''", |
2587 | 2910 | 'checkuser-block-limit' => 'Túl sok szerkesztőt választottál ki.', |
2588 | 2911 | 'checkuser-block-noreason' => 'Meg kell adnod a blokkolások okát.', |
| 2912 | + 'checkuser-noreason' => 'Meg kell adnod a lekérdezés okát.', |
2589 | 2913 | 'checkuser-accounts' => '{{PLURAL:$1|egy|$1}} új felhasználói fiók', |
2590 | | - 'checkuser-too-many' => 'Túl sok eredmény, kérlek szűkítsd le a CIDR-t. Itt vannak a használt IP-címek (maximum 5000, cím alapján rendezve):', |
| 2914 | + 'checkuser-too-many' => 'Túl sok találat (a lekérdezési becslés szerint), kérlek szűkítsd le a CIDR-t. |
| 2915 | +Itt vannak a használt IP-címek (maximum 5000, cím alapján rendezve):', |
2591 | 2916 | 'checkuser-user-nonexistent' => 'A megadott szerkesztő nem létezik.', |
2592 | 2917 | 'checkuser-search-form' => 'Naplóbejegyzések keresése, ahol $1 $2', |
2593 | 2918 | 'checkuser-search-submit' => 'Keresés', |
— | — | @@ -2601,6 +2926,7 @@ |
2602 | 2927 | 'checkuser-log-ipusers' => '$1 lekérte a(z) $2 IP-címhez tarzozó szerkesztőket', |
2603 | 2928 | 'checkuser-log-ipedits-xff' => '$1 lekérte XFF $2 szerkesztéseit', |
2604 | 2929 | 'checkuser-log-ipusers-xff' => '$1 lekérte XFF $2 szerkesztőit', |
| 2930 | + 'checkuser-log-useredits' => '$1 lekérdezte $2 szerkesztéseit', |
2605 | 2931 | 'checkuser-autocreate-action' => 'automatikusan létrehozva', |
2606 | 2932 | 'checkuser-email-action' => 'e-mailt küldött „$1” szerkesztőnek', |
2607 | 2933 | 'checkuser-reset-action' => 'lecserélte „$1” jelszavát', |
— | — | @@ -2636,7 +2962,7 @@ |
2637 | 2963 | 'checkuser-showlog' => 'Monstrar registro', |
2638 | 2964 | 'checkuser-log' => 'Registro de verification de usatores', |
2639 | 2965 | 'checkuser-query' => 'Consultar le modificationes recente', |
2640 | | - 'checkuser-target' => 'Usator o IP', |
| 2966 | + 'checkuser-target' => 'Adresse IP o nomine de usator:', |
2641 | 2967 | 'checkuser-users' => 'Cercar usatores', |
2642 | 2968 | 'checkuser-edits' => 'Cercar modificationes desde IP', |
2643 | 2969 | 'checkuser-ips' => 'Cercar IPs', |
— | — | @@ -2671,9 +2997,10 @@ |
2672 | 2998 | 'checkuser-block-failure' => "'''Nulle usator blocate.'''", |
2673 | 2999 | 'checkuser-block-limit' => 'Troppo de usatores seligite.', |
2674 | 3000 | 'checkuser-block-noreason' => 'Tu debe indicar un motivo pro le blocadas.', |
| 3001 | + 'checkuser-noreason' => 'Tu debe dar un motivo pro iste consulta.', |
2675 | 3002 | 'checkuser-accounts' => '$1 nove {{PLURAL:$1|conto|contos}}', |
2676 | | - 'checkuser-too-many' => 'Troppo de resultatos. Per favor restringe le CIDR. |
2677 | | -Ecce le IPs usate (5000 max, ordinate per adresse):', |
| 3003 | + 'checkuser-too-many' => 'Troppo de resultatos (secundo un estimation del consulta). Per favor restringe le CIDR. |
| 3004 | +Ecce le IPs usate (max. 5000, ordinate per adresse):', |
2678 | 3005 | 'checkuser-user-nonexistent' => 'Le usator specificate non existe.', |
2679 | 3006 | 'checkuser-search-form' => 'Cercar entratas in le registro ubi le $1 es $2', |
2680 | 3007 | 'checkuser-search-submit' => 'Cercar', |
— | — | @@ -2695,23 +3022,27 @@ |
2696 | 3023 | ); |
2697 | 3024 | |
2698 | 3025 | /** Indonesian (Bahasa Indonesia) |
| 3026 | + * @author Bennylin |
2699 | 3027 | * @author Borgx |
| 3028 | + * @author Irwangatot |
2700 | 3029 | * @author IvanLanin |
2701 | 3030 | * @author Rex |
2702 | 3031 | */ |
2703 | 3032 | $messages['id'] = array( |
2704 | | - 'checkuser-summary' => 'Peralatan ini memindai perubahan terbaru untuk mendapatkan IP yang digunakan oleh seorang pengguna atau menunjukkan data suntingan/pengguna untuk suatu IP. |
2705 | | - Pengguna dan suntingan dapat diperoleh dari suatu IP XFF dengan menambahkan "/xff" pada suatu IP. IPv4 (CIDR 16-32) dan IPv6 (CIDR 96-128) dapat digunakan. |
2706 | | - Karena alasan kinerja, maksimum hanya 5000 suntingan yang dapat diambil. Harap gunakan peralatan ini sesuai dengan kebijakan yang ada.', |
| 3033 | + 'checkuser-summary' => 'Peralatan ini memindai perubahan terbaru untuk mengetahui IP seorang pengguna atau menampilkan data suntingan/pengguna untuk suatu IP. |
| 3034 | +Pengguna dan suntingan suatu IP dapat diketahui melalui kepala XFF dengan menambahkan "/xff" pada IP tersebut. Alat ini mendukung baik IPv4 (CIDR 16-32) maupun IPv6 (CIDR 96-128). |
| 3035 | +Karena alasan kinerja, maksimum hanya 5000 suntingan yang dapat diambil. |
| 3036 | +Harap gunakan peralatan ini sesuai dengan kebijakan yang ada.', |
2707 | 3037 | 'checkuser-desc' => 'Memberikan fasilitas bagi pengguna yang memiliki hak akses untuk memeriksa alamat IP dan informasi lain dari pengguna', |
2708 | 3038 | 'checkuser-logcase' => 'Log ini bersifat sensitif terhadap kapitalisasi.', |
2709 | 3039 | 'checkuser' => 'Pemeriksaan pengguna', |
| 3040 | + 'checkuser-contribs' => 'memeriksa IP pengguna', |
2710 | 3041 | 'group-checkuser' => 'Pemeriksa', |
2711 | | - 'group-checkuser-member' => 'Pemeriksa', |
2712 | | - 'right-checkuser' => 'Periksa alamat IP pengguna dan informasi lainnya', |
2713 | | - 'right-checkuser-log' => 'Tampilkan log pemeriksa', |
| 3042 | + 'group-checkuser-member' => 'Pemeriksaan pengguna', |
| 3043 | + 'right-checkuser' => 'Memeriksa alamat IP pengguna dan informasi lainnya', |
| 3044 | + 'right-checkuser-log' => 'Melihat log pemeriksa', |
2714 | 3045 | 'grouppage-checkuser' => '{{ns:project}}:Pemeriksa', |
2715 | | - 'checkuser-reason' => 'Alasan', |
| 3046 | + 'checkuser-reason' => 'Alasan:', |
2716 | 3047 | 'checkuser-showlog' => 'Tampilkan log', |
2717 | 3048 | 'checkuser-log' => 'Log pemeriksaan pengguna', |
2718 | 3049 | 'checkuser-query' => 'Kueri perubahan terbaru', |
— | — | @@ -2726,8 +3057,10 @@ |
2727 | 3058 | 'checkuser-week-2' => 'dua minggu terakhir', |
2728 | 3059 | 'checkuser-month' => '30 hari terakhir', |
2729 | 3060 | 'checkuser-all' => 'semua', |
| 3061 | + 'checkuser-cidr-label' => 'Mencari jangkauan umum dan alamat yang dipengaruhi dari sebuah daftar IP', |
| 3062 | + 'checkuser-cidr-res' => 'CIDR umum:', |
2730 | 3063 | 'checkuser-empty' => 'Log kosong.', |
2731 | | - 'checkuser-nomatch' => 'Data yang sesuai tidak ditemukan.', |
| 3064 | + 'checkuser-nomatch' => 'Tidak ditemukan data yang cocok.', |
2732 | 3065 | 'checkuser-nomatch-edits' => 'Tidak ditemukan hasil sesuai kriteria yang diberikan. Suntingan terakhir dilakukan pada $2, $1.', |
2733 | 3066 | 'checkuser-check' => 'Periksa', |
2734 | 3067 | 'checkuser-log-fail' => 'Entri log tidak dapat ditambahkan', |
— | — | @@ -2736,17 +3069,20 @@ |
2737 | 3070 | 'checkuser-gblocked' => 'Diblokir secara global', |
2738 | 3071 | 'checkuser-locked' => 'Terkunci', |
2739 | 3072 | 'checkuser-wasblocked' => 'Telah diblokir sebelumnya', |
| 3073 | + 'checkuser-localonly' => 'Tidak digabungkan', |
2740 | 3074 | 'checkuser-massblock' => 'Blokir pengguna yang dipilih', |
2741 | 3075 | 'checkuser-massblock-text' => 'Akun-akun yang dipilih akan diblokir selamanya, alamat-alamat IP terakhir yang digunakan otomatis diblokir dan tidak diperbolehkan membuat akun. |
2742 | 3076 | Alamat-alamat IP akan diblokir selama 1 minggu untuk pengguna anonim dan tidak diperbolehkan membuat akun.', |
2743 | 3077 | 'checkuser-blocktag' => 'Ganti halaman pengguna dengan:', |
| 3078 | + 'checkuser-blocktag-talk' => 'Ganti halaman pembicaraan dengan:', |
2744 | 3079 | 'checkuser-massblock-commit' => 'Blokir pengguna yang dipilih', |
2745 | 3080 | 'checkuser-block-success' => "'''{{PLURAL:$2|Pengguna|Pengguna}} $1 berhasil diblokir.'''", |
2746 | 3081 | 'checkuser-block-failure' => "'''Tidak ada pengguna yang diblokir.'''", |
2747 | 3082 | 'checkuser-block-limit' => 'Jumlah pengguna yang dipilih terlalu banyak.', |
2748 | 3083 | 'checkuser-block-noreason' => 'Anda harus mengisi alasan pemblokiran.', |
| 3084 | + 'checkuser-noreason' => 'Anda harus memberikan alasan untuk kueri ini.', |
2749 | 3085 | 'checkuser-accounts' => '$1 {{PLURAL:$1|akun|akun-akun}} baru', |
2750 | | - 'checkuser-too-many' => 'Terlalu banyak hasil pencarian, mohon persempit CIDR. Berikut adalah alamat-alamat IP yang digunakan (5000 maks, diurut berdasarkan alamat):', |
| 3086 | + 'checkuser-too-many' => 'Terlalu banyak hasil pencarian (menurut perkiraan permintaan), mohon persempit CIDR. Berikut adalah alamat-alamat IP yang digunakan (5000 maks, diurut berdasarkan alamat):', |
2751 | 3087 | 'checkuser-user-nonexistent' => 'Pengguna tidak eksis', |
2752 | 3088 | 'checkuser-search-form' => 'Cari catatan log dimana $1 adalah $2', |
2753 | 3089 | 'checkuser-search-submit' => 'Cari', |
— | — | @@ -2763,7 +3099,7 @@ |
2764 | 3100 | 'checkuser-log-ipusers-xff' => '$1 melihat nama pengguna dari XFF $2', |
2765 | 3101 | 'checkuser-log-useredits' => '$1 memiliki suntingan-suntingan untuk $2', |
2766 | 3102 | 'checkuser-autocreate-action' => 'dibuat secara otomatis', |
2767 | | - 'checkuser-email-action' => 'mengirimkan surat-e ke "$1"', |
| 3103 | + 'checkuser-email-action' => 'mengirimkan surel ke "$1"', |
2768 | 3104 | 'checkuser-reset-action' => 'Set ulang kata sandi pengguna "$1"', |
2769 | 3105 | ); |
2770 | 3106 | |
— | — | @@ -2772,7 +3108,12 @@ |
2773 | 3109 | */ |
2774 | 3110 | $messages['io'] = array( |
2775 | 3111 | 'checkuser-reason' => 'Motivo:', |
| 3112 | + 'checkuser-target' => 'Uzanto od IP', |
| 3113 | + 'checkuser-week-1' => 'lasta semano', |
| 3114 | + 'checkuser-week-2' => 'lasta du semani', |
| 3115 | + 'checkuser-month' => 'lasta 30 dii', |
2776 | 3116 | 'checkuser-all' => 'omna', |
| 3117 | + 'checkuser-cidr-res' => 'Komuna CIDR:', |
2777 | 3118 | 'checkuser-accounts' => '$1 nova {{PLURAL:$1|konto|konti}}', |
2778 | 3119 | 'checkuser-search-submit' => 'Serchar', |
2779 | 3120 | 'checkuser-ipeditcount' => '~$1 di omna uzanti', |
— | — | @@ -2865,8 +3206,10 @@ |
2866 | 3207 | 'checkuser-block-failure' => "'''Nessun utente bloccato.'''", |
2867 | 3208 | 'checkuser-block-limit' => 'Troppi utenti selezionati.', |
2868 | 3209 | 'checkuser-block-noreason' => 'È obbligatorio fornire una motivazione per i blocchi.', |
| 3210 | + 'checkuser-noreason' => 'È necessario fornire una motivazione per questa query.', |
2869 | 3211 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nuovo|nuovi}} account', |
2870 | | - 'checkuser-too-many' => 'Il numero di risultati è eccessivo, usare un CIDR più ristretto. Di seguito sono indicati gli indirizzi IP utilizzati (fino a un massimo di 5000, ordinati per indirizzo):', |
| 3212 | + 'checkuser-too-many' => 'Troppi risultati (per la query), usa un CIDR più ristretto. |
| 3213 | +Di seguito sono indicati gli indirizzi IP utilizzati (fino a un massimo di 5000, ordinati per indirizzo):', |
2871 | 3214 | 'checkuser-user-nonexistent' => "L'utente indicato non esiste.", |
2872 | 3215 | 'checkuser-search-form' => 'Trova le voci del log per le quali $1 è $2', |
2873 | 3216 | 'checkuser-search-submit' => 'Ricerca', |
— | — | @@ -2901,27 +3244,27 @@ |
2902 | 3245 | */ |
2903 | 3246 | $messages['ja'] = array( |
2904 | 3247 | 'checkuser-summary' => 'このツールは最近の更新から行った調査を元に、ある利用者が使用したIPアドレスの検索、または、あるIPアドレスからなされた編集および利用者名の表示を行います。 |
2905 | | -IPアドレスと共に「/xff」オプションを指定すると、XFF(X-Forwarded-For)ヘッダを通じてクライアントIPアドレスを取得し、そこからなされた編集および利用者名の検索をすることが可能です。 |
2906 | | -IPv4(16から32ビットのCIDR表記)と IPv6(96から128ビットのCIDR表記)をサポートしています。 |
| 3248 | +IPアドレスと共に「/xff」オプションを指定すると、XFF (X-Forwarded-For) ヘッダを通じてクライアントIPアドレスを取得し、そこからなされた編集および利用者名の検索をすることが可能です。 |
| 3249 | +IPv4 (16から32ビットのCIDR表記) と IPv6 (96から128ビットのCIDR表記) をサポートしています。 |
2907 | 3250 | パフォーマンス上の理由により、5000件の編集しか返答出来ません。 |
2908 | | -「チェックユーザーの方針」に従って利用してください。', |
| 3251 | +方針に従って使用してください。', |
2909 | 3252 | 'checkuser-desc' => '特定の権限を付与された利用者に対して、利用者のIPアドレスなどの情報のチェックを可能にする', |
2910 | 3253 | 'checkuser-logcase' => 'ログの検索では大文字と小文字を区別します。', |
2911 | | - 'checkuser' => 'チェックユーザー', |
2912 | | - 'checkuser-contribs' => '利用者またはIPアドレスを調査', |
2913 | | - 'group-checkuser' => 'チェックユーザー', |
2914 | | - 'group-checkuser-member' => 'チェックユーザー', |
2915 | | - 'right-checkuser' => '利用者のIPアドレスやその他の情報を確認する', |
2916 | | - 'right-checkuser-log' => 'チェックユーザー記録を見る', |
2917 | | - 'grouppage-checkuser' => '{{ns:project}}:チェックユーザー', |
| 3254 | + 'checkuser' => '利用者の調査', |
| 3255 | + 'checkuser-contribs' => '利用者かIPの調査', |
| 3256 | + 'group-checkuser' => '利用者調査者', |
| 3257 | + 'group-checkuser-member' => '利用者調査者', |
| 3258 | + 'right-checkuser' => '利用者のIPアドレスやその他の情報を調査する', |
| 3259 | + 'right-checkuser-log' => '利用者調査記録を見る', |
| 3260 | + 'grouppage-checkuser' => '{{ns:project}}:利用者調査者', |
2918 | 3261 | 'checkuser-reason' => '理由:', |
2919 | 3262 | 'checkuser-showlog' => 'ログを閲覧', |
2920 | | - 'checkuser-log' => 'チェックユーザー記録', |
| 3263 | + 'checkuser-log' => '利用者の調査記録', |
2921 | 3264 | 'checkuser-query' => '最近の更新を照会', |
2922 | | - 'checkuser-target' => '利用者名またはIPアドレス', |
2923 | | - 'checkuser-users' => '利用者名を得る', |
| 3265 | + 'checkuser-target' => 'IPアドレスまたは利用者名:', |
| 3266 | + 'checkuser-users' => '利用者名を取得する', |
2924 | 3267 | 'checkuser-edits' => 'IPアドレスからの編集を得る', |
2925 | | - 'checkuser-ips' => 'IPアドレスを得る', |
| 3268 | + 'checkuser-ips' => 'IPアドレスを取得する', |
2926 | 3269 | 'checkuser-account' => 'アカウントの投稿記録を取得する', |
2927 | 3270 | 'checkuser-search' => '検索', |
2928 | 3271 | 'checkuser-period' => '期間:', |
— | — | @@ -2929,7 +3272,7 @@ |
2930 | 3273 | 'checkuser-week-2' => '前2週', |
2931 | 3274 | 'checkuser-month' => '前30日間', |
2932 | 3275 | 'checkuser-all' => 'すべて', |
2933 | | - 'checkuser-cidr-label' => 'IPアドレスのリストから共通レンジと影響するアドレスを見つけ出す', |
| 3276 | + 'checkuser-cidr-label' => 'IPアドレス一覧から共通レンジと影響を受けるアドレスを見つけ出す', |
2934 | 3277 | 'checkuser-cidr-res' => '共通CIDR:', |
2935 | 3278 | 'checkuser-empty' => 'ログ内に項目がありません。', |
2936 | 3279 | 'checkuser-nomatch' => '該当するものはありません。', |
— | — | @@ -2941,27 +3284,28 @@ |
2942 | 3285 | 'checkuser-blocked' => 'ブロック済み', |
2943 | 3286 | 'checkuser-gblocked' => 'グローバルブロックされています', |
2944 | 3287 | 'checkuser-locked' => 'ロックされています', |
2945 | | - 'checkuser-wasblocked' => 'ブロック経験あり', |
| 3288 | + 'checkuser-wasblocked' => '過去にブロックの記録あり', |
2946 | 3289 | 'checkuser-localonly' => '統一されません', |
2947 | 3290 | 'checkuser-massblock' => '選択した利用者をブロックする', |
2948 | 3291 | 'checkuser-massblock-text' => '選択した利用者は無期限ブロックされ、同時に自動ブロックが作動しアカウント作成も禁止されます。IPアドレスはIP利用者向けに1週間ブロックされ、アカウント作成が禁止されます。', |
2949 | 3292 | 'checkuser-blocktag' => '利用者ページを以下で置き換える:', |
2950 | 3293 | 'checkuser-blocktag-talk' => 'ノートページを置換:', |
2951 | 3294 | 'checkuser-massblock-commit' => '選択した利用者をブロックする', |
2952 | | - 'checkuser-block-success' => "'''$2人の利用者 $1 が現在ブロックされています。'''", |
| 3295 | + 'checkuser-block-success' => "'''{{PLURAL:$2|利用者}} $1 は現在ブロック{{PLURAL:$2|されています}}。'''", |
2953 | 3296 | 'checkuser-block-failure' => "'''ブロックされたユーザーはありません。'''", |
2954 | | - 'checkuser-block-limit' => '利用者の選択数が多すぎます。', |
| 3297 | + 'checkuser-block-limit' => '選択した利用者の数が多すぎます。', |
2955 | 3298 | 'checkuser-block-noreason' => 'ブロック理由の記入が必要です。', |
2956 | | - 'checkuser-accounts' => '$1つの新しいアカウント', |
2957 | | - 'checkuser-too-many' => '検索結果が多すぎます、CIDRの指定を小さく絞り込んでください。利用されたIPは以下の通りです(5000件を上限に、アドレス順でソートされています):', |
| 3299 | + 'checkuser-noreason' => 'この照会には理由を与えなければなりません。', |
| 3300 | + 'checkuser-accounts' => '$1つの新しい{{PLURAL:$1|アカウント}}', |
| 3301 | + 'checkuser-too-many' => '(照会を推定したところ)検索結果が多すぎます。CIDRの指定を小さく絞り込んでください。利用されたIPは以下の通りです(5000件を上限に、アドレス順で整列されています):', |
2958 | 3302 | 'checkuser-user-nonexistent' => '指定されたユーザーは存在しません。', |
2959 | 3303 | 'checkuser-search-form' => '$1 が $2 であるログ項目を探す', |
2960 | 3304 | 'checkuser-search-submit' => '検索', |
2961 | | - 'checkuser-search-initiator' => 'チェック実行者', |
2962 | | - 'checkuser-search-target' => 'チェック対象', |
| 3305 | + 'checkuser-search-initiator' => '調査実行者', |
| 3306 | + 'checkuser-search-target' => '調査対象者', |
2963 | 3307 | 'checkuser-ipeditcount' => '全利用者 -$1', |
2964 | 3308 | 'checkuser-log-subpage' => 'ログ', |
2965 | | - 'checkuser-log-return' => 'チェックユーザーのメインフォームへ戻る', |
| 3309 | + 'checkuser-log-return' => '利用者調査のメインフォームへ戻る', |
2966 | 3310 | 'checkuser-limited' => "'''パフォーマンスの都合から結果は省略されています。'''", |
2967 | 3311 | 'checkuser-log-userips' => '$1 は $2 が使用したIPアドレスを取得した', |
2968 | 3312 | 'checkuser-log-ipedits' => '$1 は $2 からなされた編集を取得した', |
— | — | @@ -3070,8 +3414,8 @@ |
3071 | 3415 | 'checkuser-block-limit' => 'Cacahing panganggo sing dipilih kakèhan.', |
3072 | 3416 | 'checkuser-block-noreason' => 'Panjenengan kudu mènèhi alesan pamblokiran', |
3073 | 3417 | 'checkuser-accounts' => '$1 {{PLURAL:$1|akun|akun-akun}} anyar', |
3074 | | - 'checkuser-too-many' => 'Kakèhan pituwas, tulung CIDR diciyutaké. |
3075 | | -Ing ngisor iki kapacak alamat-alamat IP sing dienggo (maks. 5.000, diurutaké adhedhasar alamat):', |
| 3418 | + 'checkuser-too-many' => 'Kakèhan pituwas (miturut estimasi piakonan), tulung CIDR diciyutaké. |
| 3419 | +Ing ngisor iki kapacak alamat-alamat IP sing dianggo (maks. 5.000, diurutaké miturut alamat):', |
3076 | 3420 | 'checkuser-user-nonexistent' => 'Panganggo iki ora ana.', |
3077 | 3421 | 'checkuser-search-form' => 'Temokna cathetan log ing ngendi $1 iku $2', |
3078 | 3422 | 'checkuser-search-submit' => 'Golèk', |
— | — | @@ -3093,14 +3437,34 @@ |
3094 | 3438 | ); |
3095 | 3439 | |
3096 | 3440 | /** Georgian (ქართული) |
| 3441 | + * @author BRUTE |
3097 | 3442 | * @author Malafaya |
| 3443 | + * @author გიორგიმელა |
3098 | 3444 | */ |
3099 | 3445 | $messages['ka'] = array( |
| 3446 | + 'checkuser' => 'ჩეკიუზერი', |
| 3447 | + 'group-checkuser' => 'ჩეკიუზერები', |
3100 | 3448 | 'checkuser-reason' => 'მიზეზი:', |
3101 | 3449 | 'checkuser-search' => 'ძიება', |
| 3450 | + 'checkuser-period' => 'ხანგძლივობა:', |
3102 | 3451 | 'checkuser-all' => 'ყველა', |
| 3452 | + 'checkuser-blocked' => 'დაბლოკილია', |
| 3453 | + 'checkuser-gblocked' => 'გლობალურად ბლოკირებული', |
| 3454 | + 'checkuser-locked' => 'დახურვა', |
| 3455 | + 'checkuser-block-limit' => 'არჩეულია ზედმეტად ბევრი მომხმარებელი.', |
| 3456 | + 'checkuser-block-noreason' => 'თქვენ უნდა მიუთითოთ ბლოკირების მიზეზი.', |
| 3457 | + 'checkuser-noreason' => 'თქვენ უნდა მიუთითოთ მიზეზი ამ შეკითხვისთვის.', |
| 3458 | + 'checkuser-accounts' => '$1 ახალი {{PLURAL:$1|ანგარიში|ანგარიშები}}', |
| 3459 | + 'checkuser-too-many' => 'ძალიან ბევრი რეზულტატი, გთხოვთ შეავიწროოთ CIDR-ი. |
| 3460 | +გამოყენებული IP (მაქსიმუმ 500 სორტირებულია მისამართის თანახმად)', |
3103 | 3461 | 'checkuser-search-submit' => 'ძიება', |
| 3462 | + 'checkuser-search-initiator' => 'ინიციატორი', |
| 3463 | + 'checkuser-search-target' => 'მიზანი', |
| 3464 | + 'checkuser-ipeditcount' => '~$1 ყველა მომხმარებლისგან', |
3104 | 3465 | 'checkuser-log-subpage' => 'ჟურნალი', |
| 3466 | + 'checkuser-log-return' => 'მომხმარებელთა შემოწმების გვერდზე დაბრუნება', |
| 3467 | + 'checkuser-limited' => "'''რეზულტატები შეიკუმშა სერვერზე დამატებითი დატვირთვის არ შექმნის მიზნით.'''", |
| 3468 | + 'checkuser-email-action' => 'გაუგზავნა წერილი მომხმარებელ «$1»-ს', |
3105 | 3469 | ); |
3106 | 3470 | |
3107 | 3471 | /** Kazakh (Arabic script) (قازاقشا (تٴوتە)) */ |
— | — | @@ -3228,11 +3592,13 @@ |
3229 | 3593 | * @author Lovekhmer |
3230 | 3594 | * @author Thearith |
3231 | 3595 | * @author គីមស៊្រុន |
| 3596 | + * @author វ័ណថារិទ្ធ |
3232 | 3597 | */ |
3233 | 3598 | $messages['km'] = array( |
3234 | 3599 | 'checkuser-desc' => 'ផ្ដល់ឱ្យអ្នកប្រើប្រាស់នូវការអនុញ្ញាតសមគួរដើម្បីទទួលបាននូវសមត្ថភាពក្នុងការត្រួតពិនិត្យអាសយដ្ឋាន IP របស់អ្នកប្រើប្រាស់និងព័ត៌មានផ្សេងៗទៀត', |
3235 | 3600 | 'checkuser-logcase' => 'ការស្វែងរកកំណត់ហេតុដោយបែងចែកអក្សរធំ អក្សរតូច។', |
3236 | 3601 | 'checkuser' => 'ត្រួតពិនិត្យអ្នកប្រើប្រាស់', |
| 3602 | + 'checkuser-contribs' => 'ត្រួតពិនិត្យ IP របស់អ្នកប្រើប្រាស់', |
3237 | 3603 | 'group-checkuser' => 'អ្នកត្រួតពិនិត្យអ្នកប្រើប្រាស់', |
3238 | 3604 | 'group-checkuser-member' => 'អ្នកត្រួតពិនិត្យអ្នកប្រើប្រាស់', |
3239 | 3605 | 'right-checkuser' => 'អាសយដ្ឋានIPនិងព័ត៌មានដ៏ទៃទៀតនៃការត្រួតពិនិត្យអ្នកប្រើប្រាស់', |
— | — | @@ -3253,6 +3619,7 @@ |
3254 | 3620 | 'checkuser-month' => '៣០ថ្ងៃមុន', |
3255 | 3621 | 'checkuser-all' => 'ទាំងអស់', |
3256 | 3622 | 'checkuser-empty' => 'មិនមានអ្វីនៅក្នុងកំណត់ហេតុនេះទេ។', |
| 3623 | + 'checkuser-nomatch' => 'មិនមានការគូផ្គងដូចគ្នាត្រូវបានរកឃើញទេ។', |
3257 | 3624 | 'checkuser-check' => 'ត្រួតពិនិត្យ', |
3258 | 3625 | 'checkuser-nolog' => 'ឯកសារកំណត់ហេតុមិនត្រូវបានរកឃើញទេ។', |
3259 | 3626 | 'checkuser-blocked' => 'បានហាមឃាត់', |
— | — | @@ -3278,6 +3645,7 @@ |
3279 | 3646 | 'checkuser-log-return' => 'ត្រឡប់ទៅកាន់បែបបទដើមនៃការត្រួតពិនិត្យអ្នកប្រើប្រាស់', |
3280 | 3647 | 'checkuser-log-userips' => '$1បានទទួល IPs ដែល$2បានប្រើប្រាស់', |
3281 | 3648 | 'checkuser-log-ipedits' => '$1បានទទួលចំនួនកំណែប្រែពី$2', |
| 3649 | + 'checkuser-log-ipedits-xff' => '$1 បានទទួលកំណែប្រែពី XFF $2', |
3282 | 3650 | 'checkuser-log-useredits' => '$1 បានទទួលកំណែប្រែពី $2', |
3283 | 3651 | 'checkuser-autocreate-action' => 'ត្រូវបានបង្កើតដោយស្វ័យប្រវត្តិ', |
3284 | 3652 | 'checkuser-email-action' => 'បានផ្ញើអ៊ីមែលទៅកាន់អ្នកប្រើប្រាស់ "$1"', |
— | — | @@ -3286,9 +3654,11 @@ |
3287 | 3655 | |
3288 | 3656 | /** Kannada (ಕನ್ನಡ) |
3289 | 3657 | * @author HPNadig |
| 3658 | + * @author Nayvik |
3290 | 3659 | */ |
3291 | 3660 | $messages['kn'] = array( |
3292 | 3661 | 'checkuser' => 'ಸದಸ್ಯನನ್ನು ಚೆಕ್ ಮಾಡಿ', |
| 3662 | + 'checkuser-reason' => 'ಕಾರಣ:', |
3293 | 3663 | ); |
3294 | 3664 | |
3295 | 3665 | /** Korean (한국어) |
— | — | @@ -3301,7 +3671,7 @@ |
3302 | 3672 | $messages['ko'] = array( |
3303 | 3673 | 'checkuser-summary' => '이 도구는 특정 사용자가 이용한 IP 또는 특정 IP에 대한 편집/사용자 정보를 조사합니다. |
3304 | 3674 | 클라이언트 IP를 통한 사용자와 편집은 IP 주소 뒤에 "/xff"를 더함으로서 XFF 제공자를 통해 조사할 수 있습니다. IPv4 (CIDR 16-32) 와 IPv6 (CIDR 96-128)을 지원합니다. |
3305 | | -기술적 문제로 최대 5000개의 편집만 보여질 것입니다. |
| 3675 | +성능상의 이유로 최대 5000개의 편집만 보여질 것입니다. |
3306 | 3676 | 이 도구는 정책에 맞게 사용하십시오.', |
3307 | 3677 | 'checkuser-desc' => '사용자의 IP 주소를 포함한 정보를 볼 수 있는 권한을 특정한 사용자에게 준다.', |
3308 | 3678 | 'checkuser-logcase' => '이 기록 검색은 대소문자를 구분합니다.', |
— | — | @@ -3316,7 +3686,7 @@ |
3317 | 3687 | 'checkuser-showlog' => '기록 보기', |
3318 | 3688 | 'checkuser-log' => '체크유저 기록', |
3319 | 3689 | 'checkuser-query' => '쿼리 최근 바뀜', |
3320 | | - 'checkuser-target' => '사용자 혹은 IP', |
| 3690 | + 'checkuser-target' => 'IP 주소 또는 계정 이름:', |
3321 | 3691 | 'checkuser-users' => '특정 IP를 사용한 사용자 확인', |
3322 | 3692 | 'checkuser-edits' => '특정 IP에서의 편집을 확인', |
3323 | 3693 | 'checkuser-ips' => 'IP 주소 확인', |
— | — | @@ -3351,8 +3721,9 @@ |
3352 | 3722 | 'checkuser-block-failure' => "'''차단된 사용자가 없습니다.'''", |
3353 | 3723 | 'checkuser-block-limit' => '너무 많은 사용자를 선택하였습니다.', |
3354 | 3724 | 'checkuser-block-noreason' => '차단하는 이유를 반드시 입력해야 합니다.', |
| 3725 | + 'checkuser-noreason' => '이 명령에 대한 이유를 반드시 제시해야 합니다.', |
3355 | 3726 | 'checkuser-accounts' => '$1개의 새 계정', |
3356 | | - 'checkuser-too-many' => '결과가 너무 많습니다. CIDR 범위를 좁혀 주세요. |
| 3727 | + 'checkuser-too-many' => '쿼리 정보의 결과가 너무 많습니다. CIDR 범위를 좁혀 주세요. |
3357 | 3728 | 다음은 사용되고 있는 IP의 목록입니다 (최대 5000개, 주소별로 정렬됨):', |
3358 | 3729 | 'checkuser-user-nonexistent' => '해당 사용자가 존재하지 않습니다.', |
3359 | 3730 | 'checkuser-search-form' => '$1이 $2인 기록 찾기', |
— | — | @@ -3362,16 +3733,16 @@ |
3363 | 3734 | 'checkuser-ipeditcount' => '모든 사용자로부터 $1개의 편집', |
3364 | 3735 | 'checkuser-log-subpage' => '기록', |
3365 | 3736 | 'checkuser-log-return' => '체크유저 양식으로 돌아가기', |
3366 | | - 'checkuser-limited' => "'''이 결과는 기술적인 이유로 일부분이 제외되었습니다.'''", |
3367 | | - 'checkuser-log-userips' => '$1 은(는) $2 이(가) 사용한 IP 주소를 열람했습니다.', |
3368 | | - 'checkuser-log-ipedits' => '$1 은(는) $2의 편집을 열람했습니다.', |
3369 | | - 'checkuser-log-ipusers' => '$1이(가) $2 IP 주소를 사용한 사용자를 확인하였습니다.', |
3370 | | - 'checkuser-log-ipedits-xff' => '$1이(가) XFF $2 IP 주소에서의 편집을 열람하였습니다.', |
3371 | | - 'checkuser-log-ipusers-xff' => '$1이(가) XFF $2 IP 주소를 사용한 사용자의 목록을 열람하였습니다.', |
3372 | | - 'checkuser-log-useredits' => '$1이(가) $2 사용자의 편집을 열람하였습니다.', |
| 3737 | + 'checkuser-limited' => "'''성능상의 이유로 결과 중 일부만 보여줍니다.'''", |
| 3738 | + 'checkuser-log-userips' => '$1 사용자는 $2 사용자가 사용한 IP 주소를 열람했습니다.', |
| 3739 | + 'checkuser-log-ipedits' => '$1 사용자는 $2의 편집을 열람했습니다.', |
| 3740 | + 'checkuser-log-ipusers' => '$1 사용자가 $2 IP 주소를 사용한 사용자를 확인하였습니다.', |
| 3741 | + 'checkuser-log-ipedits-xff' => '$1 사용자가 XFF $2 IP 주소에서의 편집을 열람하였습니다.', |
| 3742 | + 'checkuser-log-ipusers-xff' => '$1 사용자가 XFF $2 IP 주소를 사용한 사용자의 목록을 열람하였습니다.', |
| 3743 | + 'checkuser-log-useredits' => '$1 사용자가 $2 사용자의 편집을 열람하였습니다.', |
3373 | 3744 | 'checkuser-autocreate-action' => '계정이 자동으로 생성되었습니다.', |
3374 | | - 'checkuser-email-action' => '사용자 "$1"에게 이메일을 보냄', |
3375 | | - 'checkuser-reset-action' => '"$1"의 암호를 변경함', |
| 3745 | + 'checkuser-email-action' => '"$1" 사용자에게 이메일을 보냄', |
| 3746 | + 'checkuser-reset-action' => '"$1" 사용자의 암호를 변경함', |
3376 | 3747 | ); |
3377 | 3748 | |
3378 | 3749 | /** Krio (Krio) |
— | — | @@ -3412,7 +3783,7 @@ |
3413 | 3784 | 'checkuser-showlog' => 'et Logboch aanzeije', |
3414 | 3785 | 'checkuser-log' => 'Logboch fum Metmaacher-Pröfe', |
3415 | 3786 | 'checkuser-query' => 'En de {{LCFIRST:{{int:recentchanges}}}} frore', |
3416 | | - 'checkuser-target' => 'Metmaacher-Name udder IP-Address', |
| 3787 | + 'checkuser-target' => '<code lang="en">IP</code>-Addräß udder Metmaacher-Name:', |
3417 | 3788 | 'checkuser-users' => 'Metmaacher holle!', |
3418 | 3789 | 'checkuser-edits' => 'Änderonge fun dä IP-Address holle!', |
3419 | 3790 | 'checkuser-ips' => 'IP-Addresse holle!', |
— | — | @@ -3448,8 +3819,9 @@ |
3449 | 3820 | 'checkuser-block-failure' => "'''Keine Metmaacher jesperrt.'''", |
3450 | 3821 | 'checkuser-block-limit' => 'Zoo fill Metmaacher ußjesoht.', |
3451 | 3822 | 'checkuser-block-noreason' => 'Do moß ävver ene Jrund för et Sperre aanjevve.', |
| 3823 | + 'checkuser-noreason' => 'Do moß ene Jrond för hee di Froch aanjävve.', |
3452 | 3824 | 'checkuser-accounts' => '{{PLURAL:$1|Eine|$1|Keine}} neue Metmaacher', |
3453 | | - 'checkuser-too-many' => 'Zoo fill jefonge, beß esu joot un maach dä CIDR kleijner. |
| 3825 | + 'checkuser-too-many' => 'Zoo fill jefonge, pä Övverschlaach. Beß esu joot un maach dä CIDR kleijner. |
3454 | 3826 | Hee sin de eetßte 5000 IP-Addresse, zoteeet:', |
3455 | 3827 | 'checkuser-user-nonexistent' => 'Dä Metmaacher jidd_et ja nit.', |
3456 | 3828 | 'checkuser-search-form' => 'Sök noh Enndräsch em Logboch, woh $1 $2 es.', |
— | — | @@ -3471,7 +3843,7 @@ |
3472 | 3844 | 'checkuser-reset-action' => 'Däm Metmaacher „$1“ sing Paßwoot automattesch neu setze', |
3473 | 3845 | ); |
3474 | 3846 | |
3475 | | -/** Kurdish (Latin) (Kurdî / كوردی (Latin)) |
| 3847 | +/** Kurdish (Latin) (Kurdî (Latin)) |
3476 | 3848 | * @author Bangin |
3477 | 3849 | */ |
3478 | 3850 | $messages['ku-latn'] = array( |
— | — | @@ -3489,9 +3861,14 @@ |
3490 | 3862 | ); |
3491 | 3863 | |
3492 | 3864 | /** Luxembourgish (Lëtzebuergesch) |
| 3865 | + * @author Les Meloures |
3493 | 3866 | * @author Robby |
3494 | 3867 | */ |
3495 | 3868 | $messages['lb'] = array( |
| 3869 | + 'checkuser-summary' => "Dës Fonctioun scannt déi rezent Ännerunge fir d'Ip-Adressen, déi vun engem Benotzer benotzt goufen, ze fannen, repektiv d'Ännerunge pro Benotzer fir eng IP. |
| 3870 | +Benotzer an Ännerunge vun enger IP-Adress kënnen och iwwer den XFF header gesicht ginn andeems hannert d'IP-Adress \"/xff\" hannendrugehaange gëtt. IPv4 (CIDR 16-32) an IPv6 (CIDR 96-128) ginn ënnerstëtzt. |
| 3871 | +Net méi wéi 5000 Ännerunge ginn aus Performance-Grënn zréckgeschéckt. |
| 3872 | +Benotzt dës Fonctioun am Aklang mat den Direktiven.", |
3496 | 3873 | 'checkuser-desc' => "Gëtt Benotzer mat den néidege Rechter d'Méiglechkeet d'IP-Adressen esou wéi aner Informatiounen iwwert d'Benotzer z'iwwerpréifen", |
3497 | 3874 | 'checkuser-logcase' => "D'Sich am Logbuch mecht en Ënnerscheed tëschent groussen a klenge Buchstawen.", |
3498 | 3875 | 'checkuser' => 'Benotzer-Check', |
— | — | @@ -3505,7 +3882,7 @@ |
3506 | 3883 | 'checkuser-showlog' => 'Logbuch weisen', |
3507 | 3884 | 'checkuser-log' => 'Lëscht vun de Benotzerkontrollen', |
3508 | 3885 | 'checkuser-query' => 'Rezent Ännerungen offroen', |
3509 | | - 'checkuser-target' => 'Benotzer oder IP-Adress', |
| 3886 | + 'checkuser-target' => 'IP-Adress oder Benotzernumm:', |
3510 | 3887 | 'checkuser-users' => 'Benotzer kréien', |
3511 | 3888 | 'checkuser-edits' => "Weis d'Ännerunge vun der IP-Adress", |
3512 | 3889 | 'checkuser-ips' => 'IP-Adresse kréien/uweisen', |
— | — | @@ -3539,9 +3916,10 @@ |
3540 | 3917 | 'checkuser-block-failure' => "'''Et si keng Benotzer gespaart.'''", |
3541 | 3918 | 'checkuser-block-limit' => 'Zevill Benotzer ugewielt.', |
3542 | 3919 | 'checkuser-block-noreason' => "Dir musst e Grond fir d'Spären uginn.", |
| 3920 | + 'checkuser-noreason' => 'Dir musst e Grond fir dës Ufro uginn.', |
3543 | 3921 | 'checkuser-accounts' => '$1 {{PLURAL:$1|neie Benotzerkont|nei Benotzerkonten}}', |
3544 | | - 'checkuser-too-many' => 'Zevill Resultater, gitt w.e.g. méi e klenge Beräich vun Ip-adresen un. |
3545 | | -Hei sinn déi benotzten IP-Adressen (max 5000, sortéiert no der Adress):', |
| 3922 | + 'checkuser-too-many' => 'Zevill Resultater (am Vergäich zu der Schätzung vun der Ufro), gitt w.e.g. méi e klenge Beräich vum CIDR un. |
| 3923 | +Hei sinn déi benotzten IP-Adressen (max 5000, zortéiert no der Adress):', |
3546 | 3924 | 'checkuser-user-nonexistent' => 'De gesichte Benotzer gëtt et net.', |
3547 | 3925 | 'checkuser-search-form' => 'An de Lëschten fannen, wou den $1 den $2 ass', |
3548 | 3926 | 'checkuser-search-submit' => 'Sichen', |
— | — | @@ -3692,62 +4070,175 @@ |
3693 | 4071 | ); |
3694 | 4072 | |
3695 | 4073 | /** Latvian (Latviešu) |
| 4074 | + * @author Papuass |
3696 | 4075 | * @author Xil |
3697 | 4076 | * @author Yyy |
3698 | 4077 | */ |
3699 | 4078 | $messages['lv'] = array( |
3700 | 4079 | 'checkuser-desc' => 'Atļauj lietotājiem ar attiecīgām pilnvarām pārbaudīt lietotāja IP adresi un citu informāciju.', |
3701 | 4080 | 'checkuser' => 'Pārbaudīt lietotāju', |
3702 | | - 'group-checkuser' => 'Pārbaudīt lietotājus', |
| 4081 | + 'group-checkuser' => 'Pārbaudes lietotāji', |
3703 | 4082 | 'checkuser-reason' => 'Iemesls:', |
3704 | 4083 | 'checkuser-target' => 'Lietotājs vai IP', |
3705 | 4084 | 'checkuser-search' => 'Meklēt', |
3706 | 4085 | 'checkuser-check' => 'Pārbaudīt', |
3707 | 4086 | ); |
3708 | 4087 | |
| 4088 | +/** Malagasy (Malagasy) |
| 4089 | + * @author Jagwar |
| 4090 | + */ |
| 4091 | +$messages['mg'] = array( |
| 4092 | + 'checkuser-nolog' => "Tsy nahitana rakitra tantaran'asa.", |
| 4093 | +); |
| 4094 | + |
3709 | 4095 | /** Eastern Mari (Олык Марий) |
3710 | 4096 | * @author Сай |
3711 | 4097 | */ |
3712 | 4098 | $messages['mhr'] = array( |
3713 | 4099 | 'checkuser-reason' => 'Амал:', |
3714 | 4100 | 'checkuser-search' => 'Кычал', |
| 4101 | + 'checkuser-all' => 'чыла', |
3715 | 4102 | 'checkuser-search-submit' => 'Кычал', |
3716 | 4103 | ); |
3717 | 4104 | |
3718 | 4105 | /** Macedonian (Македонски) |
| 4106 | + * @author Bjankuloski06 |
| 4107 | + * @author Brest |
3719 | 4108 | * @author Misos |
3720 | 4109 | */ |
3721 | 4110 | $messages['mk'] = array( |
| 4111 | + 'checkuser-summary' => 'Оваа алатка врши преглед на скорешни промени за да ги добие IP адресите користени од некој корисник или да ги прикаже податоците за уредувања/корисници за некоја IP адреса. |
| 4112 | +Корисниците и уредувањата од клиентска IP адреса можат да се добијат преку XFF наслови со додавање на „/xff“ на IP адресата. Поддржани се IPv4 (CIDR 16-32) и IPv6 (CIDR 96-128). |
| 4113 | +Ќе се прикажат највеќе 5000 уредувања од функционални причини. |
| 4114 | +Користете го ова во согласност со правилата.', |
| 4115 | + 'checkuser-desc' => 'Доделува право за проверка на кориснички IP адреси и други информации', |
| 4116 | + 'checkuser-logcase' => 'Пребарувањето на дневникот разликува големи и букви.', |
3722 | 4117 | 'checkuser' => 'Провери корисник', |
| 4118 | + 'checkuser-contribs' => 'провери IP адреси на корисникот', |
| 4119 | + 'group-checkuser' => 'Проверувачи', |
| 4120 | + 'group-checkuser-member' => 'Проверувач', |
| 4121 | + 'right-checkuser' => 'Проверување на корисничка IP адреса и други информации', |
| 4122 | + 'right-checkuser-log' => 'Гледање дневник на проверување на корисник', |
| 4123 | + 'grouppage-checkuser' => '{{ns:project}}:Проверувачи', |
| 4124 | + 'checkuser-reason' => 'Причина:', |
| 4125 | + 'checkuser-showlog' => 'Прикажи дневник', |
| 4126 | + 'checkuser-log' => 'Дневник на проверки', |
| 4127 | + 'checkuser-query' => 'Побарај скорешни промени', |
| 4128 | + 'checkuser-target' => 'IP-адреса или корисничко име:', |
| 4129 | + 'checkuser-users' => 'Види корисници', |
| 4130 | + 'checkuser-edits' => 'Види уредувања од оваа IP адреса', |
| 4131 | + 'checkuser-ips' => 'Види IP адреси', |
| 4132 | + 'checkuser-account' => 'Види уредувања на сметката', |
| 4133 | + 'checkuser-search' => 'Пребарај', |
| 4134 | + 'checkuser-period' => 'Траење:', |
| 4135 | + 'checkuser-week-1' => 'последна седмица', |
| 4136 | + 'checkuser-week-2' => 'последни две седмици', |
| 4137 | + 'checkuser-month' => 'последни 30 дена', |
| 4138 | + 'checkuser-all' => 'сите', |
| 4139 | + 'checkuser-cidr-label' => 'Најди заедничка низа и погодени адреси за листа на IP адреси', |
| 4140 | + 'checkuser-cidr-res' => 'Заеднички CIDR:', |
| 4141 | + 'checkuser-empty' => 'Дневникот не содржи записи.', |
| 4142 | + 'checkuser-nomatch' => 'Нема совпаѓања.', |
| 4143 | + 'checkuser-nomatch-edits' => 'Нема совпаѓања. |
| 4144 | +Последното уредување се случило на $1 во $2.', |
| 4145 | + 'checkuser-check' => 'Провери', |
| 4146 | + 'checkuser-log-fail' => 'Не можам да додадам ставка во дневникот', |
| 4147 | + 'checkuser-nolog' => 'Дневникот не е пронајден.', |
| 4148 | + 'checkuser-blocked' => 'Блокиран', |
| 4149 | + 'checkuser-gblocked' => 'Блокиран глобално', |
| 4150 | + 'checkuser-locked' => 'Заклучено', |
| 4151 | + 'checkuser-wasblocked' => 'Претходно блокиран', |
| 4152 | + 'checkuser-localonly' => 'Необединета', |
| 4153 | + 'checkuser-massblock' => 'Блокирај ги избраните корисници', |
| 4154 | + 'checkuser-massblock-text' => 'Избраните сметки ќе бидат трајно блокирани, со овозможено автоблокирање и оневозможено создавање на сметки. |
| 4155 | +IP адресите ќе бидат блокирани 1 недела за само за корисници со IP адреса, и со оневозможено создавање на сметка.', |
| 4156 | + 'checkuser-blocktag' => 'Замени ги корисничките страници со:', |
| 4157 | + 'checkuser-blocktag-talk' => 'Замени ги страниците за разговор со:', |
| 4158 | + 'checkuser-massblock-commit' => 'Блокирај ги избраните корисници', |
| 4159 | + 'checkuser-block-success' => "'''{{PLURAL:$2|Корисникот|Корисниците}} $1 {{PLURAL:$2|е|се}} {{PLURAL:$2|блокиран|блокирани}}.'''", |
| 4160 | + 'checkuser-block-failure' => "'''Никој не е блокиран.'''", |
| 4161 | + 'checkuser-block-limit' => 'Избравте премногу корисници.', |
| 4162 | + 'checkuser-block-noreason' => 'Мора да наведете причина за блокирањата.', |
| 4163 | + 'checkuser-noreason' => 'Мора да наведете причина за ова барање.', |
| 4164 | + 'checkuser-accounts' => '$1 {{PLURAL:$1|нова сметка|нови сметки}}', |
| 4165 | + 'checkuser-too-many' => 'Премногу резултати (според процената на барањето), истенчете го CIDR. |
| 4166 | +Еве ги користените IP-адреси (највеќе 5000, сортирани по адреса):', |
| 4167 | + 'checkuser-user-nonexistent' => 'Назначениот корисник не постои.', |
| 4168 | + 'checkuser-search-form' => 'Пронајди ставки во дневникот каде $1 е $2', |
| 4169 | + 'checkuser-search-submit' => 'Пребарај', |
| 4170 | + 'checkuser-search-initiator' => 'иницијатор', |
| 4171 | + 'checkuser-search-target' => 'цел', |
| 4172 | + 'checkuser-ipeditcount' => '~$1 од сите корисници', |
| 4173 | + 'checkuser-log-subpage' => 'Дневник', |
| 4174 | + 'checkuser-log-return' => 'Врати се на главниот образец за проверување корисници', |
| 4175 | + 'checkuser-limited' => "'''Резултатите се скратени од функционални причини.'''", |
| 4176 | + 'checkuser-log-userips' => '$1 добил(а) IP адреси за $2', |
| 4177 | + 'checkuser-log-ipedits' => '$1 добил(а) уредувања за $2', |
| 4178 | + 'checkuser-log-ipusers' => '$1 добил(а) корисници за $2', |
| 4179 | + 'checkuser-log-ipedits-xff' => '$1 добил(а) уредувања за XFF $2', |
| 4180 | + 'checkuser-log-ipusers-xff' => '$1 добил(а) корисници за XFF $2', |
| 4181 | + 'checkuser-log-useredits' => '$1 добил(а) уредувања за $2', |
| 4182 | + 'checkuser-autocreate-action' => 'беше автоматски создадена', |
| 4183 | + 'checkuser-email-action' => 'му испратил(а) е-пошта на корисникот „$1“', |
| 4184 | + 'checkuser-reset-action' => 'промени лозинка за корисник „$1“', |
3723 | 4185 | ); |
3724 | 4186 | |
3725 | 4187 | /** Malayalam (മലയാളം) |
| 4188 | + * @author Praveenp |
3726 | 4189 | * @author Shijualex |
3727 | 4190 | */ |
3728 | 4191 | $messages['ml'] = array( |
3729 | | - 'checkuser-desc' => 'ഉപയോക്താക്കള് ഉപയോഗിച്ച ഐപി വിലാസവും മറ്റുവിവരങ്ങളും പരിശോധിക്കുവാനുള്ള അവകാശം കൊടുക്കാന് പ്രാപ്തമാക്കുന്നു', |
| 4192 | + 'checkuser-desc' => 'ഉപയോക്താക്കള് ഉപയോഗിച്ച ഐ.പി. വിലാസവും മറ്റുവിവരങ്ങളും പരിശോധിക്കുവാനുള്ള അവകാശം കൊടുക്കാന് പ്രാപ്തമാക്കുന്നു', |
3730 | 4193 | 'checkuser-logcase' => 'പ്രവര്ത്തന രേഖകള്ക്കു വേണ്ടിയുള്ള തിരച്ചില് കേസ് സെന്സിറ്റീവ് ആണ്.', |
3731 | 4194 | 'checkuser' => 'ചെക്ക് യൂസര്', |
| 4195 | + 'checkuser-contribs' => 'ഉപയോക്തൃ ഐ.പി. വിലാസങ്ങൾ പരിശോധിക്കുക', |
3732 | 4196 | 'group-checkuser' => 'ചെക്ക് യൂസര്മാര്', |
3733 | 4197 | 'group-checkuser-member' => 'ചെക്ക് യൂസര്', |
3734 | | - 'right-checkuser' => 'ചെക്ക് യൂസറിന്റെ ഐപി വിലാസവും മറ്റു വിവരങ്ങളും', |
| 4198 | + 'right-checkuser' => 'ചെക്ക് യൂസറിന്റെ ഐ.പി. വിലാസവും മറ്റു വിവരങ്ങളും', |
| 4199 | + 'right-checkuser-log' => 'ചെക്ക്യൂസർ രേഖ കാണുക', |
3735 | 4200 | 'grouppage-checkuser' => '{{ns:project}}:ചെക്ക് യൂസര്', |
3736 | | - 'checkuser-reason' => 'കാരണം', |
| 4201 | + 'checkuser-reason' => 'കാരണം:', |
3737 | 4202 | 'checkuser-showlog' => 'പ്രവര്ത്തനരേഖ കാട്ടുക', |
3738 | 4203 | 'checkuser-log' => 'ചെക്ക് യൂസര് പ്രവര്ത്തനരേഖ', |
3739 | 4204 | 'checkuser-query' => 'പുതിയ മാറ്റങ്ങള്', |
3740 | | - 'checkuser-target' => 'ഉപയോക്താവ് അല്ലെങ്കില് ഐപി', |
| 4205 | + 'checkuser-target' => 'ഐ.പി. വിലാസം അഥവാ ഉപയോക്തൃനാമം:', |
3741 | 4206 | 'checkuser-users' => 'ഉപയോക്താക്കളെ കാട്ടുക', |
3742 | | - 'checkuser-edits' => 'ഐപിയില് നിന്നുള്ള തിരുത്തലുകള് കാട്ടുക', |
3743 | | - 'checkuser-ips' => 'ഐപികളെ കാട്ടുക', |
| 4207 | + 'checkuser-edits' => 'ഐ.പി.യില് നിന്നുള്ള തിരുത്തലുകള് കാട്ടുക', |
| 4208 | + 'checkuser-ips' => 'ഐ.പി.കളെ കാട്ടുക', |
| 4209 | + 'checkuser-account' => 'അംഗത്വത്തിന്റെ തിരുത്തലുകൾ എടുക്കുക', |
3744 | 4210 | 'checkuser-search' => 'തിരയൂ', |
| 4211 | + 'checkuser-period' => 'കാലയളവ്:', |
| 4212 | + 'checkuser-week-1' => 'കഴിഞ്ഞ ആഴ്ച്ച', |
| 4213 | + 'checkuser-week-2' => 'കഴിഞ്ഞ രണ്ട് ആഴ്ച്ച', |
| 4214 | + 'checkuser-month' => 'കഴിഞ്ഞ 30 ദിവസം', |
| 4215 | + 'checkuser-all' => 'എല്ലാം', |
| 4216 | + 'checkuser-cidr-label' => 'ഐ.പി. വിലാസങ്ങളുടെ പട്ടികയിൽ നിന്നും ബാധകമായ ഐ.പി. വിലാസങ്ങളുടെ സാധാരണ പരിധി കണ്ടെത്തുക', |
| 4217 | + 'checkuser-cidr-res' => 'സാധാരണ CIDR:', |
3745 | 4218 | 'checkuser-empty' => 'പ്രവര്ത്തനരേഖയില് ഇനങ്ങള് ഒന്നുമില്ല', |
3746 | 4219 | 'checkuser-nomatch' => 'ചേര്ച്ചയുള്ളതൊന്നും കണ്ടില്ല', |
| 4220 | + 'checkuser-nomatch-edits' => 'ഒത്തുപോകുന്നവ കണ്ടെത്താനായില്ല. |
| 4221 | +അവസാന തിരുത്തൽ $2 $1-നു ആണ് നടന്നത്.', |
3747 | 4222 | 'checkuser-check' => 'പരിശോധിക്കുക', |
3748 | 4223 | 'checkuser-log-fail' => 'പ്രവര്ത്തനരേഖയില് ഇനം ചേര്ക്കുന്നതിനു കഴിഞ്ഞില്ല', |
3749 | 4224 | 'checkuser-nolog' => 'പ്രവര്ത്തനരേഖ പ്രമാണം കണ്ടില്ല.', |
3750 | 4225 | 'checkuser-blocked' => 'തടയപ്പെട്ടിരിക്കുന്നു', |
3751 | | - 'checkuser-too-many' => 'വളരെയധികം ഫലങ്ങള്. CIDR ചുരുക്കുക. |
| 4226 | + 'checkuser-gblocked' => 'ആഗോളമായി തടയപ്പെട്ടിരിക്കുന്നു', |
| 4227 | + 'checkuser-locked' => 'പൂട്ടിയിരിക്കുന്നു', |
| 4228 | + 'checkuser-wasblocked' => 'മുമ്പേ തടയപ്പെട്ടിരിക്കുന്നു', |
| 4229 | + 'checkuser-localonly' => 'സംയോജിതമാക്കപ്പെട്ടിട്ടില്ല', |
| 4230 | + 'checkuser-massblock' => 'തിരഞ്ഞെടുത്ത ഉപയോക്താക്കളെ തടയുക', |
| 4231 | + 'checkuser-massblock-text' => 'സ്വയം തടയൽ ബാധകമായും അംഗത്വ സൃഷ്ടി സാധ്യമല്ലാതെയും തിരഞ്ഞെടുത്ത അംഗത്വങ്ങൾ ക്ലിപ്തമല്ലാത്ത കാലത്തേയ്ക്ക് തടഞ്ഞിരിക്കുന്നു. |
| 4232 | +ഐ.പി. വിലാസങ്ങൾ അംഗത്വ സൃഷ്ടി സാധ്യമല്ലാത്ത വിധത്തിൽ ഐ.പി. ഉപയോക്താക്കളെ ഒരു ആഴ്ചത്തേയ്ക്ക് തടഞ്ഞിരിക്കുന്നു.', |
| 4233 | + 'checkuser-blocktag' => 'ഉപയോക്തൃതാളുകൾ ഇതുകൊണ്ട് മാറ്റുക:', |
| 4234 | + 'checkuser-blocktag-talk' => 'സംവാദം താളുകൾ ഇതുകൊണ്ട് മാറ്റുക:', |
| 4235 | + 'checkuser-massblock-commit' => 'തിരഞ്ഞെടുത്ത ഉപയോക്താക്കളെ തടയുക', |
| 4236 | + 'checkuser-block-success' => "'''$1 {{PLURAL:$2|ഉപയോക്താവ്|ഉപയോക്താക്കൾ}} ഇപ്പോൾ തടയപ്പെട്ടിരിക്കുന്നു'''", |
| 4237 | + 'checkuser-block-failure' => "'''ഒരു ഉപയോക്താവും തടയപ്പെട്ടില്ല.'''", |
| 4238 | + 'checkuser-block-limit' => 'നിരവധി ഉപയോക്താക്കളെ തിരഞ്ഞെടുത്തിരിക്കുന്നു.', |
| 4239 | + 'checkuser-block-noreason' => 'തടയലിനു ഒരു കാരണം താങ്കൾ നൽകുക.', |
| 4240 | + 'checkuser-noreason' => 'ഈ ചോദ്യത്തിനു താങ്കൾ നിർബന്ധമായും കാരണം നൽകേണ്ടതാണ്.', |
| 4241 | + 'checkuser-accounts' => 'പുതിയ {{PLURAL:$1|അംഗത്വം|$1അംഗത്വങ്ങൾ}}', |
| 4242 | + 'checkuser-too-many' => 'വളരെയധികം ഫലങ്ങള് (ലഭിച്ച ക്വറി അനുസരിച്ച്). CIDR ചുരുക്കുക. |
3752 | 4243 | ഉപയോഗിച്ച IPകള് താഴെ പ്രദര്ശിപ്പിച്ചിരിക്കുന്നു (പരമാവധി 5000, വിലാസം അനുസരിച്ച് ക്രമീകരിച്ചത്):', |
3753 | 4244 | 'checkuser-user-nonexistent' => 'ഇങ്ങനൊരു ഉപയോക്താവ് വിക്കിയില് നിലവിലില്ല.', |
3754 | 4245 | 'checkuser-search-form' => '$1, $2 ആയ പ്രവര്ത്തനരേഖാ ഇനങ്ങള് കണ്ടെത്തുന്നു', |
— | — | @@ -3757,13 +4248,28 @@ |
3758 | 4249 | 'checkuser-ipeditcount' => '~$1എല്ലാ ഉപയോക്താക്കളില് നിന്നും', |
3759 | 4250 | 'checkuser-log-subpage' => 'പ്രവര്ത്തനരേഖ', |
3760 | 4251 | 'checkuser-log-return' => 'ചെക്ക് യൂസറിന്റെ പ്രധാന ഫോമിലേക്ക് തിരിച്ചു പോവുക', |
3761 | | - 'checkuser-log-userips' => '$1നു $2ല് ഐപികള് ഉണ്ട്', |
| 4252 | + 'checkuser-limited' => "'''പ്രവർത്തന മികവു സംബന്ധിച്ച പ്രശ്നങ്ങളാൽ ഫലങ്ങൾ വെട്ടിച്ചുരുക്കിയിരിക്കുന്നു.'''", |
| 4253 | + 'checkuser-log-userips' => '$1നു $2ല് ഐ.പി.കള് ഉണ്ട്', |
3762 | 4254 | 'checkuser-log-ipedits' => '$1നു $2ല് തിരുത്തലുകള് ഉണ്ട്', |
3763 | 4255 | 'checkuser-log-ipusers' => '$1നു $2ല് ഉപയോക്താക്കള് ഉണ്ട്', |
3764 | 4256 | 'checkuser-log-ipedits-xff' => '$1നു XFF $2ല് തിരുത്തലുകള് ഉണ്ട്', |
3765 | 4257 | 'checkuser-log-ipusers-xff' => '$1നു XFF $2ല് ഉപയോക്താക്കള് ഉണ്ട്', |
| 4258 | + 'checkuser-log-useredits' => '$2 നടത്തിയ തിരുത്തലുകൾ $1 പിടിച്ചിരിക്കുന്നു', |
| 4259 | + 'checkuser-autocreate-action' => 'സ്വയം സൃഷ്ടിച്ചതാണ്', |
| 4260 | + 'checkuser-email-action' => '"$1" എന്ന ഉപയോക്താവിന് ഇമെയിൽ അയച്ചുകഴിഞ്ഞു', |
| 4261 | + 'checkuser-reset-action' => '"$1" എന്ന ഉപയോക്താവിന്റെ രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കുക', |
3766 | 4262 | ); |
3767 | 4263 | |
| 4264 | +/** Mongolian (Монгол) |
| 4265 | + * @author Chinneeb |
| 4266 | + */ |
| 4267 | +$messages['mn'] = array( |
| 4268 | + 'checkuser' => 'Хэрэглэгчийг шалгах', |
| 4269 | + 'checkuser-search' => 'Хайх', |
| 4270 | + 'checkuser-blocked' => 'Түгжигдсэн', |
| 4271 | + 'checkuser-search-submit' => 'Хайх', |
| 4272 | +); |
| 4273 | + |
3768 | 4274 | /** Marathi (मराठी) |
3769 | 4275 | * @author Kaustubh |
3770 | 4276 | * @author Mahitgar |
— | — | @@ -3886,6 +4392,13 @@ |
3887 | 4393 | 'checkuser-reset-action' => 'set semula kata laluan "$1"', |
3888 | 4394 | ); |
3889 | 4395 | |
| 4396 | +/** Maltese (Malti) |
| 4397 | + * @author Chrisportelli |
| 4398 | + */ |
| 4399 | +$messages['mt'] = array( |
| 4400 | + 'group-checkuser-member' => 'Kontrollatur', |
| 4401 | +); |
| 4402 | + |
3890 | 4403 | /** Erzya (Эрзянь) |
3891 | 4404 | * @author Amdf |
3892 | 4405 | * @author Botuzhaleny-sodamo |
— | — | @@ -3893,12 +4406,16 @@ |
3894 | 4407 | */ |
3895 | 4408 | $messages['myv'] = array( |
3896 | 4409 | 'checkuser-reason' => 'Тувталось:', |
| 4410 | + 'checkuser-showlog' => 'Невтемс журналонзо', |
3897 | 4411 | 'checkuser-target' => 'Совиця эли IP', |
3898 | 4412 | 'checkuser-search' => 'Вешнэмс', |
| 4413 | + 'checkuser-period' => 'Зярс моли:', |
3899 | 4414 | 'checkuser-week-1' => 'меельсе тарго', |
3900 | 4415 | 'checkuser-week-2' => 'меельсе кавто таргт', |
3901 | 4416 | 'checkuser-month' => 'меельсе 30 чить', |
3902 | 4417 | 'checkuser-all' => 'весе', |
| 4418 | + 'checkuser-blocked' => 'Саймес саезь', |
| 4419 | + 'checkuser-locked' => 'Сёлгозь', |
3903 | 4420 | 'checkuser-search-submit' => 'Вешнэмс', |
3904 | 4421 | ); |
3905 | 4422 | |
— | — | @@ -3998,12 +4515,36 @@ |
3999 | 4516 | * @author Servien |
4000 | 4517 | */ |
4001 | 4518 | $messages['nds-nl'] = array( |
4002 | | - 'checkuser-summary' => 'Dit hulpmiddel scant de lieste mit de leste wiezigingen um de IP-adressen weerumme te haolen dee gebruuk bin deur een gebruker of een bewarking/gebrukersgegevens weergeven veur een IP-adres. Gebrukers en bewarkingen kunnen weerummehaold wonnen mit een XFF-IP deur "/xff" an \'t IP-adres toe te voegen. IPv4 (CIDR 16-32) en IPv6 (CIDR 96-128) wonnen ondersteund. Neet meer as 5.000 bewarkingen wonnen eteund vanwegen prestasierejens. Gebruuk dit in overeenstemming mit \'t beleid.', |
| 4519 | + 'checkuser-summary' => 'Dit hulpmiddel scant de lieste mit de leste wiezigingen um de IP-adressen weerumme te haolen dee gebruuk bin deur een gebruker of een bewarking/gebrukersgegevens weergeven veur een IP-adres. Gebrukers en bewarkingen kunnen weerummehaold wönnen mit een XFF-IP deur "/xff" an \'t IP-adres toe te voegen. IPv4 (CIDR 16-32) en IPv6 (CIDR 96-128) wönnen ondersteund. Wie laoten neet meer as 5.000 bewarkingen zien vanwegen prestasieredens. Gebruuk dit in overeenstemming mit \'t beleid.', |
| 4520 | + 'checkuser-desc' => 'Laot gebrukers mit de beneudigen rechen IP-adressen en aandere infermasie van gebrukers achterhaolen.', |
| 4521 | + 'checkuser-logcase' => "De zeukfunctie van 't logboek is heuflettergeveulig", |
| 4522 | + 'checkuser' => 'Gebruker naokieken', |
| 4523 | + 'checkuser-reason' => 'Reden:', |
| 4524 | + 'checkuser-showlog' => 'Logboek bekieken', |
| 4525 | + 'checkuser-log' => 'Logboek IP-adrescontreleurs', |
4003 | 4526 | 'checkuser-query' => 'Zeukopdrachte leste wiezigingen', |
| 4527 | + 'checkuser-target' => 'Gebruker of IP-adres', |
| 4528 | + 'checkuser-users' => 'Gebrukers naokieken', |
| 4529 | + 'checkuser-edits' => 'Bewarkingen van IP-adressen naokieken', |
| 4530 | + 'checkuser-ips' => 'IP-adressen naokieken', |
| 4531 | + 'checkuser-search' => 'Zeuken', |
| 4532 | + 'checkuser-empty' => "Der steet gien infermasie in 't logboek.", |
| 4533 | + 'checkuser-nomatch' => 'Gien overeenkomsen evunnen.', |
| 4534 | + 'checkuser-check' => 'Naokieken', |
| 4535 | + 'checkuser-log-fail' => 'Kon gien logboekantekeningen maken', |
| 4536 | + 'checkuser-nolog' => 'Gien logboek evunnen.', |
| 4537 | + 'checkuser-blocked' => 'Eblokkeerd', |
| 4538 | + 'checkuser-too-many' => 'Te veul risseltaoten (volgens de schatting). Maak de IP-reeks kleinder: |
| 4539 | +Hieronder staon de gebruken IP-aderssen (maximaal 5.000, op IP-adres econtreleerd):', |
| 4540 | + 'checkuser-user-nonexistent' => 'De op-egeven gebruker besteet neet.', |
| 4541 | + 'checkuser-search-form' => 'Logboekregels zeuken waor de $1 $2 is', |
| 4542 | + 'checkuser-search-submit' => 'Zeuken', |
| 4543 | + 'checkuser-search-initiator' => 'anvrager', |
| 4544 | + 'checkuser-search-target' => 'onderwarp', |
4004 | 4545 | ); |
4005 | 4546 | |
4006 | 4547 | /** Dutch (Nederlands) |
4007 | | - * @author Erwin85 |
| 4548 | + * @author Erwin |
4008 | 4549 | * @author SPQRobin |
4009 | 4550 | * @author Siebrand |
4010 | 4551 | * @author Troefkaart |
— | — | @@ -4026,7 +4567,7 @@ |
4027 | 4568 | 'checkuser-showlog' => 'Logboek weergeven', |
4028 | 4569 | 'checkuser-log' => 'Logboek controleren gebruikers', |
4029 | 4570 | 'checkuser-query' => 'Bevraag recente wijzigingen', |
4030 | | - 'checkuser-target' => 'Gebruiker of IP-adres', |
| 4571 | + 'checkuser-target' => 'IP-adres of gebruikersnaam:', |
4031 | 4572 | 'checkuser-users' => 'Gebruikers opvragen', |
4032 | 4573 | 'checkuser-edits' => 'Bewerkingen van IP-adres opvragen', |
4033 | 4574 | 'checkuser-ips' => 'IP-adressen opvragen', |
— | — | @@ -4061,8 +4602,10 @@ |
4062 | 4603 | 'checkuser-block-failure' => "'''Geen gebruikers geblokkeerd.'''", |
4063 | 4604 | 'checkuser-block-limit' => 'Te veel gebruikers geselecteerd.', |
4064 | 4605 | 'checkuser-block-noreason' => 'U moet een reden opgeven voor de blokkades.', |
| 4606 | + 'checkuser-noreason' => 'U moet een reden opgeven voor deze zoekopdracht.', |
4065 | 4607 | 'checkuser-accounts' => '$1 nieuwe {{PLURAL:$1|gebruiker|gebruikers}}', |
4066 | | - 'checkuser-too-many' => 'Te veel resultaten. Maak de IP-reeks kleiner:', |
| 4608 | + 'checkuser-too-many' => 'Te veel resultaten (volgens de schatting). Maak de IP-reeks kleiner: |
| 4609 | +Hieronder worden de gebruikte IP-adressen weergegeven (maximaal 5000, op IP-adres gesorteerd):', |
4067 | 4610 | 'checkuser-user-nonexistent' => 'De opgegeven gebruiker bestaat niet.', |
4068 | 4611 | 'checkuser-search-form' => 'Logboekregels zoeken waar de $1 $2 is', |
4069 | 4612 | 'checkuser-search-submit' => 'Zoeken', |
— | — | @@ -4098,6 +4641,7 @@ |
4099 | 4642 | 'checkuser-desc' => 'Gjev brukarar med dei rette rettane moglegheita til å sjekka IP-adressene til og annan informasjon om brukarar.', |
4100 | 4643 | 'checkuser-logcase' => 'Loggsøket tek omsyn til små og store bokstavar.', |
4101 | 4644 | 'checkuser' => 'Brukarsjekk', |
| 4645 | + 'checkuser-contribs' => 'finn brukaren sine IP-adresser', |
4102 | 4646 | 'group-checkuser' => 'Brukarkontrollørar', |
4103 | 4647 | 'group-checkuser-member' => 'Brukarkontrollør', |
4104 | 4648 | 'right-checkuser' => 'Sjekka IP-adressene til brukarar i tillegg til annan informasjon.', |
— | — | @@ -4107,7 +4651,7 @@ |
4108 | 4652 | 'checkuser-showlog' => 'Syn logg', |
4109 | 4653 | 'checkuser-log' => 'Logg over brukarkontrollering', |
4110 | 4654 | 'checkuser-query' => 'Søk i siste endringar', |
4111 | | - 'checkuser-target' => 'Brukar eller IP', |
| 4655 | + 'checkuser-target' => 'Brukar eller IP:', |
4112 | 4656 | 'checkuser-users' => 'Hent brukarar', |
4113 | 4657 | 'checkuser-edits' => 'Hent endringar frå IP', |
4114 | 4658 | 'checkuser-ips' => 'Hent IP-ar', |
— | — | @@ -4142,9 +4686,10 @@ |
4143 | 4687 | 'checkuser-block-failure' => "'''Ingen brukarar blokkerte.'''", |
4144 | 4688 | 'checkuser-block-limit' => 'For mange brukarar er valte.', |
4145 | 4689 | 'checkuser-block-noreason' => 'Du må oppgje ei blokkeringsårsak.', |
| 4690 | + 'checkuser-noreason' => 'Du må gje opp ei grunngjeving for denne spørjinga.', |
4146 | 4691 | 'checkuser-accounts' => '{{PLURAL:$1|Éin ny konto|$1 nye kontoar}}', |
4147 | | - 'checkuser-too-many' => 'For mange resultat, ver venleg og reduser CIDR. |
4148 | | -Her er IP-ene nytta (høgst 5000, sorterte etter adressa):', |
| 4692 | + 'checkuser-too-many' => 'For mange resultat, (i høve til overslag for spørjinga) ver venleg og reduser CIDR. |
| 4693 | +Her er IP-ane nytta (høgst 5000, sorterte etter adressa):', |
4149 | 4694 | 'checkuser-user-nonexistent' => 'Brukarnamnet du oppgav finst ikkje.', |
4150 | 4695 | 'checkuser-search-form' => 'Finn loggelement der $1 er $2', |
4151 | 4696 | 'checkuser-search-submit' => 'Søk', |
— | — | @@ -4169,6 +4714,7 @@ |
4170 | 4715 | * @author Finnrind |
4171 | 4716 | * @author Jon Harald Søby |
4172 | 4717 | * @author Laaknor |
| 4718 | + * @author Nghtwlkr |
4173 | 4719 | */ |
4174 | 4720 | $messages['no'] = array( |
4175 | 4721 | 'checkuser-summary' => 'Dette verktøyet går gjennom siste endringer for å hente IP-ene som er brukt av en bruker, eller viser redigerings- eller brukerinformasjonen for en IP. |
— | — | @@ -4179,6 +4725,7 @@ |
4180 | 4726 | 'checkuser-desc' => 'Gir brukere med de tilhørende rettighetene muligheten til å sjekke brukeres IP-adresser og annen informasjon', |
4181 | 4727 | 'checkuser-logcase' => 'Loggsøket er sensitivt for store/små bokstaver.', |
4182 | 4728 | 'checkuser' => 'Brukersjekk', |
| 4729 | + 'checkuser-contribs' => 'kontrollér brukerens IP-adresser', |
4183 | 4730 | 'group-checkuser' => 'IP-kontrollører', |
4184 | 4731 | 'group-checkuser-member' => 'IP-kontrollør', |
4185 | 4732 | 'right-checkuser' => 'Sjekke brukeres IP-adresser og annen informasjon', |
— | — | @@ -4188,7 +4735,7 @@ |
4189 | 4736 | 'checkuser-showlog' => 'Vis logg', |
4190 | 4737 | 'checkuser-log' => 'Brukersjekkingslogg', |
4191 | 4738 | 'checkuser-query' => 'Søk i siste endringer', |
4192 | | - 'checkuser-target' => 'Bruker eller IP', |
| 4739 | + 'checkuser-target' => 'IP-adresse eller brukernavn:', |
4193 | 4740 | 'checkuser-users' => 'Få brukere', |
4194 | 4741 | 'checkuser-edits' => 'Få redigeringer fra IP', |
4195 | 4742 | 'checkuser-ips' => 'Få IP-er', |
— | — | @@ -4199,6 +4746,7 @@ |
4200 | 4747 | 'checkuser-week-2' => 'siste to uker', |
4201 | 4748 | 'checkuser-month' => 'siste måned', |
4202 | 4749 | 'checkuser-all' => 'alle', |
| 4750 | + 'checkuser-cidr-label' => 'Finn felles adresseområde og påvirkede adresser for en liste over IP-adresser', |
4203 | 4751 | 'checkuser-cidr-res' => 'Felles CIDR:', |
4204 | 4752 | 'checkuser-empty' => 'Loggen inneholder ingen elementer.', |
4205 | 4753 | 'checkuser-nomatch' => 'Ingen treff.', |
— | — | @@ -4222,8 +4770,10 @@ |
4223 | 4771 | 'checkuser-block-failure' => "'''Ingen brukere blokkert.'''", |
4224 | 4772 | 'checkuser-block-limit' => 'For mange brukere valgt.', |
4225 | 4773 | 'checkuser-block-noreason' => 'Du må oppgi en blokkeringsgrunn.', |
| 4774 | + 'checkuser-noreason' => 'Du må oppgi en grunn for denne spørringen.', |
4226 | 4775 | 'checkuser-accounts' => '$1 {{PLURAL:$1|ny konto|nye kontoer}}', |
4227 | | - 'checkuser-too-many' => 'For mange resultater, vennligst innskrenk CIDR. Her er de brukte IP-ene (maks 5000, sortert etter adresse):', |
| 4776 | + 'checkuser-too-many' => 'For mange resultater (ifølge overslag for spørringen), vennligst innskrenk CIDR. |
| 4777 | +Her er de brukte IP-ene (maks 5000, sortert etter adresse):', |
4228 | 4778 | 'checkuser-user-nonexistent' => 'Det gitte brukernavnet finnes ikke.', |
4229 | 4779 | 'checkuser-search-form' => 'Finn loggelementer der $1 er $2', |
4230 | 4780 | 'checkuser-search-submit' => 'Søk', |
— | — | @@ -4268,7 +4818,6 @@ |
4269 | 4819 | |
4270 | 4820 | /** Occitan (Occitan) |
4271 | 4821 | * @author Cedric31 |
4272 | | - * @author IAlex |
4273 | 4822 | */ |
4274 | 4823 | $messages['oc'] = array( |
4275 | 4824 | 'checkuser-summary' => "Aqueste esplech passa en revista los cambiaments recents per recercar l'IPS emplegada per un utilizaire, mostrar totas las edicions fachas per una IP, o per enumerar los utilizaires qu'an emplegat las IPs. Los utilizaires e las modificacions pòdon èsser trobatss amb una IP XFF se s'acaba amb « /xff ». IPv4 (CIDR 16-32) e IPv6(CIDR 96-128) son suportats. Emplegatz aquò segon las cadenas de caractèrs.", |
— | — | @@ -4285,7 +4834,7 @@ |
4286 | 4835 | 'checkuser-showlog' => 'Afichar lo jornal', |
4287 | 4836 | 'checkuser-log' => "Notacion de Verificator d'utilizaire", |
4288 | 4837 | 'checkuser-query' => 'Recèrca pels darrièrs cambiaments', |
4289 | | - 'checkuser-target' => "Nom de l'utilizaire o IP", |
| 4838 | + 'checkuser-target' => "Nom d'utilizaire o adreça IP :", |
4290 | 4839 | 'checkuser-users' => 'Obténer los utilizaires', |
4291 | 4840 | 'checkuser-edits' => "Obténer las modificacions de l'IP", |
4292 | 4841 | 'checkuser-ips' => 'Obténer las adreças IP', |
— | — | @@ -4320,8 +4869,10 @@ |
4321 | 4870 | 'checkuser-block-failure' => "'''Cap d'utilizaire pas blocat.'''", |
4322 | 4871 | 'checkuser-block-limit' => "Tròp d'utilizaires seleccionats.", |
4323 | 4872 | 'checkuser-block-noreason' => 'Vos cal especificar un motiu pels blocatges.', |
| 4873 | + 'checkuser-noreason' => 'Vos cal balhar una rason per aquesta requèsta.', |
4324 | 4874 | 'checkuser-accounts' => '$1 {{PLURAL:$1|compte novèl|comptes novèls}}', |
4325 | | - 'checkuser-too-many' => 'Tròp de resultats. Limitatz la recèrca sus las adreças IP :', |
| 4875 | + 'checkuser-too-many' => "Tròp de resultats (segon l'estimacion de la requèsta), afinatz l’espandida CIDR. |
| 4876 | +Vaquí un extrach de las IP utilizadas ({{formatnum:5000}} maximum, triadas per adreça) :", |
4326 | 4877 | 'checkuser-user-nonexistent' => 'L’utilizaire indicat existís pas', |
4327 | 4878 | 'checkuser-search-form' => 'Cercar lo jornal de las entradas ont $1 es $2.', |
4328 | 4879 | 'checkuser-search-submit' => 'Recercar', |
— | — | @@ -4373,11 +4924,27 @@ |
4374 | 4925 | 'checkuser-search' => 'Manintun', |
4375 | 4926 | ); |
4376 | 4927 | |
| 4928 | +/** Deitsch (Deitsch) |
| 4929 | + * @author Xqt |
| 4930 | + */ |
| 4931 | +$messages['pdc'] = array( |
| 4932 | + 'checkuser-reason' => 'Grund:', |
| 4933 | + 'checkuser-target' => 'IP-Adress odder Yuusernaame:', |
| 4934 | + 'checkuser-search' => 'Uffgucke', |
| 4935 | + 'checkuser-week-1' => 'letscht Woch', |
| 4936 | + 'checkuser-week-2' => 'letschte zwo Woche', |
| 4937 | + 'checkuser-month' => 'letschte 30 Daag', |
| 4938 | + 'checkuser-all' => 'all', |
| 4939 | + 'checkuser-blocked' => 'aabunne', |
| 4940 | + 'checkuser-search-submit' => 'Guck uff', |
| 4941 | +); |
| 4942 | + |
4377 | 4943 | /** Polish (Polski) |
4378 | 4944 | * @author Beau |
4379 | 4945 | * @author Derbeth |
4380 | 4946 | * @author Leinad |
4381 | 4947 | * @author Sp5uhe |
| 4948 | + * @author Wpedzich |
4382 | 4949 | */ |
4383 | 4950 | $messages['pl'] = array( |
4384 | 4951 | 'checkuser-summary' => 'Narzędzie skanuje ostatnie zmiany, by odnaleźć adresy IP użyte przez użytkownika lub by pokazać edycje i użytkowników dla zadanego adresu IP. |
— | — | @@ -4386,7 +4953,7 @@ |
4387 | 4954 | Używaj tego narzędzia zgodnie z zasadami.', |
4388 | 4955 | 'checkuser-desc' => 'Umożliwia uprawnionym użytkownikom sprawdzenie adresów IP użytkowników oraz innych informacji', |
4389 | 4956 | 'checkuser-logcase' => 'Szukanie w rejestrze jest czułe na wielkość znaków.', |
4390 | | - 'checkuser' => 'Sprawdzanie IP użytkownika', |
| 4957 | + 'checkuser' => 'Sprawdź IP użytkownika', |
4391 | 4958 | 'checkuser-contribs' => 'sprawdzić adresy IP użytkownika', |
4392 | 4959 | 'group-checkuser' => 'CheckUser', |
4393 | 4960 | 'group-checkuser-member' => 'checkuser', |
— | — | @@ -4397,7 +4964,7 @@ |
4398 | 4965 | 'checkuser-showlog' => 'Pokaż rejestr', |
4399 | 4966 | 'checkuser-log' => 'Rejestr CheckUser', |
4400 | 4967 | 'checkuser-query' => 'Przeanalizuj ostatnie zmiany', |
4401 | | - 'checkuser-target' => 'Użytkownik lub IP', |
| 4968 | + 'checkuser-target' => 'Adres IP lub nazwa użytkownika', |
4402 | 4969 | 'checkuser-users' => 'Znajdź użytkowników', |
4403 | 4970 | 'checkuser-edits' => 'Znajdź edycje z IP', |
4404 | 4971 | 'checkuser-ips' => 'Znajdź adresy IP', |
— | — | @@ -4432,8 +4999,9 @@ |
4433 | 5000 | 'checkuser-block-failure' => "'''Brak zablokowanych użytkowników.'''", |
4434 | 5001 | 'checkuser-block-limit' => 'Wybrano zbyt wielu użytkowników.', |
4435 | 5002 | 'checkuser-block-noreason' => 'Należy podać powód blokad.', |
| 5003 | + 'checkuser-noreason' => 'Musisz podać powód wykonania zapytania.', |
4436 | 5004 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nowe konto|nowe konta|nowych kont}}', |
4437 | | - 'checkuser-too-many' => 'Zbyt wiele wyników, ogranicz CIDR. |
| 5005 | + 'checkuser-too-many' => 'Zbyt wiele wyników (według szacunku zapytania); ogranicz CIDR. |
4438 | 5006 | Użytych adresów IP jest (nie więcej niż 5000, posortowane według adresu):', |
4439 | 5007 | 'checkuser-user-nonexistent' => 'Taki użytkownik nie istnieje.', |
4440 | 5008 | 'checkuser-search-form' => 'Szukaj wpisów w rejestrze, dla których $1 był $2', |
— | — | @@ -4456,32 +5024,84 @@ |
4457 | 5025 | ); |
4458 | 5026 | |
4459 | 5027 | /** Piedmontese (Piemontèis) |
| 5028 | + * @author Borichèt |
4460 | 5029 | * @author Bèrto 'd Sèra |
| 5030 | + * @author Dragonòt |
4461 | 5031 | */ |
4462 | 5032 | $messages['pms'] = array( |
4463 | 5033 | 'checkuser-summary' => "St'utiss-sì as passa j'ùltime modìfiche për tiré sù j'adrësse IP dovra da n'utent ò pura mostré lòn ch'as fa da n'adrëssa IP e che dat utent ch'a l'abia associà. |
4464 | 5034 | J'utent ch'a dòvro n'adrëssa IP e le modìfiche faite d'ambelelì as peulo tiresse sù ën dovrand le testà XFF, për felo tache-ie dapress l'adrëssa e \"/xff\". A travaja tant con la forma IPv4 (CIDR 16-32) che con cola IPv6 (CIDR 96-128). |
4465 | 5035 | Për na question ëd caria ëd travaj a tira nen sù pì che 5000 modìfiche. A va dovrà comforma a ij deuit për ël process ëd contròl.", |
| 5036 | + 'checkuser-desc' => "A dà a j'utent con ij përmess aproprià la possibilità ëd controlé j'adrësse IP dj'utent e àutre anformassion", |
4466 | 5037 | 'checkuser-logcase' => "L'arsërca ant ël registr a conta ëdcò maiùscole e minùscole.", |
4467 | 5038 | 'checkuser' => "Contròl dj'utent", |
| 5039 | + 'checkuser-contribs' => "contròla l'adrëssa IP ëd l'utent", |
4468 | 5040 | 'group-checkuser' => 'Controlor', |
4469 | 5041 | 'group-checkuser-member' => 'Controlor', |
| 5042 | + 'right-checkuser' => "Contròla l'adrëssa IP ëd l'utent e àutre anformassion", |
| 5043 | + 'right-checkuser-log' => 'Varda ël registr dël controlor', |
4470 | 5044 | 'grouppage-checkuser' => "{{ns:project}}:Contròl dj'utent", |
4471 | | - 'checkuser-reason' => 'Rason', |
| 5045 | + 'checkuser-reason' => 'Rason:', |
4472 | 5046 | 'checkuser-showlog' => 'Smon ël registr', |
4473 | 5047 | 'checkuser-log' => "Registr dël contròl dj'utent", |
4474 | 5048 | 'checkuser-query' => "Anterogassion dj'ùltime modìfiche", |
4475 | | - 'checkuser-target' => 'Stranòm ò adrëssa IP', |
| 5049 | + 'checkuser-target' => 'Adrëssa IP o nòm utent:', |
4476 | 5050 | 'checkuser-users' => "Tira sù j'utent", |
4477 | 5051 | 'checkuser-edits' => 'Tiré sù le modìfiche faite da na midema adrëssa IP', |
4478 | 5052 | 'checkuser-ips' => "Tiré sù j'adrësse IP", |
| 5053 | + 'checkuser-account' => 'Varda le modìfiche dël cont', |
4479 | 5054 | 'checkuser-search' => 'Sërca', |
| 5055 | + 'checkuser-period' => 'Durà:', |
| 5056 | + 'checkuser-week-1' => 'ùltima sman-a', |
| 5057 | + 'checkuser-week-2' => 'ùltime doe sman-e', |
| 5058 | + 'checkuser-month' => 'ùltim 30 di', |
| 5059 | + 'checkuser-all' => 'tut', |
| 5060 | + 'checkuser-cidr-label' => "Treuva n'antërval comun e j'adrësse IP antëressà da na lista d'adrësse IP", |
| 5061 | + 'checkuser-cidr-res' => 'CIDR comun:', |
4480 | 5062 | 'checkuser-empty' => "Ës registr-sì a l'é veujd.", |
4481 | 5063 | 'checkuser-nomatch' => 'A-i é pa gnun-a ròba parej.', |
| 5064 | + 'checkuser-nomatch-edits' => "Gnun arzultà trovà. |
| 5065 | +L'ùltima modìfica a l'era ël $1 a $2.", |
4482 | 5066 | 'checkuser-check' => 'Contròl', |
4483 | 5067 | 'checkuser-log-fail' => 'I-i la fom nen a gionte-ie na riga ant sël registr', |
4484 | 5068 | 'checkuser-nolog' => "Pa gnun registr ch'a sia trovasse.", |
4485 | 5069 | 'checkuser-blocked' => 'Blocà', |
| 5070 | + 'checkuser-gblocked' => 'Blocà globalment', |
| 5071 | + 'checkuser-locked' => 'Sarà', |
| 5072 | + 'checkuser-wasblocked' => 'Blocà già prima', |
| 5073 | + 'checkuser-localonly' => 'Pa unificà', |
| 5074 | + 'checkuser-massblock' => "Blòca j'utent selessionà", |
| 5075 | + 'checkuser-massblock-text' => "Ij cont selessionà a saran blocà për sempe, con blocagi automàtich abilità e creassion ëd cont disabilità. |
| 5076 | +J'adrësse IP a saran blocà për 1 sman-a mach për j'adrësse IP e con creassion ëd cont disabilità.", |
| 5077 | + 'checkuser-blocktag' => 'Rimpiassa le pàgine utent con:', |
| 5078 | + 'checkuser-blocktag-talk' => 'Rimpiassa le pàgine ëd ciaciarada con:', |
| 5079 | + 'checkuser-massblock-commit' => "Blòca j'utent selessionà", |
| 5080 | + 'checkuser-block-success' => "'''{{PLURAL:$2|L'utent|J'utent}} $1 {{PLURAL:$2|a l'é|a son}} adess blocà.'''", |
| 5081 | + 'checkuser-block-failure' => "'''Pa gnun utent blocà.'''", |
| 5082 | + 'checkuser-block-limit' => 'Tròpi utent selessionà.', |
| 5083 | + 'checkuser-block-noreason' => 'It deve dé na rason për ij blocagi.', |
| 5084 | + 'checkuser-noreason' => 'It deve dé na rason për costa arcesta.', |
| 5085 | + 'checkuser-accounts' => '$1 neuv {{PLURAL:$1|cont|cont}}', |
| 5086 | + 'checkuser-too-many' => "Tròpi arzultà (scond la stima dl'arcesta), për piasì strenz ël CIDR. |
| 5087 | +Sì a-i son j'IP dovrà (5000 al pi, ordinà për adrëssa):", |
| 5088 | + 'checkuser-user-nonexistent' => "L'utent specificà a esist pa.", |
| 5089 | + 'checkuser-search-form' => "Treuva j'intrade dël registr andoa $1 a l'é $2", |
| 5090 | + 'checkuser-search-submit' => 'Serca', |
| 5091 | + 'checkuser-search-initiator' => 'inissiador', |
| 5092 | + 'checkuser-search-target' => 'obietiv', |
| 5093 | + 'checkuser-ipeditcount' => "~$1 da tùit j'utent", |
| 5094 | + 'checkuser-log-subpage' => 'Registr', |
| 5095 | + 'checkuser-log-return' => "Torna a la forma prinsipal dël Controlor dj'utent", |
| 5096 | + 'checkuser-limited' => "'''Sti arzultà-sì a son ëstàit troncà për rason ëd prestassion.'''", |
| 5097 | + 'checkuser-log-userips' => "$1 a l'ha pijà j'adrësse IP da $2", |
| 5098 | + 'checkuser-log-ipedits' => "$1 a l'ha pijà le modìfiche për $2", |
| 5099 | + 'checkuser-log-ipusers' => "$1 a l'ha pijà j'utent për $2", |
| 5100 | + 'checkuser-log-ipedits-xff' => "$1 a l'ha pijà le modìfiche për XFF $2", |
| 5101 | + 'checkuser-log-ipusers-xff' => "$1 a l'ha pijà j'utent për XFF $2", |
| 5102 | + 'checkuser-log-useredits' => "$1 a l'ha otnù le modìfiche për $2", |
| 5103 | + 'checkuser-autocreate-action' => "a l'é stàit creà automaticament", |
| 5104 | + 'checkuser-email-action' => 'a l\'ha mandà un mëssagi ëd pòsta eletrònica a l\'utent "$1"', |
| 5105 | + 'checkuser-reset-action' => 'torna amposté la ciav për l\'utent "$1"', |
4486 | 5106 | ); |
4487 | 5107 | |
4488 | 5108 | /** Pashto (پښتو) |
— | — | @@ -4490,25 +5110,36 @@ |
4491 | 5111 | $messages['ps'] = array( |
4492 | 5112 | 'checkuser-reason' => 'سبب:', |
4493 | 5113 | 'checkuser-showlog' => 'يادښت کتل', |
4494 | | - 'checkuser-target' => 'کارونکی يا IP پته', |
| 5114 | + 'checkuser-target' => 'کارن يا IP پته:', |
4495 | 5115 | 'checkuser-search' => 'پلټل', |
4496 | 5116 | 'checkuser-period' => 'موده:', |
| 5117 | + 'checkuser-week-1' => 'تېره اوونۍ', |
| 5118 | + 'checkuser-week-2' => 'تېرې دوه اوونۍ', |
| 5119 | + 'checkuser-month' => 'تېرې ۳۰ ورځې', |
4497 | 5120 | 'checkuser-all' => 'ټول', |
| 5121 | + 'checkuser-block-limit' => 'له حد نه ډېر زيات کارنان ټاکل شوي.', |
| 5122 | + 'checkuser-block-noreason' => 'د بنديز لګولو لپاره بايد تاسې يو سبب څرګند کړی.', |
4498 | 5123 | 'checkuser-search-submit' => 'پلټل', |
4499 | 5124 | 'checkuser-search-target' => 'موخه', |
| 5125 | + 'checkuser-ipeditcount' => '~$1 د ټولو کارنانو نه', |
4500 | 5126 | 'checkuser-log-subpage' => 'يادښت', |
| 5127 | + 'checkuser-email-action' => 'د "$1" کارن ته يو برېښليک ولېږل شو', |
| 5128 | + 'checkuser-reset-action' => 'د "$1" کارن د پټنوم بيا پرځای کول', |
4501 | 5129 | ); |
4502 | 5130 | |
4503 | 5131 | /** Portuguese (Português) |
4504 | 5132 | * @author 555 |
| 5133 | + * @author Hamilton Abreu |
4505 | 5134 | * @author Malafaya |
4506 | 5135 | * @author Sir Lestaty de Lioncourt |
4507 | 5136 | * @author Waldir |
4508 | 5137 | */ |
4509 | 5138 | $messages['pt'] = array( |
4510 | | - 'checkuser-summary' => 'Esta ferramenta varre as Mudanças recentes para obter os endereços de IP de um utilizador ou para exibir os dados de edições/utilizadores para um IP. |
4511 | | - Utilizadores edições podem ser obtidos por um IP XFF colocando-se "/xff" no final do endereço. São suportados endereços IPv4 (CIDR 16-32) e IPv6 (CIDR 96-128). |
4512 | | - Não serão retornadas mais de 5000 edições por motivos de desempenho. O uso desta ferramenta deverá estar de acordo com as políticas.', |
| 5139 | + 'checkuser-summary' => 'Esta ferramenta varre as mudanças recentes para obter os endereços IP de um utilizador ou para apresentar os dados de edições/utilizadores para um determinado IP. |
| 5140 | +Os utilizadores e edições de um determinado IP, podem ser obtidos através de cabeçalhos XFF, acrescentando "/xff" no final do endereço. |
| 5141 | +São suportados endereços IPv4 (CIDR 16-32) e IPv6 (CIDR 96-128). |
| 5142 | +Por motivos de desempenho não serão fornecidas mais do que 5000 edições. |
| 5143 | +O uso desta ferramenta deverá respeitar as normas e recomendações.', |
4513 | 5144 | 'checkuser-desc' => 'Concede a utilizadores com a permissão apropriada a possibilidade de verificar os endereços IP de um utilizador e outra informação', |
4514 | 5145 | 'checkuser-logcase' => 'As buscas nos registos são sensíveis a letras maiúsculas ou minúsculas.', |
4515 | 5146 | 'checkuser' => 'Verificar utilizador', |
— | — | @@ -4516,13 +5147,13 @@ |
4517 | 5148 | 'group-checkuser' => 'CheckUser', |
4518 | 5149 | 'group-checkuser-member' => 'CheckUser', |
4519 | 5150 | 'right-checkuser' => 'Verificar o endereço IP de um utilizador e outras informações', |
4520 | | - 'right-checkuser-log' => 'Ver os registros das verificações', |
| 5151 | + 'right-checkuser-log' => 'Ver o registo das verificações de utilizador', |
4521 | 5152 | 'grouppage-checkuser' => '{{ns:project}}:CheckUser', |
4522 | | - 'checkuser-reason' => 'Motivo', |
4523 | | - 'checkuser-showlog' => 'Exibir registos', |
| 5153 | + 'checkuser-reason' => 'Motivo:', |
| 5154 | + 'checkuser-showlog' => 'Mostrar registos', |
4524 | 5155 | 'checkuser-log' => 'Registos de verificação de utilizadores', |
4525 | 5156 | 'checkuser-query' => 'Examinar as Mudanças recentes', |
4526 | | - 'checkuser-target' => 'Utilizador ou IP', |
| 5157 | + 'checkuser-target' => 'Endereço IP ou nome do utilizador:', |
4527 | 5158 | 'checkuser-users' => 'Obter utilizadores', |
4528 | 5159 | 'checkuser-edits' => 'Obter edições de IPs', |
4529 | 5160 | 'checkuser-ips' => 'Obter IPs', |
— | — | @@ -4541,15 +5172,15 @@ |
4542 | 5173 | A última edição foi em $1 às $2.', |
4543 | 5174 | 'checkuser-check' => 'Verificar', |
4544 | 5175 | 'checkuser-log-fail' => 'Não foi possível adicionar entradas ao registo', |
4545 | | - 'checkuser-nolog' => 'Não foi encontrado um arquivo de registos.', |
| 5176 | + 'checkuser-nolog' => 'Não foi encontrado nenhum ficheiro de registos.', |
4546 | 5177 | 'checkuser-blocked' => 'Bloqueado', |
4547 | 5178 | 'checkuser-gblocked' => 'Bloqueado globalmente', |
4548 | 5179 | 'checkuser-locked' => 'Bloqueado', |
4549 | 5180 | 'checkuser-wasblocked' => 'Previamente bloqueado', |
4550 | 5181 | 'checkuser-localonly' => 'Não unificada', |
4551 | 5182 | 'checkuser-massblock' => 'Bloquear utilizadores seleccionados', |
4552 | | - 'checkuser-massblock-text' => 'As contas selecionadas serão bloqueadas indefinidamente, com bloqueio automático ativado e criação de conta desabilitada. |
4553 | | -Endereços IP serão bloqueados por 1 semana com criação de conta desabilitada.', |
| 5183 | + 'checkuser-massblock-text' => 'As contas seleccionadas serão bloqueadas indefinidamente, com o bloqueio automático activado e a criação de conta impossibilitada. |
| 5184 | +Endereços IP serão bloqueados por 1 semana com a criação de conta impossibilitada.', |
4554 | 5185 | 'checkuser-blocktag' => 'Substituir páginas de utilizador com:', |
4555 | 5186 | 'checkuser-blocktag-talk' => 'Substituir páginas de discussão por:', |
4556 | 5187 | 'checkuser-massblock-commit' => 'Bloquear utilizadores seleccionados', |
— | — | @@ -4557,8 +5188,10 @@ |
4558 | 5189 | 'checkuser-block-failure' => "'''Nenhum utilizador bloqueado.'''", |
4559 | 5190 | 'checkuser-block-limit' => 'Demasiados utilizadores selecionados.', |
4560 | 5191 | 'checkuser-block-noreason' => 'Tem de especificar um motivo para os bloqueios.', |
| 5192 | + 'checkuser-noreason' => 'Deverá fornecer um motivo para esta pesquisa.', |
4561 | 5193 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nova conta|novas contas}}', |
4562 | | - 'checkuser-too-many' => 'Demasiados resultados; por favor, restrinja o CIDR. Aqui estão os IPs usados (5000 no máx., ordenados por endereço):', |
| 5194 | + 'checkuser-too-many' => 'Há demasiados resultados (segundo estimativa de pesquisa); por favor, restrinja o CIDR. |
| 5195 | +Aqui estão os IPs usados (5000 no máx., ordenados por endereço):', |
4563 | 5196 | 'checkuser-user-nonexistent' => 'O utilizador especificado não existe.', |
4564 | 5197 | 'checkuser-search-form' => 'Procurar entradas no registo onde $1 seja $2', |
4565 | 5198 | 'checkuser-search-submit' => 'Procurar', |
— | — | @@ -4574,33 +5207,36 @@ |
4575 | 5208 | 'checkuser-log-ipedits-xff' => '$1 obteve edições para o XFF $2', |
4576 | 5209 | 'checkuser-log-ipusers-xff' => '$1 obteve utilizadores para o XFF $2', |
4577 | 5210 | 'checkuser-log-useredits' => '$1 obteve edições de $2', |
4578 | | - 'checkuser-autocreate-action' => 'foi automaticamente criada', |
4579 | | - 'checkuser-email-action' => 'Enviar email para o utilizador "$1"', |
4580 | | - 'checkuser-reset-action' => 'suprimir a senha do utilizador "$1"', |
| 5211 | + 'checkuser-autocreate-action' => 'foi criada automaticamente', |
| 5212 | + 'checkuser-email-action' => 'correio electrónico enviado para o utilizador "$1"', |
| 5213 | + 'checkuser-reset-action' => 'foi reiniciada a palavra-chave do utilizador "$1"', |
4581 | 5214 | ); |
4582 | 5215 | |
4583 | 5216 | /** Brazilian Portuguese (Português do Brasil) |
4584 | 5217 | * @author Eduardo.mps |
| 5218 | + * @author Heldergeovane |
| 5219 | + * @author Jesielt |
| 5220 | + * @author Luckas Blade |
4585 | 5221 | */ |
4586 | 5222 | $messages['pt-br'] = array( |
4587 | | - 'checkuser-summary' => 'Esta ferramenta varre as Mudanças recentes para obter os endereços de IP de um utilizador ou para exibir os dados de edições/utilizadores para um IP. |
4588 | | -Utilizadores e edições podem ser obtidos por um IP XFF colocando-se "/xff" no final do endereço. São suportados endereços IPv4 (CIDR 16-32) e IPv6 (CIDR 96-128). |
| 5223 | + 'checkuser-summary' => 'Esta ferramenta varre as Mudanças recentes para obter os endereços de IP de um usuário ou para exibir os dados de edições/usuários para um IP. |
| 5224 | +Usuários e edições podem ser obtidos por um IP XFF colocando-se "/xff" no final do endereço. São suportados endereços IPv4 (CIDR 16-32) e IPv6 (CIDR 96-128). |
4589 | 5225 | Não serão retornadas mais de 5000 edições por motivos de desempenho. O uso desta ferramenta deverá estar de acordo com as políticas.', |
4590 | | - 'checkuser-desc' => 'Concede a utilizadores com a permissão apropriada a possibilidade de verificar os endereços IP de um utilizador e outras informações', |
| 5226 | + 'checkuser-desc' => 'Concede a usuários com a permissão apropriada a possibilidade de verificar os endereços IP de um usuário e outras informações', |
4591 | 5227 | 'checkuser-logcase' => 'As buscas nos registros são sensíveis a letras maiúsculas ou minúsculas.', |
4592 | | - 'checkuser' => 'Verificar utilizador', |
4593 | | - 'checkuser-contribs' => 'Verificar IPs do utilizador', |
| 5228 | + 'checkuser' => 'Verificar usuário', |
| 5229 | + 'checkuser-contribs' => 'Verificar IPs do usuário', |
4594 | 5230 | 'group-checkuser' => 'CheckUser', |
4595 | 5231 | 'group-checkuser-member' => 'CheckUser', |
4596 | | - 'right-checkuser' => 'Verificar o endereço IP de um utilizador e outras informações', |
| 5232 | + 'right-checkuser' => 'Verificar os endereços de IP de um usuários e outras informações', |
4597 | 5233 | 'right-checkuser-log' => 'Ver os registros das verificações', |
4598 | 5234 | 'grouppage-checkuser' => '{{ns:project}}:CheckUser', |
4599 | 5235 | 'checkuser-reason' => 'Motivo', |
4600 | 5236 | 'checkuser-showlog' => 'Exibir registros', |
4601 | | - 'checkuser-log' => 'Registros de verificação de utilizadores', |
| 5237 | + 'checkuser-log' => 'Registros de verificação de usuários', |
4602 | 5238 | 'checkuser-query' => 'Examinar as Mudanças recentes', |
4603 | | - 'checkuser-target' => 'Utilizador ou IP', |
4604 | | - 'checkuser-users' => 'Obter utilizadores', |
| 5239 | + 'checkuser-target' => 'Endereço IP ou nome do usuário:', |
| 5240 | + 'checkuser-users' => 'Obter usuários', |
4605 | 5241 | 'checkuser-edits' => 'Obter edições de IPs', |
4606 | 5242 | 'checkuser-ips' => 'Obter IPs', |
4607 | 5243 | 'checkuser-account' => 'Obter edições desta conta', |
— | — | @@ -4624,36 +5260,37 @@ |
4625 | 5261 | 'checkuser-locked' => 'Bloqueado', |
4626 | 5262 | 'checkuser-wasblocked' => 'Previamente bloqueado', |
4627 | 5263 | 'checkuser-localonly' => 'Não unificada', |
4628 | | - 'checkuser-massblock' => 'Bloquear utilizadores selecionados', |
| 5264 | + 'checkuser-massblock' => 'Bloquear usuários selecionados', |
4629 | 5265 | 'checkuser-massblock-text' => 'As contas selecionadas serão bloqueadas indefinidamente, com bloqueio automático ativado e criação de conta desabilitada. |
4630 | 5266 | Endereços IP serão bloqueados por 1 semana com criação de conta desabilitada.', |
4631 | | - 'checkuser-blocktag' => 'Substituir páginas de utilizador com:', |
| 5267 | + 'checkuser-blocktag' => 'Substituir páginas de usuário com:', |
4632 | 5268 | 'checkuser-blocktag-talk' => 'Substituir páginas de discussão por:', |
4633 | | - 'checkuser-massblock-commit' => 'Bloquear utilizadores selecionados', |
4634 | | - 'checkuser-block-success' => "'''{{PLURAL:$2|O utilizador|Os utilizadores}} $1 {{PLURAL:$2|está|estão}} agora {{PLURAL:$2|bloqueado|bloqueados}}.'''", |
4635 | | - 'checkuser-block-failure' => "'''Nenhum utilizador bloqueado.'''", |
4636 | | - 'checkuser-block-limit' => 'Demasiados utilizadores selecionados.', |
| 5269 | + 'checkuser-massblock-commit' => 'Bloquear usuários selecionados', |
| 5270 | + 'checkuser-block-success' => "'''{{PLURAL:$2|O usuário|Os usuários}} $1 {{PLURAL:$2|está|estão}} agora {{PLURAL:$2|bloqueado|bloqueados}}.'''", |
| 5271 | + 'checkuser-block-failure' => "'''Nenhum usuário bloqueado.'''", |
| 5272 | + 'checkuser-block-limit' => 'Muitos usuários selecionados.', |
4637 | 5273 | 'checkuser-block-noreason' => 'Você deve especificar um motivo para os bloqueios.', |
| 5274 | + 'checkuser-noreason' => 'Você deve fornecer um motivo para esta pesquisa.', |
4638 | 5275 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nova conta|novas contas}}', |
4639 | | - 'checkuser-too-many' => 'Demasiados resultados; por favor, restrinja o CIDR. Aqui estão os IPs usados (5000 no máx., ordenados por endereço):', |
4640 | | - 'checkuser-user-nonexistent' => 'O utilizador especificado não existe.', |
| 5276 | + 'checkuser-too-many' => 'Há muitos resultados; por favor, restrinja o CIDR. Aqui estão os IPs usados (5000 no máx., ordenados por endereço):', |
| 5277 | + 'checkuser-user-nonexistent' => 'O usuário especificado não existe.', |
4641 | 5278 | 'checkuser-search-form' => 'Procurar entradas no registo onde $1 seja $2', |
4642 | 5279 | 'checkuser-search-submit' => 'Procurar', |
4643 | 5280 | 'checkuser-search-initiator' => 'iniciador', |
4644 | 5281 | 'checkuser-search-target' => 'alvo', |
4645 | | - 'checkuser-ipeditcount' => '~$1 de todos os utilizadores', |
| 5282 | + 'checkuser-ipeditcount' => '~$1 de todos os usuários', |
4646 | 5283 | 'checkuser-log-subpage' => 'Registro', |
4647 | 5284 | 'checkuser-log-return' => 'Retornar ao formulário principal de CheckUser', |
4648 | 5285 | 'checkuser-limited' => "'''Estes resultados foram removidos por motivos de performance.'''", |
4649 | 5286 | 'checkuser-log-userips' => '$1 obteve IPs de $2', |
4650 | 5287 | 'checkuser-log-ipedits' => '$1 obteve edições de $2', |
4651 | | - 'checkuser-log-ipusers' => '$1 obteve utilizadores de $2', |
| 5288 | + 'checkuser-log-ipusers' => '$1 obteve usuários de $2', |
4652 | 5289 | 'checkuser-log-ipedits-xff' => '$1 obteve edições para o XFF $2', |
4653 | | - 'checkuser-log-ipusers-xff' => '$1 obteve utilizadores para o XFF $2', |
| 5290 | + 'checkuser-log-ipusers-xff' => '$1 obteve usuários para o XFF $2', |
4654 | 5291 | 'checkuser-log-useredits' => '$1 obteve edições de $2', |
4655 | 5292 | 'checkuser-autocreate-action' => 'foi automaticamente criada', |
4656 | | - 'checkuser-email-action' => 'Enviar email para o utilizador "$1"', |
4657 | | - 'checkuser-reset-action' => 'suprimir a senha do utilizador "$1"', |
| 5293 | + 'checkuser-email-action' => 'Enviar email para o usuário "$1"', |
| 5294 | + 'checkuser-reset-action' => 'suprimir a senha do usuário "$1"', |
4658 | 5295 | ); |
4659 | 5296 | |
4660 | 5297 | /** Quechua (Runa Simi) |
— | — | @@ -4709,9 +5346,13 @@ |
4710 | 5347 | 'checkuser-search-submit' => 'Tarzzut', |
4711 | 5348 | ); |
4712 | 5349 | |
4713 | | -/** Rhaeto-Romance (Rumantsch) */ |
| 5350 | +/** Rhaeto-Romance (Rumantsch) |
| 5351 | + * @author Gion-andri |
| 5352 | + */ |
4714 | 5353 | $messages['rm'] = array( |
4715 | | - 'checkuser-reason' => 'Motiv', |
| 5354 | + 'checkuser-reason' => 'Motiv:', |
| 5355 | + 'checkuser-showlog' => 'Mussar il log', |
| 5356 | + 'checkuser-target' => "Utilisader u adressa d'IP", |
4716 | 5357 | 'checkuser-search' => 'Tschertgar', |
4717 | 5358 | ); |
4718 | 5359 | |
— | — | @@ -4729,6 +5370,7 @@ |
4730 | 5371 | 'checkuser-desc' => 'Autorizează utilizatorii cu drepturile specifice să poată verifica adresele IP şi alte informaţii', |
4731 | 5372 | 'checkuser-logcase' => 'Căutarea în jurnal este sensibilă la majuscule - minuscule', |
4732 | 5373 | 'checkuser' => 'Verifică utilizatorul', |
| 5374 | + 'checkuser-contribs' => 'verifică IP-urile utilizatorilor', |
4733 | 5375 | 'group-checkuser' => 'Checkuseri', |
4734 | 5376 | 'group-checkuser-member' => 'Checkuser', |
4735 | 5377 | 'right-checkuser' => 'Verifică adresele IP ale utilizatorilor şi alte informaţii', |
— | — | @@ -4749,6 +5391,8 @@ |
4750 | 5392 | 'checkuser-week-2' => 'ultimele două săptămâni', |
4751 | 5393 | 'checkuser-month' => 'ultimele 30 de zile', |
4752 | 5394 | 'checkuser-all' => 'toate', |
| 5395 | + 'checkuser-cidr-label' => 'Găseşte o serie comună şi adresele afectate pentru o listă de adrese IP', |
| 5396 | + 'checkuser-cidr-res' => 'CIDR comun:', |
4753 | 5397 | 'checkuser-empty' => 'Jurnalul nu conţine înregistrări.', |
4754 | 5398 | 'checkuser-nomatch' => 'Nu au fost găsite potriviri.', |
4755 | 5399 | 'checkuser-nomatch-edits' => 'Niciun rezultat. |
— | — | @@ -4771,6 +5415,7 @@ |
4772 | 5416 | 'checkuser-block-failure' => "'''Niciun utilizator nu este blocat.'''", |
4773 | 5417 | 'checkuser-block-limit' => 'Prea mulţi utilizatori selectaţi.', |
4774 | 5418 | 'checkuser-block-noreason' => 'Trebuie să specificaţi un motiv pentru blocări.', |
| 5419 | + 'checkuser-noreason' => 'Trebuie să specifici un motiv pentru această interogare.', |
4775 | 5420 | 'checkuser-accounts' => '$1 {{PLURAL:$1|cont nou|conturi noi}}', |
4776 | 5421 | 'checkuser-too-many' => 'Prea multe rezultate, te rog îngustează CIDR. |
4777 | 5422 | Iată IP-urile folosite (maxim 5000, sortate dup adresă):', |
— | — | @@ -4806,9 +5451,14 @@ |
4807 | 5452 | * @author Joetaras |
4808 | 5453 | */ |
4809 | 5454 | $messages['roa-tara'] = array( |
| 5455 | + 'checkuser' => 'Utende verificatore', |
| 5456 | + 'group-checkuser' => 'Utinde verificature', |
| 5457 | + 'group-checkuser-member' => 'Utende verificatore', |
4810 | 5458 | 'grouppage-checkuser' => '{{ns:project}}:Utende ca verifiche', |
4811 | 5459 | 'checkuser-reason' => 'Mutive:', |
4812 | | - 'checkuser-target' => 'Utende o IP', |
| 5460 | + 'checkuser-showlog' => "Fà vedè l'archivije", |
| 5461 | + 'checkuser-query' => "Inderroghe l'urteme cangiaminde", |
| 5462 | + 'checkuser-target' => 'Indirizze IP o utende:', |
4813 | 5463 | 'checkuser-users' => "Pigghje l'utende", |
4814 | 5464 | 'checkuser-edits' => "Pigghje le cangiaminde da l'IP", |
4815 | 5465 | 'checkuser-ips' => "Pigghje l'IP", |
— | — | @@ -4819,7 +5469,30 @@ |
4820 | 5470 | 'checkuser-week-2' => 'urteme doje sumane', |
4821 | 5471 | 'checkuser-month' => 'urteme 30 giurne', |
4822 | 5472 | 'checkuser-all' => 'tutte', |
| 5473 | + 'checkuser-cidr-res' => 'CIDR Comune:', |
| 5474 | + 'checkuser-empty' => "L'archivije non ge condène eleminde.", |
| 5475 | + 'checkuser-nomatch' => "Non g'agghie acchiate ninde.", |
| 5476 | + 'checkuser-nomatch-edits' => "Non g'agghie acchiate ninde.<br /> |
| 5477 | +L'urteme cangiamende ha state fatte 'u $1 a le $2.", |
| 5478 | + 'checkuser-check' => 'Verifiche', |
| 5479 | + 'checkuser-nolog' => 'Nisciune archivije de file acchiate.', |
| 5480 | + 'checkuser-blocked' => 'Bloccate', |
| 5481 | + 'checkuser-gblocked' => 'Bloccate globbalmende', |
| 5482 | + 'checkuser-locked' => 'Bloccate', |
| 5483 | + 'checkuser-wasblocked' => 'Bloccate precedendemende', |
| 5484 | + 'checkuser-localonly' => 'Non unificate', |
| 5485 | + 'checkuser-massblock-commit' => "Bluecche l'utinde scacchiate", |
| 5486 | + 'checkuser-block-success' => "'''L'{{PLURAL:$2|utende|utinde}} $1 {{PLURAL:$2|è|sonde}} bloccate.'''", |
| 5487 | + 'checkuser-block-failure' => "'''Nisciune utende blccate.'''", |
| 5488 | + 'checkuser-block-limit' => 'Troppe utinde scacchiate.', |
| 5489 | + 'checkuser-block-noreason' => "Tu à dà 'nu mutive pe le blocche.", |
| 5490 | + 'checkuser-noreason' => "Tu à dà 'nu mutive pe st'inderrogazione.", |
| 5491 | + 'checkuser-user-nonexistent' => "L'utende specificate non g'esiste.", |
4823 | 5492 | 'checkuser-search-submit' => 'Cirche', |
| 5493 | + 'checkuser-search-initiator' => 'iniziatore', |
| 5494 | + 'checkuser-search-target' => 'destinazione', |
| 5495 | + 'checkuser-ipeditcount' => "~$1 da tutte l'utinde", |
| 5496 | + 'checkuser-log-subpage' => 'Archivije', |
4824 | 5497 | 'checkuser-log-userips' => '$1 ha pigghiete le IP pe $2', |
4825 | 5498 | 'checkuser-log-ipedits' => '$1 ha pigghiete le cangiaminde pe $2', |
4826 | 5499 | 'checkuser-log-ipusers' => '$1 ha pigghiete le utinde pe $2', |
— | — | @@ -4827,20 +5500,26 @@ |
4828 | 5501 | 'checkuser-log-ipusers-xff' => '$1 ha pigghiete le utinde pe XFF $2', |
4829 | 5502 | 'checkuser-log-useredits' => '$1 ha pigghiete le cangiaminde pe $2', |
4830 | 5503 | 'checkuser-autocreate-action' => 'ha state ccrejete automaticamende', |
| 5504 | + 'checkuser-email-action' => 'mannate \'na mail a l\'utende "$1"', |
| 5505 | + 'checkuser-reset-action' => 'azzere \'a password pe l\'utende "$1"', |
4831 | 5506 | ); |
4832 | 5507 | |
4833 | 5508 | /** Russian (Русский) |
| 5509 | + * @author DCamer |
4834 | 5510 | * @author EugeneZelenko |
4835 | 5511 | * @author Ferrer |
| 5512 | + * @author Ilya Voyager |
4836 | 5513 | * @author Kaganer |
| 5514 | + * @author Kv75 |
4837 | 5515 | * @author Lockal |
| 5516 | + * @author Prima klasy4na |
4838 | 5517 | * @author Putnik |
4839 | 5518 | * @author Silence |
4840 | 5519 | * @author Александр Сигачёв |
4841 | 5520 | */ |
4842 | 5521 | $messages['ru'] = array( |
4843 | 5522 | 'checkuser-summary' => "Данный инструмент может быть использован, чтобы получить IP-адреса, использовавшиеся участником, либо чтобы показать правки/участников, работавших с IP-адреса. |
4844 | | -Правки и пользователи, которые правили с определённого IP-адреса, указанного в X-Forwarded-For, можно получить, добавив префикс <code>/xff</code> к IP-адресу. Поддерживаемые версии IP: 4 (CIDR 16—32) и 6 (CIDR 96—128). |
| 5523 | +Правки и пользователи, которые правили с определённого IP-адреса, указанного в X-Forwarded-For, можно получить, добавив постфикс <code>/xff</code> к IP-адресу. Поддерживаемые версии IP: 4 (CIDR 16—32) и 6 (CIDR 96—128). |
4845 | 5524 | Из соображений производительности будут показаны только первые 5000 правок. |
4846 | 5525 | Используйте эту страницу '''только в соответствии с правилами'''.", |
4847 | 5526 | 'checkuser-desc' => 'Предоставляет возможность проверять IP-адреса и дополнительную информацию участников', |
— | — | @@ -4856,7 +5535,7 @@ |
4857 | 5536 | 'checkuser-showlog' => 'Показать журнал', |
4858 | 5537 | 'checkuser-log' => 'Журнал проверки участников', |
4859 | 5538 | 'checkuser-query' => 'Запросить свежие правки', |
4860 | | - 'checkuser-target' => 'Участник или IP-адрес', |
| 5539 | + 'checkuser-target' => 'IP-адрес или имя участника:', |
4861 | 5540 | 'checkuser-users' => 'Получить участников', |
4862 | 5541 | 'checkuser-edits' => 'Запросить правки, сделанные с IP-адреса', |
4863 | 5542 | 'checkuser-ips' => 'Запросить IP-адреса', |
— | — | @@ -4871,14 +5550,14 @@ |
4872 | 5551 | 'checkuser-cidr-res' => 'Общая CIDR:', |
4873 | 5552 | 'checkuser-empty' => 'Журнал пуст.', |
4874 | 5553 | 'checkuser-nomatch' => 'Совпадений не найдено.', |
4875 | | - 'checkuser-nomatch-edits' => 'Соответствий не найдено. |
| 5554 | + 'checkuser-nomatch-edits' => 'Совпадений не найдено. |
4876 | 5555 | Последняя правка сделана $1 в $2.', |
4877 | 5556 | 'checkuser-check' => 'Проверить', |
4878 | 5557 | 'checkuser-log-fail' => 'Невозможно добавить запись в журнал', |
4879 | 5558 | 'checkuser-nolog' => 'Файл журнала не найден.', |
4880 | 5559 | 'checkuser-blocked' => 'Заблокирован', |
4881 | 5560 | 'checkuser-gblocked' => 'Заблокирован глобально', |
4882 | | - 'checkuser-locked' => 'Лишён доп. возможностей', |
| 5561 | + 'checkuser-locked' => 'Закрыт', |
4883 | 5562 | 'checkuser-wasblocked' => 'Подвергался блокировке', |
4884 | 5563 | 'checkuser-localonly' => 'Не глобальная', |
4885 | 5564 | 'checkuser-massblock' => 'Заблокировать выбранных участников', |
— | — | @@ -4891,8 +5570,10 @@ |
4892 | 5571 | 'checkuser-block-failure' => "'''Нет заблокированных участников.'''", |
4893 | 5572 | 'checkuser-block-limit' => 'Выбрано слишком много участников.', |
4894 | 5573 | 'checkuser-block-noreason' => 'Вы должны указать причину блокировок.', |
| 5574 | + 'checkuser-noreason' => 'Вы должны указать причину для этого запроса.', |
4895 | 5575 | 'checkuser-accounts' => '$1 {{PLURAL:$1|новая учётная запись|новых учётных записи|новых учётных записей}}', |
4896 | | - 'checkuser-too-many' => 'Слишком много результатов, пожалуйста, сузьте CIDR. Использованные IP (максимум 5000, отсортировано по адресу):', |
| 5576 | + 'checkuser-too-many' => 'Слишком много результатов (согласно оценке запроса), пожалуйста, сузьте CIDR. |
| 5577 | +Использованные IP (максимум 5000, отсортировано по адресу):', |
4897 | 5578 | 'checkuser-user-nonexistent' => 'Указанного участника не существует', |
4898 | 5579 | 'checkuser-search-form' => 'Найти записи журнала, где $1 является $2', |
4899 | 5580 | 'checkuser-search-submit' => 'Найти', |
— | — | @@ -4968,6 +5649,7 @@ |
4969 | 5650 | 'checkuser-block-failure' => "'''Бобуллубут кыттааччы суох.'''", |
4970 | 5651 | 'checkuser-block-limit' => 'Наһаа элбэх киһини талбыккын', |
4971 | 5652 | 'checkuser-block-noreason' => 'Бобуу төрүөтүн этиэхтээххин.', |
| 5653 | + 'checkuser-noreason' => 'Бу ыйытык төрүөтүн ааттыахтааххын.', |
4972 | 5654 | 'checkuser-accounts' => '$1 саҥа {{PLURAL:$1|аат|ааттар}}', |
4973 | 5655 | 'checkuser-too-many' => 'Наһаа элбэх булулунна, бука диэн CIDR кыччатан биэр. Туһаныллыбыт IP (саамай элбэҕэ 5000, бу аадырыһынан наардаммыт):', |
4974 | 5656 | 'checkuser-user-nonexistent' => 'Маннык ааттаах кыттааччы суох', |
— | — | @@ -5007,6 +5689,7 @@ |
5008 | 5690 | ); |
5009 | 5691 | |
5010 | 5692 | /** Sicilian (Sicilianu) |
| 5693 | + * @author Melos |
5011 | 5694 | * @author Santu |
5012 | 5695 | */ |
5013 | 5696 | $messages['scn'] = array( |
— | — | @@ -5014,6 +5697,7 @@ |
5015 | 5698 | 'checkuser-desc' => "Pirmetti a l'utenti cu li giusti autorizzazzioni du suttapuniri a virifica li nnirizzi IP e àutri nfurmazzioni di l'utenti stissi", |
5016 | 5699 | 'checkuser-logcase' => "La circata nnê log è ''case sensitive'' (diffirènzia ntra maiùsculi e minùsculi)", |
5017 | 5700 | 'checkuser' => 'Cuntrolli utenzi', |
| 5701 | + 'checkuser-contribs' => "cuntrolla l'indirizzi IP dô utenti", |
5018 | 5702 | 'group-checkuser' => 'Cuntrullori', |
5019 | 5703 | 'group-checkuser-member' => 'Cuntrullori', |
5020 | 5704 | 'right-checkuser' => "Talìa li nnirizzi IP usati di l'utenti a àutri nfurmazzioni", |
— | — | @@ -5034,6 +5718,8 @@ |
5035 | 5719 | 'checkuser-week-2' => 'ùrtimi dui simani', |
5036 | 5720 | 'checkuser-month' => 'ùrtimi 30 jorna', |
5037 | 5721 | 'checkuser-all' => 'tutti li canciamenti', |
| 5722 | + 'checkuser-cidr-label' => "Trova l'intervallu e l'indirizzi intirissati pi na lista di IP", |
| 5723 | + 'checkuser-cidr-res' => 'CIDR comuni:', |
5038 | 5724 | 'checkuser-empty' => 'Lu log non havi dati.', |
5039 | 5725 | 'checkuser-nomatch' => 'Nuddu risurtatu attruvatu.', |
5040 | 5726 | 'checkuser-nomatch-edits' => 'Nuddu risurtatu attruvatu. |
— | — | @@ -5056,6 +5742,7 @@ |
5057 | 5743 | 'checkuser-block-failure' => "'''Nuddu utenti bluccatu.'''", |
5058 | 5744 | 'checkuser-block-limit' => 'Troppi utenti silizziunati.', |
5059 | 5745 | 'checkuser-block-noreason' => 'È òbbricu dari na mutivazzioni pi li blocchi.', |
| 5746 | + 'checkuser-noreason' => 'Havi a ndicari nu mutivu pi sta query.', |
5060 | 5747 | 'checkuser-accounts' => '$1 {{PLURAL:$1|novo|novi}} account', |
5061 | 5748 | 'checkuser-too-many' => "Li nùmmira dî risulrtati è troppu assai, usari nu CIDR cchiù nicu. Si sècutu sù nnicati li nnirizzi IP utilizzati (nzinu a non chiossai di 5000, misi 'n òrdini pi nnirizzu):", |
5062 | 5749 | 'checkuser-user-nonexistent' => "L'utenti nnicatu non esisti.", |
— | — | @@ -5127,7 +5814,7 @@ |
5128 | 5815 | 'checkuser-showlog' => 'Zobraziť záznam', |
5129 | 5816 | 'checkuser-log' => 'Záznam kontroly používateľov', |
5130 | 5817 | 'checkuser-query' => 'Získať z posledných úprav', |
5131 | | - 'checkuser-target' => 'Používateľ alebo IP', |
| 5818 | + 'checkuser-target' => 'IP adresa alebo meno používateľa:', |
5132 | 5819 | 'checkuser-users' => 'Získať používateľov', |
5133 | 5820 | 'checkuser-edits' => 'Získať úpravy z IP', |
5134 | 5821 | 'checkuser-ips' => 'Získať IP adresy', |
— | — | @@ -5162,8 +5849,10 @@ |
5163 | 5850 | 'checkuser-block-failure' => "'''Žiaden používateľ nebol zablokovaný.'''", |
5164 | 5851 | 'checkuser-block-limit' => 'Bolo zvolených príliš veľa používateľov.', |
5165 | 5852 | 'checkuser-block-noreason' => 'Musíte zadať dôvod blokovaní.', |
| 5853 | + 'checkuser-noreason' => 'Musíte uviesť dôvod tejto požiadavky.', |
5166 | 5854 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nový účet|nové účty|nových účtov}}', |
5167 | | - 'checkuser-too-many' => 'Príliš veľa výsledkov, prosím zúžte CIDR. Tu sú použité IP (max. 5 000, zoradené podľa adresy):', |
| 5855 | + 'checkuser-too-many' => 'Príliš veľa výsledkov (podľa odhadu požiadavky), prosím zúžte CIDR. |
| 5856 | +Tu sú použité IP (max. 5 000, zoradené podľa adresy):', |
5168 | 5857 | 'checkuser-user-nonexistent' => 'Uvedený používateľ neexistuje.', |
5169 | 5858 | 'checkuser-search-form' => 'Nájsť položky záznamu, kde $1 je $2', |
5170 | 5859 | 'checkuser-search-submit' => 'Hľadať', |
— | — | @@ -5191,16 +5880,22 @@ |
5192 | 5881 | 'checkuser' => 'Kontrollo përdoruesin', |
5193 | 5882 | ); |
5194 | 5883 | |
5195 | | -/** Serbian Cyrillic ekavian (ћирилица) |
| 5884 | +/** Serbian Cyrillic ekavian (Српски (ћирилица)) |
5196 | 5885 | * @author Millosh |
5197 | 5886 | * @author Sasa Stefanovic |
| 5887 | + * @author Verlor |
5198 | 5888 | * @author Јованвб |
5199 | 5889 | * @author Михајло Анђелковић |
| 5890 | + * @author Обрадовић Горан |
5200 | 5891 | */ |
5201 | 5892 | $messages['sr-ec'] = array( |
| 5893 | + 'checkuser-summary' => 'Ова алатка прегледа скорашње измене и враћа IP адресе које је корисник користио или показује податке о кориснику/изменама за дати IP. Корисници и измене клијентског IP се могу добавити преко XFF заглавља додавањем "/xff" иза IP. Подржани су формати IPv4 (CIDR 16-32) и IPv6 (CIDR 96-128). |
| 5894 | +Због перформанси неће бити враћено више од 5000 измена. |
| 5895 | +Алатку користите у складу са политиком.', |
5202 | 5896 | 'checkuser-desc' => 'Даје сарадницима са одговарајућим правима могућност да провере ИП адресе сарадника и друге информације.', |
5203 | 5897 | 'checkuser-logcase' => 'Претрага лога је осетљива на мала и велика слова.', |
5204 | 5898 | 'checkuser' => 'Чекјузер', |
| 5899 | + 'checkuser-contribs' => 'Провери корисникове IP адресе.', |
5205 | 5900 | 'group-checkuser' => 'Чекјузери', |
5206 | 5901 | 'group-checkuser-member' => 'Чекјузер', |
5207 | 5902 | 'right-checkuser' => 'Проверава сарадничке ИП адресе и друге информације.', |
— | — | @@ -5210,7 +5905,7 @@ |
5211 | 5906 | 'checkuser-showlog' => 'Прикажи лог.', |
5212 | 5907 | 'checkuser-log' => 'Лог чекјузера.', |
5213 | 5908 | 'checkuser-query' => 'Упит на скорашње измене.', |
5214 | | - 'checkuser-target' => 'Корисник или ИП', |
| 5909 | + 'checkuser-target' => 'Корисничко име или ИП адреса', |
5215 | 5910 | 'checkuser-users' => 'Прикупљање сарадничких имена.', |
5216 | 5911 | 'checkuser-edits' => 'Прикупљање измена од стране ИП адресе.', |
5217 | 5912 | 'checkuser-ips' => 'Прикупља ИП адресе.', |
— | — | @@ -5221,8 +5916,12 @@ |
5222 | 5917 | 'checkuser-week-2' => 'последње две недеље', |
5223 | 5918 | 'checkuser-month' => 'последњих 30 дана', |
5224 | 5919 | 'checkuser-all' => 'све', |
| 5920 | + 'checkuser-cidr-label' => 'Пронађи уобичајени опсег и захваћене адресе за списак IP адреса.', |
| 5921 | + 'checkuser-cidr-res' => 'Уобичајени CIDR', |
5225 | 5922 | 'checkuser-empty' => 'Лог не садржи ништа.', |
5226 | 5923 | 'checkuser-nomatch' => 'Нема погодака.', |
| 5924 | + 'checkuser-nomatch-edits' => 'Нису нађена поклапања. |
| 5925 | +Последња измена је била на $1 у $2.', |
5227 | 5926 | 'checkuser-check' => 'Провера', |
5228 | 5927 | 'checkuser-log-fail' => 'Није било могуће додати податак у лог.', |
5229 | 5928 | 'checkuser-nolog' => 'Ниједан фајл с логовима није пронађен.', |
— | — | @@ -5232,6 +5931,8 @@ |
5233 | 5932 | 'checkuser-wasblocked' => 'Претходно блокиран', |
5234 | 5933 | 'checkuser-localonly' => 'Није унифицирано', |
5235 | 5934 | 'checkuser-massblock' => 'Блокирај изабраног корисника', |
| 5935 | + 'checkuser-massblock-text' => 'Изабрани налози ће бити блокирани на неодређено, уз обележене опције аутоблокирања и забране прављења налога. |
| 5936 | +IP адресе ће бити блокиране на недељу дана за IP кориснике, уз забрану прављења налога.', |
5236 | 5937 | 'checkuser-blocktag' => 'Замени корисничке странице са:', |
5237 | 5938 | 'checkuser-blocktag-talk' => 'Замени стране за разговор са:', |
5238 | 5939 | 'checkuser-massblock-commit' => 'Блокирај изабраног корисника', |
— | — | @@ -5239,8 +5940,10 @@ |
5240 | 5941 | 'checkuser-block-failure' => "'''Нема блокираних корисника.'''", |
5241 | 5942 | 'checkuser-block-limit' => 'Превише корисника је изабрано.', |
5242 | 5943 | 'checkuser-block-noreason' => 'Морате дати разлог за блок.', |
| 5944 | + 'checkuser-noreason' => 'Морате да наведете разлог за овај упит.', |
5243 | 5945 | 'checkuser-accounts' => '$1 {{PLURAL:$1|нови налог|нових налога}}', |
5244 | | - 'checkuser-too-many' => 'Превише резултата; смањи CIDR. Ево списка коришћених ИП адреса (максимално 5000, сортирано по адреси):', |
| 5946 | + 'checkuser-too-many' => 'Нађено је превише резултата (према процени захтева). Молимо Вас да сузите CIDR. |
| 5947 | +Овде су коришћене IP адресе (највише 5.000, сортираних по адреси):', |
5245 | 5948 | 'checkuser-user-nonexistent' => 'Тражени сарадник не постоји.', |
5246 | 5949 | 'checkuser-search-form' => 'Претрага лога где је $1 једнако $2.', |
5247 | 5950 | 'checkuser-search-submit' => 'Претрага', |
— | — | @@ -5249,6 +5952,7 @@ |
5250 | 5953 | 'checkuser-ipeditcount' => '~$1 од свих сарадника', |
5251 | 5954 | 'checkuser-log-subpage' => 'лог', |
5252 | 5955 | 'checkuser-log-return' => 'Повратак на основну форму чекјузера.', |
| 5956 | + 'checkuser-limited' => "'''Ови резултати су скраћени због перформанси.'''", |
5253 | 5957 | 'checkuser-log-userips' => '$1 је добио ИП адресе за $2', |
5254 | 5958 | 'checkuser-log-ipedits' => '$1 је добио измене за $2', |
5255 | 5959 | 'checkuser-log-ipusers' => '$1 је добио сараднике за $2', |
— | — | @@ -5260,12 +5964,84 @@ |
5261 | 5965 | 'checkuser-reset-action' => 'обнови лозинку за корисника "$1"', |
5262 | 5966 | ); |
5263 | 5967 | |
5264 | | -/** latinica (latinica) */ |
| 5968 | +/** Serbian Latin ekavian (Srpski (latinica)) |
| 5969 | + * @author Michaello |
| 5970 | + * @author Михајло Анђелковић |
| 5971 | + */ |
5265 | 5972 | $messages['sr-el'] = array( |
| 5973 | + 'checkuser-summary' => 'Ova alatka pregleda skorašnje izmene i vraća IP adrese koje je korisnik koristio ili pokazuje podatke o korisniku/izmenama za dati IP. Korisnici i izmene klijentskog IP se mogu dobaviti preko XFF zaglavlja dodavanjem "/xff" iza IP. Podržani su formati IPv4 (CIDR 16-32) i IPv6 (CIDR 96-128). |
| 5974 | +Zbog performansi neće biti vraćeno više od 5000 izmena. |
| 5975 | +Alatku koristite u skladu sa politikom.', |
| 5976 | + 'checkuser-desc' => 'Daje saradnicima sa odgovarajućim pravima mogućnost da provere IP adrese saradnika i druge informacije.', |
| 5977 | + 'checkuser-logcase' => 'Pretraga loga je osetljiva na mala i velika slova.', |
5266 | 5978 | 'checkuser' => 'Čekjuzer', |
| 5979 | + 'checkuser-contribs' => 'Proveri korisnikove IP adrese.', |
5267 | 5980 | 'group-checkuser' => 'Čekjuzeri', |
5268 | 5981 | 'group-checkuser-member' => 'Čekjuzer', |
| 5982 | + 'right-checkuser' => 'Proverava saradničke IP adrese i druge informacije.', |
| 5983 | + 'right-checkuser-log' => 'Pogledaj čekjuzer log', |
5269 | 5984 | 'grouppage-checkuser' => '{{ns:project}}:Čekjuzer', |
| 5985 | + 'checkuser-reason' => 'Rezlog:', |
| 5986 | + 'checkuser-showlog' => 'Prikaži log.', |
| 5987 | + 'checkuser-log' => 'Log čekjuzera.', |
| 5988 | + 'checkuser-query' => 'Upit na skorašnje izmene.', |
| 5989 | + 'checkuser-target' => 'Korisnik ili IP', |
| 5990 | + 'checkuser-users' => 'Prikupljanje saradničkih imena.', |
| 5991 | + 'checkuser-edits' => 'Prikupljanje izmena od strane IP adrese.', |
| 5992 | + 'checkuser-ips' => 'Prikuplja IP adrese.', |
| 5993 | + 'checkuser-account' => 'Preuzmi izmene naloga', |
| 5994 | + 'checkuser-search' => 'Pretraga', |
| 5995 | + 'checkuser-period' => 'Trajanje:', |
| 5996 | + 'checkuser-week-1' => 'poslednja nedelja', |
| 5997 | + 'checkuser-week-2' => 'poslednje dve nedelje', |
| 5998 | + 'checkuser-month' => 'poslednjih 30 dana', |
| 5999 | + 'checkuser-all' => 'sve', |
| 6000 | + 'checkuser-cidr-label' => 'Pronađi uobičajeni opseg i zahvaćene adrese za spisak IP adresa.', |
| 6001 | + 'checkuser-cidr-res' => 'Uobičajeni CIDR', |
| 6002 | + 'checkuser-empty' => 'Log ne sadrži ništa.', |
| 6003 | + 'checkuser-nomatch' => 'Nema pogodaka.', |
| 6004 | + 'checkuser-nomatch-edits' => 'Nisu nađena poklapanja. |
| 6005 | +Poslednja izmena je bila na $1 u $2.', |
| 6006 | + 'checkuser-check' => 'Provera', |
| 6007 | + 'checkuser-log-fail' => 'Nije bilo moguće dodati podatak u log.', |
| 6008 | + 'checkuser-nolog' => 'Nijedan fajl s logovima nije pronađen.', |
| 6009 | + 'checkuser-blocked' => 'Blokiran', |
| 6010 | + 'checkuser-gblocked' => 'Blokiran globalno', |
| 6011 | + 'checkuser-locked' => 'Zaključano', |
| 6012 | + 'checkuser-wasblocked' => 'Prethodno blokiran', |
| 6013 | + 'checkuser-localonly' => 'Nije unificirano', |
| 6014 | + 'checkuser-massblock' => 'Blokiraj izabranog korisnika', |
| 6015 | + 'checkuser-massblock-text' => 'Izabrani nalozi će biti blokirani na neodređeno, uz obeležene opcije autoblokiranja i zabrane pravljenja naloga. |
| 6016 | +IP adrese će biti blokirane na nedelju dana za IP korisnike, uz zabranu pravljenja naloga.', |
| 6017 | + 'checkuser-blocktag' => 'Zameni korisničke stranice sa:', |
| 6018 | + 'checkuser-blocktag-talk' => 'Zameni strane za razgovor sa:', |
| 6019 | + 'checkuser-massblock-commit' => 'Blokiraj izabranog korisnika', |
| 6020 | + 'checkuser-block-success' => "'''{{PLURAL:$2|Korisnik|Korisnici}} $1 {{PLURAL:$2|je sada blokiran|su sada blokirani}}.'''", |
| 6021 | + 'checkuser-block-failure' => "'''Nema blokiranih korisnika.'''", |
| 6022 | + 'checkuser-block-limit' => 'Previše korisnika je izabrano.', |
| 6023 | + 'checkuser-block-noreason' => 'Morate dati razlog za blok.', |
| 6024 | + 'checkuser-noreason' => 'Morate da navedete razlog za ovaj upit.', |
| 6025 | + 'checkuser-accounts' => '$1 {{PLURAL:$1|novi nalog|novih naloga}}', |
| 6026 | + 'checkuser-too-many' => 'Nađeno je previše rezultata (prema proceni zahteva). Molimo Vas da suzite CIDR. |
| 6027 | +Ovde su korišćene IP adrese (najviše 5.000, sortiranih po adresi):', |
| 6028 | + 'checkuser-user-nonexistent' => 'Traženi saradnik ne postoji.', |
| 6029 | + 'checkuser-search-form' => 'Pretraga loga gde je $1 jednako $2.', |
| 6030 | + 'checkuser-search-submit' => 'Pretraga', |
| 6031 | + 'checkuser-search-initiator' => 'pokretač', |
| 6032 | + 'checkuser-search-target' => 'cilj', |
| 6033 | + 'checkuser-ipeditcount' => '~$1 od svih saradnika', |
| 6034 | + 'checkuser-log-subpage' => 'log', |
| 6035 | + 'checkuser-log-return' => 'Povratak na osnovnu formu čekjuzera.', |
| 6036 | + 'checkuser-limited' => "'''Ovi rezultati su skraćeni zbog performansi.'''", |
| 6037 | + 'checkuser-log-userips' => '$1 je dobio IP adrese za $2', |
| 6038 | + 'checkuser-log-ipedits' => '$1 je dobio izmene za $2', |
| 6039 | + 'checkuser-log-ipusers' => '$1 je dobio saradnike za $2', |
| 6040 | + 'checkuser-log-ipedits-xff' => '$1 je dobio izmene za XFF $2', |
| 6041 | + 'checkuser-log-ipusers-xff' => '$1 je dobio saradnike za XFF $2', |
| 6042 | + 'checkuser-log-useredits' => '$1 preuzeo izmene od $2', |
| 6043 | + 'checkuser-autocreate-action' => 'je automatski napravljen', |
| 6044 | + 'checkuser-email-action' => 'poslat je mejl korisniku "$1"', |
| 6045 | + 'checkuser-reset-action' => 'obnovi lozinku za korisnika "$1"', |
5270 | 6046 | ); |
5271 | 6047 | |
5272 | 6048 | /** Seeltersk (Seeltersk) |
— | — | @@ -5280,6 +6056,7 @@ |
5281 | 6057 | 'checkuser-desc' => 'Ferlööwet Benutsere mäd do äntspreekende Gjuchte do IP-Adressen as uk wiedere Informatione fon Benutsere tou wröigjen.', |
5282 | 6058 | 'checkuser-logcase' => 'Ju Säike in dät Logbouk unnerschat twiske Groot- un Littikschrieuwen.', |
5283 | 6059 | 'checkuser' => 'Checkuser', |
| 6060 | + 'checkuser-contribs' => 'IP-Adrässen Benutser wröigje', |
5284 | 6061 | 'group-checkuser' => 'Checkusers', |
5285 | 6062 | 'group-checkuser-member' => 'Checkuser-Begjuchtigde', |
5286 | 6063 | 'right-checkuser' => 'Wröigenge fon IP-Adressen as uk Ferbiendengen twiske IPs un ounmäldede Benutsere', |
— | — | @@ -5323,6 +6100,7 @@ |
5324 | 6101 | 'checkuser-block-failure' => "'''Der wuuden neen Benutsere speerd.'''", |
5325 | 6102 | 'checkuser-block-limit' => 'Der wuuden toufuul Benutsere uutwääld.', |
5326 | 6103 | 'checkuser-block-noreason' => 'Du moast n Gruund foar ju Speere anreeke.', |
| 6104 | + 'checkuser-noreason' => 'Foar disse Oufroage mout ne Begruundenge ounroat wäide.', |
5327 | 6105 | 'checkuser-accounts' => '{{PLURAL:$1|1 näi Benutserkonto|$1 näie Benutserkonten}}', |
5328 | 6106 | 'checkuser-too-many' => 'Ju Lieste fon Resultoate is tou loang, gränsje dän IP-Beräk fääre ien. Hier sunt do benutsede IP-Adressen (maximoal 5000, sortierd ätter Adresse):', |
5329 | 6107 | 'checkuser-user-nonexistent' => 'Die anroate Benutser bestoant nit.', |
— | — | @@ -5356,7 +6134,7 @@ |
5357 | 6135 | 'group-checkuser' => 'Pamaké pamariksa', |
5358 | 6136 | 'group-checkuser-member' => 'Pamaké pamariksa', |
5359 | 6137 | 'grouppage-checkuser' => '{{ns:project}}:Pamaké pamariksa', |
5360 | | - 'checkuser-reason' => 'Alesan', |
| 6138 | + 'checkuser-reason' => 'Alesan:', |
5361 | 6139 | 'checkuser-showlog' => 'Témbongkeun log', |
5362 | 6140 | 'checkuser-log' => 'Log PamakéPamariksa', |
5363 | 6141 | 'checkuser-target' => 'Landihan atawa IP', |
— | — | @@ -5394,6 +6172,7 @@ |
5395 | 6173 | * @author M.M.S. |
5396 | 6174 | * @author MagnusA |
5397 | 6175 | * @author Najami |
| 6176 | + * @author Per |
5398 | 6177 | */ |
5399 | 6178 | $messages['sv'] = array( |
5400 | 6179 | 'checkuser-summary' => 'Det här verktyget söker igenom de senaste ändringarna för att hämta IP-adresser för en användare, eller redigeringar och användare för en IP-adress. |
— | — | @@ -5412,7 +6191,7 @@ |
5413 | 6192 | 'checkuser-showlog' => 'Visa logg', |
5414 | 6193 | 'checkuser-log' => 'Logg över användarkontroller', |
5415 | 6194 | 'checkuser-query' => 'Sök de senaste ändringarna', |
5416 | | - 'checkuser-target' => 'Användare eller IP', |
| 6195 | + 'checkuser-target' => 'IP-adress eller användarnamn:', |
5417 | 6196 | 'checkuser-users' => 'Hämta användare', |
5418 | 6197 | 'checkuser-edits' => 'Hämta redigeringar från IP-adress', |
5419 | 6198 | 'checkuser-ips' => 'Hämta IP-adresser', |
— | — | @@ -5447,8 +6226,9 @@ |
5448 | 6227 | 'checkuser-block-failure' => "'''Ingen användare blockerades.'''", |
5449 | 6228 | 'checkuser-block-limit' => 'För många användare valda.', |
5450 | 6229 | 'checkuser-block-noreason' => 'Du måste ange en anledning för blockeringarna.', |
| 6230 | + 'checkuser-noreason' => 'Du måste uppge en anledning för den här frågan.', |
5451 | 6231 | 'checkuser-accounts' => '$1 {{PLURAL:$1|nytt konto|nya konton}}', |
5452 | | - 'checkuser-too-many' => 'För många resultat, du bör söka i ett mindre CIDR-block. Här följer de IP-adresser som använts (högst 5000, sorterade efter adress):', |
| 6232 | + 'checkuser-too-many' => 'För många resultat (enligt uppskattning), du bör söka i ett mindre CIDR-block. Här följer de IP-adresser som använts (högst 5000, sorterade efter adress):', |
5453 | 6233 | 'checkuser-user-nonexistent' => 'Användarnamnet som angavs finns inte.', |
5454 | 6234 | 'checkuser-search-form' => 'Sök efter poster där $1 är $2', |
5455 | 6235 | 'checkuser-search-submit' => 'Sök', |
— | — | @@ -5507,7 +6287,7 @@ |
5508 | 6288 | 'checkuser-showlog' => 'చిట్టాని చూపించు', |
5509 | 6289 | 'checkuser-log' => 'వాడుకరిపరిశీలనల చిట్టా', |
5510 | 6290 | 'checkuser-query' => 'ఇటీవలి మార్పుల్లో చూడండి', |
5511 | | - 'checkuser-target' => 'వాడుకరి లేదా ఐపీ', |
| 6291 | + 'checkuser-target' => 'ఐపీ చిరునామా లేదా వాడుకరిపేరు:', |
5512 | 6292 | 'checkuser-users' => 'వాడుకరులను తీసుకురా', |
5513 | 6293 | 'checkuser-edits' => 'ఈ ఐపీ అడ్రస్సు నుండి చేసిన మార్పులను చూపించు', |
5514 | 6294 | 'checkuser-ips' => 'ఐపీలను తీసుకురా', |
— | — | @@ -5523,9 +6303,17 @@ |
5524 | 6304 | 'checkuser-log-fail' => 'చిట్టాలో పద్దుని చేర్చలేకపోయాం', |
5525 | 6305 | 'checkuser-nolog' => 'చిట్టా ఫైలేమీ కనపడలేదు.', |
5526 | 6306 | 'checkuser-blocked' => 'నిరోధించాం', |
| 6307 | + 'checkuser-gblocked' => 'సార్వత్రికంగా నిరోధించారు', |
| 6308 | + 'checkuser-wasblocked' => 'గతంలో నిరోధించబడ్డారు', |
| 6309 | + 'checkuser-massblock' => 'ఎంచుకున్న వాడుకరులను నిరోధించు', |
| 6310 | + 'checkuser-massblock-commit' => 'ఎంచుకున్న వాడుకరులను నిరోధించు', |
| 6311 | + 'checkuser-block-success' => "'''{{PLURAL:$2|వాడుకరి|వాడుకరులు}} $1 ఇప్పుడు {{PLURAL:$2|నిరోధించబడ్డారు|నిరోధించబడ్డారు}}.'''", |
| 6312 | + 'checkuser-block-limit' => 'చాలా మంది వాడుకరులను ఎంచుకున్నారు.', |
| 6313 | + 'checkuser-block-noreason' => 'ఈ నిరోధాలకి మీరు తప్పనిసరిగా కారణం ఇవ్వాలి.', |
| 6314 | + 'checkuser-accounts' => '$1 కొత్త {{PLURAL:$1|ఖాతా|ఖాతాలు}}', |
5527 | 6315 | 'checkuser-too-many' => 'మరీ ఎక్కువ ఫలితాలొచ్చాయి. CIDR ను మరింత కుదించండి. వాడిన ఐపీలివిగో (గరిష్ఠంగా 5000 -అడ్రసు వారీగా పేర్చి)', |
5528 | 6316 | 'checkuser-user-nonexistent' => 'ఆ వాడుకరి ఉనికిలో లేరు.', |
5529 | | - 'checkuser-search-form' => '$1 అనేది $2గా ఉన్న లాగ్ పద్దులను కనుగొనండి', |
| 6317 | + 'checkuser-search-form' => '$1 అనేది $2గా ఉన్న చిట్టా పద్దులను కనుగొనండి', |
5530 | 6318 | 'checkuser-search-submit' => 'వెతుకు', |
5531 | 6319 | 'checkuser-search-initiator' => 'ఆరంభకుడు', |
5532 | 6320 | 'checkuser-search-target' => 'లక్ష్యం', |
— | — | @@ -5549,7 +6337,7 @@ |
5550 | 6338 | 'grouppage-checkuser' => '{{ns:project}}:CheckUser', |
5551 | 6339 | 'checkuser-reason' => 'Motivu:', |
5552 | 6340 | 'checkuser-log' => 'Lista checkuser', |
5553 | | - 'checkuser-target' => "Uza-na'in ka IP", |
| 6341 | + 'checkuser-target' => "Diresaun IP ka naran uza-na'in:", |
5554 | 6342 | 'checkuser-users' => "Uza-na'in sira", |
5555 | 6343 | 'checkuser-edits' => 'Edita husi IP', |
5556 | 6344 | 'checkuser-ips' => 'IP sira', |
— | — | @@ -5625,21 +6413,174 @@ |
5626 | 6414 | 'checkuser-email-action' => 'почтаи электронӣ ба корбар "$1" фиристода шуд', |
5627 | 6415 | ); |
5628 | 6416 | |
| 6417 | +/** Tajik (Latin) (Тоҷикӣ (Latin)) |
| 6418 | + * @author Liangent |
| 6419 | + */ |
| 6420 | +$messages['tg-latn'] = array( |
| 6421 | + 'checkuser-summary' => 'In abzor taƣjiroti oxirro baroi ba dast ovardani nişonahoi internetī IP istifoda şuda tavassuti jak korbar jo ta\'jini viroişhoi ancom şuda tariqi jak nişonai internetī IP, çustuçū mekunad. |
| 6422 | +Korbaron va viroişhoi jak nişonai internetiji IP-ro metavon bo tavaççūh ba ittiloot sar ojand tariqi XFF bo afzudan nişonai internetī IP bo "/xff" pajdo kard. Har du protokol IPv4 (CIDR 16-32) va IPv6 (CIDR 96-128) tavassuti in abzor puştibonī meşavand. |
| 6423 | +Na beş az 5000 viroiş bo dalelhoi zudkorī bargardonida xohand şud. Bo muvofiqi sijosat va qoidaho inro istoda kuned.', |
| 6424 | + 'checkuser-desc' => 'Ba korbaron ixtijoroti lozimiro baroi barrasiji nişonahoi internetī IP korbaron va ittilooti digar, içozat medihad', |
| 6425 | + 'checkuser-logcase' => 'Çustuçūi guzoriş ba xurd jo buzrg budani harfho hasos ast.', |
| 6426 | + 'checkuser' => 'Bozrasiji korbar', |
| 6427 | + 'group-checkuser' => 'Bozrasiji korbaron', |
| 6428 | + 'group-checkuser-member' => 'Bozrasiji korbar', |
| 6429 | + 'right-checkuser' => 'Barrasi kardani nişonai IP va digar ittilooti korbar', |
| 6430 | + 'grouppage-checkuser' => '{{ns:project}}:Bozrasiji korbar', |
| 6431 | + 'checkuser-reason' => 'Sabab:', |
| 6432 | + 'checkuser-showlog' => 'Namoişi guzoriş', |
| 6433 | + 'checkuser-log' => 'BozrasiKorbar guzoriş', |
| 6434 | + 'checkuser-query' => 'Çustuçūi taƣjiroti oxir', |
| 6435 | + 'checkuser-users' => 'Fehrist kardani korbaron', |
| 6436 | + 'checkuser-edits' => 'Namoişi viroişhoi marbut ba in nişonai IP', |
| 6437 | + 'checkuser-ips' => 'Fehrist kardani nişonahoi IP', |
| 6438 | + 'checkuser-search' => 'Çustuçū', |
| 6439 | + 'checkuser-period' => 'Tūl:', |
| 6440 | + 'checkuser-week-1' => 'hafta guzaşta', |
| 6441 | + 'checkuser-week-2' => 'du haftai guzaşta', |
| 6442 | + 'checkuser-month' => '30 rūzi guzaşta', |
| 6443 | + 'checkuser-all' => 'hama', |
| 6444 | + 'checkuser-empty' => 'Guzoriş xolī ast.', |
| 6445 | + 'checkuser-nomatch' => 'Mavride ki mutobiqat doşta boşad pajdo naşud', |
| 6446 | + 'checkuser-nomatch-edits' => 'Heç mutobiqate joft naşud. |
| 6447 | +Oxirin viroiş dar $1 soati $2 bud.', |
| 6448 | + 'checkuser-check' => 'Barrasi', |
| 6449 | + 'checkuser-log-fail' => 'Imkoni afzudani ittiloot ba guzoriş vuçud nadorad', |
| 6450 | + 'checkuser-nolog' => 'Parvandai guzoriş pajdo naşud.', |
| 6451 | + 'checkuser-blocked' => "Dastrasī qat' şud", |
| 6452 | + 'checkuser-gblocked' => 'Bastaşuda sartosarī', |
| 6453 | + 'checkuser-wasblocked' => 'Qablan basta şuda', |
| 6454 | + 'checkuser-localonly' => 'Jakka naşuda', |
| 6455 | + 'checkuser-massblock' => 'Korbaroni intixobşuda basta şavand', |
| 6456 | + 'checkuser-blocktag' => 'Çojguzin kardani sahifahoi korbaron bo:', |
| 6457 | + 'checkuser-blocktag-talk' => 'Çojguzin kardani sahifahoi bahs bo:', |
| 6458 | + 'checkuser-block-limit' => "Te'dodi beş az şumorai korbaron intixob şudaand.", |
| 6459 | + 'checkuser-user-nonexistent' => 'Korbari mavridi nazar vuçud nadorad.', |
| 6460 | + 'checkuser-search-form' => 'Pajdo kardani mavorid dar guzorişho, ki $1 dar on $2 ast', |
| 6461 | + 'checkuser-search-submit' => 'Çustuçū', |
| 6462 | + 'checkuser-search-initiator' => 'oƣozgar', |
| 6463 | + 'checkuser-search-target' => 'hadaf', |
| 6464 | + 'checkuser-log-subpage' => 'Guzoriş', |
| 6465 | + 'checkuser-log-return' => 'Bozgaşt ba formi asliji bozrasiji korbar', |
| 6466 | + 'checkuser-log-userips' => '$1 nişonahoi internetiji IP-hoi $2ro girift', |
| 6467 | + 'checkuser-log-ipedits' => '$1 viroişhoi $2ro girift', |
| 6468 | + 'checkuser-log-ipusers' => '$1 korbaroni marbut ba $2ro girift', |
| 6469 | + 'checkuser-log-ipedits-xff' => '$1 viroişhoi XFF $2ro girift', |
| 6470 | + 'checkuser-log-ipusers-xff' => '$1 korbaroni marbut ba XFF $2ro girift', |
| 6471 | + 'checkuser-autocreate-action' => 'ba tavri xudkor eçod şuda bud', |
| 6472 | + 'checkuser-email-action' => 'poctai elektronī ba korbar "$1" firistoda şud', |
| 6473 | +); |
| 6474 | + |
5629 | 6475 | /** Thai (ไทย) |
5630 | 6476 | * @author Mopza |
5631 | 6477 | * @author Octahedron80 |
| 6478 | + * @author Woraponboonkerd |
5632 | 6479 | */ |
5633 | 6480 | $messages['th'] = array( |
| 6481 | + 'checkuser' => 'ตรวจสอบผู้ใช้', |
| 6482 | + 'checkuser-contribs' => 'ตรวจสอบหมายเลขไอพีของผู้ใช้', |
| 6483 | + 'group-checkuser' => 'ตรวจสอบผู้ใช้', |
| 6484 | + 'group-checkuser-member' => 'ตรวจสอบผู้ใช้', |
| 6485 | + 'right-checkuser' => 'ตรวจสอบหมายเลขไอพีของผู้ใช้และข้อมูลอื่นๆ', |
| 6486 | + 'right-checkuser-log' => 'ดูประวัติการตรวจสอบผู้ใช้', |
| 6487 | + 'grouppage-checkuser' => '{{ns:project}}:ตรวจสอบผู้ใช้', |
5634 | 6488 | 'checkuser-reason' => 'เหตุผล:', |
| 6489 | + 'checkuser-showlog' => 'แสดงประวัติ', |
| 6490 | + 'checkuser-log' => 'ประวัติการตรวจสอบผู้ใช้', |
| 6491 | + 'checkuser-query' => 'แบบสอบถามการเปลี่ยนแปลงล่าสุด', |
| 6492 | + 'checkuser-target' => 'หมายเลขไอพีหรือชื่อผู้ใช้:', |
| 6493 | + 'checkuser-users' => 'รับชื่อผู้ใช้', |
| 6494 | + 'checkuser-edits' => 'รับรายการแก้ไขจากหมายเลขไอพี', |
| 6495 | + 'checkuser-ips' => 'รับรายการหมายเลขไอพี', |
| 6496 | + 'checkuser-account' => 'รับรายการแก้ไขบัญชีผู้ใช้', |
5635 | 6497 | 'checkuser-search' => 'สืบค้น', |
5636 | 6498 | 'checkuser-period' => 'ระยะเวลา:', |
5637 | 6499 | 'checkuser-week-1' => 'สัปดาห์ที่แล้ว', |
5638 | 6500 | 'checkuser-week-2' => '2 สัปดาห์ที่แล้ว', |
5639 | 6501 | 'checkuser-month' => '30 วันที่แล้ว', |
5640 | 6502 | 'checkuser-all' => 'ทั้งหมด', |
| 6503 | + 'checkuser-nomatch' => 'ไม่พบสิ่งที่ค้นหา', |
| 6504 | + 'checkuser-blocktag' => 'แทนที่หน้าผู้ใช้ด้วย:', |
| 6505 | + 'checkuser-blocktag-talk' => 'แทนที่หน้าพูดคุยด้วย:', |
| 6506 | + 'checkuser-massblock-commit' => 'ระงับผู้ใช้ที่เลือก', |
| 6507 | + 'checkuser-block-success' => "'''{{PLURAL:$2|ผู้ใช้|ผู้ใช้}}ชื่อ $1 {{PLURAL:$2|ได้ถูก|ได้ถูก}}ระงับการใช้แล้ว'''", |
| 6508 | + 'checkuser-block-failure' => "'''ไม่มีผู้ใช้ถูกระงับ'''", |
| 6509 | + 'checkuser-block-limit' => 'เลือกผู้ใช้มากเกินไป', |
| 6510 | + 'checkuser-block-noreason' => 'คุณต้องให้เหตุผลในการระงับด้วย', |
| 6511 | + 'checkuser-too-many' => 'มีผลลัพธ์มากเกินไป (จากการคาดคะเนของแบบสอบถาม) กรุณาทำให้ CIDR เฉพาะเจาะจงมากขึ้น |
| 6512 | +นี่คือหมายเลขไอพีที่ถูกใช้ (สูงสุด 5000 เรียงตามหมายเลขไอพี)', |
| 6513 | + 'checkuser-user-nonexistent' => 'ไม่พบผู้ใช้ที่กำหนด', |
5641 | 6514 | 'checkuser-search-submit' => 'สืบค้น', |
5642 | 6515 | ); |
5643 | 6516 | |
| 6517 | +/** Turkmen (Türkmençe) |
| 6518 | + * @author Hanberke |
| 6519 | + */ |
| 6520 | +$messages['tk'] = array( |
| 6521 | + 'checkuser-desc' => 'Ulanyjylaryň IP adreslerini we beýleki maglumatlaryny barlamak hukugy üçin degişli rugsatlary ulanyjylara berýär', |
| 6522 | + 'checkuser-logcase' => 'Gündelik gözlegi baş-setir harpa duýgurdyr.', |
| 6523 | + 'checkuser' => 'Ulanyjy barla', |
| 6524 | + 'checkuser-contribs' => 'ulanyjy IP adreslerini barla', |
| 6525 | + 'group-checkuser' => 'Ulanyjy barlaýjylary', |
| 6526 | + 'group-checkuser-member' => 'Ulanyjy barlaýjysy', |
| 6527 | + 'right-checkuser' => 'Ulanyjylaryň IP adreslerini we baş maglumatlaryny barla', |
| 6528 | + 'right-checkuser-log' => 'Ulanyjy barlaýjysy gündeligini görkez', |
| 6529 | + 'grouppage-checkuser' => '{{ns:project}}:Ulanyjy barlaýjysy', |
| 6530 | + 'checkuser-reason' => 'Sebäp:', |
| 6531 | + 'checkuser-showlog' => 'Gündeligi görkez', |
| 6532 | + 'checkuser-log' => 'Ulanyjy barlaýjysy gündeligi', |
| 6533 | + 'checkuser-query' => 'Soňky üýtgeşmeleri sora', |
| 6534 | + 'checkuser-target' => 'IP adresi ýa-da ulanyjy ady:', |
| 6535 | + 'checkuser-users' => 'Ulanyjylary al', |
| 6536 | + 'checkuser-edits' => 'IP-den özgerdişleri al', |
| 6537 | + 'checkuser-ips' => 'IP adreslerini al', |
| 6538 | + 'checkuser-account' => 'Hasap özgerdişlerini al', |
| 6539 | + 'checkuser-search' => 'Gözle', |
| 6540 | + 'checkuser-period' => 'Dowamlylyk:', |
| 6541 | + 'checkuser-week-1' => 'soňky hepde', |
| 6542 | + 'checkuser-week-2' => 'soňky iki hepde', |
| 6543 | + 'checkuser-month' => 'soňky 30 gün', |
| 6544 | + 'checkuser-all' => 'ählisi', |
| 6545 | + 'checkuser-cidr-res' => 'Umumy CIDR:', |
| 6546 | + 'checkuser-empty' => 'Gündelikde hiç zat ýok.', |
| 6547 | + 'checkuser-nomatch' => 'Gabat gelýän zat tapylmady.', |
| 6548 | + 'checkuser-nomatch-edits' => 'Gabat gelýän zat tapylmady. |
| 6549 | +Soňky özgerdiş $2, $1 senesinde.', |
| 6550 | + 'checkuser-check' => 'Barla', |
| 6551 | + 'checkuser-log-fail' => 'Gündelik girişini goşup bolmaýar', |
| 6552 | + 'checkuser-nolog' => 'Hiç hili gündelik faýly tapylmady.', |
| 6553 | + 'checkuser-blocked' => 'Blokirlendi', |
| 6554 | + 'checkuser-gblocked' => 'Global blokirlendi', |
| 6555 | + 'checkuser-locked' => 'Gulply', |
| 6556 | + 'checkuser-wasblocked' => 'Ozaldan blokirlenen', |
| 6557 | + 'checkuser-localonly' => 'Birleşdirilmedik', |
| 6558 | + 'checkuser-massblock' => 'Saýlanylan ulanyjylary blokirle', |
| 6559 | + 'checkuser-blocktag' => 'Ulanyjy sahypalaryny şuňa çalşyr:', |
| 6560 | + 'checkuser-blocktag-talk' => 'Pikir alyşma sahypalaryny şuňa çalşyr:', |
| 6561 | + 'checkuser-massblock-commit' => 'Saýlanylan ulanyjylary blokirle', |
| 6562 | + 'checkuser-block-success' => "'''$1 {{PLURAL:$2|ulanyjy|ulanyjy}} indi blokirlendi.'''", |
| 6563 | + 'checkuser-block-failure' => "'''Hiç bir ulanyjy blokirlenmedi.'''", |
| 6564 | + 'checkuser-block-limit' => 'Aşa köp ulanyjy saýlanyldy.', |
| 6565 | + 'checkuser-block-noreason' => 'Blokirlemeler üçin sebäp görkezmeli.', |
| 6566 | + 'checkuser-noreason' => 'Bu talap üçin sebäp görkezmeli.', |
| 6567 | + 'checkuser-accounts' => '$1 täze {{PLURAL:$1|hasap|hasap}}', |
| 6568 | + 'checkuser-user-nonexistent' => 'Görkezilen ulanyjy ýok.', |
| 6569 | + 'checkuser-search-form' => '$1-iň $2 bolan gündelik girişlerini tap', |
| 6570 | + 'checkuser-search-submit' => 'Gözle', |
| 6571 | + 'checkuser-search-initiator' => 'başladan', |
| 6572 | + 'checkuser-ipeditcount' => 'ähli ulanyjylardan ~$1', |
| 6573 | + 'checkuser-log-subpage' => 'Gündelik', |
| 6574 | + 'checkuser-log-userips' => '$1, $2 üçin IP adresleri aldy', |
| 6575 | + 'checkuser-log-ipedits' => '$1, $2 üçin özgerdişleri aldy', |
| 6576 | + 'checkuser-log-ipusers' => '$1, $2 üçin ulanyjylary aldy', |
| 6577 | + 'checkuser-log-ipedits-xff' => '$1, XFF $2 üçin özgerdişleri aldy', |
| 6578 | + 'checkuser-log-ipusers-xff' => '$1, XFF $2 üçin ulanyjylary aldy', |
| 6579 | + 'checkuser-log-useredits' => '$1, $2 üçin özgerdişleri aldy', |
| 6580 | + 'checkuser-autocreate-action' => 'awtomatik döredildi', |
| 6581 | + 'checkuser-email-action' => '"$1" ulanyjysyna e-poçta iberdi', |
| 6582 | + 'checkuser-reset-action' => '"$1" ulanyjysy üçin paroly başky ýagdaýa getirdi', |
| 6583 | +); |
| 6584 | + |
5644 | 6585 | /** Tagalog (Tagalog) |
5645 | 6586 | * @author AnakngAraw |
5646 | 6587 | */ |
— | — | @@ -5733,6 +6674,7 @@ |
5734 | 6675 | * @author Karduelis |
5735 | 6676 | * @author Mach |
5736 | 6677 | * @author Suelnur |
| 6678 | + * @author Vito Genovese |
5737 | 6679 | */ |
5738 | 6680 | $messages['tr'] = array( |
5739 | 6681 | 'checkuser-summary' => "Bu araç bir kullanıcı tarafından kullanılan IP'leri almak için son değişiklikleri tarar ya da bir IP için değişiklik/kullanıcı verisini gösterir. |
— | — | @@ -5752,7 +6694,7 @@ |
5753 | 6695 | 'checkuser-showlog' => 'Logu göster', |
5754 | 6696 | 'checkuser-log' => 'Denetçi kaydı', |
5755 | 6697 | 'checkuser-query' => 'Son değişiklikleri sorgula', |
5756 | | - 'checkuser-target' => 'Kullanıcı veya IP', |
| 6698 | + 'checkuser-target' => 'IP adresi veya kullanıcı adı:', |
5757 | 6699 | 'checkuser-users' => 'Kullanıcıları bulup getir', |
5758 | 6700 | 'checkuser-edits' => "IP'den değişiklikleri al", |
5759 | 6701 | 'checkuser-ips' => 'IPleri bulup getir', |
— | — | @@ -5787,8 +6729,9 @@ |
5788 | 6730 | 'checkuser-block-failure' => "'''Hiçbir kullanıcı engellenmedi.'''", |
5789 | 6731 | 'checkuser-block-limit' => 'Çok fazla kullanıcı seçildi.', |
5790 | 6732 | 'checkuser-block-noreason' => 'Engellemeler için bir neden belirtmelisiniz.', |
| 6733 | + 'checkuser-noreason' => 'Bu sorgu için bir sebep göstermelisiniz.', |
5791 | 6734 | 'checkuser-accounts' => '$1 yeni {{PLURAL:$1|hesap|hesap}}', |
5792 | | - 'checkuser-too-many' => "Çok fazla sonuç var, lütfen CIDR'ı daraltın. |
| 6735 | + 'checkuser-too-many' => "Çok fazla sonuç var (sorgu tahminine göre), lütfen CIDR'ı daraltın. |
5793 | 6736 | Kullanılan IP'ler (max 5000, adrese göre sıralı):", |
5794 | 6737 | 'checkuser-user-nonexistent' => 'Belirtilen kullanıcı mevcut değil.', |
5795 | 6738 | 'checkuser-search-form' => "$1'in $2 olduğu günlük girişlerini bul", |
— | — | @@ -5813,6 +6756,8 @@ |
5814 | 6757 | /** Ukrainian (Українська) |
5815 | 6758 | * @author AS |
5816 | 6759 | * @author Ahonc |
| 6760 | + * @author NickK |
| 6761 | + * @author Prima klasy4na |
5817 | 6762 | */ |
5818 | 6763 | $messages['uk'] = array( |
5819 | 6764 | 'checkuser-summary' => 'Цей засіб переглядає нові редагування для отримання IP-адрес, які використовував певний користувач, або щоб знайти редагування/користувача за IP-адресою. |
— | — | @@ -5822,6 +6767,7 @@ |
5823 | 6768 | 'checkuser-desc' => 'Надання можливості перевіряти IP-адреси та іншу інформацію користувачів', |
5824 | 6769 | 'checkuser-logcase' => 'Пошук у журналі чутливий до регістру.', |
5825 | 6770 | 'checkuser' => 'Перевірити користувача', |
| 6771 | + 'checkuser-contribs' => 'перевірити IP-адреси користувача', |
5826 | 6772 | 'group-checkuser' => "Чек'юзери", |
5827 | 6773 | 'group-checkuser-member' => "чек'юзер", |
5828 | 6774 | 'right-checkuser' => 'Перевірка IP-адрес та іншої інформації користувача', |
— | — | @@ -5830,10 +6776,10 @@ |
5831 | 6777 | 'checkuser-reason' => 'Причина:', |
5832 | 6778 | 'checkuser-showlog' => 'Показати журнал', |
5833 | 6779 | 'checkuser-log' => 'Журнал перевірки користувачів', |
5834 | | - 'checkuser-query' => 'Запитати останні зміни', |
5835 | | - 'checkuser-target' => 'Користувач або IP-адреса', |
| 6780 | + 'checkuser-query' => 'Переглянути останні зміни', |
| 6781 | + 'checkuser-target' => "IP-адреса або ім'я користувача:", |
5836 | 6782 | 'checkuser-users' => 'Отримати користувачів', |
5837 | | - 'checkuser-edits' => 'Запитати редагування, зроблені з IP-адреси', |
| 6783 | + 'checkuser-edits' => 'Отримати редагування, зроблені з IP-адреси', |
5838 | 6784 | 'checkuser-ips' => 'Запитати IP-адреси', |
5839 | 6785 | 'checkuser-account' => 'Отримати редагування з облікового запису', |
5840 | 6786 | 'checkuser-search' => 'Знайти', |
— | — | @@ -5842,6 +6788,8 @@ |
5843 | 6789 | 'checkuser-week-2' => 'останні два тижні', |
5844 | 6790 | 'checkuser-month' => 'останні 30 днів', |
5845 | 6791 | 'checkuser-all' => 'усі', |
| 6792 | + 'checkuser-cidr-label' => 'Знайти загальний діапазон і задіяні адреси для списку IP-адрес', |
| 6793 | + 'checkuser-cidr-res' => 'Спільний CIDR:', |
5846 | 6794 | 'checkuser-empty' => 'Журнал порожній.', |
5847 | 6795 | 'checkuser-nomatch' => 'Не знайдено співпадінь.', |
5848 | 6796 | 'checkuser-nomatch-edits' => 'Збіги не знайдені. |
— | — | @@ -5864,9 +6812,10 @@ |
5865 | 6813 | 'checkuser-block-failure' => "'''Немає заблокованих користувачів.'''", |
5866 | 6814 | 'checkuser-block-limit' => 'Вибрано забагато користувачів.', |
5867 | 6815 | 'checkuser-block-noreason' => 'Ви повинні вказати причину блокувань.', |
| 6816 | + 'checkuser-noreason' => 'Вам необхідно зазначити причину цього запиту.', |
5868 | 6817 | 'checkuser-accounts' => '$1 {{PLURAL:$1|новий обліковий запис|нові облікові записи|нових облікових записів}}', |
5869 | | - 'checkuser-too-many' => 'Забагато результатів. Будь ласка, звузьте CIDR. |
5870 | | -Використані IP (максимум 5000, відсортовано за адресою):', |
| 6818 | + 'checkuser-too-many' => 'Забагато результатів (згідно з оцінкою запиту), будь ласка, звузьте CIDR. |
| 6819 | +Використані IP (максимум 5000, відсортовані за адресою):', |
5871 | 6820 | 'checkuser-user-nonexistent' => 'Зазначений користувач не існує.', |
5872 | 6821 | 'checkuser-search-form' => 'Знайти записи журналу, де $1 є $2', |
5873 | 6822 | 'checkuser-search-submit' => 'Знайти', |
— | — | @@ -5905,7 +6854,7 @@ |
5906 | 6855 | 'checkuser-showlog' => 'Mostra el registro', |
5907 | 6856 | 'checkuser-log' => 'Registro dei checkuser', |
5908 | 6857 | 'checkuser-query' => 'Çerca ne le ultime modifiche', |
5909 | | - 'checkuser-target' => 'Utente o IP', |
| 6858 | + 'checkuser-target' => 'Utente o indirisso IP:', |
5910 | 6859 | 'checkuser-users' => 'Çerca utenti', |
5911 | 6860 | 'checkuser-edits' => 'Varda i contributi dei IP', |
5912 | 6861 | 'checkuser-ips' => 'Çerca IP', |
— | — | @@ -5940,8 +6889,9 @@ |
5941 | 6890 | 'checkuser-block-failure' => "'''Nissun utente blocà.'''", |
5942 | 6891 | 'checkuser-block-limit' => 'Ti gà selessionà massa utenti.', |
5943 | 6892 | 'checkuser-block-noreason' => 'Ti gà da dar na motivassion par i blochi.', |
| 6893 | + 'checkuser-noreason' => 'Te ghè da indicar na motivassion par sta richiesta.', |
5944 | 6894 | 'checkuser-accounts' => '$1 account {{PLURAL:$1|novo|novi}}', |
5945 | | - 'checkuser-too-many' => 'Xe vegnù fora massa risultati, par piaser dòpara un CIDR piassè ristreto. |
| 6895 | + 'checkuser-too-many' => 'Vien fora massa risultati (secondo la stima), par piaser dòpara un CIDR piassè ristreto. |
5946 | 6896 | Sti qua i xe i IP doparà (fin a un massimo de 5000, ordinà par indirizo):', |
5947 | 6897 | 'checkuser-user-nonexistent' => "L'utente indicà no l'esiste mìa.", |
5948 | 6898 | 'checkuser-search-form' => 'Cata fora le voçi del registro par le quali $1 el xe $2', |
— | — | @@ -5978,6 +6928,11 @@ |
5979 | 6929 | 'checkuser-edits' => 'Sada toižetusid, kudambad oma tehtud IP-adresalpäi', |
5980 | 6930 | 'checkuser-search' => 'Ectä', |
5981 | 6931 | 'checkuser-all' => 'kaik', |
| 6932 | + 'checkuser-blocked' => 'Blokiruidud', |
| 6933 | + 'checkuser-locked' => 'Luklostadud', |
| 6934 | + 'checkuser-search-submit' => 'Ectä', |
| 6935 | + 'checkuser-search-initiator' => 'iniciator', |
| 6936 | + 'checkuser-search-target' => 'met', |
5982 | 6937 | ); |
5983 | 6938 | |
5984 | 6939 | /** Vietnamese (Tiếng Việt) |
— | — | @@ -5999,7 +6954,7 @@ |
6000 | 6955 | 'checkuser-showlog' => 'Xem nhật trình', |
6001 | 6956 | 'checkuser-log' => 'Nhật trình CheckUser', |
6002 | 6957 | 'checkuser-query' => 'Truy vấn các thay đổi gần đây', |
6003 | | - 'checkuser-target' => 'Thành viên hay IP', |
| 6958 | + 'checkuser-target' => 'Tên người dùng hay địa chỉ IP:', |
6004 | 6959 | 'checkuser-users' => 'Lấy ra thành viên', |
6005 | 6960 | 'checkuser-edits' => 'Lấy ra sửa đổi của IP', |
6006 | 6961 | 'checkuser-ips' => 'Lấy ra IP', |
— | — | @@ -6033,8 +6988,9 @@ |
6034 | 6989 | 'checkuser-block-failure' => "'''Không ai bị cấm.'''", |
6035 | 6990 | 'checkuser-block-limit' => 'Đã chọn nhiều người dùng quá.', |
6036 | 6991 | 'checkuser-block-noreason' => 'Phải đưa ra lý do cấm.', |
6037 | | - 'checkuser-accounts' => '$1 tài khoản mới', |
6038 | | - 'checkuser-too-many' => 'Có quá nhiều kết quả, xin hãy thu hẹp CIDR. Đây là các IP sử dụng (tối đa 5000, xếp theo địa chỉ):', |
| 6992 | + 'checkuser-noreason' => 'Bạn phải đưa ra lý do truy vấn.', |
| 6993 | + 'checkuser-accounts' => '{{PLURAL:$1|tài khoản|tài khoản}} mới', |
| 6994 | + 'checkuser-too-many' => 'Có quá nhiều kết quả (theo ước lượng truy vấn). Xin hãy thu hẹp CIDR. Đây là các IP sử dụng (tối đa 5000, xếp theo địa chỉ):', |
6039 | 6995 | 'checkuser-user-nonexistent' => 'Thành viên chỉ định không tồn tại.', |
6040 | 6996 | 'checkuser-search-form' => 'Tìm thấy các mục nhật trình trong đó $1 là $2', |
6041 | 6997 | 'checkuser-search-submit' => 'Tìm kiếm', |
— | — | @@ -6138,9 +7094,15 @@ |
6139 | 7095 | * @author פוילישער |
6140 | 7096 | */ |
6141 | 7097 | $messages['yi'] = array( |
| 7098 | + 'checkuser' => 'בודק זײַן באניצער', |
| 7099 | + 'right-checkuser-log' => 'באקוקן דאס קאנטראל לאגבוך', |
| 7100 | + 'checkuser-reason' => 'אורזאַך:', |
| 7101 | + 'checkuser-showlog' => 'ווײַזן לאגבוך', |
| 7102 | + 'checkuser-log' => 'קאנטראל לאגבוך', |
6142 | 7103 | 'checkuser-target' => 'באניצער אדער IP אדרעס', |
6143 | 7104 | 'checkuser-search' => 'זוכן', |
6144 | 7105 | 'checkuser-week-1' => 'פֿאריגע וואך', |
| 7106 | + 'checkuser-week-2' => 'פֿאריגע צוויי וואכן', |
6145 | 7107 | 'checkuser-month' => 'פֿאריגע 30 טעג', |
6146 | 7108 | 'checkuser-all' => 'אלע', |
6147 | 7109 | 'checkuser-nomatch' => 'נישט געטראפֿן קיין פאָר.', |
— | — | @@ -6152,8 +7114,12 @@ |
6153 | 7115 | 'checkuser-blocked' => 'בלאקירט', |
6154 | 7116 | 'checkuser-gblocked' => 'בלאקירט גלאבאַליש', |
6155 | 7117 | 'checkuser-locked' => 'פֿאַרשלאסן', |
| 7118 | + 'checkuser-block-limit' => 'צופיל באניצער אויסגעקליבן', |
6156 | 7119 | 'checkuser-search-submit' => 'זוכן', |
6157 | 7120 | 'checkuser-search-target' => 'ציל', |
| 7121 | + 'checkuser-log-subpage' => 'לאגבוך', |
| 7122 | + 'checkuser-email-action' => 'געשיקט א בליצבריוו צו באניצער "$1"', |
| 7123 | + 'checkuser-reset-action' => 'צוריקשטעלן פאסווארט פאר באניצער "$1"', |
6158 | 7124 | ); |
6159 | 7125 | |
6160 | 7126 | /** Yue (粵語) */ |
— | — | @@ -6201,60 +7167,88 @@ |
6202 | 7168 | ); |
6203 | 7169 | |
6204 | 7170 | /** Simplified Chinese (中文(简体)) |
| 7171 | + * @author Gaoxuewei |
6205 | 7172 | * @author Gzdavidwong |
| 7173 | + * @author Jimmy xu wrk |
| 7174 | + * @author Liangent |
| 7175 | + * @author PhiLiP |
6206 | 7176 | * @author Wmr89502270 |
6207 | 7177 | */ |
6208 | 7178 | $messages['zh-hans'] = array( |
6209 | | - 'checkuser-summary' => '本工具会从{{int:recentchanges}}中查询使用者使用过的IP位址,或是一个IP位址发送出来的任何编辑记录。本工具支持IPv4及IPv6的位址。由于技术上的限制,本工具只能查询最近5000笔的记录。请确定你的行为符合守则。', |
6210 | | - 'checkuser-desc' => '让授权的用户检查用户的IP位址及其他资讯', |
6211 | | - 'checkuser-logcase' => '搜寻时请注意大小写的区分', |
6212 | | - 'checkuser' => '核对用户', |
| 7179 | + 'checkuser-summary' => '本工具会从最近更改中获取用户使用过的IP地址,可使用XFF头信息来获取同一客户端IP地址下的用户和编辑,即在IP地址后方附加“/xff”。本工具支持IPv4(CIDR 16-32)和IPv6(CIDR 96-128)。由于效率原因,本工具只能查询最近5000笔编辑次数。请确保你的操作符合方针。', |
| 7180 | + 'checkuser-desc' => '令已授权用户可以核查用户的IP地址及其他信息', |
| 7181 | + 'checkuser-logcase' => '日志搜索是区分大小写的。', |
| 7182 | + 'checkuser' => '帐户核查', |
| 7183 | + 'checkuser-contribs' => '核查用户IP地址', |
6213 | 7184 | 'group-checkuser' => '账户核查', |
6214 | 7185 | 'group-checkuser-member' => '账户核查', |
6215 | | - 'right-checkuser' => '查核用户的IP地址以及其它的资料', |
| 7186 | + 'right-checkuser' => '核查用户的IP地址和其他信息', |
| 7187 | + 'right-checkuser-log' => '查看帐户核查日志', |
6216 | 7188 | 'grouppage-checkuser' => '{{ns:project}}:账户核查', |
6217 | | - 'checkuser-reason' => '理由', |
| 7189 | + 'checkuser-reason' => '原因:', |
6218 | 7190 | 'checkuser-showlog' => '显示日志', |
6219 | | - 'checkuser-log' => '用户查核日志', |
| 7191 | + 'checkuser-log' => '帐户核查日志', |
6220 | 7192 | 'checkuser-query' => '查询最近更改', |
6221 | | - 'checkuser-target' => '用户名称或IP位扯', |
6222 | | - 'checkuser-users' => '查询用户名称', |
6223 | | - 'checkuser-edits' => '从IP位址查询编辑日志', |
6224 | | - 'checkuser-ips' => '查询IP位址', |
| 7193 | + 'checkuser-target' => '用户或IP地址:', |
| 7194 | + 'checkuser-users' => '获取用户', |
| 7195 | + 'checkuser-edits' => '根据IP地址获取编辑', |
| 7196 | + 'checkuser-ips' => '获取IP地址', |
| 7197 | + 'checkuser-account' => '获取帐户编辑', |
6225 | 7198 | 'checkuser-search' => '搜索', |
6226 | | - 'checkuser-week-1' => '上星期', |
6227 | | - 'checkuser-week-2' => '前两个星期', |
| 7199 | + 'checkuser-period' => '期限:', |
| 7200 | + 'checkuser-week-1' => '上周', |
| 7201 | + 'checkuser-week-2' => '前两周', |
6228 | 7202 | 'checkuser-month' => '前30天', |
6229 | 7203 | 'checkuser-all' => '所有', |
6230 | | - 'checkuser-empty' => '日志里没有资料。', |
6231 | | - 'checkuser-nomatch' => '没有符合的资讯', |
6232 | | - 'checkuser-check' => '查询', |
| 7204 | + 'checkuser-cidr-label' => '检查指定IP列表的共同区段', |
| 7205 | + 'checkuser-cidr-res' => '通用CIDR:', |
| 7206 | + 'checkuser-empty' => '日志里没有项目。', |
| 7207 | + 'checkuser-nomatch' => '找不到匹配项目。', |
| 7208 | + 'checkuser-nomatch-edits' => '找不到匹配项目。最近一次编辑于$1$2。', |
| 7209 | + 'checkuser-check' => '查核', |
6233 | 7210 | 'checkuser-log-fail' => '无法更新日志。', |
6234 | | - 'checkuser-nolog' => '找不到记录档', |
6235 | | - 'checkuser-blocked' => '已经查封', |
| 7211 | + 'checkuser-nolog' => '找不到日志文件。', |
| 7212 | + 'checkuser-blocked' => '已封禁', |
| 7213 | + 'checkuser-gblocked' => '全域封禁', |
6236 | 7214 | 'checkuser-locked' => '已锁定', |
6237 | | - 'checkuser-too-many' => '太多结果,请收窄CIDR。 |
6238 | | -这是使用过?IP (最多5000个,按地址排列):', |
6239 | | - 'checkuser-user-nonexistent' => '指定的使用者不存在。', |
6240 | | - 'checkuser-search-form' => '搜寻当 $1 是 $2 时之日志', |
| 7215 | + 'checkuser-wasblocked' => '曾封禁', |
| 7216 | + 'checkuser-localonly' => '未统一', |
| 7217 | + 'checkuser-massblock' => '封禁选中用户', |
| 7218 | + 'checkuser-massblock-text' => '被选中的帐户将被施以无限期封禁,并启用自动封禁、禁止帐户创建。被选中的IP地址将被封禁一周,仅针对IP用户且禁止帐户创建。', |
| 7219 | + 'checkuser-blocktag' => '替换用户页内容:', |
| 7220 | + 'checkuser-blocktag-talk' => '替换讨论页内容:', |
| 7221 | + 'checkuser-massblock-commit' => '封禁选中用户', |
| 7222 | + 'checkuser-block-success' => "'''{{PLURAL:$2|用户|用户}} $1 {{PLURAL:$2|已被|已被}} 封禁。'''", |
| 7223 | + 'checkuser-block-failure' => "'''未有用户被封禁。'''", |
| 7224 | + 'checkuser-block-limit' => '选中用户数量过多。', |
| 7225 | + 'checkuser-block-noreason' => '你必须解释此次封禁的原因。', |
| 7226 | + 'checkuser-noreason' => '你必须解释此次查询的原因。', |
| 7227 | + 'checkuser-accounts' => '$1个新帐户', |
| 7228 | + 'checkuser-too-many' => '结果过多(根据查询估计),请缩小CIDR的范围。 |
| 7229 | +下面列出了使用过的IP地址(最多5000个,按地址排列):', |
| 7230 | + 'checkuser-user-nonexistent' => '指定的用户不存在。', |
| 7231 | + 'checkuser-search-form' => '查找当 $1 是 $2 时的日志记录', |
6241 | 7232 | 'checkuser-search-submit' => '搜索', |
6242 | | - 'checkuser-search-initiator' => '创始者', |
| 7233 | + 'checkuser-search-initiator' => '操作者', |
6243 | 7234 | 'checkuser-search-target' => '目标', |
6244 | 7235 | 'checkuser-ipeditcount' => '~在全部用户中$1', |
6245 | 7236 | 'checkuser-log-subpage' => '日志', |
6246 | 7237 | 'checkuser-log-return' => '回到查核主表单', |
| 7238 | + 'checkuser-limited' => "'''结果已因效率原因而被删减。'''", |
6247 | 7239 | 'checkuser-log-userips' => '$1取得$2的IP信息', |
6248 | 7240 | 'checkuser-log-ipedits' => '$1取得$2的编辑记录', |
6249 | 7241 | 'checkuser-log-ipusers' => '$1取得$2的用户信息', |
6250 | | - 'checkuser-log-ipedits-xff' => '$1取得 XFF $2的编辑记录', |
6251 | | - 'checkuser-log-ipusers-xff' => '$1取得 XFF $2的用户信息', |
6252 | | - 'checkuser-autocreate-action' => '已经自动建立', |
| 7242 | + 'checkuser-log-ipedits-xff' => '$1取得XFF $2的编辑记录', |
| 7243 | + 'checkuser-log-ipusers-xff' => '$1取得XFF $2的用户信息', |
| 7244 | + 'checkuser-log-useredits' => '$1取得$2的编辑记录', |
| 7245 | + 'checkuser-autocreate-action' => '已自动创建', |
6253 | 7246 | 'checkuser-email-action' => '向用户“$1”发送电邮', |
6254 | | - 'checkuser-reset-action' => '为用户“$1”重新设置密码', |
| 7247 | + 'checkuser-reset-action' => '为用户“$1”重置密码', |
6255 | 7248 | ); |
6256 | 7249 | |
6257 | 7250 | /** Traditional Chinese (中文(繁體)) |
6258 | 7251 | * @author Alexsh |
| 7252 | + * @author Liangent |
6259 | 7253 | * @author Wrightbus |
6260 | 7254 | */ |
6261 | 7255 | $messages['zh-hant'] = array( |
— | — | @@ -6262,28 +7256,53 @@ |
6263 | 7257 | 'checkuser-desc' => '讓授權的使用者檢查使用者的IP位址及其他資訊', |
6264 | 7258 | 'checkuser-logcase' => '搜尋時請注意大小寫的區分', |
6265 | 7259 | 'checkuser' => '核對用戶', |
| 7260 | + 'checkuser-contribs' => '核查用戶IP地址', |
6266 | 7261 | 'group-checkuser' => '用戶查核', |
6267 | 7262 | 'group-checkuser-member' => '用戶查核', |
6268 | 7263 | 'right-checkuser' => '查核用戶的IP地址以及其它的資料', |
| 7264 | + 'right-checkuser-log' => '查看帳戶核查日誌', |
6269 | 7265 | 'grouppage-checkuser' => '{{ns:project}}:用戶查核', |
6270 | 7266 | 'checkuser-reason' => '理由', |
6271 | 7267 | 'checkuser-showlog' => '顯示記錄', |
6272 | 7268 | 'checkuser-log' => '用戶查核記錄', |
6273 | 7269 | 'checkuser-query' => '查詢最近更改', |
6274 | | - 'checkuser-target' => '用戶名稱或IP位扯', |
| 7270 | + 'checkuser-target' => '用戶或IP地址:', |
6275 | 7271 | 'checkuser-users' => '查詢用戶名稱', |
6276 | 7272 | 'checkuser-edits' => '從IP位址查詢編輯記錄', |
6277 | 7273 | 'checkuser-ips' => '查詢IP位址', |
| 7274 | + 'checkuser-account' => '獲取帳戶編輯', |
6278 | 7275 | 'checkuser-search' => '搜尋', |
| 7276 | + 'checkuser-period' => '期限:', |
| 7277 | + 'checkuser-week-1' => '一星期內', |
| 7278 | + 'checkuser-week-2' => '兩星期內', |
| 7279 | + 'checkuser-month' => '30天內', |
| 7280 | + 'checkuser-all' => '全部', |
| 7281 | + 'checkuser-cidr-label' => '檢查指定IP列表的共同區段', |
| 7282 | + 'checkuser-cidr-res' => '通用CIDR:', |
6279 | 7283 | 'checkuser-empty' => '記錄裡沒有資料。', |
6280 | 7284 | 'checkuser-nomatch' => '沒有符合的資訊', |
| 7285 | + 'checkuser-nomatch-edits' => '找不到匹配項目。最近一次編輯於$1$2。', |
6281 | 7286 | 'checkuser-check' => '查詢', |
6282 | 7287 | 'checkuser-log-fail' => '無法更新記錄。', |
6283 | 7288 | 'checkuser-nolog' => '找不到記錄檔', |
6284 | 7289 | 'checkuser-blocked' => '已經查封', |
| 7290 | + 'checkuser-gblocked' => '全域封禁', |
6285 | 7291 | 'checkuser-locked' => '已鎖定', |
6286 | | - 'checkuser-too-many' => '太多結果,請收窄CIDR。 |
6287 | | -這是使用過嘅IP (最多5000個,按地址排列):', |
| 7292 | + 'checkuser-wasblocked' => '曾封禁', |
| 7293 | + 'checkuser-localonly' => '未統一', |
| 7294 | + 'checkuser-massblock' => '封禁選中用戶', |
| 7295 | + 'checkuser-massblock-text' => '被選中的帳戶將被施以無限期封禁,並啟用自動封禁、禁止帳戶創建。被選中的IP地址將被封禁一周,僅針對IP用戶且禁止帳戶創建。', |
| 7296 | + 'checkuser-blocktag' => '替換用戶頁內容:', |
| 7297 | + 'checkuser-blocktag-talk' => '替換討論頁內容:', |
| 7298 | + 'checkuser-massblock-commit' => '封禁選中用戶', |
| 7299 | + 'checkuser-block-success' => "'''{{PLURAL:$2|用戶|用戶}} $1 {{PLURAL:$2|已被|已被}} 封禁。'''", |
| 7300 | + 'checkuser-block-failure' => "'''未有使用者被封禁。'''", |
| 7301 | + 'checkuser-block-limit' => '選中用戶數量過多。', |
| 7302 | + 'checkuser-block-noreason' => '您必須提供進行封禁的理由。', |
| 7303 | + 'checkuser-noreason' => '您必須提供進行查詢的理由。', |
| 7304 | + 'checkuser-accounts' => '$1個新帳戶', |
| 7305 | + 'checkuser-too-many' => '結果過多(根據查詢估計),請縮小CIDR的範圍。 |
| 7306 | +下面列出了使用過的IP地址(最多5000個,按地址排列):', |
6288 | 7307 | 'checkuser-user-nonexistent' => '指定的使用者不存在。', |
6289 | 7308 | 'checkuser-search-form' => '搜尋當 $1 是 $2 時之日誌', |
6290 | 7309 | 'checkuser-search-submit' => '{{int:Search}}', |
— | — | @@ -6292,11 +7311,13 @@ |
6293 | 7312 | 'checkuser-ipeditcount' => '~在全部用戶中$1', |
6294 | 7313 | 'checkuser-log-subpage' => '日誌', |
6295 | 7314 | 'checkuser-log-return' => '回到主表單', |
| 7315 | + 'checkuser-limited' => "'''結果已因效率原因而被刪減。'''", |
6296 | 7316 | 'checkuser-log-userips' => '$1取得$2的IP訊息', |
6297 | 7317 | 'checkuser-log-ipedits' => '$1取得$2的編輯記錄', |
6298 | 7318 | 'checkuser-log-ipusers' => '$1取得$2的用戶訊息', |
6299 | 7319 | 'checkuser-log-ipedits-xff' => '$1取得 XFF $2的編輯記錄', |
6300 | 7320 | 'checkuser-log-ipusers-xff' => '$1取得 XFF $2的用戶訊息', |
| 7321 | + 'checkuser-log-useredits' => '$1取得$2的編輯記錄', |
6301 | 7322 | 'checkuser-autocreate-action' => '經已自動建立', |
6302 | 7323 | 'checkuser-email-action' => '向使用者「$1」發送電郵', |
6303 | 7324 | 'checkuser-reset-action' => '為使用者「$1」重設密碼', |
Property changes on: branches/new-checkuser/CheckUser.i18n.php |
___________________________________________________________________ |
Deleted: svn:eol-style |
6304 | 7325 | - native |
Index: branches/new-checkuser/CheckUser.php |
— | — | @@ -1,30 +1,50 @@ |
2 | 2 | <?php |
| 3 | +/** |
| 4 | + * CheckUser extension - grants users with the appropriate permission the |
| 5 | + * ability to check user's IP addresses and other information. |
| 6 | + * |
| 7 | + * @file |
| 8 | + * @ingroup Extensions |
| 9 | + * @version 2.3 |
| 10 | + * @author Tim Starling |
| 11 | + * @author Aaron Schulz |
| 12 | + * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later |
| 13 | + * @link http://www.mediawiki.org/wiki/Extension:CheckUser Documentation |
| 14 | + */ |
3 | 15 | |
4 | 16 | # Not a valid entry point, skip unless MEDIAWIKI is defined |
5 | | -if (!defined('MEDIAWIKI')) { |
| 17 | +if ( !defined( 'MEDIAWIKI' ) ) { |
6 | 18 | echo "CheckUser extension"; |
7 | | - exit(1); |
| 19 | + exit( 1 ); |
8 | 20 | } |
9 | 21 | |
10 | 22 | # Internationalisation file |
11 | | -$dir = dirname(__FILE__) . '/'; |
12 | | -$wgExtensionMessagesFiles['SpecialCheckUser'] = $dir . 'CheckUser.i18n.php'; |
13 | | -$wgExtensionAliasesFiles['SpecialCheckUser'] = $dir . 'CheckUser.alias.php'; |
| 23 | +$dir = dirname( __FILE__ ) . '/'; |
| 24 | +$wgExtensionMessagesFiles['CheckUser'] = $dir . 'CheckUser.i18n.php'; |
| 25 | +$wgExtensionAliasesFiles['CheckUser'] = $dir . 'CheckUser.alias.php'; |
14 | 26 | |
| 27 | +// Extension credits that will show up on Special:Version |
15 | 28 | $wgExtensionCredits['specialpage'][] = array( |
16 | 29 | 'path' => __FILE__, |
17 | 30 | 'author' => array( 'Tim Starling', 'Aaron Schulz' ), |
18 | 31 | 'name' => 'CheckUser', |
| 32 | + 'version' => '2.3', |
19 | 33 | 'url' => 'http://www.mediawiki.org/wiki/Extension:CheckUser', |
20 | | - 'description' => 'Grants users with the appropriate permission the ability to check user\'s IP addresses and other information', |
21 | 34 | 'descriptionmsg'=> 'checkuser-desc', |
22 | 35 | ); |
23 | 36 | |
| 37 | +// New user rights |
| 38 | +// 'checkuser' right is required to query IPs/users through Special:CheckUser |
| 39 | +// 'checkuser-log' is required to view the private log of checkuser checks |
24 | 40 | $wgAvailableRights[] = 'checkuser'; |
25 | 41 | $wgAvailableRights[] = 'checkuser-log'; |
26 | 42 | $wgGroupPermissions['checkuser']['checkuser'] = true; |
27 | 43 | $wgGroupPermissions['checkuser']['checkuser-log'] = true; |
28 | 44 | |
| 45 | +// Legacy variable, no longer used. Used to point to a file in the server where |
| 46 | +// CheckUser would log all queries done through Special:CheckUser. |
| 47 | +// If this file exists, the installer will try to import data from this file to |
| 48 | +// the 'cu_log' table in the database. |
29 | 49 | $wgCheckUserLog = '/home/wikipedia/logs/checkuser.log'; |
30 | 50 | |
31 | 51 | # How long to keep CU data? |
— | — | @@ -33,8 +53,13 @@ |
34 | 54 | # Mass block limits |
35 | 55 | $wgCheckUserMaxBlocks = 200; |
36 | 56 | |
37 | | -$wgCheckUserStyleVersion = 4; |
| 57 | +// Set this to true if you want to force checkusers into giving a reason for |
| 58 | +// each check they do through Special:CheckUser. |
| 59 | +$wgCheckUserForceSummary = false; |
38 | 60 | |
| 61 | +// Increment this number every time you touch the .js file. |
| 62 | +$wgCheckUserStyleVersion = 5; |
| 63 | + |
39 | 64 | # Recent changes data hook |
40 | 65 | global $wgHooks; |
41 | 66 | $wgHooks['RecentChange_save'][] = 'efUpdateCheckUserData'; |
— | — | @@ -46,14 +71,6 @@ |
47 | 72 | $wgHooks['LoadExtensionSchemaUpdates'][] = 'efCheckUserSchemaUpdates'; |
48 | 73 | $wgHooks['ContributionsToolLinks'][] = 'efLoadCheckUserLink'; |
49 | 74 | |
50 | | -# Setup classes |
51 | | -$wgSpecialPages['CheckUser'] = 'SpecialCheckUser'; |
52 | | -$wgSpecialPageGroups['CheckUser'] = 'users'; |
53 | | -$wgAutoloadClasses['CheckUser'] = dirname(__FILE__) . '/CheckUser_body.php'; |
54 | | -$wgAutoloadClasses['SpecialCheckUser'] = dirname(__FILE__) . '/SpecialCheckUser.php'; |
55 | | -$wgAutoloadClasses['CheckUserApi'] = dirname(__FILE__) . '/CheckUser_api.php'; |
56 | | -$wgAPIModules['checkuser'] = 'CheckUserApi'; |
57 | | - |
58 | 75 | /** |
59 | 76 | * Hook function for RecentChange_save |
60 | 77 | * Saves user data into the cu_changes table |
— | — | @@ -66,7 +83,7 @@ |
67 | 84 | $ip = wfGetIP(); |
68 | 85 | // Get XFF header |
69 | 86 | $xff = wfGetForwardedFor(); |
70 | | - list($xff_ip,$trusted) = efGetClientIPfromXFF( $xff ); |
| 87 | + list( $xff_ip, $trusted ) = efGetClientIPfromXFF( $xff ); |
71 | 88 | // Our squid XFFs can flood this up sometimes |
72 | 89 | $isSquidOnly = efXFFChainIsSquid( $xff ); |
73 | 90 | // Get agent |
— | — | @@ -75,13 +92,15 @@ |
76 | 93 | // $rc_comment should just be the log_comment |
77 | 94 | // BC: check if log_type and log_action exists |
78 | 95 | // If not, then $rc_comment is the actiontext and comment |
79 | | - if( isset($rc_log_type) && $rc_type==RC_LOG ) { |
| 96 | + if( isset( $rc_log_type ) && $rc_type == RC_LOG ) { |
80 | 97 | $target = Title::makeTitle( $rc_namespace, $rc_title ); |
81 | | - $actionText = LogPage::actionText( $rc_log_type, $rc_log_action, $target, NULL, LogPage::extractParams($rc_params) ); |
| 98 | + $actionText = LogPage::actionText( $rc_log_type, $rc_log_action, $target, |
| 99 | + null, LogPage::extractParams( $rc_params ) |
| 100 | + ); |
82 | 101 | } else { |
83 | 102 | $actionText = ''; |
84 | 103 | } |
85 | | - |
| 104 | + |
86 | 105 | $dbw = wfGetDB( DB_MASTER ); |
87 | 106 | $cuc_id = $dbw->nextSequenceValue( 'cu_changes_cu_id_seq' ); |
88 | 107 | $rcRow = array( |
— | — | @@ -97,29 +116,28 @@ |
98 | 117 | 'cuc_last_oldid' => $rc_last_oldid, |
99 | 118 | 'cuc_type' => $rc_type, |
100 | 119 | 'cuc_timestamp' => $rc_timestamp, |
101 | | - 'cuc_ip' => IP::sanitizeIP($ip), |
| 120 | + 'cuc_ip' => IP::sanitizeIP( $ip ), |
102 | 121 | 'cuc_ip_hex' => $ip ? IP::toHex( $ip ) : null, |
103 | 122 | 'cuc_xff' => !$isSquidOnly ? $xff : '', |
104 | | - 'cuc_xff_hex' => ($xff_ip && !$isSquidOnly) ? IP::toHex( $xff_ip ) : null, |
| 123 | + 'cuc_xff_hex' => ( $xff_ip && !$isSquidOnly ) ? IP::toHex( $xff_ip ) : null, |
105 | 124 | 'cuc_agent' => $agent |
106 | 125 | ); |
107 | 126 | # On PG, MW unsets cur_id due to schema incompatibilites. So it may not be set! |
108 | | - if( isset($rc_cur_id) ) { |
| 127 | + if( isset( $rc_cur_id ) ) { |
109 | 128 | $rcRow['cuc_page_id'] = $rc_cur_id; |
110 | 129 | } |
111 | 130 | $dbw->insert( 'cu_changes', $rcRow, __METHOD__ ); |
112 | 131 | |
113 | 132 | # Every 100th edit, prune the checkuser changes table. |
114 | | - wfSeedRandom(); |
115 | 133 | if( 0 == mt_rand( 0, 99 ) ) { |
116 | 134 | # Periodically flush old entries from the recentchanges table. |
117 | 135 | global $wgCUDMaxAge; |
118 | 136 | $cutoff = $dbw->timestamp( time() - $wgCUDMaxAge ); |
119 | 137 | $recentchanges = $dbw->tableName( 'cu_changes' ); |
120 | 138 | $sql = "DELETE FROM $recentchanges WHERE cuc_timestamp < '{$cutoff}'"; |
121 | | - $dbw->query( $sql ); |
| 139 | + $dbw->query( $sql, __METHOD__ ); |
122 | 140 | } |
123 | | - |
| 141 | + |
124 | 142 | return true; |
125 | 143 | } |
126 | 144 | |
— | — | @@ -131,7 +149,7 @@ |
132 | 150 | wfLoadExtensionMessages( 'CheckUser' ); |
133 | 151 | // Get XFF header |
134 | 152 | $xff = wfGetForwardedFor(); |
135 | | - list($xff_ip,$trusted) = efGetClientIPfromXFF( $xff ); |
| 153 | + list( $xff_ip, $trusted ) = efGetClientIPfromXFF( $xff ); |
136 | 154 | // Our squid XFFs can flood this up sometimes |
137 | 155 | $isSquidOnly = efXFFChainIsSquid( $xff ); |
138 | 156 | // Get agent |
— | — | @@ -145,20 +163,20 @@ |
146 | 164 | 'cuc_minor' => 0, |
147 | 165 | 'cuc_user' => $user->getId(), |
148 | 166 | 'cuc_user_text' => $user->getName(), |
149 | | - 'cuc_actiontext' => wfMsgForContent('checkuser-reset-action',$account->getName()), |
| 167 | + 'cuc_actiontext' => wfMsgForContent( 'checkuser-reset-action', $account->getName() ), |
150 | 168 | 'cuc_comment' => '', |
151 | 169 | 'cuc_this_oldid' => 0, |
152 | 170 | 'cuc_last_oldid' => 0, |
153 | 171 | 'cuc_type' => RC_LOG, |
154 | 172 | 'cuc_timestamp' => $dbw->timestamp( wfTimestampNow() ), |
155 | | - 'cuc_ip' => IP::sanitizeIP($ip), |
| 173 | + 'cuc_ip' => IP::sanitizeIP( $ip ), |
156 | 174 | 'cuc_ip_hex' => $ip ? IP::toHex( $ip ) : null, |
157 | 175 | 'cuc_xff' => !$isSquidOnly ? $xff : '', |
158 | | - 'cuc_xff_hex' => ($xff_ip && !$isSquidOnly) ? IP::toHex( $xff_ip ) : null, |
| 176 | + 'cuc_xff_hex' => ( $xff_ip && !$isSquidOnly ) ? IP::toHex( $xff_ip ) : null, |
159 | 177 | 'cuc_agent' => $agent |
160 | 178 | ); |
161 | 179 | $dbw->insert( 'cu_changes', $rcRow, __METHOD__ ); |
162 | | - |
| 180 | + |
163 | 181 | return true; |
164 | 182 | } |
165 | 183 | |
— | — | @@ -179,7 +197,7 @@ |
180 | 198 | $ip = wfGetIP(); |
181 | 199 | // Get XFF header |
182 | 200 | $xff = wfGetForwardedFor(); |
183 | | - list($xff_ip,$trusted) = efGetClientIPfromXFF( $xff ); |
| 201 | + list( $xff_ip, $trusted ) = efGetClientIPfromXFF( $xff ); |
184 | 202 | // Our squid XFFs can flood this up sometimes |
185 | 203 | $isSquidOnly = efXFFChainIsSquid( $xff ); |
186 | 204 | // Get agent |
— | — | @@ -193,20 +211,20 @@ |
194 | 212 | 'cuc_minor' => 0, |
195 | 213 | 'cuc_user' => $userFrom->getId(), |
196 | 214 | 'cuc_user_text' => $userFrom->getName(), |
197 | | - 'cuc_actiontext' => wfMsgForContent('checkuser-email-action',$hash), |
| 215 | + 'cuc_actiontext' => wfMsgForContent( 'checkuser-email-action', $hash ), |
198 | 216 | 'cuc_comment' => '', |
199 | 217 | 'cuc_this_oldid' => 0, |
200 | 218 | 'cuc_last_oldid' => 0, |
201 | 219 | 'cuc_type' => RC_LOG, |
202 | 220 | 'cuc_timestamp' => $dbw->timestamp( wfTimestampNow() ), |
203 | | - 'cuc_ip' => IP::sanitizeIP($ip), |
| 221 | + 'cuc_ip' => IP::sanitizeIP( $ip ), |
204 | 222 | 'cuc_ip_hex' => $ip ? IP::toHex( $ip ) : null, |
205 | 223 | 'cuc_xff' => !$isSquidOnly ? $xff : '', |
206 | | - 'cuc_xff_hex' => ($xff_ip && !$isSquidOnly) ? IP::toHex( $xff_ip ) : null, |
| 224 | + 'cuc_xff_hex' => ( $xff_ip && !$isSquidOnly ) ? IP::toHex( $xff_ip ) : null, |
207 | 225 | 'cuc_agent' => $agent |
208 | 226 | ); |
209 | 227 | $dbw->insert( 'cu_changes', $rcRow, __METHOD__ ); |
210 | | - |
| 228 | + |
211 | 229 | return true; |
212 | 230 | } |
213 | 231 | |
— | — | @@ -215,41 +233,41 @@ |
216 | 234 | * Saves user data into the cu_changes table |
217 | 235 | */ |
218 | 236 | function efUpdateAutoCreateData( $user ) { |
219 | | - wfLoadExtensionMessages( 'CheckUser' ); |
220 | | - // Get IP |
221 | | - $ip = wfGetIP(); |
222 | | - // Get XFF header |
223 | | - $xff = wfGetForwardedFor(); |
224 | | - list($xff_ip,$trusted) = efGetClientIPfromXFF( $xff ); |
225 | | - // Our squid XFFs can flood this up sometimes |
226 | | - $isSquidOnly = efXFFChainIsSquid( $xff ); |
227 | | - // Get agent |
228 | | - $agent = wfGetAgent(); |
229 | | - $dbw = wfGetDB( DB_MASTER ); |
230 | | - $cuc_id = $dbw->nextSequenceValue( 'cu_changes_cu_id_seq' ); |
231 | | - $rcRow = array( |
232 | | - 'cuc_id' => $cuc_id, |
233 | | - 'cuc_page_id' => 0, |
234 | | - 'cuc_namespace' => NS_USER, |
235 | | - 'cuc_title' => '', |
236 | | - 'cuc_minor' => 0, |
237 | | - 'cuc_user' => $user->getId(), |
238 | | - 'cuc_user_text' => $user->getName(), |
239 | | - 'cuc_actiontext' => wfMsgForContent('checkuser-autocreate-action'), |
240 | | - 'cuc_comment' => '', |
241 | | - 'cuc_this_oldid' => 0, |
242 | | - 'cuc_last_oldid' => 0, |
243 | | - 'cuc_type' => RC_LOG, |
244 | | - 'cuc_timestamp' => $dbw->timestamp( wfTimestampNow() ), |
245 | | - 'cuc_ip' => IP::sanitizeIP($ip), |
246 | | - 'cuc_ip_hex' => $ip ? IP::toHex( $ip ) : null, |
247 | | - 'cuc_xff' => !$isSquidOnly ? $xff : '', |
248 | | - 'cuc_xff_hex' => ($xff_ip && !$isSquidOnly) ? IP::toHex( $xff_ip ) : null, |
249 | | - 'cuc_agent' => $agent |
250 | | - ); |
251 | | - $dbw->insert( 'cu_changes', $rcRow, __METHOD__ ); |
252 | | - |
253 | | - return true; |
| 237 | + wfLoadExtensionMessages( 'CheckUser' ); |
| 238 | + // Get IP |
| 239 | + $ip = wfGetIP(); |
| 240 | + // Get XFF header |
| 241 | + $xff = wfGetForwardedFor(); |
| 242 | + list( $xff_ip, $trusted ) = efGetClientIPfromXFF( $xff ); |
| 243 | + // Our squid XFFs can flood this up sometimes |
| 244 | + $isSquidOnly = efXFFChainIsSquid( $xff ); |
| 245 | + // Get agent |
| 246 | + $agent = wfGetAgent(); |
| 247 | + $dbw = wfGetDB( DB_MASTER ); |
| 248 | + $cuc_id = $dbw->nextSequenceValue( 'cu_changes_cu_id_seq' ); |
| 249 | + $rcRow = array( |
| 250 | + 'cuc_id' => $cuc_id, |
| 251 | + 'cuc_page_id' => 0, |
| 252 | + 'cuc_namespace' => NS_USER, |
| 253 | + 'cuc_title' => '', |
| 254 | + 'cuc_minor' => 0, |
| 255 | + 'cuc_user' => $user->getId(), |
| 256 | + 'cuc_user_text' => $user->getName(), |
| 257 | + 'cuc_actiontext' => wfMsgForContent( 'checkuser-autocreate-action' ), |
| 258 | + 'cuc_comment' => '', |
| 259 | + 'cuc_this_oldid' => 0, |
| 260 | + 'cuc_last_oldid' => 0, |
| 261 | + 'cuc_type' => RC_LOG, |
| 262 | + 'cuc_timestamp' => $dbw->timestamp( wfTimestampNow() ), |
| 263 | + 'cuc_ip' => IP::sanitizeIP( $ip ), |
| 264 | + 'cuc_ip_hex' => $ip ? IP::toHex( $ip ) : null, |
| 265 | + 'cuc_xff' => !$isSquidOnly ? $xff : '', |
| 266 | + 'cuc_xff_hex' => ( $xff_ip && !$isSquidOnly ) ? IP::toHex( $xff_ip ) : null, |
| 267 | + 'cuc_agent' => $agent |
| 268 | + ); |
| 269 | + $dbw->insert( 'cu_changes', $rcRow, __METHOD__ ); |
| 270 | + |
| 271 | + return true; |
254 | 272 | } |
255 | 273 | |
256 | 274 | /** |
— | — | @@ -258,26 +276,28 @@ |
259 | 277 | * @param string $address, the ip that sent this header (optional) |
260 | 278 | * @return array( string, bool ) |
261 | 279 | */ |
262 | | -function efGetClientIPfromXFF( $xff, $address=NULL ) { |
263 | | - if( !$xff ) |
264 | | - return array(null, false); |
| 280 | +function efGetClientIPfromXFF( $xff, $address = null ) { |
| 281 | + if( !$xff ) { |
| 282 | + return array( null, false ); |
| 283 | + } |
265 | 284 | // Avoid annoyingly long xff hacks |
266 | 285 | $xff = trim( substr( $xff, 0, 255 ) ); |
267 | 286 | $client = null; |
268 | 287 | $trusted = true; |
269 | 288 | // Check each IP, assuming they are separated by commas |
270 | | - $ips = explode(',',$xff); |
| 289 | + $ips = explode( ',', $xff ); |
271 | 290 | foreach( $ips as $n => $ip ) { |
272 | | - $ip = trim($ip); |
| 291 | + $ip = trim( $ip ); |
273 | 292 | // If it is a valid IP, not a hash or such |
274 | | - if( IP::isIPAddress($ip) ) { |
| 293 | + if( IP::isIPAddress( $ip ) ) { |
275 | 294 | # The first IP should be the client. |
276 | 295 | # Start only from the first public IP. |
277 | | - if( is_null($client) ) { |
278 | | - if( IP::isPublic($ip) ) |
| 296 | + if( is_null( $client ) ) { |
| 297 | + if( IP::isPublic( $ip ) ) { |
279 | 298 | $client = $ip; |
| 299 | + } |
280 | 300 | # Check that all servers are trusted |
281 | | - } else if( !wfIsTrustedProxy($ip) ) { |
| 301 | + } elseif( !wfIsTrustedProxy( $ip ) ) { |
282 | 302 | $trusted = false; |
283 | 303 | break; |
284 | 304 | } |
— | — | @@ -285,44 +305,46 @@ |
286 | 306 | } |
287 | 307 | // We still have to test if the IP that sent |
288 | 308 | // this header is trusted to confirm results |
289 | | - if ( $client != $address && (!$address || !wfIsTrustedProxy($address)) ) |
| 309 | + if ( $client != $address && ( !$address || !wfIsTrustedProxy( $address ) ) ) { |
290 | 310 | $trusted = false; |
291 | | - |
| 311 | + } |
| 312 | + |
292 | 313 | return array( $client, $trusted ); |
293 | 314 | } |
294 | 315 | |
295 | 316 | function efXFFChainIsSquid( $xff ) { |
296 | 317 | global $wgSquidServers, $wgSquidServersNoPurge; |
297 | 318 | |
298 | | - if ( !$xff ) |
| 319 | + if ( !$xff ) { |
299 | 320 | false; |
| 321 | + } |
300 | 322 | // Avoid annoyingly long xff hacks |
301 | 323 | $xff = trim( substr( $xff, 0, 255 ) ); |
302 | 324 | $squidOnly = true; |
303 | 325 | // Check each IP, assuming they are separated by commas |
304 | | - $ips = explode(',',$xff); |
| 326 | + $ips = explode( ',', $xff ); |
305 | 327 | foreach( $ips as $n => $ip ) { |
306 | | - $ip = trim($ip); |
| 328 | + $ip = trim( $ip ); |
307 | 329 | // If it is a valid IP, not a hash or such |
308 | | - if ( IP::isIPAddress($ip) ) { |
309 | | - if ( $n==0 ) { |
| 330 | + if ( IP::isIPAddress( $ip ) ) { |
| 331 | + if ( $n == 0 ) { |
310 | 332 | // The first IP should be the client... |
311 | | - } else if ( !in_array($ip,$wgSquidServers) && !in_array($ip,$wgSquidServersNoPurge) ) { |
| 333 | + } elseif ( !in_array( $ip, $wgSquidServers ) && !in_array( $ip, $wgSquidServersNoPurge ) ) { |
312 | 334 | $squidOnly = false; |
313 | 335 | break; |
314 | 336 | } |
315 | 337 | } |
316 | 338 | } |
317 | | - |
| 339 | + |
318 | 340 | return $squidOnly; |
319 | 341 | } |
320 | 342 | |
321 | 343 | function efCheckUserSchemaUpdates() { |
322 | 344 | global $wgDBtype, $wgExtNewIndexes; |
323 | | - |
| 345 | + |
324 | 346 | # Run install.inc as necessary |
325 | | - $base = dirname(__FILE__); |
326 | | - |
| 347 | + $base = dirname( __FILE__ ); |
| 348 | + |
327 | 349 | $db = wfGetDB( DB_MASTER ); |
328 | 350 | if( $db->tableExists( 'cu_changes' ) ) { |
329 | 351 | echo "...cu_changes already exists.\n"; |
— | — | @@ -330,19 +352,23 @@ |
331 | 353 | require_once "$base/install.inc"; |
332 | 354 | create_cu_changes( $db ); |
333 | 355 | } |
334 | | - |
| 356 | + |
335 | 357 | if( $db->tableExists( 'cu_log' ) ) { |
336 | 358 | echo "...cu_log already exists.\n"; |
337 | 359 | } else { |
338 | 360 | require_once "$base/install.inc"; |
339 | 361 | create_cu_log( $db ); |
340 | 362 | } |
341 | | - |
342 | | - if ($wgDBtype == 'mysql') { |
343 | | - $wgExtNewIndexes[] = array('cu_changes', 'cuc_ip_hex_time', |
344 | | - "$base/archives/patch-cu_changes_indexes.sql" ); |
345 | | - $wgExtNewIndexes[] = array('cu_changes', 'cuc_user_ip_time', |
346 | | - "$base/archives/patch-cu_changes_indexes2.sql" ); |
| 363 | + |
| 364 | + if ( $wgDBtype == 'mysql' ) { |
| 365 | + $wgExtNewIndexes[] = array( |
| 366 | + 'cu_changes', 'cuc_ip_hex_time', |
| 367 | + "$base/archives/patch-cu_changes_indexes.sql" |
| 368 | + ); |
| 369 | + $wgExtNewIndexes[] = array( |
| 370 | + 'cu_changes', 'cuc_user_ip_time', |
| 371 | + "$base/archives/patch-cu_changes_indexes2.sql" |
| 372 | + ); |
347 | 373 | } |
348 | 374 | return true; |
349 | 375 | } |
— | — | @@ -356,15 +382,28 @@ |
357 | 383 | return true; |
358 | 384 | } |
359 | 385 | |
| 386 | +// Set up the new special page |
| 387 | +$wgSpecialPages['CheckUser'] = 'CheckUser'; |
| 388 | +$wgSpecialPageGroups['CheckUser'] = 'users'; |
| 389 | +$wgAutoloadClasses['CheckUser'] = dirname( __FILE__ ) . '/CheckUser_body.php'; |
360 | 390 | |
| 391 | +/** |
| 392 | + * Add a link to Special:CheckUser on Special:Contributions/<username> for |
| 393 | + * privileged users. |
| 394 | + * @param $id Integer: user ID |
| 395 | + * @param $nt Title: user page title |
| 396 | + * @param $links Array: tool links |
| 397 | + * @return true |
| 398 | + */ |
361 | 399 | function efLoadCheckUserLink( $id, $nt, &$links ) { |
362 | | - global $wgUser; |
363 | | - if( $wgUser->isAllowed( 'checkuser' ) ) { |
364 | | - wfLoadExtensionMessages( 'CheckUser' ); |
| 400 | + global $wgUser; |
| 401 | + if( $wgUser->isAllowed( 'checkuser' ) ) { |
| 402 | + wfLoadExtensionMessages( 'CheckUser' ); |
365 | 403 | $links[] = $wgUser->getSkin()->makeKnownLinkObj( |
366 | | - SpecialPage::getTitleFor( 'CheckUser' ), |
367 | | - wfMsgHtml( 'checkuser-contribs' ), |
368 | | - 'user=' . urlencode( $nt->getText() ) ); |
| 404 | + SpecialPage::getTitleFor( 'CheckUser' ), |
| 405 | + wfMsgHtml( 'checkuser-contribs' ), |
| 406 | + 'user=' . urlencode( $nt->getText() ) |
| 407 | + ); |
369 | 408 | } |
370 | 409 | return true; |
371 | 410 | } |
Property changes on: branches/new-checkuser/CheckUser.php |
___________________________________________________________________ |
Deleted: svn:eol-style |
372 | 411 | - native |
Property changes on: branches/new-checkuser/cu_changes.pg.sql |
___________________________________________________________________ |
Deleted: svn:eol-style |
373 | 412 | - native |
Index: branches/new-checkuser/importLog.php |
— | — | @@ -52,5 +52,3 @@ |
53 | 53 | echo " --test Test log parser without doing local lookups\n"; |
54 | 54 | echo "\n"; |
55 | 55 | } |
56 | | - |
57 | | -?> |
\ No newline at end of file |
Property changes on: branches/new-checkuser/importLog.php |
___________________________________________________________________ |
Deleted: svn:eol-style |
58 | 56 | - native |
Property changes on: branches/new-checkuser/archives/patch-cu_changes_indexes.sql |
___________________________________________________________________ |
Deleted: svn:eol-style |
59 | 57 | - native |
Property changes on: branches/new-checkuser/archives/patch-cu_changes_indexes2.sql |
___________________________________________________________________ |
Deleted: svn:eol-style |
60 | 58 | - native |
Property changes on: branches/new-checkuser/cu_log.sql |
___________________________________________________________________ |
Deleted: svn:eol-style |
61 | 59 | - native |
Index: branches/new-checkuser/checkuser.js |
— | — | @@ -8,10 +8,14 @@ |
9 | 9 | */ |
10 | 10 | function updateCIDRresult() { |
11 | 11 | var form = document.getElementById( 'mw-checkuser-cidrform' ); |
12 | | - if( !form ) return; // no JS form |
| 12 | + if( !form ) { |
| 13 | + return; // no JS form |
| 14 | + } |
13 | 15 | form.style.display = 'inline'; // unhide form (JS active) |
14 | 16 | var iplist = document.getElementById( 'mw-checkuser-iplist' ); |
15 | | - if( !iplist ) return; // no JS form |
| 17 | + if( !iplist ) { |
| 18 | + return; // no JS form |
| 19 | + } |
16 | 20 | var text = iplist.value; |
17 | 21 | // Each line should have one IP or range |
18 | 22 | if( text.indexOf("\n") != -1 ) { |
— | — | @@ -21,53 +25,67 @@ |
22 | 26 | var ips = text.split("\t"); |
23 | 27 | } else if( text.indexOf(",") != -1 ) { |
24 | 28 | var ips = text.split(","); |
| 29 | + } else if( text.indexOf("-") != -1 ) { |
| 30 | + var ips = text.split("-"); |
| 31 | + } else if( text.indexOf(" ") != -1 ) { |
| 32 | + var ips = text.split(" "); |
25 | 33 | } else { |
26 | 34 | var ips = text.split(";"); |
27 | 35 | } |
28 | 36 | var bin_prefix = 0; |
29 | 37 | var prefix_cidr = 0; |
30 | | - var prefix = new String( "" ); |
31 | | - // Go through each IP in the list, get it's binary form, and track |
32 | | - // the largest binary prefix among them |
33 | | - for( var i=0; i<ips.length; i++ ) { |
| 38 | + var prefix = new String( '' ); |
| 39 | + // Go through each IP in the list, get its binary form, and |
| 40 | + // track the largest binary prefix among them... |
| 41 | + for( var i = 0; i < ips.length; i++ ) { |
| 42 | + var invalid = false; |
34 | 43 | // ...in the spirit of block.js, call this "addy" |
35 | 44 | var addy = ips[i]; |
36 | 45 | // Match the first IP in each list (ignore other garbage) |
37 | | - var ipV4 = addy.match(/(^|\b)(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(\/\d+)?\b/); |
| 46 | + var ipV4 = addy.match(/(^|\b)(\d+\.\d+\.\d+\.\d+)(\/\d+)?\b/); |
38 | 47 | var ipV6 = addy.match(/(^|\b)(:(:[0-9A-Fa-f]{1,4}){1,7}|[0-9A-Fa-f]{1,4}(:{1,2}[0-9A-Fa-f]{1,4}|::$){1,7})(\/\d+)?\b/); |
39 | 48 | // Binary form |
40 | | - var bin = new String( "" ); |
41 | | - // Rebuilt formatted bin_prefix for each IP |
42 | | - if( ipV4 || ipV6 ) prefix = ''; |
| 49 | + var bin = new String( '' ); |
43 | 50 | // Convert the IP to binary form: IPv4 |
44 | 51 | if( ipV4 ) { |
45 | 52 | var ip = ipV4[2]; |
46 | 53 | var cidr = ipV4[3]; // CIDR, if it exists |
47 | 54 | // Get each quad integer |
48 | 55 | var blocs = ip.split('.'); |
49 | | - for( var x=0; x<blocs.length; x++ ) { |
| 56 | + // IANA 1.0.0.0/8, 2.0.0.0/8 |
| 57 | + if( blocs[0] < 3 ) { |
| 58 | + continue; |
| 59 | + } |
| 60 | + for( var x = 0; x < blocs.length; x++ ) { |
50 | 61 | bloc = parseInt( blocs[x], 10 ); |
51 | | - if( bloc > 255 ) continue; // bad IP! |
52 | | - bin_block = bloc.toString(2); // concat bin with binary form of bloc |
| 62 | + if( bloc > 255 ) { |
| 63 | + invalid = true; // bad IP! |
| 64 | + break; // bad IP! |
| 65 | + } |
| 66 | + bin_block = bloc.toString( 2 ); // concat bin with binary form of bloc |
53 | 67 | while( bin_block.length < 8 ) { |
54 | | - bin_block = "0" + bin_block; // pad out as needed |
| 68 | + bin_block = '0' + bin_block; // pad out as needed |
55 | 69 | } |
56 | 70 | bin += bin_block; |
57 | 71 | } |
| 72 | + if( invalid ) { |
| 73 | + continue; // move to next IP |
| 74 | + } |
| 75 | + prefix = ''; // Rebuild formatted bin_prefix for each IP |
58 | 76 | // Apply any valid CIDRs |
59 | 77 | if( cidr ) { |
60 | 78 | cidr = cidr.match( /\d+$/ )[0]; // get rid of slash |
61 | | - bin = bin.substring(0,cidr); // truncate bin |
| 79 | + bin = bin.substring( 0, cidr ); // truncate bin |
62 | 80 | } |
63 | 81 | // Init bin_prefix |
64 | 82 | if( bin_prefix === 0 ) { |
65 | 83 | bin_prefix = new String( bin ); |
66 | 84 | // Get largest common bin_prefix |
67 | 85 | } else { |
68 | | - for( var x=0; x<bin_prefix.length; x++ ) { |
| 86 | + for( var x = 0; x < bin_prefix.length; x++ ) { |
69 | 87 | // Bin_prefix always smaller than bin unless a CIDR was used on bin |
70 | 88 | if( bin[x] == undefined || bin_prefix[x] != bin[x] ) { |
71 | | - bin_prefix = bin_prefix.substring(0,x); // shorten bin_prefix |
| 89 | + bin_prefix = bin_prefix.substring( 0, x ); // shorten bin_prefix |
72 | 90 | break; |
73 | 91 | } |
74 | 92 | } |
— | — | @@ -76,36 +94,42 @@ |
77 | 95 | var prefix_cidr = bin_prefix.length; |
78 | 96 | // CIDR too small? |
79 | 97 | if( prefix_cidr < 16 ) { |
80 | | - document.getElementById( 'mw-checkuser-cidr-res' ).value = "!"; |
81 | | - document.getElementById( 'mw-checkuser-ipnote' ).innerHTML = ">"+Math.pow(2,32-prefix_cidr); |
| 98 | + document.getElementById( 'mw-checkuser-cidr-res' ).value = '!'; |
| 99 | + document.getElementById( 'mw-checkuser-ipnote' ).innerHTML = '>' + Math.pow( 2, 32 - prefix_cidr ); |
82 | 100 | return; // too big |
83 | 101 | } |
84 | 102 | // Build the IP in dotted-quad form |
85 | | - for( var z=0; z<=3; z++ ) { |
| 103 | + for( var z = 0; z <= 3; z++ ) { |
86 | 104 | var bloc = 0; |
87 | | - var start = z*8; |
| 105 | + var start = z * 8; |
88 | 106 | var end = start + 7; |
89 | | - for( var x=start; x<=end; x++ ) { |
90 | | - if( bin_prefix[x] == undefined ) break; |
91 | | - bloc += parseInt(bin_prefix[x],10)*Math.pow(2,end-x); |
| 107 | + for( var x = start; x <= end; x++ ) { |
| 108 | + if( bin_prefix[x] == undefined ) { |
| 109 | + break; |
| 110 | + } |
| 111 | + bloc += parseInt( bin_prefix[x], 10 ) * Math.pow( 2, end - x ); |
92 | 112 | } |
93 | 113 | prefix += ( z == 3 ) ? bloc : bloc + '.'; |
94 | 114 | } |
95 | 115 | // Get IPs affected |
96 | | - ip_count = Math.pow(2,32-prefix_cidr); |
| 116 | + ip_count = Math.pow( 2, 32 - prefix_cidr ); |
97 | 117 | // Is the CIDR meaningful? |
98 | | - if( prefix_cidr == 32 ) prefix_cidr = false; |
| 118 | + if( prefix_cidr == 32 ) { |
| 119 | + prefix_cidr = false; |
| 120 | + } |
99 | 121 | // Convert the IP to binary form: IPv6 |
100 | 122 | } else if( ipV6 ) { |
101 | 123 | var ip = ipV6[2]; |
102 | 124 | var cidr = ipV6[0].match( /\/\d+$/ ); |
103 | 125 | cidr = cidr ? cidr[0] : false; |
104 | 126 | var abbrevs = ip.match( /::/g ); |
105 | | - if( abbrevs && abbrevs.length > 1 ) continue; // bad IP! |
| 127 | + if( abbrevs && abbrevs.length > 1 ) { |
| 128 | + continue; // bad IP! |
| 129 | + } |
106 | 130 | // Expand out "::"s |
107 | 131 | if( abbrevs && abbrevs.length > 0 ) { |
108 | 132 | var colons = ip.match( /:/g ); |
109 | | - var needed = 7 - (colons.length - 2); // 2 from "::" |
| 133 | + var needed = 7 - ( colons.length - 2 ); // 2 from "::" |
110 | 134 | var insert = ''; |
111 | 135 | while( needed > 1 ) { |
112 | 136 | insert += ':0'; |
— | — | @@ -113,34 +137,43 @@ |
114 | 138 | } |
115 | 139 | ip = ip.replace( '::', insert + ':' ); |
116 | 140 | // For IPs that start with "::", correct the final IP so that it starts with '0' and not ':' |
117 | | - if( ip[0] == ':' ) ip = '0' + ip; |
| 141 | + if( ip[0] == ':' ) { |
| 142 | + ip = '0' + ip; |
| 143 | + } |
118 | 144 | } |
119 | 145 | // Get each hex octant |
120 | 146 | var blocs = ip.split(':'); |
121 | | - for( var x=0; x<=7; x++ ) { |
122 | | - bloc = blocs[x] ? blocs[x] : "0"; |
123 | | - if( bloc > "ffff" ) continue; // bad IP! |
| 147 | + for( var x = 0; x <= 7; x++ ) { |
| 148 | + bloc = blocs[x] ? blocs[x] : '0'; |
| 149 | + if( bloc > 'ffff' ) { |
| 150 | + invalid = true; // bad IP! |
| 151 | + break; // bad IP! |
| 152 | + } |
124 | 153 | int_block = hex2int( bloc ); // convert hex -> int |
125 | | - bin_block = int_block.toString(2); // concat bin with binary form of bloc |
| 154 | + bin_block = int_block.toString( 2 ); // concat bin with binary form of bloc |
126 | 155 | while( bin_block.length < 16 ) { |
127 | | - bin_block = "0" + bin_block; // pad out as needed |
| 156 | + bin_block = '0' + bin_block; // pad out as needed |
128 | 157 | } |
129 | 158 | bin += bin_block; |
130 | 159 | } |
| 160 | + if( invalid ) { |
| 161 | + continue; // move to next IP |
| 162 | + } |
| 163 | + prefix = ''; // Rebuild formatted bin_prefix for each IP |
131 | 164 | // Apply any valid CIDRs |
132 | 165 | if( cidr ) { |
133 | 166 | cidr = cidr.match( /\d+$/ )[0]; // get rid of slash |
134 | | - bin = bin.substring(0,cidr); // truncate bin |
| 167 | + bin = bin.substring( 0, cidr ); // truncate bin |
135 | 168 | } |
136 | 169 | // Init bin_prefix |
137 | 170 | if( bin_prefix === 0 ) { |
138 | 171 | bin_prefix = new String( bin ); |
139 | 172 | // Get largest common bin_prefix |
140 | 173 | } else { |
141 | | - for( var x=0; x<bin_prefix.length; x++ ) { |
| 174 | + for( var x = 0; x < bin_prefix.length; x++ ) { |
142 | 175 | // Bin_prefix always smaller than bin unless a CIDR was used on bin |
143 | 176 | if( bin[x] == undefined || bin_prefix[x] != bin[x] ) { |
144 | | - bin_prefix = bin_prefix.substring(0,x); // shorten bin_prefix |
| 177 | + bin_prefix = bin_prefix.substring( 0, x ); // shorten bin_prefix |
145 | 178 | break; |
146 | 179 | } |
147 | 180 | } |
— | — | @@ -149,30 +182,34 @@ |
150 | 183 | var prefix_cidr = bin_prefix.length; |
151 | 184 | // CIDR too small? |
152 | 185 | if( prefix_cidr < 96 ) { |
153 | | - document.getElementById( 'mw-checkuser-cidr-res' ).value = "!"; |
154 | | - document.getElementById( 'mw-checkuser-ipnote' ).innerHTML = ">"+Math.pow(2,128-prefix_cidr); |
| 186 | + document.getElementById( 'mw-checkuser-cidr-res' ).value = '!'; |
| 187 | + document.getElementById( 'mw-checkuser-ipnote' ).innerHTML = '>' + Math.pow( 2, 128 - prefix_cidr ); |
155 | 188 | return; // too big |
156 | 189 | } |
157 | 190 | // Build the IP in dotted-quad form |
158 | | - for( var z=0; z<=7; z++ ) { |
| 191 | + for( var z = 0; z <= 7; z++ ) { |
159 | 192 | var bloc = 0; |
160 | 193 | var start = z*16; |
161 | 194 | var end = start + 15; |
162 | | - for( var x=start; x<=end; x++ ) { |
163 | | - if( bin_prefix[x] == undefined ) break; |
164 | | - bloc += parseInt(bin_prefix[x],10)*Math.pow(2,end-x); |
| 195 | + for( var x = start; x <= end; x++ ) { |
| 196 | + if( bin_prefix[x] == undefined ) { |
| 197 | + break; |
| 198 | + } |
| 199 | + bloc += parseInt( bin_prefix[x], 10 ) * Math.pow( 2, end - x ); |
165 | 200 | } |
166 | | - bloc = bloc.toString(16); // convert to hex |
| 201 | + bloc = bloc.toString( 16 ); // convert to hex |
167 | 202 | prefix += ( z == 7 ) ? bloc : bloc + ':'; |
168 | 203 | } |
169 | 204 | // Get IPs affected |
170 | | - ip_count = Math.pow(2,128-prefix_cidr); |
| 205 | + ip_count = Math.pow( 2, 128 - prefix_cidr ); |
171 | 206 | // Is the CIDR meaningful? |
172 | | - if( prefix_cidr == 128 ) prefix_cidr = false; |
| 207 | + if( prefix_cidr == 128 ) { |
| 208 | + prefix_cidr = false; |
| 209 | + } |
173 | 210 | } |
174 | 211 | } |
175 | 212 | // Update form |
176 | | - if( prefix != "" ) { |
| 213 | + if( prefix != '' ) { |
177 | 214 | if( prefix_cidr != false ) { |
178 | 215 | document.getElementById( 'mw-checkuser-cidr-res' ).value = prefix + '/' + prefix_cidr; |
179 | 216 | } else { |
— | — | @@ -183,7 +220,7 @@ |
184 | 221 | document.getElementById( 'mw-checkuser-cidr-res' ).value = '?'; |
185 | 222 | document.getElementById( 'mw-checkuser-ipnote' ).innerHTML = ''; |
186 | 223 | } |
187 | | - |
| 224 | + |
188 | 225 | } |
189 | 226 | addOnloadHook( updateCIDRresult ); |
190 | 227 | |
— | — | @@ -192,10 +229,9 @@ |
193 | 230 | hex = new String( hex ); |
194 | 231 | hex = hex.toLowerCase(); |
195 | 232 | var intform = 0; |
196 | | - for( var i=0; i<hex.length; i++ ) { |
| 233 | + for( var i = 0; i < hex.length; i++ ) { |
197 | 234 | var digit = 0; |
198 | | - switch( hex[i] ) |
199 | | - { |
| 235 | + switch( hex[i] ) { |
200 | 236 | case 'a': |
201 | 237 | digit = 10; |
202 | 238 | break; |
— | — | @@ -218,7 +254,7 @@ |
219 | 255 | digit = parseInt( hex[i], 10 ); |
220 | 256 | break; |
221 | 257 | } |
222 | | - intform += digit*Math.pow(16,hex.length-1-i); |
| 258 | + intform += digit * Math.pow( 16, hex.length - 1 - i ); |
223 | 259 | } |
224 | 260 | return intform; |
225 | 261 | } |
Property changes on: branches/new-checkuser/checkuser.js |
___________________________________________________________________ |
Deleted: svn:eol-style |
226 | 262 | - native |
Index: branches/new-checkuser/CheckUser.alias.php |
— | — | @@ -2,7 +2,8 @@ |
3 | 3 | /** |
4 | 4 | * Aliases for Special:CheckUser |
5 | 5 | * |
6 | | - * @addtogroup Extensions |
| 6 | + * @file |
| 7 | + * @ingroup Extensions |
7 | 8 | */ |
8 | 9 | |
9 | 10 | $aliases = array(); |
— | — | @@ -11,19 +12,15 @@ |
12 | 13 | * @author Jon Harald Søby |
13 | 14 | */ |
14 | 15 | $aliases['en'] = array( |
15 | | - 'CheckUser' => array( 'CheckUser' ), |
| 16 | + 'CheckUser' => array( 'CheckUser' ), |
16 | 17 | ); |
17 | 18 | |
18 | | -/** Arabic (العربية) |
19 | | - * @author Meno25 |
20 | | - */ |
| 19 | +/** Arabic (العربية) */ |
21 | 20 | $aliases['ar'] = array( |
22 | 21 | 'CheckUser' => array( 'تدقيق_مستخدم' ), |
23 | 22 | ); |
24 | 23 | |
25 | | -/** Egyptian Spoken Arabic (مصرى) |
26 | | - * @author Meno25 |
27 | | - */ |
| 24 | +/** Egyptian Spoken Arabic (مصرى) */ |
28 | 25 | $aliases['arz'] = array( |
29 | 26 | 'CheckUser' => array( 'تدقيق_مستخدم' ), |
30 | 27 | ); |
— | — | @@ -43,9 +40,7 @@ |
44 | 41 | 'CheckUser' => array( 'ProvjeraKorisnika' ), |
45 | 42 | ); |
46 | 43 | |
47 | | -/** German (Deutsch) |
48 | | - * @author Raimond Spekking |
49 | | - */ |
| 44 | +/** German (Deutsch) */ |
50 | 45 | $aliases['de'] = array( |
51 | 46 | 'CheckUser' => array( 'Checkuser' ), |
52 | 47 | ); |
— | — | @@ -77,7 +72,7 @@ |
78 | 73 | |
79 | 74 | /** French (Français) */ |
80 | 75 | $aliases['fr'] = array( |
81 | | - 'CheckUser' => array( "Vérificateur d'utilisateur", "Vérificateur d'utilisateurs", 'VérificateurUtilisateur', 'VérificateurUtilisateurs', 'Vérificateur d’adresse', 'VérificateurAdresse', 'VerificateurAdresse' ), |
| 76 | + 'CheckUser' => array( "Vérificateur d'utilisateur", "Vérificateur d'utilisateurs", 'VérificateurUtilisateur', 'VérificateurUtilisateurs', 'Vérificateur d’adresse' ), |
82 | 77 | ); |
83 | 78 | |
84 | 79 | /** Franco-Provençal (Arpetan) */ |
— | — | @@ -95,9 +90,12 @@ |
96 | 91 | 'CheckUser' => array( 'Benutzerpriefig' ), |
97 | 92 | ); |
98 | 93 | |
99 | | -/** Hebrew (עברית) |
100 | | - * @author Rotem Liss |
101 | | - */ |
| 94 | +/** Gujarati (ગુજરાતી) */ |
| 95 | +$aliases['gu'] = array( |
| 96 | + 'CheckUser' => array( 'સભ્યચકાસ' ), |
| 97 | +); |
| 98 | + |
| 99 | +/** Hebrew (עברית) */ |
102 | 100 | $aliases['he'] = array( |
103 | 101 | 'CheckUser' => array( 'בדיקת_משתמש' ), |
104 | 102 | ); |
— | — | @@ -129,12 +127,12 @@ |
130 | 128 | |
131 | 129 | /** Indonesian (Bahasa Indonesia) */ |
132 | 130 | $aliases['id'] = array( |
133 | | - 'CheckUser' => array( 'Pemeriksa' ), |
| 131 | + 'CheckUser' => array( 'Periksa pengguna', 'PeriksaPengguna', 'Pemeriksa' ), |
134 | 132 | ); |
135 | 133 | |
136 | 134 | /** Japanese (日本語) */ |
137 | 135 | $aliases['ja'] = array( |
138 | | - 'CheckUser' => array( 'チェックユーザー', 'チェックユーザ' ), |
| 136 | + 'CheckUser' => array( 'チェックユーザー', 'チェックユーザ', '利用者調査' ), |
139 | 137 | ); |
140 | 138 | |
141 | 139 | /** Khmer (ភាសាខ្មែរ) */ |
— | — | @@ -162,6 +160,16 @@ |
163 | 161 | 'CheckUser' => array( 'ПроверкаНаКорисник' ), |
164 | 162 | ); |
165 | 163 | |
| 164 | +/** Malayalam (മലയാളം) */ |
| 165 | +$aliases['ml'] = array( |
| 166 | + 'CheckUser' => array( 'ചെക്ക്യൂസർ' ), |
| 167 | +); |
| 168 | + |
| 169 | +/** Marathi (मराठी) */ |
| 170 | +$aliases['mr'] = array( |
| 171 | + 'CheckUser' => array( 'सदस्यतपासनिस' ), |
| 172 | +); |
| 173 | + |
166 | 174 | /** Malay (Bahasa Melayu) */ |
167 | 175 | $aliases['ms'] = array( |
168 | 176 | 'CheckUser' => array( 'Perisik' ), |
— | — | @@ -182,9 +190,7 @@ |
183 | 191 | 'CheckUser' => array( 'GebruikerControleren' ), |
184 | 192 | ); |
185 | 193 | |
186 | | -/** Norwegian (bokmål) (Norsk (bokmål)) |
187 | | - * @author Jon Harald Søby |
188 | | - */ |
| 194 | +/** Norwegian (bokmål) (Norsk (bokmål)) */ |
189 | 195 | $aliases['no'] = array( |
190 | 196 | 'CheckUser' => array( 'IP-sjekk' ), |
191 | 197 | ); |
— | — | @@ -204,6 +210,11 @@ |
205 | 211 | 'CheckUser' => array( 'योजकपरिक्षक' ), |
206 | 212 | ); |
207 | 213 | |
| 214 | +/** Slovak (Slovenčina) */ |
| 215 | +$aliases['sk'] = array( |
| 216 | + 'CheckUser' => array( 'SkontrolovaťPoužívateľa' ), |
| 217 | +); |
| 218 | + |
208 | 219 | /** Swahili (Kiswahili) */ |
209 | 220 | $aliases['sw'] = array( |
210 | 221 | 'CheckUser' => array( 'MtumiajiMwangalizi' ), |
— | — | @@ -224,8 +235,23 @@ |
225 | 236 | 'CheckUser' => array( 'Denetçi' ), |
226 | 237 | ); |
227 | 238 | |
| 239 | +/** Vèneto (Vèneto) */ |
| 240 | +$aliases['vec'] = array( |
| 241 | + 'CheckUser' => array( 'ControlaUtente' ), |
| 242 | +); |
| 243 | + |
228 | 244 | /** Veps (Vepsan kel') */ |
229 | 245 | $aliases['vep'] = array( |
230 | 246 | 'CheckUser' => array( 'KodvdaKävutajad' ), |
231 | 247 | ); |
232 | 248 | |
| 249 | +/** Simplified Chinese (中文(简体)) */ |
| 250 | +$aliases['zh-hans'] = array( |
| 251 | + 'CheckUser' => array( '用户查核' ), |
| 252 | +); |
| 253 | + |
| 254 | +/** Traditional Chinese (中文(繁體)) */ |
| 255 | +$aliases['zh-hant'] = array( |
| 256 | + 'CheckUser' => array( '用戶查核' ), |
| 257 | +); |
| 258 | + |
Property changes on: branches/new-checkuser/CheckUser.alias.php |
___________________________________________________________________ |
Deleted: svn:eol-style |
233 | 259 | - native |
Index: branches/new-checkuser/cu_log_import.inc |
— | — | @@ -90,5 +90,3 @@ |
91 | 91 | } |
92 | 92 | echo "...cu_log table populated: $matched matched rows, $unmatched discarded rows\n"; |
93 | 93 | } |
94 | | - |
95 | | -?> |
\ No newline at end of file |
Property changes on: branches/new-checkuser/cu_log_import.inc |
___________________________________________________________________ |
Deleted: svn:eol-style |
96 | 94 | - native |
Property changes on: branches/new-checkuser/cu_log.pg.sql |
___________________________________________________________________ |
Deleted: svn:eol-style |
97 | 95 | - native |
Index: branches/new-checkuser/install.php |
— | — | @@ -9,7 +9,7 @@ |
10 | 10 | : dirname( __FILE__ ) . '/../../maintenance/commandLine.inc' ); |
11 | 11 | require_once dirname( __FILE__ ) . '/install.inc'; |
12 | 12 | |
13 | | -$db =& wfGetDB( DB_MASTER ); |
| 13 | +$db = wfGetDB( DB_MASTER ); |
14 | 14 | if ( $db->tableExists( 'cu_changes' ) && !isset( $options['force'] ) ) { |
15 | 15 | echo "...cu_changes already exists.\n"; |
16 | 16 | } else { |
Property changes on: branches/new-checkuser/install.php |
___________________________________________________________________ |
Deleted: svn:eol-style |
17 | 17 | - native |
Property changes on: branches/new-checkuser/cu_changes.sql |
___________________________________________________________________ |
Deleted: svn:eol-style |
18 | 18 | - native |
Property changes on: branches/new-checkuser/install.inc |
___________________________________________________________________ |
Deleted: svn:eol-style |
19 | 19 | - native |