* $wgPageInfoTransclusionLimit limits the list size of transcluded articles
on the info action. Default is 50.
* Added action=createaccount to allow user account creation.
+* (bug 40124) action=options API also allows for setting of arbitrary
+ preferences, provided that their names are prefixed with 'userjs-'. This
+ officially reenables the feature that was undocumented and defective
+ in MW 1.20 (saving preferences using Special:Preferences cleared any
+ additional fields) and which has been disabled in 1.20.1 as a part of
+ a security fix (bug 42202).
+* Added the ability to limit the wall clock time used by shell processes,
+ as well as the CPU time. Configurable with $wgMaxShellWallClockTime.
=== Bug fixes in 1.21 ===
* (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
+++ /dev/null
-#!/bin/bash
-
-ulimit -t $1 -v $2 -f $3
-eval "$4"
--- /dev/null
+#!/bin/bash
+
+if [ "$1" -gt 0 ]; then
+ ulimit -t "$1"
+fi
+if [ "$2" -gt 0 ]; then
+ ulimit -v "$2"
+fi
+if [ "$3" -gt 0 ]; then
+ ulimit -f "$3"
+fi
+if [ "$4" -gt 0 ]; then
+ timeout $4 /bin/bash -c "$5"
+ STATUS="$?"
+ if [ "$STATUS" == 124 ]; then
+ echo "ulimit5.sh: timed out." 1>&2
+ fi
+ exit "$STATUS"
+else
+ eval "$5"
+fi
$message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
$content = new MessageContent( $message, null, 'parsemag' );
}
- wfProfileOut( __METHOD__ );
-
- return $content;
} else {
$this->fetchContentObject();
- wfProfileOut( __METHOD__ );
-
- return $this->mContentObject;
+ $content = $this->mContentObject;
}
+
+ wfProfileOut( __METHOD__ );
+ return $content;
}
/**
$wgMaxShellFileSize = 102400;
/**
- * Maximum CPU time in seconds for shell processes under linux
+ * Maximum CPU time in seconds for shell processes under Linux
*/
$wgMaxShellTime = 180;
+/**
+ * Maximum wall clock time (i.e. real time, of the kind the clock on the wall
+ * would measure) in seconds for shell processes under Linux
+ */
+$wgMaxShellWallClockTime = 180;
+
/**
* Executable path of the PHP cli binary (php/php5). Should be set up on install.
*/
$doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
false, null, $this->contentFormat );
- if ( $doEditStatus->isOK() ) {
- $result['redirect'] = $content->isRedirect();
- $this->updateWatchlist();
- wfProfileOut( __METHOD__ );
- return $status;
- } else {
+ if ( !$doEditStatus->isOK() ) {
// Failure from doEdit()
// Show the edit conflict page for certain recognized errors from doEdit(),
// but don't show it for errors from extension hooks
wfProfileOut( __METHOD__ );
return $doEditStatus;
}
+
+ $result['redirect'] = $content->isRedirect();
+ $this->updateWatchlist();
+ wfProfileOut( __METHOD__ );
+ return $status;
}
/**
$editContent = $result;
wfProfileOut( __METHOD__ );
return true;
- } else {
- wfProfileOut( __METHOD__ );
- return false;
}
+
+ wfProfileOut( __METHOD__ );
+ return false;
}
/**
* (non-zero is usually failure)
* @param $environ Array optional environment variables which should be
* added to the executed command environment.
- * @param $limits Array optional array with limits(filesize, memory, time)
+ * @param $limits Array optional array with limits(filesize, memory, time, walltime)
* this overwrites the global wgShellMax* limits.
* @return string collected stdout as a string (trailing newlines stripped)
*/
function wfShellExec( $cmd, &$retval = null, $environ = array(), $limits = array() ) {
- global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime;
+ global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
+ $wgMaxShellWallClockTime;
static $disabled;
if ( is_null( $disabled ) ) {
if ( php_uname( 's' ) == 'Linux' ) {
$time = intval ( isset($limits['time']) ? $limits['time'] : $wgMaxShellTime );
+ if ( isset( $limits['walltime'] ) ) {
+ $wallTime = intval( $limits['walltime'] );
+ } elseif ( isset( $limits['time'] ) ) {
+ $wallTime = $time;
+ } else {
+ $wallTime = intval( $wgMaxShellWallClockTime );
+ }
$mem = intval ( isset($limits['memory']) ? $limits['memory'] : $wgMaxShellMemory );
$filesize = intval ( isset($limits['filesize']) ? $limits['filesize'] : $wgMaxShellFileSize );
- if ( $time > 0 && $mem > 0 ) {
- $script = "$IP/bin/ulimit4.sh";
- if ( is_executable( $script ) ) {
- $cmd = '/bin/bash ' . escapeshellarg( $script ) . " $time $mem $filesize " . escapeshellarg( $cmd );
- }
+ if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
+ $cmd = '/bin/bash ' . escapeshellarg( "$IP/bin/ulimit5.sh" ) .
+ " $time $mem $filesize $wallTime " . escapeshellarg( $cmd );
}
}
wfDebug( "wfShellExec: $cmd\n" );
return '<a href="' . htmlspecialchars( $href ) . '" class="new" title="' .
htmlspecialchars( $title->getPrefixedText(), ENT_QUOTES ) . '">' .
$encLabel . '</a>';
- } else {
- wfProfileOut( __METHOD__ );
- return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
}
+
+ wfProfileOut( __METHOD__ );
+ return self::linkKnown( $title, $encLabel, array(), wfCgiToArray( $query ) );
}
/**
$formData[$pref] = $user->getOption( $pref, null, true );
}
- // Keeps old preferences from interfering due to back-compat
- // code, etc.
- $user->resetOptions();
+ // Keep old preferences from interfering due to back-compat code, etc.
+ $user->resetOptions( 'unused', $form->getContext() );
foreach ( $formData as $key => $value ) {
$user->setOption( $key, $value );
}
/**
- * Reset all options to the site defaults
+ * Return an associative array mapping preferences keys to the kind of a preference they're
+ * used for. Different kinds are handled differently when setting or reading preferences.
+ *
+ * Currently, the kind is one of:
+ * - 'registered' - preferences which are registered in core MediaWiki or
+ * by extensions using the UserGetDefaultOptions hook.
+ * - 'registered-multiselect' - as above, using the 'multiselect' type.
+ * - 'userjs' - preferences with names starting with 'userjs-', intended to
+ * be used by user scripts.
+ * - 'unused' - preferences about which MediaWiki doesn't know anything.
+ * These are usually legacy options, removed in newer versions.
+ *
+ * @param $context IContextSource
+ * @param $options array assoc. array with options keys to check as keys. Defaults to $this->mOptions.
+ * @return array the key => kind mapping data
+ */
+ public function getOptionKinds( IContextSource $context, $options = null ) {
+ $this->loadOptions();
+ if ( $options === null ) {
+ $options = $this->mOptions;
+ }
+
+ $prefs = Preferences::getPreferences( $this, $context );
+ $mapping = array();
+
+ // Multiselect options are stored in the database with one key per
+ // option, each having a boolean value. Extract those keys.
+ $multiselectOptions = array();
+ foreach ( $prefs as $name => $info ) {
+ if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
+ ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
+ $opts = HTMLFormField::flattenOptions( $info['options'] );
+ $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
+
+ foreach ( $opts as $value ) {
+ $multiselectOptions["$prefix$value"] = true;
+ }
+
+ unset( $prefs[$name] );
+ }
+ }
+
+ // $value is ignored
+ foreach ( $options as $key => $value ) {
+ if ( isset( $prefs[$key] ) ) {
+ $mapping[$key] = 'registered';
+ } elseif( isset( $multiselectOptions[$key] ) ) {
+ $mapping[$key] = 'registered-multiselect';
+ } elseif ( substr( $key, 0, 7 ) === 'userjs-' ) {
+ $mapping[$key] = 'userjs';
+ } else {
+ $mapping[$key] = 'unused';
+ }
+ }
+
+ return $mapping;
+ }
+
+ /**
+ * Reset certain (or all) options to the site defaults
+ *
+ * The optional parameter determines which kinds of preferences will be reset.
+ * Supported values are everything that can be reported by getOptionKinds()
+ * and 'all', which forces a reset of *all* preferences and overrides everything else.
+ *
+ * @param $resetKinds array|string which kinds of preferences to reset. Defaults to
+ * array( 'registered', 'registered-multiselect', 'unused' )
+ * for backwards-compatibility.
+ * @param $context IContextSource|null context source used when $resetKinds
+ * does not contain 'all', passed to getOptionKinds().
+ * Defaults to RequestContext::getMain() when null.
*/
- public function resetOptions() {
+ public function resetOptions(
+ $resetKinds = array( 'registered', 'registered-multiselect', 'unused' ),
+ IContextSource $context = null
+ ) {
$this->load();
+ $defaultOptions = self::getDefaultOptions();
- $this->mOptions = self::getDefaultOptions();
+ if ( !is_array( $resetKinds ) ) {
+ $resetKinds = array( $resetKinds );
+ }
+
+ if ( in_array( 'all', $resetKinds ) ) {
+ $newOptions = $defaultOptions;
+ } else {
+ if ( $context === null ) {
+ $context = RequestContext::getMain();
+ }
+
+ $optionKinds = $this->getOptionKinds( $context );
+ $newOptions = array();
+
+ // Use default values for the options that should be deleted, and
+ // copy old values for the ones that shouldn't.
+ foreach ( $this->mOptions as $key => $value ) {
+ if ( in_array( $optionKinds[$key], $resetKinds ) ) {
+ if ( array_key_exists( $key, $defaultOptions ) ) {
+ $newOptions[$key] = $defaultOptions[$key];
+ }
+ } else {
+ $newOptions[$key] = $value;
+ }
+ }
+ }
+
+ $this->mOptions = $newOptions;
$this->mOptionsLoaded = true;
}
# bug 13611: if the IP address the user is trying to create an account from is
# blocked with createaccount disabled, prevent new account creation there even
# when the user is logged in
- if( $this->mBlockedFromCreateAccount === false ){
+ if ( $this->mBlockedFromCreateAccount === false && !$this->isAllowed( 'ipblock-exempt' ) ) {
$this->mBlockedFromCreateAccount = Block::newFromTarget( null, $this->getRequest()->getIP() );
}
return $this->mBlockedFromCreateAccount instanceof Block && $this->mBlockedFromCreateAccount->prevents( 'createaccount' )
}
if ( $params['reset'] ) {
- $user->resetOptions();
+ $user->resetOptions( 'all' );
$changed = true;
}
}
$prefs = Preferences::getPreferences( $user, $this->getContext() );
-
- // Multiselect options are stored in the database with one key per
- // option, each having a boolean value. Extract those keys.
- $multiselectOptions = array();
- foreach ( $prefs as $name => $info ) {
- if ( ( isset( $info['type'] ) && $info['type'] == 'multiselect' ) ||
- ( isset( $info['class'] ) && $info['class'] == 'HTMLMultiSelectField' ) ) {
- $options = HTMLFormField::flattenOptions( $info['options'] );
- $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $name;
-
- foreach ( $options as $value ) {
- $multiselectOptions["$prefix$value"] = true;
- }
-
- unset( $prefs[$name] );
- }
- }
+ $prefsKinds = $user->getOptionKinds( $this->getContext(), $changes );
foreach ( $changes as $key => $value ) {
- if ( isset( $prefs[$key] ) ) {
- $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
- $validation = $field->validate( $value, $user->getOptions() );
- } elseif( isset( $multiselectOptions[$key] ) ) {
- // A key for a multiselect option.
- $validation = true;
- $value = (bool)$value;
- } else {
- $this->setWarning( "Not a valid preference: $key" );
- continue;
+ switch ( $prefsKinds[$key] ) {
+ case 'registered':
+ // Regular option.
+ $field = HTMLForm::loadInputFromParameters( $key, $prefs[$key] );
+ $validation = $field->validate( $value, $user->getOptions() );
+ break;
+ case 'registered-multiselect':
+ // A key for a multiselect option.
+ $validation = true;
+ $value = (bool)$value;
+ break;
+ case 'userjs':
+ // Allow non-default preferences prefixed with 'userjs-', to be set by user scripts
+ if ( strlen( $key ) > 255 ) {
+ $validation = "key too long (no more than 255 bytes allowed)";
+ } elseif ( preg_match( "/[^a-zA-Z0-9_-]/", $key ) !== 0 ) {
+ $validation = "invalid key (only a-z, A-Z, 0-9, _, - allowed)";
+ } else {
+ $validation = true;
+ }
+ break;
+ case 'unused':
+ default:
+ $validation = "not a valid preference";
+ break;
}
if ( $validation === true ) {
$user->setOption( $key, $value );
}
public function getDescription() {
- return 'Change preferences of the current user';
+ return array(
+ 'Change preferences of the current user',
+ 'Only options which are registered in core or in one of installed extensions,',
+ 'or as options with keys prefixed with \'userjs-\' (intended to be used by user scripts), can be set.'
+ );
}
public function getPossibleErrors() {
if ( $res && $row = $this->fetchRow( $res ) ) {
wfProfileOut( $fname );
return $row[0];
- } else {
- wfProfileOut( $fname );
- return false;
}
+ wfProfileOut( $fname );
+ return false;
}
/**
'config-download-localsettings' => 'The link text used in the download link in config-install-done.',
'config-help' => 'This is used in help boxes.
{{Identical|Help}}',
- 'mainpagetext' => 'Along with {{msg|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.',
- 'mainpagedocfooter' => 'Along with {{msg|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.
+ 'mainpagetext' => 'Along with {{msg-mw|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.',
+ 'mainpagedocfooter' => 'Along with {{msg-mw|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.
This might be a good place to put information about <nowiki>{{GRAMMAR:}}</nowiki>. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/fi]] for an example. For languages having grammatical distinctions and not having an appropriate <nowiki>{{GRAMMAR:}}</nowiki> software available, a suggestion to check and possibly amend the messages having <nowiki>{{SITENAME}}</nowiki> may be valuable. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/ksh]] for an example.',
);
PHP 파일이 있는 곳을 우리가 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원본 데이터베이스에 접근하는 데 실패합니다.
-원본 사용자 데이터(이메일 주소, 암호 해시) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
+원본 사용자 데이터(이메일 주소, 해시한 비밀번호) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
<code>/var/lib/mediawiki/yourwiki</code>와 같이 모두 다른 곳에서 데이터베이스를 넣어보도록 하세요.',
'config-oracle-def-ts' => '기본 테이블공간:',
return $size;
}
- $dbr = $this->getSlaveDB();
+ list( $dbr, $scope ) = $this->getSlaveDB();
$size = (int)$dbr->selectField( 'job', 'COUNT(*)',
array( 'job_cmd' => $this->type, 'job_token' => '' ),
__METHOD__
return $count;
}
- $dbr = $this->getSlaveDB();
+ list( $dbr, $scope ) = $this->getSlaveDB();
$count = (int)$dbr->selectField( 'job', 'COUNT(*)',
array( 'job_cmd' => $this->type, "job_token !={$dbr->addQuotes('')}" ),
__METHOD__
list( $val, $exptime ) = $this->decode( $val );
if ( $casToken !== $val ) {
dba_close( $handle );
+ wfProfileOut( __METHOD__ );
return false;
}
wfProfileOut( __METHOD__ );
return $tidy->errorBuffer;
+ }
+
+ $tidy->cleanRepair();
+ $retval = $tidy->getStatus();
+ if ( $retval == 2 ) {
+ // 2 is magic number for fatal error
+ // http://www.php.net/manual/en/function.tidy-get-status.php
+ $cleansource = null;
} else {
- $tidy->cleanRepair();
- $retval = $tidy->getStatus();
- if ( $retval == 2 ) {
- // 2 is magic number for fatal error
- // http://www.php.net/manual/en/function.tidy-get-status.php
- $cleansource = null;
- } else {
- $cleansource = tidy_get_output( $tidy );
- if ( $wgDebugTidy && $retval > 0 ) {
- $cleansource .= "<!--\nTidy reports:\n" .
- str_replace( '-->', '-->', $tidy->errorBuffer ) .
- "\n-->";
- }
+ $cleansource = tidy_get_output( $tidy );
+ if ( $wgDebugTidy && $retval > 0 ) {
+ $cleansource .= "<!--\nTidy reports:\n" .
+ str_replace( '-->', '-->', $tidy->errorBuffer ) .
+ "\n-->";
}
-
- wfProfileOut( __METHOD__ );
- return $cleansource;
}
+
+ wfProfileOut( __METHOD__ );
+ return $cleansource;
}
}
public function submitReset( $formData ) {
$user = $this->getUser();
- $user->resetOptions();
+ $user->resetOptions( 'all' );
$user->saveSettings();
$url = $this->getTitle()->getFullURL( 'success' );
}
}
+ /* NB: AV_NO_VIRUS is 0 but AV_SCAN_FAILED is false,
+ * so we need the strict equalities === and thus can't use a switch here
+ */
if ( $mappedCode === AV_SCAN_FAILED ) {
# scan failed (code was mapped to false by $exitCodeMap)
wfDebug( __METHOD__ . ": failed to scan $file (code $exitCode).\n" );
- if ( $wgAntivirusRequired ) {
- wfProfileOut( __METHOD__ );
- return wfMessage( 'virus-scanfailed', array( $exitCode ) )->text();
- } else {
- wfProfileOut( __METHOD__ );
- return null;
- }
+ $output = $wgAntivirusRequired ? wfMessage( 'virus-scanfailed', array( $exitCode ) )->text() : null;
} elseif ( $mappedCode === AV_SCAN_ABORTED ) {
# scan failed because filetype is unknown (probably imune)
wfDebug( __METHOD__ . ": unsupported file type $file (code $exitCode).\n" );
- wfProfileOut( __METHOD__ );
- return null;
+ $output = null;
} elseif ( $mappedCode === AV_NO_VIRUS ) {
# no virus found
wfDebug( __METHOD__ . ": file passed virus scan.\n" );
- wfProfileOut( __METHOD__ );
- return false;
+ $output = false;
} else {
$output = trim( $output );
}
wfDebug( __METHOD__ . ": FOUND VIRUS! scanner feedback: $output \n" );
- wfProfileOut( __METHOD__ );
- return $output;
}
+
+ wfProfileOut( __METHOD__ );
+ return $output;
}
/**
'hidetoc' => 'بیشارەوە',
'collapsible-collapse' => 'کۆیبکەوە',
'collapsible-expand' => 'بڵاویبکەوە',
-'thisisdeleted' => 'نیشاندان یا گەڕاندنەوەی $1؟',
+'thisisdeleted' => '$1 نیشان بدە یا بھێنەوە؟',
'viewdeleted' => '$1 نیشان بده؟',
'restorelink' => '{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}}',
'feedlinks' => 'خۆراک:',
'userrights-nodatabase' => 'بنکەدراوی $1 بوونی نیە یا لەم شوێنە نیە.',
'userrights-nologin' => 'بۆ دانانی مافەکانی بەکارهێنەر دەبێ بە هەژماری بەڕێوبەری [[Special:UserLogin|بچیتە ژووروە]].',
'userrights-notallowed' => 'ھەژمارەکەی تۆ دەسەڵاتی دانان یان لابردنی مافەکانی بەکارھێنەری نییە.',
-'userrights-changeable-col' => 'ئەو گرووپانە بۆت ئەگۆڕدرێن',
-'userrights-unchangeable-col' => 'ئەو گرووپانە بۆت ناگۆڕدرێن',
+'userrights-changeable-col' => 'ئەو گرووپانەی دەتوانی بیگۆڕی',
+'userrights-unchangeable-col' => 'ئەو گرووپانەی ناتوانی بیگۆڕی',
# Groups
'group' => 'گرووپ:',
'ipblocklist-otherblocks' => '{{PLURAL:$1|بەربەستنەکانی}} تر',
'infiniteblock' => 'بێکۆتایی',
'expiringblock' => 'لە $2، $1 ماوەی بەسەر دەچێ',
-'anononlyblock' => 'تەنها بۆ چەن سات',
+'anononlyblock' => 'تەنیا بەکارھێنەرە بێناوەکان',
'noautoblockblock' => 'بەربەستنی خۆگەڕ ناچالاکە',
'createaccountblock' => 'دروستکردنی ھەژمار ناچالاکە',
'emailblock' => 'ئیمەیل ناچالاکە',
ئەو ئایپی ئەدرەسانە خۆکارانە بەربستکراون بە ڕیز نەکراون.
سەیری [[Special:BlockList|لیستی بەربەستن]] بکە بۆ بینینی ئەو بەرگری و بەربەستنانە ئێستا لە بەرکاردان.',
'unblocklogentry' => '$1ی کردەوە',
-'block-log-flags-anononly' => 'تەنیا بەکارھێنەرە نەناسراوەکان',
+'block-log-flags-anononly' => 'تەنیا بەکارھێنەرە بێناوەکان',
'block-log-flags-nocreate' => 'دروستکردنی ھەژمار ناچالاک کرا',
'block-log-flags-noautoblock' => 'بەربەستنی خۆگەڕ ناچالاک کرا',
'block-log-flags-noemail' => 'ئیمەیل ناچالاک کرا',
'tog-externaleditor' => 'Defnyddio golygydd allanol trwy ragosodiad (ar gyfer arbenigwyr yn unig; mae arno angen gosodiadau arbennig ar eich cyfrifiadur. [//www.mediawiki.org/wiki/Manual:External_editors Rhagor o wybodaeth.])',
'tog-externaldiff' => 'Defnyddio "external diff" trwy ragosodiad (ar gyfer arbenigwyr yn unig; mae arno angen gosodiadau arbennig ar eich cyfrifiadur. [//www.mediawiki.org/wiki/Manual:External_editors Rhagor o wybodaeth.])',
'tog-showjumplinks' => 'Galluogi dolenni hygyrchedd "neidio i"',
-'tog-uselivepreview' => 'Defnyddio rhagolwg byw (JavaScript) (Arbrofol)',
+'tog-uselivepreview' => 'Defnyddio rhagolwg byw (angen JavaScript i hyn)',
'tog-forceeditsummary' => 'Tynnu fy sylw pan adawaf flwch crynodeb golygu yn wag',
'tog-watchlisthideown' => 'Cuddio fy ngolygiadau fy hunan yn fy rhestr wylio',
'tog-watchlisthidebots' => 'Cuddio golygiadau bot yn fy rhestr wylio',
'newwindow' => '(yn agor mewn ffenest newydd)',
'cancel' => 'Diddymu',
'moredotdotdot' => 'Rhagor...',
+'morenotlisted' => 'Ni restrir y lleill...',
'mypage' => 'Tudalen defnyddiwr',
'mytalk' => 'Sgwrs',
'anontalk' => 'Sgwrs ar gyfer y cyfeiriad IP hwn',
# E-mail sending
'php-mail-error-unknown' => 'Gwall anhysbys yng ngweithrediad post() PHP',
'user-mail-no-addy' => 'Wedi ceisio anfon e-bost heb gyfeiriad e-bost',
+'user-mail-no-body' => 'Ceisiwyd anfon e-bost gwag neu e-bost oedd a thestun rhy bwt iddo.',
# Change password dialog
'resetpass' => 'Newid cyfrinair y cyfrif',
'enotif_subject_moved' => 'Symudwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
'enotif_subject_restored' => 'Adferwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
'enotif_subject_changed' => 'Newidiwyd y dudalen $1 ar {{SITENAME}} gan {{gender:$2|$2}}',
+'enotif_body_intro_deleted' => 'Dilewyd y dudalen $1 ar {{SITENAME}} ar $PAGEEDITDATE gan {{gender:$2|$2}}, gweler $3.',
'enotif_lastvisited' => 'Gwelwch $1 am bob newid ers eich ymweliad blaenorol.',
'enotif_lastdiff' => 'Gallwch weld y newid ar $1.',
'enotif_anon_editor' => 'defnyddiwr anhysbys $1',
'pageinfo-protect-cascading' => 'Protecciones en serie activadas',
'pageinfo-protect-cascading-yes' => 'Sí',
'pageinfo-protect-cascading-from' => 'Protecciones en serie activadas',
+'pageinfo-category-info' => 'Información de la categoría',
+'pageinfo-category-pages' => 'Número de páginas',
+'pageinfo-category-subcats' => 'Número de subcategorías',
+'pageinfo-category-files' => 'Número de archivos',
# Skin names
'skinname-standard' => 'Estándar',
'tog-externaleditor' => 'Käytä ulkoista tekstieditoria oletuksena. Vain kokeneille käyttäjille, vaatii selaimen asetusten muuttamista. (<span class="plainlinks">[//www.mediawiki.org/wiki/Manual:External_editors Ohje]</span>)',
'tog-externaldiff' => 'Käytä oletuksena ulkoista työkalua sivun eri versioiden välisten erojen tarkasteluun. Vain kokeneille käyttäjille, vaatii selaimen asetusten muuttamista. (<span class="plainlinks">[//www.mediawiki.org/wiki/Manual:External_editors Ohje]</span>)',
'tog-showjumplinks' => 'Lisää loikkaa-käytettävyyslinkit sivun alkuun',
-'tog-uselivepreview' => 'Käytä pikaesikatselua (vaatii JavaScriptin)',
+'tog-uselivepreview' => 'Käytä pikaesikatselua (JavaScript)',
'tog-forceeditsummary' => 'Huomauta, jos yhteenvetoa ei ole annettu',
'tog-watchlisthideown' => 'Piilota omat muokkaukset',
'tog-watchlisthidebots' => 'Piilota bottien muokkaukset',
'tog-watchmoves' => 'Apondre les pâges et los fichiérs que renomo a ma lista de siuvu',
'tog-watchdeletion' => 'Apondre les pâges et los fichiérs que suprimo a ma lista de siuvu',
'tog-minordefault' => 'Marcar per dèfôt tôs los changements coment petiôts',
-'tog-previewontop' => 'Montrar la prèvisualisacion d’amont la zona de changement',
-'tog-previewonfirst' => 'Montrar la prèvisualisacion pendent lo premiér changement',
+'tog-previewontop' => 'Montrar l’apèrçu d’amont la zona de changement',
+'tog-previewonfirst' => 'Montrar l’apèrçu pendent lo premiér changement',
'tog-nocache' => 'Dèsactivar lo cacho de les pâges per lo navigator',
'tog-enotifwatchlistpages' => 'Mè mandar un mèssâjo quand na pâge ou ben un fichiér de ma lista de siuvu est changiê(e)',
'tog-enotifusertalkpages' => 'Mè mandar un mèssâjo quand ma pâge de discussion est changiêe',
'tog-externaleditor' => 'Empleyér per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
'tog-externaldiff' => 'Empleyér per dèfôt un comparator de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
'tog-showjumplinks' => 'Activar los lims d’accèssibilitât « {{int:jumpto}} »',
-'tog-uselivepreview' => 'Empleyér l’apèrçu rapido (at fôta de JavaScript) (èxpèrimentâl)',
+'tog-uselivepreview' => 'Empleyér l’apèrçu drêt (at fôta de JavaScript)',
'tog-forceeditsummary' => 'M’avèrtir quand j’é pas buchiê de rèsumâ de changement',
'tog-watchlisthideown' => 'Cachiér los mins changements dedens la lista de siuvu',
'tog-watchlisthidebots' => 'Cachiér los changements fêts per des robots dedens la lista de siuvu',
'newwindow' => '(ôvre na fenétra novèla)',
'cancel' => 'Anular',
'moredotdotdot' => 'Més...',
+'morenotlisted' => 'Més pas listâ...',
'mypage' => 'Pâge',
'mytalk' => 'Discussion',
'anontalk' => 'Discussion avouéc cet’adrèce IP',
'postcomment' => 'Novèla sèccion',
'articlepage' => 'Vêde la pâge de contegnu',
'talk' => 'Discussion',
-'views' => 'Visualisacions',
+'views' => 'Vues',
'toolbox' => 'Bouèta d’outils',
'userpage' => 'Vêde la pâge utilisator',
'projectpage' => 'Vêde la pâge projèt',
Ignorâd ceti mèssâjo se cél compto est étâ fêt per fôta.',
'usernamehasherror' => 'Lo nom d’utilisator pôt pas contegnir des caractèros de chaplâjo',
-'login-throttled' => 'Dês pou vos éd èprovâ un trop grant nombro de branchements.
+'login-throttled' => 'Dês pou vos éd èprovâ un mouél de branchements.
Volyéd atendre devant que tornar èprovar.',
'login-abort-generic' => 'Voutra tentativa de branchement at pas reussi - Anulâye',
'loginlanguagelabel' => 'Lengoua : $1',
# E-mail sending
'php-mail-error-unknown' => 'Fôta encognua dens la fonccion mail() de PHP.',
'user-mail-no-addy' => 'At tâchiê de mandar un mèssâjo sen adrèce èlèctronica.',
+'user-mail-no-body' => 'At tâchiê de mandar un mèssâjo avouéc un côrp vouedo ou ben dèrêsonâblament côrt.',
# Change password dialog
'resetpass' => 'Changiér lo contresegno',
'minoredit' => 'O est un petiôt changement',
'watchthis' => 'Siuvre ceta pâge',
'savearticle' => 'Encartar la pâge',
-'preview' => 'Prèvisualisacion',
-'showpreview' => 'Montrar na prèvisualisacion',
-'showlivepreview' => 'Apèrçu rapido',
+'preview' => 'Apèrçu',
+'showpreview' => 'Montrar un apèrçu',
+'showlivepreview' => 'Apèrçu drêt',
'showdiff' => 'Montrar los changements',
'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê(e).
Voutron adrèce IP serat encartâye dedens l’historico des changements de ceta pâge.",
* '''Opera :''' èfaciéd lo cacho dedens ''Outils → Prèferences''",
'usercssyoucanpreview' => "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye CSS novèla devant que l’encartar.",
'userjsyoucanpreview' => "'''Combina :''' empleyéd lo boton « {{int:showpreview}} » por èprovar voutra fôlye JS novèla devant que l’encartar.",
-'usercsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvisualisar voutra prôpra fôlye CSS.'''
+'usercsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre voutra prôpra fôlye CSS.'''
'''El est p’oncor étâye encartâye !'''",
-'userjspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés èprovar / prèvisualisar voutron code JavaScript.'''
+'userjspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés èprovar / prèvêre voutron code JavaScript.'''
'''Il est p’oncor étâ encartâ !'''",
-'sitecsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvisualisar cela fôlye CSS.'''
+'sitecsspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cela fôlye CSS.'''
'''El est p’oncor étâye encartâye !'''",
-'sitejspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvisualisar cél code JavaScript.'''
+'sitejspreview' => "'''Rapelâd-vos que vos éte ren qu’aprés prèvêre cél code JavaScript.'''
'''Il est p’oncor étâ encartâ !'''",
'userinvalidcssjstitle' => "'''Atencion :''' ègziste gins d’habelyâjo « $1 ».
Rapelâd-vos que les pâges a sè avouéc èxtensions .css et .js emplèyont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
'updated' => '(Betâ a jorn)',
'note' => "'''Nota :'''",
-'previewnote' => "'''Rapelâd-vos qu’o est ren qu’una prèvisualisacion.'''
+'previewnote' => "'''Rapelâd-vos qu’o est ren qu’un apèrçu.'''
Voutros changements sont p’oncor étâs encartâs !",
'continue-editing' => 'Alar a la zona de changement',
-'previewconflict' => 'Ceta prèvisualisacion fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.',
+'previewconflict' => 'Cet’apèrçu fât vêre lo tèxto de la zona de changement de d’amont coment aparêtrat se vos chouèsésséd de l’encartar.',
'session_fail_preview' => "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''
Volyéd tornar èprovar.
Se cen tôrne pas reussir, vos volyéd [[Special:UserLogout|dèbranchiér]] et pués vos tornar branchiér.",
'session_fail_preview_html' => "'''Dèconsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions sur voutra sèance.'''
-''Perce que {{SITENAME}} at activâ l’HTML bruto, la prèvisualisacion est étâye cachiêe por prèvegnir les ataques per JavaScript.''
+''Perce que {{SITENAME}} at activâ l’HTML bruto, l’apèrçu est étâ cachiê por prèvegnir les ataques per JavaScript.''
'''Se la tentativa de changement ére lèg·itima, volyéd tornar èprovar.'''
Se cen tôrne pas reussir, vos volyéd [[Special:UserLogout|dèbranchiér]] et pués vos tornar branchiér.",
'titleprotectedwarning' => "'''Atencion : ceta pâge est étâye protègiêe de façon que des [[Special:ListGroupRights|drêts spècificos]] sont nècèssèros por la povêr fâre.'''
La dèrriére entrâ du jornal est montrâye ce-desot por refèrence :",
'templatesused' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} per ceta pâge :',
-'templatesusedpreview' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens ceta prèvisualisacion :',
+'templatesusedpreview' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens cet’apèrçu :',
'templatesusedsection' => '{{PLURAL:$1|Modèlo empleyê|Modèlos empleyês}} dedens ceta sèccion :',
'template-protected' => '(protègiê)',
'template-semiprotected' => '(mié-protègiê)',
'mergehistory-from' => 'Pâge d’origina :',
'mergehistory-into' => 'Pâge de dèstinacion :',
'mergehistory-list' => 'Historico des changements que pôvont étre fusionâs',
-'mergehistory-merge' => 'Cetes vèrsions de [[:$1]] pôvont étre fusionâs dedens [[:$2]].
-Utilisâd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècefiâ.
-Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colona.',
-'mergehistory-go' => 'Fâre vêre los changements que pôvont étre fusionâs',
+'mergehistory-merge' => 'Cetes vèrsions de [[:$1]] pôvont étre fusionâyes dedens [[:$2]].
+Empleyéd la colona de botons de chouèx por fusionar ren que les vèrsions fêtes du comencement tant qu’a la dâta spècifiâye.
+Notâd que l’usâjo des lims de navigacion tornerat inicialisar cela colona.',
+'mergehistory-go' => 'Montrar los changements que pôvont étre fusionâs',
'mergehistory-submit' => 'Fusionar les vèrsions',
-'mergehistory-empty' => 'Niona vèrsion pôt étre fusionâ.',
-'mergehistory-success' => '$3 vèrsion{{PLURAL:$3||s}} de [[:$1]] fusionâ{{PLURAL:$3||s}} avouéc reusséta dedens [[:$2]].',
-'mergehistory-fail' => 'Empossiblo de fâre la fusion des historicos. Volyéd tornar chouèsir la pâge et pués los paramètres de dâta.',
+'mergehistory-empty' => 'Niona vèrsion pôt étre fusionâye.',
+'mergehistory-success' => '$3 vèrsion{{PLURAL:$3||s}} de [[:$1]] fusionâye{{PLURAL:$3||s}} avouéc reusséta dedens [[:$2]].',
+'mergehistory-fail' => 'Empossiblo de fâre la fusion des historicos, volyéd tornar chouèsir la pâge et pués los paramètros de dâta.',
'mergehistory-no-source' => 'La pâge d’origina $1 ègziste pas.',
'mergehistory-no-destination' => 'La pâge de dèstinacion $1 ègziste pas.',
'mergehistory-invalid-source' => 'La pâge d’origina dêt avêr un titro valido.',
'mergehistory-invalid-destination' => 'La pâge de dèstinacion dêt avêr un titro valido.',
-'mergehistory-autocomment' => '[[:$1]] fusionâ dedens [[:$2]]',
-'mergehistory-comment' => '[[:$1]] fusionâ dedens [[:$2]] : $3',
+'mergehistory-autocomment' => '[[:$1]] fusionâye dedens [[:$2]]',
+'mergehistory-comment' => '[[:$1]] fusionâye dedens [[:$2]] : $3',
'mergehistory-same-destination' => 'Les pâges d’origina et de dèstinacion pôvont pas étre la méma',
'mergehistory-reason' => 'Rêson :',
# Merge log
'mergelog' => 'Jornal de les fusions',
-'pagemerge-logentry' => '[[$1]] fusionâ dedens [[$2]] (vèrsions tant qu’u $3)',
+'pagemerge-logentry' => '[[$1]] fusionâye dedens [[$2]] (vèrsions tant qu’u $3)',
'revertmerge' => 'Sèparar',
-'mergelogpagetext' => 'Vê-que la lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’una ôtra.',
+'mergelogpagetext' => 'Vê-que na lista de les fusions les ples novèles de l’historico d’una pâge dedens celi d’un’ôtra.',
# Diffs
'history-title' => 'Historico de les vèrsions de « $1 »',
'difference-multipage' => '(Difèrences entre les pâges)',
'lineno' => 'Legne $1 :',
'compareselectedversions' => 'Comparar les vèrsions chouèsies',
-'showhideselectedversions' => 'Fâre vêre / cachiér les vèrsions chouèsies',
+'showhideselectedversions' => 'Montrar / cachiér les vèrsions chouèsies',
'editundo' => 'dèfâre',
-'diff-multi' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|yon usanciér|$2 usanciérs}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})',
-'diff-multi-manyusers' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 usanciér{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâ|sont pas montrâs}})',
-'difference-missing-revision' => '{{PLURAL:$2|Yona vèrsion|$2 vèrsions}} de ceta difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.
+'diff-multi' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per {{PLURAL:$2|yon utilisator|$2 utilisators}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|Yona vèrsion entèrmèdièra|$1 vèrsions entèrmèdières}} per més de $2 utilisator{{PLURAL:$2||s}} {{PLURAL:$1|est pas montrâye|sont pas montrâyes}})',
+'difference-missing-revision' => '{{PLURAL:$2|Yona vèrsion|$2 vèrsions}} de cela difèrence ($1) {{PLURAL:$2|est pas étâye trovâye|sont pas étâyes trovâyes}}.
-En g·ènèral cen arreve en siuvent un lim d’un dif dèpassâ de vers na pâge qu’est étâye suprimâye.
+En g·ènèral cen arreve en siuvent un lim d’una dif dèpassâye de vers na pâge qu’est étâye suprimâye.
Vos pouede trovar més de dètalys dedens lo [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} jornal de les suprèssions].',
# Search results
'searchresults' => 'Rèsultats de la rechèrche',
'searchresults-title' => 'Rèsultats de la rechèrche por « $1 »',
-'searchresulttext' => 'Por més d’enformacions sur la rechèrche dens {{SITENAME}}, vêde [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchresulttext' => 'Por més d’enformacions sur la rechèrche dedens {{SITENAME}}, vêde [[{{MediaWiki:Helppage}}|{{int:help}}]].',
'searchsubtitle' => "Vos éd rechèrchiê « '''[[:$1]]''' » ([[Special:Prefixindex/$1|totes les pâges que començont per « $1 »]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|totes les pâges qu’ont un lim de vers « $1 »]])",
'searchsubtitleinvalid' => "Vos éd rechèrchiê « '''$1''' »",
-'toomanymatches' => 'Un trop grant nombro d’ocasions at étâ retornâ, volyéd sometre una requéta difèrenta.',
-'titlematches' => 'Corrèspondances dens los titros de pâges',
-'notitlematches' => 'Nion titro de pâge corrèspond a la rechèrche.',
-'textmatches' => 'Corrèspondances dens lo tèxto de les pâges',
-'notextmatches' => 'Nion tèxto de pâge corrèspond a la rechèrche.',
+'toomanymatches' => 'Un mouél de corrèspondances est étâ retornâ, volyéd èprovar na rechèrche difèrenta.',
+'titlematches' => 'Corrèspondances dedens los titros de les pâges',
+'notitlematches' => 'Niona corrèspondance dedens los titros de les pâges',
+'textmatches' => 'Corrèspondances dedens lo tèxto de les pâges',
+'notextmatches' => 'Niona corrèspondance dedens lo tèxto de les pâges',
'prevn' => '{{PLURAL:$1|$1}} devant',
'nextn' => '{{PLURAL:$1|$1}} aprés',
'prevn-title' => '$1 rèsultat{{PLURAL:$1||s}} devant',
'nextn-title' => '$1 rèsultat{{PLURAL:$1||s}} aprés',
-'shown-title' => 'Fâre vêre $1 rèsultat{{PLURAL:$1||s}} per pâge',
+'shown-title' => 'Montrar $1 rèsultat{{PLURAL:$1||s}} per pâge',
'viewprevnext' => 'Vêre ($1 {{int:pipe-separator}} $2) ($3)',
'searchmenu-legend' => 'Chouèx de rechèrche',
'searchmenu-exists' => "'''Y at na pâge apelâye « [[:$1]] » sur ceti vouiqui.'''",
'searchmenu-new' => "'''Fâre la pâge « [[:$1|$1]] » sur ceti vouiqui !'''",
'searchhelp-url' => 'Help:Somèro',
-'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Rechèrchiér les pâges que començont per ceti prèfixo]]',
+'searchmenu-prefix' => '[[Special:PrefixIndex/$1|Fâre dèfelar les pâges que començont per ceti prèfixo]]',
'searchprofile-articles' => 'Pâges de contegnu',
-'searchprofile-project' => 'Pâges d’éde et du projèt',
+'searchprofile-project' => 'Pâges d’éde et pâges projèt',
'searchprofile-images' => 'Multimèdia',
'searchprofile-everything' => 'Tot',
-'searchprofile-advanced' => 'Rechèrche avanciê',
-'searchprofile-articles-tooltip' => 'Rechèrchiér dens $1',
-'searchprofile-project-tooltip' => 'Rechèrchiér dens $1',
-'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs mèdia',
-'searchprofile-everything-tooltip' => 'Rechèrchiér dens tot lo seto (les pâges de discussion avouéc)',
+'searchprofile-advanced' => 'Rechèrche avanciêe',
+'searchprofile-articles-tooltip' => 'Rechèrchiér dedens $1',
+'searchprofile-project-tooltip' => 'Rechèrchiér dedens $1',
+'searchprofile-images-tooltip' => 'Rechèrchiér des fichiérs',
+'searchprofile-everything-tooltip' => 'Rechèrchiér dedens tot lo contegnu (les pâges de discussion avouéc)',
'searchprofile-advanced-tooltip' => 'Chouèsir los èspâços de noms por la rechèrche',
'search-result-size' => '$1 ($2 mot{{PLURAL:$2||s}})',
'search-result-category-size' => '$1 membro{{PLURAL:$1||s}} ($2 sot-catègorie{{PLURAL:$2||s}}, $3 fichiér{{PLURAL:$3||s}})',
-'search-result-score' => 'Rapôrt : $1 %',
+'search-result-score' => 'Rapôrt : $1%',
'search-redirect' => '(redirèccion dês $1)',
'search-section' => '(sèccion $1)',
'search-suggest' => 'Voléd-vos dére : $1',
'search-interwiki-caption' => 'Projèts frâres',
'search-interwiki-default' => 'Rèsultats dessus $1 :',
'search-interwiki-more' => '(més)',
-'search-relatedarticle' => 'Raportâ',
-'mwsuggest-disable' => 'Dèsactivar los consèlys AJAX',
-'searcheverything-enable' => 'Rechèrchiér dens tôs los èspâços de noms',
-'searchrelated' => 'raportâ',
+'search-relatedarticle' => 'Aparentâ',
+'mwsuggest-disable' => 'Dèsactivar les idês AJAX',
+'searcheverything-enable' => 'Rechèrchiér dedens tôs los èspâços de noms',
+'searchrelated' => 'aparentâ',
'searchall' => 'tot',
-'showingresults' => "Visualisacion de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
-'showingresultsnum' => "Visualisacion de '''$3''' rèsultat{{PLURAL:$3||s}} dês lo numerô '''$2'''.",
+'showingresults' => "Vua de '''$1''' rèsultat{{PLURAL:$1||s}} dês lo numerô '''$2'''.",
+'showingresultsnum' => "Vua de '''$3''' rèsultat{{PLURAL:$3||s}} dês lo numerô '''$2'''.",
'showingresultsheader' => "{{PLURAL:$5|Rèsultat '''$1'''|Rèsultats '''$1 - $2'''}} de '''$3''' por '''$4'''",
'nonefound' => "'''Nota :''' solament quârques èspâços de noms sont rechèrchiês per dèfôt.
-Èprovâd en utilisent lo prèfixo ''all:'' por rechèrchiér dens tot lo contegnu (les pâges de discussion, los modèlos, ... avouéc) ou ben utilisâd l’èspâço de noms souhètâ coment prèfixo.",
-'search-nonefound' => 'Y at gins de rèsultat que corrèspond a la requéta.',
-'powersearch' => 'Rechèrche avanciê',
-'powersearch-legend' => 'Rechèrche avanciê',
-'powersearch-ns' => 'Rechèrchiér dens los èspâços de noms :',
-'powersearch-redir' => 'Fâre vêre les redirèccions',
+Èprovâd en empleyent lo prèfixo ''all:'' por rechèrchiér dedens tot lo contegnu (les pâges de discussion, los modèlos, ... avouéc) ou ben empleyéd l’èspâço de noms volu coment prèfixo.",
+'search-nonefound' => 'Y at gins de rèsultat que corrèspond a la rechèrche.',
+'powersearch' => 'Rechèrche avanciêe',
+'powersearch-legend' => 'Rechèrche avanciêe',
+'powersearch-ns' => 'Rechèrchiér dedens los èspâços de noms :',
+'powersearch-redir' => 'Listar les redirèccions',
'powersearch-field' => 'Rechèrchiér',
-'powersearch-togglelabel' => 'Pouentar :',
+'powersearch-togglelabel' => 'Chouèsir :',
'powersearch-toggleall' => 'Tot',
-'powersearch-togglenone' => 'Niona',
+'powersearch-togglenone' => 'Nion',
'search-external' => 'Rechèrche de defôr',
-'searchdisabled' => 'La rechèrche dessus {{SITENAME}} est dèsactivâ.
-En atendent la rèactivacion, vos pouede fâre una rechèrche per Google.
-Atencion, lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
+'searchdisabled' => 'La rechèrche dessus {{SITENAME}} est dèsactivâye.
+Pendent cél temps, vos pouede fâre na rechèrche avouéc Google.
+Notâd que lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
# Quickbar
-'qbsettings' => 'Bârra d’outils',
+'qbsettings' => 'Bârra rapida',
'qbsettings-none' => 'Niona',
-'qbsettings-fixedleft' => 'Gôche',
-'qbsettings-fixedright' => 'Drêta',
+'qbsettings-fixedleft' => 'Fixa a gôche',
+'qbsettings-fixedright' => 'Fixa a drêta',
'qbsettings-floatingleft' => 'Fllotenta a gôche',
'qbsettings-floatingright' => 'Fllotenta a drêta',
'qbsettings-directionality' => 'Fixa, d’aprés la dirèccionalitât d’ècritura de voutra lengoua',
'mypreferences' => 'Prèferences',
'prefs-edits' => 'Nombro de changements :',
'prefsnologin' => 'Pas branchiê',
-'prefsnologintext' => 'Vos dête étre <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê]</span> por changiér voutres prèferences usanciér.',
+'prefsnologintext' => 'Vos dête étre <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} branchiê]</span> por dèfenir les prèferences utilisator.',
'changepassword' => 'Changiér lo contresegno',
'prefs-skin' => 'Habelyâjo',
-'skin-preview' => 'Prèvisualisar',
-'datedefault' => 'Gins de prèference',
+'skin-preview' => 'Prèvêre',
+'datedefault' => 'Niona prèference',
'prefs-beta' => 'Fonccionalitâts « Bèta »',
'prefs-datetime' => 'Dâta et hora',
'prefs-labs' => 'Fonccionalitâts « Laboratiors »',
'prefs-user-pages' => 'Pâges utilisator',
'prefs-personal' => 'Enformacions a sè',
'prefs-rc' => 'Dèrriérs changements',
-'prefs-watchlist' => 'Lista de survelyence',
-'prefs-watchlist-days' => 'Nombro de jorns a montrar dedens la lista de survelyence :',
-'prefs-watchlist-days-max' => '$1 jorn{{PLURAL:$1||s}} u més',
-'prefs-watchlist-edits' => 'Nombro maximon de changements a montrar dedens la lista de survelyence ètendua :',
-'prefs-watchlist-edits-max' => 'Nombro lo ples grant : 1000',
-'prefs-watchlist-token' => 'Jeton por la lista de survelyence :',
-'prefs-misc' => 'Prèferences de totes sôrtes',
+'prefs-watchlist' => 'Lista de siuvu',
+'prefs-watchlist-days' => 'Nombro de jorns a montrar dedens la lista de siuvu :',
+'prefs-watchlist-days-max' => 'Por lo més $1 jorn{{PLURAL:$1||s}}',
+'prefs-watchlist-edits' => 'Nombro maximon de changements a montrar dedens la lista de siuvu ètendua :',
+'prefs-watchlist-edits-max' => 'Nombro maximon : 1000',
+'prefs-watchlist-token' => 'Jeton por la lista de siuvu :',
+'prefs-misc' => 'De totes sôrtes',
'prefs-resetpass' => 'Changiér lo contresegno',
'prefs-changeemail' => 'Changiér l’adrèce èlèctronica',
-'prefs-setemail' => 'Configurar l’adrèce èlèctronica',
+'prefs-setemail' => 'Dèfenir n’adrèce èlèctronica',
'prefs-email' => 'Chouèx de mèssageria èlèctronica',
'prefs-rendering' => 'Aparence',
-'saveprefs' => 'Encartar les prèferences',
-'resetprefs' => 'Rètablir les prèferences',
-'restoreprefs' => 'Rètablir totes les valors per dèfôt',
-'prefs-editing' => 'Fenétra d’èdicion',
-'prefs-edit-boxsize' => 'Talye de la fenétra d’èdicion.',
-'rows' => 'Rengiês :',
+'saveprefs' => 'Encartar',
+'resetprefs' => 'Èfaciér los changements pas encartâs',
+'restoreprefs' => 'Rètablir tota la configuracion per dèfôt',
+'prefs-editing' => 'Changement',
+'prefs-edit-boxsize' => 'Talye de la fenétra de changement.',
+'rows' => 'Renches :',
'columns' => 'Colones :',
'searchresultshead' => 'Rechèrche',
'resultsperpage' => 'Nombro de rèponses per pâge :',
'stub-threshold' => 'Limita d’amont por los <a href="#" class="stub">lims de vers los començons</a> (octèts) :',
'stub-threshold-disabled' => 'Dèsactivâ',
'recentchangesdays' => 'Nombro de jorns a montrar dedens los dèrriérs changements :',
-'recentchangesdays-max' => '$1 jorn{{PLURAL:$1||s}} u més',
+'recentchangesdays-max' => 'Por lo més $1 jorn{{PLURAL:$1||s}}',
'recentchangescount' => 'Nombro de changements a montrar per dèfôt :',
-'prefs-help-recentchangescount' => 'Cen encllut los dèrriérs changements, los historicos de les pâges et los jornals.',
-'prefs-help-watchlist-token' => 'En remplent cen avouéc una valor secrèta farat un flux RSS por voutra lista de survelyence.
-Tota pèrsona que cognêt cél jeton porrat liére voutra lista de survelyence, chouèsésséd vêr una valor sècurisâ.
-Vê-que una valor fêta per hasârd que vos pouede utilisar : $1',
-'savedprefs' => 'Les prèferences ont étâ encartâs.',
+'prefs-help-recentchangescount' => 'Los dèrriérs changements, los historicos de pâges et pués los jornals avouéc.',
+'prefs-help-watchlist-token' => 'Rempléd ceti champ avouéc na cllâf secrèta et pués un flux RSS serat fêt por voutra lista de siuvu.
+Tôs celos que cognessont cela cllâf porront liére voutra lista de siuvu, chouèsésséd vêr na valor sècurisâye.
+Vê-que na valor fêta per hasârd que vos pouede empleyér : $1',
+'savedprefs' => 'Voutres prèferences sont étâyes encartâyes.',
'timezonelegend' => 'Fus horèro :',
'localtime' => 'Hora locala :',
-'timezoneuseserverdefault' => 'Utilisar la valor per dèfôt du vouiqui ($1)',
-'timezoneuseoffset' => 'Ôtro (spècefiar lo dècalâjo)',
+'timezoneuseserverdefault' => 'Empleyér la valor du vouiqui per dèfôt ($1)',
+'timezoneuseoffset' => 'Ôtro (spècifiar lo dècalâjo)',
'timezoneoffset' => 'Dècalâjo horèro¹ :',
-'servertime' => 'Hora du sèrvor :',
-'guesstimezone' => 'Utilisar la valor du navigator',
+'servertime' => 'Hora du sèrvior :',
+'guesstimezone' => 'Empleyér la valor du navigator',
'timezoneregion-africa' => 'Africa',
'timezoneregion-america' => 'Amèriques',
'timezoneregion-antarctica' => 'Antartica',
'timezoneregion-australia' => 'Ôstralie',
'timezoneregion-europe' => 'Eropa',
'timezoneregion-indian' => 'Ocèan endien',
-'timezoneregion-pacific' => 'Ocèan pacefico',
+'timezoneregion-pacific' => 'Ocèan pacifico',
'allowemail' => 'Ôtorisar l’èxpèdicion de mèssâjos que vegnont d’ôtros usanciérs',
'prefs-searchoptions' => 'Rechèrche',
'prefs-namespaces' => 'Èspâços de noms',
# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
'aboutsite' => 'Um {{SITENAME}}',
-'aboutpage' => 'Project:Um',
+'aboutpage' => 'Project:Um verkefnið',
'copyright' => 'Efni má nota samkvæmt $1.',
'copyrightpage' => '{{ns:project}}:Höfundarréttur',
'currentevents' => 'Potturinn',
'edit-gone-missing' => '문서를 저장하지 못했습니다.
문서가 삭제된 것 같습니다.',
'edit-conflict' => '편집 충돌.',
-'edit-no-change' => '문ì\84\9cì\97\90 ì\95\84무ë\9f° ë³\80í\99\94ê°\80 ì\97\86기 ë\95\8c문ì\97\90 ë\8b¹ì\8b ì\9d\98 편집은 무시되었습니다.',
+'edit-no-change' => '문ì\84\9cì\97\90 ì\96´ë\96 í\95\9c ë°\94ë\80\9cë\8f\84 ì\97\86기 ë\95\8c문ì\97\90 편집은 무시되었습니다.',
'edit-already-exists' => '새 문서를 만들 수 없습니다.
-그 문서는 이미 존재합니다.',
+문서가 이미 존재합니다.',
'defaultmessagetext' => '기본 메세지 내용',
'content-failed-to-parse' => '$1 모델에 대한 $2 내용을 구문 분석하는 데 실패했습니다: $3',
'invalid-content-data' => '잘못된 내용 데이터입니다',
실명을 입력할 경우 문서 기여에 자신의 이름이 들어가게 됩니다.',
'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 바꾸기를 위해 필요합니다.',
'prefs-help-email-others' => '자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
-이 경우에도 당신의 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
+이 경우에도 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
'prefs-help-email-required' => '이메일 주소가 필요합니다.',
'prefs-info' => '기본 정보',
'prefs-i18n' => '언어 설정',
'confirmemail_success' => '이메일 주소가 인증되었습니다.
이제 [[Special:UserLogin|로그인]]해서 위키를 사용하세요.',
'confirmemail_loggedin' => '이메일 주소가 인증되었습니다.',
-'confirmemail_error' => '당신의 인증을 저장하는 도중 오류가 발생했습니다.',
+'confirmemail_error' => '인증을 저장하는 도중 오류가 발생했습니다.',
'confirmemail_subject' => '{{SITENAME}} 이메일 주소 인증',
'confirmemail_body' => '$1 IP 주소를 사용하는 사용자가
{{SITENAME}}의 "$2" 계정에 이메일 인증 신청을 했습니다.
# Feedback
'feedback-bugornote' => '기술적 문제를 구체적으로 설명할 준비가 되었다면 [$1 버그를 신고]해 주세요.
-아니면 아래에 쉬운 양식을 쓸 수 있습니다. 당신의 의견은 사용자 이름과 사용 중인 브라우저 정보와 함께 "[$3 $2]"에 남겨질 것입니다.',
+아니면 아래에 쉬운 양식을 쓸 수 있습니다. 의견은 사용자 이름과 함께 "[$3 $2]"에 남겨질 것입니다.',
'feedback-subject' => '제목:',
'feedback-message' => '내용:',
'feedback-cancel' => '취소',
'feedback-error1' => '오류: API 실행 결과를 인식할 수 없음',
'feedback-error2' => '오류: 편집 실패',
'feedback-error3' => '오류: API가 응답하지 않음',
-'feedback-thanks' => '감사합니다! "[$2 $1]" 문서에 당신의 의견을 남겼습니다.',
+'feedback-thanks' => '감사합니다! "[$2 $1]" 문서에 의견을 남겼습니다.',
'feedback-close' => '완료',
'feedback-bugcheck' => '감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.',
'feedback-bugnew' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
'tog-externaleditor' => 'Externen Editeur als Standard benotzen (Nëmme fir Experten, et musse speziell Astellungen op ärem Computer gemaach ginn. [//www.mediawiki.org/wiki/Manual:External_editors Méi Informatiounen.])',
'tog-externaldiff' => 'En Externen Diff-Programm als Standard benotzen (nëmme fir Experten, et musse speziell Astellungen op ärem Computer gemaach ginn. [//www.mediawiki.org/wiki/Manual:External_editors Méi Informatiounen])',
'tog-showjumplinks' => 'Aktivéiere vun de "Sprang op"-Linken',
-'tog-uselivepreview' => 'Live-Preview benotzen (JavaScript) (experimentell)',
+'tog-uselivepreview' => 'Live-Preview benotzen (brauch JavaScript)',
'tog-forceeditsummary' => 'Warnen, wa beim Späicheren de Resumé feelt',
'tog-watchlisthideown' => 'Meng Ännerungen op menger Iwwerwaachungslëscht verstoppen',
'tog-watchlisthidebots' => 'Ännerunge vu Botten op menger Iwwerwaachungslëscht verstoppen',
'blanknamespace' => '(Hoved)',
# Contributions
-'contributions' => 'Brukerbidrag',
+'contributions' => '{{GENDER:$1|Brukerbidrag}}',
'contributions-title' => 'Brukerbidrag av $1',
'mycontris' => 'Bidrag',
'contribsub2' => 'For $1 ($2)',
'pageinfo-protect-cascading' => 'Dypbeskyttelse starter herfra',
'pageinfo-protect-cascading-yes' => 'Ja',
'pageinfo-protect-cascading-from' => 'Dypbeskyttelse fra',
+'pageinfo-category-info' => 'Kategoriinformasjon',
+'pageinfo-category-pages' => 'Antall sider',
+'pageinfo-category-subcats' => 'Antall underkategorier',
+'pageinfo-category-files' => 'Antall filer',
# Skin names
'skinname-standard' => 'Standard',
'minutes' => '{{PLURAL:$1|$1 minutt|$1 minutter}}',
'hours' => '{{PLURAL:$1|$1 time|$1 timer}}',
'days' => '{{PLURAL:$1|$1 dag|$1 dager}}',
+'months' => '{{PLURAL:$1|$1 måned|$1 måneder}}',
+'years' => '{{PLURAL:$1|$1 år}}',
'ago' => '$1 siden',
'just-now' => 'nettopp',
'tog-externaleditor' => 'Standaard een externe tekstbewerker gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
'tog-externaldiff' => 'Standaard een extern vergelijkingsprogramma gebruiken (alleen voor experts - voor deze functie zijn speciale instellingen nodig. [//www.mediawiki.org/wiki/Manual:External_editors Meer informatie]).',
'tog-showjumplinks' => '"ga naar"-toegankelijkheidskoppelingen inschakelen',
-'tog-uselivepreview' => '"live voorvertoning" gebruiken (vereist JavaScript – experimenteel)',
+'tog-uselivepreview' => 'Live voorvertoning gebruiken (vereist JavaScript)',
'tog-forceeditsummary' => 'Een melding geven bij een lege bewerkingssamenvatting',
'tog-watchlisthideown' => 'Eigen bewerkingen op mijn volglijst verbergen',
'tog-watchlisthidebots' => 'Botbewerkingen op mijn volglijst verbergen',
'newwindow' => '(opent in een nieuw venster)',
'cancel' => 'Annuleren',
'moredotdotdot' => 'Meer…',
+'morenotlisted' => 'Meer niet in de lijst...',
'mypage' => 'Gebruikerspagina',
'mytalk' => 'Overleg',
'anontalk' => 'Overlegpagina voor dit IP-adres',
# E-mail sending
'php-mail-error-unknown' => 'Er is een onbekende fout opgetreden in de mail()-functie van PHP',
'user-mail-no-addy' => 'Geprobeerd een e-mail te verzenden zonder een e-mailadres.',
+'user-mail-no-body' => 'Er is geprobeerd een e-mail te verzenden zonder inhoud of met een hele korte inhoud.',
# Change password dialog
'resetpass' => 'Wachtwoord wijzigen',
'pageinfo-magic-words' => '{{PLURAL:$1|Magisch woord|Magische woorden}} ($1)',
'pageinfo-hidden-categories' => 'Verborgen {{PLURAL:$1|categorie|categorieën}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Gebruikt sjabloon|Gebruikte sjablonen}} ($1)',
+'pageinfo-transclusions' => "{{PLURAL:$1|Pagina|Pagina's}} getranscludeerd op ($1)",
'pageinfo-toolboxlink' => 'Paginagegevens',
'pageinfo-redirectsto' => 'Verwijst door naar',
'pageinfo-redirectsto-info' => 'informatie',
'youhavenewmessages' => 'Você tem $1 ($2).',
'newmessageslink' => 'novas mensagens',
'newmessagesdifflink' => 'última alteração',
-'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|outros usuários}} ($2)',
+'youhavenewmessagesfromusers' => 'Você tem $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2)',
'youhavenewmessagesmanyusers' => 'Você tem $1 de muitos usuários ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|uma mensagem nova|mensagens novas}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|última alteração|últimas alterações}}',
'feb' => 'Abbreviation of February, the second month of the Gregorian calendar',
'mar' => 'Abbreviation of March, the third month of the Gregorian calendar',
'apr' => 'Abbreviation of April, the fourth month of the Gregorian calendar',
-'may' => 'Abbreviation of May, the fifth month of the Gregorian calendar',
+'may' => 'Abbreviation of May, the fifth month of the Gregorian calendar.
+{{Identical|May}}',
'jun' => 'Abbreviation of June, the sixth month of the Gregorian calendar',
'jul' => 'Abbreviation of July, the seventh month of the Gregorian calendar',
'aug' => 'Abbreviation of August, the eighth month of the Gregorian calendar',
{{Identical|Cancel}}',
'moredotdotdot' => '{{Identical|More...}}',
'morenotlisted' => 'An indication that more of a certain list is not shown.',
-'mypage' => "A text for the link to the user's user page in the links at the top of the page.",
+'mypage' => "A text for the link to the user's user page in the links at the top of the page.
+{{Identical|Page}}",
'mytalk' => 'In the personal URLs page section - right upper corner.
Used as link title in your personal toolbox.
{{Identical|Create}}',
'editthispage' => 'This is the "edit" link as used in the skins Classic/Standard, Cologne Blue and Nostalgia. See {{msg|create-this-page}} for when the page does not exist.',
-'create-this-page' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the text for the link leading to the edit form on pages that have not yet been created. See {{msg|editthispage}} for when the page already exists.
+'create-this-page' => 'In the skins Classic/Standard, Cologne Blue and Nostalgia this is the text for the link leading to the edit form on pages that have not yet been created. See {{msg-mw|editthispage}} for when the page already exists.
{{Identical|Createpage}}',
'delete' => 'Name of the Delete tab shown for admins. Should be in the infinitive mood.
* {{msg-mw|Currentevents-url}}
* {{msg-mw|Accesskey-n-currentevents}}
* {{msg-mw|Tooltip-n-currentevents}}',
-'currentevents-url' => "Target page of ''{{Mediawiki:currentevents}}'' in the sidebar. See also {{msg|currentevents}}.
+'currentevents-url' => "Target page of ''CurrentEvents'' in the sidebar. See also {{msg-mw|currentevents}}.
{{doc-important|Do not translate the \"<tt>Project:</tt>\" part.}}",
'disclaimers' => 'Used as display name for the link to [[{{MediaWiki:Disclaimerpage}}]] shown at the bottom of every page on the wiki. Example [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].',
'disclaimerpage' => 'Used as page for that contains the site disclaimer. Used at the bottom of every page on the wiki. Example: [[{{MediaWiki:Disclaimerpage}}|{{MediaWiki:Disclaimers}}]].
'edithelp' => 'This is the text that appears on the editing help link that is near the bottom of the editing page',
'edithelppage' => 'The help page displayed when a user clicks on editing help link which is present on the right of Show changes button.
{{doc-important|Do not change the "<tt>Help:</tt>" part.}}',
-'helppage' => 'The link destination used by default in the sidebar, and in {{msg|noarticletext}}.
+'helppage' => 'The link destination used by default in the sidebar, and in {{msg-mw|noarticletext}}.
{{doc-important|Do not change the "<tt>Help:</tt>" part.}}
{{Identical|HelpContent}}',
'mainpage' => 'Defines the link and display name of the main page of the wiki. Shown as the top link in the navigation part of the interface. Please do not change it too often, that could break things!
See also:
* {{msg-mw|Mainpage-description}}
* {{msg-mw|Accesskey-n-mainpage-description}}
-* {{msg-mw|Tooltip-n-mainpage-description}}',
+* {{msg-mw|Tooltip-n-mainpage-description}}
+{{Identical|Main page}}',
'policy-url' => 'Description: The URL of the project page describing the policies of the wiki. This is shown below every page (the left link).
{{doc-important|Do not change the "<tt>Project:</tt>" part.}}',
'portal' => "Display name for the 'Community portal', shown in the sidebar menu of all pages. The target page is meant to be a portal for users where useful links are to be found about the wiki's operation.
* $2: Content of
*# {{msg-mw|Missingarticle-rev}} - Permalink with invalid revision#
*# {{msg-mw|Missingarticle-diff}} - Diff with invalid revision#",
-'missingarticle-rev' => 'Parameter $2 of {{msg|Missing-article}}: It is shown after the articlename.
+'missingarticle-rev' => 'Parameter $2 of {{msg-mw|Missing-article}}: It is shown after the articlename.
* $1: revision# of the requested id
[http://translatewiki.net/w/i.php?title=Translating:Tasks&oldid=371789000 Click here] to see an example of such an error message.',
-'missingarticle-diff' => 'Parameter $2 of {{msg|Missing-article}}: It is shown after the articlename.
+'missingarticle-diff' => 'Parameter $2 of {{msg-mw|Missing-article}}: It is shown after the articlename.
* $1: revision# of the old id
* $2: revision# of the id build the diff with.
'invalidtitle-unknownnamespace' => 'Displayed when an invalid title was encountered (generally in a list) and the namespace number is unknown.
* $1 is the namespace number
* $2 is the part of the title after the namespace (e.g. SomeName for the page User:SomeName)',
-'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
+'exception-nologin' => 'Generic page title used on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.
+{{Identical|Not logged in}}',
'exception-nologin-text' => 'Generic reason displayed on error page when a user is not logged in. Message used by the UserNotLoggedIn exception.',
# Virus scanner
'yourdomainname' => 'Used as label for listbox.',
'password-change-forbidden' => 'Error message shown when an external authentication source does not allow the password to be changed.',
'externaldberror' => 'This message is thrown when a valid attempt to change the wiki password for a user fails because of a database error or an error from an external system.',
-'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg|nav-login-createaccount}} is shown there).
+'login' => "Shown as the caption of the button at [[Special:UserLogin]], and also to anonymous users in the upper right corner of the page when they can't create an account (otherwise the message {{msg-mw|nav-login-createaccount}} is shown there).
See also:
* {{msg-mw|Login}}
* {{msg-mw|Accesskey-pt-anonlogin}}
* {{msg-mw|Tooltip-pt-anonlogin}}
{{Identical|Log in}}",
-'nav-login-createaccount' => "Shown to anonymous users in the upper right corner of the page. When you can't create an account, the message {{msg|login}} is shown.
+'nav-login-createaccount' => "Shown to anonymous users in the upper right corner of the page. When you can't create an account, the message {{msg-mw|login}} is shown.
{{identical|Log in / create account}}",
'loginprompt' => 'A small notice in the log in form.',
'userlogin' => 'Name of special page [[Special:UserLogin]] where a user can log in or click to create a user account.
'loginsuccess' => 'The content of the page saying that you are logged in. The title of the page is "[[MediaWiki:Loginsuccesstitle/{{SUBPAGENAME}}|{{int:loginsuccesstitle}}]]". $1 is the name of the logged in user.
<nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is supported.',
-'nosuchuser' => 'Displayed when trying to log in with an unexisting username. When you are not allowed to create an account, the message {{msg|nosuchusershort}} is displayed.',
-'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg|nosuchusershort}} is displayed.",
+'nosuchuser' => 'Displayed when trying to log in with an unexisting username. When you are not allowed to create an account, the message {{msg-mw|nosuchusershort}} is displayed.',
+'nosuchusershort' => "Displayed when trying to log in with a non-existant username. This message is only shown when you can't create an account, otherwise the message {{msg-mw|nosuchusershort}} is displayed.",
'nouserspecified' => 'Used as error message when username to fetch is not specified.',
'login-userblocked' => 'This message supports GENDER, username is available in $1.',
'wrongpassword' => 'Used as error message when the provided password is wrong.',
* {{msg-mw|Accesskey-watch}}
* {{msg-mw|Tooltip-watch}}
{{Identical|Watch this page}}',
-'savearticle' => 'Text on the Save page button. See also {{msg|showpreview}} and {{msg|showdiff}} for the other buttons.
+'savearticle' => 'Text on the Save page button. See also {{msg-mw|showpreview}} and {{msg-mw|showdiff}} for the other buttons.
See also:
* {{msg-mw|Savearticle}}
'preview' => 'The title of the Preview page shown after clicking the "Show preview" button in the edit page. Since this is a heading, it should probably be translated as a noun and not as a verb.
{{Identical|Preview}}',
-'showpreview' => 'The text of the button to preview the page you are editing. See also {{msg|showdiff}} and {{msg|savearticle}} for the other buttons.
+'showpreview' => 'The text of the button to preview the page you are editing. See also {{msg-mw|showdiff}} and {{msg-mw|savearticle}} for the other buttons.
See also:
* {{msg-mw|Showpreview}}
* {{msg-mw|Mypreferences}}
* {{msg-mw|Accesskey-pt-preferences}}
* {{msg-mw|Tooltip-pt-preferences}}
-{{Identical|My preferences}}',
+{{Identical|Preferences}}',
'prefs-edits' => 'In user preferences.',
'prefsnologin' => '{{Identical|Not logged in}}',
'prefsnologintext' => '* $1 - URI for "returnto" argument',
'prefs-rc' => 'Used in user preferences.
{{Identical|Recent changes}}',
-'prefs-watchlist' => 'Used in user preferences.',
+'prefs-watchlist' => 'Used in user preferences.
+{{Identical|My watchlist}}',
'prefs-watchlist-days' => 'Used in [[Special:Preferences]], tab "Watchlist".',
'prefs-watchlist-days-max' => 'Shown as hint in [[Special:Preferences]], tab "Watchlist"',
'prefs-watchlist-edits' => 'Used in [[Special:Preferences]], tab "Watchlist".',
'right-edit' => '{{doc-right|edit}}
Basic right to edit pages that are not protected.',
'right-createpage' => '{{doc-right|createpage}}
-Basic right to create pages. The right to edit discussion/talk pages is {{msg|right-createtalk|pl=yes}}.',
+Basic right to create pages. The right to edit discussion/talk pages is {{msg-mw|right-createtalk|pl=yes}}.',
'right-createtalk' => '{{doc-right|createtalk}}
-Basic right to create discussion/talk pages. The right to edit other pages is {{msg|right-createpage|pl=yes}}.',
+Basic right to create discussion/talk pages. The right to edit other pages is {{msg-mw|right-createpage|pl=yes}}.',
'right-createaccount' => '{{doc-right|createaccount}}
The right to [[Special:CreateAccount|create a user account]].',
'right-minoredit' => '{{doc-right|minoredit}}
-The right to use the "This is a minor edit" checkbox. See {{msg|minoredit|pl=yes}} for the message used for that checkbox.',
+The right to use the "This is a minor edit" checkbox. See {{msg-mw|minoredit|pl=yes}} for the message used for that checkbox.',
'right-move' => '{{doc-right|move}}
The right to move any page that is not protected from moving.
{{Identical|Move page}}',
'right-upload' => '{{doc-right|upload}}
The right to [[Special:Upload|upload]] a file (this includes images, media, audio, ...).',
'right-reupload' => '{{doc-right|reupload}}
-The right to upload a file under a file name that already exists. Related messages: {{msg|right-upload|pl=yes}}, {{msg|right-reupload-own|pl=yes}} and {{msg|right-reupload-shared|pl=yes}}.',
+The right to upload a file under a file name that already exists.
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload-own}}
+* {{msg-mw|right-reupload-shared}}',
'right-reupload-own' => '{{doc-right|reupload-own}}
-Right to upload a file under a file name that already exists, and that the same user has uploaded. Related messages: {{msg|right-upload|pl=yes}} and {{msg|right-reupload|pl=yes}}.',
+Right to upload a file under a file name that already exists, and that the same user has uploaded.
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload}}',
'right-reupload-shared' => '{{doc-right|reupload-shared}}
-The right to upload a file locally under a file name that already exists in a shared database (for example Commons). Related messages: {{msg|right-upload|pl=yes}} and {{msg|right-reupload|pl=yes}}.',
+The right to upload a file locally under a file name that already exists in a shared database (for example Commons).
+
+Related messages:
+* {{msg-mw|right-upload}}
+* {{msg-mw|right-reupload}}',
'right-upload_by_url' => '{{doc-right|upload by url}}',
'right-purge' => '{{doc-right|purge}}
The right to use <tt>&action=purge</tt> in the URL, without needing to confirm it (by default, anonymous users need to confirm it).',
If you are in that group, you have (by default) the '''right \"autoconfirmed\"'''. With this right, you can for example <!-- I think this right includes more things --> edit semi-protected pages.",
'right-bot' => '{{doc-right|bot}}',
'right-nominornewtalk' => '{{doc-right|nominornewtalk}}
-If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg|right-minoredit|pl=yes}}), the user will not get a notification "You have new messages".',
+If someone with this right (bots by default) edits a user talk page and marks it as minor (requires {{msg-mw|right-minoredit}}), the user will not get a notification "You have new messages".',
'right-apihighlimits' => '{{doc-right|apihighlimits}}',
'right-writeapi' => '{{doc-right|writeapi}}',
'right-delete' => '{{doc-right|delete}}',
'right-bigdelete' => '{{doc-right|bigdelete}}',
'right-deletelogentry' => '{{doc-right|deletelogentry}}
This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-sysop|pl=yes}}, although this right is disabled by default.
+It can be given to the group {{msg-mw|group-sysop}}, although this right is disabled by default.
-See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+See also:
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deleterevision}}',
'right-deleterevision' => '{{doc-right|deleterevision}}
This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-sysop|pl=yes}}, although this right is disabled by default.
+It can be given to the group {{msg-mw|group-sysop}}, although this right is disabled by default.
See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}',
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deletelogentry}}',
'right-deletedhistory' => '{{doc-right|deletedhistory}}',
'right-deletedtext' => '{{doc-right|deletedtext}}',
'right-browsearchive' => '{{doc-right|browsearchive}}',
'right-undelete' => '{{doc-right|undelete}}',
'right-suppressrevision' => '{{doc-right|suppressrevision}}
This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress|pl=yes}}, although that group is disabled by default.
-See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+See also:
+* {{msg-mw|right-suppressionlog|pl=yes}}
+* {{msg-mw|right-hideuser|pl=yes}}
+* {{msg-mw|right-deletelogentry|pl=yes}}
+* {{msg-mw|right-deleterevision|pl=yes}}',
'right-suppressionlog' => '{{doc-right|suppressionlog}}
This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
See also
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-hideuser|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-hideuser}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
'right-block' => '{{doc-right|block}}',
'right-blockemail' => '{{doc-right|blockemail}}',
'right-hideuser' => '{{doc-right|hideuser}}
This user right is part of the [[mw:RevisionDelete|RevisionDelete]] feature.
-It can be given to the group {{msg|group-suppress|pl=yes}}, although that group is disabled by default.
+It can be given to the group {{msg-mw|group-suppress}}, although that group is disabled by default.
See also
-* {{msg|right-suppressionlog|pl=yes}}
-* {{msg|right-suppressrevision|pl=yes}}
-* {{msg|right-deletelogentry|pl=yes}}
-* {{msg|right-deleterevision|pl=yes}}',
+* {{msg-mw|right-suppressionlog}}
+* {{msg-mw|right-suppressrevision}}
+* {{msg-mw|right-deletelogentry}}
+* {{msg-mw|right-deleterevision}}',
'right-ipblock-exempt' => '{{doc-right|ipblock-exempt}}
This user automatically bypasses IP blocks, auto-blocks and range blocks - so I presume - but I am uncertain',
'right-proxyunbannable' => '{{doc-right|proxyunbannable}}',
'doubleredirects' => 'Name of [[Special:DoubleRedirects]] displayed in [[Special:SpecialPages]]',
'doubleredirectstext' => 'Shown on top of [[Special:Doubleredirects]]',
'double-redirect-fixed-move' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after a page move. See also {{msg|fix-double-redirects}}.',
-'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg|double-redirect-fixed-move}}.',
+'double-redirect-fixed-maintenance' => 'This is the message in the log when the software (under the username {{msg-mw|double-redirect-fixer}}) updates the redirects after running maintenance/fixDoubleRedirects.php. Compare with {{msg-mw|double-redirect-fixed-move}}.',
'double-redirect-fixer' => "This is the '''username''' of the user who updates the double redirects after a page move. A user is created with this username, so it is perhaps better to not change this message too often. See also {{msg|double-redirect-fixed-move}} and {{msg|fix-double-redirects}}.",
'brokenredirects' => 'Name of [[Special:BrokenRedirects]] displayed in [[Special:SpecialPages]]',
See also:
* {{msg-mw|Nopagetitle|title}}
* {{msg-mw|Nopagetext|text}}',
-'pager-newer-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the second argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
+'pager-newer-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the second argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.
+{{Identical|Newer}}",
'pager-older-n' => "This is part of the navigation message on the top and bottom of Special pages which are lists of things in date order, e.g. the User's contributions page. It is passed as the first argument of {{msg-mw|Viewprevnext}}. $1 is the number of items shown per page.",
'suppress' => '{{Identical|Oversight}}',
'querypage-disabled' => "On special pages that use expensive database queries but are not cacheable, this message is displayed when 'miser mode' is on (i.e. no expensive queries allowed).",
'watchlistanontext' => '* $1 is a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description',
'watchnologin' => '{{Identical|Not logged in}}',
'addwatch' => 'Link to a dialog box, displayed at the end of the list of categories at the foot of each page.',
-'addedwatchtext' => 'Explanation shown when clicking on the {{msg|watch}} tab. See also {{msg|addedwatch}}.',
+'addedwatchtext' => 'Explanation shown when clicking on the {{msg-mw|watch}} tab.
+
+See also {{msg-mw|addedwatch}}.',
'removedwatchtext' => "After a page has been removed from a user's watchlist by clicking the {{msg|unwatch}} tab at the top of an article, this message appears just below the title of the article. $1 is the title of the article. See also {{msg|removedwatch}} and {{msg|addedwatchtext}}.",
'watch' => '{{doc-actionlink}}
Name of the Watch tab. Should be in the imperative mood.
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'Text displayed when clicked on the watch tab: [[MediaWiki:Watch/{{SUBPAGENAME}}|{{int:watch}}]]. It means the wiki is adding that page to your watchlist.',
'unwatching' => 'Text displayed when clicked on the unwatch tab: [[MediaWiki:Unwatch/{{SUBPAGENAME}}|{{int:unwatch}}]]. It means the wiki is removing that page from your watchlist.',
-'watcherrortext' => 'When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed. See also {{msg|addedwatchtext}}. and {{msg|addedwatchtext}}. This message is used raw and should not contain wikitext.',
+'watcherrortext' => 'When a user clicked the watch/unwatch tab and the action did not succeed, this message is displayed.
+
+This message is used raw and should not contain wikitext.
+
+See also:
+* {{msg-mw|addedwatchtext}}
+* {{msg-mw|addedwatchtext}}',
'enotif_reset' => "Used in [[Special:Watchlist]].
*{{msg-mw|enotif subject moved}}
*{{msg-mw|enotif subject restored}}
*{{msg-mw|enotif subject changed}}',
-'created' => 'Possible value for $CHANGEDORCREATED in {{msg|enotif_subject}} and {{msg|enotif_body}}.',
-'changed' => 'Possible value for $CHANGEDORCREATED in {{msg|enotif_subject}} and {{msg|enotif_body}}.',
+'created' => 'Possible value for $CHANGEDORCREATED in the following messages:
+* {{msg-mw|enotif_subject}}
+* {{msg-mw|enotif_body}}',
+'changed' => 'Possible value for $CHANGEDORCREATED in the following messages:
+* {{msg|enotif_subject}}
+* {{msg|enotif_body}}',
# Delete
'confirm' => 'Submit button text for protection confirmation
{{Identical|Deletion log}}',
'dellogpagetext' => 'Text in [[Special:Log/delete]].',
-'deletionlog' => 'This message is used to link to the deletion log as parameter $1 of {{msg|Filewasdeleted}}, as parameter $2 of {{msg|deletedtext}}, and in log lines on [[Special:DeletedContributions]].
-
+'deletionlog' => 'This message is used to link to the deletion log:
+* Used as parameter $1 of {{msg-mw|Filewasdeleted}}
+* Used as parameter $2 of {{msg-mw|deletedtext}}
+* Used in log lines on [[Special:DeletedContributions]].
{{Identical|Deletion log}}',
'reverted' => '{{Identical|Revert}}',
'deletecomment' => '{{Identical|Reason}}',
<pre>* Group
** Common delete reason
** ...</pre>',
-'delete-edit-reasonlist' => 'Shown beneath the page deletion form on the right side. It is a link to [[MediaWiki:Deletereason-dropdown]]. See also {{msg|Ipb-edit-dropdown}} and {{msg|Protect-edit-reasonlist}}.
+'delete-edit-reasonlist' => 'Shown beneath the page deletion form on the right side. It is a link to {{msg-mw|Deletereason-dropdown|notext=1}}.
+See also:
+* {{msg-mw|Ipb-edit-dropdown}}
+* {{msg-mw|Protect-edit-reasonlist}}.
{{Identical|Edit delete reasons}}',
'delete-toobig' => 'Parameters:
* $1 - the upper limit of number of revisions
<tt><nowiki>* Groupname</nowiki></tt> - defines a new group<br />
<tt><nowiki>** Reason</nowiki></tt> - defines a reason in this group',
-'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to [[MediaWiki:Protect-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Ipb-edit-dropdown}}.',
+'protect-edit-reasonlist' => 'Shown beneath the page protection form on the right side. It is a link to {{msg-mw|Protect-dropdown|notext=1}}.
+
+See also:
+* {{msg-mw|Delete-edit-reasonlist}}
+* {{msg-mw|Ipb-edit-dropdown}}',
'protect-expiry-options' => "{{Identical|Infinite}}{{doc-important|Be careful: '''1 translation:1 english''', so the first part is the translation and the second part should stay in English.}}
Options for the duration of the page protection. Example: See e.g. [[MediaWiki:Protect-expiry-options/nl]] if you still don't know how to do it.",
* $7 is the revision comment",
# Namespace form on various pages
-'namespace' => 'This message is located at [[Special:Contributions]].',
+'namespace' => 'This message is located at [[Special:Contributions]].
+{{Identical|Namespace}}',
'invert' => 'Displayed in [[Special:RecentChanges|RecentChanges]], [[Special:RecentChangesLinked|RecentChangesLinked]] and [[Special:Watchlist|Watchlist]].
This message means "Invert selection of namespace".
{{Identical|For $1}}',
'nocontribs' => 'Optional parameter: $1 is the user name',
'uctop' => 'This message is used in [[Special:Contributions]]. It is used to show that a particular edit was the last made to a page. Example: 09:57, 11 February 2008 (hist) (diff) Pagename (edit summary) (top)',
-'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg|year}}.',
-'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a inputbox to select a specific year to view the edits made in that year, and the earlier years. See also {{msg|month}}.',
+'month' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a dropdown box to select a specific month to view the edits made in that month, and the earlier months. See also {{msg-mw|year}}.',
+'year' => 'Used in [[Special:Contributions]] and history pages ([{{fullurl:Sandbox|action=history}} example]), as label for a inputbox to select a specific year to view the edits made in that year, and the earlier years. See also {{msg-mw|month}}.',
'sp-contributions-newbies' => 'Text of radio button on special page [[Special:Contributions]].',
'sp-contributions-newbies-sub' => "Note at the top of the page of results for a search on [[Special:Contributions]] where 'Show contributions for new accounts only' has been selected.",
'sp-contributions-blocked-notice-anon' => 'Same as {{msg-mw|Sp-contributions-blocked-notice}} but for anonymous users.',
'sp-contributions-search' => 'Used on [[Special:Contributions]]',
'sp-contributions-username' => 'This message appears whenever someone requests [[Special:Contributions]].
-
-{{Identical/IP address or username}}',
+{{Identical|IP address or username}}',
'sp-contributions-toponly' => '"top revision" means the "latest revision"',
'sp-contributions-submit' => '{{Identical|Search}}',
'sp-contributions-explain' => '{{optional}}',
'blockip-legend' => 'Legend/Header for the fieldset around the input form of [[Special:Block]].
{{Identical|Block user}}',
-'ipadressorusername' => '{{Identical/IP address or username}}',
+'ipadressorusername' => '{{Identical|IP address or username}}',
'ipbexpiry' => '{{Identical|Expiry}}',
'ipbreason' => 'Label of the block reason dropdown in [[Special:BlockIP]] and the unblock reason textfield in [{{fullurl:Special:IPBlockList|action=unblock}} Special:IPBlockList?action=unblock].
* {{msg-mw|ipbhidename}}
* {{msg-mw|ipbwatchuser}}
* {{msg-mw|ipb-hardblock}}',
-'ipb-change-block' => 'Confirmation checkbox required for blocks that would override an earlier block. Appears together with {{msg|ipb-needreblock}}.',
+'ipb-change-block' => 'Confirmation checkbox required for blocks that would override an earlier block. Appears together with {{msg-mw|ipb-needreblock}}.',
'ipb-confirm' => 'Used as hidden field in the form on [[Special:Block]].',
'badipaddress' => 'An error message shown when one entered an invalid IP address in blocking page.',
'blockipsuccesssub' => 'Used as page title in [[Special:Block]].
Parameters:
* $1 - username, can be used for GENDER',
-'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to [[MediaWiki:Ipbreason-dropdown]]. See also {{msg|Delete-edit-reasonlist}} and {{msg|Protect-edit-reasonlist}}.',
+'ipb-edit-dropdown' => 'Shown beneath the user block form on the right side. It is a link to {{msg-mw|Ipbreason-dropdown|notext=1}}.
+
+See also:
+* {{msg-mw|Delete-edit-reasonlist}}
+* {{msg-mw|Protect-edit-reasonlist}}',
'ipb-unblock-addr' => 'Used in [[Special:Block]].
* $1 - target username',
'ipb-blocklist-contribs' => 'Used in [[Special:Block]].
Import failed: XML import parse failure at line 1, col 1 (byte 3; "- <mediawiki xml"): Empty document',
'import-upload' => 'Used on [[Special:Import]].
-Related messages: {{msg|right-importupload|pl=yes}} (the user right for this).',
+Related messages: {{msg-mw|right-importupload|pl=yes}} (the user right for this).',
'import-token-mismatch' => 'Used as error message in [[Special:Import]].
See also:
* {{msg-mw|Mypreferences}}
* {{msg-mw|Accesskey-pt-preferences}}
* {{msg-mw|Tooltip-pt-preferences}}
-{{Identical|My preferences}}',
+{{Identical|Preferences}}',
'tooltip-pt-watchlist' => 'Tooltip shown when hovering over the {{msg-mw|Mywatchlist}} link in your personal toolbox (upper right side).
See also:
* {{msg-mw|Accesskey-watch}}
* {{msg-mw|Tooltip-watch}}
{{Identical|Add this page to your watchlist}}',
-'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).
+'tooltip-watchlistedit-normal-submit' => 'Tooltip for {{msg-mw|watchlistedit-normal-submit}} (used as button on [[Special:EditWatchlist]]).
See also:
* {{msg-mw|Watchlistedit-normal-submit}}
* {{msg-mw|Accesskey-watchlistedit-normal-submit}}
* {{msg-mw|Tooltip-watchlistedit-normal-submit}}',
-'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).
+'tooltip-watchlistedit-raw-submit' => 'Tooltip for {{msg-mw|watchlistedit-raw-submit}} (used as button on [[Special:EditWatchlist/raw]]).
See also:
* {{msg-mw|Watchlistedit-raw-submit}}
* {{msg-mw|Pageinfo-templates}}',
'pageinfo-toolboxlink' => "Information link for the page (like 'What links here', but to action=info for the current page instead)",
'pageinfo-redirectsto' => 'Key for the row shown if this page is a redirect. Verb. See [http://en.wikipedia.org/w/index.php?title=Main_page&action=info example].',
-'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.',
+'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.
+{{Identical|Info}}',
'pageinfo-contentpage' => 'Key for the row shown on [{{fullurl:News|action=info}} action=info] if this page is [[mw:Manual:Article count|counted as a content page]]',
'pageinfo-contentpage-yes' => 'Yes, this page is a content page',
'pageinfo-protect-cascading' => 'Key for the row which shows whether this page has cascading protection enabled
'markedaspatrolledtext' => 'Used when marking a change as patrolled.
The title for this message is {{msg-mw|Markedaspatrolled}}.
-{{Related|Markedaspatrolled}}
-{{Identical|Markedaspatrolled}}',
+{{Related|Markedaspatrolled}}',
'rcpatroldisabled' => 'Used as title of the error message {{msg-mw|Rcpatroldisabledtext}}, when marking a change as patrolled.
{{Related|Markedaspatrolled}}',
'rcpatroldisabledtext' => 'Used as the error message when marking a change as patrolled.
# Patrol log
'patrol-log-page' => '{{doc-logpage}}',
'patrol-log-header' => 'Text that appears above the log entries on the [[Special:log|patrol log]].',
-'log-show-hide-patrol' => '* $1 is one of {{msg|show}} or {{msg|hide}}',
+'log-show-hide-patrol' => '* $1 is one of {{msg-mw|show}} or {{msg-mw|hide}}',
# Image deletion
'deletedrevision' => '* $1 - archive name of old image',
'watchlisttools-raw' => '[[Special:Watchlist]]: Navigation link under the title.
See also:
-* {{msg|watchlisttools-view}}
-* {{msg|watchlisttools-edit}}
+* {{msg-mw|watchlisttools-view}}
+* {{msg-mw|watchlisttools-edit}}
{{Identical|Edit raw watchlist}}',
# Iranian month names
'tog-externaleditor' => 'Utilisar sco standard in editur extern (be per experts, basegna ina configuraziun speziala da des computer. [//www.mediawiki.org/wiki/Manual:External_editors Dapli infurmaziuns.])',
'tog-externaldiff' => 'Utilisar sco standard in program extern per visualisar differenzas tranter versiuns (be per experts, basegna ina configuraziun speziala da des computer. [//www.mediawiki.org/wiki/Manual:External_editors Dapli infurmaziuns.])',
'tog-showjumplinks' => 'Activar las colliaziuns "seglir a"',
-'tog-uselivepreview' => 'Utilisar la prevista dinamica (basegna JavaScript) (experiment!)',
+'tog-uselivepreview' => 'Utilisar la prevista dinamica (basegna JavaScript)',
'tog-forceeditsummary' => 'Avertir durant memoriar sche la resumaziun manca',
'tog-watchlisthideown' => "Zuppentar mias modificaziuns en la glista d'observaziun",
'tog-watchlisthidebots' => "Zuppentar modificaziuns da bots en la glista d'observaziun",
'tog-externaleditor' => "Використовувати зовнішній редактор за умовчанням (тільки для досвідчених користувачів, вимагає спеціальних налаштувань вашого комп'ютера [//www.mediawiki.org/wiki/Manual:External_editors Детальніше.])",
'tog-externaldiff' => "Використовувати зовнішню програму порівняння версій за умовчанням (тільки для експертів, вимагає спеціальних налаштувань вашого комп'ютера. [//www.mediawiki.org/wiki/Manual:External_editors Детальніше.])",
'tog-showjumplinks' => 'Активізувати допоміжні посилання «перейти до»',
-'tog-uselivepreview' => 'Ð\92икоÑ\80иÑ\81Ñ\82овÑ\83ваÑ\82и Ñ\88видкий попеÑ\80еднÑ\96й пеÑ\80еглÑ\8fд (JavaScript)',
+'tog-uselivepreview' => 'Ð\97аÑ\81Ñ\82оÑ\81овÑ\83ваÑ\82и Ñ\88видкий попеÑ\80еднÑ\96й пеÑ\80еглÑ\8fд (поÑ\82Ñ\80ебÑ\83Ñ\94 JavaScript)',
'tog-forceeditsummary' => 'Попереджати, коли не зазначений короткий опис редагування',
'tog-watchlisthideown' => 'Приховати мої редагування у списку спостереження',
'tog-watchlisthidebots' => 'Приховати редагування ботів у списку спостереження',
# E-mail sending
'php-mail-error-unknown' => 'Невідома помилка в PHP-mail() функції',
'user-mail-no-addy' => 'Спроба надсилання електронної пошти без зазначеної адреси електронної пошти.',
-'user-mail-no-body' => 'Спроба надіслати електронного листа із порожнім, або назвичайно коротким вмістом.',
+'user-mail-no-body' => 'Спроба надіслати електронного листа з порожнім або надто коротким вмістом.',
# Change password dialog
'resetpass' => 'Змінити пароль',
'linksearch-pat' => 'Шаблон для пошуку:',
'linksearch-ns' => 'Простір назв:',
'linksearch-ok' => 'Знайти',
-'linksearch-text' => 'Ð\9cожна викоÑ\80иÑ\81Ñ\82овÑ\83вати підстановочні символи, наприклад, «*.wikipedia.org».
-Ð\9dеобÑ\85Ñ\96дний домен принаймні верхнього рівня, наприклад «*.org».<br />
-{{PLURAL:$2|Підтримуваний протокол|Підтримувані протоколи}}: <code>$1</code> (за замовчуванням http:// якщо жоден протокол не вказано).',
+'linksearch-text' => 'Ð\9cожна вживати підстановочні символи, наприклад, «*.wikipedia.org».
+Ð\9dеобÑ\85Ñ\96дно зазнаÑ\87иÑ\82и домен, принаймні верхнього рівня, наприклад «*.org».<br />
+{{PLURAL:$2|Підтримується протокол|Підтримуються протоколи}}: <code>$1</code> (за замовчуванням http:// , якщо жоден протокол не зазначено).',
'linksearch-line' => 'Посилання на $1 із $2',
'linksearch-error' => 'Підстановочні знаки можуть використовуватися лише на початку адрес.',
'rollbacklinkcount' => 'скасування $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
'rollbacklinkcount-morethan' => 'скасування більш, ніж $1 {{PLURAL:$1|редагування|редагувань|редагувань}}',
'rollbackfailed' => 'Відкинути зміни не вдалося',
-'cantrollback' => 'Неможливо відкинути редагування, оскільки останній, хто редагував цю сторінку, є єдиним її автором.',
+'cantrollback' => 'Неможливо відкинути редагування, оскільки останній дописувач є її автором.',
'alreadyrolled' => 'Неможливо відкинути останні редагування [[:$1]], зроблені [[User:$2|$2]] ([[User talk:$2|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), оскільки хтось інший уже змінив чи відкинув редагування цієї статті.
-Ð\9eÑ\81Ñ\82аннÑ\96 Ñ\80едагÑ\83ваннÑ\8f зÑ\80обив [[User:$3|$3]] ([[User talk:$3|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Ð\9eÑ\81Ñ\82аннÑ\96 Ñ\80едагÑ\83ваннÑ\8f зÑ\80облено [[User:$3|$3]] ([[User talk:$3|обговорення]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
'editcomment' => "Пояснення редагування було: «''$1''».",
'revertpage' => 'Редагування користувача [[Special:Contributions/$2|$2]] ([[User talk:$2|обговорення]]) відкинуті до версії користувача [[User:$1|$1]]',
'revertpage-nouser' => "Відкинуто редагування (ім'я користувача приховано) до зробленого [[User:$1|$1]]",
'prot_1movedto2' => '«[[$1]]» перейменована на «[[$2]]»',
'protect-badnamespace-title' => 'Беззахисний простір імен',
'protect-badnamespace-text' => 'Сторінки у просторі імен не можуть бути захищені.',
-'protect-norestrictiontypes-text' => 'ЦÑ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 не може бÑ\83Ñ\82и заÑ\85иÑ\89ено, бо длÑ\8f неÑ\97 немаÑ\94 доÑ\81Ñ\82Ñ\83пних типів обмежень.',
+'protect-norestrictiontypes-text' => 'ЦÑ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 не може бÑ\83Ñ\82и заÑ\85иÑ\89ено, бо немаÑ\94 нÑ\96Ñ\8fких типів обмежень.',
'protect-norestrictiontypes-title' => 'Сторінка, яку неможливо захистити',
'protect-legend' => 'Підтвердження встановлення захисту',
'protectcomment' => 'Причина:',
'pageinfo-watchers' => 'Кількість спостерігачів',
'pageinfo-redirects-name' => 'Перенаправлення на цю сторінку',
'pageinfo-subpages-name' => 'Підсторінки цієї сторінки',
-'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|не-перенаправлення|не-перенаправлення|не-перенаправлень}})',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|неперенаправлення|неперенаправлення|неперенаправлень}})',
'pageinfo-firstuser' => 'Створив сторінку',
'pageinfo-firsttime' => 'Дата створення сторінки',
'pageinfo-lastuser' => 'Останній редактор',
'pageinfo-protect-cascading-yes' => 'Так',
'pageinfo-protect-cascading-from' => 'Каскадний захист починається тут',
'pageinfo-category-info' => 'Інформація про категорію',
-'pageinfo-category-pages' => 'ЧиÑ\81ло сторінок',
-'pageinfo-category-subcats' => 'ЧиÑ\81ло підкатегорій',
-'pageinfo-category-files' => 'ЧиÑ\81ло файлів',
+'pageinfo-category-pages' => 'Ð\9aÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c сторінок',
+'pageinfo-category-subcats' => 'Ð\9aÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c підкатегорій',
+'pageinfo-category-files' => 'Ð\9aÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c файлів',
# Skin names
'skinname-standard' => 'Стандартне',
'listfiles_name' => 'Nomi',
'listfiles_user' => 'Foydalanuvchi',
'listfiles_size' => 'Oʻlchami',
-'listfiles_description' => 'Taʻrif',
+'listfiles_description' => 'Taʼrif',
'listfiles_count' => 'Versiyalar',
# File description page
'tog-externaldiff' => 'ניצן א דרויסנדיגן פֿאַרגלײַכער גרונטלעך (נאר פֿאר מומחים, דאס פֿאדערט באזונדערע קאמפיוטער שטעלונגען)
[//www.mediawiki.org/wiki/Manual:External_editors ווײַטערע אינפֿארמאַציע.]',
'tog-showjumplinks' => 'באמעגלעך צוטריט לינקס פון "שפרינג צו"',
-'tog-uselivepreview' => '×\91×\90× ×\95צ×\98 ×\96×\99×\9a ×\9e×\99×\98 ×\9c×\99×\99×\95×\95 פ×\90ר×\90×\95×\99ס×\93×\99×\92×¢ ×\95×\95×\99×\99×\96×\95× ×\92 (JavaScript) (עקספ×\99×¨×¢× ×\9e×¢×\98×\9c)',
+'tog-uselivepreview' => '×\91×\90× ×\95צ×\98 ×\96×\99×\9a ×\9e×\99×\98 ×\96×\90פ×\90ר×\98×\9f פ×\90ר×\90×\95×\99סק×\95ק (JavaScript)',
'tog-forceeditsummary' => 'ווארן מיך ווען איך לייג א ליידיג קורץ ווארט ענדערונג',
'tog-watchlisthideown' => 'באהאלט מיינע ענדערונגען פון דער אויפפאסן ליסטע',
'tog-watchlisthidebots' => 'באהאלט באט עדיטס פון אויפפאסן ליסטע',
'backend-fail-notexists' => 'נישט פֿאראן די טעקע $1.',
'backend-fail-invalidpath' => '$1 איז נישט קיין גילטיקער שפייכלערן שטעג.',
'backend-fail-delete' => 'קען נישט אויסמעקן טעקע $1.',
+'backend-fail-describe' => 'קען נישט ענדערן מעטאדאטן פאר דער טעקע "$1".',
'backend-fail-alreadyexists' => 'די טעקע $1 עקזיסטירט שוין.',
'backend-fail-store' => "מ'קען נישט שפייכלערן טעקע $1 בײַ $2.",
'backend-fail-copy' => 'האט נישט געקענט קאפירן "$1" צו "$2".',
'watchnologin' => 'איר זענט נישט אַרײַנלאגירט',
'watchnologintext' => 'איר דארפֿט זיין [[Special:UserLogin|אריינגלאגירט]] צו מאדיפֿיצירן אייער אויפפַּאסונג־ליסטע.',
'addwatch' => 'צולייגן צו דער אויפֿפאַסונג ליסטע',
-'addedwatchtext' => "דער בלאט \"[[:\$1]]\" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
+'addedwatchtext' => 'דער בלאט "[[:$1]]" איז צוגעלײגט געוואָרן צו אײַער [[Special:Watchlist|אויפֿפאַסונג ליסטע]].
-ווײַטערע ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכנט דארט, און דער בלאט וועט זיין '''דיק''' אין דער [[Special:RecentChanges|ליסטע פון לעצטע ענדערונגען]] צו מאכן גרינגער דאס אויפֿפאַסן.",
+ווײַטערע ענדערונגען צו דעם בלאַט און צו זײַן פארבינדענעם רעדן בלאַט וועלן זײַן אויסגערעכנט דארט.',
'removewatch' => 'אַראָפּנעמען פון דער אויפֿפאַסונג ליסטע',
'removedwatchtext' => 'דער בלאַט "[[:$1]]" איז אָפּגעראַמט געוואָרן פון [[Special:Watchlist|אייער אױפֿפּאַסונג ליסטע]].',
'watch' => 'אױפֿפּאַסן',
'pageinfo-contentpage' => 'געציילט ווי אן אינהאלט בלאט',
'pageinfo-contentpage-yes' => 'יאָ',
'pageinfo-protect-cascading-yes' => 'יאָ',
+'pageinfo-category-info' => 'קאטעגאריע אינפארמאציע',
+'pageinfo-category-pages' => 'צאָל בלעטער',
+'pageinfo-category-subcats' => 'צאָל אונטערקאטעגאריעס',
+'pageinfo-category-files' => 'צאָל טעקעס',
# Skin names
'skinname-standard' => 'קלאסיש',
'minutes' => '{{PLURAL:$1|$1 מינוט|$1 מינוט}}',
'hours' => '{{PLURAL:$1|$1 שעה|$1 שעה}}',
'days' => '{{PLURAL:$1|$1 טאג|$1 טעג}}',
+'months' => '{{PLURAL:$1|איין מאנאַט|$1 מאנאַטן}}',
+'years' => '{{PLURAL:$1|איין יאָר|$1 יאָר}}',
'ago' => 'פֿאַר $1',
'just-now' => 'גראדע יעצט',
}
$content = $page->getContent( Revision::RAW );
- if ( null === false ) {
+ if ( $content === null ) {
return;
}
// Set up groups
$this->mUserMock->expects( $this->any() )
- ->method( 'getEffectiveGroups' )->will( $this->returnValue( array( '*', 'user')) );
+ ->method( 'getEffectiveGroups' )->will( $this->returnValue( array( '*', 'user' ) ) );
+
+ // Set up callback for User::getOptionKinds
+ $this->mUserMock->expects( $this->any() )
+ ->method( 'getOptionKinds' )->will( $this->returnCallback( array( $this, 'getOptionKinds' ) ) );
// Create a new context
$this->mContext = new DerivativeContext( new RequestContext() );
}
public function hookGetPreferences( $user, &$preferences ) {
+ $preferences = array();
+
foreach ( array( 'name', 'willBeNull', 'willBeEmpty', 'willBeHappy' ) as $k ) {
$preferences[$k] = array(
'type' => 'text',
return true;
}
+ public function getOptionKinds( IContextSource $context, $options = null ) {
+ // Match with above.
+ $kinds = array(
+ 'name' => 'registered',
+ 'willBeNull' => 'registered',
+ 'willBeEmpty' => 'registered',
+ 'willBeHappy' => 'registered',
+ 'testmultiselect-opt1' => 'registered-multiselect',
+ 'testmultiselect-opt2' => 'registered-multiselect',
+ 'testmultiselect-opt3' => 'registered-multiselect',
+ 'testmultiselect-opt4' => 'registered-multiselect',
+ );
+
+ if ( $options === null ) {
+ return $kinds;
+ }
+
+ $mapping = array();
+ foreach ( $options as $key => $value ) {
+ if ( isset( $kinds[$key] ) ) {
+ $mapping[$key] = $kinds[$key];
+ } elseif ( substr( $key, 0, 7 ) === 'userjs-' ) {
+ $mapping[$key] = 'userjs';
+ } else {
+ $mapping[$key] = 'unused';
+ }
+ }
+ return $mapping;
+ }
+
private function getSampleRequest( $custom = array() ) {
$request = array(
'token' => '123ABC',
$this->mUserMock->expects( $this->never() )
->method( 'resetOptions' );
- $this->mUserMock->expects( $this->at( 1 ) )
+ $this->mUserMock->expects( $this->at( 2 ) )
->method( 'getOptions' );
- $this->mUserMock->expects( $this->at( 2 ) )
+ $this->mUserMock->expects( $this->at( 3 ) )
->method( 'setOption' )
->with( $this->equalTo( 'willBeNull' ), $this->equalTo( null ) );
- $this->mUserMock->expects( $this->at( 3 ) )
+ $this->mUserMock->expects( $this->at( 4 ) )
->method( 'getOptions' );
- $this->mUserMock->expects( $this->at( 4 ) )
+ $this->mUserMock->expects( $this->at( 5 ) )
->method( 'setOption' )
->with( $this->equalTo( 'willBeEmpty' ), $this->equalTo( '' ) );
- $this->mUserMock->expects( $this->at( 5 ) )
+ $this->mUserMock->expects( $this->at( 6 ) )
->method( 'getOptions' );
- $this->mUserMock->expects( $this->at( 6 ) )
+ $this->mUserMock->expects( $this->at( 7 ) )
->method( 'setOption' )
->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
$this->mUserMock->expects( $this->once() )
->method( 'resetOptions' );
- $this->mUserMock->expects( $this->at( 2 ) )
+ $this->mUserMock->expects( $this->at( 3 ) )
->method( 'getOptions' );
- $this->mUserMock->expects( $this->at( 3 ) )
+ $this->mUserMock->expects( $this->at( 4 ) )
->method( 'setOption' )
->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
- $this->mUserMock->expects( $this->at( 4 ) )
+ $this->mUserMock->expects( $this->at( 5 ) )
->method( 'getOptions' );
- $this->mUserMock->expects( $this->at( 5 ) )
+ $this->mUserMock->expects( $this->at( 6 ) )
->method( 'setOption' )
->with( $this->equalTo( 'name' ), $this->equalTo( 'value' ) );
$this->mUserMock->expects( $this->never() )
->method( 'resetOptions' );
- $this->mUserMock->expects( $this->at( 1 ) )
+ $this->mUserMock->expects( $this->at( 2 ) )
->method( 'setOption' )
->with( $this->equalTo( 'testmultiselect-opt1' ), $this->equalTo( true ) );
- $this->mUserMock->expects( $this->at( 2 ) )
+ $this->mUserMock->expects( $this->at( 3 ) )
->method( 'setOption' )
->with( $this->equalTo( 'testmultiselect-opt2' ), $this->equalTo( false ) );
- $this->mUserMock->expects( $this->at( 3 ) )
+ $this->mUserMock->expects( $this->at( 4 ) )
->method( 'setOption' )
->with( $this->equalTo( 'testmultiselect-opt3' ), $this->equalTo( false ) );
- $this->mUserMock->expects( $this->at( 4 ) )
+ $this->mUserMock->expects( $this->at( 5 ) )
->method( 'setOption' )
->with( $this->equalTo( 'testmultiselect-opt4' ), $this->equalTo( false ) );
$this->assertEquals( self::$Success, $response );
}
+
+ public function testUnknownOption() {
+ $this->mUserMock->expects( $this->never() )
+ ->method( 'resetOptions' );
+
+ $this->mUserMock->expects( $this->never() )
+ ->method( 'saveSettings' );
+
+ $request = $this->getSampleRequest( array(
+ 'change' => 'unknownOption=1'
+ ) );
+
+ $response = $this->executeQuery( $request );
+
+ $this->assertEquals( array(
+ 'options' => 'success',
+ 'warnings' => array(
+ 'options' => array(
+ '*' => "Validation error for 'unknownOption': not a valid preference"
+ )
+ )
+ ), $response );
+ }
+
+ public function testUserjsOption() {
+ $this->mUserMock->expects( $this->never() )
+ ->method( 'resetOptions' );
+
+ $this->mUserMock->expects( $this->at( 2 ) )
+ ->method( 'setOption' )
+ ->with( $this->equalTo( 'userjs-option' ), $this->equalTo( '1' ) );
+
+ $this->mUserMock->expects( $this->once() )
+ ->method( 'saveSettings' );
+
+ $request = $this->getSampleRequest( array(
+ 'change' => 'userjs-option=1'
+ ) );
+
+ $response = $this->executeQuery( $request );
+
+ $this->assertEquals( self::$Success, $response );
+ }
}