GNU General Public License v2. We would like to recognize the
following names for their contribution to the product.
+<!-- Please notice that the following can be found parsed under Special:Version/Credits -->
== Developers ==
* Aaron Schulz
* Alex Z.
* Leon Weber
* Leslie Hoare
* Marco Schuster
+* Marius Hoch
* Matěj Grabovský
* Matt Johnston
* Max Semenik
* Meno25
* Rotem Liss
* Shinjiman
-* Translatewiki.net Translators https://translatewiki.net/wiki/Special:ListUsers/translator
+* [https://translatewiki.net/wiki/Special:ListUsers/translator Translatewiki.net Translators]
If your PHP is configured as a CGI plug-in rather than an Apache module you may
experience problems, as this configuration is not well tested. safe_mode is also
-not tested and unlikely to work.
+not tested and unlikely to work.
If you want math support see the instructions in math/README
******************* WARNING *******************
-REMEMBER: ALWAYS BACK UP YOUR DATABASE BEFORE
+REMEMBER: ALWAYS BACK UP YOUR DATABASE BEFORE
ATTEMPTING TO INSTALL OR UPGRADE!!!
******************* WARNING *******************
-For system requirements, installation and upgrade details, see the files
+For system requirements, installation and upgrade details, see the files
RELEASE-NOTES, INSTALL, and UPGRADE.
== MediaWiki ==
released into the public domain, which does not impair the obligations of users
under the GPL for use of the whole code or other sections thereof.
-MediaWiki makes use of the Sajax Toolkit by modernmethod,
+MediaWiki makes use of the Sajax Toolkit by modernmethod,
http://www.modernmethod.com/sajax/ which has the following license:
'This work is licensed under the Creative Commons Attribution
--- /dev/null
+README
\ No newline at end of file
* jQuery UI upgraded from 1.8.23 to 1.8.24.
* Added separate fa_sha1 field to filearchive table. This allows sha1
searches with the api in miser mode for deleted files.
+* Add initial and programmatic sorting for tablesorter.
+* Add the event "sortEnd.tablesorter", triggered after sorting has completed.
+* The Job system was refactored to allow for different backing stores for queues
+ as well as cross-wiki access to queues, among other things. The schema for the
+ DB queue was changed to support better concurrency and reduce deadlock errors.
+* Added ApiQueryORM class to facilitate creation of query API modules based on
+ tables that have a corresponding ORMTable class.
+* (bug 40876) Icon for PSD (Adobe Photoshop) file types.
+* (bug 40641) Implemented Special:Version/Credits with a list of contributors.
=== Bug fixes in 1.21 ===
* (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
compatibility. This also works with Squid in reverse-proxy mode. If you wish
to support Squid configured in forward-proxy mode, set
$wgSquidPurgeUseHostHeader to false.
+* (bug 37020) sql.php with readline eats semicolon
+* (bug 11748) Properly handle optionally-closed HTML tags when Tidy is
+ disabled, and don't wrap HTML-syntax definition lists in paragraphs.
+* (bug 41409) Diffs while editing an old revision should again diff against the
+ current revision.
=== API changes in 1.21 ===
* prop=revisions can now report the contentmodel and contentformat, see docs/contenthandler.txt
* } else {
* $wgProfiler['class'] = 'ProfilerStub';
* }
- *
+ *
* Configuration of the profiler output can be done in LocalSettings.php
*/
==== From the web ====
-If you browse to the web-based installation script (usually at
-/mw-config/index.php) from your wiki installation you can follow the script and
+If you browse to the web-based installation script (usually at
+/mw-config/index.php) from your wiki installation you can follow the script and
upgrade your database in place.
==== From the command line ====
If you absolutely cannot make the UTF-8 upgrade work, you can try
doing it by hand: dump your old database, convert the dump file
-using iconv as described here:
+using iconv as described here:
http://portal.suse.com/sdb/en/2004/05/jbartsh_utf-8.html
and then reimport it. You can also convert filenames using convmv,
but note that the old directory hashes will no longer be valid,
$flags: Flags passed to WikiPage::doEditContent()
$revision: New Revision of the article
-'PageContentInsertComplete': After a new article is created
-$article: WikiPage created
-$user: User creating the article
-$content: New content as a Content object
-$summary: Edit summary/comment
-$isMinor: Whether or not the edit was marked as minor
-$isWatch: (No longer used)
-$section: (No longer used)
-$flags: Flags passed to WikiPage::doEditContent()
-$revision: New Revision of the article
-
'ArticleMergeComplete': after merging to article using Special:Mergehistory
$targetTitle: target title (object)
$destTitle: destination title (object)
$iswatch: watch flag
$section: section #
-'PageContentSave': before an article is saved.
-$article: the WikiPage (object) being saved
-$user: the user (object) saving the article
-$content: the new article content, as a Content object
-$summary: the article summary (comment)
-$isminor: minor flag
-$iswatch: watch flag
-$section: section #
-
'ArticleSaveComplete': After an article has been updated. DEPRECATED, use PageContentSaveComplete instead.
$article: WikiPage modified
$user: User performing the modification
$status: Status object about to be returned by doEditContent()
$baseRevId: the rev ID (or false) this edit was based on
-'PageContentSaveComplete': After an article has been updated
-$article: WikiPage modified
-$user: User performing the modification
-$content: New content, as a Content object
-$summary: Edit summary/comment
-$isMinor: Whether or not the edit was marked as minor
-$isWatch: (No longer used)
-$section: (No longer used)
-$flags: Flags passed to WikiPage::doEditContent()
-$revision: New Revision of the article
-$status: Status object about to be returned by doEditContent()
-$baseRevId: the rev ID (or false) this edit was based on
-
'ArticleUndelete': When one or more revisions of an article are restored
$title: Title corresponding to the article restored
$create: Whether or not the restoration caused the page to be created
$lang: The language code to use for the link in the wfMessage function
'EditFilter': Perform checks on an edit
-$editor: Edit form (see includes/EditPage.php)
+$editor: EditPage instance (object). The edit form (see includes/EditPage.php)
$text: Contents of the edit box
$section: Section being edited
&$error: Error message to return
$links: array, intended to hold the result. Must be an associative array with
category types as keys and arrays of HTML links as values.
+'PageContentInsertComplete': After a new article is created
+$article: WikiPage created
+$user: User creating the article
+$content: New content as a Content object
+$summary: Edit summary/comment
+$isMinor: Whether or not the edit was marked as minor
+$isWatch: (No longer used)
+$section: (No longer used)
+$flags: Flags passed to WikiPage::doEditContent()
+$revision: New Revision of the article
+
'PageContentLanguage': allows changing the language in which the content of
a page is written. Defaults to the wiki content language ($wgContLang).
$title: Title object
&$pageLang: the page content language (either an object or a language code)
$wgLang: the user language
+'PageContentSave': before an article is saved.
+$article: the WikiPage (object) being saved
+$user: the user (object) saving the article
+$content: the new article content, as a Content object
+$summary: the article summary (comment)
+$isminor: minor flag
+$iswatch: watch flag
+$section: section #
+
+'PageContentSaveComplete': After an article has been updated
+$article: WikiPage modified
+$user: User performing the modification
+$content: New content, as a Content object
+$summary: Edit summary/comment
+$isMinor: Whether or not the edit was marked as minor
+$isWatch: (No longer used)
+$section: (No longer used)
+$flags: Flags passed to WikiPage::doEditContent()
+$revision: New Revision of the article
+$status: Status object about to be returned by doEditContent()
+$baseRevId: the rev ID (or false) this edit was based on
+
'PageHistoryBeforeList': When a history page list is about to be constructed.
$article: the article that the history is loading for
'AbstractContent' => 'includes/content/AbstractContent.php',
'ContentHandler' => 'includes/content/ContentHandler.php',
'Content' => 'includes/content/Content.php',
- 'CssContentHandler' => 'includes/content/ContentHandler.php',
+ 'CssContentHandler' => 'includes/content/CssContentHandler.php',
'CssContent' => 'includes/content/CssContent.php',
- 'JavaScriptContentHandler' => 'includes/content/ContentHandler.php',
+ 'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
'MessageContent' => 'includes/content/MessageContent.php',
- 'TextContentHandler' => 'includes/content/ContentHandler.php',
+ 'TextContentHandler' => 'includes/content/TextContentHandler.php',
'TextContent' => 'includes/content/TextContent.php',
- 'WikitextContentHandler' => 'includes/content/ContentHandler.php',
+ 'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
'WikitextContent' => 'includes/content/WikitextContent.php',
# includes/actions
'ApiQueryLangLinks' => 'includes/api/ApiQueryLangLinks.php',
'ApiQueryLinks' => 'includes/api/ApiQueryLinks.php',
'ApiQueryLogEvents' => 'includes/api/ApiQueryLogEvents.php',
+ 'ApiQueryORM' => 'includes/api/ApiQueryORM.php',
'ApiQueryPageProps' => 'includes/api/ApiQueryPageProps.php',
'ApiQueryProtectedTitles' => 'includes/api/ApiQueryProtectedTitles.php',
'ApiQueryQueryPage' => 'includes/api/ApiQueryQueryPage.php',
'GenderCache' => 'includes/cache/GenderCache.php',
'GlobalDependency' => 'includes/cache/CacheDependency.php',
'HTMLCacheUpdate' => 'includes/cache/HTMLCacheUpdate.php',
- 'HTMLCacheUpdateJob' => 'includes/cache/HTMLCacheUpdate.php',
'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
'LinkBatch' => 'includes/cache/LinkBatch.php',
'LinkCache' => 'includes/cache/LinkCache.php',
'TitleDependency' => 'includes/cache/CacheDependency.php',
'TitleListDependency' => 'includes/cache/CacheDependency.php',
- # includes/conf
- 'Conf' => 'includes/conf/Conf.php',
- 'DatabaseConf' => 'includes/conf/DatabaseConf.php',
- 'DefaultSettings' => 'includes/conf/DefaultSettings.php',
-
# includes/context
'ContextSource' => 'includes/context/ContextSource.php',
'DerivativeContext' => 'includes/context/DerivativeContext.php',
'WebInstallerPage' => 'includes/installer/WebInstallerPage.php',
# includes/job
- 'DoubleRedirectJob' => 'includes/job/DoubleRedirectJob.php',
- 'EmaillingJob' => 'includes/job/EmaillingJob.php',
- 'EnotifNotifyJob' => 'includes/job/EnotifNotifyJob.php',
'Job' => 'includes/job/Job.php',
'JobQueue' => 'includes/job/JobQueue.php',
'JobQueueDB' => 'includes/job/JobQueueDB.php',
'JobQueueGroup' => 'includes/job/JobQueueGroup.php',
- 'RefreshLinksJob' => 'includes/job/RefreshLinksJob.php',
- 'RefreshLinksJob2' => 'includes/job/RefreshLinksJob.php',
- 'UploadFromUrlJob' => 'includes/job/UploadFromUrlJob.php',
+
+ # includes/job/jobs
+ 'DoubleRedirectJob' => 'includes/job/jobs/DoubleRedirectJob.php',
+ 'EmaillingJob' => 'includes/job/jobs/EmaillingJob.php',
+ 'EnotifNotifyJob' => 'includes/job/jobs/EnotifNotifyJob.php',
+ 'HTMLCacheUpdateJob' => 'includes/job/jobs/HTMLCacheUpdateJob.php',
+ 'RefreshLinksJob' => 'includes/job/jobs/RefreshLinksJob.php',
+ 'RefreshLinksJob2' => 'includes/job/jobs/RefreshLinksJob.php',
+ 'UploadFromUrlJob' => 'includes/job/jobs/UploadFromUrlJob.php',
# includes/json
'FormatJson' => 'includes/json/FormatJson.php',
'TestRecorder' => 'tests/testHelpers.inc',
# tests/phpunit
- 'DummyContentHandlerForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
- 'DummyContentForTesting' => 'tests/phpunit/includes/ContentHandlerTest.php',
- 'JavascriptContentTest' => 'tests/phpunit/includes/JavascriptContentTest.php',
'RevisionStorageTest' => 'tests/phpunit/includes/RevisionStorageTest.php',
- 'TextContentTest' => 'tests/phpunit/includes/TextContentTest.php',
'WikiPageTest' => 'tests/phpunit/includes/WikiPageTest.php',
+ # tests/phpunit/content
+ 'DummyContentHandlerForTesting' => 'tests/phpunit/includes/content/ContentHandlerTest.php',
+ 'DummyContentForTesting' => 'tests/phpunit/includes/content/ContentHandlerTest.php',
+ 'JavascriptContentTest' => 'tests/phpunit/includes/content/JavascriptContentTest.php',
+ 'TextContentTest' => 'tests/phpunit/includes/content/TextContentTest.php',
+
# tests/phpunit/includes
'GenericArrayObjectTest' => 'tests/phpunit/includes/libs/GenericArrayObjectTest.php',
/**
* Check if two blocks are effectively equal. Doesn't check irrelevant things like
- * the blocking user or the block timestamp, only things which affect the blocked user *
+ * the blocking user or the block timestamp, only things which affect the blocked user
*
* @param $block Block
*
'ipb_expiry' => $expiry,
'ipb_range_start' => $this->getRangeStart(),
'ipb_range_end' => $this->getRangeEnd(),
- 'ipb_deleted' => intval( $this->mHideName ), // typecast required for SQLite
+ 'ipb_deleted' => intval( $this->mHideName ), // typecast required for SQLite
'ipb_block_email' => $this->prevents( 'sendemail' ),
'ipb_allow_usertalk' => !$this->prevents( 'editownusertalk' ),
- 'ipb_parent_block_id' => $this->mParentBlockId
+ 'ipb_parent_block_id' => $this->mParentBlockId
);
return $a;
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
* sorts before all items.
*/
function findLowerBound( $valueCallback, $valueCount, $comparisonCallback, $target ) {
+ if ( $valueCount === 0 ) {
+ return false;
+ }
+
$min = 0;
- $max = $valueCount - 1;
+ $max = $valueCount;
do {
$mid = $min + ( ( $max - $min ) >> 1 );
$item = call_user_func( $valueCallback, $mid );
}
} while ( $min < $max - 1 );
- if ( $min == 0 && $max == 0 && $comparison > 0 ) {
- // Before the first item
- return false;
- } else {
- return $min;
+ if ( $min == 0 ) {
+ $item = call_user_func( $valueCallback, $min );
+ $comparison = call_user_func( $comparisonCallback, $target, $item );
+ if ( $comparison < 0 ) {
+ // Before the first item
+ return false;
+ }
}
+ return $min;
}
static function isCjk( $codepoint ) {
private $cookie = array();
/**
- * Set a cookie in the cookie jar. Make sure only one cookie per-name exists.
+ * Set a cookie in the cookie jar. Make sure only one cookie per-name exists.
* @see Cookie::set()
*/
public function setCookie ( $name, $value, $attr ) {
* This allows for limited transactional logic across multiple backends for storing
* secondary data.
*
- * @static
* @param $updates array a list of DataUpdate instances
* @throws Exception|null
*/
*/
$wgCopyUploadsDomains = array();
+/**
+ * Enable copy uploads from Special:Upload. $wgAllowCopyUploads must also be
+ * true. If $wgAllowCopyUploads is true, but this is false, you will only be
+ * able to perform copy uploads from the API or extensions (e.g. UploadWizard).
+ */
+$wgCopyUploadsFromSpecialUpload = false;
+
/**
* Proxy to use for copy upload requests.
* @since 1.20
* @since 1.21
*/
$wgContentHandlers = array(
- CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler', // the usual case
- CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler', // dumb version, no syntax highlighting
- CONTENT_MODEL_CSS => 'CssContentHandler', // dumb version, no syntax highlighting
- CONTENT_MODEL_TEXT => 'TextContentHandler', // plain text, for use by extensions etc
+ // the usual case
+ CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler',
+ // dumb version, no syntax highlighting
+ CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler',
+ // dumb version, no syntax highlighting
+ CONTENT_MODEL_CSS => 'CssContentHandler',
+ // plain text, for use by extensions etc
+ CONTENT_MODEL_TEXT => 'TextContentHandler',
);
/**
* $wgSharedPrefix is the table prefix for the shared database. It defaults to
* $wgDBprefix.
*
- * @deprecated In new code, use the $wiki parameter to wfGetLB() to access
- * remote databases. Using wfGetLB() allows the shared database to reside on
- * separate servers to the wiki's own database, with suitable configuration
+ * @deprecated In new code, use the $wiki parameter to wfGetLB() to access
+ * remote databases. Using wfGetLB() allows the shared database to reside on
+ * separate servers to the wiki's own database, with suitable configuration
* of $wgLBFactoryConf.
*/
$wgSharedDB = null;
$wgLocalMessageCacheSerialized = true;
/**
- * Instead of caching everything, keep track which messages are requested and
- * load only most used messages. This only makes sense if there is lots of
- * interface messages customised in the wiki (like hundreds in many languages).
+ * Instead of caching everything, only cache those messages which have
+ * been customised in the site content language. This means that
+ * MediaWiki:Foo/ja is ignored if MediaWiki:Foo doesn't exist.
+ * This option is probably only useful for translatewiki.net.
*/
$wgAdaptiveMessageCache = false;
/**
* Whether to use a Host header in purge requests sent to the proxy servers
- * configured in $wgSquidServers. Set this to false to support Squid
+ * configured in $wgSquidServers. Set this to false to support Squid
* configured in forward-proxy mode.
*
* If this is set to true, a Host header will be sent, and only the path
* component of the URL will appear on the request line, as if the request
- * were a non-proxy HTTP 1.1 request. Varnish only supports this style of
+ * were a non-proxy HTTP 1.1 request. Varnish only supports this style of
* request. Squid supports this style of request only if reverse-proxy mode
* (http_port ... accel) is enabled.
*
* will be sent in the request line, as is the standard for an HTTP proxy
* request in both HTTP 1.0 and 1.1. This style of request is not supported
* by Varnish, but is supported by Squid in either configuration (forward or
- * reverse).
+ * reverse).
*
* @since 1.21
*/
/**
* A subtitle to add to the tagline, for skins that have it/
*/
-$wgExtraSubtitle = '';
+$wgExtraSubtitle = '';
/**
* If this is set, a "donate" link will appear in the sidebar. Set it to a URL.
*/
-$wgSiteSupportPage = '';
+$wgSiteSupportPage = '';
/**
* Validate the overall output using tidy and refuse
* These settings should be global to all wikis.
*/
$wgJobTypeConf = array(
- 'default' => array( 'class' => 'JobQueueDB' ),
+ 'default' => array( 'class' => 'JobQueueDB', 'order' => 'random' ),
);
/**
*
* @since 1.21
*/
-$wgContentHandlerUseDB = true;
+$wgContentHandlerUseDB = false;
+
+/**
+ * Determines which types of text are parsed as wikitext. This does not imply that these kinds
+ * of texts are also rendered as wikitext, it only means that links, magic words, etc will have
+ * the effect on the database they would have on a wikitext page.
+ *
+ * @todo: On the long run, it would be nice to put categories etc into a separate structure,
+ * or at least parse only the contents of comments in the scripts.
+ *
+ * @since 1.21
+ */
+$wgTextModelsToParse = array(
+ CONTENT_MODEL_WIKITEXT, // Just for completeness, wikitext will always be parsed.
+ CONTENT_MODEL_JAVASCRIPT, // Make categories etc work, people put them into comments.
+ CONTENT_MODEL_CSS, // Make categories etc work, people put them into comments.
+);
/**
* Whether the user must enter their password to change their e-mail address
* $this->mContextTitle is the page that forms submit to, links point to,
* redirects go to, etc. $this->mTitle (as well as $mArticle) is the
* page in the database that is actually being edited. These are
- * usually the same, but they are now allowed to be different.
+ * usually the same, but they are allowed to be different.
*
* Surgeon General's Warning: prolonged exposure to this class is known to cause
* headaches, which may be fatal.
*/
class EditPage {
-
/**
* Status: Article successfully updated
*/
$this->mArticle = $article;
$this->mTitle = $article->getTitle();
- $this->contentModel = $this->mTitle->getContentModel();
+ $this->contentModel = $this->getTitle()->getContentModel();
$handler = ContentHandler::getForModelID( $this->contentModel );
$this->contentFormat = $handler->getDefaultFormat();
* the newly-edited page.
*/
function edit() {
- global $wgOut, $wgRequest, $wgUser;
// Allow extensions to modify/prevent this form or submission
if ( !wfRunHooks( 'AlternateEdit', array( $this ) ) ) {
return;
wfProfileIn( __METHOD__ );
wfDebug( __METHOD__ . ": enter\n" );
+ $context = $this->getArticle()->getContext();
+ $title = $this->getTitle();
+
// If they used redlink=1 and the page exists, redirect to the main article
- if ( $wgRequest->getBool( 'redlink' ) && $this->mTitle->exists() ) {
- $wgOut->redirect( $this->mTitle->getFullURL() );
+ $request = $context->getRequest();
+ if ( $request->getBool( 'redlink' ) && $title->exists() ) {
+ $context->getOutput()->redirect( $title->getFullURL() );
wfProfileOut( __METHOD__ );
return;
}
- $this->importFormData( $wgRequest );
+ $this->importFormData( $request );
$this->firsttime = false;
if ( $this->live ) {
if ( $permErrors ) {
wfDebug( __METHOD__ . ": User can't edit\n" );
// Auto-block user's IP if the account was "hard" blocked
- $wgUser->spreadAnyEditBlock();
+ $context->getUser()->spreadAnyEditBlock();
$this->displayPermissionsError( $permErrors );
$this->isConflict = false;
// css / js subpages of user pages get a special treatment
- $this->isCssJsSubpage = $this->mTitle->isCssJsSubpage();
- $this->isCssSubpage = $this->mTitle->isCssSubpage();
- $this->isJsSubpage = $this->mTitle->isJsSubpage();
+ $this->isCssJsSubpage = $title->isCssJsSubpage();
+ $this->isCssSubpage = $title->isCssSubpage();
+ $this->isJsSubpage = $title->isJsSubpage();
$this->isWrongCaseCssJsPage = $this->isWrongCaseCssJsPage();
# Show applicable editing introductions
wfProfileOut( __METHOD__ );
return;
}
- if ( !$this->mTitle->getArticleID() )
+
+ if ( !$title->getArticleID() ){
wfRunHooks( 'EditFormPreloadText', array( &$this->textbox1, &$this->mTitle ) );
- else
+ } else {
wfRunHooks( 'EditFormInitialText', array( $this ) );
+ }
}
$this->showEditForm();
* @return array
*/
protected function getEditPermissionErrors() {
- global $wgUser;
- $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser );
+ $user = $this->getArticle()->getContext()->getUser();
+
+ $permErrors = $this->getTitle()->getUserPermissionsErrors( 'edit', $user );
# Can this title be created?
- if ( !$this->mTitle->exists() ) {
+ if ( !$this->getTitle()->exists() ) {
$permErrors = array_merge( $permErrors,
- wfArrayDiff2( $this->mTitle->getUserPermissionsErrors( 'create', $wgUser ), $permErrors ) );
+ wfArrayDiff2( $this->getTitle()->getUserPermissionsErrors( 'create', $user ), $permErrors ) );
}
# Ignore some permissions errors when a user is just previewing/viewing diffs
$remove = array();
* @throws PermissionsError
*/
protected function displayPermissionsError( array $permErrors ) {
- global $wgRequest, $wgOut;
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
- if ( $wgRequest->getBool( 'redlink' ) ) {
+ if ( $context->getRequest()->getBool( 'redlink' ) ) {
// The edit page was reached via a red link.
// Redirect to the article page and let them click the edit tab if
// they really want a permission error.
- $wgOut->redirect( $this->mTitle->getFullUrl() );
+ $out->redirect( $this->getTitle()->getFullUrl() );
return;
}
$content = $this->getContentObject();
# Use the normal message if there's nothing to display
- if ( $this->firsttime && $content->isEmpty() ) {
- $action = $this->mTitle->exists() ? 'edit' :
- ( $this->mTitle->isTalkPage() ? 'createtalk' : 'createpage' );
+ if ( $this->firsttime && ( !$content || $content->isEmpty() ) ) {
+ $action = $this->getTitle()->exists() ? 'edit' :
+ ( $this->getTitle()->isTalkPage() ? 'createtalk' : 'createpage' );
throw new PermissionsError( $action, $permErrors );
}
- $wgOut->setPageTitle( wfMessage( 'viewsource-title', $this->getContextTitle()->getPrefixedText() ) );
- $wgOut->addBacklinkSubtitle( $this->getContextTitle() );
- $wgOut->addWikiText( $wgOut->formatPermissionsErrorMessage( $permErrors, 'edit' ) );
- $wgOut->addHTML( "<hr />\n" );
+ $out->setPageTitle( $context->msg('viewsource-title', $this->getContextTitle()->getPrefixedText() ) );
+ $out->addBacklinkSubtitle( $this->getContextTitle() );
+ $out->addWikiText( $out->formatPermissionsErrorMessage( $permErrors, 'edit' ) );
+ $out->addHTML( "<hr />\n" );
# If the user made changes, preserve them when showing the markup
# (This happens when a user is blocked during edit, for instance)
if ( !$this->firsttime ) {
$text = $this->textbox1;
- $wgOut->addWikiMsg( 'viewyourtext' );
+ $out->addWikiMsg( 'viewyourtext' );
} else {
$text = $this->toEditText( $content );
- $wgOut->addWikiMsg( 'viewsourcetext' );
+ $out->addWikiMsg( 'viewsourcetext' );
}
$this->showTextbox( $text, 'wpTextbox1', array( 'readonly' ) );
- $wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
+ $out->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
Linker::formatTemplates( $this->getTemplates() ) ) );
- if ( $this->mTitle->exists() ) {
- $wgOut->returnToMain( null, $this->mTitle );
+ if ( $this->getTitle()->exists() ) {
+ $out->returnToMain( null, $this->getTitle() );
}
}
function readOnlyPage( $source = null, $protected = false, $reasons = array(), $action = null ) {
wfDeprecated( __METHOD__, '1.19' );
- global $wgRequest, $wgOut;
- if ( $wgRequest->getBool( 'redlink' ) ) {
+ $context = $this->getArticle()->getContext();
+
+ if ( $context->getRequest()->getBool( 'redlink' ) ) {
// The edit page was reached via a red link.
// Redirect to the article page and let them click the edit tab if
// they really want a permission error.
- $wgOut->redirect( $this->mTitle->getFullUrl() );
+ $context->getOutput()->redirect( $this->getTitle()->getFullUrl() );
} else {
- $wgOut->readOnlyPage( $source, $protected, $reasons, $action );
+ $context->getOutput()->readOnlyPage( $source, $protected, $reasons, $action );
}
}
* @return bool
*/
protected function previewOnOpen() {
- global $wgRequest, $wgUser, $wgPreviewOnOpenNamespaces;
- if ( $wgRequest->getVal( 'preview' ) == 'yes' ) {
+ global $wgPreviewOnOpenNamespaces;
+
+ $context = $this->getArticle()->getContext();
+ $request = $context->getRequest();
+
+ if ( $request->getVal( 'preview' ) == 'yes' ) {
// Explicit override from request
return true;
- } elseif ( $wgRequest->getVal( 'preview' ) == 'no' ) {
+ } elseif ( $request->getVal( 'preview' ) == 'no' ) {
// Explicit override from request
return false;
} elseif ( $this->section == 'new' ) {
// Nothing *to* preview for new sections
return false;
- } elseif ( ( $wgRequest->getVal( 'preload' ) !== null || $this->mTitle->exists() ) && $wgUser->getOption( 'previewonfirst' ) ) {
+ } elseif (
+ ( $request->getVal( 'preload' ) !== null || $this->getTitle()->exists() ) &&
+ $context->getUser()->getOption( 'previewonfirst' )
+ ) {
// Standard preference behaviour
return true;
- } elseif ( !$this->mTitle->exists() &&
- isset( $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] ) &&
- $wgPreviewOnOpenNamespaces[$this->mTitle->getNamespace()] )
+ } elseif ( !$this->getTitle()->exists() &&
+ isset( $wgPreviewOnOpenNamespaces[$this->getTitle()->getNamespace()] ) &&
+ $wgPreviewOnOpenNamespaces[$this->getTitle()->getNamespace()] )
{
// Categories are special
return true;
- } else {
- return false;
}
+
+ return false;
}
/**
* @return bool
*/
protected function isWrongCaseCssJsPage() {
- if ( $this->mTitle->isCssJsSubpage() ) {
- $name = $this->mTitle->getSkinFromCssJsSubpage();
+ if ( $this->getTitle()->isCssJsSubpage() ) {
+ $name = $this->getTitle()->getSkinFromCssJsSubpage();
$skins = array_merge(
array_keys( Skin::getSkinNames() ),
array( 'common' )
);
return !in_array( $name, $skins )
&& in_array( strtolower( $name ), $skins );
- } else {
- return false;
}
+
+ return false;
}
/**
* @param $request WebRequest
*/
function importFormData( &$request ) {
- global $wgContLang, $wgUser;
+ global $wgContLang;
wfProfileIn( __METHOD__ );
# Section edit can come from either the form or a link
$this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
- $this->isNew = !$this->mTitle->exists() || $this->section == 'new';
+ $this->isNew = !$this->getTitle()->exists() || $this->section == 'new';
if ( $request->wasPosted() ) {
# These fields need to be checked for encoding.
// modified by subclasses
wfProfileIn( get_class( $this ) . "::importContentFormData" );
$textbox1 = $this->importContentFormData( $request );
- if ( isset( $textbox1 ) )
+ if ( isset( $textbox1 ) ) {
$this->textbox1 = $textbox1;
+ }
+
wfProfileOut( get_class( $this ) . "::importContentFormData" );
}
$this->watchthis = $request->getCheck( 'wpWatchthis' );
# Don't force edit summaries when a user is editing their own user or talk page
- if ( ( $this->mTitle->mNamespace == NS_USER || $this->mTitle->mNamespace == NS_USER_TALK ) &&
- $this->mTitle->getText() == $wgUser->getName() )
+ $user = $this->getArticle()->getContext()->getUser();
+ if ( ( $this->getTitle()->mNamespace == NS_USER || $this->getTitle()->mNamespace == NS_USER_TALK ) &&
+ $this->getTitle()->getText() == $user->getName() )
{
$this->allowBlankSummary = true;
} else {
- $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' ) || !$wgUser->getOption( 'forceeditsummary' );
+ $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' ) || !$user->getOption( 'forceeditsummary' );
}
$this->autoSumm = $request->getText( 'wpAutoSummary' );
$this->bot = $request->getBool( 'bot', true );
$this->nosummary = $request->getBool( 'nosummary' );
- $content_handler = ContentHandler::getForTitle( $this->mTitle );
+ $content_handler = ContentHandler::getForTitle( $this->getTitle() );
$this->contentModel = $request->getText( 'model', $content_handler->getModelID() ); #may be overridden by revision
$this->contentFormat = $request->getText( 'format', $content_handler->getDefaultFormat() ); #may be overridden by revision
- #TODO: check if the desired model is allowed in this namespace, and if a transition from the page's current model to the new model is allowed
- #TODO: check if the desired content model supports the given content format!
+ # @todo Check if the desired model is allowed in this namespace, and if a transition from the page's current model to the new model is allowed
+ # @todo Check if the desired content model supports the given content format!
$this->live = $request->getCheck( 'live' );
$this->editintro = $request->getText( 'editintro',
* @return bool -- if the requested section is valid
*/
function initialiseForm() {
- global $wgUser;
- $this->edittime = $this->mArticle->getTimestamp();
+ $this->edittime = $this->getArticle()->getTimestamp();
- $content = $this->getContentObject( false ); #TODO: track content object?!
+ $content = $this->getContentObject( false ); # @todo Track content object?!
if ( $content === false ) {
return false;
}
// activate checkboxes if user wants them to be always active
# Sort out the "watch" checkbox
- if ( $wgUser->getOption( 'watchdefault' ) ) {
+ $user = $this->getArticle()->getContext()->getUser();
+ if ( $user->getOption( 'watchdefault' ) ) {
# Watch all edits
$this->watchthis = true;
- } elseif ( $wgUser->getOption( 'watchcreations' ) && !$this->mTitle->exists() ) {
+ } elseif ( $user->getOption( 'watchcreations' ) && !$this->getTitle()->exists() ) {
# Watch creations
$this->watchthis = true;
- } elseif ( $wgUser->isWatched( $this->mTitle ) ) {
+ } elseif ( $user->isWatched( $this->getTitle() ) ) {
# Already watched
$this->watchthis = true;
}
- if ( $wgUser->getOption( 'minordefault' ) && !$this->isNew ) {
+
+ if ( $user->getOption( 'minordefault' ) && !$this->isNew ) {
$this->minoredit = true;
}
+
if ( $this->textbox1 === false ) {
return false;
}
+
wfProxyCheck();
return true;
}
/**
* Fetch initial editing page content.
*
- * @param $def_text string
+ * @param $def_text string|bool
* @return mixed string on success, $def_text for invalid sections
* @private
* @deprecated since 1.21, get WikiPage::getContent() instead.
}
/**
- * @param Content|false $def_content The default value to return
+ * @param Content|null $def_content The default value to return
*
* @return mixed Content on success, $def_content for invalid sections
*
* @since 1.21
*/
protected function getContentObject( $def_content = null ) {
- global $wgOut, $wgRequest;
-
wfProfileIn( __METHOD__ );
$content = false;
+ $context = $this->getArticle()->getContext();
+ $request = $context->getRequest();
// For message page not locally set, use the i18n message.
// For other non-existent articles, use preload text if any.
- if ( !$this->mTitle->exists() || $this->section == 'new' ) {
- if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI && $this->section != 'new' ) {
+ if ( !$this->getTitle()->exists() || $this->section == 'new' ) {
+ if ( $this->getTitle()->getNamespace() == NS_MEDIAWIKI && $this->section != 'new' ) {
# If this is a system message, get the default text.
- $msg = $this->mTitle->getDefaultMessageText();
+ $msg = $this->getTitle()->getDefaultMessageText();
$content = $this->toEditContent( $msg );
}
if ( $content === false ) {
# If requested, preload some text.
- $preload = $wgRequest->getVal( 'preload',
+ $preload = $request->getVal( 'preload',
// Custom preload text for new sections
- $this->section === 'new' ? 'MediaWiki:addsection-preload' : '' );
+ $this->section === 'new' ? 'MediaWiki:addsection-preload' : ''
+ );
$content = $this->getPreloadedContent( $preload );
}
$orig = $this->getOriginalContent();
$content = $orig ? $orig->getSection( $this->section ) : null;
- if ( !$content ) $content = $def_content;
+ if ( !$content ) {
+ $content = $def_content;
+ }
} else {
- $undoafter = $wgRequest->getInt( 'undoafter' );
- $undo = $wgRequest->getInt( 'undo' );
+ $undoafter = $request->getInt( 'undoafter' );
+ $undo = $request->getInt( 'undo' );
if ( $undo > 0 && $undoafter > 0 ) {
if ( $undo < $undoafter ) {
# Otherwise, $content will be left as-is.
if ( !is_null( $undorev ) && !is_null( $oldrev ) &&
$undorev->getPage() == $oldrev->getPage() &&
- $undorev->getPage() == $this->mTitle->getArticleID() &&
+ $undorev->getPage() == $this->getTitle()->getArticleID() &&
!$undorev->isDeleted( Revision::DELETED_TEXT ) &&
!$oldrev->isDeleted( Revision::DELETED_TEXT ) ) {
- $content = $this->mArticle->getUndoContent( $undorev, $oldrev );
+ $content = $this->getArticle()->getUndoContent( $undorev, $oldrev );
if ( $content === false ) {
# Warn the user that something went wrong
# If we just undid one rev, use an autosummary
$firstrev = $oldrev->getNext();
if ( $firstrev && $firstrev->getId() == $undo ) {
- $undoSummary = wfMessage( 'undo-summary', $undo, $undorev->getUserText() )->inContentLanguage()->text();
+ $undoSummary = $context->msg( 'undo-summary', $undo,
+ $undorev->getUserText() )->inContentLanguage()->text();
if ( $this->summary === '' ) {
$this->summary = $undoSummary;
} else {
- $this->summary = $undoSummary . wfMessage( 'colon-separator' )
- ->inContentLanguage()->text() . $this->summary;
+ $this->summary = $undoSummary .
+ $context->msg( 'colon-separator' )->inContentLanguage()->text() .
+ $this->summary;
}
$this->undidRev = $undo;
}
}
$class = ( $undoMsg == 'success' ? '' : 'error ' ) . "mw-undo-{$undoMsg}";
- $this->editFormPageTop .= $wgOut->parse( "<div class=\"{$class}\">" .
- wfMessage( 'undo-' . $undoMsg )->plain() . '</div>', true, /* interface */true );
+ $this->editFormPageTop .= $context->getOutput()->parse( "<div class=\"{$class}\">" .
+ $context->msg( 'undo-' . $undoMsg )->plain() . '</div>', true, /* interface */true );
}
if ( $content === false ) {
* to the original text of the edit.
*
* This difers from Article::getContent() that when a missing revision is
- * encountered the result will be an empty string and not the
+ * encountered the result will be null and not the
* 'missing-revision' message.
*
* @since 1.19
- * @return string
+ * @return Content|null
*/
private function getOriginalContent() {
if ( $this->section == 'new' ) {
return $this->getCurrentContent();
}
- $revision = $this->mArticle->getRevisionFetched();
+ $revision = $this->getArticle()->getRevisionFetched();
if ( $revision === null ) {
if ( !$this->contentModel ) $this->contentModel = $this->getTitle()->getContentModel();
$handler = ContentHandler::getForModelID( $this->contentModel );
return $handler->makeEmptyContent();
}
+
$content = $revision->getContent();
+
return $content;
}
* @return Content
*/
protected function getCurrentContent() {
- $rev = $this->mArticle->getRevision();
+ $rev = $this->getArticle()->getRevision();
$content = $rev ? $rev->getContent( Revision::RAW ) : null;
if ( $content === false || $content === null ) {
* @since 1.21
*/
protected function getPreloadedContent( $preload ) {
- global $wgUser;
-
if ( !empty( $this->mPreloadContent ) ) {
return $this->mPreloadContent;
}
}
$title = Title::newFromText( $preload );
+ $user = $this->getArticle()->getContext()->getUser();
# Check for existence to avoid getting MediaWiki:Noarticletext
- if ( $title === null || !$title->exists() || !$title->userCan( 'read' ) ) {
+ if ( $title === null || !$title->exists() || !$title->userCan( 'read', $user ) ) {
return $handler->makeEmptyContent();
}
if ( $page->isRedirect() ) {
$title = $page->getRedirectTarget();
# Same as before
- if ( $title === null || !$title->exists() || !$title->userCan( 'read' ) ) {
+ if ( $title === null || !$title->exists() || !$title->userCan( 'read', $user ) ) {
return $handler->makeEmptyContent();
}
$page = WikiPage::factory( $title );
}
- $parserOptions = ParserOptions::newFromUser( $wgUser );
+ $parserOptions = ParserOptions::newFromUser( $user );
$content = $page->getContent( Revision::RAW );
+ if ( !$content ) {
+ return $handler->makeEmptyContent();
+ }
+
return $content->preloadTransform( $title, $parserOptions );
}
* @private
*/
function tokenOk( &$request ) {
- global $wgUser;
+ $user = $this->getArticle()->getContext()->getUser();
$token = $request->getVal( 'wpEditToken' );
- $this->mTokenOk = $wgUser->matchEditToken( $token );
- $this->mTokenOkExceptSuffix = $wgUser->matchEditTokenNoSuffix( $token );
+ $this->mTokenOk = $user->matchEditToken( $token );
+ $this->mTokenOkExceptSuffix = $user->matchEditTokenNoSuffix( $token );
return $this->mTokenOk;
}
* @return bool false if output is done, true if the rest of the form should be displayed
*/
function attemptSave() {
- global $wgUser, $wgOut;
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
+ $user = $context->getUser();
$resultDetails = false;
# Allow bots to exempt some edits from bot flagging
- $bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
+ $bot = $user->isAllowed( 'bot' ) && $this->bot;
$status = $this->internalAttemptSave( $resultDetails, $bot );
// FIXME: once the interface for internalAttemptSave() is made nicer, this should use the message in $status
if ( $status->value == self::AS_SUCCESS_UPDATE || $status->value == self::AS_SUCCESS_NEW_ARTICLE ) {
return false;
case self::AS_PARSE_ERROR:
- $wgOut->addWikiText( '<div class="error">' . $status->getWikiText() . '</div>');
+ $out->addWikiText( '<div class="error">' . $status->getWikiText() . '</div>');
return true;
case self::AS_SUCCESS_NEW_ARTICLE:
$query = $resultDetails['redirect'] ? 'redirect=no' : '';
$anchor = isset ( $resultDetails['sectionanchor'] ) ? $resultDetails['sectionanchor'] : '';
- $wgOut->redirect( $this->mTitle->getFullURL( $query ) . $anchor );
+ $out->redirect( $this->getTitle()->getFullURL( $query ) . $anchor );
return false;
case self::AS_SUCCESS_UPDATE:
$sectionanchor = $resultDetails['sectionanchor'];
// Give extensions a chance to modify URL query on update
- wfRunHooks( 'ArticleUpdateBeforeRedirect', array( $this->mArticle, &$sectionanchor, &$extraQuery ) );
+ wfRunHooks( 'ArticleUpdateBeforeRedirect', array( $this->getArticle(), &$sectionanchor, &$extraQuery ) );
if ( $resultDetails['redirect'] ) {
if ( $extraQuery == '' ) {
$extraQuery = 'redirect=no&' . $extraQuery;
}
}
- $wgOut->redirect( $this->mTitle->getFullURL( $extraQuery ) . $sectionanchor );
+ $out->redirect( $this->getTitle()->getFullURL( $extraQuery ) . $sectionanchor );
return false;
case self::AS_BLANK_ARTICLE:
- $wgOut->redirect( $this->getContextTitle()->getFullURL() );
+ $out->redirect( $this->getContextTitle()->getFullURL() );
return false;
case self::AS_SPAM_ERROR:
return false;
case self::AS_BLOCKED_PAGE_FOR_USER:
- throw new UserBlockedError( $wgUser->getBlock() );
+ throw new UserBlockedError( $user->getBlock() );
case self::AS_IMAGE_REDIRECT_ANON:
case self::AS_IMAGE_REDIRECT_LOGGED:
throw new ThrottledError();
case self::AS_NO_CREATE_PERMISSION:
- $permission = $this->mTitle->isTalkPage() ? 'createtalk' : 'createpage';
+ $permission = $this->getTitle()->isTalkPage() ? 'createtalk' : 'createpage';
throw new PermissionsError( $permission );
default:
* AS_CONTENT_TOO_BIG and AS_BLOCKED_PAGE_FOR_USER. All that stuff needs to be cleaned up some time.
*/
function internalAttemptSave( &$result, $bot = false ) {
- global $wgUser, $wgRequest, $wgParser, $wgMaxArticleSize;
+ global $wgParser, $wgMaxArticleSize;
$status = Status::newGood();
return $status;
}
+ $context = $this->getArticle()->getContext();
+ $user = $context->getUser();
+
# Check image redirect
- if ( $this->mTitle->getNamespace() == NS_FILE &&
+ if ( $this->getTitle()->getNamespace() == NS_FILE &&
$textbox_content->isRedirect() &&
- !$wgUser->isAllowed( 'upload' ) ) {
- $code = $wgUser->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
+ !$user->isAllowed( 'upload' ) ) {
+ $code = $user->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
$status->setResult( false, $code );
wfProfileOut( __METHOD__ . '-checks' );
}
if ( $match !== false ) {
$result['spam'] = $match;
- $ip = $wgRequest->getIP();
- $pdbk = $this->mTitle->getPrefixedDBkey();
+ $ip = $context->getRequest()->getIP();
+ $pdbk = $this->getTitle()->getPrefixedDBkey();
$match = str_replace( "\n", '', $match );
wfDebugLog( 'SpamRegex', "$ip spam regex hit [[$pdbk]]: \"$match\"" );
$status->fatal( 'spamprotectionmatch', $match );
return $status;
}
- if ( $wgUser->isBlockedFrom( $this->mTitle, false ) ) {
+ if ( $user->isBlockedFrom( $this->getTitle(), false ) ) {
// Auto-block user's IP if the account was "hard" blocked
- $wgUser->spreadAnyEditBlock();
+ $user->spreadAnyEditBlock();
# Check block state against master, thus 'false'.
$status->setResult( false, self::AS_BLOCKED_PAGE_FOR_USER );
wfProfileOut( __METHOD__ . '-checks' );
return $status;
}
- if ( !$wgUser->isAllowed( 'edit' ) ) {
- if ( $wgUser->isAnon() ) {
+ if ( !$user->isAllowed( 'edit' ) ) {
+ if ( $user->isAnon() ) {
$status->setResult( false, self::AS_READ_ONLY_PAGE_ANON );
wfProfileOut( __METHOD__ . '-checks' );
wfProfileOut( __METHOD__ );
wfProfileOut( __METHOD__ );
return $status;
}
- if ( $wgUser->pingLimiter() ) {
+ if ( $user->pingLimiter() ) {
$status->fatal( 'actionthrottledtext' );
$status->value = self::AS_RATE_LIMITED;
wfProfileOut( __METHOD__ . '-checks' );
# Load the page data from the master. If anything changes in the meantime,
# we detect it by using page_latest like a token in a 1 try compare-and-swap.
- $this->mArticle->loadPageData( 'fromdbmaster' );
- $new = !$this->mArticle->exists();
+ $this->getArticle()->loadPageData( 'fromdbmaster' );
+ $new = !$this->getArticle()->exists();
if ( $new ) {
// Late check for create permission, just in case *PARANOIA*
- if ( !$this->mTitle->userCan( 'create' ) ) {
+ if ( !$this->getTitle()->userCan( 'create', $user ) ) {
$status->fatal( 'nocreatetext' );
$status->value = self::AS_NO_CREATE_PERMISSION;
wfDebug( __METHOD__ . ": no create permission\n" );
// passed.
if ( $this->summary === '' ) {
$cleanSectionTitle = $wgParser->stripSectionName( $this->sectiontitle );
- $this->summary = wfMessage( 'newsectionsummary', $cleanSectionTitle )
- ->inContentLanguage()->text() ;
+ $this->summary = $context->msg( 'newsectionsummary' )
+ ->rawParams( $cleanSectionTitle )->inContentLanguage()->text();
}
} elseif ( $this->summary !== '' ) {
// Insert the section title above the content.
// Create a link to the new section from the edit summary.
$cleanSummary = $wgParser->stripSectionName( $this->summary );
- $this->summary = wfMessage( 'newsectionsummary', $cleanSummary )
- ->inContentLanguage()->text();
+ $this->summary = $context->msg( 'newsectionsummary' )
+ ->rawParams( $cleanSummary )->inContentLanguage()->text();
}
}
$status->value = self::AS_SUCCESS_NEW_ARTICLE;
-
} else { # not $new
-
# Article exists. Check for edit conflict.
- $this->mArticle->clear(); # Force reload of dates, etc.
- $timestamp = $this->mArticle->getTimestamp();
+ $this->getArticle()->clear(); # Force reload of dates, etc.
+ $timestamp = $this->getArticle()->getTimestamp();
wfDebug( "timestamp: {$timestamp}, edittime: {$this->edittime}\n" );
if ( $timestamp != $this->edittime ) {
$this->isConflict = true;
if ( $this->section == 'new' ) {
- if ( $this->mArticle->getUserText() == $wgUser->getName() &&
- $this->mArticle->getComment() == $this->summary ) {
+ if ( $this->getArticle()->getUserText() == $user->getName() &&
+ $this->getArticle()->getComment() == $this->summary ) {
// Probably a duplicate submission of a new comment.
// This can happen when squid resends a request after
// a timeout but the first one actually went through.
$this->isConflict = false;
wfDebug( __METHOD__ . ": conflict suppressed; new section\n" );
}
- } elseif ( $this->section == '' && Revision::userWasLastToEdit( DB_MASTER, $this->mTitle->getArticleID(),
- $wgUser->getId(), $this->edittime ) ) {
- # Suppress edit conflict with self, except for section edits where merging is required.
- wfDebug( __METHOD__ . ": Suppressing edit conflict, same user.\n" );
- $this->isConflict = false;
+ } elseif ( $this->section == '' ) {
+ $userWasLastToEdit = Revision::userWasLastToEdit(
+ DB_MASTER,
+ $this->getTitle()->getArticleID(),
+ $user->getId(),
+ $this->edittime
+ );
+
+ if ( $userWasLastToEdit ) {
+ # Suppress edit conflict with self, except for section edits where merging is required.
+ wfDebug( __METHOD__ . ": Suppressing edit conflict, same user.\n" );
+ $this->isConflict = false;
+ }
}
}
wfDebug( __METHOD__ . ": conflict! getting section '{$this->section}' for time '{$this->edittime}'"
. " (article time '{$timestamp}')\n" );
- $content = $this->mArticle->replaceSectionContent( $this->section, $textbox_content, $sectionTitle, $this->edittime );
+ $content = $this->getArticle()->replaceSectionContent( $this->section, $textbox_content, $sectionTitle, $this->edittime );
} else {
wfDebug( __METHOD__ . ": getting section '{$this->section}'\n" );
- $content = $this->mArticle->replaceSectionContent( $this->section, $textbox_content, $sectionTitle );
+ $content = $this->getArticle()->replaceSectionContent( $this->section, $textbox_content, $sectionTitle );
}
if ( is_null( $content ) ) {
$this->isConflict = true;
$content = $textbox_content; // do not try to merge here!
} elseif ( $this->isConflict ) {
+ $contentObj = $content;
# Attempt merge
- if ( $this->mergeChangesIntoContent( $textbox_content ) ) {
+ if ( $this->mergeChangesInto( $content ) ) {
// Successful merge! Maybe we should tell the user the good news?
$this->isConflict = false;
- $content = $textbox_content;
+ $content = $this->toEditContent( $content );
wfDebug( __METHOD__ . ": Suppressing edit conflict, successful merge.\n" );
} else {
$this->section = '';
- #$this->textbox1 = $text; #redundant, nothing to do here?
+ $this->textbox1 = ContentHandler::getContentText( $contentObj );
wfDebug( __METHOD__ . ": Keeping edit conflict, failed merge.\n" );
}
}
// passed.
if ( $this->summary === '' ) {
$cleanSectionTitle = $wgParser->stripSectionName( $this->sectiontitle );
- $this->summary = wfMessage( 'newsectionsummary', $cleanSectionTitle )
- ->inContentLanguage()->text();
+ $this->summary = $context->msg( 'newsectionsummary' )
+ ->rawParams( $cleanSectionTitle )->inContentLanguage()->text();
}
} elseif ( $this->summary !== '' ) {
$sectionanchor = $wgParser->guessLegacySectionNameFromWikiText( $this->summary );
# This is a new section, so create a link to the new section
# in the revision summary.
$cleanSummary = $wgParser->stripSectionName( $this->summary );
- $this->summary = wfMessage( 'newsectionsummary', $cleanSummary )
- ->inContentLanguage()->text();
+ $this->summary = $context->msg( 'newsectionsummary' )
+ ->rawParams( $cleanSummary )->inContentLanguage()->text();
}
} elseif ( $this->section != '' ) {
# Try to get a section anchor from the section source, redirect to edited section if header found
( ( $this->minoredit && !$this->isNew ) ? EDIT_MINOR : 0 ) |
( $bot ? EDIT_FORCE_BOT : 0 );
- $doEditStatus = $this->mArticle->doEditContent( $content, $this->summary, $flags,
- false, null, $this->contentFormat );
+ $doEditStatus = $this->getArticle()->doEditContent( $content, $this->summary, $flags,
+ false, null, $this->contentFormat );
if ( $doEditStatus->isOK() ) {
$result['redirect'] = $content->isRedirect();
- $this->commitWatch();
+ $this->updateWatchlist();
wfProfileOut( __METHOD__ );
return $status;
} else {
}
/**
- * Commit the change of watch status
+ * Register the change of watch status
*/
- protected function commitWatch() {
- global $wgUser;
- if ( $wgUser->isLoggedIn() && $this->watchthis != $wgUser->isWatched( $this->mTitle ) ) {
+ protected function updateWatchlist() {
+ $title = $this->getTitle();
+ $user = $this->getArticle()->getContext()->getUser();
+
+ if ( $user->isLoggedIn() && $this->watchthis != $user->isWatched( $title ) ) {
+ $fname = __METHOD__;
+ $watch = $this->watchthis;
+
+ // Do this in its own transaction to reduce contention...
$dbw = wfGetDB( DB_MASTER );
- $dbw->begin( __METHOD__ );
- if ( $this->watchthis ) {
- WatchAction::doWatch( $this->mTitle, $wgUser );
- } else {
- WatchAction::doUnwatch( $this->mTitle, $wgUser );
- }
- $dbw->commit( __METHOD__ );
+ $dbw->onTransactionIdle( function() use ( $dbw, $title, $watch, $user, $fname ) {
+ $dbw->begin( $fname );
+ if ( $watch ) {
+ WatchAction::doWatch( $title, $user );
+ } else {
+ WatchAction::doUnwatch( $title, $user );
+ }
+ $dbw->commit( $fname );
+ } );
}
}
function mergeChangesInto( &$editText ){
ContentHandler::deprecated( __METHOD__, "1.21" );
- $editContent = $this->toEditContent( $editText );
+ wfProfileIn( __METHOD__ );
- $ok = $this->mergeChangesIntoContent( $editContent );
+ $db = wfGetDB( DB_MASTER );
- if ( $ok ) {
- $editText = $this->toEditText( $editContent );
- return true;
- } else {
+ // This is the revision the editor started from
+ $baseRevision = $this->getBaseRevision();
+ if ( is_null( $baseRevision ) ) {
+ wfProfileOut( __METHOD__ );
return false;
}
+ $baseText = $baseRevision->getText();
+
+ // The current state, we want to merge updates into it
+ $currentRevision = Revision::loadFromTitle( $db, $this->mTitle );
+ if ( is_null( $currentRevision ) ) {
+ wfProfileOut( __METHOD__ );
+ return false;
+ }
+ $currentText = $currentRevision->getText();
+
+ $result = '';
+ $editText = $this->toEditText( $editText );
+
+ if ( wfMerge( $baseText, $editText, $currentText, $result ) ) {
+ $editText = $result;
+ wfProfileOut( __METHOD__ );
+ return true;
+ }
+
+ wfProfileOut( __METHOD__ );
+ return false;
}
/**
* @private
* @todo document
*
- * @parma $editText string
- *
+ * @param $editContent
* @return bool
* @since since 1.WD
*/
// This is the revision the editor started from
$baseRevision = $this->getBaseRevision();
- if ( is_null( $baseRevision ) ) {
+ $baseContent = $baseRevision ? $baseRevision->getContent() : null;
+
+ if ( is_null( $baseContent ) ) {
wfProfileOut( __METHOD__ );
return false;
}
- $baseContent = $baseRevision->getContent();
// The current state, we want to merge updates into it
- $currentRevision = Revision::loadFromTitle( $db, $this->mTitle );
- if ( is_null( $currentRevision ) ) {
+ $currentRevision = Revision::loadFromTitle( $db, $this->getTitle() );
+ $currentContent = $currentRevision ? $currentRevision->getContent() : null;
+
+ if ( is_null( $currentContent ) ) {
wfProfileOut( __METHOD__ );
return false;
}
- $currentContent = $currentRevision->getContent();
$handler = ContentHandler::getForModelID( $baseContent->getModel() );
$editContent = $result;
wfProfileOut( __METHOD__ );
return true;
- } else {
- wfProfileOut( __METHOD__ );
- return false;
}
+
+ wfProfileOut( __METHOD__ );
+ return false;
}
/**
if ( !$this->mBaseRevision ) {
$db = wfGetDB( DB_MASTER );
$baseRevision = Revision::loadFromTimestamp(
- $db, $this->mTitle, $this->edittime );
+ $db, $this->getTitle(), $this->edittime );
return $this->mBaseRevision = $baseRevision;
} else {
return $this->mBaseRevision;
return $matches[0];
}
}
+
return false;
}
function setHeaders() {
- global $wgOut, $wgUser;
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
- $wgOut->addModules( 'mediawiki.action.edit' );
+ $out->addModules( 'mediawiki.action.edit' );
- if ( $wgUser->getOption( 'uselivepreview', false ) ) {
- $wgOut->addModules( 'mediawiki.legacy.preview' );
+ if ( $context->getUser()->getOption( 'uselivepreview', false ) ) {
+ $out->addModules( 'mediawiki.action.edit.preview' );
}
// Bug #19334: textarea jumps when editing articles in IE8
- $wgOut->addStyle( 'common/IE80Fixes.css', 'screen', 'IE 8' );
+ $out->addStyle( 'common/IE80Fixes.css', 'screen', 'IE 8' );
- $wgOut->setRobotPolicy( 'noindex,nofollow' );
+ $out->setRobotPolicy( 'noindex,nofollow' );
# Enabled article-related sidebar, toplinks, etc.
- $wgOut->setArticleRelated( true );
+ $out->setArticleRelated( true );
$contextTitle = $this->getContextTitle();
if ( $this->isConflict ) {
if ( $displayTitle === false ) {
$displayTitle = $contextTitle->getPrefixedText();
}
- $wgOut->setPageTitle( wfMessage( $msg, $displayTitle ) );
+ $out->setPageTitle( $context->msg( $msg, $displayTitle ) );
}
/**
* Show all applicable editing introductions
*/
protected function showIntro() {
- global $wgOut, $wgUser;
if ( $this->suppressIntro ) {
return;
}
- $namespace = $this->mTitle->getNamespace();
+ $namespace = $this->getTitle()->getNamespace();
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
if ( $namespace == NS_MEDIAWIKI ) {
# Show a warning if editing an interface message
- $wgOut->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
+ $out->wrapWikiMsg( "<div class='mw-editinginterface'>\n$1\n</div>", 'editinginterface' );
} else if( $namespace == NS_FILE ) {
# Show a hint to shared repo
- $file = wfFindFile( $this->mTitle );
+ $file = wfFindFile( $this->getTitle() );
if( $file && !$file->isLocal() ) {
$descUrl = $file->getDescriptionUrl();
# there must be a description url to show a hint to shared repo
if( $descUrl ) {
- if( !$this->mTitle->exists() ) {
- $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-create\">\n$1\n</div>", array (
+ if( !$this->getTitle()->exists() ) {
+ $out->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-create\">\n$1\n</div>", array (
'sharedupload-desc-create', $file->getRepo()->getDisplayName(), $descUrl
) );
} else {
- $wgOut->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-edit\">\n$1\n</div>", array(
+ $out->wrapWikiMsg( "<div class=\"mw-sharedupload-desc-edit\">\n$1\n</div>", array(
'sharedupload-desc-edit', $file->getRepo()->getDisplayName(), $descUrl
) );
}
# Show a warning message when someone creates/edits a user (talk) page but the user does not exist
# Show log extract when the user is currently blocked
if ( $namespace == NS_USER || $namespace == NS_USER_TALK ) {
- $parts = explode( '/', $this->mTitle->getText(), 2 );
+ $parts = explode( '/', $this->getTitle()->getText(), 2 );
$username = $parts[0];
$user = User::newFromName( $username, false /* allow IP users*/ );
$ip = User::isIP( $username );
if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
- $wgOut->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
+ $out->wrapWikiMsg( "<div class=\"mw-userpage-userdoesnotexist error\">\n$1\n</div>",
array( 'userpage-userdoesnotexist', wfEscapeWikiText( $username ) ) );
} elseif ( $user->isBlocked() ) { # Show log extract if the user is currently blocked
LogEventsList::showLogExtract(
- $wgOut,
+ $out,
'block',
$user->getUserPage(),
'',
);
}
}
+
# Try to add a custom edit intro, or use the standard one if this is not possible.
- if ( !$this->showCustomIntro() && !$this->mTitle->exists() ) {
- if ( $wgUser->isLoggedIn() ) {
- $wgOut->wrapWikiMsg( "<div class=\"mw-newarticletext\">\n$1\n</div>", 'newarticletext' );
+ if ( !$this->showCustomIntro() && !$this->getTitle()->exists() ) {
+ if ( $context->getUser()->isLoggedIn() ) {
+ $out->wrapWikiMsg( "<div class=\"mw-newarticletext\">\n$1\n</div>", 'newarticletext' );
} else {
- $wgOut->wrapWikiMsg( "<div class=\"mw-newarticletextanon\">\n$1\n</div>", 'newarticletextanon' );
+ $out->wrapWikiMsg( "<div class=\"mw-newarticletextanon\">\n$1\n</div>", 'newarticletextanon' );
}
}
+
# Give a notice if the user is editing a deleted/moved page...
- if ( !$this->mTitle->exists() ) {
- LogEventsList::showLogExtract( $wgOut, array( 'delete', 'move' ), $this->mTitle,
- '', array( 'lim' => 10,
- 'conds' => array( "log_action != 'revision'" ),
- 'showIfEmpty' => false,
- 'msgKey' => array( 'recreate-moveddeleted-warn' ) )
+ if ( !$this->getTitle()->exists() ) {
+ LogEventsList::showLogExtract( $out, array( 'delete', 'move' ), $this->getTitle(),
+ '',
+ array(
+ 'lim' => 10,
+ 'conds' => array( "log_action != 'revision'" ),
+ 'showIfEmpty' => false,
+ 'msgKey' => array( 'recreate-moveddeleted-warn' )
+ )
);
}
}
protected function showCustomIntro() {
if ( $this->editintro ) {
$title = Title::newFromText( $this->editintro );
+
if ( $title instanceof Title && $title->exists() && $title->userCan( 'read' ) ) {
- global $wgOut;
// Added using template syntax, to take <noinclude>'s into account.
- $wgOut->addWikiTextTitleTidy( '{{:' . $title->getFullText() . '}}', $this->mTitle );
+ $this->getArticle()->getContext()->getOutput()
+ ->addWikiTextTitleTidy( '{{:' . $title->getFullText() . '}}', $this->mTitle );
+
return true;
- } else {
- return false;
}
- } else {
- return false;
}
+
+ return false;
}
/**
- * Gets an editable textual representation of the given Content object.
+ * Gets an editable textual representation of $content.
* The textual representation can be turned by into a Content object by the
* toEditContent() method.
*
+ * If $content is null or false or a string, $content is returned unchanged.
+ *
* If the given Content object is not of a type that can be edited using the text base EditPage,
* an exception will be raised. Set $this->allowNonTextContent to true to allow editing of non-textual
* content.
*
- * @param Content $content
+ * @param Content|null|bool|string $content
* @return String the editable text form of the content.
*
* @throws MWException if $content is not an instance of TextContent and $this->allowNonTextContent is not true.
*/
- protected function toEditText( Content $content ) {
+ protected function toEditText( $content ) {
+ if ( $content === null || $content === false ) {
+ return $content;
+ }
+
+ if ( is_string( $content ) ) {
+ return $content;
+ }
+
if ( !$this->allowNonTextContent && !( $content instanceof TextContent ) ) {
throw new MWException( "This content model can not be edited as text: "
. ContentHandler::getLocalizedName( $content->getModel() ) );
* an exception will be raised. Set $this->allowNonTextContent to true to allow editing of non-textual
* content.
*
- * @param String|null|false $text Text to unserialize
+ * @param String|null|bool $text Text to unserialize
* @return Content The content object created from $text. If $text was false or null, false resp. null will be
* returned instead.
*
/**
* Send the edit form and related headers to $wgOut
- * @param $formCallback Callback that takes an OutputPage parameter; will be called
+ * @param $formCallback Callback|null that takes an OutputPage parameter; will be called
* during form output near the top, for captchas and the like.
*/
function showEditForm( $formCallback = null ) {
- global $wgOut, $wgUser;
-
wfProfileIn( __METHOD__ );
# need to parse the preview early so that we know which templates are used,
$previewOutput = $this->getPreviewText();
}
- wfRunHooks( 'EditPage::showEditForm:initial', array( &$this, &$wgOut ) );
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
+ wfRunHooks( 'EditPage::showEditForm:initial', array( &$this, &$out ) );
$this->setHeaders();
return;
}
- $wgOut->addHTML( $this->editFormPageTop );
+ $out->addHTML( $this->editFormPageTop );
- if ( $wgUser->getOption( 'previewontop' ) ) {
+ if ( $context->getUser()->getOption( 'previewontop' ) ) {
$this->displayPreviewArea( $previewOutput, true );
}
- $wgOut->addHTML( $this->editFormTextTop );
+ $out->addHTML( $this->editFormTextTop );
$showToolbar = true;
if ( $this->wasDeletedSinceLastEdit() ) {
// Add an confirmation checkbox and explanation.
$showToolbar = false;
} else {
- $wgOut->wrapWikiMsg( "<div class='error mw-deleted-while-editing'>\n$1\n</div>",
+ $out->wrapWikiMsg( "<div class='error mw-deleted-while-editing'>\n$1\n</div>",
'deletedwhileediting' );
}
}
- //@todo: add EditForm plugin interface and use it here!
+ // @todo Add EditForm plugin interface and use it here!
// search for textarea1 and textares2, and allow EditForm to override all uses.
- $wgOut->addHTML( Html::openElement( 'form', array( 'id' => self::EDITFORM_ID, 'name' => self::EDITFORM_ID,
+ $out->addHTML( Html::openElement( 'form', array( 'id' => self::EDITFORM_ID, 'name' => self::EDITFORM_ID,
'method' => 'post', 'action' => $this->getActionURL( $this->getContextTitle() ),
'enctype' => 'multipart/form-data' ) ) );
if ( is_callable( $formCallback ) ) {
- call_user_func_array( $formCallback, array( &$wgOut ) );
+ call_user_func_array( $formCallback, array( &$out ) );
}
- wfRunHooks( 'EditPage::showEditForm:fields', array( &$this, &$wgOut ) );
+ wfRunHooks( 'EditPage::showEditForm:fields', array( &$this, &$out ) );
// Put these up at the top to ensure they aren't lost on early form submission
$this->showFormBeforeText();
$comment = $this->lastDelete->log_comment;
// It is better to not parse the comment at all than to have templates expanded in the middle
- // TODO: can the checkLabel be moved outside of the div so that wrapWikiMsg could be used?
+ // @todo Can the checkLabel be moved outside of the div so that wrapWikiMsg could be used?
$key = $comment === ''
? 'confirmrecreate-noreason'
: 'confirmrecreate';
- $wgOut->addHTML(
+ $out->addHTML(
'<div class="mw-confirm-recreate">' .
- wfMessage( $key, $username, "<nowiki>$comment</nowiki>" )->parse() .
- Xml::checkLabel( wfMessage( 'recreate' )->text(), 'wpRecreate', 'wpRecreate', false,
+ $context->msg( $key, $username, "<nowiki>$comment</nowiki>" )->parse() .
+ Xml::checkLabel( $context->msg( 'recreate' )->text(), 'wpRecreate', 'wpRecreate', false,
array( 'title' => Linker::titleAttrib( 'recreate' ), 'tabindex' => 1, 'id' => 'wpRecreate' )
) .
'</div>'
# When the summary is hidden, also hide them on preview/show changes
if( $this->nosummary ) {
- $wgOut->addHTML( Html::hidden( 'nosummary', true ) );
+ $out->addHTML( Html::hidden( 'nosummary', true ) );
}
# If a blank edit summary was previously provided, and the appropriate
# For a bit more sophisticated detection of blank summaries, hash the
# automatic one and pass that in the hidden field wpAutoSummary.
if ( $this->missingSummary || ( $this->section == 'new' && $this->nosummary ) ) {
- $wgOut->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) );
+ $out->addHTML( Html::hidden( 'wpIgnoreBlankSummary', true ) );
}
if ( $this->undidRev ) {
- $wgOut->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) );
+ $out->addHTML( Html::hidden( 'wpUndidRevision', $this->undidRev ) );
}
if ( $this->hasPresetSummary ) {
}
$autosumm = $this->autoSumm ? $this->autoSumm : md5( $this->summary );
- $wgOut->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) );
+ $out->addHTML( Html::hidden( 'wpAutoSummary', $autosumm ) );
- $wgOut->addHTML( Html::hidden( 'oldid', $this->oldid ) );
+ $out->addHTML( Html::hidden( 'oldid', $this->oldid ) );
- $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) );
- $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) );
+ $out->addHTML( Html::hidden( 'format', $this->contentFormat ) );
+ $out->addHTML( Html::hidden( 'model', $this->contentModel ) );
if ( $this->section == 'new' ) {
$this->showSummaryInput( true, $this->summary );
- $wgOut->addHTML( $this->getSummaryPreview( true, $this->summary ) );
+ $out->addHTML( $this->getSummaryPreview( true, $this->summary ) );
}
- $wgOut->addHTML( $this->editFormTextBeforeContent );
+ $out->addHTML( $this->editFormTextBeforeContent );
- if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) {
- $wgOut->addHTML( EditPage::getEditToolbar() );
+ if ( !$this->isCssJsSubpage && $showToolbar && $context->getUser()->getOption( 'showtoolbar' ) ) {
+ $out->addHTML( EditPage::getEditToolbar() );
}
if ( $this->isConflict ) {
$this->showContentForm();
}
- $wgOut->addHTML( $this->editFormTextAfterContent );
+ $out->addHTML( $this->editFormTextAfterContent );
$this->showStandardInputs();
-
$this->showFormAfterText();
-
$this->showTosSummary();
-
$this->showEditTools();
- $wgOut->addHTML( $this->editFormTextAfterTools . "\n" );
+ $out->addHTML( $this->editFormTextAfterTools . "\n" );
- $wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
+ $out->addHTML( Html::rawElement( 'div', array( 'class' => 'templatesUsed' ),
Linker::formatTemplates( $this->getTemplates(), $this->preview, $this->section != '' ) ) );
- $wgOut->addHTML( Html::rawElement( 'div', array( 'class' => 'hiddencats' ),
- Linker::formatHiddenCategories( $this->mArticle->getHiddenCategories() ) ) );
+ $out->addHTML( Html::rawElement( 'div', array( 'class' => 'hiddencats' ),
+ Linker::formatHiddenCategories( $this->getArticle()->getHiddenCategories() ) ) );
if ( $this->isConflict ) {
try {
$this->showConflict();
} catch ( MWContentSerializationException $ex ) {
// this can't really happen, but be nice if it does.
- $msg = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
- $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>');
+ $msg = $context->msg( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+ $out->addWikiText( '<div class="error">' . $msg->text() . '</div>');
}
}
- $wgOut->addHTML( $this->editFormTextBottom . "\n</form>\n" );
+ $out->addHTML( $this->editFormTextBottom . "\n</form>\n" );
- if ( !$wgUser->getOption( 'previewontop' ) ) {
+ if ( !$context->getUser()->getOption( 'previewontop' ) ) {
$this->displayPreviewArea( $previewOutput, false );
}
}
protected function showHeader() {
- global $wgOut, $wgUser, $wgMaxArticleSize, $wgLang;
+ global $wgMaxArticleSize;
+
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
+ $title = $this->getTitle();
- if ( $this->mTitle->isTalkPage() ) {
- $wgOut->addWikiMsg( 'talkpagetext' );
+ if ( $title->isTalkPage() ) {
+ $out->addWikiMsg( 'talkpagetext' );
}
# Optional notices on a per-namespace and per-page basis
- $editnotice_ns = 'editnotice-' . $this->mTitle->getNamespace();
- $editnotice_ns_message = wfMessage( $editnotice_ns );
+ $editnotice_ns = 'editnotice-' . $title->getNamespace();
+ $editnotice_ns_message = $context->msg( $editnotice_ns );
if ( $editnotice_ns_message->exists() ) {
- $wgOut->addWikiText( $editnotice_ns_message->plain() );
+ $out->addWikiText( $editnotice_ns_message->plain() );
}
- if ( MWNamespace::hasSubpages( $this->mTitle->getNamespace() ) ) {
- $parts = explode( '/', $this->mTitle->getDBkey() );
+
+ if ( MWNamespace::hasSubpages( $title->getNamespace() ) ) {
+ $parts = explode( '/', $title->getDBkey() );
$editnotice_base = $editnotice_ns;
+
while ( count( $parts ) > 0 ) {
$editnotice_base .= '-' . array_shift( $parts );
- $editnotice_base_msg = wfMessage( $editnotice_base );
+ $editnotice_base_msg = $context->msg( $editnotice_base );
if ( $editnotice_base_msg->exists() ) {
- $wgOut->addWikiText( $editnotice_base_msg->plain() );
+ $out->addWikiText( $editnotice_base_msg->plain() );
}
}
} else {
# Even if there are no subpages in namespace, we still don't want / in MW ns.
- $editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $this->mTitle->getDBkey() );
- $editnoticeMsg = wfMessage( $editnoticeText );
+ $editnoticeText = $editnotice_ns . '-' . str_replace( '/', '-', $title->getDBkey() );
+ $editnoticeMsg = $context->msg( $editnoticeText );
if ( $editnoticeMsg->exists() ) {
- $wgOut->addWikiText( $editnoticeMsg->plain() );
+ $out->addWikiText( $editnoticeMsg->plain() );
}
}
if ( $this->isConflict ) {
- $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1\n</div>", 'explainconflict' );
- $this->edittime = $this->mArticle->getTimestamp();
+ $out->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1\n</div>", 'explainconflict' );
+ $this->edittime = $this->getArticle()->getTimestamp();
} else {
if ( $this->section != '' && !$this->isSectionEditSupported() ) {
// We use $this->section to much before this and getVal('wgSection') directly in other places
// at this point we can't reset $this->section to '' to fallback to non-section editing.
// Someone is welcome to try refactoring though
- $wgOut->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' );
+ $out->showErrorPage( 'sectioneditnotsupported-title', 'sectioneditnotsupported-text' );
return false;
}
}
if ( $this->missingComment ) {
- $wgOut->wrapWikiMsg( "<div id='mw-missingcommenttext'>\n$1\n</div>", 'missingcommenttext' );
+ $out->wrapWikiMsg( "<div id='mw-missingcommenttext'>\n$1\n</div>", 'missingcommenttext' );
}
if ( $this->missingSummary && $this->section != 'new' ) {
- $wgOut->wrapWikiMsg( "<div id='mw-missingsummary'>\n$1\n</div>", 'missingsummary' );
+ $out->wrapWikiMsg( "<div id='mw-missingsummary'>\n$1\n</div>", 'missingsummary' );
}
if ( $this->missingSummary && $this->section == 'new' ) {
- $wgOut->wrapWikiMsg( "<div id='mw-missingcommentheader'>\n$1\n</div>", 'missingcommentheader' );
+ $out->wrapWikiMsg( "<div id='mw-missingcommentheader'>\n$1\n</div>", 'missingcommentheader' );
}
if ( $this->hookError !== '' ) {
- $wgOut->addWikiText( $this->hookError );
+ $out->addWikiText( $this->hookError );
}
if ( !$this->checkUnicodeCompliantBrowser() ) {
- $wgOut->addWikiMsg( 'nonunicodebrowser' );
+ $out->addWikiMsg( 'nonunicodebrowser' );
}
if ( $this->section != 'new' ) {
- $revision = $this->mArticle->getRevisionFetched();
+ $revision = $this->getArticle()->getRevisionFetched();
if ( $revision ) {
// Let sysop know that this will make private content public if saved
- if ( !$revision->userCan( Revision::DELETED_TEXT ) ) {
- $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-permission' );
+ if ( !$revision->userCan( Revision::DELETED_TEXT, $context->getUser() ) ) {
+ $out->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-permission' );
} elseif ( $revision->isDeleted( Revision::DELETED_TEXT ) ) {
- $wgOut->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-view' );
+ $out->wrapWikiMsg( "<div class='mw-warning plainlinks'>\n$1\n</div>\n", 'rev-deleted-text-view' );
}
if ( !$revision->isCurrent() ) {
- $this->mArticle->setOldSubtitle( $revision->getId() );
- $wgOut->addWikiMsg( 'editingold' );
+ $this->getArticle()->setOldSubtitle( $revision->getId() );
+ $out->addWikiMsg( 'editingold' );
}
- } elseif ( $this->mTitle->exists() ) {
+ } elseif ( $title->exists() ) {
// Something went wrong
- $wgOut->wrapWikiMsg( "<div class='errorbox'>\n$1\n</div>\n",
+ $out->wrapWikiMsg( "<div class='errorbox'>\n$1\n</div>\n",
array( 'missing-revision', $this->oldid ) );
}
}
}
if ( wfReadOnly() ) {
- $wgOut->wrapWikiMsg( "<div id=\"mw-read-only-warning\">\n$1\n</div>", array( 'readonlywarning', wfReadOnlyReason() ) );
- } elseif ( $wgUser->isAnon() ) {
+ $out->wrapWikiMsg( "<div id=\"mw-read-only-warning\">\n$1\n</div>", array( 'readonlywarning', wfReadOnlyReason() ) );
+ } elseif ( $context->getUser()->isAnon() ) {
if ( $this->formtype != 'preview' ) {
- $wgOut->wrapWikiMsg( "<div id=\"mw-anon-edit-warning\">\n$1</div>", 'anoneditwarning' );
+ $out->wrapWikiMsg( "<div id=\"mw-anon-edit-warning\">\n$1</div>", 'anoneditwarning' );
} else {
- $wgOut->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>", 'anonpreviewwarning' );
+ $out->wrapWikiMsg( "<div id=\"mw-anon-preview-warning\">\n$1</div>", 'anonpreviewwarning' );
}
} else {
if ( $this->isCssJsSubpage ) {
# Check the skin exists
if ( $this->isWrongCaseCssJsPage ) {
- $wgOut->wrapWikiMsg( "<div class='error' id='mw-userinvalidcssjstitle'>\n$1\n</div>", array( 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() ) );
+ $out->wrapWikiMsg(
+ "<div class='error' id='mw-userinvalidcssjstitle'>\n$1\n</div>",
+ array( 'userinvalidcssjstitle', $title->getSkinFromCssJsSubpage() )
+ );
}
if ( $this->formtype !== 'preview' ) {
- if ( $this->isCssSubpage )
- $wgOut->wrapWikiMsg( "<div id='mw-usercssyoucanpreview'>\n$1\n</div>", array( 'usercssyoucanpreview' ) );
- if ( $this->isJsSubpage )
- $wgOut->wrapWikiMsg( "<div id='mw-userjsyoucanpreview'>\n$1\n</div>", array( 'userjsyoucanpreview' ) );
+ if ( $this->isCssSubpage ) {
+ $out->wrapWikiMsg( "<div id='mw-usercssyoucanpreview'>\n$1\n</div>", array( 'usercssyoucanpreview' ) );
+ }
+
+ if ( $this->isJsSubpage ) {
+ $out->wrapWikiMsg( "<div id='mw-userjsyoucanpreview'>\n$1\n</div>", array( 'userjsyoucanpreview' ) );
+ }
}
}
}
- if ( $this->mTitle->getNamespace() != NS_MEDIAWIKI && $this->mTitle->isProtected( 'edit' ) ) {
+ if ( $title->getNamespace() != NS_MEDIAWIKI && $title->isProtected( 'edit' ) ) {
# Is the title semi-protected?
- if ( $this->mTitle->isSemiProtected() ) {
+ if ( $title->isSemiProtected() ) {
$noticeMsg = 'semiprotectedpagewarning';
} else {
# Then it must be protected based on static groups (regular)
$noticeMsg = 'protectedpagewarning';
}
- LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '',
+ LogEventsList::showLogExtract( $out, 'protect', $title, '',
array( 'lim' => 1, 'msgKey' => array( $noticeMsg ) ) );
}
- if ( $this->mTitle->isCascadeProtected() ) {
+
+ if ( $title->isCascadeProtected() ) {
# Is this page under cascading protection from some source pages?
- list( $cascadeSources, /* $restrictions */ ) = $this->mTitle->getCascadeProtectionSources();
+ list( $cascadeSources, /* $restrictions */ ) = $title->getCascadeProtectionSources();
$notice = "<div class='mw-cascadeprotectedwarning'>\n$1\n";
$cascadeSourcesCount = count( $cascadeSources );
if ( $cascadeSourcesCount > 0 ) {
}
}
$notice .= '</div>';
- $wgOut->wrapWikiMsg( $notice, array( 'cascadeprotectedwarning', $cascadeSourcesCount ) );
+ $out->wrapWikiMsg( $notice, array( 'cascadeprotectedwarning', $cascadeSourcesCount ) );
}
- if ( !$this->mTitle->exists() && $this->mTitle->getRestrictions( 'create' ) ) {
- LogEventsList::showLogExtract( $wgOut, 'protect', $this->mTitle, '',
+
+ if ( !$title->exists() && $title->getRestrictions( 'create' ) ) {
+ LogEventsList::showLogExtract( $out, 'protect', $title, '',
array( 'lim' => 1,
'showIfEmpty' => false,
'msgKey' => array( 'titleprotectedwarning' ),
$this->kblength = (int)( strlen( $this->textbox1 ) / 1024 );
}
+ $lang = $context->getLanguage();
if ( $this->tooBig || $this->kblength > $wgMaxArticleSize ) {
- $wgOut->wrapWikiMsg( "<div class='error' id='mw-edit-longpageerror'>\n$1\n</div>",
- array( 'longpageerror', $wgLang->formatNum( $this->kblength ), $wgLang->formatNum( $wgMaxArticleSize ) ) );
+ $out->wrapWikiMsg( "<div class='error' id='mw-edit-longpageerror'>\n$1\n</div>",
+ array( 'longpageerror', $lang->formatNum( $this->kblength ), $lang->formatNum( $wgMaxArticleSize ) ) );
} else {
- if ( !wfMessage( 'longpage-hint' )->isDisabled() ) {
- $wgOut->wrapWikiMsg( "<div id='mw-edit-longpage-hint'>\n$1\n</div>",
- array( 'longpage-hint', $wgLang->formatSize( strlen( $this->textbox1 ) ), strlen( $this->textbox1 ) )
+ if ( !$context->msg( 'longpage-hint' )->isDisabled() ) {
+ $out->wrapWikiMsg( "<div id='mw-edit-longpage-hint'>\n$1\n</div>",
+ array( 'longpage-hint', $lang->formatSize( strlen( $this->textbox1 ) ), strlen( $this->textbox1 ) )
);
}
}
+
# Add header copyright warning
$this->showHeaderCopyrightWarning();
}
-
/**
* Standard summary input and label (wgSummary), abstracted so EditPage
* subclasses may reorganize the form.
* @return String
*/
protected function showSummaryInput( $isSubjectPreview, $summary = "" ) {
- global $wgOut, $wgContLang;
+ global $wgContLang;
# Add a class if 'missingsummary' is triggered to allow styling of the summary line
$summaryClass = $this->missingSummary ? 'mw-summarymissed' : 'mw-summary';
if ( $isSubjectPreview ) {
return;
}
}
+
+ $context = $this->getArticle()->getContext();
$summary = $wgContLang->recodeForEdit( $summary );
- $labelText = wfMessage( $isSubjectPreview ? 'subject' : 'summary' )->parse();
- list( $label, $input ) = $this->getSummaryInput( $summary, $labelText, array( 'class' => $summaryClass ), array() );
- $wgOut->addHTML( "{$label} {$input}" );
+ $labelText = $context->msg( $isSubjectPreview ? 'subject' : 'summary' )->parse();
+ list( $label, $input ) = $this->getSummaryInput(
+ $summary,
+ $labelText,
+ array( 'class' => $summaryClass ),
+ array()
+ );
+ $context->getOutput()->addHTML( "{$label} {$input}" );
}
/**
* @return String
*/
protected function getSummaryPreview( $isSubjectPreview, $summary = "" ) {
- if ( !$summary || ( !$this->preview && !$this->diff ) )
+ if ( !$summary || ( !$this->preview && !$this->diff ) ) {
return "";
+ }
global $wgParser;
- if ( $isSubjectPreview )
- $summary = wfMessage( 'newsectionsummary', $wgParser->stripSectionName( $summary ) )
+ $context = $this->getArticle()->getContext();
+ if ( $isSubjectPreview ) {
+ $summary = $context->msg( 'newsectionsummary', $wgParser->stripSectionName( $summary ) )
->inContentLanguage()->text();
+ }
$message = $isSubjectPreview ? 'subject-preview' : 'summary-preview';
- $summary = wfMessage( $message )->parse() . Linker::commentBlock( $summary, $this->mTitle, $isSubjectPreview );
+ $summary = $context->msg( $message )->parse() .
+ Linker::commentBlock( $summary, $this->getTitle(), $isSubjectPreview );
return Xml::tags( 'div', array( 'class' => 'mw-summary-preview' ), $summary );
}
protected function showFormBeforeText() {
- global $wgOut;
+ $out = $this->getArticle()->getContext()->getOutput();
$section = htmlspecialchars( $this->section );
- $wgOut->addHTML( <<<HTML
+
+ $out->addHTML( <<<HTML
<input type='hidden' value="{$section}" name="wpSection" />
<input type='hidden' value="{$this->starttime}" name="wpStarttime" />
<input type='hidden' value="{$this->edittime}" name="wpEdittime" />
HTML
);
- if ( !$this->checkUnicodeCompliantBrowser() )
- $wgOut->addHTML( Html::hidden( 'safemode', '1' ) );
+
+ if ( !$this->checkUnicodeCompliantBrowser() ) {
+ $out->addHTML( Html::hidden( 'safemode', '1' ) );
+ }
}
protected function showFormAfterText() {
- global $wgOut, $wgUser;
+ $out = $this->getArticle()->getContext()->getOutput();
+ $user = $this->getArticle()->getContext()->getUser();
/**
* To make it harder for someone to slip a user a page
* which submits an edit form to the wiki without their
* include the constant suffix to prevent editing from
* broken text-mangling proxies.
*/
- $wgOut->addHTML( "\n" . Html::hidden( "wpEditToken", $wgUser->getEditToken() ) . "\n" );
+ $out->addHTML( "\n" . Html::hidden( "wpEditToken", $user->getEditToken() ) . "\n" );
}
/**
$attribs = array( 'style' => 'display:none;' );
} else {
$classes = array(); // Textarea CSS
- if ( $this->mTitle->getNamespace() != NS_MEDIAWIKI && $this->mTitle->isProtected( 'edit' ) ) {
+ $title = $this->getTitle();
+
+ if ( $title->getNamespace() != NS_MEDIAWIKI && $title->isProtected( 'edit' ) ) {
# Is the title semi-protected?
- if ( $this->mTitle->isSemiProtected() ) {
+ if ( $title->isSemiProtected() ) {
$classes[] = 'mw-textarea-sprotected';
} else {
# Then it must be protected based on static groups (regular)
$classes[] = 'mw-textarea-protected';
}
# Is the title cascade-protected?
- if ( $this->mTitle->isCascadeProtected() ) {
+ if ( $title->isCascadeProtected() ) {
$classes[] = 'mw-textarea-cprotected';
}
}
}
protected function showTextbox( $text, $name, $customAttribs = array() ) {
- global $wgOut, $wgUser;
-
$wikitext = $this->safeUnicodeOutput( $text );
if ( strval( $wikitext ) !== '' ) {
// Ensure there's a newline at the end, otherwise adding lines
$wikitext .= "\n";
}
+ $context = $this->getArticle()->getContext();
+ $user = $context->getUser();
$attribs = $customAttribs + array(
'accesskey' => ',',
'id' => $name,
- 'cols' => $wgUser->getIntOption( 'cols' ),
- 'rows' => $wgUser->getIntOption( 'rows' ),
+ 'cols' => $user->getIntOption( 'cols' ),
+ 'rows' => $user->getIntOption( 'rows' ),
'style' => '' // avoid php notices when appending preferences (appending allows customAttribs['style'] to still work
);
- $pageLang = $this->mTitle->getPageLanguage();
+ $pageLang = $this->getTitle()->getPageLanguage();
$attribs['lang'] = $pageLang->getCode();
$attribs['dir'] = $pageLang->getDir();
- $wgOut->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
+ $context->getOutput()->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
}
protected function displayPreviewArea( $previewOutput, $isOnTop = false ) {
- global $wgOut;
$classes = array();
- if ( $isOnTop )
+
+ if ( $isOnTop ) {
$classes[] = 'ontop';
+ }
$attribs = array( 'id' => 'wikiPreview', 'class' => implode( ' ', $classes ) );
- if ( $this->formtype != 'preview' )
+ if ( $this->formtype != 'preview' ) {
$attribs['style'] = 'display: none;';
+ }
- $wgOut->addHTML( Xml::openElement( 'div', $attribs ) );
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
+ $out->addHTML( Xml::openElement( 'div', $attribs ) );
if ( $this->formtype == 'preview' ) {
$this->showPreview( $previewOutput );
}
- $wgOut->addHTML( '</div>' );
+ $out->addHTML( '</div>' );
if ( $this->formtype == 'diff' ) {
try {
$this->showDiff();
} catch ( MWContentSerializationException $ex ) {
- $msg = wfMessage( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
- $wgOut->addWikiText( '<div class="error">' . $msg->text() . '</div>');
+ $msg = $context->msg( 'content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+ $out->addWikiText( '<div class="error">' . $msg->text() . '</div>');
}
}
}
* @param $text String: the HTML to be output for the preview.
*/
protected function showPreview( $text ) {
- global $wgOut;
- if ( $this->mTitle->getNamespace() == NS_CATEGORY ) {
- $this->mArticle->openShowCategory();
+ if ( $this->getTitle()->getNamespace() == NS_CATEGORY ) {
+ $this->getArticle()->openShowCategory();
}
# This hook seems slightly odd here, but makes things more
# consistent for extensions.
- wfRunHooks( 'OutputPageBeforeHTML', array( &$wgOut, &$text ) );
- $wgOut->addHTML( $text );
- if ( $this->mTitle->getNamespace() == NS_CATEGORY ) {
- $this->mArticle->closeShowCategory();
+ $out = $this->getArticle()->getContext()->getOutput();
+ wfRunHooks( 'OutputPageBeforeHTML', array( &$out, &$text ) );
+
+ $out->addHTML( $text );
+
+ if ( $this->getTitle()->getNamespace() == NS_CATEGORY ) {
+ $this->getArticle()->closeShowCategory();
}
}
* save and then make a comparison.
*/
function showDiff() {
- global $wgUser, $wgContLang, $wgParser, $wgOut;
+ global $wgContLang;
$oldtitlemsg = 'currentrev';
# if message does not exist, show diff against the preloaded default
- if( $this->mTitle->getNamespace() == NS_MEDIAWIKI && !$this->mTitle->exists() ) {
- $oldtext = $this->mTitle->getDefaultMessageText();
+ $title = $this->getTitle();
+ if( $title->getNamespace() == NS_MEDIAWIKI && !$title->exists() ) {
+ $oldtext = $title->getDefaultMessageText();
if( $oldtext !== false ) {
$oldtitlemsg = 'defaultmessagetext';
$oldContent = $this->toEditContent( $oldtext );
$oldContent = null;
}
} else {
- $oldContent = $this->getOriginalContent();
+ $oldContent = $this->getCurrentContent();
}
$textboxContent = $this->toEditContent( $this->textbox1 );
- $newContent = $this->mArticle->replaceSectionContent(
- $this->section, $textboxContent,
- $this->summary, $this->edittime );
+ $newContent = $this->getArticle()->replaceSectionContent(
+ $this->section, $textboxContent,
+ $this->summary, $this->edittime
+ );
- ContentHandler::runLegacyHooks( 'EditPageGetDiffText', array( $this, &$newContent ) );
- wfRunHooks( 'EditPageGetDiffContent', array( $this, &$newContent ) );
+ $context = $this->getArticle()->getContext();
+ $user = $context->getUser();
- $popts = ParserOptions::newFromUserAndLang( $wgUser, $wgContLang );
- $newContent = $newContent->preSaveTransform( $this->mTitle, $wgUser, $popts );
+ if ( $newContent ) {
+ ContentHandler::runLegacyHooks( 'EditPageGetDiffText', array( $this, &$newContent ) );
+ wfRunHooks( 'EditPageGetDiffContent', array( $this, &$newContent ) );
+
+ $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
+ $newContent = $newContent->preSaveTransform( $this->getTitle(), $user, $popts );
+ }
if ( ( $oldContent && !$oldContent->isEmpty() ) || ( $newContent && !$newContent->isEmpty() ) ) {
- $oldtitle = wfMessage( $oldtitlemsg )->parse();
- $newtitle = wfMessage( 'yourtext' )->parse();
+ $oldtitle = $context->msg( $oldtitlemsg )->parse();
+ $newtitle = $context->msg( 'yourtext' )->parse();
- $de = $oldContent->getContentHandler()->createDifferenceEngine( $this->mArticle->getContext() );
+ if ( !$oldContent ) {
+ $oldContent = $newContent->getContentHandler()->makeEmptyContent();
+ }
+
+ if ( !$newContent ) {
+ $newContent = $oldContent->getContentHandler()->makeEmptyContent();
+ }
+
+ $de = $oldContent->getContentHandler()->createDifferenceEngine( $context );
$de->setContent( $oldContent, $newContent );
$difftext = $de->getDiff( $oldtitle, $newtitle );
$difftext = '';
}
- $wgOut->addHTML( '<div id="wikiDiff">' . $difftext . '</div>' );
+ $context->getOutput()->addHTML( '<div id="wikiDiff">' . $difftext . '</div>' );
}
/**
*/
protected function showHeaderCopyrightWarning() {
$msg = 'editpage-head-copy-warn';
- if ( !wfMessage( $msg )->isDisabled() ) {
- global $wgOut;
- $wgOut->wrapWikiMsg( "<div class='editpage-head-copywarn'>\n$1\n</div>",
- 'editpage-head-copy-warn' );
+ $context = $this->getArticle()->getContext();
+
+ if ( !$context->msg( $msg )->isDisabled() ) {
+ $context->getOutput()->wrapWikiMsg(
+ "<div class='editpage-head-copywarn'>\n$1\n</div>",
+ 'editpage-head-copy-warn'
+ );
}
}
*/
protected function showTosSummary() {
$msg = 'editpage-tos-summary';
- wfRunHooks( 'EditPageTosSummary', array( $this->mTitle, &$msg ) );
- if ( !wfMessage( $msg )->isDisabled() ) {
- global $wgOut;
- $wgOut->addHTML( '<div class="mw-tos-summary">' );
- $wgOut->addWikiMsg( $msg );
- $wgOut->addHTML( '</div>' );
+ wfRunHooks( 'EditPageTosSummary', array( $this->getTitle(), &$msg ) );
+
+ $context = $this->getArticle()->getContext();
+ if ( !$context->msg( $msg )->isDisabled() ) {
+ $out = $context->getOutput();
+
+ $out->addHTML( '<div class="mw-tos-summary">' );
+ $out->addWikiMsg( $msg );
+ $out->addHTML( '</div>' );
}
}
protected function showEditTools() {
- global $wgOut;
- $wgOut->addHTML( '<div class="mw-editTools">' .
- wfMessage( 'edittools' )->inContentLanguage()->parse() .
+ $context = $this->getArticle()->getContext();
+ $context->getOutput()->addHTML( '<div class="mw-editTools">' .
+ $context->msg( 'edittools' )->inContentLanguage()->parse() .
'</div>' );
}
* Renamed to getCopyrightWarning(), old name kept around for backwards compatibility
*/
protected function getCopywarn() {
- return self::getCopyrightWarning( $this->mTitle );
+ return self::getCopyrightWarning( $this->getTitle() );
}
public static function getCopyrightWarning( $title ) {
global $wgRightsText;
+
if ( $wgRightsText ) {
$copywarnMsg = array( 'copyrightwarning',
'[[' . wfMessage( 'copyrightpage' )->inContentLanguage()->text() . ']]',
}
protected function showStandardInputs( &$tabindex = 2 ) {
- global $wgOut;
- $wgOut->addHTML( "<div class='editOptions'>\n" );
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
+
+ $out->addHTML( "<div class='editOptions'>\n" );
if ( $this->section != 'new' ) {
$this->showSummaryInput( false, $this->summary );
- $wgOut->addHTML( $this->getSummaryPreview( false, $this->summary ) );
+ $out->addHTML( $this->getSummaryPreview( false, $this->summary ) );
}
$checkboxes = $this->getCheckboxes( $tabindex,
array( 'minor' => $this->minoredit, 'watch' => $this->watchthis ) );
- $wgOut->addHTML( "<div class='editCheckboxes'>" . implode( $checkboxes, "\n" ) . "</div>\n" );
+ $out->addHTML( "<div class='editCheckboxes'>" . implode( $checkboxes, "\n" ) . "</div>\n" );
// Show copyright warning.
- $wgOut->addWikiText( $this->getCopywarn() );
- $wgOut->addHTML( $this->editFormTextAfterWarn );
+ $out->addWikiText( $this->getCopywarn() );
+ $out->addHTML( $this->editFormTextAfterWarn );
- $wgOut->addHTML( "<div class='editButtons'>\n" );
- $wgOut->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" );
+ $out->addHTML( "<div class='editButtons'>\n" );
+ $out->addHTML( implode( $this->getEditButtons( $tabindex ), "\n" ) . "\n" );
$cancel = $this->getCancelLink();
if ( $cancel !== '' ) {
- $cancel .= wfMessage( 'pipe-separator' )->text();
+ $cancel .= $context->msg( 'pipe-separator' )->text();
}
- $edithelpurl = Skin::makeInternalOrExternalUrl( wfMessage( 'edithelppage' )->inContentLanguage()->text() );
+ $edithelpurl = Skin::makeInternalOrExternalUrl(
+ $context->msg( 'edithelppage' )->inContentLanguage()->text()
+ );
$edithelp = '<a target="helpwindow" href="' . $edithelpurl . '">' .
- wfMessage( 'edithelp' )->escaped() . '</a> ' .
- wfMessage( 'newwindow' )->parse();
- $wgOut->addHTML( " <span class='cancelLink'>{$cancel}</span>\n" );
- $wgOut->addHTML( " <span class='editHelp'>{$edithelp}</span>\n" );
- $wgOut->addHTML( "</div><!-- editButtons -->\n</div><!-- editOptions -->\n" );
+ $context->msg( 'edithelp' )->escaped() . '</a> ' .
+ $context->msg( 'newwindow' )->parse();
+ $out->addHTML( " <span class='cancelLink'>{$cancel}</span>\n" );
+ $out->addHTML( " <span class='editHelp'>{$edithelp}</span>\n" );
+ $out->addHTML( "</div><!-- editButtons -->\n</div><!-- editOptions -->\n" );
}
/**
* If you want to use another entry point to this function, be careful.
*/
protected function showConflict() {
- global $wgOut;
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
- if ( wfRunHooks( 'EditPageBeforeConflictDiff', array( &$this, &$wgOut ) ) ) {
- $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
+ if ( wfRunHooks( 'EditPageBeforeConflictDiff', array( &$this, &$out ) ) ) {
+ $out->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
$content1 = $this->toEditContent( $this->textbox1 );
$content2 = $this->toEditContent( $this->textbox2 );
$handler = ContentHandler::getForModelID( $this->contentModel );
- $de = $handler->createDifferenceEngine( $this->mArticle->getContext() );
+ $de = $handler->createDifferenceEngine( $context );
$de->setContent( $content2, $content1 );
$de->showDiff(
- wfMessage( 'yourtext' )->parse(),
- wfMessage( 'storedversion' )->text()
+ $context->msg( 'yourtext' )->parse(),
+ $context->msg( 'storedversion' )->text()
);
- $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
+ $out->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
$this->showTextbox2();
}
}
return Linker::linkKnown(
$this->getContextTitle(),
- wfMessage( 'cancel' )->parse(),
+ $this->getArticle()->getContext()->msg( 'cancel' )->parse(),
array( 'id' => 'mw-editform-cancel' ),
$cancelParams
);
$this->deletedSinceEdit = false;
- if ( $this->mTitle->isDeletedQuick() ) {
+ if ( $this->getTitle()->isDeletedQuick() ) {
$this->lastDelete = $this->getLastDelete();
if ( $this->lastDelete ) {
$deleteTime = wfTimestamp( TS_MW, $this->lastDelete->log_timestamp );
protected function getLastDelete() {
$dbr = wfGetDB( DB_SLAVE );
+ $title = $this->getTitle();
+
$data = $dbr->selectRow(
array( 'logging', 'user' ),
array( 'log_type',
'log_params',
'log_deleted',
'user_name' ),
- array( 'log_namespace' => $this->mTitle->getNamespace(),
- 'log_title' => $this->mTitle->getDBkey(),
+ array( 'log_namespace' => $title->getNamespace(),
+ 'log_title' => $title->getDBkey(),
'log_type' => 'delete',
'log_action' => 'delete',
'user_id=log_user' ),
);
// Quick paranoid permission checks...
if ( is_object( $data ) ) {
- if ( $data->log_deleted & LogPage::DELETED_USER )
- $data->user_name = wfMessage( 'rev-deleted-user' )->escaped();
- if ( $data->log_deleted & LogPage::DELETED_COMMENT )
- $data->log_comment = wfMessage( 'rev-deleted-comment' )->escaped();
+ $context = $this->getArticle()->getContext();
+ if ( $data->log_deleted & LogPage::DELETED_USER ) {
+ $data->user_name = $context->msg( 'rev-deleted-user' )->escaped();
+ }
+
+ if ( $data->log_deleted & LogPage::DELETED_COMMENT ) {
+ $data->log_comment = $context->msg( 'rev-deleted-comment' )->escaped();
+ }
}
+
return $data;
}
* @return string
*/
function getPreviewText() {
- global $wgOut, $wgUser, $wgParser, $wgRawHtml, $wgLang;
+ global $wgRawHtml;
wfProfileIn( __METHOD__ );
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
+ $title = $this->getTitle();
+
if ( $wgRawHtml && !$this->mTokenOk ) {
// Could be an offsite preview attempt. This is very unsafe if
// HTML is enabled, as it could be an attack.
// Do not put big scary notice, if previewing the empty
// string, which happens when you initially edit
// a category page, due to automatic preview-on-open.
- $parsedNote = $wgOut->parse( "<div class='previewnote'>" .
- wfMessage( 'session_fail_preview_html' )->text() . "</div>", true, /* interface */true );
+ $parsedNote = $out->parse( "<div class='previewnote'>" .
+ $context->msg( 'session_fail_preview_html' )->text() .
+ "</div>", true, /* interface */true );
}
wfProfileOut( __METHOD__ );
return $parsedNote;
if ( $this->mTriedSave && !$this->mTokenOk ) {
if ( $this->mTokenOkExceptSuffix ) {
- $note = wfMessage( 'token_suffix_mismatch' )->plain() ;
+ $note = $context->msg( 'token_suffix_mismatch' )->plain() ;
} else {
- $note = wfMessage( 'session_fail_preview' )->plain() ;
+ $note = $context->msg( 'session_fail_preview' )->plain() ;
}
} elseif ( $this->incompleteForm ) {
- $note = wfMessage( 'edit_form_incomplete' )->plain() ;
+ $note = $context->msg( 'edit_form_incomplete' )->plain() ;
} else {
- $note = wfMessage( 'previewnote' )->plain() .
- ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
+ $note = $context->msg( 'previewnote' )->plain() .
+ ' [[#' . self::EDITFORM_ID . '|' . $context->getLanguage()->getArrow() . ' ' .
+ $context->msg( 'continue-editing' )->text() . ']]';
}
- $parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
+ $parserOptions = $this->getArticle()->makeParserOptions( $context );
$parserOptions->setEditSection( false );
$parserOptions->setIsPreview( true );
$parserOptions->setIsSectionPreview( !is_null($this->section) && $this->section !== '' );
# don't parse non-wikitext pages, show message about preview
- if ( $this->mTitle->isCssJsSubpage() || $this->mTitle->isCssOrJsPage() ) {
- if( $this->mTitle->isCssJsSubpage() ) {
+ if ( $title->isCssJsSubpage() || $title->isCssOrJsPage() ) {
+ if( $title->isCssJsSubpage() ) {
$level = 'user';
- } elseif( $this->mTitle->isCssOrJsPage() ) {
+ } elseif( $title->isCssOrJsPage() ) {
$level = 'site';
} else {
$level = false;
# Used messages to make sure grep find them:
# Messages: usercsspreview, userjspreview, sitecsspreview, sitejspreview
if( $level && $format ) {
- $note = "<div id='mw-{$level}{$format}preview'>" . wfMessage( "{$level}{$format}preview" )->text() . "</div>";
- } else {
- $note = wfMessage( 'previewnote' )->text() ;
+ $note = "<div id='mw-{$level}{$format}preview'>" .
+ $context->msg( "{$level}{$format}preview" )->text() .
+ "</div>";
}
- } else {
- $note = wfMessage( 'previewnote' )->text() ;
}
$rt = $content->getRedirectChain();
if ( $rt ) {
- $previewHTML = $this->mArticle->viewRedirect( $rt, false );
+ $previewHTML = $this->getArticle()->viewRedirect( $rt, false );
} else {
-
# If we're adding a comment, we need to show the
# summary as the headline
if ( $this->section === "new" && $this->summary !== "" ) {
# For CSS/JS pages, we should have called the ShowRawCssJs hook here.
# But it's now deprecated, so never mind
- $content = $content->preSaveTransform( $this->mTitle, $wgUser, $parserOptions );
- $parserOutput = $content->getParserOutput( $this->getArticle()->getTitle(), null, $parserOptions );
+ $content = $content->preSaveTransform( $title, $context->getUser(), $parserOptions );
+ $parserOutput = $content->getParserOutput( $title, null, $parserOptions );
$previewHTML = $parserOutput->getText();
$this->mParserOutput = $parserOutput;
- $wgOut->addParserOutputNoText( $parserOutput );
+ $out->addParserOutputNoText( $parserOutput );
if ( count( $parserOutput->getWarnings() ) ) {
$note .= "\n\n" . implode( "\n\n", $parserOutput->getWarnings() );
}
}
} catch ( MWContentSerializationException $ex ) {
- $m = wfMessage('content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
+ $m = $context->msg('content-failed-to-parse', $this->contentModel, $this->contentFormat, $ex->getMessage() );
$note .= "\n\n" . $m->parse();
$previewHTML = '';
}
if ( $this->isConflict ) {
- $conflict = '<h2 id="mw-previewconflict">' . wfMessage( 'previewconflict' )->escaped() . "</h2>\n";
+ $conflict = '<h2 id="mw-previewconflict">' . $context->msg( 'previewconflict' )->escaped() . "</h2>\n";
} else {
$conflict = '<hr />';
}
$previewhead = "<div class='previewnote'>\n" .
- '<h2 id="mw-previewheader">' . wfMessage( 'preview' )->escaped() . "</h2>" .
- $wgOut->parse( $note, true, /* interface */true ) . $conflict . "</div>\n";
+ '<h2 id="mw-previewheader">' . $context->msg( 'preview' )->escaped() . "</h2>" .
+ $out->parse( $note, true, /* interface */true ) . $conflict . "</div>\n";
- $pageLang = $this->mTitle->getPageLanguage();
+ $pageLang = $title->getPageLanguage();
$attribs = array( 'lang' => $pageLang->getCode(), 'dir' => $pageLang->getDir(),
'class' => 'mw-content-' . $pageLang->getDir() );
$previewHTML = Html::rawElement( 'div', $attribs, $previewHTML );
}
return $templates;
} else {
- return $this->mTitle->getTemplateLinksFrom();
+ return $this->getTitle()->getTemplateLinksFrom();
}
}
* @return array
*/
public function getCheckboxes( &$tabindex, $checked ) {
- global $wgUser;
-
$checkboxes = array();
+ $context = $this->getArticle()->getContext();
+ $user = $context->getUser();
// don't show the minor edit checkbox if it's a new page or section
if ( !$this->isNew ) {
$checkboxes['minor'] = '';
- $minorLabel = wfMessage( 'minoredit' )->parse();
- if ( $wgUser->isAllowed( 'minoredit' ) ) {
+ $minorLabel = $context->msg( 'minoredit' )->parse();
+ if ( $user->isAllowed( 'minoredit' ) ) {
$attribs = array(
'tabindex' => ++$tabindex,
- 'accesskey' => wfMessage( 'accesskey-minoredit' )->text(),
+ 'accesskey' => $context->msg( 'accesskey-minoredit' )->text(),
'id' => 'wpMinoredit',
);
$checkboxes['minor'] =
}
}
- $watchLabel = wfMessage( 'watchthis' )->parse();
+ $watchLabel = $context->msg( 'watchthis' )->parse();
$checkboxes['watch'] = '';
- if ( $wgUser->isLoggedIn() ) {
+
+ if ( $user->isLoggedIn() ) {
$attribs = array(
'tabindex' => ++$tabindex,
- 'accesskey' => wfMessage( 'accesskey-watch' )->text(),
+ 'accesskey' => $context->msg( 'accesskey-watch' )->text(),
'id' => 'wpWatchthis',
);
$checkboxes['watch'] =
Xml::expandAttributes( array( 'title' => Linker::titleAttrib( 'watch', 'withaccess' ) ) ) .
">{$watchLabel}</label>";
}
+
wfRunHooks( 'EditPageBeforeEditChecks', array( &$this, &$checkboxes, &$tabindex ) );
+
return $checkboxes;
}
*/
public function getEditButtons( &$tabindex ) {
$buttons = array();
+ $context = $this->getArticle()->getContext();
$temp = array(
'id' => 'wpSave',
'name' => 'wpSave',
'type' => 'submit',
'tabindex' => ++$tabindex,
- 'value' => wfMessage( 'savearticle' )->text(),
- 'accesskey' => wfMessage( 'accesskey-save' )->text(),
- 'title' => wfMessage( 'tooltip-save' )->text() . ' [' . wfMessage( 'accesskey-save' )->text() . ']',
+ 'value' => $context->msg( 'savearticle' )->text(),
+ 'accesskey' => $context->msg( 'accesskey-save' )->text(),
+ 'title' => $context->msg( 'tooltip-save' )->text() . ' [' . $context->msg( 'accesskey-save' )->text() . ']',
);
$buttons['save'] = Xml::element( 'input', $temp, '' );
'name' => 'wpPreview',
'type' => 'submit',
'tabindex' => $tabindex,
- 'value' => wfMessage( 'showpreview' )->text(),
- 'accesskey' => wfMessage( 'accesskey-preview' )->text(),
- 'title' => wfMessage( 'tooltip-preview' )->text() . ' [' . wfMessage( 'accesskey-preview' )->text() . ']',
+ 'value' => $context->msg( 'showpreview' )->text(),
+ 'accesskey' => $context->msg( 'accesskey-preview' )->text(),
+ 'title' => $context->msg( 'tooltip-preview' )->text() . ' [' . $context->msg( 'accesskey-preview' )->text() . ']',
);
$buttons['preview'] = Xml::element( 'input', $temp, '' );
$buttons['live'] = '';
'name' => 'wpDiff',
'type' => 'submit',
'tabindex' => ++$tabindex,
- 'value' => wfMessage( 'showdiff' )->text(),
- 'accesskey' => wfMessage( 'accesskey-diff' )->text(),
- 'title' => wfMessage( 'tooltip-diff' )->text() . ' [' . wfMessage( 'accesskey-diff' )->text() . ']',
+ 'value' => $context->msg( 'showdiff' )->text(),
+ 'accesskey' => $context->msg( 'accesskey-diff' )->text(),
+ 'title' => $context->msg( 'tooltip-diff' )->text() . ' [' . $context->msg( 'accesskey-diff' )->text() . ']',
);
$buttons['diff'] = Xml::element( 'input', $temp, '' );
* initialization, so check whether that's a problem.
*/
function livePreview() {
- global $wgOut;
- $wgOut->disable();
+ $this->getArticle()->getContext()->getOutput()->disable();
header( 'Content-type: text/xml; charset=utf-8' );
header( 'Cache-control: no-cache' );
*/
function blockedPage() {
wfDeprecated( __METHOD__, '1.19' );
- global $wgUser;
-
- throw new UserBlockedError( $wgUser->getBlock() );
+ throw new UserBlockedError( $this->getArticle()->getContext()->getUser()->getBlock() );
}
/**
*/
function noCreatePermission() {
wfDeprecated( __METHOD__, '1.19' );
- $permission = $this->mTitle->isTalkPage() ? 'createtalk' : 'createpage';
+ $permission = $this->getTitle()->isTalkPage() ? 'createtalk' : 'createpage';
throw new PermissionsError( $permission );
}
* they have attempted to edit a nonexistent section.
*/
function noSuchSectionPage() {
- global $wgOut;
+ $context = $this->getArticle()->getContext();
+ $out = $context->getOutput();
- $wgOut->prepareErrorPage( wfMessage( 'nosuchsectiontitle' ) );
+ $out->prepareErrorPage( $context->msg( 'nosuchsectiontitle' ) );
- $res = wfMessage( 'nosuchsectiontext', $this->section )->parseAsBlock();
+ $res = $context->msg( 'nosuchsectiontext', $this->section )->parseAsBlock();
wfRunHooks( 'EditPageNoSuchSection', array( &$this, &$res ) );
- $wgOut->addHTML( $res );
- $wgOut->returnToMain( false, $this->mTitle );
+ $out->addHTML( $res );
+ $out->returnToMain( false, $this->getTitle() );
}
/**
* Produce the stock "your edit contains spam" page
*
- * @param $match string Text which triggered one or more filters
+ * @param $match string|bool Text which triggered one or more filters
* @deprecated since 1.17 Use method spamPageWithContent() instead
*/
static function spamPage( $match = false ) {
* @param $match string|Array|bool Text (or array of texts) which triggered one or more filters
*/
public function spamPageWithContent( $match = false ) {
- global $wgOut, $wgLang;
$this->textbox2 = $this->textbox1;
+ $context = $this->getArticle()->getContext();
if( is_array( $match ) ){
- $match = $wgLang->listToText( $match );
+ $match = $context->getLanguage()->listToText( $match );
}
- $wgOut->prepareErrorPage( wfMessage( 'spamprotectiontitle' ) );
- $wgOut->addHTML( '<div id="spamprotected">' );
- $wgOut->addWikiMsg( 'spamprotectiontext' );
+ $out = $context->getOutput();
+ $out->prepareErrorPage( $context->msg( 'spamprotectiontitle' ) );
+
+ $out->addHTML( '<div id="spamprotected">' );
+ $out->addWikiMsg( 'spamprotectiontext' );
if ( $match ) {
- $wgOut->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
+ $out->addWikiMsg( 'spamprotectionmatch', wfEscapeWikiText( $match ) );
}
- $wgOut->addHTML( '</div>' );
+ $out->addHTML( '</div>' );
- $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
+ $out->wrapWikiMsg( '<h2>$1</h2>', "yourdiff" );
$this->showDiff();
- $wgOut->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
+ $out->wrapWikiMsg( '<h2>$1</h2>', "yourtext" );
$this->showTextbox2();
- $wgOut->addReturnTo( $this->getContextTitle(), array( 'action' => 'edit' ) );
+ $out->addReturnTo( $this->getContextTitle(), array( 'action' => 'edit' ) );
}
/**
*
* @file
*/
-
+
/**
- * Base class for general text storage via the "object" flag in old_flags, or
- * two-part external storage URLs. Used for represent efficient concatenated
+ * Base class for general text storage via the "object" flag in old_flags, or
+ * two-part external storage URLs. Used for represent efficient concatenated
* storage, and migration-related pointer objects.
*/
interface HistoryBlob
* @return bool
*/
public function isHappy() {
- return $this->mSize < $this->mMaxSize
+ return $this->mSize < $this->mMaxSize
&& count( $this->mItems ) < $this->mMaxCount;
}
}
/** Total uncompressed size */
var $mSize = 0;
- /**
- * Array of diffs. If a diff D from A to B is notated D = B - A, and Z is
+ /**
+ * Array of diffs. If a diff D from A to B is notated D = B - A, and Z is
* an empty string:
*
* { item[map[i]] - item[map[i-1]] where i > 0
- * diff[i] = {
+ * diff[i] = {
* { item[map[i]] - Z where i = 0
*/
var $mDiffs;
* The maximum number of text items before the object becomes sad
*/
var $mMaxCount = 100;
-
+
/** Constants from xdiff.h */
const XDL_BDOP_INS = 1;
const XDL_BDOP_CPY = 2;
* @throws MWException
*/
function compress() {
- if ( !function_exists( 'xdiff_string_rabdiff' ) ){
+ if ( !function_exists( 'xdiff_string_rabdiff' ) ){
throw new MWException( "Need xdiff 1.5+ support to write DiffHistoryBlob\n" );
}
if ( isset( $this->mDiffs ) ) {
# Pure PHP implementation
$header = unpack( 'Vofp/Vcsize', substr( $diff, 0, 8 ) );
-
+
# Check the checksum if hash/mhash is available
$ofp = $this->xdiffAdler32( $base );
if ( $ofp !== false && $ofp !== substr( $diff, 0, 4 ) ) {
wfDebug( __METHOD__. ": incorrect base length\n" );
return false;
}
-
+
$p = 8;
$out = '';
while ( $p < strlen( $diff ) ) {
}
/**
- * Compute a binary "Adler-32" checksum as defined by LibXDiff, i.e. with
+ * Compute a binary "Adler-32" checksum as defined by LibXDiff, i.e. with
* the bytes backwards and initialised with 0 instead of 1. See bug 34428.
*
* Returns false if no hashing library is available
if ( $init === null ) {
$init = str_repeat( "\xf0", 205 ) . "\xee" . str_repeat( "\xf0", 67 ) . "\x02";
}
- // The real Adler-32 checksum of $init is zero, so it initialises the
- // state to zero, as it is at the start of LibXDiff's checksum
+ // The real Adler-32 checksum of $init is zero, so it initialises the
+ // state to zero, as it is at the start of LibXDiff's checksum
// algorithm. Appending the subject string then simulates LibXDiff.
if ( function_exists( 'hash' ) ) {
$hash = hash( 'adler32', $init . $s, true );
if ( isset( $info['base'] ) ) {
// Old format
$this->mDiffMap = range( 0, count( $this->mDiffs ) - 1 );
- array_unshift( $this->mDiffs,
+ array_unshift( $this->mDiffs,
pack( 'VVCV', 0, 0, self::XDL_BDOP_INSB, strlen( $info['base'] ) ) .
$info['base'] );
} else {
* @return bool
*/
function isHappy() {
- return $this->mSize < $this->mMaxSize
+ return $this->mSize < $this->mMaxSize
&& count( $this->mItems ) < $this->mMaxCount;
}
'class', // html4, html5
'accesskey', // as of html5, multiple space-separated values allowed
// html4-spec doesn't document rel= as space-separated
- // but has been used like that and is now documented as such
+ // but has been used like that and is now documented as such
// in the html5-spec.
'rel',
);
// values. Implode/explode to get those into the main array as well.
if ( is_array( $value ) ) {
// If input wasn't an array, we can skip this step
-
$newValue = array();
foreach ( $value as $k => $v ) {
if ( is_string( $v ) ) {
# @todo FIXME: Is this really true?
$map['<'] = '<';
}
-
$ret .= " $key=$quote" . strtr( $value, $map ) . $quote;
}
}
}
/**
- * Sets a cookie. Used before a request to set up any individual
- * cookies. Used internally after a request to parse the
+ * Sets a cookie. Used before a request to set up any individual
+ * cookies. Used internally after a request to parse the
* Set-Cookie headers.
* @see Cookie::set
* @param $name
* http://www.gnu.org/copyleft/gpl.html
*
* @file
- * @author Antoine Musso <hashar at free dot fr>, Aaron Schulz
+ * @author Antoine Musso "<hashar at free dot fr>", Aaron Schulz
*/
// Some regex definition to "play" with IP address and IP address blocks
/**
* Some functions to help implement an external link filter for spam control.
- *
+ *
* @todo implement the filter. Currently these are just some functions to help
* maintenance/cleanupSpam.php remove links to a single specified domain. The
* next thing is to implement functions for checking a given page against a big
// Reverse the labels in the hostname, convert to lower case
// For emails reverse domainpart only
if ( $prot == 'mailto:' && strpos($host, '@') ) {
- // complete email adress
+ // complete email adress
$mailparts = explode( '@', $host );
$domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
$host = $domainpart . '@' . $mailparts[0];
$like = array( "$prot$host", $db->anyString() );
} elseif ( $prot == 'mailto:' ) {
// domainpart of email adress only. do not add '.'
- $host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
- $like = array( "$prot$host", $db->anyString() );
+ $host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
+ $like = array( "$prot$host", $db->anyString() );
} else {
- $host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
+ $host = strtolower( implode( '.', array_reverse( explode( '.', $host ) ) ) );
if ( substr( $host, -1, 1 ) !== '.' ) {
$host .= '.';
}
// check if the user has an edit
$attribs = array();
if ( $redContribsWhenNoEdits ) {
- $count = !is_null( $edits ) ? $edits : User::edits( $userId );
- if ( $count == 0 ) {
+ if ( intval( $edits ) === 0 && $edits !== 0 ) {
+ $user = User::newFromId( $userId );
+ $edits = $user->getEditCount();
+ }
+ if ( $edits === 0 ) {
$attribs['class'] = 'new';
}
}
*/
public static function buildRollbackLink( $rev, IContextSource $context = null ) {
global $wgShowRollbackEditCount, $wgMiserMode;
-
+
// To config which pages are effected by miser mode
$disableRollbackEditCountSpecialPage = array( 'Recentchanges', 'Watchlist' );
array( 'action' => 'edit' )
);
}
- $outText .= '<li>' . self::link( $titleObj ) . ' (' . $editLink . ') ' . $protected . '</li>';
+ $outText .= '<li>' . self::link( $titleObj )
+ . wfMessage( 'word-separator' )->escaped()
+ . wfMessage( 'parentheses' )->rawParams( $editLink )->escaped()
+ . wfMessage( 'word-separator' )->escaped()
+ . $protected . '</li>';
}
$outText .= '</ul>';
}
*/
static function makeBrokenLink( $title, $text = '', $query = '', $trail = '' ) {
wfDeprecated( __METHOD__, '1.16' );
-
+
$nt = Title::newFromText( $title );
if ( $nt instanceof Title ) {
return self::makeBrokenLinkObj( $nt, $text, $query, $trail );
}
/**
- * @deprecated since 1.16 Use link()
+ * @deprecated since 1.16 Use link(); warnings since 1.21
*
* Make a link for a title which may or may not be in the database. If you need to
* call this lots of times, pre-fill the link cache with a LinkBatch, otherwise each
* @return string
*/
static function makeLinkObj( $nt, $text = '', $query = '', $trail = '', $prefix = '' ) {
- # wfDeprecated( __METHOD__, '1.16' ); // See r105985 and it's revert. Somewhere still used.
-
+ wfDeprecated( __METHOD__, '1.21' );
+
wfProfileIn( __METHOD__ );
$query = wfCgiToArray( $query );
list( $inside, $trail ) = self::splitTrail( $trail );
}
/**
- * @deprecated since 1.16 Use link()
+ * @deprecated since 1.16 Use link(); warnings since 1.21
*
* Make a link for a title which definitely exists. This is faster than makeLinkObj because
* it doesn't have to do a database query. It's also valid for interwiki titles and special
static function makeKnownLinkObj(
$title, $text = '', $query = '', $trail = '', $prefix = '' , $aprops = '', $style = ''
) {
- # wfDeprecated( __METHOD__, '1.16' ); // See r105985 and it's revert. Somewhere still used.
-
+ wfDeprecated( __METHOD__, '1.21' );
+
wfProfileIn( __METHOD__ );
if ( $text == '' ) {
*/
static function makeBrokenLinkObj( $title, $text = '', $query = '', $trail = '', $prefix = '' ) {
wfDeprecated( __METHOD__, '1.16' );
-
+
wfProfileIn( __METHOD__ );
list( $inside, $trail ) = self::splitTrail( $trail );
*/
static function makeColouredLinkObj( $nt, $colour, $text = '', $query = '', $trail = '', $prefix = '' ) {
wfDeprecated( __METHOD__, '1.16' );
-
+
if ( $colour != '' ) {
$style = self::getInternalLinkAttributesObj( $nt, $text, $colour );
} else {
*
* @return string
*/
- function getVariableRegex() {
+ function getVariableRegex() {
if ( $this->mVariableRegex == '' ) {
$this->initRegex();
}
} elseif ( !is_array( $param ) ) {
return array( 'before', $param );
} else {
- throw new MWException( "Invalid message parameter" );
+ throw new MWException( "Invalid message parameter: " . serialize( $param ) );
}
}
* This is used as a fallback to mime.types files.
* An extensive list of well known mime types is provided by
* the file mime.types in the includes directory.
- *
+ *
* This list concatenated with mime.types is used to create a mime <-> ext
* map. Each line contains a mime type followed by a space separated list of
- * extensions. If multiple extensions for a single mime type exist or if
+ * extensions. If multiple extensions for a single mime type exist or if
* multiple mime types exist for a single extension then in most cases
* MediaWiki assumes that the first extension following the mime type is the
* canonical extension, and the first time a mime type appears for a certain
* extension is considered the canonical mime type.
- *
+ *
* (Note that appending $wgMimeTypeFile to the end of MM_WELL_KNOWN_MIME_TYPES
- * sucks because you can't redefine canonical types. This could be fixed by
+ * sucks because you can't redefine canonical types. This could be fixed by
* appending MM_WELL_KNOWN_MIME_TYPES behind $wgMimeTypeFile, but who knows
* what will break? In practice this probably isn't a problem anyway -- Bryan)
*/
image/gif gif
image/jpeg jpeg jpg jpe
image/png png
-image/svg+xml svg
+image/svg+xml svg
image/svg svg
image/tiff tiff tif
image/vnd.djvu djvu
return self::$instance;
}
- /**
- * Returns a list of file extensions for a given mime type as a space
+ /**
+ * Returns a list of file extensions for a given mime type as a space
* separated string or null if the mime type was unrecognized. Resolves
* mime type aliases.
- *
+ *
* @param $mime string
* @return string|null
*/
return null;
}
- /**
- * Returns a list of mime types for a given file extension as a space
+ /**
+ * Returns a list of mime types for a given file extension as a space
* separated string or null if the extension was unrecognized.
- *
+ *
* @param $ext string
* @return string|null
*/
return $r;
}
- /**
+ /**
* Returns a single mime type for a given file extension or null if unknown.
* This is always the first type from the list returned by getTypesForExtension($ext).
- *
+ *
* @param $ext string
* @return string|null
*/
}
- /**
- * Tests if the extension matches the given mime type. Returns true if a
- * match was found, null if the mime type is unknown, and false if the
+ /**
+ * Tests if the extension matches the given mime type. Returns true if a
+ * match was found, null if the mime type is unknown, and false if the
* mime type is known but no matches where found.
- *
+ *
* @param $extension string
* @param $mime string
* @return bool|null
$ext = explode( ' ', $ext );
$extension = strtolower( $extension );
- return in_array( $extension, $ext );
+ return in_array( $extension, $ext );
}
- /**
- * Returns true if the mime type is known to represent an image format
+ /**
+ * Returns true if the mime type is known to represent an image format
* supported by the PHP GD library.
*
* @param $mime string
- *
+ *
* @return bool
*/
public function isPHPImageType( $mime ) {
return in_array( strtolower( $extension ), $types );
}
- /**
+ /**
* Improves a mime type using the file extension. Some file formats are very generic,
- * so their mime type is not very meaningful. A more useful mime type can be derived
- * by looking at the file extension. Typically, this method would be called on the
+ * so their mime type is not very meaningful. A more useful mime type can be derived
+ * by looking at the file extension. Typically, this method would be called on the
* result of guessMimeType().
- *
+ *
* Currently, this method does the following:
*
* If $mime is "unknown/unknown" and isRecognizableExtension( $ext ) returns false,
- * return the result of guessTypesForExtension($ext).
+ * return the result of guessTypesForExtension($ext).
*
* If $mime is "application/x-opc+zip" and isMatchingExtension( $ext, $mime )
- * gives true, return the result of guessTypesForExtension($ext).
+ * gives true, return the result of guessTypesForExtension($ext).
*
* @param $mime String: the mime type, typically guessed from a file's content.
* @param $ext String: the file extension, as taken from the file name
public function improveTypeFromExtension( $mime, $ext ) {
if ( $mime === 'unknown/unknown' ) {
if ( $this->isRecognizableExtension( $ext ) ) {
- wfDebug( __METHOD__. ': refusing to guess mime type for .' .
+ wfDebug( __METHOD__. ': refusing to guess mime type for .' .
"$ext file, we should have recognized it\n" );
} else {
- // Not something we can detect, so simply
+ // Not something we can detect, so simply
// trust the file extension
$mime = $this->guessTypesForExtension( $ext );
}
// find the proper mime type for that file extension
$mime = $this->guessTypesForExtension( $ext );
} else {
- wfDebug( __METHOD__. ": refusing to guess better type for $mime file, " .
+ wfDebug( __METHOD__. ": refusing to guess better type for $mime file, " .
".$ext is not a known OPC extension.\n" );
$mime = 'application/zip';
}
return $mime;
}
- /**
- * Mime type detection. This uses detectMimeType to detect the mime type
- * of the file, but applies additional checks to determine some well known
- * file formats that may be missed or misinterpreter by the default mime
- * detection (namely XML based formats like XHTML or SVG, as well as ZIP
+ /**
+ * Mime type detection. This uses detectMimeType to detect the mime type
+ * of the file, but applies additional checks to determine some well known
+ * file formats that may be missed or misinterpreter by the default mime
+ * detection (namely XML based formats like XHTML or SVG, as well as ZIP
* based formats like OPC/ODF files).
*
* @param $file String: the file to check
* @param $ext Mixed: the file extension, or true (default) to extract it from the filename.
- * Set it to false to ignore the extension. DEPRECATED! Set to false, use
+ * Set it to false to ignore the extension. DEPRECATED! Set to false, use
* improveTypeFromExtension($mime, $ext) later to improve mime type.
*
* @return string the mime type of $file
// @todo FIXME: Shouldn't this be rb?
$f = fopen( $file, 'rt' );
wfRestoreWarnings();
-
+
if( !$f ) {
return 'unknown/unknown';
}
return false;
}
-
+
/**
* Detect application-specific file type of a given ZIP file from its
* header data. Currently works for OpenDocument and OpenXML types...
* @param $header String: some reasonably-sized chunk of file header
* @param $tail String: the tail of the file
* @param $ext Mixed: the file extension, or true to extract it from the filename.
- * Set it to false (default) to ignore the extension. DEPRECATED! Set to false,
+ * Set it to false (default) to ignore the extension. DEPRECATED! Set to false,
* use improveTypeFromExtension($mime, $ext) later to improve mime type.
*
* @return string
wfDebug( __METHOD__.": detected $mime from ZIP archive\n" );
} elseif ( preg_match( $openxmlRegex, substr( $header, 30 ) ) ) {
$mime = "application/x-opc+zip";
- # TODO: remove the block below, as soon as improveTypeFromExtension is used everywhere
- if ( $ext !== true && $ext !== false ) {
+ # TODO: remove the block below, as soon as improveTypeFromExtension is used everywhere
+ if ( $ext !== true && $ext !== false ) {
/** This is the mode used by getPropsFromPath
* These mime's are stored in the database, where we don't really want
* x-opc+zip, because we use it only for internal purposes
}
}
wfDebug( __METHOD__.": detected an Open Packaging Conventions archive: $mime\n" );
- } elseif ( substr( $header, 0, 8 ) == "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1" &&
+ } elseif ( substr( $header, 0, 8 ) == "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1" &&
($headerpos = strpos( $tail, "PK\x03\x04" ) ) !== false &&
preg_match( $openxmlRegex, substr( $tail, $headerpos + 30 ) ) ) {
if ( substr( $header, 512, 4) == "\xEC\xA5\xC1\x00" ) {
$mime = "application/msword";
- }
+ }
switch( substr( $header, 512, 6) ) {
case "\xEC\xA5\xC1\x00\x0E\x00":
case "\xEC\xA5\xC1\x00\x1C\x00":
return $mime;
}
- /**
- * Internal mime type detection. Detection is done using an external
- * program, if $wgMimeDetectorCommand is set. Otherwise, the fileinfo
- * extension and mime_content_type are tried (in this order), if they
- * are available. If the dections fails and $ext is not false, the mime
+ /**
+ * Internal mime type detection. Detection is done using an external
+ * program, if $wgMimeDetectorCommand is set. Otherwise, the fileinfo
+ * extension and mime_content_type are tried (in this order), if they
+ * are available. If the dections fails and $ext is not false, the mime
* type is guessed from the file extension, using guessTypesForExtension.
- *
- * If the mime type is still unknown, getimagesize is used to detect the
- * mime type if the file is an image. If no mime type can be determined,
+ *
+ * If the mime type is still unknown, getimagesize is used to detect the
+ * mime type if the file is an image. If no mime type can be determined,
* this function returns 'unknown/unknown'.
*
* @param $file String: the file to check
* @param $ext Mixed: the file extension, or true (default) to extract it from the filename.
- * Set it to false to ignore the extension. DEPRECATED! Set to false, use
+ * Set it to false to ignore the extension. DEPRECATED! Set to false, use
* improveTypeFromExtension($mime, $ext) later to improve mime type.
*
* @return string the mime type of $file
return $type;
}
- /**
+ /**
* Returns a media code matching the given mime type or file extension.
* File extensions are represented by a string starting with a dot (.) to
* distinguish them from mime types.
* @return int|string
*/
function findMediaType( $extMime ) {
- if ( strpos( $extMime, '.' ) === 0 ) {
+ if ( strpos( $extMime, '.' ) === 0 ) {
// If it's an extension, look up the mime types
$m = $this->getTypesForExtension( substr( $extMime, 1 ) );
if ( !$m ) {
}
/**
- * Get the MIME types that various versions of Internet Explorer would
+ * Get the MIME types that various versions of Internet Explorer would
* detect from a chunk of the content.
*
* @param $fileName String: the file name (unused at present)
);
if ( $wgContLang->hasVariants() ) {
$vars['wgUserVariant'] = $wgContLang->getPreferredVariant();
- }
+ }
foreach ( $title->getRestrictionTypes() as $type ) {
$vars['wgRestriction' . ucfirst( $type )] = $title->getRestrictions( $type );
}
* @return Title
*/
public function &getTitle() {
- if( $this->mTitle === false ) {
+ if ( $this->mTitle === false ) {
$this->mTitle = Title::makeTitle( $this->mAttribs['rc_namespace'], $this->mAttribs['rc_title'] );
# Make sure the correct page ID is process cached
$this->mTitle->resetArticleID( $this->mAttribs['rc_cur_id'] );
global $wgLocalInterwiki, $wgPutIPinRC, $wgUseEnotif, $wgShowUpdatedMarker, $wgContLang;
$dbw = wfGetDB( DB_MASTER );
- if( !is_array($this->mExtra) ) {
+ if ( !is_array( $this->mExtra ) ) {
$this->mExtra = array();
}
$this->mExtra['lang'] = $wgLocalInterwiki;
- if( !$wgPutIPinRC ) {
+ if ( !$wgPutIPinRC ) {
$this->mAttribs['rc_ip'] = '';
}
# If our database is strict about IP addresses, use NULL instead of an empty string
- if( $dbw->strictIPs() and $this->mAttribs['rc_ip'] == '' ) {
+ if ( $dbw->strictIPs() and $this->mAttribs['rc_ip'] == '' ) {
unset( $this->mAttribs['rc_ip'] );
}
$this->mAttribs['rc_comment'] = $wgContLang->truncate( $this->mAttribs['rc_comment'], 255 );
# Fixup database timestamps
- $this->mAttribs['rc_timestamp'] = $dbw->timestamp($this->mAttribs['rc_timestamp']);
- $this->mAttribs['rc_cur_time'] = $dbw->timestamp($this->mAttribs['rc_cur_time']);
+ $this->mAttribs['rc_timestamp'] = $dbw->timestamp( $this->mAttribs['rc_timestamp'] );
+ $this->mAttribs['rc_cur_time'] = $dbw->timestamp( $this->mAttribs['rc_cur_time'] );
$this->mAttribs['rc_id'] = $dbw->nextSequenceValue( 'recentchanges_rc_id_seq' );
## If we are using foreign keys, an entry of 0 for the page_id will fail, so use NULL
- if( $dbw->cascadingDeletes() and $this->mAttribs['rc_cur_id']==0 ) {
+ if ( $dbw->cascadingDeletes() and $this->mAttribs['rc_cur_id'] == 0 ) {
unset( $this->mAttribs['rc_cur_id'] );
}
}
# E-mail notifications
- if( $wgUseEnotif || $wgShowUpdatedMarker ) {
+ if ( $wgUseEnotif || $wgShowUpdatedMarker ) {
$editor = $this->getPerformer();
$title = $this->getTitle();
- if ( wfRunHooks( 'AbortEmailNotification', array($editor, $title) ) ) {
+ if ( wfRunHooks( 'AbortEmailNotification', array( $editor, $title ) ) ) {
# @todo FIXME: This would be better as an extension hook
$enotif = new EmailNotification();
$enotif->notifyOnPageChange( $editor, $title,
public function notifyRC2UDP() {
global $wgRC2UDPAddress, $wgRC2UDPOmitBots;
# Notify external application via UDP
- if( $wgRC2UDPAddress && ( !$this->mAttribs['rc_bot'] || !$wgRC2UDPOmitBots ) ) {
+ if ( $wgRC2UDPAddress && ( !$this->mAttribs['rc_bot'] || !$wgRC2UDPOmitBots ) ) {
self::sendToUDP( $this->getIRCLine() );
}
}
$prefix = $prefix ? $prefix : $wgRC2UDPPrefix;
$port = $port ? $port : $wgRC2UDPPort;
# Notify external application via UDP
- if( $address ) {
+ if ( $address ) {
$conn = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
- if( $conn ) {
+ if ( $conn ) {
$line = $prefix . $line;
wfDebug( __METHOD__ . ": sending UDP line: $line\n" );
- socket_sendto( $conn, $line, strlen($line), 0, $address, $port );
+ socket_sendto( $conn, $line, strlen( $line ), 0, $address, $port );
socket_close( $conn );
return true;
} else {
$change = $change instanceof RecentChange
? $change
- : RecentChange::newFromId($change);
+ : RecentChange::newFromId( $change );
- if( !$change instanceof RecentChange ) {
+ if ( !$change instanceof RecentChange ) {
return null;
}
return $change->doMarkPatrolled( $wgUser, $auto );
$errors = array();
// If recentchanges patrol is disabled, only new pages
// can be patrolled
- if( !$wgUseRCPatrol && ( !$wgUseNPPatrol || $this->getAttribute('rc_type') != RC_NEW ) ) {
- $errors[] = array('rcpatroldisabled');
+ if ( !$wgUseRCPatrol && ( !$wgUseNPPatrol || $this->getAttribute( 'rc_type' ) != RC_NEW ) ) {
+ $errors[] = array( 'rcpatroldisabled' );
}
// Automatic patrol needs "autopatrol", ordinary patrol needs "patrol"
$right = $auto ? 'autopatrol' : 'patrol';
$errors = array_merge( $errors, $this->getTitle()->getUserPermissionsErrors( $right, $user ) );
- if( !wfRunHooks('MarkPatrolled', array($this->getAttribute('rc_id'), &$user, false)) ) {
- $errors[] = array('hookaborted');
+ if ( !wfRunHooks( 'MarkPatrolled', array( $this->getAttribute( 'rc_id' ), &$user, false ) ) ) {
+ $errors[] = array( 'hookaborted' );
}
// Users without the 'autopatrol' right can't patrol their
// own revisions
- if( $user->getName() == $this->getAttribute('rc_user_text') && !$user->isAllowed('autopatrol') ) {
- $errors[] = array('markedaspatrollederror-noautopatrol');
+ if ( $user->getName() == $this->getAttribute( 'rc_user_text' ) && !$user->isAllowed( 'autopatrol' ) ) {
+ $errors[] = array( 'markedaspatrollederror-noautopatrol' );
}
- if( $errors ) {
+ if ( $errors ) {
return $errors;
}
// If the change was patrolled already, do nothing
- if( $this->getAttribute('rc_patrolled') ) {
+ if ( $this->getAttribute( 'rc_patrolled' ) ) {
return array();
}
// Actually set the 'patrolled' flag in RC
$this->reallyMarkPatrolled();
// Log this patrol event
PatrolLog::record( $this, $auto, $user );
- wfRunHooks( 'MarkPatrolledComplete', array($this->getAttribute('rc_id'), &$user, false) );
+ wfRunHooks( 'MarkPatrolledComplete', array( $this->getAttribute( 'rc_id' ), &$user, false ) );
return array();
}
'rc_patrolled' => 1
),
array(
- 'rc_id' => $this->getAttribute('rc_id')
+ 'rc_id' => $this->getAttribute( 'rc_id' )
),
__METHOD__
);
* @return RecentChange
*/
public static function notifyEdit( $timestamp, &$title, $minor, &$user, $comment, $oldId,
- $lastTimestamp, $bot, $ip='', $oldSize=0, $newSize=0, $newId=0, $patrol=0 ) {
+ $lastTimestamp, $bot, $ip = '', $oldSize = 0, $newSize = 0, $newId = 0, $patrol = 0 ) {
$rc = new RecentChange;
$rc->mTitle = $title;
$rc->mPerformer = $user;
'rc_last_oldid' => $oldId,
'rc_bot' => $bot ? 1 : 0,
'rc_ip' => self::checkIPAddress( $ip ),
- 'rc_patrolled' => intval($patrol),
+ 'rc_patrolled' => intval( $patrol ),
'rc_new' => 0, # obsolete
'rc_old_len' => $oldSize,
'rc_new_len' => $newSize,
* @return RecentChange
*/
public static function notifyNew( $timestamp, &$title, $minor, &$user, $comment, $bot,
- $ip='', $size=0, $newId=0, $patrol=0 ) {
+ $ip = '', $size = 0, $newId = 0, $patrol = 0 ) {
$rc = new RecentChange;
$rc->mTitle = $title;
$rc->mPerformer = $user;
'rc_last_oldid' => 0,
'rc_bot' => $bot ? 1 : 0,
'rc_ip' => self::checkIPAddress( $ip ),
- 'rc_patrolled' => intval($patrol),
+ 'rc_patrolled' => intval( $patrol ),
'rc_new' => 1, # obsolete
'rc_old_len' => 0,
'rc_new_len' => $size,
* @return bool
*/
public static function notifyLog( $timestamp, &$title, &$user, $actionComment, $ip, $type,
- $action, $target, $logComment, $params, $newId=0, $actionCommentIRC='' )
+ $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' )
{
global $wgLogRestrictions;
# Don't add private logs to RC!
- if( isset($wgLogRestrictions[$type]) && $wgLogRestrictions[$type] != '*' ) {
+ if ( isset( $wgLogRestrictions[$type] ) && $wgLogRestrictions[$type] != '*' ) {
return false;
}
$rc = self::newLogEntry( $timestamp, $title, $user, $actionComment, $ip, $type, $action,
* @return RecentChange
*/
public static function newLogEntry( $timestamp, &$title, &$user, $actionComment, $ip,
- $type, $action, $target, $logComment, $params, $newId=0, $actionCommentIRC='' ) {
+ $type, $action, $target, $logComment, $params, $newId = 0, $actionCommentIRC = '' ) {
global $wgRequest;
$rc = new RecentChange;
*/
public function loadFromRow( $row ) {
$this->mAttribs = get_object_vars( $row );
- $this->mAttribs['rc_timestamp'] = wfTimestamp(TS_MW, $this->mAttribs['rc_timestamp']);
+ $this->mAttribs['rc_timestamp'] = wfTimestamp( TS_MW, $this->mAttribs['rc_timestamp'] );
$this->mAttribs['rc_deleted'] = $row->rc_deleted; // MUST be set
}
*/
public function loadFromCurRow( $row ) {
$this->mAttribs = array(
- 'rc_timestamp' => wfTimestamp(TS_MW, $row->rev_timestamp),
+ 'rc_timestamp' => wfTimestamp( TS_MW, $row->rev_timestamp ),
'rc_cur_time' => $row->rev_timestamp,
'rc_user' => $row->rev_user,
'rc_user_text' => $row->rev_user_text,
'rc_minor' => $row->rev_minor_edit ? 1 : 0,
'rc_type' => $row->page_is_new ? RC_NEW : RC_EDIT,
'rc_cur_id' => $row->page_id,
- 'rc_this_oldid' => $row->rev_id,
- 'rc_last_oldid' => isset($row->rc_last_oldid) ? $row->rc_last_oldid : 0,
- 'rc_bot' => 0,
+ 'rc_this_oldid' => $row->rev_id,
+ 'rc_last_oldid' => isset( $row->rc_last_oldid ) ? $row->rc_last_oldid : 0,
+ 'rc_bot' => 0,
'rc_ip' => '',
'rc_id' => $row->rc_id,
'rc_patrolled' => $row->rc_patrolled,
'rc_new' => $row->page_is_new, # obsolete
'rc_old_len' => $row->rc_old_len,
'rc_new_len' => $row->rc_new_len,
- 'rc_params' => isset($row->rc_params) ? $row->rc_params : '',
- 'rc_log_type' => isset($row->rc_log_type) ? $row->rc_log_type : null,
- 'rc_log_action' => isset($row->rc_log_action) ? $row->rc_log_action : null,
- 'rc_log_id' => isset($row->rc_log_id) ? $row->rc_log_id: 0,
+ 'rc_params' => isset( $row->rc_params ) ? $row->rc_params : '',
+ 'rc_log_type' => isset( $row->rc_log_type ) ? $row->rc_log_type : null,
+ 'rc_log_action' => isset( $row->rc_log_action ) ? $row->rc_log_action : null,
+ 'rc_logid' => isset( $row->rc_logid ) ? $row->rc_logid : 0,
'rc_deleted' => $row->rc_deleted // MUST be set
);
}
* @return string
*/
public function diffLinkTrail( $forceCur ) {
- if( $this->mAttribs['rc_type'] == RC_EDIT ) {
- $trail = "curid=" . (int)($this->mAttribs['rc_cur_id']) .
- "&oldid=" . (int)($this->mAttribs['rc_last_oldid']);
- if( $forceCur ) {
+ if ( $this->mAttribs['rc_type'] == RC_EDIT ) {
+ $trail = "curid=" . (int)( $this->mAttribs['rc_cur_id'] ) .
+ "&oldid=" . (int)( $this->mAttribs['rc_last_oldid'] );
+ if ( $forceCur ) {
$trail .= '&diff=0' ;
} else {
- $trail .= '&diff=' . (int)($this->mAttribs['rc_this_oldid']);
+ $trail .= '&diff=' . (int)( $this->mAttribs['rc_this_oldid'] );
}
} else {
$trail = '';
global $wgUseRCPatrol, $wgUseNPPatrol, $wgRC2UDPInterwikiPrefix, $wgLocalInterwiki,
$wgCanonicalServer, $wgScript;
- if( $this->mAttribs['rc_type'] == RC_LOG ) {
+ if ( $this->mAttribs['rc_type'] == RC_LOG ) {
// Don't use SpecialPage::getTitleFor, backwards compatibility with
// IRC API which expects "Log".
$titleObj = Title::newFromText( 'Log/' . $this->mAttribs['rc_log_type'], NS_SPECIAL );
$title = $titleObj->getPrefixedText();
$title = self::cleanupForIRC( $title );
- if( $this->mAttribs['rc_type'] == RC_LOG ) {
+ if ( $this->mAttribs['rc_type'] == RC_LOG ) {
$url = '';
} else {
$url = $wgCanonicalServer . $wgScript;
- if( $this->mAttribs['rc_type'] == RC_NEW ) {
+ if ( $this->mAttribs['rc_type'] == RC_NEW ) {
$query = '?oldid=' . $this->mAttribs['rc_this_oldid'];
} else {
$query = '?diff=' . $this->mAttribs['rc_this_oldid'] . '&oldid=' . $this->mAttribs['rc_last_oldid'];
$url .= $query;
}
- if( $this->mAttribs['rc_old_len'] !== null && $this->mAttribs['rc_new_len'] !== null ) {
+ if ( $this->mAttribs['rc_old_len'] !== null && $this->mAttribs['rc_new_len'] !== null ) {
$szdiff = $this->mAttribs['rc_new_len'] - $this->mAttribs['rc_old_len'];
- if($szdiff < -500) {
+ if ( $szdiff < -500 ) {
$szdiff = "\002$szdiff\002";
- } elseif($szdiff >= 0) {
+ } elseif ( $szdiff >= 0 ) {
$szdiff = '+' . $szdiff ;
}
// @todo i18n with parentheses in content language?
* @return string
*/
public function getCharacterDifference( $old = 0, $new = 0 ) {
- if( $old === 0 ) {
+ if ( $old === 0 ) {
$old = $this->mAttribs['rc_old_len'];
}
- if( $new === 0 ) {
+ if ( $new === 0 ) {
$new = $this->mAttribs['rc_new_len'];
}
- if( $old === null || $new === null ) {
+ if ( $old === null || $new === null ) {
return '';
}
return ChangesList::showCharacterDifference( $old, $new );
}
} else {
$ip = $wgRequest->getIP();
- if( !$ip )
+ if ( !$ip ) {
$ip = '';
+ }
}
return $ip;
}
*/
class Revision implements IDBAccessObject {
protected $mId;
+
+ /**
+ * @var int|null
+ */
protected $mPage;
protected $mUserText;
protected $mOrigUserText;
protected $mComment;
protected $mText;
protected $mTextRow;
+
+ /**
+ * @var null|Title
+ */
protected $mTitle;
protected $mCurrent;
protected $mContentModel;
protected $mContentFormat;
+
+ /**
+ * @var Content
+ */
protected $mContent;
+
+ /**
+ * @var null|ContentHandler
+ */
protected $mContentHandler;
// Revision deletion constants
$this->mContent = $handler->unserializeContent( $this->mText );
}
- // if we have a Title object, override mPage. Useful for testing and convenience.
- if ( isset( $row['title'] ) ) {
- $this->mTitle = $row['title'];
- $this->mPage = $this->mTitle->getArticleID();
- } else {
- $this->mTitle = null; // Load on demand if needed
+ // If we have a Title object, make sure it is consistent with mPage.
+ if ( $this->mTitle && $this->mTitle->exists() ) {
+ if ( $this->mPage === null ) {
+ // if the page ID wasn't known, set it now
+ $this->mPage = $this->mTitle->getArticleID();
+ } elseif ( $this->mTitle->getArticleID() !== $this->mPage ) {
+ // got different page IDs, something is wrong.
+ wfWarn( "Page ID " . $this->mPage . " mismatches the ID "
+ . $this->mTitle->getArticleID() . " provided by the Title object." );
+ }
}
- // @todo: XXX: really? we are about to create a revision. it will usually then be the current one.
$this->mCurrent = false;
// If we still have no length, see it we have the text to figure it out
* @param $user User object to check for, only if FOR_THIS_USER is passed
* to the $audience parameter
* @since 1.21
- * @return Content
+ * @return Content|null
*/
public function getContent( $audience = self::FOR_PUBLIC, User $user = null ) {
if( $audience == self::FOR_PUBLIC && $this->isDeleted( self::DELETED_TEXT ) ) {
*/
public function getRawText() {
ContentHandler::deprecated( __METHOD__, "1.21" );
-
return $this->getText( self::RAW );
}
$handler = $this->getContentHandler();
$format = $this->getContentFormat();
- $title = $this->getTitle();
if( is_null( $this->mText ) ) {
// Load text on demand:
/**
* Returns the content handler appropriate for this revision's content model.
*
+ * @throws MWException
* @return ContentHandler
*/
public function getContentHandler() {
$htmlsingleonly = array( # Elements that cannot have close tags
'br', 'hr'
);
- $htmlnest = array( # Tags that can be nested--??
+ $htmlnest = array( # Tags that can be nested directly or indirectly
'table', 'tr', 'td', 'th', 'div', 'blockquote', 'ol', 'ul',
- 'dl', 'font', 'big', 'small', 'sub', 'sup', 'span'
+ 'li', 'dl', 'dt', 'dd', 'font', 'big', 'small', 'sub', 'sup', 'span'
);
$tabletags = array( # Can only appear inside table, we will close them
'td', 'th', 'tr',
} elseif ( isset( $htmlsingle[$t] ) ) {
# Hack to not close $htmlsingle tags
$brace = null;
+ # Still need to push this optionally-closed tag to
+ # the tag stack so that we can match end tags
+ # instead of marking them as bad.
+ array_push( $tagstack, $t );
} elseif ( isset( $tabletags[$t] )
&& in_array( $t, $tagstack ) ) {
// New table tag but forgot to close the previous one
// Reject problematic keywords and control characters
if ( preg_match( '/[\000-\010\016-\037\177]/', $value ) ) {
return '/* invalid control char */';
- } elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( !ix', $value ) ) {
+ } elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( | image-set\s*\( !ix', $value ) ) {
return '/* insecure input */';
}
return $value;
// this is a fallback SQL file
$testSqlFile = false;
$testImageZip = false;
-
+
// if we find a request parameter containing the test name, set a cookie with the test name
if ( isset( $_GET['setupTestSuite'] ) ) {
$setupTestSuiteName = $_GET['setupTestSuite'];
true
);
}
-
+
$testIncludes = array(); // array containing all the includes needed for this test
$testGlobalConfigs = array(); // an array containg all the global configs needed for this test
$testResourceFiles = array(); // an array containing all the resource files needed for this test
if ( isset( $testResourceFiles['images'] ) ) {
$testImageZip = $testResourceFiles['images'];
}
-
+
if ( isset( $testResourceFiles['db'] ) ) {
$testSqlFile = $testResourceFiles['db'];
$testResourceName = getTestResourceNameFromTestSuiteName( $setupTestSuiteName );
-
+
switchToTestResources( $testResourceName, false ); // false means do not switch database yet
setupTestResources( $testResourceName, $testSqlFile, $testImageZip );
}
if ( isset( $_GET['clearTestSuite'] ) ) {
$testSuiteName = getTestSuiteNameFromCookie( $cookieName );
- $expire = time() - 600;
+ $expire = time() - 600;
setcookie(
$cookieName,
'',
$wgCookieSecure,
true
);
-
+
$testResourceName = getTestResourceNameFromTestSuiteName( $testSuiteName );
teardownTestResources( $testResourceName );
}
// if a cookie is found, run the appropriate callback to get the config params.
-if ( isset( $_COOKIE[$cookieName] ) ) {
+if ( isset( $_COOKIE[$cookieName] ) ) {
$testSuiteName = getTestSuiteNameFromCookie( $cookieName );
if ( !isset( $wgSeleniumTestConfigs[$testSuiteName] ) ) {
return;
}
-
+
$testIncludes = array(); // array containing all the includes needed for this test
$testGlobalConfigs = array(); // an array containg all the global configs needed for this test
$testResourceFiles = array(); // an array containing all the resource files needed for this test
- $callback = $wgSeleniumTestConfigs[$testSuiteName];
+ $callback = $wgSeleniumTestConfigs[$testSuiteName];
call_user_func_array( $callback, array( &$testIncludes, &$testGlobalConfigs, &$testResourceFiles));
if ( isset( $testResourceFiles['db'] ) ) {
require_once( $file );
}
foreach ( $testGlobalConfigs as $key => $value ) {
- if ( is_array( $value ) ) {
+ if ( is_array( $value ) ) {
$GLOBALS[$key] = array_merge( $GLOBALS[$key], $value );
-
} else {
$GLOBALS[$key] = $value;
}
if ( $testResourceName == '' ) {
die( 'Cannot identify a test the resources should be installed for.' );
}
-
+
// create tables
$dbw = wfGetDB( DB_MASTER );
$dbw->query( 'DROP DATABASE IF EXISTS ' . $testResourceName );
return $wgValidSkinNames;
}
- /**
+ /**
* Fetch the skinname messages for available skins.
* @return array of strings
*/
}
/**
- * Build an array that represents the sidebar(s), the navigation bar among them
+ * Build an array that represents the sidebar(s), the navigation bar among them.
+ *
+ * BaseTemplate::getSidebar can be used to simplify the format and id generation in new skins.
+ *
+ * The format of the returned array is array( heading => content, ... ), where:
+ * - heading is the heading of a navigation portlet. It is either:
+ * - magic string to be handled by the skins ('SEARCH' / 'LANGUAGES' / 'TOOLBOX' / ...)
+ * - a message name (e.g. 'navigation'), the message should be HTML-escaped by the skin
+ * - plain text, which should be HTML-escaped by the skin
+ * - content is the contents of the portlet. It is either:
+ * - HTML text (<ul><li>...</li>...</ul>)
+ * - array of link data in a format accepted by BaseTemplate::makeListItem()
+ * - (for a magic string as a key, any value)
+ *
+ * Note that extensions can control the sidebar contents using the SkinBuildSidebar hook
+ * and can technically insert anything in here; skin creators are expected to handle
+ * values described above.
*
* @return array
*/
}
if ( isset( $this->data['nav_urls']['info'] ) && $this->data['nav_urls']['info'] ) {
$toolbox['info'] = $this->data['nav_urls']['info'];
+ $toolbox['info']['id'] = 't-info';
}
wfRunHooks( 'BaseTemplateToolbox', array( &$this, &$toolbox ) );
foreach ( array( 'id', 'class', 'active', 'tag' ) as $k ) {
unset( $link[$k] );
}
- if ( isset( $item['id'] ) ) {
+ if ( isset( $item['id'] ) && !isset( $item['single-id'] ) ) {
// The id goes on the <li> not on the <a> for single links
// but makeSidebarLink still needs to know what id to use when
// generating tooltips and accesskeys.
*/
public function isRestricted() {
// DWIM: If all anons can do something, then it is not restricted
- return $this->mRestriction != '' && User::groupHasPermission( '*', $this->mRestriction );
+ return $this->mRestriction != '' && !User::groupHasPermission( '*', $this->mRestriction );
}
/**
if ( $redirect instanceof Title ) {
$url = $redirect->getFullUrl( $query );
$this->getOutput()->redirect( $url );
- wfProfileOut( __METHOD__ );
return $redirect;
// Redirect to index.php with query parameters
} elseif ( $redirect === true ) {
global $wgScript;
$url = $wgScript . '?' . wfArrayToCGI( $query );
$this->getOutput()->redirect( $url );
- wfProfileOut( __METHOD__ );
return $redirect;
} else {
$class = __CLASS__;
'ctype', 'maxage', 'smaxage',
);
- wfRunHooks( "RedirectSpecialArticleRedirectParams", array(&$redirectParams) );
+ wfRunHooks( "RedirectSpecialArticleRedirectParams", array( &$redirectParams ) );
$this->mAllowedRedirectParams = $redirectParams;
}
}
* @param $dbkeys Array
*/
protected function invalidatePages( $namespace, array $dbkeys ) {
- if ( !count( $dbkeys ) ) {
+ if ( $dbkeys === array() ) {
return;
}
'page_touched < ' . $this->mDb->addQuotes( $now )
), __METHOD__
);
+
foreach ( $res as $row ) {
$ids[] = $row->page_id;
}
- if ( !count( $ids ) ) {
+
+ if ( $ids === array() ) {
return;
}
}
/**
- * Get the error message as HTML. This is done by parsing the wikitext error
+ * Get the error message as HTML. This is done by parsing the wikitext error
* message.
*/
public function getHTML( $shortContext = false, $longContext = false ) {
*
* @see self::getLocalURL
* @see wfExpandUrl
+ * @param $query
+ * @param $query2 bool
* @param $proto Protocol type to use in URL
* @return String the URL
*/
*
* @param $query string|array an optional query string,
- * not used for interwiki links. Can be specified as an associative array as well,
+ * not used for interwiki links. Can be specified as an associative array as well,
* e.g., array( 'action' => 'edit' ) (keys and values will be URL-escaped).
* Some query patterns will trigger various shorturl path replacements.
* @param $query2 Mixed: An optional secondary query array. This one MUST
*
* See getLocalURL for the arguments.
*
+ * @param $query
+ * @param $query2 bool
* @param $proto Protocol to use; setting this will cause a full URL to be used
* @see self::getLocalURL
* @return String the URL
$linkCache = LinkCache::singleton();
$cached = $linkCache->getGoodLinkFieldObj( $this, 'redirect' );
- if ( $cached === null ) {
+ if ( $cached === null ) {
// TODO: check the assumption that the cache actually knows about this title
// and handle this, such as get the title from the database.
// See https://bugzilla.wikimedia.org/show_bug.cgi?id=37209
+ wfDebug( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+ wfDebug( wfBacktrace() );
}
$this->mRedirect = (bool)$cached;
if ( $cached === null ) { # check the assumption that the cache actually knows about this title
# XXX: this does apparently happen, see https://bugzilla.wikimedia.org/show_bug.cgi?id=37209
# as a stop gap, perhaps log this, but don't throw an exception?
- throw new MWException( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+ wfDebug( "LinkCache doesn't currently know about this title: " . $this->getPrefixedDBkey() );
+ wfDebug( wfBacktrace() );
}
$this->mLength = intval( $cached );
/**
* Update page_touched timestamps and send squid purge messages for
- * pages linking to this title. May be sent to the job queue depending
+ * pages linking to this title. May be sent to the job queue depending
* on the number of links. Typically called on create and delete.
*/
public function touchLinks() {
* will be loaded once more from the database when accessing them.
*
* @param $row Array A row from the user table
+ * @param $data Array Further data to load into the object (see User::loadFromRow for valid keys)
* @return User
*/
- public static function newFromRow( $row ) {
+ public static function newFromRow( $row, $data = null ) {
$user = new User;
- $user->loadFromRow( $row );
+ $user->loadFromRow( $row, $data );
return $user;
}
/**
* Count the number of edits of a user
- * @todo It should not be static and some day should be merged as proper member function / deprecated -- domas
*
* @param $uid Int User ID to check
* @return Int the user's edit count
+ *
+ * @deprecated since 1.21 in favour of User::getEditCount
*/
public static function edits( $uid ) {
- wfProfileIn( __METHOD__ );
- $dbr = wfGetDB( DB_SLAVE );
- // check if the user_editcount field has been initialized
- $field = $dbr->selectField(
- 'user', 'user_editcount',
- array( 'user_id' => $uid ),
- __METHOD__
- );
-
- if( $field === null ) { // it has not been initialized. do so.
- $dbw = wfGetDB( DB_MASTER );
- $count = $dbr->selectField(
- 'revision', 'count(*)',
- array( 'rev_user' => $uid ),
- __METHOD__
- );
- $dbw->update(
- 'user',
- array( 'user_editcount' => $count ),
- array( 'user_id' => $uid ),
- __METHOD__
- );
- } else {
- $count = $field;
- }
- wfProfileOut( __METHOD__ );
- return $count;
+ wfDeprecated( __METHOD__, '1.21' );
+ $user = self::newFromId( $uid );
+ return $user->getEditCount();
}
/**
* Initialize this object from a row from the user table.
*
* @param $row Array Row from the user table to load.
+ * @param $data Array Further user data to load into the object
+ *
+ * user_groups Array with groups out of the user_groups table
+ * user_properties Array with properties out of the user_properties table
*/
- public function loadFromRow( $row ) {
+ public function loadFromRow( $row, $data = null ) {
$all = true;
$this->mGroups = null; // deferred
if ( $all ) {
$this->mLoadedItems = true;
}
+
+ if ( is_array( $data ) ) {
+ if ( is_array( $data['user_groups'] ) ) {
+ $this->mGroups = $data['user_groups'];
+ }
+ if ( is_array( $data['user_properties'] ) ) {
+ $this->loadOptions( $data['user_properties'] );
+ }
+ }
}
/**
}
/**
- * Clear various cached data stored in this object.
+ * Clear various cached data stored in this object. The cache of the user table
+ * data (i.e. self::$mCacheVars) is not cleared unless $reloadFrom is given.
+ *
* @param $reloadFrom bool|String Reload user and user_groups table data from a
* given source. May be "name", "id", "defaults", "session", or false for
* no reload.
$this->mEffectiveGroups = null;
$this->mImplicitGroups = null;
$this->mOptions = null;
+ $this->mOptionsLoaded = false;
$this->mEditCount = null;
if ( $reloadFrom ) {
public static function getDefaultOptions() {
global $wgNamespacesToBeSearchedDefault, $wgDefaultUserOptions, $wgContLang, $wgDefaultSkin;
+ static $defOpt = null;
+ if ( !defined( 'MW_PHPUNIT_TEST' ) && $defOpt !== null ) {
+ // Disabling this for the unit tests, as they rely on being able to change $wgContLang
+ // mid-request and see that change reflected in the return value of this function.
+ // Which is insane and would never happen during normal MW operation
+ return $defOpt;
+ }
+
$defOpt = $wgDefaultUserOptions;
# default language setting
$defOpt['variant'] = $wgContLang->getCode();
}
$defOpt['skin'] = $wgDefaultSkin;
- // FIXME: Ideally we'd cache the results of this function so the hook is only run once,
- // but that breaks the parser tests because they rely on being able to change $wgContLang
- // mid-request and see that change reflected in the return value of this function.
- // Which is insane and would never happen during normal MW operation, but is also not
- // likely to get fixed unless and until we context-ify everything.
- // See also https://www.mediawiki.org/wiki/Special:Code/MediaWiki/101488#c25275
wfRunHooks( 'UserGetDefaultOptions', array( &$defOpt ) );
return $defOpt;
if( $this->getId() ) {
if ( !isset( $this->mEditCount ) ) {
/* Populate the count, if it has not been populated yet */
- $this->mEditCount = User::edits( $this->mId );
+ wfProfileIn( __METHOD__ );
+ $dbr = wfGetDB( DB_SLAVE );
+ // check if the user_editcount field has been initialized
+ $count = $dbr->selectField(
+ 'user', 'user_editcount',
+ array( 'user_id' => $this->mId ),
+ __METHOD__
+ );
+
+ if( $count === null ) {
+ // it has not been initialized. do so.
+ $count = $this->initEditCount();
+ }
+ wfProfileOut( __METHOD__ );
+ $this->mEditCount = $count;
}
return $this->mEditCount;
} else {
}
/**
- * Add this existing user object to the database. If the user already
- * exists, a fatal status object is returned, and the user object is
+ * Add this existing user object to the database. If the user already
+ * exists, a fatal status object is returned, and the user object is
* initialised with the data from the database.
*
* Previously, this function generated a DB error due to a key conflict
* }
* // do something with $user...
*
- * However, this was vulnerable to a race condition (bug 16020). By
+ * However, this was vulnerable to a race condition (bug 16020). By
* initialising the user object if the user exists, we aim to support this
* calling sequence as far as possible.
*
* Note that if the user exists, this function will acquire a write lock,
- * so it is still advisable to make the call conditional on isLoggedIn(),
+ * so it is still advisable to make the call conditional on isLoggedIn(),
* and to commit the transaction after calling.
*
* @return Status
array( 'IGNORE' )
);
if ( !$dbw->affectedRows() ) {
- $this->mId = $dbw->selectField( 'user', 'user_id',
+ $this->mId = $dbw->selectField( 'user', 'user_id',
array( 'user_name' => $this->mName ), __METHOD__ );
$loaded = false;
if ( $this->mId ) {
public function incEditCount() {
if( !$this->isAnon() ) {
$dbw = wfGetDB( DB_MASTER );
- $dbw->update( 'user',
+ $dbw->update(
+ 'user',
array( 'user_editcount=user_editcount+1' ),
array( 'user_id' => $this->getId() ),
- __METHOD__ );
+ __METHOD__
+ );
// Lazy initialization check...
if( $dbw->affectedRows() == 0 ) {
- // Pull from a slave to be less cruel to servers
- // Accuracy isn't the point anyway here
- $dbr = wfGetDB( DB_SLAVE );
- $count = $dbr->selectField( 'revision',
- 'COUNT(rev_user)',
- array( 'rev_user' => $this->getId() ),
- __METHOD__ );
-
// Now here's a goddamn hack...
+ $dbr = wfGetDB( DB_SLAVE );
if( $dbr !== $dbw ) {
// If we actually have a slave server, the count is
// at least one behind because the current transaction
// has not been committed and replicated.
- $count++;
+ $this->initEditCount( 1 );
} else {
// But if DB_SLAVE is selecting the master, then the
// count we just read includes the revision that was
// just added in the working transaction.
+ $this->initEditCount();
}
-
- $dbw->update( 'user',
- array( 'user_editcount' => $count ),
- array( 'user_id' => $this->getId() ),
- __METHOD__ );
}
}
// edit count in user cache too
$this->invalidateCache();
}
+ /**
+ * Initialize user_editcount from data out of the revision table
+ *
+ * @param $add Integer Edits to add to the count from the revision table
+ * @return Integer Number of edits
+ */
+ protected function initEditCount( $add = 0 ) {
+ // Pull from a slave to be less cruel to servers
+ // Accuracy isn't the point anyway here
+ $dbr = wfGetDB( DB_SLAVE );
+ $count = $dbr->selectField(
+ 'revision',
+ 'COUNT(rev_user)',
+ array( 'rev_user' => $this->getId() ),
+ __METHOD__
+ );
+ $count = $count + $add;
+
+ $dbw = wfGetDB( DB_MASTER );
+ $dbw->update(
+ 'user',
+ array( 'user_editcount' => $count ),
+ array( 'user_id' => $this->getId() ),
+ __METHOD__
+ );
+
+ return $count;
+ }
+
/**
* Get the description of a given right
*
}
/**
- * @todo document
+ * Load the user options either from cache, the database or an array
+ *
+ * @param $data Rows for the current user out of the user_properties table
*/
- protected function loadOptions() {
+ protected function loadOptions( $data = null ) {
global $wgContLang;
$this->load();
$this->mOptions[$key] = $value;
}
} else {
- wfDebug( "User: loading options for user " . $this->getId() . " from database.\n" );
- // Load from database
- $dbr = wfGetDB( DB_SLAVE );
-
- $res = $dbr->select(
- 'user_properties',
- array( 'up_property', 'up_value' ),
- array( 'up_user' => $this->getId() ),
- __METHOD__
- );
+ if( !is_array( $data ) ) {
+ wfDebug( "User: loading options for user " . $this->getId() . " from database.\n" );
+ // Load from database
+ $dbr = wfGetDB( DB_SLAVE );
- $this->mOptionOverrides = array();
- foreach ( $res as $row ) {
- $this->mOptionOverrides[$row->up_property] = $row->up_value;
- $this->mOptions[$row->up_property] = $row->up_value;
+ $res = $dbr->select(
+ 'user_properties',
+ array( 'up_property', 'up_value' ),
+ array( 'up_user' => $this->getId() ),
+ __METHOD__
+ );
+
+ $this->mOptionOverrides = array();
+ $data = array();
+ foreach ( $res as $row ) {
+ $data[$row->up_property] = $row->up_value;
+ }
+ }
+ foreach ( $data as $property => $value ) {
+ $this->mOptionOverrides[$property] = $value;
+ $this->mOptions[$property] = $value;
}
}
}
wfRestoreWarnings();
return Status::newGood();
- } else {
+ } else {
#
# PHP mail()
#
/**
* Unset an arbitrary value from our get/post data.
- *
+ *
* @param $key String: key name to use
* @return Mixed: old value if one was present, null otherwise
*/
* @return String
*/
protected function getRawIP() {
- if ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
- return IP::canonicalize( $_SERVER['REMOTE_ADDR'] );
- } else {
+ if ( !isset( $_SERVER['REMOTE_ADDR'] ) ) {
return null;
}
+
+ if ( is_array( $_SERVER['REMOTE_ADDR'] ) || strpos( $_SERVER['REMOTE_ADDR'], ',' ) !== false ) {
+ throw new MWException( __METHOD__ . " : Could not determine the remote IP address due to multiple values." );
+ } else {
+ $ipchain = $_SERVER['REMOTE_ADDR'];
+ }
+
+ return IP::canonicalize( $ipchain );
}
/**
* @param $value String: value to give cookie
* @param $expire Int: number of seconds til cookie expires
* @param $prefix String: Prefix to use, if not $wgCookiePrefix (use '' for no prefix)
- * @param @domain String: Cookie domain to use, if not $wgCookieDomain
+ * @param $domain String: Cookie domain to use, if not $wgCookieDomain
* @param $forceSecure Bool:
* true: force the cookie to be set with the secure attribute
* false: force the cookie to be set without the secure attribute
* @param $expire Int: number of seconds til cookie expires (Default: 0)
* @param $prefix TODO DOCUMENT (Default: null)
* @param $domain TODO DOCUMENT (Default: null)
- *
+ * @param $forceSecure TODO DOCUMENT (Default: null)
*/
public function setcookie( $name, $value, $expire = 0, $prefix = null, $domain = null, $forceSecure = null ) {
$this->cookies[$name] = $value;
wfProfileIn( __METHOD__ );
$request = $this->context->getRequest();
- $title = $this->context->getTitle();
+ $requestTitle = $title = $this->context->getTitle();
$output = $this->context->getOutput();
$user = $this->context->getUser();
global $wgArticle;
$wgArticle = new DeprecatedGlobal( 'wgArticle', $article, '1.18' );
- $this->performAction( $article );
+ $this->performAction( $article, $requestTitle );
} elseif ( is_string( $article ) ) {
$output->redirect( $article );
} else {
* Perform one of the "standard" actions
*
* @param $page Page
+ * @param $requestTitle The original title, before any redirects were applied
*/
- private function performAction( Page $page ) {
+ private function performAction( Page $page, Title $requestTitle ) {
global $wgUseSquid, $wgSquidMaxage;
wfProfileIn( __METHOD__ );
if ( $action instanceof Action ) {
# Let Squid cache things if we can purge them.
if ( $wgUseSquid &&
- in_array( $request->getFullRequestURL(), $title->getSquidURLs() )
+ in_array( $request->getFullRequestURL(), $requestTitle->getSquidURLs() )
) {
$output->setSquidMaxage( $wgSquidMaxage );
}
// Execute a job from the queue
$this->doJobs();
- // Log message usage, if $wgAdaptiveMessageCache is set to true
- MessageCache::logMessages();
-
// Log profiling data, e.g. in the database or UDP
wfLogProfilingData();
/**
* @param $section null|bool|int or a section number (0, 1, 2, T1, T2...)
- * @param $content Content: new content of the section
+ * @param $sectionContent Content: new content of the section
* @param $sectionTitle String: new section's subject, only if $section is 'new'
* @param $edittime String: revision timestamp or null to use the current revision
*
$revision = new Revision( array(
'page' => $this->getId(),
+ 'title' => $this->getTitle(), // for determining the default content model
'comment' => $summary,
'minor_edit' => $isminor,
'text' => $serialized,
# Save the revision text...
$revision = new Revision( array(
'page' => $newid,
+ 'title' => $this->getTitle(), // for determining the default content model
'comment' => $summary,
'minor_edit' => $isminor,
'text' => $serialized,
* @param $reason string delete reason for deletion log
* @param $suppress boolean suppress all revisions and log the deletion in
* the suppression log instead of the deletion log
+ * @param $id int article ID
* @param $commit boolean defaults to true, triggers transaction end
* @param &$error Array of errors to append to
* @param $user User The deleting user
} elseif ( $isCurrent ) {
#XXX: why use RAW audience here, and PUBLIC (default) below?
$content = $this->page->getContent( Revision::RAW );
- if ( $content === null ) {
- return false;
- }
-
} else {
$rev = Revision::newFromTitle( $this->page->getTitle(), $this->revid );
+
if ( $rev === null ) {
- return false;
+ $content = null;
+ } else {
+ #XXX: why use PUBLIC audience here (default), and RAW above?
+ $content = $rev->getContent();
}
+ }
- #XXX: why use PUBLIC audience here (default), and RAW above?
- $content = $rev->getContent();
+ if ( $content === null ) {
+ return false;
}
$time = - microtime( true );
*/
public static function textarea( $name, $content, $cols = 40, $rows = 5, $attribs = array() ) {
return self::element( 'textarea',
- array( 'name' => $name,
+ array(
+ 'name' => $name,
'id' => $name,
'cols' => $cols,
'rows' => $rows
*/
$zh2Hant = array(
+'㐽' => '偑',
+'㑇' => '㑳',
+'㑈' => '倲',
+'㑔' => '㑯',
'㑩' => '儸',
'㓥' => '劏',
'㔉' => '劚',
'㖊' => '噚',
'㖞' => '喎',
+'㘎' => '㘚',
+'㚯' => '㜄',
+'㛀' => '媰',
'㛟' => '𡞵',
'㛠' => '𡢃',
+'㛣' => '㜏',
+'㛤' => '孋',
'㛿' => '𡠹',
'㟆' => '㠏',
+'㟜' => '𡾱',
+'㤘' => '㥮',
+'㧏' => '掆',
+'㧐' => '㩳',
'㧑' => '撝',
'㧟' => '擓',
+'㧰' => '擽',
'㨫' => '㩜',
+'㭎' => '棡',
+'㭏' => '椲',
+'㭣' => '𣙎',
+'㭤' => '樢',
+'㭴' => '樫',
'㱩' => '殰',
'㱮' => '殨',
'㲿' => '瀇',
+'㳔' => '濧',
+'㳕' => '灡',
'㳠' => '澾',
+'㳡' => '濄',
+'㳢' => '𣾷',
+'㳽' => '瀰',
'㶉' => '鸂',
'㶶' => '燶',
'㶽' => '煱',
'㺍' => '獱',
+'㻅' => '璯',
'㻏' => '𤫩',
'㻘' => '𤪺',
+'䀥' => '䁻',
'䁖' => '瞜',
+'䂵' => '碽',
'䅉' => '稏',
+'䅪' => '𥢢',
'䇲' => '筴',
+'䉤' => '籔',
'䌶' => '䊷',
'䌷' => '紬',
'䌸' => '縳',
'䌹' => '絅',
'䌺' => '䋙',
+'䌻' => '䋚',
'䌼' => '綐',
'䌽' => '綵',
'䌾' => '䋻',
'䓕' => '薳',
'䗖' => '螮',
'䘛' => '𧝞',
+'䘞' => '𧜗',
'䙊' => '𧜵',
+'䙌' => '䙡',
'䙓' => '襬',
'䜣' => '訢',
'䜥' => '𧩙',
-'䜧' => '譅',
+'䜧' => '䜀',
+'䜩' => '讌',
'䝙' => '貙',
'䞌' => '𧵳',
'䞍' => '䝼',
+'䞎' => '𧶧',
'䞐' => '賰',
+'䟢' => '躎',
+'䢀' => '𨊰',
+'䢁' => '𨊸',
'䢂' => '𨋢',
'䥺' => '釾',
'䥽' => '鏺',
+'䥾' => '䥱',
'䥿' => '𨯅',
'䦀' => '𨦫',
'䦁' => '𨧜',
+'䦂' => '䥇',
'䦃' => '鐯',
'䦅' => '鐥',
-'䩄' => '靦',
+'䦶' => '䦛',
+'䦷' => '䦟',
'䭪' => '𩞯',
'䯃' => '𩣑',
'䯄' => '騧',
'伞' => '傘',
'伟' => '偉',
'传' => '傳',
+'伡' => '俥',
'伣' => '俔',
'伤' => '傷',
'伥' => '倀',
'刭' => '剄',
'刹' => '剎',
'刽' => '劊',
+'刾' => '㓨',
'刿' => '劌',
'剀' => '剴',
'剂' => '劑',
'啬' => '嗇',
'啭' => '囀',
'啮' => '嚙',
+'啯' => '嘓',
+'啰' => '囉',
'啴' => '嘽',
'啸' => '嘯',
'喷' => '噴',
'婵' => '嬋',
'婶' => '嬸',
'媪' => '媼',
+'媭' => '嬃',
'嫒' => '嬡',
'嫔' => '嬪',
'嫱' => '嬙',
'归' => '歸',
'当' => '當',
'录' => '錄',
+'彟' => '彠',
'彦' => '彥',
+'彨' => '彲',
'彻' => '徹',
'径' => '徑',
'徕' => '徠',
'攒' => '攢',
'敌' => '敵',
'敛' => '斂',
+'敩' => '斆',
'数' => '數',
'斋' => '齋',
'斓' => '斕',
'桧' => '檜',
'桨' => '槳',
'桩' => '樁',
+'桪' => '樳',
'梦' => '夢',
'梼' => '檮',
'梾' => '棶',
'棁' => '梲',
'棂' => '欞',
'椁' => '槨',
+'椝' => '槼',
'椟' => '櫝',
'椠' => '槧',
+'椢' => '槶',
'椤' => '欏',
+'椫' => '樿',
'椭' => '橢',
'楼' => '樓',
'榄' => '欖',
'沥' => '瀝',
'沦' => '淪',
'沧' => '滄',
+'沨' => '渢',
'沩' => '溈',
'沪' => '滬',
'泞' => '濘',
'浒' => '滸',
'浓' => '濃',
'浔' => '潯',
+'浕' => '濜',
'涂' => '塗',
'涛' => '濤',
'涝' => '澇',
'涟' => '漣',
'涠' => '潿',
'涡' => '渦',
+'涢' => '溳',
'涣' => '渙',
'涤' => '滌',
'润' => '潤',
'渐' => '漸',
'渑' => '澠',
'渔' => '漁',
-'渖' => '瀋',
'渗' => '滲',
'温' => '溫',
'湾' => '灣',
'溃' => '潰',
'溅' => '濺',
'溆' => '漵',
+'溇' => '漊',
'滗' => '潷',
'滚' => '滾',
'滞' => '滯',
'潍' => '濰',
'潜' => '潛',
'潴' => '瀦',
+'澛' => '瀂',
'澜' => '瀾',
'濑' => '瀨',
'濒' => '瀕',
'灿' => '燦',
'炀' => '煬',
'炉' => '爐',
-'炖' => '燉',
'炜' => '煒',
'炝' => '熗',
'点' => '點',
'硖' => '硤',
'硗' => '磽',
'硙' => '磑',
+'硚' => '礄',
'确' => '確',
+'硵' => '磠',
'硷' => '礆',
'碍' => '礙',
'碛' => '磧',
'碜' => '磣',
-'碱' => '鹼',
'礼' => '禮',
'祃' => '禡',
'祎' => '禕',
'篑' => '簣',
'篓' => '簍',
'篮' => '籃',
+'篯' => '籛',
'篱' => '籬',
'簖' => '籪',
'籁' => '籟',
'羟' => '羥',
'羡' => '羨',
'翘' => '翹',
+'翙' => '翽',
+'翚' => '翬',
'耢' => '耮',
'耧' => '耬',
'耸' => '聳',
'脶' => '腡',
'脸' => '臉',
'腊' => '臘',
+'腘' => '膕',
'腭' => '齶',
'腻' => '膩',
'腼' => '靦',
'荚' => '莢',
'荛' => '蕘',
'荜' => '蓽',
+'荝' => '萴',
'荞' => '蕎',
'荟' => '薈',
'荠' => '薺',
'蚀' => '蝕',
'蚁' => '蟻',
'蚂' => '螞',
+'蚃' => '蠁',
'蚕' => '蠶',
'蚬' => '蜆',
'蛊' => '蠱',
'裢' => '褳',
'裣' => '襝',
'裤' => '褲',
-'裥' => 'è¥\87',
+'裥' => 'è¥\89',
'褛' => '褸',
'褴' => '襤',
+'襕' => '襴',
'见' => '見',
'观' => '觀',
'觃' => '覎',
'触' => '觸',
'觯' => '觶',
'訚' => '誾',
+'詟' => '讋',
'誉' => '譽',
'誊' => '謄',
'讠' => '訁',
'颠' => '顛',
'颡' => '顙',
'颢' => '顥',
+'颣' => '纇',
'颤' => '顫',
'颥' => '顬',
'颦' => '顰',
'髋' => '髖',
'髌' => '髕',
'鬓' => '鬢',
+'鬶' => '鬹',
'魇' => '魘',
'魉' => '魎',
'鱼' => '魚',
'鲳' => '鯧',
'鲴' => '鯝',
'鲵' => '鯢',
-'鲶' => '鯰',
'鲷' => '鯛',
'鲸' => '鯨',
'鲹' => '鰺',
'龚' => '龔',
'龛' => '龕',
'龟' => '龜',
+'𠆲' => '儣',
+'𠆿' => '𠌥',
+'𠉂' => '㒓',
+'𠉗' => '𠏢',
+'𠚳' => '𠠎',
+'𠛅' => '剾',
+'𠛆' => '𠞆',
'𠮶' => '嗰',
+'𠯟' => '哯',
+'𠯠' => '噅',
+'𠲥' => '𡅏',
+'𠴢' => '𡄔',
+'𠵸' => '𡄣',
+'𠵾' => '㗲',
+'𡋀' => '𡓾',
+'𡋗' => '𡑭',
'𡒄' => '壈',
+'𡝠' => '㜷',
+'𡞱' => '㜢',
+'𡭜' => '𡮉',
+'𡭬' => '𡮣',
+'𡶴' => '嵼',
+'𢋈' => '㢝',
+'𢘝' => '𢣚',
+'𢘞' => '𢣭',
+'𢙓' => '懀',
+'𢛯' => '㦎',
+'𢫊' => '𢷮',
+'𢫞' => '𢶫',
+'𢫬' => '摋',
+'𢬦' => '𢹿',
+'𢭏' => '擣',
+'𢽾' => '斅',
+'𣆐' => '曥',
+'𣍨' => '𦢈',
+'𣍯' => '腪',
+'𣍰' => '脥',
+'𣎑' => '臗',
+'𣐤' => '欍',
+'𣑶' => '𣠲',
+'𣗋' => '欓',
+'𣘓' => '𣞻',
+'𣘴' => '檭',
+'𣘷' => '𣝕',
+'𣭤' => '𣯴',
+'𣶩' => '澅',
+'𣶫' => '𣿉',
+'𣸣' => '濆',
+'𣺼' => '灙',
+'𣺽' => '𤁣',
+'𣽷' => '瀃',
+'𤆡' => '熓',
+'𤇃' => '爄',
+'𤇄' => '熌',
+'𤈶' => '熉',
+'𤈷' => '㷿',
+'𤊀' => '𤒎',
+'𤋏' => '熡',
+'𤞤' => '玁',
+'𤠋' => '㺏',
+'𤦀' => '瓕',
+'𤳄' => '𤳸',
+'𤶧' => '𤸫',
+'𤽯' => '㿧',
+'𤾀' => '皟',
+'𥅘' => '𥌃',
+'𥅴' => '䀹',
+'𥆧' => '瞤',
+'𥇢' => '䁪',
+'𥐟' => '礒',
+'𥐯' => '𥖅',
+'𥐰' => '𥕥',
+'𥐻' => '碙',
+'𥧂' => '𥨐',
+'𥬀' => '䉙',
+'𥬞' => '籋',
+'𥬠' => '篘',
+'𥭉' => '𥵊',
+'𥮋' => '𥸠',
+'𥮜' => '䉲',
+'𥱔' => '𥵃',
+'𥹥' => '𥼽',
+'𥺅' => '䊭',
+'𥺇' => '𥽖',
+'𦈈' => '𥿊',
+'𦈉' => '緷',
+'𦈋' => '綇',
+'𦈌' => '綀',
+'𦈎' => '繟',
+'𦈏' => '緍',
+'𦈐' => '縺',
+'𦈑' => '緸',
+'𦈒' => '𦂅',
+'𦈓' => '䋿',
+'𦈔' => '縎',
+'𦈕' => '緰',
'𦈖' => '䌈',
+'𦈗' => '𦃄',
+'𦈘' => '䌋',
+'𦈙' => '䌰',
+'𦈚' => '縬',
+'𦈛' => '繓',
+'𦈜' => '䌖',
+'𦈝' => '繏',
+'𦈞' => '䌟',
+'𦈟' => '䌝',
+'𦈠' => '䌥',
+'𦈡' => '繻',
+'𦛨' => '朥',
+'𦝼' => '膢',
+'𦟗' => '𦣎',
+'𦨩' => '𦪽',
+'𦰴' => '䕳',
+'𧉞' => '䗿',
+'𧒭' => '𧔥',
+'𧮪' => '詀',
+'𧳕' => '𧳟',
+'𧹑' => '䞈',
+'𧹓' => '𧶔',
+'𧹕' => '䝻',
+'𧹖' => '賟',
+'𧹗' => '贃',
+'𧿈' => '𨇁',
+'𨀱' => '𨄣',
+'𨁴' => '𨅍',
+'𨂺' => '𨈊',
+'𨄄' => '𨈌',
+'𨅫' => '𨇞',
+'𨅬' => '躝',
+'𨉗' => '軉',
+'𨐅' => '軗',
+'𨐆' => '𨊻',
+'𨐇' => '𨏠',
+'𨐈' => '輄',
+'𨐉' => '𨎮',
+'𨐊' => '𨏥',
+'𨑹' => '䢨',
+'𨤰' => '𨤻',
'𨰾' => '鎷',
'𨰿' => '釳',
'𨱀' => '𨥛',
'𨱃' => '鈲',
'𨱄' => '鈯',
'𨱅' => '鉁',
+'𨱆' => '龯',
'𨱇' => '銶',
'𨱈' => '鋉',
'𨱉' => '鍄',
'𨱎' => '鍮',
'𨱏' => '鎝',
'𨱐' => '𨫒',
+'𨱑' => '鐄',
'𨱒' => '鏉',
'𨱓' => '鐎',
'𨱔' => '鐏',
'𨱕' => '𨮂',
+'𨱖' => '䥩',
+'𨷿' => '䦳',
+'𨸀' => '𨳕',
+'𨸁' => '𨳑',
'𨸂' => '閍',
'𨸃' => '閐',
+'𨸄' => '䦘',
+'𨸅' => '𨴗',
+'𨸆' => '𨵩',
+'𨸇' => '𨵸',
+'𨸉' => '𨶀',
+'𨸊' => '𨶏',
+'𨸋' => '𨶲',
+'𨸌' => '𨶮',
+'𨸎' => '𨷲',
+'𨸘' => '𨽏',
+'𨸟' => '䧢',
'𩏼' => '䪏',
'𩏽' => '𩏪',
'𩏾' => '𩎢',
'𩙮' => '䬘',
'𩙯' => '䬝',
'𩙰' => '𩙈',
+'𩟿' => '𩚛',
+'𩠀' => '𩚥',
+'𩠁' => '𩚵',
+'𩠂' => '𩛆',
+'𩠃' => '𩛩',
'𩠅' => '𩟐',
'𩠆' => '𩜦',
'𩠇' => '䭀',
'𩠈' => '䭃',
+'𩠉' => '𩜇',
+'𩠊' => '𩜵',
'𩠋' => '𩝔',
'𩠌' => '餸',
+'𩠎' => '𩞄',
+'𩠏' => '𩞦',
+'𩠠' => '𩠴',
'𩧦' => '𩡺',
'𩧨' => '駎',
'𩧩' => '𩤊',
'𩨄' => '騪',
'𩨅' => '𩤸',
'𩨆' => '𩤙',
+'𩨇' => '䮫',
'𩨈' => '騟',
'𩨉' => '𩤲',
'𩨊' => '騚',
'𩨋' => '𩥄',
'𩨌' => '𩥑',
'𩨍' => '𩥇',
+'𩨎' => '龭',
'𩨏' => '䮳',
'𩨐' => '𩧆',
+'𩬣' => '𩭙',
+'𩬤' => '𩰀',
+'𩯒' => '𩯳',
+'𩲒' => '𩳤',
'𩽹' => '魥',
'𩽺' => '𩵩',
'𩽻' => '𩵹',
'𩽿' => '𩶰',
'𩾀' => '鮕',
'𩾁' => '鯄',
+'𩾂' => '䲖',
'𩾃' => '鮸',
'𩾄' => '𩷰',
'𩾅' => '𩸃',
'𪎊' => '麨',
'𪎋' => '䴴',
'𪎌' => '麳',
+'𪎍' => '𪋿',
+'𪔭' => '𪔵',
'𪚏' => '𪘀',
'𪚐' => '𪘯',
'𪞝' => '凙',
'𫌀' => '襀',
'𫌨' => '覼',
'𫍙' => '訑',
-'𫍟' => '𧦧',
+'𫍟' => '詑',
'𫍢' => '譊',
'𫍰' => '諰',
'𫍲' => '謏',
'𫓧' => '鈇',
'𫓩' => '鏦',
'𫔎' => '鐍',
+'𫖸' => '願',
'𫗠' => '餦',
'𫗦' => '餔',
'𫗧' => '餗',
'优游' => '優遊',
'兀术' => '兀朮',
'元凶' => '元兇',
-'充饥' => '充饑',
'兆个' => '兆個',
'兆余' => '兆餘',
'凶刀' => '兇刀',
'出于' => '出於',
'出游' => '出遊',
'出丑' => '出醜',
-'出锤' => '出鎚',
'分占' => '分佔',
'分别致' => '分别致',
'分半钟' => '分半鐘',
'古书云' => '古書云',
'古書云' => '古書云',
'古柯咸' => '古柯鹹',
+'古柯碱' => '古柯鹼',
'古朴' => '古樸',
'古语云' => '古語云',
'古語云' => '古語云',
'吹干' => '吹乾',
'吹发' => '吹髮',
'吹胡' => '吹鬍',
-'吾为之范我驰驱' => '吾爲之範我馳驅',
+'吾爲之范我驰驱' => '吾爲之範我馳驅',
'吕后' => '呂后',
'呂后' => '呂后',
'呆呆傻傻' => '呆呆傻傻',
'严于' => '嚴於',
'严丝合缝' => '嚴絲合縫',
'嚼谷' => '嚼穀',
-'å\9b\89å\9b\89苏苏' => '囉囉囌囌',
-'å\9b\89苏' => '囉囌',
+'å\95°å\95°苏苏' => '囉囉囌囌',
+'å\95°苏' => '囉囌',
'嘱托' => '囑託',
'四个' => '四個',
'四出刊' => '四出刊',
'城里' => '城裡',
'埔裡社撫墾局' => '埔裏社撫墾局',
'埔裏社撫墾局' => '埔裏社撫墾局',
-'埔里社抚垦局' => '埔裏社撫墾局',
+'埔裏社抚垦局' => '埔裏社撫墾局',
'基干' => '基幹',
'基于' => '基於',
'基准' => '基準',
'大赞' => '大讚',
'大周折' => '大週摺',
'大金发苔' => '大金髮苔',
-'大锤' => '大鎚',
'大钟' => '大鐘',
'大只' => '大隻',
'大风后' => '大風後',
'天文钟' => '天文鐘',
'天历' => '天曆',
'天历史' => '天歷史',
+'天然碱' => '天然鹼',
'天翻地覆' => '天翻地覆',
'天覆地载' => '天覆地載',
'太仆' => '太僕',
'好丑' => '好醜',
'好斗' => '好鬥',
'如果干' => '如果幹',
-'如饥似渴' => '如饑似渴',
'妖后' => '妖后',
'妙药' => '妙藥',
'始于' => '始於',
'弘历史' => '弘歷史',
'弱于' => '弱於',
'弱水三千只取一瓢' => '弱水三千只取一瓢',
+'弱碱' => '弱鹼',
'张三丰' => '張三丰',
'張三丰' => '張三丰',
'张勋' => '張勳',
'强奸' => '強姦',
'强干' => '強幹',
'强于' => '強於',
+'强碱' => '強鹼',
'别口气' => '彆口氣',
'别强' => '彆強',
'别扭' => '彆扭',
'心脏' => '心臟',
'心荡' => '心蕩',
'心药' => '心藥',
-'心里面' => '心裏面',
'心里' => '心裡',
'心长发短' => '心長髮短',
'心余' => '心餘',
'手表达' => '手表達',
'手表露' => '手表露',
'手表面' => '手表面',
-'手里剑' => '手裏劍',
+'手裏剑' => '手裏劍',
'手里' => '手裡',
'手表' => '手錶',
'手松' => '手鬆',
'抗癌药' => '抗癌藥',
'抗御' => '抗禦',
'抗药' => '抗藥',
+'抗碱' => '抗鹼',
'折向往' => '折向往',
'折子戏' => '折子戲',
'折戟沈河' => '折戟沈河',
'挂名' => '掛名',
'挂帘' => '掛帘',
'挂历' => '掛曆',
-'æ\8c\82é\92©' => '掛鈎',
+'æ\8c\82é\88\8e' => '掛鈎',
'挂钟' => '掛鐘',
'采下' => '採下',
'采伐' => '採伐',
'水里浊水溪' => '水里濁水溪',
'水里鄉' => '水里鄉',
'水里乡' => '水里鄉',
+'水碱' => '水鹼',
'永历' => '永曆',
'永历史' => '永歷史',
'永志不忘' => '永誌不忘',
'求知欲' => '求知慾',
'求签' => '求籤',
'求道于盲' => '求道於盲',
+'汗碱' => '汗鹼',
'池里' => '池裡',
'污蔑' => '污衊',
'汲于' => '汲於',
'滃郁' => '滃鬱',
'滑借' => '滑藉',
'汇丰' => '滙豐',
-'卤味' => '滷味',
-'卤水' => '滷水',
-'卤汁' => '滷汁',
-'卤湖' => '滷湖',
-'卤肉' => '滷肉',
-'卤菜' => '滷菜',
-'卤蛋' => '滷蛋',
-'卤制' => '滷製',
-'卤鸡' => '滷雞',
-'卤面' => '滷麵',
+'滷制' => '滷製',
+'滷面' => '滷麵',
'满拼自尽' => '滿拚自盡',
'满满当当' => '滿滿當當',
'满头洋发' => '滿頭洋髮',
'煎面' => '煎麵',
'烟卷' => '煙捲',
'烟斗丝' => '煙斗絲',
+'烟碱' => '煙鹼',
'照占' => '照佔',
'照入签' => '照入籤',
'照准' => '照準',
'熊杰' => '熊杰',
'荧郁' => '熒鬱',
'熬药' => '熬藥',
-'ç\82\96药' => '燉藥',
+'ç\87\89药' => '燉藥',
'燎发' => '燎髮',
'烧干' => '燒乾',
+'烧碱' => '燒鹼',
'燕几' => '燕几',
'燕巢于幕' => '燕巢於幕',
'燕燕于飞' => '燕燕于飛',
'发松' => '發鬆',
'发面' => '發麵',
'白干' => '白乾',
-'白兔擣药' => '白兔擣藥',
+'白兔𢭏药' => '白兔擣藥',
'白干儿' => '白干兒',
'白术' => '白朮',
'白朴' => '白樸',
'石英钟表' => '石英鐘錶',
'石莼' => '石蓴',
'石钟乳' => '石鐘乳',
+'石碱' => '石鹼',
'矽谷' => '矽谷',
'研制' => '研製',
'砰当' => '砰噹',
'朱红色' => '硃紅色',
'朱色' => '硃色',
'朱谕' => '硃諭',
+'硫化碱' => '硫化鹼',
'硬干' => '硬幹',
'确瘠' => '确瘠',
'碑志' => '碑誌',
'积极参加' => '積极參加',
'积淀' => '積澱',
'积谷' => '積穀',
-'积谷防饥' => '積穀防饑',
'积郁' => '積鬱',
'稳占' => '穩佔',
'稳扎' => '穩紮',
'纡郁' => '紆鬱',
'纳征' => '納徵',
'纯朴' => '純樸',
+'纯碱' => '純鹼',
'纸扎' => '紙紮',
'素朴' => '素樸',
'素发' => '素髮',
'考试' => '考試',
'而克制' => '而剋制',
'耍斗' => '耍鬥',
+'耐碱' => '耐鹼',
'耕佣' => '耕傭',
'耕获' => '耕穫',
'耳余' => '耳餘',
'花马吊嘴' => '花馬弔嘴',
'花哄' => '花鬨',
'苑里' => '苑裡',
+'苛性碱' => '苛性鹼',
'若干' => '若干',
'苦干' => '苦幹',
'苦药' => '苦藥',
'草药' => '草藥',
'荐居' => '荐居',
'荐臻' => '荐臻',
-'è\8d\90饥' => '荐饑',
+'è\8d\90é¥\91' => '荐饑',
'荷花淀' => '荷花澱',
'庄上' => '莊上',
'庄主' => '莊主',
'菠萝干' => '菠蘿乾',
'华严钟' => '華嚴鐘',
'华发' => '華髮',
+'菸碱' => '菸鹼',
'萬一只' => '萬一只',
'万一只' => '萬一只',
'万个' => '萬個',
'姜饼' => '薑餅',
'姜黄' => '薑黃',
'薙发' => '薙髮',
-'薝卜' => '薝蔔',
+'薝蔔' => '薝蔔',
'苧悴' => '薴悴',
'薴烯' => '薴烯',
'苧烯' => '薴烯',
'蕴含着' => '蘊含著',
'蕴涵着' => '蘊涵著',
'苹果干' => '蘋果乾',
-'萝卜' => '蘿蔔',
-'萝卜干' => '蘿蔔乾',
+'萝蔔干' => '蘿蔔乾',
'虎须' => '虎鬚',
'虎斗' => '虎鬥',
'号志' => '號誌',
'蛏干' => '蟶乾',
'蚁后' => '蟻后',
'蟻后' => '蟻后',
-'è \81干' => '蠁幹',
+'è\9a\83干' => '蠁幹',
'蛮干' => '蠻幹',
'血拼' => '血拚',
'血余' => '血餘',
'被发阳狂' => '被髮陽狂',
'裁并' => '裁併',
'裁制' => '裁製',
-'里手' => '裏手',
-'里海' => '裏海',
+'裏勾外连' => '裏勾外連',
+'裏手' => '裏手',
+'裏海' => '裏海',
'补于' => '補於',
'补药' => '補藥',
'补血药' => '補血藥',
'资金占用' => '資金占用',
'贾后' => '賈后',
'賈后' => '賈后',
-'赈饥' => '賑饑',
'赏赞' => '賞讚',
'贤后' => '賢后',
'賢后' => '賢后',
'酒醴曲蘖' => '酒醴麴櫱',
'酒曲' => '酒麴',
'酥松' => '酥鬆',
+'酸碱' => '酸鹼',
'醇朴' => '醇樸',
'醉于' => '醉於',
'醋坛' => '醋罈',
'重复' => '重複',
'重托' => '重託',
'重游' => '重遊',
-'重锤' => '重鎚',
'野姜' => '野薑',
'野游' => '野遊',
'厘出' => '釐出',
'金装玉里' => '金裝玉裡',
'金表' => '金錶',
'金钟' => '金鐘',
+'金鸡纳碱' => '金雞納鹼',
'金马仑道' => '金馬崙道',
'金发' => '金髮',
-'钉锤' => '釘鎚',
-'钩心斗角' => '鈎心鬥角',
+'鈎心斗角' => '鈎心鬥角',
'银朱' => '銀硃',
'银发' => '銀髮',
'铜范' => '銅範',
'钱谷' => '錢穀',
'钱范' => '錢範',
'钱庄' => '錢莊',
-'é\94¦ç»£花园' => '錦綉花園',
+'é\94¦ç¶\89花园' => '錦綉花園',
'锦绣' => '錦繡',
'表停' => '錶停',
'表冠' => '錶冠',
'锻炼出' => '鍛鍊出',
'锲而不舍' => '鍥而不捨',
'镰仓' => '鎌倉',
-'锤儿' => '鎚兒',
-'锤子' => '鎚子',
-'锤头' => '鎚頭',
'锈病' => '鏽病',
'锈菌' => '鏽菌',
'锈蚀' => '鏽蝕',
'钟鼓' => '鐘鼓',
'铁杆' => '鐵杆',
'铁栏杆' => '鐵欄杆',
-'铁锤' => '鐵鎚',
'铁锈' => '鐵鏽',
'铁钟' => '鐵鐘',
'铸钟' => '鑄鐘',
'喂鱼' => '餵魚',
'喂鸭' => '餵鴨',
'喂鹅' => '餵鵝',
-'饥寒' => '饑寒',
-'饥民' => '饑民',
-'饥渴' => '饑渴',
-'饥溺' => '饑溺',
-'饥荒' => '饑荒',
-'饥饱' => '饑飽',
-'饥馑' => '饑饉',
+'饑荒' => '饑荒',
+'饑馑' => '饑饉',
'首当其冲' => '首當其衝',
'首发' => '首發',
'首只' => '首隻',
'鱼干' => '魚乾',
'鱼松' => '魚鬆',
'鲸须' => '鯨鬚',
-'é²\87鱼' => '鯰魚',
+'鯰鱼' => '鯰魚',
'鸠占鹊巢' => '鳩佔鵲巢',
'凤凰于飞' => '鳳凰于飛',
'凤梨干' => '鳳梨乾',
'咸鸭蛋' => '鹹鴨蛋',
'咸卤' => '鹹鹵',
'咸咸' => '鹹鹹',
+'碱化' => '鹼化',
+'碱土金属' => '鹼土金屬',
+'碱地' => '鹼地',
+'碱度' => '鹼度',
+'碱性' => '鹼性',
+'碱水' => '鹼水',
+'碱液' => '鹼液',
+'碱熔' => '鹼熔',
+'碱石灰' => '鹼石灰',
+'碱纤维素' => '鹼纖維素',
+'碱金属' => '鹼金屬',
+'碱类' => '鹼類',
'盐打怎么咸' => '鹽打怎麼鹹',
-'盐卤' => '鹽滷',
'盐余' => '鹽餘',
+'盐碱土' => '鹽鹼土',
+'盐碱滩' => '鹽鹼灘',
'丽于' => '麗於',
'曲尘' => '麴塵',
'曲蘖' => '麴櫱',
);
$zh2Hans = array(
+'㑯' => '㑔',
+'㑳' => '㑇',
+'㒓' => '𠉂',
+'㓨' => '刾',
+'㗲' => '𠵾',
+'㘚' => '㘎',
+'㜄' => '㚯',
+'㜏' => '㛣',
+'㜢' => '𡞱',
+'㜷' => '𡝠',
'㞞' => '𪨊',
'㠏' => '㟆',
+'㢝' => '𢋈',
+'㥮' => '㤘',
+'㦎' => '𢛯',
'㩜' => '㨫',
+'㩳' => '㧐',
+'㷿' => '𤈷',
+'㺏' => '𤠋',
+'㿧' => '𤽯',
+'䀹' => '𥅴',
+'䁪' => '𥇢',
+'䁻' => '䀥',
+'䉙' => '𥬀',
'䉬' => '𫂈',
+'䉲' => '𥮜',
+'䊭' => '𥺅',
'䊷' => '䌶',
'䋙' => '䌺',
+'䋚' => '䌻',
'䋻' => '䌾',
+'䋿' => '𦈓',
+'䌈' => '𦈖',
+'䌋' => '𦈘',
+'䌖' => '𦈜',
+'䌝' => '𦈟',
+'䌟' => '𦈞',
+'䌥' => '𦈠',
+'䌰' => '𦈙',
+'䕳' => '𦰴',
+'䗿' => '𧉞',
+'䙡' => '䙌',
+'䜀' => '䜧',
+'䝻' => '𧹕',
'䝼' => '䞍',
+'䞈' => '𧹑',
+'䢨' => '𨑹',
+'䥇' => '䦂',
+'䥩' => '𨱖',
+'䥱' => '䥾',
+'䦘' => '𨸄',
+'䦛' => '䦶',
+'䦟' => '䦷',
+'䦳' => '𨷿',
+'䧢' => '𨸟',
+'䪏' => '𩏼',
+'䪗' => '𩐀',
+'䪘' => '𩏿',
+'䫴' => '𩖗',
+'䬘' => '𩙮',
+'䬝' => '𩙯',
+'䬞' => '𩙧',
+'䭀' => '𩠇',
+'䭃' => '𩠈',
+'䭿' => '𩧭',
+'䮝' => '𩧰',
+'䮞' => '𩨁',
+'䮠' => '𩧿',
+'䮫' => '𩨇',
+'䮳' => '𩨏',
+'䮾' => '𩧪',
'䯀' => '䯅',
'䰾' => '鲃',
+'䱙' => '𩾈',
+'䱬' => '𩾊',
+'䱰' => '𩾋',
+'䱷' => '䲣',
'䱽' => '䲝',
'䲁' => '鳚',
+'䲖' => '𩾂',
+'䲰' => '𪉂',
+'䴉' => '鹮',
+'䴬' => '𪎈',
+'䴴' => '𪎋',
'丟' => '丢',
'並' => '并',
'乾' => '干',
'係' => '系',
'俔' => '伣',
'俠' => '侠',
+'俥' => '伡',
'倀' => '伥',
'倆' => '俩',
'倈' => '俫',
'們' => '们',
'倖' => '幸',
'倫' => '伦',
+'倲' => '㑈',
'偉' => '伟',
+'偑' => '㐽',
'側' => '侧',
'偵' => '侦',
'偽' => '伪',
'儕' => '侪',
'儘' => '尽',
'償' => '偿',
+'儣' => '𠆲',
'優' => '优',
'儲' => '储',
'儷' => '俪',
'剴' => '剀',
'創' => '创',
'剷' => '铲',
+'剾' => '𠛅',
'劃' => '划',
'劇' => '剧',
'劉' => '刘',
'卻' => '却',
'卽' => '即',
'厙' => '厍',
-'厠' => '厕',
'厤' => '历',
'厭' => '厌',
'厲' => '厉',
'呂' => '吕',
'咼' => '呙',
'員' => '员',
+'哯' => '𠯟',
'唄' => '呗',
'唚' => '吣',
'問' => '问',
-'啓' => '启',
'啞' => '哑',
'啟' => '启',
'啢' => '唡',
'嗹' => '𪡏',
'嘆' => '叹',
'嘍' => '喽',
+'嘓' => '啯',
'嘔' => '呕',
'嘖' => '啧',
'嘗' => '尝',
'嘸' => '呒',
'嘽' => '啴',
'噁' => '恶',
+'噅' => '𠯠',
'噓' => '嘘',
'噚' => '㖊',
'噝' => '咝',
'囂' => '嚣',
'囅' => '冁',
'囈' => '呓',
+'囉' => '啰',
'囌' => '苏',
'囑' => '嘱',
'囪' => '囱',
'墮' => '堕',
'墰' => '坛',
'墳' => '坟',
-'墻' => '墙',
'墾' => '垦',
'壇' => '坛',
'壈' => '𡒄',
'奧' => '奥',
'奩' => '奁',
'奪' => '夺',
-'奬' => '奖',
'奮' => '奋',
'奼' => '姹',
'妝' => '妆',
'婭' => '娅',
'媧' => '娲',
'媯' => '妫',
+'媰' => '㛀',
'媼' => '媪',
'媽' => '妈',
'嫗' => '妪',
'嫵' => '妩',
'嫻' => '娴',
'嫿' => '婳',
-'å¬\80' => '妫',
+'å¬\83' => 'åª',
'嬈' => '娆',
'嬋' => '婵',
'嬌' => '娇',
'嬪' => '嫔',
'嬰' => '婴',
'嬸' => '婶',
+'孋' => '㛤',
'孌' => '娈',
'孫' => '孙',
'學' => '学',
'崬' => '岽',
'嵐' => '岚',
'嵗' => '岁',
+'嵼' => '𡶴',
'嶁' => '嵝',
'嶄' => '崭',
'嶇' => '岖',
'彎' => '弯',
'彙' => '汇',
'彞' => '彝',
+'彠' => '彟',
'彥' => '彦',
+'彲' => '彨',
'後' => '后',
'徑' => '径',
'從' => '从',
'慚' => '惭',
'慟' => '恸',
'慣' => '惯',
-'慤' => '悫',
'慪' => '怄',
'慫' => '怂',
'慮' => '虑',
'憮' => '怃',
'憲' => '宪',
'憶' => '忆',
+'懀' => '𢙓',
'懇' => '恳',
'應' => '应',
'懌' => '怿',
'捲' => '卷',
'掃' => '扫',
'掄' => '抡',
+'掆' => '㧏',
'掗' => '挜',
'掙' => '挣',
'掛' => '挂',
'搗' => '捣',
'搵' => '揾',
'搶' => '抢',
+'摋' => '𢫬',
'摑' => '掴',
'摜' => '掼',
'摟' => '搂',
'擔' => '担',
'據' => '据',
'擠' => '挤',
+'擣' => '𢭏',
'擬' => '拟',
'擯' => '摈',
'擰' => '拧',
'擺' => '摆',
'擻' => '擞',
'擼' => '撸',
+'擽' => '㧰',
'擾' => '扰',
'攄' => '摅',
'攆' => '撵',
'數' => '数',
'斂' => '敛',
'斃' => '毙',
+'斅' => '𢽾',
+'斆' => '敩',
'斕' => '斓',
'斬' => '斩',
'斷' => '断',
'曏' => '向',
'曖' => '暧',
'曠' => '旷',
+'曥' => '𣆐',
'曨' => '昽',
'曬' => '晒',
'書' => '书',
'會' => '会',
+'朥' => '𦛨',
'朧' => '胧',
'朮' => '术',
'東' => '东',
'棖' => '枨',
'棗' => '枣',
'棟' => '栋',
+'棡' => '㭎',
'棧' => '栈',
'棲' => '栖',
'棶' => '梾',
'椏' => '桠',
+'椲' => '㭏',
'楊' => '杨',
'楓' => '枫',
'楨' => '桢',
'槧' => '椠',
'槨' => '椁',
'槳' => '桨',
+'槶' => '椢',
+'槼' => '椝',
'樁' => '桩',
'樂' => '乐',
'樅' => '枞',
'樓' => '楼',
'標' => '标',
'樞' => '枢',
+'樢' => '㭤',
'樣' => '样',
+'樫' => '㭴',
+'樳' => '桪',
'樸' => '朴',
'樹' => '树',
'樺' => '桦',
+'樿' => '椫',
'橈' => '桡',
'橋' => '桥',
'機' => '机',
'檟' => '槚',
'檢' => '检',
'檣' => '樯',
+'檭' => '𣘴',
'檮' => '梼',
'檯' => '台',
'檳' => '槟',
'欄' => '栏',
'欅' => '榉',
'權' => '权',
+'欍' => '𣐤',
'欏' => '椤',
'欒' => '栾',
+'欓' => '𣗋',
'欖' => '榄',
'欞' => '棂',
'欽' => '钦',
'殰' => '㱩',
'殲' => '歼',
'殺' => '杀',
-'殻' => '壳',
'殼' => '壳',
'毀' => '毁',
'毆' => '殴',
'淺' => '浅',
'渙' => '涣',
'減' => '减',
+'渢' => '沨',
'渦' => '涡',
'測' => '测',
'渾' => '浑',
'準' => '准',
'溝' => '沟',
'溫' => '温',
+'溳' => '涢',
'滄' => '沧',
'滅' => '灭',
'滌' => '涤',
'滬' => '沪',
'滯' => '滞',
'滲' => '渗',
-'滷' => '卤',
'滸' => '浒',
'滻' => '浐',
'滾' => '滚',
'滿' => '满',
'漁' => '渔',
+'漊' => '溇',
'漚' => '沤',
'漢' => '汉',
'漣' => '涟',
'潁' => '颍',
'潑' => '泼',
'潔' => '洁',
-'潙' => '沩',
'潛' => '潜',
'潤' => '润',
'潯' => '浔',
'潷' => '滗',
'潿' => '涠',
'澀' => '涩',
+'澅' => '𣶩',
'澆' => '浇',
'澇' => '涝',
'澐' => '沄',
'澾' => '㳠',
'濁' => '浊',
'濃' => '浓',
+'濄' => '㳡',
+'濆' => '𣸣',
'濕' => '湿',
'濘' => '泞',
+'濜' => '浕',
'濟' => '济',
'濤' => '涛',
+'濧' => '㳔',
'濫' => '滥',
'濰' => '潍',
'濱' => '滨',
'濺' => '溅',
'濼' => '泺',
'濾' => '滤',
+'瀂' => '澛',
+'瀃' => '𣽷',
'瀅' => '滢',
'瀆' => '渎',
'瀇' => '㲿',
'灑' => '洒',
'灕' => '漓',
'灘' => '滩',
+'灙' => '𣺼',
'灝' => '灏',
'灠' => '漤',
+'灡' => '㳕',
'灣' => '湾',
'灤' => '滦',
'灧' => '滟',
'煬' => '炀',
'煱' => '㶽',
'熅' => '煴',
+'熉' => '𤈶',
+'熌' => '𤇄',
'熒' => '荧',
+'熓' => '𤆡',
'熗' => '炝',
+'熡' => '𤋏',
'熱' => '热',
'熲' => '颎',
'熾' => '炽',
'燁' => '烨',
'燈' => '灯',
-'燉' => '炖',
'燒' => '烧',
'燙' => '烫',
'燜' => '焖',
'燶' => '㶶',
'燼' => '烬',
'燾' => '焘',
+'爄' => '𤇃',
'爍' => '烁',
'爐' => '炉',
'爛' => '烂',
'爭' => '争',
-'爲' => '为',
'爺' => '爷',
'爾' => '尔',
'牆' => '墙',
'獻' => '献',
'獼' => '猕',
'玀' => '猡',
+'玁' => '𤞤',
'現' => '现',
'琺' => '珐',
'琿' => '珲',
'璣' => '玑',
'璦' => '瑷',
'璫' => '珰',
+'璯' => '㻅',
'環' => '环',
'璽' => '玺',
'瓊' => '琼',
'瓏' => '珑',
'瓔' => '璎',
+'瓕' => '𤦀',
'瓚' => '瓒',
'甌' => '瓯',
'甕' => '瓮',
'產' => '产',
-'産' => '产',
'甦' => '苏',
'甯' => '宁',
'畝' => '亩',
'瘮' => '瘆',
'瘲' => '疭',
'瘺' => '瘘',
-'瘻' => '瘘',
'療' => '疗',
'癆' => '痨',
'癇' => '痫',
'癲' => '癫',
'發' => '发',
'皚' => '皑',
+'皟' => '𤾀',
'皰' => '疱',
'皸' => '皲',
'皺' => '皱',
'瞘' => '眍',
'瞜' => '䁖',
'瞞' => '瞒',
+'瞤' => '𥆧',
'瞭' => '了',
'瞶' => '瞆',
'瞼' => '睑',
'硨' => '砗',
'硯' => '砚',
'碕' => '埼',
+'碙' => '𥐻',
'碩' => '硕',
'碭' => '砀',
'碸' => '砜',
'確' => '确',
'碼' => '码',
+'碽' => '䂵',
'磑' => '硙',
'磚' => '砖',
+'磠' => '硵',
'磣' => '碜',
'磧' => '碛',
'磯' => '矶',
'磽' => '硗',
+'礄' => '硚',
'礆' => '硷',
'礎' => '础',
+'礒' => '𥐟',
'礙' => '碍',
'礦' => '矿',
'礪' => '砺',
'竄' => '窜',
'竅' => '窍',
'竇' => '窦',
-'竈' => '灶',
'竊' => '窃',
-'竪' => '竖',
'競' => '竞',
'筆' => '笔',
'筍' => '笋',
'築' => '筑',
'篋' => '箧',
'篔' => '筼',
+'篘' => '𥬠',
'篤' => '笃',
'篩' => '筛',
'篳' => '筚',
'簽' => '签',
'簾' => '帘',
'籃' => '篮',
+'籋' => '𥬞',
'籌' => '筹',
+'籔' => '䉤',
'籙' => '箓',
+'籛' => '篯',
'籜' => '箨',
'籟' => '籁',
'籠' => '笼',
'統' => '统',
'絲' => '丝',
'絳' => '绛',
-'絶' => '绝',
'絹' => '绢',
'絺' => '𫄨',
+'綀' => '𦈌',
'綁' => '绑',
'綃' => '绡',
'綆' => '绠',
+'綇' => '𦈋',
'綈' => '绨',
-'綉' => '绣',
'綌' => '绤',
'綏' => '绥',
'綐' => '䌼',
'綠' => '绿',
'綢' => '绸',
'綣' => '绻',
-'綫' => '线',
'綬' => '绶',
'維' => '维',
'綯' => '绹',
'綰' => '绾',
'綱' => '纲',
'網' => '网',
-'綳' => '绷',
'綴' => '缀',
'綵' => '彩',
'綸' => '纶',
'緇' => '缁',
'緊' => '紧',
'緋' => '绯',
-'ç·\91' => '绿',
+'ç·\8d' => 'ð¦\88\8f',
'緒' => '绪',
'緓' => '绬',
-'緔' => '绱',
'緗' => '缃',
'緘' => '缄',
'緙' => '缂',
'緩' => '缓',
'緬' => '缅',
'緯' => '纬',
+'緰' => '𦈕',
'緱' => '缑',
'緲' => '缈',
'練' => '练',
'緶' => '缏',
+'緷' => '𦈉',
+'緸' => '𦈑',
'緹' => '缇',
'緻' => '致',
'縈' => '萦',
'縉' => '缙',
'縊' => '缢',
'縋' => '缒',
+'縎' => '𦈔',
'縐' => '绉',
'縑' => '缣',
'縕' => '缊',
'縞' => '缟',
'縟' => '缛',
'縣' => '县',
-'縧' => '绦',
'縫' => '缝',
+'縬' => '𦈚',
'縭' => '缡',
'縮' => '缩',
'縱' => '纵',
'縶' => '絷',
'縷' => '缕',
'縹' => '缥',
+'縺' => '𦈐',
'總' => '总',
'績' => '绩',
'繃' => '绷',
'繅' => '缫',
'繆' => '缪',
+'繏' => '𦈝',
'繐' => '穗',
'繒' => '缯',
+'繓' => '𦈛',
'織' => '织',
'繕' => '缮',
'繚' => '缭',
'繞' => '绕',
+'繟' => '𦈎',
'繡' => '绣',
'繢' => '缋',
'繩' => '绳',
'繪' => '绘',
'繫' => '系',
'繭' => '茧',
-'繮' => '缰',
'繯' => '缳',
'繰' => '缲',
'繳' => '缴',
'繸' => '䍁',
'繹' => '绎',
+'繻' => '𦈡',
'繼' => '继',
'繽' => '缤',
'繾' => '缱',
'繿' => '䍀',
'纁' => '𫄸',
+'纇' => '颣',
'纈' => '缬',
'纊' => '纩',
'續' => '续',
'羨' => '羡',
'義' => '义',
'習' => '习',
+'翬' => '翚',
'翹' => '翘',
+'翽' => '翙',
'耬' => '耧',
'耮' => '耢',
'聖' => '圣',
'脈' => '脉',
'脛' => '胫',
'脣' => '唇',
+'脥' => '𣍰',
'脫' => '脱',
'脹' => '胀',
'腎' => '肾',
'腖' => '胨',
'腡' => '脶',
'腦' => '脑',
+'腪' => '𣍯',
'腫' => '肿',
'腳' => '脚',
'腸' => '肠',
'膃' => '腽',
+'膕' => '腘',
'膚' => '肤',
'膠' => '胶',
+'膢' => '𦝼',
'膩' => '腻',
'膽' => '胆',
'膾' => '脍',
'臉' => '脸',
'臍' => '脐',
'臏' => '膑',
+'臗' => '𣎑',
'臘' => '腊',
'臚' => '胪',
'臟' => '脏',
'萇' => '苌',
'萊' => '莱',
'萬' => '万',
+'萴' => '荝',
'萵' => '莴',
'葉' => '叶',
'葒' => '荭',
'葤' => '荮',
'葦' => '苇',
-'葯' => '药',
'葷' => '荤',
-'蒓' => '莼',
'蒔' => '莳',
'蒞' => '莅',
'蒼' => '苍',
'蓯' => '苁',
'蓴' => '莼',
'蓽' => '荜',
-'蔔' => '卜',
'蔘' => '参',
'蔞' => '蒌',
'蔣' => '蒋',
'藝' => '艺',
'藥' => '药',
'藪' => '薮',
-'藴' => '蕴',
'藶' => '苈',
'藹' => '蔼',
'藺' => '蔺',
'蟲' => '虫',
'蟶' => '蛏',
'蟻' => '蚁',
+'蠁' => '蚃',
'蠅' => '蝇',
'蠆' => '虿',
'蠍' => '蝎',
'蠱' => '蛊',
'蠶' => '蚕',
'蠻' => '蛮',
-'衆' => '众',
'衊' => '蔑',
'術' => '术',
'衕' => '同',
'衚' => '胡',
'衛' => '卫',
'衝' => '冲',
-'衹' => '只',
'袞' => '衮',
'裊' => '袅',
-'裏' => '里',
'補' => '补',
'裝' => '装',
'裡' => '里',
'褻' => '亵',
'襀' => '𫌀',
'襆' => '幞',
-'è¥\87' => '裥',
+'è¥\89' => '裥',
'襏' => '袯',
'襖' => '袄',
'襝' => '裣',
'襬' => '䙓',
'襯' => '衬',
'襲' => '袭',
+'襴' => '襕',
'見' => '见',
'覎' => '觃',
'規' => '规',
'訶' => '诃',
'診' => '诊',
'註' => '注',
+'詀' => '𧮪',
'詁' => '诂',
'詆' => '诋',
'詎' => '讵',
'詐' => '诈',
+'詑' => '𫍟',
'詒' => '诒',
'詔' => '诏',
'評' => '评',
'誦' => '诵',
'誨' => '诲',
'說' => '说',
-'説' => '说',
'誰' => '谁',
'課' => '课',
'誶' => '谇',
'講' => '讲',
'謝' => '谢',
'謠' => '谣',
-'謡' => '谣',
'謨' => '谟',
'謫' => '谪',
'謬' => '谬',
-'謭' => '谫',
'謳' => '讴',
'謹' => '谨',
'謾' => '谩',
-'譅' => '䜧',
'證' => '证',
'譊' => '𫍢',
'譎' => '谲',
'譾' => '谫',
'讀' => '读',
'變' => '变',
+'讋' => '詟',
+'讌' => '䜩',
'讎' => '仇',
'讒' => '谗',
'讓' => '让',
'賚' => '赉',
'賜' => '赐',
'賞' => '赏',
+'賟' => '𧹖',
'賠' => '赔',
'賡' => '赓',
'賢' => '贤',
'賦' => '赋',
'賧' => '赕',
'質' => '质',
-'賫' => '赍',
'賬' => '账',
'賭' => '赌',
'賰' => '䞐',
'購' => '购',
'賽' => '赛',
'賾' => '赜',
+'贃' => '𧹗',
'贄' => '贽',
'贅' => '赘',
'贇' => '赟',
'贈' => '赠',
'贊' => '赞',
-'贋' => '赝',
'贍' => '赡',
'贏' => '赢',
'贐' => '赆',
'贖' => '赎',
'贗' => '赝',
'贛' => '赣',
-'贜' => '赃',
'赬' => '赪',
'趕' => '赶',
'趙' => '赵',
'躊' => '踌',
'躋' => '跻',
'躍' => '跃',
+'躎' => '䟢',
'躑' => '踯',
'躒' => '跞',
'躓' => '踬',
'躕' => '蹰',
'躚' => '跹',
+'躝' => '𨅬',
'躡' => '蹑',
'躥' => '蹿',
'躦' => '躜',
'躪' => '躏',
'軀' => '躯',
+'軉' => '𨉗',
'車' => '车',
'軋' => '轧',
'軌' => '轨',
'軑' => '轪',
'軒' => '轩',
'軔' => '轫',
+'軗' => '𨐅',
'軛' => '轭',
'軟' => '软',
'軤' => '轷',
'軼' => '轶',
'軾' => '轼',
'較' => '较',
+'輄' => '𨐈',
'輅' => '辂',
'輇' => '辁',
'輈' => '辀',
'鄺' => '邝',
'酇' => '酂',
'酈' => '郦',
-'醖' => '酝',
'醜' => '丑',
'醞' => '酝',
'醣' => '糖',
'釤' => '钐',
'釧' => '钏',
'釩' => '钒',
+'釳' => '𨰿',
'釵' => '钗',
'釷' => '钍',
'釹' => '钕',
'釺' => '钎',
+'釾' => '䥺',
'鈀' => '钯',
'鈁' => '钫',
'鈃' => '钘',
'鈇' => '𫓧',
'鈈' => '钚',
'鈉' => '钠',
+'鈋' => '𨱂',
'鈍' => '钝',
-'鈎' => '钩',
'鈐' => '钤',
'鈑' => '钣',
'鈒' => '钑',
'鈔' => '钞',
'鈕' => '钮',
'鈞' => '钧',
+'鈠' => '𨱁',
'鈣' => '钙',
'鈥' => '钬',
'鈦' => '钛',
'鈧' => '钪',
'鈮' => '铌',
+'鈯' => '𨱄',
'鈰' => '铈',
+'鈲' => '𨱃',
'鈳' => '钶',
'鈴' => '铃',
'鈷' => '钴',
'鈾' => '铀',
'鈿' => '钿',
'鉀' => '钾',
+'鉁' => '𨱅',
'鉅' => '钜',
'鉈' => '铊',
'鉉' => '铉',
'鉚' => '铆',
'鉛' => '铅',
'鉞' => '钺',
-'鉢' => '钵',
'鉤' => '钩',
'鉦' => '钲',
'鉬' => '钼',
'銬' => '铐',
'銱' => '铞',
'銳' => '锐',
+'銶' => '𨱇',
'銷' => '销',
-'銹' => '锈',
'銻' => '锑',
'銼' => '锉',
'鋁' => '铝',
'鋃' => '锒',
'鋅' => '锌',
'鋇' => '钡',
+'鋉' => '𨱈',
'鋌' => '铤',
'鋏' => '铗',
'鋒' => '锋',
'鋨' => '锇',
'鋩' => '铓',
'鋪' => '铺',
-'鋭' => '锐',
'鋮' => '铖',
'鋯' => '锆',
'鋰' => '锂',
'鋸' => '锯',
'鋼' => '钢',
'錁' => '锞',
+'錂' => '𨱋',
'錄' => '录',
'錆' => '锖',
'錇' => '锫',
'錫' => '锡',
'錮' => '锢',
'錯' => '错',
-'録' => '录',
'錳' => '锰',
'錶' => '表',
'錸' => '铼',
'鍀' => '锝',
-'鍁' => '锨',
'鍃' => '锪',
+'鍄' => '𨱉',
'鍆' => '钔',
'鍇' => '锴',
'鍈' => '锳',
'鍥' => '锲',
'鍩' => '锘',
'鍬' => '锹',
+'鍮' => '𨱎',
'鍰' => '锾',
'鍵' => '键',
'鍶' => '锶',
'鎔' => '镕',
'鎖' => '锁',
'鎘' => '镉',
-'鎚' => '锤',
'鎛' => '镈',
'鎝' => '𨱏',
'鎡' => '镃',
'鎬' => '镐',
'鎭' => '鎮',
'鎮' => '镇',
+'鎯' => '𨱍',
'鎰' => '镒',
'鎲' => '镋',
'鎳' => '镍',
'鎵' => '镓',
-'é\8e¸' => 'é\95\8c',
+'é\8e·' => '𨰾',
'鎿' => '镎',
'鏃' => '镞',
+'鏆' => '𨱌',
'鏇' => '镟',
'鏈' => '链',
+'鏉' => '𨱒',
'鏌' => '镆',
'鏍' => '镙',
'鏐' => '镠',
'鏵' => '铧',
'鏷' => '镤',
'鏹' => '镪',
+'鏺' => '䥽',
'鏽' => '锈',
'鐃' => '铙',
+'鐄' => '𨱑',
'鐋' => '铴',
'鐍' => '𫔎',
+'鐎' => '𨱓',
+'鐏' => '𨱔',
'鐐' => '镣',
'鐒' => '铹',
'鐓' => '镦',
'鐔' => '镡',
'鐘' => '钟',
'鐙' => '镫',
-'鐝' => '镢',
'鐠' => '镨',
+'鐥' => '䦅',
'鐦' => '锎',
'鐧' => '锏',
'鐨' => '镄',
'鐫' => '镌',
'鐮' => '镰',
+'鐯' => '䦃',
'鐲' => '镯',
'鐳' => '镭',
'鐵' => '铁',
'閉' => '闭',
'開' => '开',
'閌' => '闶',
+'閍' => '𨸂',
'閎' => '闳',
'閏' => '闰',
+'閐' => '𨸃',
'閑' => '闲',
'閒' => '闲',
'間' => '间',
'閬' => '阆',
'閭' => '闾',
'閱' => '阅',
-'閲' => '阅',
'閶' => '阊',
'閹' => '阉',
'閻' => '阎',
'頸' => '颈',
'頹' => '颓',
'頻' => '频',
-'é ½' => 'é¢\93',
+'é¡\83' => 'ð©\96\96',
'顆' => '颗',
'題' => '题',
'額' => '额',
'顏' => '颜',
'顒' => '颙',
'顓' => '颛',
-'顔' => '颜',
'願' => '愿',
'顙' => '颡',
'顛' => '颠',
'颭' => '飐',
'颮' => '飑',
'颯' => '飒',
+'颰' => '𩙥',
'颱' => '台',
'颳' => '刮',
'颶' => '飓',
+'颷' => '𩙪',
'颸' => '飔',
'颺' => '飏',
'颻' => '飖',
'颼' => '飕',
+'颾' => '𩙫',
'飀' => '飗',
'飄' => '飘',
'飆' => '飙',
'餵' => '喂',
'餶' => '馉',
'餷' => '馇',
+'餸' => '𩠌',
'餺' => '馎',
'餼' => '饩',
'餾' => '馏',
'饊' => '馓',
'饋' => '馈',
'饌' => '馔',
-'饑' => '饥',
'饒' => '饶',
'饗' => '飨',
'饘' => '𫗴',
'馹' => '驲',
'駁' => '驳',
'駃' => '𫘝',
+'駎' => '𩧨',
'駐' => '驻',
'駑' => '驽',
'駒' => '驹',
'駕' => '驾',
'駘' => '骀',
'駙' => '驸',
+'駚' => '𩧫',
'駛' => '驶',
'駝' => '驼',
'駟' => '驷',
-'駡' => '骂',
'駢' => '骈',
+'駧' => '𩧲',
+'駩' => '𩧴',
'駭' => '骇',
'駰' => '骃',
'駱' => '骆',
+'駶' => '𩧺',
'駸' => '骎',
'駻' => '𫘣',
'駿' => '骏',
'騍' => '骒',
'騎' => '骑',
'騏' => '骐',
+'騔' => '𩨀',
'騖' => '骛',
'騙' => '骗',
+'騚' => '𩨊',
+'騝' => '𩨃',
+'騟' => '𩨈',
'騠' => '𫘨',
'騤' => '骙',
'騧' => '䯄',
+'騪' => '𩨄',
'騫' => '骞',
'騭' => '骘',
'騮' => '骝',
'驄' => '骢',
'驅' => '驱',
'驊' => '骅',
+'驋' => '𩧯',
'驌' => '骕',
'驍' => '骁',
'驏' => '骣',
'鬩' => '阋',
'鬮' => '阄',
'鬱' => '郁',
+'鬹' => '鬶',
'魎' => '魉',
'魘' => '魇',
'魚' => '鱼',
'魛' => '鱽',
'魟' => '𫚉',
'魢' => '鱾',
+'魥' => '𩽹',
'魨' => '鲀',
'魯' => '鲁',
'魴' => '鲂',
'鮊' => '鲌',
'鮋' => '鲉',
'鮍' => '鲏',
-'鮎' => '鲇',
'鮐' => '鲐',
'鮑' => '鲍',
'鮒' => '鲋',
'鮓' => '鲊',
'鮚' => '鲒',
'鮜' => '鲘',
-'鮝' => '鲞',
'鮞' => '鲕',
+'鮟' => '𩽾',
+'鮣' => '䲟',
'鮦' => '鲖',
'鮪' => '鲔',
'鮫' => '鲛',
'鮰' => '𫚔',
'鮳' => '鲓',
'鮶' => '鲪',
+'鮸' => '𩾃',
'鮺' => '鲝',
'鯀' => '鲧',
'鯁' => '鲠',
+'鯄' => '𩾁',
'鯆' => '𫚙',
'鯇' => '鲩',
'鯉' => '鲤',
'鯨' => '鲸',
'鯪' => '鲮',
'鯫' => '鲰',
-'鯰' => 'é²\87',
+'鯱' => 'ð©¾\87',
'鯴' => '鲺',
+'鯶' => '𩽼',
'鯷' => '鳀',
'鯽' => '鲫',
'鯿' => '鳊',
'鰁' => '鳈',
'鰂' => '鲗',
'鰃' => '鳂',
+'鰆' => '䲠',
'鰈' => '鲽',
'鰉' => '鳇',
+'鰌' => '䲡',
'鰍' => '鳅',
'鰏' => '鲾',
-'鰐' => '鳄',
'鰒' => '鳆',
'鰓' => '鳃',
'鰜' => '鳒',
'鰣' => '鲥',
'鰤' => '𫚕',
'鰥' => '鳏',
+'鰧' => '䲢',
'鰨' => '鳎',
'鰩' => '鳐',
'鰭' => '鳍',
'鰾' => '鳔',
'鱂' => '鳉',
'鱅' => '鳙',
+'鱇' => '𩾌',
'鱈' => '鳕',
'鱉' => '鳖',
'鱒' => '鳟',
'鳥' => '鸟',
'鳧' => '凫',
'鳩' => '鸠',
-'鳬' => '凫',
'鳲' => '鸤',
'鳳' => '凤',
'鳴' => '鸣',
'鳶' => '鸢',
'鳷' => '𫛛',
+'鳼' => '𪉃',
'鳾' => '䴓',
'鴃' => '𫛞',
'鴆' => '鸩',
'鴕' => '鸵',
'鴗' => '𫁡',
'鴛' => '鸳',
+'鴜' => '𪉈',
'鴝' => '鸲',
'鴞' => '鸮',
'鴟' => '鸱',
'鴨' => '鸭',
'鴯' => '鸸',
'鴰' => '鸹',
+'鴲' => '𪉆',
'鴴' => '鸻',
'鴷' => '䴕',
'鴻' => '鸿',
'鵑' => '鹃',
'鵒' => '鹆',
'鵓' => '鹁',
+'鵚' => '𪉍',
'鵜' => '鹈',
'鵝' => '鹅',
'鵠' => '鹄',
'鶻' => '鹘',
'鶼' => '鹣',
'鶿' => '鹚',
-'鷀' => '鹚',
'鷁' => '鹢',
'鷂' => '鹞',
-'鷄' => '鸡',
'鷈' => '䴘',
'鷊' => '鹝',
'鷓' => '鹧',
+'鷔' => '𪉑',
'鷖' => '鹥',
'鷗' => '鸥',
'鷙' => '鸷',
'鷚' => '鹨',
'鷥' => '鸶',
'鷦' => '鹪',
+'鷨' => '𪉊',
'鷫' => '鹔',
'鷯' => '鹩',
'鷲' => '鹫',
'鹽' => '盐',
'麗' => '丽',
'麥' => '麦',
+'麨' => '𪎊',
'麩' => '麸',
'麪' => '面',
'麫' => '面',
'麯' => '曲',
+'麲' => '𪎉',
'麴' => '曲',
'麵' => '面',
'麼' => '么',
'龔' => '龚',
'龕' => '龛',
'龜' => '龟',
+'龭' => '𩨎',
+'龯' => '𨱆',
+'𠌥' => '𠆿',
+'𠏢' => '𠉗',
+'𠞆' => '𠛆',
+'𠠎' => '𠚳',
+'𡄔' => '𠴢',
+'𡄣' => '𠵸',
+'𡅏' => '𠲥',
+'𡑭' => '𡋗',
+'𡓾' => '𡋀',
'𡞵' => '㛟',
'𡠹' => '㛿',
'𡢃' => '㛠',
+'𡮉' => '𡭜',
+'𡮣' => '𡭬',
'𡻕' => '岁',
+'𡾱' => '㟜',
+'𢣚' => '𢘝',
+'𢣭' => '𢘞',
+'𢶫' => '𢫞',
+'𢷮' => '𢫊',
+'𢹿' => '𢬦',
+'𣙎' => '㭣',
+'𣝕' => '𣘷',
+'𣞻' => '𣘓',
+'𣠲' => '𣑶',
+'𣯴' => '𣭤',
+'𣾷' => '㳢',
+'𣿉' => '𣶫',
+'𤁣' => '𣺽',
+'𤒎' => '𤊀',
'𤪺' => '㻘',
'𤫩' => '㻏',
+'𤳸' => '𤳄',
+'𤸫' => '𤶧',
+'𥌃' => '𥅘',
+'𥕥' => '𥐰',
+'𥖅' => '𥐯',
+'𥢢' => '䅪',
+'𥨐' => '𥧂',
+'𥵃' => '𥱔',
+'𥵊' => '𥭉',
+'𥸠' => '𥮋',
+'𥼽' => '𥹥',
+'𥽖' => '𥺇',
+'𥿊' => '𦈈',
+'𦂅' => '𦈒',
+'𦃄' => '𦈗',
+'𦢈' => '𣍨',
+'𦣎' => '𦟗',
+'𦪽' => '𦨩',
+'𧔥' => '𧒭',
+'𧜗' => '䘞',
'𧜵' => '䙊',
'𧝞' => '䘛',
-'𧦧' => '𫍟',
'𧩙' => '䜥',
+'𧳟' => '𧳕',
'𧵳' => '䞌',
+'𧶔' => '𧹓',
+'𧶧' => '䞎',
+'𨄣' => '𨀱',
+'𨅍' => '𨁴',
+'𨇁' => '𧿈',
+'𨇞' => '𨅫',
+'𨈊' => '𨂺',
+'𨈌' => '𨄄',
+'𨊰' => '䢀',
+'𨊸' => '䢁',
+'𨊻' => '𨐆',
'𨋢' => '䢂',
+'𨎮' => '𨐉',
+'𨏠' => '𨐇',
+'𨏥' => '𨐊',
+'𨤻' => '𨤰',
+'𨥛' => '𨱀',
'𨦫' => '䦀',
'𨧜' => '䦁',
+'𨧱' => '𨱊',
+'𨫒' => '𨱐',
+'𨮂' => '𨱕',
'𨯅' => '䥿',
+'𨳑' => '𨸁',
+'𨳕' => '𨸀',
+'𨴗' => '𨸅',
+'𨵩' => '𨸆',
+'𨵸' => '𨸇',
+'𨶀' => '𨸉',
+'𨶏' => '𨸊',
+'𨶮' => '𨸌',
+'𨶲' => '𨸋',
+'𨷲' => '𨸎',
+'𨽏' => '𨸘',
+'𩎢' => '𩏾',
+'𩏪' => '𩏽',
+'𩓣' => '𩖕',
+'𩗀' => '𩙦',
+'𩘀' => '𩙩',
+'𩘝' => '𩙭',
+'𩘹' => '𩙨',
+'𩘺' => '𩙬',
+'𩙈' => '𩙰',
+'𩚛' => '𩟿',
+'𩚥' => '𩠀',
+'𩚵' => '𩠁',
+'𩛆' => '𩠂',
+'𩛩' => '𩠃',
+'𩜇' => '𩠉',
+'𩜦' => '𩠆',
+'𩜵' => '𩠊',
+'𩝔' => '𩠋',
+'𩞄' => '𩠎',
+'𩞦' => '𩠏',
+'𩞯' => '䭪',
+'𩟐' => '𩠅',
+'𩠴' => '𩠠',
+'𩡺' => '𩧦',
+'𩢡' => '𩧬',
+'𩢴' => '𩧵',
+'𩢸' => '𩧳',
+'𩢾' => '𩧮',
+'𩣏' => '𩧶',
'𩣑' => '䯃',
'𩣵' => '𩧻',
+'𩣺' => '𩧼',
+'𩤊' => '𩧩',
+'𩤙' => '𩨆',
+'𩤲' => '𩨉',
+'𩤸' => '𩨅',
+'𩥄' => '𩨋',
+'𩥇' => '𩨍',
+'𩥉' => '𩧱',
+'𩥑' => '𩨌',
+'𩧆' => '𩨐',
+'𩭙' => '𩬣',
+'𩯳' => '𩯒',
+'𩰀' => '𩬤',
+'𩳤' => '𩲒',
+'𩵩' => '𩽺',
+'𩵹' => '𩽻',
'𩶘' => '䲞',
-'𫚒' => '軿',
+'𩶰' => '𩽿',
+'𩶱' => '𩽽',
+'𩷰' => '𩾄',
+'𩸃' => '𩾅',
+'𩸦' => '𩾆',
+'𩿪' => '𪉄',
+'𪀦' => '𪉅',
+'𪀾' => '𪉋',
+'𪁈' => '𪉉',
+'𪁖' => '𪉌',
+'𪂆' => '𪉎',
+'𪃍' => '𪉐',
+'𪃏' => '𪉏',
+'𪄆' => '𪉔',
+'𪄕' => '𪉒',
+'𪇳' => '𪉕',
+'𪋿' => '𪎍',
+'𪔵' => '𪔭',
+'𪘀' => '𪚏',
+'𪘯' => '𪚐',
'《易乾' => '《易乾',
'不著痕跡' => '不着痕迹',
'不著邊際' => '不着边际',
'乾曜' => '乾曜',
'乾构' => '乾构',
'乾構' => '乾构',
-'乾枢' => '乾枢',
'乾樞' => '乾枢',
+'乾枢' => '乾枢',
'乾栋' => '乾栋',
'乾棟' => '乾栋',
'乾步' => '乾步',
'尋著稱' => '寻著称',
'尋著者' => '寻著者',
'尋著述' => '寻著述',
+'將軍抽俥' => '将军抽俥',
'將軍抽車' => '将军抽車',
'尼乾陀' => '尼乾陀',
'展著' => '展着',
'繞著稱' => '绕著称',
'繞著者' => '绕著者',
'繞著述' => '绕著述',
+'綳著勁' => '绷着劲',
+'綳著臉' => '绷着脸',
'編著' => '编著',
'纏著' => '缠着',
'纏著書' => '缠著书',
'著者' => '著者',
'著身' => '著身',
'著述' => '著述',
+'蒙汗葯' => '蒙汗药',
'蒙著' => '蒙着',
+'蒙葯' => '蒙药',
'蒙著書' => '蒙著书',
'蒙著书' => '蒙著书',
'蒙著作' => '蒙著作',
'鬱氏' => '鬱氏',
'魏徵' => '魏徵',
'魚乾乾' => '鱼干干',
-'鯰魚' => '鲶鱼',
'麯崇裕' => '麯崇裕',
'麴義' => '麴义',
'麴义' => '麴义',
$this->msg( 'pageinfo-display-title' ), $displayTitle
);
+ // Is it a redirect? If so, where to?
+ if ( $title->isRedirect() ) {
+ $pageInfo['header-basic'][] = array(
+ $this->msg( 'pageinfo-redirectsto' ),
+ Linker::link( $this->page->getRedirectTarget() ) .
+ $this->msg( 'word-separator' )->text() .
+ $this->msg( 'parentheses', Linker::link(
+ $this->page->getRedirectTarget(),
+ $this->msg( 'pageinfo-redirectsto-info' )->escaped(),
+ array(),
+ array( 'action' => 'info' )
+ ) )->text()
+ );
+ }
+
// Default sort key
$sortKey = $title->getCategorySortKey();
if ( !empty( $pageProperties['defaultsort'] ) ) {
// Page ID (number not localised, as it's a database ID)
$pageInfo['header-basic'][] = array( $this->msg( 'pageinfo-article-id' ), $id );
+ // Language in which the page content is (supposed to be) written
+ $pageLang = $title->getPageLanguage()->getCode();
+ $pageInfo['header-basic'][] = array( $this->msg( 'pageinfo-language' ),
+ Language::fetchLanguageName( $pageLang, $lang->getCode() )
+ . ' ' . $this->msg( 'parentheses', $pageLang ) );
+
// Search engine status
$pOutput = new ParserOutput();
if ( isset( $pageProperties['noindex'] ) ) {
->numParams( count( $title->getRedirectsHere() ) )
);
+ // Is it counted as a content page?
+ if ( $this->page->isCountable() ) {
+ $pageInfo['header-basic'][] = array(
+ $this->msg( 'pageinfo-contentpage' ),
+ $this->msg( 'pageinfo-contentpage-yes' )
+ );
+ }
+
// Subpages of this page, if subpages are enabled for the current NS
if ( MWNamespace::hasSubpages( $title->getNamespace() ) ) {
$prefixIndex = SpecialPage::getTitleFor( 'Prefixindex', $title->getPrefixedText() . '/' );
// Page protection
$pageInfo['header-restrictions'] = array();
+ // Is this page effected by the cascading protection of something which includes it?
+ if ( $title->isCascadeProtected() ) {
+ $cascadingFrom = '';
+ $sources = $title->getCascadeProtectionSources(); // Array deferencing is in PHP 5.4 :(
+
+ foreach ( $sources[0] as $sourceTitle ) {
+ $cascadingFrom .= Html::rawElement( 'li', array(), Linker::linkKnown( $sourceTitle ) );
+ }
+
+ $cascadingFrom = Html::rawElement( 'ul', array(), $cascadingFrom );
+ $pageInfo['header-restrictions'][] = array(
+ $this->msg( 'pageinfo-protect-cascading-from' ),
+ $cascadingFrom
+ );
+ }
+
+ // Is out protection set to cascade to other pages?
+ if ( $title->areRestrictionsCascading() ) {
+ $pageInfo['header-restrictions'][] = array(
+ $this->msg( 'pageinfo-protect-cascading' ),
+ $this->msg( 'pageinfo-protect-cascading-yes' )
+ );
+ }
+
// Page protection
foreach ( $title->getRestrictionTypes() as $restrictionType ) {
$protectionLevel = implode( ', ', $title->getRestrictions( $restrictionType ) );
}
/**
- * Returns the name that goes in the <h1> page title.
+ * Returns the name that goes in the "<h1>" page title.
*
* @return string
*/
}
/**
- * Returns the description that goes below the <h1> tag.
+ * Returns the description that goes below the "<h1>" tag.
*
* @return string
*/
// Public-only due to cache headers
$content = $rev->getContent();
- if ( !$content instanceof TextContent ) {
+ if ( $content === null ) {
+ // revision not found (or suppressed)
+ $text = false;
+ } elseif ( !$content instanceof TextContent ) {
+ // non-text content
wfHttpError( 415, "Unsupported Media Type", "The requested page uses the content model `"
. $content->getModel() . "` which is not supported via this interface." );
die();
+ } else {
+ // want a section?
+ $section = $request->getIntOrNull( 'section' );
+ if ( $section !== null ) {
+ $content = $content->getSection( $section );
+ }
+
+ if ( $content === null || $content === false ) {
+ // section not found (or section not supported, e.g. for JS and CSS)
+ $text = false;
+ } else {
+ $text = $content->getNativeData();
+ }
}
-
- $section = $request->getIntOrNull( 'section' );
- if ( $section !== null ) {
- $content = $content->getSection( $section );
- }
-
- $text = $content->getNativeData();
}
}
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'invalidtitle', $params['title'] ) );
}
+ if ( !$titleObj->canExist() ) {
+ $this->dieUsage( "Namespace doesn't allow actual pages", 'pagecannotexist' );
+ }
$pageObj = WikiPage::factory( $titleObj );
if ( $load !== false ) {
$pageObj->loadPageData( $load );
'watch' => 'Add the page to your watchlist',
'unwatch' => 'Remove the page from your watchlist',
'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
- 'md5' => array( "The MD5 hash of the {$p}text parameter, or the {$p}prependtext and {$p}appendtext parameters concatenated.",
+ 'md5' => array( "The MD5 hash of the {$p}text parameter, or the {$p}prependtext and {$p}appendtext parameters concatenated.",
'If set, the edit won\'t be done unless the hash is correct' ),
'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
'appendtext' => array( "Add this text to the end of the page. Overrides {$p}text.",
*
* Created on Oct 22, 2006
*
- * Copyright © 2006 Yuri Astrakhan <Firstname><Lastname>@gmail.com
+ * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
'msg' => 'Use of the write API',
'params' => array()
),
- 'apihighlimits' => array(
+ 'apihighlimits' => array(
'msg' => 'Use higher limits in API queries (Slow queries: $1 results; Fast queries: $2 results). The limits for slow queries also apply to multivalue parameters.',
'params' => array( ApiBase::LIMIT_SML2, ApiBase::LIMIT_BIG2 )
)
}
// Should we save old revision parses to the parser cache?
- $p_result = $this->content->getParserOutput( $titleObj, $popts );
+ $p_result = $this->content->getParserOutput( $titleObj, $rev->getId(), $popts );
}
} else { // Not $oldid, but $pageid or $page
if ( $params['redirects'] ) {
$oldid = $pageObj->getLatest();
}
-
$popts = $pageObj->makeParserOptions( $this->getContext() );
$popts->enableLimitReport( !$params['disablepp'] );
if ( !$titleObj ) {
$this->dieUsageMsg( array( 'invalidtitle', $title ) );
}
+ if ( !$titleObj->canExist() ) {
+ $this->dieUsage( "Namespace doesn't allow actual pages", 'pagecannotexist' );
+ }
$wgTitle = $titleObj;
$pageObj = WikiPage::factory( $titleObj );
// Not cached (save or load)
if ( $params['pst'] ) {
- $p_result = $this->pstContent->getParserOutput( $titleObj, $popts );
+ $p_result = $this->pstContent->getParserOutput( $titleObj, null, $popts );
} else {
- $p_result = $this->content->getParserOutput( $titleObj, $popts );
+ $p_result = $this->content->getParserOutput( $titleObj, null, $popts );
}
}
private function getParsedContent( WikiPage $page, $popts, $pageId = null, $getWikitext = false ) {
$this->content = $page->getContent( Revision::RAW ); //XXX: really raw?
- if ( $this->section !== false ) {
+ if ( $this->section !== false && $this->content !== null ) {
$this->content = $this->getSectionContent(
$this->content,
!is_null( $pageId ) ? 'page id ' . $pageId : $page->getTitle()->getText() );
// Not cached (save or load)
- return $this->content->getParserOutput( $page->getTitle(), $popts );
+ return $this->content->getParserOutput( $page->getTitle(), null, $popts );
} else {
// Try the parser cache first
// getParserOutput will save to Parser cache if able
array( 'invalidtitle', 'title' ),
array( 'code' => 'parseerror', 'info' => 'Failed to parse the given text.' ),
array( 'code' => 'notwikitext', 'info' => 'The requested operation is only supported on wikitext content.' ),
+ array( 'code' => 'pagecannotexist', 'info' => "Namespace doesn't allow actual pages" ),
) );
}
* @param $pageSet ApiPageSet Pages to be exported
* @param $result ApiResult Result to output to
*/
- private function doExport( $pageSet, $result ) {
+ private function doExport( $pageSet, $result ) {
$exportTitles = array();
$titles = $pageSet->getGoodTitles();
if ( count( $titles ) ) {
$db->buildLike( $this->getCanonicalUserName( $params['prefix'] ), $db->anyString() ) );
}
- if ( !is_null( $params['rights'] ) ) {
+ if ( !is_null( $params['rights'] ) && count( $params['rights'] ) ) {
$groups = array();
foreach( $params['rights'] as $r ) {
$groups = array_merge( $groups, User::getGroupsWithPermission( $r ) );
}
+ // no group with the given right(s) exists, no need for a query
+ if( !count( $groups ) ) {
+ $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), '' );
+ return;
+ }
+
$groups = array_unique( $groups );
if ( is_null( $params['group'] ) ) {
'dir' => $this->getDirectionDescription( $p ),
'ids' => 'List of block IDs to list (optional)',
'users' => 'List of users to search for (optional)',
- 'ip' => array( 'Get all blocks applying to this IP or CIDR range, including range blocks.',
+ 'ip' => array( 'Get all blocks applying to this IP or CIDR range, including range blocks.',
'Cannot be used together with bkusers. CIDR ranges broader than /16 are not accepted' ),
'limit' => 'The maximum amount of blocks to list',
'prop' => array(
$data = $this->getResultData();
foreach ( $data['query']['pages'] as $pageid => $arr ) {
- if ( !isset( $arr['imagerepository'] ) ) {
+ if ( is_array( $arr ) && !isset( $arr['imagerepository'] ) ) {
$result->addValue(
array( 'query', 'pages', $pageid ),
'imagerepository', ''
}
}
- if ( $this->fld_talkid && isset( $this->talkids[$ns][$dbkey] ) ) {
+ if ( $this->fld_talkid && isset( $this->talkids[$ns][$dbkey] ) ) {
$pageInfo['talkid'] = $this->talkids[$ns][$dbkey];
}
--- /dev/null
+<?php
+
+/**
+ * Base query module for querying results from ORMTables.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @since 1.21
+ *
+ * @file
+ * @ingroup API
+ *
+ * @license GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+abstract class ApiQueryORM extends ApiQueryBase {
+
+ /**
+ * Returns an instance of the IORMTable table being queried.
+ *
+ * @since 1.21
+ *
+ * @return IORMTable
+ */
+ protected abstract function getTable();
+
+ /**
+ * Returns the name of the individual rows.
+ * For example: page, user, contest, campaign, etc.
+ * This is used to appropriately name elements in XML.
+ * Deriving classes typically override this method.
+ *
+ * @since 1.21
+ *
+ * @return string
+ */
+ protected function getRowName() {
+ return 'item';
+ }
+
+ /**
+ * Returns the name of the list of rows.
+ * For example: pages, users, contests, campaigns, etc.
+ * This is used to appropriately name nodes in the output.
+ * Deriving classes typically override this method.
+ *
+ * @since 1.21
+ *
+ * @return string
+ */
+ protected function getListName() {
+ return 'items';
+ }
+
+ /**
+ * Returns the path to where the items results should be added in the result.
+ *
+ * @since 1.21
+ *
+ * @return null|string|array
+ */
+ protected function getResultPath() {
+ return null;
+ }
+
+ /**
+ * Get the parameters, find out what the conditions for the query are,
+ * run it, and add the results.
+ *
+ * @since 1.21
+ */
+ public function execute() {
+ $params = $this->getParams();
+
+ if ( !in_array( 'id', $params['props'] ) ) {
+ $params['props'][] = 'id';
+ }
+
+ $results = $this->getResults( $params, $this->getConditions( $params ) );
+ $this->addResults( $params, $results );
+ }
+
+ /**
+ * Get the request parameters and remove all params set
+ * to null (ie those that are not actually provided).
+ *
+ * @since 1.21
+ *
+ * @return array
+ */
+ protected function getParams() {
+ return array_filter(
+ $this->extractRequestParams(),
+ function( $prop ) {
+ return isset( $prop );
+ }
+ );
+ }
+
+ /**
+ * Get the conditions for the query. These will be provided as
+ * regular parameters, together with limit, props, continue,
+ * and possibly others which we need to get rid off.
+ *
+ * @since 1.21
+ *
+ * @param array $params
+ *
+ * @return array
+ */
+ protected function getConditions( array $params ) {
+ $conditions = array();
+ $fields = $this->getTable()->getFields();
+
+ foreach ( $params as $name => $value ) {
+ if ( array_key_exists( $name, $fields ) ) {
+ $conditions[$name] = $value;
+ }
+ }
+
+ return $conditions;
+ }
+
+ /**
+ * Get the actual results.
+ *
+ * @since 1.21
+ *
+ * @param array $params
+ * @param array $conditions
+ *
+ * @return ORMResult
+ */
+ protected function getResults( array $params, array $conditions ) {
+ return $this->getTable()->select(
+ $params['props'],
+ $conditions,
+ array(
+ 'LIMIT' => $params['limit'] + 1,
+ 'ORDER BY' => $this->getTable()->getPrefixedField( 'id' ) . ' ASC',
+ ),
+ __METHOD__
+ );
+ }
+
+ /**
+ * Serialize the results and add them to the result object.
+ *
+ * @since 1.21
+ *
+ * @param array $params
+ * @param ORMResult $results
+ */
+ protected function addResults( array $params, ORMResult $results ) {
+ $serializedResults = array();
+ $count = 0;
+
+ foreach ( $results as /* IORMRow */ $result ) {
+ if ( ++$count > $params['limit'] ) {
+ // We've reached the one extra which shows that
+ // there are additional pages to be had. Stop here...
+ $this->setContinueEnumParameter( 'continue', $result->getId() );
+ break;
+ }
+
+ $serializedResults[] = $this->formatRow( $result, $params );
+ }
+
+ $this->setIndexedTagNames( $serializedResults );
+ $this->addSerializedResults( $serializedResults );
+ }
+
+ /**
+ * Formats a row to it's desired output format.
+ *
+ * @since 1.21
+ *
+ * @param IORMRow $result
+ * @param array $params
+ *
+ * @return mixed
+ */
+ protected function formatRow( IORMRow $result, array $params ) {
+ return $result->toArray( $params['props'] );
+ }
+
+ /**
+ * Set the tag names for formats such as XML.
+ *
+ * @since 1.21
+ *
+ * @param array $serializedResults
+ */
+ protected function setIndexedTagNames( array &$serializedResults ) {
+ $this->getResult()->setIndexedTagName( $serializedResults, $this->getRowName() );
+ }
+
+ /**
+ * Add the serialized results to the result object.
+ *
+ * @since 1.21
+ *
+ * @param array $serializedResults
+ */
+ protected function addSerializedResults( array $serializedResults ) {
+ $this->getResult()->addValue(
+ $this->getResultPath(),
+ $this->getListName(),
+ $serializedResults
+ );
+ }
+
+ /**
+ * @see ApiBase::getAllowedParams()
+ * @return array
+ */
+ public function getAllowedParams() {
+ $params = array (
+ 'props' => array(
+ ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
+ ApiBase::PARAM_ISMULTI => true,
+ ApiBase::PARAM_REQUIRED => true,
+ ),
+ 'limit' => array(
+ ApiBase::PARAM_DFLT => 20,
+ ApiBase::PARAM_TYPE => 'limit',
+ ApiBase::PARAM_MIN => 1,
+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
+ ),
+ 'continue' => null,
+ );
+
+ return array_merge( $this->getTable()->getAPIParams(), $params );
+ }
+
+ /**
+ * @see ApiBase::getParamDescription()
+ * @return array
+ */
+ public function getParamDescription() {
+ $descriptions = array (
+ 'props' => 'Fields to query',
+ 'continue' => 'Offset number from where to continue the query',
+ 'limit' => 'Max amount of rows to return',
+ );
+
+ return array_merge( $this->getTable()->getFieldDescriptions(), $descriptions );
+ }
+
+}
}
}
if ( $this->parseContent ) {
- $po = $content->getParserOutput( $title, ParserOptions::newFromContext( $this->getContext() ) );
+ $po = $content->getParserOutput( $title, $revision->getId(), ParserOptions::newFromContext( $this->getContext() ) );
$text = $po->getText();
}
$this->addFields( User::selectFields() );
$this->addWhereFld( 'user_name', $goodNames );
- if ( isset( $this->prop['groups'] ) || isset( $this->prop['rights'] ) ) {
- $this->addTables( 'user_groups' );
- $this->addJoinConds( array( 'user_groups' => array( 'LEFT JOIN', 'ug_user=user_id' ) ) );
- $this->addFields( 'ug_group' );
- }
-
$this->showHiddenUsersAddBlockInfo( isset( $this->prop['blockinfo'] ) );
$data = array();
$res = $this->select( __METHOD__ );
+ $this->resetQueryParams();
+
+ // get user groups if needed
+ if ( isset( $this->prop['groups'] ) || isset( $this->prop['rights'] ) ) {
+ $userGroups = array();
+
+ $this->addTables( 'user' );
+ $this->addWhereFld( 'user_name', $goodNames );
+ $this->addTables( 'user_groups' );
+ $this->addJoinConds( array( 'user_groups' => array( 'INNER JOIN', 'ug_user=user_id' ) ) );
+ $this->addFields( array('user_name', 'ug_group') );
+ $userGroupsRes = $this->select( __METHOD__ );
+
+ foreach( $userGroupsRes as $row ) {
+ $userGroups[$row->user_name][] = $row->ug_group;
+ }
+ }
foreach ( $res as $row ) {
- $user = User::newFromRow( $row );
+ // create user object and pass along $userGroups if set
+ // that reduces the number of database queries needed in User dramatically
+ if ( !isset( $userGroups ) ) {
+ $user = User::newFromRow( $row );
+ } else {
+ if ( !is_array( $userGroups[$row->user_name] ) ) {
+ $userGroups[$row->user_name] = array();
+ }
+ $user = User::newFromRow( $row, array( 'user_groups' => $userGroups[$row->user_name] ) );
+ }
$name = $user->getName();
$data[$name]['userid'] = $user->getId();
}
if ( isset( $this->prop['groups'] ) ) {
- if ( !isset( $data[$name]['groups'] ) ) {
- $data[$name]['groups'] = $user->getAutomaticGroups();
- }
-
- if ( !is_null( $row->ug_group ) ) {
- // This row contains only one group, others will be added from other rows
- $data[$name]['groups'][] = $row->ug_group;
- }
+ $data[$name]['groups'] = $user->getEffectiveGroups();
}
- if ( isset( $this->prop['implicitgroups'] ) && !isset( $data[$name]['implicitgroups'] ) ) {
+ if ( isset( $this->prop['implicitgroups'] ) ) {
$data[$name]['implicitgroups'] = $user->getAutomaticGroups();
}
if ( isset( $this->prop['rights'] ) ) {
- if ( !isset( $data[$name]['rights'] ) ) {
- $data[$name]['rights'] = User::getGroupPermissions( $user->getAutomaticGroups() );
- }
-
- if ( !is_null( $row->ug_group ) ) {
- $data[$name]['rights'] = array_unique( array_merge( $data[$name]['rights'],
- User::getGroupPermissions( array( $row->ug_group ) ) ) );
- }
+ $data[$name]['rights'] = $user->getRights();
}
if ( $row->ipb_deleted ) {
$data[$name]['hidden'] = '';
/**
* Get the user-defined value
- * @return bool|\Mixed
+ * @return bool|Mixed
*/
function getValue() {
return $this->value;
}
}
}
-
-
-/**
- * Job wrapper for HTMLCacheUpdate. Gets run whenever a related
- * job gets called from the queue.
- *
- * @ingroup JobQueue
- */
-class HTMLCacheUpdateJob extends Job {
- var $table, $start, $end;
-
- /**
- * Construct a job
- * @param $title Title: the title linked to
- * @param $params Array: job parameters (table, start and end page_ids)
- * @param $id Integer: job id
- */
- function __construct( $title, $params, $id = 0 ) {
- parent::__construct( 'htmlCacheUpdate', $title, $params, $id );
- $this->table = $params['table'];
- $this->start = $params['start'];
- $this->end = $params['end'];
- }
-
- public function run() {
- $update = new HTMLCacheUpdate( $this->title, $this->table, $this->start, $this->end );
- $update->doUpdate();
- return true;
- }
-}
/// Variable for tracking which variables are already loaded
protected $mLoadedLanguages = array();
- /**
- * Used for automatic detection of most used messages.
- */
- protected $mRequestedMessages = array();
-
- /**
- * How long the message request counts are stored. Longer period gives
- * better sample, but also takes longer to adapt changes. The counts
- * are aggregrated per day, regardless of the value of this variable.
- */
- protected static $mAdaptiveDataAge = 604800; // Is 7*24*3600
-
- /**
- * Filter the tail of less used messages that are requested more seldom
- * than this factor times the number of request of most requested message.
- * These messages are not loaded in the default set, but are still cached
- * individually on demand with the normal cache expiry time.
- */
- protected static $mAdaptiveInclusionThreshold = 0.05;
-
/**
* Singleton instance
*
);
$mostused = array();
- if ( $wgAdaptiveMessageCache ) {
- $mostused = $this->getMostUsedMessages();
- if ( $code !== $wgLanguageCode ) {
- foreach ( $mostused as $key => $value ) {
- $mostused[$key] = "$value/$code";
- }
+ if ( $wgAdaptiveMessageCache && $code !== $wgLanguageCode ) {
+ if ( !isset( $this->mCache[$wgLanguageCode] ) ) {
+ $this->load( $wgLanguageCode );
+ }
+ $mostused = array_keys( $this->mCache[$wgLanguageCode] );
+ foreach ( $mostused as $key => $value ) {
+ $mostused[$key] = "$value/$code";
}
}
if ( count( $mostused ) ) {
$conds['page_title'] = $mostused;
} elseif ( $code !== $wgLanguageCode ) {
- $conds[] = 'page_title' . $dbr->buildLike( $dbr->anyString(), "/$code" );
+ $conds[] = 'page_title' . $dbr->buildLike( $dbr->anyString(), '/', $code );
} else {
# Effectively disallows use of '/' character in NS_MEDIAWIKI for uses
# other than language code.
$cache[$row->page_title] = $entry;
}
- foreach ( $mostused as $key ) {
- if ( !isset( $cache[$key] ) ) {
- $cache[$key] = '!NONEXISTENT';
- }
- }
-
$cache['VERSION'] = MSG_CACHE_VERSION;
wfProfileOut( __METHOD__ );
return $cache;
$uckey = $wgContLang->ucfirst( $lckey );
}
- /**
- * Record each message request, but only once per request.
- * This information is not used unless $wgAdaptiveMessageCache
- * is enabled.
- */
- $this->mRequestedMessages[$uckey] = true;
-
# Try the MediaWiki namespace
if( !$this->mDisable && $useDB ) {
$title = $uckey;
* @return string|bool False on failure
*/
function getMsgFromNamespace( $title, $code ) {
- global $wgAdaptiveMessageCache;
-
$this->load( $code );
if ( isset( $this->mCache[$code][$title] ) ) {
$entry = $this->mCache[$code][$title];
return $message;
}
- /**
- * If message cache is in normal mode, it is guaranteed
- * (except bugs) that there is always entry (or placeholder)
- * in the cache if message exists. Thus we can do minor
- * performance improvement and return false early.
- */
- if ( !$wgAdaptiveMessageCache ) {
- return false;
- }
+ return false;
}
# Try the individual message cache
*/
function clear() {
$langs = Language::fetchLanguageNames( null, 'mw' );
- foreach ( array_keys($langs) as $code ) {
+ foreach ( array_keys( $langs ) as $code ) {
# Global cache
$this->mMemc->delete( wfMemcKey( 'messages', $code ) );
# Invalidate all local caches
return array( $message, $lang );
}
- public static function logMessages() {
- wfProfileIn( __METHOD__ );
- global $wgAdaptiveMessageCache;
- if ( !$wgAdaptiveMessageCache || !self::$instance instanceof MessageCache ) {
- wfProfileOut( __METHOD__ );
- return;
- }
-
- $cachekey = wfMemckey( 'message-profiling' );
- $cache = wfGetCache( CACHE_DB );
- $data = $cache->get( $cachekey );
-
- if ( !$data ) {
- $data = array();
- }
-
- $age = self::$mAdaptiveDataAge;
- $filterDate = substr( wfTimestamp( TS_MW, time() - $age ), 0, 8 );
- foreach ( array_keys( $data ) as $key ) {
- if ( $key < $filterDate ) {
- unset( $data[$key] );
- }
- }
-
- $index = substr( wfTimestampNow(), 0, 8 );
- if ( !isset( $data[$index] ) ) {
- $data[$index] = array();
- }
-
- foreach ( self::$instance->mRequestedMessages as $message => $_ ) {
- if ( !isset( $data[$index][$message] ) ) {
- $data[$index][$message] = 0;
- }
- $data[$index][$message]++;
- }
-
- $cache->set( $cachekey, $data );
- wfProfileOut( __METHOD__ );
- }
-
- /**
- * @return array
- */
- public function getMostUsedMessages() {
- wfProfileIn( __METHOD__ );
- $cachekey = wfMemcKey( 'message-profiling' );
- $cache = wfGetCache( CACHE_DB );
- $data = $cache->get( $cachekey );
- if ( !$data ) {
- wfProfileOut( __METHOD__ );
- return array();
- }
-
- $list = array();
-
- foreach( $data as $messages ) {
- foreach( $messages as $message => $count ) {
- $key = $message;
- if ( !isset( $list[$key] ) ) {
- $list[$key] = 0;
- }
- $list[$key] += $count;
- }
- }
-
- $max = max( $list );
- foreach ( $list as $message => $count ) {
- if ( $count < intval( $max * self::$mAdaptiveInclusionThreshold ) ) {
- unset( $list[$message] );
- }
- }
-
- wfProfileOut( __METHOD__ );
- return array_keys( $list );
- }
-
/**
* Get all message keys stored in the message cache for a given language.
* If $code is the content language code, this will return all message keys
return;
}
+ wfDebug( "Squid purge: " . implode( ' ', $urlArr ) . "\n" );
+
if ( $wgHTCPMulticastRouting ) {
SquidUpdate::HTCPPurge( $urlArr );
}
+++ /dev/null
-<?php
-/**
- * Base configuration class.
- *
- * Get some configuration variable:
- * $mySetting = Conf::get( 'mySetting' );
- *
- * Copyright © 2011 Chad Horohoe <chadh@wikimedia.org>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @defgroup Config Config
- */
-abstract class Conf {
- /**
- * A special value to return when default config items do not exist. Use
- * this to differentiate from 'null' which may be a valid config value.
- *
- * Please don't ever make this a default (or accepted) value for your
- * configuration. It's liable to Break Something.
- */
- const NO_SUCH_DEFAULT_CONFIG = 'mw-no-such-default-config';
-
- /**
- * The Wiki ID (usually $wgDBname)
- * @var String
- */
- private $wikiId;
-
- /**
- * Singleton
- * @var Conf
- */
- private static $__instance;
-
- /**
- * Stores of the core defaults, extension defaults and wiki overrides
- *
- * @var array
- */
- protected $defaults, $extensionDefaults, $values = array();
-
- /**
- * Constructor. Children should call this if implementing.
- * @param $confConfig Array of config vars
- */
- protected function __construct( $confConfig ) {
- $this->wikiId = $confConfig['wikiId'];
- $this->defaults = (array)(new DefaultSettings);
- // @todo implement this:
- // $this->initExtensionDefaults();
- $this->initChangedSettings();
- if( isset( $confConfig['exposeGlobals'] ) ) {
- $this->exposeGlobals();
- }
- }
-
- /**
- * Expose all config variables as globals for back-compat. Ewwww.
- */
- private function exposeGlobals() {
- $allVars = $this->defaults + $this->extensionDefaults + $this->values;
- foreach( $allVars as $name => $value ) {
- $var = 'wg' . ucfirst( $name );
- $GLOBALS[$var] = $value;
- }
- }
-
- /**
- * Load customized settings from whatever the data store is
- */
- abstract protected function initChangedSettings();
-
- /**
- * Apply a setting to the backend store
- * @param $name String Name of the setting
- * @param $value mixed Value to store
- */
- abstract protected function writeSetting( $name, $value );
-
- /**
- * Initialize a new child class based on a configuration array
- * @param $conf Array of configuration settings, see $wgConfiguration
- * for details
- * @throws MWException
- * @return Conf
- */
- private static function newFromSettings( $conf ) {
- $class = ucfirst( $conf['type'] ) . 'Conf';
- if( !class_exists( $class ) ) {
- throw new MWException( '$wgConfiguration misconfigured with invalid "type"' );
- }
- return new $class( $conf );
- }
-
- /**
- * Get the singleton if we don't want a specific wiki
- * @param bool|string $wiki An id for a remote wiki
- * @throws MWException
- * @return Conf child
- */
- public static function load( $wiki = false ) {
- throw new MWException( "Not working yet, don't attempt to use this" );
- if( !self::$__instance ) {
- /**global $wgConfiguration;
- self::$__instance = self::newFromSettings( $wgConfiguration );*/
- }
- if( $wiki && $wiki != self::$__instance->getWikiId() ) {
- // Load configuration for a different wiki, not sure how
- // we're gonna do this yet
- return null;
- }
- return self::$__instance;
- }
-
- /**
- * Get a property from the configuration database, falling back
- * to DefaultSettings if undefined
- * @param $name String Name of setting to retrieve.
- * @param $wiki String An id for a remote wiki
- * @return mixed
- */
- public static function get( $name, $wiki = false ) {
- return self::load( $wiki )->retrieveSetting( $name );
- }
-
- /**
- * Actually get the setting, checking overrides, extensions, then core.
- *
- * @param $name String Name of setting to get
- * @return mixed
- */
- public function retrieveSetting( $name ) {
- // isset() is ok here, because the default is to return null anyway.
- if( isset( $this->values[$name] ) ) {
- return $this->values[$name];
- } elseif( isset( $this->extensionDefaults[$name] ) ) {
- return $this->extensionDefaults[$name];
- } elseif( isset( $this->defaults[$name] ) ) {
- return $this->defaults[$name];
- } else {
- wfDebug( __METHOD__ . " called for unknown configuration item '$name'\n" );
- return null;
- }
- }
-
- /**
- * Apply a setting to the configuration object.
- * @param $name String Name of the config item
- * @param $value mixed Any value to use for the key
- * @param $write bool Whether to write to the static copy (db, file, etc)
- */
- public function applySetting( $name, $value, $write = false ) {
- $this->values[$name] = $value;
- if( $write && ( $value !== $this->getDefaultSetting( $name ) ) ) {
- $this->writeSetting( $name, $value );
- }
- }
-
- /**
- * Get the default for a given setting name. Check core and then extensions.
- * Will return NO_SUCH_DEFAULT_CONFIG if the config item does not exist.
- *
- * @param $name String Name of setting
- * @return mixed
- */
- public function getDefaultSetting( $name ) {
- // Use array_key_exists() here, to make sure we return a default
- // that's really set to null.
- if( array_key_exists( $name, $this->defaults ) ) {
- return $this->defaults[$name];
- } elseif( array_key_exists( $name, $this->extensionDefaults ) ) {
- return $this->extensionDefaults[$name];
- } else {
- wfDebug( __METHOD__ . " called for unknown configuration item '$name'\n" );
- return self::NO_SUCH_DEFAULT_CONFIG;
- }
- }
-
- /**
- * What is the wiki ID for this site?
- * @return String
- */
- public function getWikiId() {
- return $this->wikiId;
- }
-}
+++ /dev/null
-<?php
-/**
- * Database configuration class
- *
- * Copyright © 2011 Chad Horohoe <chadh@wikimedia.org>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Config
- */
-class DatabaseConf extends Conf {
- /**
- * @see Conf::initChangedSettings()
- */
- protected function initChangedSettings() {
- $res = wfGetDB( DB_MASTER )->select( 'config', '*', array(), __METHOD__ );
- foreach( $res as $row ) {
- $this->values[$row->cf_name] = unserialize( $row->cf_value );
- }
- }
-
- /**
- * @see Conf::writeSetting()
- *
- * @param $name
- * @param $value
- *
- * @return bool
- */
- protected function writeSetting( $name, $value ) {
- $dbw = wfGetDB( DB_MASTER );
- $value = serialize( $value );
- if( $dbw->selectRow( 'config', 'cf_name', array( 'cf_name' => $name ), __METHOD__ ) ) {
- $dbw->update( 'config', array( 'cf_value' => $value ),
- array( 'cf_name' => $name ), __METHOD__ );
- } else {
- $dbw->insert( 'config',
- array( 'cf_name' => $name, 'cf_value' => $value ), __METHOD__ );
- }
- return (bool)$dbw->affectedRows();
- }
-}
+++ /dev/null
-<?php
-/**
- * Utility class for holding all of our default settings.
- *
- * Copyright © 2011 Chad Horohoe <chadh@wikimedia.org>
- * http://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Config
- */
-final class DefaultSettings {
- public $mySetting = 'defaultValue';
-}
* A content object represents page content, e.g. the text to show on a page.
* Content objects have no knowledge about how they relate to Wiki pages.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
abstract class AbstractContent implements Content {
* Name of the content model this Content object represents.
* Use with CONTENT_MODEL_XXX constants
*
+ * @since 1.21
+ *
* @var string $model_id
*/
protected $model_id;
/**
- * @param String $model_id
+ * @param string|null $modelId
+ *
+ * @since 1.21
*/
- public function __construct( $model_id = null ) {
- $this->model_id = $model_id;
+ public function __construct( $modelId = null ) {
+ $this->model_id = $modelId;
}
/**
- * @see Content::getModel()
+ * @see Content::getModel
+ *
+ * @since 1.21
*/
public function getModel() {
return $this->model_id;
* Throws an MWException if $model_id is not the id of the content model
* supported by this Content object.
*
- * @param $model_id int the model to check
+ * @since 1.21
+ *
+ * @param string $modelId The model to check
*
* @throws MWException
*/
- protected function checkModelID( $model_id ) {
- if ( $model_id !== $this->model_id ) {
- throw new MWException( "Bad content model: " .
+ protected function checkModelID( $modelId ) {
+ if ( $modelId !== $this->model_id ) {
+ throw new MWException(
+ "Bad content model: " .
"expected {$this->model_id} " .
- "but got $model_id." );
+ "but got $modelId."
+ );
}
}
/**
- * @see Content::getContentHandler()
+ * @see Content::getContentHandler
+ *
+ * @since 1.21
*/
public function getContentHandler() {
return ContentHandler::getForContent( $this );
}
/**
- * @see Content::getDefaultFormat()
+ * @see Content::getDefaultFormat
+ *
+ * @since 1.21
*/
public function getDefaultFormat() {
return $this->getContentHandler()->getDefaultFormat();
}
/**
- * @see Content::getSupportedFormats()
+ * @see Content::getSupportedFormats
+ *
+ * @since 1.21
*/
public function getSupportedFormats() {
return $this->getContentHandler()->getSupportedFormats();
}
/**
- * @see Content::isSupportedFormat()
+ * @see Content::isSupportedFormat
+ *
+ * @param string $format
+ *
+ * @since 1.21
+ *
+ * @return boolean
*/
public function isSupportedFormat( $format ) {
if ( !$format ) {
}
/**
- * Throws an MWException if $this->isSupportedFormat( $format ) doesn't
+ * Throws an MWException if $this->isSupportedFormat( $format ) does not
* return true.
*
- * @param $format
+ * @since 1.21
+ *
+ * @param string $format
* @throws MWException
*/
protected function checkFormat( $format ) {
if ( !$this->isSupportedFormat( $format ) ) {
- throw new MWException( "Format $format is not supported for content model " .
- $this->getModel() );
+ throw new MWException(
+ "Format $format is not supported for content model " .
+ $this->getModel()
+ );
}
}
/**
* @see Content::serialize
+ *
+ * @param string|null $format
+ *
+ * @since 1.21
+ *
+ * @return string
*/
public function serialize( $format = null ) {
return $this->getContentHandler()->serializeContent( $this, $format );
}
/**
- * @see Content::isEmpty()
+ * @see Content::isEmpty
+ *
+ * @since 1.21
+ *
+ * @return boolean
*/
public function isEmpty() {
return $this->getSize() === 0;
}
/**
- * @see Content::isValid()
+ * @see Content::isValid
+ *
+ * @since 1.21
+ *
+ * @return boolean
*/
public function isValid() {
return true;
}
/**
- * @see Content::equals()
+ * @see Content::equals
+ *
+ * @since 1.21
+ *
+ * @param Content|null $that
+ *
+ * @return boolean
*/
public function equals( Content $that = null ) {
if ( is_null( $that ) ) {
/**
- * @see Content::getRedirectChain()
+ * @see Content::getRedirectChain
+ *
+ * @since 1.21
*/
public function getRedirectChain() {
global $wgMaxRedirects;
}
/**
- * @see Content::getRedirectTarget()
+ * @see Content::getRedirectTarget
+ *
+ * @since 1.21
*/
public function getRedirectTarget() {
return null;
}
/**
- * @see Content::getUltimateRedirectTarget()
+ * @see Content::getUltimateRedirectTarget
* @note: migrated here from Title::newFromRedirectRecurse
+ *
+ * @since 1.21
*/
public function getUltimateRedirectTarget() {
$titles = $this->getRedirectChain();
}
/**
- * @see Content::isRedirect()
+ * @see Content::isRedirect
*
* @since 1.21
*
}
/**
- * @see Content::updateRedirect()
+ * @see Content::updateRedirect
*
* This default implementation always returns $this.
*
+ * @param Title $target
+ *
* @since 1.21
*
* @return Content $this
}
/**
- * @see Content::getSection()
+ * @see Content::getSection
+ *
+ * @since 1.21
*/
public function getSection( $sectionId ) {
return null;
}
/**
- * @see Content::replaceSection()
+ * @see Content::replaceSection
+ *
+ * @since 1.21
*/
public function replaceSection( $section, Content $with, $sectionTitle = '' ) {
return null;
}
/**
- * @see Content::preSaveTransform()
+ * @see Content::preSaveTransform
+ *
+ * @since 1.21
*/
public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
return $this;
}
/**
- * @see Content::addSectionHeader()
+ * @see Content::addSectionHeader
+ *
+ * @since 1.21
*/
public function addSectionHeader( $header ) {
return $this;
}
/**
- * @see Content::preloadTransform()
+ * @see Content::preloadTransform
+ *
+ * @since 1.21
*/
public function preloadTransform( Title $title, ParserOptions $popts ) {
return $this;
}
/**
- * @see Content::prepareSave()
+ * @see Content::prepareSave
+ *
+ * @since 1.21
*/
public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user ) {
if ( $this->isValid() ) {
}
/**
- * @see Content::getDeletionUpdates()
+ * @see Content::getDeletionUpdates
*
* @since 1.21
*
- * @param $page \WikiPage the deleted page
- * @param $parserOutput null|\ParserOutput optional parser output object
+ * @param $page WikiPage the deleted page
+ * @param $parserOutput null|ParserOutput optional parser output object
* for efficient access to meta-information about the content object.
* Provide if you have one handy.
*
}
/**
- * @see Content::matchMagicWord()
- *
* This default implementation always returns false. Subclasses may override this to supply matching logic.
*
+ * @see Content::matchMagicWord
+ *
+ * @since 1.21
+ *
* @param MagicWord $word
*
* @return bool
public function matchMagicWord( MagicWord $word ) {
return false;
}
-}
\ No newline at end of file
+}
* A content object represents page content, e.g. the text to show on a page.
* Content objects have no knowledge about how they relate to wiki pages.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
interface Content {
* @todo: test that this actually works
* @todo: make sure this also works with LuceneSearch / WikiSearch
*/
- public function getTextForSearchIndex( );
+ public function getTextForSearchIndex();
/**
* @since 1.21
* @return string The wikitext to include when another page includes this
* content, or false if the content is not includable in a wikitext page.
*
- * @TODO: allow native handling, bypassing wikitext representation, like
+ * @todo allow native handling, bypassing wikitext representation, like
* for includable special pages.
- * @TODO: allow transclusion into other content models than Wikitext!
- * @TODO: used in WikiPage and MessageCache to get message text. Not so
+ * @todo allow transclusion into other content models than Wikitext!
+ * @todo used in WikiPage and MessageCache to get message text. Not so
* nice. What should we use instead?!
*/
- public function getWikitextForTransclusion( );
+ public function getWikitextForTransclusion();
/**
* Returns a textual representation of the content suitable for use in edit
*
* @since 1.21
*
- * @param $maxlength int Maximum length of the summary text
- * @return The summary text
+ * @param $maxLength int Maximum length of the summary text
+ * @return string The summary text
*/
- public function getTextForSummary( $maxlength = 250 );
+ public function getTextForSummary( $maxLength = 250 );
/**
* Returns native representation of the data. Interpretation depends on
* string, a nested array structure, an object, a binary blob...
* anything, really.
*
- * @NOTE: Caller must be aware of content model!
+ * @note Caller must be aware of content model!
*/
- public function getNativeData( );
+ public function getNativeData();
/**
* Returns the content's nominal size in bogo-bytes.
*
* @return int
*/
- public function getSize( );
+ public function getSize();
/**
* Returns the ID of the content model used by this Content object.
* Note that this method is called before any update to the page table is performed. This means that
* $page may not yet know a page ID.
*
+ * @since 1.21
+ *
* @param WikiPage $page The page to be saved.
* @param int $flags bitfield for use with EDIT_XXX constants, see WikiPage::doEditContent()
* @param int $baseRevId the ID of the current revision
*
* @since 1.21
*
- * @param $page \WikiPage the deleted page
- * @param $parserOutput null|\ParserOutput optional parser output object
+ * @param $page WikiPage the deleted page
+ * @param $parserOutput null|ParserOutput optional parser output object
* for efficient access to meta-information about the content object.
* Provide if you have one handy.
*
/**
* Returns true if this Content object matches the given magic word.
*
+ * @since 1.21
+ *
* @param MagicWord $word the magic word to match
*
* @return bool whether this Content object matches the given magic word.
# [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
# config to set the class which handles syntax highlighting
# [12:00] <vvv> And default it to a DummyHighlighter
-}
\ No newline at end of file
+}
* type), but wikitext content may be represented by a DOM or AST structure in
* the future.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
abstract class ContentHandler {
*
* @since 1.21
*
- * @static
* @param $content Content|null
* @return null|string the textual form of $content, if available
* @throws MWException if $content is not an instance of TextContent and
return $content->getNativeData();
}
+ wfDebugLog( 'ContentHandler', 'Accessing ' . $content->getModel() . ' content as text!' );
+
if ( $wgContentHandlerTextFallback == 'fail' ) {
throw new MWException(
"Attempt to get text from Content with model " .
*
* @since 1.21
*
- * @static
- *
* @param $text string the textual representation, will be
* unserialized to create the Content object
* @param $title null|Title the title of the page this text belongs to.
*
* @since 1.21
*
- * @static
* @param $title Title
* @return null|string default model name for the page given by $title
*/
*
* @since 1.21
*
- * @static
* @param $title Title
* @return ContentHandler
*/
*
* @since 1.21
*
- * @static
* @param $content Content
* @return ContentHandler
*/
*
* @since 1.21
*
- * @static
* @param $modelId String The ID of the content model for which to get a
* handler. Use CONTENT_MODEL_XXX constants.
* @return ContentHandler The ContentHandler singleton for handling the
}
}
+ wfDebugLog( 'ContentHandler', 'Created handler for ' . $modelId
+ . ': ' . get_class( $handler ) );
+
ContentHandler::$handlers[$modelId] = $handler;
return ContentHandler::$handlers[$modelId];
}
* Model names are localized using system messages. Message keys
* have the form content-model-$name, where $name is getContentModelName( $id ).
*
- * @static
* @param $name String The content model ID, as given by a CONTENT_MODEL_XXX
* constant or returned by Revision::getContentModel().
*
*
* @since 1.21
*
- * @abstract
* @param $content Content The Content object to serialize
* @param $format null|String The desired serialization format
* @return string Serialized form of the content
*
* @since 1.21
*
- * @abstract
* @param $blob string serialized form of the content
* @param $format null|String the format used for serialization
* @return Content the Content object created by deserializing $blob
$content = $rev->getContent();
$blank = false;
- $this->checkModelID( $content->getModel() );
-
// If the page is blank, use the text from the previous revision,
// which can only be blank if there's a move/import/protect dummy
// revision involved
- if ( $content->getSize() == 0 ) {
+ if ( !$content || $content->isEmpty() ) {
$prev = $rev->getPrevious();
- if ( $prev ) {
- $content = $prev->getContent();
+ if ( $prev ) {
+ $rev = $prev;
+ $content = $rev->getContent();
$blank = true;
}
}
+ $this->checkModelID( $rev->getContentModel() );
+
// Find out if there was only one contributor
// Only scan the last 20 revisions
$res = $dbw->select( 'revision', 'rev_user_text',
}
// Max content length = max comment length - length of the comment (excl. $1)
- $text = $content->getTextForSummary( 255 - ( strlen( $reason ) - 2 ) );
+ $text = $content ? $content->getTextForSummary( 255 - ( strlen( $reason ) - 2 ) ) : '';
// Now replace the '$1' placeholder
$reason = str_replace( '$1', $text, $reason );
}
}
-/**
- * @since 1.21
- */
-class TextContentHandler extends ContentHandler {
-
- public function __construct( $modelId = CONTENT_MODEL_TEXT, $formats = array( CONTENT_FORMAT_TEXT ) ) {
- parent::__construct( $modelId, $formats );
- }
-
- /**
- * Returns the content's text as-is.
- *
- * @param $content Content
- * @param $format string|null
- * @return mixed
- */
- public function serializeContent( Content $content, $format = null ) {
- $this->checkFormat( $format );
- return $content->getNativeData();
- }
-
- /**
- * Attempts to merge differences between three versions. Returns a new
- * Content object for a clean merge and false for failure or a conflict.
- *
- * All three Content objects passed as parameters must have the same
- * content model.
- *
- * This text-based implementation uses wfMerge().
- *
- * @param $oldContent \Content|string String
- * @param $myContent \Content|string String
- * @param $yourContent \Content|string String
- *
- * @return Content|Bool
- */
- public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) {
- $this->checkModelID( $oldContent->getModel() );
- $this->checkModelID( $myContent->getModel() );
- $this->checkModelID( $yourContent->getModel() );
-
- $format = $this->getDefaultFormat();
-
- $old = $this->serializeContent( $oldContent, $format );
- $mine = $this->serializeContent( $myContent, $format );
- $yours = $this->serializeContent( $yourContent, $format );
-
- $ok = wfMerge( $old, $mine, $yours, $result );
-
- if ( !$ok ) {
- return false;
- }
-
- if ( !$result ) {
- return $this->makeEmptyContent();
- }
-
- $mergedContent = $this->unserializeContent( $result, $format );
- return $mergedContent;
- }
-
- /**
- * Unserializes a Content object of the type supported by this ContentHandler.
- *
- * @since 1.21
- *
- * @param $text string serialized form of the content
- * @param $format null|String the format used for serialization
- *
- * @return Content the TextContent object wrapping $text
- */
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
-
- return new TextContent( $text );
- }
-
- /**
- * Creates an empty TextContent object.
- *
- * @since 1.21
- *
- * @return Content
- */
- public function makeEmptyContent() {
- return new TextContent( '' );
- }
-}
-
-/**
- * @since 1.21
- */
-class WikitextContentHandler extends TextContentHandler {
-
- public function __construct( $modelId = CONTENT_MODEL_WIKITEXT ) {
- parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
- }
-
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
-
- return new WikitextContent( $text );
- }
-
- /**
- * @see ContentHandler::makeEmptyContent
- *
- * @return Content
- */
- public function makeEmptyContent() {
- return new WikitextContent( '' );
- }
-
-
- /**
- * Returns a WikitextContent object representing a redirect to the given destination page.
- *
- * @see ContentHandler::makeRedirectContent
- *
- * @param Title $destination the page to redirect to.
- *
- * @return Content
- */
- public function makeRedirectContent( Title $destination ) {
- $mwRedir = MagicWord::get( 'redirect' );
- $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $destination->getPrefixedText() . "]]\n";
-
- return new WikitextContent( $redirectText );
- }
-
- /**
- * Returns true because wikitext supports sections.
- *
- * @return boolean whether sections are supported.
- */
- public function supportsSections() {
- return true;
- }
-
- /**
- * Returns true, because wikitext supports caching using the
- * ParserCache mechanism.
- *
- * @since 1.21
- * @return bool
- */
- public function isParserCacheSupported() {
- return true;
- }
-}
-
-# XXX: make ScriptContentHandler base class, do highlighting stuff there?
-
-/**
- * @since 1.21
- */
-class JavaScriptContentHandler extends TextContentHandler {
-
- public function __construct( $modelId = CONTENT_MODEL_JAVASCRIPT ) {
- parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
- }
-
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
-
- return new JavaScriptContent( $text );
- }
-
- public function makeEmptyContent() {
- return new JavaScriptContent( '' );
- }
-
- /**
- * Returns the english language, because JS is english, and should be handled as such.
- *
- * @return Language wfGetLangObj( 'en' )
- *
- * @see ContentHandler::getPageLanguage()
- */
- public function getPageLanguage( Title $title, Content $content = null ) {
- return wfGetLangObj( 'en' );
- }
-
- /**
- * Returns the english language, because CSS is english, and should be handled as such.
- *
- * @return Language wfGetLangObj( 'en' )
- *
- * @see ContentHandler::getPageViewLanguage()
- */
- public function getPageViewLanguage( Title $title, Content $content = null ) {
- return wfGetLangObj( 'en' );
- }
-}
-
-/**
- * @since 1.21
- */
-class CssContentHandler extends TextContentHandler {
-
- public function __construct( $modelId = CONTENT_MODEL_CSS ) {
- parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
- }
-
- public function unserializeContent( $text, $format = null ) {
- $this->checkFormat( $format );
-
- return new CssContent( $text );
- }
-
- public function makeEmptyContent() {
- return new CssContent( '' );
- }
-
- /**
- * Returns the english language, because CSS is english, and should be handled as such.
- *
- * @return Language wfGetLangObj( 'en' )
- *
- * @see ContentHandler::getPageLanguage()
- */
- public function getPageLanguage( Title $title, Content $content = null ) {
- return wfGetLangObj( 'en' );
- }
-
- /**
- * Returns the english language, because CSS is english, and should be handled as such.
- *
- * @return Language wfGetLangObj( 'en' )
- *
- * @see ContentHandler::getPageViewLanguage()
- */
- public function getPageViewLanguage( Title $title, Content $content = null ) {
- return wfGetLangObj( 'en' );
- }
-}
<?php
/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
class CssContent extends TextContent {
public function __construct( $text ) {
--- /dev/null
+<?php
+
+/**
+ * @since 1.21
+ */
+class CssContentHandler extends TextContentHandler {
+
+ public function __construct( $modelId = CONTENT_MODEL_CSS ) {
+ parent::__construct( $modelId, array( CONTENT_FORMAT_CSS ) );
+ }
+
+ public function unserializeContent( $text, $format = null ) {
+ $this->checkFormat( $format );
+
+ return new CssContent( $text );
+ }
+
+ public function makeEmptyContent() {
+ return new CssContent( '' );
+ }
+
+ /**
+ * Returns the english language, because CSS is english, and should be handled as such.
+ *
+ * @return Language wfGetLangObj( 'en' )
+ *
+ * @see ContentHandler::getPageLanguage()
+ */
+ public function getPageLanguage( Title $title, Content $content = null ) {
+ return wfGetLangObj( 'en' );
+ }
+
+ /**
+ * Returns the english language, because CSS is english, and should be handled as such.
+ *
+ * @return Language wfGetLangObj( 'en' )
+ *
+ * @see ContentHandler::getPageViewLanguage()
+ */
+ public function getPageViewLanguage( Title $title, Content $content = null ) {
+ return wfGetLangObj( 'en' );
+ }
+}
\ No newline at end of file
<?php
/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
class JavaScriptContent extends TextContent {
public function __construct( $text ) {
--- /dev/null
+<?php
+
+# XXX: make ScriptContentHandler base class, do highlighting stuff there?
+
+/**
+ * @since 1.21
+ */
+class JavaScriptContentHandler extends TextContentHandler {
+
+ public function __construct( $modelId = CONTENT_MODEL_JAVASCRIPT ) {
+ parent::__construct( $modelId, array( CONTENT_FORMAT_JAVASCRIPT ) );
+ }
+
+ public function unserializeContent( $text, $format = null ) {
+ $this->checkFormat( $format );
+
+ return new JavaScriptContent( $text );
+ }
+
+ public function makeEmptyContent() {
+ return new JavaScriptContent( '' );
+ }
+
+ /**
+ * Returns the english language, because JS is english, and should be handled as such.
+ *
+ * @return Language wfGetLangObj( 'en' )
+ *
+ * @see ContentHandler::getPageLanguage()
+ */
+ public function getPageLanguage( Title $title, Content $content = null ) {
+ return wfGetLangObj( 'en' );
+ }
+
+ /**
+ * Returns the english language, because CSS is english, and should be handled as such.
+ *
+ * @return Language wfGetLangObj( 'en' )
+ *
+ * @see ContentHandler::getPageViewLanguage()
+ */
+ public function getPageViewLanguage( Title $title, Content $content = null ) {
+ return wfGetLangObj( 'en' );
+ }
+}
\ No newline at end of file
* to represent content from the MediaWiki namespace, and that there is no MessageContentHandler. MessageContent
* is just intended as glue for wrapping a message programatically.
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
class MessageContent extends AbstractContent {
*
* TextContent instances are immutable
*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
class TextContent extends AbstractContent {
public function __construct( $text, $model_id = CONTENT_MODEL_TEXT ) {
parent::__construct( $model_id );
+ if ( $text === null || $text === false ) {
+ wfWarn( "TextContent constructed with \$text = " . var_export( $text, true ) . "! "
+ . "This may indicate an error in the caller's scope." );
+
+ $text = '';
+ }
+
if ( !is_string( $text ) ) {
throw new MWException( "TextContent expects a string in the constructor." );
}
/**
* Returns the text represented by this Content object, as a string.
*
- * @param the raw text
+ * @return string: the raw text
*/
public function getNativeData( ) {
$text = $this->mText;
/**
* Returns the text represented by this Content object, as a string.
*
- * @param the raw text
+ * @return string: the raw text
*/
public function getTextForSearchIndex( ) {
return $this->getNativeData();
/**
* Returns the text represented by this Content object, as a string.
*
- * @param the raw text
+ * @return string: the raw text
*/
public function getWikitextForTransclusion( ) {
return $this->getNativeData();
}
/**
- * Diff this content object with another content object..
+ * Returns a Content object with pre-save transformations applied.
+ * This implementation just trims trailing whitespace.
+ *
+ * @param $title Title
+ * @param $user User
+ * @param $popts ParserOptions
+ * @return Content
+ */
+ public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
+ $text = $this->getNativeData();
+ $pst = rtrim( $text );
+
+ return ( $text === $pst ) ? $this : new WikitextContent( $pst );
+ }
+
+ /**
+ * Diff this content object with another content object.
*
* @since 1.21diff
*
- * @param $that Content the other content object to compare this content object to
- * @param $lang Language the language object to use for text segmentation.
+ * @param $that Content: The other content object to compare this content
+ * object to.
+ * @param $lang Language: The language object to use for text segmentation.
* If not given, $wgContentLang is used.
*
- * @return DiffResult a diff representing the changes that would have to be
+ * @return DiffResult: A diff representing the changes that would have to be
* made to this content object to make it equal to $that.
*/
public function diff( Content $that, Language $lang = null ) {
$revId = null,
ParserOptions $options = null, $generateHtml = true
) {
- # Generic implementation, relying on $this->getHtml()
+ global $wgParser, $wgTextModelsToParse;
+
+ if ( !$options ) {
+ //NOTE: use canonical options per default to produce cacheable output
+ $options = $this->getContentHandler()->makeParserOptions( 'canonical' );
+ }
+
+ if ( in_array( $this->getModel(), $wgTextModelsToParse ) ) {
+ // parse just to get links etc into the database
+ $po = $wgParser->parse( $this->getNativeData(), $title, $options, true, true, $revId );
+ } else {
+ $po = new ParserOutput();
+ }
if ( $generateHtml ) {
$html = $this->getHtml();
$html = '';
}
- $po = new ParserOutput( $html );
+ $po->setText( $html );
return $po;
}
--- /dev/null
+<?php
+
+/**
+ * @since 1.21
+ */
+class TextContentHandler extends ContentHandler {
+
+ public function __construct( $modelId = CONTENT_MODEL_TEXT, $formats = array( CONTENT_FORMAT_TEXT ) ) {
+ parent::__construct( $modelId, $formats );
+ }
+
+ /**
+ * Returns the content's text as-is.
+ *
+ * @param $content Content
+ * @param $format string|null
+ * @return mixed
+ */
+ public function serializeContent( Content $content, $format = null ) {
+ $this->checkFormat( $format );
+ return $content->getNativeData();
+ }
+
+ /**
+ * Attempts to merge differences between three versions. Returns a new
+ * Content object for a clean merge and false for failure or a conflict.
+ *
+ * All three Content objects passed as parameters must have the same
+ * content model.
+ *
+ * This text-based implementation uses wfMerge().
+ *
+ * @param $oldContent Content|string String
+ * @param $myContent Content|string String
+ * @param $yourContent Content|string String
+ *
+ * @return Content|Bool
+ */
+ public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) {
+ $this->checkModelID( $oldContent->getModel() );
+ $this->checkModelID( $myContent->getModel() );
+ $this->checkModelID( $yourContent->getModel() );
+
+ $format = $this->getDefaultFormat();
+
+ $old = $this->serializeContent( $oldContent, $format );
+ $mine = $this->serializeContent( $myContent, $format );
+ $yours = $this->serializeContent( $yourContent, $format );
+
+ $ok = wfMerge( $old, $mine, $yours, $result );
+
+ if ( !$ok ) {
+ return false;
+ }
+
+ if ( !$result ) {
+ return $this->makeEmptyContent();
+ }
+
+ $mergedContent = $this->unserializeContent( $result, $format );
+ return $mergedContent;
+ }
+
+ /**
+ * Unserializes a Content object of the type supported by this ContentHandler.
+ *
+ * @since 1.21
+ *
+ * @param $text string serialized form of the content
+ * @param $format null|String the format used for serialization
+ *
+ * @return Content the TextContent object wrapping $text
+ */
+ public function unserializeContent( $text, $format = null ) {
+ $this->checkFormat( $format );
+
+ return new TextContent( $text );
+ }
+
+ /**
+ * Creates an empty TextContent object.
+ *
+ * @since 1.21
+ *
+ * @return Content
+ */
+ public function makeEmptyContent() {
+ return new TextContent( '' );
+ }
+}
<?php
/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
* @since 1.21
+ *
+ * @file
+ * @ingroup Content
+ *
+ * @author Daniel Kinzler
*/
class WikitextContent extends TextContent {
$text = $this->getNativeData();
$pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
+ rtrim( $pst );
- return new WikitextContent( $pst );
+ return ( $text === $pst ) ? $this : new WikitextContent( $pst );
}
/**
*
* @param $hasLinks Bool if it is known whether this content contains
* links, provide this information here, to avoid redundant parsing to
- * find out.
- * @param $title null|\Title
+ * find out (default: null).
+ * @param $title Title: (default: null)
*
* @internal param \IContextSource $context context for parsing if necessary
*
*
* @since 1.21
*
- * @param $content Content the content to render
- * @param $title \Title
- * @param $revId null
- * @param $options null|ParserOptions
- * @param $generateHtml bool
+ * @param $title Title
+ * @param $revId int Revision to pass to the parser (default: null)
+ * @param $options ParserOptions (default: null)
+ * @param $generateHtml bool (default: false)
*
* @internal param \IContextSource|null $context
* @return ParserOutput representing the HTML form of the text
--- /dev/null
+<?php
+
+/**
+ * @since 1.21
+ */
+class WikitextContentHandler extends TextContentHandler {
+
+ public function __construct( $modelId = CONTENT_MODEL_WIKITEXT ) {
+ parent::__construct( $modelId, array( CONTENT_FORMAT_WIKITEXT ) );
+ }
+
+ public function unserializeContent( $text, $format = null ) {
+ $this->checkFormat( $format );
+
+ return new WikitextContent( $text );
+ }
+
+ /**
+ * @see ContentHandler::makeEmptyContent
+ *
+ * @return Content
+ */
+ public function makeEmptyContent() {
+ return new WikitextContent( '' );
+ }
+
+
+ /**
+ * Returns a WikitextContent object representing a redirect to the given destination page.
+ *
+ * @see ContentHandler::makeRedirectContent
+ *
+ * @param Title $destination the page to redirect to.
+ *
+ * @return Content
+ */
+ public function makeRedirectContent( Title $destination ) {
+ $mwRedir = MagicWord::get( 'redirect' );
+ $redirectText = $mwRedir->getSynonym( 0 ) . ' [[' . $destination->getPrefixedText() . "]]\n";
+
+ return new WikitextContent( $redirectText );
+ }
+
+ /**
+ * Returns true because wikitext supports sections.
+ *
+ * @return boolean whether sections are supported.
+ */
+ public function supportsSections() {
+ return true;
+ }
+
+ /**
+ * Returns true, because wikitext supports caching using the
+ * ParserCache mechanism.
+ *
+ * @since 1.21
+ * @return bool
+ */
+ public function isParserCacheSupported() {
+ return true;
+ }
+}
\ No newline at end of file
return $this->getServerVersion();
}
+ /**
+ * @return string: command delimiter used by this database engine
+ */
+ public function getDelimiter() {
+ return $this->delimiter;
+ }
+
/**
* Boolean, controls output of large amounts of debug information.
* @param $debug bool|null
$list .= "$value";
} elseif ( ( $mode == LIST_AND || $mode == LIST_OR ) && is_array( $value ) ) {
if ( count( $value ) == 0 ) {
- throw new MWException( __METHOD__ . ': empty input' );
+ throw new MWException( __METHOD__ . ": empty input for field $field" );
} elseif ( count( $value ) == 1 ) {
// Special-case single values, as IN isn't terribly efficient
// Don't necessarily assume the single key is 0; we don't
} elseif( $this->mTrxAutomatic ) {
wfWarn( "$fname: Explicit commit of implicit transaction. Something may be out of sync!" );
}
+ } else {
+ if ( !$this->mTrxLevel ) {
+ return; // nothing to do
+ } elseif( !$this->mTrxAutomatic ) {
+ wfWarn( "$fname: Flushing an explicit transaction, getting out of sync!" );
+ }
}
$this->doCommit( $fname );
* @param array|string $conds
* @param string $fname
* @throws DBUnexpectedError
- * @return bool|\ResultWrapper
+ * @return bool|ResultWrapper
*/
public function delete( $table, $conds, $fname = 'DatabaseIbm_db2::delete' ) {
if ( !$conds ) {
* @param array $insertOptions
* @param array $selectOptions
* @throws DBQueryError
- * @return null|\ResultWrapper
+ * @return null|ResultWrapper
*/
function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'DatabaseMssql::insertSelect',
$insertOptions = array(), $selectOptions = array() ) {
* @file
* @ingroup ORM
*
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
* @file
* @ingroup ORM
*
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
* @file
* @ingroup ORM
*
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
interface ORMIterator extends Iterator {
* @file ORMResult.php
* @ingroup ORM
*
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
* @file ORMRow.php
* @ingroup ORM
*
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
*
* @since 1.20
*
- * @param string $name
- * @param mixed $default
+ * @param $name string: Field name
+ * @param $default mixed: Default value to return when none is found
+ * (default: null)
*
* @throws MWException
* @return mixed
*
* @since 1.20
*
- * @param string$name
+ * @param $name string
*
* @return mixed
*/
* @file ORMTable.php
* @ingroup ORM
*
- * @licence GNU GPL v2 or later
+ * @license GNU GPL v2 or later
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
* @since 1.19
* @param $msg string
* @param $callerOffset int
+ * @param $level int A PHP error level. See sendWarning()
* @return mixed
*/
public static function warning( $msg, $callerOffset = 1, $level = E_USER_NOTICE ) {
* [XOFF, XLIM) and [YOFF, YLIM) into NCHUNKS approximately equally
* sized segments.
*
- * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an
+ * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an
* array of NCHUNKS+1 (X, Y) indexes giving the diving points between
* sub sequences. The first sub-sequence is contained in [X0, X1),
* [Y0, Y1), the second in [X1, X2), [Y1, Y2) and so on. Note
* 'DBprefix' => '',
* );
*
- * All fields must be present. These mean the same things as $wgDBtype,
- * $wgDBserver, etc. This implementation is quite crude; it could easily
- * support multiple database servers, for instance, and memcached, and it
- * probably has bugs. Kind of hard to reuse code when things might rely on who
+ * All fields must be present. These mean the same things as $wgDBtype,
+ * $wgDBserver, etc. This implementation is quite crude; it could easily
+ * support multiple database servers, for instance, and memcached, and it
+ * probably has bugs. Kind of hard to reuse code when things might rely on who
* knows what configuration globals.
*
- * If either wiki uses the UserComparePasswords hook, password authentication
- * might fail unexpectedly unless they both do the exact same validation.
- * There may be other corner cases like this where this will fail, but it
+ * If either wiki uses the UserComparePasswords hook, password authentication
+ * might fail unexpectedly unless they both do the exact same validation.
+ * There may be other corner cases like this where this will fail, but it
* should be unlikely.
*
* @ingroup ExternalUser
* @return bool
*/
protected function initFromName( $name ) {
- # We might not need the 'usable' bit, but let's be safe. Theoretically
- # this might return wrong results for old versions, but it's probably
+ # We might not need the 'usable' bit, but let's be safe. Theoretically
+ # this might return wrong results for old versions, but it's probably
# good enough.
$name = User::getCanonicalName( $name, 'usable' );
}
public function authenticate( $password ) {
- # This might be wrong if anyone actually uses the UserComparePasswords hook
+ # This might be wrong if anyone actually uses the UserComparePasswords hook
# (on either end), so don't use this if you those are incompatible.
return User::comparePasswords( $this->mRow->user_password, $password,
- $this->mRow->user_id );
+ $this->mRow->user_id );
}
public function getPref( $pref ) {
- # @todo FIXME: Return other prefs too. Lots of global-riddled code that does
+ # @todo FIXME: Return other prefs too. Lots of global-riddled code that does
# this normally.
if ( $pref === 'emailaddress'
&& $this->row->user_email_authenticated !== null ) {
/**
* Guess the MIME type from the file contents alone
- *
- * @return string
+ *
+ * @return string
*/
public function getMimeType() {
return MimeMagic::singleton()->guessMimeType( $this->path, false );
/**
* Get the final file extension from a file system path
- *
+ *
* @param $path string
* @return string
*/
foreach ( $params['srcs'] as $src ) {
$source = $this->resolveToFSPath( $src );
- if ( $source === null ) {
- $fsFiles[$src] = null; // invalid path
+ if ( $source === null || !is_file( $source ) ) {
+ $fsFiles[$src] = null; // invalid path or file does not exist
} else {
$fsFiles[$src] = new FSFile( $source );
}
} else {
$tmpPath = $tmpFile->getPath();
// Copy the source file over the temp file
+ wfSuppressWarnings();
$ok = copy( $source, $tmpPath );
+ wfRestoreWarnings();
if ( !$ok ) {
$tmpFiles[$src] = null;
} else {
$status = $this->doStreamFile( $params );
wfProfileOut( __METHOD__ . '-send-' . $this->name );
wfProfileOut( __METHOD__ . '-send' );
+ if ( !$status->isOK() ) {
+ // Per bug 41113, nasty things can happen if bad cache entries get
+ // stuck in cache. It's also possible that this error can come up
+ // with simple race conditions. Clear out the stat cache to be safe.
+ $this->clearCache( array( $params['src'] ) );
+ $this->deleteFileCache( $params['src'] );
+ trigger_error( "Bad stat cache or race condition for file {$params['src']}." );
+ }
} else {
$status->fatal( 'backend-fail-stream', $params['src'] );
}
* Get a list of storage paths to lock for a list of operations
* Returns an array with 'sh' (shared) and 'ex' (exclusive) keys,
* each corresponding to a list of storage paths to be locked.
+ * All returned paths are normalized.
*
* @param $performOps Array List of FileOp objects
* @return Array ('sh' => list of paths, 'ex' => list of paths)
/**
* Do a batch lookup from cache for container stats for all containers
* used in a list of container names, storage paths, or FileOp objects.
+ * This loads the persistent cache values into the process cache.
*
* @param $items Array
* @return void
/**
* Get the cache key for a file path
*
- * @param $path string Storage path
+ * @param $path string Normalized storage path
* @return string
*/
private function fileCacheKey( $path ) {
* @param $val mixed Information to cache
*/
final protected function setFileCache( $path, $val ) {
+ $path = FileBackend::normalizeStoragePath( $path );
+ if ( $path === null ) {
+ return; // invalid storage path
+ }
$this->memCache->add( $this->fileCacheKey( $path ), $val, 7*86400 );
}
* @param $path string Storage path
*/
final protected function deleteFileCache( $path ) {
+ $path = FileBackend::normalizeStoragePath( $path );
+ if ( $path === null ) {
+ return; // invalid storage path
+ }
if ( !$this->memCache->set( $this->fileCacheKey( $path ), 'PURGED', 300 ) ) {
trigger_error( "Unable to delete stat cache for file $path." );
}
/**
* Do a batch lookup from cache for file stats for all paths
* used in a list of storage paths or FileOp objects.
+ * This loads the persistent cache values into the process cache.
*
* @param $items Array List of storage paths or FileOps
* @return void
$paths = array_merge( $paths, $item->storagePathsRead() );
$paths = array_merge( $paths, $item->storagePathsChanged() );
} elseif ( self::isStoragePath( $item ) ) {
- $paths[] = $item;
+ $paths[] = FileBackend::normalizeStoragePath( $item );
}
}
+ // Get rid of any paths that failed normalization...
+ $paths = array_filter( $paths, 'strlen' ); // remove nulls
// Get all the corresponding cache keys for paths...
foreach ( $paths as $path ) {
list( $cont, $rel, $s ) = $this->resolveStoragePath( $path );
$updateEntries = array();
$deleteEntries = array();
$pathsUsed = array_merge( $this->storagePathsRead(), $this->storagePathsChanged() );
- foreach ( $pathsUsed as $path ) {
+ foreach ( array_unique( $pathsUsed ) as $path ) {
$nullEntries[] = array( // assertion for recovery
'op' => 'null',
'path' => $path,
--- /dev/null
+/*!
+\ingroup FileBackend
+\page file_backend_design File backend design
+
+Some notes on the FileBackend architecture.
+
+\section intro Introduction
+
+To abstract away the differences among different types of storage media,
+MediaWiki is providing an interface known as FileBackend. Any MediaWiki
+interaction with stored files should thus use a FileBackend object.
+
+Different types of backing storage media are supported (ranging from local
+file system to distributed object stores). The types include:
+
+* FSFileBackend (used for mounted file systems)
+* SwiftFileBackend (used for Swift or Ceph Rados+RGW object stores)
+* FileBackendMultiWrite (useful for transitioning from one backend to another)
+
+Configuration documentation for each type of backend is to be found in their
+__construct() inline documentation.
+
+
+\section setup Setup
+
+File backends are registered in LocalSettings.php via the global variable
+$wgFileBackends. To access one of those defined backends, one would use
+FileBackendStore::get( <name> ) which will bring back a FileBackend object
+handle. Such handles are reused for any subsequent get() call (via singleton).
+The FileBackends objects are caching request calls such as file stats,
+SHA1 requests or TCP connection handles.
+
+\par Note:
+Some backends may require additional PHP extensions to be enabled or can rely on a
+MediaWiki extension. This is often the case when a FileBackend subclass makes use of an
+upstream client API for communicating with the backing store.
+
+
+\section fileoperations File operations
+
+The MediaWiki FileBackend API supports various operations on either files or
+directories. See FileBackend.php for full documentation for each function.
+
+
+\subsection reading Reading
+
+The following basic operations are supported for reading from a backend:
+
+On files:
+* state a file for basic information (timestamp, size)
+* read a file into a string or several files into a map of path names to strings
+* download a file or set of files to a temporary file (on a mounted file system)
+* get the SHA1 hash of a file
+* get various properties of a file (stat information, content time, mime information, ...)
+
+On directories:
+* get a list of files directly under a directory
+* get a recursive list of files under a directory
+* get a list of directories directly under a directory
+* get a recursive list of directories under a directory
+
+\par Note:
+Backend handles should return directory listings as iterators, all though in some cases
+they may just be simple arrays (which can still be iterated over). Iterators allow for
+callers to traverse a large number of file listings without consuming excessive RAM in
+the process. Either the memory consumed is flatly bounded (if the iterator does paging)
+or it is proportional to the depth of the portion of the directory tree being traversed
+(if the iterator works via recursion).
+
+
+\subsection writing Writing
+
+The following basic operations are supported for writing or changing in the backend:
+
+On files:
+* store (copying a mounted file system file into storage)
+* create (creating a file within storage from a string)
+* copy (within storage)
+* move (within storage)
+* delete (within storage)
+* lock/unlock (lock or unlock a file in storage)
+
+The following operations are supported for writing directories in the backend:
+* prepare (create parent container and directories for a path)
+* secure (try to lock-down access to a container)
+* publish (try to reverse the effects of secure)
+* clean (remove empty containers or directories)
+
+
+\subsection invokingoperation Invoking an operation
+
+Generally, callers should use doOperations() or doQuickOperations() when doing
+batches of changes, rather than making a suite of single operation calls. This
+makes the system tolerate high latency much better by pipelining operations
+when possible.
+
+doOperations() should be used for working on important original data, i.e. when
+consistency is important. The former will only pipeline operations that do not
+depend on each other. It is best if the operations that do not depend on each
+other occur in consecutive groups. This function can also log file changes to
+a journal (see FileJournal), which can be used to sync two backend instances.
+One might use this function for user uploads of file for example.
+
+doQuickOperations() is more geared toward ephemeral items that can be easily
+regenerated from original data. It will always pipeline without checking for
+dependencies within the operation batch. One might use this function for
+creating and purging generated thumbnails of original files for example.
+
+
+\section consistency Consistency
+
+Not all backing stores are sequentially consistent by default. Various FileBackend
+functions offer a "latest" option that can be passed in to assure (or try to assure)
+that the latest version of the file is read. Some backing stores are consistent by
+default, but callers should always assume that without this option, stale data may
+be read. This is actually true for stores that have eventual consistency.
+
+Note that file listing functions have no "latest" flag, and thus some systems may
+return stale data. Thus callers should avoid assuming that listings contain changes
+made my the current client or any other client from a very short time ago. For example,
+creating a file under a directory and then immediately doing a file listing operation
+on that directory may result in a listing that does not include that file.
+
+
+\section locking Locking
+
+Locking is effective if and only if a proper lock manager is registered and is
+actually being used by the backend. Lock managers can be registered in LocalSettings.php
+using the $wgLockManagers global configuration variable.
+
+For object stores, locking is not generally useful for avoiding partially
+written or read objects, since most stores use Multi Version Concurrency
+Control (MVCC) to avoid this. However, locking can be important when:
+* One or more operations must be done without objects changing in the meantime.
+* It can also be useful when a file read is used to determine a file write or DB change.
+ For example, doOperations() first checks that there will be no "file already exists"
+ or "file does not exist" type errors before attempting an operation batch. This works
+ by stating the files first, and is only safe if the files are locked in the meantime.
+
+When locking, callers should use the latest available file data for reads.
+Also, one should always lock the file *before* reading it, not after. If stale data is
+used to determine a write, there will be some data corruption, even when reads of the
+original file finally start returning the updated data without needing the "latest"
+option (eventual consistency). The "scoped" lock functions are preferable since
+there is not the problem of forgetting to unlock due to early returns or exceptions.
+
+Since acquiring locks can fail, and lock managers can be non-blocking, callers should:
+* Acquire all required locks up font
+* Be prepared for the case where locks fail to be acquired
+* Possible retry acquiring certain locks
+
+MVCC is also a useful pattern to use on top of the backend interface, because operations
+are not atomic, even with doOperations(), so doing complex batch file changes or changing
+files and updating a database row can result in partially written "transactions". Thus one
+should avoid changing files once they have been stored, except perhaps with ephemeral data
+that are tolerant of some degree of inconsistency.
+
+Callers can use their own locking (e.g. SELECT FOR UPDATE) if it is more convenient, but
+note that all callers that change any of the files should then go through functions that
+acquire these locks. For example, if a caller just directly uses the file backend store()
+function, it will ignore any custom "FOR UPDATE" locks, which can cause problems.
+
+\section objectstore Object stores
+
+Support for object stores (like Amazon S3/Swift) drive much of the API and design
+decisions of FileBackend, but using any POSIX compliant file systems works fine.
+The system essentially stores "files" in "containers". For a mounted file system
+as a backing store, "files" will just be files under directories. For an object store
+as a backing store, the "files" will be objects stored in actual containers.
+
+
+\section file_obj_diffs File system and Object store differences
+
+An advantage of object stores is the reduced Round-Trip Times. This is
+achieved by avoiding the need to create each parent directory before placing a
+file somewhere. It gets worse the deeper the directory hierarchy is. Another
+advantage of object stores is that object listings tend to use databases, which
+scale better than the linked list directories that file sytems sometimes use.
+File systems like btrfs and xfs use tree structures, which scale better.
+For both object stores and file systems, using "/" in filenames will allow for the
+intuitive use of directory functions. For example, creating a file in Swift
+called "container/a/b/file1" will mean that:
+- a "directory listing" of "container/a" will contain "b",
+- and a "file listing" of "b" will contain "file1"
+
+This means that switching from an object store to a file system and vise versa
+using the FileBackend interface will generally be harmless. However, one must be
+aware of some important differences:
+
+* In a file system, you cannot have a file and a directory within the same path
+ whereas it is possible in an object stores. Calling code should avoid any layouts
+ which allow files and directories at the same path.
+* Some file systems have file name length restrictions or overall path length
+ restrictions that others do not. The same goes with object stores which might
+ have a maximum object length or a limitation regarding the number of files
+ under a container or volume.
+* Latency varies among systems, certain access patterns may not be tolerable for
+ certain backends but may hold up for others. Some backend subclasses use
+ MediaWiki's object caching for serving stat requests, which can greatly
+ reduce latency. Making sure that the backend has pipelining (see the
+ "parallelize" and "concurrency" settings) enabled can also mask latency in
+ batch operation scenarios.
+* File systems may implement directories as linked-lists or other structures
+ with poor scalability, so calling code should use layouts that shard the data.
+ Instead of storing files like "container/file.txt", one can store files like
+ "container/<x>/<y>/file.txt". It is best if "sharding" optional or configurable.
+
+*/
return true; // nothing to do
}
wfProfileIn( __METHOD__ );
+ trigger_error( "$path was not stored with SHA-1 metadata.", E_USER_WARNING );
$status = Status::newGood();
$scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
if ( $status->isOK() ) {
* $readGrps is a list of the possible criteria for a request to have
* access to read a container. Each item is one of the following formats:
* - account:user : Grants access if the request is by the given user
- * - .r:<regex> : Grants access if the request is from a referrer host that
+ * - ".r:<regex>" : Grants access if the request is from a referrer host that
* matches the expression and the request is not for a listing.
* Setting this to '*' effectively makes a container public.
- * - .rlistings:<regex> : Grants access if the request is from a referrer host that
+ * -".rlistings:<regex>": Grants access if the request is from a referrer host that
* matches the expression and the request for a listing.
*
* $writeGrps is a list of the possible criteria for a request to have
* Clean up the temporary file only after an object goes out of scope
*
* @param $object Object
- * @return void
+ * @return TempFSFile This object
*/
public function bind( $object ) {
if ( is_object( $object ) ) {
}
$object->tempFSFileReferences[] = $this;
}
+ return $this;
}
/**
* Set flag to not clean up after the temporary file
*
- * @return void
+ * @return TempFSFile This object
*/
public function preserve() {
$this->canDelete = false;
+ return $this;
}
/**
* Set flag clean up after the temporary file
*
- * @return void
+ * @return TempFSFile This object
*/
public function autocollect() {
$this->canDelete = true;
+ return $this;
}
/**
/**
* Log changes made by a batch file operation.
* $entries is an array of log entries, each of which contains:
- * op : Basic operation name (create, store, copy, delete)
+ * op : Basic operation name (create, update, delete)
* path : The storage path of the file
* newSha1 : The final base 36 SHA-1 of the file
* Note that 'false' should be used as the SHA-1 for non-existing files.
/**
* A repository for files accessible via the local filesystem.
* Does not support database access or registration.
- *
+ *
* This is a mostly a legacy class. New uses should not be added.
- *
+ *
* @ingroup FileRepo
* @deprecated since 1.19
*/
/**
* Get a key on the primary cache for this repository.
- * Returns false if the repository's cache is not accessible at this site.
+ * Returns false if the repository's cache is not accessible at this site.
* The parameters are the parts of the key, as for wfMemcKey().
* @return bool|mixed
*/
/**
* Get a key on the primary cache for this repository.
- * Returns false if the repository's cache is not accessible at this site.
+ * Returns false if the repository's cache is not accessible at this site.
* The parameters are the parts of the key, as for wfMemcKey().
* @return bool|string
*/
__METHOD__,
array( 'ORDER BY' => 'img_name' )
);
-
+
$result = array();
foreach ( $res as $row ) {
$result[] = $this->newFileFromRow( $row );
/**
* Get a key on the primary cache for this repository.
- * Returns false if the repository's cache is not accessible at this site.
+ * Returns false if the repository's cache is not accessible at this site.
* The parameters are the parts of the key, as for wfMemcKey().
*
* @return string
database access and higher-level functions such as cache management.
Tim Starling, June 2007
-
-Structure:
-
-File defines an abstract class File.
- ForeignAPIFile extends File.
- LocalFile extends File.
- ForeignDBFile extends LocalFile
- Image extends LocalFile
- UnregisteredLocalFile extends File.
- UploadStashFile extends UnregisteredLocalFile.
-FileRepo defines an abstract class FileRepo.
- ForeignAPIRepo extends FileRepo
- FSRepo extends FileRepo
- LocalRepo extends FSRepo
- ForeignDBRepo extends LocalRepo
- ForeignDBViaLBRepo extends LocalRepo
- NullRepo extends FileRepo
-
-Russ Nelson, March 2011
foreach ( $files as $file ) {
# Check that the base file name is part of the thumb name
# This is a basic sanity check to avoid erasing unrelated directories
- if ( strpos( $file, $this->getName() ) !== false ) {
+ if ( strpos( $file, $this->getName() ) !== false
+ || strpos( $file, "-thumbnail" ) !== false // "short" thumb name
+ ) {
$purgeList[] = "{$dir}/{$file}";
}
}
'fa_deleted_user' => $encUserId,
'fa_deleted_timestamp' => $encTimestamp,
'fa_deleted_reason' => $encReason,
- 'fa_deleted' => $this->suppress ? $bitfield : 0,
+ 'fa_deleted' => $this->suppress ? $bitfield : 0,
'fa_name' => 'img_name',
'fa_archive_name' => 'NULL',
$ret = true;
ob_start( array( $this, 'outputHandler' ) );
+ $up = DatabaseUpdater::newForDB( $this->db );
try {
- $up = DatabaseUpdater::newForDB( $this->db );
$up->doUpdates();
} catch ( MWException $e ) {
echo "\nAn error occurred:\n";
echo $e->getText();
$ret = false;
}
+ $up->purgeCache();
ob_end_flush();
return $ret;
}
*
* @param $what Array: what updates to perform
*/
- public function doUpdates( $what = array( 'core', 'extensions', 'purge', 'stats' ) ) {
- global $wgLocalisationCacheConf, $wgVersion;
+ public function doUpdates( $what = array( 'core', 'extensions', 'stats' ) ) {
+ global $wgVersion;
$this->db->begin( __METHOD__ );
$what = array_flip( $what );
if ( isset( $what['stats'] ) ) {
$this->checkStats();
}
-
- if ( isset( $what['purge'] ) ) {
- $this->purgeCache();
-
- if ( $wgLocalisationCacheConf['manualRecache'] ) {
- $this->rebuildLocalisationCache();
- }
- }
$this->db->commit( __METHOD__ );
}
/**
* Purge the objectcache table
*/
- protected function purgeCache() {
+ public function purgeCache() {
+ global $wgLocalisationCacheConf;
# We can't guarantee that the user will be able to use TRUNCATE,
# but we know that DELETE is available to us
$this->output( "Purging caches..." );
$this->db->delete( 'objectcache', '*', __METHOD__ );
+ if ( $wgLocalisationCacheConf['manualRecache'] ) {
+ $this->rebuildLocalisationCache();
+ }
$this->output( "done.\n" );
}
array( 'addField', 'revision', 'rev_sha1', 'patch-rev_sha1.sql' ),
array( 'addField', 'archive', 'ar_sha1', 'patch-ar_sha1.sql' ),
- // 1.20
- array( 'addTable', 'config', 'patch-config.sql' ),
-
// 1.21
array( 'addField', 'revision', 'rev_content_format', 'patch-revision-rev_content_format.sql' ),
array( 'addField', 'revision', 'rev_content_model', 'patch-revision-rev_content_model.sql' ),
* @author Kghbln
* @author McDutchie
* @author Mormegil
+ * @author Nemo bis
* @author Nike
* @author Platonides
* @author Purodha
* @author Raymond
* @author SPQRobin
+ * @author Shirayuki
* @author Siebrand
* @author Umherirrender
*/
'config-sidebar' => 'Maximum width for words is 24 characters. Only visible part of the translation counts to this limit.',
'config-env-php' => 'Parameters:
* $1 is the version of PHP that has been installed.',
+ 'config-unicode-pure-php-warning' => 'PECL is the name of a group producing standard pieces of software for PHP, and intl is the name of their library handling some aspects of internationalization.',
+ 'config-unicode-update-warning' => "ICU is a body producing standard software tools for support of Unicode and other internationalization aspects. This message warns the system administrator installing MediaWiki that the server's software is not up-to-date and MediaWiki will have problems handling some characters.",
'config-no-db' => 'Do not translate: <code>./configure --with-mysql</code>.
<br />
Do not translate: <code>php5-mysql</code>.
Parameters:
* $1 is comma separated list of database types supported by MediaWiki.',
'config-no-fts3' => 'A "[[:wikipedia:Front and back ends|backend]]" is a system or component that ordinary users don\'t interact with directly and don\'t need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are "system" or "service", or (depending on context and language) even leave it untranslated.',
+ 'config-pcre' => 'PCRE is an initialism for "Perl-compatible regular expression". Perl is programming language whose [[:w:regular expression|regular expression]] syntax is popular and used in other languages using a library called PCRE.',
+ 'config-pcre-no-utf8' => "PCRE is a name of a programmers' library for supporting regular expressions. It can probably be translated without change.",
'config-memory-raised' => 'Parameters:
* $1 is the configured <code>memory_limit</code>.
* $2 is the value to which <code>memory_limit</code> was raised.',
'config-connection-error' => '$1 is the external error from the database, such as "DB connection error: Access denied for user \'dba\'@\'localhost\' (using password: YES) (localhost)."
If you\'re translating this message to a right-to-left language, consider writing <nowiki><div dir="ltr">$1.</div></nowiki>. (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as <nowiki><div dir="auto">$1.</div></nowiki>.)',
+ 'config-invalid-schema' => '*$1 - schema name',
'config-sqlite-dir-unwritable' => 'webserver refers to a software like Apache or Lighttpd.',
'config-can-upgrade' => 'Parameters:
* $1 - Version or Revision indicator.',
'config-show-table-status' => '{{doc-important|"SHOW TABLE STATUS" is a MySQL command. Do not translate this.}}',
+ 'config-db-web-account-same' => 'checkbox label',
+ 'config-db-web-create' => 'checkbox label',
'config-ns-generic' => '{{Identical|Project}}',
'config-admin-name' => '{{Identical|Your name}}',
'config-admin-password' => '{{Identical|Password}}',
This message refers to a block of HTML being embedded into the installer page. It comes from the Creative Commons Web site. The block is in the English language. It is a scripted license chooser. When an individual license has been selected, it asks you to klick "proceed" so as to return to the MediaWiki installer page.',
'config-extensions' => '{{Identical|Extension}}',
'config-install-step-done' => '{{Identical|Done}}',
+ 'config-install-database' => '*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
+ 'config-install-schema' => '*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
'config-install-pg-schema-failed' => 'Parameters:
* $1 = database user name (usernames in the database are unrelated to wiki user names)
* $2 =',
- 'config-install-user' => 'Message indicates that the user is being created',
+ 'config-install-user' => 'Message indicates that the user is being created
+
+See also:
+*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
'config-install-user-grant-failed' => 'Parameters:
* $1 is the database username for which granting rights failed
* $2 is the error message',
- 'config-install-tables' => 'Message indicates that the tables are being created',
- 'config-install-interwiki' => 'Message indicates that the interwikitables are being populated',
+ 'config-install-tables' => 'Message indicates that the tables are being created
+
+See also:
+*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
+ 'config-install-interwiki' => 'Message indicates that the interwikitables are being populated
+
+See also:
+*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
+ 'config-install-stats' => '*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
+ 'config-install-keys' => '*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
'config-insecure-keys' => 'Parameters:
* $1 - A list of names of the secret keys that were generated.
* $2 - the number of items in the list $1, to be used with PLURAL.',
- 'config-install-sysop' => 'Message indicates that the administrator user account is being created',
+ 'config-install-sysop' => 'Message indicates that the administrator user account is being created
+
+See also:
+*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
'config-install-subscribe-fail' => '{{doc-important|"mediawiki-announce" is the name of a mailing list and should not be translated.}}',
+ 'config-install-mainpage' => '*{{msg-mw|Config-install-database}}
+*{{msg-mw|Config-install-tables}}
+*{{msg-mw|Config-install-schema}}
+*{{msg-mw|Config-install-user}}
+*{{msg-mw|Config-install-interwiki}}
+*{{msg-mw|Config-install-stats}}
+*{{msg-mw|Config-install-keys}}
+*{{msg-mw|Config-install-sysop}}
+*{{msg-mw|Config-install-mainpage}}',
'config-install-done' => 'Parameters:
* $1 is the URL to LocalSettings download
* $2 is a link to the wiki.
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.',
);
-/** Goan Konkani (Latin script) (Konknni)
- * @author The Discoverer
- */
-$messages['gom-latn'] = array(
- 'config-page-language' => 'Bhas',
-);
-
-/** Magyar (magázó) (Magyar (magázó))
- * @author Dani
- * @author Glanthor Reviol
- */
-$messages['hu-formal'] = array(
- 'config-localsettings-upgrade' => "'''Figyelmeztetés''': már létezik a <code>LocalSettings.php</code> fájl.
-A szoftver frissíthető.
-Adja meg a <code>\$wgUpgradeKey</code>-ben található kulcsot a beviteli mezőben",
- 'config-session-expired' => 'Úgy tűnik, hogy a munkamenetadatok lejártak.
-A munkamenetek élettartama a következőre van beállítva: $1.
-Az érték növelhető a php.ini <code>session.gc_maxlifetime</code> beállításának módosításával.
-Indítsa újra a telepítési folyamatot.',
- 'config-no-session' => 'Elvesztek a munkamenetadatok!
-Ellenőrizze, hogy a php.ini-ben a <code>session.save_path</code> beállítás a megfelelő könyvtárra mutat-e.',
- 'config-your-language-help' => 'Válassza ki a telepítési folyamat során használandó nyelvet.',
- 'config-wiki-language-help' => 'Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.',
- 'config-page-welcome' => 'Üdvözli a MediaWiki!',
- 'config-help-restart' => 'Szeretné törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?',
- 'config-welcome' => '=== Környezet ellenőrzése ===
-Alapvető ellenőrzés, ami megmondja, hogy a környezet alkalmas-e a MediaWiki számára.
-Ha probléma merülne fel a telepítés során, meg kell adnia mások számára az alább megjelenő információkat.',
- 'config-unicode-pure-php-warning' => "'''Figyelmeztetés''': Az [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el Unicode normalizáláshoz.
-Ha nagy látogatottságú oldalt üzemeltet, itt találhat információkat [//www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].",
- 'config-register-globals' => "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''
-'''Tiltsa le, ha van rá lehetősége.'''
-A MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
- 'config-imagemagick' => 'Az ImageMagick megtalálható a rendszeren: <code>$1</code>.
-A bélyegképek készítése engedélyezve lesz, ha engedélyezi a feltöltéseket.',
- 'config-db-name-help' => 'Válassza ki a wikije azonosítására használt nevet.
-Nem tartalmazhat szóközt vagy kötőjelet.
-
-Ha megosztott webtárhelyet használ, a szolgáltatója vagy egy konkrét adatbázisnevet ad önnek használatra, vagy létrehozhat egyet a vezérlőpulton keresztül.',
- 'config-db-install-help' => 'Adja meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.',
- 'config-db-wiki-help' => 'Adja meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben.
-Ha a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.',
- 'config-charset-help' => "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használja MySQL 4.1 vagy újabb verziók esetén, és utána a <code>mysqldump</code> programmal készít róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat!
-
-'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban.
-Ez sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használja.
-'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, megfelelően van megjelenítve és konvertálva, de
-nem használhatja a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.",
- 'config-db-schema-help' => 'A fenti sémák általában megfelelőek.
-Csak akkor módosítson rajta, ha szükség van rá.',
- 'config-sqlite-parent-unwritable-nogroup' => 'Nem lehet létrehozni az adatok tárolásához szükséges <code><nowiki>$1</nowiki></code> könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>).
-
-A telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver.
-A folytatáshoz tegye írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: <code><nowiki>$3</nowiki></code>.
-Unix/Linux rendszereken tedd a következőt:
-
-<pre>cd $2
-mkdir $3
-chmod a+w $3</pre>',
- 'config-ns-other' => 'Más (adja meg)',
- 'config-admin-name-blank' => 'Adja meg az adminisztrátor felhasználónevét!',
- 'config-admin-name-invalid' => 'A megadott felhasználónév (<nowiki>$1</nowiki>) érvénytelen.
-Adjon meg egy másik felhasználónevet.',
- 'config-admin-password-blank' => 'Adja meg az adminisztrátori fiók jelszavát!',
- 'config-instantcommons-help' => 'Az [//www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [//commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat.
-A használatához a MediaWikinek internethozzáférésre van szüksége.
-
-A funkcióról és hogy hogyan állítható be más wikik esetén [//mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhat további információkat.',
- 'config-install-done' => "'''Gratulálunk!'''
-Sikeresen telepítette a MediaWikit.
-
-A telepítő készített egy <code>LocalSettings.php</code> fájlt.
-Ez tartalmazza az összes beállítást.
-
-[$1 Le kell töltenie], és el kell helyeznie a MediaWiki telepítési könyvtárába (az a könyvtár, ahol az index.php van).
-'''Megjegyzés''': Ha ezt most nem teszi meg, és kilép, a generált fájl nem lesz elérhető a későbbiekben.
-
-Ha ezzel készen van, '''[$2 beléphet a wikibe]'''.",
- 'mainpagedocfooter' => "Ha segítségre van szüksége a wikiszoftver használatához, akkor keresse fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.
-
-== Alapok (angol nyelven) ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]",
-);
-
-/** Español (formal) (Español (formal))
- * @author Dferg
- */
-$messages['es-formal'] = array(
- 'mainpagedocfooter' => 'Consulte usted la [//meta.wikimedia.org/wiki/Ayuda:Contenido Guía de usuario] para obtener información sobre el uso del software wiki.
-
-== Empezando ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]
-* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]',
-);
-
/** Afrikaans (Afrikaans)
* @author Naudefj
*/
'config-env-bad' => 'Die omgewing is gekontroleer.
U kan nie MediaWiki installeer nie.</span>',
'config-env-php' => 'PHP $1 is tans geïnstalleer.',
- 'config-no-db' => "Kon nie 'n geskikte databasisdrywer vind nie!",
+ 'config-no-db' => "Kon nie 'n geskikte databasisdrywer vind nie!", # Fuzzy
'config-memory-raised' => 'PHP se <code>memory_limit</code> is $1, en is verhoog tot $2.',
'config-memory-bad' => "'''Waarskuwing:''' PHP se <code>memory_limit</code> is $1.
Dit is waarskynlik te laag.
'config-install-interwiki-exists' => "'''Waarskuwing''': Die interwiki-tabel bevat reeds inskrywings.
Die standaardlys word oorgeslaan.",
'config-install-stats' => 'Inisialiseer statistieke',
- 'config-install-keys' => 'Genereer geheime sleutel',
+ 'config-install-keys' => 'Genereer geheime sleutel', # Fuzzy
'config-install-sysop' => "Skep 'n gebruiker vir die administrateur",
'config-install-subscribe-fail' => 'Kon nie vir MediaWiki-announce inskryf nie: $1',
'config-install-mainpage' => 'Skep die hoofblad met standaard inhoud',
U sal dit moet [$1 aflaai] en dit in die hoofgids van u wiki-installasie plaas; in dieselfde gids as index.php.
'''Let wel''': As u dit nie nou doen nie, sal die gegenereerde konfigurasielêer nie later meer beskikbaar wees nadat u die installasie afgesluit het nie.
-As dit gedoen is, kan u '''[u $2 wiki besoek]'''.",
+As dit gedoen is, kan u '''[u $2 wiki besoek]'''.", # Fuzzy
'config-download-localsettings' => 'Laai LocalSettings.php af',
'config-help' => 'hulp',
'mainpagetext' => "'''MediaWiki is suksesvol geïnstalleer.'''",
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWikit]',
);
-/** Amharic (አማርኛ) */
+/** Amharic (አማርኛ)
+ */
$messages['am'] = array(
'mainpagetext' => "'''MediaWiki በትክክል ማስገባቱ ተከናወነ።'''",
'mainpagedocfooter' => "ስለ ዊኪ ሶፍትዌር ጥቅም ለመረዳት፣ [//meta.wikimedia.org/wiki/Help:Contents User's Guide] ያንብቡ።
*/
$messages['ar'] = array(
'config-desc' => 'مثبت لميدياويكي',
- 'config-title' => 'ميدياويكي 1$ التثبيت',
+ 'config-title' => 'ميدياويكي 1$ التثبيت', # Fuzzy
'config-information' => 'معلومات',
'config-back' => '→ ارجع',
'config-continue' => 'استمر ←',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista dyal l-modakaraṫ ĝla versyonaṫ jdad dyal MediaWiki]',
);
-/** Egyptian Spoken Arabic (مصرى) */
+/** Egyptian Spoken Arabic (مصرى)
+ */
$messages['arz'] = array(
'mainpagetext' => "''' ميدياويكى اتنزلت بنجاح.'''",
'mainpagedocfooter' => 'اسال [//meta.wikimedia.org/wiki/Help:Contents دليل اليوزر] للمعلومات حوالين استخدام برنامج الويكى.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Asturian (asturianu) */
+/** Asturian (asturianu)
+ */
$messages['ast'] = array(
'mainpagetext' => "'''MediaWiki instalóse correchamente.'''",
'mainpagedocfooter' => "Visita la [//meta.wikimedia.org/wiki/Help:Contents Guía d'usuariu] pa saber cómo usar esti software wiki.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de corréu de les ediciones de MediaWiki]",
);
-/** Kotava (Kotava) */
+/** Kotava (Kotava)
+ */
$messages['avk'] = array(
'mainpagetext' => "'''MediaWiki inkeyen talpeyot.'''",
);
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-poçt siyahısı]',
);
-/** Bashkir (Ð\91ашҡортса)
+/** Bashkir (башҡортса)
* @author Haqmar
*/
$messages['ba'] = array(
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglisten voh de neichen MediaWiki-Versionen]',
);
-/** Southern Balochi (بلوچی مکرانی) */
+/** Southern Balochi (بلوچی مکرانی)
+ */
$messages['bcc'] = array(
'mainpagetext' => "'''مدیا وی کی گون موفقیت نصب بوت.'''",
'mainpagedocfooter' => "مشورت کنیت گون [//meta.wikimedia.org/wiki/Help:Contents User's Guide] په گشیترین اطلاعات په استفاده چه برنامه ویکی.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Bikol Central (Bikol Central) */
+/** Bikol Central (Bikol Central)
+ */
$messages['bcl'] = array(
'mainpagetext' => "'''Instalado na an MediaWiki.'''",
'mainpagedocfooter' => "Konsultarón tabì an [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para sa impormasyon sa paggamit nin progama kaining wiki.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Belarusian (беларуская) */
+/** Belarusian (беларуская)
+ */
$messages['be'] = array(
'mainpagetext' => "'''MediaWiki паспяхова ўсталяваная.'''",
'mainpagedocfooter' => 'Гл. [//meta.wikimedia.org/wiki/Help:Contents Дапаможнік карыстальніка (англ.)] па далейшыя звесткі аб карыстанні вікі-праграмамі.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ліставанне аб выпусках MediaWiki (англ.)]',
);
-/** Belarusian (Taraškievica orthography) (беларуская (тарашкевіца))
+/** Belarusian (Taraškievica orthography) (беларуская (тарашкевіца))
* @author EugeneZelenko
* @author Jim-by
* @author Wizardist
'config-license-none' => 'কোনো লাইসেন্স ফুটার নেই',
'config-license-cc-by-sa' => 'ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন শেয়ার অ্যালাইক',
'config-license-cc-by-nc-sa' => 'ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন নন-কমার্শিয়াল শেয়ার অ্যালাইক',
- 'config-license-cc-0' => 'ক্রিয়েটিভ কমন্স জিরো',
+ 'config-license-cc-0' => 'ক্রিয়েটিভ কমন্স জিরো', # Fuzzy
'config-license-pd' => 'পাবলিক ডোমেইন',
'config-license-cc-choose' => 'একটি স্বনির্ধারিত ক্রিয়েটিভ কমন্স লাইসেন্ট নির্বাচন করুন',
'config-email-settings' => 'ই-মেইল সেটিংস',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce মিডিয়াউইকি রিলিজের মেইলিং লিস্ট]',
);
-/** Bishnupria Manipuri (বিষ্ণুপ্রিয়া মণিপুরী) */
+/** Bishnupria Manipuri (বিষ্ণুপ্রিয়া মণিপুরী)
+ */
$messages['bpy'] = array(
'mainpagetext' => "'''মিডিয়াউইকি হবাবালা ইয়া ইন্সটল ইল.'''",
'mainpagedocfooter' => 'উইকি সফটৱ্যার এহান আতানির বারে দরকার ইলে [//meta.wikimedia.org/wiki/Help:Contents আতাকুরার গাইড]হানর পাঙলাক নেগা।
Ma rit gant un herberc'hiañ kenrannet, e tlefe ho herberc'hier bezañ pourchaset deoc'h un anv ostiz reizh en teulioù titouriñ.
-M'emaoc'h o staliañ ur servijer Windows ha ma rit gant MySQL, marteze ne'z aio ket en-dro \"localhost\" evel anv servijer. Ma ne dro ket, klaskit ober gant \"127.0.0.1\" da chomlec'h IP lechel.",
+M'emaoc'h o staliañ ur servijer Windows ha ma rit gant MySQL, marteze ne'z aio ket en-dro \"localhost\" evel anv servijer. Ma ne dro ket, klaskit ober gant \"127.0.0.1\" da chomlec'h IP lechel.", # Fuzzy
'config-db-host-oracle' => 'TNS an diaz roadennoù :',
'config-db-wiki-settings' => 'Anavezout ar wiki-mañ',
'config-db-name' => 'Anv an diaz roadennoù :',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu (''listserv'') per a anuncis del MediaWiki]",
);
-/** Chechen (Ð\9dохчийн)
+/** Chechen (нохчийн)
* @author Sasan700
*/
$messages['ce'] = array(
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Хаам бохьуьйту араяларца башхонца керла MediaWiki].',
);
-/** Cebuano (Cebuano) */
+/** Cebuano (Cebuano)
+ */
$messages['ceb'] = array(
'mainpagetext' => "'''Malamposon ang pag-instalar sa MediaWiki.'''",
'mainpagedocfooter' => 'Konsultaha ang [//meta.wikimedia.org/wiki/Help:Contents Giya sa mga gumagamit] alang sa impormasyon unsaon paggamit niining wiki nga software.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat sang MediaWiki]',
);
-/** Crimean Turkish (Latin script) (Qırımtatarca (Latin)) */
-$messages['crh-latn'] = array(
- 'mainpagetext' => "'''MediaWiki muvafaqiyetnen quruldı.'''",
- 'mainpagedocfooter' => "Bu vikiniñ yol-yoruğını [//meta.wikimedia.org/wiki/Help:Contents User's Guide qullanıcı qılavuzından] ögrenip olasıñız.
-
-== Bazı faydalı saytlar ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings Olucı sazlamalar cedveli];
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki boyunca sıq berilgen suallernen cevaplar];
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-niñ yañı versiyalarınıñ çıquvından haber yiberüv].",
-);
-
-/** Crimean Turkish (Cyrillic script) (Къырымтатарджа (Кирилл)) */
+/** Crimean Turkish (Cyrillic script) (къырымтатарджа (Кирилл))
+ */
$messages['crh-cyrl'] = array(
'mainpagetext' => "'''MediaWiki мувафакъиетнен къурулды.'''",
'mainpagedocfooter' => "Бу викининъ ёл-ёругъыны [//meta.wikimedia.org/wiki/Help:Contents User's Guide къулланыджы къылавузындан] огренип оласынъыз.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-нинъ янъы версияларынынъ чыкъувындан хабер йиберюв].",
);
+/** Crimean Turkish (Latin script) (qırımtatarca (Latin))
+ */
+$messages['crh-latn'] = array(
+ 'mainpagetext' => "'''MediaWiki muvafaqiyetnen quruldı.'''",
+ 'mainpagedocfooter' => "Bu vikiniñ yol-yoruğını [//meta.wikimedia.org/wiki/Help:Contents User's Guide qullanıcı qılavuzından] ögrenip olasıñız.
+
+== Bazı faydalı saytlar ==
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Olucı sazlamalar cedveli];
+* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki boyunca sıq berilgen suallernen cevaplar];
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-niñ yañı versiyalarınıñ çıquvından haber yiberüv].",
+);
+
/** Czech (česky)
* @author Danny B.
* @author Mormegil
Až to dokončíte, můžete '''[$2 vstoupit do své wiki]'''.",
'config-download-localsettings' => 'Stáhnout LocalSettings.php',
'config-help' => 'nápověda',
+ 'config-nofile' => 'Soubor „$1“ nelze nalézt. Byl smazán?',
'mainpagetext' => "'''MediaWiki byla úspěšně nainstalována.'''",
'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]',
);
-/** Kashubian (kaszëbsczi) */
+/** Kashubian (kaszëbsczi)
+ */
$messages['csb'] = array(
'mainpagetext' => "'''MediaWiki òsta zainstalowónô.'''",
);
-/** Chuvash (Чӑвашла) */
+/** Chuvash (Чӑвашла)
+ */
$messages['cv'] = array(
'mainpagetext' => "'''«MediaWiki» вики-движока лартасси ăнăçлă вĕçленчĕ.'''",
'mainpagedocfooter' => 'Ку википе ĕçлеме пулăшакан информацине [//meta.wikimedia.org/wiki/%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C:%D0%A1%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D0%BD%D0%B8%D0%B5 усăç руководствинче] тупма пултаратăр.
Sofern Änderungen vorgenommen werden sollen, kann man auf „← Zurück“ klicken.',
'config-install-step-done' => 'erledigt',
'config-install-step-failed' => 'gescheitert',
- 'config-install-extensions' => 'Softwareerweiterungen',
+ 'config-install-extensions' => 'Programmerweiterungen',
'config-install-database' => 'Datenbank wird eingerichtet',
'config-install-schema' => 'Datenschema wird erstellt',
'config-install-pg-schema-not-exist' => 'Das PostgesSQL-Datenschema ist nicht vorhanden',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]',
);
-/** German (formal address) (Deutsch (Sie-Form))
+/** German (formal address) (Deutsch (Sie-Form))
* @author MichaelFrey
*/
$messages['de-formal'] = array(
$messages['diq'] = array(
'config-your-language' => 'Zıwanê şıma:',
'config-wiki-language' => 'Wiki zıwan:',
- 'config-back' => '← Peyd',
+ 'config-back' => '← Peyser',
'config-continue' => 'Dewam ke',
'config-page-language' => 'Zıwan',
'config-page-welcome' => 'Şıma xeyr ameyê MediaWiki!',
'config-license-cc-by' => 'Creative Commons Attribution',
'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
'config-license-pd' => 'Malê Şari',
+ 'config-extensions' => 'Olekeni',
'mainpagetext' => "'''MediaWiki vıst ra ser, vıraziya.'''",
'mainpagedocfooter' => 'Seba gurenayış u eyarkerdışê Wiki-Softwarey [//meta.wikimedia.org/wiki/Help:Contents İdarê karberi] de mıracaet ke.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki ra lista serbest-dayışê postey]',
);
-/** Lower Sorbian (dolnoserbski) */
+/** Lower Sorbian (dolnoserbski)
+ */
$messages['dsb'] = array(
'mainpagetext' => "'''MediaWiki jo se wuspěšnje instalěrowało.'''",
'mainpagedocfooter' => "Pomoc pśi wužywanju softwary wiki namakajoš pód [//meta.wikimedia.org/wiki/Help:Contents User's Guide].
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lis pininsuratan pinolabus do ModiaWiki]',
);
-/** Greek (Ελληνικά) */
+/** Greek (Ελληνικά)
+ */
$messages['el'] = array(
'mainpagetext' => "'''To λογισμικό MediaWiki εγκαταστάθηκε με επιτυχία.'''",
'mainpagedocfooter' => 'Περισσότερες πληροφορίες σχετικά με τη χρήση και με τη ρύθμιση παραμέτρων θα βρείτε στους συνδέσμους: [//meta.wikimedia.org/wiki/MediaWiki_localisation Οδηγίες για τροποποίηση του περιβάλλοντος εργασίας] και [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Εγχειρίδιο χρήστη].',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]',
);
+/** español (formal) (español (formal))
+ * @author Dferg
+ */
+$messages['es-formal'] = array(
+ 'mainpagedocfooter' => 'Consulte usted la [//meta.wikimedia.org/wiki/Ayuda:Contenido Guía de usuario] para obtener información sobre el uso del software wiki.
+
+== Empezando ==
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]
+* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]',
+);
+
/** Estonian (eesti)
* @author Avjoska
*/
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]',
);
-/** Extremaduran (estremeñu) */
+/** Extremaduran (estremeñu)
+ */
$messages['ext'] = array(
'mainpagetext' => "'''MeyaGüiqui s'á istalau satihatoriamenti.'''",
'mainpagedocfooter' => "Consurta la [//meta.wikimedia.org/wiki/Help:Contents User's Guide] pa sabel mas al tentu el huncionamientu el software güiqui.
'config-page-readme' => 'مرا بخوان',
'config-page-releasenotes' => 'یادداشتهای انتشار',
'config-page-existingwiki' => 'ویکی موجود',
+ 'config-restart' => 'بله ، آن دوباره راه اندازی کن',
+ 'config-sidebar' => '* [//www.mediawiki.org صفحهٔ اصلی مدیاویکی]
+* [//www.mediawiki.org/wiki/Help:Contents راهنمای کاربر]
+* [//www.mediawiki.org/wiki/Manual:Contents راهنمای مدیر]
+* [//www.mediawiki.org/wiki/Manual:FAQ پرسشهای رایج]
+----
+* <doclink href=Readme>مرا بخوان</doclink>
+* <doclink href=ReleaseNotes>یادداشتهای انتشار</doclink>
+* <doclink href=Copying>نسخه برداری</doclink>
+* <doclink href=UpgradeDoc>ارتقا</doclink>',
+ 'config-env-php' => 'پیاچپی $1 نصب شده است.',
+ 'config-env-php-toolow' => 'پیاچپی $1 نصب شده است.
+در هر صورت، مدیاویکی نیاز به پیاچپی نسخهٔ $2 یا بالاتر دارد.',
'config-db-type' => 'نوع پایگاه اطلاعات:',
'config-db-host' => 'میزبان پایگاه اطلاعات:',
'config-db-username' => 'نام کاربری پایگاه اطلاعات:',
'config-db-password' => 'کلمه عبور پایگاه اطلاعات:',
+ 'config-header-mysql' => 'تنظیمات مایاسکیوال',
+ 'config-connection-error' => '$1.
+
+میزبان، نام کاربری و گذرواژه را بررسی کنید و دوباره امتحان کنید.',
'config-site-name' => 'نام ویکی:',
'config-site-name-blank' => 'نام تارنما را وارد کنید.',
'config-project-namespace' => 'فضای نام پروژه:',
'config-admin-email' => 'پست الکترونیکی شما:',
'config-profile-private' => 'ویکی خصوصی',
'config-license' => 'حق تکثیر و مجوز:',
+ 'config-license-none' => 'بدون پاورقی مجوز',
+ 'config-license-pd' => 'دامنه عمومی',
'config-license-cc-choose' => 'انتخاب یک مجوز سفارشی عوام خلاق',
'config-email-settings' => 'تنظیمات پست الکترونیکی',
'config-upload-enable' => 'فعال سازی بارگذاری پرونده',
+ 'config-logo' => 'نشانی نامواره:',
'config-install-step-done' => 'انجام شد',
'config-install-step-failed' => 'ناموفق بود',
'config-help' => 'راهنما',
'config-env-php-toolow' => 'PHP $1 on asennettu.
MediaWiki vaatii PHP:n version $2 tai uudemman.',
'config-no-db' => 'Sopivaa tietokanta-ajuria ei löytynyt! Sinun täytyy asentaa tietokanta-ajurit PHP:lle.
-Seuraavat tietokantatyypit ovat tuettuja: $1.',
+Seuraavat tietokantatyypit ovat tuettuja: $1.', # Fuzzy
'config-safe-mode' => "'''Varoitus:''' PHP:n [http://www.php.net/features.safe-mode safe mode] -tila on aktiivinen.
Se voi aiheuttaa ongelmia erityisesti tiedostojen tallentamisen ja matemaattisten kaavojen kanssa.",
'config-pcre' => 'PCRE-tukimoduuli puuttuu.
Taivutusmuodot: {{GRAMMAR:genitive|{{SITENAME}}}} (yön) – {{GRAMMAR:partitive|{{SITENAME}}}} (yötä) – {{GRAMMAR:elative|{{SITENAME}}}} (yöstä) – {{GRAMMAR:inessive|{{SITENAME}}}} (yössä) – {{GRAMMAR:illative|{{SITENAME}}}} (yöhön).",
);
-/** Faroese (føroyskt) */
+/** Faroese (føroyskt)
+ */
$messages['fo'] = array(
'mainpagetext' => "'''Innlegging av Wiki-ritbúnaði væleydnað.'''",
);
* @author Crochet.david
* @author Gomoko
* @author Grondin
+ * @author Guillom
* @author Hashar
* @author IAlex
* @author Jean-Frédéric
'config-support-mysql' => '* $1 est le premier choix pour MediaWiki et est mieux pris en charge ([http://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])',
'config-support-postgres' => "* $1 est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL ([http://www.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]). Il peut contenir quelques bogues mineurs et n'est pas recommandé dans un environnement de production.",
'config-support-sqlite' => '* $1 est un système de base de données léger qui est bien supporté. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], utilise PDO)',
- 'config-support-oracle' => '* $1 est un système commercial de gestion de base de données d’entreprise. ([Http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])',
+ 'config-support-oracle' => '* $1 est un système commercial de gestion de base de données d’entreprise. ([http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])',
'config-support-ibm_db2' => "* $1 est une base de données d'entreprise commerciale.",
'config-header-mysql' => 'Paramètres de MySQL',
'config-header-postgres' => 'Paramètres de PostgreSQL',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]',
);
-/** Cajun French (français cadien) */
+/** Cajun French (français cadien)
+ */
$messages['frc'] = array(
'mainpagetext' => "'''Vous avez bien installé MediaWiki.'''",
'mainpagedocfooter' => 'Lisez la [//meta.wikimedia.org/wiki/Help:Contents Guide des Useurs] pour apprendre à user le wiki software.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailingliste neuer MediaWiki-Versionen]',
);
-/** Friulian (furlan) */
+/** Friulian (furlan)
+ */
$messages['fur'] = array(
'mainpagetext' => "'''MediaWiki e je stade instalade cun sucès.'''",
);
-/** Western Frisian (Frysk) */
+/** Western Frisian (Frysk)
+ */
$messages['fy'] = array(
'mainpagetext' => "'''MediaWiki-program goed ynstallearre.'''",
'mainpagedocfooter' => "Rieplachtsje de [//meta.wikimedia.org/wiki/Help:Ynhâldsopjefte hantlieding] foar ynformaasje oer it gebrûk fan 'e wikisoftware.
agus an [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Lámhleabhar úsáideora] chun cabhair úsáide agus fíoraíochta a fháil.',
);
-/** Gagauz (Gagauz) */
+/** Gagauz (Gagauz)
+ */
$messages['gag'] = array(
'mainpagetext' => "'''MediaWiki başarılan kuruldu.'''",
'mainpagedocfooter' => "Vikilän iş uurunda bilgi almaa için [//meta.wikimedia.org/wiki/Help:Contents User's Guide] sayfasına bakınız
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Simplified Gan script (赣语(简体)) */
+/** Simplified Gan script (赣语(简体))
+ */
$messages['gan-hans'] = array(
'mainpagetext' => "'''安装正MediaWiki喽。'''",
'mainpagedocfooter' => '参看[//meta.wikimedia.org/wiki/Help:Contents 用户指南]里头会话到啷用wiki软件
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 发布email清单]',
);
-/** Traditional Gan script (贛語(繁體)) */
+/** Traditional Gan script (贛語(繁體))
+ */
$messages['gan-hant'] = array(
'mainpagetext' => "'''安裝正MediaWiki嘍。'''",
'mainpagedocfooter' => '參看[//meta.wikimedia.org/wiki/Help:Contents 用戶指南]裡頭會話到啷用wiki軟件
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo dos lanzamentos de MediaWiki]',
);
+/** Goan Konkani (Latin script) (Konknni)
+ * @author The Discoverer
+ */
+$messages['gom-latn'] = array(
+ 'config-page-language' => 'Bhas',
+);
+
/** Ancient Greek (Ἀρχαία ἑλληνικὴ)
* @author Crazymadlover
* @author Omnipaedista
'config-sidebar' => '* [//www.mediawiki.org MediaWiki Websyte vu MediaWiki]
* [//www.mediawiki.org/wiki/Help:Contents Nutzeraaleitig zue MediaWiki]
* [//www.mediawiki.org/wiki/Manual:Contents Adminischtratoreaaleitig zue MediaWiki]
-* [//www.mediawiki.org/wiki/Manual:FAQ Vilmol gstellti Froge zue MediaWiki]',
+* [//www.mediawiki.org/wiki/Manual:FAQ Vilmol gstellti Froge zue MediaWiki]', # Fuzzy
'config-env-good' => 'D Inschtallationsumgäbig isch prieft wore.
Du chasch MediaWiki inschtalliere.',
'config-env-bad' => 'D Inschtallationsumgäbigisch prieft wore.
Wänn Du ne Websyte mit ere große Bsuechrzahl bedrybsch, sottsch e weng ebis läse iber [//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode-Normalisierig (en)].",
'config-unicode-update-warning' => "'''Warnig:''' Di inschtalliert Version vum Unicode-Normalisierigswrapper verwändet e elteri Version vu dr Bibliothek vum [http://site.icu-project.org/ ICU-Projäkt].
Du sottsch si [//www.mediawiki.org/wiki/Unicode_normalization_considerations aktualisiere], wänn Dor d Verwändig vu Unicode wichtig isch.",
- 'config-no-db' => 'S isch kei adäquate Datebanktryyber gfunde wore!',
+ 'config-no-db' => 'S isch kei adäquate Datebanktryyber gfunde wore!', # Fuzzy
'config-no-fts3' => "'''Warnig:''' SQLite isch ohni s [//sqlite.org/fts3.html FTS3-Modul] kumpiliert wore, s stehn kei Suechfunktione z Verfiegig.",
'config-register-globals' => "'''Warnig: Dr Parameter <code>[http://php.net/register_globals register_globals]</code> vu PHP isch aktiviert.'''
'''Är sott deaktiviert wäre, wänn des megli isch.'''
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce મિડીયાવિકિ રીલીઝ મેઇલીંગ લીસ્ટ]',
);
-/** Manx (Gaelg) */
+/** Manx (Gaelg)
+ */
$messages['gv'] = array(
'mainpagetext' => "'''Ta MediaWiki currit stiagh nish.'''",
);
-/** Hakka (Hak-kâ-fa) */
+/** Hakka (Hak-kâ-fa)
+ */
$messages['hak'] = array(
'mainpagetext' => "'''Yí-kîn sṳ̀n-kûng ôn-chông MediaWiki.'''",
'mainpagedocfooter' => 'chhiáng fóng-mun [//meta.wikimedia.org/wiki/Help:Contents Yung-fu sú-chhak] yî-khi̍p sṳ́-yung chhṳ́ wiki ngiôn-khien ke sin-sit!
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki fat-phu email chhîn-tân]',
);
-/** Hawaiian (Hawai`i) */
+/** Hawaiian (Hawai`i)
+ */
$messages['haw'] = array(
'mainpagetext' => "'''Ua pono ka ho‘ouka ‘ana o MediaWiki.'''",
);
אם מערכת ההפעלה שלהם היא Mandrake, התקינו את החבילה php-xml.',
'config-pcre' => 'נראה שחסרה תמיכה במודול PCRE.
כדי שמדיה־ויקי תעבוד, נדרשת תמיכה בביטויים רגולריים תואמי Perl.',
- 'config-pcre-no-utf8' => "'''שגיאה סופנית:''': נראה שמודול PCRE של PHP מקומפל ללא תמיכה ב־PCRE_UTF8.
+ 'config-pcre-no-utf8' => "'''שגיאה סופנית''': נראה שמודול PCRE של PHP מקומפל ללא תמיכה ב־PCRE_UTF8.
מדיה־ויקי דורשת תמיכה ב־UTF-8 לפעילות נכונה.",
'config-memory-raised' => 'ערך האפשרות <code>memory_limit</code> של PHP הוא $1, הועלה ל־$2.',
'config-memory-bad' => "'''אזהרה:''' ערך האפשרות <code>memory_limit</code> של PHP הוא $1.
'config-ns-generic' => 'מיזם',
'config-ns-site-name' => 'זהה לשם הוויקי: $1',
'config-ns-other' => 'אחר (לציין)',
- 'config-ns-other-default' => 'הוויקי־שלי',
+ 'config-ns-other-default' => 'הוויקי שלי',
'config-project-namespace-help' => "בהתאם לדוגמה של ויקיפדיה, אתרי ויקי רבים שומרים על דפי המדיניות שלהם בנפרד מדפי התוכן שלהם ב\"'''מרחב השמות של המיזם'''\" (\"'''project namespace'''\").
כל שמות הדפים במרחב השמות הזה מתחילים בתחילית מסוימת שאתם יכולים להגדיר כאן.
באופן מסורתי התחילית הזאת מבוססת על שם הוויקי, והיא אינה יכולה להכיל תווי פיסוק כגון \"#\" או \":\".",
'config-enable-email' => 'להפעיל דוא״ל יוצא',
'config-enable-email-help' => 'אם אתם רוצים שדוא״ל יעבוד, [http://www.php.net/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון.
אם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.',
- 'config-email-user' => '×\9c×\90פשר שליחת דוא״ל ממשתמש למשתמש',
+ 'config-email-user' => '×\9c×\94פע×\99×\9c שליחת דוא״ל ממשתמש למשתמש',
'config-email-user-help' => 'לאפשר לכל המשתמשים לשלוח אחד לשני דוא״ל אם הם הפעילו את זה בהעדפות שלהם.',
- 'config-email-usertalk' => '×\9c×\90פשר הודעות על דף שיחת משתמש',
+ 'config-email-usertalk' => '×\9c×\94פע×\99×\9c הודעות על דף שיחת משתמש',
'config-email-usertalk-help' => 'לאפשר למשתמשים לקבל הודעות על שינויים בדפי המשתמש שלהם, אם הם הפעילו את זה בהעדפות שלהם.',
'config-email-watchlist' => 'הפעלת התרעה על רשימת המעקב',
'config-email-watchlist-help' => 'לאפשר למשתמשים לקבל הודעות על הדפים ברשימת המעקב שלהם אם הם הפעילו את זה בהעדפות שלהם.',
לשם יישלחו תגובות שגיאה (bounce).
שרתי דוא״ל רבים דורשים שלפחות החלק של המתחם יהיה תקין.',
'config-upload-settings' => 'העלאת קבצים ותמונות',
- 'config-upload-enable' => '×\9c×\90פשר העלאת קבצים',
+ 'config-upload-enable' => '×\9c×\94פע×\99×\9c העלאת קבצים',
'config-upload-help' => 'העלאות קבצים חושפות את השרת שלכם לסיכוני אבטחה.
למידע נוסף, קִראו את [//www.mediawiki.org/wiki/Manual:Security חלק האבטחה] בספר ההדרכה.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce רשימת התפוצה על השקת גרסאות]',
);
-/** Hindi (हिन्दी) */
+/** Hindi (हिन्दी)
+ */
$messages['hi'] = array(
'mainpagetext' => "'''मीडियाविकिका इन्स्टॉलेशन पूरा हो गया हैं ।'''",
'mainpagedocfooter' => 'विकि सॉफ्टवेयरके इस्तेमाल के लिये [//meta.wikimedia.org/wiki/Help:Contents उपयोगकर्ता गाईड] देखें ।
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista sang mga ginapadal-an sang sulat kon may paguha-on nga MediaWiki]",
);
-/** Croatian (hrvatski) */
+/** Croatian (hrvatski)
+ */
$messages['hr'] = array(
'mainpagetext' => "'''Softver MediaWiki je uspješno instaliran.'''",
'mainpagedocfooter' => 'Pogledajte [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentaciju o prilagodbi sučelja]
Jeli wužiwaš zhromadnje wužiwany serwer, proš swojeho poskićowarja, zo by přihódny ćěrjak datoweje banki instalował.
Jeli sy PHP sam kompilował, konfiguruj jón znowa z aktiwizowanym programom datoweje banki, na přikład z pomocu <code>./configure --with-mysql</code>.
Jeli sy PHP z Debianoweho abo Ubuntuoweho paketa instalował, dyrbiš tež modul php5-mysql instalować.',
+ 'config-outdated-sqlite' => "'''Warnowanje''': maš SQLite $1, kotryž je starši hač minimalna trěbna wersija $2. SQLite njebudźe k dispoziciji stać.",
'config-no-fts3' => "'''Warnowanje''': SQLite je so bjez [//sqlite.org/fts3.html FTS3-modula] kompilował, pytanske funkcije njebudu k dispoziciji stać.",
'config-register-globals' => "'''Warnowanje: Funkcija <code>[http://php.net/register_globals register_globals]</code> PHP je zmóžnjena.'''
'''Znjemóžń ju, jeli móžeš.'''
'config-xml-bad' => 'XML-modul za PHP faluje.
MediaWiki trjeba funkcije w tutym modulu a njebudźe w tutej konfiguraciji fungować.
Jeli wužiwaš Mandrake, instaluj paket php-xml.',
+ 'config-pcre' => 'Zda so, zo modul za PCRE-podpěru faluje.
+MediaWiki trjeba z Perl kompatibelne funkcije za regularne wurazy, zo by fungował.',
+ 'config-pcre-no-utf8' => "'''Ćežki zmylk''': Zda so, zo PCRE-modul za PHP ma so bjez PCRE_UTF8-podpěry kompilować.
+MediaWiki trjeba UTF-8-podpěru, zo by korektnje fungował.",
'config-memory-raised' => 'PHP-parameter <code>memory_limit</code> je $1, je so na hódnotu $2 zwyšił.',
'config-memory-bad' => "'''Warnowanje:''' PHP-parameter <code>memory_limit</code> ma hódnotu $1,
To je najskerje přeniske.
Instalacija móhła so njeporadźić!",
+ 'config-ctype' => "'''Ćežki zmylk''': PHP dyrbi so z podpěru za [http://www.php.net/manual/en/ctype.installation.php rozšěrjenje Ctype] kompilować.",
'config-xcache' => '[http://xcache.lighttpd.net/ XCache] je instalowany',
'config-apc' => '[http://www.php.net/apc APC] je instalowany',
'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] je instalowany',
'config-type-ibm_db2' => 'IBM DB2',
'config-support-mysql' => '* $1 je primarny cil za MediaWiki a podpěruje so najlěpje ([http://www.php.net/manual/en/mysql.installation.php Nawod ke kompilowanju PHP z MySQL-podpěru])',
'config-support-postgres' => '* $1 je popularny system datoweje banki zjawneho žórła jako alternatiwa k MySQL ([http://www.php.net/manual/en/pgsql.installation.php nawod za kompilowanje PHP z podpěru PostgreSQL]). Móhło hišće někotre zmylki eksistować, a njeporuča so jón w produktiwnej wokolinje wužiwać.',
+ 'config-support-oracle' => '* $1 je komercielna předewzaćelska datowa banka. ([http://www.php.net/manual/en/oci8.installation.php Nawod za kompilowanje PHP z OCI8-podpěru])',
'config-support-ibm_db2' => '* $1 je komercielna předewzaćelska datowa banka.',
'config-header-mysql' => 'Nastajenja MySQL',
'config-header-postgres' => 'Nastajenja PostgreSQL',
Ha megosztott webtárhelyet használsz, a szolgáltató dokumentációjában megtalálható a helyes hosztnév.
-Ha Windows-alapú szerverre telepítesz, és MySQL-t használsz, a „localhost” nem biztos, hogy működni fog. Ha így van, próbáld meg a „127.0.0.1” helyi IP-cím használatát.',
+Ha Windows-alapú szerverre telepítesz, és MySQL-t használsz, a „localhost” nem biztos, hogy működni fog. Ha így van, próbáld meg a „127.0.0.1” helyi IP-cím használatát.', # Fuzzy
'config-db-host-oracle' => 'Adatbázis TNS:',
'config-db-wiki-settings' => 'A wiki azonosítása',
'config-db-name' => 'Adatbázisnév:',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]",
);
-/** Armenian (Հայերեն) */
+/** Magyar (magázó) (Magyar (magázó))
+ * @author Dani
+ * @author Glanthor Reviol
+ */
+$messages['hu-formal'] = array(
+ 'config-localsettings-upgrade' => "'''Figyelmeztetés''': már létezik a <code>LocalSettings.php</code> fájl.
+A szoftver frissíthető.
+Adja meg a <code>\$wgUpgradeKey</code>-ben található kulcsot a beviteli mezőben", # Fuzzy
+ 'config-session-expired' => 'Úgy tűnik, hogy a munkamenetadatok lejártak.
+A munkamenetek élettartama a következőre van beállítva: $1.
+Az érték növelhető a php.ini <code>session.gc_maxlifetime</code> beállításának módosításával.
+Indítsa újra a telepítési folyamatot.',
+ 'config-no-session' => 'Elvesztek a munkamenetadatok!
+Ellenőrizze, hogy a php.ini-ben a <code>session.save_path</code> beállítás a megfelelő könyvtárra mutat-e.',
+ 'config-your-language-help' => 'Válassza ki a telepítési folyamat során használandó nyelvet.',
+ 'config-wiki-language-help' => 'Az a nyelv, amin a wiki tartalmának legnagyobb része íródik.',
+ 'config-page-welcome' => 'Üdvözli a MediaWiki!',
+ 'config-help-restart' => 'Szeretné törölni az eddig megadott összes adatot és újraindítani a telepítési folyamatot?',
+ 'config-welcome' => '=== Környezet ellenőrzése ===
+Alapvető ellenőrzés, ami megmondja, hogy a környezet alkalmas-e a MediaWiki számára.
+Ha probléma merülne fel a telepítés során, meg kell adnia mások számára az alább megjelenő információkat.',
+ 'config-unicode-pure-php-warning' => "'''Figyelmeztetés''': Az [http://pecl.php.net/intl intl PECL kiterjesztés] nem érhető el Unicode normalizáláshoz.
+Ha nagy látogatottságú oldalt üzemeltet, itt találhat információkat [//www.mediawiki.org/wiki/Unicode_normalization_considerations a témáról].", # Fuzzy
+ 'config-register-globals' => "'''Figyelmeztetés: A PHP <code>[http://php.net/register_globals register_globals]</code> beállítása engedélyezve van.'''
+'''Tiltsa le, ha van rá lehetősége.'''
+A MediaWiki működőképes a beállítás használata mellett, de a szerver biztonsági kockázatnak lesz kitéve.",
+ 'config-imagemagick' => 'Az ImageMagick megtalálható a rendszeren: <code>$1</code>.
+A bélyegképek készítése engedélyezve lesz, ha engedélyezi a feltöltéseket.',
+ 'config-db-name-help' => 'Válassza ki a wikije azonosítására használt nevet.
+Nem tartalmazhat szóközt vagy kötőjelet.
+
+Ha megosztott webtárhelyet használ, a szolgáltatója vagy egy konkrét adatbázisnevet ad önnek használatra, vagy létrehozhat egyet a vezérlőpulton keresztül.', # Fuzzy
+ 'config-db-install-help' => 'Adja meg a felhasználónevet és jelszót, amivel a telepítő csatlakozhat az adatbázishoz.',
+ 'config-db-wiki-help' => 'Adja meg azt a felhasználónevet és jelszót, amivel a wiki fog csatlakozni az adatbázishoz működés közben.
+Ha a fiók nem létezik és a telepítést végző fiók rendelkezik megfelelő jogosultsággal, egy új fiók készül a megadott a névvel, azon minimális jogosultságkörrel, ami a wiki működéséhez szükséges.',
+ 'config-charset-help' => "'''Figyelmezetés:''' Ha a '''visszafelé kompatibilis UTF-8''' beállítást használja MySQL 4.1 vagy újabb verziók esetén, és utána a <code>mysqldump</code> programmal készít róla biztonsági másolatot, az tönkreteheti az összes nem ASCII-karaktert, visszafordíthatatlanul károsítva a másolatokban tárolt adatokat!
+
+'''Bináris''' módban a MediaWiki az UTF-8-ban kódolt szöveget bináris mezőkben tárolja az adatbázisban.
+Ez sokkal hatékonyabb a MySQL UTF-8-módjától, és lehetővé teszi, hogy a teljes Unicode-karakterkészletet használja.
+'''UTF-8-módban''' MySQL tudja, hogy milyen karakterkészlettel van kódolva az adat, megfelelően van megjelenítve és konvertálva, de
+nem használhatja a [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] feletti karaktereket.",
+ 'config-db-schema-help' => 'A fenti sémák általában megfelelőek.
+Csak akkor módosítson rajta, ha szükség van rá.', # Fuzzy
+ 'config-sqlite-parent-unwritable-nogroup' => 'Nem lehet létrehozni az adatok tárolásához szükséges <code><nowiki>$1</nowiki></code> könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>).
+
+A telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver.
+A folytatáshoz tegye írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: <code><nowiki>$3</nowiki></code>.
+Unix/Linux rendszereken tedd a következőt:
+
+<pre>cd $2
+mkdir $3
+chmod a+w $3</pre>',
+ 'config-ns-other' => 'Más (adja meg)',
+ 'config-admin-name-blank' => 'Adja meg az adminisztrátor felhasználónevét!',
+ 'config-admin-name-invalid' => 'A megadott felhasználónév (<nowiki>$1</nowiki>) érvénytelen.
+Adjon meg egy másik felhasználónevet.',
+ 'config-admin-password-blank' => 'Adja meg az adminisztrátori fiók jelszavát!',
+ 'config-instantcommons-help' => 'Az [//www.mediawiki.org/wiki/InstantCommons Instant Commons] lehetővé teszi, hogy a wikin használhassák a [//commons.wikimedia.org/ Wikimedia Commons] oldalon található képeket, hangokat és más médiafájlokat.
+A használatához a MediaWikinek internethozzáférésre van szüksége.
+
+A funkcióról és hogy hogyan állítható be más wikik esetén [//mediawiki.org/wiki/Manual:$wgForeignFileRepos a kézikönyvben] találhat további információkat.',
+ 'config-install-done' => "'''Gratulálunk!'''
+Sikeresen telepítette a MediaWikit.
+
+A telepítő készített egy <code>LocalSettings.php</code> fájlt.
+Ez tartalmazza az összes beállítást.
+
+[$1 Le kell töltenie], és el kell helyeznie a MediaWiki telepítési könyvtárába (az a könyvtár, ahol az index.php van).
+'''Megjegyzés''': Ha ezt most nem teszi meg, és kilép, a generált fájl nem lesz elérhető a későbbiekben.
+
+Ha ezzel készen van, '''[$2 beléphet a wikibe]'''.", # Fuzzy
+ 'mainpagedocfooter' => "Ha segítségre van szüksége a wikiszoftver használatához, akkor keresse fel a [//meta.wikimedia.org/wiki/Help:Contents User's Guide] oldalt.
+
+== Alapok (angol nyelven) ==
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings Beállítások listája]
+* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki GyIK]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki-kiadások levelezőlistája]",
+);
+
+/** Armenian (Հայերեն)
+ */
$messages['hy'] = array(
'mainpagetext' => "'''«MediaWiki» ծրագիրը հաջողությամբ տեղադրվեց։'''",
'mainpagedocfooter' => "Այցելեք [//meta.wikimedia.org/wiki/Help:Contents User's Guide]՝ վիքի ծրագրային ապահովման օգտագործման մասին տեղեկությունների համար։
Jika Anda menggunakan inang web bersama, penyedia inang Anda harus memberikan nama inang yang benar di dokumentasi mereka.
-Jika Anda menginstal pada server Windows dan menggunakan MySQL, "localhost" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba "127.0.0.1" untuk alamat IP lokal.',
+Jika Anda menginstal pada server Windows dan menggunakan MySQL, "localhost" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba "127.0.0.1" untuk alamat IP lokal.', # Fuzzy
'config-db-host-oracle' => 'TNS basis data:',
'config-db-host-oracle-help' => 'Masukkan [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] yang sah; berkas tnsnames.ora harus dapat diakses oleh instalasi ini.<br />Jika Anda menggunakan pustaka klien 10g atau lebih baru, Anda juga dapat menggunakan metode penamaan [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].',
'config-db-wiki-settings' => 'Identifikasi wiki ini',
'config-install-keys' => 'Membuat kunci rahasia',
'config-insecure-keys' => "'''Peringatan:''' {{PLURAL:$2|Suatu|Beberapa}} kunci aman ($1) yang dibuat selama instalasi {{PLURAL:$2|tidak|tidak}} benar-benar aman. Pertimbangkan untuk mengubah {{PLURAL:$2|kunci|kunci-kunci}} tersebut secara manual.",
'config-install-sysop' => 'Membuat akun pengguna pengurus',
- 'config-install-subscribe-fail' => 'Tidak dapat berlangganan mediawiki-announce',
+ 'config-install-subscribe-fail' => 'Tidak dapat berlangganan mediawiki-announce', # Fuzzy
'config-install-mainpage' => 'Membuat halaman utama dengan konten bawaan',
'config-install-extension-tables' => 'Pembuatan tabel untuk ekstensi yang diaktifkan',
'config-install-mainpage-failed' => 'Tidak dapat membuat halaman utama: $1',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]',
);
-/** Interlingue (Interlingue) */
+/** Interlingue (Interlingue)
+ */
$messages['ie'] = array(
'mainpagetext' => "'''Software del wiki installat con successe.'''",
);
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce wéfù ndétu nke ozi MediaWiki]",
);
-/** Iloko (Ilokano) */
+/** Iloko (Ilokano)
+ */
$messages['ilo'] = array(
'mainpagetext' => "'''Sibaballigi a nainstolar ti MediaWiki.'''",
);
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki nova versioni posto-listo]",
);
-/** Icelandic (íslenska) */
+/** Icelandic (íslenska)
+ */
$messages['is'] = array(
'mainpagetext' => "'''Uppsetning á MediaWiki heppnaðist.'''",
'mainpagedocfooter' => 'Ráðfærðu þig við [//meta.wikimedia.org/wiki/Help:Contents Notandahandbókina] fyrir frekari upplýsingar um notkun wiki-hugbúnaðarins.
'config-memory-bad' => "''Attenzione:''' Il valore di <code>memory_limit</code> di PHP è $1.
Probabilmente è troppo basso.
L'installazione potrebbe non riuscire!",
- 'config-ctype' => "'''Errore''': PHP deve essere compilato con il supporto per la [http://www.php.net/manual/en/ctype.installation.php estensione Ctype].",
+ 'config-ctype' => "'''Errore''': PHP deve essere compilato con il supporto per l'[http://www.php.net/manual/it/ctype.installation.php estensione Ctype].",
'config-xcache' => '[http://xcache.lighttpd.net/ XCache] è installato',
'config-apc' => '[http://www.php.net/apc APC] è installato',
'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] è installato',
Le miniature delle immagini saranno presenti se gli upload vengono abilitati.',
'config-gd' => 'Trovata la GD Graphics Library built-in.
Le miniature delle immagini saranno presenti se gli upload vengono abilitati.',
- 'config-no-scaling' => 'La GD library o ImageMagick non sono state trovate.
+ 'config-no-scaling' => 'Impossibile trovare GD library o ImageMagick.
Le miniature delle immagini saranno disabilitate.',
'config-no-uri' => "'''Errore:''' Impossibile determinare l'URI attuale.
Installazione interrotta.",
* @author 青子守歌
*/
$messages['ja'] = array(
- 'config-desc' => 'MediaWikiのインストーラー',
- 'config-title' => 'MediaWiki $1のインストール',
+ 'config-desc' => 'MediaWiki のインストーラー',
+ 'config-title' => 'MediaWiki $1 のインストール',
'config-information' => '情報',
- 'config-localsettings-upgrade' => '<code>LocalSettings.php</code>ファイルが検出されました。
-アップグレードするため、ボックス中の<code>$wgUpgradeKey</code>の値を入力してください。
-LocalSettings.phpの中にそれはあるでしょう。',
- 'config-localsettings-key' => 'アップグレードキー:',
+ 'config-localsettings-upgrade' => 'ファイル <code>LocalSettings.php</code> を検出しました。
+インストールされているものをアップグレードするには、<code>$wgUpgradeKey</code> の値を以下の欄に入力してください。
+この値は LocalSettings.php 内にあります。',
+ 'config-localsettings-cli-upgrade' => 'ファイル LocalSettings.php を検出しました。
+インストールされているものをアップグレードするには、update.php を実行してください',
+ 'config-localsettings-key' => 'アップグレード キー:',
'config-localsettings-badkey' => '与えられたキーが間違っています',
- 'config-upgrade-key-missing' => 'MediaWikiの既存インストールを検出しました。
-ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\92ã\82¢ã\83\83ã\83\97ã\82°ã\83¬ã\83¼ã\83\89ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81次ã\81®è¡\8cã\82\92LocalSettings.phpの末尾に挿入してください:
+ 'config-upgrade-key-missing' => 'MediaWiki が既にインストールされていることを検出しました。
+ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\82\82ã\81®ã\82\92ã\82¢ã\83\83ã\83\97ã\82°ã\83¬ã\83¼ã\83\89ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81以ä¸\8bã\81®è¡\8cã\82\92 LocalSettings.php の末尾に挿入してください:
$1',
- 'config-localsettings-incomplete' => '現在のLocalSettings.phpは不完全であるようです。
-変数$1が設定されていません。
-LocalSettings.phpを変更してこの変数を設定して、『{{int:Config-continue}}』を押してください。',
- 'config-session-error' => 'セッションの開始エラー:$1',
+ 'config-localsettings-incomplete' => '既存の LocalSettings.php の内容は不完全のようです。
+変数 $1 が設定されていません。
+LocalSettings.php 内でこの変数を設定して、「{{int:Config-continue}}」をクリックしてください。',
+ 'config-session-error' => 'セッションの開始エラー: $1',
'config-session-expired' => 'セッションの有効期限が切れたようです。
セッションの有効期間は$1に設定されています。
php.iniの<code>session.gc_maxlifetime</code>を設定することで、この問題を改善できます。
インストール作業を再起動させてください。',
'config-no-session' => 'セッションのデータが消失しました!
php.iniを確認し、<code>session.save_path</code>が適切なディレクトリに設定されていることを確認してください。',
- 'config-your-language' => 'あなたの言語:',
+ 'config-your-language' => 'あなたの言語:',
'config-your-language-help' => 'インストール作業に使用する言語を選択してください。',
- 'config-wiki-language' => 'ウィキの言語:',
+ 'config-wiki-language' => 'ウィキの言語:',
'config-wiki-language-help' => 'ウィキで主に書き込まれる言語を選択してください。',
- 'config-back' => '←戻る',
+ 'config-back' => '← 戻る',
'config-continue' => '続行 →',
'config-page-language' => '言語',
- 'config-page-welcome' => 'MediaWikiへようこそ!',
+ 'config-page-welcome' => 'MediaWiki へようこそ!',
'config-page-dbconnect' => 'データベースに接続',
'config-page-upgrade' => '既存のインストールを更新',
'config-page-dbsettings' => 'データベースの設定',
'config-page-name' => '名前',
'config-page-options' => 'オプション',
'config-page-install' => 'インストール',
- 'config-page-complete' => '完了!',
+ 'config-page-complete' => '完了!',
'config-page-restart' => 'インストールを再起動',
'config-page-readme' => 'お読みください',
'config-page-releasenotes' => 'リリースノート',
高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode正規化に関するページ]をお読みください。",
'config-unicode-update-warning' => "'''警告''':インストールされているバージョンのUnicode正規化ラッパーは、[http://site.icu-project.org/ ICUプロジェクト]のライブラリの古いバージョンを使用しています。
Unicodeを少しでも利用する可能性があるなら、[//www.mediawiki.org/wiki/Unicode_normalization_considerations アップグレード]する必要があります。",
- 'config-no-db' => '適切なデータベースドライバが見つかりませんでした!PHPにデータベースドライバをインストールする必要があります。
-次の種類のデータベースが使用できます: $1
+ 'config-no-db' => '適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。
+以下の種類のデータベースに対応しています: $1
-å\85±æ\9c\89ã\82µã\83¼ã\83\90ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bå ´å\90\88ã\81¯ã\80\81ã\82µã\83¼ã\83\90ã\81®ç®¡ç\90\86è\80\85ã\81«é\81©å\88\87ã\81ªã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\83\89ã\83©ã\82¤ã\83\90ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\92依頼してください。
-PHPを自分でコンパイルした場合は、たとえば<code>./configure --with-mysql</code>を実行して、データベースクライアントを使用可能に再設定してください。
-DebianまたはUbuntuのパッケージからPHPをインストールした場合は、php5-mysqlモジュールもインストールする必要があります。',
+å\85±æ\9c\89ã\82µã\83¼ã\83\90ã\83¼ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bå ´å\90\88ã\81¯ã\80\81é\81©å\88\87ã\81ªã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ ã\83\89ã\83©ã\82¤ã\83\90ã\83¼ã\81®ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\82\92ã\80\81ã\82µã\83¼ã\83\90ã\83¼ã\81®ç®¡ç\90\86è\80\85ã\81«依頼してください。
+PHP を自分でコンパイルした場合は、例えば <code>./configure --with-mysql</code> を実行して、データベース クライアントを使用できるように再設定してください。
+Debian または Ubuntu のパッケージから PHP をインストールした場合は、php5-mysql モジュールもインストールする必要があります。',
'config-no-fts3' => "'''警告''':SQLiteは[//sqlite.org/fts3.html FTS3]モジュールなしでコンパイルされており、検索機能はこのバックエンドで利用不可能になります。",
'config-register-globals' => "'''警告:PHPの<code>[http://php.net/register_globals register_globals]</code>オプションが有効になっています。'''
'''可能なら無効化してください。'''
Mandrakeを実行している場合、php-xmlパッケージをインストールしてください。',
'config-pcre' => 'PCREをサポートしているモジュールが不足しているようです。
MediaWikiは、Perl互換の正規表現関数の動作が必要です。',
- 'config-pcre-no-utf8' => "'''致命的エラー''': PHPのPCREがPCRE_UTF8サポート無しでコンパイルされています。
-MediaWikiにはUTF-8サポートの関数が必要です。",
+ 'config-pcre-no-utf8' => "'''致命的エラー''': PHP の PCRE が PCRE_UTF8 対応なしでコンパイルされているようです。
+MediaWiki を正しく動作させるには、UTF-8 対応が必要です。",
'config-memory-raised' => 'PHPの<code>memory_limit</code>は$1で、$2に引き上げられました。',
'config-memory-bad' => "'''警告:'''PHPの<code>memory_limit</code>は$1です。
これは、非常に遅い可能性があります。
インストールが失敗するかもしれません!",
- 'config-xcache' => '[http://xcache.lighttpd.net/ XCache]がインストール済み',
- 'config-apc' => '[http://www.php.net/apc APC]がインストール済み',
- 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache]がインストール済み',
- 'config-no-cache' => "'''è¦å\91\8aï¼\9a'''[http://www.php.net/apc APC]ã\80\81[http://xcache.lighttpd.net/ XCache]ã\81\82ã\82\8bã\81\84ã\81¯[http://www.iis.net/download/WinCacheForPhp WinCache]のいずれも見つかりませんでした。
+ 'config-xcache' => '[http://xcache.lighttpd.net/ XCache] がインストール済み',
+ 'config-apc' => '[http://www.php.net/apc APC] がインストール済み',
+ 'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] がインストール済み',
+ 'config-no-cache' => "'''è¦å\91\8aï¼\9a'''[http://www.php.net/apc APC]ã\80\81[http://xcache.lighttpd.net/ XCache]ã\80\81[http://www.iis.net/download/WinCacheForPhp WinCache] のいずれも見つかりませんでした。
オブジェクトのキャッシュは有効化されません。",
- 'config-diff3-bad' => 'GNU diff3が見つかりません。',
+ 'config-diff3-bad' => 'GNU diff3 が見つかりません。',
'config-imagemagick' => 'ImageMagickが見つかりました:<code>$1</code>。
アップロードが有効なら、画像のサムネイルが利用できます。',
'config-gd' => 'GD画像ライブラリが内蔵されていることが確認されました。
'config-no-uri' => "'''エラー:'''現在のURIを決定できませんでした。
インストールは中止されました。",
'config-using-server' => 'サーバー名「<nowiki>$1</nowiki>」を使用しています。',
- 'config-using-uri' => 'サーバーURL「<nowiki>$1$2</nowiki>」を使用しています。',
- 'config-uploads-not-safe' => "'''警告:'''アップロードの既定ディレクトリ<code>$1</code>が、任意のスクリプト実行に関して脆弱性があります。
-MediaWikiはアップロードされたファイルのセキュリティ上の脅威を確認しますが、アップロードを有効化するまえに、[//www.mediawiki.org/wiki/Manual:Security#Upload_security このセキュリティ上の脆弱性を閉じる]ことが強く推奨されます。",
+ 'config-using-uri' => 'サーバー URL「<nowiki>$1$2</nowiki>」を使用しています。',
+ 'config-uploads-not-safe' => "'''警告:'''アップロードの既定ディレクトリ <code>$1</code> に、任意のスクリプト実行に関する脆弱性があります。
+MediaWiki はアップロードされたファイルのセキュリティ上の脅威を確認しますが、アップロードを有効化する前に、[//www.mediawiki.org/wiki/Manual:Security#Upload_security このセキュリティ上の脆弱性を解決する]ことを強く推奨します。",
'config-brokenlibxml' => 'このシステムで使われているPHPとlibxml2のバージョンのこの組み合わせにはバグがあります。具体的には、MediaWikiやその他のウェブアプリケーションでhiddenデータが破損する可能性があります。
PHPを5.2.9かそれ以降のバージョンに、libxml2を2.7.3かそれ以降のバージョンにアップグレードしてください([//bugs.php.net/bug.php?id=45996 PHPでのバグ情報])。
インストールを終了します。',
PHP5.3.2以降に更新するか、この([//bugs.php.net/bug.php?id=50394 PHPに提出されたバグ])を修正するためにPHP5.3.0へ戻してください。
インストールは中止されました。',
'config-suhosin-max-value-length' => 'Suhosin がインストールされており、GETパラメータの長さを $1 バイトに制限しています。MediaWiki の ResourceLoader コンポーネントはこの制限を回避しますが、パフォーマンスは低下します。可能な限り、php.ini で suhosin.get.max_value_length を 1024 以上に設定し、同じ値を LocalSettings.php 中で $wgResourceLoaderMaxQueryLength に設定してください。',
- 'config-db-type' => 'データベースの種類:',
- 'config-db-host' => 'データベースのホスト:',
+ 'config-db-type' => 'データベースの種類:',
+ 'config-db-host' => 'データベースのホスト:',
'config-db-host-help' => '異なるサーバー上にデータベースサーバーがある場合、ホスト名またはIPアドレスをここに入力してください。
もし、共有されたウェブホスティングを使用している場合、ホスティングプロバイダーは正確なホスト名を解説しているはずです。
WindowsでMySQLを使用している場合に、「localhost」は、サーバー名としてはうまく働かないでしょう。もしそのような場合は、ローカルIPアドレスとして「127.0.0.1」を試してみてください。
PostgreSQLを使用している場合、UNIXソケットで接続するにはこの欄を空欄のままにしてください。',
- 'config-db-host-oracle' => 'データベースTNS:',
+ 'config-db-host-oracle' => 'データベース TNS:',
'config-db-host-oracle-help' => '有効な[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ローカル接続名]を入力してください。tnsnames.oraファイルは、このインストールに対して表示されてなければなりません、<br />もしクライアントライブラリ10gもしくはそれ以上を使用している場合、メソッドの名前を[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡易接続]で利用できます。',
- 'config-db-wiki-settings' => 'ã\81\93ã\81®ã\82¦ã\82£ã\82ã\82\92è\98å\88¥',
- 'config-db-name' => 'データベース名:',
+ 'config-db-wiki-settings' => 'ã\81\93ã\81®ã\82¦ã\82£ã\82ã\81®è\98å\88¥æ\83\85å ±',
+ 'config-db-name' => 'データベース名:',
'config-db-name-help' => 'このウィキを識別する名前を入力してください。
空白を含めることはできません。
共有ウェブホストを利用している場合、ホスティングプロバイダーが特定の使用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。',
- 'config-db-name-oracle' => 'データベースのスキーマ:',
- 'config-db-install-account' => 'ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81®ã\81\9fã\82\81ã\81®利用者アカウント',
- 'config-db-username' => 'データベースの利用者名:',
- 'config-db-password' => 'データベースのパスワード:',
+ 'config-db-name-oracle' => 'データベースのスキーマ:',
+ 'config-db-install-account' => 'ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«ã\81§ä½¿ç\94¨ã\81\99ã\82\8b利用者アカウント',
+ 'config-db-username' => 'データベースのユーザー名:',
+ 'config-db-password' => 'データベースのパスワード:',
'config-db-password-empty' => '新しいデータベースの利用者名 $1 のパスワードを入力してください。
パスワードを設定しないでユーザを作ることもできるかもしれませんが、安全ではありません。',
'config-db-install-username' => 'インストール中にデータベースに接続するために使うユーザ名を入力してください。これは MediaWiki アカウントのユーザ名 (利用者名) のことではありません。あなたのデータベースでのユーザ名です。',
'config-db-wiki-account' => 'インストール作業終了後の利用者アカウント',
'config-db-wiki-help' => '通常のウィキ操作中にデータベースへの接続する時に利用する利用者名とパスワードを入力してください。
アカウントが存在せず、インストールのアカウントに十分な権限がある場合は、この利用者アカウントは、ウィキを操作する上で最小限の権限を持った状態で作成されます。',
- 'config-db-prefix' => 'データベーステーブルの接頭辞:',
+ 'config-db-prefix' => 'データベース テーブルの接頭辞:',
'config-db-prefix-help' => 'データベースを複数のウィキ間、あるいはMediaWikiと他のウェブアプリケーションで共有する必要がある場合、衝突を避けるために、すべてのテーブル名に接頭辞を付ける必要があります。
空白は使用できません。
このフィールドは、通常は空のままです。',
'config-db-charset' => 'データベースの文字セット',
- 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0バイナリ',
+ 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 バイナリ',
'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
- 'config-charset-mysql4' => 'MySQL 4.0 下位互換UTF-8',
- 'config-charset-help' => "'''警告:'''MySQL 4.1+で'''下位互換UTF-8'''を使用し、その後<code>mysqldump</code>でデータベースをバックアップすると、すべての非ASCII文字が破壊され、不可逆的にバップアップが壊れるかもしれません。
-
-'''バイナリー形式'''では、MediaWikiは、UTF-8テキストを、データベースのバイナリーフィールドに格納します。
-これは、MySQLのUTF-8形式より効率的で、Unicode文字の全範囲を利用できるようになります。
-'''UTF-8形式'''では、MySQLは、データ内でどの文字集合を使用しているかを知っていて、それに対して適切な提示と変換をするでしょうが、
-[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できるようにはなりません。",
- 'config-mysql-old' => 'MySQLの$1以降が要求されています。あなたの所有のものは$2です。',
- 'config-db-port' => 'データベースポート:',
- 'config-db-schema' => 'メディアウィキの図式',
- 'config-db-schema-help' => '上の図式は常に正確です。
-必要である場合のみ、変更してください。',
- 'config-sqlite-dir' => 'SQLiteのデータディレクトリ:',
- 'config-sqlite-dir-help' => "SQLiteは単一のファイル内にすべてのデータを保持しています。
-
-指定したディレクトリは、インストール時にウェブサーバーが書き込める必要があります。
-
-このディレクトリはウェブからアクセス'''不可能'''である必要があります。これがPHPファイルがある場所に配置できない理由です。
-
-インストーラーは同時に<code>.htaccess</code>ファイルに書き込みます。しかし、これが失敗しても誰かがあなたの生のデータベースにアクセスすることが可能となるでしょう。データベースは生のデータ(メールアドレス、パスワードのハッシュ値)の他、削除された版、その他、ウィキ上の制限されているデータを含んでいます。
-
-例えば<code>/var/lib/mediawiki/yourwiki</code>のように、別の場所にデータベースを配置することを検討してください。",
- 'config-oracle-def-ts' => '既定のテーブル領域:',
- 'config-oracle-temp-ts' => '一時的なテーブル領域:',
+ 'config-charset-mysql4' => 'MySQL 4.0 後方互換 UTF-8',
+ 'config-charset-help' => "'''警告:''' MySQL 4.1+ で'''後方互換 UTF-8''' を使用している状態で、<code>mysqldump</code> でデータベースをバックアップすると、すべての非 ASCII 文字が破壊されてしまい、バックアップが不可逆的に破損してしまいます!
+
+'''バイナリ モード'''では、MediaWiki は、UTF-8 テキストをデータベースのバイナリ フィールドに格納します。
+これは、MySQL の UTF-8 モードより効率的で、Unicode 文字の全範囲を利用できるようになります。
+'''UTF-8 モード'''では、MySQL は、データ内で使用している文字集合を知っているため、適切に表現や変換ができますが、
+[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できません。",
+ 'config-mysql-old' => 'MySQL $1 以降が必要です。ご使用中の MySQL は $2 です。',
+ 'config-db-port' => 'データベースのポート:',
+ 'config-db-schema' => 'MediaWiki のスキーマ:',
+ 'config-db-schema-help' => '通常はこのスキーマで問題ありません。
+必要な場合のみ変更してください。',
+ 'config-sqlite-dir' => 'SQLite データ ディレクトリ:',
+ 'config-sqlite-dir-help' => "SQLite は単一のファイル内にすべてのデータを格納しています。
+
+指定したディレクトリは、インストール時にウェブ サーバーが書き込めるようにしておく必要があります。
+
+このディレクトリはウェブからアクセス'''不可能'''である必要があります。PHP ファイルがある場所には配置できないのはこのためです。
+
+インストーラーは <code>.htaccess</code> ファイルにも書き込みます。しかし、これが失敗した場合は、誰かが生のデータベースにアクセスできてしまいます。
+データベースは、生のデータ (メールアドレス、パスワードのハッシュ値) の他、削除された版、その他ウィキ上の制限されているデータを含んでいます。
+
+例えば <code>/var/lib/mediawiki/yourwiki</code> のように、別の場所にデータベースを配置することを検討してください。",
+ 'config-oracle-def-ts' => '既定のテーブル領域:',
+ 'config-oracle-temp-ts' => '一時的なテーブル領域:',
'config-type-mysql' => 'MySQL',
'config-type-postgres' => 'PostgreSQL',
'config-type-sqlite' => 'SQLite',
'config-type-oracle' => 'Oracle',
'config-type-ibm_db2' => 'IBM DB2',
- 'config-support-info' => 'メディアウィキは次のようなデータベースシステムをサポートする:
+ 'config-support-info' => 'MediaWiki は以下のデータベース システムに対応しています:
$1
-もし、データベースシステムが不可視であるならば、以下のようにリスト化されたものを使用してみてください。可能なサポートの指示に従ってください。',
+使用しようとしているデータベース システムが下記の一覧にない場合は、上記リンク先の手順に従ってインストールしてください。',
'config-support-mysql' => '* $1はMediaWikiの主要な対象で、もっともサポートされています([http://www.php.net/manual/en/mysql.installation.php MySQLのサポート下でPHPをコンパイルする方法])',
'config-support-postgres' => '* $1は、MySQLの代替として、人気のあるオープンソースデータベースシステムです([http://www.php.net/manual/en/pgsql.installation.php PostgreSQLのサポート下でPHPをコンパイルする方法])',
'config-support-sqlite' => '* $1は、良くサポートされている、軽量データベースシステムです。([http://www.php.net/manual/en/pdo.installation.php SQLiteのサポート下でPHPをコンパイルする方法]、PDOを使用)',
'config-support-oracle' => '* $1は商業企業のデータベースです。([http://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])',
'config-support-ibm_db2' => '* $1 は商業企業のデータベースです。',
- 'config-header-mysql' => 'MySQLの設定',
- 'config-header-postgres' => 'PostgreSQLの設定',
- 'config-header-sqlite' => 'SQLiteの設定',
- 'config-header-oracle' => 'Oracleの設定',
- 'config-header-ibm_db2' => 'IBM DB2の設定',
+ 'config-header-mysql' => 'MySQL の設定',
+ 'config-header-postgres' => 'PostgreSQL の設定',
+ 'config-header-sqlite' => 'SQLite の設定',
+ 'config-header-oracle' => 'Oracle の設定',
+ 'config-header-ibm_db2' => 'IBM DB2 の設定',
'config-invalid-db-type' => '無効なデータベースの種類',
- 'config-missing-db-name' => 'ã\80\8cã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹å\90\8dã\80\8dã\82\92å\85¥å\8a\9bã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99',
- 'config-missing-db-host' => 'ã\80\8cã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ã\83\9bã\82¹ã\83\88ã\80\8dã\82\92å\85¥å\8a\9bã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99',
- 'config-missing-db-server-oracle' => '「データベースTNS」に値を入力する必要があります',
+ 'config-missing-db-name' => 'ã\80\8cã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹å\90\8dã\80\8dã\82\92å\85¥å\8a\9bã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84',
+ 'config-missing-db-host' => 'ã\80\8cã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®ã\83\9bã\82¹ã\83\88ã\80\8dã\82\92å\85¥å\8a\9bã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84',
+ 'config-missing-db-server-oracle' => '「データベース TNS」の値を入力してください',
'config-invalid-db-server-oracle' => '「$1」は無効なデータベース TNS です。
アスキー英字(a-z、A-Z)、数字(0-9)、アンダーバー(_)、ドット(.)のみを使用してください。',
'config-invalid-db-name' => '「$1」は無効なデータベース名です。
'config-connection-error' => '$1。
以下のホスト名、ユーザ名、パスワードをチェックして、再度試してみてください。',
- 'config-invalid-schema' => 'ã\83¡ã\83\87ã\82£ã\82¢ã\82¦ã\82£ã\82ã\80\8c$1ã\80\8dã\81«ã\81\8aã\81\91ã\82\8bç\84¡å\8a¹ã\81ªå\9b³å¼\8fです。
-アスキー英字(a-z、A-Z)、数字(0-9)、下線(_)のみを使用してください。',
- 'config-postgres-old' => 'PostgreSQLの$1あるいはそれ以降が必要で、いまのバージョンは$2です。',
+ 'config-invalid-schema' => 'ã\80\8c$1ã\80\8dã\81¯ MediaWiki ã\81®ã\82¹ã\82ã\83¼ã\83\9eã\81¨ã\81\97ã\81¦ç\84¡å\8a¹です。
+ASCII の英数字 (a-z、A-Z、0-9)、下線 (_) のみを使用してください。',
+ 'config-postgres-old' => 'PostgreSQL $1 以降が必要です。ご使用中の PostgreSQL は $2 です。',
'config-sqlite-name-help' => 'あなたのウェキと同一性のある名前を選んでください。
空白およびハイフンは使用しないでください。
SQLiteのデータファイル名として使用されます。',
- 'config-sqlite-parent-unwritable-group' => 'データディレクトリ<code><nowiki>$1</nowiki></code>を作成できません。親ディレクトリ<code><nowiki>$2</nowiki></code>は、ウェブサーバーから書き込みできませんでした。
+ 'config-sqlite-parent-unwritable-group' => 'データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。
-ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«æ©\9fè\83½ã\81¯ã\80\81å®\9fè¡\8cã\81\97ã\81¦ã\81\84ã\82\8bã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ã\83¼ã\81®ユーザーを特定しました。
-続行するには、<code><nowiki>$3</nowiki></code>ディレクトリを書き込み可能にしてください。
-UnixあるいはLinux上では、以下を実行してください:
+ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81¯ã\80\81ã\82¦ã\82§ã\83\96 ã\82µã\83¼ã\83\90ã\83¼ã\81®å®\9fè¡\8cユーザーを特定しました。
+続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に書き込めるようにしてください。
+Unix または Linux であれば、以下を実行してください:
<pre>cd $2
mkdir $3
chgrp $4 $3
chmod g+w $3</pre>',
- 'config-sqlite-parent-unwritable-nogroup' => 'データディレクトリ<code><nowiki>$1</nowiki></code>を作成できません。親ディレクトリ<code><nowiki>$2</nowiki></code>は、ウェブサーバから書き込みできませんでした。
+ 'config-sqlite-parent-unwritable-nogroup' => 'データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは、親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。
-ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83«æ©\9fè\83½ã\81¯ã\80\81å®\9fè¡\8cã\81\97ã\81¦ã\81\84ã\82\8bã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ã\81®ユーザーを特定できませんでした。
-続行するには、<code><nowiki>$3</nowiki></code>ディレクトリを、ウェブサーバ(と他のユーザ!)からグローバルに書き込めるようにしてください。
-UnixあるいはLinux上では、以下を実行してください:
+ã\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81¯ã\80\81ã\82¦ã\82§ã\83\96 ã\82µã\83¼ã\83\90ã\83¼ã\81®å®\9fè¡\8cユーザーを特定できませんでした。
+続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に、ウェブ サーバー (と、あらゆる人々!) がグローバルに書き込めるようにしてください。
+Unix または Linux では、以下を実行してください:
<pre>cd $2
mkdir $3
chmod a+w $3</pre>',
- 'config-sqlite-mkdir-error' => 'データディレクトリ「$1」の作成中にエラーが発生しました。
+ 'config-sqlite-mkdir-error' => 'データ ディレクトリ「$1」を作成する際にエラーが発生しました。
場所を確認してから、再度試してください。',
'config-sqlite-dir-unwritable' => 'ディレクトリ「$1」に書き込めません。
-ウェブサーバーが書き込めるようにパーミッションを変更してから、度試してください。',
+ウェブ サーバーが書き込めるようにパーミッションを変更してから、再度試してください。',
'config-sqlite-connection-error' => '$1。
-下記のデータディレクトリとデータベース名を確認してから、再度試してみてください。',
- 'config-sqlite-readonly' => 'ファイル<code>$1</code>は書き込み不能です。',
- 'config-sqlite-cant-create-db' => 'データベースファイル<code>$1</code>を作成できませんでした。',
- 'config-sqlite-fts3-downgrade' => 'PHPはFTS3のサポート、テーブルのダウングレードが無効です。',
- 'config-can-upgrade' => 'ã\81\93ã\81®ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81«ã\81¯ã\83¡ã\83\87ã\82£ã\82¢ã\82¦ã\82£ã\82ã\83\86ã\83¼ã\83\96ã\83«ã\81\8cå\98å\9c¨ã\81\97ます。
-ã\81\9dã\82\8cã\82\89ã\82\92ã\83¡ã\83\87ã\82£ã\82¢ã\82¦ã\82£ã\82$1ã\81«ã\82¢ã\83\83ã\83\97ã\82°ã\83¬ã\83¼ã\83\89ã\81\99ã\82\8bã\81\9fã\82\81ã\81«「続行」をクリックしてください。',
+データ ディレクトリおよびデータベース名を確認してから、再度試してください。',
+ 'config-sqlite-readonly' => 'ファイル <code>$1</code> に書き込めません。',
+ 'config-sqlite-cant-create-db' => 'データベース ファイル <code>$1</code> を作成できませんでした。',
+ 'config-sqlite-fts3-downgrade' => 'PHP が FTS3 に対応していないため、テーブルをダウングレードしています',
+ 'config-can-upgrade' => 'ã\81\93ã\81®ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81«ã\81¯ã\80\80MediaWiki ã\83\86ã\83¼ã\83\96ã\83«ã\81\8cã\81\82ã\82\8aます。
+ã\81\93ã\82\8cã\82\89ã\81®ã\83\86ã\83¼ã\83\96ã\83«ã\82\92 MediaWiki $1 ã\81«ã\82¢ã\83\83ã\83\97ã\82°ã\83¬ã\83¼ã\83\89ã\81\99ã\82\8bã\81«ã\81¯ã\80\81「続行」をクリックしてください。',
'config-upgrade-done' => "更新は完了しました。
[$1 ウィキを使い始める]ことができます。
'config-show-table-status' => 'SHOW TABLE STATUSクエリーが失敗しました!',
'config-unknown-collation' => "'''警告:''' データベースは認識されない照合を使用しています。",
'config-db-web-account' => 'ウェブアクセスのためのデータベースアカウント',
- 'config-db-web-help' => 'ウィキの元来の操作中、ウェブサーバーがデーターベースサーバーに接続できるように、ユーザ名とパスワードを選択してください。',
- 'config-db-web-account-same' => 'インストールのために同じアカウントを使用してください',
- 'config-db-web-create' => '既に存在していないのであれば、アカウントを作成してください',
+ 'config-db-web-help' => 'ウィキの通常の操作の際に、ウェブ サーバーがデータベース サーバーに接続できるように、ユーザー名とパスワードを指定してください。',
+ 'config-db-web-account-same' => 'インストール作業と同じアカウントを使用する',
+ 'config-db-web-create' => 'アカウントが存在しない場合は作成する',
'config-db-web-no-create-privs' => 'あなたがインストールのために定義したアカウントは、アカウント作成のための特権としては不充分です。
あなたがここで指定したアカウントは既に存在している必要があります。',
- 'config-mysql-engine' => 'ストレージエンジン:',
+ 'config-mysql-engine' => 'ストレージ エンジン:',
'config-mysql-innodb' => 'InnoDB',
'config-mysql-myisam' => 'MyISAM',
'config-mysql-engine-help' => "'''InnoDB'''は、並行処理のサポートに優れているので、ほとんどの場合において最良の選択肢です。
'config-mysql-charset' => 'データベースの文字セット:',
'config-mysql-binary' => 'バイナリ',
'config-mysql-utf8' => 'UTF-8',
- 'config-mysql-charset-help' => "'''バイナリー形式'''では、MediaWikiは、UTF-8テキストを、データベースのバイナリーフィールドに格納します。
-これは、MySQLのUTF-8形式より効率的で、Unicode文字の全範囲を利用できるようになります。
+ 'config-mysql-charset-help' => "'''バイナリ モード'''では、MediaWiki は、UTF-8 テキストをデータベースのバイナリ フィールドに格納します。
+これは、MySQL の UTF-8 モードより効率的で、Unicode 文字の全範囲を利用できるようになります。
-'''UTF-8形式'''では、MySQLは、データ内でどの文字集合を使用しているかを知っていて、それに対して適切な提示と変換をするでしょうが、
-[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 å\9fºæ\9c¬å¤\9aè¨\80èª\9eé\9d¢]ã\81®å¤\96ã\81«ã\81\82ã\82\8bæ\96\87å\97ã\82\92æ ¼ç´\8dã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ã\81¯ã\81ªã\82\8aã\81¾ã\81\9bã\82\93ã\80\82",
- 'config-site-name' => 'ウィキの名前:',
+'''UTF-8 モード'''では、MySQL は、データ内で使用している文字集合を知っているため、適切に表現や変換ができますが、
+[//ja.wikipedia.org/wiki/%E5%9F%BA%E6%9C%AC%E5%A4%9A%E8%A8%80%E8%AA%9E%E9%9D%A2 基本多言語面]の外にある文字を格納できません。",
+ 'config-site-name' => 'ウィキ名:',
'config-site-name-help' => 'この事象はブラウザーのタイトルバーと他のさまざまな場所に現れる。',
'config-site-name-blank' => 'サイト名を入力してください。',
- 'config-project-namespace' => 'プロジェクト名前空間:',
+ 'config-project-namespace' => 'プロジェクト名前空間:',
'config-ns-generic' => 'プロジェクト',
- 'config-ns-site-name' => 'ウィキ名と同じ:$1',
- 'config-ns-other' => 'その他(指定してください)',
+ 'config-ns-site-name' => 'ウィキ名と同じ: $1',
+ 'config-ns-other' => 'その他 (指定してください)',
'config-ns-other-default' => 'マイウィキ',
'config-project-namespace-help' => "ウィキペディアの例に従い、多くのウィキは、コンテンツのページとは分離したポリシーページを「'''プロジェクトの名前空間'''」に持っています。
この名前空間のページのタイトルはすべて、ある接頭辞で始まります。それをここで指定することができます。
-この接頭辞はウィキの名前に由来するのが伝統的ですが、「#」や「:」のような区切り記号を含めることはできません。",
+この接頭辞はウィキの名前に由来するのが伝統的ですが、「#」や「:」のような区切り文字を含めることはできません。",
'config-ns-invalid' => '"<nowiki>$1</nowiki>"のように指定された名前空間は無効です。
違うプロジェクト名前空間を指定してください。',
'config-admin-box' => '管理アカウント',
- 'config-admin-name' => '名前:',
- 'config-admin-password' => 'パスワード:',
- 'config-admin-password-confirm' => 'パスワードの再入力:',
- 'config-admin-help' => 'ここにあなたの希望するユーザ名を入力してください(例えば"Joe Bloggs"など)。
+ 'config-admin-name' => '名前:',
+ 'config-admin-password' => 'パスワード:',
+ 'config-admin-password-confirm' => 'パスワードの再入力:',
+ 'config-admin-help' => '希望するユーザー名をここに入力してください (例: "Joe Bloggs")。
この名前でこのウィキにログインすることになります。',
'config-admin-name-blank' => '管理者のユーザ名を入力してください。',
'config-admin-name-invalid' => '指定されたユーザ名 "<nowiki>$1</nowiki>" は無効です。
'config-admin-password-blank' => '管理者アカウントのパスワードを入力してください。',
'config-admin-password-same' => 'ユーザ名と同じパスワードは使えません。',
'config-admin-password-mismatch' => '入力された2つのパスワードが一致しません。',
- 'config-admin-email' => 'メールアドレス:',
+ 'config-admin-email' => 'メールアドレス:',
'config-admin-email-help' => 'メールアドレスを入力してください。他の利用者からのメールの受け取り、パスワードのリセット、ウォッチリストに登録したページの更新通知に使用します。空欄のままにすることもできます。',
'config-admin-error-user' => '"<nowiki>$1</nowiki>"という名前の管理者を作成する際に内部エラーが発生しました。',
'config-admin-error-password' => '管理者"<nowiki>$1</nowiki>"のパスワードを設定する際に内部エラーが発生しました: <pre>$2</pre>',
残りの設定を飛ばして、今すぐにウィキをインストールできます。',
'config-optional-continue' => '私にもっと質問してください。',
'config-optional-skip' => 'もう飽きてしまったので、とにかくウィキをインストールしてください。',
- 'config-profile' => '正しいプロフィールのユーザ:',
+ 'config-profile' => '利用者権限のプロファイル:',
'config-profile-wiki' => '伝統的なウィキ',
'config-profile-no-anon' => 'アカウントの作成が必要',
'config-profile-fishbowl' => '承認された編集者のみ',
'config-license-cc-by-sa' => 'クリエイティブ・コモンズ 表示-継承',
'config-license-cc-by' => 'クリエイティブ・コモンズ 表示',
'config-license-cc-by-nc-sa' => 'クリエイティブ・コモンズ 表示-非営利-継承',
- 'config-license-gfdl' => 'GNUフリー文書利用許諾契約書1.3以降',
+ 'config-license-gfdl' => 'GNU フリー文書利用許諾契約書 1.3 以降',
'config-license-pd' => 'パブリック・ドメイン',
'config-license-cc-choose' => 'その他のクリエイティブ・コモンズ・ライセンスを選択する',
'config-license-help' => "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]の元に置かれています。
'config-email-auth-help' => "この選択肢を有効にすると、利用者がメールアドレスを設定あるいは変更したときに送信されるリンクにより、そのアドレスを確認しなければならなくなります。
認証済みのアドレスだけが、他の利用者からのメールや、変更通知のメールを受け取ることができます。
公開ウィキでは、メール機能による潜在的な不正利用の防止のため、この選択肢を設定することが'''推奨'''されます。",
- 'config-email-sender' => '返信メールアドレス:',
+ 'config-email-sender' => '返信先メールアドレス:',
'config-email-sender-help' => '送信メールで返信先として使用するメールアドレスを入力してください。
このアドレスは、宛先不明の場合の通知の宛先になります。
多くのメールサーバーでは、少なくともドメイン名部分は有効である必要があります。',
'config-upload-settings' => '画像およびファイルのアップロード',
'config-upload-enable' => 'ファイルのアップロードを有効にする',
- 'config-upload-help' => 'ファイルのアップロードは潜在的にあなたのサーバにセキュリティ上の危険をさらします。
-更なる情報のために、マニュアルの[//www.mediawiki.org/wiki/Manual:Security security section] を読むことをすすめます。
+ 'config-upload-help' => 'ファイルのアップロードは、あなたのサーバーをセキュリティ上の潜在的な危険に晒します。
+この詳細は、マニュアルの [//www.mediawiki.org/wiki/Manual:Security security section] をお読みください。
-ã\83\95ã\82¡ã\82¤ã\83«ã\82\92ã\82¢ã\83\83ã\83\97ã\83ã\83¼ã\83\89ã\81§ã\81\8dã\82\8bã\82\88ã\81\86ã\81«ã\81\99ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ã\83¡ã\83\87ã\82£ã\82¢ã\82¦ã\82£ã\82ã\81®ã\83«ã\83¼ã\83\88ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªä¸\8bã\81®<code>images</code>ã\82µã\83\96ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81®ã\83¢ã\83¼ã\83\89ã\82\92å¤\89æ\9b´ã\81\97ã\81¾ã\81\99ã\80\82ã\81\9dã\81\86ã\81\99ã\82\8bã\81\93ã\81¨ã\81§ã\80\81ã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ã\83¼ã\81¯そこに書き込めるようになります。
+ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¢ã\83\83ã\83\97ã\83ã\83¼ã\83\89ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8bã\81«ã\81¯ã\80\81MediaWiki ã\81®ã\83«ã\83¼ã\83\88 ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªå\86\85ã\81® <code>images</code> ã\82µã\83\96 ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81®ã\83¢ã\83¼ã\83\89ã\82\92å¤\89æ\9b´ã\81\97ã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81«ã\82\88ã\82\8aã\80\81ã\82¦ã\82§ã\83\96 ã\82µã\83¼ã\83\90ã\83¼ã\81\8cそこに書き込めるようになります。
そして、このオプションを有効にしてください。',
'config-upload-deleted' => '削除されたファイルのためのディレクトリ:',
'config-upload-deleted-help' => '削除されるファイルを保存するためのディレクトリを選択してください。
これがウェブからアクセスできないことが理想です。',
- 'config-logo' => 'ロゴのURL:',
+ 'config-logo' => 'ロゴ のURL:',
'config-logo-help' => 'MediaWikiの既定の外装では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。
適切なサイズの画像をアップロードして、そのURLをここに入力してください。
ロゴが不要の場合は、このボックスを空白のままにしてください。',
- 'config-instantcommons' => 'InstantCommons機能を有効にする',
+ 'config-instantcommons' => 'Instant Commons 機能を有効にする',
'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons]は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトで見つかった画像や音声、その他のメディアをウィキ上で利用することができるようになる機能です。
これを有効化するには、MediaWikiはインターネットに接続できなければなりません。
-ウィキメディアコモンズ以外のウィキを同じように設定する方法など、この機能に関する詳細な情報は、[//mediawiki.org/wiki/Manual:$wgForeignFileRepos マニュアル]をご覧ください。',
+ã\82¦ã\82£ã\82ã\83¡ã\83\87ã\82£ã\82¢ã\83»ã\82³ã\83¢ã\83³ã\82ºä»¥å¤\96ã\81®ã\82¦ã\82£ã\82ã\82\92å\90\8cã\81\98ã\82\88ã\81\86ã\81«è¨å®\9aã\81\99ã\82\8bæ\96¹æ³\95ã\81ªã\81©ã\80\81ã\81\93ã\81®æ©\9fè\83½ã\81«é\96¢ã\81\99ã\82\8b詳細ã\81ªæ\83\85å ±ã\81¯ã\80\81[//mediawiki.org/wiki/Manual:$wgForeignFileRepos ã\83\9eã\83\8bã\83¥ã\82¢ã\83«]ã\82\92ã\81\94覧ã\81\8fã\81 ã\81\95ã\81\84ã\80\82',
'config-cc-error' => 'クリエイティブ・コモンズ・ライセンスの選択器から結果が得られませんでした。
ライセンスの名前を手動で入力してください。',
'config-cc-again' => 'もう一度選択してください...',
- 'config-cc-not-chosen' => 'あなたの求めるクリエイティブコモンズのライセンスを選んで、"続行"をクリックしてください。',
+ 'config-cc-not-chosen' => '希望するクリエイティブ・コモンズのライセンスを選択して、「続行」をクリックしてください。',
'config-advanced-settings' => '高度な設定',
'config-cache-options' => 'オブジェクトのキャッシュの設定:',
- 'config-cache-help' => 'ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®ã\82ã\83£ã\83\83ã\82·ã\83¥ã\81¯ã\80\81使ç\94¨ã\81\97ã\81\9fã\83\87ã\83¼ã\82¿ã\82\92é »ç¹\81ã\81«ã\82ã\83£ã\83\83ã\82·ã\83³ã\82°ã\81\99ã\82\8bã\81\93ã\81¨ã\81«ã\82\88ã\81£ã\81¦ã\80\81ã\83¡ã\83\87ã\82£ã\82¢ã\82¦ã\82£ã\82ã\81®ã\82¹ã\83\94ã\83¼ã\83\89æ\94¹å\96\84ã\81«ä½¿ç\94¨ã\81\95ã\82\8cます。
-中〜大サイトにおいては、これを有効にするために大変望ましいことです。また小さなサイトにおいても同様な利点をもたらすと考えられます。',
+ 'config-cache-help' => 'ã\82ªã\83\96ã\82¸ã\82§ã\82¯ã\83\88ã\81®ã\82ã\83£ã\83\83ã\82·ã\83¥ã\82\92使ç\94¨ã\81\99ã\82\8bã\81¨ã\80\81é »ç¹\81ã\81«ä½¿ç\94¨ã\81\99ã\82\8bã\83\87ã\83¼ã\82¿ã\82\92ã\82ã\83£ã\83\83ã\82·ã\83¥ã\81\99ã\82\8bã\81\9fã\82\81 MediaWiki ã\81®å\8b\95ä½\9cé\80\9f度ã\82\92æ\94¹å\96\84ã\81§ã\81\8dます。
+中〜大規模サイトではこれを有効にすることを強くお勧めします。小規模サイトでも同様に効果があります。',
'config-cache-none' => 'キャッシングしない(機能は取り払われます、しかもより大きなウィキサイト上でスピードの問題が発生します)',
- 'config-cache-accel' => 'PHPオブジェクトキャッシング(APC、XCacheあるいはWinCache)',
+ 'config-cache-accel' => 'PHP オブジェクト キャッシュ (APC、XCache、WinCache のいずれか)',
'config-cache-memcached' => 'Memcachedを使用(追加の設定が必要です)',
'config-memcached-servers' => 'メモリをキャッシュされたサーバ:',
'config-memcached-help' => 'Memcachedを使用するIPアドレスの一覧。
これらは更に多くの設定を要求するかもしれませんが、今これらを有効にすることができます。',
'config-install-alreadydone' => "'''警告:''' 既にMediaWikiがインストール済みで、再びインストールし直そうとしています。
次のページへ進んでください。",
- 'config-install-begin' => '「{{int:config-continue}}」を押すと、MediaWikiのインストールを開始することができます。
-å¤\89æ\9b´ã\81\97ã\81\9fã\81\84è¨å®\9aã\81\8cã\81\82ã\82\8cã\81°、「{{int:Config-back}}」を押してください。',
+ 'config-install-begin' => '「{{int:config-continue}}」を押すと、MediaWiki のインストールを開始できます。
+å¤\89æ\9b´ã\81\97ã\81\9fã\81\84è¨å®\9aã\81\8cã\81\82ã\82\8bå ´å\90\88ã\81¯、「{{int:Config-back}}」を押してください。',
'config-install-step-done' => '実行',
'config-install-step-failed' => '失敗した',
'config-install-extensions' => '拡張機能を含む',
'config-install-database' => 'データベースの構築',
'config-install-schema' => 'スキーマの作成',
'config-install-pg-schema-not-exist' => 'PostgreSQL スキーマがありません。',
- 'config-install-pg-schema-failed' => 'テーブルの作成に失敗した。
-ユーザ"$1"が図式"$2"に書き込みができるようにしてください。',
+ 'config-install-pg-schema-failed' => 'ã\83\86ã\83¼ã\83\96ã\83«ã\81®ä½\9cæ\88\90ã\81«å¤±æ\95\97ã\81\97ã\81¾ã\81\97ã\81\9fã\80\82
+利用者「$1」がスキーマ「$2」に書き込めるようにしてください。',
'config-install-pg-commit' => '変更を送信',
- 'config-install-user' => 'データベースユーザを作成する',
- 'config-install-user-grant-failed' => 'ユーザー「$1」に許可を与えることに失敗しました。:$2',
+ 'config-install-user' => 'データベースユーザーの作成',
+ 'config-install-user-alreadyexists' => 'ユーザー「$1」は既に存在します',
+ 'config-install-user-create-failed' => 'ユーザー「$1」の作成に失敗しました: $2',
+ 'config-install-user-grant-failed' => 'ユーザー「$1」に許可を与えることに失敗しました: $2',
+ 'config-install-user-missing' => '指定したユーザー「$1」は存在しません。',
+ 'config-install-user-missing-create' => '指定したユーザー「$1」は存在しません。
+アカウントを作成する場合は、下の「アカウント作成」をクリックしてください。',
'config-install-tables' => 'テーブルの作成',
'config-install-tables-exist' => "'''警告''':MediaWikiテーブルは既に存在するようです。
作成を飛ばします。",
- 'config-install-tables-failed' => "'''エラー''':テーブルの作成が、次のエラーにより失敗しました:$1",
- 'config-install-interwiki' => 'æ\97¢å®\9aã\81®ã\82¦ã\82£ã\82é\96\93ã\83\86ã\83¼ã\83\96ã\83«ã\82\92å°\8eå\85¥ã\81\97ã\81¦ã\81\84ã\81¾ã\81\99',
- 'config-install-interwiki-list' => 'ファイル<code>interwiki.list</code>を見つけることができませんでした。',
+ 'config-install-tables-failed' => "'''エラー''': テーブルの作成が、以下のエラーにより失敗しました: $1",
+ 'config-install-interwiki' => 'æ\97¢å®\9aã\81®ã\82¦ã\82£ã\82é\96\93ã\83\86ã\83¼ã\83\96ã\83«ã\81®å°\8eå\85¥',
+ 'config-install-interwiki-list' => 'ファイル <code>interwiki.list</code> から読み取れませんでした。',
'config-install-interwiki-exists' => "'''警告''':ウィキ間テーブルは既に登録されているようです。
既定のテーブルを無視します。",
- 'config-install-keys' => '秘密鍵を生成する',
- 'config-install-sysop' => '管理者のユーザーアカウントを作成する',
- 'config-install-mainpage' => '既定の接続でメインページを作成',
- 'config-install-mainpage-failed' => 'メインページを挿入できませんでした:$1',
+ 'config-install-stats' => '統計情報の初期化',
+ 'config-install-keys' => '秘密鍵の生成',
+ 'config-install-sysop' => '管理者のアカウントの作成',
+ 'config-install-mainpage' => 'メインページを既定の内容で作成',
+ 'config-install-mainpage-failed' => 'メインページを挿入できませんでした: $1',
'config-install-done' => "'''おめでとうございます!'''
MediaWikiのインストールに成功しました。
'''注意''': もし、これを今しなければ、つまり、このファイルをダウンロードせずインストールを終了した場合、この生成された設定ファイルは利用されません。
それを完了すれば、'''[$2 ウィキに入る]'''ことができます。",
- 'config-download-localsettings' => 'LocalSettings.phpをダウンロード',
+ 'config-download-localsettings' => 'LocalSettings.php をダウンロード',
'config-help' => 'ヘルプ',
'mainpagetext' => "'''MediaWiki のインストールに成功しました。'''",
'mainpagedocfooter' => 'ウィキソフトウェアの使い方に関する情報は[//meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。
'mainpagedocfooter' => "Se vores engelskspråĝede [//meta.wikimedia.org/wiki/MediaWiki_localisation dokumentåsje tilpasnenge'm åf æ brugergrænseflade] og [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide æ brugervejlednenge] før åplysnenger åpsætnenge'm og anvendelse.",
);
-/** Javanese (Basa Jawa) */
+/** Javanese (Basa Jawa)
+ */
$messages['jv'] = array(
'mainpagetext' => "'''Prangkat empuk wiki wis suksès dipasang.'''",
'mainpagedocfooter' => "Mangga maca [//meta.wikimedia.org/wiki/Help:Contents User's Guide] kanggo katrangan luwih langkung prakara panggunan prangkat empuk wiki
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Milis rilis MediaWiki]",
);
-/** Georgian (ქართული) */
+/** Georgian (ქართული)
+ * @author David1010
+ */
$messages['ka'] = array(
+ 'config-information' => 'ინფორმაცია',
+ 'config-your-language' => 'თქვენი ენა:',
+ 'config-wiki-language' => 'ვიკის ენა:',
+ 'config-back' => '← უკან',
+ 'config-continue' => 'გაგრძელება →',
+ 'config-page-language' => 'ენა',
+ 'config-page-welcome' => 'კეთილი იყოს თქვენი მობრძანება მედიავიკიში!',
+ 'config-page-dbconnect' => 'მონაცემთა ბაზასთან დაკავშირება',
+ 'config-page-dbsettings' => 'მონაცემთა ბაზის კონფიგურაცია',
+ 'config-page-name' => 'სახელი',
+ 'config-page-options' => 'პარამეტრები',
+ 'config-page-install' => 'ინსტალაცია',
+ 'config-page-complete' => 'დასრულებულია!',
+ 'config-page-restart' => 'ინსტალაციის თავიდან დაწყება',
+ 'config-page-readme' => 'წამიკითხე',
+ 'config-page-copying' => 'ლიცენზია',
+ 'config-page-upgradedoc' => 'განახლება',
+ 'config-restart' => 'დიახ, თავიდან დაიწყეთ',
+ 'config-sidebar' => '* [//www.mediawiki.org მედიავიკის ვებ-გვერდი]
+* [//www.mediawiki.org/wiki/Help:Contents/ka მომხმარებლების დახმარება]
+* [//www.mediawiki.org/wiki/Manual:Contents/ka ადმინისტრატორების დახმარება]
+* [//www.mediawiki.org/wiki/Manual:FAQ/ka FAQ]
+----
+* <doclink href=Readme>წამიკითხე</doclink>
+* <doclink href=ReleaseNotes>ინფორმაცია გამოშვებაზე</doclink>
+* <doclink href=Copying>ლიცენზია</doclink>
+* <doclink href=UpgradeDoc>განახლება</doclink>',
+ 'config-db-type' => 'მონაცემთა ბაზის ტიპი:',
+ 'config-db-host-oracle' => 'მონაცემთა ბაზის TNS:',
+ 'config-db-name' => 'მონაცემთა ბაზის სახელი:',
+ 'config-db-name-oracle' => 'მონაცემთა ბაზის სქემა:',
+ 'config-db-username' => 'მონაცემთა ბაზის მომხმარებლის სახელი:',
+ 'config-db-password' => 'მონაცემთა ბაზის პაროლი:',
+ 'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 ორობითი',
+ 'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
+ 'config-db-port' => 'მონაცემთა ბაზის პორტი:',
+ 'config-db-schema' => 'მედიავიკის სქემა:',
+ 'config-header-mysql' => 'MySQL-ის პარამეტრები',
+ 'config-header-postgres' => 'PostgreSQL-ის პარამეტრები',
+ 'config-header-sqlite' => 'SQLite-ის პარამეტრები',
+ 'config-header-oracle' => 'Oracle-ის პარამეტრები',
+ 'config-header-ibm_db2' => 'IBM DB2-ის პარამეტრები',
+ 'config-invalid-db-type' => 'არასწორი მონაცემთა ბაზის ტიპი',
+ 'config-mysql-innodb' => 'InnoDB',
+ 'config-mysql-myisam' => 'MyISAM',
+ 'config-mysql-binary' => 'ორობითი',
+ 'config-mysql-utf8' => 'UTF-8',
+ 'config-site-name' => 'ვიკის სახელი:',
+ 'config-site-name-blank' => 'შეიყვანეთ ვებ-გვერდის სახელი.',
+ 'config-project-namespace' => 'პროექტის სახელთა სივრცე:',
+ 'config-ns-generic' => 'პროექტი',
+ 'config-ns-other' => 'სხვა (მიუთითეთ)',
+ 'config-ns-other-default' => 'ჩემი ვიკი',
+ 'config-admin-box' => 'ადმინისტრატორის ანგარიში',
+ 'config-admin-name' => 'თქვენი სახელი:',
+ 'config-admin-password' => 'პაროლი:',
+ 'config-admin-password-confirm' => 'პაროლი ხელმეორედ:',
+ 'config-admin-name-blank' => 'შეიყვანეთ ადმინისტრატორის მომხმარებლის სახელი.',
+ 'config-admin-email' => 'ელ. ფოსტის მისამართი:',
+ 'config-profile-wiki' => 'ტრადიციული ვიკი',
+ 'config-profile-private' => 'დახურული ვიკი',
+ 'config-license' => 'საავტორო უფლები და ლიცენზია:',
+ 'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
+ 'config-license-cc-by' => 'Creative Commons Attribution',
+ 'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
+ 'config-license-cc-0' => 'Creative Commons Zero (საზოგადოებრივი საკუთრება)',
+ 'config-license-gfdl' => 'GNU Free Documentation License 1.3 ან უფრო გვიანი',
+ 'config-license-pd' => 'საზოგადოებრივი საკუთრება',
+ 'config-license-cc-choose' => 'აირჩიეთ Creative Commons-ის ლიცენზიიდან ერთ-ერთი',
+ 'config-email-settings' => 'ელ. ფოსტის პარამეტრები',
+ 'config-upload-settings' => 'სურათებისა და ფაილების ატვირთვა',
+ 'config-upload-enable' => 'ფაილების ატვირთვის ჩართვა',
+ 'config-logo' => 'ლოგოს URL:',
+ 'config-cc-again' => 'აირჩიეთ კიდევ ერთხელ...',
+ 'config-extensions' => 'გაფართოებები',
+ 'config-install-step-done' => 'შესრულდა',
+ 'config-install-step-failed' => 'ვერ მოხერხდა',
+ 'config-install-tables' => 'ცხრილების შექმნა',
+ 'config-download-localsettings' => 'LocalSettings.php-ის გადმოწერა',
+ 'config-help' => 'დახმარება',
'mainpagetext' => "'''მედიავიკი წარმატებით ჩაიტვირთა.'''",
'mainpagedocfooter' => 'ვიკი პროგრამის გამოყენების ინფორმაციისთვის იხილეთ [//meta.wikimedia.org/wiki/Help:Contents მომხმარებლის მეგზური].
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce მედიავიკის გამოცემის დაგზავნის სია]',
);
-/** Kara-Kalpak (Qaraqalpaqsha) */
+/** Kara-Kalpak (Qaraqalpaqsha)
+ */
$messages['kaa'] = array(
'mainpagetext' => "'''MediaWiki tabıslı ornatıldı.'''",
'mainpagedocfooter' => "Wiki bag'darlamasın qollanıw haqqındag'i mag'lıwmat usın [//meta.wikimedia.org/wiki/Help:Contents Paydalanıwshılar qollanbasınan] ken'es alın'.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki ra lista serbest-daena postey]",
);
-/** Kazakh (Arabic script) (قازاقشا (تٴوتە)) */
+/** Kazakh (Arabic script) (قازاقشا (تٴوتە))
+ */
$messages['kk-arab'] = array(
'mainpagetext' => "'''مەدىياۋىيكىي بۋماسى ٴساتتى ورناتىلدى.'''",
'mainpagedocfooter' => 'ۋىيكىي باعدارلامالىق جاساقتاماسىن قالاي قولداناتىن اقپاراتى ٴۇشىن [//meta.wikimedia.org/wiki/Help:Contents پايدالانۋشىلىق نۇسقاۋلارىنان] كەڭەس الىڭىز.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce مەدىياۋىيكىي شىعۋ تۋرالى حات تاراتۋ ٴتىزىمى]',
);
-/** Kazakh (Cyrillic script) (Қазақша (кирил)) */
+/** Kazakh (Cyrillic script) (қазақша (кирил))
+ */
$messages['kk-cyrl'] = array(
'mainpagetext' => "'''МедиаУики бумасы сәтті орнатылды.'''",
'mainpagedocfooter' => 'Уики бағдарламалық жасақтамасын қалай қолданатын ақпараты үшін [//meta.wikimedia.org/wiki/Help:Contents Пайдаланушылық нұсқауларынан] кеңес алыңыз.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаУики шығу туралы хат тарату тізімі]',
);
-/** Kazakh (Latin script) (Qazaqşa (latın)) */
+/** Kazakh (Latin script) (qazaqşa (latın))
+ */
$messages['kk-latn'] = array(
'mainpagetext' => "'''MedïaWïkï bwması sätti ornatıldı.'''",
'mainpagedocfooter' => 'Wïkï bağdarlamalıq jasaqtamasın qalaý qoldanatın aqparatı üşin [//meta.wikimedia.org/wiki/Help:Contents Paýdalanwşılıq nusqawlarınan] keñes alıñız.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce បញ្ជីពិភាក្សាការផ្សព្វផ្សាយរបស់មេឌាវិគី]',
);
-/** Kannada (ಕನ್ನಡ) */
+/** Kannada (ಕನ್ನಡ)
+ */
$messages['kn'] = array(
'mainpagetext' => "'''ವಿಕಿ ತಂತ್ರಾಂಶವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅನುಸ್ಥಾಪಿಸಲಾಯಿತು.'''",
'mainpagedocfooter' => 'ವಿಕಿ ತಂತ್ರಾಂಶವನ್ನು ಬಳಸುವ ಬಗ್ಗೆ ಮಾಹಿತಿಗೆ [//meta.wikimedia.org/wiki/Help:Contents ಬಳಕೆದಾರರಿಗೆ ನಿರ್ದೇಶನ ಪುಟ] ನೋಡಿ.
'config-title' => 'MediaWiki $1 설치',
'config-information' => '정보',
'config-localsettings-upgrade' => '<code>LocalSettings.php</code> 파일이 감지되었습니다.
-ì\9d´ ì\84¤ì¹\98를 ì\97\85ê·¸ë \88ì\9d´ë\93\9cí\95\98ë ¤ë©´ ì\95\84ë\9e\98 ì\83\81ì\9e\90ì\97\90 <code>$wgUpgradeKey</code>ì\9d\98 ê°\92ì\9d\84 ì\9e\85ë ¥í\95´ì£¼세요.
+ì\9d´ ì\84¤ì¹\98를 ì\97\85ê·¸ë \88ì\9d´ë\93\9cí\95\98ë ¤ë©´ ì\95\84ë\9e\98 ì\83\81ì\9e\90ì\97\90 <code>$wgUpgradeKey</code>ì\9d\98 ê°\92ì\9d\84 ì\9e\85ë ¥í\95\98세요.
LocalSettings.php에 찾으세요.',
'config-localsettings-cli-upgrade' => 'LocalSettings.php 파일이 감지되었습니다.
이 설치를 업그레이드하려면 update.php를 대신 실행하세요',
$1',
'config-localsettings-incomplete' => '기존 LocalSettings.php가 완전하지 않은 것 같습니다.
$1 변수가 설정되어 있지 않습니다.
-ì\9d´ ë³\80ì\88\98ê°\80 ì\84¤ì \95ë\90\98ë\8f\84ë¡\9d LocalSettings.php를 ë³\80ê²½í\95\98고 "계속"을 클릭하세요.',
+ì\9d´ ë³\80ì\88\98ê°\80 ì\84¤ì \95ë\90\98ë\8f\84ë¡\9d LocalSettings.php를 ë°\94꾸고 "계속"을 클릭하세요.',
'config-localsettings-connection-error' => 'LocalSettings.php 또는 AdminSettings.php에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 수정하고 다시 시도하세요.
$1',
'config-back' => '← 뒤로',
'config-continue' => '계속 →',
'config-page-language' => '언어',
- 'config-page-welcome' => '미ë\94\94ì\96´ì\9c\84í\82¤ì\97\90 ì\98¨ 것을 환영합니다!',
+ 'config-page-welcome' => '미ë\94\94ì\96´ì\9c\84í\82¤ì\97\90 ì\98¤ì\8b 것을 환영합니다!',
'config-page-dbconnect' => '데이터베이스에 연결',
'config-page-upgrade' => '기존 설치 업그레이드',
'config-page-dbsettings' => '데이터베이스 설정',
'config-page-name' => '이름',
- 'config-page-options' => 'ì\98µì\85\98',
+ 'config-page-options' => 'ì\84¤ì \95',
'config-page-install' => '설치',
'config-page-complete' => '완료!',
'config-page-restart' => '설치 다시 시작',
'config-page-upgradedoc' => '업그레이드하기',
'config-page-existingwiki' => '기존 위키',
'config-help-restart' => '당신이 입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?',
- 'config-restart' => '예, 다시 시작합니다.',
+ 'config-restart' => '예, 다시 시작합니다',
'config-welcome' => '=== 사용 환경 검사 ===
-ì\9d´ í\99\98ê²½ì\9d´ 미ë\94\94ì\96´ì\9c\84í\82¤ ì\84¤ì¹\98ì\97\90 ì \81í\95©í\95 지 기본 검사를 실행합니다.
+ì\9d´ í\99\98ê²½ì\9d´ 미ë\94\94ì\96´ì\9c\84í\82¤ ì\84¤ì¹\98ì\97\90 ì \81í\95©í\95\9c지 기본 검사를 실행합니다.
설치 중 도움이 필요하다면 이 검사 결과를 함께 제공해주어야 합니다.',
'config-copyright' => "=== 저작권 및 이용 약관 ===
다음 데이터베이스 유형을 지원합니다 : $1.
호스팅을 공유하고 있다면 적절한 데이터베이스 드라이버를 설치하도록 호스팅 제공 업체에 문의하세요.
-PHP를 ì§\81ì \91 ì»´í\8c\8cì\9d¼í\95 ê²½ì\9a° ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ í\81´ë\9d¼ì\9d´ì\96¸í\8a¸ë¥¼ ì\82¬ì\9a©í\95\98ì\97¬ í\99\9cì\84±í\99\94í\95\98ë\8f\84ë¡\9d ë\8b¤ì\8b\9c ì\84¤ì \95í\95\98ì\84¸ì\9a\94. ì\98\88ë\93¤ ë\93¤ì\96´ <code>./configure --with-mysql</code>ì\9d\84 ì\82¬ì\9a©í\95©ë\8b\88ë\8b¤.
+PHP를 ì§\81ì \91 ì»´í\8c\8cì\9d¼í\95 ê²½ì\9a° ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ í\81´ë\9d¼ì\9d´ì\96¸í\8a¸ë¥¼ ì\82¬ì\9a©í\95\98ì\97¬ í\99\9cì\84±í\99\94í\95\98ë\8f\84ë¡\9d ë\8b¤ì\8b\9c ì\84¤ì \95í\95\98ì\84¸ì\9a\94. ì\98\88ë\93¤ ë\93¤ì\96´ <code>./configure --with-mysql</code>ì\9d\84 ì\82¬ì\9a©í\95\98ì\84¸ì\9a\94.
데비안이나 우분트 패키지에서 PHP를 설치했다면 php-mysql 모듈도 설치해야 합니다.',
'config-outdated-sqlite' => "'''경고''': SQLite 필요한 최소 $2 버전보다 낮은 $1(이)가 있습니다. SQLite는 사용할 수 없습니다.",
'config-no-fts3' => "'''경고''': SQLite는 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일되어, 검색 기능은 백엔드에 사용할 수 없습니다.",
PHP 파일이 있는 곳을 우리가 이를 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
-설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원시 데이터베이스에 접근하는 데 실패합니다.
+설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원본 데이터베이스에 접근하는 데 실패합니다.
이는 원시 사용자 데이터(이메일 주소, 암호 해시) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
<code>/var/lib/mediawiki/yourwiki</code>와 같이 모두 다른 곳에서 데이터베이스를 넣어보도록 하세요.',
'config-sqlite-connection-error' => '$1.
호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.',
- 'config-sqlite-readonly' => '파일 <code>$1</code>은 쓰기가 불가능합니다.',
+ 'config-sqlite-readonly' => '<code>$1</code> 파일은 쓰기가 불가능합니다.',
'config-sqlite-cant-create-db' => '<code>$1</code> 데이터베이스 파일을 만들 수 없습니다.',
'config-sqlite-fts3-downgrade' => 'PHP가 FTS3 지원이 없어졌습니다. 테이블을 다운그레이드하세요.',
'config-can-upgrade' => "이 데이터베이스에 미디어위키 테이블이 있습니다.
'config-mysql-myisam' => 'MyISAM',
'config-mysql-myisam-dep' => "'''경고''': 미디어위키와 함께 사용하도록 권장하지 않는 MySQL에 대한 스토리지 엔진으로 MyISAM을 선택하였습니다. 이유는:
* 이는 테이블이 잠겨있어 동시성을 거의 지원하지 않습니다
-* 이는 다른 엔진보다 손상이 더 자주 발생합니다.
-* 미디어위키 바탕 코드가 항상 정상적으로 MyISAM을 처리하지 않습니다.
+* 이는 다른 엔진보다 손상이 더 자주 발생합니다
+* 미디어위키 바탕 코드가 항상 정상적으로 MyISAM을 처리하지 않습니다
MySQL 설치가 InnoDB를 지원한다면 그 선택 대신에 InnoDB를 선택할 것을 매우 권장합니다.
MySQL 설치가 InnoDB를 지원하지 않는다면 아마도 업그레이드를 해야 할 수도 있습니다.",
'config-ns-site-name' => '위키 이름과 같은 이름: $1',
'config-ns-other' => '기타 (지정)',
'config-ns-other-default' => '내위키',
- 'config-project-namespace-help' => '위키백과의 예를 따라서, 많은 위키는 "프로젝트 이름공간"에 그들의 콘텐츠 페이지에서 그들의 정책 페이지는 별도로 보관합니다.
+ 'config-project-namespace-help' => '위키백과의 예를 따라서, 많은 위키는 "\'\'\'프로젝트 이름공간\'\'\'"에 그들의 콘텐츠 페이지에서 그들의 정책 페이지는 별도로 보관합니다.
이 이름공간에 있는 모든 페이지의 제목은 여기서 지정할 수 있는 특정 접두어로 시작합니다.
보통 이 접두어는 위키의 이름에서 파생되지만, 이는 "#" 또는 ":"와 같은 특수 문자를 포함할 수 없습니다.',
'config-ns-invalid' => '특정 "<nowiki>$1</nowiki>" 이름공간이 잘못되었습니다.
'config-admin-password-same' => '비밀번호는 사용자 이름과 같아서는 안 됩니다.',
'config-admin-password-mismatch' => '입력한 비밀번호 두 개가 일치하지 않습니다.',
'config-admin-email' => '이메일 주소:',
- 'config-admin-email-help' => 'ì\9c\84í\82¤ì\9d\98 ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ë¡\9cë¶\80í\84° ì\9d´ë©\94ì\9d¼ì\9d\84 ì \84ë\8b¬ë°\9bê±°ë\82\98 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\9e¬ì\84¤ì \95í\95\98ê³ ì£¼ì\8b\9c문ì\84\9c 목ë¡\9dì\97\90 ë\8c\80í\95\9c ë³\80ê²½ 알림을 받기 위해 여기에 이메일 주소를 입력하세요. 이 필드를 비워 둘 수 있습니다.',
+ 'config-admin-email-help' => 'ì\9c\84í\82¤ì\9d\98 ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ë¡\9cë¶\80í\84° ì\9d´ë©\94ì\9d¼ì\9d\84 ì \84ë\8b¬ë°\9bê±°ë\82\98 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\9e¬ì\84¤ì \95í\95\98ê³ ì£¼ì\8b\9c문ì\84\9c 목ë¡\9dì\97\90 ë\8c\80í\95\9c ë°\94ë\80\9c 알림을 받기 위해 여기에 이메일 주소를 입력하세요. 이 필드를 비워 둘 수 있습니다.',
'config-admin-error-user' => '"<nowiki>$1</nowiki>" 이름의 관리자를 만드는 중 내부 오류가 발생했습니다.',
'config-admin-error-password' => '"<nowiki>$1</nowiki>" 관리자의 비밀번호를 설정하는 중 내부 오류가 발생했습니다: <pre>$2</pre>',
'config-admin-error-bademail' => '이메일 주소를 잘못 입력하였습니다.',
당신이 이를 구독하고 나서 새 버전이 나올 때 미디어위키 설치를 업데이트해야합니다.',
'config-subscribe-noemail' => '이메일 주소를 제공하지 않고 배포 발표 메일링 리스트에 가입하려 합니다.
메일링 리스트에 가입하고자 할 경우 이메일 주소를 제공하세요.',
- 'config-almost-done' => '거의 다 완료했습니다! 이제 남은 설정을 생략하고 지금 바로 위키를 설치할 수 있습니다.',
+ 'config-almost-done' => '거의 다 완료했습니다!
+이제 남은 설정을 생략하고 지금 바로 위키를 설치할 수 있습니다.',
'config-optional-continue' => '더 많은 질문을 물어보세요.',
'config-optional-skip' => '지겨워요, 그냥 위키를 설치할래요.',
'config-profile' => '사용자 권한 프로필:',
'config-profile-wiki' => '평범한 위키',
- 'config-profile-no-anon' => '계정 생성 필요',
+ 'config-profile-no-anon' => '계정 만들기 필요',
'config-profile-fishbowl' => '승인된 편집자만 이용 가능',
'config-profile-private' => '비공개 위키',
'config-profile-help' => "위키는 당신이 가능한 한 많은 사람들이 편집하도록 할 때 최고로 적합합니다.
'config-email-user' => '사용자와 사용자 간 이메일 활성화',
'config-email-user-help' => '환경 설정에서 활성화한 경우 모든 사용자가 이메일을 서로 보내도록 활성화합니다.',
'config-email-usertalk' => '사용자 토론 문서 알림 활성화',
- 'config-email-usertalk-help' => 'í\99\98ê²½ ì\84¤ì \95ì\97\90ì\84\9c í\99\9cì\84±í\99\94í\95\9c ê²½ì\9a° ì\82¬ì\9a©ì\9e\90ë\8a\94 ì\82¬ì\9a©ì\9e\90 í\86 ë¡ ë¬¸ì\84\9cì\9d\98 ë³\80ê²½ 알림을 받도록 활성화합니다.',
+ 'config-email-usertalk-help' => 'í\99\98ê²½ ì\84¤ì \95ì\97\90ì\84\9c í\99\9cì\84±í\99\94í\95\9c ê²½ì\9a° ì\82¬ì\9a©ì\9e\90ë\8a\94 ì\82¬ì\9a©ì\9e\90 í\86 ë¡ ë¬¸ì\84\9cì\9d\98 ë°\94ë\80\9c 알림을 받도록 활성화합니다.',
'config-email-watchlist' => '주시문서 목록 알림 활성화',
'config-email-watchlist-help' => '환경 설정에서 활성화한 경우 사용자가 주시한 문서에 대한 알림을 받도록 활성화합니다.',
'config-email-auth' => '이메일 인증 활성화',
- 'config-email-auth-help' => "ì\9d´ ì\84¤ì \95ì\9d´ í\99\9cì\84±í\99\94ë\90\98ì\96´ ì\9e\88ì\9c¼ë©´ ì\82¬ì\9a©ì\9e\90ë\8a\94 ì\9d´ë©\94ì\9d¼ 주ì\86\8c를 ì\84¤ì \95í\95\98ê±°ë\82\98 ë³\80ê²½í\95 때마다 그들에게 보낸 링크를 사용하여 이메일 주소를 확인해야 합니다.
-ì\9d¸ì¦\9dë\90\9c ì\9d´ë©\94ì\9d¼ 주ì\86\8cë§\8c ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ë¡\9cë¶\80í\84°ì\9d\98 ì\9d´ë©\94ì\9d¼ì\9d´ë\82\98 ë³\80ê²½ 알림 이메일을 받을 수 있습니다.
+ 'config-email-auth-help' => "ì\9d´ ì\84¤ì \95ì\9d´ í\99\9cì\84±í\99\94ë\90\98ì\96´ ì\9e\88ì\9c¼ë©´ ì\82¬ì\9a©ì\9e\90ë\8a\94 ì\9d´ë©\94ì\9d¼ 주ì\86\8c를 ì\84¤ì \95í\95\98ê±°ë\82\98 ë°\94ê¿\80 때마다 그들에게 보낸 링크를 사용하여 이메일 주소를 확인해야 합니다.
+ì\9d¸ì¦\9dë\90\9c ì\9d´ë©\94ì\9d¼ 주ì\86\8cë§\8c ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ë¡\9cë¶\80í\84°ì\9d\98 ì\9d´ë©\94ì\9d¼ì\9d´ë\82\98 ë°\94ë\80\9c 알림 이메일을 받을 수 있습니다.
이메일 기능의 남용 가능성이 있기 때문에 이 옵션을 설정하는 것은 공개 위키에서 '''권장'''합니다.",
'config-email-sender' => '반송 이메일 주소',
'config-email-sender-help' => '발신한 이메일에 대한 반송 주소로 사용할 이메일 주소를 입력하세요.
'config-upload-help' => '파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.
자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Manual:Security 보안 문단]을 읽어보세요.
-í\8c\8cì\9d¼ ì\98¬ë¦¬ê¸°ë¥¼ í\99\9cì\84±í\99\94í\95\98ë ¤ë©´ 미ë\94\94ì\96´ì\9c\84í\82¤ì\9d\98 루í\8a¸ ë\94\94ë \89í\86 리ì\97\90 ì\9e\88ë\8a\94 <code>images</code> í\95\98ì\9c\84 ë\94\94ë \89í\86 리ì\97\90ì\84\9c ì\9b¹ ì\84\9cë²\84ê°\80 기ë¡\9dí\95 ì\88\98 ì\9e\88ë\8f\84ë¡\9d 모ë\93\9c를 ë³\80ê²½í\95©니다.
+í\8c\8cì\9d¼ ì\98¬ë¦¬ê¸°ë¥¼ í\99\9cì\84±í\99\94í\95\98ë ¤ë©´ 미ë\94\94ì\96´ì\9c\84í\82¤ì\9d\98 루í\8a¸ ë\94\94ë \89í\86 리ì\97\90 ì\9e\88ë\8a\94 <code>images</code> í\95\98ì\9c\84 ë\94\94ë \89í\86 리ì\97\90ì\84\9c ì\9b¹ ì\84\9cë²\84ê°\80 기ë¡\9dí\95 ì\88\98 ì\9e\88ë\8f\84ë¡\9d 모ë\93\9c를 ë°\94ê¿\89니다.
그 다음 이 옵션을 활성화합니다.',
'config-upload-deleted' => '삭제된 파일에 대한 디렉토리:',
'config-upload-deleted-help' => '삭제된 파일을 보관할 디렉토리를 선택하세요.
'config-extensions' => '확장 기능',
'config-extensions-help' => '위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.
-ì\9d´ë\93¤ì\9d\80 추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.',
+ì\9d´ë\8a\94 추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.',
'config-install-alreadydone' => "'''경고:''' 당신은 이미 미디어위키를 설치하였고 다시 설치하려고 합니다.
다음 페이지에서 진행하세요.",
'config-install-begin' => '"{{int:config-continue}}"을 누르면 미디어위키의 설치를 시작합니다.
-ê·¸ë\9e\98ë\8f\84 ë³\80ê²½í\95\98는 것을 원한다면 뒤로를 누릅니다.',
+ê·¸ë\9e\98ë\8f\84 ë°\94꾸는 것을 원한다면 뒤로를 누릅니다.',
'config-install-step-done' => '완료',
'config-install-step-failed' => '실패',
'config-install-extensions' => '확장 기능을 포함하는 중',
이를 만드는 것을 원하면 아래의 "계정 만들기" 확인 상자를 클릭하세요.',
'config-install-tables' => '테이블을 만드는 중',
'config-install-tables-exist' => "'''경고''': 미디어위키 테이블이 이미 있는 것 같습니다.
-테이블 생성을 생략합니다.",
- 'config-install-tables-failed' => "'''오류''': 다음 오류와 함께 테이블 생성에 실패했습니다: $1",
+테이블 만들기를 생략합니다.",
+ 'config-install-tables-failed' => "'''오류''': 다음 오류와 함께 테이블 만들기에 실패했습니다: $1",
'config-install-interwiki' => '기본 인터위키 테이블을 채우는 중',
'config-install-interwiki-list' => '<code>interwiki.list</code> 파일을 불러올 수 없습니다.',
'config-install-interwiki-exists' => "'''경고''': 인터위키 테이블이 이미 항목을 갖고 있는 것 같습니다.
기본 목록으로 넘어갑니다.",
'config-install-stats' => '통계를 초기화하는 중',
'config-install-keys' => '보안 키를 만드는 중',
- 'config-insecure-keys' => "'''ê²½ê³ :''' ì\84¤ì¹\98 ì¤\91ì\97\90 ì\83\9dì\84±í\95\9c {{PLURAL:$2|ë³´ì\95\88 í\82¤}} ($1)를 ì\84¤ì¹\98í\95\98ë\8a\94 ë\8f\99ì\95\88 ì\99\84ì \84í\9e\88 ì\95\88ì \84í\95\98ì§\80 {{PLURAL:$2|ì\95\8aì\8aµë\8b\88ë\8b¤}}. ì§\81ì \91 ë³\80ê²½ì\9d\84 고려하세요.",
+ 'config-insecure-keys' => "'''ê²½ê³ :''' ì\84¤ì¹\98 ì¤\91ì\97\90 ì\83\9dì\84±í\95\9c {{PLURAL:$2|ë³´ì\95\88 í\82¤}} ($1)를 ì\84¤ì¹\98í\95\98ë\8a\94 ë\8f\99ì\95\88 ì\99\84ì \84í\9e\88 ì\95\88ì \84í\95\98ì§\80 {{PLURAL:$2|ì\95\8aì\8aµë\8b\88ë\8b¤}}. ì§\81ì \91 ë°\94꾸기를 고려하세요.",
'config-install-sysop' => '관리자 사용자 계정을 만드는 중',
'config-install-subscribe-fail' => '미디어위키 발표를 구독할 수 없습니다: $1',
'config-install-subscribe-notpossible' => 'cURL이 설치되지 않았고 allow_url_fopen를 사용할 수 없습니다.',
완료되었으면 '''[$2 위키에 들어갈 수 있습니다]'''.",
'config-download-localsettings' => 'LocalSettings.php 다운로드',
'config-help' => '도움말',
- 'config-nofile' => '파일 "$1"(을)를 찾을 수 없습니다. 이미 삭제되었나요?',
+ 'config-nofile' => '"$1" 파일을 찾을 수 없습니다. 이미 삭제되었나요?',
'mainpagetext' => "'''미디어위키가 성공적으로 설치되었습니다.'''",
'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 프로그램에 대한 정보를 얻을 수 있습니다.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 발표 메일링 리스트]',
);
-/** Karachay-Balkar (Ð\9aÑ\8aаÑ\80аÑ\87ай-Ð\9cалкъар)
+/** Karachay-Balkar (кÑ\8aаÑ\80аÑ\87ай-малкъар)
* @author Iltever
*/
$messages['krc'] = array(
Don dat Projramm för et Opsäze norr_ens aanschmiiße.',
'config-no-session' => 'De Daate för Ding Setzung sinn verschött jejange.
Donn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang="en">session.save_path</code> op e zopaß Verzeijschneß zeisch.',
- 'config-your-language' => 'Ding Shprooch:',
+ 'config-your-language' => 'Ding Schprooch:',
'config-your-language-help' => 'Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.',
'config-wiki-language' => 'Dem Wiki sing Shprooch:',
'config-wiki-language-help' => 'Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.',
'config-back' => '← Retuur',
'config-continue' => 'Wigger →',
- 'config-page-language' => 'Shprooch',
+ 'config-page-language' => 'Schprooch',
'config-page-welcome' => 'Wellkumme beim MediaWiki!',
'config-page-dbconnect' => 'Met dä Daatebangk Verbenge',
'config-page-upgrade' => 'En Inshtallzjuhn op der neuste Shtand bränge',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]',
);
-/** Kurdish (Latin script) (Kurdî (latînî))
+/** Kurdish (Latin script) (Kurdî (latînî))
* @author George Animal
*/
$messages['ku-latn'] = array(
'config-page-options' => 'Vebijêrk',
'config-ns-generic' => 'Proje',
'config-install-step-done' => 'çêbû',
+ 'config-help' => 'alîkarî',
'mainpagetext' => "'''MediaWiki serketî hate çêkirin.'''",
'mainpagedocfooter' => 'Alîkarî ji bo bikaranîn û guherandin yê datayê Wîkî tu di bin [//meta.wikimedia.org/wiki/Help:Contents pirtûka alîkarîyê ji bikarhêneran] da dikarê bibînê.
Dir fannt en am LocalSettings.php.",
'config-localsettings-key' => 'Aktualisatiounsschlëssel:',
'config-localsettings-badkey' => 'De Schlëssel deen Dir aginn hutt ass net korrekt',
+ 'config-localsettings-incomplete' => 'De Fichier LocalSettings.php schéngt net komplett ze sinn.
+D\'Variabel $1 ass net definéiert.
+Ännert w.e.g. de Fichier LocalSettings.php esou datt déi Variabel definéiert ass a klickt op "Virufueren".',
'config-session-error' => 'Feeler beim Starte vun der Sessioun: $1',
'config-no-session' => "D'Donnéeë vun ärer Sessioun si verluergaangen!
Kuckt Är php.ini no a vergewëssert Iech datt <code>session.save_path</code> op adequate REpertoire agestallt ass.",
'config-header-ibm_db2' => 'IBM DB2-Astellungen',
'config-invalid-db-type' => 'Net valabelen Datebank-Typ',
'config-missing-db-name' => 'Dir musst en Numm fir de Wäert "Numm vun der Datebank" uginn',
+ 'config-missing-db-host' => 'Dir musst e Wäert fir "Database host" uginn',
'config-missing-db-server-oracle' => 'Dir musst e Wäert fir "Datebank-TNS" uginn',
'config-db-sys-user-exists-oracle' => 'De Benotzerkont "$1" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.',
'config-postgres-old' => 'PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.',
'config-install-stats' => 'Initialisatioun vun de Statistiken',
'config-install-keys' => 'Generéiere vum Geheimschlëssel',
'config-install-sysop' => 'Administrateur Benotzerkont gëtt ugeluecht',
+ 'config-install-extension-tables' => "D'Tabelle fir déi aktivéiert Erweiderunge ginn ugeluecht",
'config-install-mainpage-failed' => "D'Haaptsäit konnt net dragesat ginn: $1",
'config-download-localsettings' => 'LocalSettings.php eroflueden',
'config-help' => 'Hëllef',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglëscht vun neie MediaWiki-Versiounen]",
);
-/** Lingua Franca Nova (Lingua Franca Nova) */
+/** Lingua Franca Nova (Lingua Franca Nova)
+ */
$messages['lfn'] = array(
'mainpagetext' => "'''MediaWiki es aora instalada.'''",
'mainpagedocfooter' => 'Atenda la [//meta.wikimedia.org/wiki/Help:Contents Gida per Usores] per informa supra la usa de la programa de vici.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Wewandise ofunenga amawulire aga email ag'ebifa ku MediaWiki]",
);
-/** Limburgish (Limburgs) */
+/** Limburgish (Limburgs)
+ */
$messages['li'] = array(
'mainpagetext' => "'''MediaWiki software succesvol geïnsjtalleerd.'''",
'mainpagedocfooter' => "Raodpleeg de [//meta.wikimedia.org/wiki/NL_Help:Inhoudsopgave handjleiding] veur informatie euver 't gebroek van de wikisoftware.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki mailinglies veur nuuj versies]",
);
-/** Lao (ລາວ) */
+/** Lao (ລາວ)
+ */
$messages['lo'] = array(
'mainpagetext' => "'''ຕິດຕັ້ງມີເດຍວິກິນີ້ສຳເລັດແລ້ວ.'''",
);
-/** Lithuanian (lietuvių) */
+/** Lithuanian (lietuvių)
+ */
$messages['lt'] = array(
'mainpagetext' => "'''MediaWiki sėkmingai įdiegta.'''",
'mainpagedocfooter' => 'Informacijos apie wiki programinės įrangos naudojimą, ieškokite [//meta.wikimedia.org/wiki/Help:Contents žinyne].
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Parakstīties uz paziņojumiem par jaunām MediaWiki versijām]',
);
-/** Literary Chinese (文言) */
+/** Literary Chinese (文言)
+ */
$messages['lzh'] = array(
'mainpagetext' => "'''共筆臺已立'''",
'mainpagedocfooter' => "欲識維基,見[//meta.wikimedia.org/wiki/Help:Contents User's Guide]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Moksha (Мокшень) */
+/** Moksha (мокшень)
+ */
$messages['mdf'] = array(
'mainpagetext' => "'''МедиаВикить арафтозь лац.'''",
'mainpagedocfooter' => 'Ванк [//meta.wikimedia.org/wiki/Help:Contents Ветямовал Тиинди] тяса ули кода содамс Вики програпнень эрявикснень колга.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Resaka momba ny fizaràn'ny MediaWiki]",
);
-/** Eastern Mari (Олык Марий) */
+/** Eastern Mari (олык марий)
+ */
$messages['mhr'] = array(
'mainpagetext' => "'''MediaWiki сай шындыме.'''",
);
'config-information' => 'വിവരങ്ങൾ',
'config-localsettings-upgrade' => "'''അറിയിപ്പ്''': ഒരു <code>LocalSettings.php</code> ഫയൽ കാണുന്നു.
സോഫ്റ്റ്വേർ അപ്ഗ്രേഡ് ചെയ്യുക സാദ്ധ്യമാണ്.
-ദയവായി പെട്ടിയിൽ <code>\$wgUpgradeKey</code> എന്നതിന്റെ വില നൽകുക.",
+ദയവായി പെട്ടിയിൽ <code>\$wgUpgradeKey</code> എന്നതിന്റെ വില നൽകുക.", # Fuzzy
'config-localsettings-key' => 'അപ്ഗ്രേഡ് ചാവി:',
'config-localsettings-badkey' => 'താങ്കൾ നൽകിയ ചാവി തെറ്റാണ്',
'config-session-error' => 'സെഷൻ തുടങ്ങുന്നതിൽ പിഴവ്: $1',
'config-sidebar' => '* [//www.mediawiki.org മീഡിയവിക്കി പ്രധാനതാൾ]
* [//www.mediawiki.org/wiki/Help:Contents ഉപയോക്തൃസഹായി]
* [//www.mediawiki.org/wiki/Manual:Contents കാര്യനിർവഹണസഹായി]
-* [//www.mediawiki.org/wiki/Manual:FAQ പതിവുചോദ്യങ്ങൾ]',
+* [//www.mediawiki.org/wiki/Manual:FAQ പതിവുചോദ്യങ്ങൾ]', # Fuzzy
'config-env-php' => 'പി.എച്ച്.പി. $1 ഇൻസ്റ്റോൾ ചെയ്തിട്ടുണ്ട്.',
- 'config-no-db' => 'അനുയോജ്യമായ ഡേറ്റാബേസ് ഡ്രൈവർ കണ്ടെത്താനായില്ല!',
+ 'config-no-db' => 'അനുയോജ്യമായ ഡേറ്റാബേസ് ഡ്രൈവർ കണ്ടെത്താനായില്ല!', # Fuzzy
'config-memory-raised' => 'പി.എച്ച്.പി.യുടെ <code>memory_limit</code> $1 ആണ്, $2 ആയി ഉയർത്തിയിരിക്കുന്നു.',
'config-memory-bad' => "'''മുന്നറിയിപ്പ്:''' പി.എച്ച്.പി.യുടെ <code>memory_limit</code> $1 ആണ്.
ഇത് മിക്കവാറും വളരെ കുറവാണ്.
'config-logo-help' => 'മീഡിയവിക്കിയിൽ സ്വതേയുള്ള ദൃശ്യരൂപത്തിൽ 135x160 പിക്സലുള്ള ലോഗോ മുകളിൽ ഇടത് മൂലയിൽ കാണാം.
അനുയോജ്യമായ വലിപ്പമുള്ള ഒരു ചിത്രം അപ്ലോഡ് ചെയ്തിട്ട്, അതിന്റെ യൂ.ആർ.എൽ. ഇവിടെ നൽകുക.
-താങ്കൾക്ക് ലോഗോ ആവശ്യമില്ലെങ്കിൽ, ഈ പെട്ടി ശൂന്യമായിടുക.',
+താങ്കൾക്ക് ലോഗോ ആവശ്യമില്ലെങ്കിൽ, ഈ പെട്ടി ശൂന്യമായിടുക.', # Fuzzy
'config-cc-again' => 'ഒന്നുകൂടി എടുക്കൂ...',
'config-advanced-settings' => 'വിപുലീകൃത ക്രമീകരണങ്ങൾ',
'config-extensions' => 'അനുബന്ധങ്ങൾ',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce МедиаВикигийн мэдээний мэйл явуулах жагсаалт]',
);
-/** Marathi (मराठी) */
+/** Marathi (मराठी)
+ */
$messages['mr'] = array(
'mainpagetext' => "'''मीडियाविकीचे इन्स्टॉलेशन पूर्ण.'''",
'mainpagedocfooter' => 'विकी सॉफ्टवेअर वापरण्याकरिता [//meta.wikimedia.org/wiki/Help:Contents यूजर गाईड] पहा.
'mainpagetext' => "'''မီဒီယာဝီကီကို အောင်မြင်စွာ သွင်းပြီးပါပြီ။'''",
);
-/** Erzya (Эрзянь)
+/** Erzya (эрзянь)
* @author Botuzhaleny-sodamo
*/
$messages['myv'] = array(
'config-help' => 'راهنما',
);
-/** Nahuatl (Nāhuatl) */
+/** Nahuatl (Nāhuatl)
+ */
$messages['nah'] = array(
'mainpagetext' => "'''MediaHuiqui cualli ōmotlahtlāli.'''",
);
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki的公布列單]',
);
-/** Norwegian Bokmål (norsk (bokmål))
+/** Norwegian Bokmål (norsk (bokmål))
* @author Event
* @author Nghtwlkr
*/
'config-page-dbsettings' => 'Databaseinnstillinger',
'config-page-name' => 'Navn',
'config-page-options' => 'Valg',
- 'config-page-install' => 'Innstaller',
+ 'config-page-install' => 'Installer',
'config-page-complete' => 'Ferdig!',
'config-page-restart' => 'Start installasjonen på nytt',
'config-page-readme' => 'Les meg',
'config-license-cc-by-sa' => 'Creative Commons Navngivelse Del på samme vilkår',
'config-license-cc-by' => 'Creative Commons Attribution',
'config-license-cc-by-nc-sa' => 'Creative Commons Navngivelse Ikke-kommersiell Del på samme vilkår',
- 'config-license-cc-0' => 'Creative Commons Zero',
+ 'config-license-cc-0' => 'Creative Commons Zero', # Fuzzy
'config-license-pd' => 'Offentlig rom',
'config-license-cc-choose' => 'Velg en egendefinert Creative Commons-lisens',
'config-email-settings' => 'E-postinnstillinger',
'config-logo-help' => 'MediaWikis standarddrakt inkluderer plass til en 135x160 pikslers logo i øvre venstre hjørne.
Last opp et bilde i passende størrelse og skriv inn nettadressen her.
-Hvis du ikke ønsker en logo, la denne boksen være tom.',
+Hvis du ikke ønsker en logo, la denne boksen være tom.', # Fuzzy
'config-instantcommons' => 'Aktiver Instant Commons',
'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons Instant Commons] er en funksjon som gjør det mulig for wikier å bruke bilder, lyder og andre media funnet på nettstedet [//commons.wikimedia.org/ Wikimedia Commons].
For å gjøre dette krever MediaWiki tilgang til internett.
*[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki e-postliste]',
);
-/** Low German (Plattdüütsch) */
+/** Low German (Plattdüütsch)
+ */
$messages['nds'] = array(
'mainpagetext' => "'''De MediaWiki-Software is mit Spood installeert worrn.'''",
'mainpagedocfooter' => 'Kiek de [//meta.wikimedia.org/wiki/MediaWiki_localisation Dokumentatschoon för dat Anpassen vun de Brukerböversiet]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]',
);
-/** Norwegian Nynorsk (norsk (nynorsk))
+/** Norwegian Nynorsk (norsk (nynorsk))
* @author Harald Khan
* @author Nghtwlkr
*/
'config-header-oracle' => 'Oracle-innstillingar',
'config-invalid-db-type' => 'Ugyldig databasetype',
'config-invalid-db-name' => 'Ugyldig databasenamn «$1».
-Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).',
+Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).', # Fuzzy
'config-invalid-db-prefix' => 'Ugyldig databaseprefiks «$1».
-Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).',
+Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).', # Fuzzy
'config-invalid-schema' => 'Ugyldig skjema for MediaWiki «$1».
Berre bruk ASCII-bokstavar (a-z, A-Z), tal (0-9) og undestrekar (_).',
'config-postgres-old' => 'PostgreSQL $1 eller seinare krevst, du har $2.',
'mainpagetext' => "'''MediaWiki-programvaren er nå installert.'''",
);
-/** Occitan (occitan) */
+/** Occitan (occitan)
+ */
$messages['oc'] = array(
'mainpagetext' => "'''MediaWiki es estat installat amb succès.'''",
'mainpagedocfooter' => "Consultatz lo [//meta.wikimedia.org/wiki/Ajuda:Contengut Guida de l'utilizaire] per mai d'entresenhas sus l'utilizacion d'aqueste logicial.
'mainpagetext' => "'''Вики-скрипт «MediaWiki» æнтыстджынæй æвæрд æрцыд.'''",
);
-/** Punjabi (ਪੰਜਾਬੀ) */
+/** Punjabi (ਪੰਜਾਬੀ)
+ */
$messages['pa'] = array(
'mainpagetext' => "'''ਮੀਡਿਆਵਿਕਿ ਠੀਕ ਤਰ੍ਹਾਂ ਇੰਸਟਾਲ ਹੋ ਗਿਆ ਹੈ।'''",
);
-/** Pampanga (Kapampangan) */
+/** Pampanga (Kapampangan)
+ */
$messages['pam'] = array(
'mainpagetext' => "'''Melaus ing pamipalyari ning MediaWiki.'''",
'mainpagedocfooter' => "Basan me ing [//meta.wikimedia.org/wiki/Help:Contents User's Guide] para king impormasiun keng pamangamit ning wiki software.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Picard (Picard) */
+/** Picard (Picard)
+ */
$messages['pcd'] = array(
'mainpagetext' => "'''MediaWiki o té instalé aveuc victoère.'''",
);
S'a gestiss un sit a àut tràfich, a dovrìa lese cheicòs an sla [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalisassion Unicode].",
'config-unicode-update-warning' => "'''Avis:''' La version instalà dlë spassiador ëd normalisassion Unicode a deuvra na version veja ëd la librarìa dël [http://site.icu-project.org/ proget ICU].
A dovrìa fé n'[//www.mediawiki.org/wiki/Unicode_normalization_considerations agiornament] s'a l'é anteressà a dovré Unicode.",
- 'config-no-db' => 'Impossìbil tové un pilòta ëd base ëd dàit bon!',
+ 'config-no-db' => 'Impossìbil tové un pilòta ëd base ëd dàit bon!', # Fuzzy
'config-no-fts3' => "'''Avis''': SQLite a l'é compilà sensa ël mòdul [//sqlite.org/fts3.html FTS3], le funsion d'arserca a saran pa disponìbij su cost motor.",
'config-register-globals' => "'''Avis: L'opsion <code>[http://php.net/register_globals register_globals]</code> ëd PHP a l'é abilità.'''
'''Ch'a la disabìlita s'a peul.'''
S'a deuvra n'ospitalità partagià, sò fornidor d'ospitalità a dovrìa deje ël nòm dl'ospitant giust ant soa documentassion.
-Se a anstala su un servent Windows e a deuvra MySQL, dovré \"localhost\" a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva \"127.0.0.1\" com adrëssa IP local.",
+Se a anstala su un servent Windows e a deuvra MySQL, dovré \"localhost\" a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva \"127.0.0.1\" com adrëssa IP local.", # Fuzzy
'config-db-host-oracle' => 'TNS dla base ëd dàit:',
'config-db-host-oracle-help' => "Anserì un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nòm ëd conession local] bon; n'archivi tnsnames.ora a dev esse visìbil da costa anstalassion..<br />S'a deuvra le librarìe cliente 10g o pi neuve a peul ëdcò dovré ël métod ëd nominassion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
'config-db-wiki-settings' => 'Identìfica sta wiki',
'config-db-name-help' => "Ch'a serna un nòm ch'a identìfica soa wiki.
A dovrìa conten-e gnun ëspassi o tratin.
-S'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré, o a lassrà ch'a lo crea via un panel ëd contròl.",
+S'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré, o a lassrà ch'a lo crea via un panel ëd contròl.", # Fuzzy
'config-db-name-oracle' => 'Schema dla base ëd dàit:',
'config-db-install-account' => "Cont d'utent për l'instalassion.",
'config-db-username' => "Nòm d'utent dla base ëd dàit:",
'config-db-prefix-help' => "S'a l'ha dabzògn ëd partagé na base ëd dàit an tra vàire wiki, o tra MediaWiki e n'àutra aplicassion dl'aragnà, a peul serne ëd gionté un prefiss a tùit ij nòm ëd le tàule për evité ëd conflit.
Ch'a deuvra ni dë spassi ni ëd tratin.
-Cost camp a l'é lassà normalment veuid.",
+Cost camp a l'é lassà normalment veuid.", # Fuzzy
'config-db-charset' => 'Ansema dij caràter dla base ëd dàit',
'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binari',
'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
'config-db-port' => 'Porta dla base ëd dàit:',
'config-db-schema' => 'Schema për MediaWiki',
'config-db-schema-help' => "Jë schema sì-dzora a son normalment giust.
-Ch'a-j cangia mach s'a sa ch'a n'ha da manca.",
+Ch'a-j cangia mach s'a sa ch'a n'ha da manca.", # Fuzzy
'config-sqlite-dir' => 'Dossié dij dat SQLite:',
'config-sqlite-dir-help' => "SQLite a memorisa tùit ij dat ant n'archivi ùnich.
S'a vëd pa listà sì-sota ël sistema ëd base ëd dàit ch'a preuva a dovré, antlora va andaré a j'istrussion dl'anliura sì-dzora për abilité ël manteniment.",
'config-support-mysql' => "* $1 e l'é l'obietiv primari për MediaWiki e a l'é mej mantnù ([http://www.php.net/manual/en/mysql.installation.php com compilé PHP con ël manteniment MySQL])",
- 'config-support-postgres' => "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL])",
+ 'config-support-postgres' => "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([http://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL])", # Fuzzy
'config-support-sqlite' => "* $1 e l'é un sistema ëd base ëd dàit leger che a l'é motobin bin mantnù ([http://www.php.net/manual/en/pdo.installation.php com compilé PHP con ël manteniment ëd SQLite], a deuvra PDO)",
'config-support-oracle' => "* $1 a l'é na base ëd dàit comersial për j'amprèise. ([http://www.php.net/manual/en/oci8.installation.php Com compilé PHP con ël manteniment OCI8])",
'config-header-mysql' => 'Ampostassion MySQL',
'config-invalid-db-server-oracle' => 'TNS ëd la base ëd dat pa bon "$1".
Dovré mach dle litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e pontin (.).',
'config-invalid-db-name' => 'Nòm ëd la base ëd dàit pa bon "$1".
-Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).',
+Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).', # Fuzzy
'config-invalid-db-prefix' => 'Prefiss dla base ëd dàit pa bon "$1".
-Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).',
+Dovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).', # Fuzzy
'config-connection-error' => "$1.
Controla l'ospitant, lë stranòm d'utent e la ciav sì-sota e prové torna.",
'config-admin-password-same' => "La ciav a dev nen esse l'istessa ëd lë stranòm d'utent.",
'config-admin-password-mismatch' => "Le doe ciav che a l'ha scrivù a son diferente antra 'd lor.",
'config-admin-email' => 'Adrëssa ëd pòsta eletrònica:',
- 'config-admin-email-help' => "Ch'a anserissa ambelessì n'adrëssa ëd pòsta eletrònica për përmëtt-je d'arsèive ëd mëssagi da d'àutri utent an sla wiki, riamposté soa ciav, e esse anformà ëd camgiament a le pàgine ch'a ten sot-euj.",
+ 'config-admin-email-help' => "Ch'a anserissa ambelessì n'adrëssa ëd pòsta eletrònica për përmëtt-je d'arsèive ëd mëssagi da d'àutri utent an sla wiki, riamposté soa ciav, e esse anformà ëd camgiament a le pàgine ch'a ten sot-euj.", # Fuzzy
'config-admin-error-user' => 'Eror antern an creand n\'aministrator con lë stranòm "<nowiki>$1</nowiki>".',
'config-admin-error-password' => 'Eror antern an ampostand na ciav për l\'admin "<nowiki>$1</nowiki>": <pre>$2</pre>',
'config-subscribe' => "Ch'a sot-scriva la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce lista ëd discussion ëd j'anonsi ëd publicassion].",
S'a veul podèj dovré dij test da Wikipedia, e a veul che Wikipedia a aceta dij test copià da soa wiki, a dovrìa serne '''Creative Commons Attribution Share Alike'''.
La GNU Free Documentation License a l'era la veja licensa dont sota a-i era Wikipedia.
-A l'é anco' na licensa bon-a, an tùit ij cas, sta licensa a l'ha chèich funsion ch'a rendo difìcij l'utilisassion e l'antërpretassion.",
+A l'é anco' na licensa bon-a, an tùit ij cas, sta licensa a l'ha chèich funsion ch'a rendo difìcij l'utilisassion e l'antërpretassion.", # Fuzzy
'config-email-settings' => 'Ampostassion ëd pòsta eletrònica',
'config-enable-email' => 'Abilité ij mëssagi ëd pòsta eletrònica an surtìa',
'config-enable-email-help' => "S'a veul che la pòsta eletrònica a marcia, j'[http://www.php.net/manual/en/mail.configuration.php ampostassion ëd pòsta eletrònica PHP] a devo esse configurà për da bin.
'config-logo-help' => "La pel dë stàndard ëd MediaWiki a comprend lë spassi për na marca ëd 135x160 pontin ant ël canton an àut a snista.
Ch'a dëscaria na figura ëd la dimension aproprià, e ch'a anserissa l'anliura ambelessì.
-S'a veul gnun-e marche, ch'a lassa ës camp bianch.",
+S'a veul gnun-e marche, ch'a lassa ës camp bianch.", # Fuzzy
'config-instantcommons' => 'Abìlita Instant Commons',
'config-instantcommons-help' => "[//www.mediawiki.org/wiki/InstantCommons Instant Commons] a l'é na funsion ch'a përmët a le wiki ëd dovré dle figure, dij son e d'àutri mojen trovà an sël sit [//commons.wikimedia.org/ Wikimedia Commons].
Për dovré sossì, MediaWiki a l'ha da manca dl'acess a la ragnà.
'config-cache-memcached' => "Dovré Memcached (a ciama n'ampostassion e na configurassion adissionaj)",
'config-memcached-servers' => 'Servent Memcached:',
'config-memcached-help' => "Lista d'adrësse IP da dovré për Memcached.
-A dovrìa esse separà con dle vìrgole e specifiché la pòrta da dovré (për esempi: 127.0.0.1:11211, 192.168.1.25:11211).",
+A dovrìa esse separà con dle vìrgole e specifiché la pòrta da dovré (për esempi: 127.0.0.1:11211, 192.168.1.25:11211).", # Fuzzy
'config-extensions' => 'Estension',
'config-extensions-help' => "J'estension listà dì-sota a son ëstàite trovà ant sò dossié <code>./extensions</code>.
'config-install-interwiki-list' => "As peul pa trovesse l'archivi <code>interwiki.list</code>.",
'config-install-interwiki-exists' => "'''Avis''': La tàula interwiki a smija ch'a l'abia già dj'element.
Për stàndard, la lista a sarà sautà.",
- 'config-install-keys' => 'Generassion ëd la ciav segreta',
+ 'config-install-keys' => 'Generassion ëd la ciav segreta', # Fuzzy
'config-install-sysop' => "Creassion dël cont ëd l'utent aministrator",
'config-install-done' => "'''Congratulassion!'''
A l'ha instalà për da bin mediaWiki.
A dovrà [$1 dëscarielo] e butelo ant la bas ëd l'instalassion ëd soa wiki (ël midem dossié d'index.php).
'''Nòta''': S'a lo fa nen adess, cost archivi ëd configurassion generà a sarà pa disponìbil për chiel pi tard s'a chita l'instalassion sensa dëscarielo.
-Quand che a l'é stàit fàit, a peul '''[$2 intré an soa wiki]'''.",
+Quand che a l'é stàit fàit, a peul '''[$2 intré an soa wiki]'''.", # Fuzzy
'config-help' => 'agiut',
'mainpagetext' => "'''MediaWiki a l'é staita anstalà a la përfession.'''",
'mainpagedocfooter' => "Che a varda la [//meta.wikimedia.org/wiki/Help:Contents User's Guide] për avèj dj'anformassion ant sël coma dovré ël programa dla wiki.
'config-admin-password-confirm' => 'پټنوم يو ځل بيا:',
'config-admin-email' => 'برېښليک پته:',
'config-profile-wiki' => 'دوديزه ويکي',
+ 'config-license-pd' => 'ټولګړی شپول',
'config-email-settings' => 'د برېښليک امستنې',
'config-install-step-done' => 'ترسره شو',
+ 'config-install-tables' => 'لښتيالونه جوړول',
+ 'config-help' => 'لارښود',
'mainpagetext' => "'''MediaWiki په برياليتوب سره نصب شو.'''",
'mainpagedocfooter' => 'د ويکي ساوترې د کارولو د مالوماتو په اړه [//meta.wikimedia.org/wiki/Help:Contents د کارن لارښود] سره سلا وکړۍ.
Se usa alojamento partilhado, peça ao fornecedor do alojamento para instalar um controlador apropriado.
Se foi você quem compilou o PHP, reconfigure-o com um cliente de base de dados activado; por exemplo, usando <code>./configure --with-mysql</code>.
Se instalou o PHP a partir de um pacote Debian ou Ubuntu, então precisa de instalar também o módulo php5-mysql.",
+ 'config-outdated-sqlite' => "'''Aviso''': Tem a versão $1 do SQLite, que é anterior à versão mínima necessária, a $2. O SQLite não estará disponível.",
'config-no-fts3' => "'''Aviso''': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
'config-register-globals' => "'''Aviso: A opção <code>[http://php.net/register_globals register_globals]</code> do PHP está activada.'''
'''Desactive-a, se puder.'''
'config-memory-bad' => "'''Aviso:''' A configuração <code>memory_limit</code> do PHP é $1.
Isto é provavelmente demasiado baixo.
A instalação poderá falhar!",
+ 'config-ctype' => "'''Fatal''': O PHP tem de ser compilado com suporte para a [http://www.php.net/manual/en/ctype.installation.php extensão Ctype].",
'config-xcache' => '[http://xcache.lighttpd.net/ XCache] instalada',
'config-apc' => '[http://www.php.net/apc APC] instalada',
'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache] instalada',
- 'config-no-cache' => "'''Aviso:''' Não foram encontrados [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] nem [http://www.iis.net/download/WinCacheForPhp WinCache].
+ 'config-no-cache' => "'''Aviso:''' Não foi possível encontrar: [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache], nem [http://www.iis.net/download/WinCacheForPhp WinCache].
A cache de objectos não será activada.",
+ 'config-mod-security' => "'''Aviso''': O seu servidor de internet tem o [http://modsecurity.org/ mod_security] ativado. Se este estiver mal configurado, pode causar problemas ao MediaWiki ou a outros programas, permitindo que os utilizadores publiquem conteúdos arbitrários.
+Consulte a [http://modsecurity.org/documentation/ mod_security documentação] ou peça apoio ao fornecedor do alojamento do seu servidor se encontrar erros aleatórios.",
'config-diff3-bad' => 'O GNU diff3 não foi encontrado.',
'config-imagemagick' => 'Foi encontrado o ImageMagick: <code>$1</code>.
Se possibilitar uploads, a miniaturização de imagens será activada.',
'config-using-uri' => 'Será usada a URL do servidor "<nowiki>$1$2</nowiki>".',
'config-uploads-not-safe' => "'''Aviso:''' O directório por omissão para uploads <code>$1</code>, está vulnerável à execução arbitrária de scripts.
Embora o MediaWiki verifique a existência de ameaças de segurança em todos os ficheiros enviados, é altamente recomendado que [//www.mediawiki.org/wiki/Manual:Security#Upload_security vede esta vulnerabilidade de segurança] antes de possibilitar uploads.",
- 'config-no-cli-uploads-check' => "'''Aviso:''' Durante a instalação da CLI (\"Call Level Interface\", a Interface ao Nível da Chamada de Execução), o directório por omissão para uploads, <code>\$1</code>, não é verificado para determinar se é vulnerável à execução de código arbitrário.",
+ 'config-no-cli-uploads-check' => "'''Aviso:''' O directório por omissão para uploads, <code>\$1</code>, não é verificado para determinar se é vulnerável à execução de código arbitrário durante a instalação por CLI (\"Command-line Interface\").",
'config-brokenlibxml' => 'O seu sistema tem uma combinação de versões de PHP e libxml2 conhecida por ser problemática, podendo causar corrupção de dados no MediaWiki e outras aplicações da internet.
Actualize para o PHP versão 5.2.9 ou posterior e libxml2 versão 2.7.3 ou posterior ([//bugs.php.net/bug.php?id=45996 incidência reportada no PHP]).
Instalação interrompida.',
'config-db-host' => 'Servidor da base de dados:',
'config-db-host-help' => 'Se a base de dados estiver num servidor separado, introduza aqui o nome ou o endereço IP desse servidor.
-Se estiver a usar um servidor partilhado, o fornecedor do alojamento deve ter-lhe fornecido o nome do servidor na documentação.
+Se estiver a usar um servidor partilhado, o fornecedor do alojamento deve fornecer o nome do servidor na documentação.
+
+Se está a fazer a instalação num servidor Windows com MySQL, usar como nome do servidor "localhost" poderá não funcionar. Se não funcionar, tente usar "127.0.0.1" como endereço IP local.
-Se está a fazer a instalação num servidor Windows com MySQL, usar como nome do servidor "localhost" poderá não funcionar. Se não funcionar, tente usar "127.0.0.1" como endereço IP local.',
+Se estiver a usar PostgreSQL, deixe este campo em branco para fazer a ligação através de um socket Unix.',
'config-db-host-oracle' => 'TNS (Transparent Network Substrate) da base de dados:',
'config-db-host-oracle-help' => 'Introduza um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome Local de Ligação] válido; tem de estar visível para esta instalação um ficheiro tnsnames.ora.<br />Se está a usar bibliotecas cliente versão 10g ou posterior, também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Ligação Fácil] de atribuição do nome.',
'config-db-wiki-settings' => 'Identifique esta wiki',
Depois de terminar o passo anterior, pode '''[$2 entrar na wiki]'''.",
'config-download-localsettings' => 'Download do LocalSettings.php',
'config-help' => 'ajuda',
+ 'config-nofile' => 'Não foi possível encontrar o ficheiro "$1". Terá sido apagado?',
'mainpagetext' => "'''MediaWiki instalado com sucesso.'''",
'mainpagedocfooter' => 'Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.
'config-upgrade-key-missing' => 'Foi detectada uma instalação existente do MediaWiki.
Para atualizar esta instalação, por favor, coloque a seguinte linha na parte inferior do seu LocalSettings.php:
-$ 1',
+$ 1', # Fuzzy
'config-session-error' => 'Erro ao iniciar a sessão: $1',
'config-session-expired' => 'Os seus dados de sessão parecem ter expirado.
As sessões estão configuradas para uma duração de $1.
'config-sidebar' => '* [//www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki]
* [//www.mediawiki.org/wiki/Help:Contents/pt Ajuda]
* [//www.mediawiki.org/wiki/Manual:Contents/pt Manual técnico]
-* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]',
+* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]', # Fuzzy
'config-env-good' => 'O ambiente foi verificado.
Você pode instalar o MediaWiki.',
'config-env-bad' => 'O ambiente foi verificado.
'config-unicode-using-utf8' => 'A usar o utf8_normalize.so, de Brian Viper, para a normalização Unicode.',
'config-unicode-using-intl' => 'Usando a [http://pecl.php.net/intl extensão intl PECL] para a normalização Unicode.',
'config-unicode-pure-php-warning' => "'''Aviso''': A [http://pecl.php.net/intl extensão intl PECL] não está disponível para efetuar a normalização Unicode.
-Se o seu site tem um alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalização Unicode].",
- 'config-no-db' => 'Não foi possível encontrar um driver de banco de dados adequado!',
+Se o seu site tem um alto volume de tráfego, devia informar-se um pouco sobre a [//www.mediawiki.org/wiki/Unicode_normalization_considerations normalização Unicode].", # Fuzzy
+ 'config-no-db' => 'Não foi possível encontrar um driver de banco de dados adequado!', # Fuzzy
'config-no-fts3' => "' ' 'Aviso' ' ': O SQLite foi compilado sem o módulo [//sqlite.org/fts3.html FTS3]; as funcionalidades de pesquisa não estarão disponíveis nesta instalação.",
'config-register-globals' => "' ' 'Aviso: A opção <code>[http://php.net/register_globals register_globals]</code> do PHP está ativada.'''
' ' 'Desative-a, se puder.'''
'config-logo-help' => 'O tema padrão do MediaWiki inclui espaço para um logotipo de 135x160 pixels no canto superior esquerdo.
Faça o upload de uma imagem com estas dimensões e introduza aqui a URL dessa imagem.
-Se você não pretende usar um logotipo, deixe este campo em branco.',
+Se você não pretende usar um logotipo, deixe este campo em branco.', # Fuzzy
'mainpagetext' => "'''MediaWiki instalado com sucesso.'''",
'mainpagedocfooter' => 'Consulte o [//meta.wikimedia.org/wiki/Help:Contents Manual de Usuário] para informações de como usar o software wiki.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]',
);
-/** Quechua (Runa Simi) */
+/** Quechua (Runa Simi)
+ */
$messages['qu'] = array(
'mainpagetext' => "'''MediaWiki nisqa llamp'u kaqqa aypaylla takyachisqañam.'''",
'mainpagedocfooter' => "Wiki llamp'u kaqmanta willasunaykipaqqa [//meta.wikimedia.org/wiki/Help:Contents Ruraqpaq yanapana] ''(User's Guide)'' sutiyuq p'anqata qhaway.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Romagnol (Rumagnôl) */
+/** Romagnol (Rumagnôl)
+ */
$messages['rgn'] = array(
'mainpagetext' => "'''L'instalaziòn d'MediaWiki l'è andêda ben'''",
);
'config-header-sqlite' => 'Setări SQLite',
'config-header-oracle' => 'Setări Oracle',
'config-missing-db-name' => 'Trebuie să introduci o valoare pentru „Numele bazei de date”',
+ 'config-mysql-engine' => 'Motor de stocare:',
+ 'config-mysql-innodb' => 'InnoDB',
+ 'config-mysql-myisam' => 'MyISAM',
+ 'config-site-name-blank' => 'Introduceți un nume pentru sit.',
'config-ns-generic' => 'Proiect',
'config-admin-password' => 'Parolă:',
+ 'config-optional-continue' => 'Adresează-mi mai multe întrebări.',
+ 'config-optional-skip' => 'Sunt deja plictisit, doar instalează wikiul.',
+ 'config-profile-wiki' => 'Wiki tradițional',
+ 'config-profile-private' => 'Wiki privat',
+ 'config-email-settings' => 'Setări pentru e-mail',
+ 'config-install-step-done' => 'realizat',
'mainpagetext' => "'''Programul Wiki a fost instalat cu succes.'''",
'mainpagedocfooter' => 'Consultați [//meta.wikimedia.org/wiki/Help:Contents Ghidul utilizatorului (en)] pentru informații despre utilizarea software-ului wiki.
'mainpagetext' => 'मीडियाविकि तु सफलतया अन्तःस्थापितमस्ति',
);
-/** Sakha (саха тыла) */
+/** Sakha (саха тыла)
+ */
$messages['sah'] = array(
'mainpagetext' => "'''«MediaWiki» сөпкө туруорулунна.'''",
'mainpagedocfooter' => 'Биики программатын туһунан [//meta.wikimedia.org/wiki/Help:Contents справочникка] көрүөххүн сөп.
'mainpagetext' => "'''MediaWiki est stadu installadu in modu currègidu.'''",
);
-/** Sicilian (sicilianu) */
+/** Sicilian (sicilianu)
+ */
$messages['scn'] = array(
'mainpagetext' => "'''Nstallazzioni di MediaWiki cumplitata currettamenti.'''",
'mainpagedocfooter' => "Pi favuri taliari [//meta.wikimedia.org/wiki/Help:Contents Guida utenti] pi aiutu supra l'usu e la cunfigurazzioni di stu software wiki.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list dî rilassi di MediaWiki]",
);
-/** Scots (Scots) */
+/** Scots (Scots)
+ */
$messages['sco'] = array(
'mainpagetext' => "'''MediaWiki haes been installit wi speed.'''",
'mainpagedocfooter' => "Aks the [//meta.wikimedia.org/wiki/Help:Contents Uiser's Manual] for speirins aboot using the wiki saftware.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki releese mailin leet]",
);
-/** Sassaresu (Sassaresu) */
+/** Sassaresu (Sassaresu)
+ */
$messages['sdc'] = array(
'mainpagetext' => "'''Isthallazioni di MediaWiki accabadda currentementi.'''",
'mainpagedocfooter' => "Cunsultha la [//meta.wikimedia.org/wiki/Aggiuddu:Summàriu Ghia utenti] pa maggiori infuimmazioni i l'usu di chisthu software wiki.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list annùnzii MediaWiki]",
);
-/** Cmique Itom (Cmique Itom) */
+/** Cmique Itom (Cmique Itom)
+ */
$messages['sei'] = array(
'mainpagetext' => "'''MediaWiki coccebj installöx successua zo mii.'''",
);
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce මීඩියාවිකි නිකුතුව තැපැල් ලැයිස්තුව]',
);
-/** Slovak (slovenčina) */
+/** Slovak (slovenčina)
+ * @author Kusavica
+ */
$messages['sk'] = array(
+ 'config-your-language' => 'Váš jazyk:',
+ 'config-wiki-language' => 'Wiki jazyk:',
+ 'config-back' => '← Späť',
+ 'config-continue' => 'Pokračovať →',
+ 'config-page-language' => 'Jazyk',
+ 'config-download-localsettings' => 'Stiahnuť LocalSettings.php',
+ 'config-nofile' => 'Súbor "$1" sa nenašiel. Bol zmazaný?',
'mainpagetext' => "'''Softvér MediaWiki bol úspešne nainštalovaný.'''",
'mainpagedocfooter' => 'Informácie ako používať wiki softvér nájdete v [//meta.wikimedia.org/wiki/Help:Contents Používateľskej príručke].
/** Slovenian (slovenščina)
* @author Dbc334
+ * @author Eleassar
*/
$messages['sl'] = array(
'config-desc' => 'Namestitveni program za MediaWiki',
'config-profile-no-anon' => 'Zahtevano je ustvarjanje računa',
'config-profile-fishbowl' => 'Samo pooblaščeni urejevalci',
'config-profile-private' => 'Zasebni wiki',
- 'config-license' => 'Avtorske pravice in dovoljenje:',
+ 'config-license' => 'Avtorske pravice in licenca:',
'config-license-none' => 'Brez noge dovoljenja',
'config-license-cc-by-sa' => 'Creative Commons Priznanje avtorstva-Deljenje pod enakimi pogoji',
'config-license-cc-by' => 'Creative Commons Priznanje avtorstva',
'config-cc-error' => 'Izbirnik dovoljenja Creative Commons ni vrnil nobenih rezultatov.
Vnesite ime dovoljenja ročno.',
'config-cc-again' => 'Izberi ponovno ...',
- 'config-cc-not-chosen' => 'Izberite dovoljenje Creative Commons, ki ga želite dodati, in kliknite »proceed«.',
+ 'config-cc-not-chosen' => 'Izberite licenco Creative Commons, ki jo želite uporabiti, in kliknite »proceed«.',
'config-advanced-settings' => 'Napredna konfiguracija',
'config-cache-accel' => 'Predpomnjenje predmetov PHP (APC, XCache ali WinCache)',
'config-cache-memcached' => 'Uporabi Memcached (zahteva dodatno namestitev in konfiguracijo)',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Albanian (shqip) */
+/** Albanian (shqip)
+ */
$messages['sq'] = array(
'mainpagetext' => "'''MediaWiki software u instalua me sukses.'''",
'mainpagedocfooter' => 'Për më shumë informata rreth përdorimit të softwerit wiki , ju lutem shikoni [//meta.wikimedia.org/wiki/Help:Contents dokumentacionin përkatës].
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Njoftime rreth MediaWiki-t]',
);
-/** Serbian (Cyrillic script) (српски (ћирилица))
+/** Serbian (Cyrillic script) (српски (ћирилица))
* @author Rancher
+ * @author Михајло Анђелковић
*/
$messages['sr-ec'] = array(
+ 'config-session-error' => 'Грешка при започињању сесије: $1',
+ 'config-session-expired' => 'Ваши подаци о сесији су истекли.
+Сесије су подешене да трају $1.
+Њихов рок можете повећати постављањем <code>session.gc_maxlifetime</code> у php.ini.
+Поново покрените инсталацију.',
+ 'config-no-session' => 'Ваши подаци о сесији су изгубљени!
+Проверите Ваш php.ini и обезбедите да је <code>session.save_path</code> постављен на одговарајући директоријум.',
+ 'config-your-language' => 'Ваш језик:',
+ 'config-your-language-help' => 'Изаберите језик који желите да користите током инсталације.',
+ 'config-wiki-language' => 'Језик викија:',
+ 'config-wiki-language-help' => 'Изаберите језик на ком ће бити садржај викија.',
+ 'config-back' => '← Назад',
'config-continue' => 'Настави →',
'config-page-language' => 'Језик',
+ 'config-page-welcome' => 'Добро дошли на МедијаВики!',
+ 'config-page-dbconnect' => 'Повезивање са базом података',
+ 'config-page-upgrade' => 'Надоградња постојеће инсталације',
+ 'config-page-dbsettings' => 'Подешавања базе података',
+ 'config-page-name' => 'Назив',
+ 'config-page-options' => 'Поставке',
+ 'config-page-install' => 'Инсталирај',
+ 'config-page-complete' => 'Завршено!',
+ 'config-page-restart' => 'Поновно покретање инсталације',
+ 'config-page-copying' => 'Умножавање',
+ 'config-page-upgradedoc' => 'Надоградња',
+ 'config-page-existingwiki' => 'Постојећи вики',
+ 'config-help-restart' => 'Желите ли да обришете све сачуване податке које сте унели и поново покренете инсталацију?',
+ 'config-restart' => 'Да, покрени поново',
'config-type-mysql' => 'MySQL',
'config-type-postgres' => 'PostgreSQL',
'config-type-sqlite' => 'SQLite',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Дописна листа о издањима Медијавикија]',
);
-/** Serbian (Latin script) (srpski (latinica)) */
+/** Serbian (Latin script) (srpski (latinica))
+ */
$messages['sr-el'] = array(
+ 'config-session-error' => 'Greška pri započinjanju sesije: $1',
+ 'config-session-expired' => 'Vaši podaci o sesiji su istekli.
+Sesije su podešene da traju $1.
+Njihov rok možete povećati postavljanjem <code>session.gc_maxlifetime</code> u php.ini.
+Ponovo pokrenite instalaciju.',
+ 'config-no-session' => 'Vaši podaci o sesiji su izgubljeni!
+Proverite Vaš php.ini i obezbedite da je <code>session.save_path</code> postavljen na odgovarajući direktorijum.',
+ 'config-your-language' => 'Vaš jezik:',
+ 'config-your-language-help' => 'Izaberite jezik koji želite da koristite tokom instalacije.',
+ 'config-wiki-language' => 'Jezik vikija:',
+ 'config-wiki-language-help' => 'Izaberite jezik na kom će biti sadržaj vikija.',
+ 'config-back' => '← Nazad',
'config-continue' => 'Nastavi →',
'config-page-language' => 'Jezik',
+ 'config-page-welcome' => 'Dobro došli na MedijaViki!',
+ 'config-page-dbconnect' => 'Povezivanje sa bazom podataka',
+ 'config-page-upgrade' => 'Nadogradnja postojeće instalacije',
+ 'config-page-dbsettings' => 'Podešavanja baze podataka',
+ 'config-page-name' => 'Naziv',
+ 'config-page-options' => 'Postavke',
+ 'config-page-install' => 'Instaliraj',
+ 'config-page-complete' => 'Završeno!',
+ 'config-page-restart' => 'Ponovno pokretanje instalacije',
+ 'config-page-copying' => 'Umnožavanje',
+ 'config-page-upgradedoc' => 'Nadogradnja',
+ 'config-page-existingwiki' => 'Postojeći viki',
+ 'config-help-restart' => 'Želite li da obrišete sve sačuvane podatke koje ste uneli i ponovo pokrenete instalaciju?',
+ 'config-restart' => 'Da, pokreni ponovo',
'config-type-mysql' => 'MySQL',
'config-type-postgres' => 'PostgreSQL',
'config-type-sqlite' => 'SQLite',
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]',
);
-/** Sranan Tongo (Sranantongo) */
+/** Sranan Tongo (Sranantongo)
+ */
$messages['srn'] = array(
'mainpagetext' => "'''MediaWiki seti kon bun.'''",
'mainpagedocfooter' => 'Luku na ini a [//meta.wikimedia.org/wiki/Help:Yepi yepibuku] fu si fa fu kebrouki a wikisoftware.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Boskopu grupu gi nyun meki]',
);
-/** Swati (SiSwati) */
+/** Swati (SiSwati)
+ */
$messages['ss'] = array(
'mainpagetext' => "'''i-MediaWiki seyifakeke ngalokuphelele.'''",
);
'mainpagedocfooter' => 'Sjuch ju [//meta.wikimedia.org/wiki/MediaWiki_localization Dokumentation tou de Anpaasenge fon dän Benutseruurfläche] un dät [//meta.wikimedia.org/wiki/Help:Contents Benutserhondbouk] foar Hälpe tou ju Benutsenge un Konfiguration.',
);
-/** Sundanese (Basa Sunda) */
+/** Sundanese (Basa Sunda)
+ */
$messages['su'] = array(
'mainpagetext' => "'''''Software'' MediaWiki geus diinstal.'''",
'mainpagedocfooter' => "Mangga tingal ''[//meta.wikimedia.org/wiki/MediaWiki_localisation documentation on customizing the interface]'' jeung [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Tungtunan Pamaké] pikeun pitulung maké jeung konfigurasi.",
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce மீடியாவிக்கி வெளியீடு மின்னஞ்சல் பட்டியல்]',
);
-/** Tulu (ತುಳು) */
+/** Tulu (ತುಳು)
+ */
$messages['tcy'] = array(
'mainpagetext' => "'''ಮೀಡಿಯವಿಕಿ ಯಶಸ್ವಿಯಾದ್ ಇನ್’ಸ್ಟಾಲ್ ಆಂಡ್.'''",
'mainpagedocfooter' => 'ವಿಕಿ ತಂತ್ರಾಂಶನ್ ಉಪಗೋಗ ಮನ್ಪುನ ಬಗ್ಗೆ ಮಾಹಿತಿಗ್ [//meta.wikimedia.org/wiki/Help:Contents ಸದಸ್ಯೆರ್ನ ನಿರ್ದೇಶನ ಪುಟ] ತೂಲೆ.
'config-mysql-utf8' => 'UTF-8',
'config-site-name' => 'వికీ యొక్క పేరు:',
'config-ns-other' => 'ఇతర (ఇవ్వండి)',
+ 'config-ns-other-default' => 'నావికీ',
'config-admin-name' => 'మీ పేరు:',
'config-admin-password' => 'సంకేతపదం:',
'config-admin-password-confirm' => 'సంకేతపదం మళ్ళీ:',
'config-license-pd' => 'సార్వజనీనం',
'config-email-settings' => 'ఈ-మెయిల్ అమరికలు',
'config-upload-deleted' => 'తొలగించిన దస్త్రాల కొరకు సంచయం:',
+ 'config-advanced-settings' => 'ఉన్నత స్వరూపణం',
'config-install-step-done' => 'పూర్తయింది',
'config-install-step-failed' => 'విఫలమైంది',
'config-help' => 'సహాయం',
'config-page-name' => 'Naran',
);
-/** Tajik (Cyrillic script) (тоҷикӣ) */
+/** Tajik (Cyrillic script) (тоҷикӣ)
+ */
$messages['tg-cyrl'] = array(
'mainpagetext' => "'''Нармафзори МедиаВики бо муваффақият насб шуд.'''",
'mainpagedocfooter' => 'Аз [//meta.wikimedia.org/wiki/Help:Contents Роҳнамои Корбарон] барои истифодаи нармафзори вики кӯмак бигиред.
* @author Sky Harbor
*/
$messages['tl'] = array(
- 'config-desc' => 'Ang instalador para sa MediaWiki',
+ 'config-desc' => 'Ang tagapagluklok para sa MediaWiki',
'config-title' => 'Instalasyong $1 ng MediaWiki',
'config-information' => 'Kabatiran',
+ 'config-localsettings-upgrade' => 'Napansin ang isang talaksang <code>LocalSettings.php</code>.
+Upang maitaas ang uri ng pagluluklok na ito, paki ipasok ang halaga ng <code>$wgUpgradeKey</code> sa loob ng kahong nasa ibaba.
+Matatagpuan mo ito sa loob ng LocalSettings.php.',
'config-localsettings-cli-upgrade' => 'Napansin ang isang talaksan ng LocalSettings.php.
Upang isapanahon ang pagtatalagang ito, mangyaring patakbuhin sa halip ang update.php',
'config-localsettings-key' => 'Susi ng pagsasapanahon:',
'config-localsettings-incomplete' => 'Lumilitaw na hindi pa buo ang umiiral na LocalSettings.php.
Ang pabagu-bagong $1 ay hindi nakatakda.
Mangyaring baguhin ang LocalSettings.php upang ang maitakda ang pagpapabagu-bagong ito, at pindutin ang "Magpatuloy".',
+ 'config-localsettings-connection-error' => 'Isang kamalian ang nakatagpo noong kumakabit sa kalipunan ng dato na ginagamit ang tinukoy na mga katakdaan sa loob ng LocalSettings.php o
+AdminSettings.php. Paki kumpunihin ang mga katakdaang ito at subukang muli.
+
+$1',
'config-session-error' => 'Kamalian sa pagsisimula ng sesyon: $1',
+ 'config-session-expired' => 'Tila nagwakas na ang inilaan sa iyong panahon ng dato.
+Ang inilaang mga panahon ay iniayos para sa isang panahon ng buhay na $1.
+Mapapataas mo ito sa pamamagitan ng pagtatakda ng <code>session.gc_maxlifetime</code> sa loob ng php.ini.
+Muling simulan ang proseso ng pagluluklok.',
'config-no-session' => 'Nawala ang iyong datos ng sesyon!
Suriin ang iyong php.ini at tiyakin na ang <code>session.save_path</code> ay nakatakda sa angkop na direktoryo.',
'config-your-language' => 'Ang wika mo:',
Subalit, nangangailangan ang MediaWiki ng PHP $2 o mas mataas pa.',
'config-unicode-using-utf8' => 'Ginagamit ang utf8_normalize.so ni Brion Vibber para sa pagpapanormal ng Unikodigo.',
'config-unicode-using-intl' => 'Ginagamit ang [http://pecl.php.net/intl intl dugtong na PECL] para sa pagsasanormal ng Unikodigo.',
+ 'config-unicode-pure-php-warning' => "'''Babala''': Ang [http://pecl.php.net/intl dugtong ng internasyunal na PECL] ay hindi makukuha upang makapanghawak ng pagpapanormal ng Unikodigo, na babagsak na pabalik sa mabagal na pagsasakatuparan ng dalisay na PHP.
+Kapag nagpapatakbo ka ng isang pook na mataas ang trapiko, dapat kang bumasa ng kaunti hinggil sa [//www.mediawiki.org/wiki/Unicode_normalization_considerations pagpapanormal ng Unikodigo].",
+ 'config-unicode-update-warning' => "'''Babala''': Ang nakaluklok na bersiyon ng pambalot ng pagpapanormal ng Unikodigo ay gumagamit ng isang mas matandang bersiyon ng aklatan ng [http://site.icu-project.org/ proyekto ng ICU].
+Dapat kang [//www.mediawiki.org/wiki/Unicode_normalization_considerations magtaas ng uri] kung may pag-aalala ka hinggil sa paggamit ng Unikodigo.",
'config-no-db' => 'Hindi matagpuan ang isang angkop na tagapagmaneho ng kalipunan ng datos! Kailangan mong magluklok ng isang tagapagmaneho ng kalipunan ng dato para sa PHP.
Tinatangkilik ang sumusunod na mga uri ng kalipunan ng dato: $1.
Kung ikaw ay nasa isang pinagsasaluhang pagpapasinaya, hilingin sa iyong tagapagbigay ng pagpapasinaya na iluklok ang isang angkop na tagapagmaneho ng kalipunan ng dato.
Kung ikaw mismo ang nangalap ng PHP, muling isaayos ito na pinagagana ang isang kliyente ng kalipunan ng dato, halimbawa na ang paggamit ng <code>./configure --with-mysql</code>.
Kung iniluklok mo ang PHP mula sa isang pakete ng Debian o Ubuntu, kung gayon kailangan mo ring magluklok ng modyul na php5-mysql.',
+ 'config-outdated-sqlite' => "'''Babala''': mayroong kang $1 ng SQLite, na mas mababa kaysa sa pinaka mababang kailangang bersiyon na $2. Magiging hindi makukuha ang SQLite.",
+ 'config-no-fts3' => "'''Warning''': Ang SQLite ay hindi itinala at tinipon na wala ang [//sqlite.org/fts3.html modulong FTS3], ang mga tampok na panghanap ay magiging hindi makukuha sa ibabaw ng panlikod na dulong ito.",
+ 'config-register-globals' => "'''Babala: Ang mapipili na <code>[http://php.net/register_globals register_globals]</code> ng PHP ay pinagagana.'''
+'''Huwag paganahin kung kaya mo.'''
+Aandar ang MediaWiki, subalit ang tagapaghain mo ay nakalantad sa maaaring maganap na mga kahinaang pangkatiwasayan.",
+ 'config-magic-quotes-runtime' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]!'''
+Ang piniling ito ay hindi mahuhulaan na pipinsala sa lahok na dato.
+Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na gumagana ang pinili na ito.",
+ 'config-magic-quotes-sybase' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]!'''
+Hindi mahuhulaan na sinisira ng napiling ito ang lahok na dato.
+Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
+ 'config-mbstring' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]!'''
+Ang napiling ito ay nagdurulot ng mga kamalian at maaaring sumira nang hindi nahuhulaan ang dato.
+Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
+ 'config-ze1' => "'''Malubha: Masigla ang [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]!'''
+Ang napiling ito ay nagsasanhi ng karima-rimarim na mga sira sa MediaWiki.
+Hindi mo maaaring iluklok o gamitin ang MediaWiki maliban na lamang kung hindi na pinagagana ang napiling ito.",
+ 'config-safe-mode' => "'''Babala:''' Masigla ang [http://www.php.net/features.safe-mode safe mode] ng PHP.
+Maaari itong magdulot ng mga suliranin, partikular na kung gumagamit ng mga ikinargang paitaas na talaksan at ng suporta sa <code>math</code>.",
+ 'config-xml-bad' => 'Nawawala ang modulong XML ng PHP.
+Nangangailangan ang MediaWiki ng mga tungkulin sa loob ng modulong ito at hindi aandar sa loob ng ganitong pagkakaayos.
+Kung pinapatakbo mo ang Mandrake, iluklok ang pakete ng php-xml.',
+ 'config-pcre' => 'Tila nawawala ang modyul na pangsuporta ng PCRE.
+Nangangailangan ang MediaWiki ng nakaukol sa Perl na mga tungkulin ng karaniwang pagsasaad upang gumana.',
+ 'config-pcre-no-utf8' => "'''Malubha''': Tila tinipon ang modyul na PCRE ng PHP na wala ang suporta ng PCRE_UTF8.
+Nangangailangan ang MediaWiki ng suporta ng UTF-8 upang maging tama ang pag-andar.",
'config-memory-raised' => 'Ang <code>hangganan_ng_alaala</code> ng PHP ay $1, itinaas sa $2.',
'config-memory-bad' => "'''Babala:''' Ang <code>hangganan_ng_alaala</code> ng PHP ay $1.
Ito ay maaaring napakababa.
Maaaring mabigo ang pagluluklok!",
+ 'config-ctype' => "'''Maluba''': Dapat na tipunin ang PHP na mayroong suporta para sa [http://www.php.net/manual/en/ctype.installation.php dugtong Ctype].",
'config-xcache' => 'Ininstala na ang [http://xcache.lighttpd.net/ XCache]',
'config-apc' => 'Ininstala na ang [http://www.php.net/apc APC]',
'config-wincache' => 'Ininstala na ang [http://www.iis.net/download/WinCacheForPhp WinCache]',
'config-no-cache' => "'''Babala:''' Hindi mahanap ang [http://www.php.net/apc APC], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].
Hindi pinapagana ang pagbabaon ng mga bagay.",
+ 'config-mod-security' => "'''Babala''': Ang tagapaghain mo ng sangkasaputan ay pinagana na mayroong [http://modsecurity.org/ mod_security]. Kung mali ang kaayusan, makapagdurulot ito ng mga suliranin para sa MediaWiki o ibang mga sopwer na nagpapahintulot sa mga tagagamit na magpaskil ng hindi makatwirang nilalaman.
+Sumangguni sa [http://modsecurity.org/documentation/ mod_security kasulatan] o makipag-ugnayan sa suporta ng iyong tagapagpasinaya kapag nakatagpo ng alin mang mga kamalian.",
'config-diff3-bad' => 'Hindi natagpuan ang GNU diff3.',
'config-imagemagick' => 'Natagpuan ang ImageMagick: <code>$1</code>.
+Papaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.',
+ 'config-gd' => 'Natagpuan ang pinasadyang nakapaloob na grapiks ng GD.
Papaganahin ang pagkakagyat ng larawan kapag pinagana mo ang mga pagkakargang paitaas.',
'config-no-scaling' => 'Hindi matagpuan ang aklatang GD o ImageMagick.
Hindi papaganahin ang pagkakagyat ng larawan.',
'config-no-uri' => "'''Kamalian:''' Hindi matukoy ang kasalukuyang URI.
Pinigilan ang pag-iinstala.",
+ 'config-no-cli-uri' => "'''Babala''': Walang tinukoy na --landas ng panitik, ginagamit ang likas na katakdaan: <code>$1</code>.",
+ 'config-using-server' => 'Ginagamit ang pangalan ng tagapaghain na "<nowiki>$1</nowiki>".',
+ 'config-using-uri' => 'Ginagamit ang URL ng tagapaghain na "<nowiki>$1$2</nowiki>".',
+ 'config-uploads-not-safe' => "'''Babala:''' Ang iyong likas na nakatakdang direktoryo para sa paitaas na mga pagkakarga na <code>$1</code> ay may kahinaan laban sa pagsasagawa ng mga panitiki na hindi makatwiran. Bagaman sinisiyasat ng MediaWiki ang lahat ng paitaas na naikargang mga talaksan para sa mga panganib na pangkatiwasayan, mataas na iminumungkahi na [//www.mediawiki.org/wiki/Manual:Security#Upload_security isara ang kahinaang ito na pangkatiwasayan] bago paganahin ang paitaas na mga pagkakarga.",
+ 'config-no-cli-uploads-check' => "'''Babala:''' Ang iyong likas na nakatakdang direktoryo para sa paitaas na mga pagkakarga (<code>$1</code>) ay hindi nasuri para sa kahinaan laban sa pagsasagawa ng panitik na hindi makatwiran habang iniluluklok ang Ugnayang Mukha ng Guhit ng Kaataasan o Command-Line Interface (CLI).",
+ 'config-brokenlibxml' => "Ang sistema mo ay mayroong isang pagsasama ng mga bersiyon ng PHP at libxml2 na maaaring masurot at maaaring makapagsanhi ng pagkasira ng datong nakakubli sa loob ng MediaWiki at iba pang mga aplikasyon ng sangkasaputan.
+Magtaas ng uri upang maging PHP 5.2.9 o mas lalong huli at libxml2 2.7.3 o mas lalong huli ([//bugs.php.net/bug.php?id=45996 isinalansan ang surot o ''bug'' na mayroong PHP]). Binigo ang pagluluklok.",
+ 'config-using531' => 'Hindi maaaring gamitin ang MediaWiki na kapiling ang PHP na $1 dahil sa isang surot na kinasasangkutan ng mga parametrong pangsangguni sa <code>__call()</code>. Magtaas ng uri upang maging PHP 5.3.2 o mas mataas, o magbaba ng uri upang maging PHP 5.3.0 upang malutas ito. Binigo ang pagluluklok.',
+ 'config-suhosin-max-value-length' => 'Nakaluklok ang Suhosin at hinahanggahan ang haba ng parametro ng GET sa $1 mga byte. Ang sangkap na ResourceLoader ng MediaWiki ay gagana sa paligid ng hangganang ito, subalit pasasamain nito ang pagganap. Kung talagang maaari, dapat mong itakda ang suhosin.get.max_value_length upang maging 1024 o mas mataas sa loob ng php.ini, at itakda ang $wgResourceLoaderMaxQueryLength sa katulad na halaga sa loob ng LocalSettings.php.',
'config-db-type' => 'Uri ng kalipunan ng datos:',
'config-db-host' => 'Tagapagpasinaya ng kalipunan ng datos:',
+ 'config-db-host-help' => 'Kung ang iyong tagapaghain ng kalipunan ng dato ay nasa ibabaw ng isang ibang tagapaghain, ipasok ang pangalan ng tagapagpasinaya o tirahan ng IP dito.
+
+Kung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, dapat ibigay sa iyo ng iyong tagapagbigay ng pagpapasinaya ang tamang pangalan ng tagapagpasinaya sa loob ng kanilang kasulatan.
+
+Kapag nagluluklok ka sa ibabaw ng isang tagapaghain ng Windows at gumagamit ng MySQL, maaaring hindi gumana ang paggamit ng "localhost" para sa pangalan ng tagapaghain. Kung hindi, subukan ang "127.0.0.1" para sa katutubong tirahan ng IP.
+
+Kapag gumagamit ka ng PostgreSQL, iwanang walang laman ang hanay na ito upang kumabit sa pamamagitan ng bokilya ng Unix.',
'config-db-host-oracle' => 'TNS ng kalipunan ng dato:',
+ 'config-db-host-oracle-help' => 'Magpasok ng isang katanggap-tanggap na [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Katutubong Pangalan ng Pagkabit]; dapat na nakikita ang isang talaksan ng tnsnames.ora sa pagluluklok na ito.<br />Kung gumagamit ka ng mga aklatan ng kliyente na 10g o mas bago, maaari mo ring gamitin ang pamamaraan ng pagpapangalan ng [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Maginhawang Pagkabit].',
'config-db-wiki-settings' => 'Kilalanin ang wiking ito',
'config-db-name' => 'Pangalan ng kalipunan ng dato:',
+ 'config-db-name-help' => 'Pumili ng isang pangalan na pangkilala sa wiki mo.
+Hindi ito dapat maglaman ng mga patlang.
+
+Kung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, ang iyong tagapagbigay ng pagpapasinaya ay maaaring bigyan ka ng isang tiyak na pangalan ng kalipunan ng datong gagamitin o papayagan kang lumikha ng mga kalipunan ng dato sa pamamagitan ng isang entrepanyong pantaban.',
'config-db-name-oracle' => 'Balangkas ng kalipunan ng dato:',
+ 'config-db-account-oracle-warn' => 'Mayroong tatlong tinatangkilik na tagpo para sa pagluluklok ng Oracle bilang panlikurang hulihan ng kalipunan ng dato:
+
+Kung nais mong lumikha ng akawnt ng kalipunan ng dato bilang bahagi ng proseso ng pagluluklok, paki magbigay ng isang akawnt na mayroong gampanin ng SYSDBA bilang akawnt ng kalipunan ng dato para sa pagluluklok at tukuyin ang ninanais na mga kredensiyal para sa akawnt ng pagpunta sa sangkasaputan, o di kaya ay maaaring kinakamay na lumikha ng akawnt ng pagpunta sa sangkasaputan at ibigay lamang ang akawnt na iyan (kung mayroong ito ng kinakailangang mga pahintulot upang malikha ang mga bagay na pampagpapanukala) o magbigay ng dalawang magkaibang mga akawnt, isang mayroong pribilehiyo ng paglikha at isang may pagbabawal para sa pagpunta sa sangkasaputan.
+
+Ang panitik sa paglikha ng isang akawnt na mayroon ng kinakailangang mga pribilehiyo ay matatagpuan sa loob ng direktoryong "maintenance/oracle/" ng pagluluklok na ito. Pakatandaan na ang paggamit ng isang akawnt na may pagbabawal ay hindi magpapagana isa lahat ng mga kakayahang pampananatili sa piling ng likas na nakatakdang akawnt.',
'config-db-install-account' => 'Akawnt ng tagagamit para sa pagluluklok',
'config-db-username' => 'Pangalang pangtagagamit ng kalipunan ng dato:',
'config-db-password' => 'Hudyat sa kalipunan ng dato:',
+ 'config-db-password-empty' => 'Paki magpasok ng isang hudyat para sa bagong tagagamit ng kalipunan ng dato: $1.
+Habang maging maaari na makalikha ng mga tagagamit na walang mga hudyat, hindi ito ligtas.',
+ 'config-db-install-username' => 'Ipasok ang pangalan ng tagagamit na gagamitin upang kumabit sa kalipunan ng dato habang isinasagawa ang pagluluklok.
+Hindi ito ang pangalan ng tagagamit ng akawnt ng MediaWiki; ito ang pangalan ng tagagamit para sa iyong kalipunan ng dato.',
+ 'config-db-install-password' => 'Ipasok ang hudyat na gagamitin upang kumabit sa kalipunan ng dato habang isinasagawa ang pagluluklok.
+Hindi ito ang hudyat para sa akawnt ng MediaWiki; ito ang hudyat para sa iyong kalipunan ng dato.',
'config-db-install-help' => 'Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang umugnay sa kalipunan ng dato habang isinasagawa ang pagluluklok.',
'config-db-account-lock' => 'Gamitin ang gayun ding pangalan ng tagagamit at hudyat habang nasa normal na operasyon',
'config-db-wiki-account' => 'Akawnt ng tagagamit para sa pangkaraniwang pagpapaandar',
+ 'config-db-wiki-help' => 'Ipasok ang pangalan ng tagagamit at hudyat na gagamitin upang kumabit sa kalipunan ng dato habang nasa karaniwang pagtakbo ng wiki.
+Kung hindi umiiral ang akawnt, at ang akawnt ng pagluluklok ay mayroong sapat na mga pribilehiyo, ang akawnt na ito ng tagagamit ay lilikhain na mayroong pinaka mababang mga pribilehiyo na kailangan upang mapatakbo ang wiki.',
'config-db-prefix' => 'Unlapi ng talahanayan ng kalipunan ng dato:',
+ 'config-db-prefix-help' => 'Kung kailangan mong ibahagi ang isang kalipunan ng dato sa pagitan ng maramihang mga wiki, o sa pagitan ng MediaWiki at ibang aplikasyon ng kasaputan, maaaring piliin mo na magdagdag ng isang unlapi sa lahat ng mga pangalan ng talahanayan upang maiwasan ang mga salungatan.
+Huwag gumamit ng mga patlang.
+
+Ang hanay na ito ay karaniwang iniiwanang walang laman.',
'config-db-charset' => 'Pangkat ng panitik ng kalipunan ng dato',
'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 binaryo',
'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
'config-charset-mysql4' => 'MySQL 4.0 paurong-kabagay UTF-8',
+ 'config-charset-help' => "'''Babala:''' Kapag ginamit mo ang '''backwards-compatible UTF-8''' o \"nauukol na pabalik na UTF-8\" sa MySQL 4.1+, at may kasunod na pagtatabi ng pansalong kopya ng kalipunan ng dato na mayroong <code>mysqldump</code>, maaaring wasakin nito ang lahat ng mga panitik na hindi ASCII, na hindi na mababawi pa ang mga pansalong kopya.
+
+Sa '''gawi na nakahalo sa dalawa (binaryo)''', itinatabi ng MediaWiki ang tekstong UTF-8 sa kalipunan ng dato sa loob ng mga kahanayang binaryo.
+Mas kapaki-pakinabang ito kaysa sa gawi na UTF-8 ng MySQL, at nagpapahintulot sa iyo na gamitin ang buong kasaklawan ng mga panitik na Unikodigo.
+Sa '''gawi ng UTF-8''', malalaman ng MySQL kung anong pangkat ng panitik ang kinapapalooban ng iyong dato, at may kaangkupang maihaharap at mapapalitan ito, ngunit hindi ka nito papayagan na mag-imbak ng mga panitik sa ibabaw ng [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] o Saligang Patag na Kayas na Pangmaramihang Wika.",
'config-mysql-old' => 'Hindi kailangan ang MySQL na $1 o mas bago, mayroon kang $2.',
'config-db-port' => 'Daungan ng kalipunan ng dato:',
'config-db-schema' => 'Panukala para sa MediaWiki',
'config-db-schema-help' => 'Ang nasa itaas na panukala ay pangkaraniwang magiging maayos.
Baguhin lamang ito kung alam mong kinakailangan.',
+ 'config-pg-test-error' => "Hindi makakabit sa kalipunan ng dato na '''$1''': $2",
'config-sqlite-dir' => 'Direktoryo ng dato ng SQLite:',
+ 'config-sqlite-dir-help' => "Iniimbak ng SQLite ang lahat ng dato sa loob ng isang nag-iisang talaksan.
+
+Ang ibibigay mong direktoryo ay dapat na maging masusulatan ng tagapaghain ng kasaputan habang nagluluklok.
+
+'''Hindi''' ito dapat na mapuntahan sa pamamagitan ng kasaputan, ito ang dahilan kung bakit hindi namin ito inilalagay sa kung nasaan ang iyong mga talaksan ng PHP.
+
+Ang tagapagluklok ay magsusulat ng isang talaksang <code>.htaccess</code> na kasama ito, subalit kapag nabigo iyon mayroong isang tao na maaaring makakuha ng pagka nakakapunta sa iyong hilaw na kalipunan ng dato.
+Kasama riyan ang hilaw na dato ng tagagamit (mga tirahan ng e-liham, pinaghalong mga hudyat) pati na ang nabura nang mga pagbabago at iba pang may pagbabawal na dato sa ibabaw ng wiki.
+
+Isaalang-alang ang paglalagay na magkakasama ang kalipunan ng dato sa ibang lugar, halimbawa na ang sa loob ng <code>/var/lib/mediawiki/yourwiki</code>.",
'config-oracle-def-ts' => 'Likas na nakatakdang puwang ng talahanayan:',
'config-oracle-temp-ts' => 'Pansamantalang puwang ng talahanayan:',
+ 'config-type-mysql' => 'MySQL',
+ 'config-type-postgres' => 'PostgreSQL',
+ 'config-type-sqlite' => 'SQLite',
+ 'config-type-oracle' => 'Oracle',
'config-type-ibm_db2' => 'DB2 ng IBM',
+ 'config-support-info' => 'Sinusuportahan ng MediaWiki ang sumusunod na mga sistema ng kalipunan ng dato:
+
+$1
+
+Kung hindi mo makita ang sistema ng kalipunan ng dato na sinusubukan mong gamitin na nakatala sa ibaba, kung gayon ay sundi ang mga tagubilin na nakakawing sa itaas upang mapagana ang suporta,',
+ 'config-support-mysql' => '* Ang $1 ay ang pangunahing puntirya para sa MediaWiki at ang pinaka sinusuportahan ([http://www.php.net/manual/en/mysql.installation.php paano magtipon ng PHP na mayroong suporta ng MySQL])',
+ 'config-support-postgres' => '* Ang $1 ay isang bantog na sistema ng kalipunan ng dato na bukas ang pinagmulan na panghalili sa MySQL ([http://www.php.net/manual/en/pgsql.installation.php paano magtipon ng PHP na mayroong suporta ng PostgreSQL]). Maaaring mayroong ilang hindi pangunahing mga surot na natitira pa, at hindi iminumungkahi para gamitin sa loob ng isang kapaligiran ng produksiyon.',
+ 'config-support-sqlite' => 'Ang $1 ay isang magaan ang timbang na sistema ng kalipunan ng dato na sinusuportahan nang napaka mainam. ([http://www.php.net/manual/en/pdo.installation.php Paano magtipon ng PHP na mayroong suporta ng SQLite], gumagamit ng PDO)',
+ 'config-support-oracle' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal. ([http://www.php.net/manual/en/oci8.installation.php Paano magtipunan ng PHP na mayroong suporta ng OCI8])',
+ 'config-support-ibm_db2' => '* Ang $1 ay isang kalipunan ng dato ng kasigasigang pangkalakal.',
'config-header-mysql' => 'Mga katakdaan ng MySQL',
'config-header-postgres' => 'Mga katakdaan ng PostgreSQL',
'config-header-sqlite' => 'Mga katakdaan ng SQLite',
'config-missing-db-name' => 'Dapat kang magpasok ng isang halaga para sa "Pangalan ng kalipunan ng dato"',
'config-missing-db-host' => 'Dapat kang magpasok ng isang halaga para sa "Tagapagpasinaya ng kalipunan ng dato"',
'config-missing-db-server-oracle' => 'Dapat kang magpasok ng isang halaga para sa "TNS ng kalipunan ng dato"',
+ 'config-invalid-db-server-oracle' => 'Hindi katanggap-tanggap na pangalan ng TNSng kalipunan ng dato na "$1".
+Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga tuldok (.).',
'config-invalid-db-name' => 'Hindi tanggap na pangalan ng kalipunan ng dato na "$1".
-Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salangguhit (_) at mga gitling (-).',
+Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).',
'config-invalid-db-prefix' => 'Hindi tanggap na unlapi ng kalipunan ng dato na "$1".
-Gamitin lamang ang mga titik na ASCII (a-z, A-Z), mga bilang (0-9), mga salangguhit (_) at mga gitling (-).',
+Gamitin lamang ang mga titik na ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).',
'config-connection-error' => '$1.
Suriin ang punong-abala, pangalan ng tagagamit at hudyat na nasa ibaba at subukan ulit.',
+ 'config-invalid-schema' => 'Hindi katanggap-tanggap na panukala para sa "$1" ng MediaWiki.
+Gumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), at mga salungguhit (_).',
+ 'config-db-sys-create-oracle' => 'Ang panluklok ay tumatangkilik lamang sa paggamit ng isang akawnt ng SYSDBA para sa paglikha ng isang bagong akawnt.',
+ 'config-db-sys-user-exists-oracle' => 'Umiiral na ang akawnt ng tagagamit na "$1". Magagamit lamang ang SYSDBA para sa paglikha ng isang bagong akawnt!',
'config-postgres-old' => 'Kailangan ang PostgreSQL $1 o mas bago, mayroon kang $2.',
+ 'config-sqlite-name-help' => 'Pumili ng isang pangalan na pangkilala na wiki mo.
+Huwag gumamit ng mga puwang o mga gitling.
+Gagamitin ito para sa pangalan ng talaksan ng dato ng SQLite.',
+ 'config-sqlite-parent-unwritable-group' => 'Hindi malikha ang direktoryo ng dato na <code><nowiki>$1</nowiki></code>, sapagkat ang magulang na direktoryong <code><nowiki>$2</nowiki></code> ay hindi masulatan ng tagapaghain ng kasaputan.
+
+Napag-alaman ng tagapagluklok kung sinong tagagamit ang kinatatakbuhan ng iyong tagapaghain ng kasaputan.
+Gawing nasusulatan nito ang <code><nowiki>$3</nowiki></code> ng direktoryo upang makapagpatuloy.
+Ito ang gawin sa ibabaw ng isang sistema ng Unix/Linux:
+
+<pre>cd $2
+mkdir $3
+chgrp $4 $3
+chmod g+w $3</pre>',
+ 'config-sqlite-parent-unwritable-nogroup' => 'Hindi malikha ang direktoryo ng dato na <code><nowiki>$1</nowiki></code>, sapagkat ang magulang na direktoryong <code><nowiki>$2</nowiki></code> ay hindi masulatan ng tagapaghain ng kasaputan.
+
+Hindi malaman ng tagapagluklok kung sinong tagagamit ang kinatatakbuhan ng iyong tagapaghain ng kasaputan.
+Gawing nasusulatan nito (at ng mga iba pa) ang <code><nowiki>$3</nowiki></code> ng direktoryo upang makapagpatuloy.
+Ito ang gawin sa ibabaw ng isang sistema ng Unix/Linux:
+
+<pre>cd $2
+mkdir $3
+chmod a+w $3</pre>',
'config-sqlite-mkdir-error' => 'Kamalian sa paglikha ng direktoryo ng datong "$1".
Suriin ang kinalalagyan at subukang muli.',
'config-sqlite-dir-unwritable' => 'Hindi nagawang magsulat sa direktoryong "$1".
'config-sqlite-readonly' => 'Ang talaksang <code>$1</code> ay hindi maisusulat.',
'config-sqlite-cant-create-db' => 'Hindi malikha ang talaksang <code>$1</code> ng kalipunan ng dato.',
'config-sqlite-fts3-downgrade' => 'Nawawala ang suportang FTS3 ng PHP, ibinababa ang uri ng mga talahanayan',
+ 'config-can-upgrade' => "Mayroong mga talahanayan ng MediaWiki sa loob ng kalipunan ng datong ito.
+Upang maitaas ang uri ng mga ito upang maging MediaWiki na $1, pindutin ang '''Magpatuloy'''.",
+ 'config-upgrade-done' => "Buo na ang pagtataas ng uri.
+
+Maaari mo na ngayong [$1 gamitin ang iyong wiki].
+
+Kung nais mong muling likhain ang iyong talaksang <code>LocalSettings.php</code>, lagitikin ang pindutang nasa ibaba.
+'''Hindi minumungkahi''' ito maliban na lamang kung nagkakaroon ka ng mga suliranin sa piling ng wiki mo.",
'config-upgrade-done-no-regenerate' => 'Buo na ang pagsasapanahon.
Maaari ka na ngayong [$1 magsimula sa paggamit ng wiki mo].',
'config-db-web-help' => 'Piliin ang pangalan ng tagagamit at hudyat na gagamitin ng tagapaghain ng web upang umugnay sa tagapaghain ng kalipunan ng dato, habang nasa pangkaraniwang pagtakbo ng wiki.',
'config-db-web-account-same' => 'Gamitin ang gayun din akawnt katulad ng sa pagluluklok',
'config-db-web-create' => 'Likhain ang akawnt kung hindi pa ito umiiral',
+ 'config-db-web-no-create-privs' => 'Ang tinukoy mong akawnt na iluluklok ay walang sapat na mga pribilehiyo upang makalikha ng isang akawnt.
+Ang akawnt na tutukuyin mo rito ay umiiral na dapat.',
'config-mysql-engine' => 'Makinang imbakan:',
'config-mysql-innodb' => 'InnoDB',
'config-mysql-myisam' => 'MyISAM',
+ 'config-mysql-myisam-dep' => "'''Babala''': Pinili mo ang MyISAM bilang makinang imbakan para sa MySQL, na hindi iminumungkahi para gamitin sa MediaWiki, sapagkat:
+* bahagya lamang itong sumusuporta ng pagkakasundu-sundo dahil sa pagkakandado ng talahanayan
+* mas malaki ang pagkakataon na kapitan ng sira kaysa sa ibang mga makina
+* ang himpilang kodigo ng MediaWiki ay hindi palaging humahawak ng MyISAM ayon sa nararapat
+
+Kung ang iyong nakaluklok na MySQL ay sumusuporta ng InnoDB, higit na iminumungkahi na piliin mo iyon sa halip.
+Kung ang iyong nakaluklok na MySQL ay hindi sumusuporta ng InnoDB, marahil ay panahon na para sa isang pagtataas ng uri.",
+ 'config-mysql-engine-help' => "Ang '''InnoDB''' ay ang halos palaging pinaka mainam na mapipili, dahil mayroon itong mabuting suporta ng pagkakasundu-sundo.
+
+Maaaring mas mabilis ang '''MyISAM''' sa mga pagluluklok na pang-isahang tagagamit o mababasa lamang.
+May gawi ang mga kalipunan ng dato ng MyISAM na masira nang mas madalas kaysa sa mga kalipunan ng dato ng InnoDB.",
'config-mysql-charset' => 'Pangkat ng panitik ng kalipunan ng dato:',
'config-mysql-binary' => 'Binaryo',
'config-mysql-utf8' => 'UTF-8',
+ 'config-mysql-charset-help' => "Sa '''gawi na binaryo''', iniimbak ng MediaWiki ang tekstong UTF-8 sa kalipunan ng dato sa loob ng mga hanay na binaryo.
+Mas kapaki-pakinabang ito kaysa sa gawi na UTF-8 ng MySQL, at nagpapahintulot sa iyo upang magamit ang buong kasaklawan ng mga panitik ng Unikodigo.
+
+Sa ''gawi na UTF-8''', malalaman ng MySQL kung sa anong pangkat ng panitik nakapaloob ang iyong dato, at angkop na makakapagharap at makapapagpalit nito, subalit hindi ka nito papayagan na mag-imbak ng mga panitik na nasa itaas ng [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes Basic Multilingual Plane] o Saligang Tapyas na Pangmaramihang Wika.",
+ 'config-ibm_db2-low-db-pagesize' => "Ang kalipunan mo ng dato na DB2 ay mayroong isang likas na nakatakdang puwang ng talahanayan na mayroong hindi sapat na sukat ng pahina. Ang sukat ng pahina ay dapat na maging '''32K''' o mas mataas.",
'config-site-name' => 'Pangalan ng wiki:',
'config-site-name-help' => "Lilitaw ito sa bareta ng pamagat ng pantingin-tingin at sa samu't saring ibang mga lugar.",
'config-site-name-blank' => 'Magpasok ng isang pangalan ng sityo.',
'config-ns-site-name' => 'Katulad ng sa pangalan ng wiki: $1',
'config-ns-other' => 'Iba pa (tukuyin)',
'config-ns-other-default' => 'Wiki Ko',
+ 'config-project-namespace-help' => 'Bilang pagsunod sa halimbawa ng Wikipedia, maraming mga wiki ang nagpapanatili ng kanilang mga pahina ng patakaran na nakahiwalay magmula sa kanilang mga pahina ng nilalaman, na nasa loob ng isang "\'\'\'puwang na pampangalan ng proyekto\'\'\'".
+Ang lahat ng mga pamagat ng pahina na nasa loob ng puwang ng pangalang ito ay nagsisimula na mayroong isang partikular na unlapi, na maaari mong tukuyin dito.
+Sa nakaugalian, ang unlaping ito ay hinango mula sa pangalan ng wiki, subalit hindi ito maaaring maglaman ng mga panitik ng palabantasan na katulad ng "#" o ":".',
+ 'config-ns-invalid' => 'Ang tinukoy na puwang ng pangalan na "<nowiki>$1</nowiki>" ay hindi katanggap-tanggap.
+Tumukoy ng isang ibang puwang ng pangalan ng proyekto.',
+ 'config-ns-conflict' => 'Ang tinukoy na puwang ng pangalan na "<nowiki>$1</nowiki>" ay sumasalungat sa isang likas na nakatakdang puwang ng pangalan ng MediaWiki.
+Tumukoy ng isang ibang puwang ng pangalan ng proyekto.',
'config-admin-box' => 'Akawnt ng tagapangasiwa',
'config-admin-name' => 'Pangalan mo:',
'config-admin-password' => 'Hudyat:',
'config-admin-password-confirm' => 'Hudyat uli:',
+ 'config-admin-help' => 'Ipasok dito ang mas ninanais mong pangalan ng tagagamit, bilang halimbawa na ang "Joe Bloggs".
+Ito ang pangalang gagamitin mo upang lumagdang papasok sa wiki.',
'config-admin-name-blank' => 'Magpasok ng isang pangalan ng tagagamit na tagapangasiwa.',
'config-admin-name-invalid' => 'Ang tinukoy na pangalan ng tagagamit na "<nowiki>$1</nowiki>" ay hindi tanggap.
Tumukoy ng ibang pangalan ng tagagamit.',
'config-admin-password-same' => 'Ang hudyat ay hindi dapat na katulad ng pangalan ng tagagamit.',
'config-admin-password-mismatch' => 'Hindi magkatugma ang ipinasok mong dalawang mga hudyat.',
'config-admin-email' => 'Tirahan ng e-liham:',
+ 'config-admin-email-help' => 'Magpasok dito ng isang tirahan ng e-liham upang mapahintulutan kang makatanggap ng e-liham mula sa iba pang mga tagagamit sa ibabaw ng wiki, itakdang muli ang hudyat mo, at mapabatiran ng mga pagbabago sa mga pahinang nasa ibabaw ng iyong tala ng mga binabantayan. Maiiwanan mo na walang laman ang hanay na ito.',
'config-admin-error-user' => 'Panloob na kamalian kapag nililikha ang isang tagapangasiwa na may pangalang "<nowiki>$1</nowiki>".',
'config-admin-error-password' => 'Panloob na kamalian kapag nagtatakda ng isang hudyat na para sa tagapangasiwang "<nowiki>$1</nowiki>": <pre>$2</pre>',
'config-admin-error-bademail' => 'Nagpasok ka ng isang hindi katanggap-tanggap na tirahan ng e-liham.',
'config-subscribe' => 'Tumanggap mula sa [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce talaan ng mga pinadadalhan ng mga nilalabas na mga pabatid].',
+ 'config-subscribe-help' => 'Isang itong tala ng pagliliham na mababa ang dami na ginagamit para sa pagpapakawala ng mga pahayag, kabilang na ang mahahalagang mga pahayag na pangkatiwasayan. Dapat kang magpasipi nito at isapanahon ang iyong nakaluklok na MediaWiki kapag lumalabas ang bagong mga bersiyon.',
+ 'config-subscribe-noemail' => 'Sinubukan mong magpasipi sa tala ng nililihaman ng pagpapakawala ng mga pahayag na hindi nagbibigay ng isang tirahan ng -eliham. Paki magbigay ng isang tirahan ng e-liham kung nais mong magpasipi sa listahan ng pagliliham.',
'config-almost-done' => 'Halos tapos ka na!
Maaari mo ngayong laktawan ang natitira pang pag-aayos at iluklok na ang wiki ngayon.',
'config-optional-continue' => 'Magtanong sa akin ng marami pang mga tanong.',
'config-profile-no-anon' => 'Kailangan ang paglikha ng akawnt',
'config-profile-fishbowl' => 'Pinahintulutang mga patnugot lamang',
'config-profile-private' => 'Pribadong wiki',
+ 'config-profile-help' => "Pinaka mahusay ang pagtakbo ng mga Wiki kapag pinapahintulutan mo ang pinaka maraming mga tao na makapamatnugot ng mga ito hanggang sa maaari.
+Sa loob ng MediaWiki, maginhawang masusuring muli ang kamakailang mga pagbabago, at mapanauli sa dati ang anumang nasira na nagawa ng isang walang muwang o may masamang hangarin na mga tagagamit.
+
+Subalit, marami ang nakatagpo na nagagamit ang MediaWiki sa loob ng malawak na sari-saring mga gampanin, at kung minsan ay hindi madaling makumbinsi ang lahat ng mga tao hinggil sa kapakinabangan ng kaparaanan ng wiki.
+Kung kaya't nasa iyo ang pagpili.
+
+Ang isang '''{{int:config-profile-wiki}}''' ay nagpapahintulot sa sinuman upang makapagbago, na hindi kailangan ang paglagdang papasok.
+Ang isang wiki na mayroong '''{{int:config-profile-no-anon}}''' ay nagbibigay ng karagdagang pananagutan, subalit maaaring pumigil sa nagkataon lamang na mga tagapag-ambag.
+
+Ang tagpo na '''{{int:config-profile-fishbowl}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang makapamatnugot.
+Ang isang '''{{int:config-profile-private}}''' ay nagpapahintulot lamang sa pinayagang mga tagagamit na makatingin ng mga pahina, na kapiling ang pangkat na pinayagang makapamatnugot.
+
+Ang mas masasalimuot na mga kaayusan ng mga karapatan ng tagagamit ay makukuha pagkaraan ng pagluluklok, tingnan ang [//www.mediawiki.org/wiki/Manual:User_rights may kaugnayang kinamay na lahok].",
'config-license' => 'Karapatang-ari at lisensiya:',
'config-license-none' => 'Walang talababa ng lisensiya',
'config-license-cc-by-sa' => 'Malikhaing Pangkaraniwang Pagtukoy Pamamahaging Magkatulad',
+ 'config-license-cc-by' => 'Atribusyon ng Creative Commons',
'config-license-cc-by-nc-sa' => 'Malikhaing Pangkaraniwang Pagtukoy Hindi-Pangkalakal Pamamahaging Magkatulad',
+ 'config-license-cc-0' => 'Sero na Creative Commons (Nasasakop ng Madla)',
+ 'config-license-gfdl' => 'Lisensiyang 1.3 ng Malayang Dokumentasyon ng GNU o mas lalong huli',
'config-license-pd' => 'Nasasakupan ng Madla',
'config-license-cc-choose' => 'Pumili ng isang pasadyang Lisensiya ng Malikhaing mga Pangkaraniwan',
+ 'config-license-help' => "Maraming mga pangmadlang wiki ang naglalagay ng lahat ng mga ambag sa ilalim ng [http://freedomdefined.org/Definition lisensiyang malaya].
+Nakakatulong ito sa paglikha ng isang diwa ng pagmamay-ari ng pamayanan at nakapanghihikayat ng ambag na pangmahabang panahon.
+Sa pangkalahatan, hindi kailangan ang isang wiking pribado o pangsamahan.
+
+Kung nais mong magamit ang teksto magmula sa Wikipedia, at nais mong makatanggap ang Wikipedia ng tekstong kinopya magmula sa wiki mo, dapat mong piliin ang '''Creative Commons Attribution Share Alike''' (Pagbanggit na Pinagsasaluhang Magkatulad ng Malikhaing Pangkaraniwan).
+
+Dating ginamit ng Wikipedia ang Lisensiya ng Kasulatang Malaya ng GNU (GNU Free Documentation License o GFDL).
+Isang katanggap-tanggap na lisensiya ang GFDL, subalit mahirap itong maunawaan.
+Mahirap din ang paggamit na muli ng nilalaman na nasa ilalim ng GFDL.",
'config-email-settings' => 'Mga katakdaan ng e-liham',
'config-enable-email' => 'Paganahin ang palabas na e-liham',
+ 'config-enable-email-help' => 'Kung nais mong gumana ang e-liham, ang mga katakdaan ng liham ng [http://www.php.net/manual/en/mail.configuration.php PHP] ay kailangang maging wasto ang pagkakaayos.
+Kung ayaw mo nang anumang mga katampukan ng e-liham, maaari mong huwag paganahin ang mga ito rito.',
'config-email-user' => 'Paganahin ang tagagamit-sa-tagagamit na e-liham',
'config-email-user-help' => 'Payagan ang lahat ng mga tagagamit na magpadala ng e-liham sa bawat isa kapag pinagana nila ito sa kanilang mga nais.',
'config-email-usertalk' => 'Paganahin ang pabatid na pampahina ng usapan ng tagagamit',
'config-email-watchlist' => 'Paganahin ang pabatid ng talaan ng bantayan',
'config-email-watchlist-help' => 'Payagan ang mga tagagamit na tumanggap ng mga pabatid tungkol sa kanilang binabantayang mga pahina kapag pinagana nila ito sa kanilang mga nais.',
'config-email-auth' => 'Paganahin ang pagpapatunay ng e-liham',
+ 'config-email-auth-help' => "Kapag pinagagana ang mapipiling ito, dapat tiyakin ng mga tagagamit ang kanilang tirahan ng e-liham na ginagamit ang isang kawing na ipinadala sa kanila tuwing itinatakda o binabago nila ito.
+Tanging napatunayang mga tirahan ng e-liham lamang ang makakatanggap ng mga e-liham magmula sa ibang mga tagagamit o makakapagbago ng mga e-liham ng pagpapabatid.
+'''Iminumungkahi''' ang mapipiling katakdaan na ito para sa mga wiking pangmadla dahil sa maaaring mangyaring pagmamalabis ng mga katampukan ng e-liham.",
'config-email-sender' => 'Pabalik na tirahan ng e-liham:',
+ 'config-email-sender-help' => 'Ipasok ang tirahan ng e-liham na gagamitin bilang tirahang pagsasaulian ng e-liham na papalabas.
+Dito ang kung saan ipapadala ang mga pagtalbog.
+Maraming mga tagapaghain ng liham ang nangangailangan ng kahit na bahagi lamang ng pangalan ng nasasakupan upang maging katanggap-tanggap.',
'config-upload-settings' => 'Mga pagkakarga ng mga larawan at talaksan',
'config-upload-enable' => 'Paganahin ang pagkakarga ng talaksan',
+ 'config-upload-help' => 'Ang paitaas na mga pagkakarga ng mga talaksan ay maaaring makapaglantad ng iyong tagapaghain sa mga panganib na pangkatiwasayan.
+Para sa mas marami pang kabatiran, basahin ang [//www.mediawiki.org/wiki/Manual:Security seksiyon ng katiwasayan] sa loob ng gabay.
+
+Upang mapagana ang paitaas na mga pagkakarga ng talaksan, baguhin ang gawi roon sa subdirektoryo ng <code>mga imahe</code> sa ilalim ng ugat na direktoryo ng MediaWiki upang ang tagapaghain ng kasaputan ay makapagsulat dito.
+Pagkaraan ay paganahin ang pipiliing ito.',
'config-upload-deleted' => 'Direktoryo para sa binurang mga talaksan:',
'config-upload-deleted-help' => 'Pumili ng isang direktoryong pagsusupnayan ng naburang mga talaksan.
Ideyal na dapat itong hindi mapupuntahan mula sa web.',
'config-logo' => 'URL ng logo:',
+ 'config-logo-help' => 'Ang likas na nakatakdang pabalat ng MediaWiki ay nagsasama ng puwang para sa isang logong 135x160 ang piksel na nasa itaas ng menu ng panggilid na bareta.
+Magkargang papaitaas ng isang imahe na mayroong naaangkop na sukat, at ipasok dito ang URL.
+
+Kung ayaw mo ng isang logo, iwanang walang laman ang kahong ito.',
'config-instantcommons' => 'Paganahin ang Mga Pangkaraniwang Biglaan',
+ 'config-instantcommons-help' => 'Ang [//www.mediawiki.org/wiki/InstantCommons Instant Commons] ay isang tampok na nagpapahintulot sa mga wiki upang gumamit ng mga imahe, mga tunog at iba pang mga midyang matatagpuan sa pook ng [//commons.wikimedia.org/ Wikimedia Commons].
+Upang magawa ito, nangangailangan ang MediaWiki ng pagka nakakapunta sa Internet.
+
+Para sa mas marami pang kabatiran hinggil sa tampok na ito, kabilang na ang mga tagubilin sa kung paano ito itakda para sa mga wiki na bukod pa kaysa sa Wikimedia Commons, sumangguni sa [//mediawiki.org/wiki/Manual:$wgForeignFileRepos gabay].',
'config-cc-error' => 'Hindi nagbigay ng resulta ang pampili ng lisensiya ng Malikhaing Pangkaraniwan.
Ipasok na kinakamay ang pangalan ng lisensiya.',
'config-cc-again' => 'Pumili uli...',
'config-cc-not-chosen' => 'Piliin kung anong lisensiya ng Malikhaing mga Pangkaraniwan ang nais mo at pindutin ang "magpatuloy".',
'config-advanced-settings' => 'Mas masulong na pagkakaayos',
'config-cache-options' => 'Mga katakdaan para sa pagtatago ng bagay:',
+ 'config-cache-help' => 'Ang pagtatago ng bagay ay ginagamit upang mapainam ang tulin ng MediaWiki sa pamamagitan ng pagtatago ng madalas gamiting dato.
+Ang mga pook na bahagya hanggang malalaki ang sukat ay labis na hinihikayat na paganahin ito, at ang mga pook na maliliit ay makakakita rin ng mga kapakinabangan.',
+ 'config-cache-none' => 'Walang pagtatago (tinanggal ang katungkulan, subalit maaaring maapektuhan ang tulin sa mas malalaking mga pook ng wiki)',
+ 'config-cache-accel' => 'Pagtatago ng bagay ng PHP (APC, XCache o WinCache)',
+ 'config-cache-memcached' => 'Gamitin ang Pagtatago sa Alaala (Memcached) (nangangailangan ng karagdagang kaayusan ng pagkakahanda at pagsasaayos)',
'config-memcached-servers' => 'Mga tagapaghaing itinago sa alaala:',
+ 'config-memcached-help' => 'Listahan ng mga tirahan ng IP na gagamitin para sa Memcached o Itinagong Alaala.
+Dapat na tukuyin na isa sa bawat guhit at tukuyin ang daungang gagamitin. Bilang halimbawa:
+ 127.0.0.1:11211
+ 192.168.1.25:1234',
'config-memcache-needservers' => 'Pinili mo ang Memcached bilang uri mo ng taguan ngunit hindi tumukoy ng anumang mga tagapaghain.',
'config-memcache-badip' => 'Nagpasok ka ng isang hindi tanggap na tirahan ng IP para sa Memcached: $1.',
'config-memcache-noport' => 'Hindi ka tumukoy ng isang daungan na gagamitin para sa tagapaghain ng Memcached: $1.
Kung hindi mo alam ang daungan, ang likas na nakatakda ay 11211.',
'config-memcache-badport' => 'Ang bilang ng daungan ng Memcached ay dapat na nasa pagitan ng $1 at $2.',
'config-extensions' => 'Mga dugtong',
+ 'config-extensions-help' => 'Ang mga dugtong na nakalista sa ibabaw ay napansin sa loob ng iyong direktoryo ng <code>./extensions</code>.
+
+Maaaring mangailangan ang mga ito ng karagdagang kaayusan, subalit mapapagana mo ngayon ang mga ito',
+ 'config-install-alreadydone' => "'''Babala:''' Tila nailuklok mo na ang MediaWiki at tinatangka mong iluklok ito ulit.
+Paki magpatuloy sa susunod na pahina.",
+ 'config-install-begin' => 'Sa pamamagitan ng pagpindot sa "{{int:config-continue}}", sisimulan mo ang pagluluklok ng MediaWiki.
+Kung nais mo paring gumawa ng mga pagbabago, paki pindutin ang bumalik.',
'config-install-step-done' => 'nagawa na',
'config-install-step-failed' => 'nabigo',
'config-install-extensions' => 'Isinasama ang mga karugtong',
'config-install-database' => 'Inihahanda ang kalipunan ng dato',
+ 'config-install-schema' => 'Nililikha ang panukala',
'config-install-pg-schema-not-exist' => 'Hindi umiiral ang panukala ng PostgreSQL.',
'config-install-pg-schema-failed' => 'Nabigo ang paglikha ng mga talahanayan.
Tiyakin na ang tagagamit na "$1" ay maaaring makasulat sa balangkas na "$2".',
'config-install-pg-plpgsql' => 'Sumusuri ng wikang PL/pgSQL',
'config-pg-no-plpgsql' => 'Kailangan mong magtalaga ng wikang PL/pgSQL sa loob ng kalipunan ng datong $1',
'config-pg-no-create-privs' => 'Ang tinukoy mong akawnt para sa pagtatalaga ay walang sapat na mga pribilehiyo upang makalikha ng isang akawnt.',
+ 'config-pg-not-in-role' => 'Umiiral na ang akawnt na tinukoy mo para sa tagagamit ng sangkasaputan.
+Ang tinukoy mong akawnt para sa pagluluklok ay hindi isang tagagamit na super at hindi isang kasapi sa gampanin ng tagagamit ng sangkasaputan, kung kaya\'t hindi nito nagawang makalikha ng mga bagay na pag-aari ng tagagamit ng sangkasaputan.
+
+Sa kasalukuyan, nangangailangan ang MediaWiki na ang mga talahanayan ay maging pag-aari ng tagagamit ng sangkasaputan. Paki tumukoy ng isa pang pangalan ng akawnt na pangsangkasaputan, o pindutin ang "bumalik" at tumukoy ng isang tagagamit na may kaangkupang pribilehiyo ng pagluluklok.',
'config-install-user' => 'Nililikha ang tagagamit ng kalipunan ng dato',
'config-install-user-alreadyexists' => 'Umiiral na ang tagagamit na "$1"',
'config-install-user-create-failed' => 'Nabigo ang paglikha ng tagagamit na "$1": $2',
'config-install-user-grant-failed' => 'Nabigo ang pagbibigay ng pahintulot sa tagagamit na "$1": $2',
'config-install-user-missing' => 'Hindi umiiral ang tinukoy na tagagamit na si "$1".',
+ 'config-install-user-missing-create' => 'Hindi umiiral ang tinukoy na tagagamit na si "$1".
+Paki lagitikin ang nasa ibabang kahong natsetsekan na "likhain ang akawnt" kung nais mong likhain ito.',
'config-install-tables' => 'Nililikha ang mga talahanayan',
'config-install-tables-exist' => "'''Babala''': Tila umiiral na ang mga talahanayan ng MediaWiki.
Nilalaktawan ang paglikha.",
Nilalaktawan ang likas na nakatakdang talaan.",
'config-install-stats' => 'Sinisimulan ang estadistika',
'config-install-keys' => 'Ginagawa ang lihim na mga susi',
+ 'config-insecure-keys' => "'''Babala:''' Nalikha ang {{PLURAL:$2|A secure key|ligtas na mga susi}} ($1) habang ang pagluluklok {{PLURAL:$2|ay|ay}} hindi pa lubos na ligtas. Isaalang-alang ang kinakamay na pagbago {{PLURAL:$2|nito|ng mga ito}}.",
'config-install-sysop' => 'Nililikha ang akawnt ng tagagamit na tagapangasiwa',
'config-install-subscribe-fail' => 'Hindi nagawang magpasipi mula sa mediawiki-announce: $1',
'config-install-subscribe-notpossible' => 'Hindi nakalagak ang cURL at hindi makukuha ang allow_url_fopen',
Kapag nagawa na iyan, maaari ka nang '''[$2 pumasok sa wiki mo]'''.",
'config-download-localsettings' => 'Ikargang paibaba ang LocalSettings.php',
'config-help' => 'saklolo',
+ 'config-nofile' => 'Hindi matagpuan ang talaksang "$1". Binura na ba ito?',
'mainpagetext' => "'''Matagumpay na ininstala ang MediaWiki.'''",
'mainpagedocfooter' => "Silipin ang [//meta.wikimedia.org/wiki/Help:Contents Patnubay sa Tagagamit] (''\"User's Guide\"'') para sa kaalaman sa paggamit ng wiking ''software''.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Tala ng mga pinadadalhan ng liham ng MediaWiki]",
);
-/** Turkish (Türkçe) */
+/** толышә зывон (толышә зывон)
+ * @author Erdemaslancan
+ */
+$messages['tly'] = array(
+ 'config-page-options' => 'Кукон',
+);
+
+/** Turkish (Türkçe)
+ */
$messages['tr'] = array(
'mainpagetext' => "'''MediaWiki başarı ile kuruldu.'''",
'mainpagedocfooter' => 'Viki yazılımının kullanımı hakkında bilgi almak için [//meta.wikimedia.org/wiki/Help:Contents kullanıcı rehberine] bakınız.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki'nıñ yaña versiäläre turında xäbärlär yazdırıp alu].",
);
-/** Udmurt (Удмурт)
+/** Udmurt (удмурт)
* @author Andrewboltachev
*/
$messages['udm'] = array(
'config-sidebar' => '* [//www.mediawiki.org Сайт MediaWiki]
* [//www.mediawiki.org/wiki/Help:Contents/uk Керівництво користувача]
* [//www.mediawiki.org/wiki/Manual:Contents/uk Керівництво адміністратора]
-* [//www.mediawiki.org/wiki/Manual:FAQ/uk FAQ]',
+* [//www.mediawiki.org/wiki/Manual:FAQ/uk FAQ]', # Fuzzy
'config-env-good' => 'Перевірку середовища успішно завершено.
Ви можете встановити MediaWiki.',
'config-env-bad' => 'Було проведено перевірку середовища. Ви не можете встановити MediaWiki.',
'mainpagetext' => "'''میڈیاوکی کو کامیابی سے چالو کردیا گیا ہے۔.'''",
);
-/** Uzbek (Oʻzbekcha) */
+/** Uzbek (oʻzbekcha)
+ */
$messages['uz'] = array(
'mainpagetext' => "'''MediaWiki muvaffaqiyatli o'rnatildi.'''",
'mainpagedocfooter' => "Wiki dasturini ishlatish haqida ma'lumot olish uchun [//meta.wikimedia.org/wiki/Help:Contents Foydalanuvchi qo'llanmasi] sahifasiga murojaat qiling.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailing list anunsi MediaWiki]",
);
-/** Veps (Vepsän kel’)
+/** Veps (vepsän kel’)
* @author Игорь Бродский
*/
$messages['vep'] = array(
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Danh sách gửi thư về việc phát hành MediaWiki]',
);
-/** Volapük (Volapük) */
+/** Volapük (Volapük)
+ */
$messages['vo'] = array(
'mainpagetext' => "'''El MediaWiki pestiton benosekiko.'''",
'mainpagedocfooter' => 'Konsultolös [//meta.wikimedia.org/wiki/Help:Contents Gebanageidian] ad tuvön nünis dö geb programema vükik.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Potalised tefü fomams nulik ela MediaWiki]',
);
-/** Võro (Võro) */
+/** Võro (Võro)
+ */
$messages['vro'] = array(
'mainpagetext' => "'''MediaWiki tarkvara paika säet.'''",
'mainpagedocfooter' => 'Vikitarkvara pruukmisõ kotsilõ loeq mano:
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Wolof (Wolof) */
+/** Wolof (Wolof)
+ */
$messages['wo'] = array(
'mainpagetext' => "'''Campug MediaWiki gi sotti na . '''",
'mainpagedocfooter' => 'Saytul [//meta.wikimedia.org/wiki/Ndimbal:Ndefu Gindikaayu jëfandikukat bi] ngir yeneeni xibaar ci jëfandiku gu tëriin gi.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 发布邮件列表]',
);
-/** Kalmyk (Хальмг)
+/** Kalmyk (хальмг)
* @author Huuchin
*/
$messages['xal'] = array(
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
);
-/** Cantonese (粵語) */
+/** Cantonese (粵語)
+ */
$messages['yue'] = array(
'mainpagetext' => "'''MediaWiki已經裝好。'''",
'mainpagedocfooter' => '參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶指引](英),裏面有資料講點用wiki軟件。
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件名單](英)',
);
-/** Zeeuws (Zeêuws) */
+/** Zeeuws (Zeêuws)
+ */
$messages['zea'] = array(
'mainpagetext' => "'''De installaotie van MediaWiki is geslaegd.'''",
'mainpagedocfooter' => "Raedpleeg de [//meta.wikimedia.org/wiki/ZEA_Ulpe:Inhoudsopgaeve andleidieng] voe informatie over 't gebruuk van de wikisoftware.
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailienglieste voe ankondigiengen van nieuwe versies]",
);
-/** Simplified Chinese (中文(简体))
+/** Simplified Chinese (中文(简体))
* @author Hydra
* @author Hzy980512
* @author Liangent
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]',
);
-/** Traditional Chinese (中文(繁體))
+/** Traditional Chinese (中文(繁體))
* @author Hzy980512
* @author Liangent
* @author Mark85296341
'config-no-db' => '找不到合適的數據庫驅動!您需要為PHP安裝數據庫驅動。目前支持以下數據庫:$1。
如果您正在使用共享主機,請向您的主機提供商申請安裝合適的數據庫驅動。如果您通過自行編譯安裝的PHP,請對其進行重新配置以啟用數據庫客戶端,例如使用<code>./configure --with-mysql</code>。如果您通過Debian或Ubuntu包安裝的PHP,您還需要安裝php5-mysql模塊。',
+ 'config-outdated-sqlite' => "'''警告''':您已安裝SQLite $1,但是它的版本低於最低要求版本$2。因此您無法選擇SQLite。",
'config-no-fts3' => "'''警告''':已編譯的SQLite不包含[//sqlite.org/fts3.html FTS3模塊],後台搜索功能將不可用。",
'config-register-globals' => "'''警告:PHP的<code>[http://php.net/register_globals register_globals]</code>選項被啟用。請盡量禁用該功能,'''雖然不會影響MediaWiki的運行,但您的服務器會被暴露給潛在的安全漏洞。",
'config-magic-quotes-runtime' => "'''致命錯誤:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]被啟用!'''
'config-pcre-no-utf8' => "'''致命錯誤''':PHP的PCRE模塊在編譯時可能沒有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。",
'config-memory-raised' => 'PHP的內存使用上限<code>memory_limit</code>為$1,自動提升到$2。',
'config-memory-bad' => "'''警告:'''PHP的內存使用上限<code>memory_limit</code>為$1。該設定可能過低,並導致安裝失敗!",
+ 'config-ctype' => "'''毀滅性錯誤''':PHP必須有[http://www.php.net/manual/en/ctype.installation.php Ctype 擴展]來支持編譯。",
'config-xcache' => '[http://xcache.lighttpd.net/ XCache]已安裝',
'config-apc' => '[http://www.php.net/apc APC]已安裝',
'config-wincache' => '[http://www.iis.net/download/WinCacheForPhp WinCache]已安裝',
'config-no-cache' => "'''警告:'''找不到[http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache],無法啟用對象緩存。
Object caching is not enabled.",
+ 'config-mod-security' => "'''警告''':您的服務器已啟動[http://modsecurity.org/ mod_security]。若其配置錯誤, 會導致MediaWiki和其他軟件的錯誤並允許用戶任意發布內容。如果您遇到任何錯誤,請查閱[http://modsecurity.org/documentation/ mod_security文檔]或聯繫您的客服。",
'config-diff3-bad' => '找不到GNU diff3。',
'config-imagemagick' => '已找到ImageMagick:<code>$1</code>。如果你啟用了上傳功能,縮略圖功能也將被啟用。',
'config-gd' => '已找到內建的GD圖形庫。如果你啟用了上傳功能,縮略圖功能也將被啟用。',
'config-suhosin-max-value-length' => 'Suhosin已經安裝並將GET請求的參數長度限制在$1字節。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能會被降低。如果可能,請在php.ini中將suhosin.get.max_value_length設為1024或更高值,並在LocalSettings.php中將$wgResourceLoaderMaxQueryLength設為同一值。',
'config-db-type' => '資料庫類型:',
'config-db-host' => '資料庫主機:',
+ 'config-db-host-help' => '如果您的數據庫在別的服務器上,請在這裡輸入它的域名或IP地址。
+
+如果您在使用共享網站套餐,您的網站商應該已在他們的控制面板中給您數據庫信息了。
+
+如果您在Windows中安裝並且使用MySQL,“localhost”可能無效。如果確實無效,請輸入“127.0.0.1”作為IP地址。
+
+如果您在使用PostgreSQL,並且要用Unix socket來連接,請留空。',
'config-db-host-oracle' => '資料庫的 TNS:',
'config-db-host-oracle-help' => '請輸入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地連接名],並確保tnsnames.ora文件對本安裝程序可見。<br />如果您使用的客戶端庫為10g或更新的版本,您還可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡單連接名方法](easy connect naming method)。',
'config-db-wiki-settings' => '識別這個 Wiki',
* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題解答]
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]',
);
-
array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase.sql' ),
// 1.20
- array( 'addTable', 'config', 'patch-config.sql' ),
array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
array( 'addField', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id.sql' ),
array( 'addIndex', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id-index.sql' ),
array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ufg_group-length-increase.sql' ),
//1.20
- array( 'addTable', 'config', 'patch-config.sql' ),
array( 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ),
array( 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ),
array( 'dropField', 'category', 'cat_hidden', 'patch-cat_hidden.sql' ),
array( 'addTable', 'module_deps', 'patch-module_deps.sql' ),
array( 'addTable', 'uploadstash', 'patch-uploadstash.sql' ),
array( 'addTable', 'user_former_groups','patch-user_former_groups.sql' ),
- array( 'addTable', 'config', 'patch-config.sql' ),
array( 'addTable', 'external_user', 'patch-external_user.sql' ),
# Needed before new field
array( 'addPgField', 'ipblocks', 'ipb_enable_autoblock', 'SMALLINT NOT NULL DEFAULT 1' ),
array( 'addPgField', 'ipblocks', 'ipb_parent_block_id', 'INTEGER DEFAULT NULL REFERENCES ipblocks(ipb_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED' ),
array( 'addPgField', 'filearchive', 'fa_deleted', 'SMALLINT NOT NULL DEFAULT 0' ),
+ array( 'addPgField', 'filearchive', 'fa_sha1', "TEXT NOT NULL DEFAULT ''" ),
array( 'addPgField', 'logging', 'log_deleted', 'SMALLINT NOT NULL DEFAULT 0' ),
array( 'addPgField', 'logging', 'log_id', "INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('logging_log_id_seq')" ),
array( 'addPgField', 'logging', 'log_params', 'TEXT' ),
array( 'addPgField', 'archive', 'ar_sha1', "TEXT NOT NULL DEFAULT ''" ),
array( 'addPgField', 'uploadstash', 'us_chunk_inx', "INTEGER NULL" ),
array( 'addPgField', 'job', 'job_timestamp', "TIMESTAMPTZ" ),
+ array( 'addPgField', 'job', 'job_random', "INTEGER NOT NULL DEFAULT 0" ),
+ array( 'addPgField', 'job', 'job_token', "TEXT NOT NULL DEFAULT ''" ),
+ array( 'addPgField', 'job', 'job_token_timestamp', "TIMESTAMPTZ" ),
+ array( 'addPgField', 'job', 'job_sha1', "TEXT NOT NULL DEFAULT ''" ),
# type changes
array( 'changeField', 'archive', 'ar_deleted', 'smallint', '' ),
array( 'addPgIndex', 'logging', 'logging_page_id_time', '(log_page,log_timestamp)' ),
array( 'addPgIndex', 'iwlinks', 'iwl_prefix_title_from', '(iwl_prefix, iwl_title, iwl_from)' ),
array( 'addPgIndex', 'job', 'job_timestamp_idx', '(job_timestamp)' ),
+ array( 'addPgIndex', 'job', 'job_sha1', '(job_sha1)' ),
+ array( 'addPgIndex', 'job', 'job_cmd_token', '(job_cmd, job_token, job_random)' ),
+ array( 'addPgIndex', 'filearchive', 'fa_sha1', '(fa_sha1)' ),
array( 'checkIndex', 'pagelink_unique', array(
array('pl_from', 'int4_ops', 'btree', 0),
array( 'modifyField', 'user_former_groups', 'ufg_group', 'patch-ug_group-length-increase.sql' ),
// 1.20
- array( 'addTable', 'config', 'patch-config.sql' ),
array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
array( 'addField', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id.sql' ),
array( 'addIndex', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id-index.sql' ),
/**
* The main sequence of page names. These will be displayed in turn.
- * To add one:
- * * Add it here
- * * Add a config-page-<name> message
- * * Add a WebInstaller_<name> class
+ *
+ * To add a new installer page:
+ * * Add it to this WebInstaller::$pageSequence property
+ * * Add a "config-page-<name>" message
+ * * Add a "WebInstaller_<name>" class
* @var array
*/
public $pageSequence = array(
+++ /dev/null
-<?php
-/**
- * Job to fix double redirects after moving a page.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job to fix double redirects after moving a page
- *
- * @ingroup JobQueue
- */
-class DoubleRedirectJob extends Job {
- var $reason, $redirTitle;
-
- /**
- * @var User
- */
- static $user;
-
- /**
- * Insert jobs into the job queue to fix redirects to the given title
- * @param $reason String: the reason for the fix, see message "double-redirect-fixed-<reason>"
- * @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed
- * @param $destTitle bool Not used
- */
- public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
- # Need to use the master to get the redirect table updated in the same transaction
- $dbw = wfGetDB( DB_MASTER );
- $res = $dbw->select(
- array( 'redirect', 'page' ),
- array( 'page_namespace', 'page_title' ),
- array(
- 'page_id = rd_from',
- 'rd_namespace' => $redirTitle->getNamespace(),
- 'rd_title' => $redirTitle->getDBkey()
- ), __METHOD__ );
- if ( !$res->numRows() ) {
- return;
- }
- $jobs = array();
- foreach ( $res as $row ) {
- $title = Title::makeTitle( $row->page_namespace, $row->page_title );
- if ( !$title ) {
- continue;
- }
-
- $jobs[] = new self( $title, array(
- 'reason' => $reason,
- 'redirTitle' => $redirTitle->getPrefixedDBkey() ) );
- # Avoid excessive memory usage
- if ( count( $jobs ) > 10000 ) {
- Job::batchInsert( $jobs );
- $jobs = array();
- }
- }
- Job::batchInsert( $jobs );
- }
-
- function __construct( $title, $params = false, $id = 0 ) {
- parent::__construct( 'fixDoubleRedirect', $title, $params, $id );
- $this->reason = $params['reason'];
- $this->redirTitle = Title::newFromText( $params['redirTitle'] );
- }
-
- /**
- * @return bool
- */
- function run() {
- if ( !$this->redirTitle ) {
- $this->setLastError( 'Invalid title' );
- return false;
- }
-
- $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
- if ( !$targetRev ) {
- wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
- return true;
- }
- $content = $targetRev->getContent();
- $currentDest = $content->getRedirectTarget();
- if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
- wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" );
- return true;
- }
-
- # Check for a suppression tag (used e.g. in periodically archived discussions)
- $mw = MagicWord::get( 'staticredirect' );
- if ( $content->matchMagicWord( $mw ) ) {
- wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" );
- return true;
- }
-
- # Find the current final destination
- $newTitle = self::getFinalDestination( $this->redirTitle );
- if ( !$newTitle ) {
- wfDebug( __METHOD__.": skipping: single redirect, circular redirect or invalid redirect destination\n" );
- return true;
- }
- if ( $newTitle->equals( $this->redirTitle ) ) {
- # The redirect is already right, no need to change it
- # This can happen if the page was moved back (say after vandalism)
- wfDebug( __METHOD__.": skipping, already good\n" );
- }
-
- # Preserve fragment (bug 14904)
- $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
- $currentDest->getFragment(), $newTitle->getInterwiki() );
-
- # Fix the text
- $newContent = $content->updateRedirect( $newTitle );
-
- if ( $newContent->equals( $content ) ) {
- $this->setLastError( 'Content unchanged???' );
- return false;
- }
-
- # Save it
- global $wgUser;
- $oldUser = $wgUser;
- $wgUser = $this->getUser();
- $article = WikiPage::factory( $this->title );
- $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
- $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
- )->inContentLanguage()->text();
- $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
- $wgUser = $oldUser;
-
- return true;
- }
-
- /**
- * Get the final destination of a redirect
- *
- * @param $title Title
- *
- * @return bool if the specified title is not a redirect, or if it is a circular redirect
- */
- public static function getFinalDestination( $title ) {
- $dbw = wfGetDB( DB_MASTER );
-
- $seenTitles = array(); # Circular redirect check
- $dest = false;
-
- while ( true ) {
- $titleText = $title->getPrefixedDBkey();
- if ( isset( $seenTitles[$titleText] ) ) {
- wfDebug( __METHOD__, "Circular redirect detected, aborting\n" );
- return false;
- }
- $seenTitles[$titleText] = true;
-
- if ( $title->getInterwiki() ) {
- // If the target is interwiki, we have to break early (bug 40352).
- // Otherwise it will look up a row in the local page table
- // with the namespace/page of the interwiki target which can cause
- // unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
- break;
- }
-
- $row = $dbw->selectRow(
- array( 'redirect', 'page' ),
- array( 'rd_namespace', 'rd_title', 'rd_interwiki' ),
- array(
- 'rd_from=page_id',
- 'page_namespace' => $title->getNamespace(),
- 'page_title' => $title->getDBkey()
- ), __METHOD__ );
- if ( !$row ) {
- # No redirect from here, chain terminates
- break;
- } else {
- $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title, '', $row->rd_interwiki );
- }
- }
- return $dest;
- }
-
- /**
- * Get a user object for doing edits, from a request-lifetime cache
- * @return User
- */
- function getUser() {
- if ( !self::$user ) {
- self::$user = User::newFromName( wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text(), false );
- # FIXME: newFromName could return false on a badly configured wiki.
- if ( !self::$user->isLoggedIn() ) {
- self::$user->addToDatabase();
- }
- }
- return self::$user;
- }
-}
-
+++ /dev/null
-<?php
-/**
- * Old job for notification emails.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Old job used for sending single notification emails;
- * kept for backwards-compatibility
- *
- * @ingroup JobQueue
- */
-class EmaillingJob extends Job {
- function __construct( $title, $params, $id = 0 ) {
- parent::__construct( 'sendMail', Title::newMainPage(), $params, $id );
- }
-
- function run() {
- UserMailer::send(
- $this->params['to'],
- $this->params['from'],
- $this->params['subj'],
- $this->params['body'],
- $this->params['replyto']
- );
- return true;
- }
-
-}
+++ /dev/null
-<?php
-/**
- * Job for notification emails.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job for email notification mails
- *
- * @ingroup JobQueue
- */
-class EnotifNotifyJob extends Job {
-
- function __construct( $title, $params, $id = 0 ) {
- parent::__construct( 'enotifNotify', $title, $params, $id );
- }
-
- function run() {
- $enotif = new EmailNotification();
- // Get the user from ID (rename safe). Anons are 0, so defer to name.
- if( isset( $this->params['editorID'] ) && $this->params['editorID'] ) {
- $editor = User::newFromId( $this->params['editorID'] );
- // B/C, only the name might be given.
- } else {
- # FIXME: newFromName could return false on a badly configured wiki.
- $editor = User::newFromName( $this->params['editor'], false );
- }
- $enotif->actuallyNotifyOnPageChange(
- $editor,
- $this->title,
- $this->params['timestamp'],
- $this->params['summary'],
- $this->params['minorEdit'],
- $this->params['oldid'],
- $this->params['watchers']
- );
- return true;
- }
-
-}
/**
* Class to both describe a background job and handle jobs.
- * This queue aspects of this class are now deprecated.
+ * The queue aspects of this class are now deprecated.
*
* @ingroup JobQueue
*/
* removed later on, when the first one is popped.
*
* @param $jobs array of Job objects
- * @deprecated 1.20
+ * @deprecated 1.21
*/
public static function batchInsert( $jobs ) {
return JobQueueGroup::singleton()->push( $jobs );
* large batches of jobs can cause slave lag.
*
* @param $jobs array of Job objects
- * @deprecated 1.20
+ * @deprecated 1.21
*/
public static function safeBatchInsert( $jobs ) {
return JobQueueGroup::singleton()->push( $jobs, JobQueue::QoS_Atomic );
}
+ /**
+ * Pop a job of a certain type. This tries less hard than pop() to
+ * actually find a job; it may be adversely affected by concurrent job
+ * runners.
+ *
+ * @param $type string
+ * @return Job
+ * @deprecated 1.21
+ */
+ public static function pop_type( $type ) {
+ return JobQueueGroup::singleton()->get( $type )->pop();
+ }
+
+ /**
+ * Pop a job off the front of the queue.
+ * This is subject to $wgJobTypesExcludedFromDefaultQueue.
+ *
+ * @return Job or false if there's no jobs
+ * @deprecated 1.21
+ */
+ public static function pop() {
+ return JobQueueGroup::singleton()->pop();
+ }
+
/*-------------------------------------------------------------------------
* Non-static functions
*------------------------------------------------------------------------*/
/**
* Insert a single job into the queue.
* @return bool true on success
- * @deprecated 1.20
+ * @deprecated 1.21
*/
public function insert() {
return JobQueueGroup::singleton()->push( $this );
abstract class JobQueue {
protected $wiki; // string; wiki ID
protected $type; // string; job type
+ protected $order; // string; job priority for pop()
const QoS_Atomic = 1; // integer; "all-or-nothing" job insertions
* @param $params array
*/
protected function __construct( array $params ) {
- $this->wiki = $params['wiki'];
- $this->type = $params['type'];
+ $this->wiki = $params['wiki'];
+ $this->type = $params['type'];
+ $this->order = isset( $params['order'] ) ? $params['order'] : 'random';
}
/**
* class : what job class to use (determines job type)
* wiki : wiki ID of the wiki the jobs are for (defaults to current wiki)
* type : The name of the job types this queue handles
+ * order : Order that pop() selects jobs, either "timestamp" or "random".
+ * If "timestamp" is used, the queue will effectively be FIFO. Note that
+ * pop() will not be exactly FIFO, and even if it was, job completion would
+ * not appear to be exactly FIFO since jobs can take different times to finish.
+ * If "random" is used, pop() will pick jobs in random order. This might be
+ * useful for improving concurrency depending on the queue storage medium.
*
* @param $params array
* @return JobQueue
* @since 1.20
*/
class JobQueueDB extends JobQueue {
- const CACHE_TTL = 30; // integer; seconds
+ const CACHE_TTL = 30; // integer; seconds
+ const MAX_JOB_RANDOM = 2147483647; // 2^31 - 1; used for job_random
/**
* @see JobQueue::doIsEmpty()
$uuid = wfRandomString( 32 ); // pop attempt
$dbw = $this->getMasterDB();
- if ( $dbw->trxLevel() ) {
- wfWarn( "Attempted to pop a job in a transaction; committing first." );
- $dbw->commit(); // push existing transaction
- }
+ $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
$job = false; // job popped off
$autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
$dbw->clearFlag( DBO_TRX ); // make each query its own transaction
try {
do { // retry when our row is invalid or deleted as a duplicate
- $row = false; // row claimed
- $rand = mt_rand( 0, 2147483648 ); // encourage concurrent UPDATEs
- $gte = (bool)mt_rand( 0, 1 ); // find rows with rand before/after $rand
- // Try to reserve a DB row...
- if ( $this->claim( $uuid, $rand, $gte ) || $this->claim( $uuid, $rand, !$gte ) ) {
- // Fetch any row that we just reserved...
- $row = $dbw->selectRow( 'job', '*',
- array( 'job_cmd' => $this->type, 'job_token' => $uuid ), __METHOD__ );
- // Check if another process deleted it as a duplicate
- if ( !$row ) {
- wfDebugLog( 'JobQueueDB', "Row deleted as duplicate by another process." );
- continue; // try again
- }
- // Get the job object from the row...
- $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
- if ( !$title ) {
- $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
- wfDebugLog( 'JobQueueDB', "Row has invalid title '{$row->job_title}'." );
- continue; // try again
- }
- $job = Job::factory( $row->job_cmd, $title,
- self::extractBlob( $row->job_params ), $row->job_id );
- // Delete any *other* duplicate jobs in the queue...
- if ( $job->ignoreDuplicates() && strlen( $row->job_sha1 ) ) {
- $dbw->delete( 'job',
- array( 'job_sha1' => $row->job_sha1,
- "job_id != {$dbw->addQuotes( $row->job_id )}" ),
- __METHOD__
- );
- }
- } else {
+ // Try to reserve a row in the DB...
+ if ( $this->order === 'timestamp' ) { // oldest first
+ $found = $this->claim( $uuid, 0, true );
+ } else { // random first
+ $rand = mt_rand( 0, self::MAX_JOB_RANDOM ); // encourage concurrent UPDATEs
+ $gte = (bool)mt_rand( 0, 1 ); // find rows with rand before/after $rand
+ $found = $this->claim( $uuid, $rand, $gte )
+ || $this->claim( $uuid, $rand, !$gte ); // try both directions
+ }
+ // Check if we found a row to reserve...
+ if ( !$found ) {
$wgMemc->set( $this->getEmptinessCacheKey(), 'true', self::CACHE_TTL );
+ break; // nothing to do
+ }
+ // Fetch any row that we just reserved...
+ $row = $dbw->selectRow( 'job', '*',
+ array( 'job_cmd' => $this->type, 'job_token' => $uuid ), __METHOD__ );
+ // Check if another process deleted it as a duplicate
+ if ( !$row ) {
+ wfDebugLog( 'JobQueueDB', "Row deleted as duplicate by another process." );
+ continue; // try again
+ }
+ // Get the job object from the row...
+ $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
+ if ( !$title ) {
+ $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
+ wfDebugLog( 'JobQueueDB', "Row has invalid title '{$row->job_title}'." );
+ continue; // try again
+ }
+ $job = Job::factory( $row->job_cmd, $title,
+ self::extractBlob( $row->job_params ), $row->job_id );
+ // Delete any *other* duplicate jobs in the queue...
+ if ( $job->ignoreDuplicates() && strlen( $row->job_sha1 ) ) {
+ $dbw->delete( 'job',
+ array( 'job_sha1' => $row->job_sha1,
+ "job_id != {$dbw->addQuotes( $row->job_id )}" ),
+ __METHOD__
+ );
}
break; // done
} while( true );
'job_params' => self::makeBlob( $job->getParams() ),
);
// Additional job metadata
+ if ( $this->order === 'timestamp' ) { // oldest first
+ $random = time() - 1325376000; // seconds since "January 1, 2012"
+ } else { // random first
+ $random = mt_rand( 0, self::MAX_JOB_RANDOM );
+ }
$dbw = $this->getMasterDB();
$metaFields = array(
'job_id' => $dbw->nextSequenceValue( 'job_job_id_seq' ),
'job_timestamp' => $dbw->timestamp(),
'job_sha1' => wfBaseConvert( sha1( serialize( $descFields ) ), 16, 36, 32 ),
- 'job_random' => mt_rand( 0, 2147483647 ) // [0, 2^31 - 1]
+ 'job_random' => mt_rand( 0, self::MAX_JOB_RANDOM )
);
return ( $descFields + $metaFields );
}
public function get( $type ) {
global $wgJobTypeConf;
- $conf = false;
+ $conf = array( 'wiki' => $this->wiki, 'type' => $type );
if ( isset( $wgJobTypeConf[$type] ) ) {
- $conf = $wgJobTypeConf[$type];
+ $conf = $conf + $wgJobTypeConf[$type];
} else {
- $conf = $wgJobTypeConf['default'];
+ $conf = $conf + $wgJobTypeConf['default'];
}
- return JobQueue::factory( array(
- 'class' => $conf['class'],
- 'wiki' => $this->wiki,
- 'type' => $type,
- ) );
+ return JobQueue::factory( $conf );
}
/**
* @return bool
*/
public function push( $jobs ) {
- $jobs = (array)$jobs;
+ $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
$jobsByType = array(); // (job type => list of jobs)
foreach ( $jobs as $job ) {
- $jobsByType[$job->getType()][] = $job;
+ if ( $job instanceof Job ) {
+ $jobsByType[$job->getType()][] = $job;
+ } else {
+ throw new MWException( "Attempted to push a non-Job object into a queue." );
+ }
}
$ok = true;
--- /dev/null
+/*!
+\ingroup JobQueue
+\page jobqueue_design Job queue design
+
+Notes on the Job queuing system architecture.
+
+\section intro Introduction
+
+The data model consist of the following main components:
+
+* The Job object represents a particular deferred task that happens in the
+ background. All jobs subclass the Job object and put the main logic in the
+ function called run().
+* The JobQueue object represents a particular queue of jobs of a certain type.
+ For example there may be a queue for email jobs and a queue for squid purge
+ jobs.
+
+Each job type has its own queue and is associated to a storage medium. One
+queue might save its jobs in redis while another one uses would use a database.
+
+Storage medium are defined in a queue class. Before using it, you must
+define in $wgJobTypeConf a mapping of the job type to a queue class.
+
+The factory class JobQueueGroup provides helper functions:
+- getting the queue for a given job
+- route new job insertions to the proper queue
+
+The following queue classes are available:
+* JobQueueDB (stores jobs in the `job` table in a database)
+
+All queue classes support some basic operations (though some may be no-ops):
+* enqueueing a batch of jobs
+* dequeueing a single job
+* acknowledging a job is completed
+* checking if the queue is empty
+
+Some queue classes (like JobQueueDB) may dequeue jobs in random order while other
+queues might dequeue jobs in exact FIFO order. Callers should thus not assume jobs
+are executed in FIFO order.
+
+Also note that not all queue classes will have the same reliability guarantees.
+In-memory queues may lose data when restarted depending on snapshot and journal
+settings (including journal fsync() frequency). Some queue types may totally remove
+jobs when dequeued while leaving the ack() function as a no-op; if a job is
+dequeued by a job runner, which crashes before completion, the job will be
+lost. Some jobs, like purging squid caches after a template change, may not
+require durable queues, whereas other jobs might be more important.
+
+Callers should also try to make jobs maintain correctness when executed twice.
+This is useful for queues that actually implement ack(), since they may recycle
+dequeued but un-acknowledged jobs back into the queue to be attempted again. If
+a runner dequeues a job, runs it, but then crashes before calling ack(), the
+job may be returned to the queue and run a second time. Jobs like cache purging can
+happen several times without any correctness problems. However, a pathological case
+would be if a bug causes the problem to systematically keep repeating. For example,
+a job may always throw a DB error at the end of run(). This problem is trickier to
+solve and more obnoxious for things like email jobs, for example. For such jobs,
+it might be useful to use a queue that does not retry jobs.
+++ /dev/null
-<?php
-/**
- * Job to update links for a given title.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Background job to update links for a given title.
- *
- * @ingroup JobQueue
- */
-class RefreshLinksJob extends Job {
- function __construct( $title, $params = '', $id = 0 ) {
- parent::__construct( 'refreshLinks', $title, $params, $id );
- $this->removeDuplicates = true; // job is expensive
- }
-
- /**
- * Run a refreshLinks job
- * @return boolean success
- */
- function run() {
- wfProfileIn( __METHOD__ );
-
- $linkCache = LinkCache::singleton();
- $linkCache->clear();
-
- if ( is_null( $this->title ) ) {
- $this->error = "refreshLinks: Invalid title";
- wfProfileOut( __METHOD__ );
- return false;
- }
-
- # Wait for the DB of the current/next slave DB handle to catch up to the master.
- # This way, we get the correct page_latest for templates or files that just changed
- # milliseconds ago, having triggered this job to begin with.
- if ( isset( $this->params['masterPos'] ) ) {
- wfGetLB()->waitFor( $this->params['masterPos'] );
- }
-
- $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
- if ( !$revision ) {
- $this->error = 'refreshLinks: Article not found "' .
- $this->title->getPrefixedDBkey() . '"';
- wfProfileOut( __METHOD__ );
- return false; // XXX: what if it was just deleted?
- }
-
- self::runForTitleInternal( $this->title, $revision, __METHOD__ );
-
- wfProfileOut( __METHOD__ );
- return true;
- }
-
- public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
- global $wgContLang;
-
- wfProfileIn( $fname . '-parse' );
- $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
- $content = $revision->getContent();
- $parserOutput = $content->getParserOutput( $title, $revision->getId(), $options, false );
- wfProfileOut( $fname . '-parse' );
-
- wfProfileIn( $fname . '-update' );
- $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
- DataUpdate::runUpdates( $updates );
- wfProfileOut( $fname . '-update' );
- }
-}
-
-/**
- * Background job to update links for a given title.
- * Newer version for high use templates.
- *
- * @ingroup JobQueue
- */
-class RefreshLinksJob2 extends Job {
- const MAX_TITLES_RUN = 10;
-
- function __construct( $title, $params, $id = 0 ) {
- parent::__construct( 'refreshLinks2', $title, $params, $id );
- }
-
- /**
- * Run a refreshLinks2 job
- * @return boolean success
- */
- function run() {
- wfProfileIn( __METHOD__ );
-
- $linkCache = LinkCache::singleton();
- $linkCache->clear();
-
- if ( is_null( $this->title ) ) {
- $this->error = "refreshLinks2: Invalid title";
- wfProfileOut( __METHOD__ );
- return false;
- } elseif ( !isset( $this->params['start'] ) || !isset( $this->params['end'] ) ) {
- $this->error = "refreshLinks2: Invalid params";
- wfProfileOut( __METHOD__ );
- return false;
- }
-
- // Back compat for pre-r94435 jobs
- $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
-
- // Avoid slave lag when fetching templates
- if ( isset( $this->params['masterPos'] ) ) {
- $masterPos = $this->params['masterPos'];
- } elseif ( wfGetLB()->getServerCount() > 1 ) {
- $masterPos = wfGetLB()->getMasterPos();
- } else {
- $masterPos = false;
- }
-
- $titles = $this->title->getBacklinkCache()->getLinks(
- $table, $this->params['start'], $this->params['end'] );
-
- if ( $titles->count() > self::MAX_TITLES_RUN ) {
- # We don't want to parse too many pages per job as it can starve other jobs.
- # If there are too many pages to parse, break this up into smaller jobs. By passing
- # in the master position here we can cut down on the time spent waiting for slaves to
- # catch up by the runners handling these jobs since time will have passed between now
- # and when they pop these jobs off the queue.
- $start = 0; // batch start
- $end = 0; // batch end
- $bsize = 0; // batch size
- $first = true; // first of batch
- $jobs = array();
- foreach ( $titles as $title ) {
- $start = $first ? $title->getArticleId() : $start;
- $end = $title->getArticleId();
- $first = false;
- if ( ++$bsize >= self::MAX_TITLES_RUN ) {
- $jobs[] = new RefreshLinksJob2( $this->title, array(
- 'table' => $table,
- 'start' => $start,
- 'end' => $end,
- 'masterPos' => $masterPos
- ) );
- $first = true;
- $start = $end = $bsize = 0;
- }
- }
- if ( $bsize > 0 ) { // group remaining pages into a job
- $jobs[] = new RefreshLinksJob2( $this->title, array(
- 'table' => $table,
- 'start' => $start,
- 'end' => $end,
- 'masterPos' => $masterPos
- ) );
- }
- Job::batchInsert( $jobs );
- } elseif ( php_sapi_name() != 'cli' ) {
- # Not suitable for page load triggered job running!
- # Gracefully switch to refreshLinks jobs if this happens.
- $jobs = array();
- foreach ( $titles as $title ) {
- $jobs[] = new RefreshLinksJob( $title, array( 'masterPos' => $masterPos ) );
- }
- Job::batchInsert( $jobs );
- } else {
- # Wait for the DB of the current/next slave DB handle to catch up to the master.
- # This way, we get the correct page_latest for templates or files that just changed
- # milliseconds ago, having triggered this job to begin with.
- if ( $masterPos ) {
- wfGetLB()->waitFor( $masterPos );
- }
- # Re-parse each page that transcludes this page and update their tracking links...
- foreach ( $titles as $title ) {
- $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
- if ( !$revision ) {
- $this->error = 'refreshLinks: Article not found "' .
- $title->getPrefixedDBkey() . '"';
- continue; // skip this page
- }
- RefreshLinksJob::runForTitleInternal( $title, $revision, __METHOD__ );
- wfWaitForSlaves();
- }
- }
-
- wfProfileOut( __METHOD__ );
- return true;
- }
-}
+++ /dev/null
-<?php
-/**
- * Job for asynchronous upload-by-url.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup JobQueue
- */
-
-/**
- * Job for asynchronous upload-by-url.
- *
- * This job is in fact an interface to UploadFromUrl, which is designed such
- * that it does not require any globals. If it does, fix it elsewhere, do not
- * add globals in here.
- *
- * @ingroup JobQueue
- */
-class UploadFromUrlJob extends Job {
- const SESSION_KEYNAME = 'wsUploadFromUrlJobData';
-
- /**
- * @var UploadFromUrl
- */
- public $upload;
-
- /**
- * @var User
- */
- protected $user;
-
- public function __construct( $title, $params, $id = 0 ) {
- parent::__construct( 'uploadFromUrl', $title, $params, $id );
- }
-
- public function run() {
- # Initialize this object and the upload object
- $this->upload = new UploadFromUrl();
- $this->upload->initialize(
- $this->title->getText(),
- $this->params['url'],
- false
- );
- $this->user = User::newFromName( $this->params['userName'] );
-
- # Fetch the file
- $status = $this->upload->fetchFile();
- if ( !$status->isOk() ) {
- $this->leaveMessage( $status );
- return true;
- }
-
- # Verify upload
- $result = $this->upload->verifyUpload();
- if ( $result['status'] != UploadBase::OK ) {
- $status = $this->upload->convertVerifyErrorToStatus( $result );
- $this->leaveMessage( $status );
- return true;
- }
-
- # Check warnings
- if ( !$this->params['ignoreWarnings'] ) {
- $warnings = $this->upload->checkWarnings();
- if ( $warnings ) {
-
- # Stash the upload
- $key = $this->upload->stashFile();
-
- if ( $this->params['leaveMessage'] ) {
- $this->user->leaveUserMessage(
- wfMessage( 'upload-warning-subj' )->text(),
- wfMessage( 'upload-warning-msg',
- $key,
- $this->params['url'] )->text()
- );
- } else {
- wfSetupSession( $this->params['sessionId'] );
- $this->storeResultInSession( 'Warning',
- 'warnings', $warnings );
- session_write_close();
- }
-
- return true;
- }
- }
-
- # Perform the upload
- $status = $this->upload->performUpload(
- $this->params['comment'],
- $this->params['pageText'],
- $this->params['watch'],
- $this->user
- );
- $this->leaveMessage( $status );
- return true;
-
- }
-
- /**
- * Leave a message on the user talk page or in the session according to
- * $params['leaveMessage'].
- *
- * @param $status Status
- */
- protected function leaveMessage( $status ) {
- if ( $this->params['leaveMessage'] ) {
- if ( $status->isGood() ) {
- $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
- wfMessage( 'upload-success-msg',
- $this->upload->getTitle()->getText(),
- $this->params['url']
- )->text() );
- } else {
- $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
- wfMessage( 'upload-failure-msg',
- $status->getWikiText(),
- $this->params['url']
- )->text() );
- }
- } else {
- wfSetupSession( $this->params['sessionId'] );
- if ( $status->isOk() ) {
- $this->storeResultInSession( 'Success',
- 'filename', $this->upload->getLocalFile()->getName() );
- } else {
- $this->storeResultInSession( 'Failure',
- 'errors', $status->getErrorsArray() );
- }
- session_write_close();
- }
- }
-
- /**
- * Store a result in the session data. Note that the caller is responsible
- * for appropriate session_start and session_write_close calls.
- *
- * @param $result String: the result (Success|Warning|Failure)
- * @param $dataKey String: the key of the extra data
- * @param $dataValue Mixed: the extra data itself
- */
- protected function storeResultInSession( $result, $dataKey, $dataValue ) {
- $session =& self::getSessionData( $this->params['sessionKey'] );
- $session['result'] = $result;
- $session[$dataKey] = $dataValue;
- }
-
- /**
- * Initialize the session data. Sets the intial result to queued.
- */
- public function initializeSessionData() {
- $session =& self::getSessionData( $this->params['sessionKey'] );
- $$session['result'] = 'Queued';
- }
-
- /**
- * @param $key
- * @return mixed
- */
- public static function &getSessionData( $key ) {
- if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) {
- $_SESSION[self::SESSION_KEYNAME][$key] = array();
- }
- return $_SESSION[self::SESSION_KEYNAME][$key];
- }
-}
--- /dev/null
+<?php
+/**
+ * Job to fix double redirects after moving a page.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job to fix double redirects after moving a page
+ *
+ * @ingroup JobQueue
+ */
+class DoubleRedirectJob extends Job {
+ var $reason, $redirTitle;
+
+ /**
+ * @var User
+ */
+ static $user;
+
+ /**
+ * Insert jobs into the job queue to fix redirects to the given title
+ * @param $reason String: the reason for the fix, see message "double-redirect-fixed-<reason>"
+ * @param $redirTitle Title: the title which has changed, redirects pointing to this title are fixed
+ * @param $destTitle bool Not used
+ */
+ public static function fixRedirects( $reason, $redirTitle, $destTitle = false ) {
+ # Need to use the master to get the redirect table updated in the same transaction
+ $dbw = wfGetDB( DB_MASTER );
+ $res = $dbw->select(
+ array( 'redirect', 'page' ),
+ array( 'page_namespace', 'page_title' ),
+ array(
+ 'page_id = rd_from',
+ 'rd_namespace' => $redirTitle->getNamespace(),
+ 'rd_title' => $redirTitle->getDBkey()
+ ), __METHOD__ );
+ if ( !$res->numRows() ) {
+ return;
+ }
+ $jobs = array();
+ foreach ( $res as $row ) {
+ $title = Title::makeTitle( $row->page_namespace, $row->page_title );
+ if ( !$title ) {
+ continue;
+ }
+
+ $jobs[] = new self( $title, array(
+ 'reason' => $reason,
+ 'redirTitle' => $redirTitle->getPrefixedDBkey() ) );
+ # Avoid excessive memory usage
+ if ( count( $jobs ) > 10000 ) {
+ Job::batchInsert( $jobs );
+ $jobs = array();
+ }
+ }
+ Job::batchInsert( $jobs );
+ }
+
+ function __construct( $title, $params = false, $id = 0 ) {
+ parent::__construct( 'fixDoubleRedirect', $title, $params, $id );
+ $this->reason = $params['reason'];
+ $this->redirTitle = Title::newFromText( $params['redirTitle'] );
+ }
+
+ /**
+ * @return bool
+ */
+ function run() {
+ if ( !$this->redirTitle ) {
+ $this->setLastError( 'Invalid title' );
+ return false;
+ }
+
+ $targetRev = Revision::newFromTitle( $this->title, false, Revision::READ_LATEST );
+ if ( !$targetRev ) {
+ wfDebug( __METHOD__.": target redirect already deleted, ignoring\n" );
+ return true;
+ }
+ $content = $targetRev->getContent();
+ $currentDest = $content->getRedirectTarget();
+ if ( !$currentDest || !$currentDest->equals( $this->redirTitle ) ) {
+ wfDebug( __METHOD__.": Redirect has changed since the job was queued\n" );
+ return true;
+ }
+
+ # Check for a suppression tag (used e.g. in periodically archived discussions)
+ $mw = MagicWord::get( 'staticredirect' );
+ if ( $content->matchMagicWord( $mw ) ) {
+ wfDebug( __METHOD__.": skipping: suppressed with __STATICREDIRECT__\n" );
+ return true;
+ }
+
+ # Find the current final destination
+ $newTitle = self::getFinalDestination( $this->redirTitle );
+ if ( !$newTitle ) {
+ wfDebug( __METHOD__.": skipping: single redirect, circular redirect or invalid redirect destination\n" );
+ return true;
+ }
+ if ( $newTitle->equals( $this->redirTitle ) ) {
+ # The redirect is already right, no need to change it
+ # This can happen if the page was moved back (say after vandalism)
+ wfDebug( __METHOD__.": skipping, already good\n" );
+ }
+
+ # Preserve fragment (bug 14904)
+ $newTitle = Title::makeTitle( $newTitle->getNamespace(), $newTitle->getDBkey(),
+ $currentDest->getFragment(), $newTitle->getInterwiki() );
+
+ # Fix the text
+ $newContent = $content->updateRedirect( $newTitle );
+
+ if ( $newContent->equals( $content ) ) {
+ $this->setLastError( 'Content unchanged???' );
+ return false;
+ }
+
+ # Save it
+ global $wgUser;
+ $oldUser = $wgUser;
+ $wgUser = $this->getUser();
+ $article = WikiPage::factory( $this->title );
+ $reason = wfMessage( 'double-redirect-fixed-' . $this->reason,
+ $this->redirTitle->getPrefixedText(), $newTitle->getPrefixedText()
+ )->inContentLanguage()->text();
+ $article->doEditContent( $newContent, $reason, EDIT_UPDATE | EDIT_SUPPRESS_RC, false, $this->getUser() );
+ $wgUser = $oldUser;
+
+ return true;
+ }
+
+ /**
+ * Get the final destination of a redirect
+ *
+ * @param $title Title
+ *
+ * @return bool if the specified title is not a redirect, or if it is a circular redirect
+ */
+ public static function getFinalDestination( $title ) {
+ $dbw = wfGetDB( DB_MASTER );
+
+ $seenTitles = array(); # Circular redirect check
+ $dest = false;
+
+ while ( true ) {
+ $titleText = $title->getPrefixedDBkey();
+ if ( isset( $seenTitles[$titleText] ) ) {
+ wfDebug( __METHOD__, "Circular redirect detected, aborting\n" );
+ return false;
+ }
+ $seenTitles[$titleText] = true;
+
+ if ( $title->getInterwiki() ) {
+ // If the target is interwiki, we have to break early (bug 40352).
+ // Otherwise it will look up a row in the local page table
+ // with the namespace/page of the interwiki target which can cause
+ // unexpected results (e.g. X -> foo:Bar -> Bar -> .. )
+ break;
+ }
+
+ $row = $dbw->selectRow(
+ array( 'redirect', 'page' ),
+ array( 'rd_namespace', 'rd_title', 'rd_interwiki' ),
+ array(
+ 'rd_from=page_id',
+ 'page_namespace' => $title->getNamespace(),
+ 'page_title' => $title->getDBkey()
+ ), __METHOD__ );
+ if ( !$row ) {
+ # No redirect from here, chain terminates
+ break;
+ } else {
+ $dest = $title = Title::makeTitle( $row->rd_namespace, $row->rd_title, '', $row->rd_interwiki );
+ }
+ }
+ return $dest;
+ }
+
+ /**
+ * Get a user object for doing edits, from a request-lifetime cache
+ * @return User
+ */
+ function getUser() {
+ if ( !self::$user ) {
+ self::$user = User::newFromName( wfMessage( 'double-redirect-fixer' )->inContentLanguage()->text(), false );
+ # FIXME: newFromName could return false on a badly configured wiki.
+ if ( !self::$user->isLoggedIn() ) {
+ self::$user->addToDatabase();
+ }
+ }
+ return self::$user;
+ }
+}
+
--- /dev/null
+<?php
+/**
+ * Old job for notification emails.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Old job used for sending single notification emails;
+ * kept for backwards-compatibility
+ *
+ * @ingroup JobQueue
+ */
+class EmaillingJob extends Job {
+ function __construct( $title, $params, $id = 0 ) {
+ parent::__construct( 'sendMail', Title::newMainPage(), $params, $id );
+ }
+
+ function run() {
+ UserMailer::send(
+ $this->params['to'],
+ $this->params['from'],
+ $this->params['subj'],
+ $this->params['body'],
+ $this->params['replyto']
+ );
+ return true;
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * Job for notification emails.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job for email notification mails
+ *
+ * @ingroup JobQueue
+ */
+class EnotifNotifyJob extends Job {
+
+ function __construct( $title, $params, $id = 0 ) {
+ parent::__construct( 'enotifNotify', $title, $params, $id );
+ }
+
+ function run() {
+ $enotif = new EmailNotification();
+ // Get the user from ID (rename safe). Anons are 0, so defer to name.
+ if( isset( $this->params['editorID'] ) && $this->params['editorID'] ) {
+ $editor = User::newFromId( $this->params['editorID'] );
+ // B/C, only the name might be given.
+ } else {
+ # FIXME: newFromName could return false on a badly configured wiki.
+ $editor = User::newFromName( $this->params['editor'], false );
+ }
+ $enotif->actuallyNotifyOnPageChange(
+ $editor,
+ $this->title,
+ $this->params['timestamp'],
+ $this->params['summary'],
+ $this->params['minorEdit'],
+ $this->params['oldid'],
+ $this->params['watchers']
+ );
+ return true;
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * HTML cache invalidation of all pages linking to a given title.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Job wrapper for HTMLCacheUpdate. Gets run whenever a related
+ * job gets called from the queue.
+ *
+ * @ingroup JobQueue
+ */
+class HTMLCacheUpdateJob extends Job {
+ var $table, $start, $end;
+
+ /**
+ * Construct a job
+ * @param $title Title: the title linked to
+ * @param $params Array: job parameters (table, start and end page_ids)
+ * @param $id Integer: job id
+ */
+ function __construct( $title, $params, $id = 0 ) {
+ parent::__construct( 'htmlCacheUpdate', $title, $params, $id );
+ $this->table = $params['table'];
+ $this->start = $params['start'];
+ $this->end = $params['end'];
+ }
+
+ public function run() {
+ $update = new HTMLCacheUpdate( $this->title, $this->table, $this->start, $this->end );
+ $update->doUpdate();
+ return true;
+ }
+}
--- /dev/null
+<?php
+/**
+ * Job to update links for a given title.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Background job to update links for a given title.
+ *
+ * @ingroup JobQueue
+ */
+class RefreshLinksJob extends Job {
+ function __construct( $title, $params = '', $id = 0 ) {
+ parent::__construct( 'refreshLinks', $title, $params, $id );
+ $this->removeDuplicates = true; // job is expensive
+ }
+
+ /**
+ * Run a refreshLinks job
+ * @return boolean success
+ */
+ function run() {
+ wfProfileIn( __METHOD__ );
+
+ $linkCache = LinkCache::singleton();
+ $linkCache->clear();
+
+ if ( is_null( $this->title ) ) {
+ $this->error = "refreshLinks: Invalid title";
+ wfProfileOut( __METHOD__ );
+ return false;
+ }
+
+ # Wait for the DB of the current/next slave DB handle to catch up to the master.
+ # This way, we get the correct page_latest for templates or files that just changed
+ # milliseconds ago, having triggered this job to begin with.
+ if ( isset( $this->params['masterPos'] ) ) {
+ wfGetLB()->waitFor( $this->params['masterPos'] );
+ }
+
+ $revision = Revision::newFromTitle( $this->title, false, Revision::READ_NORMAL );
+ if ( !$revision ) {
+ $this->error = 'refreshLinks: Article not found "' .
+ $this->title->getPrefixedDBkey() . '"';
+ wfProfileOut( __METHOD__ );
+ return false; // XXX: what if it was just deleted?
+ }
+
+ self::runForTitleInternal( $this->title, $revision, __METHOD__ );
+
+ wfProfileOut( __METHOD__ );
+ return true;
+ }
+
+ public static function runForTitleInternal( Title $title, Revision $revision, $fname ) {
+ global $wgContLang;
+
+ wfProfileIn( $fname . '-parse' );
+ $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
+ $content = $revision->getContent();
+ $parserOutput = $content->getParserOutput( $title, $revision->getId(), $options, false );
+ wfProfileOut( $fname . '-parse' );
+
+ wfProfileIn( $fname . '-update' );
+ $updates = $content->getSecondaryDataUpdates( $title, null, false, $parserOutput );
+ DataUpdate::runUpdates( $updates );
+ wfProfileOut( $fname . '-update' );
+ }
+}
+
+/**
+ * Background job to update links for a given title.
+ * Newer version for high use templates.
+ *
+ * @ingroup JobQueue
+ */
+class RefreshLinksJob2 extends Job {
+ const MAX_TITLES_RUN = 10;
+
+ function __construct( $title, $params, $id = 0 ) {
+ parent::__construct( 'refreshLinks2', $title, $params, $id );
+ }
+
+ /**
+ * Run a refreshLinks2 job
+ * @return boolean success
+ */
+ function run() {
+ wfProfileIn( __METHOD__ );
+
+ $linkCache = LinkCache::singleton();
+ $linkCache->clear();
+
+ if ( is_null( $this->title ) ) {
+ $this->error = "refreshLinks2: Invalid title";
+ wfProfileOut( __METHOD__ );
+ return false;
+ } elseif ( !isset( $this->params['start'] ) || !isset( $this->params['end'] ) ) {
+ $this->error = "refreshLinks2: Invalid params";
+ wfProfileOut( __METHOD__ );
+ return false;
+ }
+
+ // Back compat for pre-r94435 jobs
+ $table = isset( $this->params['table'] ) ? $this->params['table'] : 'templatelinks';
+
+ // Avoid slave lag when fetching templates
+ if ( isset( $this->params['masterPos'] ) ) {
+ $masterPos = $this->params['masterPos'];
+ } elseif ( wfGetLB()->getServerCount() > 1 ) {
+ $masterPos = wfGetLB()->getMasterPos();
+ } else {
+ $masterPos = false;
+ }
+
+ $titles = $this->title->getBacklinkCache()->getLinks(
+ $table, $this->params['start'], $this->params['end'] );
+
+ if ( $titles->count() > self::MAX_TITLES_RUN ) {
+ # We don't want to parse too many pages per job as it can starve other jobs.
+ # If there are too many pages to parse, break this up into smaller jobs. By passing
+ # in the master position here we can cut down on the time spent waiting for slaves to
+ # catch up by the runners handling these jobs since time will have passed between now
+ # and when they pop these jobs off the queue.
+ $start = 0; // batch start
+ $end = 0; // batch end
+ $bsize = 0; // batch size
+ $first = true; // first of batch
+ $jobs = array();
+ foreach ( $titles as $title ) {
+ $start = $first ? $title->getArticleId() : $start;
+ $end = $title->getArticleId();
+ $first = false;
+ if ( ++$bsize >= self::MAX_TITLES_RUN ) {
+ $jobs[] = new RefreshLinksJob2( $this->title, array(
+ 'table' => $table,
+ 'start' => $start,
+ 'end' => $end,
+ 'masterPos' => $masterPos
+ ) );
+ $first = true;
+ $start = $end = $bsize = 0;
+ }
+ }
+ if ( $bsize > 0 ) { // group remaining pages into a job
+ $jobs[] = new RefreshLinksJob2( $this->title, array(
+ 'table' => $table,
+ 'start' => $start,
+ 'end' => $end,
+ 'masterPos' => $masterPos
+ ) );
+ }
+ Job::batchInsert( $jobs );
+ } elseif ( php_sapi_name() != 'cli' ) {
+ # Not suitable for page load triggered job running!
+ # Gracefully switch to refreshLinks jobs if this happens.
+ $jobs = array();
+ foreach ( $titles as $title ) {
+ $jobs[] = new RefreshLinksJob( $title, array( 'masterPos' => $masterPos ) );
+ }
+ Job::batchInsert( $jobs );
+ } else {
+ # Wait for the DB of the current/next slave DB handle to catch up to the master.
+ # This way, we get the correct page_latest for templates or files that just changed
+ # milliseconds ago, having triggered this job to begin with.
+ if ( $masterPos ) {
+ wfGetLB()->waitFor( $masterPos );
+ }
+ # Re-parse each page that transcludes this page and update their tracking links...
+ foreach ( $titles as $title ) {
+ $revision = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
+ if ( !$revision ) {
+ $this->error = 'refreshLinks: Article not found "' .
+ $title->getPrefixedDBkey() . '"';
+ continue; // skip this page
+ }
+ RefreshLinksJob::runForTitleInternal( $title, $revision, __METHOD__ );
+ wfWaitForSlaves();
+ }
+ }
+
+ wfProfileOut( __METHOD__ );
+ return true;
+ }
+}
--- /dev/null
+<?php
+/**
+ * Job for asynchronous upload-by-url.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup JobQueue
+ */
+
+/**
+ * Job for asynchronous upload-by-url.
+ *
+ * This job is in fact an interface to UploadFromUrl, which is designed such
+ * that it does not require any globals. If it does, fix it elsewhere, do not
+ * add globals in here.
+ *
+ * @ingroup JobQueue
+ */
+class UploadFromUrlJob extends Job {
+ const SESSION_KEYNAME = 'wsUploadFromUrlJobData';
+
+ /**
+ * @var UploadFromUrl
+ */
+ public $upload;
+
+ /**
+ * @var User
+ */
+ protected $user;
+
+ public function __construct( $title, $params, $id = 0 ) {
+ parent::__construct( 'uploadFromUrl', $title, $params, $id );
+ }
+
+ public function run() {
+ # Initialize this object and the upload object
+ $this->upload = new UploadFromUrl();
+ $this->upload->initialize(
+ $this->title->getText(),
+ $this->params['url'],
+ false
+ );
+ $this->user = User::newFromName( $this->params['userName'] );
+
+ # Fetch the file
+ $status = $this->upload->fetchFile();
+ if ( !$status->isOk() ) {
+ $this->leaveMessage( $status );
+ return true;
+ }
+
+ # Verify upload
+ $result = $this->upload->verifyUpload();
+ if ( $result['status'] != UploadBase::OK ) {
+ $status = $this->upload->convertVerifyErrorToStatus( $result );
+ $this->leaveMessage( $status );
+ return true;
+ }
+
+ # Check warnings
+ if ( !$this->params['ignoreWarnings'] ) {
+ $warnings = $this->upload->checkWarnings();
+ if ( $warnings ) {
+
+ # Stash the upload
+ $key = $this->upload->stashFile();
+
+ if ( $this->params['leaveMessage'] ) {
+ $this->user->leaveUserMessage(
+ wfMessage( 'upload-warning-subj' )->text(),
+ wfMessage( 'upload-warning-msg',
+ $key,
+ $this->params['url'] )->text()
+ );
+ } else {
+ wfSetupSession( $this->params['sessionId'] );
+ $this->storeResultInSession( 'Warning',
+ 'warnings', $warnings );
+ session_write_close();
+ }
+
+ return true;
+ }
+ }
+
+ # Perform the upload
+ $status = $this->upload->performUpload(
+ $this->params['comment'],
+ $this->params['pageText'],
+ $this->params['watch'],
+ $this->user
+ );
+ $this->leaveMessage( $status );
+ return true;
+
+ }
+
+ /**
+ * Leave a message on the user talk page or in the session according to
+ * $params['leaveMessage'].
+ *
+ * @param $status Status
+ */
+ protected function leaveMessage( $status ) {
+ if ( $this->params['leaveMessage'] ) {
+ if ( $status->isGood() ) {
+ $this->user->leaveUserMessage( wfMessage( 'upload-success-subj' )->text(),
+ wfMessage( 'upload-success-msg',
+ $this->upload->getTitle()->getText(),
+ $this->params['url']
+ )->text() );
+ } else {
+ $this->user->leaveUserMessage( wfMessage( 'upload-failure-subj' )->text(),
+ wfMessage( 'upload-failure-msg',
+ $status->getWikiText(),
+ $this->params['url']
+ )->text() );
+ }
+ } else {
+ wfSetupSession( $this->params['sessionId'] );
+ if ( $status->isOk() ) {
+ $this->storeResultInSession( 'Success',
+ 'filename', $this->upload->getLocalFile()->getName() );
+ } else {
+ $this->storeResultInSession( 'Failure',
+ 'errors', $status->getErrorsArray() );
+ }
+ session_write_close();
+ }
+ }
+
+ /**
+ * Store a result in the session data. Note that the caller is responsible
+ * for appropriate session_start and session_write_close calls.
+ *
+ * @param $result String: the result (Success|Warning|Failure)
+ * @param $dataKey String: the key of the extra data
+ * @param $dataValue Mixed: the extra data itself
+ */
+ protected function storeResultInSession( $result, $dataKey, $dataValue ) {
+ $session =& self::getSessionData( $this->params['sessionKey'] );
+ $session['result'] = $result;
+ $session[$dataKey] = $dataValue;
+ }
+
+ /**
+ * Initialize the session data. Sets the intial result to queued.
+ */
+ public function initializeSessionData() {
+ $session =& self::getSessionData( $this->params['sessionKey'] );
+ $$session['result'] = 'Queued';
+ }
+
+ /**
+ * @param $key
+ * @return mixed
+ */
+ public static function &getSessionData( $key ) {
+ if ( !isset( $_SESSION[self::SESSION_KEYNAME][$key] ) ) {
+ $_SESSION[self::SESSION_KEYNAME][$key] = array();
+ }
+ return $_SESSION[self::SESSION_KEYNAME][$key];
+ }
+}
return $this->encode2($var);
}
- /**
+ /**
* encodes an arbitrary variable into JSON format
*
* @param $var Mixed: any number, boolean, string, array, or object to be encoded.
*
* @file
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
abstract class GenericArrayObject extends ArrayObject {
const TYPE_DO = 15; // keywords: case, var, finally, else, do, try
const TYPE_FUNC = 16; // keywords: function
const TYPE_LITERAL = 17; // all literals, identifiers and unrecognised tokens
-
+
// Sanity limit to avoid excessive memory usage
const STACK_LIMIT = 1000;
self::TYPE_LITERAL => true
)
);
-
+
// Rules for when newlines should be inserted if
// $statementsOnOwnLine is enabled.
// $newlineBefore is checked before switching state,
return self::parseError($s, $end, 'Number with several E' );
}
$end++;
-
+
// + sign is optional; - sign is required.
$end += strspn( $s, '-+', $end );
$len = strspn( $s, '0123456789', $end );
$out .= ' ';
$lineLength++;
}
-
+
$out .= $token;
$lineLength += $end - $pos; // += strlen( $token )
$last = $s[$end - 1];
$pos = $end;
$newlineFound = false;
-
+
// Output a newline after the token if required
// This is checked before AND after switching state
$newlineAdded = false;
} elseif( isset( $goto[$state][$type] ) ) {
$state = $goto[$state][$type];
}
-
+
// Check for newline insertion again
if ( $statementsOnOwnLine && !$newlineAdded && isset( $newlineAfter[$state][$type] ) ) {
$out .= "\n";
}
return $out;
}
-
+
static function parseError($fullJavascript, $position, $errorMsg) {
// TODO: Handle the error: trigger_error, throw exception, return false...
return false;
/// Database result row.
protected $row;
+ protected $performer;
protected function __construct( $row ) {
$this->row = $row;
}
public function getPerformer() {
- $userId = (int) $this->row->log_user;
- if ( $userId !== 0 ) { // logged-in users
- if ( isset( $this->row->user_name ) ) {
- return User::newFromRow( $this->row );
- } else {
- return User::newFromId( $userId );
+ if( !$this->performer ) {
+ $userId = (int) $this->row->log_user;
+ if ( $userId !== 0 ) { // logged-in users
+ if ( isset( $this->row->user_name ) ) {
+ $this->performer = User::newFromRow( $this->row );
+ } else {
+ $this->performer = User::newFromId( $userId );
+ }
+ } else { // IP users
+ $userText = $this->row->log_user_text;
+ $this->performer = User::newFromName( $userText, false );
}
- } else { // IP users
- $userText = $this->row->log_user_text;
- return User::newFromName( $userText, false );
}
+ return $this->performer;
}
public function getTarget() {
}
public function getPerformer() {
- $userId = (int) $this->row->rc_user;
- if ( $userId !== 0 ) {
- return User::newFromId( $userId );
- } else {
- $userText = $this->row->rc_user_text;
- // Might be an IP, don't validate the username
- return User::newFromName( $userText, false );
+ if( !$this->performer ) {
+ $userId = (int) $this->row->rc_user;
+ if ( $userId !== 0 ) {
+ $this->performer = User::newFromId( $userId );
+ } else {
+ $userText = $this->row->rc_user_text;
+ // Might be an IP, don't validate the username
+ $this->performer = User::newFromName( $userText, false );
+ }
}
+ return $this->performer;
}
public function getTarget() {
unset( $baseArray['comment'] );
unset( $baseArray['xmp'] );
-
+
$baseArray['metadata'] = $meta->getMetadataArray();
$baseArray['metadata']['_MW_GIF_VERSION'] = GIFMetadataExtractor::VERSION;
return $baseArray;
function retrieveMetaData() {
global $wgDjvuToXML, $wgDjvuDump, $wgDjvuTxt;
wfProfileIn( __METHOD__ );
-
+
if ( isset( $wgDjvuDump ) ) {
# djvudump is faster as of version 3.5
# http://sourceforge.net/tracker/index.php?func=detail&aid=1704049&group_id=32953&atid=406583
$xml = null;
}
# Text layer
- if ( isset( $wgDjvuTxt ) ) {
+ if ( isset( $wgDjvuTxt ) ) {
wfProfileIn( 'djvutxt' );
$cmd = wfEscapeShellArg( $wgDjvuTxt ) . ' --detail=page ' . wfEscapeShellArg( $this->mFilename ) ;
wfDebug( __METHOD__.": $cmd\n" );
$reg = <<<EOR
/\(page\s[\d-]*\s[\d-]*\s[\d-]*\s[\d-]*\s*"
((?> # Text to match is composed of atoms of either:
- \\\\. # - any escaped character
+ \\\\. # - any escaped character
| # - any character different from " and \
[^"\\\\]+
)*?)
$this->charCodeString( 'UserComment' );
$this->charCodeString( 'GPSProcessingMethod');
$this->charCodeString( 'GPSAreaInformation' );
-
+
//ComponentsConfiguration should really be an array instead of a string...
//This turns a string of binary numbers into an array of numbers.
$ccVals['_type'] = 'ol'; //this is for formatting later.
$this->mFilteredExifData['ComponentsConfiguration'] = $ccVals;
}
-
+
//GPSVersion(ID) is treated as the wrong type by php exif support.
//Go through each byte turning it into a version string.
//For example: "\x02\x02\x00\x00" -> "2.2.0.0"
}
$charCode = substr( $this->mFilteredExifData[$prop], 0, 8);
$val = substr( $this->mFilteredExifData[$prop], 8);
-
-
+
switch ($charCode) {
case "\x4A\x49\x53\x00\x00\x00\x00\x00":
//JIS
wfRestoreWarnings();
}
}
-
+
//trim and check to make sure not only whitespace.
$val = trim($val);
if ( strlen( $val ) === 0 ) {
return false;
}
if( $count > 1 ) {
- foreach( $val as $v ) {
+ foreach( $val as $v ) {
if( !$this->validate( $section, $tag, $v, true ) ) {
- return false;
- }
+ return false;
+ }
}
return true;
}
class GIFHandler extends BitmapHandler {
const BROKEN_FILE = '0'; // value to store in img_metadata if error extracting metadata.
-
+
function getMetadata( $image, $filename ) {
try {
$parsedGIFMetadata = BitmapMetadataHandler::GIF( $filename );
wfSuppressWarnings();
$metadata = unserialize($image->getMetadata());
wfRestoreWarnings();
-
+
if (!$metadata || $metadata['frameCount'] <= 1) {
return $original;
}
/* Preserve original image info string, but strip the last char ')' so we can add even more */
$info = array();
$info[] = $original;
-
+
if ( $metadata['looped'] ) {
$info[] = wfMessage( 'file-info-gif-looped' )->parse();
}
-
+
if ( $metadata['frameCount'] > 1 ) {
$info[] = wfMessage( 'file-info-gif-frames' )->numParams( $metadata['frameCount'] )->parse();
}
-
+
if ( $metadata['duration'] ) {
$info[] = $wgLang->formatTimePeriod( $metadata['duration'] );
}
-
+
return $wgLang->commaList( $info );
}
}
$isLooped = false;
$xmp = "";
$comment = array();
-
+
if ( !$filename ) {
throw new Exception( "No file name specified" );
} elseif ( !file_exists( $filename ) || is_dir( $filename ) ) {
## Read GCT
self::readGCT( $fh, $bpp );
fread( $fh, 1 );
- self::skipBlock( $fh );
+ self::skipBlock( $fh );
} elseif ( $buf == self::$gif_extension_sep ) {
$buf = fread( $fh, 1 );
if ( strlen( $buf ) < 1 ) throw new Exception( "Ran out of input" );
// NETSCAPE2.0 (application name for animated gif)
if ( $data == 'NETSCAPE2.0' ) {
-
$data = fread( $fh, 2 ); // Block length and introduction, should be 03 01
if ($data != "\x03\x01") {
throw new Exception( "Expected \x03\x01, got $data" );
}
-
+
// Unsigned little-endian integer, loop count or zero for "forever"
$loopData = fread( $fh, 2 );
if ( strlen( $loopData ) < 2 ) throw new Exception( "Ran out of input" );
$loopData = unpack( 'v', $loopData );
$loopCount = $loopData[1];
-
+
if ($loopCount != 1) {
$isLooped = true;
}
-
+
// Read out terminator byte
fread( $fh, 1 );
} elseif ( $data == 'XMP DataXMP' ) {
// whatever...
$segments["XMP"] = substr( $temp, 29 );
wfDebug( __METHOD__ . ' Found XMP section with wrong app identifier '
- . "Using anyways.\n" );
+ . "Using anyways.\n" );
} elseif ( substr( $temp, 0, 6 ) === "Exif\0\0" ) {
// Just need to find out what the byte order is.
// because php's exif plugin sucks...
* @return array
*/
public function getDescLinkAttribs( $title = null, $params = '' ) {
- $query = $this->page ? ( 'page=' . urlencode( $this->page ) ) : '';
+ $query = '';
+ if ( $this->page && $this->page !== 1 ) {
+ $query = 'page=' . urlencode( $this->page );
+ }
if( $params ) {
$query .= $query ? '&'.$params : $params;
}
function canAnimateThumbnail( $image ) {
return false;
}
-
+
function getMetadataType( $image ) {
return 'parsed-png';
}
-
+
function isMetadataValid( $image, $metadata ) {
if ( $metadata === self::BROKEN_FILE ) {
$info = array();
$info[] = $original;
-
+
if ( $metadata['loopCount'] == 0 ) {
$info[] = wfMessage( 'file-info-png-looped' )->parse();
} elseif ( $metadata['loopCount'] > 1 ) {
$info[] = wfMessage( 'file-info-png-repeat' )->numParams( $metadata['loopCount'] )->parse();
}
-
+
if ( $metadata['frameCount'] > 0 ) {
$info[] = wfMessage( 'file-info-png-frames' )->numParams( $metadata['frameCount'] )->parse();
}
-
+
if ( $metadata['duration'] ) {
$info[] = $wgLang->formatTimePeriod( $metadata['duration'] );
}
-
+
return $wgLang->commaList( $info );
}
case 0:
$colorType = 'greyscale';
break;
- case 2:
+ case 2:
$colorType = 'truecolour';
break;
case 3:
try {
$metadata = SVGMetadataExtractor::getMetadata( $filename );
} catch( Exception $e ) {
- // Broken file?
+ // Broken file?
wfDebug( __METHOD__ . ': ' . $e->getMessage() . "\n" );
return '0';
}
$this->reader->open( $source, null, LIBXML_NOERROR | LIBXML_NOWARNING );
}
- // Expand entities, since Adobe Illustrator uses them for xmlns
- // attributes (bug 31719). Note that libxml2 has some protection
- // against large recursive entity expansions so this is not as
+ // Expand entities, since Adobe Illustrator uses them for xmlns
+ // attributes (bug 31719). Note that libxml2 has some protection
+ // against large recursive entity expansions so this is not as
// insecure as it might appear to be.
$this->reader->setParserProperty( XMLReader::SUBST_ENTITIES, true );
* 'validate' => 'validateClosed',
* 'choices' => array( '1' => true, '2' => true ),
* ),
- */
+ */
),
'http://ns.adobe.com/exif/1.0/aux/' => array(
'Lens' => array(
//check if its in a numeric range
$inRange = false;
- if ( isset( $info['rangeLow'] )
+ if ( isset( $info['rangeLow'] )
&& isset( $info['rangeHigh'] )
&& is_numeric( $val )
&& ( intval( $val ) <= $info['rangeHigh'] )
}
$m = array();
- if ( preg_match(
+ if ( preg_match(
'/(\d{1,3}),(\d{1,2}),(\d{1,2})([NWSE])/D',
$val, $m )
) {
}
$val = $coord;
return;
- } elseif ( preg_match(
+ } elseif ( preg_match(
'/(\d{1,3}),(\d{1,2}(?:.\d*)?)([NWSE])/D',
$val, $m )
) {
return;
} else {
- wfDebugLog( 'XMP', __METHOD__
+ wfDebugLog( 'XMP', __METHOD__
. " Expected GPSCoordinate, but got $val." );
$val = null;
return;
$name = $columns[1];
$simpleUpper = $columns[12];
$simpleLower = $columns[13];
-
+
$source = codepointToUtf8( hexdec( $codepoint ) );
if( $simpleUpper ) {
$wikiUpperChars[$source] = codepointToUtf8( hexdec( $simpleUpper ) );
* @param $string String The string
* @return String String with the character codes replaced.
*/
- private static function replaceForNativeNormalize( $string ) {
+ private static function replaceForNativeNormalize( $string ) {
$string = preg_replace(
'/[\x00-\x08\x0b\x0c\x0e-\x1f]/',
UTF8_REPLACEMENT,
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
- *
+ *
* @file
* @ingroup UtfNormal
*/
/**
* Some constant definitions for the unicode normalization module.
*
- * Note: these constants must all be resolvable at compile time by HipHop,
+ * Note: these constants must all be resolvable at compile time by HipHop,
* since this file will not be executed during request startup for a compiled
* MediaWiki.
*
*
* @file
*/
-
+
UtfNormal::\$utfCombiningClass = unserialize( '$serCombining' );
UtfNormal::\$utfCanonicalComp = unserialize( '$serComp' );
UtfNormal::\$utfCanonicalDecomp = unserialize( '$serCanon' );
* @ingroup Cache
*/
class EhcacheBagOStuff extends BagOStuff {
- var $servers, $cacheName, $connectTimeout, $timeout, $curlOptions,
+ var $servers, $cacheName, $connectTimeout, $timeout, $curlOptions,
$requestData, $requestDataPos;
-
+
var $curls = array();
/**
}
$this->servers = $params['servers'];
$this->cacheName = isset( $params['cache'] ) ? $params['cache'] : 'mw';
- $this->connectTimeout = isset( $params['connectTimeout'] )
+ $this->connectTimeout = isset( $params['connectTimeout'] )
? $params['connectTimeout'] : 1;
$this->timeout = isset( $params['timeout'] ) ? $params['timeout'] : 1;
$this->curlOptions = array(
if ( $response['http_code'] >= 300 ) {
wfDebug( __METHOD__.": GET failure, got HTTP {$response['http_code']}\n" );
wfProfileOut( __METHOD__ );
- return false;
+ return false;
}
$body = $response['body'];
$type = $response['content_type'];
* @return int
*/
protected function attemptPut( $key, $data, $type, $ttl ) {
- // In initial benchmarking, it was 30 times faster to use CURLOPT_POST
+ // In initial benchmarking, it was 30 times faster to use CURLOPT_POST
// than CURLOPT_UPLOAD with CURLOPT_READFUNCTION. This was because
- // CURLOPT_UPLOAD was pushing the request headers first, then waiting
+ // CURLOPT_UPLOAD was pushing the request headers first, then waiting
// for an ACK packet, then sending the data, whereas CURLOPT_POST just
// sends the headers and the data in a single send().
$response = $this->doItemRequest( $key,
*/
protected function createCache( $key ) {
wfDebug( __METHOD__.": creating cache for $key\n" );
- $response = $this->doCacheRequest( $key,
+ $response = $this->doCacheRequest( $key,
array(
CURLOPT_POST => 1,
CURLOPT_CUSTOMREQUEST => 'PUT',
if ( array_diff_key( $curlOptions, $this->curlOptions ) ) {
// var_dump( array_diff_key( $curlOptions, $this->curlOptions ) );
throw new MWException( __METHOD__.": to prevent options set in one doRequest() " .
- "call from affecting subsequent doRequest() calls, only options listed " .
+ "call from affecting subsequent doRequest() calls, only options listed " .
"in \$this->curlOptions may be specified in the \$curlOptions parameter." );
}
$curlOptions += $this->curlOptions;
* @return Mixed
*/
public function replace( $key, $value, $exptime = 0 ) {
- return $this->client->replace( $this->encodeKey( $key ), $value,
+ return $this->client->replace( $this->encodeKey( $key ), $value,
$this->fixExpiry( $exptime ) );
}
return false;
}
if ( substr( $data, -2 ) !== "\r\n" ) {
- $this->_handle_error( $sock,
+ $this->_handle_error( $sock,
'line ending missing from data block from $1' );
return false;
}
}
/**
- * Read the specified number of bytes from a stream. If there is an error,
+ * Read the specified number of bytes from a stream. If there is an error,
* mark the socket dead.
*
* @param $sock The socket
function _fgets( $sock ) {
$result = fgets( $sock );
// fgets() may return a partial line if there is a select timeout after
- // a successful recv(), so we have to check for a timeout even if we
+ // a successful recv(), so we have to check for a timeout even if we
// got a string response.
$data = stream_get_meta_data( $sock );
if ( $data['timed_out'] ) {
if ( !is_resource( $f ) ) {
return;
}
- $n = stream_select( $r = array( $f ), $w = null, $e = null, 0, 0 );
+ $r = array( $f );
+ $w = null;
+ $e = null;
+ $n = stream_select( $r, $w, $e, 0, 0 );
while ( $n == 1 && !feof( $f ) ) {
fread( $f, 1024 );
- $n = stream_select( $r = array( $f ), $w = null, $e = null, 0, 0 );
+ $r = array( $f );
+ $w = null;
+ $e = null;
+ $n = stream_select( $r, $w, $e, 0, 0 );
}
}
public function unlock( $key ) {
return $this->client->unlock( $this->encodeKey( $key ) );
}
-
+
/**
* @param $key string
* @param $value int
*/
/**
- * A cache class that replicates all writes to multiple child caches. Reads
- * are implemented by reading from the caches in the order they are given in
+ * A cache class that replicates all writes to multiple child caches. Reads
+ * are implemented by reading from the caches in the order they are given in
* the configuration until a cache gives a positive result.
*
* @ingroup Cache
/**
* Factory function that creates a memcached client object.
*
- * This always uses the PHP client, since the PECL client has a different
- * hashing scheme and a different interpretation of the flags bitfield, so
+ * This always uses the PHP client, since the PECL client has a different
+ * hashing scheme and a different interpretation of the flags bitfield, so
* switching between the two clients randomly would be disasterous.
*
* @param $params array
}
}
- /**
+ /**
* Don't serialize the parent object, it is big, and not needed when it is
* a parameter to mergeForeign(), which is the only application of
* serializing at present.
wfProfileIn( __METHOD__."-paragraph" );
# No prefix (not in list)--go to paragraph mode
# XXX: use a stack for nestable elements like span, table and div
- $openmatch = preg_match('/(?:<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
+ $openmatch = preg_match('/(?:<table|<blockquote|<h1|<h2|<h3|<h4|<h5|<h6|<pre|<tr|<p|<ul|<ol|<dl|<li|<\\/tr|<\\/td|<\\/th)/iS', $t );
$closematch = preg_match(
'/(?:<\\/table|<\\/blockquote|<\\/h1|<\\/h2|<\\/h3|<\\/h4|<\\/h5|<\\/h6|'.
- '<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|'.$this->mUniqPrefix.'-pre|<\\/li|<\\/ul|<\\/ol|<\\/?center)/iS', $t );
+ '<td|<th|<\\/?div|<hr|<\\/pre|<\\/p|'.$this->mUniqPrefix.'-pre|<\\/li|<\\/ul|<\\/ol|<\\/dl|<\\/?center)/iS', $t );
if ( $openmatch or $closematch ) {
$paragraphStack = false;
# TODO bug 5718: paragraph closed
* @ingroup Parser
*/
class PPDStackElement {
- var $open, // Opening character (\n for heading)
- $close, // Matching closing character
+ var $open, // Opening character (\n for heading)
+ $close, // Matching closing character
$count, // Number of opening characters found (number of "=" for heading)
$parts, // Array of PPDPart objects describing pipe-separated parts.
$lineStart; // True if the open char appeared at the start of the input line. Not set for headings.
/** Associative array mapping module name to info associative array */
protected $moduleInfos = array();
-
+
/** Associative array mapping framework ids to a list of names of test suite modules */
/** like array( 'qunit' => array( 'mediawiki.tests.qunit.suites', 'ext.foo.tests', .. ), .. ) */
protected $testModuleNames = array();
public function getModuleNames() {
return array_keys( $this->moduleInfos );
}
-
- /**
+
+ /**
* Get a list of test module names for one (or all) frameworks.
* If the given framework id is unknkown, or if the in-object variable is not an array,
* then it will return an empty array.
* Combines an associative array mapping media type to CSS into a
* single stylesheet with "@media" blocks.
*
- * @param $styles Array: Array keyed by media type containing (arrays of) CSS strings.
+ * @param $stylePairs Array: Array keyed by media type containing (arrays of) CSS strings.
*
* @return Array
*/
protected $debugRaw = true;
/** Boolean: Whether mw.loader.state() call should be omitted */
protected $raw = false;
+ protected $targets = array( 'desktop' );
+
/**
* Array: Cache for mtime
* @par Usage:
// Lists of strings
case 'dependencies':
case 'messages':
+ case 'targets':
$this->{$member} = (array) $option;
break;
// Single strings
if ( $context->getDebug() ) {
$files = array_merge( $files, $this->debugScripts );
}
- return $files;
+
+ return array_unique( $files );
}
/**
public function getFlip( $context ) {
return $context->getDirection() === 'rtl';
}
+
+ /**
+ * Get target(s) for the module, eg ['desktop'] or ['desktop', 'mobile']
+ *
+ * @return array of strings
+ */
+ public function getTargets() {
+ return $this->targets;
+ }
+
}
* NOTE: The mtime of the module's messages is NOT automatically included.
* If you want this to happen, you'll need to call getMsgBlobMtime()
* yourself and take its result into consideration.
- *
+ *
* @param $context ResourceLoaderContext: Context object
* @return Integer: UNIX timestamp
*/
return self::$jsParser;
}
+ /**
+ * Get target(s) for the module, eg ['desktop'] or ['desktop', 'mobile']
+ * Default implementation hardcodes 'desktop'.
+ *
+ * @return array of strings
+ */
+ public function getTargets() {
+ return array( 'desktop' );
+ }
}
/**
* Gets group name
- *
+ *
* @return String: Name of group
*/
public function getGroup() {
'MediaWiki:Print.css' => array( 'type' => 'style', 'media' => 'print' ),
);
if ( $wgHandheldStyle ) {
- $pages['MediaWiki:Handheld.css'] = array(
- 'type' => 'style',
+ $pages['MediaWiki:Handheld.css'] = array(
+ 'type' => 'style',
'media' => 'handheld' );
}
return $pages;
/**
* Gets group name
- *
+ *
* @return String: Name of group
*/
public function getGroup() {
$out = '';
$registrations = array();
$resourceLoader = $context->getResourceLoader();
+ $target = $context->getRequest()->getVal( 'target', 'desktop' );
// Register sources
$out .= ResourceLoader::makeLoaderSourcesScript( $resourceLoader->getSources() );
// Register modules
foreach ( $resourceLoader->getModuleNames() as $name ) {
$module = $resourceLoader->getModule( $name );
+ $moduleTargets = $module->getTargets();
+ if ( !in_array( $target, $moduleTargets ) ) {
+ continue;
+ }
$deps = $module->getDependencies();
$group = $module->getGroup();
$source = $module->getSource();
$version = wfTimestamp( TS_ISO_8601_BASIC,
$module->getModifiedTime( $context ) );
$out .= ResourceLoader::makeCustomLoaderScript( $name, $version, $deps, $group, $source, $loader );
+ continue;
}
+
// Automatically register module
+ // getModifiedTime() is supposed to return a UNIX timestamp, but it doesn't always
+ // seem to do that, and custom implementations might forget. Coerce it to TS_UNIX
+ $moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) );
+ $mtime = max( $moduleMtime, wfTimestamp( TS_UNIX, $wgCacheEpoch ) );
+ // Modules without dependencies, a group or a foreign source pass two arguments (name, timestamp) to
+ // mw.loader.register()
+ if ( !count( $deps ) && $group === null && $source === 'local' ) {
+ $registrations[] = array( $name, $mtime );
+ }
+ // Modules with dependencies but no group or foreign source pass three arguments
+ // (name, timestamp, dependencies) to mw.loader.register()
+ elseif ( $group === null && $source === 'local' ) {
+ $registrations[] = array( $name, $mtime, $deps );
+ }
+ // Modules with a group but no foreign source pass four arguments (name, timestamp, dependencies, group)
+ // to mw.loader.register()
+ elseif ( $source === 'local' ) {
+ $registrations[] = array( $name, $mtime, $deps, $group );
+ }
+ // Modules with a foreign source pass five arguments (name, timestamp, dependencies, group, source)
+ // to mw.loader.register()
else {
- // getModifiedTime() is supposed to return a UNIX timestamp, but it doesn't always
- // seem to do that, and custom implementations might forget. Coerce it to TS_UNIX
- $moduleMtime = wfTimestamp( TS_UNIX, $module->getModifiedTime( $context ) );
- $mtime = max( $moduleMtime, wfTimestamp( TS_UNIX, $wgCacheEpoch ) );
- // Modules without dependencies, a group or a foreign source pass two arguments (name, timestamp) to
- // mw.loader.register()
- if ( !count( $deps ) && $group === null && $source === 'local' ) {
- $registrations[] = array( $name, $mtime );
- }
- // Modules with dependencies but no group or foreign source pass three arguments
- // (name, timestamp, dependencies) to mw.loader.register()
- elseif ( $group === null && $source === 'local' ) {
- $registrations[] = array( $name, $mtime, $deps );
- }
- // Modules with a group but no foreign source pass four arguments (name, timestamp, dependencies, group)
- // to mw.loader.register()
- elseif ( $source === 'local' ) {
- $registrations[] = array( $name, $mtime, $deps, $group );
- }
- // Modules with a foreign source pass five arguments (name, timestamp, dependencies, group, source)
- // to mw.loader.register()
- else {
- $registrations[] = array( $name, $mtime, $deps, $group, $source );
- }
+ $registrations[] = array( $name, $mtime, $deps, $group, $source );
}
}
$out .= ResourceLoader::makeLoaderRegisterScript( $registrations );
global $wgUser;
return $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $wgUser->getTouched() );
}
-
+
/**
* @param $context ResourceLoaderContext
* @return array
/**
* Really find the title match.
- * @return null|\Title
+ * @return null|Title
*/
private static function getNearMatchInternal( $searchterm ) {
global $wgContLang, $wgEnableSearchContributorsByIP;
$searchon = $this->db->strencode(join(',', $q));
$field = $this->getIndexField($fulltext);
-
+
// requires Net Search Extender or equivalent
//return " CONTAINS($field, '$searchon') > 0 ";
-
+
return " lcase($field) LIKE lcase('%$searchon%')";
}
* Return a partial WHERE clause to limit the search to the given namespaces
*
* @return String
- * @private
+ * @private
*/
function queryNamespaces() {
$namespaces = implode( ',', $this->namespaces );
$match = $this->parseQuery( $filteredTerm, $fulltext );
$page = $this->db->tableName( 'page' );
$searchindex = $this->db->tableName( 'searchindex' );
-
+
return 'SELECT page_id, page_namespace, page_title, ftindex.[RANK]' .
"FROM $page,FREETEXTTABLE($searchindex , $match, LANGUAGE 'English') as ftindex " .
'WHERE page_id=ftindex.[KEY] ';
* @param $id Integer
* @param $title String
* @param $text String
- * @return bool|\ResultWrapper
+ * @return bool|ResultWrapper
*/
function update( $id, $title, $text ) {
// We store the column data as UTF-8 byte order marked binary stream
- // because we are invoking the plain text IFilter on it so that, and we want it
+ // because we are invoking the plain text IFilter on it so that, and we want it
// to properly decode the stream as UTF-8. SQL doesn't support UTF8 as a data type
// but the indexer will correctly handle it by this method. Since all we are doing
// is passing this data to the indexer and never retrieving it via PHP, this will save space
*
* @param $id Integer
* @param $title String
- * @return bool|\ResultWrapper
+ * @return bool|ResultWrapper
*/
function updateTitle( $id, $title ) {
$table = $this->db->tableName( 'searchindex' );
* @ingroup Search
*/
class SearchOracle extends SearchEngine {
-
- private $reservedWords = array ('ABOUT' => 1,
- 'ACCUM' => 1,
- 'AND' => 1,
- 'BT' => 1,
- 'BTG' => 1,
- 'BTI' => 1,
+
+ private $reservedWords = array ('ABOUT' => 1,
+ 'ACCUM' => 1,
+ 'AND' => 1,
+ 'BT' => 1,
+ 'BTG' => 1,
+ 'BTI' => 1,
'BTP' => 1,
- 'FUZZY' => 1,
- 'HASPATH' => 1,
- 'INPATH' => 1,
- 'MINUS' => 1,
- 'NEAR' => 1,
+ 'FUZZY' => 1,
+ 'HASPATH' => 1,
+ 'INPATH' => 1,
+ 'MINUS' => 1,
+ 'NEAR' => 1,
'NOT' => 1,
- 'NT' => 1,
- 'NTG' => 1,
- 'NTI' => 1,
- 'NTP' => 1,
- 'OR' => 1,
- 'PT' => 1,
- 'RT' => 1,
+ 'NT' => 1,
+ 'NTG' => 1,
+ 'NTI' => 1,
+ 'NTP' => 1,
+ 'OR' => 1,
+ 'PT' => 1,
+ 'RT' => 1,
'SQE' => 1,
- 'SYN' => 1,
- 'TR' => 1,
- 'TRSYN' => 1,
- 'TT' => 1,
+ 'SYN' => 1,
+ 'TR' => 1,
+ 'TRSYN' => 1,
+ 'TT' => 1,
'WITHIN' => 1);
/**
), 'SearchOracle::update' );
// Sync the index
- // We need to specify the DB name (i.e. user/schema) here so that
+ // We need to specify the DB name (i.e. user/schema) here so that
// it can work from the installer, where
// ALTER SESSION SET CURRENT_SCHEMA = ...
// was used.
- $dbw->query( "CALL ctx_ddl.sync_index(" .
+ $dbw->query( "CALL ctx_ddl.sync_index(" .
$dbw->addQuotes( $dbw->getDBname() . '.' . $dbw->tableName( 'si_text_idx', 'raw' ) ) . ")" );
- $dbw->query( "CALL ctx_ddl.sync_index(" .
+ $dbw->query( "CALL ctx_ddl.sync_index(" .
$dbw->addQuotes( $dbw->getDBname() . '.' . $dbw->tableName( 'si_title_idx', 'raw' ) ) . ")" );
}
* @file
* @ingroup Site
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author John Erling Blad < jeblad@gmail.com >
* @author Daniel Kinzler
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @note : This actually makes an API request to the remote site, so beware that this function is slow and depends
* on an external service.
*
- * @note : If MW_PHPUNIT_TEST is defined or $egWBRemoteTitleNormalization is set to false, the call to the
- * external site is skipped, and the title is normalized using the local normalization rules as
- * implemented by the Title class.
+ * @note : If MW_PHPUNIT_TEST is defined, the call to the external site is skipped, and the title
+ * is normalized using the local normalization rules as implemented by the Title class.
*
* @see Site::normalizePageName
*
* @throws MWException
*/
public function normalizePageName( $pageName ) {
- global $egWBRemoteTitleNormalization;
// Check if we have strings as arguments.
if ( !is_string( $pageName ) ) {
$page = static::extractPageRecord( $data, $pageName );
if ( isset( $page['missing'] ) ) {
- wfDebugLog( "MediaWikiSite", "call to <$url> returned a missing page title! " . $ret );
+ wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for a missing page title! " . $ret );
+ return false;
+ }
+
+ if ( isset( $page['invalid'] ) ) {
+ wfDebugLog( "MediaWikiSite", "call to <$url> returned a marker for an invalid page title! " . $ret );
return false;
}
*
* @since 1.21
*
- * @param string|false
+ * @param $pagename string: Page name (default: false)
*
* @return string
*/
* @file
* @ingroup Site
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
interface Site {
* @file
* @ingroup Site
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class SiteArray extends GenericArrayObject implements SiteList {
* @file
* @ingroup Site
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
interface SiteList extends Countable, Traversable, Serializable, ArrayAccess {
* @file
* @ingroup Site
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
* @author Daniel Werner
*/
* @file
* @ingroup Site
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class Sites {
* @file
* @ingroup Site
*
- * @licence GNU GPL v2+
+ * @license GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class SitesTable extends ORMTable {
/**
* Returns whether a given ISBN (10 or 13) is valid. True indicates validity.
- * @param isbn string ISBN passed for check
+ * @param $isbn string ISBN passed for check
* @return bool
*/
public static function isValidISBN( $isbn ) {
*
* @since 1.20
*
- * @param {function} $computeFunction
+ * @param function $computeFunction
* @param array|mixed $args
* @param string|null $key
*
*
* @since 1.20
*
- * @param {function} $computeFunction
+ * @param function $computeFunction
* @param array $args
* @param string|null $key
*/
$this->opts['topOnly'] = false;
}
- $form = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'class' => 'mw-contributions-form' ) );
+ $form = Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'class' => 'mw-contributions-form' ) );
# Add hidden params for tracking except for parameters in $skipParameters
$skipParameters = array( 'namespace', 'nsInvert', 'deletedOnly', 'target', 'contribs', 'year', 'month', 'topOnly', 'associated' );
if ( $tagFilter ) {
$filterSelection =
- Xml::tags( 'td', array( 'class' => 'mw-label' ), array_shift( $tagFilter ) ) .
- Xml::tags( 'td', array( 'class' => 'mw-input' ), implode( ' ', $tagFilter ) );
+ Html::rawElement( 'td', array( 'class' => 'mw-label' ), array_shift( $tagFilter ) ) .
+ Html::rawElement( 'td', array( 'class' => 'mw-input' ), implode( ' ', $tagFilter ) );
} else {
- $filterSelection = Xml::tags( 'td', array( 'colspan' => 2 ), '' );
+ $filterSelection = Html::rawElement( 'td', array( 'colspan' => 2 ), '' );
}
- $targetSelection = Xml::tags( 'td', array( 'colspan' => 2 ),
+ $targetSelection = Html::rawElement( 'td', array( 'colspan' => 2 ),
Xml::radioLabel(
$this->msg( 'sp-contributions-newbies' )->text(),
'contribs',
''
)
) .
- Xml::tags( 'td', null,
+ Html::rawElement( 'td', null,
Html::namespaceSelector( array(
'selected' => $this->opts['namespace'],
'all' => '',
$deletedOnlyCheck = '';
}
- $extraOptions = Xml::tags( 'td', array( 'colspan' => 2 ),
+ $extraOptions = Html::rawElement( 'td', array( 'colspan' => 2 ),
$deletedOnlyCheck .
Html::rawElement( 'span', array( 'style' => 'white-space: nowrap' ),
Xml::checkLabel(
array( 'class' => 'mw-input' )
)
)
- ) ;
+ );
$dateSelectionAndSubmit = Xml::tags( 'td', array( 'colspan' => 2 ),
Xml::dateMenu(
$form .=
Xml::fieldset( $this->msg( 'sp-contributions-search' )->text() ) .
- Xml::openElement( 'table', array( 'class' => 'mw-contributions-table' ) ) .
- Xml::openElement( 'tr' ) .
- $targetSelection .
- Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) .
- $namespaceSelection .
- Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) .
- $filterSelection .
- Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) .
- $extraOptions .
- Xml::closeElement( 'tr' ) .
- Xml::openElement( 'tr' ) .
- $dateSelectionAndSubmit .
- Xml::closeElement( 'tr' ) .
- Xml::closeElement( 'table' );
+ Html::rawElement( 'table', array( 'class' => 'mw-contributions-table' ), "\n" .
+ Html::rawElement( 'tr', array(), $targetSelection ) . "\n" .
+ Html::rawElement( 'tr', array(), $namespaceSelection ) . "\n" .
+ Html::rawElement( 'tr', array(), $filterSelection ) . "\n" .
+ Html::rawElement( 'tr', array(), $extraOptions ) . "\n" .
+ Html::rawElement( 'tr', array(), $dateSelectionAndSubmit ) . "\n"
+ );
$explain = $this->msg( 'sp-contributions-explain' );
if ( $explain->exists() ) {
* Special page "deleted user contributions".
* Shows a list of the deleted contributions of a user.
*
- * @param $par String: (optional) user name of the user for which to show the contributions
+ * @param $par String: (optional) user name of the user for which to show the contributions
*/
function execute( $par ) {
global $wgQueryPageDefaultLimit;
$this->mTargetObj = $ret;
$form = new HTMLForm( $this->getFormFields(), $this->getContext() );
- $form->addPreText( $this->msg( 'emailpagetext' )->parse() );
+ // By now we are supposed to be sure that $this->mTarget is a user name
+ $form->addPreText( $this->msg( 'emailpagetext', $this->mTarget )->parse() );
$form->setSubmitTextMsg( 'emailsend' );
$form->setTitle( $this->getTitle() );
$form->setSubmitCallback( array( __CLASS__, 'uiSubmit' ) );
)
);
}
- $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) .
+ $s .= Xml::submitButton( $this->msg( 'linksearch-ok' )->text() ) .
'</fieldset>' .
Xml::closeElement( 'form' );
$out->addHTML( $s );
/**
* @param $context IContextSource
- * @param $par null|array
+ * @param $par array (Default null)
+ * @param $including boolean Whether this page is being transcluded in
+ * another page
*/
function __construct( IContextSource $context = null, $par = null, $including = null ) {
if ( $context ) {
$query['rcid'] = $result->rc_id;
}
- $plink = Linker::linkKnown(
+ // Linker::linkKnown() uses 'known' and 'noclasses' options. This breaks the colouration for stubs.
+ $plink = Linker::link(
$title,
null,
array( 'class' => 'mw-newpages-pagename' ),
$query,
- array( 'known' ) // Set explicitly to avoid the default of 'known','noclasses'. This breaks the colouration for stubs
+ array( 'known' )
);
$histLink = Linker::linkKnown(
$title,
$title = $this->msg( 'passwordreset-emailtitle' );
- $this->result = $firstUser->sendMail( $title->escaped(), $this->email->escaped() );
+ $this->result = $firstUser->sendMail( $title->escaped(), $this->email->text() );
// Blank the email if the user is not supposed to see it
if( !isset( $data['Capture'] ) || !$data['Capture'] ) {
$opts = parent::getDefaultOptions();
$opts->add( 'target', '' );
$opts->add( 'showlinkedto', false );
- $opts->add( 'tagfilter', '' );
return $opts;
}
* @return ResultWrapper
*/
function listRevisions() {
- global $wgContentHandlerNoDB;
+ global $wgContentHandlerUseDB;
$dbr = wfGetDB( DB_SLAVE );
'ar_comment', 'ar_len', 'ar_deleted', 'ar_rev_id', 'ar_sha1',
);
- if ( !$wgContentHandlerNoDB ) {
+ if ( $wgContentHandlerUseDB ) {
$fields[] = 'ar_content_format';
$fields[] = 'ar_content_model';
}
* @return Revision
*/
function getRevision( $timestamp ) {
- global $wgContentHandlerNoDB;
+ global $wgContentHandlerUseDB;
$dbr = wfGetDB( DB_SLAVE );
'ar_sha1',
);
- if ( !$wgContentHandlerNoDB ) {
+ if ( $wgContentHandlerUseDB ) {
$fields[] = 'ar_content_format';
$fields[] = 'ar_content_model';
}
* @return Status, containing the number of revisions restored on success
*/
private function undeleteRevisions( $timestamps, $unsuppress = false, $comment = '' ) {
- global $wgContentHandlerNoDB;
+ global $wgContentHandlerUseDB;
if ( wfReadOnly() ) {
throw new ReadOnlyError();
'ar_len',
'ar_sha1');
- if ( !$wgContentHandlerNoDB ) {
+ if ( $wgContentHandlerUseDB ) {
$fields[] = 'ar_content_format';
$fields[] = 'ar_content_model';
}
* @return Array: descriptor array
*/
protected function getSourceSection() {
+ global $wgCopyUploadsFromSpecialUpload;
+
if ( $this->mSessionKey ) {
return array(
'SessionKey' => array(
);
}
- $canUploadByUrl = UploadFromUrl::isEnabled() && UploadFromUrl::isAllowed( $this->getUser() );
+ $canUploadByUrl = UploadFromUrl::isEnabled()
+ && UploadFromUrl::isAllowed( $this->getUser() )
+ && $wgCopyUploadsFromSpecialUpload;
$radio = $canUploadByUrl;
$selectedSourceType = strtolower( $this->getRequest()->getText( 'wpSourceType', 'File' ) );
*/
protected function showEditUserGroupsForm( $user, $groups ) {
$list = array();
+ $membersList = array();
foreach( $groups as $group ) {
$list[] = self::buildGroupLink( $group );
+ $membersList[] = self::buildGroupMemberLink( $group );
}
- $autolist = array();
+ $autoList = array();
+ $autoMembersList = array();
if ( $user instanceof User ) {
foreach( Autopromote::getAutopromoteGroups( $user ) as $group ) {
- $autolist[] = self::buildGroupLink( $group );
+ $autoList[] = self::buildGroupLink( $group );
+ $autoMembersList[] = self::buildGroupMemberLink( $group );
}
}
+ $language = $this->getLanguage();
+ $displayedList = $this->msg( 'userrights-groupsmember-type',
+ $language->listToText( $list ),
+ $language->listToText( $membersList )
+ )->plain();
+ $displayedAutolist = $this->msg( 'userrights-groupsmember-type',
+ $language->listToText( $autoList ),
+ $language->listToText( $autoMembersList )
+ )->plain();
+
$grouplist = '';
$count = count( $list );
- if( $count > 0 ) {
+ if ( $count > 0 ) {
$grouplist = $this->msg( 'userrights-groupsmember', $count, $user->getName() )->parse();
- $grouplist = '<p>' . $grouplist . ' ' . $this->getLanguage()->listToText( $list ) . "</p>\n";
+ $grouplist = '<p>' . $grouplist . ' ' . $displayedList . "</p>\n";
}
- $count = count( $autolist );
- if( $count > 0 ) {
+ $count = count( $autoList );
+ if ( $count > 0 ) {
$autogrouplistintro = $this->msg( 'userrights-groupsmember-auto', $count, $user->getName() )->parse();
- $grouplist .= '<p>' . $autogrouplistintro . ' ' . $this->getLanguage()->listToText( $autolist ) . "</p>\n";
+ $grouplist .= '<p>' . $autogrouplistintro . ' ' . $displayedAutolist . "</p>\n";
}
$userToolLinks = Linker::userToolLinks(
* @return string
*/
private static function buildGroupLink( $group ) {
- static $cache = array();
- if( !isset( $cache[$group] ) )
- $cache[$group] = User::makeGroupLinkHtml( $group, htmlspecialchars( User::getGroupName( $group ) ) );
- return $cache[$group];
+ return User::makeGroupLinkHtml( $group, User::getGroupName( $group ) );
+ }
+
+ /**
+ * Format a link to a group member description page
+ *
+ * @param $group string
+ * @return string
+ */
+ private static function buildGroupMemberLink( $group ) {
+ return User::makeGroupLinkHtml( $group, User::getGroupMember( $group ) );
}
/**
}
# Build the HTML table
- $ret .= Xml::openElement( 'table', array( 'class' => 'mw-userrights-groups' ) ) .
+ $ret .= Xml::openElement( 'table', array( 'class' => 'mw-userrights-groups' ) ) .
"<tr>\n";
foreach( $columns as $name => $column ) {
if( $column === array() )
* main()
*/
public function execute( $par ) {
- global $wgSpecialVersionShowHooks;
+ global $wgSpecialVersionShowHooks, $IP;
$this->setHeaders();
$this->outputHeader();
$out = $this->getOutput();
$out->allowClickjacking();
- $text =
- $this->getMediaWikiCredits() .
- $this->softwareInformation() .
- $this->getEntryPointInfo() .
- $this->getExtensionCredits();
- if ( $wgSpecialVersionShowHooks ) {
- $text .= $this->getWgHooks();
- }
+ if( $par !== 'Credits' ) {
+ $text =
+ $this->getMediaWikiCredits() .
+ $this->softwareInformation() .
+ $this->getEntryPointInfo() .
+ $this->getExtensionCredits();
+ if ( $wgSpecialVersionShowHooks ) {
+ $text .= $this->getWgHooks();
+ }
- $out->addWikiText( $text );
- $out->addHTML( $this->IPInfo() );
+ $out->addWikiText( $text );
+ $out->addHTML( $this->IPInfo() );
- if ( $this->getRequest()->getVal( 'easteregg' ) ) {
- if ( $this->showEasterEgg() ) {
- // TODO: put something interesting here
+ if ( $this->getRequest()->getVal( 'easteregg' ) ) {
+ if ( $this->showEasterEgg() ) {
+ // TODO: put something interesting here
+ }
}
+ } else {
+ // Credits sub page
+
+ // Header
+ $out->addHTML( wfMessage( 'version-credits-summary' )->parseAsBlock() );
+
+ $wikiText = file_get_contents( $IP . '/CREDITS' );
+
+ // Take everything from the first section onwards, to remove the (not localized) header
+ $wikiText = substr( $wikiText, strpos( $wikiText, '==' ) );
+
+ $out->addWikiText( $wikiText );
}
}
'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
'Timo Tijhof',
- '[{{SERVER}}{{SCRIPTPATH}}/CREDITS ' .
+ '[[Special:Version/Credits|' .
wfMessage( 'version-poweredby-others' )->text() .
- ']'
+ ']]'
);
return wfMessage( 'version-poweredby-credits', date( 'Y' ),
'helptext' => $helptext,
);
}
-
+
function execute() {
if( $this->data['message'] ) {
?>
if ( isset( $this->data['extraInput'] ) && is_array( $this->data['extraInput'] ) ) {
foreach ( $this->data['extraInput'] as $inputItem ) { ?>
<tr>
- <?php
+ <?php
if ( !empty( $inputItem['msg'] ) && $inputItem['type'] != 'checkbox' ) {
- ?><td class="mw-label"><label for="<?php
+ ?><td class="mw-label"><label for="<?php
echo htmlspecialchars( $inputItem['name'] ); ?>"><?php
$this->msgWiki( $inputItem['msg'] ) ?></label><?php
} else {
<input type="<?php echo htmlspecialchars( $inputItem['type'] ) ?>" name="<?php
echo htmlspecialchars( $inputItem['name'] ); ?>"
tabindex="<?php echo $tabIndex++; ?>"
- value="<?php
+ value="<?php
if ( $inputItem['type'] != 'checkbox' ) {
echo htmlspecialchars( $inputItem['value'] );
} else {
echo '1';
- }
+ }
?>" id="<?php echo htmlspecialchars( $inputItem['name'] ); ?>"
- <?php
+ <?php
if ( $inputItem['type'] == 'checkbox' && !empty( $inputItem['value'] ) )
- echo 'checked="checked"';
- ?> /> <?php
+ echo 'checked="checked"';
+ ?> /> <?php
if ( $inputItem['type'] == 'checkbox' && !empty( $inputItem['msg'] ) ) {
?>
<label for="<?php echo htmlspecialchars( $inputItem['name'] ); ?>"><?php
<?php } ?>
</td>
</tr>
-<?php
-
+<?php
}
}
?>
/**
* Getter for file metadata.
*
- * @param key String: key under which file information is stored
+ * @param $key String: key under which file information is stored
* @return Array
*/
public function getMetadata ( $key ) {
/**
* Getter for fileProps
*
- * @param key String: key under which file information is stored
+ * @param $key String: key under which file information is stored
* @return Array
*/
public function getFileProps ( $key ) {
return [unichr( int( i[2:7], 16 ) ) for i in args if i[2:7]]
# DEFINE
-UNIHAN_VER = '5.2.0'
+UNIHAN_VER = '6.2.0'
SF_MIRROR = 'dfn'
-SCIM_TABLES_VER = '0.5.10'
-SCIM_PINYIN_VER = '0.5.91'
+SCIM_TABLES_VER = '0.5.11'
+SCIM_PINYIN_VER = '0.5.92'
LIBTABE_VER = '0.2.3'
# END OF DEFINE
/**
* Guess if a text is written in a variant. This should be implemented in subclasses.
*
- * @param string $text the text to be checked
- * @param string $variant language code of the variant to be checked for
- * @return bool true if $text appears to be written in $variant, false if not
+ * @param string $text the text to be checked
+ * @param string $variant language code of the variant to be checked for
+ * @return bool true if $text appears to be written in $variant, false if not
*
* @author Nikola Smolenski <smolensk@eunet.rs>
* @since 1.19
$bidtable[$v] = $to;
} elseif ( count( $u ) == 2 ) {
$from = trim( $u[0] );
- $v = trim( $u[1] );
+ $v = trim( $u[1] );
if ( array_key_exists( $v, $unidtable )
&& !is_array( $unidtable[$v] )
&& $to
if ( strcasecmp( $in, 'x' ) == 0 && strcasecmp( $out, 'utf-8' ) == 0 ) {
return preg_replace_callback (
'/([cghjsu]x?)((?:xx)*)(?!x)/i',
- array( $this, 'strrtxuCallback' ), $string );
+ array( $this, 'strrtxuCallback' ), $string );
} elseif ( strcasecmp( $in, 'UTF-8' ) == 0 && strcasecmp( $out, 'x' ) == 0 ) {
# Double Xs only if they follow cxapelutaj literoj.
return preg_replace_callback(
'qbbrowse' => 'Lop',
'qbedit' => 'Andam',
'qbpageoptions' => 'Ôn nyoe',
-'qbpageinfo' => 'Asoe ôn',
'qbmyoptions' => 'Ôn lôn',
'qbspecialpages' => 'Ôn kusuih',
'faq' => 'FAQ',
'qbbrowse' => 'ara',
'qbedit' => 'modifi el page (baddelha)',
'qbpageoptions' => 'هذه الصفحة',
-'qbpageinfo' => 'سياق النص',
'qbmyoptions' => 'صفحاتي',
'qbspecialpages' => 'الصفحات الخاصة',
'faq' => 'الأسئلة الأكثر تكرارا',
'qbbrowse' => 'Shfleto',
'qbedit' => 'Redakto',
'qbpageoptions' => 'Kjo faqe',
-'qbpageinfo' => 'Konteksti',
'qbmyoptions' => 'Faqet e mija',
'qbspecialpages' => 'Faqet speciale',
'faq' => 'Pyetjet e shpeshta',
'qbbrowse' => 'Onbirȝe',
'qbedit' => 'Ādihte',
'qbpageoptions' => 'Þēos sīde',
-'qbpageinfo' => 'Ȝeƿef',
'qbmyoptions' => 'Mīna sīdan',
'qbspecialpages' => 'Syndriȝa sīdan',
'faq' => 'Oftost ascoda ascunȝa',
* @author Riadismet
* @author Samer
* @author Sami Lab
+ * @author TTMTT
* @author Tarawneh
* @author TheEgyptian
* @author Uwe a
'vector-action-protect' => 'احم',
'vector-action-undelete' => 'استرجع الحذف',
'vector-action-unprotect' => 'غير الحماية',
-'vector-simplesearch-preference' => 'مكّن مقترحات البحث المُحسّنة (لواجهة فكتور فقط)',
+'vector-simplesearch-preference' => 'مكّن شريط البحث المبسط (لواجهة فكتور فقط)',
'vector-view-create' => 'أنشئ',
'vector-view-edit' => 'تعديل',
'vector-view-history' => 'اعرض التاريخ',
'youhavenewmessages' => 'توجد لديك $1 ($2).',
'newmessageslink' => 'رسائل جديدة',
'newmessagesdifflink' => 'آخر تغيير',
-'youhavenewmessagesfromusers' => 'لديك $1 من {{PLURAL:$3|مستخدم آخر|$3 مستخدمين}} ($2).',
+'youhavenewmessagesfromusers' => 'لديك $1 من {{PLURAL:$3||مستخدم واحد|مستخدمين اثنين|$3 مستخدمين|$3 مستخدماً|$3 مستخدم}} ($2).',
'youhavenewmessagesmanyusers' => 'لديك $1 من مستخدمين كثر ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|رسالة جديدة|رسائل جديدة}}',
'newmessagesdifflinkplural' => 'آخر {{PLURAL:$1|تغيير|تغييرات}}',
'emailauthenticated' => 'تم تأكيد بريدك الإلكتروني في $2 الساعة $3.',
'emailnotauthenticated' => 'لم يتم التحقق من بريدك الإلكتروني.
لن يتم إرسال رسائل لأي من الميزات التالية.',
-'noemailprefs' => 'حدد عنوان بريد إلكتروني في تفضيلاتك لهذه الخصائص لتعمل.',
+'noemailprefs' => 'حدد عنوان بريد إلكتروني في تفضيلاتك لتفعيل هذه الخصائص.',
'emailconfirmlink' => 'أكد عنوان بريدك الإلكتروني',
'invalidemailaddress' => 'لا يمكن قبول عنوان البريد الإلكتروني حيث تبدو صيغته خاطئة.
ضع عنوانا مضبوطا أو أفرغ هذا الحقل.',
'edit-already-exists' => 'لم يمكن إنشاء صفحة جديدة.
هي موجودة بالفعل.',
'defaultmessagetext' => 'نص الرسالة الافتراضي',
+'content-failed-to-parse' => 'فشل في تحليل $2 محتوى لـ $1 نموذج: $3',
+'invalid-content-data' => 'بيانات المحتوى غير صالحة',
+'content-not-allowed-here' => '"$1" المحتوى غير مسموح على صفحة [[$2]]',
+
+# Content models
+'content-model-javascript' => 'جافاسكربت',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''تحذير:''' هذه الصفحة تحتوي على استدعاءات دالة محلل كثيرة مكلفة.
'email' => 'البريد الإلكتروني',
'prefs-help-realname' => 'الاسم الحقيقي اختياري.
لو اخترت أن توفره، فسيستخدم في الإشارة إلى عملك.',
-'prefs-help-email' => 'عÙ\86Ù\88اÙ\86 اÙ\84برÙ\8aد اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a Ù\87Ù\88 Ø£Ù\85ر اختÙ\8aارÙ\8aØ\8c Ù\88Ù\84Ù\83Ù\86 ستØتاج Ù\84إعادة تعÙ\8aÙ\8aÙ\86 Ù\83Ù\84Ù\85Ø© اÙ\84Ù\85رÙ\88رØ\8c Ø¥Ù\86 نسيت كلمة المرور الخاصة بك.',
-'prefs-help-email-others' => 'Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø£Ù\8aضا اختÙ\8aار Ù\84Ù\84سÙ\85Ø§Ø Ù\84Ù\84آخرÙ\8aÙ\86 اÙ\84اتصاÙ\84 بÙ\83 عÙ\86 طرÙ\8aÙ\82 صÙ\81ØØ© اÙ\84Ù\85ستخدÙ\85 Ø£Ù\88 Ù\86Ù\82اش اÙ\84Ù\85ستخدÙ\85 اÙ\84خاص بÙ\83 دÙ\88Ù\86 اÙ\84Øاجة Ø¥Ù\84Ù\89 اÙ\84Ù\83Ø´Ù\81 عÙ\86 اÙ\84Ù\87Ù\88Ù\8aØ© اÙ\84خاصة بÙ\83.',
+'prefs-help-email' => 'تØدÙ\8aد عÙ\86Ù\88اÙ\86 اÙ\84برÙ\8aد اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a اختÙ\8aارÙ\8aØ\8c Ù\88Ù\84Ù\83Ù\86Ù\87 Ù\8aÙ\84زÙ\85 Ù\84إعادة تعÙ\8aÙ\8aÙ\86 Ù\83Ù\84Ù\85Ø© اÙ\84Ù\85رÙ\88ر Ù\81Ù\8a ØاÙ\84 نسيت كلمة المرور الخاصة بك.',
+'prefs-help-email-others' => 'Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø£Ù\8aضا Ø£Ù\86 {{GENDER:$1|تسÙ\85Ø|تسÙ\85ØÙ\8a}} Ù\84Ù\84آخرÙ\8aÙ\86 اÙ\84اتصاÙ\84 بÙ\83 عÙ\86 طرÙ\8aÙ\82 Ù\88صÙ\84Ø© Ù\81Ù\8a صÙ\81ØØ© اÙ\84Ù\85ستخدÙ\85 Ø£Ù\88 Ù\86Ù\82اش اÙ\84Ù\85ستخدÙ\85 اÙ\84خاصة بÙ\83. Ù\84ا Ù\8aÙ\83Ø´Ù\81 برÙ\8aدÙ\83 اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a عÙ\86دÙ\85ا Ù\8aراسÙ\84Ù\83 Ø£Øد بÙ\87Ø°Ù\87 اÙ\84طرÙ\8aÙ\82Ø©Ø\8c Ù\88Ù\84Ù\83Ù\86 إذا راسÙ\84ت Ø£ØداÙ\8b سÙ\8aرÙ\89 برÙ\8aدÙ\83 اÙ\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a.',
'prefs-help-email-required' => 'عنوان البريد الإلكتروني مطلوب.',
'prefs-info' => 'المعلومات الأساسية',
'prefs-i18n' => 'الترجمة',
'shared-repo' => 'مستودع مشترك',
'shared-repo-name-wikimediacommons' => 'ويكيميديا كومنز',
'filepage.css' => '/* CSS المعروض هنا سيضمن في صفحات وصف الملفات، أيضا على الويكيات الأجنبية */',
-'upload-disallowed-here' => 'لأسف لا يمكنك تعديل هذه الصورة.',
+'upload-disallowed-here' => 'للأسف لا يمكنك تعديل هذه الصورة.',
# File reversion
'filerevert' => 'استرجع $1',
'undeletedrevisions-files' => 'أسترجعت {{PLURAL:$1||مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}} و{{PLURAL:$2||ملف واحد|ملفان|$2 ملفات|$2 ملفًا|$2 ملف}}',
'undeletedfiles' => 'أسترجع {{PLURAL:$1||ملف واحد|ملفان|$1 ملفات|$1 ملفًا|$1 ملف}}',
'cannotundelete' => 'فشل الاسترجاع؛
-ربما قام شخص آخر باسترجاع الصفحة بالفعل.',
+$1',
'undeletedpage' => "'''تم استرجاع $1'''
راجع [[Special:Log/delete|سجل الحدف]] لمعاينة عمليات الحذف والاسترجاعات الحديثة.",
'immobile-target-namespace-iw' => 'وصلة الإنترويكي ليست هدفاً صالحاً لنقل صفحة.',
'immobile-source-page' => 'هذه الصفحة غير قابلة للنقل.',
'immobile-target-page' => 'غير قادر على النقل إلى العنوان الوجهة هذا.',
+'bad-target-model' => 'الوجهة المطلوبة تستخدم نموذج محتوى مختلف. لا يمكن تحويل من $1 إلى $2.',
'imagenocrossnamespace' => 'لا يمكن نقل الملف إلى نطاق غير نطاق الملفات',
'nonfile-cannot-move-to-file' => 'لا يمكن نقل غير الملفات إلى نطاق الملفات',
'imagetypemismatch' => 'امتداد الملف الجديد لا يطابق نوعه',
'spam_deleting' => 'جميع النسخ تحوي رابطا إلى $1، يتم الحذف',
# Info page
-'pageinfo-title' => 'المعلومات ل"$1"',
+'pageinfo-title' => 'المعلومات عن «$1»',
+'pageinfo-not-current' => 'لا يمكن إظهار المعلومات إلا عن المراجعة الأخيرة للصفحة',
'pageinfo-header-basic' => 'المعلومات الأساسية',
'pageinfo-header-edits' => 'التعديلات',
'pageinfo-header-restrictions' => 'حماية الصفحة',
'pageinfo-robot-noindex' => 'غير قابلة للفهرسة',
'pageinfo-views' => 'عدد المشاهدات',
'pageinfo-watchers' => 'عدد المراقبين',
-'pageinfo-redirects-name' => 'التوجيهات نحو هذه الصفحة',
+'pageinfo-redirects-name' => 'التحويلات إلى هذه الصفحة',
'pageinfo-subpages-name' => 'الصفحات الفرعية لهذه الصفحة',
-'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|إعادة توجيه|إعادة توجيهات}}; $3 {{PLURAL:$3|غير إعادة توجيه|غير إعادة التوجيهات}})',
+'pageinfo-subpages-value' => '$1 ({{PLURAL:$2|لا تحويلات|تحويلة واحدة|تحويلتان|$2 تحويلات|$2 تحويلة}}؛ $3 {{PLURAL:$3|من غير التحويلات}})',
'pageinfo-firstuser' => 'منشئ الصفحة',
'pageinfo-firsttime' => 'تاريخ إنشاء الصفحة',
'pageinfo-lastuser' => 'آخر محرر',
'pageinfo-lasttime' => 'تاريخ آخر تعديل',
'pageinfo-edits' => 'عدد التعديلات',
'pageinfo-authors' => 'عدد المؤلفين المختلفين',
-'pageinfo-recent-edits' => 'عدد التعديلات الأخيرة (خلال $1 يوم/أيام)',
+'pageinfo-recent-edits' => 'عدد التعديلات الأخيرة (خلال {{PLURAL:$1||يوم واحد|يومين|$1 أيام|$1 يوماً|$1 يوم}})',
'pageinfo-recent-authors' => 'عدد المؤلفين المختلفين الأخيرين',
-'pageinfo-magic-words' => 'السحرية {{PLURAL:$1|الكلمة|الكلمات}} ($1)',
-'pageinfo-hidden-categories' => 'مخفية {{PLURAL:$1|فئة|فئات}} ($1)',
-'pageinfo-templates' => 'متضمنة {{PLURAL:$1|قالب|قوالب}} ($1)',
+'pageinfo-magic-words' => '{{PLURAL:$1|لا كلمات سحرية|الكلمة|الكلمات}} السحرية ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|لا تصنيفات مخفية|التصنيف المخفي|التصنيفان المخفيان|التصنيفات المخفية ($1)}}',
+'pageinfo-templates' => '{{PLURAL:$1|لا قوالب مضمنة|القالب المضمن|القالبان المضمنان|القوالب المضمنة ($1)}}',
+'pageinfo-toolboxlink' => 'معلومات عن هذه الصفحة',
+'pageinfo-redirectsto' => 'تحويلة إلى',
+'pageinfo-redirectsto-info' => 'معلومات',
+'pageinfo-contentpage' => 'محسوبة كصفحة محتوى',
+'pageinfo-contentpage-yes' => 'نعم',
+'pageinfo-protect-cascading' => 'مصدر توريث الحماية للصفحات المدمجة',
+'pageinfo-protect-cascading-yes' => 'نعم',
+'pageinfo-protect-cascading-from' => 'حماية الصفحات المدمجة موروثة من',
# Skin names
'skinname-standard' => 'كلاسيك',
# Scary transclusion
'scarytranscludedisabled' => '[التضمين بالإنترويكي معطل]',
'scarytranscludefailed' => '[البحث عن القالب فشل ل$1]',
+'scarytranscludefailed-httpstatus' => '[فشل جلب القالب لـ $1: HTTP $2]',
'scarytranscludetoolong' => '[المسار طويل للغاية]',
# Delete conflict
# Durations
'duration-seconds' => '{{PLURAL:$1|أقل من ثانية|ثانية واحدة|ثانيتان|$1 ثوانٍ|$1 ثانية}}',
'duration-minutes' => '{{PLURAL:$1|أقل من دقيقة|دقيقة واحدة|دقيقتان|$1 دقائق|$1 دقيقة}}',
-'duration-hours' => '({{PLURAL:$1||ساعة واحد|ساعتان|$1 ساعات|$1 ساعة}})',
+'duration-hours' => '({{PLURAL:$1||ساعة واحدة|ساعتان|$1 ساعات|$1 ساعة}})',
'duration-days' => '{{PLURAL:$1||يوم واحد|يومان|$1 أيام|$1 يومًا|$1 يوم}}',
'duration-weeks' => '{{PLURAL:$1||أسبوع واحد|أسبوعان|$1 أسابيع|$1 أسبوعًا|$1 أسبوع}}',
'duration-years' => '{{PLURAL: $1||سنة واحدة|سنتان|$1 سنين|$1 سنة}}',
'category_header' => 'ܦܐܬܬ̈ܐ ܒܣܕܪܐ ܕ "$1"',
'subcategories' => 'ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ',
'category-media-header' => 'ܡܝܕܝܐ ܒܣܕܪܐ ܕ "$1"',
-'category-empty' => "''ܗܢܐ ܣܕܪܐ ܗܫܐ ܠܝܬ ܒܗ ܦܐܬܬ̈ܐ ܐܘ ܡܝܕܝܐ.''",
+'category-empty' => "''ܗܢܐ ܣܕܪܐ ܗܫܐܝܬ ܠܝܬ ܒܗ ܦܐܬܬ̈ܐ ܐܘ ܡܝܕܝܐ.''",
'hidden-categories' => '{{PLURAL:$1|ܣܕܪܐ ܛܘܫܝܐ|ܣܕܪ̈ܐ ܛܘܫܝܐ}}',
'hidden-category-category' => 'ܣܕܪ̈ܐ ܛܘܫܝ̈ܐ',
'category-subcat-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܗܢܐ ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ ܒܠܚܘܕ.|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܕܐܬܝܢ}}، ܡܢ ܣܘܝܟܐ ܕ $2.}}',
'category-subcat-count-limited' => 'ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܗܢܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܗܠܝܢ}}.',
-'category-article-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܦܐܬܐ ܗܕܐ ܒܠܚܘܕ.|ܐܝܬ {{PLURAL:$1|ܦܐܬܐ|$1 ܦܐܬܬ̈ܐ}} ܒܣܕܪܐ ܗܢܐ، ܡܢ ܣܘܝܟܐ ܕ$2.}}',
+'category-article-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܦܐܬܐ ܗܕܐ ܒܠܚܘܕ.|ܐܝܬ {{PLURAL:$1|ܦܐܬܐ ܕܐܬܝܐ|$1 ܦܐܬܬ̈ܐ ܕܐܬܝܢ}} ܒܣܕܪܐ ܗܢܐ, ܡܢ ܣܘܝܟܐ ܕ $2.}}',
'category-article-count-limited' => '{{PLURAL:$1|ܦܐܬܐ ܗܕܐ|$1 ܦܐܬܬ̈ܐ ܗܠܝܢ}} ܒܣܕܪܐ ܗܢܐ.',
-'category-file-count' => '{{PLURAL:$2|Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü\90Ü\9dܬ Ü\92Ü\97 Ü Ü¦Ü¦Ü\90 Ü\97Ü¢Ü\90 Ü\92Ü Ü\9aÜ\98Ü\95.|{{PLURAL:$1|Ü Ü¦Ü¦Ü\90 Ü\95Ü\90ܬÜ\90 Ü\90Ü\9dܬÜ\98Ü\97Ü\9d|$1 Ü Ü¦Ü¦Ì\88Ü\90 Ü\95Ü\90ܬÜ\9dÜ¢ Ü\90Ü\9dܬÜ\9dÜ\97Ü\98Ü¢}} Ü\92Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90Ø\8c Ü¡Ü¢ Ü£Ü\98Ü\9dÜ\9fÜ\90 Ü\95$2 Ü\9fÜ Ü¢Ü\90Ü\9dܬ.}}',
+'category-file-count' => '{{PLURAL:$2|Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90 Ü\90Ü\9dܬ Ü\92Ü\97 Ü Ü¦Ü¦Ü\90 Ü\95Ü\90ܬÜ\90 Ü\92Ü Ü\9aÜ\98Ü\95.|{{PLURAL:$1|Ü Ü¦Ü¦Ü\90 Ü\95Ü\90ܬÜ\90 Ü\90Ü\9dܬÜ\98Ü\97Ü\9d|$1 Ü Ü¦Ü¦Ì\88Ü\90 Ü\95Ü\90ܬÜ\9dÜ¢ Ü\90Ü\9dܬÜ\9dÜ\97Ü\98Ü¢}} Ü\92Ü£Ü\95ܪÜ\90 Ü\97Ü¢Ü\90Ø\8c Ü¡Ü¢ Ü£Ü\98Ü\9dÜ\9fÜ\90 Ü\95 $2.}}',
'category-file-count-limited' => 'ܐܝܬ {{PLURAL:$1|ܠܦܦܐ ܕܐܬܐ|$1 ܠܦܦ̈ܐ ܕܐܬܝܢ}} ܒܣܕܪܐ ܗܫܝܐ.',
'listingcontinuesabbrev' => '(ܫܘܠܡܐ)',
'loginsuccesstitle' => 'ܥܠܠܐ ܓܡܪ',
'loginsuccess' => "'''ܗܫܐ ܥܠܝܠܐ ܐܢܬ ܒ{{SITENAME}} ܒܫܡ \"\$1\".'''",
'nouserspecified' => 'ܘܠܐ ܠܟ ܕܬܚܡ ܫܡܐ ܕܡܦܠܚܢܐ',
+'wrongpassword' => 'ܡܠܬܐ ܕܥܠܠܐ ܠܐ ܬܪܝܨܬܐ ܐܥܠܬ.
+ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ.',
+'wrongpasswordempty' => 'ܡܠܬܐ ܕܥܠܠܐ ܕܐܥܠܬ ܣܦܝܩܬܐ ܐܝܬܝܗ.
+ܒܒܥܘ ܡܢܟ ܕܬܢܣܐ ܙܒܢ ܐܚܪܝܢ.',
'mailmypassword' => 'ܫܕܪ ܠܝ ܡܠܬܐ ܚܕܬܐ ܕܥܠܠܐ',
'passwordremindertitle' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ ܚܕܬܐ ܠ{{SITENAME}}',
'noemail' => 'ܠܝܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܠܡܦܠܚܢܐ "$1".',
'note' => "'''ܡܥܝܪܢܘܬܐ:'''",
'previewnote' => "'''ܕܟܪ ܕܗܢܘ ܚܝܪܐ ܩܕܡܝܐ ܒܠܚܘܕ'''.
ܫܘܚܠܦ̈ܐ ܕܝܠܟ ܠܐ ܐܬܠܒܟܘ ܥܕܡܐ ܠܗܫܐ!",
-'continue-editing' => 'Ü\90Ü\93ܡܪ Ü ܫܘܚܠܦܐ',
+'continue-editing' => 'Ü\99Ü Ü Ü\9dܬÜ\92Ü\90 Ü\95ܫܘܚܠܦܐ',
'editing' => 'ܫܚܠܦܬܐ ܕ $1',
'creating' => 'ܣܘܝܡܐ ܕ $1',
'editingsection' => 'ܫܚܠܦܬܐ ܕ $1 (ܡܢܬܐ)',
'searchprofile-images' => 'ܡܝܕ̈ܝܐ ܣܓܝܐ̈ܐ (Multimedia)',
'searchprofile-everything' => 'ܟܠ ܡܕܡ',
'searchprofile-advanced' => 'ܡܬܩܕܡܢܐ',
-'searchprofile-articles-tooltip' => 'ܒܨܝ ܒ $1',
+'searchprofile-articles-tooltip' => 'ܒܨܝ ܒܓܘ $1',
'searchprofile-project-tooltip' => 'ܒܨܝ ܒ $1',
'searchprofile-images-tooltip' => 'ܒܨܝ ܥܠ ܠܦܦ̈ܐ',
'search-result-size' => '$1 ({{PLURAL:$2|1 ܡܠܬܐ|$2 ܡܠ̈ܐ}})',
'search-redirect' => '(ܨܝܒ $1)',
'search-section' => '(ܡܢܬܐ $1)',
-'search-suggest' => 'Ü£Ü\9fÜ ܐܢܬ: $1',
+'search-suggest' => 'Ü\90ܪÜ\90 Ü£Ü\9fÜ Ü\97Ü\98Ü\90 ܐܢܬ: $1',
'search-interwiki-caption' => 'ܬܪ̈ܡܝܬܐ ܐܚܘܬ̈ܐ',
'search-interwiki-default' => 'ܦܠܛ̈ܐ ܕ $1:',
'search-interwiki-more' => '(ܝܬܝܪ)',
'filehist-dimensions' => 'ܩܝܡ̈ܐ',
'filehist-filesize' => 'ܥܓܪܐ ܕܠܦܦܐ',
'filehist-comment' => 'ܥܘܩܒܐ',
-'imagelinks' => 'Ü\9aÜ«ܚܬܐ ܕܠܦܦܐ',
+'imagelinks' => 'Ü¡Ü¦Ü ܚܬܐ ܕܠܦܦܐ',
'linkstoimage' => '{{PLURAL:$1|ܦܐܬܐ ܗܕܐ ܐܣܪ|$1 ܦܐܬܬ̈ܐ ܗܠܝܢ ܐܣܪܝܢ}} ܥܡ ܗܢܐ ܠܦܦܐ:',
'nolinkstoimage' => 'ܠܝܬ ܦܐܬܐ ܕܐܣܪ ܠܗܢܐ ܠܦܦܐ.',
'uploadnewversion-linktext' => 'ܐܣܩ ܨܚܚܐ ܚܕܬܐ ܡܢ ܗܢܐ ܠܦܦܐ',
'watching' => 'ܪܗܝܐ...',
'unwatching' => 'ܠܐ ܪܗܝܐ...',
-'enotif_reset' => 'ܫܘܕܥ ܟܠ ܦܐܬܬ̈ܐ ܐܝܟ ܣܥܝܪ̈ܐ',
+'enotif_reset' => 'Ü«Ü\98Ü\95Ü¥ Ü\9fÜ Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\90Ü\9dÜ\9f ܣܥÜ\9dܪÌ\88ܬÜ\90',
'enotif_newpagetext' => 'ܗܕܐ ܗܝ ܦܐܬܐ ܚܕܬܐ',
'enotif_impersonal_salutation' => 'ܡܦܠܚܢܐ {{SITENAME}}',
'changed' => 'ܐܫܬܚܠܦܬ',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'ܦܐܬܐ ܕܡܦܠܚܢܐ ܕܝܠܟ',
-'tooltip-pt-mytalk' => 'ܦÜ\90ܬÜ\90 Ü\95Ü¡Ü¡Ü Ü\98ܟ',
+'tooltip-pt-mytalk' => 'ܦÜ\90ܬÜ\90 Ü\95Ü¡Ü¡Ü Ü Ü\90 Ü\95Ü\9dÜ ܟ',
'tooltip-pt-preferences' => 'Your preferences',
-'tooltip-pt-watchlist' => 'Ü¡Ü\9fܬÜ\92Ü¢Ü\98ܬÜ\90 Ü\95ܦÜ\90ܬܬÌ\88Ü\90 Ü\95Ü\92ܪÜ\97Ü\9dܬ ܐܢܬ ܫܘܚܠܦ̈ܐ ܕܬܗܘܐ ܒܗܘܢ',
+'tooltip-pt-watchlist' => 'Ü¡Ü\9fܬÜ\92Ü¢Ü\98ܬÜ\90 Ü\95ܦÜ\90ܬܬÌ\88Ü\90 Ü\95ܬܪÜ\97Ü\9d ܐܢܬ ܫܘܚܠܦ̈ܐ ܕܬܗܘܐ ܒܗܘܢ',
'tooltip-pt-mycontris' => 'ܡܟܬܒܢܘܬܐ ܕܫܘܬܦܘܝܬ̈ܟ',
'tooltip-pt-login' => 'ܢܠܒܒ ܠܟ ܕܣܓܠ ܐܢܬ ܥܠܠܐ ܕܝܠܟ، ܐܠܐ ܗܢܐ ܠܐ ܐܝܬܝܗܝ ܐܠܨܝܐ',
'tooltip-pt-logout' => 'ܦܠܛܐ',
'tooltip-ca-talk' => 'ܡܡܠܠܐ ܥܠ ܚܒܝܫܬܐ ܕܦܐܬܐ',
-'tooltip-ca-addsection' => 'ܫܪÜ\9d ܦܣÜ\98Ü©ܐ ܚܕܬܐ',
-'tooltip-ca-viewsource' => 'Ü\97Ü¢Ü\90 ܦÜ\90ܬÜ\90 Ü¢Ü\9bܪܬÜ\90 Ü\9dÜ Ü\97.
-Ü\90Ü\9dܬ Ü\92Ü\9f ܬÜ\9aÜ\99Ü\9d ܡܒܘܥܐ ܕܝܠܗ',
+'tooltip-ca-addsection' => 'ܫܪÜ\9d ܡܢܬܐ ܚܕܬܐ',
+'tooltip-ca-viewsource' => 'Ü\97Ü¢Ü\90 ܦÜ\90ܬÜ\90 Ü¢Ü\9bܪܬÜ\90 Ü\90Ü\9dܬÜ\9dÜ\97Ü\9d.
+ܡܨÜ\90 Ü\90ܢܬ Ü\95ܬÜ\9aÜ\99Ü\90 ܡܒܘܥܐ ܕܝܠܗ',
'tooltip-ca-protect' => 'ܢܛܘܪ ܗܕܐ ܦܐܬܐ',
'tooltip-ca-delete' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
'tooltip-ca-move' => 'ܫܢܝ ܦܐܬܐ ܗܕܐ',
'tooltip-n-mainpage-description' => 'ܬܪܘܩܬܐ ܕܦܐܬܐ ܪܝܫܝܬܐ',
'tooltip-n-portal' => 'ܚܕܪ ܬܪܡܝܬܐ، ܡܢܐ ܡܫܟܚ ܐܢܬ ܠܥܒܕܐ، ܐܝܟܐ ܬܚܙܝ ܟܠ ܡܐ ܕܣܢܝܩ ܐܢܬ ܠܗ',
'tooltip-n-recentchanges' => 'ܡܟܬܒܢܘܬܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܒܓܘ ܘܝܩܝ.',
-'tooltip-n-randompage' => 'ܦܬÜ\98Ü\9f Ü¡Ü\93Ü Ü¬Ü\90 ܚܘܝܚܬܐ',
+'tooltip-n-randompage' => 'Ü\90Ü\9bܥܢ Ü¡Ü\93Ü Ü¬Ü\90 Ü\9aÜ\95 ܚܘܝܚܬܐ',
'tooltip-n-help' => 'ܕܘܟܐ ܠܥܘܕܪܢܐ',
-'tooltip-feed-atom' => 'ܬܪܣÜ\9dܬÜ\90 Ü\95Atom Ü Ü\97Ü¢Ü\90 ܦÜ\90ܬܬܐ',
+'tooltip-feed-atom' => 'Ü\9bÜ¥Ü\9dÜ¡Ü\98ܬÜ\90 Ü\95Ü\90Ü\9bÜ\98Ü¡ Ü Ü¦Ü\90ܬܬÜ\90 Ü\97Ü\95ܐ',
'tooltip-t-contributions' => 'ܡܟܬܒܢܘܬܐ ܒܫܘܬܦ̈ܐ ܕܗܢܐ ܡܦܠܚܢܐ',
'tooltip-t-emailuser' => 'ܫܕܪ ܐܓܪܬܐ ܠܗܢܐ ܡܦܠܚܢܐ',
'tooltip-t-upload' => 'ܐܣܩ ܠܦܦ̈ܐ',
'tooltip-t-specialpages' => 'ܡܟܬܒܢܘܬܐ ܒܟܠ ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ',
-'tooltip-ca-nstab-main' => 'Ü\9aÜ\98Ü\9d ܦÜ\90ܬܬÜ\90 Ü\95Ü\9aÜ\92Ì\88Ü\9dܫܬÜ\90',
+'tooltip-ca-nstab-main' => 'ܚܘܝ ܦܐܬܐ ܕܚܒ̈ܝܫܬܐ',
'tooltip-ca-nstab-user' => 'ܚܘܝ ܦܐܬܐ ܕܡܦܠܚܢܐ',
'tooltip-ca-nstab-image' => 'ܚܘܝ ܦܐܬܐ ܕܠܦܦܐ',
'tooltip-ca-nstab-category' => 'ܚܘܝ ܦܐܬܐ ܕܣܕܪܐ',
'anonusers' => '{{SITENAME}} {{PLURAL:$2|ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ|ܡܦܠܚܢ̈ܐ ܠܐ ܝܕ̈ܝܥܐ}} $1',
'creditspage' => 'ܙܕ̈ܩܐ ܕܦܐܬܐ',
+# Info page
+'pageinfo-title' => 'ܝܕ̈ܥܬܐ ܥܠ "$1"',
+'pageinfo-header-basic' => 'ܝܕ̈ܥܬܐ ܪ̈ܫܝܬܐ',
+'pageinfo-header-edits' => 'ܬܫܥܝܬܐ ܕܫܘܚܠܦ̈ܐ',
+'pageinfo-header-restrictions' => 'ܢܘܛܪܐ ܕܦܐܬܐ',
+'pageinfo-display-title' => 'ܚܘܘܝܐ ܕܟܘܢܝܐ',
+'pageinfo-default-sort' => 'ܩܠܝܕܐ ܕܛܘܟܣܐ ܡܬܚܫܒܢܝܐ',
+'pageinfo-length' => 'ܥܓܪܐ ܕܦܐܬܐ (ܒܒܐܝܛ)',
+'pageinfo-article-id' => 'ܗܝܝܘܬܐ ܕܦܐܬܐ',
+'pageinfo-robot-policy' => 'ܐܝܟܢܝܘܬܐ ܕܡܙܝܥܢܐ ܕܒܨܝܐ',
+'pageinfo-robot-index' => 'ܡܬܚܘܝܢܐ',
+'pageinfo-robot-noindex' => 'ܠܐ ܡܬܚܘܝܢܐ',
+'pageinfo-views' => 'ܡܢܝܢܐ ܕܚܙܝܬ̈ܐ',
+'pageinfo-watchers' => 'ܡܢܝܢܐ ܕܪ̈ܗܝܐ',
+'pageinfo-redirects-name' => 'ܨܘܝܒ̈ܐ ܠܦܐܬܐ ܗܕܐ',
+'pageinfo-subpages-name' => 'ܦܐܬܬ̈ܐ ܦܪ̈ܥܝܐ ܕܦܐܬܐ ܗܕܐ',
+'pageinfo-firstuser' => 'ܒܪܝܢܐ ܕܦܐܬܐ',
+'pageinfo-firsttime' => 'ܣܝܩܘܡܐ ܕܒܪܝܬܐ ܕܦܐܬܐ',
+'pageinfo-lastuser' => 'ܫܚܠܦܢܐ ܐܚܪܝܐ',
+'pageinfo-lasttime' => 'ܣܝܩܘܡܐ ܕܫܘܚܠܦܐ ܐܚܪܝܐ',
+'pageinfo-edits' => 'ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ',
+'pageinfo-authors' => 'ܡܢܝܢܐ ܕܡܫܚܠܦܢ̈ܐ ܡܫܚܠܦ̈ܐ',
+'pageinfo-recent-edits' => 'ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ (ܒ {{PLURAL:$1||ܚܕ ܝܘܡܐ|$1 ܝܘܡܬ̈ܐ}})',
+'pageinfo-recent-authors' => 'ܡܢܝܢܐ ܕܡܫܚܠܦܢ̈ܐ ܡܫܚܠܦ̈ܐ ܐܚܪ̈ܝܐ',
+'pageinfo-toolboxlink' => 'ܝܕ̈ܥܬܐ ܥܠ ܦܐܬܐ',
+
# Image deletion
'filedeleteerror-short' => 'ܦܘܕܐ ܒܫܝܦܐ ܕܠܦܦܐ: $1',
'filedeleteerror-long' => 'ܦܘܕ̈ܐ ܐܫܟܚܬ ܟܕ ܫܝܦܐ ܠܦܦܐ:
'qbbrowse' => 'Kintun',
'qbedit' => 'Pepikape',
'qbpageoptions' => 'Tüfachi wülngiñ',
-'qbpageinfo' => 'Trokiñdungu',
'qbmyoptions' => 'tañi nütramkawe',
'qbspecialpages' => 'Kangelu',
'faq' => 'Rumelfemkelu ramtun',
'qbbrowse' => 'ṫsffeh',
'qbedit' => 'Ĝedel',
'qbpageoptions' => "Had 'ṣ-ṣefḫa",
-'qbpageinfo' => 'L-Meḍmon',
'qbmyoptions' => "'Ṣ-Ṣefḫaṫ dyawli",
'qbspecialpages' => 'Ṣefḫaṫ ĥaṣṣin',
'faq' => 'asaila kaytaawdo bzaf',
'vector-action-protect' => 'সুৰক্ষিত কৰক',
'vector-action-undelete' => 'পুনৰুদ্ধাৰ কৰক',
'vector-action-unprotect' => 'সুৰক্ষা সলনি কৰক',
-'vector-simplesearch-preference' => 'à¦\89à§\8eà¦\95à§\83ষà§\8dà¦\9f সনà§\8dধানৰ পৰামৰà§\8dশ সক্ৰিয় কৰক (ভেক্টৰ স্কিনৰ বাবেহে)',
+'vector-simplesearch-preference' => 'সৰল সনà§\8dধান দণà§\8dডিà¦\95া সক্ৰিয় কৰক (ভেক্টৰ স্কিনৰ বাবেহে)',
'vector-view-create' => 'সৃষ্টি কৰক',
'vector-view-edit' => 'সম্পাদনা',
'vector-view-history' => 'ইতিহাস চাওক',
'youhavenewmessages' => 'আপোনাৰ কাৰণে $1 আছে। ($2)',
'newmessageslink' => 'নতুন সংবাদ',
'newmessagesdifflink' => 'শেহতীয়া সাল-সলনি',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|আন এজন সদস্য|$3 জন সদস্য}}ৰ পৰা আপোনালৈ $1 আহিছে ($2)।',
+'youhavenewmessagesmanyusers' => 'কেইবাজনো সদস্যৰ পৰা আপোনালৈ $1 আহিছে ($2)।',
'newmessageslinkplural' => '{{PLURAL:$1|এটা নতুন বাৰ্তা|নতুন বাৰ্তা}}',
'newmessagesdifflinkplural' => 'অন্তিম {{PLURAL:$1|সংশোধন}}',
'youhavenewmessagesmulti' => '$1ত আপোনাৰ কাৰণে নতুন সংবাদ আছে',
# General errors
'error' => 'ভুল',
'databaseerror' => 'তথ্যকোষৰ ভুল',
-'dberrortext' => 'Database query’ত ত্ৰুটি আছে।
+'dberrortext' => 'Database query syntaxত ত্ৰুটি হৈছে।
ছফ্টৱেৰত থকা কোনো বাগৰ বাবে এনে হব পাৰে।
অন্তিমবাৰ চেষ্টা কৰা ডাটাবেচ কুৱেৰীটো আছিল এনেধৰণৰ:
-<blockquote><tt>$1</tt></blockquote>
-"<tt>$2</tt>" ফাংচনৰ পৰা
-ডাটাবেচে প্ৰেৰণ কৰা ত্ৰুটি: "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+"<code>$2</code>" ফাংচনৰ পৰা।
+ডাটাবেচে প্ৰেৰণ কৰা ত্ৰুটি: "<samp>$3: $4</samp>"।',
'dberrortextcl' => 'এক ডাটাবেচ চিণ্টেক্স ত্ৰুটি ঘটিছে।
অন্তিমবাৰ চেষ্টা কৰা ডাটাবেচ কুৱেৰীটো আছিল এনেধৰণৰ:
"$1"
'protectedpagetext' => 'এই পৃষ্ঠাটোৰ সম্পাদনা ৰোধ কৰিবলৈ সুৰক্ষিত কৰা হৈছে।',
'viewsourcetext' => 'আপুনি এই পৃষ্ঠাটোৰ উৎস চাব আৰু নকল কৰিব পাৰে',
'viewyourtext' => "আপুনি '''আপোনাৰ সম্পাদনাসমূহ'''ৰ উৎস চাব আৰু এই পৃষ্ঠালৈ নকল কৰিব পাৰে:",
-'protectedinterface' => 'এই পৃষ্ঠাই ৱিকি ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা প্ৰদান কৰে, আৰু ইয়াক সুৰক্ষিত কৰি ৰখা হৈছে ।',
-'editinginterface' => "'''সাৱধানবাণী:''' আপুনি যিখন পৃষ্ঠা সম্পাদনা কৰিছে সেইখন ৱিকি ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা দিবলৈ ব্যৱহাৰ হয় । এই পৃষ্ঠাৰ সাল-সলনিয়ে আন ব্যৱহাৰকাৰীৰ বাবে ইণ্টাৰফে’চত প্ৰভাৱ পেলাব । অনুবাদৰ বাবে অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প [//translatewiki.net/wiki/Main_Page?setlang=bn translatewiki.net] ব্যৱহাৰ কৰক ।",
+'protectedinterface' => 'এই পৃষ্ঠাই ৱিকি ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা প্ৰদান কৰে আৰু ইয়াক সুৰক্ষিত কৰি ৰখা হৈছে।
+সকলো ৱিকিৰ বাবে অনুবাদ যোগ কৰিবলৈ বা সলাবলৈ অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প [//translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক।',
+'editinginterface' => "'''সাৱধানবাণী:''' আপুনি যিখন পৃষ্ঠা সম্পাদনা কৰিছে সেইখন এই ছফ্টৱেৰৰ ইণ্টাৰফে’চ বাৰ্তা দিবলৈ ব্যৱহাৰ হয়।
+এই পৃষ্ঠাৰ সাল-সলনিয়ে আন ব্যৱহাৰকাৰীৰ বাবে ইণ্টাৰফে’চত প্ৰভাৱ পেলাব।
+সকলো ৱিকিৰ বাবে অনুবাদৰ বাবে অনুগ্ৰহ কৰি মিডিয়াৱিকি স্থানীয়কৰণ প্ৰকল্প [//translatewiki.net/ translatewiki.net] ব্যৱহাৰ কৰক ।",
'sqlhidden' => '(নিহিত SQL query)',
'cascadeprotected' => 'এই পৃষ্ঠাখন সম্পাদনাৰ পৰা সুৰক্ষিত কাৰণ এই {{PLURAL:$1|পৃষ্ঠা, যিখন|পৃষ্ঠা, যিবোৰ}} "প্ৰপাতাকাৰ" (cascading) বিকল্পৰ সহযোগত সুৰক্ষিত কৰা হৈছে:
$2',
'remembermypassword' => 'মোৰ প্ৰৱেশ এই কম্পিউটাৰত মনত ৰাখিব (সৰ্বাধিক $1 {{PLURAL:$1|দিনলৈ|দিনলৈ}})',
'securelogin-stick-https' => 'প্ৰৱেশ কৰা পাছত HTTPS-ৰ দ্বাৰা সংযোগ ৰাখক',
'yourdomainname' => 'আপোনাৰ ডমেইন:',
+'password-change-forbidden' => 'আপুনি এই ৱিকিত গুপ্তশব্দ সলাব নোৱাৰে।',
'externaldberror' => 'কোনো প্ৰামাণ্যকৰণ তথ্যকোষৰ ত্ৰুটি ঘটিছে নতুবা আপোনাৰ বৰ্হি-একাউণ্ট নৱীকৰণ কৰাৰ অনুমতি নাই ।',
'login' => 'প্ৰৱেশ',
'nav-login-createaccount' => 'প্ৰৱেশ/সদস্যভুক্তি',
আপুনি আন পৃষ্ঠাত [[Special:Search/{{PAGENAME}}| এই শিৰোনামা অনুসন্ধান কৰিব পাৰে]],
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পৰ্কীয় অভিলেখ অনুসন্ধান কৰিব পাৰে],
বা [{{fullurl:{{FULLPAGENAME}}|action=edit}} এই পৃষ্ঠা সম্পাদনা কৰিব পাৰে]</span>',
-'noarticletext-nopermission' => 'এই পৃষ্ঠাত বৰ্তমান কোনো পাঠ্য নাই ।
-আপুনি আন পৃষ্ঠাত [[Special:Search/{{PAGENAME}}| এই শিৰোনামা অনুসন্ধান কৰিব পাৰে]],
-বা <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পৰ্কীয় অভিলেখ অনুসন্ধান কৰিব পাৰে ।]</span>',
+'noarticletext-nopermission' => 'এই পৃষ্ঠাত বৰ্তমান কোনো পাঠ্য নাই।
+আপুনি আন পৃষ্ঠাত [[Special:Search/{{PAGENAME}}|এই শিৰোনামা অনুসন্ধান কৰিব পাৰে]],
+বা <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পৰ্কীয় অভিলেখ অনুসন্ধান কৰিব পাৰে]</span>, কিন্তু এই পৃষ্ঠা সৃষ্টি কৰিবলৈ আপোনাৰ অনুমতি নাই।',
+'missing-revision' => '"{{PAGENAME}}" নামৰ পৃষ্ঠাৰ #$1 সংশোধনৰ অস্তিত্ব নাই।
+
+সাধাৰণতে বিলোপ কৰা এখন পৃষ্ঠাৰ পুৰণা ইতিহাস লিংক অনুসৰণ কৰিলে এনে হয়।
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} বিলোপন ল\'গ]ত অধিক তথ্য পাব।',
'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" নামৰ সদস্য একাউন্ট নিবন্ধিত নহয় ।
অনুগ্ৰহ কৰি চাওক আপুনি এই পৃষ্ঠা সৃষ্টি/সম্পাদনা কৰিব বিচাৰিছে নেকি ।',
'userpage-userdoesnotexist-view' => "সদস্য একাউন্ট ''$1'' পঞ্জীভূত নহয়",
* '''Firefox / Safari: ''' ''Shift'' ধৰি ৰাখি ''Reload'' ক্লিক কৰক, নাইবা ''Ctrl-F5'' বা ''Ctrl-R'' টিপক (এপল মেকৰ বাবে ''⌘-R'')
* '''Google Chrome:''' ''Ctrl-Shift-R'' টিপক (এপল মেকৰ বাবে ''⌘-Shift-R'' )
* '''Internet Explorer:''' ''Ctrl'' ধৰি ৰাখি ''Refresh'' ক্লিক কৰক, অথবা ''Ctrl-F5'' টিপক
-* '''Konqueror: ''' ''Reload'' ক্লিক কৰক বা ''F5'' টিপক
* '''Opera:''' ''Tools→Preferences'' ত গৈ কেচ্ মচি পেলাওক",
'usercssyoucanpreview' => "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন CSS পৰীক্ষা কৰক ।",
'userjsyoucanpreview' => "'''পৰামৰ্শ:''' \"{{int:showpreview}}\" বুটাম ব্যৱহাৰ কৰি সাঁচি ৰখাৰ আগতে আপোনাৰ নতুন জাভালিপি পৰীক্ষা কৰক ।",
'note' => "'''টোকা:'''",
'previewnote' => "'''মনত ৰাখিব এয়া মাথোন প্ৰাক্দৰ্শনহে।'''
আপোনাৰ সালসলনিসমূহ এতিয়াও সংৰক্ষণ কৰা হোৱা নাই!",
-'continue-editing' => 'সমà§\8dপাদনা à¦\9cাৰà§\80 ৰাà¦\96ক',
+'continue-editing' => 'সমà§\8dপাদনা à¦\95à§\8dষà§\87তà§\8dৰলà§\88 যাà¦\93ক',
'previewconflict' => 'এই প্ৰাকদৰ্শনে ওপৰৰ সম্পাদনা ক্ষেত্ৰৰ লেখা সাঁচি ৰাখিলে যেনেকুৱা দেখা যাব তেনেকুৱা দেখাইছে ।',
'session_fail_preview' => "'''দুঃখিত! চেচন ডাটা হেৰাই যোৱাৰ কাৰণে আপোনাৰ সম্পাদনা কৃতকাৰ্য্য নহ'ল ।'''
অনুগ্ৰহ কৰি পুনৰ চেষ্টা কৰক ।
'edit-already-exists' => "নতুন পৃষ্ঠা সৃষ্টি কৰা নহ'ল ।
পৃষ্ঠাখন ইতিমধ্যে আছেই ।",
'defaultmessagetext' => 'সাধাৰণ বাৰ্তা পাঠ্য',
+'invalid-content-data' => 'অবৈধ সমল তথ্য',
+'content-not-allowed-here' => '[[$2]] পৃষ্ঠাত "$1" সমল অনুমোদিত নহয়',
+
+# Content models
+'content-model-wikitext' => 'ৱিকিপাঠ্য',
+'content-model-text' => 'সাধাৰণ পাঠ্য',
+'content-model-javascript' => 'জাভাস্ক্ৰীপ্ট',
+'content-model-css' => 'চি.এচ.এচ.',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''সতৰ্কবাণী:''' এই পৃষ্ঠাখনত অধিক এক্সপেনচিভ পাৰ্চাৰ ফাংচন কল আছে ।
'expansion-depth-exceeded-warning' => 'পৃষ্ঠাখনৰ বিস্তৃতি গভীৰতা বেছি হৈছে',
'parser-unstrip-loop-warning' => 'আন্ষ্ট্ৰীপ লুপ চিনাক্ত কৰা হৈছে',
'parser-unstrip-recursion-limit' => 'আন্ষ্ট্ৰিপ ৰিকাৰ্ছন সীমা অতিক্ৰম হৈছে ($1)',
+'converter-manual-rule-error' => 'মেনুৱেল ভাষা পৰিৱৰ্তন নিয়মত ত্ৰুটি পোৱা গৈছে',
# "Undo" feature
'undo-success' => 'এই সম্পাদনা পূৰ্ববৎ কৰিব পাৰি ।
'revdel-restore' => 'দৃষ্টিপাত সালসলনি কৰক',
'revdel-restore-deleted' => 'বাতিল কৰা সংশোধনসমূহ',
'revdel-restore-visible' => 'দৃশ্যমান সংশোধনসমূহ',
-'pagehist' => 'পৃষ্ঠা ইতিহাস',
+'pagehist' => 'পৃষ্ঠাৰ ইতিহাস',
'deletedhist' => 'বিলোপ কৰাৰ ইতিহাস',
'revdelete-hide-current' => ' $2, $1 তাৰিখৰ এই আইটেমটো গোপন কৰাত সমস্যা হৈছে: এইটো বৰ্তমানৰ সংশোধনী ।
এইটোক গোপন কৰিব পৰা নাযাব ।',
অনুগ্ৰহ কৰি ল’গ পৰীক্ষা কৰক ।',
'revdelete-only-restricted' => '$2, $1 তৰিখৰ আইটেমটো গোপন কৰাত সমস্যা হৈছে: আন প্ৰত্যক্ষতা বিকল্প বাছনি নকৰাকৈ আপুনি প্ৰশাসকৰ দৃষ্টিৰ পৰা আইটেমসমূহ নিবাৰণ কৰিব নোৱাৰে ।',
'revdelete-reason-dropdown' => '*বিলোপৰ সাধাৰণ কাৰণসমূহ
-** স্বত্বাধিকাৰ উলংঘন
-** অনুপযুক্ত ব্যক্তিগত তথ্য
+** কপিৰাইট উলংঘন
+** অনুপযুক্ত মন্তব্য বা ব্যক্তিগত তথ্য
+** অনুপযুক্ত সদস্যনাম
** সম্ভাব্য ক্ষতিকাৰক তথ্য',
'revdelete-otherreason' => 'অন্য/অতিৰিক্ত কাৰণ:',
'revdelete-reasonotherlist' => 'অন্য কাৰণ',
'search-result-size' => '$1 ({{PLURAL:$2|1 শব্দ|$2 শব্দসমূহ}})',
'search-result-category-size' => '{{PLURAL:$1|১ জন সদস্য|$1 জন সদস্য}} ({{PLURAL:$2|এটা উপশ্ৰেণী|$2 টা উপশ্ৰেণী}}, {{PLURAL:$3|এটা ফাইল|$3 টা ফাইল}})',
'search-result-score' => 'যথাৰ্থতা: $1%',
-'search-redirect' => '(পুনৰ্নিদেশনা $1)',
+'search-redirect' => '(পà§\81নৰà§\8dনিৰà§\8dদà§\87শনা $1)',
'search-section' => '(অনুচ্ছেদ $1)',
'search-suggest' => 'আপুনি $1 বুজাব খুজিছে নেকি?',
'search-interwiki-caption' => 'সহপ্ৰকল্পসমূহ',
'nonefound' => "'''টোকা:''' ডিফ’ল্ট অনুযায়ী মাথোঁ কেইটামানহে নামস্থান অনুসন্ধান কৰা হয় ।
আপোনাৰ অনুসন্ধানত ''all:'' ব্যবহাৰ কৰি সকলো সমল (কথা-বতৰা, শ্ৰেনী ইত্যদি) অনুসন্ধান কৰিব পাৰে, নতুবা আকাংক্ষিত নামস্থান প্ৰিফিক্স হিছাপে ব্যবহাৰ কৰিব পাৰে ।",
'search-nonefound' => 'এই অনুসন্ধানৰ কোনো ফলাফল নাই ।',
-'powersearch' => 'à¦\85তিসন্ধান',
+'powersearch' => 'শà¦\95à§\8dতিশালà§\80 সন্ধান',
'powersearch-legend' => 'শক্তিশালী সন্ধান',
'powersearch-ns' => 'নামস্থানবোৰত সন্ধান:',
-'powersearch-redir' => 'পà§\81ননিৰà§\8dদà§\87শà¦\95ৰ তালিকা',
+'powersearch-redir' => 'পà§\81নৰà§\8dনিৰà§\8dদà§\87শনাৰ তালিকা',
'powersearch-field' => 'ৰ কাৰণে সন্ধান কৰক',
'powersearch-togglelabel' => 'পৰীক্ষা কৰক:',
'powersearch-toggleall' => 'সকলো',
'timezoneregion-indian' => 'ভাৰত মহাসাগৰ',
'timezoneregion-pacific' => 'প্ৰশান্ত মহাসাগৰ',
'allowemail' => 'অন্য সদস্যৰ পৰা ই-মেইল সমৰ্থ কৰক',
-'prefs-searchoptions' => 'সনà§\8dধান বিà¦\95লà§\8dপসমà§\82হ',
+'prefs-searchoptions' => 'সনà§\8dধান à¦\95ৰà¦\95',
'prefs-namespaces' => 'নামস্থান',
'defaultns' => 'অন্যথা এই নামস্থান সমূহত অনুসন্ধান কৰিব:',
'default' => 'অবিচল',
'backend-fail-internal' => 'ষ্ট\'ৰেজ বেক্এণ্ড "$1"ত এক অজ্ঞাত ত্ৰুটী ঘটিছে।',
'backend-fail-contenttype' => '"$1"ত সাঁচি থ\'বলৈ ফাইলটোৰ সমল প্ৰকাৰ স্থিৰ কৰিব পৰা নগ\'ল।',
'backend-fail-batchsize' => "$1টা ফাইল {{PLURAL:$1|কাৰ্যৰ|কাৰ্যৰ}} ষ্ট'ৰেজ বেকএ'ণ্ড দিয়া হৈছে; সীমা হৈছে $2টা {{PLURAL:$2|কাৰ্য|কাৰ্য}}।",
-'backend-fail-usable' => "অপৰ্যাপ্ত অনুমতি বা হেৰোৱা নিৰ্দেশিকা/সমলৰ বাবে $1 ফাইলটো লিখিব পৰা নগ'ল।",
+'backend-fail-usable' => 'অপৰ্যাপ্ত অনুমতি বা হেৰোৱা নিৰ্দেশিকা/সমলৰ বাবে "$1" ফাইলটো পঢ়িব বা লিখিব পৰা নগ\'ল।',
# File journal errors
'filejournal-fail-dbconnect' => 'ষ্ট\'ৰেজ বেকএ\'ণ্ড "$1"ৰ বাবে জাৰ্ণাল তথ্যকোষৰ লগত সংযোগ স্থাপন নহ\'ল।',
'uploadnewversion-linktext' => "এই ফাইলতোৰ নতুন সংশোধন এটা আপল'ড কৰক",
'shared-repo-from' => '$1 পৰা',
'shared-repo' => 'এটা উমৈহতীয়া ভঁৰাল',
+'upload-disallowed-here' => 'আপুনি এই ফাইলটো প্ৰতিস্থাপন কৰিব নোৱাৰে।',
# File reversion
'filerevert' => '$1 ক আগৰ অৱস্থালৈ ঘূৰাই আনক',
'disambiguations' => 'দ্ব্যৰ্থতা-দূৰীকৰণ পৃষ্ঠাসমূহলৈ সংযোগ থকা পৃষ্ঠাসমূহ',
'disambiguationspage' => 'সাঁচ:দ্ব্যৰ্থতা-দূৰীকৰণ',
-'disambiguations-text' => "তলৰ পৃষ্ঠাখনসমূহত '''দ্ব্যৰ্থতা দূৰীকৰণ পৃষ্ঠা'''ৰ লগত সংযোগ আছে ।
-à¦\87য়à§\87 à¦\89পযà§\81à¦\95à§\8dত পà§\83ষà§\8dঠাৰ লà¦\97ত সà¦\82যà§\8bà¦\97 à¦\95ৰিব পাৰà§\87 ।
-[[MediaWiki:Disambiguationspage]]ৰ পৰা সংযোগ থকা কোনো সাঁচ ব্যৱহাৰ কৰিলে এখন পৃষ্ঠাক দ্ব্যৰ্থতা দূৰীকৰণ পৃষ্ঠা হিছাপে গণ্য কৰা হ’ব ।",
+'disambiguations-text' => "তলৰ পৃষ্ঠাখনসমূহত অন্ততঃ এটা হ'লেই '''দ্ব্যৰ্থতা দূৰীকৰণ পৃষ্ঠা'''ৰ সংযোগ আছে।
+তাৰ সলনি সà§\87à¦\87বà§\8bৰত à¦\89পযà§\81à¦\95à§\8dত পà§\83ষà§\8dঠাৰ লà¦\97ত সà¦\82যà§\8bà¦\97 থাà¦\95িব পাৰà§\87।
+[[MediaWiki:Disambiguationspage]]ৰ পৰা সংযোগ থকা কোনো সাঁচ ব্যৱহাৰ কৰিলে এখন পৃষ্ঠাক দ্ব্যৰ্থতা দূৰীকৰণ পৃষ্ঠা হিছাপে গণ্য কৰা হয়।",
'doubleredirects' => 'দ্বি-পুনঃনিৰ্দেশিত',
'doubleredirectstext' => 'আন পুনৰ্নিদেশনা পৃষ্ঠালৈ পুনৰ্নিৰ্দেশিত পৃষ্ঠাসমূহ এই তালিকাত দিয়া হৈছে ।
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|বাইট|বাইট}}',
'ncategories' => '$1টা {{PLURAL:$1|শ্ৰেণী|শ্ৰেণী}}',
+'ninterwikis' => '$1 {{PLURAL:$1|ইণ্টাৰৱিকি|ইণ্টাৰৱিকিসমূহ}}',
'nlinks' => '$1 {{PLURAL:$1|সংযোগ|সংযোগ}}',
'nmembers' => '{{PLURAL:$1|সদস্য|$1 সদস্যবৃন্দ}}',
'nrevisions' => '$1টা {{PLURAL:$1|সংশোধন|সংশোধন}}',
'rollback_short' => 'পূৰ্ববৎ কৰক',
'rollbacklink' => 'পূৰ্ববৎ কৰক',
'rollbacklinkcount' => '$1 {{PLURAL:$1|সম্পাদনা|সম্পাদনাসমূহ}} পূৰ্বৱত কৰক',
+'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|সম্পাদনা|সম্পাদনাসমূহ}} পূৰ্বৱত কৰক',
'rollbackfailed' => 'পূৰ্ববৎ ব্যৰ্থ',
'cantrollback' => 'পূৰ্বৰ অৱস্থালৈ ঘূৰাই নিব নোৱাৰি;
শেষৰ সম্পাদকজন এই পৃষ্ঠাৰ একমাত্ৰ লেখক ।',
'''$1''' পৃষ্ঠাখনৰ সুৰক্ষা-স্তৰৰ গাঁথনি ইয়াত আছে:",
'protect-cascadeon' => 'এই পৃষ্ঠাখন বৰ্তমান সুৰক্ষিত কাৰণ ই {{PLURAL:$1|খন পৃষ্ঠাৰ|খন পৃষ্ঠাৰ}} অন্তৰ্গত য’ত প্ৰপাতাকাৰ সুৰক্ষা সক্ৰিয় ।
আপুনি এই পৃষ্ঠাৰ সুৰক্ষা স্তৰ সলাব পাৰে কিন্তু সি প্ৰপাতাকাৰ সুৰক্ষাত কোনো প্ৰভাৱ নেপেলায ।',
-'protect-default' => 'সà¦\95লà§\8b বà§\8dযবহাৰà¦\95াৰà§\80à¦\95 à¦\85নà§\81মতি দিয়à¦\95',
+'protect-default' => 'সà¦\95লà§\8b বà§\8dযৱহাৰà¦\95াৰà§\80ৰ বাবà§\87',
'protect-fallback' => '"$1" অনুমতি লাগিব',
-'protect-level-autoconfirmed' => 'নতà§\81ন বা নথিà¦à§\81à¦\95à§\8dত নà§\8bহà§\8bৱা সদসà§\8dযà¦\95 বাৰণ à¦\95ৰà¦\95',
+'protect-level-autoconfirmed' => 'নতà§\81ন বা à¦\85পà¦\9eà§\8dà¦\9cà§\80à¦à§\81à¦\95à§\8dত সদসà§\8dযà¦\95 à¦\85ৱৰà§\8bধ',
'protect-level-sysop' => 'কেৱল প্ৰশাসকবৃন্দৰ বাবে',
'protect-summary-cascade' => 'প্ৰপাতাকাৰ/কেচ্কেডিং',
'protect-expiring' => ' $1 (UTC) ত সময় শেষ হব',
'undeletedrevisions' => '{{PLURAL:$1|১টা সংশোধন|$1টা সংশোধন}} পুনৰুদ্ধাৰ কৰা হৈছে',
'undeletedrevisions-files' => '{{PLURAL:$1|১টা সংশোধন|$1 টা সংশোধন}} আৰু {{PLURAL:$2|১ খন নথি|$2 খন নথি}} পুনৰুদ্ধাৰ কৰা হ’ল',
'undeletedfiles' => '{{PLURAL:$1|১খন নথি|$1 খন নথি}} পুনৰুদ্ধাৰ কৰা হ’ল',
-'cannotundelete' => 'à¦\85ৱলà§\81পà§\8dতি বিফল হৈছে;
-আন কোনোবাই আগতেই ইয়াক বিলোপ কৰিছে ।',
+'cannotundelete' => 'বিলà§\8bপ বাতিলà¦\95ৰণ বিফল হৈছে;
+$1',
'undeletedpage' => "'''$1ক পুনৰুদ্ধাৰ কৰা হৈছে'''
অনুগ্ৰহ কৰি শেহতীয়া অৱলুপ্তি আৰু পুনৰুদ্ধাৰৰ বাবে [[Special:Log/delete|অৱলুপ্তি অভিলেখ]] চাওক ।",
'undelete-header' => 'শেহতীয়াকৈ বিলোপ কৰা পৃষ্ঠাসমূহৰ বাবে [[Special:Log/delete|অৱলুপ্তি ল’গ]] চাওক ।',
'import-interwiki-templates' => 'সকলো সাঁচ অন্তৰ্ভুক্ত কৰক',
'import-interwiki-submit' => 'আমদানি',
'import-interwiki-namespace' => 'গন্তব্য নামস্থান:',
+'import-interwiki-rootpage' => 'গন্তব্য মূল পৃষ্ঠা (বৈকল্পিক):',
'import-upload-filename' => 'নথিৰ নাম:',
'import-comment' => 'মন্তব্য:',
'importtext' => "অনুগ্ৰহ কৰি [[Special:Export|ৰপ্তানি সুবিধা]] ব্যৱহাৰ কৰি উৎস ৱিকিৰ পৰা ফাইলটো ৰপ্তানি কৰক।
'import-error-interwiki' => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ইয়াৰ নামটো বাহিৰা সংযোগৰ (আন্তঃৱিকি) বাবে সংৰক্ষিত।',
'import-error-special' => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ই পৃষ্ঠা অনুমোদন নকৰা এটা বিশেষ নামস্থানৰ অন্তৰ্গত।',
'import-error-invalid' => '"$1" পৃষ্ঠাখন আমদানি কৰা নহ\'ল কাৰণ ইয়াৰ নামটো অবৈধ।',
+'import-options-wrong' => 'ভুল {{PLURAL:$2|বিকল্প|বিকল্পসমূহ}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'মূল পৃষ্ঠাৰ শিৰোনামা অবৈধ।',
+'import-rootpage-nosubpage' => 'মূল পৃষ্ঠাৰ "$1" নামস্থানে উপপৃষ্ঠা অনুমোদন নকৰে।',
# Import log
'importlogpage' => 'আমদানিৰ অভিলেখ',
# Info page
'pageinfo-title' => '"$1" ৰ তথ্য',
-'pageinfo-header-edits' => 'সম্পাদনাসমূহ',
+'pageinfo-not-current' => "কেৱল সাম্প্ৰতিক সংশোধনৰ বাবে তথ্য দৃশ্যমান হ'ব পাৰে।",
+'pageinfo-header-basic' => 'প্ৰাথমিক তথ্য',
+'pageinfo-header-edits' => 'ইতিহাস সম্পাদনা কৰক',
+'pageinfo-header-restrictions' => 'পৃষ্ঠা সুৰক্ষা',
+'pageinfo-header-properties' => 'পৃষ্ঠাৰ বৈশিষ্টসমূহ',
+'pageinfo-display-title' => 'শিৰোনাম প্ৰদৰ্শন কৰক',
+'pageinfo-default-sort' => 'ডিফল্ট চৰ্ট কী',
+'pageinfo-length' => 'পৃষ্ঠাৰ দৈৰ্ঘ্য (বাইটত)',
+'pageinfo-article-id' => 'পৃষ্ঠা ID',
+'pageinfo-robot-policy' => 'সন্ধান ইঞ্জিনৰ স্থিতি',
+'pageinfo-robot-index' => 'ইনডেক্স উপযোগী',
+'pageinfo-robot-noindex' => 'ইনডেক্সৰ অনুপযোগী',
'pageinfo-views' => 'দৰ্শনৰ সংখ্যা',
-'pageinfo-watchers' => 'নিৰীক্ষকৰ সংখ্যা',
-'pageinfo-edits' => 'সম্পাদনাৰ সংখ্যা',
-'pageinfo-authors' => 'মুখ্য লেখকৰ সংখ্যা',
+'pageinfo-watchers' => 'পৃষ্ঠা নিৰীক্ষকৰ সংখ্যা',
+'pageinfo-redirects-name' => 'পৃষ্ঠালৈ থকা পুনৰ্নিৰ্দেশ',
+'pageinfo-subpages-name' => 'এই পৃষ্ঠাৰ উপপৃষ্ঠাসমূহ',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|পুনৰ্নিৰ্দেশ|পুনৰ্নিৰ্দেশসমূহ}}; $3 {{PLURAL:$3|অপুনৰ্নিৰ্দেশ নাই|অপুনৰ্নিৰ্দেশসমূহ}})',
+'pageinfo-firstuser' => 'পৃষ্ঠাখনৰ সৃষ্টিকৰ্তা',
+'pageinfo-firsttime' => 'পৃষ্ঠা সৃষ্টিৰ তাৰিখ',
+'pageinfo-lastuser' => 'অন্তিম সম্পাদক',
+'pageinfo-lasttime' => 'অন্তিম সম্পাদনাৰ তাৰিখ',
+'pageinfo-edits' => 'মুঠ সম্পাদনাৰ সংখ্যা',
+'pageinfo-authors' => 'মুঠ স্বতন্ত্ৰ লেখকৰ সংখ্যা',
+'pageinfo-recent-edits' => 'শেহতীয়া সম্পাদনাসমূহৰ সংখ্যা (যোৱা $1 দিনত)',
+'pageinfo-recent-authors' => 'স্বতন্ত্ৰ সম্পাদকৰ শেহতীয়া সংখ্যা',
+'pageinfo-magic-words' => 'যাদুকৰী {{PLURAL:$1|শব্দ|শব্দবোৰ}} ($1)',
+'pageinfo-hidden-categories' => 'অদৃশ্য {{PLURAL:$1|শ্ৰেণী|শ্ৰেণীসমূহ}} ($1)',
+'pageinfo-templates' => 'সংযুক্ত {{PLURAL:$1|সাঁচ|সাঁচসমূহ}} ($1)',
+'pageinfo-toolboxlink' => 'পৃষ্ঠাৰ বিষয়ে তথ্য',
+'pageinfo-redirectsto' => 'পুনৰ্নিৰ্দেশ কৰা হৈছে',
+'pageinfo-redirectsto-info' => 'তথ্য',
+'pageinfo-contentpage' => 'সমল পৃষ্ঠাৰূপে গণনা কৰা হৈছে',
+'pageinfo-contentpage-yes' => 'হয়',
+'pageinfo-protect-cascading' => 'সুৰক্ষাসমূহ ইয়াৰ পৰা প্ৰপাতাকাৰ হৈছে',
+'pageinfo-protect-cascading-yes' => 'হয়',
+'pageinfo-protect-cascading-from' => 'সুৰক্ষাসমূহ প্ৰপাতাকাৰ হৈছে',
# Patrolling
'markaspatrolleddiff' => 'নিৰীক্ষিত বুলি চিহ্নিত কৰক',
'file-info-size-pages' => '$1 × $2 পিক্সেলসমূহ, নথিপত্ৰৰ আকাৰ: $3, MIME ধৰণ: $4, $5 {{PLURAL:$5|page|pages}}',
'file-nohires' => 'ইয়াতকৈ ডাঙৰকৈ দেখুৱাব নোৱাৰি ।',
'svg-long-desc' => 'SVG ফাইল, সাধাৰণতঃ $1 × $2 পিক্সেল, ফাইল মাত্ৰা: $3',
+'svg-long-desc-animated' => 'এনিমেটেড SVG ফাইল, সাধাৰণতে $1 × $2 পিক্সেল, ফাইলৰ আকাৰ: $3',
'show-big-image' => "সম্পূৰ্ণ ৰিজ'লিউশ্যন",
'show-big-image-preview' => 'এই খচৰাৰ আকাৰ: $1.',
'show-big-image-other' => "আন {{PLURAL:$2|ৰিজ'লিউশ্যন|ৰিজ'লিউশ্যনসমূহ}}: $1।",
'file-info-png-looped' => 'লুপকৃত',
'file-info-png-repeat' => "$1 {{PLURAL:$1|বাৰ|বাৰ}} চলোৱা হ'ল",
'file-info-png-frames' => '$1 {{PLURAL:$1|ফ্ৰেম|ফ্ৰেম}}',
+'file-no-thumb-animation' => "'''টোকা: কাৰিকৰী অসুবিধাবশতঃ এই ফাইলৰ থাম্বনেইল এনিমেটেড নহ'ব।'''",
+'file-no-thumb-animation-gif' => "'''টোকা: কাৰিকৰী অসুবিধাবশতঃ উচ্চ ৰিজ'লিউচনৰ GIF চিত্ৰ যেনে এইখন এনিমেটেড নহ'ব।'''",
# Special:NewFiles
'newimages' => 'নতুন ফাইলৰ বিথীকা',
# Scary transclusion
'scarytranscludedisabled' => '[আন্তঃৱিকি আন্তঃভুক্তি নিষ্ক্ৰিয় কৰা আছে]',
'scarytranscludefailed' => '[$1ৰ বাবে সাঁচ অনা অসফল হৈছে]',
+'scarytranscludefailed-httpstatus' => '[$1ৰ বাবে সাঁচ অনা অসফল হৈছে: HTTP $2]',
'scarytranscludetoolong' => '[URL অত্যাধিক দীঘল]',
# Delete conflict
* <span class="mw-specialpagecached">কেশ্ব কৰা বিশেষ পৃষ্ঠাসমূহ (অপ্ৰচলিতও হ\'ব পাৰে)।</span>',
'specialpages-group-maintenance' => 'তত্বাৱধানৰ কাৰ্যবিৱৰণীসমূহ',
'specialpages-group-other' => 'অন্যান্য বিশেষ পৃষ্ঠাসমূহ',
-'specialpages-group-login' => 'পà§\8dৰৱà§\87শ/সদসà§\8dযà¦à§\81à¦\95à§\8dতি',
+'specialpages-group-login' => 'পà§\8dৰৱà§\87শ/à¦\8fà¦\95াà¦\89ণà§\8dà¦\9f সà§\83ষà§\8dà¦\9fি à¦\95ৰà¦\95',
'specialpages-group-changes' => 'সাম্প্ৰতিক সালসলনি আৰু অভিলেখসমূহ',
'specialpages-group-media' => "মিডিয়া বিৱৰণী আৰু আপল'ডসমূহ",
'specialpages-group-users' => 'সদস্যবৃন্দ আৰু অধিকাৰসমূহ',
'api-error-file-too-large' => 'আপুনি দাখিল কৰা ফাইলখন বৰ ডাঙৰ ।',
'api-error-filename-tooshort' => 'ফাইলৰ নামটো অতি চুটি।',
'api-error-filetype-banned' => 'এই ধৰণৰ ফাইল নিষিদ্ধ।',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|অনুমোদিত ফাইল প্ৰকাৰ নহয়|সমূহ অনুমোদিত ফাইল প্ৰকাৰ নহয়}} । {{PLURAL:$3|অনুমোদিত ফাইল প্ৰকাৰ হ’ল|অনুমোদিত ফাইল প্ৰকাৰসমূহ হ’ল}} $2 ।',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|অনুমোদিত ফাইল প্ৰকাৰ নহয়|সমূহ অনুমোদিত ফাইল প্ৰকাৰ নহয়}}। অনুমোদিত {{PLURAL:$3|ফাইল প্ৰকাৰ হ’ল|ফাইল প্ৰকাৰসমূহ হ’ল}} $2।',
'api-error-filetype-missing' => 'ফাইল নামটোত এক্সটেন্ছন নাই।',
'api-error-hookaborted' => 'আপুনি কৰিব বিচৰা সালসলনি এটা এক্সটেনচনৰ দ্বাৰা বাতিল কৰা হৈছে।',
'api-error-http' => "আভ্যন্তৰীণ ত্ৰুটি: চাৰ্ভাৰৰ লগত সংযোগ স্থাপন নহ'ল।",
'shared-repo-from' => 'de $1',
'shared-repo' => 'un repositoriu compartíu',
'filepage.css' => "/* El CSS allugáu equí s'incluye na páxina de descripción del ficheru, que tamién s'incluye nes wikis clientes foriates */",
-'upload-disallowed-here' => 'Por desgracia nun pues sobrescribir esta imaxe.',
+'upload-disallowed-here' => 'Nun pues sobrescribir esti ficheru.',
# File reversion
'filerevert' => 'Revertir $1',
# Info page
'pageinfo-title' => 'Información sobro "$1"',
+'pageinfo-not-current' => 'Namái se pue amosar la información pa la revisión actual.',
'pageinfo-header-basic' => 'Información básica',
'pageinfo-header-edits' => "Historial d'ediciones",
'pageinfo-header-restrictions' => 'Proteición de páxina',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría anubrida|Categoríes anubríes}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Plantía incluída|Plantíes incluíes}} ($1)',
'pageinfo-toolboxlink' => 'Información de la páxina',
+'pageinfo-redirectsto' => 'Redirixe a',
+'pageinfo-redirectsto-info' => 'información',
+'pageinfo-contentpage' => 'Contada como páxina de conteníu',
+'pageinfo-contentpage-yes' => 'Sí',
+'pageinfo-protect-cascading' => "Les proteiciones s'activen en serie dende equí",
+'pageinfo-protect-cascading-yes' => 'Sí',
+'pageinfo-protect-cascading-from' => "Les proteiciones s'activen en serie dende",
# Skin names
'skinname-standard' => 'Clásicu',
'thu' => 'Кс',
'fri' => 'Йм',
'sat' => 'Шб',
-'january' => 'ғинуар (һыуығай)',
-'february' => 'февраль (шаҡай)',
-'march' => 'март (буранай)',
-'april' => 'апрель (алағарай)',
+'january' => 'ғинуар',
+'february' => 'февраль',
+'march' => 'март',
+'april' => 'апрель',
'may_long' => 'май (һабанай)',
-'june' => 'июнь (һөтай)',
-'july' => 'июль (майай)',
-'august' => 'август (урағай)',
-'september' => 'сентябрь (һарысай)',
-'october' => 'октябрь (ҡарасай)',
-'november' => 'ноябрь (ҡырпағай)',
-'december' => 'декабрь (аҡъюлай)',
-'january-gen' => 'ғинуар (һыуығай)',
-'february-gen' => 'февраль (шаҡай)',
+'june' => 'июнь',
+'july' => 'июль',
+'august' => 'август',
+'september' => 'сентябрь',
+'october' => 'октябрь',
+'november' => 'ноябрь',
+'december' => 'декабрь',
+'january-gen' => 'ғинуар',
+'february-gen' => 'февраль',
'march-gen' => 'март',
'april-gen' => 'апрель',
'may-gen' => 'май',
'august-gen' => 'август',
'september-gen' => 'сентябрь',
'october-gen' => 'октябрь',
-'november-gen' => 'ноябрь (ҡырпағай)',
-'december-gen' => 'декабрь (аҡъюлай)',
+'november-gen' => 'ноябрь',
+'december-gen' => 'декабрь',
'jan' => 'ғин',
'feb' => 'фев',
'mar' => 'мар',
'currentrev' => 'Ағымдағы версия',
'currentrev-asof' => '$1, ағымдағы версия',
'revisionasof' => '$1 версияһы',
-'revision-info' => 'Версия: $1; $2',
+'revision-info' => '<div id="viewingold-warning" style="background: #FFBDBD; border: 1px solid #BB7979; color: #000000; margin: 1em 0 .5em; padding: .5em 1em; vertical-align: middle; font-weight: bold; font-family: Palatino Linotype, Microsoft Sans Serif, Arial Unicode MS, Droid Sans; clear: both;">Хәҙер һеҙ был биттең иҫке, <span id="mw-revision-name">$2</span> тарафынан <span id="mw-revision-date">$1</span> һаҡланған версияһын ҡарайһығыҙ. Уның <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}}} ағымдағы версиянан] айырмаһы булыуы мөмкин</span>.</div>',
'previousrevision' => '← Алдағы',
'nextrevision' => 'Киләһе →',
'currentrevisionlink' => 'Ағымдағы версия',
'qbbrowse' => 'Blaadeln',
'qbedit' => 'werkeln',
'qbpageoptions' => 'Seitenopzionen',
-'qbpageinfo' => 'Seitendaaten',
'qbmyoptions' => 'Meine Seiten',
'qbspecialpages' => 'Speziaalseiten',
'faq' => 'Heiffige Frong',
'vector-action-protect' => 'Protektaran',
'vector-action-undelete' => 'Bawion sa pagkapara',
'vector-action-unprotect' => 'Ribayan an proteksyon',
-'vector-simplesearch-preference' => 'Paganahon an pinapusog na suhestiyon sa paghahanap (Yanong panhanap sana)',
+'vector-simplesearch-preference' => 'Paganahon an pinagyanong panukod sa paghahanap (Pansolong kublit sana)',
'vector-view-create' => 'Magmukna',
'vector-view-edit' => 'Liwatón',
'vector-view-history' => 'Tanawon sa historiya',
'protectedpagetext' => 'An pahinang ini pigsará tangarig pogolon an paghirá.',
'viewsourcetext' => 'Pwede mong hilingón asin arógon an ginikanan kan pahinang ini:',
'viewyourtext' => "Saimong mahihiling asin makokopya an gikanan kan '''saimong mga pinagriliwat''' sa pahinang ini:",
-'protectedinterface' => 'An pahinang ini nagtatao nin interface para sa software, asin sarado tangarig mapondo an pag-abuso.',
-'editinginterface' => "'''Warning:''' Ika nagliliwat kan pahina na ginagamit sa pagtao nin pantahaw-olay na teksto para sa software.
+'protectedinterface' => 'An pahinang ini nagtatao nin panlaog-olay para sa software, asin protektado tangaring malikayan an abuso.
+Sa pagdagdag or pagliwat nin mga dakit-taramon para sa bilog na wiki, gamita tabi an [//translatewiki.net/translatewiki.net], an MediaWiki sa proyektong lokalisasyon.',
+'editinginterface' => "'''Patanid:''' Ika nagliliwat kan pahina na ginagamit sa pagtao nin pantahaw-olay na teksto para sa software.
An mga pagbabago kaining pahina makaka-apekto sa hitsura kan pantahaw-olay nin paragamit para sa iba man na paragamit.
Para sa mga pagdadakit-taramon, pakikonsidera man tabi an paggagamit kan [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], an MediaWiking lokalisasyon kan proyekto.",
'sqlhidden' => '(nakatagô an hapót nin SQL)',
Ika mapuwedeng [[Special:Search/{{PAGENAME}}|maghanap para sa titulo kan pahinang ini]] sa iba pang mga pahina,
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan],
o [{{fullurl:{{FULLPAGENAME}}|action=edit}} liwaton ining pahina]</span>.',
-'noarticletext-nopermission' => 'Mayo tabi sa presente nin teksto sa pahinang ini.
-Ika mapuwedeng [[Special:Search/{{PAGENAME}}|maghanap para sa titulo kan pahinang ini]] sa iba pang mga pahina,
+'noarticletext-nopermission' => 'Mayong sa presente nin teksto an pahinang ini.
+Ika mapuwedeng [[Special:Search/{{PAGENAME}}|hanapa para kaining titulo kan pahina]] sa iba pang mga pahina,
o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan]</span>.',
'missing-revision' => 'An rebisyon #$1 kan pahina pinagngaranan na "{{PAGENAME}}" bakong eksistido.
'edit-already-exists' => 'Dai maggibo an bàgong pahina.
Igwa na kaini.',
'defaultmessagetext' => 'Tugmadong mensahe sa teksto',
+'content-failed-to-parse' => 'Nagpalya sa paglunhay an $2 na laman para sa $1 na modelo: $3',
+'invalid-content-data' => 'Imbalidong datos nin laman',
+'content-not-allowed-here' => '"$1" na laman dae pinagtutugutan sa pahina [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wiki-teksto',
+'content-model-text' => 'yanong-teksto',
+'content-model-javascript' => 'Java-Kurit',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Patanid tabi:''' Ining pahina naglalaman nin grabe kadakulon na ekspensibong programang pambaranga sa punksyon nin mga pag-aapod.
'revdelete-concurrent-change' => 'Napasalang pagsasangli kan item petsado $2, $1: An status nagpapahiling na pinagribayan kan ibang tawo habang ikan nagprubar na sanglian ini.
Paki-tsek tabi sa mga talaan.',
'revdelete-only-restricted' => 'Napasalang pagtatago kan item petsado $2, $1: Ika dae tabi makakapaglubog kan mga item na mahiling kan mga administrador na mayo kang piniling saro sa iba pang bisibilidad na mga pagpipilian.',
-'revdelete-reason-dropdown' => '*Pirmihang mga rason sa pagpura
+'revdelete-reason-dropdown' => '*Komon na mga rason sa pagpura
**Paglapas kan Copyright
**Bakong angay na personal na impormasyon
+**Bakong angay na pangaran nin paragamit
**Potensiyal na libelosong impormasyon',
'revdelete-otherreason' => 'Iba pa/kadagdagang rason:',
'revdelete-reasonotherlist' => 'Ibang rason',
'timezoneregion-indian' => 'Indiyang Kadagatan',
'timezoneregion-pacific' => 'Pasipikong Kadagatan',
'allowemail' => "Togotan an mga ''e''-surat halî sa ibang mga parágamit",
-'prefs-searchoptions' => 'Pagpipilian sa Paghahanap',
+'prefs-searchoptions' => 'Hanapa',
'prefs-namespaces' => 'Pangarang mga espasyo',
'defaultns' => 'Kun laen maghanap sa laog kaining pangarang mga espasyo:',
'default' => 'pwestong normal',
'prefs-signature' => 'Pirma',
'prefs-dateformat' => 'Pampetsang pormat',
'prefs-timeoffset' => 'Pan-oras na tapal',
+'prefs-advancedediting' => 'Pinag-abanteng mga Pagpipilian',
'prefs-advancedrc' => 'Pangenot na mga pagpipilian',
'prefs-advancedrendering' => 'Abantidong mga pagpipilian',
'prefs-advancedsearchoptions' => 'Abantidong mga pagpipilian',
'backend-fail-internal' => 'Sarong bakong bistadong kasalaan an nangyari sa panampad na sarayan "$1".',
'backend-fail-contenttype' => 'Dae makapagdeterminar sa tipo kan laog kan sagunson na magsaray sa "$1".',
'backend-fail-batchsize' => 'An panampad na sarayan pinagtao nin sarong batch kan sagunson sa $1 {{PLURAL:$1|operasyon|mga operasyon}}; an limit $2 {{PLURAL:$2|operasyon|mga operasyon}}.',
-'backend-fail-usable' => 'Dae makakapagsurat nin sagunson $1 sa dahilan na kulang an permiso o nawawara an mga direktoryo/kaaganan.',
+'backend-fail-usable' => 'Dae makakapagbasa o makakapagsurat nin sagunson sa "$1" nin hulita ta kulang an mga permiso o nawawara an mga direktoryo/kaaganan.',
# File journal errors
'filejournal-fail-dbconnect' => 'Dae makakasugpon sa datos-sarayan kan dyornal para sa panampad na sarayan "$1".',
'uploadnewversion-linktext' => 'Magkarga nin bàgong bersyon kaining file',
'shared-repo-from' => 'gikan sa $1',
'shared-repo' => 'sarong pinagheras na repositoryo',
+'upload-disallowed-here' => 'Ika dae makakapagpatong sa pagsurat kaining sagunson.',
# File reversion
'filerevert' => 'Ibalik an $1',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|byte|mga byte}}',
'ncategories' => '$1 {{PLURAL:$1|kategorya|mga kategorya}}',
+'ninterwikis' => '$1 {{PLURAL:$1|an interwiki|mga interwiki}}',
'nlinks' => '$1 {{PLURAL:$1|takod|mga takod}}',
'nmembers' => '$1 {{PLURAL:$1|myembro|mga myembro}}',
'nrevisions' => '$1 {{PLURAL:$1|pagpakarhay|mga pagpakarhay}}',
'mostlinkedtemplates' => 'An mga pinakanatakodan na templato',
'mostcategories' => 'Mga artikulong may pinaka dakol na kategorya',
'mostimages' => 'An pinakapakisugpunan na mga sagunson',
+'mostinterwikis' => 'Mga pahina na igwang mas kadakol na interwiki',
'mostrevisions' => 'Mga artikulong may pinakadakol na pagpakarháy',
'prefixindex' => 'Gabos na mga pahina na igwa nin enotang panigmit',
'prefixindex-namespace' => 'Gabos na mga pahina na igwa nin enotang panigmit ($1 espasyong ngaran)',
asin may marhay na ''e''-surat sa saimong [[Special:Preferences|Mga kabôtan]]
para makapadara nin ''e''-surat sa ibang parágamit.",
'emailuser' => 'E-koreohan ining paragamit',
+'emailuser-title-target' => 'E-surat kaining {{GENDER:$1|paragamit}}',
+'emailuser-title-notarget' => 'E-surat na paragamit',
'emailpage' => 'E-suratan an parágamit',
'emailpagetext' => 'Ika makakagamit kan porma na yaon sa ibaba tanganing magpadara nin e-surat na mensahe sa paragamit na ini.
An e-surat na adres na saimong ilalaog sa [[Special:Preferences|saimong paragamit kagustuhan]] magluluwas bilang iyo an "Gikan ki" adres kan e-surat, kaya an sinuratan makakapagsimbag direkta mismo saimo.',
'undeletedrevisions' => '{{PLURAL:$1|1 rebisyon|$1 mga rebisyon}} ipinagbalik',
'undeletedrevisions-files' => '{{PLURAL:$1|1 rebisyon|$1 mga rebisyon}} asin {{PLURAL:$2|1 sagunson|$2 mga sagunson}} ipinagbalik',
'undeletedfiles' => '{{PLURAL:$1|1 sagunson|$1 mga sagunson}} ipinagbalik',
-'cannotundelete' => 'Naprakaso an pagbalik kan pigparâ; pwede ser an binawi an pagparâ kan páhina kan ibang parágamit.',
+'cannotundelete' => 'An dae pagpura nagpalya:
+$1',
'undeletedpage' => "'''binalik na an $1 '''
Ikonsultar an [[Special:Log/delete|historial nin pagparâ]] para mahiling an lista nin mga kaaaging pagparâ asin pagbalik.",
'blocklogpage' => 'Usip nin pagbagat',
'blocklog-showlog' => 'Ining paragamit dati nang pinagbarahan.
An talaan nin pagbara nakahaya sa ibaba bilang reperensiya:',
+'blocklog-showsuppresslog' => 'Ining paragamit pinagkubkob asin dati nang ipinagtago.
+An talaan nin pagpaunlok ipinagtao sa ibaba para hilingan.',
'blocklogentry' => 'binagat na [[$1]] na may oras nin pagpaso na $2 $3',
-'blocklogtext' => 'Ini an historial kan pagbagat asin pagbawi sa pagbagat nin mga paragamit. An mga enseguidang binagat na direccion nin
-IP dai nakalista digdi. Hilingon an [[Special:BlockList|IP lista nin mga binagat]] para sa lista nin mga nakaandar na mga pagpangalad buda mga pagbagat.',
+'reblock-logentry' => 'pinagliwat an mga panuytoy nin pagkubkob para sa [[$1]] na igwang oras nin pagpaso kan $2 $3',
+'blocklogtext' => 'Ini sarong talaan kan mga aksyon nin paragamit sa pagkukubkob asin dae pagkukubkob.
+Awtomatikong pagkubkob kan IP address dae pinaglilista.
+Hilngon an [[Special:Blocklist|block list]] para sa listahan kan presenteng operasyonal na pagpangalad asin pagkukubkob.',
'unblocklogentry' => 'binawi an pagbagat $1',
'block-log-flags-anononly' => 'Mga paragamit na anónimo sana',
'block-log-flags-nocreate' => "pigpopondohán an paggibo nin ''account'",
'block-log-flags-noautoblock' => 'pigpopondo an enseguidang pagbagat',
'block-log-flags-noemail' => 'binagát an e-surat',
+'block-log-flags-angry-autoblock' => 'pinakusog na awto-kubkob pinaandar',
+'block-log-flags-hiddenname' => 'pangaran nin paragamit itinago',
'range_block_disabled' => 'Pigpopondo an abilidad kan sysop na maggibo nin bagat na hilera.',
'ipb_expiry_invalid' => 'Dai pwede ini bilang oras kan pagpasó.',
-'ipb_already_blocked' => 'Dating binagat na si "$1"',
+'ipb_expiry_temp' => 'Itinagong pangaran nin paragamit na nagkukubkob dapat na magin permanente.',
+'ipb_hide_invalid' => 'Dae nakayanan na untukon ining panindog; ini gayod nagkaigwa nin kadakulon na mga pagliliwat.',
+'ipb_already_blocked' => 'An "$1" pinagkubkob na',
+'ipb-needreblock' => 'An $1 pinagkubkob na. Gusto mong liwaton an mga panuytoy?',
+'ipb-otherblocks-header' => 'Ibang {{PLURAL:$1|kubkob|mga kubkob',
+'unblock-hideuser' => 'Ika dae makakakubkog kaining paragamit, siring na an saindang paragamit na ngaran itinatago.',
'ipb_cant_unblock' => 'Error: Dai nahanap an ID nin binagat na $1. Puede ser na dati nang binawi an pagbagat kaini.',
'ip_range_invalid' => 'Dai pwede ining serye nin IP.',
'proxyblocker' => 'Parabagát na karibay',
* @author Тест
*/
+$fallback = 'be';
+
$bookstoreList = array(
'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
'note' => "'''Заўвага: '''",
'previewnote' => "'''Гэта толькі папярэдні прагляд.'''
Вашыя зьмены яшчэ не былі захаваныя!",
-'continue-editing' => 'Працягнуць рэдагаваньне',
+'continue-editing' => 'Перайсьці да рэдагаваньня',
'previewconflict' => 'Гэта папярэдні прагляд тэксту зь верхняга вакна рэдагаваньня, так ён будзе выглядаць, калі Вы вырашыце яго захаваць.',
'session_fail_preview' => "'''Не атрымалася захаваць Вашую праўку праз тое, што былі страчаныя зьвесткі пра сэсію.
Калі ласка, паспрабуйце яшчэ раз. Калі памылка ня зьнікне, паспрабуйце [[Special:UserLogout|выйсьці з сыстэмы]] і ўвайсьці ізноў.'''",
'edit-already-exists' => 'Немагчыма стварыць новую старонку.
Яна ўжо існуе.',
'defaultmessagetext' => 'Перадвызначаны тэкст паведамленьня',
+'content-failed-to-parse' => 'Зьмест «$2» не адпавядае тыпу $1: $3.',
+'invalid-content-data' => 'Няслушныя зьвесткі',
+'content-not-allowed-here' => 'Зьмест тыпу «$1» на старонцы [[$2]] не дазволены',
+
+# Content models
+'content-model-wikitext' => 'вікі-тэкст',
+'content-model-text' => 'просты тэкст',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Папярэджаньне: гэтая старонка ўтрымлівае зашмат працаёмістых зваротаў да функцыяў парсэра.
'shared-repo-from' => '$1',
'shared-repo' => 'агульнага сховішча',
'shared-repo-name-wikimediacommons' => 'Вікісховішча',
-'upload-disallowed-here' => 'Ð\9dа жалÑ\8c Ð\92Ñ\8b нÑ\8f можаÑ\86е пеÑ\80азапÑ\96Ñ\81аÑ\86Ñ\8c гÑ\8dÑ\82Ñ\83Ñ\8e вÑ\8bÑ\8fвÑ\83.',
+'upload-disallowed-here' => 'Ð\92Ñ\8b нÑ\8f можаÑ\86е пеÑ\80азапÑ\96Ñ\81аÑ\86Ñ\8c гÑ\8dÑ\82Ñ\8b Ñ\84айл.',
# File reversion
'filerevert' => 'Вярнуць $1',
'emailpagetext' => 'Вы можаце выкарыстоўваць форму ніжэй, каб даслаць гэтаму ўдзельніку ліст па электроннай пошце.
Адрас электроннай пошты, які Вы пазначалі ў [[Special:Preferences|сваіх наладах]], будзе пазначаны ў полі ліста «Ад», і ўдзельнік зможа даслаць на гэты адрас адказ.',
'usermailererror' => 'Пры адсыланьні пошты адбылася памылка:',
-'defemailsubject' => 'ÐлекÑ\82Ñ\80оннаÑ\8f поÑ\88Ñ\82а {{GRAMMAR:родны|{{SITENAME}}}} ад {{GENDER:$1|удзельніка|удзельніцы}} «$1»',
+'defemailsubject' => 'Ð\9bÑ\96Ñ\81Ñ\82 з {{GRAMMAR:родны|{{SITENAME}}}} ад {{GENDER:$1|удзельніка|удзельніцы}} «$1»',
'usermaildisabled' => 'Электронная пошта ўдзельніка адключаная',
'usermaildisabledtext' => 'Вы ня можаце дасылаць электронныя лісты іншым удзельнікам {{GRAMMAR:родны|{{SITENAME}}}}',
'noemailtitle' => 'Адрас электроннай пошты адсутнічае',
'watchnochange' => 'Нічога з Вашага сьпісу назіраньня не зьмянілася за паказаны пэрыяд.',
'watchlist-details' => 'У Вашым сьпісе назіраньня $1 {{PLURAL:$1|старонка|старонкі|старонак}} за выключэньнем старонак абмеркаваньня.',
'wlheader-enotif' => '* Дасылка паведамленьняў па электроннай пошце ўключаная.',
-'wlheader-showupdated' => "* СÑ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f бÑ\8bлÑ\96 зÑ\8cмененÑ\8bÑ\8f паÑ\81Ñ\8cлÑ\8f Ð\92аÑ\88ага апоÑ\88нÑ\8fга вÑ\96зÑ\8bÑ\82Ñ\83, вÑ\8bлÑ\83Ñ\87анÑ\8bÑ\8f '''Ñ\82лÑ\83стым''' шрыфтам",
+'wlheader-showupdated' => "* СÑ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f бÑ\8bлÑ\96 зÑ\8cмененÑ\8bÑ\8f паÑ\81Ñ\8cлÑ\8f Ð\92аÑ\88ага апоÑ\88нÑ\8fга вÑ\96зÑ\8bÑ\82Ñ\83, вÑ\8bлÑ\83Ñ\87анÑ\8bÑ\8f '''Ñ\82оÑ\9eстым''' шрыфтам",
'watchmethod-recent' => 'прагляд апошніх зьменаў у старонках са сьпісу назіраньня',
'watchmethod-list' => 'прагляд старонак са сьпісу назіраньня дзеля апошніх зьменах',
'watchlistcontains' => 'Ваш сьпіс назіраньня зьмяшчае $1 {{PLURAL:$1|старонка|старонкі|старонак}}.',
'actioncomplete' => 'Дзеяньне выкананае',
'actionfailed' => 'Дзеяньне ня выкананае',
'deletedtext' => '«$1» была выдаленая.
-Ð\93лÑ\8fдзÑ\96Ñ\86е жÑ\83Ñ\80нал вÑ\8bдаленÑ\8cнÑ\8fÑ\9e Ñ\83 $2.',
+Ð\97апÑ\96Ñ\81Ñ\8b пÑ\80а вÑ\8bдаленÑ\8bÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96 зÑ\8cмÑ\8fÑ\88Ñ\87аÑ\8eÑ\86Ñ\86а Ñ\9e $2.',
'dellogpage' => 'Журнал выдаленьняў',
'dellogpagetext' => 'Сьпіс апошніх выдаленьняў.',
'deletionlog' => 'журнал выдаленьняў',
'undeletedrevisions' => '{{PLURAL:$1|адноўленая $1 вэрсія|адноўленыя $1 вэрсіі|адноўленыя $1 вэрсіяў}}',
'undeletedrevisions-files' => 'адноўленыя $1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсіяў}} і $2 {{PLURAL:$2|файл|файлы|файлаў}}',
'undeletedfiles' => '{{PLURAL:$1|адноўлены $1 файл|адноўленыя $1 файлы|адноўленыя $1 файлаў}}',
-'cannotundelete' => 'Аднаўленьне не адбылося; нехта іншы мог пасьпець аднавіць старонку раней.',
+'cannotundelete' => 'Памылка аднаўленьня:
+$1',
'undeletedpage' => "'''Старонка $1 была адноўленая'''
Глядзіце [[Special:Log/delete|журнал выдаленьняў]] для прагляду апошніх выдаленьняў і аднаўненьняў.",
'immobile-target-namespace-iw' => 'Інтэрвікі-спасылка — няслушная назва для пераносу старонкі.',
'immobile-source-page' => 'Гэтую старонку нельга пераносіць.',
'immobile-target-page' => 'Немагчыма перанесьці старонку пад гэтую назву.',
+'bad-target-model' => 'Выніковая старонка выкарыстоўвае іншы тып зьместу. Немагчыма пераўтварыць $1 у $2.',
'imagenocrossnamespace' => 'Нельга перанесьці файл у ня-файлавую прастору назваў',
'nonfile-cannot-move-to-file' => 'Нельга перанесьці ня файл у прастору назваў файлаў',
'imagetypemismatch' => 'Новае пашырэньне файла не адпавядае яго тыпу',
# Info page
'pageinfo-title' => 'Інфармацыя пра «$1»',
+'pageinfo-not-current' => 'Інфармацыя паказываецца толькі для бягучай вэрсіі.',
'pageinfo-header-basic' => 'Асноўныя зьвесткі',
'pageinfo-header-edits' => 'Рэдагаваньні',
'pageinfo-header-restrictions' => 'Абарона старонкі',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Схаваная катэгорыя|Схаваныя катэгорыі}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Шаблён|Шаблёны}} ($1)',
'pageinfo-toolboxlink' => 'Зьвесткі пра старонку',
+'pageinfo-redirectsto' => 'Перанакіроўвае на',
+'pageinfo-redirectsto-info' => 'інфармацыя',
+'pageinfo-contentpage' => 'Лічыцца артыкулам',
+'pageinfo-contentpage-yes' => 'Так',
+'pageinfo-protect-cascading' => 'Адсюль пачынаецца каскадная абарона',
+'pageinfo-protect-cascading-yes' => 'Так',
+'pageinfo-protect-cascading-from' => 'Каскадная абароная пачынаецца з',
# Skin names
'skinname-standard' => 'Клясычнае',
'version-entrypoints' => 'Уваходныя адрасы',
'version-entrypoints-header-entrypoint' => 'Пункт уваходу',
'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Шлях да артыкула]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Пуць да скрыпту]',
# Special:FilePath
'filepath' => 'Шлях да файла',
'qbbrowse' => 'ब्राउज',
'qbedit' => 'सम्पादन',
'qbpageoptions' => 'ई पन्ना',
-'qbpageinfo' => 'प्रसंग',
'qbmyoptions' => 'हमार पन्ना',
'qbspecialpages' => 'विशेष पन्ना',
'faq' => 'साधारण सवाल',
'qbbrowse' => 'ब्राउज',
'qbedit' => 'सम्पादन',
'qbpageoptions' => 'ई पन्ना',
-'qbpageinfo' => 'प्रसंग',
'qbmyoptions' => 'हमार पन्ना',
'qbspecialpages' => 'विशेष पन्ना',
'faq' => 'साधारण सवाल',
'qbfind' => 'འཚོལ་བ།',
'qbedit' => 'རྩོམ་སྒྲིག',
'qbpageoptions' => 'ཤོག་ངོས་འདི།',
-'qbpageinfo' => 'འབྲེལ་ཆགས།',
'qbmyoptions' => 'ངའི་ཤོག་ངོས།',
'qbspecialpages' => 'དམིཊ་བསལ་གྱི་བཟོ་བཅོས།',
'faq' => 'རྒྱུན་ལྡན་དྲི་བ།',
'qbbrowse' => 'বুলিয়া চা',
'qbedit' => 'পতানি',
'qbpageoptions' => 'পাতা এহানর সারুক',
-'qbpageinfo' => 'পাতা এহানর পৌ',
'qbmyoptions' => 'মর পছন',
'qbspecialpages' => 'বিশেষ পাতাহানি',
'faq' => 'আঙলাক',
'uploadnewversion-linktext' => 'Kargañ ur stumm nevez eus ar restr-mañ',
'shared-repo-from' => 'eus $1',
'shared-repo' => 'ur sanailh rannet',
-'upload-disallowed-here' => "Siwazh, ne c'hallit ket erlec'hiañ ar skeudenn-mañ",
+'upload-disallowed-here' => "Ne c'hallit ket erlec'hiañ ar restr-mañ",
# File reversion
'filerevert' => 'Disteuler $1',
# Info page
'pageinfo-title' => 'Titouroù evit "$1"',
+'pageinfo-not-current' => "Evit an adwel bremañ e c'hall bezañ diskwelet an titouroù hepken.",
'pageinfo-header-basic' => 'Titouroù diazez',
'pageinfo-header-edits' => 'Kemmoù',
'pageinfo-header-restrictions' => 'Gwarez ar bajenn',
'updatedmarker' => 'actualitzat des de la darrera visita',
'printableversion' => 'Versió per a impressora',
'permalink' => 'Enllaç permanent',
-'print' => "Envia aquesta pàgina a la cua d'impressió",
+'print' => 'Imprimir',
'view' => 'Mostra',
'edit' => 'Modifica',
'create' => 'Crea',
'viewyourtext' => "Vostè pot veure i copiar la font de ' ' les modificacions ' ' d'aquesta pàgina:",
'protectedinterface' => "Aquesta pàgina proporciona el text de la interfície del software d'aquest wiki i està protegida per evitar els abusos.
Per agregar o canviar les traduccions per a tots els wikis, si us plau fes servir [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
-'editinginterface' => "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'altres usuaris. Pel que fa a les traduccions, plantegeu-vos utilitzar la [//translatewiki.net/wiki/Main_Page?setlang=ca translatewiki.net], el projecte de traducció de MediaWiki.",
+'editinginterface' => "'''Avís:''' Esteu editant una pàgina que conté cadenes de text per a la interfície d'aquest programari. Tingueu en compte que els canvis que es fan a aquesta pàgina afecten a l'aparença de la interfície d'altres usuaris. Per afegir o modificar traduccions a totes les wikis, plantegeu-vos utilitzar la [//translatewiki.net/ translatewiki.net], el projecte de localització de MediaWiki.",
'sqlhidden' => '(consulta SQL oculta)',
'cascadeprotected' => "Aquesta pàgina està protegida i no es pot modificar perquè està inclosa en {{PLURAL:$1|la següent pàgina, que té|les següents pàgines, que tenen}} activada l'opció de «protecció en cascada»:
$2",
'passwordreset-capture-help' => "Si marqueu aquesta casella, el missatge de correu electrònic (amb la contrasenya temporal) es mostrarà al mateix moment que sigui enviat a l'usuari.",
'passwordreset-email' => 'Adreça de correu electrònic:',
'passwordreset-emailtitle' => 'Detalls del compte a {{SITENAME}}',
-'passwordreset-emailtext-ip' => "Algú (vós mateix segurament, des de l'adreça IP $1) ha demanat un recordatori dels detalls dels vostres comptes al projecte {{SITENAME}} <$4>. {{PLURAL:$3|El següent compte d'usuari està associat|Els següents comptes d'usuari estan associats}} amb aquesta adreça de correu electrònic:
+'passwordreset-emailtext-ip' => "Algú (vós mateix segurament, des de l'adreça IP $1) ha demanat un recordatori dels detalls dels vostres comptes al projecte {{SITENAME}} ($4). {{PLURAL:$3|El següent compte d'usuari està associat|Els següents comptes d'usuari estan associats}} amb aquesta adreça de correu electrònic:
$2
{{PLURAL:$3|Aquesta contrasenya temporal caducarà|Aquestes contrasenyes temporals caducaran}} en {{PLURAL:$5|un dia|$5 dies}}.
-Hauríeu d'entrar {{PLURAL:$3|al compte per a fixar-hi una nova contrasenya|als comptes per a fixar-hi noves contrasenyes}} al més aviat possible. Si algú que no sou vós és qui ha fet aquesta petició o si heu recordat la contrasenya original i ja no la voleu canviar, podeu ignorar aquest missatge i seguir utilitzant la vostra antiga contrasenya.",
+Hauríeu d'entrar al compte per a fixar-hi una nova contrasenya al més aviat possible. Si algú que no sou vós és qui ha fet aquesta petició o si heu recordat la contrasenya original i ja no la voleu canviar, podeu ignorar aquest missatge i seguir utilitzant la vostra antiga contrasenya.",
'passwordreset-emailtext-user' => "L'usuari $1 de {{SITENAME}} ha demanat un recordatori dels detalls dels vostres comptes al projecte {{SITENAME}} <$4>. {{PLURAL:$3|El següent compte d'usuari està associat|Els següents comptes d'usuari estan associats}} amb aquesta adreça de correu electrònic:
$2
'userpage-userdoesnotexist-view' => 'El compte d\'usuari "$1" no està registrat.',
'blocked-notice-logextract' => "En aquests moments aquest compte d'usuari es troba blocat.
Per més detalls, la darrera entrada del registre es mostra a continuació:",
-'clearyourcache' => "'''Nota:''' després de guardar possiblement necessites refrescar el teu cache per poder veure els canvis.
-* '''Firefox / Safari:''' pressiona ''Shift'' mentre cliques el botó ''Actualitzar'', o pressiona ''Ctrl+F5'' o ''Ctrl+R'' (''⌘+R'' a Mac)
-* '''Google Chrome:''' pressiona ''Ctrl+Shift+R'' (''⌘+Shift+R'' a Mac)
-* '''Internet Explorer:''' pressiona la tecla ''Ctrl'' mentre cliques a ''Actualitzar'' o pressiona ''Ctrl+F5''
-* '''Opera:''' buida la memòria cau (cache) ''Eines → Preferències''",
+'clearyourcache' => "'''Nota:''' Després de desar, possiblement necessiteu refrescar la memòria cau del vostre navegador per a veure'n els canvis.
+* '''Firefox / Safari:''' Premeu ''Shift'' mentre cliqueu el botó ''Actualitzar'', o pressioneu ''Ctrl+F5'' o ''Ctrl+R'' (''⌘+R'' a Mac)
+* '''Google Chrome:''' Premeu ''Ctrl+Shift+R'' (''⌘+Shift+R'' a Mac)
+* '''Internet Explorer:''' Premeu la tecla ''Ctrl'' mentre cliqueu a ''Actualitzar'' o pressioneu ''Ctrl+F5''
+* '''Opera:''' Netegeu la memòria cau ''Eines → Preferències''",
'usercssyoucanpreview' => "'''Consell:''' Utilitzeu el botó \"{{int:showpreview}}\" per provar el vostre nou CSS abans de desar-lo.",
'userjsyoucanpreview' => "'''Consell:''' Utilitzeu el botó \"{{int:showpreview}}\" per provar el vostre nou JavaScript abans de desar-lo.",
'usercsspreview' => "'''Recordeu que esteu previsualitzant el vostre CSS d'usuari.'''
'note' => "'''Nota:'''",
'previewnote' => "'''Recorda que això és només una previsualització.'''
Els vostres canvis encara no s'han desat!",
-'continue-editing' => "Continua l'edició",
+'continue-editing' => "Aneu a l'àrea d'edició",
'previewconflict' => "Aquesta previsualització reflecteix, a l'àrea
d'edició superior, el text tal i com apareixerà si trieu desar-lo.",
'session_fail_preview' => "'''No s'ha pogut processar la vostra modificació a causa d'una pèrdua de dades de la sessió.
'edit-already-exists' => "No s'ha pogut crear una pàgina.
Ja existeix.",
'defaultmessagetext' => 'Missatge per defecte',
+'content-failed-to-parse' => "Ha fallat l'anàlisi del contingut de $2 per al model $1: $3",
+'invalid-content-data' => 'Dades de contingut no vàlides',
+'content-not-allowed-here' => 'No és permés el contingut "$1" a la pàgina [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'text net',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "Atenció: Aquesta pàgina conté massa crides a funcions parserfunction complexes.
'timezoneregion-indian' => 'Oceà Índic',
'timezoneregion-pacific' => 'Oceà Pacífic',
'allowemail' => 'Permet que altres usuaris puguin enviar-me correus electrònics',
-'prefs-searchoptions' => 'Preferències de la cerca',
+'prefs-searchoptions' => 'Cerca',
'prefs-namespaces' => 'Espais de noms',
'defaultns' => 'Cerca per defecte en els següents espais de noms:',
'default' => 'per defecte',
'backend-fail-internal' => "S'ha produït un error desconegut en el fitxer de rerefons d'emmagatzemament «$1».",
'backend-fail-contenttype' => 'No es pot determinar el tipus de contingut del fitxer per emmagatzemar a «$1».',
'backend-fail-batchsize' => "El rerefons d'emmagatzemament ha rebut un lot {{PLURAL:$1|d'$1 operació|de $1 operacions}} de fitxer; el límit és $2 {{PLURAL:$2|operació|operacions}}.",
-'backend-fail-usable' => "No s'ha pogut escriure el fitxer $1 a causa de permisos insuficients o perquè hi manquen directoris/contenidors.",
+'backend-fail-usable' => 'No s\'ha pogut llegir ni escriure el fitxer "$1" a causa de permisos insuficients o perquè hi manquen directoris/contenidors.',
# File journal errors
'filejournal-fail-dbconnect' => 'No es pot connectar amb la base de dades per emmagatzemar el backend "$1".',
'uploadnewversion-linktext' => "Carrega una nova versió d'aquest fitxer",
'shared-repo-from' => 'des de $1',
'shared-repo' => 'un repositori compartit',
+'upload-disallowed-here' => 'No pot sobreescriure aquest fitxer.',
# File reversion
'filerevert' => 'Reverteix $1',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|octet|octets}}',
'ncategories' => '$1 {{PLURAL:$1|categoria|categories}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
'nlinks' => '$1 {{PLURAL:$1|enllaç|enllaços}}',
'nmembers' => '$1 {{PLURAL:$1|membre|membres}}',
'nrevisions' => '$1 {{PLURAL:$1|revisió|revisions}}',
'mostlinkedtemplates' => 'Plantilles més usades',
'mostcategories' => 'Pàgines amb més categories',
'mostimages' => 'Fitxers més enllaçats',
+'mostinterwikis' => 'Pàgines amb més interwikis',
'mostrevisions' => 'Pàgines més modificades',
'prefixindex' => 'Totes les pàgines per prefix',
'prefixindex-namespace' => 'Totes les pàgines amb prefix (espai de noms $1)',
'immobile-target-namespace-iw' => "No es poden moure pàgines a l'enllaç interwiki",
'immobile-source-page' => 'Aquesta pàgina no es pot moure.',
'immobile-target-page' => 'No es pot moure cap a una destinació amb aquest títol.',
+'bad-target-model' => 'El destí desitjat utilitza un model de contingut diferent. No es pot convertir de $1 a $2.',
'imagenocrossnamespace' => 'No es pot moure la imatge a un espai de noms on no li correspon',
'nonfile-cannot-move-to-file' => 'No es pot moure la imatge a un espai de noms on no li correspon',
'imagetypemismatch' => 'La nova extensió de fitxer no coincideix amb el seu tipus',
# Info page
'pageinfo-title' => 'Informació de «$1»',
+'pageinfo-not-current' => 'Només es pot visualitzar la informació per a la revisió actual.',
'pageinfo-header-basic' => 'Informació bàsica',
'pageinfo-header-edits' => "Historial d'edicions",
'pageinfo-header-restrictions' => 'Protecció de pàgina',
+'pageinfo-header-properties' => 'Propietats de la pàgina',
+'pageinfo-display-title' => 'Títol mostrat',
+'pageinfo-default-sort' => "Clau d'ordenació predeterminada",
+'pageinfo-length' => 'Mida de la pàgina (en bytes)',
+'pageinfo-article-id' => 'ID de la pàgina',
+'pageinfo-robot-policy' => 'Estat del motor de cerca',
+'pageinfo-robot-index' => 'Indexable',
+'pageinfo-robot-noindex' => 'No indexable',
'pageinfo-views' => 'Número de visites',
'pageinfo-watchers' => "Número d'usuaris que vigilen la pàgina",
+'pageinfo-redirects-name' => 'Redireccions a aquesta pàgina',
+'pageinfo-subpages-name' => "Subpàgines d'aquesta pàgina",
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecció|redireccions}}; $3 {{PLURAL:$3|no redireció|no redireccions}})',
'pageinfo-firstuser' => 'Creador de la pàgina',
'pageinfo-firsttime' => 'Data de la creació de la pàgina',
'pageinfo-lastuser' => 'Últim editor',
'pageinfo-lasttime' => "Data de l'última edició",
'pageinfo-edits' => "Número total d'edicions",
'pageinfo-authors' => "Número total d'autors diferents",
+'pageinfo-recent-edits' => "Número d'edicions recents (en els darrers $1)",
+'pageinfo-recent-authors' => "Número recent d'autors diferents",
+'pageinfo-magic-words' => '{{PLURAL:$1|Paraula clau|Paraules clau}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categories ocultes}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|plantilla inclosa|plantilles incloses}} ($1)',
+'pageinfo-toolboxlink' => 'Informació de la pàgina',
+'pageinfo-redirectsto' => 'Redirigeix a',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Comptat com una pàgina de contingut',
+'pageinfo-contentpage-yes' => 'Sí',
+'pageinfo-protect-cascading' => "Proteccions en cascada des d'aquí",
+'pageinfo-protect-cascading-yes' => 'Sí',
+'pageinfo-protect-cascading-from' => 'Proteccions en cascada des de',
# Skin names
'skinname-standard' => 'Clàssic',
'file-info-size-pages' => '$1 × $2 píxels, mida del fitxer: $3, tipus MIME: $4, $5 {{PLURAL:$5|pàgina|pàgines}}',
'file-nohires' => 'No hi ha cap versió amb una resolució més gran.',
'svg-long-desc' => 'fitxer SVG, nominalment $1 × $2 píxels, mida del fitxer: $3',
+'svg-long-desc-animated' => 'Fitxer SVG animat, nominalment $1 × $2 píxels, mida del fitxer: $3',
'show-big-image' => 'Imatge en màxima resolució',
'show-big-image-preview' => "Mida d'aquesta previsualització: $1.",
'show-big-image-other' => '{{PLURAL:$2|Altra resolució|Altres resolucions}}: $1.',
'file-info-png-looped' => 'embuclat',
'file-info-png-repeat' => "s'ha reproduït $1 {{PLURAL:$1|vegada|vegades}}",
'file-info-png-frames' => '$1 {{PLURAL:$1|fotograma|fotogrames}}',
+'file-no-thumb-animation' => "'''Nota: degut a limitacions tècniques no s'animaran les miniatures per aquest fitxer.'''",
+'file-no-thumb-animation-gif' => "''' Nota: degut a limitacions tècniques no s'animaran les miniatures d'alta resolució d'imatges GIF com aquesta.'''",
# Special:NewFiles
'newimages' => 'Galeria de nous fitxers',
'qbbrowse' => 'Хьажар',
'qbedit' => 'Нисйé',
'qbpageoptions' => 'Агlо нисйар',
-'qbpageinfo' => 'Агlонах болу бовзам',
'qbmyoptions' => 'Хьан нисдарш',
'qbspecialpages' => 'Леррина агlонаш',
'faq' => 'СиХХ',
'qbbrowse' => 'Browse',
'qbedit' => 'Usba',
'qbpageoptions' => 'Kini nga panid',
-'qbpageinfo' => 'Konteksto',
'qbmyoptions' => 'Akong mga panid',
'qbspecialpages' => 'Mga espesyal nga panid',
'faq' => 'FAQ',
'qbbrowse' => 'Atan',
'qbedit' => 'Tulaika',
'qbpageoptions' => 'Este na pahina',
-'qbpageinfo' => 'Kontekstu',
'qbmyoptions' => 'Påhina-hu siha',
'qbspecialpages' => 'Manespesiat na påhina',
'youhavenewmessages' => '$1ت ھەیە ($2).',
'newmessageslink' => 'پەیامی نوێ',
'newmessagesdifflink' => 'دوایین گۆڕانکاری',
-'youhavenewmessagesfromusers' => '$1ت لە {{PLURAL:$3|بەکارھێنەرێکی تر| $3 بەکارھێنەر}} ھەیە ( $2 ).',
+'youhavenewmessagesfromusers' => '$1ت لە {{PLURAL:$3|بەکارھێنەرێکی تر| $3 بەکارھێنەر}} ھەیە ($2).',
'youhavenewmessagesmanyusers' => '$1ت لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
'newmessagesdifflinkplural' => 'دوایین {{PLURAL:$1|گۆڕانکاری|گۆڕانکارییەکان}}',
'noarticletext' => 'ھەنووکە ھیچ دەقێک لەم پەڕەدا نییە.
دەتوانی بۆ ئەم ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەکانی تردا بگەڕێی]]، <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگەکاندا بگەڕێی]، یان [{{fullurl:{{FULLPAGENAME}}|action=edit}} ئەم پەڕە دەستکاری بکەیت]</span>.',
'noarticletext-nopermission' => 'ھەنووکە ھیچ دەقێک لەم پەڕەیەدا نییە.
-دەتوانی بۆ ئەم ناوە لە [[Special:Search/{{PAGENAME}}|پەڕەکانی تردا بگەڕێی]] یان <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگە پەیوەندیدارەکاندا بگەڕێی]</span>.',
+دەتوانی لە پەڕەکانی تردا [[Special:Search/{{PAGENAME}}|بۆ ئەم ناوە بگەڕێی]]، یان <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لە لۆگە پەیوەندیدارەکاندا بگەڕێی]</span>، بەڵام ناتوانی ئەم پەڕەیە دروست بکەی.',
'userpage-userdoesnotexist' => 'هەژماری بەکارهێنەری "<nowiki>$1</nowiki>" تۆمار نەکراوە.<br />
گەر دەتەوێ ئەم لاپەڕە درووستکەی یان دەستکاری بکەی تکایە تاقیبکەوە .',
'userpage-userdoesnotexist-view' => 'ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.',
'timezoneregion-indian' => 'ئوقیانووسی ھیند',
'timezoneregion-pacific' => 'ئوقیانووسی پاسیفیک',
'allowemail' => 'ڕێگە بدە بە بەکارھێنەرانی تر کە ئیمەیلم بۆ بنێرن',
-'prefs-searchoptions' => 'Ú¾Û\95ڵبÚ\98اردÛ\95کاÙ\86Û\8c Ú¯Û\95Ú\95اÙ\86',
+'prefs-searchoptions' => 'گەڕان',
'prefs-namespaces' => 'بۆشاییناوەکان',
'defaultns' => 'ئەگەرنا لەم بۆشاییناوانەدا بگەڕێ:',
'default' => 'بنچینەیی',
'rollback' => 'گەڕاندنەوەی دەستکارییەکان',
'rollback_short' => 'گەڕاندنەوە',
'rollbacklink' => 'گەڕاندنەوە',
-'rollbacklinkcount' => 'گەڕاندنەوەی $1 دەستکاری',
+'rollbacklinkcount' => 'گەڕاندنەوەی $1 {{PLURAL:$1|دەستکاری}}',
'rollbackfailed' => 'گەڕاندنەوە سەرکەوتوو نەبوو',
'cantrollback' => 'دەستکاریەکان ناگەڕێندرێتەوە؛
دوایین هاوبەش تەنها ڕێکخەری ئەم لاپەڕەیە.',
'pageinfo-header-restrictions' => 'پاراستنی پەڕە',
'pageinfo-header-properties' => 'تایبەتمەندییەکانی پەڕە',
'pageinfo-display-title' => 'ناونیشان نیشانبدە',
+'pageinfo-default-sort' => 'کلیلی ڕیزکردنی بەرگریمانە',
+'pageinfo-length' => 'قەبارەی پەڕە (بایت)',
'pageinfo-article-id' => 'زنجیرەی پەڕە',
+'pageinfo-robot-policy' => 'چۆنێتیی مۆتۆڕی گەڕان',
+'pageinfo-robot-index' => 'شیاو بۆ پێرستکردن',
+'pageinfo-robot-noindex' => 'نەشیاو بۆ پێرستکردن',
'pageinfo-views' => 'ژمارەی بینینەکان',
'pageinfo-watchers' => 'ژمارەی چاودێرانی پەڕە',
'pageinfo-redirects-name' => 'ڕەوانەکردنەکان بۆ ئەم پەڕەیە',
'pageinfo-subpages-name' => 'ژێرپەڕەکانی ئەم پەڕەیە',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ڕەوانەکەر}}; $3 {{PLURAL:$3|ڕەوانەنەکەر}})',
'pageinfo-firstuser' => 'دروستکەری پەڕە',
'pageinfo-firsttime' => 'ڕێکەوتی دروستکردنی پەڕە',
'pageinfo-lastuser' => 'دوایین دەستکاریکەر',
'pageinfo-lasttime' => 'ڕێکەوتی دوایین دەستکاری',
'pageinfo-edits' => 'ژمارەی سەرجەمی دەستکارییەکان',
+'pageinfo-authors' => 'ژمارەی نووسەرە جیاوازەکان',
+'pageinfo-recent-edits' => 'ژمارەی دوایین دەستکارییەکان (لە $1ی ڕابردوودا)',
+'pageinfo-recent-authors' => 'ژمارەی دوایین نووسەرە جیاوازەکان',
+'pageinfo-templates' => 'داڕێژە{{PLURAL:$1|ی بەکارگیراو| بەکارگیراوەکان}} ($1)',
+'pageinfo-toolboxlink' => 'زانیاریی پەڕە',
# Skin names
'skinname-standard' => 'کلاسیک',
'qbbrowse' => 'Pangita-on',
'qbedit' => 'Ilisan',
'qbpageoptions' => 'Mini nga pahina',
-'qbpageinfo' => 'Konteksto',
'qbmyoptions' => 'Akon mga pahina',
'qbspecialpages' => 'Pinasahi nga mga pahina',
'faq' => 'Mga perme napamangkot ("FAQ")',
'qbbrowse' => 'Бакъып чыкъ',
'qbedit' => 'Денъиштир',
'qbpageoptions' => 'Бу саифе',
-'qbpageinfo' => 'Саифе акъкъында малюмат',
'qbmyoptions' => 'Саифелерим',
'qbspecialpages' => 'Махсус саифелер',
'faq' => 'Сыкъ берильген суаллер',
'qbbrowse' => 'Baqıp çıq',
'qbedit' => 'Deñiştir',
'qbpageoptions' => 'Bu saife',
-'qbpageinfo' => 'Saife aqqında malümat',
'qbmyoptions' => 'Saifelerim',
'qbspecialpages' => 'Mahsus saifeler',
'faq' => 'Sıq berilgen sualler',
'note' => "'''Poznámka:''' ",
'previewnote' => "'''Pamatujte, že toto je pouze náhled.'''
Změny zatím nebyly uloženy!",
-'continue-editing' => 'Pokračovat v editaci',
+'continue-editing' => 'Přejít k editačnímu poli',
'previewconflict' => 'Tento náhled ukazuje text tak, jak bude vypadat po uložení stránky.',
'session_fail_preview' => "'''Váš požadavek se nepodařilo zpracovat kvůli ztrátě dat z relace.
Zkuste to prosím znovu.
'shared-repo-from' => 'z {{grammar:2sg|$1}}',
'shared-repo' => 'sdíleného úložiště',
'filepage.css' => '/* Zde uvedené CSS se vkládá na stránky s popisem souboru, včetně cizích klientských wiki */',
-'upload-disallowed-here' => 'Tento soubor bohužel nemůžete přepsat.',
+'upload-disallowed-here' => 'Tento soubor nemůžete přepsat.',
# File reversion
'filerevert' => 'Vrátit zpět $1',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrytá|Skryté}} kategorie ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Použitá šablona|Použité šablony}} ($1)',
'pageinfo-toolboxlink' => 'Informace o stránce',
+'pageinfo-redirectsto' => 'Přesměrovává na',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Stránka se počítá do obsahu',
+'pageinfo-contentpage-yes' => 'Ano',
+'pageinfo-protect-cascading' => 'Kaskádový zámek',
+'pageinfo-protect-cascading-yes' => 'Ano',
+'pageinfo-protect-cascading-from' => 'Zámky pocházejí z kaskádových zámků na',
# Skin names
'skinname-standard' => 'Klasický',
'version-entrypoints' => 'URL vstupních bodů',
'version-entrypoints-header-entrypoint' => 'Vstupní bod',
'version-entrypoints-header-url' => 'URL',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Cesta k článkům]',
+'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Cesta ke skriptům]',
# Special:FilePath
'filepath' => 'Cesta k souboru',
'qbbrowse' => 'Przezeranié',
'qbedit' => 'Edicëjô',
'qbpageoptions' => 'Òptacëje starnë',
-'qbpageinfo' => 'Ò starnie',
'qbmyoptions' => 'Mòje òptacëje',
'qbspecialpages' => 'Specjalné starnë',
'faq' => 'FAQ',
'qbbrowse' => 'Курăм',
'qbedit' => 'Тӳрлет',
'qbpageoptions' => 'Страница ĕнерлевĕсем',
-'qbpageinfo' => 'Страница çинчен',
'qbmyoptions' => 'Сирĕн ĕнĕрлевсем',
'qbspecialpages' => 'Ятарлӑ страницӑсем',
'faq' => 'ЫйХу',
'vector-action-protect' => 'Diogelu',
'vector-action-undelete' => 'Adfer',
'vector-action-unprotect' => 'Newid y diogelwch',
-'vector-simplesearch-preference' => 'Galluogi awgrymiadau chwilio uwch (gwedd Vector yn unig)',
+'vector-simplesearch-preference' => 'Galluogi bar chwilio syml (gwedd Vector yn unig)',
'vector-view-create' => 'Dechrau',
'vector-view-edit' => 'Golygu',
'vector-view-history' => 'Gweld yr hanes',
'anontalkpagetext' => "----''Dyma dudalen sgwrs ar gyfer defnyddiwr anhysbys sydd heb greu cyfrif eto, neu nad yw'n ei ddefnyddio. Felly mae'n rhaid inni ddefnyddio'r cyfeiriad IP i'w (h)adnabod. Mae cyfeiriadau IP yn gallu cael eu rhannu rhwng nifer o ddefnyddwyr. Os ydych chi'n ddefnyddiwr anhysbys ac yn teimlo'ch bod wedi derbyn sylwadau amherthnasol, [[Special:UserLogin/signup|crëwch gyfrif]] neu [[Special:UserLogin|mewngofnodwch]] i osgoi cael eich drysu gyda defnyddwyr anhysbys eraill o hyn ymlaen.''",
'noarticletext' => "Mae'r dudalen hon yn wag ar hyn o bryd.
Gallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy'r logiau perthnasol], neu [{{fullurl:{{FULLPAGENAME}}|action=edit}} golygu'r dudalen]</span>.",
-'noarticletext-nopermission' => 'Mae\'r dudalen hon yn wag ar hyn o bryd.
-Gallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, neu gallwch <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy\'r logiau perthnasol]</span>.',
+'noarticletext-nopermission' => "Mae'r dudalen hon yn wag ar hyn o bryd.
+Gallwch [[Special:Search/{{PAGENAME}}|chwilio am y teitl hwn]] ar dudalennau eraill, neu gallwch <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chwilio drwy'r logiau perthnasol]</span>, ond nid yw'r gallu gennych i ddechrau'r dudalen o'r dechrau cyntaf.",
'missing-revision' => 'Nid yw\'r diwygiad #$1 o\'r dudalen "{{PAGENAME}}" ar gael.
Fel arfer, fe ddigwydd hyn wrth ddilyn hen gyswllt i dudalen sydd wedi ei dileu.
'extlink_sample' => 'http://www.example.com Titel på henvisning',
'extlink_tip' => 'Ekstern henvisning (husk http:// præfiks)',
'headline_sample' => 'Tekst til overskrift',
-'headline_tip' => 'Type 2 overskrift',
+'headline_tip' => 'Type 2-overskrift',
'nowiki_sample' => 'Indsæt tekst her som ikke skal wikiformateres',
'nowiki_tip' => 'Ignorer wikiformatering',
'image_sample' => 'Eksempel.jpg',
'edit-no-change' => 'Din ændring ignoreredes, fordi der ikke var ændring af teksten.',
'edit-already-exists' => 'En ny side kunne ikke oprettes, fordi den allerede findes.',
'defaultmessagetext' => 'Standardtekst',
-'content-failed-to-parse' => 'Kunne ikke parse $2 indhold for $1 model: $3',
+'content-failed-to-parse' => 'Kunne ikke fortolke $2-indholdet af $1-modellen: $3',
'invalid-content-data' => 'Ugyldig indholdsdata',
'content-not-allowed-here' => '"$1" indhold er ikke tilladt på siden [[$2]]',
'uploadnewversion-linktext' => 'Læg en ny version af denne fil op',
'shared-repo-from' => 'fra $1',
'shared-repo' => 'et delt filarkiv',
-'upload-disallowed-here' => 'Desværre kan du ikke overskrive dette billede.',
+'upload-disallowed-here' => 'Du kan ikke overskrive denne fil.',
# File reversion
'filerevert' => 'Gendan $1',
'tooltip-t-contributions' => 'Se denne brugers bidrag',
'tooltip-t-emailuser' => 'Send en e-mail til denne bruger',
'tooltip-t-upload' => 'Upload et billede eller anden mediafil',
-'tooltip-t-specialpages' => 'Liste med alle specielle sider',
+'tooltip-t-specialpages' => 'Liste over alle specialsider',
'tooltip-t-print' => 'Printervenlig udgave af denne side',
'tooltip-t-permalink' => 'Permanent henvisning til denne version af denne side',
'tooltip-ca-nstab-main' => 'Se indholdet',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Transkluderet skabelon|Transkluderede skabeloner}} ($1)',
'pageinfo-toolboxlink' => 'Oplysninger om siden',
+'pageinfo-redirectsto' => 'Omdirigerer til',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Talt som en indholdsside',
+'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading' => 'Kaskadebeskyttelser begynder her',
+'pageinfo-protect-cascading-yes' => 'Ja',
+'pageinfo-protect-cascading-from' => 'Kaskadebeskyttelser begynder fra',
# Skin names
'skinname-standard' => 'Klassik',
'editinginterface' => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.
Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.
Nutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
-'sqlhidden' => "''Die SQL-Datenbankabfrage ist verborgen.''",
+'sqlhidden' => '(Die SQL-Datenbankabfrage ist verborgen.)',
'cascadeprotected' => 'Diese Seite ist zur Bearbeitung gesperrt. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:
$2',
'namespaceprotected' => "Du hast nicht die erforderliche Berechtigung, um Seiten im Namensraum '''$1''' bearbeiten zu können.",
'note' => "'''Hinweis:'''",
'previewnote' => "'''Dies ist nur eine Vorschau.'''
Die Seite wurde noch nicht gespeichert!",
-'continue-editing' => 'Weiter bearbeiten',
+'continue-editing' => 'Zum Bearbeitungsfeld gehen',
'previewconflict' => 'Diese Vorschau gibt den Inhalt des oberen Textfeldes wieder. So wird die Seite aussehen, wenn du jetzt speicherst.',
'session_fail_preview' => "'''Deine Bearbeitung konnte nicht gespeichert werden, da Sitzungsdaten verloren gegangen sind.
Bitte versuche es erneut, indem du unter der folgenden Textvorschau nochmals auf „Seite speichern“ klickst.
'emailpagetext' => 'Du kannst dem Benutzer mit dem unten stehenden Formular eine E-Mail senden.
Als Absender wird die E-Mail-Adresse aus deinen [[Special:Preferences|Einstellungen]] eingetragen, damit der Benutzer dir antworten kann.',
'usermailererror' => 'Das E-Mail-Objekt gab einen Fehler zurück:',
-'defemailsubject' => '{{SITENAME}} - E-Mail von Benutzer „$1“',
+'defemailsubject' => '{{SITENAME}} – E-Mail von Benutzer „$1“',
'usermaildisabled' => 'E-Mail-Empfang deaktiviert',
'usermaildisabledtext' => 'Du kannst in diesem Wiki keine E-Mails an andere Benutzer senden',
'noemailtitle' => 'Keine E-Mail-Adresse',
'movepagebtn' => 'Seite verschieben',
'pagemovedsub' => 'Verschiebung erfolgreich',
'movepage-moved' => "'''Die Seite „$1“ wurde nach „$2“ verschoben.'''",
-'movepage-moved-redirect' => 'Es wurde eine Weiterleitung erstellt.',
+'movepage-moved-redirect' => 'Eine Weiterleitung wurde erstellt.',
'movepage-moved-noredirect' => 'Die Erstellung einer Weiterleitung wurde unterdrückt.',
'articleexists' => 'Unter diesem Namen existiert bereits eine Seite. Bitte wähle einen anderen Namen.',
'cantmove-titleprotected' => 'Die Verschiebung kann nicht durchgeführt werden, da der Zieltitel zur Erstellung gesperrt ist.',
'standard.css' => '/* Das folgende CSS wird für Benutzer der Klassik-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
'nostalgia.css' => '/* Das folgende CSS wird für Benutzer der Nostalgie-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
'cologneblue.css' => '/* Das folgende CSS wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
-'monobook.css' => '/* Das folgende CSS wird für Benutzer der Monobook-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
+'monobook.css' => '/* Das folgende CSS wird für Benutzer der MonoBook-Benutzeroberfläche geladen */',
'myskin.css' => '/* Das folgende CSS wird für Benutzer der MySkin-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
'chick.css' => '/* Das folgende CSS wird für Benutzer der Küken-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
'simple.css' => '/* Das folgende CSS wird für Benutzer der Einfach-Benutzeroberfläche geladen. Für allgemeingültige Benutzeroberflächen-Anpassungen bitte [[MediaWiki:Common.css]] bearbeiten. */',
'standard.js' => '/* Das folgende JavaScript wird für Benutzer der Klassik-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
'nostalgia.js' => '/* Das folgende JavaScript wird für Benutzer der Nostalgie-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
'cologneblue.js' => '/* Das folgende JavaScript wird für Benutzer der Kölnisch-Blau-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
-'monobook.js' => '/* Das folgende JavaScript wird für Benutzer der Monobook-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
+'monobook.js' => '/* Das folgende JavaScript wird für Benutzer der MonoBook-Benutzeroberfläche geladen */',
'myskin.js' => '/* Das folgende JavaScript wird für Benutzer der MySkin-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
'chick.js' => '/* Das folgende JavaScript wird für Benutzer der Küken-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
'simple.js' => '/* Das folgende JavaScript wird für Benutzer der Einfach-Benutzeroberfläche geladen. Allgemeingültiges JavaScript bitte in [[MediaWiki:Common.js]] eintragen. */',
'pageinfo-magic-words' => '{{PLURAL:$1|Magisches Wort|Magische Wörter}} ($1)',
'pageinfo-hidden-categories' => 'Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
'pageinfo-templates' => 'Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)',
-'pageinfo-toolboxlink' => 'Informationen zur Seite',
+'pageinfo-toolboxlink' => 'Seiteninformationen',
+'pageinfo-redirectsto' => 'Weiterleitungen nach',
+'pageinfo-redirectsto-info' => 'Information',
+'pageinfo-contentpage' => 'Gezählt als eine Inhaltsseite',
+'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading' => 'Seiten mit Kaskadenschutz von hier',
+'pageinfo-protect-cascading-yes' => 'Ja',
+'pageinfo-protect-cascading-from' => 'Seiten mit Kaskadenschutz von',
# Skin names
'skinname-standard' => 'Klassik',
# Auto-summaries
'autosumm-blank' => 'Die Seite wurde geleert.',
'autosumm-replace' => 'Der Seiteninhalt wurde durch einen anderen Text ersetzt: „$1“',
-'autoredircomment' => 'Weiterleitung auf [[$1]] erstellt',
+'autoredircomment' => 'Weiterleitung nach [[$1]] erstellt',
'autosumm-new' => 'Die Seite wurde neu angelegt: „$1“',
# Size units
$messages = array(
# User preference toggles
-'tog-underline' => 'Bınê gırey de xete bance:',
+'tog-underline' => 'Bınê gırey de xete bıance:',
'tog-justify' => 'Paragrafan eyar ke',
'tog-hideminor' => 'Vurnayışanê şenıkan pela vurnayışanê peyênan de bınımne',
'tog-hidepatrolled' => 'Vurnayışanê qontrolkerdeyan pela vurnayışê peyêni de bınımne',
'tog-newpageshidepatrolled' => 'Pelanê qontrolkerdeyan lista pelanê neweyan de bınımne',
'tog-extendwatchlist' => 'Lista seyrkerdışi hera bıke ke vurnayışi pêro bıasê, tenya tewr peyêni nê',
-'tog-usenewrc' => 'Vurnayışanê peyênanê herakerdeyan bıxebetne (JavaScript lazımo)',
+'tog-usenewrc' => 'Pele be vurnayışanê grube de vurnayışê peyêni u lista seyrkerdışi (JavaScript lazımo)',
'tog-numberheadings' => 'Sernuşteyan be xo numre cı şane',
'tog-showtoolbar' => 'Goceganê hacetanê vurnayışi bımocne (JavaScript lazımo)',
'tog-editondblclick' => 'Pê dı rey tıknayış pele sero bıxebetiye (JavaScript lazımo)',
'tog-editsection' => 'Vurnayışê qısımi be gıreyanê [bıvurne] ra feal ke',
'tog-editsectiononrightclick' => 'Qısıman be tıknayışê serrêze ra ebe gocega raşte bıvurne (JavaScript lazımo)',
'tog-showtoc' => 'Tabloyê tedeesteyan bımocne (de pelanê be hirê sernuşteyan ra vêşêri de)',
-'tog-rememberpassword' => 'Parola mı nê cıgeyraoği de bia xo viri (seba tewr zêde $1 {{PLURAL:$1|roce|rocan}}).',
+'tog-rememberpassword' => 'Parola mı nê cıgeyrayoği de bia xo viri (seba tewr zêde $1 {{PLURAL:$1|roce|rocan}}).',
'tog-watchcreations' => 'Pelê ke mı afernayê u dosyeyê ke mı bar kerdê lista mına seyrkerdışi ke',
'tog-watchdefault' => 'Pel u dosyeyê ke mı vurnayê lista mına seyrkerdışi ke',
'tog-watchmoves' => 'Pel u dosyeyê ke mı kırıştê lista mına seyrkerdışi ke',
-'tog-watchdeletion' => 'Pel u dosyeyê ke mı seterıtê lista mına seyrkerdışi ke',
+'tog-watchdeletion' => 'Pel u dosyeyê ke mı esterıtê lista mına seyrkerdışi ke',
'tog-minordefault' => "Vurnayışanê xo pêrune ''vurnayışo qıckek'' nışan bıde",
'tog-previewontop' => 'Verqayti pela nuştışi ser de bımocne',
'tog-previewonfirst' => 'Vurnayışo verên de verqayti tım bımocne',
-'tog-nocache' => 'Pelanê cıgeyraoği mia xo viri',
+'tog-nocache' => 'Pelanê cıgeyrayoği mia xo viri',
'tog-enotifwatchlistpages' => 'Jû pele ya zi dosyaya ke lista mına seyrkerdışi de vurnayê mı rê e-poste bırışe',
'tog-enotifusertalkpages' => 'Pela mına werênayışi ke vurnayê mı rê e-poste bırışe',
'tog-enotifminoredits' => 'Vurnayışanê qıckekanê pelan u dosyeyan de zi mı rê e-poste bırışe',
'tog-enotifrevealaddr' => 'Adresa e-posteyê mı posteyê xeberan de bımocne',
'tog-shownumberswatching' => 'Amarê karberanê seyrkerdoğan bımocne',
-'tog-oldsig' => 'İmzaya şıma:',
-'tog-fancysig' => 'İmza rê mameley wikimeqaley bıke (bê gıreyo otomatik)',
+'tog-oldsig' => 'İmzaya mewcude:',
+'tog-fancysig' => 'İmza rê mameleyê wikimeqaley bıke (bê gıreyo otomatik)',
'tog-externaleditor' => 'Editorê teberi standard bıxebetne (tenya seba ekspertano, komputerê şıma de eyarê xısusiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato vêşêr.])',
'tog-externaldiff' => 'Têverşanayışan pê programê teberi vıraze (tenya seba ekspertano, komputerê şıma de eyarê xısusiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato vêşêr.])',
-'tog-showjumplinks' => 'Gırey "şo"y feal ke',
+'tog-showjumplinks' => 'Gıreyê "şo"y aktif ke',
'tog-uselivepreview' => 'Verqayto cınde bıxebetne (JavaScript lazımo) (hewna cerrebnayış dero)',
'tog-forceeditsummary' => 'Mı ke xulasa kerde cı vira, hay be mı ser de',
'tog-watchlisthideown' => 'Vurnayışanê mı lista mına seyrkerdışi de bınımne',
-'tog-watchlisthidebots' => 'Vurnayışanê bota liste da seyrkerdışi de bınımne',
+'tog-watchlisthidebots' => 'Lista seyrkerdışi ra vurnayışanê boti bınımne',
'tog-watchlisthideminor' => 'Vurnayışanê qıckekan lista mına seyrkerdışi de bınımne',
'tog-watchlisthideliu' => 'Lista seyrkerdışi ra vurnayışanê karberanê cıkewteyan bınımne',
'tog-watchlisthideanons' => 'Lista seyrkerdışi ra vurnayışanê karberanê anoniman bınımne',
'underline-always' => 'Tım',
'underline-never' => 'Qet',
-'underline-default' => 'Qerar cıgeyraoği dest dero',
+'underline-default' => 'Qerar cıgeyrayoği dest dero',
# Font style option in Special:Preferences
-'editfont-style' => 'Cayê vurnayışi de tipê nuştışi:',
-'editfont-default' => 'Qerar cıgeyraoği dest dero',
-'editfont-monospace' => 'Tipê nusteyê sabıtcagırewtoği',
+'editfont-style' => 'Cayê vurnayışi de terzê nuştışi:',
+'editfont-default' => 'Qerar cıgeyrayoği dest dero',
+'editfont-monospace' => 'Terzê nusteyê sabıtcagırewtoği',
'editfont-sansserif' => 'Babetê Sans-serifi',
-'editfont-serif' => 'Tipê nusteyê serifi',
+'editfont-serif' => 'Babetê serifi',
# Dates
-'sunday' => 'Bazar',
-'monday' => 'Berarek',
-'tuesday' => 'Telete',
+'sunday' => 'Kırê',
+'monday' => 'Dışeme',
+'tuesday' => 'Sêşeme',
'wednesday' => 'Çeharşeme',
'thursday' => 'Pancşeme',
'friday' => 'Êne',
-'saturday' => 'Bahdê êni',
-'sun' => 'Bzr',
-'mon' => 'Brr',
-'tue' => 'Tlt',
+'saturday' => 'Şeme',
+'sun' => 'Krê',
+'mon' => 'Dış',
+'tue' => 'Sêş',
'wed' => 'Çrş',
'thu' => 'Pşm',
'fri' => 'Êne',
-'sat' => 'Bah',
+'sat' => 'Şem',
'january' => 'Çele',
-'february' => 'Zemherı',
-'march' => 'Mert',
-'april' => 'Lizan',
-'may_long' => 'Vılıkan',
+'february' => 'Şıbate',
+'march' => 'Adar',
+'april' => 'Nisane',
+'may_long' => 'Gulane',
'june' => 'Heziran',
-'july' => 'Paliyan',
+'july' => 'Temuze',
'august' => 'Tebaxe',
-'september' => 'Kergan',
-'october' => 'Cıtan',
-'november' => 'Kelverdan',
-'december' => 'Vewran',
+'september' => 'Keşkelun',
+'october' => 'Tışrino Verên',
+'november' => 'Tışrino Peyên',
+'december' => 'Kanun',
'january-gen' => 'Çele',
-'february-gen' => 'Zemherı',
-'march-gen' => 'Mert',
-'april-gen' => 'Lizan',
-'may-gen' => 'Vılıkan',
+'february-gen' => 'Şıbate',
+'march-gen' => 'Adar',
+'april-gen' => 'Nisane',
+'may-gen' => 'Gulane',
'june-gen' => 'Heziran',
-'july-gen' => 'Paliyan',
+'july-gen' => 'Temuze',
'august-gen' => 'Tebaxe',
-'september-gen' => 'Kergan',
-'october-gen' => 'Cıtan',
-'november-gen' => 'Kelverdan',
-'december-gen' => 'Vewran',
+'september-gen' => 'Keşkelun',
+'october-gen' => 'Tışrino Verên',
+'november-gen' => 'Tışrino Peyên',
+'december-gen' => 'Kanun',
'jan' => 'Çel',
'feb' => 'Şbt',
'mar' => 'Adr',
'about' => 'Heqa',
'article' => 'Wesiqe',
-'newwindow' => '(teqa da newi de abena)',
+'newwindow' => '(zerreyê pençereyê newey de beno a)',
'cancel' => 'Bıtexelne',
-'moredotdotdot' => 'Vêşêri...',
+'moredotdotdot' => 'Vêşi...',
'mypage' => 'Pela mı',
-'mytalk' => 'Behsê mı',
+'mytalk' => 'Werênayışê mı',
'anontalk' => 'Pela werênayışê nê IPy',
'navigation' => 'Geyrayış',
'and' => ' u',
'qbedit' => 'Bıvurne',
'qbpageoptions' => 'Ena pele',
'qbmyoptions' => 'Pelê mı',
-'qbspecialpages' => 'Peley xısusi',
+'qbspecialpages' => 'Pelê xısusiy',
'faq' => 'PZP (Persê ke zehf persiyenê)',
'faqpage' => 'Project: PZP',
# Vector skin
'vector-action-addsection' => 'Mesel Vırazê',
'vector-action-delete' => 'Besterne',
-'vector-action-move' => 'Wegirê',
+'vector-action-move' => 'Bere',
'vector-action-protect' => 'Bıpawe',
'vector-action-undelete' => 'Esterıtışi peyser bıgê',
'vector-action-unprotect' => 'Starkerdışi bıvurne',
'vector-view-history' => 'Vurnayışê verêni',
'vector-view-view' => 'Bıwanê',
'vector-view-viewsource' => 'Çımey bıvêne',
-'actions' => 'Kerdeni',
+'actions' => 'Kerdışi',
'namespaces' => 'Cayê namey',
'variants' => 'Varyanti',
'history' => 'Verora perer',
'history_short' => 'Vurnayışê verêni',
'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
-'printableversion' => 'Asayışo çapkerden',
-'permalink' => 'Gıreyo daimi',
+'printableversion' => 'Asayışê çapkerdışi',
+'permalink' => 'Gıreyo jûqere',
'print' => 'Çap ke',
'view' => 'Bıvin',
'edit' => 'Bıvurnên',
'mainpage' => 'Pera Seri',
'mainpage-description' => 'Pela Seri',
'policy-url' => 'Project:Terzê hereketi',
-'portal' => 'Portalê şêlıgi',
-'portal-url' => 'Project:Portalê şêlıgi',
-'privacy' => 'Xısusiyeta nımıtin',
+'portal' => 'Portalê cemaeti',
+'portal-url' => 'Project:Portalê cemaeti',
+'privacy' => 'Madeyê dızdiye',
'privacypage' => 'Project:Xısusiyetê nımtışi',
'badaccess' => 'Xeta mısadey',
'sort-ascending' => 'Ratnayışê Zeydnayışi',
# Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Per',
+'nstab-main' => 'Pele',
'nstab-user' => 'Pera Karberi',
'nstab-media' => 'Pela Medya',
'nstab-special' => 'Pela xısusiye',
'namespaceprotected' => "No '''$1''' ca de icazetê şıma çino şıma pel rêz keri.",
'customcssprotected' => 'Mısadeyê şıma çıniyo ke na pela CSSi bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.',
'customjsprotected' => 'Mısadeyê şıma çıniyo ke na pela Java Scripti bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.',
-'ns-specialprotected' => 'Peley xısusi nênê vurnayış.',
+'ns-specialprotected' => 'Pelê xısusiy nênê vurnayış.',
'titleprotected' => 'Eno [[User:$1|$1]] zerreyê ena peli nişeno vuriye.
Sebeb: "\'\'$2\'\'".',
'filereadonlyerror' => 'Dosyay vurnayışê "$1" nê abê no lakin depoy dosya da "$2" mod dê salt wendi deyo.
'yourname' => 'Namey karberi',
'yourpassword' => 'Parola',
'yourpasswordagain' => 'Parola reyna bınusne:',
-'remembermypassword' => 'Parola mı nê cıgeyraoği de biya xo viri (heta $1 {{PLURAL:$1|roc|roci}}).',
+'remembermypassword' => 'Parola mı nê cıgeyrayoği de bia xo viri (seba tewr zêde $1 {{PLURAL:$1|roce|rocan}})',
'securelogin-stick-https' => "Dekewtış kerdışi dıma HTTPS'i dı grêdaye bıman",
'yourdomainname' => 'Nameyê şıma yo meydani',
'password-change-forbidden' => 'Şıma na wiki de nêşenê parola bıvurnê.',
'externaldberror' => 'Ya database de xeta esta ya zi heqê şıma çino şıma no hesab bıvurni.',
-'login' => 'Ronıştış akerê',
+'login' => 'Cı kewe',
'nav-login-createaccount' => 'Dekew de / hesab vıraze',
'loginprompt' => "{{SITENAME}} dı ronıştış akerdışi rê ''çerezan'' aktiv kerdış icab keno.",
'userlogin' => 'Cı kewe / hesab vıraze',
'nologinlink' => 'Yew hesab ake',
'createaccount' => 'Hesab vıraze',
'gotaccount' => "Hesabê şıma esto? '''$1'''.",
-'gotaccountlink' => 'Ronıştış akerê',
+'gotaccountlink' => 'Cı kewe',
'userlogin-resetlink' => 'Melumatê cıkewtışi xo vira kerdê?',
'createaccountmail' => 'mı rê e-mail sera parola bırışe',
'createaccountreason' => 'Sebeb:',
'hr_tip' => 'Çıxiza dimdayi (hend akar mefiye)',
# Edit pages
-'summary' => 'Xelese:',
-'subject' => 'Mewzu/serrêze:',
+'summary' => 'Xulasa:',
+'subject' => 'Mewzu/sernuşte:',
'minoredit' => 'Eno vurnayışo de qıckeko',
-'watchthis' => 'Ena perer teqib ke',
+'watchthis' => 'Ena pele seyr ke',
'savearticle' => 'Pele qeyd ke',
'preview' => 'Verqayt',
'showpreview' => 'Verqayti bımocne',
'note' => "'''Not:'''",
'previewnote' => "'''Xo vira mekerê ke ena yew verqayta.'''
Vurnayışê şıma hona qeyd nêbiyo!",
-'continue-editing' => 'Vurnayışi rê dewam ke',
+'continue-editing' => 'Şo herunda vurnayışi',
'previewconflict' => 'No seyrkerdışê verqaydi serê qutiyê nuşte tezim kerdış de yo, eke şıma qayile vurnayişê maddeyi seyino bıvini, no mocneno şıma.',
'session_fail_preview' => 'Ma ef kere. Vindibiyayişê tayê datay ra a kerdışê hesabê şıma de ma vurnayişê şıma qayd nêkerd. Newe ra tesel (cereb) bıkere. Eke no qayde zi nêbo, [[Special:UserLogout|hesabê xo bıqefelne]] u newera a kere.',
'session_fail_preview_html' => "'''Ma meluli! Sebayê vindbiyayişê datasistemi ma vurnayişê şıma nêeşkeni qaydker.'''
'searchhelp-url' => 'Help:Tedeestey',
'searchmenu-prefix' => '[[Special:PrefixIndex/$1|pê eno prefix ser pelan de bigêre]]',
'searchprofile-articles' => 'Pelê tedeestey',
-'searchprofile-project' => 'Pelê yardım u projey',
+'searchprofile-project' => 'Pelê yardım u procey',
'searchprofile-images' => 'Multimedya',
-'searchprofile-everything' => 'Hemnan',
+'searchprofile-everything' => 'Her çi',
'searchprofile-advanced' => 'Raverşiyaye',
'searchprofile-articles-tooltip' => '$1 de bigêre',
'searchprofile-project-tooltip' => '$1 de bigêre',
'showingresultsheader' => "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' hetê '''$3'''}} qe '''$4'''",
'nonefound' => "'''Teme''': Teyna tay namecayan cıgeyro beno.
Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mınaqeşe, templatenan, ucb.) ya zi cıgeyro ser namecay ki tı wazeni.",
-'search-nonefound' => 'Zey cıgeyrayış de şıma netice nêvineya',
+'search-nonefound' => 'Zey perskerdışê şıma netice nêvêniya.',
'powersearch' => 'Cıgeyrayışo hera',
'powersearch-legend' => 'Cıgeyrayışo hera',
'powersearch-ns' => 'Cayanê nameyan de cıgeyrayış:',
'prefs-setemail' => 'E-posta adresiyê xo saz kerê',
'prefs-email' => 'Tercihê e-maili',
'prefs-rendering' => 'Asayış',
-'saveprefs' => 'Star ke',
+'saveprefs' => 'Qeyd ke',
'resetprefs' => 'Vurnayışê ke qeyd nêbiy, pak ke',
'restoreprefs' => 'Sazanê hesıbyaya pêron newe dere barke',
'prefs-editing' => 'Cay pela nustısi',
'timezoneoffset' => 'Offset¹:',
'servertime' => 'Wextê serveri:',
'guesstimezone' => 'Browser ra pırr ke',
-'timezoneregion-africa' => 'Afriqa',
+'timezoneregion-africa' => 'Afrika',
'timezoneregion-america' => 'Amerika',
'timezoneregion-antarctica' => 'Antarktika',
'timezoneregion-arctic' => 'Arktik',
'timezoneregion-asia' => 'Asya',
'timezoneregion-atlantic' => 'Okyanuso Atlantik',
-'timezoneregion-australia' => 'Evistiralya',
+'timezoneregion-australia' => 'Awıstralya',
'timezoneregion-europe' => 'Ewropa',
'timezoneregion-indian' => 'Okyanuso Hind',
'timezoneregion-pacific' => 'Okyanuso Pasifik',
'prefs-searchoptions' => 'Cı geyre',
'prefs-namespaces' => 'Caê namey',
'defaultns' => 'Eke heni, enê cayanê namey de cı geyre (sae ke):',
-'default' => 'hesıbyaye',
+'default' => 'qısur',
'prefs-files' => 'Dosyey',
'prefs-custom-css' => 'CSSê xasi',
'prefs-custom-js' => 'JSê xasi',
'youremail' => 'E-Mail (mecbur niyo) *:',
'username' => 'Namey karberi:',
'uid' => 'Namey karberi:',
-'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grub|grubi}}:',
+'prefs-memberingroups' => 'Ezayê {{PLURAL:$1|grube|gruban}}:',
'prefs-memberingroups-type' => '$1',
'prefs-registration' => 'Wextê qeydbiyayışi',
'prefs-registration-date-time' => '$1',
Etiketê HTMLî kontrol bike.',
'badsiglength' => 'İmzayê şıma zaf dergo.
$1 gani bınê no {{PLURAL:$1|karakter|karakter}} de bıbo.',
-'yourgender' => 'Neri makey:',
+'yourgender' => 'Cınsiyet:',
'gender-unknown' => 'Cınsiyet nêvato',
'gender-male' => 'cıwamêrd',
'gender-female' => 'Cenıke',
'prefs-help-email-others' => 'Şıma şenê weçinê ke ê bini be yew gırey pela şımaya karberi ya zi pela werênayışi sera şıma de ebe e-poste irtıbat kewê.
Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena.',
'prefs-help-email-required' => 'E-mail adrese mecburiya.',
-'prefs-info' => 'Seron zanayış',
-'prefs-i18n' => 'Şaryayış kerdış',
+'prefs-info' => 'Melumato bıngeh',
+'prefs-i18n' => 'Beynelmılelkerdış',
'prefs-signature' => 'İmza',
'prefs-dateformat' => 'Formatê tarixi',
'prefs-timeoffset' => 'Wext offset',
'prefs-displayrc' => 'Tercihan bımocne',
'prefs-displaysearchoptions' => 'Weçinayışê mocnayışi',
'prefs-displaywatchlist' => 'Weçinayışê mocnayışi',
-'prefs-diffs' => 'Diffs',
+'prefs-diffs' => 'Ferqi',
# User preference: e-mail validation using jQuery
'email-address-validity-valid' => 'e-posta adresi raştayo',
# User rights
'userrights' => 'İdarey heqanê karberan',
'userrights-lookup-user' => 'Grubanê karberi/karbere idare bıke',
-'userrights-user-editname' => 'Yew namey karberi bınusne',
+'userrights-user-editname' => 'Yew nameyê karberi cı kewe:',
'editusergroup' => 'Grupanê karberi/karbere bıvurne (bıbedelne)',
'editinguser' => "'''[[User:$1|$1]]''' keno weziyetê $2'i bıvurno",
'userrights-editusergroup' => 'Grubanê karberi/karbere sero bıgureye (bıxebetiye)',
'saveusergroups' => 'Grubanê karberi qeyd bıke',
-'userrights-groupsmember' => 'Ezaê / Ezaya:',
+'userrights-groupsmember' => 'Ezayê:',
'userrights-groupsmember-auto' => 'Ezao daxıl/ezaa daxıle ê:',
'userrights-groups-help' => 'şıma şenê grubanê nê karberi/na karbere, oyo/aya ke tede, bıvurnê:
* qutiya ke nışankerdiya, mocnena ke karber/e na grube dero/dera.
'userrights-irreversible-marker' => '$1*',
# Groups
-'group' => 'Grup:',
+'group' => 'Grube:',
'group-user' => 'Karberi',
'group-autoconfirmed' => 'Karberê ke xob xo biyê araşt',
'group-bot' => 'Boti',
'grouppage-bot' => '{{ns:project}}:Boti',
'grouppage-sysop' => '{{ns:project}}:İdarekeri',
'grouppage-bureaucrat' => '{{ns:project}}:Burokrati',
-'grouppage-suppress' => '{{ns:project}}:Kontrol',
+'grouppage-suppress' => '{{ns:project}}:Qontrol',
# Rights
'right-read' => 'Pelan bıwanê',
'right-deleterevision' => 'Vurnayışê xısusiyê ke ê pelanê, inan bestere ya zi peyser bia',
'right-deletedhistory' => 'Qeydanê tarixanê esterıteyan de qayt ke, bê nuştey inan',
'right-deletedtext' => 'Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke',
-'right-browsearchive' => 'Bıgeyre pelanê eserıtiyan',
+'right-browsearchive' => 'Pelanê esterıteyan bıgeyre',
'right-undelete' => 'Jû pela esterıtiye peyser bia',
'right-suppressrevision' => 'İdarekeran ra dızdeni/miyanki, newede vurnayışan de qayt ke u newede vıraze',
'right-suppressionlog' => 'Rocekanê xasan bıvêne',
'right-hideuser' => 'Yew namey karberi şari ra dızdeni/miyanki bloke bıke',
'right-ipblock-exempt' => 'Blokanê IPi, oto-blokan u blokanê menzıli ra ravêre',
'right-proxyunbannable' => 'Blokanê otomatikiê proksiyan ra ravêre',
-'right-unblockself' => 'Inan a bike',
+'right-unblockself' => 'İnan ake',
'right-protect' => 'Sewiyanê pawıtışi (mıhafezey) bıvurne u pelanê kılitbiyaiyan sero bıgureye.',
'right-editprotected' => 'Pelanê pawıtiyan sero bıgureye (bê pawıtena kaskadi (game be game))',
'right-editinterface' => 'Interfaceê karberi sero bıgureye',
'right-autopatrol' => 'Vurnayîşanê xo otomatik nîşan bike ke patrol biyê',
'right-patrolmarks' => 'Vurnayîşanê peniyî nîşan patrol biyê bivîne',
'right-unwatchedpages' => 'Yew listeyê pelanê seyrnibiye bivîne',
-'right-mergehistory' => 'Tarixê pelanê yew bike',
+'right-mergehistory' => 'Tarixê pelan yew ke',
'right-userrights' => 'Heqanê karberi pêro bıvurne',
'right-userrights-interwiki' => 'Heqqa karberanê ke ho wîkîyo binî de ey bivurne',
'right-siteadmin' => 'Database kilit bike u a bike',
'action-move-subpages' => 'ena pele, u pelanê daê bınênan bere',
'action-move-rootuserpages' => 'pelanê karberiyê bıngeyan bere',
'action-movefile' => 'ena dosya bere',
-'action-upload' => 'ena dosya bar bike',
+'action-upload' => 'ena dosya bar ke',
'action-reupload' => 'dosyayê ke database de esto ser ey binuse',
'action-reupload-shared' => 'dosyayê ki ho embarê medyayî de esto ser ay binusne',
'action-upload_by_url' => 'Ena dosya yew URL ra bar bike',
'action-patrol' => 'vurnayîşê karberanê binî nişan bike patrol biye',
'action-autopatrol' => 'vurnayîşê xoye nişan bike ke belli biyo patrol biye',
'action-unwatchedpages' => 'listeyê pelanê seyirnibiya bivîne',
-'action-mergehistory' => 'tarixê ena pele yew bike',
+'action-mergehistory' => 'tarixê ena pele yew ke',
'action-userrights' => 'heqqa karberanê hemî bivurne',
'action-userrights-interwiki' => 'heqqa karberanê ke wikiyê binî de hemî bivurne',
'action-siteadmin' => 'database kilit bike ya zi a bike',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|fın vurna|fıni vurna}}',
'recentchanges' => 'Vurnayışê peyêni',
-'recentchanges-legend' => 'Tercihê vurnayışanê peniyan',
-'recentchanges-summary' => 'Ena pele de wiki sero vurnayışê peyêni teqib ke',
+'recentchanges-legend' => 'Tercihê vurnayışanê peyênan',
+'recentchanges-summary' => 'Ena pele de wiki sero vurnayışanê peyênan teqib ke.',
'recentchanges-feed-description' => 'Ena feed dı vurnayişanê tewr peniyan teqip bık.',
'recentchanges-label-newpage' => 'Enê vurnayışi pelaya newi vıraşt',
-'recentchanges-label-minor' => 'Eno vurnayışo do qickek o',
+'recentchanges-label-minor' => 'Eno yew vurnayışo qıckeko',
'recentchanges-label-bot' => 'Yew boti xo het ra no vurnayış vıraşto',
-'recentchanges-label-unpatrolled' => 'Eno edît patrol nibiyo',
+'recentchanges-label-unpatrolled' => 'Eno vurnayış hewna dewriya nêbiyo',
'rcnote' => "Bıni dı {{PLURAL:$1|'''1''' vurnayış|peyni de '''$1''' vurnayışi estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetana $5, $4.",
'rcnotefrom' => "Cêr de '''$2''' ra nata vurnayışiyê asenê (tewr vêşi <b> '''$1'''</b> asenê).",
'rclistfrom' => '$1 ra vurnayışanê neweyan bımocne',
-'rcshowhideminor' => 'Vurnayışanê werdiya $1',
-'rcshowhidebots' => 'Bota $1',
-'rcshowhideliu' => 'Karberanê qeydına $1',
+'rcshowhideminor' => 'Vurnayışanê werdiyan $1',
+'rcshowhidebots' => 'Botan $1',
+'rcshowhideliu' => 'Karberanê qeydınan $1',
'rcshowhideanons' => 'Karberanê anoniman $1',
'rcshowhidepatr' => '$1 vurnayışê ke dewriya geyrayê',
-'rcshowhidemine' => 'nuştışanê mı $1',
-'rclinks' => 'Peyni $2 rocan de vurnayışa $1 bımocne <br />$3',
+'rcshowhidemine' => 'Vurnayışanê mı $1',
+'rclinks' => 'Peyniya $2 rocan de $1 vurnayışan bımocne <br />$3',
'diff' => 'ferq',
'hist' => 'verên',
'hide' => 'Bınımne',
'rc-old-title' => '"$1"i orcinalê cı vıraşt',
# Recent changes linked
-'recentchangeslinked' => 'Ney sero vurnayışi',
-'recentchangeslinked-feed' => 'Ney sero vurnayışi',
-'recentchangeslinked-toolbox' => 'Ney sero vurnayışi',
+'recentchangeslinked' => 'Vurnayışê eleqeyıni',
+'recentchangeslinked-feed' => 'Vurnayışê eleqeyıni',
+'recentchangeslinked-toolbox' => 'Vurnayışê eleqeyıni',
'recentchangeslinked-title' => 'vurnayışan ser "$1"',
'recentchangeslinked-noresult' => 'Pelanê ke link biye ey vurnayîşî çino.',
'recentchangeslinked-summary' => "Lista cêrêne, pela bêlikerdiye rê (ya zi karberanê kategoriya bêlikerdiye rê) pelanê gırêdaoğan de lista de vurnayışê peyênana.
'filedesc' => 'Xulasa',
'fileuploadsummary' => 'Xulasa:',
'filereuploadsummary' => 'Vurnayîşê dosyayî:',
-'filestatus' => 'Weziyetê heqê telifiye:',
+'filestatus' => 'Weziyetê heqa telifi:',
'filesource' => 'Çıme:',
'uploadedfiles' => 'Dosyayê ke bar biye',
'ignorewarning' => 'Îkazi kebul meke u dosya reyna bar bike',
'upload-proto-error' => 'Porotokol raşt ni yo.',
'upload-proto-error-text' => 'Bar kerdişê durî gani URLî estbiye ke pe <code>http://</code> ya zi <code>ftp://</code> başli beno.',
-'upload-file-error' => 'Ğeletê dahilî',
+'upload-file-error' => 'Xeta daxılkiye',
'upload-file-error-text' => 'Peşkeşwan de wexta yew dosya vıraziyayene xeta bı.
kerem kerê [[Special:ListUsers/sysop|serkari]]de irtibat kewe.',
'upload-misc-error' => 'Ğeletê bar kerdişî nizanyeno',
'shared-repo' => 'yew embarê repositoryî',
'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
'filepage.css' => '/* CSS placed here is included on the file description page, also included on foreign client wikis */',
-'upload-disallowed-here' => 'Şıma na dosya de teba nênusnayo.',
+'upload-disallowed-here' => 'Şıma nêşenê serê na dosya ra bınusên.',
# File reversion
'filerevert' => '$1 reyna biyere',
'unusedtemplateswlh' => 'linkanê binî',
# Random page
-'randompage' => 'Peleya ke raştamê',
+'randompage' => 'Pela raştameyiye',
'randompage-nopages' => 'Ena {{PLURAL:$2|cayêname|cayênameyî}} de enê pelan çin o: $1.',
# Random redirect
'statistics-header-users' => 'Îstatistiksê karberî',
'statistics-header-hooks' => 'Îstatistiksê binî',
'statistics-articles' => 'Pelanê tedesteyî',
-'statistics-pages' => 'Peri',
+'statistics-pages' => 'Peli',
'statistics-pages-desc' => 'Pelanê hemî ke wîkî de estê, pelanê mineqeşeyî, redireksiyon ucb... dehil o.',
'statistics-files' => 'Dosyayê bar biye',
'statistics-edits' => 'Amarê vurnayîşî ke wextê {{SITENAME}} ronayîşî ra',
'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
'nrevisions' => '$1 {{PLURAL:$1|vurnayış|vurnayışi}}',
-'nviews' => '$1 {{PLURAL:$1|vînayîÅ\9f|vînayîÅ\9fî}}',
-'nimagelinks' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
-'ntransclusions' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
-'specialpage-empty' => 'Ser ena report netice çini yo.',
-'lonelypages' => 'Peleyê ke cı rê gıre nêdeyayo',
+'nviews' => '$1 {{PLURAL:$1|vênayıÅ\9f|vênayıÅ\9fi}}',
+'nimagelinks' => '$1 {{PLURAL:$1|pele de|pelan de}} gureyeno',
+'ntransclusions' => '$1 {{PLURAL:$1|pele de|pelan de}} gureyeno',
+'specialpage-empty' => 'Seba na rapore netice çıniyo.',
+'lonelypages' => 'Pelê seyi',
'lonelypagestext' => 'Ena pelî link nibiyê ya zi pelanê binî {{SITENAME}} de transclude biy.',
'uncategorizedpages' => 'Pelayanê ke kategorî nibiye',
'uncategorizedcategories' => 'Kategoriyê ke bê kategorîyê',
'mostrevisions' => 'Pelan ke tewr zaf revizyonî biyê.',
'prefixindex' => 'Veroleya peley pêro',
'prefixindex-namespace' => 'Peleyê Veroleyıni ($1 cay nami)',
-'shortpages' => 'Peleyê kılmeki',
+'shortpages' => 'Pelê kılmeki',
'longpages' => 'Peleyê dergeki',
'deadendpages' => 'pelê ke pelê binan re gırey nêeşto',
'deadendpagestext' => 'Ena pelan ke {{SITENAME}} de zerrî ey de link çini yo.',
'usereditcount' => '$1 {{PLURAL:$1|vurnayîş|vurnayîşî}}',
'usercreated' => '$2 de $1 {{GENDER:$3|viraziya}}',
'newpages' => 'Pelê newey',
-'newpages-username' => 'Namey Karberi:',
+'newpages-username' => 'Nameyê karberi:',
'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'Wegirê',
+'move' => 'Bere',
'movethispage' => 'Ena pele bere',
'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
'allinnamespace' => 'Peli pênro ( $1 cayênameyî)',
'allnotinnamespace' => 'Pelanê hemî ($1 cayênameyî de niyo)',
'allpagesprev' => 'Verên',
-'allpagesnext' => 'ver şo',
+'allpagesnext' => 'Bahdo',
'allpagessubmit' => 'Şo',
'allpagesprefix' => 'herfê ke şıma tiya de nuşti, pê ney herfan pelê ke destpêkenê liste ker:',
'allpagesbadtitle' => 'pel o ke şıma kewenî cı, nameyê no peli de gıreyê zıwanan u wikiyi re elaqa esto, ê ra cıkewtış qebul niyo. ya zi sernameyan de karakterê qedexeyi tede esto.',
# Special:DeletedContributions
'deletedcontributions' => 'İştiraqê karberan de besternayına',
'deletedcontributions-title' => 'Îştirakê karberî wederna',
-'sp-deletedcontributions-contribs' => 'dekerdeni',
+'sp-deletedcontributions-contribs' => 'iştıraqi',
# Special:LinkSearch
'linksearch' => 'Gıreyê teberi cı geyrê',
'activeusers-from' => 'Enê karberi ra tepya bımocne:',
'activeusers-hidebots' => 'Botan bınımne',
'activeusers-hidesysops' => 'İdarekerdoğan bınımne',
-'activeusers-noresult' => 'Karberî çini yo.',
+'activeusers-noresult' => 'Karberi nêdiyayê.',
# Special:Log/newusers
-'newuserlogpage' => 'Cıkewtışê hesab-vıraştışi',
+'newuserlogpage' => 'Cıkewtışê hesabvıraştışi',
'newuserlogpagetext' => 'Ena log de viraştişê karberî esta.',
# Special:ListGroupRights
qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed]] belka esto.',
'listgrouprights-key' => '* <span class="listgrouprights-granted">Heqa daiye</span>
* <span class="listgrouprights-revoked">Heqa guretiye</span>',
-'listgrouprights-group' => 'Grup',
+'listgrouprights-group' => 'Grube',
'listgrouprights-rights' => 'Heqqî',
'listgrouprights-helppage' => 'Help:Heqqanê gruban',
'listgrouprights-members' => '(listey ezayan)',
'listgrouprights-right-display' => '<span class="listgrouprights-granted">$1 <code>($2)</code></span>',
'listgrouprights-right-revoked' => '<span class="listgrouprights-revoked">$1 <code>($2)</code></span>',
-'listgrouprights-addgroup' => 'şıma eşkenî hesabê xo re {{PLURAL:$2|grub|gruban}} têare kerî: $1',
-'listgrouprights-removegroup' => 'şıma eşkenî hesabê xo ra {{PLURAL:$2|grub|gruban}} bıvecî: $1',
+'listgrouprights-addgroup' => '{{PLURAL:$2|Grube|Gruban}} cı kerê: $1',
+'listgrouprights-removegroup' => '{{PLURAL:$2|Grube|Gruban}} bıvecê: $1',
'listgrouprights-addgroup-all' => 'şıma hesabê xo re heme gruban eşkeni têare bıkeri',
'listgrouprights-removegroup-all' => 'şıma hesabê xo ra heme gruban eşkeni veci',
-'listgrouprights-addgroup-self' => 'şıma hesabê xo re eşkeni {{PLURAL:$2|grub|gruban}} têare bıkerî: $1',
-'listgrouprights-removegroup-self' => 'şıma hesabê xo ra eşkeni {{PLURAL:$2|grub|gruban}} bıveci: $1',
+'listgrouprights-addgroup-self' => 'Hesabê xo rê {{PLURAL:$2|grube|gruban}} cı kerê: $1',
+'listgrouprights-removegroup-self' => 'Hesabê xo ra {{PLURAL:$2|grube|gruban}} bıvecê: $1',
'listgrouprights-addgroup-self-all' => 'şıma eşkeni hesabê xo re heme gruban têare bıkerî',
'listgrouprights-removegroup-self-all' => 'şıma hesabê xo ra eşkeni heme gruban bıveci',
'emailnotarget' => 'Qandê Gêreninamey karberiyo wuna çınyo yana xırabo.',
'emailtarget' => 'Namey Karberi defiyê de.',
'emailusername' => 'Nameyê karberi:',
-'emailusernamesubmit' => 'Stare dı',
+'emailusernamesubmit' => 'İtaet',
'email-legend' => 'karberê {{SITENAME}} binan re e-posta bıerşaw',
-'emailfrom' => 'Rışten:',
-'emailto' => 'Geren:',
-'emailsubject' => 'Mersel:',
-'emailmessage' => 'E-posta:',
-'emailsend' => 'bıerşawê/bıruşnê',
+'emailfrom' => 'Kami ra:',
+'emailto' => 'Kami rê:',
+'emailsubject' => 'Mewzu:',
+'emailmessage' => 'Mesac:',
+'emailsend' => 'Bırışe',
'emailccme' => 'kopyayekê mesaji mı re bıerşaw',
'emailccsubject' => '$2 kopyaya mesaj a ke şıma erşawıto/a $1:',
'emailsent' => 'E-posta bırşê',
'emailuserfooter' => 'na e-posta hetê ıney ra $1 erşawiya $2 no/na karberi/e re. pê fonksiyonê "Karberi/e re e-posta bıerşaw" no {{SITENAME}} keyepeli erşawiya.',
# User Messenger
-'usermessage-summary' => 'Mesajê sistemi caverd.',
+'usermessage-summary' => 'Mesacê sistemi caverde.',
'usermessage-editor' => 'Mesaj berdoxe sistemi',
'usermessage-template' => 'MediaWiki:UserMessage',
# Watchlist
-'watchlist' => 'Listey teqiban',
-'mywatchlist' => 'Listey teqiban',
+'watchlist' => 'Lista mına seyrkerdışi',
+'mywatchlist' => 'Lista mına seyrkerdışi',
'watchlistfor2' => 'Qandê $1 ($2)',
'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.',
'watchlistanontext' => 'qey vurnayişê maddeya listeya temaşakerdişi $1.',
'removewatch' => 'Listedê mınê seyr kerdışi ra hewad',
'removedwatchtext' => 'Ena pela "[[:$1]]" biya wedariya [[Special:Watchlist|listeyê seyr-kerdışi şıma]].',
'watch' => 'Temaşe ke',
-'watchthispage' => 'Peler seyr ke',
+'watchthispage' => 'Na pele seyr ke',
'unwatch' => 'Teqib mekerê',
'unwatchthispage' => 'temaşa kerdışê peli vındarn.',
'notanarticle' => 'mebhesê peli niyo',
# Namespace form on various pages
'namespace' => 'Cayê namey:',
-'invert' => 'Bê weçineni ê bina peyser biya',
+'invert' => 'Weçinıtışo peyserki',
'tooltip-invert' => 'nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan zerrekan nımtışi re ena dore tesdiqi nışan kerê',
-'namespace_association' => 'Cayê nameyanê elaqadaran',
+'namespace_association' => 'Cayê nameyanê eleqedaran',
'tooltip-namespace_association' => 'Herunda canemiya elekeyın nışan kerdışi sero qıse kerdışi yana zerre dekerdışi rê ena dora tesdiqi nışan kerê',
'blanknamespace' => '(Ser)',
# Contributions
'contributions' => 'İştiraqê karberi',
'contributions-title' => 'Dekerdenê karber de $1',
-'mycontris' => 'Dekerdenê mı',
+'mycontris' => 'Cıkerdışê mı',
'contribsub2' => 'Qandê $1 ($2)',
'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
'uctop' => '(top)',
'sp-contributions-submit' => 'Cı geyre',
# What links here
-'whatlinkshere' => 'Çı tiyay rê gırê beno',
+'whatlinkshere' => 'Gıreyê pele',
'whatlinkshere-title' => 'Per da "$1" rê perê ke gre danê',
-'whatlinkshere-page' => 'Per:',
+'whatlinkshere-page' => 'Pele:',
'linkshere' => "Ena peleyan grey biya '''[[:$1]]''':",
'nolinkshere' => "Per da '''[[:$1]]''' rê pera ke gıre dana çıniya.",
'nolinkshere-ns' => "Ena cayê nameyî de yew pel zi '''[[:$1]]''' rê link nibeno.",
'blocklink' => 'kılit ke',
'unblocklink' => 'bloqi hewad',
'change-blocklink' => 'kılit-kerdışi bıvurne',
-'contribslink' => 'dekerdeni',
+'contribslink' => 'iştıraqi',
'emaillink' => 'e-poste bırışe',
'autoblocker' => 'Şıma otomatikmen kılit biy, çıke adresa şımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gureniyena.
Sebebê kılit-biyayışê $1\'i: "$2"o',
'allmessages' => 'Mesacê sistemi',
'allmessagesname' => 'Name',
'allmessagesdefault' => 'Hesıbyaye metnê mesaci',
-'allmessagescurrent' => 'Metno ke karyayo',
+'allmessagescurrent' => 'Nuşteyê mesacê rocaney',
'allmessagestext' => 'na liste, listeya mesajê cayê nameyê wikimedya yo.
eke şıma qayili paşt bıdi mahalli kerdışê wikimedyayi, kerem kerê pelê [//www.mediawiki.org/wiki/Localisation mahalli kerdışê wikimedyayi] u [//translatewiki.net translatewiki.net] ziyaret bıkerê.',
'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' qefelnaye yo u ey ra '''{{ns:special}}:Allmessages''' karkerdışi re akerde niyo.",
'allmessages-filter-all' => 'Pêro',
'allmessages-filter-modified' => 'Vurnaye',
'allmessages-prefix' => 'pê prefiks filtre bıker',
-'allmessages-language' => 'Ziwan:',
+'allmessages-language' => 'Zıwan:',
'allmessages-filter-submit' => 'Şo',
# Thumbnails
'tooltip-watchlistedit-raw-submit' => 'Listeyê seyri newen ke',
'tooltip-recreate' => 'pel hewn a bışiyo zi tepiya biya',
'tooltip-upload' => 'Bar bike',
-'tooltip-rollback' => '"Peyser biya" be yew tik pela îştirak(an)ê peyên|i(an) peyser ano.',
+'tooltip-rollback' => '"Peyser bia" be yew tık pela iştıraq(an)ê peyên|i(an) peyser ano.',
'tooltip-undo' => '"Undo" ena vurnayışê newi iptal kena u vurnayışê verni a kena.
Tı eşkeno yew sebeb bınus.',
'tooltip-preferences-save' => 'Terciha qeyd ke',
# Info page
'pageinfo-title' => 'Heq tê "$1"\'i',
-'pageinfo-not-current' => 'Malumat tenya qande rocane rewizyoni mocneyêno.',
+'pageinfo-not-current' => 'Melumat tenya qandê çımraviyarnayışê rocaney mocniyeno.',
'pageinfo-header-basic' => 'Seron zanayış',
'pageinfo-header-edits' => 'Vurnayışi verêni',
'pageinfo-header-restrictions' => 'Xısusiyetê pela',
'pageinfo-magic-words' => '{{PLURAL:$1|Çekuya|Çekuyê}} ($1) sihırini',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Kategoriye|Kategoriyan}} ($1) bınımne',
'pageinfo-templates' => '{{PLURAL:$1|Şablon|Şabloni}} ($1) açarneyayê',
-'pageinfo-toolboxlink' => 'Malumatê perer',
+'pageinfo-toolboxlink' => 'Melumatê pele',
+'pageinfo-redirectsto' => 'Beno hetê',
+'pageinfo-redirectsto-info' => 'melumat',
+'pageinfo-contentpage' => 'Zey jû pela zerreki hesebiyena',
+'pageinfo-contentpage-yes' => 'Heya',
+'pageinfo-protect-cascading' => 'Sıtarkerdey tiya cı ra yenê war',
+'pageinfo-protect-cascading-yes' => 'Heya',
+'pageinfo-protect-cascading-from' => 'Sıtarkerdey cı ra yenê war',
# Skin names
'skinname-standard' => 'Klasik',
'exif-subjectdistance-value' => '$1 metreyi',
-'exif-meteringmode-0' => 'Nêzanıte',
+'exif-meteringmode-0' => 'Nêzanayen',
'exif-meteringmode-1' => 'orta',
'exif-meteringmode-2' => 'gıraniyê merkeziyi ser',
'exif-meteringmode-3' => 'noqtayın',
'exif-meteringmode-6' => 'qısmî',
'exif-meteringmode-255' => 'Bin',
-'exif-lightsource-0' => 'Nêzanıte',
+'exif-lightsource-0' => 'Nêzanayen',
'exif-lightsource-1' => 'Roşnê Tici',
'exif-lightsource-2' => 'Florasant',
'exif-lightsource-3' => 'roşnê bêbızate',
'exif-sharpness-1' => 'Nerm',
'exif-sharpness-2' => 'Huşk',
-'exif-subjectdistancerange-0' => 'Nêzanıte',
+'exif-subjectdistancerange-0' => 'Nêzanayen',
'exif-subjectdistancerange-1' => 'Makro',
'exif-subjectdistancerange-2' => 'Vinayişê nezdiyi',
'exif-subjectdistancerange-3' => 'Vinayişê duri',
'exif-ycbcrpositioning-1' => 'Wertekerdış',
'exif-ycbcrpositioning-2' => 'Wayırê-site',
-'exif-dc-contributor' => 'Dekerdeni',
+'exif-dc-contributor' => 'İştıraqkeri',
'exif-dc-coverage' => 'Heruna yana wextin grotışa medya',
'exif-dc-date' => 'Tarix(i)',
'exif-dc-publisher' => 'Hesrekar',
# Table pager
'ascending_abbrev' => 'berz',
'descending_abbrev' => 'nızm',
-'table_pager_next' => 'Pela peyên',
+'table_pager_next' => 'Pela peyêne',
'table_pager_prev' => 'Pela verêne',
'table_pager_first' => 'Pela jûyıne',
'table_pager_last' => 'Pela peyêne',
'fileduplicatesearch-noresults' => 'Ebe namey "$1" ra dosya nêdiyayê.',
# Special:SpecialPages
-'specialpages' => 'Peley xısusi',
+'specialpages' => 'Pelê xısusiy',
'specialpages-note' => '----
* Xısusi pelaya normal
* <span class="mw-specialpagerestricted">Xısusi peleyê keı rê ray nê deyaya.</span>
# Special:ComparePages
'comparepages' => 'Pela miqeyese ke',
'compare-selector' => 'Revizyonê pele miqayese bike',
-'compare-page1' => 'Pela 1',
-'compare-page2' => 'Pel 2',
+'compare-page1' => 'Pele 1',
+'compare-page2' => 'Pele 2',
'compare-rev1' => 'Revizyonê 1i',
'compare-rev2' => 'Revizyonê 2i',
'compare-submit' => 'Miqayese',
'uploadnewversion-linktext' => 'Nowu wersiju toś teje dataje nagraś',
'shared-repo-from' => 'z $1',
'shared-repo' => 'zgromadny repozitorium',
-'upload-disallowed-here' => 'Bóžko njamóžoš toś ten wobraz pśepisaś.',
+'upload-disallowed-here' => 'Njamóžoš toś tu dataju pśepisaś.',
# File reversion
'filerevert' => 'Slědk wześ $1',
# Info page
'pageinfo-title' => 'Informacije za bok "$1"',
+'pageinfo-not-current' => 'Informacije daju se jano za aktualnu wersiju zwobrazniś.',
'pageinfo-header-basic' => 'Zakładne informacije',
'pageinfo-header-edits' => 'Historiju wobźěłaś',
'pageinfo-header-restrictions' => 'Šćit boka',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Zapśěgnjona pśedłoga|Zapśěgnjonej pśedłoze|Zapśěgnjone pśedłogi|Zapśěgnjone pśedłogi}} ($1)',
'pageinfo-toolboxlink' => 'Informacije wó boku',
+'pageinfo-redirectsto' => 'Pósrědnja dalej k',
+'pageinfo-redirectsto-info' => 'Info',
+'pageinfo-contentpage' => 'Licy se ako wopśimjeśowy bok',
+'pageinfo-contentpage-yes' => 'Jo',
+'pageinfo-protect-cascading' => 'Kaskadowy šćit wót how',
+'pageinfo-protect-cascading-yes' => 'Jo',
+'pageinfo-protect-cascading-from' => 'Kaskadowy šćit wót',
# Skin names
'skinname-standard' => 'Klasiski',
'qbbrowse' => 'Pogihum',
'qbedit' => 'Idito',
'qbpageoptions' => 'Bolikon diti',
-'qbpageinfo' => 'Pogiromutan',
'qbmyoptions' => 'Bobolikonku ngawi',
'qbspecialpages' => 'Bobolikon suaikowokon',
'faq' => 'Ponguhatan Koinsoruan om Poninimbar',
'note' => "'''Note:'''",
'previewnote' => "'''Remember that this is only a preview.'''
Your changes have not yet been saved!",
-'continue-editing' => 'Continue editing',
+'continue-editing' => 'Go to editing area',
'previewconflict' => 'This preview reflects the text in the upper text editing area as it will appear if you choose to save.',
'session_fail_preview' => "'''Sorry! We could not process your edit due to a loss of session data.'''
Please try again.
'saveusergroups' => 'Save user groups',
'userrights-groupsmember' => 'Member of:',
'userrights-groupsmember-auto' => 'Implicit member of:',
+'userrights-groupsmember-type' => '$1', # only translate this message to other languages if you have to change it
'userrights-groups-help' => 'You may alter the groups this user is in:
* A checked box means the user is in that group.
* An unchecked box means the user is not in that group.
'emailuser-title-notarget' => 'E-mail user',
'emailuser-summary' => '', # do not translate or duplicate this message to other languages
'emailpage' => 'E-mail user',
-'emailpagetext' => 'You can use the form below to send an e-mail message to this user.
+// Dummy GENDER to prevent warnings at translatewiki
+'emailpagetext' => 'You can use the form below to send an e-mail message to this {{GENDER:$1|user}}.
The e-mail address you entered in [[Special:Preferences|your user preferences]] will appear as the "From" address of the e-mail, so the recipient will be able to reply directly to you.',
'usermailererror' => 'Mail object returned error:',
'defemailsubject' => '{{SITENAME}} e-mail from user "$1"',
'standard.css' => '/* CSS placed here will affect users of the Standard skin */', # only translate this message to other languages if you have to change it
'nostalgia.css' => '/* CSS placed here will affect users of the Nostalgia skin */', # only translate this message to other languages if you have to change it
'cologneblue.css' => '/* CSS placed here will affect users of the Cologne Blue skin */', # only translate this message to other languages if you have to change it
-'monobook.css' => '/* CSS placed here will affect users of the Monobook skin */', # only translate this message to other languages if you have to change it
+'monobook.css' => '/* CSS placed here will affect users of the MonoBook skin */', # only translate this message to other languages if you have to change it
'myskin.css' => '/* CSS placed here will affect users of the MySkin skin */', # only translate this message to other languages if you have to change it
'chick.css' => '/* CSS placed here will affect users of the Chick skin */', # only translate this message to other languages if you have to change it
'simple.css' => '/* CSS placed here will affect users of the Simple skin */', # only translate this message to other languages if you have to change it
'pageinfo-default-sort' => 'Default sort key',
'pageinfo-length' => 'Page length (in bytes)',
'pageinfo-article-id' => 'Page ID',
+'pageinfo-language' => 'Page content language',
'pageinfo-robot-policy' => 'Search engine status',
'pageinfo-robot-index' => 'Indexable',
'pageinfo-robot-noindex' => 'Not indexable',
'pageinfo-templates' => 'Transcluded {{PLURAL:$1|template|templates}} ($1)',
'pageinfo-footer' => '-', # do not translate or duplicate this message to other languages
'pageinfo-toolboxlink' => 'Page information',
+'pageinfo-redirectsto' => 'Redirects to',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Counted as a content page',
+'pageinfo-contentpage-yes' => 'Yes',
+'pageinfo-protect-cascading' => 'Protections are cascading from here',
+'pageinfo-protect-cascading-yes' => 'Yes',
+'pageinfo-protect-cascading-from' => 'Protections are cascading from',
# Skin names
'skinname-standard' => 'Classic', # only translate this message to other languages if you have to change it
# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
'video-dims' => '$1, $2 × $3', # only translate this message to other languages if you have to change it
-'seconds-abbrev' => '$1s', # only translate this message to other languages if you have to change it
-'minutes-abbrev' => '$1m', # only translate this message to other languages if you have to change it
-'hours-abbrev' => '$1h', # only translate this message to other languages if you have to change it
-'days-abbrev' => '$1d', # only translate this message to other languages if you have to change it
+'seconds-abbrev' => '$1 s', # only translate this message to other languages if you have to change it
+'minutes-abbrev' => '$1 min', # only translate this message to other languages if you have to change it
+'hours-abbrev' => '$1 h', # only translate this message to other languages if you have to change it
+'days-abbrev' => '$1 d', # only translate this message to other languages if you have to change it
'seconds' => '{{PLURAL:$1|$1 second|$1 seconds}}',
'minutes' => '{{PLURAL:$1|$1 minute|$1 minutes}}',
'hours' => '{{PLURAL:$1|$1 hour|$1 hours}}',
'version-license' => 'License',
'version-poweredby-credits' => "This wiki is powered by '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
'version-poweredby-others' => 'others',
+'version-credits-summary' => 'We would like to recognize the following persons for their contribution to [[Special:Version|MediaWiki]].',
'version-license-info' => 'MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
MediaWiki is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
'revdelete-only-restricted' => 'Eraro kaŝante la aĵon de $2, $1: Vi ne povas subpremi aĵojn de vido de administrantoj sen ankaŭ selektante unu el la aliaj subpremo-opcioj.',
'revdelete-reason-dropdown' => '*Oftaj kialoj por forigado
** Aŭtorrajta neglekto
-** Maltaŭga persona informo
-** Eventualaj malhonorigaj informoj',
+** Maltaŭga komento aŭ persona informo
+** Nekonvena uzantnomo
+** Eventuale kalumnaj informoj',
'revdelete-otherreason' => 'Alia/aldona kialo:',
'revdelete-reasonotherlist' => 'Alia kialo',
'revdelete-edit-reasonlist' => 'Redakti kialojn por forigo',
'uploadnewversion-linktext' => 'Alŝuti novan version de ĉi tiu dosiero',
'shared-repo-from' => 'de $1',
'shared-repo' => 'komuna dosierujo',
-'upload-disallowed-here' => 'Bedaŭrinde, vi ne povas superskribi ĉi tiun bildon.',
+'upload-disallowed-here' => 'Vi ne povas superskribi ĉi tiun bildon.',
# File reversion
'filerevert' => 'Restarigi $1',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|bitoko|bitokoj}}',
'ncategories' => '{{PLURAL:$1|unu kategorio|$1 kategorioj}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interlingva ligilo|interlingvaj ligiloj}}',
'nlinks' => '$1 {{PLURAL:$1|ligilo|ligiloj}}',
'nmembers' => '{{PLURAL:$1|unu membro|$1 membroj}}',
'nrevisions' => '$1 {{PLURAL:$1|versio|versioj}}',
'mostlinkedtemplates' => 'Plej ligitaj ŝablonoj',
'mostcategories' => 'Artikoloj kun la plej multaj kategorioj',
'mostimages' => 'Plej ligitaj bildoj',
+'mostinterwikis' => 'Artikoloj kun la plej multaj interlingvaj ligiloj',
'mostrevisions' => 'Artikoloj kun la plej multaj versioj',
'prefixindex' => 'Ĉiuj paĝoj kun prefikso',
'prefixindex-namespace' => 'Ĉiuj paĝoj kun prefikso ($1 nomspaco)',
'undeletedrevisions' => '{{PLURAL:$1|1 versio restarigita|$1 versioj restarigitaj}}',
'undeletedrevisions-files' => '{{PLURAL:$1|1 versio|$1 versioj}} kaj {{PLURAL:$2|1 dosiero|$2 dosieroj}} restarigitaj',
'undeletedfiles' => '{{PLURAL:$1|1 dosiero restarigita|$1 dosieroj restarigitaj}}',
-'cannotundelete' => 'Restarigo malsukcesis; iu eble restarigis la paĝon antaŭe.',
+'cannotundelete' => 'Restarigo malsukcesis:
+$1',
'undeletedpage' => "'''$1 estis restarigita'''
Konsultu la [[Special:Log/delete|deletion log]] por protokolo pri la lastatempaj forigoj kaj restarigoj.",
'pageinfo-title' => 'Informoj por "$1"',
'pageinfo-header-basic' => 'Baza informo',
'pageinfo-header-edits' => 'Historio de redaktoj',
+'pageinfo-header-restrictions' => 'Protektado de la paĝo',
+'pageinfo-header-properties' => 'Ecoj de la paĝo',
+'pageinfo-display-title' => 'Montrita titolo',
+'pageinfo-default-sort' => 'Pravaloro de ordiga ŝlosilo',
+'pageinfo-length' => 'Paĝgrandeco (en bajtoj)',
'pageinfo-article-id' => 'Paĝa identigo',
+'pageinfo-robot-policy' => 'Statuso de la serĉilo',
'pageinfo-robot-index' => 'Indeksebla',
'pageinfo-robot-noindex' => 'Ne indeksebla',
'pageinfo-views' => 'Nombro de rigardoj',
'pageinfo-watchers' => 'Nombro de paĝatentantoj',
-'pageinfo-lastuser' => 'Lasta redaktoro',
+'pageinfo-redirects-name' => 'Alidirektoj al ĉi tiu paĝo',
+'pageinfo-subpages-name' => 'Subpaĝoj de ĉi tiu paĝo',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|alidirektilo|alidirektiloj}}; $3 {{PLURAL:$3|ne-alidirektilo|ne-alidirektiloj}})',
+'pageinfo-firstuser' => 'Kreinto de la paĝo',
+'pageinfo-firsttime' => 'Dato de paĝkreado',
+'pageinfo-lastuser' => 'Lasta redaktinto',
'pageinfo-lasttime' => 'Dato de lasta redakto',
-'pageinfo-edits' => 'Tuta nombro de redaktoj',
-'pageinfo-authors' => 'Tuta nombro de malsamaj aŭtoroj',
+'pageinfo-edits' => 'Suma nombro de redaktoj',
+'pageinfo-authors' => 'Suma nombro de malsamaj aŭtoroj',
+'pageinfo-recent-edits' => 'Nombro da lastaj redaktoj (ene de lastaj $1)',
'pageinfo-recent-authors' => 'Lasta nombro de malsamaj aŭtoroj',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magia vorto|Magiaj vortoj}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Kaŝita kategorio|Kaŝitaj kategorioj}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Inkluzivita ŝablono|Inkluzivitaj ŝablonoj}} ($1)',
+'pageinfo-toolboxlink' => 'Informoj pri la paĝo',
+'pageinfo-redirectsto' => 'Alidirektas al',
+'pageinfo-redirectsto-info' => 'Informo',
+'pageinfo-contentpage' => 'Kalkulita kiel entenopaĝo',
+'pageinfo-contentpage-yes' => 'Jes',
+'pageinfo-protect-cascading' => 'Protektado kaskade fontas el ĉi tie',
+'pageinfo-protect-cascading-yes' => 'Jes',
+'pageinfo-protect-cascading-from' => 'Protektado kaskade fontas el',
# Skin names
'skinname-standard' => 'Klasiko',
'file-info-size-pages' => '$1 × $2 rastrumeroj, dosiera grandeco: $3, MIME-tipo: $4, $5 {{PLURAL:$5|paĝo|paĝoj}}',
'file-nohires' => 'Nenia pli granda distingivo havebla.',
'svg-long-desc' => 'SVG-dosiero, $1 × $2 rastrumeroj, grandeco de dosiero: $3',
+'svg-long-desc-animated' => 'Animata SVG-dosiero, $1 × $2 rastrumeroj, grandeco de dosiero: $3',
'show-big-image' => 'Plena distingivo',
'show-big-image-preview' => 'Grandeco de ĉi antaŭvido: $1.',
'show-big-image-other' => '{{PLURAL:$2|Alia distingivo|Aliaj distingivoj}}: $1.',
'file-info-png-looped' => 'ripetita',
'file-info-png-repeat' => 'Ludis $1 fojo{{PLURAL:$1||j}}n',
'file-info-png-frames' => '$1 kadro{{PLURAL:$1||j}}',
+'file-no-thumb-animation' => "'''Noto: Pro teĥnikaj limigoj antaŭvido de ĉi tiu dosiero ne estas animita.'''",
+'file-no-thumb-animation-gif' => "'''Noto: Pro teĥnikaj limigoj antaŭvido de altrezolucia GIF-dosiero kia ĉi tiu ne estas animita.'''",
# Special:NewFiles
'newimages' => 'Galerio de novaj dosieroj',
'metadata-help' => 'Ĉi tiu dosiero enhavas plian informon, verŝajne aldonitan de la cifereca fotilo aŭ skanilo uzita por krei aŭ skani ĝin. Se la dosiero estis modifita de sia originala stato, iuj detaloj eble ne konformos al efektiva stato de la modifita bildo.',
'metadata-expand' => 'Montri etendajn detalojn',
'metadata-collapse' => 'Kaŝi etendajn detalojn',
-'metadata-fields' => 'Metadatumaj kampoj de ĉi tiu mesaĝo estos inkluzivita en la paĝoj de bidloj kiam la metadatuma tabelo estas disfaldigita.
+'metadata-fields' => 'Metadatumaj kampoj de ĉi tiu mesaĝo estos inkluzivitaj en la paĝoj de bildoj kiam la metadatuma tabelo estas disfaldita.
Aliaj estos kaŝitaj defaŭlte.
* make
* model
# Scary transclusion
'scarytranscludedisabled' => '[Intervikia transinkluzivado estas malebligita.]',
'scarytranscludefailed' => '[Akiro de ŝablono $1 malsukcesis.]',
+'scarytranscludefailed-httpstatus' => '[Malsukcesis akiri la ŝablonon $1 : HTTP $2 ]',
'scarytranscludetoolong' => '[URL-o estas tro longa]',
# Delete conflict
* @author Clerc
* @author Crazymadlover
* @author Cvmontuy
+ * @author Dalton2
* @author Danke7
* @author David0811
* @author Dferg
$messages = array(
# User preference toggles
'tog-underline' => 'Subrayar enlaces:',
-'tog-justify' => 'Justificar párrafos',
-'tog-hideminor' => 'Ocultar ediciones menores en cambios recientes',
-'tog-hidepatrolled' => 'Ocultar ediciones patrulladas en los cambios recientes',
-'tog-newpageshidepatrolled' => 'Ocultar páginas patrulladas de la lista de páginas nuevas',
-'tog-extendwatchlist' => 'Expandir la lista de seguimiento a todos los cambios, no sólo a los más recientes.',
-'tog-usenewrc' => 'Agrupar los cambios por página en los cambios recientes y en la lista de vigilancia (requiere JavaScript)',
+'tog-justify' => 'Justificar los párrafos',
+'tog-hideminor' => 'Ocultar las ediciones menores en los cambios recientes',
+'tog-hidepatrolled' => 'Ocultar las ediciones patrulladas en los cambios recientes',
+'tog-newpageshidepatrolled' => 'Ocultar las páginas patrulladas de la lista de páginas nuevas',
+'tog-extendwatchlist' => 'Expandir la lista de seguimiento a todos los cambios, no sólo a los más recientes',
+'tog-usenewrc' => 'Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento (requiere JavaScript)',
'tog-numberheadings' => 'Numerar automáticamente los encabezados',
'tog-showtoolbar' => 'Mostrar la barra de edición (requiere JavaScript)',
-'tog-editondblclick' => 'Editar páginas con doble clic (requiere JavaScript)',
-'tog-editsection' => 'Habilitar la edición de secciones usando el enlace [editar]',
-'tog-editsectiononrightclick' => 'Habilitar la edición de secciones presionando el botón de la derecha en los títulos de secciones (requiere JavaScript)',
+'tog-editondblclick' => 'Editar las páginas con doble clic (requiere JavaScript)',
+'tog-editsection' => 'Habilitar la edición de secciones mediante el enlace [editar]',
+'tog-editsectiononrightclick' => 'Habilitar la edición de secciones pulsando el botón derecho en los títulos de secciones (requiere JavaScript)',
'tog-showtoc' => 'Mostrar el índice (para páginas con más de 3 encabezados)',
'tog-rememberpassword' => 'Recordar mi nombre de usuario y contraseña entre sesiones en este navegador (por un máximo de $1 {{PLURAL:$1|día|días}})',
-'tog-watchcreations' => 'Añadir las páginas que cree y los archivos que cargue a mi lista de vigilancia',
-'tog-watchdefault' => 'Añadir la páginas y archivos que edite a mi lista de vigilancia',
-'tog-watchmoves' => 'Añadir las páginas y archivos que mueva a mi lista de vigilancia',
-'tog-watchdeletion' => 'Añadir la páginas y archivos que borre a mi lista de vigilancia',
+'tog-watchcreations' => 'Añadir las páginas que cree y los archivos que suba a mi lista de seguimento',
+'tog-watchdefault' => 'Añadir las páginas y archivos que edite a mi lista de seguimiento',
+'tog-watchmoves' => 'Añadir las páginas y archivos que mueva a mi lista de seguimiento',
+'tog-watchdeletion' => 'Añadir las páginas y archivos que borre a mi lista de seguimiento',
'tog-minordefault' => 'Marcar todas las ediciones como menores de manera predeterminada',
'tog-previewontop' => 'Mostrar previsualización antes del cuadro de edición',
'tog-previewonfirst' => 'Mostrar previsualización en la primera edición',
'tog-enotifrevealaddr' => 'Revelar mi dirección de correo electrónico en los correos de notificación',
'tog-shownumberswatching' => 'Mostrar el número de usuarios que la vigilan',
'tog-oldsig' => 'Firma actual:',
-'tog-fancysig' => 'Tratar firma como wikitexto (sin un enlace automático)',
-'tog-externaleditor' => 'Utilizar editor externo por defecto (sólo para expertos, pues necesitas ajustes especiales en tu ordenador; [//www.mediawiki.org/wiki/Manual:External_editors más información])',
-'tog-externaldiff' => 'Utilizar diff externo por defecto (sólo para expertos, pues necesitas ajustes especiales en tu ordenador; [//www.mediawiki.org/wiki/Manual:External_editors más información])',
-'tog-showjumplinks' => 'Habilitar enlaces de accesibilidad «saltar a»',
-'tog-uselivepreview' => 'Usar live preview (JavaScript) (Experimental)',
-'tog-forceeditsummary' => 'Avisar cuando grabe la página sin introducir un resumen de edición',
+'tog-fancysig' => 'Tratar la firma como wikitexto (sin un enlace automático)',
+'tog-externaleditor' => 'Utilizar editor externo por defecto (sólo para expertos: son necesarios ajustes especiales en la computadora; [//www.mediawiki.org/wiki/Manual:External_editors más información])',
+'tog-externaldiff' => "Utilizar ''diferencia'' externa por defecto (sólo para expertos: son necesarios ajustes especiales en la computadora; [//www.mediawiki.org/wiki/Manual:External_editors más información])",
+'tog-showjumplinks' => 'Habilitar los enlaces de accesibilidad «saltar a»',
+'tog-uselivepreview' => 'Usar previsualización en vivo (requiere JavaScript) (experimental)',
+'tog-forceeditsummary' => 'Avisarme cuando grabe la página sin introducir un resumen de edición',
'tog-watchlisthideown' => 'Ocultar mis ediciones en la lista de seguimiento',
-'tog-watchlisthidebots' => 'Ocultar ediciones de bots en la lista de seguimiento',
-'tog-watchlisthideminor' => 'Ocultar ediciones menores en la lista de seguimiento',
-'tog-watchlisthideliu' => 'Ocultar ediciones de usuarios registrados en la lista de seguimiento',
-'tog-watchlisthideanons' => 'Ocultar ediciones de usuarios anónimos en la lista de seguimiento',
+'tog-watchlisthidebots' => 'Ocultar las ediciones de bots en la lista de seguimiento',
+'tog-watchlisthideminor' => 'Ocultar las ediciones menores en la lista de seguimiento',
+'tog-watchlisthideliu' => 'Ocultar las ediciones de los usuarios registrados en la lista de seguimiento',
+'tog-watchlisthideanons' => 'Ocultar las ediciones de los usuarios anónimos en la lista de seguimiento',
'tog-watchlisthidepatrolled' => 'Ocultar las ediciones patrulladas en la lista de seguimiento',
'tog-ccmeonemails' => 'Recibir copias de los correos que envío a otros usuarios',
-'tog-diffonly' => 'No mostrar el contenido de la página bajo las diferencias',
-'tog-showhiddencats' => 'Mostrar categorías escondidas',
+'tog-diffonly' => "No mostrar bajo las ''diferencias'' el contenido de la página",
+'tog-showhiddencats' => 'Mostrar las categorías escondidas',
'tog-noconvertlink' => 'Desactivar la conversión de título de enlace',
-'tog-norollbackdiff' => "Omitir el ''diff'' después de revertir",
+'tog-norollbackdiff' => "Omitir la ''diferencia'' después de revertir",
'underline-always' => 'Siempre',
'underline-never' => 'Nunca',
'note' => "'''Nota:'''",
'previewnote' => "'''¡Recuerda que esto es solo una previsualización.'''
¡Tus cambios aún no se ha guardado!",
-'continue-editing' => 'Continuar editando',
+'continue-editing' => 'Ir al área de edición',
'previewconflict' => 'Esta previsualización refleja el texto en el área de edición superior como aparecerá una vez guardados los cambios.',
'session_fail_preview' => "'''Lo sentimos, no pudimos procesar la edición debido a una pérdida de los datos de sesión.'''
Por favor, inténtalo de nuevo.
'shared-repo-from' => 'de $1',
'shared-repo' => 'un repositorio compartido',
'filepage.css' => '/* Los estilos CSS colocados aquí se incluirán en las páginas de descripción de archivos, incluso en los wikis externos que incluyan estas páginas */',
-'upload-disallowed-here' => 'Lamentablemente no puedes sobrescribir esta imagen.',
+'upload-disallowed-here' => 'No puedes sobrescribir este archivo.',
# File reversion
'filerevert' => 'Revertir $1',
'emailpagetext' => 'Puedes usar el formulario de abajo para enviar un correo electrónico a este usuario.
La dirección electrónica que indicaste en [[Special:Preferences|tus preferencias de usuario]] aparecerá en el remitente para que el destinatario pueda responderte.',
'usermailererror' => 'El sistema de correo devolvió un error:',
-'defemailsubject' => 'Correo de {{SITENAME}} para el usuario $1',
+'defemailsubject' => 'Correo electrónico enviado por el usuario «$1» desde {{SITENAME}}',
'usermaildisabled' => 'Correo electrónico del usuario deshabilitado',
'usermaildisabledtext' => 'No puedes enviar correos electrónicos a otros usuarios en esta wiki',
'noemailtitle' => 'No hay dirección de correo electrónico',
'standard.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Standard */',
'nostalgia.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Nostalgia */',
'cologneblue.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Cologne Blue */',
-'monobook.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Monobook */',
+'monobook.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel MonoBook */',
'myskin.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel MySkin */',
'chick.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Chick */',
'simple.css' => '/* Los estilos CSS colocados aquí se aplicarán para todos los usuarios que usen la piel Simple */',
# Info page
'pageinfo-title' => 'Información para «$1»',
+'pageinfo-not-current' => 'Únicamente se puede mostrar la información para la revisión actual.',
'pageinfo-header-basic' => 'Información básica',
'pageinfo-header-edits' => 'Historial de ediciones',
'pageinfo-header-restrictions' => 'Protección de página',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría oculta|Categorías ocultas}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|plantilla incluida|plantillas incluidas}} ($1)',
'pageinfo-toolboxlink' => 'Información de la página',
+'pageinfo-redirectsto' => 'Redirige a',
+'pageinfo-redirectsto-info' => 'Información',
+'pageinfo-contentpage' => 'Contado como página de contenido',
+'pageinfo-contentpage-yes' => 'Sí',
+'pageinfo-protect-cascading' => 'Protecciones en serie activadas',
+'pageinfo-protect-cascading-yes' => 'Sí',
+'pageinfo-protect-cascading-from' => 'Protecciones en serie activadas',
# Skin names
'skinname-standard' => 'Estándar',
'move-subpages' => 'Azpiorrialde guztiak ($1-tik gora) mugitu',
'move-talk-subpages' => 'Azpiorrialdeen eztabaida orrialde guztiak ($1-tik gora) mugitu',
'movepage-page-exists' => '$1 orrialdea jada badago eta ezin da automatikoki gainetik idatzi.',
-'movepage-page-moved' => '$1 orrialdea $2(e)ra mugitu da.',
+'movepage-page-moved' => '$1 orria $2 izenera aldatu da.',
'movepage-page-unmoved' => '$1 orrialdea ezin da $2(e)ra mugitu.',
'movepage-max-pages' => '$1 {{PLURAL:$1|orrialderen|orrialdeen}} maximoa mugitu da eta jada ez dira gehiago mugituko modu automatikoan.',
'movelogpage' => 'Mugimendu erregistroa',
# New logging system
'revdelete-restricted' => 'administratzaileentzako mugak ezarri dira',
'revdelete-unrestricted' => 'administratzaileentzako mugak kendu dira',
+'logentry-move-move' => '$1 wikilariak «$3» orria «$4» izenera aldatu du',
+'logentry-move-move_redir-noredirect' => '$1 wikilariak «$3» orria «$4» izenera aldatu du, birzuzenketa bat gainidatzita, birzuzenketarik utzi gabe',
'newuserlog-byemail' => 'pasahitza e-postaz bidali da',
# Feedback
'youhavenewmessages' => '$1 دارید ($2).',
'newmessageslink' => 'پیامهای جدید',
'newmessagesdifflink' => 'آخرین تغییر',
-'youhavenewmessagesfromusers' => 'شما از {{PLURAL:$3| کاربر دیگر| $3 کاربر}} $1 دارید ($2).',
+'youhavenewmessagesfromusers' => 'شما از {{PLURAL:$3|یک کاربر دیگر|$3 کاربر}} $1 دارید ($2).',
'youhavenewmessagesmanyusers' => 'شما از تعدادی کاربر $1 دارید ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید|پیام جدید}}',
-'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|تغییر|تغییرات}} اخیر',
+'newmessageslinkplural' => '{{PLURAL:$1|پیام جدید}}',
+'newmessagesdifflinkplural' => '{{formatnum:$1}} {{PLURAL:$1|تغییر|تغییر}} اخیر',
'youhavenewmessagesmulti' => 'پیامهای جدیدی در $1 دارید.',
'editsection' => 'ویرایش',
'editold' => 'ویرایش',
'blockedtitle' => 'کاربر بسته شدهاست',
'blockedtext' => "'''دسترسی حساب کاربری یا نشانی آیپی شما بسته شدهاست.'''
-این کار توسط $1 انجام شدهاست.
+این قطع دسترسی توسط $1 انجام شدهاست.
دلیل ارائهشده چنین است: $2''
* شروع قطع دسترسی: $8
* پایان قطع دسترسی: $6
-* کاربری که قطع دسترسیاش مد نظر بودهاست: $7
+* کاربری هدف قطع دسترسی: $7
شما میتوانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.
-توجه کنید که شما نمیتوانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]]تان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.
+توجه کنید که شما نمیتوانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.
نشانی آیپی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.
لطفاً تمامی جزئیات فوق را در کلیهٔ درخواستهایی که در این باره مطرح میکنید ذکر کنید.",
'autoblockedtext' => "دسترسی نشانی آیپی شما قطع شدهاست، زیرا این نشانی آیپی توسط کاربر دیگری استفاده شده که دسترسی او توسط $1 قطع شدهاست.
-دلیل ارائه شده چنین است:
+دلیل ارائهشده چنین است:
:''$2''
* شروع قطع دسترسی: $8
* پایان قطع دسترسی: $6
-* کاربری که قطع دسترسیاش مد نظر بودهاست: $7
+* کاربری هدف قطع دسترسی: $7
-شما میتوانید با $1 یا یکی دیگر از [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرید، تا پیرامون این قطع دسترسی صحبت کنید.
-
-توجه کنید که برای ارسال رایانامه در ویکی، باید رایانامهٔ خود را از طریق صفحهٔ [[Special:Preferences|تنظیمات]] فعال کرده باشید، و نیز، باید امکان استفاده از این ویژگی برای شما قطع نباشد.
-
-نشانی آیپی فعلی شما $3 است و شمارهٔ قطع دسترسی $5 است.
-لطفاً این شماره را در هر درخواستی که در این باره مطرح میکنید ذکر کنید.",
+شما میتوانید با $1 یا [[{{MediaWiki:Grouppage-sysop}}|مدیری]] دیگر تماس بگیرید و در این باره صحبت کنید.
+توجه کنید که شما نمیتوانید از ویژگی «فرستادن رایانامه به این کاربر» استفاده کنید مگر آنکه نشانی رایانامه معتبری در [[Special:Preferences|ترجیحات کاربری]] خودتان ثبت کرده باشید و نیز باید امکان استفاده از این ویژگی برای شما قطع نشده باشد.
+نشانی آیپی فعلی شما $3 و شمارهٔ قطع دسترسی شما $5 است.
+لطفاً تمامی جزئیات فوق را در کلیهٔ درخواستهایی که در این باره مطرح میکنید ذکر کنید.",
'blockednoreason' => 'دلیلی مشخص نشدهاست',
'whitelistedittext' => 'برای ویرایش مقالهها باید $1.',
'confirmedittext' => 'شما باید، پیش از ویرایش صفحهها، نشانی رایانامهٔ خود را مشخص و تأیید کنید. لطفاً از طریق [[Special:Preferences|ترجیحات کاربر]] این کار را صورت دهید.',
*'''گوگل کروم:'''کلیدهای ''Ctrl+Shift+R'' را با هم فشار دهید. (در رایانههای اپل مکینتاش کلیدهای ''⌘-Shift-R'')
*'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگهدارید و روی دکمهٔ ''Refresh'' کلیک کنید، یا کلیدهای ''Ctrl-F5'' را با هم فشار دهید
*'''اپرا:''' حافظهٔ نهانی مرورگر را از طریق منوی ''Tools → Preferences'' پاک کنید",
-'usercssyoucanpreview' => "'''نکته:''' پیش از ذخیهکردن فایل CSS یا JS خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
-'userjsyoucanpreview' => "'''نکته:''' پیش از ذخیرهکردن فایل CSS یا JS خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
+'usercssyoucanpreview' => "'''نکته:''' پیش از ذخیرهکردن فایل سیاساس خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
+'userjsyoucanpreview' => "''نکته:''' پیش از ذخیرهکردن فایل جاوااسکریپت خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
'usercsspreview' => "'''فراموش مکنید که شما فقط دارید پیشنمایش سیاساس کاربریتان را میبینید.'''
'''این سیاساس هنوز ذخیره نشدهاست!'''",
'userjspreview' => "'''به یاد داشته باشید که شما فقط دارید جاوااسکریپت کاربریتان را امتحان میکنید/پیشنمایش آن را میبینید.'''
'note' => "'''نکته:'''",
'previewnote' => "'''به یاد داشته باشید که این فقط پیشنمایش است.'''
تغییرات شما هنوز ذخیره نشدهاست!",
-'continue-editing' => 'اداÙ\85Ù\87Ù\94 ویرایش',
+'continue-editing' => 'رÙ\81تÙ\86 بÙ\87 Ù\82سÙ\85ت ویرایش',
'previewconflict' => 'این پیشنمایش منعکسکنندهٔ متن ناحیهٔ ویرایش متن بالایی است، به شکلی که اگر متن را ذخیره کنید نمایش خواهد یافت.',
'session_fail_preview' => "'''شرمنده! به علت از دست رفتن اطلاعات نشست کاربری نمیتوانیم ویرایش شما را پردازش کنیم.'''
لطفاً دوباره سعی کنید.
'edit-already-exists' => 'امکان ساختن صفحهٔ جدید وجود ندارد.
این صفحه از قبل وجود داشتهاست.',
'defaultmessagetext' => 'متن پیشفرض پیغام',
+'content-failed-to-parse' => 'عدم موفقیت در تجزیه محتوای $2 برای مدل $1: $3',
+'invalid-content-data' => 'داده محتوای نامعتبر',
+'content-not-allowed-here' => 'محتوای «$1» در صفحهٔ [[$2]] مجاز نیست',
+
+# Content models
+'content-model-wikitext' => 'ویکیمتن',
+'content-model-text' => 'متنی ساده',
+'content-model-javascript' => 'جاوااسکریپت',
+'content-model-css' => 'سیاساس',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''هشدار:''' این صفحه حاوی تعدادی زیادی فراخوانی دستورهای تجزیهگر است.
'prevn-title' => '$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} قبلی',
'nextn-title' => '$1 {{PLURAL:$1|نتیجهٔ|نتیجهٔ}} بعدی',
'shown-title' => 'نمایش $1 {{PLURAL:$1|نتیجه|نتیجه}} در هر صفحه',
-'viewprevnext' => 'نمایش ($1 {{int:pipe-separator}} $2) ($3).',
+'viewprevnext' => 'نمایش ($1 {{int:pipe-separator}} $2) ($3)',
'searchmenu-legend' => 'گزینههای جستجو',
'searchmenu-exists' => "'''صفحهای با عنوان \"[[:\$1]]\" در این ویکی وجود دارد.'''",
'searchmenu-new' => "'''صفحهٔ «[[:$1]]» را در این ویکی بسازید!'''",
'powersearch' => 'جستجوی پیشرفته',
'powersearch-legend' => 'جستجوی پیشرفته',
'powersearch-ns' => 'جستجو در فضاهای نام:',
-'powersearch-redir' => 'تغییرمسیرها فهرست شوند',
+'powersearch-redir' => 'فهرستکردن تغییرمسیرها',
'powersearch-field' => 'جستجو برای',
'powersearch-togglelabel' => 'بررسی:',
'powersearch-toggleall' => 'همه',
'prefs-skin' => 'پوسته',
'skin-preview' => 'پیشنمایش',
'datedefault' => 'بدون ترجیح',
-'prefs-beta' => 'ابزارهای کارآمد',
+'prefs-beta' => 'ویژگی های بتا',
'prefs-datetime' => 'تاریخ و زمان',
-'prefs-labs' => 'قسمتهای آزمایشی',
+'prefs-labs' => 'گزینههای آزمایشی',
'prefs-user-pages' => 'صفحههای کاربری',
'prefs-personal' => 'دادههای کاربر',
'prefs-rc' => 'تغییرات اخیر',
'prefs-watchlist' => 'فهرست پیگیریها',
'prefs-watchlist-days' => 'تعداد روزهایی که باید در فهرست پیگیریها نمایش داده شود:',
-'prefs-watchlist-days-max' => '(حداکثر $1 {{PLURAL:$1|روز|روز}})',
+'prefs-watchlist-days-max' => 'حداکثر $1 {{PLURAL:$1|روز}}',
'prefs-watchlist-edits' => 'تعداد ویرایشهای نشاندادهشده در فهرست پیگیریهای گسترشیافته:',
'prefs-watchlist-edits-max' => 'حداکثر تعداد: ۱۰۰۰',
'prefs-watchlist-token' => 'رمز فهرست پیگیری:',
-'prefs-misc' => 'تنظیمات متفرقه',
+'prefs-misc' => 'متفرقه',
'prefs-resetpass' => 'تغییر گذرواژه',
'prefs-changeemail' => 'تغییر رایانامه',
-'prefs-setemail' => 'تغیین آدرس رایانامه',
+'prefs-setemail' => 'تنظیم نشانی رایانامه',
'prefs-email' => 'گزینههای رایانامه',
'prefs-rendering' => 'نمایش صفحه',
'saveprefs' => 'ذخیره',
'stub-threshold' => 'آستانهٔ ویرایش پیوندهای <a href="#" class="stub">ناقص</a> (بایت):',
'stub-threshold-disabled' => 'غیرفعال',
'recentchangesdays' => 'تعداد روزهای نمایش دادهشده در تغییرات اخیر:',
-'recentchangesdays-max' => '(حداکثر $1 {{PLURAL:$1|روز|روز}})',
+'recentchangesdays-max' => 'حداکثر $1 {{PLURAL:$1|روز}}',
'recentchangescount' => 'تعداد پیشفرض ویرایشهای نمایش یافته:',
'prefs-help-recentchangescount' => 'این گزینه شامل تغییرات اخیر، تاریخچهٔ صفحهها و سیاههها میشود.',
'prefs-help-watchlist-token' => 'پرکردن این بخش با یک کلید رمز سبب ایجاد یک خوراک آراساس برای فهرست پیگیری شما میشود.
'timezoneregion-indian' => 'اقیانوس هند',
'timezoneregion-pacific' => 'اقیانوس آرام',
'allowemail' => 'امکان دریافت رایانامه از دیگر کاربران',
-'prefs-searchoptions' => 'گزینههای جستجو',
+'prefs-searchoptions' => 'جستجو',
'prefs-namespaces' => 'فضاهای نام',
'defaultns' => 'در غیر این صورت جستجو در این فضاهای نام:',
'default' => 'پیشفرض',
'prefs-textboxsize' => 'اندازهٔ جعبهٔ ویرایش',
'youremail' => 'رایانامه:',
'username' => 'نام کاربری:',
-'uid' => 'Ø´Ù\85ارÙ\87Ù\94 کاربرÛ\8c:',
+'uid' => 'Ø´Ù\86اسÙ\87Ù\94 کاربر:',
'prefs-memberingroups' => 'عضو این {{PLURAL:$1|گروه|گروهها}}:',
'prefs-registration' => 'زمان ثبتنام:',
'yourrealname' => 'نام واقعی:',
'badsig' => 'امضای خام غیرمجاز.
لطفاً برچسبهای اچتیامال را بررسی کنید.',
'badsiglength' => 'امضای شما بیش از اندازه طولانی است.
-امضا باید کمتر از $1 نویسه طول داشته باشد.',
+امضا باید کمتر از $1 {{PLURAL:$1|نویسه}} طول داشته باشد.',
'yourgender' => 'جنسیت:',
'gender-unknown' => 'مشخصنشده',
'gender-male' => 'مرد',
'prefs-help-gender' => 'اختیاری: برای خطابشدن با جنسیت درست توسط نرمافزار به کار میرود.
این اطلاعات عمومی خواهد بود.',
'email' => 'رایانامه',
-'prefs-help-realname' => 'نام واقعی اختیاری است
+'prefs-help-realname' => 'نام واقعی اختیاری است.
اگر آن را وارد کنید هنگام ارجاع به آثارتان و انتساب آنها به شما از نام واقعیتان استفاده خواهد شد.',
'prefs-help-email' => 'نشانی رایانامه اختیاریاست، اما فرستادن گذرواژهای جدید را اگر گذرواژهٔ خود را فراموش کنید ممکن میکند.',
'prefs-help-email-others' => 'شما همچنین میتوانید انتخاب کنید که کاربران بتوانند از طریق پیوندی در صفحهٔ کاربری یا صفحهٔ بحث کاربریتان به شما رایانامه بفرستند.
'right-read' => 'خواندن صفحه',
'right-edit' => 'ویرایش صفحه',
'right-createpage' => 'ایجاد صفحه (در مورد صفحههای غیر بحث)',
-'right-createtalk' => 'ایجاد صفحهٔ بحث',
-'right-createaccount' => 'ایجاد حساب کاربری',
+'right-createtalk' => 'ایجاد صفحههای بحث',
+'right-createaccount' => 'ایجاد حسابهای کاربری',
'right-minoredit' => 'علامتزدن ویرایشها به عنوان جزئی',
'right-move' => 'انتقال صفحه',
'right-move-subpages' => 'انتقال صفحهها به همراه زیرصفحههایشان',
'right-deletedhistory' => 'مشاهدهٔ موارد حذفشده از تاریخچه، بدون دیدن متن آنها',
'right-deletedtext' => 'مشاهدهٔ متن حذفشده و تغییرات بین نسخههای حذفشده',
'right-browsearchive' => 'جستجوی صفحههای حذفشده',
-'right-undelete' => 'احیای صفحهای حذفشده',
+'right-undelete' => 'احیای صفحهها',
'right-suppressrevision' => 'بازبینی و احیای ویرایشهایی که از مدیران پنهان شدهاند',
'right-suppressionlog' => 'مشاهدهٔ سیاهههای خصوصی',
'right-block' => 'قطع دسترسی ویرایشی دیگر کاربران',
'shared-repo-from' => 'از $1',
'shared-repo' => 'یک مخزن مشترک',
'shared-repo-name-wikimediacommons' => 'ویکیانبار',
-'upload-disallowed-here' => 'Ù\85تاسÙ\81اÙ\86Ù\87 Ø´Ù\85ا Ù\86Ù\85Û\8c تÙ\88اÙ\86Û\8cد اÛ\8cÙ\86 Ù\86گاره را بازنویس کنید.',
+'upload-disallowed-here' => 'Ù\85تاسÙ\81اÙ\86Ù\87 Ø´Ù\85ا Ù\86Ù\85Û\8c تÙ\88اÙ\86Û\8cد اÛ\8cÙ\86 پرÙ\88Ù\86ده را بازنویس کنید.',
# File reversion
'filerevert' => 'واگردانی $1',
'undeletedrevisions' => '$1 نسخه احیا {{PLURAL:$1|شد|شدند}}',
'undeletedrevisions-files' => '$1 نسخه و $2 پرونده احیا {{PLURAL:$1|شد|شدند}}.',
'undeletedfiles' => '$1 پرونده احیا {{PLURAL:$1|شد|شدند}}.',
-'cannotundelete' => 'احیا ناموفق بود؛
-ممکن است کس دیگری پیشتر این صفحه را احیا کرده باشد.',
+'cannotundelete' => 'احیا ناموفق بود:
+$1',
'undeletedpage' => "'''$1 احیا شد'''
برای دیدن سیاههٔ حذفها و احیاهای اخیر به [[Special:Log/delete|سیاههٔ حذف]] رجوع کنید.",
'immobile-target-namespace-iw' => 'پیوند میانویکی هدفی مجاز برای انتقال صفحه نیست.',
'immobile-source-page' => 'این صفحه قابل انتقال نیست.',
'immobile-target-page' => 'امکان انتقال به این عنوان مقصد وجود ندارد.',
+'bad-target-model' => 'مقصد مورد نظر از مدل محتوایی متفاوتی استفاده میکند. تبدیل $1 به $2 ممکن نیست.',
'imagenocrossnamespace' => 'امکان انتقال تصویر به فضای نام غیر پرونده وجود ندارد',
'nonfile-cannot-move-to-file' => 'امکان انتقال محتوای غیر پرونده به فضای نام پرونده وجود ندارد',
'imagetypemismatch' => 'پسوند پرونده جدید با نوع آن سازگار نیست',
# Info page
'pageinfo-title' => 'اطلاعات در مورد «$1»',
+'pageinfo-not-current' => 'اطلاعات ممکن است تنها برای نسخهٔ فعلی نمایش داده شود.',
'pageinfo-header-basic' => 'اطلاعات اولیه',
'pageinfo-header-edits' => 'ویرایش تاریخچه',
'pageinfo-header-restrictions' => 'حفاظت از صفحه',
'pageinfo-hidden-categories' => '{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )',
'pageinfo-templates' => '{{PLURAL:$1|الگو|الگو}} استفادهشده ($1)',
'pageinfo-toolboxlink' => 'اطلاعات صفحه',
+'pageinfo-redirectsto' => 'تغییرمسیر به',
+'pageinfo-redirectsto-info' => 'اطلاعات',
+'pageinfo-contentpage' => 'شمرده شده به عنوان صفحهٔ محتویی',
+'pageinfo-contentpage-yes' => 'بله',
+'pageinfo-protect-cascading' => 'محافظت آبشاری از اینجا',
+'pageinfo-protect-cascading-yes' => 'بله',
+'pageinfo-protect-cascading-from' => 'محافظت آبشاری از',
# Skin names
'skinname-standard' => 'کلاسیک',
* @author Crt
* @author ElmA
* @author Harriv
+ * @author Hyperborean
* @author Jaakonam
* @author Jack Phoenix
* @author Jafeluv
'note' => "'''Huomautus:'''",
'previewnote' => "'''Tämä on vasta sivun esikatselu.'''
Tekemiäsi muutoksia ei ole vielä tallennettu.",
-'continue-editing' => 'Jatka muokkaamista',
+'continue-editing' => 'Siirry muokkauskenttään',
'previewconflict' => 'Tämä esikatselu näyttää miltä muokkausalueella oleva teksti näyttää tallennettuna.',
'session_fail_preview' => "'''Muokkaustasi ei voitu tallentaa, koska istuntosi tiedot ovat kadonneet.''' Yritä uudelleen. Jos ongelma ei katoa, yritä [[Special:UserLogout|kirjautua ulos]] ja takaisin sisään.",
'session_fail_preview_html' => "'''Muokkaustasi ei voitu tallentaa, koska istuntosi tiedot ovat kadonneet.'''
'edit-already-exists' => 'Uuden sivun luominen ei onnistunut.
Se on jo olemassa.',
'defaultmessagetext' => 'Viestin oletusteksti',
-'content-not-allowed-here' => '$1 ei ole sallittua sisältöä sivulla [[$2]]',
+'invalid-content-data' => 'Virheellinen sisältö',
+'content-not-allowed-here' => 'Sivun [[$2]] sisältö ei voi olla tyyppiä $1.',
# Content models
+'content-model-wikitext' => 'wikiteksti',
+'content-model-text' => 'teksti',
'content-model-javascript' => 'JavaScript',
'content-model-css' => 'CSS',
'uploadnewversion-linktext' => 'Tallenna uusi versio tästä tiedostosta',
'shared-repo-from' => 'kohteesta $1',
'shared-repo' => 'jaettu mediavarasto',
+'upload-disallowed-here' => 'Et voi korvata tätä tiedostoa.',
# File reversion
'filerevert' => 'Tiedoston $1 palautus',
'immobile-target-namespace-iw' => 'Kielilinkki ei ole kelvollinen kohde sivun siirrolle.',
'immobile-source-page' => 'Tämä sivu ei ole siirrettävissä.',
'immobile-target-page' => 'Kyseiselle kohdenimelle ei voi siirtää.',
+'bad-target-model' => 'Kohde käyttää eri sisältömallia. Sisällön muuttaminen muodosta $1 muotoon $2 ei ole mahdollista.',
'imagenocrossnamespace' => 'Tiedostoja ei voi siirtää pois tiedostonimiavaruudesta.',
'nonfile-cannot-move-to-file' => 'Sivuja ei voi siirtää tiedostonimiavaruuteen.',
'imagetypemismatch' => 'Uusi tiedostopääte ei vastaa tiedoston tyyppiä',
'import-interwiki-templates' => 'Liitä kaikki mallineet',
'import-interwiki-submit' => 'Tuo',
'import-interwiki-namespace' => 'Kohdenimiavaruus:',
+'import-interwiki-rootpage' => 'Tuo annetun sivun alasivuiksi (valinnainen):',
'import-upload-filename' => 'Tiedostonimi:',
'import-comment' => 'Syy',
'importtext' => 'Vie sivuja lähdewikistä käyttäen [[Special:Export|vientityökalua]].
'import-error-special' => 'Sivua $1 ei tuoda, koska se kuuluu nimitilaan, joka ei salli sivuja.',
'import-error-invalid' => 'Sivua $1 ei tuoda, koska sen nimi ei kelpaa.',
'import-options-wrong' => '{{PLURAL:$2|Väärä asetus|Väärät asetukset}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Annettu sivun nimi ei kelpaa.',
+'import-rootpage-nosubpage' => 'Annetun sivun nimiavaruus $1 ei salli alasivuja.',
# Import log
'importlogpage' => 'Tuontiloki',
# Info page
'pageinfo-title' => 'Tietoja sivusta $1',
+'pageinfo-not-current' => 'Tiedot voidaan näyttää vain sivun viimeisimmälle versiolle.',
'pageinfo-header-basic' => 'Perustiedot',
'pageinfo-header-edits' => 'Muutoshistoria',
'pageinfo-header-restrictions' => 'Sivun suojaus',
'pageinfo-header-properties' => 'Sivun ominaisuudet',
+'pageinfo-display-title' => 'Sivun otsikko',
'pageinfo-default-sort' => 'Oletuslajitteluavain',
'pageinfo-length' => 'Sivun pituus (tavuina)',
'pageinfo-article-id' => 'Sivun tunniste',
+'pageinfo-robot-policy' => 'Hakukonemerkinnät',
+'pageinfo-robot-index' => 'Indeksoitava',
+'pageinfo-robot-noindex' => 'Ei indeksoitava',
'pageinfo-views' => 'Katselukertojen määrä',
'pageinfo-watchers' => 'Sivun tarkkailijoiden lukumäärä',
'pageinfo-redirects-name' => 'Sivulle johtavat ohjaukset',
'pageinfo-subpages-name' => 'Sivun alasivut',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ohjaus|ohjausta}}; $3 {{PLURAL:$3|ei-ohjausta}})',
'pageinfo-firstuser' => 'Sivun luonut',
+'pageinfo-firsttime' => 'Sivun luontipäivämäärä',
'pageinfo-lastuser' => 'Viimeisin muokkaaja',
+'pageinfo-lasttime' => 'Viimeisimmän muokkausksen päivämäärä',
'pageinfo-edits' => 'Muokkausten kokonaismäärä',
'pageinfo-authors' => 'Sivun eri muokkaajien kokonaismäärä',
+'pageinfo-recent-edits' => 'Tuoreita muutoksia ($1)',
+'pageinfo-recent-authors' => 'Tuoreita muokkaajia',
'pageinfo-magic-words' => '{{PLURAL:$1|Taikasana|Taikasanat}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Piilotettu luokka|Piilotetut luokat}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Sisällytetty malline|Sisällytetyt mallineet}} ($1)',
'pageinfo-toolboxlink' => 'Sivun tiedot',
+'pageinfo-redirectsto' => 'Ohjaus sivulle',
+'pageinfo-redirectsto-info' => 'tiedot',
+'pageinfo-contentpage' => 'Lasketaan sisältösivuksi',
+'pageinfo-contentpage-yes' => 'Kyllä',
+'pageinfo-protect-cascading-yes' => 'Kyllä',
# Skin names
'skinname-standard' => 'Perus',
'file-info-size-pages' => '$1 × $2 kuvapistettä, tiedoston koko $3, MIME-tyyppi $4, $5 {{PLURAL:$5|sivu|sivua}}',
'file-nohires' => 'Tarkempaa kuvaa ei ole saatavilla.',
'svg-long-desc' => 'SVG-tiedosto; oletustarkkuus $1 × $2 kuvapistettä; tiedostokoko $3',
+'svg-long-desc-animated' => 'Animoitu SVG-tiedosto; oletustarkkuus $1 × $2 kuvapistettä; tiedostokoko $3',
'show-big-image' => 'Korkeatarkkuuksinen versio',
'show-big-image-preview' => 'Tämän esikatselun koko: $1.',
'show-big-image-other' => '{{PLURAL:$2|Muu resoluutio|Muut resoluutiot}}: $1.',
'file-info-png-looped' => 'toistuva',
'file-info-png-repeat' => 'toistettu $1 {{PLURAL:$1|kertaa|kertaa}}',
'file-info-png-frames' => '$1 {{PLURAL:$1|kehys|kehystä}}',
+'file-no-thumb-animation' => "'''Huomautus: Teknisten rajoitusten vuoksi tämän tiedoston pienoiskuvat eivät ole animoituja.'''",
+'file-no-thumb-animation-gif' => "'''Huomautus: Teknisten rajoitusten vuoksi korkearesoluutioisten GIF-kuvien pienoiskuvat eivät ole animoituja.'''",
# Special:NewFiles
'newimages' => 'Uudet tiedostot',
'tog-shownumberswatching' => 'Näytä kuinka moni käyttäjä valvoo sivua',
'tog-oldsig' => 'Nykynen allekirjotus',
'tog-fancysig' => 'Mookkaamaton allekirjotus ilman auttomaattista linkkiä',
-'tog-externaleditor' => 'Käytä ekterniä tekstiedituuria stantartina. Vain kokenheile käyttäjile, vaatii taattorin asetuksitten muuttamista. Käytä eksterniä tekstiedituuria oletuksena. Vain kokeneille käyttäjille, vaatii selaimen asetusten muuttamista. (<span class="plainlinks">[[//www.mediawiki.org/wiki/Manual:External_editors Ohje]</span>)',
+'tog-externaleditor' => 'Käytä ekterniä tekstiedituuria stantartina. Vain kokenheile käyttäjile, vaatii taattorin asetuksitten muuttamista. Käytä eksterniä tekstiedituuria oletuksena. Vain kokeneille käyttäjille, vaatii selaimen asetusten muuttamista. ([//www.mediawiki.org/wiki/Manual:External_editors Ohje])',
# Dates
'sunday' => 'pyhä',
# Cologne Blue skin
'qbedit' => 'Mookkaa',
'qbpageoptions' => 'Tämä sivu',
-'qbpageinfo' => 'Sisältö',
'qbmyoptions' => 'Minun inställninkit',
'qbspecialpages' => 'Spesiaali sivut',
'faq' => 'Useasti kysytyt kysymykset',
'qbbrowse' => 'Kaga',
'qbedit' => 'Rætta',
'qbpageoptions' => 'Henda síðan',
-'qbpageinfo' => 'Samanhangur',
'qbmyoptions' => 'Mínar síður',
'qbspecialpages' => 'Serstakar síður',
'faq' => 'OSS',
'editinginterface' => "↓ '''Ávaring:''' Tú rættar eina síðu sum verður brúkt til at geva markamóts tekst til ritbúnaðin (software).
Broytingar á hesi síðu fara at ávirka útsjóndina á brúkara markamótinum (interface) fyri aðrir brúkarar.
Fyri at gera týðingar verður tú vinarliga biðin um at umhugsa at brúka [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], sum er verkætlan fyri týðingum av MediaWiki.",
-'sqlhidden' => '↓ (SQL fyrispurningur fjaldur)',
+'sqlhidden' => '(SQL fyrispurningur fjaldur)',
'cascadeprotected' => 'Henda síðan er vard fyri rættingum, tí hon er í fylgjandi {{PLURAL:$1|síðu, sum er|síðum, sum eru}}
vardar við "arvaðari síðuverjing"
$2',
'tog-hideminor' => 'Masquer les modifications mineures dans les modifications récentes',
'tog-hidepatrolled' => 'Masquer les modifications surveillées dans les modifications récentes',
'tog-newpageshidepatrolled' => 'Masquer les pages surveillées parmi les nouvelles pages',
-'tog-extendwatchlist' => 'Étendre la liste de suivi pour afficher toutes les modifications et non seulement les plus récentes',
+'tog-extendwatchlist' => 'Étendre la liste de suivi pour afficher toutes les modifications et pas uniquement les plus récentes',
'tog-usenewrc' => 'Grouper les changements dans les modifications récentes et la liste de suivi (nécessite JavaScript)',
'tog-numberheadings' => 'Numéroter automatiquement les titres de section',
'tog-showtoolbar' => "Montrer la barre d'outils de modification (nécessite JavaScript)",
'youhavenewmessages' => 'Vous avez $1 ($2).',
'newmessageslink' => 'de nouveaux messages',
'newmessagesdifflink' => 'dernière modification',
-'youhavenewmessagesfromusers' => "Vous avez $1 d'{{PLURAL:$3| un autre utilisateur|$3 autres utilisateurs}} ( $2 ).",
+'youhavenewmessagesfromusers' => "Vous avez $1 {{PLURAL:$3|d'un autre utilisateur|de $3 autres utilisateurs}} ($2).",
'youhavenewmessagesmanyusers' => 'Vous avez $1 de nombreux utilisateurs ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un message|nouveaux messages}}',
-'newmessagesdifflinkplural' => 'dernières {{PLURAL:$1|modification|modifications}}',
+'newmessagesdifflinkplural' => 'dernières modification{{PLURAL:$1||s}}',
'youhavenewmessagesmulti' => 'Vous avez de nouveaux messages sur $1.',
'editsection' => 'modifier',
'editold' => 'modifier',
Votre compte a été créé.
N’oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{SITENAME}}]].',
-'yourname' => 'Nom d’utilisateur :',
+'yourname' => 'Nom d’utilisateur :',
'yourpassword' => 'Mot de passe :',
'yourpasswordagain' => 'Confirmez le mot de passe :',
'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})',
'note' => "'''Note :'''",
'previewnote' => "'''Rappelez-vous que ce n’est qu’une prévisualisation.'''
Vos modifications n’ont pas encore été enregistrées !",
-'continue-editing' => 'Continuer la modification',
+'continue-editing' => 'Aller à modification de la zone',
'previewconflict' => 'Cette prévisualisation montre le texte de la boîte supérieure de modification tel qu’il apparaîtra si vous choisissez de le publier.',
'session_fail_preview' => "'''Nous ne pouvons enregistrer votre modification à cause d’une perte d’informations concernant votre session.'''
Veuillez réessayer.
Vous pouvez revenir en arrière et modifier une page existante, ou bien [[Special:UserLogin|vous connecter ou créer un compte]].',
'nocreate-loggedin' => 'Vous n’avez pas la permission de créer de nouvelles pages.',
'sectioneditnotsupported-title' => 'Modification de section non prise en charge',
-'sectioneditnotsupported-text' => 'La modification d’une section n’est pas supportée dans cette page de modification.',
+'sectioneditnotsupported-text' => 'La modification d’une section n’est pas prise en charge pour cette page.',
'permissionserrors' => 'Erreur de permissions',
'permissionserrorstext' => 'Vous n’avez pas la permission d’effectuer l’opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :',
'permissionserrorstext-withaction' => 'Vous n’êtes pas autorisé{{GENDER:||e|(e)}} à $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :',
'mergehistory-box' => 'Fusionner les versions de deux pages :',
'mergehistory-from' => 'Page d’origine :',
'mergehistory-into' => 'Page de destination :',
-'mergehistory-list' => 'Historique des modifications fusionnable',
+'mergehistory-list' => 'Historique fusionnable des modifications',
'mergehistory-merge' => 'Les versions suivantes de [[:$1]] peuvent être fusionnées avec [[:$2]]. Utilisez la colonne de boutons radio pour fusionner uniquement les versions créées du début jusqu’à la date indiquée. Notez bien que l’utilisation des liens de navigation réinitialisera cette colonne.',
'mergehistory-go' => 'Voir les modifications qui peuvent être fusionnées',
'mergehistory-submit' => 'Fusionner les versions',
'timezoneregion-indian' => 'Océan indien',
'timezoneregion-pacific' => 'Océan pacifique',
'allowemail' => 'Autoriser l’envoi de courriels venant d’autres utilisateurs',
-'prefs-searchoptions' => 'Options de recherche',
+'prefs-searchoptions' => 'Recherche',
'prefs-namespaces' => 'Espaces de noms',
'defaultns' => 'Rechercher par défaut dans ces espaces de noms :',
'default' => 'défaut',
'recentchangeslinked-feed' => 'Suivi des pages liées',
'recentchangeslinked-toolbox' => 'Suivi des pages liées',
'recentchangeslinked-title' => 'Suivi des pages associées à « $1 »',
-'recentchangeslinked-noresult' => 'Il n’y a pas de modification sur les pages liées pendant la période choisie.',
+'recentchangeslinked-noresult' => 'Il n’y a pas de modification des pages liées pendant la période choisie.',
'recentchangeslinked-summary' => "Cette page spéciale montre les modifications récentes sur les pages qui sont liées. Les pages de votre liste de suivi sont '''en gras'''.",
'recentchangeslinked-page' => 'Nom de la page :',
'recentchangeslinked-to' => 'Afficher les modifications des pages qui comportent un lien vers la page donnée plutôt que l’inverse',
'filename-tooshort' => 'Le nom du fichier est trop court.',
'filetype-banned' => 'Ce type de fichier est interdit.',
'verification-error' => 'Ce fichier ne passe pas la vérification des fichiers.',
-'hookaborted' => 'La modification que vous avez essayé de faire a été arrêtée par un crochet d’une extension.',
+'hookaborted' => 'La modification que vous avez essayé de faire a été annulée par une extension.',
'illegal-filename' => 'Le nom du fichier n’est pas autorisé.',
'overwrite' => 'Écraser un fichier existant n’est pas autorisé.',
'unknown-error' => 'Une erreur inconnue s’est produite.',
'shared-repo' => 'un dépôt partagé',
'shared-repo-name-wikimediacommons' => 'Wikimédia Commons',
'filepage.css' => '/* Les styles CSS placés ici sont inclus dans la page de description du fichier, également incluse sur les clients wikis étrangers */',
-'upload-disallowed-here' => 'Malheureusement, vous ne peut pas remplacer cette image.',
+'upload-disallowed-here' => 'Vous ne pouvez pas remplacer ce fichier.',
# File reversion
'filerevert' => 'Rétablir $1',
'nowikiemailtext' => 'Cet utilisateur a choisi de ne pas recevoir de courriel de la part d’autres utilisateurs.',
'emailnotarget' => "Nom d'utilisateur du destinataire inexistant ou invalide.",
'emailtarget' => "Entrez le nom d'utilisateur du destinataire",
-'emailusername' => "Nom de l'utilisateur :",
+'emailusername' => 'Nom d’utilisateur :',
'emailusernamesubmit' => 'Soumettre',
'email-legend' => 'Envoyer un courriel à un autre utilisateur de {{SITENAME}}',
'emailfrom' => 'De :',
# Import log
'importlogpage' => 'Journal des importations',
-'importlogpagetext' => 'Importations administratives de pages avec leur historique de modifications depuis d’autres wikis.',
+'importlogpagetext' => 'Importations administratives de pages d’autres wikis, avec leur historique de modification.',
'import-logentry-upload' => 'a importé [[$1]] par envoi de fichier',
'import-logentry-upload-detail' => '$1 version{{PLURAL:$1||s}}',
'import-logentry-interwiki' => 'a importé $1 d’un wiki à l’autre',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Catégorie cachée|Catégories cachées}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Modèle inclu|Modèles inclus}} ($1)',
'pageinfo-toolboxlink' => 'Information sur la page',
+'pageinfo-redirectsto' => 'Rediriger vers',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Compté comme page de contenu',
+'pageinfo-contentpage-yes' => 'Oui',
+'pageinfo-protect-cascading' => "Les protections sont déduites d'ici",
+'pageinfo-protect-cascading-yes' => 'Oui',
+'pageinfo-protect-cascading-from' => 'Les protections sont déduites depuis',
# Skin names
'skinname-standard' => 'Standard',
'api-error-filetype-banned' => 'Ce type de fichier est interdit.',
'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|n’est pas un type de fichier autorisé|ne sont pas des types de fichiers autorisés}}. {{PLURAL:$3|Le type de fichier autorisé est |Les types de fichiers autorisés sont}} $2.',
'api-error-filetype-missing' => 'L’extension du fichier est manquante.',
-'api-error-hookaborted' => 'La modification que vous avez essayé de faire a été arrêtée par un crochet d’une extension.',
+'api-error-hookaborted' => 'La modification que vous avez essayé de faire a été annulée par une extension.',
'api-error-http' => 'Erreur interne : ne peut se connecter au serveur.',
'api-error-illegal-filename' => 'Le nom du fichier n’est pas autorisé.',
'api-error-internal-error' => 'Erreur interne : Quelque chose s’est mal passé lors du traitement de votre import sur le wiki.',
'views' => 'Visualisacions',
'toolbox' => 'Bouèta d’outils',
'userpage' => 'Vêde la pâge utilisator',
-'projectpage' => 'Vêde la pâge du projèt',
+'projectpage' => 'Vêde la pâge projèt',
'imagepage' => 'Vêde la pâge du fichiér',
'mediawikipage' => 'Vêde la pâge du mèssâjo',
'templatepage' => 'Vêde la pâge du modèlo',
'youhavenewmessages' => 'Vos avéd de $1 ($2).',
'newmessageslink' => 'mèssâjos novéls',
'newmessagesdifflink' => 'dèrriér changement',
-'youhavenewmessagesfromusers' => 'Vos avéd $1 {{PLURAL:$3|d’un ôtro utilisator|de $3 ôtros utilisators}} ($2).',
+'youhavenewmessagesfromusers' => 'Vos avéd $1 {{PLURAL:$3|d’un ôtr’utilisator|de $3 ôtros utilisators}} ($2).',
'youhavenewmessagesmanyusers' => 'Vos avéd $1 d’un mouél d’utilisators ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|un mèssâjo novél|de mèssâjos novéls}}',
'newmessagesdifflinkplural' => '{{PLURAL:$1|dèrriér changement|dèrriérs changements}}',
'perfcached' => 'Cetes donâs sont en cacho et pôvont pas étre a jorn. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
'perfcachedts' => 'Cetes donâs sont en cacho et sont étâyes betâyes a jorn por lo dèrriér côp a $1. Por lo més {{PLURAL:$1|yon rèsultat est disponiblo|$1 rèsultats sont disponiblos}} dedens lo cacho.',
'querypage-no-updates' => 'Ora les mises a jorn por ceta pâge sont dèsactivâyes.
-Les donâs ce-desot sont pas betâyes a jorn.',
+Les donâs ique seront pas betâyes a jorn.',
'wrong_wfQuery_params' => 'Paramètros fôx dessus wfQuery()<br />
Fonccion : $1<br />
Demanda : $2',
'cascadeprotected' => 'Cela pâge-que est protègiêye perce qu’el est encllua dedens {{PLURAL:$1|ceta pâge, qu’est étâye protègiêye|cetes pâges, que sont étâyes protègiêyes}} avouéc lo chouèx « protèccion en cascâda » activâ :
$2',
'namespaceprotected' => "Vos avéd pas la pèrmission de changiér les pâges de l’èspâço de noms « '''$1''' ».",
-'customcssprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge CSS, perce que contint la configuracion a sè d’un ôtro utilisator.',
-'customjsprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge JavaScript, perce que contint la configuracion a sè d’un ôtro utilisator.',
+'customcssprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge CSS, perce que contint la configuracion a sè d’un ôtr’utilisator.',
+'customjsprotected' => 'Vos avéd pas la pèrmission de changiér cela pâge JavaScript, perce que contint la configuracion a sè d’un ôtr’utilisator.',
'ns-specialprotected' => 'Les pâges spèciâles pôvont pas étre changiêyes.',
'titleprotected' => "Cél titro est étâ protègiê a la crèacion per [[User:$1|$1]].
La rêson balyêye est « ''$2'' ».",
'passwordsent' => 'Un contresegno novél est étâ mandâ a l’adrèce èlèctronica de l’utilisator « $1 ».
Vos volyéd tornar branchiér aprés l’avêr reçu.',
'blocked-mailpassword' => 'Voutron adrèce IP est blocâye en ècritura, la fonccion de sovegnence du contresegno est vêr dèsactivâye por èvitar los abus.',
-'eauthentsent' => 'Un mèssâjo de confirmacion est étâ mandâ a l’adrèce endicâye.
+'eauthentsent' => 'Un mèssâjo de confirmacion est étâ mandâ a l’adrèce èlèctronica endicâye.
Devant qu’un ôtro mèssâjo seye mandâ a ceti compto, vos devréd siuvre les enstruccions du mèssâjo et pués confirmar que lo compto est franc lo voutro.',
'throttled-mailpassword' => 'Un mèssâjo de sovegnence de voutron contresegno est ja étâ mandâ pendent {{PLURAL:$1|l’hora passâye|les $1 hores passâyes}}.
Por èvitar los abus, solament yon mèssâjo de sovegnence serat mandâ per {{PLURAL:$1|hora|entèrvalo de $1 hores}}.',
Du côp la crèacion de compto est étâye dèsactivâye temporèrament por cel’adrèce IP.',
'emailauthenticated' => 'Voutron adrèce èlèctronica est étâye ôtentifiâye lo $2 a $3.',
'emailnotauthenticated' => 'Voutron adrèce èlèctronica est p’oncor ôtentifiâye.
-Nion mèssâjo serat mandâ por châcuna de cetes fonccions.',
-'noemailprefs' => 'Spècifiâd n’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccions.',
+Nion mèssâjo serat mandâ por châcuna de cetes fonccionalitâts.',
+'noemailprefs' => 'Spècifiâd n’adrèce èlèctronica dens voutres prèferences por empleyér cetes fonccionalitâts.',
'emailconfirmlink' => 'Confirmâd voutron adrèce èlèctronica',
'invalidemailaddress' => 'Cet’adrèce èlèctronica pôt pas étre accèptâye perce que semble avêr un format fôx.
Volyéd buchiér n’adrèce bien formatâye ou ben lèssiér cél champ vouedo.',
# Edit pages
'summary' => 'Rèsumâ :',
'subject' => 'Chousa / titro :',
-'minoredit' => 'Petiôt changement',
+'minoredit' => 'O est un petiôt changement',
'watchthis' => 'Siuvre ceta pâge',
'savearticle' => 'Sôvar la pâge',
'preview' => 'Prèvisualisacion',
-'showpreview' => 'Fâre vêre una prèvisualisacion',
-'showlivepreview' => 'Apèrçu vito fêt',
+'showpreview' => 'Fâre vêre na prèvisualisacion',
+'showlivepreview' => 'Apèrçu rapido',
'showdiff' => 'Fâre vêre los changements',
-'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê.
-Voutra adrèce IP serat encartâ dens l’historico de ceta pâge.",
-'anonpreviewwarning' => "''Vos éte pas branchiê. Sôvar encarterat voutra adrèce IP dens l’historico des changements de la pâge.''",
-'missingsummary' => "'''Rapèl :''' vos éd p’oncor balyê lo rèsumâ de voutron changement.
-Se vos tornâd clicar dessus « {{int:savearticle}} », voutron changement serat sôvâ sen novél avèrtissement.",
-'missingcommenttext' => 'Volyéd fâre voutron comentèro ce-desot.',
-'missingcommentheader' => "'''Rapèl :''' vos éd p’oncor balyê de sujèt ou ben de titro a ceti comentèro.
-Se vos tornâd clicar dessus « {{int:savearticle}} », voutron changement serat sôvâ sen titro.",
-'summary-preview' => 'Prèvisualisacion du rèsumâ :',
-'subject-preview' => 'Prèvisualisacion du sujèt / titro :',
-'blockedtitle' => 'L’usanciér est blocâ.',
-'blockedtext' => "'''Voutron compto usanciér ou ben voutra adrèce IP at étâ blocâ.'''
-
-Lo blocâjo at étâ fêt per $1.
-La rêson balyê est ceta : ''$2''.
+'anoneditwarning' => "'''Atencion :''' vos éte pas branchiê(ye).
+Voutron adrèce IP serat encartâye dedens l’historico des changements de ceta pâge.",
+'anonpreviewwarning' => "''Vos éte pas branchiê(ye). Sôvar encarterat voutron adrèce IP dedens l’historico des changements de ceta pâge.''",
+'missingsummary' => "'''Sovegnence :''' vos éd balyê gins de rèsumâ de changement.
+Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat sôvâ sen rèsumâ.",
+'missingcommenttext' => 'Volyéd buchiér un comentèro ce-desot.',
+'missingcommentheader' => "'''Sovegnence :''' vos éd balyê gins de chousa / titro a ceti comentèro.
+Se vos tornâd clicar sur lo boton « {{int:savearticle}} », voutron changement serat sôvâ sen chousa / titro.",
+'summary-preview' => 'Apèrçu du rèsumâ :',
+'subject-preview' => 'Apèrçu de la chousa / du titro :',
+'blockedtitle' => 'L’utilisator est blocâ',
+'blockedtext' => "'''Voutron nom d’utilisator ou ben voutron adrèce IP est étâ(ye) blocâ(ye).'''
+
+Lo blocâjo est étâ fêt per $1.
+La rêson balyêye est ''$2''.
* Comencement du blocâjo : $8
* Èxpiracion du blocâjo : $6
* Compto blocâ : $7
-Vos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.
-Vos pouede pas utilisar la fonccionalitât « Lui mandar un mèssâjo » a muens que vos èyâd una adrèce èlèctronica valida encartâ dens voutres [[Special:Preferences|prèferences]] et que la fonccionalitât èye pas étâ dèsactivâ.
-Voutra adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
-Volyéd spècefiar cetes endicacions dens totes les requétes que vos faréd.",
-'autoblockedtext' => "Voutra adrèce IP at étâ blocâ ôtomaticament perce qu’el at étâ utilisâ per un ôtro usanciér, lui-mémo blocâ per $1.
-La rêson balyê est ceta :
+Vos vos pouede veriér vers $1 ou ben un ôtr’[[{{MediaWiki:Grouppage-sysop}}|administrator]] por nen discutar.
+Vos pouede pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens qu’un’adrèce èlèctronica valida est spècifiâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
+Voutron adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
+Volyéd encllure tôs los dètalys ce-dessus dedens quinta que seye demanda que vos faréd.",
+'autoblockedtext' => "Voutron adrèce IP est étâye blocâye ôtomaticament perce qu’el est étâye empleyêye per un ôtr’utilisator, lui-mémo blocâ per $1.
+La rêson balyêye est :
:''$2''
Vos vos pouede veriér vers $1 ou ben yon des ôtros [[{{MediaWiki:Grouppage-sysop}}|administrators]] por nen discutar.
-Notâd que vos porréd pas utilisar la fonccionalitât « Lui mandar un mèssâjo » a muens que vos èyâd una adrèce èlèctronica valida encartâ dens voutres [[Special:Preferences|prèferences]] et que la fonccionalitât èye pas étâ dèsactivâ.
+Notâd que vos porréd pas empleyér la fonccionalitât « Lui mandar un mèssâjo » a muens que vos avéd n’adrèce èlèctronica valida encartâye dens voutres [[Special:Preferences|prèferences]] et que vos éte pas étâ blocâ de l’empleyér.
-Voutra adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
-Volyéd spècefiar cetes endicacions dens totes les requétes que vos faréd.",
-'blockednoreason' => 'gins de rêson balyê',
-'whitelistedittext' => 'Vos dête étre $1 por avêr la pèrmission de changiér lo contegnu.',
+Voutron adrèce IP d’ora est $3, et lo numerô de blocâjo est $5.
+Volyéd encllure tôs los dètalys ce-dessus dedens quinta que seye demanda que vos faréd.",
+'blockednoreason' => 'gins de rêson balyêye',
+'whitelistedittext' => 'Vos vos dête $1 por povêr changiér les pâges.',
'confirmedittext' => 'Vos dête confirmar voutra adrèce èlèctronica devant que changiér les pâges.
Volyéd buchiér et pués validar voutra adrèce èlèctronica dens voutres [[Special:Preferences|prèferences]].',
'nosuchsectiontitle' => 'Empossiblo de trovar la sèccion',
'qbbrowse' => 'Sgarfe',
'qbedit' => 'Cambie',
'qbpageoptions' => 'Cheste pagjine',
-'qbpageinfo' => 'Contest',
'qbmyoptions' => 'Mês pagjinis',
'qbspecialpages' => 'Pagjinis speciâls',
'faq' => 'Domandis plui frecuentis',
'qbbrowse' => 'Blêdzje',
'qbedit' => 'Bewurkje',
'qbpageoptions' => 'Side-opsjes',
-'qbpageinfo' => 'Side-ynfo',
'qbmyoptions' => 'Myn Opsjes',
'qbspecialpages' => 'Bysûndere siden',
'faq' => 'FAQ (faak stelde fragen)',
'qbbrowse' => 'Brabhsáil',
'qbedit' => 'Cuir in eagar',
'qbpageoptions' => 'An leathanach seo',
-'qbpageinfo' => 'Comhthéacs',
'qbmyoptions' => 'Mo chuid leathanaigh',
'qbspecialpages' => 'Leathanaigh speisialta',
'faq' => 'Ceisteanna Coiteanta',
'qbbrowse' => 'Taramaa',
'qbedit' => 'Diiştir',
'qbpageoptions' => 'Bu sayfa',
-'qbpageinfo' => 'Kontekst',
'qbmyoptions' => 'Sayfalarım',
'qbspecialpages' => 'Maasus sayfalar',
'faq' => 'SSS',
'qbbrowse' => 'Brabhsaich',
'qbedit' => 'Deasaich',
'qbpageoptions' => 'An duilleag seo',
-'qbpageinfo' => 'Co-theacs',
'qbmyoptions' => 'Na duilleagan agam',
'qbspecialpages' => 'Duilleagan sònraichte',
'faq' => 'CÀBHA',
'updated' => '(Actualizado)',
'note' => "'''Nota:'''",
'previewnote' => "'''Lembre que esta é só unha vista previa e que aínda non gardou os seus cambios!'''",
-'continue-editing' => 'Continuar editando',
+'continue-editing' => 'Ir ata a caixa de edición',
'previewconflict' => 'Esta vista previa mostra o texto na área superior tal e como aparecerá se escolle gardar.',
'session_fail_preview' => "'''O sistema non pode procesar a súa edición porque se perderon os datos de inicio da sesión.
Por favor, inténteo de novo.
'shared-repo-from' => 'de $1',
'shared-repo' => 'repositorio compartido',
'filepage.css' => '/** O CSS que se coloque aquí será incluído na páxina de descrición do ficheiro, así como nos wikis de clientes estranxeiros */',
-'upload-disallowed-here' => 'Por desgraza, non pode sobrescribir esta imaxe.',
+'upload-disallowed-here' => 'Non pode sobrescribir este ficheiro.',
# File reversion
'filerevert' => 'Reverter $1',
'rollbacklink' => 'reverter',
'rollbacklinkcount' => 'reverter $1 {{PLURAL:$1|edición|edicións}}',
'rollbacklinkcount-morethan' => 'reverter máis de $1 {{PLURAL:$1|edición|edicións}}',
-'rollbackfailed' => 'Houbo un fallo ao reverter as edicións',
+'rollbackfailed' => 'Houbo un erro ao reverter as edicións',
'cantrollback' => 'Non se pode desfacer a edición; o último colaborador é o único autor desta páxina.',
'alreadyrolled' => 'Non se pode desfacer a edición en "[[:$1]]" feita por [[User:$2|$2]] ([[User talk:$2|conversa]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); alguén máis editou ou desfixo os cambios desta páxina.
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría agochada|Categorías agochadas}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Modelo incluído|Modelos incluídos}} ($1)',
'pageinfo-toolboxlink' => 'Información da páxina',
+'pageinfo-redirectsto' => 'Redirixe cara a',
+'pageinfo-redirectsto-info' => 'información',
+'pageinfo-contentpage' => 'Cóntase como páxina de contido',
+'pageinfo-contentpage-yes' => 'Si',
+'pageinfo-protect-cascading' => 'Protección en serie activada',
+'pageinfo-protect-cascading-yes' => 'Si',
+'pageinfo-protect-cascading-from' => 'Protección en serie activada',
# Skin names
'skinname-standard' => 'Clásica',
'uploadnewversion-linktext' => 'E nöui Version vo dere Datei ufelade',
'shared-repo-from' => 'vu $1',
'shared-repo' => 'eme gmeinsame Repositorium',
-'upload-disallowed-here' => 'Leider chasch des Bild nit iberschryybe.',
+'upload-disallowed-here' => 'Du chasch die Datei nit iberschryybe.',
# File reversion
'filerevert' => 'Zrucksetze vu „$1“',
# Info page
'pageinfo-title' => 'Informatione zue „$1“',
+'pageinfo-not-current' => 'Die Informatione chenne nume fir di nejscht Versions aazeigt wäre.',
'pageinfo-header-basic' => 'Basisinformatione',
'pageinfo-header-edits' => 'Bearbeitige',
'pageinfo-header-restrictions' => 'Syteschutz',
* @author Dineshjk
* @author Dsvyas
* @author Haritosh
+ * @author Harsh4101991
* @author Jay
* @author Kaganer
* @author KartikMistry
'tog-nocache' => 'બ્રાઉઝરનું પેજ કેશિંગ અક્રિય કરો',
'tog-enotifwatchlistpages' => 'મારી ધ્યાનસૂચિમાંનું પાનુ અને ફાઇલમાં ફેરફાર થાય ત્યારે મને ઇ-મેલ મોકલો',
'tog-enotifusertalkpages' => 'મારી ચર્ચાનાં પાનામાં ફેરફાર થાય ત્યારે મને ઇ-મેલ મોકલો',
-'tog-enotifminoredits' => 'પાનાં અનેફાઇલ્સમાં નાનાં ફેરફાર થાય તો પણ મને ઇ-મેલ મોકલો',
+'tog-enotifminoredits' => 'પાનાં અને ફાઇલ્સમાં નાનાં ફેરફાર થાય તો પણ મને ઇ-મેલ મોકલો',
'tog-enotifrevealaddr' => 'નોટીફીકેશનના ઇમેલમાં મારૂ ઇમેલ એડ્રેસ બતાવો',
'tog-shownumberswatching' => 'ધ્યાનમાં રાખતા સભ્યોની સંખ્યા બતાવો',
'tog-oldsig' => 'હાલના હસ્તાક્ષર',
'youhavenewmessages' => 'તમારા માટે $1 ($2).',
'newmessageslink' => 'નવીન સંદેશ',
'newmessagesdifflink' => 'છેલ્લો ફેરફાર',
+'youhavenewmessagesfromusers' => 'આપને માટે {{PLURAL:$3|અન્ય સભ્યના|$3 અન્ય સભ્યોના}} $1 છે. ($2).',
+'youhavenewmessagesmanyusers' => 'આપને માટે $1 છે. ($2)',
'newmessageslinkplural' => '{{PLURAL:$1|નવો સંદેશ|નવાં સંદેશાઓ}}',
'newmessagesdifflinkplural' => 'છેલ્લા {{PLURAL:$1|ફેરફાર|ફેરફારો}}',
'youhavenewmessagesmulti' => '$1 ઉપર તમારા માટે નવો સંદેશ છે.',
'protectedpagetext' => 'ફેરફારો થતાં રોકવા માટે આ પાનું સુરક્ષિત કરવામાં આવ્યું છે.',
'viewsourcetext' => 'આપ આ પાનાનો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:',
'viewyourtext' => "આપ આ પાનાનાં '''આપનાં સંપાદનો'''નો મૂળ સ્રોત નિહાળી શકો છો અને તેની નકલ (copy) પણ કરી શકો છો:",
-'protectedinterface' => 'આ પાનું સોફ્ટવેર માટે ઇન્ટરફેઇસ ટેક્સટ આપે છે, અને તેને દુરુપયોગ રોકવા માટે સ્થગિત કર્યું છે.',
+'protectedinterface' => 'આ પાનું સોફ્ટવેર માટે ઇન્ટરફેઇસ ટેક્સટ આપે છે, અને તેને દુરુપયોગ રોકવા માટે સ્થગિત કર્યું છે.
+બધાંજ વિકિ માટે ભાષાંતર ઉમેરવા કે બદલવા માટે, કૃપા કરી [//translatewiki.net/ translatewiki.net], મિડિયાવિકિ સ્થાનિયકરણ પ્રકલ્પ, વાપરો.',
'editinginterface' => "'''ચેતવણી:''' તમે જે પાનામાં ફેરફાર કરી રહ્યા છો તે પાનું સોફ્ટવેર માટે ઇન્ટરફેસ ટેક્સટ પુરી પાડે છે.
-àª\85હà«\80àª\82નà«\8b બદલાવ બà«\80àª\9cા સભ્યોના ઇન્ટરફેસનાં દેખાવ ઉપર અસરકર્તા બનશે.
-àªàª¾àª·àª¾àª\82તર àª\95રવા માàª\9fà«\87 àª\95à«\83પા àª\95રà«\80 [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] -- મિડિયાવિàª\95à«\80 લà«\8bàª\95લાàª\87àª\9dà«\87શન પà«\8dરàª\95લà«\8dપ વાપરો.",
+àª\85હà«\80àª\82નà«\8b બદલાવ àª\86 વિàª\95િ પર àª\89પસà«\8dથિત àª\85નà«\8dય સભ્યોના ઇન્ટરફેસનાં દેખાવ ઉપર અસરકર્તા બનશે.
+બધાàª\82àª\9c વિàª\95િ માàª\9fà«\87 àªàª¾àª·àª¾àª\82તર àª\89મà«\87રવા àª\95à«\87 બદલવા માàª\9fà«\87 àª\95à«\83પા àª\95રà«\80 [//translatewiki.net/ translatewiki.net], મિડિયાવિàª\95à«\80 સà«\8dથાનિયàª\95રણ પà«\8dરàª\95લà«\8dપ, વાપરો.",
'sqlhidden' => '(છુપી SQL ક્વેરી)',
'cascadeprotected' => 'આ પાના પર ફેરફાર પ્રતિબંધિત છે કેમ કે આ પાનું {{PLURAL:$1|એવું પાનું|એવા પાના}} માં શામિલ છે જેમાં અનુવર્તી (પગથિયામય)સંરક્ષણ સક્રીય છે :
$2',
તે પહેલેથી હાજર છે.',
'defaultmessagetext' => 'મૂળભૂત સંદેશ લખાણ',
+# Content models
+'content-model-wikitext' => 'વિકિલખાણ',
+'content-model-text' => 'સાદું લખાણ',
+'content-model-javascript' => 'જાવાસ્ક્રિપ્ટ',
+
# Parser/template warnings
'expensive-parserfunction-warning' => "'''ચેતવણી:''' આ પાનું ખૂબ ખર્ચાળ પદચ્છેદ સૂત્ર ધરાવે છે.
'timezoneregion-indian' => 'હિંદ મહાસાગર',
'timezoneregion-pacific' => 'પ્રશાંત મહાસાગર',
'allowemail' => 'અન્ય સભ્યો તરફથી આવતા ઇ-મેલને પરવાનગી આપો',
-'prefs-searchoptions' => 'શોધ વિકલ્પો',
+'prefs-searchoptions' => 'શોધો',
'prefs-namespaces' => 'નામ અવકાશો',
'defaultns' => 'અન્યથા આ નામ અવકાશ માં શોધો',
'default' => 'મૂળ વિકલ્પ',
'mailnologin' => 'મેળવનારનું સરનામું નથી',
'mailnologintext' => 'અન્ય સભ્યને ઇ-મેલ મોકલવા માટે તમે [[Special:UserLogin|logged in]] પ્રવેશ કરેલ હોવો જોઈએ અને તમારા[[Special:Preferences|preferences]] વિકલ્પોમાં તમારા ઈ-મેલ સરનામાની પુષ્ટિ થયેલી હોવી જોઈએ',
'emailuser' => 'સભ્યને ઇ-મેલ કરો',
+'emailuser-title-notarget' => 'ઇ-મેલ વપરાશકર્તા',
'emailpage' => 'ઈ-મેલ સભ્ય',
'emailpagetext' => 'તમે નીચે દર્શાવેલ ફોર્મ વાપરી ઇ-મેલ મોકલી શકો છો.
તમે તમારી માહિતીમાં [[Special:Preferences|your user preferences]] જે ઇ-મેલ લખ્યો હશે તે દ્વારા ના નામ હેઠળ દેખાશે, જેથી ઇ-મેલ મેળવનાર તમને સંદેશાનો જવાબ આપી શકશે.',
'undeletedrevisions' => '{{PLURAL:$1|૧ સંપાદન|$1 સંપાદનો}} પુન સ્થાપિત કરાયા',
'undeletedrevisions-files' => '{{PLURAL:$1|1 ફેરફાર|$1 ફેરફારો}} અને {{PLURAL:$2|1 ફાઈલા|$2 ફાઈલો}} પુનઃસ્થાપિત',
'undeletedfiles' => '{{PLURAL:$1|1 ફાઇલ|$1 ફાઇલો}} પુનઃસ્થાપિત',
-'cannotundelete' => 'પુનર્જીવિત કરવાનું કાર્ય અસફળ;
-કોઇકે આ પાનાને પહેલેથી પુનર્જીવિત કર્યું હોઈ શકે.',
+'cannotundelete' => 'પુનર્જીવિત કરવાનું કાર્ય અસફળ:
+$1',
'undeletedpage' => "'''$1 પુનઃસ્થાપિત કરાયા'''
તાજેતરમાં હટાવેલા કે પુનઃસ્થાપિત થયેલા ફેરફારની નોંધ નો સંદર્ભ અહીં ઉપ્લબ્ધ [[Special:Log/delete|deletion log]].",
# Info page
'pageinfo-title' => ' $1 પાના ની માહિતી નૂ મથાડૂ',
'pageinfo-header-edits' => 'ઇતિહાસ સંપાદન',
+'pageinfo-length' => 'પૃષ્ઠની લંબાઇ (બાઇટમાં)',
'pageinfo-views' => 'જોનારાની સંખ્યા',
'pageinfo-watchers' => 'પાના નીરીક્ષકોની સંખ્યા',
'pageinfo-edits' => 'કુલ સંપાદનોની સંખ્યા',
'pageinfo-authors' => 'ક્ષેત્રના લેખકોની કુલ સંખ્યા',
+'pageinfo-toolboxlink' => 'પૃષ્ઠમાહિતી',
+'pageinfo-redirectsto-info' => 'માહિતી',
+'pageinfo-contentpage-yes' => 'હા',
+'pageinfo-protect-cascading-yes' => 'હા',
# Patrolling
'markaspatrolleddiff' => 'નિરીક્ષીત અંકિત કરો',
'qbbrowse' => 'Ronsee',
'qbedit' => 'Reagh',
'qbpageoptions' => 'Yn duillag shoh',
-'qbpageinfo' => 'Co-hecks',
'qbmyoptions' => 'My ghuillagyn',
'qbspecialpages' => 'Duillagyn er lheh',
'faq' => 'FC',
'qbfind' => 'Loa‘a',
'qbedit' => 'E ho‘ololi',
'qbpageoptions' => 'Kēia ‘ao‘ao',
-'qbpageinfo' => 'Pō‘aiapili',
'qbmyoptions' => 'Ka‘u mau ‘ao‘ao',
'qbspecialpages' => 'Nā ‘ao‘ao kūikawā',
'acct_creation_throttle_hit' => 'מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.
לפיכך, מבקרים דרך כתובת ה־IP הזו לא יכולים ליצור חשבונות נוספים ברגע זה.',
'emailauthenticated' => 'כתובת הדוא"ל שלך אומתה ב־$3, $2.',
-'emailnotauthenticated' => 'כתובת הדוא"ל שלכם <strong>עדיין לא אושרה</strong> - שירותי הדוא"ל הבאים אינם פעילים.',
+'emailnotauthenticated' => 'כתובת הדוא"ל שלכם עדיין לא אושרה.
+לא יישלח אליכם דוא"ל עבור אף אחת מהאפשרויות הבאות.',
'noemailprefs' => 'אנא ציינו כתובת דוא"ל בהעדפות שלכם כדי שתכונות אלה יעבדו.',
'emailconfirmlink' => 'אישור כתובת הדוא"ל שלך',
'invalidemailaddress' => 'כתובת הדוא"ל אינה מתקבלת כיוון שנראה שהיא בפורמט לא נכון.
'note' => "'''הערה:'''",
'previewnote' => "'''זכרו שזו רק תצוגה מקדימה.'''
השינויים שלכם טרם נשמרו!",
-'continue-editing' => '×\9c×\94×\9eש×\9a העריכה',
+'continue-editing' => '×\9e×¢×\91ר ×\9c×\90×\96×\95ר העריכה',
'previewconflict' => 'תצוגה מקדימה זו מציגה כיצד ייראה הטקסט בחלון העריכה העליון, אם תבחרו לשמור אותו.',
'session_fail_preview' => "'''לא ניתן לבצע את עריכתכם עקב אובדן מידע הכניסה.'''
אנא נסו שוב.
'editinguser' => "שינוי הרשאות המשתמש של '''[[User:$1|$1]]''' $2",
'userrights-editusergroup' => 'עריכת קבוצות משתמש',
'saveusergroups' => 'שמירת קבוצות משתמש',
-'userrights-groupsmember' => 'חבר בקבוצות:',
-'userrights-groupsmember-auto' => 'חבר אוטומטית בקבוצות:',
+'userrights-groupsmember' => '{{GENDER:$2|חבר|חברה}} ב{{PLURAL:$1|קבוצה|קבוצות}}:',
+'userrights-groupsmember-auto' => '{{GENDER:$2|חבר|חברה}} אוטומטית ב{{PLURAL:$1|קבוצה|קבוצות}}:',
'userrights-groups-help' => 'באפשרותכם לשנות את הקבוצות שמשתמש זה חבר בהן:
* תיבה מסומנת פירושה שהמשתמש חבר בקבוצה.
* תיבה בלתי מסומנת פירושה שהמשתמש אינו חבר בקבוצה.
'emailuser-title-notarget' => 'שליחת דוא"ל למשתמש',
'emailpage' => 'שליחת דואר למשתמש',
'emailpagetext' => 'ניתן להשתמש בטופס כדי לשלוח הודעת דואר אלקטרוני למשתמש זה.
-×\9bת×\95×\91ת ×\94×\93×\95×\90ר ×\94×\90×\9cק×\98ר×\95× ×\99 ש×\9bת×\91ת×\9d ×\91[[Special:Preferences|×\94×¢×\93פ×\95ת ×\94×\9eשת×\9eש ש×\9c×\9b×\9d]] ת×\95פ×\99×¢ ×\9b×\9bת×\95×\91ת ×\9e×\9e× ×\94 × ×©×\9c×\97×\94 ×\94×\94×\95×\93×¢×\94, ×\9b×\93×\99 ×\9c×\90פשר ת×\92×\95×\91×\94 ×\99ש×\99ר×\94 ×\9c×\9e×\9bת×\91.',
+×\9bת×\95×\91ת ×\94×\93×\95×\90ר ×\94×\90×\9cק×\98ר×\95× ×\99 ש×\9bת×\91ת×\9d ×\91[[Special:Preferences|×\94×¢×\93פ×\95ת ×\94×\9eשת×\9eש ש×\9c×\9b×\9d]] ת×\95פ×\99×¢ ×\9b×\9bת×\95×\91ת ש×\94×\94×\95×\93×¢×\94 × ×©×\9c×\97×\94 ×\9e×\9e× ×\94, ×\9b×\93×\99 ×\9c×\90פשר ת×\92×\95×\91×\94 ×\99ש×\99ר×\94.',
'usermailererror' => 'אובייקט הדואר החזיר שגיאה:',
'defemailsubject' => 'דוא"ל מ{{grammar:תחילית|{{SITENAME}}}} מהמשתמש "$1"',
'usermaildisabled' => 'שליחת דוא"ל למשתמשים מבוטלת',
'standard.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Standard בלבד */',
'nostalgia.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Nostalgia בלבד */',
'cologneblue.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב CologneBlue בלבד */',
-'monobook.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Monobook בלבד */',
+'monobook.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב MonoBook בלבד */',
'myskin.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב MySkin בלבד */',
'chick.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Chick בלבד */',
'simple.css' => '/* הסגנונות הנכתבים כאן ישפיעו על העיצוב Simple בלבד */',
'pageinfo-hidden-categories' => '{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|תבנית מוכללת|תבניות מוכללות}} ($1)',
'pageinfo-toolboxlink' => 'מידע על הדף',
+'pageinfo-redirectsto' => 'מפנה אל',
+'pageinfo-redirectsto-info' => 'מידע',
+'pageinfo-contentpage' => 'נספר כדף תוכן',
+'pageinfo-contentpage-yes' => 'כן',
+'pageinfo-protect-cascading' => 'מופעלת הגנה מדורגת מכאן',
+'pageinfo-protect-cascading-yes' => 'כן',
+'pageinfo-protect-cascading-from' => 'דף זה מוגן בגלל הגנה מדורגת על',
# Skin names
'skinname-standard' => 'קלאסי',
'qbbrowse' => 'Magbasa-basa',
'qbedit' => 'Ilisan',
'qbpageoptions' => 'Ining panid',
-'qbpageinfo' => 'Kahulugan/Konteksto',
'qbmyoptions' => 'Akon mga panid',
'qbspecialpages' => 'Pinasahi nga mga panid',
'faq' => 'Mga masami pamangkoton',
'note' => "'''Kedźbu:'''",
'previewnote' => "'''Wobmysl, zo to je jenož přehlad.'''
Twoje změny hišće njejsu składowane!",
-'continue-editing' => 'Dale wobdźěłać',
+'continue-editing' => 'K wobdźěłowanskemu polu',
'previewconflict' => 'Tutón přehlad zwobraznja tekst w hornim tekstowym polu, kaž so zjewi, jeli jón składuješ.',
'session_fail_preview' => "'''Njemóžachmy twoju změnu předźěłać, dokelž su so posedźenske daty zhubili.'''
Spytaj prošu hišće raz.
'uploadnewversion-linktext' => 'nowu wersiju tuteje dataje nahrać',
'shared-repo-from' => 'z $1',
'shared-repo' => 'zhromadny repozitorij',
-'upload-disallowed-here' => 'Bohužel njemóžeš tutón wobraz přepisać.',
+'upload-disallowed-here' => 'Njemóžeš tutu dataju přepisać.',
# File reversion
'filerevert' => 'Wersiju $1 cofnyć',
# Info page
'pageinfo-title' => 'Informacije za stronu "$1"',
+'pageinfo-not-current' => 'Informacije hodźa so jenož za aktualnu wersiju zwobraznić.',
'pageinfo-header-basic' => 'Zakładne informacije',
'pageinfo-header-edits' => 'Stawizny wobdźěłać',
'pageinfo-header-restrictions' => 'Škit strony',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Zapřijata předłoha|Zapřijatej předłoze|Zapřijate předłohi|Zapřijate předłohi}} ($1)',
'pageinfo-toolboxlink' => 'Informacije wo stronje',
+'pageinfo-redirectsto' => 'Sposrědkuje k',
+'pageinfo-redirectsto-info' => 'Info',
+'pageinfo-contentpage' => 'Liči so jako wobsahowa strona',
+'pageinfo-contentpage-yes' => 'Haj',
+'pageinfo-protect-cascading' => 'Kaskadowy škit wottud',
+'pageinfo-protect-cascading-yes' => 'Haj',
+'pageinfo-protect-cascading-from' => 'Kaskadowy škit wot',
# Skin names
'skinname-standard' => 'Klasiski',
'qbbrowse' => 'Bouske',
'qbedit' => 'Modifye',
'qbpageoptions' => 'Paj sa a',
-'qbpageinfo' => 'Kontèks',
'qbmyoptions' => 'Paj mwen yo',
'qbspecialpages' => 'Paj espesyal',
'faq' => 'FAQ',
'pageinfo-watchers' => 'Դիտողների քանակ',
'pageinfo-edits' => 'Խմբագրումների քանակ',
'pageinfo-authors' => 'Տարբեր հեղինակների քանակ',
+'pageinfo-toolboxlink' => 'Էջի մասին տեղեկություն',
# Skin names
'skinname-standard' => 'Դասական',
Tu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente],
o [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificar iste pagina]</span>.',
-'noarticletext-nopermission' => 'Al momento il non ha texto in iste pagina.
+'noarticletext-nopermission' => 'In iste momento il non ha texto in iste pagina.
Tu pote [[Special:Search/{{PAGENAME}}|cercar le titulo de iste pagina]] in altere paginas,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente].</span>',
+o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercar in le registros pertinente], ma tu non ha le permission de crear iste pagina.</span>',
'missing-revision' => 'Le version №$1 del pagina nominate "{{PAGENAME}}" non existe.
Isto es generalmente causate per sequer un ligamine de historia obsolete a un pagina que ha essite delite.
Illo existe ja.',
'defaultmessagetext' => 'Texto predefinite del message',
'content-failed-to-parse' => 'Impossibile processar le contento $2 pro le modello $1: $3',
+'invalid-content-data' => 'Datos de contento invalide',
+'content-not-allowed-here' => 'Le contento "$1" non es permittite in le pagina [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitexto',
+'content-model-text' => 'texto simple',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Attention: Iste pagina contine troppo de appellos costose al functiones del analysator syntactic.
'revdelete-only-restricted' => 'Error de celar le entrata del $1 a $2: tu non pote render entratas invisibile a administratores sin seliger tamben un del altere optiones de visibilitate.',
'revdelete-reason-dropdown' => '*Motivos commun pro deletion
** Violation de copyright
-** Information personal inappropriate',
+** Information personal o commento inappropriate
+** Nomine de usator inappropriate
+** Information que pote esser diffamatori',
'revdelete-otherreason' => 'Altere/additional motivo:',
'revdelete-reasonotherlist' => 'Altere motivo',
'revdelete-edit-reasonlist' => 'Modificar motivos pro deletion',
'timezoneregion-indian' => 'Oceano Indian',
'timezoneregion-pacific' => 'Oceano Pacific',
'allowemail' => 'Activar reception de e-mail de altere usatores',
-'prefs-searchoptions' => 'Optiones de recerca',
+'prefs-searchoptions' => 'Recerca',
'prefs-namespaces' => 'Spatios de nomines',
'defaultns' => 'Alteremente cercar in iste spatios de nomines:',
'default' => 'predefinite',
'backend-fail-internal' => 'Un error incognite occurreva in le systema de immagazinage "$1".',
'backend-fail-contenttype' => 'Non poteva determinar le typo de contento del file a immagazinar in "$1".',
'backend-fail-batchsize' => 'Le systema de immagazinage ha recipite un lot de $1 {{PLURAL:$1|operation|operationes}} de file; le limite es $2 {{PLURAL:$2|operation|operationes}}.',
-'backend-fail-usable' => 'Non poteva scriber le file $1 a causa de permissiones insufficiente o directorios/contentores mancante.',
+'backend-fail-usable' => 'Non poteva leger o scriber le file "$1" a causa de permissiones insufficiente o directorios/contentores mancante.',
# File journal errors
'filejournal-fail-dbconnect' => 'Non poteva connecter al base de datos de jornal pro le systema de immagazinage "$1".',
'uploadnewversion-linktext' => 'Incargar un nove version de iste file',
'shared-repo-from' => 'ab $1',
'shared-repo' => 'un repositorio partite',
-'upload-disallowed-here' => 'Infortunatemente tu non pote superscriber iste imagine.',
+'upload-disallowed-here' => 'Tu non pote superscriber iste file.',
# File reversion
'filerevert' => 'Reverter $1',
'undeletedrevisions' => '{{PLURAL:$1|1 version|$1 versiones}} restaurate',
'undeletedrevisions-files' => '{{PLURAL:$1|1 version|$1 versiones}} e {{PLURAL:$2|1 file|$2 files}} restaurate',
'undeletedfiles' => '$1 {{PLURAL:$1|archivo|archivos}} restaurate',
-'cannotundelete' => 'Le restauration ha fallite;
-es possibile que un altere persona ha ja restaurate le pagina.',
+'cannotundelete' => 'Le restauration ha fallite:
+$1',
'undeletedpage' => "'''$1 ha essite restaurate'''
Consulta le [[Special:Log/delete|registro de deletiones]] pro un lista de deletiones e restaurationes recente.",
'immobile-target-namespace-iw' => 'Un ligamine interwiki non es un destination valide pro le renomination de un pagina.',
'immobile-source-page' => 'Iste pagina non es renominabile.',
'immobile-target-page' => 'Non pote renominar a iste titulo de destination.',
+'bad-target-model' => 'Le destination desirate usa un altere modello de contento. Non es possibile converter de $1 a $2.',
'imagenocrossnamespace' => 'Impossibile renominar un file verso un spatio de nomines non-file',
'nonfile-cannot-move-to-file' => 'Impossibile renominar un non-file verso le spatio de nomines file',
'imagetypemismatch' => 'Le nove extension del nomine del file non corresponde al typo del file',
# Info page
'pageinfo-title' => 'Informationes pro "$1"',
+'pageinfo-not-current' => 'Information pote esser monstrate solmente pro le version actual.',
'pageinfo-header-basic' => 'Information de base',
'pageinfo-header-edits' => 'Historia de modificationes',
'pageinfo-header-restrictions' => 'Protection del pagina',
'pageinfo-magic-words' => '{{PLURAL:$1|Parola|Parolas}} magic ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria|Categorias}} celate ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Patrono|Patronos}} transcludite ($1)',
+'pageinfo-toolboxlink' => 'Information sur le pagina',
+'pageinfo-redirectsto' => 'Redirige a',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Contate como pagina de contento',
+'pageinfo-contentpage-yes' => 'Si',
+'pageinfo-protect-cascading' => 'Protection in cascada a partir de hic',
+'pageinfo-protect-cascading-yes' => 'Si',
+'pageinfo-protect-cascading-from' => 'Protection in cascada a partir de',
# Skin names
'skinname-standard' => 'Classic',
# Scary transclusion
'scarytranscludedisabled' => '[Le transclusion interwiki es disactivate]',
'scarytranscludefailed' => '[Falleva de obtener le patrono pro $1]',
+'scarytranscludefailed-httpstatus' => '[Obtention de patrono fallite pro $1: HTTP $2]',
'scarytranscludetoolong' => '[URL es troppo longe]',
# Delete conflict
'qbfind' => 'Constatar',
'qbedit' => 'Redacter',
'qbpageoptions' => 'Págine de optiones',
-'qbpageinfo' => 'Págine de information',
'qbmyoptions' => 'Mi optiones',
'qbspecialpages' => 'Págines special',
'faq' => 'FAQ',
'qbbrowse' => 'Garia',
'qbedit' => 'Mèzi',
'qbpageoptions' => 'Ihü nka',
-'qbpageinfo' => 'Abwátà nka',
'qbmyoptions' => 'Ihüm',
'qbspecialpages' => 'Ihü mkpà',
'faq' => 'FAQ',
'category-empty' => "''Daytoy a kategoria ket agdama a saan nga aglaon kadagiti panid wenno midia.''",
'hidden-categories' => '{{PLURAL:$1|Nailemmeng a kategoria|Nailemmeng a katkategoria}}',
'hidden-category-category' => 'Nailemmeng a katkategoria',
-'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad nga apo ti kategoria.|Daytoy a kategoria ket adda kadagiti sumaganad {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}, manipud ti dagup nga $2.}}',
+'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad nga apo ti kategoria.|Daytoy a kategoria ket adda kadagiti sumaganad nga {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}, manipud ti dagup nga $2.}}',
'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}.',
'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti dagup nga $2.}}',
'category-article-count-limited' => 'Ti sumaganad {{PLURAL:$1|a panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
'mainpage' => 'Umuna a Panid',
'mainpage-description' => 'Umuna a Panid',
'policy-url' => 'Project:Annuroten',
-'portal' => 'Pagdadanonan',
+'portal' => 'Portal ti komunidad',
'portal-url' => 'Project:Portal ti komunidad',
'privacy' => 'Annuroten iti kinapribado',
'privacypage' => 'Project:Annuroten iti kinapribado',
'edit-already-exists' => 'Saan a makaaramid ti baro a panid.
Adda met daytoyen.',
'defaultmessagetext' => 'Kasisigud a testo ti mensahe',
+'invalid-content-data' => 'Imbalido a datos ti linaon',
+'content-not-allowed-here' => 'Ti "$1" a linaon ket saan a maipalubos idiay [[$2]] a panid',
+
+# Content models
+'content-model-wikitext' => 'wikitext',
+'content-model-text' => 'naranas a testo',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Ballaag:''' Daytoy a panid ket adu unay kadagiti nangina a parser a pamay-an a panagtawtawag.
'uploadnewversion-linktext' => 'Mangipan ti kabarbaro a bersion iti daytoy a papeles',
'shared-repo-from' => 'Naggapo iti $1',
'shared-repo' => 'iti pagbingbingayan a nagikabilan',
-'upload-disallowed-here' => 'Daksanggasat a saanmo a mabalin a suratan manen daytoy nga imahen.',
+'upload-disallowed-here' => 'Saanmo a masuratan manen daytoy nga imahen.',
# File reversion
'filerevert' => 'Isubli ti $1',
'undeletedrevisions' => '{{PLURAL:$1|1 a binaliwan|dagiti $1 a binaliwan}} ti naisubli',
'undeletedrevisions-files' => '{{PLURAL:$1|1 a binaliwan|dagiti $1 a binaliwan}} ken {{PLURAL:$2|1 a papeles|dagiti $2 a papeles}} ti naisubli',
'undeletedfiles' => '{{PLURAL:$1|1 a papeles|dagiti $1 a papeles}} ti naisubli',
-'cannotundelete' => 'Napaay ti panagikkat;
-adda ngata immuna a nagikkat ti panid.',
+'cannotundelete' => 'Napaay ti panagikkat:
+$1',
'undeletedpage' => "'''Naisublin ti $1'''
Binsiren ti [[Special:Log/delete|listaan ti naik-ikkat]] para iti listaan dagiti naudi a naik-ikkat ken naisubsubli.",
# Info page
'pageinfo-title' => 'Pakaammo para iti "$1"',
+'pageinfo-not-current' => 'Ti pakaammo ket mabalin laeng a maiparang para iti agdama a panagbalbaliw.',
'pageinfo-header-basic' => 'Kangrunaan a pakaammuan',
'pageinfo-header-edits' => 'Pakasaritaan ti inurnos',
'pageinfo-header-restrictions' => 'Panagsalaknib ti panid',
'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
'pageinfo-templates' => 'Nailak-am {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
'pageinfo-toolboxlink' => 'Pakaammo ti panid',
+'pageinfo-redirectsto' => 'Maibaw-ing idiay',
+'pageinfo-redirectsto-info' => 'pakaammo',
+'pageinfo-contentpage' => 'Naibilang a kas naglaon a panid',
+'pageinfo-contentpage-yes' => 'Wen',
+'pageinfo-protect-cascading' => 'Dagiti panagsalaknib ket agsariap manipud ditoy',
+'pageinfo-protect-cascading-yes' => 'Wen',
+'pageinfo-protect-cascading-from' => 'Dagiti panagsalaknib ket agsariap manipud idiay',
# Patrolling
'markaspatrolleddiff' => 'Markaan a kas napatruliaan',
# Scary transclusion
'scarytranscludedisabled' => '[Nabaldado ti Interwiki panagiraman]',
'scarytranscludefailed' => '[Napaay ti panagala ti plantilia para iti $1]',
+'scarytranscludefailed-httpstatus' => '[Napaay ti panagala ti plantilia para iti $1: HTTP $2]',
'scarytranscludetoolong' => '[Atiddog unay ti URL]',
# Delete conflict
'qbbrowse' => 'БӀаргтасса',
'qbedit' => 'Хувца',
'qbpageoptions' => 'ОагӀува оттамаш',
-'qbpageinfo' => 'ОагӀува тохкам',
'qbmyoptions' => 'Са оттамаш',
'qbspecialpages' => 'ГӀулакхий оагӀувнаш',
'faq' => 'Каст-каста хаттараш',
'qbfind' => 'Trovez',
'qbedit' => 'Redaktar',
'qbpageoptions' => 'Ica pagino',
-'qbpageinfo' => 'Kuntexto',
'qbmyoptions' => 'Mea pagini',
'qbspecialpages' => 'Specala pagini',
'enotif_anon_editor' => 'ónefndum notanda $1',
'enotif_body' => 'Kæri $WATCHINGUSERNAME,
-Það lítur út fyrir að þú hafir ný skilaboð á {{SITENAME}} síðunni $PAGETITLE.
-Hún hefur verið $CHANGEDORCREATED $PAGEEDITDATE af
+Síðan „$PAGETITLE” sem þú hefur beðið um að fylgjast með á {{SITENAME}} hefur verið $CHANGEDORCREATED $PAGEEDITDATE af
$PAGEEDITOR. Breytingarágripið var:
$PAGESUMMARY
-Þetta er tengill á spjallsíðuna þína:
+Þetta er tengill á síðuna:
$PAGETITLE_URL
{{canonicalurl:{{#special:Preferences}}}}
-Til þess að hætta að fylgjast með $PAGETITLE, smelltu á:
+Til þess að hætta að fylgjast með „$PAGETITLE”, smelltu á:
$UNWATCHURL',
'note' => "'''Nota:'''",
'previewnote' => "'''Ricorda che questa è solo un'anteprima.'''
Le tue modifiche NON sono ancora state salvate!",
-'continue-editing' => 'Continua a modificare',
+'continue-editing' => "Vai all'area di modifica",
'previewconflict' => 'L\'anteprima corrisponde al testo presente nella casella di modifica superiore e rappresenta la pagina come apparirà se si sceglie di premere "Salva la pagina" in questo momento.',
'session_fail_preview' => "'''Non è stato possibile elaborare la modifica perché sono andati persi i dati relativi alla sessione.
Riprovare.
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria nascosta|Categorie nascoste}} ($1)',
'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}} ($1)',
'pageinfo-toolboxlink' => 'Informazioni sulla pagina',
+'pageinfo-redirectsto' => 'Reindirizza a',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Conteggiata come una pagina di contenuto',
+'pageinfo-contentpage-yes' => 'Sì',
+'pageinfo-protect-cascading' => 'Protezione ricorsiva da qui',
+'pageinfo-protect-cascading-yes' => 'Sì',
+'pageinfo-protect-cascading-from' => 'Protezione ricorsiva ereditata da',
# Patrolling
'markaspatrolleddiff' => 'Segna la modifica come verificata',
'tog-editsection' => '[編集]リンクから節を編集できるようにする',
'tog-editsectiononrightclick' => '節見出しの右クリックで節を編集できるようにする(JavaScriptが必要)',
'tog-showtoc' => '目次を表示(ページに見出しが4つ以上ある場合)',
-'tog-rememberpassword' => 'このブラウザーにログイン情報を記憶(最大 $1 {{PLURAL:$1|日間}})',
+'tog-rememberpassword' => 'このブラウザーにログイン情報を保存 (最長 $1 {{PLURAL:$1|日|日間}})',
'tog-watchcreations' => '自分が作成したページやアップロードしたファイルをウォッチリストに追加',
'tog-watchdefault' => '自分が編集したページやファイルをウォッチリストに追加',
'tog-watchmoves' => '自分が移動したページやファイルをウォッチリストに追加',
'tog-shownumberswatching' => 'ページをウォッチしている利用者数を表示',
'tog-oldsig' => '既存の署名:',
'tog-fancysig' => '署名をウィキ文として扱う (自動リンクなし)',
-'tog-externaleditor' => '既定で編集に外部アプリケーションを使用(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
-'tog-externaldiff' => '差分表示に外部アプリケーションを使用(上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
+'tog-externaleditor' => '既定で編集に外部アプリケーションを使用 (上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
+'tog-externaldiff' => '差分表示に外部アプリケーションを使用 (上級者向け、コンピューターに特殊な設定が必要。[//www.mediawiki.org/wiki/Manual:External_editors 詳細])',
'tog-showjumplinks' => '利用しやすさ向上のための「{{int:jumpto}}」リンクを有効にする',
-'tog-uselivepreview' => 'ライブプレビューを使用(JavaScriptが必要)(開発中)',
+'tog-uselivepreview' => 'ライブプレビューを使用 (JavaScriptが必要) (開発中)',
'tog-forceeditsummary' => '要約欄が空欄の場合に確認を促す',
'tog-watchlisthideown' => 'ウォッチリストに自分の編集を表示しない',
'tog-watchlisthidebots' => 'ウォッチリストにボットによる編集を表示しない',
'nologin' => '登録がまだの場合、$1。',
'nologinlink' => 'アカウントを作成してください',
'createaccount' => 'アカウント作成',
-'gotaccount' => '既にアカウントを持っている場合、$1。',
+'gotaccount' => 'アカウントを既に持っている場合、$1。',
'gotaccountlink' => 'ログインしてください',
'userlogin-resetlink' => 'ログイン情報をお忘れですか?',
'createaccountmail' => 'メールで送信',
'blocked-notice-logextract' => 'この利用者は現在ブロックされています。
参考のために最新のブロック記録を以下に表示します:',
'clearyourcache' => "'''注意:''' 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
-* '''Firefox / Safari:''' ''Shift'' ã\82\92æ\8a¼ã\81\97ã\81ªã\81\8cã\82\89 ''å\86\8dèªã\81¿è¾¼ã\81¿'' ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\80\81ã\82\82ã\81\97ã\81\8fã\81¯ ''Ctrl-F5'' ã\81\8b ''Ctrl-R'' ã\82\92æ\8a¼ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84 (Macã\81§ã\81¯ ''⌘-R'' )
-* '''Google Chrome:''' ''Ctrl-Shift-R'' を押してください (Macでは ''⌘-Shift-R'' )
-* '''Internet Explorer:''' ''Ctrl'' ã\82\92æ\8a¼ã\81\97ã\81ªã\81\8cã\82\89 ''æ\9c\80æ\96°ã\81®æ\83\85å ±ã\81«æ\9b´æ\96°'' ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\80\81ã\82\82ã\81\97ã\81\8fã\81¯ ''Ctrl-F5'' を押してください
+* '''Firefox / Safari:''' ''Shift'' ã\82\92æ\8a¼ã\81\97ã\81ªã\81\8cã\82\89 ''å\86\8dèªã\81¿è¾¼ã\81¿'' ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\81\8bã\80\81''Ctrl-F5'' ã\81¾ã\81\9fã\81¯ ''Ctrl-R'' ã\82\92æ\8a¼ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84 (Mac ã\81§ã\81¯ ''⌘-R'')
+* '''Google Chrome:''' ''Ctrl-Shift-R'' を押してください (Mac では ''⌘-Shift-R'')
+* '''Internet Explorer:''' ''Ctrl'' ã\82\92æ\8a¼ã\81\97ã\81ªã\81\8cã\82\89 ''æ\9c\80æ\96°ã\81®æ\83\85å ±ã\81«æ\9b´æ\96°'' ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\99ã\82\8bã\81\8bã\80\81''Ctrl-F5'' を押してください
* '''Opera:''' ''ツール → 設定'' からキャッシュをクリアしてください。",
'usercssyoucanpreview' => "'''ヒント:'''「{{int:showpreview}}」ボタンを使うと、保存前に新しいスタイルシートを試験できます。",
'userjsyoucanpreview' => "'''ヒント:''' 「{{int:showpreview}}」ボタンを使うと、保存前に新しいスクリプトを試験できます。",
'updated' => '(更新)',
'note' => "'''お知らせ:'''",
'previewnote' => "'''これはプレビューです。'''
-変更箇所はまだ保存されていません!",
-'continue-editing' => 'ç·¨é\9b\86ã\82\92ç¶\9aè¡\8c',
+変更内容はまだ保存されていません!",
+'continue-editing' => 'ç·¨é\9b\86ã\82¨ã\83ªã\82¢ã\81«ç§»å\8b\95',
'previewconflict' => 'これは、上の編集エリアの文章を保存した場合にどう表示されるかを示すプレビューです。',
'session_fail_preview' => "'''申し訳ありません!セッションデータが消失したため編集を処理できませんでした。'''
もう一度やり直してください。
'searchprofile-articles-tooltip' => '$1内を検索',
'searchprofile-project-tooltip' => '$1内を検索',
'searchprofile-images-tooltip' => 'ファイルを検索',
-'searchprofile-everything-tooltip' => '全本文ページ(トークページ含む)を検索',
+'searchprofile-everything-tooltip' => '全本文ページ (トークページを含む) 内を検索',
'searchprofile-advanced-tooltip' => '特定の名前空間内を検索',
-'search-result-size' => '$1({{PLURAL:$2|$2単語}})',
-'search-result-category-size' => '{{PLURAL:$1|$1件}}({{PLURAL:$2|$2下位カテゴリ}}、{{PLURAL:$3|$3ファイル}})',
-'search-result-score' => '関連度:$1%',
+'search-result-size' => '$1 ({{PLURAL:$2|$2 単語}})',
+'search-result-category-size' => '{{PLURAL:$1|$1 件}} ({{PLURAL:$2|$2 下位カテゴリ}}、{{PLURAL:$3|$3 ファイル}})',
+'search-result-score' => '関連度: $1%',
'search-redirect' => '($1からのリダイレクト)',
'search-section' => '($1の節)',
-'search-suggest' => 'もしかして:$1',
+'search-suggest' => 'もしかして: $1',
'search-interwiki-caption' => '姉妹プロジェクト',
-'search-interwiki-default' => '$1の結果:',
+'search-interwiki-default' => '$1の結果:',
'search-interwiki-more' => '(続き)',
'search-relatedarticle' => '関連',
'mwsuggest-disable' => 'Ajaxによる検索候補の提示を無効にする',
'searcheverything-enable' => 'すべての名前空間を検索',
'searchrelated' => '関連',
'searchall' => 'すべて',
-'showingresults' => "'''$2''' 件目以降の {{PLURAL:$1|'''$1''' 件の結果}}を表示しています。",
+'showingresults' => "'''$2''' 件目以降の最大 {{PLURAL:$1|'''$1''' 件の結果}}を表示しています。",
'showingresultsnum' => "'''$2''' 件目以降の {{PLURAL:$3|'''$3''' 件の結果}}を表示しています。",
'showingresultsheader' => "「'''$4'''」の検索結果 {{PLURAL:$5|'''$3''' 件中の '''$1''' 件目|'''$3''' 件中の '''$1''' 件目から '''$2''' 件目}}",
'nonefound' => "'''注意''':既定では一部の名前空間のみを検索します。
'prefs-watchlist-days' => 'ウォッチリストの表示日数:',
'prefs-watchlist-days-max' => '最大 $1 {{PLURAL:$1|日間}}',
'prefs-watchlist-edits' => '拡張ウォッチリストの表示件数:',
-'prefs-watchlist-edits-max' => '最大数:1000',
+'prefs-watchlist-edits-max' => '最大数: 1000',
'prefs-watchlist-token' => 'ウォッチリストのトークン:',
'prefs-misc' => 'その他',
'prefs-resetpass' => 'パスワードを変更',
'userrights-irreversible-marker' => '$1*',
# Groups
-'group' => 'グループ:',
+'group' => 'グループ:',
'group-user' => '登録利用者',
'group-autoconfirmed' => '自動承認された利用者',
'group-bot' => 'ボット',
'recentchanges-label-bot' => 'この編集はボットによって行われました',
'recentchanges-label-unpatrolled' => 'この編集はまだ巡回されていません',
'rcnote' => "$4 $5 までの{{PLURAL:$2|'''$2'''日間}}になされた{{PLURAL:$1|'''$1'''件の変更}}は以下の通りです。",
-'rcnotefrom' => "以下は、'''$2'''以降の更新です(最大'''$1'''件)。",
+'rcnotefrom' => "以下は'''$2'''以降の更新です (最大 '''$1''' 件)。",
'rclistfrom' => '$1以降の更新を表示する',
'rcshowhideminor' => '細部の編集を$1',
'rcshowhidebots' => 'ボットを$1',
'upload-recreate-warning' => "'''警告:その名前のファイルは、以前に削除または移動されています。'''
参考のため、このページの削除と移動の記録を以下に示します:",
-'uploadtext' => "ファイルをアップロードするには、以下のフォームを利用してください。
-以å\89\8dã\81«ã\82¢ã\83\83ã\83\97ã\83ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\81®è¡¨ç¤ºã\81¨æ¤\9cç´¢ã\81«ã\81¯[[Special:FileList|{{int:listfiles}}]]ã\82\92使ç\94¨ã\81\97ã\80\81ï¼\88å\86\8dï¼\89アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。
+'uploadtext' => "ファイルをアップロードするには、以下のフォームを使用してください。
+以å\89\8dã\81«ã\82¢ã\83\83ã\83\97ã\83ã\83¼ã\83\89ã\81\95ã\82\8cã\81\9fã\83\95ã\82¡ã\82¤ã\83«ã\81®è¡¨ç¤ºã\81¨æ¤\9cç´¢ã\81«ã\81¯[[Special:FileList|{{int:listfiles}}]]ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82(å\86\8d) アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。
-ページにファイルを入れるには、以下の書式のリンクを使用してください:
-* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code>'''とすると、ファイルが完全なままで使用されます
-* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.png|200px|thumb|left|代替文]]</nowiki></code>'''とすると、200ピクセルの幅に修正された状態で、左寄せの枠内に、「代替文」が説明として使用されます。
-* '''<code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code>'''とするとファイルを表示せずに直接ファイルへリンクします",
+ページにファイルを入れるには、以下の書式のリンクを使用してください:
+* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.jpg]]</nowiki></code>''' とすると、ファイルが完全なままで使用されます
+* '''<code><nowiki>[[</nowiki>{{ns:file}}:<nowiki>File.png|200px|thumb|left|代替文]]</nowiki></code>''' とすると、200ピクセルの幅に修正された状態で、左寄せの枠内に、「代替文」が説明として使用されます。
+* '''<code><nowiki>[[</nowiki>{{ns:media}}:<nowiki>File.ogg]]</nowiki></code>''' とすると、ファイルを表示せずにそのファイルに直接リンクします",
'upload-permitted' => '許可されているファイル形式: $1。',
'upload-preferred' => '推奨されているファイル形式: $1。',
'upload-prohibited' => '禁止されているファイル形式: $1。',
'upload-file-error' => '内部エラー',
'upload-file-error-text' => '内部エラーのため、サーバー上の一時ファイル作成に失敗しました。
[[Special:ListUsers/sysop|管理者]]に連絡してください。',
-'upload-misc-error' => 'ä¸\8dæ\98\8eã\81ªã\82¢ã\83\83ã\83\97ã\83ã\83¼ã\83\89ã\81®ã\82¨ã\83©ã\83¼',
+'upload-misc-error' => '不明なアップロードエラー',
'upload-misc-error-text' => 'アップロード中に不明なエラーが発生しました。
指定した URL が正しいこととアクセスできることを確認して、もう一度試してください。
それでもこのエラーが発生する場合は、[[Special:ListUsers/sysop|管理者]]に連絡してください。',
'shared-repo' => '共有リポジトリ',
'shared-repo-name-wikimediacommons' => 'ウィキメディア・コモンズ',
'filepage.css' => '/* ここに記述したCSSはファイル解説ページにて読み込まれます。また外部のクライアントウィキにも影響します */',
-'upload-disallowed-here' => 'ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\81«ã\81¯上書きできません。',
+'upload-disallowed-here' => 'ã\81\82ã\81ªã\81\9fã\81¯ã\81\93ã\81®ã\83\95ã\82¡ã\82¤ã\83«ã\82\92上書きできません。',
# File reversion
'filerevert' => '$1を差し戻す',
'deadendpagestext' => '以下のページは、{{SITENAME}}の他のページにリンクしていません。',
'protectedpages' => '保護されているページ',
'protectedpages-indef' => '無期限保護のみ',
-'protectedpages-cascade' => '連続保護のみ',
+'protectedpages-cascade' => 'カスケード保護のみ',
'protectedpagestext' => '以下のページは移動や編集が禁止されています',
'protectedpagesempty' => '指定した条件で保護中のページは現在ありません。',
'protectedtitles' => '作成保護されているページ名',
'protect-fallback' => '「$1」権限が必要',
'protect-level-autoconfirmed' => '新規利用者と匿名利用者を禁止',
'protect-level-sysop' => '管理者のみ',
-'protect-summary-cascade' => '連続',
+'protect-summary-cascade' => 'カスケード',
'protect-expiring' => '$1(UTC)で自動的に解除',
'protect-expiring-local' => '期限 $1',
'protect-expiry-indefinite' => '無期限',
'pageinfo-hidden-categories' => '隠し{{PLURAL:$1|カテゴリ}} ($1)',
'pageinfo-templates' => '参照読み込みされた{{PLURAL:$1|テンプレート}} ($1)',
'pageinfo-toolboxlink' => 'ページ情報',
+'pageinfo-redirectsto' => '転送先',
+'pageinfo-redirectsto-info' => '情報',
+'pageinfo-contentpage' => '本文ページとして数える',
+'pageinfo-contentpage-yes' => 'はい',
+'pageinfo-protect-cascading' => 'カスケード保護されている',
+'pageinfo-protect-cascading-yes' => 'はい',
+'pageinfo-protect-cascading-from' => 'カスケード保護の起点',
# Skin names
'skinname-standard' => 'クラシック',
# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
'video-dims' => '$1、 $2 × $3',
+'seconds-abbrev' => '$1 s',
+'hours-abbrev' => '$1 h',
+'days-abbrev' => '$1 d',
'seconds' => '{{PLURAL:$1|$1 秒}}',
'minutes' => '{{PLURAL:$1|$1 分}}',
'hours' => '{{PLURAL:$1|$1 時間}}',
'watchlistedit-raw-titles' => 'ページ名:',
'watchlistedit-raw-submit' => 'ウォッチリストを更新',
'watchlistedit-raw-done' => 'ウォッチリストを更新しました。',
-'watchlistedit-raw-added' => '{{PLURAL:$1|$1 件のページ}}を追加しました:',
-'watchlistedit-raw-removed' => '{{PLURAL:$1|$1 件のページ}}を除去しました:',
+'watchlistedit-raw-added' => '{{PLURAL:$1|$1 ページ}}を追加しました:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|$1 ページ}}を除去しました:',
# Watchlist editing tools
'watchlisttools-view' => '関連する変更を閲覧',
'qbbrowse' => 'Brouz',
'qbedit' => 'Edit',
'qbpageoptions' => 'Dis piej',
-'qbpageinfo' => 'Kantex',
'qbmyoptions' => 'Mi piejdem',
'qbspecialpages' => 'Peshal piejdem',
'faq' => 'FAK',
'qbbrowse' => 'Gennemse',
'qbedit' => 'Redigær',
'qbpageoptions' => 'Endstellenger før side',
-'qbpageinfo' => "Informåsje side'm",
'qbmyoptions' => 'Miine endstellenger',
'qbspecialpages' => 'Sonst sider',
'faq' => 'VSF',
'vector-action-protect' => 'დაცვა',
'vector-action-undelete' => 'აღდგენა',
'vector-action-unprotect' => 'დაცვის დონის შეცვლა',
-'vector-simplesearch-preference' => 'á\83«á\83\94á\83\91á\83\9cá\83\98á\83¡ á\83\92á\83\90á\83¤á\83\90á\83 á\83\97á\83\9dá\83\94á\83\91á\83£á\83\9aá\83\98 á\83\9bá\83\98á\83\9cá\83\98á\83¨á\83\9cá\83\94á\83\91á\83\94á\83\91ის ჩართვა (მხოლოდ ვექტორული იერსახისთვის)',
+'vector-simplesearch-preference' => 'á\83«á\83\94á\83\91á\83\9cá\83\98á\83¡ á\83\92á\83\90á\83¤á\83\90á\83 á\83\97á\83\9dá\83\94á\83\91á\83£á\83\9aá\83\98 á\83\95á\83\94á\83\9aის ჩართვა (მხოლოდ ვექტორული იერსახისთვის)',
'vector-view-create' => 'შექმნა',
'vector-view-edit' => 'რედაქტირება',
'vector-view-history' => 'ისტორია',
'edit-already-exists' => 'ახალი გვერდის შექმნა არ მოხერხდა.
ის უკვე არსებობს.',
'defaultmessagetext' => 'შეტყობინების სტანდარტული ტექსტი',
+'content-failed-to-parse' => '$2-ის შინაარსი არ შეესაბამება $1-ის ტიპს: $3.',
+'invalid-content-data' => 'დაუშვებელი მონაცემები',
+'content-not-allowed-here' => '„$1“-ის შინაარსი დაუშვებელია [[$2]] გვერდზე',
# Content models
'content-model-wikitext' => 'ვიკიტექსტი',
'shared-repo-from' => ' $1-დან',
'shared-repo' => 'საერთო საცავიდან',
'shared-repo-name-wikimediacommons' => 'ვიკისაწყობი',
-'upload-disallowed-here' => 'á\83¡á\83\90á\83\9bá\83¬á\83£á\83®á\83\90á\83 á\83\9dá\83\93, á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\90á\83 á\83¨á\83\94á\83\92á\83\98á\83«á\83\9aá\83\98á\83\90á\83\97 á\83\90á\83\9b á\83¡á\83£á\83 á\83\90á\83\97ზე გადაწერა.',
+'upload-disallowed-here' => 'á\83\97á\83¥á\83\95á\83\94á\83\9c á\83\90á\83 á\83¨á\83\94á\83\92á\83\98á\83«á\83\9aá\83\98á\83\90á\83\97 á\83\90á\83\9b á\83¤á\83\90á\83\98á\83\9aზე გადაწერა.',
# File reversion
'filerevert' => 'დააბრუნე $1',
'immobile-target-namespace-iw' => 'ინტერვიკის ბმული შეუძლებელია გამოყენებული იქნას გადარქმევისთვის.',
'immobile-source-page' => 'ამ გვეერდის გადატანა შეუძლებელია.',
'immobile-target-page' => 'შეუძლებელია მოცემულ სახელზე გადატანა.',
+'bad-target-model' => 'შეუძლებელია $1-ის გარდაქმნა $2-ზე: მონაცემების შეუსაბამო მოდელი.',
'imagenocrossnamespace' => 'შეუძლებელია ფაილს მიეცეს სახელი სახელთა სხვა სივრციდან',
'nonfile-cannot-move-to-file' => 'შეუძლებელია არაფაილების გადატანა ფაილის სახელთა სივრცეში',
'imagetypemismatch' => 'ფაილს ახალი გაფართოება არ შეესაბამება მის ტიპს',
# Info page
'pageinfo-title' => 'ინფორმაცია „$1“-თვის',
+'pageinfo-not-current' => 'მონაცემები წარმოდგენილია მხოლოდ მიმდინარე რედაქტირებისათვის.',
'pageinfo-header-basic' => 'საბაზისო ინფორმაცია',
'pageinfo-header-edits' => 'რედაქტირების ისტორია',
'pageinfo-header-restrictions' => 'გვერდის დაცვა',
# Scary transclusion
'scarytranscludedisabled' => '[«Interwiki transcluding» გათიშულია]',
'scarytranscludefailed' => '[$1-თან დაკავშირების შეცდომა]',
+'scarytranscludefailed-httpstatus' => '[ვერ მოხერხდა თარგის ჩატვირთვა $1-თვის: HTTP $2]',
'scarytranscludetoolong' => '[URL ძალიან გრძელია]',
# Delete conflict
'qbbrowse' => "Ko'riw",
'qbedit' => "O'zgertiw",
'qbpageoptions' => 'Usı bet',
-'qbpageinfo' => 'Kontekst',
'qbmyoptions' => "Menin' betlerim",
'qbspecialpages' => 'Arnawlı betler',
'faq' => 'KBS',
'edit-already-exists' => 'Asebter amaynut ur d yesnufu ara.
Yella yakan.',
'defaultmessagetext' => 'Izen s lexṣas',
+'content-failed-to-parse' => 'Tasleṭ n ugbur n $2 i talɣa $1 texseṛ : $3',
+'invalid-content-data' => 'Isefka n ugbur ur ɣbelen ara',
+'content-not-allowed-here' => 'Agbur "$1" ur yesɛa ara turagt ɣef usebter [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikiaḍris',
+'content-model-text' => 'aḍris afraray',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Ɣur-wet :''' Asebter agi yesɛa aṭas n tiɣriwin ar tiseɣnin ɣlayen n umsisleḍ taseddast.
'prefs-labs' => 'Tiseɣnin « labs »',
'prefs-user-pages' => 'Isebtar n useqdac',
'prefs-personal' => 'Profile n wemseqdac',
-'prefs-rc' => 'Ibeddlen imaynuten',
+'prefs-rc' => 'Ibeddilen imaynuten',
'prefs-watchlist' => 'Umuɣ n uɛessi',
'prefs-watchlist-days' => 'Amḍan n ussan i ubeqqeḍ deg umuɣ n uɛassi :',
'prefs-watchlist-days-max' => 'Afellay $1 {{PLURAL:$1|ass|ussan}}',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|Abeddel|Ibeddlen}}',
-'recentchanges' => 'Ibeddlen imaynuten',
+'recentchanges' => 'Ibeddilen imaynuten',
'recentchanges-legend' => 'Tifranin n ibeddilen imaynuten',
'recentchanges-summary' => 'Ḍfer ibeddilen imaynuten n {{SITENAME}}.',
'recentchanges-feed-description' => 'Ḍfer ibeddilen imaynuten n wiki-yagi deg usuddem-agi.',
'upload_directory_missing' => 'Akaram n taktert n ufaylu ($1) ulac-it dɣa ur d-yesnulfa ara sɣur aqeddac web.',
'upload_directory_read_only' => 'Weserver/serveur Web ur yezmir ara ad yaru deg ($1).',
'uploaderror' => 'Agul deg usekcam',
+'upload-recreate-warning' => "'''Ɣur-wet : Afaylu s isem agi yetwekkes naɣ yetembiwel.'''
+Aɣmis n tukksiwin d win n ittembiwilen n usebter agi beqqeḍen d-agi i tilɣa :",
'uploadtext' => "Sseqdec tiferkit agi iwakken ad ktereḍ ifuyla ɣef uqeddac.
Iwakken ad ẓṛeḍ naɣ ad nadiḍ tugniwin i ktren uqbel, ẓeṛ [[Special:FileList|umuɣ n tugniwin]]. Taktert tella daɣen deg [[Special:Log/upload|aɣmis n taktert n ifuyla]], dɣa inuzal deg [[Special:Log/delete|aɣmis n inuzal]].
'filetype-mime-mismatch' => 'Asiɣzef n ufaylu « .$1 » ur yesɛa ara tuqqna s tawsit MIME id n-ufa deg ufaylu ($2).',
'filetype-badmime' => 'Ur tettalaseḍ ara ad tazneḍ ufayluwen n anaw n MIME "$1".',
'filetype-bad-ie-mime' => 'Afaylu ur yezmer ara ad yetwekter acku yetwaf am « $1 » sɣur Internet Explorer. Tawsit agi d tazanbagt acku d tamihawt.',
+'filetype-unwanted-type' => "'''« .$1 »''' d amasal n ufaylu azanbag.
+Ilaq ad seqdeceḍ {{PLURAL:$3|amasal|imusal}} $2.",
+'filetype-banned-type' => "''' « .$1 » '''mačči d {{PLURAL:$4|amasal yesɛan turagt|imusal yesɛan turagt}}.
+{{PLURAL:$3|Amasal yesɛan turagt d-wagi :|Imusal yesɛan turagt d-wigi :}} $2.",
'filetype-missing' => 'Afaylu ur yesɛi ara taseggiwit (am ".jpg").',
'empty-file' => 'Afaylu id cegɛeḍ d-ilem.',
'file-too-large' => 'Afaylu id cegɛed d-ameqqṛan aṭas.',
'windows-nonascii-filename' => 'Wiki agi ur yebra ara isemawen n ifuyla s isekkilen usligen.',
'fileexists' => 'Afaylu s yisem-agi yewǧed yagi, ssenqed <strong>[[:$1]]</strong> ma telliḍ mačči meḍmun akken a t-tbeddleḍ.
[[$1|thumb]]',
+'filepageexists' => 'Asebter n uglam i ufaylu agi yesnulfad yakan d-agi <strong>[[:$1]]</strong>, maca ulac asebter s isem agi.
+Agzul ad efkeḍ tura ur d yettban ara ɣef asebter n uglam.
+Ma tebɣiḍ ad yeban, ilaq ad beddeleḍ s awfus asebter. [[$1|thumb]]',
'fileexists-extension' => 'Afaylu s yisem yecban wagi yella : [[$2|thumb]]
* Isem n ufaylu i tezneḍ: <strong>[[:$1]]</strong>
* Isem n ufaylu i yellan: <strong>[[:$2]]</strong>
Ma tebɣiḍ ad azeneḍ afaylu inek/inem, ilaq ad uɣaleḍ ar deffir dɣa ad as efkeḍ isem amaynut.
[[File:$1|thumb|center|$1]]',
'file-exists-duplicate' => 'Afaylu agi d-asleg n {{PLURAL:$1|ufaylu agi|ifuyla agi}} :',
+'file-deleted-duplicate' => 'Afaylu am wagi ([[:$1]]) yetwekkes yakan. Ilaq ad selkeneḍ aɣmis n tukksiwin n ufaylu agi uqbel atid ktereḍ tikkelt nniḍen.',
'uploadwarning' => 'Aɣtal deg wazan n ufayluwen',
'uploadwarning-text' => 'Beddel aglam n ufaylu dɣa ɛreḍ tikkelt nniḍen',
'savefile' => 'Smekti afaylu',
'upload-options' => 'Tixtiṛiyin n taktert ifuyla',
'watchthisupload' => 'Ɛass asebter agi',
'filewasdeleted' => 'Afaylu s yisem-agi yettwazen umbeɛd yettumḥa. Ssenqed $1 qbel ad tazniḍ tikelt nniḍen.',
+'filename-bad-prefix' => "Isem n ufaylu yezwer s '''« $1 »''', wagi d isem i sedgeren s uwurman sɣur timsakenwin tumḍinin.
+Xteṛ isem n ufaylu agelmaw.",
'upload-success-subj' => 'Azen yekfa',
'upload-success-msg' => 'Taktert inek/inem seg [$2] yesmures. Af-it d-agi : [[:{{ns:file}}:$1]]',
'upload-failure-subj' => 'Ugur n taktert',
'lockmanager-fail-svr-release' => 'Ulamek an bru izekṛunen ɣef uqeddac $1.',
# ZipDirectoryReader
+'zip-file-open-error' => 'Yella agul mi d neldi afaylu i senqeden ifuyla zip.',
'zip-wrong-format' => 'Afaylu agi mačči d afaylu n weɣbaṛ ZIP.',
+'zip-bad' => 'Afaylu agi d afaylu n weɣbaṛ ameggafsu naɣ ur nezmer ara an ɣaṛ deg-es.
+Ur nezmer ara aten selken i taɣellist.',
+'zip-unsupported' => 'Afaylu agi d afaylu n weɣbaṛ i seqdacen tiɣariwin ur yeḥemmel ara MediaWiki.
+Taɣellist ines ur tezmer ara at illi teseklen.',
# Special:UploadStash
'uploadstash' => 'Tazarkatut n taktert',
+'uploadstash-summary' => 'Asebter agi yetefk addaf i ifuyla yekteren (naɣ yesɛan taktert tanazzalt), maca mazal i beqqeḍen deg wiki. Ifuyla agi mazal id banen, ḥaca i useqdac i tni kteren.',
'uploadstash-clear' => 'Sfeḍ ifuyla deg tazarkatut',
'uploadstash-nofiles' => 'Ur tesɛiḍ ara ifuyla deg tazarkatut n taktert',
+'uploadstash-badtoken' => 'Aselkem n tigawt agi yexseṛ, ahat acku tilɣa inek/inem n usulu gweḍent ar tasewti nsent. Ɛreḍ tikkelt nniḍen.',
'uploadstash-errclear' => 'Asfeḍ n ifuyla yefkad taruẓi',
'uploadstash-refresh' => 'Mucceḍ umuɣ n ifuyla',
'invalid-chunk-offset' => 'Tiggit n iɣil ur teɣbel ara',
# img_auth script messages
'img-auth-accessdenied' => 'Addaf yugwi',
+'img-auth-nopathinfo' => 'Yexus BATH_INFU.
+Aqeddac inek/inem ur yeseɣwer ara iwakken ad i ɛeddi talɣut agi.
+Ahat i lḥu s CGI dɣa ur s-yezmer ara i img_auth.
+Ẓeṛ https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
'img-auth-notindir' => 'Abrid yesuteren mačči d akaram n taktert yellan deg tawila.',
'img-auth-badtitle' => 'Ulamek an ssali azwel i ɣbelen seg « $1 ».',
'img-auth-nologinnWL' => 'Ur teqqneḍ ara dɣa « $1 » ur yella ara deg umuɣ amellal.',
'img-auth-isdir' => 'Tɛerdeḍ ad ldiḍ akaram « $1 ».
Tzemreḍ kan ad ldiḍ ifuyla.',
'img-auth-streaming' => 'Taɣuri tamaɣlalt n « $1 ».',
+'img-auth-public' => 'Tasɣent n img_auth.php tella i ubeqqeḍ n ifuyla n yiwen wiki uslig.
+Wiki agi yesɣwer am wiki azayez.
+I taɣellist tameqqṛant, img_auth.php yensa.',
'img-auth-noread' => 'Aseqdac ur yesɛa ara azref deg taɣuri ɣef « $1 ».',
'img-auth-bad-query-string' => 'URL tesɛa azrar n tuttra ur i ɣbelen ara.',
'upload_source_file' => ' (afaylu deg uselkim inek)',
# Special:ListFiles
+'listfiles-summary' => 'Asebter agi uslig i εemmed ad yefk umu n akkw ifuyla i kteren.
+Ma aseqdac as yernu tastayt, ala ifuyla s lqem taneggarut id yekter aseqdac nni ad beqqeḍen.',
'listfiles_search_for' => 'Nadi ɣef yisem n tugna:',
'imgfile' => 'afaylu',
'listfiles' => 'Umuɣ n tugniwin',
'uploadnewversion-linktext' => 'tazneḍ tasiwelt tamaynut n ufaylu-yagi',
'shared-repo-from' => 'seg : $1',
'shared-repo' => 'azadur azduklan',
-'upload-disallowed-here' => 'Ur tzemreḍ ara ad semselsiḍ tugna agi.',
+'upload-disallowed-here' => 'Ur tzemreḍ ara ad semselsiḍ afaylu agi.',
# File reversion
'filerevert' => 'Erred $1',
# Random redirect
'randomredirect' => 'Asemmimeḍ menwala',
+'randomredirect-nopages' => 'Ulac asebter n alsanamad deg tallunt n isemawen « $1 ».',
# Statistics
'statistics' => 'Tisnaddanin',
'statistics-edits' => 'Ibeddilen n isebtar seg aserkeb n {{SITENAME}}',
'statistics-edits-average' => 'Amḍan allal n ibeddilen sɣur asebter',
'statistics-views-total' => 'Iskanen',
+'statistics-views-total-desc' => 'Timuɣliwin n isebtar ur llan ara dɣa d isebtar usligen ur sseddant ara',
+'statistics-views-peredit' => 'Tizra s ubeddel',
+'statistics-users' => '[[Special:ListUsers|Iseqdacen]] i siggezen',
+'statistics-users-active' => 'Iseqdacen urmiden',
+'statistics-users-active-desc' => 'Iseqdacen yesɛan xersum yiwet tigawt seg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}',
'statistics-mostpopular' => 'isebtar mmeẓren aṭṭas',
'disambiguations' => 'Isebtar yesɛan izdayen ɣer isebtar n tiynisemt',
'doubleredirects' => 'Asemmimeḍ yeḍra snat tikwal',
'doubleredirectstext' => 'Mkull ajerriḍ yesɛa azday ɣer asmimeḍ amezwaru akk d wis sin, ajerriḍ amezwaru n uḍris n usebter wis sin daɣen, iwumi yefkan asmimeḍ ṣaḥiḥ i yessefk ad sɛan isebtar azday ɣur-s.',
+'double-redirect-fixed-move' => 'Alsanamud agi, ɣef ayed asaḍas [[$1]] yetwebeddel isem, yetawi tura ɣer [[$2]].',
+'double-redirect-fixed-maintenance' => 'Yetseɣtu alsanamud aslag seg [[$1]] ɣer [[$2]].',
+'double-redirect-fixer' => 'Aseɣtay n aslanamud',
'brokenredirects' => 'Isemmimḍen imerẓa',
'brokenredirectstext' => 'Isemmimḍen-agi sɛan izdayen ar isebtar ulac-iten :',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|byte/octet|bytes/octets}}',
'ncategories' => '$1 {{PLURAL:$1|Taggayt|Taggayin}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikis}}',
'nlinks' => '$1 {{PLURAL:$1|azday|izdayen}}',
'nmembers' => '$1 {{PLURAL:$1|amaslad|imasladen}}',
'nrevisions' => '$1 {{PLURAL:$1|tasiwelt|tisiwal}}',
'nviews' => '$1 {{PLURAL:$1|timeẓriwt|tuẓrin}}',
+'nimagelinks' => 'Yetseqdec ɣef $1 {{PLURAL:$1|asebter|isebtar}}',
+'ntransclusions' => 'yetseqdec ɣef $1 {{PLURAL:$1|asebter|isebtar}}',
'specialpage-empty' => 'Asebter-agi d ilem.',
'lonelypages' => 'isebtar igujilen',
'lonelypagestext' => 'Isebtar agi ur sweṛen, ur llan deg isebtar nniḍen n {{SITENAME}}.',
'popularpages' => 'Isebtar iɣerfanen',
'wantedcategories' => 'Taggayin mmebɣant',
'wantedpages' => 'Isebtar mmebɣan',
+'wantedpages-badtitle' => 'Azwel ur yeɣbel ara deg igmad : $1',
'wantedfiles' => 'Ifuyla yettwasutren s waṭas.',
+'wantedfiletext-cat' => 'Ifuyla agi tseqdacen, maca ulac iten. Ifuyla n izudar agwemmad zemren ad illin deg umuɣ xas llan. Akkw ufrir imkerku ad <del>yetjerreḍ</del>. Isebtar yesɛan ifuyla ur llan ara, ur d-tebanen ara deg [[:$1]].',
+'wantedfiletext-nocat' => 'Ifuyla agi tseqdacen, maca ulac iten. Ifuyla n izudar agwemmad zemren ad illin deg umuɣ xas llan. Akkw ufrir imkerku ad <del>yetjerreḍ</del>.',
'wantedtemplates' => 'Talɣiwin yetsuteren',
'mostlinked' => 'Isebtar myezdin aṭas',
'mostlinkedcategories' => 'Taggayin myezdint aṭas',
'allpages-hide-redirects' => 'Ffer isemmimḍen',
# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Tetwaliḍ lqem n usebter agi yellan deg tazarkatut, lqem agi yezmer ad i sɛu alama d $1.',
+'cachedspecial-viewing-cached-ts' => 'Tetwaliḍ lqem n usebter agi yellan deg tazarkatut, ahat ur yemucceḍ ara.',
'cachedspecial-refresh-now' => 'Ẓeṛ aneggaru.',
# Special:Categories
Ẓeṛ daɣen [[Special:WantedCategories|taggayin yetwesuteren]].',
'categoriesfrom' => 'Ssken taggayin seg :',
'special-categories-sort-count' => 'Afran s amḍan n iferdisen',
-'special-categories-sort-abc' => 'Afran s ugemmay',
+'special-categories-sort-abc' => 'afran s ugemmay',
# Special:DeletedContributions
'deletedcontributions' => 'Isekcam yemḥan',
'linksearch-pat' => 'Anadi n tanfalit :',
'linksearch-ns' => 'Talluntin n isemawen :',
'linksearch-ok' => 'Nadi',
+'linksearch-text' => 'Tzemreḍ ad seqdeceḍ isekkilen imeẓliyen am « *.wikipedia.org ».
+Ilaq-asen deg udday taɣult n uswir imineg, am amedya « *.org ».<br />
+Ineggafen imazdayen : <code>$1</code> (ur d-renu acemma deg unadi inek/inem)',
'linksearch-line' => '$1 yeqqen seg $2',
+'linksearch-error' => 'Tzemreḍ ad seqdeceḍ isekkilen usligen ala deg tazzwara n taɣult uselkim.',
# Special:ListUsers
'listusersfrom' => 'Ssken imseqdacen seg:',
'listusers-submit' => 'Ssken',
'listusers-noresult' => 'Ur yufi ḥedd (amseqdac).',
+'listusers-blocked' => '(yekyef)',
# Special:ActiveUsers
+'activeusers' => 'Umuɣ n iseqdacen urmiden',
+'activeusers-intro' => 'Wagi d umuɣ n iseqdacen yexedmen armud deg {{PLURAL:$1|ass agi aneggaru|$1 ussan agi ineggura}}.',
+'activeusers-count' => '$1 {{PLURAL:$1|abeddel n ussan agi ineggura|ibeddilen n ussan agi ineggura}} deg {{PLURAL:$3|ass aneggaru|$3 ussan ineggura}}',
'activeusers-from' => 'Ssken iseqdacen seg :',
+'activeusers-hidebots' => 'Ffer iṛubuten',
+'activeusers-hidesysops' => 'Ffer inedbalen',
'activeusers-noresult' => 'Ur yufi aseqdac.',
# Special:Log/newusers
'newuserlogpage' => 'Aɣmis n isnulfan n imiḍanen n imseqdacen',
+'newuserlogpagetext' => 'Asebter agi yebeqqeḍ amezruy n usnulfu n imiḍanen n iseqdacen.',
# Special:ListGroupRights
+'listgrouprights' => 'Izerfan n igrawen n iseqdacen',
+'listgrouprights-summary' => 'Asebter agi yesɛa yiwen umuɣ n igrawen i sengelen deg wiki agi dɣa izerfan n wadduf i qqenen.
+Zemrent ad ilint [[{{MediaWiki:Listgrouprights-helppage}}|tilɣa nniḍen]] ɣef izerfan n yiwen.',
+'listgrouprights-key' => '*<span class="listgrouprights-granted">Izerfan sefkan</span>
+*<span class="listgrouprights-revoked">Izerfan ekkesen</span>',
'listgrouprights-group' => 'Agraw',
'listgrouprights-rights' => 'Izerfan',
'listgrouprights-helppage' => 'Help:Izerfan n igrawen',
'unwatch' => 'Fakk aɛassi',
'unwatchthispage' => 'Fakk aɛassi',
'notanarticle' => 'Mačči d amagrad',
+'notvisiblerev' => 'Lqem tetwemḥa',
'watchnochange' => 'Ulaḥedd n yiferdas n wumuɣ n uɛessi inek ma yettubeddel deg tawala i textareḍ.',
'watchlist-details' => 'ttɛassaɣ {{PLURAL:$1|$1 usebter|$1 n isebtaren}} mebla isebtaren "amyannan".',
'wlheader-enotif' => '* Yeǧǧa Email n talɣut.',
# Displayed when you click the "watch" button and it is in the process of watching
'watching' => 'Ad iɛass...',
'unwatching' => 'Ad ifukk aɛessi...',
+'watcherrortext' => 'Yella anezri imi tebeddeleḍ iɣewwaren n umuɣ inek/inem n uɛassi i « $1 ».',
'enotif_mailer' => 'Email n talɣut n {{SITENAME}}',
'enotif_reset' => 'Rcem akk isebtar mmeẓren',
'enotif_subject' => 'Asebter $PAGETITLE n {{SITENAME}} $CHANGEDORCREATED sɣur $PAGEEDITOR',
'enotif_lastvisited' => 'Ẓer $1 i akk ibeddlen segwasmi tkecmeḍ tikelt taneggarut.',
'enotif_lastdiff' => 'Ẓer $1 akken ad tmuqleḍ abeddel.',
+'enotif_anon_editor' => 'aseqdac ur i siggezen ara $1',
'enotif_body' => 'Ay $WATCHINGUSERNAME,
Asebter « $PAGETITLE » n {{SITENAME}} $CHANGEDORCREATED ass n $PAGEEDITDATE sɣur « $PAGEEDITOR », ẓeṛ $PAGETITLE_URL iwakken ad ẓṛeḍ lqem n tura.
'delete-confirm' => 'Kkes "$1"',
'delete-legend' => 'Ekkes',
'historywarning' => 'Ɣur-wet : Asebter i ara temḥuḍ yesɛa amezruy s azal alemmas n $1 {{PLURAL:$1|lqem|ileqman}} :',
+'confirmdeletetext' => 'Aqlak ad mḥuḍ asebter naɣ afaylu, dɣa akkw ileqman-is iqdimen. Ilaq ad segegeḍ tigawt agi dɣa tfehemeḍ [[{{MediaWiki:Policy-url}}|ilugan n wiki]].',
'actioncomplete' => 'Axdam yekfa',
'actionfailed' => 'Tigawt agi texser',
'deletedtext' => '"$1" yettumḥa.
'deletecomment' => 'Ayɣer',
'deleteotherreason' => 'Taɣẓint nniḍen / taɣzint tamarnant :',
'deletereasonotherlist' => 'Taɣẓint nniḍen',
+'deletereason-dropdown' => '* Tiɣẓinin n umḥu id t-uɣalen aṭas tikkwal
+** Asuter n useqdac
+** Akukel n izerfan umeskar
+** Asfata',
'delete-edit-reasonlist' => 'Beddel tiɣẓinin n umḥu n usebter',
+'delete-toobig' => 'Asebter agi yesɛa amezruy ameqqṛan aṭas n ibeddilen, yugar $1 {{PLURAL:$1|lqem|ileqman}}.
+Amḥu n isebtar am wagi yesɛa akref iwakken {{SITENAME}} ur yesɛu ara arway.',
# Rollback
+'rollback' => 'Semmet ibeddilen',
'rollback_short' => 'Semmet',
'rollbacklink' => 'semmet',
'rollbacklinkcount' => 'semmet $1 {{PLURAL:$1|abeddel|ibeddilen}}',
+'rollbacklinkcount-morethan' => 'semmet ugar n $1 {{PLURAL:$1|abeddel|ibeddilen}}',
+'rollbackfailed' => 'Asemmet yexseṛ',
'cantrollback' => 'Ur yezmir ara ad yessuɣal; yella yiwen kan amseqdac iwumi ibeddel/yexleq asebter-agi.',
'editcomment' => "Agzul n ubeddel yella: \"''\$1''\".",
'revertpage' => 'Yessuɣal ibeddlen n [[Special:Contributions/$2|$2]] ([[User talk:$2|Meslay]]); yettubeddel ɣer tasiwelt taneggarut n [[User:$1|$1]]',
# Edit tokens
+'sessionfailure-title' => 'Anezri n tɣimit',
'sessionfailure' => 'Yella ugul akk d takmect inek;
Axdam-agi yebṭel axaṭer waqila yella wemdan nniḍen i yeddem isem n wemseqdac inek.
G leɛnayek wekki ɣef taqeffalt "Back/Précédent" n browser/explorateur inek, umbeɛd wekki ɣef "Actualiser/reload" akk ad tɛerḍeḍ tikelt nniḍen.',
# Protect
'protectlogpage' => 'Aɣmis n wemḥay',
'protectedarticle' => '"[[$1]]" yettwaḥrez',
-'protect-title' => 'Ad yeḥrez "$1"',
+'modifiedarticleprotection' => 'yebeddel aswir n usegdel n « [[$1]] »',
+'unprotectedarticle' => 'yekkes asegdel n « [[$1]] »',
+'movedarticleprotection' => 'yesiweḍ iɣewwaren n usegdel seg « [[$2]] » ɣer « [[$1]] »',
+'protect-title' => 'Beddel aswir n usegdel i "$1"',
+'protect-title-notallowed' => 'Ẓeṛ aswir n usegdel n « $1 »',
'prot_1movedto2' => '[[$1]] yettusmimeḍ ar [[$2]]',
+'protect-badnamespace-title' => 'Tallunt n isemawen ur nezmer ara an segdel',
+'protect-badnamespace-text' => 'Isebtar deg tallunt agi n isemawen ur zemren ara ad sɛun asegdel.',
'protect-legend' => 'Sentem tiḥḥerzi',
'protectcomment' => 'Taɣẓint :',
+'protectexpiry' => 'Azmez n tasewti :',
+'protect_expiry_invalid' => 'Azmez n tasewti ur yeɣbel ara.',
+'protect_expiry_old' => 'Azmez n tasewti i ɛedda.',
+'protect-unchain-permissions' => 'Kkes aseḍru i aṭas n tixtiṛiyin n usegdel',
'protect-default' => '(ameslugen)',
+'protect-fallback' => 'Yeḥweǧ atrug « $1 »',
'protect-level-sysop' => 'Inedbalen kan',
'protect-summary-cascade' => 'acercur',
'protect-expiring' => 'yemmut deg $1 (UTC)',
+'protect-expiring-local' => 'ad i neffeṛ ass n $1',
+'protect-expiry-indefinite' => 'ifeḍ',
+'protect-othertime' => 'Azmez nniḍen n tasewti :',
+'protect-othertime-op' => 'azmez nniḍen n tasewti',
+'protect-existing-expiry' => 'Yella azmez n tasewti : $2 af $3',
'protect-otherreason' => 'Taɣẓint nniḍen / taɣzint tamarnant :',
'protect-otherreason-op' => 'Taɣẓint nniḍen',
'protect-edit-reasonlist' => 'Beddel tiɣẓinin n usegdel',
'protect-expiry-options' => '1 asrag:1 hour,1 ass:1 day,1 imalas:1 week,2 imalasen:2 weeks,1 aggur:1 month,3 agguren:3 months,6 agguren:6 months,1 assegwas:1 year,adfi:infinite',
'restriction-type' => 'Turagt',
+'restriction-level' => 'Aswir n ukrif :',
'minimum-size' => 'Tiddi minimum',
+'maximum-size' => 'Tiddi tafellayt',
+'pagesize' => '(atamḍan)',
# Restrictions (nouns)
'restriction-edit' => 'Beddel',
'restriction-move' => 'Smimeḍ',
'restriction-create' => 'Snulfu',
+'restriction-upload' => 'Taktert n ifuyla',
# Restriction levels
+'restriction-level-sysop' => 'asegdel ummid',
'restriction-level-autoconfirmed' => 'adu-asegdel',
+'restriction-level-all' => 'akkw aswir',
# Undelete
'undelete' => 'Ẓer isebtar yettumḥan',
'undeletepagetitle' => "'''Umuɣ agi yesɛa ileqman yetwekkesen n [[:$1|$1]]'''.",
'viewdeletedpage' => 'Ẓer isebtar yettumḥan',
'undelete-fieldset-title' => 'Erred ileqman',
+'undeleterevisions' => '$1 {{PLURAL:$1|lqem i ɣbeṛen|ileqman i ɣbeṛen}}',
'undeletelink' => 'ẓeṛ/uɣaled',
'undeleteviewlink' => 'ẓeṛ',
+'undeleteinvert' => 'Snegdam ayen textareḍ',
'undeletecomment' => 'Taɣẓint :',
'undelete-header' => 'Ẓer [[Special:Log/delete|aɣmis n umḥay]] i isebtar ttumḥan tura.',
+'undelete-search-title' => 'Nadi ɣef isebtar yettumḥan',
'undelete-search-box' => 'Nadi ɣef isebtar yettumḥan',
'undelete-search-prefix' => 'Ssken isebtar i yebdan s:',
'undelete-search-submit' => 'Nadi',
'undelete-no-results' => 'Ur yufi ara ulaḥedd n wawalen i tnadiḍ ɣef isebtar deg iɣbaren.',
+'undelete-show-file-confirm' => 'Tebɣriḍ ad ẓṛeḍ lqem yemḥan n ufaylu « <nowiki>$1</nowiki> » n $2 af $3 ?',
+'undelete-show-file-submit' => 'Ih',
# Namespace form on various pages
'namespace' => 'Talluntin n isemawen :',
'sp-contributions-newbies' => 'Ssken tikkin n yimseqdacen imaynuten kan',
'sp-contributions-newbies-sub' => 'I yisem yimseqdacen imaynuten',
'sp-contributions-blocklog' => 'Aɣmis n uɛeṭṭil',
+'sp-contributions-deleted' => 'isekcam yemḥan',
'sp-contributions-uploads' => 'izdamen',
'sp-contributions-logs' => 'iɣmisen',
'sp-contributions-talk' => 'Mmeslay',
'sp-contributions-userrights' => 'Laɛej iserfan n umseqdac',
+'sp-contributions-blocked-notice' => 'Aseqdac agi yekyef.
+Asekcem aneggaru n useklas n ikyafen yella ddaw agi :',
+'sp-contributions-blocked-notice-anon' => 'Tansa IP agi tekyef.
+Asekcem aneggaru n useklas n ikyafen yella ddaw agi :',
'sp-contributions-search' => 'Nadi i tikkin',
'sp-contributions-username' => 'Tansa IP neɣ isem n wemseqdac:',
'sp-contributions-toponly' => 'Sekned kan imagraden i beddeleɣ nekk d-aneggaru',
'whatlinkshere-filters' => 'Tistaytin',
# Block/unblock
-'blockip' => 'Ɛekkel amseqdac',
+'block' => 'Ɛekkel aseqdac',
+'blockip' => 'Ɛekkel aseqdac',
+'blockip-title' => 'Ɛekkel aseqdac',
+'blockip-legend' => 'Ɛekkel aseqdac',
'ipadressorusername' => 'Tansa IP neɣ isem n wemseqdac',
'ipbreason' => 'Ayɣer',
'ipbsubmit' => 'Ɛekkel amseqdac-agi',
'export-submit' => 'Ssufeɣ',
'export-addcattext' => 'Rnu isebtar seg taggayt:',
'export-addcat' => 'Rnu',
+'export-addnstext' => 'Rnu isebtar deg tallunt n isemawen :',
+'export-addns' => 'Rnu',
+'export-download' => 'Ḥrez deg ufaylu',
+'export-templates' => 'Sekcem tiɣlatin',
# Namespace 8 related
'allmessages' => 'Izen n system',
'allmessagestext' => 'Wagi d-umuɣ n inzan yestufan deg tallunt MediaWiki.
Ẓeṛ [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] dɣa [//translatewiki.net translatewiki.net] ma tebɣiḍ ad ɛiweneḍ i usideg imcettel n MediaWiki.',
'allmessagesnotsupportedDB' => "'''{{ns:special}}:Allmessages''' ut yezmir ara ad yettuseqdac axaṭer '''\$wgUseDatabaseMessages''' yettwakkes.",
+'allmessages-filter-legend' => 'Tastayt',
+'allmessages-filter-unmodified' => 'Ur yebeqqeḍ ara',
+'allmessages-filter-all' => 'Akkw',
+'allmessages-filter-modified' => 'Yebeddel',
+'allmessages-prefix' => 'Tastayt s adat :',
'allmessages-language' => 'Tutlayt :',
'allmessages-filter-submit' => 'Ruḥ',
'thumbnail-more' => 'Ssemɣer',
'filemissing' => 'Afaylu ulac-it',
'thumbnail_error' => 'Agul asmi yexleq tugna tamecṭuḥt: $1',
+'djvu_page_error' => 'Asebter DjVu yeffeɣ seg tilisa',
# Special:Import
'import' => 'Ssekcem isebtar',
'pageinfo-views' => 'Amḍan n timuɣliwin',
'pageinfo-watchers' => 'Amḍan n imttekkiyen yesɛan asebter agi deg umuɣ nsen n uɛassi',
'pageinfo-subpages-name' => 'Adu-isebtar n usebter agi',
+'pageinfo-contentpage-yes' => 'Ih',
+'pageinfo-protect-cascading-yes' => 'Ih',
# Patrolling
'markaspatrolleddiff' => 'Rcem "yettwassenqden"',
# Special:Version
'version' => 'Lqem',
'version-specialpages' => 'isebtar usligen',
+'version-software' => 'Iseɣẓanen i serkeben',
+'version-software-product' => 'Afaris',
+'version-software-version' => 'Lqem',
+'version-entrypoints' => 'Tansa URL n irden n wekcam',
+'version-entrypoints-header-entrypoint' => 'Ired n wekcam',
+'version-entrypoints-header-url' => 'Tansa URL',
+
+# Special:FilePath
+'filepath' => 'Abrid n wadduf ufaylu',
+'filepath-page' => 'Afaylu :',
+'filepath-submit' => 'Ruḥ',
# Special:SpecialPages
'specialpages' => 'isebtar usligen',
'qbbrowse' => 'Хэплъэн',
'qbedit' => 'Гъэтэрэзын',
'qbpageoptions' => 'НапэкӀуэцӀым и зэгъэзэхуэгъуэр',
-'qbpageinfo' => 'НапэкIуэцIым теухуауэ',
'qbmyoptions' => 'Уи зэгъэзэхуэгъуэхэр',
'qbspecialpages' => 'Специал напэкӀуэцӀхэр',
'faq' => 'FAQ',
'qbbrowse' => 'Browse/تصفّح',
'qbedit' => 'ترمیم',
'qbpageoptions' => 'ھیہ صفحہ',
-'qbpageinfo' => 'مفہوم',
'qbmyoptions' => 'مہ صفحات',
'qbspecialpages' => 'خاص صفحات',
'faq' => 'عام معلومات',
$messages = array(
# User preference toggles
-'tog-underline' => 'Bınê girey de xete bonce:',
+'tog-underline' => 'Bınê girey de xete bıonce:',
'tog-justify' => 'Paragrafu ayar ke',
-'tog-hideminor' => 'Vurnaisunê senıku pela vurnaisunê peyênu de wedare',
-'tog-hidepatrolled' => 'Vurnaisunê qontrolkerdu pela vurnaisê peyêni de wedare',
+'tog-hideminor' => 'Vurnayisunê senıku pela vurnayisunê peyênu de wedare',
+'tog-hidepatrolled' => 'Vurnayisunê qontrolkerdu pela vurnayisê peyêni de wedare',
'tog-newpageshidepatrolled' => 'Pelunê qontrolkerdu lista pelunê newu de wedare',
-'tog-extendwatchlist' => 'Lista şêrkerdene hira bıke ke vurnaişi pêro basê, teyna tewr peyêni nê',
-'tog-usenewrc' => 'Vurnaisunê peyênunê hirakerdiu bıgurene (JavaScript lazımo)',
+'tog-extendwatchlist' => 'Lista şêrkerdene hira bıke ke vurnayişi pêro bıasê, teyna tewr peyêni nê',
+'tog-usenewrc' => 'Pele be vurnayisunê grube de vurnayisê peyêni u lista şêrkerdişi (JavaScript lazımo)',
'tog-numberheadings' => 'Sernustu be ho numra cı sane',
-'tog-showtoolbar' => 'Gozagunê hacetunê vurnaişi basne (JavaScript lazımo)',
-'tog-editondblclick' => 'Pê dı rey teqnaene pele sero bıguriye (JavaScript lazımo)',
-'tog-editsection' => 'Vurnaena qısımi ebe gireunê [bıvurne] ra feal ke',
-'tog-editsectiononrightclick' => 'Qısımu be teqnaena serrêze ra ebe gozaga raste bıvurne (JavaScript lazımo)',
-'tog-showtoc' => 'Tabloê tedeesteu basne (de pelunê be hirê sernustu ra jêdêri de)',
-'tog-rememberpassword' => 'Parola mı nê cıcêraoği de bia ho viri (serba tewr jêde $1 {{PLURAL:$1|roze|rozu}}).',
+'tog-showtoolbar' => 'Gozagunê hacetunê vurnayişi bıasne (JavaScript lazımo)',
+'tog-editondblclick' => 'Pê dı rey teqnayene pele sero bıguriye (JavaScript lazımo)',
+'tog-editsection' => 'Vurnayena qısımi ebe gireyunê [bıvurne] ra feal ke',
+'tog-editsectiononrightclick' => 'Qısımu be teqnayena serrêze ra ebe gozaga raste bıvurne (JavaScript lazımo)',
+'tog-showtoc' => 'Tablowê tedeestewu bıasne (de pelunê be hirê sernustu ra jêdêri de)',
+'tog-rememberpassword' => 'Parola mı nê cıcêrawoği de bia ho viri (serba tewr jêde $1 {{PLURAL:$1|roze|rozu}}).',
'tog-watchcreations' => 'Pelê ke mı afernê u dosyê ke mı bar kerdê lista mına şêrkerdişi ke',
'tog-watchdefault' => 'Pel u dosyê ke mı vurnê lista mına şêrkerdişi ke',
'tog-watchmoves' => 'Pel u dosyê ke mı kırısnê lista mına şêrkerdişi ke',
'tog-watchdeletion' => 'Pel u dosyê ke mı esterıtê, lista mına şêrkerdişi ke',
-'tog-minordefault' => 'Vurnaisunê ho pêrune ‘vurnaiso qızkek’ nisan bıde',
-'tog-previewontop' => 'Verqayti pela nustene ser de basne',
-'tog-previewonfirst' => 'Vurnaiso verên de verqayti tım basne',
-'tog-nocache' => 'Pelunê cıcêraoği mia ho viri',
-'tog-enotifwatchlistpages' => 'Zu pele ya ki dosyawa ke lista mına şêrkerdişi de vurnê mı rê e-poste bırusne',
-'tog-enotifusertalkpages' => 'Pela mına hurênaişi ke vurnê mı rê e-poste bırusne',
-'tog-enotifminoredits' => 'Vurnaisunê qızkekunê pelun u dosyu de ki mı rê e-poste bırusne',
-'tog-enotifrevealaddr' => 'Adresa e-postê mı postê xeberu de basne',
-'tog-shownumberswatching' => 'Amorê karberunê şêrkerdoğu basne',
-'tog-oldsig' => 'Verqaytê imza mewcude:',
-'tog-fancysig' => 'İmza rê mamelê wikimeqaley bıke (bê gireo otomatik)',
-'tog-externaleditor' => 'Editorê teberi standart bıgurene (teyna serba ekspertuno, komputerê sıma de ayarê xısuşiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato jêdêr.])',
+'tog-minordefault' => 'Vurnayisunê ho pêrune ‘vurnayiso qızkek’ nisan bıde',
+'tog-previewontop' => 'Verqayti pela nustene ser de bıasne',
+'tog-previewonfirst' => 'Vurnayiso verên de verqayti tım bıasne',
+'tog-nocache' => 'Pelunê cıfeteliyawoği mia ho viri',
+'tog-enotifwatchlistpages' => 'Zû pele ya ki dosyawa ke lista mına şêrkerdişi de vurnê mı rê e-poste bırusne',
+'tog-enotifusertalkpages' => 'Pela mına hurênayişi ke vurnê mı rê e-poste bırusne',
+'tog-enotifminoredits' => 'Vurnayisunê qızkekunê pelun u dosyu de ki mı rê e-poste bırusne',
+'tog-enotifrevealaddr' => 'Adresa e-postê mı postê xeberu de bıasne',
+'tog-shownumberswatching' => 'Amorê karberunê şêrkerdoğu bıasne',
+'tog-oldsig' => 'İmza mewcude:',
+'tog-fancysig' => 'İmza rê mamelê wikimeqaley bıke (bê girewo otomatik)',
+'tog-externaleditor' => 'Editorê teberi standart bıgurene (teyna serba ekspertuno, komputerê sıma de ayarê xusışiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato jêdêr.])',
'tog-externaldiff' => 'Têversanaene pê programê teberi vıraze (teyna serba ekspertuno, komputerê sıma de ayarê xısuşiy lazımê. [//www.mediawiki.org/wiki/Manual:External_editors Melumato jêdêr.])',
'tog-showjumplinks' => 'Girê "so"y feal ke',
-'tog-uselivepreview' => 'Verqayto cınde bıgurene (JavaScript) (hona cerrebnaene dero)',
+'tog-uselivepreview' => 'Verqayto cande bıgurene (JavaScript) (hona cerrebnayene dero)',
'tog-forceeditsummary' => 'Mı ke xulasa kerde cı vira, hay be mı ser de',
-'tog-watchlisthideown' => 'Vurnaisunê mı lista mına şêrkerdişi de wedare',
-'tog-watchlisthidebots' => 'Vurnaisunê boti lista mına şêrkerdişi de wedare',
-'tog-watchlisthideminor' => 'Vurnaisunê qızkeku lista mına şêrkerdişi de wedare',
-'tog-watchlisthideliu' => 'Lista şêrkerdişi ra vurnaisunê karberunê cıkotu wedare',
-'tog-watchlisthideanons' => 'Lista şêrkerdişi ra vurnaisunê karberunê anonimu wedare',
-'tog-watchlisthidepatrolled' => 'Lista şêrkerdişi ra vurnaisunê qontrolkerdu wedare',
+'tog-watchlisthideown' => 'Vurnayisunê mı lista mına şêrkerdişi de wedare',
+'tog-watchlisthidebots' => 'Vurnayisunê boti lista mına şêrkerdişi de wedare',
+'tog-watchlisthideminor' => 'Vurnayisunê qızkeku lista mına şêrkerdişi de wedare',
+'tog-watchlisthideliu' => 'Lista şêrkerdişi ra vurnayisunê karberunê cıkotu wedare',
+'tog-watchlisthideanons' => 'Lista şêrkerdişi ra vurnayisunê karberunê anonimu wedare',
+'tog-watchlisthidepatrolled' => 'Lista şêrkerdişi ra vurnayisunê qontrolkerdu wedare',
'tog-ccmeonemails' => 'E-postunê ke ez karberunê binu rê rusnenu, mı rê kopya inu bırusne',
-'tog-diffonly' => 'Qıyasê versiyonu de tek ferqu basne, pela butıne nê',
-'tog-showhiddencats' => 'Kategoriunê dızdêni basne',
+'tog-diffonly' => 'Qıyasê versiyonu de tek ferqu bıasne, pela butıne nê',
+'tog-showhiddencats' => 'Kategoriyunê dızdêni bıasne',
'tog-norollbackdiff' => 'Peyserardene ra dıme ferqi caverde',
'underline-always' => 'Tım',
'underline-never' => 'Qet',
-'underline-default' => 'Qerar cıcêraoği dest dero',
+'underline-default' => 'Qerar cıfeteliyawoği dest dero',
# Font style option in Special:Preferences
-'editfont-style' => 'Warê vurnaena tipê nustey:',
-'editfont-default' => 'Fereziya cıfeteliyaoği',
-'editfont-monospace' => 'Tipê nustê sabıtcaguretoği',
-'editfont-sansserif' => 'Tipê nustê Sans-serifi',
-'editfont-serif' => 'Tipê nustê Serifi',
+'editfont-style' => 'Warê vurnayena terzê nustey:',
+'editfont-default' => 'Fereziya cıfeteliyawoği',
+'editfont-monospace' => 'Terzê nustê sabıtcaguretoği',
+'editfont-sansserif' => 'Babetê Sans-serifi',
+'editfont-serif' => 'Babetê serifi',
# Dates
'sunday' => 'Bazar',
'sun' => 'Baz',
'mon' => 'Dıs',
'tue' => 'Şês',
-'wed' => 'Çar',
+'wed' => 'Çrs',
'thu' => 'Pho',
'fri' => 'Yen',
'sat' => 'Sem',
'qbbrowse' => 'Çım ra viarne',
'qbedit' => 'Bıvurne',
'qbpageoptions' => 'Na pele',
-'qbpageinfo' => 'Gire',
'qbmyoptions' => 'Pelê mı',
'qbspecialpages' => 'Pelê xısusiy',
'faq' => 'PZP (Persê ke zaf perşinê)',
'yourname' => 'Namê karberi:',
'yourpassword' => 'Parola:',
'yourpasswordagain' => 'Parola tekrar ke:',
-'remembermypassword' => 'Cıkotena mı na komputeri de bia ho viri ($1 {{PLURAL:$1|roze|rozu}} ra seba zu zêdêrêni)',
+'remembermypassword' => 'Cıkotena mı na komputeri de bia ho viri (seba tewr jêde $1 {{PLURAL:$1|roze|rozu}})',
'securelogin-stick-https' => 'Cıkotene ra dıme HTTPS rê giredae bımane',
'yourdomainname' => 'Bandıra sıma:',
'externaldberror' => 'Cıfeteliyaisê naskerdene de ya xeta esta ya ki tebera vırastena hesabê sıma rê destur çino.',
'rcnotefrom' => "Cêr de vurnayîşê esto ke '''$2''' ra raver (heta '''$1''' mucnayiyo).",
'rclistfrom' => '$1 ra hata nıka vurnaisunê newu bıasne',
'rcshowhideminor' => '$1 vurnaisê qızkeki',
-'rcshowhidebots' => 'botê $1i',
-'rcshowhideliu' => '$1 karberê qeydbiyaey',
+'rcshowhidebots' => 'Botu $1',
+'rcshowhideliu' => 'Karberunê qeydbiyayu $1',
'rcshowhideanons' => '$1 karberê anonimi',
'rcshowhidepatr' => 'Vurnayışê cıyê vênıtey $1',
-'rcshowhidemine' => '$1 vurnaisê mı',
-'rclinks' => '$1 vurnaisunê peyênunê $2 rozunê<br />$3 peyênun bıasne',
+'rcshowhidemine' => 'Vurnayisanê mı $1',
+'rclinks' => 'Peyniya $2 rozu de $1 vurnayisu bıasne <br />$3',
'diff' => 'ferq',
'hist' => 'ver',
'hide' => 'Bınımne',
# Namespace form on various pages
'namespace' => 'Caê namey:',
-'invert' => 'Weçinıtu ra qêri bıasne',
+'invert' => 'Weçinıtiso peyserki',
'blanknamespace' => '(Ser)',
# Contributions
'blocklink' => 'kilıt ke',
'unblocklink' => 'ra ke',
'change-blocklink' => 'mani bıvurne',
-'contribslink' => 'iştıraki',
+'contribslink' => 'iştıraqi',
'emaillink' => 'e-poste bırusne',
'autoblocker' => 'Sıma otomatikmen kılit biy, çıke adresa sımawa \'\'IP\'\'y terefê "[[User:$1|$1]]" gurenina.
Sebebê kılit-biyaena $1\'i: "$2"o',
'qbbrowse' => 'ವಿಹರಿಸು',
'qbedit' => 'ಸಂಪಾದಿಸು',
'qbpageoptions' => 'ಈ ಪುಟ',
-'qbpageinfo' => 'ಸನ್ನಿವೇಶ',
'qbmyoptions' => 'ನನ್ನ ಪುಟಗಳು',
'qbspecialpages' => 'ವಿಶೇಷ ಪುಟಗಳು',
'faq' => 'ಸಾಮಾನ್ಯವಾಗಿ ಕೇಳಲಾಗುವ ಪ್ರಶ್ನೆಗಳು',
'createaccount' => 'ಹೊಸ ಖಾತೆ ತೆರೆಯಿರಿ',
'gotaccount' => "ಈಗಾಗಲೇ ಖಾತೆಯಿದೆಯೇ? '''$1'''.",
'gotaccountlink' => 'ಲಾಗ್ ಇನ್',
+'userlogin-resetlink' => 'ನಿಮ್ಮ ಲಾಗಿನ್ ವಿವರಗಳನ್ನು ಮರೆತಿದ್ದೀರಾ?',
'createaccountmail' => 'ಇ-ಅಂಚೆಯ ಮೂಲಕ',
'createaccountreason' => 'ಕಾರಣ:',
'badretype' => 'ನೀವು ಕೊಟ್ಟ ಪ್ರವೇಶಪದಗಳು ಬೇರೆಬೇರೆಯಾಗಿವೆ.',
'nextn-title' => 'ಮುಂದಿನ $1 {{PLURAL:$1|ಫಲಿತಾಂಶ|ಫಲಿತಾಂಶಗಳು}}',
'shown-title' => 'ಪ್ರತಿ ಪುಟದಲ್ಲಿಯೂ $1 {{PLURAL:$1|result|results}} ತೋರಿಸು',
'viewprevnext' => 'ವೀಕ್ಷಿಸು ($1 {{int:pipe-separator}} $2) ($3)',
+'searchmenu-exists' => "'''\"[[:\$1]]\" ಹೆಸರಿನ ಪುಟ ಈ ವಿಕಿಯಲ್ಲಿದೆ.'''",
'searchmenu-new' => "'''''[[:$1]]'' ಪುಟವನ್ನು ಈ ವಿಕಿಯಲ್ಲಿ ಸೃಷ್ಟಿಸಿ!'''",
'searchhelp-url' => 'Help:ಪರಿವಿಡಿ',
'searchprofile-articles' => 'ಲೇಖನ ಪುಟ',
'recentchanges-legend' => 'ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳ ಆಯ್ಕೆಗಳು',
'recentchanges-summary' => 'ವಿಕಿಗೆ ಮಾಡಲ್ಪಟ್ಟ ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳನ್ನು ಈ ಪುಟದಲ್ಲಿ ನೀವು ಕಾಣಬಹುದು.',
'recentchanges-feed-description' => 'ವಿಕಿಯಲ್ಲಿ ಆಗುವ ಹೊಸ ಬದಲಾವಣೆಗಳ ಮೇಲೆ ನಿಗ ಇಡಲು ಉಪಯೋಗವಾಗುವ ಫೀಡು.',
+'recentchanges-label-newpage' => 'ಈ ಸಂಪಾದನೆ ಹೊಸ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಿದೆ',
'recentchanges-label-minor' => 'ಇದು ಚುಟುಕಾದ ಬದಲಾವಣೆ',
+'recentchanges-label-bot' => 'ಈ ಸಂಪಾದನೆಯನ್ನು ಒಂದು ಬಾಟ್ ಮಾಡಿದೆ',
+'recentchanges-label-unpatrolled' => 'ಈ ಸಂಪಾದನೆಯನ್ನು ಇನ್ನೂ ಪರೀಕ್ಷೆಗೆ ಒಳಪಡಿಸಿಲ್ಲ',
'rcnote' => "$5, $4 ವರೆಗೆ ಹಿಂದಿನ {{PLURAL:$2|ದಿನದಲ್ಲಿ|'''$2''' ದಿನಗಳಲ್ಲಿ}} ಮಾಡಲಾಗಿರುವ {{PLURAL:$1|'''೧''' ಬದಲಾವಣೆ|'''$1''' ಬದಲಾವಣೆಗಳು}} ಕೆಳಗಿವೆ.",
'rcnotefrom' => "'''$2''' ಇಂದ ಆಗಿರುವ ಬದಲಾವಣೆಗಳು ಕೆಳಗಿವೆ (ಕೊನೆಯ '''$1'''ರವರೆಗೆ ತೋರಿಸಲಾಗಿದೆ).",
'rclistfrom' => '$1 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ',
ಈ URL ಸರಿಯಿದೆ ಮತ್ತು ಆ ತಾಣ ಕಾರ್ಯ ಮಾಡುತ್ತಿದೆ ಎಂದು ಮತ್ತೊಮ್ಮೆ ಪರೀಕ್ಷಿಸಿ.',
'upload-curl-error28' => 'ಅಪ್ಲೋಡ್ ಕಾಲಾವಧಿ ಮೀರಿದೆ',
+'license' => 'ಪರವಾನಗಿ:',
'license-header' => 'ಪರವಾನಗಿ',
'upload_source_url' => ' (ಒಂದು ಮನ್ನಿತ, ಸಾರ್ವಜನಿಕವಾಗಿ ಎಟಕುವ URL)',
'upload_source_file' => ' (ನಿಮ್ಮ ಗಣಕಯಂತ್ರದಲ್ಲಿರುವ ಒಂದು ಫೈಲು)',
'linksearch' => 'ಹೊರಗಿನ ಸಂಪರ್ಕಗಳು',
'linksearch-ns' => 'ನಾಮವರ್ಗ:',
'linksearch-ok' => 'ಹುಡುಕು',
+'linksearch-line' => '$1 ನ್ನು $2 ರಿಂದ ಜೋಡಿಸಲಾಗಿದೆ',
# Special:ListUsers
'listusersfrom' => 'ಇದರಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಬಳಕೆದಾರರನ್ನು ತೋರಿಸು:',
# Watchlist
'watchlist' => 'ವೀಕ್ಷಣಾ ಪಟ್ಟಿ',
'mywatchlist' => 'ನನ್ನ ವೀಕ್ಷಣಾಪಟ್ಟಿ',
+'watchlistfor2' => '$1 ($2) ಗೆ',
'nowatchlist' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ಯಾವುದೇ ಪುಟಗಳಿಲ್ಲ',
'watchlistanontext' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ನೋಡಲು ಅಥವ ಸಂಪಾದಿಸಲು ದಯವಿಟ್ಟು $1 ಮಾಡಿ.',
'watchnologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ',
'confirmdeletetext' => 'ಒಂದು ಪುಟವನ್ನು ಮತ್ತು ಅದರ ಸಂಪೂರ್ಣ ಇತಿಹಾಸವನ್ನು ನೀವು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಿಹಾಕುತ್ತಿರುವಿರಿ.
ಇದನ್ನು ನೀವು ಮಾಡಬಯಸುವಿರಿ, ಇದರ ಪರಿಣಾಮಗಳನ್ನು ಬಲ್ಲಿರಿ, ಮತ್ತು [[{{MediaWiki:Policy-url}}|ಕಾರ್ಯನೀತಿಗಳ]] ಅನುಸಾರ ಇದನ್ನು ಮಾಡುತ್ತಿದ್ದೀರಿ ಎಂದು ದೃಢಪಡಿಸಿ.',
'actioncomplete' => 'ಕಾರ್ಯ ಸಂಪೂರ್ಣ',
+'actionfailed' => 'ಕ್ರಿಯೆ ವಿಫಲವಾಗಿದೆ',
'deletedtext' => '"$1" ಅನ್ನು ಅಳಿಸಲಾಯಿತು.
ಇತ್ತೀಚೆಗಿನ ಅಳಿಸುವಿಕೆಗಳ ಪಟ್ಟಿಗಾಗಿ $2 ಅನ್ನು ನೋಡಿ.',
'dellogpage' => 'ಅಳಿಸುವಿಕೆ ದಾಖಲೆ',
'sp-contributions-newbies' => 'ಹೊಸ ಖಾತೆಗಳ ಕಾಣಿಕೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು',
'sp-contributions-newbies-sub' => 'ಹೊಸ ಖಾತೆಗಳಿಗೆ',
'sp-contributions-blocklog' => 'ತಡೆಹಿಡಿಯುವಿಕೆ ದಾಖಲೆ',
+'sp-contributions-uploads' => 'ಅಪ್ಲೋಡುಗಳು',
'sp-contributions-logs' => 'ದಾಖಲೆಗಳು',
'sp-contributions-talk' => 'ಚರ್ಚೆ',
'sp-contributions-userrights' => 'ಬಳಕೆದಾರ ಹಕ್ಕುಗಳ ನಿರ್ವಹಣೆ',
'sp-contributions-search' => 'ಸಂಪಾದನೆಗಳನ್ನು ಹುಡುಕು',
'sp-contributions-username' => 'IP ವಿಳಾಸ ಅಥವ ಬಳಕೆಯ ಹೆಸರು:',
+'sp-contributions-toponly' => 'ಕೇವಲ ಇತ್ತೀಚಿನ ಪರಿಷ್ಕರಣೆಗೆ ಸಂಬಂಧಿಸಿದ ಸಂಪಾದನೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು',
'sp-contributions-submit' => 'ಹುಡುಕು',
# What links here
'whatlinkshere-hideredirs' => '$1 ಪುನರ್ನಿರ್ದೇಶನಗಳು',
'whatlinkshere-hidetrans' => '$1 ಸೇರಿಸುವಿಕೆಗಳು',
'whatlinkshere-hidelinks' => '$1 ಕೊಂಡಿಗಳು',
+'whatlinkshere-hideimages' => '$1 ಚಿತ್ರ ಕೊಂಡಿಗಳು',
'whatlinkshere-filters' => 'ಶೋಧಕಗಳು',
# Block/unblock
'metadata-collapse' => 'ವಿಸ್ತಾರವಾದ ವಿವರಗಳನ್ನು ಅಡಗಿಸು',
'metadata-fields' => 'ಈ ಸಂದೇಶದಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾಗಿರುವ EXIF ಮೇಲ್ದರ್ಜೆ ಮಾಹಿತಿ ಚಿತ್ರ ಪುಟದಲ್ಲಿ ಸೇರಿಸಲಾಗುತ್ತದೆ. ಪುಟದಲ್ಲಿ ಮೇಲ್ದರ್ಜೆ ಮಾಹಿತಿ ಪಟ್ಟಿಯನ್ನು ತೆರೆದಾಗ ಇವು ಕಾಣುತ್ತದೆ.
ಉಳಿದವುಗಳು ಮೂಲಸ್ಥಿತಿಯಲ್ಲಿ ಅಗೋಚರವಾಗಿರುತ್ತವೆ.
-* ಸೃಷ್ಟಿ
-* ಮಾದರಿ
-* ಮೂಲಸಮಯದಿನಾಂಕ
-* ಅನಾವರಣಸಮಯ
+* make
+* model
+* datetimeoriginal
+* exposuretime
* fnumber
* isospeedratings
* focallength
-* ಕಲಾವಿದ
-* ಕೃತಿಸ್ವಾಮ್ಯ
+* artist
+* copyright
* imagedescription
* gpslatitude
* gpslongitude
'searcharticle' => '가기',
'history' => '문서 역사',
'history_short' => '역사',
-'updatedmarker' => '마지막으로 읽은 뒤 바뀌었음',
+'updatedmarker' => '마지막으로 방문한 뒤 바뀜',
'printableversion' => '인쇄용 문서',
'permalink' => '고유링크',
'print' => '인쇄',
이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.
모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
'sqlhidden' => '(SQL 쿼리 숨겨짐)',
-'cascadeprotected' => '이 문서는 연쇄 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다. 연쇄 보호된 문서:
+'cascadeprotected' => '이 문서는 다음 "연쇄적" 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다:
$2',
'namespaceprotected' => "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
'customcssprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 이 CSS 문서를 편집할 수 없습니다.',
'note' => "'''참고:'''",
'previewnote' => "'''이 화면은 미리 보기입니다.'''
편집한 내용은 아직 저장되지 않았습니다!",
-'continue-editing' => '계속 편집하기',
+'continue-editing' => '편집 영역으로 가기',
'previewconflict' => '이 미리 보기는 저장할 때의 모습으로 위쪽 편집창의 문서를 반영합니다.',
'session_fail_preview' => "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.'''
다시 시도하세요.
'shared-repo' => '공용 저장소',
'shared-repo-name-wikimediacommons' => '위키미디어 공용',
'filepage.css' => '/* 이 CSS 설정은 파일 설명 문서에 포함되며, 또한 해외 클라이언트 위키에 포함됩니다 */',
-'upload-disallowed-here' => 'ì£\84ì\86¡í\95\98ì§\80ë§\8c ì\9d´ 그림ì\9d\84 ë\8d®ì\96´ 쓸 수 없습니다.',
+'upload-disallowed-here' => 'ì\9d´ í\8c\8cì\9d¼ì\9d\84 ë\8d®ì\96´쓸 수 없습니다.',
# File reversion
'filerevert' => '$1 되돌리기',
# Book sources
'booksources' => '책 찾기',
'booksources-search-legend' => '책 찾기',
+'booksources-isbn' => 'ISBN:',
'booksources-go' => '찾기',
'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다:',
'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
'pageinfo-lasttime' => '최근 편집 날짜',
'pageinfo-edits' => '총 편집 수',
'pageinfo-authors' => '총 서로 다른 편집자 수',
-'pageinfo-recent-edits' => '최근 편집 수 (지난 $1일 이내)',
+'pageinfo-recent-edits' => '최근 편집 수 (지난 $1 이내)',
'pageinfo-recent-authors' => '최근 기여자 수',
'pageinfo-magic-words' => '매직 {{PLURAL:$1|워드}} ($1개)',
'pageinfo-hidden-categories' => '숨은 {{PLURAL:$1|분류}} ($1개)',
'pageinfo-templates' => '포함한 {{PLURAL:$1|틀}} ($1개)',
'pageinfo-toolboxlink' => '문서 정보',
+'pageinfo-redirectsto' => '넘겨주기 대상',
+'pageinfo-redirectsto-info' => '정보',
+'pageinfo-contentpage' => '내용 문서로 집계',
+'pageinfo-contentpage-yes' => '예',
+'pageinfo-protect-cascading' => '여기서의 연쇄적 보호',
+'pageinfo-protect-cascading-yes' => '예',
+'pageinfo-protect-cascading-from' => '연쇄적 보호한 기점',
# Skin names
'skinname-standard' => '클래식',
'edit-no-change' => 'Do häs ja nix aan dä Sigg jeändert, do dom_mer och nix domet.',
'edit-already-exists' => 'Kunnt kei neu Sigg aanlääje. Di Sigg jidd_et ald.',
'defaultmessagetext' => 'Dä standaadmäßije Tex',
+'content-failed-to-parse' => 'Et wohr nit müjjelesch, dä Enhalld met däm <i lang="en">MIME-Typ</i> $2 för en Dattei met $1 dren ze verwooschte: $3.',
+'invalid-content-data' => 'Di Daate en dä Sigg sen onjöltesch.',
+'content-not-allowed-here' => 'Ene Enhalld vun dä Zoot „$1“ es op dä Sigg „[[$2]]“ nit zohjelohße.',
+
+# Content models
+'content-model-wikitext' => 'Wikitäx',
+'content-model-text' => 'Eijnfache Tex',
+'content-model-javascript' => 'JavaSkrepp',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Opjepaß:''' Die Sigg heh määt zovill Opwand met Paaser-Funkßjohne.
'backend-fail-internal' => 'Ene onklohre Fähler es opjetrodde met däm Schpeischersysteem „$1“.',
'backend-fail-contenttype' => 'Mer kunnte de Zoot Enhalt nit eruß krijje, di en dä Dattei „$1“ faßjehallde wääde sull.',
'backend-fail-batchsize' => 'Dat Schpeischersysteem hät ene Pöngel met {{PLURAL:$1|einem Befähl|$1 Befähle|keinem Befähl}} krääje, ävver et kann bloß {{PLURAL:$2|eine Befähl|$2 Befähle|keine Befähl}} op eijmohl.',
-'backend-fail-usable' => 'Mer kunnte di Dattei $1 nit schrieve, weil e Verzeischnes udder ene container fählt, udder et Rääsch, dren ze schrieve.',
+'backend-fail-usable' => 'Mer kunnte di Dattei $1 nit lässe udder schrieve, weil e Verzeischnes udder ene container fählt, udder et Rääsch, dren ze lässe udder ze schrieve.',
# File journal errors
'filejournal-fail-dbconnect' => 'Mer kunnte kein Verbendong opnämme met dä Daatebangk för et Logbooch vum Schpeischersysteem „$1“.',
'shared-repo-from' => 'uß $1',
'shared-repo' => 'ene jemeinsame Beshtand',
'filepage.css' => '/* Heh dat CSS küdd op Sigge övver Dateije, och di vun ander Wikis jehollt woode sin. */',
-'upload-disallowed-here' => 'Onjlöklescherwies kanns De heh dat Beld nit övverschriive.',
+'upload-disallowed-here' => 'Do kanns heh di Dattei nit övverschriive.',
# File reversion
'filerevert' => '„$1“ zerök holle',
'undeletedrevisions' => '{{PLURAL:$1|ein Version|$1 Versione}} zeröckjehollt',
'undeletedrevisions-files' => 'Zesammejenomme {{PLURAL:$1|Ein Version|<strong>$1</strong> Versione|<strong>Kein</strong> Version}} vun {{PLURAL:$2|eine Datei|<strong>$2</strong> Dateie|<strong>nix</strong>}} zeröckjehollt',
'undeletedfiles' => '{{PLURAL:$1|Ein Datei|<strong>$1</strong> Dateie|<strong>Kein</strong> Dateie}} zeröckjehollt',
-'cannotundelete' => '<strong>Dä.</strong> Dat Zeröckholle jing donevve. Mach sinn, dat ene andere Metmaacher flöcker wor, un et ald et eets jedon hät, un jetz es die Sigg ald widder do jewäse.',
+'cannotundelete' => '<strong>Dä.</strong> Et Zeröckholle jing donevve. Maach sinn, dat ene andere Metmaacher flöcker wor, un et et eets jedon hät, un jetz es die Sigg ald widder do jewäse.',
'undeletedpage' => '<strong>De Sigg „$1“ es jetz widder do</strong>
Luur Der et [[Special:Log/delete|Logboch met de fottjeschmesse Sigge]] aan, do häs De de Neuste fottjeschmesse
un widder herjehollte Sigge.',
'immobile-target-namespace-iw' => 'Ene Ingerwikilink es nix, woh mer en Sigg hen ömnenne künnt!',
'immobile-source-page' => 'Di Sigg kann nit ömjenannt wääde.',
'immobile-target-page' => 'Op dä Tittel kann kei Sigg ömjenannt wääde.',
+'bad-target-model' => 'De Zielsigg moß uß en ander Zoot Daate beschtonn, un vun „$1“ noh „$2“ künne mer nit ömwandele.',
'imagenocrossnamespace' => 'Dateije kam_mer nor in et Appachtemang „{{ns:file}}“ donn, noh woanders hen kam_mer se och nit ömnemme!',
'nonfile-cannot-move-to-file' => 'Mer kann nix uußer Datteije esu ömnänne, dat et em Appachtemang „{{ns:file}}“ landt',
'imagetypemismatch' => 'De neu Datei-Endong moß met däm Datei-Tüp zesamme passe',
# Info page
'pageinfo-title' => 'Övver di Sigg: „$1“',
+'pageinfo-not-current' => 'Esu en Aanjaabe künne mer bloß övver de Neuste Version vun dä Sigg maache.',
'pageinfo-header-basic' => 'Jrundlääje Aanjabe',
'pageinfo-header-edits' => 'De Änderonge',
'pageinfo-header-restrictions' => 'Siggeschoz',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Ein verstoche Saachjropp|$1 verstoche Saachjroppe|Kein verstoche Saachjropp}}',
'pageinfo-templates' => '{{PLURAL:$1|Ein Schablohn|$1 Schablohne|Kein Schablohn}} opjerohfe',
'pageinfo-toolboxlink' => 'Övver heh di Sigg',
+'pageinfo-redirectsto' => 'Leidt öm op',
+'pageinfo-redirectsto-info' => 'Aanjaabe övver di Sigg',
+'pageinfo-contentpage' => 'Zällt als en Sigg vom Enhalld vum Wiki',
+'pageinfo-contentpage-yes' => 'Joh',
+'pageinfo-protect-cascading' => 'Ene Siggeschoz weed vun heh verärf',
+'pageinfo-protect-cascading-yes' => 'Joh',
+'pageinfo-protect-cascading-from' => 'Ene Siggeschoz weed jeärf vun',
# Skin names
'skinname-standard' => 'Klassesch',
'duration-minutes' => '{{PLURAL:$1|ein Menutt|$1 Menutte|kein Menutt}}',
'duration-hours' => '{{PLURAL:$1|en Stund|$1 Stunde|kein Shtund}}',
'duration-days' => '{{PLURAL:$1|ene Daach|$1 Dääsch|keine Daach}}',
-'duration-weeks' => '{{PLURAL: $1|en Woch|§1 Woche|kein Woch}}',
+'duration-weeks' => '{{PLURAL: $1|en Woch|$1 Woche|kein Woch}}',
'duration-years' => '{{PLURAL:$1|e Johr|$1 Johre|kei Johr}}',
'duration-decades' => '{{PLURAL:$1|zehn Johre|$1 Johrzehnte|kei Johrzehnt}}',
'duration-centuries' => '{{PLURAL:$1|e Johrhondert|$1 Johrhonderte|kei Johrhondert}}',
'qbbrowse' => 'Bigere',
'qbedit' => 'Biguherîne',
'qbpageoptions' => 'Ev rûpel',
-'qbpageinfo' => 'Naverok',
'qbmyoptions' => 'Rûpelên min',
'qbspecialpages' => 'Rûpelên taybet',
'faq' => 'PGP',
'categorypage' => 'Li rûpela kategoriyê binêre',
'viewtalkpage' => 'Li gotûbêjê binêre',
'otherlanguages' => 'Zimanên din',
-'redirectedfrom' => '(ji $1 hate beralîkirin)',
+'redirectedfrom' => '(Ji $1 hate beralîkirin)',
'redirectpagesub' => 'Rûpelê beralî bike',
'lastmodifiedat' => 'Ev rûpel cara dawî di $2, $1 de hate guherandin.',
'viewcount' => 'Ev rûpel {{PLURAL:$1|carekê|caran}} tê xwestin.',
# Auto-summaries
'autosumm-blank' => 'Rûpel hate vala kirin',
'autosumm-replace' => "'$1' ket şûna rûpelê.",
-'autoredircomment' => 'ji bo [[$1]] hate beralîkirin',
+'autoredircomment' => 'Ji bo [[$1]] hate beralîkirin',
'autosumm-new' => 'Rûpela nû: "$1"',
# Live preview
'qbbrowse' => 'Сереп сал',
'qbedit' => 'Оңдоо',
'qbpageoptions' => 'Бул барак',
-'qbpageinfo' => 'Контекст',
'qbmyoptions' => 'Барактарым',
'qbspecialpages' => 'Атайын барактар',
'faq' => 'КБС',
*
* @author ILVI
* @author Jewbask
+ * @author Maor X
* @author Remember the dot
* @author Runningfridgesrule
* @author Taichi
'qbbrowse' => 'Navigar',
'qbedit' => 'Trocar',
'qbpageoptions' => 'Esta hoja',
-'qbpageinfo' => 'Enformasyón de hoja',
'qbmyoptions' => 'Mis hojas',
'qbspecialpages' => 'Hojas especiales',
'faq' => 'DAD',
'note' => "'''Notiz:'''",
'previewnote' => "'''Denkt drun datt dëst nëmmen eng net gespäichert Versioun ass.'''
Är Ännerunge sinn nach net gespäichert!",
-'continue-editing' => 'Weider änneren',
+'continue-editing' => "Gitt weider an de Beräich fir z'änneren",
'previewconflict' => 'Dir gesitt an dem ieweschten Textfeld wéi den Text ausgesi wäert, wann Dir späichert.',
'session_fail_preview' => "'''Är Ännerung konnt net gespäichert gi well d'Date vun Ärer Sessioun verluergaange sinn.
Versicht et w.e.g. nach eng Kéier.
'parser-template-loop-warning' => 'Endlos Schleef an der Schabloun: [[$1]] entdeckt',
'parser-template-recursion-depth-warning' => "D'Limit vun der Zuel vun de Verschachtelunge vu Schabloune gouf iwwerschratt ($1)",
'language-converter-depth-warning' => "D'Limite vun der déift vun der Sproochëmwandlung gouf iwwerschratt ($1)",
+'parser-unstrip-loop-warning' => 'Endlos Schleef entdeckt',
'converter-manual-rule-error' => 'An der Regel iwwer déi manuell Ëmwandlung vun der Sprooch gouf e Feeler fonnt',
# "Undo" feature
'shared-repo-from' => 'vu(n) $1',
'shared-repo' => 'e gemeinsam genotzte Medienarchiv',
'shared-repo-name-wikimediacommons' => 'Wikimedia-Commons',
-'upload-disallowed-here' => 'Leider kënnt Dir dëst Bild net iwwerschreiwen.',
+'upload-disallowed-here' => 'Dir kënnt Dir dëse Fichier net iwwerschreiwen.',
# File reversion
'filerevert' => '"$1" zrécksetzen',
'import-error-invalid' => 'D\'Säit "$1" gouf net importéiert well hiren Numm net valabel ass.',
'import-options-wrong' => 'Falsch {{PLURAL:$2|Optioun|Optiounen}}: <nowiki>$1</nowiki>',
'import-rootpage-invalid' => 'Déi Basis-Säit déi Dir uginn hutt ass kee valabelen Titel.',
+'import-rootpage-nosubpage' => 'Am Nummraum "$1" vun der Basis-Säit si keng Ënnersäiten erlaabt.',
# Import log
'importlogpage' => 'Lëscht vun den Säitenimporten',
# Info page
'pageinfo-title' => 'Informatioun iwwer "$1"',
+'pageinfo-not-current' => 'Dës Informatioune kënnen nëmme fir dës Versioun gewise ginn.',
'pageinfo-header-basic' => 'Basisinformatiounen',
'pageinfo-header-edits' => 'Historique vun den Ännerungen',
'pageinfo-header-restrictions' => 'Spär vun der Säit',
'pageinfo-hidden-categories' => 'Verstoppte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
'pageinfo-templates' => 'Agebonne {{PLURAL:$1|Schabloun|Schabloune}} ($1)',
'pageinfo-toolboxlink' => "Informatiounen iwwert d'Säit",
+'pageinfo-redirectsto' => 'Viruleedung op',
+'pageinfo-redirectsto-info' => 'Informatioun',
+'pageinfo-contentpage' => 'Als Säit mat Inhalt gezielt',
+'pageinfo-contentpage-yes' => 'Jo',
+'pageinfo-protect-cascading-yes' => 'Jo',
# Skin names
'skinname-standard' => 'Klassesch',
'qbbrowse' => 'Килигун',
'qbedit' => 'Дегишарун',
'qbpageoptions' => 'Ччинин низамарунар',
-'qbpageinfo' => 'Ччиникай малумат',
'qbmyoptions' => 'Зи ччинар',
'qbspecialpages' => 'Кьетlен хъувун',
'faq' => 'Фад-фад гузвай жузунар (ФГЖ)',
'missingarticle-rev' => '(жуьре#: $1)',
'internalerror' => 'КЪенепатан гъалатI',
'internalerror_info' => 'КЪенепатан гъалатI $1',
+'filecopyerror' => 'Kopi aqudiz jezach fail "$1" "$2" - diz.',
'filerenameerror' => '«$1» файл «$2» -з тIвар эхцигиз жезвач..',
'badarticleerror' => 'И ччина и кар кьилиз акъудиз мумкин ттуш.',
'cannotdelete-title' => ' "$1" ччин алудиз жезвач',
Квевай [[Special:Search/{{PAGENAME}}| и тlвар алай ччин]] муькуь ччинра жугъуриз,
<span class="plainlinks"> [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналрин талукь тир кхьей затIар жугъуриз],
ва я [{{fullurl:{{FULLPAGENAME}}|action=edit}} и тlвар алай ччин туькIуьриз жеда] </span>.',
-'noarticletext-nopermission' => 'Исятда и ччина са текстни авач.
-Квевай [[Special:Search/{{PAGENAME}}| и тlвар алай ччин]] муькуь ччинра жугъуриз ва я
-<span class="plainlinks"> [{{fullurl: {{# Special:Log}} | page = {{FULLPAGENAMEE}}}} журналрин талукь тир кхьей затIар жугъуриз] жеда.',
+'noarticletext-nopermission' => 'Iseatda china kxhin avach.
+Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra jaghuriz ak\'ni
+<span class="plainlinks"> [{{fullurl: {{# Special:Log}} | page = {{FULLPAGENAMEE}}}} jurnalrin taluq\' tir kxhey zathar jaghuriz] jeda.',
'blocked-notice-logextract' => 'И уртах алайчIава блокарнава.
Агъадихъ блокарунин журналдикай эхиримжи кхьинар къалурнава:',
'previewnote' => "'''Рикlел хуьх хьи, им анжах сифтедин килигун я.'''
'revertmerge' => 'Ччара авун',
# Diffs
-'history-title' => '$1 - масакIавилерин тарих',
+'history-title' => 'Masak\'avilerin q\'isa "$1"',
'lineno' => 'ЦIар $1:',
'compareselectedversions' => 'Хкягъай жуьреяр гекъигун',
'editundo' => 'гьич авун',
'qbbrowse' => 'Surfa',
'qbedit' => 'Edita',
'qbpageoptions' => 'Esta paje',
-'qbpageinfo' => 'Situa',
'qbmyoptions' => 'Me pajes',
'qbspecialpages' => 'Pajes spesial',
'qbbrowse' => 'Sföja',
'qbedit' => 'Mudifega',
'qbpageoptions' => 'Opzión de la pagina',
-'qbpageinfo' => 'Infurmazión revard a la pagina',
'qbmyoptions' => 'I mè paginn',
'qbspecialpages' => 'Paginn special',
'faq' => 'FAQ',
'qbbrowse' => 'Nepile',
'qbedit' => "Hloli ye ng'i",
'qbpageoptions' => 'Bye petulo',
-'qbpageinfo' => 'Petulo tuto',
'qbmyoptions' => 'Zwa petulona',
'qbspecialpages' => 'Petulo zwenti',
'faq' => 'Alabile',
<?php
-/** Lushai (Mizo ţawng)
+/** Mizo (Mizo ţawng)
*
* See MessagesQqq.php for message documentation incl. usage of parameters
* To improve a translation please visit http://translatewiki.net
'qbbrowse' => 'Fangvêl rawh',
'qbedit' => 'Siamţhatna',
'qbpageoptions' => 'He phêk hi',
-'qbpageinfo' => 'Thukhawchang',
'qbmyoptions' => 'Ka phêkte',
'qbspecialpages' => 'Phêk vohbîkte',
'faq' => 'Zawhzin',
Ahnuaih hian {{PLURAL:$1|zawmtu hmasa ber|zawmtu hmasa $1-te}} kan rawn tlar chhuak e.
Zawmtu zawng zawng [[Special:WhatLinksHere/$2|tlarchhuahna hetah hian a awm]] e.',
'nolinkstoimage' => 'He taksa zawmtu/hmanna phêk pakhat mah a awm lo.',
-'morelinkstoimage' => 'Hemi taksa zawmpui dang [[Special:WhatLinksHere/$1|enna}}.',
+'morelinkstoimage' => 'Hemi taksa zawmpui dang [[Special:WhatLinksHere/$1|enna]].',
'linkstoimage-redirect' => '$1 (taksa hruailuhna) $2',
'duplicatesoffile' => 'A hnuaia taksa{{PLURAL:$1||te}} khu hë taksa nihpui{{PLURAL:$1||te}} a{{PLURAL:$1||n}} ni ([[Special:FileDuplicateSearch/$2|chanchin kimchang]]):',
'sharedupload' => 'Hë taksa hi $1-a mi a ni a, hna-hmachhawp dangin a hmang vè mai thei.',
'tog-watchcreations' => '哨己撰',
'tog-watchdefault' => '哨己纂',
'tog-watchmoves' => '派哨予吾遷之頁',
-'tog-watchdeletion' => '派哨予吾除之頁',
+'tog-watchdeletion' => '派哨至吾除之頁',
'tog-minordefault' => '慣為校',
'tog-previewontop' => '頂草覽',
'tog-previewonfirst' => '覽首修',
# Diffs
'history-title' => '$1之誌',
+'difference-title' => '$1各本之异',
+'difference-title-multipage' => '$1、$2之异',
'difference-multipage' => '(辨頁)',
'lineno' => '列$1:',
'compareselectedversions' => '辨二擇',
'qbbrowse' => 'Jelajahi',
'qbedit' => 'Sunting',
'qbpageoptions' => 'Kaca kiye',
-'qbpageinfo' => 'Konteks kaca',
'qbmyoptions' => 'Kaca-ne inyong',
'qbspecialpages' => 'Kaca-kaca astamiwa',
'faq' => 'FAQ (Pitakonan sing sering ditakokna)',
'qbsettings-fixedright' => 'Ankavanana',
'qbsettings-floatingleft' => 'Mitsingevaheva any ankavanana',
'qbsettings-floatingright' => 'Mitsigevaheva any ankavanana',
+'qbsettings-directionality' => "Tsy mihetsika, arakaraky ny fizotran'ny soratra amin'ny teninao (avy any havanana miankavia, na avy any havia miankavanana)",
# Preferences page
'preferences' => 'Ny momba anao',
'timezoneregion-indian' => 'Ranomasimbe Indianina',
'timezoneregion-pacific' => 'Ranomasimbe Pasifika',
'allowemail' => "Ekeo ny handraisana imailaka avy amin'ny mpikambana hafa",
-'prefs-searchoptions' => 'Safidy mikasika ny fikarohana',
+'prefs-searchoptions' => 'Karoka',
'prefs-namespaces' => "Toeran'anarana",
'defaultns' => "Fikarohana tsipalotra anatin'ireo anaran-tsehatra ireo :",
'default' => 'tsipalotra',
$1",
'upload-warning-subj' => 'Fampitandremana rehefa mampiditra',
+'upload-warning-msg' => "Nisy olana nitranga tam-pampidirana avy amin'i [$2] afaka miverina any amin'ny [[Special:Upload/stash/$1|formiolera fampidirana]] ianao hamahana izany olana izany.",
'upload-proto-error' => 'Protokolina diso',
'upload-proto-error-text' => "Mila URL manomboka amin'ny <code>http://</code> na <code>ftp://</code> ny fampidiran-drakitra.",
# img_auth script messages
'img-auth-accessdenied' => 'Tsy afa-mankao',
-'img-auth-nopathinfo' => "Tsy misy ny PATH_INFO.
+'img-auth-nopathinfo' => "Tsy misy PATH_INFO.
Tsy voaparametatra ny lohamilinao hampita io fampahalalàna io.
-Mety mifototra amin'ny CGI izy ka mety tsy mahazaka img_auth
+Mety mampiasa CGI angamba ilay lohamilina ka tsy mahazaka an'i img_auth
Vangio ny https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
'img-auth-notindir' => 'Ny lalana nangatahana dia tsy ny petra-drakitra nokaonfigiorena.',
'img-auth-badtitle' => "Tsy afaka mamorona lohateny azo ampiasaina avy amin'ny « $1 ».",
'listgrouprights-removegroup' => "Manala ny mpikambana {{PLURAL:$2}}amin'ny gropy : $1",
'listgrouprights-addgroup-all' => 'Manampy mpikambana anaty vondrona rehetra',
'listgrouprights-removegroup-all' => 'Manala mpikambana anaty gropy rehetra',
+'listgrouprights-addgroup-self' => "Afaka manampy ny tenany amin'ny vondrona{{PLURAL:$2}}: $1",
+'listgrouprights-removegroup-self' => "Afaka manala ny tenany amin'ny vondrona{{PLURAL:$2}} : $1",
'listgrouprights-addgroup-self-all' => "Manampy ny vondrom-pikambana rehetra amin'ny kaontiny",
'listgrouprights-removegroup-self-all' => "Manala ny vondrom-pikambana rehetra amin'ny kaontiny",
'namespace' => 'Anaran-tsehatra :',
'invert' => 'Ampifamadiho ny safidy',
'namespace_association' => 'Anaran-tsehatra nampiarahana',
+'tooltip-namespace_association' => 'Mariho ity boaty ity mba hampiditra ny pejin-dresaky ny anaran-tsehatra voafidy',
'blanknamespace' => '(fotony)',
# Contributions
'blockipsuccesstext' => 'Voasakana i [[Special:Contributions/$1|$1]].
<br />Jereo ny [[Special:BlockList|lisitry ny IP voasakana]] raha hanala ny sakana efa misy.',
'ipb-blockingself' => 'Hanakana ny kaontinao ianao ! Tena hanao izany ve ?',
+'ipb-confirmhideuser' => "Eo ampanakanana mpikambana miaraka amin'ny \"fanakonana mpikambana\" ampiasaina. Izany dia mamafa ny anaran'ilay mpikambana amin'ny listra ary amin'ny iditra laogy. Tena hanao izany ve ianao?",
'ipb-edit-dropdown' => 'Hanova ny antony fanakanana tsipalotra',
'ipb-unblock-addr' => "Hanala ny sakan' i $1",
'ipb-unblock' => "Hanala ny sakan'ny mpikambana na adiresy IP",
'lockfilenotwritable' => "Tsy azo soratana ny rakitra fanidiana ny banky angona.
Mba hahafahany manidy na mamoha ny banky angona, mila azo soratan'ny lohamilin-tranonkala izy.",
'databasenotlocked' => 'Tsy voaidy ny banky angona.',
+'lockedbyandtime' => "(nataon'i $1 ny $2 tamin'ny $3)",
# Move page
'move-page' => "Hanova anarana an'i $1",
'exif-exifversion' => 'Santiôna EXIF',
'exif-flashpixversion' => 'Santiôna FlashPix',
'exif-colorspace' => 'Valan-doko',
-'exif-pixelydimension' => 'Haavon-tsary ekena',
-'exif-pixelxdimension' => 'Halalan-tsary ekena',
+'exif-pixelydimension' => 'Haavon-tsary',
+'exif-pixelxdimension' => 'Halala-tsary',
'exif-usercomment' => 'Diniky ny mpikambana',
'exif-relatedsoundfile' => 'Rakitra audio miaraka',
'exif-datetimeoriginal' => 'Daty fangalana niaviana',
'exif-fnumber' => 'Isa F',
'exif-exposureprogram' => 'Fomba famakiana',
'exif-isospeedratings' => 'ISO',
-'exif-aperturevalue' => 'Sanasana',
+'exif-aperturevalue' => 'Fisanasana APEX',
'exif-lightsource' => 'Loharanon-kazavana',
'exif-flashenergy' => "Angôvon'akonkazavana",
'exif-filesource' => 'Fangon-drakitra',
'exif-gpsareainformation' => 'Anaram-paritra GPS',
'exif-gpsdatestamp' => 'Daty GPS',
'exif-countrycreated' => 'Firenena nangalana ilay sary',
+'exif-cameraownername' => "Tompon'ilay mpaka sary",
+'exif-licenseurl' => "URl an'ilay lisansa",
+'exif-pngfilecomment' => "Famoahan-kevitra momban'ilay rakitra PNG",
+
+'exif-copyrighted-true' => "Iharan'ny zom-pamorona",
+'exif-copyrighted-false' => 'Valam-bahoaka',
'exif-unknowndate' => 'Daty tsy fantatra',
+'exif-orientation-1' => 'Tsotra',
+
'exif-componentsconfiguration-0' => 'tsy nahitana',
'exif-exposureprogram-0' => 'Tsy nolazaina',
'exif-meteringmode-0' => 'Tsy fantatra',
'exif-meteringmode-1' => 'Elanelana',
+'exif-meteringmode-3' => 'Spot',
+'exif-meteringmode-5' => 'Modely',
+'exif-meteringmode-255' => 'Hafa',
# Flash modes
'exif-flash-mode-3' => 'Toetra aotômatika',
'filehist-dimensions' => 'Кугытшо',
'filehist-filesize' => 'Файлын кугытшо',
'filehist-comment' => 'Файл нерген:',
-'imagelinks' => 'Файл деке кылвер-влак',
+'imagelinks' => 'Файлым кучылтмаш',
'linkstoimage' => 'Тиде {{PLURAL:$1|$1 лаштык саде файл дене кылдалтын|$1 лаштык-влак саде файл дене кылдалтыныт}}:',
'nolinkstoimage' => 'Тиде файл дене кылдалтше ик лаштыкат уке.',
'sharedupload' => 'Тиде файлын верже: $1, туге гынат, тудым моло веренат кучылташ лиеш.',
'shortpages' => 'Кӱчык лаштык-влак',
'longpages' => 'Кужу лаштык-влак',
'protectedpages' => 'Тӧрлатымаш деч аралыме лаштык-влак',
+'usercreated' => '$1, $2 шагатлан {{GENDER:$3|регистрацийым эртен|регистрацийым эртен}}',
'newpages' => 'У лаштык-влак',
'newpages-username' => 'Пайдаланышын лӱмжӧ:',
'move' => 'Кусараш',
'whatlinkshere-hideredirs' => 'вес вере колтымаш-влакым $1',
'whatlinkshere-hidetrans' => 'пуртымашым $1',
'whatlinkshere-hidelinks' => 'кылвер-влакым $1',
+'whatlinkshere-hideimages' => 'сӱрет деке кылвер-влакым $1',
'whatlinkshere-filters' => 'Фильтр-влак',
# Block/unblock
'export' => 'Лаштык-влакым келыштараш',
# Namespace 8 related
+'allmessagesname' => 'Лӱм',
'allmessages-filter-all' => 'Чыла',
# Thumbnails
'qbbrowse' => 'Browse',
'qbedit' => 'Suntiang',
'qbpageoptions' => 'Laman ko',
-'qbpageinfo' => 'Konteks',
'qbmyoptions' => 'Laman denai',
'qbspecialpages' => 'Halaman istimewa',
'faq' => 'FAQ',
'tog-watchlisthideliu' => 'Скриј ги уредувањата на најавените корисници во списокот на набљудувања',
'tog-watchlisthideanons' => 'Скриј ги уредувањата од анонимни корисници во списокот на набљудувања',
'tog-watchlisthidepatrolled' => 'Скриј испатролирани уредувања од мојот список на набљудувања',
-'tog-ccmeonemails' => 'Ð\98Ñ\81пÑ\80аÑ\9cаÑ\98 ми копии од е-поÑ\80акиÑ\82е Ñ\88Ñ\82о ги пÑ\80аÑ\9cам до дÑ\80Ñ\83ги корисници',
+'tog-ccmeonemails' => 'Ð\98Ñ\81пÑ\80аÑ\9cаÑ\98 ми мои пÑ\80имеÑ\80оÑ\86и од пиÑ\81маÑ\82а Ñ\88Ñ\82о ги пÑ\80аÑ\9cам на дÑ\80Ñ\83гиÑ\82е корисници',
'tog-diffonly' => 'Не ја покажувај содржината на страницата под разликите',
'tog-showhiddencats' => 'Прикажи скриени категории',
'tog-noconvertlink' => 'Оневозможи претворање на наслов на врска',
'lastmodifiedat' => 'Оваа страница последен пат е изменета на $1 во $2 ч.',
'viewcount' => 'Оваа страница била посетена {{PLURAL:$1|еднаш|$1 пати}}.',
'protectedpage' => 'Заштитена страница',
-'jumpto' => 'Скокни на:',
+'jumpto' => 'Ð\9fÑ\80еÑ\98ди на:',
'jumptonavigation' => 'содржини',
'jumptosearch' => 'барај',
'view-pool-error' => 'За жал во моментов опслужувачите се преоптоварени.
'note' => "'''Напомена:'''",
'previewnote' => "'''Имајте предвид дека ова е само преглед.'''
Промените сè уште не се зачувани!",
-'continue-editing' => 'Ð\9fÑ\80одолжеÑ\82е Ñ\81о уредување',
+'continue-editing' => 'Ð\9eди на полеÑ\82о за уредување',
'previewconflict' => 'Овој преглед прикажува како ќе изгледа текстот внесен во горниот дел откако ќе се зачува страницата.',
'session_fail_preview' => "'''Жалиме! Не можевме да го обработиме вашето уредување поради загуба на сесиски податоци.'''
Обидете се повторно.
'shared-repo' => 'заедничко складиште',
'shared-repo-name-wikimediacommons' => 'Заедничката Ризница',
'filepage.css' => '/* Тука поставените каскадни стилски страници (CSS) се вклучени во страницата за опис на податотеката, како и на клиентските викија */',
-'upload-disallowed-here' => 'Нажалост, не можете да ја замените сликава со нова.',
+'upload-disallowed-here' => 'Нажалост, не можете да презапишете врз сликава.',
# File reversion
'filerevert' => 'Врати $1',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Скриена категорија|Скриени категории}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Превметнат шаблон|Превметнати шаблони}} ($1)',
'pageinfo-toolboxlink' => 'Информации за страницата',
+'pageinfo-redirectsto' => 'Пренасочува кон',
+'pageinfo-redirectsto-info' => 'инфо',
+'pageinfo-contentpage' => 'Се вбројува во содржински страници',
+'pageinfo-contentpage-yes' => 'Да',
+'pageinfo-protect-cascading' => 'Каскадната заштита на страниците важи од тука',
+'pageinfo-protect-cascading-yes' => 'Да',
+'pageinfo-protect-cascading-from' => 'Страници со каскадна заштита од',
# Skin names
'skinname-standard' => 'Класично',
'note' => "'''പ്രത്യേക ശ്രദ്ധയ്ക്ക്:'''",
'previewnote' => "'''ഇതൊരു പ്രിവ്യൂ മാത്രമാണെന്ന് ഓർക്കുക.'''
താങ്കൾ വരുത്തിയ മാറ്റങ്ങൾ ഇതുവരെ സേവ് ചെയ്തിട്ടില്ല!",
-'continue-editing' => 'തിരàµ\81à´¤àµ\8dതൽ à´¤àµ\81à´\9fà´°ുക',
+'continue-editing' => 'തിരàµ\81à´¤àµ\8dതൽ à´®àµ\87à´\96ലയിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\8d à´ªàµ\8bà´µുക',
'previewconflict' => 'ഈ പ്രിവ്യൂവിൽ മുകളിലെ ടെക്സ്റ്റ് ഏരിയയിലുള്ള എഴുത്ത് മാത്രമാണ് കാട്ടുന്നത്, സേവ് ചെയ്യാൻ താങ്കൾ തീരുമാനിച്ചാൽ അത് സേവ് ആകുന്നതാണ്.',
'session_fail_preview' => "'''ക്ഷമിക്കണം! സെഷൻ ഡാറ്റ നഷ്ടപ്പെട്ടതിനാൽ താങ്കളുടെ തിരുത്തലിന്റെ തുടർപ്രക്രിയ നടത്തുവാൻ സാധിച്ചില്ല.'''
ദയവായി വീണ്ടും ശ്രമിക്കൂ.
'shared-repo' => 'ഒരു പങ്കുവെക്കപ്പെട്ട സംഭരണി',
'shared-repo-name-wikimediacommons' => 'വിക്കിമീഡിയ കോമൺസ്',
'filepage.css' => '/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. പ്രമാണ വിവരണ താളുകളിൽ ഉൾപ്പെടുത്തപ്പെടുന്നതായിരിക്കും, ബാഹ്യ ക്ലൈന്റ് വിക്കികളിലും അത് ലഭ്യമായിരിക്കും */',
-'upload-disallowed-here' => 'നിർà´à´¾à´\97àµ\8dയവശാൽ à´\88 à´\9aà´¿à´¤àµ\8dà´°à´¤àµ\8dതിനàµ\81 à´®àµ\81à´\95ളിൽ മറàµ\8dà´±àµ\8aà´°àµ\81 à´\9aà´¿à´¤àµ\8dà´°ം ചേർക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
+'upload-disallowed-here' => 'à´\88 à´ªàµ\8dരമാണതàµ\8dതിനàµ\81 à´®àµ\81à´\95ളിൽ മറàµ\8dà´±àµ\8aà´°àµ\81 à´ªàµ\8dരമാണം ചേർക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
# File reversion
'filerevert' => '$1 തിരസ്ക്കരിക്കുക',
# Info page
'pageinfo-title' => '"$1" എന്ന താളിന്റെ വിവരങ്ങൾ',
+'pageinfo-not-current' => 'ഇപ്പോഴത്തെ നാൾപ്പതിപ്പിൽ മാത്രമേ വിവരങ്ങൾ പ്രദർശിപ്പിക്കപ്പെടാനിടയുള്ളു.',
'pageinfo-header-basic' => 'അടിസ്ഥാനവിവരങ്ങൾ',
'pageinfo-header-edits' => 'തിരുത്തൽചരിത്രം',
'pageinfo-header-restrictions' => 'സംരക്ഷണം',
'pageinfo-hidden-categories' => 'മറഞ്ഞിരിക്കുന്ന {{PLURAL:$1|വർഗ്ഗം|വർഗ്ഗങ്ങൾ}} ($1)',
'pageinfo-templates' => 'ഉൾപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|ഫലകം|ഫലകങ്ങൾ}} ($1)',
'pageinfo-toolboxlink' => 'താളിന്റെ വിവരങ്ങൾ',
+'pageinfo-redirectsto' => 'തിരിച്ചുവിടുന്നു',
+'pageinfo-redirectsto-info' => 'വിവരം',
+'pageinfo-contentpage' => 'ഉള്ളടക്ക താളായി എണ്ണുന്നവ',
+'pageinfo-contentpage-yes' => 'അതെ',
+'pageinfo-protect-cascading' => 'സംരക്ഷണങ്ങൾ ഇവിടെ നിന്ന് നിർഝരിതപ്പെടുത്തുന്നു',
+'pageinfo-protect-cascading-yes' => 'അതെ',
+'pageinfo-protect-cascading-from' => 'സംരക്ഷണങ്ങൾ നിർഝരിതപ്പെടുത്തുന്നത്',
# Skin names
'skinname-standard' => 'സാർവത്രികം',
'note' => "'''Catatan:'''",
'previewnote' => "'''Ingatlah bahawa ini hanya pralihat.'''
Perubahan anda belum disimpan!",
-'continue-editing' => 'Teruskan menyunting',
+'continue-editing' => 'Pergi ke tempat menyunting',
'previewconflict' => 'Paparan ini merupakan teks di bahagian atas dalam kotak sunting teks. Teks ini akan disimpan sekiranya anda memilih berbuat demikian.',
'session_fail_preview' => "'''Kami tidak dapat memproses suntingan anda kerana kehilangan data sesi. Sila cuba lagi. Jika masalah ini berlanjutan, [[Special:UserLogout|log keluar]] dahulu, kemudian log masuk sekali lagi.'''",
'session_fail_preview_html' => "'''Kami tidak dapat memproses suntingan anda kerana kehilangan data sesi.'''
'shared-repo' => 'sebuah gedung kongsi',
'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
'filepage.css' => '/* CSS yang ditempatkan di sini disertakan pada laman keterangan fail, dan juga pada klien wiki asing */',
-'upload-disallowed-here' => 'Maaf, anda tidak boleh menggantikan imej ini.',
+'upload-disallowed-here' => 'Anda tidak boleh menggantikan fail ini.',
# File reversion
'filerevert' => 'Balikkan $1',
# Info page
'pageinfo-title' => 'Maklumat untuk "$1"',
+'pageinfo-not-current' => 'Maklumat mungkin hanya dipaparkan untuk versi semasa.',
'pageinfo-header-basic' => 'Maklumat asas',
'pageinfo-header-edits' => 'Sunting sejarah',
'pageinfo-header-restrictions' => 'Perlindungan halaman',
'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
'pageinfo-templates' => 'Templat tertransklusi ($1)',
'pageinfo-toolboxlink' => 'Maklumat halaman',
+'pageinfo-redirectsto' => 'Melencong ke',
+'pageinfo-redirectsto-info' => 'maklumat',
+'pageinfo-contentpage' => 'Dikira sebagai halaman kandungan',
+'pageinfo-contentpage-yes' => 'Ya',
+'pageinfo-protect-cascading' => 'Perlindungan sedang melata dari sini',
+'pageinfo-protect-cascading-yes' => 'Ya',
+'pageinfo-protect-cascading-from' => 'Perlindungan sedang melata dari',
# Skin names
'skinname-standard' => 'Klasik',
'qbbrowse' => 'Nabegar',
'qbedit' => 'Eiditar',
'qbpageoptions' => 'Esta páigina',
-'qbpageinfo' => 'Cuntesto',
'qbmyoptions' => 'Mies páiginas',
'qbspecialpages' => 'Páiginas speciales',
'faq' => 'FAQ',
'qbbrowse' => 'ရှာဖွေလှန်လှောရန်',
'qbedit' => 'ပြင်ဆင်ရန်',
'qbpageoptions' => 'ဤစာမျက်နှာ',
-'qbpageinfo' => 'မာတိကာ',
'qbmyoptions' => 'ကျွန်ုပ် စာမျက်နှာများ',
'qbspecialpages' => 'အထူးစာမျက်နှာ',
'faq' => 'မေးလေ့ရှိကြသည်များ',
'qbbrowse' => 'Ваномо-тееме',
'qbedit' => 'Витнеме-петнеме',
'qbpageoptions' => 'Те лопась',
-'qbpageinfo' => 'Косо-зярдо',
'qbmyoptions' => 'Монь лопан',
'qbspecialpages' => 'Башка тевень лопат',
'faq' => 'Сеедьстэ кепедень кевкстемат',
'qbbrowse' => 'چأرخهسهن',
'qbedit' => 'دچیین',
'qbpageoptions' => 'این صفحه',
-'qbpageinfo' => 'بافت',
'qbmyoptions' => 'مه صفحهئون',
'qbspecialpages' => 'شا صفحهئون',
'faq' => 'معمولی سوالا',
'tog-minordefault' => 'Ticmachiyōtīz mochīntīn tlapatlalitzintli ic default',
'tog-previewontop' => 'Tiquittāz achtochīhualiztli achtopa tlapatlaliztli caxitl',
'tog-previewonfirst' => 'Xiquitta achtochīhualiztli inic cē tlapatlalizpan',
-'tog-enotifwatchlistpages' => 'Timitz-e-mailīzqueh ihcuāc mopatla cē zāzanilli tictlachiya.',
+'tog-enotifwatchlistpages' => 'Notech moēhualtia cē maltzinteyōtl netitlaniztli ihcuāc mopatla zāzanilli in notlachiyaliz.',
'tog-enotifusertalkpages' => 'Nēchihtoa ihcuāc tlecpatla motēixnāmiquiliz',
-'tog-enotifminoredits' => 'Timitz-e-mailīzqueh nō zāzanilpatlatzintli ītechcopa',
+'tog-enotifminoredits' => 'Notech moēhualtia cē maltzinteyōtl netitlaniztli nō ihcuāc mopatla tepitōn zāzanilli in notlachiyaliz.',
'tog-enotifrevealaddr' => 'Ticnēxtīz mo e-mailcān āxcāncayōtechcopa āmatlacuilizpan',
'tog-shownumberswatching' => 'Tiquinttāz tlatequitiltilīlli tlein tlachiyacateh',
'tog-forceeditsummary' => 'Xinēchnōtzāz ihcuāc ahmo niquihtōz inōn ōnitlapatlac',
'qbbrowse' => 'Titlatēmōz',
'qbedit' => 'Ticpatlāz',
'qbpageoptions' => 'Inīn zāzanilli',
-'qbpageinfo' => 'Tlahcuilōltechcopa',
'qbmyoptions' => 'Nozāzanil',
'qbspecialpages' => 'Nònkuâkìskàtlaìxtlapaltìn',
'faq' => 'Zan īc tētlatlanīliztli',
'timezoneregion-europe' => 'Europan',
'timezoneregion-indian' => 'Índico Ilhuicaātl',
'timezoneregion-pacific' => 'Pacífico Ilhuicaātl',
-'prefs-searchoptions' => 'Tlatēmoliztli tlaēlēhuiliztli',
+'prefs-searchoptions' => 'Titlatēmōz',
'prefs-namespaces' => 'Tōcātzin',
'defaultns' => 'Tlatēmōz inīn tōcātzimpan achtopa:',
'default' => 'ic default',
'qbbrowse' => 'Liū-lám',
'qbedit' => 'Siu-kái',
'qbpageoptions' => 'Chit ia̍h',
-'qbpageinfo' => 'Bo̍k-lo̍k',
'qbmyoptions' => 'Goá ê ia̍h',
'qbspecialpages' => 'Te̍k-sû-ia̍h',
'faq' => 'Būn-tah',
* @author Boivie
* @author Brik
* @author Byrial
+ * @author Cocu
* @author Danmichaelo
* @author Dittaeva
* @author Eirik
'uploadstash-summary' => 'Denne siden gir tilgang til filer som har blitt lastet opp (eller er i ferd med å bli lastet opp) men som ennå ikke er publisert til wikien. Disse filene er ikke synlige for andre enn brukeren som lastet dem opp.',
'uploadstash-clear' => 'Fjern stashede filer',
'uploadstash-nofiles' => 'Du har ingen stashede filer.',
-'uploadstash-badtoken' => 'Utføringen av den handlingen var mislykket, kanskje fordi dine redigeringsrettigheter har utløpt. Prøv igjen.',
+'uploadstash-badtoken' => 'Utføringen av den handlingen var mislykket, kanskje fordi redigeringsrettighetene dine har utløpt. Prøv igjen.',
'uploadstash-errclear' => 'Fjerning av filene var mislykket.',
'uploadstash-refresh' => 'Oppdater listen over filer',
'invalid-chunk-offset' => 'Ugyldig delforskyvning',
'uploadnewversion-linktext' => 'Last opp en ny versjon av denne filen',
'shared-repo-from' => 'fra $1',
'shared-repo' => 'et delt fillager',
-'upload-disallowed-here' => 'Beklageligvis kan du ikke overskrive dette bildet.',
+'upload-disallowed-here' => 'Du kan ikke overskrive denne filen.',
# File reversion
'filerevert' => 'Tilbakestill $1',
# Info page
'pageinfo-title' => 'Informasjon om «$1»',
+'pageinfo-not-current' => 'Informasjonen vises kanskje bare for den gjeldende revisjonen.',
'pageinfo-header-basic' => 'Grunnleggende informasjon',
'pageinfo-header-edits' => 'Redigeringshistorikk',
'pageinfo-header-restrictions' => 'Sidebeskyttelse',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
'pageinfo-templates' => 'Transkludert {{PLURAL:$1|mal|maler}} ($1)',
'pageinfo-toolboxlink' => 'Sideinformasjon',
+'pageinfo-redirectsto' => 'Omdirigerer til',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Talt som innholdsside',
+'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading' => 'Dypbeskyttelse starter herfra',
+'pageinfo-protect-cascading-yes' => 'Ja',
+'pageinfo-protect-cascading-from' => 'Dypbeskyttelse fra',
# Skin names
'skinname-standard' => 'Standard',
'viewsourcetext' => 'U kunt de brontekst van deze pagina bekijken en kopiëren:',
'viewyourtext' => "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
'protectedinterface' => "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.
-Om vertalingen voor alle wiki's toe te voegen of te wijzigen, gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
+Gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki, om vertalingen voor alle wiki's toe te voegen of te wijzigen.",
'editinginterface' => "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.
Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.
Om vertalingen toe te voegen of te wijzigen voor alle wiki's, gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
'note' => "'''Opmerking:'''",
'previewnote' => "'''Let op: dit is een controlepagina.'''
Uw tekst is niet opgeslagen!",
-'continue-editing' => 'Doorgaan met bewerken',
+'continue-editing' => 'Naar het bewerkingsvenster gaan',
'previewconflict' => 'Deze voorvertoning geeft aan hoe de tekst in het bovenste veld eruit ziet als u deze opslaat.',
'session_fail_preview' => "'''Uw bewerking is niet verwerkt, omdat de sessiegegevens verloren zijn gegaan.
Probeer het opnieuw.
# Info page
'pageinfo-title' => 'Informatie over "$1"',
-'pageinfo-not-current' => 'Gegegevens worden mogelijk alleen weergegeven voor de huidige versie.',
+'pageinfo-not-current' => 'Gegevens worden mogelijk alleen weergegeven voor de huidige versie.',
'pageinfo-header-basic' => 'Basisgegevens',
'pageinfo-header-edits' => 'Bewerkingsgeschiedenis',
'pageinfo-header-restrictions' => 'Paginabeveiliging',
'pageinfo-hidden-categories' => 'Verborgen {{PLURAL:$1|categorie|categorieën}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Gebruikt sjabloon|Gebruikte sjablonen}} ($1)',
'pageinfo-toolboxlink' => 'Paginagegevens',
+'pageinfo-redirectsto' => 'Verwijst door naar',
+'pageinfo-redirectsto-info' => 'informatie',
+'pageinfo-contentpage' => 'Geteld als pagina met inhoud',
+'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading' => 'Beveiligingen werken vanaf hier door',
+'pageinfo-protect-cascading-yes' => 'Ja',
+'pageinfo-protect-cascading-from' => 'Pagina is beveiligd vanuit een andere pagina',
# Skin names
'skinname-standard' => 'Klassiek',
* @file
*
* @author Boivie
+ * @author Cocu
* @author Dittaeva
* @author Diupwijk
* @author Eirik
'youhavenewmessages' => 'Du har $1 ($2).',
'newmessageslink' => 'nye meldingar',
'newmessagesdifflink' => 'sjå skilnad',
-'youhavenewmessagesfromusers' => 'Du har $1 frå {{PLURAL:$3|ein annan bruker| $3 brukarar}} ($2).',
+'youhavenewmessagesfromusers' => 'Du har $1 frå {{PLURAL:$3|ein annan brukar| $3 brukarar}} ($2).',
'youhavenewmessagesmanyusers' => 'Du har $1 frå mange brukarar ($2).',
'newmessageslinkplural' => '{{PLURAL:$1|ei ny melding|nye meldingar}}',
'newmessagesdifflinkplural' => 'siste {{PLURAL:$1|endringa|endringane}}',
* '''Firefox og Safari:''' Haldt nede ''Shift'' medan du klikkar på ''Oppdater'', eller trykk anten ''Ctrl-F5'' eller ''Ctrl-R'' (''⌘-R'' på Mac)
* '''Google Chrome:''' Trykk ''Ctrl-Shift-R'' (''⌘-Shift-R'' på Mac)
* '''Internet Explorer:''' Haldt nede ''Ctrl'' medan du klikkar ''Oppdater'', eller trykk ''Ctrl-F5.''
-* '''Konqueror:''' Klikk ''Oppdater'' eller trykk ''F5''.
* '''Opera:''' Tøm mellomlageret i ''Verktøy → Innstillingar''.",
'usercssyoucanpreview' => "'''Tips:''' Bruk «{{int:showpreview}}»-knappen for å teste den nye CSS- eller JavaScript-koden din før du lagrar.",
'userjsyoucanpreview' => "''Tips:''' Bruk «{{int:showpreview}}»-knappen for å teste den nye CSS- eller JavaScript-koden din før du lagrar.",
'note' => "'''Merk:'''",
'previewnote' => "'''Hugsa at dette berre er ei førehandsvising.'''
Endringane dine er ikkje lagra enno!",
-'continue-editing' => 'Endra vidare',
+'continue-editing' => 'Gå til endringsområdet',
'previewconflict' => 'Dette er ei førehandsvising av teksten i endringsboksen over, slik han vil sjå ut om du lagrar han',
'session_fail_preview' => "'''Orsak! Endringa di kunne ikkje lagrast. Ver venleg og prøv ein gong til. Dersom det framleis ikkje går, prøv å logge deg ut og inn att.'''",
'session_fail_preview_html' => "'''Beklagar! Endringa di kunne ikkje lagrast.'''
Sjekk gjerne loggføringa.',
'revdelete-only-restricted' => 'Feil under gøyming av objektet datert $2 $1: du kan ikkje gøyma objekt for administratorar utan å i tillegg velja eit av dei andre visingsvala.',
'revdelete-reason-dropdown' => '*Vanlege grunnar til sletting
-** Brot på opphavsrettar
-** Ikkje høveleg personleg informasjon
-** Mogleg falskt sladder',
+** Brot på opphavsrett
+** Kommentar eller personleg informasjon som ikkje høver seg
+** Brukarnamn som ikkje høver seg
+** Mogeleg falskt sladder',
'revdelete-otherreason' => 'Anna årsak, eller tilleggsårsak:',
'revdelete-reasonotherlist' => 'Annan grunn',
'revdelete-edit-reasonlist' => 'Endre grunnar til sletting',
# Diffs
'history-title' => '$1: Versjonshistorikk',
-'difference-title' => '$1: Skilnad mellom versjonar',
+'difference-title' => 'Skilnad mellom versjonar av «$1»',
'difference-title-multipage' => '$1 og $2: Skilnad mellom sidene',
'difference-multipage' => '(Skilnad mellom sider)',
'lineno' => 'Line $1:',
'editundo' => 'angre',
'diff-multi' => '({{PLURAL:$1|Éin mellomversjon|$1 mellomversjonar}} frå {{PLURAL:$2|éin brukar|$2 brukarar}} er ikkje {{PLURAL:$1|vist|viste}})',
'diff-multi-manyusers' => '({{PLURAL:$1|Ein mellomversjon|$1 mellomversjonar}} av meir enn $2 {{PLURAL:$2|brukar|brukarar}} er ikkje {{PLURAL:$1|vist|viste}})',
+'difference-missing-revision' => '{{PLURAL:$2|Éin versjon|$2 versjonar}} av skilnaden ($1) vart ikkje funne.
+
+Dette skriv seg som oftast frå at ein har fylgd ei forelda versjonslenkje til ei side som er sletta.
+Detaljar kan ein finna i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].',
# Search results
'searchresults' => 'Søkjeresultat',
'yourrealname' => 'Verkeleg namn:',
'yourlanguage' => 'Språk:',
'yourvariant' => 'Språkvariant for innhald:',
+'prefs-help-variant' => 'Varianten eller ortografien som du føretrekkjer at innhaldet i wikien vert vist på.',
'yournick' => 'Signatur:',
'prefs-help-signature' => 'Kommentarar på diskusjonssider bør alltid signerast med «<nowiki>~~~~</nowiki>», som vil konverterast til signaturen din med tidspunkt.',
'badsig' => 'Ugyldig råsignatur, sjekk HTML-kodinga.',
'upload-too-many-redirects' => 'URL-en inneheldt for mange omdirigeringar',
'upload-unknown-size' => 'Ukjend storleik',
'upload-http-error' => 'Ein HTTP-feil oppstod: $1',
+'upload-copy-upload-invalid-domain' => 'Kopiopplastingar er ikkje tilgjengelege frå dette domenet.',
# File backend
'backend-fail-stream' => 'Kunne ikkje strøyma fila «$1».',
'backend-fail-backup' => 'Kunne ikkje tryggingskopiera fila «$1».',
'backend-fail-notexists' => 'Fila $1 finst ikkje.',
+'backend-fail-hashes' => 'Kunne ikkje henta filnummer for samanlikning.',
'backend-fail-notsame' => 'Ein ikkje-identisk fil finst alt på «$1».',
'backend-fail-invalidpath' => '$1 er ikkje ein gyldig lagringsstig.',
'backend-fail-delete' => 'Kunne ikkje sletta fila «$1».',
'backend-fail-read' => 'Kunne ikkje lesa fila «$1».',
'backend-fail-create' => 'Kunne ikkje oppretta fila «$1».',
'backend-fail-maxsize' => 'Kunne ikkje skriva fila «$1» av di ho er større enn {{PLURAL:$2|éin byte|$2 byte}}.',
+'backend-fail-readonly' => "Largingsbaksystemet «$1» er for tida skriveverna. Oppgjeven grunn er: «''$2''»",
+'backend-fail-synced' => 'Fila «$1» er i ei inkonsistent stode i dei interne lagringsbaksystema',
+'backend-fail-connect' => 'Kunne ikkje kopla til filbaksystemet «$1».',
+'backend-fail-internal' => 'Ein ukjend feil oppstod i lagringsbaksystemet «$1».',
+'backend-fail-contenttype' => 'Kunne ikkje avgjera innhaldstypen til fila som skulle lagrast på «$1».',
+'backend-fail-batchsize' => 'Baksystemet vart gjeve ei gruppe med $1 {{PLURAL:$1|filoperasjon|filoperasjonar}}; grensa er $2 {{PLURAL:$2|operasjon|operasjonar}}.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Kunne ikkje kopla til journaldatabasen for lagringsbaksystemet «$1».',
+'filejournal-fail-dbquery' => 'Kunne ikkje oppdatera journaldatabasen for lagringsbaksystemet «$1».',
# Lock manager
'lockmanager-notlocked' => 'Kunne ikkje låsa opp «$1» av di han ikkje er låst',
Ho kan ikkje tryggingskontrollerast.',
# Special:UploadStash
+'uploadstash' => 'Lasta opp løynd samling',
+'uploadstash-summary' => 'Denne sida gjev tilgang til filer som er opplasta (eller i ferd med å verta det), men som ikkje er publiserte til wikien. Desse filene er ikkje synlege for andre enn opplastaren.',
+'uploadstash-clear' => 'Fjerna filer i den løynde samlinga',
+'uploadstash-nofiles' => 'Du har ingen filer i den løynde samlinga.',
+'uploadstash-badtoken' => 'Utføringa av handlinga lukkast ikkje; kan henda av di endringsrettane dine har gått ut. Freista om att.',
+'uploadstash-errclear' => 'Fjerning av filene var mislykka.',
'uploadstash-refresh' => 'Oppdater fillista',
+'invalid-chunk-offset' => 'Ugild delforskuving',
# img_auth script messages
'img-auth-accessdenied' => 'Tilgjenge avslått',
-'img-auth-nopathinfo' => 'PATH_INFO manglar.
-Filtenaren din er ikkje sett opp for å gje denne informasjonen.
-Han kan vera CGI-basert og stør ikkje img_auth.
+'img-auth-nopathinfo' => 'PATH_INFO saknar.
+Filtenaren din er ikkje sett opp for å gjeva denne informasjonen.
+Han kan vera CGI-basert og ikkje stø img_auth.
Sjå https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
'img-auth-notindir' => 'Den ynskte filstien er ikkje i den oppsette opplastingskatalogen',
'img-auth-badtitle' => 'Kan ikkje laga ein gyldig ttitel ut frå "$1".',
Denne wikien er sett opp som ein ålmennt tilgjengeleg wiki.
For best tryggleik, er img_auth.php sett ut av funksjon.',
'img-auth-noread' => 'Brukaren har ikkje rettar til å lesa «$1».',
+'img-auth-bad-query-string' => 'URL-en har ein ugild spørjestreng.',
# HTTP errors
'http-invalid-url' => 'Ugyldig URL: $1',
Sjå [$2 filskildringssida] for meir informasjon.',
'sharedupload-desc-here' => 'Denne fila er frå $1 og kan verta nytta av andre prosjekt.
Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
+'sharedupload-desc-edit' => 'Fila er frå $1 og kan vera nytta på andre prosjekt.
+Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
+'sharedupload-desc-create' => 'Fila er frå $1 og kan vera nytta på andre prosjekt.
+Du vil kan henda endra skildringa på [$2 filskildringssida] hennar der.',
'filepage-nofile' => 'Det finst ikkje noka fil med dette namnet.',
'filepage-nofile-link' => 'Inga fil med dette namnet finst, men du kan [$1 lasta ho opp].',
'uploadnewversion-linktext' => 'Last opp ny versjon av denne fila',
'shared-repo-from' => 'frå $1',
'shared-repo' => 'eit sams fillager',
-'upload-disallowed-here' => 'Diverre kan du ikkje overskriva dette biletet.',
+'upload-disallowed-here' => 'Du kan ikkje overskriva denne fila.',
# File reversion
'filerevert' => 'Rulla attende $1',
'statistics-edits' => 'Endringar sidan {{SITENAME}} vart oppretta',
'statistics-edits-average' => 'Gjennomsnittleg tal på endringar per side',
'statistics-views-total' => 'Totalt visningstal',
+'statistics-views-total-desc' => 'Visingar av sider som ikkje finst og spesialsider er ikkje tekne med',
'statistics-views-peredit' => 'Visingar per endring',
'statistics-users' => 'Registrerte [[Special:ListUsers|brukarar]]',
'statistics-users-active' => 'Aktive brukarar',
'wantedpages' => 'Etterspurde sider',
'wantedpages-badtitle' => 'Ugyldig tittel mellom resultata: $1',
'wantedfiles' => 'Etterspurde filer',
+'wantedfiletext-cat' => 'Desse filene er nytta men finst ikkje. Filer frå utannettstadlege samlingar kan vera lista opp sjølv om dei finst. Slike falske positivar vert <del>strokne ut</del>. Sider som nyttar filer som ikkje finst vert lista opp i [[:$1]].',
+'wantedfiletext-nocat' => 'Desse filene er nytta men finst ikkje. Filer frå utannettstadlege samlingar kan vera lista opp sjølv om dei finst. Slike falske positivar vert <del>strokne ut</del>.',
'wantedtemplates' => 'Etterspurde malar',
'mostlinked' => 'Sidene med flest lenkjer til seg',
'mostlinkedcategories' => 'Mest brukte kategoriar',
'linksearch-pat' => 'Søkemønster:',
'linksearch-ns' => 'Namnerom:',
'linksearch-ok' => 'Søk',
-'linksearch-text' => 'Jokerteikn som «*.wikipedia.org» kan nyttast.<br />Støtta protokollar: <code>$1</code>',
+'linksearch-text' => 'Jokerteikn som «*.wikipedia.org» kan nyttast.
+Det er påkravt med eit toppnivådomene, til dømes «*.org».<br />
+Støtta protokollar: <code>$1</code> (ikkje legg til nokon av desse i søket ditt)',
'linksearch-line' => '$2 lenkjer til $1',
'linksearch-error' => 'Jokerteikn kan berre nyttast føre tenarnamnet.',
$NEWPAGE
-Bidragsytaren sitt endringssamandrag: $PAGESUMMARY $PAGEMINOREDIT
+Endringssamandraget var: $PAGESUMMARY $PAGEMINOREDIT
-Du kan kontakte bidragsytaren gjennom:
-e-post: $PAGEEDITOR_EMAIL , eller
+Kontakta brukaren:
+e-post: $PAGEEDITOR_EMAIL
wiki: $PAGEEDITOR_WIKI
-Du får ikkje fleire endringsmeldingar om denne sida før du har vitja henne på nytt.
-Du kan også tilbakestille endringsmeldingsstatus for alle sidene på overvakingslista di.
+Du får ikkje fleire endringsvarsel minder du vitjar sida på nytt.
+Du kan dessutan nullstilla varselflagga for alle sidene på overvakingslista di.
- Helsing det venlege {{SITENAME}}-meldingssystemet ditt
+Helsing det venlege meldingssystemet ditt for {{SITENAME}}
--
-For å endre innstillingane for overvakingslista di, gå til
+For å endra innstillingane dine for e-postvarsling, vitja
+{{canonicalurl:{{#special:Preferences}}}}
+
+For å endra innstillingane for overvakingslista di, vitja
{{canonicalurl:{{#special:EditWatchlist}}}}
-For hjelp og meir informasjon:
+For å fjerna sita frå overvakingslista di, vitja
$UNWATCHURL
-Tilbakemeldingar og anna hjelp:
+Attendemelding og hjelp:
{{canonicalurl:{{MediaWiki:Helppage}}}}',
# Delete
'undeletedrevisions' => '{{PLURAL:$1|Éin versjon|$1 versjonar}} attoppretta.',
'undeletedrevisions-files' => '{{PLURAL:$1|Éin versjon|$1 versjonar}} og {{PLURAL:$2|éi fil|$2 filer}} er attoppretta',
'undeletedfiles' => '{{PLURAL:$1|Éi fil|$1 filer}} er attoppretta',
-'cannotundelete' => 'Feil ved attoppretting, andre kan allereie ha attoppretta sida.',
+'cannotundelete' => 'Attopprettinga gjekk ikkje:
+$1',
'undeletedpage' => "'''$1 er attoppretta'''
Sjå [[Special:Log/delete|sletteloggen]] for eit oversyn over sider som nyleg er sletta eller attoppretta.",
'immobile-target-namespace-iw' => 'Interwikilenkja er ikkje eit gyldig mål for flytting av sider.',
'immobile-source-page' => 'Denne sida kan ikkje flyttast.',
'immobile-target-page' => 'Kan ikkje flytte til det målnamnet.',
+'bad-target-model' => 'Det ynskte målet nyttar ein annan innhaldsmodell. Kan ikkje konvertera frå $1 til $2.',
'imagenocrossnamespace' => 'Kan ikkje flytte bilete til andre namnerom enn biletnamnerommet',
'nonfile-cannot-move-to-file' => 'Kan ikkje flytta ikkje-filer til filnamnerommet.',
'imagetypemismatch' => 'Den nye filendinga høver ikkje til filtypen',
'javascripttest-pagetext-frameworks' => 'Vel eitt av dei fylgjande utrøyningsrammeverka: $1',
'javascripttest-pagetext-skins' => 'Vel ei drakt som utrøyningane skal køyrast med:',
'javascripttest-qunit-intro' => 'Sjå [$1 utrøyningsdokumentasjon] på mediawiki.org.',
+'javascripttest-qunit-heading' => 'MediaWiki JavaScript QUnit testsuite',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'Brukarsida di',
# Info page
'pageinfo-title' => 'Informasjon om «$1»',
+'pageinfo-not-current' => 'Informasjon vert berre vist for den gjeldande versjonen.',
'pageinfo-header-basic' => 'Grunnleggjande informasjon',
'pageinfo-header-edits' => 'Endringshistorikk',
'pageinfo-header-restrictions' => 'Sidevern',
'pageinfo-magic-words' => '{{PLURAL:$1|Trylleord}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Løynd kategori|Løynde kategoriar}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Inkludert mal|Inkluderte malar}} ($1)',
+'pageinfo-toolboxlink' => 'Sideinformasjon',
+'pageinfo-redirectsto' => 'Omdirigerer til',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Tald som ei innhaldsside',
+'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading' => 'Djupvern byrjar her',
+'pageinfo-protect-cascading-yes' => 'Ja',
+'pageinfo-protect-cascading-from' => 'Djupvern byrjar i',
# Skin names
'skinname-standard' => 'Klassisk',
'exif-headline' => 'Overskrift',
'exif-credit' => 'Opphavrettseigar/filgjevar',
'exif-source' => 'Kjelde',
+'exif-editstatus' => 'Den redaksjonelle stoda til biletet',
'exif-urgency' => 'Prioritet',
+'exif-locationdest' => 'Avbilda stad',
+'exif-locationdestcode' => 'Koden til staden som er avbilda',
'exif-objectcycle' => 'Tid på dagen mediet er meint for',
'exif-contact' => 'Kontaktinformasjon',
'exif-writer' => 'Forfattar',
'exif-languagecode' => 'Språk',
'exif-iimversion' => 'IIM-versjon',
'exif-iimcategory' => 'Kategori',
+'exif-iimsupplementalcategory' => 'Tilleggskategoriar',
'exif-datetimeexpires' => 'Skal ikkje nyttast etter',
'exif-datetimereleased' => 'Frigjeve',
+'exif-originaltransmissionref' => 'Opphavleg stadkode for overføring',
+'exif-identifier' => 'Kjennemerke',
'exif-lens' => 'Objektiv',
'exif-serialnumber' => 'Serienummeret på kameraet',
'exif-cameraownername' => 'Eigar av kameraet',
'exif-copyrighted' => 'Opphavsrettsstode',
'exif-copyrightowner' => 'Opphavsrettseigar',
'exif-usageterms' => 'Bruksvilkår',
+'exif-originaldocumentid' => 'Unik ID til originaldokumentet',
'exif-licenseurl' => 'URL for opphavsrettsløyve',
'exif-morepermissionsurl' => 'Alternativ løyveinformasjon',
'exif-attributionurl' => 'Når dette verket vert nytta, lenkja til',
$5
+Denne stadfestingskoden vert forelda $4.',
+'confirmemail_body_changed' => 'Nokon, truleg deg, frå IP-adressa $1, har endra e-postadressa til kontoen «$2» på {{SITENAME}} til denne e-postadressa.
+
+For å stadfesta at denne kontoen faktisk høyrer til deg, og for å slå på
+funksjonar knytte til e-post på {{SITENAME}}, opna denne lenkja i nettlesaren din:
+
+$3
+
+Om brukarkontoen *ikkje* høyrer til deg, fylg denne lenkja for å bryta av stadfestinga av e-postadressa:
+
+$5
+
+Denne stadfestingskoden vert forelda $4.',
+'confirmemail_body_set' => 'Nokon, truleg deg, frå IP-adressa $1, har sett e-postadressa til kontoen «$2» på {{SITENAME}} til denne e-postadressa.
+
+For å stadfesta at denne kontoen faktisk høyrer til deg, og for å slå på
+funksjonar knytte til e-post på {{SITENAME}}, opna denne lenkja i nettlesaren din:
+
+$3
+
+Om brukarkontoen *ikkje* høyrer til deg, fylg denne lenkja for å bryta av stadfestinga av e-postadressa:
+
+$5
+
Denne stadfestingskoden vert forelda $4.',
'confirmemail_invalidated' => 'Stadfestinga av e-postadresse er avbrote',
'invalidateemail' => 'Avbryt stadfestinga av e-postadressa',
'filepath' => 'Filsti',
'filepath-page' => 'Fil:',
'filepath-submit' => 'Gå',
-'filepath-summary' => 'Denne spesialsida gjev den fullstendige stien for ei fil. Bilete vert vist i oppløysing; andre filtypar vert starta direkte i dei tilknytte programma sine.
-
-Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
+'filepath-summary' => 'Denne spesialsida svarar med den fullstendige stigen til ei fil.
+Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei tilknytte programma sine.',
# Special:FileDuplicateSearch
'fileduplicatesearch' => 'Søk etter duplikatfiler',
'logentry-delete-delete' => '$1 sletta sida $3',
'logentry-delete-restore' => '$1 attoppretta sida $3',
'logentry-delete-event' => '$1 endra synlegdomen av {{PLURAL:$5|éi loggoppføring|$5 loggoppføringar}} på $3: $4',
-'logentry-delete-revision' => '$1 endra synlegdomen av {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
-'logentry-delete-event-legacy' => '$1 endra synlegdomen av loggoppføringar på $3',
-'logentry-delete-revision-legacy' => '$1 endra synlegdomen av versjonar på sida $3',
+'logentry-delete-revision' => '$1 endra synlegdomen til {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
+'logentry-delete-event-legacy' => '$1 endra synlegdomen til loggoppføringar på $3',
+'logentry-delete-revision-legacy' => '$1 endra synlegdomen til versjonar på sida $3',
'logentry-suppress-delete' => '$1 gøymde sida $3',
+'logentry-suppress-event' => '$1 endra i løyndom synlegdomen til {{PLURAL:$5|éi logghending|$5 logghendingar}} på $3: $4',
+'logentry-suppress-revision' => '$1 endra i løyndom synlegdomen til {{PLURAL:$5|éin versjon|$5 versjonar}} på sida $3: $4',
+'logentry-suppress-event-legacy' => '$1 endra i løyndom synlegdomen til logghendingar på $3',
+'logentry-suppress-revision-legacy' => '$1 endra i løyndom synlegdomen til versjonar på sida $3',
'revdelete-content-hid' => 'innhald gøymt',
'revdelete-summary-hid' => 'endringsamandrag gøymt',
'revdelete-uname-hid' => 'brukarnamn gøymt',
* @author Fryed-peach
* @author Jfblanc
* @author Kaganer
+ * @author McDutchie
* @author Spacebirdy
* @author Горан Анђелковић
* @author לערי ריינהארט
'timezoneregion-indian' => 'Ocean Indian',
'timezoneregion-pacific' => 'Ocean Pacific',
'allowemail' => 'Autorizar lo mandadís de corrièr electronic venent d’autres utilizaires',
-'prefs-searchoptions' => 'Opcions de recèrca',
+'prefs-searchoptions' => 'Recèrca',
'prefs-namespaces' => 'Noms d’espacis',
'defaultns' => 'Autrament recercar dins aquestes espacis de noms :',
'default' => 'defaut',
ଆପଣ [[Special:Search/{{PAGENAME}}|ଏହି ଲେଖାଟିର ନାଆଁ]] ବାକି ପୃଷ୍ଠାମାନଙ୍କରେ ଖୋଜି ପାରନ୍ତି,
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}ରେ ଯୋଡ଼ାଯାଇଥିବା ବାକି ପୃଷ୍ଠାସବୁକୁ ଖୋଜି ପାରନ୍ତି],
କିମ୍ବା [{{fullurl:{{FULLPAGENAME}}|action=edit}} ଏହି ପୃଷ୍ଠାଟିକୁ ବଦଳାଇ ପାରନ୍ତି]</span> ।',
-'noarticletext-nopermission' => 'ଏହି ପୃଷ୍ଠାଟିରେ କିଛି ବି ଲେଖା ନାହିଁ ।
-ଆପଣ [[Special:Search/{{PAGENAME}}|ଏହି ଲେଖାଟିର ନାଆଁ]] ବାକି ପୃଷ୍ଠାମାନଙ୍କରେ ଖୋଜି ପାରନ୍ତି,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}ରେ ଯୋଡ଼ାଯାଇଥିବା ବାକି ପୃଷ୍ଠାସବୁକୁ ଖୋଜି ପାରନ୍ତି],
-କିମ୍ବା [{{fullurl:{{FULLPAGENAME}}|action=edit}} ଏହି ପୃଷ୍ଠାଟିକୁ ବଦଳାଇ ପାରନ୍ତି]</span> ।',
+'noarticletext-nopermission' => 'à¬\8fବà\87 à¬\8fହି ପà\83ଷà\8dଠାà¬\9fିରà\87 à¬\95ିà¬\9bି ବି ଲà\87à¬\96ା ନାହିà¬\81 ।
+ଆପଣ [[Special:Search/{{PAGENAME}}|ଏହି ଲେଖାଟିର ନାଆଁ]] ବାକି ପୃଷ୍ଠାମାନଙ୍କରେ ଖୋଜି ପାରନ୍ତି, କିମ୍ବା
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}ରେ ଯୋଡ଼ାଯାଇଥିବା ବାକି ପୃଷ୍ଠାସବୁକୁ ଖୋଜି ପାରନ୍ତି]
+</span>, କିନ୍ତୁ ଏହି ପୃଷ୍ଠାଟିକୁ ଆପଣ ତିଆରି କରିପାରିବେ ନାହିଁ ।',
'missing-revision' => '"{{PAGENAME}}" ନାମରେ ଥିବା ପୃଷ୍ଠାଟିର #$1 ପୁନରାବୃତ୍ତି ନାହିଁ ।
ପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।
'pageinfo-article-id' => 'ପୃଷ୍ଠା ଆଇଡ଼ି',
'pageinfo-views' => 'ଦେଖଣା ସଂଖ୍ୟା',
'pageinfo-watchers' => 'ଦେଖଣାହାରି ସଂଖ୍ୟା',
-'pageinfo-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
+'pageinfo-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା',
'pageinfo-authors' => 'ନିଆରା ଲେଖକଙ୍କ ସଂଖ୍ୟା',
+'pageinfo-contentpage-yes' => 'ହଁ',
+'pageinfo-protect-cascading-yes' => 'ହଁ',
# Patrolling
'markaspatrolleddiff' => 'ଜଗାଯାଇଅଛି ବୋଲି ଚିହ୍ନିତ କରାଗଲା',
'duration-days' => '$1 {{PLURAL:$1|ଦିନ|ଦିନଗୁଡିକ}}',
'duration-weeks' => '$1 {{PLURAL: $1|ସପ୍ତାହ|ସପ୍ତାହଗୁଡିକ}}',
'duration-years' => '$1 {{PLURAL:$1|year|years}}',
-'duration-decades' => '$1 {{PLURAL:$1|decade|decades}',
+'duration-decades' => '$1 {{PLURAL:$1|decade|decades}}',
'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
'badtitletext' => 'Æрдомд фарсы ном уыд рæдыдимæ кæнæ афтид кæнæ та йæ æхсæн-æвзаг æви йæ интервики æрвитæн раст нæ уыд.
Гæнæн ис Номы ис ахæм дамгъæтæ, кæдон уым æвæрын нæй гæнæн.',
'perfcached' => 'Бындæр цы рардтæ ис, уыдон сты кешгонд æмæ гæнæн ис базæронд сты. Кешы гæнæн ис уа æппæты фылдæр {{PLURAL:$1|иу фæстиуæг|$1 фæстиуæджы}}.',
-'perfcachedts' => 'Бындæр цы рардтæ ис, уыдон сты кешгонд æмæ фæстаг хатт нæуæггонд æрцыдысты $1. Кешы гæнæн ис уа æппæты фылдæр {{PLURAL:$1|иу фæстиуæг|$1 фæстиуæджы}}.',
+'perfcachedts' => 'Бындæр цы рардтæ ис, уыдон сты кешгонд æмæ фæстаг хатт нæуæггонд æрцыдысты $1. Кешы гæнæн ис уа æппæты фылдæр {{PLURAL:$4|иу фæстиуæг|$4 фæстиуæджы}}.',
'querypage-no-updates' => 'Ацы фарсы нæуæгкæнын ныртæккæ хицæн у.
Цы рардтæ дзы ис, уыдон нæуæг нæ кæндзысты.',
'wrong_wfQuery_params' => 'Рæдыд параметртæ wfQuery() функцийæн<br />
'qbbrowse' => 'ਬਰਾਊਜ਼',
'qbedit' => 'ਸੋਧ',
'qbpageoptions' => 'ਇਹ ਸਫ਼ਾ',
-'qbpageinfo' => 'ਭਾਗ',
'qbmyoptions' => 'ਮੇਰੇ ਸਫ਼ੇ',
'qbspecialpages' => 'ਖ਼ਾਸ ਸਫ਼ਾ',
'faq' => 'ਅਕਸਰ ਪੁੱਛੇ ਜਾਣ ਵਾਲ਼ੇ ਸਵਾਲ',
'qbfind' => 'Finne',
'qbedit' => 'Ennere',
'qbpageoptions' => 'Des Blatt',
-'qbpageinfo' => 'Daade vun dem Blatt',
'qbmyoptions' => 'Mei Bledder',
'qbspecialpages' => 'Besunnere Bledder',
'faq' => 'FAQ',
'otherlanguages' => 'In annere Sproche',
'redirectedfrom' => '(Wairrerglaidet vun $1)',
'redirectpagesub' => 'Wairerlaidungssaid',
-'lastmodifiedat' => 'Die Said isch zum ledschde Mol gänneret woore am $1, am $2.',
+'lastmodifiedat' => 'Die Said isch zum ledschde Mol gänneret worre am $1, am $2.',
'viewcount' => 'Die Seid isch bis jetzerd {{PLURAL:$1|$1|$1}} mol uffgerufe worre.',
'jumpto' => 'Spring zu:',
'jumptonavigation' => 'Navigation',
# General errors
'missing-article' => 'De Text fer „$1“ $2 isch in de Datebank nit gfunne worre.
-Normalerwais hääßt des, dass die Said glescht woore isch.
+Normalerwais hääßt des, dass die Said gleschd worre isch.
Wenn s des nit isch, hoscht villaicht en Fehler in de Datebank gfunne.
Bitte meld des an e [[Special:ListUsers/sysop|Adminischtrator]], un gebb d URL dezu aa.',
'template-semiprotected' => '(halb-gschitzt)',
'hiddencategories' => 'Die Said ghert zu {{PLURAL:$1|1 versteckelte Kategorie|$1 versteckelte Kategorie}}:',
'permissionserrorstext-withaction' => 'Du därfscht nid $2, aus {{PLURAL:$1|dem Grund|denne Grind}}:',
-'moveddeleted-notice' => 'Die Said isch glescht worre.
+'moveddeleted-notice' => 'Die Said isch gleschd worre.
De Leschaidrach fa die Said isch do unne als Kwell aagewwe.',
# History pages
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|Ännerung|Ännerunge}}',
-'recentchanges' => 'Was zuletschd gemacht worre isch',
+'recentchanges' => 'Was zuletschd gemachd worre isch',
'recentchanges-legend' => 'Optione vun de Aazaich',
'recentchanges-feed-description' => 'Di letschte Ännerunge vun {{SITENAME}} in des Feed aigewwe.',
'rcnote' => "Aagezaicht {{PLURAL:$1|werd '''1''' Ännerung|werre die letschte '''$1''' Ännerunge}} {{PLURAL:$2|vum letschte Dach|in de letschte '''$2''' Dache}} (Stand: $4, $5)",
'tooltip-n-randompage' => 'E zufälliche Said lade',
'tooltip-n-help' => 'De Ort zum rausfinne',
'tooltip-t-whatlinkshere' => 'Lischt vun alle Wikisaide, wu do her verlinkt sinn',
-'tooltip-t-recentchangeslinked' => 'Letschte Ännerunge in Saide, wu vun do verlinkt sin',
+'tooltip-t-recentchangeslinked' => 'Letschde Ännerunge in Saide, wu vun do verlinkt sin',
'tooltip-feed-rss' => 'RSS feed fer die Said',
'tooltip-feed-atom' => 'Atom feed fer die Said',
'tooltip-t-contributions' => 'Die letschte Baidräch vun däm Benutzer aagucke',
'note' => "'''Uwaga:'''",
'previewnote' => "'''To jest tylko podgląd'''
Zmiany nie zostały jeszcze zapisane!",
-'continue-editing' => 'Kontynuuj edycję',
+'continue-editing' => 'Przejdź do pola edycji',
'previewconflict' => 'Podgląd odnosi się do tekstu z górnego pola edycji. Tak będzie wyglądać strona, jeśli zdecydujesz się ją zapisać.',
'session_fail_preview' => "'''Uwaga! Serwer nie może przetworzyć tej edycji z powodu utraty danych sesji.
Spróbuj jeszcze raz.
'edit-already-exists' => 'Nie udało się stworzyć nowej strony.
Strona już istnieje.',
'defaultmessagetext' => 'Domyślny tekst komunikatu',
+'content-failed-to-parse' => 'Format zawartości typu $2 (dla modelu: $1) nieprawidłowy: $3',
+'invalid-content-data' => 'Zawartość strony zawiera nieprawidłowe dane',
+'content-not-allowed-here' => 'Zawartość tego typu ($1) nie jest dozwolona na stronie [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'wikitekst',
+'content-model-text' => 'zwykły tekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Uwaga! Ta strona zawiera zbyt wiele wywołań złożonych obliczeniowo funkcji parsera.
'uploadnewversion-linktext' => 'Załaduj nowszą wersję tego pliku',
'shared-repo-from' => 'z $1',
'shared-repo' => 'współdzielone zasoby',
-'upload-disallowed-here' => 'Niestety, nie możesz nadpisać tego pliku.',
+'upload-disallowed-here' => 'Nie możesz nadpisać tego pliku.',
# File reversion
'filerevert' => 'Przywracanie $1',
'undeletedrevisions' => 'odtworzono {{PLURAL:$1|1 wersję|$1 wersje|$1 wersji}}',
'undeletedrevisions-files' => 'odtworzono $1 {{PLURAL:$1|wersję|wersje|wersji}} i $2 {{PLURAL:$2|plik|pliki|plików}}',
'undeletedfiles' => 'odtworzył $1 {{PLURAL:$1|plik|pliki|plików}}',
-'cannotundelete' => 'Odtworzenie nie powiodło się.
-Ktoś inny prawdopodobnie odtworzył już tę stronę.',
+'cannotundelete' => 'Odtworzenie nie powiodło się:
+$1',
'undeletedpage' => "'''Odtworzono stronę $1.'''
Zobacz [[Special:Log/delete|rejestr usunięć]], jeśli chcesz przejrzeć ostatnie operacje usuwania i odtwarzania stron.",
'immobile-target-namespace-iw' => 'Link interwiki jest nieprawidłowym tytułem, pod który miałaby być przeniesiona strona.',
'immobile-source-page' => 'Tej strony nie można przenieść.',
'immobile-target-page' => 'Nie można przenieść pod wskazany tytuł.',
+'bad-target-model' => 'Strona docelowa używa innego modelu zawartości. Konwersja $1 → $2 nie jest możliwa.',
'imagenocrossnamespace' => 'Nie można przenieść grafiki do przestrzeni nazw nie przeznaczonej dla grafik',
'nonfile-cannot-move-to-file' => 'Nie można przenieść obiektu nie będącego plikiem do przestrzeni nazw „{{ns:file}}“',
'imagetypemismatch' => 'Nowe rozszerzenie nazwy pliku jest innego typu niż zawartość',
# Info page
'pageinfo-title' => 'Informacje o „$1“',
+'pageinfo-not-current' => 'Informacje mogą być wyświetlane tylko dla najnowszej wersji strony.',
'pageinfo-header-basic' => 'Podstawowe informacje',
'pageinfo-header-edits' => 'Historia edycji',
'pageinfo-header-restrictions' => 'Zmień zabezpieczenie',
'pageinfo-magic-words' => 'Magiczne {{PLURAL:$1|słowo|słowa|słowa}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie|Ukryte kategorie}} ($1)',
'pageinfo-templates' => 'Wykorzystywan{{PLURAL:$1|y szablon|e szablony}} ($1)',
+'pageinfo-toolboxlink' => 'Informacje o tej stronie',
+'pageinfo-redirectsto' => 'Przekierowuje na',
+'pageinfo-redirectsto-info' => 'informacje',
+'pageinfo-contentpage' => 'Liczona jako artykuł',
+'pageinfo-contentpage-yes' => 'Tak',
+'pageinfo-protect-cascading' => 'Zabezpieczona z włączoną opcją dziedziczenia',
+'pageinfo-protect-cascading-yes' => 'Tak',
+'pageinfo-protect-cascading-from' => 'Zabezpieczenie dziedziczone z',
# Skin names
'skinname-standard' => 'Standardowa',
# Scary transclusion
'scarytranscludedisabled' => '[Transkluzja przez interwiki jest wyłączona]',
'scarytranscludefailed' => '[Pobranie szablonu dla $1 nie powiodło się]',
+'scarytranscludefailed-httpstatus' => '[Pobranie szablonu dla $1 nie powiodło się: HTTP $2]',
'scarytranscludetoolong' => '[zbyt długi adres URL]',
# Delete conflict
'note' => "'''NÒTA:'''",
'previewnote' => "'''Che a ten-a present che costa-sì a l'é mach na preuva.'''
Ij sò cambi a son anco' pa stàit salvà!",
-'continue-editing' => 'Continua a modifiché',
+'continue-editing' => 'Andé a la zòna ëd modìfica',
'previewconflict' => "Costa preuva a-j mostra ël test dl'artìcol ambelessì dzora. Se a sërn dë salvelo, a l'é parèj che a lo s-ciairëran ëdcò tuti j'àutri Utent.",
'session_fail_preview' => "'''Darmagi! I l'oma pa podù processé soa modìfica per via che a son përdusse për la stra ij dat ëd session.
Për piasì che a preuva n'àutra vira. Se a dovèissa mai torna riveje sossì, che a preuva a seurte dal sistema e peuj torna a rintré.'''",
'shared-repo-from' => 'da $1',
'shared-repo' => "n'archivi condivis",
'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
-'upload-disallowed-here' => 'Për maleur a peul pa rampiassé sta figura.',
+'upload-disallowed-here' => 'A peul pa rampiassé cost archivi.',
# File reversion
'filerevert' => "Buté torna $1 tanme ch'a l'era",
# Info page
'pageinfo-title' => 'Anformassion për «$1»',
+'pageinfo-not-current' => "J'anformassion a peulo mach esse smonùe për la revision an cors.",
'pageinfo-header-basic' => 'Anformassion ëd base',
'pageinfo-header-edits' => 'Modìfiche',
'pageinfo-header-restrictions' => 'Protession ëd la pàgina',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorìa|Categorìe}} stërmà ($1)',
'pageinfo-templates' => '{{PLURAL:$1|stamp contnù|stamp contnù}} ($1)',
'pageinfo-toolboxlink' => 'Anformassion an sla pàgina',
+'pageinfo-redirectsto' => 'Ridiression-a a',
+'pageinfo-redirectsto-info' => 'anformassion',
+'pageinfo-contentpage' => 'Contà com na pagina ëd contnù',
+'pageinfo-contentpage-yes' => 'É!',
+'pageinfo-protect-cascading' => 'Le protession a son a cascada da sì',
+'pageinfo-protect-cascading-yes' => 'É!',
+'pageinfo-protect-cascading-from' => 'Le protession a son a cascada da',
# Patrolling
'markaspatrolleddiff' => 'Marché coma verificà',
'exif-exposureprogram-2' => 'Programa normal',
'exif-exposureprogram-3' => 'Priorità ëd temp',
'exif-exposureprogram-4' => 'Priorità ëd diaframa',
-'exif-exposureprogram-5' => "Programa creativ (coregiù për avej pì ëd profondità 'd camp)",
-'exif-exposureprogram-6' => "Programa d'assion (coregiù për avej ël temp pì curt che as peul)",
-'exif-exposureprogram-7' => 'Programa ritrat (për fotografìe pijaite da davsin, con lë sfond fòra feu)',
+'exif-exposureprogram-5' => "Programa creativ (coregiù për avèj pì ëd profondità 'd camp)",
+'exif-exposureprogram-6' => "Programa d'assion (coregiù për avèj ël temp pì curt che as peul)",
+'exif-exposureprogram-7' => 'Programa ritrat (për fotografìe pijàite da davzin, con lë sfond fòra feu)',
'exif-exposureprogram-8' => 'Panorama (sogèt lontan e con lë sfond a feu)',
'exif-subjectdistance-value' => '$1 méter',
-'exif-meteringmode-0' => 'Pa conossù',
+'exif-meteringmode-0' => 'Dësconossù',
'exif-meteringmode-1' => 'Media',
'exif-meteringmode-2' => 'Media centrà',
-'exif-meteringmode-3' => 'Quadrèt (Spot)',
-'exif-meteringmode-4' => 'Vàire quadrèt (MultiSpot)',
-'exif-meteringmode-5' => 'Schema (Pattern)',
+'exif-meteringmode-3' => 'Quadrèt',
+'exif-meteringmode-4' => 'Vàire quadrèt',
+'exif-meteringmode-5' => 'Schema',
'exif-meteringmode-6' => 'Parsial',
'exif-meteringmode-255' => "n'àutr",
-'exif-lightsource-0' => 'Pa conossù',
+'exif-lightsource-0' => 'Dësconossùa',
'exif-lightsource-1' => 'Lus dël dì',
'exif-lightsource-2' => 'Fluoressenta',
'exif-lightsource-3' => 'Lus al tungsten (a incandessensa)',
-'exif-lightsource-4' => 'Flash',
+'exif-lightsource-4' => 'Lòsna',
'exif-lightsource-9' => 'Temp bel',
-'exif-lightsource-10' => 'Temp an-nivolà',
+'exif-lightsource-10' => 'Temp nìvol',
'exif-lightsource-11' => 'Ombra',
'exif-lightsource-12' => 'Fluoressensa tipo lus dël dì (D 5700 – 7100K)',
'exif-lightsource-13' => 'Fluoressensa bianca për ël dì (N 4600 – 5400K)',
'exif-lightsource-21' => 'Anluminant D65',
'exif-lightsource-22' => 'Anluminant D75',
'exif-lightsource-23' => 'Anluminant D50',
-'exif-lightsource-24' => 'Làmpada da studio ISO al tungsten',
-'exif-lightsource-255' => "Aùtra sorgiss d'anluminassion",
+'exif-lightsource-24' => 'Làmpada da studi ISO al tungsten',
+'exif-lightsource-255' => "Àutra sorgiss d'anluminassion",
# Flash modes
-'exif-flash-fired-0' => "Ël flash a l'é pa scatà",
-'exif-flash-fired-1' => 'Flash scatà',
-'exif-flash-return-0' => "Gnun-e fonsion ëd rilevassion dl'artorn ëd lë stroboscòpi",
-'exif-flash-return-2' => "lus stoboscòpica d'artorn pa arlevà",
-'exif-flash-return-3' => "lus stroboscòpica d'artorn arlevà",
-'exif-flash-mode-1' => 'scat dël flash sforsà',
+'exif-flash-fired-0' => "La lòsna a l'é nen ëscatà",
+'exif-flash-fired-1' => "La lòsna a l'ha scatà",
+'exif-flash-return-0' => "gnun ëstroboscòpi a dà andaré na fonsion d'artrovament",
+'exif-flash-return-2' => "lë stoboscòpi a arleva gnun-a lus d'artorn",
+'exif-flash-return-3' => "lë stroboscòpi a l'ha arlevà n'artorn ëd lus",
+'exif-flash-mode-1' => 'lus dla lòsna obligatòria',
'exif-flash-mode-2' => 'eliminassion dël flash sforsà',
'exif-flash-mode-3' => 'manera automàtica',
'exif-flash-function-1' => 'Gnente fonsion flash',
'qbbrowse' => 'Πλοήγησην',
'qbedit' => 'Άλλαξον',
'qbpageoptions' => 'Ατή η σελίδαν',
-'qbpageinfo' => 'Συμφραζόμενα',
'qbmyoptions' => "Τ' εμά τα σελίδας",
'qbspecialpages' => 'Ειδικά σελίδας',
'faq' => 'Πολλά ερωτήσεις (FAQ)',
'editfont-serif' => 'سېرېف ليکبڼه',
# Dates
-'sunday' => 'اتوار',
-'monday' => 'ګل',
-'tuesday' => 'نهي',
+'sunday' => 'يونۍ',
+'monday' => 'دونۍ',
+'tuesday' => 'درې نۍ',
'wednesday' => 'شورو',
'thursday' => 'زيارت',
'friday' => 'جمعه',
'qbbrowse' => 'سپړل',
'qbedit' => 'سمول',
'qbpageoptions' => 'همدا مخ',
-'qbpageinfo' => 'متن',
'qbmyoptions' => 'زما پاڼې',
'qbspecialpages' => 'ځانګړي مخونه',
'faq' => 'ډ-ځ-پ',
په ټولو ويکي ګانو کې د ژباړې د ورګډولو او يا هم د ژباړې د سمون او بدلون لپاره د مېډياويکي د ځايتابه پروژه [//translatewiki.net/ translatewiki.net] وکاروۍ.',
'editinginterface' => "'''ګواښنه:''' تاسو په يوه داسې مخ کې بدلون راولی کوم چې د يوې پوستکالی د ليدنمخ متن په توګه کارېږي.
په همدې مخ کې بدلون راوستل به د نورو کارنانو د ليدنمخ بڼه اغېزمنه کړي.
-د ژباړې لپاره، مهرباني وکړی د [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، وېبځي ته ولاړ شی. دا وېبځی د ميډياويکي د ځايتابه پروژه ده او د همدې پر کارولو غور وکړی.",
+د ژباړې د ورګډولو او بدلون لپاره، مهرباني وکړی د [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]، وېبځي ته ولاړ شی. دا وېبځی د ميډياويکي د ځايتابه پروژه ده.",
'sqlhidden' => '(د SQL پوښتن پټ دی)',
'namespaceprotected' => "تاسې د '''$1''' په نوم-تشيال کې د مخونو د سمولو اجازه نه لرۍ.",
'customcssprotected' => 'تاسې د دې CSS مخ د سمولو اجازه نه لرۍ، دا ځکه چې دا مخ د بل کارن شخصي امستنې لري.',
'upload' => 'دوتنه پورته کول',
'uploadbtn' => 'دوتنه پورته کول',
'uploadnologin' => 'غونډال کې نه ياست ننوتي',
-'uploadnologintext' => 'د دوتنو د پورته کولو لپاره بايد غونډال کې [[Special:Userlogin|ننوځۍ]].',
+'uploadnologintext' => 'ددې لپاره چې دوتنې پورته کړای شۍ، نو لومړی غونډال کې [[Special:UserLogin|ورننوځۍ]].',
'uploaderror' => 'د پورته کولو ستونزه',
'uploadtext' => "د دوتنې د پورته کېدو لپاره لاندينی چوکاټ وکاروۍ.
که چېرته د پخونيو پورته شويو دوتنو کتل او پلټل غواړۍ نو [[Special:FileList|د پورته شويو دوتنو لړليک]] ته ورشۍ، [[Special:Log/upload|د (بيا) پورته شويو دوتنو يادښتونه]] او [[Special:Log/delete|د ړنګېدو يادښتونه]] هم کتلای شی.
'wlheader-showupdated' => "* هغه مخونه چې وروستی ځل ستاسو د کتلو نه وروسته بدلون موندلی په '''روڼ''' ليک نښه شوي.",
'watchlistcontains' => 'ستاسې کتنلړ $1 {{PLURAL:$1|مخ|مخونه}} لري.',
'iteminvalidname' => "د '$1' توکي سره ستونزه، ناسم نوم ...",
-'wlnote' => "دلته لاندې {{PLURAL:$1|وروستی بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په {{PLURAL:$2|تېر يوه ساعت|تېرو '''$2''' ساعتونو}} کې تر $4 نېټې او $5 بجو پېښ شوي.",
+'wlnote' => "دلته لاندې {{PLURAL:$1|وروستی بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په {{PLURAL:$2|تېر ساعت|تېرو '''$2''' ساعتونو}} کې تر $3 نېټې او $4 بجو پېښ شوي.",
'wlshowlast' => 'وروستي $1 ساعتونه $2 ورځې $3 ښکاره کړه',
'watchlist-options' => 'د کتنلړ خوښنې',
# Info page
'pageinfo-title' => 'د "$1" مالومات',
+'pageinfo-header-basic' => 'بنسټيز مالومات',
'pageinfo-header-edits' => 'د سمون پېښليک',
+'pageinfo-header-restrictions' => 'مخ ژغورنه',
+'pageinfo-header-properties' => 'د مخ ځانتياوې',
+'pageinfo-display-title' => 'ښکارېدونکی سرليک',
+'pageinfo-article-id' => 'د مخ پېژند',
+'pageinfo-robot-index' => 'ليکلړوړ',
+'pageinfo-robot-noindex' => 'ليکلړوړ نه',
'pageinfo-views' => 'د کتنو شمېر',
'pageinfo-watchers' => 'د مخ د کتونکو شمېر',
+'pageinfo-redirects-name' => 'دې مخ ته ورګرځونې',
+'pageinfo-subpages-name' => 'دې مخ ته څېرمه مخونه',
+'pageinfo-firstuser' => 'مخ جوړونکی',
'pageinfo-edits' => 'د ټولو سمونونو شمېر',
# Skin names
'vector-action-protect' => 'Proteger',
'vector-action-undelete' => 'Restaurar',
'vector-action-unprotect' => 'Alterar protecção',
-'vector-simplesearch-preference' => 'Activar sugestões de busca melhoradas (apenas no tema Vector)',
+'vector-simplesearch-preference' => 'Activar barra de buscas simplificada (apenas no tema Vector)',
'vector-view-create' => 'Criar',
'vector-view-edit' => 'Editar',
'vector-view-history' => 'Ver histórico',
'pageinfo-recent-authors' => 'Número recente de autores distintos',
'pageinfo-magic-words' => '{{PLURAL:$1|Palavra mágica|Palavras mágicas}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}} ($1)',
+'pageinfo-toolboxlink' => 'Informações da página',
# Skin names
'skinname-standard' => 'Clássico',
$messages = array(
# User preference toggles
-'tog-underline' => 'Sublinhar ligação:',
+'tog-underline' => 'Sublinhar links:',
'tog-justify' => 'Justificar parágrafos',
'tog-hideminor' => 'Ocultar edições menores nas mudanças recentes',
'tog-hidepatrolled' => 'Ocultar edições patrulhadas nas mudanças recentes',
'tog-numberheadings' => 'Auto-numerar cabeçalhos',
'tog-showtoolbar' => 'Mostrar barra de edição (JavaScript)',
'tog-editondblclick' => 'Editar páginas quando houver clique duplo (JavaScript)',
-'tog-editsection' => 'Habilitar edição de seção via ligações [editar]',
+'tog-editsection' => 'Ativar a edição de seções com links [editar]',
'tog-editsectiononrightclick' => 'Habilitar edição de seção por clique com o botão direito no título da seção (JavaScript)',
'tog-showtoc' => 'Mostrar Tabela de Conteúdos (para páginas com mais de três cabeçalhos)',
'tog-rememberpassword' => 'Recordar os meus dados neste navegador (por no máximo $1 {{PLURAL:$1|dia|dias}})',
'tog-enotifrevealaddr' => 'Revelar o meu endereço de email nas notificações',
'tog-shownumberswatching' => 'Mostrar o número de usuários que estão vigiando',
'tog-oldsig' => 'Assinatura existente:',
-'tog-fancysig' => 'Tratar assinatura como wikitexto (sem ligação automática)',
+'tog-fancysig' => 'Tratar assinatura como wikitexto (sem link automático)',
'tog-externaleditor' => 'Utilizar editor externo por padrão (apenas para usuários avançados; requer configurações adicionais em seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
'tog-externaldiff' => 'Utilizar comparador de versões externo por padrão (apenas para usuários avançados; requer configurações adicionais em seu computador. [//www.mediawiki.org/wiki/Manual:External_editors Mais informações.])',
-'tog-showjumplinks' => 'Ativar ligações de acessibilidade "ir para"',
+'tog-showjumplinks' => 'Ativar links de acessibilidade "ir para"',
'tog-uselivepreview' => 'Utilizar pré-visualização em tempo real (JavaScript) (Experimental)',
'tog-forceeditsummary' => 'Avisar-me ao introduzir um sumário vazio',
'tog-watchlisthideown' => 'Ocultar as minhas edições da lista de páginas vigiadas',
'listingcontinuesabbrev' => 'cont.',
'index-category' => 'Páginas indexadas',
'noindex-category' => 'Páginas não indexadas',
-'broken-file-category' => 'Páginas com ligações quebradas para arquivos',
+'broken-file-category' => 'Páginas com links inválidos para arquivos',
'about' => 'Sobre',
'article' => 'Página de conteúdo',
'vector-action-protect' => 'Proteger',
'vector-action-undelete' => 'Restaurar',
'vector-action-unprotect' => 'Alterar a proteção',
-'vector-simplesearch-preference' => 'Ativar sugestões de busca melhoradas (apenas no tema Vector)',
+'vector-simplesearch-preference' => 'Ativar barra simplificada de buscas (apenas no skin Vector)',
'vector-view-create' => 'Criar',
'vector-view-edit' => 'Editar',
'vector-view-history' => 'Ver histórico',
'history_short' => 'Histórico',
'updatedmarker' => 'atualizado desde a minha última visita',
'printableversion' => 'Versão para impressão',
-'permalink' => 'Ligação permanente',
+'permalink' => 'Link permanente',
'print' => 'Imprimir',
'view' => 'Ver',
'edit' => 'Editar',
# Main script and global functions
'nosuchaction' => 'Ação inexistente',
'nosuchactiontext' => 'A ação especificada pela URL é inválida.
-Você deve ter se enganado ao digitar a URL, ou seguiu uma ligação incorreta.
+Você deve ter se enganado ao digitar a URL, ou acessou um link incorreto.
Isso também pode indicar um erro no software usado no sítio {{SITENAME}}.',
'nosuchspecialpage' => 'Esta página especial não existe',
'nospecialpagetext' => '<strong>Você requisitou uma página especial inválida.</strong>
# General errors
'error' => 'Erro',
'databaseerror' => 'Erro no banco de dados',
-'dberrortext' => 'Ocorreu um erro de sintaxe de busca no banco de dados.
-Isto pode indicar um problema com o \'\'software\'\'.
+'dberrortext' => 'Ocorreu um erro de sintaxe na busca no banco de dados.
+Isto pode indicar um bug no software.
A última tentativa de busca no banco de dados foi:
-<blockquote><tt>$1</tt></blockquote>
-na função "<tt>$2</tt>".
-O banco de dados retornou o erro "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+na função "<code>$2</code>".
+O banco de dados retornou o erro "<samp>$3: $4</samp>".',
'dberrortextcl' => 'Ocorreu um erro de sintaxe de busca no banco de dados.
A última tentativa de busca no banco de dados foi:
"$1"
Quem fez o bloqueio oferece a seguinte explicação: $1',
'missing-article' => 'O banco de dados não encontrou o texto de uma página que deveria ter encontrado, com o nome "$1" $2.
-Isso normalmente é causado ao acessar uma ligação de diferença (diff) desatualizada ou para o histórico de uma página que foi apagada.
+Isso normalmente é causado ao acessar um link de diferença (dif) desatualizado ou para o histórico de uma página que foi apagada.
-Se não for este o caso, você pode ter encontrado um defeito (bug) no software.
-Anote o URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].',
+Se este não for o caso, você pode ter encontrado um defeito (bug) no software.
+Anote a URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].',
'missingarticle-rev' => '(revisão#: $1)',
'missingarticle-diff' => '(Dif.: $1, $2)',
'readonly_lag' => 'O banco de dados foi automaticamente bloqueado enquanto os servidores secundários se sincronizam com o principal',
'passwordreset-capture-help' => 'Se marcar esta caixa, o e-mail (com a senha temporária) será-lhe mostrado, além de ser enviado para o usuário.',
'passwordreset-email' => 'Endereço de e-mail:',
'passwordreset-emailtitle' => 'Detalhes da conta em {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Alguém (provavelmente você, do endereço IP $1) solicitou um lembrete do seu detalhes de conta para {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:
+'passwordreset-emailtext-ip' => 'Alguém (provavelmente você, a partir do endereço IP $1)
+solicitou um lembrete dos seus detalhes de conta para {{SITENAME}} ($4).
+{{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:
$2
-{{PLURAL:$3|Esta senha temporária |Essas senhas temporárias}} vão expirar em {{PLURAL:$5|um dia|$5 dias}}.
-Você deve efetuar login e escolher uma nova senha agora. Se você conseguir lembrar da senha, ignore este e-mail e continue usando sua senha anterior, do contrário, prossiga com as instruções clicando na ligação.',
+{{PLURAL:$3|Esta senha temporária vai|Essas senhas temporárias vão}} expirar em {{PLURAL:$5|um dia|$5 dias}}.
+Você deve efetuar login e escolher uma nova senha agora.
+Se você conseguir lembrar da senha, ignore este e-mail e continue
+usando sua senha anterior. Caso contrário, prossiga com as instruções
+disponíveis no link.',
'passwordreset-emailtext-user' => 'O usuário $1 da {{SITENAME}} pediu a recuperação dos detalhes da sua conta na {{SITENAME}} ($4). {{PLURAL:$3|A seguinte conta está associada|As seguintes contas estão associadas}} a este e-mail:
$2
'bold_tip' => 'Texto em negrito',
'italic_sample' => 'Texto em itálico',
'italic_tip' => 'Texto em itálico',
-'link_sample' => 'Título da ligação',
-'link_tip' => 'Ligação interna',
-'extlink_sample' => 'http://www.example.com título da ligação',
-'extlink_tip' => 'Ligação externa (lembre-se do prefixo http://)',
+'link_sample' => 'Título do link',
+'link_tip' => 'Link interno',
+'extlink_sample' => 'http://www.example.com título do link',
+'extlink_tip' => 'Link externo (lembre-se do prefixo http://)',
'headline_sample' => 'Conteúdo do cabeçalho',
'headline_tip' => 'Seção de nível 2',
'nowiki_sample' => 'Inserir texto não-formatado aqui',
'image_sample' => 'Exemplo.jpg',
'image_tip' => 'Arquivo embutido',
'media_sample' => 'Exemplo.ogg',
-'media_tip' => 'Ligação para o arquivo',
+'media_tip' => 'Link para o arquivo',
'sig_tip' => 'Sua assinatura, com hora e data',
'hr_tip' => 'Linha horizontal (use de forma moderada)',
A senha para esta nova conta pode ser alterada na página ''[[Special:ChangePassword|de troca de senha]]'', após a autenticação.",
'newarticle' => '(Nova)',
-'newarticletext' => "Você seguiu uma ligação para uma página que ainda não existe.
+'newarticletext' => "Você seguiu um link para uma página que ainda não existe.
Para criá-la, comece escrevendo na caixa abaixo (veja [[{{MediaWiki:Helppage}}|a página de ajuda]] para mais informações).
Se você chegou aqui por engano, clique no botão '''voltar''' do seu navegador.",
'anontalkpagetext' => "---- ''Esta é a página de discussão para um usuário anônimo que ainda não criou uma conta ou que não a usa, de forma que temos de utilizar o endereço de IP para identificá-lo(a). Tal endereço de IP pode ser compartilhado por vários usuários. Se você é um usuário anônimo e acha que comentários irrelevantes foram direcionados a você, por gentileza, [[Special:UserLogin/signup|crie uma conta]] ou [[Special:UserLogin|autentique-se]], a fim de evitar futuras confusões com outros usuários anônimos.''",
ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.',
'noarticletext-nopermission' => 'No momento, não há conteúdo nesta página
Você pode [[Special:Search/{{PAGENAME}}|pesquisar pelo título desta página]] em outras páginas,
-ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] </span>.',
+ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar por registros relacionados] </span>. Note que, no entanto, você não tem permissão para criar esta página.',
'missing-revision' => 'A revisão #$1 da página denominada "{{PAGENAME}}" não existe.
Isto é geralmente causado por seguir um link de histórico desatualizado para uma página que foi eliminada.
'timezoneregion-indian' => 'Oceano Índico',
'timezoneregion-pacific' => 'Oceano Pacífico',
'allowemail' => 'Permitir que outros usuários me enviem e-mails',
-'prefs-searchoptions' => 'Opções de busca',
+'prefs-searchoptions' => 'Busca',
'prefs-namespaces' => 'Espaços nominais',
'defaultns' => 'Caso contrário pesquisar nestes espaços nominais:',
'default' => 'padrão',
'pageinfo-authors' => 'Número total de autores distintos',
'pageinfo-recent-edits' => 'Número de edições recentes (nos últimos $1)',
'pageinfo-recent-authors' => 'Número recente de autores distintos',
+'pageinfo-magic-words' => '{{PLURAL:$1|Palavra mágica|Palavras mágicas}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|predefinição transcluída|predefinições transcluídas}}',
+'pageinfo-toolboxlink' => 'Informações da página',
+'pageinfo-redirectsto' => 'Redirecionar para',
+'pageinfo-redirectsto-info' => 'informações',
+'pageinfo-contentpage' => 'Contado como uma página de conteúdo',
+'pageinfo-contentpage-yes' => 'Sim',
+'pageinfo-protect-cascading' => 'Proteção em cascata ativada',
+'pageinfo-protect-cascading-yes' => 'Sim',
# Skin names
'skinname-standard' => 'Clássico',
# Patrolling
'markaspatrolleddiff' => 'Marcar como patrulhada',
-'markaspatrolledtext' => 'Marcar esta página como verificada',
+'markaspatrolledtext' => 'Marcar esta página como patrulhada',
'markedaspatrolled' => 'Marcado como verificado',
'markedaspatrolledtext' => 'A revisão selecionada de [[:$1]] foi marcada como patrulhada.',
'rcpatroldisabled' => 'Edições verificadas nas Mudanças Recentes desativadas',
* @author Guglani
* @author Gustronico
* @author Hamilton Abreu
+ * @author Harsh4101991
* @author Helix84
* @author Holek
* @author Huji
'userrights-editusergroup' => '{{Identical|Edit user groups}}. Parameter:
* $1 is a username - optional, can be used for GENDER',
'saveusergroups' => 'Button text when editing user groups',
-'userrights-groupsmember' => 'Used when editing user groups in [[Special:Userrights]]. The messsage is followed by a list of group names.
+'userrights-groupsmember' => 'Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.
Parameters:
-* $1 - optional, for PLURAL use, the number of items in the list following the message. Avoid PLURAL, if your language can do without.',
+* $1 - the number of items in the list following the message, for PLURAL.
+* $2 - the user name, for GENDER.',
'userrights-groupsmember-auto' => 'Used when editing user groups in [[Special:Userrights]]. The messsage is followed by a list of group names.
"Implicit" is for groups that the user was automatically added to (such as "autoconfirmed"); cf. {{msg-mw|userrights-groupsmember}}
+Parameters
+* $1 - the number of items in the list following the message, for PLURAL.
+* $2 - the user name, for GENDER.',
+'userrights-groupsmember-type' => '{{optional}}
Parameters:
-* $1 - optional, for PLURAL use, the number of items in the list following the message. Please avoid PLURAL, if your language can do without.',
+* $1 is list of group names.
+* $2 is list of group member names. Used with labels {{msg-mw|userrights-groupsmember}} and {{msg-mw|userrights-groupsmember-auto}}',
'userrights-groups-help' => 'Instructions displayed on [[Special:UserRights]]. Parameters:
* $1 is a username - optional, can be used for GENDER',
'userrights-reason' => 'Text beside log field when editing user groups
'emailpage' => "Title of special page [[Special:EmailUser]], when it is the destination of the sidebar link {{msg-mw|Emailuser}} on a user's page.",
'emailpagetext' => 'This is the text that is displayed above the e-mail form on [[Special:EmailUser]].
-Special:EmailUser appears when you click on the link "E-mail this user" in the sidebar, but only if there is an e-mail address in the recipient\'s user preferences. If there isn\'t then the message [[Mediawiki:Noemailtext]] will appear instead of Special:EmailUser.',
+Special:EmailUser appears when you click on the link "E-mail this user" in the sidebar, but only if there is an e-mail address in the recipient\'s user preferences. If there isn\'t then the message [[Mediawiki:Noemailtext]] will appear instead of Special:EmailUser. Parameters:
+* $1 can be used for GENDER.',
'defemailsubject' => 'The default subject of EmailUser emails. Parameters:
* $1 is the username of the user sending the email and can be used for GENDER.',
'usermaildisabled' => 'Caption for an error message ({{msg-mw|Usermaildisabledtext}}) shown when the user-to-user e-mail feature is disabled on the wiki (see [[mw:Manual:$wgEnableEmail]], [[mw:Manual:$wgEnableUserEmail]]).',
'protect-text' => 'Intro of the protection interface. See [[meta:Protect]] for more information.',
'protect-default' => '{{Identical|Default}}',
'protect-fallback' => 'This message is used as an option in the protection form on wikis were extra protection levels have been configured.',
-'protect-summary-cascade' => 'Used in edit summary when cascade protecting a page.',
+'protect-summary-cascade' => 'Used in edit summary when cascade protecting a page. Appears in protection log. See [[Special:Log]] and [[m:Special:Log]].
+
+Also used in [[Special:ProtectedPages]] when a page is cascade protected. See example: [[m:Special:ProtectedPages]].<br />
+See also:
+*{{msg-mw|Restriction-level-sysop}}
+*{{msg-mw|Restriction-level-autoconfirmed}}',
'protect-expiring' => 'Used in page history, and in [[Special:Protectedtitles]], [[Special:Protectedpages]], and extension FlaggedRevs.
* $1 is a date and time
* $2 is a date (optional)
{{Identical|Create}}',
# Restriction levels
-'restriction-level-sysop' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level' and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.",
-'restriction-level-autoconfirmed' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level', and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.",
-'restriction-level-all' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level'. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.",
+'restriction-level-sysop' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level' and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
+
+*{{msg-mw|Restriction-level-sysop}}
+*{{msg-mw|Restriction-level-autoconfirmed}}
+*{{msg-mw|Restriction-level-all}}",
+'restriction-level-autoconfirmed' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level', and in brackets after each page name entry. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
+
+*{{msg-mw|Restriction-level-sysop}}
+*{{msg-mw|Restriction-level-autoconfirmed}}
+*{{msg-mw|Restriction-level-all}}",
+'restriction-level-all' => "Used on [[Special:ProtectedPages]] and [[Special:ProtectedTitles]]. An option in the drop-down box 'Restriction level'. See the [//www.mediawiki.org/wiki/Project:Protected_titles help page on Mediawiki] and on [http://meta.wikimedia.org/wiki/Protect Meta] for more information.
+
+*{{msg-mw|Restriction-level-sysop}}
+*{{msg-mw|Restriction-level-autoconfirmed}}
+*{{msg-mw|Restriction-level-all}}",
# Undelete
'undelete' => 'Name of special page for admins as displayed in [[Special:SpecialPages]].
'pageinfo-header-properties' => 'Table section header in action=info.',
'pageinfo-display-title' => 'The title that is displayed when the page is viewed.',
'pageinfo-default-sort' => 'The key by which the page is sorted in categories by default.',
-'pageinfo-length' => 'The length of the page, in bytes.',
+'pageinfo-length' => 'પૃષ્ઠની લંબાઇ બાઇટમાં',
'pageinfo-article-id' => 'The numeric identifier of the page.',
+'pageinfo-language' => 'Language in which the page content is written.',
'pageinfo-robot-policy' => 'The search engine status of the page, e.g. "marked as index".',
'pageinfo-robot-index' => 'An indication that the page is indexable.',
'pageinfo-robot-noindex' => 'An indication that the page is not indexable.',
'pageinfo-templates' => 'The list of templates transcluded within the page. Parameters:
* $1 is the number of templates transcluded within the page.',
'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.',
+'pageinfo-redirectsto-info' => 'Text to put in parentheses for the link to the action=info of the redirect target.',
+'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
+*{{msg-mw|Pageinfo-protect-cascading}}
+*{{msg-mw|Pageinfo-protect-cascading-yes}}',
+'pageinfo-protect-cascading-yes' => 'Yes, protections are cascading from here
+*{{msg-mw|Pageinfo-protect-cascading}}
+*{{msg-mw|Pageinfo-protect-cascading-yes}}',
+'pageinfo-protect-cascading-from' => 'Key for a list of pages where protections are cascading from',
# Skin names
'skinname-standard' => '{{optional}}
Start with a lowercase letter, unless the first word is “SVG”.',
'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.',
+'show-big-image-other' => 'Message shown under the image description page thumbnail, next to {{msg-mw|show-big-image-preview}}, if the image is in high resolution.',
'show-big-image-size' => '
Parameters:
* $1 is the width of the image(s) in pixels.
*$1: the current year
*$2: a list of selected MediaWiki authors',
'version-poweredby-others' => 'Used at the very end of {{msg-mw|version-poweredby-credits}} on [[Special:Version]]. First, there\'s a long list of selected MediaWiki authors, then the word "and" (from {{msg-mw|and}}) follows and then this translation, which is supposed to credit the many other people than developer helping with MediaWiki.',
+'version-credits-summary' => 'Summary of the [[Special:Version/Credits]] sub page, which lists all developers etc. who contributed to MediaWiki. Shown at the top.',
'version-license-info' => '[[wikipedia:GNU GPL|GNU GPL]] notice shown at [[Special:Version]]. See //www.gnu.org/licenses/old-licenses/gpl-2.0-translations.html for available translations.',
'version-software-product' => 'Shown in [[Special:Version]]',
'version-software-version' => '{{Identical|Version}}',
'tog-hidepatrolled' => "Patrullasqa llamk'apusqakunata ñaqha hukchasqapi pakay",
'tog-newpageshidepatrolled' => "Patrullasqa llamk'apusqakunata musuq p'anqakunapi pakay",
'tog-extendwatchlist' => "Watiqana sutisuyuta tukuy rurachinalla hukchaykunaman mast'ay, ama lliwmanta aswan ñaqhallachu",
-'tog-usenewrc' => "Sananchasqa ñaqha hukchasqakuna (JavaScript nisqallawanmi llamk'an)",
+'tog-usenewrc' => "Huñu hukchasqakuna p'anqallakama ñaqha hukchasqakunapi watiqasqakunapipas (JavaScript nisqallawanmi llamk'an)",
'tog-numberheadings' => "Uma siq'ikunata kikinmanta yupay",
'tog-showtoolbar' => "Llamk'apuna sillwita rikuchiy",
'tog-editondblclick' => "P'anqakunata llamk'apuy iskaylla ñit'iywan (JavaScript)",
'tog-editsectiononrightclick' => "Rakirilla llamk'apuyta saqillay paña butunta rakirip sutinpi ñit'ispa (JavaScript)",
'tog-showtoc' => "Yuyarina wachuchasqata rikuchiy (kimsamanta aswan uma siq'iyuq p'anqakunapaq)",
'tog-rememberpassword' => "Ruraqpa sutiyta yaykuna rimaytapas yuyaykuy kay llika wamp'unapi ({{PLURAL:$1|huk p'unchawkama|$1 p'unchawkama}})",
-'tog-watchcreations' => "Qallarisqay p'anqakunata watiqay.",
-'tog-watchdefault' => "Hukchasqay p'anqakunata watiqay",
-'tog-watchmoves' => "Astasqay p'anqakunata watiqay",
-'tog-watchdeletion' => "Qullusqay p'anqakunata watiqay",
+'tog-watchcreations' => "Qallarisqay p'anqakunata churkusqay willañiqikunatapas watiqay",
+'tog-watchdefault' => "Hukchasqay p'anqakunata willañiqikunatapas watiqay",
+'tog-watchmoves' => "Astasqay p'anqakunata willañiqikunatapas watiqay",
+'tog-watchdeletion' => "Qullusqay p'anqakunata willañiqikunatapas watiqay",
'tog-minordefault' => 'Tukuy hukchasqakunata kikinmanta aslla nispa sananchay',
'tog-previewontop' => "Rikch'ay qhawana ñawpaqman, ama qhipanpi kachunchu",
'tog-previewonfirst' => "Manaraq llamk'apuspa rikch'ayta qhaway",
'tog-nocache' => "Llika wamp'unap ''cache'' nisqa paki hallch'anman ama niy",
-'tog-enotifwatchlistpages' => "Watiqasqay p'anqa hukchasqa kaptinqa, e-chaskita kachamuway",
+'tog-enotifwatchlistpages' => "Watiqasqay p'anqa icha willañiqi hukchasqa kaptinqa, e-chaskita kachamuway",
'tog-enotifusertalkpages' => "Rimachinay p'anqa hukchasqa kaptinqa, e-chaskita kachamuway",
-'tog-enotifminoredits' => "P'anqapi uchuy hukchasqamantapas willawaspa e-chaskita kachamuway",
+'tog-enotifminoredits' => "P'anqapi icha willañiqipi uchuy hukchasqamantapas willawaspa e-chaskita kachamuway",
'tog-enotifrevealaddr' => 'E-chaski imamaytayta rikuchiy willamuwanayki e-chaskikunapi',
'tog-shownumberswatching' => "Rikuchiy hayk'a watiqaq ruraqkuna",
'tog-oldsig' => "Kachkaqña silq'uy:",
'vector-action-protect' => 'Amachay',
'vector-action-undelete' => 'Qullusqata paqarichiy',
'vector-action-unprotect' => 'Amachayta wakinchay',
-'vector-simplesearch-preference' => 'Maskanapaq kallpachasqa sakumanakunata atichiy (Vector qarallapi)',
+'vector-simplesearch-preference' => 'Maskanapaq sikllallachasqa sinruta atichiy (Vector qarallapi)',
'vector-view-create' => 'Kamariy',
'vector-view-edit' => "Llamk'apuy",
'vector-view-history' => 'Wiñay kawsayta qhaway',
'youhavenewmessages' => '$1 qhawanayki kachkan ($2).',
'newmessageslink' => 'Musuq willaymi',
'newmessagesdifflink' => 'qayna hukchasqapi wakin kaynin',
+'youhavenewmessagesfromusers' => '$1 {{PLURAL:$3|huk ruraqmanta|$3 ruraqkunamanta}} qhawanayki kachkan ($2).',
+'youhavenewmessagesmanyusers' => '$1 achka ruraqkunamanta qhawanayki kachkan ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|Musuq willaymi|Musuq willaykunam}}',
+'newmessagesdifflinkplural' => 'qayna {{PLURAL:$1|hukchasqapi|hukchasqakunapi}} wakin kaynin',
'youhavenewmessagesmulti' => 'Musuq willaykunam qhawanayki kachkan $1-pi',
'editsection' => 'allichay',
'editold' => "llamk'apuy",
'databaseerror' => 'Willañiqintin pantasqa',
'dberrortext' => 'Willañiqimanta mañakuptiyki sintaksis pantasqam tukurqan.
Llamp\'u kaq wakichipi pantasqachá.
-Qayna willañiqimanta mañakusqaqa karqan kaypacham: <blockquote><tt>$1</tt></blockquote> kay ruraypim: "<tt>$2</tt>". MySQL-pa kutichisqan pantasqaqa karqan "<tt>$3: $4</tt>".',
+Qayna willañiqimanta mañakusqaqa karqan kaypacham:
+<blockquote><code>$1</code></blockquote>
+kay ruraypim: "<code>$2</code>".
+Willañiqintinpa kutichisqan pantasqaqa karqan "<samp>$3: $4</samp>".',
'dberrortextcl' => 'Willañiqimanta mañakuptiyki sintaksis pantasqam tukurqan.
Qayna willañiqimanta mañakusqaqa karqan kaymi:
"$1"
'protectedpagetext' => "Kay p'anqaqa llamk'apuymanta amachasqam.",
'viewsourcetext' => "Kay p'anqap pukyu qillqantam qhawayta iskaychaytapas atinki:",
'viewyourtext' => "'''Qampa llamk'apusqayki'''p pukyu qillqantam qhawayta iskaychaytapas atinki:",
-'protectedinterface' => "Kay p'anqapiqa wakichintinpa uyapuranpaq qillqam.
-Wandalismu nisqamanta amachasqam kachkan.",
-'editinginterface' => "'''Paqtataq:''' Uyapura p'anqatam llamk'apuchkanki. Hukchaptiykiqa, chay uyapurap rikch'ayninqa hukyanqa huk ruraqkunapaqpas. Uyapurata t'ikrayta munaspaykiqa, [//translatewiki.net/wiki/Main_Page?setlang=qu translatewiki.net] nisqa MediaWiki t'ikrana ruraykamay llika tiyaypi ruranaykimanta hamut'ariy.",
+'protectedinterface' => "Kay p'anqapiqa wakichintinpa uyapuranpaq qillqam. Wandalismu nisqamanta amachasqam kachkan.
+Tukuy wikikunapi uyapuraman t'ikrasqakunata yapayta icha hukchayta munaspaykiqa, [//translatewiki.net/wiki/Main_Page?setlang=qu translatewiki.net] nisqa MediaWiki t'ikrana ruraykamay llika tiyaypi ruray.",
+'editinginterface' => "'''Paqtataq:''' Llamp'u kaqpaq uyapura qillqakuna runanapaq p'anqatam llamk'apuchkanki.
+Hukchaptiykiqa, chay uyapurap rikch'ayninqa hukyanqa kay wikipi huk ruraqkunapaqpas.
+Uyapuraman t'ikrasqakunata yapayta icha hukchayta munaspaykiqa, [//translatewiki.net/wiki/Main_Page?setlang=qu translatewiki.net] nisqa MediaWiki t'ikrana ruraykamay llika tiyaypi ruranaykimanta hamut'ariy.",
'sqlhidden' => '(SQL tapunaqa pakasqam)',
'cascadeprotected' => "Kay p'anqaqa amachasqam kachkan, ''phaqcha'' nisqa kamachiwan amachasqa kay {{PLURAL:$1|p'anqapi|p'anqakunapi}} ch'aqtasqa kaspanmi:
$2",
Amachaq kamachiqqa kayrayku amachani nispa nirqanmi: "$3".',
'invalidtitle-knownnamespace' => '"$2" sutisuyu, "$3" qillqasqayuq mana allin kaq qillqa suti',
'invalidtitle-unknownnamespace' => 'Mana riqsisqa $1 kaq sutisuyu yupay, "$2" qillqasqayuq mana allin kaq qillqa suti',
+'exception-nologin' => 'Manam yaykurqankichu',
# Virus scanner
'virus-badscanner' => "Manam allintachu churapusqa: mana riqsisqa añaw maskaq: ''$1''",
'newarticle' => '(Musuq)',
'newarticletext' => "Manaraq kachkaq p'anqatam llamk'apuchkanki. Musuq p'anqata kamariyta munaspaykiqa, qillqarillay. Astawan ñawiriyta munaspaykiqa, [[{{MediaWiki:Helppage}}|yanapana p'anqata]] qhaway. Mana munaspaykitaq, ñawpaq p'anqaman ripuy.",
'anontalkpagetext' => "---- ''Kayqa huk sutinnaq icha mana sutinta llamk'achiq ruraqpa rimanakuyninmi. IP huchhantam hallch'asunchik payta sutinchanapaq. Achka ruraqkunam huklla IP huchhanta llamk'achiyta atin. Sutinnaq ruraq kaspaykiqa, mana qampa rurasqaykimanta willamusqakunata rikuspaykiqa, ama hina kaspa [[Special:UserLogin/signup|rakiqunaykita kamariy]] icha [[Special:UserLogin|yaykuy]] huk sutinnaq ruraqkunawan ama pantasqa kanaykipaq.''",
-'noarticletext' => "Kunanqa kay p'anqa ch'usaqmi. Kaytam rurayta atinkiman: kay p'anqap sutinta [[Special:Search/{{PAGENAME}}|huk p'anqakunapi maskay]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hallch'ankunapi maskay] icha [{{fullurl:{{FULLPAGENAME}}|action=edit}} kay p'anqata llamk'apuy]</span>.",
-'noarticletext-nopermission' => "Kay p'anqaqa ch'usaqmi.
-Kay p'anqap sutintaqa [[Special:Search/{{PAGENAME}}|huk p'anqakunapi maskaytam atinki]],
-icha payman kapuq <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hallch'akunapi maskaykiman]</span>.",
+'noarticletext' => "Kunanqa kay p'anqa ch'usaqmi kachkan.
+Kaytam rurayta atinkiman: kay p'anqap sutinta [[Special:Search/{{PAGENAME}}|huk p'anqakunapi maskay]],
+<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hallch'ankunapi maskay]
+icha [{{fullurl:{{FULLPAGENAME}}|action=edit}} kay p'anqata llamk'apuy]</span>.",
+'noarticletext-nopermission' => "Kunanqa kay p'anqa ch'usaqmi kachkan.
+Kaytam rurayta atinkiman: kay p'anqap sutinta [[Special:Search/{{PAGENAME}}|huk p'anqakunapi maskay]]
+icha payman kapuq <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hallch'akunapi maskay]</span>,
+ichataq kay p'anqata kamariyta manam saqillasunkichu.",
'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" sutiyuq ruraqpa rakiqunanqa manam kanchu. Ama hina kaspa, llanchikuy kay p\'anqata kamarinaykimanta.',
'userpage-userdoesnotexist-view' => '"$1" sutiyuq rakiqunaqa manam hallch\'asqachu.',
'blocked-notice-logextract' => "Kay ruraqqa hark'asqam kachkan.
* '''Firefox / Safari:''' ''Shift'' yatachkaspa ''Reload'' ñit'iy, ichataq ''Ctrl-F5'' icha ''Ctrl-R'' yatay (''⌘-R'' Mac nisqapi)
* '''Google Chrome:''' ''Ctrl-Shift-R'' yatay (''⌘-Shift-R'' Mac nisqapi)
* '''Internet Explorer:''' ''Ctrl'' yatachkaspa ''Refresh'' ñit'iy, icha ''Ctrl-F5'' yatay
-* '''Konqueror: '''''Reload'' ñit'iy icha ''F5'' yatay
* '''Opera:''' ''cache'' nisqata ch'usaqchay kaypi: ''Tools → Preferences''",
'usercssyoucanpreview' => "'''Kunay:''' \"{{int:showpreview}}\" nisqa ñit'inata llamk'achiy musuq css nisqata qhawanaykipaq, manaraq waqaychaspa.",
'userjsyoucanpreview' => "'''Kunay:''' \"{{int:showpreview}}\" nisqa ñit'inata llamk'achiy musuq JavaScript nisqata qhawanaykipaq, manaraq waqaychaspa.",
'note' => "'''Musyay:'''",
'previewnote' => "'''Yuyaykuy: Kayqa qhawariyllam.'''
Llamk'apusqaykiqa manaraqmi waqaychasqachu!",
-'continue-editing' => "Llamk'apuyta qatiykuy",
+'continue-editing' => "Llamk'apuy millkaman riy",
'previewconflict' => "Rikuchkanki kay p'anqataqa, ima hinachus waqaychasqa kanqa.",
'session_fail_preview' => "'''Achachaw! Llamk'apusqaykiqa manam waqaychasqachu, llamk'ana tiyaypa willankuna chinkaptinmi. Ama hina kaspa, musuqmanta ruraykachay. Mana atispaykiqa, [[Special:UserLogout|lluqsispa]] musuqmanta yaykuy.'''",
'session_fail_preview_html' => "'''Achachaw! Llamk'apusqaykiqa manam waqaychasqachu, llamk'ana tiyaypa willankuna chinkaptinmi.'''
Kachkañam.",
'defaultmessagetext' => 'Ñawpaq qillqa',
+# Content models
+'content-model-wikitext' => 'wiki qillqa',
+'content-model-text' => 'qillqalla',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
# Parser/template warnings
'expensive-parserfunction-warning' => "Paqtataq: Kay p'anqaqa nisyu achka qullqipaq t'ikrana rurana qayayniyuqmi.
'revdelete-reason-dropdown' => "*Qulluypaq sapsi raykukuna
** Ruraqpa hayñinta k'irisqa
** Runamanta mana allin willaykuna
+** Ruraqpa mana allin sutin
** Runata k'amiqchá willaykuna",
'revdelete-otherreason' => 'Huk/aswan rayku:',
'revdelete-reasonotherlist' => 'Huk rayku',
'timezoneregion-indian' => 'Indiku mama qucha',
'timezoneregion-pacific' => 'Pasiphiku mama qucha',
'allowemail' => 'Huk ruraqkunamanta e-chaskita saqillay',
-'prefs-searchoptions' => 'Akllanakunata maskay',
+'prefs-searchoptions' => 'Maskay',
'prefs-namespaces' => "Suti k'itikuna",
'defaultns' => "Mana hinaptintaq kay suti k'itikunapi maskay:",
'default' => 'kikinmanta',
'backend-fail-internal' => '"$1" sutiyuq willañiqi hallch\'ana sirwiqpi mana riqsisqa pantasqam tukurqan.',
'backend-fail-contenttype' => 'Manam atinichu "$1" nisqapi hallch\'ana willañiqip samiqninpa layanta yuqanchayta.',
'backend-fail-batchsize' => "Willañiqi hallch'ana sirwiqmanqa $1 willañiqi {{PLURAL:$1|ruranayuq|ruranayuq}} tawqam qusqa; saywataq $2 {{PLURAL:$1|ruranam|ruranam}}.",
-'backend-fail-usable' => 'Manam atinichu $1 sutiyuq willañiqita qillqayta, mana aypalla saqillaykuna icha mana churanakuna/qullqakuna kaptinmi.',
+'backend-fail-usable' => 'Manam atinichu "$1" sutiyuq willañiqita ñawiriyta icha qillqayta, mana aypalla saqillaykuna icha mana churanakuna/qullqakuna kaptinmi.',
# File journal errors
'filejournal-fail-dbconnect' => "Manam atinichu \"\$1\" sutiyuq willañiqi hallch'ana sirwiqpaq p'unchawnintin hallch'awan t'inkiyta.",
'disambiguations' => "Sut'ichana qillqakunaman t'inkimuq p'anqakuna",
'disambiguationspage' => "Template:Sut'ichana qillqa",
-'disambiguations-text' => "Kay qatiq p'anqakunam t'inkimun '''sut'ichana qillqaman'''. Chiqap, hukchanasqa p'anqaman t'inkichun.<br />Tukuy [[MediaWiki:Disambiguationspage]] plantillayuq p'anqakunaqa sut'ichana qillqam.",
+'disambiguations-text' => "Kay qatiq p'anqakunam t'inkimun '''sut'ichana qillqa''' nisqaman.
+Chay rantiqa chiqap, hukchanasqa p'anqamanmi t'inkichun.<br />
+P'anqa [[MediaWiki:Disambiguationspage]] plantillayuq kaspaqa sut'ichana qillqam kanqa.",
'doubleredirects' => 'Iskaylla pusapunakuna',
'doubleredirectstext' => "Kay p'anqapiqa huk pusapuna p'anqaman pusapuq p'anqakunap sutinkunatam rikunki. Sapa sinrupiqa ñawpaq ñiqin, iskay ñiqinpas pusapunaman t'inkikunam, iskay ñiqin pusapunap taripananpa qallariyninpas, sapsilla \"chiqap\" allin taripana qillqam, maymanchus ñawpaq ñiqin pusapuna p'anqa pusachun.
'undeletedrevisions' => "{{PLURAL:$1|Huk paqarichisqa llamk'apusqa|$1 paqarichisqa llamk'apusqakuna}}",
'undeletedrevisions-files' => "{{PLURAL:$1|1 llamk'apusqaqa|$1 llamk'apusqakunaqa}} {{PLURAL:$2|1 willañiqipas|$2 willañiqikunapas}} paqarichisqam",
'undeletedfiles' => '{{PLURAL:$1|1 willañiqiqa|$1 willañiqikunaqa}} paqarichisqam',
-'cannotundelete' => 'Manam atinichu qullusqata paqarichiyta; huk runachá ñawpaqtaña qullusqata paqarichirqan.',
+'cannotundelete' => 'Manam atinichu qullusqata paqarichiyta: $1',
'undeletedpage' => "'''$1 nisqaqa paqarichisqañam'''
[[Special:Log/delete|Qulluy hallch'api]] qhaway ñaqha qullusqakunata paqarichisqakunatapas rikunaykipaq.",
# Info page
'pageinfo-title' => '"$1" sutiyuq p\'anqamanta willay',
-'pageinfo-header-edits' => "Llamk'apusqakuna",
+'pageinfo-header-edits' => "Llamk'apusqakunap wiñay kawsaynin",
'pageinfo-views' => "Hayk'a qhawaykuna",
-'pageinfo-watchers' => "Hayk'a watiqaqkuna",
-'pageinfo-edits' => "Hayk'a hukchasqakuna",
-'pageinfo-authors' => "Hayk'a sapaq kaq ruraqkuna",
+'pageinfo-watchers' => "P'anqata hayk'a watiqaqkuna",
+'pageinfo-firstuser' => "P'anqap kamariqnin",
+'pageinfo-firsttime' => "P'anqa kamariypa p'unchawnin",
+'pageinfo-lastuser' => "Ñaqha llamk'apuqnin",
+'pageinfo-lasttime' => "Ñaqha llamk'apuypa p'unchawnin",
+'pageinfo-edits' => "Tukuymanta hayk'a hukchasqakuna",
+'pageinfo-authors' => "Tukuymanta hayk'a sapaq kaq ruraqkuna",
+'pageinfo-toolboxlink' => "P'anqamanta willakuna",
+'pageinfo-redirectsto' => 'Kayman pusampun:',
+'pageinfo-redirectsto-info' => 'willachikuy',
+'pageinfo-contentpage' => "Samiqniyuq p'anqa hinam chaninchasqa",
+'pageinfo-contentpage-yes' => 'Arí',
+'pageinfo-protect-cascading-yes' => 'Arí',
# Patrolling
'markaspatrolleddiff' => 'Qhawakipasqaman sananchay',
* <span class="mw-specialpagerestricted">Sapaqkunallapaq sapaq p\'anqakuna.</span>',
'specialpages-group-maintenance' => 'Hatalliy willaykuna',
'specialpages-group-other' => "Huk sapaq p'anqakuna",
-'specialpages-group-login' => 'Yaykuy / rakiqunata kichariy',
+'specialpages-group-login' => 'Yaykuy / rakiqunata kamariy',
'specialpages-group-changes' => "Ñaqha hukchasqa hallch'asqapas",
'specialpages-group-media' => 'Midya willaykuna churkuykunapas',
'specialpages-group-users' => 'Ruraqkuna hayñinkunapas',
'qbbrowse' => 'Maskana',
'qbedit' => 'Killkana',
'qbpageoptions' => 'Pankapak akllanakuna',
-'qbpageinfo' => 'Pankamanta willaykuna',
'qbmyoptions' => 'Ñukapak pankakuna',
'qbspecialpages' => 'mans shukkunashina pankakuna',
'faq' => 'Ashtawan tapushkaka tapunakuna',
'qbbrowse' => 'Sföja',
'qbedit' => 'Mudèfica',
'qbpageoptions' => 'Upziòn dla pàgina',
-'qbpageinfo' => 'Infurmaziòn sora la pàgina',
'qbmyoptions' => 'Al mi pàgin',
'qbspecialpages' => 'Pàgin particulèri',
'faq' => 'Question frequenti',
'tog-hidepatrolled' => 'Zuppentar midadas controlladas en las «ultimas midadas»',
'tog-newpageshidepatrolled' => 'Zuppentar paginas controlladas en las «paginas novas»',
'tog-extendwatchlist' => "Extender la glista d'observaziun per mussar tut las midadas e betg be las ultimas",
-'tog-usenewrc' => "Duvrar la versiun extendida da las ''Ultimas midadas'' (basegna JavaScript)",
+'tog-usenewrc' => "Gruppar las midadas tenor pagina en las ''ultimas midadas'' ed la ''glista d'observaziun'' (basegna JavaScript)",
'tog-numberheadings' => 'Numerar automaticamain ils titels',
'tog-showtoolbar' => "Mussa la trav d'utensils (basegna JavaScript)",
'tog-editondblclick' => 'Modifitgar paginas cun in clic dubel (basegna JavaScript)',
'tog-editsectiononrightclick' => 'Activar la pussaivladad da modifitgar secziuns cun in clic dretg (basegna JavaScript)',
'tog-showtoc' => 'Mussar ina tabla da cuntegn sin paginas cun dapli che trais tetels',
'tog-rememberpassword' => "S'annunziar permanantamain cun quest navigatur (per maximalmain $1 {{PLURAL:$1|di|dis}})",
-'tog-watchcreations' => "Observar paginas ch'jau hai creà",
-'tog-watchdefault' => "Observar paginas ch'jau hai edità",
-'tog-watchmoves' => "Observar paginas ch'jau hai spustà",
-'tog-watchdeletion' => "Observar paginas ch'jau hai stizzà",
+'tog-watchcreations' => "Agiuntar paginas ch'jeu creesch e datotecas ch'jau transferesch a la glista d'observaziun",
+'tog-watchdefault' => "Agiuntar paginas e datotecas ch'jau modifitgesch a la glista d'observaziun",
+'tog-watchmoves' => "Agiuntar paginas e datotecas ch'jau hai spustà a la glista d'observaziun",
+'tog-watchdeletion' => "Agiuntar paginas e datotecas ch'jau hai stizzà a la glista d'observaziun",
'tog-minordefault' => 'Marcar tut las modificaziuns per ordinari sco pitschnas',
'tog-previewontop' => "Mussar la prevista sur il champ d'endatziun",
'tog-previewonfirst' => "Adina mussar la prevista suenter l'emprima modificaziun",
'tog-nocache' => 'Impedir che tes navigatur memorisescha las paginas en il cache',
-'tog-enotifwatchlistpages' => "Trametta in e-mail sch'ina pagina sin mia glista d'observaziun vegn midada",
+'tog-enotifwatchlistpages' => "Ma trametter in e-mail sch'ina pagina u ina datoteca sin mia glista d'observaziun vegn midada",
'tog-enotifusertalkpages' => "Trametta in e-mail sch'i ha dà midadas sin mia pagina da discussiun.",
-'tog-enotifminoredits' => 'Trametta era in e-mail tar pitschnas midadas da las paginas',
+'tog-enotifminoredits' => 'Era ma trametter in e-mail en cas da midadas pitschnas vid paginas u datotecas',
'tog-enotifrevealaddr' => "Mussar mia adressa dad e-mail en e-mails d'avis",
'tog-shownumberswatching' => "Mussar il dumber d'utilisaders che obervan questa pagina",
'tog-oldsig' => 'Signatura actuala:',
'qbbrowse' => 'Sfegliar',
'qbedit' => 'Modifitgar',
'qbpageoptions' => 'Questa pagina',
-'qbpageinfo' => 'Context',
'qbmyoptions' => 'Mia pagina',
'qbspecialpages' => 'paginas spezialas',
'faq' => 'FAQ',
'vector-action-protect' => 'Bloccar',
'vector-action-undelete' => 'Restituir',
'vector-action-unprotect' => 'Midar la protecziun',
-'vector-simplesearch-preference' => 'Activar las propostas per tschertgar extendidas (be per il skin Vector)',
+'vector-simplesearch-preference' => 'Activar la trav da tschertgar simplifitgada (be per il skin Vector)',
'vector-view-create' => 'Crear',
'vector-view-edit' => 'Modifitgar',
'vector-view-history' => 'Cronologia',
'youhavenewmessages' => 'Ti has $1 ($2).',
'newmessageslink' => 'novs messadis',
'newmessagesdifflink' => "l'ultima midada",
+'youhavenewmessagesfromusers' => 'Ti has $1 da{{PLURAL:$3|d in utilisader| $3 utilisaders}} ($2).',
+'youhavenewmessagesmanyusers' => 'Ti has $1 da divers utilisaders ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|in nov messadi|novs messadis}}',
+'newmessagesdifflinkplural' => 'ultima{{PLURAL:$1| midada|s midadas}}',
'youhavenewmessagesmulti' => 'Ti as novs messadis en $1',
'editsection' => 'modifitgar',
'editold' => 'modifitgar',
'dberrortext' => 'In sbagl da la sintaxa da la dumonda a la banca da datas è capità.
Quai po esser in sbagl en la software.
L\'ultima dumonda per la banca da datas era:
-<blockquote><tt>$1</tt></blockquote>
-ord la funcziun "<tt>$2</tt>".
-La banca da datas ha rapportà l\'errur "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+ord la funcziun "<code>$2</code>".
+La banca da datas ha rapportà l\'errur "<samp>$3: $4</samp>".',
'dberrortextcl' => 'In sbagl da la sintaxa da la dumonda a la banca da datas è capità.
L\'ultima dumonda per la banca da datas era:
"$1"
'cannotdelete' => 'Betg pussaivel da stizzar la pagina u datoteca "$1".
Eventualmain ha gia insatgi auter stizza quest element.',
'cannotdelete-title' => 'Impussibel da stizzar la pagina "$1"',
+'delete-hook-aborted' => 'Il prozess da stizzar è vegnì interrut dal hook.
+El ha dà nagina explicaziun.',
'badtitle' => "Il num da titel endatà n'è betg valid",
'badtitletext' => 'Il titel da pagina era betg valid, vids u in titel inter-lingua u inter-wiki betg correct.
El po cuntegnair in u plirs segns che na pon betg vegnir utilisads en titels.',
Emprova danovamain en in per minutas.',
'protectedpagetext' => "Questa pagina è vegnida bloccada per evitar ch'ella vegn modifitgada.",
'viewsourcetext' => 'Ti pos guardar e copiar il code-fundamental da questa pagina:',
-'protectedinterface' => "Questa pagina cuntegna text per l'interfatscha da la software ed è protegida per evitar abus.",
-'editinginterface' => "'''Attenziun:''' Questa pagina cuntegna text che vegn duvra da la software MediaWiki. Midadas influenzeschan directamain l'interfatscha da l'utilisader. Sche ti vuls far translaziuns u correcturas: Studegia da far quai sin [//translatewiki.net/wiki/Main_Page?setlang=rm translatewiki.net], per che las midadas pon vegnidas surprendidas da tut ils projects.",
+'viewyourtext' => "Ti pos giardar e copiar la il code da funatuna da '''tias midadas''' vid questa pagina:",
+'protectedinterface' => "Questa pagina cuntegna ils texts per l'interfatscha da la software ed è protegida per evitar abus.",
+'editinginterface' => "'''Attenziun:''' Questa pagina cuntegna text che vegn duvra en la interfatscha da questa software.
+Midadas influenzeschan directamain l'interfatscha per tut ils utilisaders sin questa vichi.
+Sche ti vuls far translaziuns u correcturas per tut las vichis, lura utilisescha [//translatewiki.net/ translatewiki.net], il project per translatar MediaWiki.",
'sqlhidden' => '(Zuppentà la dumonda da SQL)',
'cascadeprotected' => "Questa pagina è protegida da modificaziuns perquai ch'ella è integrada en suandanta{{PLURAL:$1| pagina, ch'è protegida|s paginas, ch'èn protegidas}} entras l'opziun «protecziun ertada»:
$2",
'ns-specialprotected' => 'Paginas spezialas no pon betg vegnir modifitgadas.',
'titleprotected' => 'Quest titel è vegnì protegì da la creaziun da [[User:$1|$1]].
Il motiv inditgà è "\'\'$2\'\'".',
+'filereadonlyerror' => 'Impussibel da modifitgar la datoteca "$1" perquai ch\'il repository da datotecas "$2" è en il modus \'be leger\'.
+
+L\'administratur che ha bloccà l\'access da scriva ha dà suandanta explicaziun: "$3".',
+'invalidtitle-knownnamespace' => 'Titel nunvalid cun tip da pagina "$2" e text "$3"',
+'invalidtitle-unknownnamespace' => 'Titel nunvalid cun numer da tip da pagina nunenconuschent $1 e text "$2"',
+'exception-nologin' => "Betg s'annunzià",
+'exception-nologin-text' => "Questa pagina u acziun pretenda che ti es s'annunzià en quest vichi.",
# Virus scanner
'virus-badscanner' => "Configuraziun fauss: antivirus nunenconuschent: ''$1''",
'remembermypassword' => "S'annunziar permanantamain sin quest computer (per maximalmain $1 {{PLURAL:$1|di|dis}})",
'securelogin-stick-https' => "Restar collià entras HTTPS suenter l'annunzia",
'yourdomainname' => 'Vossa domain',
+'password-change-forbidden' => 'Ti na pos betg midar pleds-clav sin quest vichi.',
'externaldberror' => "U ch'i è capità ina errur cun l'autentificaziun externa u che ti na dastgas betg actualisar tes conto extern.",
'login' => "T'annunziar",
'nav-login-createaccount' => "T'annunziar / registrar",
'emailconfirmlink' => "Confermar l'adressa dad e-mail",
'invalidemailaddress' => "L'adressa dad e-mail na po betg vegnir acceptada perquai ch'ella para dad avair in format nunvalid.
Endatescha per plaschair ina adressa formatada correctamain u svida cumplettamain il champ.",
+'cannotchangeemail' => "L'adressa dad e-mail dal conto na po betg vegnir midada sin questa vichi.",
+'emaildisabled' => 'Questa pagina na sa betg trametter e-mails.',
'accountcreated' => "Creà il conto d'utilisader",
'accountcreatedtext' => "Il conto d'utilisader per $1 è vegnì creà.",
'createaccount-title' => 'Crear in conto per {{SITENAME}}',
# E-mail sending
'php-mail-error-unknown' => 'Errur nunenconuschenta en la funcziun mail() da PHP',
+'user-mail-no-addy' => 'Empruvà da trametter in e-mail senza ina adressa dad e-mail.',
# Change password dialog
'resetpass' => 'Midar il pled-clav',
'passwordreset-pretext' => '{{PLURAL:$1||Endatescha in dals tocs da data sutvart}}',
'passwordreset-username' => "Num d'utilisader:",
'passwordreset-domain' => 'Domain:',
+'passwordreset-capture' => "Mussar l'e-mail che resultescha?",
+'passwordreset-capture-help' => "Sche ti activeschas quest champ vegn l'e-mail (cun il pled-clav temporar) mussà a ti sco era tramess a l'utilisader.",
'passwordreset-email' => 'Adressa dad e-mail:',
'passwordreset-emailtitle' => 'Detagls davart il conto sn {{SITENAME}}',
'passwordreset-emailtext-ip' => "Insatgi (probablamain ti da l'adressa dad IP $1) ha dumandà in nov pled-clav per la pagina {{SITENAME}} ($4).
'passwordreset-emailelement' => "Num d'utilisader: $1
Pled-clav temporar: $2",
'passwordreset-emailsent' => 'In e-mail cun in nov pled-clav è vegnì tramess.',
+'passwordreset-emailsent-capture' => "L'e-mail per far endament, che vegn mussà sutvart, è vegnì tramess.",
+'passwordreset-emailerror-capture' => "L'e-mail per far endament, che vegn mussà sutvart, è vegnì generà, ma ha dentant betg pudì vegnir spedì a l'utilisader: $1",
# Special:ChangeEmail
'changeemail' => "Midar l'adressa dad e-mail",
+'changeemail-header' => "Midar l'adressa dad e-mail dal conto",
+'changeemail-text' => 'Cumpletescha quest formular per midar tia adressa dad e-mail. Ti stos endatar tes pled-clav per confermar questa midada.',
'changeemail-no-info' => "Ti stos t'annunziar per acceder directamain questa pagina.",
+'changeemail-oldemail' => 'Adressa dad e-mail actuala:',
'changeemail-newemail' => ' Nova adressa dad e-mail',
'changeemail-none' => '(nagina)',
+'changeemail-submit' => "Midar l'adressa dad e-mail",
'changeemail-cancel' => 'Interrumper',
# Edit page toolbar
<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tschertgar en ils logs],
u [{{fullurl:{{FULLPAGENAME}}|action=edit}} crear questa pagina]</span>.',
'noarticletext-nopermission' => 'Questa pagina cuntegna actualmain nagin text.
-Ti pos [[Special:Search/{{PAGENAME}}|tschertgar il term]] sin in\'autra pagina,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tschertgar en ils logs]</span>.',
+Ti pos [[Special:Search/{{PAGENAME}}|tschertgar quest titel]] en autras paginas u <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tschertgar en ils protocols correspundents]</span>, ma ti n\'has betg ils dretgs da crear questa pagina.',
+'missing-revision' => 'La versiun #$1 da la pagina cun il num "{{PAGENAME}}" n\'exista betg.
+
+Quai capita savnes sche ti cliccas sin ina colliaziun antiquada en la cronologia per ina pagina ch\'è vegnida stizzada.
+Detagls pon vegnri chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} protocol da stizzar].',
'userpage-userdoesnotexist' => 'Il conto d\'utilisader "<nowiki>$1</nowiki>" n\'èxista betg.
Controllescha sch ti vuls propi crear/modiftgar questa pagina.',
'userpage-userdoesnotexist-view' => 'Il conto d\'utilisader "$1" n\'exista betg.',
* '''Firefox / Safari:''' Tegnair ''Shift'' durant cliccar ''chargiar danovamain'', u smatgar ''Ctrl-F5'' u ''Ctrl-R'' (''⌘-R'' sin in Mac)
* '''Google Chrome:''' Smatgar ''Ctrl-Shift-R'' (''⌘-Shift-R'' sin in Mac)
* '''Internet Explorer:''' Tegnair ''Ctrl'' durant cliccar ''Rechargiar,'' u smatgar ''Ctrl-F5''
-* '''Konqueror:''' Cliccar ''Rechargiar'' ni smatgar ''F5''
* '''Opera:''' Stizzar il cache sut ''Tools → Preferences''",
'usercssyoucanpreview' => "'''Tip:''' Utilisescha il buttun \"{{int:showpreview}}\" per testar tes nov CSS avant che memorisar.",
'userjsyoucanpreview' => "'''Tip:''' Utilisescha il buttun \"{{int:showpreview}}\" per testar tes nov JavaScript avant che memorisar.",
'note' => "'''Remartga:'''",
'previewnote' => "'''Fa stim che quai è be ina prevista.'''
Tias midadas n'èn anc betg vegnidas memorisadas!",
+'continue-editing' => 'Cuntinuar da modifitgar',
'previewconflict' => "Questa prevista visualisescha il text en il champ d'endataziun sura. Uschia vegn la pagina vesair ora, sche ti la memoriseschas ussa.",
'session_fail_preview' => "'''Stgisa! Tia modificaziun na pudeva betg vegnir memorisada perquei che las datas da la sesida èn idas a perder.'''
Emprova per plaschair danovamain.
Quai po capitar sche ti utiliseschas in survetsch da proxy anonim che na funcziuna betg correctamain.",
'edit_form_incomplete' => "'''Entginas parts dal formular da modifitgar n'èn betg arrivadas cumplattamain al server; controllescha p.pl. che tias midadas èn intactas ed emprova danovamain.'''",
'editing' => 'Modifitgar $1',
+'creating' => 'Crear $1',
'editingsection' => 'Modifitgar $1 (secziun)',
'editingcomment' => 'Modifitgar $1 (nova secziun)',
'editconflict' => 'Conflict da modifitgar: $1',
'edit-conflict' => 'Conflict da modifitgar.',
'edit-no-change' => 'Tia modificaziun è vegnida ignorada perquai che naginas midadas èn vegnidas fatgas en il text.',
'edit-already-exists' => "Betg pussaivel da crear ina nova pagina perquai ch'ella exista gia.",
+'defaultmessagetext' => 'Text da standard',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Attenziun:''' Questa pagina cuntegna memia bleras funcziuns dal parser cumplitgadas.
'parser-template-loop-warning' => 'Chattà cirquit da models: [[$1]]',
'parser-template-recursion-depth-warning' => 'Surpassa la limita da recursiun da models ($1)',
'language-converter-depth-warning' => 'Surpassà la limita ($1) dal convertader da linguas',
+'node-count-exceeded-category' => "Paginas, nua ch'il dumber da nufs è surpassà",
+'node-count-exceeded-warning' => 'Questa pagina ha surpassà il dumber da nufs',
+'expansion-depth-exceeded-category' => "Paginas, nua che la porfunditad d'extensiun è surpassada",
+'expansion-depth-exceeded-warning' => "Questa pagina ha surpassà la profunditad d'expansiun",
+'parser-unstrip-loop-warning' => "Chattà circul d'unstrip",
+'parser-unstrip-recursion-limit' => 'Limita da recursiun ($1) per unstrip è surpassà',
+'converter-manual-rule-error' => 'Ina errur è cumparida en la regla manuala da convertir la lingua',
# "Undo" feature
'undo-success' => 'Questa modificaziun na po betg vegnir revocada.
'rev-deleted-text-view' => "Questa versiun da la pagina è vegnida '''stizzada'''.
Ti pos la vesair; detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log da stizzar].",
'rev-suppressed-text-view' => "Questa versiun da la pagina è vegnida '''supprimida'''.
-Sco administratur pos ti la vesair; detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log da supprimer].",
+Ti pos la vesair; detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log da supprimer].",
'rev-deleted-no-diff' => "Ti na pos betg guardar quest diff perquai ch'ina da las versiuns è vegnida '''stizzada'''.
Detagls pos ti chattar en [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log da stizzar].",
'rev-suppressed-no-diff' => "Ti na pos betg guardar quest diff perquai ch'ina da las versiuns è vegnida '''stizzada'''.",
'rev-deleted-unhide-diff' => "Ina da las versiuns da quest diff è vegnida '''stizzada'''.
Detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log da stizzar].
-Sco administratur pos ti anc adina [$1 contemplar quest diff].",
+Ti pos anc adina [$1 contemplar quest diff] sche ti vuls cuntinuar.",
'rev-suppressed-unhide-diff' => "Ina da las versiuns da quest diff è vegnida '''supprimida'''.
Detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log da supprimer].
-Sco administratur pos ti anc adina [$1 contemplar quest diff] sche ti vuls cuntinuar.",
+Ti pos anc adina [$1 contemplar quest diff] sche ti vuls cuntinuar.",
'rev-deleted-diff-view' => "Ina da las versiuns da quest diff è vegnida '''stizzada'''.
-Sco administratur pos ti vesair quest diff; detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log da stizzar].",
+Ti pos vesair quest diff; detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log da stizzar].",
'rev-suppressed-diff-view' => "Ina da las versiuns da quest diff è vegnida '''supprimida'''.
-Sco administratur pos ti vesair quest diff; detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log da supprimer].",
+Ti pos vesair quest diff; detagls pon vegnir chattads en il [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log da supprimer].",
'rev-delundel' => 'mussar/zuppentar',
'rev-showdeleted' => 'mussar',
'revisiondelete' => 'Stizzar/restituir versiuns',
'revdelete-show-file-submit' => 'Gea',
'revdelete-selected' => "'''{{PLURAL:$2|Versiun tschernida|Versiuns tschernidas}} da [[:$1]]:'''",
'logdelete-selected' => "'''{{PLURAL:$1|Elements dal log tschernì|Elements dal log tschernids}}:'''",
+'revdelete-text' => "'''Versiuns ed ocurrenzas stizzadas cumparan era vinavant en la cronologia ed en ils protocols, dentant èn parts dal cuntegn betg accessibels al public.'''
+Auters administraturs sin {{SITENAME}} vegnan tuttina ad avair access al cuntegn zuppentà e pon restaurar puspè la pagina, sch'i na vegnan betg definidas restricziuns supplementaras.",
+'revdelete-confirm' => 'Confermescha che ti vuls far quai, che ti chapeschas las consequenzas e che ti fas quai en accordanza cun [[{{MediaWiki:Policy-url}}|las directivas]].',
+'revdelete-suppress-text' => "Ti duessas '''be''' supprimer en quests cas:
+* Infurmaziuns offendentas
+* Infurmaziuns persunalas deplazzadas
+*: ''Adressas e numers da telefon, numers d'AVS, etc.''",
+'revdelete-legend' => 'Definir restricziuns da la visibilitad',
+'revdelete-hide-text' => 'Zuppetar il text da la versiun',
+'revdelete-hide-image' => 'Zuppentar il cuntegn da la datoteca',
+'revdelete-hide-name' => "Zuppentar l'acziun ed la destinaziun",
+'revdelete-hide-comment' => 'Zuppentar la resumaziun da la midada',
+'revdelete-hide-user' => "Zuppentar il num d'utilisader/l'adressa IP da l'autur",
+'revdelete-hide-restricted' => 'Supprimer las datas per administraturs sco per auters',
+'revdelete-radio-same' => '(na betg midar)',
'revdelete-radio-set' => 'Gea',
'revdelete-radio-unset' => 'Na',
+'revdelete-suppress' => 'Supprimer il motiv per administraturs sco per auters',
+'revdelete-unsuppress' => 'Allontanar las restricziuns per versiuns restauradas',
'revdelete-log' => 'Motiv:',
+'revdelete-submit' => 'Applitar a {{PLURAL:$1|la versiun tschernida|las versiuns tschernidas}}',
+'revdelete-success' => "'''Actualià cun success la visibilitad da la versiun.'''",
+'revdelete-failure' => "'''Betg pussaivel da midar la visibilitad da la versiun:'''
+$1",
+'logdelete-success' => "'''Definì cun success la visibilitad dal protocol.'''",
+'logdelete-failure' => "'''Betg pussaivel da midar la visibilitad dal protocol:'''
+$1",
'revdel-restore' => 'midar la visibilitad',
'revdel-restore-deleted' => 'versiuns stizzadas',
'revdel-restore-visible' => 'versiuns visiblas',
'pagehist' => 'Istorgia da las versiuns',
+'deletedhist' => 'Cronologia da stizzar',
'revdelete-otherreason' => 'Auter/ulteriur motiv:',
'revdelete-reasonotherlist' => 'Auter motiv',
'revdelete-edit-reasonlist' => 'Modifitgar ils motivs per stizzar',
'timezoneregion-indian' => 'Ocean Indic',
'timezoneregion-pacific' => 'Ocean pacific',
'allowemail' => 'Retschaiver e-mails dad auters utilisaders',
-'prefs-searchoptions' => 'Opziuns da tschertgar',
+'prefs-searchoptions' => 'Tschertgar',
'prefs-namespaces' => 'Tips da pagina',
'defaultns' => 'Uschiglio tschertgar en quests tips da pagina:',
'default' => 'Standard',
# Info page
'pageinfo-title' => 'Infurmaziuns per "$1"',
-'pageinfo-header-edits' => 'Midadas',
+'pageinfo-header-basic' => 'Infurmaziuns da basa',
+'pageinfo-header-edits' => 'Cronologia da las midadas',
'pageinfo-views' => 'Dumber da visitas',
-'pageinfo-watchers' => 'Dumber dad observaturs',
-'pageinfo-edits' => 'Dumber da midadas',
-'pageinfo-authors' => 'Dumber dad auturs differents',
+'pageinfo-watchers' => 'Dumber dad observaturs da la pagina',
+'pageinfo-firstuser' => 'Creatur da la pagina',
+'pageinfo-firsttime' => 'Data da la creaziun da la pagina',
+'pageinfo-lastuser' => 'Ultima midada da',
+'pageinfo-lasttime' => "Data da l'ultima midada",
+'pageinfo-edits' => 'Dumber total da midadas',
+'pageinfo-authors' => 'Dumber total dad auturs differents',
# Patrolling
'markaspatrolleddiff' => 'Marcar sco controllà',
'watchlisttools-edit' => "Mussar e modifitgar la glista d'observaziun",
'watchlisttools-raw' => 'Modifitgar il format da la glista (import/export)',
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])',
+
# Core parser functions
'unknown_extension_tag' => 'Tag d\'extensiun nunenconuschent "$1"',
'duplicate-defaultsort' => '\'\'\'Attenziun:\'\'\' La clav da zavrar da standard "$2" remplazza la clav da zavrar da standard veglia "$1".',
'version-software' => 'Software installada',
'version-software-product' => 'Product',
'version-software-version' => 'Versiun',
+'version-entrypoints' => "URLs dals puncts d'entrada",
+'version-entrypoints-header-entrypoint' => "Punct d'entrada",
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => 'Percurs da la datoteca',
* <span class="mw-specialpagecached">Paginas spezialas en il cache (pon esser antiquadas).</span>',
'specialpages-group-maintenance' => 'Rapports da mantegnamant',
'specialpages-group-other' => 'Autras paginas spezialas',
-'specialpages-group-login' => "T'annunziar / registrar",
+'specialpages-group-login' => "S'annunziar / crear in conto",
'specialpages-group-changes' => 'Ultimas midadas e logs',
'specialpages-group-media' => 'Rapports ed elements multimedials',
'specialpages-group-users' => 'Utilisaders e dretgs',
'api-error-uploaddisabled' => 'La funcziun da chargiar datotecas sin quest vichi è deactivada.',
'api-error-verification-error' => 'Questa datoteca pudess esser corrupta ni avair ina extensiun faussa.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|secunda|secundas}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuta|minutas}}',
+'duration-hours' => '$1 {{PLURAL:$1|ura|uras}}',
+'duration-days' => '$1 {{PLURAL:$1|di|dis}}',
+'duration-weeks' => '$1 {{PLURAL:$1|emna|emnas}}',
+'duration-years' => '$1 {{PLURAL:$1|onn|onns}}',
+'duration-decades' => '$1 {{PLURAL:$1|decada|decadas}}',
+'duration-centuries' => '$1 {{PLURAL:$1|tschientaner|tschientaners}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millenni|millennis}}',
+
);
'note' => "'''Notă:'''",
'previewnote' => "'''Țineți cont că aceasta este doar o previzualizare.'''
Modificările dumneavoastră nu au fost încă salvate!",
-'continue-editing' => 'Continuare editare',
+'continue-editing' => 'Mergi la zona de editare',
'previewconflict' => 'Această pre-vizualizare reflectă textul din caseta de sus, respectiv felul în care va arăta articolul dacă alegeți să-l salvați acum.',
'session_fail_preview' => "'''Ne pare rău! Nu am putut procesa modificarea dumneavoastră din cauza pierderii datelor sesiunii.
Vă rugăm să încercați din nou.
'right-rollback' => 'Revocarea rapidă a modificărilor ultimului utilizator care a modificat o pagină particulară',
'right-markbotedits' => 'Marchează revenirea ca modificare efectuată de robot',
'right-noratelimit' => 'Neafectat de limitele raportului',
-'right-import' => 'Importă pagini de la alte wiki',
+'right-import' => 'Importă pagini de la alte wikiuri',
'right-importupload' => 'Importă pagini dintr-o încărcare de fișier',
'right-patrol' => 'Marchează modificările altora ca patrulate',
'right-autopatrol' => 'Modificările proprii marcate ca patrulate',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Format inclus|Formate incluse}} ($1)',
'pageinfo-toolboxlink' => 'Informații despre pagină',
+'pageinfo-redirectsto' => 'Redirecționează către',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Numărată ca pagină cu conținut',
+'pageinfo-contentpage-yes' => 'Da',
+'pageinfo-protect-cascading' => 'Protecțiile provin în cascadă de aici',
+'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-protect-cascading-from' => 'Protecțiile provin în cascadă de la',
# Skin names
'skinname-standard' => 'Clasic',
'noarticletext' => 'Non ge stè scritte ninde jndr\'à sta pàgene.
Tu puè [[Special:Search/{{PAGENAME}}|cercà pe quiste titele]] jndr\'à otre pàggene, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cange sta pàgene]</span>.',
'noarticletext-nopermission' => "Pe mò non ge stè teste jndr'à sta pàgene.
-Tu puè [[Special:Search/{{PAGENAME}}|cercà pe stu titele]] jndr'à otre pàggene,
-o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirche jndr'à l'archivije cullegate]</span>.",
+Tu puè [[Special:Search/{{PAGENAME}}|cercà pe stu titole]] jndr'à otre pàggene,
+o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cirche jndr'à l'archivije cullegate]</span>, ma non ge tìne le permesse pe ccrejà sta pàgene.",
'missing-revision' => "'A revisione #\$1 d'a pàgene chiamate \"{{PAGENAME}}\" non g'esiste.
Quiste succede normalmende purcé 'u cunde jè collegate a 'na pàgene ca ha state scangellate.
'edit-already-exists' => "Non ge puè ccrejà 'na pàgene nove purcè esiste già!",
'defaultmessagetext' => 'Messàgge de teste de base',
+# Content models
+'content-model-text' => 'teste semblice',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
# Parser/template warnings
'expensive-parserfunction-warning' => "Fà attenziò: Sta vosce tène 'nu sbuenne de funziune de chiamate a l'analizzatore.
'shared-repo' => "'nu condenitore de cose condivise",
'shared-repo-name-wikimediacommons' => 'Wikimedia Commons',
'filepage.css' => "/* 'U CSS ca se iacchie aqquà jè ingluse sus 'a pàgene de descrizione d'u file, pure ingluse pe le client de le Uicchi furastire */",
-'upload-disallowed-here' => "Sfortunatamende non ge puè sovrascrivere st'immaggine.",
+'upload-disallowed-here' => 'Non ge puè sovrascrivere stu file.',
# File reversion
'filerevert' => "'Nvirte $1",
'undeletedrevisions' => '{{PLURAL:$1|1 revisione|$1 revisiune}} ripristinete',
'undeletedrevisions-files' => '{{PLURAL:$1|1 revisione|$1 revisiune}} e {{PLURAL:$2|1 file|$2 file}} ripristinete',
'undeletedfiles' => '{{PLURAL:$1|1 file|$1 file}} ripristinete',
-'cannotundelete' => "Repristine fallite;
-quaccheotre pò essere ca ha repristinate 'a pàgene apprime.",
+'cannotundelete' => 'Repristine fallite:
+$1',
'undeletedpage' => "'''$1 ha state repristinate'''
Ligge l'[[Special:Log/delete|archivije de le scangellaminde]] pe 'nu report de le urteme scangellaminde e repristinaminde.",
'pageinfo-magic-words' => '{{PLURAL:$1|Parole|Parole}} maggiche ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorije|Categorije}} scunnute ($1)',
'pageinfo-templates' => 'Esclude {{PLURAL:$1|template|template}} ($1)',
+'pageinfo-contentpage-yes' => 'Sine',
+'pageinfo-protect-cascading-yes' => 'Sine',
# Skin names
'skinname-standard' => 'Classeche',
* @author HalanTul
* @author Huuchin
* @author Illusion
+ * @author Incnis Mrsi
* @author Iniquity
* @author Innv
* @author Jackie
* @author Lockal
* @author MaxBioHazard
* @author MaxSem
+ * @author NBS
* @author Ola
* @author Ole Yves
* @author Putnik
* @author Sagan
* @author Shirayuki
* @author Sk
+ * @author Spider
* @author TarzanASG
* @author Temuri rajavi
* @author Vago
'vector-action-protect' => 'Защитить',
'vector-action-undelete' => 'Восстановить',
'vector-action-unprotect' => 'Изменить защиту',
-'vector-simplesearch-preference' => 'Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c Ñ\80аÑ\81Ñ\88иÑ\80еннÑ\8bе поиÑ\81ковÑ\8bе подÑ\81казки (только для оформления «Векторное»)',
+'vector-simplesearch-preference' => 'Ð\92клÑ\8eÑ\87иÑ\82Ñ\8c Ñ\83пÑ\80оÑ\89Ñ\91ннÑ\83Ñ\8e Ñ\81Ñ\82Ñ\80окÑ\83 поиÑ\81ка (только для оформления «Векторное»)',
'vector-view-create' => 'Создание',
'vector-view-edit' => 'Правка',
'vector-view-history' => 'История',
'edit-already-exists' => 'Невозможно создать новую страницу.
Она уже существует.',
'defaultmessagetext' => 'Текст по умолчанию',
+'content-failed-to-parse' => 'Содержимое $2 не соответствует типу $1: $3.',
+'invalid-content-data' => 'Недопустимые данные',
+'content-not-allowed-here' => 'Содержимое "$1" недопустимо на странице [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'викитекст',
+'content-model-text' => 'обычный текст',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Внимание. Эта страница содержит слишком много вызовов ресурсоёмких функций.
'shared-repo-from' => 'из $1',
'shared-repo' => 'общего хранилища',
'shared-repo-name-wikimediacommons' => 'Викисклада',
-'upload-disallowed-here' => 'Ð\9a Ñ\81ожалениÑ\8e, вÑ\8b не можеÑ\82е пеÑ\80езапиÑ\81аÑ\82Ñ\8c Ñ\8dÑ\82о изобÑ\80ажение.',
+'upload-disallowed-here' => 'Ð\92Ñ\8b не можеÑ\82е пеÑ\80езапиÑ\81аÑ\82Ñ\8c Ñ\8dÑ\82оÑ\82 Ñ\84айл.',
# File reversion
'filerevert' => 'Возврат к старой версии $1',
'undeletedrevisions' => '$1 {{PLURAL:$1|изменение|изменения|изменений}} восстановлено',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|версия|версии|версий}} и $2 {{PLURAL:$2|файл|файла|файлов}} восстановлено',
'undeletedfiles' => '$1 {{PLURAL:$1|файл восстановлен|файла восстановлено|файлов восстановлено}}',
-'cannotundelete' => 'Ошибка восстановления. Возможно, кто-то другой уже восстановил страницу.',
+'cannotundelete' => 'Ошибка восстановления:
+$1',
'undeletedpage' => "'''Страница «$1» была восстановлена.'''
Для просмотра списка последних удалений и восстановлений см. [[Special:Log/delete|журнал удалений]].",
'immobile-target-namespace-iw' => 'Ссылка интервики не может быть использована для переименования.',
'immobile-source-page' => 'Эту страницу нельзя переименовать.',
'immobile-target-page' => 'Нельзя присвоить странице это имя.',
+'bad-target-model' => 'Невозможно преобразовать $1 в $2: несовместимые модели данных.',
'imagenocrossnamespace' => 'Невозможно дать файлу имя из другого пространства имён',
'nonfile-cannot-move-to-file' => 'Невозможно переименовывать страницы в файлы',
'imagetypemismatch' => 'Новое расширение файла не соответствует его типу',
# Info page
'pageinfo-title' => 'Сведения по «$1»',
+'pageinfo-not-current' => 'Данные предоставляются только для текущей правки.',
'pageinfo-header-basic' => 'Основные сведения',
'pageinfo-header-edits' => 'История изменений',
'pageinfo-header-restrictions' => 'Защита страницы',
'pageinfo-magic-words' => '{{PLURAL:$1|Магическое слово|Магические слова}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытых категорий}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Шаблон|Шаблонов}} ($1)',
+'pageinfo-toolboxlink' => 'Сведения о странице',
+'pageinfo-contentpage-yes' => 'Да',
+'pageinfo-protect-cascading-yes' => 'Да',
# Skin names
'skinname-standard' => 'Классическое',
# Scary transclusion
'scarytranscludedisabled' => '[Интервики-включение отключено]',
'scarytranscludefailed' => '[Ошибка обращения к шаблону $1]',
+'scarytranscludefailed-httpstatus' => '[Не удалось загрузить шаблон для $1: HTTP $2]',
'scarytranscludetoolong' => '[Слишком длинный URL]',
# Delete conflict
'sqlite-no-fts' => '$1 без поддержки полнотекстового поиска',
# New logging system
-'logentry-delete-delete' => '$1 удалил страницу $3',
+'logentry-delete-delete' => '$1 {{GENDER:$1|удалил|удалила}} страницу $3',
'logentry-delete-restore' => '$1 восстановил страницу $3',
'logentry-delete-event' => '$1 изменил видимость {{PLURAL:$5|$5 записи журнала|$5 записей журнала|$5 записей журнала}} на $3: $4',
'logentry-delete-revision' => '$1 изменил видимость {{PLURAL:$5|$5 версии|$5 версий|$5 версий}} на странице $3: $4',
'qbbrowse' => 'Sendra',
'qbedit' => 'Tońge',
'qbpageoptions' => 'Noa sakam',
-'qbpageinfo' => 'Sakam reaḱ thuti',
'qbmyoptions' => 'In̕anḱ sakamko',
'qbspecialpages' => 'Asokay teaḱ sakamko',
'faq' => 'Baḍae kupuliko',
'last' => 'Laha renaḱ',
'page_first' => 'Pahilaḱ',
'page_last' => 'Mucạt́aḱ',
-'histlegend' => "Farak bachao: oka nãwã aroeko tulạoem menet́kan, onako cinhạ em kate boloḱ se latar baṭon linmẽ.<br/>
+'histlegend' => "Farak bachao: oka nãwã aroeko tulạoem menet́kan, onako cinhạ em kate boloḱ se latar baṭon linmẽ.<br />
Unuduḱ: '''({{int:cur}})''' = nahaḱ nãwã aroeko saõte tulạo, '''({{int:last}})''' = laha reaḱ nãwã aroe sãote tulạo, '''{{int:minoreditletter}}''' = huḍiń sompadon.",
'history-fieldset-title' => 'Sendray jaṛ',
'history-show-deleted' => 'khạli get giḍiyaḱ koge',
'qbbrowse' => 'Nàviga',
'qbedit' => 'Acontza',
'qbpageoptions' => 'Possibilidades de sa pàgina',
-'qbpageinfo' => 'Cuntestu de sa pàgina',
'qbmyoptions' => 'Is preferèntzias meas',
'qbspecialpages' => 'Pàginas spetziales',
'faq' => 'Pregontas/Respostas (FAQ)',
'qbbrowse' => 'Quetzexal',
'qbedit' => 'Ticpatlöx',
'qbpageoptions' => 'Jan páhina',
-'qbpageinfo' => 'Contextua',
'qbmyoptions' => 'Hepáhinám',
'qbspecialpages' => 'Páhinám extravám',
'faq' => 'Cocmíiit cmaa',
'qbbrowse' => 'Naršītė',
'qbedit' => 'Taisītė',
'qbpageoptions' => 'Tas poslapis',
-'qbpageinfo' => 'Konteksts',
'qbmyoptions' => 'Mona poslapē',
'qbspecialpages' => 'Specēlė̅jė poslapē',
'faq' => 'DOK',
'qbbrowse' => 'Cabba',
'qbedit' => 'Sbadl',
'qbpageoptions' => 'Tasnat ad',
-'qbpageinfo' => 'Context',
'qbmyoptions' => 'Tisnatin inu',
'qbspecialpages' => 'Tisnatin timzlay',
'faq' => 'Isqsitn li bdda tsutulnin',
# Info page
'pageinfo-title' => '"$1" සඳහා තොරතුරු',
+'pageinfo-header-basic' => 'මූලික තොරතුරු',
'pageinfo-header-edits' => 'සංස්කරණ',
+'pageinfo-header-restrictions' => 'පිටු ආරක්ෂණය',
+'pageinfo-display-title' => 'මාතෘකාව පෙන්වන්න',
+'pageinfo-default-sort' => 'පෙරනිමි තේරීම් යතුර',
+'pageinfo-length' => 'පිටු දිග (බයිට් වලින්)',
+'pageinfo-article-id' => 'පිටු අනන්යනාංකය',
+'pageinfo-robot-policy' => 'සෙවුම් එන්ජිම් තත්ත්වය',
'pageinfo-views' => 'නැරඹුම් සංඛ්යාව',
-'pageinfo-watchers' => 'මුරකරන්නන් සංඛ්යාව',
-'pageinfo-edits' => 'සංස්කරණයන් සංඛ්යාව',
-'pageinfo-authors' => 'ප්රභින්න කර්තෘවරුන් සංඛ්යාව',
+'pageinfo-watchers' => 'පිටු මුරකරන්නන් සංඛ්යාව',
+'pageinfo-redirects-name' => 'මෙම පිටුවට යළියොමු ගණන',
+'pageinfo-subpages-name' => 'මෙම පිටුවෙහි උපපිටු',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|යළියොමු වෙයි|යළියොමු වෙති}}; $3 {{PLURAL:$3|යළියොමු-නොවෙයි|යළියොමු-නොවෙති}})',
+'pageinfo-firstuser' => 'පිටු තැනූ තැනැත්තේ',
+'pageinfo-firsttime' => 'පිටු තැනූ දිනය',
+'pageinfo-lastuser' => 'අවසන් සංස්කාරක',
+'pageinfo-lasttime' => 'අවසන් සංස්කරණය වූ දිනය',
+'pageinfo-edits' => 'මුළු සංස්කරණ සංඛ්යාව',
+'pageinfo-authors' => 'ප්රභින්න කර්තෘවරුන් මුළු සංඛ්යාව',
+'pageinfo-recent-edits' => 'මෑත සංස්කරණ සංඛ්යාව (අවසන් $1 තුලදී)',
+'pageinfo-recent-authors' => 'මෑත ප්රභින්න කර්තෘවරුන් සංඛ්යාව',
+'pageinfo-magic-words' => 'මැජික් {{PLURAL:$1|වචනය|වචන}} ($1)',
+'pageinfo-toolboxlink' => 'පිටු තොරතුරු',
# Patrolling
'markaspatrolleddiff' => 'පරික්ෂාකර බැලූ ලෙස සලකුණු කරන්න',
'uploadnewversion-linktext' => 'Nahrať novú verziu tohto súboru',
'shared-repo-from' => 'z $1',
'shared-repo' => 'zdieľané úložisko',
-'upload-disallowed-here' => 'Ľutujeme, tento súbor nie je možné prepísať.',
+'upload-disallowed-here' => 'Tento súbor nie je možné prepísať.',
# File reversion
'filerevert' => 'Obnoviť $1',
'note' => "'''Opomba:'''",
'previewnote' => "'''Pomnite, da stran le predogledujete.'''
Vaših sprememb še nismo shranili!",
-'continue-editing' => 'Nadaljujte z urejanjem',
+'continue-editing' => 'Pojdi na urejevalno območje',
'previewconflict' => 'V prikazanem predogledu je v zgornjem predelu urejanja navedeno besedilo, kakor se bo prikazalo, če ga boste shranili.',
'session_fail_preview' => "'''Oprostite! Zaradi izgube podatkov o seji nam vašega urejanja žal ni uspelo obdelati.'''
Prosimo, poskusite znova.
'edit-no-change' => 'Vaše urejanje je bilo prezrto, saj ni vsebovalo sprememb.',
'edit-already-exists' => 'Ni bilo mogoče ustvariti nove strani, ker že obstaja.',
'defaultmessagetext' => 'Prednastavljeno besedilo',
+'content-failed-to-parse' => 'Nisem mogel razčleniti vsebine $2 za obliko $1: $3',
+'invalid-content-data' => 'Neveljavni podatki vsebine',
+'content-not-allowed-here' => 'Vsebina »$1« ni dovoljena na strani [[$2]]',
# Content models
'content-model-wikitext' => 'wikibesedilo',
Prosimo, preverite delovanje strani, počakajte kratek čas in poskusite ponovno.
Morda želite poskusiti ob času manjše zasedenosti.',
-'license' => 'Licenca:',
+'license' => 'Licenciranje:',
'license-header' => 'Licenca',
'nolicense' => 'Nobeno',
'license-nopreview' => '(Predogled ni na voljo)',
'shared-repo-from' => 'iz $1',
'shared-repo' => 'skupno skladišče',
'shared-repo-name-wikimediacommons' => 'Wikimedijina Zbirka',
-'upload-disallowed-here' => 'Slike žal ne morete prepisati.',
+'upload-disallowed-here' => 'Datoteke žal ne morete prepisati.',
# File reversion
'filerevert' => 'Vrni $1',
'watchnochange' => 'V prikazanem časovnem obdobju ni nihče spremenil nadzorovanih strani.',
'watchlist-details' => 'Spremljate $1 {{PLURAL:$1|stran|strani|strani|strani|strani}} (pogovorne strani niso vštete).',
'wlheader-enotif' => '* Obveščanje po elektronski pošti je omogočeno.',
-'wlheader-showupdated' => "* Od vašega zadnjega ogleda spremenjene strani so prikazanje '''krepko'''.",
+'wlheader-showupdated' => "* Strani, spremenjene od vašega zadnjega ogleda, so prikazane '''krepko'''.",
'watchmethod-recent' => 'med nedavnimi urejanji iščem spremljane strani',
'watchmethod-list' => 'med spremljanimi stranmi iščem nedavna urejanja',
'watchlistcontains' => 'Spremljate $1 {{PLURAL:$1|stran|strani}}.',
'dellogpage' => 'Dnevnik brisanja',
'dellogpagetext' => 'Spodaj je prikazan seznam nedavnih brisanj.',
'deletionlog' => 'dnevnik brisanja',
-'reverted' => 'Vrnjeno na prejšnjo redakcijo.',
+'reverted' => 'Vrnjeno na prejšnje urejanje.',
'deletecomment' => 'Razlog:',
'deleteotherreason' => 'Drugi/dodatni razlogi:',
'deletereasonotherlist' => 'Drug razlog',
'immobile-target-namespace-iw' => 'Povezava interwiki ni veljaven cilj za premik strani.',
'immobile-source-page' => 'Te strani ni mogoče prestaviti.',
'immobile-target-page' => 'Ne morem premakniti na ta ciljni naslov.',
+'bad-target-model' => 'Želen cilj uporablja drugačno obliko vsebine. Ne morem pretvoriti iz $1 v $2.',
'imagenocrossnamespace' => 'Ne morem premakniti datoteke izven imenskega prostora datotek',
'nonfile-cannot-move-to-file' => 'Ne morem premakniti nedatoteko v imenski prostor datotek',
'imagetypemismatch' => 'Nova končnica datoteke se ne ujema z njeno vrsto',
# Info page
'pageinfo-title' => 'Informacije o »$1«',
+'pageinfo-not-current' => 'Prikažemo lahko samo podatke trenutne redakcije.',
'pageinfo-header-basic' => 'Osnovni podatki',
'pageinfo-header-edits' => 'Zgodovina urejanja',
'pageinfo-header-restrictions' => 'Zaščita strani',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrita kategorija|Skriti kategoriji|Skrite kategorije}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Vključena predloga|Vključeni predlogi|Vključene predloge}} ($1)',
'pageinfo-toolboxlink' => 'Podatki o strani',
+'pageinfo-redirectsto' => 'Preusmerja na',
+'pageinfo-redirectsto-info' => 'informacije',
+'pageinfo-contentpage' => 'Šteje kot stran s vsebino',
+'pageinfo-contentpage-yes' => 'Da',
+'pageinfo-protect-cascading' => 'Zaščite se dedujejo od tukaj',
+'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-protect-cascading-from' => 'Zaščite se dedujejo od',
# Patrolling
'markaspatrolleddiff' => 'Označite kot nadzorovano',
'vector-action-protect' => 'Заштити',
'vector-action-undelete' => 'Врати',
'vector-action-unprotect' => 'Промени заштиту',
-'vector-simplesearch-preference' => 'Ð\9fобоÑ\99Ñ\88ани пÑ\80едлози пÑ\80еÑ\82Ñ\80аге (само за тему „Векторско“)',
+'vector-simplesearch-preference' => 'УпÑ\80оÑ\88Ñ\9bено поÑ\99е за пÑ\80еÑ\82Ñ\80агÑ\83 (само за тему „Векторско“)',
'vector-view-create' => 'Направи',
'vector-view-edit' => 'Уреди',
'vector-view-history' => 'Историја',
'note' => "'''Напомена:'''",
'previewnote' => "'''Имајте у виду да је ово само преглед.'''
Ваше измене још нису сачуване!",
-'continue-editing' => 'Ð\9dаÑ\81Ñ\82ави Ñ\83Ñ\80еÑ\92иваÑ\9aе',
+'continue-editing' => 'Ð\98ди на Ñ\83Ñ\80еÑ\92иваÑ\87ки оквиÑ\80',
'previewconflict' => 'Овај преглед осликава како ће текст у текстуалном оквиру изгледати.',
'session_fail_preview' => "'''Нисмо могли да обрадимо вашу измену због губитка података сесије.'''
Покушајте поново.
'edit-already-exists' => 'Не могу да направим страницу.
Изгледа да она већ постоји.',
'defaultmessagetext' => 'Подразумевани текст поруке',
+'content-failed-to-parse' => 'Не могу да рашчланим садржај типа $2 за модел $1: $3',
+'invalid-content-data' => 'Неисправни подаци садржаја',
+'content-not-allowed-here' => 'Садржај модела „$1“ није дозвољен на страници [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'викитекст',
+'content-model-text' => 'чист текст',
+'content-model-javascript' => 'јаваскрипт',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Упозорење:''' ова страница садржи превише позива за рашчлањивање.
'shared-repo' => 'заједничко складиште',
'shared-repo-name-wikimediacommons' => 'Викимедијина остава',
'filepage.css' => '/* CSS који је постављен овде се налази на страницама за опис датотека, као и на страним викијима */',
-'upload-disallowed-here' => 'Ð\9dажалоÑ\81Ñ\82, не можеÑ\82е да замениÑ\82е овÑ\83 Ñ\81лику.',
+'upload-disallowed-here' => 'Ð\9dе можеÑ\82е да замениÑ\82е овÑ\83 даÑ\82оÑ\82еку.',
# File reversion
'filerevert' => 'Врати $1',
'undeletedrevisions' => '{{PLURAL:$1|Измена је враћена|$1 измене су враћене|$1 измена је враћено}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека|датотеке|датотека}} је враћено',
'undeletedfiles' => '{{PLURAL:$1|Датотека је враћена|$1 датотеке су враћене|$1 датотека је враћено}}',
-'cannotundelete' => 'Неуспешно враћање. Неко други је то урадио пре вас.',
+'cannotundelete' => 'Враћање није успело:
+$1',
'undeletedpage' => "'''Страница $1 је враћена'''
Погледајте [[Special:Log/delete|историју брисања]] за записе о скорашњим брисањима и враћањима.",
'immobile-target-namespace-iw' => 'Међувики веза није исправно одредиште за премештање странице.',
'immobile-source-page' => 'Ова страница се не може преместити.',
'immobile-target-page' => 'Не могу да преместим на жељени наслов.',
+'bad-target-model' => 'Жељено одредиште користи другачији модел садржаја. Не могу да претворим из $1 у $2.',
'imagenocrossnamespace' => 'Датотека се не може преместити у именски простор који не припада датотекама.',
'nonfile-cannot-move-to-file' => 'Не-датотеке не можете преместити у именски простор за датотеке',
'imagetypemismatch' => 'Екстензија нове датотеке се не поклапа с њеном врстом',
# Info page
'pageinfo-title' => 'Подаци о „$1“',
+'pageinfo-not-current' => 'Подаци могу бити приказани само за текућу измену.',
'pageinfo-header-basic' => 'Основни подаци',
'pageinfo-header-edits' => 'Историја измена',
'pageinfo-header-restrictions' => 'Заштита странице',
'pageinfo-magic-words' => '{{PLURAL:$1|Магична реч|Магичне речи}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Сакривена категорија|Сакривене категорије}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Укључени шаблон|Укључени шаблони}} ($1)',
+'pageinfo-toolboxlink' => 'Подаци о страници',
+'pageinfo-redirectsto' => 'Преусмерава на',
+'pageinfo-redirectsto-info' => 'подаци',
+'pageinfo-contentpage' => 'Рачуна се као страница са садржајем',
+'pageinfo-contentpage-yes' => 'Да',
+'pageinfo-protect-cascading' => 'Преносива заштита страница важи одавде',
+'pageinfo-protect-cascading-yes' => 'Да',
+'pageinfo-protect-cascading-from' => 'Странице са преносивом заштитом од',
# Skin names
'skinname-standard' => 'Класично',
# Scary transclusion
'scarytranscludedisabled' => '[Међувики укључивање шаблона је онемогућено]',
'scarytranscludefailed' => '[Добављање шаблона за $1 није успело]',
+'scarytranscludefailed-httpstatus' => '[Не могу да преузмем шаблон $1: HTTP $2]',
'scarytranscludetoolong' => '[URL адреса је предугачка]',
# Delete conflict
'vector-action-protect' => 'Zaštiti',
'vector-action-undelete' => 'Vrati',
'vector-action-unprotect' => 'Promeni zaštitu',
-'vector-simplesearch-preference' => 'Poboljšani predlozi pretrage (samo za temu „Vektorsko“)',
+'vector-simplesearch-preference' => 'Uprošćeno polje za pretragu (samo za temu „Vektorsko“)',
'vector-view-create' => 'Napravi',
'vector-view-edit' => 'Uredi',
'vector-view-history' => 'Istorija',
'note' => "'''Napomena:'''",
'previewnote' => "'''Imajte u vidu da je ovo samo pregled.'''
Vaše izmene još nisu sačuvane!",
-'continue-editing' => 'Nastavi uređivanje',
+'continue-editing' => 'Idi na uređivački okvir',
'previewconflict' => 'Ovaj pregled oslikava kako će tekst u tekstualnom okviru izgledati.',
'session_fail_preview' => "'''Nismo mogli da obradimo vašu izmenu zbog gubitka podataka sesije.'''
Pokušajte ponovo.
'edit-already-exists' => 'Ne mogu da napravim stranicu.
Izgleda da ona već postoji.',
'defaultmessagetext' => 'Podrazumevani tekst poruke',
+'content-failed-to-parse' => 'Ne mogu da raščlanim sadržaj tipa $2 za model $1: $3',
+'invalid-content-data' => 'Neispravni podaci sadržaja',
+'content-not-allowed-here' => 'Sadržaj modela „$1“ nije dozvoljen na stranici [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'vikitekst',
+'content-model-text' => 'čist tekst',
+'content-model-javascript' => 'javaskript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => "'''Upozorenje:''' ova stranica sadrži previše poziva za raščlanjivanje.
'shared-repo' => 'zajedničko skladište',
'shared-repo-name-wikimediacommons' => 'Vikimedijina ostava',
'filepage.css' => '/* CSS koji je postavljen ovde se nalazi na stranicama za opis datoteka, kao i na stranim vikijima */',
-'upload-disallowed-here' => 'Nažalost, ne možete da zamenite ovu sliku.',
+'upload-disallowed-here' => 'Ne možete da zamenite ovu datoteku.',
# File reversion
'filerevert' => 'Vrati $1',
'undeletedrevisions' => '{{PLURAL:$1|Izmena je vraćena|$1 izmene su vraćene|$1 izmena je vraćeno}}',
'undeletedrevisions-files' => '$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka|datoteke|datoteka}} je vraćeno',
'undeletedfiles' => '{{PLURAL:$1|Datoteka je vraćena|$1 datoteke su vraćene|$1 datoteka je vraćeno}}',
-'cannotundelete' => 'Neuspešno vraćanje. Neko drugi je to uradio pre vas.',
+'cannotundelete' => 'Vraćanje nije uspelo:
+$1',
'undeletedpage' => "'''Stranica $1 je vraćena'''
Pogledajte [[Special:Log/delete|istoriju brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
'immobile-target-namespace-iw' => 'Međuviki veza nije ispravno odredište za premeštanje stranice.',
'immobile-source-page' => 'Ova stranica se ne može premestiti.',
'immobile-target-page' => 'Ne mogu da premestim na željeni naslov.',
+'bad-target-model' => 'Željeno odredište koristi drugačiji model sadržaja. Ne mogu da pretvorim iz $1 u $2.',
'imagenocrossnamespace' => 'Datoteka se ne može premestiti u imenski prostor koji ne pripada datotekama.',
'nonfile-cannot-move-to-file' => 'Ne-datoteke ne možete premestiti u imenski prostor za datoteke',
'imagetypemismatch' => 'Ekstenzija nove datoteke se ne poklapa s njenom vrstom',
# Info page
'pageinfo-title' => 'Podaci o „$1“',
+'pageinfo-not-current' => 'Podaci mogu biti prikazani samo za tekuću izmenu.',
'pageinfo-header-basic' => 'Osnovni podaci',
'pageinfo-header-edits' => 'Istorija izmena',
'pageinfo-header-restrictions' => 'Zaštita stranice',
'pageinfo-magic-words' => '{{PLURAL:$1|Magična reč|Magične reči}} ($1)',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)',
+'pageinfo-toolboxlink' => 'Podaci o stranici',
+'pageinfo-redirectsto' => 'Preusmerava na',
+'pageinfo-redirectsto-info' => 'podaci',
+'pageinfo-contentpage' => 'Računa se kao stranica sa sadržajem',
+'pageinfo-contentpage-yes' => 'Da',
+'pageinfo-protect-cascading' => 'Prenosiva zaštita stranica važi odavde',
+'pageinfo-protect-cascading-yes' => 'Da',
+'pageinfo-protect-cascading-from' => 'Stranice sa prenosivom zaštitom od',
# Skin names
'skinname-standard' => 'Klasično',
# Scary transclusion
'scarytranscludedisabled' => '[Međuviki uključivanje šablona je onemogućeno]',
'scarytranscludefailed' => '[Dobavljanje šablona za $1 nije uspelo]',
+'scarytranscludefailed-httpstatus' => '[Ne mogu da preuzmem šablon $1: HTTP $2]',
'scarytranscludetoolong' => '[URL adresa je predugačka]',
# Delete conflict
'qbbrowse' => 'Browse',
'qbedit' => 'Kenki',
'qbpageoptions' => 'A papira disi',
-'qbpageinfo' => 'Abra a papira',
'qbmyoptions' => 'Mi papira',
'qbspecialpages' => 'Spesrutu papira',
'faq' => 'FAQ (Sani di ben aksi furu)',
'shared-repo-from' => 'från $1',
'shared-repo' => 'en gemensam filförvaring',
'filepage.css' => '/* CSS som skrivs här inkluderas på filbeskrivningssidan, även på utländska klientwikis */',
-'upload-disallowed-here' => 'Du kan inte skriva över denna bild.',
+'upload-disallowed-here' => 'Du kan inte skriva över denna fil.',
# File reversion
'filerevert' => 'Återställ $1',
# Info page
'pageinfo-title' => 'Information om "$1"',
+'pageinfo-not-current' => 'Information kan endast visas för den aktuella versionen.',
'pageinfo-header-basic' => 'Grundläggande information',
'pageinfo-header-edits' => 'Redigeringshistorik',
'pageinfo-header-restrictions' => 'Sidskydd',
'pageinfo-hidden-categories' => '{{PLURAL:$1|Dold kategori|Dolda kategorier}} ($1)',
'pageinfo-templates' => '{{PLURAL:$1|Inkluderad mall|Inkluderade mallar}} ($1)',
'pageinfo-toolboxlink' => 'Sidinformation',
+'pageinfo-redirectsto' => 'Omdirigerar till',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Räknas som en innehållssida',
+'pageinfo-contentpage-yes' => 'Ja',
+'pageinfo-protect-cascading-yes' => 'Ja',
# Skin names
'skinname-standard' => 'Standard',
'updated' => '(இற்றைப்படுத்தப்பட்டது)',
'note' => "'''குறிப்பு:'''",
'previewnote' => "'''இது ஒரு முன்தோற்றம் மட்டுமே''', உங்கள் மாற்றங்கள் இன்னும் சேமிக்கப்படவில்லை!",
-'continue-editing' => 'தà¯\8aà®\95à¯\81தà¯\8dதலà¯\88தà¯\8d தà¯\8aà®\9fà®°வும்',
+'continue-editing' => 'தà¯\8aà®\95à¯\81à®\95à¯\8dà®\95à¯\81à®®à¯\8d பà®\95à¯\81திà®\95à¯\8dà®\95à¯\81 à®\9aà¯\86லà¯\8dலவும்',
'previewconflict' => 'இந்த முன்தோற்றம் உரை தொகுப்புப் பகுதியின் மேற்பகுதியிலுள்ள உரையைப் பிரதிபலிக்கின்றது. நீங்கள் இப்பொழுது சேமித்தால் மேற்படி தோற்றமே கிடைக்கும்.',
'session_fail_preview' => "'''உங்கள் அமர்வுத் தரவுகள் அழிந்துப்போனமையால் உங்கள் தொகுப்பை செயற்படுத்த முடியவில்லை. அருள் கூர்ந்து மீண்டும் முயலவும். அதுவும் பலனளிக்காவிட்டால் விடுபதிகைச் செய்து மீண்டும் புகுபதிகைச் செய்யவும்'''",
'session_fail_preview_html' => "'''மன்னிக்கவும்! தங்கள் அமர்வுத் தரவுகள் அழிந்துப்போனமையால் தொகுப்பைச் செயற்படுத்த முடியவில்லை.'''
'uploadnewversion-linktext' => 'இப்படிமத்தின் புதிய பதிப்பை பதிவேற்று',
'shared-repo-from' => '$1-ல் இருந்து',
'shared-repo' => 'பகிர்ந்து பயன்கொள் வைப்பகம்',
+'upload-disallowed-here' => 'நீங்கள் இந்தக் கோப்பை மேலெழுத முடியாது.',
# File reversion
'filerevert' => '$1 ஐ முன்நிலையாக்கு',
'doubleredirects' => 'இரட்டை வழிமாற்றுகள்',
'doubleredirectstext' => 'இந்தப் பட்டியல் போலியான நேர்மதிப்புக்களைக் கொண்டிருக்கக்கூடும். இது வழக்கமாக, இணைப்புடன் கூடிய மேலதிக உரை முதலாவது #வழிமாற்றுக்குக் கீழ் இருப்பதைக் குறிக்கும்.ஒவ்வொரு வரியும், முதலாம் இரண்டாம் வழிமாற்றுகளுக்கு இணைப்புகளைக் கொண்டிருப்பதுடன், இரண்டாவது வழிமாற்று உரையின் முதல் வரிக்கும் இணைப்பைக் கொண்டிருக்கும், இது வழக்கமாக முதலாவது வழிமாற்று குறித்துக் காட்ட வேண்டிய "உண்மையான" இலக்குக் கட்டுரையைக் கொடுக்கும்.',
'double-redirect-fixed-move' => '[[$1]] நகர்த்தப்பட்டுவிட்டது. இப்பொழுது [[$2]] உக்கு வழிமாற்று தருகின்றது.',
+'double-redirect-fixed-maintenance' => '[[$1]] என்பதிலிருந்து [[$2]] என்பதற்கு இரட்டை வழிமாற்றைச் சரிசெய்கிறது',
'double-redirect-fixer' => '(இரட்டை) வழிமாற்றைத் திருத்தியபயனர்',
'brokenredirects' => 'முறிந்த வழிமாற்றுகள்',
'mailnologintext' => 'நீங்கள்[[Special:UserLogin|புகுபதிகை செய்திருப்பதுடன்]]
ஏனைய பயனர்களுக்கு மின்னஞ்சல் அனுப்பக்கூடியத்தாக செல்லுபடியாகக்கூடிய மின்னஞ்சல் முகவரியொன்றும் உங்களுடைய [[Special:Preferences|விருப்பத் தெரிவுகளில்]] கொடுபட்டிருக்கவேண்டும்.',
'emailuser' => 'இப் பயனருக்கு மின்னஞ்சல் செய்',
+'emailuser-title-notarget' => 'பயனருக்கு மின்னஞ்சல் செய்',
'emailpage' => 'மின்னஞ்சல் பயனர்',
'emailpagetext' => 'நீங்கள் கீழ்வரும் படிவத்தை உபயோகித்து இந்த பயனருக்கு மின்னஞ்சல் செய்யலாம்.
# Info page
'pageinfo-title' => '"$1" பக்கத்துக்கான தகவல்',
-'pageinfo-header-edits' => 'தொகுப்புகள்',
+'pageinfo-header-basic' => 'அடிப்படைத் தகவல்',
+'pageinfo-header-edits' => 'தொகுப்பு வரலாறு',
+'pageinfo-header-restrictions' => 'பக்கக் காப்பு',
+'pageinfo-header-properties' => 'பக்க இயல்புகள்',
+'pageinfo-display-title' => 'காட்சித் தலைப்பு',
+'pageinfo-length' => 'பக்க நீளம் (எண்ணுண்மிகளில்)',
+'pageinfo-article-id' => 'பக்க அடையாள இலக்கம்',
+'pageinfo-robot-policy' => 'தேடற்பொறி நிலைமை',
'pageinfo-views' => 'காட்சிகள் எண்ணிக்கை',
'pageinfo-watchers' => 'பார்வையாளர்கள் எண்ணிக்கை',
+'pageinfo-firstuser' => 'பக்க உருவாக்குநர்',
+'pageinfo-firsttime' => 'பக்கம் உருவாக்கப்பட்ட காலம்',
+'pageinfo-lastuser' => 'பிந்திய தொகுப்பாளர்',
'pageinfo-edits' => 'தொகுப்புகளின் எண்ணிக்கை:',
'pageinfo-authors' => 'சாதகமான அம்சங்களை பெற்றிருக்கும் எழுத்தாளர்கள் எண்ணிக்கை',
'qbbrowse' => 'ಬ್ರೌಸ್',
'qbedit' => 'ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ',
'qbpageoptions' => 'ಈ ಪುಟ',
-'qbpageinfo' => 'ಸನ್ನಿವೇಶ',
'qbmyoptions' => 'ಎನ್ನ ಪುಟೊಲು',
'qbspecialpages' => 'ವಿಶೇಷ ಪುಟೊಲು',
'faq' => 'ಸಾಮಾನ್ಯವಾದ್ ಕೇನುನ ಪ್ರಶ್ನೆಲು',
'note' => "'''గమనిక:'''",
'previewnote' => "'''ఇది మునుజూపు మాత్రమేనని గుర్తుంచుకోండి.'''
మీ మార్పులు ఇంకా భద్రమవ్వలేదు!",
-'continue-editing' => 'దిదà±\8dà°¦à±\81బాà°\9fà±\81ని à°\95à±\8aనసాà°\97à°¿à°\82à°\9aండి',
+'continue-editing' => 'సరిదిదà±\8dà°¦à±\87 à°\9aà±\8bà°\9fà±\81à°\95à°¿ à°µà±\86à°³à±\8dà°³ండి',
'previewconflict' => 'భద్రపరచిన తరువాత పై టెక్స్ట్ ఏరియాలోని టెక్స్టు ఇలాగ కనిపిస్తుంది.',
'session_fail_preview' => "'''క్షమించండి! సెషను డేటా పోవడం వలన మీ మార్పులను స్వీకరించలేకపోతున్నాం.'''
దయచేసి మళ్ళీ ప్రయత్నించండి.
'vector-action-move' => 'ย้าย',
'vector-action-protect' => 'ป้องกัน',
'vector-action-undelete' => 'ยกเลิกการลบ',
-'vector-action-unprotect' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\84à¹\88าà¸\81ารà¸\9bà¸\81à¸\9bà¹\89à¸à¸\87à¸\82à¹\89à¸à¸¡à¸¹à¸¥',
+'vector-action-unprotect' => 'à¹\80à¸\9bลีà¹\88ยà¸\99à¸\84à¹\88าà¸\81ารà¸\9bà¹\89à¸à¸\87à¸\81ัà¸\99',
'vector-simplesearch-preference' => 'เปิดใช้งานคำแนะนำการค้นหาขั้นสูง (สำหรับสกิน Vector เท่านั้น)',
'vector-view-create' => 'สร้าง',
'vector-view-edit' => 'แก้ไข',
'vector-view-history' => 'ดูประวัติ',
'vector-view-view' => 'อ่าน',
'vector-view-viewsource' => 'ดูโค้ด',
-'actions' => 'à¸\81ารà¸\81ระà¸\97ำ',
+'actions' => 'à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81าร',
'namespaces' => 'เนมสเปซ',
'variants' => 'สิ่งที่แตกต่าง',
'delete' => 'ลบ',
'deletethispage' => 'ลบหน้านี้',
'undelete_short' => 'เรียกคืน {{PLURAL:$1|1 การแก้ไข|$1 การแก้ไข}}',
-'viewdeleted_short' => 'ดู{{PLURAL:$1|1 การแก้ไขที่ถูกลบ|$1 การแก้ไขที่ถูกลบ}}',
+'viewdeleted_short' => 'ดู {{PLURAL:$1|1 การแก้ไขที่ถูกลบ|$1 การแก้ไขที่ถูกลบ}}',
'protect' => 'ล็อก',
'protect_change' => 'เปลี่ยน',
'protectthispage' => 'ล็อกหน้านี้',
'badaccess' => 'มีข้อผิดพลาดในการใช้สิทธิ',
'badaccess-group0' => 'คุณไม่ได้รับอนุญาตให้ดำเนินการตามที่ร้องขอนี้',
-'badaccess-groups' => 'à¸\81ารà¸\81ระà¸\97ำà¸\97ีà¹\88รà¹\89à¸à¸\87à¸\82à¸à¸\99ีà¹\89สà¸\87วà¸\99à¹\84วà¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89{{PLURAL:$2|à¸\88าà¸\81à¸\81ลุà¹\88ม|à¸\88าà¸\81กลุ่มใดกลุ่มหนึ่ง ดังนี้}}: $1',
+'badaccess-groups' => 'à¸\9bà¸\8fิà¸\9aัà¸\95ิà¸\81ารà¸\97ีà¹\88à¸\84ุà¸\93รà¹\89à¸à¸\87à¸\82à¸à¸\99ีà¹\89สà¸\87วà¸\99à¹\84วà¹\89à¹\80à¸\89à¸\9eาะà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\83à¸\99{{PLURAL:$2|à¸\81ลุà¹\88ม|กลุ่มใดกลุ่มหนึ่ง ดังนี้}}: $1',
'versionrequired' => 'ต้องการมีเดียวิกิรุ่น $1',
'versionrequiredtext' => 'ต้องการมีเดียวิกิรุ่น $1 สำหรับใช้งานหน้านี้ ดูเพิ่ม [[Special:Version|รุ่นซอฟต์แวร์]]',
'youhavenewmessages' => 'คุณมี $1 ($2)',
'newmessageslink' => 'ข้อความใหม่',
'newmessagesdifflink' => 'การเปลี่ยนแปลงล่าสุด',
+'youhavenewmessagesfromusers' => 'คุณมี $1 จาก{{PLURAL:$3|ผู้ใช้คนอื่น|ผู้ใช้ $3 คน}} ($2)',
+'youhavenewmessagesmanyusers' => 'คุณมี $1 จากผู้ใช้หลายคน ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|ข้อความใหม่|ข้อความใหม่}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|การเปลี่ยนแปลง|การเปลี่ยนแปลง}}ล่าสุด',
'youhavenewmessagesmulti' => 'คุณมีข้อความใหม่ที่ $1',
'editsection' => 'แก้ไข',
'editold' => 'แก้ไข',
'ns-specialprotected' => 'หน้าพิเศษไม่สามารถแก้ไขได้',
'titleprotected' => "หัวเรื่องนี้ได้รับการป้องกันไม่ให้สร้างใหม่ โดย [[User:$1|$1]]
เหตุผลที่ให้ไว้ คือ ''$2''",
+'exception-nologin' => 'ไม่ได้ล็อกอิน',
+'exception-nologin-text' => 'หน้าหรือปฏิบัติการนี้กำหนดให้คุณล็อกอินเข้าสู่วิกินี้ก่อน',
# Virus scanner
'virus-badscanner' => "การตั้งค่าผิดพลาด: ไม่รู้จักตัวสแกนไวรัส: ''$1''",
# Diffs
'history-title' => 'ประวัติรุ่นปรับปรุงของ "$1"',
+'difference-title' => 'ความแตกต่างระหว่างรุ่นของ "$1"',
+'difference-title-multipage' => 'ความแตกต่างระหว่างหน้า "$1" และ "$2"',
'difference-multipage' => '(ความแตกต่างระหว่างหน้าต่างๆ)',
'lineno' => 'แถว $1:',
'compareselectedversions' => 'เปรียบเทียบสองรุ่นที่เลือก',
'allpagesprefix' => 'แสดงหน้าที่ขึ้นต้นด้วย:',
'allpagesbadtitle' => 'ชื่อเรื่องนี้ไม่ถูกต้อง อาจสะกดผิด ลิงก์มาจากภาษาอื่นหรือวิกิอื่น หรือมีตัวอักษรที่ไม่สามารถใช้เป็นชื่อเรื่องได้',
'allpages-bad-ns' => '{{SITENAME}} ไม่มีเนมสเปซในชื่อ "$1"',
+'allpages-hide-redirects' => 'ซ่อนการเปลี่ยนทาง',
# Special:Categories
'categories' => 'หมวดหมู่',
'rollback' => 'ย้อนการแก้ไขกลับฉุกเฉิน',
'rollback_short' => 'ย้อนกลับฉุกเฉิน',
'rollbacklink' => 'ย้อนกลับฉุกเฉิน',
+'rollbacklinkcount' => 'ย้อนกลับฉุกเฉิน $1 การแก้ไข',
'rollbackfailed' => 'ย้อนไม่สำเร็จ',
'cantrollback' => 'ไม่สามารถย้อนการแก้ไขได้ เนื่องจากหน้านี้ไม่มีผู้แก้ไขรายอื่นอีก',
'alreadyrolled' => 'ไม่สามารถย้อนรุ่นล่าสุด
# New logging system
'logentry-delete-delete' => '$1 ลบหน้า $3',
'logentry-delete-restore' => '$1 กู้คืนหน้า $3',
+'logentry-delete-event' => '$1 เปลี่ยนทัศนวิสัยของ $5 รายการปูมใน $3: $4',
'revdelete-content-hid' => 'เนื้อหาถูกซ่อน',
'revdelete-summary-hid' => 'คำอธิบายอย่างย่อถูกซ่อน',
'revdelete-uname-hid' => 'ชื่อผู้ใช้ถูกซ่อน',
'qbbrowse' => 'Дијә кардеј',
'qbedit' => 'Сәрост кардеј',
'qbpageoptions' => 'Ым сәһифә',
-'qbpageinfo' => 'Мәзмун.',
'qbmyoptions' => 'Чымы сәһифон',
'qbspecialpages' => 'Хысусијә сәһифон',
'faq' => 'РАП',
* @author Goktr001
* @author Hanberke
* @author Hcagri
+ * @author Hedda Gabler
* @author Ijon
* @author Incelemeelemani
* @author Joseph
'vector-action-protect' => 'Koru',
'vector-action-undelete' => 'Silinmeyi geri al',
'vector-action-unprotect' => 'Korumayı değiştir',
-'vector-simplesearch-preference' => 'Gelişmiş arama önerilerini getir (Sadece Vector görünümü için)',
+'vector-simplesearch-preference' => 'Gelişmiş arama önerilerini etkinleştir (Sadece Vector görünümü için)',
'vector-view-create' => 'Oluştur',
'vector-view-edit' => 'Düzenle',
'vector-view-history' => 'Geçmişi gör',
'updatedmarker' => 'son ziyaretimden sonra güncellenmiş',
'printableversion' => 'Yazdırılabilir sürüm',
'permalink' => 'Kalıcı bağlantı',
-'print' => 'Bastır',
+'print' => 'Yazdır',
'view' => 'Görüntüle',
'edit' => 'Düzenle',
'create' => 'Oluştur',
'youhavenewmessages' => 'Yeni $1 var ($2).',
'newmessageslink' => 'mesajınız',
'newmessagesdifflink' => 'son değişiklik',
-'newmessageslinkplural' => 'mesajınız',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Başka bir kullanıcıdan|$3 kullanıcılardan}} $1 var. ($2)',
+'youhavenewmessagesmanyusers' => 'Birçok kullanıcıdan $1 var. ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|yeni mesajınız|yeni mesajlarınız}}',
'newmessagesdifflinkplural' => 'son {{PLURAL:$1|değişiklik|değişiklikler}}',
'youhavenewmessagesmulti' => "$1'de yeni mesajınız var.",
'editsection' => 'düzenle',
# General errors
'error' => 'Hata',
'databaseerror' => 'Veritabanı hatası',
-'dberrortext' => 'Veritabanı sorgu sözdizimi hatası oluştu.
+'dberrortext' => 'Bir veritabanı sorgusu sözdizimi hatası oluştu.
Bu yazılımdaki bir hatadan kaynaklanabilir.
"<tt>$2</tt>" işlevinden denenen son sorgulama:
<blockquote><tt>$1</tt></blockquote>.
'viewsourcetext' => 'Bu sayfanın kaynağını görebilir ve kopyalayabilirsiniz:',
'viewyourtext' => "Bu sayfaya '''yaptığınız değişikliklerin''' kaynağını görünteleyip kopyalayabilirsiniz:",
'protectedinterface' => "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır. Eklemek ya da bütün vikilerdeki çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesi [//translatewiki.net/ translatewiki.net]'i kullanın.",
-'editinginterface' => "'''UYARI:''' Yazılım için arayüz sağlamakta kullanılan bir sayfayı değiştirmektesiniz. Bu sayfadaki değişiklikler kullanıcı arayüzünü diğer kullanıcılar için de değiştirecektir. Çeviriler için, lütfen [//translatewiki.net/wiki/Main_Page?setlang=tr translatewiki.net]'yi kullanarak MediaWiki yerelleştirme projesini dikkate alınız.",
+'editinginterface' => "'''UYARI:''' Wiki yazılımı için arayüz sağlamakta kullanılan bir sayfayı değiştirmektesiniz. Bu sayfadaki değişiklikler kullanıcı arayüzünü diğer kullanıcılar için de değiştirecektir. Çeviriler için, lütfen [//translatewiki.net/wiki/Main_Page?setlang=tr translatewiki.net]'yi kullanarak MediaWiki yerelleştirme projesini dikkate alınız.",
'sqlhidden' => '(SQL gizli sorgu)',
'cascadeprotected' => 'Bu sayfa değişiklik yapılması engellenmiştir, çünkü "kademeli" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:
$2',
'edit-already-exists' => 'Yeni sayfa oluşturulamıyor.
Sayfa zaten mevcut.',
'defaultmessagetext' => 'Varsayılan mesaj metni',
+'invalid-content-data' => 'Geçersiz içerik verisi',
+'content-not-allowed-here' => '"$1" içeriğine, [[$2]] sayfasında izin verilmemekte.',
# Content models
+'content-model-wikitext' => 'vikimetin',
+'content-model-text' => 'düz metin',
'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
# Parser/template warnings
'expensive-parserfunction-warning' => 'Uyarı: Bu sayfa çok fazla zengin derleyici fonksiyonu çağrısı içeriyor.
'parser-template-loop-warning' => 'Şablon düğümü tespit edildi: [[$1]]',
'parser-template-recursion-depth-warning' => 'Şablon özyineleme yoğunluğu sınırı aşıldı ($1)',
'language-converter-depth-warning' => 'Dil çevirici derinlik sınırı aşıldı ($1)',
+'node-count-exceeded-category' => 'Düğüm sayısı aşılan sayfalar',
+'node-count-exceeded-warning' => 'Sayfa düğüm sayımı aşıldı',
+'expansion-depth-exceeded-category' => 'Genişleme derinliği aşılan sayfalar',
+'expansion-depth-exceeded-warning' => 'Sayfa genişletme derinliği aşıldı',
+'parser-unstrip-loop-warning' => 'Yineleme döngüsü algılandı',
# "Undo" feature
'undo-success' => 'Bu değişiklik geri alınabilir. Lütfen aşağıdaki karşılaştırmayı kontrol edin, gerçekten bu değişikliği yapmak istediğinizden emin olun ve sayfayı kaydederek bir önceki değişikliği geriye alın.',
'revdelete-concurrent-change' => '$2 $1 tarihli öğe değiştirilirken hata: öğenin durumu siz değiştirmeye çalışırken bir başkası tarafından değiştirilmiş görünüyor.
Lütfen günlükleri kontrol edin.',
'revdelete-only-restricted' => '$2 $1 tarihli öğe gizlenirken hata: Öğeleri, diğer gizleme seçeneklerinden birini seçmeden, hizmetli görünümden bastıramazsınız.',
-'revdelete-reason-dropdown' => '*Genel silme sebepleri
-** Telif ihlali
-** Uygunsuz kişisel bilgi',
+'revdelete-reason-dropdown' => '*Genel silme nedenleri
+** Telif hakkı ihlali
+** Sakıncalı yorum veya kişisel bilgi
+** Sakıncalı kullanıcı adı
+** Muhtemel iftira niteliğinde bilgiler',
'revdelete-otherreason' => 'Diğer/ek sebep:',
'revdelete-reasonotherlist' => 'Diğer sebep',
'revdelete-edit-reasonlist' => 'Silme nedenlerini değiştir',
# Diffs
'history-title' => '"$1" sayfasının geçmişi',
'difference-title' => '"$1" sayfasının sürümleri arasındaki fark',
+'difference-title-multipage' => '"$1" ile "$2" sayfaları arasındaki fark',
'difference-multipage' => '(Sayfalar arasındaki fark)',
'lineno' => '$1. satır:',
'compareselectedversions' => 'Seçilen sürümleri karşılaştır',
'timezoneregion-indian' => 'Hint Okyanusu',
'timezoneregion-pacific' => 'Pasifik Okyanusu',
'allowemail' => 'Diğer kullanıcılar bana e-posta atabilsin',
-'prefs-searchoptions' => 'Arama seçenekleri',
+'prefs-searchoptions' => 'Arama',
'prefs-namespaces' => 'İsim alanları',
'defaultns' => 'Aksi halde bu ad alanlarında ara:',
'default' => 'varsayılan',
'upload-http-error' => 'Bir HTTP hatası oluştu: $1',
# File backend
+'backend-fail-stream' => '$1 dosyası okunamadı.',
'backend-fail-notexists' => '$1 dosyası mevcut değil.',
+'backend-fail-invalidpath' => '"$1" geçerli bir depolama yolu değil.',
'backend-fail-delete' => '"$1" dosyası silinemedi.',
+'backend-fail-alreadyexists' => '"$1" dosyası zaten mevcut.',
+'backend-fail-copy' => '"$1" dosyası, "$2" dosyasına kopyalanamadı.',
+'backend-fail-move' => '"$1" dosyası, "$2" dosyasına taşınamadı.',
'backend-fail-opentemp' => 'Geçici dosya açılamadı.',
+'backend-fail-writetemp' => 'Geçici dosya oluşturulamadı.',
'backend-fail-closetemp' => 'Geçici dosya kapanamadı.',
'backend-fail-read' => '$1 dosyası okunamadı.',
'backend-fail-create' => '$1 dosyası yazılamadı.',
'mostlinkedtemplates' => 'En çok kullanılan şablonlar',
'mostcategories' => 'En fazla kategoriye bağlanmış sayfalar',
'mostimages' => 'En çok bağlantı verilmiş dosyalar',
+'mostinterwikis' => "En çok interwiki'ye sahip sayfalar",
'mostrevisions' => 'En çok değişikliğe uğramış sayfalar',
'prefixindex' => 'Önek ile tüm sayfalar',
'shortpages' => 'Kısa sayfalar',
'allpages-bad-ns' => '{{SITENAME}} sitesinde "$1" ad alanı yok.',
'allpages-hide-redirects' => 'Yönlendirmeleri gizle',
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'En son görünüm.',
+
# Special:Categories
'categories' => 'Kategoriler',
'categoriespagetext' => "Aşağıdaki {{PLURAL:$1|kategori|kategoriler}} sayfa veya ortam içerir.
'mailnologin' => 'Gönderi adresi yok.',
'mailnologintext' => 'Diğer kullanıcılara e-posta gönderebilmeniz için [[Special:UserLogin|oturum aç]]malısınız ve [[Special:Preferences|tercihler]] sayfasında geçerli bir e-posta adresiniz olmalı.',
'emailuser' => 'Bu kullanıcıya e-posta gönder',
+'emailuser-title-target' => 'Bu {{GENDER:$1|kullanıcıya}} e-posta gönder',
+'emailuser-title-notarget' => 'Kullanıcı e-posta',
'emailpage' => 'Kullanıcıya e-posta gönder',
'emailpagetext' => 'Bu kullanıcıya e-posta mesajı göndermek için aşağıdaki formu kullanabilirsiniz.
[[Special:Preferences|Kullanıcı tercihlerinizde]] girdiğiniz e-posta adresiniz, e-postanın "From (Kimden)" adresinde görünecektir, bu yüzden alıcı size direk cevap verebilecektir.',
'undelete-cleanup-error' => 'Kullanılmayan "$1" arşiv dosyasını silerken hata.',
'undelete-missing-filearchive' => 'Dosya arşiv IDsi $1 geri getirilemiyor çünkü veritabanında değil.
Daha önceden silinmesi geri alınmış olabilir.',
+'undelete-error' => 'Sayfa silinemiyor hatası',
'undelete-error-short' => 'Bu dosyanın silinmesini geri alırken hata çıktı: $1',
'undelete-error-long' => 'Bu dosyanın silinmesini geri alırken hatalar çıktı:
'import-interwiki-templates' => 'Tüm şablonları içer',
'import-interwiki-submit' => 'Import',
'import-interwiki-namespace' => 'Hedef ad alanı:',
+'import-interwiki-rootpage' => 'Hedeflenen kaynak sayfası (isteğe bağlı):',
'import-upload-filename' => 'Dosya adı:',
'import-comment' => 'Yorum:',
'importtext' => 'Lütfen dosyayı [[Special:Export|dışa aktarım yardımcı yazılımıyla]] kaynak vikiden dışa aktarın.
# Info page
'pageinfo-title' => 'Bilgi için "$1"',
-'pageinfo-header-edits' => 'Değişiklikler',
+'pageinfo-header-basic' => 'Temel bilgiler',
+'pageinfo-header-edits' => 'Düzenleme geçmişi',
+'pageinfo-header-restrictions' => 'Sayfa koruması',
+'pageinfo-header-properties' => 'Sayfa özellikleri',
+'pageinfo-display-title' => 'Görüntülenen başlık',
+'pageinfo-default-sort' => 'Varsayılan sıralama anahtarı',
+'pageinfo-length' => 'Sayfa uzunluğu (bayt cinsinden)',
+'pageinfo-article-id' => 'Sayfa ID',
+'pageinfo-robot-policy' => 'Arama motoru durumu',
+'pageinfo-robot-index' => 'İndekslenebilir',
+'pageinfo-robot-noindex' => 'İndekslenemez',
'pageinfo-views' => 'Görüntülenme sayısı',
-'pageinfo-watchers' => 'İzleyen sayısı',
+'pageinfo-watchers' => 'Sayfanın izleyici sayısı',
+'pageinfo-redirects-name' => 'Bu sayfaya yönlendirmeler',
'pageinfo-redirects-value' => '$1',
-'pageinfo-edits' => 'Değişiklik sayısı',
+'pageinfo-subpages-name' => 'Bu sayfanın alt sayfaları',
+'pageinfo-firstuser' => 'Sayfa oluşturucu',
+'pageinfo-firsttime' => 'Sayfa oluşturulma tarihi',
+'pageinfo-lastuser' => 'En son düzenleyici',
+'pageinfo-lasttime' => 'Son düzenleme tarihi',
+'pageinfo-edits' => 'Düzenleme sayısı',
+'pageinfo-authors' => 'Farklı yazar sayısı',
+'pageinfo-recent-edits' => 'Son zamanlardaki düzenlemeler (son $1)',
+'pageinfo-recent-authors' => 'Farklı yazarların son sayısı',
+'pageinfo-magic-words' => 'Sihirli {{PLURAL:$1|kelimeler|kelimeler}} ($1)',
+'pageinfo-hidden-categories' => 'Gizli {{PLURAL:$1|kategori|kategoriler}} ($1)',
+'pageinfo-templates' => 'Görüntülenen {{PLURAL:$1|şablon|şablonlar}} ($1)',
+'pageinfo-toolboxlink' => 'Sayfa bilgisi',
+'pageinfo-redirectsto' => 'Yönlendirilen',
+'pageinfo-redirectsto-info' => 'bilgi',
+'pageinfo-contentpage' => 'Bir içerik sayfası sayılır',
+'pageinfo-contentpage-yes' => 'Evet',
+'pageinfo-protect-cascading-yes' => 'Evet',
# Skin names
'skinname-standard' => 'Klasik',
'exif-serialnumber' => 'Kameranın seri numarası',
'exif-cameraownername' => 'Kameranın sahibi',
'exif-label' => 'Etiket',
+'exif-nickname' => 'Görüntünün resmî olmayan adı',
'exif-rating' => 'Oylama (5 üzerinden)',
'exif-copyrighted' => 'Telif hakkı durumu',
'exif-copyrightowner' => 'Telif hakkı sahibi',
'exif-webstatement' => 'Çevrimiçi telif hakkı bildirimi',
'exif-licenseurl' => 'Telif hakkı lisansı için URL',
'exif-morepermissionsurl' => 'Alternatif lisans bilgileri',
+'exif-attributionurl' => 'Bu çalışmayı yeniden kullanırken lütfen bağlantı verin',
'exif-pngfilecomment' => 'PNG dosyası yorumu',
'exif-disclaimer' => 'Sorumluluk reddi',
'exif-contentwarning' => 'İçerik uyarısı',
'exif-giffilecomment' => 'GIF dosyası yorumu',
+'exif-intellectualgenre' => 'Öğe türü',
'exif-subjectnewscode' => 'Konu kodu',
'exif-event' => 'Adı geçen olay',
+'exif-organisationinimage' => 'Organizasyon gösterilmiştir',
'exif-personinimage' => 'Adı geçen kişi',
'exif-originalimageheight' => 'Resmin kırpılmadan önceki yükseliği',
'exif-originalimagewidth' => 'Resmin kırpılmadan önceki genişliği',
'version-software' => 'Yüklü yazılım',
'version-software-product' => 'Ürün',
'version-software-version' => 'Versiyon',
+'version-entrypoints' => "Giriş noktası URL'leri",
+'version-entrypoints-header-entrypoint' => 'Giriş noktası',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => 'Dosyanın konumu',
'feedback-cancel' => 'İptal',
'feedback-submit' => 'Geribildirimi Gönder',
'feedback-adding' => 'Sayfaya geribildirim ekleniyor...',
+'feedback-error1' => 'Hata: Bilinmeyen API sonucu',
'feedback-error2' => 'Hata: Düzenleme başarısız oldu',
'feedback-error3' => "Hata: API'den yanıt yok",
'feedback-thanks' => 'Teşekkürler! Görüşleriniz "[$2 $1]" sayfasında paylaşılmıştır.',
'api-error-duplicate-popup-title' => 'Çift {{PLURAL:$1|dosya|dosya}}',
'api-error-empty-file' => 'Gönderdiğiniz dosya boş.',
'api-error-emptypage' => 'Yeni, boş bir sayfa oluşturmaya izin verilmez.',
+'api-error-fetchfileerror' => 'İç hata: Dosya alınırken bir hata oluştu.',
+'api-error-fileexists-forbidden' => '"$1" adıyla bir dosya zaten mevcut dolayısıyla üzerine yazamazsınız.',
'api-error-file-too-large' => 'Gönderdiğiniz dosya çok büyük.',
'api-error-filename-tooshort' => 'Dosya adı çok kısa.',
'api-error-filetype-banned' => 'Bu dosya biçimi yasaklanmıştır.',
'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|izin verilen bir dosya türü değil|izin verilen bir dosya türü değil}}. İzin verilen {{PLURAL:$3|dosya türü|dosya türleri}} $2.',
'api-error-filetype-missing' => 'Dosya uzantısı eksik.',
+'api-error-hookaborted' => 'Yapmaya çalıştığınız değişiklik bir eklenti tarafından iptal edildi.',
'api-error-http' => 'İç hata: sunucu ile bağlantı kurulamıyor.',
'api-error-illegal-filename' => 'Bu dosya adına izin verilmiyor.',
+'api-error-internal-error' => "İç hata: Wiki'ye yükleme yapma işleminizde bir şeyler ters gitti.",
'api-error-invalid-file-key' => 'İç hata: geçici depolama dosyası bulunamadı.',
+'api-error-missingparam' => 'İç hata: İstenilen parametreler eksik.',
+'api-error-missingresult' => 'İç hata: Kopyalamanın başarılı olup olmadığı belirlenemedi.',
'api-error-mustbeloggedin' => 'Dosya yükleyebilmek için oturum açmanız gereklidir.',
'api-error-mustbeposted' => 'İç hata: İstek HTTP POST gerektiriyor.',
+'api-error-noimageinfo' => 'Yükleme başarılı oldu, ancak sunucu, bize dosya hakkında herhangi bir bilgi vermedi.',
'api-error-nomodule' => 'İç hata: Yükleme modülü ayarı yapılmadı.',
'api-error-ok-but-empty' => 'İç hata: Sunucu yanıt vermiyor.',
'api-error-overwrite' => 'Varolan dosyanın üzerine yazmaya izin verilmiyor.',
'api-error-stashfailed' => 'İç hata: Sunucu, geçici dosyaları kaybetti.',
+'api-error-timeout' => 'Sunucu beklenen süre içinde yanıt vermedi.',
'api-error-unclassified' => 'Bilinmeyen bir hata oluştu.',
'api-error-unknown-code' => 'Bilinmeyen hata: "$1"',
'api-error-unknown-error' => 'İç hata: Dosya yüklemeye çalışırken bir şeyler ters gitti.',
'api-error-uploaddisabled' => 'Yükleme bu vikide devre dışı bırakılmıştır.',
'api-error-verification-error' => 'Dosya bozuk veya yanlış uzantıya sahip olabilir.',
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|saniye|saniye}}',
+'duration-minutes' => '$1 {{PLURAL:$1|dakika|dakika}}',
+'duration-hours' => '$1 {{PLURAL:$1|saat|saat}}',
+'duration-days' => '$1 {{PLURAL:$1|gün|gün}}',
+'duration-weeks' => '$1 {{PLURAL:$1|hafta|hafta}}',
+'duration-years' => '$1 {{PLURAL:$1|yıl|yıl}}',
+'duration-decades' => '$1 {{PLURAL:$1|on yıl|on yıl}}',
+'duration-centuries' => '$1 {{PLURAL:$1|yüzyıl|yüzyıl}}',
+'duration-millennia' => '$1 {{PLURAL:$1|bin yıl|bin yıl}}',
+
);
'qbfind' => 'Kuma',
'qbedit' => 'Lulamisa',
'qbpageoptions' => 'Tluka leri',
-'qbpageinfo' => 'mongo',
'qbmyoptions' => 'Matluka ya mina',
'qbspecialpages' => 'Matluka yohlawuleka',
'faq' => 'FAQ',
'qbbrowse' => 'Карау',
'qbedit' => 'Үзгәртү',
'qbpageoptions' => 'Бу бит',
-'qbpageinfo' => 'Бит турында мәгълүматлар',
'qbmyoptions' => 'Битләрем',
'qbspecialpages' => 'Махсус битләр',
'faq' => 'ЕБС',
'qbbrowse' => 'Qaraw',
'qbedit' => 'Üzgärtü',
'qbpageoptions' => 'Bu bit',
-'qbpageinfo' => 'Bit turında mäğlümatlar',
'qbmyoptions' => 'Bitlärem',
'qbspecialpages' => 'Maxsus bitlär',
'faq' => 'YBS',
'qbbrowse' => 'Каралаары',
'qbedit' => 'Өскертири',
'qbpageoptions' => 'Бо арын',
-'qbpageinfo' => 'Арын дугайында медээ',
'qbmyoptions' => 'Мээң арыннарым',
'qbspecialpages' => 'Тускай арыннар',
'faq' => 'Бо-ла салыр айтырыглар (БлСА)',
'createaccount' => 'Бүрүткел бижикти бүдүрери',
'gotaccount' => "Силер бүрүтекнип алдыңар де? '''$1'''.",
'gotaccountlink' => 'Кирер',
+'userlogin-resetlink' => 'Кирер бижик-саныңар уттуп алдыңар бе?',
'createaccountmail' => 'Э-чагаадан',
'createaccountreason' => 'Чылдагаан:',
'badretype' => 'Силерниң парлаан чажыт сөзүңер таарышпас.',
'image_tip' => 'Киир туткан файл',
'media_sample' => 'Чижек.ogg',
'media_tip' => 'Файлдың холбаазы',
-'hr_tip' => 'Доора шугум (use sparingly)',
+'hr_tip' => 'Доора шугум (көвей ажыглаваңар)',
# Edit pages
'summary' => 'Түңнел:',
'revertmerge' => 'Чарары',
# Diffs
-'history-title' => '«$1» деп арынның үндүрери төөгүзү',
+'history-title' => '«$1» деп арынның эдилге төөгүзү',
'lineno' => 'Одуруг $1:',
'compareselectedversions' => 'Шилип алган хевирлери деңнээри',
'editundo' => 'чөрчүүрү',
'searchprofile-project' => 'Төлевилел биле дуза арыннары',
'searchprofile-images' => 'Мультимедиа',
'searchprofile-everything' => 'Бүгүде',
-'searchprofile-advanced' => 'Калбартыры',
+'searchprofile-advanced' => 'Калбайтыр',
'searchprofile-articles-tooltip' => '$1 иштинден дилээри',
'searchprofile-project-tooltip' => '$1 иштинде дилээри',
'searchprofile-images-tooltip' => 'Файлдар дилээри',
'searchprofile-everything-tooltip' => 'Шупту арыннардан дилээри (сумележиишкиннерден база)',
'searchprofile-advanced-tooltip' => 'Айыткан аттар делгемнеринден дилээри',
'search-result-size' => '$1 ({{PLURAL:$2|$2 сөс}})',
-'search-redirect' => '(шигледир $1)',
+'search-redirect' => '($1-н шиглелге)',
'search-section' => '(«$1» деп салбыр)',
'search-suggest' => 'Силер «$1» деп бодадыңар чадавас',
'search-interwiki-more' => '(артык)',
'recentchanges-feed-description' => 'Бо агымда викиниң сөөлгү өскерлиишкиннерин көөрү.',
'recentchanges-label-newpage' => 'Бо өскерлиишкин чаа арынны чогааткан.',
'recentchanges-label-minor' => 'Бо өскерлиишкин бичии-дир',
-'recentchanges-label-bot' => 'Бо эдилгени робот күүсетти.',
-'recentchanges-label-unpatrolled' => 'Бо өскерлиишкин истенмейн каан',
-'rclistfrom' => 'Starting from $1 чаа өскерлиишкиннерни көргүзери',
+'recentchanges-label-bot' => 'Бо эдилгени робот күүсеткен.',
+'recentchanges-label-unpatrolled' => 'Бо өскертилге истетинмээн (патрульдаттынмаан)',
+'rclistfrom' => '$1 тура чаа өскерилгелерни көргүзер',
'rcshowhideminor' => 'Бичии өскерлиишкиннерни $1',
'rcshowhidebots' => 'Роботтарну $1',
'rcshowhideliu' => 'Кирер ажыглакчыларны $1',
'filehist-current' => 'амгы',
'filehist-datetime' => 'Ай, Хүн/Шак',
'filehist-thumb' => 'Бичии чурумал',
-'filehist-thumbtext' => 'Бичии чурумал for version as of $1',
+'filehist-thumbtext' => '$1 хамааржыр хевириниң биче чурумалы (миниатюразы)',
'filehist-user' => 'Ажыглакчы',
'filehist-dimensions' => 'Хемчээлдери',
'filehist-filesize' => 'Файл хемчээли',
'watchlist' => 'Мээң хайгаарал даңзым',
'mywatchlist' => 'Мээң хайгаарал даңзым',
'watchlistfor2' => '$1, силерге $2',
-'nowatchlist' => 'Чүү-даа Ñ\81илеÑ\80ниң Ñ\85айгааÑ\80ал даңзÑ\8bзÑ\8bнда Ñ\87ок.',
+'nowatchlist' => 'СилеÑ\80ниң Ñ\85айгааÑ\80ал даңзÑ\8bңаÑ\80 кÑ\83Ñ\80Ñ\83г.',
'watchnologin' => 'Кирбес',
'watch' => 'Хайгаараары',
'watchthispage' => 'Бо арынны хайгаараары',
'unwatch' => 'Хайгааравас',
'unwatchthispage' => 'Бо арынны хайгаарабас',
-'watchlist-details' => 'Not counting talk pages, хайгаарал даңзыңарда {{PLURAL:$1|$1 арын}} бар.',
+'watchlist-details' => 'Чугаалажылга арыннарын санаваска, хайгаарал даңзыңарда {{PLURAL:$1|$1 арын}} бар.',
'wlshowlast' => 'Сөөлү $1 шак болгаш $2 хүн иштинде $3 көргүзери',
'watchlist-options' => 'Хайгаарал даңзының эдиглери',
'whatlinkshere' => 'Шөлүлгелерни бээр',
'whatlinkshere-title' => '«$1» деп арынга шөлүтген арыннар',
'whatlinkshere-page' => 'Арын:',
-'nolinkshere' => "'''[[:$1]]''' деп арынга шөлүтген арыннар чок.",
+'nolinkshere' => "'''[[:$1]]''' деп арынче шөлүтткен арыннар чок.",
'isredirect' => 'шиглидер арын',
'istemplate' => 'киирткен арыннар',
'isimage' => 'файлдың холбаазы',
# Thumbnails
'thumbnail-more' => 'Улгаттыр',
-'thumbnail_error' => 'Error creating бичии чурумал: $1',
+'thumbnail_error' => 'Биче чурумал (миниатюра) чаяарының алдаа: $1',
# Special:Import
'import-comment' => 'Тайылбыр:',
'tooltip-ca-nstab-template' => 'Майыкты көөрү',
'tooltip-ca-nstab-help' => 'Дуза арынын көөрү',
'tooltip-ca-nstab-category' => 'Бөлүктүң арынын көөрү',
+'tooltip-minoredit' => 'Бо өскертилгени "биче" деп демдеглээр',
'tooltip-save' => 'Силерниң өскерлиишкиннериңерни шыгжаары',
'tooltip-preview' => 'Шыгжаар мурнунда силерниң өскерлиишкиннерин чижеглеп көрем!',
'tooltip-watch' => 'Силерниң хайгаарал даңзызынга бо арынны немерелээри',
'exif-iimcategory-wea' => 'Агаар',
# External editor support
-'edit-externally' => 'Бо файлды даштыки application-биле эдер',
+'edit-externally' => 'Бо файлды даштыкы капсырылга-биле эдер',
# 'all' in various places, this might be different for inflected languages
'watchlistall2' => 'шупту',
'blankpage' => 'Куруг арын',
# Special:Tags
-'tag-filter' => '[[Special:Tags|Tag]] шүүр:',
+'tag-filter' => '[[Special:Tags|демдек]] шүүрү:',
'tag-filter-submit' => 'Шүүрү',
'tags-title' => 'Демдеглелдер',
'tags-edit' => 'өскертири',
'badtitletext' => 'Запитана назва сторінки неправильна, порожня, або неправильно зазначена міжмовна чи міжвікі назва.
Можливо, в назві використовуються недопустимі символи.',
'perfcached' => 'Наступні дані взяті з кешу і можуть бути застарілими. В кеші зберігається не більше {{PLURAL:$1| запису| записів}}.',
-'perfcachedts' => 'Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\96 данÑ\96 взÑ\8fÑ\82Ñ\96 з кеÑ\88Ñ\83, воÑ\81Ñ\82аннÑ\94 вÑ\96н оновлÑ\8eвавÑ\81Ñ\8f о $1. Ð\92 кеÑ\88Ñ\96 збеÑ\80Ñ\96гаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f не бÑ\96лÑ\8cÑ\88е {{PLURAL:$4|запису|записів}}.',
+'perfcachedts' => 'Ð\9dаÑ\81Ñ\82Ñ\83пнÑ\96 данÑ\96 взÑ\8fÑ\82Ñ\96 з кеÑ\88Ñ\83, воÑ\81Ñ\82аннÑ\94 вÑ\96н оновлÑ\8eвавÑ\81Ñ\8f о $1. У кеÑ\88Ñ\96 збеÑ\80Ñ\96гаÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f не бÑ\96лÑ\8cÑ\88е $4 {{PLURAL:$4|запису|записів}}.',
'querypage-no-updates' => 'Зміни цієї сторінки зараз заборонені. Дані тут не можуть бути оновлені зараз.',
'wrong_wfQuery_params' => 'Неприпустима параметри функцій wfQuery()<br />
Функція: $1<br />
'noarticletext-nopermission' => 'Зараз на цій сторінці немає тексту.
Ви можете [[Special:Search/{{PAGENAME}}|пошукати цю назву]] на інших сторінках,
або <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пошукати пов\'язані записи в журналах]</span>, але ви не маєте дозволу на створення такої сторінки.',
+'missing-revision' => 'Версія #$1 сторінки «{{PAGENAME}}» не існує.
+
+Імовірно, Ви перейшли за застарілим посиланням на вилучену сторінку.
+Подробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].',
'userpage-userdoesnotexist' => 'Користувач під назвою "<nowiki>$1</nowiki>" не зареєстрований. Переконайтеся, що ви хочете створити/редагувати цю сторінку.',
'userpage-userdoesnotexist-view' => 'Обліковий запис користувача „$1“ не зареєстровано.',
'blocked-notice-logextract' => 'Цей користувач наразі заблокований.
'expansion-depth-exceeded-warning' => 'На сторінці перевищено межу глибини вкладеності',
'parser-unstrip-loop-warning' => 'Виявлено незакритий тег (такий, як <pre>)',
'parser-unstrip-recursion-limit' => 'Перевищено межу вкладеної рекурсії ($1) для парсера.',
+'converter-manual-rule-error' => 'Помилка в ручному правилі перетворення мови',
# "Undo" feature
'undo-success' => 'Редагування може бути скасовано.
'editundo' => 'скасувати',
'diff-multi' => '({{PLURAL:$1|Одна проміжна версія одного користувача не показана|$1 проміжні версії {{PLURAL:$2|одного користувача|$2 користувачів}} не показані|$1 проміжних версій {{PLURAL:$2|одного користувача|$2 користувачів}} не показані}})',
'diff-multi-manyusers' => '({{PLURAL:$1|не показана $1 проміжна я версія|не показані $1 проміжні версії|не показано $1 проміжних версій}}, зроблених більш, ніж {{PLURAL:$2|$1 користувачем|$2 користувачами}})',
+'difference-missing-revision' => '{{PLURAL:$2|$2 версія|$2 версії|$2 версій}} для цього порівняння ($1) не {{PLURAL:$2|знайдене|знайдені}}.
+
+Імовірно, ви перейшли за застарілим посиланням на порівняння версій вилученої сторінки.
+Подробиці можна дізнатися з [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журналу вилучень].',
# Search results
'searchresults' => 'Результати пошуку',
'timezoneregion-indian' => 'Індійський океан',
'timezoneregion-pacific' => 'Тихий океан',
'allowemail' => 'Дозволити електронну пошту від інших користувачів',
-'prefs-searchoptions' => 'Ð\9fаÑ\80амеÑ\82Ñ\80и поÑ\88Ñ\83кÑ\83',
+'prefs-searchoptions' => 'Ð\9fоÑ\88Ñ\83к',
'prefs-namespaces' => 'Простори назв',
'defaultns' => 'Інакше шукати в таких просторах назв:',
'default' => 'за умовчанням',
'shared-repo' => 'спільного сховища',
'shared-repo-name-wikimediacommons' => 'Вікісховища',
'filepage.css' => '/* Розміщений тут CSS-код розміщений на сторінці опису файла, також і для іноземних користувачів вікі */',
-'upload-disallowed-here' => 'Ð\9dа жалÑ\8c, Ð\92и не можеÑ\82е пеÑ\80езапиÑ\81аÑ\82и Ñ\86е зобÑ\80аженнÑ\8f',
+'upload-disallowed-here' => 'Ð\92и не можеÑ\82е пеÑ\80езапиÑ\81аÑ\82и Ñ\86ей Ñ\84айл',
# File reversion
'filerevert' => 'Повернення до старої версії $1',
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|байт|байти|байтів}}',
'ncategories' => '$1 {{PLURAL:$1|категорія|категорії|категорій}}',
+'ninterwikis' => '$1 {{PLURAL:$1|інтервікі-посилання|інтервікі-посилання|інтервікі-посилань}}',
'nlinks' => '$1 {{PLURAL:$1|посилання|посилання|посилань}}',
'nmembers' => "$1 {{PLURAL:$1|об'єкт|об'єкти|об'єктів}}",
'nrevisions' => '$1 {{PLURAL:$1|версія|версії|версій}}',
'import-interwiki-templates' => 'Включити всі шаблони',
'import-interwiki-submit' => 'Імпортувати',
'import-interwiki-namespace' => 'Цільовий простір назв:',
+'import-interwiki-rootpage' => "Коренева сторінка (необов'язково):",
'import-upload-filename' => 'Назва файлу:',
'import-comment' => 'Примітка:',
'importtext' => 'Будь ласка, експортуйте сторінку з іншої вікі, використовуючи [[Special:Export|засіб експорту]], збережіть файл, а потім завантажте його сюди.',
'import-error-interwiki' => 'Сторінку "$1" не імпортовано, оскільки її назва зарезервована для зовнішніх посилань (interwiki).',
'import-error-special' => 'Сторінку "$1" не імпортовано, оскільки вона належить до особливого простору імен, що не дозволяє створення сторінок.',
'import-error-invalid' => 'Сторінку "$1" не імпортовано, оскільки його ім\'я неприпустиме.',
+'import-options-wrong' => '{{PLURAL:$2|Неправильна опція|Неправильні опції}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Вказана некоректна назва кореневої сторінки',
+'import-rootpage-nosubpage' => 'В просторі назв вказаної кореневої сторінки «$1» заборонені підсторінки',
# Import log
'importlogpage' => 'Журнал імпорту',
# Info page
'pageinfo-title' => 'Інформація про " $1 "',
+'pageinfo-not-current' => 'Дані можуть бути показані лише для поточної версії',
+'pageinfo-header-basic' => 'Основна інформація',
'pageinfo-header-edits' => 'Історія редагувань',
+'pageinfo-header-restrictions' => 'Захист сторінки',
+'pageinfo-header-properties' => 'Властивості сторінки',
+'pageinfo-display-title' => 'Заголовок для відображення',
+'pageinfo-default-sort' => 'Ключ сортування за замовчуванням',
+'pageinfo-length' => 'Довжина сторінки (в байтах)',
+'pageinfo-article-id' => 'ID сторінки',
+'pageinfo-robot-policy' => 'Індексація пошуковими системами',
+'pageinfo-robot-index' => 'Індексується',
+'pageinfo-robot-noindex' => 'Не індексується',
'pageinfo-views' => 'Кількість переглядів',
'pageinfo-watchers' => 'Кількість спостерігачів',
+'pageinfo-redirects-name' => 'Перенаправлення на цю сторінку',
+'pageinfo-subpages-name' => 'Підсторінки цієї сторінки',
+'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|перенаправлення|перенаправлення|перенаправлень}}; $3 {{PLURAL:$3|не-перенаправлення|не-перенаправлення|не-перенаправлень}})',
+'pageinfo-firstuser' => 'Створив сторінку',
'pageinfo-firsttime' => 'Дата створення сторінки',
'pageinfo-lastuser' => 'Останній редактор',
'pageinfo-lasttime' => 'Дата останньої правки',
'pageinfo-edits' => 'Загальна кількість редагувань',
'pageinfo-authors' => 'Загальна кількість унікальних авторів',
+'pageinfo-recent-edits' => 'Кількість поточних редагувань в історії (протягом $1)',
+'pageinfo-recent-authors' => 'Кількість авторів за останній час',
+'pageinfo-magic-words' => '{{PLURAL:$1|Магічне слово|Магічні слова}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Прихована категорія|Приховані категорії}} ($1)',
+'pageinfo-templates' => 'Включено {{PLURAL:$1|шаблон|шаблонів}} ($1)',
+'pageinfo-toolboxlink' => 'Інформація про сторінку',
# Skin names
'skinname-standard' => 'Стандартне',
'file-info-size-pages' => '$1 × $2 пікселів, розмір файлу: $3, MIME-тип: $4, $5 {{PLURAL:$5|сторінка|сторінки|сторінок}}',
'file-nohires' => 'Нема версії з більшою роздільністю.',
'svg-long-desc' => 'SVG-файл, номінально $1 × $2 пікселів, розмір файлу: $3',
+'svg-long-desc-animated' => 'Анімований SVG-файл, номінально $1 × $2 {{PLURAL:$2|піксель|пікселі|пікселів}}, розмір файлу: $3',
'show-big-image' => 'Повна роздільність',
'show-big-image-preview' => 'Розмір при попередньому перегляді: $1.',
'show-big-image-other' => '{{PLURAL:$2|Інша роздільність|Інші роздільності}}: $1.',
'file-info-png-looped' => 'закільцьований',
'file-info-png-repeat' => 'продемонстрований $1 {{PLURAL:$1|раз|рази|разів}}',
'file-info-png-frames' => '$1 {{PLURAL:$1|кадр|кадри|кадрів}}',
+'file-no-thumb-animation' => "'''Примітка. Через технічні обмеження, мініатюри цього файлу не будуть анімованими.'''",
+'file-no-thumb-animation-gif' => "'''Примітка. Через технічні обмеження, мініатюри GIF-зображень високої роздільності, як це, не анімуються.'''",
# Special:NewFiles
'newimages' => 'Галерея нових файлів',
'qbbrowse' => 'تصفّح',
'qbedit' => 'ترمیم',
'qbpageoptions' => 'صفحۂ ہٰذا',
-'qbpageinfo' => 'مفہوم',
'qbmyoptions' => 'میرے صفحات',
'qbspecialpages' => 'خاص صفحات',
'faq' => 'معلوماتِ عامہ',
'unprotectthispage' => 'اِسے صفحے کی تحفظ تبدیل کریں',
'newpage' => 'نیا صفحہ',
'talkpage' => 'اس صفحہ پر تبادلۂ خیال کریں',
-'talkpagelinktext' => 'گفتگو',
+'talkpagelinktext' => 'تبادلۂ خیال',
'specialpage' => 'خصوصی صفحہ',
'personaltools' => 'ذاتی اوزار',
'postcomment' => 'اگلا حصّہ',
'site-rss-feed' => '$1 آر.ایس.ایس فیڈ',
'site-atom-feed' => '$1 اٹوم فیڈ',
'page-rss-feed' => '"$1" آر.ایس.ایس فیڈ',
-'page-atom-feed' => '"$1" اٹوم فیڈ',
+'page-atom-feed' => '"$1" اٹوم خورد',
'feed-atom' => 'اٹوم',
'feed-rss' => 'آر ایس ایس',
'red-link-title' => '$1 (صفحہ موجود نہیں)',
'minoreditletter' => 'م',
'newpageletter' => 'نیا ..',
'boteditletter' => ' خودکار',
-'rc-enhanced-expand' => 'تÙ\81صÛ\8cÙ\84ات دÙ\90کھاؤ (JavaScript Ú\86اÛ\81ئÛ\92)',
+'rc-enhanced-expand' => 'تÙ\81صÛ\8cÙ\84ات دÙ\90کھائÛ\8cÚº (JavaScript درکار)',
'rc-enhanced-hide' => 'تفصیلات چھپائیے',
# Recent changes linked
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|لکمہ|لکمہ جات}}',
'ncategories' => '{{PLURAL:$1|زمرہ|زمرہ جات}} $1',
+'nmembers' => '{{PLURAL:$1|رکن|اراکین}}',
'lonelypages' => 'يتيم صفحات',
'lonelypagestext' => 'مندرجہ ذیل صفحات وہ صفحات ہیں جنھیں اس وکی میں موجود صفحوں سے کوئی ربط حاصل نہیں ہوپارہا۔',
'uncategorizedpages' => 'بے زمرہ صفحات',
'linkshere' => "'''[[:$1]]''' سے درج ذیل صفحات مربوط ہیں:",
'nolinkshere' => "'''[[:$1]]''' سے کوئی روابط نہیں۔",
'isredirect' => 'لوٹایا گیا صفحہ',
+'istemplate' => 'شامل شدہ',
'isimage' => 'ربطِ ملف',
'whatlinkshere-links' => 'روابط',
'whatlinkshere-hideredirs' => 'رجوع مکررات $1',
+'whatlinkshere-hidetrans' => 'تضمینات',
'whatlinkshere-hidelinks' => 'روابط $1',
'whatlinkshere-hideimages' => 'روابطِ تصویر $1',
'whatlinkshere-filters' => 'فلٹرذ',
'tooltip-pt-mytalk' => 'آپ کا صفحۂ گفتگو',
'tooltip-pt-preferences' => 'آپ کی ترجیحات',
'tooltip-pt-watchlist' => 'اُن صفحات کی فہرست جن کی تبدیلیاں آپ کی زیرِنظر ہیں',
-'tooltip-pt-mycontris' => 'آپ Ú©Û\92 Ù\85ساÛ\81Ù\85ات کی فہرست',
+'tooltip-pt-mycontris' => 'آپ Ú©Û\8c شراکت کی فہرست',
'tooltip-pt-login' => 'آپ کیلئے داخلِ نوشتہ ہونا اچھا ہے؛ تاہم، یہ ضروری نہیں',
'tooltip-pt-logout' => 'خارجِ نوشتہ ہوجائیں',
'tooltip-ca-talk' => 'مضمون بارے تبادلۂ خیال',
'nextdiff' => 'صفحہ کا نام:',
# Media information
+'file-info-size' => '
+$1 × $2 عکصر (پکسلز)، حجم ملف: $3، MIME قسم: $4',
'file-nohires' => 'اس سے بڑی تصمیم دستیاب نہیں۔',
'show-big-image' => 'مکمل تصمیم',
'note' => "'''Izoh:'''",
'previewnote' => "'''Bu shunchaki ko‘rib chiqish. O‘zgartirishlar hali saqlangani yo‘q!'''",
'editing' => '$1 tahrirlanmoqda',
+'creating' => '«$1» sahifasini yaratish',
'editingsection' => '$1 (boʻlim) tahrirlanmoqda',
'copyrightwarning' => "Iltimos, {{SITENAME}}ga yuklangan har qanday axborot $2 ostida tarqatilishiga diqqat qiling (batafsil ma'lumot uchun $1ni ko'ring).
Agar yozganlaringiz keyinchalik tahrir qilinishi va qayta tarqatilishiga rozi bo'lmasangiz, u holda bu yerga yozmang.<br />
Tên người dùng có phân biệt chữ hoa chữ thường.
Hãy kiểm tra lại chính tả, hoặc [[Special:UserLogin/signup|mở tài khoản mới]].',
'nosuchusershort' => 'Không có thành viên nào có tên “$1”. Xin hãy kiểm tra lại chính tả.',
-'nouserspecified' => 'Bạn phải đưa ra tên đăng ký.',
+'nouserspecified' => 'Bạn phải chỉ định một tên người dùng.',
'login-userblocked' => 'Thành viên này đã bị cấm. Không cho phép đăng nhập.',
'wrongpassword' => 'Mật khẩu sai. Xin vui lòng nhập lại.',
'wrongpasswordempty' => 'Bạn chưa gõ vào mật khẩu. Xin thử lần nữa.',
'passwordremindertext' => 'Ai đó (có thể là bạn, có địa chỉ IP $1) đã yêu cầu chúng tôi gửi mật khẩu mới của {{SITENAME}} ($4). Chúng tôi đã tạo một mật khẩu tạm “$3” cho thành viên “$2”. Nếu bạn chính là người đã yêu cầu mật khẩu, bạn cần phải đăng nhập và thay đổi mật khẩu ngay bây giờ. Mật khẩu tạm sẽ hết hạn trong vòng {{PLURAL:$5|một ngày|$5 ngày}}.
Nếu bạn không yêu cầu gửi mật khẩu mới, hoặc bạn đã nhớ ra mật khẩu cũ của mình và không còn muốn đổi nó nữa, bạn có thể bỏ qua bức thư này và tiếp tục sử dụng mật khẩu cũ của bạn.',
-'noemail' => 'Thành viên “$1” không đăng ký thư điện tử.',
+'noemail' => 'Thành viên “$1” không ghi thư điện tử.',
'noemailcreate' => 'Bạn cần cung cấp một địa chỉ thư điện tử hợp lệ',
'passwordsent' => 'Mật khẩu mới đã được gửi tới thư điện tử của thành viên “$1”. Xin đăng nhập lại sau khi nhận thư.',
'blocked-mailpassword' => 'Địa chỉ IP của bạn bị cấm không được sửa đổi, do đó cũng không được phép dùng chức năng phục hồi mật khẩu để tránh lạm dụng.',
* Mục tiêu cấm: $7
Bạn có thể liên hệ với $1 hoặc một [[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.
-Bạn không thể sử dụng tính năng “gửi thư cho người này” trừ khi bạn đã đăng ký một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn tài khoản]] và bạn không bị khóa chức năng đó.
+Bạn không thể sử dụng tính năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn tài khoản]] và bạn không bị khóa chức năng đó.
Địa chỉ IP hiện tại của bạn là $3, và mã số cấm là #$5.
Xin hãy ghi kèm tất cả các thông tin trên vào thư yêu cầu của bạn.",
'autoblockedtext' => "Địa chỉ IP của bạn đã bị tự động cấm vì một người nào đó đã sử dụng nó, $1 là thành viên đã thực hiện cấm.
Bạn có thể liên hệ với $1 hoặc một trong số các
[[{{MediaWiki:Grouppage-sysop}}|bảo quản viên]] khác để thảo luận về việc cấm.
-Chú ý rằng bạn sẽ không dùng được chức năng “gửi thư cho người này” trừ khi bạn đã đăng ký một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn]] và bạn không bị cấm dùng chức năng đó.
+Chú ý rằng bạn sẽ không dùng được chức năng “gửi thư cho người này” trừ khi bạn đã ghi một địa chỉ thư điện tử hợp lệ trong [[Special:Preferences|tùy chọn]] và bạn không bị cấm dùng chức năng đó.
Địa chỉ IP hiện tại của bạn là $3, mã số cấm là $5.
Xin hãy ghi kèm tất cả các chi tiết trên vào thư yêu cầu của bạn.",
Lỗi này thường xuất hiện đối khi theo dõi liên kết lỗi thời đến phiên bản cũ của một trang đã bị xóa.
Xem chi tiết trong [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} nhật trình xóa].',
-'userpage-userdoesnotexist' => 'Tài khoản mang tên “<nowiki>$1</nowiki>” chưa được đăng ký. Xin hãy kiểm tra lại nếu bạn muốn tạo/sửa trang này.',
-'userpage-userdoesnotexist-view' => 'Tài khoản “$1” chưa được đăng ký.',
+'userpage-userdoesnotexist' => 'Đây chưa có tài khoản với tên “<nowiki>$1</nowiki>”. Xin hãy kiểm tra lại nếu bạn muốn tạo hay sửa trang này.',
+'userpage-userdoesnotexist-view' => 'Chưa có tài khoản với tên “$1”.',
'blocked-notice-logextract' => 'Người dùng này hiện đang bị cấm sửa đổi. Nhật trình cấm gần nhất được ghi ở dưới để tiện theo dõi:',
'clearyourcache' => "'''Chú ý:''' Sau khi lưu trang, có thể bạn sẽ phải xóa bộ nhớ đệm của trình duyệt để xem các thay đổi.
-* '''Firefox / Safari:''' Giữ phím ''Shift'' trong khi nhấn ''Reload'' (''Tải lại''), hoặc nhấn tổ hợp ''Ctrl-F5'' hay ''Ctrl-R'' (⌘R trên Mac)
+* '''Firefox / Safari:''' Giữ phím ''Shift'' trong khi nhấn ''Tải lại'' (''Reload''), hoặc nhấn tổ hợp ''Ctrl-F5'' hay ''Ctrl-R'' (⌘R trên Mac)
* '''Google Chrome:''' Nhấn tổ hợp ''Ctrl-Shift-R'' (⇧⌘R trên Mac)
-* '''Internet Explorer:''' Giữ phím ''Ctrl'' trong khi nhấn ''Refresh'', hoặc nhấn tổ hợp ''Ctrl-F5''
-* '''Opera:''' Xóa bộ nhớ đệm trong ''Tools → Preferences''",
+* '''Internet Explorer:''' Giữ phím ''Ctrl'' trong khi nhấn ''Làm tươi'' (''Refresh''), hoặc nhấn tổ hợp ''Ctrl-F5''
+* '''Opera:''' Xóa bộ nhớ đệm trong ''Công cụ → Sở thích'' (''Tools → Preferences'')",
'usercssyoucanpreview' => "'''Mẹo:''' Sử dụng nút “{{int:showpreview}}” để kiểm thử bản CSS của bạn trước khi lưu trang.",
'userjsyoucanpreview' => "'''Mẹo:''' Sử dụng nút “{{int:showpreview}}” để kiểm thử bản JS của bạn trước khi lưu trang.",
'usercsspreview' => "'''Hãy nhớ rằng bạn chỉ đang xem thử trang CSS cá nhân của bạn.
Bảo quản viên khi khóa dữ liệu đã đưa ra lý do: $1",
'protectedpagewarning' => "'''Cảnh báo: Trang này đã bị khóa và chỉ có các thành viên có quyền quản lý mới có thể sửa được.'''
Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
-'semiprotectedpagewarning' => "'''Lưu ý:''' Trang này đã bị khóa và chỉ có các thành viên đã đăng ký mới có thể sửa đổi được.
+'semiprotectedpagewarning' => "'''Lưu ý:''' Trang này đã bị khóa nên chỉ có các thành viên có tài khoản mới có thể sửa đổi được.
Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
'cascadeprotectedwarning' => "'''Cảnh báo:''' Trang này đã bị khóa, chỉ có thành viên có quyền quản lý mới có thể sửa đổi được, vì nó được nhúng vào {{PLURAL:$1|trang|những trang}} bị khóa theo tầng sau:",
'titleprotectedwarning' => "'''Cảnh báo: Trang này đã bị khóa và bạn phải có một số [[Special:ListGroupRights|quyền nhất định]] mới có thể tạo trang.'''
'username' => 'Tên người dùng:',
'uid' => 'Số thứ tự thành viên:',
'prefs-memberingroups' => 'Thành viên của {{PLURAL:$1|nhóm|nhóm}}:',
-'prefs-registration' => 'Thời điểm đăng ký:',
+'prefs-registration' => 'Lúc mở tài khoản:',
'yourrealname' => 'Tên thật:',
'yourlanguage' => 'Ngôn ngữ:',
'yourvariant' => 'Dạng chữ của nội dung:',
'statistics-views-total' => 'Số lần xem tổng cộng',
'statistics-views-total-desc' => 'Không bao gồm số lần xem các trang không tồn tại và các trang đặc biệt',
'statistics-views-peredit' => 'Số lần xem trên một sửa đổi',
-'statistics-users' => 'Số [[Special:ListUsers|thành viên]] đã đăng ký',
+'statistics-users' => 'Số [[Special:ListUsers|thành viên]] có tài khoản',
'statistics-users-active' => 'Số thành viên tích cực',
'statistics-users-active-desc' => 'Những thành viên đã hoạt động trong {{PLURAL:$1|ngày|$1 ngày}} qua',
'statistics-mostpopular' => 'Các trang được xem nhiều nhất',
'protect-cascadeon' => 'Trang này hiện bị khóa vì nó được nhúng vào {{PLURAL:$1|những trang|trang}} dưới đây bị khóa với tùy chọn “khóa theo tầng” được kích hoạt. Bạn có thể đổi mức độ khóa của trang này, nhưng nó sẽ không ảnh hưởng đến việc khóa theo tầng.',
'protect-default' => 'Cho phép mọi thành viên',
'protect-fallback' => 'Cần quyền “$1”',
-'protect-level-autoconfirmed' => 'Cấm thành viên mới và thành viên chưa đăng ký',
+'protect-level-autoconfirmed' => 'Cấm thành viên mới và người dùng chưa mở tài khoản',
'protect-level-sysop' => 'Cấm mọi thành viên (trừ bảo quản viên)',
'protect-summary-cascade' => 'khóa theo tầng',
'protect-expiring' => 'hết hạn $1 (UTC)',
'movearticle' => 'Di chuyển trang:',
'moveuserpage-warning' => "'''Cảnh báo:''' Bạn sắp di chuyển trang cá nhân của người dùng. Xin lưu ý rằng chỉ có trang này sẽ được di chuyển, còn người dùng sẽ ''không'' đổi tên.",
'movenologin' => 'Chưa đăng nhập',
-'movenologintext' => 'Bạn phải là thành viên đã đăng ký và [[Special:UserLogin|đăng nhập]] mới di chuyển trang được.',
+'movenologintext' => 'Bạn phải là thành viên đã mở tài khoản và [[Special:UserLogin|đăng nhập]] mới di chuyển trang được.',
'movenotallowed' => 'Bạn không có quyền di chuyển trang.',
'movenotallowedfile' => 'Bạn không có đủ quyền để di chuyển tập tin.',
'cant-move-user-page' => 'Bạn không có quyền di chuyển trang cá nhân (ngoại trừ trang con).',
'imageinvalidfilename' => 'Tên tập tin đích không hợp lệ',
'fix-double-redirects' => 'Cập nhật tất cả các trang đổi hướng chỉ đến tựa đề cũ',
'move-leave-redirect' => 'Để lại trang đổi hướng',
-'protectedpagemovewarning' => "'''Cảnh báo:''' Trang này đã bị khóa và chỉ có các thành viên có quyền quản lý mới có thể di chuyển được.
+'protectedpagemovewarning' => "'''Cảnh báo:''' Trang này đã bị khóa nên chỉ có các thành viên có quyền quản lý mới có thể di chuyển được.
Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
-'semiprotectedpagemovewarning' => "'''Lưu ý:''' Trang này đã bị khóa và chỉ có các thành viên đã đăng ký mới có thể di chuyển được.
+'semiprotectedpagemovewarning' => "'''Lưu ý:''' Trang này đã bị khóa nên chỉ có các thành viên có tài khoản mới có thể di chuyển được.
Thông tin mới nhất trong nhật trình được ghi dưới đây để tiện theo dõi:",
'move-over-sharedrepo' => '== Tập tin đã tồn tại ==
[[:$1]] đã tồn tại trong kho dùng chung. Nếu đổi tên tập tin thành tên này thì sẽ ghi đè lên tập tin dùng chung.',
'confirmemail_error' => 'Có trục trặc khi lưu xác nhận của bạn.',
'confirmemail_subject' => 'Xác nhận thư điện tử tại {{SITENAME}}',
'confirmemail_body' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1,
-đã đăng ký tài khoản có tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}.
+đã mở tài khoản có tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}.
Để xác nhận rằng tài khoản này thực sự là của bạn và để kích hoạt tính năng thư điện tử tại {{SITENAME}}, xin mở liên kết này trong trình duyệt:
$3
-Nếu bạn *không* đăng ký tài khoản, hãy nhấn vào liên kết này
+Nếu bạn *không* mở tài khoản, hãy nhấn vào liên kết này
để hủy thủ tục xác nhận địa chỉ thư điện tử:
$5
Mã xác nhận này sẽ hết hạn vào $4.',
-'confirmemail_body_changed' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, đã đăng ký tài khoản có
+'confirmemail_body_changed' => 'Ai đó, có thể là bạn, từ địa chỉ IP $1, đã mở tài khoản có
tên "$2" với địa chỉ thư điện tử này tại {{SITENAME}}.
Để xác nhận rằng tài khoản này thực sự là của bạn và để kích hoạt tính năng
# Groups
'group-user' => 'Сäüttijäd',
'group-sysop' => 'Praviťeľad',
-'group-all' => '{kõik)',
+'group-all' => '(kõik)',
'group-user-member' => 'cäüttijä',
'vector-action-protect' => 'Panalipda',
'vector-action-undelete' => 'Igbalik an ginpara',
'vector-action-unprotect' => 'Liwani an panalipod',
+'vector-simplesearch-preference' => 'Ginpadulot an yinano nga pamiling nga kahon (Panit vector la)',
'vector-view-create' => 'Himo-a',
'vector-view-edit' => 'Igliwat',
'vector-view-history' => 'Kitaa an kaagi',
Alayon paghulat makadali san-o ka inmutro pagsulod hin nga pakli utro.
$1',
+'pool-timeout' => 'An pagpaundang-hin-oras in naghuhulat hin trangka',
'pool-queuefull' => 'Puno an katitirok nga pila',
'pool-errorunknown' => 'Waray kasabti nga kasaypanan',
'protectedpagetext' => 'Ini nga pakli in pinasaliporan para mapugngan an mga pagliwat.',
'viewsourcetext' => 'Puydi ka kinmita ngan kinmopya han gintikangan han pakli:',
'viewyourtext' => "Puydi nim makit-an ngan makopya an tinikangan han '''imo mga pagliwat''' ha dinhi nga pakli:",
+'protectedinterface' => 'Ini nga pakli in nahatag hin teksto hit interface para han software han hin nga wiki, ngan in pinasasaliporan para makalikay hit pag-abuso.
+Para makadugang o makaliwat hin mga paghubad para han tanan nga mga wiki, alayon paggamit han [//translatewiki.net/ translatewiki.net], an kanan MediaWiki proyekto hin lokalisasyon.',
'sqlhidden' => '(nakatago an SQL query)',
'namespaceprotected' => "Diri ka gintutugutan pagliwat han mga pakli ha ngaran-lat'ang nga '''$1'''.",
'customcssprotected' => 'Diri ka gintutugotan pagliwat hini nga CSS nga pakli, tungod nga nagsusulod ini hin kanan iba nga tawo personal nga karuyagon.',
'exception-nologin-text' => 'Ini nga pakli o pagbuhat in nagkikinahanglan nga ikaw in mag-log-in ha dinhi nga wiki.',
# Virus scanner
+'virus-scanfailed' => 'Pakyas an pag-scan (kodigo $1)',
'virus-unknownscanner' => 'diri-nasasabtan nga antivirus:',
# Login and logout pages
'login-abort-generic' => 'An imo paglog-in in diri malinamposon - Naundang',
'loginlanguagelabel' => 'Pinulongan: $1',
+# E-mail sending
+'php-mail-error-unknown' => 'Waray kasabti ha kanan PHP mail() function.',
+
# Change password dialog
'resetpass' => 'Igliwat an tigaman-pagsulod',
'resetpass_header' => 'Igliwan an akawnt nga tigaman-pagsulod',
'oldpassword' => 'Daan nga tigaman-pagsulod:',
'newpassword' => 'Bag-o nga tigaman-pagsulod:',
'retypenew' => 'Utroha pagbutang an bag-o nga tigaman-pagsulod:',
+'resetpass_success' => 'Malinamposon nga nasalyuan na an imo tigaman-pagsulod!
+Ikaw in naglalog-in yana...',
'resetpass_forbidden' => 'Diri mababalyoan an mga tigaman-pagsulod',
+'resetpass-no-info' => 'Kinahanglan mo paglog-in para direkta ka makasakob dinhi nga pakli.',
'resetpass-submit-loggedin' => 'Igbal-iw an tigaman-pagsulod',
'resetpass-submit-cancel' => 'Pasagdi',
'resetpass-temp-password' => 'Temporaryo nga tigaman-pagsakob:',
# Special:PasswordReset
+'passwordreset' => 'igreset an tigaman-hit-pagsulod',
+'passwordreset-text' => 'Kompletoha ini nga porma para makakarawat hin email hin pahinumdom han detalye han akawnt.',
+'passwordreset-legend' => 'igreset an tigaman-hit-pagsulod',
'passwordreset-username' => 'Agnay hiton gumaramit:',
'passwordreset-domain' => 'Dominyo:',
+'passwordreset-capture' => 'Kikitaon mo an resulta nga e-mail?',
'passwordreset-email' => 'E-mail adres:',
'passwordreset-emailtitle' => 'Mga detalye han akawnt ha {{SITENAME}}',
'passwordreset-emailelement' => 'Agnay han gumaramit: $1
Temporaryo nga tigaman han pagsakob: $2',
'passwordreset-emailsent' => 'Ginpadara hin usa ka pahinumdom nga e-mail.',
+'passwordreset-emailsent-capture' => 'Mayda pahinumdom nga ginpadangat ha im e-mail, kun diin ini in ginpapakita ha ubos.',
+'passwordreset-emailerror-capture' => 'Mayda pahinumdom nga e-mail han nahimo, kun diin ini in ginpapakita ha ubos, pero pakyas an pagpadangat ngada ha gumaramit: $1',
# Special:ChangeEmail
'changeemail' => 'Igliwan an e-mail address',
'showdiff' => 'Igpakita an mga ginliwat',
'anoneditwarning' => "'''Pahimatngon:''' Diri ka pa naka log-in.
An imo IP address in maitatala ha kaagi hinin pakli han pagliwat.",
+'anonpreviewwarning' => "''Diri ka naka-log in. Mahisusurat an imo IP address ngada ha kanan pakli kaagi hit pagliwat kun igtipig nimo.''",
'missingsummary' => "'''Pahinumdom:''' Waray ka nagbutang hin dalikyat nga sumat han pagliwat.
Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bisan waray hini.",
'missingcommenttext' => 'Alayon pagbutang hin komento ha ilarom.',
'blockednoreason' => 'waray katadungan nga ginhatag',
'whitelistedittext' => 'Kinahanglan mo mag-$1 para makaliwat han mga pakli.',
'nosuchsectiontitle' => 'Waray kaagi-i an bahin',
+'nosuchsectiontext' => 'Imo ginliwat an seksyon nga waray dida.
+Ini in puydi binmalhin o napara samtang ikaw in nagkikita han pakli.',
'loginreqtitle' => 'Nagkikinahanglan hin pan-sakob',
'loginreqlink' => 'Magpasabot nga masakob',
'loginreqpagetext' => 'Kinahanglan mo mag-$1 para makakita ha iba nga mga pakli.',
'note' => "'''Pahibaro:'''",
'previewnote' => "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''
¡Waray pa katipig an imo mga ginbag-o!",
+'continue-editing' => 'Padayon pagliwat',
'editing' => 'Ginliliwat an $1',
'creating' => 'Ginhihimo an $1',
'editingsection' => 'Ginliliwat an $1 (bahin)',
'template-protected' => '(pinaliporan)',
'template-semiprotected' => '(katunga nga pinasaliporan)',
'hiddencategories' => 'Ini nga pakli in api han {{PLURAL:$1|1 nakatago nga kaarangay|$1 nakatago nga kaarangay}}:',
+'nocreatetitle' => 'Limitado an pahimo hin pakli',
'nocreate-loggedin' => 'Diri ka gintutugotan paghimo hin mga bag-o nga pakli.',
+'sectioneditnotsupported-title' => 'Diri suportado han pagliwat han seksyon',
+'sectioneditnotsupported-text' => 'Diri suportado an pagliwat han seksyon ha dinhi nga pakli.',
'permissionserrors' => 'Mga sayop hin mga pagtugot',
'permissionserrorstext' => 'Diri ka gintutugotan pagbuhat hito, mahitungod han mga nasunod nga {{PLURAL:$1|katadungan|mga katadungan}}:',
'permissionserrorstext-withaction' => 'Waray ka permiso han $2, tungod han masunod nga {{PLURAL:$1|rason|mga rason}}:',
'edit-already-exists' => 'Diri nakakahimo hin bag-o nga pakli.
Aada na ito.',
'defaultmessagetext' => 'Aada-nga-daan nga teksto han mensahe',
+'content-not-allowed-here' => 'An sulod nga "$1" in diri gintutugotan ha pakli nga [[$2]]',
# Content models
'content-model-wikitext' => 'wikiteksto',
# History pages
'viewpagelogs' => 'Kitaa an mga log para hini nga pakli',
+'nohistory' => 'Waray kaagi hin pagliwat hin nga pakli.',
'currentrev' => 'Giurhii nga pagliwat',
'currentrev-asof' => 'Giuurhii nga pagliwat han $1',
'revisionasof' => 'Pagbabag-o han $1',
'history-show-deleted' => 'Ginpara la',
'histfirst' => 'Giunhani',
'histlast' => 'Giurhii',
+'historysize' => '({{PLURAL:$1|1 nga byte|$1 ka mga byte}})',
'historyempty' => '(waray sulod)',
# Revision feed
'rev-suppressed-no-diff' => "Diri mo makikita ini nga kaibhan tungod nga usa ha mga rebisyon in '''ginpara'''.",
'rev-delundel' => 'igpakita/igtago',
'rev-showdeleted' => 'igpakita',
+'revisiondelete' => 'Pagpara/pagtanggal han pagpara nga mga rebisyon',
+'revdelete-nologtype-title' => 'Waray ginhatag nga klase hit talaan',
'revdelete-show-file-confirm' => 'Sigurado ka nga gusto mo makita an ginpara nga pagliwat han file "<nowiki>$1</nowiki>" tikang $2 ha $3?',
'revdelete-show-file-submit' => 'Oo',
+'revdelete-hide-text' => 'Tagoon an rebisyon han teksto',
+'revdelete-hide-image' => 'Tagoon an sulod han paypay',
+'revdelete-hide-name' => 'Tagoon an buhat ngan kakadtoan',
+'revdelete-hide-comment' => 'Tagoon an dalikyat nga sumat han pagliwat',
'revdelete-radio-same' => '(ayaw balyu-e)',
'revdelete-radio-set' => 'Oo',
'revdelete-radio-unset' => 'Ayaw',
'mergehistory' => 'Igtampo an mga kasaysayan han pakli',
'mergehistory-from' => 'Ginkuhaan nga pakli:',
'mergehistory-into' => 'Kakadtoan nga pakli:',
+'mergehistory-submit' => 'Igtampo an mga rebisyon',
+'mergehistory-empty' => 'Waray mga rebisyon in puydi matampo.',
'mergehistory-no-source' => 'Waray pa an tinikangan nga pakli nga $1.',
'mergehistory-no-destination' => 'Waray pa an kakadtuan nga pakli nga $1.',
+'mergehistory-comment' => 'Gintampo an [[:$1]] ngada ha [[:$2]]: $3',
'mergehistory-same-destination' => 'An gintikangan ngan kakadtoan nga mga pakli in diri puydi magkaparo',
'mergehistory-reason' => 'Katadungan:',
# Merge log
+'mergelog' => 'Talaan hin pagtampo',
'revertmerge' => 'Igbulag an gintampo',
# Diffs
'history-title' => "Kaagi han pagbag-o han ''$1''",
+'difference-multipage' => '(Kaibhan ha butnga han mga pakli)',
'lineno' => 'Bagis $1:',
'compareselectedversions' => 'Igkumpara an mga pinili nga pagbabag-o',
'editundo' => 'Igpawara an ginbuhat',
# Search results
'searchresults' => 'Mga nabilingan han pagbiling',
'searchresults-title' => 'Mga nabilngan han pagbiling para han "$1"',
+'searchsubtitleinvalid' => "Imo ginpamiling an '''$1'''",
+'toomanymatches' => 'Sobra kadamo nga mga igo an ginbalik, alayon pagbuhat hin iba nga pakiana',
'prevn' => 'naha-una nga {{PLURAL:$1|$1}}',
'nextn' => 'sunod nga {{PLURAL:$1|$1}}',
'prevn-title' => 'Nahiuna $1 {{PLURAL:$1|resulta|mga resulta}}',
'search-suggest' => 'Buot sidngon mo ba: $1',
'search-interwiki-caption' => 'Mga bugto nga proyekto',
'search-interwiki-default' => '$1 nga resulta:',
+'search-interwiki-more' => '(damo pa)',
'search-relatedarticle' => 'kasumapy',
'searchrelated' => 'kadugtong',
'searchall' => 'ngatanan',
'search-nonefound' => 'Waray resulta an nakakabaton han pakiana.',
'powersearch' => 'Abansado nga pagbiling',
'powersearch-legend' => 'Abansado nga pagbiling',
+'powersearch-ns' => "Pamiling ha mga ngaran-lat'ang:",
+'powersearch-redir' => 'Talaan hin mga redirect',
'powersearch-field' => 'Bilnga an',
'powersearch-togglelabel' => 'Panginano-a:',
'powersearch-toggleall' => 'Ngatanan',
'preferences' => 'Mga karuyag',
'mypreferences' => 'Akon mga karuyag',
'prefs-edits' => 'Ihap han mga pagliwat:',
+'prefsnologin' => 'Diri nakalog-in',
'changepassword' => 'Igliwan an tigaman-pagsulod',
'prefs-skin' => 'Panit',
'skin-preview' => 'Pahiuna nga pagawas',
'datedefault' => 'Waray pinaurog nga karuyag',
'prefs-datetime' => 'Pitsa ngan oras',
+'prefs-user-pages' => 'Mga pakli hin gumaramit',
'prefs-personal' => 'Pangilal-an han nagamit',
'prefs-rc' => 'Kalalabay la nga mga pagbabag-o',
'prefs-watchlist-days' => 'Mga adlaw nga makikita ha barantayan:',
+'prefs-watchlist-days-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
+'prefs-watchlist-edits-max' => 'Pinakadako nga ihap: 1000',
'prefs-resetpass' => 'Igliwan an tigaman-pagsulod',
+'prefs-changeemail' => 'Igliwan an e-mail address',
+'prefs-email' => 'Mga pagpipilian han e-mail',
'prefs-rendering' => 'Hitsura',
'saveprefs' => 'Igtipig',
'resetprefs' => 'Pabay-i an diri nakatipig nga mga pagbabag-o',
'columns' => 'Mga rumbay patindog:',
'searchresultshead' => 'Bilnga',
'resultsperpage' => 'Mga igo kada pakli:',
+'stub-threshold-disabled' => 'Waray ginpagana',
+'recentchangesdays-max' => 'Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
'savedprefs' => 'Gintipig an im karuyag.',
'timezonelegend' => 'Zona hin oras',
'localtime' => 'Oras nga lokal',
+'timezoneuseserverdefault' => 'Gamita an aada-nga-daan han wiki ($1)',
'servertime' => 'Oras han serbidor:',
'guesstimezone' => 'Butanga tikang han panngaykay(browser)',
'timezoneregion-africa' => 'Aprika',
'timezoneregion-pacific' => 'Kalawdan Pasipiko',
'prefs-searchoptions' => 'Pamilnga',
'prefs-namespaces' => "Ngaran-lat'ang",
+'default' => 'aada-nga-daan',
'prefs-files' => 'Mga paypay',
'youremail' => 'E-mail:',
'username' => 'Agnay hiton gumaramit:',
'prefs-info' => 'Panguna nga pananabotan',
'prefs-i18n' => 'Internasyonalisasyon',
'prefs-signature' => 'Pirma',
+'prefs-dateformat' => 'Batakan han petsa',
'prefs-advancedediting' => 'Abansado nga mga pagpipilian',
'prefs-advancedrc' => 'Abansado nga mga pagpipilian',
'prefs-advancedrendering' => 'Abansado nga mga pagpipilian',
'prefs-advancedsearchoptions' => 'Abansado nga mga pagpipilian',
'prefs-advancedwatchlist' => 'Abansado nga mga pagpipilian',
+'prefs-displayrc' => 'Mga pirilion hiunong han ginpapakita',
+'prefs-displaysearchoptions' => 'Mga pirilion hiunong han ginpapakita',
+'prefs-displaywatchlist' => 'Mga pirilion hiunong han ginpapakita',
'prefs-diffs' => 'Mga kaibhan',
# User preference: e-mail validation using jQuery
'userrights-lookup-user' => 'Pagdumaraa han mga hugpo han gumaramit',
'userrights-user-editname' => 'Igbutang an agnay han gumaramit:',
'editusergroup' => 'Igliwat han mga hugpo han gumaramit',
-'editinguser' => "Igliliwat an mga katungod han gumaramit han gumaramit '''[[Gumaramit:$1|$1]]''' $2",
+'editinguser' => "Igliliwat an mga katungod han gumaramit han gumaramit '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Igliwat an mga hugpo hin gumaramit',
+'saveusergroups' => 'Igtipig an mga hugpo han gumaramit',
'userrights-groupsmember' => 'Api han:',
'userrights-reason' => 'Katadungan:',
'userrights-no-interwiki' => '
'right-block' => 'Pugnga an iba nga mga gumaramit ha pagliwat',
'right-blockemail' => 'Pugnga an uska gumaramit tikang ha pagpadangat hin e-mail',
'right-hideuser' => 'Pugnga an uska agnay-hin-gumaramit, tago-a ito tikang ha publiko',
+'right-unblockself' => 'Lugaring nga makakatanggal han pagpugong',
+'right-editusercssjs' => 'Igliwat an kanan iba mga gumaramit nga mga paypay han CSS ngan JavaScript',
+'right-editusercss' => 'Igliwat an kanan iba mga gumaramit nga mga paypay han CSS',
+'right-edituserjs' => 'Iliwat an kanan iba mga gumaramit nga paypay han JavaScript',
+'right-import' => 'Man-aangbit hin mga pakli tikang ha iba nga mga wiki',
+'right-importupload' => 'Man-aangbit hin mga pakli tikang ha uska paypay nga iginkarga-pasaka',
+'right-mergehistory' => 'Igtampo an kaagi han mga pakli',
+'right-userrights' => 'Igliwat an ngatanan nga mga katungod han gumaramit',
+'right-userrights-interwiki' => 'Igliwat an mga katungod han gumaramit han mga gumaramit ha iba nga mga wiki',
+'right-sendemail' => 'Padad-i hin e-mail ngada ha iba nga mga gumaramit',
# User rights log
+'rightslog' => 'Talaan hin mga katungod han gumaramit',
'rightsnone' => '(waray)',
# Associated actions - in the sentence "You do not have permission to X"
'action-read' => 'basaha ini nga pakli',
'action-edit' => 'liwata ini nga pakli',
'action-createpage' => 'pahimo hin mga pakli',
+'action-createtalk' => 'Paghimo hin hiruhimangraw nga mga pakli',
+'action-createaccount' => 'Himoa ini nga akawnt hin gumaramit',
'action-minoredit' => 'butanga hin tigaman hinin nga pagliwat komo gutiay',
'action-move' => 'balhina ini nga pakli',
+'action-move-subpages' => 'igbalhin ini nga pakli, ngan iya mga bahin-pakli',
+'action-move-rootuserpages' => 'Igbalhin an gamot nga mga pakli han gumaramit',
+'action-movefile' => 'igbalhin ini nga paypay',
+'action-upload' => 'igkarga-pasaka ini nga paypay',
+'action-reupload' => 'igsapaw ini nga aanhi nga paypay',
+'action-upload_by_url' => 'igkaraga-pasaka ini nga paypay tikang ha uska URL',
'action-delete' => 'paraa ini nga pakli',
'action-deleterevision' => 'igpara ini nga pagbag-o',
+'action-deletedhistory' => 'kitaa an kanan hini nga pakli kaagi han mga ginpara',
+'action-browsearchive' => 'Pamiling hin mga ginpara nga mga pakli',
+'action-undelete' => 'Balika an ginpara hini nga pakli',
+'action-suppressionlog' => 'kitaa an kanan hini pribado nga talaan',
+'action-block' => 'Pugnga ini nga gumaramit ha pagliwat',
+'action-protect' => 'igsaliwan an katupngan han pananalipod para hini nga pakli',
+'action-import' => 'ig-angbit ini nga pakli tikang ha iba nga wiki',
+'action-importupload' => 'ig-angbit ini nga pakli tikang ha uska ginkarga-pasaka nga paypay',
+'action-mergehistory' => 'Igtampo an kaagi hini nga pakli',
+'action-userrights' => 'Igliwat an ngatanan nga mga katungod han gumaramit',
+'action-sendemail' => 'Padara hin mga e-mail',
# Recent changes
'nchanges' => '$1 {{PLURAL:$1|pagbag-o|mga pagbabag-o}}',
'newpageletter' => 'B',
'boteditletter' => 'b',
'rc_categories_any' => 'Bisan ano nga',
+'newsectionsummary' => '/* $1 */ bag-o nga bahin',
'rc-enhanced-expand' => 'Igpakita an detalye (nagkikinahanglan hin JavaScript)',
'rc-enhanced-hide' => 'Igtago an mga detalye',
+'rc-old-title' => 'orihinal nga ginhimo komo "$1"',
# Recent changes linked
'recentchangeslinked' => 'Mga may kalabotan nga binag-o',
# Upload
'upload' => 'Pagkarga hin file',
'uploadbtn' => 'Igkarga an file',
+'reuploaddesc' => 'Undanga an pagkarga-pasaka ngan balik ngadto ha porma han pagkarga-pasaka',
+'uploadnologin' => 'Diri nakalog-in',
+'uploaderror' => 'Sayop hit pagkarga-pasaka',
'upload-recreate-warning' => "'''Pahimatngon: An fayl nga may-ada hiton nga ngaran in ginpara o ginbalhin.'''
An taramdan han pagpara ngan pagbalhin para hini nga pakli in ginhahatag para han imo kamurayaw:",
+'upload-permitted' => 'Gintutugotan nga mga klase han paypay: $1.',
+'upload-prohibited' => 'Gindidire nga mga klase han paypay: $1.',
+'uploadlog' => 'Talaan hin ginkarga-pasaka',
'uploadlogpage' => 'Talaan han mga ginkarga-paigbaw',
'filename' => 'Ngaran han fayl',
'filedesc' => 'Dalikyat nga pulong',
'filereuploadsummary' => 'Mga pagbal-iw ha fayl:',
'filesource' => 'Tinikangan:',
'ignorewarning' => 'Pabay-i an pahimatngon ngan igtipig la ngahaw',
+'ignorewarnings' => 'Pasagdi an bisan ano nga mga pahimatngon',
+'filename-toolong' => 'Iton ngaran hin paypay in diri puyde na mas lapos pa ha 240 ka mga byte.',
+'badfilename' => 'An ngaran-han-paypay in ginliwat ngada ha "$1".',
'filename-tooshort' => 'An ngaran han fayl in halipot hin duro.',
+'filetype-banned' => 'Ini nga klase nga paypay in gindidire.',
'illegal-filename' => 'An ngaran han fayl in diri gintutugutan.',
'unknown-error' => 'Nahitabo an waray kasasabti nga sayop.',
+'tmp-create-error' => 'Diri makakahimo hin temporaryo nga paypay.',
+'tmp-write-error' => 'Sayop ha pagsurat hin temporaryo nga paypay.',
+'large-file' => 'Ginrerekomenda nga it mga paypay in diri malapos hin $1;
+ini nga paypay in $2.',
+'largefileserver' => 'Ini nga paypay in durudako kaysa ha ginpapakarawat han serbidor.',
'uploadwarning' => 'Pahimatngon han pagkarga paigbaw',
'savefile' => 'Igtipig an paypay',
'uploadedimage' => 'ginkarga-paigbaw "[[$1]]"',
'upload-proto-error' => 'Sayop nga protocol',
'upload-file-error' => 'Sayop ha sulod',
'upload-unknown-size' => 'Waray kasabti an kadako',
+'upload-http-error' => 'Mayda nahitabo nga sayop hin HTTP: $1',
# File backend
+'backend-fail-notexists' => 'Waray ngada an paypay nga $1.',
'backend-fail-delete' => 'Diri nakakapara han paypay nga "$1".',
'backend-fail-alreadyexists' => 'May-ada na paypay nga "$1".',
-'backend-fail-store' => 'Diri nakakatipig han paypay "$1" ha "$".',
+'backend-fail-store' => 'Diri nakakatipig han paypay "$1" ha "$2".',
'backend-fail-copy' => 'Diri nakakakopya han paypay nga "$1" ngada "$2".',
'backend-fail-move' => 'Diri nakakabalhin han paypay "$1" ngada "$2".',
'backend-fail-opentemp' => 'Diri nakakaabre han temporaryo nga paypay.',
# img_auth script messages
'img-auth-accessdenied' => 'Diri gintutugutan makasulod',
+'img-auth-nofile' => 'Waray ngada an paypay nga "$1".',
# HTTP errors
'http-host-unreachable' => 'Diri nakakaabot ha URL.',
+# Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
+'upload-curl-error6' => 'Diri nakakaabot ha URL',
+'upload-curl-error28' => 'Linmapos ha oras an pagkarga-pasaka',
+
'license' => 'Palilisensya:',
'license-header' => 'Palilisensya:',
'nolicense' => 'Waray napili',
Alayon pagkita han [$2 nga pakli hin pagpahayag mahitungod hini nga fayl] para hin dugang nga kasayuran.',
'sharedupload-desc-here' => 'An fayl in tikang ha $1 ngan puydi mahigamitan para han iba nga mga proyekto.
An paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakita ha sirong.',
+'uploadnewversion-linktext' => 'Igkarga-pasaka an ba-o nga bersyon hini nga paypay',
'shared-repo-from' => 'tikang $1',
+'upload-disallowed-here' => 'Diri nimo masasapaw ini nga paypay.',
# File reversion
'filerevert-comment' => 'Rason:',
'filedelete-success' => "Napara an '''$1'''",
'filedelete-otherreason' => 'Lain/dugang nga katadungan:',
'filedelete-reason-otherlist' => 'Lain nga katadungan',
+'filedelete-edit-reasonlist' => 'Igliwat an mga rason han pagpara',
+'filedelete-maintenance-title' => 'Diri nakakapara han paypay',
# MIME search
+'mimesearch' => 'MIME nga pamiling',
+'mimetype' => 'MIME nga klase:',
'download' => 'pagkarga paubos',
+# List redirects
+'listredirects' => 'Talaan hin mga redirect',
+
# Unused templates
+'unusedtemplates' => 'Waray kagamiti nga mga batakan',
'unusedtemplateswlh' => 'iba nga mga sumpay',
# Random page
'disambiguations' => 'Mga pakli nga nasumpay ha mga pansayod nga pakli',
'disambiguationspage' => 'Template:pansayod',
+'brokenredirects' => 'Mga redirect nga utod',
'brokenredirects-edit' => 'igliwat',
'brokenredirects-delete' => 'paraa',
+'withoutinterwiki' => 'Mga pakli nga waray sumpay nga yinaknan',
'withoutinterwiki-submit' => 'Igpakita',
+'fewestrevisions' => 'Mga pakli nga may pinakagutiay nga mga rebisyon',
+
# Miscellaneous special pages
'nbytes' => '$1 {{PLURAL:$1|nga byte|nga mga byte}}',
'ncategories' => '$1 {{PLURAL:$1|nga kaarangay|nga mga kaarangay}}',
'prefixindex' => 'Ngatanan nga pakli nga may-ada pahiuna-nga-sumpay',
'shortpages' => 'Haglipot nga mga pakli',
'longpages' => 'Haglaba nga mga pakli',
+'deadendpages' => 'Waray na kakadtoan nga mga pakli',
+'protectedpages' => 'Pinapasaliporan nga mga pakli',
'listusers' => 'Lista han mga gumaramit',
+'listusers-creationsort' => 'Ginsusunodsunod pinaagi han paghimo nga petsa',
+'usereditcount' => '$1 {{PLURAL:$1|ka pagliwat|ka mga pagliwat}}',
'usercreated' => '{{GENDER:$3|Ginhimo}} han $1 ha $2',
'newpages' => 'Bag-o nga mga pakli',
'newpages-username' => 'Agnay hiton gumaramit:',
'move' => 'Balhina',
'movethispage' => 'Balhina ini nga pakli',
'notargettitle' => 'Waray iiguon',
+'nopagetitle' => 'Waray sugad hito nga kakadtoan nga pakli',
'pager-newer-n' => '{{PLURAL:$1|burubag-o 1|burubag-o $1}}',
'pager-older-n' => '{{PLURAL:$1|durudaan 1|durudaan $1}}',
'specialloguserlabel' => 'Magburuhat:',
'speciallogtitlelabel' => 'iiguon (titulo o gumarami):',
'log' => 'Mga talaan',
+'all-logs-page' => 'Ngatanan nga mga talaan panpubliko',
# Special:AllPages
'allpages' => 'Ngatanan nga mga pakli',
'allpagesprev' => 'Naha-una',
'allpagesnext' => 'Sunod',
'allpagessubmit' => 'Kadto-a',
+'allpages-bad-ns' => '{{SITENAME}} in waray ngaran-lat\'ang nga "$1".',
+
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Igkita an pinakaurhi.',
# Special:Categories
'categories' => 'Mga kaarangay',
# E-mail user
'emailuser' => 'Ig-e-mail ini nga gumaramit',
+'emailuser-title-target' => 'Ig-E-mail ini nga {{HENERO:$1|gumaramit}}',
+'emailuser-title-notarget' => 'Gumaramit han e-mail',
+'emailpage' => 'Gumaramit han e-mail',
+'defemailsubject' => '{{SITENAME}} e-mail tikang kan gumaramit na hi "$1"',
+'usermaildisabled' => 'Waray ginpagana an e-mail han gumaramit',
+'usermaildisabledtext' => 'Diri ka makakapadangat hin e-mail ha iba nga mga gumaramit ha dinhi nga wiki',
+'noemailtitle' => 'Waray e-mail address',
+'nowikiemailtitle' => 'Waray gintutugutan nga e-mail',
'emailusername' => 'Agnay hiton gumaramit:',
'emailfrom' => 'Tikang kan:',
'emailto' => 'Para kan:',
'emailccme' => 'Igemail ako hini nga kopya hit ak buot igpasabot.',
'emailsent' => 'Napadara an e-mail',
+# User Messenger
+'usermessage-summary' => 'Nabilin hin mensahe pansistema',
+'usermessage-editor' => 'Mensahero han sistema',
+
# Watchlist
'watchlist' => 'Akon barantayan',
'mywatchlist' => 'Akon angay timan-an',
'watchlistfor2' => 'Para ha $1 $2',
+'watchnologin' => 'Diri nakalog-in',
'watch' => 'Bantayi',
'watchthispage' => 'Bantayi ini nga pakli',
'unwatch' => 'Pabay-i an pagbantay',
'watchlist-options' => 'Mga pirilian han talaan han binabantayan',
'enotif_newpagetext' => 'Ini in bag-o nga pakli.',
+'enotif_impersonal_salutation' => 'gumaramit han {{SITENAME}}',
+'changed' => 'naliwanan',
'created' => 'nahimo',
'enotif_anon_editor' => 'waray magpakilala nga gumaramit $1',
# Delete
'deletepage' => 'Igpara an pakli',
+'confirm' => 'Kompirma',
'excontent' => "An sulod in: ''$1''",
'excontentauthor' => 'an sulod in: \'\'$1\'\' (ngan hi "[[Special:Contributions/$2|$2]]" la an nag-amot)',
'exblank' => 'waray sulod an pakli',
'deletedtext' => 'Ginpara an "$1".
Kitaa an $2 para hin talaan han mga gibag-ohi nga mga ginpamara.',
'dellogpage' => 'Talaan han mga ginpara',
+'deletionlog' => 'Talaan han mga ginpara',
+'reverted' => 'Ginbalik ha uruuna nga rebisyon',
'deletecomment' => 'Katadungan:',
+'deleteotherreason' => 'Lain/dugang nga katadungan:',
'deletereasonotherlist' => 'Lain nga katadungan',
'deletereason-dropdown' => "*Agsob nga rason hin pagpara
** Tugon han manunurat
** Pagtalapas ha katungod hin pagtatag-iya (''copyright'')
** Bandalismo",
+'delete-edit-reasonlist' => 'Igliwat an mga rason han pagpara',
# Rollback
'rollback' => 'Mga libot-pabalik nga pagliwat',
'protect-otherreason' => 'Lain/dugang nga katadongan:',
'protect-otherreason-op' => 'Lain nga katadongan',
'restriction-type' => 'Pagtugot:',
+'minimum-size' => 'Pinakaguti nga kadako',
+'maximum-size' => 'Pinakadako nga kadako:',
+'pagesize' => '(mga byte)',
# Restrictions (nouns)
'restriction-edit' => 'Igliwat',
'restriction-move' => 'Balhina',
'restriction-create' => 'Himo-a',
+'restriction-upload' => 'Igkarga-pasaka',
# Restriction levels
'restriction-level-all' => 'bisan ano nga katupngan',
'undeletelink' => 'igpakita/igbalik',
'undeleteviewlink' => 'kitaa',
'undeletecomment' => 'Katadungan:',
+'cannotundelete' => 'Pakyas an pagpabalik han pinara:
+$1',
+'undelete-search-title' => 'Pamiling hin mga ginpara nga mga pakli',
+'undelete-search-box' => 'Pamiling hin mga ginpara nga mga pakli',
'undelete-search-submit' => 'Bilnga',
'undelete-show-file-submit' => 'Oo',
'year' => 'Tikang ha tuig (ngan uruunhan):',
'sp-contributions-newbies' => 'Igpakita an mga amot hin mga bag-o nga akawnt la',
+'sp-contributions-newbies-sub' => 'Para han bag-o nga mga akawnt',
'sp-contributions-blocklog' => 'Talaan han pagpugong',
'sp-contributions-uploads' => 'mga ginkarga-paigbaw',
'sp-contributions-logs' => 'Mga talaan',
'blockip' => 'Pugngi an gumaramit',
'blockip-title' => 'Pugngi an gumaramit',
'blockip-legend' => 'Pugngi an gumaramit',
+'ipadressorusername' => 'IP address o agnay-hit-gumaramit:',
+'ipbexpiry' => 'Matitima an dulot:',
'ipbreason' => 'Katadungan:',
'ipbreasonotherlist' => 'Lain nga katadungan',
'ipbreason-dropdown' => '*Agsob nga mga rason hit pagpugong
** Panhahadlok nga pamatasan/makakalilisang nga pansamok
** Pan-abusar hin dirudilain nga mga akawnt
** Diri makakarawat nga agnay-hit-gumaramit',
+'ipb-hardblock' => 'Pugnga an mga nakalog-in nga mga gumaramit tikang ha pagliwat ha dinhi nga IP address',
+'ipbcreateaccount' => 'Pugnga paghimo hin akawnt',
+'ipbemailban' => 'Pugnga an uska gumaramit tikang ha pagpadangat hin e-mail',
'ipbsubmit' => 'Pugngi ini nga gumaramit',
+'ipbother' => 'Iba nga oras:',
'ipboptions' => '2 ka oras:2 hours,1 ka adlaw:1 day,3 ka adlaw:3 days,1 ka semana:1 week,2 ka semana:2 weeks,1 ka bulan:1 month,3 ka bulan:3 months,6 ka bulan:6 months,1 ka tuig:1 year,waray katapusan:infinite',
'ipbotheroption' => 'iba',
'ipbotherreason' => 'Lain/dugang nga katadungan:',
+'ipbhidename' => 'Tagoa an agnay-han-gumaramit tikang ha mga pagliwat ngan mga talaan',
+'ipb-disableusertalk' => 'Ayaw tugota ini nga gumaramit ha pagliwat han iya kalugaringon nga hiruhimangraw nga pakli samtang nakapugong hiya',
+'ipb-change-block' => 'Ig-utro pagpugong an gumaramit upod ini nga mga kahimtang',
+'ipb-confirm' => 'Igkompirma an pagpugong',
+'badipaddress' => 'Diri balido nga IP addres',
'blockipsuccesssub' => 'Malinamposon an pagpugong',
+'ipb-blockingself' => 'Imo pala pupugngan it imo kalugaringong! Sigurado ka ba hit imo bubuhaton?',
+'ipb-edit-dropdown' => 'Igliwat an mga rason han pagpugong',
+'ipb-unblock-addr' => '
+Tanggala an pagpugong $1',
+'ipb-unblock' => 'Tanggala an pagpugong ha uska aganay-hit-gumaramit o IP address',
+'ipusubmit' => 'Tanggala ini nga pagpugong',
+'blocklist' => 'Mga gumaramit nga nakapugong',
'ipblocklist' => 'Mga ginpugngan nga gumaramit',
+'ipblocklist-legend' => 'Pamiling hin uska napugngan nga gumaramit',
+'blocklist-timestamp' => 'Marka-oras',
'blocklist-target' => 'Gin-iigo',
'blocklist-expiry' => 'Napan-os',
'blocklist-by' => 'Ginpupugngan an admin',
'blocklist-reason' => 'Rason:',
'ipblocklist-submit' => 'Bilnga',
'ipblocklist-localblock' => 'Lokal nga pagpugong',
+'ipblocklist-otherblocks' => 'Iba {{PLURAL:$1|ka pagpugong|ka mga pagpugong}}',
+'expiringblock' => 'diri madulot pag $1 han $2',
+'anononlyblock' => 'Waray nagpakilala la',
+'createaccountblock' => 'Diri ginpapagana an paghimo hin akawnt',
+'emailblock' => 'Diri ginpapagana an e-mail',
+'blocklist-nousertalk' => 'diri nakakaliwat hin kalugaringong nga hiruhimangraw nga pakli',
+'ipblocklist-empty' => 'An talaan han pagpugong in waray sulod.',
'blocklink' => 'igpugong',
'unblocklink' => 'igtanggal an pagpugong',
'change-blocklink' => 'igliwan an papugong',
'contribslink' => 'mga ámot',
+'emaillink' => 'Padara hin e-mail',
'blocklogpage' => 'Talaan han pagpugong',
'blocklogentry' => 'ginpugngan hi [[$1]] nga natatapos ha takna hin $2 $3',
+'unblocklogentry' => 'gintanggal an pagpugong $1',
'block-log-flags-nocreate' => 'diri gintutugutan an paghimo hin akawnt',
+'block-log-flags-noemail' => 'Diri ginpapagana an e-mail',
+'block-log-flags-nousertalk' => 'diri makakaliwat hit kalugaringon nga hiruhimangraw nga pakli',
+'block-log-flags-hiddenname' => 'nakatago an agnay-hit-gumaramit',
+'ipb_already_blocked' => '"$1" in ginpugngan na',
'blockme' => 'Pugngi ako',
'proxyblocksuccess' => 'Human na.',
+'ipbnounblockself' => 'Diri ka gintutugotan hin pagtanggal hit pagpugong ha kalugaringon',
# Developer tools
+'lockdb' => 'Trangkaha an database',
+'unlockdb' => 'Abreha an database',
+'lockbtn' => 'Trangkaha an database',
+'unlockbtn' => 'Abreha an database',
+'lockdbsuccesssub' => 'Malinamposon an pagtrangka han database',
+'unlockdbsuccesssub' => '
+Gintanggal an pagtrangka han databae',
+'unlockdbsuccesstext' => 'Natanggal an trangka han database',
+'lockfilenotwritable' => 'An database paypay han trangka in diri mahisusurat.
+Para pagtrangka o pagtanggal han trangka han database, ini in kinahanglanon magin masusuratan han serbidor han web.',
'databasenotlocked' => 'An database in diri nakatrangka.',
# Move page
'move-page-legend' => 'Balhina an pakli:',
'movearticle' => 'Balhina an pakli:',
'moveuserpage-warning' => "'''Pahimatngon:''' Tibalhin ka hin pakli hin gumaramit. Alayon pagtigaman nga an pakli là an mababalhin ngan an gumaramit in ''diri'' mababalyoan hin ngaran.",
+'movenologin' => 'Diri nakalog-in',
+'movenotallowed' => 'Waray ka pagtugot para makabalhin hin mga pakli.',
+'movenotallowedfile' => 'Waray ka pagtugot para makabalhin hin mga paypay.',
+'cant-move-user-page' => 'Diri ka gintutugotan pagbalhin hin mga pakli nga gumaramit (labot la tikang ha mga bahin-pakli).',
+'cant-move-to-user-page' => 'Diri ka gintutugotan pagbalhin hin uska pakli pakada ha uska pakli hin gumaramit (labot la pakadto ha usa nga bahin-pakli han gumaramit).',
'newtitle' => 'Para ha bag-o nga titulo:',
+'move-watch' => 'Kitaa an tinikangan nga pakli ngan kakadtoan nga pakli',
'movepagebtn' => 'Igbalhin an pakli',
'pagemovedsub' => 'Malinamposon an pagbalhin',
+'movepage-moved' => '\'\'\'"$1" in ginbalhin ngadto ha "$2"\'\'\'',
+'movepage-moved-redirect' => 'Nahimo an uska redirect.',
'movedto' => 'ginbalhin ngadto',
+'move-subpages' => 'Balhina an mga bahin-pakli (tubtob ngadto ha $1)',
+'move-talk-subpages' => 'Balhina an mga bahin-pakli han pakli han hiruhimangraw (tubtob ngadto ha $1)',
+'movepage-page-exists' => 'An pakli nga $1 in aada na ngan diri ini lugaring nga masasapawan pagsurat.',
+'movepage-page-moved' => 'An pakli nga $1 in nabalhin ngadto ha $2.',
+'movepage-page-unmoved' => 'An pakli nga $1 in diri mababalhin ngadto ha $2.',
'movelogpage' => 'Talaan han pagbalhin',
+'movelogpagetext' => 'Ubos hini in uska talaan han ngatanan nga nabalhin nga pakli',
+'movenosubpage' => 'Ini nga pakli in waray mga bahin-pakli.',
'movereason' => 'Rason:',
'revertmove' => 'igbalik',
'delete_and_move' => 'Igapara ngan igbalhin',
+'delete_and_move_confirm' => 'Oo, paraa an pakli',
+'delete_and_move_reason' => 'Ginpara para makahatag hin aragian para makabalhin tikan "[[$1]]"',
+'selfmove' => 'An tinikangan ngan kakadtoan nga mga titulo in parehas;
+diri makakabalhin ha iya kalugaringon ngahaw.',
+'immobile-source-namespace' => 'Diri nababalhin an mga pakli ha ngaran-lat\'ang nga "$1"',
+'immobile-target-namespace' => 'Diri makakabalhin hin mga pakli ngada ha ngaran-lat\'ang nga "$1"',
+'immobile-target-namespace-iw' => 'An sumpay interwiki in diri balido nga irig-on para han pagbalhin hin pakli.',
+'immobile-source-page' => 'Diri mababalhin ini nga pakli.',
+'immobile-target-page' => 'Diri makakabalhin ha ngada nga kakadtoon nga titulo.',
+'imageinvalidfilename' => 'An kakadtoon nga ngaran-han-paypay in diri balido',
+'move-leave-redirect' => 'Pagbilin hin redirect',
# Export
'export' => 'Mga pakli hit pagexport',
'exportall' => 'Ig-export an ngatanan nga mga pakli',
+'exportlistauthors' => 'Lakip an bug-os nga talaan han mga man-aamot para ha kada pakli',
+'export-submit' => 'Ginpapaangbit',
'export-addcattext' => 'Igdugang an mga pakli tikang ha kaarangay:',
'export-addcat' => 'Dugngi',
'export-addnstext' => "Igdugang an mga pakli tikang ha ngaran-lat'ang:",
'export-addns' => 'Dugngi',
+'export-download' => 'Igtipig komo paypay',
+'export-templates' => 'Iglakip an mga batakan',
# Namespace 8 related
+'allmessages' => 'Mga mensahe han sistema',
'allmessagesname' => 'Ngaran',
'allmessagesdefault' => 'Daan aada nga teksto hiton mensahe',
+'allmessagescurrent' => 'Yana nga teksto han mensahe',
+'allmessages-filter-legend' => 'Sara',
'allmessages-filter-all' => 'Ngatanan',
'allmessages-language' => 'Yinaknan:',
'allmessages-filter-submit' => 'Kadto-a',
'thumbnail_image-type' => 'An klase han hulagway in diri suportado',
# Special:Import
+'import' => 'Naangbit hit mga pakli',
+'import-interwiki-source' => 'Tinikangan nga wiki/pakli:',
+'import-interwiki-templates' => 'Lakip an ngatanan nga mga batakan',
+'import-interwiki-submit' => 'Naangbit',
+'import-interwiki-namespace' => "Kakadtoan nga ngaran-lat'ang:",
'import-upload-filename' => 'Ngaran han paypay:',
'import-comment' => 'Komento:',
+'importstart' => 'Nag-aangbit hin mga pakli...',
'importnopages' => 'Waray pakli nga ginpapaangbit.',
+'importbadinterwiki' => 'Maraot nga sumpay hit interwiki',
+'importnotext' => 'Waray sulod o waray teksto',
+'importsuccess' => 'Natapos an pag-aangbit!',
+'import-noarticle' => 'Waray pakli nga maaangbit!',
+'import-token-mismatch' => 'Nawara an datos sesyon.
+Alayon utroha.',
+'import-error-edit' => 'An pakli nga "$1" in waray naangbit tungod nga diri ka gintutugotan pagliwat hini.',
+'import-error-create' => 'An pakli nga "$1" in waray naangbit tungod nga diri ka gintutugotan paghimo hini.',
+'import-error-interwiki' => 'An pakli nga "$1" in waray naangbit tungod nga an ngaran in nakareserba para han pagsusumpay ha gawas (interwiki).',
+'import-error-special' => 'An pakli nga "$1" in waray naangbit tungod nga nahihilakip ini ha uska pinaurog nga ngaran-lat\'ang nga diri natugot hin mga pakli.',
+'import-error-invalid' => 'An pakli nga "$1" in waray naangbit tungod nga it iya ngaran in diri balido.',
+'import-options-wrong' => 'Sayop {{PLURAL:$2|nga pirilion|nga mga pirilion}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'An ginhatag nga gamot-pakli in uska diri balido nga titulo.',
+'import-rootpage-nosubpage' => 'Ngaran-lat\'ang nga "$1" han gamot-pakli in diri natugot hin mga bahin-pakli.',
+
+# Import log
+'importlogpage' => 'Talaan hin pan-aangbit',
+'import-logentry-upload' => 'ginangbit [[$1]] pinaagi hin pagkarga-pasaka han paypay',
+'import-logentry-interwiki' => 'natranswiki $1',
+
+# JavaScriptTest
+'javascripttest-pagetext-skins' => 'Pagpili hin panit para ha pag-paandar han:',
# Tooltip help for the actions
'tooltip-pt-userpage' => 'An imo pakli hin gumaramit',
'tooltip-compareselectedversions' => 'Kitaa an mga kaibhan ha butnga han duha nga pinili nga mga pagliwat hini nga pakli',
'tooltip-watch' => 'Dugnga ini nga pakli ngadto han imo talaan hin ginbibinantayan',
'tooltip-watchlistedit-normal-submit' => 'Igtanggal an mga titulo',
+'tooltip-recreate' => 'Utroha paghimo an pakli bisan ini in ginpara na',
+'tooltip-upload' => 'Tikanga an pagkarga-pasaka',
'tooltip-rollback' => 'An "libot-pabalik" in nabalik han (mga) pagliwat hini nga pakli ngadto han kataposan nga nag-amot hin usa ka pidlit',
'tooltip-undo' => '"Igpawara an ginbuhat (undo)" in nagbabalik hinin nga pagliwat ngan nabuklad hin pagliwat nga porma ha pahiuna-nga-paggawas nga kahimtang. Natugot liwat pagdugang hin katadungan ha dinalikyat nga sumat.',
+'tooltip-preferences-save' => 'Tipiga an mga karuyag',
'tooltip-summary' => 'Pagbutang hin dalikyat nga sumat',
# Attribution
+'siteuser' => '{{SITENAME}} gumaramit $1',
+'anonuser' => '{{SITENAME}} waray nagpakilala nga gumaramit $1',
'othercontribs' => 'Ginbasihan ha binuhat ni $1.',
'others' => 'mga iba',
'siteusers' => '{{SITENAME}} {{PLURAL:$2|gumaramit|mga gumaramit}} $1',
# Info page
+'pageinfo-title' => 'Impormasyon para "$1"',
'pageinfo-header-basic' => 'Panguna nga pananabotan',
'pageinfo-header-edits' => 'Kaagi han pagliwat',
'pageinfo-header-restrictions' => 'Panalipod han pakli',
+'pageinfo-display-title' => 'Iglatag an titulo',
'pageinfo-length' => 'Kahilaba han pakli (ha mga byte)',
'pageinfo-article-id' => 'ID han pakli',
'pageinfo-robot-policy' => 'Pamilnga an kahimtang han makina',
'pageinfo-lastuser' => 'Giurhii nga nagliwat',
'pageinfo-lasttime' => 'Petsa han kataposan nga pagliwat',
'pageinfo-edits' => 'Ngatanan nga ihap han mga pakli',
+'pageinfo-toolboxlink' => 'Impormasyon han pakli',
+'pageinfo-redirectsto' => 'Igredirect ngadto ha',
+'pageinfo-contentpage' => 'Ginlakip komo uska unod nga pakli',
+'pageinfo-contentpage-yes' => 'Oo',
+'pageinfo-protect-cascading-yes' => 'Oo',
+
+# Patrolling
+'markaspatrolleddiff' => 'Igmarka komo ginpatrolya na',
+'markaspatrolledtext' => 'Markaha ini nga pakli komo ginpatrolya na',
+'markedaspatrolled' => 'Igmarka komo ginpatrolya na',
+'markedaspatrollederror' => 'Diri nakakamarka komo ginpatrolya na',
+
+# Patrol log
+'patrol-log-page' => 'Talaan han pagpatrolya',
+'patrol-log-header' => 'Ini in uska talaan hin mga ginpatrolya nga mga rebisyon.',
+'log-show-hide-patrol' => '$1 talaan hin pagpatrolya',
+
+# Image deletion
+'deletedrevision' => 'Ginpara an daan nga rebisyon $1',
+'filedeleteerror-short' => 'Nagsayop ha pagpara han paypay: $1',
+'filedeleteerror-long' => 'Mga sayop nga ginengkwentro samtang nagpapara hin paypay:
+
+$1',
+'filedelete-missing' => 'An paypay nga "$1" in diri mapapara, tunogd nga waray ini dida.',
# Browsing diffs
'previousdiff' => '← Durudaan nga pagliwat',
# Media information
'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pakli|mga pakli}}',
+'file-info' => 'Kadako han paypay: $1, klase han MIME: $2',
'file-info-size' => '$1 × $2 nga pixel, kadako han fayl: $3, MIME nga tipo: $4',
'file-nohires' => 'Waray mas hiruhitaas nga resolusyon.',
'svg-long-desc' => 'SVG nga fayl, ginbabanabanahan nga $1 × $2 nga mga pixel, kadako han fayl: $3',
'show-big-image' => 'Bug-os nga resolusyon',
+'show-big-image-preview' => 'Kadako hin nga pahiuna nga pagawas: $1.',
+'show-big-image-other' => 'Iba {{PLURAL:$2|nga resolusyon|nga mga resolusyon}}: $1.',
'show-big-image-size' => '$1 × $2 nga mga pixel',
# Special:NewFiles
+'newimages' => 'Galeryia hin mga paypay nga bag-o',
'newimages-legend' => 'Panara',
+'newimages-label' => 'Ngaran han paypay (o uska bahin hini):',
+'showhidebots' => '($1 ka mga bot)',
'noimages' => 'Waray makikit-an.',
'ilsubmit' => 'Bilnga',
+'bydate' => 'pinaagi han petsa',
# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
'ago' => '$1 an nakalabay',
'exif-imagewidth' => 'Kahaluag',
'exif-imagelength' => 'Kahitaas',
'exif-ycbcrpositioning' => 'Pagpoposisyon han Y ngan C',
+'exif-referenceblackwhite' => 'Padis han itom nga busag nga reperensya hin mga balor',
+'exif-datetime' => 'Pagliwat han petsa ngan oras han paypay',
'exif-imagedescription' => 'Titulo han hulagway',
+'exif-make' => 'Naghimo han kamera',
+'exif-model' => 'Modelo han kamera',
+'exif-software' => 'Software nga gingamit',
'exif-artist' => 'Tag-iya',
+'exif-colorspace' => 'Kolor lat-ang',
+'exif-subsectime' => 'Mga bahin-segundo han PetsaOras',
+'exif-exposuretime-format' => '$1 seg ($2)',
+'exif-fnumber' => 'F Numero',
+'exif-lightsource' => 'Ginkuhaan han suga',
+'exif-filesource' => 'Ginkuhaan han paypay',
+'exif-saturation' => 'saturasyon',
'exif-sharpness' => 'Pagkatarom',
+'exif-gpslatituderef' => 'Amihanan o salatan nga latitud',
+'exif-gpslatitude' => 'Latitud',
+'exif-gpslongituderef' => 'Sinirangan o katundan nga longitud',
+'exif-gpslongitude' => 'Longitud',
+'exif-gpsaltitude' => 'Altitud',
'exif-gpstimestamp' => 'GPS nga oras (atomiko nga relo)',
+'exif-gpssatellites' => 'Mga satelayt nga gingamit ha pagsukol',
+'exif-gpsstatus' => 'Kahimtang han nagkakarawat',
+'exif-gpsdop' => 'kauntop han pagsukol',
'exif-gpsspeedref' => 'Sukol han kalaksi',
+'exif-gpstrack' => 'Direksyon han kiwa',
+'exif-gpsimgdirection' => 'Direksyon han imahe',
+'exif-gpsdestlatitude' => 'kakadtoan latitud',
+'exif-gpsdestlongitude' => 'kakadtoan longitud',
+'exif-gpsdestdistance' => 'Distansya ha destinasyon',
+'exif-gpsareainformation' => 'Ngaran han lugar an GPS',
+'exif-gpsdatestamp' => 'petsa han GPS',
+'exif-jpegfilecomment' => 'Komento han JPEG nga paypay',
+'exif-worldregioncreated' => 'Rehiyon han kalibutan kun diin an ritrato ginkuha',
+'exif-countrycreated' => 'Nasod kun diin an ritrato ginkuha',
+'exif-countrycodecreated' => 'Kodigo han nasod kun diin an ritrato ginkuha',
+'exif-provinceorstatecreated' => 'Lalawigan o estado kun diin an ritrato ginkuha',
+'exif-citycreated' => 'An syudad kun diin an ritrato ginkuha',
+'exif-sublocationcreated' => 'Bahin-lokasyon han syudad kun diin an ritrato ginkuha',
+'exif-worldregiondest' => 'Ginpakita an rehiyon han kalibutan',
'exif-countrydest' => 'Ginpapakita an nasod',
'exif-countrycodedest' => 'Ginpapakita an kodigo han nasod',
'exif-provinceorstatedest' => 'Ginpapakita an lalawigan o estado',
'exif-iimcategory' => 'Kaarangay',
'exif-datetimeexpires' => 'Ayaw gamita kahuman han',
'exif-datetimereleased' => 'Ginpagawas han',
+'exif-lens' => 'Mga lente nga gingamit',
'exif-cameraownername' => 'Tag-iya han kamera',
+'exif-usageterms' => 'Mga termino hit paggamit',
+
+'exif-copyrighted-false' => 'Dominyo panpubliko',
+
+'exif-unknowndate' => 'Waray kasabti an petsa',
+
+'exif-orientation-1' => 'Normal',
'exif-exposureprogram-1' => 'Mano-mano',
'exif-subjectdistance-value' => '$1 ka mga metro',
'exif-meteringmode-0' => 'Waray kasabti',
+'exif-meteringmode-255' => 'iba',
'exif-lightsource-0' => 'Waray kasabti',
'exif-lightsource-9' => 'Maupay nga panahon',
'exif-gaincontrol-0' => 'Waray',
+'exif-contrast-0' => 'Normal',
'exif-contrast-1' => 'Mahumok',
'exif-contrast-2' => 'Matig-a',
+'exif-saturation-0' => 'Normal',
+
+'exif-sharpness-0' => 'Normal',
'exif-sharpness-1' => 'Mahumok',
'exif-sharpness-2' => 'Matig-a',
'exif-subjectdistancerange-0' => 'Waray kasabti',
'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-2' => 'Harani nga pagkita',
+'exif-subjectdistancerange-3' => 'Harayo nga pagkita',
# Pseudotags used for GPSAltitudeRef
'exif-gpsaltitude-above-sealevel' => '$1 {{PLURAL:$1|metro|mga metro}} bawbaw han katupngan ha dagat',
'exif-objectcycle-a' => 'Aga la',
'exif-objectcycle-p' => 'Gab-i la',
+'exif-objectcycle-b' => 'Pareho pan-aga ngan pan-gab-i',
# Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
'exif-gpsdirection-t' => 'Tinood nga direksyon',
+'exif-ycbcrpositioning-1' => 'Nakabutnga',
+
+'exif-dc-contributor' => 'Mga nag-ámot',
'exif-dc-date' => '(Mga) petsa',
+'exif-dc-relation' => 'Nahisumpay nga medya',
'exif-dc-rights' => 'Mga katungod',
+'exif-dc-source' => 'Tinikangan nga medya',
+'exif-dc-type' => 'Klase nga medya',
'exif-rating-rejected' => 'Waray karawta',
+'exif-isospeedratings-overflow' => 'Lapos han 65535',
+
'exif-iimcategory-ace' => 'mga arte, kultura ngan panlibang',
'exif-iimcategory-clj' => 'Krimen ngan balaod',
'exif-iimcategory-fin' => 'Ekonomiya ngan negosyo',
'exif-iimcategory-war' => 'Gera, samok ngan diri namumurayawan',
'exif-iimcategory-wea' => 'panahon',
+'exif-urgency-normal' => 'Normal ($1)',
+'exif-urgency-low' => 'Hamubo ($1)',
+'exif-urgency-high' => 'Hataas ($1)',
+
# External editor support
'edit-externally' => 'Igliwat ini nga fayl gamit han gawas nga aplikasyon',
'edit-externally-help' => '(Kitaa an [//www.mediawiki.org/wiki/Manual:External_editors mga pagtutdo hin pag-ayad] para han dugang nga pananabutan)',
'monthsall' => 'ngatanan',
'limitall' => 'ngatanan',
+# E-mail address confirmation
+'confirmemail' => 'Igkompirma an e-mail address',
+'confirmemail_sent' => 'Ginpadara an kompirmasyon han e-mail.',
+'confirmemail_needlogin' => 'Kinahanglanon mo hin $1 para makakompirma han imo e-mail address.',
+'confirmemail_loggedin' => 'Ginkompirma na yana an imo e-mail address',
+'confirmemail_error' => 'Mayda diri asya nga nahitabo ha pagtipig ha imo kompirmasyon.',
+'confirmemail_subject' => '{{SITENAME}} kompirmasyon han e-mail address',
+
+# Scary transclusion
+'scarytranscludetoolong' => '[Hala hin duro an URL]',
+
# Delete conflict
+'deletedwhileediting' => "'''Pahimatngon''': Ini nga pakli in ginpara kahuman nim magtikang pagliwat!",
'recreate' => 'Himo-a utro',
# action=purge
# action=watch/unwatch
'confirm-watch-button' => 'OK',
+'confirm-watch-top' => 'Dudugngon ini nga pakli ngadto han imo talaan hin ginbibinantayan?',
'confirm-unwatch-button' => 'OK',
+'confirm-unwatch-top' => 'Tatanggalon ini nga pakli tikang han imo tala hin binabantayan?',
# Multipage image navigation
'imgmultipageprev' => '← naha-una nga pakli',
'imgmultigoto' => 'Pakadto ha pakli $1',
# Table pager
+'ascending_abbrev' => 'pasaka',
+'descending_abbrev' => 'paubos',
'table_pager_next' => 'Sunod nga pakli',
'table_pager_prev' => 'Naha-una nga pakli',
'table_pager_first' => 'Una nga pakli',
'table_pager_limit_submit' => 'Kadto-a',
'table_pager_empty' => 'Waray mga resulta',
+# Auto-summaries
+'autosumm-blank' => 'Blankoha an pakli',
+'autosumm-replace' => 'Ginsaliwanan an sulod hin "$1"',
+'autoredircomment' => 'Ginredirecta an pakli ngada ha [[$1]]',
+'autosumm-new' => 'Nahimo an pakli nga may "$1"',
+
# Size units
'size-bytes' => '$1 nga B',
'size-kilobytes' => '$1 nga KB',
'livepreview-ready' => 'Ginkakarga. . . Pag-andam!',
# Watchlist editor
+'watchlistedit-numitems' => 'An imo talaan hin binabantayan hin may sulod nga {{PLURAL:$1|1 ka titulo|$1 ka mga titulo}}, diri lakip an mga pakli nga hiruhimangraw.',
+'watchlistedit-noitems' => 'An imo talaan han binabantayan in waray sulod nga mga titulo.',
+'watchlistedit-normal-title' => 'Igliwat an talaan han binabantayan',
+'watchlistedit-normal-legend' => 'Igtanggal an mga titulo tikang ha talaan hit binabantayan',
'watchlistedit-normal-submit' => 'Igtanggal an mga titulo',
+'watchlistedit-raw-title' => 'Igliwat an hilaw nga talaan han binabantayan',
+'watchlistedit-raw-legend' => 'Igliwat an hilaw nga talaan han binabantayan',
'watchlistedit-raw-titles' => 'Mga titulo:',
+'watchlistedit-raw-submit' => 'Igpayana an talaan han binabantayan',
+'watchlistedit-raw-done' => 'Ginpayana an imo talaan han barantayon.',
+'watchlistedit-raw-added' => '{{PLURAL:$1|1 nga titulo|$1 nga mga titulo}} in gindugang:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|1 nga titulo|$1 nga mga titulo}} in gintanggal:',
# Watchlist editing tools
'watchlisttools-view' => 'Kitaa an mga nanginginlabot nga mga pagbabag-o',
# Special:Version
'version' => 'Bersyon',
+'version-specialpages' => 'Mga pinaurog nga pakli',
+'version-parserhooks' => 'Mga kawil parser',
+'version-variables' => 'Mga variable',
+'version-antispam' => 'Pamugong hin spam',
'version-skins' => 'Mga panit',
+'version-other' => 'iba',
+'version-mediahandlers' => 'Mga nakapot han medya',
+'version-hooks' => 'Mga kawil',
+'version-hook-name' => 'Ngaran han kawil',
'version-version' => '(Bersion $1)',
'version-license' => 'Lisensya',
+'version-poweredby-credits' => "Ini nga wiki in pinapaandar han '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
+'version-poweredby-others' => 'mga iba',
'version-software-product' => 'Produkto',
'version-software-version' => 'Bersyon',
+'version-entrypoints' => 'Surudlan nga mga URL',
+'version-entrypoints-header-entrypoint' => 'Surudlan',
+'version-entrypoints-header-url' => 'URL',
# Special:FilePath
'filepath' => 'Aragian han paypay',
'filepath-submit' => 'Kadto-a',
# Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Pamiling hin nadoble nga mga paypay',
+'fileduplicatesearch-legend' => 'Pamiling hin nadoble',
+'fileduplicatesearch-filename' => 'Ngaran han paypay:',
'fileduplicatesearch-submit' => 'Pamilnga',
-'fileduplicatesearch-noresults' => 'Waray nabilngan nga paypay nga an ngaran in "$".',
+'fileduplicatesearch-noresults' => 'Waray nabilngan nga paypay nga an ngaran in "$1".',
# Special:SpecialPages
'specialpages' => 'Mga pinaurog nga pakli',
+'specialpages-group-maintenance' => 'Mga sumat han pagmintinar',
+'specialpages-group-other' => 'Mga iba nga pinaurog nga pakli',
'specialpages-group-login' => 'Magpalista nga masakob / paghimo hin bag-o nga akawnt',
'specialpages-group-users' => 'Mga gumaramit ngan mga katungod',
'specialpages-group-highuse' => 'Mga pakli nga damo nagamit',
'dberr-header' => 'Ini nga wiki mayda problema',
# HTML forms
+'htmlform-submit' => 'Isumite',
'htmlform-reset' => 'Igbalik an mga pinamalyuan',
'htmlform-selectorother-other' => 'iba',
# New logging system
+'revdelete-content-hid' => 'sulod nakatago',
+'revdelete-summary-hid' => 'nakatago an dalikyat nga sumat han pagliwat',
+'revdelete-uname-hid' => 'nakatago an agnay-hit-gumaramit',
'logentry-newusers-newusers' => '$1 in naghimo hin gumaramit nga akawnt',
'logentry-newusers-create' => '$1 in naghimo hin gumaramit nga akawnt',
'logentry-newusers-create2' => '$1 in naghimo hin gumaramit nga akawnt $3',
'newuserlog-byemail' => 'Ginpadangat an tigaman-pagsulod pinaagi han e-mail',
# Feedback
+'feedback-subject' => 'Himangrawon:',
+'feedback-message' => 'Mensahe:',
+'feedback-cancel' => 'Pasagdi',
+'feedback-error2' => 'Sayop: Pakyas an pagliwat',
'feedback-close' => 'Human na.',
# Search suggestions
'api-error-badaccess-groups' => 'Diri ka gintutugotan pagkarga paigbaw ha dinhi nga wiki.',
'api-error-badtoken' => 'Sayop ha sulod: Maraot nga token.',
'api-error-copyuploaddisabled' => 'Pagkarga paigbaw pinaagi han URL in diri mahihimo ha dinhi nga serbidor.',
+'api-error-duplicate-archive-popup-title' => 'An nagdodoble {{PLURAL:$1|nga paypay|nga mga paypay}} in napara na.',
+'api-error-duplicate-popup-title' => 'Nadoble {{PLURAL:$1|nga paypay|nga mga paypay}}.',
+'api-error-empty-file' => 'An paypay nga isinumite nimo in waray sulod.',
+'api-error-emptypage' => 'Naghihimo hin bag-o, diri gintutugotan an waray sulod nga mga pakli.',
'api-error-filename-tooshort' => 'An ngaran han paypay in halipot hin duro.',
'api-error-filetype-banned' => 'Diri gintutugotan ini nga klase nga paypay.',
'api-error-filetype-missing' => 'Ini nga ngaran han paypay in nawawad-an hin ekstensyon.',
'api-error-http' => 'Sayop ha sulod: Diri nakakasumpay ha serbidor.',
'api-error-illegal-filename' => 'Diri gintutugotan an ngaran-han-paypay.',
+'api-error-mustbeloggedin' => 'Diri ka nakalog-in para makapagkarga-pasaka hin mga paypay.',
+'api-error-mustbeposted' => 'Sayop ha sulod: Iton paalayon in nagkikinahanglan hin HTTP POST.',
'api-error-overwrite' => 'Pagsasapaw in aada nga paypay in diri gintutugotan.',
'api-error-stashfailed' => 'Sayop ha sulod: An serbidor in waray makatipig han temporaryo nga paypay.',
'api-error-timeout' => 'An serbidor in diri nabaton ha sulod han ginaasahan nga oras.',
'qbbrowse' => '浏览',
'qbedit' => '编辑',
'qbpageoptions' => '迭只页面',
-'qbpageinfo' => '上下文',
'qbmyoptions' => '我个选项',
'qbspecialpages' => '特殊页面',
'faq' => 'FAQs',
'qbbrowse' => 'Гүүһәд хәләх',
'qbedit' => 'Чиклх',
'qbpageoptions' => 'Тер халх',
-'qbpageinfo' => 'Халхин туск',
'qbmyoptions' => 'Тана халхс',
'qbspecialpages' => 'Көдлхнә халхс',
'faq' => 'Юм би',
'qbfind' => 'დოგორი',
'qbedit' => 'რედაქტირება',
'qbpageoptions' => 'თე ხასჷლა',
-'qbpageinfo' => 'კონტექსტი',
'qbmyoptions' => 'ჩქიმი ხასჷლეფი',
'qbspecialpages' => 'გჷშაკერძაფილი ხასჷლეფი',
'faq' => 'ბხშირი კითხვეფი',
'note' => "'''באמערקונג:'''",
'previewnote' => "'''געדענקט אז דאס איז נאָר אין אַ פֿאָרויסיקע ווייזונג.'''
אייערע ענדערונגען זענען נאָך נישט געהיט!",
-'continue-editing' => 'רע×\93×\90ק×\98×\99ר×\9f ×\95×\95ײַ×\98ער',
+'continue-editing' => '×\90ר×\99×\91ער צ×\95×\9d רע×\93×\90ק×\98×\99ר×\9f פֿע×\9c×\93',
'previewconflict' => 'די פֿאראויסיגע ווייזונג רעפלעקטירט דעם טעקסט און דער אויבערשטע טעקסט ענדערונג אָפטיילונג וויאזוי דאס וועט אויסזען אויב וועט איר דאס אָפהיטן.',
'session_fail_preview' => "'''אנטשולדיגט! מען האט נישט געקענט פראצעסירן אייער ענדערונג צוליב א פארלוסט פון סעסיע דאטע. ביטע פרובירט נאכאמאל. אויב ס'ארבעט נאך אלס ניט, פרובירט [[Special:UserLogout|ארויסלאגירן]] און זיך צוריק אריינלאגירן.",
'session_fail_preview_html' => "''''''אַנטשולדיקט! מיר קענען נישט פּראָצעסירן אײַער ענדערונג צוליב א פֿאַרלוסט פֿון סעסיע דאַטע.''''''
'shared-repo-from' => 'פֿון $1',
'shared-repo' => 'א געמיינזאַמער זאַפאַס',
'shared-repo-name-wikimediacommons' => 'וויקימעדיע קאמאנס',
-'upload-disallowed-here' => '×\9c×\99×\99×\93ער ×§×¢× ×\98 ×\90×\99ר × ×\99ש×\98 ×\90×\99×\91ערשר×\99×\99×\91×\9f ×\93×\90ס ×\91×\99×\9c×\93.',
+'upload-disallowed-here' => '×\90×\99ר ×§×¢× ×\98 × ×\99ש×\98 ×\90×\99×\91ערשר×\99×\99×\91×\9f ×\93×\99 ×\98עקע.',
# File reversion
'filerevert' => 'צוריקדרייען $1',
'filedelete-success' => "'''$1''' איז געווען אויסגעמעקט.",
'filedelete-success-old' => "די ווערסיע פֿון '''[[Media:$1|$1]]''' פֿון $3, $2 איז געווארן אויסגעמעקט.",
'filedelete-nofile' => "'''$1''' עקזיסטירט נישט.",
+'filedelete-nofile-old' => "נישט פאראן קיין ארכיווירטע ווערסיע פון '''$1''' מיט די ספעציפירטע אייגנקייטן.",
'filedelete-otherreason' => 'אנדער/נאך א סיבה:',
'filedelete-reason-otherlist' => 'אַנדער אורזאַך',
'filedelete-reason-dropdown' => '*אַלגעמיינע אויסמעקן סיבות
# General errors
'error' => '错误',
'databaseerror' => '数据库错误',
-'dberrortext' => '发生资料库查询语法错误。
-å\8f¯è\83½æ\98¯ç\94±äº\8e软ä½\93自身的错误所引起。
-最后一次资料库查询指令是:
+'dberrortext' => '发生数据库查询语法错误。
+å\8f¯è\83½æ\98¯ç\94±äº\8e软件自身的错误所引起。
+最后一次数据库查询指令是:
<blockquote><code>$1</code></blockquote>
-来自于函数 "<code>$2</code>"。
-数据库返回错误 "<samp>$3: $4</samp>"。',
+来自于函数“<code>$2</code>”。
+数据库返回错误“<samp>$3: $4</samp>”。',
'dberrortextcl' => '发生了数据库查询语法错误。最后一次数据库查询指令是:
“$1”
来自函数“$2”内。数据库返回错误“$3: $4”。',
'updated' => '(已更新)',
'note' => "'''注意:'''",
'previewnote' => "'''请记住这仅为预览。'''您的更改还未保存!",
-'continue-editing' => '继续编辑',
+'continue-editing' => '往编辑框',
'previewconflict' => '这个预览显示了上面文字编辑区中的内容。它将在你选择保存后出现。',
'session_fail_preview' => "'''抱歉!由于会话数据丢失,我们不能处理你的编辑。'''请重试。如果再次失败,请尝试[[Special:UserLogout|退出]]后重新登录。",
'session_fail_preview_html' => "'''抱歉!我们不能处理你在进程数据丢失时的编辑。'''
'shared-repo-from' => '出自$1',
'shared-repo' => '一个共用文件库',
'shared-repo-name-wikimediacommons' => '维基共享资源',
-'upload-disallowed-here' => '您不可以覆盖此图像',
+'upload-disallowed-here' => '您不可以覆盖此文件。',
# File reversion
'filerevert' => '恢复$1',
'pageinfo-authors' => '不同编者总计',
'pageinfo-recent-edits' => '最近的编辑数($1内)',
'pageinfo-recent-authors' => '最近的不同编者数',
-'pageinfo-magic-words' => '魔术字 ($1)',
-'pageinfo-hidden-categories' => '隐藏分类 ($1)',
-'pageinfo-templates' => '使用的模板 ($1)',
+'pageinfo-magic-words' => '魔术字($1)',
+'pageinfo-hidden-categories' => '隐藏分类($1)',
+'pageinfo-templates' => '使用的模板($1)',
+'pageinfo-toolboxlink' => '页面信息',
# Skin names
'skinname-standard' => '标准',
'databaseerror' => '資料庫錯誤',
'dberrortext' => '發生資料庫查詢語法錯誤。
可能是由於軟體自身的錯誤所引起。
-最後一次資料庫查詢指令是:
+最後一次資料庫查詢指令是:
<blockquote><code>$1</code></blockquote>
-來自於函數 "<code>$2</code>"。
-數據庫返回錯誤 "<samp>$3: $4</samp>"。',
+來自於函數“<code>$2</code>”。
+資料庫返回錯誤“<samp>$3: $4</samp>”。',
'dberrortextcl' => '發生資料庫查詢語法錯誤。
最後一次的資料庫查詢是:
「$1」
'updated' => '(已更新)',
'note' => "'''注意:'''",
'previewnote' => "'''請記住這只是預覽,內容尚未儲存!'''",
-'continue-editing' => '繼續編輯',
+'continue-editing' => '往編輯框',
'previewconflict' => '這個預覽顯示了上面文字編輯區中的內容。它將在{{GENDER:|你|妳|你}}選擇保存後出現。',
'session_fail_preview' => "'''很抱歉!由於部份資料遺失,我們無法處理您的編輯。'''
請再試一次。
'shared-repo-from' => '出自$1',
'shared-repo' => '一個共用檔案庫',
'shared-repo-name-wikimediacommons' => '維基共享資源',
-'upload-disallowed-here' => '您不可以覆蓋此圖像。',
+'upload-disallowed-here' => '您不可以覆蓋此檔案。',
# File reversion
'filerevert' => '恢復$1',
'pageinfo-lasttime' => '最新編輯日期',
'pageinfo-edits' => '編輯總次數',
'pageinfo-authors' => '作者總數',
-'pageinfo-recent-edits' => '最近編輯次數 (過去 $1 內)',
+'pageinfo-recent-edits' => '最近編輯次數 (過去$1內)',
'pageinfo-recent-authors' => '最近作者數目',
-'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}} ( $1 )',
-'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}} ( $1 )',
-'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}} ( $1 )',
+'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}}($1)',
+'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}}($1)',
+'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}}($1)',
'pageinfo-toolboxlink' => '頁面資訊',
+'pageinfo-redirectsto' => '重定向到',
+'pageinfo-redirectsto-info' => '資訊',
+'pageinfo-contentpage' => '計算為內容頁',
+'pageinfo-contentpage-yes' => '是',
+'pageinfo-protect-cascading' => '從此開始連鎖保護',
+'pageinfo-protect-cascading-yes' => '是',
+'pageinfo-protect-cascading-from' => '從此連鎖保護',
# Skin names
'skinname-standard' => '標準',
"protected=\access protected" \
"public=\access public" \
"copyright=\note" \
- "license=\note"
+ "license=\note" \
+ "codeCoverageIgnore="
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
*.PHP5 \
*.M \
*.MM \
- *.PY
+ *.PY \
+ *.txt \
+ README
RECURSIVE = YES
EXCLUDE_SYMLINKS = YES
EXCLUDE_PATTERNS = LocalSettings.php AdminSettings.php StartProfiler.php .svn */.git/* {{EXCLUDE_PATTERNS}}
importDump.php
XML dump importer
-
+
importImages.php
Import images into the wiki
-
+
importTextFile.php
Import the contents of a text file into a wiki page
moveBatch.php
- Move a batch of pages
+ Move a batch of pages
namespaceDupes.php
Check articles name to see if they conflict with new/existing namespaces
-- Adds a user,timestamp index to the archive table
-- Used for browsing deleted contributions and renames
-ALTER TABLE /*$wgDBprefix*/archive
+ALTER TABLE /*$wgDBprefix*/archive
ADD INDEX usertext_timestamp ( ar_user_text , ar_timestamp );
---
+--
-- patch-backlinkindexes.sql
---
+--
-- Per bug 6440 / http://bugzilla.wikimedia.org/show_bug.cgi?id=6440
--
-- Improve performance of the "what links here"-type queries
---
+--
ALTER TABLE /*$wgDBprefix*/pagelinks
DROP INDEX pl_namespace,
ALTER TABLE /*$wgDBprefix*/templatelinks
DROP INDEX tl_namespace,
ADD INDEX tl_namespace(tl_namespace, tl_title, tl_from);
-
+
ALTER TABLE /*$wgDBprefix*/imagelinks
DROP INDEX il_to,
ADD INDEX il_to(il_to, il_from);
cat_files int signed NOT NULL default 0,
cat_hidden tinyint(1) unsigned NOT NULL default 0,
-
+
PRIMARY KEY (cat_id),
UNIQUE KEY (cat_title),
CREATE TABLE /*$wgDBprefix*/categorylinks (
-- Key to page_id of the page defined as a category member.
cl_from int unsigned NOT NULL default '0',
-
+
-- Name of the category.
-- This is also the page_title of the category's description page;
-- all such pages are in namespace 14 (NS_CATEGORY).
-- isn't always ideal, but collations seem to be an exciting
-- and dangerous new world in MySQL...
--
- -- Truncate so that the cl_sortkey key fits in 1000 bytes
+ -- Truncate so that the cl_sortkey key fits in 1000 bytes
-- (MyISAM 5 with server_character_set=utf8)
cl_sortkey varchar(70) binary NOT NULL default '',
-
+
-- This isn't really used at present. Provided for an optional
-- sorting method by approximate addition time.
cl_timestamp timestamp NOT NULL,
-
+
UNIQUE KEY cl_from(cl_from,cl_to),
-
+
-- This key is trouble. It's incomplete, AND it's too big
-- when collation is set to UTF-8. Bleeeacch!
KEY cl_sortkey(cl_to,cl_sortkey),
-
+
-- Not really used?
KEY cl_timestamp(cl_to,cl_timestamp)
---
+--
-- patch-categorylinksindex.sql
---
+--
-- Per bug 10280 / http://bugzilla.wikimedia.org/show_bug.cgi?id=10280
--
-- Improve enum continuation performance of the what pages belong to a category query
---
+--
ALTER TABLE /*$wgDBprefix*/categorylinks
DROP INDEX cl_sortkey,
+++ /dev/null
--- Table for holding configuration changes
-CREATE TABLE /*_*/config (
- -- Config var name
- cf_name varbinary(255) NOT NULL PRIMARY KEY,
- -- Config var value
- cf_value blob NOT NULL
-) /*$wgDBTableOptions*/;
--- Should cover *most* configuration - strings, ints, bools, etc.
-CREATE INDEX /*i*/cf_name_value ON /*_*/config (cf_name,cf_value(255));
el_from int(8) unsigned NOT NULL default '0',
el_to blob NOT NULL,
el_index blob NOT NULL,
-
+
KEY (el_from, el_to(40)),
KEY (el_to(60), el_from),
KEY (el_index(60))
-- Adding fa_deleted field for additional content suppression
-ALTER TABLE /*$wgDBprefix*/filearchive
+ALTER TABLE /*$wgDBprefix*/filearchive
ADD fa_deleted tinyint unsigned NOT NULL default '0';
-- Adding index to sort by uploader
-ALTER TABLE /*$wgDBprefix*/filearchive
+ALTER TABLE /*$wgDBprefix*/filearchive
ADD INDEX fa_user_timestamp (fa_user_text,fa_timestamp),
-- Remove useless, incomplete index
DROP INDEX fa_deleted_user;
CREATE TABLE /*$wgDBprefix*/filearchive (
-- Unique row id
fa_id int not null auto_increment,
-
+
-- Original base filename; key to image.img_name, page.page_title, etc
fa_name varchar(255) binary NOT NULL default '',
-
+
-- Filename of archived file, if an old revision
fa_archive_name varchar(255) binary default '',
-
+
-- Which storage bin (directory tree or object store) the file data
-- is stored in. Should be 'deleted' for files that have been deleted;
-- any other bin is not yet in use.
fa_storage_group varbinary(16),
-
+
-- SHA-1 of the file contents plus extension, used as a key for storage.
-- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
--
-- If NULL, the file was missing at deletion time or has been purged
-- from the archival storage.
fa_storage_key varbinary(64) default '',
-
+
-- Deletion information, if this file is deleted.
fa_deleted_user int,
fa_deleted_timestamp binary(14) default '',
fa_deleted_reason text,
-
+
-- Duped fields from image
fa_size int unsigned default '0',
fa_width int default '0',
fa_user int unsigned default '0',
fa_user_text varchar(255) binary default '',
fa_timestamp binary(14) default '',
-
+
PRIMARY KEY (fa_id),
INDEX (fa_name, fa_timestamp), -- pick out by image name
INDEX (fa_storage_group, fa_storage_key), -- pick out dupe files
--
--- hitcounter table is used to buffer page hits before they are periodically
+-- hitcounter table is used to buffer page hits before they are periodically
-- counted and added to the cur_counter column in the cur table.
-- December 2003
--
---
+--
-- image-user-index.sql
---
+--
-- Add user/timestamp index to current image versions
---
+--
ALTER TABLE /*$wgDBprefix*/image
ADD INDEX img_usertext_timestamp (img_user_text,img_timestamp);
ALTER TABLE /*$wgDBprefix*/image ADD (
-- Media type as defined by the MEDIATYPE_xxx constants
img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
-
+
-- major part of a MIME media type as defined by IANA
-- see http://www.iana.org/assignments/media-types/
img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart") NOT NULL default "unknown",
-
+
-- minor part of a MIME media type as defined by IANA
-- the minor parts are not required to adher to any standard
-- but should be consistent throughout the database
---
+--
-- patch-indexes.sql
---
+--
-- Fix up table indexes; new to stable release in November 2003
---
+--
ALTER TABLE IF EXISTS /*$wgDBprefix*/links
DROP INDEX l_from,
CREATE TABLE /*$wgDBprefix*/interwiki (
-- The interwiki prefix, (e.g. "Meatball", or the language prefix "de")
iw_prefix varchar(32) NOT NULL,
-
+
-- The URL of the wiki, with "$1" as a placeholder for an article name.
-- Any spaces in the name will be transformed to underscores before
-- insertion.
iw_url blob NOT NULL,
-
+
-- A boolean value indicating whether the wiki is in this project
-- (used, for example, to detect redirect loops)
iw_local BOOL NOT NULL,
-
+
UNIQUE KEY iw_prefix (iw_prefix)
) /*$wgDBTableOptions*/;
--- Add extra option fields to the ipblocks table, add some extra indexes,
--- convert infinity values in ipb_expiry to something that sorts better,
--- extend ipb_address and range fields, add a unique index for block conflict
+-- Add extra option fields to the ipblocks table, add some extra indexes,
+-- convert infinity values in ipb_expiry to something that sorts better,
+-- extend ipb_address and range fields, add a unique index for block conflict
-- detection.
--- Conflicts in the new unique index can be handled by creating a new
+-- Conflicts in the new unique index can be handled by creating a new
-- table and inserting into it instead of doing an ALTER TABLE.
ipb_expiry varbinary(14) NOT NULL default '',
ipb_range_start tinyblob NOT NULL,
ipb_range_end tinyblob NOT NULL,
-
+
PRIMARY KEY ipb_id (ipb_id),
UNIQUE INDEX ipb_address_unique (ipb_address(255), ipb_user, ipb_auto),
INDEX ipb_user (ipb_user),
) /*$wgDBTableOptions*/;
-INSERT IGNORE INTO /*$wgDBprefix*/ipblocks_newunique
- (ipb_id, ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp, ipb_auto, ipb_expiry, ipb_range_start, ipb_range_end, ipb_anon_only, ipb_create_account)
+INSERT IGNORE INTO /*$wgDBprefix*/ipblocks_newunique
+ (ipb_id, ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp, ipb_auto, ipb_expiry, ipb_range_start, ipb_range_end, ipb_anon_only, ipb_create_account)
SELECT ipb_id, ipb_address, ipb_user, ipb_by, ipb_reason, ipb_timestamp, ipb_auto, ipb_expiry, ipb_range_start, ipb_range_end, 0 , ipb_user=0
FROM /*$wgDBprefix*/ipblocks;
ALTER TABLE /*$wgDBprefix*/ipblocks
ADD ipb_by_text varchar(255) binary NOT NULL default '';
-UPDATE /*$wgDBprefix*/ipblocks
+UPDATE /*$wgDBprefix*/ipblocks
JOIN /*$wgDBprefix*/user ON ipb_by = user_id
SET ipb_by_text = user_name
WHERE ipb_by != 0;
\ No newline at end of file
-- Adding ipb_deleted field for hiding usernames
-ALTER TABLE /*$wgDBprefix*/ipblocks
+ALTER TABLE /*$wgDBprefix*/ipblocks
ADD ipb_deleted bool NOT NULL default 0;
-- Add the range handling fields
-ALTER TABLE /*$wgDBprefix*/ipblocks
+ALTER TABLE /*$wgDBprefix*/ipblocks
ADD ipb_range_start tinyblob NOT NULL default '',
ADD ipb_range_end tinyblob NOT NULL default '',
ADD INDEX ipb_range (ipb_range_start(8), ipb_range_end(8));
-- Initialise fields
-- Only range blocks match ipb_address LIKE '%/%', this fact is used in the code already
-UPDATE /*$wgDBprefix*/ipblocks
- SET
- ipb_range_start = LPAD(HEX(
+UPDATE /*$wgDBprefix*/ipblocks
+ SET
+ ipb_range_start = LPAD(HEX(
(SUBSTRING_INDEX(ipb_address, '.', 1) << 24)
+ (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 2), '.', -1) << 16)
+ (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 3), '.', -1) << 24)
+ (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '/', 1), '.', -1)) ), 8, '0' ),
- ipb_range_end = LPAD(HEX(
+ ipb_range_end = LPAD(HEX(
(SUBSTRING_INDEX(ipb_address, '.', 1) << 24)
+ (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 2), '.', -1) << 16)
+ (SUBSTRING_INDEX(SUBSTRING_INDEX(ipb_address, '.', 3), '.', -1) << 24)
---
+--
-- Track inline interwiki links
--
CREATE TABLE /*_*/iwlinks (
-- page_id of the referring page
iwl_from int unsigned NOT NULL default 0,
-
+
-- Interwiki prefix code of the target
iwl_prefix varbinary(20) NOT NULL default '',
-- Jobs performed by parallel apache threads or a command-line daemon
CREATE TABLE /*_*/job (
job_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
-
+
-- Command name
-- Limited to 60 to prevent key length overflow
job_cmd varbinary(60) NOT NULL default '',
CREATE TABLE /*$wgDBprefix*/langlinks (
-- page_id of the referring page
ll_from int unsigned NOT NULL default '0',
-
+
-- Language code of the target
ll_lang varbinary(20) NOT NULL default '',
CREATE TABLE /*$wgDBprefix*/links (
-- Key to the page_id of the page containing the link.
l_from int unsigned NOT NULL default '0',
-
+
-- Key to the page_id of the link target.
-- An unfortunate consequence of this is that rename
-- operations require changing the links entries for
-- all links to the moved page.
l_to int unsigned NOT NULL default '0',
-
+
UNIQUE KEY l_from(l_from,l_to),
KEY (l_to)
CREATE TABLE /*$wgDBprefix*/brokenlinks (
-- Key to the page_id of the page containing the link.
bl_from int unsigned NOT NULL default '0',
-
+
-- Text of the target page title ("namesapce:title").
-- Unfortunately this doesn't split the namespace index
-- key and therefore can't easily be joined to anything.
CREATE TABLE /*$wgDBprefix*/imagelinks (
-- Key to page_id of the page containing the image / media link.
il_from int unsigned NOT NULL default '0',
-
+
-- Filename of target image.
-- This is also the page_title of the file's description page;
-- all such pages are in namespace 6 (NS_FILE).
il_to varchar(255) binary NOT NULL default '',
-
+
UNIQUE KEY il_from(il_from,il_to),
KEY (il_to)
-- Rename the primary unique index from PRIMARY to ls_field_val
-- This is for MySQL only and is necessary only for databases which were updated
-- between MW 1.16 development revisions r50567 and r51465.
-ALTER TABLE /*_*/log_search
- DROP PRIMARY KEY,
+ALTER TABLE /*_*/log_search
+ DROP PRIMARY KEY,
ADD UNIQUE INDEX ls_field_val (ls_field,ls_value,ls_log_id);
-ALTER TABLE /*$wgDBprefix*/logging
+ALTER TABLE /*$wgDBprefix*/logging
ADD log_user_text varchar(255) binary NOT NULL default '',
ADD log_page int unsigned NULL,
CHANGE log_type log_type varbinary(32) NOT NULL,
---
+--
-- patch-logging-times-index.sql
---
+--
-- Add a very humble index on logging times
---
+--
ALTER TABLE /*$wgDBprefix*/logging
ADD INDEX times (log_timestamp);
-- action field, but only the type controls categorization.
log_type varbinary(10) NOT NULL default '',
log_action varbinary(10) NOT NULL default '',
-
+
-- Timestamp. Duh.
log_timestamp binary(14) NOT NULL default '19700101000000',
-
+
-- The user who performed this action; key to user_id
log_user int unsigned NOT NULL default 0,
-
+
-- Key to the page affected. Where a user is the target,
-- this will point to the user page.
log_namespace int NOT NULL default 0,
log_title varchar(255) binary NOT NULL default '',
-
+
-- Freeform text. Interpreted as edit history comments.
log_comment varchar(255) NOT NULL default '',
-
+
-- LF separated list of miscellaneous parameters
log_params blob NOT NULL,
ALTER TABLE /*_*/image
MODIFY COLUMN img_minor_mime varbinary(100) NOT NULL default "unknown";
-
+
ALTER TABLE /*_*/oldimage
MODIFY COLUMN oi_minor_mime varbinary(100) NOT NULL default "unknown";
-
+
INSERT INTO /*_*/updatelog(ul_key) VALUES ('mime_minor_length');
CREATE TABLE /*_*/msg_resource (
-- Resource name
mr_resource varbinary(255) NOT NULL,
- -- Language code
+ -- Language code
mr_lang varbinary(32) NOT NULL,
-- JSON blob. This is an incomplete JSON object, i.e. without the wrapping {}
mr_blob mediumblob NOT NULL,
---
+--
-- patch-oi_metadata.sql
---
+--
-- Add data to allow for direct reference to old images
-- Some re-indexing here.
-- Old images can be included into pages effeciently now.
---
+--
ALTER TABLE /*$wgDBprefix*/oldimage
DROP INDEX oi_name,
---
+--
-- oldimage-user-index.sql
---
+--
-- Add user/timestamp index to old image versions
---
+--
ALTER TABLE /*$wgDBprefix*/oldimage
ADD INDEX oi_usertext_timestamp (oi_user_text,oi_timestamp);
--
-- Create the new pagelinks table to merge links and brokenlinks data,
-- and populate it.
---
+--
-- Unlike the old links and brokenlinks, these records will not need to be
-- altered when target pages are created, deleted, or renamed. This should
-- reduce the amount of severe database frustration that happens when widely-
CREATE TABLE /*$wgDBprefix*/pagelinks (
-- Key to the page_id of the page containing the link.
pl_from int unsigned NOT NULL default '0',
-
+
-- Key to page_namespace/page_title of the target page.
-- The target page may or may not exist, and due to renames
-- and deletions may refer to different page records as time
-- goes by.
pl_namespace int NOT NULL default '0',
pl_title varchar(255) binary NOT NULL default '',
-
+
UNIQUE KEY pl_from(pl_from,pl_namespace,pl_title),
KEY (pl_namespace,pl_title)
--
--- parsercache table, for cacheing complete parsed articles
+-- parsercache table, for cacheing complete parsed articles
-- before they are imbedded in the skin.
--
---
+--
-- patch-pl-tl-il-unique-index.sql
---
+--
-- Make reorderings of UNIQUE indices UNIQUE as well
DROP INDEX /*i*/pl_namespace ON /*_*/pagelinks;
CREATE TABLE /*$wgDBprefix*/querycache (
-- A key name, generally the base name of of the special page.
qc_type varbinary(32) NOT NULL,
-
+
-- Some sort of stored value. Sizes, counts...
qc_value int unsigned NOT NULL default '0',
-
+
-- Target namespace+title
qc_namespace int NOT NULL default '0',
qc_title varchar(255) binary NOT NULL default '',
-
+
KEY (qc_type,qc_value)
) /*$wgDBTableOptions*/;
CREATE TABLE /*$wgDBprefix*/querycachetwo (
-- A key name, generally the base name of of the special page.
qcc_type varbinary(32) NOT NULL,
-
+
-- Some sort of stored value. Sizes, counts...
qcc_value int unsigned NOT NULL default '0',
-
+
-- Target namespace+title
qcc_namespace int NOT NULL default '0',
qcc_title varchar(255) binary NOT NULL default '',
-
+
-- Target namespace+title2
qcc_namespacetwo int NOT NULL default '0',
qcc_titletwo varchar(255) binary NOT NULL default '',
-- Adding rc_deleted field for revisiondelete
-- Add rc_logid to match log_id
-ALTER TABLE /*$wgDBprefix*/recentchanges
+ALTER TABLE /*$wgDBprefix*/recentchanges
ADD rc_deleted tinyint unsigned NOT NULL default '0',
ADD rc_logid int unsigned NOT NULL default '0',
ADD rc_log_type varbinary(255) NULL default NULL,
-- Primary key in recentchanges
-ALTER TABLE /*$wgDBprefix*/recentchanges
+ALTER TABLE /*$wgDBprefix*/recentchanges
ADD rc_id int NOT NULL auto_increment,
ADD PRIMARY KEY rc_id (rc_id);
-- Adding the rc_ip field for logging of IP addresses in recentchanges
-ALTER TABLE /*$wgDBprefix*/recentchanges
+ALTER TABLE /*$wgDBprefix*/recentchanges
ADD rc_ip varbinary(40) NOT NULL default '',
ADD INDEX rc_ip (rc_ip);
--
-- Create the new redirect table.
-- For each redirect, this table contains exactly one row defining its target
---
+--
CREATE TABLE /*$wgDBprefix*/redirect (
-- Key to the page_id of the redirect page
rd_from int unsigned NOT NULL default '0',
---
+--
-- Recreates the iwl_prefix index for the iwlinks table
--
CREATE UNIQUE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
rev_minor_edit tinyint unsigned NOT NULL default '0',
rev_deleted tinyint unsigned NOT NULL default '0',
-
PRIMARY KEY rev_page_id (rev_page, rev_id),
UNIQUE INDEX rev_id (rev_id),
INDEX rev_timestamp (rev_timestamp),
-- old_id int(8) unsigned NOT NULL auto_increment,
-- old_text mediumtext NOT NULL,
-- old_flags tinyblob NOT NULL,
---
+--
-- PRIMARY KEY old_id (old_id)
-- );
CREATE TABLE /*$wgDBprefix*/searchindex (
-- Key to page_id
si_page int unsigned NOT NULL,
-
+
-- Munged version of title
si_title varchar(255) NOT NULL default '',
-
+
-- Munged version of body text
si_text mediumtext NOT NULL,
-
+
UNIQUE KEY (si_page)
) ENGINE=MyISAM;
CREATE TABLE /*$wgDBprefix*/templatelinks (
-- Key to the page_id of the page containing the link.
tl_from int unsigned NOT NULL default '0',
-
+
-- Key to page_namespace/page_title of the target page.
-- The target page may or may not exist, and due to renames
-- and deletions may refer to different page records as time
-- goes by.
tl_namespace int NOT NULL default '0',
tl_title varchar(255) binary NOT NULL default '',
-
+
UNIQUE KEY tl_from(tl_from,tl_namespace,tl_title),
KEY (tl_namespace,tl_title)
-
) /*$wgDBTableOptions*/;
create table /*$wgDBprefix*/testrun (
tr_id int not null auto_increment,
-
+
tr_date char(14) binary,
tr_mw_version blob,
tr_php_version blob,
tr_db_version blob,
tr_uname blob,
-
+
primary key (tr_id)
) engine=InnoDB;
ti_run int not null,
ti_name varchar(255),
ti_success bool,
-
+
unique key (ti_run, ti_name),
key (ti_run, ti_success),
-
+
foreign key (ti_run) references /*$wgDBprefix*/testrun(tr_id)
on delete cascade
) engine=InnoDB;
--
--- Store information about newly uploaded files before they're
+-- Store information about newly uploaded files before they're
-- moved into the actual filestore
--
CREATE TABLE /*_*/uploadstash (
us_id int unsigned NOT NULL PRIMARY KEY auto_increment,
-
+
-- the user who uploaded the file.
us_user int unsigned NOT NULL,
-- the original path
us_orig_path varchar(255) NOT NULL,
-
+
-- the temporary path at which the file is actually stored
us_path varchar(255) NOT NULL,
-
+
-- which type of upload the file came from (sometimes)
us_source_type varchar(50),
-
+
-- the date/time on which the file was added
us_timestamp varbinary(14) not null,
-
+
us_status varchar(50) not null,
-- file properties from File::getPropsFromPath. these may prove unnecessary.
us_sha1 varchar(31) NOT NULL,
us_mime varchar(255),
-- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
- us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+ us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
-- image-specific properties
us_image_width int unsigned,
us_image_height int unsigned,
us_image_bits smallint unsigned
-
) /*$wgDBTableOptions*/;
-- sometimes there's a delete for all of a user's stuff.
-- Add a 'real name' field where users can specify the name they want
-- used for author attribution or other places that real names matter.
-ALTER TABLE user
+ALTER TABLE user
ADD (user_real_name varchar(255) binary NOT NULL default '');
--- Stores the groups the user has once belonged to.
+-- Stores the groups the user has once belonged to.
-- The user may still belong these groups. Check user_groups.
CREATE TABLE /*_*/user_former_groups (
-- Key to user_id
CREATE TABLE /*$wgDBprefix*/user_groups (
-- Key to user_id
ug_user int unsigned NOT NULL default '0',
-
+
-- Group names are short symbolic string keys.
-- The set of group names is open-ended, though in practice
-- only some predefined ones are likely to be used.
-- permissions of any group they're explicitly in, plus
-- the implicit '*' and 'user' groups.
ug_group varbinary(16) NOT NULL default '',
-
+
PRIMARY KEY (ug_user,ug_group),
KEY (ug_group)
) /*$wgDBTableOptions*/;
CREATE TABLE /*_*/user_properties(
-- Foreign key to user.user_id
up_user int not null,
-
+
-- Name of the option being saved. This is indexed for bulk lookup.
up_property varbinary(32) not null,
-
+
-- Property value as a string.
up_value blob
) /*$wgDBTableOptions*/;
CREATE TABLE /*$wgDBprefix*/user_rights (
-- Key to user_id
ur_user int unsigned NOT NULL,
-
+
-- Comma-separated list of permission keys
ur_rights tinyblob NOT NULL,
-
+
UNIQUE KEY ur_user (ur_user)
) /*$wgDBTableOptions*/;
array_push( $keys, $row->us_key );
}
- $this->output( 'Removing ' . count($keys) . " file(s)...\n" );
+ $this->output( 'Removing ' . count( $keys ) . " file(s)...\n" );
// this could be done some other, more direct/efficient way, but using
// UploadStash's own methods means it's less likely to fall accidentally
// out-of-date someday
$this->output( "Deleting old thumbnails...\n" );
$i = 0;
foreach ( $iterator as $file ) {
+ $i++;
if ( wfTimestamp( TS_UNIX, $tempRepo->getFileTimestamp( "$dir/$file" ) ) < $cutoff ) {
$tempRepo->quickPurge( "$dir/$file" );
}
CSSJanus is CSS parser utility designed to aid the conversion of a website's
layout from left-to-right(LTR) to right-to-left(RTL). The script was born out of
-a need to convert CSS for RTL languages when tables are not being used for layout (since tables will automatically reorder TD's in RTL).
+a need to convert CSS for RTL languages when tables are not being used for layout (since tables will automatically reorder TD's in RTL).
CSSJanus will change most of the obvious CSS property names and their values as
-well as some not-so-obvious ones (cursor, background-position %, etc...).
-The script is designed to offer flexibility to account for cases when you do
+well as some not-so-obvious ones (cursor, background-position %, etc...).
+The script is designed to offer flexibility to account for cases when you do
not want to change certain rules which exist to account for bidirectional text
display bugs, as well as situations where you may or may not want to flip annotations inside of the background url string.
-Note that you can disable CSSJanus from running on an entire class or any
+Note that you can disable CSSJanus from running on an entire class or any
rule within a class by prepending a /* @noflip */ comment before the rule(s)
you want CSSJanus to ignore.
CSSJanus itself is not always enough to make a website that works in a LTR
-language context work in a RTL language all the way, but it is a start.
+language context work in a RTL language all the way, but it is a start.
==Getting the code==
{{{
$ svn checkout http://cssjanus.googlecode.com/svn/trunk/ cssjanus
-}}}
+}}}
==Using==
--swap_left_right_in_url: Fixes "left"/"right" string within urls.
Ex: ./cssjanus.py --swap_left_right_in_url < file.css > file_rtl.css
--swap_ltr_rtl_in_url: Fixes "ltr"/"rtl" string within urls.
- Ex: ./cssjanus.py --swap_ltr_rtl_in_url < file.css > file_rtl.css
-
+ Ex: ./cssjanus.py --swap_ltr_rtl_in_url < file.css > file_rtl.css
+
If you'd like to make use of the webapp version of cssjanus, you'll need to
download the Google App Engine SDK
http://code.google.com/appengine/downloads.html
and also drop a "django" directory into this directory, with the latest svn
-from django. You should be good to go with that setup. Please let me know
+from django. You should be good to go with that setup. Please let me know
otherwise.
==Bugs, Patches==
{{{
Copyright 2008 Google Inc. All Rights Reserved.
-
+
Licensed under the Apache License, Version 2.0 (the 'License');
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
-
+
http://www.apache.org/licenses/LICENSE-2.0
-
+
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an 'AS IS' BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#!/usr/bin/hphpi -f
+#!/usr/bin/hphpi -f
<?php
define( 'MW_CONFIG_CALLBACK', 'MakeHipHop::noConfigNeeded' );
unlink( "$buildDir/source" );
}
- # With the CentOS RPMs, you just get g++44, no g++, so we have to
+ # With the CentOS RPMs, you just get g++44, no g++, so we have to
# use the environment
if ( isset( $_ENV['CXX'] ) ) {
$cxx = $_ENV['CXX'];
$cxx = 'g++';
}
- # Create a function that provides the HipHop compiler version, and
+ # Create a function that provides the HipHop compiler version, and
# doesn't exist when MediaWiki is invoked in interpreter mode.
$version = str_replace( PHP_EOL, ' ', trim( `hphp --version` ) );
file_put_contents(
$this->checkVolatileClasses( $outDir );
# Copy the generated C++ files into the source directory for cmake
- $iter = new RecursiveIteratorIterator(
+ $iter = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator( $outDir ),
RecursiveIteratorIterator::SELF_FIRST );
$sourceFiles = array();
}
# Do our own version of $HPHP_HOME/bin/run.sh, which isn't so broken.
- # HipHop's RELEASE mode seems to be stuck always on, so symbols get
- # stripped. Also we will try keeping the generated .o files instead of
+ # HipHop's RELEASE mode seems to be stuck always on, so symbols get
+ # stripped. Also we will try keeping the generated .o files instead of
# throwing away hours of CPU time every time you make a typo.
chdir( $persistentDir );
if ( $regenerateMakefile ) {
- copy( $_ENV['HPHP_HOME'] . '/bin/CMakeLists.base.txt',
+ copy( $_ENV['HPHP_HOME'] . '/bin/CMakeLists.base.txt',
"$persistentDir/CMakeLists.txt" );
if ( file_exists( "$persistentDir/CMakeCache.txt" ) ) {
$cmd = 'cmake' .
" -D CMAKE_BUILD_TYPE:string=" . wfEscapeShellArg( $GLOBALS['wgHipHopBuildType'] ) .
' -D PROGRAM_NAME:string=mediawiki-hphp';
-
+
if ( file_exists( '/usr/bin/ccache' ) ) {
$cmd .= ' -D CMAKE_CXX_COMPILER:string=ccache' .
' -D CMAKE_CXX_COMPILER_ARG1:string=' . wfEscapeShellArg( $cxx );
# Determine appropriate make concurrency
# Compilation can take a lot of memory, let's assume that that is limiting.
$procs = $this->getNumProcs();
-
+
# Run make. This is the slow step.
passthru( 'make -j' . wfEscapeShellArg( $procs ) );
$sourceBase = realpath( "$IP/.." );
}
- passthru(
+ passthru(
'cd ' . wfEscapeShellArg( $sourceBase ) . " && " .
'MW_INSTALL_PATH=' . wfEscapeShellArg( $IP ) . ' ' .
- wfEscapeShellArg(
+ wfEscapeShellArg(
"$buildDir/persistent/mediawiki-hphp",
'-c', "$thisDir/server.conf",
'-v', "Server.SourceRoot=$sourceBase",
cl_from BIGINT NOT NULL DEFAULT 0,
-- REFERENCES page(page_id) ON DELETE CASCADE,
cl_to VARCHAR(255) NOT NULL,
- -- cl_sortkey has to be at least 86 wide
+ -- cl_sortkey has to be at least 86 wide
-- in order to be compatible with the old MySQL schema from MW 1.10
--cl_sortkey VARCHAR(86),
cl_sortkey VARCHAR(230) FOR BIT DATA NOT NULL ,
CREATE TABLE user_properties (
-- Foreign key to user.user_id
up_user BIGINT NOT NULL,
-
+
-- Name of the option being saved. This is indexed for bulk lookup.
up_property VARCHAR(32) FOR BIT DATA NOT NULL,
-
+
-- Property value as a string.
up_value CLOB(64K) INLINE LENGTH 4096
);
-- This is read and executed by the install script; you should
-- not have to run it by itself unless doing a manual install.
--- Notes:
+-- Notes:
-- * DB2 will convert all table and column names to all caps internally.
-- * DB2 has a 32k limit on SQL filesize, so it may be necessary
-- to split this into two files soon.
-- REFERENCES page (page_id) ON DELETE CASCADE,
pp_propname VARCHAR(255) NOT NULL,
pp_value CLOB(64K) INLINE LENGTH 4096 NOT NULL,
- PRIMARY KEY (pp_page, pp_propname)
+ PRIMARY KEY (pp_page, pp_propname)
);
CREATE INDEX page_props_propname
ON page_props (pp_propname);
pl_namespace SMALLINT NOT NULL,
pl_title VARCHAR(255) NOT NULL
);
-CREATE UNIQUE INDEX pagelink_unique
+CREATE UNIQUE INDEX pagelink_unique
ON pagelinks (pl_from, pl_namespace, pl_title);
cl_from BIGINT NOT NULL DEFAULT 0,
-- REFERENCES page(page_id) ON DELETE CASCADE,
cl_to VARCHAR(255) NOT NULL,
- -- cl_sortkey has to be at least 86 wide
+ -- cl_sortkey has to be at least 86 wide
-- in order to be compatible with the old MySQL schema from MW 1.10
--cl_sortkey VARCHAR(86),
cl_sortkey VARCHAR(230) FOR BIT DATA NOT NULL,
);
CREATE INDEX ipb_address
ON ipblocks (ipb_address);
-CREATE INDEX ipb_user
+CREATE INDEX ipb_user
ON ipblocks (ipb_user);
CREATE INDEX ipb_range
ON ipblocks (ipb_range_start, ipb_range_end);
rc_log_type VARCHAR(255),
rc_log_action VARCHAR(255),
rc_params CLOB(64K) INLINE LENGTH 4096
-
);
CREATE INDEX rc_timestamp
ON recentchanges (rc_timestamp);
--
--- Store information about newly uploaded files before they're
+-- Store information about newly uploaded files before they're
-- moved into the actual filestore
--
CREATE TABLE uploadstash (
--- Stores the groups the user has once belonged to.
+-- Stores the groups the user has once belonged to.
-- The user may still belong these groups. Check user_groups.
CREATE TABLE user_former_groups (
ufg_user BIGINT NOT NULL DEFAULT 0,
);
CREATE UNIQUE INDEX ufg_user_group
ON user_former_groups (ufg_user, ufg_group);
-
-
-
--- Table for holding configuration changes
-CREATE TABLE config (
- cf_name VARCHAR(255) NOT NULL
- PRIMARY KEY,
- cf_value CLOB(64K) INLINE LENGTH 4096 NOT NULL
-);
-
<dir> : Path to the directory containing images to be imported
Options:
---extensions=<exts> Comma-separated list of allowable extensions, defaults to \$wgFileExtensions
+--extensions=<exts> Comma-separated list of allowable extensions, defaults to \$wgFileExtensions
--overwrite Overwrite existing images with the same name (default is to skip them)
--limit=<num> Limit the number of images to process. Ignored or skipped images are not counted.
--from=<name> Ignore all files until the one with the given name. Useful for resuming
'backlinksubtitle',
'prefs-registration-date-time',
'prefs-memberingroups-type',
+ 'userrights-groupsmember-type',
'shared-repo-name-wikimediacommons',
'usermessage-template',
'filepage.css',
'saveusergroups',
'userrights-groupsmember',
'userrights-groupsmember-auto',
+ 'userrights-groupsmember-type',
'userrights-groups-help',
'userrights-reason',
'userrights-no-interwiki',
'pageinfo-default-sort',
'pageinfo-length',
'pageinfo-article-id',
+ 'pageinfo-language',
'pageinfo-robot-policy',
'pageinfo-robot-index',
'pageinfo-robot-noindex',
'pageinfo-templates',
'pageinfo-footer',
'pageinfo-toolboxlink',
+ 'pageinfo-redirectsto',
+ 'pageinfo-redirectsto-info',
+ 'pageinfo-contentpage',
+ 'pageinfo-contentpage-yes',
+ 'pageinfo-protect-cascading',
+ 'pageinfo-protect-cascading-yes',
+ 'pageinfo-protect-cascading-from',
),
'skin' => array(
'skinname-standard',
'version-license',
'version-poweredby-credits',
'version-poweredby-others',
+ 'version-credits-summary',
'version-license-info',
'version-software',
'version-software-product',
CREATE INDEX /*$wgDBprefix*/user_group_id ON /*$wgDBprefix*/user_newtalk([user_id]);
CREATE INDEX /*$wgDBprefix*/user_ip ON /*$wgDBprefix*/user_newtalk(user_ip);
---
+--
-- User preferences and other fun stuff
-- replaces old user.user_options BLOB
---
+--
CREATE TABLE /*$wgDBprefix*/user_properties (
up_user INT NOT NULL,
up_property NVARCHAR(32) NOT NULL,
-- The fields generally correspond to the page, revision, and text
-- fields, with several caveats.
-- Cannot reasonably create views on this table, due to the presence of TEXT
--- columns.
+-- columns.
CREATE TABLE /*$wgDBprefix*/archive (
ar_namespace SMALLINT NOT NULL DEFAULT 0,
ar_title NVARCHAR(255) NOT NULL DEFAULT '',
CREATE INDEX /*$wgDBprefix*/cl_timestamp ON /*$wgDBprefix*/categorylinks(cl_to,cl_timestamp);
--;
---
+--
-- Track all existing categories. Something is a category if 1) it has an en-
-- try somewhere in categorylinks, or 2) it once did. Categories might not
-- have corresponding pages, so they need to be tracked separately.
vt_tag varchar(255) NOT NULL PRIMARY KEY
);
---
+--
-- Table for storing localisation data
---
+--
CREATE TABLE /*$wgDBprefix*/l10n_cache (
-- language code
lc_lang NVARCHAR(32) NOT NULL,
-
+
-- cache key
lc_key NVARCHAR(255) NOT NULL,
-
+
-- Value
lc_value TEXT NOT NULL DEFAULT '',
);
-- Maximum key length ON SQL Server is 900 bytes
CREATE INDEX /*$wgDBprefix*/externallinks_index ON /*$wgDBprefix*/externallinks(el_index);
---
+--
-- Track external user accounts, if ExternalAuth is used
---
+--
CREATE TABLE /*$wgDBprefix*/external_user (
-- Foreign key to user_id
eu_local_id INT NOT NULL PRIMARY KEY,
);
CREATE UNIQUE INDEX /*$wgDBprefix*/langlinks_reverse_key ON /*$wgDBprefix*/langlinks(ll_lang,ll_title);
---
+--
-- Track inline interwiki links
---
+--
CREATE TABLE /*$wgDBprefix*/iwlinks (
-- page_id of the referring page
iwl_from INT NOT NULL DEFAULT 0,
-
+
-- Interwiki prefix code of the target
iwl_prefix NVARCHAR(20) NOT NULL DEFAULT '',
-
+
-- Title of the target, including namespace
iwl_title NVARCHAR(255) NOT NULL DEFAULT '',
);
PRIMARY KEY (ul_key)
);
--- NOTE To enable full text indexing on SQL 2008 you need to create an account FDH$MSSQLSERVER
+-- NOTE To enable full text indexing on SQL 2008 you need to create an account FDH$MSSQLSERVER
-- AND assign a password for the FDHOST process to run under
-- Once you have assigned a password to that account, you need to run the following stored procedure
-- replacing XXXXX with the password you used.
+++ /dev/null
-define mw_prefix='{$wgDBprefix}';
-
-CREATE TABLE &mw_prefix.config (
- cf_name VARCHAR2(255) NOT NULL,
- cf_value blob NOT NULL
-);
-ALTER TABLE &mw_prefix.config ADD CONSTRAINT &mw_prefix.config_pk PRIMARY KEY (cf_name);
-
ON &mw_prefix.testrun
BEGIN
SELECT testrun_tr_id_seq.NEXTVAL into :NEW.tr_id FROM dual;
-END;
+END;
CREATE TABLE /*$wgDBprefix*/testitem (
ti_run NUMBER NOT NULL REFERENCES &mw_prefix.testrun (tr_id) ON DELETE CASCADE,
);
CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin);
-CREATE TABLE &mw_prefix.config (
- cf_name VARCHAR2(255) NOT NULL,
- cf_value blob NOT NULL
-);
-ALTER TABLE &mw_prefix.config ADD CONSTRAINT &mw_prefix.config_pk PRIMARY KEY (cf_name);
--- leaving index out for now ...
-
-- do not prefix this table as it breaks parserTests
CREATE TABLE wiki_field_info_full (
table_name VARCHAR2(35) NOT NULL,
$table = 'filearchive';
$conds = array( 'fa_sha1' => '', 'fa_storage_key IS NOT NULL' );
$this->output( "Populating fa_sha1 field from fa_storage_key\n" );
- $endId = $dbw->selectField( $table, 'MAX(fa_id)', false, __METHOD__ );\r
+ $endId = $dbw->selectField( $table, 'MAX(fa_id)', false, __METHOD__ );
$batchSize = $this->mBatchSize;
$done = 0;
$i = 0;
foreach ( $res as $row ) {
+ if ( $row->fa_storage_key == '' ) {
+ // Revision was missing pre-deletion
+ continue;
+ }
$sha1 = LocalRepo::getHashFromKey( $row->fa_storage_key );
$dbw->update( $table,
array( 'fa_sha1' => $sha1 ),
+++ /dev/null
-CREATE TABLE config (
- cf_name TEXT NOT NULL PRIMARY KEY,
- cf_value TEXT NOT NULL
-);
-CREATE INDEX cf_name_value ON config (cf_name, cf_value);
\ No newline at end of file
ti_run INTEGER NOT NULL REFERENCES testrun(tr_id) ON DELETE CASCADE,
ti_name TEXT NOT NULL,
ti_success SMALLINT NOT NULL
-);
+);
CREATE UNIQUE INDEX testitem_uniq ON testitem(ti_run, ti_name);
fa_user INTEGER NULL REFERENCES mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED,
fa_user_text TEXT NOT NULL,
fa_timestamp TIMESTAMPTZ,
- fa_deleted SMALLINT NOT NULL DEFAULT 0
+ fa_deleted SMALLINT NOT NULL DEFAULT 0,
+ fa_sha1 TEXT NOT NULL DEFAULT ''
);
CREATE INDEX fa_name_time ON filearchive (fa_name, fa_timestamp);
CREATE INDEX fa_dupe ON filearchive (fa_storage_group, fa_storage_key);
CREATE INDEX fa_notime ON filearchive (fa_deleted_timestamp);
CREATE INDEX fa_nouser ON filearchive (fa_deleted_user);
+CREATE INDEX fa_sha1 ON filearchive (fa_sha1);
CREATE SEQUENCE uploadstash_us_id_seq;
CREATE TYPE media_type AS ENUM ('UNKNOWN','BITMAP','DRAWING','AUDIO','VIDEO','MULTIMEDIA','OFFICE','TEXT','EXECUTABLE','ARCHIVE');
CREATE SEQUENCE job_job_id_seq;
CREATE TABLE job (
- job_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('job_job_id_seq'),
- job_cmd TEXT NOT NULL,
- job_namespace SMALLINT NOT NULL,
- job_title TEXT NOT NULL,
- job_timestamp TIMESTAMPTZ,
- job_params TEXT NOT NULL
-);
+ job_id INTEGER NOT NULL PRIMARY KEY DEFAULT nextval('job_job_id_seq'),
+ job_cmd TEXT NOT NULL,
+ job_namespace SMALLINT NOT NULL,
+ job_title TEXT NOT NULL,
+ job_timestamp TIMESTAMPTZ,
+ job_params TEXT NOT NULL,
+ job_random INTEGER NOT NULL DEFAULT 0,
+ job_token TEXT NOT NULL DEFAULT '',
+ job_token_timestamp TIMESTAMPTZ,
+ job_sha1 TEXT NOT NULL DEFAULT ''
+);
+CREATE INDEX job_sha1 ON job (job_sha1);
+CREATE INDEX job_cmd_token ON job (job_cmd, job_token, job_random);
CREATE INDEX job_cmd_namespace_title ON job (job_cmd, job_namespace, job_title);
CREATE INDEX job_timestamp_idx ON job (job_timestamp);
md_deps TEXT NOT NULL
);
CREATE UNIQUE INDEX md_module_skin ON module_deps (md_module, md_skin);
-
-CREATE TABLE config (
- cf_name TEXT NOT NULL PRIMARY KEY,
- cf_value TEXT NOT NULL
-);
-CREATE INDEX cf_name_value ON config (cf_name, cf_value);
* @param $id int The page_id
*/
public static function fixLinksFromArticle( $id ) {
- global $wgParser, $wgContLang;
-
$page = WikiPage::newFromID( $id );
LinkCache::singleton()->clear();
return;
}
- $content = $page->getContent( REVISION::RAW );
+ $content = $page->getContent( Revision::RAW );
if ( null === false ) {
return;
}
}
// Break out if we hit the job count or wall time limits...
if ( $maxJobs && ++$n >= $maxJobs ) {
- break 2;
+ break;
}
if ( $maxTime && ( time() - $startTime ) > $maxTime ) {
- break 2;
+ break;
}
// Don't let any slaves/backups fall behind...
$group->get( $type )->waitForBackups();
}
$wholeLine = '';
- while ( ( $line = Maintenance::readconsole() ) !== false ) {
+ $newPrompt = '> ';
+ $prompt = $newPrompt;
+ while ( ( $line = Maintenance::readconsole( $prompt ) ) !== false ) {
+ if( !$line ) {
+ # User simply pressed return key
+ continue;
+ }
$done = $dbw->streamStatementEnd( $wholeLine, $line );
$wholeLine .= $line;
if ( !$done ) {
+ $wholeLine .= ' ';
+ $prompt = ' -> ';
continue;
}
if ( $useReadline ) {
- readline_add_history( $wholeLine );
+ # Delimiter is eated by streamStatementEnd, we add it
+ # up in the history (bug 37020)
+ readline_add_history( $wholeLine . $dbw->getDelimiter() );
readline_write_history( $historyFile );
}
try{
$res = $dbw->query( $wholeLine );
$this->sqlPrintResult( $res, $dbw );
+ $prompt = $newPrompt;
$wholeLine = '';
} catch (DBQueryError $e) {
- $this->error( $e, true );
+ $doDie = ! Maintenance::posix_isatty( 0 );
+ $this->error( $e, $doDie );
}
}
}
---
+--
-- Recreates the iwl_prefix for the iwlinks table
--
DROP INDEX IF EXISTS /*i*/iwl_prefix;
-- Patch that introduces fulltext search capabilities to SQLite schema
-- Requires that SQLite must be compiled with FTS3 module (comes with core amalgamation).
-- See http://sqlite.org/fts3.html for details of syntax.
--- Will fail if FTS3 is not present,
+-- Will fail if FTS3 is not present,
DROP TABLE IF EXISTS /*_*/searchindex;
CREATE VIRTUAL TABLE /*_*/searchindex USING FTS3(
-- Key to page_id
-- Munged version of title
si_title,
-
+
-- Munged version of body text
si_text
);
-- Munged version of title
si_title TEXT,
-
+
-- Munged version of body text
si_text TEXT
);
fi
if [ -z $3 ]; then
table=blobs
-else
+else
table=$3
fi
echo "CREATE DATABASE $2" | mysql -u wikiadmin -p`wikiadmin_pass` -h $1 && \
sed "s/blobs\>/$table/" blobs.sql | mysql -u wikiadmin -p`wikiadmin_pass` -h $1 $2
-
-
-- Stored as a PHP serialized array, or an empty string if there are no parameters
job_params blob NOT NULL,
- -- Random, non-unique, number used for concurrent job acquisition
+ -- Random, non-unique, number used for job acquisition
+ -- Either a simple timestamp or a totally random number (for lock concurrency)
job_random integer unsigned NOT NULL default 0,
-- Field that conveys process locks on rows via process UUIDs
) /*$wgDBTableOptions*/;
CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
--- Table for holding configuration changes
-CREATE TABLE /*_*/config (
- -- Config var name
- cf_name varbinary(255) NOT NULL PRIMARY KEY,
- -- Config var value
- cf_value blob NOT NULL
-) /*$wgDBTableOptions*/;
--- Should cover *most* configuration - strings, ints, bools, etc.
-CREATE INDEX /*i*/cf_name_value ON /*_*/config (cf_name,cf_value(255));
-
-- Holds all the sites known to the wiki.
CREATE TABLE /*_*/sites (
-- Numeric id of the site
$shared = $this->hasOption( 'doshared' );
$updates = array( 'core', 'extensions', 'stats' );
- if( !$this->hasOption('nopurge') ) {
- $updates[] = 'purge';
- }
$updater = DatabaseUpdater::newForDb( $db, $shared, $this );
$updater->doUpdates( $updates );
}
}
+ if( !$this->hasOption('nopurge') ) {
+ $updater->purgeCache();
+ }
+
$this->output( "\nDone.\n" );
}
'jquery' => array(
'scripts' => 'resources/jquery/jquery.js',
'debugRaw' => false,
+ 'targets' => array( 'desktop', 'mobile' ),
),
/* jQuery Plugins */
),
'jquery.collapsibleTabs' => array(
'scripts' => 'resources/jquery/jquery.collapsibleTabs.js',
+ 'dependencies' => 'jquery.delayedBind',
),
'jquery.color' => array(
'scripts' => 'resources/jquery/jquery.color.js',
),
'jquery.hidpi' => array(
'scripts' => 'resources/jquery/jquery.hidpi.js',
+ 'targets' => array( 'desktop', 'mobile' ),
),
'jquery.highlightText' => array(
'scripts' => 'resources/jquery/jquery.highlightText.js',
'scripts' => 'resources/mediawiki/mediawiki.js',
'debugScripts' => 'resources/mediawiki/mediawiki.log.js',
'debugRaw' => false,
+ 'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.api' => array(
'scripts' => 'resources/mediawiki.api/mediawiki.api.js',
'dependencies' => array(
'jquery.hidpi',
),
+ 'targets' => array( 'desktop', 'mobile' ),
),
'mediawiki.htmlform' => array(
'scripts' => 'resources/mediawiki/mediawiki.htmlform.js',
* @example $( 'table' ).tablesorter();
* @desc Create a simple tablesorter interface.
*
+ * @example $( 'table' ).tablesorter( { sortList: [ { 0: 'desc' }, { 1: 'asc' } ] } );
+ * @desc Create a tablesorter interface initially sorting on the first and second column.
+ *
* @option String cssHeader ( optional ) A string of the class name to be appended
* to sortable tr elements in the thead of the table. Default value:
* "header"
* tablesorter should cancel selection of the table headers text.
* Default value: true
*
+ * @option Array sortList ( optional ) An array containing objects specifying sorting.
+ * By passing more than one object, multi-sorting will be applied. Object structure:
+ * { <Integer column index>: <String 'asc' or 'desc'> }
+ * Default value: []
+ *
* @option Boolean debug ( optional ) Boolean flag indicating if tablesorter
* should display debuging information usefull for development.
*
+ * @event sortEnd.tablesorter: Triggered as soon as any sorting has been applied.
+ *
* @type jQuery
*
* @name tablesorter
}
table.tBodies[0].appendChild( fragment );
+
+ $( table ).trigger( 'sortEnd.tablesorter' );
}
/**
}
function setHeadersCss( table, $headers, list, css, msg ) {
- // Remove all header information
- $headers.removeClass( css[0] ).removeClass( css[1] );
+ // Remove all header information and reset titles to default message
+ $headers.removeClass( css[0] ).removeClass( css[1] ).attr( 'title', msg[1] );
var h = [];
$headers.each( function ( offset ) {
};
}
+ /**
+ * Converts sort objects [ { Integer: String }, ... ] to the internally used nested array
+ * structure [ [ Integer , Integer ], ... ]
+ *
+ * @param sortObjects {Array} List of sort objects.
+ * @return {Array} List of internal sort definitions.
+ */
+
+ function convertSortList( sortObjects ) {
+ var sortList = [];
+ $.each( sortObjects, function( i, sortObject ) {
+ $.each ( sortObject, function( columnIndex, order ) {
+ var orderIndex = ( order === 'desc' ) ? 1 : 0;
+ sortList.push( [columnIndex, orderIndex] );
+ } );
+ } );
+ return sortList;
+ }
+
/* Public scope */
$.tablesorter = {
// Declare and cache.
var $document, $headers, cache, config, sortOrder,
$table = $( table ),
- shiftDown = 0,
- firstTime = true;
+ shiftDown = 0;
// Quit if no tbody
if ( !table.tBodies ) {
}
$table.addClass( "jquery-tablesorter" );
+ // FIXME config should probably not be stored in the plain table node
// New config object.
table.config = {};
config = $.extend( table.config, $.tablesorter.defaultOptions, settings );
// Save the settings where they read
- $.data( table, 'tablesorter', config );
+ $.data( table, 'tablesorter', { config: config } );
// Get the CSS class names, could be done else where.
var sortCSS = [ config.cssDesc, config.cssAsc ];
// performance improvements in some browsers.
cacheRegexs();
+ // Legacy fix of .sortbottoms
+ // Wrap them inside inside a tfoot (because that's what they actually want to be) &
+ // and put the <tfoot> at the end of the <table>
+ var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
+ if ( $sortbottoms.length ) {
+ var $tfoot = $table.children( 'tfoot' );
+ if ( $tfoot.length ) {
+ $tfoot.eq(0).prepend( $sortbottoms );
+ } else {
+ $table.append( $( '<tfoot>' ).append( $sortbottoms ) );
+ }
+ }
+
+ explodeRowspans( $table );
+
+ // try to auto detect column type, and store in tables config
+ table.config.parsers = buildParserCache( table, $headers );
+
+ // initially build the cache for the tbody cells (to be able to sort initially)
+ cache = buildCache( table );
+
// Apply event handling to headers
// this is too big, perhaps break it out?
- $headers.click( function ( e ) {
+ $headers.filter( ':not(.unsortable)' ).click( function ( e ) {
if ( e.target.nodeName.toLowerCase() === 'a' ) {
// The user clicked on a link inside a table header
// Do nothing and let the default link click action continue
return true;
}
- if ( firstTime ) {
- firstTime = false;
-
- // Legacy fix of .sortbottoms
- // Wrap them inside inside a tfoot (because that's what they actually want to be) &
- // and put the <tfoot> at the end of the <table>
- var $sortbottoms = $table.find( '> tbody > tr.sortbottom' );
- if ( $sortbottoms.length ) {
- var $tfoot = $table.children( 'tfoot' );
- if ( $tfoot.length ) {
- $tfoot.eq(0).prepend( $sortbottoms );
- } else {
- $table.append( $( '<tfoot>' ).append( $sortbottoms ) );
- }
- }
-
- explodeRowspans( $table );
- // try to auto detect column type, and store in tables config
- table.config.parsers = buildParserCache( table, $headers );
- }
-
// Build the cache for the tbody cells
// to share between calculations for this sort action.
// Re-calculated each time a sort action is performed due to possiblity
return false;
}
} );
+
+ /**
+ * Sorts the table. If no sorting is specified by passing a list of sort
+ * objects, the table is sorted according to the initial sorting order.
+ * Passing an empty array will reset sorting (basically just reset the headers
+ * making the table appear unsorted).
+ *
+ * @param sortList {Array} (optional) List of sort objects.
+ */
+ $table.data( 'tablesorter' ).sort = function( sortList ) {
+
+ if ( sortList === undefined ) {
+ sortList = config.sortList;
+ } else if ( sortList.length > 0 ) {
+ sortList = convertSortList( sortList );
+ }
+
+ // re-build the cache for the tbody cells
+ cache = buildCache( table );
+
+ // set css for headers
+ setHeadersCss( table, $headers, sortList, sortCSS, sortMsg );
+
+ // sort the table and append it to the dom
+ appendToTable( table, multisort( table, sortList, cache ) );
+ };
+
+ // sort initially
+ if ( config.sortList.length > 0 ) {
+ explodeRowspans( $table );
+ config.sortList = convertSortList( config.sortList );
+ $table.data( 'tablesorter' ).sort();
+ }
+
} );
},
},
/**
- * Transform parsed structure into gender
- * Usage {{gender:[gender| mw.user object ] | masculine|feminine|neutral}}.
- * @param {Array} of nodes, [ {String|mw.User}, {String}, {String} , {String} ]
+ * Transform parsed structure according to gender.
+ * Usage {{gender:[ gender | mw.user object ] | masculine form|feminine form|neutral form}}.
+ * The first node is either a string, which can be "male" or "female",
+ * or a User object (not a username).
+ *
+ * @param {Array} of nodes, [ {String|mw.User}, {String}, {String}, {String} ]
* @return {String} selected gender form according to current language
*/
gender: function ( nodes ) {
- var gender;
- if ( nodes[0] && nodes[0].options instanceof mw.Map ){
+ var gender, forms;
+
+ if ( nodes[0] && nodes[0].options instanceof mw.Map ) {
gender = nodes[0].options.get( 'gender' );
} else {
gender = nodes[0];
}
- var forms = nodes.slice(1);
+
+ forms = nodes.slice( 1 );
+
return this.language.gender( gender, forms );
},
*/
( function ( mw, $ ) {
$( document ).ready( function ( $ ) {
- var map,
+ var map, searchboxesSelectors,
// Region where the suggestions box will appear directly below
// (using the same width). Can be a container element or the input
// itself, depending on what suits best in the environment.
$searchRegion = $( '#simpleSearch, #searchInput' ).first(),
$searchInput = $( '#searchInput' );
- // Ensure that the thing is actually present!
- if ( $searchRegion.length === 0 ) {
- // Don't try to set anything up if simpleSearch is disabled sitewide.
- // The loader code loads us if the option is present, even if we're
- // not actually enabled (anymore).
- return;
- }
-
// Compatibility map
map = {
browsers: {
return;
}
- // Placeholder text for search box
- $searchInput
- .attr( 'placeholder', mw.msg( 'searchsuggest-search' ) )
- .placeholder();
-
// General suggestions functionality for all search boxes
- $( '#searchInput, #searchInput2, #powerSearchText, #searchText' )
+ searchboxesSelectors = [
+ // Primary searchbox on every page in standard skins
+ '#searchInput',
+ // Secondary searchbox in legacy skins (LegacyTemplate::searchForm uses id "searchInput + unique id")
+ '#searchInput2',
+ // Special:Search
+ '#powerSearchText',
+ '#searchText',
+ // Generic selector for skins with multiple searchboxes (used by CologneBlue)
+ '.mw-searchInput'
+ ];
+ $( searchboxesSelectors.join(', ') )
.suggestions( {
fetch: function ( query ) {
var $el, jqXhr;
$( this ).trigger( 'keypress' );
} );
+ // Ensure that the thing is actually present!
+ if ( $searchRegion.length === 0 ) {
+ // Don't try to set anything up if simpleSearch is disabled sitewide.
+ // The loader code loads us if the option is present, even if we're
+ // not actually enabled (anymore).
+ return;
+ }
+
+ // Placeholder text for search box
+ $searchInput
+ .attr( 'placeholder', mw.msg( 'searchsuggest-search' ) )
+ .placeholder();
+
// Special suggestions functionality for skin-provided search box
$searchInput.suggestions( {
result: {
},
select: function ( $input ) {
$input.closest( 'form' ).append(
- $( '<input type="hidden"/>', {
- name: 'fulltext',
- val: '1'
- })
+ $( '<input type="hidden" name="fulltext" value="1"/>' )
);
$input.closest( 'form' ).submit();
}
} );
-}( mediaWiki, jQuery ) );
\ No newline at end of file
+}( mediaWiki, jQuery ) );
* @return mixed Parameter value or null.
*/
getParamValue: function ( param, url ) {
- url = url || document.location.href;
+ if ( url === undefined ) {
+ url = document.location.href;
+ }
// Get last match, stop at hash
var re = new RegExp( '^[^#]*[&?]' + $.escapeRE( param ) + '=([^&#]*)' ),
m = re.exec( url );
$out->addModuleStyles( 'mediawiki.legacy.oldshared' );
$out->addModuleStyles( 'skins.cologneblue' );
}
-
+
/**
* Override langlink formatting behavior not to uppercase the language names.
* See otherLanguages() in CologneBlueTemplate.
class CologneBlueTemplate extends BaseTemplate {
function execute() {
+ // Suppress warnings to prevent notices about missing indexes in $this->data
+ wfSuppressWarnings();
$this->html( 'headelement' );
echo $this->beforeContent();
$this->html( 'bodytext' );
$this->html( 'dataAfterContent' );
$this->printTrail();
echo "\n</body></html>";
+ wfRestoreWarnings();
}
-
/**
* Language/charset variant links for classic-style skins
return $this->getSkin()->getLanguage()->pipeList( $s );
}
-
+
// @fixed
function otherLanguages() {
global $wgHideInterlanguageLinks;
function pageTitleLinks() {
$s = array();
$footlinks = $this->getFooterLinks();
-
+
foreach ( $footlinks['places'] as $item ) {
$s[] = $this->data[$item];
}
-
+
return $this->getSkin()->getLanguage()->pipeList( $s );
}
}
}
+ // @fixed
function talkLink() {
$title = $this->getSkin()->getTitle();
- if ( NS_SPECIAL == $title->getNamespace() ) {
- # No discussion links for special pages
- return '';
+
+ if ( $title->getNamespace() == NS_SPECIAL ) {
+ // No discussion links for special pages
+ return "";
}
- $linkOptions = array();
-
- if ( $title->isTalkPage() ) {
- $link = $title->getSubjectPage();
- switch( $link->getNamespace() ) {
- case NS_MAIN:
- $text = wfMessage( 'articlepage' );
- break;
- case NS_USER:
- $text = wfMessage( 'userpage' );
- break;
- case NS_PROJECT:
- $text = wfMessage( 'projectpage' );
- break;
- case NS_FILE:
- $text = wfMessage( 'imagepage' );
- # Make link known if image exists, even if the desc. page doesn't.
- if ( wfFindFile( $link ) )
- $linkOptions[] = 'known';
- break;
- case NS_MEDIAWIKI:
- $text = wfMessage( 'mediawikipage' );
- break;
- case NS_TEMPLATE:
- $text = wfMessage( 'templatepage' );
- break;
- case NS_HELP:
- $text = wfMessage( 'viewhelppage' );
- break;
- case NS_CATEGORY:
- $text = wfMessage( 'categorypage' );
- break;
- default:
- $text = wfMessage( 'articlepage' );
- }
+ $companionTitle = $title->isTalkPage() ? $title->getSubjectPage() : $title->getTalkPage();
+ $companionNamespace = $companionTitle->getNamespace();
+
+ // TODO these messages appear to only be used by CologneBlue and legacy skins,
+ // kill and replace with something more sensibly named?
+ $nsToMessage = array(
+ NS_MAIN => 'articlepage',
+ NS_USER => 'userpage',
+ NS_PROJECT => 'projectpage',
+ NS_FILE => 'imagepage',
+ NS_MEDIAWIKI => 'mediawikipage',
+ NS_TEMPLATE => 'templatepage',
+ NS_HELP => 'viewhelppage',
+ NS_CATEGORY => 'categorypage',
+ NS_FILE => 'imagepage',
+ );
+
+ // Find out the message to use for link text. Use either the array above or,
+ // for non-talk pages, a generic "discuss this" message.
+ // Default is the same as for main namespace.
+ if ( isset( $nsToMessage[$companionNamespace] ) ) {
+ $message = $nsToMessage[$companionNamespace];
} else {
- $link = $title->getTalkPage();
- $text = wfMessage( 'talkpage' );
+ $message = $companionTitle->isTalkPage() ? 'talkpage' : 'articlepage';
}
- $s = Linker::link( $link, $text->text(), array(), array(), $linkOptions );
+ // Obviously this can't be reasonable and just return the key for talk namespace, only for content ones.
+ // Thus we have to mangle it in exactly the same way SkinTemplate does. (bug 40805)
+ $key = $companionTitle->getNamespaceKey( '' );
+ if ( $companionTitle->isTalkPage() ) {
+ $key = ( $key == 'main' ? 'talk' : $key . "_talk" );
+ }
- return $s;
+ // Use the regular navigational link, but replace its text. Everything else stays unmodified.
+ $namespacesLinks = $this->data['content_navigation']['namespaces'];
+ $link = $this->processNavlinkForDocument( $namespacesLinks[ $key ] );
+ $link['text'] = wfMessage( $message )->text();
+
+ return $this->makeListItem( $message, $link, array( 'tag' => 'span' ) );
+ }
+
+ /**
+ * Takes a navigational link generated by SkinTemplate in whichever way
+ * and mangles attributes unsuitable for repeated use. In particular, this modifies the ids
+ * and removes the accesskeys. This is necessary to be able to use the same navlink twice,
+ * e.g. in sidebar and in footer.
+ *
+ * @param $navlink array Navigational link generated by SkinTemplate
+ * @param $idPrefix mixed Prefix to add to id of this navlink. If false, id is removed entirely. Default is 'cb-'.
+ */
+ function processNavlinkForDocument( $navlink, $idPrefix='cb-' ) {
+ if ( $navlink['id'] ) {
+ $navlink['single-id'] = $navlink['id']; // to allow for tooltip generation
+ $navlink['tooltiponly'] = true; // but no accesskeys
+
+ // mangle or remove the id
+ if ( $idPrefix === false ) {
+ unset( $navlink['id'] );
+ } else {
+ $navlink['id'] = $idPrefix . $navlink['id'];
+ }
+ }
+
+ return $navlink;
}
-
+
/**
* @return string
- *
+ *
* @fixed
*/
function beforeContent() {
</a>
</p>
<p id="sitesub"><?php echo wfMessage( 'sitesubtitle' )->escaped() ?></p>
-
<div id="toplinks">
<p id="syslinks"><?php echo $this->sysLinks() ?></p>
<p id="variantlinks"><?php echo $this->variantLinks() ?></p>
<?php
$s = ob_get_contents();
ob_end_clean();
-
+
return $s;
}
/**
* @return string
- *
+ *
* @fixed
*/
function afterContent() {
// Page-related links
echo $this->bottomLinks();
echo "\n<br />";
-
+
// Footer and second searchbox
echo $this->getSkin()->getLanguage()->pipeList( array(
$this->getSkin()->mainPageLink(),
$this->searchForm( 'footer' )
) );
echo "\n<br />";
-
+
// Standard footer info
$footlinks = $this->getFooterLinks();
if ( $footlinks['info'] ) {
/**
* @return string
- *
+ *
* @fixed
*/
function sysLinks() {
return $this->getSkin()->getLanguage()->pipeList( $s );
}
-
-
-
/**
* @param $heading string
* @return string
- *
+ *
* @fixed
*/
function menuHead( $heading ) {
* @access private
*
* @return string
- *
+ *
* @fixed
*/
function quickBar(){
$s = "\n<div id='quickbar'>";
$sep = "<br />\n";
-
+
$plain_bar = $this->data['sidebar'];
$bar = array();
-
+
// Massage the sidebar
// We want to place SEARCH at the beginning and a lot of stuff before TOOLBOX (or at the end, if it's missing)
$additions_done = false;
while ( !$additions_done ) {
$bar = array(); // Empty it out
-
+
// Always display search on top
$bar['SEARCH'] = true;
-
+
foreach ( $plain_bar as $heading => $links ) {
if ( $heading == 'TOOLBOX' ) {
if( $links !== NULL ) {
// If this is not a toolbox prosthetic we inserted outselves, fill it out
$plain_bar['TOOLBOX'] = $this->getToolbox();
}
-
+
// And insert the stuff
-
+
// "This page" and "Edit" menus
// We need to do some massaging here... we reuse all of the items, except for $...['views']['view'],
// as $...['namespaces']['main'] and $...['namespaces']['talk'] together serve the same purpose.
);
$bar['qbedit'] = $qbedit;
$bar['qbpageoptions'] = $qbpageoptions;
-
+
// Personal tools ("My pages")
$bar['qbmyoptions'] = $this->getPersonalTools();
foreach ( array ( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
- $bar['qbmyoptions'][$key] = false;
+ $bar['qbmyoptions'][$key] = null;
}
-
+
$additions_done = true;
}
-
+
// Re-insert current heading, unless it's SEARCH
if ( $heading != 'SEARCH' ) {
$bar[$heading] = $plain_bar[$heading];
}
}
-
+
// If TOOLBOX is missing, $additions_done is still false
if ( !$additions_done ) {
$plain_bar['TOOLBOX'] = false;
}
}
-
+
foreach ( $bar as $heading => $links ) {
if ( $heading == 'SEARCH' ) {
$s .= $this->menuHead( wfMessage( 'qbfind' )->text() );
$s .= $this->searchForm( 'sidebar' );
} elseif ( $heading == 'LANGUAGES' ) {
// discard these; we display languages below page content
- } else {
- if ( $links ) {
+ } elseif ( $links ) {
+ if ( is_array( $links ) ) {
// Use the navigation heading from standard sidebar as the "browse" section
if ( $heading == 'navigation' ) {
$heading = 'qbbrowse';
if ( $heading == 'TOOLBOX' ) {
$heading = 'toolbox';
}
-
+
$headingMsg = wfMessage( $heading );
$any_link = false;
- $t = $this->menuHead( $headingMsg->exists() ? $headingMsg->text() : $heading );
-
+ $t = $this->menuHead( $headingMsg->exists() ? $headingMsg->escaped() : htmlspecialchars( $heading ) );
+
foreach ( $links as $key => $link ) {
// Can be empty due to rampant sidebar massaging we're doing above
if ( $link ) {
$t .= $this->makeListItem( $key, $link, array( 'tag' => 'span' ) ) . $sep;
}
}
-
+
if ( $any_link ) {
$s .= $t;
}
+ } else {
+ // $links can be a HTML string
+ $s .= $links;
}
}
}
/**
* @param $label string
* @return string
- *
+ *
* @fixed
*/
function searchForm( $which ) {
/**
* Adds classes to the body element.
- *
+ *
* @param $out OutputPage object
* @param &$bodyAttrs Array of attributes that will be set on the body element
*/
-/*
-** MediaWiki style sheet for general styles on complex content
-*/
+/**
+ * MediaWiki style sheet for general styles on complex content
+ *
+ * Styles for complex things which are a standard part of page content
+ * (ie: the CSS classing built into the system), like the TOC.
+ */
/* Table of Contents */
#toc,
/**
* MediaWiki style sheet for general styles on basic content elements
- * This style sheet is used by the monobook and vector skins
+ *
+ * Styles for basic elements: links, lists, etc...
+ *
+ * This style sheet is used by the Monobook and Vector skins.
*/
/* Links */
-/*
-** MediaWiki style sheet for common core styles on interfaces
-*/
+/**
+ * MediaWiki style sheet for common core styles on interfaces
+ *
+ * Styles for the Monobook/Vector pattern of laying out common interfaces.
+ * These ids/classes are not built into the system,
+ * they are outputted by the actual MonoBook/Vector code by convention.
+ */
/* Categories */
.catlinks {
.config-settings-block {
list-style-type: none;
list-style-image: none;
- float: left;
margin: 0;
padding: 0;
}
'DumpTestCase' => "$testFolder/phpunit/maintenance/DumpTestCase.php",
'BackupDumper' => "$testFolder/../maintenance/backup.inc",
+ //language
+ 'LanguageClassesTestCase' => "$testFolder/phpunit/languages/LanguageClassesTestCase.php",
+
//Generic providers
'MediaWikiProvide' => "$testFolder/phpunit/includes/Providers.php",
);
!!end
###
-### Parsoid-centric tests for testing RT edge cases
-### around comments and white-space inside pre blocks
+### Parsoid-centric tests for testing RT edge cases for pre
###
!!test
</pre>
!!end
+!!test
+2a. Pre and tables
+!!input
+ {|
+ |-
+ !h1!!h2
+ |foo||bar
+ |}
+!!result
+<table>
+
+<tr>
+<th>h1</th>
+<th>h2
+</th>
+<td>foo</td>
+<td>bar
+</td></tr></table>
+
+!!end
+
+!!test
+2b. Pre and tables
+!!input
+ {|
+ |-
+|foo
+|}
+!!result
+<table>
+
+<tr>
+<td>foo
+</td></tr></table>
+
+!!end
+
+!!test
+3. Pre and block tags
+!!input
+ <p> foo </p>
+ <div> foo </div>
+ <span> foo </span>
+!!result
+ <p> foo </p>
+ <div> foo </div>
+<pre><span> foo </span>
+</pre>
+!!end
+
+!!test
+4. Multiple spaces at start-of-line
+!!input
+ <p> foo </p>
+ foo
+ {|
+|foo
+|}
+!!result
+ <p> foo </p>
+<pre> foo
+</pre>
+<table>
+<tr>
+<td>foo
+</td></tr></table>
+
+!!end
+
###
### Definition lists
###
!! end
-
!! test
Definition lists: self-closed tag
!! input
!! test
Bug 11748: Literal closing tags
-!! options
-disabled
!! input
<dl>
<dt>test 1</dt>
<dt>test 2</dt>
<dd>test test test test test</dd>
</dl>
+
!! end
!! test
!! end
!! test
+
Definition list with empty definition and following paragraph
!! input
; term:
</p>
!! end
+!! test
+Nested definition lists using html syntax
+!! input
+<dl><dd>
+<dl>
+<dd>Foo</dd>
+</dl>
+</dd></dl>
+!! result
+<dl><dd>
+<dl>
+<dd>Foo</dd>
+</dl>
+</dd></dl>
+
+!! end
+
!! test
Definition Lists: No nesting: Multiple dd's
!! input
!! end
+!! test
+Definition Lists: Hacky use to indent tables
+!! input
+::{|
+|foo
+|bar
+|}
+this text
+should be left alone
+!! result
+<dl><dd><dl><dd><table>
+<tr>
+<td>foo
+</td>
+<td>bar
+</td></tr></table></dd></dl></dd></dl>
+<p>this text
+should be left alone
+</p>
+!! end
## The PHP parser treats : items (dd) without a corresponding ; item (dt)
## as an empty dt item. It also ignores all but the last ";" when followed
## by ":" later on. So, ";" are not ignored in ";;;t3" but are ignored in
!! end
+!! test
+Simple table but with multiple dashes for row wikitext
+!! input
+{|
+| foo
+|-----
+| bar
+|}
+!! result
+<table>
+<tr>
+<td> foo
+</td></tr>
+<tr>
+<td> bar
+</td></tr></table>
+
+!! end
!! test
Multiplication table
!! input
!! end
+!!test
+Allow +/- in 2nd and later cells in a row
+!!input
+{|
+| 1 || 2 || 3
+|-
+| 1 || +2 || -3
+|}
+!!result
+<table>
+<tr>
+<td> 1 </td>
+<td> 2 </td>
+<td> 3
+</td></tr>
+<tr>
+<td> 1 </td>
+<td> +2 </td>
+<td> -3
+</td></tr></table>
+
+!!end
+
!! test
Table rowspan
!! input
!! end
+!! test
+1. Lists with start-of-line-transparent tokens before bullets: Comments
+!! input
+*foo
+*<!--cmt-->bar
+<!--cmt-->*baz
+!! result
+<ul><li>foo
+</li><li>bar
+</li><li>baz
+</li></ul>
+
+!! end
+
+!! test
+2. Lists with start-of-line-transparent tokens before bullets: Template close
+!! input
+*foo {{echo|bar
+}}*baz
+!! result
+<ul><li>foo bar
+</li><li>baz
+</li></ul>
+
+!! end
!! test
List items are not parsed correctly following a <pre> block (bug 785)
!!end
+!!test
+Templates: Ugly templates: 1. Navbox template parses badly leading to table misnesting
+(Parsoid-centric)
+!! options
+disabled
+!!input
+{|
+|{{echo|foo</table>}}
+|bar
+|}
+!!result
+<table data-parsoid="{"src":"{|\n|{{echo|foo</table>}}\n|bar\n|}"}" about="#mwt1" typeof="mw:Object/Template ">
+<tbody><tr><td>foo</td></tr></tbody></table><span about="#mwt1">
+bar</span><span about="#mwt1">
+</span>
+!!end
+
+!!test
+Templates: Ugly templates: 2. Navbox template parses badly leading to table misnesting
+(Parsoid-centric)
+!! options
+disabled
+!!input
+<table>
+ <tr>
+ <td>
+ <table>
+ <tr>
+ <td>1. {{echo|foo </table>}}</td>
+ <td> bar </td>
+ <td>2. {{echo|baz </table>}}</td>
+ </tr>
+ <tr>
+ <td>abc</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td>xyz</td>
+ </tr>
+</table>
+!!result
+<table data-parsoid="{"src":"<table>\n <tr>\n <td>\n <table>\n <tr>\n <td>1. {{echo|foo </table>}}</td>\n <td> bar </td>\n <td>2. {{echo|baz </table>}}</td>\n </tr>\n <tr>\n <td>abc</td>\n </tr>\n </table>\n </td>\n </tr>\n <tr>\n <td>xyz</td>\n </tr>\n</table>"}" about="#mwt1" typeof="mw:Object/Template">
+ <tbody><tr data-parsoid="{"stx":"html"}">
+ <td data-parsoid="{"stx":"html"}">
+ <table data-parsoid="{"stx":"html"}">
+ <tbody><tr data-parsoid="{"stx":"html"}">
+ <td data-parsoid="{"stx":"html"}">1. foo </td></tr></tbody></table></td>
+ <td data-parsoid="{"stx":"html"}"> bar </td>
+ <td data-parsoid="{"stx":"html"}">2. baz </td></tr></tbody></table><span about="#mwt1">
+ </span><span about="#mwt1">
+
+ abc</span><span about="#mwt1">
+ </span><span about="#mwt1">
+ </span><span about="#mwt1">
+ </span><span about="#mwt1">
+ </span><span about="#mwt1">
+
+ xyz</span><span about="#mwt1">
+ </span><span about="#mwt1">
+</span>
+!!end
+
!!test
Parser Functions: 1. Simple example
!!input
!! end
+!! test
+Image with link tails
+!! input
+123[[Image:foobar.jpg]]456
+123[[Image:foobar.jpg|right]]456
+123[[Image:foobar.jpg|thumb]]456
+!! result
+<p>123<a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>456
+</p>
+123<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>456
+123<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div></div></div></div>456
+
+!! end
+
+!! test
+Image with multiple captions -- only last one is accepted
+!! input
+[[Image:foobar.jpg|right|Caption1 - ignored|[[Caption2]] - ignored|Caption3 - accepted]]
+!! result
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption3 - accepted"><img alt="Caption3 - accepted" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a></div>
+
+!! end
+
!! test
Image with link parameter, wiki target
!! input
[[Category:Foo (bar)|Foo]]
!! end
+!! test
+Category with link tail
+!! options
+cat
+pst
+!! input
+123[[Category:Foo]]456
+!! result
+123[[Category:Foo]]456
+!! end
+
!! test
Category with template
!! options
<tag></tag>
!! result
<pre>
-string(0) ""
-array(0) {
-}
+''
+array (
+)
</pre>
!! end
!! result
<pre>
NULL
-array(0) {
-}
+array (
+)
</pre>
!! end
!! result
<pre>
NULL
-array(0) {
-}
+array (
+)
</pre>
!! end
<tag>input</tag>
!! result
<pre>
-string(5) "input"
-array(0) {
-}
+'input'
+array (
+)
</pre>
!! end
<TAG>input</TAG>
!! result
<pre>
-string(5) "input"
-array(0) {
-}
+'input'
+array (
+)
</pre>
!! end
<TaG>input</TAg>
!! result
<pre>
-string(5) "input"
-array(0) {
-}
+'input'
+array (
+)
</pre>
!! end
<tag><tag></tag></tag>
!! result
<pre>
-string(5) "<tag>"
-array(0) {
-}
+'<tag>'
+array (
+)
</pre></tag>
!! end
<tag width=200 height = "100" depth = '50' square></tag>
!! result
<pre>
-string(0) ""
-array(4) {
- ["width"]=>
- string(3) "200"
- ["height"]=>
- string(3) "100"
- ["depth"]=>
- string(2) "50"
- ["square"]=>
- string(6) "square"
-}
+''
+array (
+ 'width' => '200',
+ 'height' => '100',
+ 'depth' => '50',
+ 'square' => 'square',
+)
</pre>
!! end
<tag filename='/tmp/bla'></tag>
!! result
<pre>
-string(0) ""
-array(1) {
- ["filename"]=>
- string(8) "/tmp/bla"
-}
+''
+array (
+ 'filename' => '/tmp/bla',
+)
</pre>
!! end
!! result
<pre>
NULL
-array(1) {
- ["foo"]=>
- string(3) "bar"
-}
+array (
+ 'foo' => 'bar',
+)
</pre>text
!! end
!! result
<pre>
NULL
-array(4) {
- ["width"]=>
- string(3) "200"
- ["height"]=>
- string(3) "100"
- ["depth"]=>
- string(2) "50"
- ["square"]=>
- string(6) "square"
-}
+array (
+ 'width' => '200',
+ 'height' => '100',
+ 'depth' => '50',
+ 'square' => 'square',
+)
</pre>
<p>other stuff
</tag>
}
static function dumpHook( $in, $argv ) {
- ob_start();
- var_dump(
- $in,
- $argv
- );
- $ret = ob_get_clean();
-
- return "<pre>\n$ret</pre>";
+ return "<pre>\n" .
+ var_export( $in, true ) . "\n" .
+ var_export( $argv, true ) . "\n" .
+ "</pre>";
}
static function staticTagHook( $in, $argv, $parser ) {
* if an array is given as first argument).
*/
protected function setMwGlobals( $pairs, $value = null ) {
- if ( !is_array( $pairs ) ) {
- $key = $pairs;
- $this->mwGlobals[$key] = $GLOBALS[$key];
- $GLOBALS[$key] = $value;
- } else {
- foreach ( $pairs as $key => $value ) {
+
+ // Normalize (string, value) to an array
+ if( is_string( $pairs ) ) {
+ $pairs = array( $pairs => $value );
+ }
+
+ foreach ( $pairs as $key => $value ) {
+ // NOTE: make sure we only save the global once or a second call to
+ // setMwGlobals() on the same global would override the original
+ // value.
+ if ( !array_key_exists( $key, $this->mwGlobals ) ) {
$this->mwGlobals[$key] = $GLOBALS[$key];
- $GLOBALS[$key] = $value;
}
+
+ // Override the global
+ $GLOBALS[$key] = $value;
}
}
throw new MWException( "MW global $name is not an array." );
}
- //NOTE: do not use array_merge, it screws up for numeric keys.
+ // NOTE: do not use array_merge, it screws up for numeric keys.
$merged = $GLOBALS[$name];
foreach ( $values as $k => $v ) {
$merged[$k] = $v;
us_size int unsigned NOT NULL,
us_sha1 varchar(31) NOT NULL,
us_mime varchar(255),
- us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+ us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
us_image_width int unsigned,
us_image_height int unsigned,
us_image_bits smallint unsigned
/** creates a title object and its article object */
protected function setUp() {
+ parent::setUp();
$this->title = Title::makeTitle( NS_MAIN, 'SomePage' );
$this->article = new Article( $this->title );
-
}
/** cleanup title object and its article object */
protected function tearDown() {
+ parent::tearDown();
$this->title = null;
$this->article = null;
-
}
function testImplementsGetMagic() {
protected function setUp() {
parent::setUp();
- $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
+ $this->setMwGlobals( array(
+ 'wgLanguageCode' => 'en',
+ 'wgContLang' => Language::factory( 'en' )
+ ) );
}
function addDBData() {
class CdbTest extends MediaWikiTestCase {
protected function setUp() {
+ parent::setUp();
if ( !CdbReader::haveExtension() ) {
$this->markTestSkipped( 'Native CDB support is not available' );
}
+++ /dev/null
-<?php
-
-/**
- * @group ContentHandler
- *
- * @note: Declare that we are using the database, because otherwise we'll fail in the "databaseless" test run.
- * This is because the LinkHolderArray used by the parser needs database access.
- *
- * @group Database
- */
-class ContentHandlerTest extends MediaWikiTestCase {
-
- public function setup() {
- parent::setup();
-
- global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
-
- $wgExtraNamespaces[ 12312 ] = 'Dummy';
- $wgExtraNamespaces[ 12313 ] = 'Dummy_talk';
-
- $wgNamespaceContentModels[ 12312 ] = "testing";
- $wgContentHandlers[ "testing" ] = 'DummyContentHandlerForTesting';
-
- MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
- $wgContLang->resetNamespaces(); # reset namespace cache
- }
-
- public function teardown() {
- global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
-
- unset( $wgExtraNamespaces[ 12312 ] );
- unset( $wgExtraNamespaces[ 12313 ] );
-
- unset( $wgNamespaceContentModels[ 12312 ] );
- unset( $wgContentHandlers[ "testing" ] );
-
- MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
- $wgContLang->resetNamespaces(); # reset namespace cache
-
- parent::teardown();
- }
-
- public function dataGetDefaultModelFor() {
- //NOTE: assume that the Help namespace default to wikitext content
- return array(
- array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ),
- array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ),
- array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
- array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
- array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
- array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
- array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
- array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
- array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
- array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
- array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
- array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
- array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
- array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
- array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
- );
- }
-
- /**
- * @dataProvider dataGetDefaultModelFor
- */
- public function testGetDefaultModelFor( $title, $expectedModelId ) {
- $title = Title::newFromText( $title );
- $this->assertEquals( $expectedModelId, ContentHandler::getDefaultModelFor( $title ) );
- }
- /**
- * @dataProvider dataGetDefaultModelFor
- */
- public function testGetForTitle( $title, $expectedContentModel ) {
- $title = Title::newFromText( $title );
- $handler = ContentHandler::getForTitle( $title );
- $this->assertEquals( $expectedContentModel, $handler->getModelID() );
- }
-
- public function dataGetLocalizedName() {
- return array(
- array( null, null ),
- array( "xyzzy", null ),
-
- array( CONTENT_MODEL_JAVASCRIPT, '/javascript/i' ), //XXX: depends on content language
- );
- }
-
- /**
- * @dataProvider dataGetLocalizedName
- */
- public function testGetLocalizedName( $id, $expected ) {
- $name = ContentHandler::getLocalizedName( $id );
-
- if ( $expected ) {
- $this->assertNotNull( $name, "no name found for content model $id" );
- $this->assertTrue( preg_match( $expected, $name ) > 0 ,
- "content model name for #$id did not match pattern $expected" );
- } else {
- $this->assertEquals( $id, $name, "localization of unknown model $id should have "
- . "fallen back to use the model id directly." );
- }
- }
-
- public function dataGetPageLanguage() {
- global $wgLanguageCode;
-
- return array(
- array( "Main", $wgLanguageCode ),
- array( "Dummy:Foo", $wgLanguageCode ),
- array( "MediaWiki:common.js", 'en' ),
- array( "User:Foo/common.js", 'en' ),
- array( "MediaWiki:common.css", 'en' ),
- array( "User:Foo/common.css", 'en' ),
- array( "User:Foo", $wgLanguageCode ),
-
- array( CONTENT_MODEL_JAVASCRIPT, 'javascript' ),
- );
- }
-
- /**
- * @dataProvider dataGetPageLanguage
- */
- public function testGetPageLanguage( $title, $expected ) {
- if ( is_string( $title ) ) {
- $title = Title::newFromText( $title );
- }
-
- $expected = wfGetLangObj( $expected );
-
- $handler = ContentHandler::getForTitle( $title );
- $lang = $handler->getPageLanguage( $title );
-
- $this->assertEquals( $expected->getCode(), $lang->getCode() );
- }
-
- public function testGetContentText_Null( ) {
- global $wgContentHandlerTextFallback;
-
- $content = null;
-
- $wgContentHandlerTextFallback = 'fail';
- $text = ContentHandler::getContentText( $content );
- $this->assertEquals( '', $text );
-
- $wgContentHandlerTextFallback = 'serialize';
- $text = ContentHandler::getContentText( $content );
- $this->assertEquals( '', $text );
-
- $wgContentHandlerTextFallback = 'ignore';
- $text = ContentHandler::getContentText( $content );
- $this->assertEquals( '', $text );
- }
-
- public function testGetContentText_TextContent( ) {
- global $wgContentHandlerTextFallback;
-
- $content = new WikitextContent( "hello world" );
-
- $wgContentHandlerTextFallback = 'fail';
- $text = ContentHandler::getContentText( $content );
- $this->assertEquals( $content->getNativeData(), $text );
-
- $wgContentHandlerTextFallback = 'serialize';
- $text = ContentHandler::getContentText( $content );
- $this->assertEquals( $content->serialize(), $text );
-
- $wgContentHandlerTextFallback = 'ignore';
- $text = ContentHandler::getContentText( $content );
- $this->assertEquals( $content->getNativeData(), $text );
- }
-
- public function testGetContentText_NonTextContent( ) {
- global $wgContentHandlerTextFallback;
-
- $content = new DummyContentForTesting( "hello world" );
-
- $wgContentHandlerTextFallback = 'fail';
-
- try {
- $text = ContentHandler::getContentText( $content );
-
- $this->fail( "ContentHandler::getContentText should have thrown an exception for non-text Content object" );
- } catch (MWException $ex) {
- // as expected
- }
-
- $wgContentHandlerTextFallback = 'serialize';
- $text = ContentHandler::getContentText( $content );
- $this->assertEquals( $content->serialize(), $text );
-
- $wgContentHandlerTextFallback = 'ignore';
- $text = ContentHandler::getContentText( $content );
- $this->assertNull( $text );
- }
-
- #public static function makeContent( $text, Title $title, $modelId = null, $format = null )
-
- public function dataMakeContent() {
- //NOTE: assume the Help namespace defaults to wikitext content
- return array(
- array( 'hallo', 'Help:Test', null, null, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
- array( 'hallo', 'MediaWiki:Test.js', null, null, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
- array( serialize('hallo'), 'Dummy:Test', null, null, "testing", 'hallo', false ),
-
- array( 'hallo', 'Help:Test', null, CONTENT_FORMAT_WIKITEXT, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
- array( 'hallo', 'MediaWiki:Test.js', null, CONTENT_FORMAT_JAVASCRIPT, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
- array( serialize('hallo'), 'Dummy:Test', null, "testing", "testing", 'hallo', false ),
-
- array( 'hallo', 'Help:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
- array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
- array( serialize('hallo'), 'Dummy:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, serialize('hallo'), false ),
-
- array( 'hallo', 'Help:Test', CONTENT_MODEL_WIKITEXT, "testing", null, null, true ),
- array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, "testing", null, null, true ),
- array( 'hallo', 'Dummy:Test', CONTENT_MODEL_JAVASCRIPT, "testing", null, null, true ),
- );
- }
-
- /**
- * @dataProvider dataMakeContent
- */
- public function testMakeContent( $data, $title, $modelId, $format, $expectedModelId, $expectedNativeData, $shouldFail ) {
- global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers;
-
- $title = Title::newFromText( $title );
-
- try {
- $content = ContentHandler::makeContent( $data, $title, $modelId, $format );
-
- if ( $shouldFail ) $this->fail( "ContentHandler::makeContent should have failed!" );
-
- $this->assertEquals( $expectedModelId, $content->getModel(), 'bad model id' );
- $this->assertEquals( $expectedNativeData, $content->getNativeData(), 'bads native data' );
- } catch ( MWException $ex ) {
- if ( !$shouldFail ) $this->fail( "ContentHandler::makeContent failed unexpectedly: " . $ex->getMessage() );
- else $this->assertTrue( true ); // dummy, so we don't get the "test did not perform any assertions" message.
- }
-
- }
-
- public function testSupportsSections() {
- $this->markTestIncomplete( "not yet implemented" );
- }
-
- public function testRunLegacyHooks() {
- Hooks::register( 'testRunLegacyHooks', __CLASS__ . '::dummyHookHandler' );
-
- $content = new WikitextContent( 'test text' );
- $ok = ContentHandler::runLegacyHooks( 'testRunLegacyHooks', array( 'foo', &$content, 'bar' ), false );
-
- $this->assertTrue( $ok, "runLegacyHooks should have returned true" );
- $this->assertEquals( "TEST TEXT", $content->getNativeData() );
- }
-
- public static function dummyHookHandler( $foo, &$text, $bar ) {
- if ( $text === null || $text === false ) {
- return false;
- }
-
- $text = strtoupper( $text );
-
- return true;
- }
-}
-
-class DummyContentHandlerForTesting extends ContentHandler {
-
- public function __construct( $dataModel ) {
- parent::__construct( $dataModel, array( "testing" ) );
- }
-
- /**
- * Serializes Content object of the type supported by this ContentHandler.
- *
- * @param Content $content the Content object to serialize
- * @param null $format the desired serialization format
- * @return String serialized form of the content
- */
- public function serializeContent( Content $content, $format = null )
- {
- return $content->serialize();
- }
-
- /**
- * Unserializes a Content object of the type supported by this ContentHandler.
- *
- * @param $blob String serialized form of the content
- * @param null $format the format used for serialization
- * @return Content the Content object created by deserializing $blob
- */
- public function unserializeContent( $blob, $format = null )
- {
- $d = unserialize( $blob );
- return new DummyContentForTesting( $d );
- }
-
- /**
- * Creates an empty Content object of the type supported by this ContentHandler.
- *
- */
- public function makeEmptyContent()
- {
- return new DummyContentForTesting( '' );
- }
-}
-
-class DummyContentForTesting extends AbstractContent {
-
- public function __construct( $data ) {
- parent::__construct( "testing" );
-
- $this->data = $data;
- }
-
- public function serialize( $format = null ) {
- return serialize( $this->data );
- }
-
- /**
- * @return String a string representing the content in a way useful for building a full text search index.
- * If no useful representation exists, this method returns an empty string.
- */
- public function getTextForSearchIndex() {
- return '';
- }
-
- /**
- * @return String the wikitext to include when another page includes this content, or false if the content is not
- * includable in a wikitext page.
- */
- public function getWikitextForTransclusion() {
- return false;
- }
-
- /**
- * Returns a textual representation of the content suitable for use in edit summaries and log messages.
- *
- * @param int $maxlength maximum length of the summary text
- * @return String the summary text
- */
- public function getTextForSummary( $maxlength = 250 ) {
- return '';
- }
-
- /**
- * Returns native represenation of the data. Interpretation depends on the data model used,
- * as given by getDataModel().
- *
- * @return mixed the native representation of the content. Could be a string, a nested array
- * structure, an object, a binary blob... anything, really.
- */
- public function getNativeData()
- {
- return $this->data;
- }
-
- /**
- * returns the content's nominal size in bogo-bytes.
- *
- * @return int
- */
- public function getSize() {
- return strlen( $this->data );
- }
-
- /**
- * Return a copy of this Content object. The following must be true for the object returned
- * if $copy = $original->copy()
- *
- * * get_class($original) === get_class($copy)
- * * $original->getModel() === $copy->getModel()
- * * $original->equals( $copy )
- *
- * If and only if the Content object is imutable, the copy() method can and should
- * return $this. That is, $copy === $original may be true, but only for imutable content
- * objects.
- *
- * @return Content. A copy of this object
- */
- public function copy() {
- return $this;
- }
-
- /**
- * Returns true if this content is countable as a "real" wiki page, provided
- * that it's also in a countable location (e.g. a current revision in the main namespace).
- *
- * @param $hasLinks Bool: if it is known whether this content contains links, provide this information here,
- * to avoid redundant parsing to find out.
- * @return boolean
- */
- public function isCountable( $hasLinks = null ) {
- return false;
- }
-
- /**
- * @param Title $title
- * @param null $revId
- * @param null|ParserOptions $options
- * @param Boolean $generateHtml whether to generate Html (default: true). If false,
- * the result of calling getText() on the ParserOutput object returned by
- * this method is undefined.
- *
- * @return ParserOutput
- */
- public function getParserOutput( Title $title, $revId = null, ParserOptions $options = NULL, $generateHtml = true ) {
- return new ParserOutput( $this->getNativeData() );
- }
-}
+++ /dev/null
-<?php
-
-/**
- * @group ContentHandler
- *
- * @group Database
- * ^--- needed, because we do need the database to test link updates
- */
-class CssContentTest extends JavascriptContentTest {
-
- public function newContent( $text ) {
- return new CssContent( $text );
- }
-
-
- public function dataGetParserOutput() {
- return array(
- array("MediaWiki:Test.css", null, "hello <world>\n",
- "<pre class=\"mw-code mw-css\" dir=\"ltr\">\nhello <world>\n\n</pre>"),
- // @todo: more...?
- );
- }
-
-
- # =================================================================================================================
-
- public function testGetModel() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_CSS, $content->getModel() );
- }
-
- public function testGetContentHandler() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_CSS, $content->getContentHandler()->getModelID() );
- }
-
- public function dataEquals( ) {
- return array(
- array( new CssContent( "hallo" ), null, false ),
- array( new CssContent( "hallo" ), new CssContent( "hallo" ), true ),
- array( new CssContent( "hallo" ), new WikitextContent( "hallo" ), false ),
- array( new CssContent( "hallo" ), new CssContent( "HALLO" ), false ),
- );
- }
-
-}
protected function setUp() {
parent::setUp();
+ $contLang = Language::factory( 'en' );
$this->setMwGlobals( array(
'wgShowDBErrorBacktrace' => true,
'wgLanguageCode' => 'en',
- 'wgContLang' => Language::factory( 'en' ),
+ 'wgContLang' => $contLang,
'wgLang' => Language::factory( 'en' ),
'wgMemc' => new EmptyBagOStuff,
'wgAlwaysUseTidy' => false,
'wgCleanSignatures' => true,
) );
- $this->options = new ParserOptions;
+ $this->options = ParserOptions::newFromUserAndLang( new User, $contLang );
$this->options->setTemplateCallback( array( __CLASS__, 'statelessFetchTemplate' ) );
$this->parser = new Parser;
var $response;
protected function setUp() {
+ parent::setUp();
$this->response = new FauxResponse;
}
* with.
*/
protected function setUp() {
+ parent::setUp();
$this->object = new FormOptionsExposed();
-
}
public function testAddStringOption() {
protected $object;
/**
- * Instanciates a FormOptions object to play with.
+ * Instanciates a FormOptions object to play with.
* FormOptions::add() is tested by the class FormOptionsInitializationTest
* so we assume the function is well tested already an use it to create
* the fixture.
*/
protected function setUp() {
+ parent::setUp();
$this->object = new FormOptions;
$this->object->add( 'string1', 'string one' );
$this->object->add( 'string2', 'string two' );
* test @see wfBCP47().
* Please note the BCP explicitly state that language codes are case
* insensitive, there are some exceptions to the rule :)
- * This test is used to verify our formatting against all lower and
+ * This test is used to verify our formatting against all lower and
* all upper cases language code.
*
* @see http://tools.ietf.org/html/bcp47
* handles header reporting on redirect pages, and will need to be
* rewritten when bug 29232 is taken care of (high-level handling of
* HTTP redirects).
- * @group Broken
- * MWHttpRequestTester's constructor is private, needs to use
- * MWHttpRequestTester::factory instead. However the objects coming
- * from that won't have MWHttpRequestTester::setRespHeaders...
*/
function testRelativeRedirections() {
- $h = new MWHttpRequestTester( 'http://oldsite/file.ext' );
+ $h = MWHttpRequestTester::factory( 'http://oldsite/file.ext' );
+
# Forge a Location header
$h->setRespHeaders( 'location', array(
'http://newsite/file.ext',
}
/**
- * Class to let us overwrite MWHttpREquest respHeaders variable
+ * Class to let us overwrite MWHttpRequest respHeaders variable
*/
class MWHttpRequestTester extends MWHttpRequest {
+
+ // function derived from the MWHttpRequest factory function but
+ // returns appropriate tester class here
+ public static function factory( $url, $options = null ) {
+ if ( !Http::$httpEngine ) {
+ Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
+ } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
+ throw new MWException( __METHOD__ . ': curl (http://php.net/curl) is not installed, but' .
+ 'Http::$httpEngine is set to "curl"' );
+ }
+
+ switch( Http::$httpEngine ) {
+ case 'curl':
+ return new CurlHttpRequestTester( $url, $options );
+ case 'php':
+ if ( !wfIniGetBool( 'allow_url_fopen' ) ) {
+ throw new MWException( __METHOD__ . ': allow_url_fopen needs to be enabled for pure PHP' .
+ ' http requests to work. If possible, curl should be used instead. See http://php.net/curl.' );
+ }
+ return new PhpHttpRequestTester( $url, $options );
+ default:
+ }
+ }
+}
+
+class CurlHttpRequestTester extends CurlHttpRequest {
+ function setRespHeaders( $name, $value ) {
+ $this->respHeaders[$name] = $value;
+ }
+}
+
+class PhpHttpRequestTester extends PhpHttpRequest {
function setRespHeaders( $name, $value ) {
- $this->respHeaders[$name] = $value ;
+ $this->respHeaders[$name] = $value;
}
}
+++ /dev/null
-<?php
-
-/**
- * @group ContentHandler
- *
- * @group Database
- * ^--- needed, because we do need the database to test link updates
- */
-class JavascriptContentTest extends TextContentTest {
-
- public function newContent( $text ) {
- return new JavascriptContent( $text );
- }
-
-
- public function dataGetParserOutput() {
- return array(
- array("MediaWiki:Test.js", null, "hello <world>\n",
- "<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello <world>\n\n</pre>"),
- // @todo: more...?
- );
- }
-
- public function dataGetSection() {
- return array(
- array( WikitextContentTest::$sections,
- "0",
- null
- ),
- array( WikitextContentTest::$sections,
- "2",
- null
- ),
- array( WikitextContentTest::$sections,
- "8",
- null
- ),
- );
- }
-
- public function dataReplaceSection() {
- return array(
- array( WikitextContentTest::$sections,
- "0",
- "No more",
- null,
- null
- ),
- array( WikitextContentTest::$sections,
- "",
- "No more",
- null,
- null
- ),
- array( WikitextContentTest::$sections,
- "2",
- "== TEST ==\nmore fun",
- null,
- null
- ),
- array( WikitextContentTest::$sections,
- "8",
- "No more",
- null,
- null
- ),
- array( WikitextContentTest::$sections,
- "new",
- "No more",
- "New",
- null
- ),
- );
- }
-
- public function testAddSectionHeader( ) {
- $content = $this->newContent( 'hello world' );
- $c = $content->addSectionHeader( 'test' );
-
- $this->assertTrue( $content->equals( $c ) );
- }
-
- // XXX: currently, preSaveTransform is applied to scripts. this may change or become optional.
- public function dataPreSaveTransform() {
- return array(
- array( 'hello this is ~~~',
- "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
- ),
- array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
- 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
- ),
- );
- }
-
- public function dataPreloadTransform() {
- return array(
- array( 'hello this is ~~~',
- "hello this is ~~~",
- ),
- array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
- 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
- ),
- );
- }
-
- public function dataGetRedirectTarget() {
- return array(
- array( '#REDIRECT [[Test]]',
- null,
- ),
- array( '#REDIRECT Test',
- null,
- ),
- array( '* #REDIRECT [[Test]]',
- null,
- ),
- );
- }
-
- /**
- * @todo: test needs database!
- */
- /*
- public function getRedirectChain() {
- $text = $this->getNativeData();
- return Title::newFromRedirectArray( $text );
- }
- */
-
- /**
- * @todo: test needs database!
- */
- /*
- public function getUltimateRedirectTarget() {
- $text = $this->getNativeData();
- return Title::newFromRedirectRecurse( $text );
- }
- */
-
-
- public function dataIsCountable() {
- return array(
- array( '',
- null,
- 'any',
- true
- ),
- array( 'Foo',
- null,
- 'any',
- true
- ),
- array( 'Foo',
- null,
- 'comma',
- false
- ),
- array( 'Foo, bar',
- null,
- 'comma',
- false
- ),
- array( 'Foo',
- null,
- 'link',
- false
- ),
- array( 'Foo [[bar]]',
- null,
- 'link',
- false
- ),
- array( 'Foo',
- true,
- 'link',
- false
- ),
- array( 'Foo [[bar]]',
- false,
- 'link',
- false
- ),
- array( '#REDIRECT [[bar]]',
- true,
- 'any',
- true
- ),
- array( '#REDIRECT [[bar]]',
- true,
- 'comma',
- false
- ),
- array( '#REDIRECT [[bar]]',
- true,
- 'link',
- false
- ),
- );
- }
-
- public function dataGetTextForSummary() {
- return array(
- array( "hello\nworld.",
- 16,
- 'hello world.',
- ),
- array( 'hello world.',
- 8,
- 'hello...',
- ),
- array( '[[hello world]].',
- 8,
- '[[hel...',
- ),
- );
- }
-
- public function testMatchMagicWord( ) {
- $mw = MagicWord::get( "staticredirect" );
-
- $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
- $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word, since it's not wikitext" );
- }
-
- public function testUpdateRedirect( ) {
- $target = Title::newFromText( "testUpdateRedirect_target" );
-
- $content = $this->newContent( "#REDIRECT [[Someplace]]" );
- $newContent = $content->updateRedirect( $target );
-
- $this->assertTrue( $content->equals( $newContent ), "content should be unchanged since it's not wikitext" );
- }
-
- # =================================================================================================================
-
- public function testGetModel() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getModel() );
- }
-
- public function testGetContentHandler() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getContentHandler()->getModelID() );
- }
-
- public function dataEquals( ) {
- return array(
- array( new JavascriptContent( "hallo" ), null, false ),
- array( new JavascriptContent( "hallo" ), new JavascriptContent( "hallo" ), true ),
- array( new JavascriptContent( "hallo" ), new CssContent( "hallo" ), false ),
- array( new JavascriptContent( "hallo" ), new JavascriptContent( "HALLO" ), false ),
- );
- }
-
-}
}
protected function setUp() {
+ parent::setUp();
$dbw = wfGetDB( DB_MASTER );
$dbw->replace(
'interwiki',
* $wgCapitalLinkOverrides = array(); by default
* $wgCapitalLinks = true; by default
* This function test $wgCapitalLinks
- *
+ *
* Global setting correctness is tested against the NS_PROJECT and
* NS_PROJECT_TALK namespaces since they are not hardcoded nor specials
*/
class PathRouterTest extends MediaWikiTestCase {
protected function setUp() {
+ parent::setUp();
$router = new PathRouter;
$router->add("/wiki/$1");
$this->basicRouter = $router;
public function setUp() {
global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+ parent::setUp();
+
$wgExtraNamespaces[ 12312 ] = 'Dummy';
$wgExtraNamespaces[ 12313 ] = 'Dummy_talk';
public function tearDown() {
global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers, $wgContLang;
+ parent::tearDown();
+
unset( $wgExtraNamespaces[ 12312 ] );
unset( $wgExtraNamespaces[ 12313 ] );
}
protected function createPage( $page, $text, $model = null ) {
- if ( is_string( $page ) ) $page = Title::newFromText( $page );
- if ( $page instanceof Title ) $page = new WikiPage( $page );
+ if ( is_string( $page ) ) {
+ if ( !preg_match( '/:/', $page ) &&
+ ( $model === null || $model === CONTENT_MODEL_WIKITEXT ) ) {
+
+ $ns = $this->getDefaultWikitextNS();
+ $page = MWNamespace::getCanonicalName( $ns ) . ':' . $page;
+ }
+
+ $page = Title::newFromText( $page );
+ }
+
+ if ( $page instanceof Title ) {
+ $page = new WikiPage( $page );
+ }
if ( $page->exists() ) {
$page->doDeleteArticle( "done" );
'missing rev_content_model in list of fields');
$this->assertTrue( in_array( 'rev_content_format', $fields ),
'missing rev_content_format in list of fields');
- } else {
- $this->markTestSkipped( '$wgContentHandlerUseDB is disabled' );
}
}
$userB = \User::createNew( $userB->getName() );
}
+ $ns = $this->getDefaultWikitextNS();
+
$dbw = wfGetDB( DB_MASTER );
$revisions = array();
// create revisions -----------------------------
- $page = WikiPage::factory( Title::newFromText( 'RevisionStorageTest_testUserWasLastToEdit' ) );
+ $page = WikiPage::factory( Title::newFromText(
+ 'RevisionStorageTest_testUserWasLastToEdit', $ns ) );
# zero
$revisions[0] = new Revision( array(
/**
* @covers Revision::selectFields
*/
- public function testSelectFields()
- {
+ public function testSelectFields() {
$fields = Revision::selectFields();
$this->assertTrue( in_array( 'rev_id', $fields ), 'missing rev_id in list of fields');
/**
* @covers Revision::getContentModel
*/
- public function testGetContentModel()
- {
- $orig = $this->makeRevision( array( 'text' => 'hello hello.', 'content_model' => CONTENT_MODEL_JAVASCRIPT ) );
- $rev = Revision::newFromId( $orig->getId() );
-
- //NOTE: database fields for the content_model are disabled, so the model name is not retained.
- // We expect to get the default here instead of what was suppleid when creating the revision.
- $this->assertEquals( CONTENT_MODEL_WIKITEXT, $rev->getContentModel() );
+ public function testGetContentModel() {
+ try {
+ $this->makeRevision( array( 'text' => 'hello hello.',
+ 'content_model' => CONTENT_MODEL_JAVASCRIPT ) );
+
+ $this->fail( "Creating JavaScript content on a wikitext page should fail with "
+ . "\$wgContentHandlerUseDB disabled" );
+ } catch ( MWException $ex ) {
+ $this->assertTrue( true ); // ok
+ }
}
/**
* @covers Revision::getContentFormat
*/
- public function testGetContentFormat()
- {
- $orig = $this->makeRevision( array( 'text' => 'hello hello.', 'content_model' => CONTENT_MODEL_JAVASCRIPT, 'content_format' => 'text/javascript' ) );
- $rev = Revision::newFromId( $orig->getId() );
-
- $this->assertEquals( CONTENT_FORMAT_WIKITEXT, $rev->getContentFormat() );
+ public function testGetContentFormat() {
+ try {
+ //@todo: change this to test failure on using a non-standard (but supported) format
+ // for a content model supported in the given location. As of 1.21, there are
+ // no alternative formats for any of the standard content models that could be
+ // used for this though.
+
+ $this->makeRevision( array( 'text' => 'hello hello.',
+ 'content_model' => CONTENT_MODEL_JAVASCRIPT,
+ 'content_format' => 'text/javascript' ) );
+
+ $this->fail( "Creating JavaScript content on a wikitext page should fail with "
+ . "\$wgContentHandlerUseDB disabled" );
+ } catch ( MWException $ex ) {
+ $this->assertTrue( true ); // ok
+ }
}
}
array( '/* insecure input */', 'background-image: image(asdf.png);'),
array( '/* insecure input */', 'background-image: -webkit-image(asdf.png);'),
array( '/* insecure input */', 'background-image: -moz-image(asdf.png);'),
+ array( '/* insecure input */', 'background-image: image-set("asdf.png" 1x, "asdf.png" 2x);'),
+ array( '/* insecure input */', 'background-image: -webkit-image-set("asdf.png" 1x, "asdf.png" 2x);'),
+ array( '/* insecure input */', 'background-image: -moz-image-set("asdf.png" 1x, "asdf.png" 2x);'),
);
}
}
var $mConf;
protected function setUp() {
+ parent::setUp();
+
$this->mConf = new SiteConfiguration;
$this->mConf->suffixes = array( 'wiki' );
$GLOBALS['global'] = array( 'global' => 'global' );
}
-
function testSiteFromDb() {
$this->assertEquals(
array( 'wikipedia', 'en' ),
+++ /dev/null
-<?php
-
-/**
- * @group ContentHandler
- *
- * @group Database
- * ^--- needed, because we do need the database to test link updates
- */
-class TextContentTest extends MediaWikiTestCase {
-
- public function setup() {
- global $wgUser;
-
- // anon user
- $wgUser = new User();
- $wgUser->setName( '127.0.0.1' );
-
- $this->context = new RequestContext( new FauxRequest() );
- $this->context->setTitle( Title::newFromText( "Test" ) );
- $this->context->setUser( $wgUser );
- }
-
- public function newContent( $text ) {
- return new TextContent( $text );
- }
-
-
- public function dataGetParserOutput() {
- return array(
- array("TextContentTest_testGetParserOutput", CONTENT_MODEL_TEXT, "hello ''world'' & stuff\n", "hello ''world'' & stuff"),
- // @todo: more...?
- );
- }
-
- /**
- * @dataProvider dataGetParserOutput
- */
- public function testGetParserOutput( $title, $model, $text, $expectedHtml ) {
- $title = Title::newFromText( $title );
- $content = ContentHandler::makeContent( $text, $title, $model );
-
- $po = $content->getParserOutput( $title );
-
- $html = $po->getText();
- $html = preg_replace( '#<!--.*?-->#sm', '', $html ); // strip comments
-
- $this->assertEquals( $expectedHtml, trim( $html ) );
- // @todo: assert more properties
- }
-
- public function dataPreSaveTransform() {
- return array(
- array( 'hello this is ~~~',
- "hello this is ~~~",
- ),
- );
- }
-
- /**
- * @dataProvider dataPreSaveTransform
- */
- public function testPreSaveTransform( $text, $expected ) {
- global $wgContLang;
-
- $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
-
- $content = $this->newContent( $text );
- $content = $content->preSaveTransform( $this->context->getTitle(), $this->context->getUser(), $options );
-
- $this->assertEquals( $expected, $content->getNativeData() );
- }
-
- public function dataPreloadTransform() {
- return array(
- array( 'hello this is ~~~',
- "hello this is ~~~",
- ),
- );
- }
-
- /**
- * @dataProvider dataPreloadTransform
- */
- public function testPreloadTransform( $text, $expected ) {
- global $wgContLang;
- $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
-
- $content = $this->newContent( $text );
- $content = $content->preloadTransform( $this->context->getTitle(), $options );
-
- $this->assertEquals( $expected, $content->getNativeData() );
- }
-
- public function dataGetRedirectTarget() {
- return array(
- array( '#REDIRECT [[Test]]',
- null,
- ),
- );
- }
-
- /**
- * @dataProvider dataGetRedirectTarget
- */
- public function testGetRedirectTarget( $text, $expected ) {
- $content = $this->newContent( $text );
- $t = $content->getRedirectTarget( );
-
- if ( is_null( $expected ) ) {
- $this->assertNull( $t, "text should not have generated a redirect target: $text" );
- } else {
- $this->assertEquals( $expected, $t->getPrefixedText() );
- }
- }
-
- /**
- * @dataProvider dataGetRedirectTarget
- */
- public function isRedirect( $text, $expected ) {
- $content = $this->newContent( $text );
-
- $this->assertEquals( !is_null($expected), $content->isRedirect() );
- }
-
-
- /**
- * @todo: test needs database! Should be done by a test class in the Database group.
- */
- /*
- public function getRedirectChain() {
- $text = $this->getNativeData();
- return Title::newFromRedirectArray( $text );
- }
- */
-
- /**
- * @todo: test needs database! Should be done by a test class in the Database group.
- */
- /*
- public function getUltimateRedirectTarget() {
- $text = $this->getNativeData();
- return Title::newFromRedirectRecurse( $text );
- }
- */
-
-
- public function dataIsCountable() {
- return array(
- array( '',
- null,
- 'any',
- true
- ),
- array( 'Foo',
- null,
- 'any',
- true
- ),
- array( 'Foo',
- null,
- 'comma',
- false
- ),
- array( 'Foo, bar',
- null,
- 'comma',
- false
- ),
- );
- }
-
-
- /**
- * @dataProvider dataIsCountable
- * @group Database
- */
- public function testIsCountable( $text, $hasLinks, $mode, $expected ) {
- global $wgArticleCountMethod;
-
- $old = $wgArticleCountMethod;
- $wgArticleCountMethod = $mode;
-
- $content = $this->newContent( $text );
-
- $v = $content->isCountable( $hasLinks, $this->context->getTitle() );
- $wgArticleCountMethod = $old;
-
- $this->assertEquals( $expected, $v, "isCountable() returned unexpected value " . var_export( $v, true )
- . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
- }
-
- public function dataGetTextForSummary() {
- return array(
- array( "hello\nworld.",
- 16,
- 'hello world.',
- ),
- array( 'hello world.',
- 8,
- 'hello...',
- ),
- array( '[[hello world]].',
- 8,
- '[[hel...',
- ),
- );
- }
-
- /**
- * @dataProvider dataGetTextForSummary
- */
- public function testGetTextForSummary( $text, $maxlength, $expected ) {
- $content = $this->newContent( $text );
-
- $this->assertEquals( $expected, $content->getTextForSummary( $maxlength ) );
- }
-
-
- public function testGetTextForSearchIndex( ) {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( "hello world.", $content->getTextForSearchIndex() );
- }
-
- public function testCopy() {
- $content = $this->newContent( "hello world." );
- $copy = $content->copy();
-
- $this->assertTrue( $content->equals( $copy ), "copy must be equal to original" );
- $this->assertEquals( "hello world.", $copy->getNativeData() );
- }
-
- public function testGetSize( ) {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( 12, $content->getSize() );
- }
-
- public function testGetNativeData( ) {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( "hello world.", $content->getNativeData() );
- }
-
- public function testGetWikitextForTransclusion( ) {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( "hello world.", $content->getWikitextForTransclusion() );
- }
-
- # =================================================================================================================
-
- public function testGetModel() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_TEXT, $content->getModel() );
- }
-
- public function testGetContentHandler() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_TEXT, $content->getContentHandler()->getModelID() );
- }
-
- public function dataIsEmpty( ) {
- return array(
- array( '', true ),
- array( ' ', false ),
- array( '0', false ),
- array( 'hallo welt.', false ),
- );
- }
-
- /**
- * @dataProvider dataIsEmpty
- */
- public function testIsEmpty( $text, $empty ) {
- $content = $this->newContent( $text );
-
- $this->assertEquals( $empty, $content->isEmpty() );
- }
-
- public function dataEquals( ) {
- return array(
- array( new TextContent( "hallo" ), null, false ),
- array( new TextContent( "hallo" ), new TextContent( "hallo" ), true ),
- array( new TextContent( "hallo" ), new JavascriptContent( "hallo" ), false ),
- array( new TextContent( "hallo" ), new WikitextContent( "hallo" ), false ),
- array( new TextContent( "hallo" ), new TextContent( "HALLO" ), false ),
- );
- }
-
- /**
- * @dataProvider dataEquals
- */
- public function testEquals( Content $a, Content $b = null, $equal = false ) {
- $this->assertEquals( $equal, $a->equals( $b ) );
- }
-
- public function dataGetDeletionUpdates() {
- return array(
- array("TextContentTest_testGetSecondaryDataUpdates_1",
- CONTENT_MODEL_TEXT, "hello ''world''\n",
- array( )
- ),
- array("TextContentTest_testGetSecondaryDataUpdates_2",
- CONTENT_MODEL_TEXT, "hello [[world test 21344]]\n",
- array( )
- ),
- // @todo: more...?
- );
- }
-
- /**
- * @dataProvider dataGetDeletionUpdates
- */
- public function testDeletionUpdates( $title, $model, $text, $expectedStuff ) {
- $title = Title::newFromText( $title );
- $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
-
- $content = ContentHandler::makeContent( $text, $title, $model );
-
- $updates = $content->getDeletionUpdates( WikiPage::factory( $title ) );
-
- // make updates accessible by class name
- foreach ( $updates as $update ) {
- $class = get_class( $update );
- $updates[ $class ] = $update;
- }
-
- if ( !$expectedStuff ) {
- $this->assertTrue( true ); // make phpunit happy
- return;
- }
-
- foreach ( $expectedStuff as $class => $fieldValues ) {
- $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
-
- $update = $updates[ $class ];
-
- foreach ( $fieldValues as $field => $value ) {
- $v = $update->$field; #if the field doesn't exist, just crash and burn
- $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
- }
- }
- }
-
-}
public function setup() {
global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContLang;
+ parent::setUp();
+
$this->mergeMwGlobalArrayValue(
'wgExtraNamespaces',
array(
public function teardown() {
global $wgContLang;
+ parent::tearDown();
+
MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache
$wgContLang->resetNamespaces(); # reset namespace cache
}
'wgNamespaceProtection' => array(
NS_MEDIAWIKI => 'editinterface',
),
- 'wgUser' => null,
) );
$this->userName = 'Useruser';
}
function setUser( $userName = null ) {
- global $wgUser;
-
if ( $userName === 'anon' ) {
$this->user = $this->anonUser;
} elseif ( $userName === null || $userName === $this->userName ) {
} else {
$this->user = $this->altUser;
}
-
- $wgUser = $this->user;
}
function testQuickPermissions() {
array( array( 'badaccess-group0' ), array( 'protect-cantedit' ) ),
array( array( 'protect-cantedit' ) ), false ),
'' => array( array( ), array( ), array( ), true ) );
- global $wgUser;
- $wgUser = $this->user;
+
foreach ( array( "edit", "protect", "" ) as $action ) {
$this->setUserPerm( null );
$this->assertEquals( $check[$action][0],
$this->setUserPerm( $action );
$this->assertEquals( $check[$action][3],
- $this->title->userCan( $action, true ) );
+ $this->title->userCan( $action, $this->user, true ) );
$this->assertEquals( $check[$action][3],
- $this->title->quickUserCan( $action ) );
+ $this->title->quickUserCan( $action, $this->user ) );
# count( User::getGroupsWithPermissions( $action ) ) < 1
}
$this->assertEquals( array( ),
$this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
$this->assertEquals( true,
- $this->title->userCan( 'bogus' ) );
+ $this->title->userCan( 'bogus', $this->user ) );
$this->setUserPerm( '' );
$this->assertEquals( array( array( 'badaccess-group0' ) ),
$this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
$this->assertEquals( false,
- $this->title->userCan( 'bogus' ) );
+ $this->title->userCan( 'bogus', $this->user ) );
}
function testCssAndJavascriptPermissions() {
}
function testPageRestrictions() {
- global $wgUser, $wgContLang;
+ global $wgContLang;
$prefix = $wgContLang->getFormattedNsText( NS_PROJECT );
- $wgUser = $this->user;
$this->setTitle( NS_MAIN );
$this->title->mRestrictionsLoaded = true;
$this->setUserPerm( "edit" );
$this->user ) );
$this->assertEquals( true,
- $this->title->quickUserCan( 'edit' ) );
+ $this->title->quickUserCan( 'edit', $this->user ) );
$this->title->mRestrictions = array( "edit" => array( 'bogus', "sysop", "protect", "" ),
"bogus" => array( 'bogus', "sysop", "protect", "" ) );
$this->user ) );
$this->title->mCascadeRestriction = true;
$this->assertEquals( false,
- $this->title->quickUserCan( 'bogus' ) );
+ $this->title->quickUserCan( 'bogus', $this->user ) );
$this->assertEquals( false,
- $this->title->quickUserCan( 'edit' ) );
+ $this->title->quickUserCan( 'edit', $this->user ) );
$this->assertEquals( array( array( 'badaccess-group0' ),
array( 'protectedpagetext', 'bogus' ),
array( 'protectedpagetext', 'protect' ),
}
function testCascadingSourcesRestrictions() {
- global $wgUser;
- $wgUser = $this->user;
$this->setTitle( NS_MAIN, "test page" );
$this->setUserPerm( array( "edit", "bogus" ) );
$this->title->mCascadingRestrictions = array( "bogus" => array( 'bogus', "sysop", "protect", "" ) );
$this->assertEquals( false,
- $this->title->userCan( 'bogus' ) );
+ $this->title->userCan( 'bogus', $this->user ) );
$this->assertEquals( array( array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n" ),
array( "cascadeprotected", 2, "* [[:Bogus]]\n* [[:UnBogus]]\n" ) ),
$this->title->getUserPermissionsErrors( 'bogus', $this->user ) );
$this->assertEquals( true,
- $this->title->userCan( 'edit' ) );
+ $this->title->userCan( 'edit', $this->user ) );
$this->assertEquals( array( ),
$this->title->getUserPermissionsErrors( 'edit', $this->user ) );
}
function testActionPermissions() {
- global $wgUser;
- $wgUser = $this->user;
-
$this->setUserPerm( array( "createpage" ) );
$this->setTitle( NS_MAIN, "test page" );
$this->title->mTitleProtection['pt_create_perm'] = '';
$this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
$this->title->getUserPermissionsErrors( 'create', $this->user ) );
$this->assertEquals( false,
- $this->title->userCan( 'create' ) );
+ $this->title->userCan( 'create', $this->user ) );
$this->title->mTitleProtection['pt_create_perm'] = 'sysop';
$this->setUserPerm( array( 'createpage', 'protect' ) );
$this->assertEquals( array( ),
$this->title->getUserPermissionsErrors( 'create', $this->user ) );
$this->assertEquals( true,
- $this->title->userCan( 'create' ) );
+ $this->title->userCan( 'create', $this->user ) );
$this->setUserPerm( array( 'createpage' ) );
$this->assertEquals( array( array( 'titleprotected', 'Useruser', 'test' ) ),
$this->title->getUserPermissionsErrors( 'create', $this->user ) );
$this->assertEquals( false,
- $this->title->userCan( 'create' ) );
+ $this->title->userCan( 'create', $this->user ) );
$this->setTitle( NS_MEDIA, "test page" );
$this->setUserPerm( array( "move" ) );
$this->assertEquals( false,
- $this->title->userCan( 'move' ) );
+ $this->title->userCan( 'move', $this->user ) );
$this->assertEquals( array( array( 'immobile-source-namespace', 'Media' ) ),
$this->title->getUserPermissionsErrors( 'move', $this->user ) );
$this->assertEquals( array( ),
$this->title->getUserPermissionsErrors( 'move', $this->user ) );
$this->assertEquals( true,
- $this->title->userCan( 'move' ) );
+ $this->title->userCan( 'move', $this->user ) );
$this->title->mInterwiki = "no";
$this->assertEquals( array( array( 'immobile-source-page' ) ),
$this->title->getUserPermissionsErrors( 'move', $this->user ) );
$this->assertEquals( false,
- $this->title->userCan( 'move' ) );
+ $this->title->userCan( 'move', $this->user ) );
$this->setTitle( NS_MEDIA, "test page" );
$this->assertEquals( false,
- $this->title->userCan( 'move-target' ) );
+ $this->title->userCan( 'move-target', $this->user ) );
$this->assertEquals( array( array( 'immobile-target-namespace', 'Media' ) ),
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
$this->assertEquals( array( ),
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
$this->assertEquals( true,
- $this->title->userCan( 'move-target' ) );
+ $this->title->userCan( 'move-target', $this->user ) );
$this->title->mInterwiki = "no";
$this->assertEquals( array( array( 'immobile-target-page' ) ),
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
$this->assertEquals( false,
- $this->title->userCan( 'move-target' ) );
+ $this->title->userCan( 'move-target', $this->user ) );
}
function testUserBlock() {
- global $wgUser, $wgEmailConfirmToEdit, $wgEmailAuthentication;
+ global $wgEmailConfirmToEdit, $wgEmailAuthentication;
$wgEmailConfirmToEdit = true;
$wgEmailAuthentication = true;
- $wgUser = $this->user;
$this->setUserPerm( array( "createpage", "move" ) );
$this->setTitle( NS_HELP, "test page" );
$this->assertEquals( array( array( 'confirmedittext' ) ),
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
$wgEmailConfirmToEdit = false;
- $this->assertEquals( true, $this->title->userCan( 'move-target' ) );
+ $this->assertEquals( true, $this->title->userCan( 'move-target', $this->user ) );
# $wgEmailConfirmToEdit && !$user->isEmailConfirmed() && $action != 'createaccount'
$this->assertEquals( array( ),
$this->title->getUserPermissionsErrors( 'move-target',
$this->user ) );
- $this->assertEquals( false, $this->title->userCan( 'move-target' ) );
+ $this->assertEquals( false, $this->title->userCan( 'move-target', $this->user ) );
// quickUserCan should ignore user blocks
- $this->assertEquals( true, $this->title->quickUserCan( 'move-target' ) );
+ $this->assertEquals( true, $this->title->quickUserCan( 'move-target', $this->user ) );
global $wgLocalTZoffset;
$wgLocalTZoffset = -60;
'Each user rights (core/extensions) has a corresponding right- message.'
);
}
+
+ /**
+ * Test User::editCount
+ * @group medium
+ */
+ public function testEditCount() {
+ $user = User::newFromName( 'UnitTestUser' );
+ $user->loadDefaults();
+ $user->addToDatabase();
+
+ // let the user have a few (3) edits
+ $page = WikiPage::factory( Title::newFromText( 'UserTest_EditCount' ) );
+ for( $i = 0; $i < 3; $i++ ) {
+ $page->doEdit( (string) $i, 'test', 0, false, $user );
+ }
+
+ $user->clearInstanceCache();
+ $this->assertEquals( 3, $user->getEditCount(), 'After three edits, the user edit count should be 3' );
+
+ // increase the edit count and clear the cache
+ $user->incEditCount();
+
+ $user->clearInstanceCache();
+ $this->assertEquals( 4, $user->getEditCount(), 'After increasing the edit count manually, the user edit count should be 4' );
+ }
}
public function testGetParserOutput( $model, $text, $expectedHtml ) {
$page = $this->createPage( 'WikiPageTest_testGetParserOutput', $text, $model );
- $opt = new ParserOptions();
+ $opt = $page->makeParserOptions( 'canonical' );
$po = $page->getParserOutput( $opt );
$text = $po->getText();
return $po;
}
- /**
- * @dataProvider provideGetParserOutput
- */
public function testGetParserOutput_nonexisting( ) {
static $count = 0;
$count ++;
- $page = new WikiPage( new Title( "testGetParserOutput_nonexisting_$count" ) );
+ $page = new WikiPage( new Title( "WikiPageTest_testGetParserOutput_nonexisting_$count" ) );
$opt = new ParserOptions();
$po = $page->getParserOutput( $opt );
$this->assertFalse( $po, "getParserOutput() shall return false for non-existing pages." );
}
+ public function testGetParserOutput_badrev( ) {
+ $page = $this->createPage( 'WikiPageTest_testGetParserOutput', "dummy", CONTENT_MODEL_WIKITEXT );
+
+ $opt = new ParserOptions();
+ $po = $page->getParserOutput( $opt, $page->getLatest() + 1234 );
+
+ //@todo: would be neat to also test deleted revision
+
+ $this->assertFalse( $po, "getParserOutput() shall return false for non-existing revisions." );
+ }
+
static $sections =
"Intro
+++ /dev/null
-<?php
-
-/**
- * @group ContentHandler
- */
-class WikitextContentHandlerTest extends MediaWikiTestCase {
-
- /**
- * @var ContentHandler
- */
- var $handler;
-
- public function setup() {
- $this->handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
- }
-
- public function teardown() {
- }
-
- public function testSerializeContent( ) {
- $content = new WikitextContent( 'hello world' );
-
- $this->assertEquals( 'hello world', $this->handler->serializeContent( $content ) );
- $this->assertEquals( 'hello world', $this->handler->serializeContent( $content, CONTENT_FORMAT_WIKITEXT ) );
-
- try {
- $this->handler->serializeContent( $content, 'dummy/foo' );
- $this->fail( "serializeContent() should have failed on unknown format" );
- } catch ( MWException $e ) {
- // ok, as expected
- }
- }
-
- public function testUnserializeContent( ) {
- $content = $this->handler->unserializeContent( 'hello world' );
- $this->assertEquals( 'hello world', $content->getNativeData() );
-
- $content = $this->handler->unserializeContent( 'hello world', CONTENT_FORMAT_WIKITEXT );
- $this->assertEquals( 'hello world', $content->getNativeData() );
-
- try {
- $this->handler->unserializeContent( 'hello world', 'dummy/foo' );
- $this->fail( "unserializeContent() should have failed on unknown format" );
- } catch ( MWException $e ) {
- // ok, as expected
- }
- }
-
- public function testMakeEmptyContent() {
- $content = $this->handler->makeEmptyContent();
-
- $this->assertTrue( $content->isEmpty() );
- $this->assertEquals( '', $content->getNativeData() );
- }
-
- public function dataIsSupportedFormat( ) {
- return array(
- array( null, true ),
- array( CONTENT_FORMAT_WIKITEXT, true ),
- array( 99887766, false ),
- );
- }
-
- /**
- * @dataProvider dataIsSupportedFormat
- */
- public function testIsSupportedFormat( $format, $supported ) {
- $this->assertEquals( $supported, $this->handler->isSupportedFormat( $format ) );
- }
-
- public function dataMerge3( ) {
- return array(
- array( "first paragraph
-
- second paragraph\n",
-
- "FIRST paragraph
-
- second paragraph\n",
-
- "first paragraph
-
- SECOND paragraph\n",
-
- "FIRST paragraph
-
- SECOND paragraph\n",
- ),
-
- array( "first paragraph
- second paragraph\n",
-
- "Bla bla\n",
-
- "Blubberdibla\n",
-
- false,
- ),
-
- );
- }
-
- /**
- * @dataProvider dataMerge3
- */
- public function testMerge3( $old, $mine, $yours, $expected ) {
- global $wgDiff3;
-
- if ( !$wgDiff3 ) {
- $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is not configured" );
- }
-
- if ( !file_exists( $wgDiff3 ) ) {
- #XXX: this sucks, since it uses arcane internal knowledge about TextContentHandler::merge3 and wfMerge.
- $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is misconfigured: can't find $wgDiff3" );
- }
-
- // test merge
- $oldContent = new WikitextContent( $old );
- $myContent = new WikitextContent( $mine );
- $yourContent = new WikitextContent( $yours );
-
- $merged = $this->handler->merge3( $oldContent, $myContent, $yourContent );
-
- $this->assertEquals( $expected, $merged ? $merged->getNativeData() : $merged );
- }
-
- public function dataGetAutosummary( ) {
- return array(
- array(
- 'Hello there, world!',
- '#REDIRECT [[Foo]]',
- 0,
- '/^Redirected page .*Foo/'
- ),
-
- array(
- null,
- 'Hello world!',
- EDIT_NEW,
- '/^Created page .*Hello/'
- ),
-
- array(
- 'Hello there, world!',
- '',
- 0,
- '/^Blanked/'
- ),
-
- array(
- 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
- labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
- ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
- 'Hello world!',
- 0,
- '/^Replaced .*Hello/'
- ),
-
- array(
- 'foo',
- 'bar',
- 0,
- '/^$/'
- ),
- );
- }
-
- /**
- * @dataProvider dataGetAutoSummary
- */
- public function testGetAutosummary( $old, $new, $flags, $expected ) {
- global $wgLanguageCode, $wgContLang;
-
- $oldContent = is_null( $old ) ? null : new WikitextContent( $old );
- $newContent = is_null( $new ) ? null : new WikitextContent( $new );
-
- $summary = $this->handler->getAutosummary( $oldContent, $newContent, $flags );
-
- $this->assertTrue( (bool)preg_match( $expected, $summary ), "Autosummary didn't match expected pattern $expected: $summary" );
- }
-
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {
- }
- */
-
- /**
- * @todo Text case requires database, should be done by a test class in the Database group
- */
- /*
- public function testGetUndoContent( Revision $current, Revision $undo, Revision $undoafter = null ) {
- }
- */
-
-}
+++ /dev/null
-<?php
-
-/**
- * @group ContentHandler
- *
- * @group Database
- * ^--- needed, because we do need the database to test link updates
- */
-class WikitextContentTest extends TextContentTest {
-
- public function newContent( $text ) {
- return new WikitextContent( $text );
- }
-
- public function dataGetParserOutput() {
- return array(
- array("WikitextContentTest_testGetParserOutput", CONTENT_MODEL_WIKITEXT, "hello ''world''\n", "<p>hello <i>world</i>\n</p>"),
- // @todo: more...?
- );
- }
-
- public function dataGetSecondaryDataUpdates() {
- return array(
- array("WikitextContentTest_testGetSecondaryDataUpdates_1",
- CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
- array( 'LinksUpdate' => array( 'mRecursive' => true,
- 'mLinks' => array() ) )
- ),
- array("WikitextContentTest_testGetSecondaryDataUpdates_2",
- CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
- array( 'LinksUpdate' => array( 'mRecursive' => true,
- 'mLinks' => array( array( 'World_test_21344' => 0 ) ) ) )
- ),
- // @todo: more...?
- );
- }
-
- /**
- * @dataProvider dataGetSecondaryDataUpdates
- * @group Database
- */
- public function testGetSecondaryDataUpdates( $title, $model, $text, $expectedStuff ) {
- $title = Title::newFromText( $title );
- $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
-
- $content = ContentHandler::makeContent( $text, $title, $model );
-
- $updates = $content->getSecondaryDataUpdates( $title );
-
- // make updates accessible by class name
- foreach ( $updates as $update ) {
- $class = get_class( $update );
- $updates[$class] = $update;
- }
-
- foreach ( $expectedStuff as $class => $fieldValues ) {
- $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
-
- $update = $updates[$class];
-
- foreach ( $fieldValues as $field => $value ) {
- $v = $update->$field; #if the field doesn't exist, just crash and burn
- $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
- }
- }
- }
-
-
- static $sections =
-
-"Intro
-
-== stuff ==
-hello world
-
-== test ==
-just a test
-
-== foo ==
-more stuff
-";
-
- public function dataGetSection() {
- return array(
- array( WikitextContentTest::$sections,
- "0",
- "Intro"
- ),
- array( WikitextContentTest::$sections,
- "2",
-"== test ==
-just a test"
- ),
- array( WikitextContentTest::$sections,
- "8",
- false
- ),
- );
- }
-
- /**
- * @dataProvider dataGetSection
- */
- public function testGetSection( $text, $sectionId, $expectedText ) {
- $content = $this->newContent( $text );
-
- $sectionContent = $content->getSection( $sectionId );
- if ( is_object( $sectionContent ) ) {
- $sectionText = $sectionContent->getNativeData();
- } else {
- $sectionText = $sectionContent;
- }
-
- $this->assertEquals( $expectedText, $sectionText );
- }
-
- public function dataReplaceSection() {
- return array(
- array( WikitextContentTest::$sections,
- "0",
- "No more",
- null,
- trim( preg_replace( '/^Intro/sm', 'No more', WikitextContentTest::$sections ) )
- ),
- array( WikitextContentTest::$sections,
- "",
- "No more",
- null,
- "No more"
- ),
- array( WikitextContentTest::$sections,
- "2",
- "== TEST ==\nmore fun",
- null,
- trim( preg_replace( '/^== test ==.*== foo ==/sm', "== TEST ==\nmore fun\n\n== foo ==", WikitextContentTest::$sections ) )
- ),
- array( WikitextContentTest::$sections,
- "8",
- "No more",
- null,
- WikitextContentTest::$sections
- ),
- array( WikitextContentTest::$sections,
- "new",
- "No more",
- "New",
- trim( WikitextContentTest::$sections ) . "\n\n\n== New ==\n\nNo more"
- ),
- );
- }
-
- /**
- * @dataProvider dataReplaceSection
- */
- public function testReplaceSection( $text, $section, $with, $sectionTitle, $expected ) {
- $content = $this->newContent( $text );
- $c = $content->replaceSection( $section, $this->newContent( $with ), $sectionTitle );
-
- $this->assertEquals( $expected, is_null( $c ) ? null : $c->getNativeData() );
- }
-
- public function testAddSectionHeader( ) {
- $content = $this->newContent( 'hello world' );
- $content = $content->addSectionHeader( 'test' );
-
- $this->assertEquals( "== test ==\n\nhello world", $content->getNativeData() );
- }
-
- public function dataPreSaveTransform() {
- return array(
- array( 'hello this is ~~~',
- "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
- ),
- array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
- 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
- ),
- );
- }
-
- public function dataPreloadTransform() {
- return array(
- array( 'hello this is ~~~',
- "hello this is ~~~",
- ),
- array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
- 'hello \'\'this\'\' is bar',
- ),
- );
- }
-
- public function dataGetRedirectTarget() {
- return array(
- array( '#REDIRECT [[Test]]',
- 'Test',
- ),
- array( '#REDIRECT Test',
- null,
- ),
- array( '* #REDIRECT [[Test]]',
- null,
- ),
- );
- }
-
- public function dataGetTextForSummary() {
- return array(
- array( "hello\nworld.",
- 16,
- 'hello world.',
- ),
- array( 'hello world.',
- 8,
- 'hello...',
- ),
- array( '[[hello world]].',
- 8,
- 'hel...',
- ),
- );
- }
-
- /**
- * @todo: test needs database! Should be done by a test class in the Database group.
- */
- /*
- public function getRedirectChain() {
- $text = $this->getNativeData();
- return Title::newFromRedirectArray( $text );
- }
- */
-
- /**
- * @todo: test needs database! Should be done by a test class in the Database group.
- */
- /*
- public function getUltimateRedirectTarget() {
- $text = $this->getNativeData();
- return Title::newFromRedirectRecurse( $text );
- }
- */
-
-
- public function dataIsCountable() {
- return array(
- array( '',
- null,
- 'any',
- true
- ),
- array( 'Foo',
- null,
- 'any',
- true
- ),
- array( 'Foo',
- null,
- 'comma',
- false
- ),
- array( 'Foo, bar',
- null,
- 'comma',
- true
- ),
- array( 'Foo',
- null,
- 'link',
- false
- ),
- array( 'Foo [[bar]]',
- null,
- 'link',
- true
- ),
- array( 'Foo',
- true,
- 'link',
- true
- ),
- array( 'Foo [[bar]]',
- false,
- 'link',
- false
- ),
- array( '#REDIRECT [[bar]]',
- true,
- 'any',
- false
- ),
- array( '#REDIRECT [[bar]]',
- true,
- 'comma',
- false
- ),
- array( '#REDIRECT [[bar]]',
- true,
- 'link',
- false
- ),
- );
- }
-
- public function testMatchMagicWord( ) {
- $mw = MagicWord::get( "staticredirect" );
-
- $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
- $this->assertTrue( $content->matchMagicWord( $mw ), "should have matched magic word" );
-
- $content = $this->newContent( "#REDIRECT [[FOO]]" );
- $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word" );
- }
-
- public function testUpdateRedirect( ) {
- $target = Title::newFromText( "testUpdateRedirect_target" );
-
- // test with non-redirect page
- $content = $this->newContent( "hello world." );
- $newContent = $content->updateRedirect( $target );
-
- $this->assertTrue( $content->equals( $newContent ), "content should be unchanged" );
-
- // test with actual redirect
- $content = $this->newContent( "#REDIRECT [[Someplace]]" );
- $newContent = $content->updateRedirect( $target );
-
- $this->assertFalse( $content->equals( $newContent ), "content should have changed" );
- $this->assertTrue( $newContent->isRedirect(), "new content should be a redirect" );
-
- $this->assertEquals( $target->getFullText(), $newContent->getRedirectTarget()->getFullText() );
- }
-
- # =================================================================================================================
-
- public function testGetModel() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getModel() );
- }
-
- public function testGetContentHandler() {
- $content = $this->newContent( "hello world." );
-
- $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getContentHandler()->getModelID() );
- }
-
- public function dataEquals( ) {
- return array(
- array( new WikitextContent( "hallo" ), null, false ),
- array( new WikitextContent( "hallo" ), new WikitextContent( "hallo" ), true ),
- array( new WikitextContent( "hallo" ), new JavascriptContent( "hallo" ), false ),
- array( new WikitextContent( "hallo" ), new TextContent( "hallo" ), false ),
- array( new WikitextContent( "hallo" ), new WikitextContent( "HALLO" ), false ),
- );
- }
-
- public function dataGetDeletionUpdates() {
- return array(
- array("WikitextContentTest_testGetSecondaryDataUpdates_1",
- CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
- array( 'LinksDeletionUpdate' => array( ) )
- ),
- array("WikitextContentTest_testGetSecondaryDataUpdates_2",
- CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
- array( 'LinksDeletionUpdate' => array( ) )
- ),
- // @todo: more...?
- );
- }
-
-}
protected $select;
protected function setUp() {
+ parent::setUp();
$this->select = new XmlSelect();
}
protected function tearDown() {
+ parent::tearDown();
$this->select = null;
}
var $zipDir, $entries;
protected function setUp() {
+ parent::setUp();
$this->zipDir = __DIR__ . '/../data/zip';
}
--- /dev/null
+<?php
+
+/**
+ * @group ContentHandler
+ * @group Database
+ *
+ * @note Declare that we are using the database, because otherwise we'll fail in the "databaseless" test run.
+ * This is because the LinkHolderArray used by the parser needs database access.
+ *
+ */
+class ContentHandlerTest extends MediaWikiTestCase {
+
+ public function setup() {
+ global $wgContLang;
+ parent::setup();
+
+ $this->setMwGlobals( array(
+ 'wgExtraNamespaces' => array(
+ 12312 => 'Dummy',
+ 12313 => 'Dummy_talk',
+ ),
+ // The below tests assume that namespaces not mentioned here (Help, User, MediaWiki, ..)
+ // default to CONTENT_MODEL_WIKITEXT.
+ 'wgNamespaceContentModels' => array(
+ 12312 => 'testing',
+ ),
+ 'wgContentHandlers' => array(
+ CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler',
+ CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler',
+ CONTENT_MODEL_CSS => 'CssContentHandler',
+ CONTENT_MODEL_TEXT => 'TextContentHandler',
+ 'testing' => 'DummyContentHandlerForTesting',
+ ),
+ ) );
+
+ // Reset namespace cache
+ MWNamespace::getCanonicalNamespaces( true );
+ $wgContLang->resetNamespaces();
+ }
+
+ public function tearDown() {
+ global $wgContLang;
+
+ // Reset namespace cache
+ MWNamespace::getCanonicalNamespaces( true );
+ $wgContLang->resetNamespaces();
+
+ parent::tearDown();
+ }
+
+ public static function dataGetDefaultModelFor() {
+ return array(
+ array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ),
+ array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ),
+ array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
+ array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
+ array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
+ array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
+ array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
+ array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
+ array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
+ array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+ array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetDefaultModelFor
+ */
+ public function testGetDefaultModelFor( $title, $expectedModelId ) {
+ $title = Title::newFromText( $title );
+ $this->assertEquals( $expectedModelId, ContentHandler::getDefaultModelFor( $title ) );
+ }
+
+ /**
+ * @dataProvider dataGetDefaultModelFor
+ */
+ public function testGetForTitle( $title, $expectedContentModel ) {
+ $title = Title::newFromText( $title );
+ $handler = ContentHandler::getForTitle( $title );
+ $this->assertEquals( $expectedContentModel, $handler->getModelID() );
+ }
+
+ public static function dataGetLocalizedName() {
+ return array(
+ array( null, null ),
+ array( "xyzzy", null ),
+
+ // XXX: depends on content language
+ array( CONTENT_MODEL_JAVASCRIPT, '/javascript/i' ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetLocalizedName
+ */
+ public function testGetLocalizedName( $id, $expected ) {
+ $name = ContentHandler::getLocalizedName( $id );
+
+ if ( $expected ) {
+ $this->assertNotNull( $name, "no name found for content model $id" );
+ $this->assertTrue( preg_match( $expected, $name ) > 0 ,
+ "content model name for #$id did not match pattern $expected"
+ );
+ } else {
+ $this->assertEquals( $id, $name, "localization of unknown model $id should have "
+ . "fallen back to use the model id directly."
+ );
+ }
+ }
+
+ public static function dataGetPageLanguage() {
+ global $wgLanguageCode;
+
+ return array(
+ array( "Main", $wgLanguageCode ),
+ array( "Dummy:Foo", $wgLanguageCode ),
+ array( "MediaWiki:common.js", 'en' ),
+ array( "User:Foo/common.js", 'en' ),
+ array( "MediaWiki:common.css", 'en' ),
+ array( "User:Foo/common.css", 'en' ),
+ array( "User:Foo", $wgLanguageCode ),
+
+ array( CONTENT_MODEL_JAVASCRIPT, 'javascript' ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetPageLanguage
+ */
+ public function testGetPageLanguage( $title, $expected ) {
+ if ( is_string( $title ) ) {
+ $title = Title::newFromText( $title );
+ }
+
+ $expected = wfGetLangObj( $expected );
+
+ $handler = ContentHandler::getForTitle( $title );
+ $lang = $handler->getPageLanguage( $title );
+
+ $this->assertEquals( $expected->getCode(), $lang->getCode() );
+ }
+
+ public function testGetContentText_Null( ) {
+ global $wgContentHandlerTextFallback;
+
+ $content = null;
+
+ $wgContentHandlerTextFallback = 'fail';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( '', $text );
+
+ $wgContentHandlerTextFallback = 'serialize';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( '', $text );
+
+ $wgContentHandlerTextFallback = 'ignore';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( '', $text );
+ }
+
+ public function testGetContentText_TextContent( ) {
+ global $wgContentHandlerTextFallback;
+
+ $content = new WikitextContent( "hello world" );
+
+ $wgContentHandlerTextFallback = 'fail';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->getNativeData(), $text );
+
+ $wgContentHandlerTextFallback = 'serialize';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->serialize(), $text );
+
+ $wgContentHandlerTextFallback = 'ignore';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->getNativeData(), $text );
+ }
+
+ public function testGetContentText_NonTextContent( ) {
+ global $wgContentHandlerTextFallback;
+
+ $content = new DummyContentForTesting( "hello world" );
+
+ $wgContentHandlerTextFallback = 'fail';
+
+ try {
+ $text = ContentHandler::getContentText( $content );
+
+ $this->fail( "ContentHandler::getContentText should have thrown an exception for non-text Content object" );
+ } catch ( MWException $ex ) {
+ // as expected
+ }
+
+ $wgContentHandlerTextFallback = 'serialize';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertEquals( $content->serialize(), $text );
+
+ $wgContentHandlerTextFallback = 'ignore';
+ $text = ContentHandler::getContentText( $content );
+ $this->assertNull( $text );
+ }
+
+ /*
+ public static function makeContent( $text, Title $title, $modelId = null, $format = null ) {}
+ */
+
+ public static function dataMakeContent() {
+ return array(
+ array( 'hallo', 'Help:Test', null, null, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
+ array( 'hallo', 'MediaWiki:Test.js', null, null, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
+ array( serialize('hallo'), 'Dummy:Test', null, null, "testing", 'hallo', false ),
+
+ array( 'hallo', 'Help:Test', null, CONTENT_FORMAT_WIKITEXT, CONTENT_MODEL_WIKITEXT, 'hallo', false ),
+ array( 'hallo', 'MediaWiki:Test.js', null, CONTENT_FORMAT_JAVASCRIPT, CONTENT_MODEL_JAVASCRIPT, 'hallo', false ),
+ array( serialize('hallo'), 'Dummy:Test', null, "testing", "testing", 'hallo', false ),
+
+ array( 'hallo', 'Help:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
+ array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, 'hallo', false ),
+ array( serialize('hallo'), 'Dummy:Test', CONTENT_MODEL_CSS, null, CONTENT_MODEL_CSS, serialize('hallo'), false ),
+
+ array( 'hallo', 'Help:Test', CONTENT_MODEL_WIKITEXT, "testing", null, null, true ),
+ array( 'hallo', 'MediaWiki:Test.js', CONTENT_MODEL_CSS, "testing", null, null, true ),
+ array( 'hallo', 'Dummy:Test', CONTENT_MODEL_JAVASCRIPT, "testing", null, null, true ),
+ );
+ }
+
+ /**
+ * @dataProvider dataMakeContent
+ */
+ public function testMakeContent( $data, $title, $modelId, $format, $expectedModelId, $expectedNativeData, $shouldFail ) {
+ global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContentHandlers;
+
+ $title = Title::newFromText( $title );
+
+ try {
+ $content = ContentHandler::makeContent( $data, $title, $modelId, $format );
+
+ if ( $shouldFail ) {
+ $this->fail( "ContentHandler::makeContent should have failed!" );
+ }
+
+ $this->assertEquals( $expectedModelId, $content->getModel(), 'bad model id' );
+ $this->assertEquals( $expectedNativeData, $content->getNativeData(), 'bads native data' );
+ } catch ( MWException $ex ) {
+ if ( !$shouldFail ) $this->fail( "ContentHandler::makeContent failed unexpectedly: " . $ex->getMessage() );
+ else $this->assertTrue( true ); // dummy, so we don't get the "test did not perform any assertions" message.
+ }
+
+ }
+
+ /*
+ public function testSupportsSections() {
+ $this->markTestIncomplete( "not yet implemented" );
+ }
+ */
+
+ public function testRunLegacyHooks() {
+ Hooks::register( 'testRunLegacyHooks', __CLASS__ . '::dummyHookHandler' );
+
+ $content = new WikitextContent( 'test text' );
+ $ok = ContentHandler::runLegacyHooks( 'testRunLegacyHooks', array( 'foo', &$content, 'bar' ), false );
+
+ $this->assertTrue( $ok, "runLegacyHooks should have returned true" );
+ $this->assertEquals( "TEST TEXT", $content->getNativeData() );
+ }
+
+ public static function dummyHookHandler( $foo, &$text, $bar ) {
+ if ( $text === null || $text === false ) {
+ return false;
+ }
+
+ $text = strtoupper( $text );
+
+ return true;
+ }
+}
+
+class DummyContentHandlerForTesting extends ContentHandler {
+
+ public function __construct( $dataModel ) {
+ parent::__construct( $dataModel, array( "testing" ) );
+ }
+
+ /**
+ * Serializes Content object of the type supported by this ContentHandler.
+ *
+ * @param Content $content the Content object to serialize
+ * @param null $format the desired serialization format
+ * @return String serialized form of the content
+ */
+ public function serializeContent( Content $content, $format = null ) {
+ return $content->serialize();
+ }
+
+ /**
+ * Unserializes a Content object of the type supported by this ContentHandler.
+ *
+ * @param $blob String serialized form of the content
+ * @param null $format the format used for serialization
+ * @return Content the Content object created by deserializing $blob
+ */
+ public function unserializeContent( $blob, $format = null ) {
+ $d = unserialize( $blob );
+ return new DummyContentForTesting( $d );
+ }
+
+ /**
+ * Creates an empty Content object of the type supported by this ContentHandler.
+ *
+ */
+ public function makeEmptyContent() {
+ return new DummyContentForTesting( '' );
+ }
+}
+
+class DummyContentForTesting extends AbstractContent {
+
+ public function __construct( $data ) {
+ parent::__construct( "testing" );
+
+ $this->data = $data;
+ }
+
+ public function serialize( $format = null ) {
+ return serialize( $this->data );
+ }
+
+ /**
+ * @return String a string representing the content in a way useful for building a full text search index.
+ * If no useful representation exists, this method returns an empty string.
+ */
+ public function getTextForSearchIndex() {
+ return '';
+ }
+
+ /**
+ * @return String the wikitext to include when another page includes this content, or false if the content is not
+ * includable in a wikitext page.
+ */
+ public function getWikitextForTransclusion() {
+ return false;
+ }
+
+ /**
+ * Returns a textual representation of the content suitable for use in edit summaries and log messages.
+ *
+ * @param int $maxlength Maximum length of the summary text.
+ * @return string The summary text.
+ */
+ public function getTextForSummary( $maxlength = 250 ) {
+ return '';
+ }
+
+ /**
+ * Returns native represenation of the data. Interpretation depends on the data model used,
+ * as given by getDataModel().
+ *
+ * @return mixed the native representation of the content. Could be a string, a nested array
+ * structure, an object, a binary blob... anything, really.
+ */
+ public function getNativeData()
+ {
+ return $this->data;
+ }
+
+ /**
+ * returns the content's nominal size in bogo-bytes.
+ *
+ * @return int
+ */
+ public function getSize() {
+ return strlen( $this->data );
+ }
+
+ /**
+ * Return a copy of this Content object. The following must be true for the object returned
+ * if $copy = $original->copy()
+ *
+ * * get_class($original) === get_class($copy)
+ * * $original->getModel() === $copy->getModel()
+ * * $original->equals( $copy )
+ *
+ * If and only if the Content object is imutable, the copy() method can and should
+ * return $this. That is, $copy === $original may be true, but only for imutable content
+ * objects.
+ *
+ * @return Content. A copy of this object.
+ */
+ public function copy() {
+ return $this;
+ }
+
+ /**
+ * Returns true if this content is countable as a "real" wiki page, provided
+ * that it's also in a countable location (e.g. a current revision in the main namespace).
+ *
+ * @param boolean $hasLinks if it is known whether this content contains links, provide this information here,
+ * to avoid redundant parsing to find out.
+ * @return boolean
+ */
+ public function isCountable( $hasLinks = null ) {
+ return false;
+ }
+
+ /**
+ * @param Title $title
+ * @param null $revId
+ * @param null|ParserOptions $options
+ * @param boolean $generateHtml whether to generate Html (default: true). If false,
+ * the result of calling getText() on the ParserOutput object returned by
+ * this method is undefined.
+ *
+ * @return ParserOutput
+ */
+ public function getParserOutput( Title $title, $revId = null, ParserOptions $options = NULL, $generateHtml = true ) {
+ return new ParserOutput( $this->getNativeData() );
+ }
+}
--- /dev/null
+<?php
+
+/**
+ * @group ContentHandler
+ * @group Database
+ * ^--- needed, because we do need the database to test link updates
+ */
+class CssContentTest extends MediaWikiTestCase {
+
+ protected function setUp() {
+ parent::setUp();
+
+ // Anon user
+ $user = new User();
+ $user->setName( '127.0.0.1' );
+
+ $this->setMwGlobals( array(
+ 'wgUser' => $user,
+ 'wgTextModelsToParse' => array(
+ CONTENT_MODEL_CSS,
+ )
+ ) );
+ }
+
+ public function newContent( $text ) {
+ return new CssContent( $text );
+ }
+
+ public static function dataGetParserOutput() {
+ return array(
+ array(
+ 'MediaWiki:Test.css',
+ null,
+ "hello <world>\n",
+ "<pre class=\"mw-code mw-css\" dir=\"ltr\">\nhello <world>\n\n</pre>"
+ ),
+ array(
+ 'MediaWiki:Test.css',
+ null,
+ "/* hello [[world]] */\n",
+ "<pre class=\"mw-code mw-css\" dir=\"ltr\">\n/* hello [[world]] */\n\n</pre>",
+ array(
+ 'Links' => array(
+ array( 'World' => 0 )
+ )
+ )
+ ),
+
+ // TODO: more...?
+ );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( CONTENT_MODEL_CSS, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( CONTENT_MODEL_CSS, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataEquals( ) {
+ return array(
+ array( new CssContent( 'hallo' ), null, false ),
+ array( new CssContent( 'hallo' ), new CssContent( 'hallo' ), true ),
+ array( new CssContent( 'hallo' ), new WikitextContent( 'hallo' ), false ),
+ array( new CssContent( 'hallo' ), new CssContent( 'HALLO' ), false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataEquals
+ */
+ public function testEquals( Content $a, Content $b = null, $equal = false ) {
+ $this->assertEquals( $equal, $a->equals( $b ) );
+ }
+
+}
--- /dev/null
+<?php
+
+/**
+ * @group ContentHandler
+ * @group Database
+ * ^--- needed, because we do need the database to test link updates
+ */
+class JavascriptContentTest extends TextContentTest {
+
+ public function newContent( $text ) {
+ return new JavascriptContent( $text );
+ }
+
+ public static function dataGetParserOutput() {
+ return array(
+ array(
+ 'MediaWiki:Test.js',
+ null,
+ "hello <world>\n",
+ "<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello <world>\n\n</pre>"
+ ),
+ array(
+ 'MediaWiki:Test.js',
+ null,
+ "hello(); // [[world]]\n",
+ "<pre class=\"mw-code mw-js\" dir=\"ltr\">\nhello(); // [[world]]\n\n</pre>",
+ array(
+ 'Links' => array(
+ array( 'World' => 0 )
+ )
+ )
+ ),
+
+ // TODO: more...?
+ );
+ }
+
+ // XXX: Unused function
+ public static function dataGetSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ '0',
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '2',
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '8',
+ null
+ ),
+ );
+ }
+
+ // XXX: Unused function
+ public static function dataReplaceSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ '0',
+ 'No more',
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '',
+ 'No more',
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '2',
+ "== TEST ==\nmore fun",
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ '8',
+ 'No more',
+ null,
+ null
+ ),
+ array( WikitextContentTest::$sections,
+ 'new',
+ 'No more',
+ 'New',
+ null
+ ),
+ );
+ }
+
+ public function testAddSectionHeader( ) {
+ $content = $this->newContent( 'hello world' );
+ $c = $content->addSectionHeader( 'test' );
+
+ $this->assertTrue( $content->equals( $c ) );
+ }
+
+ // XXX: currently, preSaveTransform is applied to scripts. this may change or become optional.
+ public static function dataPreSaveTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
+ ),
+ array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+ 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+ ),
+ array( " Foo \n ",
+ " Foo",
+ ),
+ );
+ }
+
+ public static function dataPreloadTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ 'hello this is ~~~',
+ ),
+ array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
+ 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
+ ),
+ );
+ }
+
+ public static function dataGetRedirectTarget() {
+ return array(
+ array( '#REDIRECT [[Test]]',
+ null,
+ ),
+ array( '#REDIRECT Test',
+ null,
+ ),
+ array( '* #REDIRECT [[Test]]',
+ null,
+ ),
+ );
+ }
+
+ /**
+ * @todo: test needs database!
+ */
+ /*
+ public function getRedirectChain() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectArray( $text );
+ }
+ */
+
+ /**
+ * @todo: test needs database!
+ */
+ /*
+ public function getUltimateRedirectTarget() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectRecurse( $text );
+ }
+ */
+
+ public static function dataIsCountable() {
+ return array(
+ array( '',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo, bar',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo',
+ null,
+ 'link',
+ false
+ ),
+ array( 'Foo [[bar]]',
+ null,
+ 'link',
+ false
+ ),
+ array( 'Foo',
+ true,
+ 'link',
+ false
+ ),
+ array( 'Foo [[bar]]',
+ false,
+ 'link',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'any',
+ true
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'comma',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'link',
+ false
+ ),
+ );
+ }
+
+ public static function dataGetTextForSummary() {
+ return array(
+ array( "hello\nworld.",
+ 16,
+ 'hello world.',
+ ),
+ array( 'hello world.',
+ 8,
+ 'hello...',
+ ),
+ array( '[[hello world]].',
+ 8,
+ '[[hel...',
+ ),
+ );
+ }
+
+ public function testMatchMagicWord( ) {
+ $mw = MagicWord::get( "staticredirect" );
+
+ $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
+ $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word, since it's not wikitext" );
+ }
+
+ public function testUpdateRedirect( ) {
+ $target = Title::newFromText( "testUpdateRedirect_target" );
+
+ $content = $this->newContent( "#REDIRECT [[Someplace]]" );
+ $newContent = $content->updateRedirect( $target );
+
+ $this->assertTrue( $content->equals( $newContent ), "content should be unchanged since it's not wikitext" );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataEquals( ) {
+ return array(
+ array( new JavascriptContent( "hallo" ), null, false ),
+ array( new JavascriptContent( "hallo" ), new JavascriptContent( "hallo" ), true ),
+ array( new JavascriptContent( "hallo" ), new CssContent( "hallo" ), false ),
+ array( new JavascriptContent( "hallo" ), new JavascriptContent( "HALLO" ), false ),
+ );
+ }
+
+}
--- /dev/null
+<?php
+
+/**
+ * @group ContentHandler
+ * @group Database
+ * ^--- needed, because we do need the database to test link updates
+ */
+class TextContentTest extends MediaWikiTestCase {
+ protected $context;
+
+ protected function setUp() {
+ parent::setUp();
+
+ // Anon user
+ $user = new User();
+ $user->setName( '127.0.0.1' );
+
+ $this->setMwGlobals( array(
+ 'wgUser' => $user,
+ 'wgTextModelsToParse' => array(
+ CONTENT_MODEL_WIKITEXT,
+ CONTENT_MODEL_CSS,
+ CONTENT_MODEL_JAVASCRIPT,
+ )
+ ) );
+
+ $this->context = new RequestContext( new FauxRequest() );
+ $this->context->setTitle( Title::newFromText( 'Test' ) );
+ $this->context->setUser( $user );
+ }
+
+ public function newContent( $text ) {
+ return new TextContent( $text );
+ }
+
+ public static function dataGetParserOutput() {
+ return array(
+ array(
+ 'TextContentTest_testGetParserOutput',
+ CONTENT_MODEL_TEXT,
+ "hello ''world'' & [[stuff]]\n", "hello ''world'' & [[stuff]]",
+ array(
+ 'Links' => array()
+ )
+ ),
+ // TODO: more...?
+ );
+ }
+
+ /**
+ * @dataProvider dataGetParserOutput
+ */
+ public function testGetParserOutput( $title, $model, $text, $expectedHtml, $expectedFields = null ) {
+ $title = Title::newFromText( $title );
+ $content = ContentHandler::makeContent( $text, $title, $model );
+
+ $po = $content->getParserOutput( $title );
+
+ $html = $po->getText();
+ $html = preg_replace( '#<!--.*?-->#sm', '', $html ); // strip comments
+
+ $this->assertEquals( $expectedHtml, trim( $html ) );
+
+ if ( $expectedFields ) {
+ foreach ( $expectedFields as $field => $exp ) {
+ $f = 'get' . ucfirst( $field );
+ $v = call_user_func( array( $po, $f ) );
+
+ if ( is_array( $exp ) ) {
+ $this->assertArrayEquals( $exp, $v );
+ } else {
+ $this->assertEquals( $exp, $v );
+ }
+ }
+ }
+
+ // TODO: assert more properties
+ }
+
+ public static function dataPreSaveTransform() {
+ return array(
+ array(
+ #0: no signature resolution
+ 'hello this is ~~~',
+ 'hello this is ~~~',
+ ),
+ array(
+ #1: rtrim
+ " Foo \n ",
+ ' Foo',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataPreSaveTransform
+ */
+ public function testPreSaveTransform( $text, $expected ) {
+ global $wgContLang;
+
+ $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+
+ $content = $this->newContent( $text );
+ $content = $content->preSaveTransform( $this->context->getTitle(), $this->context->getUser(), $options );
+
+ $this->assertEquals( $expected, $content->getNativeData() );
+ }
+
+ public static function dataPreloadTransform() {
+ return array(
+ array(
+ 'hello this is ~~~',
+ 'hello this is ~~~',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataPreloadTransform
+ */
+ public function testPreloadTransform( $text, $expected ) {
+ global $wgContLang;
+ $options = ParserOptions::newFromUserAndLang( $this->context->getUser(), $wgContLang );
+
+ $content = $this->newContent( $text );
+ $content = $content->preloadTransform( $this->context->getTitle(), $options );
+
+ $this->assertEquals( $expected, $content->getNativeData() );
+ }
+
+ public static function dataGetRedirectTarget() {
+ return array(
+ array( '#REDIRECT [[Test]]',
+ null,
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetRedirectTarget
+ */
+ public function testGetRedirectTarget( $text, $expected ) {
+ $content = $this->newContent( $text );
+ $t = $content->getRedirectTarget( );
+
+ if ( is_null( $expected ) ) {
+ $this->assertNull( $t, "text should not have generated a redirect target: $text" );
+ } else {
+ $this->assertEquals( $expected, $t->getPrefixedText() );
+ }
+ }
+
+ /**
+ * @dataProvider dataGetRedirectTarget
+ */
+ public function testIsRedirect( $text, $expected ) {
+ $content = $this->newContent( $text );
+
+ $this->assertEquals( !is_null($expected), $content->isRedirect() );
+ }
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getRedirectChain() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectArray( $text );
+ }
+ */
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getUltimateRedirectTarget() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectRecurse( $text );
+ }
+ */
+
+ public static function dataIsCountable() {
+ return array(
+ array( '',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo, bar',
+ null,
+ 'comma',
+ false
+ ),
+ );
+ }
+
+
+ /**
+ * @dataProvider dataIsCountable
+ * @group Database
+ */
+ public function testIsCountable( $text, $hasLinks, $mode, $expected ) {
+ global $wgArticleCountMethod;
+
+ $old = $wgArticleCountMethod;
+ $wgArticleCountMethod = $mode;
+
+ $content = $this->newContent( $text );
+
+ $v = $content->isCountable( $hasLinks, $this->context->getTitle() );
+ $wgArticleCountMethod = $old;
+
+ $this->assertEquals( $expected, $v, 'isCountable() returned unexpected value ' . var_export( $v, true )
+ . ' instead of ' . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
+ }
+
+ public static function dataGetTextForSummary() {
+ return array(
+ array( "hello\nworld.",
+ 16,
+ 'hello world.',
+ ),
+ array( 'hello world.',
+ 8,
+ 'hello...',
+ ),
+ array( '[[hello world]].',
+ 8,
+ '[[hel...',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetTextForSummary
+ */
+ public function testGetTextForSummary( $text, $maxlength, $expected ) {
+ $content = $this->newContent( $text );
+
+ $this->assertEquals( $expected, $content->getTextForSummary( $maxlength ) );
+ }
+
+
+ public function testGetTextForSearchIndex( ) {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 'hello world.', $content->getTextForSearchIndex() );
+ }
+
+ public function testCopy() {
+ $content = $this->newContent( 'hello world.' );
+ $copy = $content->copy();
+
+ $this->assertTrue( $content->equals( $copy ), 'copy must be equal to original' );
+ $this->assertEquals( 'hello world.', $copy->getNativeData() );
+ }
+
+ public function testGetSize( ) {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 12, $content->getSize() );
+ }
+
+ public function testGetNativeData( ) {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 'hello world.', $content->getNativeData() );
+ }
+
+ public function testGetWikitextForTransclusion( ) {
+ $content = $this->newContent( 'hello world.' );
+
+ $this->assertEquals( 'hello world.', $content->getWikitextForTransclusion() );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_TEXT, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_TEXT, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataIsEmpty( ) {
+ return array(
+ array( '', true ),
+ array( ' ', false ),
+ array( '0', false ),
+ array( 'hallo welt.', false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataIsEmpty
+ */
+ public function testIsEmpty( $text, $empty ) {
+ $content = $this->newContent( $text );
+
+ $this->assertEquals( $empty, $content->isEmpty() );
+ }
+
+ public static function dataEquals( ) {
+ return array(
+ array( new TextContent( "hallo" ), null, false ),
+ array( new TextContent( "hallo" ), new TextContent( "hallo" ), true ),
+ array( new TextContent( "hallo" ), new JavascriptContent( "hallo" ), false ),
+ array( new TextContent( "hallo" ), new WikitextContent( "hallo" ), false ),
+ array( new TextContent( "hallo" ), new TextContent( "HALLO" ), false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataEquals
+ */
+ public function testEquals( Content $a, Content $b = null, $equal = false ) {
+ $this->assertEquals( $equal, $a->equals( $b ) );
+ }
+
+ public static function dataGetDeletionUpdates() {
+ return array(
+ array("TextContentTest_testGetSecondaryDataUpdates_1",
+ CONTENT_MODEL_TEXT, "hello ''world''\n",
+ array( )
+ ),
+ array("TextContentTest_testGetSecondaryDataUpdates_2",
+ CONTENT_MODEL_TEXT, "hello [[world test 21344]]\n",
+ array( )
+ ),
+ // TODO: more...?
+ );
+ }
+
+ /**
+ * @dataProvider dataGetDeletionUpdates
+ */
+ public function testDeletionUpdates( $title, $model, $text, $expectedStuff ) {
+ $title = Title::newFromText( $title );
+ $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+
+ $content = ContentHandler::makeContent( $text, $title, $model );
+
+ $updates = $content->getDeletionUpdates( WikiPage::factory( $title ) );
+
+ // make updates accessible by class name
+ foreach ( $updates as $update ) {
+ $class = get_class( $update );
+ $updates[ $class ] = $update;
+ }
+
+ if ( !$expectedStuff ) {
+ $this->assertTrue( true ); // make phpunit happy
+ return;
+ }
+
+ foreach ( $expectedStuff as $class => $fieldValues ) {
+ $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
+
+ $update = $updates[ $class ];
+
+ foreach ( $fieldValues as $field => $value ) {
+ $v = $update->$field; #if the field doesn't exist, just crash and burn
+ $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
+ }
+ }
+ }
+
+}
--- /dev/null
+<?php
+
+/**
+ * @group ContentHandler
+ */
+class WikitextContentHandlerTest extends MediaWikiTestCase {
+
+ /**
+ * @var ContentHandler
+ */
+ var $handler;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->handler = ContentHandler::getForModelID( CONTENT_MODEL_WIKITEXT );
+ }
+
+ public function testSerializeContent( ) {
+ $content = new WikitextContent( 'hello world' );
+
+ $this->assertEquals( 'hello world', $this->handler->serializeContent( $content ) );
+ $this->assertEquals( 'hello world', $this->handler->serializeContent( $content, CONTENT_FORMAT_WIKITEXT ) );
+
+ try {
+ $this->handler->serializeContent( $content, 'dummy/foo' );
+ $this->fail( "serializeContent() should have failed on unknown format" );
+ } catch ( MWException $e ) {
+ // ok, as expected
+ }
+ }
+
+ public function testUnserializeContent( ) {
+ $content = $this->handler->unserializeContent( 'hello world' );
+ $this->assertEquals( 'hello world', $content->getNativeData() );
+
+ $content = $this->handler->unserializeContent( 'hello world', CONTENT_FORMAT_WIKITEXT );
+ $this->assertEquals( 'hello world', $content->getNativeData() );
+
+ try {
+ $this->handler->unserializeContent( 'hello world', 'dummy/foo' );
+ $this->fail( "unserializeContent() should have failed on unknown format" );
+ } catch ( MWException $e ) {
+ // ok, as expected
+ }
+ }
+
+ public function testMakeEmptyContent() {
+ $content = $this->handler->makeEmptyContent();
+
+ $this->assertTrue( $content->isEmpty() );
+ $this->assertEquals( '', $content->getNativeData() );
+ }
+
+ public static function dataIsSupportedFormat( ) {
+ return array(
+ array( null, true ),
+ array( CONTENT_FORMAT_WIKITEXT, true ),
+ array( 99887766, false ),
+ );
+ }
+
+ /**
+ * @dataProvider dataIsSupportedFormat
+ */
+ public function testIsSupportedFormat( $format, $supported ) {
+ $this->assertEquals( $supported, $this->handler->isSupportedFormat( $format ) );
+ }
+
+ public static function dataMerge3( ) {
+ return array(
+ array( "first paragraph
+
+ second paragraph\n",
+
+ "FIRST paragraph
+
+ second paragraph\n",
+
+ "first paragraph
+
+ SECOND paragraph\n",
+
+ "FIRST paragraph
+
+ SECOND paragraph\n",
+ ),
+
+ array( "first paragraph
+ second paragraph\n",
+
+ "Bla bla\n",
+
+ "Blubberdibla\n",
+
+ false,
+ ),
+
+ );
+ }
+
+ /**
+ * @dataProvider dataMerge3
+ */
+ public function testMerge3( $old, $mine, $yours, $expected ) {
+ global $wgDiff3;
+
+ if ( !$wgDiff3 ) {
+ $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is not configured" );
+ }
+
+ if ( !file_exists( $wgDiff3 ) ) {
+ #XXX: this sucks, since it uses arcane internal knowledge about TextContentHandler::merge3 and wfMerge.
+ $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is misconfigured: can't find $wgDiff3" );
+ }
+
+ // test merge
+ $oldContent = new WikitextContent( $old );
+ $myContent = new WikitextContent( $mine );
+ $yourContent = new WikitextContent( $yours );
+
+ $merged = $this->handler->merge3( $oldContent, $myContent, $yourContent );
+
+ $this->assertEquals( $expected, $merged ? $merged->getNativeData() : $merged );
+ }
+
+ public static function dataGetAutosummary( ) {
+ return array(
+ array(
+ 'Hello there, world!',
+ '#REDIRECT [[Foo]]',
+ 0,
+ '/^Redirected page .*Foo/'
+ ),
+
+ array(
+ null,
+ 'Hello world!',
+ EDIT_NEW,
+ '/^Created page .*Hello/'
+ ),
+
+ array(
+ 'Hello there, world!',
+ '',
+ 0,
+ '/^Blanked/'
+ ),
+
+ array(
+ 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut
+ labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et
+ ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.',
+ 'Hello world!',
+ 0,
+ '/^Replaced .*Hello/'
+ ),
+
+ array(
+ 'foo',
+ 'bar',
+ 0,
+ '/^$/'
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetAutosummary
+ */
+ public function testGetAutosummary( $old, $new, $flags, $expected ) {
+ global $wgLanguageCode, $wgContLang;
+
+ $oldContent = is_null( $old ) ? null : new WikitextContent( $old );
+ $newContent = is_null( $new ) ? null : new WikitextContent( $new );
+
+ $summary = $this->handler->getAutosummary( $oldContent, $newContent, $flags );
+
+ $this->assertTrue( (bool)preg_match( $expected, $summary ), "Autosummary didn't match expected pattern $expected: $summary" );
+ }
+
+ /**
+ * @todo Text case requires database, should be done by a test class in the Database group
+ */
+ /*
+ public function testGetAutoDeleteReason( Title $title, &$hasHistory ) {}
+ */
+
+ /**
+ * @todo Text case requires database, should be done by a test class in the Database group
+ */
+ /*
+ public function testGetUndoContent( Revision $current, Revision $undo, Revision $undoafter = null ) {}
+ */
+
+}
--- /dev/null
+<?php
+
+/**
+ * @group ContentHandler
+ *
+ * @group Database
+ * ^--- needed, because we do need the database to test link updates
+ */
+class WikitextContentTest extends TextContentTest {
+
+ static $sections =
+
+"Intro
+
+== stuff ==
+hello world
+
+== test ==
+just a test
+
+== foo ==
+more stuff
+";
+
+ public function newContent( $text ) {
+ return new WikitextContent( $text );
+ }
+
+ public static function dataGetParserOutput() {
+ return array(
+ array(
+ "WikitextContentTest_testGetParserOutput",
+ CONTENT_MODEL_WIKITEXT,
+ "hello ''world''\n",
+ "<p>hello <i>world</i>\n</p>"
+ ),
+ // TODO: more...?
+ );
+ }
+
+ public static function dataGetSecondaryDataUpdates() {
+ return array(
+ array( "WikitextContentTest_testGetSecondaryDataUpdates_1",
+ CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
+ array(
+ 'LinksUpdate' => array(
+ 'mRecursive' => true,
+ 'mLinks' => array()
+ )
+ )
+ ),
+ array( "WikitextContentTest_testGetSecondaryDataUpdates_2",
+ CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
+ array(
+ 'LinksUpdate' => array(
+ 'mRecursive' => true,
+ 'mLinks' => array(
+ array( 'World_test_21344' => 0 )
+ )
+ )
+ )
+ ),
+ // TODO: more...?
+ );
+ }
+
+ /**
+ * @dataProvider dataGetSecondaryDataUpdates
+ * @group Database
+ */
+ public function testGetSecondaryDataUpdates( $title, $model, $text, $expectedStuff ) {
+ $title = Title::newFromText( $title );
+ $title->resetArticleID( 2342 ); //dummy id. fine as long as we don't try to execute the updates!
+
+ $content = ContentHandler::makeContent( $text, $title, $model );
+
+ $updates = $content->getSecondaryDataUpdates( $title );
+
+ // make updates accessible by class name
+ foreach ( $updates as $update ) {
+ $class = get_class( $update );
+ $updates[$class] = $update;
+ }
+
+ foreach ( $expectedStuff as $class => $fieldValues ) {
+ $this->assertArrayHasKey( $class, $updates, "missing an update of type $class" );
+
+ $update = $updates[$class];
+
+ foreach ( $fieldValues as $field => $value ) {
+ $v = $update->$field; #if the field doesn't exist, just crash and burn
+ $this->assertEquals( $value, $v, "unexpected value for field $field in instance of $class" );
+ }
+ }
+ }
+
+ public static function dataGetSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ "0",
+ "Intro"
+ ),
+ array( WikitextContentTest::$sections,
+ "2",
+"== test ==
+just a test"
+ ),
+ array( WikitextContentTest::$sections,
+ "8",
+ false
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataGetSection
+ */
+ public function testGetSection( $text, $sectionId, $expectedText ) {
+ $content = $this->newContent( $text );
+
+ $sectionContent = $content->getSection( $sectionId );
+ if ( is_object( $sectionContent ) ) {
+ $sectionText = $sectionContent->getNativeData();
+ } else {
+ $sectionText = $sectionContent;
+ }
+
+ $this->assertEquals( $expectedText, $sectionText );
+ }
+
+ public static function dataReplaceSection() {
+ return array(
+ array( WikitextContentTest::$sections,
+ "0",
+ "No more",
+ null,
+ trim( preg_replace( '/^Intro/sm', 'No more', WikitextContentTest::$sections ) )
+ ),
+ array( WikitextContentTest::$sections,
+ "",
+ "No more",
+ null,
+ "No more"
+ ),
+ array( WikitextContentTest::$sections,
+ "2",
+ "== TEST ==\nmore fun",
+ null,
+ trim( preg_replace( '/^== test ==.*== foo ==/sm', "== TEST ==\nmore fun\n\n== foo ==", WikitextContentTest::$sections ) )
+ ),
+ array( WikitextContentTest::$sections,
+ "8",
+ "No more",
+ null,
+ WikitextContentTest::$sections
+ ),
+ array( WikitextContentTest::$sections,
+ "new",
+ "No more",
+ "New",
+ trim( WikitextContentTest::$sections ) . "\n\n\n== New ==\n\nNo more"
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataReplaceSection
+ */
+ public function testReplaceSection( $text, $section, $with, $sectionTitle, $expected ) {
+ $content = $this->newContent( $text );
+ $c = $content->replaceSection( $section, $this->newContent( $with ), $sectionTitle );
+
+ $this->assertEquals( $expected, is_null( $c ) ? null : $c->getNativeData() );
+ }
+
+ public function testAddSectionHeader( ) {
+ $content = $this->newContent( 'hello world' );
+ $content = $content->addSectionHeader( 'test' );
+
+ $this->assertEquals( "== test ==\n\nhello world", $content->getNativeData() );
+ }
+
+ public static function dataPreSaveTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ "hello this is [[Special:Contributions/127.0.0.1|127.0.0.1]]",
+ ),
+ array( 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+ 'hello \'\'this\'\' is <nowiki>~~~</nowiki>',
+ ),
+ array( // rtrim
+ " Foo \n ",
+ " Foo",
+ ),
+ );
+ }
+
+ public static function dataPreloadTransform() {
+ return array(
+ array( 'hello this is ~~~',
+ "hello this is ~~~",
+ ),
+ array( 'hello \'\'this\'\' is <noinclude>foo</noinclude><includeonly>bar</includeonly>',
+ 'hello \'\'this\'\' is bar',
+ ),
+ );
+ }
+
+ public static function dataGetRedirectTarget() {
+ return array(
+ array( '#REDIRECT [[Test]]',
+ 'Test',
+ ),
+ array( '#REDIRECT Test',
+ null,
+ ),
+ array( '* #REDIRECT [[Test]]',
+ null,
+ ),
+ );
+ }
+
+ public static function dataGetTextForSummary() {
+ return array(
+ array( "hello\nworld.",
+ 16,
+ 'hello world.',
+ ),
+ array( 'hello world.',
+ 8,
+ 'hello...',
+ ),
+ array( '[[hello world]].',
+ 8,
+ 'hel...',
+ ),
+ );
+ }
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getRedirectChain() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectArray( $text );
+ }
+ */
+
+ /**
+ * @todo: test needs database! Should be done by a test class in the Database group.
+ */
+ /*
+ public function getUltimateRedirectTarget() {
+ $text = $this->getNativeData();
+ return Title::newFromRedirectRecurse( $text );
+ }
+ */
+
+ public static function dataIsCountable() {
+ return array(
+ array( '',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'any',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'comma',
+ false
+ ),
+ array( 'Foo, bar',
+ null,
+ 'comma',
+ true
+ ),
+ array( 'Foo',
+ null,
+ 'link',
+ false
+ ),
+ array( 'Foo [[bar]]',
+ null,
+ 'link',
+ true
+ ),
+ array( 'Foo',
+ true,
+ 'link',
+ true
+ ),
+ array( 'Foo [[bar]]',
+ false,
+ 'link',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'any',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'comma',
+ false
+ ),
+ array( '#REDIRECT [[bar]]',
+ true,
+ 'link',
+ false
+ ),
+ );
+ }
+
+ public function testMatchMagicWord( ) {
+ $mw = MagicWord::get( "staticredirect" );
+
+ $content = $this->newContent( "#REDIRECT [[FOO]]\n__STATICREDIRECT__" );
+ $this->assertTrue( $content->matchMagicWord( $mw ), "should have matched magic word" );
+
+ $content = $this->newContent( "#REDIRECT [[FOO]]" );
+ $this->assertFalse( $content->matchMagicWord( $mw ), "should not have matched magic word" );
+ }
+
+ public function testUpdateRedirect( ) {
+ $target = Title::newFromText( "testUpdateRedirect_target" );
+
+ // test with non-redirect page
+ $content = $this->newContent( "hello world." );
+ $newContent = $content->updateRedirect( $target );
+
+ $this->assertTrue( $content->equals( $newContent ), "content should be unchanged" );
+
+ // test with actual redirect
+ $content = $this->newContent( "#REDIRECT [[Someplace]]" );
+ $newContent = $content->updateRedirect( $target );
+
+ $this->assertFalse( $content->equals( $newContent ), "content should have changed" );
+ $this->assertTrue( $newContent->isRedirect(), "new content should be a redirect" );
+
+ $this->assertEquals( $target->getFullText(), $newContent->getRedirectTarget()->getFullText() );
+ }
+
+ public function testGetModel() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getModel() );
+ }
+
+ public function testGetContentHandler() {
+ $content = $this->newContent( "hello world." );
+
+ $this->assertEquals( CONTENT_MODEL_WIKITEXT, $content->getContentHandler()->getModelID() );
+ }
+
+ public static function dataEquals( ) {
+ return array(
+ array( new WikitextContent( "hallo" ), null, false ),
+ array( new WikitextContent( "hallo" ), new WikitextContent( "hallo" ), true ),
+ array( new WikitextContent( "hallo" ), new JavascriptContent( "hallo" ), false ),
+ array( new WikitextContent( "hallo" ), new TextContent( "hallo" ), false ),
+ array( new WikitextContent( "hallo" ), new WikitextContent( "HALLO" ), false ),
+ );
+ }
+
+ public static function dataGetDeletionUpdates() {
+ return array(
+ array("WikitextContentTest_testGetSecondaryDataUpdates_1",
+ CONTENT_MODEL_WIKITEXT, "hello ''world''\n",
+ array( 'LinksDeletionUpdate' => array( ) )
+ ),
+ array("WikitextContentTest_testGetSecondaryDataUpdates_2",
+ CONTENT_MODEL_WIKITEXT, "hello [[world test 21344]]\n",
+ array( 'LinksDeletionUpdate' => array( ) )
+ ),
+ // @todo: more...?
+ );
+ }
+
+}
var $db, $functionTest = false;
protected function setUp() {
+ parent::setUp();
$this->db = wfGetDB( DB_MASTER );
}
protected function tearDown() {
+ parent::tearDown();
if ( $this->functionTest ) {
$this->dropFunctions();
$this->functionTest = false;
protected function setUp() {
+ parent::setUp();
// Make sure MWDebug class is enabled
static $MWDebugEnabled = false;
if( !$MWDebugEnabled ) {
protected function tearDown() {
wfRestoreWarnings();
+ parent::tearDown();
}
function testAddLog() {
return $cases;
}
+ public function testGetLocalCopyAndReference404() {
+ $this->backend = $this->singleBackend;
+ $this->tearDownFiles();
+ $this->doTestGetLocalCopyAndReference404();
+ $this->tearDownFiles();
+
+ $this->backend = $this->multiBackend;
+ $this->tearDownFiles();
+ $this->doTestGetLocalCopyAndReference404();
+ $this->tearDownFiles();
+ }
+
+ public function doTestGetLocalCopyAndReference404() {
+ $backendName = $this->backendClass();
+
+ $base = self::baseStorePath();
+
+ $tmpFile = $this->backend->getLocalCopy( array(
+ 'src' => "$base/unittest-cont1/not-there" ) );
+ $this->assertEquals( null, $tmpFile, "Local copy of not existing file is null ($backendName)." );
+
+ $tmpFile = $this->backend->getLocalReference( array(
+ 'src' => "$base/unittest-cont1/not-there" ) );
+ $this->assertEquals( null, $tmpFile, "Local ref of not existing file is null ($backendName)." );
+ }
+
/**
* @dataProvider provider_testPrepareAndClean
*/
class PNGMetadataExtractorTest extends MediaWikiTestCase {
protected function setUp() {
+ parent::setUp();
$this->filePath = __DIR__ . '/../../data/media/';
}
/**
class SVGMetadataExtractorTest extends MediaWikiTestCase {
protected function setUp() {
+ parent::setUp();
AutoLoader::loadClass( 'SVGMetadataExtractorTest' );
}
class XMPTest extends MediaWikiTestCase {
protected function setUp() {
+ parent::setUp();
if ( !wfDl( 'xml' ) ) {
$this->markTestSkipped( 'Requires libxml to do XMP parsing' );
}
protected function setUp() {
parent::setUp();
- $this->setMwGlobals( 'wgContLang', Language::factory( 'en' ) );
+ $contLang = Language::factory( 'en' );
+ $this->setMwGlobals( 'wgContLang', $contLang );
$this->testParser = new Parser();
- $this->testParser->Options( new ParserOptions() );
+ $this->testParser->Options( ParserOptions::newFromUserAndLang( new User, $contLang ) );
# initialize parser output
$this->testParser->clearState();
private $title;
protected function setUp() {
- $this->testParserOptions = new ParserOptions();
+ global $wgContLang;
+
+ parent::setUp();
+ $this->testParserOptions = ParserOptions::newFromUserAndLang( new User, $wgContLang );
$this->testParser = new Parser();
$this->testParser->Options( $this->testParserOptions );
}
protected function tearDown() {
+ parent::tearDown();
+
unset( $this->testParser );
unset( $this->title );
}
var $mOptions;
protected function setUp() {
- global $wgParserConf;
- $this->mOptions = new ParserOptions();
+ global $wgParserConf, $wgContLang;
+ parent::setUp();
+ $this->mOptions = ParserOptions::newFromUserAndLang( new User, $wgContLang );
$name = isset( $wgParserConf['preprocessorClass'] ) ? $wgParserConf['preprocessorClass'] : 'Preprocessor_DOM';
$this->mPreprocessor = new $name( $this );
* @dataProvider provideValidNames
*/
function testTagHooks( $tag ) {
- global $wgParserConf;
+ global $wgParserConf, $wgContLang;
$parser = new Parser( $wgParserConf );
$parser->setHook( $tag, array( $this, 'tagCallback' ) );
- $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+ $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
$this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
$parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
* @expectedException MWException
*/
function testBadTagHooks( $tag ) {
- global $wgParserConf;
+ global $wgParserConf, $wgContLang;
$parser = new Parser( $wgParserConf );
$parser->setHook( $tag, array( $this, 'tagCallback' ) );
- $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+ $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
$this->fail('Exception not thrown.');
}
* @dataProvider provideValidNames
*/
function testFunctionTagHooks( $tag ) {
- global $wgParserConf;
+ global $wgParserConf, $wgContLang;
$parser = new Parser( $wgParserConf );
$parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), 0 );
- $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+ $parserOutput = $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
$this->assertEquals( "<p>FooOneBaz\n</p>", $parserOutput->getText() );
$parser->mPreprocessor = null; # Break the Parser <-> Preprocessor cycle
* @expectedException MWException
*/
function testBadFunctionTagHooks( $tag ) {
- global $wgParserConf;
+ global $wgParserConf, $wgContLang;
$parser = new Parser( $wgParserConf );
$parser->setFunctionTagHook( $tag, array( $this, 'functionTagCallback' ), SFH_OBJECT_ARGS );
- $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), new ParserOptions );
+ $parser->parse( "Foo<$tag>Bar</$tag>Baz", Title::newFromText( 'Test' ), ParserOptions::newFromUserAndLang( new User, $wgContLang ) );
$this->fail('Exception not thrown.');
}
*/
protected $rc;
- protected function setUp() {
- }
-
/** helper to test SpecialRecentchanges::buildMainQueryConds() */
private function assertConditions( $expected, $requestOptions = null, $message = '' ) {
$context = new RequestContext;
*/
/** Tests for MediaWiki languages/LanguageAm.php */
-class LanguageAmTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Am' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageAmTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/LanguageAr.php */
-class LanguageArTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Ar' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageArTest extends LanguageClassesTestCase {
function testFormatNum() {
- $this->assertEquals( '١٬٢٣٤٬٥٦٧', $this->lang->formatNum( '1234567' ) );
- $this->assertEquals( '-١٢٫٨٩', $this->lang->formatNum( -12.89 ) );
+ $this->assertEquals( '١٬٢٣٤٬٥٦٧', $this->getLang()->formatNum( '1234567' ) );
+ $this->assertEquals( '-١٢٫٨٩', $this->getLang()->formatNum( -12.89 ) );
}
/**
* @dataProvider providerSprintfDate
*/
function testSprintfDate( $format, $date, $expected ) {
- $this->assertEquals( $expected, $this->lang->sprintfDate( $format, $date ) );
+ $this->assertEquals( $expected, $this->getLang()->sprintfDate( $format, $date ) );
}
function providerSprintfDate() {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'zero', 'one', 'two', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
return array (
*/
/** Tests for MediaWiki languages/LanguageBe.php */
-class LanguageBeTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Be' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageBeTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
<?php
-class LanguageBeTaraskTest extends MediaWikiTestCase {
- private $lang;
+class LanguageBe_taraskTest extends LanguageClassesTestCase {
- protected function setUp() {
- $this->lang = Language::factory( 'Be-tarask' );
- }
- protected function tearDown() {
- unset( $this->lang );
+ /**
+ * Make sure the language code we are given is indeed
+ * be-tarask. This is to ensure LanguageClassesTestCase
+ * does not give us the wrong language.
+ */
+ function testBeTaraskTestsUsesBeTaraskCode() {
+ $this->assertEquals( 'be-tarask',
+ $this->getLang()->getCode()
+ );
}
/** see bug 23156 & r64981 */
function testSearchRightSingleQuotationMarkAsApostroph() {
$this->assertEquals(
"'",
- $this->lang->normalizeForSearch( '’' ),
+ $this->getLang()->normalizeForSearch( '’' ),
'bug 23156: U+2019 conversion to U+0027'
);
}
/** see bug 23156 & r64981 */
function testCommafy() {
- $this->assertEquals( '1,234,567', $this->lang->commafy( '1234567' ) );
- $this->assertEquals( '12,345', $this->lang->commafy( '12345' ) );
+ $this->assertEquals( '1,234,567', $this->getLang()->commafy( '1234567' ) );
+ $this->assertEquals( '12,345', $this->getLang()->commafy( '12345' ) );
}
/** see bug 23156 & r64981 */
function testDoesNotCommafyFourDigitsNumber() {
- $this->assertEquals( '1234', $this->lang->commafy( '1234' ) );
+ $this->assertEquals( '1234', $this->getLang()->commafy( '1234' ) );
}
/** @dataProvider providePluralFourForms */
function testPluralFourForms( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralFourForms() {
/** @dataProvider providePluralTwoForms */
function testPluralTwoForms( $result, $value ) {
$forms = array( 'one', 'several' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralTwoForms() {
return array (
*/
/** Tests for MediaWiki languages/LanguageBh.php */
-class LanguageBhTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Bh' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageBhTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/LanguageBs.php */
-class LanguageBsTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Bs' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageBsTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
--- /dev/null
+<?php
+/**
+ * Helping class to run tests using a clean language instance.
+ *
+ * This is intended for the MediaWiki language class tests under
+ * tests/phpunit/languages. You simply need to extends this test
+ * and set it up with a language code using setUpBeforeClass:
+ *
+ * @par Setting up a language:
+ * @code
+ * class LanguageFooTest extends LanguageClassesTestCase {
+ * public static function setUpBeforeClass() {
+ * self::setLang( 'Foo' );
+ * }
+ * @endcode
+ *
+ * Before each tests, a new language object is build which you
+ * can retrieve in your test using the $this->getLang() method:
+ *
+ * @par Using the crafted language object:
+ * @code
+ * function testHasLanguageObject() {
+ * $langObject = $this->getLang();
+ * $this->assertInstanceOf( 'LanguageFoo',
+ * $langObject
+ * );
+ * }
+ * @endcode
+ */
+abstract class LanguageClassesTestCase extends MediaWikiTestCase {
+
+ /**
+ * Regex used to find out the language code out of the class name
+ * used by setUpBeforeClass
+ */
+ private static $reExtractLangFromClass = '/Language(.*)Test/';
+
+ /**
+ * Hold the language code we are going to use. This is extracted
+ * directly from the extending class.
+ */
+ private static $LanguageClassCode;
+
+ /**
+ * Internal language object
+ *
+ * A new object is created before each tests thanks to PHPUnit
+ * setUp() method, it is deleted after each test too. To get
+ * this object you simply use the getLang method.
+ *
+ * You must have setup a language code first. See $LanguageClassCode
+ * @code
+ * function testWeAreTheChampions() {
+ * $this->getLang(); # language object
+ * }
+ * @endcode
+ */
+ private $languageObject;
+
+ public static function setUpBeforeClass() {
+ $found = preg_match( self::$reExtractLangFromClass,
+ get_called_class(), $m );
+ if ( $found ) {
+ # Normalize language code since classes uses underscores
+ $m[1] = str_replace( '_', '-', $m[1] );
+ } else {
+ # Fallback to english language
+ $m[1] = 'en';
+ wfDebug(
+ __METHOD__ . " could not extract a language name "
+ . "out of " . get_called_class() . " failling back to 'en'\n"
+ );
+ }
+ // TODO: validate $m[1] which should be a valid language code
+ self::$LanguageClassCode = $m[1];
+ }
+
+ protected function getLang() {
+ return $this->languageObject;
+ }
+
+ /**
+ * Create a new language object before each test.
+ */
+ protected function setUp() {
+ parent::setUp();
+ $this->languageObject = Language::factory(
+ self::$LanguageClassCode );
+ }
+
+ /**
+ * Delete the internal language object so each test start
+ * out with a fresh language instance.
+ */
+ protected function tearDown() {
+ unset( $this->languageObject );
+ parent::tearDown();
+ }
+
+}
*/
/** Tests for MediaWiki languages/classes/Languagecs.php */
-class LanguageCsTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'cs' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageCsTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/LanguageCu.php */
-class LanguageCuTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'cu' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageCuTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageCy.php */
-class LanguageCyTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'cy' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageCyTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'zero', 'one', 'two', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageDsb.php */
-class LanguageDsbTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'dsb' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageDsbTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'two', 'few', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageFr.php */
-class LanguageFrTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'fr' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageFrTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageGa.php */
-class LanguageGaTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'ga' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageGaTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'two', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageGd.php */
-class LanguageGdTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'gd' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageGdTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
// The CLDR ticket for this plural forms is not same as mw plural forms. See http://unicode.org/cldr/trac/ticket/2883
$forms = array( 'Form 1', 'Form 2', 'Form 3', 'Form 4', 'Form 5', 'Form 6' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
return array (
*/
/** Tests for MediaWiki languages/classes/LanguageGv.php */
-class LanguageGvTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'gv' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageGvTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
// This is not compatible with CLDR plural rules http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#gv
$forms = array( 'Form 1', 'Form 2', 'Form 3', 'Form 4' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
return array (
*/
/** Tests for MediaWiki languages/classes/LanguageHe.php */
-class LanguageHeTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'he' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageHeTest extends LanguageClassesTestCase {
/** @dataProvider providerPluralDual */
function testPluralDual( $result, $value ) {
$forms = array( 'one', 'two', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPluralDual() {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/LanguageHi.php */
-class LanguageHiTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Hi' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageHiTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageHr.php */
-class LanguageHrTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'hr' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageHrTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageHsb.php */
-class LanguageHsbTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'hsb' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageHsbTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'two', 'few', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/LanguageHu.php */
-class LanguageHuTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Hu' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageHuTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/LanguageHy.php */
-class LanguageHyTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'hy' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageHyTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageKsh.php */
-class LanguageKshTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'ksh' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageKshTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other', 'zero' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageLn.php */
-class LanguageLnTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'ln' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageLnTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/LanguageLt.php */
-class LanguageLtTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Lt' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageLtTest extends LanguageClassesTestCase {
/** @dataProvider provideOneFewOtherCases */
function testOneFewOtherPlural( $result, $value ) {
$forms = array( 'one', 'few', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
/** @dataProvider provideOneFewCases */
function testOneFewPlural( $result, $value ) {
$forms = array( 'one', 'few' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function provideOneFewOtherCases() {
*/
/** Tests for MediaWiki languages/classes/LanguageLv.php */
-class LanguageLvTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'lv' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageLvTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageMg.php */
-class LanguageMgTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'mg' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageMgTest extends LanguageClassesTestCase {
/** @dataProvider providePlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageMk.php */
-class LanguageMkTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'mk' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageMkTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
*/
/** Tests for MediaWiki languages/LanguageMl.php */
-class LanguageMlTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Ml' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageMlTest extends LanguageClassesTestCase {
/** see bug 29495 */
/** @dataProvider providerFormatNum*/
function testFormatNum( $result, $value ) {
- $this->assertEquals( $result, $this->lang->formatNum( $value ) );
+ $this->assertEquals( $result, $this->getLang()->formatNum( $value ) );
}
function providerFormatNum() {
*/
/** Tests for MediaWiki languages/classes/LanguageMo.php */
-class LanguageMoTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'mo' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageMoTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageMt.php */
-class LanguageMtTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'mt' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageMtTest extends LanguageClassesTestCase {
/** @dataProvider providerPluralAllForms */
function testPluralAllForms( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPluralAllForms() {
/** @dataProvider providerPluralTwoForms */
function testPluralTwoForms( $result, $value ) {
$forms = array( 'one', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPluralTwoForms() {
*/
/** Tests for MediaWiki languages/LanguageNl.php */
-class LanguageNlTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Nl' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageNlTest extends LanguageClassesTestCase {
function testFormatNum() {
- $this->assertEquals( '1.234.567', $this->lang->formatNum( '1234567' ) );
- $this->assertEquals( '12.345', $this->lang->formatNum( '12345' ) );
- $this->assertEquals( '1', $this->lang->formatNum( '1' ) );
- $this->assertEquals( '123', $this->lang->formatNum( '123' ) );
- $this->assertEquals( '1.234', $this->lang->formatNum( '1234' ) );
- $this->assertEquals( '12.345,56', $this->lang->formatNum( '12345.56' ) );
- $this->assertEquals( ',1234556', $this->lang->formatNum( '.1234556' ) );
+ $this->assertEquals( '1.234.567', $this->getLang()->formatNum( '1234567' ) );
+ $this->assertEquals( '12.345', $this->getLang()->formatNum( '12345' ) );
+ $this->assertEquals( '1', $this->getLang()->formatNum( '1' ) );
+ $this->assertEquals( '123', $this->getLang()->formatNum( '123' ) );
+ $this->assertEquals( '1.234', $this->getLang()->formatNum( '1234' ) );
+ $this->assertEquals( '12.345,56', $this->getLang()->formatNum( '12345.56' ) );
+ $this->assertEquals( ',1234556', $this->getLang()->formatNum( '.1234556' ) );
}
}
*/
/** Tests for MediaWiki languages/classes/LanguageNso.php */
-class LanguageNsoTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'nso' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageNsoTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguagePl.php */
-class LanguagePlTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'pl' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguagePlTest extends LanguageClassesTestCase {
/** @dataProvider providerPluralFourForms */
function testPluralFourForms( $result, $value ) {
$forms = array( 'one', 'few', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPluralFourForms() {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageRo.php */
-class LanguageRoTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'ro' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageRoTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageRu.php */
-class LanguageRuTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'ru' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageRuTest extends LanguageClassesTestCase {
/** @dataProvider providePluralFourForms */
function testPluralFourForms( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralFourForms() {
/** @dataProvider providePluralTwoForms */
function testPluralTwoForms( $result, $value ) {
$forms = array( 'one', 'several' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralTwoForms() {
return array (
*/
/** Tests for MediaWiki languages/classes/LanguageSe.php */
-class LanguageSeTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'se' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageSeTest extends LanguageClassesTestCase {
/** @dataProvider providerPluralThreeForms */
function testPluralThreeForms( $result, $value ) {
$forms = array( 'one', 'two', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPluralThreeForms() {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageSgs.php */
-class LanguageSgsTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Sgs' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageSgsTest extends LanguageClassesTestCase {
/** @dataProvider providePluralAllForms */
function testPluralAllForms( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralAllForms() {
/** @dataProvider providePluralTwoForms */
function testPluralTwoForms( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralTwoForms() {
*/
/** Tests for MediaWiki languages/classes/LanguageSh.php */
-class LanguageShTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'sh' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageShTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageSk.php */
-class LanguageSkTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'sk' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageSkTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'few', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageSl.php */
-class LanguageSlTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'sl' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageSlTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'two', 'few', 'other', 'zero' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageSma.php */
-class LanguageSmaTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'sma' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageSmaTest extends LanguageClassesTestCase {
/** @dataProvider providerPluralThreeForms */
function testPluralThreeForms( $result, $value ) {
$forms = array( 'one', 'two', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPluralThreeForms() {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
require_once dirname( __DIR__ ) . '/bootstrap.php';
/** Tests for MediaWiki languages/LanguageSr.php */
-class LanguageSrTest extends MediaWikiTestCase {
- /* Language object. Initialized before each test */
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'sr' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageSrTest extends LanguageClassesTestCase {
##### TESTS #######################################################
/** @dataProvider providePluralFourForms */
function testPluralFourForms( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralFourForms() {
/** @dataProvider providePluralTwoForms */
function testPluralTwoForms( $result, $value ) {
$forms = array( 'one', 'several' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralTwoForms() {
return array (
/** Wrapper for converter::convertTo() method*/
function convertTo( $text, $variant ) {
- return $this
- ->lang
+ return $this->getLang()
->mConverter
->convertTo(
$text, $variant
<?php
-class LanguageTest extends MediaWikiTestCase {
-
- /**
- * @var Language
- */
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'en' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageTest extends LanguageClassesTestCase {
function testLanguageConvertDoubleWidthToSingleWidth() {
$this->assertEquals(
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
- $this->lang->normalizeForSearch(
+ $this->getLang()->normalizeForSearch(
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
),
'convertDoubleWidth() with the full alphabet and digits'
* @dataProvider provideFormattableTimes
*/
function testFormatTimePeriod( $seconds, $format, $expected, $desc ) {
- $this->assertEquals( $expected, $this->lang->formatTimePeriod( $seconds, $format ), $desc );
+ $this->assertEquals( $expected, $this->getLang()->formatTimePeriod( $seconds, $format ), $desc );
}
function provideFormattableTimes() {
array(
9.45,
array(),
- '9.5s',
+ '9.5 s',
'formatTimePeriod() rounding (<10s)'
),
array(
array(
9.95,
array(),
- '10s',
+ '10 s',
'formatTimePeriod() rounding (<10s)'
),
array(
array(
59.55,
array(),
- '1m 0s',
+ '1 min 0 s',
'formatTimePeriod() rounding (<60s)'
),
array(
array(
119.55,
array(),
- '2m 0s',
+ '2 min 0 s',
'formatTimePeriod() rounding (<1h)'
),
array(
array(
3599.55,
array(),
- '1h 0m 0s',
+ '1 h 0 min 0 s',
'formatTimePeriod() rounding (<1h)'
),
array(
array(
7199.55,
array(),
- '2h 0m 0s',
+ '2 h 0 min 0 s',
'formatTimePeriod() rounding (>=1h)'
),
array(
array(
7199.55,
'avoidseconds',
- '2h 0m',
+ '2 h 0 min',
'formatTimePeriod() rounding (>=1h), avoidseconds'
),
array(
array(
7199.55,
'avoidminutes',
- '2h 0m',
+ '2 h 0 min',
'formatTimePeriod() rounding (>=1h), avoidminutes'
),
array(
array(
172799.55,
'avoidseconds',
- '48h 0m',
+ '48 h 0 min',
'formatTimePeriod() rounding (=48h), avoidseconds'
),
array(
array(
259199.55,
'avoidminutes',
- '3d 0h',
+ '3 d 0 h',
'formatTimePeriod() rounding (>48h), avoidminutes'
),
array(
array(
176399.55,
'avoidseconds',
- '2d 1h 0m',
+ '2 d 1 h 0 min',
'formatTimePeriod() rounding (>48h), avoidseconds'
),
array(
array(
176399.55,
'avoidminutes',
- '2d 1h',
+ '2 d 1 h',
'formatTimePeriod() rounding (>48h), avoidminutes'
),
array(
array(
259199.55,
'avoidseconds',
- '3d 0h 0m',
+ '3 d 0 h 0 min',
'formatTimePeriod() rounding (>48h), avoidseconds'
),
array(
array(
172801.55,
'avoidseconds',
- '2d 0h 0m',
+ '2 d 0 h 0 min',
'formatTimePeriod() rounding, (>48h), avoidseconds'
),
array(
array(
176460.55,
array(),
- '2d 1h 1m 1s',
+ '2 d 1 h 1 min 1 s',
'formatTimePeriod() rounding, recursion, (>48h)'
),
array(
function testTruncate() {
$this->assertEquals(
"XXX",
- $this->lang->truncate( "1234567890", 0, 'XXX' ),
+ $this->getLang()->truncate( "1234567890", 0, 'XXX' ),
'truncate prefix, len 0, small ellipsis'
);
$this->assertEquals(
"12345XXX",
- $this->lang->truncate( "1234567890", 8, 'XXX' ),
+ $this->getLang()->truncate( "1234567890", 8, 'XXX' ),
'truncate prefix, small ellipsis'
);
$this->assertEquals(
"123456789",
- $this->lang->truncate( "123456789", 5, 'XXXXXXXXXXXXXXX' ),
+ $this->getLang()->truncate( "123456789", 5, 'XXXXXXXXXXXXXXX' ),
'truncate prefix, large ellipsis'
);
$this->assertEquals(
"XXX67890",
- $this->lang->truncate( "1234567890", -8, 'XXX' ),
+ $this->getLang()->truncate( "1234567890", -8, 'XXX' ),
'truncate suffix, small ellipsis'
);
$this->assertEquals(
"123456789",
- $this->lang->truncate( "123456789", -5, 'XXXXXXXXXXXXXXX' ),
+ $this->getLang()->truncate( "123456789", -5, 'XXXXXXXXXXXXXXX' ),
'truncate suffix, large ellipsis'
);
}
// Actual HTML...
$this->assertEquals(
$expected,
- $this->lang->truncateHTML( $input, $len, $ellipsis )
+ $this->getLang()->truncateHTML( $input, $len, $ellipsis )
);
}
function testSprintfDate( $format, $ts, $expected, $msg ) {
$this->assertEquals(
$expected,
- $this->lang->sprintfDate( $format, $ts ),
+ $this->getLang()->sprintfDate( $format, $ts ),
"sprintfDate('$format', '$ts'): $msg"
);
}
$this->assertEquals(
$expected,
- $this->lang->sprintfDate( $format, $ts ),
+ $this->getLang()->sprintfDate( $format, $ts ),
"sprintfDate('$format', '$ts'): $msg"
);
function testFormatSize( $size, $expected, $msg ) {
$this->assertEquals(
$expected,
- $this->lang->formatSize( $size ),
+ $this->getLang()->formatSize( $size ),
"formatSize('$size'): $msg"
);
}
function testFormatBitrate( $bps, $expected, $msg ) {
$this->assertEquals(
$expected,
- $this->lang->formatBitrate( $bps ),
+ $this->getLang()->formatBitrate( $bps ),
"formatBitrate('$bps'): $msg"
);
}
function testFormatDuration( $duration, $expected, $intervals = array() ) {
$this->assertEquals(
$expected,
- $this->lang->formatDuration( $duration, $intervals ),
+ $this->getLang()->formatDuration( $duration, $intervals ),
"formatDuration('$duration'): $expected"
);
}
function testCheckTitleEncoding( $s ) {
$this->assertEquals(
$s,
- $this->lang->checkTitleEncoding($s),
+ $this->getLang()->checkTitleEncoding($s),
"checkTitleEncoding('$s')"
);
}
* @dataProvider providePluralData
*/
function testConvertPlural( $expected, $number, $forms ) {
- $chosen = $this->lang->convertPlural( $number, $forms );
+ $chosen = $this->getLang()->convertPlural( $number, $forms );
$this->assertEquals( $expected, $chosen );
}
*/
/** Tests for MediaWiki languages/classes/LanguageTi.php */
-class LanguageTiTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Ti' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageTiTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/classes/LanguageTl.php */
-class LanguageTlTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Tl' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageTlTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
*/
/** Tests for MediaWiki languages/LanguageTr.php */
-class LanguageTrTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Tr' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageTrTest extends LanguageClassesTestCase {
/**
* See @bug 28040
*/
function testDottedAndDotlessI( $func, $input, $inputCase, $expected ) {
if( $func == 'ucfirst' ) {
- $res = $this->lang->ucfirst( $input );
+ $res = $this->getLang()->ucfirst( $input );
} elseif( $func == 'lcfirst' ) {
- $res = $this->lang->lcfirst( $input );
+ $res = $this->getLang()->lcfirst( $input );
} else {
throw new MWException( __METHOD__ . " given an invalid function name '$func'" );
}
*/
/** Tests for MediaWiki languages/classes/LanguageUk.php */
-class LanguageUkTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Uk' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageUkTest extends LanguageClassesTestCase {
/** @dataProvider providePluralFourForms */
function testPluralFourForms( $result, $value ) {
$forms = array( 'one', 'few', 'many', 'other' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralFourForms() {
/** @dataProvider providePluralTwoForms */
function testPluralTwoForms( $result, $value ) {
$forms = array( 'one', 'several' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providePluralTwoForms() {
return array (
require_once dirname( __DIR__ ) . '/bootstrap.php';
/** Tests for MediaWiki languages/LanguageUz.php */
-class LanguageUzTest extends MediaWikiTestCase {
- /* Language object. Initialized before each test */
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'uz' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageUzTest extends LanguageClassesTestCase {
/**
* @author Nikola Smolenski
/** Wrapper for converter::convertTo() method*/
function convertTo( $text, $variant ) {
- return $this->lang->mConverter->convertTo( $text, $variant );
+ return $this->getLang()->mConverter->convertTo( $text, $variant );
}
function convertToCyrillic( $text ) {
return $this->convertTo( $text, 'uz-cyrl' );
*/
/** Tests for MediaWiki languages/classes/LanguageWa.php */
-class LanguageWaTest extends MediaWikiTestCase {
- private $lang;
-
- protected function setUp() {
- $this->lang = Language::factory( 'Wa' );
- }
- protected function tearDown() {
- unset( $this->lang );
- }
+class LanguageWaTest extends LanguageClassesTestCase {
/** @dataProvider providerPlural */
function testPlural( $result, $value ) {
$forms = array( 'one', 'many' );
- $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+ $this->assertEquals( $result, $this->getLang()->convertPlural( $value, $forms ) );
}
function providerPlural() {
var ascendingName = [earth, jupiter, mars, mercury, saturn, venus];
var ascendingRadius = [mercury, mars, venus, earth, saturn, jupiter];
+tableTest(
+ 'Basic planet table: sorting initially - ascending by name',
+ header,
+ planets,
+ ascendingName,
+ function ( $table ) {
+ $table.tablesorter( { sortList: [ { 0: 'asc' } ] } );
+ }
+);
+tableTest(
+ 'Basic planet table: sorting initially - descending by radius',
+ header,
+ planets,
+ reversed(ascendingRadius),
+ function ( $table ) {
+ $table.tablesorter( { sortList: [ { 1: 'desc' } ] } );
+ }
+);
tableTest(
'Basic planet table: ascending by name',
header,
}
);
+// Sample data set to test multiple column sorting
+var header = [ 'column1' , 'column2'],
+ a1 = [ 'A', '1' ],
+ a2 = [ 'A', '2' ],
+ a3 = [ 'A', '3' ],
+ b1 = [ 'B', '1' ],
+ b2 = [ 'B', '2' ],
+ b3 = [ 'B', '3' ];
+var initial = [a2, b3, a1, a3, b2, b1];
+var asc = [a1, a2, a3, b1, b2, b3];
+var descasc = [b1, b2, b3, a1, a2, a3];
+
+tableTest(
+ 'Sorting multiple columns by passing sort list',
+ header,
+ initial,
+ asc,
+ function ( $table ) {
+ $table.tablesorter(
+ { sortList: [ { 0: 'asc' }, { 1: 'asc' } ] }
+ );
+ }
+);
+tableTest(
+ 'Sorting multiple columns by programmatically triggering sort()',
+ header,
+ initial,
+ descasc,
+ function ( $table ) {
+ $table.tablesorter();
+ $table.data( 'tablesorter' ).sort(
+ [ { 0: 'desc' }, { 1: 'asc' } ]
+ );
+ }
+);
+tableTest(
+ 'Reset to initial sorting by triggering sort() without any parameters',
+ header,
+ initial,
+ asc,
+ function ( $table ) {
+ $table.tablesorter(
+ { sortList: [ { 0: 'asc' }, { 1: 'asc' } ] }
+ );
+ $table.data( 'tablesorter' ).sort(
+ [ { 0: 'desc' }, { 1: 'asc' } ]
+ );
+ $table.data( 'tablesorter' ).sort();
+ }
+);
+QUnit.test( 'Reset sorting making table appear unsorted', 3, function ( assert ) {
+ var $table = tableCreate( header, initial );
+ $table.tablesorter(
+ { sortList: [ { 0: 'desc' }, { 1: 'asc' } ] }
+ );
+ $table.data( 'tablesorter' ).sort( [] );
+
+ assert.equal(
+ $table.find( 'th.headerSortUp' ).length + $table.find( 'th.headerSortDown' ).length,
+ 0,
+ 'No sort specific sort classes addign to header cells'
+ );
+
+ assert.equal(
+ $table.find( 'th' ).first().attr( 'title' ),
+ mw.msg( 'sort-ascending' ),
+ 'First header cell has default title'
+ );
+
+ assert.equal(
+ $table.find( 'th' ).first().attr( 'title' ),
+ $table.find( 'th' ).last().attr( 'title' ),
+ 'Both header cells\' titles match'
+ );
+} );
// Regression tests!
tableTest(
planets,
planetsRowspan,
function ( $table ) {
- // Modify the table to have a multiuple-row-spanning cell:
+ // Modify the table to have a multiple-row-spanning cell:
// - Remove 2nd cell of 4th row, and, 2nd cell or 5th row.
$table.find( 'tr:eq(3) td:eq(1), tr:eq(4) td:eq(1)' ).remove();
// - Set rowspan for 2nd cell of 3rd row to 3.
$table.find( '.headerSort:eq(0)' ).click();
}
);
+tableTest(
+ 'Basic planet table: same value for multiple rows via rowspan (sorting initially)',
+ header,
+ planets,
+ planetsRowspan,
+ function ( $table ) {
+ // Modify the table to have a multiple-row-spanning cell:
+ // - Remove 2nd cell of 4th row, and, 2nd cell or 5th row.
+ $table.find( 'tr:eq(3) td:eq(1), tr:eq(4) td:eq(1)' ).remove();
+ // - Set rowspan for 2nd cell of 3rd row to 3.
+ // This covers the removed cell in the 4th and 5th row.
+ $table.find( 'tr:eq(2) td:eq(1)' ).prop( 'rowspan', '3' );
+
+ $table.tablesorter( { sortList: [ { 0: 'asc' } ] } );
+ }
+);
tableTest(
'Basic planet table: Same value for multiple rows via rowspan II',
header,
planets,
planetsRowspanII,
function ( $table ) {
- // Modify the table to have a multiuple-row-spanning cell:
+ // Modify the table to have a multiple-row-spanning cell:
// - Remove 1st cell of 4th row, and, 1st cell or 5th row.
$table.find( 'tr:eq(3) td:eq(0), tr:eq(4) td:eq(0)' ).remove();
// - Set rowspan for 1st cell of 3rd row to 3.
}
);
+QUnit.test( 'Test detection routine', function ( assert ) {
+ var $table;
+ $table = $(
+ '<table class="sortable">' +
+ '<caption>CAPTION</caption>' +
+ '<tr><th>THEAD</th></tr>' +
+ '<tr><td>1</td></tr>' +
+ '<tr class="sortbottom"><td>text</td></tr>' +
+ '</table>'
+ );
+ $table.tablesorter();
+
+ assert.equal(
+ $table.data( 'tablesorter' ).config.parsers[0].id,
+ 'number',
+ 'Correctly detected column content skipping sortbottom'
+ );
+} );
/** FIXME: the diff output is not very readeable. */
QUnit.test( 'bug 32047 - caption must be before thead', function ( assert ) {