Merge "(bug 37587) Enforce language codes to be html safe"
authorSiebrand <siebrand@wikimedia.org>
Fri, 13 Jul 2012 19:47:33 +0000 (19:47 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 13 Jul 2012 19:47:33 +0000 (19:47 +0000)
415 files changed:
.jshintignore [new file with mode: 0644]
.jshintrc [new file with mode: 0644]
README
RELEASE-NOTES-1.20
UPGRADE
api.php
docs/export-0.7.xsd
docs/hooks.txt
includes/Article.php
includes/AutoLoader.php
includes/ChangeTags.php
includes/ChangesList.php
includes/Cookie.php
includes/DataUpdate.php
includes/DefaultSettings.php
includes/DeferredUpdates.php
includes/Defines.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/Feed.php
includes/FileDeleteForm.php
includes/GlobalFunctions.php
includes/HTMLForm.php
includes/Html.php
includes/HttpFunctions.php
includes/ImagePage.php
includes/Import.php
includes/Linker.php
includes/LinksUpdate.php
includes/MagicWord.php
includes/Namespace.php
includes/OutputPage.php
includes/Pager.php
includes/Preferences.php
includes/ProtectionForm.php
includes/RecentChange.php
includes/RevisionList.php
includes/Sanitizer.php
includes/ScopedPHPTimeout.php
includes/SiteConfiguration.php
includes/Skin.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/SpecialPage.php
includes/SpecialPageFactory.php
includes/SqlDataUpdate.php
includes/SquidPurgeClient.php
includes/StringUtils.php
includes/Title.php
includes/User.php
includes/WebRequest.php
includes/WikiMap.php
includes/WikiPage.php
includes/Xml.php
includes/ZhConversion.php
includes/actions/HistoryAction.php
includes/actions/RevisiondeleteAction.php
includes/api/ApiBase.php
includes/api/ApiDelete.php
includes/api/ApiFormatXml.php
includes/api/ApiMain.php
includes/api/ApiPageSet.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiResult.php
includes/api/ApiUpload.php
includes/cache/ProcessCacheLRU.php [new file with mode: 0644]
includes/cache/SquidUpdate.php
includes/db/Database.php
includes/db/DatabaseUtility.php
includes/db/IORMTable.php
includes/db/ORMResult.php
includes/db/ORMTable.php
includes/diff/DifferenceEngine.php
includes/filerepo/FileRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/backend/FSFileBackend.php
includes/filerepo/backend/FileBackend.php
includes/filerepo/backend/FileBackendMultiWrite.php
includes/filerepo/backend/FileBackendStore.php
includes/filerepo/backend/SwiftFileBackend.php
includes/filerepo/backend/lockmanager/MemcLockManager.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/CliInstaller.php
includes/installer/Installer.i18n.php
includes/installer/PostgresUpdater.php
includes/installer/WebInstallerOutput.php
includes/installer/WebInstallerPage.php
includes/job/DoubleRedirectJob.php
includes/json/FormatJson.php
includes/logging/LogEventsList.php
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/logging/PatrolLog.php
includes/media/Bitmap.php
includes/media/ExifBitmap.php
includes/media/FormatMetadata.php
includes/media/Generic.php
includes/media/MediaTransformOutput.php
includes/media/SVGMetadataExtractor.php
includes/media/XMP.php
includes/mobile/DeviceDetection.php
includes/objectcache/APCBagOStuff.php
includes/objectcache/BagOStuff.php
includes/objectcache/DBABagOStuff.php
includes/objectcache/EhcacheBagOStuff.php
includes/objectcache/EmptyBagOStuff.php
includes/objectcache/HashBagOStuff.php
includes/objectcache/MemcachedBagOStuff.php
includes/objectcache/MemcachedClient.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/MemcachedPhpBagOStuff.php
includes/objectcache/MultiWriteBagOStuff.php
includes/objectcache/ObjectCache.php
includes/objectcache/SqlBagOStuff.php
includes/objectcache/WinCacheBagOStuff.php
includes/parser/LinkHolderArray.php
includes/parser/Parser.php
includes/parser/ParserCache.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor.php
includes/parser/Preprocessor_DOM.php
includes/parser/Preprocessor_Hash.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAllmessages.php
includes/specials/SpecialContributions.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialListusers.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialProtectedpages.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUploadStash.php
includes/specials/SpecialUserlogin.php
includes/upload/UploadBase.php
includes/upload/UploadStash.php
includes/zhtable/simp2trad.manual
includes/zhtable/trad2simp.manual
languages/Language.php
languages/Names.php
languages/messages/MessagesAf.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesAs.php
languages/messages/MessagesBa.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCe.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCu.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesEgl.php [new file with mode: 0644]
languages/messages/MessagesEn.php
languages/messages/MessagesEo.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesFrr.php
languages/messages/MessagesGl.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesHe.php
languages/messages/MessagesHif_latn.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesIlo.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKbd_cyrl.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKk_latn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesKw.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLn.php
languages/messages/MessagesLt.php
languages/messages/MessagesLtg.php
languages/messages/MessagesMdf.php
languages/messages/MessagesMhr.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMrj.php
languages/messages/MessagesMs.php
languages/messages/MessagesMyv.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNan.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPam.php
languages/messages/MessagesPdc.php
languages/messages/MessagesPfl.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSah.php
languages/messages/MessagesSe.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesSzl.php
languages/messages/MessagesTa.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTo.php
languages/messages/MessagesTr.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVot.php
languages/messages/MessagesWa.php
languages/messages/MessagesXal.php
languages/messages/MessagesYi.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/cleanupAncientTables.php
maintenance/cleanupCaps.php
maintenance/cleanupImages.php
maintenance/cleanupPreferences.php [new file with mode: 0755]
maintenance/cleanupRemovedModules.php
maintenance/cleanupSpam.php
maintenance/cleanupTable.inc
maintenance/cleanupTitles.php
maintenance/cleanupUploadStash.php
maintenance/cleanupWatchlist.php
maintenance/clear_interwiki_cache.php
maintenance/clear_stats.php
maintenance/compareParsers.php
maintenance/copyFileBackend.php
maintenance/deleteArchivedRevisions.inc
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteImageMemcached.php
maintenance/deleteOldRevisions.php
maintenance/deleteOrphanedRevisions.php
maintenance/deleteRevision.php
maintenance/deleteSelfExternals.php
maintenance/dumpIterator.php
maintenance/dumpLinks.php
maintenance/dumpSisterSites.php
maintenance/dumpUploads.php
maintenance/edit.php
maintenance/fetchText.php
maintenance/fileOpPerfTest.php
maintenance/findHooks.php
maintenance/fixDoubleRedirects.php
maintenance/fixExtLinksProtocolRelative.php
maintenance/fixSlaveDesync.php
maintenance/fixTimestamps.php
maintenance/fixUserRegistration.php
maintenance/formatInstallDoc.php
maintenance/jsparse.php
maintenance/language/messages.inc
maintenance/parse.php
maintenance/rebuildImages.php
maintenance/syncFileBackend.php
maintenance/updateCollation.php
resources/jquery.tipsy/images/tipsy.png
resources/jquery.ui/themes/vector/images/button-disabled-blue.png
resources/jquery.ui/themes/vector/images/button-disabled-green.png
resources/jquery.ui/themes/vector/images/button-disabled-red.png
resources/jquery.ui/themes/vector/images/button-disabled.png
resources/jquery.ui/themes/vector/images/button-down-blue.png
resources/jquery.ui/themes/vector/images/button-down-green.png
resources/jquery.ui/themes/vector/images/button-down-red.png
resources/jquery.ui/themes/vector/images/button-down.png
resources/jquery.ui/themes/vector/images/button-off-green.png
resources/jquery.ui/themes/vector/images/button-off.png
resources/jquery.ui/themes/vector/images/button-over-green.png
resources/jquery.ui/themes/vector/images/button-over-red.png
resources/jquery.ui/themes/vector/images/button-over.png
resources/jquery.ui/themes/vector/images/close.png
resources/jquery.ui/themes/vector/images/ui-bg_flat_15_cd0a0a_40x100.png
resources/jquery.ui/themes/vector/images/ui-bg_flat_70_000000_40x100.png
resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_80_d7ebf9_1x100.png
resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_e4f1fb_1x100.png
resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_ffffff_1x100.png
resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
resources/jquery.ui/themes/vector/images/ui-bg_inset-hard_100_f0f0f0_1x100.png
resources/jquery/images/jquery.arrowSteps.divider-ltr.png
resources/jquery/images/jquery.arrowSteps.divider-rtl.png
resources/jquery/jquery.byteLimit.js
resources/jquery/jquery.cookie.js
resources/jquery/jquery.tablesorter.js
resources/mediawiki.action/mediawiki.action.edit.js
resources/mediawiki.api/mediawiki.api.edit.js
resources/mediawiki.api/mediawiki.api.js
resources/mediawiki.api/mediawiki.api.parse.js
resources/mediawiki.special/mediawiki.special.changeslist.css
resources/mediawiki.special/mediawiki.special.preferences.js
resources/mediawiki/mediawiki.jqueryMsg.js
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.user.js
resources/mediawiki/mediawiki.util.js
skins/Vector.php
skins/common/images/Arr_.png
skins/common/images/ar/button_bold.png
skins/common/images/ar/button_link.png
skins/common/images/ar/button_nowiki.png
skins/common/images/be-tarask/button_bold.png
skins/common/images/button_hr.png
skins/common/images/button_sig.png
skins/common/images/button_template.png
skins/common/images/closewindow.png
skins/common/images/closewindow19x19.png
skins/common/images/cyrl/button_italic.png
skins/common/images/fa/button_italic.png
skins/common/images/fa/button_nowiki.png
skins/common/images/nextredirectltr.png
skins/common/images/nextredirectrtl.png
skins/common/images/tooltip_icon.png
skins/modern/document.png
skins/modern/footer-grad.png
skins/modern/news_icon.png
skins/modern/video.png
skins/monobook/document.png
skins/monobook/news_icon.png
skins/monobook/video.png
skins/vector/images/arrow-down-focus-icon.png
skins/vector/images/arrow-down-icon.png
skins/vector/images/audio-icon.png
skins/vector/images/border.png
skins/vector/images/bullet-icon.png
skins/vector/images/link-icon.png
skins/vector/images/lock-icon.png
skins/vector/images/mail-icon.png
skins/vector/images/page-base.png
skins/vector/images/page-fade.png
skins/vector/images/portal-break.png
skins/vector/images/preferences-base.png
skins/vector/images/preferences-break.png
skins/vector/images/preferences-edge.png
skins/vector/images/preferences-fade.png
skins/vector/images/search-fade.png
skins/vector/images/tab-current-fade.png
skins/vector/images/user-icon.png
skins/vector/images/video-icon.png
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/MWNamespaceTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/api/generateRandomImages.php
tests/phpunit/includes/cache/ProcessCacheLRUTest.php [new file with mode: 0644]
tests/phpunit/includes/filerepo/FileBackendTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/maintenance/backupPrefetchTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/load.mock.php [new file with mode: 0644]
tests/qunit/data/testloader.php [deleted file]
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js

diff --git a/.jshintignore b/.jshintignore
new file mode 100644 (file)
index 0000000..fb2a42f
--- /dev/null
@@ -0,0 +1,20 @@
+# upstream libs
+resources/jquery/jquery.appear.js
+resources/jquery/jquery.async.js
+resources/jquery/jquery.cycle.all.js
+resources/jquery/jquery.cookie.js
+resources/jquery/jquery.farbtastic.js
+resources/jquery/jquery.form.js
+resources/jquery/jquery.js
+resources/jquery/jquery.json.js
+resources/jquery/jquery.mockjax.js
+resources/jquery/jquery.qunit.js
+resources/jquery/jquery.validate.js
+resources/jquery/jquery.xmldom.js
+resources/jquery.effects
+resources/jquery.ui
+tests/jasmine/lib/jasmine-1.0.1/jasmine-html.js
+tests/jasmine/lib/jasmine-1.0.1/jasmine.js
+
+# legacy stuff
+skins/common
diff --git a/.jshintrc b/.jshintrc
new file mode 100644 (file)
index 0000000..4e82155
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,10 @@
+{
+       "predef": [
+               "mediaWiki",
+               "jQuery",
+               "QUnit"
+       ],
+       "browser": true,
+       "smarttabs": true,
+       "laxbreak": true
+}
diff --git a/README b/README
index 48cf336..805b8ee 100644 (file)
--- a/README
+++ b/README
@@ -46,8 +46,7 @@ The MediaWiki software was written by:
 * Victor Vasiliev
 * Rotem Liss
 * Platonides
-* Antoine Musso
-* Several others (view CREDITS for a more complete list)
+* Many others (view CREDITS for a more complete list)
 
 The contributors hold the copyright to this work, and it is licensed under the
 terms of the GNU General Public License, version 2 or later (see
index a838a37..0fc818d 100644 (file)
@@ -20,11 +20,18 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * `$wgUsePathInfo = true;` is no longer needed to make $wgArticlePath work on servers
   using like nginx, lighttpd, and apache over fastcgi. MediaWiki now always extracts
   path info from REQUEST_URI if it's available.
+* The user right 'upload_by_url' is no longer given to sysops by default.
+  This only affects installations which have $wgAllowCopyUploads set to true.
+* Removed f-prot support from $wgAntivirusSetup.
+* $wgDBerrorLogInUTC to log error in $wgDBerrorLog using an UTC date instead
+  of the wiki timezone set by $wgLocalTimezone.
 
 === New features in 1.20 ===
 * Added TitleIsAlwaysKnown hook which gets called when determining if a page exists.
 * Added NamespaceIsMovable hook which gets called when determining if pages in a
   certain namespace can be moved.
+* Added SpecialPageBeforeExecute hook which gets called before SpecialPage::execute.
+* Added SpecialPageAfterExecute hook which gets called after SpecialPage::execute.
 * (bug 32341) Add upload by URL domain limitation.
 * &useskin=default will now always display the default skin. Useful for users with a
   preference for the non-default skin to look at something using the default skin.
@@ -55,6 +62,8 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * Edit notices can now be translated.
 * (bug 35680) jQuery upgraded to 1.7.2.
 * jQuery UI upgraded to 1.8.21.
+* (bug 35705) QUnit upgraded from v1.2.0 to v1.8.0.
+* (bug 37604) jquery.cookie upgraded to 2011 version.
 * (bug 22887) Add warning and tracking category for preprocessor errors
 * (bug 31704) Allow selection of associated namespace on the watchlist
 * (bug 5445) Now remove autoblocks when a user is unblocked.
@@ -67,7 +76,6 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * New getCreator and getOldestRevision methods added to WikiPage class
 * (bug 4220) the XML dump format schema now have unique identity constraints
   for page and revision identifiers. Patch by Elvis Stansvik.
-* (bug 35705) QUnit upgraded from v1.2.0 to v1.8.0.
 * cleanupSpam.php now can delete spam pages if --delete was specified instead of blanking
   them.
 * Added new hook ChangePasswordForm to allow adding of additional fields in Special:ChangePassword
@@ -76,6 +84,17 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   Will be null on previewing a page being created.
 * (bug 37627) UserNotLoggedIn() exception to show a generic error page whenever
   a user is not logged in.
+* Watched status in changes lists are no longer indicated by <strong></strong>
+  tags with class "mw-watched". Instead, each line now has a class
+  "mw-changeslist-line-watched" or "mw-changeslist-line-not-watched", and the
+  title itself is surrounded by <span></span> tags with class "mw-title".
+* Added ContribsPager::reallyDoQuery hook allowing extensions to data to MyContribs
+* Added new hook ParserAfterParse to allow extensions to affect parsed output
+  after the parse is complete but before block level processing, link holder
+  replacement, and so on.
+* (bug 34678) Added InternalParseBeforeSanitize hook which gets called during Parser's
+  internalParse method just before the parser removes unwanted/dangerous HTML tags.
+* (bug 36783) Implement jQuery Promise interface in mediawiki.api module.
 
 === Bug fixes in 1.20 ===
 * (bug 30245) Use the correct way to construct a log page title.
@@ -118,9 +137,9 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 35572) Blocks appear to succeed even if query fails due to wrong DB structure
 * (bug 31757) Add a word-separator between help-messages in HTMLForm
 * (bug 30410) Removed deprecated $wgFilterCallback and the 'filtered' API error.
-* (bug 32604) Some messages needs escaping of wikitext inside username
+* (bug 32604) Some messages needs escaping of wikitext inside username.
 * (bug 36537) Rename wfArrayToCGI to wfArrayToCgi for consistency with wfCgiToArray.
-* (bug 25946) The message on the top of Special:RecentChanges is now displayed
+* (bug 25946) The message on the top of Special:RecentChanges is now displayed.
   in user language instead of content language.
 * (bug 35264) Wrong type used for <ns> in export.xsd
 * (bug 24985) Use $wgTmpDirectory as the default temp directory so that people
@@ -128,6 +147,23 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 27283) SqlBagOStuff breaks PostgreSQL transactions.
 * (bug 35727) mw.Api ajax() should put token parameter last.
 * (bug 37708) mw.Uri.clone() should make a deep copy.
+* (bug 38024) ResourceLoader should not create empty stylesheets for modules
+  that don't have stylesheets.
+* (bug 36812) Special:ActiveUsers "Hide bots" should hide users from any group
+  having the "bot" user right, instead of just the default "bot" user group.
+* (bug 35082) mw.util.addPortletLink incorrectly adds link to mutiple <ul> tags.
+* (bug 36495) Sanitizer::fixDeprecatedAttributes should convert "align"
+  attribute to margin or float instead of text-align (for non-table-cells).
+* (bug 36991) jquery.tablesorter should extract date sort format from date
+  string instead of global config. Dates like "April 1 2012" and "1 April 2012"
+  now sort correctly regardless of the content language's DefaultDateFormat.
+* (bug 31895) mw.loader mode now correct when triggered from a $.fn.ready
+  handler that is bound before mediawiki.js's handler (e.g. browser-userscripts
+  like greasemonkey).
+* (bug 38152) jquery.tablesorter: Use .data() instead of .attr(), so that live
+  values are used instead of just the fixed values from when the tablesorter
+  was initialized.
+* (bug 38093) Gender of changed user groups missing in Special:Log/rights
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
@@ -139,13 +175,21 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 32497) API now allows changing of protection level using pageid.
 * (bug 32498) API now allows comparing pages using pageids.
 * (bug 30975) API import of pages with invalid characters in this wiki leads to Fatal Error.
-* (bug 30488) API now allows listing of backlinks/embeddedin/imageusage per pageid
-* (bug 34927) Output media_type for list=filearchive
-* (bug 28814) add properties to output of action=parse
-* (bug 33224) add variants of content language to meta=siteinfo
-* (bug 36761) "Mark pages as visited" now submits previously established filter options
-* (bug 32643) action=purge with forcelinkupdate no longer crashes when ratelimit is reached
-* The paraminfo module now also contains result properties for most modules
+* (bug 30488) API now allows listing of backlinks/embeddedin/imageusage per pageid.
+* (bug 34927) Output media_type for list=filearchive.
+* (bug 28814) add properties to output of action=parse.
+* (bug 33224) add variants of content language to meta=siteinfo.
+* (bug 36761) "Mark pages as visited" now submits previously established filter options.
+* (bug 32643) action=purge with forcelinkupdate no longer crashes when ratelimit is reached.
+* The paraminfo module now also contains result properties for most modules.
+* (bug 32348) Allow descending order for list=alllinks.
+* (bug 31777) Upload unknown error ``fileexists-forbidden''.
+* (bug 32382) Allow descending order for list=iwbacklinks.
+* (bug 32381) Allow descending order for list=backlinks, list=embeddedin and list=imageusage.
+* (bug 32383) Allow descending order for list=langbacklinks.
+* API meta=siteinfo can now return the list of known variable IDs.
+* (bug 30836) siteinfo prop=specialpagealiases will no longer return nonexistent special pages.
+* (bug 35980) list=deletedrevs now honors drdir correctly in "all" mode (mode #3).
 
 === Languages updated in 1.20 ===
 
@@ -153,6 +197,7 @@ MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
 
+* Emilian (egl) added.
 * Tornedalen Finnish (fit) added.
 * Mizo (lus) added.
 * Santali (sat) added.
diff --git a/UPGRADE b/UPGRADE
index 9e7d035..cdaf4f9 100644 (file)
--- a/UPGRADE
+++ b/UPGRADE
@@ -76,7 +76,7 @@ behaviour of MediaWiki.
 
 Extensions usually need to be upgraded at the same time as the MediaWiki core.
 
-In MediaWiki 1.14 some extensions are migrated into the core. Please see the
+In MediaWiki 1.14 some extensions were migrated into the core. Please see the
 HISTORY section "Migrated extensions" and disable these extensions in your
 LocalSettings.php
 
diff --git a/api.php b/api.php
index 1cd5497..9e1f5dd 100644 (file)
--- a/api.php
+++ b/api.php
@@ -62,43 +62,6 @@ if ( !$wgEnableAPI ) {
        die(1);
 }
 
-// Selectively allow cross-site AJAX
-
-/**
- * Helper function to convert wildcard string into a regex
- * '*' => '.*?'
- * '?' => '.'
- *
- * @param $search string
- * @return string
- */
-function convertWildcard( $search ) {
-       $search = preg_quote( $search, '/' );
-       $search = str_replace(
-               array( '\*', '\?' ),
-               array( '.*?', '.' ),
-               $search
-       );
-       return "/$search/";
-}
-
-if ( $wgCrossSiteAJAXdomains && isset( $_SERVER['HTTP_ORIGIN'] ) ) {
-       $exceptions = array_map( 'convertWildcard', $wgCrossSiteAJAXdomainExceptions );
-       $regexes = array_map( 'convertWildcard', $wgCrossSiteAJAXdomains );
-       foreach ( $regexes as $regex ) {
-               if ( preg_match( $regex, $_SERVER['HTTP_ORIGIN'] ) ) {
-                       foreach ( $exceptions as $exc ) { // Check against exceptions
-                               if ( preg_match( $exc, $_SERVER['HTTP_ORIGIN'] ) ) {
-                                       break 2;
-                               }
-                       }
-                       header( "Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}" );
-                       header( 'Access-Control-Allow-Credentials: true' );
-                       break;
-               }
-       }
-}
-
 // Set a dummy $wgTitle, because $wgTitle == null breaks various things
 // In a perfect world this wouldn't be necessary
 $wgTitle = Title::makeTitle( NS_MAIN, 'API' );
@@ -107,7 +70,7 @@ $wgTitle = Title::makeTitle( NS_MAIN, 'API' );
  * is some form of an ApiMain, possibly even one that produces an error message,
  * but we don't care here, as that is handled by the ctor.
  */
-$processor = new ApiMain( $wgRequest, $wgEnableWriteAPI );
+$processor = new ApiMain( RequestContext::getMain(), $wgEnableWriteAPI );
 
 // Process data & print results
 $processor->execute();
index 6d02328..4803746 100644 (file)
@@ -23,6 +23,7 @@
        Fix type for <ns> from "positiveInteger" to "nonNegativeInteger" to allow 0
        Moves <logitem> to its right location.
        Add parentid to revision.
+       Fix type for <id> within <contributor> to "nonNegativeInteger"
 
        The canonical URL to the schema document is:
        http://www.mediawiki.org/xml/export-0.7.xsd
        <complexType name="ContributorType">
                <sequence>
                        <element name="username" type="string" minOccurs="0" />
-                       <element name="id" type="positiveInteger" minOccurs="0" />
+                       <element name="id" type="nonNegativeInteger" minOccurs="0" />
 
                        <element name="ip" type="string" minOccurs="0" />
                </sequence>
index 147e524..47654ce 100644 (file)
@@ -427,6 +427,8 @@ $user: the user (object) deleting the article
 $reason: the reason (string) the article is being deleted
 $error: if the deletion was prohibited, the (raw HTML) error message to display
   (added in 1.13)
+$status: Status object, modify this to throw an error. Overridden by $error
+  (added in 1.20)
 
 'ArticleDeleteComplete': after an article is deleted
 $article: the WikiPage that was deleted
@@ -701,10 +703,18 @@ $user: user (object) whose email is being confirmed
 &$pager: Pager object for contributions
 &$queryInfo: The query for the contribs Pager
 
+'ContribsPager::reallyDoQuery': Called before really executing the query for My Contributions
+&$data: an array of results of all contribs queries
+$pager: The ContribsPager object hooked into
+$offset: Index offset, inclusive
+$limit: Exact query limit
+$descending: Query direction, false for ascending, true for descending
+
 'ContributionsLineEnding': Called before a contributions HTML line is finished
 $page: SpecialPage object for contributions
-$ret: the HTML line
+&$ret: the HTML line
 $row: the DB row for this line
+&$classes: the classes to add to the surrounding <li>
 
 'ContributionsToolLinks': Change tool links above Special:Contributions
 $id: User identifier
@@ -1119,8 +1129,16 @@ $prefix: interwiki prefix we are looking for.
 &$iwData: output array describing the interwiki with keys iw_url, iw_local,
   iw_trans and optionally iw_api and iw_wikiid.
 
+'InternalParseBeforeSanitize': during Parser's internalParse method just before the
+parser removes unwanted/dangerous HTML tags and after nowiki/noinclude/includeonly/
+onlyinclude and other processings. Ideal for syntax-extensions after template/parser
+function execution which respect nowiki and HTML-comments.
+&$parser: Parser object
+&$text: string containing partially parsed text
+&$stripState: Parser's internal StripState object
+
 'InternalParseBeforeLinks': during Parser's internalParse method before links
-but after noinclude/includeonly/onlyinclude and other processing.
+but after nowiki/noinclude/includeonly/onlyinclude and other processings.
 &$parser: Parser object
 &$text: string containing partially parsed text
 &$stripState: Parser's internal StripState object
@@ -1460,6 +1478,12 @@ A parser extension which depends on user options should install
 this hook and append its values to the key.
 $hash: reference to a hash key string which can be modified
 
+'ParserAfterParse': Called from Parser::parse() just after the call to
+Parser::internalParse() returns
+$parser: parser object
+$text: text being parsed
+$stripState: stripState used (object)
+
 'ParserAfterStrip': Same as ParserBeforeStrip
 
 'ParserAfterTidy': Called after Parser::tidy() in Parser::parse()
@@ -1828,6 +1852,14 @@ Each key maps to an associative array with a 'msg' (message key) and a 'default'
 hook to remove a core special page
 $list: list (array) of core special pages
 
+'SpecialPageAfterExecute': called after SpecialPage::execute
+$special: the SpecialPage object
+$subPage: the subpage string or null if no subpage was specified
+
+'SpecialPageBeforeExecute': called before SpecialPage::execute
+$special: the SpecialPage object
+$subPage: the subpage string or null if no subpage was specified
+
 'SpecialPasswordResetOnSubmit': when executing a form submission on Special:PasswordReset
 $users: array of User objects
 $data: array of data submitted by the user
index dcde2cf..3b259e2 100644 (file)
@@ -1369,10 +1369,12 @@ class Article extends Page {
 
                        $this->doDelete( $reason, $suppress );
 
-                       if ( $request->getCheck( 'wpWatch' ) && $user->isLoggedIn() ) {
-                               WatchAction::doWatch( $title, $user );
-                       } elseif ( $title->userIsWatching() ) {
-                               WatchAction::doUnwatch( $title, $user );
+                       if ( $user->isLoggedIn() && $request->getCheck( 'wpWatch' ) != $user->isWatched( $title ) ) {
+                               if ( $request->getCheck( 'wpWatch' ) ) {
+                                       WatchAction::doWatch( $title, $user );
+                               } else {
+                                       WatchAction::doUnwatch( $title, $user );
+                               }
                        }
 
                        return;
@@ -1436,7 +1438,7 @@ class Article extends Page {
                } else {
                        $suppress = '';
                }
-               $checkWatch = $user->getBoolOption( 'watchdeletion' ) || $this->getTitle()->userIsWatching();
+               $checkWatch = $user->getBoolOption( 'watchdeletion' ) || $user->isWatched( $this->getTitle() );
 
                $form = Xml::openElement( 'form', array( 'method' => 'post',
                        'action' => $this->getTitle()->getLocalURL( 'action=delete' ), 'id' => 'deleteconfirm' ) ) .
@@ -1520,7 +1522,8 @@ class Article extends Page {
        public function doDelete( $reason, $suppress = false ) {
                $error = '';
                $outputPage = $this->getContext()->getOutput();
-               if ( $this->mPage->doDeleteArticle( $reason, $suppress, 0, true, $error ) ) {
+               $status = $this->mPage->doDeleteArticleReal( $reason, $suppress, 0, true, $error );
+               if ( $status->isGood() ) {
                        $deleted = $this->getTitle()->getPrefixedText();
 
                        $outputPage->setPageTitle( wfMessage( 'actioncomplete' ) );
@@ -1533,8 +1536,9 @@ class Article extends Page {
                } else {
                        $outputPage->setPageTitle( wfMessage( 'cannotdelete-title', $this->getTitle()->getPrefixedText() ) );
                        if ( $error == '' ) {
+                               $errors = $status->getErrorsArray();
                                $outputPage->wrapWikiMsg( "<div class=\"error mw-error-cannotdelete\">\n$1\n</div>",
-                                       array( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) )
+                                       $errors[0]
                                );
                                $outputPage->addHTML( Xml::element( 'h2', null, LogPage::logName( 'delete' ) ) );
 
index 83397fd..6c37d1a 100644 (file)
@@ -419,6 +419,7 @@ $wgAutoloadLocalClasses = array(
        'LinkCache' => 'includes/cache/LinkCache.php',
        'MessageCache' => 'includes/cache/MessageCache.php',
        'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
+       'ProcessCacheLRU' => 'includes/cache/ProcessCacheLRU.php',
        'ResourceFileCache' => 'includes/cache/ResourceFileCache.php',
        'SquidUpdate' => 'includes/cache/SquidUpdate.php',
        'TitleDependency' => 'includes/cache/CacheDependency.php',
@@ -1046,6 +1047,9 @@ $wgAutoloadLocalClasses = array(
        'TestFileIterator' => 'tests/testHelpers.inc',
        'TestRecorder' => 'tests/testHelpers.inc',
 
+       # tests/phpunit/includes/db
+       'ORMRowTest' => 'tests/phpunit/includes/db/ORMRowTest.php',
+
        # tests/parser
        'ParserTest' => 'tests/parser/parserTest.inc',
        'ParserTestParserHook' => 'tests/parser/parserTestsParserHook.php',
index 204df45..34e9eba 100644 (file)
@@ -35,6 +35,8 @@ class ChangeTags {
         *
         */
        static function formatSummaryRow( $tags, $page ) {
+               global $wgLang;
+
                if( !$tags )
                        return array( '', array() );
 
@@ -51,7 +53,7 @@ class ChangeTags {
                        );
                        $classes[] = Sanitizer::escapeClass( "mw-tag-$tag" );
                }
-               $markers = '(' . implode( ', ', $displayTags ) . ')';
+               $markers = wfMessage( 'parentheses' )->rawParams( $wgLang->commaList( $displayTags ) )->text();
                $markers = Xml::tags( 'span', array( 'class' => 'mw-tag-markers' ), $markers );
 
                return array( $markers, $classes );
index 8b0fa06..96a11e1 100644 (file)
@@ -108,7 +108,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * Sets the list to use a <li class="watchlist-(namespace)-(page)"> tag
+        * Sets the list to use a "<li class='watchlist-(namespace)-(page)'>" tag
         * @param $value Boolean
         */
        public function setWatchlistDivs( $value = true ) {
@@ -123,7 +123,7 @@ class ChangesList extends ContextSource {
                if( !isset( $this->message ) ) {
                        foreach ( explode( ' ', 'cur diff hist last blocklink history ' .
                        'semicolon-separator pipe-separator' ) as $msg ) {
-                               $this->message[$msg] = wfMsgExt( $msg, array( 'escapenoentities' ) );
+                               $this->message[$msg] = $this->msg( $msg )->escaped();
                        }
                }
        }
@@ -145,7 +145,7 @@ class ChangesList extends ContextSource {
        }
 
        /**
-        * Provide the <abbr> element appropriate to a given abbreviated flag,
+        * Provide the "<abbr>" element appropriate to a given abbreviated flag,
         * namely the flag indicating a new page, a minor edit, a bot edit, or an
         * unpatrolled edit.  By default in English it will contain "N", "m", "b",
         * "!" respectively, plus it will have an appropriate title and class.
@@ -192,6 +192,7 @@ class ChangesList extends ContextSource {
                $this->rcCacheIndex = 0;
                $this->lastdate = '';
                $this->rclistOpen = false;
+               $this->getOutput()->addModuleStyles( 'mediawiki.special.changeslist' );
                return '';
        }
 
@@ -199,22 +200,31 @@ class ChangesList extends ContextSource {
         * Show formatted char difference
         * @param $old Integer: bytes
         * @param $new Integer: bytes
+        * @param $context IContextSource context to use
         * @return String
         */
-       public static function showCharacterDifference( $old, $new ) {
-               global $wgRCChangedSizeThreshold, $wgLang, $wgMiserMode;
+       public static function showCharacterDifference( $old, $new, IContextSource $context = null ) {
+               global $wgRCChangedSizeThreshold, $wgMiserMode;
+
+               if ( !$context ) {
+                       $context = RequestContext::getMain();
+               }
+
+               $new = (int)$new;
+               $old = (int)$old;
                $szdiff = $new - $old;
 
-               $code = $wgLang->getCode();
+               $lang = $context->getLanguage();
+               $code = $lang->getCode();
                static $fastCharDiff = array();
                if ( !isset($fastCharDiff[$code]) ) {
-                       $fastCharDiff[$code] = $wgMiserMode || wfMsgNoTrans( 'rc-change-size' ) === '$1';
+                       $fastCharDiff[$code] = $wgMiserMode || $context->msg( 'rc-change-size' )->plain() === '$1';
                }
 
-               $formattedSize = $wgLang->formatNum($szdiff);
+               $formattedSize = $lang->formatNum( $szdiff );
 
                if ( !$fastCharDiff[$code] ) {
-                       $formattedSize = wfMsgExt( 'rc-change-size', array( 'parsemag' ), $formattedSize );
+                       $formattedSize = $context->msg( 'rc-change-size', $formattedSize )->text();
                }
 
                if( abs( $szdiff ) > abs( $wgRCChangedSizeThreshold ) ) {
@@ -234,11 +244,34 @@ class ChangesList extends ContextSource {
                        $formattedSizeClass = 'mw-plusminus-neg';
                }
 
-               $formattedTotalSize = wfMsgExt( 'rc-change-size-new', 'parsemag', $wgLang->formatNum( $new ) );
+               $formattedTotalSize = $context->msg( 'rc-change-size-new' )->numParams( $new )->text();
 
                return Html::element( $tag,
                        array( 'dir' => 'ltr', 'class' => $formattedSizeClass, 'title' => $formattedTotalSize ),
-                       wfMessage( 'parentheses', $formattedSize )->plain() ) . $wgLang->getDirMark();
+                       $context->msg( 'parentheses', $formattedSize )->plain() ) . $lang->getDirMark();
+       }
+
+       /**
+        * Format the character difference of one or several changes.
+        *
+        * @param $old RecentChange
+        * @param $new RecentChange last change to use, if not provided, $old will be used
+        * @return string HTML fragment
+        */
+       public function formatCharacterDifference( RecentChange $old, RecentChange $new = null ) {
+               $oldlen = $old->mAttribs['rc_old_len'];
+
+               if ( $new ) {
+                       $newlen = $new->mAttribs['rc_new_len'];
+               } else {
+                       $newlen = $old->mAttribs['rc_new_len'];
+               }
+
+               if( $oldlen === null || $newlen === null ) {
+                       return '';
+               }
+
+               return self::showCharacterDifference( $oldlen, $newlen, $this->getContext() );
        }
 
        /**
@@ -255,7 +288,7 @@ class ChangesList extends ContextSource {
 
        public function insertDateHeader( &$s, $rc_timestamp ) {
                # Make date header if necessary
-               $date = $this->getLanguage()->date( $rc_timestamp, true, true );
+               $date = $this->getLanguage()->userDate( $rc_timestamp, $this->getUser() );
                if( $date != $this->lastdate ) {
                        if( $this->lastdate != '' ) {
                                $s .= "</ul>\n";
@@ -339,10 +372,8 @@ class ChangesList extends ContextSource {
                if( $this->isDeleted($rc,Revision::DELETED_TEXT) ) {
                        $articlelink = '<span class="history-deleted">' . $articlelink . '</span>';
                }
-               # Bolden pages watched by this user
-               if( $watched ) {
-                       $articlelink = "<strong class=\"mw-watched\">{$articlelink}</strong>";
-               }
+               # To allow for boldening pages watched by this user
+               $articlelink = "<span class=\"mw-title\">{$articlelink}</span>";
                # RTL/LTR marker
                $articlelink .= $this->getLanguage()->getDirMark();
 
@@ -358,7 +389,7 @@ class ChangesList extends ContextSource {
         */
        public function insertTimestamp( &$s, $rc ) {
                $s .= $this->message['semicolon-separator'] .
-                       $this->getLanguage()->time( $rc->mAttribs['rc_timestamp'], true, true ) . ' . . ';
+                       $this->getLanguage()->userTime( $rc->mAttribs['rc_timestamp'], $this->getUser() ) . ' . . ';
        }
 
        /**
@@ -369,7 +400,7 @@ class ChangesList extends ContextSource {
         */
        public function insertUserRelatedLinks( &$s, &$rc ) {
                if( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
-                       $s .= ' <span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
+                       $s .= ' <span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
                } else {
                        $s .= $this->getLanguage()->getDirMark() . Linker::userLink( $rc->mAttribs['rc_user'],
                                $rc->mAttribs['rc_user_text'] );
@@ -385,12 +416,13 @@ class ChangesList extends ContextSource {
         */
        public function insertLogEntry( $rc ) {
                $formatter = LogFormatter::newFromRow( $rc->mAttribs );
+               $formatter->setContext( $this->getContext() );
                $formatter->setShowUserToolLinks( true );
                $mark = $this->getLanguage()->getDirMark();
                return $formatter->getActionText() . " $mark" . $formatter->getComment();
        }
 
-       /** 
+       /**
         * Insert a formatted comment
         * @param $rc RecentChange
         * @return string
@@ -398,7 +430,7 @@ class ChangesList extends ContextSource {
        public function insertComment( $rc ) {
                if( $rc->mAttribs['rc_type'] != RC_MOVE && $rc->mAttribs['rc_type'] != RC_MOVE_OVER_REDIRECT ) {
                        if( $this->isDeleted( $rc, Revision::DELETED_COMMENT ) ) {
-                               return ' <span class="history-deleted">' . wfMsgHtml( 'rev-deleted-comment' ) . '</span>';
+                               return ' <span class="history-deleted">' . $this->msg( 'rev-deleted-comment' )->escaped() . '</span>';
                        } else {
                                return Linker::commentBlock( $rc->mAttribs['rc_comment'], $rc->getTitle() );
                        }
@@ -422,8 +454,7 @@ class ChangesList extends ContextSource {
                static $cache = array();
                if( $count > 0 ) {
                        if( !isset( $cache[$count] ) ) {
-                               $cache[$count] = wfMsgExt( 'number_of_watching_users_RCview',
-                                       array('parsemag', 'escape' ), $this->getLanguage()->formatNum( $count ) );
+                               $cache[$count] = $this->msg( 'number_of_watching_users_RCview' )->numParams( $count )->escaped();
                        }
                        return $cache[$count];
                } else {
@@ -533,7 +564,9 @@ class OldChangesList extends ChangesList {
        /**
         * Format a line using the old system (aka without any javascript).
         *
-        * @param $rc RecentChange
+        * @param $rc RecentChange, passed by reference
+        * @param $watched Bool (default false)
+        * @param $linenumber Int (default null)
         * @return string
         */
        public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
@@ -558,6 +591,10 @@ class OldChangesList extends ChangesList {
                        }
                }
 
+               // Indicate watched status on the line to allow for more
+               // comprehensive styling.
+               $classes[] = $watched ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
+
                // Moved pages (very very old, not supported anymore)
                if( $rc->mAttribs['rc_type'] == RC_MOVE || $rc->mAttribs['rc_type'] == RC_MOVE_OVER_REDIRECT ) {
                // Log entries
@@ -588,9 +625,9 @@ class OldChangesList extends ChangesList {
                # Edit/log timestamp
                $this->insertTimestamp( $s, $rc );
                # Bytes added or removed
-               if( $wgRCShowChangedSize ) {
-                       $cd = $rc->getCharacterDifference();
-                       if( $cd != '' ) {
+               if ( $wgRCShowChangedSize ) {
+                       $cd = $this->formatCharacterDifference( $rc );
+                       if ( $cd !== '' ) {
                                $s .= "$cd  . . ";
                        }
                }
@@ -614,8 +651,7 @@ class OldChangesList extends ChangesList {
 
                # How many users watch this page
                if( $rc->numberofWatchingusers > 0 ) {
-                       $s .= ' ' . wfMsgExt( 'number_of_watching_users_RCview',
-                               array( 'parsemag', 'escape' ), $this->getLanguage()->formatNum( $rc->numberofWatchingusers ) );
+                       $s .= ' ' . $this->numberofWatchingusers( $rc->numberofWatchingusers );
                }
 
                if( $this->watchlist ) {
@@ -667,7 +703,7 @@ class EnhancedChangesList extends ChangesList {
                $curIdEq = array( 'curid' => $rc->mAttribs['rc_cur_id'] );
 
                # If it's a new day, add the headline and flush the cache
-               $date = $this->getLanguage()->date( $rc->mAttribs['rc_timestamp'], true );
+               $date = $this->getLanguage()->userDate( $rc->mAttribs['rc_timestamp'], $this->getUser() );
                $ret = '';
                if( $date != $this->lastdate ) {
                        # Process current cache
@@ -715,7 +751,7 @@ class EnhancedChangesList extends ChangesList {
                        $showdifflinks = false;
                }
 
-               $time = $this->getLanguage()->time( $rc->mAttribs['rc_timestamp'], true, true );
+               $time = $this->getLanguage()->userTime( $rc->mAttribs['rc_timestamp'], $this->getUser() );
                $rc->watched = $watched;
                $rc->link = $clink;
                $rc->timestamp = $time;
@@ -764,7 +800,7 @@ class EnhancedChangesList extends ChangesList {
 
                # Make user links
                if( $this->isDeleted( $rc, Revision::DELETED_USER ) ) {
-                       $rc->userlink = ' <span class="history-deleted">' . wfMsgHtml( 'rev-deleted-user' ) . '</span>';
+                       $rc->userlink = ' <span class="history-deleted">' . $this->msg( 'rev-deleted-user' )->escaped() . '</span>';
                } else {
                        $rc->userlink = Linker::userLink( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
                        $rc->usertalklink = Linker::userToolLinks( $rc->mAttribs['rc_user'], $rc->mAttribs['rc_user_text'] );
@@ -808,14 +844,16 @@ class EnhancedChangesList extends ChangesList {
                wfProfileIn( __METHOD__ );
 
                # Add the namespace and title of the block as part of the class
+               $classes = array( 'mw-collapsible', 'mw-collapsed', 'mw-enhanced-rc' );
                if ( $block[0]->mAttribs['rc_log_type'] ) {
                        # Log entry
-                       $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-'
+                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
                                        . $block[0]->mAttribs['rc_log_type'] . '-' . $block[0]->mAttribs['rc_title'] );
                } else {
-                       $classes = 'mw-collapsible mw-collapsed mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns'
+                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns'
                                        . $block[0]->mAttribs['rc_namespace'] . '-' . $block[0]->mAttribs['rc_title'] );
                }
+               $classes[] = $block[0]->watched ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
                $r = Html::openElement( 'table', array( 'class' => $classes ) ) .
                        Html::openElement( 'tr' );
 
@@ -895,7 +933,7 @@ class EnhancedChangesList extends ChangesList {
 
                # Article link
                if( $namehidden ) {
-                       $r .= ' <span class="history-deleted">' . wfMsgHtml( 'rev-deleted-event' ) . '</span>';
+                       $r .= ' <span class="history-deleted">' . $this->msg( 'rev-deleted-event' )->escaped() . '</span>';
                } elseif( $allLogs ) {
                        $r .= $this->maybeWatchedLink( $block[0]->link, $block[0]->watched );
                } else {
@@ -909,7 +947,7 @@ class EnhancedChangesList extends ChangesList {
                $n = count($block);
                static $nchanges = array();
                if ( !isset( $nchanges[$n] ) ) {
-                       $nchanges[$n] = wfMsgExt( 'nchanges', array( 'parsemag', 'escape' ), $this->getLanguage()->formatNum( $n ) );
+                       $nchanges[$n] = $this->msg( 'nchanges' )->numParams( $n )->escaped();
                }
                # Total change link
                $r .= ' ';
@@ -970,8 +1008,7 @@ class EnhancedChangesList extends ChangesList {
                                $first--;
                        }
                        # Get net change
-                       $chardiff = $rcObj->getCharacterDifference( $block[$first]->mAttribs['rc_old_len'],
-                               $block[$last]->mAttribs['rc_new_len'] );
+                       $chardiff = $this->formatCharacterDifference( $block[$first], $block[$last] );
 
                        if( $chardiff == '' ) {
                                $r .= ' ';
@@ -1032,8 +1069,11 @@ class EnhancedChangesList extends ChangesList {
                        $r .= ' . . ';
 
                        # Character diff
-                       if( $wgRCShowChangedSize && $rcObj->getCharacterDifference() ) {
-                               $r .= $rcObj->getCharacterDifference() . ' . . ' ;
+                       if ( $wgRCShowChangedSize ) {
+                               $cd = $this->formatCharacterDifference( $rcObj );
+                               if ( $cd !== '' ) {
+                                       $r .= "$cd . . ";
+                               }
                        }
 
                        if ( $rcObj->mAttribs['rc_type'] == RC_LOG ) {
@@ -1066,7 +1106,7 @@ class EnhancedChangesList extends ChangesList {
         * @param $dir String: one of '', 'd', 'l', 'r'
         * @param $alt String: text
         * @param $title String: text
-        * @return String: HTML <img> tag
+        * @return String: HTML "<img>" tag
         */
        protected function arrow( $dir, $alt='', $title='' ) {
                global $wgStylePath;
@@ -1079,26 +1119,25 @@ class EnhancedChangesList extends ChangesList {
        /**
         * Generate HTML for a right- or left-facing arrow,
         * depending on language direction.
-        * @return String: HTML <img> tag
+        * @return String: HTML "<img>" tag
         */
        protected function sideArrow() {
-               global $wgLang;
-               $dir = $wgLang->isRTL() ? 'l' : 'r';
-               return $this->arrow( $dir, '+', wfMsg( 'rc-enhanced-expand' ) );
+               $dir = $this->getLanguage()->isRTL() ? 'l' : 'r';
+               return $this->arrow( $dir, '+', $this->msg( 'rc-enhanced-expand' )->text() );
        }
 
        /**
         * Generate HTML for a down-facing arrow
         * depending on language direction.
-        * @return String: HTML <img> tag
+        * @return String: HTML "<img>" tag
         */
        protected function downArrow() {
-               return $this->arrow( 'd', '-', wfMsg( 'rc-enhanced-hide' ) );
+               return $this->arrow( 'd', '-', $this->msg( 'rc-enhanced-hide' )->text() );
        }
 
        /**
         * Generate HTML for a spacer image
-        * @return String: HTML <img> tag
+        * @return String: HTML "<img>" tag
         */
        protected function spacerArrow() {
                return $this->arrow( '', codepointToUtf8( 0xa0 ) ); // non-breaking space
@@ -1118,14 +1157,16 @@ class EnhancedChangesList extends ChangesList {
 
                $type = $rcObj->mAttribs['rc_type'];
                $logType = $rcObj->mAttribs['rc_log_type'];
+               $classes = array( 'mw-enhanced-rc' );
                if( $logType ) {
                        # Log entry
-                       $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-log-'
+                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-log-'
                                        . $logType . '-' . $rcObj->mAttribs['rc_title'] );
                } else {
-                       $classes = 'mw-enhanced-rc ' . Sanitizer::escapeClass( 'mw-changeslist-ns' .
+                       $classes[] = Sanitizer::escapeClass( 'mw-changeslist-ns' .
                                        $rcObj->mAttribs['rc_namespace'] . '-' . $rcObj->mAttribs['rc_title'] );
                }
+               $classes[] = $rcObj->watched ? 'mw-changeslist-line-watched' : 'mw-changeslist-line-not-watched';
                $r = Html::openElement( 'table', array( 'class' => $classes ) ) .
                        Html::openElement( 'tr' );
 
@@ -1162,20 +1203,22 @@ class EnhancedChangesList extends ChangesList {
                }
                $r .= ' . . ';
                # Character diff
-               if( $wgRCShowChangedSize && ($cd = $rcObj->getCharacterDifference()) ) {
-                       $r .= "$cd . . ";
+               if ( $wgRCShowChangedSize ) {
+                       $cd = $this->formatCharacterDifference( $rcObj );
+                       if ( $cd !== '' ) {
+                               $r .= "$cd . . ";
+                       }
                }
 
                if ( $type == RC_LOG ) {
                        $r .= $this->insertLogEntry( $rcObj );
-               } else { 
+               } else {
                        $r .= ' '.$rcObj->userlink . $rcObj->usertalklink;
                        $r .= $this->insertComment( $rcObj );
                        $this->insertRollback( $r, $rcObj );
                }
 
                # Tags
-               $classes = explode( ' ', $classes );
                $this->insertTags( $r, $rcObj, $classes );
                # Show how many people are watching this if enabled
                $r .= $this->numberofWatchingusers($rcObj->numberofWatchingusers);
index 1ca02b5..7984d63 100644 (file)
@@ -80,8 +80,8 @@ class Cookie {
         * A better method might be to use a blacklist like
         * http://publicsuffix.org/
         *
-        * @fixme fails to detect 3-letter top-level domains
-        * @fixme fails to detect 2-letter top-level domains for single-domain use (probably not a big problem in practice, but there are test cases)
+        * @todo fixme fails to detect 3-letter top-level domains
+        * @todo fixme fails to detect 2-letter top-level domains for single-domain use (probably not a big problem in practice, but there are test cases)
         *
         * @param $domain String: the domain to validate
         * @param $originDomain String: (optional) the domain the cookie originates from
index 7203c3b..793d335 100644 (file)
 /**
  * Abstract base class for update jobs that do something with some secondary
  * data extracted from article.
+ *
+ * @note: subclasses should NOT start or commit transactions in their doUpdate() method,
+ *        a transaction will automatically be wrapped around the update. If need be,
+ *        subclasses can override the beginTransaction() and commitTransaction() methods.
  */
 abstract class DataUpdate implements DeferrableUpdate {
 
index 6e59a86..c1c73d2 100644 (file)
@@ -128,28 +128,6 @@ $wgUsePathInfo =
  */
 $wgScriptExtension  = '.php';
 
-/**
- * The URL path to index.php.
- *
- * Will default to "{$wgScriptPath}/index{$wgScriptExtension}" in Setup.php
- */
-$wgScript = false;
-
-/**
- * The URL path to redirect.php. This is a script that is used by the Nostalgia
- * skin.
- *
- * Will default to "{$wgScriptPath}/redirect{$wgScriptExtension}" in Setup.php
- */
-$wgRedirectScript = false;
-
-/**
- * The URL path to load.php.
- *
- * Defaults to "{$wgScriptPath}/load{$wgScriptExtension}".
- */
-$wgLoadScript = false;
-
 
 /**@}*/
 
@@ -172,7 +150,30 @@ $wgLoadScript = false;
  */
 
 /**
- * The URL path of the skins directory. Will default to "{$wgScriptPath}/skins" in Setup.php
+ * The URL path to index.php.
+ *
+ * Defaults to "{$wgScriptPath}/index{$wgScriptExtension}".
+ */
+$wgScript = false;
+
+/**
+ * The URL path to redirect.php. This is a script that is used by the Nostalgia
+ * skin.
+ *
+ * Defaults to "{$wgScriptPath}/redirect{$wgScriptExtension}".
+ */
+$wgRedirectScript = false;
+
+/**
+ * The URL path to load.php.
+ *
+ * Defaults to "{$wgScriptPath}/load{$wgScriptExtension}".
+ */
+$wgLoadScript = false;
+
+/**
+ * The URL path of the skins directory.
+ * Defaults to "{$wgScriptPath}/skins".
  */
 $wgStylePath = false;
 $wgStyleSheetPath = &$wgStylePath;
@@ -191,7 +192,8 @@ $wgLocalStylePath = false;
 $wgExtensionAssetsPath = false;
 
 /**
- * Filesystem stylesheets directory. Will default to "{$IP}/skins" in Setup.php
+ * Filesystem stylesheets directory.
+ * Defaults to "{$IP}/skins".
  */
 $wgStyleDirectory = false;
 
@@ -199,29 +201,31 @@ $wgStyleDirectory = false;
  * The URL path for primary article page views. This path should contain $1,
  * which is replaced by the article title.
  *
- * Will default to "{$wgScript}/$1" or "{$wgScript}?title=$1" in Setup.php,
+ * Defaults to "{$wgScript}/$1" or "{$wgScript}?title=$1",
  * depending on $wgUsePathInfo.
  */
 $wgArticlePath = false;
 
 /**
- * The URL path for the images directory. Will default to "{$wgScriptPath}/images" in Setup.php
+ * The URL path for the images directory.
+ * Defaults to "{$wgScriptPath}/images".
  */
 $wgUploadPath = false;
 
 /**
- * The maximum age of temporary (incomplete) uploaded files
+ * The filesystem path of the images directory. Defaults to "{$IP}/images".
  */
-$wgUploadStashMaxAge = 6 * 3600; // 6 hours
+$wgUploadDirectory = false;
 
 /**
- * The filesystem path of the images directory. Defaults to "{$IP}/images".
+ * Directory where the cached page will be saved.
+ * Defaults to "{$wgUploadDirectory}/cache".
  */
-$wgUploadDirectory = false;
+$wgFileCacheDirectory = false;
 
 /**
  * The URL path of the wiki logo. The logo size should be 135x135 pixels.
- * Will default to "{$wgStylePath}/common/images/wiki.png" in Setup.php
+ * Defaults to "{$wgStylePath}/common/images/wiki.png".
  */
 $wgLogo = false;
 
@@ -241,14 +245,14 @@ $wgAppleTouchIcon = false;
  * be web accessible.
  *
  * When this setting is set to false, its value will be set through a call
- * to wfTempDir(). See that methods implementation for the actul detection
+ * to wfTempDir(). See that methods implementation for the actual detection
  * logic.
  *
  * Developers should use the global function wfTempDir() instead of this
  * variable.
  *
  * @see wfTempDir()
- * @note Default modified to false in v1.20
+ * @note Default changed to false in MediaWiki 1.20.
  *
  */
 $wgTmpDirectory = false;
@@ -287,6 +291,11 @@ $wgActionPaths = array();
 /** Uploads have to be specially set up to be secure */
 $wgEnableUploads = false;
 
+/**
+ * The maximum age of temporary (incomplete) uploaded files
+ */
+$wgUploadStashMaxAge = 6 * 3600; // 6 hours
+
 /** Allows to move images and other media files */
 $wgAllowImageMoving = true;
 
@@ -338,7 +347,7 @@ $wgImgAuthPublicTest = true;
  *                          container : backend container name the zone is in
  *                          directory : root path within container for the zone
  *                          url       : base URL to the root of the zone
- *                      Zones default to using <repo name>-<zone name> as the container name
+ *                      Zones default to using "<repo name>-<zone name>" as the container name
  *                      and default to using the container root as the zone's root directory.
  *                      Nesting of zone locations within other zones should be avoided.
  *   - url              Public zone URL. The 'zones' settings take precedence.
@@ -358,8 +367,8 @@ $wgImgAuthPublicTest = true;
  *                      is 0644.
  *   - directory        The local filesystem directory where public files are stored. Not used for
  *                      some remote repos.
- *   - thumbDir         The base thumbnail directory. Defaults to <directory>/thumb.
- *   - thumbUrl         The base thumbnail URL. Defaults to <url>/thumb.
+ *   - thumbDir         The base thumbnail directory. Defaults to "<directory>/thumb".
+ *   - thumbUrl         The base thumbnail URL. Defaults to "<url>/thumb".
  *
  *
  * These settings describe a foreign MediaWiki installation. They are optional, and will be ignored
@@ -460,28 +469,38 @@ $wgUpdateCompatibleMetadata = false;
  * $wgForeignFileRepos variable.
  */
 $wgUseSharedUploads = false;
+
 /** Full path on the web server where shared uploads can be found */
 $wgSharedUploadPath = "http://commons.wikimedia.org/shared/images";
+
 /** Fetch commons image description pages and display them on the local wiki? */
 $wgFetchCommonsDescriptions = false;
+
 /** Path on the file system where shared uploads can be found. */
 $wgSharedUploadDirectory = "/var/www/wiki3/images";
+
 /** DB name with metadata about shared directory. Set this to false if the uploads do not come from a wiki. */
 $wgSharedUploadDBname = false;
+
 /** Optional table prefix used in database. */
 $wgSharedUploadDBprefix = '';
+
 /** Cache shared metadata in memcached. Don't do this if the commons wiki is in a different memcached domain */
 $wgCacheSharedUploads = true;
+
 /**
-* Allow for upload to be copied from an URL. Requires Special:Upload?source=web
-* The timeout for copy uploads is set by $wgHTTPTimeout.
-*/
+ * Allow for upload to be copied from an URL. Requires Special:Upload?source=web
+ * The timeout for copy uploads is set by $wgHTTPTimeout.
+ * You have to assign the user right 'upload_by_url' to a user group, to use this.
+ */
 $wgAllowCopyUploads = false;
+
 /**
  * Allow asynchronous copy uploads.
  * This feature is experimental and broken as of r81612.
  */
 $wgAllowAsyncCopyUploads = false;
+
 /**
  * A list of domains copy uploads can come from
  */
@@ -514,7 +533,7 @@ $wgUploadNavigationUrl = false;
 
 /**
  * Point the upload link for missing files to an external URL, as with
- * $wgUploadNavigationUrl. The URL will get (?|&)wpDestFile=<filename>
+ * $wgUploadNavigationUrl. The URL will get "(?|&)wpDestFile=<filename>"
  * appended to it as appropriate.
  */
 $wgUploadMissingFileUrl = false;
@@ -732,20 +751,25 @@ $wgSVGConverters = array(
        'imgserv' => '$path/imgserv-wrapper -i svg -o png -w$width $input $output',
        'ImagickExt' => array( 'SvgHandler::rasterizeImagickExt' ),
        );
+
 /** Pick a converter defined in $wgSVGConverters */
 $wgSVGConverter = 'ImageMagick';
+
 /** If not in the executable PATH, specify the SVG converter path. */
 $wgSVGConverterPath = '';
+
 /** Don't scale a SVG larger than this */
 $wgSVGMaxSize = 2048;
+
 /** Don't read SVG metadata beyond this point.
- * Default is 1024*256 bytes */
+ * Default is 1024*256 bytes
+ */
 $wgSVGMetadataCutoff = 262144;
 
 /**
  * MediaWiki will reject HTMLesque tags in uploaded files due to idiotic browsers which can't
  * perform basic stuff like MIME detection and which are vulnerable to further idiots uploading
- * crap files as images. When this directive is on, <title> will be allowed in files with
+ * crap files as images. When this directive is on, "<title>" will be allowed in files with
  * an "image/svg+xml" MIME type. You should leave this disabled if your web server is misconfigured
  * and doesn't send appropriate MIME types for SVG images.
  */
@@ -796,7 +820,7 @@ $wgMaxAnimatedGifArea = 1.25e7;
 $wgThumbnailEpoch = '20030516000000';
 
 /**
- * If set, inline scaled images will still produce <img> tags ready for
+ * If set, inline scaled images will still produce "<img>" tags ready for
  * output instead of showing an error message.
  *
  * This may be useful if errors are transitory, especially if the site
@@ -888,20 +912,6 @@ $wgAntivirusSetup = array(
 
                'messagepattern' => '/.*?:(.*)/sim',
        ),
-
-       #setup for f-prot
-       'f-prot' => array (
-               'command' => "f-prot ",
-
-               'codemap' => array (
-                       "0" => AV_NO_VIRUS, # no virus
-                       "3" => AV_VIRUS_FOUND, # virus found
-                       "6" => AV_VIRUS_FOUND, # virus found
-                       "*" => AV_SCAN_FAILED, # else scan failed
-               ),
-
-               'messagepattern' => '/.*?Infection:(.*)$/m',
-       ),
 );
 
 
@@ -988,7 +998,7 @@ $wgThumbLimits = array(
 );
 
 /**
- * Default parameters for the <gallery> tag
+ * Default parameters for the "<gallery>" tag
  */
 $wgGalleryOptions = array (
        'imagesPerRow' => 0, // Default number of images per-row in the gallery. 0 -> Adapt to screensize
@@ -1371,6 +1381,11 @@ $wgMasterWaitTimeout = 10;
 
 /** File to log database errors to */
 $wgDBerrorLog = false;
+/**
+ * Override wiki timezone to UTC for wgDBerrorLog
+ * @since 1.20
+ */
+$wgDBerrorLogInUTC = false;
 
 /** When to give an error message */
 $wgDBClusterTimeout = 10;
@@ -1630,7 +1645,8 @@ $wgObjectCaches = array(
 $wgParserCacheExpireTime = 86400;
 
 /**
- * Select which DBA handler <http://www.php.net/manual/en/dba.requirements.php> to use as CACHE_DBA backend
+ * Select which DBA handler <http://www.php.net/manual/en/dba.requirements.php>
+ * to use as CACHE_DBA backend.
  */
 $wgDBAhandler = 'db3';
 
@@ -1742,12 +1758,6 @@ $wgStyleVersion = '303';
  */
 $wgUseFileCache = false;
 
-/**
- * Directory where the cached page will be saved.
- * Will default to "{$wgUploadDirectory}/cache" in Setup.php
- */
-$wgFileCacheDirectory = false;
-
 /**
  * Depth of the subdirectory hierarchy to be created under
  * $wgFileCacheDirectory.  The subdirectories will be named based on
@@ -2355,7 +2365,7 @@ $wgWellFormedXml = true;
  * Use the prefix for the key and the namespace for the value. For
  * example:
  * $wgXhtmlNamespaces['svg'] = 'http://www.w3.org/2000/svg';
- * Normally we wouldn't have to define this in the root <html>
+ * Normally we wouldn't have to define this in the root "<html>"
  * element, but IE needs it there in some circumstances.
  *
  * This is ignored if $wgHtml5 is true, for the same reason as
@@ -2631,7 +2641,7 @@ $wgResourceModules = array();
 $wgResourceLoaderSources = array();
 
 /**
- * Default 'remoteBasePath' value for resource loader modules.
+ * Default 'remoteBasePath' value for instances of ResourceLoaderFileModule.
  * If not set, then $wgScriptPath will be used as a fallback.
  */
 $wgResourceBasePath = null;
@@ -2743,7 +2753,7 @@ $wgResourceLoaderValidateJS = true;
 $wgResourceLoaderValidateStaticJS = false;
 
 /**
- * If set to true, asynchronous loading of bottom-queue scripts in the <head>
+ * If set to true, asynchronous loading of bottom-queue scripts in the "<head>"
  * will be enabled. This is an experimental feature that's supposed to make
  * JavaScript load faster.
  */
@@ -3058,7 +3068,7 @@ $wgAllowExternalImagesFrom = '';
 $wgEnableImageWhitelist = true;
 
 /**
- * A different approach to the above: simply allow the <img> tag to be used.
+ * A different approach to the above: simply allow the "<img>" tag to be used.
  * This allows you to specify alt text and other attributes, copy-paste HTML to
  * your wiki more easily, etc.  However, allowing external images in any manner
  * will allow anyone with editing rights to snoop on your visitors' IP
@@ -3100,7 +3110,7 @@ $wgTidyInternal = extension_loaded( 'tidy' );
  */
 $wgDebugTidy = false;
 
-/** Allow raw, unchecked HTML in <html>...</html> sections.
+/** Allow raw, unchecked HTML in "<html>...</html>" sections.
  * THIS IS VERY DANGEROUS on a publicly editable site, so USE wgGroupPermissions
  * TO RESTRICT EDITING to only those that you trust
  */
@@ -3368,7 +3378,7 @@ $wgInvalidUsernameCharacters = '@';
 /**
  * Character used as a delimiter when testing for interwiki userrights
  * (In Special:UserRights, it is possible to modify users on different
- * databases if the delimiter is used, e.g. Someuser@enwiki).
+ * databases if the delimiter is used, e.g. "Someuser@enwiki").
  *
  * It is recommended that you have this delimiter in
  * $wgInvalidUsernameCharacters above, or you will not be able to
@@ -3605,7 +3615,6 @@ $wgGroupPermissions['sysop']['reupload']         = true;
 $wgGroupPermissions['sysop']['reupload-shared']  = true;
 $wgGroupPermissions['sysop']['unwatchedpages']   = true;
 $wgGroupPermissions['sysop']['autoconfirmed']    = true;
-$wgGroupPermissions['sysop']['upload_by_url']    = true;
 $wgGroupPermissions['sysop']['ipblock-exempt']   = true;
 $wgGroupPermissions['sysop']['blockemail']       = true;
 $wgGroupPermissions['sysop']['markbotedits']     = true;
@@ -3615,6 +3624,7 @@ $wgGroupPermissions['sysop']['noratelimit']      = true;
 $wgGroupPermissions['sysop']['movefile']         = true;
 $wgGroupPermissions['sysop']['unblockself']      = true;
 $wgGroupPermissions['sysop']['suppressredirect'] = true;
+#$wgGroupPermissions['sysop']['upload_by_url']    = true;
 #$wgGroupPermissions['sysop']['mergehistory']     = true;
 
 // Permission to change users' group assignments
@@ -4186,6 +4196,13 @@ $wgLogExceptionBacktrace = true;
  */
 $wgShowHostnames = false;
 
+/**
+ * Override server hostname detection with a hardcoded value.
+ * Should be a string, default false.
+ * @since 1.20
+ */
+$wgOverrideHostname = false;
+
 /**
  * If set to true MediaWiki will throw notices for some possible error
  * conditions and for deprecated functions.
@@ -5172,7 +5189,7 @@ $wgLogRestrictions = array(
  * hidden by default unless the link is clicked. Import logs will be shown by
  * default, and hidden when the link is clicked.
  *
- * A message of the form log-show-hide-<type> should be added, and will be used
+ * A message of the form log-show-hide-[type] should be added, and will be used
  * for the link text.
  */
 $wgFilterLogTypes = array(
@@ -5422,7 +5439,7 @@ $wgMaxRedirectLinksRetrieved = 500;
  */
 
 /**
- * Array of allowed values for the title=foo&action=<action> parameter. Syntax is:
+ * Array of allowed values for the "title=foo&action=<action>" parameter. Syntax is:
  *     'foo' => 'ClassName'    Load the specified class which subclasses Action
  *     'foo' => true           Load the class FooAction which subclasses Action
  *                             If something is specified in the getActionOverrides()
index 00af974..b4989a6 100644 (file)
@@ -88,10 +88,19 @@ class DeferredUpdates {
                }
 
                foreach ( $updates as $update ) {
-                       $update->doUpdate();
+                       try {
+                               $update->doUpdate();
 
-                       if ( $doCommit && $dbw->trxLevel() ) {
-                               $dbw->commit( __METHOD__ );
+                               if ( $doCommit && $dbw->trxLevel() ) {
+                                       $dbw->commit( __METHOD__ );
+                               }
+                       } catch ( MWException $e ) {
+                               // We don't want exceptions thrown during deferred updates to
+                               // be reported to the user since the output is already sent.
+                               // Instead we just log them.
+                               if ( !$e instanceof ErrorPageError ) {
+                                       wfDebugLog( 'exception', $e->getLogMessage() );
+                               }
                        }
                }
 
index d0f0c26..f7b41b8 100644 (file)
@@ -25,7 +25,7 @@
  */
 
 /**
- * @defgroup Constants
+ * @defgroup Constants MediaWiki constants
  */
 
 /**
index 6e6f825..f034153 100644 (file)
@@ -591,8 +591,8 @@ class EditPage {
                                wfProfileOut( get_class( $this ) . "::importContentFormData" );
                        }
 
-                       # Truncate for whole multibyte characters. +5 bytes for ellipsis
-                       $this->summary = $wgLang->truncate( $request->getText( 'wpSummary' ), 250 );
+                       # Truncate for whole multibyte characters
+                       $this->summary = $wgLang->truncate( $request->getText( 'wpSummary' ), 255 );
 
                        # If the summary consists of a heading, e.g. '==Foobar==', extract the title from the
                        # header syntax, e.g. 'Foobar'. This is mainly an issue when we are using wpSummary for
@@ -604,7 +604,7 @@ class EditPage {
                        # currently doing double duty as both edit summary and section title. Right now this
                        # is just to allow API edits to work around this limitation, but this should be
                        # incorporated into the actual edit form when EditPage is rewritten (Bugs 18654, 26312).
-                       $this->sectiontitle = $wgLang->truncate( $request->getText( 'wpSectionTitle' ), 250 );
+                       $this->sectiontitle = $wgLang->truncate( $request->getText( 'wpSectionTitle' ), 255 );
                        $this->sectiontitle = preg_replace( '/^\s*=+\s*(.*?)\s*=+\s*$/', '$1', $this->sectiontitle );
 
                        $this->edittime = $request->getVal( 'wpEdittime' );
@@ -756,7 +756,7 @@ class EditPage {
                } elseif ( $wgUser->getOption( 'watchcreations' ) && !$this->mTitle->exists() ) {
                        # Watch creations
                        $this->watchthis = true;
-               } elseif ( $this->mTitle->userIsWatching() ) {
+               } elseif ( $wgUser->isWatched( $this->mTitle ) ) {
                        # Already watched
                        $this->watchthis = true;
                }
@@ -1470,7 +1470,7 @@ class EditPage {
         */
        protected function commitWatch() {
                global $wgUser;
-               if ( $this->watchthis xor $this->mTitle->userIsWatching() ) {
+               if ( $wgUser->isLoggedIn() && $this->watchthis != $wgUser->isWatched( $this->mTitle ) ) {
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->begin( __METHOD__ );
                        if ( $this->watchthis ) {
@@ -1515,7 +1515,7 @@ class EditPage {
         * @private
         * @todo document
         *
-        * @parma $editText string
+        * @param $editText string
         *
         * @return bool
         */
@@ -1582,7 +1582,7 @@ class EditPage {
        /**
         * Check given input text against $wgSpamRegex, and return the text of the first match.
         *
-        * @parma $text string
+        * @param $text string
         *
         * @return string|bool  matching string or false
         */
@@ -2109,7 +2109,7 @@ class EditPage {
         * @return array An array in the format array( $label, $input )
         */
        function getSummaryInput( $summary = "", $labelText = null, $inputAttrs = null, $spanLabelAttrs = null ) {
-               // Note: the maxlength is overriden in JS to 250 and to make it use UTF-8 bytes, not characters.
+               // Note: the maxlength is overriden in JS to 255 and to make it use UTF-8 bytes, not characters.
                $inputAttrs = ( is_array( $inputAttrs ) ? $inputAttrs : array() ) + array(
                        'id' => 'wpSummary',
                        'maxlength' => '200',
@@ -2414,7 +2414,16 @@ HTML
                        '</div>' );
        }
 
+       /**
+        * Get the copyright warning
+        *
+        * Renamed to getCopyrightWarning(), old name kept around for backwards compatibility
+        */
        protected function getCopywarn() {
+               return self::getCopyrightWarning( $this->mTitle );
+       }
+
+       public static function getCopyrightWarning( $title ) {
                global $wgRightsText;
                if ( $wgRightsText ) {
                        $copywarnMsg = array( 'copyrightwarning',
@@ -2425,7 +2434,7 @@ HTML
                                '[[' . wfMsgForContent( 'copyrightpage' ) . ']]' );
                }
                // Allow for site and per-namespace customization of contribution/copyright notice.
-               wfRunHooks( 'EditPageCopyrightWarning', array( $this->mTitle, &$copywarnMsg ) );
+               wfRunHooks( 'EditPageCopyrightWarning', array( $title, &$copywarnMsg ) );
 
                return "<div id=\"editpage-copywarn\">\n" .
                        call_user_func_array( "wfMsgNoTrans", $copywarnMsg ) . "\n</div>";
@@ -2983,8 +2992,8 @@ HTML
         * failure, etc).
         *
         * @todo This doesn't include category or interlanguage links.
-        *       Would need to enhance it a bit, <s>maybe wrap them in XML
-        *       or something...</s> that might also require more skin
+        *       Would need to enhance it a bit, "<s>maybe wrap them in XML
+        *       or something...</s>" that might also require more skin
         *       initialization, so check whether that's a problem.
         */
        function livePreview() {
index 502f2ad..0fc5cd7 100644 (file)
@@ -33,7 +33,8 @@ class MWException extends Exception {
        var $logId;
 
        /**
-        * Should the exception use $wgOut to output the error ?
+        * Should the exception use $wgOut to output the error?
+        *
         * @return bool
         */
        function useOutputPage() {
@@ -44,7 +45,8 @@ class MWException extends Exception {
        }
 
        /**
-        * Can the extension use wfMsg() to get i18n messages ?
+        * Can the extension use wfMsg() to get i18n messages?
+        *
         * @return bool
         */
        function useMessageCache() {
@@ -62,9 +64,9 @@ class MWException extends Exception {
        /**
         * Run hook to allow extensions to modify the text of the exception
         *
-        * @param $name String: class name of the exception
-        * @param $args Array: arguments to pass to the callback functions
-        * @return Mixed: string to output or null if any hook has been called
+        * @param $name string: class name of the exception
+        * @param $args array: arguments to pass to the callback functions
+        * @return string|null string to output or null if any hook has been called
         */
        function runHooks( $name, $args = array() ) {
                global $wgExceptionHooks;
@@ -97,11 +99,11 @@ class MWException extends Exception {
        /**
         * Get a message from i18n
         *
-        * @param $key String: message name
-        * @param $fallback String: default message if the message cache can't be
+        * @param $key string: message name
+        * @param $fallback string: default message if the message cache can't be
         *                  called by the exception
         * The function also has other parameters that are arguments for the message
-        * @return String message with arguments replaced
+        * @return string message with arguments replaced
         */
        function msg( $key, $fallback /*[, params...] */ ) {
                $args = array_slice( func_get_args(), 2 );
@@ -118,7 +120,7 @@ class MWException extends Exception {
         * backtrace to the error, otherwise show a message to ask to set it to true
         * to show that information.
         *
-        * @return String html to output
+        * @return string html to output
         */
        function getHTML() {
                global $wgShowExceptionDetails;
@@ -128,10 +130,10 @@ class MWException extends Exception {
                                '</p><p>Backtrace:</p><p>' . nl2br( htmlspecialchars( $this->getTraceAsString() ) ) .
                                "</p>\n";
                } else {
-                       return 
+                       return
                                "<div class=\"errorbox\">" .
                                '[' . $this->getLogId() . '] ' .
-                               gmdate( 'Y-m-d H:i:s' ) . 
+                               gmdate( 'Y-m-d H:i:s' ) .
                                ": Fatal exception of type " . get_class( $this ) . "</div>\n" .
                                "<!-- Set \$wgShowExceptionDetails = true; " .
                                "at the bottom of LocalSettings.php to show detailed " .
@@ -140,8 +142,10 @@ class MWException extends Exception {
        }
 
        /**
+        * Get the text to display when reporting the error on the command line.
         * If $wgShowExceptionDetails is true, return a text message with a
         * backtrace to the error.
+        *
         * @return string
         */
        function getText() {
@@ -157,13 +161,21 @@ class MWException extends Exception {
        }
 
        /**
-        * Return titles of this error page
-        * @return String
+        * Return the title of the page when reporting this error in a HTTP response.
+        *
+        * @return string
         */
        function getPageTitle() {
                return $this->msg( 'internalerror', "Internal error" );
        }
 
+       /**
+        * Get a random ID for this error.
+        * This allows to link the exception to its correspoding log entry when
+        * $wgShowExceptionDetails is set to false.
+        *
+        * @return string
+        */
        function getLogId() {
                if ( $this->logId === null ) {
                        $this->logId = wfRandomString( 8 );
@@ -175,7 +187,7 @@ class MWException extends Exception {
         * Return the requested URL and point to file and line number from which the
         * exception occured
         *
-        * @return String
+        * @return string
         */
        function getLogMessage() {
                global $wgRequest;
@@ -197,7 +209,9 @@ class MWException extends Exception {
                return "[$id] $url   Exception from line $line of $file: $message";
        }
 
-       /** Output the exception report using HTML */
+       /**
+        * Output the exception report using HTML.
+        */
        function reportHTML() {
                global $wgOut;
                if ( $this->useOutputPage() ) {
@@ -213,13 +227,20 @@ class MWException extends Exception {
                        $wgOut->output();
                } else {
                        header( "Content-Type: text/html; charset=utf-8" );
+                       echo "<!doctype html>\n" .
+                               '<html><head>' .
+                               '<title>' . htmlspecialchars( $this->getPageTitle() ) . '</title>' .
+                               "</head><body>\n";
+
                        $hookResult = $this->runHooks( get_class( $this ) . "Raw" );
                        if ( $hookResult ) {
-                               die( $hookResult );
+                               echo $hookResult;
+                       } else {
+                               echo $this->getHTML();
                        }
 
-                       echo $this->getHTML();
-                       die(1);
+                       echo "</body></html>\n";
+                       die( 1 );
                }
        }
 
@@ -254,7 +275,9 @@ class MWException extends Exception {
        }
 
        /**
-        * @static
+        * Check whether we are in command line mode or not to report the exception
+        * in the correct format.
+        *
         * @return bool
         */
        static function isCommandLine() {
@@ -265,6 +288,7 @@ class MWException extends Exception {
 /**
  * Exception class which takes an HTML error message, and does not
  * produce a backtrace. Replacement for OutputPage::fatalError().
+ *
  * @ingroup Exception
  */
 class FatalError extends MWException {
@@ -285,7 +309,8 @@ class FatalError extends MWException {
 }
 
 /**
- * An error page which can definitely be safely rendered using the OutputPage
+ * An error page which can definitely be safely rendered using the OutputPage.
+ *
  * @ingroup Exception
  */
 class ErrorPageError extends MWException {
@@ -324,6 +349,8 @@ class ErrorPageError extends MWException {
  * Show an error page on a badtitle.
  * Similar to ErrorPage, but emit a 400 HTTP error code to let mobile
  * browser it is not really a valid content.
+ *
+ * @ingroup Exception
  */
 class BadTitleError extends ErrorPageError {
 
@@ -353,6 +380,7 @@ class BadTitleError extends ErrorPageError {
 /**
  * Show an error when a user tries to do something they do not have the necessary
  * permissions for.
+ *
  * @ingroup Exception
  */
 class PermissionsError extends ErrorPageError {
@@ -389,7 +417,8 @@ class PermissionsError extends ErrorPageError {
 
 /**
  * Show an error when the wiki is locked/read-only and the user tries to do
- * something that requires write access
+ * something that requires write access.
+ *
  * @ingroup Exception
  */
 class ReadOnlyError extends ErrorPageError {
@@ -403,7 +432,8 @@ class ReadOnlyError extends ErrorPageError {
 }
 
 /**
- * Show an error when the user hits a rate limit
+ * Show an error when the user hits a rate limit.
+ *
  * @ingroup Exception
  */
 class ThrottledError extends ErrorPageError {
@@ -422,7 +452,8 @@ class ThrottledError extends ErrorPageError {
 }
 
 /**
- * Show an error when the user tries to do something whilst blocked
+ * Show an error when the user tries to do something whilst blocked.
+ *
  * @ingroup Exception
  */
 class UserBlockedError extends ErrorPageError {
@@ -488,15 +519,18 @@ class UserBlockedError extends ErrorPageError {
  * }
  * @endcode
  *
- * @param $reasonMsg A message key containing the reason for the error.
- *        Optional, default: 'exception-nologin-text'
- * @param $titleMsg A message key to set the page title.
- *        Optional, default: 'exception-nologin'
- * @param $params Parameters to wfMsg().
- *        Optiona, default: null
+ * @ingroup Exception
  */
 class UserNotLoggedIn extends ErrorPageError {
 
+       /**
+        * @param $reasonMsg A message key containing the reason for the error.
+        *        Optional, default: 'exception-nologin-text'
+        * @param $titleMsg A message key to set the page title.
+        *        Optional, default: 'exception-nologin'
+        * @param $params Parameters to wfMsg().
+        *        Optiona, default: null
+        */
        public function __construct(
                $reasonMsg = 'exception-nologin-text',
                $titleMsg  = 'exception-nologin',
@@ -621,7 +655,8 @@ class MWExceptionHandler {
        /**
         * Print a message, if possible to STDERR.
         * Use this in command line mode only (see isCommandLine)
-        * @param $message String Failure text
+        *
+        * @param $message string Failure text
         */
        public static function printError( $message ) {
                # NOTE: STDERR may not be available, especially if php-cgi is used from the command line (bug #15602).
@@ -635,8 +670,9 @@ class MWExceptionHandler {
 
        /**
         * Print a message after escaping it and converting newlines to <br>
-        * Use this for non-command line failures
-        * @param $message String Failure text
+        * Use this for non-command line failures.
+        *
+        * @param $message string Failure text
         */
        private static function escapeEchoAndDie( $message ) {
                echo nl2br( htmlspecialchars( $message ) ) . "\n";
index 36d98d6..2bef114 100644 (file)
@@ -472,7 +472,7 @@ class XmlDumpWriter {
        }
 
        /**
-        * Opens the XML output stream's root <mediawiki> element.
+        * Opens the XML output stream's root "<mediawiki>" element.
         * This does not include an xml directive, so is safe to include
         * as a subelement in a larger XML stream. Namespace and XML Schema
         * references are included.
@@ -572,7 +572,7 @@ class XmlDumpWriter {
        }
 
        /**
-        * Opens a <page> section on the output stream, with data
+        * Opens a "<page>" section on the output stream, with data
         * from the given database row.
         *
         * @param $row object
@@ -604,7 +604,7 @@ class XmlDumpWriter {
        }
 
        /**
-        * Closes a <page> section on the output stream.
+        * Closes a "<page>" section on the output stream.
         *
         * @access private
         * @return string
@@ -614,7 +614,7 @@ class XmlDumpWriter {
        }
 
        /**
-        * Dumps a <revision> section on the output stream, with
+        * Dumps a "<revision>" section on the output stream, with
         * data filled in from the given database row.
         *
         * @param $row object
@@ -678,7 +678,7 @@ class XmlDumpWriter {
        }
 
        /**
-        * Dumps a <logitem> section on the output stream, with
+        * Dumps a "<logitem>" section on the output stream, with
         * data filled in from the given database row.
         *
         * @param $row object
@@ -726,6 +726,7 @@ class XmlDumpWriter {
 
        /**
         * @param $timestamp string
+        * @param $indent string Default to six spaces
         * @return string
         */
        function writeTimestamp( $timestamp, $indent = "      " ) {
@@ -736,6 +737,7 @@ class XmlDumpWriter {
        /**
         * @param $id
         * @param $text string
+        * @param $indent string Default to six spaces
         * @return string
         */
        function writeContributor( $id, $text, $indent = "      " ) {
@@ -815,7 +817,7 @@ class XmlDumpWriter {
         * Return prefixed text form of title, but using the content language's
         * canonical namespace. This skips any special-casing such as gendered
         * user namespaces -- which while useful, are not yet listed in the
-        * XML <siteinfo> data so are unsafe in export.
+        * XML "<siteinfo>" data so are unsafe in export.
         *
         * @param Title $title
         * @return string
index 950b437..f9dbf5b 100644 (file)
@@ -183,34 +183,35 @@ class FeedItem {
  * @todo document (needs one-sentence top-level class description).
  * @ingroup Feed
  */
-class ChannelFeed extends FeedItem {
-       /**#@+
-        * Abstract function, override!
-        * @abstract
-        */
-
+abstract class ChannelFeed extends FeedItem {
        /**
         * Generate Header of the feed
+        * @par Example:
+        * @code
+        * print "<feed>";
+        * @endcode
+        * @param $item
         */
-       function outHeader() {
-               # print "<feed>";
-       }
+       abstract public function outHeader();
 
        /**
         * Generate an item
+        * @par Example:
+        * @code
+        * print "<item>...</item>";
+        * @endcode
         * @param $item
         */
-       function outItem( $item ) {
-               # print "<item>...</item>";
-       }
+       abstract public function outItem( $item );
 
        /**
         * Generate Footer of the feed
+        * @par Example:
+        * @code
+        * print "</feed>";
+        * @endcode
         */
-       function outFooter() {
-               # print "</feed>";
-       }
-       /**#@-*/
+       abstract public function outFooter();
 
        /**
         * Setup and send HTTP headers. Don't send any content;
index 9d6ab65..ecdb5ba 100644 (file)
@@ -119,10 +119,12 @@ class FileDeleteForm {
                                // file, otherwise go back to the description page
                                $wgOut->addReturnTo( $this->oldimage ? $this->title : Title::newMainPage() );
 
-                               if ( $wgRequest->getCheck( 'wpWatch' ) && $wgUser->isLoggedIn() ) {
-                                       WatchAction::doWatch( $this->title, $wgUser );
-                               } elseif ( $this->title->userIsWatching() ) {
-                                       WatchAction::doUnwatch( $this->title, $wgUser );
+                               if ( $wgUser->isLoggedIn() && $wgRequest->getCheck( 'wpWatch' ) != $wgUser->isWatched( $this->title ) ) {
+                                       if ( $wgRequest->getCheck( 'wpWatch' ) ) {
+                                               WatchAction::doWatch( $this->title, $wgUser );
+                                       } else {
+                                               WatchAction::doUnwatch( $this->title, $wgUser );
+                                       }
                                }
                        }
                        return;
@@ -154,12 +156,19 @@ class FileDeleteForm {
                        $status = $file->deleteOld( $oldimage, $reason, $suppress );
                        if( $status->ok ) {
                                // Need to do a log item
-                               $log = new LogPage( 'delete' );
                                $logComment = wfMsgForContent( 'deletedrevision', $oldimage );
                                if( trim( $reason ) != '' ) {
                                        $logComment .= wfMsgForContent( 'colon-separator' ) . $reason;
                                }
-                               $log->addEntry( 'delete', $title, $logComment );
+
+                               $logtype = $suppress ? 'suppress' : 'delete';
+
+                               $logEntry = new ManualLogEntry( $logtype, 'delete' );
+                               $logEntry->setPerformer( $user );
+                               $logEntry->setTarget( $title );
+                               $logEntry->setComment( $logComment );
+                               $logid = $logEntry->insert();
+                               $logEntry->publish( $logid );
                        }
                } else {
                        $status = Status::newFatal( 'cannotdelete',
@@ -170,7 +179,10 @@ class FileDeleteForm {
                        try {
                                // delete the associated article first
                                $error = '';
-                               if ( $page->doDeleteArticleReal( $reason, $suppress, 0, false, $error, $user ) >= WikiPage::DELETE_SUCCESS ) {
+                               $deleteStatus = $page->doDeleteArticleReal( $reason, $suppress, 0, false, $error, $user );
+                               // doDeleteArticleReal() returns a non-fatal error status if the page
+                               // or revision is missing, so check for isOK() rather than isGood()
+                               if ( $deleteStatus->isOK() ) {
                                        $status = $file->delete( $reason, $suppress );
                                        if( $status->isOK() ) {
                                                $dbw->commit( __METHOD__ );
@@ -210,7 +222,7 @@ class FileDeleteForm {
                        $suppress = '';
                }
 
-               $checkWatch = $wgUser->getBoolOption( 'watchdeletion' ) || $this->title->userIsWatching();
+               $checkWatch = $wgUser->getBoolOption( 'watchdeletion' ) || $wgUser->isWatched( $this->title );
                $form = Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getAction(),
                        'id' => 'mw-img-deleteconfirm' ) ) .
                        Xml::openElement( 'fieldset' ) .
index ba9bf74..f9ab140 100644 (file)
@@ -1053,11 +1053,22 @@ function wfDebugLog( $logGroup, $text, $public = true ) {
  * @param $text String: database error message.
  */
 function wfLogDBError( $text ) {
-       global $wgDBerrorLog;
+       global $wgDBerrorLog, $wgDBerrorLogInUTC;
        if ( $wgDBerrorLog ) {
                $host = wfHostname();
                $wiki = wfWikiID();
-               $text = date( 'D M j G:i:s T Y' ) . "\t$host\t$wiki\t$text";
+
+               if( $wgDBerrorLogInUTC ) {
+                       $wikiTimezone = date_default_timezone_get();
+                       date_default_timezone_set( 'UTC' );
+               }
+               $date = date( 'D M j G:i:s T Y' );
+               if( $wgDBerrorLogInUTC ) {
+                       // Restore timezone
+                       date_default_timezone_set( $wikiTimezone );
+               }
+
+               $text = "$date\t$host\t$wiki\t$text";
                wfErrorLog( $text, $wgDBerrorLog );
        }
 }
@@ -1758,6 +1769,15 @@ function wfDebugDieBacktrace( $msg = '' ) {
 function wfHostname() {
        static $host;
        if ( is_null( $host ) ) {
+
+               # Hostname overriding
+               global $wgOverrideHostname;
+               if( $wgOverrideHostname !== false ) {
+                       # Set static and skip any detection
+                       $host = $wgOverrideHostname;
+                       return $host;
+               }
+
                if ( function_exists( 'posix_uname' ) ) {
                        // This function not present on Windows
                        $uname = posix_uname();
@@ -2054,7 +2074,7 @@ function wfCheckLimits( $deflimit = 50, $optionname = 'rclimit' ) {
  * Escapes the given text so that it may be output using addWikiText()
  * without any linking, formatting, etc. making its way through. This
  * is achieved by substituting certain characters with HTML entities.
- * As required by the callers, <nowiki> is not used.
+ * As required by the callers, "<nowiki>" is not used.
  *
  * @param $text String: text to be escaped
  * @return String
@@ -3183,7 +3203,7 @@ function wfUseMW( $req_ver ) {
 
 /**
  * Return the final portion of a pathname.
- * Reimplemented because PHP5's basename() is buggy with multibyte text.
+ * Reimplemented because PHP5's "basename()" is buggy with multibyte text.
  * http://bugs.php.net/bug.php?id=33898
  *
  * PHP's basename() only considers '\' a pathchar on Windows and Netware.
index 36008fb..9ced19e 100644 (file)
@@ -546,7 +546,7 @@ class HTMLForm extends ContextSource {
        }
 
        /**
-        * Wrap the form innards in an actual <form> element
+        * Wrap the form innards in an actual "<form>" element
         * @param $html String HTML contents to wrap.
         * @return String wrapped HTML.
         */
@@ -761,16 +761,16 @@ class HTMLForm extends ContextSource {
                $this->mId = $id;
        }
        /**
-        * Prompt the whole form to be wrapped in a <fieldset>, with
-        * this text as its <legend> element.
-        * @param $legend String HTML to go inside the <legend> element.
+        * Prompt the whole form to be wrapped in a "<fieldset>", with
+        * this text as its "<legend>" element.
+        * @param $legend String HTML to go inside the "<legend>" element.
         *       Will be escaped
         */
        public function setWrapperLegend( $legend ) { $this->mWrapperLegend = $legend; }
 
        /**
-        * Prompt the whole form to be wrapped in a <fieldset>, with
-        * this message as its <legend> element.
+        * Prompt the whole form to be wrapped in a "<fieldset>", with
+        * this message as its "<legend>" element.
         * @since 1.19
         * @param $msg String message key
         */
@@ -780,7 +780,7 @@ class HTMLForm extends ContextSource {
 
        /**
         * Set the prefix for various default messages
-        * TODO: currently only used for the <fieldset> legend on forms
+        * @todo currently only used for the "<fieldset>" legend on forms
         * with multiple sections; should be used elsewhre?
         * @param $p String
         */
@@ -819,10 +819,10 @@ class HTMLForm extends ContextSource {
        }
 
        /**
-        * TODO: Document
+        * @todo Document
         * @param $fields array[]|HTMLFormField[] array of fields (either arrays or objects)
-        * @param $sectionName string ID attribute of the <table> tag for this section, ignored if empty
-        * @param $fieldsetIDPrefix string ID prefix for the <fieldset> tag of each subsection, ignored if empty
+        * @param $sectionName string ID attribute of the "<table>" tag for this section, ignored if empty
+        * @param $fieldsetIDPrefix string ID prefix for the "<fieldset>" tag of each subsection, ignored if empty
         * @return String
         */
        public function displaySection( $fields, $sectionName = '', $fieldsetIDPrefix = '' ) {
@@ -938,8 +938,8 @@ class HTMLForm extends ContextSource {
        }
 
        /**
-        * Get a string to go in the <legend> of a section fieldset.  Override this if you
-        * want something more complicated
+        * Get a string to go in the "<legend>" of a section fieldset.
+        * Override this if you want something more complicated.
         * @param $key String
         * @return String
         */
@@ -1350,7 +1350,7 @@ abstract class HTMLFormField {
 
        /**
         * flatten an array of options to a single array, for instance,
-        * a set of <options> inside <optgroups>.
+        * a set of "<options>" inside "<optgroups>".
         * @param $options array Associative Array with values either Strings
         *       or Arrays
         * @return Array flattened input
@@ -1889,7 +1889,7 @@ class HTMLMultiSelectField extends HTMLFormField {
  *     ** <option value>
  *     * New Optgroup header
  * Plus a text field underneath for an additional reason.  The 'value' of the field is
- * ""<select>: <extra reason>"", or "<extra reason>" if nothing has been selected in the
+ * "<select>: <extra reason>", or "<extra reason>" if nothing has been selected in the
  * select dropdown.
  * @todo FIXME: If made 'required', only the text field should be compulsory.
  */
index 3986a7b..7fa98e1 100644 (file)
@@ -548,9 +548,10 @@ class Html {
        }
 
        /**
-        * Output a <script> tag with the given contents.  TODO: do some useful
-        * escaping as well, like if $contents contains literal '</script>' or (for
-        * XML) literal "]]>".
+        * Output a "<script>" tag with the given contents.
+        *
+        * @todo do some useful escaping as well, like if $contents contains
+        * literal "</script>" or (for XML) literal "]]>".
         *
         * @param $contents string JavaScript
         * @return string Raw HTML
@@ -572,8 +573,8 @@ class Html {
        }
 
        /**
-        * Output a <script> tag linking to the given URL, e.g.,
-        * <script src=foo.js></script>.
+        * Output a "<script>" tag linking to the given URL, e.g.,
+        * "<script src=foo.js></script>".
         *
         * @param $url string
         * @return string Raw HTML
@@ -591,9 +592,9 @@ class Html {
        }
 
        /**
-        * Output a <style> tag with the given contents for the given media type
+        * Output a "<style>" tag with the given contents for the given media type
         * (if any).  TODO: do some useful escaping as well, like if $contents
-        * contains literal '</style>' (admittedly unlikely).
+        * contains literal "</style>" (admittedly unlikely).
         *
         * @param $contents string CSS
         * @param $media mixed A media type string, like 'screen'
@@ -613,7 +614,7 @@ class Html {
        }
 
        /**
-        * Output a <link rel=stylesheet> linking to the given URL for the given
+        * Output a "<link rel=stylesheet>" linking to the given URL for the given
         * media type (if any).
         *
         * @param $url string
@@ -630,7 +631,7 @@ class Html {
        }
 
        /**
-        * Convenience function to produce an <input> element.  This supports the
+        * Convenience function to produce an "<input>" element.  This supports the
         * new HTML5 input types and attributes, and will silently strip them if
         * $wgHtml5 is false.
         *
@@ -663,11 +664,12 @@ class Html {
        }
 
        /**
-        * Convenience function to produce an <input> element.  This supports leaving
-        * out the cols= and rows= which Xml requires and are required by HTML4/XHTML
-        * but not required by HTML5 and will silently set cols="" and rows="" if
-        * $wgHtml5 is false and cols and rows are omitted (HTML4 validates present
-        * but empty cols="" and rows="" as valid).
+        * Convenience function to produce an "<input>" element.
+        *
+        * This supports leaving out the cols= and rows= which Xml requires and are
+        * required by HTML4/XHTML but not required by HTML5 and will silently set
+        * cols="" and rows="" if $wgHtml5 is false and cols and rows are omitted
+        * (HTML4 validates present but empty cols="" and rows="" as valid).
         *
         * @param $name    string name attribute
         * @param $value   string value attribute
@@ -706,7 +708,7 @@ class Html {
         *
         * @param $params array:
         * - selected: [optional] Id of namespace which should be pre-selected
-        * - all: [optional] Value of item for "all namespaces". If null or unset, no <option> is generated to select all namespaces
+        * - all: [optional] Value of item for "all namespaces". If null or unset, no "<option>" is generated to select all namespaces
         * - label: text for label to add before the field
         * - exclude: [optional] Array of namespace ids to exclude
         * - disable: [optional] Array of namespace ids for which the option should be disabled in the selector
index 201a9e5..66b6e72 100644 (file)
@@ -156,7 +156,7 @@ class Http {
         *
         * file:// should not be allowed here for security purpose (r67684)
         *
-        * @fixme this is wildly inaccurate and fails to actually check most stuff
+        * @todo FIXME this is wildly inaccurate and fails to actually check most stuff
         *
         * @param $uri Mixed: URI to check for validity
         * @return Boolean
index 8f683e9..c76a5de 100644 (file)
@@ -412,12 +412,11 @@ class ImagePage extends Article {
 
                                        if ( $page > 1 ) {
                                                $label = $out->parse( wfMsg( 'imgmultipageprev' ), false );
-                                               $link = Linker::link(
+                                               $link = Linker::linkKnown(
                                                        $this->getTitle(),
                                                        $label,
                                                        array(),
-                                                       array( 'page' => $page - 1 ),
-                                                       array( 'known', 'noclasses' )
+                                                       array( 'page' => $page - 1 )
                                                );
                                                $thumb1 = Linker::makeThumbLinkObj( $this->getTitle(), $this->displayImg, $link, $label, 'none',
                                                        array( 'page' => $page - 1 ) );
@@ -427,12 +426,11 @@ class ImagePage extends Article {
 
                                        if ( $page < $count ) {
                                                $label = wfMsg( 'imgmultipagenext' );
-                                               $link = Linker::link(
+                                               $link = Linker::linkKnown(
                                                        $this->getTitle(),
                                                        $label,
                                                        array(),
-                                                       array( 'page' => $page + 1 ),
-                                                       array( 'known', 'noclasses' )
+                                                       array( 'page' => $page + 1 )
                                                );
                                                $thumb2 = Linker::makeThumbLinkObj( $this->getTitle(), $this->displayImg, $link, $label, 'none',
                                                        array( 'page' => $page + 1 ) );
@@ -644,7 +642,7 @@ EOT
 
                # External editing link
                if ( $wgUseExternalEditor ) {
-                       $elink = Linker::link(
+                       $elink = Linker::linkKnown(
                                $this->getTitle(),
                                wfMsgHtml( 'edit-externally' ),
                                array(),
@@ -652,8 +650,7 @@ EOT
                                        'action' => 'edit',
                                        'externaledit' => 'true',
                                        'mode' => 'file'
-                               ),
-                               array( 'known', 'noclasses' )
+                               )
                        );
                        $out->addHTML(
                                '<li id="mw-imagepage-edit-external">' . $elink . ' <small>' .
@@ -828,13 +825,7 @@ EOT
                foreach ( $dupes as $file ) {
                        $fromSrc = '';
                        if ( $file->isLocal() ) {
-                               $link = Linker::link(
-                                       $file->getTitle(),
-                                       null,
-                                       array(),
-                                       array(),
-                                       array( 'known', 'noclasses' )
-                               );
+                               $link = Linker::linkKnown( $file->getTitle() );
                        } else {
                                $link = Linker::makeExternalLink( $file->getDescriptionUrl(),
                                        $file->getTitle()->getPrefixedText() );
@@ -1004,10 +995,10 @@ class ImageHistoryList extends ContextSource {
                                if ( !$iscur ) {
                                        $q['oldimage'] = $img;
                                }
-                               $row .= Linker::link(
+                               $row .= Linker::linkKnown(
                                        $this->title,
                                        wfMsgHtml( $iscur ? 'filehist-deleteall' : 'filehist-deleteone' ),
-                                       array(), $q, array( 'known' )
+                                       array(), $q
                                );
                        }
                        # Link to hide content. Don't show useless link to people who cannot hide revisions.
@@ -1044,7 +1035,7 @@ class ImageHistoryList extends ContextSource {
                        if ( $file->isDeleted( File::DELETED_FILE ) ) {
                                $row .= wfMsgHtml( 'filehist-revert' );
                        } else {
-                               $row .= Linker::link(
+                               $row .= Linker::linkKnown(
                                        $this->title,
                                        wfMsgHtml( 'filehist-revert' ),
                                        array(),
@@ -1052,8 +1043,7 @@ class ImageHistoryList extends ContextSource {
                                                'action' => 'revert',
                                                'oldimage' => $img,
                                                'wpEditToken' => $user->getEditToken( $img )
-                                       ),
-                                       array( 'known', 'noclasses' )
+                                       )
                                );
                        }
                }
@@ -1072,7 +1062,7 @@ class ImageHistoryList extends ContextSource {
                                $this->preventClickjacking();
                                $revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
                                # Make a link to review the image
-                               $url = Linker::link(
+                               $url = Linker::linkKnown(
                                        $revdel,
                                        $lang->timeanddate( $timestamp, true ),
                                        array(),
@@ -1080,8 +1070,7 @@ class ImageHistoryList extends ContextSource {
                                                'target' => $this->title->getPrefixedText(),
                                                'file' => $img,
                                                'token' => $user->getEditToken( $img )
-                                       ),
-                                       array( 'known', 'noclasses' )
+                                       )
                                );
                        } else {
                                $url = $lang->timeanddate( $timestamp, true );
index 9ebc34c..491ec09 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * MediaWiki page data importer
+ * MediaWiki page data importer.
  *
  * Copyright © 2003,2005 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
@@ -275,7 +275,7 @@ class WikiImporter {
        }
 
        /**
-        * Notify the callback function when a new <page> is reached.
+        * Notify the callback function when a new "<page>" is reached.
         * @param $title Title
         */
        function pageCallback( $title ) {
@@ -285,7 +285,7 @@ class WikiImporter {
        }
 
        /**
-        * Notify the callback function when a </page> is closed.
+        * Notify the callback function when a "</page>" is closed.
         * @param $title Title
         * @param $origTitle Title
         * @param $revCount Integer
index 9fcac65..5355140 100644 (file)
@@ -407,6 +407,11 @@ class Linker {
         * despite $query not being used.
         *
         * @param $nt Title
+        * @param $html String [optional]
+        * @param $query String [optional]
+        * @param $trail String [optional]
+        * @param $prefix String [optional]
+        *
         *
         * @return string
         */
@@ -978,7 +983,7 @@ class Linker {
         * @param $userName String: user name in database.
         * @param $altUserName String: text to display instead of the user name (optional)
         * @return String: HTML fragment
-        * @since 1.19 Method exists for a long time. $displayText was added in 1.19.
+        * @since 1.19 Method exists for a long time. $altUserName was added in 1.19.
         */
        public static function userLink( $userId, $userName, $altUserName = false ) {
                if ( $userId == 0 ) {
@@ -1646,11 +1651,17 @@ class Linker {
         * other users.
         *
         * @param $rev Revision object
+        * @param $context IContextSource context to use or null for the main context.
         * @return string
         */
-       public static function generateRollback( $rev ) {
+       public static function generateRollback( $rev, IContextSource $context = null ) {
+               if ( $context === null ) {
+                       $context = RequestContext::getMain();
+               }
+
                return '<span class="mw-rollback-link">'
-                       . wfMessage( 'brackets' )->rawParams( self::buildRollbackLink( $rev ) )->plain()
+                       . $context->msg( 'brackets' )->rawParams(
+                               self::buildRollbackLink( $rev, $context ) )->plain()
                        . '</span>';
        }
 
@@ -1658,24 +1669,28 @@ class Linker {
         * Build a raw rollback link, useful for collections of "tool" links
         *
         * @param $rev Revision object
+        * @param $context IContextSource context to use or null for the main context.
         * @return String: HTML fragment
         */
-       public static function buildRollbackLink( $rev ) {
-               global $wgRequest, $wgUser;
+       public static function buildRollbackLink( $rev, IContextSource $context = null ) {
+               if ( $context === null ) {
+                       $context = RequestContext::getMain();
+               }
+
                $title = $rev->getTitle();
                $query = array(
                        'action' => 'rollback',
                        'from' => $rev->getUserText(),
-                       'token' => $wgUser->getEditToken( array( $title->getPrefixedText(), $rev->getUserText() ) ),
+                       'token' => $context->getUser()->getEditToken( array( $title->getPrefixedText(), $rev->getUserText() ) ),
                );
-               if ( $wgRequest->getBool( 'bot' ) ) {
+               if ( $context->getRequest()->getBool( 'bot' ) ) {
                        $query['bot'] = '1';
                        $query['hidediff'] = '1'; // bug 15999
                }
                return self::link(
                        $title,
-                       wfMsgHtml( 'rollbacklink' ),
-                       array( 'title' => wfMsg( 'tooltip-rollback' ) ),
+                       $context->msg( 'rollbacklink' )->escaped(),
+                       array( 'title' => $context->msg( 'tooltip-rollback' )->text() ),
                        $query,
                        array( 'known', 'noclasses' )
                );
@@ -1713,7 +1728,7 @@ class Linker {
                        }
                        $outText .= "</div><ul>\n";
 
-                       usort( $templates, array( 'Title', 'compare' ) );
+                       usort( $templates, 'Title::compare' );
                        foreach ( $templates as $titleObj ) {
                                $r = $titleObj->getRestrictions( 'edit' );
                                if ( in_array( 'sysop', $r ) ) {
@@ -1913,10 +1928,10 @@ class Linker {
         * Creates a (show/hide) link for deleting revisions/log entries
         *
         * @param $query Array: query parameters to be passed to link()
-        * @param $restricted Boolean: set to true to use a <strong> instead of a <span>
+        * @param $restricted Boolean: set to true to use a "<strong>" instead of a "<span>"
         * @param $delete Boolean: set to true to use (show/hide) rather than (show)
         *
-        * @return String: HTML <a> link to Special:Revisiondelete, wrapped in a
+        * @return String: HTML "<a>" link to Special:Revisiondelete, wrapped in a
         * span to allow for customization of appearance with CSS
         */
        public static function revDeleteLink( $query = array(), $restricted = false, $delete = true ) {
index 0712ac8..1d0bcf7 100644 (file)
@@ -822,9 +822,7 @@ class LinksDeletionUpdate extends SqlDataUpdate {
        /**
         * Constructor
         *
-        * @param $title Title of the page we're updating
-        * @param $parserOutput ParserOutput: output from a full parse of this page
-        * @param $recursive Boolean: queue jobs for recursive updates?
+        * @param $page WikiPage Page we are updating
         */
        function __construct( WikiPage $page ) {
                parent::__construct( );
index 9745b9a..997034c 100644 (file)
@@ -24,7 +24,7 @@
  */
 
 /**
- * This class encapsulates "magic words" such as #redirect, __NOTOC__, etc.
+ * This class encapsulates "magic words" such as "#redirect", __NOTOC__, etc.
  *
  * @par Usage:
  * @code
@@ -42,7 +42,7 @@
  *
  * To add magic words in an extension, use $magicWords in a file listed in
  * $wgExtensionMessagesFiles[].
- * 
+ *
  * @par Example:
  * @code
  * $magicWords = array();
index c87a12b..2e2b8d6 100644 (file)
@@ -339,6 +339,33 @@ class MWNamespace {
                        return $wgContentNamespaces;
                }
        }
+
+       /**
+        * List all namespace indices which are considered subject, aka not a talk
+        * or special namespace. See also MWNamespace::isSubject
+        *
+        * @return array of namespace indices
+        */
+       public static function getSubjectNamespaces() {
+               return array_filter(
+                       MWNamespace::getValidNamespaces(),
+                       'MWNamespace::isSubject'
+               );
+       }
+
+       /**
+        * List all namespace indices which are considered talks, aka not a subject
+        * or special namespace. See also MWNamespace::isTalk
+        *
+        * @return array of namespace indices
+        */
+       public static function getTalkNamespaces() {
+               return array_filter(
+                       MWNamespace::getValidNamespaces(),
+                       'MWNamespace::isTalk'
+               );
+       }
+
        /**
         * Is the namespace first-letter capitalized?
         *
index 7f0a4e2..ac90e67 100644 (file)
  * @todo document
  */
 class OutputPage extends ContextSource {
-       /// Should be private. Used with addMeta() which adds <meta>
+       /// Should be private. Used with addMeta() which adds "<meta>"
        var $mMetatags = array();
 
-       /// <meta keywords="stuff"> most of the time the first 10 links to an article
+       /// "<meta keywords='stuff'>" most of the time the first 10 links to an article
        var $mKeywords = array();
 
        var $mLinktags = array();
@@ -50,7 +50,7 @@ class OutputPage extends ContextSource {
        /// Should be private - has getter and setter. Contains the HTML title
        var $mPagetitle = '';
 
-       /// Contains all of the <body> content. Should be private we got set/get accessors and the append() method.
+       /// Contains all of the "<body>" content. Should be private we got set/get accessors and the append() method.
        var $mBodytext = '';
 
        /**
@@ -60,7 +60,7 @@ class OutputPage extends ContextSource {
         */
        public $mDebugtext = ''; // TODO: we might want to replace it by wfDebug() wfDebugLog()
 
-       /// Should be private. Stores contents of <title> tag
+       /// Should be private. Stores contents of "<title>" tag
        var $mHTMLtitle = '';
 
        /// Should be private. Is the displayed content related to the source of the corresponding wiki article.
@@ -116,8 +116,8 @@ class OutputPage extends ContextSource {
        /**
         * Should be private. Used for JavaScript (pre resource loader)
         * We should split js / css.
-        * mScripts content is inserted as is in <head> by Skin. This might contains
-        * either a link to a stylesheet or inline css.
+        * mScripts content is inserted as is in "<head>" by Skin. This might
+        * contains either a link to a stylesheet or inline css.
         */
        var $mScripts = '';
 
@@ -135,7 +135,7 @@ class OutputPage extends ContextSource {
         */
        var $mPageLinkTitle = '';
 
-       /// Array of elements in <head>. Parser might add its own headers!
+       /// Array of elements in "<head>". Parser might add its own headers!
        var $mHeadItems = array();
 
        // @todo FIXME: Next variables probably comes from the resource loader
@@ -197,7 +197,7 @@ class OutputPage extends ContextSource {
 
        /**
         * Comes from the parser. This was probably made to load CSS/JS only
-        * if we had <gallery>. Used directly in CategoryPage.php
+        * if we had "<gallery>". Used directly in CategoryPage.php
         * Looks like resource loader can replace this.
         */
        var $mNoGallery = false;
@@ -237,7 +237,6 @@ class OutputPage extends ContextSource {
        private $mFollowPolicy = 'follow';
        private $mVaryHeader = array(
                'Accept-Encoding' => array( 'list-contains=gzip' ),
-               'Cookie' => null
        );
 
        /**
@@ -293,7 +292,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Add a new <meta> tag
+        * Add a new "<meta>" tag
         * To add an http-equiv meta tag, precede the name with "http:"
         *
         * @param $name String tag name
@@ -406,7 +405,7 @@ class OutputPage extends ContextSource {
        /**
         * Add a self-contained script tag with the given contents
         *
-        * @param $script String: JavaScript text, no <script> tags
+        * @param $script String: JavaScript text, no "<script>" tags
         */
        public function addInlineScript( $script ) {
                $this->mScripts .= Html::inlineScript( "\n$script\n" ) . "\n";
@@ -780,7 +779,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * "HTML title" means the contents of <title>.
+        * "HTML title" means the contents of "<title>".
         * It is stored as plain, unescaped text and will be run through htmlspecialchars in the skin file.
         *
         * @param $name string
@@ -794,7 +793,7 @@ class OutputPage extends ContextSource {
        }
 
        /**
-        * Return the "HTML title", i.e. the content of the <title> tag.
+        * Return the "HTML title", i.e. the content of the "<title>" tag.
         *
         * @return String
         */
@@ -805,7 +804,7 @@ class OutputPage extends ContextSource {
        /**
         * Set $mRedirectedFrom, the Title of the page which redirected us to the current page.
         *
-        * param @t Title
+        * @param $t Title
         */
        public function setRedirectedFrom( $t ) {
                $this->mRedirectedFrom = $t;
@@ -1363,11 +1362,11 @@ class OutputPage extends ContextSource {
         * Set the timestamp of the revision which will be displayed. This is used
         * to avoid a extra DB call in Skin::lastModified().
         *
-        * @param $revid Mixed: string, or null
+        * @param $timestamp Mixed: string, or null
         * @return Mixed: previous value
         */
-       public function setRevisionTimestamp( $timestmap ) {
-               return wfSetVar( $this->mRevisionTimestamp, $timestmap );
+       public function setRevisionTimestamp( $timestamp) {
+               return wfSetVar( $this->mRevisionTimestamp, $timestamp );
        }
 
        /**
@@ -1722,6 +1721,16 @@ class OutputPage extends ContextSource {
                $this->mVaryHeader[$header] = array_unique( (array)$this->mVaryHeader[$header] );
        }
 
+       /**
+        * Return a Vary: header on which to vary caches. Based on the keys of $mVaryHeader,
+        * such as Accept-Encoding or Cookie
+        * 
+        * @return String
+        */
+       public function getVaryHeader() {
+               return 'Vary: ' . join( ', ', array_keys( $this->mVaryHeader ) );
+       }
+
        /**
         * Get a complete X-Vary-Options header
         *
@@ -1834,11 +1843,12 @@ class OutputPage extends ContextSource {
                        $response->header( "ETag: $this->mETag" );
                }
 
+               $this->addVaryHeader( 'Cookie' );
                $this->addAcceptLanguage();
 
                # don't serve compressed data to clients who can't handle it
                # maintain different caches for logged-in users and non-logged in ones
-               $response->header( 'Vary: ' . join( ', ', array_keys( $this->mVaryHeader ) ) );
+               $response->header( $this->getVaryHeader() );
 
                if ( $wgUseXVO ) {
                        # Add an X-Vary-Options header for Squid with Wikimedia patches
@@ -2013,11 +2023,11 @@ class OutputPage extends ContextSource {
        /**
         * Prepare this object to display an error page; disable caching and
         * indexing, clear the current text and redirect, set the page's title
-        * and optionally an custom HTML title (content of the <title> tag).
+        * and optionally an custom HTML title (content of the "<title>" tag).
         *
         * @param $pageTitle String|Message will be passed directly to setPageTitle()
         * @param $htmlTitle String|Message will be passed directly to setHTMLTitle();
-        *                   optional, if not passed the <title> attribute will be
+        *                   optional, if not passed the "<title>" attribute will be
         *                   based on $pageTitle
         */
        public function prepareErrorPage( $pageTitle, $htmlTitle = false ) {
@@ -2381,7 +2391,7 @@ $templates
        /**
         * @param $sk Skin The given Skin
         * @param $includeStyle Boolean: unused
-        * @return String: The doctype, opening <html>, and head element.
+        * @return String: The doctype, opening "<html>", and head element.
         */
        public function headElement( Skin $sk, $includeStyle = true ) {
                global $wgContLang;
@@ -2506,19 +2516,21 @@ $templates
         * @param $only String ResourceLoaderModule TYPE_ class constant
         * @param $useESI boolean
         * @param $extraQuery Array with extra query parameters to add to each request. array( param => value )
-        * @param $loadCall boolean If true, output an (asynchronous) mw.loader.load() call rather than a <script src="..."> tag
-        * @return string html <script> and <style> tags
+        * @param $loadCall boolean If true, output an (asynchronous) mw.loader.load() call rather than a "<script src='...'>" tag
+        * @return string html "<script>" and "<style>" tags
         */
        protected function makeResourceLoaderLink( $modules, $only, $useESI = false, array $extraQuery = array(), $loadCall = false ) {
                global $wgResourceLoaderUseESI;
 
+               $modules = (array) $modules;
+
                if ( !count( $modules ) ) {
                        return '';
                }
 
                if ( count( $modules ) > 1 ) {
                        // Remove duplicate module requests
-                       $modules = array_unique( (array) $modules );
+                       $modules = array_unique( $modules );
                        // Sort module names so requests are more uniform
                        sort( $modules );
 
@@ -2535,7 +2547,7 @@ $templates
                // Create keyed-by-group list of module objects from modules list
                $groups = array();
                $resourceLoader = $this->getResourceLoader();
-               foreach ( (array) $modules as $name ) {
+               foreach ( $modules as $name ) {
                        $module = $resourceLoader->getModule( $name );
                        # Check that we're allowed to include this module on this page
                        if ( !$module
@@ -2556,7 +2568,7 @@ $templates
                }
 
                $links = '';
-               foreach ( $groups as $group => $modules ) {
+               foreach ( $groups as $group => $grpModules ) {
                        // Special handling for user-specific groups
                        $user = null;
                        if ( ( $group === 'user' || $group === 'private' ) && $this->getUser()->isLoggedIn() ) {
@@ -2580,10 +2592,10 @@ $templates
                        $context = new ResourceLoaderContext( $resourceLoader, new FauxRequest( $query ) );
                        // Extract modules that know they're empty
                        $emptyModules = array ();
-                       foreach ( $modules as $key => $module ) {
+                       foreach ( $grpModules as $key => $module ) {
                                if ( $module->isKnownEmpty( $context ) ) {
                                        $emptyModules[$key] = 'ready';
-                                       unset( $modules[$key] );
+                                       unset( $grpModules[$key] );
                                }
                        }
                        // Inline empty modules: since they're empty, just mark them as 'ready'
@@ -2601,7 +2613,7 @@ $templates
                        }
 
                        // If there are no modules left, skip this group
-                       if ( $modules === array() ) {
+                       if ( count( $grpModules ) === 0 ) {
                                continue;
                        }
 
@@ -2612,12 +2624,12 @@ $templates
                        if ( $group === 'private' ) {
                                if ( $only == ResourceLoaderModule::TYPE_STYLES ) {
                                        $links .= Html::inlineStyle(
-                                               $resourceLoader->makeModuleResponse( $context, $modules )
+                                               $resourceLoader->makeModuleResponse( $context, $grpModules )
                                        );
                                } else {
                                        $links .= Html::inlineScript(
                                                ResourceLoader::makeLoaderConditionalScript(
-                                                       $resourceLoader->makeModuleResponse( $context, $modules )
+                                                       $resourceLoader->makeModuleResponse( $context, $grpModules )
                                                )
                                        );
                                }
@@ -2633,7 +2645,7 @@ $templates
                        if ( $group === 'user' ) {
                                // Get the maximum timestamp
                                $timestamp = 1;
-                               foreach ( $modules as $module ) {
+                               foreach ( $grpModules as $module ) {
                                        $timestamp = max( $timestamp, $module->getModifiedTime( $context ) );
                                }
                                // Add a version parameter so cache will break when things change
@@ -2641,7 +2653,7 @@ $templates
                        }
 
                        $url = ResourceLoader::makeLoaderURL(
-                               array_keys( $modules ),
+                               array_keys( $grpModules ),
                                $this->getLanguage()->getCode(),
                                $this->getSkin()->getSkinName(),
                                $user,
@@ -2684,7 +2696,7 @@ $templates
        }
 
        /**
-        * JS stuff to put in the <head>. This is the startup module, config
+        * JS stuff to put in the "<head>". This is the startup module, config
         * vars and modules marked with position 'top'
         *
         * @return String: HTML fragment
@@ -2732,12 +2744,12 @@ $templates
        }
 
        /**
-        * JS stuff to put at the 'bottom', which can either be the bottom of the <body>
-        * or the bottom of the <head> depending on $wgResourceLoaderExperimentalAsyncLoading:
+        * JS stuff to put at the 'bottom', which can either be the bottom of the "<body>"
+        * or the bottom of the "<head>" depending on $wgResourceLoaderExperimentalAsyncLoading:
         * modules marked with position 'bottom', legacy scripts ($this->mScripts),
         * user preferences, site JS and user JS
         *
-        * @param $inHead boolean If true, this HTML goes into the <head>, if false it goes into the <body>
+        * @param $inHead boolean If true, this HTML goes into the "<head>", if false it goes into the "<body>"
         * @return string
         */
        function getScriptsForBottomQueue( $inHead ) {
@@ -2853,7 +2865,7 @@ $templates
        }
 
        /**
-        * JS stuff to put at the bottom of the <body>
+        * JS stuff to put at the bottom of the "<body>"
         * @return string
         */
        function getBottomScripts() {
@@ -2868,7 +2880,7 @@ $templates
        /**
         * Add one or more variables to be set in mw.config in JavaScript.
         *
-        * @param $key {String|Array} Key or array of key/value pars.
+        * @param $keys {String|Array} Key or array of key/value pairs.
         * @param $value {Mixed} [optional] Value of the configuration variable.
         */
        public function addJsConfigVars( $keys, $value = null ) {
@@ -3004,7 +3016,7 @@ $templates
        }
 
        /**
-        * @param $addContentType bool: Whether <meta> specifying content type should be returned
+        * @param $addContentType bool: Whether "<meta>" specifying content type should be returned
         *
         * @return array in format "link name or number => 'link html'".
         */
@@ -3238,7 +3250,7 @@ $templates
 
        /**
         * @param $unused
-        * @param $addContentType bool: Whether <meta> specifying content type should be returned
+        * @param $addContentType bool: Whether "<meta>" specifying content type should be returned
         *
         * @return string HTML tag links to be put in the header.
         */
@@ -3247,7 +3259,7 @@ $templates
        }
 
        /**
-        * Generate a <link rel/> for a feed.
+        * Generate a "<link rel/>" for a feed.
         *
         * @param $type String: feed type
         * @param $url String: URL to the feed
@@ -3302,7 +3314,7 @@ $templates
        }
 
        /**
-        * Build a set of <link>s for the stylesheets specified in the $this->styles array.
+        * Build a set of "<link>" elements for the stylesheets specified in the $this->styles array.
         * These will be applied to various media & IE conditionals.
         *
         * @return string
index bcd6d14..f80e05d 100644 (file)
@@ -194,6 +194,7 @@ abstract class IndexPager extends ContextSource implements Pager {
                        $queryLimit,
                        $descending
                );
+
                $this->extractResultInfo( $this->mOffset, $queryLimit, $this->mResult );
                $this->mQueryDone = true;
 
@@ -303,7 +304,20 @@ abstract class IndexPager extends ContextSource implements Pager {
         * @param $descending Boolean: query direction, false for ascending, true for descending
         * @return ResultWrapper
         */
-       function reallyDoQuery( $offset, $limit, $descending ) {
+       public function reallyDoQuery( $offset, $limit, $descending ) {
+               list( $tables, $fields, $conds, $fname, $options, $join_conds ) = $this->buildQueryInfo( $offset, $limit, $descending );
+               return $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds );
+       }
+
+       /**
+        * Build variables to use by the database wrapper.
+        *
+        * @param $offset String: index offset, inclusive
+        * @param $limit Integer: exact query limit
+        * @param $descending Boolean: query direction, false for ascending, true for descending
+        * @return array
+        */
+       protected function buildQueryInfo( $offset, $limit, $descending ) {
                $fname = __METHOD__ . ' (' . $this->getSqlComment() . ')';
                $info = $this->getQueryInfo();
                $tables = $info['tables'];
@@ -327,8 +341,7 @@ abstract class IndexPager extends ContextSource implements Pager {
                        $conds[] = $this->mIndexField . $operator . $this->mDb->addQuotes( $offset );
                }
                $options['LIMIT'] = intval( $limit );
-               $res = $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds );
-               return new ResultWrapper( $this->mDb, $res );
+               return array( $tables, $fields, $conds, $fname, $options, $join_conds );
        }
 
        /**
@@ -980,7 +993,7 @@ abstract class TablePager extends IndexPager {
         * @protected
         *
         * @param $row Object: the database result row
-        * @return Array of <attr> => <value>
+        * @return Array of attribute => value
         */
        function getRowAttrs( $row ) {
                $class = $this->getRowClass( $row );
@@ -1095,7 +1108,7 @@ abstract class TablePager extends IndexPager {
        }
 
        /**
-        * Get a <select> element which has options for each of the allowed limits
+        * Get a "<select>" element which has options for each of the allowed limits
         *
         * @return String: HTML fragment
         */
@@ -1125,7 +1138,7 @@ abstract class TablePager extends IndexPager {
        }
 
        /**
-        * Get <input type="hidden"> elements for use in a method="get" form.
+        * Get \<input type="hidden"\> elements for use in a method="get" form.
         * Resubmits all defined elements of the query string, except for a
         * blacklist, passed in the $blacklist parameter.
         *
index bf63d65..eaf781b 100644 (file)
@@ -939,7 +939,7 @@ class Preferences {
 
                if ( $wgEnableAPI ) {
                        # Some random gibberish as a proposed default
-                       // @fixme This should use CryptRand but we may not want to read urandom on every view
+                       // @todo Fixme: this should use CryptRand but we may not want to read urandom on every view
                        $hash = sha1( mt_rand() . microtime( true ) );
 
                        $defaultPreferences['watchlisttoken'] = array(
@@ -1587,7 +1587,7 @@ class PreferencesForm extends HTMLForm {
        }
 
        /**
-        * Get the <legend> for a given section key. Normally this is the
+        * Get the "<legend>" for a given section key. Normally this is the
         * prefs-$key message but we'll allow extensions to override it.
         * @param $key string
         * @return string
index dbe06d4..31ed87f 100644 (file)
@@ -318,10 +318,12 @@ class ProtectionForm {
                        return false;
                }
 
-               if ( $wgRequest->getCheck( 'mwProtectWatch' ) && $wgUser->isLoggedIn() ) {
-                       WatchAction::doWatch( $this->mTitle, $wgUser );
-               } elseif ( $this->mTitle->userIsWatching() ) {
-                       WatchAction::doUnwatch( $this->mTitle, $wgUser );
+               if ( $wgUser->isLoggedIn() && $wgRequest->getCheck( 'mwProtectWatch' ) != $wgUser->isWatched( $this->mTitle ) ) {
+                       if ( $wgRequest->getCheck( 'mwProtectWatch' ) ) {
+                               WatchAction::doWatch( $this->mTitle, $wgUser );
+                       } else {
+                               WatchAction::doUnwatch( $this->mTitle, $wgUser );
+                       }
                }
                return true;
        }
index cd8a1b5..fb8e022 100644 (file)
@@ -19,7 +19,7 @@
  *
  * @file
  */
+
 /**
  * Utility class for creating new RC entries
  *
@@ -108,13 +108,7 @@ class RecentChange {
         * @return RecentChange
         */
        public static function newFromId( $rcid ) {
-               $dbr = wfGetDB( DB_SLAVE );
-               $row = $dbr->selectRow( 'recentchanges', '*', array( 'rc_id' => $rcid ), __METHOD__ );
-               if( $row !== false ) {
-                       return self::newFromRow( $row );
-               } else {
-                       return null;
-               }
+               return self::newFromConds( array( 'rc_id' => $rcid ), __METHOD__ );
        }
 
        /**
@@ -126,18 +120,12 @@ class RecentChange {
         */
        public static function newFromConds( $conds, $fname = __METHOD__ ) {
                $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select(
-                       'recentchanges',
-                       '*',
-                       $conds,
-                       $fname
-               );
-               if( $res instanceof ResultWrapper && $res->numRows() > 0 ) {
-                       $row = $res->fetchObject();
-                       $res->free();
+               $row = $dbr->selectRow( 'recentchanges', '*', $conds, $fname );
+               if ( $row !== false ) {
                        return self::newFromRow( $row );
+               } else {
+                       return null;
                }
-               return null;
        }
 
        # Accessors
@@ -170,7 +158,7 @@ class RecentChange {
        }
 
        /**
-        * @return bool|\Title
+        * @return bool|Title
         */
        public function getMovedToTitle() {
                if( $this->mMovedToTitle === false ) {
@@ -781,7 +769,7 @@ class RecentChange {
                        }
                } else {
                        $ip = $wgRequest->getIP();
-                       if( !$ip ) 
+                       if( !$ip )
                                $ip = '';
                }
                return $ip;
index fc777b5..3c5cfa8 100644 (file)
@@ -245,7 +245,7 @@ abstract class RevisionItemBase {
        abstract public function canViewContent();
 
        /**
-        * Get the HTML of the list item. Should be include <li></li> tags.
+        * Get the HTML of the list item. Should be include "<li></li>" tags.
         * This is used to show the list in HTML form, by the special page.
         */
        abstract public function getHTML();
index 8cd5a37..a0c77da 100644 (file)
@@ -692,6 +692,16 @@ class Sanitizer {
                                }
                        }
 
+                       if ( $attribute === 'align' && !in_array( $element, $cells ) ) {
+                               if ( $value === 'center' ) {
+                                       $style .= ' margin-left: auto;';
+                                       $property = 'margin-right';
+                                       $value = 'auto';
+                               } else {
+                                       $property = 'float';
+                               }
+                       }
+
                        $style .= " $property: $value;";
 
                        unset( $attribs[$attribute] );
@@ -1243,7 +1253,7 @@ class Sanitizer {
         * a. named char refs can only be &lt; &gt; &amp; &quot;, others are
         *   numericized (this way we're well-formed even without a DTD)
         * b. any numeric char refs must be legal chars, not invalid or forbidden
-        * c. use &#x, not &#X
+        * c. use lower cased "&#x", not "&#X"
         * d. fix or reject non-valid attributes
         *
         * @param $text String
@@ -1411,7 +1421,7 @@ class Sanitizer {
        /**
         * If the named entity is defined in the HTML 4.0/XHTML 1.0 DTD,
         * return the UTF-8 encoding of that character. Otherwise, returns
-        * pseudo-entity source (eg &foo;)
+        * pseudo-entity source (eg "&foo;")
         *
         * @param $name String
         * @return String
index 359b20b..d1493c3 100644 (file)
 
 /**
  * Class to expand PHP execution time for a function call.
+ * Use this when performing changes that should not be interrupted.
+ *
  * On construction, set_time_limit() is called and set to $seconds.
+ * If the client aborts the connection, PHP will continue to run.
  * When the object goes out of scope, the timer is restarted, with
  * the original time limit minus the time the object existed.
  */
 class ScopedPHPTimeout {
        protected $startTime; // float; seconds
        protected $oldTimeout; // integer; seconds
+       protected $oldIgnoreAbort; // boolean
 
        protected static $stackDepth = 0; // integer
        protected static $totalCalls = 0; // integer
@@ -50,6 +54,7 @@ class ScopedPHPTimeout {
                        } elseif ( self::$stackDepth > 0 ) { // recursion guard
                                trigger_error( "Resursive invocation of " . __CLASS__ . " attempted." );
                        } else {
+                               $this->oldIgnoreAbort = ignore_user_abort( true );
                                $this->oldTimeout = ini_set( 'max_execution_time', $seconds );
                                $this->startTime = microtime( true );
                                ++self::$stackDepth;
@@ -73,6 +78,7 @@ class ScopedPHPTimeout {
                        // take some measures to prevent this. Track total time and calls.
                        self::$totalElapsed += $elapsed;
                        --self::$stackDepth;
+                       ignore_user_abort( $this->oldIgnoreAbort );
                }
        }
 }
index 6410695..6a861d8 100644 (file)
@@ -138,6 +138,7 @@ class SiteConfiguration {
 
        /**
         * Optional callback to load full configuration data.
+        * @var string|array
         */
        public $fullLoadCallback = null;
 
@@ -155,6 +156,8 @@ class SiteConfiguration {
         * argument and the wiki in the second one.
         * if suffix and lang are passed they will be used for the return value of
         * self::siteFromDB() and self::$suffixes will be ignored
+        *
+        * @var string|array
         */
        public $siteParamsCallback = null;
 
@@ -189,7 +192,7 @@ class SiteConfiguration {
                                if( array_key_exists( $wiki, $thisSetting ) ) {
                                        $retval = $thisSetting[$wiki];
                                        break;
-                               } elseif( array_key_exists( "+$wiki", $thisSetting ) && is_array( $thisSetting["+$wiki"] ) ) {
+                               } elseif ( array_key_exists( "+$wiki", $thisSetting ) && is_array( $thisSetting["+$wiki"] ) ) {
                                        $retval = $thisSetting["+$wiki"];
                                }
 
@@ -203,8 +206,9 @@ class SiteConfiguration {
                                                }
                                                break 2;
                                        } elseif( array_key_exists( "+$tag", $thisSetting ) && is_array($thisSetting["+$tag"]) ) {
-                                               if( !isset( $retval ) )
+                                               if( !isset( $retval ) ) {
                                                        $retval = array();
+                                               }
                                                $retval = self::arrayMerge( $retval, $thisSetting["+$tag"] );
                                        }
                                }
@@ -218,9 +222,10 @@ class SiteConfiguration {
                                                        $retval = $thisSetting[$suffix];
                                                }
                                                break;
-                                       } elseif( array_key_exists( "+$suffix", $thisSetting ) && is_array($thisSetting["+$suffix"]) ) {
-                                               if (!isset($retval))
+                                       } elseif ( array_key_exists( "+$suffix", $thisSetting ) && is_array($thisSetting["+$suffix"]) ) {
+                                               if ( !isset( $retval ) ) {
                                                        $retval = array();
+                                               }
                                                $retval = self::arrayMerge( $retval, $thisSetting["+$suffix"] );
                                        }
                                }
@@ -287,8 +292,9 @@ class SiteConfiguration {
                        }
 
                        $value = $this->getSetting( $varname, $wiki, $params );
-                       if ( $append && is_array( $value ) && is_array( $GLOBALS[$var] ) )
+                       if ( $append && is_array( $value ) && is_array( $GLOBALS[$var] ) ) {
                                $value = self::arrayMerge( $value, $GLOBALS[$var] );
+                       }
                        if ( !is_null( $value ) ) {
                                $localSettings[$var] = $value;
                        }
@@ -408,8 +414,9 @@ class SiteConfiguration {
                }
 
                foreach( $default as $name => $def ){
-                       if( !isset( $ret[$name] ) || ( is_array( $default[$name] ) && !is_array( $ret[$name] ) ) )
+                       if( !isset( $ret[$name] ) || ( is_array( $default[$name] ) && !is_array( $ret[$name] ) ) ) {
                                $ret[$name] = $default[$name];
+                       }
                }
 
                return $ret;
@@ -430,18 +437,21 @@ class SiteConfiguration {
        protected function mergeParams( $wiki, $suffix, /*array*/ $params, /*array*/ $wikiTags ){
                $ret = $this->getWikiParams( $wiki );
 
-               if( is_null( $ret['suffix'] ) )
+               if( is_null( $ret['suffix'] ) ) {
                        $ret['suffix'] = $suffix;
+               }
 
                $ret['tags'] = array_unique( array_merge( $ret['tags'], $wikiTags ) );
 
                $ret['params'] += $params;
 
                // Automatically fill that ones if needed
-               if( !isset( $ret['params']['lang'] ) && !is_null( $ret['lang'] ) )
+               if( !isset( $ret['params']['lang'] ) && !is_null( $ret['lang'] ) ){
                        $ret['params']['lang'] = $ret['lang'];
-               if( !isset( $ret['params']['site'] ) && !is_null( $ret['suffix'] ) )
+               }
+               if( !isset( $ret['params']['site'] ) && !is_null( $ret['suffix'] ) ) {
                        $ret['params']['site'] = $ret['suffix'];
+               }
 
                return $ret;
        }
@@ -455,8 +465,9 @@ class SiteConfiguration {
        public function siteFromDB( $db ) {
                // Allow override
                $def = $this->getWikiParams( $db );
-               if( !is_null( $def['suffix'] ) && !is_null( $def['lang'] ) )
+               if( !is_null( $def['suffix'] ) && !is_null( $def['lang'] ) ) {
                        return array( $def['suffix'], $def['lang'] );
+               }
 
                $site = null;
                $lang = null;
@@ -513,7 +524,7 @@ class SiteConfiguration {
        }
 
        public function loadFullData() {
-               if ($this->fullLoadCallback && !$this->fullLoadDone) {
+               if ( $this->fullLoadCallback && !$this->fullLoadDone ) {
                        call_user_func( $this->fullLoadCallback, $this );
                        $this->fullLoadDone = true;
                }
index 8d47b83..f4960c1 100644 (file)
@@ -326,7 +326,7 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * Make a <script> tag containing global variables
+        * Make a "<script>" tag containing global variables
         *
         * @deprecated in 1.19
         * @param $unused
@@ -363,7 +363,7 @@ abstract class Skin extends ContextSource {
         * inside ->getOutput() is deprecated. The $out arg is kept
         * for compatibility purposes with skins.
         * @param $out OutputPage
-        * @delete
+        * @todo delete
         */
        abstract function setupSkinUserCss( OutputPage $out );
 
@@ -397,7 +397,7 @@ abstract class Skin extends ContextSource {
 
        /**
         * This will be called by OutputPage::headElement when it is creating the
-        * <body> tag, skins can override it if they have a need to add in any
+        * "<body>" tag, skins can override it if they have a need to add in any
         * body attributes or classes of their own.
         * @param $out OutputPage
         * @param $bodyAttrs Array
@@ -636,9 +636,9 @@ abstract class Skin extends ContextSource {
        }
 
        /**
-        * This gets called shortly before the </body> tag.
+        * This gets called shortly before the "</body>" tag.
         *
-        * @return String HTML-wrapped JS code to be put before </body>
+        * @return String HTML-wrapped JS code to be put before "</body>"
         */
        function bottomScripts() {
                // TODO and the suckage continues. This function is really just a wrapper around
index e1ec897..6385250 100644 (file)
@@ -95,7 +95,7 @@ class LegacyTemplate extends BaseTemplate {
        }
 
        /**
-        * This will be called immediately after the <body> tag.  Split into
+        * This will be called immediately after the "<body>" tag.  Split into
         * two functions to make it easier to subclass.
         * @return string
         */
@@ -159,8 +159,8 @@ class LegacyTemplate extends BaseTemplate {
        }
 
        /**
-        * This gets called shortly before the </body> tag.
-        * @return String HTML to be put before </body>
+        * This gets called shortly before the "</body>" tag.
+        * @return String HTML to be put before "</body>"
         */
        function afterContent() {
                return $this->doAfterContent();
@@ -638,7 +638,7 @@ class LegacyTemplate extends BaseTemplate {
                $title = $this->getSkin()->getTitle();
 
                if ( $wgOut->isArticleRelated() ) {
-                       if ( $title->userIsWatching() ) {
+                       if ( $wgUser->isWatched( $title ) ) {
                                $text = wfMsg( 'unwatchthispage' );
                                $query = array(
                                        'action' => 'unwatch',
index b3dfc9b..6ad374d 100644 (file)
@@ -91,7 +91,7 @@ class SkinTemplate extends Skin {
        var $template = 'QuickTemplate';
 
        /**
-        * Whether this skin use OutputPage::headElement() to generate the <head>
+        * Whether this skin use OutputPage::headElement() to generate the "<head>"
         * tag
         */
        var $useHeadElement = false;
@@ -258,7 +258,7 @@ class SkinTemplate extends Skin {
                /* XXX currently unused, might get useful later
                $tpl->set( 'editable', ( !$title->isSpecialPage() ) );
                $tpl->set( 'exists', $title->getArticleID() != 0 );
-               $tpl->set( 'watch', $title->userIsWatching() ? 'unwatch' : 'watch' );
+               $tpl->set( 'watch', $user->isWatched( $title ) ? 'unwatch' : 'watch' );
                $tpl->set( 'protect', count( $title->isProtected() ) ? 'unprotect' : 'protect' );
                $tpl->set( 'helppage', $this->msg( 'helppage' )->text() );
                */
@@ -974,7 +974,7 @@ class SkinTemplate extends Skin {
                                         * a change to that procedure these messages will have to remain as
                                         * the global versions.
                                         */
-                                       $mode = $title->userIsWatching() ? 'unwatch' : 'watch';
+                                       $mode = $user->isWatched( $title ) ? 'unwatch' : 'watch';
                                        $token = WatchAction::getWatchToken( $title, $user, $mode );
                                        $content_navigation['actions'][$mode] = array(
                                                'class' => $onPage && ( $action == 'watch' || $action == 'unwatch' ) ? 'selected' : false,
@@ -1605,26 +1605,39 @@ abstract class BaseTemplate extends QuickTemplate {
         * Makes a link, usually used by makeListItem to generate a link for an item
         * in a list used in navigation lists, portlets, portals, sidebars, etc...
         *
-        * $key is a string, usually a key from the list you are generating this link from
-        * $item is an array containing some of a specific set of keys.
-        * The text of the link will be generated either from the contents of the "text"
-        * key in the $item array, if a "msg" key is present a message by that name will
-        * be used, and if neither of those are set the $key will be used as a message name.
+        * @param $key string usually a key from the list you are generating this
+        * link from.
+        * @param $item array contains some of a specific set of keys.
+        *
+        * The text of the link will be generated either from the contents of the
+        * "text" key in the $item array, if a "msg" key is present a message by
+        * that name will be used, and if neither of those are set the $key will be
+        * used as a message name.
+        *
         * If a "href" key is not present makeLink will just output htmlescaped text.
-        * The href, id, class, rel, and type keys are used as attributes for the link if present.
-        * If an "id" or "single-id" (if you don't want the actual id to be output on the link)
-        * is present it will be used to generate a tooltip and accesskey for the link.
+        * The "href", "id", "class", "rel", and "type" keys are used as attributes
+        * for the link if present.
+        *
+        * If an "id" or "single-id" (if you don't want the actual id to be output
+        * on the link) is present it will be used to generate a tooltip and
+        * accesskey for the link.
+        *
         * If you don't want an accesskey, set $item['tooltiponly'] = true;
-        * $options can be used to affect the output of a link:
-        *   You can use a text-wrapper key to specify a list of elements to wrap the
-        *     text of a link in. This should be an array of arrays containing a 'tag' and
-        *     optionally an 'attributes' key. If you only have one element you don't need
-        *     to wrap it in another array. eg: To use <a><span>...</span></a> in all links
-        *     use array( 'text-wrapper' => array( 'tag' => 'span' ) ) for your options.
-        *   A link-class key can be used to specify additional classes to apply to all links.
-        *   A link-fallback can be used to specify a tag to use instead of <a> if there is
-        *   no link. eg: If you specify 'link-fallback' => 'span' than any non-link will
-        *   output a <span> instead of just text.
+        *
+        * @param $options array can be used to affect the output of a link.
+        * Possible options are:
+        *   - 'text-wrapper' key to specify a list of elements to wrap the text of
+        *   a link in. This should be an array of arrays containing a 'tag' and
+        *   optionally an 'attributes' key. If you only have one element you don't
+        *   need to wrap it in another array. eg: To use <a><span>...</span></a>
+        *   in all links use array( 'text-wrapper' => array( 'tag' => 'span' ) )
+        *   for your options.
+        *   - 'link-class' key can be used to specify additional classes to apply
+        *   to all links.
+        *   - 'link-fallback' can be used to specify a tag to use instead of "<a>"
+        *   if there is no link. eg: If you specify 'link-fallback' => 'span' than
+        *   any non-link will output a "<span>" instead of just text.
+        *
         * @return string
         */
        function makeLink( $key, $item, $options = array() ) {
index 9e6717f..ba6db79 100644 (file)
@@ -589,15 +589,70 @@ class SpecialPage {
                $out->setPageTitle( $this->getDescription() );
        }
 
+       /**
+        * Entry point.
+        *
+        * @since 1.20
+        *
+        * @param $subPage string|null
+        */
+       public final function run( $subPage ) {
+               /**
+                * Gets called before @see SpecialPage::execute.
+                *
+                * @since 1.20
+                *
+                * @param $special SpecialPage
+                * @param $subPage string|null
+                */
+               wfRunHooks( 'SpecialPageBeforeExecute', array( &$this, $subPage ) );
+
+               $this->beforeExecute( $subPage );
+               $this->execute( $subPage );
+               $this->afterExecute( $subPage );
+
+               /**
+                * Gets called after @see SpecialPage::execute.
+                *
+                * @since 1.20
+                *
+                * @param $special SpecialPage
+                * @param $subPage string|null
+                */
+               wfRunHooks( 'SpecialPageAfterExecute', array( &$this, $subPage ) );
+       }
+
+       /**
+        * Gets called before @see SpecialPage::execute.
+        *
+        * @since 1.20
+        *
+        * @param $subPage string|null
+        */
+       protected function beforeExecute( $subPage ) {
+               // No-op
+       }
+
+       /**
+        * Gets called after @see SpecialPage::execute.
+        *
+        * @since 1.20
+        *
+        * @param $subPage string|null
+        */
+       protected function afterExecute( $subPage ) {
+               // No-op
+       }
+
        /**
         * Default execute method
         * Checks user permissions, calls the function given in mFunction
         *
         * This must be overridden by subclasses; it will be made abstract in a future version
         *
-        * @param $par String subpage string, if one was specified
+        * @param $subPage string|null
         */
-       function execute( $par ) {
+       public function execute( $subPage ) {
                $this->setHeaders();
                $this->checkPermissions();
 
@@ -607,7 +662,7 @@ class SpecialPage {
                        require_once( $this->mFile );
                }
                $this->outputHeader();
-               call_user_func( $func, $par, $this );
+               call_user_func( $func, $subPage, $this );
        }
 
        /**
index 02b8d54..1d62e8b 100644 (file)
@@ -490,7 +490,7 @@ class SpecialPageFactory {
                // Execute special page
                $profName = 'Special:' . $page->getName();
                wfProfileIn( $profName );
-               $page->execute( $par );
+               $page->run( $par );
                wfProfileOut( $profName );
                wfProfileOut( __METHOD__ );
                return true;
index 6d36a43..aeb9ba4 100644 (file)
 /**
  * Abstract base class for update jobs that put some secondary data extracted
  * from article content into the database.
+ *
+ * @note: subclasses should NOT start or commit transactions in their doUpdate() method,
+ *        a transaction will automatically be wrapped around the update. Starting another
+ *        one would break the outer transaction bracket. If need be, subclasses can override
+ *        the beginTransaction() and commitTransaction() methods.
  */
 abstract class SqlDataUpdate extends DataUpdate {
 
index 7cd2b03..8eb0f6b 100644 (file)
@@ -44,7 +44,15 @@ class SquidPurgeClient {
         * The socket resource, or null for unconnected, or false for disabled due to error
         */
        var $socket;
-       
+
+       var $readBuffer;
+
+       var $bodyRemaining;
+
+       /**
+        * @param $server string
+        * @param $options array
+        */
        public function __construct( $server, $options = array() ) {
                $parts = explode( ':', $server, 2 );
                $this->host = $parts[0];
@@ -340,6 +348,9 @@ class SquidPurgeClient {
                $this->bodyRemaining = null;
        }
 
+       /**
+        * @param $msg string
+        */
        protected function log( $msg ) {
                wfDebugLog( 'squid', __CLASS__." ($this->host): $msg\n" );
        }
@@ -353,6 +364,9 @@ class SquidPurgeClientPool {
        var $clients = array();
        var $timeout = 5;
 
+       /**
+        * @param $options array
+        */
        function __construct( $options = array() ) {
                if ( isset( $options['timeout'] ) ) {
                        $this->timeout = $options['timeout'];
@@ -372,6 +386,9 @@ class SquidPurgeClientPool {
                $startTime = microtime( true );
                while ( !$done ) {
                        $readSockets = $writeSockets = array();
+                       /**
+                        * @var $client SquidPurgeClient
+                        */
                        foreach ( $this->clients as $clientIndex => $client ) {
                                $sockets = $client->getReadSocketsForSelect();
                                foreach ( $sockets as $i => $socket ) {
index 3b500ae..43275a6 100644 (file)
@@ -213,7 +213,7 @@ class StringUtils {
         * Returns an Iterator
         * @param $separator
         * @param $subject
-        * @return ArrayIterator|\ExplodeIterator
+        * @return ArrayIterator|ExplodeIterator
         */
        static function explode( $separator, $subject ) {
                if ( substr_count( $subject, $separator ) > 1000 ) {
index 046fadb..6ddf6da 100644 (file)
@@ -1516,6 +1516,7 @@ class Title {
        /**
         * Is $wgUser watching this page?
         *
+        * @deprecated in 1.20; use User::isWatched() instead.
         * @return Bool
         */
        public function userIsWatching() {
@@ -2858,7 +2859,7 @@ class Title {
         * @return Int or 0 if the page doesn't exist
         */
        public function getLatestRevID( $flags = 0 ) {
-               if ( $this->mLatestID !== false ) {
+               if ( !( $flags & Title::GAID_FOR_UPDATE ) && $this->mLatestID !== false ) {
                        return intval( $this->mLatestID );
                }
                # Calling getArticleID() loads the field from cache as needed
@@ -2877,7 +2878,7 @@ class Title {
         *
         * - This is called from WikiPage::doEdit() and WikiPage::insertOn() to allow
         * loading of the new page_id. It's also called from
-        * WikiPage::doDeleteArticle()
+        * WikiPage::doDeleteArticleReal()
         *
         * @param $newid Int the new Article ID
         */
@@ -3284,16 +3285,14 @@ class Title {
         * @return Array of String the URLs
         */
        public function getSquidURLs() {
-               global $wgContLang;
-
                $urls = array(
                        $this->getInternalURL(),
                        $this->getInternalURL( 'action=history' )
                );
 
-               // purge variant urls as well
-               if ( $wgContLang->hasVariants() ) {
-                       $variants = $wgContLang->getVariants();
+               $pageLang = $this->getPageLanguage();
+               if ( $pageLang->hasVariants() ) {
+                       $variants = $pageLang->getVariants();
                        foreach ( $variants as $vCode ) {
                                $urls[] = $this->getInternalURL( '', $vCode );
                        }
index 01407b1..51877f8 100644 (file)
@@ -65,6 +65,11 @@ class User {
        const MW_USER_VERSION = MW_USER_VERSION;
        const EDIT_TOKEN_SUFFIX = EDIT_TOKEN_SUFFIX;
 
+       /**
+        * Maximum items in $mWatchedItems
+        */
+       const MAX_WATCHED_ITEMS_CACHE = 100;
+
        /**
         * Array of Strings List of member variables which are saved to the
         * shared cache (memcached). Any operation which changes the
@@ -219,6 +224,11 @@ class User {
         */
        private $mBlockedFromCreateAccount = false;
 
+       /**
+        * @var Array
+        */
+       private $mWatchedItems = array();
+
        static $idCacheByName = array();
 
        /**
@@ -517,7 +527,7 @@ class User {
         * as 300.300.300.300 will return true because it looks like an IP
         * address, despite not being strictly valid.
         *
-        * We match \d{1,3}\.\d{1,3}\.\d{1,3}\.xxx as an anonymous IP
+        * We match "\d{1,3}\.\d{1,3}\.\d{1,3}\.xxx" as an anonymous IP
         * address because the usemod software would "cloak" anonymous IP
         * addresses like this, if we allowed accounts like this to be created
         * new users could get the old edits of these anonymous users.
@@ -2613,14 +2623,34 @@ class User {
                return RequestContext::getMain()->getSkin();
        }
 
+       /**
+        * Get a WatchedItem for this user and $title.
+        *
+        * @param $title Title
+        * @return WatchedItem
+        */
+       public function getWatchedItem( $title ) {
+               $key = $title->getNamespace() . ':' . $title->getDBkey();
+
+               if ( isset( $this->mWatchedItems[$key] ) ) {
+                       return $this->mWatchedItems[$key];
+               }
+
+               if ( count( $this->mWatchedItems ) >= self::MAX_WATCHED_ITEMS_CACHE ) {
+                       $this->mWatchedItems = array();
+               }
+
+               $this->mWatchedItems[$key] = WatchedItem::fromUserTitle( $this, $title );
+               return $this->mWatchedItems[$key];
+       }
+
        /**
         * Check the watched status of an article.
         * @param $title Title of the article to look at
         * @return Bool
         */
        public function isWatched( $title ) {
-               $wl = WatchedItem::fromUserTitle( $this, $title );
-               return $wl->isWatched();
+               return $this->getWatchedItem( $title )->isWatched();
        }
 
        /**
@@ -2628,8 +2658,7 @@ class User {
         * @param $title Title of the article to look at
         */
        public function addWatch( $title ) {
-               $wl = WatchedItem::fromUserTitle( $this, $title );
-               $wl->addWatch();
+               $this->getWatchedItem( $title )->addWatch();
                $this->invalidateCache();
        }
 
@@ -2638,8 +2667,7 @@ class User {
         * @param $title Title of the article to look at
         */
        public function removeWatch( $title ) {
-               $wl = WatchedItem::fromUserTitle( $this, $title );
-               $wl->removeWatch();
+               $this->getWatchedItem( $title )->removeWatch();
                $this->invalidateCache();
        }
 
index 87526fc..766db46 100644 (file)
@@ -504,9 +504,9 @@ class WebRequest {
         * Fetch a text string from the given array or return $default if it's not
         * set. Carriage returns are stripped from the text, and with some language
         * modules there is an input transliteration applied. This should generally
-        * be used for form <textarea> and <input> fields. Used for user-supplied
-        * freeform text input (for which input transformations may be required - e.g.
-        * Esperanto x-coding).
+        * be used for form "<textarea>" and "<input>" fields. Used for
+        * user-supplied freeform text input (for which input transformations may
+        * be required - e.g.  Esperanto x-coding).
         *
         * @param $name String
         * @param $default String: optional
index 1190172..7dd85b6 100644 (file)
@@ -126,6 +126,13 @@ class WikiReference {
        private $mServer; ///< server URL, may be protocol-relative, e.g. '//www.mediawiki.org'
        private $mPath;   ///< path, '/wiki/$1'
 
+       /**
+        * @param $major string
+        * @param $minor string
+        * @param $canonicalServer string
+        * @param $path string
+        * @param $server null|string
+        */
        public function __construct( $major, $minor, $canonicalServer, $path, $server = null ) {
                $this->mMajor = $major;
                $this->mMinor = $minor;
@@ -186,8 +193,17 @@ class WikiReference {
                return $this->mCanonicalServer . $this->getLocalUrl( $page );
        }
 
+       /**
+        * Get a canonical server URL
+        * @return string
+        */
+       public function getCanonicalServer() {
+               return $this->mCanonicalServer;
+       }
+
        /**
         * Alias for getCanonicalUrl(), for backwards compatibility.
+        * @param $page string
         * @return String
         */
        public function getUrl( $page ) {
index 76a9828..6d9170a 100644 (file)
@@ -34,30 +34,6 @@ abstract class Page {}
  * @internal documentation reviewed 15 Mar 2010
  */
 class WikiPage extends Page {
-       // doDeleteArticleReal() return values. Values less than zero indicate fatal errors,
-       // values greater than zero indicate that there were problems not resulting in page
-       // not being deleted
-
-       /**
-        * Delete operation aborted by hook
-        */
-       const DELETE_HOOK_ABORTED = -1;
-
-       /**
-        * Deletion successful
-        */
-       const DELETE_SUCCESS = 0;
-
-       /**
-        * Page not found
-        */
-       const DELETE_NO_PAGE = 1;
-
-       /**
-        * No revisions found to delete
-        */
-       const DELETE_NO_REVISIONS = 2;
-
        // Constants for $mDataLoadedFrom and related
 
        /**
@@ -1205,7 +1181,7 @@ class WikiPage extends Page {
                        $conditions,
                        __METHOD__ );
 
-               $result = $dbw->affectedRows() != 0;
+               $result = $dbw->affectedRows() > 0;
                if ( $result ) {
                        $this->updateRedirectOn( $dbw, $rt, $lastRevIsRedirect );
                        $this->setLastEdit( $revision );
@@ -1511,6 +1487,10 @@ class WikiPage extends Page {
 
                                wfProfileOut( __METHOD__ );
                                return $status;
+                       } elseif ( $oldtext === false ) {
+                               # Sanity check for bug 37225
+                               wfProfileOut( __METHOD__ );
+                               throw new MWException( "Could not find text for current revision {$oldid}." );
                        }
 
                        $revision = new Revision( array(
@@ -2111,7 +2091,10 @@ class WikiPage extends Page {
        }
 
        /**
-        * Same as doDeleteArticleReal(), but returns more detailed success/failure status
+        * Same as doDeleteArticleReal(), but returns a simple boolean. This is kept around for
+        * backwards compatibility, if you care about error reporting you should use
+        * doDeleteArticleReal() instead.
+        *
         * Deletes the article with database consistency, writes logs, purges caches
         *
         * @param $reason string delete reason for deletion log
@@ -2129,8 +2112,8 @@ class WikiPage extends Page {
        public function doDeleteArticle(
                $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
        ) {
-               return $this->doDeleteArticleReal( $reason, $suppress, $id, $commit, $error, $user )
-                       == WikiPage::DELETE_SUCCESS;
+               $status = $this->doDeleteArticleReal( $reason, $suppress, $id, $commit, $error, $user );
+               return $status->isGood();
        }
 
        /**
@@ -2147,7 +2130,9 @@ class WikiPage extends Page {
         * @param $commit boolean defaults to true, triggers transaction end
         * @param &$error Array of errors to append to
         * @param $user User The deleting user
-        * @return int: One of WikiPage::DELETE_* constants
+        * @return Status: Status object; if successful, $status->value is the log_id of the
+        *                 deletion log entry. If the page couldn't be deleted because it wasn't
+        *                 found, $status is a non-fatal 'cannotdelete' error
         */
        public function doDeleteArticleReal(
                $reason, $suppress = false, $id = 0, $commit = true, &$error = '', User $user = null
@@ -2156,20 +2141,28 @@ class WikiPage extends Page {
 
                wfDebug( __METHOD__ . "\n" );
 
+               $status = Status::newGood();
+
                if ( $this->mTitle->getDBkey() === '' ) {
-                       return WikiPage::DELETE_NO_PAGE;
+                       $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
+                       return $status;
                }
 
                $user = is_null( $user ) ? $wgUser : $user;
-               if ( ! wfRunHooks( 'ArticleDelete', array( &$this, &$user, &$reason, &$error ) ) ) {
-                       return WikiPage::DELETE_HOOK_ABORTED;
+               if ( ! wfRunHooks( 'ArticleDelete', array( &$this, &$user, &$reason, &$error, &$status ) ) ) {
+                       if ( $status->isOK() ) {
+                               // Hook aborted but didn't set a fatal status
+                               $status->fatal( 'delete-hook-aborted' );
+                       }
+                       return $status;
                }
 
                if ( $id == 0 ) {
                        $this->loadPageData( 'forupdate' );
                        $id = $this->getID();
                        if ( $id == 0 ) {
-                               return WikiPage::DELETE_NO_PAGE;
+                               $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
+                               return $status;
                        }
                }
 
@@ -2227,7 +2220,8 @@ class WikiPage extends Page {
 
                if ( !$ok ) {
                        $dbw->rollback( __METHOD__ );
-                       return WikiPage::DELETE_NO_REVISIONS;
+                       $status->error( 'cannotdelete', wfEscapeWikiText( $this->getTitle()->getPrefixedText() ) );
+                       return $status;
                }
 
                $this->doDeleteUpdates( $id );
@@ -2247,7 +2241,8 @@ class WikiPage extends Page {
                }
 
                wfRunHooks( 'ArticleDeleteComplete', array( &$this, &$user, $reason, $id ) );
-               return WikiPage::DELETE_SUCCESS;
+               $status->value = $logid;
+               return $status;
        }
 
        /**
@@ -2611,7 +2606,7 @@ class WikiPage extends Page {
                if ( is_object( $rt ) && ( !is_object( $ot ) || !$rt->equals( $ot ) || $ot->getFragment() != $rt->getFragment() ) ) {
                        $truncatedtext = $wgContLang->truncate(
                                str_replace( "\n", ' ', $newtext ),
-                               max( 0, 250
+                               max( 0, 255
                                        - strlen( wfMsgForContent( 'autoredircomment' ) )
                                        - strlen( $rt->getFullText() )
                                ) );
index 6e4bb3a..505cb7f 100644 (file)
@@ -210,15 +210,18 @@ class Xml {
         * @param string $selected The language code of the selected language
         * @param boolean $customisedOnly If true only languages which have some content are listed
         * @param string $inLanguage The ISO code of the language to display the select list in (optional)
+        * @param array $overrideAttrs Override the attributes of the select tag (since 1.20)
+        * @param Message|null $msg Label message key (since 1.20)
         * @return array containing 2 items: label HTML and select list HTML
         */
-       public static function languageSelector( $selected, $customisedOnly = true, $inLanguage = null ) {
+       public static function languageSelector( $selected, $customisedOnly = true, $inLanguage = null, $overrideAttrs = array(), Message $msg = null ) {
                global $wgLanguageCode;
 
-               $languages = Language::fetchLanguageNames( $inLanguage, $customisedOnly ? 'mwfile' : 'mw' );
+               $include = $customisedOnly ? 'mwfile' : 'mw';
+               $languages = Language::fetchLanguageNames( $inLanguage, $include );
 
-               // Make sure the site language is in the list; a custom language code might not have a
-               // defined name...
+               // Make sure the site language is in the list;
+               // a custom language code might not have a defined name...
                if( !array_key_exists( $wgLanguageCode, $languages ) ) {
                        $languages[$wgLanguageCode] = $wgLanguageCode;
                }
@@ -228,7 +231,7 @@ class Xml {
                /**
                 * If a bogus value is set, default to the content language.
                 * Otherwise, no default is selected and the user ends up
-                * with an Afrikaans interface since it's first in the list.
+                * with Afrikaans since it's first in the list.
                 */
                $selected = isset( $languages[$selected] ) ? $selected : $wgLanguageCode;
                $options = "\n";
@@ -236,12 +239,15 @@ class Xml {
                        $options .= Xml::option( "$code - $name", $code, ($code == $selected) ) . "\n";
                }
 
+               $attrs = array( 'id' => 'wpUserLanguage', 'name' => 'wpUserLanguage' );
+               $attrs = array_merge( $attrs, $overrideAttrs );
+
+               if( $msg === null ) {
+                       $msg = wfMessage( 'yourlanguage' );
+               }
                return array(
-                       Xml::label( wfMsg('yourlanguage'), 'wpUserLanguage' ),
-                       Xml::tags( 'select',
-                               array( 'id' => 'wpUserLanguage', 'name' => 'wpUserLanguage' ),
-                               $options
-                       )
+                       Xml::label( $msg->text(), $attrs['id'] ),
+                       Xml::tags( 'select', $attrs, $options )
                );
 
        }
index 2a2d31e..0595923 100644 (file)
@@ -2570,7 +2570,6 @@ $zh2Hant = array(
 '龚' => '龔',
 '龛' => '龕',
 '龟' => '龜',
-'' => '棡',
 '𠮶' => '嗰',
 '𡒄' => '壈',
 '𦈖' => '䌈',
@@ -10389,7 +10388,6 @@ $zh2Hans = array(
 '棖' => '枨',
 '棗' => '枣',
 '棟' => '栋',
-'棡' => '',
 '棧' => '栈',
 '棲' => '栖',
 '棶' => '梾',
index 50d210f..7393315 100644 (file)
@@ -418,34 +418,11 @@ class HistoryPager extends ReverseChronologicalPager {
                                $batch->add( NS_USER_TALK, $row->rev_user_text );
                        }
                }
-               $this->parentLens = $this->getParentLengths( $revIds );
+               $this->parentLens = Revision::getParentLengths( $this->mDb, $revIds );
                $batch->execute();
                $this->mResult->seek( 0 );
        }
 
-       /**
-        * Do a batched query to get the parent revision lengths
-        * @param $revIds array
-        * @return array
-        * @TODO: stolen from Contributions, refactor
-        */
-       private function getParentLengths( array $revIds ) {
-               $revLens = array();
-               if ( !$revIds ) {
-                       return $revLens; // empty
-               }
-               wfProfileIn( __METHOD__ );
-               $res = $this->mDb->select( 'revision',
-                       array( 'rev_id', 'rev_len' ),
-                       array( 'rev_id' => $revIds ),
-                       __METHOD__ );
-               foreach ( $res as $row ) {
-                       $revLens[$row->rev_id] = $row->rev_len;
-               }
-               wfProfileOut( __METHOD__ );
-               return $revLens;
-       }
-
        /**
         * Creates begin of history list with a submit button
         *
@@ -635,6 +612,7 @@ class HistoryPager extends ReverseChronologicalPager {
 
                if ( $notificationtimestamp && ( $row->rev_timestamp >= $notificationtimestamp ) ) {
                        $s2 .= ' <span class="updatedmarker">' .  $this->msg( 'updatedmarker' )->escaped() . '</span>';
+                       $classes[] = 'mw-history-line-updated';
                }
 
                $tools = array();
@@ -646,7 +624,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        if ( $latest && !count( $this->getTitle()->getUserPermissionsErrors( 'rollback', $this->getUser() ) ) ) {
                                $this->preventClickjacking();
                                $tools[] = '<span class="mw-rollback-link">' .
-                                       Linker::buildRollbackLink( $rev ) . '</span>';
+                                       Linker::buildRollbackLink( $rev, $this->getContext() ) . '</span>';
                        }
 
                        if ( !$rev->isDeleted( Revision::DELETED_TEXT )
index f07e493..14da2fc 100644 (file)
@@ -44,6 +44,6 @@ class RevisiondeleteAction extends FormlessAction {
        public function show() {
                $special = SpecialPageFactory::getPage( 'Revisiondelete' );
                $special->setContext( $this->getContext() );
-               $special->execute( '' );
+               $special->run( '' );
        }
 }
index 6a9be24..77c0fc2 100644 (file)
@@ -825,7 +825,7 @@ abstract class ApiBase extends ContextSource {
         */
        protected function getWatchlistValue ( $watchlist, $titleObj, $userOption = null ) {
 
-               $userWatching = $titleObj->userIsWatching();
+               $userWatching = $this->getUser()->isWatched( $titleObj );
 
                switch ( $watchlist ) {
                        case 'watch':
@@ -1184,7 +1184,7 @@ abstract class ApiBase extends ContextSource {
         * @param $errorCode string Brief, arbitrary, stable string to allow easy
         *   automated identification of the error, e.g., 'unknown_action'
         * @param $httpRespCode int HTTP response code
-        * @param $extradata array Data to add to the <error> element; array in ApiResult format
+        * @param $extradata array Data to add to the "<error>" element; array in ApiResult format
         */
        public function dieUsage( $description, $errorCode, $httpRespCode = 0, $extradata = null ) {
                Profiler::instance()->close();
@@ -1307,6 +1307,8 @@ abstract class ApiBase extends ContextSource {
                'specialpage-cantexecute' => array( 'code' => 'specialpage-cantexecute', 'info' => "You don't have permission to view the results of this special page" ),
                'invalidoldimage' => array( 'code' => 'invalidoldimage', 'info' => 'The oldimage parameter has invalid format' ),
                'nodeleteablefile' => array( 'code' => 'nodeleteablefile', 'info' => 'No such old version of the file' ),
+               'fileexists-forbidden' => array( 'code' => 'fileexists-forbidden', 'info' => 'A file with name "$1" already exists, and cannot be overwritten.' ),
+               'fileexists-shared-forbidden' => array( 'code' => 'fileexists-shared-forbidden', 'info' => 'A file with name "$1" already exists in the shared file repository, and cannot be overwritten.' ),
 
                // ApiEditPage messages
                'noimageredirect-anon' => array( 'code' => 'noimageredirect-anon', 'info' => "Anonymous users can't create image redirects" ),
index 1927490..91406af 100644 (file)
@@ -56,13 +56,14 @@ class ApiDelete extends ApiBase {
                $user = $this->getUser();
 
                if ( $titleObj->getNamespace() == NS_FILE ) {
-                       $retval = self::deleteFile( $pageObj, $user, $params['token'], $params['oldimage'], $reason, false );
+                       $status = self::deleteFile( $pageObj, $user, $params['token'], $params['oldimage'], $reason, false );
                } else {
-                       $retval = self::delete( $pageObj, $user, $params['token'], $reason );
+                       $status = self::delete( $pageObj, $user, $params['token'], $reason );
                }
 
-               if ( count( $retval ) ) {
-                       $this->dieUsageMsg( reset( $retval ) ); // We don't care about multiple errors, just report one of them
+               if ( !$status->isGood() ) {
+                       $errors = $this->getErrorsArray();
+                       $this->dieUsageMsg( $errors[0] ); // We don't care about multiple errors, just report one of them
                }
 
                // Deprecated parameters
@@ -75,7 +76,11 @@ class ApiDelete extends ApiBase {
                }
                $this->setWatch( $watch, $titleObj, 'watchdeletion' );
 
-               $r = array( 'title' => $titleObj->getPrefixedText(), 'reason' => $reason );
+               $r = array(
+                       'title' => $titleObj->getPrefixedText(),
+                       'reason' => $reason,
+                       'logid' => $status->value
+               );
                $this->getResult()->addValue( null, $this->getModuleName(), $r );
        }
 
@@ -97,7 +102,7 @@ class ApiDelete extends ApiBase {
         * @param $user User doing the action
         * @param $token String: delete token (same as edit token)
         * @param $reason String: reason for the deletion. Autogenerated if NULL
-        * @return Title::getUserPermissionsErrors()-like array
+        * @return Status
         */
        public static function delete( Page $page, User $user, $token, &$reason = null ) {
                $title = $page->getTitle();
@@ -119,11 +124,7 @@ class ApiDelete extends ApiBase {
 
                $error = '';
                // Luckily, Article.php provides a reusable delete function that does the hard work for us
-               if ( $page->doDeleteArticle( $reason, false, 0, true, $error ) ) {
-                       return array();
-               } else {
-                       return array( array( 'cannotdelete', $title->getPrefixedText() ) );
-               }
+               return $page->doDeleteArticleReal( $reason, false, 0, true, $error );
        }
 
        /**
@@ -133,7 +134,7 @@ class ApiDelete extends ApiBase {
         * @param $oldimage
         * @param $reason
         * @param $suppress bool
-        * @return array|Title
+        * @return Status
         */
        public static function deleteFile( Page $page, User $user, $token, $oldimage, &$reason = null, $suppress = false ) {
                $title = $page->getTitle();
@@ -162,12 +163,7 @@ class ApiDelete extends ApiBase {
                if ( is_null( $reason ) ) { // Log and RC don't like null reasons
                        $reason = '';
                }
-               $status = FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress );
-               if ( !$status->isGood() ) {
-                       return array( array( 'cannotdelete', $title->getPrefixedText() ) );
-               }
-
-               return array();
+               return FileDeleteForm::doDelete( $title, $file, $oldimage, $reason, $suppress );
        }
 
        public function mustBePosted() {
index ef2c54f..c16b62c 100644 (file)
@@ -83,16 +83,40 @@ class ApiFormatXml extends ApiFormatBase {
 
        /**
         * This method takes an array and converts it to XML.
+        *
         * There are several noteworthy cases:
         *
-        *  If array contains a key '_element', then the code assumes that ALL other keys are not important and replaces them with the value['_element'].
-        *      Example:        name='root',  value = array( '_element'=>'page', 'x', 'y', 'z') creates <root>  <page>x</page>  <page>y</page>  <page>z</page> </root>
+        * If array contains a key '_element', then the code assumes that ALL
+        * other keys are not important and replaces them with the
+        * value['_element'].
+        *
+        * @par Example:
+        * @verbatim
+        * name='root',  value = array( '_element'=>'page', 'x', 'y', 'z')
+        * @endverbatim
+        * creates:
+        * @verbatim
+        * <root>  <page>x</page>  <page>y</page>  <page>z</page> </root>
+        * @endverbatim
+        *
+        * If any of the array's element key is '*', then the code treats all
+        * other key->value pairs as attributes, and the value['*'] as the
+        * element's content.
+        *
+        * @par Example:
+        * @verbatim
+        * name='root',  value = array( '*'=>'text', 'lang'=>'en', 'id'=>10)
+        * @endverbatim
+        * creates:
+        * @verbatim
+        * <root lang='en' id='10'>text</root>
+        * @endverbatim
         *
-        *  If any of the array's element key is '*', then the code treats all other key->value pairs as attributes, and the value['*'] as the element's content.
-        *      Example:        name='root',  value = array( '*'=>'text', 'lang'=>'en', 'id'=>10)   creates  <root lang='en' id='10'>text</root>
+        * Finally neither key is found, all keys become element names, and values
+        * become element content.
         *
-        * If neither key is found, all keys become element names, and values become element content.
-        * The method is recursive, so the same rules apply to any sub-arrays.
+        * @note The method is recursive, so the same rules apply to any
+        * sub-arrays.
         *
         * @param $elemName
         * @param $elemValue
index 30e9fb6..172a77b 100644 (file)
@@ -354,6 +354,12 @@ class ApiMain extends ApiBase {
         * have been accumulated, and replace it with an error message and a help screen.
         */
        protected function executeActionWithErrorHandling() {
+               // Verify the CORS header before executing the action
+               if ( !$this->handleCORS() ) {
+                       // handleCORS() has sent a 403, abort
+                       return;
+               }
+
                // In case an error occurs during data output,
                // clear the output buffer and print just the error information
                ob_start();
@@ -402,9 +408,94 @@ class ApiMain extends ApiBase {
                ob_end_flush();
        }
 
+       /**
+        * Check the &origin= query parameter against the Origin: HTTP header and respond appropriately.
+        *
+        * If no origin parameter is present, nothing happens.
+        * If an origin parameter is present but doesn't match the Origin header, a 403 status code
+        * is set and false is returned.
+        * If the parameter and the header do match, the header is checked against $wgCrossSiteAJAXdomains
+        * and $wgCrossSiteAJAXdomainExceptions, and if the origin qualifies, the appropriate CORS
+        * headers are set.
+        *
+        * @return bool False if the caller should abort (403 case), true otherwise (all other cases)
+        */
+       protected function handleCORS() {
+               global $wgCrossSiteAJAXdomains, $wgCrossSiteAJAXdomainExceptions;
+               $response = $this->getRequest()->response();
+               $originParam = $this->getParameter( 'origin' ); // defaults to null
+               if ( $originParam === null ) {
+                       // No origin parameter, nothing to do
+                       return true;
+               }
+               // Origin: header is a space-separated list of origins, check all of them
+               $originHeader = isset( $_SERVER['HTTP_ORIGIN'] ) ? $_SERVER['HTTP_ORIGIN'] : '';
+               $origins = explode( ' ', $originHeader );
+               if ( !in_array( $originParam, $origins ) ) {
+                       // origin parameter set but incorrect
+                       // Send a 403 response
+                       $message = HttpStatus::getMessage( 403 );
+                       $response->header( "HTTP/1.1 403 $message", true, 403 );
+                       $response->header( 'Cache-Control: no-cache' );
+                       echo "'origin' parameter does not match Origin header\n";
+                       return false;
+               }
+               if ( self::matchOrigin( $originParam, $wgCrossSiteAJAXdomains, $wgCrossSiteAJAXdomainExceptions ) ) {
+                       $response->header( "Access-Control-Allow-Origin: $originParam" );
+                       $response->header( 'Access-Control-Allow-Credentials: true' );
+                       $this->getOutput()->addVaryHeader( 'Origin' );
+               }
+               return true;
+       }
+
+       /**
+        * Attempt to match an Origin header against a set of rules and a set of exceptions
+        * @param $value string Origin header
+        * @param $rules array Set of wildcard rules
+        * @param $exceptions array Set of wildcard rules
+        * @return bool True if $value matches a rule in $rules and doesn't match any rules in $exceptions, false otherwise
+        */
+       protected static function matchOrigin( $value, $rules, $exceptions ) {
+               foreach ( $rules as $rule ) {
+                       if ( preg_match( self::wildcardToRegex( $rule ), $value ) ) {
+                               // Rule matches, check exceptions
+                               foreach ( $exceptions as $exc ) {
+                                       if ( preg_match( self::wildcardToRegex( $exc ), $value ) ) {
+                                               return false;
+                                       }
+                               }
+                               return true;
+                       }
+               }
+               return false;
+       }
+
+       /**
+        * Helper function to convert wildcard string into a regex
+        * '*' => '.*?'
+        * '?' => '.'
+        *
+        * @param $wildcard string String with wildcards
+        * @return string Regular expression
+        */
+       protected static function wildcardToRegex( $wildcard ) {
+               $wildcard = preg_quote( $wildcard, '/' );
+               $wildcard = str_replace(
+                       array( '\*', '\?' ),
+                       array( '.*?', '.' ),
+                       $wildcard
+               );
+               return "/https?:\/\/$wildcard/";
+       }
+
        protected function sendCacheHeaders() {
                global $wgUseXVO, $wgVaryOnXFP;
                $response = $this->getRequest()->response();
+               $out = $this->getOutput();
+
+               if ( $wgVaryOnXFP ) {
+                       $out->addVaryHeader( 'X-Forwarded-Proto' );
+               }
 
                if ( $this->mCacheMode == 'private' ) {
                        $response->header( 'Cache-Control: private' );
@@ -412,13 +503,9 @@ class ApiMain extends ApiBase {
                }
 
                if ( $this->mCacheMode == 'anon-public-user-private' ) {
-                       $xfp = $wgVaryOnXFP ? ', X-Forwarded-Proto' : '';
-                       $response->header( 'Vary: Accept-Encoding, Cookie' . $xfp );
+                       $out->addVaryHeader( 'Cookie' );
+                       $response->header( $out->getVaryHeader() );
                        if ( $wgUseXVO ) {
-                               $out = $this->getOutput();
-                               if ( $wgVaryOnXFP ) {
-                                       $out->addVaryHeader( 'X-Forwarded-Proto' );
-                               }
                                $response->header( $out->getXVO() );
                                if ( $out->haveCacheVaryCookies() ) {
                                        // Logged in, mark this request private
@@ -435,12 +522,9 @@ class ApiMain extends ApiBase {
                }
 
                // Send public headers
-               if ( $wgVaryOnXFP ) {
-                       $response->header( 'Vary: Accept-Encoding, X-Forwarded-Proto' );
-                       if ( $wgUseXVO ) {
-                               // Bleeeeegh. Our header setting system sucks
-                               $response->header( 'X-Vary-Options: Accept-Encoding;list-contains=gzip, X-Forwarded-Proto' );
-                       }
+               $response->header( $out->getVaryHeader() );
+               if ( $wgUseXVO ) {
+                       $response->header( $out->getXVO() );
                }
 
                // If nobody called setCacheMaxAge(), use the (s)maxage parameters
@@ -784,6 +868,7 @@ class ApiMain extends ApiBase {
                        ),
                        'requestid' => null,
                        'servedby'  => false,
+                       'origin' => null,
                );
        }
 
@@ -809,6 +894,12 @@ class ApiMain extends ApiBase {
                        'maxage' => 'Set the max-age header to this many seconds. Errors are never cached',
                        'requestid' => 'Request ID to distinguish requests. This will just be output back to you',
                        'servedby' => 'Include the hostname that served the request in the results. Unconditionally shown on error',
+                       'origin' => array(
+                               'When accessing the API using a cross-domain AJAX request (CORS), set this to the originating domain.',
+                               'This must match one of the origins in the Origin: header exactly, so it has to be set to something like http://en.wikipedia.org or https://meta.wikimedia.org .',
+                               'If this parameter does not match the Origin: header, a 403 response will be returned.',
+                               'If this parameter matches the Origin: header and the origin is whitelisted, an Access-Control-Allow-Origin header will be set.',
+                       ),
                );
        }
 
index b7db4f0..e5146eb 100644 (file)
@@ -266,8 +266,8 @@ class ApiPageSet extends ApiQueryBase {
        }
 
        /**
-        * Returns the number of revisions (requested with revids= parameter)\
-        * @return int
+        * Returns the number of revisions (requested with revids= parameter).
+        * @return int Number of revisions.
         */
        public function getRevisionCount() {
                return count( $this->getRevisionIDs() );
index 60b57bf..a2fb5c3 100644 (file)
@@ -57,6 +57,7 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
 
                $this->addTables( 'category' );
                $this->addFields( 'cat_title' );
+               $this->addWhere( 'cat_pages > 0' );
 
                $dir = ( $params['dir'] == 'descending' ? 'older' : 'newer' );
                $from = ( is_null( $params['from'] ) ? null : $this->titlePartToKey( $params['from'] ) );
index 6b8fe57..70b6656 100644 (file)
@@ -80,12 +80,13 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        if ( count( $continueArr ) != 2 ) {
                                $this->dieUsage( 'Invalid continue parameter', 'badcontinue' );
                        }
+                       $op = $params['dir'] == 'descending' ? '<' : '>';
                        $continueTitle = $db->addQuotes( $this->titleToKey( $continueArr[0] ) );
                        $continueFrom = intval( $continueArr[1] );
                        $this->addWhere(
-                               "pl_title > $continueTitle OR " .
+                               "pl_title $op $continueTitle OR " .
                                "(pl_title = $continueTitle AND " .
-                               "pl_from > $continueFrom)"
+                               "pl_from $op= $continueFrom)"
                        );
                }
 
@@ -104,12 +105,13 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                $limit = $params['limit'];
                $this->addOption( 'LIMIT', $limit + 1 );
 
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
+               $orderBy = array();
+               $orderBy[] = 'pl_title' . $sort;
                if ( !$params['unique'] ) {
-                       $this->addOption( 'ORDER BY', array(
-                               'pl_title',
-                               'pl_from'
-                       ));
+                       $orderBy[] = 'pl_from' . $sort;
                }
+               $this->addOption( 'ORDER BY', $orderBy );
 
                $res = $this->select( __METHOD__ );
 
@@ -183,7 +185,14 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_MIN => 1,
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
-                       )
+                       ),
+                       'dir' => array(
+                               ApiBase::PARAM_DFLT => 'ascending',
+                               ApiBase::PARAM_TYPE => array(
+                                       'ascending',
+                                       'descending'
+                               )
+                       ),
                );
        }
 
@@ -202,6 +211,7 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
                        'namespace' => 'The namespace to enumerate',
                        'limit' => 'How many total links to return',
                        'continue' => 'When more results are available, use this to continue',
+                       'dir' => 'The direction in which to list',
                );
        }
 
index cfc22ff..dec3d8a 100644 (file)
@@ -165,6 +165,16 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                $this->addOption( 'LIMIT', $limit + 1 );
                $res = $this->select( __METHOD__ );
 
+               //Get gender information
+               if( MWNamespace::hasGenderDistinction( $params['namespace'] ) ) {
+                       $users = array();
+                       foreach ( $res as $row ) {
+                               $users[] = $row->page_title;
+                       }
+                       GenderCache::singleton()->doQuery( $users, __METHOD__ );
+                       $res->rewind(); //reset
+               }
+
                $count = 0;
                $result = $this->getResult();
                foreach ( $res as $row ) {
index 9704b6d..7491bbb 100644 (file)
@@ -40,7 +40,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
        private $rootTitle;
 
        private $params, $contID, $redirID, $redirect;
-       private $bl_ns, $bl_from, $bl_table, $bl_code, $bl_title, $bl_sort, $bl_fields, $hasNS;
+       private $bl_ns, $bl_from, $bl_table, $bl_code, $bl_title, $bl_fields, $hasNS;
 
        /**
         * Maps ns and title to pageid
@@ -91,14 +91,12 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                $this->hasNS = $moduleName !== 'imageusage';
                if ( $this->hasNS ) {
                        $this->bl_title = $prefix . '_title';
-                       $this->bl_sort = "{$this->bl_ns}, {$this->bl_title}, {$this->bl_from}";
                        $this->bl_fields = array(
                                $this->bl_ns,
                                $this->bl_title
                        );
                } else {
                        $this->bl_title = $prefix . '_to';
-                       $this->bl_sort = "{$this->bl_title}, {$this->bl_from}";
                        $this->bl_fields = array(
                                $this->bl_title
                        );
@@ -144,7 +142,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
 
                if ( !is_null( $this->contID ) ) {
-                       $this->addWhere( "{$this->bl_from}>={$this->contID}" );
+                       $op = $this->params['dir'] == 'descending' ? '<' : '>';
+                       $this->addWhere( "{$this->bl_from}$op={$this->contID}" );
                }
 
                if ( $this->params['filterredir'] == 'redirects' ) {
@@ -155,7 +154,8 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                }
 
                $this->addOption( 'LIMIT', $this->params['limit'] + 1 );
-               $this->addOption( 'ORDER BY', $this->bl_from );
+               $sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
+               $this->addOption( 'ORDER BY', $this->bl_from . $sort );
                $this->addOption( 'STRAIGHT_JOIN' );
        }
 
@@ -186,28 +186,35 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
 
                // We can't use LinkBatch here because $this->hasNS may be false
                $titleWhere = array();
+               $allRedirNs = array();
+               $allRedirDBkey = array();
                foreach ( $this->redirTitles as $t ) {
-                       $titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $t->getDBkey() ) .
-                                       ( $this->hasNS ? " AND {$this->bl_ns} = {$t->getNamespace()}" : '' );
+                       $redirNs = $t->getNamespace();
+                       $redirDBkey = $t->getDBkey();
+                       $titleWhere[] = "{$this->bl_title} = " . $db->addQuotes( $redirDBkey ) .
+                                       ( $this->hasNS ? " AND {$this->bl_ns} = {$redirNs}" : '' );
+                       $allRedirNs[] = $redirNs;
+                       $allRedirDBkey[] = $redirDBkey;
                }
                $this->addWhere( $db->makeList( $titleWhere, LIST_OR ) );
                $this->addWhereFld( 'page_namespace', $this->params['namespace'] );
 
                if ( !is_null( $this->redirID ) ) {
+                       $op = $this->params['dir'] == 'descending' ? '<' : '>';
                        $first = $this->redirTitles[0];
                        $title = $db->addQuotes( $first->getDBkey() );
                        $ns = $first->getNamespace();
                        $from = $this->redirID;
                        if ( $this->hasNS ) {
-                               $this->addWhere( "{$this->bl_ns} > $ns OR " .
+                               $this->addWhere( "{$this->bl_ns} $op $ns OR " .
                                                "({$this->bl_ns} = $ns AND " .
-                                               "({$this->bl_title} > $title OR " .
+                                               "({$this->bl_title} $op $title OR " .
                                                "({$this->bl_title} = $title AND " .
-                                               "{$this->bl_from} >= $from)))" );
+                                               "{$this->bl_from} $op= $from)))" );
                        } else {
-                               $this->addWhere( "{$this->bl_title} > $title OR " .
+                               $this->addWhere( "{$this->bl_title} $op $title OR " .
                                                "({$this->bl_title} = $title AND " .
-                                               "{$this->bl_from} >= $from)" );
+                                               "{$this->bl_from} $op= $from)" );
                        }
                }
                if ( $this->params['filterredir'] == 'redirects' ) {
@@ -217,7 +224,17 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                }
 
                $this->addOption( 'LIMIT', $this->params['limit'] + 1 );
-               $this->addOption( 'ORDER BY', $this->bl_sort );
+               $orderBy = array();
+               $sort = ( $this->params['dir'] == 'descending' ? ' DESC' : '' );
+               // Don't order by namespace/title if it's constant in the WHERE clause
+               if( $this->hasNS && count( array_unique( $allRedirNs ) ) != 1 ) {
+                       $orderBy[] = $this->bl_ns . $sort;
+               }
+               if( count( array_unique( $allRedirDBkey ) ) != 1 ) {
+                       $orderBy[] = $this->bl_title . $sort;
+               }
+               $orderBy[] = $this->bl_from . $sort;
+               $this->addOption( 'ORDER BY', $orderBy );
                $this->addOption( 'USE INDEX', array( 'page' => 'PRIMARY' ) );
        }
 
@@ -438,6 +455,13 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => 'namespace'
                        ),
+                       'dir' => array(\r
+                               ApiBase::PARAM_DFLT => 'ascending',\r
+                               ApiBase::PARAM_TYPE => array(\r
+                                       'ascending',\r
+                                       'descending'\r
+                               )\r
+                       ),
                        'filterredir' => array(
                                ApiBase::PARAM_DFLT => 'all',
                                ApiBase::PARAM_TYPE => array(
@@ -467,6 +491,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        'pageid' => "Pageid to search. Cannot be used together with {$this->bl_code}title",
                        'continue' => 'When more results are available, use this to continue',
                        'namespace' => 'The namespace to enumerate',
+                       'dir' => 'The direction in which to list',
                );
                if ( $this->getModuleName() != 'embeddedin' ) {
                        return array_merge( $retval, array(
index e5eca85..48a4a07 100644 (file)
@@ -25,7 +25,8 @@
  */
 
 /**
- * This query adds the <categories> subelement to all pages with the list of categories the page is in
+ * This query adds the "<categories>" subelement to all pages with the list of
+ * categories the page is in.
  *
  * @ingroup API
  */
index 06f649d..df5e303 100644 (file)
@@ -180,9 +180,10 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        if ( $params['unique'] ) {
                                $this->addOption( 'GROUP BY', 'ar_title' );
                        } else {
+                               $sort = ( $dir == 'newer' ? '' : ' DESC' );
                                $this->addOption( 'ORDER BY', array(
-                                       'ar_title',
-                                       'ar_timestamp'
+                                       'ar_title' . $sort,
+                                       'ar_timestamp' . $sort
                                ));
                        }
                } else {
index d2837e9..37f347d 100644 (file)
@@ -62,15 +62,16 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                        }
 
                        $db = $this->getDB();
+                       $op = $params['dir'] == 'descending' ? '<' : '>';
                        $prefix = $db->addQuotes( $cont[0] );
                        $title = $db->addQuotes( $this->titleToKey( $cont[1] ) );
                        $from = intval( $cont[2] );
                        $this->addWhere(
-                               "iwl_prefix > $prefix OR " .
+                               "iwl_prefix $op $prefix OR " .
                                "(iwl_prefix = $prefix AND " .
-                               "(iwl_title > $title OR " .
+                               "(iwl_title $op $title OR " .
                                "(iwl_title = $title AND " .
-                               "iwl_from >= $from)))"
+                               "iwl_from $op= $from)))"
                        );
                }
 
@@ -84,22 +85,23 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                $this->addFields( array( 'page_id', 'page_title', 'page_namespace', 'page_is_redirect',
                        'iwl_from', 'iwl_prefix', 'iwl_title' ) );
 
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                if ( isset( $params['prefix'] ) ) {
                        $this->addWhereFld( 'iwl_prefix', $params['prefix'] );
                        if ( isset( $params['title'] ) ) {
                                $this->addWhereFld( 'iwl_title', $params['title'] );
-                               $this->addOption( 'ORDER BY', 'iwl_from' );
+                               $this->addOption( 'ORDER BY', 'iwl_from' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                       'iwl_title',
-                                       'iwl_from'
+                                       'iwl_title' . $sort,
+                                       'iwl_from' . $sort
                                ));
                        }
                } else {
                        $this->addOption( 'ORDER BY', array(
-                               'iwl_prefix',
-                               'iwl_title',
-                               'iwl_from'
+                               'iwl_prefix' . $sort,
+                               'iwl_title' . $sort,
+                               'iwl_from' . $sort
                        ));
                }
 
@@ -178,6 +180,13 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                                        'iwtitle',
                                ),
                        ),
+                       'dir' => array(
+                               ApiBase::PARAM_DFLT => 'ascending',
+                               ApiBase::PARAM_TYPE => array(
+                                       'ascending',
+                                       'descending'
+                               )
+                       ),
                );
        }
 
@@ -192,6 +201,7 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
                                ' iwtitle        - Adds the title of the interwiki',
                        ),
                        'limit' => 'How many total pages to return',
+                       'dir' => 'The direction in which to list',
                );
        }
 
index 147ab67..3779123 100644 (file)
@@ -25,7 +25,8 @@
  */
 
 /**
- * This query adds an <images> subelement to all pages with the list of images embedded into those pages.
+ * This query adds an "<images>" subelement to all pages with the list of
+ * images embedded into those pages.
  *
  * @ingroup API
  */
index f423719..c7639ee 100644 (file)
@@ -62,15 +62,16 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                        }
 
                        $db = $this->getDB();
+                       $op = $params['dir'] == 'descending' ? '<' : '>';
                        $prefix = $db->addQuotes( $cont[0] );
                        $title = $db->addQuotes( $this->titleToKey( $cont[1] ) );
                        $from = intval( $cont[2] );
                        $this->addWhere(
-                               "ll_lang > $prefix OR " .
+                               "ll_lang $op $prefix OR " .
                                "(ll_lang = $prefix AND " .
-                               "(ll_title > $title OR " .
+                               "(ll_title $op $title OR " .
                                "(ll_title = $title AND " .
-                               "ll_from >= $from)))"
+                               "ll_from $op= $from)))"
                        );
                }
 
@@ -84,22 +85,23 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                $this->addFields( array( 'page_id', 'page_title', 'page_namespace', 'page_is_redirect',
                        'll_from', 'll_lang', 'll_title' ) );
 
+               $sort = ( $params['dir'] == 'descending' ? ' DESC' : '' );
                if ( isset( $params['lang'] ) ) {
                        $this->addWhereFld( 'll_lang', $params['lang'] );
                        if ( isset( $params['title'] ) ) {
                                $this->addWhereFld( 'll_title', $params['title'] );
-                               $this->addOption( 'ORDER BY', 'll_from' );
+                               $this->addOption( 'ORDER BY', 'll_from' . $sort );
                        } else {
                                $this->addOption( 'ORDER BY', array(
-                                       'll_title',
-                                       'll_from'
+                                       'll_title' . $sort,
+                                       'll_from' . $sort
                                ));
                        }
                } else {
                        $this->addOption( 'ORDER BY', array(
-                               'll_lang',
-                               'll_title',
-                               'll_from'
+                               'll_lang' . $sort,
+                               'll_title' . $sort,
+                               'll_from' . $sort
                        ));
                }
 
@@ -178,6 +180,13 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                                        'lltitle',
                                ),
                        ),
+                       'dir' => array(
+                               ApiBase::PARAM_DFLT => 'ascending',
+                               ApiBase::PARAM_TYPE => array(
+                                       'ascending',
+                                       'descending'
+                               )
+                       ),
                );
        }
 
@@ -192,6 +201,7 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
                                ' lltitle        - Adds the title of the language ink',
                        ),
                        'limit' => 'How many total pages to return',
+                       'dir' => 'The direction in which to list',
                );
        }
 
index e7102e0..511cbe4 100644 (file)
@@ -93,6 +93,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                case 'showhooks':
                                        $fit = $this->appendSubscribedHooks( $p );
                                        break;
+                               case 'variables':
+                                       $fit = $this->appendVariables( $p );
+                                       break;
                                default:
                                        ApiBase::dieDebug( __METHOD__, "Unknown prop=$p" );
                        }
@@ -121,9 +124,14 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['dbtype'] = $GLOBALS['wgDBtype'];
                $data['dbversion'] = $this->getDB()->getServerVersion();
 
-               $svn = SpecialVersion::getSvnRevision( $GLOBALS['IP'] );
-               if ( $svn ) {
-                       $data['rev'] = $svn;
+               $git = SpecialVersion::getGitHeadSha1( $GLOBALS['IP'] );
+               if ( $git ) {
+                       $data['git-hash'] = $git;
+               } else {
+                       $svn = SpecialVersion::getSvnRevision( $GLOBALS['IP'] );
+                       if ( $svn ) {
+                               $data['rev'] = $svn;
+                       }
                }
 
                // 'case-insensitive' option is reserved for future
@@ -249,8 +257,9 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        protected function appendSpecialPageAliases( $property ) {
                global $wgContLang;
                $data = array();
-               foreach ( $wgContLang->getSpecialPageAliases() as $specialpage => $aliases ) {
-                       $arr = array( 'realname' => $specialpage, 'aliases' => $aliases );
+               $aliases = $wgContLang->getSpecialPageAliases();
+               foreach ( SpecialPageFactory::getList() as $specialpage => $stuff ) {
+                       $arr = array( 'realname' => $specialpage, 'aliases' => $aliases[$specialpage] );
                        $this->getResult()->setIndexedTagName( $arr['aliases'], 'alias' );
                        $data[] = $arr;
                }
@@ -527,6 +536,12 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                return $this->getResult()->addValue( 'query', $property, $hooks );
        }
 
+       public function appendVariables( $property ) {
+               $variables = MagicWord::getVariableIDs();
+               $this->getResult()->setIndexedTagName( $variables, 'v' );
+               return $this->getResult()->addValue( 'query', $property, $variables );
+       }
+
        private function formatParserTags( $item ) {
                return "<{$item}>";
        }
@@ -578,6 +593,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                        'extensiontags',
                                        'functionhooks',
                                        'showhooks',
+                                       'variables',
                                )
                        ),
                        'filteriw' => array(
@@ -613,7 +629,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                                ' skins                 - Returns a list of all enabled skins',
                                ' extensiontags         - Returns a list of parser extension tags',
                                ' functionhooks         - Returns a list of parser function hooks',
-                               ' showhooks             - Returns a list of all subscribed hooks (contents of $wgHooks)'
+                               ' showhooks             - Returns a list of all subscribed hooks (contents of $wgHooks)',
+                               ' variables             - Returns a list of variable IDs',
                        ),
                        'filteriw' =>  'Return only local or only nonlocal entries of the interwiki map',
                        'showalldb' => 'List all database servers, not just the one lagging the most',
index 798b227..7d01fa0 100644 (file)
@@ -165,7 +165,7 @@ class ApiResult extends ApiBase {
         * @param $value Mixed
         * @param $subElemName string when present, content element is created
         *  as a sub item of $arr. Use this parameter to create elements in
-        *  format <elem>text</elem> without attributes
+        *  format "<elem>text</elem>" without attributes.
         */
        public static function setContent( &$arr, $value, $subElemName = null ) {
                if ( is_array( $value ) ) {
index db1ee16..aaa4c85 100644 (file)
@@ -687,6 +687,8 @@ class ApiUpload extends ApiBase {
                                array( 'code' => 'stashfailed', 'info' => 'Stashing temporary file failed' ),
                                array( 'code' => 'internal-error', 'info' => 'An internal error occurred' ),
                                array( 'code' => 'asynccopyuploaddisabled', 'info' => 'Asynchronous copy uploads disabled' ),
+                               array( 'fileexists-forbidden' ),
+                               array( 'fileexists-shared-forbidden' ),
                        )
                );
        }
diff --git a/includes/cache/ProcessCacheLRU.php b/includes/cache/ProcessCacheLRU.php
new file mode 100644 (file)
index 0000000..a9bcd9b
--- /dev/null
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Per-process memory cache for storing items.
+ *
+ * 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
+ */
+
+/**
+ * Handles per process caching of items
+ * @ingroup Cache
+ */
+class ProcessCacheLRU {
+       /** @var Array */
+       protected $cache = array(); // (key => prop => value)
+
+       protected $maxCacheKeys; // integer; max entries
+
+       /**
+        * @param $maxEntries integer Maximum number of entries allowed (min 1).
+        * @throws MWException When $maxCacheKeys is not an int or =< 0.
+        */
+       public function __construct( $maxKeys ) {
+               if ( !is_int( $maxKeys ) || $maxKeys < 1 ) {
+                       throw new MWException( __METHOD__ . " must be given an integer and >= 1" );
+               }
+               $this->maxCacheKeys = $maxKeys;
+       }
+
+       /**
+        * Set a property field for a cache entry.
+        * This will prune the cache if it gets too large.
+        * If the item is already set, it will be pushed to the top of the cache.
+        *
+        * @param $key string
+        * @param $prop string
+        * @param $value mixed
+        * @return void
+        */
+       public function set( $key, $prop, $value ) {
+               if ( isset( $this->cache[$key] ) ) {
+                       $this->ping( $key ); // push to top
+               } elseif ( count( $this->cache ) >= $this->maxCacheKeys ) {
+                       reset( $this->cache );
+                       unset( $this->cache[key( $this->cache )] );
+               }
+               $this->cache[$key][$prop] = $value;
+       }
+
+       /**
+        * Check if a property field exists for a cache entry.
+        *
+        * @param $key string
+        * @param $prop string
+        * @return bool
+        */
+       public function has( $key, $prop ) {
+               return isset( $this->cache[$key][$prop] );
+       }
+
+       /**
+        * Get a property field for a cache entry.
+        * This returns null if the property is not set.
+        * If the item is already set, it will be pushed to the top of the cache.
+        *
+        * @param $key string
+        * @param $prop string
+        * @return mixed
+        */
+       public function get( $key, $prop ) {
+               if ( isset( $this->cache[$key][$prop] ) ) {
+                       $this->ping( $key ); // push to top
+                       return $this->cache[$key][$prop];
+               } else {
+                       return null;
+               }
+       }
+
+       /**
+        * Clear one or several cache entries, or all cache entries
+        *
+        * @param $keys string|Array
+        * @return void
+        */
+       public function clear( $keys = null ) {
+               if ( $keys === null ) {
+                       $this->cache = array();
+               } else {
+                       foreach ( (array)$keys as $key ) {
+                               unset( $this->cache[$key] );
+                       }
+               }
+       }
+
+       /**
+        * Push an entry to the top of the cache
+        *
+        * @param $key string
+        */
+       protected function ping( $key ) {
+               $item = $this->cache[$key];
+               unset( $this->cache[$key] );
+               $this->cache[$key] = $item;
+       }
+}
index e8e57cd..423e388 100644 (file)
 class SquidUpdate {
        var $urlArr, $mMaxTitles;
 
-       function __construct( $urlArr = Array(), $maxTitles = false ) {
+       /**
+        * @param $urlArr array
+        * @param $maxTitles bool|int
+        */
+       function __construct( $urlArr = array(), $maxTitles = false ) {
                global $wgMaxSquidPurgeTitles;
                if ( $maxTitles === false ) {
                        $this->mMaxTitles = $wgMaxSquidPurgeTitles;
@@ -121,11 +125,6 @@ class SquidUpdate {
        static function purge( $urlArr ) {
                global $wgSquidServers, $wgHTCPMulticastRouting;
 
-               /*if ( (@$wgSquidServers[0]) == 'echo' ) {
-                       echo implode("<br />\n", $urlArr) . "<br />\n";
-                       return;
-               }*/
-
                if( !$urlArr ) {
                        return;
                }
index 0a1f988..a3faebf 100644 (file)
@@ -1873,7 +1873,7 @@ abstract class DatabaseBase implements DatabaseType {
         * The keys on each level may be either integers or strings.
         *
         * @param $data Array: organized as 2-d
-        *              array(baseKeyVal => array(subKeyVal => <ignored>, ...), ...)
+        *              array(baseKeyVal => array(subKeyVal => [ignored], ...), ...)
         * @param $baseKey String: field name to match the base-level keys to (eg 'pl_namespace')
         * @param $subKey String: field name to match the sub-level keys to (eg 'pl_title')
         * @return Mixed: string SQL fragment, or false if no items in array.
index eacebcf..c846788 100644 (file)
@@ -242,7 +242,11 @@ class FakeResultWrapper extends ResultWrapper {
                        $this->currentRow = false;
                }
                $this->pos++;
-               return $this->currentRow;
+               if ( is_object( $this->currentRow ) ) {
+                       return get_object_vars( $this->currentRow );
+               } else {
+                       return $this->currentRow;
+               }
        }
 
        function seek( $row ) {
index 8fa7220..684f4b4 100644 (file)
@@ -410,7 +410,7 @@ interface IORMTable {
         *
         * @return IORMRow
         */
-       public function newFromDBResult( stdClass $result );
+       public function newRowFromDBResult( stdClass $result );
 
        /**
         * Get a new instance of the class from an array.
@@ -422,7 +422,7 @@ interface IORMTable {
         *
         * @return IORMRow
         */
-       public function newFromArray( array $data, $loadDefaults = false );
+       public function newRow( array $data, $loadDefaults = false );
 
        /**
         * Return the names of the fields.
index 1342b02..3f2d803 100644 (file)
@@ -67,7 +67,7 @@ class ORMResult implements ORMIterator {
                if ( $row === false ) {
                        $this->current = false;
                } else {
-                       $this->current = $this->table->newFromDBResult( $row );
+                       $this->current = $this->table->newRowFromDBResult( $row );
                }
        }
 
index b6e2d52..130fdf9 100644 (file)
@@ -117,7 +117,7 @@ abstract class ORMTable implements IORMTable {
                $objects = array();
 
                foreach ( $result as $record ) {
-                       $objects[] = $this->newFromArray( $record );
+                       $objects[] = $this->newRow( $record );
                }
 
                return $objects;
@@ -618,8 +618,9 @@ abstract class ORMTable implements IORMTable {
        }
 
        /**
-        * Get a new instance of the class from a database result.
+        * @see ORMTable::newRowFromFromDBResult
         *
+        * @deprecated use newRowFromFromDBResult instead
         * @since 1.20
         *
         * @param stdClass $result
@@ -627,12 +628,26 @@ abstract class ORMTable implements IORMTable {
         * @return IORMRow
         */
        public function newFromDBResult( stdClass $result ) {
-               return $this->newFromArray( $this->getFieldsFromDBResult( $result ) );
+               return self::newRowFromDBResult( $result );
        }
 
        /**
-        * Get a new instance of the class from an array.
+        * Get a new instance of the class from a database result.
+        *
+        * @since 1.20
+        *
+        * @param stdClass $result
+        *
+        * @return IORMRow
+        */
+       public function newRowFromDBResult( stdClass $result ) {
+               return $this->newRow( $this->getFieldsFromDBResult( $result ) );
+       }
+
+       /**
+        * @see ORMTable::newRow
         *
+        * @deprecated use newRow instead
         * @since 1.20
         *
         * @param array $data
@@ -641,6 +656,20 @@ abstract class ORMTable implements IORMTable {
         * @return IORMRow
         */
        public function newFromArray( array $data, $loadDefaults = false ) {
+               return static::newRow( $data, $loadDefaults );
+       }
+
+       /**
+        * Get a new instance of the class from an array.
+        *
+        * @since 1.20
+        *
+        * @param array $data
+        * @param boolean $loadDefaults
+        *
+        * @return IORMRow
+        */
+       public function newRow( array $data, $loadDefaults = false ) {
                $class = $this->getRowClass();
                return new $class( $this, $data, $loadDefaults );
        }
index eb3a319..08154c7 100644 (file)
@@ -278,7 +278,7 @@ class DifferenceEngine extends ContextSource {
                        if ( $samePage && $this->mNewPage->quickUserCan( 'edit', $user ) ) {
                                if ( $this->mNewRev->isCurrent() && $this->mNewPage->userCan( 'rollback', $user ) ) {
                                        $out->preventClickjacking();
-                                       $rollback = '&#160;&#160;&#160;' . Linker::generateRollback( $this->mNewRev );
+                                       $rollback = '&#160;&#160;&#160;' . Linker::generateRollback( $this->mNewRev, $this->getContext() );
                                }
                                if ( !$this->mOldRev->isDeleted( Revision::DELETED_TEXT ) && !$this->mNewRev->isDeleted( Revision::DELETED_TEXT ) ) {
                                        $undoLink = ' ' . $this->msg( 'parentheses' )->rawParams(
index d4eef87..3d2ccf4 100644 (file)
@@ -164,18 +164,6 @@ class FileRepo {
                return $status;
        }
 
-       /**
-        * Take all available measures to prevent web accessibility of new deleted
-        * directories, in case the user has not configured offline storage
-        *
-        * @param $dir string
-        * @return void
-        */
-       protected function initDeletedDir( $dir ) {
-               $this->backend->secure( // prevent web access & dir listings
-                       array( 'dir' => $dir, 'noAccess' => true, 'noListing' => true ) );
-       }
-
        /**
         * Determine if a string is an mwrepo:// URL
         *
@@ -726,14 +714,10 @@ class FileRepo {
                        $dstPath = "$root/$dstRel";
                        $dstDir  = dirname( $dstPath );
                        // Create destination directories for this triplet
-                       if ( !$backend->prepare( array( 'dir' => $dstDir ) )->isOK() ) {
+                       if ( !$this->initDirectory( $dstDir )->isOK() ) {
                                return $this->newFatal( 'directorycreateerror', $dstDir );
                        }
 
-                       if ( $dstZone == 'deleted' ) {
-                               $this->initDeletedDir( $dstDir );
-                       }
-
                        // Resolve source to a storage path if virtual
                        $srcPath = $this->resolveToStoragePath( $srcPath );
 
@@ -863,12 +847,13 @@ class FileRepo {
                $operations = array();
                foreach ( $pairs as $pair ) {
                        list ( $src, $dst ) = $pair;
+                       $dst = $this->resolveToStoragePath( $dst );
                        $operations[] = array(
                                'op'        => 'store',
                                'src'       => $src,
-                               'dst'       => $this->resolveToStoragePath( $dst )
+                               'dst'       => $dst
                        );
-                       $this->backend->prepare( array( 'dir' => dirname( $dst ) ) );
+                       $status->merge( $this->initDirectory( dirname( $dst ) ) );
                }
                $status->merge( $this->backend->doQuickOperations( $operations ) );
 
@@ -1058,10 +1043,10 @@ class FileRepo {
                        $dstDir = dirname( $dstPath );
                        $archiveDir = dirname( $archivePath );
                        // Abort immediately on directory creation errors since they're likely to be repetitive
-                       if ( !$backend->prepare( array( 'dir' => $dstDir ) )->isOK() ) {
+                       if ( !$this->initDirectory( $dstDir )->isOK() ) {
                                return $this->newFatal( 'directorycreateerror', $dstDir );
                        }
-                       if ( !$backend->prepare( array( 'dir' => $archiveDir ) )->isOK() ) {
+                       if ( !$this->initDirectory($archiveDir )->isOK() ) {
                                return $this->newFatal( 'directorycreateerror', $archiveDir );
                        }
 
@@ -1126,6 +1111,27 @@ class FileRepo {
                return $status;
        }
 
+       /**
+        * Creates a directory with the appropriate zone permissions.
+        * Callers are responsible for doing read-only and "writable repo" checks.
+        *
+        * @param $dir string Virtual URL (or storage path) of directory to clean
+        * @return Status
+        */
+       protected function initDirectory( $dir ) {
+               $path = $this->resolveToStoragePath( $dir );
+               list( $b, $container, $r ) = FileBackend::splitStoragePath( $path );
+
+               $params = array( 'dir' => $path );
+               if ( $container === $this->zones['deleted']['container'] ) {
+                       # Take all available measures to prevent web accessibility of new deleted
+                       # directories, in case the user has not configured offline storage
+                       $params = array( 'noAccess' => true, 'noListing' => true ) + $params;
+               }
+
+               return $this->backend->prepare( $params );
+       }
+
        /**
         * Deletes a directory if empty.
         *
@@ -1231,10 +1237,9 @@ class FileRepo {
                        $archiveDir = dirname( $archivePath ); // does not touch FS
 
                        // Create destination directories
-                       if ( !$backend->prepare( array( 'dir' => $archiveDir ) )->isOK() ) {
+                       if ( !$this->initDirectory( $archiveDir )->isOK() ) {
                                return $this->newFatal( 'directorycreateerror', $archiveDir );
                        }
-                       $this->initDeletedDir( $archiveDir );
 
                        $operations[] = array(
                                'op'            => 'move',
index c616e16..dd0c947 100644 (file)
@@ -235,7 +235,8 @@ class LocalRepo extends FileRepo {
                        'image',
                        LocalFile::selectFields(),
                        array( 'img_sha1' => $hash ),
-                       __METHOD__
+                       __METHOD__,
+                       array( 'ORDER BY' => 'img_name' )
                );
                
                $result = array();
index 709655a..6b31b7e 100644 (file)
@@ -259,6 +259,7 @@ class RepoGroup {
                foreach ( $this->foreignRepos as $repo ) {
                        $result = array_merge( $result, $repo->findBySha1( $hash ) );
                }
+               usort( $result, 'File::compare' );
                return $result;
        }
 
index 8157916..4c861e4 100644 (file)
@@ -474,13 +474,18 @@ class FSFileBackend extends FileBackendStore {
                list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
                $contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
+               $existed = is_dir( $dir ); // already there?
                if ( !wfMkdirParents( $dir ) ) { // make directory and its parents
-                       $status->fatal( 'directorycreateerror', $params['dir'] );
+                       $status->fatal( 'directorycreateerror', $params['dir'] ); // fails on races
                } elseif ( !is_writable( $dir ) ) {
                        $status->fatal( 'directoryreadonlyerror', $params['dir'] );
                } elseif ( !is_readable( $dir ) ) {
                        $status->fatal( 'directorynotreadableerror', $params['dir'] );
                }
+               if ( is_dir( $dir ) && !$existed ) {
+                       // Respect any 'noAccess' or 'noListing' flags...
+                       $status->merge( $this->doSecureInternal( $fullCont, $dirRel, $params ) );
+               }
                return $status;
        }
 
@@ -495,21 +500,48 @@ class FSFileBackend extends FileBackendStore {
                $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
                // Seed new directories with a blank index.html, to prevent crawling...
                if ( !empty( $params['noListing'] ) && !file_exists( "{$dir}/index.html" ) ) {
-                       $bytes = file_put_contents( "{$dir}/index.html", '' );
-                       if ( !$bytes ) {
+                       $bytes = file_put_contents( "{$dir}/index.html", $this->indexHtmlPrivate() );
+                       if ( $bytes === false ) {
                                $status->fatal( 'backend-fail-create', $params['dir'] . '/index.html' );
                                return $status;
                        }
                }
                // Add a .htaccess file to the root of the container...
-               if ( !empty( $params['noAccess'] ) ) {
-                       if ( !file_exists( "{$contRoot}/.htaccess" ) ) {
-                               $bytes = file_put_contents( "{$contRoot}/.htaccess", "Deny from all\n" );
-                               if ( !$bytes ) {
-                                       $storeDir = "mwstore://{$this->name}/{$shortCont}";
-                                       $status->fatal( 'backend-fail-create', "{$storeDir}/.htaccess" );
-                                       return $status;
-                               }
+               if ( !empty( $params['noAccess'] ) && !file_exists( "{$contRoot}/.htaccess" ) ) {
+                       $bytes = file_put_contents( "{$contRoot}/.htaccess", $this->htaccessPrivate() );
+                       if ( $bytes === false ) {
+                               $storeDir = "mwstore://{$this->name}/{$shortCont}";
+                               $status->fatal( 'backend-fail-create', "{$storeDir}/.htaccess" );
+                               return $status;
+                       }
+               }
+               return $status;
+       }
+
+       /**
+        * @see FileBackendStore::doPublishInternal()
+        * @return Status
+        */
+       protected function doPublishInternal( $fullCont, $dirRel, array $params ) {
+               $status = Status::newGood();
+               list( $b, $shortCont, $r ) = FileBackend::splitStoragePath( $params['dir'] );
+               $contRoot = $this->containerFSRoot( $shortCont, $fullCont ); // must be valid
+               $dir = ( $dirRel != '' ) ? "{$contRoot}/{$dirRel}" : $contRoot;
+               // Unseed new directories with a blank index.html, to allow crawling...
+               if ( !empty( $params['listing'] ) && is_file( "{$dir}/index.html" ) ) {
+                       $exists = ( file_get_contents( "{$dir}/index.html" ) === $this->indexHtmlPrivate() );
+                       if ( $exists && !unlink( "{$dir}/index.html" ) ) { // reverse secure()
+                               $status->fatal( 'backend-fail-delete', $params['dir'] . '/index.html' );
+                               return $status;
+                       }
+               }
+               // Remove the .htaccess file from the root of the container...
+               if ( !empty( $params['access'] ) && is_file( "{$contRoot}/.htaccess" ) ) {
+                       $exists = ( file_get_contents( "{$contRoot}/.htaccess" ) === $this->htaccessPrivate() );
+                       if ( $exists && !unlink( "{$contRoot}/.htaccess" ) ) { // reverse secure()
+                               $storeDir = "mwstore://{$this->name}/{$shortCont}";
+                               $status->fatal( 'backend-fail-delete', "{$storeDir}/.htaccess" );
+                               return $status;
                        }
                }
                return $status;
@@ -716,6 +748,24 @@ class FSFileBackend extends FileBackendStore {
                return $ok;
        }
 
+       /**
+        * Return the text of an index.html file to hide directory listings
+        *
+        * @return string
+        */
+       protected function indexHtmlPrivate() {
+               return '';
+       }
+
+       /**
+        * Return the text of a .htaccess file to make a directory private
+        *
+        * @return string
+        */
+       protected function htaccessPrivate() {
+               return "Deny from all\n";
+       }
+
        /**
         * Clean up directory separators for the given OS
         *
index 3cc9021..9cf8f94 100644 (file)
@@ -37,8 +37,9 @@
  * Outside callers can assume that all backends will have these functions.
  *
  * All "storage paths" are of the format "mwstore://<backend>/<container>/<path>".
- * The <path> portion is a relative path that uses UNIX file system (FS) notation,
- * though any particular backend may not actually be using a local filesystem.
+ * The "<path>" portion is a relative path that uses UNIX file system (FS)
+ * notation, though any particular backend may not actually be using a local
+ * filesystem.
  * Therefore, the relative paths are only virtual.
  *
  * Backend contents are stored under wiki-specific container names by default.
@@ -153,16 +154,27 @@ abstract class FileBackend {
         * $ops is an array of arrays. The outer array holds a list of operations.
         * Each inner array is a set of key value pairs that specify an operation.
         *
-        * Supported operations and their parameters:
+        * Supported operations and their parameters. The supported actions are:
+        *  - create
+        *  - store
+        *  - copy
+        *  - move
+        *  - delete
+        *  - null
+        *
         * a) Create a new file in storage with the contents of a string
+        * @code
         *     array(
         *         'op'                  => 'create',
         *         'dst'                 => <storage path>,
         *         'content'             => <string of new file contents>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>
-        *     )
+        *     );
+        * @endcode
+        *
         * b) Copy a file system file into storage
+        * @code
         *     array(
         *         'op'                  => 'store',
         *         'src'                 => <file system path>,
@@ -170,7 +182,10 @@ abstract class FileBackend {
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>
         *     )
+        * @endcode
+        *
         * c) Copy a file within storage
+        * @code
         *     array(
         *         'op'                  => 'copy',
         *         'src'                 => <storage path>,
@@ -178,7 +193,10 @@ abstract class FileBackend {
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>
         *     )
+        * @endcode
+        *
         * d) Move a file within storage
+        * @code
         *     array(
         *         'op'                  => 'move',
         *         'src'                 => <storage path>,
@@ -186,16 +204,23 @@ abstract class FileBackend {
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>
         *     )
+        * @endcode
+        *
         * e) Delete a file within storage
+        * @code
         *     array(
         *         'op'                  => 'delete',
         *         'src'                 => <storage path>,
         *         'ignoreMissingSource' => <boolean>
         *     )
+        * @endcode
+        *
         * f) Do nothing (no-op)
+        * @code
         *     array(
         *         'op'                  => 'null',
         *     )
+        * @endcode
         *
         * Boolean flags for operations (operation-specific):
         * 'ignoreMissingSource' : The operation will simply succeed and do
@@ -219,15 +244,18 @@ abstract class FileBackend {
         *                         This limits the ability of recovery scripts.
         * 'parallelize'         : Try to do operations in parallel when possible.
         *
-        * Remarks on locking:
+        * @remarks Remarks on locking:
         * File system paths given to operations should refer to files that are
         * already locked or otherwise safe from modification from other processes.
         * Normally these files will be new temp files, which should be adequate.
         *
-        * Return value:
+        * @par Return value:
+        *
         * This returns a Status, which contains all warnings and fatals that occured
         * during the operation. The 'failCount', 'successCount', and 'success' members
-        * will reflect each operation attempted. The status will be "OK" unless:
+        * will reflect each operation attempted.
+        *
+        * The status will be "OK" unless:
         *     a) unexpected operation errors occurred (network partitions, disk full...)
         *     b) significant operation errors occured and 'force' was not set
         *
@@ -354,46 +382,64 @@ abstract class FileBackend {
         * This should *only* be used on non-original files, like cache files.
         *
         * Supported operations and their parameters:
+        *  - create
+        *  - store
+        *  - copy
+        *  - move
+        *  - delete
+        *  - null
         * a) Create a new file in storage with the contents of a string
+        * @code
         *     array(
         *         'op'                  => 'create',
         *         'dst'                 => <storage path>,
         *         'content'             => <string of new file contents>
         *     )
+        * @endcode
         * b) Copy a file system file into storage
+        * @code
         *     array(
         *         'op'                  => 'store',
         *         'src'                 => <file system path>,
         *         'dst'                 => <storage path>
         *     )
+        * @endcode
         * c) Copy a file within storage
+        * @code
         *     array(
         *         'op'                  => 'copy',
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>
         *     )
+        * @endcode
         * d) Move a file within storage
+        * @code
         *     array(
         *         'op'                  => 'move',
         *         'src'                 => <storage path>,
         *         'dst'                 => <storage path>
         *     )
+        * @endcode
         * e) Delete a file within storage
+        * @code
         *     array(
         *         'op'                  => 'delete',
         *         'src'                 => <storage path>,
         *         'ignoreMissingSource' => <boolean>
         *     )
+        * @endcode
         * f) Do nothing (no-op)
+        * @code
         *     array(
         *         'op'                  => 'null',
         *     )
+        * @endcode
         *
-        * Boolean flags for operations (operation-specific):
+        * @par Boolean flags for operations (operation-specific):
         * 'ignoreMissingSource' : The operation will simply succeed and do
         *                         nothing if the source file does not exist.
         *
-        * Return value:
+        * @par Return value:
         * This returns a Status, which contains all warnings and fatals that occured
         * during the operation. The 'failCount', 'successCount', and 'success' members
         * will reflect each operation attempted for the given files. The status will be
@@ -508,11 +554,11 @@ abstract class FileBackend {
         * The target path should refer to a file that is already locked or
         * otherwise safe from modification from other processes. Normally,
         * the file will be a new temp file, which should be adequate.
-        * $params include:
-        *     srcs : ordered source storage paths (e.g. chunk1, chunk2, ...)
-        *     dst  : file system path to 0-byte temp file
         *
         * @param $params Array Operation parameters
+        * $params include:
+        *   - srcs : ordered source storage paths (e.g. chunk1, chunk2, ...)
+        *   - dst  : file system path to 0-byte temp file
         * @return Status
         */
        abstract public function concatenate( array $params );
@@ -522,8 +568,14 @@ abstract class FileBackend {
         * This will create any required containers and parent directories.
         * Backends using key/value stores only need to create the container.
         *
+        * The 'noAccess' and 'noListing' parameters works the same as in secure(),
+        * except they are only applied *if* the directory/container had to be created.
+        * These flags should always be set for directories that have private files.
+        *
         * $params include:
-        *     dir : storage directory
+        *     dir       : storage directory
+        *     noAccess  : try to deny file access (@since 1.20)
+        *     noListing : try to deny file listing (@since 1.20)
         *
         * @param $params Array
         * @return Status
@@ -543,27 +595,22 @@ abstract class FileBackend {
        /**
         * Take measures to block web access to a storage directory and
         * the container it belongs to. FS backends might add .htaccess
-        * files whereas key/value store backends might restrict container
-        * access to the auth user that represents end-users in web request.
+        * files whereas key/value store backends might revoke container
+        * access to the storage user representing end-users in web requests.
         * This is not guaranteed to actually do anything.
         *
-        * $params include:
-        *     dir       : storage directory
-        *     noAccess  : try to deny file access
-        *     noListing : try to deny file listing
-        *
         * @param $params Array
+        * $params include:
+        *   - dir       : storage directory
+        *   - noAccess  : try to deny file access
+        *   - noListing : try to deny file listing
         * @return Status
         */
        final public function secure( array $params ) {
                if ( $this->isReadOnly() ) {
                        return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
                }
-               $status = $this->doPrepare( $params ); // dir must exist to restrict it
-               if ( $status->isOK() ) {
-                       $status->merge( $this->doSecure( $params ) );
-               }
-               return $status;
+               return $this->doSecure( $params );
        }
 
        /**
@@ -571,16 +618,43 @@ abstract class FileBackend {
         */
        abstract protected function doSecure( array $params );
 
+       /**
+        * Remove measures to block web access to a storage directory and
+        * the container it belongs to. FS backends might remove .htaccess
+        * files whereas key/value store backends might grant container
+        * access to the storage user representing end-users in web requests.
+        * This essentially can undo the result of secure() calls.
+        *
+        * $params include:
+        *     dir     : storage directory
+        *     access  : try to allow file access
+        *     listing : try to allow file listing
+        *
+        * @param $params Array
+        * @return Status
+        * @since 1.20
+        */
+       final public function publish( array $params ) {
+               if ( $this->isReadOnly() ) {
+                       return Status::newFatal( 'backend-fail-readonly', $this->name, $this->readOnly );
+               }
+               return $this->doPublish( $params );
+       }
+
+       /**
+        * @see FileBackend::publish()
+        */
+       abstract protected function doPublish( array $params );
+
        /**
         * Delete a storage directory if it is empty.
         * Backends using key/value stores may do nothing unless the directory
         * is that of an empty container, in which case it should be deleted.
         *
+        * @param $params Array
         * $params include:
         *     dir       : storage directory
         *     recursive : recursively delete empty subdirectories first (@since 1.20)
-        *
-        * @param $params Array
         * @return Status
         */
        final public function clean( array $params ) {
@@ -599,11 +673,10 @@ abstract class FileBackend {
         * Check if a file exists at a storage path in the backend.
         * This returns false if only a directory exists at the path.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return bool|null Returns null on failure
         */
        abstract public function fileExists( array $params );
@@ -611,11 +684,10 @@ abstract class FileBackend {
        /**
         * Get the last-modified timestamp of the file at a storage path.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return string|bool TS_MW timestamp or false on failure
         */
        abstract public function getFileTimestamp( array $params );
@@ -624,11 +696,10 @@ abstract class FileBackend {
         * Get the contents of a file at a storage path in the backend.
         * This should be avoided for potentially large files.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return string|bool Returns false on failure
         */
        abstract public function getFileContents( array $params );
@@ -636,11 +707,10 @@ abstract class FileBackend {
        /**
         * Get the size (bytes) of a file at a storage path in the backend.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return integer|bool Returns false on failure
         */
        abstract public function getFileSize( array $params );
@@ -653,11 +723,10 @@ abstract class FileBackend {
         *     size   : the file size (bytes)
         * Additional values may be included for internal use only.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return Array|bool|null Returns null on failure
         */
        abstract public function getFileStat( array $params );
@@ -665,11 +734,10 @@ abstract class FileBackend {
        /**
         * Get a SHA-1 hash of the file at a storage path in the backend.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return string|bool Hash string or false on failure
         */
        abstract public function getFileSha1Base36( array $params );
@@ -678,11 +746,10 @@ abstract class FileBackend {
         * Get the properties of the file at a storage path in the backend.
         * Returns FSFile::placeholderProps() on failure.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return Array
         */
        abstract public function getFileProps( array $params );
@@ -694,12 +761,11 @@ abstract class FileBackend {
         * must be sent if streaming began, while none should be sent otherwise.
         * Implementations should flush the output buffer before sending data.
         *
+        * @param $params Array
         * $params include:
         *     src     : source storage path
         *     headers : additional HTTP headers to send on success
         *     latest  : use the latest available data
-        *
-        * @param $params Array
         * @return Status
         */
        abstract public function streamFile( array $params );
@@ -717,11 +783,10 @@ abstract class FileBackend {
         * In that later case, there are copies of the file that must stay in sync.
         * Additionally, further calls to this function may return the same file.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return FSFile|null Returns null on failure
         */
        abstract public function getLocalReference( array $params );
@@ -731,11 +796,10 @@ abstract class FileBackend {
         * The temporary copy will have the same file extension as the source.
         * Temporary files may be purged when the file object falls out of scope.
         *
+        * @param $params Array
         * $params include:
         *     src    : source storage path
         *     latest : use the latest available data
-        *
-        * @param $params Array
         * @return TempFSFile|null Returns null on failure
         */
        abstract public function getLocalCopy( array $params );
@@ -747,10 +811,9 @@ abstract class FileBackend {
         *
         * Storage backends with eventual consistency might return stale data.
         *
+        * @param $params array
         * $params include:
         *     dir : storage directory
-        *
-        * @param $params array
         * @return bool|null Returns null on failure
         * @since 1.20
         */
@@ -766,11 +829,10 @@ abstract class FileBackend {
         *
         * Storage backends with eventual consistency might return stale data.
         *
+        * @param $params array
         * $params include:
         *     dir     : storage directory
         *     topOnly : only return direct child dirs of the directory
-        *
-        * @param $params array
         * @return Traversable|Array|null Returns null on failure
         * @since 1.20
         */
@@ -782,10 +844,9 @@ abstract class FileBackend {
         *
         * Storage backends with eventual consistency might return stale data.
         *
+        * @param $params array
         * $params include:
         *     dir : storage directory
-        *
-        * @param $params array
         * @return Traversable|Array|null Returns null on failure
         * @since 1.20
         */
@@ -803,11 +864,10 @@ abstract class FileBackend {
         *
         * Storage backends with eventual consistency might return stale data.
         *
+        * @param $params array
         * $params include:
         *     dir     : storage directory
         *     topOnly : only return direct child files of the directory (@since 1.20)
-        *
-        * @param $params array
         * @return Traversable|Array|null Returns null on failure
         */
        abstract public function getFileList( array $params );
@@ -818,10 +878,9 @@ abstract class FileBackend {
         *
         * Storage backends with eventual consistency might return stale data.
         *
+        * @param $params array
         * $params include:
         *     dir : storage directory
-        *
-        * @param $params array
         * @return Traversable|Array|null Returns null on failure
         * @since 1.20
         */
index efc6053..2fc9d8e 100644 (file)
@@ -343,6 +343,20 @@ class FileBackendMultiWrite extends FileBackend {
                return $status;
        }
 
+       /**
+        * @see FileBackend::doPublish()
+        * @param $params array
+        * @return Status
+        */
+       protected function doPublish( array $params ) {
+               $status = Status::newGood();
+               foreach ( $this->backends as $backend ) {
+                       $realParams = $this->substOpPaths( $params, $backend );
+                       $status->merge( $backend->doPublish( $realParams ) );
+               }
+               return $status;
+       }
+
        /**
         * @see FileBackend::doClean()
         * @param $params array
index f2860f3..49bb039 100644 (file)
 abstract class FileBackendStore extends FileBackend {
        /** @var BagOStuff */
        protected $memCache;
-
-       /** @var Array Map of paths to small (RAM/disk) cache items */
-       protected $cache = array(); // (storage path => key => value)
-       protected $maxCacheSize = 300; // integer; max paths with entries
-       /** @var Array Map of paths to large (RAM/disk) cache items */
-       protected $expensiveCache = array(); // (storage path => key => value)
-       protected $maxExpensiveCacheSize = 5; // integer; max paths with entries
+       /** @var ProcessCacheLRU */
+       protected $cheapCache; // Map of paths to small (RAM/disk) cache items
+       /** @var ProcessCacheLRU */
+       protected $expensiveCache; // Map of paths to large (RAM/disk) cache items
 
        /** @var Array Map of container names to sharding settings */
        protected $shardViaHashLevels = array(); // (container name => config array)
@@ -58,7 +55,9 @@ abstract class FileBackendStore extends FileBackend {
         */
        public function __construct( array $config ) {
                parent::__construct( $config );
-               $this->memCache = new EmptyBagOStuff(); // disabled by default
+               $this->memCache       = new EmptyBagOStuff(); // disabled by default
+               $this->cheapCache     = new ProcessCacheLRU( 300 );
+               $this->expensiveCache = new ProcessCacheLRU( 5 );
        }
 
        /**
@@ -426,6 +425,46 @@ abstract class FileBackendStore extends FileBackend {
                return Status::newGood();
        }
 
+       /**
+        * @see FileBackend::doPublish()
+        * @return Status
+        */
+       final protected function doPublish( array $params ) {
+               wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
+               $status = Status::newGood();
+
+               list( $fullCont, $dir, $shard ) = $this->resolveStoragePath( $params['dir'] );
+               if ( $dir === null ) {
+                       $status->fatal( 'backend-fail-invalidpath', $params['dir'] );
+                       wfProfileOut( __METHOD__ . '-' . $this->name );
+                       wfProfileOut( __METHOD__ );
+                       return $status; // invalid storage path
+               }
+
+               if ( $shard !== null ) { // confined to a single container/shard
+                       $status->merge( $this->doPublishInternal( $fullCont, $dir, $params ) );
+               } else { // directory is on several shards
+                       wfDebug( __METHOD__ . ": iterating over all container shards.\n" );
+                       list( $b, $shortCont, $r ) = self::splitStoragePath( $params['dir'] );
+                       foreach ( $this->getContainerSuffixes( $shortCont ) as $suffix ) {
+                               $status->merge( $this->doPublishInternal( "{$fullCont}{$suffix}", $dir, $params ) );
+                       }
+               }
+
+               wfProfileOut( __METHOD__ . '-' . $this->name );
+               wfProfileOut( __METHOD__ );
+               return $status;
+       }
+
+       /**
+        * @see FileBackendStore::doPublish()
+        * @return Status
+        */
+       protected function doPublishInternal( $container, $dir, array $params ) {
+               return Status::newGood();
+       }
+
        /**
         * @see FileBackend::doClean()
         * @return Status
@@ -539,17 +578,17 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $latest = !empty( $params['latest'] ); // use latest data?
-               if ( !isset( $this->cache[$path]['stat'] ) ) {
+               if ( !$this->cheapCache->has( $path, 'stat' ) ) {
                        $this->primeFileCache( array( $path ) ); // check persistent cache
                }
-               if ( isset( $this->cache[$path]['stat'] ) ) {
+               if ( $this->cheapCache->has( $path, 'stat' ) ) {
+                       $stat = $this->cheapCache->get( $path, 'stat' );
                        // If we want the latest data, check that this cached
                        // value was in fact fetched with the latest available data.
-                       if ( !$latest || $this->cache[$path]['stat']['latest'] ) {
-                               $this->pingCache( $path ); // LRU
+                       if ( !$latest || $stat['latest'] ) {
                                wfProfileOut( __METHOD__ . '-' . $this->name );
                                wfProfileOut( __METHOD__ );
-                               return $this->cache[$path]['stat'];
+                               return $stat;
                        }
                }
                wfProfileIn( __METHOD__ . '-miss' );
@@ -559,13 +598,11 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileOut( __METHOD__ . '-miss' );
                if ( is_array( $stat ) ) { // don't cache negatives
                        $stat['latest'] = $latest;
-                       $this->trimCache(); // limit memory
-                       $this->cache[$path]['stat'] = $stat;
+                       $this->cheapCache->set( $path, 'stat', $stat );
                        $this->setFileCache( $path, $stat ); // update persistent cache
                        if ( isset( $stat['sha1'] ) ) { // some backends store SHA-1 as metadata
-                               $this->trimCache(); // limit memory
-                               $this->cache[$path]['sha1'] =
-                                       array( 'hash' => $stat['sha1'], 'latest' => $latest );
+                               $this->cheapCache->set( $path, 'sha1',
+                                       array( 'hash' => $stat['sha1'], 'latest' => $latest ) );
                        }
                } else {
                        wfDebug( __METHOD__ . ": File $path does not exist.\n" );
@@ -613,14 +650,14 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $latest = !empty( $params['latest'] ); // use latest data?
-               if ( isset( $this->cache[$path]['sha1'] ) ) {
+               if ( $this->cheapCache->has( $path, 'sha1' ) ) {
+                       $stat = $this->cheapCache->get( $path, 'sha1' );
                        // If we want the latest data, check that this cached
                        // value was in fact fetched with the latest available data.
-                       if ( !$latest || $this->cache[$path]['sha1']['latest'] ) {
-                               $this->pingCache( $path ); // LRU
+                       if ( !$latest || $stat['latest'] ) {
                                wfProfileOut( __METHOD__ . '-' . $this->name );
                                wfProfileOut( __METHOD__ );
-                               return $this->cache[$path]['sha1']['hash'];
+                               return $stat['hash'];
                        }
                }
                wfProfileIn( __METHOD__ . '-miss' );
@@ -629,8 +666,8 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileOut( __METHOD__ . '-miss-' . $this->name );
                wfProfileOut( __METHOD__ . '-miss' );
                if ( $hash ) { // don't cache negatives
-                       $this->trimCache(); // limit memory
-                       $this->cache[$path]['sha1'] = array( 'hash' => $hash, 'latest' => $latest );
+                       $this->cheapCache->set( $path, 'sha1',
+                               array( 'hash' => $hash, 'latest' => $latest ) );
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -676,21 +713,20 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ );
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $latest = !empty( $params['latest'] ); // use latest data?
-               if ( isset( $this->expensiveCache[$path]['localRef'] ) ) {
+               if ( $this->expensiveCache->has( $path, 'localRef' ) ) {
+                       $val = $this->expensiveCache->get( $path, 'localRef' );
                        // If we want the latest data, check that this cached
                        // value was in fact fetched with the latest available data.
-                       if ( !$latest || $this->expensiveCache[$path]['localRef']['latest'] ) {
-                               $this->pingExpensiveCache( $path );
+                       if ( !$latest || $val['latest'] ) {
                                wfProfileOut( __METHOD__ . '-' . $this->name );
                                wfProfileOut( __METHOD__ );
-                               return $this->expensiveCache[$path]['localRef']['object'];
+                               return $val['object'];
                        }
                }
                $tmpFile = $this->getLocalCopy( $params );
                if ( $tmpFile ) { // don't cache negatives
-                       $this->trimExpensiveCache(); // limit memory
-                       $this->expensiveCache[$path]['localRef'] =
-                               array( 'object' => $tmpFile, 'latest' => $latest );
+                       $this->expensiveCache->set( $path, 'localRef',
+                               array( 'object' => $tmpFile, 'latest' => $latest ) );
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -1079,12 +1115,12 @@ abstract class FileBackendStore extends FileBackend {
                        $paths = array_filter( $paths, 'strlen' ); // remove nulls
                }
                if ( $paths === null ) {
-                       $this->cache = array();
-                       $this->expensiveCache = array();
+                       $this->cheapCache->clear();
+                       $this->expensiveCache->clear();
                } else {
                        foreach ( $paths as $path ) {
-                               unset( $this->cache[$path] );
-                               unset( $this->expensiveCache[$path] );
+                               $this->cheapCache->clear( $path );
+                               $this->expensiveCache->clear( $path );
                        }
                }
                $this->doClearCache( $paths );
@@ -1109,58 +1145,6 @@ abstract class FileBackendStore extends FileBackend {
         */
        abstract protected function directoriesAreVirtual();
 
-       /**
-        * Move a cache entry to the top (such as when accessed)
-        *
-        * @param $path string Storage path
-        * @return void
-        */
-       protected function pingCache( $path ) {
-               if ( isset( $this->cache[$path] ) ) {
-                       $tmp = $this->cache[$path];
-                       unset( $this->cache[$path] );
-                       $this->cache[$path] = $tmp;
-               }
-       }
-
-       /**
-        * Prune the inexpensive cache if it is too big to add an item
-        *
-        * @return void
-        */
-       protected function trimCache() {
-               if ( count( $this->cache ) >= $this->maxCacheSize ) {
-                       reset( $this->cache );
-                       unset( $this->cache[key( $this->cache )] );
-               }
-       }
-
-       /**
-        * Move a cache entry to the top (such as when accessed)
-        *
-        * @param $path string Storage path
-        * @return void
-        */
-       protected function pingExpensiveCache( $path ) {
-               if ( isset( $this->expensiveCache[$path] ) ) {
-                       $tmp = $this->expensiveCache[$path];
-                       unset( $this->expensiveCache[$path] );
-                       $this->expensiveCache[$path] = $tmp;
-               }
-       }
-
-       /**
-        * Prune the expensive cache if it is too big to add an item
-        *
-        * @return void
-        */
-       protected function trimExpensiveCache() {
-               if ( count( $this->expensiveCache ) >= $this->maxExpensiveCacheSize ) {
-                       reset( $this->expensiveCache );
-                       unset( $this->expensiveCache[key( $this->expensiveCache )] );
-               }
-       }
-
        /**
         * Check if a container name is valid.
         * This checks for for length and illegal characters.
@@ -1515,12 +1499,10 @@ abstract class FileBackendStore extends FileBackend {
                foreach ( $values as $cacheKey => $val ) {
                        if ( is_array( $val ) ) {
                                $path = $pathNames[$cacheKey];
-                               $this->trimCache(); // limit memory
-                               $this->cache[$path]['stat'] = $val;
+                               $this->cheapCache->set( $path, 'stat', $val );
                                if ( isset( $val['sha1'] ) ) { // some backends store SHA-1 as metadata
-                                       $this->trimCache(); // limit memory
-                                       $this->cache[$path]['sha1'] =
-                                               array( 'hash' => $val['sha1'], 'latest' => $val['latest'] );
+                                       $this->cheapCache->set( $path, 'sha1',
+                                               array( 'hash' => $val['sha1'], 'latest' => $val['latest'] ) );
                                }
                        }
                }
@@ -1600,23 +1582,34 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
        }
 
        /**
-        * @see Iterator::current()
-        * @return string|bool String or false
+        * @see Iterator::key()
+        * @return integer
         */
-       public function current() {
-               if ( is_array( $this->iter ) ) {
-                       return current( $this->iter );
-               } else {
-                       return $this->iter->current();
+       public function key() {
+               return $this->pos;
+       }
+
+       /**
+        * @see Iterator::valid()
+        * @return bool
+        */
+       public function valid() {
+               if ( $this->iter instanceof Iterator ) {
+                       return $this->iter->valid();
+               } elseif ( is_array( $this->iter ) ) {
+                       return ( current( $this->iter ) !== false ); // no paths can have this value
                }
+               return false; // some failure?
        }
 
        /**
-        * @see Iterator::key()
-        * @return integer
+        * @see Iterator::current()
+        * @return string|bool String or false
         */
-       public function key() {
-               return $this->pos;
+       public function current() {
+               return ( $this->iter instanceof Iterator )
+                       ? $this->iter->current()
+                       : current( $this->iter );
        }
 
        /**
@@ -1625,15 +1618,16 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
         */
        public function next() {
                ++$this->pos;
-               if ( is_array( $this->iter ) ) {
-                       next( $this->iter );
-               } else {
-                       $this->iter->next();
-               }
-               // Filter out items that we already listed
-               $this->filterViaNext();
-               // Find the next non-empty shard if no elements are left
-               $this->nextShardIteratorIfNotValid();
+               ( $this->iter instanceof Iterator ) ? $this->iter->next() : next( $this->iter );
+               do {
+                       $continue = false; // keep scanning shards?
+                       $this->filterViaNext(); // filter out duplicates
+                       // Find the next non-empty shard if no elements are left
+                       if ( !$this->valid() ) {
+                               $this->nextShardIteratorIfNotValid();
+                               $continue = $this->valid(); // re-filter unless we ran out of shards
+                       }
+               } while ( $continue );
        }
 
        /**
@@ -1644,41 +1638,32 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
                $this->pos = 0;
                $this->curShard = 0;
                $this->setIteratorFromCurrentShard();
-               // Filter out items that we already listed
-               $this->filterViaNext();
-               // Find the next non-empty shard if this one has no elements
-               $this->nextShardIteratorIfNotValid();
-       }
-
-       /**
-        * @see Iterator::valid()
-        * @return bool
-        */
-       public function valid() {
-               if ( $this->iter === null ) {
-                       return false; // some failure?
-               } elseif ( is_array( $this->iter ) ) {
-                       return ( current( $this->iter ) !== false ); // no paths can have this value
-               } else {
-                       return $this->iter->valid();
-               }
+               do {
+                       $continue = false; // keep scanning shards?
+                       $this->filterViaNext(); // filter out duplicates
+                       // Find the next non-empty shard if no elements are left
+                       if ( !$this->valid() ) {
+                               $this->nextShardIteratorIfNotValid();
+                               $continue = $this->valid(); // re-filter unless we ran out of shards
+                       }
+               } while ( $continue );
        }
 
        /**
         * Filter out duplicate items by advancing to the next ones
         */
        protected function filterViaNext() {
-               while ( $this->iter->valid() ) {
+               while ( $this->valid() ) {
                        $rel = $this->iter->current(); // path relative to given directory
                        $path = $this->params['dir'] . "/{$rel}"; // full storage path
-                       if ( !$this->backend->isSingleShardPathInternal( $path ) ) {
+                       if ( $this->backend->isSingleShardPathInternal( $path ) ) {
+                               break; // path is only on one shard; no issue with duplicates
+                       } elseif ( isset( $this->multiShardPaths[$rel] ) ) {
                                // Don't keep listing paths that are on multiple shards
-                               if ( isset( $this->multiShardPaths[$rel] ) ) {
-                                       $this->iter->next(); // we already listed this path
-                               } else {
-                                       $this->multiShardPaths[$rel] = 1;
-                                       break;
-                               }
+                               ( $this->iter instanceof Iterator ) ? $this->iter->next() : next( $this->iter );
+                       } else {
+                               $this->multiShardPaths[$rel] = 1;
+                               break;
                        }
                }
        }
@@ -1689,10 +1674,7 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
         * If there are none, then it advances to the last container.
         */
        protected function nextShardIteratorIfNotValid() {
-               while ( !$this->valid() ) {
-                       if ( ++$this->curShard >= count( $this->shardSuffixes ) ) {
-                               break; // no more container shards
-                       }
+               while ( !$this->valid() && ++$this->curShard < count( $this->shardSuffixes ) ) {
                        $this->setIteratorFromCurrentShard();
                }
        }
@@ -1701,9 +1683,13 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
         * Set the list iterator to that of the current container shard
         */
        protected function setIteratorFromCurrentShard() {
-               $suffix = $this->shardSuffixes[$this->curShard];
                $this->iter = $this->listFromShard(
-                       "{$this->container}{$suffix}", $this->directory, $this->params );
+                       $this->container . $this->shardSuffixes[$this->curShard],
+                       $this->directory, $this->params );
+               // Start loading results so that current() works
+               if ( $this->iter ) {
+                       ( $this->iter instanceof Iterator ) ? $this->iter->rewind() : reset( $this->iter );
+               }
        }
 
        /**
@@ -1722,9 +1708,7 @@ abstract class FileBackendStoreShardListIterator implements Iterator {
  */
 class FileBackendStoreShardDirIterator extends FileBackendStoreShardListIterator {
        /**
-        * @param string $container
-        * @param string $dir
-        * @param array $params
+        * @see FileBackendStoreShardListIterator::listFromShard()
         * @return Array|null|Traversable
         */
        protected function listFromShard( $container, $dir, array $params ) {
@@ -1737,9 +1721,7 @@ class FileBackendStoreShardDirIterator extends FileBackendStoreShardListIterator
  */
 class FileBackendStoreShardFileIterator extends FileBackendStoreShardListIterator {
        /**
-        * @param string $container
-        * @param string $dir
-        * @param array $params
+        * @see FileBackendStoreShardListIterator::listFromShard()
         * @return Array|null|Traversable
         */
        protected function listFromShard( $container, $dir, array $params ) {
index 2b10917..d2f26e9 100644 (file)
@@ -60,7 +60,10 @@ class SwiftFileBackend extends FileBackendStore {
         *    swiftUser          : Swift user used by MediaWiki (account:username)
         *    swiftKey           : Swift authentication key for the above user
         *    swiftAuthTTL       : Swift authentication TTL (seconds)
-        *    swiftAnonUser      : Swift user used for end-user requests (account:username)
+        *    swiftAnonUser      : Swift user used for end-user requests (account:username).
+        *                         If set, then views of public containers are assumed to go
+        *                         through this user. If not set, then public containers are
+        *                         accessible to unauthenticated requests via ".r:*" in the ACL.
         *    swiftUseCDN        : Whether a Cloud Files Content Delivery Network is set up
         *    swiftCDNExpiry     : How long (in seconds) to store content in the CDN.
         *                         If files may likely change, this should probably not exceed
@@ -524,13 +527,12 @@ class SwiftFileBackend extends FileBackendStore {
                // (b) Create container as needed
                try {
                        $contObj = $this->createContainer( $fullCont );
-                       // Make container public to end-users...
-                       if ( $this->swiftAnonUser != '' ) {
-                               $status->merge( $this->setContainerAccess(
-                                       $contObj,
-                                       array( $this->auth->username, $this->swiftAnonUser ), // read
-                                       array( $this->auth->username ) // write
-                               ) );
+                       if ( !empty( $params['noAccess'] ) ) {
+                               // Make container private to end-users...
+                               $status->merge( $this->doSecureInternal( $fullCont, $dir, $params ) );
+                       } else {
+                               // Make container public to end-users...
+                               $status->merge( $this->doPublishInternal( $fullCont, $dir, $params ) );
                        }
                        if ( $this->swiftUseCDN ) { // Rackspace style CDN
                                $contObj->make_public( $this->swiftCDNExpiry );
@@ -551,6 +553,9 @@ class SwiftFileBackend extends FileBackendStore {
         */
        protected function doSecureInternal( $fullCont, $dir, array $params ) {
                $status = Status::newGood();
+               if ( empty( $params['noAccess'] ) ) {
+                       return $status; // nothing to do
+               }
 
                // Restrict container from end-users...
                try {
@@ -560,18 +565,53 @@ class SwiftFileBackend extends FileBackendStore {
                        // NoSuchContainerException not thrown: container must exist
 
                        // Make container private to end-users...
-                       if ( $this->swiftAnonUser != '' && !isset( $contObj->mw_wasSecured ) ) {
+                       $status->merge( $this->setContainerAccess(
+                               $contObj,
+                               array( $this->auth->username ), // read
+                               array( $this->auth->username ) // write
+                       ) );
+                       if ( $this->swiftUseCDN && $contObj->is_public() ) { // Rackspace style CDN
+                               $contObj->make_private();
+                       }
+               } catch ( CDNNotEnabledException $e ) {
+                       // CDN not enabled; nothing to see here
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
+               }
+
+               return $status;
+       }
+
+       /**
+        * @see FileBackendStore::doPublishInternal()
+        * @return Status
+        */
+       protected function doPublishInternal( $fullCont, $dir, array $params ) {
+               $status = Status::newGood();
+
+               // Unrestrict container from end-users...
+               try {
+                       // doPrepareInternal() should have been called,
+                       // so the Swift container should already exist...
+                       $contObj = $this->getContainer( $fullCont ); // normally a cache hit
+                       // NoSuchContainerException not thrown: container must exist
+
+                       // Make container public to end-users...
+                       if ( $this->swiftAnonUser != '' ) {
+                               $status->merge( $this->setContainerAccess(
+                                       $contObj,
+                                       array( $this->auth->username, $this->swiftAnonUser ), // read
+                                       array( $this->auth->username, $this->swiftAnonUser ) // write
+                               ) );
+                       } else {
                                $status->merge( $this->setContainerAccess(
                                        $contObj,
-                                       array( $this->auth->username ), // read
+                                       array( $this->auth->username, '.r:*' ), // read
                                        array( $this->auth->username ) // write
                                ) );
-                               // @TODO: when php-cloudfiles supports container
-                               // metadata, we can make use of that to avoid RTTs
-                               $contObj->mw_wasSecured = true; // avoid useless RTTs
                        }
-                       if ( $this->swiftUseCDN && $contObj->is_public() ) { // Rackspace style CDN
-                               $contObj->make_private();
+                       if ( $this->swiftUseCDN && !$contObj->is_public() ) { // Rackspace style CDN
+                               $contObj->make_public();
                        }
                } catch ( CDNNotEnabledException $e ) {
                        // CDN not enabled; nothing to see here
@@ -1008,11 +1048,28 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        /**
-        * Set read/write permissions for a Swift container
+        * Set read/write permissions for a Swift container.
+        *
+        * $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
+        *                        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
+        *                        matches the expression and the request for a listing.
+        * $writeGrps is a list of the possible criteria for a request to have
+        * access to write to a container. Each item is of the following format:
+        *   account:user       - Grants access if the request is by the given user
+        *
+        * @see http://swift.openstack.org/misc.html#acls
+        *
+        * In general, we don't allow listings to end-users. It's not useful, isn't well-defined
+        * (lists are truncated to 10000 item with no way to page), and is just a performance risk.
         *
         * @param $contObj CF_Container Swift container
-        * @param $readGrps Array Swift users who can read (account:user)
-        * @param $writeGrps Array Swift users who can write (account:user)
+        * @param $readGrps Array List of read access routes
+        * @param $writeGrps Array List of write access routes
         * @return Status
         */
        protected function setContainerAccess(
index add1f2c..79696b2 100644 (file)
@@ -56,12 +56,12 @@ class MemcLockManager extends QuorumLockManager {
         * Construct a new instance from configuration.
         *
         * $config paramaters include:
-        *     'lockServers'  : Associative array of server names to <IP>:<port> strings.
-        *     'srvsByBucket' : Array of 1-16 consecutive integer keys, starting from 0,
+        *   - 'lockServers'  : Associative array of server names to "<IP>:<port>" strings.
+        *   - 'srvsByBucket' : Array of 1-16 consecutive integer keys, starting from 0,
         *                      each having an odd-numbered list of server names (peers) as values.
-        *     'memcConfig'   : Configuration array for ObjectCache::newFromParams. [optional]
+        *   - 'memcConfig'   : Configuration array for ObjectCache::newFromParams. [optional]
         *                      If set, this must use one of the memcached classes.
-        *     'wikiId'       : Wiki ID string that all resources are relative to. [optional]
+        *   - 'wikiId'       : Wiki ID string that all resources are relative to. [optional]
         *
         * @param Array $config
         */
index 065679a..3fa8166 100644 (file)
@@ -245,6 +245,18 @@ abstract class File {
                }
        }
 
+       /**
+        * Callback for usort() to do file sorts by title
+        *
+        * @param $a File
+        * @param $b File
+        *
+        * @return Integer: result of title comparison
+        */
+       public static function compare( File $a, File $b ) {
+               return Title::compare( $a->getTitle(), $b->getTitle() );
+       }
+
        /**
         * Return the name of this file
         *
@@ -1606,7 +1618,7 @@ abstract class File {
        }
 
        /**
-        * Get the deletion archive key, <sha1>.<ext>
+        * Get the deletion archive key, "<sha1>.<ext>"
         *
         * @return string
         */
index 67768c4..4db1f5f 100644 (file)
@@ -633,7 +633,7 @@ class LocalFile extends File {
 
        /**
         * Fix thumbnail files from 1.4 or before, with extreme prejudice
-        * @TODO: do we still care about this? Perhaps a maintenance script
+        * @todo : do we still care about this? Perhaps a maintenance script
         *        can be made instead. Enabling this code results in a serious
         *        RTT regression for wikis without 404 handling.
         */
index 752e214..28b34a8 100644 (file)
@@ -187,7 +187,7 @@ class CliInstaller extends Installer {
 
                if ( !$status->isOk() ) {
                        echo "\n";
-                       exit;
+                       exit( 1 );
                }
        }
 
index ac5b271..e722893 100644 (file)
@@ -602,6 +602,7 @@ 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-memory-raised' => 'Parameters:
 * $1 is the configured <code>memory_limit</code>.
 * $2 is the value to which <code>memory_limit</code> was raised.',
@@ -620,6 +621,7 @@ Add dir="ltr" to the <nowiki><code></nowiki> for right-to-left languages.',
        'config-suhosin-max-value-length' => 'Message shown when PHP parameter suhosin.get.max_value_length is between 0 and 1023 (that max value is hard set in MediaWiki software)',
        'config-db-host-oracle' => 'TNS = [[:wikipedia:Transparent Network Substrate|Transparent Network Substrate]] (<== wikipedia link)',
        'config-db-wiki-settings' => 'This is more acurate: "Enter identifying or distinguishing data for this wiki" since a MySQL database can host tables of several wikis.',
+       'config-db-account-oracle-warn' => '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-db-account-lock' => "It might be easier to translate ''normal operation'' as \"also after the installation process\"",
        'config-type-mysql' => '{{optional}}',
        'config-type-postgres' => '{{optional}}',
@@ -991,7 +993,7 @@ $messages['am'] = array(
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]",
 );
 
-/** Aragonese (Aragonés)
+/** Aragonese (aragonés)
  * @author Juanpabl
  */
 $messages['an'] = array(
@@ -1065,7 +1067,7 @@ $messages['arc'] = array(
        'config-admin-name' => 'ܫܡܐ ܕܝܠܟ:',
        'config-admin-password' => 'ܡܠܬܐ ܕܥܠܠܐ:',
        'config-admin-password-confirm' => 'ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܬܐ ܐܚܪܬܐ:',
-       'config-admin-email' => 'ܦܪܫÜ\93Ü¢ܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:',
+       'config-admin-email' => 'Ü¡Ü\98ܢܥܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ:',
        'config-profile-private' => 'ܘܝܩܝ ܦܪܨܘܦܝܐ',
        'config-email-settings' => 'ܛܘܝܒ̈ܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 );
@@ -1222,7 +1224,7 @@ $messages['be'] = array(
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ліставанне аб выпусках MediaWiki (англ.)]',
 );
 
-/** Belarusian (TaraÅ¡kievica orthography) (â\80ªÐ\91еларуская (тарашкевіца)‬)
+/** Belarusian (TaraÅ¡kievica orthography) (â\80ªÐ±еларуская (тарашкевіца)‬)
  * @author EugeneZelenko
  * @author Jim-by
  * @author Wizardist
@@ -3544,7 +3546,7 @@ Až to dokončíte, můžete '''[$2 vstoupit do své wiki]'''.",
 * [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ô.'''",
 );
@@ -3687,7 +3689,7 @@ Sofern ein gemeinschaftlich genutzter Server für das Hosting verwendet wird, mu
 Sofern PHP selbst kompiliert wurde, muss es mit es neu konfiguriert werden, wobei der Datenbankclient zu aktivierten ist. Hierzu kann beispielsweise <code>./configure --with-mysql</code> ausgeführt werden.
 Sofern PHP über die Paketverwaltung einer Debian- oder Ubuntu-Installation installiert wurde, muss das „php5-mysql“-Paket nachinstalliert werden.',
        'config-outdated-sqlite' => "'''Warnung:''' SQLite $1 ist installiert. Allerdings benötigt MediaWiki SQLite $2 oder höher. SQLite wird daher nicht verfügbar sein.",
-       'config-no-fts3' => "'''Warnung:''' SQLite wurde ohne das [//sqlite.org/fts3.html FTS3-Modul] kompiliert, so dass keine Suchfunktionen zur Verfügung stehen werden.",
+       'config-no-fts3' => "'''Warnung:''' SQLite wurde ohne das [//sqlite.org/fts3.html FTS3-Modul] kompiliert, so dass keine Suchfunktionen für dieses Datenbanksystem zur Verfügung stehen werden.",
        'config-register-globals' => "'''Warnung: Der Parameter <code>[http://php.net/register_globals register_globals]</code> von PHP ist aktiviert.'''
 '''Sie sollte deaktiviert werden, sofern dies möglich ist.'''
 Die MediaWiki-Installation wird zwar laufen, wobei aber der Server für potentielle Sicherheitsprobleme anfällig ist.",
@@ -3887,7 +3889,7 @@ Bitte unten angegebenes Datenverzeichnis sowie den Datenbanknamen überprüfen u
        'config-sqlite-fts3-downgrade' => 'PHP verfügt nicht über FTS3-Unterstützung. Die Tabellen wurden zurückgestuft.',
        'config-can-upgrade' => "Es wurden MediaWiki-Tabellen in dieser Datenbank gefunden.
 Um sie auf MediaWiki $1 zu aktualisieren, bitte auf '''Weiter''' klicken.",
-       'config-upgrade-done' => "Die Aktualisierung ist abgeschlossen.
+       'config-upgrade-done' => "Die Aktualisierung ist nun abgeschlossen.
 
 Das Wiki kann nun [$1 genutzt werden].
 
@@ -4125,7 +4127,7 @@ $3
 Sobald alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''. Wir wünschen viel Spaß und Erfolg mit dem Wiki.",
        'config-download-localsettings' => 'LocalSettings.php herunterladen',
        'config-help' => 'Hilfe',
-       'config-nofile' => 'Datei „$1“ wurde nicht gefunden. Wurde sie gelöscht?',
+       'config-nofile' => 'Die Datei „$1“ konnte nicht gefunden werden. Wurde sie gelöscht?',
        'mainpagetext' => "'''MediaWiki wurde erfolgreich installiert.'''",
        'mainpagedocfooter' => 'Hilfe zur Benutzung und Konfiguration der Wiki-Software findest du im [//meta.wikimedia.org/wiki/Help:Contents Benutzerhandbuch].
 
@@ -4163,7 +4165,7 @@ $messages['diq'] = array(
 * [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].
@@ -4228,6 +4230,7 @@ $messages['eo'] = array(
  * @author Platonides
  * @author Sanbec
  * @author Translationista
+ * @author Vivaelcelta
  */
 $messages['es'] = array(
        'config-desc' => 'El instalador para MediaWiki',
@@ -4638,7 +4641,7 @@ Wikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GF
 La GFDL es una licencia válida, pero es difícil de entender.
 También es difícil reutilizar el contenido licenciado bajo la GFDL.",
        'config-email-settings' => 'Configuración de correo electrónico',
-       'config-enable-email' => 'Activar el envío de e-mails',
+       'config-enable-email' => 'Activar el envío de correos electrónicos',
        'config-enable-email-help' => 'Si quieres que el correo electrónico funcione, la [http://www.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.
 Si no quieres la funcionalidad de correo electrónico, puedes desactivarla aquí.',
        'config-email-user' => 'Habilitar correo electrónico de usuario a usuario',
@@ -4805,7 +4808,12 @@ $messages['eu'] = array(
        'config-sidebar' => '* [//www.mediawiki.org MediaWiki nagusia]
 * [//www.mediawiki.org/wiki/Help:Contents Erabiltzaileentzako Gida]
 * [//www.mediawiki.org/wiki/Manual:Contents Administratzaileentzako Gida]
-* [//www.mediawiki.org/wiki/Manual:FAQ MEG]',
+* [//www.mediawiki.org/wiki/Manual:FAQ MEG]
+----
+* <doclink href=Readme>Irakur nazazu</doclink>
+* <doclink href=ReleaseNotes>Oharren argitalpena</doclink>
+* <doclink href=Copying>Kopiaketa</doclink>
+* <doclink href=UpgradeDoc>Eguneratzea</doclink>',
        'config-env-php' => 'PHP $1 instalatuta dago.',
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache] instalatuta dago',
        'config-apc' => '[http://www.php.net/apc APC] instalatuta dago',
@@ -5916,7 +5924,7 @@ $messages['gd'] = array(
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liosta puist nan sgaoilidhean MediaWiki]",
 );
 
-/** Galician (Galego)
+/** Galician (galego)
  * @author Elisardojm
  * @author Toliño
  */
@@ -7213,7 +7221,7 @@ $messages['hr'] = array(
 i [//meta.wikimedia.org/wiki/MediaWiki_User%27s_Guide Vodič za suradnike] za pomoć pri uporabi i podešavanju.',
 );
 
-/** Upper Sorbian (Hornjoserbsce)
+/** Upper Sorbian (hornjoserbsce)
  * @author Michawiki
  */
 $messages['hsb'] = array(
@@ -7313,6 +7321,9 @@ Instalacija móhła so njeporadźić!",
        'config-diff3-bad' => 'GNU diff3 njenamakany.',
        'config-no-uri' => "'''Zmylk:''' Aktualny URI njeda so postajić.
 Instalacija bu přetorhnjena.",
+       'config-no-cli-uri' => "'''Warnowanje''': Žana skriptowa šćežka (--scriptpath) podata, standard so wužiwa: <code>$1</code>.",
+       'config-using-server' => 'Serwerowe mjeno "<nowiki>$1</nowiki>" so wužiwa.',
+       'config-using-uri' => 'Serwerowy URL "<nowiki>$1$2</nowiki>" so wužiwa.',
        'config-db-type' => 'Typ datoweje banki:',
        'config-db-host' => 'Serwer datoweje banki:',
        'config-db-host-oracle' => 'Datowa banka TNS:',
@@ -7540,6 +7551,7 @@ Standardna lisćina sp přeskakuje.",
        'config-install-mainpage-failed' => 'Powěsć njeda so zasunyć: $1',
        'config-download-localsettings' => 'LocalSettings.php sćahnyć',
        'config-help' => 'pomoc',
+       'config-nofile' => 'Dataja "$1" njeje so namakała. Je so zhašała?',
        'mainpagetext' => "'''MediaWiki bu wuspěšnje instalowany.'''",
        'mainpagedocfooter' => 'Prošu hlej [//meta.wikimedia.org/wiki/Help:Contents dokumentaciju] za informacije wo wužiwanju softwary.
 
@@ -8651,6 +8663,7 @@ Post facer isto, tu pote '''[$2 entrar in tu wiki]'''.",
 /** Indonesian (Bahasa Indonesia)
  * @author Farras
  * @author IvanLanin
+ * @author Kenrick95
  * @author Reedy
  */
 $messages['id'] = array(
@@ -9027,7 +9040,7 @@ Konfigurasi hak pengguna yang lebih kompleks tersedia setelah instalasi. Lihat [
        'config-license-none' => 'Tidak ada lisensi',
        'config-license-cc-by-sa' => 'Creative Commons Atribusi Berbagi Serupa',
        'config-license-cc-by' => 'Creative Commons Atribusi',
-       'config-license-cc-by-nc-sa' => 'Creative Commons Atribusi Non-Komersial Berbagi Serupa',
+       'config-license-cc-by-nc-sa' => 'Creative Commons Atribusi Nonkomersial Berbagi Serupa',
        'config-license-cc-0' => 'Creative Commons Zero (Domain Publik)',
        'config-license-gfdl' => 'Lisensi Dokumentasi Bebas GNU 1.3 atau versi terbaru',
        'config-license-pd' => 'Domain Umum',
@@ -9369,17 +9382,17 @@ LocalSettings.phpを変更してこの変数を設定して、『{{int:Config-co
 セッションの有効期間は$1に設定されています。
 php.iniの<code>session.gc_maxlifetime</code>を設定することで、この問題を改善できます。
 インストール作業を再起動させてください。',
-       'config-no-session' => 'ã\82»ã\83\83ã\82·ã\83§ã\83³ã\81®ã\83\87ã\83¼ã\82¿ã\81\8cæ\90\8d失しました!
-php.iniを確認し、<code>session.save_path</code>が適切なディレクトリに設定されていることを確かめて下さい。',
+       'config-no-session' => 'ã\82»ã\83\83ã\82·ã\83§ã\83³ã\81®ã\83\87ã\83¼ã\82¿ã\81\8cæ\88失しました!
+php.iniを確認し、<code>session.save_path</code>が適切なディレクトリに設定されていることを確認してください。',
        'config-your-language' => 'あなたの言語:',
-       'config-your-language-help' => 'インストール作業中に利用する言語を選んで下さい。',
+       'config-your-language-help' => 'インストール作業に使用する言語を選択してください。',
        'config-wiki-language' => 'ウィキの言語:',
-       'config-wiki-language-help' => 'ã\81\9dã\81®ã\82¦ã\82£ã\82­ã\81§ä¸»ã\81«æ\9b¸ã\81\8dè¾¼ã\81¾ã\82\8cã\82\8bè¨\80èª\9eã\82\92é\81¸ã\82\93ã\81§ä¸\8bさい。',
+       'config-wiki-language-help' => 'ã\82¦ã\82£ã\82­ã\81§ä¸»ã\81«æ\9b¸ã\81\8dè¾¼ã\81¾ã\82\8cã\82\8bè¨\80èª\9eã\82\92é\81¸æ\8a\9eã\81\97ã\81¦ã\81\8fã\81 さい。',
        'config-back' => '←戻る',
        'config-continue' => '続行→',
        'config-page-language' => '言語',
        'config-page-welcome' => 'MediaWikiへようこそ!',
-       'config-page-dbconnect' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81¸接続',
+       'config-page-dbconnect' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81«接続',
        'config-page-upgrade' => '既存のインストールを更新',
        'config-page-dbsettings' => 'データベースの設定',
        'config-page-name' => '名前',
@@ -9392,18 +9405,18 @@ php.iniを確認し、<code>session.save_path</code>が適切なディレクト
        'config-page-copying' => 'コピー',
        'config-page-upgradedoc' => 'アップグレード',
        'config-page-existingwiki' => '既存のウィキ',
-       'config-help-restart' => 'å\85¥å\8a\9bã\81\95ã\82\8cã\81\9få\85¨ã\81¦ã\81®ä¿\9då­\98ã\83\87ã\83¼ã\82¿ã\82\92æ¶\88å\8e»ã\81\97、インストール作業を再起動しますか?',
+       'config-help-restart' => 'å\85¥å\8a\9bã\81\97ã\81\9fä¿\9då­\98ã\83\87ã\83¼ã\82¿ã\82\92ã\81\99ã\81¹ã\81¦æ¶\88å\8e»ã\81\97ã\81¦、インストール作業を再起動しますか?',
        'config-restart' => 'はい、再起動します',
        'config-welcome' => '=== 環境の確認 ===
 基本的な確認では、現在の環境がMediaWikiのインストールに適しているかを確認します。
-インストール中に助けが必要になった場合は、この確認結果を提供してさい。',
+インストール中に助けが必要になった場合は、この確認結果を提供してください。',
        'config-copyright' => '=== 著作権および規約 ===
 $1
 
-この作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License)(バージョン2、またはそれ以降のライセンス)の規約にもとづき、このライブラリの再配布や改変をすることができます。
+この作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行するGNU一般公衆利用許諾書 (GNU General Public License)(バージョン2、またはそれ以降のライセンス)の規約に基づき、このライブラリを再配布および改変できます。
 
 この作品は、有用であることを期待して配布されていますが、商用あるいは特定の目的に適するかどうかも含めて、暗黙的にも、一切保証されません。
-詳しくは、GNU一般公衆利用許諾書をご覧さい。
+詳しくは、GNU一般公衆利用許諾書をご覧ください。
 
 あなたはこのプログラムと共に、<doclink href=Copying>GNU一般公衆利用許諾契約書の複製</doclink>を一部受け取ったはずです。もし受け取っていなければ、フリーソフトウェア財団(宛先は the Free Software Foundation, Inc., 59Temple Place, Suite 330, Boston, MA 02111-1307 USA)まで請求してください。',
        'config-sidebar' => '* [//www.mediawiki.org MediaWikiのホーム]
@@ -9425,7 +9438,7 @@ MediaWikiのインストールはできません。',
        'config-unicode-using-utf8' => 'Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。',
        'config-unicode-using-intl' => 'Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。',
        'config-unicode-pure-php-warning' => "'''警告''':Unicode正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]が使用可能ではなく、処理の遅いピュア PHP の実装を代わりに用いています。
-高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode正規化に関するページ]をお読みさい。",
+高トラフィックのサイトを運営する場合は、[//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にデータベースドライバをインストールする必要があります。
@@ -9477,6 +9490,8 @@ MediaWikiにはUTF-8サポートの関数が必要です。",
 画像のサムネイル生成は無効になります。',
        '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-brokenlibxml' => 'このシステムで使われているPHPとlibxml2のバージョンのこの組み合わせにはバグがあります。具体的には、MediaWikiやその他のウェブアプリケーションでhiddenデータが破損する可能性があります。
@@ -9488,19 +9503,21 @@ PHP5.3.2以降に更新するか、この([//bugs.php.net/bug.php?id=50394 PHP
        '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アドレスをここに入力してください。
+       'config-db-host-help' => '異なるサーバー上にデータベースサーバーがある場合、ホスト名またはIPアドレスをここに入力してください。
+
+もし、共有されたウェブホスティングを使用している場合、ホスティングプロバイダーは正確なホスト名を解説しているはずです。
 
-もし、共有されたウェブホスティングを使用している場合、ホスティング・プロバイダは正確なホストネームを解説しているはずです
+WindowsでMySQLを使用している場合に、「localhost」は、サーバー名としてはうまく働かないでしょう。もしそのような場合は、ローカルIPアドレスとして「127.0.0.1」を試してみてください
 
-WindowsでMySQLを使用している場合に、「localhost」は、サーバー名としてはうまく働かないでしょう。もしそのような場合は、ローカルIPアドレスとして「127.0.0.1」を試してみてください。',
+PostgreSQLを使用している場合、UNIXソケットで接続するにはこの欄を空欄のままにしてください。',
        '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' => 'このウィキを識別',
        'config-db-name' => 'データベース名:',
-       'config-db-name-help' => 'このウィキを識別する名前を選んで下さい。
-スペースを含めることはできません。
+       'config-db-name-help' => 'このウィキを識別する名前を入力してください。
+空白を含めることはできません。
 
\85±æ\9c\89ã\82¦ã\82§ã\83\96ã\83\9bã\82¹ã\83\88ã\82\92å\88©ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81ã\83\9bã\82¹ã\83\88ã\83»ã\83\97ã\83­ã\83\90ã\82¤ã\83\80ã\83¼ã\81¯ç\89¹å®\9aã\81®å\88©用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。',
\85±æ\9c\89ã\82¦ã\82§ã\83\96ã\83\9bã\82¹ã\83\88ã\82\92å\88©ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bå ´å\90\88ã\80\81ã\83\9bã\82¹ã\83\86ã\82£ã\83³ã\82°ã\83\97ã\83­ã\83\90ã\82¤ã\83\80ã\83¼ã\81\8cç\89¹å®\9aã\81®ä½¿用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。',
        'config-db-name-oracle' => 'データベースのスキーマ:',
        'config-db-install-account' => 'インストールのための利用者アカウント',
        'config-db-username' => 'データベースの利用者名:',
@@ -9513,10 +9530,10 @@ WindowsでMySQLを使用している場合に、「localhost」は、サーバ
        'config-db-account-lock' => 'インストール作業終了後も同じ利用者名とパスワードを使用する',
        'config-db-wiki-account' => 'インストール作業終了後の利用者アカウント',
        'config-db-wiki-help' => '通常のウィキ操作中にデータベースへの接続する時に利用する利用者名とパスワードを入力してください。
-アカウントがないが、インストールのアカウントに十分な権限があれば、このユーザーアカウントは、ウィキを操作するうえで最小限の権限を持った状態で作成されます。',
+アカウントが存在せず、インストールのアカウントに十分な権限がある場合は、この利用者アカウントは、ウィキを操作する上で最小限の権限を持った状態で作成されます。',
        'config-db-prefix' => 'データベーステーブルの接頭辞:',
-       'config-db-prefix-help' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92è¤\87æ\95°ã\81®ã\82¦ã\82£ã\82­é\96\93ã\80\81ã\82\82ã\81\97ã\81\8fã\81¯MediaWikiã\81¨ä»\96ã\81®ã\82¦ã\82§ã\83\96ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\81§å\85±æ\9c\89ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8bå ´å\90\88ã\80\81è¡\9dçª\81ã\82\92é\81¿ã\81\91ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ã\81\99ã\81¹ã\81¦ã\81®ã\83\86ã\83¼ã\83\96ã\83«å\90\8dã\81«æ\8e¥é ­è¾\9eã\82\92ã\81¤ける必要があります。
-スペースは使用できません。
+       'config-db-prefix-help' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92è¤\87æ\95°ã\81®ã\82¦ã\82£ã\82­é\96\93ã\80\81ã\81\82ã\82\8bã\81\84ã\81¯MediaWikiã\81¨ä»\96ã\81®ã\82¦ã\82§ã\83\96ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\81§å\85±æ\9c\89ã\81\99ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8bå ´å\90\88ã\80\81è¡\9dçª\81ã\82\92é\81¿ã\81\91ã\82\8bã\81\9fã\82\81ã\81«ã\80\81ã\81\99ã\81¹ã\81¦ã\81®ã\83\86ã\83¼ã\83\96ã\83«å\90\8dã\81«æ\8e¥é ­è¾\9eã\82\92ä»\98ける必要があります。
+空白は使用できません。
 
 このフィールドは、通常は空のままです。',
        'config-db-charset' => 'データベースの文字セット',
@@ -9525,9 +9542,9 @@ WindowsでMySQLを使用している場合に、「localhost」は、サーバ
        '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形式より効率的で、ユニコード文字の全範囲を利用することが出来るようになります。
-'''UTF-8å½¢å¼\8f'''ã\81§ã\81¯ã\80\81MySQLã\81¯ã\80\81ã\81ªã\82\93ã\81®æ\96\87å­\97é\9b\86å\90\88ã\81\8cã\83\87ã\83¼ã\82¿ã\81®ã\81ªã\81\8bã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bã\81\8bã\82\92ç\9f¥ã\82\8a、それに対して適切な提示と変換をするでしょうが、
+'''バイナリー式'''では、MediaWikiは、UTF-8テキストを、データベースのバイナリーフィールドに格納します。
+これは、MySQLのUTF-8形式より効率的で、Unicode文字の全範囲を利用できるようになります。
+'''UTF-8å½¢å¼\8f'''ã\81§ã\81¯ã\80\81MySQLã\81¯ã\80\81ã\83\87ã\83¼ã\82¿å\86\85ã\81§ã\81©ã\81®æ\96\87å­\97é\9b\86å\90\88ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bã\81\8bã\82\92ç\9f¥ã\81£ã\81¦ã\81\84ã\81¦、それに対して適切な提示と変換をするでしょうが、
 [//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' => 'データベースポート:',
@@ -9535,15 +9552,15 @@ WindowsでMySQLを使用している場合に、「localhost」は、サーバ
        'config-db-schema-help' => '上の図式は常に正確です。
 必要である場合のみ、変更してください。',
        'config-sqlite-dir' => 'SQLiteのデータディレクトリ:',
-       'config-sqlite-dir-help' => 'SQLiteは単一のファイル中に全てのデータを保持しています。
+       'config-sqlite-dir-help' => "SQLiteは単一のファイル内にすべてのデータを保持しています。
 
-あなたが供給するディレクトリーはインストール時にウェブサーバーによって書き込み可能でなければならない
+指定したディレクトリは、インストール時にウェブサーバーが書き込める必要があります
 
\82¦ã\82§ã\83\96ã\82\92é\80\9aã\81\97ã\81¦ã\82¢ã\82¯ã\82»ã\82¹å\8f¯è\83½"ä¸\8då\8f¯è\83½"ã\81§ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\80\82ã\81\93ã\82\8cã\81¯ã\81\82ã\81ªã\81\9fã\81®PHPã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\81\82ã\82\8bæ\89\80ã\81«é\85\8dç½®ä¸\8dè\83½ã\81ª理由です。
\81\93ã\81®ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81¯ã\82¦ã\82§ã\83\96ã\81\8bã\82\89ã\82¢ã\82¯ã\82»ã\82¹'''ä¸\8då\8f¯è\83½'''ã\81§ã\81\82ã\82\8bå¿\85è¦\81ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99ã\80\82ã\81\93ã\82\8cã\81\8cPHPã\83\95ã\82¡ã\82¤ã\83«ã\81\8cã\81\82ã\82\8bå ´æ\89\80ã\81«é\85\8dç½®ã\81§ã\81\8dã\81ªã\81\84理由です。
 
\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81¯å\85±ã\81«<code>.htaccess</code>ã\83\95ã\82¡ã\82¤ã\83«ã\82\92æ\9b¸ã\81\8dè¾¼ã\82\80ã\81\93ã\81¨ã\81§ã\81\97ã\82\87ã\81\86ã\80\82ã\81\97ã\81\8bã\81\97ã\80\81ä¾\8bã\81\88失æ\95\97ã\81\97ã\81¦ã\82\82誰ã\81\8bã\81\8cã\81\82ã\81ªã\81\9fã\81®ç\94\9fã\81®ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81«ã\82¢ã\82¯ã\82»ã\82¹ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cå\8f¯è\83½ã\81¨ã\81ªã\82\8bã\81§ã\81\97ã\82\87ã\81\86
\82¤ã\83³ã\82¹ã\83\88ã\83¼ã\83©ã\83¼ã\81¯å\90\8cæ\99\82ã\81«<code>.htaccess</code>ã\83\95ã\82¡ã\82¤ã\83«ã\81«æ\9b¸ã\81\8dè¾¼ã\81¿ã\81¾ã\81\99ã\80\82ã\81\97ã\81\8bã\81\97ã\80\81ã\81\93ã\82\8cã\81\8c失æ\95\97ã\81\97ã\81¦ã\82\82誰ã\81\8bã\81\8cã\81\82ã\81ªã\81\9fã\81®ç\94\9fã\81®ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81«ã\82¢ã\82¯ã\82»ã\82¹ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cå\8f¯è\83½ã\81¨ã\81ªã\82\8bã\81§ã\81\97ã\82\87ã\81\86ã\80\82ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81¯ç\94\9fã\81®ã\83\87ã\83¼ã\82¿ï¼\88ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\80\81ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81®ã\83\8fã\83\83ã\82·ã\83¥å\80¤ï¼\89ã\81®ä»\96ã\80\81å\89\8aé\99¤ã\81\95ã\82\8cã\81\9fç\89\88ã\80\81ã\81\9dã\81®ä»\96ã\80\81ã\82¦ã\82£ã\82­ä¸\8aã\81®å\88¶é\99\90ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\83\87ã\83¼ã\82¿ã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\99
 
-ä¾\8bã\81\88ã\81°<code>/var/lib/mediawiki/yourwiki</code>ã\81®ã\82\88ã\81\86ã\81«ã\80\81å\85¨ã\81\8fé\81\95ã\81\86å ´æ\89\80ã\81«ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92é\85\8dç½®ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92è\80\83ã\81\88ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82',
+ä¾\8bã\81\88ã\81°<code>/var/lib/mediawiki/yourwiki</code>ã\81®ã\82\88ã\81\86ã\81«ã\80\81å\88¥ã\81®å ´æ\89\80ã\81«ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92é\85\8dç½®ã\81\99ã\82\8bã\81\93ã\81¨ã\82\92æ¤\9cè¨\8eã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82",
        'config-oracle-def-ts' => '既定のテーブル領域:',
        'config-oracle-temp-ts' => '一時的なテーブル領域:',
        'config-type-mysql' => 'MySQL',
@@ -9566,28 +9583,28 @@ $1
        'config-header-sqlite' => 'SQLiteの設定',
        'config-header-oracle' => 'Oracleの設定',
        'config-header-ibm_db2' => 'IBM DB2の設定',
-       'config-invalid-db-type' => '不正なデータベースの種類',
+       'config-invalid-db-type' => '無効なデータベースの種類',
        'config-missing-db-name' => '「データベース名」を入力する必要があります',
        'config-missing-db-host' => '「データベースのホスト」を入力する必要があります',
        'config-missing-db-server-oracle' => '「データベースTNS」に値を入力する必要があります',
-       'config-invalid-db-server-oracle' => '不正なデータベースTNS「$1」です。
-アスキー文字(a-z, A-Z)、数字(0-9)およびアンダーバー(_)とドット(.)のみを使用してください。',
-       'config-invalid-db-name' => '無効なデータベース名 "$1"
-アスキー文字(a-z, A-Z)、数字(0-9)、アンダーバー(_)、ハイフン(-)のみを使用してください。',
-       'config-invalid-db-prefix' => 'ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\81®æ\8e¥é ­èª\9e "$1" ã\81\8cç\84¡å\8a¹です。
-アスキー字(a-z, A-Z)、数字(0-9)、下線(_)、ハイフン(-)のみを使用してください。',
+       'config-invalid-db-server-oracle' => '「$1」は無効なデータベース TNS です。
+アスキー英字(a-z、A-Z)、数字(0-9)、アンダーバー(_)、ドット(.)のみを使用してください。',
+       'config-invalid-db-name' => '「$1」は無効なデータベース名です
+アスキー英字(a-z、A-Z)、数字(0-9)、アンダーバー(_)、ハイフン(-)のみを使用してください。',
+       'config-invalid-db-prefix' => 'ã\80\8c$1ã\80\8dã\81¯ç\84¡å\8a¹ã\81ªã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹æ\8e¥é ­èª\9eです。
+アスキー字(a-z, A-Z)、数字(0-9)、下線(_)、ハイフン(-)のみを使用してください。',
        'config-connection-error' => '$1。
 
 以下のホスト名、ユーザ名、パスワードをチェックして、再度試してみてください。',
-       'config-invalid-schema' => 'メディアウィキ"$1"における無効な図式です。
-アスキー文字(a-z, A-Z)、数字(0-9)、下線(_)のみを使用してください。',
+       'config-invalid-schema' => 'メディアウィキ「$1」における無効な図式です。
+アスキー英字(a-z、A-Z)、数字(0-9)、下線(_)のみを使用してください。',
        'config-postgres-old' => 'PostgreSQLの$1あるいはそれ以降が必要で、いまのバージョンは$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' => 'ã\83\87ã\83¼ã\82¿ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ª<code><nowiki>$1</nowiki></code>ã\82\92ä½\9cæ\88\90ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82親ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ª<code><nowiki>$2</nowiki></code>ã\81¯ã\80\81ã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ã\83¼ã\81\8bã\82\89æ\9b¸ã\81\8dè¾¼ã\81¿ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\81§ã\81\97ã\81\9fã\80\82
 
-インストール機能は、実行しているウェブサーバのユーザーを特定しました。
\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®ã\83¦ã\83¼ã\82¶ã\83¼ã\82\92ç\89¹å®\9aã\81\97ã\81¾ã\81\97ã\81\9fã\80\82
 続行するには、<code><nowiki>$3</nowiki></code>ディレクトリを書き込み可能にしてください。
 UnixあるいはLinux上では、以下を実行してください:
 
@@ -9598,19 +9615,19 @@ chmod g+w $3</pre>',
        'config-sqlite-parent-unwritable-nogroup' => 'データディレクトリ<code><nowiki>$1</nowiki></code>を作成できません。親ディレクトリ<code><nowiki>$2</nowiki></code>は、ウェブサーバから書き込みできませんでした。
 
 インストール機能は、実行しているウェブサーバのユーザーを特定できませんでした。
-ç¶\9aè¡\8cã\81\99ã\82\8bã\81«ã\81¯ã\80\81<code><nowiki>$3</nowiki></code>ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92ã\80\81ã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ï¼\88ã\81¨ä»\96ã\81®ã\83¦ã\83¼ã\82¶ï¼\81ï¼\89ã\81\8bã\82\89ã\82°ã\83­ã\83¼ã\83\90ã\83«ã\81«æ\9b¸ã\81\8dè¾¼ã\81¿å\87ºæ\9d¥るようにしてください。
+ç¶\9aè¡\8cã\81\99ã\82\8bã\81«ã\81¯ã\80\81<code><nowiki>$3</nowiki></code>ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\82\92ã\80\81ã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ï¼\88ã\81¨ä»\96ã\81®ã\83¦ã\83¼ã\82¶ï¼\81ï¼\89ã\81\8bã\82\89ã\82°ã\83­ã\83¼ã\83\90ã\83«ã\81«æ\9b¸ã\81\8dè¾¼ã\82\81るようにしてください。
 UnixあるいはLinux上では、以下を実行してください:
 
 <pre>cd $2
 mkdir $3
 chmod a+w $3</pre>',
-       'config-sqlite-mkdir-error' => 'ã\83\87ã\83¼ã\82¿ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼"$1"ã\82\92ä½\9cæ\88\90ã\81\97ã\81\9fã\81\93ã\81¨ã\81«ã\82\88ã\82\8bã\82¨ã\83©ã\83¼
-場所をチェックして、再度試してください。',
-       'config-sqlite-dir-unwritable' => 'ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼"$1"ã\82\92æ\9b¸ã\81\8dè¾¼ã\82\80ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dません。
\83\91ã\83¼ã\83\9fã\83\83ã\82·ã\83§ã\83³ã\82\92å¤\89æ\9b´ã\81\99ã\82\8cã\81°ã\80\81ã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ã\83¼ã\81\8cæ\9b¸ã\81\8dè¾¼ã\81¿å\8f¯è\83½ã\81¨ã\81ªã\82\8aã\81¾ã\81\99ã\80\82å\86\8d度試してください。',
+       'config-sqlite-mkdir-error' => 'ã\83\87ã\83¼ã\82¿ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\80\8c$1ã\80\8dã\81®ä½\9cæ\88\90中ã\81«ã\82¨ã\83©ã\83¼ã\81\8cç\99ºç\94\9fã\81\97ã\81¾ã\81\97ã\81\9f
+場所を確認してから、再度試してください。',
+       'config-sqlite-dir-unwritable' => 'ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\80\8c$1ã\80\8dã\81«æ\9b¸ã\81\8dè¾¼ã\82\81ません。
\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ã\83¼ã\81\8cæ\9b¸ã\81\8dè¾¼ã\82\81ã\82\8bã\82\88ã\81\86ã\81«ã\83\91ã\83¼ã\83\9fã\83\83ã\82·ã\83§ã\83³ã\82\92å¤\89æ\9b´ã\81\97ã\81¦ã\81\8bã\82\89ã\80\81度試してください。',
        'config-sqlite-connection-error' => '$1。
 
»¥ä¸\8bã\81®ã\83\87ã\83¼ã\82¿ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\83¼ã\81¨ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹ã\82\92ã\83\81ã\82§ã\83\83ã\82¯ã\81\97、再度試してみてください。',
¸\8bè¨\98ã\81®ã\83\87ã\83¼ã\82¿ã\83\87ã\82£ã\83¬ã\82¯ã\83\88ã\83ªã\81¨ã\83\87ã\83¼ã\82¿ã\83\99ã\83¼ã\82¹å\90\8dã\82\92確èª\8dã\81\97ã\81¦ã\81\8bã\82\89、再度試してみてください。',
        'config-sqlite-readonly' => 'ファイル<code>$1</code>は書き込み不能です。',
        'config-sqlite-cant-create-db' => 'データベースファイル<code>$1</code>を作成できませんでした。',
        'config-sqlite-fts3-downgrade' => 'PHPはFTS3のサポート、テーブルのダウングレードが無効です。',
@@ -9633,7 +9650,7 @@ chmod a+w $3</pre>',
        'config-db-web-account-same' => 'インストールのために同じアカウントを使用してください',
        'config-db-web-create' => '既に存在していないのであれば、アカウントを作成してください',
        'config-db-web-no-create-privs' => 'あなたがインストールのために定義したアカウントは、アカウント作成のための特権としては不充分です。
-あなたがここで特定したアカウントはすでに存在していなければなりません。',
+あなたがここで指定したアカウントは既に存在している必要があります。',
        'config-mysql-engine' => 'ストレージエンジン:',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
@@ -9641,16 +9658,16 @@ chmod a+w $3</pre>',
 
 '''MyISAM'''は、利用者が1人の場合、あるいは読み込み専用でインストールする場合に、より処理が早くなるでしょう。
 ただし、MyISAMのデータベースは、InnoDBより高頻度で破損する傾向があります。",
-       'config-mysql-charset' => 'データベースの文字セット:',
+       'config-mysql-charset' => 'データベースの文字セット',
        'config-mysql-binary' => 'バイナリ',
        'config-mysql-utf8' => 'UTF-8',
-       'config-mysql-charset-help' => "'''バイナリー式'''では、MediaWikiは、UTF-8テキストを、データベースのバイナリーフィールドに格納します。
-これは、MySQLのUTF-8形式より効率的で、ユニコード文字の全範囲を利用することが出来るようになります。
+       'config-mysql-charset-help' => "'''バイナリー式'''では、MediaWikiは、UTF-8テキストを、データベースのバイナリーフィールドに格納します。
+これは、MySQLのUTF-8形式より効率的で、Unicode文字の全範囲を利用できるようになります。
 
-'''UTF-8å½¢å¼\8f'''ã\81§ã\81¯ã\80\81MySQLã\81¯ã\80\81ã\81ªã\82\93ã\81®æ\96\87å­\97é\9b\86å\90\88ã\81\8cã\83\87ã\83¼ã\82¿ã\81®ã\81ªã\81\8bã\81«å\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\82\8bã\81\8bã\82\92ç\9f¥ã\82\8a、それに対して適切な提示と変換をするでしょうが、
+'''UTF-8å½¢å¼\8f'''ã\81§ã\81¯ã\80\81MySQLã\81¯ã\80\81ã\83\87ã\83¼ã\82¿å\86\85ã\81§ã\81©ã\81®æ\96\87å­\97é\9b\86å\90\88ã\82\92使ç\94¨ã\81\97ã\81¦ã\81\84ã\82\8bã\81\8bã\82\92ç\9f¥ã\81£ã\81¦ã\81\84ã\81¦、それに対して適切な提示と変換をするでしょうが、
 [//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' => 'ã\81\93ã\81®äº\8b象ã\81¯ã\83\96ã\83©ã\82¦ã\82¶ã\81®ã\82¿ã\82¤ã\83\88ã\83«ã\83\90ã\83¼ã\81¨ä»\96ã\81®æ§\98ã\80\85ã\81ªå ´æ\89\80ã\81«ã\81\8aã\81\84ã\81¦å\87ºç\8f¾ã\81\99る。',
+       'config-site-name-help' => 'ã\81\93ã\81®äº\8b象ã\81¯ã\83\96ã\83©ã\82¦ã\82¶ã\83¼ã\81®ã\82¿ã\82¤ã\83\88ã\83«ã\83\90ã\83¼ã\81¨ä»\96ã\81®ã\81\95ã\81¾ã\81\96ã\81¾ã\81ªå ´æ\89\80ã\81«ç\8f¾ã\82\8cる。',
        'config-site-name-blank' => 'サイト名を入力してください。',
        'config-project-namespace' => 'プロジェクト名前空間:',
        'config-ns-generic' => 'プロジェクト',
@@ -9673,15 +9690,15 @@ chmod a+w $3</pre>',
 別のユーザ名を指定してください。',
        'config-admin-password-blank' => '管理者アカウントのパスワードを入力してください。',
        'config-admin-password-same' => 'ユーザ名と同じパスワードは使えません。',
-       'config-admin-password-mismatch' => '入力されたつのパスワードが一致しません。',
+       'config-admin-password-mismatch' => '入力された2つのパスワードが一致しません。',
        'config-admin-email' => 'メールアドレス:',
-       'config-admin-email-help' => '電子メールアドレスを入力してください。他のユーザーからの電子メールの受け取りと、パスワードのリセット、ウォッチリストに登録したページの更新通知に用いられます。',
+       'config-admin-email-help' => 'メールアドレスを入力してください。他の利用者からのメールの受け取り、パスワードのリセット、ウォッチリストに登録したページの更新通知に使用します。空欄のままにすることもできます。',
        'config-admin-error-user' => '"<nowiki>$1</nowiki>"という名前の管理者を作成する際に内部エラーが発生しました。',
        'config-admin-error-password' => '管理者"<nowiki>$1</nowiki>"のパスワードを設定する際に内部エラーが発生しました: <pre>$2</pre>',
        'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce リリース告知のメーリングリスト]を購読する。',
        'config-subscribe-help' => 'これは、リリースの告知(重要なセキュリティに関する案内を含む)に使われる、低容量のメーリングリストです。
 このメーリングリストを購読して、新しいバージョンが出た場合にMediaWikiを更新してください。',
-       'config-almost-done' => 'ã\81\93ã\82\8cã\81§ã\81»ã\81¨ã\82\93ã\81©ã\81\8açµ\82ã\81\84ã\81§ã\81\99
+       'config-almost-done' => 'ã\81\93ã\82\8cã\81§ã\81»ã\81¼çµ\82ã\82\8fã\82\8aã\81¾ã\81\97ã\81\9f
 残りの設定を飛ばして、今すぐにウィキをインストールできます。',
        'config-optional-continue' => '私にもっと質問してください。',
        'config-optional-skip' => 'もう飽きてしまったので、とにかくウィキをインストールしてください。',
@@ -9693,20 +9710,22 @@ chmod a+w $3</pre>',
        'config-profile-help' => "ウィキは、たくさんの人が可能な限りそのウィキを編集できるとき、最も優れた働きをします。
 MediaWikiでは、最近の更新を確認し、神経質な、もしくは悪意を持った利用者からの損害を差し戻すことが、簡単にできます。
 
-しかし一方で、MediaWikiは、さらに様々な形態でもの利用も優れていると言われています。また、時には、すべての人にウィキ手法の利点を説得させるのは容易ではないかもしれません。
+しかし一方で、MediaWikiは、さらにさまざまな形態での利用も優れていると言われています。また、時には、すべての人にウィキ手法の利点を説得させるのは容易ではないかもしれません。
 そこで、選択肢があります。
 
-'''{{int:config-profile-wiki}}'''ã\81¯ã\80\81ã\83­ã\82°ã\82¤ã\83³ã\82\92ã\81\9bã\81\9aã\81¨ã\82\82ã\80\81誰ã\81§ã\82\82ç·¨é\9b\86ã\81\8cå\8f¯è\83½ã\81ªものです。
+'''{{int:config-profile-wiki}}'''ã\81¯ã\80\81ã\83­ã\82°ã\82¤ã\83³ã\81\97ã\81ªã\81\8fã\81¦ã\82\82ã\80\81誰ã\81§ã\82\82ç·¨é\9b\86ã\81§ã\81\8dã\82\8bものです。
 '''{{int:config-profile-no-anon}}'''なウィキは、各編集に対してより強い説明責任を付与しますが、気軽な投稿を阻害するかもしれません。
 
-'''{{int:config-profile-fishbowl}}'''ã\81®ã\82¦ã\82£ã\82­ã\81¯ã\80\81æ\89¿èª\8dã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85ã\81¯ç·¨é\9b\86ã\81§ã\81\8dã\80\81ä¸\80æ\96¹ã\80\81ä¸\80è\88¬ã\81®äººã\81¯ã\83\9aã\83¼ã\82¸ï¼\88ã\81¨ã\81\9dã\81®å±¥æ­´ï¼\89ã\81®é\96²è¦§ã\81\8cå\8f¯è\83½ã\81§す。
-'''{{int:config-profile-private}}'''ã\81¯ã\80\81æ\89¿èª\8dã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85ã\81\8cã\83\9aã\83¼ã\82¸ã\82\92é\96²è¦§å\8f¯è\83½ã\81§ã\80\81ã\81\9dã\81®ã\82°ã\83«ã\83¼ã\83\97ã\81\8cç·¨é\9b\86å\8f¯è\83½ã\81§す。
+'''{{int:config-profile-fishbowl}}'''ã\81®ã\82¦ã\82£ã\82­ã\81¯ã\80\81æ\89¿èª\8dã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85ã\81\8cç·¨é\9b\86ã\81§ã\81\8dã\80\81ä¸\80æ\96¹ã\80\81ä¸\80è\88¬ã\81®äººã\81¯ã\83\9aã\83¼ã\82¸ï¼\88ã\81¨ã\81\9dã\81®å±¥æ­´ï¼\89ã\82\92é\96²è¦§ã\81§ã\81\8dã\81¾す。
+'''{{int:config-profile-private}}'''ã\81¯ã\80\81æ\89¿èª\8dã\81\95ã\82\8cã\81\9få\88©ç\94¨è\80\85ã\81®ã\81¿ã\81\8cã\83\9aã\83¼ã\82¸ã\82\92é\96²è¦§ã\81§ã\81\8dã\80\81ã\81\9dã\81®ã\82°ã\83«ã\83¼ã\83\97ã\81\8cç·¨é\9b\86ã\81§ã\81\8dã\81¾す。
 
-より複雑な利用者権限の設定は、インストール後に設定可能です。詳細は[//www.mediawiki.org/wiki/Manual:User_rights 関連するマニュアル]をご覧ください。",
+より複雑な利用者権限の設定は、インストール後に設定できます。詳細は[//www.mediawiki.org/wiki/Manual:User_rights 関連するマニュアル]をご覧ください。",
        'config-license' => '著作権とライセンス:',
        'config-license-none' => 'ライセンスのフッターを付けない',
        'config-license-cc-by-sa' => 'クリエイティブ・コモンズ 表示-継承',
+       'config-license-cc-by' => 'クリエイティブ・コモンズ 表示',
        'config-license-cc-by-nc-sa' => 'クリエイティブ・コモンズ 表示-非営利-継承',
+       'config-license-gfdl' => 'GNUフリー文書利用許諾契約書1.3以降',
        'config-license-pd' => 'パブリック・ドメイン',
        'config-license-cc-choose' => 'その他のクリエイティブ・コモンズ・ライセンスを選択する',
        'config-license-help' => "多くの公開ウィキでは、すべての寄稿物が[http://freedomdefined.org/Definition フリーライセンス]の元に置かれています。
@@ -9715,41 +9734,42 @@ MediaWikiでは、最近の更新を確認し、神経質な、もしくは悪
 
 ウィキペディアにあるテキストをあなたのウィキで利用し、逆にあなたのウィキにあるテキストをウィキペディアに複製することを許可したい場合には、'''クリエイティブ・コモンズ 表示-継承'''を選択するべきです。
 
-GNUフリー文書利用許諾契約書はウィキペディアが採用していた古いライセンスです。
-今も有効なライセンスではありますが、再利用や解釈を難しくする条項が含まれています。",
-       'config-email-settings' => '電子メールの設定',
-       'config-enable-email' => '電子メール送信の有効',
-       'config-enable-email-help' => "もし、電子メールの作動を欲するならば、[http://www.php.net/manual/en/mail.configuration.php PHP's mail settings]のページが正確に設定されている必要がある。
-もし、電子メールに関するいかなる機能を欲しないのであれば、ここで無効にできます。",
-       'config-email-user' => 'ユーザ間同士の電子メールの許可',
-       'config-email-user-help' => '設定において有効になっている場合、全てのユーザがお互いに電子メールのやりとりを行うことを許可する。',
+ウィキペディアは以前、GNUフリー文書利用許諾契約書(GFDL)を使用していました。
+GFDL は有効なライセンスですが、内容を理解するのは困難です。
+また、GFDL の元に置かれているコンテンツの再利用も困難です。",
+       'config-email-settings' => 'メールの設定',
+       'config-enable-email' => 'メール送信を有効にする',
+       'config-enable-email-help' => 'メールを使用したい場合は、[http://www.php.net/manual/en/mail.configuration.php PHP のメール設定]が正しく設定されている必要があります。
+メールの機能を使用しない場合は、ここで無効にすることができます。',
+       'config-email-user' => '利用者間のメールを有効にする',
+       'config-email-user-help' => '設定において有効になっている場合、すべてのユーザがお互いにメールのやりとりを行うことを許可する。',
        'config-email-usertalk' => 'ユーザのトークページにおける通知を有効にする',
        'config-email-usertalk-help' => '設定で有効にしているならば、ユーザのトークページの変更の通知を受けることをユーザに許可する。',
        'config-email-watchlist' => 'ウォッチリストの通知を有効にする',
-       'config-email-watchlist-help' => '設定で有効にしているならば、閲覧されたページに関する通知を受け取ることをユーザに許可する。',
-       'config-email-auth' => '電子メールの認証を有効にする',
-       'config-email-auth-help' => "ã\81\93ã\81®é\81¸æ\8a\9eè\82¢ã\81\8cæ\9c\89å\8a¹å\8c\96ã\81\95ã\82\8cã\82\8bã\81¨ã\80\81å\88©ç\94¨è\80\85ã\81\8cé\9b»å­\90ã\83¡ã\83¼ã\83«ã\81®アドレスを設定あるいは変更したときに送信されるリンクにより、そのアドレスを確認しなければならなくなります。
+       'config-email-watchlist-help' => '利用者が設定で有効にしている場合、閲覧されたページに関する通知を受け取ることを許可する。',
+       'config-email-auth' => 'メールの認証を有効にする',
+       'config-email-auth-help' => "ã\81\93ã\81®é\81¸æ\8a\9eè\82¢ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8bã\81¨ã\80\81å\88©ç\94¨è\80\85ã\81\8cã\83¡ã\83¼ã\83«アドレスを設定あるいは変更したときに送信されるリンクにより、そのアドレスを確認しなければならなくなります。
 認証済みのアドレスだけが、他の利用者からのメールや、変更通知のメールを受け取ることができます。
 公開ウィキでは、メール機能による潜在的な不正利用の防止のため、この選択肢を設定することが'''推奨'''されます。",
-       'config-email-sender' => '電子メールのアドレスを返す:',
-       'config-email-sender-help' => 'é\80\81ä¿¡ã\83¡ã\83¼ã\83«ã\81®è¿\94ä¿¡ã\82¢ã\83\89ã\83¬ã\82¹ã\81¨ã\81\97ã\81¦å\88©用するメールアドレスを入力してください。
-宛先不明の場合、このアドレスにその通知が送信されます。
-多くのメールサーバーでは、少なくともドメイン名の一部が有効であることが必要になっています。',
+       'config-email-sender' => '返信メールアドレス:',
+       'config-email-sender-help' => 'é\80\81ä¿¡ã\83¡ã\83¼ã\83«ã\81§è¿\94ä¿¡å\85\88ã\81¨ã\81\97ã\81¦ä½¿用するメールアドレスを入力してください。
+このアドレスは、宛先不明の場合の通知の宛先になります。
+多くのメールサーバーでは、少なくともドメイン名部分は有効である必要があります。',
        'config-upload-settings' => '画像およびファイルのアップロード',
        'config-upload-enable' => 'ファイルのアップロードを有効にする',
-       'config-upload-help' => 'ファイルのアップロードは潜在的にあなたのサーバにセキュリティ上の危険をさらします。
+       'config-upload-help' => 'ファイルのアップロードは潜在的にあなたのサーバにセキュリティ上の危険をさらします。
 更なる情報のために、マニュアルの[//www.mediawiki.org/wiki/Manual:Security security section] を読むことをすすめます。
 
\83\95ã\82¡ã\82¤ã\83«ã\81®ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\82\92å\8f¯è\83½ã\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«ã\82\88ã\82\8aã\80\81ã\82¦ã\82§ã\83\96ã\82µã\83¼ã\83\90ã\81¯ã\81\9dã\81\93ã\81«æ\9b¸ã\81\8dè¾¼ã\81¿ã\81\8cå\8f¯è\83½になります。
\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¯ã\81\9dã\81\93ã\81«æ\9b¸ã\81\8dè¾¼ã\82\81ã\82\8bã\82\88ã\81\86になります。
 そして、このオプションを有効にしてください。',
        'config-upload-deleted' => '削除されたファイルのためのディレクトリ:',
        'config-upload-deleted-help' => '削除されるファイルを保存するためのディレクトリを選択してください。
 これがウェブからアクセスできないことが理想です。',
        'config-logo' => 'ロゴのURL:',
-       'config-logo-help' => 'MediaWikiã\81®æ\9cªè¨­å®\9aç\8a¶æ\85\8bã\81®ã\82¹ã\82­ã\83³では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。
-適切なサイズの画像をアップロードし、そのURLをここに入力してください。
+       'config-logo-help' => 'MediaWikiã\81®æ\97¢å®\9aã\81®å¤\96è£\85では、サイドバー上部に135x160ピクセルのロゴ用の余白があります。
\81©å\88\87ã\81ªã\82µã\82¤ã\82ºã\81®ç\94»å\83\8fã\82\92ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81¦ã\80\81ã\81\9dã\81®URLã\82\92ã\81\93ã\81\93ã\81«å\85¥å\8a\9bã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82
 
\82\82ã\81\97ã\83­ã\82´ã\81\8cè¦\81ã\82\89ã\81ªã\81\84ã\81ªã\82\89ã\81°、このボックスを空白のままにしてください。',
\83­ã\82´ã\81\8cä¸\8dè¦\81ã\81®å ´å\90\88ã\81¯、このボックスを空白のままにしてください。',
        'config-instantcommons' => 'InstantCommons機能を有効にする',
        'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons InstantCommons]は、[//commons.wikimedia.org/ ウィキメディア・コモンズ]のサイトで見つかった画像や音声、その他のメディアをウィキ上で利用することができるようになる機能です。
 これを有効化するには、MediaWikiはインターネットに接続できなければなりません。
@@ -9783,18 +9803,20 @@ GNUフリー文書利用許諾契約書はウィキペディアが採用して
        '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-commit' => '変更を送信',
        'config-install-user' => 'データベースユーザを作成する',
        'config-install-user-grant-failed' => 'ユーザー「$1」に許可を与えることに失敗しました。:$2',
        'config-install-tables' => 'テーブルの作成',
-       'config-install-tables-exist' => "'''è­¦å\91\8a'''ï¼\9aMediaWikiã\83\86ã\83¼ã\83\96ã\83«ã\81\8cã\80\81ã\81\99ã\81§ã\81«å­\98å\9c¨ã\81\97ã\81¦ã\81\84るようです。
+       'config-install-tables-exist' => "'''è­¦å\91\8a'''ï¼\9aMediaWikiã\83\86ã\83¼ã\83\96ã\83«ã\81¯æ\97¢ã\81«å­\98å\9c¨ã\81\99るようです。
 作成を飛ばします。",
        'config-install-tables-failed' => "'''エラー''':テーブルの作成が、次のエラーにより失敗しました:$1",
        'config-install-interwiki' => '既定のウィキ間テーブルを導入しています',
        'config-install-interwiki-list' => 'ファイル<code>interwiki.list</code>を見つけることができませんでした。',
-       'config-install-interwiki-exists' => "'''警告''':ウィキ間テーブルはすでに登録されているようです。
+       'config-install-interwiki-exists' => "'''警告''':ウィキ間テーブルはに登録されているようです。
 既定のテーブルを無視します。",
        'config-install-keys' => '秘密鍵を生成する',
        'config-install-sysop' => '管理者のユーザーアカウントを作成する',
@@ -9806,9 +9828,9 @@ MediaWikiのインストールに成功しました。
 <code>LocalSettings.php</code>ファイルが生成されました。
 すべての設定がそのファイルに含まれています。
 
-それをダウンロードし、ウィキをインストールした基準ディレクトリー(index.phpと同じディレクトリー)に置く必要があります。ダウンロードは自動的に開始しているはずです。
+それをダウンロードし、ウィキをインストールした基準ディレクトリ(index.phpと同じディレクトリ)に設置する必要があります。ダウンロードは自動的に開始しているはずです。
 
\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\8cé\96\8bå§\8bã\81\97ã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\80\81ã\81¾ã\81\9fã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\82\92ã\82­ã\83£ã\83³ã\82»ã\83«ã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81以ä¸\8bのリンクからダウンロードを再開することができます:
\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\81\8cé\96\8bå§\8bã\81\97ã\81¦ã\81\84ã\81ªã\81\84å ´å\90\88ã\80\81ã\81¾ã\81\9fã\83\80ã\82¦ã\83³ã\83­ã\83¼ã\83\89ã\82\92ã\82­ã\83£ã\83³ã\82»ã\83«ã\81\97ã\81\9få ´å\90\88ã\81¯ã\80\81ä¸\8bè¨\98のリンクからダウンロードを再開することができます:
 
 $3
 
@@ -9817,7 +9839,7 @@ $3
 それを完了すれば、'''[$2 ウィキに入る]'''ことができます。",
        'config-download-localsettings' => 'LocalSettings.phpをダウンロード',
        'config-help' => 'ヘルプ',
-       'mainpagetext' => "'''MediaWikiが正常にインストールされました。'''",
+       'mainpagetext' => "'''MediaWiki のインストールに成功しました。'''",
        'mainpagedocfooter' => 'ウィキソフトウェアの使い方に関する情報は[//meta.wikimedia.org/wiki/Help:Contents 利用者案内]を参照してください。
 
 == はじめましょう ==
@@ -9994,33 +10016,60 @@ $messages['kn'] = array(
  * @author 아라
  */
 $messages['ko'] = array(
-       'config-desc' => 'MediaWiki 설치 마법사',
+       'config-desc' => '미디어위키 설치 마법사',
        'config-title' => 'MediaWiki $1 설치',
        'config-information' => '정보',
        'config-localsettings-upgrade' => '<code>LocalSettings.php</code> 파일이 감지되었습니다.
 이 설치를 업그레이드하려면 아래 상자에 <code>$wgUpgradeKey</code>의 값을 입력해주세요.
 LocalSettings.php에 찾으세요.',
-       'config-localsettings-cli-upgrade' => 'LocalSettings.php 파일이 감지되었습니다. 이 설치를 업그레이드하려면 update.php를 대신 실행하세요',
+       'config-localsettings-cli-upgrade' => 'LocalSettings.php 파일이 감지되었습니다.
+이 설치를 업그레이드하려면 update.php를 대신 실행하세요',
        'config-localsettings-key' => '업그레이드 키:',
        'config-localsettings-badkey' => '제공한 키가 잘못되었습니다.',
-       'config-upgrade-key-missing' => 'MediaWiki의 기존 설치가 감지되었습니다.
+       'config-upgrade-key-missing' => '미디어위키의 기존 설치가 감지되었습니다.
 이 설치를 업그레이드하려면 LocalSettings.php의 아래에 다음 줄을 넣으세요:
 
 $1',
+       'config-localsettings-incomplete' => '기존 LocalSettings.php가 완전하지 않은 것 같습니다.
+$1 변수가 설정되어 있지 않습니다.
+이 변수가 설정되도록 LocalSettings.php를 변경하고 "계속"을 클릭하세요.',
+       'config-localsettings-connection-error' => 'LocalSettings.php 또는 AdminSettings.php에 지정한 설정을 사용하여 데이터베이스에 연결할 때 오류가 발생했습니다. 이러한 설정을 수정하고 다시 시도하세요.
+
+$1',
+       '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-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-readme' => '읽어보기',
+       'config-page-releasenotes' => '배포 노트',
+       'config-page-copying' => '전문',
+       'config-page-upgradedoc' => '업그레이드하기',
+       'config-page-existingwiki' => '기존 위키',
        'config-help-restart' => '당신이 입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?',
        'config-restart' => '예, 다시 시작합니다.',
        'config-welcome' => '=== 사용 환경 검사 ===
 이 환경이 미디어위키 설치에 적합할 지 기본 검사를 실행합니다.
\84¤ì¹\98 ì¤\91 ë\8f\84ì\9b\80ì\9d´ í\95\84ì\9a\94í\95\98ë\8b¤ë©´ ì\9d´ ê²\80ì\82¬ ê²°ê³¼ë¥¼ í\95¨ê»\98 ì \9cê³µí\95´ì£¼ì\85\94야 합니다.',
-       'config-copyright' => "=== ì \80ì\9e\91ê¶\8c ë°\8f ì\82¬용 약관 ===
\84¤ì¹\98 ì¤\91 ë\8f\84ì\9b\80ì\9d´ í\95\84ì\9a\94í\95\98ë\8b¤ë©´ ì\9d´ ê²\80ì\82¬ ê²°ê³¼ë¥¼ í\95¨ê»\98 ì \9cê³µí\95´ì£¼ì\96´야 합니다.',
+       'config-copyright' => "=== ì \80ì\9e\91ê¶\8c ë°\8f ì\9d´용 약관 ===
 
 $1
 
 이 프로그램이 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''.
 자세한 내용은 GNU 일반 공중 사용 허가서를 참고하십시오.
 
-당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다; 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
+당신은 이 프로그램을 통해 <doclink href=Copying>GNU 일반 공중 사용 허가서 전문</doclink>을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [http://www.gnu.org/copyleft/gpl.html 온라인으로 읽어보시기] 바랍니다.",
+       'config-sidebar' => '* [//www.mediawiki.org 미디어위키 홈]
+* [//www.mediawiki.org/wiki/Help:Contents 사용자 가이드]
+* [//www.mediawiki.org/wiki/Manual:Contents 관리자 가이드]
+* [//www.mediawiki.org/wiki/Manual:FAQ FAQ]
+----
+* <doclink href=Readme>읽어보기</doclink>
+* <doclink href=ReleaseNotes>배포 노트</doclink>
+* <doclink href=Copying>전문</doclink>
+* <doclink href=UpgradeDoc>업그레이드하기</doclink>',
        'config-env-good' => '환경이 확인되었습니다.
-MediaWiki를 설치할 수 있습니다.',
+미디어위키를 설치할 수 있습니다.',
        'config-env-bad' => '환경이 확인되었습니다.
-MediaWiki를 설치할 수 없습니다.',
+미디어위키를 설치할 수 없습니다.',
        'config-env-php' => 'PHP $1(이)가 설치되었습니다.',
        'config-env-php-toolow' => 'PHP $1(이)가 설치되었습니다.
 하지만 미디어위키는 PHP $2 이상이 필요합니다.',
-       'config-ctype' => "'''심각''': PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]에 대해 지원하여 컴파일해야 합니다.",
+       'config-unicode-using-utf8' => '유니코드 정규화에 대해 Brion Vibber의 utf8_normalize.so를 사용합니다.',
+       'config-unicode-using-intl' => '유니코드 정규화에 대해 [http://pecl.php.net/intl intl PECL 확장]을 사용합니다.',
+       'config-unicode-pure-php-warning' => "'''경고''': [http://pecl.php.net/intl intl PECL 확장]은 PHP만으로 구현하는 데에는 느려질 정도로 성능이 떨어지는 유니코드 정규화를 처리할 수 없습니다.
+높은 트래픽의 사이트에서 실행하려면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 유니코드 정규화]에 대해 약간 참고해야 합니다.",
+       'config-unicode-update-warning' => "'''경고''': 유니코드 정규화 래퍼의 설치된 버전은 [http://site.icu-project.org/ ICU 프로젝트]의 라이브러리의 이전 버전을 사용합니다.
+만약 유니코드를 사용하는 것에 대해 우려가 된다면 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 업그레이드]해야합니다.",
+       'config-no-db' => '적절한 데이터베이스 드라이버를 찾을 수 없습니다! PHP에 데이터베이스 드라이버를 설치해야 합니다.
+다음 데이터베이스 유형을 지원합니다 : $1.
+
+호스팅을 공유하고 있다면 적절한 데이터베이스 드라이버를 설치하도록 호스팅 제공 업체에 문의하세요.
+PHP를 직접 컴파일할 경우 데이터베이스 클라이언트를 사용하여 활성화하도록 다시 설정하세요. 예들 들어 <code>./configure --with-mysql</code>을 사용합니다.
+데비안이나 우분트 패키지에서 PHP를 설치했다면 php-mysql 모듈도 설치해야 합니다.',
+       'config-outdated-sqlite' => "'''경고''': SQLite 필요한 최소 $2 버전보다 낮은 $1(이)가 있습니다. SQLite는 사용할 수 없습니다.",
+       'config-no-fts3' => "'''경고''': SQLite는 [//sqlite.org/fts3.html FTS3 모듈] 없이 컴파일되어, 검색 기능은 백엔드에 사용할 수 없습니다.",
+       'config-register-globals' => "'''경고: PHP의 <code>[http://php.net/register_globals register_globals]</code> 옵션이 활성화되어 있습니다.'''
+'''가능하면 이를 비활성화하십시오.'''
+미디어위키는 작동하지만 서버에 잠재적인 보안 취약점에 노출됩니다.",
+       'config-magic-quotes-runtime' => "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]이 활성합니다!'''
+이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.
+설치할 수 없습니다. 또는 미디어위키가 사용하지 않는 이 옵션을 비활성화하십시오.",
+       'config-magic-quotes-sybase' => "'''치명: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase]이 활성합니다!'''
+이 옵션은 데이터를 입력하는 데 예기치 않는 손상이 일어납니다.
+설치할 수 없습니다. 또는 미디어위키가 사용하지 않는 이 옵션을 비활성화하십시오.",
+       'config-mbstring' => "'''치명: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]이 활성합니다!'''
+이 옵션은 오류가 발생하고 데이터를 입력하는 데 예기치 않는 손상이 일어날 수 있습니다.
+설치할 수 없습니다. 또는 미디어위키가 사용하지 않는 이 옵션을 비활성화하십시오.",
+       'config-ze1' => "'''치명: [http://www.php.net/manual/en/ini.core.php zend.ze1_compatibility_mode]이 활성합니다!'''
+이 옵션은 미디어위키에 끔찍한 버그를 일으킵니다.
+설치할 수 없습니다. 또는 미디어위키가 사용하지 않는 이 옵션을 비활성화하십시오.",
+       'config-safe-mode' => "'''경고:''' [http://www.php.net/features.safe-mode 안전 모드]이 활성합니다!
+이는 특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
+       'config-xml-bad' => 'PHP의 XML 모듈이 없습니다.
+미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.
+Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
+       'config-pcre' => 'PCRE 지원 모듈이 없는 것 같습니다.
+미디어위키는 Perl 호환 정규 표현식을 작동시켜야 합니다.',
+       'config-pcre-no-utf8' => "'''치명''': PHP의 PCRE 모듈은 RCRE_UTF8 지원 없이 컴파일된 것 같습니다.
+미디어위키가 제대로 작동하려면 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]를 찾을 수 없습니다.
+개체 캐싱이 활성화되지 않습니다.",
+       'config-mod-security' => "'''경고''': 웹 서버에 [http://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 콘텐츠를 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.
+[http://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
        'config-diff3-bad' => 'GNU diff3를 찾을 수 없습니다.',
        'config-imagemagick' => 'ImageMagick를 찾았습니다: <code>$1</code>.
 올리기를 활성화할 경우 그림 섬네일이 활성화될 것입니다.',
        'config-gd' => '내장된 GD 그래픽 라이브러리를 찾았습니다.
 올리기를 활성화할 경우 그림 섬네일이 활성화될 것입니다.',
-       'config-brokenlibxml' => '시스템에 버그가 있는 PHP와 libxml2의 조합이 있으며 MediaWiki나 다른 웹 어플리케이션에 숨겨진 데이터 손상을 일으킬 수 있습니다.
+       'config-no-scaling' => 'GD 라이브러리나 ImageMagick를 찾을 수 없습니다.
+그림 섬네일이 비활성화될 것입니다.',
+       'config-no-uri' => "'''오류:''' 현재 URI를 확인할 수 없습니다.
+설치가 중단되었습니다.",
+       'config-no-cli-uri' => "'''경고''': 기본값을 사용하여 --scriptpath를 지정하지 않았습니다: <code>$1</code>.",
+       'config-using-server' => '"<nowiki>$1</nowiki>"(을)를 서버 이름으로 사용합니다.',
+       'config-using-uri' => '"<nowiki>$1$2</nowiki>"(을)를 서버 URL로 사용합니다.',
+       'config-uploads-not-safe' => "'''경고:''' 올리기에 대한 기본 디렉토리(<code>$1</code>)는 임의의 스크립트 실행에 취약합니다.
+미디어위키는 보안 위협에 대한 모든 올린 파일을 검사하지만, 이는 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
+       'config-no-cli-uploads-check' => "'''경고:''' 올리기에 대한 기본 디렉토리(<code>$1</code>)는 CLI를 설치하는 동안 임의의 스크립트 실행에 대한 취약점에 대해 검사되지 않습니다.",
+       'config-brokenlibxml' => '시스템에 버그가 있는 PHP와 libxml2의 조합이 있으며 미디어위키나 다른 웹 어플리케이션에 숨겨진 데이터 손상을 일으킬 수 있습니다.
 PHP 5.2.9 이후와 libxml2 2.7.3 이후로 업그레이드하세요 ([//bugs.php.net/bug.php?id=45996 PHP에 제기한 버그]).
 설치가 중단되었습니다.',
+       'config-using531' => '미디어위키는 <code>__call()</code>을 참고로 매개 변수를 포함하는 버그로 인해 PHP $1(와)과 함께 사용할 수 없습니다.
+문제를 해결하려면 PHP 5.3.2 이상로 업그레이드하거나 PHP 5.3.0으로 다운그레이드를 하세요.
+설치가 중단되었습니다.',
+       'config-suhosin-max-value-length' => 'Suhosin(수호신)이 설치되었고 $1 바이트로 GET 매개 변수 길이를 제한하고 있습니다. 미디어위키의 ResourceLoader 구성 요소는 이 제한을 해결하지만 성능이 저하됩니다. 가능하면 php.ini의 suhosin.get.max_value_length에 1024 이상으로 설정하고 LocalSettings.php의 $wgResourceLoaderMaxQueryLength에 같은 값을 설정해야 합니다.',
        'config-db-type' => '데이터베이스 종류:',
        'config-db-host' => '데이터베이스 호스트:',
        'config-db-host-help' => '데이터베이스 서버가 다른 서버에 있을 경우 여기에 호스트 이름이나 IP 주소를 입력하세요.
@@ -10064,10 +10184,10 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
 이는 공백이 없어야 합니다.
 
 웹 호스팅을 공유해 사용하는 경우 호스팅 제공 업체도 당신에게 제어판을 통해 데이터베이스를 사용하거나 만들 수 있도록 특정 데이터베이스 이름을 제공합니다.',
-       'config-db-name-oracle' => '데이터베이스 스마:',
+       'config-db-name-oracle' => '데이터베이스 스마:',
        'config-db-account-oracle-warn' => '데이터베이스 백엔드로 오라클을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:
 
\84¤ì¹\98 ê³¼ì \95ì\9d\98 ì\9d¼ë¶\80ë¡\9c ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ê³\84ì \95ì\9d\84 ë§\8cë\93¤ë ¤ë©´ ì\84¤ì¹\98를 ì\9c\84í\95´ ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ê³\84ì \95ì\9c¼ë¡\9c SYSDBA ì\97­í\95 ì\9d\84 ê°\80ì§\84 ê³\84ì \95ì\9d\84 ì \9cê³µí\95\98ê³  ì\9b¹ ì\95¡ì\84¸ì\8a¤ ê³\84ì \95ì\97\90 ë\8c\80í\95´ ì\9b\90í\95\98ë\8a\94 ì\9e\90격 ì¦\9dëª\85ì\9d\84 ì§\80ì \95í\95\98ì\84¸ì\9a\94, ê·¸ë \87ì§\80 ì\95\8aì\9c¼ë©´ ì\88\98ë\8f\99ì\9c¼ë¡\9c ì\9b¹ ì\95¡ì\84¸ì\8a¤ ê³\84ì \95ì\9d\84 ë§\8cë\93¤ ì\88\98 ì\9e\88ì\9c¼ë©° (í\95\84ì\9a\94í\95\9c ê²½ì\9a° ê¶\8cí\95\9c ì\8a¤í\82¤ë§\88 ê°\9c체를 ë§\8cë\93¤ì\96´ì\95¼ í\95©ë\8b\88ë\8b¤) ë\98\90ë\8a\94 ë\8b¤ë¥¸ ê³\84ì \95 ë\91\90 ê°\9c를 ë§\8cë\93¤ê³  ê¶\8cí\95\9cì\9d\84 ê°\80ì§\84 í\95\98ë\82\98ì\9d\98 ì\9b¹ ì\95¡ì\84¸ì\8a¤ë¥¼ 위한 제한된 하나를 제공할 수 있습니다.
\84¤ì¹\98 ê³¼ì \95ì\9d\98 ì\9d¼ë¶\80ë¡\9c ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ê³\84ì \95ì\9d\84 ë§\8cë\93¤ë ¤ë©´ ì\84¤ì¹\98를 ì\9c\84í\95´ ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ê³\84ì \95ì\9c¼ë¡\9c SYSDBA ì\97­í\95 ì\9d\84 ê°\80ì§\84 ê³\84ì \95ì\9d\84 ì \9cê³µí\95\98ê³  ì\9b¹ ì \91ê·¼ ê³\84ì \95ì\97\90 ë\8c\80í\95´ ì\9b\90í\95\98ë\8a\94 ì\9e\90격 ì¦\9dëª\85ì\9d\84 ì§\80ì \95í\95\98ì\84¸ì\9a\94, ê·¸ë \87ì§\80 ì\95\8aì\9c¼ë©´ ì\88\98ë\8f\99ì\9c¼ë¡\9c ì\9b¹ ì \91ê·¼ ê³\84ì \95ì\9d\84 ë§\8cë\93¤ ì\88\98 ì\9e\88ì\9c¼ë©° (í\95\84ì\9a\94í\95\9c ê²½ì\9a° ê¶\8cí\95\9c ì\8a¤í\82¤ë§\88 ê°\9c체를 ë§\8cë\93¤ì\96´ì\95¼ í\95©ë\8b\88ë\8b¤) ë\98\90ë\8a\94 ë\8b¤ë¥¸ ê³\84ì \95 ë\91\90 ê°\9c를 ë§\8cë\93¤ê³  ê¶\8cí\95\9cì\9d\84 ê°\80ì§\84 í\95\98ë\82\98ì\9d\98 ì\9b¹ ì \91ê·¼ì\9d\84 위한 제한된 하나를 제공할 수 있습니다.
 
 필요한 권한을 가진 계정을 만드는 스크립트는 이 설치의 "maintenance/oracle/" 디렉토리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정으로 모든 관리 기능을 비활성화할 것을 염두해 두십시오.',
        'config-db-install-account' => '설치를 위한 사용자 계정',
@@ -10076,15 +10196,15 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
        'config-db-password-empty' => '새 데이터베이스 사용자의 비밀번호를 입력하세요: $1.
 비밀번호 없이 사용자를 만들 수도 있지만 이는 안전하지 않습니다.',
        'config-db-install-username' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름을 입력하세요.
-이는 MediaWiki 계정의 사용자 이름이 아닌 데이터베이스에 대한 사용자 이름입니다.',
-       'config-db-install-password' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 비밀번호을 입력하세요. 이는 MediaWiki 계정의 비밀번호가 아닌 데이터베이스에 대한 비밀번호입니다.',
+이는 미디어위키 계정의 사용자 이름이 아닌 데이터베이스에 대한 사용자 이름입니다.',
+       'config-db-install-password' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 비밀번호을 입력하세요. 이는 미디어위키 계정의 비밀번호가 아닌 데이터베이스에 대한 비밀번호입니다.',
        'config-db-install-help' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름과 비밀번호를 입력하세요.',
        'config-db-account-lock' => '정상적으로 작동하는 동안 같은 사용자 이름과 비밀번호를 사용함',
        'config-db-wiki-account' => '정상적인 작동을 위한 사용자 계정',
        'config-db-wiki-help' => '정상적인 위키 작업 동안 데이터베이스에 연결하는 데 사용할 사용자 이름과 비밀 번호를 입력하세요.
 계정이 존재하지 않고 설치 계정에 충분한 권한이 있는 경우 이 사용자 계정은 위키를 작동하는 데 필요한 최소 권한으로 만들어집니다.',
        'config-db-prefix' => '데이터베이스 테이블 접두어:',
-       'config-db-prefix-help' => '여러 위키 사이 또는 MediaWiki와 다른 웹 응용 프로그램 사이에서 하나의 데이터베이스를 공유해야 하는 경우, 충돌을 피하기 위해 모든 테이블 이름에 접두어를 추가하도록 선택할 수 있습니다.
+       'config-db-prefix-help' => '여러 위키 사이 또는 미디어위키와 다른 웹 응용 프로그램 사이에서 하나의 데이터베이스를 공유해야 하는 경우, 충돌을 피하기 위해 모든 테이블 이름에 접두어를 추가하도록 선택할 수 있습니다.
 공백을 사용하지 마세요.
 
 이 필드는 일반적으로 비어있습니다.',
@@ -10094,45 +10214,158 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
        'config-charset-mysql4' => 'MySQL 4.0 UTF-8 하위 호환성',
        'config-charset-help' => "'''경고:''' MySQL 4.1에서 '''UTF-8 하위 호환성'''을 사용하고 나서 <code>mysqldump</code>로 데이터베이스에 백업한다면 이는 모든 ASCII가 아닌 문자를 파괴하고 손상한 백업을 되돌릴 수 없습니다!
 
-'''바이너리 모드'''에서는 MediaWiki는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
+'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
 이는 MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
 '''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 어떤 문자열인지를 알 것이며, 표현하고 적절하게 그것을 변환할 수 있지만
-[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 기본 다국어 공간] 상의 문자를 저장하지 못하게 될 수 있습니다.",
+[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 기본 다국어 범위] 상의 문자를 저장하지 못하게 될 수 있습니다.",
+       'config-mysql-old' => 'MySQL $1 이상이 필요하나 $2(이)가 있습니다.',
        'config-db-port' => '데이터베이스 포트:',
-       'config-db-schema' => 'MediaWiki에 대한 스케마:',
-       'config-db-schema-help' => '이 스케마는 보통 괜찮습니다.
-필요로 알고 있을 경우에만 이를 바꿉니다.',
+       'config-db-schema' => '미디어위키에 대한 스키마:',
+       'config-db-schema-help' => '이 스키마는 보통 괜찮습니다.
+필요로 알고 있을 경우에만 이를 바꾸세요.',
+       'config-pg-test-error' => "'''$1''' 데이터베이스에 연결할 수 없습니다: $2",
+       'config-sqlite-dir' => 'SQLite 데이터 디렉토리:',
+       'config-sqlite-dir-help' => 'SQLite는 하나의 파일에 모든 데이터를 저장합니다.
+
+제공하는 디렉토리는 설치하는 동안 웹 서버에 의해 쓸 수 있어야 합니다.
+
+PHP 파일이 있는 곳을 우리가 이를 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
+
+설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원시 데이터베이스에 접근하는 데 실패합니다.
+이는 원시 사용자 데이터(이메일 주소, 암호 해시) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
+
+<code>/var/lib/mediawiki/yourwiki</code>와 같이 모두 다른 곳에서 데이터베이스를 넣어보도록 하세요.',
+       'config-oracle-def-ts' => '기본 테이블공간:',
+       'config-oracle-temp-ts' => '임시 테이블공간:',
+       'config-type-oracle' => '오라클',
+       'config-type-ibm_db2' => 'IBM DB2',
+       'config-support-info' => '미디어위키는 다음의 데이터베이스 시스템을 지원합니다:
+
+$1
+
+데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 당신은 위의 링크된 지시에 따라 사용해볼 수도 있습니다.',
+       'config-support-mysql' => '* $1은 미디어위키의 기본 대상으로 가장 잘 지원합니다. ([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' => '오라클 설정',
        'config-header-ibm_db2' => 'IBM DB2 설정',
+       'config-invalid-db-type' => '잘못된 데이터베이스 종류',
+       'config-missing-db-name' => '"데이터베이스 이름"에 대한 값을 입력해야 합니다',
+       'config-missing-db-host' => '"데이터베이스 호스트"에 대한 값을 입력해야 합니다',
+       'config-missing-db-server-oracle' => '"데이터베이스 TNS"에 대한 값을 입력해야 합니다',
+       'config-invalid-db-server-oracle' => '"$1" 데이터베이스 TNS가 잘못됐습니다.
+ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
+       'config-invalid-db-name' => '"$1" 데이터베이스 이름이 잘못되었습니다.
+ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
+       'config-invalid-db-prefix' => '"$1" 데이터베이스 접두어가 잘못됐습니다.
+ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
        'config-connection-error' => '$1.
 
 호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.',
+       'config-invalid-schema' => '미디어위키 "$1"에 대한 스키마가 잘못됐습니다.
+ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.',
        'config-db-sys-create-oracle' => '설치 마법사는 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.',
        'config-db-sys-user-exists-oracle' => '"$1" 사용자 계정이 이미 존재합니다. SYSDBA는 새 계정을 만드는 데에만 사용할 수 있습니다!',
+       'config-postgres-old' => 'PostgreSQL $1 이상이 필요하나 $2(이)가 있습니다.',
+       'config-sqlite-name-help' => '위키를 식별하기 위한 이름을 선택하세요.
+공백이나 하이픈을 사용하지 마십시오.
+이는 SQLite 데이터 파일 이름에 사용됩니다.',
+       'config-sqlite-parent-unwritable-group' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 웹 서버에 의해 쓸 수 없기 때문입니다.
+
+설치 마법사는 웹 서버로 실행중인 사용자를 결정할 수 없습니다.
+계속하려면 이를 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
+유닉스/리눅스 시스템에서의 수행:
+
+<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> 상위 디렉토리에 웹 서버에 의해 쓸 수 없기 때문입니다.
+
+설치 마법사는 웹 서버로 실행중인 사용자를 결정할 수 없습니다.
+계속하려면 이(와 기타!)를 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.
+유닉스/리눅스 시스템에서의 수행:
+
+<pre>cd $2
+mkdir $3
+chmod a+w $3</pre>',
+       'config-sqlite-mkdir-error' => '"$1" 데이터 디렉토리를 만드는 중 오류났습니다.
+경로를 확인하고 다시 시도하세요.',
+       'config-sqlite-dir-unwritable' => '"$1" 디렉토리에 쓸 수 없습니다.
+웹 서버를 쓸 수 있도록 권한을 바꾸고 다시 시도하세요.',
+       'config-sqlite-connection-error' => '$1.
+
+호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.',
        'config-sqlite-readonly' => '파일 <code>$1</code>은 쓰기가 불가능합니다.',
-       'config-can-upgrade' => "이 데이터베이스에 MediaWiki 테이블이 있습니다.
-MediaWiki $1(으)로 업그레이드하려면 '''계속'''을 클릭하세요.",
-       'config-db-web-account' => '웹 액세스를 위한 데이터베이스 계정',
-       'config-db-web-help' => '위키의 일반적인 작업 중에 데이터베이스 서버에 연결하는 데 사용할 웹 서버에 대한 계정 이름과 비밀번호를 선택합니다.',
-       'config-db-web-account-same' => '설치를 위해 같은 계정을 사용',
-       'config-db-web-create' => '이 계정이 아직 존재하지 않을 경우 계정을 만들기',
+       'config-sqlite-cant-create-db' => '<code>$1</code> 데이터베이스 파일을 만들 수 없습니다.',
+       'config-sqlite-fts3-downgrade' => 'PHP가 FTS3 지원이 없어졌습니다. 테이블을 다운그레이드하세요.',
+       'config-can-upgrade' => "이 데이터베이스에 미디어위키 테이블이 있습니다.
+미디어위키 $1(으)로 업그레이드하려면 '''계속'''을 클릭하세요.",
+       'config-upgrade-done' => "업그레이드가 완료되었습니다.
+
+이제 [$1 위키를 시작]할 수 있습니다.
+
+만약 <code>LocalSettings.php</code> 파일을 다시 만들기를 원하면 아래의 버튼을 클릭하세요.
+이것은 위키에 문제가 있지 않는 한 '''권장하지 않습니다'''.",
+       'config-upgrade-done-no-regenerate' => '업그레이드가 완료되었습니다.
+
+이제 [$1 위키를 시작]할 수 있습니다.',
+       'config-regenerate' => 'LocalSettings.php 다시 만들기 →',
+       '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-no-create-privs' => '설치를 위해 지정한 계정은 계정을 만들 수 있는 충분한 권한이 없습니다.
 여기서 지정한 계정은 이미 존재해야 합니다.',
+       'config-mysql-engine' => '스토리지 엔진:',
+       'config-mysql-innodb' => 'InnoDB',
+       'config-mysql-myisam' => 'MyISAM',
+       'config-mysql-myisam-dep' => "'''경고''': 미디어위키와 함께 사용하도록 권장하지 않는 MySQL에 대한 스토리지 엔진으로 MyISAM을 선택하였습니다. 이유는:
+* 이는 테이블이 잠겨있어 동시성을 거의 지원하지 않습니다
+* 이는 다른 엔진보다 손상이 더 자주 발생합니다.
+* 미디어위키 바탕 코드가 항상 정상적으로 MyISAM을 처리하지 않습니다.
+
+MySQL 설치가 InnoDB를 지원한다면 그 선택 대신에 InnoDB를 선택할 것을 매우 권장합니다.
+MySQL 설치가 InnoDB를 지원하지 않는다면 아마도 업그레이드를 해야 할 수도 있습니다.",
+       'config-mysql-engine-help' => "'''InnoDB'''는 동시적인 지원에 좋기 때문에 거의 항상 최고의 옵션입니다.
+
+'''MyISAM'''은 단일 사용자 또는 읽기 전용 설치에 빠를 수 있습니다.
+MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실될 수 있습니다.",
+       'config-mysql-charset' => '데이터베이스 문자 집합:',
+       'config-mysql-binary' => '바이너리',
        'config-mysql-utf8' => 'UTF-8',
-       'config-ibm_db2-low-db-pagesize' => "당신의 DB2 데이터베이스가 부족한 페이지 크기가 기본 테이블 공간에 있습니다. 페이지 크기는 '''32K''' 이상이어야 합니다.",
-       'config-site-name' => '위키의 이름:',
-       'config-site-name-help' => '이것이 브라우저 제목 표시줄과 다른 여러 곳에 나타날 것입니다.',
+       'config-mysql-charset-help' => "'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
+이는 MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
+'''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 어떤 문자열인지를 알 것이며, 표현하고 적절하게 그것을 변환할 수 있지만
+[//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 기본 다국어 범위] 상의 문자를 저장하지 못하게 될 수 있습니다.",
+       'config-ibm_db2-low-db-pagesize' => "당신의 DB2 데이터베이스에 부족한 페이지 크기가 기본 테이블 공간에 있습니다. 페이지 크기는 '''32K''' 이상이어야 합니다.",
+       'config-site-name' => '위키 이름:',
+       'config-site-name-help' => '이는 브라우저 제목 표시줄과 다른 여러 곳에 나타날 것입니다.',
        'config-site-name-blank' => '사이트 이름을 입력하세요.',
        'config-project-namespace' => '프로젝트 이름공간:',
        'config-ns-generic' => '프로젝트',
+       'config-ns-site-name' => '위키 이름과 같은 이름: $1',
+       'config-ns-other' => '기타 (지정)',
+       'config-ns-other-default' => '내위키',
+       'config-project-namespace-help' => '위키백과의 예를 따라서, 많은 위키는 "프로젝트 이름공간"에 그들의 콘텐츠 페이지에서 그들의 정책 페이지는 별도로 보관합니다.
+이 이름공간에 있는 모든 페이지의 제목은 여기서 지정할 수 있는 특정 접두어로 시작합니다.
+보통 이 접두어는 위키의 이름에서 파생되지만, 이는 "#" 또는 ":"와 같은 특수 문자를 포함할 수 없습니다.',
+       'config-ns-invalid' => '특정 "<nowiki>$1</nowiki>" 이름공간이 잘못되었습니다.
+다른 프로젝트 이름공간을 지정하세요.',
+       'config-ns-conflict' => '특정 "<nowiki>$1</nowiki>" 이름공간이 기본 미디어위키 이름공간과 충돌합니다.
+다른 프로젝트 이름공간을 지정하세요.',
        'config-admin-box' => '관리자 계정',
        'config-admin-name' => '사용자 이름:',
        'config-admin-password' => '비밀번호:',
        'config-admin-password-confirm' => '비밀번호 확인:',
-       'config-admin-help' => '"í\99\8d길ë\8f\99"ê³¼ ê°\99ì\9d´ ì\97¬ê¸°ì\97\90 ì\9b\90í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84ì\9d\84 ì\9e\85ë ¥í\95©ë\8b\88ë\8b¤.
+       'config-admin-help' => '"í\99\8d길ë\8f\99"ê³¼ ê°\99ì\9d´ ì\97¬ê¸°ì\97\90 ì\9b\90í\95\98ë\8a\94 ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84ì\9d\84 ì\9e\85ë ¥í\95\98ì\84¸ì\9a\94.
 이는 위키에 로그인하는 데 사용되는 이름입니다.',
        'config-admin-name-blank' => '관리자의 사용자 이름을 입력하세요.',
        'config-admin-name-invalid' => '특정 "<nowiki>$1</nowiki>" 사용자 이름이 잘못되었습니다.
@@ -10145,85 +10378,161 @@ MediaWiki $1(으)로 업그레이드하려면 '''계속'''을 클릭하세요.",
        'config-admin-error-user' => '"<nowiki>$1</nowiki>" 이름의 관리자를 만드는 중 내부 오류가 발생했습니다.',
        'config-admin-error-password' => '"<nowiki>$1</nowiki>" 관리자의 비밀번호를 설정하는 중 내부 오류가 발생했습니다: <pre>$2</pre>',
        'config-admin-error-bademail' => '이메일 주소를 잘못 입력하였습니다.',
-       'config-almost-done' => '거의 다 됐습니다! 이제 남은 설정을 생략하고 지금 위키를 설치할 수 있습니다.',
+       'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 배포 발표 메일링 리스트]에 가입합니다.',
+       'config-subscribe-help' => '이는 중요한 보안 알림을 포함한 배포 알림에 대해 사용되는 로우 볼륨 메일링 리스트입니다.
+당신이 이를 구독하고 나서 새 버전이 나올 때 미디어위키 설치를 업데이트해야합니다.',
+       'config-subscribe-noemail' => '이메일 주소를 제공하지 않고 배포 발표 메일링 리스트에 가입하려 합니다.
+메일링 리스트에 가입하고자 할 경우 이메일 주소를 제공하세요.',
+       'config-almost-done' => '거의 다 완료했습니다! 이제 남은 설정을 생략하고 지금 바로 위키를 설치할 수 있습니다.',
+       'config-optional-continue' => '더 많은 질문을 물어보세요.',
        'config-optional-skip' => '지겨워요, 그냥 위키를 설치할래요.',
+       'config-profile' => '사용자 권한 프로필:',
        'config-profile-wiki' => '평범한 위키',
        'config-profile-no-anon' => '계정 생성 필요',
        'config-profile-fishbowl' => '승인된 편집자만 이용 가능',
        'config-profile-private' => '비공개 위키',
+       'config-profile-help' => "위키는 당신이 가능한 한 많은 사람들이 편집하도록 할 때 최고로 적합합니다.
+미디어위키에서는 최근 바뀜을 검토하고, 선하거나 악의적인 사용자에 의해 수행되는 모든 손실을 되돌리는 것이 쉽습니다.
+
+그러나 많은 사람들이 미디어위키가 다양한 역할의 유용하지만, 때로는 그것이 위키 방식의 장점을 모두 설득하기 쉽지 않음을 발견했습니다.
+그래서 선택할 수 있습니다.
+
+'''{{int:config-profile-wiki}}'''는 로그인하지 않고도 누구나 편집할 수 있습니다.
+'''{{int:config-profile-no-anon}}'''는 추가적으로 필요한 책임을 제공하지만, 기존의 기여자를 망칠 수도 있습니다.
+
+'''{{int:config-profile-fishbowl}}''' 같은 경우는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 페이지를 볼 수 있습니다. '''{{int:config-profile-private}}'''는 승인된 사용자만 같은 그룹에서 편집할 수 있고 볼 수 있습니다.
+
+더 복잡한 사용자 권한을 설정하여 설치한 후 사용할 수 있도록 하려면 [//www.mediawiki.org/wiki/Manual:User_rights 관련 매뉴얼 항목]을 참고하세요.",
        'config-license' => '저작권 및 라이선스:',
+       'config-license-none' => '라이선스 바닥글 없음',
        'config-license-cc-by-sa' => '크리에이티브 커먼즈 저작자표시-동일조건변경허락',
        'config-license-cc-by' => '크리에이티브 커먼즈 저작자표시',
        'config-license-cc-by-nc-sa' => '크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락',
-       'config-license-cc-0' => '크리에이티브 커먼즈 CC0 (퍼블릭 도메인)',
+       'config-license-cc-0' => '크리에이티브 커먼즈 제로 (퍼블릭 도메인)',
        'config-license-gfdl' => 'GNU 자유 문서 사용 허가서 1.3 이상',
        'config-license-pd' => '퍼블릭 도메인',
        'config-license-cc-choose' => '다른 크리에이티브 커먼즈 라이선스 선택',
+       'config-license-help' => '많은 공개 위키는 모든 기여를 [http://freedomdefined.org/Definition 자유 라이선스] 하에 넣습니다.
+이럴 경우 커뮤니티 소유권의 이해를 할 수 있도록 하고 장기적인 기여를 장려합니다.
+이는 일반적으로 개인 또는 회사 위키에 대해서는 필요하지 않습니다.
+
+위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 크리에이티브 커먼즈 저작자표시-동일조건변경허락으로 선택해야 합니다.
+
+위키백과는 이전에 GNU 자유 문서 사용 허가서를 사용했습니다.
+GFDL은 유효한 라이선스이지만 이는 이해하기 어렵습니다.
+이는 GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-email-settings' => '이메일 설정',
-       'config-enable-email' => 'ë°\9cì\8b  ì\9d´ë©\94ì\9d¼ í\97\88ì\9a©',
-       'config-enable-email-help' => '이메일을 작동하려면 [http://www.php.net/manual/en/mail.configuration.php PHP의 메일 설정]을 올바르게 구성해야 합니다.
+       'config-enable-email' => 'ë°\9cì\8b  ì\9d´ë©\94ì\9d¼ í\99\9cì\84±í\99\94',
+       'config-enable-email-help' => '이메일을 작동하려면 [http://www.php.net/manual/en/mail.configuration.php PHP의 메일 설정]을 올바르게 설정해야 합니다.
 이메일 기능을 사용하지 않으려면 이를 비활성화할 수 있습니다.',
-       'config-email-user' => 'ì\82¬ì\9a©ì\9e\90ì\99\80 ì\82¬ì\9a©ì\9e\90 ê°\84 ì\9d´ë©\94ì\9d¼ í\97\88ì\9a©',
-       'config-email-user-help' => 'í\99\98ê²½ ì\84¤ì \95ì\97\90ì\84\9c í\99\9cì\84±í\99\94í\95\9c ê²½ì\9a° ëª¨ë\93  ì\82¬ì\9a©ì\9e\90ê°\80 ì\9d´ë©\94ì\9d¼ì\9d\84 ì\84\9cë¡\9c ë³´ë\82´ë\8f\84ë¡\9d í\97\88ì\9a©합니다.',
-       'config-email-usertalk' => 'ì\82¬ì\9a©ì\9e\90 í\86 ë¡  ë¬¸ì\84\9c ì\95\8c림 í\97\88ì\9a©',
-       '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ê²½ ì\95\8c림ì\9d\84 ë°\9bë\8f\84ë¡\9d í\97\88ì\9a©합니다.',
-       'config-email-watchlist' => '주ì\8b\9c문ì\84\9c ëª©ë¡\9d ì\95\8c림 í\97\88ì\9a©',
-       'config-email-watchlist-help' => 'í\99\98ê²½ ì\84¤ì \95ì\97\90ì\84\9c í\99\9cì\84±í\99\94í\95\9c ê²½ì\9a° ì\82¬ì\9a©ì\9e\90ê°\80 ì£¼ì\8b\9cí\95\9c ë¬¸ì\84\9cì\97\90 ë\8c\80í\95\9c ì\95\8c림ì\9d\84 ë°\9bë\8f\84ë¡\9d í\97\88ì\9a©합니다.',
-       'config-email-auth' => 'ì\9d´ë©\94ì\9d¼ ì\9d¸ì¦\9d í\97\88ì\9a©',
-       'config-email-auth-help' => "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 변경할 때마다 그들에게 보낸 링크를 사용하여 확인해야 합니다.
+       'config-email-user' => 'ì\82¬ì\9a©ì\9e\90ì\99\80 ì\82¬ì\9a©ì\9e\90 ê°\84 ì\9d´ë©\94ì\9d¼ í\99\9cì\84±í\99\94',
+       'config-email-user-help' => 'í\99\98ê²½ ì\84¤ì \95ì\97\90ì\84\9c í\99\9cì\84±í\99\94í\95\9c ê²½ì\9a° ëª¨ë\93  ì\82¬ì\9a©ì\9e\90ê°\80 ì\9d´ë©\94ì\9d¼ì\9d\84 ì\84\9cë¡\9c ë³´ë\82´ë\8f\84ë¡\9d í\99\9cì\84±í\99\94합니다.',
+       'config-email-usertalk' => 'ì\82¬ì\9a©ì\9e\90 í\86 ë¡  ë¬¸ì\84\9c ì\95\8c림 í\99\9cì\84±í\99\94',
+       '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ê²½ ì\95\8c림ì\9d\84 ë°\9bë\8f\84ë¡\9d í\99\9cì\84±í\99\94합니다.',
+       'config-email-watchlist' => '주ì\8b\9c문ì\84\9c ëª©ë¡\9d ì\95\8c림 í\99\9cì\84±í\99\94',
+       'config-email-watchlist-help' => 'í\99\98ê²½ ì\84¤ì \95ì\97\90ì\84\9c í\99\9cì\84±í\99\94í\95\9c ê²½ì\9a° ì\82¬ì\9a©ì\9e\90ê°\80 ì£¼ì\8b\9cí\95\9c ë¬¸ì\84\9cì\97\90 ë\8c\80í\95\9c ì\95\8c림ì\9d\84 ë°\9bë\8f\84ë¡\9d í\99\9cì\84±í\99\94합니다.',
+       'config-email-auth' => 'ì\9d´ë©\94ì\9d¼ ì\9d¸ì¦\9d í\99\9cì\84±í\99\94',
+       'config-email-auth-help' => "이 설정이 활성화되어 있으면 사용자는 이메일 주소를 설정하거나 변경할 때마다 그들에게 보낸 링크를 사용하여 이메일 주소를 확인해야 합니다.
 인증된 이메일 주소만 다른 사용자로부터의 이메일이나 변경 알림 이메일을 받을 수 있습니다.
-이메일 기능의 남용 가능성이 있기 때문에 이 옵션을 설정하는 것은 공 위키에서 '''권장'''합니다.",
+이메일 기능의 남용 가능성이 있기 때문에 이 옵션을 설정하는 것은 공 위키에서 '''권장'''합니다.",
        'config-email-sender' => '반송 이메일 주소',
-       'config-email-sender-help' => 'ë°\9cì\8b í\95\9c ì\9d´ë©\94ì\9d¼ì\97\90 ë\8c\80í\95\9c ë°\98ì\86¡ ì£¼ì\86\8cë¡\9c ì\82¬ì\9a©í\95  ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ì\9e\85ë ¥í\95©ë\8b\88ë\8b¤.
+       'config-email-sender-help' => 'ë°\9cì\8b í\95\9c ì\9d´ë©\94ì\9d¼ì\97\90 ë\8c\80í\95\9c ë°\98ì\86¡ ì£¼ì\86\8cë¡\9c ì\82¬ì\9a©í\95  ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ì\9e\85ë ¥í\95\98ì\84¸ì\9a\94.
 이는 반송할 때 보내는 주소입니다.
 대부분의 메일 서버는 적어도 도메인 이름 부분은 유효합니다.',
+       'config-upload-settings' => '그림과 파일 올리기',
+       'config-upload-enable' => '파일 올리기 활성화',
+       'config-upload-help' => '파일 올리기는 서버에 잠재적인 보안 위험에 쉽게 노출될 수 있습니다.
+자세한 내용은 매뉴얼의 [//www.mediawiki.org/wiki/Manual:Security 보안 문단]을 읽어보세요.
+
+파일 올리기를 활성화하려면 미디어위키의 루트 디렉토리에 있는 <code>images</code> 하위 디렉토리에서 웹 서버가 기록할 수 있도록 모드를 변경합니다.
+그 다음 이 옵션을 활성화합니다.',
+       'config-upload-deleted' => '삭제된 파일에 대한 디렉토리:',
+       'config-upload-deleted-help' => '삭제된 파일을 보관할 디렉토리를 선택하세요.
+이상적으로 웹에서 접근할 수 없게 해야 합니다.',
        'config-logo' => '로고 URL:',
        'config-logo-help' => '미디어위키 기본 스킨은 사이드바 메뉴 위에 135×160픽셀의 로고를 포함하고 있습니다.
-적당한 크기로 이미지를 올리고 URL을 여기 적어주세요.
+적당한 크기로 이미지를 올리고 URL을 여기에 입력하세요.
+
+로고 사용을 원하지 않으면 이 상자를 비워 두십시오.',
+       'config-instantcommons' => '인스턴트 공용 활성화',
+       'config-instantcommons-help' => '[//www.mediawiki.org/wiki/InstantCommons 인스턴트 공용]은 [//commons.wikimedia.org/ 위키미디어 공용] 사이트에서 찾을 수 있는 그림, 소리 및 다른 미디어를 위키에서 사용할 수 있도록 하는 기능입니다.
+이렇게 하려면 미디어위키가 인터넷에 접근해야합니다.
 
-로고 사용을 원치 않으면 이 상자를 비워 두십시오.',
+위키미디어 공용 외에 기타 위키를 설정하는 방법에 대한 지침을 포함한 기능에 대한 자세한 내용은 [//mediawiki.org/wiki/Manual:$wgForeignFileRepos 매뉴얼]을 참고하세요.',
        'config-cc-error' => '크리에이티브 커먼즈 라이선스 선택기에 결과가 없습니다.
 수동으로 라이선스 이름을 입력하세요.',
        'config-cc-again' => '다시 선택...',
        'config-cc-not-chosen' => '원하는 크리에이티브 커먼즈 라이선스를 선택하고 "진행"을 클릭하세요.',
        'config-advanced-settings' => '고급 설정',
        'config-cache-options' => '개체 캐싱을 위한 설정:',
-       'config-cache-help' => '개체 캐싱은 자주 사용하는 데이터를 캐싱하여 MediaWiki의 속도를 개선하는 데 사용합니다.
+       'config-cache-help' => '개체 캐싱은 자주 사용하는 데이터를 캐싱하여 미디어위키의 속도를 개선하는 데 사용합니다.
 큰 사이트의 규모에는 이를 많이 사용하도록 권장하고 있으며, 소규모 사이트들도 물론 이익을 볼 수 있습니다.',
        'config-cache-none' => '캐시하지 않음 (기능적으로는 삭제되지 않지만 큰 위키 사이트에 속도에 영향을 받을 수 있습니다)',
        'config-cache-accel' => 'PHP 개체 캐싱 (APC, XCache 또는 WinCache)',
-       'config-cache-memcached' => 'Memcached 사용 (추가적인 설정 및 구성이 필요합니다)',
+       'config-cache-memcached' => 'Memcached 사용 (추가적인 설치와 설정이 필요합니다)',
+       'config-memcached-servers' => 'Memcached 서버:',
+       'config-memcached-help' => 'Memcached의 사용하기 위한 IP 주소 목록입니다.
+한 줄에 하나씩 사용할 포트를 지정해야 합니다. 예를 들어 :
+ 127.0.0.1:11211
+ 192.168.1.25:1234',
+       'config-memcache-needservers' => '캐시 종류로 Memcached를 선택했지만 어떠한 서버도 지정하지 않았습니다.',
+       'config-memcache-badip' => 'Memcached에 대해 잘못된 IP 주소를 입력했습니다: $1.',
+       'config-memcache-noport' => 'Memcached 서버에 사용할 포트를 지정하지 않았습니다: $1.
+포트를 모를 경우 기본값은 11211입니다.',
+       'config-memcache-badport' => 'Memcached 포트 번호는 $1(와)과 $2 사이여야 합니다.',
        'config-extensions' => '확장 기능',
        'config-extensions-help' => '위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.
 
 이들은 추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.',
-       'config-install-alreadydone' => "'''경고:''' 당신은 이미 MediaWiki를 설치하였고 다시 설치하려고 합니다.
+       'config-install-alreadydone' => "'''경고:''' 당신은 이미 미디어위키를 설치하였고 다시 설치하려고 합니다.
 다음 페이지에서 진행하세요.",
-       'config-install-begin' => '"{{int:config-continue}}"을 누르면 MediaWiki의 설치를 시작합니다.
+       'config-install-begin' => '"{{int:config-continue}}"을 누르면 미디어위키의 설치를 시작합니다.
 그래도 변경하는 것을 원한다면 뒤로를 누릅니다.',
+       'config-install-step-done' => '완료',
+       'config-install-step-failed' => '실패',
        'config-install-extensions' => '확장 기능을 포함하는 중',
-       'config-install-database' => '데이터베이스 설정 중',
-       'config-install-pg-commit' => '커밋 바꾸기',
-       'config-install-pg-plpgsql' => 'PL/pgSQL 언어에 대해 확인 중',
-       'config-install-user' => '데이터베이스 사용자 생성 중',
-       'config-install-tables' => '테이블을 생성하는 중',
+       'config-install-database' => '데이터베이스를 설정하는 중',
+       'config-install-schema' => '스키마를 만드는 중',
+       'config-install-pg-schema-not-exist' => 'PostgreSQL 스키마가 존재하지 않습니다.',
+       'config-install-pg-schema-failed' => '테이블을 만드는 데 실패했습니다.
+"$2" 스키마에 쓸 수 있는 "$1" 사용자가 있는지 확인하세요.',
+       'config-install-pg-commit' => '바뀐 사항을 적용하는 중',
+       'config-install-pg-plpgsql' => 'PL/pgSQL 언어에 대해 확인하는 중',
+       'config-pg-no-plpgsql' => '$1 데이터베이스에 PL/pgSQL 언어를 설치해야 합니다',
+       'config-pg-no-create-privs' => '설치를 위한 지정한 계정에 계정을 만드는 데 충분한 권한이 없습니다,',
+       'config-pg-not-in-role' => '웹 사용자에 대해 지정한 계정이 이미 존재합니다.
+설치에 대한 지정한 사용자는 슈퍼 사용자가 아니고, 그것은 웹 사용자의 역할의 구성원이 아니며, 그래서 웹 사용자가 소유한 개체를 만들 수 없습니다.
+
+현재 미디어위키는 테이블을 웹 사용자가 소유해야 합니다. 다른 웹 계정 이름을 지정하거나 "뒤로"를 클릭하고 적절한 권한의 설치할 사용자를 지정하세요.',
+       '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' => "'''경고''': 미디어위키 테이블이 이미 있는 것 같습니다.
 테이블 생성을 생략합니다.",
        'config-install-tables-failed' => "'''오류''': 다음 오류와 함께 테이블 생성에 실패했습니다: $1",
-       'config-install-interwiki' => '기본 ì\9d¸í\84°ì\9c\84í\82¤ í\91\9c를 채우는 중',
-       'config-install-interwiki-list' => '<code>interwiki.list</code> 파일을 읽을 수 없습니다.',
-       'config-install-interwiki-exists' => "'''경고''': ì\9d¸í\84°ì\9c\84í\82¤ í\91\9cê°\80 이미 항목을 갖고 있는 것 같습니다.
+       'config-install-interwiki' => '기본 ì\9d¸í\84°ì\9c\84í\82¤ í\85\8cì\9d´ë¸\94ì\9d\84 채우는 중',
+       'config-install-interwiki-list' => '<code>interwiki.list</code> 파일을 불러올 수 없습니다.',
+       'config-install-interwiki-exists' => "'''경고''': ì\9d¸í\84°ì\9c\84í\82¤ í\85\8cì\9d´ë¸\94ì\9d´ 이미 항목을 갖고 있는 것 같습니다.
 기본 목록으로 넘어갑니다.",
+       'config-install-stats' => '통계를 초기화하는 중',
        'config-install-keys' => '보안 키를 만드는 중',
        'config-insecure-keys' => "'''경고:''' 설치 중에 생성한 {{PLURAL:$2|보안 키}} ($1)를 설치하는 동안 완전히 안전하지 {{PLURAL:$2|않습니다}}. 직접 변경을 고려하세요.",
-       'config-install-mainpage' => '기본 콘텐트로 대문을 만드는 중',
-       'config-install-extension-tables' => '활성화된 확장 기능을 위한 표를 만드는 중',
+       'config-install-sysop' => '관리자 사용자 계정을 만드는 중',
+       'config-install-subscribe-fail' => '미디어위키 발표를 구독할 수 없습니다: $1',
+       'config-install-subscribe-notpossible' => 'cURL이 설치되지 않았고 allow_url_fopen를 사용할 수 없습니다.',
+       'config-install-mainpage' => '기본 콘텐츠로 대문을 만드는 중',
+       'config-install-extension-tables' => '활성화된 확장 기능을 위한 테이블을 만드는 중',
        'config-install-mainpage-failed' => '대문을 삽입할 수 없습니다: $1',
        'config-install-done' => "'''축하합니다!'''
-ì\84±ê³µì \81ì\9c¼ë¡\9c MediaWIki를 ì\84¤ì¹\98í\96\88ì\8aµë\8b\88ë\8b¤.
+미ë\94\94ì\96´ì\9c\84í\82¤ê°\80 ì\84±ê³µì \81ì\9c¼ë¡\9c ì\84¤ì¹\98ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.
 
 설치 마법사가 <code>LocalSettings.php</code> 파일을 만들었습니다.
-이는 모든 구성이 포함되어 있습니다.
+이는 모든 설정이 포함되어 있습니다.
 
 이를 다운로드하여 위키 설치의 거점에 넣어야 합니다 (index.php와 같은 디렉토리). 다운로드가 자동으로 시작됩니다.
 
@@ -10231,12 +10540,12 @@ MediaWiki $1(으)로 업그레이드하려면 '''계속'''을 클릭하세요.",
 
 $3
 
-'''참고''': 지금 이렇게 하지 않으면 이 구성 파일을 다운로드하지 않고 설치를 종료할 경우 만들어진 구성 파일은 나중에 사용할 수 없습니다.
+'''참고''': 지금 이렇게 하지 않으면, 이 설정 파일을 다운로드하지 않고 설치를 종료할 경우 만들어진 설정 파일은 나중에 사용할 수 없습니다.
 
-완료되었으면 '''[$2 당신은 위키에 들어갈 수 있습니다]'''.",
+완료되었으면 '''[$2 위키에 들어갈 수 있습니다]'''.",
        'config-download-localsettings' => 'LocalSettings.php 다운로드',
        'config-help' => '도움말',
-       'config-nofile' => '파일 "$1" 찾을 수 없습니다. 이미 삭제되었나요?',
+       'config-nofile' => '파일 "$1"(을)를 찾을 수 없습니다. 이미 삭제되었나요?',
        'mainpagetext' => "'''미디어위키가 성공적으로 설치되었습니다.'''",
        'mainpagedocfooter' => '[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 프로그램에 대한 정보를 얻을 수 있습니다.
 
@@ -10361,6 +10670,7 @@ Mer künne met heh dä Daatebangke ömjonn: $1.
 Wann De nit om eijene Rääshner bes, moß De Dinge <i lang="en">provider</i> bedde, dat hä Der ene zopaß Driiver enresht.
 Wann de PHP sellver övversaz häs, donn e Zohjangsprjramm för en Daatebangk enbenge, för e Beishpell met: <code  lang="en">./configure --with-mysql</code> op ene <i lang="en">command shell</i>.
 Wann De PHP uss enem <i lang="en">Debian</i> udder <i lang="en">Ubuntu</i> Pakätt enjeresht häs, moß De dann och noch et <code lang="en">php5-mysql</code> op Dinge Räschner bränge.',
+       'config-outdated-sqlite' => '\'\'\'Opjepaß:\'\'\' <i lang="en">SQLite</i> $1 es enschtaleert. Avver MediaWiki bruch <i lang="en">SQLite</i> $2 udder hühter. <i lang="en">SQLite</i> kann dröm nit enjesaz wääde.',
        'config-no-fts3' => "'''Opjepaß:''' De Projramme vum <i lang=\"en\">SQLite</i> sin der ohne et [//sqlite.org/fts3.html FTS3-Modul] övversaz, dröm wääde de Funxjohne för et Söhke fähle.",
        'config-register-globals' => "'''Opjepaß:''' dem PHP singe Schallder <code lang=\"en\">[http://php.net/register_globals register_globals]</code> es enjeschalldt.
 '''Donn dä ußmaache, wann De kann.'''
@@ -10809,6 +11119,7 @@ Wann domet jet nit jeflupp hät, udder De di Dattei norr_ens han wells, donn op
 Wann De mem Ronger- un widder Huhlaade fäädesh bes, kanns De '''[\$2 en Ding Wiki jonn]'''.",
        'config-download-localsettings' => 'Donn di Dattei <code lang="en">LocalSettings.php</code> eronger laade',
        'config-help' => 'Hölp',
+       'config-nofile' => 'De Dattei „$1“ ham_mer nit jefonge. Es di fottjeschmeße?',
        'mainpagetext' => "'''MediaWiki es jetz enstalleet.'''",
        'mainpagedocfooter' => 'Luur en et (änglesche) [//meta.wikimedia.org/wiki/Help:Contents Handboch] wann De wesse wells wie de Wiki-Soffwär jebruch un bedeent wääde muss.
 
@@ -10823,8 +11134,13 @@ Dat es och all op Änglesch:
  * @author George Animal
  */
 $messages['ku-latn'] = array(
+       'config-information' => 'Agahî',
+       'config-your-language' => 'Zimanê te:',
        'config-page-language' => 'Ziman',
        'config-page-name' => 'Nav',
+       'config-page-options' => 'Vebijêrk',
+       'config-ns-generic' => 'Proje',
+       'config-install-step-done' => 'çêbû',
        '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ê.
 
@@ -11049,6 +11365,7 @@ Dir kënnt elo déi Astellungen déi nach iwwreg sinn iwwersprangen an d'Wiki el
        'config-install-mainpage-failed' => "D'Haaptsäit konnt net dragesat ginn: $1",
        'config-download-localsettings' => 'LocalSettings.php eroflueden',
        'config-help' => 'Hëllef',
+       'config-nofile' => 'De Fichier "$1" gouf net fonnt. Gouf e geläscht?',
        'mainpagetext' => "'''MediaWiki gouf installéiert.'''",
        'mainpagedocfooter' => "Kuckt w.e.g. [//meta.wikimedia.org/wiki/Help:Contents d'Benotzerhandbuch] fir den Interface ze personnaliséieren.
 
@@ -14900,18 +15217,19 @@ Depois de terminar o passo anterior, pode '''[$2 entrar na wiki]'''.",
  * @author Giro720
  * @author Gustavo
  * @author Marcionunes
+ * @author 555
  */
 $messages['pt-br'] = array(
        'config-desc' => 'O instalador do MediaWiki',
-       'config-title' => 'Instalação MediaWiki $1',
+       'config-title' => 'Instalação do MediaWiki $1',
        'config-information' => 'Informações',
-       'config-localsettings-upgrade' => "'''Aviso''': Foi detetada a existência de um arquivo <code>LocalSettings.php</code>.
-É possível atualizar o seu software.
-Mova o <code>LocalSettings.php</code> para um lugar seguro e execute o instalador novamente, por favor.",
-       'config-localsettings-cli-upgrade' => 'Foi detectado um arquivo LocalSettings.php.
-Para atualizar esta instalação, por favor, use: --upgrade=yes.',
+       'config-localsettings-upgrade' => 'Foi detectada a existência do arquivo <code>LocalSettings.php</code>.
+Para atualizar esta instalação, insira no box abaixo o valor de <code>$wgUpgradeKey</code>.
+Essa informação pode ser encontrada no arquivo LocalSettings.php',
+       'config-localsettings-cli-upgrade' => 'Foi detectada a existência do arquivo <code>LocalSettings.php</code>.
+Esta instalação deverá ser atualizada através do <code>update.php</code>',
        'config-localsettings-key' => 'Chave de atualização:',
-       'config-localsettings-badkey' => 'A senha inserida está incorreta.',
+       'config-localsettings-badkey' => 'A chave fornecida está incorreta.',
        '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:
 
@@ -15627,7 +15945,7 @@ $3
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].',
 );
 
-/** Rusyn (Русиньскый)
+/** Rusyn (русиньскый)
  * @author Gazeb
  */
 $messages['rue'] = array(
@@ -16191,7 +16509,7 @@ $messages['sw'] = array(
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Orodha ya utoaji wa habari za MediaWiki]',
 );
 
-/** Silesian (Å\9alůnski)
+/** Silesian (Å\9blůnski)
  * @author Djpalar
  */
 $messages['szl'] = array(
@@ -16610,6 +16928,7 @@ Tiyakin na ang tagagamit na "$1" ay maaaring makasulat sa balangkas na "$2".',
        '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-tables' => 'Nililikha ang mga talahanayan',
        'config-install-tables-exist' => "'''Babala''': Tila umiiral na ang mga talahanayan ng MediaWiki.
 Nilalaktawan ang paglikha.",
@@ -16619,9 +16938,10 @@ Nilalaktawan ang paglikha.",
        'config-install-interwiki-exists' => "'''Babala''': Tila may mga laman na ang talahanayan ng interwiki.
 Nilalaktawan ang likas na nakatakdang talaan.",
        'config-install-stats' => 'Sinisimulan ang estadistika',
-       'config-install-keys' => 'Ginagawa ang lihim na susi',
+       'config-install-keys' => 'Ginagawa ang lihim na mga susi',
        'config-install-sysop' => 'Nililikha ang akawnt ng tagagamit na tagapangasiwa',
-       'config-install-subscribe-fail' => 'Hindi nagawang sumipi mula sa mediawiki-announce',
+       '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',
        'config-install-mainpage' => 'Nililikha ang pangunahing pahina na may likas na nakatakdang nilalaman',
        'config-install-extension-tables' => 'Nililikha ang mga talahanayan para sa pinagaganang mga dugtong',
        'config-install-mainpage-failed' => 'Hindi maisingit ang pangunahing pahina: $1',
@@ -16817,7 +17137,7 @@ $messages['ur'] = array(
        'mainpagetext' => "'''میڈیاوکی کو کامیابی سے چالو کردیا گیا ہے۔.'''",
 );
 
-/** Uzbek (Oʻzbek) */
+/** 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.
@@ -16892,9 +17212,11 @@ $messages['vro'] = array(
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-postilist, minka andas teedäq MediaWiki vahtsist kujõst].',
 );
 
-/** Walloon (walon) */
+/** Walloon (walon)
+ * @author Srtxg
+ */
 $messages['wa'] = array(
-       'mainpagetext' => "'''Li programe Wiki a stî astalé a l' idêye.'''",
+       'mainpagetext' => "'''Li programe MediaWiki a stî astalé a l' idêye.'''",
 );
 
 /** Waray (Winaray)
@@ -17004,6 +17326,7 @@ $messages['zea'] = array(
 /** Simplified Chinese (‪中文(简体)‬)
  * @author Hydra
  * @author Hzy980512
+ * @author Liangent
  * @author PhiLiP
  * @author Xiaomingyan
  * @author 阿pp
        'mainpagedocfooter' => '请查阅[//meta.wikimedia.org/wiki/Help:Contents 用户指南]以获取使用本wiki软件的信息!
 
 == 入门 ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置设置列表]
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置设置列表]
 * [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans MediaWiki常见问题]
 * [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]',
 );
 
 /** Traditional Chinese (‪中文(繁體)‬)
  * @author Hzy980512
+ * @author Liangent
  * @author Mark85296341
  */
 $messages['zh-hant'] = array(
 當本步驟完成後,您可以 '''[$2 進入您的wiki]'''。",
        'config-download-localsettings' => '下載LocalSettings.php',
        'config-help' => '說明',
-       'mainpagetext' => "'''已成功安裝 MediaWiki。'''",
-       'mainpagedocfooter' => '請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此 wiki 軟體的訊息!
+       'mainpagetext' => "'''已成功安裝MediaWiki。'''",
+       'mainpagedocfooter' => '請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此wiki軟體的訊息!
 
 == 入門 ==
-* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 配置設定清單]
-* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問題解答]
-* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵件清單]',
+* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置設定清單]
+* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki常見問題解答]
+* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki發佈郵件清單]',
 );
 
 /** Chinese (Hong Kong) (‪中文(香港)‬)
index 43005a8..9aa1a13 100644 (file)
@@ -698,7 +698,7 @@ END;
                }
        }
 
-       protected function dropIndex( $table, $index ) {
+       protected function dropIndex( $table, $index, $patch = '', $fullpath = false ) {
                if ( $this->db->indexExists( $table, $index ) ) {
                        $this->output( "Dropping obsolete index '$index'\n" );
                        $this->db->query( "DROP INDEX \"". $index ."\"" );
index aabc1f3..84d115b 100644 (file)
@@ -153,7 +153,7 @@ class WebInstallerOutput {
        }
 
        /**
-        * <link> to index.php?css=foobar for the <head>
+        * "<link>" to index.php?css=foobar for the "<head>"
         * @return String
         */
        private function getCssUrl( ) {
index b6e7717..c10fe88 100644 (file)
@@ -232,7 +232,7 @@ class WebInstaller_Language extends WebInstallerPage {
        }
 
        /**
-        * Get a <select> for selecting languages.
+        * Get a "<select>" for selecting languages.
         *
         * @param $name
         * @param $label
index 4e02258..b6f54ea 100644 (file)
@@ -36,7 +36,7 @@ class DoubleRedirectJob extends Job {
 
        /**
         * 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 $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
         */
index cae3f12..d3cc550 100644 (file)
@@ -60,7 +60,7 @@ class FormatJson {
         *
         * @return Mixed: the value encoded in json in appropriate PHP type.
         * Values true, false and null (case-insensitive) are returned as true, false
-        * and &null; respectively. &null; is returned if the json cannot be
+        * and "&null;" respectively. "&null;" is returned if the json cannot be
         * decoded or if the encoded data is deeper than the recursion limit.
         */
        public static function decode( $value, $assoc = false ) {
index ff5fc8a..1244dd3 100644 (file)
@@ -359,12 +359,12 @@ class LogEventsList extends ContextSource {
        }
 
        /**
-        * @TODO: split up!
+        * @todo split up!
         *
         * @param  $row
         * @param Title $title
         * @param Array $paramArray
-        * @param  $comment
+        * @param String $comment Passed by reference
         * @return String
         */
        private function logActionLinks( $row, $title, $paramArray, &$comment ) {
index 1ba6a3b..93f3f83 100644 (file)
@@ -496,9 +496,7 @@ class LogFormatter {
         * @return Message
         */
        protected function msg( $key ) {
-               return wfMessage( $key )
-                       ->inLanguage( $this->context->getLanguage() )
-                       ->title( $this->context->getTitle() );
+               return $this->context->msg( $key );
        }
 
        protected function makeUserLink( User $user ) {
index 3891f34..cf921b0 100644 (file)
@@ -255,9 +255,12 @@ class LogPage {
                                        $rightsnone = wfMsgExt( 'rightsnone', array( 'parsemag', 'language' => $langObj ) );
 
                                        if( $skin ) {
+                                               $username = $title->getText();
                                                foreach ( $params as &$param ) {
                                                        $groupArray = array_map( 'trim', explode( ',', $param ) );
-                                                       $groupArray = array_map( array( 'User', 'getGroupMember' ), $groupArray );
+                                                       foreach( $groupArray as &$group ) {
+                                                               $group = User::getGroupMember( $group, $username );
+                                                       }
                                                        $param = $wgLang->listToText( $groupArray );
                                                }
                                        }
@@ -417,7 +420,8 @@ class LogPage {
                                        # Use the language name for log titles, rather than Log/X
                                        if( $name == 'Log' ) {
                                                $titleLink = Linker::link( $title, LogPage::logName( $par ) );
-                                               $titleLink = wfMessage( 'parentheses' )->rawParams( $titleLink )->escaped();
+                                               $titleLink = wfMessage( 'parentheses' )->inLanguage( $lang )
+                                                       ->rawParams( $titleLink )->escaped();
                                        } else {
                                                $titleLink = Linker::link( $title );
                                        }
@@ -551,7 +555,8 @@ class LogPage {
                        for( $i = 0; $i < count( $flags ); $i++ ) {
                                $flags[$i] = self::formatBlockFlag( $flags[$i], $lang );
                        }
-                       return wfMessage( 'parentheses' )->rawParams( $lang->commaList( $flags ) )->escaped();
+                       return wfMessage( 'parentheses' )->inLanguage( $lang )
+                               ->rawParams( $lang->commaList( $flags ) )->escaped();
                } else {
                        return '';
                }
index 339688d..911fffc 100644 (file)
@@ -33,7 +33,7 @@ class PatrolLog {
         *
         * @param $rc Mixed: change identifier or RecentChange object
         * @param $auto Boolean: was this patrol event automatic?
-        * @param $performer User: user performing the action or null to use $wgUser
+        * @param $user User: user performing the action or null to use $wgUser
         *
         * @return bool
         */
@@ -45,24 +45,20 @@ class PatrolLog {
                        }
                }
 
-               $title = Title::makeTitleSafe( $rc->getAttribute( 'rc_namespace' ), $rc->getAttribute( 'rc_title' ) );
-               if( $title ) {
-                       if ( !$user ) {
-                               global $wgUser;
-                               $user = $wgUser;
-                       }
+               if ( !$user ) {
+                       global $wgUser;
+                       $user = $wgUser;
+               }
 
-                       $entry = new ManualLogEntry( 'patrol', 'patrol' );
-                       $entry->setTarget( $title );
-                       $entry->setParameters( self::buildParams( $rc, $auto ) );
-                       $entry->setPerformer( $user );
-                       $logid = $entry->insert();
-                       if ( !$auto ) {
-                               $entry->publish( $logid, 'udp' );
-                       }
-                       return true;
+               $entry = new ManualLogEntry( 'patrol', 'patrol' );
+               $entry->setTarget( $rc->getTitle() );
+               $entry->setParameters( self::buildParams( $rc, $auto ) );
+               $entry->setPerformer( $user );
+               $logid = $entry->insert();
+               if ( !$auto ) {
+                       $entry->publish( $logid, 'udp' );
                }
-               return false;
+               return true;
        }
 
        /**
index 8cf30ab..56c5842 100644 (file)
@@ -261,7 +261,7 @@ class BitmapHandler extends ImageHandler {
         * @param $params array Array with scaler params
         * @return ThumbnailImage
         *
-        * @fixme no rotation support
+        * @todo fixme: no rotation support
         */
        protected function getClientScalingThumbnailImage( $image, $params ) {
                return new ThumbnailImage( $image, $image->getURL(),
index 65575ec..34a1f51 100644 (file)
@@ -199,7 +199,8 @@ class ExifBitmapHandler extends BitmapHandler {
         *
         * @param string $data
         * @return int 0, 90, 180 or 270
-        * @fixme orientation can include flipping as well; see if this is an issue!
+        * @todo FIXME orientation can include flipping as well; see if this is an
+        * issue!
         */
        protected function getRotationForExif( $data ) {
                if ( !$data ) {
index c22ea08..9342374 100644 (file)
@@ -309,7 +309,7 @@ class FormatMetadata {
                                                'redeye'   => ( $val & bindec( '01000000' ) ) >> 6,
 //                                             'reserved' => ($val & bindec( '10000000' )) >> 7,
                                        );
-       
+
                                        # We do not need to handle unknown values since all are used.
                                        foreach ( $flashDecode as $subTag => $subValue ) {
                                                # We do not need any message for zeroed values.
@@ -640,7 +640,7 @@ class FormatMetadata {
                                                }
                                        }
                                        break;
-                                       
+
                                case 'iimCategory':
                                        switch( strtolower( $val ) ) {
                                                // See pg 29 of IPTC photo
@@ -802,7 +802,7 @@ class FormatMetadata {
                                        break;
 
                                case 'LanguageCode':
-                                       $lang = Language::fetchLanguageName( strtolower( $val ), $wgLang );
+                                       $lang = Language::fetchLanguageName( strtolower( $val ), $wgLang->getCode() );
                                        if ($lang) {
                                                $val = htmlspecialchars( $lang );
                                        } else {
@@ -827,14 +827,14 @@ class FormatMetadata {
        * This turns an array of (for example) authors into a bulleted list.
        *
        * This is public on the basis it might be useful outside of this class.
-       * 
+       *
        * @param $vals Array array of values
        * @param $type String Type of array (either lang, ul, ol).
        * lang = language assoc array with keys being the lang code
        * ul = unordered list, ol = ordered list
        * type can also come from the '_type' member of $vals.
        * @param $noHtml Boolean If to avoid returning anything resembling
-       * html. (Ugly hack for backwards compatibility with old mediawiki). 
+       * html. (Ugly hack for backwards compatibility with old mediawiki).
        * @return String single value (in wiki-syntax).
        */
        public static function flattenArray( $vals, $type = 'ul', $noHtml = false ) {
@@ -876,7 +876,7 @@ class FormatMetadata {
                                // If default is set, save it for later,
                                // as we don't know if it's equal to
                                // one of the lang codes. (In xmp
-                               // you specify the language for a 
+                               // you specify the language for a
                                // default property by having both
                                // a default prop, and one in the language
                                // that are identical)
@@ -1105,7 +1105,7 @@ class FormatMetadata {
 
        /**
         * Fetch the human readable version of a news code.
-        * A news code is an 8 digit code. The first two 
+        * A news code is an 8 digit code. The first two
         * digits are a general classification, so we just
         * translate that.
         *
@@ -1276,7 +1276,7 @@ class FormatMetadata {
                                // Todo: This can potentially be multi-line.
                                // Need to check how that works in XMP.
                                $street = '<span class="extended-address">'
-                                       . htmlspecialchars( 
+                                       . htmlspecialchars(
                                                $vals['CiAdrExtadr'] )
                                        . '</span>';
                        }
@@ -1323,7 +1323,7 @@ class FormatMetadata {
                        }
                        if ( isset( $vals['CiAdrPcode'] ) ) {
                                $postal = '<span class="postal-code">'
-                                       . htmlspecialchars( 
+                                       . htmlspecialchars(
                                                $vals['CiAdrPcode'] )
                                        . '</span>';
                        }
index b41ac32..d0e7650 100644 (file)
@@ -282,6 +282,7 @@ abstract class MediaHandler {
         * Returns false if unknown or if the document is not multi-page.
         *
         * @param $image File
+        * @param $page Unused, left for backcompatibility?
         * @return array
         */
        function getPageDimensions( $image, $page ) {
index bf08de6..fc1f834 100644 (file)
@@ -84,7 +84,7 @@ abstract class MediaTransformOutput {
         *     custom-url-link    Custom URL to link to
         *     custom-title-link  Custom Title object to link to
         *     valign       vertical-align property, if the output is an inline element
-        *     img-class    Class applied to the <img> tag, if there is such a tag
+        *     img-class    Class applied to the "<img>" tag, if there is such a tag
         *
         * For images, desc-link and file-link are implemented as a click-through. For
         * sounds and videos, they may be displayed in other ways.
index da7d428..83f531c 100644 (file)
@@ -19,7 +19,7 @@
  *
  * @file
  * @ingroup Media
- * @author Derk-Jan Hartman <hartman _at_ videolan d0t org>
+ * @author "Derk-Jan Hartman <hartman _at_ videolan d0t org>"
  * @author Brion Vibber
  * @copyright Copyright © 2010-2010 Brion Vibber, Derk-Jan Hartman
  * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
@@ -255,7 +255,7 @@ class SVGReader {
        /**
         * Parse the attributes of an SVG element
         *
-        * The parser has to be in the start element of <svg>
+        * The parser has to be in the start element of "<svg>"
         */
        private function handleSVGAttribs( ) {
                $defaultWidth = self::DEFAULT_WIDTH;
index adb85df..75fdd96 100644 (file)
@@ -461,13 +461,15 @@ class XMPReader {
        * generally means we've finished processing a nested structure.
        * resets some internal variables to indicate that.
        *
-       * Note this means we hit the </closing element> not the </rdf:Seq>.
+       * Note this means we hit the closing element not the "</rdf:Seq>".
        *
-       * For example, when processing:
+       * @par For example, when processing:
+       * @code{,xml}
        * <exif:ISOSpeedRatings> <rdf:Seq> <rdf:li>64</rdf:li>
        *   </rdf:Seq> </exif:ISOSpeedRatings>
+       * @endcode
        *
-       * This method is called when we hit the </exif:ISOSpeedRatings> tag.
+       * This method is called when we hit the "</exif:ISOSpeedRatings>" tag.
        *
        * @param $elm String namespace . space . tag name.
        */
@@ -523,15 +525,17 @@ class XMPReader {
        * Hit a closing element in MODE_LI (either rdf:Seq, or rdf:Bag )
        * Add information about what type of element this is.
        *
-       * Note we still have to hit the outer </property>
+       * Note we still have to hit the outer "</property>"
        *
-       * For example, when processing:
+       * @par For example, when processing:
+       * @code{,xml}
        * <exif:ISOSpeedRatings> <rdf:Seq> <rdf:li>64</rdf:li>
        *   </rdf:Seq> </exif:ISOSpeedRatings>
+       * @endcode
        *
-       * This method is called when we hit the </rdf:Seq>.
+       * This method is called when we hit the "</rdf:Seq>".
        * (For comparison, we call endElementModeSimple when we
-       * hit the </rdf:li>)
+       * hit the "</rdf:li>")
        *
        * @param $elm String namespace . ' ' . element name
        */
@@ -1010,7 +1014,7 @@ class XMPReader {
        * Also does some initial set up for the wrapper element
        *
        * @param $parser XMLParser
-       * @param $elm String namespace <space> element
+       * @param $elm String namespace "<space>" element
        * @param $attribs Array attribute name => value
        */
        function startElement( $parser, $elm, $attribs ) {
@@ -1093,11 +1097,13 @@ class XMPReader {
        * Process attributes.
        * Simple values can be stored as either a tag or attribute
        *
-       * Often the initial <rdf:Description> tag just has all the simple
+       * Often the initial "<rdf:Description>" tag just has all the simple
        * properties as attributes.
        *
-       * Example:
+       * @par Example:
+       * @code
        * <rdf:Description rdf:about="" xmlns:exif="http://ns.adobe.com/exif/1.0/" exif:DigitalZoomRatio="0/10">
+       * @endcode
        *
        * @param $attribs Array attribute=>value array.
        */
index bca6985..262665b 100644 (file)
@@ -363,13 +363,15 @@ class DeviceDetection implements IDeviceDetector {
                        $deviceName = 'android';
                        if ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
                                $deviceName = 'operamini';
+                       } elseif ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
+                               $deviceName = 'operamobile';
                        }
-               } else if ( preg_match( '/MSIE 9.0/', $userAgent ) ||
+               } elseif ( preg_match( '/MSIE 9.0/', $userAgent ) ||
                                preg_match( '/MSIE 8.0/', $userAgent ) ) {
                        $deviceName = 'ie';
-               } else if( preg_match( '/MSIE/', $userAgent ) ) {
+               } elseif( preg_match( '/MSIE/', $userAgent ) ) {
                        $deviceName = 'html';
-               } else if ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
+               } elseif ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
                        $deviceName = 'operamobile';
                } elseif ( preg_match( '/iPad.* Safari/', $userAgent ) ) {
                        $deviceName = 'iphone';
@@ -398,10 +400,8 @@ class DeviceDetection implements IDeviceDetector {
                                $deviceName = 'wii';
                        } elseif ( strpos( $userAgent, 'Opera Mini' ) !== false ) {
                                $deviceName = 'operamini';
-                       } elseif ( strpos( $userAgent, 'Opera Mobi' ) !== false ) {
-                               $deviceName = 'iphone';
                        } else {
-                               $deviceName = 'webkit';
+                               $deviceName = 'operamobile';
                        }
                } elseif ( preg_match( '/Kindle\/1.0/', $userAgent ) ) {
                        $deviceName = 'kindle';
index b9a6a69..5a7729b 100644 (file)
  * @ingroup Cache
  */
 class APCBagOStuff extends BagOStuff {
+
+       /**
+        * @param $key string
+        * @return mixed
+        */
        public function get( $key ) {
                $val = apc_fetch( $key );
 
@@ -37,18 +42,32 @@ class APCBagOStuff extends BagOStuff {
                return $val;
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        public function set( $key, $value, $exptime = 0 ) {
                apc_store( $key, serialize( $value ), $exptime );
 
                return true;
        }
 
+       /**
+        * @param $key string
+        * @param $time int
+        * @return bool
+        */
        public function delete( $key, $time = 0 ) {
                apc_delete( $key );
 
                return true;
        }
 
+       /**
+        * @return Array
+        */
        public function keys() {
                $info = apc_cache_info( 'user' );
                $list = $info['cache_list'];
index e6ba042..0aebfa3 100644 (file)
@@ -153,6 +153,7 @@ abstract class BagOStuff {
        /**
         * @param $key string
         * @param $value mixed
+        * @param $exptime int
         * @return bool success
         */
        public function replace( $key, $value, $exptime = 0 ) {
@@ -166,7 +167,7 @@ abstract class BagOStuff {
         * @param $key String: Key to increase
         * @param $value Integer: Value to add to $key (Default 1)
         * @return null if lock is not possible else $key value increased by $value
-        * @return success
+        * @return bool success
         */
        public function incr( $key, $value = 1 ) {
                if ( !$this->lock( $key ) ) {
index 63ad4de..8483d7e 100644 (file)
@@ -35,6 +35,9 @@
 class DBABagOStuff extends BagOStuff {
        var $mHandler, $mFile, $mReader, $mWriter, $mDisabled;
 
+       /**
+        * @param $params array
+        */
        public function __construct( $params ) {
                global $wgDBAhandler;
 
@@ -63,6 +66,7 @@ class DBABagOStuff extends BagOStuff {
        }
 
        /**
+        * @param $blob string
         * @return array list containing value first and expiry second
         */
        function decode( $blob ) {
@@ -76,6 +80,9 @@ class DBABagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @return resource
+        */
        function getReader() {
                if ( file_exists( $this->mFile ) ) {
                        $handle = dba_open( $this->mFile, 'rl', $this->mHandler );
@@ -90,6 +97,9 @@ class DBABagOStuff extends BagOStuff {
                return $handle;
        }
 
+       /**
+        * @return resource
+        */
        function getWriter() {
                $handle = dba_open( $this->mFile, 'cl', $this->mHandler );
 
@@ -100,6 +110,10 @@ class DBABagOStuff extends BagOStuff {
                return $handle;
        }
 
+       /**
+        * @param $key string
+        * @return mixed|null|string
+        */
        function get( $key ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
@@ -129,6 +143,12 @@ class DBABagOStuff extends BagOStuff {
                return $val;
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        function set( $key, $value, $exptime = 0 ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
@@ -148,6 +168,11 @@ class DBABagOStuff extends BagOStuff {
                return $ret;
        }
 
+       /**
+        * @param $key string
+        * @param $time int
+        * @return bool
+        */
        function delete( $key, $time = 0 ) {
                wfProfileIn( __METHOD__ );
                wfDebug( __METHOD__ . "($key)\n" );
@@ -165,6 +190,12 @@ class DBABagOStuff extends BagOStuff {
                return $ret;
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        function add( $key, $value, $exptime = 0 ) {
                wfProfileIn( __METHOD__ );
 
@@ -197,6 +228,9 @@ class DBABagOStuff extends BagOStuff {
                return $ret;
        }
 
+       /**
+        * @return Array
+        */
        function keys() {
                $reader = $this->getReader();
                $k1 = dba_firstkey( $reader );
index fb31d5c..f86cf15 100644 (file)
@@ -33,6 +33,9 @@ class EhcacheBagOStuff extends BagOStuff {
        
        var $curls = array();
 
+       /**
+        * @param $params array
+        */
        function __construct( $params ) {
                if ( !defined( 'CURLOPT_TIMEOUT_MS' ) ) {
                        throw new MWException( __CLASS__.' requires curl version 7.16.2 or later.' );
@@ -59,6 +62,10 @@ class EhcacheBagOStuff extends BagOStuff {
                );
        }
 
+       /**
+        * @param $key string
+        * @return bool|mixed
+        */
        public function get( $key ) {
                wfProfileIn( __METHOD__ );
                $response = $this->doItemRequest( $key );
@@ -93,6 +100,12 @@ class EhcacheBagOStuff extends BagOStuff {
                return $data;
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $expiry int
+        * @return bool
+        */
        public function set( $key, $value, $expiry = 0 ) {
                wfProfileIn( __METHOD__ );
                $expiry = $this->convertExpiry( $expiry );
@@ -130,6 +143,11 @@ class EhcacheBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param $key string
+        * @param $time int
+        * @return bool
+        */
        public function delete( $key, $time = 0 ) {
                wfProfileIn( __METHOD__ );
                $response = $this->doItemRequest( $key,
@@ -145,6 +163,10 @@ class EhcacheBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param $key string
+        * @return string
+        */
        protected function getCacheUrl( $key ) {
                if ( count( $this->servers ) == 1 ) {
                        $server = reset( $this->servers );
@@ -172,6 +194,13 @@ class EhcacheBagOStuff extends BagOStuff {
                return $this->curls[$cacheUrl];
        }
 
+       /**
+        * @param $key string
+        * @param $data
+        * @param $type
+        * @param $ttl
+        * @return int
+        */
        protected function attemptPut( $key, $data, $type, $ttl ) {
                // In initial benchmarking, it was 30 times faster to use CURLOPT_POST 
                // than CURLOPT_UPLOAD with CURLOPT_READFUNCTION. This was because
@@ -196,6 +225,10 @@ class EhcacheBagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @param $key string
+        * @return bool
+        */
        protected function createCache( $key ) {
                wfDebug( __METHOD__.": creating cache for $key\n" );
                $response = $this->doCacheRequest( $key, 
@@ -208,21 +241,26 @@ class EhcacheBagOStuff extends BagOStuff {
                        wfDebug( __CLASS__.": failed to create cache for $key\n" );
                        return false;
                }
-               if ( $response['http_code'] == 201 /* created */ 
-                       || $response['http_code'] == 409 /* already there */ ) 
-               {
-                       return true;
-               } else {
-                       return false;
-               }                       
+               return ( $response['http_code'] == 201 /* created */
+                       || $response['http_code'] == 409 /* already there */ );
        }
 
+       /**
+        * @param $key string
+        * @param $curlOptions array
+        * @return array|bool|mixed
+        */
        protected function doCacheRequest( $key, $curlOptions = array() ) {
                $cacheUrl = $this->getCacheUrl( $key );
                $curl = $this->getCurl( $cacheUrl );
                return $this->doRequest( $curl, $cacheUrl, $curlOptions );
        }
 
+       /**
+        * @param $key string
+        * @param $curlOptions array
+        * @return array|bool|mixed
+        */
        protected function doItemRequest( $key, $curlOptions = array() ) {
                $cacheUrl = $this->getCacheUrl( $key );
                $curl = $this->getCurl( $cacheUrl );
@@ -230,6 +268,13 @@ class EhcacheBagOStuff extends BagOStuff {
                return $this->doRequest( $curl, $url, $curlOptions );
        }
 
+       /**
+        * @param $curl
+        * @param $url string
+        * @param $curlOptions array
+        * @return array|bool|mixed
+        * @throws MWException
+        */
        protected function doRequest( $curl, $url, $curlOptions = array() ) {
                if ( array_diff_key( $curlOptions, $this->curlOptions ) ) {
                        // var_dump( array_diff_key( $curlOptions, $this->curlOptions ) );
index abc6bcf..bd28b24 100644 (file)
  * @ingroup Cache
  */
 class EmptyBagOStuff extends BagOStuff {
+
+       /**
+        * @param $key string
+        * @return bool
+        */
        function get( $key ) {
                return false;
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exp int
+        * @return bool
+        */
        function set( $key, $value, $exp = 0 ) {
                return true;
        }
 
+       /**
+        * @param $key string
+        * @param $time int
+        * @return bool
+        */
        function delete( $key, $time = 0 ) {
                return true;
        }
index 26b949f..799f26a 100644 (file)
@@ -34,6 +34,10 @@ class HashBagOStuff extends BagOStuff {
                $this->bag = array();
        }
 
+       /**
+        * @param $key string
+        * @return bool
+        */
        protected function expire( $key ) {
                $et = $this->bag[$key][1];
 
@@ -46,6 +50,10 @@ class HashBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $key string
+        * @return bool|mixed
+        */
        function get( $key ) {
                if ( !isset( $this->bag[$key] ) ) {
                        return false;
@@ -58,10 +66,22 @@ class HashBagOStuff extends BagOStuff {
                return $this->bag[$key][0];
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        function set( $key, $value, $exptime = 0 ) {
                $this->bag[$key] = array( $value, $this->convertExpiry( $exptime ) );
+               return true;
        }
 
+       /**
+        * @param $key string
+        * @param $time int
+        * @return bool
+        */
        function delete( $key, $time = 0 ) {
                if ( !isset( $this->bag[$key] ) ) {
                        return false;
@@ -72,6 +92,9 @@ class HashBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @return array
+        */
        function keys() {
                return array_keys( $this->bag );
        }
index 1312866..464e507 100644 (file)
@@ -86,6 +86,7 @@ class MemcachedBagOStuff extends BagOStuff {
        /**
         * @param $key string
         * @param $value int
+        * @param $exptime int (default 0)
         * @return Mixed
         */
        public function add( $key, $value, $exptime = 0 ) {
@@ -119,6 +120,7 @@ class MemcachedBagOStuff extends BagOStuff {
         * the other control characters for compatibility with libmemcached
         * verify_key. We leave other punctuation alone, to maximise backwards
         * compatibility.
+        * @param $key string
         * @return string
         */
        public function encodeKey( $key ) {
@@ -126,6 +128,10 @@ class MemcachedBagOStuff extends BagOStuff {
                        array( $this, 'encodeKeyCallback' ), $key );
        }
 
+       /**
+        * @param $m array
+        * @return string
+        */
        protected function encodeKeyCallback( $m ) {
                return rawurlencode( $m[0] );
        }
index 9602ffe..eda57c0 100644 (file)
@@ -573,10 +573,10 @@ class MWMemcached {
         * output as an array (null array if no output)
         *
         * NOTE: due to a possible bug in how PHP reads while using fgets(), each
-        *       line may not be terminated by a \r\n.  More specifically, my testing
+        *       line may not be terminated by a "\r\n".  More specifically, my testing
         *       has shown that, on FreeBSD at least, each line is terminated only
-        *       with a \n.  This is with the PHP flag auto_detect_line_endings set
-        *       to falase (the default).
+        *       with a "\n".  This is with the PHP flag auto_detect_line_endings set
+        *       to false (the default).
         *
         * @param $sock Resource: socket to send command on
         * @param $cmd String: command to run
@@ -895,7 +895,10 @@ class MWMemcached {
        function _load_items( $sock, &$ret ) {
                while ( 1 ) {
                        $decl = fgets( $sock );
-                       if ( $decl == "END\r\n" ) {
+                       if( $decl === false ) {
+                               $this->_debugprint( "Error reading socket for a memcached response\n" );
+                               return 0;
+                       } elseif ( $decl == "END\r\n" ) {
                                return true;
                        } elseif ( preg_match( '/^VALUE (\S+) (\d+) (\d+)\r\n$/', $decl, $match ) ) {
                                list( $rkey, $flags, $len ) = array( $match[1], $match[2], $match[3] );
@@ -939,7 +942,12 @@ class MWMemcached {
                                }
 
                        } else {
-                               $this->_debugprint( "Error parsing memcached response\n" );
+                               $peer = $peerAddress = $peerPort = '';
+                               $gotPeer = socket_getpeername( $sock, $peerAddress, $peerPort );
+                               if( $gotPeer ) {
+                                       $peer = " from [$peerAddress:$peerPort";
+                               }
+                               $this->_debugprint( "Error parsing memcached response{$peer}\n" );
                                return 0;
                        }
                }
index 65d736a..76886eb 100644 (file)
@@ -141,6 +141,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
        /**
         * @param $key string
         * @param $value int
+        * @param $exptime int
         * @return Mixed
         */
        public function add( $key, $value, $exptime = 0 ) {
@@ -188,8 +189,9 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
         * the client, but some day we might find a case where it should be
         * different.
         *
-        * @param $key The key used by the caller, or false if there wasn't one.
-        * @param $result The return value
+        * @param $key string The key used by the caller, or false if there wasn't one.
+        * @param $result Mixed The return value
+        * @return Mixed
         */
        protected function checkResult( $key, $result ) {
                if ( $result !== false ) {
index c562134..a46dc71 100644 (file)
@@ -68,7 +68,7 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
        /**
         * @param $key
         * @param $timeout int
-        * @return
+        * @return bool
         */
        public function lock( $key, $timeout = 0 ) {
                return $this->client->lock( $this->encodeKey( $key ), $timeout );
index fd60e72..e496ddd 100644 (file)
@@ -34,11 +34,12 @@ class MultiWriteBagOStuff extends BagOStuff {
        /**
         * Constructor. Parameters are:
         *
-        *   - caches:   This should have a numbered array of cache parameter 
+        *   - caches:   This should have a numbered array of cache parameter
         *               structures, in the style required by $wgObjectCaches. See
         *               the documentation of $wgObjectCaches for more detail.
         *
         * @param $params array
+        * @throws MWException
         */
        public function __construct( $params ) {
                if ( !isset( $params['caches'] ) ) {
@@ -51,10 +52,17 @@ class MultiWriteBagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @param $debug bool
+        */
        public function setDebug( $debug ) {
                $this->doWrite( 'setDebug', $debug );
        }
 
+       /**
+        * @param $key string
+        * @return bool|mixed
+        */
        public function get( $key ) {
                foreach ( $this->caches as $cache ) {
                        $value = $cache->get( $key );
@@ -65,30 +73,68 @@ class MultiWriteBagOStuff extends BagOStuff {
                return false;
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        public function set( $key, $value, $exptime = 0 ) {
                return $this->doWrite( 'set', $key, $value, $exptime );
        }
 
+       /**
+        * @param $key string
+        * @param $time int
+        * @return bool
+        */
        public function delete( $key, $time = 0 ) {
                return $this->doWrite( 'delete', $key, $time );
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        public function add( $key, $value, $exptime = 0 ) {
                return $this->doWrite( 'add', $key, $value, $exptime );
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        public function replace( $key, $value, $exptime = 0 ) {
                return $this->doWrite( 'replace', $key, $value, $exptime );
        }
 
+       /**
+        * @param $key string
+        * @param $value int
+        * @return bool|null
+        */
        public function incr( $key, $value = 1 ) {
                return $this->doWrite( 'incr', $key, $value );
        }
 
+       /**
+        * @param $key string
+        * @param $value int
+        * @return bool
+        */
        public function decr( $key, $value = 1 ) {
                return $this->doWrite( 'decr', $key, $value );
-       }       
+       }
 
+       /**
+        * @param $key string
+        * @param $timeout int
+        * @return bool
+        */
        public function lock( $key, $timeout = 0 ) {
                // Lock only the first cache, to avoid deadlocks
                if ( isset( $this->caches[0] ) ) {
@@ -98,6 +144,10 @@ class MultiWriteBagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @param $key string
+        * @return bool
+        */
        public function unlock( $key ) {
                if ( isset( $this->caches[0] ) ) {
                        return $this->caches[0]->unlock( $key );
@@ -106,6 +156,10 @@ class MultiWriteBagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @param $method string
+        * @return bool
+        */
        protected function doWrite( $method /*, ... */ ) {
                $ret = true;
                $args = func_get_args();
@@ -120,9 +174,11 @@ class MultiWriteBagOStuff extends BagOStuff {
        }
 
        /**
-        * Delete objects expiring before a certain date. 
+        * Delete objects expiring before a certain date.
         *
         * Succeed if any of the child caches succeed.
+        * @param $date string
+        * @param $progressCallback bool|callback
         * @return bool
         */
        public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) {
index 2e00e16..9b360f3 100644 (file)
@@ -32,9 +32,9 @@ class ObjectCache {
        /**
         * Get a cached instance of the specified type of cache object.
         *
-        * @param $id
+        * @param $id string
         *
-        * @return object
+        * @return ObjectCache
         */
        static function getInstance( $id ) {
                if ( isset( self::$instances[$id] ) ) {
@@ -56,8 +56,9 @@ class ObjectCache {
        /**
         * Create a new cache object of the specified type.
         *
-        * @param $id
+        * @param $id string
         *
+        * @throws MWException
         * @return ObjectCache
         */
        static function newFromId( $id ) {
@@ -76,6 +77,7 @@ class ObjectCache {
         *
         * @param $params array
         *
+        * @throws MWException
         * @return ObjectCache
         */
        static function newFromParams( $params ) {
@@ -99,6 +101,8 @@ class ObjectCache {
         * be an alias to the configured cache choice for that.
         * If no cache choice is configured (by default $wgMainCacheType is CACHE_NONE),
         * then CACHE_ANYTHING will forward to CACHE_DB.
+        * @param $params array
+        * @return ObjectCache
         */
        static function newAnything( $params ) {
                global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
@@ -114,6 +118,8 @@ class ObjectCache {
        /**
         * Factory function referenced from DefaultSettings.php for CACHE_ACCEL.
         *
+        * @param $params array
+        * @throws MWException
         * @return ObjectCache
         */
        static function newAccelerator( $params ) {
index 209975b..5ad7020 100644 (file)
@@ -122,6 +122,7 @@ class SqlBagOStuff extends BagOStuff {
 
        /**
         * Get the table name for a given key
+        * @param $key string
         * @return string
         */
        protected function getTableByKey( $key ) {
@@ -135,6 +136,7 @@ class SqlBagOStuff extends BagOStuff {
 
        /**
         * Get the table name for a given shard index
+        * @param $index int
         * @return string
         */
        protected function getTableByShard( $index ) {
@@ -147,11 +149,19 @@ class SqlBagOStuff extends BagOStuff {
                }
        }
 
+       /**
+        * @param $key string
+        * @return mixed
+        */
        public function get( $key ) {
                $values = $this->getMulti( array( $key ) );
                return $values[$key];
        }
 
+       /**
+        * @param $keys array
+        * @return Array
+        */
        public function getMulti( array $keys ) {
                $values = array(); // array of (key => value)
 
@@ -208,6 +218,12 @@ class SqlBagOStuff extends BagOStuff {
                return $values;
        }
 
+       /**
+        * @param $key string
+        * @param $value mixed
+        * @param $exptime int
+        * @return bool
+        */
        public function set( $key, $value, $exptime = 0 ) {
                $db = $this->getDB();
                $exptime = intval( $exptime );
@@ -247,6 +263,11 @@ class SqlBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $key string
+        * @param $time int
+        * @return bool
+        */
        public function delete( $key, $time = 0 ) {
                $db = $this->getDB();
 
@@ -266,6 +287,11 @@ class SqlBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @param $key string
+        * @param $step int
+        * @return int|null
+        */
        public function incr( $key, $step = 1 ) {
                $db = $this->getDB();
                $tableName = $this->getTableByKey( $key );
@@ -316,6 +342,9 @@ class SqlBagOStuff extends BagOStuff {
                return $newValue;
        }
 
+       /**
+        * @return Array
+        */
        public function keys() {
                $db = $this->getDB();
                $result = array();
@@ -331,10 +360,17 @@ class SqlBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param $exptime string
+        * @return bool
+        */
        protected function isExpired( $exptime ) {
                return $exptime != $this->getMaxDateTime() && wfTimestamp( TS_UNIX, $exptime ) < time();
        }
 
+       /**
+        * @return string
+        */
        protected function getMaxDateTime() {
                if ( time() > 0x7fffffff ) {
                        return $this->getDB()->timestamp( 1 << 62 );
@@ -366,6 +402,8 @@ class SqlBagOStuff extends BagOStuff {
 
        /**
         * Delete objects from the database which expire before a certain date.
+        * @param $timestamp string
+        * @param $progressCallback bool|callback
         * @return bool
         */
        public function deleteObjectsExpiringBefore( $timestamp, $progressCallback = false ) {
index 4fd3cf4..21aa39e 100644 (file)
@@ -74,6 +74,9 @@ class WinCacheBagOStuff extends BagOStuff {
                return true;
        }
 
+       /**
+        * @return Array
+        */
        public function keys() {
                $info = wincache_ucache_info();
                $list = $info['ucache_entries'];
index def1aee..02950f0 100644 (file)
@@ -209,6 +209,10 @@ class LinkHolderArray {
         * article length checks (for stub links) to be bundled into a single query.
         *
         * @param $nt Title
+        * @param $text String
+        * @param $query Array [optional]
+        * @param $trail String [optional]
+        * @param $prefix String [optional]
         * @return string
         */
        function makeHolder( $nt, $text = '', $query = array(), $trail = '', $prefix = ''  ) {
index 7bd2aab..94af6a8 100644 (file)
  * transformation of that wiki markup it into XHTML output / markup
  * (which in turn the browser understands, and can display).
  *
- * <pre>
- * There are five main entry points into the Parser class:
- * parse()
+ * There are seven main entry points into the Parser class:
+ *
+ * - Parser::parse()
  *     produces HTML output
- * preSaveTransform().
+ * - Parser::preSaveTransform().
  *     produces altered wiki markup.
- * preprocess()
+ * - Parser::preprocess()
  *     removes HTML comments and expands templates
- * cleanSig() / cleanSigInSig()
+ * - Parser::cleanSig() and Parser::cleanSigInSig()
  *     Cleans a signature before saving it to preferences
- * getSection()
+ * - Parser::getSection()
  *     Return the content of a section from an article for section editing
- * replaceSection()
+ * - Parser::replaceSection()
  *     Replaces a section by number inside an article
- * getPreloadText()
+ * - Parser::getPreloadText()
  *     Removes <noinclude> sections, and <includeonly> tags.
  *
  * Globals used:
  *    object: $wgContLang
  *
- * NOT $wgUser or $wgTitle or $wgRequest or $wgLang. Keep them away!
+ * @warning $wgUser or $wgTitle or $wgRequest or $wgLang. Keep them away!
  *
- * settings:
- *  $wgUseDynamicDates*, $wgInterwikiMagic*,
- *  $wgNamespacesWithSubpages, $wgAllowExternalImages*,
- *  $wgLocaltimezone, $wgAllowSpecialInclusion*,
- *  $wgMaxArticleSize*
+ * @par Settings:
+ * $wgLocaltimezone
+ * $wgNamespacesWithSubpages
  *
- *  * only within ParserOptions
- * </pre>
+ * @par Settings only within ParserOptions:
+ * $wgAllowExternalImages
+ * $wgAllowSpecialInclusion
+ * $wgInterwikiMagic
+ * $wgMaxArticleSize
+ * $wgUseDynamicDates
  *
  * @ingroup Parser
  */
@@ -364,6 +366,7 @@ class Parser {
                # No more strip!
                wfRunHooks( 'ParserAfterStrip', array( &$this, &$text, &$this->mStripState ) );
                $text = $this->internalParse( $text );
+               wfRunHooks( 'ParserAfterParse', array( &$this, &$text, &$this->mStripState ) );
 
                $text = $this->mStripState->unstripGeneral( $text );
 
@@ -556,10 +559,11 @@ class Parser {
        }
 
        /**
-        * Process the wikitext for the ?preload= feature. (bug 5210)
+        * Process the wikitext for the "?preload=" feature. (bug 5210)
         *
-        * <noinclude>, <includeonly> etc. are parsed as for template transclusion,
-        * comments, templates, arguments, tags hooks and parser functions are untouched.
+        * "<noinclude>", "<includeonly>" etc. are parsed as for template
+        * transclusion, comments, templates, arguments, tags hooks and parser
+        * functions are untouched.
         *
         * @param $text String
         * @param $title Title
@@ -787,11 +791,14 @@ class Parser {
         * in the text with a random marker and returns the next text. The output
         * parameter $matches will be an associative array filled with data in
         * the form:
+        *
+        * @code
         *   'UNIQ-xxxxx' => array(
         *     'element',
         *     'tag content',
         *     array( 'param' => 'x' ),
         *     '<element param="x">tag content</element>' ) )
+        * @endcode
         *
         * @param $elements array list of element names. Comments are always extracted.
         * @param $text string Source text string.
@@ -1121,6 +1128,7 @@ class Parser {
                        $text = $this->replaceVariables( $text );
                }
 
+               wfRunHooks( 'InternalParseBeforeSanitize', array( &$this, &$text, &$this->mStripState ) );
                $text = Sanitizer::removeHTMLtags( $text, array( &$this, 'attributeStripCallback' ), false, array_keys( $this->mTransparentTagHooks ) );
                wfRunHooks( 'InternalParseBeforeLinks', array( &$this, &$text, &$this->mStripState ) );
 
@@ -2938,7 +2946,7 @@ class Parser {
         *
         * @param $text String: The text to parse
         * @param $flags Integer: bitwise combination of:
-        *          self::PTD_FOR_INCLUSION    Handle <noinclude>/<includeonly> as if the text is being
+        *          self::PTD_FOR_INCLUSION    Handle "<noinclude>" and "<includeonly>" as if the text is being
         *                                     included. Default is to assume a direct page view.
         *
         * The generated DOM tree must depend only on the input text and the flags.
@@ -3515,7 +3523,7 @@ class Parser {
         * Static function to get a template
         * Can be overridden via ParserOptions::setTemplateCallback().
         *
-        * @parma $title Title
+        * @param $title  Title
         * @param $parser Parser
         *
         * @return array
@@ -3689,7 +3697,7 @@ class Parser {
         * Triple brace replacement -- used for template arguments
         * @private
         *
-        * @param $peice array
+        * @param $piece array
         * @param $frame PPFrame
         *
         * @return array
@@ -4322,7 +4330,7 @@ class Parser {
        }
 
        /**
-        * Transform wiki markup when saving a page by doing \r\n -> \n
+        * Transform wiki markup when saving a page by doing "\r\n" -> "\n"
         * conversion, substitting signatures, {{subst:}} templates, etc.
         *
         * @param $text String: the text to transform
@@ -4618,7 +4626,7 @@ class Parser {
        }
 
        /**
-        * Create an HTML-style tag, e.g. <yourtag>special text</yourtag>
+        * Create an HTML-style tag, e.g. "<yourtag>special text</yourtag>"
         * The callback should have the following form:
         *    function myParserHook( $text, $params, $parser, $frame ) { ... }
         *
@@ -4636,7 +4644,7 @@ class Parser {
         * this interface, as it is not documented and injudicious use could smash
         * private variables.**
         *
-        * @param $tag Mixed: the tag to use, e.g. 'hook' for <hook>
+        * @param $tag Mixed: the tag to use, e.g. 'hook' for "<hook>"
         * @param $callback Mixed: the callback function (and object) to use for the tag
         * @return Mixed|null The old value of the mTagHooks array associated with the hook
         */
@@ -4666,7 +4674,7 @@ class Parser {
         * @since 1.10
         * @todo better document or deprecate this
         *
-        * @param $tag Mixed: the tag to use, e.g. 'hook' for <hook>
+        * @param $tag Mixed: the tag to use, e.g. 'hook' for "<hook>"
         * @param $callback Mixed: the callback function (and object) to use for the tag
         * @return Mixed|null The old value of the mTagHooks array associated with the hook
         */
@@ -4774,7 +4782,7 @@ class Parser {
        }
 
        /**
-        * Create a tag function, e.g. <test>some stuff</test>.
+        * Create a tag function, e.g. "<test>some stuff</test>".
         * Unlike tag hooks, tag functions are parsed at preprocessor level.
         * Unlike parser functions, their content is not preprocessed.
         * @return null
@@ -4795,7 +4803,7 @@ class Parser {
 
        /**
         * @todo FIXME: Update documentation. makeLinkObj() is deprecated.
-        * Replace <!--LINK--> link placeholders with actual links, in the buffer
+        * Replace "<!--LINK-->" link placeholders with actual links, in the buffer
         * Placeholders created in Skin::makeLinkObj()
         *
         * @param $text string
@@ -4808,7 +4816,7 @@ class Parser {
        }
 
        /**
-        * Replace <!--LINK--> link placeholders with plain text of links
+        * Replace "<!--LINK-->" link placeholders with plain text of links
         * (not HTML-formatted).
         *
         * @param $text String
@@ -5280,13 +5288,13 @@ class Parser {
         *
         * @param $text String: Page wikitext
         * @param $section String: a section identifier string of the form:
-        *   <flag1> - <flag2> - ... - <section number>
+        *   "<flag1> - <flag2> - ... - <section number>"
         *
         * Currently the only recognised flag is "T", which means the target section number
         * was derived during a template inclusion parse, in other words this is a template
         * section edit link. If no flags are given, it was an ordinary section edit link.
         * This flag is required to avoid a section numbering mismatch when a section is
-        * enclosed by <includeonly> (bug 6563).
+        * enclosed by "<includeonly>" (bug 6563).
         *
         * The section number 0 pulls the text before the first heading; other numbers will
         * pull the given section along with its lower-level subsections. If the section is
index bb99039..6a4ef0c 100644 (file)
@@ -119,8 +119,9 @@ class ParserCache {
         *
         * @todo Document parameter $useOutdated
         *
-        * @param $article Article
-        * @param $popts ParserOptions
+        * @param $article     Article
+        * @param $popts       ParserOptions
+        * @param $useOutdated Boolean (default true)
         * @return bool|mixed|string
         */
        public function getKey( $article, $popts, $useOutdated = true ) {
@@ -157,9 +158,9 @@ class ParserCache {
         * Retrieve the ParserOutput from ParserCache.
         * false if not found or outdated.
         *
-        * @param $article Article
-        * @param $popts ParserOptions
-        * @param $useOutdated
+        * @param $article     Article
+        * @param $popts       ParserOptions
+        * @param $useOutdated Boolean (default false)
         *
         * @return ParserOutput|bool False on failure
         */
index d929f1a..62d3bfd 100644 (file)
@@ -348,7 +348,7 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * Add some text to the <head>.
+        * Add some text to the "<head>".
         * If $tag is set, the section with that tag will only be included once
         * in a given page.
         */
index 19bcbf2..bd13f9a 100644 (file)
@@ -231,7 +231,7 @@ interface PPNode {
        function getName();
 
        /**
-        * Split a <part> node into an associative array containing:
+        * Split a "<part>" node into an associative array containing:
         *    name          PPNode name
         *    index         String index
         *    value         PPNode value
@@ -239,13 +239,13 @@ interface PPNode {
        function splitArg();
 
        /**
-        * Split an <ext> node into an associative array containing name, attr, inner and close
+        * Split an "<ext>" node into an associative array containing name, attr, inner and close
         * All values in the resulting array are PPNodes. Inner and close are optional.
         */
        function splitExt();
 
        /**
-        * Split an <h> node
+        * Split an "<h>" node
         */
        function splitHeading();
 }
index f991df2..7fe420d 100644 (file)
@@ -112,7 +112,7 @@ class Preprocessor_DOM implements Preprocessor {
         *
         * @param $text String: the text to parse
         * @param $flags Integer: bitwise combination of:
-        *          Parser::PTD_FOR_INCLUSION    Handle <noinclude>/<includeonly> as if the text is being
+        *          Parser::PTD_FOR_INCLUSION    Handle "<noinclude>" and "<includeonly>" as if the text is being
         *                                     included. Default is to assume a direct page view.
         *
         * The generated DOM tree must depend only on the input text and the flags.
@@ -1658,10 +1658,10 @@ class PPNode_DOM implements PPNode {
        }
 
        /**
-        * Split a <part> node into an associative array containing:
-        *    name          PPNode name
-        *    index         String index
-        *    value         PPNode value
+        * Split a "<part>" node into an associative array containing:
+        *  - name          PPNode name
+        *  - index         String index
+        *  - value         PPNode value
         *
         * @return array
         */
@@ -1681,7 +1681,7 @@ class PPNode_DOM implements PPNode {
        }
 
        /**
-        * Split an <ext> node into an associative array containing name, attr, inner and close
+        * Split an "<ext>" node into an associative array containing name, attr, inner and close
         * All values in the resulting array are PPNodes. Inner and close are optional.
         *
         * @return array
@@ -1708,7 +1708,7 @@ class PPNode_DOM implements PPNode {
        }
 
        /**
-        * Split a <h> node
+        * Split a "<h>" node
         * @return array
         */
        function splitHeading() {
index f455a1d..0e202fd 100644 (file)
@@ -24,7 +24,7 @@
 /**
  * Differences from DOM schema:
  *   * attribute nodes are children
- *   * <h> nodes that aren't at the top are replaced with <possible-h>
+ *   * "<h>" nodes that aren't at the top are replaced with <possible-h>
  * @ingroup Parser
  */
 class Preprocessor_Hash implements Preprocessor {
@@ -91,7 +91,7 @@ class Preprocessor_Hash implements Preprocessor {
         *
         * @param $text String: the text to parse
         * @param $flags Integer: bitwise combination of:
-        *          Parser::PTD_FOR_INCLUSION    Handle <noinclude>/<includeonly> as if the text is being
+        *          Parser::PTD_FOR_INCLUSION    Handle "<noinclude>" and "<includeonly>" as if the text is being
         *                                     included. Default is to assume a direct page view.
         *
         * The generated DOM tree must depend only on the input text and the flags.
@@ -1603,10 +1603,10 @@ class PPNode_Hash_Tree implements PPNode {
        }
 
        /**
-        * Split a <part> node into an associative array containing:
-        *    name          PPNode name
-        *    index         String index
-        *    value         PPNode value
+        * Split a "<part>" node into an associative array containing:
+        *  - name          PPNode name
+        *  - index         String index
+        *  - value         PPNode value
         *
         * @return array
         */
@@ -1638,7 +1638,7 @@ class PPNode_Hash_Tree implements PPNode {
        }
 
        /**
-        * Split an <ext> node into an associative array containing name, attr, inner and close
+        * Split an "<ext>" node into an associative array containing name, attr, inner and close
         * All values in the resulting array are PPNodes. Inner and close are optional.
         *
         * @return array
@@ -1666,7 +1666,7 @@ class PPNode_Hash_Tree implements PPNode {
        }
 
        /**
-        * Split an <h> node
+        * Split an "<h>" node
         *
         * @return array
         */
@@ -1692,7 +1692,7 @@ class PPNode_Hash_Tree implements PPNode {
        }
 
        /**
-        * Split a <template> or <tplarg> node
+        * Split a "<template>" or "<tplarg>" node
         *
         * @return array
         */
index b3d7e75..99fe7ed 100644 (file)
@@ -713,23 +713,27 @@ class ResourceLoader {
                                // Styles
                                $styles = array();
                                if ( $context->shouldIncludeStyles() ) {
-                                       // If we are in debug mode without &only= set, we'll want to return an array of URLs
-                                       // See comment near shouldIncludeScripts() for more details
-                                       if ( $context->getDebug() && !$context->getOnly() && $module->supportsURLLoading() ) {
-                                               $styles = $module->getStyleURLsForDebug( $context );
-                                       } else {
-                                               $styles = $module->getStyles( $context );
-                                               // Minify CSS before embedding in mw.loader.implement call
-                                               // (unless in debug mode)
-                                               if ( !$context->getDebug() ) {
-                                                       foreach ( $styles as $media => $style ) {
-                                                               if ( is_string( $style ) ) {
-                                                                       $styles[$media] = $this->filter( 'minify-css', $style );
+                                       // Don't create empty stylesheets like array( '' => '' ) for modules
+                                       // that don't *have* any stylesheets (bug 38024).
+                                       $stylePairs = $module->getStyles( $context );
+                                       if ( count ( $stylePairs ) ) {
+                                               // If we are in debug mode without &only= set, we'll want to return an array of URLs
+                                               // See comment near shouldIncludeScripts() for more details
+                                               if ( $context->getDebug() && !$context->getOnly() && $module->supportsURLLoading() ) {
+                                                       $styles = $module->getStyleURLsForDebug( $context );
+                                               } else {
+                                                       // Minify CSS before embedding in mw.loader.implement call
+                                                       // (unless in debug mode)
+                                                       if ( !$context->getDebug() ) {
+                                                               foreach ( $stylePairs as $media => $style ) {
+                                                                       if ( is_string( $style ) ) {
+                                                                               $stylePairs[$media] = $this->filter( 'minify-css', $style );
+                                                                       }
                                                                }
                                                        }
+                                                       // Combine styles into @media groups as one big string
+                                                       $styles = array( '' => self::makeCombinedStyles( $stylePairs ) );
                                                }
-                                               // Combine styles for all media types
-                                               $styles = array( '' => self::makeCombinedStyles( $styles ) );
                                        }
                                }
 
@@ -748,7 +752,11 @@ class ResourceLoader {
                                                }
                                                break;
                                        case 'styles':
-                                               $out .= $styles['']; // Code above has set $styles['']
+                                               // We no longer seperate into media, they are all concatenated now with
+                                               // custom media type groups into @media .. {} sections.
+                                               // Module returns either an empty array or an array with '' (no media type) as
+                                               // only key.
+                                               $out .= isset( $styles[''] ) ? $styles[''] : '';
                                                break;
                                        case 'messages':
                                                $out .= self::makeMessageSetScript( new XmlJsCode( $messagesBlob ) );
@@ -850,7 +858,7 @@ class ResourceLoader {
 
        /**
         * Combines an associative array mapping media type to CSS into a
-        * single stylesheet with @media blocks.
+        * single stylesheet with "@media" blocks.
         *
         * @param $styles Array: List of CSS strings keyed by media type
         *
index 035ff09..1e19d0f 100644 (file)
@@ -237,8 +237,8 @@ abstract class ResourceLoaderModule {
 
        /**
         * Where on the HTML page should this module's JS be loaded?
-        * 'top': in the <head>
-        * 'bottom': at the bottom of the <body>
+        *  - 'top': in the "<head>"
+        *  - 'bottom': at the bottom of the "<body>"
         *
         * @return string
         */
index f35e774..9dd6939 100644 (file)
@@ -42,7 +42,6 @@ abstract class ResourceLoaderWikiModule extends ResourceLoaderModule {
        /* Abstract Protected Methods */
 
        /**
-        * @abstract
         * @param $context ResourceLoaderContext
         */
        abstract protected function getPages( ResourceLoaderContext $context );
index 06a4694..156b5f2 100644 (file)
@@ -40,7 +40,12 @@ class ActiveUsersPager extends UsersPager {
        /**
         * @var Array
         */
-       protected $groups;
+       protected $hideGroups = array();
+
+       /**
+        * @var Array
+        */
+       protected $hideRights = array();
 
        /**
         * @param $context IContextSource
@@ -73,12 +78,11 @@ class ActiveUsersPager extends UsersPager {
 
                $this->opts->fetchValuesFromRequest( $this->getRequest() );
 
-               $this->groups = array();
                if ( $this->opts->getValue( 'hidebots' ) == 1 ) {
-                       $this->groups['bot'] = true;
+                       $this->hideRights[] = 'bot';
                }
                if ( $this->opts->getValue( 'hidesysops' ) == 1 ) {
-                       $this->groups['sysop'] = true;
+                       $this->hideGroups[] = 'sysop';
                }
        }
 
@@ -127,12 +131,30 @@ class ActiveUsersPager extends UsersPager {
                $lang = $this->getLanguage();
 
                $list = array();
-               foreach( self::getGroups( $row->user_id ) as $group ) {
-                       if ( isset( $this->groups[$group] ) ) {
+               $user = User::newFromId( $row->user_id );
+
+               // User right filter
+               foreach( $this->hideRights as $right ) {
+                       // Calling User::getRights() within the loop so that
+                       // if the hideRights() filter is empty, we don't have to
+                       // trigger the lazy-init of the big userrights array in the
+                       // User object
+                       if ( in_array( $right, $user->getRights() ) ) {
+                               return '';
+                       }
+               }
+
+               // User group filter
+               // Note: This is a different loop than for user rights,
+               // because we're reusing it to build the group links
+               // at the same time
+               foreach( $user->getGroups() as $group ) {
+                       if ( in_array( $group, $this->hideGroups ) ) {
                                return '';
                        }
                        $list[] = self::buildGroupLink( $group, $userName );
                }
+
                $groups = $lang->commaList( $list );
 
                $item = $lang->specialList( $ulinks, $groups );
index 0c03871..fe9d41e 100644 (file)
@@ -146,8 +146,9 @@ class AllmessagesTablePager extends TablePager {
        function buildForm() {
                global $wgScript;
 
-               $languages = Language::fetchLanguageNames( null, 'mw' );
-               ksort( $languages );
+               $attrs = array( 'id' => 'mw-allmessages-form-lang', 'name' => 'lang' );
+               $msg = wfMessage( 'allmessages-language' );
+               $langSelect = Xml::languageSelector( $this->langcode, false, null, $attrs, $msg );
 
                $out  = Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-allmessages-form' ) ) .
                        Xml::fieldset( $this->msg( 'allmessages-filter-legend' )->text() ) .
@@ -187,18 +188,8 @@ class AllmessagesTablePager extends TablePager {
                                "</td>\n
                        </tr>
                        <tr>\n
-                               <td class=\"mw-label\">" .
-                                       Xml::label( $this->msg( 'allmessages-language' )->text(), 'mw-allmessages-form-lang' ) .
-                               "</td>\n
-                               <td class=\"mw-input\">" .
-                                       Xml::openElement( 'select', array( 'id' => 'mw-allmessages-form-lang', 'name' => 'lang' ) );
-
-               foreach( $languages as $lang => $name ) {
-                       $selected = $lang == $this->langcode;
-                       $out .= Xml::option( $lang . ' - ' . $name, $lang, $selected ) . "\n";
-               }
-               $out .= Xml::closeElement( 'select' ) .
-                               "</td>\n
+                               <td class=\"mw-label\">" . $langSelect[0] . "</td>\n
+                               <td class=\"mw-input\">" . $langSelect[1] . "</td>\n
                        </tr>" .
 
                        '<tr>
index 9465037..e54c67a 100644 (file)
@@ -594,6 +594,66 @@ class ContribsPager extends ReverseChronologicalPager {
                return $query;
        }
 
+       /**
+        * This method basically executes the exact same code as the parent class, though with
+        * a hook added, to allow extentions to add additional queries.
+        *
+        * @param $offset String: index offset, inclusive
+        * @param $limit Integer: exact query limit
+        * @param $descending Boolean: query direction, false for ascending, true for descending
+        * @return ResultWrapper
+        */
+       function reallyDoQuery( $offset, $limit, $descending ) {
+               list( $tables, $fields, $conds, $fname, $options, $join_conds ) = $this->buildQueryInfo( $offset, $limit, $descending );
+               $pager = $this;
+
+               /*
+                * This hook will allow extensions to add in additional queries, so they can get their data
+                * in My Contributions as well. Extensions should append their results to the $data array.
+                *
+                * Extension queries have to implement the navbar requirement as well. They should
+                * - have a column aliased as $pager->getIndexField()
+                * - have LIMIT set
+                * - have a WHERE-clause that compares the $pager->getIndexField()-equivalent column to the offset
+                * - have the ORDER BY specified based upon the details provided by the navbar
+                *
+                * See includes/Pager.php buildQueryInfo() method on how to build LIMIT, WHERE & ORDER BY
+                *
+                * &$data: an array of results of all contribs queries
+                * $pager: the ContribsPager object hooked into
+                * $offset: see phpdoc above
+                * $limit: see phpdoc above
+                * $descending: see phpdoc above
+                */
+               $data = array( $this->mDb->select( $tables, $fields, $conds, $fname, $options, $join_conds ) );
+               wfRunHooks( 'ContribsPager::reallyDoQuery', array( &$data, $pager, $offset, $limit, $descending ) );
+
+               $result = array();
+
+               // loop all results and collect them in an array
+               foreach ( $data as $j => $query ) {
+                       foreach ( $query as $i => $row ) {
+                               // use index column as key, allowing us to easily sort in PHP
+                               $result[$row->{$this->getIndexField()} . "-$i"] = $row;
+                       }
+               }
+
+               // sort results
+               if ( $descending ) {
+                       ksort( $result );
+               } else {
+                       krsort( $result );
+               }
+
+               // enforce limit
+               $result = array_slice( $result, 0, $limit );
+
+               // get rid of array keys
+               $result = array_values( $result );
+
+               return new FakeResultWrapper( $result );
+       }
+
        function getQueryInfo() {
                list( $tables, $index, $userCond, $join_cond ) = $this->getUserCond();
 
@@ -644,13 +704,22 @@ class ContribsPager extends ReverseChronologicalPager {
                $join_conds = array();
                $tables = array( 'revision', 'page', 'user' );
                if ( $this->contribs == 'newbie' ) {
-                       $tables[] = 'user_groups';
                        $max = $this->mDb->selectField( 'user', 'max(user_id)', false, __METHOD__ );
                        $condition[] = 'rev_user >' . (int)( $max - $max / 100 );
-                       $condition[] = 'ug_group IS NULL';
                        $index = 'user_timestamp';
-                       # @todo FIXME: Other groups may have 'bot' rights
-                       $join_conds['user_groups'] = array( 'LEFT JOIN', "ug_user = rev_user AND ug_group = 'bot'" );
+                       # ignore local groups with the bot right
+                       # @todo FIXME: Global groups may have 'bot' rights
+                       $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
+                       if( count( $groupsWithBotPermission ) ) {
+                               $tables[] = 'user_groups';
+                               $condition[] = 'ug_group IS NULL';
+                               $join_conds['user_groups'] = array(
+                                       'LEFT JOIN', array(
+                                               'ug_user = rev_user',
+                                               'ug_group' => $groupsWithBotPermission
+                                       )
+                               );
+                       }
                } else {
                        $uid = User::idFromName( $this->target );
                        if ( $uid ) {
@@ -699,27 +768,24 @@ class ContribsPager extends ReverseChronologicalPager {
        }
 
        function doBatchLookups() {
-               $this->mResult->rewind();
-               $revIds = array();
-               foreach ( $this->mResult as $row ) {
-                       if( $row->rev_parent_id ) {
-                               $revIds[] = $row->rev_parent_id;
-                       }
-               }
-               $this->mParentLens = Revision::getParentLengths( $this->getDatabase(), $revIds );
-               $this->mResult->rewind(); // reset
-
                # Do a link batch query
                $this->mResult->seek( 0 );
+               $revIds = array();
                $batch = new LinkBatch();
                # Give some pointers to make (last) links
                foreach ( $this->mResult as $row ) {
-                       if ( $this->contribs === 'newbie' ) { // multiple users
-                               $batch->add( NS_USER, $row->user_name );
-                               $batch->add( NS_USER_TALK, $row->user_name );
+                       if( isset( $row->rev_parent_id ) && $row->rev_parent_id ) {
+                               $revIds[] = $row->rev_parent_id;
+                       }
+                       if ( isset( $row->rev_id ) ) {
+                               if ( $this->contribs === 'newbie' ) { // multiple users
+                                       $batch->add( NS_USER, $row->user_name );
+                                       $batch->add( NS_USER_TALK, $row->user_name );
+                               }
+                               $batch->add( $row->page_namespace, $row->page_title );
                        }
-                       $batch->add( $row->page_namespace, $row->page_title );
                }
+               $this->mParentLens = Revision::getParentLengths( $this->getDatabase(), $revIds );
                $batch->execute();
                $this->mResult->seek( 0 );
        }
@@ -753,123 +819,140 @@ class ContribsPager extends ReverseChronologicalPager {
        function formatRow( $row ) {
                wfProfileIn( __METHOD__ );
 
-               $rev = new Revision( $row );
+               $ret = '';
                $classes = array();
 
-               $page = Title::newFromRow( $row );
-               $link = Linker::link(
-                       $page,
-                       htmlspecialchars( $page->getPrefixedText() ),
-                       array(),
-                       $page->isRedirect() ? array( 'redirect' => 'no' ) : array()
-               );
-               # Mark current revisions
-               $topmarktext = '';
-               if ( $row->rev_id == $row->page_latest ) {
-                       $topmarktext .= '<span class="mw-uctop">' . $this->messages['uctop'] . '</span>';
-                       # Add rollback link
-                       if ( !$row->page_is_new && $page->quickUserCan( 'rollback' )
-                               && $page->quickUserCan( 'edit' ) )
-                       {
-                               $this->preventClickjacking();
-                               $topmarktext .= ' ' . Linker::generateRollback( $rev );
-                       }
-               }
-               $user = $this->getUser();
-               # Is there a visible previous revision?
-               if ( $rev->userCan( Revision::DELETED_TEXT, $user ) && $rev->getParentId() !== 0 ) {
-                       $difftext = Linker::linkKnown(
+               /*
+                * There may be more than just revision rows. To make sure that we'll only be processing
+                * revisions here, let's _try_ to build a revision out of our row (without displaying
+                * notices though) and then trying to grab data from the built object. If we succeed,
+                * we're definitely dealing with revision data and we may proceed, if not, we'll leave it
+                * to extensions to subscribe to the hook to parse the row.
+                */
+               wfSuppressWarnings();
+               $rev = new Revision( $row );
+               $validRevision = $rev->getParentId() !== null;
+               wfRestoreWarnings();
+
+               if ( $validRevision ) {
+                       $classes = array();
+
+                       $page = Title::newFromRow( $row );
+                       $link = Linker::link(
                                $page,
-                               $this->messages['diff'],
+                               htmlspecialchars( $page->getPrefixedText() ),
                                array(),
-                               array(
-                                       'diff' => 'prev',
-                                       'oldid' => $row->rev_id
-                               )
+                               $page->isRedirect() ? array( 'redirect' => 'no' ) : array()
                        );
-               } else {
-                       $difftext = $this->messages['diff'];
-               }
-               $histlink = Linker::linkKnown(
-                       $page,
-                       $this->messages['hist'],
-                       array(),
-                       array( 'action' => 'history' )
-               );
-
-               if ( $row->rev_parent_id === null ) {
-                       // For some reason rev_parent_id isn't populated for this row.
-                       // Its rumoured this is true on wikipedia for some revisions (bug 34922).
-                       // Next best thing is to have the total number of bytes.
-                       $chardiff = ' . . ' . Linker::formatRevisionSize( $row->rev_len ) . ' . . ';
-               } else {
-                       $parentLen = isset( $this->mParentLens[$row->rev_parent_id] ) ? $this->mParentLens[$row->rev_parent_id] : 0;
-                       $chardiff = ' . . ' . ChangesList::showCharacterDifference(
-                                       $parentLen, $row->rev_len ) . ' . . ';
-               }
-
-               $lang = $this->getLanguage();
-               $comment = $lang->getDirMark() . Linker::revComment( $rev, false, true );
-               $date = $lang->userTimeAndDate( $row->rev_timestamp, $user );
-               if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) {
-                       $d = Linker::linkKnown(
+                       # Mark current revisions
+                       $topmarktext = '';
+                       $user = $this->getUser();
+                       if ( $row->rev_id == $row->page_latest ) {
+                               $topmarktext .= '<span class="mw-uctop">' . $this->messages['uctop'] . '</span>';
+                               # Add rollback link
+                               if ( !$row->page_is_new && $page->quickUserCan( 'rollback', $user )
+                                       && $page->quickUserCan( 'edit', $user ) )
+                               {
+                                       $this->preventClickjacking();
+                                       $topmarktext .= ' ' . Linker::generateRollback( $rev, $this->getContext() );
+                               }
+                       }
+                       # Is there a visible previous revision?
+                       if ( $rev->userCan( Revision::DELETED_TEXT, $user ) && $rev->getParentId() !== 0 ) {
+                               $difftext = Linker::linkKnown(
+                                       $page,
+                                       $this->messages['diff'],
+                                       array(),
+                                       array(
+                                               'diff' => 'prev',
+                                               'oldid' => $row->rev_id
+                                       )
+                               );
+                       } else {
+                               $difftext = $this->messages['diff'];
+                       }
+                       $histlink = Linker::linkKnown(
                                $page,
-                               htmlspecialchars( $date ),
+                               $this->messages['hist'],
                                array(),
-                               array( 'oldid' => intval( $row->rev_id ) )
+                               array( 'action' => 'history' )
                        );
-               } else {
-                       $d = htmlspecialchars( $date );
-               }
-               if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
-                       $d = '<span class="history-deleted">' . $d . '</span>';
-               }
 
-               # Show user names for /newbies as there may be different users.
-               # Note that we already excluded rows with hidden user names.
-               if ( $this->contribs == 'newbie' ) {
-                       $userlink = ' . . ' . Linker::userLink( $rev->getUser(), $rev->getUserText() );
-                       $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams(
-                               Linker::userTalkLink( $rev->getUser(), $rev->getUserText() ) )->escaped() . ' ';
-               } else {
-                       $userlink = '';
-               }
+                       if ( $row->rev_parent_id === null ) {
+                               // For some reason rev_parent_id isn't populated for this row.
+                               // Its rumoured this is true on wikipedia for some revisions (bug 34922).
+                               // Next best thing is to have the total number of bytes.
+                               $chardiff = ' . . ' . Linker::formatRevisionSize( $row->rev_len ) . ' . . ';
+                       } else {
+                               $parentLen = isset( $this->mParentLens[$row->rev_parent_id] ) ? $this->mParentLens[$row->rev_parent_id] : 0;
+                               $chardiff = ' . . ' . ChangesList::showCharacterDifference(
+                                               $parentLen, $row->rev_len, $this->getContext() ) . ' . . ';
+                       }
 
-               if ( $rev->getParentId() === 0 ) {
-                       $nflag = ChangesList::flag( 'newpage' );
-               } else {
-                       $nflag = '';
-               }
+                       $lang = $this->getLanguage();
+                       $comment = $lang->getDirMark() . Linker::revComment( $rev, false, true );
+                       $date = $lang->userTimeAndDate( $row->rev_timestamp, $user );
+                       if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) {
+                               $d = Linker::linkKnown(
+                                       $page,
+                                       htmlspecialchars( $date ),
+                                       array(),
+                                       array( 'oldid' => intval( $row->rev_id ) )
+                               );
+                       } else {
+                               $d = htmlspecialchars( $date );
+                       }
+                       if ( $rev->isDeleted( Revision::DELETED_TEXT ) ) {
+                               $d = '<span class="history-deleted">' . $d . '</span>';
+                       }
 
-               if ( $rev->isMinor() ) {
-                       $mflag = ChangesList::flag( 'minor' );
-               } else {
-                       $mflag = '';
-               }
+                       # Show user names for /newbies as there may be different users.
+                       # Note that we already excluded rows with hidden user names.
+                       if ( $this->contribs == 'newbie' ) {
+                               $userlink = ' . . ' . Linker::userLink( $rev->getUser(), $rev->getUserText() );
+                               $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams(
+                                       Linker::userTalkLink( $rev->getUser(), $rev->getUserText() ) )->escaped() . ' ';
+                       } else {
+                               $userlink = '';
+                       }
 
-               $del = Linker::getRevDeleteLink( $user, $rev, $page );
-               if ( $del !== '' ) {
-                       $del .= ' ';
-               }
+                       if ( $rev->getParentId() === 0 ) {
+                               $nflag = ChangesList::flag( 'newpage' );
+                       } else {
+                               $nflag = '';
+                       }
 
-               $diffHistLinks = $this->msg( 'parentheses' )->rawParams( $difftext . $this->messages['pipe-separator'] . $histlink )->escaped();
-               $ret = "{$del}{$d} {$diffHistLinks}{$chardiff}{$nflag}{$mflag} {$link}{$userlink} {$comment} {$topmarktext}";
+                       if ( $rev->isMinor() ) {
+                               $mflag = ChangesList::flag( 'minor' );
+                       } else {
+                               $mflag = '';
+                       }
 
-               # Denote if username is redacted for this edit
-               if ( $rev->isDeleted( Revision::DELETED_USER ) ) {
-                       $ret .= " <strong>" . $this->msg( 'rev-deleted-user-contribs' )->escaped() . "</strong>";
-               }
+                       $del = Linker::getRevDeleteLink( $user, $rev, $page );
+                       if ( $del !== '' ) {
+                               $del .= ' ';
+                       }
 
-               # Tags, if any.
-               list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( $row->ts_tags, 'contributions' );
-               $classes = array_merge( $classes, $newClasses );
-               $ret .= " $tagSummary";
+                       $diffHistLinks = $this->msg( 'parentheses' )->rawParams( $difftext . $this->messages['pipe-separator'] . $histlink )->escaped();
+                       $ret = "{$del}{$d} {$diffHistLinks}{$chardiff}{$nflag}{$mflag} {$link}{$userlink} {$comment} {$topmarktext}";
+
+                       # Denote if username is redacted for this edit
+                       if ( $rev->isDeleted( Revision::DELETED_USER ) ) {
+                               $ret .= " <strong>" . $this->msg( 'rev-deleted-user-contribs' )->escaped() . "</strong>";
+                       }
+
+                       # Tags, if any.
+                       list( $tagSummary, $newClasses ) = ChangeTags::formatSummaryRow( $row->ts_tags, 'contributions' );
+                       $classes = array_merge( $classes, $newClasses );
+                       $ret .= " $tagSummary";
+               }
 
                // Let extensions add data
-               wfRunHooks( 'ContributionsLineEnding', array( &$this, &$ret, $row ) );
+               wfRunHooks( 'ContributionsLineEnding', array( $this, &$ret, $row, &$classes ) );
 
                $classes = implode( ' ', $classes );
                $ret = "<li class=\"$classes\">$ret</li>\n";
+
                wfProfileOut( __METHOD__ );
                return $ret;
        }
index 67f6d68..091f5ca 100644 (file)
@@ -129,21 +129,28 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
         * @return array
         */
        private function extractTitles( $list ) {
-               $titles = array();
                $list = explode( "\n", trim( $list ) );
                if( !is_array( $list ) ) {
                        return array();
                }
+               $titles = array();
                foreach( $list as $text ) {
                        $text = trim( $text );
                        if( strlen( $text ) > 0 ) {
                                $title = Title::newFromText( $text );
                                if( $title instanceof Title && $title->isWatchable() ) {
-                                       $titles[] = $title->getPrefixedText();
+                                       $titles[] = $title;
                                }
                        }
                }
-               return array_unique( $titles );
+
+               GenderCache::singleton()->doTitlesArray( $titles );
+
+               $list = array();
+               foreach( $titles as $title ) {
+                       $list[] = $title->getPrefixedText();
+               }
+               return array_unique( $list );
        }
 
        public function submitRaw( $data ){
@@ -249,15 +256,22 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                        __METHOD__
                );
                if( $res->numRows() > 0 ) {
+                       $titles = array();
                        foreach ( $res as $row ) {
                                $title = Title::makeTitleSafe( $row->wl_namespace, $row->wl_title );
                                if ( $this->checkTitle( $title, $row->wl_namespace, $row->wl_title )
                                        && !$title->isTalkPage()
                                ) {
-                                       $list[] = $title->getPrefixedText();
+                                       $titles[] = $title;
                                }
                        }
                        $res->free();
+
+                       GenderCache::singleton()->doTitlesArray( $titles );
+
+                       foreach( $titles as $title ) {
+                               $list[] = $title->getPrefixedText();
+                       }
                }
                $this->cleanupWatchlist();
                return $list;
index 18d19db..f8e40e0 100644 (file)
@@ -157,10 +157,24 @@ class FileDuplicateSearchPage extends QueryPage {
                                );
                        }
 
+                       $this->doBatchLookups( $dupes );
                        $this->showList( $dupes );
                }
        }
 
+       function doBatchLookups( $list ) {
+               $batch = new LinkBatch();
+               foreach( $list as $file ) {
+                       $batch->addObj( $file->getTitle() );
+                       if( $file->isLocal() ) {
+                               $userName = $file->getUser( 'text' );
+                               $batch->add( NS_USER, $userName );
+                               $batch->add( NS_USER_TALK, $userName );
+                       }
+               }
+               $batch->execute();
+       }
+
        /**
         *
         * @param Skin $skin
@@ -178,7 +192,17 @@ class FileDuplicateSearchPage extends QueryPage {
                );
 
                $userText = $result->getUser( 'text' );
-               $user = Linker::link( Title::makeTitle( NS_USER, $userText ), $userText );
+               if ( $result->isLocal() ) {
+                       $userId = $result->getUser( 'id' );
+                       $user = Linker::userLink( $userId, $userText );
+                       $user .= $this->getContext()->msg( 'word-separator' )->plain();
+                       $user .= '<span style="white-space: nowrap;">';
+                       $user .= Linker::userToolLinks( $userId, $userText );
+                       $user .= '</span>';
+               } else {
+                       $user = htmlspecialchars( $userText );
+               }
+
                $time = $this->getLanguage()->userTimeAndDate( $result->getTimestamp(), $this->getUser() );
 
                return "$plink . . $user . . $time";
index 75be397..ebcca73 100644 (file)
  */
 class UsersPager extends AlphabeticPager {
 
+       /**
+        * @param $context IContextSource
+        * @param $par null|array
+        */
        function __construct( IContextSource $context = null, $par = null ) {
                if ( $context ) {
                        $this->setContext( $context );
@@ -69,10 +73,16 @@ class UsersPager extends AlphabeticPager {
                parent::__construct();
        }
 
+       /**
+        * @return string
+        */
        function getIndexField() {
                return $this->creationSort ? 'user_id' : 'user_name';
        }
 
+       /**
+        * @return Array
+        */
        function getQueryInfo() {
                $dbr = wfGetDB( DB_SLAVE );
                $conds = array();
@@ -125,18 +135,20 @@ class UsersPager extends AlphabeticPager {
                return $query;
        }
 
+       /**
+        * @param $row Object
+        * @return String
+        */
        function formatRow( $row ) {
-               if ($row->user_id == 0) #Bug 16487
+               if ( $row->user_id == 0 ) { #Bug 16487
                        return '';
+               }
 
                $userName = $row->user_name;
 
                $ulinks = Linker::userLink( $row->user_id, $userName );
                $ulinks .= Linker::userToolLinks( $row->user_id, $userName );
 
-               $userPage = Title::makeTitle( NS_USER, $row->user_name );
-               $name = Linker::link( $userPage, htmlspecialchars( $userPage->getText() ) );
-
                $lang = $this->getLanguage();
 
                $groups_list = self::getGroups( $row->user_id );
@@ -186,9 +198,12 @@ class UsersPager extends AlphabeticPager {
                $this->mResult->rewind();
        }
 
+       /**
+        * @return string
+        */
        function getPageHeader( ) {
                global $wgScript;
-               // @todo Add a PrefixedBaseDBKey
+
                list( $self ) = explode( '/', $this->getTitle()->getPrefixedDBkey() );
 
                # Form tag
@@ -243,10 +258,12 @@ class UsersPager extends AlphabeticPager {
         */
        function getDefaultQuery() {
                $query = parent::getDefaultQuery();
-               if( $this->requestedGroup != '' )
+               if( $this->requestedGroup != '' ) {
                        $query['group'] = $this->requestedGroup;
-               if( $this->requestedUser != '' )
+               }
+               if( $this->requestedUser != '' ) {
                        $query['username'] = $this->requestedUser;
+               }
                wfRunHooks( 'SpecialListusersDefaultQuery', array( $this, &$query ) );
                return $query;
        }
index a512ee6..68b180a 100644 (file)
@@ -358,7 +358,7 @@ class MovePageForm extends UnlistedSpecialPage {
                }
 
                $watchChecked = $user->isLoggedIn() && ($this->watch || $user->getBoolOption( 'watchmoves' )
-                       || $this->oldTitle->userIsWatching());
+                       || $user->isWatched( $this->oldTitle ) );
                # Don't allow watching if user is not logged in
                if( $user->isLoggedIn() ) {
                        $out->addHTML( "
@@ -440,8 +440,9 @@ class MovePageForm extends UnlistedSpecialPage {
 
                        $error = ''; // passed by ref
                        $page = WikiPage::factory( $nt );
-                       if ( !$page->doDeleteArticle( $reason, false, 0, true, $error, $user ) ) {
-                               $this->showForm( array( array( 'cannotdelete', wfEscapeWikiText( $nt->getPrefixedText() ) ) ) );
+                       $deleteStatus = $page->doDeleteArticleReal( $reason, false, 0, true, $error, $user );
+                       if ( !$deleteStatus->isGood() ) {
+                               $this->showForm( $deleteStatus->getErrorsArray() );
                                return;
                        }
                }
index 45dbd36..35f39ce 100644 (file)
@@ -68,15 +68,18 @@ class NewFilesPager extends ReverseChronologicalPager {
                $tables = array( 'image' );
 
                if( !$this->showbots ) {
-                       $tables[] = 'user_groups';
-                       $conds[] = 'ug_group IS NULL';
-                       $jconds['user_groups'] = array(
-                               'LEFT JOIN',
-                               array(
-                                       'ug_group' => User::getGroupsWithPermission( 'bot' ),
-                                       'ug_user = img_user'
-                               )
-                       );
+                       $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
+                       if( count( $groupsWithBotPermission ) ) {
+                               $tables[] = 'user_groups';
+                               $conds[] = 'ug_group IS NULL';
+                               $jconds['user_groups'] = array(
+                                       'LEFT JOIN',
+                                       array(
+                                               'ug_group' => $groupsWithBotPermission,
+                                               'ug_user = img_user'
+                                       )
+                               );
+                       }
                }
 
                if( !$wgMiserMode && $this->like !== null ){
index d8fdbe7..5aa2b49 100644 (file)
@@ -70,7 +70,7 @@ class SpecialProtectedpages extends SpecialPage {
 
        /**
         * Callback function to output a restriction
-        * @param $row object Protected title
+        * @param Title $row Protected title
         * @return string Formatted <li> element
         */
        public function formatRow( $row ) {
index 83c7235..fee870b 100644 (file)
@@ -597,6 +597,9 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
        /**
         * Do the write operations. Simple wrapper for RevDel_*List::setVisibility().
+        * @param $bitfield
+        * @param $reason
+        * @param $title
         * @return
         */
        protected function save( $bitfield, $reason, $title ) {
index 79c051a..611b3b9 100644 (file)
@@ -321,11 +321,14 @@ class PageArchive {
         * @param $comment String
         * @param $fileVersions Array
         * @param $unsuppress Boolean
+        * @param $user User doing the action, or null to use $wgUser
         *
         * @return array(number of file revisions restored, number of image revisions restored, log message)
         * on success, false on failure
         */
-       function undelete( $timestamps, $comment = '', $fileVersions = array(), $unsuppress = false ) {
+       function undelete( $timestamps, $comment = '', $fileVersions = array(), $unsuppress = false, User $user = null ) {
+               global $wgContLang, $wgUser;
+
                // If both the set of text revisions and file revisions are empty,
                // restore everything. Otherwise, just restore the requested items.
                $restoreAll = empty( $timestamps ) && empty( $fileVersions );
@@ -354,8 +357,6 @@ class PageArchive {
                }
 
                // Touch the log!
-               global $wgContLang;
-               $log = new LogPage( 'delete' );
 
                if( $textRestored && $filesRestored ) {
                        $reason = wfMsgExt( 'undeletedrevisions-files', array( 'content', 'parsemag' ),
@@ -375,7 +376,17 @@ class PageArchive {
                if( trim( $comment ) != '' ) {
                        $reason .= wfMsgForContent( 'colon-separator' ) . $comment;
                }
-               $log->addEntry( 'restore', $this->title, $reason );
+
+               if ( $user === null ) {
+                       $user = $wgUser;
+               }
+
+               $logEntry = new ManualLogEntry( 'delete', 'restore' );
+               $logEntry->setPerformer( $user );
+               $logEntry->setTarget( $this->title );
+               $logEntry->setComment( $reason );
+               $logid = $logEntry->insert();
+               $logEntry->publish( $logid );
 
                return array( $textRestored, $filesRestored, $reason );
        }
@@ -754,8 +765,8 @@ class SpecialUndelete extends SpecialPage {
                                );
                        } else {
                                // The title is no longer valid, show as text
-                               $title = Title::makeTitle( $row->ar_namespace, $row->ar_title );
-                               $item = htmlspecialchars( $title->getPrefixedText() );
+                               $item = Html::element( 'span', array( 'class' => 'mw-invalidtitle' ),
+                                       Linker::getInvalidTitleDescription( $this->getContext(), $row->ar_namespace, $row->ar_title ) );
                        }
                        $revs = $this->msg( 'undeleterevisions' )->numParams( $row->count )->parse();
                        $out->addHTML( "<li>{$item} ({$revs})</li>\n" );
@@ -910,7 +921,8 @@ class SpecialUndelete extends SpecialPage {
                                "</td>\n" .
                        "</tr>" .
                        $diffEngine->generateDiffBody(
-                               $previousRev->getText(), $currentRev->getText() ) .
+                               $previousRev->getText( Revision::FOR_THIS_USER, $this->getUser() ),
+                               $currentRev->getText( Revision::FOR_THIS_USER, $this->getUser() ) ) .
                        "</table>" .
                        "</div>\n"
                );
@@ -1387,7 +1399,9 @@ class SpecialUndelete extends SpecialPage {
                        $this->mTargetTimestamp,
                        $this->mComment,
                        $this->mFileVersions,
-                       $this->mUnsuppress );
+                       $this->mUnsuppress,
+                       $this->getUser()
+               );
 
                if( is_array( $ok ) ) {
                        if ( $ok[1] ) { // Undeleted file count
index 91631f8..3072408 100644 (file)
@@ -516,7 +516,7 @@ class SpecialUpload extends SpecialPage {
                if( $local && $local->exists() ) {
                        // We're uploading a new version of an existing file.
                        // No creation, so don't watch it if we're not already.
-                       return $local->getTitle()->userIsWatching();
+                       return $this->getUser()->isWatched( $local->getTitle() );
                } else {
                        // New page should get watched if that's our option.
                        return $this->getUser()->getOption( 'watchcreations' );
index 6052d09..1a00d73 100644 (file)
@@ -273,8 +273,8 @@ class SpecialUploadStash extends UnlistedSpecialPage {
        /**
         * Output HTTP response of raw content
         * Side effect: writes HTTP response to STDOUT.
-        * @param String $content: content
-        * @param String $mimeType: mime type
+        * @param $content String content
+        * @param $contentType String mime type
         * @return bool
         */
        private function outputContents( $content, $contentType ) {
@@ -322,7 +322,7 @@ class SpecialUploadStash extends UnlistedSpecialPage {
        /**
         * Default action when we don't have a subpage -- just show links to the uploads we have,
         * Also show a button to clear stashed files
-        * @param Status : $status - the result of processRequest
+        * @param $status [optional] Status: the result of processRequest
         * @return bool
         */
        private function showUploads( $status = null ) {
index 7d91096..613e3b9 100644 (file)
@@ -274,7 +274,7 @@ class LoginForm extends SpecialPage {
 
        /**
         * @private
-        * @return bool|\User
+        * @return bool|User
         */
        function addNewAccountInternal() {
                global $wgAuth, $wgMemc, $wgAccountCreationThrottle,
index 8eb2781..0e647a9 100644 (file)
@@ -22,7 +22,7 @@
  */
 
 /**
- * @defgroup Upload
+ * @defgroup Upload Upload related
  */
 
 /**
@@ -614,6 +614,9 @@ abstract class UploadBase {
         * Really perform the upload. Stores the file in the local repo, watches
         * if necessary and runs the UploadComplete hook.
         *
+        * @param $comment
+        * @param $pageText
+        * @param $watch
         * @param $user User
         *
         * @return Status indicating the whether the upload succeeded.
index 12531c2..329ee22 100644 (file)
@@ -68,9 +68,11 @@ class UploadStash {
 
        /**
         * Represents a temporary filestore, with metadata in the database.
-        * Designed to be compatible with the session stashing code in UploadBase (should replace it eventually)
+        * Designed to be compatible with the session stashing code in UploadBase
+        * (should replace it eventually).
         *
         * @param $repo FileRepo
+        * @param $user User (default null)
         */
        public function __construct( FileRepo $repo, $user = null ) {
                // this might change based on wiki's configuration.
@@ -442,6 +444,7 @@ class UploadStash {
         * Helper function: do the actual database query to fetch file metadata.
         *
         * @param $key String: key
+        * @param $readFromDB: constant (default: DB_SLAVE)
         * @return boolean
         */
        protected function fetchFileMetadata( $key, $readFromDB = DB_SLAVE ) {
@@ -474,7 +477,6 @@ class UploadStash {
        /**
         * Helper function: Initialize the UploadStashFile for a given file.
         *
-        * @param $path String: path to file
         * @param $key String: key under which to store the object
         * @throws UploadStashZeroLengthFileException
         * @return bool
@@ -574,8 +576,8 @@ class UploadStashFile extends UnregisteredLocalFile {
 
        /**
         * Helper function -- given a 'subpage', return the local URL e.g. /wiki/Special:UploadStash/subpage
-        * @param {String} $subPage
-        * @return {String} local URL for this subpage in the Special:UploadStash space.
+        * @param $subPage String
+        * @return String: local URL for this subpage in the Special:UploadStash space.
         */
        private function getSpecialUrl( $subPage ) {
                return SpecialPage::getTitleFor( 'UploadStash', $subPage )->getLocalURL();
index eb5fa39..1b84f8e 100644 (file)
@@ -239,7 +239,6 @@ U+09E21鸡|U+096DE雞|U+09DC4鷄|
 U+09E5A鹚|U+09DBF鶿|U+09DC0鷀|
 U+09E6E鹮|U+04D09䴉|
 U+09F44齄|U+09F47齇|
-U+0E82D|U+068E1棡|
 U+20BB6𠮶|U+055F0嗰|
 U+26216𦈖|U+04308䌈|
 U+28C3E𨰾|U+093B7鎷|
index 692c74b..7c3ce10 100644 (file)
@@ -43,7 +43,6 @@ U+065E3旣|U+065E2既|
 U+06607昇|U+05347升|
 U+0672E朮|U+0672F术|
 U+068CA棊|U+068CB棋|
-U+068E1棡|U+0E82D|
 U+069A6榦|U+05E72干|
 U+069D3槓|U+06760杠|
 U+06A11樑|U+06881梁|
index 4d73acb..430209d 100644 (file)
@@ -3911,7 +3911,7 @@ class Language {
        /**
         * Decode an expiry (block, protection, etc) which has come from the DB
         *
-        * @FIXME: why are we returnings DBMS-dependent strings???
+        * @todo FIXME: why are we returnings DBMS-dependent strings???
         *
         * @param $expiry String: Database expiry String
         * @param $format Bool|Int true to process using language functions, or TS_ constant
index 9bea07d..bc1809f 100644 (file)
        'arz' => 'مصرى',    # Egyptian Spoken Arabic
        'as' => 'অসমীয়া',   # Assamese
        'ast' => 'asturianu',   # Asturian
-       'av' => 'Ð\90вар',     # Avar
+       'av' => 'авар',     # Avar
        'avk' => 'Kotava', # Kotava
        'ay' => 'Aymar aru',    # Aymara
        'az' => 'azərbaycanca',        # Azerbaijani
-       'ba' => 'Ð\91ашҡортса',   # Bashkir
+       'ba' => 'башҡортса',   # Bashkir
        'bar' => 'Boarisch',    # Bavarian (Austro-Bavarian and South Tyrolean)
-       'bat-smg' => 'Žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 693-3 since 2010-06-30 )
+       'bat-smg' => 'žemaitėška', # Samogitian (deprecated code, 'sgs' in ISO 693-3 since 2010-06-30 )
        'bcc' => 'بلوچی مکرانی', # Southern Balochi
        'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
        'be' => 'беларуская', #  Belarusian normative
        'brh' => 'Bráhuí',    # Brahui
        'bs' => 'bosanski',             # Bosnian
        'bug' => 'ᨅᨔ ᨕᨘᨁᨗ', # Buginese
-       'bxr' => 'Ð\91уряад',        # Buryat (Russia)
+       'bxr' => 'буряад',        # Buryat (Russia)
        'ca' => 'català',      # Catalan
        'cbk-zam' => 'Chavacano de Zamboanga',  # Zamboanga Chavacano
        'cdo' => 'Mìng-dĕ̤ng-ngṳ̄',       # Min Dong
-       'ce' => 'Ð\9dохчийн',       # Chechen
+       'ce' => 'нохчийн',       # Chechen
        'ceb' => 'Cebuano',     # Cebuano
        'ch' => 'Chamoru',              # Chamorro
        'cho' => 'Choctaw',             # Choctaw
@@ -86,9 +86,9 @@
        'co' => 'corsu',                # Corsican
        'cps' => 'Capiceño', # Capiznon
        'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',                # Cree
-       'crh' => 'Qırımtatarca',   # Crimean Tatar (multiple scripts - defaults to Latin)
-       'crh-latn' => "\xE2\x80\xAAQırımtatarca (Latin)\xE2\x80\xAC",       # Crimean Tatar (Latin)
-       'crh-cyrl' => "\xE2\x80\xAAÐ\9aъырымтатарджа (Кирилл)\xE2\x80\xAC",       # Crimean Tatar (Cyrillic)
+       'crh' => 'qırımtatarca',   # Crimean Tatar (multiple scripts - defaults to Latin)
+       'crh-latn' => "\xE2\x80\xAAqırımtatarca (Latin)\xE2\x80\xAC",       # Crimean Tatar (Latin)
+       'crh-cyrl' => "\xE2\x80\xAAкъырымтатарджа (Кирилл)\xE2\x80\xAC",       # Crimean Tatar (Cyrillic)
        'cs' => 'česky',       # Czech
        'csb' => 'kaszëbsczi', # Cassubian
        'cu' => 'словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ',      # Old Church Slavonic (ancient language)
        'dv' => 'ދިވެހިބަސް',         # Dhivehi
        'dz' => 'ཇོང་ཁ',              # Dzongkha (Bhutan)
        'ee' => 'eʋegbe',      # Éwé
+       'egl' => 'Emiliàn',    # Emilian
        'el' => 'Ελληνικά',     # Greek
        'eml' => 'emiliàn e rumagnòl',        # Emiliano-Romagnolo / Sammarinese
        'en' => 'English',              # English
        'ki' => 'Gĩkũyũ',    # Gikuyu
        'kiu' => 'Kırmancki',  # Kirmanjki
        'kj' => 'Kwanyama',     # Kwanyama
-       'kk' => 'Ò\9aазақша',       # Kazakh (multiple scripts - defaults to Cyrillic)
+       'kk' => 'Ò\9bазақша',       # Kazakh (multiple scripts - defaults to Cyrillic)
        'kk-arab' => "\xE2\x80\xABقازاقشا (تٴوتە)\xE2\x80\xAC",     # Kazakh Arabic
-       'kk-cyrl' => "\xE2\x80\xAAÒ\9aазақша (кирил)\xE2\x80\xAC",     # Kazakh Cyrillic
-       'kk-latn' => "\xE2\x80\xAAQazaqşa (latın)\xE2\x80\xAC",       # Kazakh Latin
+       'kk-cyrl' => "\xE2\x80\xAAÒ\9bазақша (кирил)\xE2\x80\xAC",     # Kazakh Cyrillic
+       'kk-latn' => "\xE2\x80\xAAqazaqşa (latın)\xE2\x80\xAC",       # Kazakh Latin
        'kk-cn' => "\xE2\x80\xABقازاقشا (جۇنگو)\xE2\x80\xAC",       # Kazakh (China)
-       'kk-kz' => "\xE2\x80\xAAÒ\9aазақша (Қазақстан)\xE2\x80\xAC",       # Kazakh (Kazakhstan)
-       'kk-tr' => "\xE2\x80\xAAQazaqşa (Türkïya)\xE2\x80\xAC",      # Kazakh (Turkey)
+       'kk-kz' => "\xE2\x80\xAAÒ\9bазақша (Қазақстан)\xE2\x80\xAC",       # Kazakh (Kazakhstan)
+       'kk-tr' => "\xE2\x80\xAAqazaqşa (Türkïya)\xE2\x80\xAC",      # Kazakh (Turkey)
        'kl' => 'kalaallisut',  # Inuktitut, Greenlandic/Greenlandic/Kalaallisut (kal)
        'km' => 'ភាសាខ្មែរ',  # Khmer, Central
        'kn' => 'ಕನ್ನಡ',      # Kannada
        'ko-kp' => '한국어 (조선)',        # Korean (DPRK)
        'koi' => 'Перем Коми', # Komi-Permyak
        'kr' => 'Kanuri',               # Kanuri, Central
-       'krc' => 'Ð\9aÑ\8aаÑ\80аÑ\87ай-Ð\9cалкъар', # Karachay-Balkar
+       'krc' => 'кÑ\8aаÑ\80аÑ\87ай-малкъар', # Karachay-Balkar
        'kri' => 'Krio', # Krio
        'krj' => 'Kinaray-a', # Kinaray-a
        'ks' => 'कॉशुर / کٲشُر', # Kashmiri (multiple scripts - defaults to Perso-Arabic)
        'ku'  => 'Kurdî',      # Kurdish (multiple scripts - defaults to Latin)
        'ku-latn' => "\xE2\x80\xAAKurdî (latînî)\xE2\x80\xAC",       # Northern Kurdish (Latin script)
        'ku-arab' => "\xE2\x80\xABكوردي (عەرەبی)\xE2\x80\xAC",       # Northern Kurdish (Arabic script) (falls back to ckb)
-       'kv' => 'Ð\9aоми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
+       'kv' => 'коми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
        'kw' => 'kernowek',             # Cornish
        'ky' => 'Кыргызча',     # Kirghiz
        'la' => 'Latina',               # Latin
        'lad' => 'Ladino',      # Ladino
        'lb' => 'Lëtzebuergesch',      # Luxemburguish
-       'lbe' => 'Ð\9bакку',  # Lak
-       'lez' => 'Ð\9bезги',  # Lezgi
+       'lbe' => 'лакку',  # Lak
+       'lez' => 'лезги',  # Lezgi
        'lfn' => 'Lingua Franca Nova',  # Lingua Franca Nova
        'lg' => 'Luganda',              # Ganda
        'li' => 'Limburgs',     # Limburgian
        'lzz' => 'Lazuri',      # Laz
        'mai' => 'मैथिली', # Maithili
        'map-bms' => 'Basa Banyumasan', # Banyumasan
-       'mdf' => 'Ð\9cокшень',              # Moksha
+       'mdf' => 'мокшень',              # Moksha
        'mg' => 'Malagasy',             # Malagasy
        'mh' => 'Ebon',                 # Marshallese
-       'mhr' => 'Ð\9eлÑ\8bк Ð\9cарий', # Eastern Mari
+       'mhr' => 'олÑ\8bк Ð¼арий', # Eastern Mari
        'mi' => 'Māori',       # Maori
        'min' => 'Baso Minangkabau',    # Minangkabau
        'mk' => 'македонски', # Macedonian
        'mn' => 'монгол', # Halh Mongolian (Cyrillic) (ISO 639-3: khk)
        'mo' => 'молдовеняскэ',     # Moldovan, deprecated
        'mr' => 'मराठी',      # Marathi
-       'mrj' => 'Ð\9aырык мары', # Hill Mari
+       'mrj' => 'кырык мары', # Hill Mari
        'ms' => 'Bahasa Melayu',        # Malay
        'mt' => 'Malti',        # Maltese
        'mus' => 'Mvskoke',     # Muskogee/Creek
        'mwl' => 'Mirandés',   # Mirandese
        'my' => 'မြန်မာဘာသာ',               # Burmese
-       'myv' => 'Эрзянь',        # Erzya
+       'myv' => 'эрзянь',        # Erzya
        'mzn' => 'مازِرونی',            # Mazanderani
        'na' => 'Dorerin Naoero',               # Nauruan
        'nah' => 'Nāhuatl',            # Nahuatl, en:Wikipedia writes Nahuatlahtolli, while another form is Náhuatl
        'tum' => 'chiTumbuka',  # Tumbuka
        'tw' => 'Twi',                  # Twi, (FIXME!)
        'ty' => 'Reo Mā`ohi',  # Tahitian
-       'tyv' => 'Тыва дыл',     # Tyvan
-       'udm' => 'Удмурт',        # Udmurt
+       'tyv' => 'тыва дыл',     # Tyvan
+       'udm' => 'удмурт',        # Udmurt
        'ug' => 'ئۇيغۇرچە / Uyghurche', # Uyghur (multiple scripts - defaults to Arabic)
        'ug-arab' => 'ئۇيغۇرچە', # Uyghur (Arabic script) (default)
        'ug-latn' => 'Uyghurche', # Uyghur (Latin script)
        'uk' => 'українська', # Ukrainian
        'ur' => 'اردو',     # Urdu
-       'uz' => 'Oʻzbekcha',   # Uzbek
+       'uz' => 'oʻzbekcha',   # Uzbek
        've' => 'Tshivenda',            # Venda
        'vec' => 'vèneto',     # Venetian
-       'vep' => 'Vepsän kel’',      # Veps
+       'vep' => 'vepsän kel’',      # Veps
        'vi' => 'Tiếng Việt',       # Vietnamese
        'vls' => 'West-Vlams', # West Flemish
        'vmf' => 'Mainfränkisch', # Upper Franconian, Main-Franconian
        'war' => 'Winaray', # Waray-Waray
        'wo' => 'Wolof',                # Wolof
        'wuu' => '吴语',              # Wu Chinese
-       'xal' => 'Хальмг',                # Kalmyk-Oirat (Kalmuk, Kalmuck, Kalmack, Qalmaq, Kalmytskii Jazyk, Khal:mag, Oirat, Volga Oirat, European Oirat, Western Mongolian)
+       'xal' => 'хальмг',                # Kalmyk-Oirat (Kalmuk, Kalmuck, Kalmack, Qalmaq, Kalmytskii Jazyk, Khal:mag, Oirat, Volga Oirat, European Oirat, Western Mongolian)
        'xh' => 'isiXhosa',             # Xhosan
        'xmf' => 'მარგალური', # Mingrelian
        'yi' => 'ייִדיש', # Yiddish
index a9930d0..a9a7a4b 100644 (file)
@@ -594,8 +594,13 @@ Probeer asseblief weer oor 'n paar minute.",
 'ns-specialprotected' => 'Spesiale bladsye kan nie geredigeer word nie.',
 'titleprotected' => "Hierdie titel is beskerm teen skepping deur [[User:$1|$1]].
 Die rede gegee is ''$2''.",
+'filereadonlyerror' => 'Dit was nie moontlik om die lêer "$1" te wysig nie lêerstoor tans lees-alleen is.
+
+Die rede hiervoor is "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Ongeldige titel met naamruimte "$2" en teks "$3"',
 'invalidtitle-unknownnamespace' => 'Ongeldige titel met onbekende naamruimtenummer $1 en teks "$2"',
+'exception-nologin' => 'Nie aangeteken nie',
+'exception-nologin-text' => 'U moet eers op hierdie wiki aanteken alvorens u hierdie bladsy kan sien of handeling kan uitvoer.',
 
 # Virus scanner
 'virus-badscanner' => "Slegte konfigurasie: onbekende virusskandeerder: ''$1''",
@@ -881,6 +886,7 @@ Onthou dat u eie .css- en .js-bladsye met 'n kleinletter begin, byvoorbeeld {{ns
 'note' => "'''Nota:'''",
 'previewnote' => "'''Onthou dat hierdie slegs 'n voorskou is.'''
 U teks is nog nie gestoor nie!",
+'continue-editing' => 'Wysig verder',
 'previewconflict' => 'Hierdie voorskou vertoon die teks in die boonste teksarea soos dit sou lyk indien u die bladsy stoor.',
 'session_fail_preview' => "'''Jammer! Weens verlies aan sessie-inligting is die wysiging nie verwerk nie.
 Probeer asseblief weer. As dit steeds nie werk nie, probeer om [[Special:UserLogout|af te teken]] en dan weer aan te teken.'''",
@@ -974,6 +980,12 @@ Hierdie parameters is uitgelaat.",
 'parser-template-loop-warning' => "Sjablone is in 'n oneindige lus: [[$1]]",
 'parser-template-recursion-depth-warning' => 'Die rekursiediepte vir sjablone is oorskry ($1)',
 'language-converter-depth-warning' => 'Die dieptelimiet vir die taalomskakelaar is oorskrei ($1)',
+'node-count-exceeded-category' => 'Bladsye waar die maksimum aantal nodes oorskry is',
+'node-count-exceeded-warning' => 'Hierdie bladsy oorskry die maksimum aantal nodes',
+'expansion-depth-exceeded-category' => 'Bladsye waar die uitbreidingsdiepte oorskry is',
+'expansion-depth-exceeded-warning' => 'Die bladsy bevat te veel sjablone',
+'parser-unstrip-loop-warning' => '\'n "Unstrip"-lus is bespreur.',
+'parser-unstrip-recursion-limit' => 'Die rekursielimiet ($1) vir "unstrip" is oorskry',
 
 # "Undo" feature
 'undo-success' => 'Die wysiging kan ongedaan gemaak word.
@@ -2789,6 +2801,9 @@ Die lêer is slegs gedeeltelik opgelaai.',
 'import-invalid-interwiki' => 'Kan nie vanaf die gespesifiseerde importeer nie.',
 'import-error-edit' => 'Die bladsy "$1" is nie geïmporteer nie omdat u nie die regte het om dit te wysig nie.',
 'import-error-create' => 'Die bladsy "$1" is nie geïmporteer nie omdat u nie die regte het om dit te skep nie.',
+'import-error-interwiki' => 'Die bladsy "$1" is nie geïmporteer nie omdat sy naam vir eksterne skakeling (interwiki) gereserveer is.',
+'import-error-special' => 'Die bladsy "$1" is nie geïmporteer nie omdat dit aan \'n spesiale naamruimte behoort waarin geen bladsye geplaas kan word nie.',
+'import-error-invalid' => 'Die bladsy "$1" is nie geïmporteer nie omdat die naam ongeldig is.',
 
 # Import log
 'importlogpage' => 'Invoer logboek',
@@ -2802,6 +2817,11 @@ Die lêer is slegs gedeeltelik opgelaai.',
 'javascripttest' => 'JavaScript toetsing',
 'javascripttest-disabled' => 'Die funksie is nie op hierdie wiki geaktiveer nie.',
 'javascripttest-title' => 'Voer toetse uit vir $1',
+'javascripttest-pagetext-noframework' => 'Hierdie bladsy is gereserveer vir die uitvoer van JavaScript-toetse.',
+'javascripttest-pagetext-unknownframework' => 'Onbekende toetsraamwerk "$1".',
+'javascripttest-pagetext-frameworks' => 'Kies een van die volgende toetsraamwerke: $1',
+'javascripttest-pagetext-skins' => "Kies 'n omslag waarmee die toets uitgevoer moet word:",
+'javascripttest-qunit-intro' => 'Sien die [$1 toetsdokumentasie] op mediawiki.org.',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'U gebruikerbladsy',
@@ -2899,6 +2919,7 @@ Hierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons
 'spambot_username' => 'MediaWiki opruiming van spam',
 'spam_reverting' => 'Besig met terugrol na die laaste weergawe wat nie skakels na $1 bevat nie',
 'spam_blanking' => "Alle weergawes met 'n skakel na $1 word verwyder",
+'spam_deleting' => 'Alle weergawes bevat verwysings na $1. Bladsy verwyder',
 
 # Info page
 'pageinfo-title' => 'Inligting oor "$1"',
index cd3124a..bdce934 100644 (file)
@@ -1840,7 +1840,7 @@ $1",
 'recentchangeslinked-title' => 'التغييرات المرتبطة ب "$1"',
 'recentchangeslinked-noresult' => 'لم تحدث تعديلات في الصفحات التي لها وصلات هنا خلال الفترة المحددة.',
 'recentchangeslinked-summary' => "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).
-الصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''عريضة'''",
+الصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''مغلظة'''",
 'recentchangeslinked-page' => 'اسم الصفحة:',
 'recentchangeslinked-to' => 'أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك',
 
index 650f199..18d7c8b 100644 (file)
@@ -112,10 +112,10 @@ $messages = array(
 'tog-editondblclick' => 'ܫܚܠܦ ܦܐܬ̈ܐ ܬܪ ܢܩܪܐ ܙܘܓܢܝܐ (ܣܢܝܩ ܠ JavaScript)',
 'tog-editsection' => 'ܡܫܟܚ ܫܘܚܠܦܐ ܕܦܘܣܩ̈ܐ ܒܐܘܪܚܐ ܕܐܝܨܘܪ̈ܐ  [ܫܚܠܦ]',
 'tog-rememberpassword' => 'ܕܟܘܪ ܥܠܠܬܝ ܥܠ ܡܦܐܬܢܐ ܗܢܐ (ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}})',
-'tog-watchcreations' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܕܒܪܐ ܐܢܐ ܠܪ̈ܗܝܬܝ',
-'tog-watchdefault' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܕܫܚܠܦ ܐܢܐ ܠܪ̈ܗܝܬܝ',
-'tog-watchmoves' => 'ܐܘܣܦ ܦܐܬܬ̈ܐ ܕܫܢܐ ܐܢܐ ܠܪ̈ܗܝܬܝ',
-'tog-watchdeletion' => 'Ü\90Ü\98ܣܦ Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\95ܫܦÜ\90 ܐܢܐ ܠܪ̈ܗܝܬܝ',
+'tog-watchcreations' => 'Ü\90Ü\98ܣܦ Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\95Ü\92ܪÜ\90 Ü\90Ü¢Ü\90 Ü\98ܠܠܦÌ\88Ü\90 Ü\95Ü\90ܣܩ Ü\90Ü¢Ü\90 Ü ÜªÌ\88Ü\97Ü\9dܬÜ\9d',
+'tog-watchdefault' => 'Ü\90Ü\98ܣܦ Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\98ܠܦܦÌ\88Ü\90 Ü\95Ü«Ü\9aܠܦ Ü\90Ü¢Ü\90 Ü ÜªÌ\88Ü\97Ü\9dܬÜ\9d',
+'tog-watchmoves' => 'Ü\90Ü\98ܣܦ Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\98ܠܦܦÌ\88Ü\90 Ü\95Ü«Ü¢Ü\90 Ü\90Ü¢Ü\90 Ü ÜªÌ\88Ü\97Ü\9dܬÜ\9d',
+'tog-watchdeletion' => 'Ü\90Ü\98ܣܦ Ü¦Ü\90ܬܬÌ\88Ü\90 Ü\98ܠܦܦÌ\88Ü\90 Ü\95Ü«Ü\90ܦ ܐܢܐ ܠܪ̈ܗܝܬܝ',
 'tog-watchlisthideown' => 'ܛܫܝ ܫܘܚܠܦ̈ܝ ܡܢ ܪ̈ܗܝܬܐ',
 'tog-watchlisthidebots' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܕܒܘܬ ܡܢ ܪ̈ܗܝܬܐ',
 'tog-watchlisthideminor' => 'ܛܫܝ ܫܘܚܠܦ̈ܐ ܙܥܘܪ̈ܐ ܡܢ ܪ̈ܗܝܬܐ',
@@ -802,6 +802,7 @@ $1',
 'rcshowhidebots' => '$1 ܒܘܬ̈ܐ (Bots)',
 'rcshowhideliu' => '$1 ܡܦܠܚܢ̈ܐ ܥܠܝܠ̈ܐ',
 'rcshowhideanons' => '$1 ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ',
+'rcshowhidepatr' => '$1 ܫܘܚܠܦ̈ܐ ܬܢܝ̈ܐ',
 'rcshowhidemine' => '$1 ܫܘܚܠܦ̈ܝ',
 'rclinks' => 'ܚܘܝ $1 ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ ܒ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ<br />$3',
 'diff' => 'ܦܘܪܫܐ',
@@ -988,6 +989,7 @@ $1',
 'protectedpages' => 'ܦܐܬܬ̈ܐ ܢܛܝܪ̈ܬܐ',
 'protectedtitles' => 'ܟܘܢܝ̈ܐ ܢܛܝܪ̈ܐ',
 'protectedtitlestext' => 'ܟܘܢܝ̈ܐ ܗܠܝܢ ܢܛܝܪ̈ܐ ܐܢܘܢ ܠܘܩܒܠ ܒܪܝܐ',
+'protectedtitlesempty' => 'ܠܝܬ ܟܘܢܝ̈ܐ ܢܛܝܪ̈ܐ ܗܫܐܝܬ ܥܡ ܗܠܝܢ ܦܪ̈ܘܫܝܐ',
 'listusers' => 'ܡܟܬܒܘܬܐ ܕܗܕ̈ܡܐ',
 'listusers-editsonly' => 'ܚܘܝ ܡܦܠܚܢ̈ܐ ܥܡ ܫܘܚܠܦ̈ܐ ܒܠܚܘܕ',
 'listusers-creationsort' => 'ܛܟܣ ܐܝܟ ܣܝܩܘܡܐ ܕܒܪܝܐ',
@@ -1045,6 +1047,7 @@ $1',
 
 # Special:LinkSearch
 'linksearch' => 'ܐܣܘܪ̈ܐ ܒܪ̈ܝܐ ܒܨܝܐ',
+'linksearch-pat' => 'ܙܢܐ ܕܒܨܝܐ:',
 'linksearch-ns' => 'ܚܩܠܐ:',
 'linksearch-ok' => 'ܒܨܝ',
 
@@ -1064,6 +1067,7 @@ $1',
 
 # Special:Log/newusers
 'newuserlogpage' => 'ܣܓܠܐ ܕܒܪܝܬܐ ܕܡܦܠܚܢܐ',
+'newuserlogpagetext' => 'ܗܢܘ ܣܓܠܐ ܕܒܪܝܐ ܕܡܦܠܚܢ̈ܐ',
 
 # Special:ListGroupRights
 'listgrouprights' => 'ܙܕ̈ܩܐ ܕܟܢܘܫܬܐ ܕܡܦܠܚܢ̈ܐ',
@@ -1084,6 +1088,8 @@ $1',
 'emailpage' => 'ܫܕܪ ܐܓܪܬܐ ܒܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܠܡܦܠܚܢܐ',
 'defemailsubject' => 'ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ  ܡܢ ܡܦܠܚܢܐ "$1"',
 'noemailtitle' => 'ܠܝܬ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
+'emailusername' => 'ܫܡܐ ܕܡܦܠܚܢܐ:',
+'emailusernamesubmit' => 'ܫܕܪ',
 'email-legend' => 'ܫܕܪ ܐܓܪܬܐ ܠܡܦܠܚܢܐ ܕ {{SITENAME}} ܐܚܪܢܐ',
 'emailfrom' => 'ܡܢ:',
 'emailto' => 'ܠ:',
@@ -1101,14 +1107,23 @@ $1',
 # Watchlist
 'watchlist' => 'ܪ̈ܗܝܬܝ',
 'mywatchlist' => 'ܪ̈ܗܝܬܝ',
-'watchlistfor2' => 'Ü  $1 $2',
+'watchlistfor2' => 'Ü\95 $1 $2',
 'nowatchlist' => 'ܠܝܬ ܠܟ ܡܕܡ ܒܪ̈ܗܝܬܐ ܕܝܠܟ',
 'watchnologin' => 'ܠܝܬܝܟ ܥܠܝܠܐ',
-'removedwatchtext' => 'ܦܐܬܐ "[[:$1]]" ܐܫܬܩܠܬ ܡܢ [[Special:Watchlist|ܪ̈ܗܝܬܟ]].',
+'watchnologintext' => 'ܐܠܨܐ ܕܬܗܘܐ [[Special:UserLogin|ܥܠܝܠܐ]] ܠܫܚܠܦܬܐ ܕܪ̈ܗܝܬܟ.',
+'addwatch' => 'ܐܘܣܦ ܥܠ ܪ̈ܗܝܬܝ',
+'addedwatchtext' => "ܦܐܬܐ ܕ\"[[:\$1]]\" ܐܬܬܘܣܦܬ ܒ[[Special:Watchlist|ܪ̈ܗܝܬܟ]].
+ܐܝܢܐ ܫܘܚܠܦܐ ܠܦܐܬܐ ܗܕܐ ܒܕܥܬܝܕ ܬܬܓܠܚ ܥܡ ܦܐܬܐ ܕܡܡܠܠܐ ܕܝܠܗ ܬܡܢ, ܘܦܐܬܐ ܬܗܘܐ ܒܣܪܛܐ '''ܚܠܝܡܐ''' ܒܦܐܬܐ ܕ[[Special:RecentChanges|ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ]] ܠܦܫܛܬܐ ܕܫܟܚܬܗ.",
+'removewatch' => 'ܫܩܘܠ ܡܢ ܪ̈ܗܝܬܝ',
+'removedwatchtext' => 'ܦܐܬܐ ܕ "[[:$1]]" ܐܫܬܩܠܬ ܡܢ [[Special:Watchlist|ܪ̈ܗܝܬܟ]].',
 'watch' => 'ܪܗܝ',
 'watchthispage' => 'ܪܗܝ ܗܕܐ ܦܐܬܐ',
 'unwatch' => 'ܠܐ ܪܗܝ',
 'unwatchthispage' => 'ܟܠܝ ܪܗܝܐ',
+'watchnochange' => 'ܐܦܠܐ ܚܕ ܡܢ ܦܐܬܬ̈ܐ ܒܪ̈ܗܝܬܟ ܐܫܬܚܠܦܬ ܒܡܬܚܐ ܕܙܒܢܐ ܓܠܝܚܐ.',
+'watchlist-details' => '{{PLURAL:$1|$1 ܦܐܬܐ|$1 ܦܐܬܬ̈ܐ}} ܒܪ̈ܗܝܬܟ, ܫܒܘܩ ܡܢ ܦܐܬܬ̈ܐ ܕܡܡܠܠܐ.',
+'wlheader-showupdated' => "* ܦܐܬܬ̈ܐ ܕܐܫܬܚܠܦܢ ܡܢ ܒܬܪ ܣܘܥܪܢܟ ܐܚܪܝܐ ܡܬܓܠܚܢ ܒܣܪܛܐ '''ܚܠܝܡܐ'''",
+'wlnote' => "ܠܬܚܬ {{PLURAL:$1|ܫܘܚܠܦܐ ܐܚܪܝܐ| '''$1''' ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ}} {{PLURAL:$2|ܒܫܥܬܐ ܐܚܪܝܬܐ|'''$2''' ܒܫܥܬ̈ܐ ܐܚܪ̈ܝܬܐ}}, ܠܦܘܬ $3, $4.",
 'wlshowlast' => 'ܚܘܝ $1 ܫܥܬ̈ܐ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ $3',
 'watchlist-options' => 'ܨܒܝܢܝܘܬ̈ܐ ܕܪ̈ܗܝܬܐ',
 
@@ -1116,6 +1131,7 @@ $1',
 'watching' => 'ܪܗܝܐ...',
 'unwatching' => 'ܠܐ ܪܗܝܐ...',
 
+'enotif_reset' => 'ܫܘܕܥ ܟܠ ܦܐܬܬ̈ܐ ܐܝܟ ܣܥܝܪ̈ܐ',
 'enotif_newpagetext' => 'ܗܕܐ ܗܝ ܦܐܬܐ ܚܕܬܐ',
 'enotif_impersonal_salutation' => 'ܡܦܠܚܢܐ {{SITENAME}}',
 'changed' => 'ܐܫܬܚܠܦܬ',
@@ -1170,6 +1186,7 @@ $1',
 'protect-edit-reasonlist' => 'ܫܚܠܦ ܥܠܬܐ ܕܢܛܪܐ',
 'protect-expiry-options' => '1 ܫܥܬܐ:1 hour,1 ܝܘܡܐ:1 day,1 ܫܒܘܥܐ:1 week,2 ܫܒܘܥ̈ܐ:2 weeks,1 ܝܪܚܐ:1 month,3 ܝܪ̈ܚܐ:3 months,6 ܝܪ̈ܚܐ:6 months,1 ܫܢܬܐ:1 year,ܠܥܠܡ:infinite',
 'restriction-type' => 'ܦܣܣܐ:',
+'restriction-level' => 'ܫܘܝܐ ܕܣܘܝܟܐ:',
 'minimum-size' => 'ܡܬܚܐ ܬܚܬܝܐ  ܕܥܓܪܐ',
 'maximum-size' => 'ܡܬܚܐ ܥܠܝܐ ܕܥܓܪܐ',
 'pagesize' => '(ܒܐܝܛ)',
@@ -1363,7 +1380,7 @@ Do you want to change the settings?',
 'tooltip-pt-userpage' => 'ܦܐܬܐ ܕܡܦܠܚܢܐ ܕܝܠܟ',
 'tooltip-pt-mytalk' => 'ܦܐܬܐ ܕܡܡܠܘܟ',
 'tooltip-pt-preferences' => 'Your preferences',
-'tooltip-pt-login' => 'Ü\9bÜ\92 Ü\90ܢܬ Ü\95Ü£Ü\93Ü  Ü¥Ü Ü Ü\90Ø\8c Ü\90Ü Ü\90 Ü\97Ü¢Ü\90 Ü Ü\98 ܐܠܨܝܐ',
+'tooltip-pt-login' => 'ܢܠÜ\92Ü\92 Ü Ü\9f Ü\95Ü£Ü\93Ü  Ü\90ܢܬ Ü¥Ü Ü Ü\90 Ü\95Ü\9dÜ Ü\9fØ\8c Ü\90Ü Ü\90 Ü\97Ü¢Ü\90 Ü Ü\90 Ü\90Ü\9dܬÜ\9dÜ\97Ü\9d ܐܠܨܝܐ',
 'tooltip-pt-logout' => 'ܦܠܛܐ',
 'tooltip-ca-talk' => 'ܡܡܠܠܐ ܥܠ ܚܒܝܫܬܐ ܕܦܐܬܐ',
 'tooltip-ca-addsection' => 'ܫܪܝ ܦܣܘܩܐ ܚܕܬܐ',
@@ -1524,7 +1541,13 @@ $1',
 # Watchlist editor
 'watchlistedit-normal-title' => 'ܫܚܠܦ ܪ̈ܗܝܬܐ',
 'watchlistedit-normal-legend' => 'ܠܚܝ ܟܘܢܝ̈ܐ ܡܢ ܪ̈ܗܝܬܟ',
+'watchlistedit-normal-explain' => 'ܟܘܢܝ̈ܐ ܒܪ̈ܗܝܬܟ ܡܬܚܘܝܢ ܠܬܚܬ.
+ܠܠܚܝܐ ܕܟܘܢܝܐ, ܫܘܕܥ ܥܠ ܣܢܕܘܩܐ ܕܕܦܢܗ, ܘܕܘܫ "{{int:Watchlistedit-normal-submit}}".
+ܡܨܐ ܐܢܬ ܕ[[Special:EditWatchlist/raw|ܬܫܚܠܦ ܪ̈ܗܝܬܐ ܦܛܝܪ̈ܬܐ]].',
 'watchlistedit-normal-submit' => 'ܠܚܝ ܟܘܢܝܐ',
+'watchlistedit-normal-done' => '{{PLURAL:$1|ܚܕ ܟܘܢܝܐ ܐܬܠܚܝ|$1 ܟܘܢܝ̈ܐ ܐܬܠܚܘܢ}} ܡܢ ܪ̈ܗܝܬܟ:',
+'watchlistedit-raw-title' => 'ܫܚܠܦ ܪ̈ܗܝܬܐ ܦܛܝܪ̈ܬܐ',
+'watchlistedit-raw-legend' => 'ܫܚܠܦ ܪ̈ܗܝܬܐ ܦܛܝܪ̈ܬܐ',
 'watchlistedit-raw-titles' => 'ܟܘܢܝ̈ܐ:',
 'watchlistedit-raw-submit' => 'ܚܕܬ ܪ̈ܗܝܬܐ',
 
@@ -1554,6 +1577,7 @@ $1',
 
 # Special:SpecialPages
 'specialpages' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ',
+'specialpages-group-maintenance' => 'ܬܫܪܪܐ ܕܚܕܬܘܬܐ',
 'specialpages-group-other' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܐܚܪ̈ܢܝܬܐ',
 'specialpages-group-login' => 'ܥܘܠ / ܒܪܝ',
 'specialpages-group-changes' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܘܣܓܠ̈ܐ',
index 9caa0b4..2e2cdb5 100644 (file)
@@ -119,7 +119,7 @@ $messages = array(
 'tog-hidepatrolled' => 'সাম্প্ৰতিক সাল-সলনিত তহলদাৰী সম্পাদনা নেদেখুৱাব',
 'tog-newpageshidepatrolled' => 'নতুন পৃষ্ঠা তালিকাত তহলদাৰী পৃষ্ঠাসমূহ নেদেখুৱাব',
 'tog-extendwatchlist' => 'কেৱল সাম্প্ৰতিকেই নহয, লক্ষ্য-তালিকাৰ সকলো সাল-সলনি বহলাই দেখুৱাওক',
-'tog-usenewrc' => 'বৰà§\8dদà§\8dধিত à¦¸à¦¾à¦®à§\8dপà§\8dৰতিà¦\95 à¦¸à¦¾à¦²-সলনি à¦¬à§\8dযবহাৰ কৰক (জাভাস্ক্ৰিপ্টৰ প্ৰয়োজন)',
+'tog-usenewrc' => 'বৰà§\8dদà§\8dধিত à¦¸à¦¾à¦®à§\8dপà§\8dৰতিà¦\95 à¦¸à¦¾à¦²-সলনি à¦¬à§\8dযৱহাৰ কৰক (জাভাস্ক্ৰিপ্টৰ প্ৰয়োজন)',
 'tog-numberheadings' => 'শীৰ্ষকত স্বয়ংক্ৰিয়ভাৱে ক্ৰমিক নং দিয়ক',
 'tog-showtoolbar' => 'সম্পাদনা দণ্ডিকা দেখুৱাওক (জাভাস্ক্ৰিপ্টৰ দৰকাৰ)',
 'tog-editondblclick' => 'একেলগে দুবাৰ টিপা মাৰিলে পৃষ্ঠা সম্পাদনা কৰক (জাভাস্ক্ৰিপ্টৰ দৰকাৰ)',
@@ -468,6 +468,8 @@ $1',
 'cannotdelete' => '"$1" পৃষ্ঠা বা নথিখন বিলোপ কৰা অসম্ভৱ ।
 সম্ভৱ আনে আগেই বিলোপ কৰিছে ।',
 'cannotdelete-title' => '"$1" পৃষ্ঠা বিলোপ কৰিব নোৱাৰি',
+'delete-hook-aborted' => 'হুকৰ দ্বাৰা সম্পাদনা প্ৰত্যাখ্যান কৰা হৈছে ।
+ইয়াৰ কোনো ব্যাখ্যা নাই ।',
 'badtitle' => 'অগ্ৰহণীয় শিৰোনামা',
 'badtitletext' => 'আপুনি বিচৰা পৃষ্ঠাটোৰ শিৰোনামা অযোগ্য, খালী বা ভুলকৈ জড়িত আন্তৰ্ভাষিক বা আন্তৰ্ৱিকি শিৰোনামা। ইয়াত এক বা ততোধিক বৰ্ণ আছে যাক শিৰোনামাত ব্যৱহাৰ কৰিব নোৱাৰি।',
 'perfcached' => "তলত দিয়া তথ্যখিনি আগতে জমা কৰি থোৱা (cached) আৰু সাম্প্ৰতিক নহ'ব পাৰে। এই তথ্যখিনিত সৰ্বোচ্চ {{PLURAL:$1|এটা ফলাফল|$1টা ফলাফল}} উপলব্ধ।",
@@ -1497,10 +1499,9 @@ $1",
 'upload-recreate-warning' => "'''সতৰ্কবাণী: এই নামৰ এটা ফাইল বিলোপ বা স্থানান্তৰ কৰা হৈছে । '''
 
 এই পৃষ্ঠাৰ অৱলুপ্তি ল’গ আৰু স্থানান্তৰ ল’গ আপোনাৰ সুবিধাৰ্থে তলত দিয়া হ’ল:",
-'uploadtext' => "ফাইল আপল’ড কৰাৰ বাবে তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক ।
-পূৰ্বে আপল’ড কৰা ফাইল চাবলৈ বা অনুসন্ধান কৰিবলৈ [[Special:FileList|আপল’ড কৰা ফাইলৰ তালিকা]] লৈ যাওক । (পুনঃ)আপল’ড কৰা ফাইলৰ নাম [[Special:Log/upload|আপল’ড ল’গ]] ত ভৰ্তি হয়, বিলোপ কৰা ফাইলৰ নাম [[Special:Log/delete|অৱলুপ্তি ল’গ]] ত পাব ।
+'uploadtext' => "ফাইল আপল’ড কৰাৰ বাবে তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক। পূৰ্বে আপল’ড কৰা ফাইল চাবলৈ বা অনুসন্ধান কৰিবলৈ [[Special:FileList|আপল’ড কৰা ফাইলৰ তালিকা]] লৈ যাওক । (পুনঃ) আপল’ড কৰা ফাইলৰ নাম [[Special:Log/upload|আপল’ড অভিলেখত]] ভৰ্তি হয়, বিলোপ কৰা ফাইলৰ নাম [[Special:Log/delete|অৱলুপ্তি অভিলেখত]] পাব ।
 
-à¦\95à§\8bনà§\8b à¦ªà§\83ষà§\8dঠাত à¦\9bবি à¦¯à§\8bà¦\97 à¦¦à¦¿à¦¬à¦²à§\88 তলৰ প্ৰপত্ৰসমূহত থকা সংযোগ ব্যৱহাৰ কৰক: 
+à¦\95à§\8bনà§\8b à¦ªà§\83ষà§\8dঠাত à¦\9aিতà§\8dৰ à¦¬à¦¾ à¦«à¦¾à¦\87ল à¦¸à¦¨à§\8dনিবিষà§\8dà¦\9f à¦\95ৰিবৰ à¦¬à¦¾à¦¬à§\87 তলৰ প্ৰপত্ৰসমূহত থকা সংযোগ ব্যৱহাৰ কৰক: 
 * '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''',
 * '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></tt>''' অথবা
 * '''<tt><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></tt>'''",
index bc72730..6346c7a 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Bashkir (Ð\91ашҡортса)
+/** Bashkir (башҡортса)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index e2b8e2c..0e00fa6 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Filipinayzd
+ * @author Geopoet
  * @author Kaganer
  * @author Steven*fung
  * @author Urhixidur
@@ -95,50 +96,63 @@ $specialPageAliases = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Kurítan an mga takód:',
+'tog-underline' => 'Linyahan an kilyawan:',
 'tog-justify' => 'Pantayón an mga talodtód',
 'tog-hideminor' => 'Tagóon an mga saradít na paghirá sa nakakaági pa sanáng pagbabàgo',
-'tog-hidepatrolled' => 'Tagóon an mga saradít na paghirá sa nakakaági pa sanáng pagbabàgo',
-'tog-newpageshidepatrolled' => 'Tagóon an mga pigbabantayán na pahina sa lista nin mga bàgong pahina',
-'tog-extendwatchlist' => 'Palakbangón an taytáy kan babantayan tanganing mahilíng an gabós na angay na pagbàgo',
-'tog-usenewrc' => 'Gamiton an pinauróg na mga nakaaging pagbàgo (kaipohan nin JavaScript)',
-'tog-numberheadings' => 'Tolos na pagbílang sa mga pamayohán',
-'tog-showtoolbar' => 'Ipahilíng an toolbar nin paghirá (JavaScript)',
-'tog-editondblclick' => 'Hirahón sa dobleng paglagatík an mga pahina (JavaScript)',
-'tog-editsection' => 'Togótan an paghirá kan seksyon sa paági kan mga takód na [hirá]',
-'tog-editsectiononrightclick' => 'Togotan an paghirá kan seksyon sa pag-lagatik sa walá sa mga titulo nin seksyon (JavaScript)',
-'tog-showtoc' => 'Ipahilíng an indise kan mga laog (para sa mga pahinang igwang sobra sa 3 pamayohan)',
-'tog-rememberpassword' => 'Giromdomón an mga paglaóg ko sa panlibotlibot na iní (sa nakaaging $1 {{PLURAL:$1|aldaw|mga aldaw}})',
-'tog-watchcreations' => 'Idúgang an mga pahinang ginigíbo ko sa pigbabantayan ko',
-'tog-watchdefault' => 'Idúgang an mga pahinang pighíhirá ko sa pigbabantayan ko',
-'tog-watchmoves' => 'Idúgang an mga pahinang piglilípat ko sa pigbabantayan ko',
-'tog-watchdeletion' => 'Idúgang an mga pahinang pigpapárà ko sa pigbabantayan ko',
-'tog-minordefault' => 'Markahán an gabos na paghirá nin sadit na paghirá',
+'tog-hidepatrolled' => 'Tagóa an patrolyadong mga paghirá sa nakakaági pa sanáng pagbabàgo',
+'tog-newpageshidepatrolled' => 'Tagóa an patrolyadong mga pahina gikan sa listahan kan bàgong pahina',
+'tog-extendwatchlist' => 'Palakbanga an bantay-listahan (watchlist) na maipahiling an gabos na pinagbago, bako sana an pinakahurihang binago',
+'tog-usenewrc' => 'Grupong mga pagbabago sa kada pahina kan pinakahuring mga binago asin bantay-listahan (minakaipo nin JavaScript)',
+'tog-numberheadings' => 'Tolos-bilang na mga pamayohán',
+'tog-showtoolbar' => 'Ihayag an toolbar nin paghirá (minakaipo nin JavaScript)',
+'tog-editondblclick' => 'Liwaton an mga pahina sa dobleng pagpindot (minakaipo nin JavaScript)',
+'tog-editsection' => 'Paganaha an paghihirá kan seksyon sa paági kan [liwaton] na kilyawan',
+'tog-editsectiononrightclick' => 'Paganaha an paghihirá kan seksyon sa paagi kan patoong pagpindot sa mga titulo kan seksyon (minakaipo nin JavaScript)',
+'tog-showtoc' => 'Ihayag an taytayan nin mga laog (para sa mga pahinang igwang sobra sa 3 pamayohan)',
+'tog-rememberpassword' => 'Giromdoma an sakong paglaóg sa kilyaw (browser) na ini (para sa maximum na $1 {{PLURAL:$1|aldaw|mga aldaw}})',
+'tog-watchcreations' => 'Idagdag sa mga pahina na ako an nagmukna sa sakong bantay-listahan',
+'tog-watchdefault' => 'Idagdag an mga pahina na ako an nagliwat sa sakong bantay-listahan',
+'tog-watchmoves' => 'Idagdag an mga pahina na ako an nagbalyo sa sakong bantay-listahan',
+'tog-watchdeletion' => 'Idagdag an mga pahina na ako an nagpura sa sakong bantay-listahan',
+'tog-minordefault' => 'Markahán gabos na saradit na pagliwat sa paaging panugmad',
 'tog-previewontop' => 'Ipahilíng an patànaw bàgo an kahon nin paghirá',
 'tog-previewonfirst' => 'Ipahilíng an patànaw sa enot na paghirá',
-'tog-nocache' => 'Pugolon an pag-abáng nin mga pahina',
-'tog-enotifwatchlistpages' => 'E-koreohan ako pag pigribayan an pahinang pigbabantayan ko',
+'tog-nocache' => 'Pundoha an pagsaray nin mga pahina sa kilyaw (browser)',
+'tog-enotifwatchlistpages' => 'E-koreohan ako kunsoarin an sarong pahina sa sakong bantay-listahan (watchlist) pinagribayan',
 'tog-enotifusertalkpages' => 'E-koreohan ako pag pigribáyan an pahina kan sakóng olay',
 'tog-enotifminoredits' => 'E-koreohan man giraray ako para sa saradit na paghirá kan mga pahina',
-'tog-enotifrevealaddr' => 'Ibunyág an adres kan sakuyang e-koreo sa mga surat na pag-abiso',
-'tog-shownumberswatching' => 'Ipahilíng an bilang kan nagbabantay na mga parágamit',
-'tog-fancysig' => 'Mga bàgong pirma (mayò nin tolos na pantakod)',
-'tog-externaleditor' => 'Gamíton mùna an panluwas na editor',
-'tog-externaldiff' => 'Gamíton mùna an diff na panluwás',
-'tog-showjumplinks' => 'Maka-"luksó sa" mga takód na pangabót',
-'tog-uselivepreview' => 'Gamíton an patànaw na direkto (JavaScript) (Experimental)',
-'tog-forceeditsummary' => 'Ipaarám sakuyà kun malaog sa sumáriong blanko nin paghirá',
-'tog-watchlisthideown' => 'Tagóon an mga saradít na paghirá sa pigbabantayán',
-'tog-watchlisthidebots' => 'Tagóon an mga paghirá kan bot sa pigbabantayán',
-'tog-watchlisthideminor' => 'Tagóon an mga saradít na paghirá sa pigbabantayán',
-'tog-nolangconversion' => 'Pogólon an pagríbay nin mga lain-lain',
-'tog-ccmeonemails' => 'Padarahán ako nin mga kopya kan e-koreo na pigpadara ko sa ibang mga parágamit',
-'tog-diffonly' => 'Dai ipahilíng an mga laog nin pahina sa babâ kan kaib',
-'tog-showhiddencats' => 'Ipahiling an mga nakatagong kategorya',
+'tog-enotifrevealaddr' => 'Ibuyágyag an sakong e-koreong address sa pan-abisong mga e-koreo',
+'tog-shownumberswatching' => 'Ihayag an numero kan nagbabantay na mga parágamit',
+'tog-oldsig' => 'Tugmadong pirma',
+'tog-fancysig' => 'Trataron an pirma na wiki-teksto (mayo nin awtomatikong kilyaw)',
+'tog-externaleditor' => 'Gamíta nguna an panluwas na editor (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy (settings) sa saimong kompyuter.',
+'tog-externaldiff' => 'Gamíta an panluwas na diff nguna (para sa mga eksperto sana, minakaipo nin espesyal na mga panuytoy (settings) sa saimong kompyuter.
+[//www.mediawiki.org/wiki/Manual:External_editors Kadagdagang impormasyon.])',
+'tog-showjumplinks' => 'Paganaha an "luksó sa" kilyaw nin kalangkayan',
+'tog-uselivepreview' => 'Gamíta an buhay na patànaw (minakaipo nin JavaScript) (eksperimental)',
+'tog-forceeditsummary' => 'Ibunyaw sako kun maglalaog sa blangkong kalanyang nin paghirá',
+'tog-watchlisthideown' => 'Tagóa an sakong mga pagliwat gikan sa bantay-listahan',
+'tog-watchlisthidebots' => 'Tagóa an bot na mga pagliwat gikan sa bantay-listahan',
+'tog-watchlisthideminor' => 'Tagóa an saradít na mga pagliwat gikan sa bantay-listahan',
+'tog-watchlisthideliu' => 'Tagoon an mga pagbabagong nahimo kan mga nakalaog na paragamit gikan sa bantayang listahan',
+'tog-watchlisthideanons' => 'Tagoon an mga pagbabagong nahimo kan mga bakong bistadong paragamit gikan sa bantayang listahan',
+'tog-watchlisthidepatrolled' => 'Tagoon an mga patrolyadong pagbabago gikan sa bantayang listahan',
+'tog-nolangconversion' => 'Pundoha an mga palaen na pagbabago',
+'tog-ccmeonemails' => 'Ipadara sako an mga kopya kan e-koreo na pinadara ko sa ibang mga paragamit',
+'tog-diffonly' => 'Dai tabi ihayag an laog kan pahina sa ibaba nin mga diffs',
+'tog-showhiddencats' => 'Ihayag an nakatagong mga kategorya',
+'tog-norollbackdiff' => 'Omidohon an diff matapos himoon an pagbalikot',
 
 'underline-always' => 'Pirmi',
 'underline-never' => 'Nungka',
-'underline-default' => 'Browser na normal',
+'underline-default' => 'Kilyaw na panugmad',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'Baguhon an estilo nin kalwig sa sinasakupan',
+'editfont-default' => 'Kilyawang tugmad',
+'editfont-monospace' => 'Manarong espasyo nin kalwig',
+'editfont-sansserif' => 'Kalwig na Sans-serif',
+'editfont-serif' => 'Kalwig na Serif',
 
 # Dates
 'sunday' => 'Domingo',
@@ -194,120 +208,140 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Kategorya|Mga kategorya}}',
-'category_header' => 'Mga artikulo sa kategoryang "$1"',
+'category_header' => 'Mga pahina sa kategoryang "$1"',
 'subcategories' => 'Mga sub-kategorya',
 'category-media-header' => 'Media sa kategoryang "$1"',
-'category-empty' => "''Mayò nin laog an kategoryang ini sa ngonyan.''",
+'category-empty' => "''Ining kategorya sa presente mayong laog na mga pahina o media.\"",
 'hidden-categories' => '{{PLURAL:$1|Nakatagong kategorya|Mga nakatagong kategorya}}',
 'hidden-category-category' => 'Mga nakatagong kategorya',
-'category-subcat-count-limited' => 'Igwa nin {{PLURAL:$1|sub-kategorya|$1 mga sub-kategorya}} an artikulong ini.',
-'category-article-count' => '{{PLURAL:$2|An mga minasunod na pahina sana an laog kan kategoryang ini|An mga minasunod na {{PLURAL:$1|pahina|$1 pahina}} an yaon sa kategoryang ini, sa $2 gabos.}}',
-'category-article-count-limited' => 'Yaon sa presenteng kategorya an mga minasunod na {{PLURAL:$1|pahina|$1 pahina}}.',
+'category-subcat-count' => '{{PLURAL:$2|Ining kategorya igwa sana kan minasunod na sub-kategorya.|Ining kategorya igwa kan minasunod {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}',
+'category-subcat-count-limited' => 'Ining kategorya igwa kan minasunod na {{PLURAL:$1|sub-kategorya|$1 mga sub-kategorya}}.',
+'category-article-count' => '{{PLURAL:$2|An mga minasunod na pahina sana an laog kan kategoryang ini|An mga minasunod na {{PLURAL:$1|pahina|$1 mga pahina}} an yaon sa kategoryang ini, gikan sa $2 kagabsan.}}',
+'category-article-count-limited' => 'An minasunod na {{PLURAL:$1|pahina|$1 mga pahina}} yaon sa presenteng kategorya.',
+'category-file-count' => '{{PLURAL:$2|Ining kategorya naglalaman sana kan minasunod na sagunson.|An minasunod {{PLURAL:$1|sagunson iyo|$1 na mga sagunson iyo}} sa kategoryang ini, na ginahi sa $2 sa kabilogan.}}',
+'category-file-count-limited' => 'An minasunod {{PLURAL:$1|na sagunson|$1 na mga sagunson}} yaon sa presenteng kategorya.',
 'listingcontinuesabbrev' => 'sunód',
+'index-category' => 'Hinukdoang mga pahina',
+'noindex-category' => 'Bakong hinukdoang mga pahina',
+'broken-file-category' => 'Mga pahina na igwang nagkaparasa na sagunsong kilyawan',
 
 'about' => 'Manonongod',
 'article' => 'Laog na pahina',
 'newwindow' => '(minabukas sa bàgong bintanà)',
-'cancel' => 'Pondohón',
-'moredotdotdot' => 'Dakol pa...',
+'cancel' => 'Kanselaron',
+'moredotdotdot' => 'Kadagdagan...',
 'mypage' => 'An sakóng pahina',
 'mytalk' => 'An sakóng olay',
-'anontalk' => 'Olay para sa IP na ini',
-'navigation' => 'Paglibotlíbot',
+'anontalk' => 'Olay para kaining IP address',
+'navigation' => 'Nabigasyon',
 'and' => '&#32;asin',
 
 # Cologne Blue skin
-'qbfind' => 'Hanápon',
-'qbbrowse' => 'Maghalungkát',
-'qbedit' => 'Hirahón',
+'qbfind' => 'Maghanap',
+'qbbrowse' => 'Halungkáta',
+'qbedit' => 'Liwata',
 'qbpageoptions' => 'Ining pahina',
 'qbpageinfo' => 'Konteksto',
-'qbmyoptions' => 'Mga pahina ko',
+'qbmyoptions' => 'Sakong mga pahina',
 'qbspecialpages' => 'Espesyal na mga pahina',
-'faq' => 'HD',
-'faqpage' => 'Project:HD',
+'faq' => 'PPK (Pirmihang Pighahapot na mga kahaputan)',
+'faqpage' => 'Project:PPK (Pirmihang Pighahapot na mga Kahaputan)',
 
 # Vector skin
-'vector-action-delete' => 'paráon',
+'vector-action-addsection' => 'Idagdag an topic',
+'vector-action-delete' => 'puráon',
 'vector-action-move' => 'Ibalyó',
-'vector-action-protect' => 'Olangán',
-'vector-view-create' => 'Maggíbo',
+'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-view-create' => 'Magmukna',
 'vector-view-edit' => 'Liwatón',
-'vector-view-history' => 'Hilingón an uusipón',
-'vector-view-view' => 'Basáhon',
+'vector-view-history' => 'Tanawon sa historiya',
+'vector-view-view' => 'Basáha',
 'vector-view-viewsource' => 'Hilingón an ginikánan',
-'actions' => 'Mga paghiro',
-'namespaces' => 'Liang-liang',
+'actions' => 'Mga aksyon',
+'namespaces' => 'Mga espasyong ngaran',
+'variants' => 'Mga pinalaen',
 
 'errorpagetitle' => 'Salâ',
-'returnto' => 'Magbwelta sa $1.',
-'tagline' => 'Halì sa {{SITENAME}}',
-'help' => 'Tabang',
-'search' => 'Hanápon',
-'searchbutton' => 'Hanápon',
-'go' => 'Dumanán',
-'searcharticle' => 'Dumanán',
-'history' => 'Uusipón nin pahina',
-'history_short' => 'Uusipón',
-'updatedmarker' => 'nabàgo poon kan huri kong pagdalaw',
-'printableversion' => 'Naipiprentang bersyon',
-'permalink' => 'Permanenteng takod',
-'print' => 'Iprenta',
-'view' => 'Mga paghilíng',
+'returnto' => 'Magbalik sa $1.',
+'tagline' => 'Gikan sa {{SITENAME}}',
+'help' => 'Katabangan',
+'search' => 'Maghanap',
+'searchbutton' => 'Maghanap',
+'go' => 'Dumani',
+'searcharticle' => 'Lakaw',
+'history' => 'Historiya kan pahina',
+'history_short' => 'Historiya',
+'updatedmarker' => 'dinagdagan poon kan sakong huring pagbisita',
+'printableversion' => 'Puwede maimprintang bersyon',
+'permalink' => 'Permanenteng kilyawan',
+'print' => 'Imprintaron',
+'view' => 'Tanawon',
 'edit' => 'Liwatón',
-'create' => 'Maggíbo',
-'editthispage' => 'Hirahón ining pahina',
-'create-this-page' => 'Gibohon ining pahina',
-'delete' => 'Paraon',
-'deletethispage' => 'Paraon ining pahina',
-'undelete_short' => 'Bawion an pagparà {{PLURAL:$1|paghirá|$1 mga paghirá}}',
-'protect' => 'Protehiran',
-'protect_change' => 'ribáyan an proteksyon',
-'protectthispage' => 'Protehiran ining pahina',
-'unprotect' => 'bawion an pagprotehir',
-'unprotectthispage' => 'Bawion an proteksyon kaining pahina',
-'newpage' => 'Bàgong pahina',
-'talkpage' => 'Pag-olayan ining pahina',
-'talkpagelinktext' => 'Pag-oláyan',
+'create' => 'Muknaon',
+'editthispage' => 'Liwata ining pahina',
+'create-this-page' => 'Muknaon ining pahina',
+'delete' => 'Puraon',
+'deletethispage' => 'Puraon ining pahina',
+'undelete_short' => 'Bawia an pagpurà kan {{PLURAL:$1|sarong pagliwat|$1 mga pagliwat}}',
+'viewdeleted_short' => 'Hilngon {{PLURAL:$1|sarong pinara na pagliwat|$1 mga pinara na pagliwat}}',
+'protect' => 'Protektari',
+'protect_change' => 'Ribayan',
+'protectthispage' => 'Protektaran ining pahina',
+'unprotect' => 'Ribayi an proteksyon',
+'unprotectthispage' => 'Ribayi an proteksyon kaining pahina',
+'newpage' => 'Bàguhong pahina',
+'talkpage' => 'Orolayan ining pahina',
+'talkpagelinktext' => 'Olay',
 'specialpage' => 'Espesyal na Pahina',
-'personaltools' => 'Mga gamit na personal',
-'postcomment' => 'Magkomento',
-'articlepage' => 'Hilingón an pahina kan laog',
-'talk' => 'Orólay',
-'views' => 'Mga hilíng',
-'toolbox' => 'Kagamitan',
-'userpage' => 'Hilingón an pahina kan parágamit',
-'projectpage' => 'Hilingón an pahina kan proyekto',
-'imagepage' => 'Hilingón an pahina kan ladawan',
-'mediawikipage' => 'Hilingón an pahina kan mensahe',
-'templatepage' => 'Hilingón an pahina kan templato',
-'viewhelppage' => 'Hilingón an pahina kan tabang',
-'categorypage' => 'Hilingón an pahina kan kategorya',
-'viewtalkpage' => 'Hilingón an orólay',
-'otherlanguages' => 'Sa ibáng mga tatarámon',
+'personaltools' => 'Personal na mga kagamitan',
+'postcomment' => 'Baguhong seksyon',
+'articlepage' => 'Tanawon an laog kan pahina',
+'talk' => 'Orolayan',
+'views' => 'Mga Tanawon',
+'toolbox' => 'Kagamitang kahon',
+'userpage' => 'Tanawon an pahina kan parágamit',
+'projectpage' => 'Tanawon an pahina kan proyekto',
+'imagepage' => 'Hilngón an pahina nin sagunson (file)',
+'mediawikipage' => 'Tanawon an pahina kan mensahe',
+'templatepage' => 'Tanawon an pahina kan panguyog',
+'viewhelppage' => 'Tanawon an pahina nin katabangan',
+'categorypage' => 'Tanawon an pahina nin kategorya',
+'viewtalkpage' => 'Tanawon an orolayan',
+'otherlanguages' => 'Sa ibang mga lengguwahe',
 'redirectedfrom' => '(Piglikay halì sa $1)',
 'redirectpagesub' => 'Ilikáy an pahina',
 'lastmodifiedat' => 'Huring pigbàgo an pahinang iní $2 kan $1.',
 'viewcount' => 'Binukasán ining pahina nin {{PLURAL:$1|sarong beses|nin $1 beses}}.',
 'protectedpage' => 'Protektadong pahina',
-'jumpto' => 'Maglukso sa:',
-'jumptonavigation' => 'paglibotlíbot',
-'jumptosearch' => 'hanápon',
+'jumpto' => 'Magluksó sa:',
+'jumptonavigation' => 'paglibotlibot',
+'jumptosearch' => 'hanapon',
+'view-pool-error' => 'Sori tabi, an mga server kargado sa oras na ini.
+Grabe kadakol an mga paragamit na pinagprubaran mahiling an pahinang ini.
+Makihalat tabi nin kadikit na panahon bago ka magprubara na makapaglaog sa pahinang ini.
+
+$1',
+'pool-timeout' => 'Timeout naghahalat para makapanugpon',
+'pool-queuefull' => 'An grupong panproseso panoon',
+'pool-errorunknown' => 'Bakong bistadong sala',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'Dapít sa {{SITENAME}}',
 'aboutpage' => 'Project:Manonongód',
 'copyright' => 'Makukua an laog sa $1.',
 'copyrightpage' => '{{ns:project}}:Mga derechos nin parásurat',
-'currentevents' => 'Mga panyayári sa ngonyán',
-'currentevents-url' => 'Project:Mga panyayari sa ngonyan',
+'currentevents' => 'Mga pangyayari sa ngunyán',
+'currentevents-url' => 'Project:Mga pangyayari sa ngunyán',
 'disclaimers' => 'Mga pagpabayà',
-'disclaimerpage' => 'Project:Pankagabsán na pagpabayà',
+'disclaimerpage' => 'Project:Pangkagabsán na pagpabayà',
 'edithelp' => 'Paghirá kan pagtabang',
 'edithelppage' => 'Help:Pagliwát',
 'helppage' => 'Help:Mga laóg',
-'mainpage' => 'Pangenot na Pahina',
-'mainpage-description' => 'Pangenot na Pahina',
+'mainpage' => 'Panginot na Pahina',
+'mainpage-description' => 'Panginot na Pahina',
 'policy-url' => 'Project:Palakáw',
 'portal' => 'Portal kan komunidad',
 'portal-url' => 'Project:Portal kan Komunidad',
@@ -316,7 +350,7 @@ $messages = array(
 
 'badaccess' => 'Salang permiso',
 'badaccess-group0' => 'Dai ka tinotogotan na gibohon an aksyon na saimong hinahagad.',
-'badaccess-groups' => 'An aksyon na saimong hinahagad limitado sa mga parágamit sa sarô sa mga grupong $1.',
+'badaccess-groups' => 'An aksyon na saimong pinaghahagad limitado sa mga parágamit na {{PLURAL:$2|an grupo|saro sa mga grupo}}: $1.',
 
 'versionrequired' => 'Kaipuhan an bersyon $1 kan MediaWiki',
 'versionrequiredtext' => 'Kaipuhan an bersyon $1 kan MediaWiki sa paggamit kan pahinang ini. Hilíngón an [[Special:Version|Bersyon kan pahina]].',
@@ -336,6 +370,8 @@ $messages = array(
 'toc' => 'Mga laóg',
 'showtoc' => 'ipahilíng',
 'hidetoc' => 'tagóon',
+'collapsible-collapse' => 'Pinahalipot',
+'collapsible-expand' => 'Pinahalawig',
 'thisisdeleted' => 'Hilingón o isulít an $1?',
 'viewdeleted' => 'Hilingón an $1?',
 'restorelink' => '{{PLURAL:$1|sarong pinarang paghirá|$1 na pinarang paghirá}}',
@@ -347,13 +383,15 @@ $messages = array(
 'page-rss-feed' => '"$1" Hungit na RSS',
 'page-atom-feed' => '"$1" Hungit na Atomo',
 'feed-atom' => 'Atomo',
-'red-link-title' => '$1 (daí pa naisusurat)',
+'red-link-title' => '$1 (an pahina bako pang eksistido)',
+'sort-descending' => 'Suysoy paibaba',
+'sort-ascending' => 'Suysoy paitaas',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Pahina',
 'nstab-user' => 'Pahina nin paragamít',
 'nstab-media' => 'Pahina kan media',
-'nstab-special' => 'Espesyal',
+'nstab-special' => 'Espesyal na pahina',
 'nstab-project' => 'Pahina kan proyekto',
 'nstab-image' => 'File',
 'nstab-mediawiki' => 'Mensahe',
@@ -363,7 +401,9 @@ $messages = array(
 
 # Main script and global functions
 'nosuchaction' => 'Mayong siring na aksyon',
-'nosuchactiontext' => 'An gibo na pinílì nin URL dai bisto kan wiki',
+'nosuchactiontext' => 'An aksyon na pinanungdan kan kilyawan sarong imbalido.
+Baka napasala ka sa pagsurat kan kilyawan, o nagsunod nin salang kilyawan.
+Ini minapanungod man nin sarong kubol (bug) sa ginagamit na software kan {{SITENAME}}.',
 'nosuchspecialpage' => 'Mayong siring na espesyal na páhina',
 'nospecialpagetext' => '<strong>Dai pwede an pahinang espesyal na pinilî mo.</strong>
 
@@ -372,28 +412,36 @@ Pwede mong mahiling an lista nin mga marhay na pahina sa [[Special:SpecialPages|
 # General errors
 'error' => 'Salâ',
 'databaseerror' => 'Salâ sa base nin datos',
-'dberrortext' => 'May salâ sa hapot na sintaksis kan base nin datos.
-Pwedeng may salâ digdi.
-An huring probar na hapót iyo:
+'dberrortext' => 'Sarong datos-sarayan na may napasalang sintaks an nangyari.
+Ini puwedeng minapanungod nin sarong kubol (bug) sa software.
+An pinakahuring pagprubar sa datos-sarayan naghahapot nin:
 <blockquote><tt>$1</tt></blockquote>
-hale sa aksyón "<tt>$2</tt>".
-AnSQL ko nagbalik nin salâ na"<tt>$3: $4</tt>".',
-'dberrortextcl' => 'May salâ sa hapót nin sintaksis kan base nin datos.
-Ini an huring probar na hapót:
+hale sa laog kan punksyon na "<tt>$2</tt>".
+An datos-sarayan nagbalik nin sala na "<tt>$3: $4</tt>".',
+'dberrortextcl' => 'Sarong datos-sarayan na may napasalang sintaks an nangyari.
+An pinakahuring pagprubar sa datos-sarayan naghahapot nin:
 "$1"
-sa aksyón na "$2".
-AnSQL ko nagbalik nin salâ na"$3: $4"',
+na hale sa laog kan punksyon na "$2".
+An datos-sarayan nagbalik nin sala na "<tt>$3: $4</tt>".',
 'laggedslavemode' => 'Patanid: An pahina pwedeng dai nin pagbabâgo sa ngonyan.',
 'readonly' => 'Kandado an base nin datos',
 'enterlockreason' => 'Magkaag tabì nin rason sa pagkandado, asin ikalkulo kun nuarin bubukasón an kandado',
 'readonlytext' => 'Sarado mùna an base nin datos sa mga bàgong entrada asin iba pang mga pagribay, pwede gayod sa rutinang pagmantenir kan base nin datos, despues, mabalik na ini sa normal.
 
 Ini an eksplikasyon kan tagamató na nagkandado kaini: $1',
+'missing-article' => 'An datos-sarayan dae nakanagbo kan teksto nin sarong pahina na dapat kuta nang managboan, pinagngaran na "$1" S2.
+
+Ini pirmeng pinagkakausa sa paagi nin pagsusunod nin sarong lumang diff o historiyang kilyawan na yaon sa sarong pahinang pinagpura na.
+
+Kun iyo ini an kaso, ika nakanagbo nin sarong kubol (bug) sa software.
+Pakireport tabi ini sa [[Special:ListUsers/sysop|administrador]], na naka-antabay sa kilyawan.',
 'missingarticle-rev' => '(pagbàgo#: $1)',
 'missingarticle-diff' => '(Kaibhán: $1, $2)',
-'readonly_lag' => 'Enseguidang nakandado an base nin datos mientras makaabot an base nin datos na esklabo saiyang amo.',
+'readonly_lag' => 'Tulostulos na pagkandado an base nin datos mantang makaabot an base nin datos na esklabo saiyang amo.',
 'internalerror' => 'Panlaog na salâ',
 'internalerror_info' => 'Panlaog na salâ: $1',
+'fileappenderrorread' => 'Dae nakakabasa nin "$1" habang pinagdadagdag.',
+'fileappenderror' => 'Dae nakakapagdagdag nin "$1" sagkod "$2".',
 'filecopyerror' => 'Dai naarog an mga file na "$1" hasta "$2".',
 'filerenameerror' => 'Dai natàwan nin bàgong ngaran an file na "$1" sa "$2".',
 'filedeleteerror' => 'Dai naparà an file na "$1".',
@@ -403,118 +451,218 @@ Ini an eksplikasyon kan tagamató na nagkandado kaini: $1',
 'unexpected' => 'Dai pighuhunà na balór: "$1"="$2".',
 'formerror' => 'Salâ: dai pwedeng isumitir an porma',
 'badarticleerror' => 'Dai pwedeng gibohon ini sa ining páhina.',
-'cannotdelete' => 'Dai naparà an pahina o file na napilî. (Pwede na naparà na ini kan ibang paragamit.)',
+'cannotdelete' => 'An pahina o an sagunson (file) na "$1" dae tabi napupura.
+Ini puwede nang napura kan iba.',
+'cannotdelete-title' => 'Dae mapura an pahina na "$1"',
+'delete-hook-aborted' => 'An pagpura pinundo kan pangawit.
+Ini dae nagtao nin kapaliwanagan.',
 'badtitle' => 'Salâ an titulo',
 'badtitletext' => 'Dai pwede an hinagad na titulo nin pahina, o mayong laog, o sarong titulong pan-ibang tatarámon o pan-ibang wiki na sala an pagkatakód. Pwedengigwa ining sarô o iba pang mga karakter na dai pwedeng gamiton sa mga titulo.',
-'perfcached' => 'Nakaabang an minasunod na mga datos, asin pwede ser na mga lumâ na. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Nakaabang an nagsusunod na mga datos, asin huring nabâgo sa $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'An minasunod na datos pinagtago asin bakong gayo napapanahon. An maximum na {{PLURAL:$1|sarong resulta na|$1 mga resulta na}} yaon sana sa pinagtago.',
+'perfcachedts' => 'An minasunod na datos pinagtago, asin huring pinagdagdagan kan $1. An maximum na {{PLURAL:$4|sarong result na |$4 mga resulta na }} yaon sana sa pinagtago.',
 'querypage-no-updates' => 'Pigpopogol mùna an mga pagbabàgo sa pahinang ini. Dai mùna mababàgo an mga datos digdi.',
 'wrong_wfQuery_params' => 'Salâ na parámetro sa wfQuery()<br />
 Acción: $1<br />
 Hapót: $2',
 'viewsource' => 'Hilingón an ginikanan',
+'viewsource-title' => 'Hilnga an piggikanan para sa $1',
+'actionthrottled' => 'An aksyon pinagpugulan',
+'actionthrottledtext' => 'Bilang sarong pangontra sa spam, ika limitadong sanang himoon ining aksyon sa kadakulon na beses sa halipot sanang panahon, asin ika nakasobra na sa limitasyong ini.
+Paki-otroha giraray sa nagkapirang minuto sana.',
 '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:''' You are editing a page which is used to provide interface text for the software.
-Changes to this page will affect the appearance of the user interface for other users.
-For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
+'editinginterface' => "'''Warning:''' 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)',
 'cascadeprotected' => 'Pinoprotehirán ining páhina sa mga paghirá, ta sarô ini sa mga minasunod na {{PLURAL:$1|páhina|mga páhina}} na pinoprotehiran kan opsyón na "katarata" na nakabuká:
 $2',
 'namespaceprotected' => "Mayô kang permisong maghirá kan mga páhina sa '''$1''' ngaran-espacio.",
-'ns-specialprotected' => 'An mga páhinang nasa {{ns:special}} na ngaran-espacio dai pwedeng hirahón.',
+'customcssprotected' => 'Ika mayong permiso sa pagliwat kaining pahinang CSS, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.',
+'customjsprotected' => 'Ika mayong permiso sa pagliwat kaining pahinang JavaScript, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.',
+'ns-specialprotected' => 'An mga pahinang nasa {{ns:special}} na liang-liang dai pwedeng hirahón.',
+'titleprotected' => 'Ining titulo pinagprotektaran poon pagkamukna ni [[User:$1|$1]].
+An rason na pinagtao iyo na "\'\'$2\'\'".',
+'filereadonlyerror' => 'Dae kinayang baguhon an sagunson (file) "$1$ nin huli ta an repositoryo kan sagunson "$2" yaon sa kamugtakan na basahon sana.
+
+An administrador na iyo an nagkandado kaini nagpahayag kaining kapaliwanagan: "$3".',
+'invalidtitle-knownnamespace' => 'Imbalidong titulo na igwang espasyadong ngaran na "$2" asin teksto na "$3"',
+'invalidtitle-unknownnamespace' => 'Imbalidong titulo na igwang nin bakong bistado na bilang kan espasyadong ngaran na $1 asin teksto na "$2"',
+'exception-nologin' => 'Dae ka nakalaog',
+'exception-nologin-text' => 'Ining pahina o aksyon minakaipo saimo na maglaog kaining wiki.',
 
 # Virus scanner
-'virus-badscanner' => "Saláng konfigurasyon: dai aram an virus scanner: ''$1''",
-'virus-unknownscanner' => 'dai aram an antivirus:',
+'virus-badscanner' => "Raot na kasalansanan: Bakong bistadong virus scanner: ''$1''",
+'virus-scanfailed' => 'An paghingipid (scan) nagpalya (Koda $1)',
+'virus-unknownscanner' => 'bakong bistadong antivirus:',
 
 # Login and logout pages
-'logouttext' => "'''Nakaluwas ka na.'''
+'logouttext' => "'''Ika po sa ngunyan nakaluwas na.'''
 
-Pwede mo pang gamiton an {{SITENAME}} na dai nagpapabisto, o pwede ka giraray lumaog
-bilang pareho o ibang parágamit. Giromdomon tabî na an ibang mga páhina pwedeng mahiling pa na garo nakalaog ka pa, hasta limpyarón mo an abang kan ''browser'' mo.",
-'welcomecreation' => "== Maogmang Pagdagos, $1! ==
-
-Nagibo na an ''account'' mo. Giromdomon tabi na ribayán an saimong mga kabôtan sa {{SITENAME}}.",
+Ika makakadagos pa sa paggamit kan {{SITENAME}} na dai nagpapabisto, o ika [[Special:UserLogin|Maglaog giraray]] bilang pareho o bilang ibang paragamit.
+Giromdoma na an ibang mga pahina mapuwedeng padagos na magpapahiling siring baga na kun ika garo yaon man sana sa laog, sagkod na saimong malinigan mo an sarayan sa kilyawan.",
+'welcomecreation' => '== Maogmang Pag-abot, $1! ==
+An saimong panindog (account) naimukna na tabi.
+Dae ka man tabi malingaw na ribayan an saimong [[Special:Preferences|{{SITENAME}} mga kabôtan]].',
 'yourname' => 'Pangaran kan paragamit:',
-'yourpassword' => 'Sekretong panlaog:',
-'yourpasswordagain' => 'Itaták giraray an sekretong panlaog:',
-'remembermypassword' => 'Giromdomon an paglaog ko sa kompyuter na ini(for a maximum of $1 {{PLURAL:$1|day|days}})',
-'yourdomainname' => "An saimong ''domain'':",
-'externaldberror' => "Igwang nin salang panluwas pantunay kan base nin datos o dai ka pigtotogotan na bâgohon an saimong panluwas na ''account''.",
+'yourpassword' => 'Pasa-taramon:',
+'yourpasswordagain' => 'Pakilaog giraray kan sekretong panlaog:',
+'remembermypassword' => 'Giromdoma an sakong paglaog sa kilyaw (browser) na ini (para sa maksimum na $1 {{PLURAL:$1|aldaw|mga aldaw}})',
+'securelogin-stick-https' => 'Magpirmeng konektado sa HTTPS matapos kang maglaog',
+'yourdomainname' => 'An saimong kasakupan:',
+'externaldberror' => 'Igwa gayod sala sa arinman kan patunay sa datos-sarayan o ika dae pinagtugutan na bâgohon an saimong panluwas na panindog.',
 'login' => 'Maglaog',
-'nav-login-createaccount' => 'Maglaog / maggibo nin account',
-'loginprompt' => 'Kaipuhan may cookies ka para makalaog sa {{SITENAME}}.',
-'userlogin' => 'Maglaog / maggibo nin account',
+'nav-login-createaccount' => 'Maglaog / magmukna nin panindog',
+'loginprompt' => 'Ika kaipong paganahon an mga cookies tanganing makalaog sa {{SITENAME}}.',
+'userlogin' => 'Maglaog / magmukna nin panindog',
+'userloginnocreate' => 'Maglaog ka',
 'logout' => 'Magluwas',
 'userlogout' => 'Magluwás',
-'notloggedin' => 'Mayò sa laog',
-'nologin' => "Mayò ka pa nin entrada? '''$1'''.",
-'nologinlink' => 'Maggibo nin account',
-'createaccount' => 'Maggibo nin account',
-'gotaccount' => "Igwa ka na nin account? '''$1'''.",
+'notloggedin' => 'Dae ka nakalaog',
+'nologin' => 'Mayò ka pa nin panindog (account)? $1.',
+'nologinlink' => 'Magmukna nin panindog',
+'createaccount' => 'Magmukna nin panindog',
+'gotaccount' => 'Igwa ka na tabi nin panindog? $1.',
 'gotaccountlink' => 'Maglaog',
-'createaccountmail' => 'sa e-koreo',
-'badretype' => 'Dai parehas an pigtaták mong mga sekretong panlaog.',
-'userexists' => 'Piggagamit na kan iba an pangaran. Magpili tabî nin iba.',
-'loginerror' => 'Salâ an paglaog',
-'createaccounterror' => 'Daí maggíbo an account: $1.',
-'nocookiesnew' => 'Nagibo na an account kan parágamit, alagad dai ka pa nakalaog. Naggagamit nin cookies an {{SITENAME}} para magpalaog sa mga parágamit. Nakapondo an cookies mo. Paandaron tabì ini, dangan, maglaog gamit an bàgo mong pangaran asin sekretong panlaog.',
-'nocookieslogin' => 'Naggagamit nin mga cookies an {{SITENAME}} para magpalaog nin mga paragamit. Nakapondo an mga cookies mo. Paandaron tabi ini asin probaran giraray.',
-'noname' => 'Dai ka pa nagkaag nin pwedeng gamiton na pangaran.',
-'loginsuccesstitle' => 'Matriumpo an paglaog',
-'loginsuccess' => "'''Nakalaog ka na sa {{SITENAME}} \"\$1\".'''",
-'nosuchuser' => 'Mayong paragamit sa pangaran na "$1". Reparohon an pigsurat mo, o maggibo nin bàgong account.',
-'nosuchusershort' => 'Mayong paragamit sa nagngangaran na "$1". Reparohon an pigsurat mo.',
-'nouserspecified' => 'Kaipuhan mong kaagan nin pangaran.',
-'wrongpassword' => 'Salâ an pigtaták na sekretong panlaog. Probaran giraray tabì.',
-'wrongpasswordempty' => 'Mayong pigkaag na sekretong panlaog. Probaran giraray tabì.',
-'passwordtooshort' => 'Salâ o halìpoton an saimong sekretong panlaog. Igwa dapat ining dai mababà sa {{PLURAL:$1|1 karakter|$1 karakter}} asin iba man sa pinilì mong pangaran.',
-'mailmypassword' => 'Ipadara sa e-koreo an sekretong panlaog',
-'passwordremindertitle' => 'Panpaísi nin sekretong panlaog halì sa {{SITENAME}}',
-'passwordremindertext' => 'Sarong paragamit (pwedeng ika, halì sa IP na $1)
-an naghagad nin bàgong sekretong panlaog para sa {{SITENAME}} ($4).
-"$3" na an bàgong sekretong panlaog ni "$2".
-Kaipuhan maglaog ka asin ibalyó an saimong sekretong panlaog.
-
-Kun ibang tawo an naghagad kaini o kun nagiromdóman mo na an saimong sekretong panlaog asin habô mo nang ribayan ini, dai mo na pagintiendehon ining mensahe. Ipadagos na an paggamit kan dating sekretong panlaog.',
-'noemail' => 'Mayong e-koreo na nakarehistro sa parágamit na "$1".',
-'passwordsent' => 'Igwang bàgong sekretong panlaog na pigpadará sa e-koreong nakarehistro ki "$1".
-Maglaog tabì giraray pagnakua mo na ini.',
-'blocked-mailpassword' => 'Pigbagatan sa paghirá an saimong IP, asin pigpopogolan na magamit an pagbawi kan sekretong panlaog tangarig maibitaran an pagabuso.',
-'eauthentsent' => 'May ipinadarang e-koreong kompirmasyon sa piniling adres nin e-koreo.
-Bàgo pa magpadara nin iba pang e-koreo sa account na ini, kaipuhan tabing sunodon an mga instruksyon na nasa e-koreo, tangarig makompirmar na talagang saimo ining account.',
-'throttled-mailpassword' => 'May pinadara nang paisi nin sekretong panlaog, sa huring
-$1 na oras. Para pogolan an mga pagabuso, sarong paisi sana an ipapadara sa laog nin
-$1 na oras.',
-'mailerror' => 'Salâ an pagpadará nin e-koreo: $1',
-'acct_creation_throttle_hit' => 'Pasensya, nakagibo ka na nin $1 accounts. Dai ka na makakagibo pa.',
-'emailauthenticated' => "An saimong ''e''-surat pinatunayan sa $1.",
-'emailnotauthenticated' => "Dai pa napatunayan an saimong ''e''-surat. Mayong ipapadarang ''e''-surat para sa ano man na minasunod na gamit.",
-'noemailprefs' => "Magpilî tabî nin ''e''-surat tangarig magandar ining mga gamit.",
-'emailconfirmlink' => "Kompirmaron tabî an saimong ''e''-surat",
-'invalidemailaddress' => "Dai matogotan ining ''e''-surat ta garo salâ an ''format'' kaini. Magkaag tabî nin tamâ o dai pagkaagan.",
-'accountcreated' => "Nagibo na an ''account''.",
-'accountcreatedtext' => "Ginibo na an ''account'' para ki $1.",
-'loginlanguagelabel' => 'Tataramon: $1',
+'userlogin-resetlink' => 'Nakalingaw ka sa panlaog mong detalye?',
+'createaccountmail' => 'Sa paagi nin e-koreo',
+'createaccountreason' => 'Rason:',
+'badretype' => 'An mga sekretong panlaog mong pinagtatak bakong pareho.',
+'userexists' => 'Paragamit na ngarang piglaog may naggagamit na.
+Pakipili nin ibang ngaran tabi.',
+'loginerror' => 'An paglaog napasalâ',
+'createaccounterror' => 'Dae tabi maimukna an panindog: $1.',
+'nocookiesnew' => 'An panindog kan paragamit namukna na, pero ika dae pa tabi nakalaog.
+{{SITENAME}} naggagamit nin cookies tanganing makalaog an mga paragamit.
+Ika igwang mga cookies na dae pinagana.
+Tabi paganaha sinda, dangan maglaog ka sa saimong baguhon na pangaran kan paragamit asin sekretong panlaog.',
+'nocookieslogin' => '{{SITENAME}} naggagamit nin mga cookies para sa maglaog na mga paragamit.
+Ika igwang mga cookies na dae pinagana.
+Tabi paganaha sinda asin otroha giraray.',
+'nocookiesfornew' => 'An panindog kan paragamit dae pinagmukna, nin huli ta dae nyamo kumpirmado an pinaggikanan kaini.
+Pakipaseguro na saimong pinagana an cookies, ikarga giraray ining pahina asin probaran mo otro.',
+'noname' => 'Ika dae tabi nakapagkaag nin sarong balidong pangaran nin paragamit.',
+'loginsuccesstitle' => 'Matrayumpo an saimong paglaog',
+'loginsuccess' => "'''Ika ngunyan nakalaog na sa {{SITENAME}} bilang si \"\$1\".'''",
+'nosuchuser' => 'Dae pang paragamit na ginagamit an pangaran na "$1".
+An mga ngaran nin paragamit sensitibo gayo sa tipahan.
+Pakireparo kan saimong espeling, o [[Special:UserLogin/signup|Magmukna nin bagong panindog]].',
+'nosuchusershort' => 'Mayo po tabing paragamit na an pangaran "$1".
+Paki-tsek an saimong espeling.',
+'nouserspecified' => 'Kaipuhan mong magkaag nin sarong pangaran nin paragamit.',
+'login-userblocked' => 'An paragamit na ini pinagkubkob. An paglaog dae pinagtutugutan.',
+'wrongpassword' => 'Salâ an pigtaták na sekretong panlaog.
+Tabi probaran giraray.',
+'wrongpasswordempty' => 'An sekretong panlaog pinagtatak na blangko.
+Tabi probaran giraray.',
+'passwordtooshort' => 'Mga sekretong panlaog dapat igwa nin {{PLURAL:$1|1 karakter|$1 mga karakter}}.',
+'password-name-match' => 'An saimong sekretong panlaog dapat laen sa saimong paragamit na ngaran.',
+'password-login-forbidden' => 'An paggamit kaining pangaran nin paragamit asin sekretong panlaog pinagbabawal.',
+'mailmypassword' => 'Paki-koreo an bagong sekretong panlaog',
+'passwordremindertitle' => 'Bagong temporaryo na sekretong panlaog para sa {{SITENAME}}',
+'passwordremindertext' => 'May sarong tawo (pwedeng ika gayod, gikan sa IP address na $1) naghagad nin sarong bagong sekretong panlaog para sa {{SITENAME}} ($4). Sarong temporaryong sekretong panlaog para sa paragamit "$2" an pinagmukna asin pinagtuytoy na magin "$3". Kun iyo ini an saimong katuyuhan, kaipuhan mong maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan.
+An saimong temporaryong sekretong panlaog mapapaso sa laog nin {{PLURAL:$5|sarong aldaw|$5 aldaw}}. 
+
+Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.',
+'noemail' => 'Mayo tabing e-koreong address na nakarehistro para sa paragamit na "$1".',
+'noemailcreate' => 'Kaipuhan kang magtao nin sarong balidong address sa e-surat',
+'passwordsent' => 'Sarong baguhon na sekretong panlaog an ipinadara sa e-koreong address na nakarehistro para ki "$1".
+Tabi maglaog giraray matapos mong maresibe ini.',
+'blocked-mailpassword' => 'An saimong IP address pinagkubkob na magliwat, asin kaya dae tinutugutan na gumamit kan pambawi nin sekretong panlaog na punksyon tanganing makalikay sa abuso.',
+'eauthentsent' => 'Sarong e-koreong pankumpirmasyon an ipinadara sa nominadong e-koreong address.
+Bago an ibang e-koreo ipinadara sa panindog, ika igwang pagsunudong na mga instruksyon na yaon sa e-koreo, tanganing kumpirmaron na an panindog tunay talagang saimo.',
+'throttled-mailpassword' => 'Sarong pagiromdom kan sekretong panlaog an ipinadara na, sa laog nin {{PLURAL:$1|hour|$1 hours}}.
+Tangarig malikayan an abuso, saro sanang pagiromdom kan sekretong panlaog an ipinapadara sa lambang {{PLURAL:$1|hour|$1 hours}}.',
+'mailerror' => 'Salâ an pagpadará kan koreo: $1',
+'acct_creation_throttle_hit' => 'Mga bisita kaining wiki na ginagamit an saimong IP address nagmukna nin {{PLURAL:$1|1 panindog|$1 mga panindog}} sa nakaaging aldaw, na iyo ngani an maximum na pinagtutugot sa laog kan peryodong panahon.
+Bilang resulta, an mga bisita na naggagamit kaining IP address dae nguna makakamukna nin mga panindog.',
+'emailauthenticated' => 'An saimong e-koreo awtentikado kan $2 sa $3.',
+'emailnotauthenticated' => 'An saimong e-surat dae pa tabi pinagpatunayan. 
+Mayong e-surat an ipapadara para sa arinman kan minasunod na estima.',
+'noemailprefs' => 'Magkaag nin sarong e-koreong address sa saimong mga kabotan para gumana ining mga estima.',
+'emailconfirmlink' => 'Kompirmaron tabî an saimong e-koreong address',
+'invalidemailaddress' => 'An e-koreo dae akseptado habang ini minapahiling na igwa nin imbalidong panugmad.
+Pakilaog sana tabi nin sarong tugmadong koreo o pabayae na mayong laman an suratan.',
+'cannotchangeemail' => 'An panindog na address sa e-surat dati mariribayan sa Wiki na ini.',
+'emaildisabled' => 'Ining sayt dae makakapagpadara nin mga e-surat.',
+'accountcreated' => 'Panindog pinagmukna na',
+'accountcreatedtext' => 'An paragamit na panindog para sa $1 pinagmukna na.',
+'createaccount-title' => 'Panindog na pagmukna para sa {{SITENAME}}',
+'createaccount-text' => 'May tawong nagmukna nin sarong panindog na gamit an saimong address na e-surat sa {{SITENAME}} ($4) na may ngaran na "$2, na may sikretong panlaog na "$3".',
+'usernamehasherror' => 'Paragamit na ngaran dae puwede na igwang simbolikong mga kabtang',
+'login-throttled' => 'Nakapaghimo ka na nin kadakulon na pagprubar sa paglaog dae pa sana nahaloy. Mapuwede lang po na maghalat bago magprubar giraray.',
+'login-abort-generic' => 'An saimong paglaog dae nakadagos - Pinundo',
+'loginlanguagelabel' => 'Lengguwahe: $1',
+'suspicious-userlogout' => 'An hinahagad mong magluwas pinagpundo nin huli ta ini gayod pinagpadara sa paagi nin sarong pasang kilyaw o proksing hilom.',
+
+# E-mail sending
+'php-mail-error-unknown' => 'Bakong bantog na kasalaan sa PHP mail() function.',
+'user-mail-no-addy' => 'Nagprubar na magpadara nin e-koreo na mayo nin e-koreong address.',
 
 # Change password dialog
-'resetpass' => "Ipwesto giraray an sekretong panlaog kan ''account''",
-'resetpass_announce' => "Nakalaog ka na may kodang temporaryong ''e''-sinurat. Para matapos an paglaog, kaipuhan mong magpwesto nin bâgong sekretong panlaog digdi:",
-'resetpass_text' => '<!-- Magdugang nin teksto digdi -->',
-'resetpass_header' => 'Ibalyó an sekretong panlaog',
-'oldpassword' => 'Lumang sekretong panlaog:',
-'newpassword' => 'Bàgong sekretong panlaog:',
+'resetpass' => 'Ribayan an sekretong panlaog',
+'resetpass_announce' => 'Ika nakalaog na na igwang sarong temporaryong koda sa e-koreo.
+Tanganing tapuson an paglalaog, ika kaipong magkaag nin sarong baguhon na sekretong panlaog digdi:',
+'resetpass_text' => '<!-- Magdagdag nin teksto digdi -->',
+'resetpass_header' => 'Ribayan an panindog na sekretong panlaog',
+'oldpassword' => 'Dating sekretong panlaog:',
+'newpassword' => 'Bàguhon na sekretong panlaog:',
 'retypenew' => 'Itaták giraray an bàgong panlaog:',
 'resetpass_submit' => 'Ipwesto an sekretong panlaog dangan maglaog',
 'resetpass_success' => 'Naribayan na an saimong sekretong panlaog! Pigpapadagos ka na...',
-'resetpass_forbidden' => 'Dai pwedeng ribayan an mga sekretong panlaog sa ining wiki',
+'resetpass_forbidden' => 'An mga sekretong panlaog dae puwedeng maribayan',
+'resetpass-no-info' => 'Ika dapat nakalaog na tanganing direktang makagamit kaining pahina.',
 'resetpass-submit-loggedin' => 'Ribayan an sekretong panlaog',
+'resetpass-submit-cancel' => 'I-kansela',
 'resetpass-wrong-oldpass' => 'Saláng temporaryo o presenteng sekretong panlaog.
 Matriumpo mo nang nailaog an sekretong panlaog o nakua an bàgong temporaryong sekretong panlaog.',
 'resetpass-temp-password' => 'Temporaryong sekretong panlaog:',
 
+# Special:PasswordReset
+'passwordreset' => 'Pakibago kan sekretong panlaog',
+'passwordreset-text' => 'Kumpletoha ining porma tanganing makaresibe nin pampagiromdom na e-koreo kan detalye nin saimong panindog.',
+'passwordreset-legend' => 'Pakibago kan sekretong panlaog',
+'passwordreset-disabled' => 'An pagbago kan sekretong panlaog pinagpundo sa wiking ini.',
+'passwordreset-pretext' => '{{PLURAL:$1||Pakilaog kan saro sa mga pedaso nin datos sa ibaba}}',
+'passwordreset-username' => 'Paragamit-ngaran:',
+'passwordreset-domain' => 'Kasakupan:',
+'passwordreset-capture' => 'Hilngon an kinaluwasang e-koreo?',
+'passwordreset-capture-help' => 'Kun saimong i-tsek ini box, an e-koreo (na igwang temporaryong sekretong panlaog) ipapahiling saimo siring na ini ipagpapadara sa paragamit.',
+'passwordreset-email' => 'E-koreong address:',
+'passwordreset-emailtitle' => 'Mga detalye kan panindog sa {{SITENAME}}',
+'passwordreset-emailtext-ip' => 'May sarong tawo (pwedeng ika gayod, gikan sa IP address na $1) naghagad nin sarong pagiromdom kan detalye kan saimong panindog para sa {{SITENAME}} ($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-koreong address:
+
+$2
+
+{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong panlaog}} mapapaso sa {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.
+Ika dapat na maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.',
+'passwordreset-emailtext-user' => 'Paragamit $1 sa {{SITENAME}} naghahagad nin sarong pagiromdom kan detalye nin saimong panindog para sa {{SITENAME}}
+($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-koreong address:
+
+$2
+
+
+{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong panlaog}} mapapaso sa {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.
+Ika dapat na maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.',
+'passwordreset-emailelement' => 'Paragamit-ngaran: $1
+Temporaryong sekretong panlaog: $2',
+'passwordreset-emailsent' => 'Sarong pampagiromdom na e-koreo ipinadara na.',
+'passwordreset-emailsent-capture' => 'Sarong pampagiromdom na e-koreo ipinadara na, ipinapahiling sa may ibaba.',
+'passwordreset-emailerror-capture' => 'Sarong pampagiromdom na e-koreo pinaghimo na, ipinapahiling sa may ibaba, alagad an pagpapadara kaini sa paragamit nagpalya: $1',
+
+# Special:ChangeEmail
+'changeemail' => 'Ribayan an e-koreong address',
+'changeemail-header' => 'Ribayan an panindog na e-koreong address',
+'changeemail-text' => 'Kumpletoha ining porma tanganing ribayan an saimong e-koreong address. Kinakaipo mong ilaog an saimong sekretong panlaog tanganing kumpirmaron ining pagribay.',
+'changeemail-no-info' => 'Ika dapat nakalaog na tanganing direktang makagamit kaining pahina.',
+'changeemail-oldemail' => 'Presenteng e-koreong address:',
+'changeemail-newemail' => 'Bagong e-koreong address:',
+'changeemail-none' => 'mayo tabi.',
+'changeemail-submit' => 'Ribayan an e-koreo',
+'changeemail-cancel' => 'Kanselaha',
+
 # Edit page toolbar
 'bold_sample' => 'Tekstong mahìbog',
 'bold_tip' => 'Mahìbog na teksto',
@@ -529,9 +677,9 @@ Matriumpo mo nang nailaog an sekretong panlaog o nakua an bàgong temporaryong s
 'nowiki_sample' => "Isaliot digdi an tekstong dai na-''format''",
 'nowiki_tip' => "Dai pagindiendehon pag-''format'' kan wiki",
 'image_sample' => 'Halimbawa.jpg',
-'image_tip' => 'Nakaturay na file',
+'image_tip' => 'Nakalubog na sagunson',
 'media_sample' => 'Halimbawa.ogg',
-'media_tip' => 'Takod nin file',
+'media_tip' => 'Kilyaw nin sagunson (file)',
 'sig_tip' => 'Pirma mo na may taták nin oras',
 'hr_tip' => 'Pabalagbag na linya (use sparingly)',
 
@@ -546,77 +694,114 @@ Matriumpo mo nang nailaog an sekretong panlaog o nakua an bàgong temporaryong s
 'showlivepreview' => 'Patànaw na direkto',
 'showdiff' => 'Hilingón an mga pagbabàgo',
 'anoneditwarning' => "'''Patanid:''' Dai ka nakalaog. Masusurat an saimong IP sa uusipón kan pagbabàgo kan pahinang ini.",
+'anonpreviewwarning' => 'Dae ka tabi nakalaog. An pagtatagama matala kan saimong IP address sa historya nin pagliwat sa pahinang ini.',
 'missingsummary' => "'''Paisi:''' Dai ka nagkaag nin sumád kan paghirâ. Kun pindotón mo giraray an Itagama, maitatagama an hirá mo na mayô kaini.",
 'missingcommenttext' => 'Paki lâgan nin komento sa ibabâ.',
-'missingcommentheader' => "'''Paisi:''' Dai ka nagkaag nin tema/pamayohan para sa ining komentaryo. Kun pindoton mo giraray an Itagama, maitatagama an hira mo na mayô ini.",
+'missingcommentheader' => "'''Pagiromdom:''' Ika dae tabi nagtao nin sarong panultol (subject)/Pamayong linya (headline) para kaining sinambit mo.
+Kun saimong pinduton an \"{{int:savearticle}}\" giraray, an saimong pigliwat matatagama na mayo kaiyan.",
 'summary-preview' => 'Patànaw nin sumada:',
 'subject-preview' => 'Patânaw nin tema/pamayohan:',
 'blockedtitle' => 'Pigbágat an parágamit',
-'blockedtext' => "'''Pigbagat an pangaran o IP mo.'''
+'blockedtext' => "'''An saimong paragamit na ngaran o IP address pinagkubkob.'''
 
-Si $1 an nagbagat. Ini an itinaong rasón, ''$2''.
+An pagkubkob hinimo ni $1.
+An rason na ipinagtao iyo na ''$2''.
 
-* Pagpoon kan pagbagat: $8
-* Pagpasó kan pagbagat: $6
-* Piniling bagaton: $7
+* Pagpoon kan pagkubkob: $8
+* Pagpasó kan pagkubkob: $6
+* Katuyuhan kan parakubkob: $7
 
-Pwede mong suratan si $1 o an iba pang [[{{MediaWiki:Grouppage-sysop}}|administrador]] para pagoralayan an manonongod sa pagbagat.
-Dai mo pwedeng gamiton an ' e-koreohan an paragamit ' kun mayong tamang e-surat sa  [[Special:Preferences|mga kabòtan kan account]] mo asin dai ka pigbagat sa paggamit kaini.
-$3 an presente mong IP, asin #$5 an ID nin pigbagat. Ikaag tabì an arin man o pareho sain man na hapót.",
-'autoblockedtext' => "Enseguidang pigbagat an IP mo ta ginamit ini kan ibang parágamit, na binagat ni \$1.
-Ini an rasón:
+Ika puwedeng magkontak sa $1 or ibang [[{{MediaWiki:Grouppage-sysop}}|administrador]] tanganing pag-orolayan an pagkubkob.
+Ika dae makakagamit kan 'e-koreo kaining paragamit' na panuytuyan laen lang na may sarong balidong e-koreo address na ipinahayag sa saimong [[Special:Preferences|panindog na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.
+An saimong presenteng IP address iyo $3, asin an kubkob ID iyo #$5.
+Pakibale na lang tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.",
+'autoblockedtext' => 'An saimong IP address awtomatikong pinagkubkob nin huli ta ini pinaggamit kan ibang paragamit, na pinagkubkob ni $1.
+An rason na ipinagtao iyo:
 
-:''\$2''
+:\'\'$2\'\'
 
-* Pagpoon kan pagbagat: \$8
-* Pagpasó kan pagbagat: \$6
+* Pagpoon kan pagkubkob: $8
+* Pagpasó kan pagkubkob: $6
+* Katuyuhan kan parakubkob: $7
 
-Pwedeng mong suratan si \$1 o an iba pang mga
-[[{{MediaWiki:Grouppage-sysop}}|administrador]] para pagolayan an manonongod sa pagbagat.
+Puwede mong kontakon si $1 o saro sa [[{{MediaWiki:Grouppage-sysop}}|mga administrador] tanganing pag-orolayan an kubkob.
 
-Giromdomon tabî na pwede mo sanang gamiton an \"''e''-suratan ining parágamit\" na gamit kun igwa kang tamang ''e''-surat na nakarehistro saimong [[Special:Preferences|mga kabôtan nin parágamit]] asin dai ka pigbabagat sa paggamit kaini.
+Patanid tabi dae mo puwedeng gamiton an "e-koreo kaining paragamit" estima laen lang kun ika igwa nin sarong balidong e-koreo address na rehistrado sa saimong [[Special:Preferences|paragamit na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.
 
-\$5 an pigbagat na ID. Ikaag tabî ining ID sa gabos na paghapot mo.",
+An saimong presenteng IP address iyo an $3, asin and Kubkob ID iyo an #$5.
+Pakibale tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.',
 'blockednoreason' => 'mayong itinaong rason',
 'whitelistedittext' => 'Kaipuhan mong $1 tangarig makahirá nin mga páhina.',
 'confirmedittext' => "Kaipuhan mong kompirmaron an saimong ''e''-surat. Ipwesto tabî asin patunayan an saimong ''e''-surat sa [[Special:Preferences|mga kabôtan kan parágamit]].",
-'nosuchsectiontitle' => 'Mayong siring na seksyón',
-'nosuchsectiontext' => 'Mayo man an seksyón an pighihira mo.',
+'nosuchsectiontitle' => 'Dae managboan an seksyon',
+'nosuchsectiontext' => 'Ika nagprubar na liwaton an sarong seksyon na bakong eksistido.
+Ini puwedeng pinagbalyo o pinagpara na habang saimong pinaghihiling an pahina.',
 'loginreqtitle' => 'Kaipuhan Maglaog',
 'loginreqlink' => 'maglaog',
 'loginreqpagetext' => 'Kaipuhan kang $1 tangarig makahilíng nin ibang pahina.',
 'accmailtitle' => 'Napadará na an sekretong panlaog.',
-'accmailtext' => 'An sekretong panlaog ni "$1" naipadará na sa $2.',
+'accmailtext' => "An patsambang pagpuyos kan sekretong panlaog para ki [[User talk:$1|$1]] ipinagpadara na ki $2.
+
+An sekretong panlaog para sa bagong panindog mapuwede tabing maribayan ''[[Special:ChangePassword|Ribayan an sekretong panlaog]]'' na pahina matapos na makalaog.",
 'newarticle' => '(Bàgo)',
 'newarticletext' => 'Sinunod mo an takod sa pahinang mayò pa man.
 Tangarig magibo an pahina, magpoon pagsurat sa kahon sa babâ
 (hilingón an [[{{MediaWiki:Helppage}}|pahina nin tabang]] para sa iba pang impormasyon).
 Kun dai tinuyong nakaabot ka digdi, pindoton sana an back sa browser mo.',
-'anontalkpagetext' => "----''Ini an pahina kan olay kan sarong parágamit na dai bisto na dai pa naggibo nin account o dai naggagamit kaini. Entonces, piggagamit mi an numero nin IP tangarig mabisto siya. Ining IP pwede gamiton kan manlain-lain na mga parágamit. Kun ika sarong paraágamit na dai bisto asin konbensido ka sa pigsasabi ka ining mga komento bakô man dapit saimo,  [[Special:UserLogin|maggibo nin'' account ''o maglaog]] tabì tangarig maibitaran an pagkaribong saimo asin sa ibang mga parágamit na dai bisto.''",
-'noarticletext' => 'Mayò man na teksto sa pahinang iní, pwede mong [[Special:Search/{{PAGENAME}}|hanápon iníng titulo nin pahina]] sa ibáng mga pahina o [{{fullurl:{{FULLPAGENAME}}|action=edit}} hirahón iníng pahina].',
-'clearyourcache' => "'''Pagiromdom:''' Pagkatapos kan pagtagama, pwede ser na kaipuhan mong lawigawan an abang kan ''browser'' para mahiling mo an mga pagbabâgo. '''Mozilla / Firefox / Safari:''' doonan an ''shift'' an ''Shift'' sabay an pagpindot sa ''Reload'', o pindoton an ''Ctrl-Shift-R'' (''Cmd-Shift-R'' sa Apple Mac); '''IE:''' doonan (dai halion an muro) an ''Ctrl'' mientras sabay an pagpindot sa  ''Refresh'', o pindoton an ''Ctrl-F5''; '''Konqueror:''': pindoton sana ''Reload'', o pindoton  an ''F5''; '''Opera''' pwede ser na kaipuhan na halîon an gabos na laog kan abang sa ''Tools→Preferences''.",
-'usercssyoucanpreview' => "'''Tip:''' Gamiton an 'Show preview' para testingon an bâgong CSS bago magtagama.",
-'userjsyoucanpreview' => "'''Tip:''' Gamiton an 'Show preview' para testingon an bâgong JS bago magtagama.",
-'usercsspreview' => "'''Giromdomon tabî na pigpapatânaw sana saimo an CSS nin parágamit, dai pa ini nakatagama!'''",
+'anontalkpagetext' => "----''Ini iyo an pahina kan orolayan para an sarong dae bistadong paragamit na dae pa nakapagmukna nin panindog, o dae pa nakapaggamit kaini.
+Kaya kami kaipong gumamit nin numerikal na IP address sa pagbisto saiya.
+An arog kaining IP address puwedeng maikapagheras sa nagkapirang mga paragamit.
+Kun ika sarong dae pa bistadong paragamit asin mati mo na igwang irelebanteng sambit na pinanungod saimo, tabi paki [[Special:UserLogin/signup|mukna nin panindog]] or [[Special:UserLogin|maglaog ka]] tanganing malikayan an pagkaribong sa pag-iriba kan iba pang mga paragamit.''",
+'noarticletext' => '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,
+<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,
+o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} maghanap sa magkasurundong mga talaan]</span>.',
+'userpage-userdoesnotexist' => 'Paragamit na panindog "$1" bako tabing rehistrado.
+Paki-tsek kun ika magustong magmukna/magliwat kaining pahina.',
+'userpage-userdoesnotexist-view' => 'Paragamit na panindog "$1" bako tabing rehistrado.',
+'blocked-notice-logextract' => 'Ining paragamit sa presente nakakubkob.
+An pinakahuring entrada kan pagkubkob nakahaya sa ibaba bilang reperensiya:',
+'clearyourcache' => "'''Note:''' Matapos maitagama, ika mapuwedeng makaluktos sa tagoan kan saimong kilyaw tanganing mahiling an mga naribayan.
+* '''Firefox / Safari:''' Pauntok na duon sa ''Shift'' habang pinipindot an ''Ikarga otro'', o pinduton as maski arin sa ''Ctrl-F5'' o ''Ctrl-R'' (''⌘-R'' para sa Mac)
+* '''Google Chrome:''' Pinduton ''Ctrl-Shift-R'' (''⌘-Shift-R'' para sa Mac)
+* '''Internet Explorer:''' Pauntok na duon sa ''Ctrl'' habang pinipindot an ''Ipresko otro'', o pinduton an ''Ctrl-F5''
+* '''Konqueror:''' Ipindot an ''Ikarga otro'' o pinduton an ''F5''
+* '''Opera:''' Linigan an tagoan sa ''Tools → Mga Kabotan''",
+'usercssyoucanpreview' => "'''Tip:''' Gamita an \"{{int:showpreview}}\" na pindutan tanganing prubaran an saimong baguhong CSS bago ipagtagama.",
+'userjsyoucanpreview' => "'''Tip:''' Gamita an \"{{int:showpreview}}\" na pindutan tanganing prubaran an saimong baguhong JavaScript bago ipagtagama.",
+'usercsspreview' => "'''Giromdoma baya na ika nagtatanaw pa sana kan saimong paragamit sa CSS.'''
+'''Ini dae pa tabi naitatagama!'''",
 'userjspreview' => "'''Giromdomon tabi na pigtetest/pighihiling mo sana an patanaw kan saimong JavaScript nin paragamit, dai pa ini naitagama!'''",
+'sitecsspreview' => "'''Giromdoma baya na ika nagtatanaw pa sana kaining CSS.'''
+'''Ini dae pa tabi naitatagama!'''",
+'sitejspreview' => "'''Giromdoma baya na ika nagtatatanaw pa sana kaining koda sa JavaScript.'''
+'''Ini dae pa tabi naitatagama!'''",
 'userinvalidcssjstitle' => "'''Patanid:''' Mayong ''skin'' na \"\$1\". Giromdomon tabî na an .css asin .js na mga páhina naggagamit nin titulong nakasurat sa sadit na letras, halimbawa {{ns:user}}:Foo/vector.css bakong {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Binàgo)',
 'note' => "'''Paisi:'''",
-'previewnote' => "'''Patànaw sana ini; dai pa naitagama an mga pagbabàgo!'''",
+'previewnote' => "'''Giromdoma na ini sarong patanaw pa sana.'''
+An saimong mga pinagriliwat dae pa tabi naitatagama!",
+'continue-editing' => 'Ipagpadagos an pagliliwat',
 'previewconflict' => 'Mahihilíng sa patànaw na ini an tekstong nasa itaas na lugar nin paghirá arog sa maipapahiling kun ini an itatagama mo.',
 'session_fail_preview' => "'''Despensa! Dai mi naipadagos an paghirá mo huli sa pagkawara nin datos kan sesyon.
 Probaran tabì giraray. Kun dai man giraray magibo, probaran na magluwas dangan maglaog giraray.'''",
-'session_fail_preview_html' => "'''Despensa! Dai mi naipadagos an paghirá mo nin huli sa kawàran kan datos kan sesyon.'''
+'session_fail_preview_html' => "'''Sori po! Dae tabi nyamo maiproseso an saimong pagliwat nin huli sa kawaraan kan datos sa sesyon.'''
 
-''Huli ta ining wiki may HTML na nakaandar, pigtago an patànaw bilang paglikay kontra sa mga atake sa JavaScript.''
+''Nin huli ta {{SITENAME}} igwa nin bakong pang naprosesong HTML pinagpagana, an patanaw ipinagtago bilang pag-ingat kontra sa atake kan JavaScript.''
 
-'''Kun talagang boot mong hirahón ini, probaran giraray. Kun dai pa giraray magibo, magluwas dangan maglaog giraray. '''",
+'''Kun ini sarong lehitimong pagprubar nin pagliwat, paki-otro tabi giraray.'''
+Kun ini dae man giraray guminana, magprubar na [[Special:UserLogout|magluwas]] asin maglaog giraray.",
 'token_suffix_mismatch' => "'''Dai pigtogotan an paghirá mo ta sinabrit kan client mo an punctuation characters.
 Dai pigtogotan ining paghirá tangarig maibitaran na maraot an teksto kan pahina.
 Nanyayari nanggad ini kun naggagamit ka nin bakong maraháy asin dai bistong web-based proxy service.'''",
+'edit_form_incomplete' => "'''An ibang mga parte kan porma nin pagliwat dae nakaabot sa serbidor; paki-dobleng mansay na an saimong mga pinagliwat bilog na yaon pa asin paki-otro giraray.'''",
 'editing' => 'Pigliliwat an $1',
+'creating' => 'Pinagmumukna an $1',
 'editingsection' => 'Pighihira an $1 (seksyon)',
-'editingcomment' => 'Pighihira an $1 (komento)',
+'editingcomment' => 'Pigliliwat an $1 (bagong seksyon)',
 'editconflict' => 'Komplikto sa paghihira: $1',
 'explainconflict' => "May ibang parágamit na nagbàgo kaining pahina kan pagpoon mong paghirá kaini.
 Nahihilíng ang pahina kan teksto sa parteng itaas kan teksto.
@@ -634,35 +819,78 @@ Pigpropromesa mo man samuyà na ika an kagsurat kaini, o kinopya mo ini sa domin
 '''DAI TABÌ MAGSUMITIR NIN MGA GIBONG IPINAPANGALAD NA KOPYAHON NIN MAYONG PERMISO!'''",
 'copyrightwarning2' => "Giromdomon tabì na an gabos na kontribusyon sa {{SITENAME}} pwedeng hirahón, bàgohon o halion kan ibang mga parágamit. Kun habô mong mahirá an saimomg sinurat na mayong pakimàno, pues, dai tabì isumitir iyan digdi.<br />
 Pigpapangakò mo man samuyà na ika an nagsurat kaini, o pigkopya mo ini sa dominiong panpubliko o sarong parehong libreng rekurso (hilingon an $1 para sa mga detalye). '''DAI TABÌ MAGSUMITIR NIN MGA GIBONG IPINAPANGALAD NA KOPYAHON NIN MAYONG PERMISO!'''",
-'longpageerror' => "'''SALÀ: $1 na kilobytes na kalabà an pahinang isinumitir mo, na mas halabà sa hanggan nin $2 na kilobytes. Dai pwede ining itagama.'''",
-'readonlywarning' => "'''PATANID: Nakakandado an base nin datos para sa pagmantinir, pues, dai mo mûna pwede na itagama an mga paghirá mo. Pwede mo pa man na arogon dangan ipaskil ang teksto sa sarong dokumento arog kan MS Word asbp. asin itagama ini para sa atyan.'''",
-'protectedpagewarning' => "'''PATANID:  Nakakandado ining pahina tangarig an mga parágamit na may priblehiyo nin ''sysop'' sana an pwedeng maghira kaini.'''",
-'semiprotectedpagewarning' => "'''Paisi:''' An pahinang ini isinara tangarig mga rehistradong parágamit sana an makahira kaini.",
+'longpageerror' => "'''Ay Sala: An teksto na saimong pinagsumite {{PLURAL:$1|sarong kilobyte|$1 kilobytes}} an laba, mas halaba kesa maksimum na {{PLURAL:$2|sarong kilobyte|$2 kilobytes}}.'''
+Ini dae tabi maitatagama.",
+'readonlywarning' => "'''Patanid tabi: An datos-sarayan nakakandado para sa maintenance, kay ika dae makakapagtagama kan saimong mga pinagriliwat sa ngunyan.'''
+Ika mapuwedeng maikopya an teksto pasiring sa sarong sagunson kan teksto asin para itagama ini sa huri.
+
+An administrador na iyo an nagkandado kaini naghayag kaining kapaliwanagan: $1",
+'protectedpagewarning' => "'''Patanid tabi: Ining pahina pinagprotektaran tanganing an mga paragamit sana na igwang pribilihiyo bilang administrador an makakapagliwat kaini.'''
+An pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
+'semiprotectedpagewarning' => "'''Note:''' Ining pahina pinagprotektaran na tanganing an mga rehistradong mga paragamit sana an mapuwedeng makapagliwat kaini.
+An pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
 'cascadeprotectedwarning' => "'''Patanid:''' Nakakandado an pahinang ini tangarig an mga parágamit na igwang pribilehyo nin sysop sana an pwedeng maghirá kaini, huli ta kabali ini sa mga kataratang protektado na {{PLURAL:$1|pahina|mga pahina}}:",
-'templatesused' => 'Mga templato na piggamit sa pahinang ini:',
-'templatesusedpreview' => 'Mga templato na piggamit sa patànaw na ini:',
-'templatesusedsection' => 'Mga templato na piggamit sa seksyon na ini:',
+'titleprotectedwarning' => "'''Patanid tabi: Ining pahina pinagprotektaran na tanganing [[Special:ListGroupRights|espesipikong karapatan]] minakaipo tanganing magmukna kaini.'''
+An pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
+'templatesused' => '{{PLURAL:$1|Template|Mga Panguyog}} na pinaggamit kaining pahina:',
+'templatesusedpreview' => '{{PLURAL:$1|Template|Mga Panguyog}} na pinaggamit kaining patanaw:',
+'templatesusedsection' => '{{PLURAL:$1|Template|Mga Panguyog}} na pinaggamit kaining seksyon:',
 'template-protected' => '(protektado)',
 'template-semiprotected' => '(semi-protektado)',
+'hiddencategories' => 'Ining pahina sarong miyembro kan {{PLURAL:$1|1 pinagtagong kategorya|$1 pinagtagong mga kategorya}}:',
 'edittools' => '<!-- An teksto digdi mahihiling sa babâ kan mga pormang pighihirá asin pigkakarga. -->',
 'nocreatetitle' => 'Limitado an paggibo nin pahina',
-'nocreatetext' => 'Igwang pagpogol sa paggibo nin bàgong pahina sa site na ini.
-Pwede kang bumalik dangan maghirá nin presenteng pahina, o [[Special:UserLogin|maglaog o magbukas nin account]].',
-'nocreate-loggedin' => 'Mayò ka nin permiso na maggibo nin mga bàgong pahina sa wiki na ini.',
+'nocreatetext' => '{{SITENAME}} pinagpupugol an kakayanan na magmukna nin baguhong mga pahina.
+Ika makakabalik asin magliwat kan eksistidong nang pahina, o [[Special:UserLogin|maglaog ka o magmukna nin sarong panindog]].',
+'nocreate-loggedin' => 'Ika mayo tabi nin permiso tanganing magmukna nin baguhong mga pahina.',
+'sectioneditnotsupported-title' => 'An pagliliwat tabi sa seksyon bakong suportado',
+'sectioneditnotsupported-text' => 'An pagliliwat tabi sa seksyon bakong suportado sa pahinang ini.',
 'permissionserrors' => 'Mga saláng Permiso',
 'permissionserrorstext' => 'Mayò ka nin permiso na gibohon yan, sa minasunod na {{PLURAL:$1|rason|mga rason}}:',
-'recreate-moveddeleted-warn' => "'''Patanid: Piggigíbo mo giraray an pahina na pigparà na dati pa.'''
-
-Dapat mong isipon kun kaipuhan na ipadagos an paghirá kaining pahina.
-An paghalì kan historial para sa pahinang ini yaon digdi para sa saimong kombenyensya:",
+'permissionserrorstext-withaction' => 'Ika mayo tabi nin permiso sa $2, para sa minasunod na {{PLURAL:$1|rason|mga rason}}:',
+'recreate-moveddeleted-warn' => "'''Patanid tabi: Saimong pinagmumukna giraray an sarong pahina na dati nang pinagpura.'''
+
+Saimo tabing ikonsidera kun ini maninigo na ipagpadagos pa an pagliliwat kaining pahina.
+An pagpura asin pagbalyong talaan para sa pahinang ini pinaghaya digde para sa kombenyinsiya:",
+'moveddeleted-notice' => 'Ining pahina pinagpura na.
+An pagpura asin pagbalyong talaan para sa pahina pinaghaya sa ibaba bilang reperensiya.',
+'log-fulllog' => 'Tanawon an bilog na talaan',
+'edit-hook-aborted' => 'An pagliwat pinagpundo sa paagi kan pangawil.
+Ini dae tabi nagtao nin kapaliwanagan.',
+'edit-gone-missing' => 'Dae makakapagdagdag sa pahina.
+Ini minapahiwatig tabi na pinagpura na.',
 'edit-conflict' => 'Igwang iregularidad sa pagliwat.',
+'edit-no-change' => 'An saimong pagliwat pinagbalewala, nin huli ta mayong pagbabago an pinaghimo sa teksto.',
 'edit-already-exists' => 'Dai maggibo an bàgong pahina.
 Igwa na kaini.',
+'defaultmessagetext' => 'Tugmadong mensahe sa teksto',
+
+# Parser/template warnings
+'expensive-parserfunction-warning' => "'''Patanid tabi:''' Ining pahina naglalaman nin grabe kadakulon na ekspensibong programang pambaranga sa punksyon nin mga pag-aapod.
+
+Ini dapat magkaigwa nin menos sanang $2 {{PLURAL:$2|apod|mga apod}}, igwa na {{PLURAL:$1|ngunyan nin $1 apod|ngunyan nin $1 mga apod}}.",
+'expensive-parserfunction-category' => 'Mga pahina na igwa nin grabe kadakulon na mga ekspensibong programang pambaranga sa punksyon nin mga pag-aapod',
+'post-expand-template-inclusion-warning' => "'''Patanid tabi:''' An panguyog (template) igwang sukol na grabe kadakula.
+An ibang mga panguyog dae tabi maipagdadagdag.",
+'post-expand-template-inclusion-category' => 'Mga pahina kun saen an panguyog igwang sukol na sobrado',
+'post-expand-template-argument-warning' => "'''Patanid tabi:''' Ining pahina naglalaman baya nin sarong panguyog na igwang grabe kadakulang kalakbangan sa sukol.
+Ining mga argumento tabi pinagharali na.",
+'post-expand-template-argument-category' => 'Mga pahina na naglalaman kan pinagharaleng mga argumento sa panguyog',
+'parser-template-loop-warning' => 'An kaluktosan kan panguyog namansayan: [[$1]]',
+'parser-template-recursion-depth-warning' => 'An panguyog nin rekursyong panrarom na kasagkodan nagsobra nin ($1)',
+'language-converter-depth-warning' => 'Tagapagbago kan Lengguwaheng panrarom na kasagkodan nagsobra ($1)',
+'node-count-exceeded-category' => 'Mga pahina kun saen an kabilangan nin tagapagsumpay nagsobra',
+'node-count-exceeded-warning' => 'An pahina nagsobra an kabilangan nin tagapagsumpay',
+'expansion-depth-exceeded-category' => 'Mga pahina kun saen an panrarom na kalakbangan nagsobra',
+'expansion-depth-exceeded-warning' => 'An pahina nagsobra sa panrarom na kalakbangan',
+'parser-unstrip-loop-warning' => 'Panul-ot na kaluktusan namansayan',
+'parser-unstrip-recursion-limit' => 'Panul-ot na rekusyong kasagkodan nagsobra ($1)',
 
 # "Undo" feature
 'undo-success' => 'Pwedeng bawion an paghirá. Sosogon tabì an pagkakaiba sa babâ tangarig maberipikár kun ini an boot mong gibohon, dangan itagama an mga pagbabàgo sa babâ tangarig tapuson an pagbawì sa paghirá.',
 'undo-failure' => 'Dai napogol an paghirá ta igwa pang ibang paghirá sa tahaw na nagkokomplikto.',
-'undo-summary' => 'Bawion an pagpakaraháy na $1 ni [[Special:Contributions/$2|$2]] ([[User talk:$2|Pag-oláyan]])',
+'undo-norev' => 'An pagliwat dae tabi magigibo nin huli ta ini bakong eksistido o pinagpura na.',
+'undo-summary' => 'Ibalik tabi an pinagbabago $1 sa paagi [[Special:Contributions/$2|$2]] ([[Paragamit na Olay:$2|olay]])',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'Dai makagibo nin account',
@@ -674,6 +902,7 @@ Igwa na kaini.',
 'viewpagelogs' => 'Hilingón an mga usip para sa pahinang ini',
 'nohistory' => 'Mayong paghirá nin uusipón sa pahinang ini.',
 'currentrev' => 'Sa ngonyan na pagpakarháy',
+'currentrev-asof' => 'Pinakahuring pagbabago kan $1',
 'revisionasof' => 'Pagpakarháy sa $1',
 'revision-info' => 'An pagpakarháy sa $1 ni $2',
 'previousrevision' => '←Lumà pang pagpakarhay',
@@ -688,9 +917,10 @@ Igwa na kaini.',
 Legend: (ngonyan) = kaibhán sa ngonyan na bersyon,
 (huri) = kaibhán sa huring bersyon, S = saradít na paghirá.',
 'history-fieldset-title' => 'Rinsayon an uusipon',
+'history-show-deleted' => 'Pinagpura sana',
 'histfirst' => 'Pinakaenot',
 'histlast' => 'Pinakahúri',
-'historysize' => '($1 bytes)',
+'historysize' => '({{PLURAL:$1|sarong byte|$1 mga bytes}})',
 'historyempty' => '(mayong laog)',
 
 # Revision feed
@@ -702,51 +932,154 @@ Pwedeng pigparà na ini sa wiki, o tinàwan nin bàgong pangaran.
 Probaran tabì an [[Special:Search|pighahanap sa wiki]] para sa mga pahinang dapít.',
 
 # Revision deletion
-'rev-deleted-comment' => '(hinalì an komento)',
+'rev-deleted-comment' => '(pagliwat na sumaryo pinaghale)',
 'rev-deleted-user' => '(hinalì an parágamit)',
-'rev-deleted-event' => '(hinalì an ingreso)',
-'rev-deleted-text-permission' => 'Ining pagpakaraháy nin pahina pighalì na sa mga archibong panpubliko.
-Pwedeng igwang mga detalye sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} historial kan pagparà].',
-'rev-deleted-text-view' => 'Ining pagpakaraháy nin pahina pighalì na sa mga archibong panpubliko.
-Pwede mo ining hilingón bilang sarong tagamató kaining site;
-Pwedeng igwang mga detalye sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} historial kan pagparà].',
+'rev-deleted-event' => '(talaan kan aksyon pinaghale)',
+'rev-deleted-user-contribs' => 'Paragamit na ngaran o IP address pinaghale - an pigliwat pinagtago gikan sa mga kontribusyon]',
+'rev-deleted-text-permission' => "An pinagbago tabi kaining pahina '''pinagpura'''.
+An mga detalye mananagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpura].",
+'rev-deleted-text-unhide' => "An pagbabago tabi kaining pahina '''pinagpura'''.
+Mga detaylye puwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan nin pagpura].
+Ika mapuwedeng [$1 hilingon ining pagbabago] kun ika nagmawot na magpadagos.",
+'rev-suppressed-text-unhide' => "An pagbabago kaining pahina '''pinaglubog'''.
+Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} talaan kan paglubog].
+Ika mapuwede pa man [$1 matanaw ining pagbabago] kun mawot na magdagos",
+'rev-deleted-text-view' => "An pagbabago tabi kaining pahina '''pinagpura'''.
+Ika mapuwedeng magtanaw kaini; mga detalye puwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpura].",
+'rev-suppressed-text-view' => "An pagbabago kaining pahina '''pinaglubog'''.
+Ika mapuwedeng matanaw ini; mga detalye puwedeng managboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} talaan kan pinaglubog].",
+'rev-deleted-no-diff' => "Ika dae makapagtanaw kaining diff nin huli ta saro kan mga pagbabago '''pinagpura'''.
+Mga detalye puwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinuraan].",
+'rev-suppressed-no-diff' => "Ika dae makapagtanaw kaining diff nin huli ta saro sa mga pagbabago '''pinagpura'''.",
+'rev-deleted-unhide-diff' => "Saro sa mga pagbabago kaining diff '''pinagpura'''.
+Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinuraan].
+Ika mapuwede pa [$1 magtanaw kaining diff] kun ika nagmawot na magpadagos.",
+'rev-suppressed-unhide-diff' => "Saro sa mga pagbabago kaining diff '''pinaglubog'''.
+Mga detalye mapuwedeng managboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} talaan kan pinaglubog].
+Ika mapuwede pa man na [$1 matanaw ining diff] kun ika mawot na magdagos.",
+'rev-deleted-diff-view' => "Saro sa mga pinagbago kaining diff '''pinagpura'''.
+Ika makakapagtanaw kaining diff; mga detalye puwedeng mananagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinuraan].",
+'rev-suppressed-diff-view' => "Saro sa mga pinagbago kaining diff '''pinaglubog'''.
+Ika puwedeng makakatanaw kaining diff; mga detalye puwedeng mananagboan sa [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} talaan kan pinaglubog].",
 'rev-delundel' => 'ipahilíng/itagò',
+'rev-showdeleted' => 'ibuyagyag',
 'revisiondelete' => 'Paraon/bawion an mga pagpakaraháy',
-'revdelete-nooldid-title' => 'Mayong tunggit pagpakaraháy',
-'revdelete-nooldid-text' => 'Dai ka nagpili nin target na pagpakarhay o mga pagpakarhay tangarig magamit ini.',
-'revdelete-selected' => "'''{{PLURAL:$2|Selected revision|Selected revisions}} kan [[:$1]]'''",
-'revdelete-text' => "'''An mga pagpakarhay asin mga panyayari na pigparâ mahihiling pa sa historya asin mga historial kan páhina, pero an ibang parte kan mga laog kaini dai na ipapahiling sa publiko.'''
-
-An ibang mga administrador sa ining wiki pwede pang maghiling kan mga nakatagong laog asin pwede pa nindang bawîon an pagparâ kaini sa paggamit kan parehong ''interface'', kun mayô pang mga ibang restriksyón.",
-'revdelete-legend' => 'Ipwesto an mga restriksyón',
+'revdelete-nooldid-title' => 'Imbalidong target nin pagbabago',
+'revdelete-nooldid-text' => 'Ika dae baya naghayag nin sarong target sa pagbabago tanganing gibohon ining punksyon, an ipinaghayag na pagbabago bako tabing eksistido, o ika nagpuprubar tanganing itago an presentend pagbabago.',
+'revdelete-nologtype-title' => 'Mayong tipo nin talaan na ipinagtao',
+'revdelete-nologtype-text' => 'Ika dae tabi nagpapahayag nin sarong tipo nin talaan tanganing gumibo kaining aksyon dagos.',
+'revdelete-nologid-title' => 'Imbalidong entrada sa talaan',
+'revdelete-nologid-text' => 'Ika dae tabi naghayag nin sarong target talaan nin pangyayari tanganing gumibo kaining punksyon o an pinaghayag na entrada dae tabi eksistido.',
+'revdelete-no-file' => 'An sagunson na pinaghayag dae tabi eksistido.',
+'revdelete-show-file-confirm' => 'Segurado ka tabi na gusto mo matanaw sarong pinagpurang pagbabago kan sagunson "<nowiki>$1</nowiki>" poon $2 sa $3?',
+'revdelete-show-file-submit' => 'Iyo tabi',
+'revdelete-selected' => "'''{{PLURAL:$2|Selected revision|Mga piniling pagbabago}} kan [[:$1]]'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Selected log event|Mga piniling talaan kan mga pangyayari}}:'''",
+'revdelete-text' => "'''Pinagpurang mga pagbabago asin mga pangyayari mahihiling pa man sa historiyang pahina asin mga talaan, pero an mga parte kan saindang laman dae puwedeng magamit kan publiko.'''
+An ibang administrador sa {{SITENAME}} puwede pa man makagamit sa pinagtagong laman asin balewalaon an pagpura kaini giraray sa paagi nin kaparehong panlaog-olay, laen lang kun may kadagdagang pangilin an inilapat.",
+'revdelete-confirm' => 'Pakikumpirma tabi na ika tuyong gumibo kaini, na saimong naintindihan an mga konsekuwensiya, asin ta ika pinaghihimo ini na uyon sa [[{{MediaWiki:Policy-url}}|an palisiya]].',
+'revdelete-suppress-text' => "An paglulubog dapat '''sana''' makakagamit sana para sa minasunod na mga kaso:
+*Potensiyal na libeloso an impormasyon
+*Bakong angay an personal na impormasyon
+*: ''mga address kan harong asin mga numero kan telepono, sosyal na seguridad, iba pa.''",
+'revdelete-legend' => 'Ilapat an mga restriksyon sa bisibilidad',
 'revdelete-hide-text' => 'Tagoon an teksto kan pagpakaraháy',
 'revdelete-hide-image' => 'Tagoon an laog kan file',
 'revdelete-hide-name' => 'Tagoon an aksyon asin target',
 'revdelete-hide-comment' => 'Tagoon an komento sa paghirá',
 'revdelete-hide-user' => 'Tagoon an pangaran kan editor/IP',
-'revdelete-hide-restricted' => 'Ibali sa mga restriksyón na ini an mga sysops asin iba pa',
+'revdelete-hide-restricted' => 'Ilubog an mga datos gikan sa mga administrador asin man kan iba',
+'revdelete-radio-same' => '(dae pagribayan)',
+'revdelete-radio-set' => 'Iyo tabi',
+'revdelete-radio-unset' => 'Bako tabi',
 'revdelete-suppress' => 'Dai ipahilíng an mga datos sa mga sysops asin sa mga iba pa',
 'revdelete-unsuppress' => 'Halîon an mga restriksyón sa mga ibinalík na pagpakarhay',
 'revdelete-log' => 'Rason:',
-'revdelete-submit' => 'Ibílang sa piniling pagpakarhay',
-'revdelete-success' => "'''Nakapwesto na an bisibilidad kan pagpakarhay.'''",
+'revdelete-submit' => 'Ipag-aplay sa mga piniling {{PLURAL:$1|pagbabago|mga pagbabago}}',
+'revdelete-success' => "'''Pagbabago sa bisibilidad matrayumpong pinagdagdagan.'''",
+'revdelete-failure' => "'''Pagbabago sa bisibilidad dae tabi nadagdagan:'''
+$1",
 'logdelete-success' => "'''Nakapuesto na an katalâan kan nangyari.'''",
+'logdelete-failure' => "'''Talaan sa bisibilidad dae tabi nailapat:'''
+$1",
+'revdel-restore' => 'ribayan an bisibilidad',
+'revdel-restore-deleted' => 'pinagpurang mga pagbabago',
+'revdel-restore-visible' => 'lantad na mga pagbabago',
+'pagehist' => 'Pahinang historiya',
+'deletedhist' => 'Pinagpurang historiya',
+'revdelete-hide-current' => 'Napasalang pagtatago kan item petsado $2, $1: Iyo ini an presenteng pagbabago.
+Ini dae tabi naitatago.',
+'revdelete-show-no-access' => 'Napasalang paghahayag kan item petsado $2, $1: Ining item markadong "pinagpangilin".
+Ika mayo tabing pangaputan kaini.',
+'revdelete-modify-no-access' => 'Napasalang pagsasangli kan item petsado $2, $1: Ining item markadong "pinagpangilin".
+Ika mayo tabing pangaputan kaini.',
+'revdelete-modify-missing' => 'Napasalang pagsasangli kan item ID $1: Ini nawawara gikan sa datos-sarayan!',
+'revdelete-no-change' => "'''Patanid tabi:''' An item petsado $2, $1 igwa na tabi kan pinaghahagad na mga panuytoy sa bisibilidad.",
+'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
+**Paglapas kan Copyright
+**Bakong angay na personal na impormasyon
+**Potensiyal na libelosong impormasyon',
+'revdelete-otherreason' => 'Iba pa/kadagdagang rason:',
+'revdelete-reasonotherlist' => 'Ibang rason',
+'revdelete-edit-reasonlist' => 'Liwaton an mga rason sa pagpura',
+'revdelete-offender' => 'Awtor kan pagbabago:',
+
+# Suppression log
+'suppressionlog' => 'Talaan kan paglulubog',
+'suppressionlogtext' => 'Sa ibaba yaon an sarong listahan kan mga pinuraan asin mga kinubkob na imbuwelto sa laman na pinagtatago sa mga administrador.
+Hilnga baya an [[Special:BlockList|listahan kan kinubkob]] para sa listahan kan presenteng operasyonal na mga pinagbabawal asin mga pinagkukubkob.',
+
+# History merging
+'mergehistory' => 'Tiriponon an pahina kan mga historiya',
+'mergehistory-header' => 'Ining pahina minatugot saimo na tiriponon an mga pagbabago kan historiya nin sarong pinaggikanang pahina na magin sarong baguhong pahina.
+Himoon mong segurado na ining pagbabago makapagtala nin historikal na kapadagusang pahina.',
+'mergehistory-box' => 'Tiriponon an mga pagbabago sa duwang mga pahina:',
+'mergehistory-from' => 'Gikanang pahina:',
+'mergehistory-into' => 'Destinasyong pahina:',
+'mergehistory-list' => 'Puwedeng maitiripon na historiya kan pagliwat',
+'mergehistory-merge' => 'An mga minasunod na mga pagbabago sa [[:$1]] mapuwedeng pagtiriponon na magin [[:$2]].
+Gamita an radyong pindutan sa kolum tanganing tiriponon sana an mga pagbabagong pinagmukna asin bago pa man an pinaghahayag na oras.
+Tandaan na an paggagamit kan nabigasyong kilyawan makakapaglapat giraray kaining kolum.',
+'mergehistory-go' => 'Ipahayag an mapuwedeng matiripon na mga pagliwat',
+'mergehistory-submit' => 'Tiripona an mga pagbabago',
+'mergehistory-empty' => 'Mayong mga pagbabago na puwedeng mapagtiripon.',
+'mergehistory-success' => '$3 {{PLURAL:$3|pagbabago|mga pagbabago}} sa [[:$1]] matrayumpong napagtiripon na magin [[:$2]].',
+'mergehistory-fail' => 'Dae tabi makayanan na makapaghimo nin historiyang pagtiripon, tabi pakihiling giraray an pahina asin parametro kan oras.',
+'mergehistory-no-source' => 'Gikanang pahina $1 bakong eksistido.',
+'mergehistory-no-destination' => 'Destinasyong pahina $1 bakong eksistido.',
+'mergehistory-invalid-source' => 'Gikanang pahina kaipuhan magin saro na balidong titulo.',
+'mergehistory-invalid-destination' => 'Destinasyong pahina kaipuhan magin saro na balidong titulo.',
+'mergehistory-autocomment' => 'Pinagtiripon [[:$1]] na magin [[:$2]]',
+'mergehistory-comment' => 'Pinagtiripon [[:$1]] na magin [[:$2]]: $3',
+'mergehistory-same-destination' => 'Gikanan asin destinasyong mga pahina dae puwedeng magkapareho',
+'mergehistory-reason' => 'Rason:',
 
 # Merge log
+'mergelog' => 'Talaan kan pagtiripon',
+'pagemerge-logentry' => 'pinagtiripon [[$1]] na magin [[$2]] (mga pagbabago sagkod sa $3)',
 'revertmerge' => 'Suwayón',
+'mergelogpagetext' => 'Sa ibaba yaon an sarong listahan kan pinakahuring mga pagtitiripon kan sarong pahinang historiya sagkod sa iba pa.',
 
 # Diffs
-'history-title' => 'Uusipón nin pagpakarháy kan "$1"',
+'history-title' => 'Pagbabagong historiya kan "$1"',
+'difference-title' => 'Pagkalaen sa tahaw nin mga pagbabago kan "$1"',
+'difference-title-multipage' => 'Pagkalaen sa tahaw nin mga pahina sa "$1" asin "$2"',
+'difference-multipage' => '(Pagkalaen sa tahaw kan mga pahina)',
 'lineno' => 'Taytáy $1:',
 'compareselectedversions' => 'Ikomparar an mga piniling bersyon',
+'showhideselectedversions' => 'Ihayag/itago mga piniling pagbabago',
 'editundo' => 'isulít',
-'diff-multi' => '({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} dai ipinahihiling.)',
+'diff-multi' => '({{PLURAL:$1|Saro intermediate na pagbabago|$1 mga intermediate na mga pagbabago}} by {{PLURAL:$2|sarong paragamit|$2 mga paragamit}} dae pinaghahayag)',
+'diff-multi-manyusers' => '({{PLURAL:$1|Sarong intermediate na pagbabago|$1 mga intermediate na mga pagbabago}} na sobra sa $2 {{PLURAL:$2|paragamit|mga paragamit}} dae pinaghahayag)',
 
 # Search results
 'searchresults' => 'Resulta kan paghánap',
 'searchresults-title' => 'Hanápon an resulta para sa "$1"',
 'searchresulttext' => 'Para sa iba pang impormasyon manonongod sa paghanap sa {{SITENAME}}, hilingon tabî an [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => "Hinanap mo an '''[[:$1]]'''",
+'searchsubtitle' => 'Ika naghanap para sa \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|gabos na mga pahina na nagpopoon sa "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|gabos na mga pahina na nakatakod sa "$1"]])',
 'searchsubtitleinvalid' => "Hinanap mo an '''$1'''",
 'toomanymatches' => 'Kadakol-dakol na angay an ipigbalik, probaran an ibang kahaputan',
 'titlematches' => 'Angay an título kan artíkulo',
@@ -810,12 +1143,33 @@ An ibang mga administrador sa ining wiki pwede pang maghiling kan mga nakatagong
 'savedprefs' => 'Itinagama na an mga kabôtan mo.',
 'timezonelegend' => 'Zona nin oras',
 'localtime' => 'Lokal na oras',
-'servertime' => "Oras kan ''server''",
+'timezoneuseserverdefault' => 'Gamita an panugmad sa wiki ($1)',
+'timezoneuseoffset' => 'Iba pa (ihayag an pambawi)',
+'timezoneoffset' => 'Bawia¹:',
+'servertime' => 'Oras kan serbidor:',
 'guesstimezone' => "Bugtakan an ''browser''",
+'timezoneregion-africa' => 'Aprika',
+'timezoneregion-america' => 'Amerika',
+'timezoneregion-antarctica' => 'Antartika',
+'timezoneregion-arctic' => 'Arktik',
+'timezoneregion-asia' => 'Asya',
+'timezoneregion-atlantic' => 'Atlantikong Kadagatan',
+'timezoneregion-australia' => 'Australya',
+'timezoneregion-europe' => 'Europa',
+'timezoneregion-indian' => 'Indiyang Kadagatan',
+'timezoneregion-pacific' => 'Pasipikong Kadagatan',
 'allowemail' => "Togotan an mga ''e''-surat halî sa ibang mga parágamit",
-'defaultns' => 'Maghilíng mûna sa ining mga ngaran-espacio:',
+'prefs-searchoptions' => 'Pagpipilian sa Paghahanap',
+'prefs-namespaces' => 'Pangarang mga espasyo',
+'defaultns' => 'Kun laen maghanap sa laog kaining pangarang mga espasyo:',
 'default' => 'pwestong normal',
 'prefs-files' => 'Mga dokumento',
+'prefs-custom-css' => 'Kustombreng CSS',
+'prefs-custom-js' => 'Kustombreng JavaScript',
+'prefs-common-css-js' => 'Pinagheras na CSS/JavaScript para sa gabos na mga kalapatan:',
+'prefs-reset-intro' => 'Ika makakagamit kaining pahina tanganing ilapat giraray an saimong mga kabotan sa panugmad kan sayt.
+Ini dae tabi matitingkog.',
+'prefs-emailconfirm-label' => 'Kumpirmasyon sa E-koreo',
 'youremail' => 'E-koreo:',
 'username' => 'Pangaran kan parágamit:',
 'uid' => 'ID kan parágamit:',
@@ -833,49 +1187,171 @@ An ibang mga administrador sa ining wiki pwede pang maghiling kan mga nakatagong
 'prefs-help-email' => 'Opsyonal an e-koreo, alagad pwede ka na masosog kan iba sa paagi kan saimong pahina o pahina nin olay na dai kinakaipuhan na ipabisto an identidad mo.',
 'prefs-help-email-required' => 'Kaipuhan an e-koreo.',
 
+# User preference: e-mail validation using jQuery
+'email-address-validity-invalid' => 'Magkaag nin sarong balidong e-koreong address',
+
 # User rights
 'userrights' => 'Pagmaneho kan mga derecho nin paragamit',
 'userrights-lookup-user' => 'Magmaného kan mga grupo nin parágamit',
 'userrights-user-editname' => 'Ilaog an pangaran kan parágamit:',
 'editusergroup' => 'Hirahón an mga Grupo kan Parágamit',
-'editinguser' => "Pighihira an parágamit na '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
+'editinguser' => "Sinasanglian an paragamit na karapatan kan paragamit '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Hirahón an mga grupo kan parágamit',
 'saveusergroups' => 'Itagama an mga Grupo nin Páragamit',
 'userrights-groupsmember' => 'Myembro kan:',
+'userrights-groupsmember-auto' => 'Implisitong miyembro kan:',
+'userrights-groups-help' => 'Ika puwedeng magbago kan mga grupo na kinabalihan kaining paragamit:
+*An natsekan na kahon minapasabot na an paragamit kabali sa grupong yan.
+*An mayong tsek na kahon minapasabot na an paragamit bakong kabali sa grupong yan.
+* A * minapahiwatig na ika dae puwedeng makapaghale kan grupo kun naidagdag mo na ini, or vice versa.',
 'userrights-reason' => 'Rason:',
+'userrights-no-interwiki' => 'Ika mayo tabing permkso na magliwat sa paragamit na karapatan sa ibang wikis.',
+'userrights-nodatabase' => 'An datos-sarayan $1 bakong eksistido o bakong lokal.',
+'userrights-nologin' => 'Ika kaipuhan na [[Special:UserLogin|maglaog ka]] na igwa nin panindog na administrador bago ka makapagtao nin karapatan sa paragamit.',
+'userrights-notallowed' => 'An saimong panindog mayo tabi nin permiso na magdagdag o maghale nin karapatan kan mga paragamit.',
+'userrights-changeable-col' => 'Mga grupo na mapuwede mong baguhon',
+'userrights-unchangeable-col' => 'Mga grupo na dae mo mapuwedeng baguhon',
 
 # Groups
 'group' => 'Grupo:',
+'group-user' => 'Mga Paragamit',
 'group-autoconfirmed' => 'Paragamit na sadiring nagkonpirma',
 'group-bot' => 'Mga bots',
 'group-sysop' => 'Mga sysop',
 'group-bureaucrat' => 'Mga bureaucrat',
+'group-suppress' => 'Mga Tagapagmato',
 'group-all' => '(gabos)',
 
-'group-autoconfirmed-member' => 'Enseguidang nakonpirmar na parágamit',
-'group-sysop-member' => 'Opsys',
-'group-bureaucrat-member' => 'Bureaucrat',
+'group-user-member' => '{{GENDER:$1|paragamit}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|auto-kumpirmadong paragamit}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|administrador}}',
+'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
+'group-suppress-member' => '{{GENDER:$1|tagapagmato}}',
 
+'grouppage-user' => '{{ns:project}}:Mga Paragamit',
 'grouppage-autoconfirmed' => '{{ns:project}}:Mga enseguidang nakonpirmar na parágamit',
 'grouppage-bot' => '{{ns:project}}:Mga bot',
 'grouppage-sysop' => '{{ns:project}}:Mga tagamató',
 'grouppage-bureaucrat' => '{{ns:project}}:Mga bureaucrat',
+'grouppage-suppress' => '{{ns:project}}:Tagapagmato',
+
+# Rights
+'right-read' => 'Magbasa kan mga pahina',
+'right-edit' => 'Liwaton an mga pahina',
+'right-createpage' => 'Muknaon an mga pahina (na bakong mga pahina nin orolayan)',
+'right-createtalk' => 'Muknaon an mga pahinang orolayan',
+'right-createaccount' => 'Muknaon an baguhong mga panindog nin paragamit',
+'right-minoredit' => 'Markahan an mga pinagliwat bilang menor',
+'right-move' => 'Ibalyo an mga pahina',
+'right-move-subpages' => 'Ibalyo an mga pahina kaiba an saindang mga sub-pahina',
+'right-move-rootuserpages' => 'Ibalyo an ugat nin mga pahina kan paragamit',
+'right-movefile' => 'Ibalyo an mga sagunson',
+'right-suppressredirect' => 'Dae tabi magmukna nin paotrong direksyon gikan sa ginikanang mga pahina kunsoarin magbabalyo nin mga pahina',
+'right-upload' => 'Ipagkarga an mga sagunson (file)',
+'right-reupload' => 'Patungan an mga eksistidong mga sagunson',
+'right-reupload-own' => 'Patungan an eksistido nang mga pahina na ipinagkarga sa paagi mo',
+'right-reupload-shared' => 'Salambawan an mga sagunson sa lokal na pinagheras nin repositoryo kan media',
+'right-upload_by_url' => 'Ipagkara an mga sagunson sa sarong URL',
+'right-purge' => 'Purgaha an sarayan kan sayt para sa sarong pahina na daeng kaipo an kumpirmasyon',
+'right-autoconfirmed' => 'Liwaton an semi-protektadong mga pahina',
+'right-bot' => 'Pagtrataron bilang awtomatikong proseso',
+'right-nominornewtalk' => 'Dae gayod nagkaigwa nin menor na pagliwat sa mga pahina nin orolayan minasulpang nin bunyaw kan bagong mga mensahe',
+'right-apihighlimits' => 'Gumamit nin harahalangkaw na sagkodan sa mga kahaputan kan API',
+'right-writeapi' => 'Gamit kan pagsurat sa API',
+'right-delete' => 'Puraon an mga pahina',
+'right-bigdelete' => 'Puraon an mga pahina na igwang darakulang mga historiya',
+'right-deleterevision' => 'Puraon asin dae puraon an espisipikong pagbabago kan mga pahina',
+'right-deletedhistory' => 'Tanawon an pinagpurang mga entradang historiya, na dae kan saindang asosyadong teksto',
+'right-deletedtext' => 'Tanawon an pinagpurang teksto asin mga karibay sa tahaw kan mga pagbabagong pinagpura na',
+'right-browsearchive' => 'Hanapon an pinagpurang mga pahina',
+'right-undelete' => 'Dae puraon an pahina',
+'right-suppressrevision' => 'Hilngon otro asin balikon an mga pagbabagong itinago gikan sa mga administrador',
+'right-suppressionlog' => 'Tanawon an pribadong mga talaan',
+'right-block' => 'Kubkubon an ibang mga paragamit sa pagliliwat',
+'right-blockemail' => 'Kubkubon an paragamit na makapagpadara nin e-koreo',
+'right-hideuser' => 'Kubkubon an pangaran nin paragamit, itago ini sa publiko',
+'right-ipblock-exempt' => 'Sampawan an pangubkob kan IP, awtomatikong-kubkob asin panhalawig na kubkob',
+'right-proxyunbannable' => 'Sampawan an awtomatikong mga kubkob kan mga proksi',
+'right-unblockself' => 'Dae pagkubkubon sinda',
+'right-protect' => 'Ribayan an kurit kan proteksyon asin liwaton an protektadong mga pahina',
+'right-editprotected' => 'Liwaton an protektadong mga pahina (na bakong pinagsasalansan an proteksyon)',
+'right-editinterface' => 'Liwaton an paragamit na olay-panlaog',
+'right-editusercssjs' => 'Liwaton an CSS asin JavaScript na mga sagunson kan ibang mga paragamit',
+'right-editusercss' => 'Liwaton an CSS na mga sagunson kan ibang mga paragamit',
+'right-edituserjs' => 'Liwaton an JavaScript na mga sagunson kan ibang mga paragamit',
+'right-rollback' => 'Hidaling ibalik an mga niliwat kan huring paragamit na nagliwat nin sarong partikular na pahina',
+'right-markbotedits' => 'Markahan an pinagbalik na mga niliwat bilang bot na panliwat',
+'right-noratelimit' => 'Dae magin apektado sa paagi kan rata nin mga sagkodan',
+'right-import' => 'Importaron an mga pahina gikan sa ibang mga wikis',
+'right-importupload' => 'Importaron an mga pahina gikan sa sarong pangarga nin sagunson',
+'right-patrol' => 'Markahan an mga pagliwat kan iba bilang patrolyado',
+'right-autopatrol' => 'Giboha na an saimong sadiring mga pagliwat awtomatikong markado bilang patrolyado',
+'right-patrolmarks' => 'Tanawon an pinakahuring mga pagbabago na markadong patrol',
+'right-unwatchedpages' => 'Tanawon an listahan kan mayong bantay na mga pahina',
+'right-mergehistory' => 'Pagkasararoon an historiya kan mga pahina',
+'right-userrights' => 'Liwaton gabos an karapatan kan mga paragamit',
+'right-userrights-interwiki' => 'Liwaton an karapatan kan mga paragamit kan ibang mga wikis',
+'right-siteadmin' => 'Kandaduhan asin dae pagkandaduhan an datos-sarayan',
+'right-override-export-depth' => 'Eksportaron an mga pahina kabali na an pinagkilyawan na mga pahina sagkod sa rarom na 5',
+'right-sendemail' => 'Magpadara nin e-koreo sa ibang mga paragamit',
+'right-passwordreset' => 'Tanawon an e-koreo kan pagbabago nin sekretong panlaog',
 
 # User rights log
 'rightslog' => 'Usip nin derechos nin paragamit',
 'rightslogtext' => 'Ini an historial kan mga pagbabâgo sa mga derecho nin parágamit.',
 'rightslogentry' => 'Rinibayab an pagkamyembro ni $1 sa $2 sagkod sa $3',
+'rightslogentry-autopromote' => 'dati na awtomatikong pinagpalangkaw gikan sa $2 sagkod $3',
 'rightsnone' => '(mayô)',
 
 # Associated actions - in the sentence "You do not have permission to X"
+'action-read' => 'basaha ining pahina',
 'action-edit' => 'liwatón ining pahina',
+'action-createpage' => 'magmukna nin mga pahina',
+'action-createtalk' => 'Magmukna nin mga pahina sa orolayan',
+'action-createaccount' => 'Muknaon ining panindog kan paragamit',
+'action-minoredit' => 'marakahan ining pagliwat bilang menor',
+'action-move' => 'ibalyo ining pahina',
+'action-move-subpages' => 'ibalyo ining pahina, asin kaiba an mga sub-pahina',
+'action-move-rootuserpages' => 'ibalyo an ugat kan mga pahina nin mga paragamit',
+'action-movefile' => 'ibalyo ining sagunson',
+'action-upload' => 'ikarga ining mga sagunson',
+'action-reupload' => 'sampawan ining eksistidong sagunson',
+'action-reupload-shared' => 'salambawan ining sagunson sa pinagheras na repositoryo',
+'action-upload_by_url' => 'ikarga ining sagunson gikan sa URL',
+'action-writeapi' => 'gamita an panurat na API',
+'action-delete' => 'puraon ining pahina',
+'action-deleterevision' => 'puraon ining pagbabago',
+'action-deletedhistory' => 'tanawon an pinagpurang historiya kaining pahina',
+'action-browsearchive' => 'hanapon an pinagpurang mga pahina',
+'action-undelete' => 'dae pagpuraon ining pahina',
+'action-suppressrevision' => 'hilngon otro asin ibalik ining pinagtagong pagbabago',
+'action-suppressionlog' => 'tanawon ining pribadong talaan',
+'action-block' => 'kubkubon ining paragamit gikan sa pagliliwat',
+'action-protect' => 'ribayan an kurit nin proteksyon para sa pahinang ini',
+'action-rollback' => 'hidaling ipagbalik an mga pagliwat kan huring paragamit na pinagliwat an sarong partikular na pahina',
+'action-import' => 'importaron ining pahina gikan sa ibang wiki',
+'action-importupload' => 'importaron ining pahina gikan sa sarong ikinargang sagunson',
+'action-patrol' => 'markahan an pagliwat kan iba bilang patrolyado',
+'action-autopatrol' => 'Giboha na an saimong pagliwat markado bilang patrolyado',
+'action-unwatchedpages' => 'tanawon an listahan kan mayong bantay na mga pahina',
+'action-mergehistory' => 'Pagkasararoon an historiya kaining pahina',
+'action-userrights' => 'liwaton gabos na mga karapatan nin paragamit',
+'action-userrights-interwiki' => 'liwaton an paragamit na mga karapatan kan mga paragamit nin ibang wikis',
+'action-siteadmin' => 'ikandado o dae ikandado an datos-sarayan',
+'action-sendemail' => 'magpadara nin mga e-koreo',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|pagbabâgo|mga pagbabâgo}}',
 'recentchanges' => 'Mga nakakaági pa sanáng pagbabàgo',
+'recentchanges-legend' => 'Pinakahuring mga option kan mga pagbabago',
 'recentchanges-summary' => 'Hanapon an mga pinahuring pagbabâgo sa wiki digdi sa páhinang ini.',
 'recentchanges-feed-description' => 'Hanápon an mga pinakahuring pagbabàgo sa wiki sa hungit na ini.',
-'rcnote' => "Mahihiling sa babâ an {{PLURAL:$1| '''1''' pagbabàgo|'''$1''' pagbabàgo}} sa huring {{PLURAL:$2|na aldaw|'''$2''' na aldaw}}, sa $3.",
+'recentchanges-label-newpage' => 'Ining pagliwat nakapagmukna nin sarong baguhon na pahina',
+'recentchanges-label-minor' => 'Ini saro sanang menor na pagliwat',
+'recentchanges-label-bot' => 'Ining pagliwat pinaghimo bilang sarong bot',
+'recentchanges-label-unpatrolled' => 'Ining pagliwat dae pa tabi pinagpatrolyahan',
+'rcnote' => "Yaon sa ibaba iyo {{PLURAL:$1|an '''1''' pagbabago|an mga huring '''$1''' mga pagbabago}} kan nakaaging huring {{PLURAL:$2|aldaw|'''$2''' mga aldaw}}, poon pa kan $5, $4.",
 'rcnotefrom' => "Mahihiling sa babâ an mga pagbabàgo poon kan '''$2''' (hasta '''$1''' ipinapahiling).",
 'rclistfrom' => 'Ipahilíng an mga pagbabàgo poon sa $1',
 'rcshowhideminor' => '$1 saradit na pagligwat',
@@ -892,10 +1368,14 @@ An ibang mga administrador sa ining wiki pwede pang maghiling kan mga nakatagong
 'minoreditletter' => 's',
 'newpageletter' => 'B',
 'boteditletter' => 'b',
-'number_of_watching_users_pageview' => '[$1 nagbabantay na parágamit]',
+'number_of_watching_users_pageview' => '[$1 naka-antabay sa {{PLURAL:$1|paragamit|mga paragamit}}]',
 'rc_categories' => 'Limitado sa mga kategorya (suhayon nin "|")',
 'rc_categories_any' => 'Dawà arín',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte|bytes}} pagtatapos kan pagbabago',
 'newsectionsummary' => '/* $1 */ bàgong seksyon',
+'rc-enhanced-expand' => 'Magpahiling kan mga detalye (minakaipo nin JavaScript)',
+'rc-enhanced-hide' => 'Itago an mga detalye',
+'rc-old-title' => 'orihinal na pinagmukna bilang "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Mga angay na pagbabàgo',
index c64ce26..1f9e446 100644 (file)
@@ -269,17 +269,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Рэдагаваць сэкцыі па правым пстрыку на загалоўку (патрабуе JavaScript)',
 'tog-showtoc' => 'Паказваць зьмест (для старонак з колькасьцю сэкцый болей за 3)',
 'tog-rememberpassword' => 'Запомніць мяне ў гэтым браўзэры (ня больш за $1 {{PLURAL:$1|дзень|дні|дзён}})',
-'tog-watchcreations' => 'Ð\94адаваÑ\86Ñ\8c Ñ\83 Ð¼Ð¾Ð¹ Ñ\81Ñ\8cпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f Ñ\81Ñ\82аÑ\80онкÑ\96, Ñ\8fкÑ\96Ñ\8f Ñ\8f Ð±Ñ\83дÑ\83 Ñ\81Ñ\82ваÑ\80аÑ\86Ñ\8c',
-'tog-watchdefault' => 'Дадаваць у мой сьпіс назіраньня старонкі, якія я буду рэдагаваць',
-'tog-watchmoves' => 'Дадаваць у мой сьпіс назіраньня старонкі, якія я буду пераносіць',
-'tog-watchdeletion' => 'Дадаваць у мой сьпіс назіраньня старонкі, якія я буду выдаляць',
+'tog-watchcreations' => 'Ð\94адаваÑ\86Ñ\8c Ñ\83 Ð¼Ð¾Ð¹ Ñ\81Ñ\8cпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f Ñ\81Ñ\82воÑ\80анÑ\8bÑ\8f Ð¼Ð½Ð¾Ð¹ Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\96 Ð·Ð°Ð³Ñ\80Ñ\83жанÑ\8bÑ\8f Ð¼Ð½Ð¾Ð¹ Ñ\84айлÑ\8b',
+'tog-watchdefault' => 'Дадаваць у мой сьпіс назіраньня старонкі і файлы якія я рэдагаваў',
+'tog-watchmoves' => 'Дадаваць у мой сьпіс назіраньня старонкі і файлы якія я пераносіў',
+'tog-watchdeletion' => 'Дадаваць у мой сьпіс назіраньня старонкі і файлы, якія я выдаляю',
 'tog-minordefault' => 'Па змоўчаньні пазначаць усе зьмены дробнымі',
 'tog-previewontop' => 'Паказваць папярэдні прагляд старонкі над полем рэдагаваньня',
 'tog-previewonfirst' => 'Папярэдні прагляд пры першым рэдагаваньні',
 'tog-nocache' => 'Адключыць кэшаваньне старонак у браўзэры',
-'tog-enotifwatchlistpages' => 'Паведамляць мне праз электронную пошту пра зьмены старонак у маім сьпісе назіраньня',
+'tog-enotifwatchlistpages' => 'Ð\9fаведамлÑ\8fÑ\86Ñ\8c Ð¼Ð½Ðµ Ð¿Ñ\80аз Ñ\8dлекÑ\82Ñ\80оннÑ\83Ñ\8e Ð¿Ð¾Ñ\88Ñ\82Ñ\83 Ð¿Ñ\80а Ð·Ñ\8cменÑ\8b Ñ\81Ñ\82аÑ\80онак Ñ\96 Ñ\84айлаÑ\9e Ñ\83 Ð¼Ð°Ñ\96м Ñ\81Ñ\8cпÑ\96Ñ\81е Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f',
 'tog-enotifusertalkpages' => 'Паведамляць праз электронную пошту пра зьмены маёй старонкі гутарак',
-'tog-enotifminoredits' => 'Паведамляць праз электронную пошту таксама пра дробныя зьмены старонак',
+'tog-enotifminoredits' => 'Паведамляць праз электронную пошту таксама пра дробныя зьмены старонак і файлаў',
 'tog-enotifrevealaddr' => 'Не хаваць мой адрас электроннай пошты ў паведамленьнях',
 'tog-shownumberswatching' => 'Паказваць колькасьць назіральнікаў',
 'tog-oldsig' => 'Цяперашні подпіс:',
@@ -612,6 +612,8 @@ $1',
 'badarticleerror' => 'Гэтае дзеяньне немагчыма выканаць на гэтай старонцы.',
 'cannotdelete' => 'Немагчыма выдаліць старонку альбо файл «$1». Магчыма, яна ўжо выдаленая кімсьці іншым.',
 'cannotdelete-title' => 'Немагчыма выдаліць старонку «$1»',
+'delete-hook-aborted' => 'Выдаленьне скасаванае працэдурай-перахопнікам.
+Тлумачэньняў не было.',
 'badtitle' => 'Няслушная назва',
 'badtitletext' => 'Запытаная назва старонкі няслушная ці пустая, альбо няслушна ўказаная міжмоўная ці інтэрвікі-назва. Яна можа ўтрымліваць сымбалі, якія нельга ўжываць у назвах.',
 'perfcached' => 'Наступныя зьвесткі кэшаваныя і могуць быць састарэлымі. У кэшы {{PLURAL:$1|даступны|даступныя}} ня больш за $1 {{PLURAL:$1|вынік|вынікі|вынікаў}}.',
@@ -3859,6 +3861,8 @@ MediaWiki распаўсюджваецца з надзеяй, што будзе
 'api-error-empty-file' => 'Дасланы Вамі файл быў пусты.',
 'api-error-emptypage' => 'Стварэньне новых пустых старонак забаронена.',
 'api-error-fetchfileerror' => 'Унутраная памылка: падчас атрыманьня файла штосьці здарылася.',
+'api-error-fileexists-forbidden' => 'Файл з назвай «$1» ужо існуе і ня можа быць перазапісаны.',
+'api-error-fileexists-shared-forbidden' => 'Файл з назвай «$1» ужо існуе ў супольным сховішчы файлаў і ня можа быць перазапісаны.',
 'api-error-file-too-large' => 'Дасланы Вамі файл занадта вялікі.',
 'api-error-filename-tooshort' => 'Назва файла занадта кароткая.',
 'api-error-filetype-banned' => 'Гэты тып файла забаронены.',
index 2c994a4..d43f729 100644 (file)
@@ -251,7 +251,7 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Възможност за редактиране на раздел при щракване с десния бутон върху заглавие на раздел (изисква Джаваскрипт)',
 'tog-showtoc' => 'Показване на съдържание (за страници с повече от три раздела)',
 'tog-rememberpassword' => 'Запомяне на паролата ми в този браузър (за не повече от $1 {{PLURAL:$1|ден|дни}})',
-'tog-watchcreations' => 'Добавяне на създадените от мен страници към списъка ми за наблюдение',
+'tog-watchcreations' => 'Ð\94обавÑ\8fне Ð½Ð° Ñ\81Ñ\8aздадениÑ\82е Ð¾Ñ\82 Ð¼ÐµÐ½ Ñ\81Ñ\82Ñ\80аниÑ\86и Ð¸ ÐºÐ°Ñ\87ениÑ\82е Ð¾Ñ\82 Ð¼ÐµÐ½ Ñ\84айлове ÐºÑ\8aм Ñ\81пиÑ\81Ñ\8aка Ð¼Ð¸ Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение',
 'tog-watchdefault' => 'Добавяне на редактираните от мен страници към списъка ми за наблюдение',
 'tog-watchmoves' => 'Добавяне на преместените от мен страници към списъка ми за наблюдение',
 'tog-watchdeletion' => 'Добавяне на изтритите от мен страници към списъка ми за наблюдение',
@@ -261,7 +261,7 @@ $messages = array(
 'tog-nocache' => 'Спиране на складирането на страниците от браузъра',
 'tog-enotifwatchlistpages' => 'Уведомяване по е-пощата при промяна на страница от списъка ми за наблюдение',
 'tog-enotifusertalkpages' => 'Уведомяване по е-пощата при промяна на беседата ми',
-'tog-enotifminoredits' => 'Уведомяване по е-пощата даже при малки промени',
+'tog-enotifminoredits' => 'Уведомяване по е-пощата даже при малки промени на страници или файлове',
 'tog-enotifrevealaddr' => 'Показване на електронния ми адрес в известяващите писма',
 'tog-shownumberswatching' => 'Показване на броя на потребителите, наблюдаващи дадена страница',
 'tog-oldsig' => 'Текущ подпис:',
index f40423a..eec4ffc 100644 (file)
@@ -3627,8 +3627,8 @@ Gambar ditampaiakan dalam risulusi hibak, janis barakas lain dimula lawan prugra
 Situs ngini mangalami kangalihan teknik.',
 'dberr-again' => 'Cuba hadangi babarapa manit wan muat-pulang.',
 'dberr-info' => '(Kada kawa tasambung ka server databasis: $1)',
-'dberr-usegoogle' => 'Pian kawa cuba manggagai lung Google wayah samantara ni.',
-'dberr-outofdate' => 'Catat nang sidin indiks matan isi kami pina kawa kadaluarsa.',
+'dberr-usegoogle' => 'Pian kawa mancuba manggagai lung Google wayah pahadangan ngini.',
+'dberr-outofdate' => 'Catat nang sidin indéks matan isi kami pinanya hudah kadaluarsa.',
 'dberr-cachederror' => 'Ngini adalah sabuah rekap timbuluk tungkaran nang dipinta, wan pinanya kada pahanyarnya.',
 
 # HTML forms
index aeccfb7..982fa9f 100644 (file)
@@ -662,8 +662,8 @@ $2',
 মনে থইস .css বারো .js পাতার নাঙ এতা রূহিবৃত্তির মাতুঙে হুরকা আতর ইকার মেয়েকল অরতাহে, যেসাদে {{ns:user}}:Foo/vector.css; কিন্তু এসাদে চিঙনাঙ নাইব: {{ns:user}}:Foo/Vector.css",
 'updated' => '(আপডেট)',
 'note' => "'''নোট:'''",
-'previewnote' => "'''à¦\8fহান à¦¹à§\81দà§\8dদা à¦\86à¦\97à¦\9aাহান;
-ফারাকহান এপাগাউ ইতু করানি নাইসে!'''",
+'previewnote' => "'''à¦\96িয়াল à¦\95র, à¦\8fহান à¦¹à§\81দà§\8dদা à¦\86à¦\97à¦\9aাহান।'''
+ফারাকহান এপাগাউ ইতু করানি নাইসে!",
 'previewconflict' => 'এরে আগচা এহান পতানির লয়াগত আসে ইকা অহান ইতু করানির পিসে চেইতে কিসারে ইতই অহানর অংতা আহান।',
 'session_fail_preview' => "'''ঙাক্করে দিস! সেশন ডাটা অতা মাঙনায় অতা ইতু নাইসে। কৃপা করিয়া বারো হৎনা কর।
 যদি অহানেউ কাম নাইলে, অহান ইলে তর অ্যাকাউন্টহাত্ত [[Special:UserLogout|লগ আউট]] করিয়া বারো লগ ইন কর।",
@@ -709,6 +709,7 @@ $2',
 
 পাতা এহান তি আরাতা হঙকরতেইতানা কিতা খালকরিয়া চা।
 তর সুবিধারকা পাতা এহানর পুসিসি লগ এহানাত দেনা ইল:",
+'moveddeleted-notice' => 'পাতা এহান থেইকরানি অসে।সূত্র হিসাবেতলে পাতা এহানর থেইকরানির লগ দেনা অইল।',
 'log-fulllog' => 'পুরা লগ চা',
 'edit-gone-missing' => 'পাতাহান আপডেট করানি নুৱারলাং।
 পাতাহান পুস পরসেগা সাত।',
@@ -717,6 +718,9 @@ $2',
 পাতাএহান আগেত্তর আসে।',
 
 # Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''সিঙুইস:''' টেমপ্লেটের ইনক্লুড অংতাহান ডাঙর অসে। টেমপ্লেট কতহান তিলকরানি নুওয়ারতে পারে।",
+'post-expand-template-inclusion-category' => 'যেহাত টেমপ্লেটর ইনক্লুড অংতাহান পাতাহানিত্ত লেমসে',
+'post-expand-template-argument-warning' => "' ' ' সিঙুইস: ' ' ' এরে পাতাহাত তিলসে টেম্পলেট এহার যুক্তি আহান লাম হেলসে। অহানে যুক্তি অহান বেলানি অইল।",
 'post-expand-template-argument-category' => 'পতাহাত পুসিসি মডেলর জর থা পরসেগা',
 'parser-template-loop-warning' => 'মডেলর তরিগ দেখরাং: [[$1]]',
 
@@ -776,6 +780,8 @@ $2',
 'revdelete-unsuppress' => 'সীমাবদ্ধতাহানি নেইকরেদে',
 'revdelete-log' => 'কারণ:',
 'revdel-restore' => 'দৃষ্টিপাত সিলকর',
+'revdel-restore-deleted' => 'পুছিসি সংস্করণহান',
+'revdel-restore-visible' => 'দেহাদেনা একরব সংস্করণহান',
 'pagehist' => 'পাতার ইতিহাসহান',
 'deletedhist' => 'ইতিহাসহান পুস',
 'revdelete-otherreason' => 'আর আর কারণ:',
@@ -812,12 +818,12 @@ $2',
 'mergelogpagetext' => 'তলে হাদি এহানর পাতার ইতিহাসর লগে আরাক পাতার ইতিহাস তিলকরিসি অতার লাতঙগ দেনা ইল।',
 
 # Diffs
-'history-title' => '"$1"-র à¦°à¦¿à¦­à¦¿à¦¸à¦¨ ইতিহাসহান',
+'history-title' => '"$1"-র à¦ªà¦¤à¦¾à¦¨à¦¿à¦° ইতিহাসহান',
 'lineno' => 'লাইন $1:',
 'compareselectedversions' => 'বাসাইল সংস্করণহানি তুলনা কর',
 'showhideselectedversions' => 'বাসিসি রিভিশনহানি দেখাদে/গুর',
 'editundo' => 'আলকর',
-'diff-multi' => '({{PLURAL:$1|হমবুকর রিভিসন আহান|$1 হমবুকর রিভিসন হানি}} দেহাদেনা এহাত না মিহিসে।)',
+'diff-multi' => '({{PLURAL:$2|আতাকুরা আগ |$2 গ আতাকুরা}} সম্পাদন অসে {{PLURAL:$1|হমবুকর রিভিসন আহান|$1 হমবুকর রিভিসন হানি}} দেহাদেনা এহাত না মিহিসে।)',
 
 # Search results
 'searchresults' => 'বিসারলে অতার ফলাফল',
@@ -837,6 +843,7 @@ $2',
 'shown-title' => 'হারি পাতাত $1 {{PLURAL:$1|ফলাফল|ফলাফলহানি}} দেহাদে',
 'viewprevnext' => 'চা ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'বিসারানির অপশনহানি',
+'searchmenu-exists' => "'''উইকি এহাত \"[[:\$1]]\" নাঙে পাতা আহান আসে'''",
 'searchmenu-new' => "'''\"[[:\$1]]\" নাঙর পাতাহান এরে উইকিত হঙকর!'''",
 'searchhelp-url' => 'Help:পাংলাক',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|এরে prefix এতাল আসে পাতাহানি]]',
@@ -851,6 +858,7 @@ $2',
 'searchprofile-everything-tooltip' => 'হাব্বি থাকে বিসারা (য়্যারির পাতাতউ)',
 'searchprofile-advanced-tooltip' => 'নিজর লেপকরা নাঙথাকে বিসারা',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ৱাহি|$2 ৱাহিহানি}})',
+'search-result-category-size' => '{{PLURAL: $1 | 1 সদস্য | $1 সদস্যগি}} ({{PLURAL: $2 | 1 উপবিষয়থাকহানি | $2 হান}}, {{PLURAL: $3 | 1 ফাইল | $3 ফাইল}})',
 'search-result-score' => 'মান্নপা $1%',
 'search-redirect' => '(বারোআলথক $1)',
 'search-section' => '(অনুচ্ছেদ $1)',
@@ -865,6 +873,7 @@ $2',
 'searcheverything-enable' => 'হাব্বি নাঙথাকে বিসারা',
 'searchrelated' => 'সাকেই আসে',
 'searchall' => 'হাব্বি',
+'showingresultsheader' => "'''$4''' র কা {{PLURAL:$5|ফলহান '''$3''' র '''$1'''|ফলহানি '''$3''' র মা '''$1 - $2'''}}",
 'nonefound' => "'''নোট''': অকরাতই হুদ্দা কতহান নাঙরফাম বিসারানি অসিল।
 তর বিসারানিহান ''all:'' ব্যবহার করিয়া হারি কন্টেন্টর মা বিসারানিরকা লেপকর (য়্যারির পাতা, মডেল আদি), নাইলে প্রিফিক্স হিসেবে তর হাদাপাসত নাঙলাম ব্যবহার কর।",
 'search-nonefound' => 'তি বিসারার অহানর লগে মান্নাপাতা নাপারাঙ।',
@@ -932,6 +941,8 @@ $2',
 'email' => 'ইমেইল',
 'prefs-help-realname' => 'আয়ৌপা নাংহান নাদলেউ চলের।
 যদি তি দের অতাইলে তর কামর থাকাত দেনাত সুবিধা অইতই।',
+'prefs-help-email' => 'ই-মেইল ঠিকানা ঐচ্ছিক, তবে খন্তাচাবি পাহুরলে নুৱা করে খন্তাচাবি নেনাত এহান দরকার ইতই।',
+'prefs-help-email-others' => 'তি তর পরিচয় না ফঙ করিয়াউ তর আতাকুরার পাতা বারো য়্যারীর পাতাহানর মাতুঙে আরতারে তর লগে যোগাযোগ করানি দেনা পারর।',
 'prefs-advancedediting' => 'উচ্চতর অপশন',
 'prefs-advancedrc' => 'উচ্চতর অপশন',
 'prefs-advancedrendering' => 'উচ্চতর অপশন',
@@ -983,6 +994,10 @@ $2',
 'recentchanges' => 'হাদিএহান পতাসিতা',
 'recentchanges-legend' => 'হাদি এহানর পতানির পছনহানি',
 'recentchanges-feed-description' => 'ফিড এহানর মা পাতা এহার পতানিহানর গজে মিল্লেং দে।',
+'recentchanges-label-newpage' => 'সম্পাদনা এহানে নুৱা পাতা আহান হঙকরল',
+'recentchanges-label-minor' => 'এহান হুরকা সম্পাদনাহান',
+'recentchanges-label-bot' => 'সম্পাদনা এহান বটগই করিসেহানে',
+'recentchanges-label-unpatrolled' => 'সম্পাদনা এহান এবাকাউ পরীক্ষা করিয়া নাচাসি',
 'rcnote' => "গেলগা {{PLURAL:$2|দিনে|'''$2''' দিনে}} অসে {{PLURAL:$1|'''১'''|'''$1'''}}হান সিলপা তলে দেহানি ইল (যেহানর এপাগার খেন্তাম বারো তারিখ $5, $4)।",
 'rcnotefrom' => "তলে গেলগা '''$2''' ত্ত পতাসিতা দেনা অইল ('''$1''' পেয়া)।",
 'rclistfrom' => 'নুৱাতা পতাসিতা $1 পাতাহানাত্ত চিঙকরিয়া',
@@ -1076,6 +1091,7 @@ $2',
 'filehist' => 'ফাইলর ইতিহাস',
 'filehist-help' => 'দিন/সময়-র গজে যাতিলে ঔ খেন্তাম পেয়া হঙিসে ফাইলগ চ পারতেই।',
 'filehist-deleteall' => 'হাব্বি পুস',
+'filehist-revert' => 'আগর অঙতাত আলকরে যাগা',
 'filehist-current' => 'এপাগা',
 'filehist-datetime' => 'দিন/সময়',
 'filehist-thumb' => 'হুরকাকরে ফটকগি',
@@ -1085,10 +1101,11 @@ $2',
 'filehist-filesize' => 'ফাইলর সাইজহান',
 'filehist-comment' => 'মতহান',
 'filehist-missing' => 'ফাইলগ মাঙুইসে',
-'imagelinks' => 'ফাà¦\87লর à¦\9cà§\81রনহানি',
+'imagelinks' => 'ফাà¦\87লর à¦¬à§\8dযবহার',
 'linkstoimage' => 'এরে ফাইলর লগে {{PLURAL:$1|পাতার মিলাপ|$1 পাতাহানির মিলাপ}} আসে:',
 'nolinkstoimage' => 'ফাইল এগর লগে মিলাপ অসে অসাদে কোন পাতা নেই।',
 'sharedupload' => 'ফাইল এগ $1ত্ত আহিসেগ বারো অন্যান্য প্রকল্পতউ ব্যবহৃত ইতে পারে।',
+'sharedupload-desc-here' => 'এরে ফাইলএগ $1 ত্ত বারো আর প্রকল্পত মিহিতে পারে। এহানর [$2 ফাইলর বিবরণ পাতা]-র গজে তলে হবাকরে মুকিয়া মাতানি ইল।',
 'uploadnewversion-linktext' => 'এরে ফাইল এগর নুৱা সংস্করনহান আপলোড কর',
 'shared-repo-from' => '$1 রাঙতো',
 
@@ -1127,6 +1144,7 @@ $2',
 'statistics-pages' => 'পাতাহানি',
 
 'disambiguations' => 'সন্দই চুমকরের পাতাহানি',
+'disambiguationspage' => 'Template:সন্দই চুম',
 
 'doubleredirects' => 'আলথকে যানা দ্বিমাউ মাতের',
 
@@ -1166,6 +1184,7 @@ $2',
 'deadendpages' => 'যে পাতাহানিত্ত কোন মিলাপ নেই',
 'protectedpages' => 'লুকরিসি পাতাহানি',
 'listusers' => 'আতাকুরার লাতংগ',
+'usercreated' => 'লিঙ্গ: $3 হঙিল $1 তারিখে, খেন্তাম: $2',
 'newpages' => 'নুৱা পাতাহানি',
 'newpages-username' => 'আতাকুরা:',
 'ancientpages' => 'পুরানা পাতাহানি',
@@ -1210,6 +1229,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 # Special:LinkSearch
 'linksearch' => 'বারেদের লগে মিলাপ',
+'linksearch-line' => '$2 ত্ত $1 এরে লিংক এহান আহিসেহান',
 
 # Special:ListUsers
 'listusers-submit' => 'দেহাদে',
@@ -1246,6 +1266,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Watchlist
 'watchlist' => 'মর তালাবি',
 'mywatchlist' => 'মর তালাবি',
+'watchlistfor2' => '$1 ($2)-র কা',
 'addedwatchtext' => "\"<nowiki>\$1</nowiki>\" পাতা এহান তর [[Special:Watchlist|আহির-আরুম তালিকা]]-ত তিলকরানি ইল। পিসেদে এরে পাতা এহান বারো পাতা এহানর লগে সাকেই আসে য়্যারী পাতাত অইতই হারি জাতর পতানি এহানাত তিলকরানি অইতই। অতাবাদেউ [[Special:RecentChanges|হাদি এহানর পতানিহানি]]-ত পাতা এহানরে '''গাঢ়করা''' মেয়েকে দেহা দেনা অইতই যাতে তি নুঙিকরে পাতা এহান চিনে পারবেতা।
 
 পিসেদে তি পাতা এহানরে থেইকরানি মনেইলে \"আহির-আরুমেত্ত থেইকরেদে\" ট্যাবগত ক্লিক করিস৷",
@@ -1271,6 +1292,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'confirmdeletetext' => 'তি যে পাতাহান পুসানি লেপুইসত অহানর লগে ইতিহাসহানউ পুসতই।
 তি লেপকর যে তি এহান করতেই বুলিয়া, বারো তি এহানর পিসহান হারপাসত লগে [[{{MediaWiki:Policy-url}}|পলিসিহান]] ইলয়া তি কামএহান করানিত লেপুইসত।',
 'actioncomplete' => 'কামহান লমিল।',
+'actionfailed' => 'অ্যাকশনহান পুরা নাইল',
 'deletedtext' => '"$1" পুসানি অইল।
 চা $2 এহার বারে আগে আসে পুসানির লাতংগ।',
 'dellogpage' => 'পুসিসিতার লাতংগ',
@@ -1328,6 +1350,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Undelete
 'undeletebtn' => 'বারোইতুকর',
 'undeletelink' => 'চা/আলথক কর',
+'undeleteviewlink' => 'দেহাদে',
 
 # Namespace form on various pages
 'namespace' => 'নাঙরথাক:',
@@ -1346,9 +1369,12 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'sp-contributions-newbies' => 'হুদ্দা নুৱা একাউন্টর অবদানহানি দেহাদে',
 'sp-contributions-newbies-sub' => 'নুৱা একাউন্টর কা',
 'sp-contributions-blocklog' => 'থেপকরিসি লগ',
+'sp-contributions-uploads' => 'আপলোডহানি',
+'sp-contributions-logs' => 'লগহানি',
 'sp-contributions-talk' => 'অতারা',
 'sp-contributions-search' => 'অবদানহানি বিসারা',
 'sp-contributions-username' => 'আইপি (IP) ঠিকানা নাইলে আতাকুরার নাঙহান:',
+'sp-contributions-toponly' => 'হুদ্দা অরে সম্পাদনা অহানি দেহাদে যেহানি হাদি এহানর সংস্করণহাত তিলসে।',
 'sp-contributions-submit' => 'বিসারা',
 
 # What links here
@@ -1359,13 +1385,14 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'nolinkshere' => "পাতা '''[[:$1]]'''হানাত কোন মিলাপ নেই।",
 'isredirect' => 'বুলনদের পাতা',
 'istemplate' => 'বরানি',
-'isimage' => 'à¦\9bবি মিলাপ',
+'isimage' => 'ফাà¦\87ল মিলাপ',
 'whatlinkshere-prev' => '{{PLURAL:$1|পিসেদে|পিসেদে $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|থাংনা|থাংনা $1}}',
 'whatlinkshere-links' => '← মিলাপহানি',
 'whatlinkshere-hideredirs' => '$1 হানি আলথকর দিশা দেহার',
 'whatlinkshere-hidetrans' => '$1 ট্রান্সক্লুশন',
 'whatlinkshere-hidelinks' => '$1 মিলাপহানি',
+'whatlinkshere-hideimages' => '$1 ছবি মিলাপ',
 'whatlinkshere-filters' => 'চালুনী',
 
 # Block/unblock
@@ -1399,7 +1426,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'badipaddress' => 'আইপি ঠিকানাহান গ্রহনযোগ্যনাইসে',
 'blockipsuccesssub' => 'থেপকরানিহান চুমিল',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] রে থেপকরিয়া থসি <br />থেপকরানিহান খাল করানি থকিলে,[[Special:BlockList| থেপকরিয়া থসি আইপি ঠিকানার তালিকাহান]] চা।',
-'ipblocklist' => 'থà§\87পà¦\95রিয়া à¦¥à¦¸à¦¿ à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¬à¦¾à¦°à§\8b à¦\86তাà¦\95à§\81রার à¦²à¦¾à¦¤à¦\99গি',
+'ipblocklist' => 'থà§\87পà¦\95রিয়া à¦¥à¦¸à¦¿ à¦\86তাà¦\95à§\81রাগি',
 'blocklink' => 'থেপ কর',
 'unblocklink' => 'ব্লকনাকরি',
 'change-blocklink' => 'ব্লক সিলকর',
@@ -1454,6 +1481,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Namespace 8 related
 'allmessages' => 'সিস্টেমর পৌহানি',
 'allmessagesname' => 'নাং',
+'allmessagesdefault' => 'আদ্যকার টেক্সট',
 'allmessagescurrent' => 'হাদি এহানর ৱাহি',
 'allmessagestext' => 'তলে মিডিয়াউইকির নাঙরথাকে পানা একরের সিস্টেম পৌহানির তালিকাহান দেনা ইল।
 কৃপা করিয়া [//www.mediawiki.org/wiki/Localisation মিডিয়াউইকি অনুবাদর হেইচা পাতাত] বারো [//translatewiki.net translatewiki.net] মিডিয়াউইকি অনুবাদ করানির কা যানা পারর।',
@@ -1535,6 +1563,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'tooltip-rollback' => '"রোলব্যাক" এরে পাতার লমিল পতাকুরার পতানিত ক্লিক আহাত আলথক নেনারকা',
 'tooltip-undo' => '"আলথক" এর পতানিহানরে আগর জাগাত নিতইগা বারো আগচা সহকারে পতানির ফরমহান নিকুলতই।
 এহান পতানির সারাংশত কারণহান তিলকরানির সুযোগ দিতই।',
+'tooltip-summary' => 'হুরকাকরে সারাংশহান মাতেদে',
 
 # Attribution
 'anonymous' => '{{SITENAME}}র বেনাঙর {{PLURAL:$1|আতাকুরা|আতাকুরাগি}}',
@@ -1572,7 +1601,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'metadata-help' => 'ফাইল এগত আরাকউ হেলপা পৌ খানি তিলুইসে, মনে অরতা ডিজিটাল ক্যামেরাগত্ত নাইলে স্ক্যানারহাত্ত হমাসে। যদি ফাইল এগ মুল অংতাত্ত পতিয়া থার অতা ইলে খানি মানি পৌ না তিলুতে পারে।',
 'metadata-expand' => 'আরাকউ সালকরিসি পৌ চা',
 'metadata-collapse' => 'সালকরিসি পৌ ঝিপা',
-'metadata-fields' => 'এরে পৌ এহান তিলসে EXIF মেটাপৌ অতা ছবির পাতাত দেখাদেনা ইতই, যেপাগা হেলপা উপাত্ত সারণি অতা জিপানি ইতই। হের ক্ষেত্রহানি স্বাভাবিক অবস্থাত জিপিয়া থাইতই।
+'metadata-fields' => 'এরে পৌ এহান তিলসে ছবি মেটাপৌ অতা ছবির পাতাত দেখাদেনা ইতই, যেপাগা হেলপা উপাত্ত সারণি অতা জিপানি ইতই। হের ক্ষেত্রহানি স্বাভাবিক অবস্থাত জিপিয়া থাইতই।
 * make
 * model
 * datetimeoriginal
@@ -1641,6 +1670,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'watchlisttools-edit' => 'তর তালাবির পাতা চা বারো পতা',
 'watchlisttools-raw' => 'পেরকা তালাবির পাতা পতা',
 
+# Core parser functions
+'duplicate-defaultsort' => '\' \' \' সিঙুইস: \' \' \'  ডিফল্ট হাজানির কিহানি "$2" আগর ডিফল্ট হাজানির কিহানিরে "$1" উচিত নাকরের।',
+
 # Special:Version
 'version' => 'সংস্করন',
 'version-specialpages' => 'বিশেষ পাতাহানি',
@@ -1666,6 +1698,9 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:BlankPage
 'blankpage' => 'হুদালা পাতাহান',
 
+# External image whitelist
+'external_image_whitelist' => '  #লাইন এহান ঠিক যেসাদে আসে<প্রাক> অসাদে থ<pre> #রেগুলার এক্সপ্রেশনর টুমা তলে (হুদ্দা টুমা / / হমবুকে যেহান যারগা) বহা#এহানি এক্সটার্নাল (hotlinked) ছবির URL-র লগে মিল করানি অইতই#যেতা মিলতই, ছবি হিসাবে দেহাদেনা অইতই, নাইলে হুদ্দা ছবির লিংক দেহানি অইতই#যে লাইন হানর পয়লা  # আসে অরে লাইনহানি মন্তব্যহানি হিসাবে ব্যবহার করানি অসে#এহান কেস-অসংবেদী#এহার রেখার গজে regex টুমা বহা। এরে লাইন এহান ঠিক যেসাদে আসে অসাদে থ।</pre>',
+
 # Special:Tags
 'tag-filter' => '[[Special:Tags|ট্যাগ]] সাকানি:',
 'tag-filter-submit' => 'সাকানি',
index 89e6163..ce988d8 100644 (file)
@@ -193,15 +193,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Kemmañ ur rann dre glikañ a-zehou<br /> war titl ar rann',
 'tog-showtoc' => 'Diskouez an daolenn<br /> (evit ar pennadoù zo ouzhpenn 3 rann enno)',
 'tog-rememberpassword' => "Derc'hel soñj eus ma ger-tremen war an urzhiataer-mañ (evit $1 devezh{{PLURAL:$1||}} d'ar muiañ)",
-'tog-watchcreations' => 'Evezhiañ ar pajennoù krouet ganin',
-'tog-watchdefault' => 'Evezhiañ ar pennadoù savet pe kemmet ganin',
-'tog-watchmoves' => "Ouzhpennañ da'm roll evezhiañ ar pajennoù adanvet ganin",
-'tog-watchdeletion' => "Ouzhpennañ da'm roll evezhiañ ar pajennoù diverket ganin",
+'tog-watchcreations' => "Ouzhpennañ ar pajennoù krouet ganin da'm roll evezhiañ",
+'tog-watchdefault' => "Ouzhpennañ ar pajennoù kemmet ganin da'm roll evezhiañ",
+'tog-watchmoves' => "Ouzhpennañ ar pajennoù dilec'hiet ganin da'm roll evezhiañ",
+'tog-watchdeletion' => "Ouzhpennañ ar pajennoù diverket ganin da'm roll evezhiañ",
 'tog-minordefault' => "Sellet ouzh ar c'hemmoù degaset ganin<br /> evel kemmoù dister dre ziouer",
 'tog-previewontop' => 'Rakwelet tres ar bajenn a-us ar prenestr skridaozañ',
 'tog-previewonfirst' => 'Rakwelet tres ar bajenn kerkent hag an aozadenn gentañ',
 'tog-nocache' => 'Diweredekaat krubuilh ar pajennoù gant ar merdeer',
-'tog-enotifwatchlistpages' => 'Kas ur postel din pa vez kemmet ur bajenn evezhiet ganin',
+'tog-enotifwatchlistpages' => 'Kas ur postel din pa vez kemmet ur bajenn zo war ma roll evezhiañ',
 'tog-enotifusertalkpages' => 'Kas ur postel din pa vez kemmet ma fajenn gaozeal',
 'tog-enotifminoredits' => 'Kas ur postel din, ha pa vije evit kemenn kemmoù dister',
 'tog-enotifrevealaddr' => "Lakaat ma chomlec'h postel war wel er posteloù kemenn-diwall",
@@ -382,7 +382,7 @@ $messages = array(
 'personaltools' => 'Ostilhoù personel',
 'postcomment' => 'Rann nevez',
 'articlepage' => 'Sellet ouzh ar pennad',
-'talk' => 'Kaozeal',
+'talk' => 'Kaozeadenn',
 'views' => 'Gweladennoù',
 'toolbox' => 'Boest ostilhoù',
 'userpage' => 'Pajenn implijer',
@@ -535,8 +535,11 @@ Kasit keloù d'ur [[Special:ListUsers/sysop|merer]], en ur verkañ dezhañ choml
 'cannotdelete' => 'Dibosupl diverkañ ar bajenn pe ar restr "$1".
 Marteze e o bet diverket gant unan bennak all dija.',
 'cannotdelete-title' => 'N\'haller ket diverkañ ar bajenn "$1"',
+'delete-hook-aborted' => "Nullet ar c'hemmañ gant un astenn.
+Abeg dianav.",
 'badtitle' => 'Titl fall',
-'badtitletext' => "Faziek pe c'houllo eo titl ar bajenn goulennet; pe neuze eo faziek al liamm etreyezhel",
+'badtitletext' => "Faziek pe c'houllo eo titl ar bajenn goulennet; pe neuze eo faziek al liamm etreyezhel pe etrewiki.
+Marteze ez eus ennañ arouezennoù n'haller ket degemer en titloù.",
 'perfcached' => "Krubuilhet eo ar roadennoù da-heul ha marteze n'int ket bet hizivaet. D'ar muiañ e c'haller kaout {{PLURAL:$1|un disoc'h|$1 disoc'h}} er grubuilh.",
 'perfcachedts' => "Krubuilhet eo ar roadennoù da-heul hag hizivaet int bet da ziwezhañ d'an $1. D'ar muiañ e c'haller kaout {{PLURAL:$4|un disoc'h|$4 disoc'h}} er grubuilh.",
 'querypage-no-updates' => 'Diweredekaet eo an hizivaat evit ar bajenn-mañ. Evit poent ne vo ket nevesaet ar roadennoù amañ.',
@@ -566,6 +569,8 @@ Setu amañ perak ''$2''.",
 "\'\'$3\'\'" eo an abeg roet gant ar merour en deus prennet anezhi.',
 'invalidtitle-knownnamespace' => 'Titl direizh gant an esaouenn anv "$2" hag an destenn "$3"',
 'invalidtitle-unknownnamespace' => 'Titl direizh gant an niverenn esaouenn anv $1 hag an destenn "$2" dianav',
+'exception-nologin' => "N'oc'h ket kevreet",
+'exception-nologin-text' => "Ar bajenn-mañ pe an ober-mañ a c'houlenn e vefec'h kevreet er wiki-mañ.",
 
 # Virus scanner
 'virus-badscanner' => "Kefluniadur fall : skanner viruzoù dianav : ''$1''",
@@ -972,7 +977,7 @@ An abeg roet gant $3 zo ''$2''",
 'nextrevision' => "Stumm war-lerc'h →",
 'currentrevisionlink' => 'Gwelet ar stumm red',
 'cur' => 'red',
-'next' => "War-lerc'h",
+'next' => "war-lerc'h",
 'last' => 'kent',
 'page_first' => 'kentañ',
 'page_last' => 'diwezhañ',
@@ -1610,7 +1615,7 @@ Mar fell deoc'h enporzhiañ ho restr memes tra, kit war ho kiz ha grit gant un a
 Mar fell deoc'h enporzhiañ ar restr-mañ da vat, kit war ho kiz hag enporzhiit anezhi adarre dindan un anv all. [[File:$1|thumb|center|$1]]",
 'file-exists-duplicate' => 'Un eil eus ar {{PLURAL:$1|restr|restroù}} da-heul eo ar restr-mañ :',
 'file-deleted-duplicate' => "Diverket ez eus bet c'hoazh ur restr heñvel-poch ouzh ar restr-mañ ([[:$1]]). Gwelloc'h e vefe deoc'h teuler ur sell war istor diverkadenn ar bajenn-se a-raok hec'h enporzhiañ en-dro.",
-'uploadwarning' => 'Diwallit!',
+'uploadwarning' => 'Kemenn diwall en ur ezporzhiañ',
 'uploadwarning-text' => 'Cheñchit deskrivadur ar restr a-is ha klaskit en-dro.',
 'savefile' => 'Enrollañ ar restr',
 'uploadedimage' => '"[[$1]]" enporzhiet',
@@ -1949,7 +1954,7 @@ $1 {{PLURAL:$1|rummad|rummad}}',
 'unusedcategories' => 'Rummadoù dizimplij',
 'unusedimages' => 'Skeudennoù en o-unan',
 'popularpages' => 'Pajennoù sellet ar muiañ',
-'wantedcategories' => 'Rummadoù a vank',
+'wantedcategories' => 'Rummadoù goulennet a vank',
 'wantedpages' => 'Pajennoù goulennet ar muiañ',
 'wantedpages-badtitle' => "Titl direizh er strollad disoc'hoù : $1",
 'wantedfiles' => 'Restroù a vank',
@@ -2042,9 +2047,9 @@ Gallout a rit strishaat ar mod diskwel en ur zibab ar marilh, an anv implijer (d
 
 # Special:Categories
 'categories' => 'Roll ar rummadoù',
-'categoriespagetext' => 'Er {{PLURAL:$1|rummad|rummadoù}}da-heul ez eus pajennoù pe restroù media.
+'categoriespagetext' => 'Er {{PLURAL:$1|rummad|rummadoù}} da-heul ez eus pajennoù pe restroù media.
 Ne ziskouezer ket amañ ar [[Special:UnusedCategories|Rummadoù dizimplij]].
-Gwelet ivez ar [[Special:WantedCategories|rummadoù a vank]].',
+Gwelet ivez ar [[Special:WantedCategories|rummadoù goulennet a vank]].',
 'categoriesfrom' => 'Diskouez ar rummadoù en ur gregiñ gant :',
 'special-categories-sort-count' => 'Urzhiañ dre gont',
 'special-categories-sort-abc' => 'urzh al lizherenneg',
@@ -2162,7 +2167,7 @@ Evit tennañ ar bajenn-mañ a-ziwar ho rollad evezhiañ. klikit war "Paouez da e
 'unwatchthispage' => 'Paouez da evezhiañ',
 'notanarticle' => 'Pennad ebet',
 'notvisiblerev' => 'Stumm diverket',
-'watchnochange' => "Pajenn ebet eus ar re evezhiet ganeoc'h n'eo bet kemmet e-pad ar prantad spisaet",
+'watchnochange' => "N'ez eus elfenn ebet eus ar re evezhiet ganeoc'h a zo bet kemmet e-pad ar prantad spisaet",
 'watchlist-details' => "Lakaet hoc'h eus {{PLURAL:$1|$1 bajenn|$1 pajenn}} dindan evezh, anez kontañ ar pajennoù kaozeal.",
 'wlheader-enotif' => "* War enaou emañ ar c'has posteloù.",
 'wlheader-showupdated' => "* E '''tev''' emañ merket ar pajennoù bet kemmet abaoe ar wezh ziwezhañ hoc'h eus sellet outo",
@@ -2480,11 +2485,8 @@ Roit a-is an abeg resis (o verkañ, da skouer, roll ar pajennoù bet graet gaou
 'ipb-confirm' => 'Kadarnaat ar stankadenn',
 'badipaddress' => "Kamm eo ar chomlec'h IP.",
 'blockipsuccesssub' => 'Stankadenn deuet da benn vat',
-'blockipsuccesstext' => 'Stanket eo bet chomlec\'h IP "$1".
-<br />Gallout a rit sellet ouzh ar [[Special:BlockList|bajenn-mañ]] evit gwelet roll ar chomlec\'hioù IP stanket.
-
-Stanket eo bet [[Special:Contributions/$1|$1]].<br />
-Sellit ouzh [[Special:BlockList|roll ar chomlec\'hioù IP ha kontoù stanket]] evit gwiriañ ar stankadennoù.',
+'blockipsuccesstext' => "Stanket eo bet [[Special:Contributions/$1|$1]].<br />
+Sellit ouzh [[Special:BlockList|roll ar chomlec'hioù IP ha kontoù stanket]] evit gwiriañ ar stankadennoù.",
 'ipb-blockingself' => "Emaoc'h war-nes stankañ ac'hanoc'h hoc'h-unan ! Ha sur oc'h eo se a fell deoc'h ober ?",
 'ipb-confirmhideuser' => 'Emaoc\'h war-nes stankañ un implijer ha gweredekaet hoc\'h eus "kuzhat an implijer". Diverkañ a ra an dra-se anv an implijer en holl rolloù ha monedoù ar marilh.',
 'ipb-edit-dropdown' => 'Kemmañ an abegoù stankañ',
@@ -2529,7 +2531,7 @@ Sellit ouzh [[Special:BlockList|roll ar chomlec\'hioù IP ha kontoù stanket]] e
 'contribslink' => 'degasadennoù',
 'emaillink' => 'Kas ur postel',
 'autoblocker' => 'Emstanket rak implijet eo bet ho chomlec\'h IP gant "[[User:$1|$1]]" nevez zo.
-Setu aze an abeg(où) m\'eo bet stanket $1 : "$2"',
+Setu aze an abeg(où) m\'eo bet stanket $1 : "\'\'$2\'\'"',
 'blocklogpage' => 'Roll ar stankadennoù',
 'blocklog-showlog' => "Stanket eo bet an implijer-mañ c'hoazh. A-is emañ marilh ar stankadennoù, d'ho titouriñ :",
 'blocklog-showsuppresslog' => "Stanket ha kuzhet eo bet an implijer-mañ c'hoazh. A-is emañ marilh ar diverkadennoù, d'ho titouriñ :",
@@ -2700,8 +2702,8 @@ Mard eo se e c'hallit ivez implijout ul liamm a seurt gant [[{{#Special:Export}}
 # Namespace 8 related
 'allmessages' => 'Roll kemennoù ar reizhiad',
 'allmessagesname' => 'Anv',
-'allmessagesdefault' => 'Testenn dre ziouer',
-'allmessagescurrent' => 'Testenn zo bremañ',
+'allmessagesdefault' => 'Kemennadenn dre ziouer',
+'allmessagescurrent' => 'Kemennadenn zo bremañ',
 'allmessagestext' => "Setu roll ar c'hemennadennoù reizhiad a c'haller kaout en esaouennoù anv MediaWiki.
 Kit da welet [//www.mediawiki.org/wiki/Localisation Lec'heladur MediaWiki] ha [//translatewiki.net translatewiki.net] mar fell deoc'h kemer perzh e lec'heladur boutin MediaWiki.",
 'allmessagesnotsupportedDB' => "N'haller ket kaout {{ns:special}}:AllMessages rak diweredekaet eo bet wgUseDatabaseMessages.",
@@ -2969,8 +2971,8 @@ $1',
 'filedelete-archive-read-only' => 'N\'hall ket ar servijer web skrivañ war ar c\'havlec\'h dielloù "$1".',
 
 # Browsing diffs
-'previousdiff' => '← Stumm kent',
-'nextdiff' => "Stumm nevesoc'h →",
+'previousdiff' => '← Kemm kent',
+'nextdiff' => "Kemm nevesoc'h →",
 
 # Media information
 'mediawarning' => "'''Diwallit :''' Kodoù siek a c'hall bezañ er seurt restr-mañ.
@@ -3807,6 +3809,8 @@ A-hend-all e c'hallit ober gant ar furmskrid eeunaet dindan. Ouzhpennet e vo hoc
 'api-error-empty-file' => "Ar restr hoc'h eus roet a oa goullo.",
 'api-error-emptypage' => "N'eo ket aotreet krouiñ pajennoù goullo.",
 'api-error-fetchfileerror' => 'Fazi diabarzh : aet ez eus un dra bennak a-dreuz en ur glask adtapout ar restr.',
+'api-error-fileexists-forbidden' => 'Bez\' ez eus c\'hoazh eus ur restr anvet "$1" ha n\'hall ket bezañ friket.',
+'api-error-fileexists-shared-forbidden' => "Bez' ez eus c'hoazh eus ur restr anvet \"\$1\" er c'havlec'h kenrannañ restroù ha n'hall ket bezañ friket anezhi.",
 'api-error-file-too-large' => "Ar restr hoc'h eus roet a oa re vras.",
 'api-error-filename-tooshort' => 'Re verr eo anv ar restr.',
 'api-error-filetype-banned' => 'Difennet eo ar seurt restroù',
index 3b2852c..4d25907 100644 (file)
@@ -207,8 +207,8 @@ $messages = array(
 'tog-editsectiononrightclick' => "Habilita l'edició per seccions en clicar amb el botó dret sobre els títols de les seccions (cal JavaScript)",
 'tog-showtoc' => 'Mostra la taula de continguts (per pàgines amb més de 3 seccions)',
 'tog-rememberpassword' => 'Recorda la sessió al navegador (per un màxim de {{PLURAL:$1|dia|dies}})',
-'tog-watchcreations' => 'Vigila les pàgines que he creat',
-'tog-watchdefault' => 'Afegeix les pàgines que edito a la meua llista de seguiment',
+'tog-watchcreations' => 'Afegeix les pàgines que vagi creant a la llista de seguiment',
+'tog-watchdefault' => 'Afegeix les pàgines que vagi creant a la llista de seguiment',
 'tog-watchmoves' => 'Afegeix les pàgines que reanomeni a la llista de seguiment',
 'tog-watchdeletion' => 'Afegeix les pàgines que elimini a la llista de seguiment',
 'tog-minordefault' => 'Marca totes les contribucions com a edicions menors per defecte',
@@ -550,6 +550,8 @@ Aviseu-ho llavors a un [[Special:ListUsers/sysop|administrador]], deixant-li cla
 'cannotdelete' => "No s'ha pogut esborrar la pàgina o fitxer «$1».
 Potser ja ha estat esborrat per algú altre.",
 'cannotdelete-title' => 'No es pot suprimir la pàgina " $1 "',
+'delete-hook-aborted' => 'Un «hook» ha interromput la supressió.
+No ha donat cap explicació.',
 'badtitle' => 'El títol no és correcte',
 'badtitletext' => 'El títol de la pàgina que heu introduït no és correcte, és en blanc o conté un enllaç trencat amb un altre projecte. També podria contenir algun caràcter no acceptat als títols de pàgina.',
 'perfcached' => "Les dades següents es troben a la memòria cau i podrien no estar al dia. Hi ha un màxim {{PLURAL:$1|d'un resultat|de $1 resultats}} disponibles a la memòria cau.",
@@ -580,6 +582,8 @@ Els seus motius han estat: «''$2''».",
 L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
 'invalidtitle-knownnamespace' => "El títol amb l'espai de noms «$2» i text «$3» no és vàlid",
 'invalidtitle-unknownnamespace' => 'Títol no vàlid amb espai de noms desconegut de número «$1» i text «$2»',
+'exception-nologin' => 'No has iniciat sessió',
+'exception-nologin-text' => 'Aquesta pàgina o acció requereix que iniciïs sessió a aquest wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Mala configuració: antivirus desconegut: ''$1''",
@@ -2046,7 +2050,7 @@ Vegeu també [[Special:WantedCategories|les categories soŀlicitades]].",
 'sp-deletedcontributions-contribs' => 'contribucions',
 
 # Special:LinkSearch
-'linksearch' => "Recerca d'enllaços externs",
+'linksearch' => "Cerca d'enllaços externs",
 'linksearch-pat' => 'Patró de cerca:',
 'linksearch-ns' => 'Espai de noms:',
 'linksearch-ok' => 'Cerca',
@@ -3765,6 +3769,8 @@ Altrament, podeu fer servir un senzill formulari a continuació. El vostre comen
 'api-error-empty-file' => 'El fitxer que heu tramès està buit.',
 'api-error-emptypage' => 'No es permet la creació de pàgines noves en blanc.',
 'api-error-fetchfileerror' => 'Error intern: quelcom no ha funcionat en accedir al fitxer.',
+'api-error-fileexists-forbidden' => "Ja existeix un fitxer amb el nom «$1» i no pot sobreescriure's.",
+'api-error-fileexists-shared-forbidden' => "Ja existeix un fitxer amb el nom «$1» al repositori de fitxers compartits i no pot sobreescriure's.",
 'api-error-file-too-large' => 'El fitxer que heu tramès és massa gran.',
 'api-error-filename-tooshort' => 'El nom del fitxer és massa curt.',
 'api-error-filetype-banned' => 'Aquest tipus de fitxer està prohibit.',
index cb6fdff..70eb7e4 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Chechen (Ð\9dохчийн)
+/** Chechen (нохчийн)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index c3abfdc..a03795c 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Crimean Turkish (Cyrillic script) (â\80ªÐ\9aъырымтатарджа (Кирилл)‬)
+/** Crimean Turkish (Cyrillic script) (â\80ªÐºъырымтатарджа (Кирилл)‬)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 84a2ee2..691349f 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Crimean Turkish (Latin script) (‪Qırımtatarca (Latin)‬)
+/** Crimean Turkish (Latin script) (‪qırımtatarca (Latin)‬)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 761bf4a..62e7ed2 100644 (file)
@@ -369,8 +369,8 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Zapnout možnost editace části stránky pomocí kliknutí pravým tlačítkem na nadpisy stránky (JavaScript)',
 'tog-showtoc' => 'Zobrazovat obsah (na stránkách s více než třemi nadpisy)',
 'tog-rememberpassword' => 'Zapamatovat si mé přihlášení v tomto prohlížeči (maximálně $1 {{PLURAL:$1|den|dny|dní}})',
-'tog-watchcreations' => 'Přidávat mnou založené stránky ke sledovaným',
-'tog-watchdefault' => 'Přidávat mnou editované stránky ke sledovaným',
+'tog-watchcreations' => 'Přidávat mnou založené stránky a načtené soubory ke sledovaným',
+'tog-watchdefault' => 'Přidávat mnou editované stránky a soubory ke sledovaným',
 'tog-watchmoves' => 'Přidávat mnou přesouvané stránky mezi sledované',
 'tog-watchdeletion' => 'Přidávat stránky, které smažu, mezi sledované',
 'tog-minordefault' => 'Označit editaci implicitně jako malá editace',
@@ -712,6 +712,7 @@ Pokud toto není váš případ, možná jste nalezli chybu v software. Prosíme
 'cannotdelete' => 'Nebylo možné smazat stránku nebo soubor „$1“.
 Možná už byl(a) smazán(a) někým jiným.',
 'cannotdelete-title' => 'Stránku „$1“ nelze smazat',
+'delete-hook-aborted' => 'Smazání bylo bez bližšího vysvětlení zrušeno přípojným bodem.',
 'badtitle' => 'Neplatný název',
 'badtitletext' => 'Požadovaný název stránky byl neplatný, prázdný nebo obsahoval nesprávnou předponu mezijazykového či interwiki odkazu. Možná obsahoval znaky, které v názvu nejsou dovoleny.',
 'perfcached' => 'Následující data jsou z cache a nemusí být plně aktuální. Cache může obsahovat maximálně {{PLURAL:$1|jeden výsledek|$1 výsledky|$1 výsledků}}.',
@@ -1097,7 +1098,7 @@ Níže vidíte soupis přesunů a smazání této stránky:",
 'moveddeleted-notice' => 'Tato stránka byla smazána.
 Podrobnosti si můžete prohlédnout v níže zobrazeném seznamu provedených přesunů a smazání této stránky.',
 'log-fulllog' => 'Zobrazit všechny záznamy',
-'edit-hook-aborted' => 'Editace byla zrušena přípojným bodem bez bližšího vysvětlení.',
+'edit-hook-aborted' => 'Editace byla bez bližšího vysvětlení zrušena přípojným bodem.',
 'edit-gone-missing' => 'Stránku se nepodařilo aktualizovat.
 Zřejmě byla smazána.',
 'edit-conflict' => 'Editační konflikt.',
@@ -1109,7 +1110,7 @@ Zřejmě byla smazána.',
 'expensive-parserfunction-warning' => 'Varování: Tato stránka obsahuje příliš mnoho volání výkonnostně náročných funkcí parseru.
 
 Povolený limit je $2, v současné chvíli však {{PLURAL:$1|zde jedno volání je|zde jsou $2 volání|zde je $2 volání}}.',
-'expensive-parserfunction-category' => 'Stránky s příliš vysokým počtem volání funkcí parseru.',
+'expensive-parserfunction-category' => 'Stránky s příliš mnoho voláními náročných funkcí parseru',
 'post-expand-template-inclusion-warning' => 'Varování: Objem vkládaných šablon je příliš velký.
 Některé šablony nebudou vloženy.',
 'post-expand-template-inclusion-category' => 'Stránky překračující povolenou velikost vložených šablon',
@@ -4003,6 +4004,8 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'api-error-empty-file' => 'Načtený soubor je prázdný.',
 'api-error-emptypage' => 'Zakládání prázdných stránek není dovoleno.',
 'api-error-fetchfileerror' => 'Vnitřní chyba: došlo k chybě při stahování souboru.',
+'api-error-fileexists-forbidden' => 'Soubor s názvem „$1“ už existuje a nelze ho přepsat.',
+'api-error-fileexists-shared-forbidden' => 'Soubor s názvem „$1“ už existuje ve sdíleném úložišti a nelze ho přepsat.',
 'api-error-file-too-large' => 'Načtený soubor je příliš velký.',
 'api-error-filename-tooshort' => 'Název souboru je příliš krátký.',
 'api-error-filetype-banned' => 'Tento typ souboru je zakázán.',
index 73eed18..283d58d 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Church Slavic (Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ)
+/** Church Slavic (словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 221f124..8edcbe4 100644 (file)
@@ -505,6 +505,8 @@ Rhoddwyd y rheswm hwn - ''$2''.",
 Y rheswm a roddwyd gan y gweinyddwr a roddodd y ffeil dan glo yw "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Teitl annilys o\'r enw "$3" yn y parth "$2"',
 'invalidtitle-unknownnamespace' => 'Teitl annilys ag iddi\'r rhif parth anhysbys $1 a\'r enw "$2"',
+'exception-nologin' => 'Nid ydych wedi mewngofnodi',
+'exception-nologin-text' => "Rhaid mewngofnodi i'r wici er mwyn gweld y dudalen neu gyflawni'r weithred.",
 
 # Virus scanner
 'virus-badscanner' => "Cyfluniad gwael: sganiwr firysau anhysbys: ''$1''",
index 46944a2..7b279c3 100644 (file)
@@ -574,6 +574,8 @@ $2',
 Administratoren, som skrivebeskyttede den, gav følgende begrundelse: "$3".',
 'invalidtitle-knownnamespace' => 'Ugyldig titel med navnerummet "$2" og teksten "$3"',
 'invalidtitle-unknownnamespace' => 'Ugyldig titel med ukendt navnerum nummer $1 og tekst "$2"',
+'exception-nologin' => 'Ikke logget på',
+'exception-nologin-text' => 'Denne side eller handling kræver, at du er logget på denne wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Konfigurationsfejl: ukendt virus-scanner: ''$1''",
index b38021a..6344d99 100644 (file)
@@ -412,24 +412,24 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Einzelne Abschnitte per Rechtsklick bearbeiten (benötigt JavaScript)',
 'tog-showtoc' => 'Anzeige eines Inhaltsverzeichnisses auf Seiten mit mehr als drei Überschriften',
 'tog-rememberpassword' => 'Mit diesem Browser dauerhaft angemeldet bleiben (maximal $1 {{PLURAL:$1|Tag|Tage}})',
-'tog-watchcreations' => 'Selbst erstellte Seiten automatisch beobachten',
-'tog-watchdefault' => 'Selbst geänderte Seiten automatisch beobachten',
-'tog-watchmoves' => 'Selbst verschobene Seiten automatisch beobachten',
-'tog-watchdeletion' => 'Selbst gelöschte Seiten automatisch beobachten',
+'tog-watchcreations' => 'Selbst erstellte Seiten und hochgeladene Dateien automatisch beobachten',
+'tog-watchdefault' => 'Selbst geänderte Seiten und Dateien automatisch beobachten',
+'tog-watchmoves' => 'Selbst verschobene Seiten und Dateien automatisch beobachten',
+'tog-watchdeletion' => 'Selbst gelöschte Seiten und Dateien automatisch beobachten',
 'tog-minordefault' => 'Eigene Änderungen standardmäßig als geringfügig markieren',
 'tog-previewontop' => 'Vorschau oberhalb des Bearbeitungsfensters anzeigen',
 'tog-previewonfirst' => 'Beim ersten Bearbeiten immer die Vorschau anzeigen',
 'tog-nocache' => 'Seitencache des Browsers deaktivieren',
-'tog-enotifwatchlistpages' => 'Bei Änderungen an beobachteten Seiten E-Mails senden',
+'tog-enotifwatchlistpages' => 'Bei Änderungen an beobachteten Seiten oder Dateien E-Mails senden',
 'tog-enotifusertalkpages' => 'Bei Änderungen an meiner Benutzer-Diskussionsseite E-Mails senden',
-'tog-enotifminoredits' => 'Auch bei kleinen Änderungen an Seiten E-Mails senden',
+'tog-enotifminoredits' => 'Auch bei kleinen Änderungen an Seiten und Dateien E-Mails senden',
 'tog-enotifrevealaddr' => 'Meine E-Mail-Adresse in Benachrichtigungs-E-Mails anzeigen',
 'tog-shownumberswatching' => 'Anzahl der beobachtenden Benutzer anzeigen',
 'tog-oldsig' => 'Vorhandene Signatur:',
 'tog-fancysig' => 'Signatur als Wikitext behandeln (ohne automatische Verlinkung)',
 'tog-externaleditor' => 'Externen Editor standardmäßig nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [//www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])',
 'tog-externaldiff' => 'Externes Programm standardmäßig für Versionsunterschiede nutzen (nur für Experten, erfordert spezielle Einstellungen auf dem eigenen Computer. [//www.mediawiki.org/wiki/Manual:External_editors Weitere Informationen hierzu.])',
-'tog-showjumplinks' => '„Wechseln zu“-Links aktivieren',
+'tog-showjumplinks' => '„Wechseln-zu“-Links aktivieren',
 'tog-uselivepreview' => 'Vorschau sofort anzeigen (benötigt JavaScript) (experimentell)',
 'tog-forceeditsummary' => 'Warnen, sofern beim Speichern die Zusammenfassung fehlt',
 'tog-watchlisthideown' => 'Eigene Bearbeitungen in der Beobachtungsliste ausblenden',
@@ -754,6 +754,8 @@ Falls dies nicht  zutrifft, hast du eventuell einen Fehler in der Software gefun
 'cannotdelete' => 'Die Seite oder Datei „$1“ kann nicht gelöscht werden.
 Möglicherweise wurde sie bereits von jemand anderem gelöscht.',
 'cannotdelete-title' => 'Seite „$1“ kann nicht gelöscht werden',
+'delete-hook-aborted' => 'Die Löschung wurde von einer Softwareerweiterung zu MediaWiki verhindert.
+Es ist hierzu keine Erklärung verfügbar.',
 'badtitle' => 'Ungültiger Titel',
 'badtitletext' => 'Der Titel der angeforderten Seite ist ungültig, leer oder ein ungültiger Sprachlink von einem anderen Wiki.',
 'perfcached' => 'Die folgenden Daten stammen aus dem Cache und sind möglicherweise nicht aktuell. Maximal {{PLURAL:$1|ein Ergebnis ist|$1 Ergebnisse sind}} im Cache verfügbar.',
@@ -775,7 +777,7 @@ Bitte versuche es in ein paar Minuten erneut.',
 'editinginterface' => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.
 Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche aus.
 Ziehe bitte im Fall von Übersetzungen in Betracht, diese bei [//translatewiki.net/wiki/Main_Page?setlang=de translatewiki.net], der Lokalisierungsplattform für MediaWiki, durchzuführen.",
-'sqlhidden' => '(SQL-Abfrage versteckt)',
+'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.",
@@ -2154,7 +2156,7 @@ Jede Zeile enthält Links zur ersten und zweiten Weiterleitung sowie dem Ziel de
 'fewestrevisions' => 'Seiten mit den wenigsten Versionen',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|Byte|Bytes}}',
+'nbytes' => '$1 {{PLURAL:$1|Byte|Byte}}',
 'ncategories' => '$1 {{PLURAL:$1|Kategorie|Kategorien}}',
 'nlinks' => '{{PLURAL:$1|1 Link|$1 Links}}',
 'nmembers' => '{{PLURAL:$1|1 Eintrag|$1 Einträge}}',
@@ -4024,6 +4026,8 @@ Anderenfalls kannst du auch das untenstehende einfache Formular nutzen. Dein Kom
 'api-error-empty-file' => 'Die hochgeladene Datei war leer.',
 'api-error-emptypage' => 'Es ist nicht erlaubt, neue leere Seiten zu erstellen.',
 'api-error-fetchfileerror' => 'Interner Fehler: Beim Abrufen der Datei ist ein Fehler aufgetreten.',
+'api-error-fileexists-forbidden' => 'Eine Datei namens „$1“ ist bereits vorhanden und kann nicht überschrieben werden.',
+'api-error-fileexists-shared-forbidden' => 'Eine Datei namens „$1“ ist bereits im gemeinsamen Dateirepositorium vorhanden und kann daher nicht überschrieben werden.',
 'api-error-file-too-large' => 'Die hochgeladene Datei war zu groß.',
 'api-error-filename-tooshort' => 'Der Dateiname ist zu kurz.',
 'api-error-filetype-banned' => 'Diese Dateiendung ist gesperrt.',
index a72d0a1..2fc5505 100644 (file)
@@ -11,6 +11,7 @@
  * @author Aspar
  * @author Belekvor
  * @author Erdemaslancan
+ * @author George Animal
  * @author Kaganer
  * @author Mirzali
  * @author Reedy
@@ -276,7 +277,7 @@ $messages = array(
 '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ê peyniya hera kerdeyan bıxebetne (JavaScript lazımo)',
+'tog-usenewrc' => 'Vurnayışanê peyênanê herakerdeyan bıxebetne (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)',
@@ -580,7 +581,7 @@ $1',
 'nstab-mediawiki' => 'Mesac',
 'nstab-template' => 'Şablon',
 'nstab-help' => 'Pela peşti',
-'nstab-category' => 'Kategori',
+'nstab-category' => 'Kategoriye',
 
 # Main script and global functions
 'nosuchaction' => 'Fealiyeto wınasi çıniyo',
@@ -2107,7 +2108,7 @@ Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gı
 'booksources-invalid-isbn' => 'ISBN raşt nêasena bıewnê çımeyê orjinali, raşt kopya biya nê nêbiyaya?',
 
 # Special:Log
-'specialloguserlabel' => 'Weskedar:',
+'specialloguserlabel' => 'Kerdoğ:',
 'speciallogtitlelabel' => 'Menzil (sernuşte yana karber):',
 'log' => 'Qeydi',
 'all-logs-page' => 'Loganê umum yê hemî',
@@ -3329,7 +3330,7 @@ Eg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.'
 'exif-writer' => 'Nuştekar',
 'exif-languagecode' => 'Zıwan',
 'exif-iimversion' => 'Verqaydê IIM',
-'exif-iimcategory' => 'Kategori',
+'exif-iimcategory' => 'Kategoriye',
 'exif-iimsupplementalcategory' => 'Oleyê Kategoriyan',
 'exif-datetimeexpires' => 'No peyra mekarênê',
 'exif-datetimereleased' => 'Bıroşe',
index d7ce8be..8478b7d 100644 (file)
@@ -174,17 +174,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Wobźěłanje wótstawkow pśez kliknjenje z pšaweju tastu myški zmóžniś (JavaScript)',
 'tog-showtoc' => 'Wopśimjeśe pokazaś, jolic ma bok wěcej nježli 3 nadpisma',
 'tog-rememberpassword' => 'Z toś tym wobglědowakom pśizjawjony wóstaś (za maksimalnje $1 {{PLURAL:$1|źeń|dnja|dny|dnjow}})',
-'tog-watchcreations' => 'Boki, kótarež załožyjom, awtomatiski wobglědowaś',
-'tog-watchdefault' => 'Boki, kótarež změnijom, awtomatiski wobglědowaś',
-'tog-watchmoves' => 'Boki, kótarež som pśesunuł, awtomatiski wobglědowaś',
-'tog-watchdeletion' => 'Boki, kótarež som wulašował, awtomatiski wobglědowaś',
+'tog-watchcreations' => 'Boki, kótarež napórajom a dataje, kótarež nagrawam, wobglědowaś',
+'tog-watchdefault' => 'Boki a dataje , kótarež změnijom, wobglědowaś',
+'tog-watchmoves' => 'Boki a dataje, kótarež som pśesunuł, wobglědowaś',
+'tog-watchdeletion' => 'Boki a dataje, kótarež som wulašował, wobglědowaś',
 'tog-minordefault' => 'Wšykne móje změny ako małe markěrowaś',
 'tog-previewontop' => 'Zespominanje wušej wobźěłowańskego póla pokazaś',
 'tog-previewonfirst' => 'Pśi prědnem wobźěłanju pśecej zespominanje pokazaś',
 'tog-nocache' => 'Cache bokow wobglědowaka znjemóžniś',
-'tog-enotifwatchlistpages' => 'E-mail pósłaś, jolic se wobglědowany bok změnja',
+'tog-enotifwatchlistpages' => 'E-mail pósłaś, jolic se wobglědowany bok abo wobglědowana dataja  změnja',
 'tog-enotifusertalkpages' => 'E-mail pósłaś, změnijo-lic se mój diskusijny bok',
-'tog-enotifminoredits' => 'E-mail teke małych změnow dla pósłaś',
+'tog-enotifminoredits' => 'E-mail teke małych změnow bokow a datajow dla pósłaś',
 'tog-enotifrevealaddr' => 'Móju e-mailowu adresu w e-mailowych pówěźeńkach pokazaś',
 'tog-shownumberswatching' => 'Licbu wobglědujucych wužywarjow pokazaś',
 'tog-oldsig' => 'Eksistěrujuca signatura:',
@@ -515,6 +515,8 @@ Pšosym daj to a pśisłušny URL [[Special:ListUsers/sysop|administratoroju]] k
 'badarticleerror' => 'Akcija njedajo se na toś tom boku wuwjasć.',
 'cannotdelete' => 'Njejo móžno było bok abo dataju "$1" wulašowaś. Snaź jo to južo něchten drugi cynił.',
 'cannotdelete-title' => 'Bok "$1" njedajo se lašowaś',
+'delete-hook-aborted' => 'Wulašowanje pśez kokulu pśetergnjone.
+Njejo žedno wujasnjenje.',
 'badtitle' => 'Njepłaśecy nadpis',
 'badtitletext' => 'Nadpis pominanego boka jo był njepłaśecy, prozny abo njekorektny nadpis, póchadajucy z mjazyrěcnego abo interwikijowego wótkaza. Snaź wopśimjejo jadno abo wěcej znamuškow, kótarež njejsu w nadpisach dowólone.',
 'perfcached' => 'Toś te daty póchadaju z pufrowaka a mógu snaź njeaktualne byś. Maksimalnje {{PLURAL:$1|jaden wuslědk stoj|$1 wuslědka stojtej|$1 wuslědki stoje|$1 wuslědkow stoj}} w pufrowaku k dispoziciji.',
@@ -878,7 +880,7 @@ Pšosym pśespytuj kradosćiwje, lěc jo gódnje z wobźěłowanim boka pokšaco
 Protokol wulašowanjow a pśesunjenjow za toś ten bok so how za informaciju pódawa:",
 'moveddeleted-notice' => 'Toś ten bok jo se wulašował. Protokol wulašowanjow a pśesunjenjow za toś ten bok pódawa se dołojce ako referenca.',
 'log-fulllog' => 'Dopołny protokol se woglědaś',
-'edit-hook-aborted' => 'Wobźěłanje pśez kokulu pśetergnjony.
+'edit-hook-aborted' => 'Wobźěłanje pśez kokulu pśetergnjone.
 Njejo žedno wujasnjenje.',
 'edit-gone-missing' => 'Njejo móžno było bok aktualizěrowaś.
 Zda sem až jo wulašowany.',
@@ -3690,6 +3692,8 @@ Hować móžoš slědujucy jadnory formular wužywaś. Twój komentar pśidajo s
 'api-error-empty-file' => 'Dataja, kótaruž sy nagrał, jo prozna była.',
 'api-error-emptypage' => 'Napóranje nowych, proznych bokow njejo dowólone.',
 'api-error-fetchfileerror' => 'Nutśikowna zmólka: Pśii wobstarowanju dataje jo se něco njeraźiło.',
+'api-error-fileexists-forbidden' => 'Dataja z mjenim "$1" južo eksistěrujo, a njedajo se pśepisaś.',
+'api-error-fileexists-shared-forbidden' => 'Dataja z mjenim "$1" južo eksistěrujo w zgromadnem datajowem repozitoriumje a njedajo se pśepisaś.',
 'api-error-file-too-large' => 'Dataja, kótaruž sy nagrał, jo pśewjelika była.',
 'api-error-filename-tooshort' => 'Datajowe mě jo pśekrotke.',
 'api-error-filetype-banned' => 'Toś ten datajowy typ jo zakazany.',
diff --git a/languages/messages/MessagesEgl.php b/languages/messages/MessagesEgl.php
new file mode 100644 (file)
index 0000000..cb1e053
--- /dev/null
@@ -0,0 +1,696 @@
+<?php
+/** Emiliàn (Emiliàn)
+ *
+ * See MessagesQqq.php for message documentation incl. usage of parameters
+ * To improve a translation please visit http://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ * @author Reder
+ */
+
+$fallback = 'it';
+
+$messages = array(
+# Dates
+'sun' => 'Dum',
+'mon' => 'Lün',
+'tue' => 'Mär',
+'wed' => 'Mer',
+'thu' => 'Giu',
+'fri' => 'Van',
+'sat' => 'Sab',
+'january' => 'Znär',
+'february' => 'Farvär',
+'march' => 'März',
+'april' => 'April',
+'may_long' => "Magg'",
+'june' => 'Giügn',
+'july' => 'Lüi',
+'august' => 'Agust',
+'september' => 'Steimbar',
+'october' => 'Uttubar',
+'november' => 'Nueimbar',
+'december' => 'Dzeimbar',
+'january-gen' => 'Znär',
+'february-gen' => 'Farvär',
+'march-gen' => 'März',
+'april-gen' => 'April',
+'may-gen' => "Magg'",
+'june-gen' => 'Giügn',
+'july-gen' => 'Lüi',
+'august-gen' => 'Agust',
+'september-gen' => 'Steimbar',
+'october-gen' => 'Uttubar',
+'november-gen' => 'Nueimbar',
+'december-gen' => 'Dzeimbar',
+'jan' => 'Znä',
+'feb' => 'Far',
+'mar' => 'Mär',
+'apr' => 'Apr',
+'may' => 'Mag',
+'jun' => 'Giü',
+'jul' => 'Lüi',
+'aug' => 'Agu',
+'sep' => 'Ste',
+'oct' => 'Utt',
+'nov' => 'Nue',
+'dec' => 'Dze',
+
+# Categories related messages
+'hidden-categories' => '{{PLURAL:$1|Categuria nascost|Categuri nascost}}',
+
+'about' => 'Informaziun',
+'cancel' => ' 
+Cancellä',
+'mytalk' => 'Le mé discüssion',
+'navigation' => 'Navigazion',
+'and' => '&#32;e',
+
+# Cologne Blue skin
+'qbfind' => 'Trov',
+'qbedit' => 'Mudifich',
+'qbpageoptions' => "Opzion d'la pàgina",
+'qbmyoptions' => 'Le mé pàgin',
+'qbspecialpages' => 'Pàgin speciäl',
+'faq' => 'Dumand frequeint',
+
+# Vector skin
+'vector-action-delete' => 'Cancellä',
+'vector-action-move' => 'Spusta',
+'vector-action-protect' => "Prutegg'",
+'vector-view-create' => 'Creä',
+'vector-view-edit' => 'Mudifich',
+'vector-view-history' => 'Väda la storia',
+'vector-view-view' => "Legg'",
+'vector-view-viewsource' => 'Vadä la surgìnt',
+'actions' => 'Azion',
+'namespaces' => 'Namespace',
+'variants' => 'Variänt',
+
+'errorpagetitle' => 'Errur',
+'tagline' => 'Da {{SITENAME}}',
+'help' => 'Aiüt',
+'search' => 'Cercä',
+'searchbutton' => 'Cercä',
+'go' => 'Vé',
+'searcharticle' => 'Vé',
+'history' => "Storia d'la pàgina",
+'history_short' => 'Storia',
+'permalink' => 'Link permaneint',
+'print' => 'Stampa',
+'view' => 'Vada',
+'edit' => 'Mudifich',
+'create' => 'Creä',
+'delete' => 'Cancellä',
+'deletethispage' => 'Cancellä custa pàgina ché',
+'undelete_short' => 'Recuperä {{PLURAL:$1|una revision|$1 revision}}',
+'viewdeleted_short' => 'Vadä {{PLURAL:$1|una mudfich cancellät|$1 mudfich cancellät}}',
+'protect' => "Prutegg'",
+'protect_change' => 'Cambia',
+'protectthispage' => "Prutegg' custa pàgina ché",
+'unprotect' => 'Cambiä la prutezion',
+'unprotectthispage' => 'Cambiä la prutezion par custa pàgina ché',
+'newpage' => 'Pàgina növa',
+'talkpage' => 'Pàgina ad discüssion',
+'talkpagelinktext' => 'Discüssion',
+'specialpage' => 'Pàgina speciäl',
+'personaltools' => 'Strümeint parsunäl',
+'postcomment' => 'Sezion növa',
+'articlepage' => 'Vadä la pàgina ad contenüt',
+'talk' => 'Discüssion',
+'views' => 'Visit',
+'toolbox' => 'Strümeint',
+'userpage' => "Vadä la pàgina ad l'uteint",
+'projectpage' => 'Vadä la pàgina dal prugett',
+'imagepage' => 'Vadä la pàgina dal file',
+'mediawikipage' => "Vadä al messagg'",
+'templatepage' => 'Vadä al template',
+'viewhelppage' => "Vadä la pàgina d'aiüt",
+'categorypage' => 'Vadä la categoria',
+'viewtalkpage' => 'Vadä la discüssion',
+'otherlanguages' => 'Ätar leingav',
+'redirectedfrom' => '(Reindirizzameint da <b>$1</b>)',
+'redirectpagesub' => 'Pàgina ad reindirizzameint',
+'lastmodifiedat' => "Ültim mudifich d'la pàgina: $2, $1.",
+'viewcount' => "Custa pàgina ché l'è stata letta {{PLURAL:$1|vüna volta|$1 volte}}.",
+'protectedpage' => 'Pàgina bluccä',
+'jumpto' => 'Andä a',
+'jumptonavigation' => 'navigazion',
+'jumptosearch' => 'cercä',
+'pool-queuefull' => "La cua dal pool l'è piena",
+'pool-errorunknown' => 'Errur mia cugnussü',
+
+# All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
+'aboutsite' => 'Infurmazion su {{SITENAME}}',
+'aboutpage' => 'Project:Infurmäzion',
+'copyright' => "Contenüt suggètt a licinza d'üs $1.",
+'copyrightpage' => '{{ns:project}}:Copyright',
+'currentevents' => 'Eveint curreint',
+'currentevents-url' => 'Project:Eveint curreint',
+'disclaimers' => 'Informazion legäl',
+'disclaimerpage' => 'Project:Avvartenza generäl',
+'edithelp' => 'Libar di spiegazión',
+'edithelppage' => 'Help:Mudifich',
+'helppage' => "Help:Tütt l'argumeint",
+'mainpage' => 'Prima pàgina',
+'mainpage-description' => 'Pàgina principäl',
+'policy-url' => 'Project:Policy',
+'portal' => "Purtäda d'la cumünitä",
+'portal-url' => "Project:Purtäda d'la cumünitä",
+'privacy' => "Legg' l'informazion parsunäl",
+
+'ok' => 'OK',
+'newmessageslink' => "növ messagg'",
+'editsection' => 'cambi',
+'editold' => 'mudifich',
+'viewsourceold' => 'vadä la surgìnt',
+'editlink' => 'mudifich',
+'viewsourcelink' => 'vadä la surgìnt',
+'editsectionhint' => 'Mudifich la seziòn: $1',
+'toc' => 'Indez',
+'showtoc' => 'mustra',
+'hidetoc' => 'nascond',
+'collapsible-collapse' => 'Comprim',
+'collapsible-expand' => 'Espand',
+'thisisdeleted' => 'Vadä o ripristinä $1?',
+'viewdeleted' => 'Vadä $1?',
+'restorelink' => '{{PLURAL:$1|vüna mudfich cancellät|$1 mudfich cancellät}}',
+'feedlinks' => 'Feed:',
+'feed-invalid' => "La mudalitä ad sottoscrizion dal feed l'è mia valid.",
+'feed-unavailable' => 'I feed al son mia dispunibil',
+'site-rss-feed' => 'Emissiòn RSS ad $1',
+'site-atom-feed' => 'Emission Atom ad $1',
+'page-rss-feed' => 'Emissiòn RSS par $1',
+'page-atom-feed' => 'Emission Atom par $1',
+'red-link-title' => "$1 (la pàgina a l'esist mia)",
+'sort-descending' => 'Ordinamient decrescent',
+'sort-ascending' => 'Ordinamient cresceint',
+
+# Short words for each namespace, by default used in the namespace tab in monobook
+'nstab-main' => 'Pàgina',
+'nstab-user' => 'Pàgina uteint',
+'nstab-media' => 'File multimediäl',
+'nstab-special' => 'Pàgina speciäl',
+'nstab-project' => 'Pàgina ad sërvizi',
+'nstab-image' => 'Immàgin',
+'nstab-mediawiki' => "Messagg'",
+'nstab-template' => 'Mudell',
+'nstab-help' => 'Aiüt',
+'nstab-category' => 'Categuria',
+
+# General errors
+'error' => 'Errur',
+'databaseerror' => 'Errur dal database',
+'readonly' => 'Database bluccä',
+'missingarticle-rev' => '(revision n°: $1)',
+'missingarticle-diff' => '(Diff: $1, $2)',
+'internalerror' => 'Errur interiur',
+'internalerror_info' => 'Errur interiur: $1',
+'viewsource' => 'Vadä la surgìnt',
+'viewsource-title' => 'Vadä la surgìnt ad $1',
+
+# Login and logout pages
+'yourname' => 'Nom uteint:',
+'yourpassword' => 'Password:',
+'yourpasswordagain' => 'Ripett la password:',
+'login' => 'Enträ',
+'nav-login-createaccount' => 'Enträ / Creä un account',
+'userlogin' => 'Enträ / Creä un account',
+'userloginnocreate' => 'Enträ',
+'logout' => 'Üscì',
+'userlogout' => 'Üscì',
+'notloggedin' => 'Si mia enträ',
+'nologinlink' => 'Creä un cunt',
+'createaccount' => 'Creä cunt',
+'gotaccountlink' => 'Enträ',
+'createaccountmail' => 'Via e-mail',
+'createaccountreason' => 'Mutiv:',
+'loginerror' => 'Errur ad enträ',
+'accountcreated' => 'Account creä',
+'loginlanguagelabel' => 'Leingua: $1',
+
+# Change password dialog
+'resetpass' => 'Cambiä la password',
+'oldpassword' => "Vecc' password:",
+'newpassword' => 'Növa password:',
+'resetpass-submit-loggedin' => 'Cambiä la password',
+'resetpass-submit-cancel' => 'Cancellä',
+'resetpass-temp-password' => 'Password tempural:',
+
+# Special:PasswordReset
+'passwordreset' => 'Cambiä la password',
+'passwordreset-legend' => 'Cambiä la password',
+'passwordreset-username' => 'Nom uteint:',
+'passwordreset-domain' => 'Dumini:',
+
+# Edit page toolbar
+'bold_sample' => 'Grassètt',
+'italic_sample' => 'Cursìv',
+'media_tip' => 'Cullegameint al file',
+
+# Edit pages
+'summary' => 'Summari:',
+'savearticle' => 'Sälv la pàgina',
+'preview' => 'Vadä prima',
+'showpreview' => "Vadä l'antepeima",
+'showdiff' => 'Vadä li cambiameint',
+'blockedtitle' => 'Uteint bluccä',
+'newarticle' => '(Növ)',
+'note' => "'''Nota:'''",
+'editing' => 'Mudifich ad $1',
+'editingsection' => 'Mudifich ad $1 (sezion)',
+'editingcomment' => 'Mudifich ad $1 (növ sezion)',
+'editconflict' => 'Conflitt ad mudifich: $1',
+'yourtext' => 'Al tò test',
+'yourdiff' => 'Differeinz',
+'template-protected' => '(prutett)',
+'template-semiprotected' => '(mézz-prutett)',
+'log-fulllog' => 'Vadä al log cumplet',
+'edit-conflict' => 'Conflitt ad mudifich.',
+
+# History pages
+'viewpagelogs' => 'Vadä li log ad custa pàgina ché',
+'currentrev' => 'Ültima version',
+'currentrev-asof' => 'Ültima version dle $1',
+'revisionasof' => 'Version dle $1',
+'revision-info' => 'Version dle $1, avtur: $2',
+'previousrevision' => "← Version piö vecc'",
+'nextrevision' => 'Versiòn piö növ →',
+'currentrevisionlink' => 'Ültima version',
+'cur' => 'curr',
+'next' => 'succ',
+'last' => 'prec',
+'page_first' => 'prima',
+'page_last' => 'ültim',
+
+# Revision feed
+'history-feed-item-nocomment' => '$1 al $2',
+
+# Revision deletion
+'rev-delundel' => 'vadä/anscönd',
+'revdelete-radio-set' => 'Sì',
+'revdelete-radio-unset' => 'No',
+'revdelete-reasonotherlist' => 'Ätar ragion',
+
+# Merge log
+'revertmerge' => "Annullä l'ünion",
+
+# Diffs
+'lineno' => 'Riga $1:',
+'editundo' => 'cancellä',
+
+# Search results
+'searchresults' => "Risultät d'la ricerch",
+'searchresults-title' => 'Risultät d\'la ricerch ad "$1"',
+'viewprevnext' => 'Väda ($1 {{int:pipe-separator}} $2) ($3).',
+'searchprofile-articles' => 'Pàgin ad cuntinüt',
+'searchprofile-images' => 'Multimëdi',
+'searchprofile-everything' => 'Tütt',
+'searchprofile-advanced' => 'Avanzät',
+'searchprofile-articles-tooltip' => 'Cercä in $1',
+'searchprofile-project-tooltip' => 'Cercä in $1',
+'searchprofile-images-tooltip' => 'Cercä immàgin',
+'search-result-size' => '$1 ({{PLURAL:$2|1 parola|$2 paroli}})',
+'search-redirect' => '(redirect $1)',
+'search-section' => '(sezion $1)',
+'search-interwiki-caption' => 'Prugett fradel',
+'search-interwiki-default' => 'Risültä da $1:',
+'search-interwiki-more' => '(ätar)',
+'searchall' => 'tütt',
+'powersearch-toggleall' => 'Tütt',
+'powersearch-togglenone' => 'Ansöin',
+
+# Quickbar
+'qbsettings' => 'Quickbar',
+'qbsettings-none' => 'Ansöin',
+'qbsettings-fixedleft' => 'Fiss a sinistar',
+'qbsettings-fixedright' => 'Fiss a destar',
+'qbsettings-floatingleft' => 'Fluttuant a sinistar',
+'qbsettings-floatingright' => 'Fluttuant a destar',
+
+# Preferences page
+'preferences' => 'Prefereinz',
+'mypreferences' => 'Al me prefereinz',
+'prefs-edits' => 'Nümar ad mudifich:',
+'prefsnologin' => 'Si mia enträ',
+'changepassword' => 'Cambiä la password',
+'prefs-skin' => 'Skin',
+'skin-preview' => 'Vadä prima',
+'datedefault' => 'Ansiön prefereinz',
+'prefs-beta' => 'Funzionalitä beta',
+'saveprefs' => 'Salvä',
+'prefs-editing' => 'Mudificä',
+'rows' => 'Righe',
+'searchresultshead' => 'Cercä',
+'timezoneregion-africa' => 'Africa',
+'timezoneregion-america' => 'América',
+'timezoneregion-antarctica' => 'Antartide',
+'timezoneregion-arctic' => 'Artide',
+'timezoneregion-asia' => 'Asia',
+'timezoneregion-atlantic' => 'Ucean Atlantich',
+'timezoneregion-australia' => 'Australia',
+'timezoneregion-europe' => 'Europa',
+'timezoneregion-indian' => 'Ucean Indian',
+'timezoneregion-pacific' => 'Ucean Pacifich',
+'youremail' => 'E-mail:',
+'username' => 'Nom uteint',
+'uid' => 'ID uteint',
+'prefs-memberingroups' => 'Membar {{PLURAL:$1|dal grüpp|dei grüpp}}:',
+'yourrealname' => 'Nom ver:',
+'yourlanguage' => 'Leingua',
+'email' => 'E-mail',
+
+# Groups
+'group' => 'Grüpp:',
+'group-user' => 'Uteint',
+'group-autoconfirmed' => 'Uteint autoconvalidät',
+'group-bot' => 'Bot',
+'group-sysop' => 'Amministradór',
+'group-bureaucrat' => 'Bürocrat',
+'group-suppress' => 'Oversight',
+'group-all' => '(tütt)',
+
+'group-user-member' => '{{GENDER:$1|uteint}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|uteint autoconvalidät}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|amministradór}}',
+'group-bureaucrat-member' => '{{GENDER:$1|bürocrat}}',
+'group-suppress-member' => '{{GENDER:$1|oversight}}',
+
+'grouppage-user' => '{{ns:project}}:Uteint',
+'grouppage-autoconfirmed' => '{{ns:project}}:Uteint autoconvalidät',
+'grouppage-bot' => '{{ns:project}}:Bot',
+'grouppage-sysop' => '{{ns:project}}:Amministradór',
+'grouppage-bureaucrat' => '{{ns:project}}:Bürocrat',
+'grouppage-suppress' => '{{ns:project}}:Oversight',
+
+# Rights
+'right-read' => "Legg' pàgin",
+'right-edit' => 'Mudifich pàgin',
+
+# User rights log
+'rightsnone' => '(ansöin)',
+
+# Associated actions - in the sentence "You do not have permission to X"
+'action-read' => "legg' custa pàgina ché",
+'action-edit' => 'mudifch custa pàgina ché',
+'action-createpage' => 'creä pàgin',
+'action-move' => 'spustä custa pàgina ché',
+'action-movefile' => 'spustä cust file ché',
+'action-upload' => 'caricä cust file ché',
+'action-delete' => 'cancellä custa pàgina ché',
+
+# Recent changes
+'recentchanges' => 'Ültim cambiameint',
+'rcshowhidebots' => '$1 i bot',
+'rcshowhidemine' => '$1 le mé mudifich',
+'diff' => 'diff',
+'hist' => 'cron',
+'hide' => 'Nascond',
+'show' => 'mustra',
+'minoreditletter' => 'm',
+'newpageletter' => 'N',
+'boteditletter' => 'b',
+'number_of_watching_users_pageview' => '[usservä da {{PLURAL:$1|vün uteint|$1 uteint}}]',
+'rc_categories_any' => 'Qualsía',
+
+# Upload
+'upload' => 'Cärga un file',
+
+'license' => 'Licinza:',
+'license-header' => 'Licinza',
+'nolicense' => 'Ansöna licinza seleziunä',
+
+# Special:ListFiles
+'listfiles_date' => 'Data',
+'listfiles_name' => 'Nom',
+'listfiles_user' => 'Uteint',
+
+# File description page
+'file-anchor-link' => 'Immàgin',
+'filehist' => 'Storia dal file',
+'filehist-current' => 'curreint',
+'filehist-datetime' => 'Data/Ura',
+'filehist-thumb' => 'Miniadüra',
+'filehist-user' => 'Uteint',
+'filehist-dimensions' => 'Dimension',
+'filehist-comment' => 'Uggett',
+'imagelinks' => 'Cullegameint al file',
+
+# File deletion
+'filedelete-submit' => 'Cancellä',
+
+# Random page
+'randompage' => 'Una pàgina a cäs',
+
+'brokenredirects-edit' => 'cambi',
+
+# Miscellaneous special pages
+'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
+'newpages' => 'Pàgin növ',
+'move' => 'Spusta',
+
+# Book sources
+'booksources-go' => 'Vé',
+
+# Special:AllPages
+'alphaindexline' => 'da $1 a $2',
+'allpagessubmit' => 'Vé',
+
+# Special:ListUsers
+'listusers-submit' => 'Mustra',
+
+# Special:ListGroupRights
+'listgrouprights-group' => 'Grüpp',
+
+# E-mail user
+'emailfrom' => 'Da:',
+'emailto' => 'A:',
+'emailsubject' => 'Uggett:',
+'emailmessage' => "Messagg'",
+
+# Watchlist
+'mywatchlist' => 'Le mé üsservat speciäl',
+'watchlistfor2' => "Dall'uteint $1 $2",
+'watchnologin' => 'Si mia enträ',
+'watch' => 'Vadä',
+'watchthispage' => 'Vadä custa pàgina ché',
+'unwatch' => "N'la vadär piö",
+
+'changed' => 'mudifegat',
+'created' => 'creät',
+
+# Delete
+'delete-confirm' => 'Cancellä "$1"',
+'delete-legend' => 'Cancellä',
+
+# Rollback
+'rollback_short' => 'Turne indré',
+'rollbacklink' => 'Avé indré la mudifech ad prima',
+'rollbackfailed' => 'Si mia riussì a turnä indré',
+
+# Protect
+'pagesize' => '(byte)',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Mudifich',
+'restriction-move' => 'Spusta',
+'restriction-create' => 'Creä',
+'restriction-upload' => 'Caricä',
+
+# Undelete
+'undeletelink' => 'vada/turna indré',
+'undeleteviewlink' => 'vada',
+'undelete-show-file-submit' => 'Sì',
+
+# Namespace form on various pages
+'namespace' => 'Namespace:',
+'blanknamespace' => '(Principäl)',
+
+# Contributions
+'contributions' => "Contribüdi de l'uteint",
+'contributions-title' => 'Contribüdi ed $1',
+'mycontris' => 'Le mé contribüdi',
+'contribsub2' => 'Par $1 ($2)',
+'uctop' => '(ültim par la pàgin)',
+
+'sp-contributions-submit' => 'Cercä',
+
+# What links here
+'whatlinkshere-page' => 'Pàgina:',
+'whatlinkshere-links' => '← cullegameint',
+
+# Block/unblock
+'block' => "Bluccä l'uteint",
+'unblock' => "Sbluccä l'uteint",
+'blockip' => "Bluccä l'uteint",
+'blockip-title' => "Bluccä l'uteint",
+'blockip-legend' => "Bluccä l'uteint",
+'ipbotheroption' => 'ätar',
+'ipb-unblock-addr' => 'Sbluccä $1',
+'unblockip' => "Sbluccä l'uteint",
+'blocklist' => 'Uteint bluccä',
+'ipblocklist-submit' => 'Cercä',
+'ipblocklist-otherblocks' => 'Ätar {{PLURAL:$1|blocc|blocc}}',
+'blocklink' => 'blocc',
+'unblocklink' => 'sblocc',
+'change-blocklink' => 'cambiä al blocc',
+'contribslink' => 'cuntribüti',
+'unblocklogentry' => "l'à sbluccä $1",
+
+# Move page
+'move-page' => 'Spustameint ad $1',
+'move-page-legend' => 'Spustä la pàgina',
+'movearticle' => 'Spustä la pàgina:',
+'movenologin' => 'Si mia enträ',
+'movepagebtn' => 'Spustä la pàgina',
+'movelogpage' => 'Spustameint',
+'revertmove' => 'Turné indré',
+
+# Export
+'export-submit' => 'Esporta',
+
+# Namespace 8 related
+'allmessages-filter-all' => 'Tütt',
+'allmessages-language' => 'Leingua:',
+'allmessages-filter-submit' => 'Vé',
+
+# Thumbnails
+'thumbnail-more' => 'Allargä',
+
+# Special:Import
+'import-upload-filename' => 'Nom dal file:',
+'import-comment' => 'Uggett:',
+'import-upload' => 'Caricä dat XML',
+
+# Tooltip help for the actions
+'tooltip-pt-logout' => 'Üscì',
+'tooltip-ca-move' => 'Spustä custa pàgina ché',
+'tooltip-search' => 'Cercä deintar ad {{SITENAME}}',
+'tooltip-p-logo' => 'Väda la pàgina principäl',
+'tooltip-n-mainpage' => 'Väda la pàgina principäl',
+'tooltip-n-mainpage-description' => 'Väda la pàgina principäl',
+'tooltip-n-randompage' => 'Fa vëd una pàgina a cäs',
+'tooltip-n-help' => 'Pàgin di aiüt',
+'tooltip-t-upload' => 'Cärag file multimediäl',
+'tooltip-ca-nstab-project' => 'Vadä la pàgina dal prugett',
+'tooltip-ca-nstab-image' => ' 
+Vadä la pàgina dal file',
+'tooltip-ca-nstab-template' => 'Väda la template',
+'tooltip-ca-nstab-help' => "Vadä la pàgina d'aiüt",
+'tooltip-ca-nstab-category' => "Vadä la pàgina d'la categoria",
+'tooltip-save' => 'Salvä li tò cambiameint',
+
+# Attribution
+'others' => 'ätar',
+
+# Info page
+'pageinfo-header-edits' => 'Mudifich',
+'pageinfo-header-views' => 'Visit',
+'pageinfo-subjectpage' => 'Pàgina',
+'pageinfo-talkpage' => 'Pàgina ad discüssion',
+'pageinfo-watchers' => 'Numar ad visitador',
+'pageinfo-edits' => 'Nümar ad mudifich',
+'pageinfo-authors' => 'Nümar ad devers autor',
+'pageinfo-views' => 'Nümar ad visit',
+'pageinfo-viewsperedit' => 'Visit par mudifich',
+
+# Browsing diffs
+'previousdiff' => "← Mudifich piö vecc'",
+'nextdiff' => 'Mudifich piö növa →',
+
+# Media information
+'file-info-gif-looped' => 'ciclich',
+'file-info-png-looped' => 'ciclich',
+
+# Special:NewFiles
+'newimages-legend' => 'Nom dal file',
+'showhidebots' => '($1 i bot)',
+'ilsubmit' => 'Cercä',
+'bydate' => 'par data',
+
+# Video information, used by Language::formatTimePeriod() to format lengths in the above messages
+'ago' => '$1 fa',
+
+# Metadata
+'metadata' => 'Metadat',
+
+# EXIF tags
+'exif-exposuretime-format' => '$1 s ($2)',
+'exif-gpsareainformation' => "Nom d'la zona GPS",
+'exif-gpsdatestamp' => 'Data GPS',
+'exif-source' => 'Font',
+'exif-languagecode' => 'Leingva',
+'exif-iimcategory' => 'Categuria',
+'exif-identifier' => 'Identificativ',
+
+# 'all' in various places, this might be different for inflected languages
+'watchlistall2' => 'tütt',
+'namespacesall' => 'tütt',
+'monthsall' => 'tütt',
+'limitall' => 'tütt',
+
+# Delete conflict
+'recreate' => 'Creä ad növ',
+
+# action=purge
+'confirm_purge_button' => 'OK',
+
+# action=watch/unwatch
+'confirm-watch-button' => 'OK',
+'confirm-unwatch-button' => 'OK',
+
+# Multipage image navigation
+'imgmultigo' => 'Vé!',
+'imgmultigoto' => "Vé in s'la pàgina $1",
+
+# Table pager
+'ascending_abbrev' => 'cresc',
+'descending_abbrev' => 'decresc',
+'table_pager_first' => 'Prima pàgina',
+'table_pager_last' => 'Ültima pàgina',
+'table_pager_limit_submit' => 'Vé',
+
+# Watchlist editor
+'watchlistedit-raw-titles' => 'Titul:',
+
+# Special:Version
+'version' => 'Version',
+'version-specialpages' => 'Pàgin speciäl',
+'version-other' => 'Ätar',
+'version-version' => '(Version $1)',
+'version-license' => 'Licinza',
+'version-poweredby-others' => 'ätar',
+
+# Special:FilePath
+'filepath-page' => 'Immàgin:',
+'filepath-submit' => 'Vé',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch-filename' => 'Nom dal file:',
+'fileduplicatesearch-submit' => 'Cercä',
+
+# Special:SpecialPages
+'specialpages' => 'Pàgin speciäl',
+
+# Special:Tags
+'tags-edit' => 'mudifich',
+
+# Special:ComparePages
+'compare-page1' => 'Pàgina 1',
+'compare-page2' => 'Pàgina 2',
+'compare-rev1' => 'Revisiòn 1',
+'compare-rev2' => 'Revisiòn 2',
+
+# HTML forms
+'htmlform-reset' => 'Turna indré cul la mudifich',
+'htmlform-selectorother-other' => 'Ätar',
+
+# Feedback
+'feedback-subject' => 'Uggett:',
+'feedback-message' => "Messagg':",
+'feedback-cancel' => 'Cancellä',
+
+);
index b8c2405..ffef8a1 100644 (file)
@@ -645,17 +645,17 @@ XHTML id names.
 'tog-editsectiononrightclick' => 'Enable section editing by right clicking on section titles (requires JavaScript)',
 'tog-showtoc'                 => 'Show table of contents (for pages with more than 3 headings)',
 'tog-rememberpassword'        => 'Remember my login on this browser (for a maximum of $1 {{PLURAL:$1|day|days}})',
-'tog-watchcreations'          => 'Add pages I create to my watchlist',
-'tog-watchdefault'            => 'Add pages I edit to my watchlist',
-'tog-watchmoves'              => 'Add pages I move to my watchlist',
-'tog-watchdeletion'           => 'Add pages I delete to my watchlist',
+'tog-watchcreations'          => 'Add pages I create and files I upload to my watchlist',
+'tog-watchdefault'            => 'Add pages and files I edit to my watchlist',
+'tog-watchmoves'              => 'Add pages and files I move to my watchlist',
+'tog-watchdeletion'           => 'Add pages and files I delete to my watchlist',
 'tog-minordefault'            => 'Mark all edits minor by default',
 'tog-previewontop'            => 'Show preview before edit box',
 'tog-previewonfirst'          => 'Show preview on first edit',
 'tog-nocache'                 => 'Disable browser page caching',
-'tog-enotifwatchlistpages'    => 'E-mail me when a page on my watchlist is changed',
+'tog-enotifwatchlistpages'    => 'E-mail me when a page or file on my watchlist is changed',
 'tog-enotifusertalkpages'     => 'E-mail me when my user talk page is changed',
-'tog-enotifminoredits'        => 'E-mail me also for minor edits of pages',
+'tog-enotifminoredits'        => 'E-mail me also for minor edits of pages and files',
 'tog-enotifrevealaddr'        => 'Reveal my e-mail address in notification e-mails',
 'tog-shownumberswatching'     => 'Show the number of watching users',
 'tog-oldsig'                  => 'Existing signature:',
@@ -1008,6 +1008,8 @@ Please report this to an [[Special:ListUsers/sysop|administrator]], making note
 'cannotdelete'         => 'The page or file "$1" could not be deleted.
 It may have already been deleted by someone else.',
 'cannotdelete-title'   => 'Cannot delete page "$1"',
+'delete-hook-aborted'  => 'Deletion aborted by hook.
+It gave no explanation.',
 'badtitle'             => 'Bad title',
 'badtitletext'         => 'The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.
 It may contain one or more characters which cannot be used in titles.',
@@ -3060,7 +3062,7 @@ It may have already been undeleted.',
 $1',
 'undelete-show-file-confirm'   => 'Are you sure you want to view the deleted revision of the file "<nowiki>$1</nowiki>" from $2 at $3?',
 'undelete-show-file-submit'    => 'Yes',
-'undelete-revisionrow'        => "$1 $2 $3 $4 . . $5 $6 $7",
+'undelete-revisionrow'        => "$1 $2 ($3) $4 . . $5 $6 $7",
 
 # Namespace form on various pages
 'namespace'                     => 'Namespace:',
@@ -4637,7 +4639,7 @@ You can also [[Special:EditWatchlist|use the standard editor]].',
 'version-svn-revision'          => '(r$2)', # only translate this message to other languages if you have to change it
 'version-license'               => 'License',
 'version-poweredby-credits'     => "This wiki is powered by '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
-'version-poweredby-others'      => 'others',
+'version-poweredby-others'      => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS others]',
 '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.
@@ -4842,6 +4844,8 @@ Otherwise, you can use the easy form below. Your comment will be added to the pa
 'api-error-emptypage'                     => 'Creating new, empty pages is not allowed.',
 'api-error-fetchfileerror'                => 'Internal error: Something went wrong while fetching the file.',
 'api-error-file-too-large'                => 'The file you submitted was too large.',
+'api-error-fileexists-forbidden'          => 'A file with name "$1" already exists, and cannot be overwritten.',
+'api-error-fileexists-shared-forbidden'   => 'A file with name "$1" already exists in the shared file repository, and cannot be overwritten.',
 'api-error-filename-tooshort'             => 'The filename is too short.',
 'api-error-filetype-banned'               => 'This type of file is banned.',
 'api-error-filetype-missing'              => 'The filename is missing an extension.',
index 1f7eea9..40b1b11 100644 (file)
@@ -1370,6 +1370,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 'prefs-beta' => 'Ecoj de Beta',
 'prefs-datetime' => 'Dato kaj horo',
 'prefs-labs' => 'Ecoj el Laboratorio',
+'prefs-user-pages' => 'Uzanto paĝoj',
 'prefs-personal' => 'Uzanta profilo',
 'prefs-rc' => 'Lastaj ŝanĝoj',
 'prefs-watchlist' => 'Atentaro',
@@ -3134,7 +3135,7 @@ La komenca ligilo de linio devas esti ligilo al malbona bildo.
 Sekvaj ligilo en la sama linio estas konsiderata kiel esceptoj (paĝoj kiel la bildo rajtas esti montrata.)',
 
 # Metadata
-'metadata' => 'Metadatenoj',
+'metadata' => 'Metadatumoj',
 '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',
index 3e1b273..a41f196 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author -jem-
  * @author Aleator
  * @author Alhen
  * @author Alpertron
@@ -367,7 +368,7 @@ $messages = array(
 'tog-previewontop' => 'Mostrar previsualización antes del cuadro de edición',
 'tog-previewonfirst' => 'Mostrar previsualización en la primera edición',
 'tog-nocache' => 'Desactivar la caché de páginas del navegador',
-'tog-enotifwatchlistpages' => 'Enviarme un correo electrónico cuando se modifique una página en mi lista de seguimiento',
+'tog-enotifwatchlistpages' => 'Enviarme un correo electrónico cuando se modifique una página o un archivo de mi lista de seguimiento',
 'tog-enotifusertalkpages' => 'Enviarme un correo electrónico cuando se modifique mi página de discusión',
 'tog-enotifminoredits' => 'Notificarme también los cambios menores de páginas',
 'tog-enotifrevealaddr' => 'Revelar mi dirección de correo electrónico en los correos de notificación',
@@ -702,6 +703,7 @@ Por favor, avisa a un [[Special:ListUsers/sysop|administrador]], tomando nota de
 'cannotdelete' => 'La página o archivo «$1» no se pudo borrar.
 Puede que ya haya sido borrado por alguien más.',
 'cannotdelete-title' => 'No se puede borrar la página «$1»',
+'delete-hook-aborted' => 'La modificación que intentaste hacer fue cancelada por un gancho de extensión. No hay explicación disponible.',
 'badtitle' => 'Título incorrecto',
 'badtitletext' => 'El título de la página solicitada está vacío, no es válido, o es un enlace interidioma o interwiki incorrecto.
 Puede que contenga uno o más caracteres que no se pueden usar en los títulos.',
@@ -733,6 +735,8 @@ El motivo dado fue: "\'\'$2\'\'".',
 El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 'invalidtitle-knownnamespace' => 'Título no válido con el espacio de nombres "$2" y el texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título no válido con número de espacio de nombres desconocido  $1  y el texto "$2"',
+'exception-nologin' => 'No has iniciado sesión',
+'exception-nologin-text' => 'Esta página o acción requiere que inicies sesión en este wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Error de configuración: Antivirus desconocido: ''$1''",
@@ -765,7 +769,7 @@ No olvides personalizar [[Special:Preferences|tus preferencias]].',
 'notloggedin' => 'No has iniciado sesión',
 'nologin' => '¿No tienes una cuenta? $1.',
 'nologinlink' => 'Crear una cuenta',
-'createaccount' => 'Crear cuenta',
+'createaccount' => 'Crear una cuenta',
 'gotaccount' => '¿Ya tienes una cuenta? $1.',
 'gotaccountlink' => 'Entrar',
 'userlogin-resetlink' => '¿Olvidaste tus datos de acceso?',
@@ -3293,11 +3297,11 @@ Existen otros campos que se mantendrán ocultos por defecto.
 'exif-meteringmode' => 'Modo de medición',
 'exif-lightsource' => 'Fuente de luz',
 'exif-flash' => 'Flash',
-'exif-focallength' => 'Longitud de la lente focal',
+'exif-focallength' => 'Longitud focal de la lente',
 'exif-subjectarea' => 'Área del sujeto',
 'exif-flashenergy' => 'Energía del flash',
-'exif-focalplanexresolution' => 'Resolución X plano focal',
-'exif-focalplaneyresolution' => 'Resolución Y plano focal',
+'exif-focalplanexresolution' => 'Resolución X del plano focal',
+'exif-focalplaneyresolution' => 'Resolución Y del plano focal',
 'exif-focalplaneresolutionunit' => 'Unidad de resolución del plano focal',
 'exif-subjectlocation' => 'Localización del sujeto',
 'exif-exposureindex' => 'Índice de exposición',
@@ -3334,7 +3338,7 @@ Existen otros campos que se mantendrán ocultos por defecto.
 'exif-gpstrackref' => 'Referencia para la dirección del movimiento',
 'exif-gpstrack' => 'Dirección del movimiento',
 'exif-gpsimgdirectionref' => 'Referencia de la dirección de imágen',
-'exif-gpsimgdirection' => 'Dirección de imágen',
+'exif-gpsimgdirection' => 'Dirección de imagen',
 'exif-gpsmapdatum' => 'Utilizados datos de medición geodésica',
 'exif-gpsdestlatituderef' => 'Referencia para la latitud del destino',
 'exif-gpsdestlatitude' => 'Destino de latitud',
@@ -3419,7 +3423,7 @@ Existen otros campos que se mantendrán ocultos por defecto.
 'exif-compression-3' => 'Codificación de fax CCITT grupo 3',
 'exif-compression-4' => 'Codificación de fax CCITT grupo 4',
 
-'exif-copyrighted-true' => 'Copyrighted',
+'exif-copyrighted-true' => 'Con derechos de autor',
 'exif-copyrighted-false' => 'Dominio público',
 
 'exif-unknowndate' => 'Fecha desconocida',
@@ -3985,6 +3989,8 @@ En otro caso, puedes usar el siguiente formulario. Tu comentario será añadido
 'api-error-empty-file' => 'El archivo que enviaste estaba vacío.',
 'api-error-emptypage' => 'No se pueden crear páginas nuevas que estén vacías.',
 'api-error-fetchfileerror' => 'Error interno: Algo salió mal mientras se obtenía el archivo.',
+'api-error-fileexists-forbidden' => 'Ya existe el archivo "$1" y no se puede sobreescribir.',
+'api-error-fileexists-shared-forbidden' => 'Ya existe "$1" en el repositorio de archivos compartidos y no se puede sobreescribir.',
 'api-error-file-too-large' => 'El archivo que enviaste era demasiado grande.',
 'api-error-filename-tooshort' => 'El nombre de archivo es demasiado corto.',
 'api-error-filetype-banned' => 'Este tipo de archivo está prohibido.',
index 2f2e77e..132d383 100644 (file)
@@ -295,7 +295,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Peida viimaste muudatuste loetelus jälgimisloendis esitatavad muudatused',
 'tog-newpageshidepatrolled' => 'Peida uute lehtede loendis kontrollitud leheküljed',
 'tog-extendwatchlist' => 'Laienda jälgimisloendit, et näha kõiki muudatusi, mitte vaid kõige värskemaid',
-'tog-usenewrc' => 'Laiendatud viimased muudatused (nõutav JavaScripti olemasolu)',
+'tog-usenewrc' => 'Rühmita viimased muudatused ja muudatused jälgimisloendis lehekülje järgi (vaja JavaScripti)',
 'tog-numberheadings' => 'Pealkirjade automaatnummerdus',
 'tog-showtoolbar' => 'Redigeerimise tööriistariba näitamine',
 'tog-editondblclick' => 'Artiklite redigeerimine topeltklõpsu peale (JavaScript)',
@@ -321,7 +321,7 @@ $messages = array(
 'tog-externaleditor' => 'Kasuta vaikimisi välist redaktorit (ainult asjatundjatele, tarvis arvuti eriseadistust – [//www.mediawiki.org/wiki/Manual:External_editors lisateave])',
 'tog-externaldiff' => 'Kasuta vaikimisi välist võrdlusvahendit (ainult asjatundjatele, tarvis arvuti eriseadistust – [//www.mediawiki.org/wiki/Manual:External_editors lisateave])',
 'tog-showjumplinks' => 'Kuva lehekülje ülaservas "mine"-lingid',
-'tog-uselivepreview' => 'Kasuta elavat eelvaadet (nõutav JavaScript) (testimisel)',
+'tog-uselivepreview' => 'Kasuta elavat eelvaadet (vaja JavaScripti) (katseline)',
 'tog-forceeditsummary' => 'Nõua redigeerimisel resümee välja täitmist',
 'tog-watchlisthideown' => 'Peida minu redaktsioonid jälgimisloendist',
 'tog-watchlisthidebots' => 'Peida robotid jälgimisloendist',
@@ -558,7 +558,7 @@ Vaata [[Special:Version|versiooni lehekülge]].',
 'viewsourceold' => 'vaata lähteteksti',
 'editlink' => 'redigeeri',
 'viewsourcelink' => 'vaata lähteteksti',
-'editsectionhint' => 'Redigeeri alaosa $1',
+'editsectionhint' => 'Redigeeri alaosa "$1"',
 'toc' => 'Sisukord',
 'showtoc' => 'näita',
 'hidetoc' => 'peida',
@@ -677,6 +677,8 @@ $2',
 Administraator lukustas selle järgmisel põhjusel: "$3".',
 'invalidtitle-knownnamespace' => 'Vigane pealkiri nimeruumis "$2" tekstiga "$3"',
 'invalidtitle-unknownnamespace' => 'Vigane pealkiri nimeruuminumbriga $1 ja tekstiga "$2"',
+'exception-nologin' => 'Sisse logimata',
+'exception-nologin-text' => 'Selle lehekülje või toimingu jaoks pead selles vikis olema sisse loginud.',
 
 # Virus scanner
 'virus-badscanner' => "Viga konfiguratsioonis: tundmatu viirusetõrje: ''$1''",
@@ -1488,7 +1490,7 @@ See ei tohi olla pikem kui $1 {{PLURAL:$1|sümbol|sümbolit}}.',
 'right-read' => 'Lugeda lehekülgi',
 'right-edit' => 'Redigeerida lehekülje sisu',
 'right-createpage' => 'Luua lehekülgi (mis pole arutelu leheküljed)',
-'right-createtalk' => 'Luua arutelu lehekülgi',
+'right-createtalk' => 'Luua arutelulehekülgi',
 'right-createaccount' => 'Luua uusi kasutajakontosid',
 'right-minoredit' => 'Märkida muudatusi pisimuudatustena',
 'right-move' => 'Teisaldada lehekülgi',
@@ -2103,6 +2105,7 @@ Pane tähele, et teised võrgukohad võivad viidata failile otselingiga ja seega
 Valiku kitsendamiseks vali logitüüp, sisesta kasutajanimi (tõstutundlik) või huvipakkuva lehekülje pealkiri (samuti tõstutundlik).',
 'logempty' => 'Logis puuduvad vastavad kirjed.',
 'log-title-wildcard' => 'Selle tekstiga algavad pealkirjad',
+'showhideselectedlogentries' => 'Näita valitud logisissekandeid või peida need',
 
 # Special:AllPages
 'allpages' => 'Kõik leheküljed',
@@ -2459,7 +2462,7 @@ Link võib olla kõlbmatu või redaktsioon võib olla taastatud või arhiivist e
 [[Special:Log/delete|Kustutamise logist]] võib leida loendi viimastest kustutamistest ja taastamistest.",
 'undelete-header' => 'Hiljuti kustutatud leheküljed leiad [[Special:Log/delete|kustutamislogist]].',
 'undelete-search-title' => 'Kustutatud lehekülgede otsimine',
-'undelete-search-box' => 'Otsi kustutatud lehekülgi',
+'undelete-search-box' => 'Kustutatud lehekülgede otsimine',
 'undelete-search-prefix' => 'Näita lehekülgi, mille pealkiri algab nii:',
 'undelete-search-submit' => 'Otsi',
 'undelete-no-results' => 'Kustutatud lehekülgede arhiivist sellist lehekülge ei leidunud.',
@@ -2991,6 +2994,7 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'spambot_username' => 'MediaWiki spämmieemaldus',
 'spam_reverting' => 'Taastan viimase versiooni, mis ei sisalda linke aadressile $1.',
 'spam_blanking' => 'Kõik versioonid sisaldasid linke veebilehele $1. Lehekülg tühjendatud.',
+'spam_deleting' => 'Kustutatud kõik redaktsioonid, mis viitasid aadressile $1.',
 
 # Info page
 'pageinfo-title' => 'Teave lehekülje "$1" kohta',
@@ -3830,6 +3834,8 @@ Kui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajan
 'api-error-empty-file' => 'Üleslaaditav fail on tühi.',
 'api-error-emptypage' => 'Uute tühjade lehekülgede loomine pole lubatud.',
 'api-error-fetchfileerror' => 'Sisemine tõrge: Midagi läks faili kättesaamisel valesti.',
+'api-error-fileexists-forbidden' => 'Fail nimega "$1" on juba olemas ja seda ei saa üle kirjutada.',
+'api-error-fileexists-shared-forbidden' => 'Fail nimega "$1" on jagatud failivaramus juba olemas ja seda ei saa üle kirjutada.',
 'api-error-file-too-large' => 'Üleslaaditav fail on liiga suur.',
 'api-error-filename-tooshort' => 'Failinimi on liiga lühike.',
 'api-error-filetype-banned' => 'Antud failitüüp on keelatud.',
index 734b00c..32b6804 100644 (file)
@@ -438,7 +438,7 @@ $messages = array(
 'tog-hidepatrolled' => 'ویرایش‌های گشت‌خورده از فهرست تغییرات اخیر پنهان شوند',
 'tog-newpageshidepatrolled' => 'صفحه‌های نهگبانی‌شده از فهرست صفحه‌های تازه پنهان شوند',
 'tog-extendwatchlist' => 'گسترش فهرست پی‌گیری‌ها برای نمایش همهٔ تغییرات، نه فقط آخرین‌ها',
-'tog-usenewrc' => 'از تغییرات اخیر گسترش‌یافته استفاده شود (نیازمند جاوااسکریپت)',
+'tog-usenewrc' => 'گروه تغییرات بر پایه صفحه در تغییرات اخیر و فهرست پیگیری‌ها (نیازمند جاوااسکریپت)',
 'tog-numberheadings' => 'شماره‌گذاری خودکار عنوان‌ها',
 'tog-showtoolbar' => 'نوار ابزار جعبهٔ ویرایش نمایش یابد (نیازمند جاوااسکریپت)',
 'tog-editondblclick' => 'ویرایش صفحه‌ها با دوکلیک (نیازمند جاوااسکریپت)',
@@ -795,6 +795,8 @@ $1',
 'cannotdelete' => 'امکان حذف صفحه یا تصویر «$1» وجود ندارد.
 ممکن است قبلاً فرد دیگری آن را حذف کرده باشد.',
 'cannotdelete-title' => 'نمی‌توان صفحهٔ «$1» را حذف کرد',
+'delete-hook-aborted' => 'ویرایش توسط قلاب لغو شد.
+توضیحی در این مورد داده نشد.',
 'badtitle' => 'عنوان بد',
 'badtitletext' => 'عنوان درخواستی نامعتبر، خالی، یا عنوانی میان‌زبانی یا میان‌ویکی‌ای با پیوند نادرست بود.
 ممکن است حاوی یک یا چند نویسه باشد که نمی‌توانند در عنوان‌ها استفاده شوند.',
@@ -831,6 +833,8 @@ $2',
 مدیری که آن را قفل کرده چنین توضیحی را ذکر کرده:  ''$3''.",
 'invalidtitle-knownnamespace' => 'عنوان نامعتبر با فضای نام «$2» و متن «$3»',
 'invalidtitle-unknownnamespace' => 'عنوان نامعتبر با فضای نام ناشناختهٔ شمارهٔ $1 و متن «$2»',
+'exception-nologin' => 'به سامانه وارد نشده‌اید',
+'exception-nologin-text' => 'در این ویکی انجام این عمل نیازمند وارد شدن به سیستم  است.',
 
 # Virus scanner
 'virus-badscanner' => "پیکربندی بد: پویشگر ویروس ناشناخته: ''$1''",
@@ -1161,7 +1165,7 @@ $2
 'storedversion' => 'نسخهٔ ذخیره شده',
 'nonunicodebrowser' => "'''هشدار: مرورگر شما با استانداردهای یونیکد سازگار نیست.'''
 راه حلی به کار گرفته شده تا شما بتوانید صفحه‌ها را با امنیت ویرایش کنید: کاراکترهای غیر ASCII به صورت کدهایی در مبنای شانزده به شما نشان داده می‌شوند.",
-'editingold' => "'''هشدار: شما در حال ویرایش نسخه‌ای قدیمی از این صفحه هستید.''
+'editingold' => "'''هشدار: شما در حال ویرایش نسخه‌ای قدیمی از این صفحه هستید.'''
 اگر ذخیره‌اش کنید، هر تغییری که پس از این نسخه انجام شده‌است از بین خواهد رفت.",
 'yourdiff' => 'تفاوت‌ها',
 'copyrightwarning' => "لطفاً توجه داشته باشید که فرض می‌شود کلیهٔ مشارکت‌های شما با {{SITENAME}} تحت «$2» منتشر می‌شوند (برای جزئیات بیشتر به $1 مراجعه کنید).
@@ -4148,6 +4152,8 @@ $5
 'api-error-empty-file' => 'پرونده‌ای که شما ارسال کردید خالی بود.',
 'api-error-emptypage' => 'ایجاد صفحه‌های خالی مجاز نیست.',
 'api-error-fetchfileerror' => 'خطای داخلی: در هنگام گرفتن پرونده، یک چیزی درست پیش نرفت.',
+'api-error-fileexists-forbidden' => 'یک پرونده با نام "$1" موجود است و امکان بازنویسی نیست.',
+'api-error-fileexists-shared-forbidden' => 'یک پرونده با نام "$1" در انبار اشتراک پرونده موجود است و امکان بازنویسی نیست.',
 'api-error-file-too-large' => 'پرونده‌ای که شما ارسال کردید بیش از اندازه بزرگ بود.',
 'api-error-filename-tooshort' => 'نام پرونده بیش از اندازه کوتاه است.',
 'api-error-filetype-banned' => 'این نوع پرونده ممنوع است.',
index 13f27ce..0ea99ab 100644 (file)
@@ -11,6 +11,7 @@
  * @author Centerlink
  * @author Cimon Avaro
  * @author Crt
+ * @author ElmA
  * @author Harriv
  * @author Jaakonam
  * @author Jack Phoenix
@@ -325,15 +326,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Muokkaa osioita napsauttamalla otsikkoa hiiren oikealla painikkeella (JavaScript)',
 'tog-showtoc' => 'Näytä sisällysluettelo sivuille, joilla yli 3 otsikkoa',
 'tog-rememberpassword' => 'Muista kirjautumisen tässä selaimessa (enintään $1 {{PLURAL:$1|päivä|päivää}})',
-'tog-watchcreations' => 'Lisää luomani sivut tarkkailulistalle',
-'tog-watchdefault' => 'Lisää muokkaamani sivut tarkkailulistalle',
-'tog-watchmoves' => 'Lisää siirtämäni sivut tarkkailulistalle',
-'tog-watchdeletion' => 'Lisää poistamani sivut tarkkailulistalle',
+'tog-watchcreations' => 'Lisää luomani sivut tarkkailulistalleni',
+'tog-watchdefault' => 'Lisää muokkaamani sivut tarkkailulistalleni',
+'tog-watchmoves' => 'Lisää siirtämäni sivut tarkkailulistalleni',
+'tog-watchdeletion' => 'Lisää poistamani sivut tarkkailulistalleni',
 'tog-minordefault' => 'Muutokset ovat oletuksena pieniä',
 'tog-previewontop' => 'Näytä esikatselu muokkauskentän yläpuolella',
 'tog-previewonfirst' => 'Näytä esikatselu heti, kun muokkaus aloitetaan',
 'tog-nocache' => 'Älä tallenna sivuja selaimen välimuistiin',
-'tog-enotifwatchlistpages' => 'Lähetä sähköpostiviesti tarkkailtujen sivujen muutoksista',
+'tog-enotifwatchlistpages' => 'Lähetä sähköpostiviesti tarkkailulistallani olevien sivujen muutoksista',
 'tog-enotifusertalkpages' => 'Lähetä sähköpostiviesti, kun käyttäjäsivun keskustelusivu muuttuu',
 'tog-enotifminoredits' => 'Lähetä sähköpostiviesti myös pienistä muokkauksista',
 'tog-enotifrevealaddr' => 'Näytä sähköpostiosoitteeni muille lähetetyissä ilmoituksissa',
@@ -696,6 +697,8 @@ Syynä on: ''$2''.",
 Lukituksen asettanut ylläpitäjä on antanut seuraavan syyn toimenpiteelle: "$3".',
 'invalidtitle-knownnamespace' => 'Virheellinen sivunimi, nimiavaruus "$2" ja teksti "$3"',
 'invalidtitle-unknownnamespace' => 'Virheellinen sivunimi, tuntematon nimiavaruus numero $1 ja teksti $2',
+'exception-nologin' => 'Et ole kirjautuneena',
+'exception-nologin-text' => 'Tämä sivu tai toiminto edellyttää sisäänkirjautumista tähän wikiin.',
 
 # Virus scanner
 'virus-badscanner' => "Virheellinen asetus: Tuntematon virustutka: ''$1''",
@@ -1226,7 +1229,7 @@ Uuden ja vanhan sivun muutoksien pitää muodostaa jatkumo – ne eivät saa men
 
 # Diffs
 'history-title' => 'Sivun "$1" muutoshistoria',
-'difference-title' => 'Ero sivun "$1" versioiden välillä',
+'difference-title' => 'Ero sivun ”$1” versioiden välillä',
 'difference-title-multipage' => 'Erot sivujen "$1" ja "$2" välillä',
 'difference-multipage' => '(Sivujen välinen eroavaisuus)',
 'lineno' => 'Rivi $1:',
@@ -1782,8 +1785,12 @@ $1',
 'backend-fail-read' => 'Tiedostoa $1 ei voitu lukea.',
 'backend-fail-create' => 'Tiedostoa $1 ei voitu luoda.',
 'backend-fail-maxsize' => 'Tiedostoa $1 ei voitu luoda, koska se on suurempi kuin {{PLURAL:$2|yksi tavu|$2 tavua}}.',
+'backend-fail-readonly' => 'Taustajärjestelmä "$1" on tällä hetkellä vain lukutilassa. Syy tähän on: "\'\'$2\'\'"',
+'backend-fail-synced' => 'Tiedoston "$1" tila ei vastaa tiedoston tilaa sisäisissä taustajärjestelmissä.',
 'backend-fail-connect' => 'Varastojärjestelmään "$1" ei saada yhteyttä.',
+'backend-fail-internal' => 'Tuntematon virhe taustajärjestelmässä "$1".',
 'backend-fail-contenttype' => 'Tiedostoa ei voitu tallentaa kohteeseen $1, koska tiedostomuotoa ei voitu määrittää.',
+'backend-fail-batchsize' => 'Taustajärjestelmälle on annettu $1 {{PLURAL:$1|tiedostotoiminto|toimintoa}}; enimmäismäärä on $2 {{PLURAL:$2|tiedostotoiminto|toimintoa}}.',
 'backend-fail-usable' => 'Ei voitu luoda tiedostoa $1, koska käyttöoikeudet eivät riittäneet tai hakemisto puuttuu.',
 
 # Lock manager
@@ -2405,7 +2412,7 @@ Viimeisimmän muokkauksen on tehnyt käyttäjä [[User:$3|$3]] ([[User talk:$3|k
 
 # Undelete
 'undelete' => 'Palauta poistettuja sivuja',
-'undeletepage' => 'Katsele ja palauta poistettuja sivuja',
+'undeletepage' => 'Tarkastele ja palauta poistettuja sivuja',
 'undeletepagetitle' => "'''Poistetut versiot sivusta [[:$1]]'''.",
 'viewdeletedpage' => 'Poistettujen sivujen selaus',
 'undeletepagetext' => '{{PLURAL:$1|Seuraava sivu|Seuraavat sivut}} on poistettu, mutta {{PLURAL:$1|se löytyy|ne löytyvät}} vielä arkistosta, joten {{PLURAL:$1|se on|ne ovat}} palautettavissa. Arkisto saatetaan tyhjentää aika ajoin.',
@@ -3841,6 +3848,8 @@ Muussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi
 'api-error-empty-file' => 'Määrittämäsi tiedosto on tyhjä.',
 'api-error-emptypage' => 'Ei ole sallittua luoda uutta, tyhjää sivua.',
 'api-error-fetchfileerror' => 'Sisäinen virhe: jotakin meni pieleen tiedoston haussa.',
+'api-error-fileexists-forbidden' => 'Tiedosto nimellä "$1" on jo olemassa eikä sitä voi korvata.',
+'api-error-fileexists-shared-forbidden' => 'Tiedosto nimeltä "$1" on jo olemassa yhteisessä tietovarastossa eikä sitä voi korvata.',
 'api-error-file-too-large' => 'Määrittämäsi tiedosto on liian iso.',
 'api-error-filename-tooshort' => 'Tiedoston nimi on liian lyhyt.',
 'api-error-filetype-banned' => 'Tämän tyyppisiä tiedosta ei voi tallentaa.',
index 75da985..14ceb55 100644 (file)
@@ -379,17 +379,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Activer la modification de sections par clic droit sur leurs titres (nécessite JavaScript)',
 'tog-showtoc' => 'Afficher la table des matières (pour les pages ayant plus de 3 sections)',
 'tog-rememberpassword' => 'Se souvenir de mon identification avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})',
-'tog-watchcreations' => 'Ajouter les pages que je crée à ma liste de suivi',
-'tog-watchdefault' => 'Ajouter les pages que je modifie à ma liste de suivi',
-'tog-watchmoves' => 'Ajouter les pages que je renomme à ma liste de suivi',
-'tog-watchdeletion' => 'Ajouter les pages que je supprime à ma liste de suivi',
+'tog-watchcreations' => 'Ajouter les pages que je crée et les fichiers que j’importe à ma liste de suivi',
+'tog-watchdefault' => 'Ajouter les pages et les fichiers que je modifie à ma liste de suivi',
+'tog-watchmoves' => 'Ajouter les pages et les fichiers que je renomme à ma liste de suivi',
+'tog-watchdeletion' => 'Ajouter les pages et les fichiers que je supprime à ma liste de suivi',
 'tog-minordefault' => 'Marquer mes modifications comme mineures par défaut',
 'tog-previewontop' => 'Afficher la prévisualisation au-dessus de la zone de modification',
 'tog-previewonfirst' => 'Afficher la prévisualisation lors de la première modification',
 'tog-nocache' => 'Désactiver le cache des pages par le navigateur',
-'tog-enotifwatchlistpages' => 'M’avertir par courriel lorsqu’une page de ma liste de suivi est modifiée',
+'tog-enotifwatchlistpages' => 'M’avertir par courriel lorsqu’une page ou un fichier de ma liste de suivi est modifiée',
 'tog-enotifusertalkpages' => 'M’avertir par courriel si ma page de discussion est modifiée',
-'tog-enotifminoredits' => "M'avertir par courriel même en cas de modifications mineures des pages",
+'tog-enotifminoredits' => "M'avertir par courriel même en cas de modifications mineures des pages ou des fichiers",
 'tog-enotifrevealaddr' => 'Afficher mon adresse de courriel dans les courriels de notification',
 'tog-shownumberswatching' => 'Afficher le nombre d’utilisateurs qui suivent cette page',
 'tog-oldsig' => 'Signature existante :',
@@ -722,6 +722,8 @@ Veuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oubli
 'cannotdelete' => 'Impossible de supprimer la page ou le fichier « $1 ».
 La suppression a peut-être déjà été effectuée par quelqu’un d’autre.',
 'cannotdelete-title' => 'Impossible de supprimer la page « $1 »',
+'delete-hook-aborted' => "Suppression annulée par une extension.
+Aucune explication n'a été fournie.",
 'badtitle' => 'Mauvais titre',
 'badtitletext' => 'Le titre de la page demandée est invalide, vide, ou il s’agit d’un titre inter-langue ou inter-projet mal lié. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.',
 'perfcached' => 'Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|un résultat|$1 résultats}} est disponible dans le cache.',
@@ -4017,6 +4019,8 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'api-error-empty-file' => 'Le fichier que vous avez soumis était vide.',
 'api-error-emptypage' => "Création de pages vide n'est pas autorisée.",
 'api-error-fetchfileerror' => 'Erreur interne : Quelque chose s’est mal passé lors de la récupération du fichier.',
+'api-error-fileexists-forbidden' => 'Un fichier nommé "$1" existe déjà, et ne peut pas être écrasé.',
+'api-error-fileexists-shared-forbidden' => 'Un fichier nommé "$1" existe déjà dans le répertoire des fichiers partagés, et ne peut pas être écrasé.',
 'api-error-file-too-large' => 'Le fichier que vous avez soumis était trop grand.',
 'api-error-filename-tooshort' => 'Le nom du fichier est trop court.',
 'api-error-filetype-banned' => 'Ce type de fichier est interdit.',
index 768dad1..a101aaf 100644 (file)
@@ -312,59 +312,59 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Solegnér los lims :',
 'tog-justify' => 'Èxplicar los paragrafos',
-'tog-hideminor' => 'Cachiér los petiôts changements des dèrriérs changements',
-'tog-hidepatrolled' => 'Cachiér los changements survelyês des dèrriérs changements',
-'tog-newpageshidepatrolled' => 'Cachiér les pâges survelyês de la lista de les pâges novèles',
+'tog-hideminor' => 'Cachiér los petiôts changements dedens los dèrriérs changements',
+'tog-hidepatrolled' => 'Cachiér los changements survelyês dedens los dèrriérs changements',
+'tog-newpageshidepatrolled' => 'Cachiér les pâges survelyês entre-mié les pâges novèles',
 'tog-extendwatchlist' => 'Ètendre la lista de survelyence por fâre vêre tôs los changements et pas solament los ples novéls',
-'tog-usenewrc' => 'Utilisar los dèrriérs changements mèlyorâs (at fôta de JavaScript)',
-'tog-numberheadings' => 'Numerotar ôtomaticament los titros de sèccions',
-'tog-showtoolbar' => 'Montrar la bârra d’outils d’èdicion (at fôta de JavaScript)',
-'tog-editondblclick' => 'Doblo-clicar pèrmèt de changiér una pâge (at fôta de JavaScript)',
-'tog-editsection' => 'Activar los lims « [changiér] » por changiér una sèccion',
-'tog-editsectiononrightclick' => 'Fâre un clic drêt sur un titro de sèccion pèrmèt de changiér ceta (at fôta de JavaScript)',
+'tog-usenewrc' => 'Rassemblar los changements per pâge dedens los dèrriérs changements et la lista de survelyence (at fôta de JavaScript)',
+'tog-numberheadings' => 'Numerotar ôtomaticament los titros de sèccion',
+'tog-showtoolbar' => 'Fâre vêre la bârra d’outils de changement (at fôta de JavaScript)',
+'tog-editondblclick' => 'Changiér des pâges sur doblo-clic (at fôta de JavaScript)',
+'tog-editsection' => 'Activar lo changement de sèccions avouéc los lims « [changiér] »',
+'tog-editsectiononrightclick' => 'Activar lo changement de sèccions per clic drêt sur lors titros (at fôta de JavaScript)',
 'tog-showtoc' => 'Fâre vêre la trâbla de les matiéres (por les pâges qu’ont més de 3 sèccions)',
-'tog-rememberpassword' => 'Sè rapelar de mon branchement sur ceti navigator (por $1 jorn{{PLURAL:$1||s}} u més)',
+'tog-rememberpassword' => 'Sè rapelar de mon contresegno sur ceti navigator (por $1 jorn{{PLURAL:$1||s}} u més)',
 'tog-watchcreations' => 'Apondre les pâges que fé a ma lista de survelyence',
 'tog-watchdefault' => 'Apondre les pâges que chanjo a ma lista de survelyence',
 'tog-watchmoves' => 'Apondre les pâges que renomo a ma lista de survelyence',
 'tog-watchdeletion' => 'Apondre les pâges que suprimo a ma lista de survelyence',
-'tog-minordefault' => 'Marcar per dèfôt mos changements coment petiôts',
-'tog-previewontop' => 'Montrar la prèvisualisacion en-dessus de la bouèta d’èdicion',
-'tog-previewonfirst' => 'Montrar la prèvisualisacion pendent la premiére èdicion',
+'tog-minordefault' => 'Marcar per dèfôt tôs los changements coment petiôts',
+'tog-previewontop' => 'Fâre vêre la prèvisualisacion en-dessus de la zona de changement',
+'tog-previewonfirst' => 'Fâre vêre la prèvisualisacion pendent lo premiér changement',
 'tog-nocache' => 'Dèsactivar lo cache de les pâges per lo navigator',
-'tog-enotifwatchlistpages' => 'M’avèrtir per mèssageria èlèctronica quand una pâge de ma lista de survelyence est changiê',
-'tog-enotifusertalkpages' => 'M’avèrtir per mèssageria èlèctronica quand ma pâge de discussion est changiê',
-'tog-enotifminoredits' => 'M’avèrtir per mèssageria èlèctronica mémo en câs de petiôts changements',
-'tog-enotifrevealaddr' => 'Fâre vêre mon adrèce èlèctronica dens los mèssâjos d’avèrtissement',
-'tog-shownumberswatching' => 'Fâre vêre lo nombro d’usanciérs que siuvont les pâges',
+'tog-enotifwatchlistpages' => 'Mè mandar un mèssâjo quand na pâge de ma lista de survelyence est changiê',
+'tog-enotifusertalkpages' => 'Mè mandar un mèssâjo quand ma pâge de discussion est changiê',
+'tog-enotifminoredits' => 'Mè mandar un mèssâjo mémo en câs de petiôts changements de les pâges',
+'tog-enotifrevealaddr' => 'Fâre vêre mon adrèce èlèctronica dens los mèssâjos de notificacion',
+'tog-shownumberswatching' => 'Fâre vêre lo nombro d’utilisators que siuvont na pâge',
 'tog-oldsig' => 'Signatura ègzistenta :',
 'tog-fancysig' => 'Trètar la signatura coment de vouiquitèxto (sen lim ôtomatico)',
-'tog-externaleditor' => 'Utilisar per dèfôt un èditor de tèxto de defôr (solament por los usanciérs avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
-'tog-externaldiff' => 'Utilisar per dèfôt un comparator de defôr (solament por los usanciérs avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
-'tog-showjumplinks' => 'Activar los lims « navigacion » et « rechèrche » d’amont la pâge',
+'tog-externaleditor' => 'Utilisar per dèfôt un changior de tèxto de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-externaldiff' => 'Utilisar per dèfôt un comparator de defôr (solament por los utilisators avanciês, at fôta d’una configuracion spèciâla sur voutron ordenator. [//www.mediawiki.org/wiki/Manual:External_editors Més d’enformacions.])',
+'tog-showjumplinks' => 'Activar los lims d’accèssibilitât « {{int:jumpto}} »',
 'tog-uselivepreview' => 'Utilisar l’apèrçu vito fêt (at fôta de JavaScript) (èxpèrimentâl)',
 'tog-forceeditsummary' => 'M’avèrtir quand j’é pas spècefiâ de rèsumâ de changement',
-'tog-watchlisthideown' => 'Cachiér mos prôpros changements dens la lista de survelyence',
-'tog-watchlisthidebots' => 'Cachiér los changements fêts per des bots dens la lista de survelyence',
-'tog-watchlisthideminor' => 'Cachiér los petiôts changements dens la lista de survelyence',
-'tog-watchlisthideliu' => 'Cachiér los changements fêts per des usanciérs branchiês dens la lista de survelyence',
-'tog-watchlisthideanons' => 'Cachiér los changements fêts per des usanciérs pas encartâs dens la lista de survelyence',
-'tog-watchlisthidepatrolled' => 'Cachiér los changements survelyês dens la lista de survelyence',
-'tog-nolangconversion' => 'Dèsactivar la convèrsion de les variantes de lengoua',
-'tog-ccmeonemails' => 'Mè mandar una copia des mèssâjos que mando ux ôtros usanciérs',
-'tog-diffonly' => 'Pas montrar lo contegnu de les pâges desot los difs',
+'tog-watchlisthideown' => 'Cachiér mos prôpros changements dedens la lista de survelyence',
+'tog-watchlisthidebots' => 'Cachiér los changements fêts per des bots dedens la lista de survelyence',
+'tog-watchlisthideminor' => 'Cachiér los petiôts changements dedens la lista de survelyence',
+'tog-watchlisthideliu' => 'Cachiér los changements fêts per des utilisators branchiês dedens la lista de survelyence',
+'tog-watchlisthideanons' => 'Cachiér los changements fêts per des utilisators anonimos dedens la lista de survelyence',
+'tog-watchlisthidepatrolled' => 'Cachiér los changements survelyês dedens la lista de survelyence',
+'tog-nolangconversion' => 'Dèsactivar la convèrsion de les variantes lengouistiques',
+'tog-ccmeonemails' => 'Mè mandar na copia des mèssâjos que mando ux ôtros utilisators',
+'tog-diffonly' => 'Pas fâre vêre lo contegnu de les pâges desot los difs',
 'tog-showhiddencats' => 'Fâre vêre les catègories cachiês',
-'tog-noconvertlink' => 'Dèsactivar la convèrsion des titros',
-'tog-norollbackdiff' => 'Pas montrar lo dif pendent una rèvocacion',
+'tog-noconvertlink' => 'Dèsactivar la convèrsion des titros des lims',
+'tog-norollbackdiff' => 'Pas fâre vêre lo dif pendent na rèvocacion',
 
-'underline-always' => 'tojorn',
-'underline-never' => 'jamés',
-'underline-default' => 'd’aprés lo navigator',
+'underline-always' => 'Tojorn',
+'underline-never' => 'Jamés',
+'underline-default' => 'Valor per dèfôt du navigator',
 
 # Font style option in Special:Preferences
-'editfont-style' => 'Stilo de la police de la bouèta d’èdicion :',
+'editfont-style' => 'Stilo de police de la zona de changement :',
 'editfont-default' => 'Celi du navigator per dèfôt',
-'editfont-monospace' => 'Police monoèspâciê',
+'editfont-monospace' => 'Police de chace fixa',
 'editfont-sansserif' => 'Police sen empiotament',
 'editfont-serif' => 'Police avouéc empiotaments',
 
@@ -422,18 +422,18 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => 'Catègorie{{PLURAL:$1||s}}',
-'category_header' => 'Pâges dens la catègorie « $1 »',
+'category_header' => 'Pâges dedens la catègorie « $1 »',
 'subcategories' => 'Sot-catègories',
-'category-media-header' => 'Fichiérs mèdia dens la catègorie « $1 »',
-'category-empty' => "''Ora, ceta catègorie contint gins de pâge ou ben de fichiér mèdia.''",
+'category-media-header' => 'Fichiérs mèdia dedens la catègorie « $1 »',
+'category-empty' => "''Ora, ceta catègorie contint gins de pâge ou de fichiér mèdia.''",
 'hidden-categories' => '{{PLURAL:$1|Catègorie cachiê|Catègories cachiês}}',
 'hidden-category-category' => 'Catègories cachiês',
-'category-subcat-count' => 'Ceta catègorie at {{PLURAL:$2|ren que la sot-catègorie|$2 sot-catègories, que {{PLURAL:$1|cela|les $1}}}} ce-desot.',
-'category-subcat-count-limited' => 'Ceta catègorie at {{PLURAL:$1|la sot-catègorie|les $1 sot-catègories}} ce-desot.',
-'category-article-count' => 'Ceta catègorie contint {{PLURAL:$2|ren que la pâge|$2 pâges, que {{PLURAL:$1|cela|les $1}}}} ce-desot.',
-'category-article-count-limited' => '{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dens la presenta catègorie.',
-'category-file-count' => 'Ceta catègorie contint {{PLURAL:$2|ren que lo fichiér|$2 fichiérs, que {{PLURAL:$1|celi|los $1}}}} ce-desot.',
-'category-file-count-limited' => '{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dens la presenta catègorie.',
+'category-subcat-count' => 'Cela catègorie-que at {{PLURAL:$2|ren que ceta sot-catègorie.|{{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}, sur na soma de $2.}}',
+'category-subcat-count-limited' => 'Cela catègorie-que at {{PLURAL:$1|ceta sot-catègorie|cetes $1 sot-catègories}}.',
+'category-article-count' => '{{PLURAL:$2|Cela catègorie-que contint ren que ceta pâge.|{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
+'category-article-count-limited' => '{{PLURAL:$1|Ceta pâge figure|Cetes $1 pâges figuront}} dedens la presenta catègorie.',
+'category-file-count' => '{{PLURAL:$2|Cela catègorie-que contint ren que ceti fichiér.|{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens cela catègorie-que, sur na soma de $2.}}',
+'category-file-count-limited' => '{{PLURAL:$1|Ceti fichiér figure|Cetos $1 fichiérs figuront}} dedens la presenta catègorie.',
 'listingcontinuesabbrev' => '(suita)',
 'index-category' => 'Pâges endèxâs',
 'noindex-category' => 'Pâges pas endèxâs',
@@ -441,7 +441,7 @@ $messages = array(
 
 'about' => 'A propôs',
 'article' => 'Pâge de contegnu',
-'newwindow' => '(ôvre una fenétra novèla)',
+'newwindow' => '(ôvre na fenétra novèla)',
 'cancel' => 'Anular',
 'moredotdotdot' => 'Et ples...',
 'mypage' => 'Ma pâge',
@@ -671,8 +671,8 @@ La suprèssion at pôt-étre ja étâ fêta per quârqu’un d’ôtro.',
 'badtitle' => 'Crouyo titro',
 'badtitletext' => 'Lo titro de pâge demandâ est fôx, vouedo, ou ben o est un titro entèrlengoua ou entèrvouiqui mâl-liyê.
 Contint sûrement yon ou ben un mouél de caractèros que pôvont pas étre utilisâs dens los titros.',
-'perfcached' => 'Cetes balyês sont en cache et pôvont pas étre a jorn. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Cetes balyês sont en cache, sont vêr pas forciêment a jorn. La dèrriére actualisacion dâte du $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Cetes balyês sont en cache et pôvont pas étre a jorn. {{PLURAL:$1|Yon rèsultat|$1 rèsultats}} u més {{PLURAL:$1|est disponiblo|sont disponiblos}} dedens lo cache.',
+'perfcachedts' => 'Cetes balyês sont en cache et ont étâ betâs a jorn por lo dèrriér côp a $1. {{PLURAL:$4|Yon rèsultat|$4 rèsultats}} u més {{PLURAL:$1|est disponiblo|sont disponiblos}} dedens lo cache.',
 'querypage-no-updates' => 'Ora, les mises a jorn por ceta pâge sont dèsactivâs.
 Les balyês ce-desot sont pas betâs a jorn.',
 'wrong_wfQuery_params' => 'Paramètres fôx dessus wfQuery()<br />
@@ -699,6 +699,7 @@ $2',
 'ns-specialprotected' => 'Les pâges dens l’èspâço de noms « {{ns:special}} » pôvont pas étre changiês.',
 'titleprotected' => "Cél titro at étâ protègiê a la crèacion per [[User:$1|$1]].
 La rêson balyê est « ''$2'' ».",
+'exception-nologin' => 'Pas branchiê',
 
 # Virus scanner
 'virus-badscanner' => "Crouye configuracion : scanor de virus encognu : ''$1''",
@@ -796,6 +797,7 @@ Nion mèssâjo serat mandâ por châcuna de cetes fonccions.',
 'invalidemailaddress' => 'Ceta adrèce èlèctronica pôt pas étre accèptâ perce que semble avêr un format fôx.
 Volyéd buchiér una adrèce bien formatâ ou ben lèssiér cél champ vouedo.',
 'cannotchangeemail' => 'Les adrèces èlèctroniques des comptos pôvont pas étre changiês sur ceti vouiqui.',
+'emaildisabled' => 'Ceti seto pôt pas mandar des mèssâjos.',
 'accountcreated' => 'Compto fêt.',
 'accountcreatedtext' => 'Lo compto usanciér por $1 at étâ fêt.',
 'createaccount-title' => 'Crèacion d’un compto por {{SITENAME}}',
@@ -1006,8 +1008,9 @@ La dèrriére entrâ du jornal des blocâjos est disponibla ce-desot :',
 Rapelâd-vos que les pâges a sè avouéc èxtensions .css et .js utilisont des titros en petiôtes lètres, per ègzemplo {{ns:user}}:Foo/vector.css et pas {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Betâ a jorn)',
 'note' => "'''Nota :'''",
-'previewnote' => "'''Rapelâd-vos que ceti tèxto est ren qu’una prèvisualisacion.'''
-'''Il at p’oncor étâ sôvâ !'''",
+'previewnote' => "'''Rapelâd-vos qu’o est ren qu’una prèvisualisacion.'''
+Voutros changements ont p’oncor étâ sôvâ !",
+'continue-editing' => 'Continuar lo changement',
 'previewconflict' => 'Ceta prèvisualisacion montre lo tèxto de la bouèta d’èdicion de d’amont coment aparètrat se vos chouèsésséd de lo sôvar.',
 'session_fail_preview' => "'''Dèsolâ ! Nos povens pas encartar voutron changement a côsa d’una pèrta d’enformacions en rapôrt avouéc voutra sèance.'''
 Volyéd tornar èprovar.
@@ -1048,7 +1051,7 @@ Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo, ou ben que vos l’
 Se vos voléd pas que voutros ècrits seyont changiês sen gins de rèstriccion, adonc los volyéd pas sometre ique.<br />
 Vos nos assurâd asse-ben que vos éd cen ècrit vos-mémo, ou ben que vos l’éd copiyê d’una sôrsa que vint du domêno publico, ou ben d’una ressôrsa libra (vêde $1 por més de dètalys).
 '''Utilisâd gins d’ôvra desot drêt d’ôtor sen pèrmission èxprèssa !'''",
-'longpageerror' => "'''ÈRROR : lo tèxto que vos éd somês fât $1 Kio, cen que dèpâsse la limita fixâ a $2 Kio.'''
+'longpageerror' => "'''ÈRROR : lo tèxto que vos éd somês fât {{PLURAL:$1|yon Kio|$1 Kio}}, cen que dèpâsse la limita fixâ a {{PLURAL:$2|yon Kio|$2 Kio}}.'''
 Lo tèxto pôt pas étre sôvâ.",
 'readonlywarning' => "'''Atencion : la bâsa de balyês at étâ vèrrolyê por mantegnence, vos porréd vêr pas sôvar voutros changements d’abôrd.'''
 Vos pouede copiyér lo tèxto dens un fichiér tèxto et pués lo sôvar por ples târd.
@@ -1093,6 +1096,7 @@ Semble qu’el èye étâ suprimâ.',
 'edit-no-change' => 'Voutron changement at étâ ignorâ perce que nion changement at étâ fêt u tèxto.',
 'edit-already-exists' => 'La pâge novèla at pas possu étre fêta.
 Ègziste ja.',
+'defaultmessagetext' => 'Mèssâjo per dèfôt',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Atencion : ceta pâge contint trop d’apèls que revegnont chiers de fonccions du parsor.
@@ -1252,7 +1256,7 @@ Volyéd controlar los jornals.',
 # Suppression log
 'suppressionlog' => 'Jornal de les suprèssions',
 'suppressionlogtext' => 'Vê-que la lista de les suprèssions et des blocâjos qu’ont de contegnu cachiê ux administrators.
-Vêde la [[Special:BlockList|lista ux usanciérs et a les adrèces IP blocâs]] por vêre los banissements et los blocâjos que sont ora opèracionèls.',
+Vêde la [[Special:BlockList|lista des blocâjos]] por vêre los banissements et los blocâjos que sont ora opèracionèls.',
 
 # History merging
 'mergehistory' => 'Fusionar los historicos de les pâges',
@@ -1287,6 +1291,8 @@ Notâd bien que l’usâjo des lims de navigacion tornerat inicialisar cela colo
 
 # Diffs
 'history-title' => 'Historico de les vèrsions de « $1 »',
+'difference-title' => 'Difèrences entre les vèrsions de « $1 »',
+'difference-title-multipage' => 'Difèrences entre les pâges « $1 » et « $2 »',
 'difference-multipage' => '(Difèrences entre les pâges)',
 'lineno' => 'Legne $1 :',
 'compareselectedversions' => 'Comparar les vèrsions chouèsies',
@@ -1384,6 +1390,7 @@ Atencion, lor endèxacion du contegnu de {{SITENAME}} pôt pas étre a jorn.',
 'prefs-beta' => 'Fonccionalitâts « Bèta »',
 'prefs-datetime' => 'Dâta et hora',
 'prefs-labs' => 'Fonccionalitâts « Laboratiors »',
+'prefs-user-pages' => 'Pâges utilisator',
 'prefs-personal' => 'Enformacions a sè',
 'prefs-rc' => 'Dèrriérs changements',
 'prefs-watchlist' => 'Lista de survelyence',
@@ -1864,7 +1871,7 @@ Se lo problèmo continue, veriéd-vos vers un [[Special:ListUsers/sysop|administ
 'backend-fail-writetemp' => 'Empossiblo d’ècrire dedens lo fichiér temporèro.',
 'backend-fail-closetemp' => 'Empossiblo de cllôre lo fichiér temporèro.',
 'backend-fail-read' => 'Empossiblo de liére lo fichiér $1.',
-'backend-fail-create' => 'Empossiblo de fâre lo fichiér $1.',
+'backend-fail-create' => 'Empossiblo d’ècrire lo fichiér $1.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Empossiblo de dèvèrrolyér « $1 » ; el est pas vèrrolyê.',
@@ -1900,7 +1907,7 @@ Pôt pas étre controlâ tot drêt por la sècuritât.',
 'img-auth-nopathinfo' => 'PATH_INFO manquent.
 Voutron sèrvor est pas dèfeni por passar cela enformacion.
 Fonccione pôt-étre en CGI et pués recognêt pas img_auth.
-[https://www.mediawiki.org/wiki/Manual:Image_Authorization Vêde los drêts d’émâge.]',
+Vêde https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'Lo chemin demandâ est pas lo rèpèrtouèro de tèlèchargement configurâ.',
 'img-auth-badtitle' => 'Empossiblo de construire un titro valido dês « $1 ».',
 'img-auth-nologinnWL' => 'Vos éte pas branchiê et pués « $1 » est pas dens la lista blanche.',
@@ -2201,6 +2208,9 @@ Contint sûrement yon ou ben un mouél de caractèros que pôvont pas étre util
 'allpages-bad-ns' => '{{SITENAME}} at gins d’èspâço de noms « $1 ».',
 'allpages-hide-redirects' => 'Cachiér les redirèccions',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'Vêre lo ples novél.',
+
 # Special:Categories
 'categories' => 'Catègories',
 'categoriespagetext' => '{{PLURAL:$1|Ceta catègorie contint|Cetes catègories contegnont}} des pâges ou ben des fichiérs mèdia.
@@ -2650,7 +2660,7 @@ Balyéd ce-desot una rêson justa (per ègzemplo en citent les pâges qu’ont 
 'badipaddress' => 'L’adrèce IP est fôssa.',
 'blockipsuccesssub' => 'Blocâjo reussi',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] at étâ blocâ.<br />
-Vêde la [[Special:BlockList|lista a les adrèces IP blocâs]] por revêre los blocâjos.',
+Vêde la [[Special:BlockList|lista des blocâjos]] por revêre los blocâjos.',
 'ipb-blockingself' => 'Vos éte prèst a vos blocar vos-mémo !  Éte-vos de sûr de lo volêr fâre ?',
 'ipb-confirmhideuser' => 'Vos éte prèst a blocar un usanciér avouéc « cachiér l’usanciér » activâ.  Cen suprime lo nom a l’usanciér dens totes les listes et les entrâs du jornal.  Éte-vos de sûr de lo volêr fâre ?',
 'ipb-edit-dropdown' => 'Changiér les rêsons de blocâjo',
@@ -2705,7 +2715,7 @@ Lo jornal de les suprèssions est disponiblo ce-desot :',
 'reblock-logentry' => 'at changiê los paramètres du blocâjo a [[$1]] avouéc una èxpiracion u $2 $3',
 'blocklogtext' => 'O est lo jornal des blocâjos et des dèblocâjos ux usanciérs.
 Les adrèces IP blocâs ôtomaticament sont pas listâs.
-Vêde la [[Special:BlockList|lista ux usanciérs et a les adrèces IP blocâs]] por vêre los banissements et los blocâjos que sont ora opèracionèls.',
+Vêde la [[Special:BlockList|lista des blocâjos]] por vêre los banissements et los blocâjos que sont ora opèracionèls.',
 'unblocklogentry' => 'at dèblocâ $1',
 'block-log-flags-anononly' => 'solament los usanciérs pas encartâs',
 'block-log-flags-nocreate' => 'crèacion de compto dèfendua',
@@ -2868,6 +2878,7 @@ lo rèsultat pôt adonc étre importâ dens un ôtro vouiqui qu’utilise la pro
 Por èxportar des pâges, buchiéd lors titros dens la bouèta de tèxto ce-desot, yon titro per legne, et pués chouèsésséd se vos voléd ou pas la vèrsion d’ora avouéc totes les vielyes vèrsions, avouéc les legnes de l’historico de la pâge, ou ben simplament la pâge d’ora avouéc des enformacions sur lo dèrriér changement.
 
 Dens cél dèrriér câs, vos pouede asse-ben utilisar un lim, coment [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] por la pâge « [[{{MediaWiki:Mainpage}}]] ».',
+'exportall' => 'Èxportar totes les pâges',
 'exportcuronly' => 'Èxportar ren que la vèrsion d’ora, sen l’historico complèt',
 'exportnohistory' => "----
 '''Nota :''' l’èxportacion de l’historico complèt de les pâges avouéc ceti formulèro at étâ dèsactivâ por des rêsons de capacitât.",
@@ -2884,7 +2895,7 @@ Dens cél dèrriér câs, vos pouede asse-ben utilisar un lim, coment [[{{#Speci
 # Namespace 8 related
 'allmessages' => 'Mèssâjos sistèmo',
 'allmessagesname' => 'Nom du mèssâjo',
-'allmessagesdefault' => 'Tèxto per dèfôt',
+'allmessagesdefault' => 'Mèssâjo per dèfôt',
 'allmessagescurrent' => 'Tèxto d’ora',
 'allmessagestext' => 'O est la lista des mèssâjos sistèmo disponiblos dens l’èspâço MediaWiki.
 Volyéd visitar la [//www.mediawiki.org/wiki/Localisation localisacion de MediaWiki] et pués [//translatewiki.net translatewiki.net] se vos voléd contribuar a la localisacion g·ènèrica de MediaWiki.',
@@ -2965,6 +2976,12 @@ Volyéd tornar èprovar.',
 'import-logentry-interwiki' => 'at importâ $1 per entèrvouiqui',
 'import-logentry-interwiki-detail' => '$1 vèrsion{{PLURAL:$1||s}} dês $2',
 
+# JavaScriptTest
+'javascripttest' => 'Èprôva de JavaScript',
+'javascripttest-title' => 'Èprôves de $1 en cors',
+'javascripttest-qunit-intro' => 'Vêde la [$1 documentacion de les èprôves] dessus mediawiki.org.',
+'javascripttest-qunit-heading' => 'Suita d’èprôva QUnit de JavaScript dessus MediaWiki',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Voutra pâge usanciér',
 'tooltip-pt-anonuserpage' => 'La pâge usanciér de l’adrèce IP avouéc laquinta vos contribuâd',
@@ -3095,6 +3112,7 @@ O est probâblament diu a un lim de vers un seto de defôr qu’aparêt sur la l
 'spambot_username' => 'Neteyâjo de spame per MediaWiki',
 'spam_reverting' => 'Rètablissement de la dèrriére vèrsion que contint gins de lim de vers $1',
 'spam_blanking' => 'Totes les vèrsions que contegnont des lims de vers $1 sont blanchies',
+'spam_deleting' => 'Totes les vèrsions que contegnont des lims de vers $1 sont suprimâs',
 
 # Info page
 'pageinfo-title' => 'Enformacions por « $1 »',
@@ -3889,6 +3907,9 @@ Vos devriâd avêr reçu un [{{SERVER}}{{SCRIPTPATH}}/COPYING ègzemplèro de la
 'version-software' => 'Programeries enstalâs',
 'version-software-product' => 'Marchandie',
 'version-software-version' => 'Vèrsion',
+'version-entrypoints' => 'URL de pouent d’entrâ',
+'version-entrypoints-header-entrypoint' => 'Pouent d’entrâ',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Chemin d’accès du fichiér',
@@ -4077,4 +4098,15 @@ Les émâges sont montrâs dens lor plêna rèsolucion, los ôtros fichiérs son
 'api-error-uploaddisabled' => 'Lo tèlèchargement est dèsactivâ sur ceti vouiqui.',
 'api-error-verification-error' => 'Cél fichiér pôt étre corrompu, ou ben son èxtension est fôssa.',
 
+# Durations
+'duration-seconds' => '$1 second{{PLURAL:$1|a|es}}',
+'duration-minutes' => '$1 menut{{PLURAL:$1|a|es}}',
+'duration-hours' => '$1 hor{{PLURAL:$1|a|es}}',
+'duration-days' => '$1 jorn{{PLURAL:$1||s}}',
+'duration-weeks' => '$1 seman{{PLURAL:$1|a|es}}',
+'duration-years' => '$1 an{{PLURAL:$1||s}}',
+'duration-decades' => '$1 dècèni{{PLURAL:$1|a|es}}',
+'duration-centuries' => '$1 sièclo{{PLURAL:$1||s}}',
+'duration-millennia' => '$1 milènèro{{PLURAL:$1||s}}',
+
 );
index cf92b49..fd91b54 100644 (file)
@@ -33,17 +33,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Änkelte stöögne ma ruchts kliken beårbe (brükt JavaScript)',
 'tog-showtoc' => 'Wis en inhåltsferteeknis for side ma mäs ås trii ouerschrafte',
 'tog-rememberpassword' => 'Aw diheere komputer foon duur önjmälde (maksimool for $1 {{PLURAL:$1|däi|deege}})',
-'tog-watchcreations' => 'Seelew måågede side automatisch bekiike',
-'tog-watchdefault' => 'Seelew änrede side automaatisch bekiike',
-'tog-watchmoves' => 'Seelew ferschääwene side automaatisch bekiike',
-'tog-watchdeletion' => 'Seelew wächhåålde side automatisch bekiike',
+'tog-watchcreations' => "Salew maaget sidjen an huuchlooset dateien leewen uun't uug behual",
+'tog-watchdefault' => "Salew feranert sidjen an dateien leewen uun't uug behual",
+'tog-watchmoves' => "Salew fersköwen sidjen an dateien leewen uun't uug behual",
+'tog-watchdeletion' => "Salew stregen sidjen an dateien leewen uun't uug behual",
 'tog-minordefault' => 'Äine änringe gewöönlik ås latj mårkiire',
 'tog-previewontop' => 'Forbekiiken boowen dåt beårbingswaning wise',
 'tog-previewonfirst' => 'Bai dåt jarst beårben åltens dåt forbekiiken wise',
 'tog-nocache' => 'Sidecache foon e browser deaktiwiire',
-'tog-enotifwatchlistpages' => 'Bai änringe önj bekiikede side E-maile siinje',
+'tog-enotifwatchlistpages' => "Sjüür mi en E-Mail, wan sidjen of dateien feranert wurd, diar ik uun't uug behual wal",
 'tog-enotifusertalkpages' => 'Bai änringe tu min brüker-diskusjoonssid E-Maile siinje',
-'tog-enotifminoredits' => 'Uk bai latje änringe tu bekiikede side E-maile siinje',
+'tog-enotifminoredits' => 'Sjüür mi uk bi letj feranrangen faan sidjen an dateien en E-Mail',
 'tog-enotifrevealaddr' => 'Min E-mail-adräs önj tising-E-maile wise',
 'tog-shownumberswatching' => 'Wis di tål foon wåchende brükere',
 'tog-oldsig' => 'Aktuel signatuur:',
@@ -379,6 +379,7 @@ Wan dåt ai di fål as, hääst dü eewäntuäl en fäägel önj e software fün
 'cannotdelete' => 'Jü sid unti dootäi "$1" köö ai straagen wårde.
 Dåt as flicht ål straagen foon huum ouders.',
 'cannotdelete-title' => 'Sidj „$1“ koon ei stregen wurd.',
+'delete-hook-aborted' => 'Det striken as faan en software-feranerang faan MediaWiki ferhanert wurden. Di grünj as ei bekäänd.',
 'badtitle' => 'Ferkiirde tiitel',
 'badtitletext' => 'Di tiitel foon jü anfrååged sid as üngülti, lääsi unti n üngültigen spräklink foon en ouder wiki.',
 'perfcached' => 'Jodiar dooten kem faan a cache an san ferlicht ei muar aktuel. Huuchstens {{PLURAL:$1|ian resultoot as|$1 resultooten san}} uun a cache.',
@@ -393,7 +394,7 @@ Ouffrååch: $2',
 'actionthrottledtext' => 'Dü hääst jüdeer aksjoon tu oofding bane en kort tidrüm ütfjard. Wees sü gödj än täiw en påår minuute än fersäk dåt et dan foon naien.',
 'protectedpagetext' => 'Jüdeer sid as for dåt beårben späred.',
 'viewsourcetext' => 'Dü koost jü kwäle foon jüdeer sid bekiike än kopiire.',
-'viewyourtext' => "Dü könst di code faan '''din feranerang''' faan detheer sidj uunluke an kopiare:",
+'viewyourtext' => "Dü könst di code faan '''din feranrang''' faan detdiar sidj uunluke an kopiare:",
 'protectedinterface' => 'Jüdeer sid önjthålt takst for ju brükerouerfläche foon e software än as späred, am masbrük tu ferhanern.',
 'editinginterface' => "'''Paase üüb:''' Üüb detdiar sidj stäänt tekst, diar faan't MediaWiki software brükt woort. Wan dü diar wat feranerst, feranerst dü di skak faan't Nuurdfresk Wikipedia.
 Wan dü wat auersaat wel, maage det mä [//translatewiki.net/wiki/Main_Page?setlang=frr Translatewiki], det as det MediaWiki lokalisiarangsprojekt.",
@@ -411,6 +412,7 @@ Jü späre wörd döör [[User:$1|$1]] ma grün "$2" inruchted.',
 Di grünj faan di administraator as: „$3“.',
 'invalidtitle-knownnamespace' => 'Ferkiard auerskraft uun di nöömrüm „$2“ an tekst „$3“',
 'invalidtitle-unknownnamespace' => 'Ferkiard auerskraft uun di ünbekäänd nöömrüm „$1“ an tekst „$2“',
+'exception-nologin' => 'Ei uunmeldet',
 
 # Virus scanner
 'virus-badscanner' => "Hiinje konfigurasjoon: ünbekånde fiirusscanner: ''$1''",
@@ -570,14 +572,14 @@ Tidwis paasuurd: $2',
 'passwordreset-emailerror-capture' => 'Detdiar E-Mail, wat oner uunwiset woort, wiar tu di onerwais, oober küd ei ufsjüürd wurd: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'Feranere det E-Mail-adres',
-'changeemail-header' => 'Feranere det E-Mail-adres',
-'changeemail-text' => 'Fal detheer formulaar hialandaal ütj, am din E-Mail-adres tu feranerin. Diarför skel dü din paaswurd uundu.',
+'changeemail' => 'Feranre det E-Mail-adres',
+'changeemail-header' => 'Feranre det E-Mail-adres',
+'changeemail-text' => 'Fal detdiar formulaar hialandaal ütj, am din E-Mail-adres tu feranrin. Diarför skel dü din paaswurd uundu.',
 'changeemail-no-info' => 'Dü möist önjmälded weese am ju sid diräkt tu tu gripen.',
 'changeemail-oldemail' => 'Aktuel e-mail adres',
 'changeemail-newemail' => 'Nei e-mail adres',
 'changeemail-none' => '(niin)',
-'changeemail-submit' => 'E-mail adres feranere',
+'changeemail-submit' => 'E-mail adres feranre',
 'changeemail-cancel' => 'Ufbreeg',
 
 # Edit page toolbar
@@ -604,10 +606,10 @@ Tidwis paasuurd: $2',
 'minoredit' => 'Bloot kleenihäide wörden feränred',
 'watchthis' => 'Kiike eefter jüdeer sid',
 'savearticle' => 'Sidj seekre',
-'preview' => 'Forlök',
-'showpreview' => 'Forlök wise',
-'showlivepreview' => 'Live-forkiik',
-'showdiff' => 'Änringe wise',
+'preview' => 'Iarst ans luke',
+'showpreview' => 'Iarst ans luke',
+'showlivepreview' => 'Glik uunluke',
+'showdiff' => 'Feranrangen wise',
 'anoneditwarning' => "Dü beårbest jüdeer sid ünönjmälded. Wan dü spikerst, wård din aktuäle IP-adräs önj e fesjoonshistoori aptiikned än as deerma for åltens '''ålgemiin''' sichtboor.",
 'anonpreviewwarning' => "''Dü bast ai önjmälded. Bai t spiikern wårt din IP-adräs önj e fersjoonshistoori awtiikned.''",
 'missingsummary' => "'''Haanewising:\"' Dü heest niinj tuhuupefooting önjjääwen.
@@ -673,12 +675,12 @@ Dü koost dideere tiitel aw da ouder side [[Special:Search/{{PAGENAME}}|säke]],
 'noarticletext-nopermission' => 'Jüdeer sid önjhålt uugenblaklik nuch nån täkst.
 Dü koost dideere tiitel aw da oudre side [[Special:Search/{{PAGENAME}}|säke]],
 unti<span class="plainlinks">önj da deertuhiirende [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} logböke säke] </span>.',
-'userpage-userdoesnotexist' => 'Dåt benjüterkonto "<nowiki>$1</nowiki>" as ai deer.
-Wees sü gödj än präif, weer dü jüdeer sid wörklik mååge/beårbe wååt.',
+'userpage-userdoesnotexist' => "Det brükerkonto ''$1'' as ei diar.
+Wel dü detdiar sidj würelk maage/bewerke?",
 'userpage-userdoesnotexist-view' => 'Benjüterkonto "$1" bestoont ai.',
 'blocked-notice-logextract' => 'Dideer benjüter as tutids spärd.
 For informasjoon füliet di leeste üttooch üt dåt benjüterspär-logbök:',
-'clearyourcache' => "'''Beaachte:''' Maage di cache faan dan browser leesag, wan dü a feranerangen sä wel.
+'clearyourcache' => "'''Beaachte:''' Maage di cache faan dan browser leesag, wan dü a feranrangen sä wel.
 * '''Firefox / Safari:''' Hual ''Shift'' bi't aktualisiarin, of trak ''Strg an F5'' of ''Strg an R'' (''⌘an R'' üüb en Mac)
 * '''Google Chrome:''' Trak ''Strg an Shift an R'' (''⌘an Shift an R'' üüb en Mac)
 * '''Internet Explorer:''' Hual ''Strg'' bi't aktualisiarin, of trak ''Strg an F5''
@@ -721,8 +723,8 @@ Wees so gud an kontroliare ales noch ans.",
 'editingcomment' => 'Beårben foon $1 (naien oufsnaas)',
 'editconflict' => 'Beårbingskonflikt: $1',
 'explainconflict' => "Hoker ööders hää detheer sidj feranert, üs dü jüst diarmä uun a gang wiarst.
-Boowen könst dü di aktuel stant sä. Oner stun din fernanerangen.
-Bluas wat '''boowen''' stäänt, woort seekert. Diaram kopiare din feranerangen boowen iin.
+Boowen könst dü di aktuel stant sä. Oner stun din fernanrangen.
+Bluas wat '''boowen''' stäänt, woort seekert. Diaram kopiare din feranrangen boowen iin.
 An do trak „{{int:savearticle}}“.",
 'yourtext' => 'Din täkst',
 'storedversion' => 'Spiikerd färsjoon',
@@ -799,8 +801,8 @@ Deer {{PLURAL:$2|mötj ai mör ås 1 apteel|mönje ai mör ås $1 apteele}} wees
 'parser-unstrip-recursion-limit' => 'Tuföl jinsidjag ferwisangen bi $1',
 
 # "Undo" feature
-'undo-success' => 'Detheer feranerang koon turag nimen wurd. 
-Luke oner, of dü det uk würelk du wel, an do seekre din feranerangen.',
+'undo-success' => 'Detdiar feranrang koon turag nimen wurd. 
+Luke oner, of dü det uk würelk du wel, an do seekre din feranrangen.',
 'undo-failure' => 'Jü änring köö ai tunintemååged wårde, deer di bedrååwede oufsnaas intwasche feränred wörd.',
 'undo-norev' => 'Jü beårbing köö ai tunintemååged wårde, deer jü ai bestoont unti sleeked wörd.',
 'undo-summary' => 'Änring $1 foon [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskusjoon]]) tunintemååged.',
@@ -926,7 +928,7 @@ Dü heest deeraw nåån tugraawe.',
 'revdelete-modify-missing' => "Bi't bewerkin faan ID $1 as wat skiaf gingen: At waant uun a dootenbeenk!",
 'revdelete-no-change' => "'''Waarskau:''' Di iindrach faan di $1, am a klook $2 hää al jodiar iinstelangen.",
 'revdelete-concurrent-change' => "Bi't bewerkin faan di iindrach di $1, am a klook $2 as wat skiaf gingen: At sjocht so ütj, üs wan hoker ööders det bewerket hää, iar dü det bewerke wulst. Luke iin uun a logbuken.",
-'revdelete-only-restricted' => "Bi't fersteegen faan di iindrach di $1, am a klook $2 as wat skiaf gingen: Dü könst di iindrach ei föör administratooren fersteeg, saner ööder iinstelangen tu feranerin.",
+'revdelete-only-restricted' => "Bi't fersteegen faan di iindrach di $1, am a klook $2 as wat skiaf gingen: Dü könst di iindrach ei föör administratooren fersteeg, saner ööder iinstelangen tu feranrin.",
 'revdelete-reason-dropdown' => "*Grünjer för't striken san miast
 ** Copyright woort ei iinhäälen
 ** Persöönelk informatsjuunen, diar näämen wat uungung",
@@ -1059,9 +1061,9 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 # Preferences page
 'preferences' => 'Önjstalinge',
 'mypreferences' => 'Önjstalinge',
-'prefs-edits' => 'Taal faan feranerangen:',
+'prefs-edits' => 'Taal faan feranrangen:',
 'prefsnologin' => 'Ai önjmälded',
-'prefsnologintext' => 'Dü skel <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} uunmeldet]</span> wees, am din iinstelangen tu feranerin.',
+'prefsnologintext' => 'Dü skel <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} uunmeldet]</span> wees, am din iinstelangen tu feranrin.',
 'changepassword' => 'Pååsuurd änre',
 'prefs-skin' => 'Skak',
 'skin-preview' => 'Forlök',
@@ -1075,12 +1077,12 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 'prefs-watchlist' => "Uun't uug behual",
 'prefs-watchlist-days' => "So föl daar uun't uug behual:",
 'prefs-watchlist-days-max' => 'Ei muar üs {{PLURAL:$1|ään dai|$1 daar}}',
-'prefs-watchlist-edits' => 'Ei muar feranerangen üs:',
+'prefs-watchlist-edits' => 'Ei muar feranrangen üs:',
 'prefs-watchlist-edits-max' => 'Ai mör as 1000',
 'prefs-watchlist-token' => "Token för uun't uug behualen:",
 'prefs-misc' => 'Dit än dat',
 'prefs-resetpass' => 'Pååsuurd änre',
-'prefs-changeemail' => 'Feranere det E-Mail-adres',
+'prefs-changeemail' => 'Feranre det E-Mail-adres',
 'prefs-setemail' => 'E-Mail-adres fäästlei:',
 'prefs-email' => 'E-Mail iinstelangen',
 'prefs-rendering' => 'Skak',
@@ -1095,10 +1097,10 @@ A nawigatsjuun links saat ales weder turag üüb di ual stant.',
 'resultsperpage' => 'So fölsis komt det föör per sidj:',
 'stub-threshold' => 'Formatiarang faan links <a href="#" class="stub">för letj sidjen</a> (uun Byte):',
 'stub-threshold-disabled' => 'Ufsteld',
-'recentchangesdays' => 'Soföl daar skel a „leetst feranerangen“ uunwise:',
+'recentchangesdays' => 'Soföl daar skel a „leetst feranrangen“ uunwise:',
 'recentchangesdays-max' => 'Ei muar üs {{PLURAL:$1|ään dai|$1 daar}}',
-'recentchangescount' => 'Soföl feranerangen skel uunwiset wurd:',
-'prefs-help-recentchangescount' => 'Det san a leetst feranerangen, wersjuunen an logbuken.',
+'recentchangescount' => 'Soföl feranrangen skel uunwiset wurd:',
+'prefs-help-recentchangescount' => 'Det san a leetst feranrangen, wersjuunen an logbuken.',
 'prefs-help-watchlist-token' => "Wan dü detdiar fial mä en hiamelken code ütjfalst, woort en RSS-feed iinracht. Arken mä didiar code koon do sä, wat dü uun't uug behual wel. Diaram skul hi ei so ianfach wees, nem dach didiar: $1",
 'savedprefs' => 'Din iinstelangen san seekert wurden.',
 'timezonelegend' => 'Tidjsoon:',
@@ -1178,45 +1180,45 @@ Do san jo ual iinstelangen wech.',
 'userrights-lookup-user' => 'Brükersköölen bewerke',
 'userrights-user-editname' => 'Brükernööm:',
 'editusergroup' => 'Brükersköölen bewerke',
-'editinguser' => "Brükerrochten faan '''[[User:$1|$1]]''' $2 feranere",
+'editinguser' => "Brükerrochten faan '''[[User:$1|$1]]''' $2 feranre",
 'userrights-editusergroup' => 'Lasmootskap tu brükersköölen bewerke',
 'saveusergroups' => 'Brükersköölen seekre',
 'userrights-groupsmember' => 'Lasmoot faan:',
 'userrights-groupsmember-auto' => 'Faan salew lasmoot faan:',
-'userrights-groups-help' => 'Dü könst feranere, tu hün brükerskööl di brüker hiirt:
+'userrights-groups-help' => 'Dü könst feranre, tu hün brükerskööl di brüker hiirt:
 * En uunkrüsagt kasche ment, di brüker hiirt diartu.
 * En ei uunkrüsagt kasche ment, di brüker hiart ei diartu.
 * En * ment, dat dü det brükerrocht ei weder wechnem könst (of amkiard).',
 'userrights-reason' => 'Grünj:',
-'userrights-no-interwiki' => 'Dü heest ei det rocht, am brükerrochten uun ööder wikis tu feranerin.',
+'userrights-no-interwiki' => 'Dü heest ei det rocht, am brükerrochten uun ööder wikis tu feranrin.',
 'userrights-nodatabase' => 'Det dootenbeenk $1 jaft at ei, tumanst ei lokaal.',
-'userrights-nologin' => 'Dü mutst di mä en administraator-brükerkonto [[Special:UserLogin|uunmelde]], wan dü brükerrochten feranere wel.',
-'userrights-notallowed' => 'Dü heest ei det rocht, am brükerrochten tu feranerin.',
-'userrights-changeable-col' => 'Lasmootskapen, diar dü feranere könst',
-'userrights-unchangeable-col' => 'Lasmootskapen, diar dü ei feranere könst',
+'userrights-nologin' => 'Dü mutst di mä en administraator-brükerkonto [[Special:UserLogin|uunmelde]], wan dü brükerrochten feranre wel.',
+'userrights-notallowed' => 'Dü heest ei det rocht, am brükerrochten tu feranrin.',
+'userrights-changeable-col' => 'Lasmootskapen, diar dü feranre könst',
+'userrights-unchangeable-col' => 'Lasmootskapen, diar dü ei feranre könst',
 
 # Groups
 'group' => 'Skööl:',
-'group-user' => 'Brükere',
-'group-autoconfirmed' => 'Registriirde brükere',
+'group-user' => 'Brükern',
+'group-autoconfirmed' => 'Registriaret brükern',
 'group-bot' => 'Bots',
-'group-sysop' => 'Administratoore',
-'group-bureaucrat' => 'Bürokraate',
+'group-sysop' => 'Administratooren',
+'group-bureaucrat' => 'Bürokraaten',
 'group-suppress' => 'Oversighter',
 'group-all' => '(aaltumaal)',
 
 'group-user-member' => '{{GENDER:$1|brüker}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|gudkäänd brüker}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|registriaret brüker}}',
 'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => '{{GENDER:$1|administraator}}',
 'group-bureaucrat-member' => '{{GENDER:$1|bürokraat}}',
 'group-suppress-member' => '{{GENDER:$1|oversighter}}',
 
-'grouppage-user' => '{{ns:project}}:Brükere',
-'grouppage-autoconfirmed' => '{{ns:project}}:Registriirde brükere',
+'grouppage-user' => '{{ns:project}}:Brükern',
+'grouppage-autoconfirmed' => '{{ns:project}}:Registriaret brükern',
 'grouppage-bot' => '{{ns:project}}:Bots',
-'grouppage-sysop' => '{{ns:project}}:Administratoore',
-'grouppage-bureaucrat' => '{{ns:project}}:Bürokraate',
+'grouppage-sysop' => '{{ns:project}}:Administratooren',
+'grouppage-bureaucrat' => '{{ns:project}}:Bürokraaten',
 'grouppage-suppress' => '{{ns:project}}:Oversighter',
 
 # Rights
@@ -1225,7 +1227,7 @@ Do san jo ual iinstelangen wech.',
 'right-createpage' => 'Sidjen maage (saner diskusjuunssidjen)',
 'right-createtalk' => 'Diskusjuunssidjen maage',
 'right-createaccount' => 'Brükerkonto iinracht',
-'right-minoredit' => 'Feranerangen üs letj kääntiakne.',
+'right-minoredit' => 'Feranrangen üs letj kääntiakne',
 'right-move' => 'Sidjen fersküüw',
 'right-move-subpages' => 'Sidjen mä onersidjen fersküüw',
 'right-move-rootuserpages' => 'Hood-brükersidj fersküüw',
@@ -1239,16 +1241,18 @@ Do san jo ual iinstelangen wech.',
 'right-purge' => 'Sidjen-cache leesag maage saner efterfraagin',
 'right-autoconfirmed' => 'Hualew-seekert sidjen bewerke',
 'right-bot' => 'Automatisiaret bewerke',
-'right-nominornewtalk' => 'Letj feranerangen üüb diskusjuunssidjen wurd ei üs „nei noorachten“ uunwiset.',
+'right-nominornewtalk' => 'Letj feranrangen üüb diskusjuunssidjen wurd ei üs „nei noorachten“ uunwiset.',
 'right-apihighlimits' => 'Huuger taalen für API-uunfraagen brük',
 'right-writeapi' => 'Write-API brük',
 'right-delete' => 'Sidjen strik',
 'right-bigdelete' => 'Sidjen mä föl wersjuunen strik',
 'right-deleterevision' => 'Enkelt wersjuunen faan en sidj strik of turaghaale',
+'right-browsearchive' => 'Sjük stregen sidjen',
 'right-sendemail' => 'E-mails tu oudere brükere schake',
 
 # User rights log
 'rightslog' => 'Ruchte-logbök',
+'rightsnone' => '(-)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'jüdeer sid leese',
@@ -1256,29 +1260,34 @@ Do san jo ual iinstelangen wech.',
 'action-createpage' => 'side mååge',
 'action-createtalk' => 'diskusjoonside mååge',
 'action-createaccount' => 'jüdeer brükerkonto mååge',
-'action-minoredit' => 'detdiar feranerang üs letj kääntiakne',
+'action-minoredit' => 'detdiar feranrang üs letj kääntiakne',
 'action-move' => 'jüdeer sid ferschüwe',
 'action-move-subpages' => 'jüdeer sid än unerside ferschüwe',
+'action-move-rootuserpages' => 'hood-brükersidj fersküüw',
 'action-movefile' => 'jüdeer sid ferschüwe',
+'action-delete' => 'detdiar sidj strik',
+'action-browsearchive' => 'sjük stregen sidjen',
+'action-undelete' => 'detdiar sidj weder iinstel',
+'action-sendemail' => 'e-mails sjüür',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|änring|änringe}}',
 'recentchanges' => 'Leeste änringe',
 'recentchanges-legend' => 'Wis-opsjoone',
-'recentchanges-summary' => "Üüb detheer sidj könst dü a leetst feranerangen faan't Nuurdfresk Wikipedia ferfulge.",
+'recentchanges-summary' => "Üüb detdiar sidj könst dü a leetst feranrangen faan't Nuurdfresk Wikipedia ferfulge.",
 'recentchanges-feed-description' => 'Ferfülie ma dåtheer feed da leeste änringe önj {{SITENAME}}.',
 'recentchanges-label-newpage' => 'Nei sidj uunlaanj',
-'recentchanges-label-minor' => 'Letj feranerang',
-'recentchanges-label-bot' => 'Feranerang faan en bot',
-'recentchanges-label-unpatrolled' => 'Detheer feranerang as noch ei efterluket wurden',
+'recentchanges-label-minor' => 'Letj feranrang',
+'recentchanges-label-bot' => 'Feranrang faan en bot',
+'recentchanges-label-unpatrolled' => 'Detdiar feranrang as noch ei efterluket wurden',
 'rcnote' => "Wised {{PLURAL:\$1|wård '''1''' änring|wårde da leeste '''\$''' änringe}} {{PLURAL:\$2|foon e leest däi|foon da leeste '''\$2''' deege}}. Stånd: \$4, am e klook \$5.",
-'rcnotefrom' => "Diar wurd a feranerangen sant '''$2'''uunwiset (ei muar üs '''$1''' feranerangen).",
+'rcnotefrom' => "Diar wurd a feranrangen sant '''$2'''uunwiset (ei muar üs '''$1''' feranrangen).",
 'rclistfrom' => 'Bloot änringe sunt $1 wise.',
 'rcshowhideminor' => 'Latje änringe $1',
 'rcshowhidebots' => 'Bots $1',
 'rcshowhideliu' => 'Önjmäldede brükere $1',
 'rcshowhideanons' => 'Anonymen brüker $1',
-'rcshowhidepatr' => '$1 efterluket feranerangen',
+'rcshowhidepatr' => '$1 efterluket feranrangen',
 'rcshowhidemine' => 'Äine tujeefte $1',
 'rclinks' => 'Wis da leeste $1 änringe foon da leeste $2 deege.<br />$3',
 'diff' => 'ferschääl',
@@ -1287,29 +1296,48 @@ Do san jo ual iinstelangen wech.',
 'show' => 'önjbläne',
 'minoreditletter' => 'L',
 'newpageletter' => 'N',
-'boteditletter' => 'b',
+'boteditletter' => 'B',
 'rc-enhanced-expand' => 'Detaile wise (JavaScript as nüsi)',
 'rc-enhanced-hide' => 'Detaile fersteege',
+'rc-old-title' => 'tuiarst maaget üs „$1“',
 
 # Recent changes linked
-'recentchangeslinked' => 'Änringe bai ferlinkte side',
-'recentchangeslinked-toolbox' => 'Feranerangen bi ferlinkt sidjen',
-'recentchangeslinked-title' => 'Änringe bai side, da foon "$1" ferlinked san',
-'recentchangeslinked-noresult' => 'Uun detdiar tidj san jo ferwiset sidjen ei feranert wurden.',
+'recentchangeslinked' => 'Feranrangen bi ferlinket sidjen',
+'recentchangeslinked-feed' => 'Feranrangen bi ferlinket sidjen',
+'recentchangeslinked-toolbox' => 'Feranrangen bi ferlinket sidjen',
+'recentchangeslinked-title' => 'Feranrangen bi sidjen, diar faan "$1" ferlinket san',
+'recentchangeslinked-noresult' => 'Uun detdiar tidj san jo ferlinket sidjen ei feranert wurden.',
 'recentchangeslinked-summary' => "Jüdeer speetsjoolsid listet da leeste änringe bai da ferlinked side ap (btw. bai kategoriie tu da lasmoote foon jüdeer kategorii). Side aw din [[Special:Watchlist|eefterkiikliste]] san '''fåt''' deerstald.",
 'recentchangeslinked-page' => 'Sid:',
 'recentchangeslinked-to' => 'Wis änringe aw side, da heerjurt ferlinke',
 
 # Upload
 'upload' => 'Huuchschake',
+'uploadbtn' => 'Datei huuchsjüür',
 'uploadnologin' => 'Ai önjmälded',
 'uploadnologintext' => 'Dü möist [[Special:UserLogin|önjmälded weese]], am dat dü dootäie huuchsiinje koost.',
 'upload_directory_missing' => 'Dåt aplees-fertiiknis ($1) breecht än köö ai foon di wäbsärwer mååged wårde.',
 'upload_directory_read_only' => 'Dåt aplees-fertiiknis ($1) koon ai foon e wäbsärver beschraawen wårde.',
 'uploaderror' => 'Aplees-fäägel',
+'uploadlog' => 'datei logbuk',
 'uploadlogpage' => 'Dåtäi-logbök',
 'filedesc' => 'Beskriiwang',
+'fileuploadsummary' => 'Beskriiwang',
+'filesource' => 'Kwel',
+'uploadedfiles' => 'Huuchsjüürd dateien',
 'uploadedimage' => 'heet "[[$1]]" huuchsånd',
+'watchthisupload' => 'Luke efter detdiar datei',
+
+'upload-file-error' => 'Diar as wat skiaf gingen',
+
+# File backend
+'backend-fail-stream' => 'Det datei $1 küd ei auerdraanj wurd.',
+'backend-fail-delete' => 'Det datei $1 küd ei stregen wurd.',
+'backend-fail-store' => 'Det datei $1 küd ei oner $2 seekert wurd.',
+'backend-fail-copy' => 'Det datei $1 küd ei efter $2 kopiaret wurd.',
+'backend-fail-move' => 'Det datei $1 küd ei efter $2 fersköwen wurd.',
+'backend-fail-read' => 'Det datei $1 küd ei leesen wurd.',
+'backend-fail-create' => 'Det datei $1 küd ei seekert wurd.',
 
 'license' => 'Lisens:',
 'license-header' => 'Lisens',
@@ -1342,7 +1370,7 @@ Det beskriiwang faan't [$2 beskriiwangssidj] woort oner uunwiset.",
 'randompage' => 'Tufali sid',
 
 # Statistics
-'statistics' => 'Statistiik',
+'statistics' => 'Statistik',
 
 'disambiguationspage' => 'Template:Muardüüdag artiikel',
 
@@ -1772,11 +1800,15 @@ Deeraw föliende sidelinke önj dåtseelwi ra definiire ütnååme, önj di kont
 'monthsall' => 'åle',
 'limitall' => 'åle',
 
+# Table pager
+'ascending_abbrev' => 'ap',
+'descending_abbrev' => 'deel',
+
 # Auto-summaries
-'autosumm-blank' => 'Det sidj wurd leesagd.',
-'autosumm-replace' => 'Di iinhual wurd ütjbütjet mä "$1"',
+'autosumm-blank' => 'Det sidj as leesag maaget wurden.',
+'autosumm-replace' => 'Di tekst as ütjbütjet wurden mä "$1"',
 'autoredircomment' => 'Sidj tu [[$1]] widjerfeerd',
-'autosumm-new' => 'Det sidj wurd nei uunlaanj: "$1"',
+'autosumm-new' => 'Det sidj as nei uunlaanj wurden: "$1"',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Eefterkiiklist: änringe',
@@ -1811,6 +1843,17 @@ Deeraw föliende sidelinke önj dåtseelwi ra definiire ütnååme, önj di kont
 'htmlform-selectorother-other' => 'Oudere',
 
 # New logging system
+'logentry-delete-delete' => '$1 hää det sidj $3 stregen',
+'logentry-delete-restore' => '$1 hää det sidj $3 weder iinsteld',
+'logentry-delete-event' => '$1 hää det uunlukin feranert faan {{PLURAL:$5|en logbuk iindrach|$5 logbuk iindracher}} üüb $3: $4',
+'logentry-delete-revision' => '$1 hää det uunlukin feranert faan {{PLURAL:$5|ian wersjuun|$5 wersjuunen}} faan det sidj $3: $4',
+'logentry-delete-event-legacy' => '$1 hää det uunlukin feranert faan logbuk iindracher üüb $3',
+'logentry-delete-revision-legacy' => '$1 hää det uunlukin feranert faan wersjuunen faan det sidj $3',
+'logentry-suppress-delete' => '$1 hää det sidj $3 wechtrakt',
+'logentry-suppress-event' => '$1 hää stalswigin det uunlukin feranert faan {{PLURAL:$5|en logbuk iindrach|$5 logbuk iindracher}} üüb $3: $4',
+'logentry-suppress-revision' => '$1 hää stalswigin det uunlukin feranert faan {{PLURAL:$5|ian wersjuun|$5 wersjuunen}} faan det sidj $3: $4',
+'logentry-suppress-event-legacy' => '$1 hää stalswigin det uunlukin fernanert faan logbuk iindracher üüb $3',
+'logentry-suppress-revision-legacy' => '$1 hää stalswigin det uunlukin feranert faan wersjuunen faan det sidj $3',
 'revdelete-uname-hid' => 'brükernoome ferstäägen',
 'revdelete-uname-unhid' => 'brükernoome frijääwen',
 'revdelete-restricted' => 'gränse jüle uk for administratoore',
@@ -1820,4 +1863,15 @@ Deeraw föliende sidelinke önj dåtseelwi ra definiire ütnååme, önj di kont
 'logentry-move-move_redir' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen.',
 'logentry-move-move_redir-noredirect' => '$1 hää det sidj $3 efter $4 fersköwen an diarbi en widjerfeerang auerskrewen saner salew en widjerfeerang uuntuleien.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunden}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minüüt|minüüten}}',
+'duration-hours' => '$1 {{PLURAL:$1|stünj|stünjen}}',
+'duration-days' => '$1 {{PLURAL:$1|dai|daar}}',
+'duration-weeks' => '$1 {{PLURAL:$1|weg|wegen}}',
+'duration-years' => '$1 {{PLURAL:$1|juar|juaren}}',
+'duration-decades' => '$1 {{PLURAL:$1|juartjiint|juartjiinten}}',
+'duration-centuries' => '$1 {{PLURAL:$1|juarhunert|juarhunerten}}',
+'duration-millennia' => '$1 {{PLURAL:$1|juardüüsen|juardüüsenen}}',
+
 );
index 30fea4a..9629923 100644 (file)
@@ -225,7 +225,7 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Subliñar as ligazóns:',
 'tog-justify' => 'Xustificar os parágrafos',
-'tog-hideminor' => 'Agochar as edicións pequenas na páxina de cambios recentes',
+'tog-hideminor' => 'Agochar as edicións pequenas nos cambios recentes',
 'tog-hidepatrolled' => 'Agochar as edicións patrulladas nos cambios recentes',
 'tog-newpageshidepatrolled' => 'Agochar as páxinas revisadas da lista de páxinas novas',
 'tog-extendwatchlist' => 'Expandir a lista de vixilancia para mostrar todos os cambios e non só os máis recentes',
@@ -235,19 +235,19 @@ $messages = array(
 'tog-editondblclick' => 'Editar as páxinas logo de facer dobre clic (cómpre JavaScript)',
 'tog-editsection' => 'Permitir a edición de seccións mediante as ligazóns "[editar]"',
 'tog-editsectiononrightclick' => 'Permitir a edición de seccións premendo co botón dereito nos títulos das seccións (cómpre JavaScript)',
-'tog-showtoc' => 'Mostrar o índice (para páxinas con máis de tres cabeceiras)',
+'tog-showtoc' => 'Mostrar o índice (para as páxinas con máis de tres cabeceiras)',
 'tog-rememberpassword' => 'Lembrar o meu contrasinal neste navegador (ata $1 {{PLURAL:$1|día|días}})',
-'tog-watchcreations' => 'Engadir as páxinas que cree á miña lista de vixilancia',
-'tog-watchdefault' => 'Engadir as páxinas que edite á miña lista de vixilancia',
-'tog-watchmoves' => 'Engadir as páxinas que mova á miña lista de vixilancia',
-'tog-watchdeletion' => 'Engadir as páxinas que borre á miña lista de vixilancia',
+'tog-watchcreations' => 'Engadir as páxinas que cree e os ficheiros que cargue á miña lista de vixilancia',
+'tog-watchdefault' => 'Engadir as páxinas e os ficheiros que edite á miña lista de vixilancia',
+'tog-watchmoves' => 'Engadir as páxinas e os ficheiros que mova á miña lista de vixilancia',
+'tog-watchdeletion' => 'Engadir as páxinas e os ficheiros que borre á miña lista de vixilancia',
 'tog-minordefault' => 'Marcar por omisión todas as edicións como pequenas',
-'tog-previewontop' => 'Mostrar o botón de vista previa antes da caixa de edición e non despois dela',
+'tog-previewontop' => 'Mostrar a vista previa antes da caixa de edición',
 'tog-previewonfirst' => 'Mostrar a vista previa na primeira edición',
 'tog-nocache' => 'Desactivar a memoria caché do navegador',
-'tog-enotifwatchlistpages' => 'Enviádeme unha mensaxe de correo electrónico cando unha páxina da miña lista de vixilancia cambie',
+'tog-enotifwatchlistpages' => 'Enviádeme unha mensaxe de correo electrónico cando unha páxina ou un ficheiro da miña lista de vixilancia sufra un cambio',
 'tog-enotifusertalkpages' => 'Enviádeme unha mensaxe de correo electrónico cando a miña páxina de conversa cambie',
-'tog-enotifminoredits' => 'Enviádeme tamén unha mensaxe de correo electrónico cando se produzan edicións pequenas nas páxinas',
+'tog-enotifminoredits' => 'Enviádeme tamén unha mensaxe de correo electrónico cando se produzan edicións pequenas nas páxinas ou nos ficheiros',
 'tog-enotifrevealaddr' => 'Revelar o meu enderezo de correo electrónico nos correos de notificación',
 'tog-shownumberswatching' => 'Mostrar o número de usuarios que están a vixiar',
 'tog-oldsig' => 'Sinatura actual:',
@@ -264,8 +264,8 @@ $messages = array(
 'tog-watchlisthideanons' => 'Agochar as edicións dos usuarios anónimos na lista de vixilancia',
 'tog-watchlisthidepatrolled' => 'Agochar as edicións patrulladas na lista de vixilancia',
 'tog-nolangconversion' => 'Desactivar a conversión de variantes',
-'tog-ccmeonemails' => 'Enviar ao meu enderezo copia das mensaxes que envíe a outros usuarios',
-'tog-diffonly' => 'Non mostrar o contido da páxina debaixo das diferenzas entre edicións (dif)',
+'tog-ccmeonemails' => 'Enviádeme ao meu enderezo unha copia das mensaxes de correo electrónico que envíe a outros usuarios',
+'tog-diffonly' => 'Non mostrar o contido da páxina debaixo das diferenzas entre edicións',
 'tog-showhiddencats' => 'Mostrar as categorías ocultas',
 'tog-noconvertlink' => 'Desactivar a conversión dos títulos de ligazón',
 'tog-norollbackdiff' => 'Omitir as diferenzas despois de levar a cabo unha reversión de edicións',
@@ -580,6 +580,8 @@ Por favor, comuníquello a un [[Special:ListUsers/sysop|administrador]] tomando
 'cannotdelete' => 'Non se puido borrar a páxina ou imaxe "$1".
 Se cadra, xa a borrou alguén.',
 'cannotdelete-title' => 'Non se pode borrar a páxina "$1"',
+'delete-hook-aborted' => 'O borrado foi abortado polo asociador.
+Este non deu ningunha explicación.',
 'badtitle' => 'Título incorrecto',
 'badtitletext' => 'O título da páxina pedida non era válido, estaba baleiro ou proviña dunha ligazón interlingua ou interwiki incorrecta.
 Pode conter un ou máis caracteres dos que non se poden empregar nos títulos.',
@@ -615,6 +617,8 @@ O motivo achegado é ''$2''.",
 O administrador que bloqueou o repositorio achegou este motivo: "$3".',
 'invalidtitle-knownnamespace' => 'Título inválido co espazo de nomes "$2" e o texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título inválido cun número de espazo de nomes, $1, descoñecido e o texto "$2"',
+'exception-nologin' => 'Non accedeu ao sistema',
+'exception-nologin-text' => 'Esta páxina ou acción necesita que vostede acceda ao sistema neste wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Configuración errónea: escáner de virus descoñecido: ''$1''",
@@ -1303,7 +1307,7 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados
 'prefs-rc' => 'Cambios recentes',
 'prefs-watchlist' => 'Lista de vixilancia',
 'prefs-watchlist-days' => 'Número de días que mostrar na lista de vixilancia:',
-'prefs-watchlist-days-max' => 'Máximo $1 {{PLURAL:$1|día|días}}',
+'prefs-watchlist-days-max' => 'Máximo: $1 {{PLURAL:$1|día|días}}',
 'prefs-watchlist-edits' => 'Número máximo de edicións que mostrar na lista de vixilancia completa:',
 'prefs-watchlist-edits-max' => 'Número máximo: 1000',
 'prefs-watchlist-token' => 'Pase para a lista de vixilancia:',
@@ -1325,7 +1329,7 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados
 'stub-threshold' => 'Límite superior para o formato de <a href="#" class="stub">ligazóns de bosquexo</a> (bytes):',
 'stub-threshold-disabled' => 'Desactivado',
 'recentchangesdays' => 'Número de días a mostrar nos cambios recentes:',
-'recentchangesdays-max' => 'Máximo $1 {{PLURAL:$1|día|días}}',
+'recentchangesdays-max' => 'Máximo: $1 {{PLURAL:$1|día|días}}',
 'recentchangescount' => 'Número de edicións a mostrar por defecto:',
 'prefs-help-recentchangescount' => 'Isto inclúe os cambios recentes, os historiais e mais os rexistros.',
 'prefs-help-watchlist-token' => 'Ao encher este campo cunha clave secreta xerarase unha fonte de novas RSS para a súa lista de vixilancia.
@@ -1916,7 +1920,7 @@ Poida que queira editar a descrición da [$2 páxina de descrición do ficheiro]
 '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 */',
 
 # File reversion
-'filerevert' => 'Desfacer $1',
+'filerevert' => 'Reverter $1',
 'filerevert-legend' => 'Reverter o ficheiro',
 'filerevert-intro' => 'Está a piques de reverter o ficheiro "\'\'\'[[Media:$1|$1]]\'\'\'" ata a [$4 versión do $2 ás $3].',
 'filerevert-comment' => 'Motivo:',
@@ -2582,7 +2586,7 @@ Olle a [[Special:BlockList|lista de bloqueos]] para revisalo.',
 'unblockip' => 'Desbloquear o usuario',
 'unblockiptext' => 'Use o seguinte formulario para dar de novo acceso de escritura a un enderezo IP ou usuario que estea bloqueado.',
 'ipusubmit' => 'Retirar este bloqueo',
-'unblocked' => '"[[User:$1|$1]]" foi desbloqueado',
+'unblocked' => '[[User:$1|$1]] foi {{GENDER:$1|desbloqueado|desbloqueada}}',
 'unblocked-range' => '$1 foi desbloqueado',
 'unblocked-id' => 'O bloqueo $1 foi eliminado',
 'blocklist' => 'Usuarios bloqueados',
@@ -2795,7 +2799,7 @@ No último caso, pode usar tamén unha ligazón, por exemplo [[{{#Special:Export
 'export-pagelinks' => 'Engadir as páxinas ligadas a unha profundidade de:',
 
 # Namespace 8 related
-'allmessages' => 'Todas as mensaxes do sistema',
+'allmessages' => 'Mensaxes do sistema',
 'allmessagesname' => 'Nome',
 'allmessagesdefault' => 'Texto predeterminado',
 'allmessagescurrent' => 'Texto actual',
@@ -3900,6 +3904,8 @@ En caso contrario, pode empregar o formulario sinxelo inferior. O seu comentario
 'api-error-empty-file' => 'O ficheiro que enviou estaba baleiro.',
 'api-error-emptypage' => 'Non está permitida a creación de páxinas novas que estean baleiras.',
 'api-error-fetchfileerror' => 'Erro interno: Houbo un problema ao buscar o ficheiro.',
+'api-error-fileexists-forbidden' => 'Xa existe un ficheiro co nome "$1". Non se pode sobrescribir.',
+'api-error-fileexists-shared-forbidden' => 'Xa existe un ficheiro co nome "$1" no repositorio de ficheiros compartidos. Non se pode sobrescribir.',
 'api-error-file-too-large' => 'O ficheiro que enviou era grande de máis.',
 'api-error-filename-tooshort' => 'O nome do ficheiro é curto de máis.',
 'api-error-filetype-banned' => 'Este tipo de ficheiro está prohibido.',
index 69f8b78..94fb929 100644 (file)
@@ -1434,7 +1434,7 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'nchanges' => '$1 {{PLURAL:$1|Änderig|Änderige}}',
 'recentchanges' => 'Letschti Änderige',
 'recentchanges-legend' => 'Optione vu dr Aazeig',
-'recentchanges-summary' => 'Uff däre Syte chönne Si die letschte Änderige in däm Wiki aaluege.',
+'recentchanges-summary' => 'Uf däre Syte chasch di letschte Änderige in däm Wiki aaluege.',
 'recentchanges-feed-description' => 'Di letschten Änderige vo {{SITENAME}} i däm Feed abonniere.',
 'recentchanges-label-newpage' => 'Die Bearbeitig het e neji Syte aagleit',
 'recentchanges-label-minor' => 'Des isch e chleini Änderig',
index f6d58d5..0bd6727 100644 (file)
@@ -154,7 +154,7 @@ $messages = array(
 'tog-hidepatrolled' => 'હાલના સલામતી માટે કરવામાં આવેલાં થયેલા ફેરફારો છુપાવો.',
 'tog-newpageshidepatrolled' => 'નવાં પાનાંની યાદીમાંથી દેખરેખ હેઠળનાં પાનાં છુપાવો',
 'tog-extendwatchlist' => 'ધ્યાનસૂચિને વિસ્તૃત કરો જેથી,ફક્ત તાજેતરનાજ નહીં, બધા આનુષાંગિક ફેરફારો જોઇ શકાય',
-'tog-usenewrc' => 'તાજેતરનાં વર્ધિત ફેરફારો (જાવાસ્ક્રીપ્ટ જરૂરી)',
+'tog-usenewrc' => 'તાજેતરનાં વર્ધિત ફેરફારો વાપરો(જાવાસ્ક્રીપ્ટ જરૂરી)',
 'tog-numberheadings' => 'મથાળાંઓને આપો-આપ ક્રમ (ઑટો નંબર) આપો',
 'tog-showtoolbar' => 'ફેરફારો માટેનો ટૂલબાર બતાવો (જાવા સ્ક્રિપ્ટ)',
 'tog-editondblclick' => 'ડબલ ક્લિક દ્વારા ફેરફાર કરો (જાવાસ્ક્રિપ્ટ જરૂરી)',
@@ -176,7 +176,7 @@ $messages = array(
 'tog-enotifrevealaddr' => 'નોટીફીકેશનના ઇમેલમાં મારૂ ઇમેલ એડ્રેસ બતાવો',
 'tog-shownumberswatching' => 'ધ્યાનમાં રાખતા સભ્યોની સંખ્યા બતાવો',
 'tog-oldsig' => 'હાલના હસ્તાક્ષર',
-'tog-fancysig' => 'સà«\8dવાàª\9aાલિત àª\95ડà«\80 àªµàª\97રનà«\80 (àª\95ાàª\9aà«\80) àª¸àª¹à«\80',
+'tog-fancysig' => 'હસà«\8dતાàª\95à«\8dષરનà«\8b àªµàª¿àª\95િલàª\96ાણ àª¤àª°à«\80àª\95à«\87 àª\89પયà«\8bàª\97 àª\95રà«\8b (સà«\8dવàª\9aાલિત àª\95ડà«\80 àªµàª\97ર)',
 'tog-externaleditor' => 'બીજું એડીટર વાપરો. (ફક્ત એકસપર્ટ માટે, તમારા કમ્પ્યુટરમાં સેટીંગ્સ બદલવા પડશે. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-externaldiff' => 'Use external diff by default (for experts only, needs special settings on your computer. [//www.mediawiki.org/wiki/Manual:External_editors More information.])',
 'tog-showjumplinks' => "''આના પર જાવ'' કડીને સક્રીય કરો.",
@@ -841,7 +841,7 @@ $2
 'updated' => '(સંવર્ધીત)',
 'note' => "'''નોંધ:'''",
 'previewnote' => "'''આ ફક્ત પૂર્વાવલોકન છે;'''
-ફેરફારો હજુ સાચવવામાં નથી આવ્યા!",
+તમારા àª«à«\87રફારà«\8b àª¹àª\9cà«\81 àª¸àª¾àª\9aવવામાàª\82 àª¨àª¥à«\80 àª\86વà«\8dયા!",
 'previewconflict' => 'જો તમે આ પાનું સાચવશો તો આ પ્રિવ્યુમાં દેખાય છે તેવું સચવાશે.',
 'session_fail_preview' => "'''અફસોસ છે! સત્ર માહિતી ખોઇ દેવાને કારણે અમે તમારું કાર્ય સાચવી ન શક્યાં.'''
 કૃપયા ફરી પ્રયત્ન કરો.
@@ -868,7 +868,7 @@ $2
 'yourtext' => 'તમારું લખાણ',
 'storedversion' => 'રક્ષિત પુનરાવર્તન',
 'nonunicodebrowser' => "'''ચેતવણી: તમારું બ્રાઉઝર યુનિકોડ ઉકેલવા સક્ષમ નથી.'''
-àª\85હà«\80àª\82 àª¤àª®à«\87 àª¸à«\81રàª\95à«\8dષà«\80ત àª°à«\80તà«\87 àª«à«\87રફરà«\8b àª¨àª¹à«\80àª\82 àª\95રà«\80 àª¶àª\95à«\8b: ASCII àª¸àª¿àªµàª¾àª¯àª¨àª¾ àª\85àª\95à«\8dષરà«\8b àª«à«\87રફાર ચોકઠામાં હેક્સાડેસિમલ સ્વરૂપે દેખાશે.",
+àª\85હà«\80àª\82 àª¤àª®à«\87 àª¸à«\81રàª\95à«\8dષિત àª°à«\80તà«\87 àª«à«\87રફારà«\8b àª¨àª¹à«\80àª\82 àª\95રà«\80 àª¶àª\95à«\8b: ASCII àª¸àª¿àªµàª¾àª¯àª¨àª¾ àª\85àª\95à«\8dષરà«\8b àª¸àª\82પાદન ચોકઠામાં હેક્સાડેસિમલ સ્વરૂપે દેખાશે.",
 'editingold' => "'''ચેતવણી: તમે કાલાતિત ફેરફારો ને બદલી રહ્યાં છો.'''
 જો તમે તેને સાચવશો , વચમાં થયેલ ફેરફારો સાચવી ન શકાય.",
 'yourdiff' => 'ભેદ',
@@ -890,9 +890,9 @@ $2
 તમારા સંદર્ભ માટે તાજેતરની લોગ યાદિ આપી છે:",
 'semiprotectedpagewarning' => "'''નોંધ : આ પાના પર સંરક્ષણ વિકલ્પ સક્રીય છે અને માત્ર પ્રબંધકો જ આમાં ફેરફાર કરી શકે.'''
 તમારા સંદર્ભ માટે તાજેતરની લોગ યાદિ આપી છે:",
-'cascadeprotectedwarning' => "'''àª\9aà«\87તવણà«\80:''' àª\86 àªªàª¾àª¨à«\81àª\82 àª¸àª\82રàª\95à«\8dષà«\80ત àª\9bà«\87.  àªªà«\8dરબàª\82ધન àª\85ધિàª\95ાર àª§àª°àª¾àªµàª¤àª¾ àª¸àª­à«\8dયà«\8bàª\9c àª\86માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95à«\87 àª\9bà«\87. àª\86 àªªàª¾àª¨àª¾àª¨à«\87 àª¨à«\80àª\9aà«\87ના àªªàª\97થિયામય àª¸àª\82રàª\95à«\8dષણ{{PLURAL:$1|page|pages}} àª¦à«\8dવારા àª¸à«\81રàª\95à«\8dષà«\80ત છે.",
-'titleprotectedwarning' => "'''ચેતવણી:  આ પાનું સંરક્ષીત છે  આની રચના માટે [[Special:ListGroupRights|specific rights]] ની જરૂર છે.'''
-તà«\87 àª¸àª\82બàª\82ધà«\80 àª¤àª¾àª\9cà«\87તરનà«\80 àª«à«\87રફાર àª¯àª¾àª¦àª¿ તમારા સંદર્ભ માટે આપેલી છે:",
+'cascadeprotectedwarning' => "'''àª\9aà«\87તવણà«\80:''' àª\86 àªªàª¾àª¨à«\81àª\82 àª¸àª\82રàª\95à«\8dષિત àª\9bà«\87. àªªà«\8dરબàª\82ધન àª\85ધિàª\95ાર àª§àª°àª¾àªµàª¤àª¾ àª¸àª­à«\8dયà«\8b àª\9c àª\86માàª\82 àª«à«\87રફાર àª\95રà«\80 àª¶àª\95à«\87 àª\9bà«\87. àª\86 àªªàª¾àª¨à«\81àª\82 àª¨à«\80àª\9aà«\87ના àªªàª\97થિયામય àª¸àª\82રàª\95à«\8dષણ{{PLURAL:$1|પાના|પાનાàª\93}} àª¦à«\8dવારા àª¸à«\81રàª\95à«\8dષિત છે.",
+'titleprotectedwarning' => "'''ચેતવણી: આ પાનું સંરક્ષિત છે આથી આની રચના માટે [[Special:ListGroupRights|વિશેષ અધિકારો]]ની જરૂર છે.'''
+તà«\87 àª¸àª\82બàª\82ધà«\80 àª¤àª¾àª\9cà«\87તરનà«\80 àª«à«\87રફાર àª¯àª¾àª¦à«\80 તમારા સંદર્ભ માટે આપેલી છે:",
 'templatesused' => 'આ પાનામાં વપરાયેલ {{PLURAL:$1|ઢાંચો|ઢાંચાઓ}}:',
 'templatesusedpreview' => 'આ પૂર્વાવલોકનમાં વપરાયેલ {{PLURAL:$1|ઢાંચો|ઢાંચાઓ}}:',
 'templatesusedsection' => 'આ ખંડ માં વપરાયેલા {{PLURAL:$1|ઢાંચો|ઢાંચા}} :',
@@ -1083,8 +1083,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'દાબ નોંધ',
-'suppressionlogtext' => 'નà«\80àª\9aà«\87 àªªà«\8dરબàª\82ધàª\95à«\8bથà«\80 àª\9bà«\81પાયà«\87લ àª\8fવા àª¹àª\9fાવ àª\85નà«\87 àª°à«\8bàª\95નà«\80 àª¯àª¾àª¦àª¿ આપેલી છે.
-હાલમાં સક્રીય એવા  પ્રતિબંધ અને રોકની યાદિ અહીં [[Special:BlockList|IP block list]]  આપેલ છે.',
+'suppressionlogtext' => 'નà«\80àª\9aà«\87 àªªà«\8dરબàª\82ધàª\95à«\8bથà«\80 àª\9bà«\81પાયà«\87લ àª\8fવા àª¹àª\9fાવ àª\85નà«\87 àª°à«\8bàª\95નà«\80 àª¯àª¾àª¦à«\80 આપેલી છે.
+હાલમાં સક્રીય એવા પ્રતિબંધ અને રોકની યાદિ [[Special:BlockList|અહીં]] આપેલ છે.',
 
 # History merging
 'mergehistory' => 'પાનાનાં ઇતિહાસોનું વિલીનીકરણ',
@@ -1409,7 +1409,7 @@ HTML નાકું ચકાસો',
 'right-ipblock-exempt' => 'IP દ્વારા, સ્વયં ચાલિત રીતે અને સમૂહ રોકને અવગનીને આગળ વધો',
 'right-proxyunbannable' => 'અવેજીના અવયંચાલિત ખંડોને ટાળો',
 'right-unblockself' => 'તેમને જાતે અપ્રતિબંધિત થવા દો',
-'right-protect' => 'સàª\82રàª\95à«\8dષણ àª¸à«\8dતર àª¬àª¦àª²à«\8b àª\85નà«\87 àª¸àª\82રàª\95à«\8dષà«\80ત àªªàª¾àª¨àª¾માં ફેરફાર કરો.',
+'right-protect' => 'સàª\82રàª\95à«\8dષણ àª¸à«\8dતર àª¬àª¦àª²à«\8b àª\85નà«\87 àª¸àª\82રàª\95à«\8dષિત àªªàª¾àª¨àª¾àª\93માં ફેરફાર કરો.',
 'right-editprotected' => 'સંરક્ષિત પાનામાં ફેરફાર કરો (પગથિયામય સુરક્ષા વગર)',
 'right-editinterface' => 'સભ્ય સંભાષણ પટલમાં ફેરફાર કરો',
 'right-editusercssjs' => 'અન્ય સભ્યોની CSS અને JavaScript ફાઇલમાં ફેરફાર કરો',
@@ -1492,7 +1492,7 @@ HTML નાકું ચકાસો',
 'rcshowhideminor' => 'નાના ફેરફારો $1',
 'rcshowhidebots' => 'બૉટો $1',
 'rcshowhideliu' => 'લૉગ ઇન થયેલાં સભ્યો $1',
-'rcshowhideanons' => 'àª\85નામિ સભ્યો $1',
+'rcshowhideanons' => 'àª\85નામà«\80 સભ્યો $1',
 'rcshowhidepatr' => ' $1 ચોકીયાત ફેરફારો',
 'rcshowhidemine' => 'મારા ફેરફારો $1',
 'rclinks' => 'છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો<br />$3',
@@ -1871,7 +1871,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'randomredirect-nopages' => 'નામ સ્થળ "$1" માં કોઇ દિશા નિર્દેશન નથી',
 
 # Statistics
-'statistics' => 'àª\86àª\82àª\95ડાàª\95િય àª®àª¾àª¹àª¿àª¤àª¿',
+'statistics' => 'àª\86àª\82àª\95ડાàª\95à«\80ય àª®àª¾àª¹àª¿àª¤à«\80',
 'statistics-header-pages' => 'પાના સંબંધી આંકડાકીય માહિતી',
 'statistics-header-edits' => 'આંકડાકીય માહિતી બદલો',
 'statistics-header-views' => 'આંકડાકીય માહિતી જુઓ',
@@ -1929,10 +1929,10 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'specialpage-empty' => 'આ પાનું ખાલી છે.',
 'lonelypages' => 'અનાથ પાના',
 'lonelypagestext' => 'નીચે બતાવેલા પાના {{SITENAME}} પર કે થી કડી દ્વારા જોડાયેલ નથી',
-'uncategorizedpages' => 'àª\85વરà«\8dàª\97િકૃત પાનાં',
-'uncategorizedcategories' => 'àª\85વરà«\8dàª\97િકૃત શ્રેણીઓ',
-'uncategorizedimages' => 'àª\85વરà«\8dàª\97િકૃત દસ્તાવેજો',
-'uncategorizedtemplates' => 'àª\85વરà«\8dàª\97િકૃત ઢાંચાઓ',
+'uncategorizedpages' => 'àª\85વરà«\8dàª\97à«\80કૃત પાનાં',
+'uncategorizedcategories' => 'àª\85વરà«\8dàª\97à«\80કૃત શ્રેણીઓ',
+'uncategorizedimages' => 'àª\85વરà«\8dàª\97à«\80કૃત દસ્તાવેજો',
+'uncategorizedtemplates' => 'àª\85વરà«\8dàª\97à«\80કૃત ઢાંચાઓ',
 'unusedcategories' => 'વણ વપરાયેલી શ્રેણીઓ',
 'unusedimages' => 'વણ વપરાયેલાં દસ્તાવેજો',
 'popularpages' => 'પ્રખ્યાત પાના',
@@ -1959,8 +1959,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 'protectedpages-indef' => 'ફક્ત અનિશ્ચિત સુરક્ષા ધરાવતા પાના',
 'protectedpages-cascade' => 'માત્ર પગથિયામય સુરક્ષા વાળા પગ',
 'protectedpagestext' => 'નીચેના પાના કોઈ ફેરફાર કે હટાવવા થી સુરકક્ષીત કરાયા છે',
-'protectedpagesempty' => 'àª\86 àªµàª¿àª\95લà«\8dપà«\8b àª¦à«\8dવારા àª\95à«\8bàª\88 àªªàª¾àª¨àª¾ àª¸à«\81રàª\95à«\8dષà«\80ત àª\95રાયા àª¨àª¥à«\80',
-'protectedtitles' => 'સàª\82રàª\95à«\8dષà«\80ત શીર્ષકો',
+'protectedpagesempty' => 'àª\86 àªµàª¿àª\95લà«\8dપà«\8b àª¦à«\8dવારા àª\95à«\8bàª\88 àªªàª¾àª¨àª¾ àª¸à«\81રàª\95à«\8dષિત àª\95રાયા àª¨àª¥à«\80.',
+'protectedtitles' => 'સàª\82રàª\95à«\8dષિત શીર્ષકો',
 'protectedtitlestext' => 'આ શીર્ષકો રચના માટે આરક્ષીત છે',
 'protectedtitlesempty' => 'આ પરિબળો દ્વારા કોઇ પણ શીર્ષકો સચવાયા નથી.',
 'listusers' => 'સભ્યોની યાદી',
@@ -2325,8 +2325,8 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 'restriction-upload' => 'ફાઇલ ચઢાવો',
 
 # Restriction levels
-'restriction-level-sysop' => 'સંપૂર્ણા સંરક્ષીત',
-'restriction-level-autoconfirmed' => 'àª\85રà«\8dધ àª¸àª\82રàª\95à«\8dષà«\80ત',
+'restriction-level-sysop' => 'સંપૂર્ણ સંરક્ષિત',
+'restriction-level-autoconfirmed' => 'àª\85રà«\8dધ àª¸àª\82રàª\95à«\8dષિત',
 'restriction-level-all' => 'કોઈ પણ સ્તર',
 
 # Undelete
@@ -2476,8 +2476,8 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'ipb-confirm' => 'પ્રતિબંધ પુષ્ટિ',
 'badipaddress' => 'અવૈધ IP સરનામું',
 'blockipsuccesssub' => 'સફળ પ્રતિબંધ મુકાયો',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] પરા રોક લગાવાઈ છે<br />
-રà«\8bàª\95 àª²àª\97ાવà«\87લ àª¸àª­à«\8dયà«\8bનà«\80 àª¯àª¾àª¦àª¿ [[Special:BlockList|IP block list]].',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] પર રોક લગાવાઈ છે.<br />
+સમà«\80àª\95à«\8dષા àª®àª¾àª\9fà«\87 [[Special:BlockList|રà«\8bàª\95 àª²àª\97ાવાયà«\87લ àª¸àª­à«\8dયà«\8bનà«\80 àª¯àª¾àª¦à«\80]] àª\9cà«\81àª\93.',
 'ipb-blockingself' => 'તમે પોતાના પર પ્રતિબંધ મુકવા જાઓ છો! શું તમે સાચેજમાં આ કરવા માગો છો?',
 'ipb-confirmhideuser' => 'તમે "સભ્ય છુપાવો" સક્રિય રાખીને આ સભ્ય પર પ્રતિબંધ મુકવા જઇ રહ્યાં છો. આના કારણે કોઇપણ યાદી કે નોંધમાં સભ્યનું નામ જોઇ નહી શકાય. શું તમે ખરેખર આમ કરવા માંગો છો?',
 'ipb-edit-dropdown' => 'પ્રતિબંધ કારણોમાં ફેરફાર કરો',
@@ -2530,9 +2530,9 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 રોક લગાવાયેલા સભ્યોની યાદિ આ મુજબ છે',
 'blocklogentry' => '[[$1]] પર પ્રતિબંધ $2 $3 સુધી મુકવામાં આવ્યો છે.',
 'reblock-logentry' => '[[$1]] ની પ્રતિબંધ વિકલ્પો બદલ્યા જે નો કલાતિત સમય છે   $2 $3',
-'blocklogtext' => 'àª\86 àª¸àª­à«\8dયà«\8b àªªàª° àª°à«\8bàª\95 àª²àª\97ાવવા àª\85નà«\87 àª¹àª\9fાવવા àª¸àª\82બàª\82ધિત àª¯àª¾àª¦àª¿ છે.
-સà«\8dવયàª\82àª\9aાલિત àª°à«\80તà«\87 àª°à«\8bàª\95 àª²àª\97ાવાયà«\87લ IP àª¸àª°àª¨àª¾àª®àª¾àª¨à«\80 àª¯àª¾àª¦àª¿ અહીં નથી આપી.
-હાલમાàª\82 àªªà«\8dરવરà«\8dતમાન àª°à«\8bàª\95 àª¨à«\80 àª¯àª¾àª¦àª¿ àª\85હà«\80àª\82 àª\9cà«\81àª\93 [[Special:BlockList|IP block list]].',
+'blocklogtext' => 'àª\86 àª¸àª­à«\8dયà«\8b àªªàª° àª°à«\8bàª\95 àª²àª\97ાવવા àª\85નà«\87 àª¹àª\9fાવવા àª¸àª\82બàª\82ધિત àª¯àª¾àª¦à«\80 છે.
+સà«\8dવયàª\82àª\9aાલિત àª°à«\80તà«\87 àª°à«\8bàª\95 àª²àª\97ાવાયà«\87લ IP àª¸àª°àª¨àª¾àª®àª¾àª¨à«\80 àª¯àª¾àª¦à«\80 અહીં નથી આપી.
+હાલમાàª\82 àªªà«\8dરવરà«\8dતમાન àªªà«\8dરતિબàª\82ધ àª\85નà«\87 àª°à«\8bàª\95 àª¨à«\80 [[Special:BlockList|યાદà«\80 àª\85હà«\80àª\82 àª\9cà«\81àª\93]].',
 'unblocklogentry' => '$1 પરનો પ્રતિબંધ ઉઠાવ્યો',
 'block-log-flags-anononly' => 'માત્ર અજ્ઞાત સભ્ય',
 'block-log-flags-nocreate' => 'ખાતું ખોલવા પર પ્રતિબંધ છે',
@@ -2714,8 +2714,8 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'allmessagesname' => 'નામ',
 'allmessagesdefault' => 'મૂળ સંદેશ',
 'allmessagescurrent' => 'વર્તમાન દસ્તાવેજ',
-'allmessagestext' => 'આ મિડિયાવિકિ નામ સ્થળમાં આવેલ પ્રણાલીજનિત સંદેશાની યાદિ આ મુજબ છે.
-àª\95à«\83પયા [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] àª\85નà«\87 [//translatewiki.net translatewiki.net]નà«\80 àª®à«\81લાàª\95ાત àª²à«\8b àª\9cà«\8b àª¤ àª®àª¿àª¡àª¿àª¯àª¾àª¯àª¾àªµàª¿àª\95િના àª¸à«\8dથાનિય àª\95રણમાàª\82 àª®àª¦àª¦àª°à«\82પ àª¥àªµàª¾ àª\87àª\9aà«\8dàª\9bતા àª¹à«\8bવ.',
+'allmessagestext' => 'આ મિડિયાવિકિ નામસ્થળમાં આવેલ પ્રણાલીજનિત સંદેશાની યાદી આ મુજબ છે.
+àª\9cà«\8b àª¤àª®à«\87 àª®àª¿àª¡àª¿àª¯àª¾àª¯àª¾àªµàª¿àª\95િના àª¸à«\8dથાનà«\80યàª\95રણમાàª\82 àª®àª¦àª¦àª°à«\82પ àª¥àªµàª¾ àª\87àª\9aà«\8dàª\9bતા àª¹à«\8bવ àª¤à«\8b àª\95à«\83પયા [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] àª\85નà«\87 [//translatewiki.net translatewiki.net]નà«\80 àª®à«\81લાàª\95ાત àª²à«\8b.',
 'allmessagesnotsupportedDB' => "આ પાનું ન વાપરી શકાશે કેમકે '''\$wgUseDatabaseMessages'''  નિષ્ક્રીય કરાયું છે",
 'allmessages-filter-legend' => 'ચાળણી',
 'allmessages-filter' => 'સ્થાનીયકરણ સ્થિતિ દ્વારા ચાળો',
@@ -2743,11 +2743,11 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 # Special:Import
 'import' => 'પાના આયાત કરો',
 'importinterwiki' => 'ટ્રાંસ વિકિ આયાત',
-'import-interwiki-text' => 'આયાત કરવાના વિકિ અને પાનાનું શીર્ષક પસંદ કરો.
-ફà«\87રફરનà«\80 àª¤àª¾àª°à«\80àª\96 àª\85નà«\87 àª²à«\87àª\96àª\95à«\8b àªµàª¿àª·à«\87 àª¨à«\80 àª®àª¾àª¹àª¿àª¤à«\80 àª¸àª\9aવાશે.
-àª\86àª\82તર àªµàª¿àª\95િ àª\86યાત àª\86દિ [[Special:Log/import|import log]] àª®àª¾àª\82 àª\85àª\82àª\95િત àª¥ાય છે.',
+'import-interwiki-text' => 'આયાત કરવા માટેનાં પાનાનું શીર્ષક અને વિકિ પસંદ કરો.
+ફà«\87રફારનà«\80 àª¤àª¾àª°à«\80àª\96 àª\85નà«\87 àª²à«\87àª\96àª\95à«\8b àªµàª¿àª·à«\87નà«\80 àª®àª¾àª¹àª¿àª¤à«\80 àª\9cà«\87મનà«\80 àª¤à«\87મ àª°àª¾àª\96વામાàª\82 àª\86વશે.
+બધા àª\9c àª\86àª\82તરવિàª\95િ àª\86યાતનà«\80 àª¨à«\8bàª\82ધ [[Special:Log/import|import log]]માàª\82 àª°àª\96ાય છે.',
 'import-interwiki-source' => 'સ્રોત વિકિ/પાનું:',
-'import-interwiki-history' => 'àª\86 àªªàª¾àª¨àª¾ àª¬àª§àª¾ àª\90તિહાસà«\80àª\95 àª«à«\87રફારà«\8bનà«\80 àª¨àª\95લ કરો',
+'import-interwiki-history' => 'àª\86 àªªàª¾àª¨à«\81àª\82 àª¬àª§àª¾ àª«à«\87રફારà«\8bના àª\87તિહાસ àª¸àª¾àª¥à«\87 àª\86યાત કરો',
 'import-interwiki-templates' => 'બધા ઢાંચા શામિલ કરો',
 'import-interwiki-submit' => 'આયાત કરો',
 'import-interwiki-namespace' => 'લક્ષ્ય નામ સ્થળ',
@@ -2798,7 +2798,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 
 # JavaScriptTest
 'javascripttest' => 'જાવા સ્ક્રીપ્ટ પરીક્ષણ',
-'javascripttest-disabled' => 'àª\86 àª¸à«\82તà«\8dર (ફàª\82àª\95શન) àª¨àª¿àª·à«\8dàª\95à«\8dરà«\80ય àª\95રાયà«\8b',
+'javascripttest-disabled' => 'àª\86 àª¸à«\82તà«\8dર (ફàª\82àª\95શન) àª\86 àªµàª¿àª\95િ àªªàª° àª\95ારà«\8dયરત àª\95રાયà«\87લà«\81àª\82 àª¨àª¥à«\80.',
 'javascripttest-title' => '$1 પરીક્ષણ જારી',
 'javascripttest-pagetext-noframework' => 'આ પાનું જાવા સ્ક્રીપ્ટ ચલાવવા આરક્ષિત છે.',
 'javascripttest-pagetext-unknownframework' => 'અજાણ ચકાસણી ફ્રેમવર્ક "$1".',
@@ -3196,7 +3196,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'exif-compression-3' => 'CCITT સમૂહ 3 ફેક્સ ઍનકોડિંગ',
 'exif-compression-4' => 'CCITT સમૂહ 3 ફેક્સ ઍનકોડિંગ',
 
-'exif-copyrighted-true' => 'પà«\8dરàª\95શન àª\85ધિàª\95ારથà«\80 àª¸à«\81રàª\95à«\8dષà«\80ત',
+'exif-copyrighted-true' => 'પà«\8dરàª\95ાશન àª\85ધિàª\95ારથà«\80 àª¸à«\81રàª\95à«\8dષિત',
 'exif-copyrighted-false' => 'સાર્વજનિક ડોમેન',
 
 'exif-unknowndate' => 'અજ્ઞાત તારીખ',
@@ -3403,7 +3403,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 
 # External editor support
 'edit-externally' => 'બાહ્ય સોફ્ટવેર વાપરીને આ ફાઇલમાં ફેરફાર કરો',
-'edit-externally-help' => '(વધà«\81 àª®àª¾àª¹àª¿àª¤àª¿ àª®àª¾àª\9fà«\87 [//www.mediawiki.org/wiki/Manual:External_editors àª¸à«\87àª\9f-àª\85પ àª¸à«\81ચનાઓ] જુઓ)',
+'edit-externally-help' => '(વધà«\81 àª®àª¾àª¹àª¿àª¤à«\80 àª®àª¾àª\9fà«\87 [//www.mediawiki.org/wiki/Manual:External_editors àª¸à«\87àª\9f-àª\85પ àª¸à«\82ચનાઓ] જુઓ)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'બધા',
@@ -3511,7 +3511,7 @@ $5
 'table_pager_first' => 'પહેલું પાનું',
 'table_pager_last' => 'છેલ્લું પાનું',
 'table_pager_limit' => 'પ્રતિ પાને $1 વસ્તુ બતાવો',
-'table_pager_limit_label' => 'વસà«\8dતિàª\93 àªªà«\8dરતિ àªªàª¾àª¨à«\87',
+'table_pager_limit_label' => 'પà«\8dરતિ àªªàª¾àª¨à«\87 àªµàª¿àª\97તà«\8b:',
 'table_pager_limit_submit' => 'જાઓ',
 'table_pager_empty' => 'કોઇ પરિણામ નથી',
 
@@ -3595,6 +3595,7 @@ $5
 'version-software' => 'બેસાડેલા સોફ્ટવેર',
 'version-software-product' => 'ઉત્પાદ',
 'version-software-version' => 'આવૃત્તિ',
+'version-entrypoints-header-entrypoint' => 'પ્રવેશ સ્થળ',
 
 # Special:FilePath
 'filepath' => 'ફાઈલ પથ',
@@ -3788,6 +3789,10 @@ $5
 'duration-minutes' => '$1 {{PLURAL:$1|મિનિટ|મિનિટો}}',
 'duration-hours' => '$1 {{PLURAL:$1|કલાક|કલાકો}}',
 'duration-days' => '$1 {{PLURAL:$1|દિવસ|દિવસો}}',
+'duration-weeks' => '$1 {{PLURAL:$1|અઠવાડિયું|અઠવાડિયા}}',
 'duration-years' => '$1 {{PLURAL:$1|વર્ષ|વર્ષો}}',
+'duration-decades' => '$1 {{PLURAL:$1|દાયકો|દાયકાઓ}}',
+'duration-centuries' => '$1 {{PLURAL:$1|શતાબ્દી|શતાબ્દીઓ}}',
+'duration-millennia' => '$1 {{PLURAL:$1|સહસ્ત્રાબ્દી|સહસ્ત્રાબ્દીઓ}}',
 
 );
index 36a1603..867e9a5 100644 (file)
@@ -367,17 +367,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'עריכת פסקאות על ידי לחיצה ימנית על כותרות הפסקאות (דרוש JavaScript)',
 'tog-showtoc' => 'הצגת תוכן עניינים (עבור דפים עם יותר מ־3 כותרות)',
 'tog-rememberpassword' => 'שמירת הכניסה שלי בדפדפן זה ({{PLURAL:$1|ליום אחד|ל־$1 ימים|ליומיים}} לכל היותר)',
-'tog-watchcreations' => 'מעקב אחרי דפים שיצרתי',
-'tog-watchdefault' => 'מעקב אחרי דפים שערכתי',
-'tog-watchmoves' => 'מעקב אחרי דפים שהעברתי',
-'tog-watchdeletion' => 'מעקב אחרי דפים שמחקתי',
+'tog-watchcreations' => 'מעקב אחרי דפים שיצרתי וקבצים שהעליתי',
+'tog-watchdefault' => '×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×¢×¨×\9bת×\99',
+'tog-watchmoves' => '×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\94×¢×\91רת×\99',
+'tog-watchdeletion' => '×\9eעק×\91 ×\90×\97ר×\99 ×\93פ×\99×\9d ×\95ק×\91צ×\99×\9d ×©×\9e×\97קת×\99',
 'tog-minordefault' => 'הגדרת כל פעולת עריכה כמשנית אם לא צוין אחרת',
 'tog-previewontop' => 'הצגת תצוגה מקדימה לפני תיבת העריכה (או: אחריה)',
 'tog-previewonfirst' => 'הצגת תצוגה מקדימה בעריכה ראשונה',
 'tog-nocache' => 'מניעת אחסון הדפים בזיכרון המטמון בדפדפן',
-'tog-enotifwatchlistpages' => 'ש×\9c×\99×\97ת ×\93×\95×\90\9c ×\90×\9c×\99×\9a ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93פ×\99×\9d ברשימת המעקב שלך',
+'tog-enotifwatchlistpages' => 'ש×\9c×\99×\97ת ×\93×\95×\90\9c ×\90×\9c×\99×\9a ×\9b×\90שר × ×¢×©×\94 ×©×\99× ×\95×\99 ×\91×\93×£ ×\90×\95 ×\91ק×\95×\91×¥ ברשימת המעקב שלך',
 'tog-enotifusertalkpages' => 'שליחת דוא"ל אליך כאשר נעשה שינוי בדף שיחת המשתמש שלך',
-'tog-enotifminoredits' => 'שליחת דוא"ל אליך גם על עריכות משניות של דפים',
+'tog-enotifminoredits' => 'שליחת דוא"ל אליך גם על עריכות משניות של דפים וקבצים',
 'tog-enotifrevealaddr' => 'חשיפת כתובת הדוא"ל שלך בהודעות דוא"ל',
 'tog-shownumberswatching' => 'הצגת מספר המשתמשים העוקבים אחרי הדף',
 'tog-oldsig' => 'החתימה הקיימת:',
@@ -712,6 +712,8 @@ $1',
 'cannotdelete' => 'לא ניתן היה למחוק את הדף או הקובץ "$1".
 ייתכן שהוא נמחק כבר על ידי מישהו אחר.',
 'cannotdelete-title' => 'לא ניתן למחוק את הדף "$1"',
+'delete-hook-aborted' => 'המחיקה הופסקה על־ידי מבנה Hook.
+לא ניתן הסבר.',
 'badtitle' => 'כותרת שגויה',
 'badtitletext' => 'כותרת הדף המבוקש הייתה בלתי־תקינה, ריקה, או קישור שגוי לשפה אחרת או למיזם אחר.
 ייתכן שהיא מכילה תו אחד או יותר שאינו יכול לשמש בכותרות.',
@@ -747,7 +749,7 @@ $2',
 'invalidtitle-knownnamespace' => 'כותרת בלתי־תקינה עם מרחב השם "$2" ושם דף "$3"',
 'invalidtitle-unknownnamespace' => 'כותרת בלתי־תקינה עם מרחב שם בלתי־ידוע מספר $1 ושם דף "$2"',
 'exception-nologin' => 'לא בחשבון',
-'exception-nologin-text' => 'כדי לראות את הדף הזה או לבצע את הפעולה הזאת צריך להיכנס לחשבון בוויקי הזה.',
+'exception-nologin-text' => '×\9b×\93×\99 ×\9cר×\90×\95ת ×\90ת ×\94×\93×£ ×\94×\96×\94 ×\90×\95 ×\9c×\91צע ×\90ת ×\94פע×\95×\9c×\94 ×\94×\96×\90ת ×¦×¨×\99×\9a ×\9c×\94×\99×\9bנס ×\9c×\97ש×\91×\95×\9f ×\91×\90תר ×\94×\95×\95×\99ק×\99 ×\94×\96×\94.',
 
 # Virus scanner
 'virus-badscanner' => "הגדרות שגויות: סורק הווירוסים אינו ידוע: ''$1''",
@@ -3898,7 +3900,7 @@ $5
 'version-version' => '(גרסה $1)',
 'version-license' => 'רישיון',
 'version-poweredby-credits' => "אתר הוויקי הזה מופעל על ידי '''[//www.mediawiki.org/ מדיה־ויקי]''', © 2001–$1 $2.",
-'version-poweredby-others' => 'אחרים',
+'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS אחרים]',
 'version-license-info' => "מדיה־ויקי היא תוכנה חופשית; באפשרותכם להפיץ אותה מחדש ו/או לשנות אותה לפי תנאי הרישיון הציבורי הכללי של גנו המפורסם על ידי המוסד לתוכנה חופשית: גרסה 2 של רישיון זה, או (לפי בחירתכם) כל גרסה מאוחרת יותר.
 
 מדיה־ויקי מופצת בתקווה שהיא תהיה שימושית, אך '''ללא כל הבטחה לאחריות'''; אפילו לא אחריות משתמעת של '''יכולת להיסחר''' או '''התאמה למטרה מסוימת'''. ראו את הרישיון הציבורי הכללי של גנו לפרטים נוספים.
@@ -4070,6 +4072,8 @@ $5
 'api-error-empty-file' => 'הקובץ ששלחתם היה ריק.',
 'api-error-emptypage' => 'יצירת דפים חדשים ריקים אינה אפשרית.',
 'api-error-fetchfileerror' => 'שגיאה פנימית: משהו השתבש בזמן אחזור הקובץ.',
+'api-error-fileexists-forbidden' => 'קובץ בשם "$1" כבר קיים ואי־אפשר לדרוס אותו.',
+'api-error-fileexists-shared-forbidden' => 'קובץ בשם "$1" כבר קיים במאגר הקבצים המשותף ואי־אפשר לדרוס אותו.',
 'api-error-file-too-large' => 'הקובץ ששלחתם היה גדול מדי.',
 'api-error-filename-tooshort' => 'שם הקובץ קצר מדי.',
 'api-error-filetype-banned' => 'סוג קובץ זה חסום.',
index 80c55df..56d624b 100644 (file)
@@ -24,7 +24,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Pahraa dewa gais badlao ke nawaa badlao me se lukao',
 'tog-newpageshidepatrolled' => 'Pahraa dewa gais badlao ke nawaa panna me se lukao',
 'tog-extendwatchlist' => 'Dhyaan suchi ke khol ke sab badlao ke dekhao, khaali nawaa waala nai',
-'tog-usenewrc' => 'Sadasya se enhance karaa gais nawaa badlao (reguires Javascript)',
+'tog-usenewrc' => 'Dher jan se badla gais panna, haali ke badlao aur dhyan suchi me (Javascript maange hae)',
 'tog-numberheadings' => 'Sab heading ke apne se number karo',
 'tog-showtoolbar' => 'Badle waala aujaar ke toolbar ke dekhao (JavaScript ke jarurat hai)',
 'tog-editondblclick' => 'Dugnaa click pe panna ke badlo (JavaScript ke jarurat hai)',
@@ -32,17 +32,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Bhaag ke title pe right click kare pe bhaag ke badle ke laabu karo  (JavaScript)',
 'tog-showtoc' => 'Dhyan suchi dekhao (uu panna khatir jon me tiin se jaada heading hai)',
 'tog-rememberpassword' => 'Ii browser me (jaada se jaada $1 {{PLURAL:$1|din|din}}) talak hamaar login ke yaad rakho.',
-'tog-watchcreations' => 'Hamaar banawa waala panna ke hamaar dhyaan suchi me jorro',
-'tog-watchdefault' => 'Ham se badla gae panna ke hamaar dhyaan suchi me jorro',
-'tog-watchmoves' => 'Uu panna jiske naam ham badla hai ke hamaar dhyaan suchi me jorro',
-'tog-watchdeletion' => 'Uu panna jiske ham mitaya hai ke hamaar dhyaan suchi me jorro',
+'tog-watchcreations' => 'Hamaar banawa waala panna aur upload karaa gais file ke hamaar dhyaan suchi me jorro',
+'tog-watchdefault' => 'Ham se badla gais panna aur file ke hamaar dhyaan suchi me jorro',
+'tog-watchmoves' => 'Uu panna aur file jiske naam ham badla hai ke hamaar dhyaan suchi me jorro',
+'tog-watchdeletion' => 'Uu panna, aur file jiske ham mitaya hai ke hamaar dhyaan suchi me jorro',
 'tog-minordefault' => 'Mamuli badlao ke apne se nishaan lagao',
 'tog-previewontop' => 'Badlao waala dabba se pahile ek jhalak dekhao',
 'tog-previewonfirst' => 'Hamaar pahila badlao pe jhalak dekhao',
 'tog-nocache' => 'Browser pe panna ke bachae me rok lagao',
-'tog-enotifwatchlistpages' => 'Jab hamaar dhyaan suchi ke koi panna ke badla jae tab hame E-mail karo',
+'tog-enotifwatchlistpages' => 'Jab hamaar dhyaan suchi ke koi panna, nai to file, ke badla jae tab hame E-mail karo',
 'tog-enotifusertalkpages' => 'Jab hamaar baat waala panna ke badla jae tab hame E-mail karo',
-'tog-enotifminoredits' => 'Panna me mamuli badlao khatir bhi hame E-mail karo',
+'tog-enotifminoredits' => 'Panna aur file me mamuli badlao khatir bhi hame E-mail karo',
 'tog-enotifrevealaddr' => 'Notification E-mail me hamaar E-mail address ke dekhao.',
 'tog-shownumberswatching' => 'Ketna sadasya dekhe hai ke number dekhao',
 'tog-oldsig' => 'Abhi ke signature:',
@@ -373,6 +373,8 @@ Iske, URL ke likh ke, koi administrator ke report karo.',
 'badarticleerror' => 'Ii chij ke ii panna me nai karaa jae sake hai.',
 'cannotdelete' => '{{PLURAL:$1|Template|Template}} ke ii jhalak me kaam me lawa gais hae:',
 'cannotdelete-title' => 'Panna "$1" ke mitae nai saktaa hae',
+'delete-hook-aborted' => 'Mitae ke kisis ke hook rok diis hae.
+Uu koi kaaran nai dis hae.',
 'badtitle' => 'Kharaab title',
 'badtitletext' => 'Jon panna aap mangta hai uske page title invalid, galat, nai to an incorrectly linked inter-language or inter-wiki title. Isme sait ek yah jaada character hoi jon ki title me nai kaam me lawa jae sake hai.',
 'perfcached' => 'Niche likha data ke cache karaa gais hai aur sait purana hoi. Jaada se jaada {{PLURAL:$1|ek result |$1 results}} cache me hae.',
@@ -402,6 +404,12 @@ $2',
 'ns-specialprotected' => 'Khaas panna ke badla nai jae sake hai.',
 'titleprotected' => "Ii title ke banae se [[User:$1|$1]] rokis hai.
 Iske kaaran hai ''$2''.",
+'filereadonlyerror' => 'File "$1" ke nai badle sakaa hae, kaahe ki ii file repository "$2" me hae aur iske khaali parrha jaae sake hae.
+Jon administrator iske lock karis hae, koi kaaran nai diis hae: "$3"',
+'invalidtitle-knownnamespace' => 'Namespace "$2" aur text "$3" ke kharaab title hae.',
+'invalidtitle-unknownnamespace' => 'Title gaer kaanuni hae aur iske namespace number "$1" aur text "$2" ke nai jaana jaawe hae',
+'exception-nologin' => 'Logged in nai hae',
+'exception-nologin-text' => 'Ii panna nai to aap ke action ke khatir ii wiki me login hoe ke jarurui hae',
 
 # Virus scanner
 'virus-badscanner' => "Kharaab ruup dewa gais hae: virus khoje waala software nawaa hae: ''$1''",
@@ -495,6 +503,7 @@ Ii sab feature khatir koi e-mail nai bheja jaai.',
 'invalidemailaddress' => 'E-mail address ke nai lewa jae sake hai kahe ki iske format kharaab hai.
 Meharbaani kar ke achchha address ke enter karo nai to uu field ke khali kar do.',
 'cannotchangeemail' => 'Ii wiki me account e-mail ke badla nai jaawe sake hae',
+'emaildisabled' => 'Ii site e-mail nai bheje sake hae.',
 'accountcreated' => 'Account banae dewa gais hai',
 'accountcreatedtext' => '$1 khatir user account banae dewa gais hai.',
 'createaccount-title' => '{{SITENAME}} khatir account creation',
@@ -694,7 +703,8 @@ Yaad rakhna ki custom .css aur .js panna owercase title use kare hai, jaise ki {
 'updated' => '(Update kar dewa gais hai)',
 'note' => "'''Dhyan rakkho:'''",
 'previewnote' => "'''Ii khaali ek jhalak dekhae hai'''
-Tumar badlao abhi save nai bhais hai!",
+Tumar badlao abhi bachawa nai gais hai!",
+'continue-editing' => 'Badalte raho',
 'previewconflict' => 'Ii preview uu text dekhae hai jon ki uppar ke text editing area me dekhai agar aap iske save karaa.',
 'session_fail_preview' => "''' Maaf karna! Ham log aap ke badlao ke process nai kare paya hai due to a loss of session data.
 Fir se kosis karna.
@@ -710,6 +720,7 @@ Ii badlao ke reject kar dewa gais hai to prevent corruption of the page text.
 Ii kabhi kabhi hoe hai jab aap ek buggy web-based anonymous proxy service ke use karta hai.'''",
 'edit_form_incomplete' => 'Edit form ke kuchh hissa server ke lage nai pahunche paais hae; fir se check karo ki aap ke badlao form me hae, aur fir se form ke bhejo.',
 'editing' => '$1 badlawa jae hai',
+'creating' => '$1 banaata hae',
 'editingsection' => 'Sampadan $1 (bhaag)',
 'editingcomment' => '$1 ke badla jae hai (nawaa section)',
 'editconflict' => 'Badle me conflict: $1',
@@ -776,6 +787,7 @@ Janae hai ki iske koi mitae dii hai.',
 'edit-no-change' => 'Aap ke badle ke kosis ke ignore kar dewa gais hai, kahe ki text ke badla nai gais hai.',
 'edit-already-exists' => 'Nawaa panna nai banae sakaa hai.
 Ii naam ke panna abhi hai.',
+'defaultmessagetext' => 'Default message text',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Chetauni''': Ii panna me bahut jaada expensive parser function calls hai.
@@ -791,6 +803,12 @@ Ii sab arguments ke omit kar dewa gais hai.',
 'parser-template-loop-warning' => 'Template loop ke pawa gais hai: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Template recursion depth limit se jaada hoe gais hae ($1)',
 'language-converter-depth-warning' => 'Bhasa anuwaad ke gahiraai ijajat se jaada hoe gais hae ($1)',
+'node-count-exceeded-category' => 'Panna jahaan pe node-count bahut jaada hoe gais hae',
+'node-count-exceeded-warning' => 'Panna, node-count se jaada hae',
+'expansion-depth-exceeded-category' => 'Panna jahaan pe expansion depth ke exceed karaa gais hae',
+'expansion-depth-exceeded-warning' => 'Panna expansion depth ke exceed karis hae',
+'parser-unstrip-loop-warning' => 'Unstrip loop ke pawa gai shae',
+'parser-unstrip-recursion-limit' => 'Unstrip recursion limit ke exceed karaa gais hae ($1)',
 
 # "Undo" feature
 'undo-success' => 'Ii badlao ke pahile jaise karaa jaae sake hai.
@@ -935,7 +953,7 @@ Meharbani ka ke logs ke check karo.',
 # Suppression log
 'suppressionlog' => 'Dabae waala log',
 'suppressionlogtext' => 'Niche ke suchi me administrators se lukawa gais deletions au rukawat hae.
-Abhi ke laabu rukawat ke suchi ke khatir [[Special:BlockList|IP block list]] ke dekho.',
+Abhi ke laabu rukawat ke suchi ke khatir [[Special:BlockList|block list]] ke dekho.',
 
 # History merging
 'mergehistory' => 'Panna ke itihass ke jorro',
@@ -970,6 +988,8 @@ Ii baat ke dhyan me rakhna ki navigation jorr ke kaam me laae se ii column reset
 
 # Diffs
 'history-title' => '"$1" ke sansodhan ke itihaas',
+'difference-title' => '"$1" ke revisions ke biich ke antar',
+'difference-title-multipage' => 'Panna "$1" aur "$2" ke biich ke antar',
 'difference-multipage' => '(Panna ke biich ke antar)',
 'lineno' => 'Rekha $1:',
 'compareselectedversions' => 'Chuna gae version ke compare karo',
@@ -1067,6 +1087,7 @@ Yaad rakhna ki uu log ke {{SITENAME}} ke index saait purana hoi.',
 'prefs-beta' => 'Nawaa features',
 'prefs-datetime' => 'Tarik aur time',
 'prefs-labs' => 'Try kare waala features',
+'prefs-user-pages' => 'Sadasya ke panna',
 'prefs-personal' => 'Sadasya ke profile',
 'prefs-rc' => 'Nawaa badlao',
 'prefs-watchlist' => 'Dhyan suchi',
@@ -1506,6 +1527,7 @@ Agar jo problem fir nai khatam hoe tab [[Special:ListUsers/sysop|administrator]]
 'upload-too-many-redirects' => 'Ii URL me bahut jaada redirects hae.',
 'upload-unknown-size' => 'Nai pataa ki ketnaa barraa hae',
 'upload-http-error' => 'Ek HTTP galti hoe gais hae: $1',
+'upload-copy-upload-invalid-domain' => 'Ii domain se copy upload nai karaa jaae sake hae.',
 
 # File backend
 'backend-fail-stream' => 'File $1 ke stream nai kare sakaa hae.',
@@ -1523,12 +1545,24 @@ Agar jo problem fir nai khatam hoe tab [[Special:ListUsers/sysop|administrator]]
 'backend-fail-writetemp' => 'Temporary file me nai likhe sakaa hae.',
 'backend-fail-closetemp' => 'Temporary file ke nai band kare sakaa hae.',
 'backend-fail-read' => 'File $1 ke nai parrhe sakaa hae.',
-'backend-fail-create' => 'File $1 ke nai banae sakaa hae.',
+'backend-fail-create' => 'File $1 pe nai likha jaae sake hae.',
+'backend-fail-maxsize' => 'File $1 ke nai likhe sakaa hae kaahe ki ii {{PLURAL:$2|ek byte|$2 byte}} se barraa hae.',
 'backend-fail-readonly' => 'Storage backend "$1" abhi khaali read-only hae. Iske kaaran hae: "$2"',
 'backend-fail-synced' => 'File "$1" internal storage backends me ek inconsistent state me hae',
 'backend-fail-connect' => 'Storage backend "$1" se connect nai kare sakaa hae.',
 'backend-fail-internal' => 'Storage backend "$1" me ek unknown error hoe gais hae.',
 'backend-fail-contenttype' => 'Ii nai pataa lagae sakaa hae ki "$1" me bachae ke khaatir file kon rakam ke hae.',
+'backend-fail-batchsize' => 'Storage backend ke  $1 file {{PLURAL:$1|operation|operations}} ke ek batch ke dewa gais hae ; limit  $2 {{PLURAL:$2|operation|operation}} hae.',
+'backend-fail-usable' => 'File $1 ke nai likhe sakaa hae kaahe ki iske khatir jaruri ijajat nai hae, nai to directories/containers nai hae.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Storage backend "$1" ke khatir journal database se nai jorre sakaa hae.',
+'filejournal-fail-dbquery' => 'Storage backend "$1" ke khatir journal database ke nai badle sakaa hae.',
+
+# Lock manager
+'lockmanager-notlocked' => '"$1" ke  nai khole sakaa hae; ii lock nai hae.',
+'lockmanager-fail-closelock' => '"$1" ke khatir lock file ke nai band kare sakaa hae.',
+'lockmanager-fail-deletelock' => '"$1" ke khatir lock file ke nai mitae sakaa hae.',
 
 # Special:UploadStash
 'uploadstash' => 'Gupt file ke upload karo',
index a0ef469..e4d78b2 100644 (file)
@@ -168,17 +168,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Wobdźěłowanje jednotliwych wotrězkow přez kliknjenje z prawej tastu na nadpisma wotrězkow zmóžnić (wužaduje sej JavaScript)',
 'tog-showtoc' => 'Zapis wobsaha pokazać (za strony z wjace hač 3 nadpismami)',
 'tog-rememberpassword' => 'Přizjewjenje na tutym wobhladowaku sej spomjatkować (za maksimalnje $1 {{PLURAL:$1|dźeń|dnjej|dny|dnjow}})',
-'tog-watchcreations' => 'Strony, kotrež wutworjam, swojim wobkedźbowankam přidać',
-'tog-watchdefault' => 'Strony, kotrež wobdźěłuju, swojim wobkedźbowankam přidać',
-'tog-watchmoves' => 'Sam přesunjene strony wobkedźbowankam přidać',
-'tog-watchdeletion' => 'Sam wušmórnjene strony wobkedźbowankam přidać',
+'tog-watchcreations' => 'Strony, kotrež wutworjam a dataje, kotrež nahrawam, swojim wobkedźbowankam přidać',
+'tog-watchdefault' => 'Strony a dataje, kotrež wobdźěłuju, swojim wobkedźbowankam přidać',
+'tog-watchmoves' => 'Sam přesunjene strony a dataje wobkedźbowankam přidać',
+'tog-watchdeletion' => 'Sam wušmórnjene strony a dataje wobkedźbowankam přidać',
 'tog-minordefault' => 'Wšě změny standardnje jako snadne woznamjenić',
 'tog-previewontop' => 'Přehlad před wobdźěłanskim polom pokazać',
 'tog-previewonfirst' => 'Při prěnim wobdźěłanju přehlad pokazać',
 'tog-nocache' => 'Pufrowanje stronow wobhladowaka znjemóžnić',
-'tog-enotifwatchlistpages' => 'E-mejlku pósłać, hdyž so strona z wobkedźbowankow změni',
+'tog-enotifwatchlistpages' => 'E-mejlku pósłać, hdyž so strona abo dataja z wobkedźbowankow změni',
 'tog-enotifusertalkpages' => 'E-mejlku pósłać, hdyž so moja wužiwarska diskusijna strona změni',
-'tog-enotifminoredits' => 'Tež dla snadnych změnow e-mejlki pósłać',
+'tog-enotifminoredits' => 'Tež za snadne změny stronow a datajow e-mejl pósłać',
 'tog-enotifrevealaddr' => 'Moju e-mejlowu adresu w e-mejlowych zdźělenkach wotkryć',
 'tog-shownumberswatching' => 'Ličbu wobkedźbowacych wužiwarjow pokazać',
 'tog-oldsig' => 'Eksistowaca signatura:',
@@ -325,7 +325,7 @@ $messages = array(
 'returnto' => 'Wróćo k stronje $1.',
 'tagline' => 'z {{GRAMMAR:genitiw|{{SITENAME}}}}',
 'help' => 'Pomoc',
-'search' => 'Pytać',
+'search' => 'pytać',
 'searchbutton' => 'Pytać',
 'go' => 'Pytać',
 'searcharticle' => 'Pytać',
@@ -509,6 +509,8 @@ Zdźěl to prošu [[Special:ListUsers/sysop|admininistratorej]] podawajo wotpow
 'cannotdelete' => 'Strona abo dataja "$1" njeje so dała wušmórnyć.
 Móže być, zo je hižo wot někoho druheho wušmórnjena.',
 'cannotdelete-title' => 'Strona "$1" njehodźi so zhašeć',
+'delete-hook-aborted' => 'Zhašenje přez hoku přetorhnjene.
+Njeje žane wujasnjenje podała.',
 'badtitle' => 'Wopačny titul',
 'badtitletext' => 'Požadane mjeno strony běše njepłaćiwy, prózdny abo njekorektny titul z mjezyrěčneho abo interwikijoweho wotkaza. Snano wobsahuje jedne znamješko abo wjacore znamješka, kotrež w titulach dowolene njejsu.',
 'perfcached' => 'Slědowace daty pochadźeja z pufrowaka a njejsu snano cyle aktualne. Maksimalnje {{PLURAL:$1|jedyn wuslědk|$1 wuslědkaj|$1 wuslědki|$1 wuslědkow}} w pufrowaku k dispoziciji {{PLURAL:$1|steji|stejitej|steja|steji}}.',
@@ -3680,6 +3682,8 @@ Hewak móžeš slědowacy jednory formular wužiwać. Twój komentar přida so s
 'api-error-empty-file' => 'Dataja, kotruž sy nahrał, je prózdna.',
 'api-error-emptypage' => 'Wutworjenje nowych, prózdnych stronow njeje dowolene.',
 'api-error-fetchfileerror' => 'Nutřkowny zmylk: při wobstarowanju dataje je so něšto nimokuliło.',
+'api-error-fileexists-forbidden' => 'Dataja z mjenom "$1" hižo eksistuje, a njeda so přepisać.',
+'api-error-fileexists-shared-forbidden' => 'Dataja z mjenom "$1" hižo eksistuje w zhromadnym datajowym repozitoriju a njeda so přepisać.',
 'api-error-file-too-large' => 'Dataja, kotruž sy nahrał, bě přewulka.',
 'api-error-filename-tooshort' => 'Datajowe mjeno překrótko',
 'api-error-filetype-banned' => 'Tutón datajowy typ je zawrjeny.',
index f71379d..0d7362b 100644 (file)
@@ -314,7 +314,7 @@ $linkTrail = '/^([a-záéíóúöüőűÁÉÍÓÚÖÜŐŰ]+)(.*)$/sDu';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Hivatkozások aláhúzása:',
-'tog-justify' => 'Sorkizárt fejezetek',
+'tog-justify' => 'Bekezdések sorkizárása',
 'tog-hideminor' => 'Apró változtatások elrejtése a friss változtatások lapon',
 'tog-hidepatrolled' => 'Az ellenőrzött szerkesztések elrejtése a friss változtatások lapon',
 'tog-newpageshidepatrolled' => 'Ellenőrzött lapok elrejtése az új lapok listájáról',
@@ -335,9 +335,9 @@ $messages = array(
 'tog-previewontop' => 'Előnézet megjelenítése a szerkesztőablak előtt',
 'tog-previewonfirst' => 'Előnézet első szerkesztésnél',
 'tog-nocache' => 'A lapok gyorstárazásának letiltása a böngészőben',
-'tog-enotifwatchlistpages' => 'Kapjak értesítést e-mailben, ha egy általam figyelt lap megváltozik',
+'tog-enotifwatchlistpages' => 'Kapjak értesítést e-mailben, ha egy általam figyelt lap vagy fájl megváltozik',
 'tog-enotifusertalkpages' => 'Kapjak értesítést e-mailben, ha megváltozik a vitalapom',
-'tog-enotifminoredits' => 'Kapjak értesítést e-mailben a lapok apró változtatásairól',
+'tog-enotifminoredits' => 'Kapjak értesítést e-mailben a lapok és fájlok apró változtatásairól',
 'tog-enotifrevealaddr' => 'Jelenjen meg az e-mail címem a figyelmeztető e-mailekben',
 'tog-shownumberswatching' => 'A lapot figyelő szerkesztők számának megjelenítése',
 'tog-oldsig' => 'A jelenlegi aláírás:',
index ce350d1..c572a41 100644 (file)
@@ -15,6 +15,7 @@
  * @author Togaed
  * @author Vacio
  * @author Xelgen
+ * @author Համլետ
  * @author לערי ריינהארט
  */
 
@@ -739,6 +740,9 @@ $2',
 Խնդրում ենք սպասել որոշ ժամանակ կրկին փորձելուց առաջ։',
 'loginlanguagelabel' => 'Լեզու. $1',
 
+# E-mail sending
+'php-mail-error-unknown' => 'Անհայտ սխալ PHP-ի mail() ֆունկցիայում',
+
 # Change password dialog
 'resetpass' => 'Փոխել գաղտնաբառը',
 'resetpass_announce' => 'Դուք ներկայացել եք էլ-փոստով ստացված ժամանակավոր գաղտնաբառով։ Համակարգ մուտքի համար անհրաժեշտ է նոր գաղտնաբառ ընտրել այստեղ.',
@@ -758,12 +762,15 @@ $2',
 'resetpass-temp-password' => 'Ժամանակավոր գաղտնաբառ.',
 
 # Special:PasswordReset
+'passwordreset-legend' => 'Վերականգնել գաղտնաբառը',
 'passwordreset-username' => 'Մասնակցի անուն.',
 'passwordreset-emailelement' => 'Մասնակցային անուն. $1
 Ժամանակավոր գաղտնաբառ. $2',
 
 # Special:ChangeEmail
 'changeemail' => 'Փոխել էլ. հասցեն',
+'changeemail-submit' => 'Խմբագրել էլ․ հասցեն',
+'changeemail-cancel' => 'Չեղարկել',
 
 # Edit page toolbar
 'bold_sample' => 'Թավատառ տեքստ',
@@ -939,6 +946,7 @@ $2',
 'log-fulllog' => 'Դիտել ամբողջական տեղեկամատյանը',
 'edit-conflict' => 'Խմբագրման ընհարում։',
 'edit-no-change' => 'Ձեր խմբագրումը անտեսվել է, քանի որ ոչ մի փոփոխություն չի կատարվել տեքստի մեջ։',
+'defaultmessagetext' => 'Լռելյան տեքստը',
 
 # "Undo" feature
 'undo-success' => 'Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։',
@@ -1044,7 +1052,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 
 # Diffs
 'history-title' => '«$1» էջի փոփոխումների պատմություն',
-'difference-title' => '$1: Խմագրումների տարբերություն',
+'difference-title' => '$1: Ô½Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ« Õ¿Õ¡Ö\80Õ¢Õ¥Ö\80Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶',
 'difference-title-multipage' => '$1 և $2: Խմբագրումների տարբերություն',
 'difference-multipage' => '(Էջերի տարերություն)',
 'lineno' => 'Տող  $1.',
@@ -2557,7 +2565,7 @@ $3
 'revdelete-summary-hid' => 'անտեսանելի դարձվեց խմբագրման ամփոփումը',
 'revdelete-uname-hid' => 'անտեսանելի դարձվեց մասնակցի անունը',
 'revdelete-content-unhid' => 'տեսանելի դարձվեց բովանդակությունը',
-'revdelete-summary-unhid' => 'տեսնելի դարձվեց խմագրման ամփոփումը',
+'revdelete-summary-unhid' => 'Õ¿Õ¥Õ½Õ¶Õ¥Õ¬Õ« Õ¤Õ¡Ö\80Õ±Õ¾Õ¥Ö\81 Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ´Õ¡Õ¶ Õ¡Õ´Ö\83Õ¸Ö\83Õ¸Ö\82Õ´Õ¨',
 'revdelete-uname-unhid' => 'տեսանելի դարձվեց մասնակցի անունը',
 'logentry-move-move' => '$1 տեղափոխեց էջը «$3»-ից «$4»',
 'logentry-move-move-noredirect' => '$1 տեղափոխեց էջը «$3»-ից «$4» առանց վերահղում թողնելու',
index 20ab73a..8fc05b0 100644 (file)
@@ -157,17 +157,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Activar modification de sectiones con clic-a-dextra super lor titulos (require JavaScript)',
 'tog-showtoc' => 'Monstrar tabula de contento (in paginas con plus de 3 sectiones)',
 'tog-rememberpassword' => 'Memorar mi contrasigno in iste navigator (pro un maximo de $1 {{PLURAL:$1|die|dies}})',
-'tog-watchcreations' => 'Adder le paginas que io crea a mi observatorio',
-'tog-watchdefault' => 'Adder le paginas que io modifica a mi observatorio',
-'tog-watchmoves' => 'Adder le paginas que io renomina a mi observatorio',
-'tog-watchdeletion' => 'Adder le paginas que io dele a mi observatorio',
+'tog-watchcreations' => 'Adder le paginas que io crea e le files que io incarga a mi observatorio',
+'tog-watchdefault' => 'Adder le paginas e files que io modifica a mi observatorio',
+'tog-watchmoves' => 'Adder le paginas e files que io renomina a mi observatorio',
+'tog-watchdeletion' => 'Adder le paginas e files que io dele a mi observatorio',
 'tog-minordefault' => 'Marcar omne modificationes initialmente como minor',
 'tog-previewontop' => 'Monstrar previsualisation ante le quadro de modification',
 'tog-previewonfirst' => 'Monstrar previsualisation al prime modification',
 'tog-nocache' => "Disactivar le ''cache'' de paginas in le navigator",
-'tog-enotifwatchlistpages' => 'Notificar me via e-mail quando un pagina in mi observatorio es modificate',
+'tog-enotifwatchlistpages' => 'Notificar me per e-mail quando un pagina o file in mi observatorio es modificate',
 'tog-enotifusertalkpages' => 'Notificar me via e-mail quando mi pagina de discussion es modificate',
-'tog-enotifminoredits' => 'Notificar me etiam de modificationes minor de paginas',
+'tog-enotifminoredits' => 'Notificar me etiam de modificationes minor de paginas e files',
 'tog-enotifrevealaddr' => 'Revelar mi adresse de e-mail in messages de notification',
 'tog-shownumberswatching' => 'Monstrar le numero de usatores que observa le pagina',
 'tog-oldsig' => 'Signatura existente:',
@@ -501,6 +501,8 @@ Per favor reporta isto a un [[Special:ListUsers/sysop|administrator]], faciente
 'cannotdelete' => 'Le pagina o file "$1" non poteva esser delite.
 Es possibile que un altere persona lo ha ja delite.',
 'cannotdelete-title' => 'Non pote deler le pagina "$1"',
+'delete-hook-aborted' => 'Le deletion ha essite abortate per un extension.
+Nulle explication es disponibile.',
 'badtitle' => 'Titulo invalide',
 'badtitletext' => 'Le titulo de pagina requestate es invalide, vacue, o un titulo interlingual o interwiki incorrectemente ligate.
 Es possibile que illo contine un o plure characteres que non pote esser usate in titulos.',
@@ -531,11 +533,13 @@ $2',
 'ns-specialprotected' => 'Le paginas special non es modificabile.',
 'titleprotected' => "Iste titulo ha essite protegite contra creation per [[User:$1|$1]].
 Le motivo specificate es ''$2''.",
-'filereadonlyerror' => 'Impossibile modificar le file "$1" perque le deposito de files "$2" es in modo de lectura sol.
+'filereadonlyerror' => 'Impossibile modificar le file "$1" perque le repositorio de files "$2" es in modo de lectura sol.
 
 Le administrator qui lo blocava offereva iste explication: "$3".',
 'invalidtitle-knownnamespace' => 'Titulo invalide con spatio de nomines "$2" e texto "$3"',
 'invalidtitle-unknownnamespace' => 'Titulo invalide con spatio de nomines incognite $1 e texto "$2"',
+'exception-nologin' => 'Non identificate',
+'exception-nologin-text' => 'Iste pagina o action necessita que tu aperi session in iste wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Configuration incorrecte: programma antivirus non cognoscite: ''$1''",
@@ -914,10 +918,10 @@ Tu pote retornar e modificar un pagina existente, o [[Special:UserLogin|aperir u
 'permissionserrors' => 'Errores de permissiones',
 'permissionserrorstext' => 'Tu non ha le permission de facer isto, pro le sequente {{PLURAL:$1|motivo|motivos}}:',
 'permissionserrorstext-withaction' => 'Tu non ha le permission de $2, pro le sequente {{PLURAL:$1|motivo|motivos}}:',
-'recreate-moveddeleted-warn' => "'''Attention: Tu es super le puncto de recrear un pagina que esseva anteriormente delite.'''
+'recreate-moveddeleted-warn' => "'''Attention: Tu es sur le puncto de recrear un pagina que esseva anteriormente delite.'''
 
 Tu deberea considerar si il es appropriate continuar a modificar iste pagina.
-Le registro de deletiones e de renominationes pro iste pagina se trova infra pro major commoditate:",
+Ecce le registro de deletiones e de renominationes pro iste pagina:",
 'moveddeleted-notice' => 'Iste pagina ha essite delite.
 In basso se revela le registro de deletiones e de modificationes del pagina pro ulterior informationes.',
 'log-fulllog' => 'Vider le registro complete',
@@ -1466,7 +1470,7 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'action-movefile' => 'renominar iste file',
 'action-upload' => 'incargar iste file',
 'action-reupload' => 'superscriber iste file existente',
-'action-reupload-shared' => 'supplantar iste file in un deposito commun',
+'action-reupload-shared' => 'supplantar iste file in un repositorio commun',
 'action-upload_by_url' => 'incargar iste file ab un adresse URL',
 'action-writeapi' => 'usar le API de scriptura',
 'action-delete' => 'deler iste pagina',
@@ -1623,7 +1627,7 @@ Illo pare esser un imagine a grandor reducite ''(miniatura)''.
 Si tu possede iste imagine in plen resolution, incarga lo, alteremente cambia le nomine del file per favor.",
 'fileexists-forbidden' => 'Un file con iste nomine existe ja, e non pote esser superscribite.
 Si tu vole ancora incargar iste file, per favor retorna e usa un nove nomine. [[File:$1|thumb|center|$1]]',
-'fileexists-shared-forbidden' => 'Un file con iste nomine existe ja in le deposito de files commun.
+'fileexists-shared-forbidden' => 'Un file con iste nomine existe ja in le repositorio de files commun.
 Si tu vole totevia incargar iste file, per favor retorna e usa un nove nomine. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Iste file es un duplicato del sequente {{PLURAL:$1|file|files}}:',
 'file-deleted-duplicate' => 'Un file identic a iste file ([[:$1]]) esseva ja delite anteriormente. Tu deberea verificar le registro de deletiones concernente iste file ante de re-incargar lo.',
@@ -1847,7 +1851,7 @@ Tu vole forsan modificar le description in le [$2 pagina de description del file
 'filepage-nofile-link' => 'Nulle file con iste nomine existe, ma tu pote [$1 incargar lo].',
 'uploadnewversion-linktext' => 'Incargar un nove version de iste file',
 'shared-repo-from' => 'ab $1',
-'shared-repo' => 'un deposito pro uso in commun',
+'shared-repo' => 'un repositorio partite',
 
 # File reversion
 'filerevert' => 'Reverter $1',
@@ -1976,8 +1980,8 @@ Le entratas <del>cancellate</del> ha essite resolvite.',
 'wantedpages' => 'Paginas plus demandate',
 'wantedpages-badtitle' => 'Titulo invalide in le gruppo de resultatos: $1',
 'wantedfiles' => 'Files desirate',
-'wantedfiletext-cat' => 'Le sequente files es usate ma non existe. Le files ab depositos distante pote esser listate malgrado que illos existe. Omne tal false positives essera <del>cancellate</del>. In addition, paginas que incorpora files que non existe es listate in [[:$1]].',
-'wantedfiletext-nocat' => 'Le sequente files es usate ma non existe. Files ab depositos distante pote esser listate malgrado que illos existe. Omne tal false positives essera <del>cancellate</del>.',
+'wantedfiletext-cat' => 'Le sequente files es usate ma non existe. Le files ab repositorios externe pote esser listate malgrado que illos existe. Omne tal false positivos essera <del>cancellate</del>. In addition, paginas que incorpora files que non existe es listate in [[:$1]].',
+'wantedfiletext-nocat' => 'Le sequente files es usate ma non existe. Files ab repositorios externe pote esser listate malgrado que illos existe. Omne tal false positivos essera <del>cancellate</del>.',
 'wantedtemplates' => 'Patronos desirate',
 'mostlinked' => 'Paginas le plus ligate',
 'mostlinkedcategories' => 'Categorias le plus ligate',
@@ -2726,8 +2730,8 @@ non pote renominar un pagina al mesme titulo.',
 'protectedpagemovewarning' => "'''Attention:''' Iste pagina ha essite protegite de sorta que solmente usatores con privilegios de administrator pote renominar lo. Le ultime entrata del registro es fornite hic infra pro referentia:",
 'semiprotectedpagemovewarning' => "'''Nota:''' Iste pagina ha essite protegite de sorta que solmente usatores registrate pote renominar lo. Le ultime entrata del registro es fornite hic infra pro referentia:",
 'move-over-sharedrepo' => '== File existe ==
-[[:$1]] existe ja in un deposito usate in commun. Si tu renomina le file a iste titulo, illo supplantara le file del deposito.',
-'file-exists-sharedrepo' => 'Le nomine de file seligite es ja in uso in un deposito usate in commun.
+[[:$1]] existe in un repositorio partite. Si le file es renominate a iste titulo, illo supplantara le file partite.',
+'file-exists-sharedrepo' => 'Le nomine de file seligite es ja in uso in un repositorio partite.
 Per favor selige un altere nomine.',
 
 # Export
@@ -3846,6 +3850,8 @@ Si non, tu pote usar le formulario facile hic infra. Tu commento essera addite a
 'api-error-empty-file' => 'Le file que tu submitteva es vacue.',
 'api-error-emptypage' => 'Le creation de nove paginas vacue non es permittite.',
 'api-error-fetchfileerror' => 'Error interne: qualcosa errava durante le obtention del file.',
+'api-error-fileexists-forbidden' => 'Un file con le nomine "$1" jam existe, e non pote esser superscribite.',
+'api-error-fileexists-shared-forbidden' => 'Un file con le nomine "$1" jam existe in le repositorio commun de files, e non pote esser superscribite.',
 'api-error-file-too-large' => 'Le file que tu submitteva es troppo grande.',
 'api-error-filename-tooshort' => 'Le nomine del file es troppo curte.',
 'api-error-filetype-banned' => 'Iste typo de file es prohibite.',
index 348424a..bb6185e 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Joemaza
  * @author Kaganer
  * @author Lam-ang
  * @author Saluyot
@@ -37,11 +38,11 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Pinag-ugisan ti silpo:',
 'tog-justify' => 'Limpiaen dagiti parapo',
-'tog-hideminor' => 'Ilemmeng dagiti babassit a panag-urnos kadagiti naudi a sinuk-sukatan',
+'tog-hideminor' => 'Ilemmeng dagiti bassit a panagbaliw kadagiti naudi a panagisukat',
 'tog-hidepatrolled' => 'Ilemmeng dagiti napatruliaan nga inurnos kadagiti naudi a sinuk-sukatan',
 'tog-newpageshidepatrolled' => 'Ilemmeng dagiti napatruliaan a panid idiay baro a listaan ti panid',
 'tog-extendwatchlist' => 'Ipalawa ti listaan ti bambantayan tapno maipakita amin a nasukatan, tapno saan laeng a dagiti nabiit',
-'tog-usenewrc' => 'Usaren ti napasayaat a kinaudi a sinuk-sukatan (masapul ti JavaScript)',
+'tog-usenewrc' => 'Dagiti grupo panagbaliw babaen ti panid kadagiti kinaudi a panagbaliw ken banbantayan  (masapul ti JavaScript)',
 'tog-numberheadings' => 'Automatiko a pabilangan dagiti paulo',
 'tog-showtoolbar' => 'Ipakita ti ramit ti panag-urnos (masapul ti JavaScript)',
 'tog-editondblclick' => 'Urnosen dagiti panid iti mamindua a panagtakla (masapul ti JavaScript)',
@@ -49,17 +50,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Ikkan ti pakabaelan ti paset  a panag-urnos no agtakla ti kanawan kadagiti paset a titulo (masapul ti JavaScript)',
 'tog-showtoc' => 'Ipakita ti tabla dagiti linaon (para kadagiti panid nga addan ti ad-adu ngem dagiti 3 a paulo)',
 'tog-rememberpassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (iti kaadu nga $1 {{PLURAL:$1|aldaw|al-aldaw}})',
-'tog-watchcreations' => 'Inayon dagiti inaramidko a pampanid iti listaan ti bambantayak',
-'tog-watchdefault' => 'Inayon dagiti inurnos ko a pampanid iti listaan ti bambantayak',
-'tog-watchmoves' => 'Inayon dagiti inyalisko a pampanid iti listaan ti bambantayak',
-'tog-watchdeletion' => 'Inayon dagiti inikkatko a pampanid iti listaan ti bambantayak',
+'tog-watchcreations' => 'Agnayon kadagiti panid a pinartuatko ken papeles  nga inpanko idiay listaan ti bambantayak',
+'tog-watchdefault' => 'Agnayon kadagiti panid ken papeles nga inurnosko idiay listaan ti bambantayak',
+'tog-watchmoves' => 'Agnayon kadagiti panid ken papeles nga inyalisko idiay listaan ti bambantayak',
+'tog-watchdeletion' => 'Agnayon kadagiti panid ken papeles nga inikkatko idiay listaan ti bambantayak',
 'tog-minordefault' => 'Markaan amin nga  inurnos a kas sigud a bassit',
 'tog-previewontop' => 'Ipakita ti panag-padas sakbay ti kahon ti inurnos',
 'tog-previewonfirst' => 'Ipakita ti na-ipadas iti umuna nga inurnos',
 'tog-nocache' => 'Ibaldado ti pagcache ti pabasabasam iti daytoy a panid',
-'tog-enotifwatchlistpages' => 'E-suratannak no adda mabaliwan a panid iti listaan dagiti bambantayak a pampanid',
+'tog-enotifwatchlistpages' => 'E-suratannak no mabaliwan ti panid wenno papeles idiay listaan dagiti bambantayak',
 'tog-enotifusertalkpages' => 'E-suratannak no mabaliwan ti panidko a tungtongan ti agar-aramat',
-'tog-enotifminoredits' => 'E-suratannak met kadagiti bassit a panag-urnos ti pampanid',
+'tog-enotifminoredits' => 'E-suratannak pay para kadagiti bassit a panag-urnos kadagiti panid ken papeles',
 'tog-enotifrevealaddr' => 'Iparang ti pagtaengan ti e-surat ko kadagiti pammalagip ti  e-surat',
 'tog-shownumberswatching' => 'Ipakita ti bilang dagiti agbambantay nga agar-aramat',
 'tog-oldsig' => 'Ti adda a pirma:',
@@ -69,7 +70,7 @@ $messages = array(
 'tog-showjumplinks' => 'Ikkan ti pakabaelan  a  "mapan iti"  agpalaka a sumrek kadagiti panagsilpo',
 'tog-uselivepreview' => 'Usaren ti panag-padas tattan (masapul ti JavaScript) (suuten laeng)',
 'tog-forceeditsummary' => 'Pakaammuannak no sumrek ti blanko a pakabuklan ti panag-urnos',
-'tog-watchlisthideown' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ko',
+'tog-watchlisthideown' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnosko',
 'tog-watchlisthidebots' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti bot',
 'tog-watchlisthideminor' => 'Ilemmeng idiay listaan ti bambantayan dagiti bassit nga  inurnos',
 'tog-watchlisthideliu' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti nakastrek nga agar-aramat',
@@ -391,6 +392,8 @@ Panngaasi nga  ibagam kadagiti [[Special:ListUsers/sysop|administrador]], isurat
 'cannotdelete' => 'Ti panid wenno ti papeles "$1" ket saan a maikkat.
 Amangan no addan sabali a nangikkat.',
 'cannotdelete-title' => 'Saan a maikkat ti panid  "$1"',
+'delete-hook-aborted' => 'Inukas ti kawit ti panagborra.
+Awan ti intedna a palawag.',
 'badtitle' => 'Madi a titulo',
 'badtitletext' => 'Ti nakiddaw a titulo ti panid ket imbalido, blanko, wenno saan nga umno a naisilpo a titulo a maki-pagsasao wenno maki-wiki.
 Adda ngata nagyan a maysa wenno ad-adu pay a kababalin a saan a mausar iti titulo.',
@@ -427,6 +430,8 @@ Ti naited a rason ket ''$2''.",
 Ti administrador a nagserra ket nagited iti daytoy a panagilawlawag "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Imbalido a titulo nga adda ti nagan ti lugar "$2" ken testo "$3"',
 'invalidtitle-unknownnamespace' => 'Imbalido a titulo nga adda di-amammo a nagan ti lugar a numero $1 ken testo "$2"',
+'exception-nologin' => 'Saan a nakastrek',
+'exception-nologin-text' => 'Daytoy a panid wenno aramid ket makasapul kenka ti sumrek iti daytoy a wiki.',
 
 # Virus scanner
 'virus-badscanner' => 'Madi di panaka-aramidna: Di am-ammo a birus a panagskan: "$1"',
@@ -1592,6 +1597,7 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-connect' => 'Saan a makaikapet idiay pagidulinan a kalikudan  "$1".',
 'backend-fail-internal' => 'Adda di amammo a biddut ti napasamak idiay pagidulinan a kalikudan "$1".',
 'backend-fail-contenttype' => 'Saan a maammoan ti kita ti linaon ti papeles nga idulin idiay "$1".',
+'backend-fail-batchsize' => 'Nagited ti nagipenpenan ti bunggoy iti $1 a papeles {{PLURAL:$1|nga aramid|nga ar-aramid}}; ti patingga ket $2 {{PLURAL:$2|nga aramid|nga ar-aramid}}.',
 'backend-fail-usable' => 'Saan a masuratan ti papeles $1 gapu ta awan ti makaanay a pammalubos wenno awan dagiti direktorio/pangikabilan.',
 
 # Lock manager
@@ -3667,6 +3673,8 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-empty-file' => 'Ti papeles nga intedmo ket awan ti nagyan na.',
 'api-error-emptypage' => 'Agar-aramid ti baro, dagiti awan ti linaon na a panid ket saan a maipalubos.',
 'api-error-fetchfileerror' => 'Kinauneg a biddut: Addaan ti dakes a napasamak idi agalala ti papeles.',
+'api-error-fileexists-forbidden' => 'Ti papeles nga agnagan ti "$1" ket addan, ken saan a mabalin a masuratan manen.',
+'api-error-fileexists-shared-forbidden' => 'Ti papeles nga agnagan ti "$1" ket adda idiay pagbibingayan a repositorio ti papeles, ken saan a mabalin a masuratan manen.',
 'api-error-file-too-large' => 'Ti papeles nga intedmo ket dakkel unay.',
 'api-error-filename-tooshort' => 'Ti nagan daytoy a papeles ket bassit unay.',
 'api-error-filetype-banned' => 'Ti kita daytoy a papeles ket maiparit.',
@@ -3705,4 +3713,6 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'duration-centuries' => '$1 {{PLURAL:$1|siglo|sig-siglo}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milenio|mil-milenio}}',
 
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'Saan a makaala kadagiti kandado ti server $1.',
 );
index 62e2fcd..024b453 100644 (file)
@@ -475,7 +475,7 @@ $1',
 'helppage' => 'Help:Efnisyfirlit',
 'mainpage' => 'Forsíða',
 'mainpage-description' => 'Forsíða',
-'policy-url' => 'Project:Stjórnarstefnur',
+'policy-url' => 'Project:Samþykktir',
 'portal' => 'Samfélagsgátt',
 'portal-url' => 'Project:Samfélagsgátt',
 'privacy' => 'Meðferð persónuupplýsinga',
index 33f5c56..7b19079 100644 (file)
@@ -277,17 +277,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Modifica delle sezioni tramite clic destro sul titolo (richiede JavaScript)',
 'tog-showtoc' => "Mostra l'indice per le pagine con più di 3 sezioni",
 'tog-rememberpassword' => 'Ricorda la password su questo browser (per un massimo di $1 {{PLURAL:$1|giorno|giorni}})',
-'tog-watchcreations' => 'Aggiungi le pagine create agli osservati speciali',
-'tog-watchdefault' => 'Aggiungi le pagine modificate agli osservati speciali',
-'tog-watchmoves' => 'Aggiungi le pagine spostate agli osservati speciali',
-'tog-watchdeletion' => 'Aggiungi le pagine cancellate agli osservati speciali',
+'tog-watchcreations' => 'Aggiungi le pagine create e i file caricati agli osservati speciali',
+'tog-watchdefault' => 'Aggiungi le pagine e i file modificati agli osservati speciali',
+'tog-watchmoves' => 'Aggiungi le pagine e i file spostati agli osservati speciali',
+'tog-watchdeletion' => 'Aggiungi le pagine e i file cancellati agli osservati speciali',
 'tog-minordefault' => 'Indica ogni modifica come minore (solo come predefinito)',
 'tog-previewontop' => "Mostra l'anteprima sopra la casella di modifica e non sotto",
 'tog-previewonfirst' => "Mostra l'anteprima per la prima modifica",
 'tog-nocache' => 'Disabilitare la cache delle pagine del browser',
-'tog-enotifwatchlistpages' => 'Segnalami via e-mail le modifiche alle pagine osservate',
+'tog-enotifwatchlistpages' => 'Inviami una email quando viene modificata una pagina o un file presente tra gli osservati speciali',
 'tog-enotifusertalkpages' => 'Segnalami via e-mail le modifiche alla mia pagina di discussione',
-'tog-enotifminoredits' => 'Segnalami via e-mail anche le modifiche minori',
+'tog-enotifminoredits' => 'Inviami una email anche per le modifiche minori di pagine e file',
 'tog-enotifrevealaddr' => 'Rivela il mio indirizzo e-mail nei messaggi di avviso',
 'tog-shownumberswatching' => 'Mostra il numero di utenti che hanno la pagina in osservazione',
 'tog-oldsig' => 'Firma attuale:',
@@ -620,6 +620,8 @@ Si prega di segnalare l\'accaduto a un [[Special:ListUsers/sysop|amministratore]
 'cannotdelete' => 'Non è stato possibile cancellare il file "$1".
 Potrebbe essere stato già cancellato da qualcun altro.',
 'cannotdelete-title' => 'Impossibile eliminare la pagina "$1"',
+'delete-hook-aborted' => "La cancellazione è stata annullata dall'hook.
+Non è stata restituita alcuna spiegazione.",
 'badtitle' => 'Titolo non corretto',
 'badtitletext' => 'Il titolo della pagina richiesta è vuoto, errato o con caratteri non ammessi oppure deriva da un errore nei collegamenti tra siti wiki diversi o versioni in lingue diverse dello stesso sito.',
 'perfcached' => "I dati che seguono sono estratti da una copia ''cache'' del database, e potrebbero non essere aggiornati. Un massimo di {{PLURAL:$1|un risultato è disponibile|$1 risultati sono disponibili}} in cache.",
@@ -3472,7 +3474,7 @@ I collegamenti successivi, sulla stessa riga, sono considerati come eccezioni (o
 'limitall' => 'tutti',
 
 # E-mail address confirmation
-'confirmemail' => 'Conferma indirizzo e-mail',
+'confirmemail' => 'Conferma indirizzo email',
 'confirmemail_noemail' => 'Non è stato indicato un indirizzo e-mail valido nelle proprie [[Special:Preferences|preferenze]].',
 'confirmemail_text' => "{{SITENAME}} richiede la verifica dell'indirizzo e-mail prima di poter usare le relative funzioni. Premere il pulsante qui sotto per inviare una richiesta di conferma al proprio indirizzo; nel messaggio è presente un collegamento che contiene un codice. Visitare il collegamento con il proprio browser per confermare che l'indirizzo e-mail è valido.",
 'confirmemail_pending' => "Il codice di conferma è già stato spedito via posta elettronica; se l'account è stato
@@ -3828,6 +3830,8 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'api-error-empty-file' => 'Il file selezionato era vuoto.',
 'api-error-emptypage' => 'La creazione di nuove pagine vuote non è consentita.',
 'api-error-fetchfileerror' => "Errore interno: c'è stato un problema durante il recupero del documento.",
+'api-error-fileexists-forbidden' => 'Un file di nome "$1" già esiste e non può essere sovrascritto.',
+'api-error-fileexists-shared-forbidden' => 'Un file di nome "$1" già esiste nel repository condiviso e non può essere sovrascritto.',
 'api-error-file-too-large' => 'Il file selezionato era troppo grande.',
 'api-error-filename-tooshort' => 'Il nome del file è troppo breve.',
 'api-error-filetype-banned' => 'Questo tipo di file non è accettato.',
index 8f42292..cc2ca02 100644 (file)
@@ -797,9 +797,9 @@ $2',
 他の名前を選んでください。',
 'loginerror' => 'ログインのエラー',
 'createaccounterror' => 'アカウントを作成できませんでした: $1',
-'nocookiesnew' => 'å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\82\92ä½\9cæ\88\90ã\81\97ましたが、ログインしていません。
+'nocookiesnew' => 'å\88©ç\94¨è\80\85ã\82¢ã\82«ã\82¦ã\83³ã\83\88ã\81¯ä½\9cæ\88\90ã\81\95ã\82\8cましたが、ログインしていません。
 {{SITENAME}}ではログインにCookieを使用します。
-Cookieを無効にしているようです。
+ご使用のブラウザではCookieが無効になっています。
 Cookieを有効にしてから、新しい利用者名とパスワードでログインしてください。',
 'nocookieslogin' => '{{SITENAME}}ではログインにCookieを使用します。
 Cookieを無効にしているようです。
@@ -2529,9 +2529,9 @@ $2による直前の版へ変更されました。',
 'protectlogpage' => '保護記録',
 'protectlogtext' => '以下はページ保護に対する変更の記録です。
 現在、保護レベルを変更できるページについては[[Special:ProtectedPages|保護ページ一覧]]を参照してください。',
-'protectedarticle' => ' が「[[$1]]」を保護しました',
-'modifiedarticleprotection' => ' が「[[$1]]」の保護レベルを変更しました',
-'unprotectedarticle' => ' が「[[$1]]」の保護を解除しました',
+'protectedarticle' => '「[[$1]]」を保護しました',
+'modifiedarticleprotection' => '「[[$1]]」の保護レベルを変更しました',
+'unprotectedarticle' => '「[[$1]]」の保護を解除しました',
 'movedarticleprotection' => ' が保護の設定を「[[$2]]」から「[[$1]]」へ移動しました',
 'protect-title' => '「$1」の保護レベルを変更',
 'protect-title-notallowed' => '「$1」の保護レベルを表示',
index e06c3a2..96c93d9 100644 (file)
@@ -164,17 +164,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'სექციის რედაქტირების ნებართვა მარჯვენა ღილაკზე დაჭერით<br />სექციის სათაურებზე (ჯავასკრიპტი)',
 'tog-showtoc' => 'აჩვენე სარჩევი (სამ ქვესათაურზე მეტის მქონე გვერდებისთვის)',
 'tog-rememberpassword' => 'დამიმახსოვრე ამ კომპიუტერზე (მაქსიმუმ $1 {{PLURAL:$1|დღე|დღე}})',
-'tog-watchcreations' => 'დაამატე ჩემი კონტროლის სიას ჩემს მიერ შექმნილი გვერდები',
-'tog-watchdefault' => 'დაამატე ჩემი კონტროლის სიას ჩემს მიერ რედაქტირებული გვერდები',
-'tog-watchmoves' => 'ჩასვი გვერდები, რომლებიც მე გადამაქვს, ჩემს კონტროლის სიაში',
-'tog-watchdeletion' => 'ჩასვი გვერდები, რომლებსაც მე ვშლი, ჩემს კონტროლის სიაში',
+'tog-watchcreations' => 'დაამატე ჩემი კონტროლის სიას ჩემს მიერ შექმნილი გვერდები და ატვირთული ფაილები',
+'tog-watchdefault' => 'დაამატე ჩემი კონტროლის სიას ჩემს მიერ რედაქტირებული გვერდები და ფაილები',
+'tog-watchmoves' => 'ჩასვი გვერდები და ფაილები, რომლებიც მე გადამაქვს, ჩემს კონტროლის სიაში',
+'tog-watchdeletion' => 'ჩასვი გვერდები და ფაილები, რომლებსაც მე ვშლი, ჩემს კონტროლის სიაში',
 'tog-minordefault' => 'ყველა რედაქტირების მონიშვნა, როგორც უმნიშვნელო, უპირობოდ',
 'tog-previewontop' => 'წინასწარი გადახედვის ჩვენება რედაქტირების დაფამდე',
 'tog-previewonfirst' => 'წინასწარი ჩვენება პირველივე რედაქტირებაზე',
 'tog-nocache' => 'გათიშეთ ბრაუზერში გვერდების ქეშირება',
-'tog-enotifwatchlistpages' => 'მომწერე ელ. ფოსტით, როცა გვერდი, რომელსაც მე ვაკონტროლებ, შეიცვლება',
+'tog-enotifwatchlistpages' => 'მომწერე ელ. ფოსტით, როცა გვერდი ან ფაილი, რომელსაც მე ვაკონტროლებ, შეიცვლება',
 'tog-enotifusertalkpages' => 'მომწერე თუ ჩემი განხილვის გვერდი შეიცვლება',
-'tog-enotifminoredits' => 'მომწერე ასევე გვერდების მცირე რედაქტირებისას',
+'tog-enotifminoredits' => 'მომწერე ასევე გვერდებისა და ფაილების მცირე რედაქტირებისას',
 'tog-enotifrevealaddr' => 'აჩვენე ჩემი ელ-ფოსტის მისამართი შეტყობინების წერილებში',
 'tog-shownumberswatching' => 'მაკონტროლებელ მომხმარებელთა რიცხვის ჩვენება',
 'tog-oldsig' => 'არსებული ხელმოწერა:',
@@ -546,6 +546,8 @@ $2',
 ადმინისტრატორი რომელმაც ის დაბლოკა მიუთითა შემდეგი მიზეზი: "$3".',
 'invalidtitle-knownnamespace' => 'დაუშვებელი სათაური სახელთა სივრცე "$2" და ტექსტი "$3"-თან',
 'invalidtitle-unknownnamespace' => 'დაუშვებელი სათაური უცნობი სახელთა სივრცის ნომერი $1 და ტექსტი "$2"-ით',
+'exception-nologin' => 'შესვლა არ განხორციელდა',
+'exception-nologin-text' => 'ამ გვერდის სანახავად ან მოთხოვნილი მოქმედების შესასრულებლად საჭიროა სისტემაში შესვლა.',
 
 # Virus scanner
 'virus-badscanner' => "შეცდომა. ვირუსთა უცნობი სკანერი: ''$1''",
index 04f8a7c..bca56ac 100644 (file)
@@ -645,7 +645,9 @@ $2',
 'token_suffix_mismatch' => "'''Уи гъэтэрэзыгъуэр къэштауэ щыткъым, уи программэм тэрэзу дэмыгъэ пыгъэувэхэм зэремылэжьым щхьэкӀэ 
 гъэтэрэзыгъуэ лъэныкъуэгъым. Гъэтэрэзыгъуэр къыкӀимыштар тхыгъэм и тхылъыр къуаншэ мыхъун щхьэкӀэ.
 Апхуэдэ хэукъуэгъуэхэр къызхэкӀыфынур аноним зыщӀ уэб-проксихэм, хэукъуэгъуэ зыхэлъхэм.'''",
+'edit_form_incomplete' => "'''Гъэтэрэзыгъуэ формэм и Ӏыхьэ гуэрэхэр серверым нэсакъым. Хэплъэ, уи гъэтэрэзыгъуэхэр зэӀымхьами, иджыри зэ гъэкӀуэж.'''",
 'editing' => 'Гъэтэрэзын: $1',
+'creating' => 'ЩӀын $1',
 'editingsection' => 'Гъэтэрэзын $1 (секцэр)',
 'editingcomment' => 'Гъэтэрэзыгъуэ $1 (лъэныкъуэгъу/секциэ щӀэ)',
 'editconflict' => 'Редактированием зэпэщӀэуэныгъэ: $1',
@@ -880,15 +882,42 @@ $1",
 
 # History merging
 'mergehistory' => 'Гъэтэрэзыгъуэхэм я тхыдэ зыуэ зэхэгъэхьа',
+'mergehistory-header' => 'Мы напэкӀуэцӀым деж зы пщӀыфынущ зэщымыщ напэкӀуэцӀытӀым я гъэтэрэзыгъуэ тхыдэр.
+Гу лъытэ, уи гъэтэрэзыгъуэм напэкӀуэцӀым и тхыдэр псоуэ къигъэнэн зэрыхуейм.',
+'mergehistory-box' => 'НапэкӀуэцӀитӀым я гъэтэрэзыгъуэ тхыдэр зы щӀын:',
+'mergehistory-from' => 'Япэреуэ напэкӀуэцӀыр:',
+'mergehistory-into' => 'НапэкӀуэцӀыр псоуэ:',
+'mergehistory-list' => 'Гъэтэрэзыгъуэхэм я тхыдэ зы хъур',
+'mergehistory-go' => 'Гъэтэрэзыгъуэ зы хъухэр гъэлъэгъуэн',
+'mergehistory-submit' => 'Гъэтэрэзыгъуэхэр зы щӀын',
+'mergehistory-empty' => 'Гъэтэрэзыгъуэ зы щӀынхэр къэгъуэтакъым.',
+'mergehistory-success' => '$3 {{PLURAL:$3|гъэтэрэзыгъуэ}} [[:$1]] щыщхэр {{PLURAL:$3|ехьэкӀащ|ехьэкӀахэщ}} [[:$2]].',
+'mergehistory-fail' => 'НапэкӀуэцӀхэм я тхыдэр зы щӀын хъуакъым, напэкӀуэцӀым и щыпхъэхэм еплъщ я зэфӀэкӀыгъуэхэм.',
+'mergehistory-no-source' => 'Япэрей щытыкӀэу напӀэкӀуэцӀ «$1» гъуэтакъым.',
+'mergehistory-invalid-source' => 'КъыхэхыпӀэм псалъащхьэ захуэ иӀэн хуейщ.',
+'mergehistory-invalid-destination' => 'НапэкӀуэцӀ псоуэ щытым псалъащхьэ зауэ иӀэн хуейщ.',
+'mergehistory-autocomment' => 'ЕхьэкӀыгъуэ [[:$1]] къыхэхауэ [[:$2]] гъэкӀуэн',
+'mergehistory-comment' => 'ЕхьэкӀыгъуэ [[:$1]] къыхэхауэ [[:$2]] гъэкӀуэн: $3',
+'mergehistory-same-destination' => 'Япэрейуэ щыт напэкӀуэцӀымрэ напэкӀуэцӀ псоуэ щытымрэ зэщхьэщыкӀын хуейщ',
+'mergehistory-reason' => 'Зытеухуар:',
 
 # Merge log
+'mergelog' => 'Зэхэгъэхьэгъуэхэм я тхылъ',
+'pagemerge-logentry' => 'Зы щӀащ [[$1]]-рэ [[$2]]-рэ (версиэхэр $3 нэгъунэ)',
 'revertmerge' => 'Зыхэдзын',
+'mergelogpagetext' => 'ИщӀагъымкӀэ зэхэгъэхьэгъуэхэм я тхыдэм и тхылъыр напэкӀуэцӀым еуэ гъэлъэгъуащ',
 
 # Diffs
-'history-title' => '$1 - зэхъуэкIыныгъэм и тхыдэ',
+'history-title' => '"$1" и зэхъуэкIыныгъэм и тхыдэр',
+'difference-title' => '"$1" версиэм я зэщхьэщыкӀыгъуэ',
+'difference-title-multipage' => 'НапэкӀуэцӀ "$1"-рэ "$2"-рэ я зэщхьэщыкӀыгъуэхэр',
+'difference-multipage' => '(НапэкӀуэцӀхэм я зэщхьэщыкӀыгъуэр)',
 'lineno' => 'Сатыр $1:',
 'compareselectedversions' => 'Хэха версиэхэр зэгъэпщэн',
+'showhideselectedversions' => 'Гъэлъэгъуэн/гъэпшкӀун версиэ хэхахэр',
 'editundo' => 'щӀегъуэжын',
+'diff-multi' => '({{PLURAL:$1|курыт версиэ $1-м ер гъэлъэгъуакъым|курыт версиэхэр $1-м ер гъэлъэгъуакъым}} {{PLURAL:$2|цӀыхухэт 2$|цӀыхухэтхэм 2$}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|курыт версиэ $1-м ер гъэлъэгъуащ|курыт версиэхэр $1-м ер гъэлъэгъуащ}}, щӀахэщ $2 нэхъыбэу {{PLURAL:$2|цӀыхухэт|цӀыхухэтхэм}})',
 
 # Search results
 'searchresults' => 'Лъыхъуэным къыхэкӀахэр',
index 765ebf6..50b14bb 100644 (file)
@@ -1062,7 +1062,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 'booksources-go' => 'So',
 
 # Special:Log
-'specialloguserlabel' => 'Karber:',
+'specialloguserlabel' => 'Kerdoğ:',
 'speciallogtitlelabel' => 'Sernuste:',
 'log' => 'Qeydi',
 
index 93ff9dd..8106cc0 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kazakh (Cyrillic script) (â\80ªÒ\9aазақша (кирил)‬)
+/** Kazakh (Cyrillic script) (â\80ªÒ\9bазақша (кирил)‬)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -1021,7 +1021,7 @@ IP-мекенжайыңыз бұл беттің түзету тарихында
 Бет мәтіні бүлінбеу үшін өңдемеңіз тайдырылады.
 Бұл кей уақытта қатесі толған веб-негізінде тіркелуі жоқ прокси-серверді пайдаланған болуы мүмкін.'''",
 'editing' => 'Өңделуде: $1',
-'creating' => 'Ð\91астау: $1',
+'creating' => 'Ð\96аңадан Ð±астау: $1',
 'editingsection' => 'Өңделуде: $1 (бөлімі)',
 'editingcomment' => 'Өңделуде: $1 (жаңа бөлім)',
 'editconflict' => 'Өңдемелер қақтығысы: $1',
@@ -1460,9 +1460,9 @@ $3 келтірілген себебі: ''$2''",
 'right-suppressredirect' => 'Тиісті атауға бетті жылжытқанда айдағышты жасамау',
 'right-upload' => 'Файлдарды жүктеу',
 'right-reupload' => 'Бар файл үстіне жазу',
-'right-reupload-own' => 'Өзі қотарып берген файл үстіне жазу',
+'right-reupload-own' => 'Өзі жүктеген файл үстіне жазу',
 'right-reupload-shared' => 'Таспа ортақ қоймасындағы файлдарды жергіліктілермен асыру',
-'right-upload_by_url' => 'Файлды URL мекенжайынан қотарып беру',
+'right-upload_by_url' => 'Файлды URL мекенжайдан жүктеу',
 'right-purge' => 'Бетті торап бүркемесінен құптаусыз тазарту',
 'right-autoconfirmed' => 'Жартылай қорғалған беттерді өңдеу',
 'right-bot' => 'Өздіктік үдеріс деп есептелу',
@@ -1492,7 +1492,7 @@ $3 келтірілген себебі: ''$2''",
 'right-markbotedits' => 'Шегіндірлген өңдемелерді боттардікі деп белгілеу',
 'right-noratelimit' => 'Еселік шектелімдері ықпал етпейді',
 'right-import' => 'Басқа уикилерден беттерді сырттан алу',
-'right-importupload' => 'Файл қотарып беруімен беттерді сырттан алу',
+'right-importupload' => 'Файлдарды жүктеу арқылы беттерді сырттан алу',
 'right-patrol' => 'Басқарардың өңдемелерін зерттелді деп белгілеу',
 'right-autopatrol' => 'Өз өңдемелерін зерттелді деп өздіктік белгілеу',
 'right-patrolmarks' => 'Жуықтағы өзгерістердегі зерттеу белгілерін көру',
@@ -1571,10 +1571,10 @@ $3 келтірілген себебі: ''$2''",
 'reuploaddesc' => 'Жүктеу пішініне қайта келу.',
 'upload-tryagain' => 'Файл сипаттамасының өзгерістерін жөнелту',
 'uploadnologin' => 'Кірмегенсіз',
-'uploadnologintext' => 'Файлдарды қотарып беру үшін [[{{#special:Userlogin}}|кіруіңіз]] жөн.',
+'uploadnologintext' => 'Файлдарды жүктеу үшін  [[Special:UserLogin|кіруіңіз]] жөн.',
 'upload_directory_missing' => 'Қотарып бермек қалтасы ($1) жетіспейді және веб-сервер жарата алмайды.',
 'upload_directory_read_only' => 'Қотарып бермек қалтасына ($1) веб-сервер жаза алмайды.',
-'uploaderror' => 'Қотарып беру қатесі',
+'uploaderror' => 'Жүктеу қатесі',
 'uploadtext' => "Төмендегі пішінді файлдарды қотарып беру үшін қолданыңыз.
 Алдында қотарылып берілген файлдарды қарау не іздеу үшін [[{{#special:FileList}}|қотарып берілген файлдар тізіміне]] барыңыз, тағы да қотарып беруі мен жоюы  [[{{#special:Log}}/upload|қотарып беру журналына]] жазылып алынады.
 
@@ -1634,7 +1634,7 @@ $3 келтірілген себебі: ''$2''",
 'uploadwarning' => 'Қотарып беру жөнінде құлақтандыру',
 'savefile' => 'Файлды сақтау',
 'uploadedimage' => '«[[$1]]» файлын жүктеді',
-'overwroteimage' => '«[[$1]]» файлынның жаңа нұсқасын қотарып берді',
+'overwroteimage' => '«[[$1]]» деген файлдың жаңа нұсқасын жүктеді',
 'uploaddisabled' => 'Қотарып беру өшірілген',
 'copyuploaddisabled' => 'URL арқылы жүктеу өшірілген.',
 'uploaddisabledtext' => '{{SITENAME}} жобасында файл қотарып беруі өшірілген.',
@@ -1756,7 +1756,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'mimesearch-summary' => 'Бұл бетте файлдарды MIME түрімен сүзгілеуі қосылған.
 Кірісі: мағлұмат_түрі/түр_тарауы, мысалы <tt>image/jpeg</tt>.',
 'mimetype' => 'MIME түрі:',
-'download' => 'қотарып алу',
+'download' => 'жүктеп алу',
 
 # Unwatched pages
 'unwatchedpages' => 'Бақыланылмаған беттер',
@@ -2128,7 +2128,7 @@ $2 соңғы нұсқасына өзгертті.',
 'restriction-edit' => 'Өңдеуге',
 'restriction-move' => 'Жылжытуға',
 'restriction-create' => 'Бастауға',
-'restriction-upload' => 'Қотарып беруге',
+'restriction-upload' => 'Жүктеу',
 
 # Restriction levels
 'restriction-level-sysop' => 'толықтай қорғалған',
@@ -2474,20 +2474,20 @@ MediaWiki жүйесінің [[{{#special:Import}}|сырттан алу бет
 'importsuccess' => 'Сырттан алу аяқталды!',
 'importhistoryconflict' => 'Тарихында қақтығысты түзету бар (бұл бет алдында сырттан алынған сияқты)',
 'importnosources' => 'Уики-апару үшін сырттан алынатын еш қайнар көзі анықталмаған, және тарихын тікелей қотарып беруі өшірілген.',
-'importnofile' => 'Сырттан алынған файл қотарып берілген жоқ.',
-'importuploaderrorsize' => 'Сырттан алынған файлдың қотарып берілуі сәтсіз өтті. Файл мөлшері қотарып берілуге руқсат етілгеннен асады.',
-'importuploaderrorpartial' => 'Сырттан алынған файлдың қотарып берілуі сәтсіз өтті. Осы файлдың тек бөліктері қотарылып берілді.',
-'importuploaderrortemp' => 'Сырттан алынған файлдың қотарып берілуі сәтсіз өтті. Уақытша қалта табылмады.',
+'importnofile' => 'Сырттан алынған файл жүктелген жоқ.',
+'importuploaderrorsize' => 'Сырттан алынған файлдың жүктелуі сәтсіз өтті. Файл мөлшері рұқсат етілгеннен мөлшерден асады.',
+'importuploaderrorpartial' => 'Сырттан алынған файлдың жүктелуі сәтсіз өтті. Осы файлдың тек бөліктері жүктелді.',
+'importuploaderrortemp' => 'Сырттан алынған файлдың жүктелуі сәтсіз өтті. Уақытша қалта табылмады.',
 'import-parse-failure' => 'Сырттан алынған XML файл құрылымын талдатқанда сәтсіздік болды',
 'import-noarticle' => 'Сырттан алынатын еш бет жоқ!',
 'import-nonewrevisions' => 'Барлық түзетулері алдында сырттан алынған.',
 'xml-error-string' => '$1 нөмір $2 жолда, баған $3 (байт $4): $5',
-'import-upload' => 'XML деректерін қотарып беру',
+'import-upload' => 'XML деректерін жүктеу',
 
 # Import log
 'importlogpage' => 'Сырттан алу журналы',
 'importlogpagetext' => 'Беттерді түзету тарихымен бірге сыртқы уикилерден әкімші ретінде алу.',
-'import-logentry-upload' => '«[[$1]]» дегенді файл қотарып беру арқылы сырттан алды',
+'import-logentry-upload' => '«[[$1]]» дегенді файл жүктеу арқылы сырттан алды',
 'import-logentry-upload-detail' => '$1 түзету',
 'import-logentry-interwiki' => 'уики-апарылған $1',
 'import-logentry-interwiki-detail' => '$2 дегеннен $1 түзету',
@@ -2531,7 +2531,7 @@ MediaWiki жүйесінің [[{{#special:Import}}|сырттан алу бет
 'tooltip-feed-atom' => 'Бұл беттің Atom арнасы',
 'tooltip-t-contributions' => 'Осы қатысушының үлес тізімін қарау',
 'tooltip-t-emailuser' => 'Осы қатысушыға хат жөнелту',
-'tooltip-t-upload' => 'Файлдарды қотарып беру',
+'tooltip-t-upload' => 'Файлдарды жүктеу',
 'tooltip-t-specialpages' => 'Барлық арнайы беттер тізімі',
 'tooltip-t-print' => 'Бұл беттің басып шығарышқа арналған нұсқасы',
 'tooltip-t-permalink' => 'Мына беттің осы нұсқасының тұрақты сілтемесі',
@@ -2552,7 +2552,7 @@ MediaWiki жүйесінің [[{{#special:Import}}|сырттан алу бет
 'tooltip-compareselectedversions' => 'Беттің екі бөлектенген нұсқасы айырмасын қарау.',
 'tooltip-watch' => 'Бұл бетті бақылау тізіміңізге үстеу',
 'tooltip-recreate' => 'Бет жойылғанына қарамастан қайта бастау',
-'tooltip-upload' => 'Қотарып беруді бастау',
+'tooltip-upload' => 'Жүктеуді бастау',
 'tooltip-rollback' => '"Шегіндіру" сілтемесін бір рет басу арқылы соңға редактордың барлық қатар өңдемелерін өшіру',
 'tooltip-summary' => 'Қысқаша сипаттамасын жазыңыз',
 
@@ -2654,7 +2654,7 @@ $1',
 # Special:NewFiles
 'newimages' => 'Жаңа файлдар көрмесі',
 'imagelisttext' => "Төменде $2 сұрыпталған '''$1''' файл тізімі.",
-'newimages-summary' => 'Ð\91ұл Ð°Ñ\80найÑ\8b Ð±ÐµÑ\82Ñ\96нде Ñ\81оңÒ\93Ñ\8b Ò\9bоÑ\82аÑ\80Ñ\8bп Ð±ÐµÑ\80Ñ\96лген файлдар көрсетіледі',
+'newimages-summary' => 'Ð\91ұл Ð°Ñ\80найÑ\8b Ð±ÐµÑ\82Ñ\82е Ñ\81оңÒ\93Ñ\8b Ð¶Ò¯ÐºÑ\82елген файлдар көрсетіледі',
 'newimages-legend' => 'Сүзгі',
 'showhidebots' => '(боттарды $1)',
 'noimages' => 'Көретін ештеңе жоқ.',
@@ -3171,7 +3171,7 @@ $5
 'specialpages-group-other' => 'Тағы басқа арнайы беттер',
 'specialpages-group-login' => 'Кіру / тіркелу',
 'specialpages-group-changes' => 'Жуықтағы өзгерістер мен журналдар',
-'specialpages-group-media' => 'Таспа баянаттары және қотарып берілгендер',
+'specialpages-group-media' => 'Таспа баянаттары және жүктелгендер',
 'specialpages-group-users' => 'Қатысушылар және олардың құқықтары',
 'specialpages-group-highuse' => 'Өте көп қолданылған беттер',
 'specialpages-group-pages' => 'Беттер тізімі',
@@ -3185,9 +3185,17 @@ $5
 'intentionallyblankpage' => 'Бұл бет әдейі бос қалдырылған',
 
 # New logging system
+'logentry-delete-delete' => '$1 $3 деген бетті жойды',
 'revdelete-restricted' => 'әкімшілерге тиымдар қолдады',
 'revdelete-unrestricted' => 'әкімшілерден тиымдарды аластады',
+'logentry-move-move' => '$1 $3 бетін $4 бетіне жылжытты',
 'logentry-move-move-noredirect' => '$1 $3 бетін $4 бетіне жылжытты (айдатқыш қалдырылмады)',
+'logentry-move-move_redir' => '$1 $3 бетін $4 деген айдатқыш үстіне жылжытты',
 'logentry-move-move_redir-noredirect' => '$1 $3 бетін $4 деген айдатқыш үстіне жылжытты (айдатқыш қалдырылмады)',
+'logentry-newusers-newusers' => '$1 жаңадан аккаунт тіркеді',
+'logentry-newusers-create' => '$1 жаңадан аккаунт тіркеді',
+'logentry-newusers-create2' => '$1 $3 деген аккаунт тіркеді',
+'logentry-newusers-autocreate' => '$1 аккаунты автоматты түрде тіркелді',
+'newuserlog-byemail' => 'Құпия сөз e-mail арқылы жіберілді',
 
 );
index 3068bda..ef977dd 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kazakh (Latin script) (‪Qazaqşa (latın)‬)
+/** Kazakh (Latin script) (‪qazaqşa (latın)‬)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 5e57de7..ac94583 100644 (file)
@@ -340,43 +340,43 @@ $messages = array(
 'tog-underline' => '링크에 밑줄 표시하기:',
 'tog-justify' => '문단 정렬하기',
 'tog-hideminor' => '사소한 편집을 최근 바뀜에서 숨기기',
-'tog-hidepatrolled' => '최근 바뀜에서 검토ë\90\9c í\8e¸ì§\91ì\9d\84 ì\88¨ê¸°ê¸°',
-'tog-newpageshidepatrolled' => '새 문서 목록에서 검토ë\90\9c ë¬¸ì\84\9c를 ì\88¨ê¸°ê¸°',
+'tog-hidepatrolled' => '최근 바뀜에서 검토í\95\9c í\8e¸ì§\91ì\9d\84 ì\88¨ê¸°ê¸°',
+'tog-newpageshidepatrolled' => '새 문서 목록에서 검토í\95\9c ë¬¸ì\84\9c를 ì\88¨ê¸°ê¸°',
 'tog-extendwatchlist' => '주시문서 목록에서 가장 최근의 편집만이 아닌 모든 편집을 보기',
 'tog-usenewrc' => '최근 바뀜 및 주시 문서 목록에서 문서별 그룹 바뀜 (자바스크립트 필요)',
 'tog-numberheadings' => '머릿글 번호 매기기',
-'tog-showtoolbar' => '편집창에 툴바 보이기 (자바스크립트)',
-'tog-editondblclick' => '더블 클릭으로 문서 편집하기 (자바스크립트)',
+'tog-showtoolbar' => '편집창에 툴바 보이기 (자바스크립트 필요)',
+'tog-editondblclick' => '더블 클릭으로 문서 편집하기 (자바스크립트 필요)',
 'tog-editsection' => '[편집] 링크로 부분 편집하기',
-'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 부분 편집하기 (자바스크립트)',
+'tog-editsectiononrightclick' => '제목을 오른쪽 클릭해서 부분 편집하기 (자바스크립트 필요)',
 'tog-showtoc' => '문서의 차례 보여주기 (머릿글이 4개 이상인 경우)',
 'tog-rememberpassword' => '이 브라우저에서 로그인 상태를 저장하기 (최대 $1일)',
-'tog-watchcreations' => '내가 처음 만드는 문서를 주시문서 목록에 추가',
-'tog-watchdefault' => '내가 편집하는 문서 주시문서 목록에 추가',
-'tog-watchmoves' => '내가 이동하는 문서 주시문서 목록에 추가',
-'tog-watchdeletion' => '내가 삭제하는 문서 주시문서 목록에 추가',
-'tog-minordefault' => '‘사소한 편집’을 기본적으로 선택하기',
-'tog-previewontop' => '편집ì\83\81ì\9e\90 ì\95\9eì\97\90 ë¯¸ë¦¬ë³´ê¸° ë³´ì\9d´ê¸°',
-'tog-previewonfirst' => '처음 편집할 때 미리보기 보기',
+'tog-watchcreations' => '내가 만드는 문서와 내가 올린 파일을 주시문서 목록에 추가',
+'tog-watchdefault' => '내가 편집하는 문서와 파일을 주시문서 목록에 추가',
+'tog-watchmoves' => '내가 이동하는 문서와 파일을 주시문서 목록에 추가',
+'tog-watchdeletion' => '내가 삭제하는 문서와 파일을 주시문서 목록에 추가',
+'tog-minordefault' => '사소한 편집을 기본적으로 선택하기',
+'tog-previewontop' => '편집 ì\83\81ì\9e\90 ì\95\9eì\97\90 ë¯¸ë¦¬ ë³´ê¸° ë³´ê¸°',
+'tog-previewonfirst' => '처음 편집할 때 미리 보기 보기',
 'tog-nocache' => '브라우저의 문서 캐시 끄기',
-'tog-enotifwatchlistpages' => '주시문서 바뀌면 이메일로 알림',
+'tog-enotifwatchlistpages' => '주시문서 목록에 속한 문서나 파일이 바뀌면 이메일로 알림',
 'tog-enotifusertalkpages' => '내 토론 문서가 바뀌면 이메일로 알림',
-'tog-enotifminoredits' => '사소한 편집도 이메일로 알림',
+'tog-enotifminoredits' => '문서나 파일의 사소한 편집도 이메일로 알림',
 'tog-enotifrevealaddr' => '알림 메일에 내 이메일 주소를 밝히기',
 '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' => '접근성을 위한 "이동" 링크 쓰기 (일부 스킨에서만 작동)',
-'tog-uselivepreview' => '실시간 미리 보기 사용하기 (자바스크립트 사용, 시험 중)',
+'tog-uselivepreview' => '실시간 미리 보기 사용하기 (자바스크립트 필요) (시험 기능)',
 'tog-forceeditsummary' => '편집 요약을 쓰지 않았을 때 알려주기',
 'tog-watchlisthideown' => '주시문서 목록에서 내 편집을 숨기기',
 'tog-watchlisthidebots' => '주시문서 목록에서 봇 편집을 숨기기',
 'tog-watchlisthideminor' => '주시문서 목록에서 사소한 편집을 숨기기',
 'tog-watchlisthideliu' => '주시문서 목록에서 로그인한 사용자의 편집을 숨기기',
-'tog-watchlisthideanons' => '주시문서 목록에서 비등록 사용자의 편집을 숨기기',
-'tog-watchlisthidepatrolled' => '주시문서 목록에서 검토ë\90\9c í\8e¸ì§\91ì\9d\84 ì\88¨ê¸°ê¸°',
+'tog-watchlisthideanons' => '주시문서 목록에서 익명 사용자의 편집을 숨기기',
+'tog-watchlisthidepatrolled' => '주시문서 목록에서 검토í\95\9c í\8e¸ì§\91ì\9d\84 ì\88¨ê¸°ê¸°',
 'tog-nolangconversion' => '변형 변환을 비활성화',
 'tog-ccmeonemails' => '이메일을 보낼 때 내 이메일로 복사본을 보내기',
 'tog-diffonly' => '편집 차이를 비교할 때 문서 내용을 보지 않기',
@@ -449,19 +449,19 @@ $messages = array(
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|분류}}',
-'category_header' => '‘$1’ 분류에 속하는 문서',
+'category_header' => '"$1" 분류에 속하는 문서',
 'subcategories' => '하위 분류',
-'category-media-header' => '‘$1’ 분류에 속하는 자료',
+'category-media-header' => '"$1" 분류에 속하는 자료',
 'category-empty' => '이 분류에 속하는 문서나 자료가 없습니다.',
 'hidden-categories' => '{{PLURAL:$1|숨은 분류}}',
 'hidden-category-category' => '숨은 분류',
 'category-subcat-count' => '{{PLURAL:$2|이 분류에는 하위 분류 1개만이 속해 있습니다.|다음은 이 분류에 속하는 하위 분류 $2개 가운데 $1개입니다.}}',
-'category-subcat-count-limited' => '이 분류에 하위분류가 $1개 있습니다.',
+'category-subcat-count-limited' => '이 분류에 하위 분류 $1개가 있습니다.',
 'category-article-count' => '{{PLURAL:$2|이 분류에는 문서 1개만이 속해 있습니다.|다음은 이 분류에 속하는 문서 $2개 가운데 $1개입니다.}}',
-'category-article-count-limited' => '이 분류에 문서가 $1개 있습니다.',
+'category-article-count-limited' => '이 분류에 문서 $1개가 있습니다.',
 'category-file-count' => '{{PLURAL:$2|이 분류에는 파일 1개만이 속해 있습니다.|다음은 이 분류에 속하는 파일 $2개 가운데 $1개입니다.}}',
-'category-file-count-limited' => '이 분류에 파일이 $1개 있습니다.',
-'listingcontinuesabbrev' => ' (계속)',
+'category-file-count-limited' => '이 분류에 파일 $1개가 있습니다.',
+'listingcontinuesabbrev' => '(계속)',
 'index-category' => '색인된 문서',
 'noindex-category' => '색인에서 제외되는 문서',
 'broken-file-category' => '잘못된 파일 링크가 포함된 문서',
@@ -494,7 +494,7 @@ $messages = array(
 'vector-action-move' => '이동',
 'vector-action-protect' => '보호',
 'vector-action-undelete' => '되살리기',
-'vector-action-unprotect' => 'ë³´í\98¸ ì\84¤ì \95 ë³\80ê²½',
+'vector-action-unprotect' => 'ë³´í\98¸ ì\84¤ì \95 ë°\94꾸기',
 'vector-simplesearch-preference' => '향상된 검색어 제안 사용하기 (벡터 스킨 전용)',
 'vector-view-create' => '만들기',
 'vector-view-edit' => '편집',
@@ -529,9 +529,9 @@ $messages = array(
 'undelete_short' => '편집 $1개 되살리기',
 'viewdeleted_short' => '삭제된 편집 $1개 보기',
 'protect' => '보호',
-'protect_change' => 'ë³´í\98¸ ì\88\98ì¤\80 ë³\80ê²½',
+'protect_change' => 'ë³´í\98¸ ì\88\98ì¤\80 ë°\94꾸기',
 'protectthispage' => '이 문서 보호하기',
-'unprotect' => 'ë³´í\98¸ ì\84¤ì \95 ë³\80ê²½',
+'unprotect' => 'ë³´í\98¸ ì\84¤ì \95 ë°\94꾸기',
 'unprotectthispage' => '이 문서의 보호 설정을 변경하기',
 'newpage' => '새 문서',
 'talkpage' => '토론 문서',
@@ -545,7 +545,7 @@ $messages = array(
 'toolbox' => '도구모음',
 'userpage' => '사용자 문서 보기',
 'projectpage' => '프로젝트 문서 보기',
-'imagepage' => '자료 문서 보기',
+'imagepage' => '파일 문서 보기',
 'mediawikipage' => '메시지 문서 보기',
 'templatepage' => '틀 문서 보기',
 'viewhelppage' => '도움말 문서 보기',
@@ -554,7 +554,7 @@ $messages = array(
 'otherlanguages' => '다른 언어',
 'redirectedfrom' => '($1에서 넘어옴)',
 'redirectpagesub' => '넘겨주기 문서',
-'lastmodifiedat' => '이 문서는 $1 $2 에 마지막으로 바뀌었습니다.',
+'lastmodifiedat' => '이 문서는 $1 $2에 마지막으로 바뀌었습니다.',
 'viewcount' => '이 문서는 $1번 읽혔습니다.',
 'protectedpage' => '보호된 문서',
 'jumpto' => '이동:',
@@ -594,10 +594,11 @@ $1',
 'badaccess-groups' => '요청한 동작은 {{PLURAL:$2|다음|다음 중 하나의}} 권한을 가진 사용자에게만 가능합니다: $1.',
 
 'versionrequired' => '미디어위키 $1 버전 필요',
-'versionrequiredtext' => '이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다. [[Special:Version|설치된 미디어위키 버전]]을 확인해주세요.',
+'versionrequiredtext' => '이 문서를 사용하려면 $1 버전 미디어위키가 필요합니다.
+[[Special:Version|설치된 미디어위키 버전]]을 참고하세요.',
 
 'ok' => '확인',
-'retrievedfrom' => '원본 주소 ‘$1’',
+'retrievedfrom' => '원본 주소 "$1"',
 'youhavenewmessages' => '다른 사용자가 $1란에 글을 남겼습니다. ($2)',
 'newmessageslink' => '사용자 토론',
 'newmessagesdifflink' => '바뀐 내용 비교',
@@ -621,7 +622,7 @@ $1',
 'feed-unavailable' => '피드 서비스는 제공하지 않습니다',
 'site-rss-feed' => '$1 RSS 피드',
 'site-atom-feed' => '$1 Atom 피드',
-'page-rss-feed' => '‘$1’ RSS 피드',
+'page-rss-feed' => '"$1" RSS 피드',
 'page-atom-feed' => '"$1" Atom 피드',
 'red-link-title' => '$1 (없는 문서)',
 'sort-descending' => '내림차순 정렬',
@@ -644,7 +645,7 @@ $1',
 'nosuchactiontext' => 'URL로 요청한 동작이 잘못되었습니다.
 당신은 URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니다.
 이것은 {{SITENAME}}의 버그일 수도 있습니다.',
-'nosuchspecialpage' => '해당하는 특수기능이 없습니다.',
+'nosuchspecialpage' => '해당하는 특수 문서가 없습니다.',
 'nospecialpagetext' => '<strong>요청한 특수 문서가 존재하지 않습니다.</strong>
 
 특수 문서의 목록은 [[Special:SpecialPages|여기]]에서 볼 수 있습니다.',
@@ -669,7 +670,7 @@ $1',
 'readonlytext' => '데이터베이스가 잠겨 있어서 문서를 편집할 수 없습니다. 데이터베이스 관리가 끝난 후에는 정상으로 돌아올 것입니다.
 
 관리자가 데이터베이스를 잠글 때 남긴 메시지는 다음과 같습니다: $1',
-'missing-article' => '데이터베이스에서 ‘$1’ 문서$2를 찾지 못했습니다.
+'missing-article' => '데이터베이스에서 "$1" 문서의 $2 텍스트를 찾지 못했습니다.
 
 삭제된 문서의 역사/비교 문서를 보려고 시도할 때 이러한 문제가 발생할 수 있습니다.
 
@@ -679,25 +680,32 @@ $1',
 'readonly_lag' => '슬레이브 데이터베이스가 마스터 서버의 자료를 갱신하는 중입니다. 데이터베이스가 자동으로 잠겨 있습니다.',
 'internalerror' => '내부 오류',
 'internalerror_info' => '내부 오류: $1',
-'fileappenderrorread' => '‘$1’ 파일을 읽을 수 없습니다. 해당 파일에 내용을 덧붙일 수 없습니다.',
-'fileappenderror' => '‘$1’ 파일을 ‘$2’에 덧붙일 수 없습니다.',
-'filecopyerror' => '‘$1’ 파일을 ‘$2’(으)로 복사할 수 없습니다.',
-'filerenameerror' => '‘$1’ 파일을 ‘$2’(으)로 옮길 수 없습니다.',
-'filedeleteerror' => '‘$1’ 파일을 삭제할 수 없습니다.',
-'directorycreateerror' => '‘$1’ 디렉토리를 만들 수 없습니다.',
-'filenotfound' => '‘$1’ 파일을 찾을 수 없습니다.',
+'fileappenderrorread' => '내용을 덧붙이다가 "$1" 파일을 읽을 수 없습니다.',
+'fileappenderror' => '"$1" 파일을 "$2"에 덧붙일 수 없습니다.',
+'filecopyerror' => '"$1" 파일을 "$2"로 복사할 수 없습니다.',
+'filerenameerror' => '"$1" 파일을 "$2"로 옮길 수 없습니다.',
+'filedeleteerror' => '"$1" 파일을 삭제할 수 없습니다.',
+'directorycreateerror' => '"$1" 디렉토리를 만들 수 없습니다.',
+'filenotfound' => '"$1" 파일을 찾을 수 없습니다.',
 'fileexistserror' => '"$1" 파일이 이미 있어 여기에 쓸 수 없습니다.',
 'unexpected' => '예상되지 않은 값: "$1"="$2"',
 'formerror' => '오류: 양식을 제출할 수 없습니다.',
 'badarticleerror' => '지금의 명령은 이 문서에서는 실행할 수 없습니다.',
-'cannotdelete' => '"$1" 문서나 파일을 삭제할 수 없습니다. 이미 삭제되었을 수도 있습니다.',
+'cannotdelete' => '"$1" 문서나 파일을 삭제할 수 없습니다.
+이미 삭제되었을 수도 있습니다.',
 'cannotdelete-title' => '"$1" 문서를 삭제할 수 없습니다.',
+'delete-hook-aborted' => '훅에 의해 삭제가 중단되었습니다.
+아무런 설명도 주어지지 않았습니다.',
 'badtitle' => '잘못된 제목',
-'badtitletext' => '문서 제목이 잘못되었거나 비어있습니다.',
+'badtitletext' => '문서 제목이 잘못되었거나 비어있습니다. 또는 잘못된 인터위키 제목으로 링크했습니다.
+문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
 'perfcached' => '다음 자료는 캐시된 것이므로 현재 상황을 반영하지 않을 수 있습니다. 캐시에 최대 {{PLURAL:$1|결과 $1개}}가 있습니다.',
-'perfcachedts' => '다음 자료는 캐시된 것으로, $1에 마지막으로 갱신되었습니다.  캐시에 최대 {{PLURAL:$4|결과 $4개}}가 있습니다.',
-'querypage-no-updates' => '이 문서의 갱신이 현재 비활성화되어 있습니다. 자료가 잠시 갱신되지 않을 것입니다.',
-'wrong_wfQuery_params' => 'wfQuery()에서 잘못된 매개변수 발생<br />함수: $1<br />쿼리: $2',
+'perfcachedts' => '다음 자료는 캐시된 것으로, $1에 마지막으로 새로 고쳐졌습니다.  캐시에 최대 {{PLURAL:$4|결과 $4개}}가 있습니다.',
+'querypage-no-updates' => '이 문서의 갱신이 현재 비활성화되어 있습니다.
+자료가 잠시 새로 고치지 않을 것입니다.',
+'wrong_wfQuery_params' => 'wfQuery()에서 잘못된 매개변수 발생<br />
+함수: $1<br />
+쿼리: $2',
 'viewsource' => '내용 보기',
 'viewsource-title' => '$1 문서 내용 보기',
 'actionthrottled' => '동작 중지',
@@ -707,26 +715,28 @@ $1',
 'viewsourcetext' => '문서의 원본을 보거나 복사할 수 있습니다:',
 'viewyourtext' => "당신은 이 문서에 남긴 '''당신의 편집''' 내용을 보거나 복사할 수 있습니다:",
 'protectedinterface' => '이 문서는 소프트웨어 인터페이스에 쓰이는 문서로, 잠겨 있습니다.',
-'editinginterface' => "'''경고''': 소프트웨어에서 사용하는 메시지 문서를 고치고 있습니다. 이것은 모든 사용자에게 영향을 끼칩니다. 번역되지 않은 메시지를 번역하려는 경우에는, [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하면 메시지 번역을 미디어위키에 직접 반영할 수 있습니다.",
+'editinginterface' => "'''경고''': 소프트웨어에서 사용하는 메시지 문서를 고치고 있습니다.
+이는 모든 사용자에게 영향을 끼칩니다.
+번역되지 않은 메시지를 번역하려는 경우에는 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하면 메시지 번역을 미디어위키에 직접 반영할 수 있습니다.",
 'sqlhidden' => '(SQL 쿼리 숨겨짐)',
-'cascadeprotected' => '이 문서는 연쇄보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다. 연쇄 보호된 문서:
+'cascadeprotected' => '이 문서는 연쇄 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다. 연쇄 보호된 문서:
 $2',
-'namespaceprotected' => "'''$1''' 네임스페이스를 편집할 수 있는 권한이 없습니다.",
+'namespaceprotected' => "'''$1''' 이름공간을 편집할 수 있는 권한이 없습니다.",
 'customcssprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 당신은 이 CSS 문서를 편집할 수 없습니다.',
 'customjsprotected' => '여기에는 다른 사용자의 개인 설정이 포함되어 있기 때문에 당신은 이 자바스크립트 문서를 편집할 수 없습니다.',
-'ns-specialprotected' => '{{ns:special}} ë\84¤ì\9e\84ì\8a¤í\8e\98ì\9d´ì\8a¤ì\9d\98 ë¬¸ì\84\9cë\8a\94 í\8e¸ì§\91í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.',
-'titleprotected' => '[[User:$1|$1]] 사용자가 문서 생성을 금지했습니다.
-이유는 다음과 같습니다. ‘$2’',
-'filereadonlyerror' => '‘$2’ 파일 저장소가 읽기 전용이기 때문에 ‘$1’ 파일을 변경할 수 없습니다.
-
-ì \80ì\9e¥ì\86\8c ê´\80리ì\9e\90ê°\80 í\8c\8cì\9d¼ ì \80ì\9e¥ì\86\8c를 ì\9e ê·¼ ì\9d´ì\9c ì\97\90 ë\8c\80í\95´ "\'\'$3\'\'"ì\9d´ë\9d¼ë\8a\94 ì\84¤ëª\85ì\9d\84 ë\82¨ê²¼ì\8aµë\8b\88ë\8b¤.',
-'invalidtitle-knownnamespace' => '제목 오류: 이름공간 "$2"와 텍스트 "$3"',
-'invalidtitle-unknownnamespace' => '제목 오류: 알 수 없는 이름공간 번호 "$1"과, 텍스트 "$2"',
+'ns-specialprotected' => 'í\8a¹ì\88\98 ë¬¸ì\84\9cë\8a\94 í\8e¸ì§\91í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.',
+'titleprotected' => '[[User:$1|$1]] 사용자가 문서 만들기를 금지했습니다.
+이유는 다음과 같습니다. "$2"',
+'filereadonlyerror' => '"$2" 파일 저장소가 읽기 전용이기 때문에 "$1" 파일을 변경할 수 없습니다.
+
+ì \80ì\9e¥ì\86\8c ê´\80리ì\9e\90ê°\80 í\8c\8cì\9d¼ ì \80ì\9e¥ì\86\8c를 ì\9e ê·¼ ì\9d´ì\9c ì\97\90 ë\8c\80í\95\9c ì\84¤ëª\85ì\9d\84 ë\82¨ê²¼ì\8aµë\8b\88ë\8b¤: "$3".',
+'invalidtitle-knownnamespace' => '제목 오류: "$2" 이름공간과 "$3" 텍스트',
+'invalidtitle-unknownnamespace' => '제목 오류: 알 수 없는 $1 이름공간 번호와, "$2" 텍스트',
 'exception-nologin' => '로그인하지 않음',
 'exception-nologin-text' => '이 문서나 행동은 이 위키에 로그인을 해야 합니다.',
 
 # Virus scanner
-'virus-badscanner' => "잘못된 설정: 알 수 없는 바이러스 검사기: ''$1''",
+'virus-badscanner' => "잘못된 설정: 알 수 없는 바이러스 검사기: '''$1'''",
 'virus-scanfailed' => '검사 실패 (코드 $1)',
 'virus-unknownscanner' => '알려지지 않은 백신:',
 
@@ -740,11 +750,11 @@ $2',
 [[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.',
 'yourname' => '계정 이름:',
 'yourpassword' => '비밀번호:',
-'yourpasswordagain' => '비밀번호 입력:',
+'yourpasswordagain' => '비밀번호 다시 입력:',
 'remembermypassword' => '이 컴퓨터에서 로그인 상태를 저장하기 (최대 $1일)',
-'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다.',
-'yourdomainname' => '도메인 이름',
-'externaldberror' => '외부 인증 데이터베이스에 오류가 있거나, 외부 계정을 갱신할 권한이 없습니다.',
+'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다',
+'yourdomainname' => '도메인 이름:',
+'externaldberror' => '외부 인증 데이터베이스에 오류가 있거나 외부 계정을 갱신할 권한이 없습니다.',
 'login' => '로그인',
 'nav-login-createaccount' => '로그인 / 계정 만들기',
 'loginprompt' => '{{SITENAME}}에 로그인하려면 쿠키를 사용할 수 있어야 합니다.',
@@ -757,7 +767,7 @@ $2',
 'nologinlink' => '계정을 만들 수 있습니다',
 'createaccount' => '계정 만들기',
 'gotaccount' => "계정이 이미 있다면, '''$1'''.",
-'gotaccountlink' => '로그인',
+'gotaccountlink' => '로그인하세요',
 'userlogin-resetlink' => '계정 이름이나 비밀번호를 잊으셨나요?',
 'createaccountmail' => '이메일로 보내기',
 'createaccountreason' => '이유:',
@@ -765,21 +775,28 @@ $2',
 'userexists' => '입력하신 사용자 이름이 이미 등록되어 있습니다.
 다른 이름을 선택해주십시오.',
 'loginerror' => '로그인 오류',
-'createaccounterror' => '계정을 생성하지 못했습니다: $1',
-'nocookiesnew' => '사용자 계정을 만들었지만, 아직 로그인하지 않았습니다. {{SITENAME}}에서는 로그인 정보를 저장하기 위해 쿠키를 사용합니다. 지금 사용하는 웹 브라우저는 쿠키를 사용하지 않도록 설정되어 있습니다. 로그인하기 전에 웹 브라우저에서 쿠키를 사용하도록 설정해주세요.',
-'nocookieslogin' => '{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다. 당신의 웹 브라우저에서 쿠키가 비활성되어 있습니다. 쿠키 사용을 활성화한 다음 로그인해 주세요.',
-'nocookiesfornew' => '요청의 출처를 확인할 수 없기 때문에 사용자 계정이 생성되지 않았습니다.
+'createaccounterror' => '계정을 만들지 못했습니다: $1',
+'nocookiesnew' => '사용자 계정을 만들었지만, 아직 로그인하지 않았습니다.
+{{SITENAME}}에서는 로그인 정보를 저장하기 위해 쿠키를 사용합니다.
+지금 사용하는 웹 브라우저는 쿠키를 사용하지 않도록 설정되어 있습니다.
+로그인하기 전에 웹 브라우저에서 쿠키를 사용하도록 설정해주세요.',
+'nocookieslogin' => '{{SITENAME}}에서는 로그인을 위해 쿠키를 사용합니다.
+당신의 웹 브라우저에서 쿠키가 비활성되어 있습니다.
+쿠키 사용을 활성화한 다음 로그인해 주세요.',
+'nocookiesfornew' => '요청의 출처를 확인할 수 없기 때문에 사용자 계정이 만들어지지 않았습니다.
 쿠키를 허용한 것을 확인한 후에 다시 시도해 보십시오.',
 'noname' => '사용자 이름이 올바르지 않습니다.',
 'loginsuccesstitle' => '로그인 성공',
-'loginsuccess' => "'''{{SITENAME}}에 ‘$1’ 계정으로 로그인했습니다.'''",
+'loginsuccess' => "'''{{SITENAME}}에 \"\$1\" 계정으로 로그인했습니다.'''",
 'nosuchuser' => '"$1" 사용자가 존재하지 않습니다.
 사용자 이름은 대소문자를 구별합니다. 철자가 맞는지 확인해주세요.
 [[Special:UserLogin/signup|새 계정을 만들 수도 있습니다]].',
-'nosuchusershort' => '이름이 ‘$1’인 사용자는 없습니다. 철자가 맞는지 확인해 주세요.',
+'nosuchusershort' => '이름이 ‘$1’인 사용자는 없습니다.
+철자가 맞는지 확인해 주세요.',
 'nouserspecified' => '사용자 이름을 입력하지 않았습니다.',
 'login-userblocked' => '이 사용자는 차단되었습니다. 로그인할 수 없습니다.',
-'wrongpassword' => '입력한 비밀번호가 다릅니다. 다시 시도해 주세요.',
+'wrongpassword' => '입력한 비밀번호가 다릅니다.
+다시 시도해 주세요.',
 'wrongpasswordempty' => '비밀번호를 입력하지 않았습니다.
 다시 시도해 주세요.',
 'passwordtooshort' => '비밀번호는 $1 문자 이상이어야 합니다.',
@@ -788,61 +805,69 @@ $2',
 'mailmypassword' => '새 비밀번호를 이메일로 보내기',
 'passwordremindertitle' => '{{SITENAME}}의 새 임시 비밀번호',
 'passwordremindertext' => '$1 IP 주소에서 누군가가 아마 자신이 {{SITENAME}} ($4)의 새 비밀번호를 요청했습니다.
-‘$2’ 사용자의 임시 비밀번호는 ‘$3’로 설정되었습니다. 이것이 자신이 의도한 바라면 지금 로그인하여 새로운 비밀번호를 만드십시오.
-당신의 임시 비밀번호는 $5일 후에 무효화됩니다.
-
-이 요청을 다른 사람이 했거나 이전 비밀번호를 기억해 내서 바꿀 필요가 없으면 이 메시지를 무시하고 이전 비밀번호를 계속 사용할 수 있습니다.',
-'noemail' => '‘$1’ 사용자는 이메일 주소를 등록하지 않았습니다.',
-'noemailcreate' => '바른 이메일 주소를 써야 합니다.',
-'passwordsent' => '‘$1’ 계정의 새로운 비밀번호를 이메일로 보냈습니다. 비밀번호를 받고 다시 로그인해 주세요.',
+"$2" 사용자의 임시 비밀번호는 "$3"로 설정되었습니다. 이것이 자신이 의도한 바라면
+지금 로그인하여 새로운 비밀번호를 만드세요.
+당신의 임시 비밀번호는 $5일 후에 만료됩니다.
+
+이 요청을 다른 사람이 했거나 이전 비밀번호를 기억해 내서 바꿀 필요가 없으면
+이 메시지를 무시하고 이전 비밀번호를 계속 사용할 수 있습니다.',
+'noemail' => '"$1" 사용자는 이메일 주소를 등록하지 않았습니다.',
+'noemailcreate' => '바른 이메일 주소를 제공해야 합니다.',
+'passwordsent' => '"$1" 계정의 새로운 비밀번호를 이메일로 보냈습니다.
+비밀번호를 받고 다시 로그인해 주세요.',
 'blocked-mailpassword' => '당신의 IP 주소는 편집을 할 수 없게 차단되어 있어서 악용하지 못하도록 비밀번호 되살리기 기능 사용이 금지됩니다.',
-'eauthentsent' => '확인 이메일을 보냈습니다. 이메일 내용의 지시대로 계정 확인 절차를 실행해 주십시오.',
-'throttled-mailpassword' => '비밀번호 확인 이메일을 이미 최근 $1 시간 안에 보냈습니다. 악용을 방지하기 위해 비밀번호 확인 메일은 $1 시간마다 오직 하나씩만 보낼 수 있습니다.',
+'eauthentsent' => '입력한 이메일로 확인 이메일을 보냈습니다.
+게정에서 다른 이메일로 보내기 전에 이메일 내용의 지시대로 계정 확인 절차를 실행해 주십시오.',
+'throttled-mailpassword' => '비밀번호 확인 이메일을 이미 최근 $1시간 안에 보냈습니다.
+악용을 방지하기 위해 비밀번호 확인 메일은 $1시간마다 오직 하나씩만 보낼 수 있습니다.',
 'mailerror' => '메일 보내기 오류: $1',
-'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 계정을 $1개 만들어, 계정 생성 한도를 초과하였습니다.
+'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 계정을 $1개 만들어, 계정 만들기 한도를 초과하였습니다.
 따라서 지금은 이 IP 주소로는 더 이상 계정을 만들 수 없습니다.',
 'emailauthenticated' => '당신의 이메일 주소는 $2 $3에 인증되었습니다.',
-'emailnotauthenticated' => '이메일 주소를 인증하지 않았습니다. 이메일 확인 절차를 거치지 않으면 다음 이메일 기능을 사용할 수 없습니다.',
-'noemailprefs' => '이 기능을 사용하기 위해서는 환경설정에서 이메일 주소를 설정해야 합니다.',
+'emailnotauthenticated' => '이메일 주소를 인증하지 않았습니다.
+이메일 확인 절차를 거치지 않으면 다음 이메일 기능을 사용할 수 없습니다.',
+'noemailprefs' => '이 기능을 사용하기 위해서는 사용자 환경 설정에서 이메일 주소를 설정해야 합니다.',
 'emailconfirmlink' => '이메일 주소 확인',
 'invalidemailaddress' => '이메일 주소의 형식이 잘못되어 인식할 수 없습니다.
 정상적인 형식의 이메일을 입력하거나 칸을 비워 주세요.',
 'cannotchangeemail' => '이 위키에서는 계정의 이메일 주소를 바꿀 수 없습니다.',
 'emaildisabled' => '이 사이트에서는 이메일을 보낼 수 없습니다.',
 'accountcreated' => '계정 만들어짐',
-'accountcreatedtext' => '‘$1’ 사용자 계정이 만들어졌습니다.',
+'accountcreatedtext' => '"$1" 사용자 계정이 만들어졌습니다.',
 'createaccount-title' => '{{SITENAME}} 계정 만들기',
-'createaccount-text' => '누군가가 {{SITENAME}} ($4)에서 계정 이름 ‘$2’, 비밀번호 ‘$3’로 당신의 이메일 주소가 등록된 계정을 만들었습니다. 지금 로그인하여 비밀번호를 바꾸십시오.
+'createaccount-text' => '누군가가 {{SITENAME}} ($4)에서 계정 이름 ‘$2’, 비밀번호 ‘$3’로 당신의 이메일 주소가 등록된 계정을 만들었습니다. 
+지금 로그인하여 비밀번호를 바꾸십시오.
 
 실수로 계정을 잘못 만들었다면 이 메시지는 무시해도 됩니다.',
-'usernamehasherror' => 'ê³\84ì \95 ì\9d´ë¦\84ì\97\90ë\8a\94 í\95´ì\8b\9c ë¬¸ì\9e\90ê°\80 ë\93¤ì\96´ê°\80ì\84\9cë\8a\94 ì\95\88 ë\90©니다.',
+'usernamehasherror' => 'ê³\84ì \95 ì\9d´ë¦\84ì\97\90ë\8a\94 í\95´ì\8b\9c ë¬¸ì\9e\90ê°\80 ë\93¤ì\96´ê°\88 ì\88\98 ì\97\86ì\8aµ니다.',
 'login-throttled' => '로그인에 연속으로 실패하였습니다.
 잠시 후에 다시 시도해주세요.',
 'login-abort-generic' => '로그인에 실패했습니다 - 중지됨',
 'loginlanguagelabel' => '언어: $1',
-'suspicious-userlogout' => 'ë¸\8cë\9d¼ì\9a°ì \80ì\9d\98 이상이 있거나 캐싱 프록시에서 로그아웃을 요청했기 때문에 로그아웃이 거부되었습니다.',
+'suspicious-userlogout' => 'ë¸\8cë\9d¼ì\9a°ì \80ì\97\90 이상이 있거나 캐싱 프록시에서 로그아웃을 요청했기 때문에 로그아웃이 거부되었습니다.',
 
 # E-mail sending
 'php-mail-error-unknown' => 'PHP의 mail() 함수에서 알 수 없는 오류가 발생했습니다.',
-'user-mail-no-addy' => '받는 이의 이메일 주소가 없다면 이메일을 보낼 수 없습니다.',
+'user-mail-no-addy' => '받는이의 이메일 주소가 없으면 이메일을 보낼 수 없습니다.',
 
 # Change password dialog
 'resetpass' => '비밀번호 바꾸기',
-'resetpass_announce' => '이메일로 받은 임시 비밀번호로 로그인했습니다. 로그인을 마치려면 새 비밀번호를 여기에서 설정해야 합니다:',
+'resetpass_announce' => '이메일로 받은 임시 비밀번호로 로그인했습니다.
+로그인을 마치려면 새 비밀번호를 여기에서 설정해야 합니다:',
 'resetpass_text' => '<!-- 여기에 텍스트를 추가하세요 -->',
-'resetpass_header' => 'ë¹\84ë°\80ë²\88í\98¸ ë³\80ê²½',
+'resetpass_header' => 'ë¹\84ë°\80ë²\88í\98¸ ë°\94꾸기',
 'oldpassword' => '이전 비밀번호:',
 'newpassword' => '새 비밀번호:',
 'retypenew' => '새 비밀번호 재입력:',
 'resetpass_submit' => '비밀번호를 설정하고 로그인하기',
-'resetpass_success' => '비밀번호를 변경했습니다!
-이제...사용하십시오.',
-'resetpass_forbidden' => '비밀번호 변경 불가',
+'resetpass_success' => '비밀번호를 성공적으로 바꿨습니다!
+이제 로그인을 합니다...',
+'resetpass_forbidden' => '비밀번호를 바꿀 수 없음',
 'resetpass-no-info' => '이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.',
-'resetpass-submit-loggedin' => 'ë¹\84ë°\80ë²\88í\98¸ ë³\80ê²½',
+'resetpass-submit-loggedin' => 'ë¹\84ë°\80ë²\88í\98¸ ë°\94꾸기',
 'resetpass-submit-cancel' => '취소',
 'resetpass-wrong-oldpass' => '비밀번호가 잘못되었거나 현재의 비밀번호와 같습니다.
\8b¹ì\8b ì\9d\80 ì\9d´ë¯¸ ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\84±ê³µì \81ì\9c¼ë¡\9c ë³\80ê²½í\95\98ì\98\80거나 새 임시 비밀번호를 발급받았을 수 있습니다.',
\8b¹ì\8b ì\9d\80 ì\9d´ë¯¸ ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\84±ê³µì \81ì\9c¼ë¡\9c ë°\94꾸ì\97\88거나 새 임시 비밀번호를 발급받았을 수 있습니다.',
 'resetpass-temp-password' => '임시 비밀번호:',
 
 # Special:PasswordReset
@@ -850,25 +875,29 @@ $2',
 'passwordreset-text' => '이메일을 통해 계정 정보를 받을 수 있습니다. 아래의 칸을 채워주세요.',
 'passwordreset-legend' => '비밀번호 재설정',
 'passwordreset-disabled' => '이 위키에서는 비밀번호를 재설정할 수 없습니다.',
-'passwordreset-pretext' => '{{PLURAL:$1||ì\95\84ë\9e\98ì\97\90 í\95\9c ê°\80ì§\80 ì \95보를 ì\9e\85ë ¥í\95´ì£¼ì\8b­ì\8b\9cì\98¤}}',
+'passwordreset-pretext' => '{{PLURAL:$1||ì\95\84ë\9e\98ì\97\90 í\95\9c ê°\80ì§\80 ì \95보를 ì\9e\85ë ¥í\95\98ì\84¸ì\9a\94}}',
 'passwordreset-username' => '계정 이름:',
 'passwordreset-domain' => '도메인:',
 'passwordreset-capture' => '발송 결과 이메일을 보시겠습니까?',
 'passwordreset-capture-help' => '이 상자에 체크하면 이메일이 발송된 즉시 임시 비밀번호가 담긴 이메일을 볼 수 있습니다.',
 'passwordreset-email' => '이메일 주소:',
 'passwordreset-emailtitle' => '{{SITENAME}} 계정 상세 정보',
-'passwordreset-emailtext-ip' => 'IP 주소 $1을 사용하는 누군가(아마도 당신이), {{SITENAME}} ($4)의 비밀번호 찾기를 요청하였습니다. 이 이메일 주소와 연관된 계정의 목록입니다:
+'passwordreset-emailtext-ip' => 'IP 주소 $1을 사용하는 누군가(아마도 당신이), {{SITENAME}} ($4)의 비밀번호 찾기를 요청하였습니다.
+이 이메일 주소와 연관된 계정의 목록입니다:
 
 $2
 
-이 {{PLURAL:$3|임시 비밀번호}}의 효력은 $5일 후 만료됩니다.
-이 비밀번호로 로그인한 후 비밀번호를 변경하십시오. 만약 당신이 아닌 다른 사람이 요청하였거나, 원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
-'passwordreset-emailtext-user' => '{{SITENAME}} ($4)의 사용자 $1이 비밀번호 찾기를 요청하였습니다. 이 이메일 주소와 연관된 계정의 목록입니다:
+이 {{PLURAL:$3|임시 비밀번호}}는 $5일 후에 만료됩니다.
+이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,
+원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
+'passwordreset-emailtext-user' => '{{SITENAME}} ($4)의 사용자 $1이 비밀번호 찾기를 요청하였습니다.
+이 이메일 주소와 연관된 계정의 목록입니다:
 
 $2
 
-이 {{PLURAL:$3|임시 비밀번호}}의 효력은 $5일 후 만료됩니다.
-이 비밀번호로 로그인한 후 비밀번호를 변경하십시오. 만약 당신이 아닌 다른 사람이 요청하였거나, 원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
+이 {{PLURAL:$3|임시 비밀번호}}는 $5일 후에 만료됩니다.
+이 비밀번호로 로그인한 후 비밀번호를 바꾸십시오. 만약 당신이 아닌 다른 사람이 요청하였거나,
+원래의 비밀번호를 기억해냈다면, 이 메시지를 무시하고 이전의 비밀번호를 계속 사용할 수 있습니다.',
 'passwordreset-emailelement' => '계정 이름: $1
 임시 비밀번호: $2',
 'passwordreset-emailsent' => '비밀번호 찾기 이메일을 보냈습니다.',
@@ -877,13 +906,13 @@ $2
 
 # Special:ChangeEmail
 'changeemail' => '이메일 주소 바꾸기',
-'changeemail-header' => 'ê³\84ì \95 ë©\94ì\9d¼ ì£¼ì\86\8c ë³\80ê²½',
-'changeemail-text' => 'ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ë°\94꾸려면 ì\9d´ ì\96\91ì\8b\9dì\9d\84 ì±\84ì\9b\8c주ì\8b­ì\8b\9cì\98¤. ë³\80ê²½ ë\82´ì\9a©ì\9d\84 í\99\95ì\9d¸í\95\98기 ì\9c\84í\95´ ë\8b¹ì\8b ì\9d\98 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\9e\85ë ¥í\95´ì\95¼합니다.',
+'changeemail-header' => 'ê³\84ì \95 ë©\94ì\9d¼ ì£¼ì\86\8c ë°\94꾸기',
+'changeemail-text' => 'ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ë°\94꾸려면 ì\9d´ ì\96\91ì\8b\9dì\9d\84 ì±\84ì\9a°ì\84¸ì\9a\94. ë³\80ê²½ ë\82´ì\9a©ì\9d\84 í\99\95ì\9d¸í\95\98기 ì\9c\84í\95´ ë\8b¹ì\8b ì\9d\98 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\9e\85ë ¥í\95´ì\95¼ 합니다.',
 'changeemail-no-info' => '이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.',
 'changeemail-oldemail' => '현재 E-mail 주소 :',
 'changeemail-newemail' => '새 이메일 주소:',
 'changeemail-none' => '(없음)',
-'changeemail-submit' => 'ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c ë³\80ê²½',
+'changeemail-submit' => 'ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c ë°\94꾸기',
 'changeemail-cancel' => '취소',
 
 # Edit page toolbar
@@ -914,24 +943,28 @@ $2
 'showpreview' => '미리 보기',
 'showlivepreview' => '실시간 미리 보기',
 'showdiff' => '차이 보기',
-'anoneditwarning' => "'''주의''': 로그인하고 있지 않습니다. 당신의 IP 주소가 문서 역사에 남게 됩니다.",
+'anoneditwarning' => "'''주의''': 로그인하고 있지 않습니다.
+당신의 IP 주소가 문서 역사에 남게 됩니다.",
 'anonpreviewwarning' => "'''당신은 지금 로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''",
-'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다. 그대로 저장하면 편집 요약 없이 저장됩니다.",
+'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다.
+이대로 \"{{int:savearticle}}\"을 클릭하면 편집 요약 없이 저장됩니다.",
 'missingcommenttext' => '아래에 내용을 채워 넣어 주세요.',
 'missingcommentheader' => "'''알림:''' 글의 제목을 입력하지 않았습니다.
-다시 {{int:savearticle}} 버튼을 클릭하면 글이 제목 없이 저장됩니다.",
+다시 \"{{int:savearticle}}\" 버튼을 클릭하면 글이 제목 없이 저장됩니다.",
 'summary-preview' => '편집 요약 미리 보기:',
 'subject-preview' => '주제/제목 미리 보기:',
 'blockedtitle' => '차단됨',
 'blockedtext' => "'''당신의 계정 혹은 IP 주소가 차단되었습니다.'''
 
-차단한 사람은 $1이고, 차단한 이유는 다음과 같습니다: $2
+차단한 사람은 $1입니다.
+차단한 이유는 다음과 같습니다: $2
 
 * 차단이 시작된 시간: $8
 * 차단이 끝나는 시간: $6
 * 차단된 사용자: $7
 
-$1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다. [[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.
+$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.
+[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.
 지금 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.
 문의할 때에 이 정보를 같이 알려주세요.",
 'autoblockedtext' => "당신의 IP 주소는 $1이 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다. 차단된 이유는 다음과 같습니다:
@@ -942,7 +975,7 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 
 * 차단이 끝나는 시간: $6
 * 차단된 사용자: $7
 
-$1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.
+$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.
 
 [[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.
 
@@ -950,59 +983,75 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 
 문의할 때에 이 정보를 같이 알려주세요.",
 'blockednoreason' => '이유를 입력하지 않음',
 'whitelistedittext' => '문서를 편집하려면 $1해야 합니다.',
-'confirmedittext' => '문서를 고치려면 이메일 인증 절차가 필요합니다. [[Special:Preferences|사용자 환경 설정]]에서 이메일 주소를 입력하고 이메일 주소 인증을 해 주시기 바랍니다.',
-'nosuchsectiontitle' => '칸을 찾을 수 없음',
-'nosuchsectiontext' => '존재하지 않는 칸을 편집하려 했습니다.
-이 문서를 보는 동안 칸이 이동되었거나 삭제되었을 수 있습니다.',
+'confirmedittext' => '문서를 고치려면 이메일 인증 절차가 필요합니다.
+[[Special:Preferences|사용자 환경 설정]]에서 이메일 주소를 입력하고 이메일 주소 인증을 해주시기 바랍니다.',
+'nosuchsectiontitle' => '문단을 찾을 수 없음',
+'nosuchsectiontext' => '존재하지 않는 문단을 편집하려 했습니다.
+이 문서를 보는 동안 문단이 이동되었거나 삭제되었을 수 있습니다.',
 'loginreqtitle' => '로그인 필요',
 'loginreqlink' => '로그인',
 'loginreqpagetext' => '다른 문서를 보기 위해서는 $1해야 합니다.',
 'accmailtitle' => '비밀번호를 보냈습니다.',
 'accmailtext' => '[[User talk:$1|$1]] 사용자의 비밀번호가 임의로 만들어져 $2로 전송되었습니다.
 
\83\88 ë¹\84ë°\80ë²\88í\98¸ë\8a\94 ë¡\9cê·¸ì\9d¸í\95\9c í\9b\84 [[Special:ChangePassword|ë³\80ê²½]]í\95  수 있습니다.',
\83\88 ë¹\84ë°\80ë²\88í\98¸ë\8a\94 ë¡\9cê·¸ì\9d¸í\95\9c í\9b\84 [[Special:ChangePassword|ë¹\84ë°\80ë²\88í\98¸ë¥¼ ë°\94ê¿\80]] 수 있습니다.',
 'newarticle' => '(새 문서)',
-'newarticletext' => "이 문서는 아직 만들어지지 않았습니다. 새 문서를 만들려면 아래의 상자에 문서 내용을 입력하면 됩니다(자세한 내용은 [[{{MediaWiki:Helppage}}|도움말]]을 읽어 주세요).
-만약 잘못 찾아온 문서라면, 웹 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
+'newarticletext' => "이 문서는 아직 만들어지지 않았습니다.
+새 문서를 만들려면 아래의 상자에 문서 내용을 입력하면 됩니다(자세한 내용은 [[{{MediaWiki:Helppage}}|도움말]]을 읽어 주세요).
+만약 잘못 찾아온 문서라면 웹 브라우저의 '''뒤로''' 버튼을 눌러 주세요.",
 'anontalkpagetext' => '----
-여기는 계정을 만들지 않았거나 사용하고 있지 않은 비등록 사용자를 위한 토론 문서입니다. 비등록 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다. IP 주소는 여러 사용자가 공유할 수 있습니다. 자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 비등록 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인 하여]] 나중에 다른 비등록 사용자에게 줄 혼란을 줄일 수 있습니다.',
+여기는 계정을 만들지 않았거나 사용하고 있지 않은 익명 사용자를 위한 토론 문서입니다.
+익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.
+IP 주소는 여러 사용자가 공유할 수 있습니다.
+자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인 하여]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.',
 'noarticletext' => '이 문서가 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색]]하거나, 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나, 문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.',
-'noarticletext-nopermission' => '‘{{FULLPAGENAME}}’ 문서가 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|검색]]하거나, 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span>',
-'userpage-userdoesnotexist' => '‘<nowiki>$1</nowiki>’ 계정은 등록되어 있지 않습니다. 이 문서를 만들거나 편집하려면 계정이 존재 하는지 확인해주세요.',
+이 문서와 제목이 비슷한 문서가 있는지 [[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>',
+'userpage-userdoesnotexist' => '‘$1’ 계정은 등록되어 있지 않습니다.
+이 문서를 만들거나 편집하려면 계정이 존재 하는지 확인해주세요.',
 'userpage-userdoesnotexist-view' => '"$1" 사용자 계정은 등록되지 않았습니다.',
 'blocked-notice-logextract' => '이 사용자는 현재 차단되어 있습니다.
 해당 사용자의 최근 차단 기록을 참고하십시오:',
-'clearyourcache' => "'''참고:''' 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 갱신해야 합니다.
+'clearyourcache' => "'''참고:''' 설정을 저장한 후에 바뀐 점을 확인하기 위해서는 브라우저의 캐시를 새로 고쳐야 합니다.
 * '''파이어폭스 / 사파리''': ''Shift'' 키를 누르면서 새로 고침을 클릭하거나, ''Ctrl-F5'' 또는 ''Ctrl-R'' 을 입력 (Mac에서는 ''⌘-R'')
 * '''구글 크롬''': ''Ctrl-Shift-R''키를 입력 (Mac에서는 ''⌘-Shift-R'')
 * '''인터넷 익스플로러''': ''Ctrl'' 키를 누르면서 새로 고침을 클릭하거나, ''Ctrl-F5''를 입력.
 * '''컨커러''': ''새로고침''을 클릭하거나 ''F5''를 입력
-* '''오페라''': 도구→설정에서 캐시를 비움",
-'usercssyoucanpreview' => "'''안내''': CSS 문서를 저장하기 전에 ‘{{int:showpreview}}’ 기능을 통해 작동을 확인해주세요.",
-'userjsyoucanpreview' => "'''안내''': JS 문서를 저장하기 전에 ‘{{int:showpreview}}’ 기능을 통해 작동을 확인해주세요.",
-'usercsspreview' => "'''이것은 사용자 CSS의 미리 보기이며, 아직 저장하지 않았다는 것을 주의해 주세요!'''",
-'userjspreview' => "'''이것은 자바스크립트 미리 보기로, 아직 저장하지 않았다는 것을 주의해 주세요!'''",
+* '''오페라''': ''도구→설정''에서 캐시를 비움",
+'usercssyoucanpreview' => "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
+'userjsyoucanpreview' => "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
+'usercsspreview' => "'''이것은 사용자 CSS의 미리 보기입니다.'''
+'''아직 저장하지 않았다는 것을 기억해두세요!'''",
+'userjspreview' => "'''이것은 자바스크립트 미리 보기입니다'''
+'''아직 저장하지 않았다는 것을 기억해두세요!'''",
 'sitecsspreview' => "'''이것은 이 CSS의 미리 보기일 뿐입니다.'''
-'''아직 저장하지 않았다는 것을 주의해 주세요!'''",
+'''아직 저장하지 않았다는 것을 기억해두세요!'''",
 'sitejspreview' => "'''이것은 이 자바스크립트 코드의 미리 보기일 뿐입니다.'''
-'''아직 저장하지 않았다는 것을 주의해 주세요!'''",
-'userinvalidcssjstitle' => "'''경고''': ‘$1’ 스킨은 없습니다.
+'''아직 저장하지 않았다는 것을 기억해두세요!'''",
+'userinvalidcssjstitle' => "'''경고''': \"\$1\" 스킨은 없습니다.
 .css와 .js 문서의 제목은 {{ns:user}}:Foo/vector.css 처럼 소문자로 써야 합니다. {{ns:user}}:Foo/Vector.css 와 같이 대문자로 쓸 경우 작동하지 않습니다.",
 'updated' => '(바뀜)',
-'note' => "'''주의:'''",
-'previewnote' => "'''이 화면은 미리 보기입니다'''. 편집한 내용은 아직 저장되지 않았습니다!",
+'note' => "'''참고:'''",
+'previewnote' => "'''이 화면은 미리 보기입니다.'''
+편집한 내용은 아직 저장되지 않았습니다!",
 'continue-editing' => '계속 편집하기',
-'previewconflict' => '이 미리 보기는 저장할 때의 모습, 즉 위쪽 편집창의 문서를 반영합니다.',
-'session_fail_preview' => "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.
-다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인해 보십시오.'''",
+'previewconflict' => '이 미리 보기는 저장할 때의 모습으로 위쪽 편집창의 문서를 반영합니다.',
+'session_fail_preview' => "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.'''
+다시 시도하세요.
+다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요.",
 'session_fail_preview_html' => "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.'''
 
 {{SITENAME}}에서 HTML 입력을 허용하기 때문에, 자바스크립트 공격을 막기 위해 미리 보기는 숨겨져 있습니다.
 
-'''다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인을 해 보십시오.'''",
-'token_suffix_mismatch' => "'''저장하려는 내용의 문장 부호가 망가져 있습니다. 문서 보호를 위해 해당 내용을 저장하지 않습니다. 버그가 있는 익명 프록시 서비스 등을 사용할 때 이런 문제가 발생할 수 있습니다.'''",
+'''적합하게 편집을 시도했다면 다시 시도하세요'''
+다시 시도해도 되지 않으면 [[Special:UserLogout|로그아웃]]한 다음 다시 로그인하세요.",
+'token_suffix_mismatch' => "'''저장하려는 내용의 문장 부호가 망가져 있습니다.'''
+문서 보호를 위해 해당 내용을 저장하지 않습니다.
+버그가 있는 익명 프록시 서비스 등을 사용할 때 이런 문제가 발생할 수 있습니다.",
 'edit_form_incomplete' => "'''편집의 일부 내용이 서버에 전달되지 않았습니다. 당신의 편집이 손상되지 않았는지 확인하고 다시 시도해 주십시오.'''",
 'editing' => '$1 편집하기',
 'creating' => '$1 만들기',
@@ -1015,39 +1064,42 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 
 \"{{int:savearticle}}\"을 누르면 '''위쪽의 편집 내역만''' 저장됩니다.",
 'yourtext' => '당신의 편집',
 'storedversion' => '현재 문서',
-'nonunicodebrowser' => "'''주의: 당신의 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다. 몇몇 문자가 16진수 코드로 나타날 수 있습니다.'''",
-'editingold' => "'''경고:
-지금 옛날 버전의 문서를 고치고 있습니다.
-이것을 저장하면 최근에 편집된 부분이 사라질 수 있습니다.'''",
+'nonunicodebrowser' => "'''주의: 당신의 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''
+아스키가 아닌 문자가 16진수 코드로 나타날 수 있습니다.",
+'editingold' => "'''경고: 지금 이전 버전의 문서를 고치고 있습니다.'''
+이것을 저장하면 최근에 편집된 부분이 사라질 수 있습니다.",
 'yourdiff' => '차이',
-'copyrightwarning' => "{{SITENAME}}에서의 모든 기여는 $2 라이선스로 배포된다는 점을 유의해 주세요 (자세한 내용에 대해서는 $1 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.<br />
+'copyrightwarning' => "{{SITENAME}}에서의 모든 기여는 $2 라이선스로 배포된다는 점을 유의해 주세요 (자세한 내용에 대해서는 $1 문서를 읽어주세요).
+만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.<br />
 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
 '''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
-'copyrightwarning2' => "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요. 만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.<br />
+'copyrightwarning2' => "{{SITENAME}}에서의 모든 기여는 다른 사용자가 편집, 수정, 삭제할 수 있다는 점을 유의해 주세요.
+만약 여기에 동의하지 않는다면, 문서를 저장하지 말아 주세요.<br />
 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다 (자세한 내용에 대해서는 $1 문서를 읽어 주세요).
 '''저작권이 있는 내용을 허가 없이 저장하지 마세요!'''",
 'longpageerror' => "'''오류: 문서의 크기가 {{PLURAL:$1|$1킬로바이트}}로 최대 크기인 {{PLURAL:$2|$2킬로바이트}}보다 큽니다.'''
 저장할 수 없습니다.",
-'readonlywarning' => "'''주의: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.
-편집 내용을 복사 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.'''
+'readonlywarning' => "'''주의: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.'''
+편집 내용을 복사 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.
 
 잠근 관리자가 남긴 설명은 다음과 같습니다: $1",
 'protectedpagewarning' => "'''경고: 이 문서는 관리자만 편집할 수 있도록 보호되어 있습니다.'''
 이 문서의 최근 기록을 참고하십시오:",
-'semiprotectedpagewarning' => "'''ì\95\88ë\82´:''' 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 잠겨 있습니다.
+'semiprotectedpagewarning' => "'''참고:''' 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 잠겨 있습니다.
 이 문서의 최근 기록을 참고하십시오:",
 'cascadeprotectedwarning' => "'''주의''': 이 문서는 잠겨 있어 관리자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
-'titleprotectedwarning' => "'''경고: 이 문서는 잠겨 있어, 문서를 생성하려면 [[Special:ListGroupRights|특정 권한]]이 필요합니다.'''
+'titleprotectedwarning' => "'''경고: 이 문서는 잠겨 있어, 문서를 만드려면 [[Special:ListGroupRights|특정 권한]]이 필요합니다.'''
 아래 문서의 최근 기록을 참고하십시오:",
 'templatesused' => '이 문서에서 사용한 {{PLURAL:$1|틀}}:',
 'templatesusedpreview' => '이 미리 보기에서 사용하고 있는 {{PLURAL:$1|틀}}:',
-'templatesusedsection' => '이 에서 사용하고 있는 {{PLURAL:$1|틀}}:',
+'templatesusedsection' => '이 문단에서 사용하고 있는 {{PLURAL:$1|틀}}:',
 'template-protected' => '(보호됨)',
 'template-semiprotected' => '(준보호됨)',
-'hiddencategories' => '이 문서는 다음 숨은 분류 $1 개에 속해 있습니다:',
+'hiddencategories' => '이 문서는 다음 숨은 분류 $1개에 속해 있습니다:',
 'edittools' => '<!-- 이 문서는 편집 창과 파일 올리기 창에 출력됩니다. -->',
 'nocreatetitle' => '문서 만들기 제한',
-'nocreatetext' => '{{SITENAME}}에서 새로운 문서를 생성하는 것은 제한되어 있습니다. 이미 존재하는 다른 문서를 편집하거나, [[Special:UserLogin|로그인하거나 계정을 만들 수 있습니다]].',
+'nocreatetext' => '{{SITENAME}}에서 새로운 문서를 만드는 것은 제한되어 있습니다.
+이미 존재하는 다른 문서를 편집하거나, [[Special:UserLogin|로그인하거나 계정을 만들 수 있습니다]].',
 'nocreate-loggedin' => '새 문서를 만들 권한이 없습니다.',
 'sectioneditnotsupported-title' => '부분 편집 지원 안됨',
 'sectioneditnotsupported-text' => '이 문서에서는 문단 편집을 지원하지 않습니다.',
@@ -1058,14 +1110,15 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 
 
 이 문서를 계속 편집하는 것이 적합한 것인지 확인해주세요.
 편의를 위해 삭제와 이동 기록을 다음과 같이 제공합니다:",
-'moveddeleted-notice' => '이 문서는 삭제되었습니다. 이 문서의 삭제/이동 기록은 다음과 같습니다.',
+'moveddeleted-notice' => '이 문서는 삭제되었습니다.
+이 문서의 삭제 및 이동 기록은 다음과 같습니다.',
 'log-fulllog' => '전체 기록 보기',
 'edit-hook-aborted' => '훅에 의해 편집이 중단되었습니다.
 아무런 설명도 주어지지 않았습니다.',
 'edit-gone-missing' => '문서를 저장하지 못했습니다.
 문서가 삭제된 것 같습니다.',
 'edit-conflict' => '편집 충돌.',
-'edit-no-change' => '문서에 아무런 변화가 없기 때문에, 당신의 편집은 무시되었습니다.',
+'edit-no-change' => '문서에 아무런 변화가 없기 때문에 당신의 편집은 무시되었습니다.',
 'edit-already-exists' => '새 문서를 만들 수 없습니다.
 그 문서는 이미 존재합니다.',
 'defaultmessagetext' => '기본 메세지 내용',
@@ -1075,8 +1128,8 @@ $1, 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 
 
 $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'expensive-parserfunction-category' => '느린 파서 함수 호출을 너무 많이 하는 문서',
-'post-expand-template-inclusion-warning' => '경고: 틀 포함 크기가 너무 큽니다.
-일부 틀은 포함되지 않을 수 있습니다.',
+'post-expand-template-inclusion-warning' => "'''경고:''' 틀 포함 크기가 너무 큽니다.
+일부 틀은 포함되지 않을 수 있습니다.",
 'post-expand-template-inclusion-category' => '사용한 틀의 크기가 지나치게 큰 문서의 목록',
 'post-expand-template-argument-warning' => "'''경고:''' 이 문서는 전개 후 크기가 너무 큰 틀 변수가 하나 이상 포함되어 있습니다.
 이 변수들은 생략되었습니다.",
@@ -1088,13 +1141,14 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'node-count-exceeded-warning' => '페이지가 노드 수를 초과하였습니다.',
 'expansion-depth-exceeded-category' => '페이지가 확장 깊이를 초과하였습니다.',
 'expansion-depth-exceeded-warning' => '페이지가 확장 깊이를 초과하였습니다',
-'parser-unstrip-loop-warning' => 'ì\8a¤í\8a¸ë¦½í\95\98ì§\80 ì\95\8aë\8a\94 ë°\98ë³µì\9d´ ê°\90ì§\80ë\90¨',
+'parser-unstrip-loop-warning' => 'ì\8a¤í\8a¸ë¦½í\95\98ì§\80 ì\95\8aë\8a\94 ë°\98ë³µì\9d´ ê°\90ì§\80ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤',
 'parser-unstrip-recursion-limit' => '스트립하지 않는 재귀 한도가 초과됨 ($1)',
 
 # "Undo" feature
-'undo-success' => '이 편집을 되돌리려면 아래의 변경되는 사항을 확인한 후 저장해주세요.',
+'undo-success' => '편집을 되돌릴 수 있습니다.
+편집 되돌리기를 완료하려면 이 편집을 되돌리려면 아래의 변경되는 사항을 확인한 후 저장해주세요.',
 'undo-failure' => '중간의 다른 편집과 충돌하여 이 편집을 되돌릴 수 없습니다.',
-'undo-norev' => '문서가 없거나 삭제되었기 때문에, 편집을 되돌릴 수 없습니다.',
+'undo-norev' => '문서가 없거나 삭제되었기 때문에 편집을 되돌릴 수 없습니다.',
 'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|토론]]) 의 $1판 편집을 되돌림',
 
 # Account creation failure
@@ -1109,7 +1163,7 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'currentrev' => '최신판',
 'currentrev-asof' => '$1 기준 최신판',
 'revisionasof' => '$1 판',
-'revision-info' => '$2 사용자의 $1 버전',
+'revision-info' => '$2 사용자의 $1 ',
 'previousrevision' => '← 이전 판',
 'nextrevision' => '다음 판 →',
 'currentrevisionlink' => '최신판',
@@ -1119,9 +1173,8 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'page_first' => '처음',
 'page_last' => '마지막',
 'histlegend' => "비교하려는 판을 선택한 다음 엔터나 아래의 버튼을 누르세요.<br />
-설명: '''({{int:cur}})''' = 최신 판과 비교,
-'''({{int:last}})''' = 이전 판과 비교, '''{{int:minoreditletter}}'''= 사소한 편집",
-'history-fieldset-title' => '문서의 변경 내력 찾기',
+설명: '''({{int:cur}})''' = 최신 판과 비교, '''({{int:last}})''' = 이전 판과 비교, '''{{int:minoreditletter}}'''= 사소한 편집",
+'history-fieldset-title' => '문서의 바뀜 내역 찾기',
 'history-show-deleted' => '삭제된 것만',
 'histfirst' => '초기',
 'histlast' => '최신',
@@ -1139,8 +1192,8 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 # Revision deletion
 'rev-deleted-comment' => '(편집 요약 삭제됨)',
 'rev-deleted-user' => '(계정 이름 삭제됨)',
-'rev-deleted-event' => '(로그 삭제됨)',
-'rev-deleted-user-contribs' => '[계정 이름/IP 주소 삭제됨 -  기여 목록에서 숨겨짐]',
+'rev-deleted-event' => '(기록 동작 삭제됨)',
+'rev-deleted-user-contribs' => '[계정 이름 또는 IP 주소 삭제됨 -  기여 목록에서 숨겨짐]',
 'rev-deleted-text-permission' => "해당 편집이 문서 역사에서 '''삭제'''되었습니다.
 자세한 사항은 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 볼 수 있습니다.",
 'rev-deleted-text-unhide' => "해당 편집이 문서 역사에서 '''삭제'''되었습니다.
@@ -1150,24 +1203,24 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 자세한 사항은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 볼 수 있습니다.
 이 편집을 보기를 원하신다면 [$1 해당 편집]을 볼 수 있습니다.",
 'rev-deleted-text-view' => "이 문서의 편집은 역사에서 '''삭제'''되었습니다.
-삭제된 편집을 볼 수 있으며, [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
+삭제된 편집을 볼 수 있으며 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
 'rev-suppressed-text-view' => "이 문서의 편집은 역사에서 '''숨겨져''' 있습니다.
-숨겨진 편집을 볼 수 있으며, [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 자세한 내용을 볼 수 있습니다.",
+숨겨진 편집을 볼 수 있으며 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에서 자세한 내용을 볼 수 있습니다.",
 'rev-deleted-no-diff' => "특정 판이 문서 역사에서 '''삭제'''되었기 때문에 비교할 수 없습니다.
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에서 자세한 내용을 볼 수 있습니다.",
 'rev-suppressed-no-diff' => "두 판 중 일부가 '''삭제'''되었기 때문에 문서 편집 내용을 비교할 수 없습니다.",
 'rev-deleted-unhide-diff' => "이 비교에 사용된 판 가운데 하나가 '''삭제'''되었습니다.
 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 삭제 기록]에 자세한 내용을 찾아볼 수 있습니다.
 계속 작업하고 싶다면 여전히 [$1 비교 보기]를 계속할 수 있습니다.",
-'rev-suppressed-unhide-diff' => "ì\9d´ ë¹\84êµ\90ì\97\90 ì\82¬ì\9a©ë\90\9c í\8c\90 ê°\80ì\9a´ë\8d° í\95\98ë\82\98ê°\80 '''ì\88¨ê¹\80'''ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.
+'rev-suppressed-unhide-diff' => "ì\9d´ ë¹\84êµ\90ì\97\90 ì\82¬ì\9a©ë\90\9c í\8c\90 ê°\80ì\9a´ë\8d° í\95\98ë\82\98ê°\80 '''ì\88¨ê²¨ì ¸''' ì\9e\88ì\8aµë\8b\88ë\8b¤.
 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 숨김 기록]에 자세한 내용이 있을 수 있습니다.
 계속 작업하고 싶다면 [$1 해당 편집]을 볼 수도 있습니다.",
 'rev-deleted-diff-view' => "비교 대상 중 어느 한 판이 '''삭제'''되었습니다.
-삭제된 판과 다른 판의 비교를 할 수 있습니다; ì\9e\90ì\84¸í\95\9c ê²\83ì\9d\80 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ì\82­ì \9c ê¸°ë¡\9d\9d\84 ì°¸ê³ í\95\98ì\8b­ì\8b\9cì\98¤.",
+삭제된 판과 다른 판의 비교를 할 수 있습니다. ì\9e\90ì\84¸í\95\9c ë\82´ì\9a©ì\9d\80 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ì\82­ì \9c ê¸°ë¡\9d\97\90ì\84\9c ì°¾ì\95\84ë³¼ ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.",
 'rev-suppressed-diff-view' => "비교하려는 판 중 일부가 '''숨겨져''' 있습니다.
-숨겨진 판과 이 판의 편집 비교가 가능합니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 해당 숨김 기록]에서 볼 수 있습니다.",
+숨겨진 판과 이 판의 편집 비교를 할 수 있습니다. 자세한 내용은 [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} 해당 숨김 기록]에서 찾아볼 수 있습니다.",
 'rev-delundel' => '보이기/숨기기',
-'rev-showdeleted' => '표시',
+'rev-showdeleted' => '보이기',
 'revisiondelete' => '판 삭제/복구',
 'revdelete-nooldid-title' => '대상 판이 잘못되었습니다.',
 'revdelete-nooldid-text' => '이 기능을 수행할 특정 판을 제시하지 않았거나 해당 판이 없습니다. 또는 현재 판을 숨기려 하고 있을 수도 있습니다.',
@@ -1178,18 +1231,19 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'revdelete-no-file' => '해당 파일이 존재하지 않습니다.',
 'revdelete-show-file-confirm' => '정말 "<nowiki>$1</nowiki>" 파일의 삭제된 $2 $3 버전을 보시겠습니까?',
 'revdelete-show-file-submit' => '예',
-'revdelete-selected' => "'''[[:$1]]의 {{PLURAL:$2|선택ë\90\9c í\8c\90}}:'''",
-'logdelete-selected' => "{{PLURAL:$1}}'''선택한 로그:'''",
+'revdelete-selected' => "'''[[:$1]]의 {{PLURAL:$2|선택í\95\9c í\8c\90}}:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|선택한 기록}}:'''",
 'revdelete-text' => "'''삭제된 판과 기록은 문서 역사와 기록에 계속 나타나지만, 내용은 공개되지 않을 것입니다.'''
 {{SITENAME}}의 다른 관리자는 다른 제한이 설정되어 있지 않는 한, 숨겨진 내용을 볼 수 있고, 같은 도구를 이용해 복구할 수 있습니다.",
 'revdelete-confirm' => '이 작업을 수행하는 것의 결과를 알고 있으며, [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지 확인해주세요.',
 'revdelete-suppress-text' => "숨기기는 '''다음 경우에만''' 사용되어야 합니다:
+* 잠재적인 비방 정보
 * 부적절한 개인 정보
 *: 집 주소, 전화번호, 주민등록번호 등",
 'revdelete-legend' => '보이기 제한을 설정',
 'revdelete-hide-text' => '판의 내용을 숨기기',
 'revdelete-hide-image' => '파일을 숨기기',
-'revdelete-hide-name' => '로그 내용과 대상을 숨기기',
+'revdelete-hide-name' => '기록 내용과 대상을 숨기기',
 'revdelete-hide-comment' => '편집 요약을 숨기기',
 'revdelete-hide-user' => '편집자의 계정 이름/IP를 숨기기',
 'revdelete-hide-restricted' => '관리자도 보지 못하게 숨기기',
@@ -1200,13 +1254,13 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 'revdelete-unsuppress' => '복구된 판에 대한 제한을 해제',
 'revdelete-log' => '이유:',
 'revdelete-submit' => '선택한 {{PLURAL:$1|판}}에 적용',
-'revdelete-success' => "'''í\8c\90ì\9d\98 ë³´ì\9d´ê¸° ì\84¤ì \95ì\9d´ ì\84±ê³µì \81ì\9c¼ë¡\9c ë³\80ê²½ë\90\98었습니다.'''",
+'revdelete-success' => "'''í\8c\90ì\9d\98 ë³´ì\9d´ê¸° ì\84¤ì \95ì\9d\84 ì\84±ê³µì \81ì\9c¼ë¡\9c ë°\94꾸었습니다.'''",
 'revdelete-failure' => "'''특정 판 보기 설정을 바꾸지 못했습니다:'''
 $1",
-'logdelete-success' => "'''로그의 보이기 설정이 성공적으로 변경되었습니다.'''",
-'logdelete-failure' => "'''로그 보이기 설정을 바꾸지 못했습니다:'''
+'logdelete-success' => "'''기록 보이기 설정을 성공적으로 바꾸었습니다.'''",
+'logdelete-failure' => "'''기록 보이기 설정을 바꾸지 못했습니다:'''
 $1",
-'revdel-restore' => 'ë³´ì\9d´ê¸° ì\84¤ì \95 ë³\80ê²½',
+'revdel-restore' => 'ë³´ì\9d´ê¸° ì\84¤ì \95 ë°\94꾸기',
 'revdel-restore-deleted' => '삭제된 판',
 'revdel-restore-visible' => '공개된 판',
 'pagehist' => '문서 역사',
@@ -1219,12 +1273,13 @@ $1",
 여기에 접근할 수 없습니다.',
 'revdelete-modify-missing' => '판 ID $1을 수정하는 중 오류 발생: 데이터베이스에 존재하지 않습니다!',
 'revdelete-no-change' => "'''경고:''' $1 $2에 해당하는 항목은 이미 같은 보이기 설정이 설정되어 있습니다.",
-'revdelete-concurrent-change' => '$1 $2에 수정된 항목을 ê°±ì\8b í\95\98ë©´ì\84\9c ì\98¤ë¥\98 ë°\9cì\83\9d: ì\9d´ë\9f° í\98\84ì\83\81ì\9d\80 ë\8b¹ì\8b ì\9d´ ë¬¸ì\84\9c를 í\8e¸ì§\91í\95\98ê³  ì\9e\88ì\9d\84 ë\95\8c ë\8b¤ë¥¸ ì\82¬ë\9e\8cì\9d´ ë¬¸ì\84\9c를 í\8e¸ì§\91í\96\88기 ë\95\8c문ì\97\90 ë°\9cì\83\9dí\95©ë\8b\88ë\8b¤.
-관련 로그를 확인해 보세요.',
+'revdelete-concurrent-change' => '$1 $2에 수정된 항목을 ì\83\88ë¡\9c ê³ ì¹\98ë©´ì\84\9c ì\98¤ë¥\98 ë°\9cì\83\9d: ì\9d´ë\9f° í\98\84ì\83\81ì\9d\80 ë\8b¹ì\8b ì\9d´ ë¬¸ì\84\9c를 í\8e¸ì§\91í\95\98ê³  ì\9e\88ì\9d\84 ë\95\8c ë\8b¤ë¥¸ ì\82¬ë\9e\8cì\9d´ ë¬¸ì\84\9c를 í\8e¸ì§\91í\96\88기 ë\95\8c문ì\97\90 ë°\9cì\83\9dí\95©ë\8b\88ë\8b¤.
+관련 기록을 확인해 보세요.',
 'revdelete-only-restricted' => '$1 $2 버전 숨기기 오류: 다른 숨기기 설정을 같이 설정하지 않고 관리자가 보지 못하도록 특정 판을 숨길 수 없습니다.',
 'revdelete-reason-dropdown' => '*일반적인 삭제 이유
 ** 저작권 침해
-** 부적절한 개인 정보',
+** 부적절한 개인 정보
+** 잠재적인 비방 정보',
 'revdelete-otherreason' => '다른 이유/부가적인 이유',
 'revdelete-reasonotherlist' => '다른 이유',
 'revdelete-edit-reasonlist' => '삭제 이유 편집',
@@ -1232,8 +1287,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => '숨기기 기록',
-'suppressionlogtext' => '다음은 관리자로부터 숨겨진 내용에 관한 삭제, 차단 기록입니다.
-현재 차단된 사용자 목록을 보시려면 [[Special:BlockList|차단된 사용자 목록]]을 참조하십시오.',
+'suppressionlogtext' => '다음은 관리자로부터 숨겨진 내용에 관한 삭제 차단 기록입니다.
+현재 차단된 사용자 목록을 보려면 [[Special:BlockList|차단된 사용자 목록]]을 참고하세요.',
 
 # History merging
 'mergehistory' => '문서 역사 합치기',
@@ -1261,16 +1316,16 @@ $1",
 'mergehistory-reason' => '이유:',
 
 # Merge log
-'mergelog' => '합병 기록',
+'mergelog' => '병합 기록',
 'pagemerge-logentry' => '[[$1]]을 [[$2]]에 병합 ($3판이 위로 옮겨짐)',
 'revertmerge' => '병합 해제',
 'mergelogpagetext' => '다음은 한 문서의 역사를 다른 문서의 역사와 합친 최근 기록입니다.',
 
 # Diffs
-'history-title' => '"$1"  ë¬¸ì\84\9cì\9d\98 ë³\80ê²½ ë\82´ë ¥',
+'history-title' => '"$1"  ë¬¸ì\84\9cì\9d\98 ë°\94ë\80\9c ë\82´ì\97­',
 'difference-title' => '"$1"의 두 판 사이의 차이',
-'difference-title-multipage' => '문서 "$1"과 "$2" 간의 차이',
-'difference-multipage' => '(문서의 차이)',
+'difference-title-multipage' => '문서 "$1"(와)과 "$2" 사이의 차이',
+'difference-multipage' => '(문서 사이의 차이)',
 'lineno' => '$1번째 줄:',
 'compareselectedversions' => '선택한 판을 비교하기',
 'showhideselectedversions' => '선택한 판을 보이기/숨기기',
@@ -1279,11 +1334,11 @@ $1",
 'diff-multi-manyusers' => '({{PLURAL:$2|한 사용자의|사용자 $2명 이상의}} 중간의 편집 $1개 숨겨짐)',
 
 # Search results
-'searchresults' => '검색 결과',
-'searchresults-title' => '"$1"에 대한 검색 결과',
+'searchresults' => '찾기 결과',
+'searchresults-title' => '"$1"에 대한 찾기 결과',
 'searchresulttext' => '{{SITENAME}}의 찾기 기능에 대한 자세한 정보는 [[{{MediaWiki:Helppage}}|{{int:help}}]] 문서를 참고해주세요.',
-'searchsubtitle' => "'''[[:$1]]''' 문서를 검색하고 있습니다. ([[Special:Prefixindex/$1|이름이 ‘$1’ 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|‘$1’ 문서를 가리키는 문서 목록]])",
-'searchsubtitleinvalid' => "검색 단어 '''$1'''",
+'searchsubtitle' => "'''[[:$1]]''' 문서를 고 있습니다. ([[Special:Prefixindex/$1|이름이 ‘$1’ 접두어로 시작하는 문서 목록]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|‘$1’ 문서를 가리키는 문서 목록]])",
+'searchsubtitleinvalid' => "찾은 단어 '''$1'''",
 'toomanymatches' => '일치하는 결과가 너무 많습니다. 다른 검색어를 입력해주세요.',
 'titlematches' => '문서 제목 일치',
 'notitlematches' => '해당하는 제목 없음',
@@ -1293,29 +1348,29 @@ $1",
 'nextn' => '뒤로 $1개',
 'prevn-title' => '이전 결과 $1개',
 'nextn-title' => '다음 결과 $1개',
-'shown-title' => '쪽마다 결과 $1 개씩 보이기',
+'shown-title' => '쪽마다 결과 $1개씩 보이기',
 'viewprevnext' => '보기: ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-legend' => '검색 설정',
+'searchmenu-legend' => '찾기 설정',
 'searchmenu-exists' => "'''이 위키에 \"[[:\$1]]\"의 이름을 가진 문서가 있습니다.'''",
-'searchmenu-new' => "'''ì\9d´ ì\9c\84í\82¤ì\97\90 \"[[:\$1]]\" ë¬¸ì\84\9c를 ë§\8cë\93\9cì\8b­ì\8b\9cì\98¤!'''",
+'searchmenu-new' => "'''ì\9d´ ì\9c\84í\82¤ì\97\90 \"[[:\$1]]\" ë¬¸ì\84\9c를 ë§\8cë\93\9cì\84¸ì\9a\94!'''",
 'searchhelp-url' => 'Help:목차',
 'searchmenu-prefix' => '[[Special:PrefixIndex/$1|이 접두어로 시작하는 문서 찾기]]',
 'searchprofile-articles' => '일반 문서',
 'searchprofile-project' => '도움말 및 프로젝트 문서',
 'searchprofile-images' => '멀티미디어',
-'searchprofile-everything' => '모든 문서 검색',
-'searchprofile-advanced' => '고급 검색',
+'searchprofile-everything' => '모든 문서 찾기',
+'searchprofile-advanced' => '고급 찾기',
 'searchprofile-articles-tooltip' => '$1에서 찾기',
 'searchprofile-project-tooltip' => '$1에서 찾기',
 'searchprofile-images-tooltip' => '파일 찾기',
 'searchprofile-everything-tooltip' => '토론 문서를 포함한 모든 문서 찾기',
-'searchprofile-advanced-tooltip' => '다음 설정ë\90\9c ì\9d´ë¦\84ê³µê°\84ì\97\90ì\84\9c ì°¾ê¸°',
+'searchprofile-advanced-tooltip' => '다음 설정í\95\9c ì\9d´ë¦\84ê³µê°\84ì\97\90ì\84\9c ì°¾ê¸°',
 'search-result-size' => '$1 ($2 단어)',
 'search-result-category-size' => '문서 {{PLURAL:$1|1|$1}}개, 하위 분류 {{PLURAL:$2|1|$2}}개, 파일 {{PLURAL:$3|1|$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-more' => '(더 보기)',
@@ -1328,19 +1383,21 @@ $1",
 'searchall' => '모두',
 'showingresults' => '<strong>$2</strong>번 부터의 <strong>결과 $1개</strong>입니다.',
 'showingresultsnum' => "'''$2'''번 부터의 '''결과 $3개''' 입니다.",
-'showingresultsheader' => "'''$4''' 검색어에 대하여 '''$3'''개의 결과 중 {{PLURAL:$5|'''$1'''개|'''$1 - $2'''번째}}를 보여 주고 있습니다.",
-'nonefound' => "'''참고''': 몇개의 이름공간만 기본 검색 범위입니다. 토론이나 틀 등의 모든 자료를 검색하기 위해서는 접두어로 '''all:''' 어떤 이름공간을 위해서는 접두어로 그 이름공간을 쓸 수 있습니다.",
-'search-nonefound' => '검색 결과가 없습니다.',
-'powersearch' => '찾기',
-'powersearch-legend' => '고급 검색',
+'showingresultsheader' => "'''$4''' 검색어에 대하여 결과 '''$3'''개 중 {{PLURAL:$5|'''$1'''개|'''$1 - $2'''번째}}를 보여 주고 있습니다.",
+'nonefound' => "'''참고''': 몇개의 이름공간만 기본 찾을 범위입니다. 토론이나 틀 등의 모든 자료를 찾하기 위해서는 접두어로 '''all:''' 어떤 이름공간을 위해서는 접두어로 그 이름공간을 쓸 수 있습니다.",
+'search-nonefound' => '찾기 결과가 없습니다.',
+'powersearch' => '고급 찾기',
+'powersearch-legend' => '고급 찾기',
 'powersearch-ns' => '다음의 이름공간에서 찾기:',
 'powersearch-redir' => '넘겨주기 목록',
-'powersearch-field' => '검색',
+'powersearch-field' => '찾기',
 'powersearch-togglelabel' => '확인:',
 'powersearch-toggleall' => '모두 선택',
 'powersearch-togglenone' => '모두 선택하지 않음',
-'search-external' => '외부 검색',
-'searchdisabled' => '{{SITENAME}} 검색 기능이 비활성화되어 있습니다. 기능이 작동하지 않는 동안에는 구글(Google)을 이용해 검색할 수 있습니다. 검색 엔진의 내용은 최근 것이 아닐 수 있다는 점을 주의해주세요.',
+'search-external' => '외부 찾기',
+'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
+기능이 작동하지 않는 동안에는 구글(Google)을 이용해 찾을 수 있습니다.
+검색 엔진의 내용은 최신이 아닐 수 있다는 점을 주의해주세요.',
 
 # Quickbar
 'qbsettings' => '빨리가기 맞춤',
@@ -1372,7 +1429,7 @@ $1",
 'prefs-watchlist-days-max' => '최대 $1{{PLURAL:$1|일}}',
 'prefs-watchlist-edits' => '주시문서 목록에서 볼 편집 수:',
 'prefs-watchlist-edits-max' => '최대 개수: 1000',
-'prefs-watchlist-token' => '주시문서 토큰:',
+'prefs-watchlist-token' => '주시문서 목록 토큰:',
 'prefs-misc' => '기타',
 'prefs-resetpass' => '비밀번호 바꾸기',
 'prefs-changeemail' => '이메일 주소 바꾸기',
@@ -1382,7 +1439,7 @@ $1",
 'saveprefs' => '저장',
 'resetprefs' => '저장하지 않은 설정 되돌리기',
 'restoreprefs' => '모두 기본 설정으로 되돌리기',
-'prefs-editing' => '편집상자',
+'prefs-editing' => '편집 상자',
 'prefs-edit-boxsize' => '편집 창의 크기',
 'rows' => '줄 수:',
 'columns' => '열 수:',
@@ -1391,10 +1448,10 @@ $1",
 'stub-threshold' => '링크를 <a href="#" class="stub">토막글</a> 형식으로 표시할 문서 크기 (바이트 수):',
 'stub-threshold-disabled' => '비활성화됨',
 'recentchangesdays' => '최근 바뀜에 표시할 날짜 수:',
-'recentchangesdays-max' => '(최대 $1일)',
+'recentchangesdays-max' => '최대 $1일',
 'recentchangescount' => '기본으로 표시할 편집 수:',
 'prefs-help-recentchangescount' => '이 설정은 최근 바뀜, 문서 역사와 기록에 적용됩니다.',
-'prefs-help-watchlist-token' => '아래에 비밀 값을 넣으면 주시문서에 대한 RSS 피드가 생성됩니다.
+'prefs-help-watchlist-token' => '아래에 비밀 값을 넣으면 주시문서 목록에 대한 RSS 피드가 생성됩니다.
 비밀 값을 알고 있는 사람이라면 누구나 피드를 읽을 수 있으므로 안전한 값을 입력해주세요.
 임의로 만들어진 다음 값을 사용할 수도 있습니다: $1',
 'savedprefs' => '설정을 저장했습니다.',
@@ -1416,15 +1473,15 @@ $1",
 'timezoneregion-indian' => '인도양',
 'timezoneregion-pacific' => '태평양',
 'allowemail' => '다른 사용자가 보낸 이메일을 받음',
-'prefs-searchoptions' => '검색 설정',
+'prefs-searchoptions' => '찾기 설정',
 'prefs-namespaces' => '이름공간',
-'defaultns' => '다음 이름공간에서 검색하기:',
+'defaultns' => '다음 이름공간에서 기:',
 'default' => '기본값',
 'prefs-files' => '파일',
 'prefs-custom-css' => '사용자 CSS',
 'prefs-custom-js' => '사용자 자바스크립트',
 'prefs-common-css-js' => '모든 스킨에 적용되는 공통 CSS/자바스크립트:',
-'prefs-reset-intro' => '이 사이트의 기본 값으로 환경 설정을 되돌릴 수 있습니다.
+'prefs-reset-intro' => '이 사이트의 기본값으로 환경 설정을 되돌릴 수 있습니다.
 복구할 수 없습니다.',
 'prefs-emailconfirm-label' => '이메일 인증:',
 'prefs-textboxsize' => '편집창의 크기',
@@ -1439,17 +1496,20 @@ $1",
 'prefs-help-variant' => '위키 내용을 표시할 때 사용할 언어 변종이나 철자 체계를 선택해주세요.',
 'yournick' => '새 서명:',
 'prefs-help-signature' => '토론 문서에 글을 쓴 후에는 마지막에 서명을 해야 합니다.  “<nowiki>~~~~</nowiki>” 기호를 추가하면 서명과 글 작성 시각이 자동으로 입력됩니다.',
-'badsig' => '서명이 잘못되었습니다. HTML 태그를 확인해주세요.',
+'badsig' => '서명이 잘못되었습니다.
+HTML 태그를 확인하세요.',
 'badsiglength' => '서명이 너무 깁니다.
 서명은 $1자보다 짧아야 합니다.',
 'yourgender' => '성별:',
 'gender-unknown' => '무응답',
 'gender-male' => '남성',
 'gender-female' => '여성',
-'prefs-help-gender' => '선택 사항: 소프트웨어에서 성별에 따른 언어 문제를 해결하기 위해 사용됩니다. 이 정보는 공개됩니다.',
+'prefs-help-gender' => '선택 사항: 소프트웨어에서 성별에 따른 언어 문제를 해결하기 위해 사용됩니다.
+이 정보는 공개됩니다.',
 'email' => '이메일',
-'prefs-help-realname' => '실명 기입은 자유입니다. 실명을 입력할 경우 문서 기여에 자신의 이름이 들어가게 됩니다.',
-'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 변경을 위해 필요합니다.',
+'prefs-help-realname' => '실명 기입은 자유입니다.
+실명을 입력할 경우 문서 기여에 자신의 이름이 들어가게 됩니다.',
+'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 바꾸기를 위해 필요합니다.',
 'prefs-help-email-others' => '당신은 자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
 이 경우에도 당신의 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
 'prefs-help-email-required' => '이메일 주소가 필요합니다.',
@@ -1464,20 +1524,20 @@ $1",
 'prefs-advancedsearchoptions' => '고급 설정',
 'prefs-advancedwatchlist' => '고급 설정',
 'prefs-displayrc' => '보이기 설정',
-'prefs-displaysearchoptions' => '표시 설정',
+'prefs-displaysearchoptions' => '보이기 설정',
 'prefs-displaywatchlist' => '표시 설정',
 'prefs-diffs' => '차이',
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => '이메일 주소가 유효한 것으로 보입니다.',
-'email-address-validity-invalid' => 'ì\9c í\9a¨í\95\9c ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ì\9e\85ë ¥í\95´ì£¼ì\8b­ì\8b\9cì\98¤.',
+'email-address-validity-invalid' => 'ì\9c í\9a¨í\95\9c ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ì\9e\85ë ¥í\95´ì£¼ì\84¸ì\9a\94.',
 
 # User rights
 'userrights' => '사용자 권한 관리',
 'userrights-lookup-user' => '사용자 권한 관리',
 'userrights-user-editname' => '계정 이름:',
 'editusergroup' => '사용자 그룹 편집',
-'editinguser' => "ì\82¬ì\9a©ì\9e\90 '''[[User:$1|$1]]''' $2ì\9d\98 ê¶\8cí\95\9c ë³\80ê²½",
+'editinguser' => "ì\82¬ì\9a©ì\9e\90 '''[[User:$1|$1]]''' $2ì\9d\98 ê¶\8cí\95\9c ë°\94ê¿\88",
 'userrights-editusergroup' => '사용자 그룹 편집',
 'saveusergroups' => '사용자 권한 저장',
 'userrights-groupsmember' => '현재 권한:',
@@ -1528,14 +1588,14 @@ $1",
 'right-move' => '문서 이동',
 'right-move-subpages' => '문서와 하위 문서 이동하기',
 'right-move-rootuserpages' => '최상위 사용자 문서 이동',
-'right-movefile' => '파일 옮기기',
-'right-suppressredirect' => '문ì\84\9c ì\9d´ë\8f\99í\95  ë\95\8c ì\98\9bë\82  이름으로 된 넘겨주기를 남기지 않기',
+'right-movefile' => '파일 옮기기',
+'right-suppressredirect' => '문ì\84\9c ì\9d´ë\8f\99í\95  ë\95\8c ì\9d´ì \84 이름으로 된 넘겨주기를 남기지 않기',
 'right-upload' => '파일 올리기',
-'right-reupload' => 'ì\9d´ë¯¸ ì¡´ì\9e¬í\95\98ë\8a\94 í\8c\8cì\9d¼ì\9d\84 ë\8b¤ì\8b\9c ì\97\85ë¡\9cë\93\9c',
+'right-reupload' => 'ì\9d´ë¯¸ ì¡´ì\9e¬í\95\98ë\8a\94 í\8c\8cì\9d¼ì\9d\84 ë\8b¤ì\8b\9c ì\98¬ë¦¬ê¸°',
 'right-reupload-own' => '자신이 이미 올린 파일 덮어쓰기',
 'right-reupload-shared' => '공용의 파일을 무시하고 로컬에서 파일 올리기',
 'right-upload_by_url' => 'URL 주소에서 파일 올리기',
-'right-purge' => '확인 없이 문서의 캐시를 갱신',
+'right-purge' => '확인 없이 문서의 캐시를 새로 고침',
 'right-autoconfirmed' => '준보호된 문서 편집',
 'right-bot' => '봇의 편집으로 취급',
 'right-nominornewtalk' => '토론 문서를 새로 만들때 사소한 편집 사용 불가능',
@@ -1546,7 +1606,7 @@ $1",
 'right-deleterevision' => '문서의 특정 판을 삭제 및 복구',
 'right-deletedhistory' => '삭제된 문서의 내용을 제외한 역사를 보기',
 'right-deletedtext' => '삭제된 문서의 내용과 편집상의 차이를 보기',
-'right-browsearchive' => '삭제된 문서 검색',
+'right-browsearchive' => '삭제된 문서 찾기',
 'right-undelete' => '삭제된 문서 복구',
 'right-suppressrevision' => '관리자도 보지 못하도록 숨겨진 판의 확인 및 복구',
 'right-suppressionlog' => '숨겨진 기록을 보기',
@@ -1556,21 +1616,21 @@ $1",
 'right-ipblock-exempt' => 'IP 차단, 자동 차단, 광역 차단을 무시',
 'right-proxyunbannable' => '프록시 자동 차단을 적용하지 않음',
 'right-unblockself' => '자기 자신을 차단 해제하기',
-'right-protect' => 'ë³´í\98¸ ì\88\98ì¤\80 ë³\80ê²½ 및 보호된 문서 편집',
+'right-protect' => 'ë³´í\98¸ ì\88\98ì¤\80 ë°\94꾸기 및 보호된 문서 편집',
 'right-editprotected' => '보호된 문서 편집 (연쇄적 보호 제외)',
 'right-editinterface' => '사용자 인터페이스를 편집',
-'right-editusercssjs' => '다른 사용자의 CSS와 JS 문서를 편집',
+'right-editusercssjs' => '다른 사용자의 CSS와 자바스크립트 문서를 편집',
 'right-editusercss' => '다른 사용자의 CSS 문서를 편집',
-'right-edituserjs' => '다른 사용자의 JS 문서를 편집',
+'right-edituserjs' => '다른 사용자의 자바스크립트 문서를 편집',
 'right-rollback' => '특정 문서를 편집한 마지막 사용자의 편집을 신속하게 되돌리기',
 'right-markbotedits' => '되돌리기를 봇의 편집으로 취급 가능',
 'right-noratelimit' => '편집이나 다른 행동 속도의 제한을 받지 않음',
 'right-import' => '다른 위키에서 문서 가져오기',
-'right-importupload' => 'í\8c\8cì\9d¼ ì\97\85ë¡\9cë\93\9c를 통해 문서 가져오기',
+'right-importupload' => 'í\8c\8cì\9d¼ ì\98¬ë¦¬ê¸°를 통해 문서 가져오기',
 'right-patrol' => '다른 사용자의 편집을 검토',
 'right-autopatrol' => '자신의 편집을 자동으로 검토',
 'right-patrolmarks' => '최근 바뀜에서 검토 표시를 보기',
-'right-unwatchedpages' => '주시되지 않 문서 목록 보기',
+'right-unwatchedpages' => '주시되지 않 문서 목록 보기',
 'right-mergehistory' => '문서의 역사를 합침',
 'right-userrights' => '모든 사용자의 권한 조정',
 'right-userrights-interwiki' => '다른 위키의 사용자 권한을 조정',
@@ -1582,14 +1642,14 @@ $1",
 # User rights log
 'rightslog' => '사용자 권한 기록',
 'rightslogtext' => '사용자 권한 조정 기록입니다.',
-'rightslogentry' => '$1ì\9d\98 ê¶\8cí\95\9cì\9d\84 $2ì\97\90ì\84\9c $3(ì\9c¼)ë¡\9c ë³\80ê²½',
-'rightslogentry-autopromote' => 'ì\82¬ì\9a©ì\9e\90ì\9d\98 ê¶\8cí\95\9cì\9d´ ì\9e\90ë\8f\99ì \81ì\9c¼ë¡\9c $2ì\97\90ì\84\9c $3ì\9c¼ë¡\9c ë³\80ê²½ë\90\98었습니다.',
+'rightslogentry' => '$1ì\9d\98 ê¶\8cí\95\9cì\9d\84 $2ì\97\90ì\84\9c $3(ì\9c¼)ë¡\9c ë°\94ê¿\88',
+'rightslogentry-autopromote' => 'ì\82¬ì\9a©ì\9e\90ì\9d\98 ê¶\8cí\95\9cì\9d´ ì\9e\90ë\8f\99ì \81ì\9c¼ë¡\9c $2ì\97\90ì\84\9c $3ì\9c¼ë¡\9c ë°\94ë\80\8c었습니다.',
 'rightsnone' => '(없음)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => '이 문서를 읽기',
 'action-edit' => '문서 편집',
-'action-createpage' => '문서 생성',
+'action-createpage' => '문서 만들기',
 'action-createtalk' => '토론 문서 만들기',
 'action-createaccount' => '새 계정 만들기',
 'action-minoredit' => '이 편집을 사소한 편집으로 표시하기',
@@ -1616,7 +1676,7 @@ $1",
 'action-importupload' => '파일 올리기를 통해 문서를 가져올',
 'action-patrol' => '다른 사용자의 편집을 검토된 것으로 표시하기',
 'action-autopatrol' => '자신의 편집을 검토된 것으로 표시할',
-'action-unwatchedpages' => '주시되지 않 문서 목록 보기',
+'action-unwatchedpages' => '주시되지 않 문서 목록 보기',
 'action-mergehistory' => '이 문서의 역사 합치기',
 'action-userrights' => '모든 사용자의 권한을 조정',
 'action-userrights-interwiki' => '다른 위키의 사용자 권한을 조정',
@@ -1632,9 +1692,9 @@ $1",
 'recentchanges-label-newpage' => '새로운 문서',
 'recentchanges-label-minor' => '사소한 편집',
 'recentchanges-label-bot' => '봇의 편집',
-'recentchanges-label-unpatrolled' => '아직 검토ë\90\98ì§\80 ì\95\8aì\9d\80 í\8e¸ì§\91',
-'rcnote' => "다음은 $4 $5 까지의 '''$2'''일동안 바뀐 '''$1'''ê°\9cì\9d\98 ë¬¸ì\84\9cì\9e\85ë\8b\88ë\8b¤.",
-'rcnotefrom' => "다음은 '''$2'''에서부터 바뀐 '''$1'''ê°\9cì\9d\98 ë¬¸ì\84\9cì\9e\85ë\8b\88ë\8b¤.",
+'recentchanges-label-unpatrolled' => '아직 검토í\95\98ì§\80 ì\95\8aì\9d\80 í\8e¸ì§\91',
+'rcnote' => "다음은 $4 $5 까지의 '''$2'''일동안 바뀐 ë¬¸ì\84\9c '''$1'''ê°\9cì\9e\85ë\8b\88ë\8b¤.",
+'rcnotefrom' => "다음은 '''$2'''에서부터 바뀐 ë¬¸ì\84\9c '''$1'''ê°\9cì\9e\85ë\8b\88ë\8b¤.",
 'rclistfrom' => '$1 이래로 바뀐 문서',
 'rcshowhideminor' => '사소한 편집을 $1',
 'rcshowhidebots' => '봇을 $1',
@@ -1642,7 +1702,7 @@ $1",
 'rcshowhideanons' => '익명 사용자를 $1',
 'rcshowhidepatr' => '검토된 편집을 $1',
 'rcshowhidemine' => '내 편집을 $1',
-'rclinks' => 'ìµ\9cê·¼ $2ì\9d¼ê°\84ì\9d\98 $1ê°\9c ë³\80ê²½ 기록 보기<br />$3',
+'rclinks' => 'ìµ\9cê·¼ $2ì\9d¼ê°\84ì\9d\98 $1ê°\9c ë°\94ë\80\9c 기록 보기<br />$3',
 'diff' => '비교',
 'hist' => '역사',
 'hide' => '숨기기',
@@ -1651,19 +1711,19 @@ $1",
 'newpageletter' => '새글',
 'boteditletter' => '봇',
 'number_of_watching_users_pageview' => '[$1명이 주시하고 있음]',
-'rc_categories' => '다음 분류로 제한 (‘|’로 구분)',
+'rc_categories' => '다음 분류로 제한 ("|"로 구분)',
 'rc_categories_any' => '모두',
-'rc-change-size-new' => 'ë³\80ê²½ 후 $1 {{PLURAL:$1|바이트}}',
+'rc-change-size-new' => 'ë°\94ê¾¼ 후 $1 {{PLURAL:$1|바이트}}',
 'newsectionsummary' => '새 주제: /* $1 */',
-'rc-enhanced-expand' => 'ì\84¸ë¶\80 기록 보기 (자바스크립트 필요)',
-'rc-enhanced-hide' => 'ì\84¸ë¶\80기록 숨기기',
+'rc-enhanced-expand' => 'ì\9e\90ì\84¸í\95\9c 기록 보기 (자바스크립트 필요)',
+'rc-enhanced-hide' => 'ì\9e\90ì\84¸í\95\9c 기록 숨기기',
 'rc-old-title' => '처음에  "$1"라는 제목으로 만들어짐',
 
 # Recent changes linked
 'recentchangeslinked' => '가리키는 글의 바뀜',
 'recentchangeslinked-feed' => '가리키는 글의 바뀜',
 'recentchangeslinked-toolbox' => '가리키는 글의 바뀜',
-'recentchangeslinked-title' => '‘$1’ 문서에 관련된 문서 바뀜',
+'recentchangeslinked-title' => '"$1" 문서에 관련된 문서 바뀜',
 'recentchangeslinked-noresult' => '이 문서에서 링크하는 문서 중, 해당 기간에 바뀐 문서가 없습니다.',
 'recentchangeslinked-summary' => "여기를 가리키는 문서(분류일 경우 이 분류에 포함된 문서)에 대한 최근 바뀜이 나와 있습니다.
 [[Special:Watchlist|주시하는 문서]]는 '''굵은''' 글씨로 나타납니다.",
@@ -1684,7 +1744,7 @@ $1",
 
 이 문서의 최근 삭제 기록과 이동 기록을 참고하십시오:",
 'uploadtext' => "파일을 올리기 위해서는 아래의 양식을 채워주세요.
-[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 찾을 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 로그]]에서 볼 수 있습니다.
+[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 찾을 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.
 
 문서에 파일을 넣으려면 아래 방법 중 하나를 사용하세요.
 * '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></tt>''' 파일의 온전한 모양을 사용하고자 할 때.
@@ -1704,18 +1764,21 @@ $1",
 'filestatus' => '저작권 상태:',
 'filesource' => '출처:',
 'uploadedfiles' => '파일 올리기',
-'ignorewarning' => '경고를 무시하고 저장합니다',
+'ignorewarning' => '경고를 무시하고 파일 저장',
 'ignorewarnings' => '모든 경고 무시하기',
 'minlength1' => '파일 이름은 적어도 1글자 이상이어야 합니다.',
-'illegalfilename' => '파일 이름 "$1"에는 문서 제목으로 허용되지 않는 글자가 포함되어 있습니다. 이름을 바꾸어 다시 시도해 주세요.',
+'illegalfilename' => '파일 이름 "$1"에는 문서 제목으로 허용되지 않는 글자가 포함되어 있습니다.
+이름을 바꾸어 다시 시도해 주세요.',
 'filename-toolong' => '파일 이름은 240바이트를 넘을 수 없습니다.',
-'badfilename' => '파일 이름이 ‘$1’(으)로 바뀌었습니다.',
+'badfilename' => '파일 이름이 "$1"로 바뀌었습니다.',
 'filetype-mime-mismatch' => '파일 확장자 ".$1"와 이 파일의 MIME($2)가 일치하지 않습니다.',
-'filetype-badmime' => '‘$1’ MIME을 가진 파일은 올릴 수 없습니다.',
+'filetype-badmime' => '"$1" MIME을 가진 파일은 올릴 수 없습니다.',
 'filetype-bad-ie-mime' => '인터넷 익스플로러가 잠재적으로 위험한 파일 형식으로 판단되어 사용이 금지된 "$1"로 인식할 수 있기 때문에 이 파일을 올릴 수 없습니다.',
-'filetype-unwanted-type' => "'''\".\$1\"''' 확장자는 추천하지 않습니다. 추천하는 {{PLURAL:\$3|파일 확장자}}는 \$2입니다.",
-'filetype-banned-type' => '{{PLURAL:$3$4}}\'\'\'".$1"\'\'\' 형식의 파일은 올릴 수 없습니다. $2 형식만 사용할 수 있습니다.',
-'filetype-missing' => '파일에 확장자(‘.jpg’ 등)가 없습니다.',
+'filetype-unwanted-type' => "'''\".\$1\"''' 확장자는 추천하지 않습니다.
+추천하는 {{PLURAL:\$3|파일 확장자}}는 \$2입니다.",
+'filetype-banned-type' => '{{PLURAL:$3$4}}\'\'\'".$1"\'\'\' 형식의 파일은 올릴 수 없습니다.
+$2 형식만 사용할 수 있습니다.',
+'filetype-missing' => '파일에 확장자(".jpg" 등)가 없습니다.',
 'empty-file' => '당신이 올린 파일이 비어 있습니다.',
 'file-too-large' => '올리려는 파일이 너무 큽니다.',
 'filename-tooshort' => '파일 이름이 너무 짧습니다.',
@@ -1725,16 +1788,16 @@ $1",
 'illegal-filename' => '이 파일 이름은 허용되지 않습니다.',
 'overwrite' => '기존 파일을 덮어쓰는 것은 허용되지 않습니다.',
 'unknown-error' => '알 수 없는 오류가 발생했습니다.',
-'tmp-create-error' => '임시 파일을 생성할 수 없습니다.',
+'tmp-create-error' => '임시 파일을 만들 수 없습니다.',
 'tmp-write-error' => '임시 파일을 작성하는 데 오류가 발생했습니다.',
-'large-file' => '파일 크기는 $1을 넘지 않는 것을 추천합니다. 이 파일의 크기는 $2입니다.',
+'large-file' => '파일 크기는 $1을 넘지 않는 것을 추천합니다.
+이 파일의 크기는 $2입니다.',
 'largefileserver' => '이 파일의 크기가 서버에서 허용된 설정보다 큽니다.',
 'emptyfile' => '올리려는 파일이 빈 파일입니다.
 파일 이름을 잘못 입력했을 수도 있습니다.
 올리려는 파일을 다시 한 번 확인해 주시기 바랍니다.',
 'windows-nonascii-filename' => '이 위키에서는 특수 문자가 포함된 파일 이름을 지원하지 않습니다.',
-'fileexists' => "같은 이름의 파일이 이미 있습니다.
-파일을 바꾸고 싶지 않다면 '''<tt>[[:$1]]</tt>''' 파일을 확인해 주세요.
+'fileexists' => "같은 이름의 파일이 이미 있습니다. 파일을 바꾸고 싶지 않다면 '''<tt>[[:$1]]</tt>''' 파일을 확인해 주세요.
 [[$1|thumb]]",
 'filepageexists' => "이 파일의 설명 문서가 '''<tt>[[:$1]]</tt>'''에 존재하지만, 이 이름을 가진 파일이 존재하지 않습니다.
 당신이 입력한 설명은 설명 문서에 반영되지 않을 것입니다.
@@ -1744,30 +1807,34 @@ $1",
 * 올리려는 파일 이름: '''<tt>[[:$1]]</tt>'''
 * 존재하는 파일 이름: '''<tt>[[:$2]]</tt>'''
 다른 이름으로 시도해 주세요.",
-'fileexists-thumbnail-yes' => "이 파일은 원본 그림이 아닌, 다른 그림의 크기를 줄인 섬네일 파일인 것 같습니다. [[$1|thumb]]
+'fileexists-thumbnail-yes' => "이 파일은 원본 그림이 아닌, 다른 그림의 크기를 줄인 섬네일 파일인 것 같습니다.
+[[$1|thumb]]
 '''<tt>[[:$1]]</tt>''' 파일을 확인해주세요.
 해당 파일이 현재 올리려는 파일과 같다면, 더 작은 크기의 그림을 올릴 필요는 없습니다.",
 'file-thumbnail-no' => "파일 이름이 '''<tt>$1</tt>'''으로 시작합니다.
 이 파일은 원본 그림이 아닌, 다른 그림의 크기를 줄인 섬네일 파일인 것 같습니다.
 더 해상도가 좋은 파일이 있다면 그 파일을 올려주세요. 아니면 올리려는 파일 이름을 바꾸어 주세요.",
 'fileexists-forbidden' => '같은 이름의 파일이 이미 있고, 덮어쓸 수 없습니다.
-그래도 파일을 올리시려면, 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다. [[File:$1|thumb|center|$1]]',
+그래도 파일을 올리시려면, 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다.
+[[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => '같은 이름의 파일이 이미 위키미디어 공용에 있습니다.
-파일을 업로드하길 원하신다면 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다. [[File:$1|thumb|center|$1]]',
-'file-exists-duplicate' => '{{PLURAL:$1}}현재 올리고 있는 파일이 아래 파일과 중복됩니다:',
+파일을 업로드하길 원하신다면 뒤로 돌아가서 다른 이름으로 시도해 주시기 바랍니다.
+[[File:$1|thumb|center|$1]]',
+'file-exists-duplicate' => '현재 올리고 있는 {{PLURAL:$1|파일}}이 아래 파일과 중복됩니다:',
 'file-deleted-duplicate' => '이 파일과 같은 파일 ([[:$1]])이 이전에 삭제된 적이 있습니다. 파일을 다시 올리기 전에 문서의 삭제 기록을 확인해 주시기 바랍니다.',
 'uploadwarning' => '올리기 경고',
 'uploadwarning-text' => '아래의 파일 설명을 수정하고 다시 시도해 주세요.',
 'savefile' => '파일 저장',
-'uploadedimage' => '‘[[$1]]’ 파일을 올렸습니다.',
-'overwroteimage' => '‘[[$1]]’ 파일의 새 버전을 올렸습니다.',
+'uploadedimage' => '"[[$1]]" 파일을 올렸습니다.',
+'overwroteimage' => '"[[$1]]" 파일의 새 판을 올렸습니다.',
 'uploaddisabled' => '올리기 비활성화됨',
 'copyuploaddisabled' => 'URL로 파일 올리기가 비활성화되어 있습니다.',
 'uploadfromurl-queued' => '당신의 올리기 명령이 기록되었습니다.',
 'uploaddisabledtext' => '파일 올리기 기능이 비활성화되어 있습니다.',
 'php-uploaddisabledtext' => 'PHP 파일 올리기가 비활성화되었습니다. 파일 올리기 설정을 확인하십시오.',
 'uploadscripted' => '이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.',
-'uploadvirus' => '파일이 바이러스를 포함하고 있습니다! 상세 설명: $1',
+'uploadvirus' => '파일이 바이러스를 포함하고 있습니다!
+자세한 설명: $1',
 'uploadjava' => '이 ZIP 파일은 자바의 .class 파일을 포함하고 있습니다.
 보안을 위한 제한을 우회할 수 있기 때문에 자바 파일을 올리는 것이 허용되지 않습니다.',
 'upload-source' => '원본 파일',
@@ -1778,9 +1845,9 @@ $1",
 'upload-description' => '파일의 설명',
 'upload-options' => '올리기 설정',
 'watchthisupload' => '이 파일 주시하기',
-'filewasdeleted' => '같은 이름을 가진 파일이 올라온 적이 있었고, 그 후에 삭제되었습니다. 올리기 전에 $1을 확인해 주시기 바랍니다.',
-'filename-bad-prefix' => '올리려고 하는 파일 이름이 \'\'\'"$1"\'\'\'(으)로 시작합니다.
-"$1"은(는) 디지털 사진기가 자동으로 붙이는 의미없는 이름입니다.
+'filewasdeleted' => '같은 이름을 가진 파일이 올라온 적이 있었고 그 후에 삭제되었습니다.
+올리기 전에 $1을 확인해 주시기 바랍니다.',
+'filename-bad-prefix' => '올리려고 하는 파일 이름이 \'\'\'"$1"\'\'\'(으)로 시작합니다. "$1"은(는) 디지털 사진기가 자동으로 붙이는 의미없는 이름입니다.
 파일에 대해 알기 쉬운 이름을 골라주세요.',
 'filename-prefix-blacklist' => ' #<!-- 이 줄은 그대로 두십시오 --> <pre>
 # 문법은 다음과 같습니다:
@@ -1808,9 +1875,12 @@ $1',
 'upload-proto-error' => '잘못된 프로토콜',
 'upload-proto-error-text' => '파일을 URL로 올리려면 <code>http://</code>이나 <code>ftp://</code>로 시작해야 합니다.',
 'upload-file-error' => '내부 오류',
-'upload-file-error-text' => '서버에 임시 파일을 만드는 과정에서 내부 오류가 발생했습니다. [[Special:ListUsers/sysop|관리자]]에게 연락해주세요.',
+'upload-file-error-text' => '서버에 임시 파일을 만드는 과정에서 내부 오류가 발생했습니다.
+[[Special:ListUsers/sysop|관리자]]에게 연락해주세요.',
 'upload-misc-error' => '알 수 없는 파일 올리기 오류',
-'upload-misc-error-text' => '파일을 올리는 중 알 수 없는 오류가 발생했습니다. URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세요. 문제가 계속되면 [[Special:ListUsers/sysop|관리자]]에게 연락해주세요.',
+'upload-misc-error-text' => '파일을 올리는 중 알 수 없는 오류가 발생했습니다.
+URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세요.
+문제가 계속되면 [[Special:ListUsers/sysop|관리자]]에게 연락해주세요.',
 'upload-too-many-redirects' => 'URL이 너무 많은 넘겨주기에 연결되어 있습니다.',
 'upload-unknown-size' => '크기를 알 수 없음',
 'upload-http-error' => 'HTTP 오류 발생: $1',
@@ -1834,25 +1904,25 @@ $1',
 'backend-fail-read' => '$1 파일을 읽을 수 없습니다.',
 'backend-fail-create' => '$1 파일을 저장하지 못했습니다.',
 'backend-fail-maxsize' => '$2{{PLURAL:$2|바이트}}보다 커서 $1 파일을 저장하지 못했습니다.',
-'backend-fail-readonly' => '‘$1’ 저장 백엔드가 읽기 전용입니다. 자세한 이유는 다음과 같습니다: “$2”',
+'backend-fail-readonly' => '"$1" 저장 백엔드가 읽기 전용입니다. 자세한 이유는 다음과 같습니다: "$2"',
 'backend-fail-synced' => '파일 "$1"은 내부 저장 백엔드에 불안정한 상태로 있습니다.',
-'backend-fail-connect' => "'$1' 저장 백엔드에 접속하지 못했습니다.",
+'backend-fail-connect' => '"$1" 저장 백엔드에 접속하지 못했습니다.',
 'backend-fail-internal' => '"$1" 저장 백엔드에 알 수 없는 오류가 발생했습니다.',
 'backend-fail-contenttype' => '"$1"에 저장하기 위한 파일의 내용 유형을 판별하지 못했습니다.',
-'backend-fail-batchsize' => '저장 백엔드에서 파일 {{PLURAL:$1|작업}} $1개가 쌓여 있습니다; 한계는 $2개입니다.',
+'backend-fail-batchsize' => '저장 백엔드에서 파일 {{PLURAL:$1|작업}} $1개가 쌓여 있습니다. 한계는 $2개입니다.',
 'backend-fail-usable' => '파일 저장 권한이 없거나 저장 위치가 빠졌기 때문에 $1 파일을 저장할 수 없습니다.',
 
 # File journal errors
-'filejournal-fail-dbconnect' => '저장소 백엔드 ‘$1’에 대한 저널 데이터베이스에 연결할 수 없습니다.',
-'filejournal-fail-dbquery' => '저장소 백엔드 â\80\98$1â\80\99ì\97\90 ë\8c\80í\95\9c ì \80ë\84\90 ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ì\97\90ì\84\9c ê°±ì\8b í\95  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.',
+'filejournal-fail-dbconnect' => '저장소 백엔드 "$1"에 대한 저널 데이터베이스에 연결할 수 없습니다.',
+'filejournal-fail-dbquery' => '저장소 백엔드 "$1"ì\97\90 ë\8c\80í\95\9c ì \80ë\84\90 ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ì\97\90ì\84\9c ì\83\88ë¡\9c ê³ ì¹  ì\88\98 ì\97\86ì\8aµë\8b\88ë\8b¤.',
 
 # Lock manager
-'lockmanager-notlocked' => '‘$1’ 경로의 잠금을 풀 수 없습니다. 해당 경로는 잠겨 있지 않습니다.',
-'lockmanager-fail-closelock' => '‘$1’에 대한 잠금 파일을 닫지 못했습니다.',
-'lockmanager-fail-deletelock' => '‘$1’에 대한 잠금 파일을 삭제하지 못했습니다.',
-'lockmanager-fail-acquirelock' => '‘$1’에 대한 잠금이 실패했습니다.',
-'lockmanager-fail-openlock' => '‘$1’에 대한 잠금 파일을 열지 못했습니다.',
-'lockmanager-fail-releaselock' => '‘$1’에 대한 잠금을 해제하지 못했습니다.',
+'lockmanager-notlocked' => '"$1" 경로의 잠금을 풀 수 없습니다. 해당 경로는 잠겨 있지 않습니다.',
+'lockmanager-fail-closelock' => '"$1"에 대한 잠금 파일을 닫지 못했습니다.',
+'lockmanager-fail-deletelock' => '"$1"에 대한 잠금 파일을 삭제하지 못했습니다.',
+'lockmanager-fail-acquirelock' => '"$1"에 대한 잠금이 실패했습니다.',
+'lockmanager-fail-openlock' => '"$1"에 대한 잠금 파일을 열지 못했습니다.',
+'lockmanager-fail-releaselock' => '"$1"에 대한 잠금을 해제하지 못했습니다.',
 'lockmanager-fail-db-bucket' => '데이터베이스의 버킷 $1의 잠금을 풀지 못했습니다.',
 'lockmanager-fail-db-release' => '데이터베이스 $1의 잠금을 풀지 못했습니다.',
 'lockmanager-fail-svr-release' => '서버 $1의 잠금을 풀지 못했습니다.',
@@ -1867,33 +1937,36 @@ $1',
 
 # Special:UploadStash
 'uploadstash' => '파일 올리기 임시 저장',
-'uploadstash-summary' => '이 페이지는 위키에 등록되지는 않았지만 올리는 과정 중에 있는 파일을 열람할 수 있습니다. 이 파일들은 올린이 외에는 볼 수 없습니다.',
+'uploadstash-summary' => '이 문서는 위키에 등록되지는 않았지만 올리는 과정 중에 있는 파일을 열람할 수 있습니다. 이 파일들은 올린이 외에는 볼 수 없습니다.',
 'uploadstash-clear' => '임시 저장한 파일 제거하기',
 'uploadstash-nofiles' => '임시 저장한 파일이 없습니다.',
-'uploadstash-badtoken' => 'ì\9d´ ë\8f\99ì\9e\91ì\9d\84 ì\88\98í\96\89í\95\98ë\8a\94 ë\8d° ì\8b¤í\8c¨í\96\88ì\8aµë\8b\88ë\8b¤. í\8e¸ì§\91 í\86 í\81°ì\9d´ ë§\8cë£\8cë\90\98ì\97\88ì\9d\84 ê°\80ë\8a¥ì\84±ì\9d´ ì\9e\88ì\8aµë\8b\88ë\8b¤. ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ ë³´ì\8b­ì\8b\9cì\98¤.',
+'uploadstash-badtoken' => 'ì\9d´ ë\8f\99ì\9e\91ì\9d\84 ì\88\98í\96\89í\95\98ë\8a\94 ë\8d° ì\8b¤í\8c¨í\96\88ì\8aµë\8b\88ë\8b¤. í\8e¸ì§\91 í\86 í\81°ì\9d´ ë§\8cë£\8cë\90\98ì\97\88ì\9d\84 ê°\80ë\8a¥ì\84±ì\9d´ ì\9e\88ì\8aµë\8b\88ë\8b¤. ë\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98ì\84¸ì\9a\94.',
 'uploadstash-errclear' => '파일을 제거하는 데 실패했습니다.',
 'uploadstash-refresh' => '파일 목록을 새로고침',
 'invalid-chunk-offset' => '청크 오프셋이 잘못되었습니다.',
 
 # img_auth script messages
 'img-auth-accessdenied' => '접근 거부됨',
-'img-auth-nopathinfo' => '서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.
+'img-auth-nopathinfo' => 'PATH_INFO를 잃었습니다.
+서버가 이 정보를 받을 수 있도록 설정되어 있지 않습니다.
 이러한 경우는 서버가 CGI 기반이고 img_auth를 지원하지 않을 때 나타날 수 있습니다.
 https://www.mediawiki.org/wiki/Manual:Image_Authorization 을 참고하십시오.',
-'img-auth-notindir' => 'ì\9a\94ì²­í\95\9c ê²½ë¡\9cê°\80 ì\84¤ì \95í\95\9c ì\97\85ë¡\9cë\93\9c 디렉토리에 없습니다.',
-'img-auth-badtitle' => '"$1"에서 바른 제목을 만들 수 없습니다.',
+'img-auth-notindir' => 'ì\9a\94ì²­í\95\9c ê²½ë¡\9cê°\80 ì\84¤ì \95í\95\9c ì\98¬ë¦¬ê¸° 디렉토리에 없습니다.',
+'img-auth-badtitle' => '"$1"에서 바른 제목을 만들 수 없습니다.',
 'img-auth-nologinnWL' => '당신은 로그인하지 않았으며 "$1" 파일은 화이트리스트에 존재하지 않습니다.',
 'img-auth-nofile' => '"$1" 파일이 없습니다.',
 'img-auth-isdir' => '"$1" 디렉토리에 접근을 시도했습니다.
 파일에만 접근할 수 있습니다.',
-'img-auth-streaming' => '‘$1’ 파일을 전송하는 중입니다.',
-'img-auth-public' => 'img_auth.php는 개인 위키 파일을 외부 사이트로 전송하는 기능입니다. 이 기능은 기본적으로 공개적인 위키에서 사용하도록 설계되어 있으며, 보안적인 문제로 기본적으로 img_auth.php 기능은 비활성화되어 있습니다.',
-'img-auth-noread' => '‘$1’ 파일을 볼 권한이 없습니다.',
+'img-auth-streaming' => '"$1" 파일을 전송하는 중입니다.',
+'img-auth-public' => 'img_auth.php는 개인 위키 파일을 외부 사이트로 전송하는 기능입니다.
+이 기능은 기본적으로 공개적인 위키에서 사용하도록 설계되어 있습니다.
+보안적인 문제로 기본적으로 img_auth.php 기능은 비활성화되어 있습니다.',
+'img-auth-noread' => '"$1" 파일을 볼 권한이 없습니다.',
 'img-auth-bad-query-string' => 'URL에 잘못된 쿼리 문자열이 있습니다.',
 
 # HTTP errors
 'http-invalid-url' => '잘못된 URL: $1',
-'http-invalid-scheme' => '‘$1’로 시작하는 URL은 지원되지 않습니다.',
+'http-invalid-scheme' => '"$1"로 시작하는 URL은 지원되지 않습니다.',
 'http-request-error' => '알 수 없는 오류로 HTTP 요청에 실패했습니다.',
 'http-read-error' => 'HTTP 읽기 오류.',
 'http-timed-out' => 'HTTP 요청 시간 초과.',
@@ -1906,7 +1979,9 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization 을 참고하십시오
 'upload-curl-error6-text' => 'URL에 접근할 수 없습니다.
 URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'upload-curl-error28' => '업로드 시간 초과',
-'upload-curl-error28-text' => '사이트에서 응답하는 시간이 너무 깁니다. 사이트 접속이 가능한지 확인한 다음 다시 시도해주세요. 해당 사이트에 접속이 많을 경우, 접속이 원활한 시간대에 시도해주세요.',
+'upload-curl-error28-text' => '사이트에서 응답하는 시간이 너무 깁니다.
+사이트 접속이 가능한지 확인한 다음 다시 시도해주세요.
+해당 사이트에 접속이 많을 경우 접속이 원활한 시간대에 시도해주세요.',
 
 'license' => '라이선스:',
 'license-header' => '라이선스',
@@ -1939,7 +2014,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'filehist-current' => '최신',
 'filehist-datetime' => '날짜/시간',
 'filehist-thumb' => '섬네일',
-'filehist-thumbtext' => '$1 버전의 파일',
+'filehist-thumbtext' => '$1 의 파일',
 'filehist-nothumb' => '섬네일 없음',
 'filehist-user' => '사용자',
 'filehist-dimensions' => '크기',
@@ -1970,7 +2045,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'shared-repo-from' => '($1)',
 'shared-repo' => '공용 저장소',
 'shared-repo-name-wikimediacommons' => '위키미디어 공용',
-'filepage.css' => '/* 이 CSS 설정은 파일 설명 페이지에 포함되며, 또한 해외 클라이언트 위키에 포함됩니다 */',
+'filepage.css' => '/* 이 CSS 설정은 파일 설명 문서에 포함되며, 또한 해외 클라이언트 위키에 포함됩니다 */',
 
 # File reversion
 'filerevert' => '$1 되돌리기',
@@ -2004,7 +2079,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 # MIME search
 'mimesearch' => 'MIME 찾기',
-'mimesearch-summary' => 'MIME 타입에 해당하는 파일을 검색합니다. MIME 값을 <tt>image/jpeg</tt> 형태로 입력해주세요.',
+'mimesearch-summary' => 'MIME 타입에 해당하는 파일을 찾습니다.
+다음 형태로 입력해주세요: 내용종류/하위종류, 예를 들어 <tt>image/jpeg</tt>',
 'mimetype' => 'MIME 종류:',
 'download' => '다운로드',
 
@@ -2017,7 +2093,6 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 # Unused templates
 'unusedtemplates' => '사용하지 않는 틀 목록',
 'unusedtemplatestext' => '다른 문서에서 사용하지 않는 {{ns:template}} 이름공간 문서의 목록입니다.
-
 삭제하기 전에 사용 여부를 다시 확인해 주세요.',
 'unusedtemplateswlh' => '다른 링크',
 
@@ -2038,12 +2113,12 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'statistics-header-hooks' => '기타 통계',
 'statistics-articles' => '일반 문서',
 'statistics-pages' => '전체 문서',
-'statistics-pages-desc' => '토론 문서, 넘겨주기 문서 등을 포함.',
+'statistics-pages-desc' => '토론 문서, 넘겨주기 문서 등을 포함하는 모든 문서.',
 'statistics-files' => '올려져 있는 파일',
 'statistics-edits' => '{{SITENAME}} 설치 후 문서의 전체 편집 횟수',
 'statistics-edits-average' => '문서당 평균 편집 횟수',
 'statistics-views-total' => '총 방문 수',
-'statistics-views-total-desc' => '존재하지 않는 문서나 특수 문서에 대한 방문수는 집계ë\90\98ì§\80 ì\95\8aì\95\98ì\8aµë\8b\88ë\8b¤.',
+'statistics-views-total-desc' => '존재하지 않는 문서나 특수 문서에 대한 방문수는 집계í\95\98ì§\80 ì\95\8aì\95\98ì\8aµë\8b\88ë\8b¤.',
 'statistics-views-peredit' => '편집당 방문 횟수',
 'statistics-users' => '등록된 [[Special:ListUsers|사용자]]',
 'statistics-users-active' => '활동적인 사용자',
@@ -2051,7 +2126,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'statistics-mostpopular' => '가장 많이 읽힌 문서',
 
 'disambiguations' => '동음이의 문서를 가리키는 문서 목록',
-'disambiguationspage' => 'Template:Disambig',
+'disambiguationspage' => 'Template:disambig',
 'disambiguations-text' => "다음의 문서들은 '''동음이의 문서'''를 가리키고 있습니다.
 그 링크를 다른 적절한 문서로 연결해 주어야 합니다.<br />
 [[MediaWiki:Disambiguationspage]]에서 링크된 틀을 사용하는 문서를 동음이의 문서로 간주합니다.",
@@ -2060,7 +2135,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'doubleredirectstext' => '이 문서는 다른 넘겨주기 문서로 넘겨주고 있는 문서의 목록입니다.
 매 줄에는 첫 번째 문서와 두 번째 문서의 링크가 있습니다. 그리고 보통 첫 번째 문서가 넘겨주어야 할 "실제" 문서인 두 번째 넘겨주기의 대상이 있습니다.
 <del>취소선이 그인</del> 부분은 이미 해결되었습니다.',
-'double-redirect-fixed-move' => '[[$1]] 문서를 옮겼습니다. 이 문서는 이제 [[$2]] 문서로 넘겨줍니다.',
+'double-redirect-fixed-move' => '[[$1]] 문서를 옮겼습니다.
+이 문서는 이제 [[$2]] 문서로 넘겨줍니다.',
 'double-redirect-fixed-maintenance' => '[[$1]]에서 [[$2]]로 이중 넘겨주기를 고치는 중',
 'double-redirect-fixer' => '넘겨주기 수리꾼',
 
@@ -2125,8 +2201,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'listusers' => '사용자 목록',
 'listusers-editsonly' => '기여가 있는 사용자만 보기',
 'listusers-creationsort' => '계정 등록일 순으로 정렬',
-'usereditcount' => '편집 $1',
-'usercreated' => '$1 $2에 계정 {{GENDER:$3|생성됨}}',
+'usereditcount' => '편집 $1',
+'usercreated' => '$1 $2에 계정 {{GENDER:$3|만들어짐}}',
 'newpages' => '새 문서 목록',
 'newpages-username' => '이름:',
 'ancientpages' => '오래된 문서 목록',
@@ -2149,7 +2225,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'booksources-search-legend' => '책 찾기',
 'booksources-go' => '찾기',
 'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 외부 사이트로, 원하는 책의 정보를 얻을 수 있습니다:',
-'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다; 원본과 대조해 보십시오.',
+'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
 
 # Special:Log
 'specialloguserlabel' => '작업 수행자:',
@@ -2176,8 +2252,9 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'allpagesnext' => '다음',
 'allpagessubmit' => '표시',
 'allpagesprefix' => '다음으로 시작하는 문서 보기:',
-'allpagesbadtitle' => '문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키를 가지고 있습니다. 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
-'allpages-bad-ns' => '{{SITENAME}}에서는 ‘$1’ 이름공간을 사용하지 않습니다.',
+'allpagesbadtitle' => '문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키를 가지고 있습니다.
+문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
+'allpages-bad-ns' => '{{SITENAME}}에서는 "$1" 이름공간을 사용하지 않습니다.',
 'allpages-hide-redirects' => '넘겨주기 숨기기',
 
 # SpecialCachedPage
@@ -2200,7 +2277,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'sp-deletedcontributions-contribs' => '기여',
 
 # Special:LinkSearch
-'linksearch' => '외부 링크 검색',
+'linksearch' => '외부 링크 찾기',
 'linksearch-pat' => '검색 패턴:',
 'linksearch-ns' => '이름공간:',
 'linksearch-ok' => '검색',
@@ -2239,18 +2316,18 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'listgrouprights-rights' => '권한',
 'listgrouprights-helppage' => 'Help:사용자 권한 그룹',
 'listgrouprights-members' => '(사용자 목록)',
-'listgrouprights-addgroup' => '{{PLURAL:$2}}권한 부여: $1',
-'listgrouprights-removegroup' => '{{PLURAL:$2}}권한 회수: $1',
+'listgrouprights-addgroup' => '{{PLURAL:$2|권한}} 부여: $1',
+'listgrouprights-removegroup' => '{{PLURAL:$2|권한}} 회수: $1',
 'listgrouprights-addgroup-all' => '모든 권한을 부여',
 'listgrouprights-removegroup-all' => '모든 권한을 회수',
-'listgrouprights-addgroup-self' => '자신에게 다음 {{PLURAL:$2|권한|권한}}을 부여: $1',
-'listgrouprights-removegroup-self' => '자신에게서 다음 {{PLURAL:$2|권한|권한}}을 해제: $1',
+'listgrouprights-addgroup-self' => '자신에게 다음 {{PLURAL:$2|권한}}을 부여: $1',
+'listgrouprights-removegroup-self' => '자신에게서 다음 {{PLURAL:$2|권한}}을 해제: $1',
 'listgrouprights-addgroup-self-all' => '자신에게 모든 권한을 부여',
 'listgrouprights-removegroup-self-all' => '자신의 계정에서 모든 권한을 해제',
 
 # E-mail user
 'mailnologin' => '보낼 이메일 주소가 없음',
-'mailnologintext' => '다른 사용자에게 이메일을 보내려면, [[Special:UserLogin|로그인]]한 다음 [[Special:Preferences|사용자 환경 설정]]에서 자신의 이메일 주소를 저장해야 합니다.',
+'mailnologintext' => '다른 사용자에게 이메일을 보내려면 [[Special:UserLogin|로그인]]한 다음 [[Special:Preferences|사용자 환경 설정]]에서 자신의 이메일 주소를 저장해야 합니다.',
 'emailuser' => '이메일 보내기',
 'emailpage' => '사용자에게 이메일 보내기',
 'emailpagetext' => '이 사용자가 환경 설정에 올바른 이메일 주소를 적었다면, 아래 양식을 통해 이메일을 보낼 수 있습니다.
@@ -2264,7 +2341,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'nowikiemailtitle' => '이메일이 허용되지 않음',
 'nowikiemailtext' => '이 사용자는 다른 사용자로부터의 이메일을 받지 않도록 설정하였습니다.',
 'emailnotarget' => '수신자로 없는 사용자를 지정하였거나 계정 이름이 잘못되었습니다.',
-'emailtarget' => '수신자 계정 입력',
+'emailtarget' => '수신자 계정 이름 입력',
 'emailusername' => '계정 이름:',
 'emailusernamesubmit' => '확인',
 'email-legend' => '{{SITENAME}}의 다른 사용자에게 이메일을 보내기',
@@ -2277,7 +2354,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'emailccsubject' => '$1에게 보낸 메일 사본: $2',
 'emailsent' => '이메일 보냄',
 'emailsenttext' => '이메일을 보냈습니다.',
-'emailuserfooter' => '이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 "이메일 보내기" 기능을 통해 ì \84ì\86¡ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.',
+'emailuserfooter' => '이 이메일은 {{SITENAME}}의 $1 사용자가 $2 사용자에게 "이메일 보내기" 기능을 통해 ë³´ë\83\88ì\8aµë\8b\88ë\8b¤.',
 
 # User Messenger
 'usermessage-summary' => '시스템 메시지 남기기',
@@ -2312,7 +2389,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'watchlistcontains' => '문서 $1개를 주시하고 있습니다.',
 'iteminvalidname' => '"$1" 항목에 문제가 발생했습니다. 이름이 잘못되었습니다...',
 'wlnote' => "다음은 최근 '''$2'''시간 동안 바뀐 문서 '''$1'''개 입니다. ($3 $4 기준)",
-'wlshowlast' => '최근 $1 시간 $2 일 또는 $3 동안에 바뀐 문서',
+'wlshowlast' => '최근 $1시간 $2일 또는 $3 동안에 바뀐 문서',
 'watchlist-options' => '주시문서 목록 설정',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -2327,8 +2404,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'changed' => '바꾸',
 'created' => '만들',
 'enotif_subject' => '{{SITENAME}}에서 $PAGEEDITOR 사용자가 $PAGETITLE 문서를 $CHANGEDORCREATED었습니다.',
-'enotif_lastvisited' => 'ë§\88ì§\80ë§\89ì\9c¼ë¡\9c ë°©ë¬¸í\95\9c ë\92¤ ì\83\9d긴 ëª¨ë\93  ë³\80ê²½ ì\82¬í\95­ì\9d\84 ë³´ë ¤ë©´ $1ì\9d\84(를) ë³´ì\8b­ì\8b\9cì\98¤.',
-'enotif_lastdiff' => 'ì\9d´ ë°\94ë\80\90 ë\82´ì\9a©ì\9d\84 ë³´ë ¤ë©´ $1ì\9d\84 ë³´ì\8b­ì\8b\9cì\98¤.',
+'enotif_lastvisited' => 'ë§\88ì§\80ë§\89ì\9c¼ë¡\9c ë°©ë¬¸í\95\9c ë\92¤ ì\83\9d긴 ëª¨ë\93  ë°\94ë\80\9c ì\82¬í\95­ì\9d\84 ë³´ë ¤ë©´ $1ì\9d\84(를) ë³´ì\84¸ì\9a\94.',
+'enotif_lastdiff' => 'ì\9d´ ë°\94ë\80\90 ë\82´ì\9a©ì\9d\84 ë³´ë ¤ë©´ $1ì\9d\84 ë³´ì\84¸ì\9a\94.',
 'enotif_anon_editor' => '익명 사용자 $1',
 'enotif_body' => '$WATCHINGUSERNAME님,
 
@@ -2345,7 +2422,7 @@ $NEWPAGE
 이 문서를 열기 전에는 다른 알림 이메일을 더 이상 보내지 않습니다.
 모든 주시 문서의 알림 딱지를 초기화할 수도 있습니다.
 
-             {{SITENAME}} 알림 시스템
+{{SITENAME}} 알림 시스템
 
 --
 이메일 알림 설정을 바꾸시려면 이곳을 방문해주세요:
@@ -2363,19 +2440,21 @@ $UNWATCHURL
 # Delete
 'deletepage' => '문서 삭제하기',
 'confirm' => '확인',
-'excontent' => '내용: ‘$1’',
-'excontentauthor' => "내용: ‘$1’ (유일한 편집자는 '[[Special:Contributions/$2|$2]]')",
-'exbeforeblank' => '비우기 전의 내용: ‘$1’',
+'excontent' => '내용: "$1"',
+'excontentauthor' => '내용: "$1" (유일한 편집자는 "[[Special:Contributions/$2|$2]]")',
+'exbeforeblank' => '비우기 전의 내용: "$1"',
 'exblank' => '빈 문서',
-'delete-confirm' => '‘$1’ 삭제',
+'delete-confirm' => '"$1" 삭제',
 'delete-legend' => '삭제',
 'historywarning' => "'''주의:''' 삭제하려는 문서에 과거 편집 내역 약 $1개가 있습니다:",
-'confirmdeletetext' => '문서와 문서 역사를 삭제하려고 합니다. 삭제하려는 문서가 맞는지, 이 문서를 삭제하는 것이 [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지를 확인해 주세요.',
+'confirmdeletetext' => '문서와 문서 역사를 삭제하려고 합니다.
+삭제하려는 문서가 맞는지, 이 문서를 삭제하는 것이 [[{{MediaWiki:Policy-url}}|정책]]에 맞는 행동인지를 확인해 주세요.',
 'actioncomplete' => '명령 완료',
 'actionfailed' => '명령 실패',
-'deletedtext' => '‘$1’ 문서를 삭제했습니다. 최근 삭제 기록은 $2에 있습니다.',
+'deletedtext' => '"$1" 문서를 삭제했습니다.
+최근 삭제 기록은 $2에 있습니다.',
 'dellogpage' => '삭제 기록',
-'dellogpagetext' => '아래의 목록은 최근에 삭제된 문서입니다.',
+'dellogpagetext' => '아래의 목록은 최근에 삭제된 문서입니다.',
 'deletionlog' => '삭제 기록',
 'reverted' => '이전 버전으로 되돌렸습니다.',
 'deletecomment' => '이유:',
@@ -2384,9 +2463,10 @@ $UNWATCHURL
 'deletereason-dropdown' => '*일반적인 삭제 이유
 ** 작성자의 요청
 ** 저작권 침해
-** 잘못된 문서',
+** 훼손 행위',
 'delete-edit-reasonlist' => '삭제 이유 편집',
-'delete-toobig' => '이 문서에는 편집 역사가 $1개 있습니다. 편집 역사가 긴 문서를 삭제하면 {{SITENAME}}에 큰 혼란을 줄 수 있기 때문에 삭제할 수 없습니다.',
+'delete-toobig' => '이 문서에는 편집 역사가 $1개 있습니다.
+편집 역사가 긴 문서를 삭제하면 {{SITENAME}}에 큰 혼란을 줄 수 있기 때문에 삭제할 수 없습니다.',
 'delete-warning-toobig' => '이 문서에는 편집 역사가 $1개 있습니다.
 편집 역사가 긴 문서를 삭제하면 {{SITENAME}} 데이터베이스 동작에 큰 영향을 줄 수 있습니다.
 주의해 주세요.',
@@ -2396,29 +2476,33 @@ $UNWATCHURL
 'rollback_short' => '되돌리기',
 'rollbacklink' => '되돌리기',
 'rollbackfailed' => '되돌리기 실패',
-'cantrollback' => '편집을 되돌릴 수 없습니다. 문서를 편집한 사용자가 한명뿐입니다.',
-'alreadyrolled' => '[[:$1]]에서 [[User:$2|$2]] ([[User talk:$2|토론]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) 의 편집을 되돌릴 수 없습니다; 누군가가 이미 문서를 고치거나 되돌렸습니다.
+'cantrollback' => '편집을 되돌릴 수 없습니다.
+문서를 편집한 사용자가 한명뿐입니다.',
+'alreadyrolled' => '[[:$1]]에서 [[User:$2|$2]] ([[User talk:$2|토론]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])의 편집을 되돌릴 수 없습니다.
+누군가가 이미 문서를 고치거나 되돌렸습니다.
 
-마지막으로 이 문서를 편집한 사용자는 [[User:$3|$3]] ([[User talk:$3|토론]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) 입니다.',
-'editcomment' => "편집 요약: ''$1''",
+마지막으로 이 문서를 편집한 사용자는 [[User:$3|$3]] ([[User talk:$3|토론]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])입니다.',
+'editcomment' => '편집 요약: "$1"',
 'revertpage' => '[[Special:Contributions/$2|$2]]([[User talk:$2|토론]])의 편집을 [[User:$1|$1]]의 마지막 버전으로 되돌림',
 'revertpage-nouser' => '(계정 이름 삭제됨)의 편집을 [[User:$1|$1]]의 마지막 편집으로 되돌림',
 'rollback-success' => '$1의 편집을 $2의 마지막 버전으로 되돌렸습니다.',
 
 # Edit tokens
 'sessionfailure-title' => '세션 손실',
-'sessionfailure' => '로그인 세션에 문제가 발생한 것 같습니다. 세션 하이재킹을 막기 위해 동작이 취소되었습니다. 브라우저의 "뒤로" 버튼을 누르고 문서를 새로고침한 후에 다시 시도해 주세요.',
+'sessionfailure' => '로그인 세션에 문제가 발생한 것 같습니다.
+세션 하이재킹을 막기 위해 동작이 취소되었습니다.
+브라우저의 뒤로 버튼을 누르고 문서를 새로 고침한 후에 다시 시도해 주세요.',
 
 # Protect
 'protectlogpage' => '문서 보호 기록',
-'protectlogtext' => 'ì\95\84ë\9e\98ì\9d\98 ëª©ë¡\9dì\9d\80 ë¬¸ì\84\9c ë³´í\98¸ì\97\90 ê´\80í\95\9c ë³\80ê²½ 사항에 대한 기록입니다.
\98\84ì\9e¬ ë³´í\98¸ë\90\9c ë¬¸ì\84\9cì\9d\98 ëª©ë¡\9dì\97\90 ë\8c\80í\95´ì\84\9cë\8a\94 [[Special:ProtectedPages|ë³´í\98¸ë\90\9c ë¬¸ì\84\9c ëª©ë¡\9d]]ì\9d\84 ì°¸ê³ í\95\98ì\8b­ì\8b\9cì\98¤.',
-'protectedarticle' => '‘[[$1]]’ 문서를 보호함',
-'modifiedarticleprotection' => '‘[[$1]]’ 문서의 보호 설정을 변경함',
-'unprotectedarticle' => '‘[[$1]]’ 문서를 보호 해제함',
+'protectlogtext' => 'ì\95\84ë\9e\98ì\9d\98 ëª©ë¡\9dì\9d\80 ë¬¸ì\84\9c ë³´í\98¸ì\97\90 ê´\80í\95\9c ë°\94ë\80\9c 사항에 대한 기록입니다.
\98\84ì\9e¬ ë³´í\98¸ë\90\9c ë¬¸ì\84\9cì\9d\98 ëª©ë¡\9dì\97\90 ë\8c\80í\95´ì\84\9cë\8a\94 [[Special:ProtectedPages|ë³´í\98¸ë\90\9c ë¬¸ì\84\9c ëª©ë¡\9d]]ì\9d\84 ì°¸ê³ í\95\98ì\84¸ì\9a\94.',
+'protectedarticle' => '"[[$1]]" 문서를 보호함',
+'modifiedarticleprotection' => '"[[$1]]" 문서의 보호 설정을 바꿈',
+'unprotectedarticle' => '"[[$1]]" 문서를 보호 해제함',
 'movedarticleprotection' => '문서의 보호 설정을 "[[$2]]"에서 "[[$1]]"으로 옮김',
-'protect-title' => '‘$1’ 보호하기',
-'protect-title-notallowed' => '‘$1’ 문서의 보호 수준 보기',
+'protect-title' => '"$1" 보호하기',
+'protect-title-notallowed' => '"$1" 문서의 보호 수준 보기',
 'prot_1movedto2' => '[[$1]] 문서를 [[$2]] 문서로 이동함',
 'protect-badnamespace-title' => '보호할 수 없는 이름공간',
 'protect-badnamespace-text' => '이 이름공간에 있는 문서는 보호할 수 없습니다.',
@@ -2428,14 +2512,17 @@ $UNWATCHURL
 'protect_expiry_invalid' => '보호 기간이 잘못되었습니다.',
 'protect_expiry_old' => '기한을 과거로 입력했습니다.',
 'protect-unchain-permissions' => '다른 보호 설정을 수동으로 설정하기',
-'protect-text' => "'''$1''' 문서의 보호 수준을 보거나 변경할 수 있습니다.",
-'protect-locked-blocked' => "차단된 동안에는 보호 설정을 바꿀 수 없습니다. '''$1''' 문서의 보호 설정은 다음과 같습니다:",
-'protect-locked-dblock' => "데이터베이스가 잠겨 문서 보호 설정을 바꿀 수 없습니다. '''$1''' 문서의 현재 설정은 다음과 같습니다:",
-'protect-locked-access' => "문서 보호 수준을 변경할 권한이 없습니다. '''$1''' 문서의 권한은 다음과 같습니다.",
+'protect-text' => "'''$1''' 문서의 보호 수준을 보거나 바꿀 수 있습니다.",
+'protect-locked-blocked' => "차단된 동안에는 보호 설정을 바꿀 수 없습니다.
+'''$1''' 문서의 보호 설정은 다음과 같습니다:",
+'protect-locked-dblock' => "데이터베이스가 잠겨 문서 보호 설정을 바꿀 수 없습니다.
+'''$1''' 문서의 현재 설정은 다음과 같습니다:",
+'protect-locked-access' => "문서 보호 수준을 바꿀 권한이 없습니다.
+'''$1''' 문서의 권한은 다음과 같습니다.",
 'protect-cascadeon' => '다음 {{PLURAL:$1|문서}}에 연쇄적 보호가 작동하고 있어 그 문서에 속한 이 문서도 현재 보호됩니다.
-사용자께서는 이 문서의 보호 설정을 바꾸실 수 있지만, 연쇄적 보호에는 영향을 주지 않습니다.',
+사용자는 이 문서의 보호 설정을 바꾸실 수 있지만 연쇄적 보호에는 영향을 주지 않습니다.',
 'protect-default' => '모든 사용자에게 허용',
-'protect-fallback' => '‘$1’ 권한 필요',
+'protect-fallback' => '"$1" 권한 필요',
 'protect-level-autoconfirmed' => '등록된 사용자만 가능',
 'protect-level-sysop' => '관리자만 가능',
 'protect-summary-cascade' => '연쇄적',
@@ -2486,7 +2573,8 @@ $UNWATCHURL
 'undeleterevisions' => '판 $1개 보관중',
 'undeletehistory' => '문서를 되살리면 모든 역사가 같이 복구됩니다.
 문서가 삭제된 뒤 같은 이름의 문서가 만들어졌다면, 복구되는 역사는 지금 역사의 과거 부분에 나타날 것입니다.',
-'undeleterevdel' => '복구하려는 문서의 최신판이 삭제되어 있는 경우 문서를 복구시킬 수 없습니다. 이러한 경우, 삭제된 최신판 문서의 체크박스를 선택 해제하거나 숨김을 해제해야 합니다.',
+'undeleterevdel' => '복구하려는 문서의 최신판이 삭제되어 있는 경우 문서를 복구시킬 수 없습니다.
+이러한 경우, 삭제된 최신판 문서의 체크박스를 선택 해제하거나 숨김을 해제해야 합니다.',
 'undeletehistorynoadmin' => '이 문서는 삭제되었습니다.
 삭제된 이유와 삭제되기 전에 이 문서를 편집한 사용자들이 아래에 나와 있습니다.
 삭제된 문서의 내용을 보려면 관리자 권한이 필요합니다.',
@@ -2507,7 +2595,7 @@ $UNWATCHURL
 다른 사용자가 이미 복구했을 수도 있습니다.',
 'undeletedpage' => "'''$1 문서가 복구되었습니다.'''
 
-[[Special:Log/delete|삭제 기록]]에서 최근의 삭제/복구 기록을 볼 수 있습니다.",
+[[Special:Log/delete|삭제 기록]]에서 최근의 삭제와 복구 기록을 볼 수 있습니다.",
 'undelete-header' => '최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.',
 'undelete-search-title' => '삭제된 문서 찾기',
 'undelete-search-box' => '삭제된 문서 찾기',
@@ -2521,7 +2609,7 @@ $UNWATCHURL
 이미 복구되었을 수 있습니다.',
 'undelete-error' => '문서 복구 중 오류',
 'undelete-error-short' => '파일 복구 오류: $1',
-'undelete-error-long' => '파일을 복구하는 중 오류 발생:
+'undelete-error-long' => '파일을 복구하는 중 오류가 발생했습니다:
 
 $1',
 'undelete-show-file-confirm' => '정말 "<nowiki>$1</nowiki>" 파일의 삭제된 $2 $3 버전을 보시겠습니까?',
@@ -2532,7 +2620,7 @@ $1',
 'invert' => '선택 반전',
 'tooltip-invert' => '선택한 이름공간에 있는 문서의 바뀜을 숨기려면 이 상자에 체크해주세요.',
 'namespace_association' => '관련된 이름공간',
-'tooltip-namespace_association' => '선택한 이름공간과 관련된 토론/본문 이름공간을 같이 선택합니다.',
+'tooltip-namespace_association' => '선택한 이름공간과 관련된 토론이나 본문 이름공간을 같이 선택합니다.',
 'blanknamespace' => '(일반)',
 
 # Contributions
@@ -2554,10 +2642,11 @@ $1',
 'sp-contributions-logs' => '기록',
 'sp-contributions-talk' => '토론',
 'sp-contributions-userrights' => '사용자 권한 관리',
-'sp-contributions-blocked-notice' => '이 사용자는 현재 차단되어 있습니다. 해당 사용자의 차단 기록은 다음과 같습니다.',
+'sp-contributions-blocked-notice' => '이 사용자는 현재 차단되어 있습니다.
+해당 사용자의 차단 기록은 다음과 같습니다:',
 'sp-contributions-blocked-notice-anon' => '이 IP 주소는 현재 차단되어 있습니다.
\95\84ë\9e\98ì\9d\98 ìµ\9cê·¼ ì°¨ë\8b¨ ê¸°ë¡\9dì\9d\84 ì°¸ê³ í\95\98ì\8b­ì\8b\9cì\98¤.',
-'sp-contributions-search' => '기여 검색',
°¨ë\8b¨ ê¸°ë¡\9dì\9d\80 ë\8b¤ì\9d\8cê³¼ ê°\99ì\8aµë\8b\88ë\8b¤:',
+'sp-contributions-search' => '기여 찾기',
 'sp-contributions-username' => 'IP 주소 혹은 계정 이름:',
 'sp-contributions-toponly' => '최신판만 보기',
 'sp-contributions-submit' => '찾기',
@@ -2614,19 +2703,19 @@ $1',
 'ipbotheroption' => '수동으로 지정',
 'ipbotherreason' => '다른 이유/추가적인 이유:',
 'ipbhidename' => '사용자 이름을 편집 역사에서 숨기기',
-'ipbwatchuser' => '이 사용자 문서와 사용자토론 문서를 주시하기',
-'ipb-disableusertalk' => '차단된 동안 자신의 사용자토론 문서를 편집하지 못하도록 막기',
+'ipbwatchuser' => '이 사용자 문서와 사용자 토론 문서를 주시하기',
+'ipb-disableusertalk' => '차단된 동안 자신의 사용자 토론 문서를 편집하지 못하도록 막기',
 'ipb-change-block' => '이 설정으로 이 사용자를 다시 차단합니다',
 'ipb-confirm' => '차단 확인',
 'badipaddress' => '잘못된 IP 주소',
 'blockipsuccesssub' => '차단 완료',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] 사용자가 차단되었습니다.<br />
 차단된 사용자 목록은 [[Special:BlockList|여기]]에서 볼 수 있습니다.',
-'ipb-blockingself' => '자기 자신을 차단하려고 합니다. 정말로 실행할까요?',
+'ipb-blockingself' => '자기 자신을 차단하려고 합니다! 정말로 실행할까요?',
 'ipb-confirmhideuser' => '당신은 사용자를 차단하면서 "계정 숨기기" 설정을 선택했습니다. 이로써 모든 기록에서 이 사용자의 계정 이름을 숨기게 됩니다. 정말로 계정을 숨기시겠습니까?',
 'ipb-edit-dropdown' => '차단 이유 목록 편집하기',
 'ipb-unblock-addr' => '$1 차단 해제하기',
-'ipb-unblock' => '사용자/IP 주소 차단 해제하기',
+'ipb-unblock' => '사용자 또는 IP 주소 차단 해제하기',
 'ipb-blocklist' => '현재 차단 기록 보기',
 'ipb-blocklist-contribs' => '$1의 기여',
 'unblockip' => '사용자 차단 해제',
@@ -2642,7 +2731,7 @@ $1',
 'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
 'blocklist-addressblocks' => '당일 IP 차단을 숨기기',
 'blocklist-rangeblocks' => '광역 차단을 숨기기',
-'blocklist-timestamp' => '날짜/시각',
+'blocklist-timestamp' => '날짜·시각',
 'blocklist-target' => '차단 대상',
 'blocklist-expiry' => '차단 기한',
 'blocklist-by' => '차단한 관리자',
@@ -2650,34 +2739,36 @@ $1',
 'blocklist-reason' => '이유',
 'ipblocklist-submit' => '찾기',
 'ipblocklist-localblock' => '로컬 차단',
-'ipblocklist-otherblocks' => '다른 {{PLURAL:$1|}}차단 기록',
+'ipblocklist-otherblocks' => '다른 {{PLURAL:$1|차단}} 기록',
 'infiniteblock' => '무기한',
 'expiringblock' => '$1 $2에 해제',
 'anononlyblock' => '익명 사용자만',
 'noautoblockblock' => '자동 차단 비활성화됨',
-'createaccountblock' => '계정 생성 금지됨',
+'createaccountblock' => '계정 만들기 금지됨',
 'emailblock' => '이메일 차단됨',
 'blocklist-nousertalk' => '자신의 토론 문서 편집 불가',
 'ipblocklist-empty' => '차단된 사용자가 없습니다.',
 'ipblocklist-no-results' => '당신이 입력한 IP 주소나 사용자는 차단되지 않았습니다.',
 'blocklink' => '차단',
 'unblocklink' => '차단 해제',
-'change-blocklink' => 'ì°¨ë\8b¨ ì\84¤ì \95 ë³\80ê²½',
+'change-blocklink' => 'ì°¨ë\8b¨ ì\84¤ì \95 ë°\94꾸기',
 'contribslink' => '기여',
 'emaillink' => '이메일 보내기',
 'autoblocker' => '당신의 IP 주소는 최근에 "[[User:$1|$1]]" 사용자가 사용하였기 때문에 자동으로 차단되었습니다.
 $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'blocklogpage' => '차단 기록',
-'blocklog-showlog' => '이 사용자는 과거에 차단된 기록이 있습니다. 해당 사용자의 차단 기록은 다음과 같습니다.',
-'blocklog-showsuppresslog' => '이 사용자는 과거에 차단된 적이 있으며, 그 기록이 숨겨져 있습니다. 해당 사용자의 차단 기록은 다음과 같습니다.',
+'blocklog-showlog' => '이 사용자는 과거에 차단된 기록이 있습니다.
+해당 사용자의 차단 기록은 다음과 같습니다:',
+'blocklog-showsuppresslog' => '이 사용자는 과거에 차단된 적이 있으며, 그 기록이 숨겨져 있습니다.
+해당 사용자의 차단 기록은 다음과 같습니다:',
 'blocklogentry' => '[[$1]] 사용자를 $2 차단함 $3',
-'reblock-logentry' => '[[$1]] ì\82¬ì\9a©ì\9e\90ì\9d\98 ì°¨ë\8b¨ ê¸°ê°\84ì\9d\84 $2(ì\9c¼)ë¡\9c ë³\80ê²½ $3',
+'reblock-logentry' => '[[$1]] ì\82¬ì\9a©ì\9e\90ì\9d\98 ì°¨ë\8b¨ ê¸°ê°\84ì\9d\84 $2(ì\9c¼)ë¡\9c ë°\94ê¿\88 $3',
 'blocklogtext' => '이 목록은 사용자 차단/차단 해제 기록입니다.
 자동으로 차단된 IP 주소는 여기에 나오지 않습니다.
 [[Special:BlockList|여기]]에서 현재 차단된 사용자 목록을 볼 수 있습니다.',
 'unblocklogentry' => '$1을 차단 해제했습니다.',
 'block-log-flags-anononly' => 'IP만 막음',
-'block-log-flags-nocreate' => '계정 생성 금지됨',
+'block-log-flags-nocreate' => '계정 만들기 금지됨',
 'block-log-flags-noautoblock' => '자동 차단 비활성화됨',
 'block-log-flags-noemail' => '이메일 막음',
 'block-log-flags-nousertalk' => '자신의 토론 문서 편집 불가',
@@ -2689,10 +2780,9 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'ipb_hide_invalid' => '해당 계정은 막을 수 없습니다. 기여량이 너무 많습니다.',
 'ipb_already_blocked' => '"$1" 사용자는 이미 차단됨',
 'ipb-needreblock' => '$1 사용자는 이미 차단되었습니다. 차단 설정을 바꾸시겠습니까?',
-'ipb-otherblocks-header' => '다른 {{PLURAL:$1|}}차단 기록',
+'ipb-otherblocks-header' => '다른 {{PLURAL:$1|차단}} 기록',
 'unblock-hideuser' => '이 계정 이름이 숨겨져 있기 때문에 이 사용자를 차단 해제할 수 없습니다.',
-'ipb_cant_unblock' => '오류: 차단 ID $1이(가) 존재하지 않습니다.
-이미 차단 해제되었을 수 있습니다.',
+'ipb_cant_unblock' => '오류: 차단 ID $1이(가) 존재하지 않습니다. 이미 차단 해제되었을 수 있습니다.',
 'ipb_blocked_as_range' => '오류: IP 주소 $1은 직접 차단되지 않았기 때문에 차단 해제할 수 없습니다.
 하지만 $2로 광역 차단되었기 때문에, 광역 차단 해제로 차단을 해제할 수 있습니다.',
 'ip_range_invalid' => 'IP 범위가 잘못되었습니다.',
@@ -2700,54 +2790,58 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'blockme' => '자가 차단',
 'proxyblocker' => '프록시 차단',
 'proxyblocker-disabled' => '이 기능은 비활성되어 있습니다.',
-'proxyblockreason' => '당신의 IP 주소는 공개 프록시로 밝혀져 자동으로 차단됩니다. 만약 인터넷 사용에 문제가 있다면 인터넷 서비스 공급자에게 문의해주세요.',
+'proxyblockreason' => '당신의 IP 주소는 공개 프록시로 밝혀져 자동으로 차단됩니다.
+만약 인터넷 사용에 문제가 있다면 인터넷 서비스 공급자나 기술 지원팀에게 문의해주세요.',
 'proxyblocksuccess' => '완료.',
 'sorbsreason' => '당신의 IP 주소는 {{SITENAME}}에서 사용하는 DNSBL 공개 프록시 목록에 들어 있습니다.',
-'sorbs_create_account_reason' => '당신의 IP 주소는 {{SITENAME}}에서 사용하는 DNSBL 공개 프록시 목록에 들어 있습니다. 계정을 만들 수 없습니다.',
+'sorbs_create_account_reason' => '당신의 IP 주소는 {{SITENAME}}에서 사용하는 DNSBL 공개 프록시 목록에 들어 있습니다.
+계정을 만들 수 없습니다.',
 'cant-block-while-blocked' => '당신이 차단되어 있는 동안에는 다른 사용자를 차단할 수 없습니다.',
-'cant-see-hidden-user' => '당신이 차단하려 하는 사용자는 이미 차단되었고 계정 숨김 처리되었습니다. 당신이 계정 숨기기 권한을 갖고 있지 않기 때문에, 이 사용자의 차단 기록을 보거나 차단 설정을 변경할 수 없습니다.',
+'cant-see-hidden-user' => '당신이 차단하려 하는 사용자는 이미 차단되었고 계정 숨김 처리되었습니다.
+당신이 계정 숨기기 권한을 갖고 있지 않기 때문에, 이 사용자의 차단 기록을 보거나 차단 설정을 바꿀 수 없습니다.',
 'ipbblocked' => '당신은 차단되어 있기 때문에 다른 사용자를 차단하거나 차단을 해제할 수 없습니다.',
 'ipbnounblockself' => '당신은 자기 스스로를 차단 해제할 수 없습니다.',
 
 # Developer tools
 'lockdb' => '데이터베이스 잠그기',
 'unlockdb' => '데이터베이스 잠금 해제',
-'lockdbtext' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ë¥¼ ì\9e ê·¸ë©´ ëª¨ë\93  ì\82¬ì\9a©ì\9e\90ì\9d\98 í\8e¸ì§\91, í\99\98ê²½ ì\84¤ì \95 ë³\80ê²½, 주시문서 편집 등 데이터베이스를 요구하는 모든 기능이 정지됩니다.
+'lockdbtext' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ë¥¼ ì\9e ê·¸ë©´ ëª¨ë\93  ì\82¬ì\9a©ì\9e\90ì\9d\98 í\8e¸ì§\91, í\99\98ê²½ ì\84¤ì \95 ë°\94꾸기, 주시문서 편집 등 데이터베이스를 요구하는 모든 기능이 정지됩니다.
 정말로 잠가야 하는지를 다시 한번 확인해주세요. 관리 작업이 끝난 뒤에는 데이터베이스 잠금을 풀어야 합니다.',
-'unlockdbtext' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ë¥¼ ì\9e ê¸\88 í\95´ì \9cí\95\98ë©´ ëª¨ë\93  ì\82¬ì\9a©ì\9e\90ì\9d\98 í\8e¸ì§\91, í\99\98ê²½ ì\84¤ì \95 ë³\80ê²½, 주시문서 편집 등 데이터베이스를 요구하는 모든 기능이 복구됩니다.
+'unlockdbtext' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ë¥¼ ì\9e ê¸\88 í\95´ì \9cí\95\98ë©´ ëª¨ë\93  ì\82¬ì\9a©ì\9e\90ì\9d\98 í\8e¸ì§\91, í\99\98ê²½ ì\84¤ì \95 ë°\94꾸기, 주시문서 편집 등 데이터베이스를 요구하는 모든 기능이 복구됩니다.
 정말로 잠금을 해제하려는지를 다시 한번 확인해주세요.',
 'lockconfirm' => '네, 데이터베이스를 잠급니다.',
 'unlockconfirm' => '네, 데이터베이스를 잠금 해제합니다.',
 'lockbtn' => '데이터베이스 잠그기',
 'unlockbtn' => '데이터베이스 잠금 해제',
-'locknoconfirm' => 'í\99\95ì\9d¸ ì²´í\81¬ë°\95ì\8a¤를 선택하지 않았습니다.',
+'locknoconfirm' => 'í\99\95ì\9d¸ ì\83\81ì\9e\90를 선택하지 않았습니다.',
 'lockdbsuccesssub' => '데이터베이스 잠김',
 'unlockdbsuccesssub' => '데이터베이스 잠금 해제됨',
 'lockdbsuccesstext' => '데이터베이스가 잠겼습니다.<br />
 관리가 끝나면 잊지 말고 [[Special:UnlockDB|잠금을 풀어]] 주세요.',
 'unlockdbsuccesstext' => '데이터베이스 잠금 상태가 해제되었습니다.',
-'lockfilenotwritable' => '데이터베이스 잠금 파일에 쓰기 권한이 없습니다. 데이터베이스를 잠그거나 잠금 해제하려면, 웹 서버에서 이 파일의 쓰기 권한을 설정해야 합니다.',
+'lockfilenotwritable' => '데이터베이스 잠금 파일에 쓰기 권한이 없습니다.
+데이터베이스를 잠그거나 잠금 해제하려면, 웹 서버에서 이 파일의 쓰기 권한을 설정해야 합니다.',
 'databasenotlocked' => '데이터베이스가 잠겨 있지 않습니다.',
 'lockedbyandtime' => '($1이 $2 $3에 잠금)',
 
 # Move page
-'move-page' => '이동 $1',
+'move-page' => '$1 이동',
 'move-page-legend' => '문서 이동하기',
-'movepagetext' => "아래 양식을 채워 문서의 이름을 바꾸고 모든 역사를 새 이름으로 옮길 수 있습니다.
-기존의 문서는 새 문서로 넘겨주는 문서가 됩니다.
-원래 이름을 가리키는 넘겨주기를 자동으로 ê°±ì\8b í\95  ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.
-만약 이 설정을 선택하지 않았다면 [[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]] 확인해주세요.
\8b¹ì\8b ì\9d\80 ë§\81í\81¬ê°\80 ì\9d\98ë\8f\84í\95\9c ë¬¸ì\84\9c를 ê°\80리í\82¤ê²\8c í\95  ì±\85ì\9e\84ì\9d´ ì\9e\88ì\8aµ니다.
+'movepagetext' => "아래의 양식을 사용해 문서의 이름을 바꾸고 문서의 모든 역사를 새 이름으로 옮길 수 있습니다.
+이전의 제목은 새 제목으로 넘겨줄 것입니다.
+원래 이름을 가리키는 넘겨주기를 자동으로 ì\83\88ë¡\9c ê³ ì¹  ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.
+만약 이 설정을 선택하지 않았다면 [[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주세요.
\8b¹ì\8b ì\9d\80 ë\84\98겨주기 ë§\81í\81¬ê°\80 ì \9cë\8c\80ë¡\9c í\96¥í\95\98ê³  ì\9e\88ë\8a\94ì§\80 í\99\95ì\9d¸í\95\98ì\97¬ì\95¼ í\95©니다.
 
 만약 문서의 새 이름으로 된 문서가 존재할 때, 그 문서가 비었거나 넘겨주기 문서이고 문서 역사가 없을 때에만 이동합니다. 그렇지 않을 경우에는 이동하지 '''않습니다'''.
 이것은 실수로 이동한 문서를 되돌릴 수는 있지만, 이미 존재하는 문서 위에 덮어씌울 수는 없다는 것을 의미합니다.
 
 '''주의!'''
\9e\90주 ì\82¬ì\9a©í\95\98ë\8a\94 ë¬¸ì\84\9c를 ì\9d´ë\8f\99í\95\98ë©´ ì\9c\84í\97\98í\95\9c ê²°ê³¼ë¥¼ ê°\80ì ¸ì\98¬ 수 있습니다.
-이동하기 전에, 이 문서를 이동해도 문제가 없다는 것을 확인해주세요.",
-'movepagetext-noredirectfixer' => "ì\9d´ ì\96\91ì\8b\9dì\9d\84 ì\9d´ì\9a©í\95´ ë¬¸ì\84\9cì\9d\98 ì\9d´ë¦\84ì\9d\84 ë°\94꾸고 ë¬¸ì\84\9cì\9d\98 ëª¨ë\93  ì\97­ì\82¬ë¥¼ ì\98®ê¸¸ ê²\83ì\9e\85니다.
\9d¸ê¸° ì\9e\88ë\8a\94 ë¬¸ì\84\9cì\9d¼ ê²½ì\9a° ì\8b¬ê°\81í\95\98ê³  ì\98\88ì\83\81í\95\98ì§\80 ëª»í\95\9c ë¬¸ì \9c를 ì´\88ë\9e\98í\95  수 있습니다.
+문서를 이동하기 전에 이러한 행동이 초래할 수 있는 결과에 대해 숙지하시기 바랍니다.",
+'movepagetext-noredirectfixer' => "ì\95\84ë\9e\98ì\9d\98 ì\96\91ì\8b\9dì\9d\84 ì\82¬ì\9a©í\95´ ë¬¸ì\84\9cì\9d\98 ì\9d´ë¦\84ì\9d\84 ë°\94꾸고 ë¬¸ì\84\9cì\9d\98 ëª¨ë\93  ì\97­ì\82¬ë¥¼ ì\83\88 ì\9d´ë¦\84ì\9c¼ë¡\9c ì\98®ê¸¸ ì\88\98 ì\9e\88ì\8aµ니다.
 이전의 제목은 새 제목으로 넘겨줄 것입니다.
-[[Special:DoubleRedirects|ì\9d´ì¤\91 ë\84\98겨주기]]ë\82\98 [[Special:BrokenRedirects|ë\81\8a긴 ë\84\98겨주기]]ê°\80 ì\9e\88ë\8a\94ì§\80 í\99\95ì\9d¸í\95´ì£¼ì\8b­ì\8b\9cì\98¤.
+[[Special:DoubleRedirects|ì\9d´ì¤\91 ë\84\98겨주기]]ë\82\98 [[Special:BrokenRedirects|ë\81\8a긴 ë\84\98겨주기]]ê°\80 ì\9e\88ë\8a\94ì§\80 í\99\95ì\9d¸í\95´ì£¼ì\84¸ì\9a\94.
 당신은 넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다.
 
 참고로 새 제목을 가진 문서가 이미 있다면 다음 경우에 해당하지 않으면 이 문서는 옮겨지지 '''않을''' 것입니다.
@@ -2757,7 +2851,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 이는 당신이 실수로 문서를 옮겼을 때 되돌릴 수 있으며 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
 
 '''경고!'''
-방문 수나 이 문서를 향하는 링크가 많은 문서일 경우 심각한 문제를 초래할 수 있습니다.
+인기 있는 문서일 경우 심각하고 예상하지 못한 문제를 초래할 수 있습니다.
 문서를 이동하기 전에 이러한 행동이 초래할 수 있는 결과에 대해 숙지하시기 바랍니다.",
 'movepagetalktext' => "딸린 토론 문서도 자동으로 이동합니다. 하지만 다음의 경우는 '''이동하지 않습니다''':
 * 이동할 이름으로 된 문서가 이미 있는 경우
@@ -2765,7 +2859,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 이 경우에는 문서를 직접 이동하거나 두 문서를 합쳐야 합니다.",
 'movearticle' => '문서 이동하기',
-'moveuserpage-warning' => "'''경고:''' 당신은 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 계정 이름이 바뀌지 않는다는 점을 명심해주시기 바랍니다.",
+'moveuserpage-warning' => "'''경고:''' 당신은 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 계정 이름이 바뀌지 '''않는다'''는 점을 명심해주시기 바랍니다.",
 'movenologin' => '로그인하지 않음',
 'movenologintext' => '문서를 이동하려면 [[Special:UserLogin|로그인]]해야 합니다.',
 'movenotallowed' => '문서를 이동할 권한이 없습니다.',
@@ -2776,7 +2870,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'move-watch' => '문서 주시하기',
 'movepagebtn' => '이동',
 'pagemovedsub' => '문서 이동함',
-'movepage-moved' => "'''‘$1’ 문서를 ‘$2’ 문서로 이동했습니다.'''",
+'movepage-moved' => '\'\'\'"$1" 문서를 "$2" 문서로 이동했습니다.\'\'\'',
 'movepage-moved-redirect' => '넘겨주기 문서를 만들었습니다.',
 'movepage-moved-noredirect' => '넘겨주기 문서를 남기지 않았습니다.',
 'articleexists' => '문서가 이미 존재하거나 이름이 올바르지 않습니다.
@@ -2787,25 +2881,25 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'movetalk' => '딸린 토론도 함께 이동합니다.',
 'move-subpages' => '하위 문서도 함께 ($1개 이하) 이동합니다.',
 'move-talk-subpages' => '토론 문서의 하위 문서도 ($1개까지) 함께 이동합니다.',
-'movepage-page-exists' => '이동할 수 없습니다. ‘$1’ 문서가 이미 존재합니다.',
-'movepage-page-moved' => '‘$1’ 문서를 ‘$2’ 문서로 이동했습니다.',
-'movepage-page-unmoved' => '‘$1’ 문서를 ‘$2’ 문서로 이동할 수 없습니다.',
+'movepage-page-exists' => '이동할 수 없습니다. "$1" 문서가 이미 존재합니다.',
+'movepage-page-moved' => '"$1" 문서를 "$2" 문서로 이동했습니다.',
+'movepage-page-unmoved' => '"$1" 문서를 "$2" 문서로 이동할 수 없습니다.',
 'movepage-max-pages' => '문서를 최대 $1개 이동했습니다. 나머지 문서는 자동 이동하지 않습니다.',
 'movelogpage' => '이동 기록',
-'movelogpagetext' => 'ì\95\84ë\9e\98ë\8a\94 ì\98®ê²¨ì§\84 문서의 목록입니다.',
-'movesubpage' => '{{PLURAL:$1}}하위 문서',
+'movelogpagetext' => 'ì\95\84ë\9e\98ë\8a\94 ì\9d´ë\8f\99í\95\9c 문서의 목록입니다.',
+'movesubpage' => '{{PLURAL:$1|하위 문서}}',
 'movesubpagetext' => '이 문서에는 다음 하위 문서 $1개가 있습니다.',
 'movenosubpage' => '이 문서에는 하위 문서가 존재하지 않습니다.',
 'movereason' => '이유:',
 'revertmove' => '되돌리기',
 'delete_and_move' => '삭제하고 이동',
 'delete_and_move_text' => '== 삭제 필요 ==
-
-이동하려는 제목으로 된 ‘[[:$1]]’ 문서가 이미 존재합니다.
+이동하려는 제목으로 된 "[[:$1]]" 문서가 이미 존재합니다.
 삭제하고 이동할까요?',
 'delete_and_move_confirm' => '네. 문서를 삭제합니다',
 'delete_and_move_reason' => '"[[$1]]"에서 문서를 이동하기 위해 삭제함',
-'selfmove' => '이동하려는 제목이 원래 제목과 같습니다. 이동할 수 없습니다.',
+'selfmove' => '이동하려는 제목이 원래 제목과 같습니다.
+이동할 수 없습니다.',
 'immobile-source-namespace' => '"$1" 이름공간에 속한 문서는 이동시킬 수 없습니다.',
 'immobile-target-namespace' => '"$1" 이름공간에 속한 문서는 이동시킬 수 없습니다.',
 'immobile-target-namespace-iw' => '인터위키 링크를 넘어 문서를 이동할 수 없습니다.',
@@ -2815,13 +2909,13 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'nonfile-cannot-move-to-file' => '파일이 아닌 문서를 파일 이름공간으로 옮길 수 없습니다.',
 'imagetypemismatch' => '새 파일의 확장자가 원래의 확장자와 일치하지 않습니다.',
 'imageinvalidfilename' => '새 파일 이름이 잘못되었습니다.',
-'fix-double-redirects' => '기존 이름을 가리키는 넘겨주기를 갱신',
+'fix-double-redirects' => '기존 이름을 가리키는 넘겨주기를 새로 고침',
 'move-leave-redirect' => '이동 후 넘겨주기를 남기기',
 'protectedpagemovewarning' => "'''경고:''' 이 문서는 관리자만이 이동할 수 있도록 잠겨 있습니다.
-최근의 기록을 참용으로 제공합니다:",
+최근의 기록을 참용으로 제공합니다:",
 'semiprotectedpagemovewarning' => "'''알림:''' 이 문서는 등록된 사용자만이 이동할 수 있도록 잠겨 있습니다.
-ìµ\9cê·¼ ê¸°ë¡\9d ë\82´ì\9a©ì\9d´ ì°¸ì¡°ì\9a©ì\9c¼ë¡\9c ì \9cê³µë\90©ë\8b\88ë\8b¤:",
-'move-over-sharedrepo' => '== í\8c\8cì\9d¼ì\9d´ ì¡´ì\9e¬í\95©ë\8b\88ë\8b¤ ==
+ìµ\9cê·¼ ê¸°ë¡\9d ë\82´ì\9a©ì\9d\84 ì°¸ê³ ì\9a©ë¡\9c ì \9cê³µí\95©ë\8b\88ë\8b¤:",
+'move-over-sharedrepo' => '== í\8c\8cì\9d¼ì\9d´ ì¡´ì\9e¬í\95¨ ==
 [[:$1]] 파일이 공용 저장소에 있습니다. 이 이름으로 파일을 옮기면 공용의 파일을 덮어쓰게 될 것입니다.',
 'file-exists-sharedrepo' => '당신이 선택한 파일 이름은 공용 저장소에서 사용 중입니다.
 다른 이름을 선택해주세요.',
@@ -2832,7 +2926,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 문서를 내보내려면, 내보내려는 문서 제목을 한 줄에 하나씩 입력해주세요. 그리고 문서의 전체 역사가 필요한지, 혹은 현재 버전만이 필요한지를 선택해 주세요.
 
-특정 문서를 내보내려면, 예를 들어 ‘[[{{MediaWiki:Mainpage}}]]’ 문서를 내보내려면 [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] 링크를 사용할 수도 있습니다.',
+특정 문서를 내보내려면, 예를 들어 "[[{{MediaWiki:Mainpage}}]]" 문서를 내보내려면 [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] 링크를 사용할 수도 있습니다.',
 'exportall' => '모든 문서를 내보내기',
 'exportcuronly' => '현재 버전만 포함하고, 전체 역사는 포함하지 않음',
 'exportnohistory' => "----
@@ -2852,8 +2946,9 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'allmessagesname' => '이름',
 'allmessagesdefault' => '기본 내용',
 'allmessagescurrent' => '현재 문자열',
-'allmessagestext' => '미디어위키 이름공간에 있는 모든 시스템 메시지의 목록입니다. 미디어위키의 번역 작업에 관심이 있으면 [//www.mediawiki.org/wiki/Localisation 미디어위키 지역화]나 [//translatewiki.net translatewiki.net]에 참가해주세요.',
-'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''가 해제되어 있어서 이 문서는 쓸 수 없습니다.",
+'allmessagestext' => '미디어위키 이름공간에 있는 모든 시스템 메시지의 목록입니다.
+미디어위키의 번역 작업에 관심이 있으면 [//www.mediawiki.org/wiki/Localisation 미디어위키 지역화]나 [//translatewiki.net translatewiki.net]에 참가해주세요.',
+'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages'''가 비활성화되어 있어서 이 문서를 사용할 수 없습니다.",
 'allmessages-filter-legend' => '필터',
 'allmessages-filter' => '수정 상태로 거르기:',
 'allmessages-filter-unmodified' => '수정되지 않음',
@@ -2869,18 +2964,18 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'thumbnail_error' => '섬네일을 만드는 중 오류 발생: $1',
 'djvu_page_error' => 'DjVu 페이지 범위 벗어남',
 'djvu_no_xml' => 'DjVu 파일의 XML 정보를 읽을 수 없음',
-'thumbnail-temp-create' => '임시 섬네일 파일을 생성할 수 없습니다.',
+'thumbnail-temp-create' => '임시 섬네일 파일을 만들 수 없습니다.',
 'thumbnail-dest-create' => '대상 경로에 섬네일을 저장할 수 없습니다.',
 'thumbnail_invalid_params' => '섬네일 매개변수가 잘못되었습니다.',
-'thumbnail_dest_directory' => '새 목적 디렉토리를 생성할 수 없습니다.',
+'thumbnail_dest_directory' => '새 목적 디렉토리를 만들 수 없습니다.',
 'thumbnail_image-type' => '해당 파일 형식은 지원하지 않습니다',
-'thumbnail_gd-library' => 'GD 라이브러리 설정이 잘못되었습니다. $1 함수를 찾을 수 없습니다.',
+'thumbnail_gd-library' => 'GD 라이브러리 설정이 잘못되었습니다: $1 함수를 찾을 수 없습니다.',
 'thumbnail_image-missing' => '파일을 찾을 수 없습니다: $1',
 
 # Special:Import
 'import' => '문서 가져오기',
 'importinterwiki' => '다른 위키에서 문서 가져오기',
-'import-interwiki-text' => '문서를 가져올 위키를 선택하고, 문서 제목을 입력해주세요.
+'import-interwiki-text' => '문서를 가져올 위키를 선택하고 문서 제목을 입력해주세요.
 편집 날짜와 편집자의 이름이 보존될 것입니다.
 모든 가져오기는 [[Special:Log/import|가져오기 기록]]에 기록될 것입니다.',
 'import-interwiki-source' => '원본 위키/문서:',
@@ -2890,12 +2985,12 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'import-interwiki-namespace' => '새 이름공간:',
 'import-upload-filename' => '파일 이름:',
 'import-comment' => '이유:',
-'importtext' => 'ì\9b\90본 ì\9c\84í\82¤ì\97\90ì\84\9c [[Special:Export|ë\82´ë³´ë\82´ê¸°]] ê¸°ë\8a¥ì\9d\84 ì\82¬ì\9a©í\95´ í\8c\8cì\9d¼ì\9d\84 ë\82´ë ¤ë°\9bì\9c¼ì\8b­ì\8b\9cì\98¤.
+'importtext' => 'ì\9b\90본 ì\9c\84í\82¤ì\97\90ì\84\9c [[Special:Export|ë\82´ë³´ë\82´ê¸°]] ê¸°ë\8a¥ì\9d\84 ì\82¬ì\9a©í\95´ í\8c\8cì\9d¼ì\9d\84 ë\82´ë ¤ë°\9bì\9c¼ì\84¸ì\9a\94.
 그리고 당신의 컴퓨터에 저장해 둔 후 여기에 올려주세요.',
 'importstart' => '문서를 가져오는 중...',
 'import-revision-count' => '판 $1개',
 'importnopages' => '가져올 문서가 없습니다.',
-'imported-log-entries' => '로그 항목 $1개를 가져왔습니다.',
+'imported-log-entries' => '기록 항목 $1개를 가져왔습니다.',
 'importfailed' => '가져오기 실패: <nowiki>$1</nowiki>',
 'importunknownsource' => '알 수 없는 가져오기 자료 유형',
 'importcantopen' => '파일을 열 수 없습니다.',
@@ -2903,12 +2998,12 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'importnotext' => '내용이 없습니다.',
 'importsuccess' => '가져오기 완료!',
 'importhistoryconflict' => '문서 역사가 충돌하는 판이 있습니다. (이전에 이 문서를 가져온 적이 있을 수도 있습니다)',
-'importnosources' => '문서를 가져올 출처가 정의되지 않았고, 문서 역사 올리기가 비활성화되었습니다.',
-'importnofile' => 'ê°\80ì ¸ì\98¤ê¸°ì\9a© í\8c\8cì\9d¼ì\9d´ ì\97\85ë¡\9cë\93\9cë\90\98지 않았습니다.',
+'importnosources' => '문서를 가져올 출처가 정의되지 않았고 문서 역사 올리기가 비활성화되었습니다.',
+'importnofile' => 'ê°\80ì ¸ì\98¤ê¸°ì\9a© í\8c\8cì\9d¼ì\9d´ ì\98¬ë ¤ì§\80지 않았습니다.',
 'importuploaderrorsize' => '파일 올리기를 통한 가져오기에 실패했습니다.
 파일이 허용된 크기 제한보다 큽니다.',
 'importuploaderrorpartial' => '가져오기 파일을 올리는 데 실패하였습니다.
\8c\8cì\9d¼ì\9d´ ë¶\80ë¶\84ì \81ì\9c¼ë¡\9cë§\8c ì\97\85ë¡\9cë\93\9cë\90\98ì\97\88습니다.',
\8c\8cì\9d¼ì\9d´ ë¶\80ë¶\84ì \81ì\9c¼ë¡\9cë§\8c ì\98¬ë ¤ì¡\8c습니다.',
 'importuploaderrortemp' => '가져오기 파일을 올리는 데 실패했습니다.
 임시 폴더가 존재하지 않습니다.',
 'import-parse-failure' => 'XML 문서 분석 실패',
@@ -2916,10 +3011,11 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'import-nonewrevisions' => '이전에 이미 모든 판을 가져왔습니다.',
 'xml-error-string' => '$3단 $2줄 (바이트 $4)에서 $1: $5',
 'import-upload' => 'XML 데이터 올리기',
-'import-token-mismatch' => '세션 데이터가 손실되었습니다. 다시 시도해주세요.',
+'import-token-mismatch' => '세션 데이터가 손실되었습니다.
+다시 시도하세요.',
 'import-invalid-interwiki' => '해당 위키에서 문서를 가져올 수 없습니다.',
-'import-error-edit' => '현재 문서를 편집할 권한이 없기 때문에 ‘$1’ 문서를 불러올 수 없습니다.',
-'import-error-create' => '현재 문서를 생성할 권한이 없기 때문에 ‘$1’ 문서를 불러올 수 없습니다.',
+'import-error-edit' => '현재 문서를 편집할 권한이 없기 때문에 "$1" 문서를 불러올 수 없습니다.',
+'import-error-create' => '현재 문서를 만들 권한이 없기 때문에 "$1" 문서를 불러올 수 없습니다.',
 'import-error-interwiki' => '문서 "$1"은 제목이 바깥 고리(인터위키)용으로 할당되어 있기 때문에 가져오지 않습니다.',
 'import-error-special' => '문서 "$1"은 특수 문서에 속해 있기 때문에 가져오지 않습니다.',
 'import-error-invalid' => '문서 "$1"은 제목이 잘못되었기 때문에 가져오지 않습니다.',
@@ -2927,7 +3023,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 # Import log
 'importlogpage' => '가져오기 기록',
 'importlogpagetext' => '다른 위키에서 가져온 문서 기록입니다.',
-'import-logentry-upload' => ' 사용자가 파일 올리기를 통해 [[$1]] 문서를 가져왔습니다.',
+'import-logentry-upload' => '사용자가 파일 올리기를 통해 [[$1]] 문서를 가져왔습니다.',
 'import-logentry-upload-detail' => '판 $1개',
 'import-logentry-interwiki' => '$1 문서를 다른 위키에서 가져왔습니다.',
 'import-logentry-interwiki-detail' => '$2에서 판 $1개를 가져옴',
@@ -2938,9 +3034,9 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'javascripttest-title' => '$1 테스트 실행',
 'javascripttest-pagetext-noframework' => '이 페이지는 자바스크립트 테스트를 실행하기 위한 용도로 할당되어 있습니다.',
 'javascripttest-pagetext-unknownframework' => '실험용 프레임워크 "$1"를 알 수 없습니다.',
-'javascripttest-pagetext-frameworks' => 'ë\8b¤ì\9d\8c ì\8b¤í\97\98ì\9a© í\94\84ë \88ì\9e\84ì\9b\8cí\81¬ ì¤\91 í\95\98ë\82\98를 ì\84 í\83\9dí\95\98ì\8b­ì\8b\9cì\98¤: $1',
-'javascripttest-pagetext-skins' => '실험할 스킨을 고르십시오:',
-'javascripttest-qunit-intro' => 'mediawiki.orgì\9d\98 [$1 í\85\8cì\8a¤í\8a¸ ì\84¤ëª\85ì\84\9c]를 ì°¸ê³ í\95\98ì\8b­ì\8b\9cì\98¤.',
+'javascripttest-pagetext-frameworks' => 'ë\8b¤ì\9d\8c ì\8b¤í\97\98ì\9a© í\94\84ë \88ì\9e\84ì\9b\8cí\81¬ ì¤\91 í\95\98ë\82\98를 ì\84 í\83\9dí\95\98ì\84¸ì\9a\94: $1',
+'javascripttest-pagetext-skins' => '실험할 스킨을 선택하세요:',
+'javascripttest-qunit-intro' => 'mediawiki.orgì\9d\98 [$1 í\85\8cì\8a¤í\8a¸ ì\84¤ëª\85ì\84\9c]를 ì°¸ê³ í\95\98ì\84¸ì\9a\94.',
 'javascripttest-qunit-heading' => '미디어위키 자바스크립트 QUnit 실험군',
 
 # Tooltip help for the actions
@@ -2949,7 +3045,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-pt-mytalk' => '내 토론 문서',
 'tooltip-pt-anontalk' => '현재 사용하는 IP를 위한 사용자 토론 문서',
 'tooltip-pt-preferences' => '사용자 환경 설정',
-'tooltip-pt-watchlist' => '주시문서 목록',
+'tooltip-pt-watchlist' => '주시문서에 대한 바뀜 목록',
 'tooltip-pt-mycontris' => '내가 편집한 글',
 'tooltip-pt-login' => '꼭 로그인해야 하는 것은 아니지만, 로그인을 권장합니다.',
 'tooltip-pt-anonlogin' => '꼭 필요한 것은 아니지만, 로그인을 하면 편리한 점이 많습니다.',
@@ -2957,28 +3053,29 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-ca-talk' => '문서의 내용에 대한 토론 문서',
 'tooltip-ca-edit' => '문서를 편집할 수 있습니다. 저장하기 전에 미리보기를 해 주세요.',
 'tooltip-ca-addsection' => '문단 추가하기',
-'tooltip-ca-viewsource' => '문서가 잠겨 있습니다. 문서의 소스만 볼 수 있습니다.',
-'tooltip-ca-history' => '문서의 과거 버전들',
+'tooltip-ca-viewsource' => '문서가 잠겨 있습니다.
+문서의 내용만 볼 수 있습니다.',
+'tooltip-ca-history' => '문서의 과거 판',
 'tooltip-ca-protect' => '문서 보호하기',
-'tooltip-ca-unprotect' => 'ì\9d´ ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë³\80ê²½í\95\98기',
+'tooltip-ca-unprotect' => 'ì\9d´ ë¬¸ì\84\9cì\9d\98 ë³´í\98¸ ì\84¤ì \95ì\9d\84 ë°\94꾸기',
 'tooltip-ca-delete' => '문서 삭제하기',
-'tooltip-ca-undelete' => 'ì\82­ì \9cë\90\9c ë¬¸ì\84\9c 복구하기',
+'tooltip-ca-undelete' => 'ì\82­ì \9cë\90\98기 ì \84ì\97\90 ì\9d´ ë¬¸ì\84\9cì\9d\98 ì\99\84ë£\8cí\95\9c í\8e¸ì§\91 복구하기',
 'tooltip-ca-move' => '문서 이동하기',
 'tooltip-ca-watch' => '이 문서를 주시문서 목록에 추가합니다.',
 'tooltip-ca-unwatch' => '이 문서를 주시문서 목록에서 제거합니다.',
 'tooltip-search' => '{{SITENAME}} 찾기',
-'tooltip-search-go' => '이 이름의 문서가 존재하면 그 문서로 바로가기',
+'tooltip-search-go' => '이 이름의 문서가 존재하면 그 문서로 바로 가기',
 'tooltip-search-fulltext' => '이 문자열이 포함된 문서 찾기',
 'tooltip-p-logo' => '대문 방문하기',
 'tooltip-n-mainpage' => '대문으로',
 'tooltip-n-mainpage-description' => '대문으로',
-'tooltip-n-portal' => '프로젝트 소개, 당신이 할 수 있는 것, 사이트맵',
-'tooltip-n-currentevents' => '최근의 소식을 봅니다.',
+'tooltip-n-portal' => '프로젝트 소개, 여러분이 할 수 있는 것, 무언가를 찾는 곳',
+'tooltip-n-currentevents' => '최근의 소식을 봅니다',
 'tooltip-n-recentchanges' => '이 위키에서 최근 바뀐 내용의 목록',
-'tooltip-n-randompage' => '임의 문서로 갑니다.',
+'tooltip-n-randompage' => '임의 문서로 갑니다',
 'tooltip-n-help' => '도움말',
 'tooltip-t-whatlinkshere' => '여기로 연결된 모든 문서의 목록',
-'tooltip-t-recentchangeslinked' => 'ì\97¬ê¸°ë¡\9c ì\97°ê²°ë\90\9c ëª¨ë\93  ë¬¸ì\84\9cì\9d\98 ë³\80ê²½ 내역',
+'tooltip-t-recentchangeslinked' => 'ì\97¬ê¸°ë¡\9c ì\97°ê²°ë\90\9c ëª¨ë\93  ë¬¸ì\84\9cì\9d\98 ë°\94ë\80\9c 내역',
 'tooltip-feed-rss' => '이 문서의 RSS 피드입니다.',
 'tooltip-feed-atom' => '이 문서의 Atom 피드입니다.',
 'tooltip-t-contributions' => '이 사용자의 기여 목록을 봅니다.',
@@ -2986,7 +3083,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-t-upload' => '파일을 올립니다.',
 'tooltip-t-specialpages' => '모든 특수 문서의 목록',
 'tooltip-t-print' => '이 문서의 인쇄용 버전',
-'tooltip-t-permalink' => '이 개정판에 대한 고유링크',
+'tooltip-t-permalink' => '이 판에 대한 고유링크',
 'tooltip-ca-nstab-main' => '문서 내용을 봅니다.',
 'tooltip-ca-nstab-user' => '사용자 문서 내용을 봅니다.',
 'tooltip-ca-nstab-media' => '미디어 문서 내용을 봅니다.',
@@ -2999,17 +3096,16 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-ca-nstab-category' => '분류 문서 내용을 봅니다.',
 'tooltip-minoredit' => '사소한 편집으로 표시하기',
 'tooltip-save' => '편집 내용을 저장하기',
-'tooltip-preview' => '편집 미리 보기. 저장하기 전에 꼭 미리 보기를 해 주세요.',
-'tooltip-diff' => 'ì\9e\90ì\8b ì\9d´ ë³\80ê²½í\95\9c 것 보기',
-'tooltip-compareselectedversions' => '이 문서에서 선택한 두 버전간의 차이를 비교',
+'tooltip-preview' => '편집 미리 보기. 저장하기 전에 꼭 미리 보기를 해 주세요!',
+'tooltip-diff' => 'ì\9e\90ì\8b ì\9d´ ë°\94ê¾¼ 것 보기',
+'tooltip-compareselectedversions' => '이 문서에서 선택한 두 간의 차이를 비교',
 'tooltip-watch' => '이 문서를 주시문서 목록에 추가',
 'tooltip-watchlistedit-normal-submit' => '항목 제거하기',
-'tooltip-watchlistedit-raw-submit' => '주시문서 목록 갱신하기',
+'tooltip-watchlistedit-raw-submit' => '주시문서 목록 새로 고침',
 'tooltip-recreate' => '문서를 편집하는 중 삭제되어도 새로 만들기',
 'tooltip-upload' => '파일 올리기 시작',
 'tooltip-rollback' => '"되돌리기" 기능을 사용하면 이 문서에 대한 마지막 기여자의 편집을 모두 되돌릴 수 있습니다.',
-'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고, 차이보기 기능이 미리보기 형식으로 나타납니다.
-편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
+'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고, 차이보기 기능이 미리보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
 'tooltip-preferences-save' => '환경 설정 저장하기',
 'tooltip-summary' => '짧은 편집 요약을 적어주세요',
 
@@ -3024,7 +3120,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'simple.css' => '/* 이 CSS 설정은 모든 심플 스킨에 적용됩니다 */',
 'modern.css' => '/* 이 CSS 설정은 모든 모던 스킨에 적용됩니다 */',
 'vector.css' => '/* 이 CSS 설정은 모든 벡터 스킨에 적용됩니다 */',
-'print.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ì\9cë ¥/ì\9d¸ì\87\84 화면에 적용됩니다 */',
+'print.css' => '/* ì\9d´ CSS ì\84¤ì \95ì\9d\80 ì\9d¸ì\87\84 ì¶\9cë ¥ 화면에 적용됩니다 */',
 'handheld.css' => '/* 이 CSS 설정은 $wgHandheldStyle에 설정한 스킨을 기반으로 한 휴대 기기에 적용됩니다 */',
 'noscript.css' => '/* 이 CSS 설정은 자바스크립트를 비활성화한 사용자에 적용됩니다 */',
 'group-autoconfirmed.css' => '/* 이 CSS 설정은 자동 인증된 사용자에만 적용됩니다 */',
@@ -3052,15 +3148,15 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'notacceptable' => '클라이언트에서 인식 가능한 출력 포맷이 없습니다.',
 
 # Attribution
-'anonymous' => '{{PLURAL:$1}}{{SITENAME}} 익명 사용자',
+'anonymous' => '{{SITENAME}} 익명 {{PLURAL:$1|사용자}}',
 'siteuser' => '{{SITENAME}} 사용자 $1',
 'anonuser' => '{{SITENAME}} 익명 사용자 $1',
 'lastmodifiedatby' => '이 문서는 $3 사용자가 $1 $2에 마지막으로 바꾸었습니다.',
-'othercontribs' => '$1ì\9d\98 ì\9e\91ì\97\85ì\9d\84 ë°\94í\83\95ì\9c¼ë¡\9c í\95¨.',
+'othercontribs' => '$1ì\9d\98 ì\9e\91ì\97\85ì\9d\84 ë°\94í\83\95ì\9c¼ë¡\9c í\95©ë\8b\88ë\8b¤.',
 'others' => '기타',
-'siteusers' => '{{PLURAL:$2}}{{SITENAME}} 사용자 $1',
-'anonusers' => '{{PLURAL:$2}}{{SITENAME}} 익명 사용자 $1',
-'creditspage' => '문서 기여자',
+'siteusers' => '{{SITENAME}} {{PLURAL:$2|사용자}} $1',
+'anonusers' => '{{SITENAME}} 익명 {{PLURAL:$2|사용자}} $1',
+'creditspage' => '문서 기여자',
 'nocredits' => '이 문서에서는 기여자 정보가 없습니다.',
 
 # Spam protection
@@ -3114,22 +3210,23 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'log-show-hide-patrol' => '검토 기록을 $1',
 
 # Image deletion
-'deletedrevision' => '예전 버전 $1이(가) 삭제되었습니다.',
+'deletedrevision' => '예전 $1 판이 삭제되었습니다.',
 'filedeleteerror-short' => '파일 삭제 오류: $1',
 'filedeleteerror-long' => '파일을 삭제하는 도중 오류가 발생했습니다:
 
 $1',
-'filedelete-missing' => '‘$1’ 파일을 삭제할 수 없습니다. 파일이 존재하지 않습니다.',
-'filedelete-old-unregistered' => '입력한 파일의 "$1" 버전이 데이터베이스에 존재하지 않습니다.',
+'filedelete-missing' => '"$1" 파일을 삭제할 수 없습니다. 파일이 존재하지 않습니다.',
+'filedelete-old-unregistered' => '입력한 파일의 "$1" 이 데이터베이스에 존재하지 않습니다.',
 'filedelete-current-unregistered' => '"$1" 이라는 이름을 가진 파일이 데이터베이스에 존재하지 않습니다.',
-'filedelete-archive-read-only' => '웹 서버의 파일 저장 위치 ‘$1’에 쓰기 권한이 없습니다.',
+'filedelete-archive-read-only' => '웹 서버의 "$1" 파일 저장 위치에 쓰기 권한이 없습니다.',
 
 # Browsing diffs
 'previousdiff' => '← 이전 편집',
 'nextdiff' => '다음 편집 →',
 
 # Media information
-'mediawarning' => "'''경고''': 이 파일에 악성 코드가 포함되어 있을 수 있습니다. 파일을 실행하면 컴퓨터에 문제가 생길 가능성이 있습니다.",
+'mediawarning' => "'''경고''': 이 파일에 악성 코드가 포함되어 있을 수 있습니다.
+파일을 실행하면 컴퓨터에 문제가 생길 가능성이 있습니다.",
 'imagemaxsize' => "그림 최대 크기:<br />''(파일 문서에 적용되는 기능)''",
 'thumbsize' => '섬네일 크기:',
 'widthheightpage' => '$1 × $2, $3페이지',
@@ -3137,7 +3234,7 @@ $1',
 'file-info-size' => '$1 × $2 픽셀, 파일 크기: $3, MIME 종류: $4',
 'file-info-size-pages' => '$1 × $2 픽셀, 파일 크기: $3, MIME 형식: $4, $5{{PLURAL:$5|쪽}}',
 'file-nohires' => '최대 해상도입니다.',
-'svg-long-desc' => 'SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기 $3',
+'svg-long-desc' => 'SVG 파일, 실제 크기 $1 × $2 픽셀, 파일 크기: $3',
 'show-big-image' => '최대 해상도',
 'show-big-image-preview' => '미리 보기 크기: $1.',
 'show-big-image-other' => '다른 {{PLURAL:$2|해상도}}: $1.',
@@ -3185,7 +3282,8 @@ Variants for Chinese language
 
 # Metadata
 'metadata' => '메타데이터',
-'metadata-help' => '이 파일은 카메라/스캐너에서 기록한 부가 정보를 가지고 있습니다. 프로그램에서 파일을 편집할 경우, 새로 저장한 그림 파일에 일부 부가 정보가 빠질 수 있습니다.',
+'metadata-help' => '이 파일은 카메라나 스캐너에서 기록한 부가 정보를 가지고 있습니다.
+프로그램에서 파일을 편집할 경우, 새로 저장한 그림 파일에 일부 부가 정보가 빠질 수 있습니다.',
 'metadata-expand' => '자세한 정보 보이기',
 'metadata-collapse' => '자세한 정보 숨기기',
 'metadata-fields' => '파일 메타데이터 표가 접혀 있을 때, 이 메시지에 올라와 있는 다음 속성값만이 기본적으로 보이게 됩니다.
@@ -3226,7 +3324,7 @@ Variants for Chinese language
 'exif-primarychromaticities' => '색도의 우선 색',
 'exif-ycbcrcoefficients' => '색 공간 변환 표 계수',
 'exif-referenceblackwhite' => '흑백 값에 대한 정보',
-'exif-datetime' => 'í\8c\8cì\9d¼ì\9d´ ë³\80ê²½ë\90\9c 날짜와 시간',
+'exif-datetime' => 'í\8c\8cì\9d¼ì\9d´ ë°\94ë\80\90 날짜와 시간',
 'exif-imagedescription' => '그림 제목',
 'exif-make' => '카메라 제조사',
 'exif-model' => '카메라 모델',
@@ -3334,7 +3432,7 @@ Variants for Chinese language
 'exif-objectname' => '짧은 제목',
 'exif-specialinstructions' => '사진 이용에 대한 특이 사항',
 'exif-headline' => '표제어',
-'exif-credit' => '제공자',
+'exif-credit' => '기여자/제공자',
 'exif-source' => '출처',
 'exif-editstatus' => '그림의 편집/구성',
 'exif-urgency' => '긴급',
@@ -3373,7 +3471,7 @@ Variants for Chinese language
 'exif-disclaimer' => '면책 조항',
 'exif-contentwarning' => '콘텐츠 경고',
 'exif-giffilecomment' => 'GIF 파일 주석',
-'exif-intellectualgenre' => '콘텐츠 정보',
+'exif-intellectualgenre' => '항목 종류',
 'exif-subjectnewscode' => '주제 코드',
 'exif-scenecode' => 'IPTC 장면 코드',
 'exif-event' => '묘사된 사건',
@@ -3388,9 +3486,9 @@ Variants for Chinese language
 'exif-compression-3' => 'CCITT 그룹-3 팩스 인코딩',
 'exif-compression-4' => 'CCITT 그룹-4 팩스 인코딩',
 'exif-compression-6' => 'JPEG (오래됨)',
-'exif-compression-8' => 'ì\95\95축 (Adobe)',
+'exif-compression-8' => 'ì\88\98축 (Adobe)',
 'exif-compression-32773' => 'PackBits (매킨토시 RLE)',
-'exif-compression-32946' => 'ì\95\95축 (PKZIP)',
+'exif-compression-32946' => 'ì\88\98축 (PKZIP)',
 
 'exif-copyrighted-true' => '저작권의 보호를 받음',
 'exif-copyrighted-false' => '퍼블릭 도메인',
@@ -3599,7 +3697,7 @@ Variants for Chinese language
 
 # External editor support
 'edit-externally' => '이 파일을 외부 프로그램을 사용해서 편집하기',
-'edit-externally-help' => '(ì\9e\90ì\84¸í\95\9c ì \95ë³´ë\8a\94 [//www.mediawiki.org/wiki/Manual:External_editors ì\84¤ì¹\98 ë°©ë²\95\9d\84 ì°¸ê³ í\95\98ì\8b­ì\8b\9cì\98¤)',
+'edit-externally-help' => '(ì\9e\90ì\84¸í\95\9c ì \95ë³´ë\8a\94 [//www.mediawiki.org/wiki/Manual:External_editors ì\84¤ì¹\98 ë°©ë²\95\9d\84 ì°¸ê³ í\95\98ì\84¸ì\9a\94)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => '모든 기간',
@@ -3614,53 +3712,66 @@ Variants for Chinese language
 아래의 버튼을 누르면 인증 메일을 보냅니다.
 메일에는 인증 코드가 들어있는 링크가 있습니다.
 그 링크를 웹 브라우저로 열면 인증이 완료됩니다.',
-'confirmemail_pending' => '이미 확인 이메일을 보냈습니다. 계정을 최근에 만들었다면 이메일을 보내는 데에 몇 분이 걸릴 수 있으므로 잠시 후에 다시 확인해 주세요.',
+'confirmemail_pending' => '이미 확인 이메일을 보냈습니다.
+계정을 최근에 만들었다면 이메일을 보내는 데에 몇 분이 걸릴 수 있으므로 잠시 후에 다시 확인해 주세요.',
 'confirmemail_send' => '인증 코드를 메일로 보내기',
 'confirmemail_sent' => '인증 이메일을 보냈습니다.',
-'confirmemail_oncreate' => '확인 이메일을 보냈습니다. 이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키 프로그램에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
+'confirmemail_oncreate' => '확인 이메일을 보냈습니다.
+이 확인 과정은 로그인하는 데에 필요하지는 않지만, 위키 프로그램에서 제공하는 이메일 기능을 사용하기 위해서 필요합니다.',
 'confirmemail_sendfailed' => '{{SITENAME}}에서 인증 이메일을 보낼 수 없습니다.
 이메일 주소를 잘못 입력했는지 확인해주세요.
 
 메일 서버로부터의 응답: $1',
-'confirmemail_invalid' => '인증 코드가 올바르지 않습니다. 인증 코드가 만료되었을 수도 있습니다.',
+'confirmemail_invalid' => '인증 코드가 올바르지 않습니다.
+인증 코드가 만료되었을 수도 있습니다.',
 'confirmemail_needlogin' => '이메일 주소를 인증하려면 $1이 필요합니다.',
-'confirmemail_success' => '이메일 주소가 인증되었습니다. 이제 로그인해서 위키를 사용하세요.',
+'confirmemail_success' => '이메일 주소가 인증되었습니다.
+이제 [[Special:UserLogin|로그인]]해서 위키를 사용하세요.',
 'confirmemail_loggedin' => '이메일 주소가 인증되었습니다.',
 'confirmemail_error' => '당신의 인증을 저장하는 도중 오류가 발생했습니다.',
 'confirmemail_subject' => '{{SITENAME}} 이메일 주소 인증',
-'confirmemail_body' => '$1 아이피 주소를 사용하는 사용자가 {{SITENAME}}의 ‘$2’ 계정에 이메일 인증 신청을 했습니다.
+'confirmemail_body' => '$1 IP 주소를 사용하는 사용자가
+{{SITENAME}}의 "$2" 계정에 이메일 인증 신청을 했습니다.
 
-이 계정이 당신의 계정이라면, 아래 주소를 열어서 이메일 인증을 해 주세요.
+이 계정이 당신의 계정이고 {{SITENAME}}에서 이메일 기능을 활성화하려면
+아래 주소를 열어서 이메일 인증을 해 주세요:
 
 $3
 
-당신의 계정이 아니라면, 이메일 인증 신청을 취소하기 위해 아래의 주소를 열어주세요.
+당신의 계정이 아니라면,
+이메일 인증 신청을 취소하기 위해 아래의 주소를 열어주세요:
 
 $5
 
 인증 코드는 $4에 만료됩니다.',
-'confirmemail_body_changed' => '$1 IP 주소를 사용하는 사용자가 {{SITENAME}}의 "$2" 계정의 이메일 주소를 바꾸었습니다.
+'confirmemail_body_changed' => '$1 IP 주소를 사용하는 사용자가
+{{SITENAME}}의 "$2" 계정의 이메일 주소를 바꾸었습니다.
 
-이 계정이 당신의 계정인지 확인하고 {{SITENAME}}의 이메일 기능을 활성화하려면 아래 링크를 클릭하여 이메일 인증을 해 주세요.
+이 계정이 당신의 계정이고 {{SITENAME}}에서 이메일 기능을 활성화하려면
+아래 주소를 열어서 이메일 인증을 해 주세요:
 
 $3
 
-이 계정이 당신의 것이 아니라면 다음 링크를 열어 이메일 주소 변경을 취소하십시오.
+당신의 계정이 아니라면,
+이메일 인증 신청을 취소하기 위해 아래의 주소를 열어주세요:
 
 $5
 
 인증 코드는 $4에 만료됩니다.',
-'confirmemail_body_set' => 'IP 주소 $1을 사용하는 누군가가 {{SITENAME}}의 "$2" 계정의 이메일 주소를 지정하였습니다.
+'confirmemail_body_set' => 'IP 주소 $1을 사용하는 사용자가
+{{SITENAME}}의 "$2" 계정의 이메일 주소를 지정하였습니다.
 
-이 계정이 당신의 것이며 {{SITENAME}}에서 이메일 기능을 다시 활성화하려면 이 링크를 열어 주십시오:
+이 계정이 당신의 계정이고 {{SITENAME}}에서 이메일 기능을
+다시 활성화하려면 아래 주소를 열어서 이메일 인증을 해 주세요:
 
 $3
 
-만약 이 계정이 당신의 것이 아니라면 다음 링크를 클릭해 이메일 주소 인증을 취소하십시오:
+당신의 계정이 아니라면,
+이메일 인증 신청을 취소하기 위해 아래의 주소를 열어주세요:
 
 $5
 
\9d´ ì\9d¸ì¦\9d ì½\94ë\93\9cë\8a\94 $4ì\97\90 ë§\8cë£\8cë\90©ë\8b\88ë\8b¤.',
+인증 코드는 $4에 만료됩니다.',
 'confirmemail_invalidated' => '이메일 확인이 취소됨',
 'invalidateemail' => '이메일 확인 취소',
 
@@ -3670,17 +3781,17 @@ $5
 'scarytranscludetoolong' => '[URL이 너무 깁니다]',
 
 # Delete conflict
-'deletedwhileediting' => "'''주의''': 당신이 이 문서를 편집하던 중에 이 문서가 삭제되었습니다.",
+'deletedwhileediting' => "'''주의''': 당신이 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
 'confirmrecreate' => '[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 삭제했습니다. 삭제 이유는 다음과 같습니다:
 : $2
-문서를 다시 ì\83\9dì\84±í\95´ì\95¼ í\95\98ë\8a\94ì§\80 í\99\95ì\9d¸í\95´ì£¼ì\84¸ì\9a\94.',
-'confirmrecreate-noreason' => '[[User:$1|$1]] ì\82¬ì\9a©ì\9e\90([[User talk:$1|í\86 ë¡ ]])ê°\80 ë\8b¹ì\8b ì\9d\98 í\8e¸ì§\91 ë\8f\84ì¤\91 ë¬¸ì\84\9c를 ì\82­ì \9cí\96\88ì\8aµë\8b\88ë\8b¤. ë¬¸ì\84\9c를 ë\8b¤ì\8b\9c ì\83\9dì\84±í\95´ì\95¼ í\95\98ë\8a\94ì§\80 í\99\95ì\9d¸í\95´ì£¼ì\84¸ì\9a\94.',
+문서를 다시 ë§\8cë\93¤ì\96´ì\95¼ í\95\98ë\8a\94ì§\80 í\99\95ì\9d¸í\95´ì£¼ì\84¸ì\9a\94.',
+'confirmrecreate-noreason' => '[[User:$1|$1]] ì\82¬ì\9a©ì\9e\90([[User talk:$1|í\86 ë¡ ]])ê°\80 ë\8b¹ì\8b ì\9d´ í\8e¸ì§\91í\95\98ë\8a\94 ë\8f\84ì¤\91ì\97\90 ë¬¸ì\84\9c를 ì\82­ì \9cí\96\88ì\8aµë\8b\88ë\8b¤. ë¬¸ì\84\9c를 ë\8b¤ì\8b\9c ë§\8cë\93¤ì\96´ì\95¼ í\95\98ë\8a\94ì§\80 í\99\95ì\9d¸í\95´ì£¼ì\84¸ì\9a\94.',
 'recreate' => '새로 만들기',
 
 # action=purge
 'confirm_purge_button' => '확인',
 'confirm-purge-top' => '문서의 캐시를 지울까요?',
-'confirm-purge-bottom' => '문서를 새로고침하는 것은 캐시를 갱신하고 가장 최근의 버전이 나타나게 할 것입니다.',
+'confirm-purge-bottom' => '문서를 새로 고침하는 것은 캐시를 새로 고치고 가장 최근의 판이 나타나게 할 것입니다.',
 
 # action=watch/unwatch
 'confirm-watch-button' => '확인',
@@ -3691,7 +3802,7 @@ $5
 # Multipage image navigation
 'imgmultipageprev' => '← 이전 페이지',
 'imgmultipagenext' => '다음 페이지 →',
-'imgmultigo' => '이동',
+'imgmultigo' => '이동!',
 'imgmultigoto' => '$1 페이지로 가기',
 
 # Table pager
@@ -3702,32 +3813,33 @@ $5
 'table_pager_first' => '처음 문서',
 'table_pager_last' => '마지막 문서',
 'table_pager_limit' => '문서당 $1개 항목 보이기',
-'table_pager_limit_label' => '페이지당 항목 수:',
+'table_pager_limit_label' => '문서당 항목 수:',
 'table_pager_limit_submit' => '확인',
 'table_pager_empty' => '결과 없음',
 
 # Auto-summaries
 'autosumm-blank' => '문서를 비움',
-'autosumm-replace' => '문서 내용을 ‘$1’으로 바꿈',
+'autosumm-replace' => '문서 내용을 "$1"으로 바꿈',
 'autoredircomment' => '[[$1]] 문서로 넘겨주기',
 'autosumm-new' => '새 문서: $1',
 
 # Live preview
 'livepreview-loading' => '불러오는 중...',
-'livepreview-ready' => '불러 오는 중… 준비!',
-'livepreview-failed' => '실시간 미리 보기 실패! 일반 미리 보기를 이용해주세요.',
+'livepreview-ready' => '불러 오는 중... 준비!',
+'livepreview-failed' => '실시간 미리 보기 실패!
+일반 미리 보기를 이용하세요.',
 'livepreview-error' => '연결에 실패하였습니다: $1 "$2"
-일반 미리보기를 이용하십시오.',
+일반 미리 보기를 이용하세요.',
 
 # Friendlier slave lag warnings
 'lag-warn-normal' => '최근 $1초 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.',
-'lag-warn-high' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ì\9d\98 ê³¼ë\8f\84í\95\9c ë¶\80í\95\98 ë\95\8c문ì\97\90 ìµ\9cê·¼ $1ì´\88 ì\95\88ì\97\90 ë³\80ê²½ë\90\9c 문서 목록은 표시되지 않을 수 있습니다.',
+'lag-warn-high' => 'ë\8d°ì\9d´í\84°ë² ì\9d´ì\8a¤ ì\84\9cë²\84ì\9d\98 ê³¼ë\8f\84í\95\9c ë¶\80í\95\98 ë\95\8c문ì\97\90 ìµ\9cê·¼ $1ì´\88 ì\95\88ì\97\90 ë°\94ë\80\90 문서 목록은 표시되지 않을 수 있습니다.',
 
 # Watchlist editor
 'watchlistedit-numitems' => '토론 문서를 제외하고 문서 $1개를 주시하고 있습니다.',
 'watchlistedit-noitems' => '주시문서 목록이 비어 있습니다.',
 'watchlistedit-normal-title' => '주시문서 목록 편집하기',
-'watchlistedit-normal-legend' => '주시목록에서 문서 제거하기',
+'watchlistedit-normal-legend' => '주ì\8b\9c문ì\84\9c ëª©ë¡\9dì\97\90ì\84\9c ë¬¸ì\84\9c ì \9cê±°í\95\98기',
 'watchlistedit-normal-explain' => "주시문서 목록에 있는 문서의 제목이 아래에 나열되어 있습니다.
 주시문서 목록에서 제거하려는 문서가 있으면, 각 항목의 체크박스를 선택한 다음 '{{int:Watchlistedit-normal-submit}}'를 클릭해주세요.
 또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.",
@@ -3736,11 +3848,12 @@ $5
 'watchlistedit-raw-title' => '주시문서 목록 직접 편집하기',
 'watchlistedit-raw-legend' => '주시문서 목록 직접 편집하기',
 'watchlistedit-raw-explain' => "주시문서 목록의 각 항목이 나와 있습니다. 필요한 항목을 직접 추가하거나 제거할 수 있습니다.
-각 줄마다 하나의 제목을 쓰고, 수정을 마쳤다면 '{{int:Watchlistedit-raw-submit}}'을 누르면 됩니다.
+각 줄마다 하나의 제목을 입력하세요.
+수정을 마쳤다면 '{{int:Watchlistedit-raw-submit}}'을 누르면 됩니다.
 또는 [[Special:EditWatchlist|일반적인 편집기]]를 쓸 수도 있습니다.",
 'watchlistedit-raw-titles' => '목록:',
-'watchlistedit-raw-submit' => '주시문서 목록 갱신',
-'watchlistedit-raw-done' => '주시문서 목록을 갱신했습니다.',
+'watchlistedit-raw-submit' => '주시문서 목록 새로 고침',
+'watchlistedit-raw-done' => '주시문서 목록을 새로 고쳤습니다.',
 'watchlistedit-raw-added' => '문서 $1개를 추가했습니다:',
 'watchlistedit-raw-removed' => '문서 $1개를 제거했습니다:',
 
@@ -3775,12 +3888,12 @@ $5
 'version-version' => '(버전 $1)',
 'version-license' => '라이선스',
 'version-poweredby-credits' => "이 위키는 '''[//www.mediawiki.org/ MediaWiki]'''를 기반으로 작동합니다. Copyright © 2001-$1 $2.",
-'version-poweredby-others' => '그 외 다른 개발자',
+'version-poweredby-others' => '[{{SERVER}}{{SCRIPTPATH}}/CREDITS 그 외 다른 개발자]',
 'version-license-info' => "미디어위키는 자유 소프트웨어입니다. 당신은 자유 소프트웨어 재단이 발표한 GNU 일반 공중 사용 허가서 버전 2나 그 이후 버전에 따라 이 파일을 재배포하거나 수정할 수 있습니다.
 
 미디어위키가 유용하게 사용될 수 있기를 바라지만 '''상용으로 사용'''되거나 '''특정 목적에 맞을 것'''이라는 것을 '''보증하지 않습니다'''. 자세한 내용은 GNU 일반 공중 사용 허가서 전문을 참고하십시오.
 
-당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다; 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
+당신은 이 프로그램을 통해 [{{SERVER}}{{SCRIPTPATH}}/COPYING GNU 일반 공중 사용 허가서 전문]을 받았습니다. 그렇지 않다면, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA로 편지를 보내주시거나 [//www.gnu.org/licenses/old-licenses/gpl-2.0.html 온라인으로 읽어보시기] 바랍니다.",
 'version-software' => '설치된 프로그램',
 'version-software-product' => '제품',
 'version-software-version' => '버전',
@@ -3804,8 +3917,8 @@ $5
 'fileduplicatesearch-filename' => '파일 이름:',
 'fileduplicatesearch-submit' => '찾기',
 'fileduplicatesearch-info' => '$1 × $2 픽셀<br />파일 크기: $3<br />MIME 유형: $4',
-'fileduplicatesearch-result-1' => '‘$1’ 파일과 중복된 파일이 없습니다.',
-'fileduplicatesearch-result-n' => '"$1"파일은 중복 파일이 $2개 있습니다.',
+'fileduplicatesearch-result-1' => '"$1" 파일과 중복된 파일이 없습니다.',
+'fileduplicatesearch-result-n' => '"$1" 파일은 중복 파일이 $2개 있습니다.',
 'fileduplicatesearch-noresults' => '"$1"이라는 이름을 가진 파일이 없습니다.',
 
 # Special:SpecialPages
@@ -3832,8 +3945,8 @@ $5
 
 # External image whitelist
 'external_image_whitelist' => ' #이 줄은 그대로 두십시오<pre>
-#ì \95ê·\9c í\91\9cí\98\84ì\8b\9d(// ì\82¬ì\9d´ì\97\90 ì\9e\88ë\8a\94 ë¶\80ë¶\84\9d\84 ì\95\84ë\9e\98ì\97\90 ì\8d¨ ì£¼ì\8b­ì\8b\9cì\98¤.
-#이 목록은 외부 이미지의 URL과 대조ë\90  ê²\83ì\9e\85ë\8b\88ë\8b¤.
+#ì \95ê·\9c í\91\9cí\98\84ì\8b\9d(// ì\82¬ì\9d´ì\97\90 ì\9e\88ë\8a\94 ë¶\80ë¶\84\9d\84 ì\95\84ë\9e\98ì\97\90 ì\9e\85ë ¥í\95\98ì\84¸ì\9a\94.
+#이 목록은 외부 이미지의 URL과 대조í\95  ê²\83ì\9e\85ë\8b\88ë\8b¤.
 #이 목록과 일치하는 것은 그림이 직접 보여지지만, 그렇지 않은 경우 그림을 가리키는 링크만 보이게 될 것입니다.
 # "#"으로 시작하는 줄은 주석으로 간주됩니다.
 #이 목록은 대소문자를 구별하지 않습니다.
@@ -3847,7 +3960,7 @@ $5
 'tags-title' => '태그',
 'tags-intro' => '이 페이지는 소프트웨어에서 편집에 대해 표시하는 태그와 그 의미를 설명하는 목록입니다.',
 'tags-tag' => '태그 이름',
-'tags-display-header' => 'ë³\80ê²½ 목록의 모양',
+'tags-display-header' => 'ë°\94ë\80\9c 목록의 모양',
 'tags-description-header' => '태그에 대한 설명',
 'tags-hitcount-header' => '태그된 바뀜',
 'tags-edit' => '편집',
@@ -3867,11 +3980,12 @@ $5
 
 # Database error messages
 'dberr-header' => '이 위키에 문제가 있습니다.',
-'dberr-problems' => '죄송합니다. 이 사이트는 기술적인 문제가 있습니다.',
+'dberr-problems' => '죄송합니다!
+이 사이트는 기술적인 문제가 있습니다.',
 'dberr-again' => '잠시 후에 다시 시도해주세요.',
 'dberr-info' => '(데이터베이스에 접속할 수 없습니다: $1)',
 'dberr-usegoogle' => '그 동안 구글을 통해 검색할 수도 있습니다.',
-'dberr-outofdate' => '참고로, 구글의 내용 개요는 오래된 것일 수도 있습니다.',
+'dberr-outofdate' => '참고로 구글의 내용 개요는 오래된 것일 수도 있습니다.',
 'dberr-cachederror' => '다음은 요청한 문서의 캐시된 복사본이며, 최신이 아닐 수도 있습니다.',
 
 # HTML forms
@@ -3883,7 +3997,7 @@ $5
 'htmlform-int-toohigh' => '당신이 입력한 값은 최대값 $1 이상입니다.',
 'htmlform-required' => '이 값은 필수 항목입니다',
 'htmlform-submit' => '저장',
-'htmlform-reset' => 'ë³\80ê²½í\95\9c 것을 되돌리기',
+'htmlform-reset' => 'ë°\94ê¾¼ 것을 되돌리기',
 'htmlform-selectorother-other' => '기타',
 
 # SQLite database support
@@ -3894,9 +4008,9 @@ $5
 'logentry-delete-delete' => '$1 사용자가 $3 문서를 삭제하였습니다.',
 'logentry-delete-restore' => '$1 사용자가 $3 문서를 복구하였습니다.',
 'logentry-delete-event' => '$1 사용자가 $3의 기록 $5개에 대해 표시 설정을 바꾸었습니다: $4',
-'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5}}개 편집의 설정을 변경하였습니다: $4',
-'logentry-delete-event-legacy' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c ê¸°ë¡\9dì\9d\98 í\91\9cì\8b\9c ì\84¤ì \95ì\9d\84 ë³\80ê²½í\95\98ì\98\80습니다.',
-'logentry-delete-revision-legacy' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c í\8e¸ì§\91ì\9d\98 í\91\9cì\8b\9c ì\84¤ì \95ì\9d\84 ë³\80ê²½í\95\98ì\98\80습니다.',
+'logentry-delete-revision' => '$1 사용자가 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 바꾸었습니다: $4',
+'logentry-delete-event-legacy' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c ê¸°ë¡\9dì\9d\98 í\91\9cì\8b\9c ì\84¤ì \95ì\9d\84 ë°\94꾸ì\97\88습니다.',
+'logentry-delete-revision-legacy' => '$1 ì\82¬ì\9a©ì\9e\90ê°\80 $3 ë¬¸ì\84\9c í\8e¸ì§\91ì\9d\98 í\91\9cì\8b\9c ì\84¤ì \95ì\9d\84 ë°\94꾸ì\97\88습니다.',
 'logentry-suppress-delete' => '$1 사용자가 $3 문서를 숨겼습니다.',
 'logentry-suppress-event' => '$1 사용자가 비공개적으로 $3의 {{PLURAL:$5|기록 $5개}}에 대해 표시 설정을 바꾸었습니다: $4',
 'logentry-suppress-revision' => '$1 사용자가 비공개적으로 $3 문서의 {{PLURAL:$5|판 $5개}}에 대해 표시 설정을 바꾸었습니다: $4',
@@ -3910,16 +4024,16 @@ $5
 'revdelete-uname-unhid' => '계정 이름 숨김 해제됨',
 'revdelete-restricted' => '관리자에게 제한을 적용함',
 'revdelete-unrestricted' => '관리자에 대한 제한을 해제함',
-'logentry-move-move' => '$1 사용자가 $3 문서를 $4로 옮겼습니다.',
-'logentry-move-move-noredirect' => '$1 사용자가 $3 문서를 넘겨주기를 생성하지 않고 $4로 옮겼습니다.',
-'logentry-move-move_redir' => '$1 사용자가 $3 문서를 $4로 옮기면서 넘겨주기를 덮어썼습니다.',
-'logentry-move-move_redir-noredirect' => '$1 사용자가 $3 문서를 $4로 넘겨주기를 남기지 않으면서 옮기면서 옮길 대상에 있던 넘겨주기를 덮어썼습니다..',
+'logentry-move-move' => '$1 사용자가 $3 문서를 $4 문서로 옮겼습니다.',
+'logentry-move-move-noredirect' => '$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 옮겼습니다.',
+'logentry-move-move_redir' => '$1 사용자가 $3 문서를 $4 문서로 옮기면서 넘겨주기를 덮어썼습니다.',
+'logentry-move-move_redir-noredirect' => '$1 사용자가 $3 문서를 $4 문서로 넘겨주기를 남기지 않으면서 옮기면서 옮길 대상에 있던 넘겨주기를 덮어썼습니다.',
 'logentry-patrol-patrol' => '$1 사용자가 $3 문서의 $4판을 검토한 것으로 표시했습니다.',
 'logentry-patrol-patrol-auto' => '$1 사용자가 자동적으로 $3 문서의 $4판을 검토한 것으로 표시했습니다.',
-'logentry-newusers-newusers' => '$1 사용자가 계정을 ì\83\9dì\84±í\96\88ì\8aµë\8b\88ë\8b¤.',
-'logentry-newusers-create' => '$1 사용자가 계정을 ì\83\9dì\84±í\96\88ì\8aµë\8b\88ë\8b¤.',
-'logentry-newusers-create2' => '$1 사용자가 $3 계정을 ì\83\9dì\84±í\96\88ì\8aµë\8b\88ë\8b¤.',
-'logentry-newusers-autocreate' => '$1 ê³\84ì \95ì\9d´ ì\9e\90ë\8f\99ì \81ì\9c¼ë¡\9c ì\83\9dì\84±ë\90\98었습니다.',
+'logentry-newusers-newusers' => '$1 사용자가 계정을 ë§\8cë\93¤ì\97\88ì\8aµë\8b\88ë\8b¤.',
+'logentry-newusers-create' => '$1 사용자가 계정을 ë§\8cë\93¤ì\97\88ì\8aµë\8b\88ë\8b¤.',
+'logentry-newusers-create2' => '$1 사용자가 $3 계정을 ë§\8cë\93¤ì\97\88ì\8aµë\8b\88ë\8b¤.',
+'logentry-newusers-autocreate' => '$1 ê³\84ì \95ì\9d\84 ì\9e\90ë\8f\99ì \81ì\9c¼ë¡\9c ë§\8cë\93¤었습니다.',
 'newuserlog-byemail' => '이메일로 보낸 비밀번호',
 
 # Feedback
@@ -3933,7 +4047,7 @@ $5
 'feedback-error1' => '오류: API 실행 결과를 인식할 수 없음',
 'feedback-error2' => '오류: 편집 실패',
 'feedback-error3' => '오류: API가 응답하지 않음',
-'feedback-thanks' => '감사합니다! ‘[$2 $1]’ 문서에 당신의 의견을 남겼습니다.',
+'feedback-thanks' => '감사합니다! "[$2 $1]" 문서에 당신의 의견을 남겼습니다.',
 'feedback-close' => '완료',
 'feedback-bugcheck' => '감사합니다! 혹시 해당 사항이 [$1 기존의 버그 보고서]에 올라와 있는지 확인해주세요.',
 'feedback-bugnew' => '확인했습니다. 새로운 버그 보고서를 작성합니다.',
@@ -3943,12 +4057,14 @@ $5
 'api-error-badtoken' => '내부 오류: 토큰이 잘못되었습니다.',
 'api-error-copyuploaddisabled' => '이 서버에서 URL을 통해 파일 올리기가 비활성화되어 있습니다.',
 'api-error-duplicate' => '이 위키에 내용이 똑같은 {{PLURAL:$1|[$2 다른 파일]}}이 있습니다.',
-'api-error-duplicate-archive' => '같은 내용을 담고 있던 {{PLURAL:$1|[$2 다른 파일]}}이 있었지만 이 {{PLURAL:$1|파일|파일들}}은 삭제되었습니다.',
+'api-error-duplicate-archive' => '같은 내용을 담고 있던 {{PLURAL:$1|[$2 다른 파일]}}이 있었지만 이 {{PLURAL:$1|파일}}은 삭제되었습니다.',
 'api-error-duplicate-archive-popup-title' => '중복된 {{PLURAL:$1|파일}}이 이미 삭제되었습니다.',
-'api-error-duplicate-popup-title' => '중복된 {{PLURAL:$1|파일}}',
+'api-error-duplicate-popup-title' => '중복된 {{PLURAL:$1|파일}}입니다.',
 'api-error-empty-file' => '당신이 올리려는 파일이 비어 있습니다.',
 'api-error-emptypage' => '새 문서로 빈 문서를 만들 수 없습니다.',
 'api-error-fetchfileerror' => '내부 오류: 파일을 불러오는 중 문제가 발생했습니다.',
+'api-error-fileexists-forbidden' => '"$1" 이름으로 된 파일은 이미 존재하고 덮어쓸 수 없습니다.',
+'api-error-fileexists-shared-forbidden' => '"$1" 이름으로 된 파일이 이미 공용 저장소에 존재하며 덮어쓸 수 없습니다.',
 'api-error-file-too-large' => '당신이 올리려는 파일이 너무 큽니다.',
 'api-error-filename-tooshort' => '파일 이름이 너무 짧습니다.',
 'api-error-filetype-banned' => '이런 형식의 파일은 올릴 수 없습니다.',
@@ -3961,7 +4077,7 @@ $5
 'api-error-missingparam' => '내부 오류: 요청 중 매개변수가 누락되었습니다.',
 'api-error-missingresult' => '내부 오류: 파일의 복제가 성공했는지 판단할 수 없습니다.',
 'api-error-mustbeloggedin' => '파일을 올리기 위해서는 로그인해야 합니다.',
-'api-error-mustbeposted' => '이 소프트웨어에 버그가 있습니다; 올바른 HTTP 전송 방식을 사용하지 않았습니다.',
+'api-error-mustbeposted' => '내부 오류: HTTP POST에 요청이 필요합니다.',
 'api-error-noimageinfo' => '파일 올리기는 성공했지만 서버가 파일에 대해 어떠한 정보도 주지 않았습니다.',
 'api-error-nomodule' => '내부 오류: 올리기 모듈이 설정되지 않았습니다.',
 'api-error-ok-but-empty' => '내부 오류: 서버에서 응답이 없습니다.',
@@ -3969,9 +4085,9 @@ $5
 'api-error-stashfailed' => '내부 오류: 서버가 임시 파일을 저장하지 못했습니다.',
 'api-error-timeout' => '서버가 제 시간 내에 응답하지 않았습니다.',
 'api-error-unclassified' => '알 수 없는 오류가 발생했습니다.',
-'api-error-unknown-code' => '알 수 없는 오류: "$1"',
+'api-error-unknown-code' => '알 수 없는 오류: "$1".',
 'api-error-unknown-error' => '내부 오류: 파일을 올리려 하는 도중에 무엇인가가 잘못되었습니다.',
-'api-error-unknown-warning' => 'ì\9b\90ì\9d¸ ë¶\88ëª\85ì\9d\98 ê²½ê³ : $1',
+'api-error-unknown-warning' => 'ì\95\8c ì\88\98 ì\97\86ë\8a\94 ê²½ê³ : "$1".',
 'api-error-unknownerror' => '알 수 없는 오류: "$1".',
 'api-error-uploaddisabled' => '이 위키에서 파일 올리기가 비활성화되어 있습니다.',
 'api-error-verification-error' => '파일이 손상되었거나 잘못된 확장자를 사용하고 있습니다.',
index f484421..aa5460a 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Karachay-Balkar (Ð\9aÑ\8aаÑ\80аÑ\87ай-Ð\9cалкъар)
+/** Karachay-Balkar (кÑ\8aаÑ\80аÑ\87ай-малкъар)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index ca218f9..41f89bf 100644 (file)
@@ -226,17 +226,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Avschnedde met Räächs-Klicke op de Üvverschrefte ändere (bruch Java_Skripp)',
 'tog-showtoc' => 'Zeich en Enhaldsüvversich bei Sigge met mieh wie drei Üvverschrefte dren',
 'tog-rememberpassword' => 'Op Duur enlogge op dämm Kompjuter un för dää Brauser (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})',
-'tog-watchcreations' => 'Dun de Sigge, die ich neu aanläje, för ming Oppassliss vürschlage',
-'tog-watchdefault' => 'Dun de Sigge för ming Oppassliss vürschlage, die ich aanpacken un änder',
-'tog-watchmoves' => 'Dun ming selfs ömjenante Sigge automatisch för ming Oppassliss vürschlage',
-'tog-watchdeletion' => 'Dun Sigge, die ich fottjeschmesse han, för ming Oppassliss vürschlage',
+'tog-watchcreations' => 'Donn Sigge beim neu Aanlääje automattesch för ming Oppaßlėß vörschlonn',
+'tog-watchdefault' => 'Donn Sigge beim Ändere automattesch för ming Oppaßlėß vörschlonn',
+'tog-watchmoves' => 'Donn Sigge beim Ömnänne automattesch för ming Oppaßlėß vörschlonn',
+'tog-watchdeletion' => 'Donn Sigge beim Fottschmiiße automattesch för ming Oppaßlėß vörschlonn',
 'tog-minordefault' => 'Dun all ming Änderunge jedes Mol als klein Mini-Änderunge vürschlage',
 'tog-previewontop' => 'Zeich de Vör-Aansich üvver däm Feld för dä Tex enzejevve aan.',
 'tog-previewonfirst' => 'Zeich de Vör-Aansich tirek för et eetste Mol beim Bearbeide aan',
 'tog-nocache' => 'Dun et Sigge Zweschespeichere en Dingem Brauser avschalte',
-'tog-enotifwatchlistpages' => 'Scheck en E-Mail, wann en Sigg us ming Oppassliss jeändert wood',
+'tog-enotifwatchlistpages' => 'Scheck mer en <i lang="en">e-mail</i>, wann en Sigg us minge Oppaßlėß verändert woode es',
 'tog-enotifusertalkpages' => 'Scheck mer en E-Mail, wann ming Klaaf Sigg jeändert weed',
-'tog-enotifminoredits' => 'Scheck mer och en E-Mail för de klein Mini-Änderunge',
+'tog-enotifminoredits' => 'Scheck mer och en <i lang="en">e-mail</i> för de klein Mini-Änderonge',
 'tog-enotifrevealaddr' => 'Zeich dä Andere ming E-Mail Adress aan, en de Benohrichtijunge per E-Mail',
 'tog-shownumberswatching' => 'Zeich de Aanzahl Metmaacher, die op die Sigg am oppasse sin',
 'tog-oldsig' => 'Esu&nbsp;süht&nbsp;Ding „Ongerschreff“&nbsp;us:',
@@ -341,7 +341,7 @@ $messages = array(
 'noindex-category' => 'Sigge, di de Söhkmaschine nit opnämme sulle',
 'broken-file-category' => 'Sigge met kappodde Lengks op Datteije',
 
-'about' => 'Ã\9cvver',
+'about' => 'Ã\96vver',
 'article' => 'Atikkel',
 'newwindow' => '(Mäht e neu Finster op, wann Dinge Brauser dat kann)',
 'cancel' => 'Stopp! Avbreche!',
@@ -568,6 +568,8 @@ un doht em och de URL vun dä Sigg heh sage.',
 'badarticleerror' => 'Dat jeiht met heh dä Sigg nit ze maache.',
 'cannotdelete' => 'De Sigg oder de Datei „$1“ fottzeschmieße es nit müjjelich. Maach sin, dat ene andere Metmaacher flöcker wor, hät et vürher jedon, un jetz es se ald fott.',
 'cannotdelete-title' => 'Mer künne di Sigg „$1“ nit fott schmiiße.',
+'delete-hook-aborted' => 'Et Fottschmiiße wood affjebroche övver ene sujenannte „Hoke“ en de ẞoffwäer.
+Ene Jrond weße mer nit.',
 'badtitle' => 'Verkihrte Üvverschreff',
 'badtitletext' => 'De Üvverschreff es esu nit en Odenung. Et muss jet dren stonn.
 Et künnt sin, dat ein vun de speziell Zeiche dren steiht,
@@ -619,6 +621,8 @@ $2',
 Dä Wiki_Köbes dovun hät beim Deeschmaache als Jrond aanjejovve: „$3“',
 'invalidtitle-knownnamespace' => '„$3“ es ene onjöltijje Tittel för em Appachtemang „$2“',
 'invalidtitle-unknownnamespace' => '„$2“ es ene onjöltijje Tittel för e Appachtemang met dä verkehte Nommer $1.',
+'exception-nologin' => 'Nit enjelogg',
+'exception-nologin-text' => 'Heh di Sigg udder heh dä Opdraach jeiht blooß, wann De heh em Wiki enjelogg bes.',
 
 # Virus scanner
 'virus-badscanner' => "Fääler en de Enstellunge: Dat Projramm ''$1'' fö noh Kompjuterwiere ze söke, dat kenne mer nit.",
@@ -646,8 +650,8 @@ Denk dran, Do künnts Der [[Special:Preferences|Ding Enstellunge heh för {{GRAM
 'loginprompt' => 'Öm heh enlogge ze künne, muss De de <i lang="en">Cookies</i> en Dingem Brauser enjeschalt han.',
 'userlogin' => 'Enlogge odder Metmaacher wääde',
 'userloginnocreate' => 'Enlogge',
-'logout' => 'Uslogge',
-'userlogout' => 'Uslogge',
+'logout' => 'Ußlogge',
+'userlogout' => 'Ußlogge',
 'notloggedin' => 'Nit enjelogg',
 'nologin' => "Wann De Dich noch nit aanjemeldt häs, dann dun Dich '''$1'''.",
 'nologinlink' => 'neu aanmelde',
@@ -2334,7 +2338,7 @@ Mieh övver de einzel Rääschte fenkt Er op de [[{{MediaWiki:Listgrouprights-he
 Adress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze
 schecke.',
 'emailuser' => 'E-mail aan dä Metmaacher',
-'emailpage' => 'E-mail aan ene Metmaacher',
+'emailpage' => 'Verscheck <i lang="en">e-mail</i> aan ene Metmaacher',
 'emailpagetext' => 'Wann heh dä Metmaacher en Adräß för sing <i lang="en">e-mail</i> aanjejovve hätt en singe Enstellunge,
 un die deit et och, dann kanns De met däm Fomular hee unge en einzel <i lang="en">e-mail</i> aan dä Metmaacher schecke.
 
@@ -2362,7 +2366,7 @@ Alles klor?',
 'emailsend' => 'Avschecke',
 'emailccme' => 'Scheck mer en Kopie vun dä E-Mail.',
 'emailccsubject' => 'En Kopie vun Dinger E-Mail aan $1: $2',
-'emailsent' => 'E-Mail es ungerwähs',
+'emailsent' => 'De <i lang="en">e-mail</i> es ongerwähs',
 'emailsenttext' => 'Ding E-Mail es jetz lossjescheck woode.',
 'emailuserfooter' => 'Hee di e-mail hät dä „$1“ an dä „$2“ jescheck, un doför {{GRAMMAR:en dative|{{SITENAME}}}} dat „{{int:emailuser}}“ jebruch.',
 
@@ -3053,7 +3057,7 @@ Bes esu joot, un versök et noch ens.',
 'tooltip-pt-mycontris' => 'en Liss met Dinge eije Beidräch',
 'tooltip-pt-login' => 'Do moß Desch nit Enlogge, kannz_E ävver jähn maache!',
 'tooltip-pt-anonlogin' => 'Wöhr nett wann De enlogge dääts, moß ävver nit.',
-'tooltip-pt-logout' => 'Uslogge',
+'tooltip-pt-logout' => 'Ußlogge',
 'tooltip-ca-talk' => 'Dun die Sigg met däm Klaaf övver heh de Sigg aanzeije',
 'tooltip-ca-edit' => 'De kanns die Sigg heh ändere — für em Avspeichere, donn eetß ens enen Bleck op de Vör-Aansich',
 'tooltip-ca-addsection' => 'Donn heh enne neue Afschnett opmaache.',
@@ -3171,6 +3175,7 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 'spambot_username' => 'SPAM fottschmieße',
 'spam_reverting' => 'De letzte Version ohne de Links op „$1“ widder zerröckjehollt.',
 'spam_blanking' => 'All die Versione hatte Links op „$1“, die sin jetz erus jemaht.',
+'spam_deleting' => 'All di Versione met Lenks op „$1“ wääde fott jeschmeße',
 
 # Info page
 'pageinfo-title' => 'Övver di Sigg: „$1“',
@@ -3436,7 +3441,7 @@ Donoh kumme, en däsellve Reih, Links op Sigge wo die Datei trotz dämm jenehm e
 'exif-objectcycle' => 'De Daachszick, för wann dat Denge zom Verdeile jedaach es',
 'exif-contact' => 'Kuntak',
 'exif-writer' => 'Schriiver',
-'exif-languagecode' => 'Shprooch',
+'exif-languagecode' => 'Schprooch',
 'exif-iimversion' => 'Dem <i lang="en">IIM</i> sing Version',
 'exif-iimcategory' => 'Saachjrupp udder Zoot',
 'exif-iimsupplementalcategory' => 'Extra Saachjroppe udder Zoote',
@@ -4127,6 +4132,8 @@ Wat De doh enjiß, kütt met Dingem Metmaachername un Dingem Brauser op die Sigg
 'api-error-empty-file' => 'En dä huhjelaade Dattei wohr jaa_nix dren.',
 'api-error-emptypage' => 'Neu läddijje Sigge aanzelääje es verbodde.',
 'api-error-fetchfileerror' => 'Fähler: Beim eronger Laade hät jät nit jeflupp.',
+'api-error-fileexists-forbidden' => 'En Dattei mem Name „$1“ es ald doh un mer künne se nit övverschriive.',
+'api-error-fileexists-shared-forbidden' => 'En Dattei mem Name „$1“ es ald en ene jemeinsamme Sammlong, un mer künne se nit övverschriive.',
 'api-error-file-too-large' => 'De huhjelaade Dattei wohr ze jruß.',
 'api-error-filename-tooshort' => 'Der Name för di Dattei es ze koot.',
 'api-error-filetype-banned' => 'Di Zoot Dattei es nit zohjelohße.',
index 77f25c1..1c55804 100644 (file)
@@ -117,7 +117,7 @@ $messages = array(
 'tog-enotifminoredits' => 'Ji bo guhertinên biçûk jî E-nameyekê ji min re bişîne',
 'tog-enotifrevealaddr' => 'Navnîşana e-nameya min di agahdariyên e-nameyan de nîşan bide',
 'tog-shownumberswatching' => 'Nîşan bide, çiqas bikarhêner dişopînin',
-'tog-oldsig' => 'Pêşdîtina îmzeya heyî',
+'tog-oldsig' => 'Pêşdîtina îmzeya heye:',
 'tog-fancysig' => 'Di îmzeyê de girêdana otomatîk a bikarhêner betal bike',
 'tog-externaleditor' => 'Edîtorekî derve bike "standard" (ji yên bi ezmûn re, tercîhên taybet di komputerê de hewce ne)',
 'tog-externaldiff' => 'Birnemijekî derve biguherîne "standard" (ji yên bi ezmûn re, tercîhên taybet di komputerê de hewce ne)',
@@ -173,7 +173,7 @@ $messages = array(
 'february-gen' => 'Reşemî',
 'march-gen' => 'Adar',
 'april-gen' => 'Avrêl',
-'may-gen' => 'Gulan',
+'may-gen' => 'gulan',
 'june-gen' => 'pûşper',
 'july-gen' => 'Tîrmeh',
 'august-gen' => 'Gelawêj',
@@ -185,7 +185,7 @@ $messages = array(
 'feb' => 'reş',
 'mar' => 'adr',
 'apr' => 'avr',
-'may' => 'gul',
+'may' => 'gulan',
 'jun' => 'pûş',
 'jul' => 'tîr',
 'aug' => 'teb',
@@ -433,7 +433,7 @@ Pirs: $2',
 $2',
 'namespaceprotected' => "Destûra te ji bo guhertina vê rûpelê '''$1''' di valahiya nav de nîne.",
 'ns-specialprotected' => 'Rûpelên taybet {{ns:special}} nikarin werin guherandin.',
-'titleprotected' => "Rûpelek bi vî navî nikare were çêkirin. Ev astengkirin ji [[User:$1|$1]] bi sedema ''$2'' hate çêkirin.",
+'titleprotected' => "Rûpelek bi vî navî nikare bê çêkirin. Ev astengkirin ji [[User:$1|$1]] bi sedema ''$2'' hatiye çêkirin.",
 
 # Virus scanner
 'virus-unknownscanner' => 'Antîvîrusa nenas:',
@@ -529,7 +529,7 @@ Ji bo xelaskirina tomarkirinê, divê tu niha şîfreyeke nû binivîsî:',
 'resetpass_success' => 'Şîfreya te hate guherandin! Niha tu tê qeydkirin...',
 'resetpass_forbidden' => 'Şîfre nikarin werin guhertin',
 'resetpass-submit-loggedin' => 'Şîfre biguherîne',
-'resetpass-submit-cancel' => 'Betalkirin',
+'resetpass-submit-cancel' => 'Betal bike',
 'resetpass-temp-password' => 'Şîfreya niha:',
 
 # Special:PasswordReset
@@ -577,9 +577,9 @@ Ji bo xelaskirina tomarkirinê, divê tu niha şîfreyeke nû binivîsî:',
 'watchthis' => 'Vê gotarê bişopîne',
 'savearticle' => 'Rûpelê tomar bike',
 'preview' => 'Pêşdîtin',
-'showpreview' => 'Pêşdîtin',
+'showpreview' => 'Pêşdîtinê nîşan bide',
 'showlivepreview' => 'Pêşdîtina zindî',
-'showdiff' => 'Guherandinê nîşan bide',
+'showdiff' => 'Guherandinan nîşan bide',
 'anoneditwarning' => "'''Hişyarî:''' Tu netêketî yî! Navnîşana IP'ya te wê di dîroka guherandina vê rûpelê de bê tomarkirin.",
 'anonpreviewwarning' => "''Tu ne têketî yî. Tomarkirin wê navnîşana IP'ya te di dîroka guhertinan de nîşan bide.''",
 'missingsummary' => "<span style=\"color:#990000;\">'''Zanibe:'''</span> Te nivîsekî kurt ji bo guherandinê ra nenivîsand. Eger tu niha carekî din li Tomar xê, guherandinê te vê nivîsekî kurt yê were tomarkirin.",
@@ -630,8 +630,8 @@ Zanibe ku tu nikarî e-nameya bişînî heta tu di [[Special:Preferences|tercih
 'newarticletext' => "Ev rûpel hîn tune. Eger tu bixwazî vê rûpelê çêkî, dest bi nivîsandinê bike û piştre qeyd bike. '''Wêrek be''', biceribîne!<br />
 Ji bo alîkariyê binêre: [[{{MediaWiki:Helppage}}|Alîkarî]].<br />
 Heke tu bi şaşîtî hatî, bizîvire rûpela berê.",
-'anontalkpagetext' => "----''Ev rûpela gotûbêjê ye ji bo bikarhênerên nediyarkirî ku hîn hesabekî xwe çênekirine an jî bikarnaînin. Ji ber vê yekê divê em wan bi navnîşana IP ya hejmarî nîşan bikin. Navnîşaneke IP dikare ji aliyê gelek kesan ve were bikaranîn. Heger tu bikarhênerekî nediyarkirî bî û bawerdikî ku nirxandinên bê peywend di der barê te de hatine kirin ji kerema xwe re [[Special:UserLogin|hesabekî xwe veke an jî têkeve]] da ku tu xwe ji tevlîheviyên bi bikarhênerên din re biparêzî.''",
-'noarticletext' => 'Ev rûpel niha vala ye, tu dikarî [[Special:Search/{{PAGENAME}}|Di nav gotarên din de li "{{PAGENAME}}" bigere]] an [{{fullurl:{{FULLPAGENAME}}|action=edit}} vê rûpelê biguherînî].',
+'anontalkpagetext' => "----''Ev rûpela gotûbêjê ye ji bo bikarhênerên nediyarkirî ku hîn hesabekî xwe çênekirine an jî bikarnaînin. Ji ber vê yekê divê em wan bi navnîşana IP ya hejmarî nîşan bikin. Navnîşaneke IP dikare ji aliyê gelek kesan ve were bikaranîn. Heger tu bikarhênerekî nediyarkirî bî û bawerdikî ku nirxandinên bê peywend di der barê te de hatine kirin ji kerema xwe re [[Special:UserLogin/signup|hesabekî xwe veke an jî têkeve]] da ku tu xwe ji tevlîheviyên bi bikarhênerên din re biparêzî.''",
+'noarticletext' => 'Ev rûpel niha vala ye, tu dikarî [[Special:Search/{{PAGENAME}}|Di nav gotarên din de li "{{PAGENAME}}" bigerî]] an jî [{{fullurl:{{FULLPAGENAME}}|action=edit}} vê rûpelê biguherînî].',
 'noarticletext-nopermission' => 'Ev rûpel niha vala ye. 
 Tu dikarî [[Special:Search/{{PAGENAME}}|Di nav gotarên din de li "{{PAGENAME}}" bigere]] 
 an <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vê rûpelê biguherînî]</span>.',
@@ -676,8 +676,8 @@ Tu soz didî ku te ev bi xwe nivîsand an jî ji çavkaniyekê azad an geliyane
 'protectedpagewarning' => "'''Hişyarî:  Ev rûpel tê parastin. Bi tenê bikarhênerên ku xwediyên mafên \"koordînatoriyê\" ne, dikarin vê rûpelê biguherînin.'''",
 'semiprotectedpagewarning' => "'''Hişyarî:''' Ev rûpel tê parastin, lewma bes bikarhênerên tomarkirî dikarin vê biguherînin.
 Guhertina herî dawî bi referansa li jêr hatiye piştrastkirin:",
-'templatesused' => 'Şablon di van rûpelan de tê bikaranîn',
-'templatesusedpreview' => 'Şablonên ku di vê pêşdîtinê de tên bikaranîn:',
+'templatesused' => '{{PLURAL:$1|Şablona|Şablonên}} ku li ser vê rûpelê {{PLURAL:$1|tê|tên}} bikaranîn:',
+'templatesusedpreview' => '{{PLURAL:$1|Şablona|Şablonên}} di vê pêşdîtinê de {{PLURAL:$1|tê|tên}} bikaranîn:',
 'templatesusedsection' => 'Şablonên ku di vê parçeyê de tên bikaranîn:',
 'template-protected' => '(tê parastin)',
 'template-semiprotected' => '(nîv-parastî)',
@@ -790,7 +790,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'compareselectedversions' => 'Guhertoyan bide ber hev',
 'showhideselectedversions' => 'Revîzyonên bijartî nîşan bide/veşêre',
 'editundo' => 'betal bike',
-'diff-multi' => '({{PLURAL:$1|Guhertoyeke di navbera herduyan de|$1 guhertoyên di navbera herduyan de}} tê(n) dîtin.)',
+'diff-multi' => '({{PLURAL:$1|Guhertoyeke|Guhertoyên {{PLURAL:$2|bikarhêner|bikarhêneran}} di navbera herduyan de}} {{PLURAL:$1|nayê|nayên}} dîtin.)',
 
 # Search results
 'searchresults' => 'Encamên lêgerînê',
@@ -840,7 +840,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'powersearch' => 'Lê bigere',
 'powersearch-legend' => 'Lê bigere',
 'powersearch-ns' => 'Di valahiya navan de lêbigere:',
-'powersearch-redir' => "Lîsteya redirect'an",
+'powersearch-redir' => 'Lîsteya beralîkirinan',
 'powersearch-field' => 'Bigere li',
 'powersearch-togglelabel' => 'Kontrol bike:',
 'powersearch-toggleall' => 'Hemû',
@@ -1053,7 +1053,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'recentchangeslinked-page' => 'Navê rûpelê',
 
 # Upload
-'upload' => 'Wêneyekî barbike',
+'upload' => 'Wêneyekî bar bike',
 'uploadbtn' => 'Wêneyekî bar bike',
 'reuploaddesc' => 'Barkirinê biskîne û dîsa here rûpela barkirinê.',
 'uploadnologin' => 'Xwe tomar nekir',
@@ -1072,7 +1072,7 @@ anjî ji bo file'ên dengî '''<nowiki>[[</nowiki>{{ns:media}}:File.ogg<nowiki>]
 'uploadlog' => 'Têketina barkirinê',
 'uploadlogpage' => 'Têketina barkirinê',
 'filename' => 'Navê pelê',
-'filedesc' => 'Kurte',
+'filedesc' => 'Danasîn',
 'fileuploadsummary' => 'Kurte:',
 'filereuploadsummary' => 'Guhertinên pelê:',
 'filestatus' => 'Rewşa telîfê:',
@@ -1158,7 +1158,7 @@ Xêra xwe navekî din bibîne.",
 'filehist-user' => 'Bikarhêner',
 'filehist-dimensions' => 'Mezinahî',
 'filehist-filesize' => 'Mezinahiya pelê',
-'filehist-comment' => 'Nivîs',
+'filehist-comment' => 'Şîrove',
 'filehist-missing' => 'Pel nîne',
 'imagelinks' => 'Girêdanên vî wêneyî',
 'linkstoimage' => 'Di van rûpelan de lînkek ji vî wêneyî re heye:',
@@ -1228,7 +1228,7 @@ Agahdariya li ser [$2 rûpela danasîna pelê] li jêr tê nîşandan.',
 'statistics-users-active' => 'Bikarhênerên çalak',
 'statistics-mostpopular' => 'Rûpelên herî lênerî',
 
-'disambiguations' => 'Rûpelên cudakirinê',
+'disambiguations' => 'Rûpelên girêdayî rûpelên cudakirinê',
 'disambiguationspage' => 'Template:disambig',
 
 'doubleredirects' => 'Beralîkirinên ducarî',
@@ -1240,7 +1240,7 @@ Agahdariya li ser [$2 rûpela danasîna pelê] li jêr tê nîşandan.',
 
 'withoutinterwiki' => 'Rûpelên bê girêdanên ziman',
 'withoutinterwiki-legend' => 'Pêşbendik',
-'withoutinterwiki-submit' => 'Nîşan bide',
+'withoutinterwiki-submit' => 'nîşan bide',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
@@ -1314,6 +1314,7 @@ Tu dikarî ji xwe re têketinekê hilbijêrî, navê bikarhêneriyê an navê r
 'allpagesprefix' => 'Rûpelên bi pêşbendik nîşan bide:',
 'allpagesbadtitle' => 'Sernavê rûpelê qedexe bû ya "interwiki"- ya "interlanguage"-pêşnavekî xwe hebû. Meqûle ku zêdertirî tiştekî nikanin werin bikaranîn di sernavê da.',
 'allpages-bad-ns' => 'Namespace\'a "$1" di {{SITENAME}} da tune ye.',
+'allpages-hide-redirects' => 'Beralîkirinan nîşan bide',
 
 # Special:Categories
 'categories' => 'Kategorî',
@@ -1326,15 +1327,15 @@ Li [[Special:WantedCategories|kategoriyên xwestî]] binêre.',
 # Special:DeletedContributions
 'deletedcontributions' => 'Beşdariyên bikarhênerekî yê jêbirî',
 'deletedcontributions-title' => 'Guherandinên bikarhêner yê jêbirî',
-'sp-deletedcontributions-contribs' => 'tevkarî',
+'sp-deletedcontributions-contribs' => 'beşdari',
 
 # Special:LinkSearch
-'linksearch' => 'Girêdanên derveyî',
+'linksearch' => 'Lêgerîna girêdanên derve',
 'linksearch-ns' => 'Valahiya nav:',
 'linksearch-ok' => 'Lêgerîn',
 
 # Special:ListUsers
-'listusers-submit' => 'Nîşan bide',
+'listusers-submit' => 'nîşan bide',
 'listusers-noresult' => 'Bikarhêner nehate dîtin.',
 'listusers-blocked' => '(hate astengkirin)',
 
@@ -1399,7 +1400,7 @@ Gava tu bixwazî wê rûpelê ji nav lîsteya xwe ya şopandinê derbixî, li se
 'unwatchthispage' => 'Êdî neşopîne',
 'notanarticle' => 'Ne gotar e',
 'watchnochange' => 'Ne rûpelek, yê tu dişopînê, hate xeyrandin di vê wextê da, yê tu dixazê bibînê.',
-'watchlist-details' => '* {{PLURAL:$1|Rûpelek tê|$1 rûpel tên}} şopandin, rûpelên gotûbêjê nayên jimartin.',
+'watchlist-details' => '{{PLURAL:$1|Rûpeleka|$1 rûpel}} li ser lîsteya te ya şopandinê, rûpelên gotûbêjê nayên jimartin.',
 'wlheader-enotif' => '* Agahdariya E-nameyê pêk tê.',
 'wlheader-showupdated' => "* Ev rûpela hatî guhertin dema te lê meyzand bi '''nivîsa stûr''' tê xuyakirin.",
 'watchlistcontains' => 'Di lîsteya şopandina te de {{PLURAL:$1|rûpelek heye|$1 rûpel hene}}.',
@@ -1486,7 +1487,7 @@ Guhertoya dawî bi [[User:$3|$3]] ([[User talk:$3|gotûbêj]]).',
 'protectlogpage' => 'Têketina parastinê',
 'protectedarticle' => 'parastî [[$1]]',
 'modifiedarticleprotection' => 'parastina "[[$1]]" guherand',
-'unprotectedarticle' => '"[[$1]]" niha vê parastin e',
+'unprotectedarticle' => 'parastina "[[$1]]" rakir',
 'protect-title' => 'parastina "$1" biguherîne',
 'prot_1movedto2' => '$1 çû cihê $2',
 'protect-legend' => 'Parastinê teyîd bike',
@@ -1566,8 +1567,8 @@ Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/dele
 'sp-contributions-newbies' => 'Tenê beşdariyên bikarhênerên nû nîşan bide',
 'sp-contributions-newbies-sub' => 'Ji bikarhênerên nû re',
 'sp-contributions-newbies-title' => 'Tevkariyên bikarhêner ji bo hesabên nû',
-'sp-contributions-blocklog' => 'Astengkirina bikarhêner',
-'sp-contributions-deleted' => 'Guherandinên bikarhênerekî yê jêbirî',
+'sp-contributions-blocklog' => 'Astengkirina têketinê',
+'sp-contributions-deleted' => 'beşdariyên bikarhêner yên jêbirî',
 'sp-contributions-uploads' => 'yên barkirî',
 'sp-contributions-logs' => 'têketin',
 'sp-contributions-talk' => 'gotûbêj',
@@ -1738,7 +1739,7 @@ da bikarî navê wê rûpelê biguherînî.',
 'delete_and_move_text' => '== Jêbirin gireke ==
 
 Rûpela "[[:$1]]" berê heye. Tu rast dixazê wê jêbibê ji bo navguherandinê ra?',
-'delete_and_move_confirm' => 'Erê, wê rûpelê jêbibe',
+'delete_and_move_confirm' => 'Erê, rûpelê jê bibe',
 'delete_and_move_reason' => 'Jêbir ji bo navguherandinê',
 'immobile-source-page' => 'Navê vê rûpelê nikare were guherandin.',
 
@@ -1805,13 +1806,13 @@ Tu dikarî tenê li çavkaniyê binêrî.',
 'tooltip-search-go' => 'Here rûpeleke tev bi vî navî, heke hebe',
 'tooltip-search-fulltext' => 'Di nav rûpelan de li vê nivîsê bigerre',
 'tooltip-p-logo' => 'Here Destpêkê',
-'tooltip-n-mainpage' => 'Biçe Destpêkê',
+'tooltip-n-mainpage' => 'Here Destpêkê',
 'tooltip-n-mainpage-description' => 'Here Destpêkê',
 'tooltip-n-portal' => 'Agahdarî li ser {{SITENAME}}, tu dikarî çi bikî, tu dikarî çi li ku bîbînî',
-'tooltip-n-recentchanges' => "Lîsteya guherandinên dawî di vê Wîkî'yê da.",
+'tooltip-n-recentchanges' => 'Lîsteya guherandinên dawî di vê wîkiyê da',
 'tooltip-n-randompage' => 'Rûpeleka ketober bar bike',
 'tooltip-n-help' => 'Bersivên ji bo pirsên te.',
-'tooltip-t-whatlinkshere' => 'Lîsteya hemû rûpelên ku pê ve girêdayî ne.',
+'tooltip-t-whatlinkshere' => 'Lîsteya hemû rûpelên ku pê ve girêdayî ne',
 'tooltip-t-recentchangeslinked' => 'Recent changes in pages linking to this page',
 'tooltip-feed-rss' => "RSS feed'ên ji bo rûpelê",
 'tooltip-feed-atom' => "Atom feed'ên ji bo vê rûpelê",
@@ -1993,7 +1994,7 @@ Ji ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'hemû',
-'namespacesall' => 'Hemû',
+'namespacesall' => 'hemû',
 'monthsall' => 'hemû',
 'limitall' => 'hemû',
 
@@ -2036,7 +2037,7 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 'table_pager_prev' => 'Rûpela berî',
 'table_pager_first' => 'Rûpela pêşîn',
 'table_pager_last' => 'Rûpela dawî',
-'table_pager_limit_submit' => 'Biçe',
+'table_pager_limit_submit' => 'Here',
 
 # Auto-summaries
 'autosumm-blank' => 'Rûpel hate vala kirin',
index 9b8b641..d41c07b 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Cornish (Kernowek)
+/** Cornish (kernowek)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 7c81684..2e08a4c 100644 (file)
@@ -190,17 +190,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Eenzel Abschnitter mat Rietsklick änneren (JavaScript)',
 'tog-showtoc' => 'Inhaltsverzeechnes weise bei Säite mat méi wéi dräi Iwwerschrëften',
 'tog-rememberpassword' => 'Meng Umeldung mat dësem Browser(fir maximal $1 {{PLURAL:$1|Dag|Deeg}}) verhalen',
-'tog-watchcreations' => 'Säiten déi ech nei uleeën automatesch op meng Iwwerwaachungslëscht setzen',
-'tog-watchdefault' => 'Säiten déi ech änneren op meng Iwwerwaachungslëscht setzen',
-'tog-watchmoves' => 'Säiten déi ech réckelen automatesch op meng Iwwerwaachungslëscht setzen',
-'tog-watchdeletion' => 'Säiten déi ech läschen op meng Iwwerwaachungslëscht setzen',
+'tog-watchcreations' => 'Säiten déi ech uleeën a Fichieren déi ech eroplueden op meng Iwwerwaachungslëscht derbäisetzen',
+'tog-watchdefault' => 'Säiten a Fichieren déi ech änneren op meng Iwwerwaachungslëscht derbäisetzen',
+'tog-watchmoves' => 'Säiten a Fichieren déi ech réckelen automatesch op meng Iwwerwaachungslëscht derbäisetzen',
+'tog-watchdeletion' => 'Säiten a Fichieren déi ech läschen op meng Iwwerwaachungslëscht derbäisetzen',
 'tog-minordefault' => "All Ännerungen automatesch als 'Kleng Ännerungen' markéieren.",
 'tog-previewontop' => "Déi ''nach-net gespäichert Versioun'' iwwer der Ännerungsfënster weisen",
 'tog-previewonfirst' => "Beim éischten Änneren déi  ''nach net gespäichert Versioun'' weisen.",
 'tog-nocache' => 'Säitecache vum Browser desaktivéieren',
-'tog-enotifwatchlistpages' => 'Schéckt mir eng E-Mail wann eng vun de Säiten op menger Iwwerwaachungslëscht geännert gëtt',
+'tog-enotifwatchlistpages' => 'Schéckt mir eng E-Mail wann eng Säit oder e Fichier op menger Iwwerwaachungslëscht geännert gëtt',
 'tog-enotifusertalkpages' => 'Schéckt mir E-Maile wa meng Diskussiounssäit geännert gëtt.',
-'tog-enotifminoredits' => 'Schéckt mir och bei klengen Ännerungen op vu mir iwwerwaachte Säiten eng E-Mail.',
+'tog-enotifminoredits' => 'Schéckt mir och bei klengen Ännerungen op vu mir iwwerwaachte Säiten oder Fichieren eng E-Mail.',
 'tog-enotifrevealaddr' => 'Meng E-Mailadress an de Benoriichtigungsmaile weisen.',
 'tog-shownumberswatching' => "D'Zuel vun de Benotzer déi dës Säit iwwerwaache weisen",
 'tog-oldsig' => 'Aktuell Ënnerschrëft:',
@@ -534,6 +534,8 @@ Mellt dëst w.e.g. bei engem [[Special:ListUsers/sysop|Administrateur]] a vergie
 'cannotdelete' => 'D\'Bild oder d\'Säit "$1" konnt net geläscht ginn.
 Et ka sinn datt et scho vun engem Anere geläscht gouf.',
 'cannotdelete-title' => 'D\'Säit "$1" kann net geläscht ginn',
+'delete-hook-aborted' => "D'Läsche gouf vun enger Schnëttstell (hook) ofgebrach.
+Eng Erklärung gouf net ginn.",
 'badtitle' => 'Schlechten Titel',
 'badtitletext' => 'De gewënschten Titel ass net valabel, eidel, oder een net korrekten Interwiki Link.',
 'perfcached' => 'Dës Date kommen aus dem Tëschespäicher a si méiglecherweis net aktuell. Maximal {{PLURAL:$1|ee Resultat ass|$1 Resultater sinn}} am Tësche späicher disponibel.',
@@ -561,6 +563,8 @@ $2',
 'titleprotected' => "Eng Säit mat dësem Numm kann net ugeluecht ginn. Dës Spär gouf vum [[User:$1|$1]] gemaach deen als Grond ''$2'' uginn huet.",
 'invalidtitle-knownnamespace' => 'Net valabelen Titel mam Nummraum "$2" a mam Text "$3"',
 'invalidtitle-unknownnamespace' => 'Net valabelen Titel mat der onbekannter Nummraum-Zuel $1 a mam Text "$2"',
+'exception-nologin' => 'Net ageloggt',
+'exception-nologin-text' => 'Dës Säit oder Aktioun erfuerdert datt Dir op dëser Wiki ageloggt sidd.',
 
 # Virus scanner
 'virus-badscanner' => "Schlecht Configuratioun: onbekannte  Virescanner: ''$1''",
@@ -3712,6 +3716,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'api-error-empty-file' => 'De Fichier deen Dir geschéckt hutt war eidel.',
 'api-error-emptypage' => 'Et ass net erlaabt nei, eidel Säiten unzeleeën.',
 'api-error-fetchfileerror' => 'Interne Feeler: beim Opruffe vum Fichier huet eppes net fonctionnéiert.',
+'api-error-fileexists-forbidden' => 'E Fichier mam Numm "$1" gëtt et schonn an e kann net iwwerschriwwe ginn.',
 'api-error-file-too-large' => 'De Fichier deen Dir geschéckt hutt war ze grouss.',
 'api-error-filename-tooshort' => 'Den Numm vum Fichier ass ze kuerz.',
 'api-error-filetype-banned' => 'Dësen Typ vu Fichier ass net zougelooss.',
index e731e91..82798f2 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Lezghian (Ð\9bезги)
+/** Lezghian (лезги)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -30,7 +30,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Мукьвара хьайи дегишвилера авай къаравулвал авунвай дуьзар хъувунар чуьнуьхун',
 'tog-newpageshidepatrolled' => 'ЦIийи ччинрин сиягьда къаравулвал авунвай ччинар чуьнуьхун',
 'tog-extendwatchlist' => 'ЧӀехи сиягь килигунин, кутазвай вири дегишунар, амма са эхирбур туш',
-'tog-usenewrc' => 'ЦIийи Ð´ÐµÐ³Ð¸Ñ\88вилеÑ\80ин Ñ\81иÑ\8fгÑ\8c ÐºÐ°Ñ\80дик ÐºÑ\83Ñ\82Ñ\83н (JavaScript герекзава)',
+'tog-usenewrc' => 'Ð\9cÑ\83кÑ\8cваÑ\80а Ñ\85Ñ\8cайи Ð¼Ð°Ñ\81акIавилеÑ\80ин Ñ\87Ñ\87ина Ð²Ð° Ð²Ð¸Ð»Ð¸Ð² Ñ\85Ñ\83Ñ\8cнин Ñ\81иÑ\8fгÑ\8cда  Ð´Ñ\83Ñ\8cзаÑ\80 Ñ\85Ñ\8aÑ\83вÑ\83наÑ\80 ÐºIеÑ\80еÑ\82\80из Ñ\87Ñ\87аÑ\80а Ð°Ð²Ñ\83н. (JavaScript герекзава)',
 'tog-numberheadings' => 'Кьилин цӀарариз автоматдаказ номерар эцигун',
 'tog-showtoolbar' => 'Дуьзар хъувунин алатрин кьвати къалура (JavaScript)',
 'tog-editondblclick' => 'Ччинар кьве тIампIуналди дуьзар хъувун (JavaScript герекзава)',
@@ -448,7 +448,7 @@ $messages = array(
 Квевай и ччинин туьхкlуьрунин гереквилиз килигиз тIалабзава.
 Агъадихъ и ччинин алудун ва тIвар эхцигунин журнал къалурнава.",
 'moveddeleted-notice' => 'И ччин алуднава. 
-Агъадихъ малумат патал и ччинин алудун ва тIвар эхцигунин журнал къалурнава.',
+Агъадихъ малумат патал и ччинин алудунин ва тIвар эхцигунин журнал къалурнава.',
 'log-fulllog' => 'Вири журналдиз килигун',
 'edit-conflict' => 'Дуьзар хъувунрин акьунар',
 
@@ -1025,7 +1025,7 @@ $messages = array(
 
 # Contributions
 'contributions' => 'Уртахди кутур крар',
-'contributions-title' => '$1 уртахдин кутур крар',
+'contributions-title' => '$1 уртахди кутур крар',
 'mycontris' => 'За кутур кар',
 'contribsub2' => '($1)-ин кутур пай  ($2)',
 'uctop' => '(вини кьил)',
index 9597ca9..bf0b9d6 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Lingala (Lingála)
+/** Lingala (lingála)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index ec52b88..30fd62a 100644 (file)
@@ -192,10 +192,10 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Įjungti skyrelių redagavimą paspaudus skyrelio pavadinimą dešiniuoju pelės klavišu (JavaScript)',
 'tog-showtoc' => 'Rodyti turinį, jei puslapyje daugiau nei 3 skyreliai',
 'tog-rememberpassword' => 'Prisiminti prisijungimo informaciją šioje naršyklėje (daugiausiai $1 {{PLURAL:$1|dieną|dienas|dienų}})',
-'tog-watchcreations' => 'Pridėti puslapius, kuriuos sukuriu, į stebimų sąrašą',
-'tog-watchdefault' => 'Pridėti puslapius, kuriuos redaguoju, į stebimų sąrašą',
-'tog-watchmoves' => 'Pridėti puslapius, kuriuos perkeliu, į stebimų sąrašą',
-'tog-watchdeletion' => 'Pridėti puslapius, kuriuos ištrinu, į stebimų sąrašą',
+'tog-watchcreations' => 'Pridėti puslapius, kuriuos aš sukuriu, į stebimų sąrašą',
+'tog-watchdefault' => 'Pridėti puslapius, kuriuos aš redaguoju, į stebimų sąrašą',
+'tog-watchmoves' => 'Pridėti puslapius, kuriuos aš perkeliu, į stebimų sąrašą',
+'tog-watchdeletion' => 'Pridėti puslapius, kuriuos aš ištrinu, į stebimų sąrašą',
 'tog-minordefault' => 'Pagal nutylėjimą pažymėti redagavimus kaip smulkius',
 'tog-previewontop' => 'Rodyti peržiūrą virš redagavimo lauko',
 'tog-previewonfirst' => 'Rodyti peržiūrą pirmą kartą pakeitus',
@@ -366,7 +366,7 @@ $messages = array(
 'create-this-page' => 'Sukurti šį puslapį',
 'delete' => 'Trinti',
 'deletethispage' => 'Ištrinti šį puslapį',
-'undelete_short' => 'Atstatyti $1 {{PLURAL:$1:redagavimą|redagavimus|redagavimų}}',
+'undelete_short' => 'Atkurti $1 {{PLURAL:$1:redagavimą|redagavimus|redagavimų}}',
 'viewdeleted_short' => 'Peržiūrėti $1 {{PLURAL:$1|ištrintą keitimą|ištrintus keitimus|ištrintų keitimų}}',
 'protect' => 'Užrakinti',
 'protect_change' => 'keisti',
@@ -906,10 +906,10 @@ Jūs galite grįžti ir redaguoti jau esantį puslapį, arba [[Special:UserLogin
 'permissionserrorstext-withaction' => 'Jūs neturite leidimo $2 dėl {{PLURAL:$1|šios priežasties|šių priežasčių}}:',
 'recreate-moveddeleted-warn' => "'''Dėmesio: Jūs atkuriate puslapį, kuris anksčiau buvo ištrintas.'''
 
-Jūs turite nuspręsti, ar reikėtų toliau redaguoti šį puslapį.
-Dėl patogumo čia pateikta šio puslapio šalinimų ir perkėlimų istorija:",
+Turėtumėte nuspręsti, ar reikėtų toliau redaguoti šį puslapį.
+Jūsų patogumui čia pateikiamas šio puslapio šalinimų ir perkėlimų sąrašas:",
 'moveddeleted-notice' => 'Šis puslapis buvo ištrintas.
-Žemiau pateikta puslapio šalinimų ir pervadinimų istorija.',
+Žemiau pateikiamas puslapio šalinimų ir pervadinimų sąrašas.',
 'log-fulllog' => 'Rodyti visą istoriją',
 'edit-hook-aborted' => 'Keitimas nutrauktas užlūžimo.
 Tam nėra paaiškinimo.',
@@ -1026,8 +1026,8 @@ Kaip administratorius, jūs galite ją pamatyti; daugiau detalių gali būti [{{
 'revdelete-show-file-submit' => 'Taip',
 'revdelete-selected' => "'''{{PLURAL:$2|Pasirinkta [[:$1]] versija|Pasirinktos [[:$1]] versijos}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Pasirinktas istorijos įvykis|Pasirinkti istorijos įvykiai}}:'''",
-'revdelete-text' => "'''Ištrintos versijos bei įvykiai vistiek dar bus rodomi puslapio istorijoje ir specialiųjų veiksmų istorijoje, bet jų turinio dalys nebus viešai prieinamos.'''
-Kiti administratoriai iš {{SITENAME}} vistiek galės pasiekti paslėptą turinį ir galės jį atkurti vėl per tą pačią sąsają, nebent yra nustatyti papildomi apribojimai.",
+'revdelete-text' => "'''Ištrintos versijos bei įvykiai vis tiek dar bus rodomi puslapio istorijoje ir specialiųjų veiksmų sąraše, bet jų turinio dalys nebus viešai prieinamos.'''
+Kiti administratoriai iš {{SITENAME}} vis tiek galės pasiekti paslėptą turinį ir galės jį atkurti per tą pačią sąsają, nebent yra nustatyti papildomi apribojimai.",
 'revdelete-confirm' => 'Prašome patvirtinti, kad jūs tai ketinate padaryti, kad jūs suprantate padarinius, ir kad jūs tai darote pagal [[{{MediaWiki:Policy-url}}|politiką]].',
 'revdelete-suppress-text' => "Ištrynimas turėtų būti taikomas '''tik''' šiais atvejais:
 * Netinkama asmeninė informacija
@@ -1078,7 +1078,7 @@ Prašome patikrinti sąrašus.',
 'revdelete-offender' => 'Versijos autorius:',
 
 # Suppression log
-'suppressionlog' => 'Trynimo istorija',
+'suppressionlog' => 'Trynimo sąrašas',
 'suppressionlogtext' => 'Žemiau yra trynimų ir blokavimų sąrašas, įtraukiant turinį, paslėptą nuo administratorių.
 Žiūrėkite [[Special:BlockList|blokavimų sąrašą]], kad rastumėte dabar veikiančius draudimus ir blokavimus.',
 
@@ -1107,7 +1107,7 @@ Prašome patikrinti sąrašus.',
 'mergehistory-reason' => 'Priežastis:',
 
 # Merge log
-'mergelog' => 'Sujungimų istorija',
+'mergelog' => 'Sujungimų sąrašas',
 'pagemerge-logentry' => 'sujungė [[$1]] su [[$2]] (versijos iki $3)',
 'revertmerge' => 'Atskirti',
 'mergelogpagetext' => 'Žemiau yra paskiausių vieno su kitu puslapių sujungimų sąrašas.',
@@ -1227,7 +1227,7 @@ Prašome patikrinti sąrašus.',
 'prefs-rendering' => 'Išvaizda',
 'saveprefs' => 'Išsaugoti',
 'resetprefs' => 'Išvalyti neišsaugotus pakeitimus',
-'restoreprefs' => 'Atstatyti visus numatytuosius nustatymus',
+'restoreprefs' => 'Grąžinti visus numatytuosius nustatymus',
 'prefs-editing' => 'Redagavimas',
 'prefs-edit-boxsize' => 'Redagavimo lango dydis.',
 'rows' => 'Eilutės:',
@@ -1239,7 +1239,7 @@ Prašome patikrinti sąrašus.',
 'recentchangesdays' => 'Rodomos dienos paskutinių keitimų sąraše:',
 'recentchangesdays-max' => '(daugiausiai $1 {{PLURAL:$1|diena|dienos|dienų}})',
 'recentchangescount' => 'Numatytasis rodomas keitimų skaičius:',
-'prefs-help-recentchangescount' => 'Į tai įeina naujausi keitimai, puslapių istorijos ir specialiųjų veiksmų istorijos.',
+'prefs-help-recentchangescount' => 'Į tai įeina naujausi keitimai, puslapių istorijos ir specialiųjų veiksmų sąrašai.',
 'prefs-help-watchlist-token' => 'Įrašius slaptą raktą į šį laukelį, bus sugeneruotas RSS srautas su jūsų stebimųjų sąrašu.
 Bet kas, žinantis šio lauko raktą, galės matyti jūsų stebimų sąrašą, todėl pasirinkite saugią reikšmę.
 Galite panaudoti šią atsitiktinai sugeneruotą reikšmę: $1',
@@ -1270,7 +1270,7 @@ Galite panaudoti šią atsitiktinai sugeneruotą reikšmę: $1',
 'prefs-custom-css' => 'Asmeninis CSS',
 'prefs-custom-js' => 'Asmeninis JavaSript',
 'prefs-common-css-js' => 'Bendras CSS/JS visoms išvaizdoms:',
-'prefs-reset-intro' => 'Jūs galite pasinaudoti šiuo puslapiu atstatyti jūsų nustatymus į svetainės numatytuosius.
+'prefs-reset-intro' => 'Jūs galite pasinaudoti šiuo puslapiu, kad grąžintumėte savo nustatymus į svetainės numatytuosius.
 Tai nebeatšaukiama.',
 'prefs-emailconfirm-label' => 'El. pašto patvirtinimas:',
 'prefs-textboxsize' => 'Redagavimo lango dydis',
@@ -1391,12 +1391,12 @@ teisės",
 'right-writeapi' => 'Naudoti rašymo API',
 'right-delete' => 'Trinti puslapius',
 'right-bigdelete' => 'Ištrinti puslapius su ilga istorija',
-'right-deleterevision' => 'Ištrinti ir atstatyti specifines puslapių versijas',
-'right-deletedhistory' => 'Žiūrėti ištrintų puslapių istoriją nerodant susieto teksto',
+'right-deleterevision' => 'Ištrinti ir atkurti specifines puslapių versijas',
+'right-deletedhistory' => 'Žiūrėti ištrintų puslapių istoriją, nerodant susieto teksto',
 'right-deletedtext' => 'Peržiūrėti ištrintą tekstą ir skirtumus tarp ištrintų puslapio versijų.',
 'right-browsearchive' => 'Ieškoti ištrintų puslapių',
-'right-undelete' => 'Atstatyti puslapį',
-'right-suppressrevision' => 'Peržiūrėti ir atstatyti versijas, paslėptas nuo administratorių',
+'right-undelete' => 'Atkurti puslapį',
+'right-suppressrevision' => 'Peržiūrėti ir atkurti versijas, paslėptas nuo administratorių',
 'right-suppressionlog' => 'Žiūrėti privačius įvykių sąrašus',
 'right-block' => 'Blokuoti redagavimo galimybę kitiems naudotojams',
 'right-blockemail' => 'Blokuoti elektroninio pašto siuntimo galimybę naudotojui',
@@ -1428,7 +1428,7 @@ teisės",
 'right-passwordreset' => 'Peržiūrėti slaptažodžio pakeitimo e-mail laiškus',
 
 # User rights log
-'rightslog' => 'Naudotojų teisių istorija',
+'rightslog' => 'Naudotojų teisių pakeitimai',
 'rightslogtext' => 'Pateikiamas naudotojų teisių pakeitimų sąrašas.',
 'rightslogentry' => 'pakeista $1 grupės narystė iš $2 į $3',
 'rightslogentry-autopromote' => 'buvo automatiškai paaukštintas iš $2 į $3',
@@ -1455,7 +1455,7 @@ teisės",
 'action-deletedhistory' => 'žiūrėti šio ištrinto puslapio istoriją',
 'action-browsearchive' => 'ieškoti ištrintų puslapių',
 'action-undelete' => 'atkurti šį puslapį',
-'action-suppressrevision' => 'peržiūrėti ir atstatyti šią paslėptą reviziją',
+'action-suppressrevision' => 'peržiūrėti ir atkurti šią paslėptą versiją',
 'action-suppressionlog' => 'peržiūrėti šį privatų registrą',
 'action-block' => 'neleisti šiam naudotojui redaguoti',
 'action-protect' => 'pakeisti apsaugos lygius šiam puslapiui',
@@ -1531,8 +1531,8 @@ Puslapiai iš jūsų [[Special:Watchlist|stebimųjų sąrašo]] yra '''paryškin
 'upload-recreate-warning' => "'''Dėmėsio: Failas šiuo pavadinimu buvo ištrintas arba pervadintas.'''
 
 Jūsų patogumui pateiktas įrašas apie šio puslapio trynimą ar pervadinimą:",
-'uploadtext' => "Naudokitės žemiau pateikta forma failų įkėlimui.
-Norėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių, eikite į [[Special:FileList|įkeltų failų sąrašą]], įkėlimai yra registruojami [[Special:Log/upload|įkėlimų istorijoje]], trynimai — [[Special:Log/delete|trynimų istorijoje]].
+'uploadtext' => "Kad įkeltumėte failą, naudokitės žemiau pateikta forma.
+Norėdami peržiūrėti ar ieškoti anksčiau įkeltų paveikslėlių, eikite į [[Special:FileList|įkeltų failų sąrašą]], įkėlimai yra registruojami [[Special:Log/upload|įkėlimų sąraše]], trynimai — [[Special:Log/delete|trynimų sąraše]].
 
 Norėdami panaudoti įkeltą failą puslapyje, naudokite tokias nuorodas:
 * '''<tt><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Failas.jpg]]</nowiki></tt>''' norėdami naudoti pilną failo versiją
@@ -1541,9 +1541,10 @@ Norėdami panaudoti įkeltą failą puslapyje, naudokite tokias nuorodas:
 'upload-permitted' => 'Leidžiami failų tipai: $1.',
 'upload-preferred' => 'Pageidautini failų tipai: $1.',
 'upload-prohibited' => 'Uždrausti failų tipai: $1.',
-'uploadlog' => 'įkėlimų istorija',
-'uploadlogpage' => 'Įkėlimų istorija',
-'uploadlogpagetext' => 'Žemiau pateikiamas paskutinių failų įkėlimų istorija.',
+'uploadlog' => 'įkėlimų sąrašas',
+'uploadlogpage' => 'Įkėlimų sąrašas',
+'uploadlogpagetext' => 'Žemiau pateikiamas paskutinių failų įkėlimų sąrašas.
+Taip pat galite peržvelgti [[Special:NewFiles|naujausių failų galeriją]].',
 'filename' => 'Failo vardas',
 'filedesc' => 'Aprašymas',
 'fileuploadsummary' => 'Komentaras:',
@@ -1737,8 +1738,8 @@ Dėl saugumo, img_auth.php yra išjungtas.',
 'upload_source_file' => ' (failas jūsų kompiuteryje)',
 
 # Special:ListFiles
-'listfiles-summary' => 'This special page shows all uploaded files.
-When filtered by user, only files where that user uploaded the most recent version of the file are shown.',
+'listfiles-summary' => 'Šiame specialiame puslapyje rodomi visi įkelti failai.
+Kai sąrašas susiaurinamas pagal naudotoją, rodomi tik tie failai, kurių naujausią versiją jis yra įkėlęs.',
 'listfiles_search_for' => 'Ieškoti failo pavadinimo:',
 'imgfile' => 'failas',
 'listfiles' => 'Failų sąrašas',
@@ -1855,7 +1856,7 @@ Informacija iš [$2 failo aprašymo puslapio] yra pateikiama žemiau.',
 'statistics-pages-desc' => 'Visi puslapiai, tarp jų aptarimo, nukreipimų, ir kiti puslapiai.',
 'statistics-files' => 'Įkelti failai',
 'statistics-edits' => 'Puslapių redagavimų skaičius nuo {{SITENAME}} sukūrimo',
-'statistics-edits-average' => 'Vidutinis puslapių keitimų kiekis',
+'statistics-edits-average' => 'Vidutinis puslapio keitimų skaičius',
 'statistics-views-total' => 'Iš viso peržiūrų',
 'statistics-views-total-desc' => 'Neegzistuojančių ir specialiųjų puslapių parodymai neįtraukti',
 'statistics-views-peredit' => 'Peržiūrų skaičius puslapio versijai',
@@ -1968,12 +1969,13 @@ Primename, kad kitos svetainės gali turėti tiesioginę nuorodą į failą, bet
 # Special:Log
 'specialloguserlabel' => 'Naudotojas:',
 'speciallogtitlelabel' => 'Pavadinimas:',
-'log' => 'Specialiųjų veiksmų istorija',
-'all-logs-page' => 'Visos viešosios istorijos',
-'alllogstext' => 'Bendras visų galimų „{{SITENAME}}“ specialiųjų veiksmų istorijų rodinys.
-Galima sumažinti rezultatų skaičių patikslinant veiksmo rūšį, naudotoją ar susijusį puslapį.',
-'logempty' => 'Istorijoje nėra jokių atitinkančių įvykių.',
+'log' => 'Specialiųjų veiksmų sąrašas',
+'all-logs-page' => 'Visi viešieji sąrašai',
+'alllogstext' => 'Bendrai pateikiamas visų galimų „{{SITENAME}}“ specialiųjų veiksmų sąrašas.
+Galima sumažinti rezultatų skaičių, patikslinant veiksmo rūšį, naudotoją ar susijusį puslapį.',
+'logempty' => 'Sąraše nėra jokių atitinkančių įvykių.',
 'log-title-wildcard' => 'Ieškoti pavadinimų, prasidedančių šiuo tekstu',
+'showhideselectedlogentries' => 'Rodyti/slėpti pasirinktus sąrašo elementus',
 
 # Special:AllPages
 'allpages' => 'Visi puslapiai',
@@ -2120,7 +2122,7 @@ taip pat bus '''paryškinti''' [[Special:RecentChanges|naujausių keitimų sąra
 'watchlist-details' => 'Stebima {{PLURAL:$1|$1 puslapis|$1 puslapiai|$1 puslapių}} neskaičiuojant aptarimų puslapių.',
 'wlheader-enotif' => '* El. pašto priminimai yra įjungti.',
 'wlheader-showupdated' => "* Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra pažymėti '''pastorintai'''",
-'watchmethod-recent' => 'tikrinami paskutiniai keitimai stebimiems puslapiams',
+'watchmethod-recent' => 'tikrinami naujausi stebimųjų puslapių pakeitimai',
 'watchmethod-list' => 'ieškoma naujausių keitimų stebimuose puslapiuose',
 'watchlistcontains' => 'Jūsų stebimųjų sąraše yra $1 {{PLURAL:$1|puslapis|puslapiai|puslapių}}.',
 'iteminvalidname' => 'Problema su elementu „$1“, neteisingas vardas...',
@@ -2185,14 +2187,14 @@ Atsiliepimai ir pagalba:
 'delete-legend' => 'Trynimas',
 'historywarning' => "'''Dėmesio:''' Trinamas puslapis turi istoriją su maždaug $1 {{PLURAL:$1|versija|versijomis|versijų}}:",
 'confirmdeletetext' => 'Jūs pasirinkote ištrinti puslapį ar paveikslėlį kartu su visa jo istorija.
-Prašome patvirtinti, kad jūs tikrai norite tai padaryti, žinote apie galimus padarinius, ir kad jūs tai darote atsižvelgdami į [[{{MediaWiki:Policy-url}}|politiką]].',
+Prašome patvirtinti, kad jūs tikrai norite tai padaryti, žinote apie galimus padarinius ir kad tai darote pagal [[{{MediaWiki:Policy-url}}|taisykles]].',
 'actioncomplete' => 'Veiksmas atliktas',
 'actionfailed' => 'Veiksmas atšauktas',
 'deletedtext' => '„$1“ ištrintas.
 Paskutinių šalinimų istorija - $2.',
-'dellogpage' => 'Šalinimų istorija',
+'dellogpage' => 'Šalinimų sąrašas',
 'dellogpagetext' => 'Žemiau pateikiamas paskutinių trynimų sąrašas.',
-'deletionlog' => 'šalinimų istorija',
+'deletionlog' => 'šalinimų sąrašas',
 'reverted' => 'Atkurta į ankstesnę versiją',
 'deletecomment' => 'Priežastis:',
 'deleteotherreason' => 'Kita/papildoma priežastis:',
@@ -2227,8 +2229,8 @@ grąžinta prieš tai buvusi $2 versija.',
 Prašome paspausti „atgal“ ir perkraukite puslapį iš kurio atėjote, ir pamėginkite vėl.',
 
 # Protect
-'protectlogpage' => 'Rakinimų istorija',
-'protectlogtext' => 'Žemiau yra puslapių užrakinimų bei atrakinimų istorija.
+'protectlogpage' => 'Rakinimų sąrašas',
+'protectlogtext' => 'Žemiau yra puslapių užrakinimų bei atrakinimų sąrašas.
 Dabar veikiančių puslapių apsaugų sąrašą rasite [[Special:ProtectedPages|apsaugotų puslapių sąraše]].',
 'protectedarticle' => 'užrakino „[[$1]]“',
 'modifiedarticleprotection' => 'pakeistas „[[$1]]“ apsaugos lygis',
@@ -2270,9 +2272,10 @@ Dabar veikiančių puslapių apsaugų sąrašą rasite [[Special:ProtectedPages|
 'protect-otherreason-op' => 'Kita priežastis',
 'protect-dropdown' => '*Įprastos užrakinimo priežastys
 ** Intensyvus vandalizmas
-** Intensyvus nuorodų reklamavimas
-** Neproduktyvus redagavimo karas
-** Didelės svarbos puslapis',
+** Nuolatinis nepageidautinų nuorodų dėliojimas
+** Beprasmis redagavimo karas
+** Didelės svarbos puslapis
+** Pakartotinis ištrinto puslapio atkūrinėjimas',
 'protect-edit-reasonlist' => 'Keisti užrakinimo priežastis',
 'protect-expiry-options' => '1 valanda:1 hour,1 diena:1 day,1 savaitė:1 week,2 savaitės:2 weeks,1 mėnuo:1 month,3 mėnesiai:3 months,6 mėnesiai:6 months,1 metai:1 year,neribotai:infinite',
 'restriction-type' => 'Leidimas:',
@@ -2293,15 +2296,15 @@ Dabar veikiančių puslapių apsaugų sąrašą rasite [[Special:ProtectedPages|
 'restriction-level-all' => 'bet koks',
 
 # Undelete
-'undelete' => 'Atstatyti ištrintą puslapį',
+'undelete' => 'Atkurti ištrintą puslapį',
 'undeletepage' => 'Rodyti ir atkurti ištrintus puslapius',
 'undeletepagetitle' => "'''Tai sudaryta iš ištrintų [[:$1]] versijų'''.",
 'viewdeletedpage' => 'Rodyti ištrintus puslapius',
 'undeletepagetext' => '{{PLURAL:$1|Šis $1 puslapis buvo ištrintas|Šie $1 puslapiai buvo ištrinti|Šie $1 puslapių buvo ištrinti}}, bet dar yra archyve ir gali būti {{PLURAL:$1|atkurtas|atkurti|atkurti}}.
 Archyvas gali būti periodiškai valomas.',
-'undelete-fieldset-title' => 'Atstatyti versijas',
+'undelete-fieldset-title' => 'Atkurti versijas',
 'undeleteextrahelp' => "Norėdami atkurti visą puslapio istoriją, palikite visas varneles nepažymėtas ir spauskite '''''{{int:undeletebtn}}'''''.
-Norėdami atlikti pasirinktinį atstatymą, pažymėkite varneles tų versijų, kurias norėtumėte atstatyti, ir spauskite '''''{{int:undeletebtn}}'''''.",
+Norėdami atlikti pasirinktinį atkūrimą, pažymėkite varneles tų versijų, kurias norėtumėte atkurti, ir spauskite '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|versija|versijos|versijų}} suarchyvuota',
 'undeletehistory' => 'Jei atstatysite puslapį, istorijoje bus atstatytos visos versijos.
 Jei po ištrynimo buvo sukurtas puslapis tokiu pačiu pavadinimu, atstatytos versijos atsiras ankstesnėje istorijoje.',
@@ -2312,7 +2315,7 @@ Tokiais atvejais, jums reikia atžymėti arba atslėpti naujausią ištrintą ve
 'undeleterevision-missing' => 'Neteisinga arba dingusi versija. Jūs turbūt turite blogą nuorodą, arba versija buvo atkurta arba pašalinta iš archyvo.',
 'undelete-nodiff' => 'Nerasta jokių ankstesnių versijų.',
 'undeletebtn' => 'Atkurti',
-'undeletelink' => 'žiūrėti/atstatyti',
+'undeletelink' => 'žiūrėti/atkurti',
 'undeleteviewlink' => 'žiūrėti',
 'undeletereset' => 'Iš naujo',
 'undeleteinvert' => 'Žymėti priešingai',
@@ -2324,7 +2327,7 @@ Tokiais atvejais, jums reikia atžymėti arba atslėpti naujausią ištrintą ve
 'undeletedpage' => "'''$1 buvo atkurtas'''
 
 Peržiūrėkite [[Special:Log/delete|trynimų sąrašą]], norėdami rasti paskutinių trynimų ir atkūrimų sąrašą.",
-'undelete-header' => 'Žiūrėkite [[Special:Log/delete|trynimo istorijoje]] paskiausiai ištrintų puslapių.',
+'undelete-header' => 'Kad sužinotumėte, kurie puslapiai paskiausiai ištrinti, žiūrėkite [[Special:Log/delete|šalinimų sąrašą]].',
 'undelete-search-title' => 'Panaikintų puslapių paieška',
 'undelete-search-box' => 'Ieškoti ištrintų puslapių',
 'undelete-search-prefix' => 'Rodyti puslapius pradedant su:',
@@ -2345,9 +2348,9 @@ $1',
 # Namespace form on various pages
 'namespace' => 'Vardų sritis:',
 'invert' => 'Žymėti priešingai',
-'tooltip-invert' => 'Įjunkite šią parinktį jei norite paslėpti nurodytos vardų srities (ir susijusių, jei įjungta parinktis) puslapių pakeitimus',
-'namespace_association' => 'Susiję vardų',
-'tooltip-namespace_association' => 'Įjunkite šią parinktį, kad taipogi įtrauktumėte pokalbių arba temos sritį, susieta su pasirinkta sritimi',
+'tooltip-invert' => 'Įjunkite šią parinktį, jei norite paslėpti nurodytos vardų srities (ir susijusių, jei įjungta parinktis) puslapių pakeitimus',
+'namespace_association' => 'Susijusi vardų sritis',
+'tooltip-namespace_association' => 'Įjunkite šią parinktį, kad taip pat įtrauktumėte aptarimų arba temos sritį, susijusią su pasirinkta sritimi',
 'blanknamespace' => '(Pagrindinė)',
 
 # Contributions
@@ -2360,13 +2363,13 @@ $1',
 'month' => 'Nuo mėnesio (ir anksčiau):',
 'year' => 'Nuo metų (ir anksčiau):',
 
-'sp-contributions-newbies' => 'Rodyti tik naujų paskyrų įnašus',
-'sp-contributions-newbies-sub' => 'Naujoms paskyroms',
-'sp-contributions-newbies-title' => 'Naudotojų keitimai naujoms paskyroms',
-'sp-contributions-blocklog' => 'Blokavimų istorija',
+'sp-contributions-newbies' => 'Rodyti tik naujų paskyrų keitimus',
+'sp-contributions-newbies-sub' => 'Neseniai prisiregistravusieji',
+'sp-contributions-newbies-title' => 'Naujai užsiregistravusių naudotojų indėlis',
+'sp-contributions-blocklog' => 'Blokavimų sąrašas',
 'sp-contributions-deleted' => 'ištrintas naudotojo indėlis',
 'sp-contributions-uploads' => 'nuotraukos',
-'sp-contributions-logs' => 'Specialiųjų veiksmų istorija',
+'sp-contributions-logs' => 'Specialiųjų veiksmų sąrašas',
 'sp-contributions-talk' => 'Aptarimas',
 'sp-contributions-userrights' => 'naudotojų teisių valdymas',
 'sp-contributions-blocked-notice' => 'Šis naudotojas šiuo metu užblokuotas.
@@ -2398,30 +2401,30 @@ Paskutinis blokavimo įrašas pateikiamas žemiau:',
 'whatlinkshere-filters' => 'Filtrai',
 
 # Block/unblock
-'autoblockid' => 'Autoblock # $1',
+'autoblockid' => 'Automatinis blokavimas # $1',
 'block' => 'Blokuoti naudotoją',
 'unblock' => 'Atblokuoti naudotoją',
 'blockip' => 'Blokuoti naudotoją',
 'blockip-title' => 'Blokuoti naudotoją',
 'blockip-legend' => 'Blokuoti naudotoją',
-'blockiptext' => 'Naudokite šią formą norėdami uždrausti rašymo teises nurodytui IP adresui ar naudotojui. Tai turėtų būti atliekama tam, kad sustabdytumėte vandalizmą, ir pagal [[{{MediaWiki:Policy-url}}|politiką]].
-Žemiau nurodykite tikslią priežastį (pavyzdžiui, nurodydami sugadintus puslapius).',
+'blockiptext' => 'Naudokite šią formą, kad uždraustumėte redagavimo prieigą pasirinktam IP adresui ar naudotojui. Tai turėtų būti atliekama tik tam, kad sustabdytumėte vandalizmą, ir neprieštarauti [[{{MediaWiki:Policy-url}}|projekte galiojančioms taisyklėms]].
+Žemiau pateikite tikslią priežastį (pavyzdžiui, nurodydami sugadintus puslapius).',
 'ipadressorusername' => 'IP adresas arba naudotojo vardas',
 'ipbexpiry' => 'Galiojimo laikas',
 'ipbreason' => 'Priežastis:',
 'ipbreasonotherlist' => 'Kita priežastis',
 'ipbreason-dropdown' => '*Bendrosios blokavimo priežastys
-** Melagingos informacijos įterpimas
+** Klaidingos informacijos įterpimas
 ** Turinio šalinimas iš puslapių
 ** Kitų svetainių reklamavimas
-** Nesąmonių/bet ko įterpimas į puslapius
-** GÄ\85sdinimai/Ä®žeidinėjimai
+** Nesusijusio arba beprasmio teksto įterpimas į puslapius
+** GÄ\85sdinimai/įžeidinėjimai
 ** Piktnaudžiavimas keliomis paskyromis
 ** Nepriimtinas naudotojo vardas',
-'ipb-hardblock' => 'Neleisti prisijungusius naudotojus nuo redagavimo iš šio IP adreso',
+'ipb-hardblock' => 'Neleisti prisijungusiems naudotojams redaguoti iš šio IP adreso',
 'ipbcreateaccount' => 'Neleisti kurti paskyrų',
 'ipbemailban' => 'Neleisti naudotojui siųsti el. pašto',
-'ipbenableautoblock' => 'Automatiškai blokuoti šio naudotojo paskiausiai naudotą IP adresą, bei bet kokius vėlesnius IP adresus, iš kurių jie mėgina redaguoti',
+'ipbenableautoblock' => 'Automatiškai blokuoti paskutinį naudotojo naudotą IP adresą ir visus kitus adresus, iš kurių jis bandys redaguoti',
 'ipbsubmit' => 'Blokuoti šį naudotoją',
 'ipbother' => 'Kitoks laikas',
 'ipboptions' => '2 valandos:2 hours,1 diena:1 day,3 dienos:3 days,1 savaitė:1 week,2 savaitės:2 weeks,1 mėnesis:1 month,3 mėnesiai:3 months,6 mėnesiai:6 months,1 metai:1 year,neribotai:infinite',
@@ -2429,22 +2432,22 @@ Paskutinis blokavimo įrašas pateikiamas žemiau:',
 'ipbotherreason' => 'Kita/papildoma priežastis',
 'ipbhidename' => 'Slėpti naudotojo vardą keitimuose bei sąrašuose',
 'ipbwatchuser' => 'Stebėti šio naudotojo puslapį ir jo aptarimų puslapį',
-'ipb-disableusertalk' => 'Neleiskite šiam nuo redagavimo savo aptarimų puslapis naudotojui užblokuotas',
-'ipb-change-block' => 'Perblokuoti šį naudotoją su šiais nustatymais',
-'ipb-confirm' => 'Patvirtinkite blokas',
+'ipb-disableusertalk' => 'Neleisti redaguoti savo naudotojo aptarimo puslapio',
+'ipb-change-block' => 'Iš naujo užblokuoti naudotoją, naudojant šiuos nustatymus',
+'ipb-confirm' => 'Patvirtinkite blokavimą',
 'badipaddress' => 'Neleistinas IP adresas',
 'blockipsuccesssub' => 'Užblokavimas pavyko',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] buvo užblokuotas.<br />
 Aplankykite [[Special:BlockList|IP blokavimų istoriją]] norėdami jį peržiūrėti.',
-'ipb-blockingself' => 'Jūs ruošiatės blokuoti sau! Ar tikrai norite tai padaryti?',
-'ipb-confirmhideuser' => 'Jūs ruošiatės užblokuoti tam tikro vartotojo su "slėpti vartotojo" įjungtas. Tai bus nuslopinti vartotojo vardą visuose sąrašuose ir žurnalo įrašus. Ar tikrai norite tai padaryti?',
+'ipb-blockingself' => 'Jūs ruošiatės užblokuoti save! Ar tikrai norite tai padaryti?',
+'ipb-confirmhideuser' => 'Jūs ruošiatės užblokuoti naudotoją, pasirinkę „slėpti naudotoją“ nustatymą. Tai paslėps naudotojo vardą visuose sąrašuose ir žurnalo įrašuose. Ar tikrai norite tai padaryti?',
 'ipb-edit-dropdown' => 'Redaguoti blokavimų priežastis',
 'ipb-unblock-addr' => 'Atblokuoti $1',
 'ipb-unblock' => 'Atblokuoti naudotojo vardą arba IP adresą',
-'ipb-blocklist' => 'Rodyti egzistuončius blokavimus',
+'ipb-blocklist' => 'Rodyti egzistuojančius blokavimus',
 'ipb-blocklist-contribs' => '$1 indėlis',
 'unblockip' => 'Atblokuoti naudotoją',
-'unblockiptext' => 'Naudokite šią formą, kad atkurtumėte rašymo teises
+'unblockiptext' => 'Naudokite šią formą, kad atkurtumėte redagavimo galimybę
 ankščiau užblokuotam IP adresui ar naudotojui.',
 'ipusubmit' => 'Atblokuoti šį adresą',
 'unblocked' => '[[User:$1|$1]] buvo atblokuotas',
@@ -2453,15 +2456,15 @@ ankščiau užblokuotam IP adresui ar naudotojui.',
 'blocklist' => 'Blokuoti naudotojai',
 'ipblocklist' => 'Blokuoti naudotojai',
 'ipblocklist-legend' => 'Rasti užblokuotą naudotoją',
-'blocklist-userblocks' => 'Slėpti į blokus',
+'blocklist-userblocks' => 'Slėpti paskyrų blokavimus',
 'blocklist-tempblocks' => 'Slėpti laikinus blokavimus',
-'blocklist-addressblocks' => 'Slėpti vieną IP blokų',
-'blocklist-rangeblocks' => 'Slėpti diapazono blokai',
-'blocklist-timestamp' => 'Laiko žymė',
-'blocklist-target' => 'Tikslinė',
+'blocklist-addressblocks' => 'Slėpti vieno IP adreso blokavimus',
+'blocklist-rangeblocks' => 'Slėpti IP adresų sričių blokavimus',
+'blocklist-timestamp' => 'Laiko žyma',
+'blocklist-target' => 'Užblokuotasis',
 'blocklist-expiry' => 'Galioja iki',
-'blocklist-by' => 'Blokavimo admin',
-'blocklist-params' => 'Blokuoti duomenys',
+'blocklist-by' => 'Užblokavęs administratorius',
+'blocklist-params' => 'Blokavimo nustatymai',
 'blocklist-reason' => 'Priežastis',
 'ipblocklist-submit' => 'Ieškoti',
 'ipblocklist-localblock' => 'Vietinis blokavimas',
@@ -2474,14 +2477,14 @@ ankščiau užblokuotam IP adresui ar naudotojui.',
 'emailblock' => 'el. paštas užblokuotas',
 'blocklist-nousertalk' => 'negali redaguoti savo aptarimų puslapio',
 'ipblocklist-empty' => 'Blokavimų sąrašas tuščias.',
-'ipblocklist-no-results' => 'Prašomas IP adresas ar naudotojo vardas nėra užblokuotas.',
+'ipblocklist-no-results' => 'Pasirinktas IP adresas ar naudotojo vardas nėra užblokuotas.',
 'blocklink' => 'blokuoti',
 'unblocklink' => 'atblokuoti',
 'change-blocklink' => 'keisti blokavimo nustatymus',
 'contribslink' => 'įnašas',
-'emaillink' => 'pasiųsti e-mail laišką',
+'emaillink' => 'siųsti el. laišką',
 'autoblocker' => 'Jūs buvote automatiškai užblokuotas, nes jūsų IP adresą neseniai naudojo „[[User:$1|$1]]“. Nurodyta naudotojo $1 blokavimo priežastis: „$2“.',
-'blocklogpage' => 'Blokavimų istorija',
+'blocklogpage' => 'Blokavimų sąrašas',
 'blocklog-showlog' => 'Šis naudotojas buvo užblokuotas.
 Pateikiamas paskutinis blokavimo istorijos įrašas.',
 'blocklog-showsuppresslog' => 'Šis naudotojas buvo užblokuotas ir paslėptas anksčiau.
@@ -2499,26 +2502,26 @@ Jei norite pamatyti dabar blokuojamus adresus, žiūrėkite [[Special:BlockList|
 'block-log-flags-nousertalk' => 'negali redaguoti savo naudotojo aptarimo puslapio',
 'block-log-flags-angry-autoblock' => 'išplėstasis automatinis blokavimas įjungtas',
 'block-log-flags-hiddenname' => 'naudotojo vardas paslėptas',
-'range_block_disabled' => 'Administratoriaus galimybė kurti intevalinius blokus yra išjungta.',
+'range_block_disabled' => 'Administratoriams neleidžiama blokuoti IP adresų sričių.',
 'ipb_expiry_invalid' => 'Galiojimo laikas neleistinas.',
-'ipb_expiry_temp' => 'Paslėptų naudotojų vardų blokavimas turi būti nuolatinis.',
+'ipb_expiry_temp' => 'Paslėptų naudotojų vardų blokavimas turi būti neribotas.',
 'ipb_hide_invalid' => 'Negalima paslėpti šios paskyros; ji gali turėti per daug keitimų.',
 'ipb_already_blocked' => '„$1“ jau užblokuotas',
 'ipb-needreblock' => '$1 jau yra užblokuotas. Ar norite pakeisti nustatymus?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Kitas blokavimas|Kiti blokavimai}}',
-'unblock-hideuser' => 'Jūs negalite atblokuoti vartotoją, nes jų vardas buvo paslėpta.',
+'unblock-hideuser' => 'Jūs negalite atblokuoti šio naudotojo, nes jo vardas buvo paslėptas.',
 'ipb_cant_unblock' => 'Klaida: Blokavimo ID $1 nerastas. Galbūt jis jau atblokuotas.',
 'ipb_blocked_as_range' => 'Klaida: IP $1 nebuvo užblokuotas tiesiogiai, tad negali būti atblokuotas. Tačiau jis buvo užblokuotas kaip srities $2 dalis, kuri gali būti atblokuota.',
 'ip_range_invalid' => 'Neleistina IP sritis.',
 'ip_range_toolarge' => 'Didesni nei /$1 blokai neleidžiami.',
 'blockme' => 'Užblokuoti mane',
-'proxyblocker' => 'Tarpinių serverių blokuotojas',
+'proxyblocker' => 'Tarpinių serverių („proxy“) blokavimo priemonė',
 'proxyblocker-disabled' => 'Ši funkcija yra išjungta.',
 'proxyblockreason' => 'Jūsų IP adresas yra užblokuotas, nes jis yra atvirasis tarpinis serveris. Prašome susisiekti su savo interneto paslaugų tiekėju ar technine pagalba ir praneškite jiems apie šią svarbią saugumo problemą.',
 'proxyblocksuccess' => 'Atlikta.',
 'sorbsreason' => 'Jūsų IP adresas yra įtrauktas į atvirųjų tarpinių serverių DNSBL sąrašą, naudojamą šios svetainės.',
 'sorbs_create_account_reason' => 'Jūsų IP adresas yra įtrauktas į atvirųjų tarpinių serverių DNSBL sąrašą, naudojamą šios svetainės. Jūs negalite sukurti paskyros',
-'cant-block-while-blocked' => 'Jūs negalite blokuoti kitų naudotojų kuomet pats esate užblokuotas.',
+'cant-block-while-blocked' => 'Jūs negalite blokuoti kitų naudotojų, pats būdamas užblokuotas.',
 'cant-see-hidden-user' => 'Naudotojas, kurį bandote užblokuoti, jau yra užblokuotas arba paslėptas.
 Kadangi jūs neturi hideuser teisės, jūs negalite pamatyti arba pakeisti naudotojo blokavimo.',
 'ipbblocked' => 'Jūs negalite blokuoti ar atblokuoti kitų naudotojų, nes pats esate užblokuotas',
@@ -2589,7 +2592,7 @@ dėl to šį veiksmą vykdykite tik įsitikinę, kad suprantate visas pasekmes."
 
 Šiais atvejais jūs savo nuožiūra turite perkelti arba apjungti aptarimo puslapį.",
 'movearticle' => 'Pervardinti puslapį:',
-'moveuserpage-warning' => "'''Dėmesio:''' Jūs ruošiatės perkelti naudotojo puslapį. Atkreipkite dėmesį, kad bus perkeltas tik puslapis, naudotojas ''nebus'' pervadintas.",
+'moveuserpage-warning' => "'''Dėmesio:''' Jūs ruošiatės perkelti naudotojo puslapį. Atkreipkite dėmesį, kad bus perkeltas tik puslapis, naudotojas ''nebus'' pervadintas.",
 'movenologin' => 'Neprisijungęs',
 'movenologintext' => 'Norėdami pervadinti puslapį, turite būti užsiregistravęs naudotojas ir būti  [[Special:UserLogin|prisijungęs]].',
 'movenotallowed' => 'Jūs neturite teisių pervadinti puslapių.',
@@ -2618,7 +2621,7 @@ Prašome sujungti šiuos puslapius.'''",
 'movepage-page-moved' => 'Puslapis $1 perkeltas į $2.',
 'movepage-page-unmoved' => 'Puslapio $1 negalima perkelti į $2.',
 'movepage-max-pages' => 'Daugiausiai $1 {{PLURAL:$1|puslapis buvo perkeltas|puslapiai buvo perkelti|puslapių buvo perkelta}} ir daugiau nebus perkelta automatiškai.',
-'movelogpage' => 'Pervardinimų istorija',
+'movelogpage' => 'Perkėlimų sąrašas',
 'movelogpagetext' => 'Pervardintų puslapių sąrašas.',
 'movesubpage' => '{{PLURAL:$1|Subpuslapis|Subpuslapiai}}',
 'movesubpagetext' => 'Žemiau yra šio puslapio $1 {{PLURAL:$1|subpuslapis|subpuslapiai|subpuslapių}}.',
@@ -2750,7 +2753,7 @@ Išsaugokite jį savo kompiuteryje ir įkelkite jį čia.',
 'import-error-invalid' => 'Puslapis "$1" nebuvo įkeltas, kadangi jo vardas yra neteisingas.',
 
 # Import log
-'importlogpage' => 'Importo istorija',
+'importlogpage' => 'Importavimų sąrašas',
 'importlogpagetext' => 'Administraciniai puslapių importai su keitimų istorija iš kitų wiki projektų.',
 'import-logentry-upload' => 'importuota $1 įkeliant failą',
 'import-logentry-upload-detail' => '$1 {{PLURAL:$1|keitimas|keitimai|keitimų}}',
@@ -2862,7 +2865,7 @@ Leidžia pridėti atmetimo priežastį komentaruose',
 
 # Spam protection
 'spamprotectiontitle' => 'Priešreklaminis filtras',
-'spamprotectiontext' => 'Puslapis, kurį norėjote išsaugoti buvo užblokuotas priešreklaminio filtro. Tai turbūt sukėlė nuoroda į juodajame sąraše esančią svetainę.',
+'spamprotectiontext' => 'Tekstas, kurį norėjote išsaugoti, buvo užblokuotas priešreklaminio filtro. Taip turbūt įvyko dėl nuorodos į juodajame sąraše esančią svetainę.',
 'spamprotectionmatch' => 'Šis tekstas buvo atpažintas priešreklaminio filtro: $1',
 'spambot_username' => 'MediaWiki reklamų šalinimas',
 'spam_reverting' => 'Atkuriama į ankstesnę versiją, neturinčios nuorodų į $1',
@@ -2905,7 +2908,7 @@ Leidžia pridėti atmetimo priežastį komentaruose',
 'markedaspatrollederror-noautopatrol' => 'Jums neleidžiama pažymėti savo paties keitimų kaip patikrintų.',
 
 # Patrol log
-'patrol-log-page' => 'Patikrinimo istorija',
+'patrol-log-page' => 'Patikrinimų sąrašas',
 'patrol-log-header' => 'Tai patvirtintų versijų sąrašas.',
 'log-show-hide-patrol' => '$1 patvirtinimų sąrašą',
 
@@ -3687,8 +3690,8 @@ Paveikslėliai yra rodomi pilna raiška, kiti failų tipai paleidžiami tiesiogi
 'sqlite-no-fts' => '$1 be visatekstės paieškos palaikymo',
 
 # New logging system
-'logentry-delete-delete' => '$1 panaikino puslapį $3',
-'logentry-delete-restore' => '$1 atstatė puslapį $3',
+'logentry-delete-delete' => '$1 ištrynė puslapį $3',
+'logentry-delete-restore' => '$1 atkūrė puslapį $3',
 'revdelete-content-hid' => 'turinys paslėptas',
 'revdelete-summary-hid' => 'paslėptas keitimo komentaras',
 'revdelete-uname-hid' => 'paslėptas naudotojo vardas',
index 497b6c4..69f914d 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Latgalian (Latgaļu)
+/** Latgalian (latgaļu)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index e25ebbd..a8ceae4 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Moksha (Ð\9cокшень)
+/** Moksha (мокшень)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 42ca8c7..43047f5 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Eastern Mari (Ð\9eлÑ\8bк Ð\9cарий)
+/** Eastern Mari (олÑ\8bк Ð¼арий)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 402ae7f..97f612f 100644 (file)
@@ -342,17 +342,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Овозможи уредување на заглавија со десен клик на нивниот наслов (JavaScript)',
 'tog-showtoc' => 'Покажи содржина (за страници со повеќе од 3 заглавија)',
 'tog-rememberpassword' => 'Запомни ме на овој прелистувач (највеќе до $1 {{PLURAL:$1|ден|дена}})',
-'tog-watchcreations' => 'Додавај ги страниците што ги создавам во списокот на набљудувања',
-'tog-watchdefault' => 'Додавај ги страниците што ги уредувам во списокот на набљудувања',
-'tog-watchmoves' => 'Додавај ги страниците што ги преместувам во списокот на набљудувања',
-'tog-watchdeletion' => 'Додавај ги страниците што ги бришам во списокот на набљудувања',
+'tog-watchcreations' => 'Ð\94одаваÑ\98 Ð³Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е Ñ\88Ñ\82о Ð³Ð¸ Ñ\81оздавам Ð¸ Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82екиÑ\82е Ñ\88Ñ\82о Ð³Ð¸ Ð¿Ð¾Ð´Ð¸Ð³Ð°Ð¼ Ð²Ð¾ Ñ\81пиÑ\81окоÑ\82 Ð½Ð° Ð½Ð°Ð±Ñ\99Ñ\83дÑ\83ваÑ\9aа',
+'tog-watchdefault' => 'Додавај ги страниците и податотеките што ги уредувам во списокот на набљудувања',
+'tog-watchmoves' => 'Додавај ги страниците и податотеките што ги преместувам во списокот на набљудувања',
+'tog-watchdeletion' => 'Додавај ги страниците и податотеките што ги бришам во списокот на набљудувања',
 'tog-minordefault' => 'Обележувај ги сите уредувања како ситни по основно',
 'tog-previewontop' => 'Прикажи го прегледот пред кутијата за уредување',
 'tog-previewonfirst' => 'Прикажи преглед на првото уредување',
 'tog-nocache' => 'Оневозможи кеширање на страниците во прелистувачот',
-'tog-enotifwatchlistpages' => 'Испраќај ми е-пошта при промена на страница од мојот список на набљудувања',
+'tog-enotifwatchlistpages' => 'Ð\98Ñ\81пÑ\80аÑ\9cаÑ\98 Ð¼Ð¸ Ðµ-поÑ\88Ñ\82а Ð¿Ñ\80и Ð¿Ñ\80омена Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð»Ð¸ Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82ека Ð¾Ð´ Ð¼Ð¾Ñ\98оÑ\82 Ñ\81пиÑ\81ок Ð½Ð° Ð½Ð°Ð±Ñ\99Ñ\83дÑ\83ваÑ\9aа',
 'tog-enotifusertalkpages' => 'Испраќај ми е-пошта при промена на мојата страница за разговор',
-'tog-enotifminoredits' => 'Испраќај ми е-пошта и за ситни промени во страниците',
+'tog-enotifminoredits' => 'Испраќај ми е-пошта и за ситни промени во страниците и податотеките',
 'tog-enotifrevealaddr' => 'Откриј ја мојата е-поштенска адреса во пораките за известување',
 'tog-shownumberswatching' => 'Прикажи го бројот на корисници кои набљудуваат',
 'tog-oldsig' => 'Постоечки потпис:',
@@ -691,6 +691,8 @@ $1',
 'cannotdelete' => 'Страницата или податотеката „$1“ не можеше да се избрише.
 Можеби некој друг веќе ја избришал.',
 'cannotdelete-title' => 'Не можам да ја избришам страницата „$1“',
+'delete-hook-aborted' => 'Бришењето е прекинато со кука.
+Не е дадено никакво образложение.',
 'badtitle' => 'Лош наслов',
 'badtitletext' => 'Бараниот наслов е грешен, празен или неисправно поврзан меѓујазичен или меѓувики наслов. 
 Може да содржи недопуштени знаци.',
@@ -4181,6 +4183,8 @@ $5
 'api-error-empty-file' => 'Поднесената податотека е празна.',
 'api-error-emptypage' => 'Создавањето на нови празни страници не е дозволено.',
 'api-error-fetchfileerror' => 'Внатрешна грешка: нешто тргна наопаку при добивањето на податотеката.',
+'api-error-fileexists-forbidden' => 'Веќе постои податотека наречена „$1“ и не може да се презапише.',
+'api-error-fileexists-shared-forbidden' => 'Веќе постои податотека наречена „$1“ во заедничкото складиште и не може да се презапише.',
 'api-error-file-too-large' => 'Поднесената податотека е преголема.',
 'api-error-filename-tooshort' => 'Името на податотеката е прекратко.',
 'api-error-filetype-banned' => 'Овој тип на податотека е забранет.',
index e191792..eb824ff 100644 (file)
@@ -342,15 +342,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'ഉപവിഭാഗങ്ങളുടെ തലക്കെട്ടിൽ റൈറ്റ് ക്ലിക്ക് ചെയ്യുന്നതു വഴി തിരുത്താനനുവദിക്കുക (ജാവാസ്ക്രിപ്റ്റ്)',
 'tog-showtoc' => 'ഉള്ളടക്കപ്പട്ടിക പ്രദർശിപ്പിക്കുക (മൂന്നിൽ കൂടുതൽ ഉപശീർഷകങ്ങളുള്ള താളുകൾക്കു മാത്രം)',
 'tog-rememberpassword' => 'എന്റെ പ്രവേശനം ഈ ബ്രൗസറിൽ ({{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസം}}) ഓർത്തുവെക്കുക',
-'tog-watchcreations' => 'à´\9eാൻ à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
-'tog-watchdefault' => 'à´\9eാൻ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
-'tog-watchmoves' => 'à´\9eാൻ à´¤à´²à´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\81 à´®à´¾à´±àµ\8dà´±àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
-'tog-watchdeletion' => 'à´\9eാൻ à´¨àµ\80à´\95àµ\8dà´\95à´\82 à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
+'tog-watchcreations' => 'à´\9eാൻ à´¸àµ\83à´·àµ\8dà´\9fà´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\82 à´\9eാൻ à´\85à´ªàµ\8dâ\80\8cà´²àµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´¨àµ\8dà´¨ à´ªàµ\8dരമാണà´\99àµ\8dà´\99à´³àµ\81à´\82 ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
+'tog-watchdefault' => 'à´\9eാൻ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\82 à´ªàµ\8dരമാണà´\99àµ\8dà´\99à´³àµ\81à´\82 ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
+'tog-watchmoves' => 'à´\9eാൻ à´¤à´²à´\95àµ\8dà´\95àµ\86à´\9fàµ\8dà´\9fàµ\81 à´®à´¾à´±àµ\8dà´±àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\82 à´ªàµ\8dരമാണà´\99àµ\8dà´\99à´³àµ\81à´\82 ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
+'tog-watchdeletion' => 'à´\9eാൻ à´¨àµ\80à´\95àµ\8dà´\95à´\82 à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\82 à´ªàµ\8dരമാണà´\99àµ\8dà´\99à´³àµ\81à´\82 ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ചേർക്കുക',
 'tog-minordefault' => 'എല്ലാ തിരുത്തലുകളും സ്വതേ ചെറുതിരുത്തലുകളായി അടയാളപ്പെടുത്തുക',
 'tog-previewontop' => 'തിരുത്തൽ പെട്ടിക്കു മുകളിൽ പ്രിവ്യൂ കാണിക്കുക',
 'tog-previewonfirst' => 'ആദ്യത്തെ തിരുത്തലിന്റെ പ്രിവ്യൂ കാണിക്കുക',
 'tog-nocache' => 'ബ്രൗസറിൽ താളുകൾ തദ്ദേശീയമായി സംഭരിച്ചുവയ്ക്കുന്നത് നിർജ്ജീവമാക്കുക',
-'tog-enotifwatchlistpages' => 'à´\9eാൻ à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾà´\95àµ\8dà´\95àµ\81 മാറ്റം സംഭവിച്ചാൽ എനിക്കു ഇമെയിൽ അയക്കുക',
+'tog-enotifwatchlistpages' => 'à´\9eാൻ à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¤à´¾à´³àµ\81à´\95ൾà´\95àµ\8dà´\95àµ\8b à´ªàµ\8dരമാണà´\99àµ\8dà´\99ൾà´\95àµ\8dà´\95àµ\8b മാറ്റം സംഭവിച്ചാൽ എനിക്കു ഇമെയിൽ അയക്കുക',
 'tog-enotifusertalkpages' => 'എന്റെ സം‌വാദം താളിനു മാറ്റം സംഭവിച്ചാൽ ഇമെയിൽ അയക്കുക',
 'tog-enotifminoredits' => 'ചെറുതിരുത്തലുകൾക്കും എനിക്ക് ഇമെയിൽ അയയ്ക്കുക',
 'tog-enotifrevealaddr' => 'വിജ്ഞാപന മെയിലുകളിൽ എന്റെ ഇമെയിൽ വിലാസം വെളിവാക്കാൻ അനുവദിക്കുക',
@@ -684,6 +684,8 @@ $1',
 'cannotdelete' => '"$1" എന്ന താൾ അഥവാ പ്രമാണം നീക്കം ചെയ്യാൻ കഴിഞ്ഞില്ല.
 അതു മിക്കവാറും മറ്റാരെങ്കിലും നീക്കം ചെയ്തിട്ടുണ്ടാവാം.',
 'cannotdelete-title' => '"$1" എന്ന താൾ മായ്ക്കാൻ കഴിയില്ല',
+'delete-hook-aborted' => 'മായ്ക്കൽ കൊളുത്തിനാൽ റദ്ദാക്കിയിരിക്കുന്നു.
+വിശദീകരണമൊന്നും നൽകിയിട്ടില്ല.',
 'badtitle' => 'അസാധുവായ തലക്കെട്ട്',
 'badtitletext' => 'താങ്കൾ ആവശ്യപ്പെട്ട തലക്കെട്ടുള്ള ഒരു താൾ നിലവിലില്ല. ഇതു തെറ്റായി അന്തർഭാഷാ/അന്തർവിക്കി കണ്ണി ചെയ്യപ്പെട്ടതു മൂലമോ, തലക്കെട്ടിൽ ഉപയോഗിക്കരുതാത്ത അക്ഷരരൂപങ്ങൾ ഉപയോഗിച്ചതു മൂലമോ സംഭവിച്ചതായിരിക്കാം.',
 'perfcached' => 'താഴെ കൊടുത്തിരിക്കുന്ന വിവരം ശേഖരിച്ചു വെച്ചിരിക്കുന്നതാണ്, അതുകൊണ്ട് ചിലപ്പോൾ പുതിയതായിരിക്കണമെന്നില്ല. പരമാവധി {{PLURAL:$1|ഒരു ഫലം|$1 ഫലങ്ങൾ}} ശേഖരിച്ചുവെച്ചിരിക്കുന്നവയിൽ ഉണ്ട്.',
@@ -715,6 +717,8 @@ $2',
 ബന്ധിച്ച കാര്യ‌നിർവാഹക(ൻ) നൽകിയിരിക്കുന്ന കാരണം "\'\'$3\'\'" എന്നാണ്.',
 'invalidtitle-knownnamespace' => 'നാമമേഖല "$2", എഴുത്ത് "$3" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
 'invalidtitle-unknownnamespace' => 'അപരിചിതമായ നാമമേഖലാ സംഖ്യ $1, എഴുത്ത് "$2" എന്നിവ ഉപയോഗിച്ചുള്ള അസാധുവായ തലക്കെട്ട്',
+'exception-nologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
+'exception-nologin-text' => 'ഈ വിക്കിയിൽ ഈ താൾ അല്ലെങ്കിൽ പ്രവൃത്തി ലഭ്യമാകാൻ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കേണ്ടതാണ്.',
 
 # Virus scanner
 'virus-badscanner' => "തെറ്റായ ക്രമീകരണങ്ങൾ: അപരിചിതമായ വൈറസ് തിരച്ചിൽ ഉപാധി :  ''$1''",
@@ -1053,8 +1057,8 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'moveddeleted-notice' => 'ഈ താൾ മായ്ക്കപ്പെട്ടിരിക്കുന്നു.
 ഈ താളിന്റെ മായ്ക്കൽ രേഖ പരിശോധനയ്ക്കായി താഴെ കൊടുത്തിരിക്കുന്നു',
 'log-fulllog' => 'എല്ലാ രേഖകളും കാണുക',
-'edit-hook-aborted' => 'à´\95àµ\8aà´³àµ\81à´¤àµ\8dà´¤àµ\8d à´\9bàµ\87ദിà´\9aàµ\8dà´\9a à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\8d.
-à´\87à´¤àµ\8d à´\92à´°àµ\81 à´µà´¿à´¶à´¦àµ\80à´\95രണവും നൽകിയിട്ടില്ല.',
+'edit-hook-aborted' => 'തിരàµ\81à´¤àµ\8dതൽ à´\95àµ\8aà´³àµ\81à´¤àµ\8dതിനാൽ à´±à´¦àµ\8dദാà´\95àµ\8dà´\95ിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.
+വിശദàµ\80à´\95രണമàµ\8aà´¨àµ\8dà´¨ും നൽകിയിട്ടില്ല.',
 'edit-gone-missing' => 'ഈ താൾ പുതുക്കുവാൻ സാധിക്കുകയില്ല.
 ഇത് മായ്ക്കപ്പെട്ടതായി കാണുന്നു.',
 'edit-conflict' => 'തിരുത്തൽ സമരസപ്പെടായ്ക.',
@@ -1558,7 +1562,7 @@ $1",
 'right-edituserjs' => 'മറ്റ് ഉപയോക്താക്കളുടെ JS പ്രമാണങ്ങൾ തിരുത്തുക',
 'right-rollback' => 'ഒരു പ്രത്യേക താളിൽ അവസാനം തിരുത്തൽ നടത്തിയ ഉപയോക്താവിന്റെ തിരുത്തൽ പെട്ടെന്ന് ഒഴിവാക്കുക',
 'right-markbotedits' => 'മുൻപ്രാപനം നടത്തിയ തിരുത്തലുകൾ യാന്ത്രിക തിരുത്തലുകളായി അടയാളപ്പെടുത്തുക',
-'right-noratelimit' => 'നിലവാരമിà´\9fലിനàµ\8dà´±àµ\86 പരിധികൾ ബാധകമല്ല',
+'right-noratelimit' => 'à´ªàµ\8dരവർതàµ\8dതനà´\99àµ\8dà´\99ൾà´\95àµ\8dà´\95àµ\8d പരിധികൾ ബാധകമല്ല',
 'right-import' => 'മറ്റുള്ള വിക്കികളിൽ നിന്നും താളുകൾ ഇറക്കുമതി ചെയ്യുക',
 'right-importupload' => 'അപ്‌‌ലോഡ് ചെയ്ത പ്രമാണത്തിൽ നിന്നും താളുകൾ ഇറക്കുമതി ചെയ്യുക',
 'right-patrol' => 'മറ്റുള്ളവരുടെ തിരുത്തലുകൾ റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക',
@@ -1823,6 +1827,10 @@ $1',
 'backend-fail-contenttype' => '"$1" എന്നതിൽ സംഭരിച്ചിരിക്കുന്ന പ്രമാണത്തിന്റെ ഉള്ളടക്ക തരം നിർണ്ണയിക്കാനായില്ല.',
 'backend-fail-usable' => 'ആവശ്യമായത്ര അനുമതിയില്ലാത്തതു കൊണ്ടോ ഡയറക്റ്ററികൾ/കണ്ടൈനറുകൾ ഇല്ലാത്തതു കൊണ്ടോ പ്രമാണം $1 എഴുതിച്ചേർക്കാൻ കഴിഞ്ഞില്ല.',
 
+# File journal errors
+'filejournal-fail-dbconnect' => '"$1" എന്ന ശേഖരണ ബാക്ക്എൻഡിനായി ജേണൽ ഡേറ്റാബേസിനെ ബന്ധപ്പെടാൻ കഴിഞ്ഞില്ല.',
+'filejournal-fail-dbquery' => '"$1" എന്ന ശേഖരണ ബാക്ക്എൻഡിനായി ജേണൽ ഡേറ്റാബേസ് പുതുക്കാൻ കഴിഞ്ഞില്ല.',
+
 # Lock manager
 'lockmanager-notlocked' => '"$1" എന്നതിലെ പൂട്ടൽ അഴിക്കാൻ കഴിഞ്ഞില്ല; അത് പൂട്ടിയിട്ടില്ല.',
 'lockmanager-fail-closelock' => '"$1" എന്നതിന്റെ പൂട്ടൽ പ്രമാണം അടയ്ക്കാൻ കഴിഞ്ഞില്ല.',
@@ -3913,6 +3921,8 @@ $5
 'api-error-empty-file' => 'താങ്കൾ സമർപ്പിച്ച പ്രമാണം ശൂന്യമാണ്.',
 'api-error-emptypage' => 'ശൂന്യമായ പുതിയ താളുകൾ സൃഷ്ടിക്കുന്നത് അനുവദിക്കുന്നില്ല.',
 'api-error-fetchfileerror' => 'ആന്തരിക പിഴവ്: പ്രമാണം ശേഖരിച്ചുകൊണ്ടിരുന്നപ്പോൾ എന്തോ പിഴവുണ്ടായി.',
+'api-error-fileexists-forbidden' => '"$1" എന്ന പേരിൽ ഒരു പ്രമാണം മുമ്പേയുണ്ട്, അതിന്റെ മുകളിലായി സൃഷ്ടിക്കാനാകില്ല.',
+'api-error-fileexists-shared-forbidden' => '"$1" എന്ന പേരിൽ ഒരു പ്രമാണം പങ്ക് വെച്ചുപയോഗിക്കുന്ന ശേഖരത്തിൽ മുമ്പേയുണ്ട്, അതിനു മുകളിലായി സൃഷ്ടിക്കാനാകില്ല.',
 'api-error-file-too-large' => 'താങ്കൾ സമർപ്പിച്ച പ്രമാണം വളരെ വലുതാണ്.',
 'api-error-filename-tooshort' => 'പ്രമാണത്തിന്റെ പേര് വളരെച്ചെറുതാണ്.',
 'api-error-filetype-banned' => 'ഈ തരത്തിലുള്ള പ്രമാണങ്ങൾ നിരോധിച്ചിരിക്കുന്നു.',
index 81c228d..2d7ee74 100644 (file)
@@ -28,6 +28,7 @@
  * @author Rahuldeshmukh101
  * @author Rdeshmuk
  * @author Sankalpdravid
+ * @author Sau6402
  * @author Shantanoo
  * @author Shreewiki
  * @author Shreyas19
@@ -958,6 +959,7 @@ $2',
 'updated' => '(बदल झाला आहे.)',
 'note' => "'''सूचना:'''",
 'previewnote' => "'''लक्षात ठेवा की ही फक्त झलक आहे''', बदल अजून जतन करण्यात आलेले नाहीत.",
+'continue-editing' => 'संपादन चालु राहुदे',
 'previewconflict' => 'वरील संपादन क्षेत्रातील मजकूर जतन केल्यावर या झलकेप्रमाणे दिसेल.',
 'session_fail_preview' => "'''क्षमस्व! सत्र विदेच्या क्षयामुळे आम्ही तुमची संपादन प्रक्रीया पार पाडू शकलो नाही.कृपया पुन्हा प्रयत्न करा.जर एवढ्याने काम झाले नाही तर सदस्य खात्यातून बाहेर पडून पुन्हा प्रवेश करून पहा.'''",
 'session_fail_preview_html' => "'''क्षमस्व! सत्र विदेच्या क्षयामुळे आम्ही तुमची संपादन प्रक्रीया पार पाडू शकलो नाही.'''
@@ -970,6 +972,7 @@ $2',
 असे कदाचित तुम्ही अनामिक proxy वापरत असल्याने होऊ शकते.'''",
 'edit_form_incomplete' => '”’तुमच्या संपादनाचा काही भाग सर्व्हरपर्यंत पोचला नाही; तुमचे संपादन पूर्ण आहे का याची पुन्हा खात्री करा.',
 'editing' => '$1 चे संपादन होत आहे.',
+'creating' => '$1 ची निर्मिती सुरु आहे',
 'editingsection' => '$1 (विभाग) संपादन',
 'editingcomment' => '$1 चे संपादन (प्रतिक्रिया)',
 'editconflict' => 'वादग्रस्त संपादन: $1',
@@ -1219,6 +1222,8 @@ $1",
 
 # Diffs
 'history-title' => '"$1" चा संपादन इतिहास',
+'difference-title' => '"$1" च्या विविध उजळण्या',
+'difference-title-multipage' => '"$1" व "$2" या पानान मधला फरक',
 'difference-multipage' => '(पानांमधील फरक)',
 'lineno' => 'ओळ $1:',
 'compareselectedversions' => 'निवडलेल्या आवृत्त्यांमधील बदल पहा',
@@ -1313,6 +1318,7 @@ $1",
 'prefs-beta' => 'बीटा चेहेरेपट्टी',
 'prefs-datetime' => 'दिनांक आणि वेळ',
 'prefs-labs' => 'प्रायोगिक वैशिष्ट्ये',
+'prefs-user-pages' => 'सदस्य पान',
 'prefs-personal' => 'सदस्य व्यक्तिरेखा',
 'prefs-rc' => 'अलीकडील बदल',
 'prefs-watchlist' => 'नित्य पहाण्याची सूची',
@@ -1755,7 +1761,8 @@ $1',
 'backend-fail-writetemp' => 'तात्पुरत्या संचिकेत लिहिणे जमले नाही.',
 'backend-fail-closetemp' => 'तात्पुरती संचिका बंद करणे जमले नाही.',
 'backend-fail-read' => '$1 ही संचिका वाचता आली नाही.',
-'backend-fail-create' => '$1 ही संचिका बनवता आली नाही.',
+'backend-fail-create' => '$1 ही संचिका लिहिता आली नाही.',
+'backend-fail-maxsize' => '$1 ही संचिका लिहिता आली नाही कारण ती {{PLURAL:$2|one byte|$2 bytes}} पेक्षा मोठी आहे.',
 'backend-fail-readonly' => 'पार्श्वभौमीक साठवण "$1" “फक्त वाचा” असे आहे. दिलेले कारण "$2" आहे.',
 'backend-fail-synced' => 'अंतर्गत पार्श्वभौमीक साठवणीतील फाईल "$1" विसंगत आहे.',
 'backend-fail-connect' => 'पार्श्वभौमीक साठा "$1"शी संबंध जोडू शकत नाही.',
@@ -2086,6 +2093,9 @@ Input:contenttype/subtype, e.g. <tt>image/jpeg</tt>.',
 'allpagesbadtitle' => 'दिलेले शीर्षक चुकीचे किंवा आंतरभाषीय किंवा आंतरविकि शब्दाने सुरू होणारे होते. त्यात एक किंवा अधिक शीर्षकात न वापरता येणारी अक्षरे असावीत.',
 'allpages-bad-ns' => '{{SITENAME}}मध्ये "$1" हे नामविश्व नाही.',
 
+# SpecialCachedPage
+'cachedspecial-refresh-now' => 'आखेरचे दृश्य',
+
 # Special:Categories
 'categories' => 'वर्ग',
 'categoriespagetext' => 'विकिवर खालील वर्ग {{PLURAL:$1|आहे|आहेत}}.
@@ -3626,6 +3636,9 @@ $5
 'version-software' => 'स्थापित संगणक प्रणाली (Installed software)',
 'version-software-product' => 'उत्पादन',
 'version-software-version' => 'आवृत्ती',
+'version-entrypoints' => 'आत येणारी यू॰आर॰एल',
+'version-entrypoints-header-entrypoint' => 'आत येण्याचा मार्ग',
+'version-entrypoints-header-url' => 'यू॰आर॰एल',
 
 # Special:FilePath
 'filepath' => 'संचिका मार्ग',
@@ -3809,4 +3822,16 @@ $5
 'api-error-uploaddisabled' => 'चढवण्याचे कार्य ह्या विकिवर अवरुद्ध करण्यात आले आहे',
 'api-error-verification-error' => 'ही संचिका भ्रष्ट(करप्ट) झाली किंवा चुकिचा विस्तार(एक्सटेंशन) असलेली असू शकते.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|सेकंदापूर्वी|सेकंदांपूर्वी}}',
+'duration-minutes' => '$1 {{PLURAL:$1|मिनिटापूर्वी|मिनिटांपूर्वी}}',
+'duration-hours' => '$1 {{PLURAL:$1|तासापूर्वी|तासांपूर्वी}}',
+'duration-days' => '$1 {{PLURAL:$1|दिवसापूर्वी|दिवसांपूर्वी}}',
+'duration-weeks' => '$1 {{PLURAL:$1|आठवड्यापूर्वी | आठवड्यांपूर्वी}}',
+'duration-years' => '$1 {{PLURAL:$1|वर्षापूर्वी|वर्षांपूर्वी}}',
+'duration-decades' => '$1 {{PLURAL:$1|दशकापूर्वी|दशकांपूर्वी }}',
+'duration-centuries' => '$1 {{PLURAL:$1|शतकापूर्वी|शतकांपूर्वी }}',
+
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'सर्व्हर "$1" वरील कुलूप उघडू शकत नाही',
 );
index d1b99aa..77a7da9 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Hill Mari (Ð\9aырык мары)
+/** Hill Mari (кырык мары)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 19b20ae..3f0e6c4 100644 (file)
@@ -555,6 +555,8 @@ Sila catat URL bagi laman ini dan laporkan perkara ini kepada seorang [[Special:
 'cannotdelete' => 'Laman atau fail $1 tidak dapat dihapuskan.
 Ia mungkin telah pun dihapuskan oleh orang lain.',
 'cannotdelete-title' => 'Laman "$1" tidak dapat dihapuskan',
+'delete-hook-aborted' => 'Penghapusan dibatalkan oleh penyangkuk.
+Tiada sebab diberikan.',
 'badtitle' => 'Tajuk tidak sah',
 'badtitletext' => 'Tajuk laman yang diminta tidak sah, kosong, ataupun tajuk antara bahasa atau tajuk antara wiki yang salah dipaut. Ia mungkin mengandungi aksara yang tidak dibenarkan.',
 'perfcached' => 'Data yang berikut disimpan dalam cache dan mungkin tidak terkemas kini. Semaksimum {{PLURAL:$1|satu hasil|$1 hasil}} terdapat dalam cache.',
@@ -585,6 +587,8 @@ Pertanyaan: $2',
 Pentadbir yang menguncinya memberikan penjelasan yang berikut: "$3".',
 'invalidtitle-knownnamespace' => 'Tajuk tidak sah dengan ruang nama "$2" dan teks "$3"',
 'invalidtitle-unknownnamespace' => 'Tajuk tidak sah dengan nombor ruang nama tidak dikenali $1 dan teks "$2"',
+'exception-nologin' => 'Belum log masuk',
+'exception-nologin-text' => 'Halaman atau tindakan ini memerlukan anda untuk log masuk ke dalam wiki ini.',
 
 # Virus scanner
 'virus-badscanner' => "Konfigurasi rosak: pengimbas virus yang tidak diketahui: ''$1''",
@@ -3803,6 +3807,8 @@ Ataupun, anda boleh menggunakan borang yang mudah di bawah. Ulasan anda akan dic
 'api-error-empty-file' => 'Fail yang anda serahkan adalah kosong.',
 'api-error-emptypage' => 'Anda tidak dibenarkan membuat laman baru yang kosong.',
 'api-error-fetchfileerror' => 'Ralat dalaman: ada malasah ketika mengambil fail itu.',
+'api-error-fileexists-forbidden' => 'Fail bernama "$1" sudah wujud, dan tidak boleh ditulis ganti.',
+'api-error-fileexists-shared-forbidden' => 'Fail bernama "$1" sudah wujud dalam repositori fail kongsian, dan tidak boleh ditulis ganti.',
 'api-error-file-too-large' => 'Fail yang anda serahkan adalah terlalu besar.',
 'api-error-filename-tooshort' => 'Nama fail ini terlalu pendek.',
 'api-error-filetype-banned' => 'Fail jenis ini adalah dilarang.',
index ff028d5..187084a 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Erzya (Эрзянь)
+/** Erzya (эрзянь)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index bab6db7..6eacf0b 100644 (file)
@@ -136,7 +136,7 @@ $messages = array(
 'tog-extendwatchlist' => 'گت تر هکردن دمبال هکرده‌ئون فهرست تموم دگارسه‌ئون سر، و نا فقط آخرین  موردون',
 'tog-usenewrc' => 'استفاده از تازه دگاردسته‌ئون گت‌تر بَیی (نیازمند جاوااسکریپت)',
 'tog-numberheadings' => 'شماره بشتن خدکار عناوین',
-'tog-showtoolbar' => 'نشون هدائن نوار ابزار جعبه دچی ین',
+'tog-showtoolbar' => 'دچی‌ین جعبه نوار ابزار ره سِراق هدائن',
 'tog-editondblclick' => 'دچی ین ولگون با دتا کلیک (نیازمند جاوااسکریپت)',
 'tog-editsection' => 'به کار دمبدائن تیکه‌ئون دچی‌ین از طریق پیوندون [دچی‌ین]',
 'tog-editsectiononrightclick' => 'به کار دمبدائن دچی‌ین قسمت‌ئون با راست کیلیک<br />عناوین قسمت‌ئون ِرو (جاوااسکریپت)',
@@ -154,7 +154,7 @@ $messages = array(
 'tog-enotifusertalkpages' => 'هر گادر منه کاروری صفخه‌ی گپ دله ات چی بنویشنه مه سّه ایمیل بزن',
 'tog-enotifminoredits' => 'هرگادر صحه ها دله اتا خورد چی ره عوض هکردنه مه وسّه ایمیل بزن',
 'tog-enotifrevealaddr' => 'منه ایمیل نامه ئون ایطیلاع رسونی دله دواشه',
-'tog-shownumberswatching' => 'نشون هدائن کارورن دمبال کوننده',
+'tog-shownumberswatching' => 'دمبالکرونِ سِراق هدائن',
 'tog-oldsig' => 'پیش نیمایش ایمضای موجود:',
 'tog-fancysig' => 'ایمضا ره ویکی متن نظر بیرین (بدون لینک هایتن)',
 'tog-externaleditor' => 'به شیکل پیش فرض خارجی ویرایشگرون جه ایستیفاده بواشه',
@@ -330,14 +330,14 @@ $messages = array(
 'talk' => 'گپ',
 'views' => 'هارشی‌ئون',
 'toolbox' => 'أبـزار جـا',
-'userpage' => 'کارور صفحه ره نشون هدائن',
+'userpage' => 'کارور صفحه ره سِراق هدائن',
 'projectpage' => 'بدی‌ین پروژه‌ی ِصفحه',
 'imagepage' => 'بدی‌ین ِعکس ِصفحه',
 'mediawikipage' => 'پیغوم ره بدی‌ین',
 'templatepage' => 'بدی‌ین شابلون',
 'viewhelppage' => 'راهنما صفحه هارشی‌ین',
 'categorypage' => 'بدی‌ین رج',
-'viewtalkpage' => 'گپ ئون ره نشون هدائن',
+'viewtalkpage' => 'گپون ره سِراق هدائن',
 'otherlanguages' => 'بقیه زوون‌ئون',
 'redirectedfrom' => '($1 جه بموئه)',
 'redirectpagesub' => 'گجگی‌بَیتـِن',
@@ -545,7 +545,7 @@ $2، $1',
 'watchthis' => 'این صفحه ره دمبال هـاکاردن',
 'savearticle' => 'جادکتن ِصفحه',
 'preview' => 'پیش نمایش',
-'showpreview' => 'پیش‌نمایش نشون هدائن',
+'showpreview' => 'پیش‌نمایش ره سِراق هدائن',
 'showlivepreview' => 'پیش‌نمایش آنلاین',
 'showdiff' => 'نمایش تغییرات',
 'blockedtext' => "'''شمه آی پی دوسته بیّه.'''
@@ -599,7 +599,7 @@ $2، $1',
 'historyempty' => '(خالی)',
 
 # Revision deletion
-'rev-delundel' => 'نشون هدائن/فرو بوردن',
+'rev-delundel' => 'دیار بیّن/فرو بوردن',
 'revdelete-text' => "'''نسخه‌ئون و حذف بئی موارد ره بشنه سیاهه جا و صفحه تاریخچه دله بدین، ولی اتی قسمت از وشونه محتواره بقیه کارورون نتوننه بوینن.'''
 {{SITENAME}} بقیه مدیرون بتوننه اینتا پنهون بئیه محتوا ره هارشن و وشونه حذف بئیون ره احیاء هاکنن، مگر اینکه اتی سری محدودیت ونه رو اعمال بئی باشه.",
 'revdel-restore' => 'دیاری تغییر هدائن',
@@ -880,13 +880,15 @@ $2، $1',
 'blockip-title' => 'کارور ره دَوستن',
 'blockip-legend' => 'کارور ره دَوستن',
 'ipbsubmit' => 'ای کارور دأبه‌س بأوه',
+'ipboptions' => '۲ ساعت:2 hours,۱ روز:1 day,۳ روز:3 days,۱ هفته:1 week,۲ هفته:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌پایون:infinite',
 'ipblocklist' => 'IP نـه‌شـونـی‌ئون ئو کـارورنـوم‌ئونی کـه دأبـه‌سـتـوونـه',
 'infiniteblock' => 'بی‌پایون',
+'expiringblock' => '$1 دله، ساعت $2 دِرِس وونه',
 'blocklink' => 'دَوستن',
 'unblocklink' => 'وا هـه‌کـارده‌ن',
 'change-blocklink' => 'قطع دسترسی تغییر هدائن',
 'contribslink' => 'کایری‌ئون',
-'blocklogentry' => '[[$1]] دأبـه‌سـتـو بـأیـه ئو وه‌نـه دأبه‌ستو بوئه‌ن زأمـون، تـا  $2 $3 هـأسـه',
+'blocklogentry' => '[[$1]] دَوسته بیّه و ونه دَوسته بی‌ین گادِر $2 تا $3 هسته',
 
 # Move page
 'newtitle' => 'ترنه نوم:',
index 2f002b9..8d3edf6 100644 (file)
@@ -25,7 +25,10 @@ $dateFormats = array(
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Liân-kiat oē té-sûn:',
+'tog-justify' => 'pâi-chê  tōaⁿ-lo̍h',
 'tog-hideminor' => 'Am chòe-kīn ê sió kái-piàn',
+'tog-hidepatrolled' => 'Am chòe-kīn sûn koè--ê  kái-piàn',
+'tog-newpageshidepatrolled' => 'Sin-ia̍h ê chheng-toaⁿ am sûn koè--ê',
 'tog-extendwatchlist' => 'Khok-chhiong kàm-sī-toaⁿ kàu hián-sī só͘-ū ê kái-piàn',
 'tog-usenewrc' => 'Ka-kiông pán ê chòe-kīn-ê-kái-piàn (su-iàu JavaScript)',
 'tog-numberheadings' => 'Phiau-tê chū-tōng pian-hō',
@@ -43,22 +46,37 @@ $messages = array(
 'tog-previewontop' => 'Sûn-khoàⁿ ê lōe-iông tī pian-chi̍p keh-á thâu-chêng',
 'tog-previewonfirst' => 'Thâu-pái pian-chi̍p seng khoàⁿ-māi',
 'tog-nocache' => 'Koaiⁿ-tiāu ia̍h ê cache',
+'tog-enotifwatchlistpages' => 'Kam-sī-tuann ū ē bûn-tsiunn nā ū kái-piàn, kià tiān-tsú-phue hōo guá.',
+'tog-enotifusertalkpages' => 'Guá ê thó-lūn ia̍h  nā ū lâng kái,  kià tiān-tsú-phue hōo guá.',
+'tog-enotifminoredits' => 'Sió pian-chi̍p mā kià tiān-tsú-phue hōo guá.',
+'tog-enotifrevealaddr' => 'Hō͘ pat-lâng khoàⁿ ê tio̍h oá ê tiān-chú-phoe tē-chí',
+'tog-shownumberswatching' => 'Hián-sī tng leh khoàⁿ ê iōng-chiá sò͘-bo̍k',
+'tog-oldsig' => 'Chit-má ê chhiam-miâ:',
 'tog-fancysig' => 'Chhiam-miâ mài chò liân-kiat',
 'tog-externaleditor' => 'Iōng gōa-pō· pian-chi̍p-khì',
 'tog-externaldiff' => 'Iōng gōa-pō· diff',
+'tog-showjumplinks' => 'Hō͘ "thiàu khì" chit ê liân-chiap ē-sái',
+'tog-uselivepreview' => 'Ēng sui khoàⁿ-māi (ài ū JavaScript) (chhì-giām--ê)',
 'tog-forceeditsummary' => 'Pian-chi̍p khài-iàu bô thiⁿ ê sî-chūn, kā goá thê-chhéⁿ',
 'tog-watchlisthideown' => 'Kàm-sī-toaⁿ bián hián-sī goá ê pian-chi̍p',
 'tog-watchlisthidebots' => 'Kàm-sī-toaⁿ bián hián-sī ki-khì pian-chi̍p',
 'tog-watchlisthideminor' => 'Kàm-sī-toaⁿ bián hián-sī sió siu-kái',
+'tog-watchlisthideliu' => 'Kàm-sī-toaⁿ bián hián-sī iōng-chiá ū teng-ji̍p ê pian-chi̍p',
+'tog-watchlisthideanons' => 'Kàm-sī-toaⁿ bián hián-sī bû-bêng-sī ê pian-chi̍p',
+'tog-watchlisthidepatrolled' => 'Kàm-sī-toaⁿ bián hián-sī khoàⁿ-koè--ê pian-chi̍p',
 'tog-ccmeonemails' => 'Kià hō͘ pa̍t-lâng ê email sūn-soà kià copy hō͘ goá',
 'tog-diffonly' => 'Diff ē-pêng bián hián-sī ia̍h ê loē-iông',
+'tog-showhiddencats' => 'Hián-sī chhàng khí--lâi ê lūi-pia̍t',
+'tog-norollbackdiff' => 'ká tńg-khí liáu bián-koán cheng-chha goā-chē',
 
 'underline-always' => 'Tiāⁿ-tio̍h',
 'underline-never' => 'Tiāⁿ-tio̍h mài',
 'underline-default' => 'Tòe liû-lám-khì ê default',
 
 # Font style option in Special:Preferences
+'editfont-style' => 'Pian-chi̍p sî ēng ê jī-thé hêng-sek:',
 'editfont-default' => 'Tòe liû-lám-khì ê default',
+'editfont-monospace' => 'Monospaced jī-thé',
 'editfont-sansserif' => 'Sans-serif jī-thé',
 'editfont-serif' => 'Serif jī-thé',
 
@@ -137,6 +155,7 @@ $messages = array(
 'article' => 'Loē-iông ia̍h',
 'newwindow' => '(ē khui sin thang-á hián-sī)',
 'cancel' => 'Chhú-siau',
+'moredotdotdot' => 'Iáu-ū',
 'mypage' => 'Góa ê ia̍h',
 'mytalk' => 'Góa ê thó-lūn',
 'anontalk' => 'Chit ê IP ê thó-lūn-ia̍h',
@@ -387,6 +406,7 @@ Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-go
 'nav-login-createaccount' => 'Teng-ji̍p / khui sin kháu-chō',
 'loginprompt' => 'Thiⁿ ē-kha ê chu-liāu thang khui sin hō·-thâu a̍h-sī teng-ji̍p {{SITENAME}}.',
 'userlogin' => 'Teng-ji̍p / khui sin kháu-chō',
+'userloginnocreate' => 'Teng-ji̍p',
 'logout' => 'Teng-chhut',
 'userlogout' => 'Teng-chhut',
 'notloggedin' => 'Bô teng-ji̍p',
@@ -396,6 +416,7 @@ Chhiaⁿ chù-ì: ū-kóa ia̍h ū khó-lêng khoàⁿ-tio̍h bē-su lí iû-go
 'gotaccount' => "Í-keng ū kháu-chō? '''$1'''.",
 'gotaccountlink' => 'Teng-ji̍p',
 'createaccountmail' => 'Thàu koè tiān-chú-phoe',
+'createaccountreason' => 'Lí-iû:',
 'badretype' => 'Lí su-ji̍p ê 2-cho· bi̍t-bé bô tùi.',
 'userexists' => 'Lí beh ti̍h ê iōng-chiá miâ-chheng í-keng ū lâng iōng. Chhiáⁿ kéng pa̍t-ê miâ.',
 'loginerror' => 'Teng-ji̍p chhò-gō·',
index 5ebe516..36a7bfe 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Norwegian Bokmål (‪Norsk (bokmål)‬)
+/** Norwegian Bokmål (‪norsk (bokmål)‬)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
  * @author Boivie
  * @author Brik
  * @author Byrial
+ * @author Danmichaelo
+ * @author Dittaeva
  * @author Eirik
  * @author EivindJ
  * @author Event
  * @author Finnrind
  * @author Guaca
  * @author H92
+ * @author Haakon K
  * @author Harald Khan
  * @author Jóna Þórunn
  * @author Kph
@@ -317,8 +320,8 @@ $messages = array(
 'tog-extendwatchlist' => 'Utvid overvåkningslisten til å vise alle endringer, ikke bare de siste',
 'tog-usenewrc' => 'Bruk forbedret siste endringer (krever JavaScript)',
 'tog-numberheadings' => 'Autonummerer overskrifter',
-'tog-showtoolbar' => 'Vis verktøylinje (JavaScript)',
-'tog-editondblclick' => 'Rediger sider ved å dobbeltklikke (JavaScript)',
+'tog-showtoolbar' => 'Vis verktøylinje (krever JavaScript)',
+'tog-editondblclick' => 'Rediger sider ved å dobbeltklikke (krever JavaScript)',
 'tog-editsection' => 'Rediger avsnitt ved hjelp av [rediger]-lenke',
 'tog-editsectiononrightclick' => 'Rediger avsnitt ved å høyreklikke på avsnittsoverskrift (JavaScript)',
 'tog-showtoc' => 'Vis innholdsfortegnelse (for sider med flere enn tre avsnitt)',
@@ -328,16 +331,16 @@ $messages = array(
 'tog-watchmoves' => 'Overvåk sider jeg flytter',
 'tog-watchdeletion' => 'Overvåk sider jeg sletter',
 'tog-minordefault' => 'Merk i utgangspunktet alle redigeringer som mindre',
-'tog-previewontop' => 'Flytt forhåndsvisningen foran redigeringsboksen',
-'tog-previewonfirst' => 'Vis forhåndsvisning ved første redigering av en side',
+'tog-previewontop' => 'Vis forhåndsvisningen ovenfor redigeringsboksen',
+'tog-previewonfirst' => 'Vis forhåndsvisning når du begynner å redigere',
 'tog-nocache' => 'Deaktiver nettlesermellomlagring av sider («caching»)',
-'tog-enotifwatchlistpages' => 'Send meg en e-post når sider på overvåkningslisten blir endret',
-'tog-enotifusertalkpages' => 'Send meg en e-post ved endringer av brukerdiskusjonssiden min',
-'tog-enotifminoredits' => 'Send meg en e-post også ved mindre sideendringer',
+'tog-enotifwatchlistpages' => 'Send meg en e-post når sider på overvåkningslisten min blir endret',
+'tog-enotifusertalkpages' => 'Send meg en e-post når brukerdiskusjonssiden min endres',
+'tog-enotifminoredits' => 'Send meg e-post også ved mindre endringer',
 'tog-enotifrevealaddr' => 'Vis min e-postadresse i utgående meldinger',
-'tog-shownumberswatching' => 'Vis antall overvåkende brukere',
+'tog-shownumberswatching' => 'Vis antall brukere som overvåker',
 'tog-oldsig' => 'Nåværende signatur:',
-'tog-fancysig' => 'Håndter signatur som wikitekst (uten automatisk lenke)',
+'tog-fancysig' => 'Behandle signaturen som wikitekst (uten automatisk lenke)',
 'tog-externaleditor' => 'Bruk ekstern behandler som standard (kun for viderekomne brukere, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
 'tog-externaldiff' => 'Bruk ekstern differanse som standard (kun for viderekomne brukere, krever spesielle innstillinger på din datamaskin. [//www.mediawiki.org/wiki/Manual:External_editors Mer informasjon.])',
 'tog-showjumplinks' => 'Slå på «gå til»-lenker',
@@ -349,7 +352,7 @@ $messages = array(
 'tog-watchlisthideliu' => 'Skjul endringer av innloggede brukere fra overvåkningslisten',
 'tog-watchlisthideanons' => 'Skjul endringer av anonyme brukere fra overvåkningslisten',
 'tog-watchlisthidepatrolled' => 'Skjul patruljerte endringer fra overvåkningslisten',
-'tog-nolangconversion' => 'Slå av variantkonvertering',
+'tog-nolangconversion' => 'Slå av konvertering mellom språkvarianter',
 'tog-ccmeonemails' => 'Send meg kopier av e-poster jeg sender til andre brukere',
 'tog-diffonly' => 'Ikke vis sideinnhold under differ',
 'tog-showhiddencats' => 'Vis skjulte kategorier',
@@ -428,7 +431,7 @@ $messages = array(
 'hidden-category-category' => 'Skjulte kategorier',
 'category-subcat-count' => '{{PLURAL:$2|Denne kategorien har kun følgende underkategori.|Denne kategorien har følgende {{PLURAL:$1|underkategori|$1 underkategorier}}, av totalt $2.}}',
 'category-subcat-count-limited' => 'Kategorien har følgende {{PLURAL:$1|underkategori|$1 underkategorier}}.',
-'category-article-count' => '{{PLURAL:$2|Denne kategorien inneholder kun følgende side.|Følgende {{PLURAL:$1|side|$1 sider}} er i denne kategorien, av totalt $2.}}',
+'category-article-count' => '{{PLURAL:$2|Denne kategorien inneholder kun følgende side.|Under vises $1 av totalt $2 sider som befinner seg i denne kategorien.}}',
 'category-article-count-limited' => 'Følgende {{PLURAL:$1|side|$1 sider}} er i denne kategorien.',
 'category-file-count' => '{{PLURAL:$2|Denne kategorien inneholder kun den følgende filen.|Følgende {{PLURAL:$1|fil|$1 filer}} er i denne kategorien, av totalt $2.}}',
 'category-file-count-limited' => 'Følgende {{PLURAL:$1|fil|$1 filer}} er i denne kategorien.',
@@ -694,9 +697,11 @@ $2',
 'ns-specialprotected' => 'Spesialsider kan ikke redigeres.',
 'titleprotected' => "Denne tittelen har blitt låst for oppretting av [[User:$1|$1]].
 Den angitte grunnen er «''$2''».",
-'filereadonlyerror' => "Kan ikke endre filen «$1» fordi filrepositoriet «$2» er skrivebeskyttet.
+'filereadonlyerror' => 'Kan ikke endre filen «$1» fordi filsamlingen «$2» er skrivebeskyttet.
 
-Oppgitt årsak er «''$3''».",
+Administrators nærmere begrunnelse: «$3».',
+'invalidtitle-knownnamespace' => 'Ugyldig tittel med navnerommet «$2» og teksten «$3»',
+'invalidtitle-unknownnamespace' => 'Ugyldig tittel med ukjent navneromsnummer $1 og teksten «$2»',
 
 # Virus scanner
 'virus-badscanner' => "Dårlig konfigurasjon: Ukjent virusskanner: ''$1''",
@@ -785,6 +790,7 @@ Som et resultat kan det ikke opprettes flere kontoer fra denne IP-adressen.',
 'invalidemailaddress' => 'Din e-postadresse kan ikke aksepteres, fordi den er ugyldig formatert.
 Skriv inn en fungerende e-postadresse eller tøm feltet.',
 'cannotchangeemail' => 'E-postadresser knyttet til brukerkontoer kan ikke endres på denne wikien.',
+'emaildisabled' => 'Dette nettstedet kan ikke sende e-poster.',
 'accountcreated' => 'Konto opprettet',
 'accountcreatedtext' => 'Brukerkontoen for $1 har blitt opprettet.',
 'createaccount-title' => 'Kontooppretting på {{SITENAME}}',
@@ -989,6 +995,7 @@ Siste blokkeringsloggelement kan sees nedenfor.',
 'note' => "'''Merk:'''",
 'previewnote' => "'''Husk at dette bare er en forhåndsvisning.'''
 Endringene dine har ikke blitt lagret ennå!",
+'continue-editing' => 'Fortsett med redigeringen',
 'previewconflict' => 'Slik vil teksten i redigeringsvinduet se ut dersom du lagrer den.',
 'session_fail_preview' => "'''Beklager! Klarte ikke å lagre redigeringen din på grunn av tap av øktdata.'''
 Prøv igjen.
@@ -1001,6 +1008,7 @@ Om det fortsetter å gå galt, prøv å [[Special:UserLogout|logge ut]] og så i
 'token_suffix_mismatch' => "'''Redigeringen din har blitt avvist fordi klienten din ikke hadde punktasjonstegn i redigeringsteksten. Redigeringen har blitt avvist for å hindre ødeleggelse av artikkelteksten. Dette forekommer av og til når man bruker vevbaserte anonyme proxytjenester.'''",
 'edit_form_incomplete' => "'''Deler av redigeringsskjemaet nådde ikke tjeneren; dobbelsjekk at redigeringen er korrekt og prøv igjen.'''",
 'editing' => 'Redigerer $1',
+'creating' => 'Oppretter $1',
 'editingsection' => 'Redigerer $1 (avsnitt)',
 'editingcomment' => 'Redigerer $1 (ny seksjon)',
 'editconflict' => 'Redigeringskonflikt: $1',
@@ -1065,6 +1073,7 @@ Slette- og flytteloggen vises nedenfor.',
 'edit-conflict' => 'Redigeringskonflikt.',
 'edit-no-change' => 'Redigeringen din ble ignorert fordi det ikke var noen endringer.',
 'edit-already-exists' => 'Kunne ikke opprette ny side fordi den finnes fra før.',
+'defaultmessagetext' => 'Standard meldingstekst',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Advarsel: Denne siden inneholder for mange prosesskrevende parserfunksjoner.
@@ -1080,6 +1089,11 @@ Disse parameterne har blitt utelatt.',
 'parser-template-loop-warning' => 'Mal-loop oppdaget: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Mal er brukt for mange ganger ($1)',
 'language-converter-depth-warning' => 'Dybdegrense for språkkonvertering overskredet ($1)',
+'node-count-exceeded-category' => 'Sider hvor antallet noder er overskredet',
+'node-count-exceeded-warning' => 'Siden har overskredet antallet noder',
+'expansion-depth-exceeded-category' => 'Sider hvor hvor ekspansjonsdybden er overskredet',
+'expansion-depth-exceeded-warning' => 'Sida har overskredet ekspansjonsdybden',
+'parser-unstrip-loop-warning' => '«Unstrip»-loop påvist',
 
 # "Undo" feature
 'undo-success' => 'Redigeringen kan omgjøres. Sjekk sammenligningen under for å bekrefte at du vil gjøre dette, og lagre endringene for å fullføre omgjøringen.',
@@ -1224,7 +1238,7 @@ Vennligst sjekk loggen.',
 # Suppression log
 'suppressionlog' => 'Sideskjulingslogg',
 'suppressionlogtext' => 'Under er en liste over sider som er slettet eller blokkert med innhold skjult fra administratorer.
-Se [[Special:BlockList|IP-blokkeringsliste]] for oversikt over aktuelle utelukkelser og blokkeringer.',
+Se [[Special:BlockList|blokkeringslisten]] for oversikt over aktuelle utelukkelser og blokkeringer.',
 
 # History merging
 'mergehistory' => 'Flett sidehistorikker',
@@ -1257,7 +1271,8 @@ Forsikre deg om at denne endringen vil opprettholde historisk sidekontinuitet.',
 
 # Diffs
 'history-title' => 'Revisjonshistorikk for «$1»',
-'difference' => '(Forskjell mellom revisjoner)',
+'difference-title' => 'Forskjell mellom versjoner av «$1»',
+'difference-title-multipage' => 'Forskjell mellom sidene «$1» og «$2»',
 'difference-multipage' => '(Forskjell mellom sider)',
 'lineno' => 'Linje $1:',
 'compareselectedversions' => 'Sammenlign valgte revisjoner',
@@ -1353,6 +1368,7 @@ For å søke i alle, bruk prefikset ''all:'' (inkluderer diskusjonssider, maler,
 'prefs-beta' => 'Betafunksjoner',
 'prefs-datetime' => 'Dato og tid',
 'prefs-labs' => 'Lab-funksjoner',
+'prefs-user-pages' => 'Brukersider',
 'prefs-personal' => 'Brukerdata',
 'prefs-rc' => 'Siste endringer',
 'prefs-watchlist' => 'Overvåkningsliste',
@@ -1615,7 +1631,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'nchanges' => '$1 {{PLURAL:$1|endring|endringer}}',
 'recentchanges' => 'Siste endringer',
 'recentchanges-legend' => 'Alternativ for siste endringer',
-'recentchangestext' => 'Vis de siste endringene til denne siden',
+'recentchanges-summary' => 'Vis de siste endringene til denne siden',
 'recentchanges-feed-description' => 'Følg med på siste endringer i denne wikien med denne matingen.',
 'recentchanges-label-newpage' => 'Denne redigeringen opprettet en ny side',
 'recentchanges-label-minor' => 'Dette er en mindre endring',
@@ -1645,7 +1661,7 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'newsectionsummary' => '/* $1 */ ny seksjon',
 'rc-enhanced-expand' => 'Vis detaljer (krever JavaScript)',
 'rc-enhanced-hide' => 'Skjul detaljer',
-'rc-old-title' => 'opprinnelig opprettet som "$1"',
+'rc-old-title' => 'opprinnelig opprettet som «$1»',
 
 # Recent changes linked
 'recentchangeslinked' => 'Relaterte endringer',
@@ -1696,7 +1712,7 @@ Se [[Special:NewFiles|galleriet over nye filer]] for en mer visuell visning',
 'ignorewarnings' => 'Ignorer eventuelle advarsler',
 'minlength1' => 'Filnavn må være på minst én bokstav.',
 'illegalfilename' => 'Filnavnet «$1» inneholder ugyldige tegn. Gi filen et nytt navn og prøv igjen.',
-'filename-toolong' => 'Filnavn kan ikke overstige 240 bytes.',
+'filename-toolong' => 'Filnavn kan ikke overstige 240 byte.',
 'badfilename' => 'Navnet på filen er blitt endret til «$1».',
 'filetype-mime-mismatch' => 'Filendelsen «.$1» tilsvarer ikke MIME-typen som oppgis i filen ($2).',
 'filetype-badmime' => 'Filer av typen «$1» kan ikke lastes opp.',
@@ -1819,14 +1835,16 @@ Om problemet fortsetter, kontakt en [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-closetemp' => 'Kunne ikke lukke den midlertidige filen.',
 'backend-fail-read' => 'Kunne ikke lese filen $1.',
 'backend-fail-create' => 'Kunne ikke opprette filen $1.',
-'backend-fail-maxsize' => 'Filen $1 ble ikke opprettet fordi den ville blitt større enn {{PLURAL:$2|$2 bytes|$2 byte}}.',
+'backend-fail-maxsize' => 'Kunne ikke skrive filen $1 fordi den er større enn {{PLURAL:$2|én byte|$2 bytes}}.',
 'backend-fail-readonly' => 'Underliggende "$1" er satt skrivebeskyttet fordi: "$2"',
 'backend-fail-synced' => 'Fila «$1» er i en inkonsistent status innen de interne bakstykkene',
 'backend-fail-connect' => 'Kunne ikke koble til filbackend «$1».',
 'backend-fail-internal' => 'En ukjent feil oppsto i filbackend «$1».',
 'backend-fail-contenttype' => 'Kunne ikke avgjøre innholdstypen til filen som skal lagres på «$1».',
 'backend-fail-batchsize' => 'Bakgrunnsprosesseringen belastet med {{PLURAL:$1|en filoperasjon|en samling av $1 filoperasjoner}}; grensen er $2.',
+'backend-fail-usable' => 'Kunne ikke skrive fila $1 på grunn av utilstrekkelige tillatelser eller manglende mapper/beholdere.',
 
+# File journal errors
 'filejournal-fail-dbconnect' => 'Kunne ikke koble til journaldatabasen for lagringssystemet «$1».',
 'filejournal-fail-dbquery' => 'Kunne ikke oppdatere journaldatabasen for lagringssystemet «$1».',
 
@@ -1946,6 +1964,10 @@ En [[Special:WhatLinksHere/$2|fullstendig liste]] er tilgjengelig.',
 Se [$2 filbeskrivelsessida] for mer informasjon.',
 'sharedupload-desc-here' => 'Denne filen er fra $1 og kan brukes av andre prosjekter.
 Beskrivelsen fra [$2 filbeskrivelsessida] vises nedenfor.',
+'sharedupload-desc-edit' => 'Denne filen er fra $1 og kan være i bruk av andre prosjekter.
+Kanskje du vil redigere beskrivelsen på dens [$2 filbeskrivelsesside].',
+'sharedupload-desc-create' => 'Denne filen er fra $1 og kan være i bruk av andre prosjekter.
+Kanskje du vil redigere beskrivelsen på dens [$2 filbeskrivelsesside].',
 'filepage-nofile' => 'Det finnes ingen fil med dette navnet.',
 'filepage-nofile-link' => 'Ingen fil med dette navnet eksisterer, men du kan [$1 laste den opp].',
 'uploadnewversion-linktext' => 'Last opp en ny versjon av denne filen',
@@ -2155,6 +2177,12 @@ Du kan minske antallet resultater ved å velge loggtype, brukernavn eller den si
 'allpagesprefix' => 'Vis sider med prefikset:',
 'allpagesbadtitle' => 'Den angitte sidetittelen var ugyldig eller hadde et interwiki-prefiks. Den kan inneholde ett eller flere tegn som ikke kan brukes i titler.',
 'allpages-bad-ns' => '{{SITENAME}} har ikke navnerommet «$1».',
+'allpages-hide-redirects' => 'Skjul omdirigeringer',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Du ser en mellomlagret versjon av denne siden, som kan være opp til $1 gammel.',
+'cachedspecial-viewing-cached-ts' => 'Du ser på en mellomlagret versjon av denne siden, som kan være ikke helt oppdatert',
+'cachedspecial-refresh-now' => 'Vis siste.',
 
 # Special:Categories
 'categories' => 'Kategorier',
@@ -2637,7 +2665,7 @@ Blokkeringsloggen vises nedenfor.',
 Skjulingsloggen vises nedenfor.',
 'blocklogentry' => 'blokkerte [[$1]] med en varighet på $2 $3',
 'reblock-logentry' => 'endret blokkeringsinnstillinger for [[$1]] med en varighet på $2 $3',
-'blocklogtext' => 'Dette er en logg som viser hvilke brukere som har blitt blokkert og avblokkert. Automatisk blokkerte IP-adresser vises ikke. Se [[Special:BlockList|blokkeringslisten]] for en liste over IP-adresser som er blokkert akkurat nå.',
+'blocklogtext' => 'Dette er en logg som viser hvilke brukere som har blitt blokkert og avblokkert. Automatisk blokkerte IP-adresser vises ikke. Se [[Special:BlockList|blokkeringslisten]] for alle aktive blokkeringer.',
 'unblocklogentry' => 'opphevet blokkeringen av $1',
 'block-log-flags-anononly' => 'kun uregistrerte brukere',
 'block-log-flags-nocreate' => 'kontooppretting deaktivert',
@@ -3746,6 +3774,9 @@ Du skal ha mottatt [{{SERVER}}{{SCRIPTPATH}}/COPYING en kopi av GNU General Publ
 'version-software' => 'Installert programvare',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Versjon',
+'version-entrypoints' => 'Inngangspunkts-URL-er',
+'version-entrypoints-header-entrypoint' => 'Inngangspunkt',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Filsti',
@@ -3934,4 +3965,15 @@ Om det ikke er tilfellet, kan du bruke det enkle skjemaet som du finner under. K
 'api-error-uploaddisabled' => 'Opplastning har blitt deaktivert på denne wikien.',
 'api-error-verification-error' => 'Filen kan være korrupt, eller ha feil filendelse.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekund|sekunder}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minutt|minutter}}',
+'duration-hours' => '$1 {{PLURAL:$1|time|timer}}',
+'duration-days' => '$1 {{PLURAL:$1|dag|dager}}',
+'duration-weeks' => '$1 {{PLURAL:$1|uke|uker}}',
+'duration-years' => '$1 {{PLURAL:$1|år|år}}',
+'duration-decades' => '$1 {{PLURAL:$1|tiår|tiår}}',
+'duration-centuries' => '$1 {{PLURAL:$1|århundre|århundrer}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennier}}',
+
 );
index 0f2f267..3ca1d4e 100644 (file)
@@ -314,25 +314,25 @@ $messages = array(
 'tog-hidepatrolled' => 'Wiezigingen die emarkeerd bin verbargen in leste wiezigingen',
 'tog-newpageshidepatrolled' => "Pagina's die emarkeerd bin, verbargen in de lieste mit nieje artikels",
 'tog-extendwatchlist' => 'Volglieste uutbreien, zodat alle wiezigingen zichtbaor bin, en niet allinnig de leste wieziging',
-'tog-usenewrc' => "Gebruuk de pagina uutebreiden leste wiezigingen (hierveur he'j JavaScript neudig)",
+'tog-usenewrc' => "Groepeer wiezigingen per pagina in de liesten leste wiezigingen en mien volglieste (hierveur he'j JavaScript neudig)",
 'tog-numberheadings' => 'Koppen vanzelf nummeren',
 'tog-showtoolbar' => 'Laot de warkbalke zien',
 'tog-editondblclick' => 'Mit dubbelklik bewarken (JavaScript)',
 'tog-editsection' => 'Mit bewarkgedeeltes',
 'tog-editsectiononrightclick' => 'Bewarkgedeelte mit rechtermuusknoppe bewarken (JavaScript)',
-'tog-showtoc' => 'Samenvatting van de onderwarpen laoten zien (mit meer as dree onderwarpen)',
+'tog-showtoc' => 'Samenvatting laoten zien van de zaken die an bod koemen (mit meer as dree onderwarpen)',
 'tog-rememberpassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})',
-'tog-watchcreations' => "Pagina's die'k anmake op mien volglieste zetten",
-'tog-watchdefault' => "Pagina's die'k wiezige op mien volglieste zetten",
-'tog-watchmoves' => "Pagina's die'k herneume op mien volglieste zetten",
-'tog-watchdeletion' => "Pagina's die'k vortdo op mien volglieste zetten",
+'tog-watchcreations' => "Pagina's die'k anmake en bestaanden die'k opsture op mien volglieste zetten",
+'tog-watchdefault' => "Pagina's en bestaanden die'k wiezige op mien volglieste zetten",
+'tog-watchmoves' => "Pagina's en bestaanden die'k herneume op mien volglieste zetten",
+'tog-watchdeletion' => "Pagina's en bestaanden die'k vortdo op mien volglieste zetten",
 'tog-minordefault' => "Markeer alle veraanderingen as 'kleine wieziging'",
 'tog-previewontop' => 'De naokiekpagina boven t bewarkingsveld zetten',
 'tog-previewonfirst' => 'Naokieken bie eerste wieziging',
 'tog-nocache' => 'De tussenopslag van de webkieker uutzetten',
-'tog-enotifwatchlistpages' => 'Stuur mien n berichjen over paginawiezigingen.',
+'tog-enotifwatchlistpages' => 'Stuur mien n berichjen over pagina- of bestaandswiezigingen uut mien volglieste.',
 'tog-enotifusertalkpages' => 'Stuur mien n berichjen as mien overlegpagina ewiezigd is.',
-'tog-enotifminoredits' => 'Stuur mien oek n berichjen bie kleine bewarkingen',
+'tog-enotifminoredits' => "Stuur mien oek n berichjen bie kleine bewarkingen van pagina's en bestaanden",
 'tog-enotifrevealaddr' => 'Mien netpostadres laoten zien in netposttiejigen',
 'tog-shownumberswatching' => 't Antal gebrukers bekieken die disse pagina volgt',
 'tog-oldsig' => 'Bestaonde haandtekening:',
@@ -579,7 +579,7 @@ $1",
 'editlink' => 'bewark',
 'viewsourcelink' => 'brontekste bekieken',
 'editsectionhint' => 'Bewarkingsveld: $1',
-'toc' => 'Onderwarpen',
+'toc' => 'Kömp an bod',
 'showtoc' => 'Bekieken',
 'hidetoc' => 'Verbarg',
 'collapsible-collapse' => 'Inklappen',
@@ -665,10 +665,12 @@ Meld t dan effen bie n [[Special:ListUsers/sysop|systeembeheerder]] van {{SITENA
 'cannotdelete' => 'De pagina of t bestaand "$1" kon niet vortedaon wörden.
 t Kan ween dat n aander t al vortedaon hef.',
 'cannotdelete-title' => 'Pagina "$1" kan niet vortedaon wörden',
+'delete-hook-aborted' => 't Vortdoon wörden in t wiere eschopt deur n MediaWiki-programmatuuruutbreiding.
+Der is gien veerdere informasie beschikbaor.',
 'badtitle' => 'Ongeldige naam',
 'badtitletext' => 'De naam van de op-evreugen pagina is niet geldig, leeg, of n interwiki-verwiezing naor n onbekende of ongeldige wiki.',
-'perfcached' => 'Disse gegevens koemen uut t tussengeheugen en bin misschien niet aktueel. Der {{PLURAL:$1|is maximaal een resultaot|bin maximaal $1 resultaoten}} beschikbaor in t tussengeheugen.',
-'perfcachedts' => 'Disse gegevens koemen uut t tussengeheugen die veur t lest bie-ewörken is op $2 um $3. Der {{PLURAL:$4|is maximaal een resultaot|bin maximaal $4 resultaoten}} beschikbaor in t tussengeheugen.',
+'perfcached' => 'Disse gegevens koemen uut t tussengeheugen en bin misschien niet aktueel. Der {{PLURAL:$1|is hooguut een resultaot|bin hooguut $1 resultaoten}} beschikbaor in t tussengeheugen.',
+'perfcachedts' => 'Disse gegevens koemen uut t tussengeheugen die veur t lest bie-ewörken is op $2 um $3. Der {{PLURAL:$4|is hooguut een resultaot|bin hooguut $4 resultaoten}} beschikbaor in t tussengeheugen.',
 'querypage-no-updates' => "'''Disse pagina wörden niet meer bie-ewörken.'''",
 'wrong_wfQuery_params' => 'Parameters veur wfQuery() waren verkeerd<br />
 Funksie: $1<br />
@@ -691,9 +693,13 @@ $2',
 'ns-specialprotected' => "Spesiale pagina's kunnen niet bewarkt wörden.",
 'titleprotected' => "t Anmaken van disse pagina is beveiligd deur [[User:$1|$1]].
 De op-egeven reden is ''$2''.",
-'filereadonlyerror' => 'Kon t bestaand "$1" niet anpassen umdat de bestaandsmap "$2" op dit moment allinnig-lezen is.
+'filereadonlyerror' => 'Kon t bestaand "$1" niet anpassen umdat de bestaandsmap "$2" op dit moment op allinnig-lezen steet.
 
-De op-egeven reden is "\'\'$3\'\'".',
+De beheerder gaf hierveur de volgende reden: "$3".',
+'invalidtitle-knownnamespace' => 'Ongeldige titel mit naamruumte "$2" en tekste "$3"',
+'invalidtitle-unknownnamespace' => 'Ongeldige titel mit onbekend naamruumtenummer $1 en tekste "$2"',
+'exception-nologin' => 'Niet an-emeld',
+'exception-nologin-text' => "Um disse pagina te bekieken of disse haandeling uut te kunnen voeren mu'j an-emeld ween bie disse wiki.",
 
 # Virus scanner
 'virus-badscanner' => "Slichte konfigurasie: onbekend antivirusprogramma: ''$1''",
@@ -785,6 +791,7 @@ Um misbruuk te veurkoemen wörden der mer één wachtwoordherinnering per {{PLUR
 'invalidemailaddress' => 't Netpostadres kon niet aksepteerd wörden umdat de opmaak ongeldig is.
 Voer de juuste opmaak van t adres in of laot t veld leeg.',
 'cannotchangeemail' => 't Netpostadres veur n gebruker kan op disse wiki niet ewiezigd wörden.',
+'emaildisabled' => 'Disse webstee kan gien netpost versturen.',
 'accountcreated' => 'Gebrukersprofiel is an-emaakt',
 'accountcreatedtext' => 'De gebrukersnaam veur $1 is an-emaakt.',
 'createaccount-title' => 'Gebrukers anmaken veur {{SITENAME}}',
@@ -980,7 +987,9 @@ De leste regel uut t blokkeerlogboek steet hieronder as referensie:',
 'userinvalidcssjstitle' => "'''Waorschuwing:''' der is gien uutvoering mit de naam \"\$1\". Vergeet niet dat joew eigen .css- en .js-pagina's beginnen mit n kleine letter, bv. \"{{ns:user}}:Naam/'''v'''ector\" in plaotse van \"{{ns:user}}:Naam/'''V'''ector.css\".",
 'updated' => '(Bewark)',
 'note' => "'''Opmarking:'''",
-'previewnote' => "'''NB: je bin de pagina allinnig nog mer an t naokieken; de tekste is nog niet op-esleugen!'''",
+'previewnote' => "'''Waort je: dit is n kontrolepagina.'''
+Joew tekste is niet op-esleugen!",
+'continue-editing' => 'Deurgaon mit bewarken',
 'previewconflict' => "Disse versie laot zien hoe de tekste in t bovenste veld deruut kump te zien a'j de tekste opslaon.",
 'session_fail_preview' => "'''De bewarking kan niet verwarkt wörden wegens n verlies an data.'''
 Probeer t laoter weer.
@@ -994,6 +1003,7 @@ As t dan nog problemen geef, probeer dan um [[Special:UserLogout|opniej an te me
 'token_suffix_mismatch' => "'''De bewarking is eweigerd umdat de webkieker de leestekens in t bewarkingstoken verkeerd behaandeld hef. De bewarking is eweigerd um verminking van de paginatekste te veurkoemen. Dit gebeurt soms as der n web-ebaseerden proxydienst gebruukt wörden waor fouten in zitten.'''",
 'edit_form_incomplete' => "'''Partie delen van t bewarkingsformulier hebben de server niet bereikt. Kiek eers nao of de bewarkingen kloppen en probeer t opniej.'''",
 'editing' => 'Bewark: $1',
+'creating' => 'Bezig mit t anmaken van $1',
 'editingsection' => 'Bewark: $1 (deelpagina)',
 'editingcomment' => 'Bewark: $1 (niej onderwarp)',
 'editconflict' => 'Bewarkingskonflikt: $1',
@@ -1057,6 +1067,7 @@ t Schient dat t vortedaon is.',
 'edit-no-change' => 'Joew bewarking is enegeerd, umdat der gien wieziging an de tekste edaon is.',
 'edit-already-exists' => 'De pagina kon niet an-emaakt wörden.
 t Besteet al.',
+'defaultmessagetext' => 'Standardtekste',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Waorschuwing: disse pagina gebruukt te veule kostbaore parserfunksies.
@@ -1071,6 +1082,12 @@ Sommigen mallen wörden niet in-evoegd.',
 'parser-template-loop-warning' => 'Der is n kringloop in mallen waoreneumen: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Der is over de rekursiediepte veur mallen is hinne gaon ($1)',
 'language-converter-depth-warning' => 'Je hebben t dieptelimiet veur de taalumzetter bereikt ($1)',
+'node-count-exceeded-category' => "Pagina's die t knuppenantal overschrejen hebben.",
+'node-count-exceeded-warning' => 'Op de pagina is t maximale antal nodes overschrejen',
+'expansion-depth-exceeded-category' => "Pagina's waor de expansiediepte overschrejen is",
+'expansion-depth-exceeded-warning' => 'In disse pagina staon te veul mallen',
+'parser-unstrip-loop-warning' => 'Der is n "unstrip"-lusse evunnen',
+'parser-unstrip-recursion-limit' => 'De rekursielimiet ($1) veur "unstrip" is overschrejen',
 
 # "Undo" feature
 'undo-success' => 'De bewarking kan weerummedreid wörden. Kiek de vergelieking hieronder nao um der wisse van de ween dat alles goed is, en slao de de pagina op um de bewarking weerumme te dreien.',
@@ -1210,7 +1227,8 @@ Kiek de logboeken nao.',
 
 # Suppression log
 'suppressionlog' => 'Verbargingslogboek',
-'suppressionlogtext' => "In de onderstaande lieste staon de vortedaone pagina's en blokkeringen die veur beheerders verbörgen bin. In de [[Special:BlockList|IP-blokkeerlieste]] bin de blokkeringen, die noen van toepassing bin, te bekieken.",
+'suppressionlogtext' => "In de onderstaande lieste staon de vortedaone pagina's en blokkeringen die veur beheerders verbörgen bin. 
+In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toepassige bin, te bekieken.",
 
 # History merging
 'mergehistory' => "Geschiedenisse van pagina's bie mekaar doon",
@@ -1241,7 +1259,9 @@ Kiek de logboeken nao.',
 'mergelogpagetext' => "Hieronder zie'j n lieste van de leste samenvoegingen van n paginageschiedenisse naor n aandere.",
 
 # Diffs
-'history-title' => 'Geschiedenisse van "$1"',
+'history-title' => 'Versiegeschiedenisse van "$1"',
+'difference-title' => 'Verschil tussen versies van "$1"',
+'difference-title-multipage' => 'Verschil tussen pagina\'s "$1" en "$2"',
 'difference-multipage' => "(Verschil tussen pagina's)",
 'lineno' => 'Regel $1:',
 'compareselectedversions' => 'Vergeliek de ekeuzen versies',
@@ -1336,11 +1356,12 @@ Kiek de logboeken nao.',
 'prefs-beta' => 'Bètafunksies',
 'prefs-datetime' => 'Daotum en tied',
 'prefs-labs' => 'Alphafunksies',
+'prefs-user-pages' => "Gebrukerspagina's",
 'prefs-personal' => 'Gebrukersgegevens',
 'prefs-rc' => 'Leste wiezigingen',
 'prefs-watchlist' => 'Volglieste',
 'prefs-watchlist-days' => 'Antal dagen in de volglieste bekieken:',
-'prefs-watchlist-days-max' => 'Maximaal $1 {{PLURAL:$1|dag|dagen}}',
+'prefs-watchlist-days-max' => 'Hooguut $1 {{PLURAL:$1|dag|dagen}}',
 'prefs-watchlist-edits' => 'Antal wiezigingen in de uutebreiden volglieste:',
 'prefs-watchlist-edits-max' => 'Maximale antal: 1.000',
 'prefs-watchlist-token' => 'Volgliestesleutel',
@@ -1362,7 +1383,7 @@ Kiek de logboeken nao.',
 'stub-threshold' => 'Verwiezingsformattering van <a href="#" class="stub">beginnetjes</a>:',
 'stub-threshold-disabled' => 'uuteschakeld',
 'recentchangesdays' => 'Antal dagen die de lieste "leste wiezigingen" laot zien:',
-'recentchangesdays-max' => '(maximaal $1 {{PLURAL:$1|dag|dagen}})',
+'recentchangesdays-max' => '(hooguut $1 {{PLURAL:$1|dag|dagen}})',
 'recentchangescount' => 'Standard antal bewarkingen um te laoten zien:',
 'prefs-help-recentchangescount' => "Dit geldt veur leste wiezigingen, paginageschiedenisse en logboekpagina's",
 'prefs-help-watchlist-token' => "A'j in dit veld n geheime kode invullen, dan maakt t RSS-voer an veur joew volglieste.
@@ -1792,14 +1813,15 @@ As t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/
 'backend-fail-writetemp' => 'Kon niet naor n tiedelik bestaand schrieven.',
 'backend-fail-closetemp' => 'Kon niet n tiedelik bestaand sluten.',
 'backend-fail-read' => 'Kon t bestaand $1 niet lezen.',
-'backend-fail-create' => 'Kon t bestaand $1 niet anmaken.',
-'backend-fail-maxsize' => 'Kon t bestaand $1 niet anmaken umdat t groter is as {{PLURAL:$2|één byte|$2 bytes}}.',
+'backend-fail-create' => 'Kon t bestaand $1 niet schrieven.',
+'backend-fail-maxsize' => 'Kon t bestaand $1 niet schrieven umdat t groter is as {{PLURAL:$2|één byte|$2 bytes}}.',
 'backend-fail-readonly' => 'Van de opslag "$1" kan op dit moment allinnig elezen wörden. De op-egeven reden was: "$2"',
 'backend-fail-synced' => 't Bestaand "$1" bevient zich in n inkonsistente toestaand in de interne opslagbackends.',
 'backend-fail-connect' => 'Kon gien verbiending maken mit t opslagbackend "$1".',
 'backend-fail-internal' => 'Der is n onbekende fout op-etreden in t opslagbackend "$1".',
 'backend-fail-contenttype' => 'Kon t inhoudstype van t bestaand um op "$1" op te slaon niet bepaolen.',
 'backend-fail-batchsize' => 'Reeks van $1 bestaands{{PLURAL:$1|operasie|operasies}} in de opslagbackend; de limiet is $2 {{PLURAL:$2|operasie|operasies}}.',
+'backend-fail-usable' => 'Kon t bestaand $1 niet schrieven vanwegen te min rechten of niet-anwezige mappen of houwers.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kon gien verbiending maken mit de journaaldatabanke veur t opslagbackend "$1".',
@@ -1919,6 +1941,10 @@ De [[Special:WhatLinksHere/$2|hele lieste]] is oek beschikbaor.',
 'sharedupload' => "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten.",
 'sharedupload-desc-there' => "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. Bekiek de [$2 beschrieving van t bestaand] veur meer informasie.",
 'sharedupload-desc-here' => "Dit is n edeeld bestaand op $1 en ku'j oek gebruken veur aandere projekten. De [$2 beschrieving van t bestaand] dergindse, steet hieronder.",
+'sharedupload-desc-edit' => 'Dit besatand kömp van $1 en kan oek in aandere projekten gebruukt wörden.
+Je kunnen de [$2 pagina mit de bestaandsbeschrieving] daor bewarken.',
+'sharedupload-desc-create' => 'Dit besatand kömp van $1 en kan oek in aandere projekten gebruukt wörden.
+Je kunnen de [$2 pagina mit de bestaandsbeschrieving] daor bewarken.',
 'filepage-nofile' => 'Der besteet gien bestaand mit disse naam.',
 'filepage-nofile-link' => 'Der besteet gien bestaand mit disse naam, mer je kunnen t [$1 opsturen].',
 'uploadnewversion-linktext' => 'n Niejere versie van dit bestaand opsturen.',
@@ -2115,6 +2141,7 @@ n Bestaand kan hier dus verkeerd op-eneumen ween.",
 Je kunnen oek kiezen veur bepaolde logboeken en filteren op gebruker (heufdlettergeveulig) en titel (heufdlettergeveulig).',
 'logempty' => 'Der steet gien passende informasie in t logboek.',
 'log-title-wildcard' => 'Zeuk naor titels die beginnen mit disse tekste:',
+'showhideselectedlogentries' => 'Ekeuzen logboekregels laoten zien of verbargen',
 
 # Special:AllPages
 'allpages' => "Alle pagina's",
@@ -2132,6 +2159,12 @@ Je kunnen oek kiezen veur bepaolde logboeken en filteren op gebruker (heufdlette
 'allpagesprefix' => "Pagina's bekieken die beginnen mit:",
 'allpagesbadtitle' => 'De op-egeven paginanaam is ongeldig of der steet n interwikiveurvoegsel in. Meugelikerwieze staon der karakters in de naam die niet gebruukt maggen wörden in paginanamen.',
 'allpages-bad-ns' => '{{SITENAME}} hef gien "$1"-naamruumte.',
+'allpages-hide-redirects' => 'Deurverwiezingen verbargen',
+
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Je bekieken noen n versie uut t tussengeheugen van disse pagina, die hooguut $1 oud is.',
+'cachedspecial-viewing-cached-ts' => 'Je bekieken noen n versie uut t tussengeheugen van disse pagina, t kan ween dat t niet helemaole bie de tied is.',
+'cachedspecial-refresh-now' => 'Leste bekieken.',
 
 # Special:Categories
 'categories' => 'Kategorieën',
@@ -2567,7 +2600,7 @@ De leste regel uut t blokkeerlogboek steet as referensie',
 'badipaddress' => 'Ongeldig IP-adres of onbestaonde gebrukersnaam',
 'blockipsuccesssub' => 'Suksesvol eblokkeerd',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] is noen eblokkeerd.<br />
-Op de [[Special:BlockList|IP-blokkeerlieste]] steet n lieste mit alle blokkeringen.',
+Op de [[Special:BlockList|blokkeerlieste]] steet n lieste mit alle blokkeringen.',
 'ipb-blockingself' => "Hiermee blokkeer je je eigen. Wi'j dat?",
 'ipb-confirmhideuser' => "Hiermee blokkeer je n verbörgen gebruker. Hierveur wörden gebrukersnamen in alle liesten en logboekregels verbörgen. Wi'j dat?",
 'ipb-edit-dropdown' => 'Blokkeerredens bewarken',
@@ -2619,7 +2652,7 @@ t Blokkeerlogboek steet hieronder as referensie:',
 t Logboek mit onderdrokten versies steet hieronder as referensie:',
 'blocklogentry' => 'blokkeren "[[$1]]" veur $2 $3',
 'reblock-logentry' => 'hef de instellingen veur de blokkering van [[$1]] ewiezigd t Löp noen of over $2 $3',
-'blocklogtext' => "Hier zie'j n lieste van de leste blokkeringen en deblokkeringen. Automatiese blokkeringen en deblokkeringen koemen niet in t logboek te staon. Zie de [[Special:BlockList|IP-blokkeerlieste]] veur de lieste van adressen die noen eblokkeerd bin.",
+'blocklogtext' => "Hier zie'j n lieste van de leste blokkeringen en deblokkeringen. Automatiese blokkeringen en deblokkeringen koemen niet in t logboek te staon. Zie de [[Special:BlockList|blokkeerlieste]] veur de lieste van adressen die noen eblokkeerd bin.",
 'unblocklogentry' => 'blokkering van $1 is op-eheven',
 'block-log-flags-anononly' => 'allinnig anoniemen',
 'block-log-flags-nocreate' => 'anmaken van gebrukersprofielen uuteschakeld',
@@ -2976,6 +3009,7 @@ Meestentieds kump dit deur n uutgaonde verwiezing die op de zwarte lieste steet.
 'spambot_username' => 'MediaWiki ongewunste zooi oprumen',
 'spam_reverting' => 'Bezig mit t weerummezetten naor de leste versie die gien verwiezing hef naor $1',
 'spam_blanking' => 'Alle wiezigingen mit n verwiezing naor $1 wörden vortehaold',
+'spam_deleting' => 'In alle versies staon verwiezingen naor $1. Pagina vortedaon',
 
 # Info page
 'pageinfo-title' => 'Informasie over "$1"',
@@ -3269,8 +3303,8 @@ Aandere velden wörden verbörgen.
 'exif-contentwarning' => 'Waorschuwing over inhoud',
 'exif-giffilecomment' => 'Opmarking bie GIF-bestaand',
 'exif-intellectualgenre' => 'Soort onderwarp',
-'exif-subjectnewscode' => 'Onderwarpcode',
-'exif-scenecode' => 'IPTC-scènecode',
+'exif-subjectnewscode' => 'Onderwarpkode',
+'exif-scenecode' => 'IPTC-scènekode',
 'exif-event' => 'Aofebeelden gebeurtenisse',
 'exif-organisationinimage' => 'Aofebeelden organisasie',
 'exif-personinimage' => 'Aofebeeld persoon',
@@ -3591,8 +3625,8 @@ De bevestigingskode zal verlopen op $4.',
 'table_pager_prev' => 'Veurige',
 'table_pager_first' => 'Eerste pagina',
 'table_pager_last' => 'Leste pagina',
-'table_pager_limit' => 'Laot $1 onderwarpen per pagina zien',
-'table_pager_limit_label' => 'Onderwarpen per pagina:',
+'table_pager_limit' => 'Laot $1 resultaoten per pagina zien',
+'table_pager_limit_label' => 'Zaken per pagina:',
 'table_pager_limit_submit' => 'Zeuk',
 'table_pager_empty' => 'Gien resultaoten',
 
@@ -3602,6 +3636,9 @@ De bevestigingskode zal verlopen op $4.',
 'autoredircomment' => 'deurverwiezing naor [[$1]]',
 'autosumm-new' => "Nieje pagina: '$1'",
 
+# Size units
+'size-kilobytes' => '$1 kB',
+
 # Live preview
 'livepreview-loading' => 'An t laojen…',
 'livepreview-ready' => 'An t laojen… ree!',
@@ -3677,6 +3714,9 @@ Samen mit dit programma heur je n [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de
 'version-software' => 'Programmatuur die installeerd is',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Versie',
+'version-entrypoints' => 'Webadressen veur ingangen',
+'version-entrypoints-header-entrypoint' => 'Ingang',
+'version-entrypoints-header-url' => 'Webadres',
 
 # Special:FilePath
 'filepath' => 'Bestaandslokasie',
@@ -3839,6 +3879,8 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'api-error-empty-file' => "t Bestaand da'j op-estuurd hebben is leeg.",
 'api-error-emptypage' => "Je maggen gien lege nieje pagina's anmaken.",
 'api-error-fetchfileerror' => 'Interne fout: der is iets verkeerd egaon mit t ophaolen van t bestaand.',
+'api-error-fileexists-forbidden' => 'Der besteet al n bestaand mit de naam "$1" die niet overschreven kan wörden.',
+'api-error-fileexists-shared-forbidden' => 'Der besteet al n bestaand mit de naam "$1" in de edeelden bestaandsarchief dat niet overschreven kan wörden.',
 'api-error-file-too-large' => "t Bestaand da'j op-estuurd hebben is te groot.",
 'api-error-filename-tooshort' => 'De bestaandsnaam is te kort.',
 'api-error-filetype-banned' => 'Dit bestaandstype is niet toe-estaon.',
@@ -3866,4 +3908,17 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'api-error-uploaddisabled' => 'Je kunnen gien bestaanden opsturen in deze wiki.',
 'api-error-verification-error' => 'Dit bestaand is meugelik beschaodigd of hef n onjuuste extensie.',
 
+# Durations
+'duration-seconds' => '$1 {{PLURAL:$1|sekonde|sekonden}}',
+'duration-minutes' => '$1 {{PLURAL:$1|minuut|minuten}}',
+'duration-hours' => '$1 {{PLURAL:$1|uur|uren}}',
+'duration-days' => '$1 {{PLURAL:$1|dag|dagen}}',
+'duration-weeks' => '$1 {{PLURAL:$1|weke|weken}}',
+'duration-years' => '$1 {{PLURAL:$1|jaor|jaoren}}',
+'duration-decades' => '$1 {{PLURAL:$1|desennium|desennia}}',
+'duration-centuries' => '$1 {{PLURAL:$1|eeuw|eeuwen}}',
+'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
+
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'Kon gien vergrendeling op server $1 zetten.',
 );
index 14fba49..1bd7c73 100644 (file)
@@ -705,6 +705,8 @@ Maak hiervan melding bij een [[Special:ListUsers/sysop|beheerder]] van {{SITENAM
 'cannotdelete' => 'De pagina of het bestand "$1" kon niet verwijderd worden.
 Mogelijk is deze al door iemand anders verwijderd.',
 'cannotdelete-title' => 'Pagina "$1" kan niet verwijderd worden',
+'delete-hook-aborted' => 't Vortdoon is aofebreuken deur n haak.
+Der is gien informasie over beschikbaor.',
 'badtitle' => 'Ongeldige paginanaam',
 'badtitletext' => 'De naam van de opgevraagde pagina was ongeldig, leeg of bevatte een verkeerde intertaal- of interwikinaamverwijzing.
 Wellicht bevat de paginanaam niet toegestane tekens.',
@@ -743,6 +745,8 @@ De gegeven reden is ''$2''.",
 De opgegeven reden is "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Ongeldige titel met naamruimte "$2" en tekst "$3"',
 'invalidtitle-unknownnamespace' => 'Ongeldige titel met onbekend naamruimtenummer $1 en tekst "$2"',
+'exception-nologin' => 'Niet aangemeld',
+'exception-nologin-text' => 'Om deze pagina te bekijken of deze handeling uit te kunnen voeren moet u aangemeld zijn bij deze wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Onjuiste configuratie: onbekende virusscanner: ''$1''.",
@@ -4084,6 +4088,8 @@ Anders kunt u ook het eenvoudige formulier hieronder gebruiken. Uw reactie wordt
 'api-error-empty-file' => 'Het bestand dat u hebt geüpload is leeg.',
 'api-error-emptypage' => "Het aanmaken van nieuwe, lege pagina's is niet toegestaan.",
 'api-error-fetchfileerror' => 'Interne fout: er is iets misgegaan bij het ophalen van het bestand.',
+'api-error-fileexists-forbidden' => 'Er bestaat al een bestand met de naam "$1" dat niet overschreven kan worden.',
+'api-error-fileexists-shared-forbidden' => 'Er bestaat al een bestand met de naam "$1" in de gedeelde repository dat niet overschreven kan worden.',
 'api-error-file-too-large' => 'Het bestand dat u hebt geüpload is te groot.',
 'api-error-filename-tooshort' => 'De bestandsnaam is te kort.',
 'api-error-filetype-banned' => 'Dit bestandstype mag niet geüpload worden.',
index 6d5496a..f106a4c 100644 (file)
@@ -1549,7 +1549,7 @@ Dette kan ikke tilbakestillast.',
 'recentchanges-legend' => 'Alternativ for siste endringar',
 'recentchanges-summary' => 'På denne sida ser du dei sist endra sidene i {{SITENAME}}.',
 'recentchanges-feed-description' => 'Fylg med på dei siste endringane på denne wikien med dette abonnementet.',
-'recentchanges-label-newpage' => 'Denne redigeringa oppretta ei ny side',
+'recentchanges-label-newpage' => 'Denne endringa oppretta ei ny side',
 'recentchanges-label-minor' => 'Dette er ei mindre endring',
 'recentchanges-label-bot' => 'Denne endringa vart gjort av ein bot',
 'recentchanges-label-unpatrolled' => 'Denne endringa er ikkje patruljert enno',
@@ -2133,9 +2133,9 @@ Om du seinare vil fjerne sida frå overvakingslista, klikk på «Fjern overvakin
 'watchnochange' => 'Ingen av sidene i overvakingslista er endra i den valde perioden.',
 'watchlist-details' => '{{PLURAL:$1|Éi side|$1 sider}} er overvaka, utanom diskusjonssider.',
 'wlheader-enotif' => '* Funksjonen for endringsmeldingar per e-post er på.',
-'wlheader-showupdated' => "* Sider som er vortne endra sidan du sist såg på dei er '''utheva'''",
+'wlheader-showupdated' => "* Sider som har blitt endra sidan du sist såg på dei er '''utheva'''",
 'watchmethod-recent' => 'sjekkar siste endringar for dei overvaka sidene',
-'watchmethod-list' => 'sjekkar om dei overvaka sidene er vortne endra i det siste',
+'watchmethod-list' => 'sjekkar om dei overvaka sidene har blitt endra i det siste',
 'watchlistcontains' => 'Overvakingslista di inneheld {{PLURAL:$1|éi side|$1 sider}}.',
 'iteminvalidname' => 'Problem med «$1», ugyldig namn...',
 'wlnote' => "Nedanfor er {{PLURAL:$1|den siste endringa|dei siste '''$1''' endringane}} {{PLURAL:$2|den siste timen|dei siste '''$2''' timane}}, for $3, kl. $4.",
index 036e10b..ccc53c4 100644 (file)
@@ -279,7 +279,7 @@ $messages = array(
 'tog-previewontop' => 'ଏଡ଼ିଟ ବାକ୍ସ ଆଗରୁ ଦେଖଣା ଦେଖାଇବେ',
 'tog-previewonfirst' => 'ପ୍ରଥମ ବଦଳର ଦେଖଣା ଦେଖାଇବେ',
 'tog-nocache' => 'ବ୍ରାଉଜର ପୃଷ୍ଠା ସଂରକ୍ଷଣକୁ ଅଚଳ କରିବେ',
-'tog-enotifwatchlistpages' => 'ମୋ ଦେଖଣାତାଲିକାରେ ଥିବା ପୃଷ୍ଠାରେ କିଛି ବଦଳ ହେଲେ ମୋତେ ଇ-ମେଲ କରିବେ',
+'tog-enotifwatchlistpages' => 'ମୋ ଦେଖଣାତାଲିକାରେ ଥିବା ପୃଷ୍ଠା ବା ଫାଇଲରେ କିଛି ବଦଳ ହେଲେ ମୋତେ ଇ-ମେଲ କରିବେ',
 'tog-enotifusertalkpages' => 'ମୋର ଆଲୋଚନା ପୃଷ୍ଠାରେ କିଛି ବଦଳ ହେଲେ ମୋତେ ଇ-ମେଲ କରିବେ',
 'tog-enotifminoredits' => 'ପୃଷ୍ଠାରେ ଛୋଟ ଛୋଟ ବଦଳ ହେଲେ ବି ମୋତେ ଇ-ମେଲ କରିବେ',
 'tog-enotifrevealaddr' => 'ସୂଚନା ଇ-ମେଲ ରେ ମୋର ଇ-ମେଲ ଠିକଣା ଦେଖାଇବେ',
@@ -501,8 +501,8 @@ $1',
 'mainpage' => 'ପ୍ରଧାନ ପୃଷ୍ଠା',
 'mainpage-description' => 'ପ୍ରଧାନ ପୃଷ୍ଠା',
 'policy-url' => 'Project:ନୀତି',
-'portal' => 'ସà¬\99à­\8dà¬\98 à¬\86ଲà­\8bà¬\9aନା à¬¸à¬­à¬¾',
-'portal-url' => 'Project:ସà¬\99à­\8dà¬\98 à¬\86ଲà­\8bà¬\9aନା à¬¸à¬­à¬¾',
+'portal' => 'ସà¬\99à­\8dà¬\98 à¬¸à­\82à¬\9aନା à¬«à¬³à¬\95',
+'portal-url' => 'Project:ସà¬\99à­\8dà¬\98 à¬¸à­\82à¬\9aନା à¬«à¬³à¬\95',
 'privacy' => 'ଗୁମର ନୀତି',
 'privacypage' => 'Project:ଗୁମର ନୀତି',
 
@@ -520,10 +520,10 @@ $1',
 'newmessageslink' => 'ନୂଆ ମେସେଜ',
 'newmessagesdifflink' => 'ଶେଷ ବଦଳ',
 'youhavenewmessagesmulti' => '$1 ତାରିଖରେ ନୂଆ ଚିଠିଟିଏ ଆସିଛି',
-'editsection' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
-'editold' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
+'editsection' => 'ସମ୍ପାଦନ',
+'editold' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
 'viewsourceold' => 'ମୂଳାଧାର ଦେଖିବେ',
-'editlink' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
+'editlink' => 'ସମ୍ପାଦନ',
 'viewsourcelink' => 'ମୂଳାଧାର ଦେଖିବେ',
 'editsectionhint' => '$1 ଭାଗଟିକୁ ବଦଳାଇବେ',
 'toc' => 'ଭିତର ଚିଜ',
@@ -2006,7 +2006,7 @@ A page is treated as disambiguation page if it uses a template which is linked f
 
 'brokenredirects' => 'ଭଙ୍ଗା ପୁନପ୍ରେରଣ',
 'brokenredirectstext' => 'ତଳଲିଖିତ ପୁନପ୍ରେରଣ ସବୁ ସ୍ଥିତିହିନ ପୃଷ୍ଠାମାନଙ୍କୁ ପୁନପ୍ରେରିତ ହୋଇଥାଏ :',
-'brokenredirects-edit' => "<big>'''ଏହାକୁ ବଦଳାନ୍ତୁ'''</big>",
+'brokenredirects-edit' => 'ସମ୍ପାଦନ',
 'brokenredirects-delete' => 'ଲିଭାଇବେ',
 
 'withoutinterwiki' => 'ଭାଷାର ଲିଙ୍କ ନଥିବା ପୃଷ୍ଠାମାନ',
@@ -2409,7 +2409,7 @@ $2ଙ୍କ ଦେଇ ଶେଷଥର ହୋଇଥିବା ସଂସ୍କର
 'pagesize' => '(ବାଇଟ)',
 
 # Restrictions (nouns)
-'restriction-edit' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
+'restriction-edit' => 'ଏହାକୁ ବଦଳାନ୍ତୁ',
 'restriction-move' => 'ଘୁଞ୍ଚାଇବେ',
 'restriction-create' => 'ଗଢ଼ନ୍ତୁ',
 'restriction-upload' => 'ଅପଲୋଡ଼ କରନ୍ତୁ',
@@ -3738,7 +3738,7 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'tags-display-header' => 'ବଦଳ ତାଲିକାରେ ଦେଖଣା',
 'tags-description-header' => 'ଅର୍ଥର ପୁରା ବିବରଣୀ',
 'tags-hitcount-header' => 'ଚିହ୍ନିତ ବଦଳ',
-'tags-edit' => '<big>ଏହାକୁ ବଦଳାନ୍ତୁ</big>',
+'tags-edit' => 'ସମ୍ପାଦନ',
 'tags-hitcount' => '$1 {{PLURAL:$1|ବଦଳ|ବଦଳସବୁ}}',
 
 # Special:ComparePages
index 1105add..50cb0fe 100644 (file)
@@ -758,7 +758,7 @@ $2',
 'prefs-edits' => 'Ивдтыты нымæц:',
 'prefsnologin' => 'Системæйæн дæхи нæ бацамыдтай',
 'changepassword' => 'Пароль ивæн',
-'prefs-skin' => 'ФæлÑ\8bÑ\81Ñ\82',
+'prefs-skin' => 'ЦÑ\8aаÑ\80',
 'skin-preview' => 'Разæркаст',
 'prefs-beta' => 'Бета фадæттæ',
 'prefs-datetime' => 'Датæ æмæ рæстæг',
@@ -1417,7 +1417,7 @@ $3',
 
 # Special:Version
 'version' => 'Фæлтæр',
-'version-skins' => 'ФæлÑ\8bÑ\81Ñ\82',
+'version-skins' => 'ЦÑ\8aаÑ\80',
 'version-other' => 'Æндæр',
 'version-version' => '(Фæлтæр $1)',
 'version-license' => 'Лицензи',
index bc10284..f9d073d 100644 (file)
@@ -76,35 +76,35 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
 'tue' => 'Mrt',
 'wed' => 'Mie',
 'thu' => 'Jue',
-'fri' => 'Vie',
+'fri' => 'Bie',
 'sat' => 'Sab',
 'january' => 'Eneru',
 'february' => 'Pebreru',
-'march' => 'Marzu',
+'march' => 'Marsu',
 'april' => 'Abril',
 'may_long' => 'Mayu',
 'june' => 'Juniu',
 'july' => 'Juliu',
 'august' => 'Agostu',
-'september' => 'Setiembri',
+'september' => 'Septiembri',
 'october' => 'Octubri',
 'november' => 'Nobiembri',
-'december' => 'Diciembri',
+'december' => 'Disiembri',
 'january-gen' => 'Eneru',
-'february-gen' => 'Febreru',
-'march-gen' => 'Marzu',
+'february-gen' => 'Pebreru',
+'march-gen' => 'Marsu',
 'april-gen' => 'Abril',
 'may-gen' => 'Mayu',
 'june-gen' => 'Juniu',
 'july-gen' => 'Juliu',
 'august-gen' => 'Agostu',
-'september-gen' => 'Setiembri',
-'october-gen' => 'Octobri',
-'november-gen' => 'Noviembri',
-'december-gen' => 'Diciembri',
+'september-gen' => 'Septiembri',
+'october-gen' => 'Octubri',
+'november-gen' => 'Nobiembri',
+'december-gen' => 'Disiembri',
 'jan' => 'Ene',
 'feb' => 'Peb',
-'mar' => 'Mrz',
+'mar' => 'Mrs',
 'apr' => 'Abr',
 'may' => 'Myu',
 'jun' => 'Jnu',
@@ -154,11 +154,17 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
 'faqpage' => 'Project:MAK',
 
 # Vector skin
+'vector-action-addsection' => 'Dagdagan ing pisasabian',
+'vector-action-delete' => 'Buran',
 'vector-action-move' => 'Iyalis',
 'vector-action-protect' => 'Protectan/kambilan',
 'vector-action-undelete' => 'Isubli/iurung ya pangabura',
 'vector-action-unprotect' => 'Idayu ya panga-protecta',
+'vector-view-create' => 'Maglalang',
+'vector-view-edit' => 'Alilan',
+'vector-view-history' => 'Lawen ya ing amlat',
 'vector-view-view' => 'Basan',
+'vector-view-viewsource' => 'Lawen ya ing pikuanan',
 'namespaces' => 'Karinanlagiu',
 'variants' => 'Aliwapa',
 
@@ -176,6 +182,7 @@ Pabusten ing pamanaliling dake kapamilatan [alilan] ning suglung',
 'printableversion' => 'Kopiang malyaring i-print',
 'permalink' => 'Suglung a permanenti',
 'print' => 'I-print',
+'view' => 'Lawen',
 'edit' => 'Alilan',
 'create' => 'Maglalang',
 'editthispage' => 'I-edit ya ing bulung a ini',
@@ -754,6 +761,7 @@ Gamitan me ing radio button column bang bukud mung detang miyalilan aniang o bay
 'viewprevnext' => 'Lon ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Atin bulung a mikilagiung \"[[:\$1]]\" keng wiking ini.'''",
 'searchhelp-url' => 'Help:Kalamnan',
+'searchprofile-everything' => 'Eganagana',
 'search-result-size' => '$1 ({{PLURAL:$2|1 a kataya|$2 kataya}})',
 'search-result-score' => 'Kaugnayan (relevance): $1%',
 'search-redirect' => '(pamanalis direksiun $1)',
@@ -2086,6 +2094,14 @@ Detang aliwa tambing (by default) lang makasalikut.
 'exif-gpsareainformation' => 'Lagyu ning lugal king GPS',
 'exif-gpsdatestamp' => 'Petsa ning GPS',
 'exif-gpsdifferential' => 'Pamanulid king pamialiwa ning GPS (GPS differential correction)',
+'exif-worldregioncreated' => 'Labuad nung nu ya meyakua ing litratu',
+'exif-countrycreated' => 'Bangsa nung nokarin ya meyakua ing litratu',
+'exif-countrydest' => 'Bangsang makalto',
+'exif-provinceorstatedest' => 'Lalawigan o bangsang makalto',
+'exif-citydest' => 'Lakanbalen makalto',
+'exif-objectname' => 'Makuyad a bansag',
+'exif-source' => 'Pikuanan',
+'exif-cameraownername' => 'Mikibandi keng paglitratu',
 
 # EXIF attributes
 'exif-compression-1' => 'E makapitpit (uncompressed)',
index cf649e0..de6af95 100644 (file)
@@ -126,6 +126,7 @@ $messages = array(
 'subcategories' => 'Unnerabdeeling',
 'category-media-header' => 'Media in Abdeeling „$1“',
 'category-empty' => "''Die Abdeeling hot zu daere Zeit kene Bledder oder Feils.''",
+'hidden-categories' => '{{PLURAL:$1|Versteckelte Abdeeling|Verstecktelte Abdeelinge}}',
 'category-article-count-limited' => '{{PLURAL:$1|Sell Blatt iss|Selle $1 Bledder sin}} in daer Abdeeling drin:',
 'category-file-count-limited' => '{{PLURAL:$1|Sell Feil iss|Selle $1 Feils sin}} in daer Abdeeling drin:',
 'listingcontinuesabbrev' => '(weider)',
@@ -276,6 +277,7 @@ Wenns des net iss, hoscht verleicht en Fehler in de Daadebank gfunne. Bitte meld
 'missingarticle-diff' => '(Unnerschidd zwische Versione: $1, $2)',
 'internalerror' => 'Interner Fehler',
 'internalerror_info' => 'Interner Fehler: $1',
+'badtitle' => 'Tidl net gildich',
 'ns-specialprotected' => 'Besunnere Bledder sinn net zum Ennere.',
 
 # Virus scanner
index 64430a7..4e90283 100644 (file)
@@ -233,8 +233,8 @@ Zum die Said aaleche, kannscht do in dem Käschtel unne aafange mid schraiwe (gu
 Wenn do nid hin hoscht welle, no druck in Daim Browser uff '''Zrick'''.",
 'noarticletext' => 'Uff derre Said gebbt\'s noch kää Text. Du kannscht uff annere Saide [[Special:Search/{{PAGENAME}}|den Aitrach suche]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de Logbuchaidrach suche, wu dezu ghert],
 orrer [{{fullurl:{{FULLPAGENAME}}|action=edit}} die Said bearwaide]</span>.',
-'previewnote' => "'''Denk dran, dass des numme e Vorschau isch.'''
-Dai Ännerunge sinn no nid gspaichert worre!",
+'previewnote' => "'''Deng'g droa, dass des numme e Vorschau isch.'''
+Doi Ännerunge sinn no nid gschbaichert worre!",
 'editing' => 'Am $1 bearwaide',
 'editingsection' => '$1 bearwaide (Abschnitt)',
 'yourtext' => 'Doin Tegschd',
@@ -250,7 +250,7 @@ du gebbscht do au zu, dass Du des selwerscht gschriwwe hoscht orrer vun ere effe
 '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.
-De Leschaidrach fer die Said isch do unne aagewwe als Quell.',
+De Leschaidrach fa die Said isch do unne als Kwell aagewwe.',
 
 # History pages
 'viewpagelogs' => 'D Lochbiecher fer die Said aagucke',
index a0cd772..67cd743 100644 (file)
@@ -293,11 +293,11 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Podkreślenie linków',
 'tog-justify' => 'Wyrównuj tekst w akapitach do obu marginesów',
-'tog-hideminor' => 'Ukryj drobne modyfikacje w ostatnich zmianach',
+'tog-hideminor' => 'Ukryj drobne edycje w ostatnich zmianach',
 'tog-hidepatrolled' => 'Ukryj sprawdzone edycje w ostatnich zmianach',
 'tog-newpageshidepatrolled' => 'Ukryj sprawdzone strony na liście nowych stron',
 'tog-extendwatchlist' => 'Pokaż na liście obserwowanych wszystkie zmiany, nie tylko ostatnie',
-'tog-usenewrc' => 'Zastosuj rozbudowany widok ostatnich zmian (JavaScript)',
+'tog-usenewrc' => 'Grupuj zmiany według stron na liście ostatnich zmian i obserwowanych (Wymaga JavaScript)',
 'tog-numberheadings' => 'Automatyczna numeracja nagłówków',
 'tog-showtoolbar' => 'Pokaż pasek narzędzi (JavaScript)',
 'tog-editondblclick' => 'Podwójne kliknięcie rozpoczyna edycję (JavaScript)',
@@ -309,12 +309,12 @@ $messages = array(
 'tog-watchdefault' => 'Dodaj do obserwowanych strony, które edytuję',
 'tog-watchmoves' => 'Dodaj do obserwowanych strony, które przenoszę',
 'tog-watchdeletion' => 'Dodaj do obserwowanych strony, które usuwam',
-'tog-minordefault' => 'Wszystkie zmiany oznaczaj domyślnie jako drobne',
+'tog-minordefault' => 'Wszystkie edycje domyślnie oznaczaj jako drobne',
 'tog-previewontop' => 'Pokazuj podgląd powyżej obszaru edycji',
 'tog-previewonfirst' => 'Pokazuj podgląd strony podczas pierwszej edycji',
 'tog-nocache' => 'Wyłącz pamięć podręczną przeglądarki',
-'tog-enotifwatchlistpages' => 'Wyślij do mnie e‐mail, jeśli strona z listy moich obserwowanych zostanie zmodyfikowana',
-'tog-enotifusertalkpages' => 'Wyślij do mnie e‐mail, jeśli moja strona dyskusji zostanie zmodyfikowana',
+'tog-enotifwatchlistpages' => 'Wyślij do mnie e‐mail kiedy strona z mojej listy obserwowanych zostanie zmodyfikowana',
+'tog-enotifusertalkpages' => 'Wyślij do mnie e‐mail kiedy moja strona dyskusji zostanie zmodyfikowana',
 'tog-enotifminoredits' => 'Wyślij e‐mail także w przypadku drobnych zmian na stronach',
 'tog-enotifrevealaddr' => 'Nie ukrywaj mojego adresu e‐mail w powiadomieniach',
 'tog-shownumberswatching' => 'Pokaż liczbę użytkowników obserwujących stronę',
@@ -327,7 +327,7 @@ $messages = array(
 'tog-forceeditsummary' => 'Informuj o niewypełnieniu opisu zmian',
 'tog-watchlisthideown' => 'Ukryj moje edycje na liście obserwowanych',
 'tog-watchlisthidebots' => 'Ukryj edycje botów na liście obserwowanych',
-'tog-watchlisthideminor' => 'Ukrywaj drobne zmiany na liście obserwowanych',
+'tog-watchlisthideminor' => 'Ukryj drobne zmiany na liście obserwowanych',
 'tog-watchlisthideliu' => 'Ukryj edycje zalogowanych użytkowników na liście obserwowanych',
 'tog-watchlisthideanons' => 'Ukryj edycje anonimowych użytkowników na liście obserwowanych',
 'tog-watchlisthidepatrolled' => 'Ukryj sprawdzone edycje na liście obserwowanych',
@@ -648,6 +648,8 @@ Można zgłosić ten fakt [[Special:ListUsers/sysop|administratorowi]], podając
 'cannotdelete' => 'Strona lub plik „$1” nie mogą zostać usunięte.
 Możliwe, że zostały już usunięte przez kogoś innego.',
 'cannotdelete-title' => 'Nie można usunąć strony „$1”.',
+'delete-hook-aborted' => 'Usuwanie przerwane przez zaczep.
+Przyczyna nieokreślona.',
 'badtitle' => 'Niepoprawny tytuł',
 'badtitletext' => 'Podano niepoprawny tytuł strony. Prawdopodobnie jest pusty lub zawiera znaki, których użycie jest zabronione.',
 'perfcached' => 'Poniższe dane są kopią z pamięci podręcznej i mogą być nieaktualne. Maksymalnie {{PLURAL:$1|jeden wynik jest|$1 wyniki są|$1 wyników jest}} w pamięci podręcznej.',
@@ -681,6 +683,8 @@ Uzasadnienie blokady: ''$2''.",
 Administrator blokujący go podał następujący powód "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Nieprawidłowa nazwa w obszarze nazw "$2" o treści "$3"',
 'invalidtitle-unknownnamespace' => 'Nieprawidłowa nazwa z nieznaną liczbą przestrzeni nazw  $1  o treści "$2"',
+'exception-nologin' => 'Nie jesteś zalogowany/a',
+'exception-nologin-text' => 'Ta strona lub akcja wymaga bycia zalogowanym na tej wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Zła konfiguracja – nieznany skaner antywirusowy ''$1''",
@@ -2533,7 +2537,7 @@ $1',
 'tooltip-invert' => 'Zaznacz to pole, aby ukryć zmiany na stronach w wybranych przestrzeniach nazw (oraz związanych z nimi innymi przestrzeniami nazw, jeśli zaznaczono)',
 'namespace_association' => 'powiązana przestrzeń nazw',
 'tooltip-namespace_association' => 'Zaznacz to pole, aby uwzględnić strony dyskusji i tematu związane z wybranymi przestrzeniami nazw',
-'blanknamespace' => '(główna)',
+'blanknamespace' => '(Główna)',
 
 # Contributions
 'contributions' => 'Wkład użytkownika',
@@ -2975,7 +2979,7 @@ Brak katalogu dla plików tymczasowych.',
 'tooltip-n-currentevents' => 'Informacje o aktualnych wydarzeniach',
 'tooltip-n-recentchanges' => 'Lista ostatnich zmian na {{GRAMMAR:MS.lp|{{SITENAME}}}}.',
 'tooltip-n-randompage' => 'Pokaż stronę wybraną losowo',
-'tooltip-n-help' => 'Tutaj możesz się wielu rzeczy dowiedzieć.',
+'tooltip-n-help' => 'Tutaj możesz się dowiedzieć wielu rzeczy.',
 'tooltip-t-whatlinkshere' => 'Pokaż listę wszystkich stron linkujących do tej strony',
 'tooltip-t-recentchangeslinked' => 'Ostatnie zmiany w stronach, do których ta strona linkuje',
 'tooltip-feed-rss' => 'Kanał RSS dla tej strony',
@@ -3062,6 +3066,7 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'spambot_username' => 'MediaWiki – usuwanie spamu',
 'spam_reverting' => 'Przywracanie ostatniej wersji nie zawierającej linków do $1',
 'spam_blanking' => 'Wszystkie wersje zawierały odnośniki do $1. Czyszczenie strony.',
+'spam_deleting' => 'Wszystkie wersje zawierały linki do $1, usuwam.',
 
 # Info page
 'pageinfo-title' => 'Informacje o „$1“',
@@ -3995,6 +4000,8 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'api-error-empty-file' => 'Przesłany przez Ciebie plik jest pusty.',
 'api-error-emptypage' => 'Tworzenie nowych, pustych stron jest niedozwolone.',
 'api-error-fetchfileerror' => 'Błąd wewnętrzny – wystąpił błąd w trakcie pobierania pliku.',
+'api-error-fileexists-forbidden' => 'Plik o nazwie "$1" już istnieje i nie może być nadpisany.',
+'api-error-fileexists-shared-forbidden' => 'Plik o nazwie "$1" już istnieje we współdzielonym repozytorium i nie może być nadpisany.',
 'api-error-file-too-large' => 'Przesłany przez Ciebie plik jest zbyt duży.',
 'api-error-filename-tooshort' => 'Nazwa pliku jest zbyt krótka.',
 'api-error-filetype-banned' => 'Zabroniony format pliku.',
@@ -4033,4 +4040,6 @@ W przeciwnym wypadku można użyć prostego formularza poniżej. Komentarz zosta
 'duration-centuries' => '$1 {{PLURAL:$1|stulecie|stulecia|stuleci}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tysiąclecie|tysiąclecia|tysiącleci}}',
 
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'Nie udało się uzyskać blokady na serwerze $1.',
 );
index e5c006b..6699535 100644 (file)
@@ -399,6 +399,8 @@ Për piasì, fa rapòrt a n'[[Special:ListUsers/sysop|aministrator]], pijand nò
 'cannotdelete' => "La pàgina o l'archivi \"\$1\" a peul pa esse scancelà.
 Peul desse ch'a l'é già stàit ëscancelà da cheidun d'àutr.",
 'cannotdelete-title' => 'A peul pa scancelesse la pàgina «$1»',
+'delete-hook-aborted' => "Modìfica anulà da n'estension.
+A l'ha smonù gnun-e spiegassion.",
 'badtitle' => 'Tìtol nen giust',
 'badtitletext' => "La pàgina che a l'ha ciamà a peul pa esse mostrà. A podrìa tratesse ëd na pàgina nen bon-a, veujda, ò pura a podrìa ëdcò esse n'eror ant n'anliura antra lenghe diferente ò tra diferente version ëd {{SITENAME}}.",
 'perfcached' => "Ij dat sì-dapress a sòn ëstàit memorisà an local e a peulo esse nen agiornà. Al pi {{PLURAL:$1|n'arzultà a l'é disponìbil|$1 arzultà a son disponìbij}} ant la memòria local.",
@@ -430,7 +432,7 @@ L'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
 'invalidtitle-knownnamespace' => 'Tìtol pa bon con spassi nominal "$2" e test "$3"',
 'invalidtitle-unknownnamespace' => 'Tìtol pa bon con spassi nominal sconossù nùmer $1 e test "$2"',
 'exception-nologin' => 'Nen rintrà ant ël sistema',
-'exception-nologin-text' => "Sta pagina o assion a veul ch'it sie intrà dzora a sta wiki.",
+'exception-nologin-text' => "Costa pàgina o assion a ciama ch'a sia rintrà an costa wiki.",
 
 # Virus scanner
 'virus-badscanner' => "Configurassion falà: antivìrus nen conossù: ''$1''",
@@ -2638,25 +2640,25 @@ Che as lo salva ansima a sò ordinator e peui che a lo caria ambelessì.",
 'importcantopen' => "L'archivi da amporté a l'é pa podusse deurbe",
 'importbadinterwiki' => 'Liura antra wiki diferente cioca',
 'importnotext' => 'Veujd o con gnun test',
-'importsuccess' => 'Amportassion andaita a bon fin!',
-'importhistoryconflict' => "A-i son dle stòrie dë sta pàgina-sì che as contradisso un-a con l'àutra (a peul esse che sta pàgina-sì a l'avèissa già amportala)",
-'importnosources' => "A l'é pa staita definìa gnun-a sorgiss d'amportassion da na wiki diferenta, e carié mach le stòrie as peul nen.",
+'importsuccess' => 'Amportassion finìa!',
+'importhistoryconflict' => "A-i son dle stòrie dë sta pàgina-sì che as contradiso un-a con l'àutra (a peul esse che sta pàgina-sì a l'avèissa già amportala)",
+'importnosources' => "A l'é pa stàita definìa gnun-a sorgiss d'amportassion da na wiki diferenta, e carié mach le stòrie as peul nen.",
 'importnofile' => "Pa gnun archivi d'amportassion carià.",
 'importuploaderrorsize' => "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta pì gròss che lòn ch'as peul cariesse.",
 'importuploaderrorpartial' => "A l'é falìe la caria dl'archivi d'amporté. L'archivi a resta carià mach për un tòch.",
 'importuploaderrortemp' => "A l'é falìe la caria dl'archivi d'amporté. A-i manca un dossié provisòri.",
 'import-parse-failure' => "Eror dë scomposission XML ant l'amportassion",
 'import-noarticle' => "Pa gnun-a pàgina d'amporté.",
-'import-nonewrevisions' => "Tute le revision a l'ero già stàite amportà.",
+'import-nonewrevisions' => "Tute le revision a j'ero già stàite amportà.",
 'xml-error-string' => '$1 ant la riga $2, colòna $3 (byte $4): $5',
-'import-upload' => 'Carìa dat XML',
-'import-token-mismatch' => 'Perdù ij dat ëd session.
-Për piasì preuva torna.',
+'import-upload' => 'Cariament ëd dat XML',
+'import-token-mismatch' => "Pèrdita dij dat ëd session.
+Për piasì, ch'a preuva torna.",
 'import-invalid-interwiki' => 'As peul pa amportesse da la wiki spessificà.',
-'import-error-edit' => "La pàgina «$1» a l'é pa amportà përchè a peul pa modifichela.",
-'import-error-create' => "La pàgina «$1» a l'é pa amportà përchè a peul pa creela.",
-'import-error-interwiki' => 'La pàgina "$1" a l\'é pa amportà përchè sò nòm a l\'é arzervà për na liura esterna (antërwiki).',
-'import-error-special' => 'La pàgina "$1" a l\'é pa amportà përchè a ponta a në spassi nominal ch\'a përmët pa dle pàgine.',
+'import-error-edit' => "La pàgina «$1» a l'é pa stàita amportà përchè chiel a peul pa modifichela.",
+'import-error-create' => "La pàgina «$1» a l'é pa stàita amportà përchè chiel a peul pa creela.",
+'import-error-interwiki' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é arzervà për na liura esterna (antërwiki).",
+'import-error-special' => "La pàgina «$1» a l'é pa amportà përchè a ponta a në spassi nominal ch'a përmët pa dle pàgine.",
 'import-error-invalid' => "La pàgina «$1» a l'é pa amportà përchè sò nòm a l'é pa bon.",
 
 # Import log
@@ -3672,6 +3674,8 @@ Dësnò, a peule dovré ël formlari semplificà sì-sota. Sò coment a sarà gi
 'api-error-empty-file' => "L'archivi ch'a l'ha mandà a l'era veuid.",
 'api-error-emptypage' => "La creassion ëd pagine neuve veujde a l'é pa përmëttùa.",
 'api-error-fetchfileerror' => "Eror antern: quaicòs a l'é andàit mal an mente as arcuperava l'archivi",
+'api-error-fileexists-forbidden' => "N'archivi con nòm «$1» a esist già, e a peul pa esse dzorascrivù.",
+'api-error-fileexists-shared-forbidden' => 'N\'archivi con nòm "$1" a esist già ant ël depòsit condivis ëd j\'archivi, e a peul pa esse dzorascrivù.',
 'api-error-file-too-large' => "L'archivi ch'a l'ha mandà a l'era tròp gròss.",
 'api-error-filename-tooshort' => "Ël nòm ëd l'archivi a l'é tròp curt.",
 'api-error-filetype-banned' => "Costa sòrt d'archivi a l'é proibìa.",
index 8cfc8b6..c93f285 100644 (file)
@@ -1728,7 +1728,7 @@ Consulte a [[Special:NewFiles|galeria de novos ficheiros]] para visioná-los.',
 'minlength1' => 'Os nomes de ficheiros devem de ter pelo menos uma letra.',
 'illegalfilename' => 'O nome do ficheiro "$1" contém caracteres que não são permitidos no título das páginas.
 Altere o nome do ficheiro e tente enviá-lo novamente, por favor.',
-'filename-toolong' => 'Os nomes de arquivo não podem ser superiores a 240 bytes.',
+'filename-toolong' => 'Os nomes de ficheiros não podem ser superiores a 240 bytes.',
 'badfilename' => 'O nome do ficheiro foi alterado para "$1".',
 'filetype-mime-mismatch' => 'A extensão ".$1" não corresponde ao tipo MIME do ficheiro ($2).',
 'filetype-badmime' => 'Não é permitido carregar ficheiros do tipo MIME "$1".',
@@ -1856,10 +1856,10 @@ Caso o problema persista, contacte um [[Special:ListUsers/sysop|administrador]].
 'backend-fail-copy' => 'Não foi possível copiar o ficheiro $1 para $2.',
 'backend-fail-move' => 'Não é possível mover o ficheiro $1 para $2.',
 'backend-fail-opentemp' => 'Não foi possível abrir o ficheiro temporário.',
-'backend-fail-writetemp' => 'Não foi possível gravar para arquivo temporário.',
-'backend-fail-closetemp' => 'Não foi possível fechar o arquivo temporário.',
-'backend-fail-read' => 'Não foi possível ler o arquivo $1.',
-'backend-fail-create' => 'Não foi possível criar o arquivo $1.',
+'backend-fail-writetemp' => 'Não foi possível gravar no ficheiro temporário.',
+'backend-fail-closetemp' => 'Não foi possível fechar o ficheiro temporário.',
+'backend-fail-read' => 'Não foi possível ler o ficheiro $1.',
+'backend-fail-create' => 'Não foi possível escrever o ficheiro $1.',
 'backend-fail-maxsize' => 'Não foi possível criar o ficheiro  $1  porque ele é maior do que  {{PLURAL:$2| um byte| $2  bytes}}.',
 'backend-fail-readonly' => 'O servidor de armazenamento "$1" está actualmente no modo "somente leitura". A razão dada foi: "$2"',
 'backend-fail-synced' => 'O ficheiro" $1 " está em um estado inconsistente dentro da base de dados',
@@ -2277,7 +2277,7 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações
 # E-mail user
 'mailnologin' => 'Nenhum endereço de envio',
 'mailnologintext' => 'Precisa de estar [[Special:UserLogin|autenticado]] e possuir um endereço de correio válido nas suas [[Special:Preferences|preferências]], para poder enviar correio electrónico a outros utilizadores.',
-'emailuser' => 'Enviar-lhe um e-mail',
+'emailuser' => 'Enviar um e-mail ao utilizador',
 'emailpage' => 'Contactar utilizador',
 'emailpagetext' => 'Pode usar o formulário abaixo para enviar uma mensagem por correio electrónico para este utilizador.
 O endereço de correio que introduziu nas suas [[Special:Preferences|preferências]] irá aparecer no campo do remetente da mensagem "De:", para que o destinatário lhe possa responder directamente.',
index d8e2ff0..eda037f 100644 (file)
@@ -315,9 +315,9 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Sublinhar links:',
 'tog-justify' => 'Justificar parágrafos',
-'tog-hideminor' => 'Esconder edições secundárias nas mudanças recentes',
-'tog-hidepatrolled' => 'Esconder edições patrulhadas nas mudanças recentes',
-'tog-newpageshidepatrolled' => 'Esconder páginas patrulhadas da lista de páginas novas',
+'tog-hideminor' => 'Ocultar edições menores nas mudanças recentes',
+'tog-hidepatrolled' => 'Ocultar edições patrulhadas nas mudanças recentes',
+'tog-newpageshidepatrolled' => 'Ocultar páginas patrulhadas da lista de páginas novas',
 'tog-extendwatchlist' => 'Expandir a lista de páginas vigiadas para mostrar todas as alterações aplicáveis, não apenas as mais recentes',
 'tog-usenewrc' => 'Agrupar alterações por páginas nas mudanças recentes e páginas vigiadas (requer JavaScript)',
 'tog-numberheadings' => 'Auto-numerar cabeçalhos',
@@ -347,12 +347,12 @@ $messages = array(
 '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' => 'Esconder as minhas edições da lista de páginas vigiadas',
-'tog-watchlisthidebots' => 'Esconder edições efetuadas por robôs da lista de páginas vigiadas',
-'tog-watchlisthideminor' => 'Esconder edições menores da lista de páginas vigiadas',
+'tog-watchlisthideown' => 'Ocultar as minhas edições da lista de páginas vigiadas',
+'tog-watchlisthidebots' => 'Ocultar edições automatizadas por bots da lista de páginas vigiadas',
+'tog-watchlisthideminor' => 'Ocultar edições menores da lista de páginas vigiadas',
 'tog-watchlisthideliu' => 'Ocultar edições de usuários autenticados da lista de páginas vigiadas',
 'tog-watchlisthideanons' => 'Ocultar edições de usuários anônimos da lista de páginas vigiadas',
-'tog-watchlisthidepatrolled' => 'Esconder edições patrulhadas na lista de páginas vigiadas',
+'tog-watchlisthidepatrolled' => 'Ocultar edições patrulhadas na lista de páginas vigiadas',
 'tog-nolangconversion' => 'Desabilitar conversão de variantes de idioma',
 'tog-ccmeonemails' => 'Receber cópias de e-mails que eu enviar a outros usuários',
 'tog-diffonly' => 'Não mostrar o conteúdo da página ao comparar duas edições',
@@ -704,6 +704,8 @@ Quem o protegeu foi [[User:$1|$1]], com a justificativa: ''$2''.",
 O administrador que bloqueou ofereceu a seguinte explicação: "$3".',
 'invalidtitle-knownnamespace' => 'Título inválido para o espaço nominal "$2" e texto "$3"',
 'invalidtitle-unknownnamespace' => 'Título inválido para o espaço nominal de número desconhecido ($1) e texto "$2"',
+'exception-nologin' => 'Não está autenticado',
+'exception-nologin-text' => 'Esta página ou ação requer que você esteja autenticado neste wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Má configuração: antivírus desconhecido: ''$1''",
@@ -757,8 +759,8 @@ Certifique-se de que tem os cookies ativados, recarregue esta página e tente no
 'loginsuccesstitle' => 'Login bem sucedido',
 'loginsuccess' => "'''Agora você está {{GENDER:autenticado|autenticada}} ao wiki {{SITENAME}} como \"\$1\"'''.",
 'nosuchuser' => 'Não existe nenhum usuário com o nome "$1".
-Os nomes de usuário são sensíveis à capitalização.
-Verifique a ortografia, ou [[Special:UserLogin/signup|crie uma nova conta]].',
+Os nomes de usuário são sensíveis a letras maiúsculas.
+Verifique o que foi digitado ou [[Special:UserLogin/signup|crie uma nova conta]].',
 'nosuchusershort' => 'Não existe um usuário com o nome "$1". Verifique o nome que introduziu.',
 'nouserspecified' => 'Você precisa especificar um nome de usuário.',
 'login-userblocked' => 'Este usuário está bloqueado. Entrada proibida.',
@@ -1184,8 +1186,8 @@ Outros administradores no {{SITENAME}} continuarão podendo acessar ao conteúdo
 'revdelete-hide-text' => 'Ocultar texto da edição',
 'revdelete-hide-image' => 'Ocultar conteúdos do arquivo',
 'revdelete-hide-name' => 'Ocultar ação e alvo',
-'revdelete-hide-comment' => 'Esconder comentário de edição',
-'revdelete-hide-user' => 'Esconder nome de usuário/IP do editor',
+'revdelete-hide-comment' => 'Ocultar o sumário de edição',
+'revdelete-hide-user' => 'Ocultar nome de usuário/IP do editor',
 'revdelete-hide-restricted' => 'Suprimir dados de administradores assim como de outros',
 'revdelete-radio-same' => '(não altere)',
 'revdelete-radio-set' => 'Sim',
@@ -1266,7 +1268,7 @@ Certifique-se de que tal alteração manterá a continuidade das ações.',
 'difference-multipage' => '(Diferenças entre páginas)',
 'lineno' => 'Linha $1:',
 'compareselectedversions' => 'Compare as versões selecionadas',
-'showhideselectedversions' => 'Mostrar/esconder versões selecionadas',
+'showhideselectedversions' => 'Exibir/ocultar edições selecionadas',
 'editundo' => 'desfazer',
 'diff-multi' => '({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de {{PLURAL:$2|um usuário|$2 usuários}} {{PLURAL:$1|não apresentada|não apresentadas}})',
 'diff-multi-manyusers' => '({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de mais de {{PLURAL:$2|um usuário|$2 usuário}} não {{PLURAL:$1|apresentada|apresentadas}})',
@@ -1623,7 +1625,7 @@ Caso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu tra
 'nchanges' => '$1 {{PLURAL:$1|alteração|alterações}}',
 'recentchanges' => 'Mudanças recentes',
 'recentchanges-legend' => 'Opções das mudanças recentes',
-'recentchanges-summary' => 'Veja as mais novas mudanças na {{SITENAME}} nesta página.',
+'recentchanges-summary' => 'Acompanhe nesta página as mudanças mais recentes deste wiki.',
 'recentchanges-feed-description' => 'Acompanhe neste feed as mudanças mais recentes do wiki.',
 'recentchanges-label-newpage' => 'Esta edição criou uma nova página',
 'recentchanges-label-minor' => 'Esta é uma edição menor',
@@ -3048,6 +3050,7 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 'spambot_username' => 'MediaWiki limpeza de spam',
 'spam_reverting' => 'Revertendo para a última versão que não contém links para $1',
 'spam_blanking' => 'Todas revisões contendo links para $1, limpando',
+'spam_deleting' => 'Eliminada por todas as suas edições conterem links para $1',
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
@@ -3925,6 +3928,8 @@ Caso contrário, você poderá usar o formulário simplificado a seguir. Seu com
 'api-error-empty-file' => 'O arquivo que você enviou está vazio.',
 'api-error-emptypage' => 'Não é permitido criar páginas novas vazias.',
 'api-error-fetchfileerror' => 'Erro interno: ocorreu um problema indeterminado ao acessar o arquivo.',
+'api-error-fileexists-forbidden' => 'Já existe um arquivo com o nome "$1". Não é possível substituí-lo.',
+'api-error-fileexists-shared-forbidden' => 'Já existe, no repositório de arquivos partilhados, um arquivo com o nome "$1". Não é possível substituí-lo.',
 'api-error-file-too-large' => 'O arquivo que você enviou é muito grande.',
 'api-error-filename-tooshort' => 'O nome do arquivo é curto demais.',
 'api-error-filetype-banned' => 'Este tipo do arquivo é proibido.',
index 51f005d..ef9dff1 100644 (file)
@@ -169,7 +169,7 @@ Is only shown if {{msg-mw|tog-enotifusertalkpages}} or/and {{msg-mw|tog-enotifwa
 'tog-fancysig' => 'In user preferences under the signature box.  {{Gender}}',
 'tog-externaleditor' => "[[Special:Preferences]], tab 'Edit'. Offers user to use an external editor by default. {{Gender}}",
 'tog-externaldiff' => "[[Special:Preferences]], tab 'Edit'. Offers user to use an external diff program by default. {{Gender}}",
-'tog-showjumplinks' => 'Toggle option used in [[Special:Preferences]]. The "jump to" part should be the same with {{msg-mw|jumpto}} (or you can use <nowiki>{{int:jumpto}}</nowiki>). Thess links are shown in some of the older skins as "jump to: navigation, search" but they are hidden by default (you can enable them with this option). {{Gender}}',
+'tog-showjumplinks' => 'Toggle option used in [[Special:Preferences]]. The "jump to" part should be the same with {{msg-mw|jumpto}} (or you can use <nowiki>{{int:jumpto}}</nowiki>). These links are shown in some of the older skins as "jump to: navigation, search" but they are hidden by default (you can enable them with this option). {{Gender}}',
 'tog-uselivepreview' => 'Toggle option used in [[Special:Preferences]]. Live preview is an experimental feature (unavailable by default) to use edit preview without loading the page again. {{Gender}}',
 'tog-forceeditsummary' => "Toggle option used in [[Special:Preferences]] to force an edit ''{{msg-mw|summary}}''. {{Gender}}",
 'tog-watchlisthideown' => "[[Special:Preferences]], tab 'Watchlist'. Offers user to hide own edits from watchlist. {{Gender}}",
@@ -665,6 +665,7 @@ HTML markup cannot be used.
 $1 is a filename, I think.',
 'cannotdelete-title' => 'Title of error page when the user cannot delete a page
 * $1 is the page name',
+'delete-hook-aborted' => 'Error message shown when an extension hook prevents a page deletion, but does not provide an error message.',
 'badtitle' => 'The page title when a user requested a page with invalid page name. The content will be {{msg-mw|badtitletext}}.',
 'badtitletext' => 'The message shown when a user requested a page with invalid page name. The page title will be {{msg-mw|badtitle}}.',
 'perfcached' => 'Like {{msg-mw|perfcachedts}} but used when we do not know how long ago page was cached (unlikely to happen). Parameters:
@@ -1125,6 +1126,7 @@ Used in History and [[Special:Contributions]].',
 'rev-deleted-user-contribs' => 'Part of revision deletion.',
 'rev-deleted-text-unhide' => 'This message is very similar to {{msg-mw|rev-suppressed-unhide-diff}}. Parameters:
 * $1 is a HTML link to the diff',
+'rev-deleted-text-view' => 'I believe this is an error message which appears if a user tries to view a past revision of a page, where the revision has been hidden from view, although later revisions of the page still exist.',
 'rev-suppressed-unhide-diff' => 'This message is very similar to {{msg-mw|rev-deleted-unhide-diff}} and to {{msg-mw|rev-suppressed-text-unhide}}. Parameters:
 * $1 is a HTML link to the diff',
 'rev-delundel' => 'Link in page history for oversight (see also {{msg-mw|rev-showdeleted}})',
@@ -4718,6 +4720,8 @@ $4 is the gender of the target user.',
 'api-error-empty-file' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-emptypage' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-fetchfileerror' => 'API error message that can be used for client side localisation of API errors.',
+'api-error-fileexists-forbidden' => 'API error message that can be used for client side localisation of API errors.',
+'api-error-fileexists-shared-forbidden' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-file-too-large' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-filename-tooshort' => 'API error message that can be used for client side localisation of API errors.',
 'api-error-filetype-banned' => 'API error message that can be used for client side localisation of API errors.',
index 53fc430..20daf46 100644 (file)
@@ -314,17 +314,17 @@ $messages = array(
 pe titlul secțiunii (JavaScript)',
 'tog-showtoc' => 'Arată cuprinsul (pentru paginile cu mai mult de 3 paragrafe cu titlu)',
 'tog-rememberpassword' => 'Autentificare automată de la acest navigator (expiră după $1 {{PLURAL:$1|zi|zile|de zile}})',
-'tog-watchcreations' => 'Adaugă paginile pe care le creez la lista mea de urmărire',
-'tog-watchdefault' => 'Adaugă paginile pe care le modific la lista mea de urmărire',
-'tog-watchmoves' => 'Adaugă paginile pe care le redenumesc la lista de pagini urmărite',
-'tog-watchdeletion' => 'Adaugă paginile pe care le șterg în lista de pagini urmărite',
+'tog-watchcreations' => 'Adaugă paginile pe care le creez și fișierele pe care le încarc la lista mea de urmărire',
+'tog-watchdefault' => 'Adaugă paginile și fișierele pe care le modific la lista mea de urmărire',
+'tog-watchmoves' => 'Adaugă paginile și fișierele pe care le redenumesc la lista mea de urmărire',
+'tog-watchdeletion' => 'Adaugă paginile și fișierele pe care le șterg la lista mea de urmărire',
 'tog-minordefault' => 'Marchează din oficiu toate modificările ca fiind minore',
 'tog-previewontop' => 'Arată previzualizarea deasupra căsuței de modificare',
 'tog-previewonfirst' => 'Arată previzualizarea la prima modificare',
 'tog-nocache' => 'Dezactivează opțiunea navigatorului de memorare în cache a paginilor',
-'tog-enotifwatchlistpages' => 'Trimite-mi un email la modificările paginilor',
+'tog-enotifwatchlistpages' => 'Trimite-mi un e-mail atunci când o pagină sau un fișier din lista mea de pagini urmărite suferă modificări',
 'tog-enotifusertalkpages' => 'Trimite-mi un email când pagina mea de discuții este modificată',
-'tog-enotifminoredits' => 'Trimite-mi un email de asemenea pentru modificările minore ale paginilor',
+'tog-enotifminoredits' => 'Trimite-mi, de asemenea, un e-mail în caz de modificări minore asupra paginilor și fișierelor',
 'tog-enotifrevealaddr' => 'Descoperă-mi adresa email în mesajele de notificare',
 'tog-shownumberswatching' => 'Arată numărul utilizatorilor care urmăresc',
 'tog-oldsig' => 'Semnătură actuală:',
@@ -659,6 +659,8 @@ Te rog anunță acest aspect unui [[Special:ListUsers/sysop|administrator]], ind
 'cannotdelete' => 'Pagina sau fișierul „$1” nu a putut fi șters.
 S-ar putea ca acesta să fi fost deja șters de altcineva.',
 'cannotdelete-title' => 'Imposibil de șters pagina „$1”',
+'delete-hook-aborted' => 'Ștergerea a fost abandonată din cauza unui hook.
+Nicio explicație furnizată.',
 'badtitle' => 'Titlu incorect',
 'badtitletext' => 'Titlul căutat a fost invalid, gol sau o legătură invalidă inter-linguală sau inter-wiki.
 
@@ -888,7 +890,7 @@ Parolă temporară: $2',
 # Edit pages
 'summary' => 'Rezumat:',
 'subject' => 'Subiect / titlu:',
-'minoredit' => 'Aceasta este o editare minoră',
+'minoredit' => 'Aceasta este o modificare minoră',
 'watchthis' => 'Monitorizează această pagină',
 'savearticle' => 'Salvare pagină',
 'preview' => 'Previzualizare',
@@ -1060,7 +1062,7 @@ Jurnalul ștergerilor și al mutărilor pentru această pagină este disponibil:
 Jurnalul ștergerilor și al mutărilor este disponibil mai jos.',
 'log-fulllog' => 'Vezi tot jurnalul',
 'edit-hook-aborted' => 'Modificarea a fost abandonată din cauza unui hook.
-Fără nicio explicație.',
+Nicio explicație furnizată.',
 'edit-gone-missing' => 'Pagina nu s-a putut actualiza.
 Se pare că a fost ștearsă.',
 'edit-conflict' => 'Conflict de modificare.',
@@ -1099,7 +1101,7 @@ Acsete argumente au fost omise.',
 Motivul invocat de $3 este ''$2''",
 
 # History pages
-'viewpagelogs' => 'Vezi jurnalele pentru această pagină',
+'viewpagelogs' => 'Afișează jurnalele paginii',
 'nohistory' => 'Nu există istoric pentru această pagină.',
 'currentrev' => 'Versiunea curentă',
 'currentrev-asof' => 'Versiunea curentă din $1',
@@ -1471,7 +1473,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 # User rights
 'userrights' => 'Administrare permisiuni de utilizator',
 'userrights-lookup-user' => 'Administrare grupuri de utilizatori',
-'userrights-user-editname' => 'Introdu un nume de utilizator:',
+'userrights-user-editname' => 'Introduceți un nume de utilizator:',
 'editusergroup' => 'Modificare grup de utilizatori',
 'editinguser' => "Modificare permisiuni de utilizator pentru '''[[User:$1|$1]]''' $2",
 'userrights-editusergroup' => 'Modificare grup de utilizatori',
@@ -1578,7 +1580,7 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 # User rights log
 'rightslog' => 'Jurnal permisiuni de utilizator',
 'rightslogtext' => 'Acest jurnal cuprinde modificările permisiunilor utilizatorilor.',
-'rightslogentry' => 'a schimbat pentru $1 apartenența la un grup de la $2 la $3',
+'rightslogentry' => 'a schimbat permisiunile pentru $1 de la $2 la $3',
 'rightslogentry-autopromote' => 'a fost promovat în mod automat de la $2 la $3',
 'rightsnone' => '(niciunul)',
 
@@ -2278,7 +2280,7 @@ Adresa de e-mail introdusă de tine în [[Special:Preferences|preferințele de u
 'mywatchlist' => 'Pagini urmărite',
 'watchlistfor2' => 'Pentru $1 $2',
 'nowatchlist' => 'Nu ați ales să urmăriți nici o pagină.',
-'watchlistanontext' => 'Te rugăm să $1 pentru a vizualiza sau edita itemii de pe lista ta de urmărire.',
+'watchlistanontext' => 'Vă rugăm să vă $1 pentru a vizualiza sau edita elementele din lista dumneavoastră de pagini urmărite.',
 'watchnologin' => 'Nu sunteți autentificat',
 'watchnologintext' => 'Trebuie să fiți [[Special:UserLogin|autentificat]] pentru a vă modifica lista de pagini urmărite.',
 'addwatch' => 'Adăugă la lista de pagini urmărite',
@@ -2552,7 +2554,7 @@ Iată aici ultima înregistrare relevantă din jurnalul blocărilor:',
 'sp-contributions-search' => 'Căutare contribuții',
 'sp-contributions-username' => 'Adresă IP sau nume de utilizator:',
 'sp-contributions-toponly' => 'Afișează numai versiunile recente',
-'sp-contributions-submit' => 'Caută',
+'sp-contributions-submit' => 'Căutare',
 
 # What links here
 'whatlinkshere' => 'Ce trimite aici',
@@ -3668,7 +3670,7 @@ Vă rugăm să confirmați faptul că într-adevăr doriți să recreați acest
 'table_pager_prev' => 'Pagina anterioară',
 'table_pager_first' => 'Prima pagină',
 'table_pager_last' => 'Ultima pagină',
-'table_pager_limit' => 'Arată $1 itemi pe pagină',
+'table_pager_limit' => 'Arată $1 elemente pe pagină',
 'table_pager_limit_label' => 'Elemente pe pagină:',
 'table_pager_limit_submit' => 'Du-te',
 'table_pager_empty' => 'Niciun rezultat',
@@ -3915,6 +3917,8 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'api-error-empty-file' => 'Fișierul încărcat de dumneavoastră este gol.',
 'api-error-emptypage' => 'Crearea paginilor noi, goale nu este permisă.',
 'api-error-fetchfileerror' => 'Eroare internă: ceva nu a funcționat corect la prelucrarea fișierului.',
+'api-error-fileexists-forbidden' => 'Un fișier cu numele „$1” există deja și nu poate fi suprascris.',
+'api-error-fileexists-shared-forbidden' => 'Un fișier cu numele „$1” există deja în depozitul de fișiere partajate, și nu poate fi suprascris.',
 'api-error-file-too-large' => 'Fișierul pe care l-ați trimis este prea mare.',
 'api-error-filename-tooshort' => 'Numele fișierului este prea scurt.',
 'api-error-filetype-banned' => 'Acest tip de fișiere este interzis.',
index 6a8fff5..81c902d 100644 (file)
@@ -38,17 +38,17 @@ $messages = array(
 'tog-editsectiononrightclick' => "Abilite le cngiaminde d'a sezione ausanne 'u pulsande destre d'u mouse cazzanne sus a 'u titele (Javascript)",
 'tog-showtoc' => "Fa vedè 'a taggelle de le condenute (pe le pàggene cu cchiù de 3 testete)",
 'tog-rememberpassword' => "Arrencuerdete 'u nome mije sus a stu browser (pe 'nu massime de $1 {{PLURAL:$1|sciurne|sciurne}})",
-'tog-watchcreations' => "Mitte le pàggene ca je agghje ccrejete jndr'à le pàggene condrollete",
-'tog-watchdefault' => "Mitte le pàggene ca je agghje cangete jndr'à le pàggene condrolleteAdd pages I edit to my watchlist",
-'tog-watchmoves' => "Mitte le pàggene ca je agghje spustete jndr'à le pàggene condrollete",
-'tog-watchdeletion' => "Mitte le pàggene ca je agghje scangillete jndr'à le pàggene condrollete",
+'tog-watchcreations' => "Mitte le pàggene ca je agghie ccrejate jndr'à le pàggene condrollate",
+'tog-watchdefault' => "Mitte le pàggene ca je agghie cangiate jndr'à le pàggene condrollate",
+'tog-watchmoves' => "!Mitte le pàggene ca je agghie spustate jndr'à le pàggene condrollate",
+'tog-watchdeletion' => "Mitte le pàggene ca je agghie scangellate jndr'à le pàggene condrollate",
 'tog-minordefault' => 'Pe convenzione signe tutte le cangiaminde cumme a stuédeche',
 'tog-previewontop' => "Fa vedè l'andeprime apprime de 'a scatole de le cangiaminde",
 'tog-previewonfirst' => "Fà vedè l'andeprime sus a 'u prime cangiaminde",
 'tog-nocache' => "Disabbilete 'u caching d'a pàgene sfogliate",
-'tog-enotifwatchlistpages' => "Manneme 'na mail quanne 'a pàgene ca stoche a condrolle ha cangete",
+'tog-enotifwatchlistpages' => "Manneme 'na mail quanne 'a pàgene ca stoche a condrolle ha cangiate",
 'tog-enotifusertalkpages' => "Manneme 'na mail quanne 'a pàgene de le 'ngazzaminde ha cangete",
-'tog-enotifminoredits' => "Manneme 'na mail quanne onne state fatte cangiaminde stuèdeche sus 'a pàgene",
+'tog-enotifminoredits' => "Manneme 'na mail quanne onne state fatte cangiaminde stuèdeche sus a le pàggene",
 'tog-enotifrevealaddr' => "Fa vedè l'indirizze e-mail jndr'à le e-mail de notifiche",
 'tog-shownumberswatching' => "Fa vedè 'u numere de le utinde ca uardene",
 'tog-oldsig' => 'Firme esistende:',
index d37ca15..2f1dee6 100644 (file)
@@ -407,17 +407,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Править секции при правом щелчке мышью на заголовке (JavaScript)',
 'tog-showtoc' => 'Показывать оглавление (для страниц более чем с 3 заголовками)',
 'tog-rememberpassword' => 'Помнить мою учётную запись в этом браузере (не более $1 {{PLURAL:$1|дня|дней|дней}})',
-'tog-watchcreations' => 'Добавлять созданные мной страницы в список наблюдения',
-'tog-watchdefault' => 'Ð\94обавлÑ\8fÑ\82Ñ\8c Ð¸Ð·Ð¼ÐµÐ½Ñ\91ннÑ\8bе Ð¼Ð½Ð¾Ð¹ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð² Ñ\81пиÑ\81ок Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f',
-'tog-watchmoves' => 'Ð\94обавлÑ\8fÑ\82Ñ\8c Ð¿ÐµÑ\80еименованнÑ\8bе Ð¼Ð½Ð¾Ð¹ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð² Ñ\81пиÑ\81ок Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f',
-'tog-watchdeletion' => 'Добавлять удалённые мной страницы в список наблюдения',
+'tog-watchcreations' => 'Добавлять в список наблюдения созданные мной страницы и загруженные мной файлы',
+'tog-watchdefault' => 'Ð\94обавлÑ\8fÑ\82Ñ\8c Ð² Ñ\81пиÑ\81ок Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f Ð¸Ð·Ð¼ÐµÐ½Ñ\91ннÑ\8bе Ð¼Ð½Ð¾Ð¹ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¸ Ð¾Ð¿Ð¸Ñ\81аниÑ\8f Ñ\84айлов',
+'tog-watchmoves' => 'Ð\94обавлÑ\8fÑ\82Ñ\8c Ð² Ñ\81пиÑ\81ок Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f Ð¿ÐµÑ\80еименованнÑ\8bе Ð¼Ð½Ð¾Ð¹ Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b Ð¸ Ñ\84айлÑ\8b',
+'tog-watchdeletion' => 'Добавлять в список наблюдения удалённые мной страницы и файлы',
 'tog-minordefault' => 'Помечать по умолчанию правки как малозначимые',
 'tog-previewontop' => 'Помещать предпросмотр перед окном редактирования',
 'tog-previewonfirst' => 'Показывать предпросмотр при переходе к редактированию',
 'tog-nocache' => 'Отключить кеширование страниц в браузере',
-'tog-enotifwatchlistpages' => 'Уведомлять по эл. почте об изменениях страниц из списка наблюдения',
+'tog-enotifwatchlistpages' => 'Уведомлять по эл. почте об изменениях страниц и файлов из списка наблюдения',
 'tog-enotifusertalkpages' => 'Уведомлять по эл. почте об изменении персональной страницы обсуждения',
-'tog-enotifminoredits' => 'УведомлÑ\8fÑ\82Ñ\8c Ð´Ð°Ð¶Ðµ Ð¿Ñ\80и Ð¼Ð°Ð»Ð¾Ð·Ð½Ð°Ñ\87иÑ\82елÑ\8cнÑ\8bÑ\85 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8fÑ\85',
+'tog-enotifminoredits' => 'УведомлÑ\8fÑ\82Ñ\8c Ð´Ð°Ð¶Ðµ Ð¿Ñ\80и Ð½ÐµÐ·Ð½Ð°Ñ\87иÑ\82елÑ\8cнÑ\8bÑ\85 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8fÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86 Ð¸ Ñ\84айлов',
 'tog-enotifrevealaddr' => 'Показывать мой почтовый адрес в сообщениях оповещения',
 'tog-shownumberswatching' => 'Показывать число участников, включивших страницу в свой список наблюдения',
 'tog-oldsig' => 'Текущая подпись:',
@@ -750,6 +750,8 @@ $1',
 'cannotdelete' => 'Невозможно удалить страницу или файл «$1».
 Возможно, страница уже оказалась удалена.',
 'cannotdelete-title' => 'Нельзя удалить страницу «$1»',
+'delete-hook-aborted' => 'Правка отменена процедурой-перехватчиком.
+Дополнительных пояснений не приведено.',
 'badtitle' => 'Недопустимое название',
 'badtitletext' => 'Запрашиваемое название страницы неправильно, пусто, либо неправильно указано межъязыковое или интервики название. Возможно, в названии используются недопустимые символы.',
 'perfcached' => 'Следующие данные взяты из кэша и могут не учитывать последних изменений. В кэше хранится не более $1 {{PLURAL:$1|записи|записей|записей}}.',
@@ -4132,6 +4134,8 @@ MediaWiki распространяется в надежде, что она бу
 'api-error-empty-file' => 'Отправленный вами файл пуст.',
 'api-error-emptypage' => 'Не допускается создание новых пустых страниц.',
 'api-error-fetchfileerror' => 'Внутренняя ошибка: что-то пошло не так при получении файла.',
+'api-error-fileexists-forbidden' => 'Файл с именем «$1» уже существует и не может быть перезаписан.',
+'api-error-fileexists-shared-forbidden' => 'Файл с именем «$1» уже существует в хранилище общих файлов и не может быть перезаписан.',
 'api-error-file-too-large' => 'Отправленный вами файл слишком велик.',
 'api-error-filename-tooshort' => 'Слишком короткое имя файла.',
 'api-error-filetype-banned' => 'Этот тип файлов запрещён.',
index b30ccba..2831ac9 100644 (file)
@@ -1084,7 +1084,7 @@ $1",
 'prefs-datetime' => 'Датум і час',
 'prefs-labs' => 'Експеріменталны функції',
 'prefs-user-pages' => 'Сторінкы хоснователя',
-'prefs-personal' => 'Інформації о хоснователёві',
+'prefs-personal' => 'Інформації о хоснователёви',
 'prefs-rc' => 'Послїднї зміны',
 'prefs-watchlist' => 'Слїдованы сторінкы',
 'prefs-watchlist-days' => 'Чісло днїв зображеных в слїдованых сторінках:',
@@ -1915,7 +1915,7 @@ $1',
 # E-mail user
 'mailnologin' => 'Без адресы одосланя',
 'mailnologintext' => 'Кідь хочете посылати ел. пошту іншым хоснователям, мусите ся [[Special:UserLogin|приголосити]] і мати платну адресу ел. пошты в своїм [[Special:Preferences|наставлїню]].',
-'emailuser' => 'Послати е-маіл тому хоснователёві',
+'emailuser' => 'Послати е-маіл тому хоснователёви',
 'emailpage' => 'Пошлийте е-пошту',
 'emailpagetext' => 'Помочов ниже зображеного формуларя можете тому хоснователёви послати повідомлїня ел. поштов.
 Адреса ел. пошты, котру мате зазначену в [[Special:Preferences|наставлїня]],ся обявить як адреса одосылателя пошты, жебы вам адресат міг одповісти прямо.',
@@ -1931,7 +1931,7 @@ $1',
 'emailtarget' => 'Уведьте імя хоснователя-адресата',
 'emailusername' => 'Імя хоснователя:',
 'emailusernamesubmit' => 'Одослати',
-'email-legend' => 'Одосыланя ел. пошты іншому хоснователёві {{GRAMMAR:2sg|{{SITENAME}}}}',
+'email-legend' => 'Одосыланя ел. пошты іншому хоснователёви {{GRAMMAR:2sg|{{SITENAME}}}}',
 'emailfrom' => 'Од:',
 'emailto' => 'Кому:',
 'emailsubject' => 'Тема:',
@@ -1941,7 +1941,7 @@ $1',
 'emailccsubject' => 'Копія вашого повідомлїня про хоснователя $1: $2',
 'emailsent' => 'Пошта одослана',
 'emailsenttext' => 'Ваше повідомлїня было послане.',
-'emailuserfooter' => 'Тота ел. пошта была послана з {{grammar:2sg|{{SITENAME}}}} за помочі функції „Послати ел, пошту“; одослав го хоснователь $1 хоснователёві $2',
+'emailuserfooter' => 'Тота ел. пошта была послана з {{grammar:2sg|{{SITENAME}}}} за помочі функції „Послати ел, пошту“; одослав го хоснователь $1 хоснователёви $2',
 
 # User Messenger
 'usermessage-summary' => 'Зохабити сістемове повідомлїня',
@@ -2263,7 +2263,7 @@ $1',
 ** Невгодне мено хоснователя',
 'ipb-hardblock' => 'Заборонити приголошеным хоснователям едітовати з той IP-адресы',
 'ipbcreateaccount' => 'Не доволити реґістрацію новых хоснователїв',
-'ipbemailban' => 'Заборонити хоснователёві посылати ел. пошту',
+'ipbemailban' => 'Заборонити хоснователёви посылати ел. пошту',
 'ipbenableautoblock' => 'Автоматічно блоковати IP адресы хоснованы тым хоснователём',
 'ipbsubmit' => 'Заблоковати',
 'ipbother' => 'Іншый час:',
@@ -2627,7 +2627,7 @@ $1',
 'tooltip-feed-rss' => 'RSS канал про тоту сторінку',
 'tooltip-feed-atom' => 'Atom канал про гевсю сторінку',
 'tooltip-t-contributions' => 'Перегляд приспевків того хоснователя',
-'tooltip-t-emailuser' => 'Послати е-маіл тому хоснователёві',
+'tooltip-t-emailuser' => 'Послати е-маіл тому хоснователёви',
 'tooltip-t-upload' => 'Награти файлы',
 'tooltip-t-specialpages' => 'Список вшыткых шпеціалных сторінок',
 'tooltip-t-print' => 'Верзія той сторінкы про друк',
index cfc70f2..d06326a 100644 (file)
@@ -58,17 +58,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Сиэксийэ баһыгар уҥа тимэҕинэн<br />баттаан сиэксийэни көннөрүү (JavaScript)',
 'tog-showtoc' => 'Иһинээҕитин көрдөр (ыстатыйа үстэн ордук бас тыллаах буоллаҕына)',
 'tog-rememberpassword' => 'Миигин бу браузерга сигээ ($1 {{PLURAL:$1|күн|күнтэн ордуга суох}})',
-'tog-watchcreations' => 'Суруйбут ыстатыйаларбын кэтээн көрүүгэ киллэрэн ис',
-'tog-watchdefault' => 'Уларыппыт сирэйдэрбин кэтээн көрүү испииһэгэр киллэрэн ис',
-'tog-watchmoves' => 'Аатын уларыппыт сирэйдэрбин кэтээн көрүү испииһэгэр киллэрэн ис',
-'tog-watchdeletion' => 'Соппут сирэйдэрбин кэтээн көрүү испииһэгэр киллэрэн ис',
+'tog-watchcreations' => 'Суруйбут ыстатыйаларбын уонна укпут билэлэрбин кэтээн көрүүгэ киллэрэн ис',
+'tog-watchdefault' => 'Уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис',
+'tog-watchmoves' => 'Аатын уларыппыт сирэйдэрбин уонна билэлэрбин кэтээн көрүү испииһэгэр киллэрэн ис',
+'tog-watchdeletion' => 'Соппут сирэйдэрбин уонна билэлэрбин кэтээн көрүү тиһигэр киллэрэн ис',
 'tog-minordefault' => 'Уларытыылары атын этиллибэтэҕинэ кыра уларытыы курдук бэлиэтээ',
 'tog-previewontop' => 'Хайдах буоларын уларытар түннүк үрдүнэн (иннигэр) көрдөр',
 'tog-previewonfirst' => 'Хайдах буоларын тута көрдөр',
 'tog-nocache' => 'Браузерга сирэйи кэштыыры араар',
-'tog-enotifwatchlistpages' => 'Кэтиир сирэйдэрим уларыйдахтарына e-mail көмөтүнэн биллэр',
+'tog-enotifwatchlistpages' => 'Ð\9aÑ\8dÑ\82ииÑ\80 Ñ\81иÑ\80Ñ\8dйдÑ\8dÑ\80им Ñ\83онна Ð±Ð¸Ð»Ñ\8dлÑ\8dÑ\80им Ñ\83лаÑ\80Ñ\8bйдаÑ\85Ñ\82аÑ\80Ñ\8bна e-mail ÐºÓ©Ð¼Ó©Ñ\82үнÑ\8dн Ð±Ð¸Ð»Ð»Ñ\8dÑ\80',
 'tog-enotifusertalkpages' => 'Ырытар сирэйим уларыйдаҕына эл. почтанан биллэр',
-'tog-enotifminoredits' => 'Кыра да уларытыы киирдэҕинэ эл. почтанан биллэр',
+'tog-enotifminoredits' => 'Кыра да уларытыы киирдэҕинэ эл. почтанан биллэрээр',
 'tog-enotifrevealaddr' => 'Мин почтам аадырыһын биллэриилэргэ көрдөр',
 'tog-shownumberswatching' => 'Сирэйи кэтээн көрөр дьон ахсаанын көрдөр',
 'tog-oldsig' => 'Баар илии баттааһын:',
@@ -397,6 +397,8 @@ $1',
 'cannotdelete' => '«$1» сирэй эбэтэр билэ сотуллар кыаҕа суох.
 Ким эрэ инники сотторбут буолуон сөп.',
 'cannotdelete-title' => '«$1» сирэйи сотор сатаммат',
+'delete-hook-aborted' => 'Көннөрүү төттөрү көннөрүллүбүт.
+Эбии туох да быһаарыллыбатах.',
 'badtitle' => 'Табыллыбат аат',
 'badtitletext' => 'Ыйытыллыбыт сирэй аата сыыһа, иччитэх, эбэтэр сыыһа ыйынньыктаах тыллар ыккардыларынааҕы дуу, биикилэр ыккардыларынааҕы дуу аат.',
 'perfcached' => 'Бу кээстэн ылыллыбыт онон бүтэһик уларыйыылары аахсымыан сөп. Кээскэ {{PLURAL:$1|соҕотох суруктан|$1 суруктан}} ордук хараллыбат.',
@@ -427,6 +429,9 @@ $2',
 
 Бу эрэсиими туруорбут дьаһабыл маннык быһаарыыны хаалларбыт: «''$3''».",
 'invalidtitle-knownnamespace' => '«$2» аат далыгар маннык тиэкистээх «$3» сатаммат аат',
+'invalidtitle-unknownnamespace' => 'Биллибэт аат дала $1 нүөмэрдээх, "$2" тиэкистээх сатаммат аат',
+'exception-nologin' => 'Ааккын билиһиннэрбэтэххин',
+'exception-nologin-text' => 'Маны көрөргө эбэтэр оҥорорго ааккын билиһиннэриэхтээххин.',
 
 # Virus scanner
 'virus-badscanner' => "Сатаммата. Вирус сканера биллибэтэ: ''$1''",
@@ -520,6 +525,7 @@ $2',
 'invalidemailaddress' => 'Киллэрбит аадырыһыҥ эл. почта аадырыһыгар майгыннаабат.
 Сөпкө суруй эбэтэр кураанах хааллар.',
 'cannotchangeemail' => 'Бу биикигэ бу аакка баайыллыбыт электроннай почта аадырыһа уларытыллар кыаҕа суох эбит.',
+'emaildisabled' => 'Бу ситим-сир сурук ыыппат эбит.',
 'accountcreated' => 'Саҥа аат иҥэрилиннэ',
 'accountcreatedtext' => 'Кыттааччы $1 диэн ааттанна.',
 'createaccount-title' => '{{SITENAME}} бырайыакка саҥа аат оҥоруу',
@@ -801,6 +807,7 @@ IP-аадырыһа эрэ көстөр.
 'edit-no-change' => 'Эн көннөрүүҥ киирбэтэ, тоҕо диэтэххэ тугу да уларыппатаххын.',
 'edit-already-exists' => 'Саҥа сирэйи оҥорор табыллыбат.
 Маннык сирэй баар эбит.',
+'defaultmessagetext' => 'Туспа этиллибэтэҕинэ суруллар тиэкис',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Болҕой. Бу сирэй наһаа элбэх көмпүүтэри ноҕуруускалыыр ресурсаларга сигэнэр.
@@ -816,6 +823,10 @@ IP-аадырыһа эрэ көстөр.
 'parser-template-loop-warning' => 'Халыыптар бэйэ бэйлэригэр сигэниилэрэ (петля) булулунна: [[$1]]',
 'parser-template-recursion-depth-warning' => '($1) халыып рекурсиятын муҥура бүппүт (Превышен предел глубины рекурсии)',
 'language-converter-depth-warning' => 'Тыл конвертерын дириҥин хааччаҕа куоһарыллыбыт ($1)',
+'node-count-exceeded-category' => 'Түмүктэрин ахсаана аһара барбыт сирэйдэр',
+'node-count-exceeded-warning' => 'Сирэй түмүгүн ахсаана таһынан барбыт',
+'expansion-depth-exceeded-warning' => 'Сирэйгэ угуллубут билэлэр аһара элбээбиттэр',
+'parser-unstrip-recursion-limit' => 'Рекурсия ахсаана таһынан барбыт ($1)',
 
 # "Undo" feature
 'undo-success' => 'Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.',
@@ -995,6 +1006,8 @@ $1",
 
 # Diffs
 'history-title' => 'Көннөрүү сурунаала "$1"',
+'difference-title' => '$1 — барыллар ыккардыларынааҕы ураты',
+'difference-title-multipage' => '"$1" сирэйдэр "$2" уратылара',
 'difference-multipage' => '(Сирэйдэр ыккардыларынааҕы уратылар)',
 'lineno' => '$1 строка:',
 'compareselectedversions' => 'Талыллыбыт торумнары тэҥнээ',
@@ -1089,6 +1102,7 @@ $1",
 'prefs-beta' => 'Бета-туруоруулар',
 'prefs-datetime' => 'Күнэ-дьыла уонна кэмэ',
 'prefs-labs' => 'Тургутуллар туруоруулар',
+'prefs-user-pages' => 'Кыттааччы сирэйдэрэ',
 'prefs-personal' => 'Кыттааччы туруоруулара',
 'prefs-rc' => 'Кэлиҥҥи уларытыылар',
 'prefs-watchlist' => 'Кэтээһин',
@@ -1381,6 +1395,7 @@ $1 {{PLURAL:$1|бэлиэттэн|бэлиэттэн (буукубаттан)}}
 'newsectionsummary' => '/* $1 */ саҥа сиэксийэ',
 'rc-enhanced-expand' => 'Сиһилии көрдөр (JavaScript туһаныллар)',
 'rc-enhanced-hide' => 'Сиһилиитин көрдөрүмэ',
+'rc-old-title' => 'бастаан бу аатынан суруллубут "$1"',
 
 # Recent changes linked
 'recentchangeslinked' => 'Сигэнэр уларытыылар',
@@ -1677,6 +1692,8 @@ $1',
 Эбии информацияны [$2 туһунан сирэй]гэ булуохха сөп.',
 'sharedupload-desc-here' => '$1 бу билэтэ атын бырайыактарга эмиэ туттуллуон сөп.
 [$2 туһунан сирэй]тэн ылыллыбыт тиэкис аллара көрдөрүлүннэ.',
+'sharedupload-desc-edit' => 'Бу билэ манна сытар $1, хас да ситим-сиргэ туттуллар кыахтаах.
+[$2 билэ туһунан] сирэйи уларытыахха сөп.',
 'filepage-nofile' => 'Маннык ааттаах билэ суох.',
 'filepage-nofile-link' => 'Маннык ааттаах билэ суох. Ол гынан баран эн [$1 суруттарыаххын] сөп.',
 'uploadnewversion-linktext' => 'Бу билэ саҥа барылын суруттар',
@@ -2747,6 +2764,7 @@ $1',
 'spambot_username' => 'Спамы ыраастааһын',
 'spam_reverting' => 'Манна: $1 ыйынньыга суох бүтэһик торуму сөргүтүү (төннөрүү)',
 'spam_blanking' => 'Бары торумнар манна "$1" ыйынньыктаахтар, барытын суох оҥоруу',
+'spam_deleting' => 'Бары барыллар манна "$1" сигэнэллэр эит, сотуу бара турар',
 
 # Info page
 'pageinfo-title' => '"$1" туһунан',
@@ -3454,6 +3472,8 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'version-software' => 'Туруоруллубут бырагырааммалар',
 'version-software-product' => 'Бородуукта',
 'version-software-version' => 'Барыл (торум)',
+'version-entrypoints-header-entrypoint' => 'Киирии сирэ',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Билэ суола',
@@ -3615,6 +3635,8 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'api-error-empty-file' => 'Ыыппыт билэҥ кураанах.',
 'api-error-emptypage' => 'Саҥа кураанах сирэйи оҥорор табыллыбат.',
 'api-error-fetchfileerror' => 'Ис алҕас: билэни ыларга туох эрэ сатаммата.',
+'api-error-fileexists-forbidden' => 'Маннык "$1" ааттаах билэ хайыы үйэ баар уонна хат суруллар кыаҕа суох эбит.',
+'api-error-fileexists-shared-forbidden' => '«$1» диэн ааттаах билэ уопсай харайар сиргэ баар уонна хат суруллар кыаҕа суох эбит.',
 'api-error-file-too-large' => 'Ыыппыт билэҥ наһаа улахан эбит.',
 'api-error-filename-tooshort' => 'Билэҥ аата наһаа кылгас.',
 'api-error-filetype-banned' => 'Маннык көрүҥнээх билэлэр бобуулаахтар.',
@@ -3642,4 +3664,15 @@ MediaWiki туһалаах буоллун диэн тарҕатыллар, ол
 'api-error-uploaddisabled' => 'Бу биикигэ хачайдыыр араарыллыбыт эбит.',
 'api-error-verification-error' => 'Бу билэ алдьаммыт эбэтэр табыгаһа суох кэҥэтиилээх.',
 
+# Durations
+'duration-seconds' => '$1 сөкүүндэ',
+'duration-minutes' => '$1 мүнүүтэ',
+'duration-hours' => '$1 чаас',
+'duration-days' => '$1 хонук',
+'duration-weeks' => '$1 нэдиэлэ',
+'duration-years' => '$1 сыл',
+'duration-decades' => '$1 декаада',
+'duration-centuries' => '$1 үйэ',
+'duration-millennia' => '$1 тыһыынча сыл',
+
 );
index be89336..36b41e6 100644 (file)
@@ -170,13 +170,13 @@ $messages = array(
 'mar' => 'njuk',
 'apr' => 'cuoŋ',
 'may' => 'mies',
-'jun' => 'geassemánnu',
-'jul' => 'suoidnemánnu',
-'aug' => 'borgemánnu',
-'sep' => 'čakčamánnu',
-'oct' => 'golggotmánnu',
-'nov' => 'skábmamánnu',
-'dec' => 'juovlamánnu',
+'jun' => 'geas',
+'jul' => 'suoi',
+'aug' => 'borg',
+'sep' => 'čakč',
+'oct' => 'golg',
+'nov' => 'skáb',
+'dec' => 'juov',
 
 # Categories related messages
 'pagecategories' => '{{PLURAL:$1|Luohkká|Luohkát}}',
@@ -309,7 +309,7 @@ $messages = array(
 'nstab-main' => 'Siidu',
 'nstab-user' => 'Geavaheaddjisiidu',
 'nstab-media' => 'Media',
-'nstab-special' => 'Erenomáš',
+'nstab-special' => 'Erenoamáš',
 'nstab-project' => 'Prošeaktasiidu',
 'nstab-image' => 'Fiila',
 'nstab-mediawiki' => 'Dieđáhus',
@@ -348,9 +348,9 @@ $messages = array(
 'sqlhidden' => '(SQL-jearahallan lea čihkojuvvon)',
 
 # Login and logout pages
-'logouttext' => "'''Leat dál čálligoahtán olggos {{GRAMMAR:elative|{{SITENAME}}}}.'''
+'logouttext' => "'''Don leat dál loggen olggos {{GRAMMAR:elative|{{SITENAME}}}}s.'''
 
-Sáhtát joatkit {{GRAMMAR:genitive|{{SITENAME}}}} geavaheami anonyman, dahje čálligoahtit ođđasit sisa.",
+Sáhtát joatkit {{GRAMMAR:genitive|{{SITENAME}}}} geavaheami anonyman dahje logget ođđasit sisa",
 'welcomecreation' => '== Bures boahtin, $1! ==
 Du geavaheaddjidovddaldat lea dál anus.
 Ále vajáldahte rievdadit {{GRAMMAR:genitive|{{SITENAME}}}} iežat ásahusaid.',
@@ -364,7 +364,7 @@ Du geavaheaddjidovddaldat lea dál anus.
 'loginprompt' => 'Sisačállimii dárbbašuvvojit geavssat (cookies).',
 'userlogin' => 'Logge sisa dahje ráhkat dovddaldaga',
 'logout' => 'Čálligoađe olggos',
-'userlogout' => 'Čálligoađe olggos',
+'userlogout' => 'Logge olggos',
 'notloggedin' => 'It leat čálligoahttan sisa',
 'nologin' => "Jus dus ii vel leat geavaheaddjidovddaldat, sáhtát '''$1''' dakkára.",
 'nologinlink' => 'ráhkadit',
@@ -447,7 +447,7 @@ Du geavaheaddjidovddaldat lea dál anus.
 'showpreview' => 'Geahča ovdalgiihtii',
 'showlivepreview' => 'Ovdalgeahčastan',
 'showdiff' => 'Čájet rievdadusaid',
-'anoneditwarning' => "'''Váruhus:''' It leat čálligoahtán sisa. Du IP-čujuhus báhcá dán siiddu ođasmahttinhistorjái.",
+'anoneditwarning' => "'''Váruhus:''' It leat loggen sisa. Du IP-čujuhus báhcá dán siiddu rievdadushistorjái.",
 'missingsummary' => 'It leat čállán čoahkkáigeasu. Jus válljet Vurke ođđasit, de rievdadusat maid ráhkadit vurkejuvvo čoahkkáigeasuhaga.',
 'missingcommenttext' => 'Čále čoahkkáigeasu vuollái.',
 'missingcommentheader' => 'It leat čállán bajilčállaga du oaivilii. Vállje <em>Vurke</em>, jus it hálit čállit bajilčállaga.',
@@ -552,12 +552,13 @@ Eará bajasdoallit sáhtet lohkat čihkojuvvon sisdoalu ja máhcahit dan.",
 'history-title' => 'Siiddu «$1» historjá',
 'lineno' => 'Gurgadas $1:',
 'compareselectedversions' => 'Veardde válljejuvvon veršuvnnaid',
+'showhideselectedversions' => 'Čájet/čiega válljejuvvon veršuvnnaid',
 'editundo' => 'šluhtte',
 'diff-multi' => '(Veršuvnnaid gaskas {{PLURAL:$1|okta rievdadus|$1 eará rievdadusa}}.)',
 
 # Search results
 'searchresults' => 'Ohcanbohtosat',
-'searchresults-title' => 'Ohcanbohtosat: "$1"',
+'searchresults-title' => 'Ohcanbohtosat: «$1»',
 'searchsubtitle' => 'Ohcan tearpmain [[:$1]]',
 'searchsubtitleinvalid' => 'Ohcan tearpmain $1',
 'notitlematches' => 'Ohcansátni ii dihtton ovttasge bájilčállagis',
@@ -566,6 +567,7 @@ Eará bajasdoallit sáhtet lohkat čihkojuvvon sisdoalu ja máhcahit dan.",
 'viewprevnext' => 'Čájet [$3] oktanaga.
 
 $1 {{int:pipe-separator}} $2',
+'searchmenu-new' => "'''Álggat siiddu ''[[:$1]]'' dán Wikipediai'''",
 'searchhelp-url' => 'Help:Rávvagat',
 'searchprofile-articles' => 'Sisdoallosiiddut',
 'searchprofile-project' => 'Veahkke- ja prošeaktasiiddut',
@@ -606,7 +608,7 @@ $1 {{int:pipe-separator}} $2',
 'saveprefs' => 'Vurke ásahusaid',
 'resetprefs' => 'Máhcat vurkejuvvon ásahusaid',
 'prefs-editing' => 'Rievdadeapmi',
-'rows' => 'Gurgadasat',
+'rows' => 'Gurgadasa:',
 'columns' => 'Kolumnat',
 'searchresultshead' => 'Ohcan',
 'resultsperpage' => 'Bohtosa juohke siiddus',
@@ -621,14 +623,20 @@ $1 {{int:pipe-separator}} $2',
 'allowemail' => 'Suova e-postta sádden čujuhussii',
 'prefs-files' => 'Fiillat',
 'youremail' => 'E-poastačujuhus',
-'username' => 'Dovddaldat',
-'uid' => 'Nummir',
+'username' => 'Geavaheaddjenamma:',
+'uid' => 'Geavaheaddji-ID:',
+'prefs-memberingroups' => 'Miellahttu/lahttu {{PLURAL:$1|joavkkus|joavkkuin}}:',
+'prefs-registration' => 'Registrerenáigi:',
 'yourrealname' => 'Rivttes namma',
 'yourlanguage' => 'Geavahanvuođu giella',
 'yourvariant' => 'Giellavarianta:',
 'yournick' => 'Vuolláičálus',
 'badsig' => 'Vuolláičálus ii dohke.',
 'badsiglength' => 'Vuolláičálus lea menddo guhki - vuolláičálus sáhttá leat eanemusta $1 mearka.',
+'yourgender' => 'Sohkabealli:',
+'gender-unknown' => 'Ii diehtu',
+'gender-male' => 'Dievdu',
+'gender-female' => 'Nisson',
 'email' => 'E-poastadoaimmat',
 'prefs-help-realname' => 'Eaktodahtolaš. Du namma čájehuvvo geavaheaddjidovddaldaga sajis siiddu dahkkilogahallamis.',
 'prefs-help-email' => 'Eaktodahtolaš. Eará geavaheaddjit sáhttet váldit dunnje oktavuođa e-poasttain nu ahte du e-poastačujuhus ii dihtto.',
@@ -722,6 +730,7 @@ $1 {{int:pipe-separator}} $2',
 'uploadwarning' => 'Lasihanvaruhus',
 'savefile' => 'Vurke',
 'uploadedimage' => 'vurkii fiilla [[$1]]',
+'overwroteimage' => 'vurkii ođđa veršuvnna fiillas «[[$1]]»',
 'uploaddisabled' => '{{GRAMMAR:genitive|{{SITENAME}}}} ii sáhte lasihit fiillaid.',
 'uploaddisabledtext' => 'Fiillaid vurken lea váldojuvvon eret anus.',
 'uploadscripted' => 'Dát fiila sisdisdoalla HTML-koda dahje skriptaid, maid neahttabláđejeaddji sáhttá vahagis dahkat.',
@@ -899,7 +908,7 @@ $1 {{int:pipe-separator}} $2',
 'booksources-text' => 'Vuolábealde leat liŋkkat olggobeal siidduide, main vuvdojuvvot ođđa ja boares girjjid. Siiddui sáhttá maid leat lassedieđut girjjiin.',
 
 # Special:Log
-'specialloguserlabel' => 'Geavaheaddji',
+'specialloguserlabel' => 'Geavaheaddji:',
 'speciallogtitlelabel' => 'Mearri',
 'log' => 'Loggat',
 'all-logs-page' => 'Buot loggat',
@@ -926,6 +935,9 @@ $1 {{int:pipe-separator}} $2',
 [[Special:UnusedCategories|Unused categories]] are not shown here.
 Also see [[Special:WantedCategories|wanted categories]].',
 
+# Special:LinkSearch
+'linksearch-ok' => 'Oza',
+
 # Special:ListUsers
 'listusers-submit' => 'Oza',
 'listusers-noresult' => 'Geavaheaddjit eai dihtton. Dárkis maid sierra bustávasturrodagat.',
@@ -960,6 +972,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'emailccsubject' => 'Kopiija sáddejuvvon sánis čujuhussii $1: $2',
 'emailsent' => 'E-poastasátni lea sáddejuvvon',
 'emailsenttext' => 'E-poastasátni lea sáddejuvvon.',
+'emailuserfooter' => 'Dán e-poastta sáddii geavaheaddji $1 geavaheaddjái $2 {{SITENAME}} "E-mailUser"-doaimmain.',
 
 # Watchlist
 'watchlist' => 'Čuovvunlistu',
@@ -1005,7 +1018,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'deletepage' => 'Sihko siiddu',
 'confirm' => 'Daga',
 'excontent' => 'sisdisdolii: ”$1”',
-'exbeforeblank' => 'sisdoallu ovdal gurrema: ”$1”',
+'exbeforeblank' => 'sisdoallu ovdal gurrema: «$1»',
 'exblank' => 'lei guoros',
 'historywarning' => 'Siiddu, man aiggot sihkut, lea rievdaduvvon dávjit go oktii:',
 'confirmdeletetext' => 'Leat sihkumin siiddu dahje fiilla ja buot dan historjjá. Ádde dagu váikkuhsaid ja sihko {{GRAMMAR:genitive|{{SITENAME}}}} [[{{MediaWiki:Policy-url}}|geavahaid]] mielde.',
@@ -1063,7 +1076,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 
 # Restrictions (nouns)
 'restriction-edit' => 'rievdádeapmi',
-'restriction-move' => 'sirdin',
+'restriction-move' => 'Sirdin',
 'restriction-upload' => 'Fiilla vurken',
 
 # Restriction levels
@@ -1143,7 +1156,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 'ipbsubmit' => 'Eastte',
 'ipbother' => 'Eará áigi',
 'ipboptions' => '2 diimma:2 hours,1 beaivi:1 day,3 beaivve:3 days,1 vahkku:1 week,2 vahkku:2 weeks,1 mánotbádji:1 month,3 mánotbaji:3 months,6 mánotbaji:6 months,1 jahki:1 year,bissovaš:infinite',
-'ipbotheroption' => 'Eará',
+'ipbotheroption' => 'eará',
 'ipbotherreason' => 'Eará sivva',
 'badipaddress' => 'IP-čujuhus lea boastut.',
 'blockipsuccesssub' => 'Easttan lihkosmuvai',
@@ -1203,7 +1216,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 
 # Special:Import
 'import-comment' => 'Sivva',
-'import-revision-count' => '$1 {{PLURAL:$1|veršuvdna|veršuvnna}}',
+'import-revision-count' => '$1 {{PLURAL:$1|veršuvdna|veršuvnnat}}',
 
 # Import log
 'import-logentry-upload-detail' => '$1 veršuvdna/veršuvnna',
@@ -1288,6 +1301,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 # Special:NewFiles
 'newimages' => 'Ođđa govat',
 'imagelisttext' => "Vuolábealde lea '''$1''' fiilla ordnejuvvon $2.",
+'noimages' => 'Ii oaidnámus.',
 'ilsubmit' => 'Oza',
 'bydate' => 'beaivemeari mielde',
 'sp-newimages-showfrom' => 'Čájet ođđa govaid $1 rájes',
@@ -1414,6 +1428,7 @@ Siiddus $2 lea listu maŋimus sihkomiin.',
 
 # New logging system
 'logentry-delete-delete' => '$1 sihkui siiddu $3',
+'logentry-delete-restore' => '$1 máhcahii siiddu $3',
 'logentry-move-move' => '$1 sirddii siiddu $3 nammii $4',
 'logentry-move-move_redir-noredirect' => '$1 sirddii siiddu $3 nammii $4 iige ráhkadan ođđasitstivrema',
 'logentry-newusers-create' => '$1 ráhkadii dovddaldaga',
index 0111218..7feae4f 100644 (file)
@@ -288,7 +288,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Skryť strážené úpravy v Posledných úpravách',
 'tog-newpageshidepatrolled' => 'Skryť strážené stránky zo zoznamu nových stránok',
 'tog-extendwatchlist' => 'Rozšíriť zoznam sledovaných, aby zobrazoval všetky zmeny, nie len posledné',
-'tog-usenewrc' => 'Použiť rozšírené zobrazenie posledných úprav (vyžaduje JavaScript)',
+'tog-usenewrc' => 'Zoskupiť zmeny v posledných úpravách a zoznamoch sledovaných (vyžaduje JavaScript)',
 'tog-numberheadings' => 'Automaticky číslovať nadpisy',
 'tog-showtoolbar' => 'Zobraziť panel nástrojov úprav',
 'tog-editondblclick' => 'Upravovať stránky po dvojitom kliknutí (JavaScript)',
@@ -296,17 +296,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Umožniť upravovať sekcie po kliknutí pravým tlačidlom na nadpisy sekcií (JavaScript)',
 'tog-showtoc' => 'Zobrazovať obsah (pre stránky s viac ako 3 nadpismi)',
 'tog-rememberpassword' => 'Zapamätať si prihlásenie na tomto počítači (najviac $1 {{PLURAL:$1|deň|dni|dní}})',
-'tog-watchcreations' => 'Pridávať stránky, ktoré vytvorím, automaticky medzi sledované',
-'tog-watchdefault' => 'Pridávať stránky, ktoré upravujem, automaticky medzi sledované',
-'tog-watchmoves' => 'Pridávať stránky, ktoré presuniem, do môjho zoznamu sledovaných',
-'tog-watchdeletion' => 'Pridávať stránky, ktoré zmažem, do môjho zoznamu sledovaných',
+'tog-watchcreations' => 'Pridávať stránky, ktoré vytvorím a súbory, ktoré nahrám medzi sledované',
+'tog-watchdefault' => 'Pridávať stránky a súbory, ktoré upravím medzi sledované',
+'tog-watchmoves' => 'Pridávať stránky a súbory, ktoré presuniem medzi sledované',
+'tog-watchdeletion' => 'Pridávať stránky a súbory, ktoré zmažem medzi sledované',
 'tog-minordefault' => 'Označovať všetky zmeny štandardne ako drobné',
 'tog-previewontop' => 'Zobrazovať náhľad pred textovým poľom úprav, nie až za ním',
 'tog-previewonfirst' => 'Zobraziť náhľad pred prvou úpravou',
 'tog-nocache' => 'Zakázať ukladanie stránok do vyrovnávacej pamäte prehliadača',
-'tog-enotifwatchlistpages' => 'Upozorniť ma emailom, keď sa zmení stránka z môjho zoznamu sledovaných',
+'tog-enotifwatchlistpages' => 'Upozorniť ma emailom, keď sa zmení stránka alebo súbor z môjho zoznamu sledovaných',
 'tog-enotifusertalkpages' => 'Upozorniť ma emailom po zmene mojej používateľskej diskusnej stránky',
-'tog-enotifminoredits' => 'Upozorniť ma emailom aj na drobné úpravy stránok',
+'tog-enotifminoredits' => 'Upozorniť ma emailom aj na drobné úpravy stránok a súborov',
 'tog-enotifrevealaddr' => 'Zobraziť moju emailovú adresu v emailoch s upozorneniami',
 'tog-shownumberswatching' => 'Zobraziť počet používateľov sledujúcich stránku',
 'tog-oldsig' => 'Súčasný podpis:',
@@ -639,6 +639,8 @@ Oznámte to prosím [[Special:ListUsers/sysop|správcovi]] a uveďte URL.',
 'cannotdelete' => 'Nebolo možné zmazať stránku alebo súbor „$1“.
 Možno ju už zmazal nieto iný.',
 'cannotdelete-title' => 'Nemôžete zmazať stránku "$1"',
+'delete-hook-aborted' => 'Zmazanie zrušila prídavná funkcia (prípojný bod syntaktického analyzátora).
+Neudala vysvetlenie.',
 'badtitle' => 'Neplatný nadpis',
 'badtitletext' => 'Požadovaný nadpis bol neplatný, nezadaný, alebo nesprávne odkazovaný z inej jazykovej verzie {{GRAMMAR:genitív|{{SITENAME}}}}. Mohol tiež obsahovať jeden alebo viac znakov, ktoré nie je možné použiť v nadpisoch.',
 'perfcached' => 'Nasledujúce údaje pochádzajú z vyrovnávacej pamäte a nemusia byť úplne aktuálne. Vo vyrovnávacej pamäti {{PLURAL:$1|je dostupný|sú dostupné|je dostupných}} najviac {{PLURAL:$1|jeden výsledok|$1 výsledky|$1 výsledkov}}.',
@@ -670,6 +672,8 @@ Udaný dôvod: ''$2''.",
 Správca, ktorý ho zamkol ponúkol toto vysvetlenie: „$3“.',
 'invalidtitle-knownnamespace' => 'Neplatný názov s menným priestorom „$2“ a textom „$3“',
 'invalidtitle-unknownnamespace' => 'Neplatný názov s neznámym číslom menného priestoru „$1“ a textom „$2“',
+'exception-nologin' => 'Nie ste prihlásený',
+'exception-nologin-text' => 'Táto stránka alebo operácia vyžaduje, aby ste boli na tejto wiki prihlásení.',
 
 # Virus scanner
 'virus-badscanner' => "Chybná konfigurácia: neznámy antivírus: ''$1''",
@@ -2130,6 +2134,7 @@ na ktorý/-ého chcete aplikovať túto funkciu.',
 Môžete zúžiť rozsah, ak zvolíte typ záznamu, používateľské meno alebo dotyčnú stránku (záleží na veľkosti písmen).',
 'logempty' => 'V zázname neboli nájdené zodpovedajúce položky.',
 'log-title-wildcard' => 'Hľadať názvy začínajúce týmto textom',
+'showhideselectedlogentries' => 'Zobraziť/skryť vybraté položky záznamu',
 
 # Special:AllPages
 'allpages' => 'Všetky stránky',
@@ -3042,6 +3047,7 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'spambot_username' => 'MediaWiki čistenie spamu',
 'spam_reverting' => 'Vraciam poslednú verziu, ktorá neobsahuje odkazy na $1',
 'spam_blanking' => 'Všetky revízie obsahovali odkaz na $1, odstraňujem obsah',
+'spam_deleting' => 'Všetky revízie obsahovali odkaz na $1, odstraňuje sa',
 
 # Info page
 'pageinfo-title' => 'Informácie o „$1“',
@@ -3923,6 +3929,8 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'api-error-empty-file' => 'Súbor, ktorý ste poslali bol prázdny.',
 'api-error-emptypage' => 'Vytváranie nových, prázdnych stránok nie je dovolené.',
 'api-error-fetchfileerror' => 'Vnútorná chyba: Niečo pokazilo počas sťahovania súboru.',
+'api-error-fileexists-forbidden' => 'Súbor s názvom „$1“ už existuje a nie je možné prepísať ho.',
+'api-error-fileexists-shared-forbidden' => 'Súbor s názvom „$1“ už neexistuje v repozitári zdieľaných súborov a nie je možné prepísať ho.',
 'api-error-file-too-large' => 'Súbor, ktorý ste poslali bol príliš veľký.',
 'api-error-filename-tooshort' => 'Názov súboru je príliš krátky.',
 'api-error-filetype-banned' => 'Tento typ súboru je zakázaný.',
@@ -3961,4 +3969,6 @@ V opačnom prípade môžete použiť zjednodušený formulár nižšie. Váš k
 'duration-centuries' => '$1 {{PLURAL:$1|storočie|storočia|storočí}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tisícročie|tisícročia|tisícročí}}',
 
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'Nepodarilo sa získať zámky na serveri $1.',
 );
index e806864..5751f3c 100644 (file)
@@ -199,17 +199,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Omogoči urejanje razdelkov z desnim klikanjem njihovih naslovov (zahteva JavaScript)',
 'tog-showtoc' => 'Prikaži vsebino (strani z več kot tremi naslovi)',
 'tog-rememberpassword' => 'Zapomni si me v tem brskalniku (za največ $1 {{PLURAL:$1|dan|dneva|dni}})',
-'tog-watchcreations' => 'Vse ustvarjene strani dodaj na spisek nadzorov',
-'tog-watchdefault' => 'Dodaj na spisek nadzorov vse članke, ki sem jih ustvaril/-a ali spremenil/-a',
-'tog-watchmoves' => 'Dodaj strani, ki jih premaknem, na moj spisek nadzorov',
-'tog-watchdeletion' => 'Dodaj strani, ki jih izbrišem, na moj spisek nadzorov',
+'tog-watchcreations' => 'Vse ustvarjene strani in moje naložene datoteke dodaj na spisek nadzorov',
+'tog-watchdefault' => 'Dodaj na spisek nadzorov vse članke in datoteke, ki sem jih spremenil/-a',
+'tog-watchmoves' => 'Dodaj strani in datoteke, ki jih premaknem, na moj spisek nadzorov',
+'tog-watchdeletion' => 'Dodaj strani in datoteke, ki jih izbrišem, na moj spisek nadzorov',
 'tog-minordefault' => 'Vsa urejanja označi kot manjša',
 'tog-previewontop' => 'Prikaži predogled pred urejevalnim poljem in ne za njim',
 'tog-previewonfirst' => 'Ob začetku urejanja prikaži predogled',
 'tog-nocache' => 'Onemogoči predpomnenje strani v brskalniku',
-'tog-enotifwatchlistpages' => 'Ob spremembah strani mi pošlji e-pošto',
+'tog-enotifwatchlistpages' => 'Ob spremembah strani ali datotek mi pošlji e-pošto',
 'tog-enotifusertalkpages' => 'Pošlji e-pošto ob spremembah moje pogovorne strani',
-'tog-enotifminoredits' => 'Pošlji e-pošto tudi za manjše spremembe strani',
+'tog-enotifminoredits' => 'Pošlji e-pošto tudi za manjše spremembe strani in datotek',
 'tog-enotifrevealaddr' => 'V sporočilih z obvestili o spremembah razkrij moj e-poštni naslov',
 'tog-shownumberswatching' => 'Prikaži število uporabnikov, ki spremljajo temo',
 'tog-oldsig' => 'Obstoječi podpis:',
@@ -541,6 +541,8 @@ Prosimo, da o tem obvestite [[Special:ListUsers/sysop|administratorja]] (ne poza
 'cannotdelete' => 'Strani ali datoteke »$1« ni mogoče izbrisati.
 Morda jo je izbrisal že kdo drug.',
 'cannotdelete-title' => 'Ne morem izbrisati strani »$1«',
+'delete-hook-aborted' => 'Zanka je prekinila brisanje.
+Vrnila ni nobene razlage.',
 'badtitle' => 'Nepravilen naslov',
 'badtitletext' => 'Navedeni naslov strani je neveljaven, prazen, napačno povezan k drugim jezikom oziroma wikiprojektom.
 Morda vsebuje enega ali več nepodprtih znakov.',
@@ -3838,6 +3840,8 @@ V nasprotnem primeru lahko uporabite preprost obrazec spodaj. Vašo pripombo bom
 'api-error-empty-file' => 'Poslana datoteka je prazna.',
 'api-error-emptypage' => 'Ustvarjanje novih, praznih strani ni dovoljeno.',
 'api-error-fetchfileerror' => 'Notranja napaka: pri pridobivanju datoteke je nekaj šlo narobe.',
+'api-error-fileexists-forbidden' => 'Datoteka »$1« že obstaja in je ni mogoče prepisati.',
+'api-error-fileexists-shared-forbidden' => 'Datoteka »$1« že obstaja v skupnem skladišču datotek in je ni mogoče prepisati.',
 'api-error-file-too-large' => 'Poslana datoteka je prevelika.',
 'api-error-filename-tooshort' => 'Ime datoteke je prekratko.',
 'api-error-filetype-banned' => 'Ta vrsta datoteke je prepovedana.',
index 2400634..d3e5d9c 100644 (file)
@@ -406,7 +406,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Сакриј прегледане измене у списку скорашњих измена',
 'tog-newpageshidepatrolled' => 'Сакриј прегледане странице са списка нових страница',
 'tog-extendwatchlist' => 'Прошири списак надгледања за приказ свих измена, не само скорашњих',
-'tog-usenewrc' => 'Побољшани списак скорашњих измена (јаваскрипт)',
+'tog-usenewrc' => 'Промене у групи по страници у списку скорашњих измена и надгледаних страница (захтева јаваскрипт)',
 'tog-numberheadings' => 'Самостално нумериши поднаслове',
 'tog-showtoolbar' => 'Трака с алаткама за уређивање (јаваскрипт)',
 'tog-editondblclick' => 'Уређивање страница двоструким кликом (јаваскрипт)',
@@ -766,6 +766,8 @@ $1',
 'cannotdelete' => 'Не могу да обришем страницу или датотеку „$1“.
 Вероватно ју је неко други обрисао.',
 'cannotdelete-title' => 'Не могу да обришем страницу „$1“',
+'delete-hook-aborted' => 'Брисање је прекинула кука.
+Није дато никакво образложење.',
 'badtitle' => 'Неисправан наслов',
 'badtitletext' => 'Наслов странице је неисправан, празан или је међујезички или међувики наслов погрешно повезан.
 Можда садржи знакове који се не могу користити у насловима.',
@@ -801,6 +803,8 @@ $2',
 Администратор који ју је закључао понудио је следеће објашњење: „$3“.',
 'invalidtitle-knownnamespace' => 'Неисправан наслов с именским простором „$2“ и текстом „$3“',
 'invalidtitle-unknownnamespace' => 'Неисправан наслов с именским простором бр. $1 и текстом „$2“',
+'exception-nologin' => 'Нисте пријављени',
+'exception-nologin-text' => 'Ова страница или радња захтева да будете пријављени на вики.',
 
 # Virus scanner
 'virus-badscanner' => "Неисправна поставка: непознати скенер за вирусе: ''$1''",
@@ -1174,8 +1178,8 @@ $2
 'moveddeleted-notice' => 'Ова страница је обрисана.
 Историја њеног брисања и премештања налази се испод:',
 'log-fulllog' => 'Погледај целу историју',
-'edit-hook-aborted' => 'Измена је прекинута куком.
\9eбÑ\80азложеÑ\9aе Ð½Ð¸Ñ\98е Ð¿Ð¾Ð½Ñ\83Ñ\92ено.',
+'edit-hook-aborted' => 'Измену је прекинула кука.
\9dиÑ\98е Ð´Ð°Ñ\82о Ð½Ð¸ÐºÐ°ÐºÐ²Ð¾ Ð¾Ð±Ñ\80азложеÑ\9aе.',
 'edit-gone-missing' => 'Не могу да ажурирам страницу.
 Изгледа да је обрисана.',
 'edit-conflict' => 'Сукоб измена.',
@@ -1383,8 +1387,8 @@ $1",
 'mergelogpagetext' => 'Испод се налази списак скорашњих спајања историја страница.',
 
 # Diffs
-'history-title' => 'Историја измена за „$1“',
-'difference-title' => 'Разлика између измена странице „$1“',
+'history-title' => 'Историја измена странице „$1“',
+'difference-title' => 'Разлика између измена на страници „$1“',
 'difference-title-multipage' => 'Разлика између страница „$1“ и „$2“',
 'difference-multipage' => '(разлике између страница)',
 'lineno' => 'Ред $1:',
@@ -1483,6 +1487,7 @@ $1",
 'prefs-beta' => 'Бета могућности',
 'prefs-datetime' => 'Датум и време',
 'prefs-labs' => 'Пробне могућности',
+'prefs-user-pages' => 'Корисничке странице',
 'prefs-personal' => 'Профил',
 'prefs-rc' => 'Скорашње измене',
 'prefs-watchlist' => 'Списак надгледања',
@@ -1968,14 +1973,15 @@ $1',
 'backend-fail-writetemp' => 'Не могу да пишем у привременој датотеци.',
 'backend-fail-closetemp' => 'Не могу да затворим привремену датотеку.',
 'backend-fail-read' => 'Не могу да прочитам датотеку $1.',
-'backend-fail-create' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð½Ð°Ð¿Ñ\80авим датотеку $1.',
-'backend-fail-maxsize' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð½Ð°Ð¿Ñ\80авим датотеку $1 јер је већа од {{PLURAL:$2|$2 бајта|$2 бајта|$2 бајтова}}.',
+'backend-fail-create' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð·Ð°Ð¿Ð¸Ñ\88ем датотеку $1.',
+'backend-fail-maxsize' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð·Ð°Ð¿Ð¸Ñ\88ем датотеку $1 јер је већа од {{PLURAL:$2|$2 бајта|$2 бајта|$2 бајтова}}.',
 'backend-fail-readonly' => 'Складишна основа „$1“ тренутно не може да се записује. Наведени разлог гласи: „$2“',
 'backend-fail-synced' => 'Датотека „$1“ је недоследна између унутрашњих складишних основа',
 'backend-fail-connect' => 'Не могу да се повежем са складишном основом „$1“.',
 'backend-fail-internal' => 'Дошло је до непознате грешке у складишној основи „$1“.',
 'backend-fail-contenttype' => 'Не могу да утврдим какав садржај има датотека коју треба да сместим у „$1“.',
 'backend-fail-batchsize' => 'Складишна основа је добила блокаду од $1 {{PLURAL:$1|операције|операције|операција}}; ограничење је $2 {{PLURAL:$2|операција|операције|операција}}.',
+'backend-fail-usable' => 'Не могу да запишем датотеку $1 јер немате довољно дозвола или вам недостају фасцикле/садржаоци.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не могу да се повежем с новинарском базом за складишну основу „$1“.',
@@ -2302,6 +2308,7 @@ $1',
 Можете сузити приказ одабирући врсту историје, корисничког имена или тражене странице.',
 'logempty' => 'Нема пронађених ставки у историји.',
 'log-title-wildcard' => 'тражи наслове који почињу с овим текстом',
+'showhideselectedlogentries' => 'Прикажи/сакриј изабране записе',
 
 # Special:AllPages
 'allpages' => 'Све странице',
@@ -3232,7 +3239,8 @@ $1',
 'spamprotectionmatch' => 'Следећи текст је изазвао наш филтер за непожељне поруке: $1',
 'spambot_username' => 'Чишћење непожељних порука у Медијавикији',
 'spam_reverting' => 'Враћам на последњу измену која не садржи везе до $1',
-'spam_blanking' => 'Све измене које садрже везе до $1, бришем',
+'spam_blanking' => 'Све измене садрже везе до $1. Чистим',
+'spam_deleting' => 'Све измене садрже везе до $1. Бришем',
 
 # Info page
 'pageinfo-title' => 'Подаци о „$1“',
@@ -4287,6 +4295,8 @@ $5
 'api-error-empty-file' => 'Послата датотека је празна.',
 'api-error-emptypage' => 'Стварање нових празних страница није дозвољено.',
 'api-error-fetchfileerror' => 'Унутрашња грешка: дошло је до грешке при добављању датотеке.',
+'api-error-fileexists-forbidden' => 'Већ постоји датотека с именом „$1“ и не може да се замени.',
+'api-error-fileexists-shared-forbidden' => 'Већ постоји датотека с именом „$1“ у заједничкој ризници и не може да се замени.',
 'api-error-file-too-large' => 'Послата датотека је превелика.',
 'api-error-filename-tooshort' => 'Назив датотеке је прекратак.',
 'api-error-filetype-banned' => 'Ова врста датотеке је забрањена.',
@@ -4325,4 +4335,6 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|векова}}',
 'duration-millennia' => '$1 {{PLURAL:$1|миленијум|миленијума|миленијума}}',
 
+# Unknown messages
+'lockmanager-fail-svr-acquire' => 'Не могу да добијем катанце на серверу $1.',
 );
index 9868b9b..66ecaa6 100644 (file)
@@ -341,7 +341,7 @@ $messages = array(
 'tog-nocache' => 'Stäng av cachelagring för sidor',
 'tog-enotifwatchlistpages' => 'Skicka e-post till mig när en sida på min bevakningslista ändras',
 'tog-enotifusertalkpages' => 'Skicka e-post till mig när något händer på min diskussionssida',
-'tog-enotifminoredits' => 'Skicka mig e-post även för mindre ändringar',
+'tog-enotifminoredits' => 'Skicka mig e-post även för mindre ändringar av sidor och filer',
 'tog-enotifrevealaddr' => 'Visa min e-postadress i e-postmeddelanden om ändringar som skickas till andra',
 'tog-shownumberswatching' => 'Visa antalet användare som bevakar',
 'tog-oldsig' => 'Nuvarande signatur:',
@@ -675,6 +675,8 @@ Rapportera gärna problemet till någon [[Special:ListUsers/sysop|administratör
 'cannotdelete' => 'Sidan eller filen "$1" kunde inte raderas.
 Den kanske redan har raderats av någon annan.',
 'cannotdelete-title' => 'Sidan "$1" kan inte raderas',
+'delete-hook-aborted' => 'Borttagning avbruten av hook.
+Den gav ingen förklaring.',
 'badtitle' => 'Felaktig titel',
 'badtitletext' => 'Den begärda sidtiteln är antingen ogiltig eller tom, eller så är titeln felaktigt länkad från en annan wiki.
 Den kan innehålla ett eller flera tecken som inte får användas i sidtitlar.',
@@ -3952,6 +3954,8 @@ Annars kan du använda det enkla formuläret nedan. Din kommentar kommer att lä
 'api-error-empty-file' => 'Filen du skickade var tom.',
 'api-error-emptypage' => 'Det är inte tillåtet att skapa nya, tomma sidor.',
 'api-error-fetchfileerror' => 'Internt fel: något gick fel vid hämtningen av filen.',
+'api-error-fileexists-forbidden' => 'En fil med namnet "$1" finns redan och kan inte skrivas över.',
+'api-error-fileexists-shared-forbidden' => 'En fil med namnet "$1" finns redan i det delade filarkivet och kan inte skrivas över.',
 'api-error-file-too-large' => 'Filen du skickade var för stor.',
 'api-error-filename-tooshort' => 'Filnamnet är för kort.',
 'api-error-filetype-banned' => 'Denna typ av fil är förbjuden.',
index ac22a68..ece11b7 100644 (file)
@@ -131,7 +131,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Ficha kurasa zilizofanyiwa doria kwenye mabadiliko ya karibuni',
 'tog-newpageshidepatrolled' => 'Ficha kurasa zilizofanyiwa doria kwenye orodha ya kurasa mpya',
 'tog-extendwatchlist' => 'Tanua orodha ya maangalizi ili kuonyesha mabadiliko yote yaliyofanyika, si hilo la mwisho tu.',
-'tog-usenewrc' => 'Mabadiliko ya karibuni yenye maelezo mengine (inatumia JavaScript)',
+'tog-usenewrc' => 'Mabadiliko ya kundi kwa kurasa kwenye mabadiliko ya karibuni na maangalizi (JavaScript inahitajika)',
 'tog-numberheadings' => 'Vichwa vya habari vijipange namba-vyenyewe',
 'tog-showtoolbar' => 'Onyesha mwambaa wa zana za kuhariria (JavaScript)',
 'tog-editondblclick' => 'Hariri ukurasa kwa kubonyeza mara mbili',
@@ -945,10 +945,10 @@ Bado unaweza [$1 kutazama sahihisho hili] iwapo utapenda kuendelea.",
 'rev-suppressed-text-unhide' => "Pitio la ukurasa huu '''limefichwa'''.
 Maelezo yanaweza kupatikana kwenye [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} kumbukumbu ya ufichaji].
 Bado unaweza [$1 kutazama sahihisho hili] iwapo utapenda kuendelea.",
-'rev-deleted-text-view' => "Pitio hilo la ukurasa '''lilifutwa'''.
-Kwa sababu u mkabidhi, bado unaweza kulitazama; maelezo mengine yapo kwenye [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} kumbukumbu ya kufuta].",
-'rev-suppressed-text-view' => "Pitio hilo la ukurasa '''lilifichwa'''.
-Kwa sababu u mkabidhi, bado unaweza kulitazama; maelezo mengine yapo kwenye [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} kumbukumbu ya kuficha].",
+'rev-deleted-text-view' => "Pitio hilo la ukurasa huu '''limefutwa'''.
+Unaweza kulitazama; maelezo mengine yapo kwenye [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} kumbukumbu ya ufutaji].",
+'rev-suppressed-text-view' => "Pitio la ukurasa huu '''limefichwa'''.
+Unaweza kulitazama; maelezo mengine yapo kwenye [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} kumbukumbu ya ufichaji].",
 'rev-delundel' => 'onyesha/ficha',
 'rev-showdeleted' => 'onyesha',
 'revisiondelete' => 'Kufuta/kurudisha mapitio',
@@ -1197,7 +1197,7 @@ Hutaweza kulibatilisha tendo hili baadaye.',
 'prefs-registration' => 'Wakati wa kusajili:',
 'yourrealname' => 'Jina lako halisi:',
 'yourlanguage' => 'Lugha:',
-'yourvariant' => 'Variant:',
+'yourvariant' => 'Kadiri ya lugha ya wiki:',
 'yournick' => 'Sahihi:',
 'prefs-help-signature' => 'Unapoandika kwenye kurasa za majadiliano tafadhali utie sahihi kwa kuandika "<nowiki>~~~~</nowiki>"; itaonekana jina lako pamoja na saa na tarehe ya kuhifadhi.',
 'badsig' => 'Umeweka sahihi batili.
@@ -1326,7 +1326,7 @@ Taarifa hii itakuwa wazi.',
 'right-userrights-interwiki' => 'Kuhariri wezo za watumiaji kwenye wiki zingine',
 'right-siteadmin' => 'Kufunga na kufungua hifadhidata',
 'right-sendemail' => 'Kutuma barua-pepe kwa watumiaji wengine',
-'right-passwordreset' => 'Kuona barua pepe zinazoweka neno la siri upya',
+'right-passwordreset' => 'Onesha barua pepe zinazoweka neno la siri upya',
 
 # User rights log
 'rightslog' => 'Kumbukumbu za vyeo vya watumiaji',
@@ -1474,7 +1474,7 @@ faili hili lina $2.',
 'emptyfile' => 'Faili ulilolipakia linaonekana kuwa tupu.
 Hii huenda ikawa jina lake limeandikwa vibaya.
 Tafadhali uhakikishe kwamba ni kweli unataka kupakia faili hili.',
-'windows-nonascii-filename' => 'Wiki hii haiwezi kutumia majina ya mafaili yenye herufi maalum.',
+'windows-nonascii-filename' => 'Wiki hii haiwezi kutumia majina ya mafaili yenye herufi maalumu.',
 'fileexists' => "Faili lenye jina hili lipo tayari, tafadhali tazama '''<tt>[[:$1]]</tt>''' ikiwa una mashaka kuhusu kulibadilisha.
 [[$1|thumb]]",
 'filepageexists' => "Ukurasa wa maelezo kwa ajili ya faili hili tayari umeshaanzishwa katika '''<tt>[[:$1]]</tt>''', lakini bado hakuna faili lenye jina hili kwa sasa.
@@ -1515,7 +1515,7 @@ Tafadhali utazame kipimo cha file_uploads.',
 'uploadvirus' => 'Faili lina kirusi!
 Maelezo mengine: $1',
 'uploadjava' => 'Faili ZIP hili lina faili Java .class humo ndani.
-Hairuhusiki kupakia mafaili ya Java, kwa sababu yanawezesha kuambaa vizuio vya usalama.',
+Hairuhusiki kupakia mafaili ya Java, kwa sababu yanawezesha kusababisha vizuio vya usalama kuzungukwa.',
 'upload-source' => 'Faili la chanzo',
 'sourcefilename' => 'Jina la faili la chanzo:',
 'sourceurl' => 'URL ya chanzo:',
@@ -1596,8 +1596,7 @@ Unaweza kujaribu wakati tovuti haina kazi nyingi.',
 
 # Special:ListFiles
 'listfiles-summary' => 'Ukurasa huu maalum unaonyesha mafaili yote yaliyopakiwa.
-Kwa kawaida mafaili ya mwisho kupakiwa yanaonekana juu kabisa ya orodha.
-Ukibofya kichwa cha safu mtindo wa kupanga orodha utabadilika.',
+Ikichujwa na mtumiaji, toleo la mafaili pekee ambayo mtumiaji ameyapakia hivi karibuni ndiyo yatakayoonekana.',
 'listfiles_search_for' => 'Tafuta jina la faili:',
 'imgfile' => 'faili',
 'listfiles' => 'Orodha ya mafaili',
@@ -1790,7 +1789,7 @@ Sasa unaelekeza kwa [[$2]].',
 'deadendpagestext' => 'Kurasa zifuatazo haziungana na kurasa zingine katika {{SITENAME}}.',
 'protectedpages' => 'Kurasa zinazolindwa',
 'protectedpages-indef' => 'Ulinzi kwa muda usiojulikana tu',
-'protectedpages-cascade' => 'zinazokuwa na ulindaji kwa kurasa chini zake tu',
+'protectedpages-cascade' => 'Mpangilio wa ulindaji tu',
 'protectedpagestext' => 'Kurasa zifuatazo zinalindwa zisisogezwe wala kuhaririwa',
 'protectedpagesempty' => 'Hakuna kurasa zinazolindwa kwa sasa kwa vigezo hivi.',
 'protectedtitles' => 'Majina yanayozuluiwa',
@@ -1815,11 +1814,11 @@ Sasa unaelekeza kwa [[$2]].',
 'booksources' => 'Vyanzo vya vitabu',
 'booksources-search-legend' => 'Tafuta mahali panopopatikana kitabu',
 'booksources-go' => 'Nenda',
-'booksources-invalid-isbn' => 'ISBN iliyoandikwa haonekani kuwa halali; hakikisha kwamba ni sawa na ISBN ya asili.',
+'booksources-invalid-isbn' => 'ISBN iliyoandikwa haonekani kuwa halali; hakikisha kwamba ni sawa na chanzo halisi cha ISBN.',
 
 # Special:Log
-'specialloguserlabel' => 'Mtumiaji:',
-'speciallogtitlelabel' => 'Cheo:',
+'specialloguserlabel' => 'Mtendaji:',
+'speciallogtitlelabel' => 'Kusudio (jina la ukurasa au mtumiaji):',
 'log' => 'Kumbukumbu',
 'all-logs-page' => 'Kumbukumbu zote zilizo wazi',
 'alllogstext' => 'Hapa panaonyeshwa kumbukumbu zote za {{SITENAME}} kwa pamoja.
@@ -1865,11 +1864,11 @@ Tazama pia [[Special:WantedCategories|jamii zinazohitajika]].',
 'linksearch-pat' => 'Herufi zitakazotafutwa:',
 'linksearch-ns' => 'Eneo la wiki:',
 'linksearch-ok' => 'Tafuta',
-'linksearch-text' => 'Alama maalum za kutafuta kama "*.wikipedia.org" zinaweza kutumika.<br />
-Kikoa cha kiwango cha juu inahitajika, kwa mfano "*.org".<br />
+'linksearch-text' => 'Alama maalumu za kutafuta kama vile "*.wikipedia.org" zinaweza kutumika.<br />
+Inahitajika angalau kikoa cha kiwango cha juu, kwa mfano "*.org".<br />
 Itifaki zinazoungwa mkono: <tt>$1</tt> (usiongeza hizi unapotafuta).',
 'linksearch-line' => '$2 umeungwa kutoka $1',
-'linksearch-error' => 'Alama maalum za kutafuta zinaweza kutumika mwanzoni mwa URL tu.',
+'linksearch-error' => 'Alama maalumu zinaweza kuonekana mwanzoni mwa URL tu.',
 
 # Special:ListUsers
 'listusersfrom' => 'Onyesha watumiaji kuanzia:',
@@ -1966,7 +1965,7 @@ Ukitaka kufuta ukurasa huo kutoka maangalizi yako baadaye, bonyeza \"Acha kufuat
 'watchnochange' => 'Hakuna kitu kati ya maangalizi yako kilichohaririwa katika kipindi kilichotajwa.',
 'watchlist-details' => 'Unafuatilia {{PLURAL:$1|ukurasa $1|kurasa $1}} bila kuzingatia kurasa za majadiliano.',
 'wlheader-enotif' => '* Huduma ya kuarifu kwa barua pepe imewezeshwa.',
-'wlheader-showupdated' => "* Kurasa zilizobadilika tangu ulipoziona mwishoni zinaonyeshwa '''kooze'''",
+'wlheader-showupdated' => "* Kurasa zilizobadilika tangu ulivyotembelea mara ya mwisho zinaonyeshwa katika hali ya '''kukooza'''",
 'watchmethod-recent' => 'kupitia madabiliko ya karibuni ili kupata kurasa za maangalizi',
 'watchmethod-list' => 'kupitia kurasa za maangalizi ili kupata madabiliko ya karibuni',
 'watchlistcontains' => 'Orodha ya maangalizi yako ina {{PLURAL:$1|kitu|vitu}} $1.',
index 7da09d3..8bc74a7 100644 (file)
@@ -424,8 +424,8 @@ Zapytańy: $2',
 'viewsource-title' => 'Uobocz zdrzůdło lo $1',
 'actionthrottled' => 'Akcyjo wstřimano',
 'actionthrottledtext' => 'Mechańizm uobrůny před spamym uograńičo ličba wykonań tyj čynnośći we jednostce času. Průbowoužeś go uocygańić. Proša, sprůbuj na nowo za pora minut.',
-'protectedpagetext' => 'Ta zajta je zawarto před sprowjańym.',
-'viewsourcetext' => 'We tekst zdřůduowy tyj zajty možno dali filować, idźe go tyž kopjować.',
+'protectedpagetext' => 'Ta zajta je zawarto przed sprowjańym.',
+'viewsourcetext' => 'We tekst zdrzůduowy tyj zajty możno dali filować, idźe go tyż kopjyrować.',
 'viewyourtext' => 'We tekst zdrzůduowy tyj zajty możno dali filować, idźe go tyż kopjować.',
 'protectedinterface' => 'Na tyj zajće znojduje śe tekst interfejsu uoprogramowańo, bestož uůna je zawarto uod sprowjańo.',
 'editinginterface' => "''''Dej pozůr:''' Sprowjosz zajta, na keryj je tekst interfejsu uoprogramowańo. Pomjyńyńa na tyj zajće zmjyńům wyglůnd interfejsu lo inkšych užytkowńikůw.",
@@ -514,8 +514,8 @@ Jak ktůś inkszy chćoł nowe hasło abo jak Ci śe przipůmńouo stare a ńy c
 'passwordsent' => 'Nowe hasuo pošuo na e-brifa uod užytkowńika "$1".
 Zalůguj śe zaś jak dostańyš tygo brifa.',
 'blocked-mailpassword' => 'Twůj adres IP zostou zawarty a ńy možeš užywać funkcyje odzyskiwańo hasua skuli možliwośći jeji nadužywańo.',
-'eauthentsent' => 'Potwjerdzeńy zostouo wysuane na e-brifa.
-Jak bydźeš chćou, coby wysyuouo Ći e-brify, pjyrwyj go přečytej. Bydźeš tam mjou instrukcyjo co moš zrobić, coby pokozać, aže tyn adres je Twůj.',
+'eauthentsent' => 'Potwjerdzeńy zostoło posłane na e-brifa.
+Jak bydźesz chćoł, coby wysyłouo Ći e-brify, pjyrwyj go przeczytej. Bydźesz tam mjoł instrukcyjo co mosz zrobić, coby pokozać, aże tyn ausdruk je Twůj.',
 'throttled-mailpassword' => 'Připůmńyńy hasua bůuo juž wysuane bez {{PLURAL:$1|uostatńo godźina|uostatńe $1 godźin}}.
 Coby powstřimać nadužyća, možliwość wysyuańa připůmńeń naštalowano na jydne bez {{PLURAL:$1|godźina|$1 godźiny}}.',
 'mailerror' => 'Při wysyuańu e-brifa zdořiu śe feler: $1',
@@ -542,7 +542,7 @@ Coby powstřimać nadužyća, možliwość wysyuańa připůmńeń naštalowano
 'user-mail-no-addy' => 'Próba wysłania e‐maila bez adresu odbiorcy',
 
 # Change password dialog
-'resetpass' => 'Zmjyń hasło',
+'resetpass' => 'Pomjyńaj hasło',
 'resetpass_announce' => 'Zalůgowoužeś śe s tymčasowym kodym uotřimanym bez e-brif. Coby zakůńčyć proces logůwańo muśiš naštalować nowe hasuo:',
 'resetpass_header' => 'Zmjyń hasło lů swojygo kůnta',
 'oldpassword' => 'Stare hasło',
@@ -591,7 +591,7 @@ Tymczasowe hasło: $2',
 'changeemail-header' => 'Pomjyno ausduku e-mail',
 'changeemail-text' => 'Wypełnij formularz, podej nowy ausdruk a hasło.',
 'changeemail-no-info' => 'Muśysz być zalogowany, coby uzyskać bezpostrzedńi dostymp do tyj zajty.',
-'changeemail-oldemail' => 'Łobecny ausdruk:',
+'changeemail-oldemail' => 'Uobecny ausdruk:',
 'changeemail-newemail' => 'Nowy adresu e-brif',
 'changeemail-none' => 'podstawowo',
 'changeemail-submit' => 'Zapisz nowy',
@@ -724,7 +724,7 @@ By wćepać swoje pomjyńańo muśiš pomjyńać tekst w polu na wjyrchu.
 'copyrightwarning2' => "Pamjyntej uo tym, aže couki wkuod do {{GRAMMAR:MS.lp|{{SITENAME}}}} može być sprowjany, pomjyńany abo wyćepany bez inkšych užytkownikůw. Jak ńy chceš, coby koždy můg go zmjyńać i dali rozpowšychńać bez uograničyń, ńy wćepuj go sam.<br />
 Škryflajůnc sam tukej pośwjadčoš tyž, co te pisańy je twoje wuasne, abo žeś go wźůn(a) s matyrjouůw kere sům na public domain, abo kůmpatybilne (kuknij tyž: $1).
 '''PROŠA ŃY WĆEPYWAĆ SAM MATYRJOUŮW KERE SŮM CHRŮŃONE PRAWYM AUTORSKIM BEZ DOZWOLEŃO WUAŚĆIĆELA!'''",
-'longpageerror' => "'''Feler: Tekst kery żeś sam wćepywoł mo $1 kilobajtůw. Maksymalno dugość tekstu ńy może być wjynkszo kej $2 kilobajtůw. Twůj tekst ńy bydźe sam naszkryflany.'''",
+'longpageerror' => "''Feler: Tekst kery żeś sam wćepywoł mo {{PLURAL:$1|jedyn kilobajt|$1 kilobajtůw}}. Maksymalno dugość tekstu ńy może być srogszo kej {{PLURAL:$2|jedyn kilobajt|$2 kilobajtůw}}. Twůj tekst ńy bydźe sam naszkryflany.'''",
 'readonlywarning' => "'''Dej pozůr: Baza danych zostoua filowo zawarto skuli potřeb admińistracyjnych. Bestůž ńy do śe terozki naškryflać Twojich pomjyńań. Radzymy přećepać nowy tekst kajś do plika tekstowego (wytnij/wklej) a wćepać sam zaś po uodymkńyńću bazy.'''
 
 Admińistrator kery zawar baza dou take wyjaśńyńe: $1",
@@ -1001,7 +1001,7 @@ $1',
 # Preferences page
 'preferences' => 'Preferyncyje',
 'mypreferences' => 'Moje preferyncyje',
-'prefs-edits' => 'Ličba sprowjyń:',
+'prefs-edits' => 'Liczba sprowjyń:',
 'prefsnologin' => 'Ńy ježeś zalůgowany',
 'prefsnologintext' => 'Muśiš śe <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} zalůgować]</span> coby štalować swoje preferyncyje.',
 'changepassword' => 'Zmjana hasua',
@@ -1026,7 +1026,7 @@ $1',
 'prefs-setemail' => 'Nastow e-brif',
 'prefs-email' => 'E-brif',
 'prefs-rendering' => 'Wyglůnd',
-'saveprefs' => 'Naškryflej',
+'saveprefs' => 'Spamjyntej',
 'resetprefs' => 'Preferencyje důmyślne',
 'restoreprefs' => 'Wćep wszyjskie důmyślne preferencyje',
 'prefs-editing' => 'Sprowjańy',
@@ -1068,7 +1068,7 @@ $1',
 'youremail' => 'E-brif:',
 'username' => 'Mjano użytkowńika:',
 'uid' => 'ID užytkowńika:',
-'prefs-memberingroups' => 'Naležy do {{PLURAL:$1|grupy|grup:}}',
+'prefs-memberingroups' => 'Należy do {{PLURAL:$1|grupy|grup:}}',
 'prefs-registration' => 'Czas twůrzyńa kůnta:',
 'yourrealname' => 'Prawdźiwe mjano',
 'yourlanguage' => 'Godka interfejsu',
@@ -1080,10 +1080,11 @@ $1',
 'gender-male' => 'chop',
 'gender-female' => 'baba',
 'email' => 'E-brif',
-'prefs-help-realname' => '* Mjano a nazwisko (uopcjůnalÅ\84y): jak Å¾eÅ\9b zdecydowou aže je podoÅ¡, bydům užyte, coby Twoja robota mjoua atrybucyjo.',
+'prefs-help-realname' => '* Mjano a nazwisko (uopcjůnalÅ\84y): jak Å¼eÅ\9b zdecydowoÅ\82 aże je podosz, bydům użyte, coby Twoja robota mjoÅ\82a atrybucyjo.',
 'prefs-help-email' => 'Ukozańy e-brifowygo adresu ńy je powinne, nale nutne, coby resetować ausdruk, eli zapomńisz.',
 'prefs-help-email-others' => 'Mogesz tyż uůmożnić inkszym używoczům posłać ci e-brif bez twojo zajta używocza abo zajta dyskusyje. Twůj e-brifowy adres śe ńy ukoże.',
 'prefs-help-email-required' => 'Wymogany je adres e-brifa.',
+'prefs-diffs' => 'Diffy',
 
 # User rights
 'userrights' => 'Zařůndzańy prowami užytkowńikůw',
@@ -1102,29 +1103,29 @@ $1',
 'userrights-no-interwiki' => 'Ńy moš dostympu do sprowjańo uprawńyń.',
 'userrights-nodatabase' => 'Baza danych $1 ńy istńije abo ńy je lokalno.',
 'userrights-nologin' => 'Muśiš [[Special:UserLogin|zalůgować śe]] na kůnto admińistratora, coby nadować uprawńyńo užytkowńikům.',
-'userrights-notallowed' => 'Ńy moš dostympu do nadawańo uprawńyń užytkowńikům.',
+'userrights-notallowed' => 'Ńy mosz dostympu do nadawańo uprawńyń używaczom.',
 'userrights-changeable-col' => 'Grupy, kere možeš wybrać',
 'userrights-unchangeable-col' => 'Grupy, kerych ńy možeš wybrać',
 
 # Groups
 'group' => 'Grupa:',
-'group-user' => 'UžytkowÅ\84iki',
-'group-autoconfirmed' => 'Autůmatyčńy zatwjerdzůne užytkowńiki',
+'group-user' => 'Używacze',
+'group-autoconfirmed' => 'Autůmatyczńy zatwjerdzůne używacze',
 'group-bot' => 'Boty',
 'group-sysop' => 'Admińi',
 'group-bureaucrat' => 'Bjurokraty',
 'group-suppress' => 'Rewizoře',
 'group-all' => '(wšyjscy)',
 
-'group-user-member' => 'Sprowjorz',
-'group-autoconfirmed-member' => 'Autůmatyčńy zatwjerdzůny užytkowńik',
-'group-bot-member' => 'Bot',
-'group-sysop-member' => 'Admin',
-'group-bureaucrat-member' => 'Bjurokrata',
-'group-suppress-member' => 'Rewizůr',
+'group-user-member' => '{{GENDER:$1|używacz}}',
+'group-autoconfirmed-member' => 'Autůmatyczńy zatwjerdzůny używacz',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|admin}}',
+'group-bureaucrat-member' => '{{GENDER:$1|bjurokrata}}',
+'group-suppress-member' => '{{GENDER:$1|rewizůr}}',
 
 'grouppage-user' => '{{ns:project}}:Sprowjorze',
-'grouppage-autoconfirmed' => '{{ns:project}}:Autůmatyčńy zatwjerdzyńi užytkowńiki',
+'grouppage-autoconfirmed' => '{{ns:project}}:Autůmatyczńy zatwjerdzyńi używacze',
 'grouppage-bot' => '{{ns:project}}:Boty',
 'grouppage-sysop' => '{{ns:project}}:Admińistratory',
 'grouppage-bureaucrat' => '{{ns:project}}:Bjurokraty',
@@ -1140,6 +1141,7 @@ $1',
 'right-move' => 'Přećepane zajty',
 'right-move-subpages' => 'Přećep zajty wroz s jejich podzajtůma',
 'right-move-rootuserpages' => 'Překludzańy zajtůw uod užytkowńikůw',
+'right-movefile' => 'Przećepańe plikůw',
 'right-suppressredirect' => 'Ńy twůrz przekerowańo ze starygo mjana jak przećepujesz zajta',
 'right-upload' => 'Wćepane pliki',
 'right-reupload' => 'Nadpisuj pliki kere sam juž sům wćepane',
@@ -1201,6 +1203,7 @@ $1',
 'action-move' => 'přećepańe tyj zajty',
 'action-move-subpages' => 'přećepańo tyj zajty uoroz s jeij podzajtůma',
 'action-move-rootuserpages' => 'Překludzańy zajtůw uod užytkowńikůw (nale bes jeich podzajtůw)',
+'action-movefile' => 'przećepańe tygo plika',
 'action-upload' => 'wćepńyńćo tygo plika',
 'action-reupload' => 'nadpisańo tygo plika',
 'action-reupload-shared' => 'nadpisańo tygo plika we wspůlnym repozytorjům',
@@ -1229,7 +1232,7 @@ $1',
 'nchanges' => '$1 {{PLURAL:$1|pomjyńańe|pomjyńańa|pomjyńań}}',
 'recentchanges' => 'Ńydowno půmjyńane',
 'recentchanges-legend' => 'Uopcyje ńydowno půmjyńanych',
-'recentchanges-summary' => 'Ta zajta předstawjo historyjo uostatńich půmjyńań na tyj wiki',
+'recentchanges-summary' => 'Ta zajta ukozuje gyszichta uostatńich půmjyńań na tyj wiki.',
 'recentchanges-feed-description' => 'Dowej pozůr na půmjyńane na uostatku na tyj wiki.',
 'recentchanges-label-newpage' => 'Tym sprowjyńym stworzůno nowa zajta',
 'recentchanges-label-minor' => 'To je ńywjelge sprowjyńy',
@@ -1309,6 +1312,9 @@ Přelyź na zajta [[Special:NewFiles|galeryje nowych plikůw]], coby uobejzdře
 'filetype-unwanted-type' => "'''\".\$1\"''' ńy je zalecanym typym plika. Preferowane sům pliki we {{PLURAL:\$3|formaće|formatach}} \$2.",
 'filetype-banned-type' => "'''\".\$1\"''' je ńydozwolůnym typym plika. Dopuščalne sům pliki we {{PLURAL:\$3|formaće|formatach}} \$2.",
 'filetype-missing' => 'Plik ńy mo rozšyřyńo (np. ".jpg").',
+'empty-file' => 'Plik kery wćepałżeś je pusty.',
+'file-too-large' => 'Plik kery wćepałżeś je za srogi.',
+'filename-tooshort' => 'Mjano plika je za krůtkje.',
 'large-file' => 'Zaleco śe coby rozmjar plika ńy bůu wjynkšy jak $1 bajtůw. Tyn plik mo rozmjar $2 bajtůw.',
 'largefileserver' => 'Plik je wjynkšy ńiž maksymalny dozwolůny rozmjar.',
 'emptyfile' => 'Wćepywany plik cheba je pusty. Može to być bez tůž, co žeś wklepou zuo buchštaba w jygo mjańe. Sprowdź, čy mjano kere žeś wklepou je poprawne.',
@@ -1331,13 +1337,14 @@ Idź nazod i wćepej tyn plik pod inkšym mjanym. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Tyn plik je kopjům {{PLURAL:$1|plika|nastypujůncych plikůw:}}',
 'file-deleted-duplicate' => 'Identyczny plik jak tyn plik ([[:$1]]) zostoł wyćepany. Sprowdź historyja wyćepań tamtygo plika ńim wćepńesz go nazod.',
 'uploadwarning' => 'Uostřežyńe uo wćepywańu',
-'savefile' => 'Naškryflej plik',
+'savefile' => 'Spamjyntej plik',
 'uploadedimage' => 'wćepano "[[$1]]"',
-'overwroteimage' => 'wćepano nowšo wersyjo "[[$1]]"',
+'overwroteimage' => 'wćepano nowszo wersyjo "[[$1]]"',
 'uploaddisabled' => 'Wćepywanie sam plikůw je zawarte',
 'uploaddisabledtext' => 'Wćepywańe plikůw je zawarte.',
 'uploadscripted' => 'Tyn plik zawjyro kod HTML abo skrypt kery može zostać felerńe zinterpretowany bez přyglůndarka internetowo.',
 'uploadvirus' => 'W tym pliku je wirus! Ščygůuy: $1',
+'upload-source' => 'Plik zdrzůdłowy',
 'sourcefilename' => 'Mjano oryginalne:',
 'destfilename' => 'Mjano docylowe:',
 'upload-maxfilesize' => 'Maksymalny rozmior plika: $1',
@@ -1429,9 +1436,9 @@ Niżyj sům informacyje ze [$2 zajty popisu] tygo pliku.',
 'filedelete-nofile-old' => "Ńy ma sam zarchiwizowanyj wersje '''$1''' o atrybutach jake žeś podou.",
 'filedelete-otherreason' => 'Inkšy powůd:',
 'filedelete-reason-otherlist' => 'Inkszy powůd',
-'filedelete-reason-dropdown' => '* Nojčynstše powody wyćepańa
-** Narušyńy praw autorskych
-** Kopja plika kery juž sam jest',
+'filedelete-reason-dropdown' => '* Nojczynstsze powody wyćepańa
+** Naruszyńy praw autorskych
+** Kopja plika kery już sam jest',
 'filedelete-edit-reasonlist' => 'Sprowjańe powodůw wyćepańo zajty',
 
 # MIME search
@@ -1570,7 +1577,7 @@ Zajta uznawano je za ujydnoznačńajůnco kej zawiyro šablůn uokreślůny we [
 'specialloguserlabel' => 'Užytkowńik:',
 'speciallogtitlelabel' => 'Titel:',
 'log' => 'Register dźołano',
-'all-logs-page' => 'Wšyjstkie uoperacyje',
+'all-logs-page' => 'Wszyjstke uoperacyje',
 'alllogstext' => 'Wspůlny rejer wszyjstkych typůw uoperacyji do {{SITENAME}}.
 Możesz zawyńźić liczba wyńikůw wybjerajůnc typ rejeru, mjano użytkowńika abo titel zajty (wjelge a mołe buchsztaby majům znoczyńy).',
 'logempty' => 'Ńy ma wpisůw we rejeře',
@@ -1583,15 +1590,16 @@ Możesz zawyńźić liczba wyńikůw wybjerajůnc typ rejeru, mjano użytkowńik
 'prevpage' => 'Popředńo zajta ($1)',
 'allpagesfrom' => 'Zajty začynojůnce śe na:',
 'allpagesto' => 'Zajty uo titlach kere na zadku majům:',
-'allarticles' => 'Wšyskie zajty',
-'allinnamespace' => 'Wšyjstke zajty (we přestřyńi mjan $1)',
-'allnotinnamespace' => 'Wšyjstke zajty (ino bes přestřyńi mjan $1)',
-'allpagesprev' => 'Popředńo',
+'allarticles' => 'Wszyske zajty',
+'allinnamespace' => 'Wszyjstke zajty (we przestrzyńi mjan $1)',
+'allnotinnamespace' => 'Wszyjstke zajty (ino bes przestrzyńi mjan $1)',
+'allpagesprev' => 'Poprzedńo',
 'allpagesnext' => 'Nastympno',
 'allpagessubmit' => 'Ukoż',
-'allpagesprefix' => 'Pokož artikle s prefiksym:',
-'allpagesbadtitle' => 'Podane mjano je felerne, zawjera prefiks mjyndzyprojektowy abo mjyndzyjynzykowy. Može uůne tyž zawjerać jako buchštaba abo inkše znaki, kerych ńy wolno užywać we titlach.',
-'allpages-bad-ns' => '{{GRAMMAR:MS.lp|{{SITENAME}}}} ńy mo přestřyńi mjan „$1”.',
+'allpagesprefix' => 'Ukoż artikle s prefiksym:',
+'allpagesbadtitle' => 'Podane mjano je felerne, zawjera prefiks mjyndzyprojektowy abo mjyndzyjynzykowy. Może uůne tyż zawjerać jako buchsztaba abo inksze znaki, kerych ńy wolno używać we mjanach.',
+'allpages-bad-ns' => '{{GRAMMAR:MS.lp|{{SITENAME}}}} ńy mo przestrzyńi mjan „$1”.',
+'allpages-hide-redirects' => 'Ukoż pukńyńća',
 
 # Special:Categories
 'categories' => 'Kategoryje',
@@ -1621,22 +1629,30 @@ Uobsůgiwane protokoły: <tt>$1</tt>',
 'listusers-submit' => 'Pokož',
 'listusers-noresult' => 'Ńy znejdźůno žodnygo užytkowńika.',
 
+# Special:ActiveUsers
+'activeusers-hidebots' => 'Schrůń boty',
+'activeusers-hidesysops' => 'Schrůń adminy',
+'activeusers-noresult' => 'Ńy sům używacze.',
+
 # Special:Log/newusers
 'newuserlogpage' => 'Nowe użytkowniki',
 'newuserlogpagetext' => 'To je rejer uostatńo utworzůnych kůnt użytkowńikůw',
 
 # Special:ListGroupRights
-'listgrouprights' => 'UprawÅ\84\84o grup užytkowńikůw',
+'listgrouprights' => 'UprawÅ\84\84o grup użytkowńikůw',
 'listgrouprights-summary' => 'Půńiży znojdowo śe spis grup użytkowńikůw zdefińjowanych na tyj wiki, s wyszczygůlńyńym przidźelůnych im prow dostympu.
 Sprowdź zajta [[{{MediaWiki:Listgrouprights-helppage}}|s dodatkowymi informacjami]] uo uprowńyńach użytkowńikůw.',
+'listgrouprights-key' => '* <span class="listgrouprights-granted">Dane uprawńyńy</span>
+* <span class="listgrouprights-revoked">Uodebrane uprawńyńy</span>',
 'listgrouprights-group' => 'Grupa',
 'listgrouprights-rights' => 'Uprawńyńo',
-'listgrouprights-helppage' => 'Help:UprawÅ\84\84o grup užytkowńikůw',
-'listgrouprights-members' => '(lista čuůnkůw grupy)',
+'listgrouprights-helppage' => 'Help:UprawÅ\84\84o grup użytkowńikůw',
+'listgrouprights-members' => '(listo człůnkůw grupy)',
 'listgrouprights-addgroup' => 'Idźe dodać do {{PLURAL:$2|grupy|grup}}: $1',
 'listgrouprights-removegroup' => 'Idźe wyćepać s {{PLURAL:$2|grupy|grup}}: $1',
 'listgrouprights-addgroup-all' => 'Idźe dodać do kożdyj grupy',
 'listgrouprights-removegroup-all' => 'Idźe wyćepać s wszyjstkich grup',
+'listgrouprights-addgroup-self' => 'Je mogebny dać swe konto do {{PLURAL:$2|grupy|grup:}} $1',
 
 # E-mail user
 'mailnologin' => 'Brak adresu',
@@ -1646,9 +1662,15 @@ Sprowdź zajta [[{{MediaWiki:Listgrouprights-helppage}}|s dodatkowymi informacja
 'emailpagetext' => 'Możesz użyć půńiższygo formularza, coby wysłać wjadůmość e-brif do tygo użytkowńika.
 Adres e-brifa, kery zostoł bez Ćebje wkludzůny we [[Special:Preferences|Twojich sztalowańach]], pojawi śe we polu „Uod”, bez cůż uodbjorca bydźe můg Ći uodpedźeć.',
 'usermailererror' => 'Moduu uobsůgi počty zwrůćiu feler:',
-'defemailsubject' => 'Wjadůmość uod {{GRAMMAR:D.pl|{{SITENAME}}}}',
+'defemailsubject' => '{{SITENAME}} - e-brif uod używacza "$1"',
+'usermaildisabled' => 'E-brif używacza ńy załůnczony',
 'noemailtitle' => 'Brak adresu e-brif',
-'noemailtext' => 'Tyn užytkowńik ńy podou poprawnygo adresu e-brif, albo zadecydowou, co ńy chce uotřimywać wjadůmośći e-brif uod inkšych užytkowńikůw',
+'noemailtext' => 'Tyn używacz ńy podoł dobrygo e-brifa, abo zadecydowoł, co ńy chce uotrzimywać wjadůmośći e-brif uod inkszych używaczy.',
+'nowikiemailtitle' => 'E-brify ńyzwolone',
+'nowikiemailtext' => 'Tyn sprowjorz ńy chcy e-brifůw uod inkszych używaczy.',
+'emailtarget' => 'Podej adresata',
+'emailusername' => 'Mjano używacza:',
+'emailusernamesubmit' => 'Poślij',
 'email-legend' => 'Wyślij e-brif ku inkszymu użytkowńikowi {{GRAMMAR:MS.lp|{{SITENAME}}}}',
 'emailfrom' => 'Uod:',
 'emailto' => 'Ku:',
@@ -1749,9 +1771,9 @@ Pomoc:
 'deletecomment' => 'Čymu:',
 'deleteotherreason' => 'Inkšy powůd:',
 'deletereasonotherlist' => 'Inkszy powůd',
-'deletereason-dropdown' => '* Nojčynstše přičyny wyćepańa
+'deletereason-dropdown' => '* Nojczynstsze prziczyny wyćepańa
 ** Prośba autora
-** Narušyńy praw autorskych
+** Naruszyńy praw autorskych
 ** Wandalizm',
 'delete-edit-reasonlist' => 'Sprowjańe listy powodůw wyćepańo zajty',
 'delete-toobig' => 'Ta zajta mo fest dugo historyja sprowjyń, wjyncyj jak $1 {{PLURAL:$1|půmjyńańy|půmjyńańo|půmjyńań}}.
@@ -1928,7 +1950,7 @@ $1',
 'nolinkshere' => "Žodno zajta ńy je adrésowana do '''[[:$1]]'''.",
 'nolinkshere-ns' => "Žodno zajta ńy je adresowano do '''[[:$1]]''' we wybrany přestřyni mjan.",
 'isredirect' => 'překerowujůnca zajta',
-'istemplate' => 'douůnčona šablôna',
+'istemplate' => 'dołůnczony muster',
 'isimage' => 'Link do plika',
 'whatlinkshere-prev' => '{{PLURAL:$1|popředńe|popředńe $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|nastympne|nastympne $1}}',
@@ -2097,7 +2119,7 @@ Wybjer inkše mjano.',
 'movepage-page-moved' => 'Zajta $1 uostoła przekludzůno ku $2.',
 'movepage-page-unmoved' => 'Mjana zajty $1 ńy idźe půmjyńić na $2.',
 'movepage-max-pages' => 'Przekludzůnych uostało $1 {{PLURAL:$1|zajta|zajty|zajtůw}}. Wjynkszyj liczby ńy idźe przekludźić automatyczńy.',
-'movelogpage' => 'Přećepńynte',
+'movelogpage' => 'Przećepńynte',
 'movelogpagetext' => 'Uoto lista zajtůw, kere uostatńo zostouy přećepane.',
 'movereason' => 'Čymu:',
 'revertmove' => 'cofej',
@@ -2804,7 +2826,7 @@ Naškryflej sam mjano plika bez prefiksu „{{ns:file}}:”.',
 'specialpages-group-login' => 'Lůgowańy / rejerowańy',
 'specialpages-group-changes' => 'Pomjyńane na uostatku a rejery',
 'specialpages-group-media' => 'Pliki',
-'specialpages-group-users' => 'Užytkowńiki i uprawńyńa',
+'specialpages-group-users' => 'Użytkowńiki i uprawńyńa',
 'specialpages-group-highuse' => 'Zajty čynsto užywane',
 'specialpages-group-pages' => 'Zajty',
 'specialpages-group-pagetools' => 'Nořyńdźa zajtůw',
index 5c6f837..5e00b80 100644 (file)
@@ -86,7 +86,7 @@ $messages = array(
 'tog-hidepatrolled' => 'அண்மைய மாற்றங்களில் பலமுறை பார்வையிட்ட தொகுப்புகளை மறைக்கவும்',
 'tog-newpageshidepatrolled' => 'பலமுறை பார்வையிட்ட பக்கங்களைப் புதியபக்கங்களின் பட்டியலில் காட்டவேண்டாம்.',
 'tog-extendwatchlist' => 'அனைத்து பொருத்தமான மாற்றங்களைக் காட்டுமாறு கவனிப்புப் பட்டியலை விரிவாக்கு',
-'tog-usenewrc' => 'à®®à¯\87à®®à¯\8dபà®\9fà¯\81தà¯\8dதபà¯\8dபà®\9fà¯\8dà®\9f à®\85ணà¯\8dà®®à¯\88ய à®®à®¾à®±à¯\8dà®±à®\99à¯\8dà®\95ளà¯\8d (ஜாவாஸ்கிரிப்ட் தேவை)',
+'tog-usenewrc' => 'à®\85ணà¯\8dà®®à¯\88ய à®®à®¾à®±à¯\8dà®±à®\99à¯\8dà®\95ளà¯\8d à®®à®±à¯\8dà®±à¯\81à®®à¯\8d à®\95வனிபà¯\8dபà¯\81பà¯\8d à®ªà®\9fà¯\8dà®\9fியலà¯\8d à®ªà®\95à¯\8dà®\95தà¯\8dதிலà¯\8d à®®à®¾à®±à¯\8dà®±à®\99à¯\8dà®\95ளà¯\88 à®ªà®\95à¯\8dà®\95தà¯\8dதà¯\88 à®ªà¯\8aà®±à¯\81தà¯\8dதà¯\81 à®\95à¯\81à®´à¯\81வாà®\95à¯\8dà®\95à¯\81 (ஜாவாஸ்கிரிப்ட் தேவை)',
 'tog-numberheadings' => 'தலைப்புகளுக்கு தானியங்கி இலக்கமிடு',
 'tog-showtoolbar' => 'கருவிப் பட்டையைக் காட்டு (ஜாவாஸ்கிரிப்ட் தேவை)',
 'tog-editondblclick' => 'இரட்டைச் சொடுக்கில் பக்கங்களைத் தொகு (ஜாவாஸ்கிரிப்ட் தேவை)',
@@ -698,9 +698,8 @@ $1 பயனரையோ அல்லது வேறு [[{{MediaWiki:Grouppage
 இந்த புதிய கணக்கிற்கான கடவுச்சொல்லை புகுபதிகை செய்தவுடன் மாற்றிக்கொள்ளவும் ''[[Special:ChangePassword|கடவுச்சொல்லை மாற்று]]''.",
 'newarticle' => '(புதிது)',
 'newarticletext' => 'ஒரு இணைப்பினூடாக நீங்கள் வந்துள்ள இப்பக்கம் இன்னும் உருவாக்கப்படவில்லை. பக்கத்தை உருவாக்குவதற்குக் கீழேயுள்ள கட்டத்துள் தட்டச்சிடத் தொடங்குங்கள். (மேலதிக விபரங்களுக்கு [[{{MediaWiki:Helppage}}|உதவிப் பக்கத்தைப்]] பார்க்கவும்). நீங்கள் தவறுதலாக இங்கே வந்திருந்தால், உங்கள் உலாவியின் பின் செல்வதற்கான பொத்தானைச் சொடுக்கவும்.',
-'anontalkpagetext' => "----''தாங்கள், தமிழ் விக்கிப்பீடியாவின் பயனர் கணக்கு உருவாக்காத புதியவராகவோ அல்லது பயனர் கணக்கு உருவாக்கி, புகுபதிகை செய்ய மறந்த நிலையில் இப்பக்கத்திற்கு வந்தவராகவோ இருக்கலாம். தற்போதைய நிலையில் அடையாளம் காணமுடியாதவராக தாங்கள் இருப்பதால், தங்களைத் தாங்கள் உபயோகித்த இணைய விதிமுறை இலக்கம் (I.P.Number)கொண்டு அடையாளப்படுத்த வேண்டியுள்ளது. இந்த நிலையைத் தவிர்க்கத் தமிழ் விக்கிப்பீடியாவில் தங்களுக்கென ஒரு பயனர் பக்கத்தை உருவாக்கிக் கொள்ளலாம். இந்தப் பயனர் பக்கத்தின் உரையாடல் பக்கம் தங்களுடன் தொடர்பு கொள்வதற்கும், கருத்துப் பரிமாற்றத்திற்கும் உதவியாக இருக்கும். 
-
-தங்களுக்காக ஒரு பயனர் பக்கம் உருவாக்கிக் கொள்வது என்பது மிகவும் எளிதானது. [[Special:UserLogin/signup|இங்கு தங்களுக்கான புதிய கணக்கொன்றைத் தொடங்கி]] உங்களுக்கான பயனர் பக்கத்தை உருவாக்கிக் கொள்ள வேண்டுகிறோம், அல்லது [[Special:UserLogin|புகுபதிகை]] செய்திட வேண்டுகிறோம்.''",
+'anontalkpagetext' => "----''இது இன்னும் கணக்கொன்று ஏற்படுத்தாத அல்லது வழமையாக பயனர் கணக்கை பயன்படுத்தாத பயனர்களுக்குரிய கலந்துரையாடல் பக்கமாகும். அதனால் நாங்கள் இவரை அடையாளம் காண்பதற்கு எண்சார்ந்த ஐபி முகவரியைப் பயன்படுத்த வேண்டியதாய் இருக்கின்றது. இவ்வாறான ஐபி முகவரிகள் பல பயனர்களினால் பகிர்ந்துகொள்ளப்படலாம்.
+நீங்கள் ஒரு முகவரியற்ற பயனராயிருந்து, தொடர்பற்ற கருத்துக்கள் உங்களைக் குறித்துச் சொல்லப்பட்டிருப்பதாக நீங்கள் உணர்ந்தால், முகவரியற்ற ஏனைய பயனர்களுடனான குழப்பங்களை எதிர்காலத்தில் தவிர்ப்பதற்கு, தயவுசெய்து [[Special:UserLogin/signup|புதிய கணக்கொன்றை ஏற்படுத்துங்கள்]] அல்லது [[Special:UserLogin|புகுபதிகை]] செய்யுங்கள்.''",
 'noarticletext' => 'இப் பக்கத்தில் தற்பொழுது உள்ளடக்கம் எதுவுமில்லை. நீங்கள் இப்பக்க [[Special:Search/{{PAGENAME}}|தலைப்பை வேறு பக்கங்களில் தேடவோ]] அல்லது [{{fullurl:{{FULLPAGENAME}}|action=edit}} இப்பக்கத்தை தொகுக்கவோ] முடியும்.',
 'noarticletext-nopermission' => 'தற்பொழுது இப்பக்கத்தில் உரை எதுவும் இல்லை.
 நீங்கள் [[Special:Search/{{PAGENAME}}|பக்கத் தலைப்பை வைத்து]] அல்லது மற்ற பக்கங்களில்,
@@ -727,6 +726,7 @@ or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}
 'updated' => '(இற்றைப்படுத்தப்பட்டது)',
 'note' => "'''குறிப்பு:'''",
 'previewnote' => "'''இது ஒரு முன்தோற்றம் மட்டுமே''', உங்கள் மாற்றங்கள் இன்னும் சேமிக்கப்படவில்லை!",
+'continue-editing' => 'தொகுத்தலைத் தொடரவும்',
 'previewconflict' => 'இந்த முன்தோற்றம் உரை தொகுப்புப் பகுதியின் மேற்பகுதியிலுள்ள உரையைப் பிரதிபலிக்கின்றது. நீங்கள் இப்பொழுது சேமித்தால் மேற்படி தோற்றமே கிடைக்கும்.',
 'session_fail_preview' => "'''உங்கள் அமர்வுத் தரவுகள் அழிந்துப்போனமையால் உங்கள் தொகுப்பை செயற்படுத்த முடியவில்லை. அருள் கூர்ந்து மீண்டும் முயலவும். அதுவும் பலனளிக்காவிட்டால் விடுபதிகைச் செய்து மீண்டும் புகுபதிகைச் செய்யவும்'''",
 'session_fail_preview_html' => "'''மன்னிக்கவும்! தங்கள் அமர்வுத் தரவுகள் அழிந்துப்போனமையால் தொகுப்பைச் செயற்படுத்த முடியவில்லை.'''
@@ -995,7 +995,7 @@ $1",
 'mergelogpagetext' => 'பின்வருவது அண்மையில் செய்யப்பட்ட பக்க வரலாறு இணைப்புகளின் பட்டியலாகும்.',
 
 # Diffs
-'history-title' => '"$1" பக்கத்தின் திருத்த வரலாறு',
+'history-title' => 'திருத்த வரலாறு - "$1"',
 'difference-multipage' => 'பக்கங்களுக்கு இடையேயான வேறுபாடு',
 'lineno' => 'வரிசை $1:',
 'compareselectedversions' => 'தெரிவு செய்யப்பட்ட பதிப்புக்களை ஒப்பிடவும்',
@@ -1960,7 +1960,7 @@ $1',
 'mywatchlist' => 'என் கவனிப்புப் பட்டியல்',
 'watchlistfor2' => '$1 பயனரின் ($2)',
 'nowatchlist' => 'உங்களுடைய கவனிப்புப் பட்டியலில் ஒரு விடயமும் இல்லை.',
-'watchlistanontext' => 'à®\89மதà¯\81 à®\95வனிபà¯\8dபà¯\81பà¯\8d à®ªà®\9fà¯\8dà®\9fியலà¯\88 à®ªà®¾à®°à¯\8dà®\95 à®\85லà¯\8dலதà¯\81 à®¤à¯\8aà®\95à¯\81à®\95à¯\8dà®\95 à®\85à®°à¯\81ளà¯\8d à®\95à¯\82à®°à¯\8dநà¯\8dதà¯\81 $1.',
+'watchlistanontext' => 'à®\89à®\99à¯\8dà®\95ளà¯\8d à®\95வனிபà¯\8dபà¯\81பà¯\8d à®ªà®\9fà¯\8dà®\9fியலà¯\88பà¯\8d à®ªà®¾à®°à¯\8dà®\95à¯\8dà®\95 à®\85லà¯\8dலதà¯\81 à®¤à¯\8aà®\95à¯\81à®\95à¯\8dà®\95 à®\85à®°à¯\81ளà¯\8d à®\95à¯\82à®°à¯\8dநà¯\8dதà¯\81 $1 à®\9aà¯\86யà¯\8dயà¯\81à®\99à¯\8dà®\95ளà¯\8d.',
 'watchnologin' => 'புகுபதிகை செய்யப்படவில்லை.',
 'watchnologintext' => 'உங்கள் கவனிப்புப் பட்டியலில் திருத்தம் செய்வதற்கு, நீங்கள்[[Special:UserLogin|புகுபதிகை செய்திருக்கவேண்டும்]].',
 'addwatch' => 'கவனிப்புப் பட்டியலில் சேர்',
@@ -2144,7 +2144,7 @@ $NEWPAGE
 'undelete' => 'நீக்கப்பட்ட பக்கங்களைப் பார்',
 'undeletepage' => 'பார்ப்பதுடன், நீக்கப்பட்ட பக்கங்களை மீட்டெடு',
 'undeletepagetitle' => "'''[[:$1]] பக்கத்துக்கான நீக்கப்பட்ட திருத்தங்கள் கீழே தரப்பட்டுள்ளன'''.",
-'viewdeletedpage' => 'நà¯\80à®\95à¯\8dà®\95à¯\8dà®\95பà¯\8dபà®\9fà¯\8dà®\9f à®ªà®\95à¯\8dà®\95à®\99à¯\8dà®\95ளà¯\88பà¯\8d à®ªà®¾à®°à¯\8d',
+'viewdeletedpage' => 'நீக்கப்பட்ட பக்கங்களைப் பார்',
 'undeletepagetext' => 'பின்வரும் {{PLURAL:$1|பக்கம் நீக்கப்பட்டுவிட்டது எனினும் அது|$1 பக்கங்கள் நீக்கப்பட்டுவிட்டன எனினும் அவை}} காப்பகத்தில் உள்ளதால், மீட்டெடுக்க முடியும். காப்பகம் காலத்துக்குக் காலம் சுத்தப்படுத்தப்படலாம்.',
 'undelete-fieldset-title' => 'மாற்றங்களை பழையபடிக்கு கொண்டுவரவும்',
 'undeleteextrahelp' => "இந்த பக்கத்தின் முழு வரலாற்றை மீட்டமைக்க அனைத்து தேர்வுகளையும் நீக்கி விட்டு '''''{{int:undeletebtn}}''''' இதனை சொடுக்கவும்.
index c084e11..f0c4da6 100644 (file)
@@ -148,17 +148,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Payagan ang mga pagbabagong panseksyon sa pakanang pagpindot ng mga panseksyong pamagat (JavaScript)',
 'tog-showtoc' => 'Ipakita ang talaan ng mga nilalaman (sa mga pahinang may higit sa 3 punong pamagat)',
 'tog-rememberpassword' => 'Tandaan ang paglagda ko sa panghanaphanap na ito (pinakamarami na ang $1 {{PLURAL:$1|araw|mga araw}})',
-'tog-watchcreations' => 'Idagdag ang mga pahinang nilikha ko sa aking tala ng mga binabantayan',
-'tog-watchdefault' => 'Idagdag ang mga pahinang binago ko sa aking tala ng mga binabantayan',
-'tog-watchmoves' => 'Idagdag ang mga pahinang inilipat ko sa aking tala ng mga binabantayan',
-'tog-watchdeletion' => 'Idagdag mga pahinang ibinura ko sa aking tala ng mga binabantayan',
+'tog-watchcreations' => 'Idagdag sa aking tala ng mga binabantayan ang mga pahinang nilikha ko at mga talaksang ikinarga kong paitaas',
+'tog-watchdefault' => 'Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang binago ko',
+'tog-watchmoves' => 'Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang inilipat ko',
+'tog-watchdeletion' => 'Idagdag sa aking tala ng mga binabantayan ang mga pahina at mga talaksang binura ko',
 'tog-minordefault' => 'Markahan ang lahat ng pagbabago bilang maliit nang nakatakda',
 'tog-previewontop' => 'Ipakita ang paunang tingin bago ang kahon ng pagbabago',
 'tog-previewonfirst' => 'Ipakita ang paunang tingin sa unang pagbabago',
 'tog-nocache' => 'Huwag paganahin ang pagtatago ng pahinang pantingintingin',
-'tog-enotifwatchlistpages' => 'Padalhan ako ng e-liham kapag nabago ang isa sa mga pahinang binabantayan ko',
+'tog-enotifwatchlistpages' => 'Padalhan ako ng e-liham kapag nabago ang isa sa pahina o talaksang binabantayan ko',
 'tog-enotifusertalkpages' => 'Padalhan ako ng e-liham kapag binago ang aking pahina ng usapan',
-'tog-enotifminoredits' => 'Padalhan din ako ng e-liham para sa mga maliliit na pagbabago ng mga pahina',
+'tog-enotifminoredits' => 'Padalhan din ako ng e-liham para sa mga maliliit na mga pagbabago ng mga pahina at mga talaksan',
 'tog-enotifrevealaddr' => 'Ipakita ang aking direksiyong e-liham sa loob ng mga e-liham ng pagpapahayag',
 'tog-shownumberswatching' => 'Ipakita ang bilang ng mga nagbabantay na tagagamit',
 'tog-oldsig' => 'Umiiral na lagda:',
@@ -492,6 +492,8 @@ Pakiulat ito sa isang [[Special:ListUsers/sysop|tagapangasiwa]], na ibinibigay a
 'cannotdelete' => 'Hindi mabura ang pahina o talaksang "$1".
 Maaaring ibinura na ito ng iba.',
 'cannotdelete-title' => 'Hindi maibura ang pahinang "$1"',
+'delete-hook-aborted' => 'Pinigil ng sungkit ang pagbura.
+Walang ibinigay na paliwanag.',
 'badtitle' => 'Hindi kanais-nais na pamagat',
 'badtitletext' => 'Ang hiniling na pamagat ng pahina ay hindi katanggap-tanggap, wala, o isang may-maling kawing na pamagat na pangugnayang-wika (interwika) o pangugnayang wiki (interwiki).
 Maaaring naglalaman ito ng isa o higit pang mga panitik (karakter) na hindi maaaring gamitin para sa mga pamagat.',
@@ -528,6 +530,8 @@ Ang ibinigay na dahilan ay ''$2''.",
 Ang tagapangasiwang nagkandado nito ay nag-alok ng ganitong paliwanag: "$3".',
 'invalidtitle-knownnamespace' => 'Hindi katanggap-tanggap na pamagat na may puwang na pampangalang "$2" at tekstong "$3"',
 'invalidtitle-unknownnamespace' => 'Hindi katanggap-tanggap na pamagat na mayroong hindi nalalamang bilang na pampuwang ng pangalan na $1 at tekstong "$2"',
+'exception-nologin' => 'Hindi nakalagda',
+'exception-nologin-text' => 'Ang pahina o kilos na ito ay nangangailangan ng paglagda mo sa wiking ito.',
 
 # Virus scanner
 'virus-badscanner' => "Masamang kompigurasyon: hindi kilalang tagahagilap (iskaner) ng birus: ''$1''",
@@ -894,7 +898,7 @@ Ang pinakahuling entrada sa talaan ay ibinigay sa baba para sa inyong pagsasangg
 'nocreatetitle' => 'May hangganan ang paglikha ng pahina',
 'nocreatetext' => 'Naglagay ng hangganan (restriksyon/limitasyon) ang {{SITENAME}} sa kakayahang makalikha ng bagong mga pahina.
 Maaari kang bumalik at magbago ng isang umiiral na pahina, o kaya [[Special:UserLogin|lumagda o lumikha ng kuwenta/akawnt]].',
-'nocreate-loggedin' => 'Walang kang pahintulot para lumikha ng bagong mga pahina.',
+'nocreate-loggedin' => 'Wala kang pahintulot para lumikha ng bagong mga pahina.',
 'sectioneditnotsupported-title' => 'Hindi sinusuportahan ang pagpapatnugot ng seksyon',
 'sectioneditnotsupported-text' => 'Hindi sinusuportahan ang pagpapatnugot ng seksyon sa pahinang ito.',
 'permissionserrors' => 'Mga kamalian sa mga pahintulot',
@@ -2257,10 +2261,10 @@ Tingnan ang [[Special:ProtectedPages|talaan ng pinuprutektahang mga pahina]] par
 'prot_1movedto2' => 'Inilipat ang [[$1]] patungo sa [[$2]]',
 'protect-badnamespace-title' => 'Hindi mapupruteksiyunang puwang ng pangalan',
 'protect-badnamespace-text' => 'Hindi mapupruteksiyunan ang mga pahinang nasa puwang na pampangalang ito.',
-'protect-legend' => 'Pagtibayin/tiyakin ang panananggalang',
+'protect-legend' => 'Tiyakin ang panananggalang',
 'protectcomment' => 'Dahilan:',
 'protectexpiry' => 'Magtatapos sa:',
-'protect_expiry_invalid' => 'Hindi tanggap/hindi tama ang oras ng pagtatapos.',
+'protect_expiry_invalid' => 'Hindi katanggap-tanggap ang oras ng pagtatapos.',
 'protect_expiry_old' => 'Nasa nakaraan ang oras ng pagtatapos.',
 'protect-unchain-permissions' => 'Huwag ikandado ang iba pang mga pagpipilian ng pagprutekta',
 'protect-text' => "Maaari mong tingnan at baguhin dito ang antas ng pananananggalang para sa pahinang '''$1'''.",
@@ -2840,7 +2844,7 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'tooltip-upload' => 'Simulan ang pagkarga',
 'tooltip-rollback' => 'Ibinabalik ng "Pagulungin pabalik sa dati" ang (mga) pagbabago sa pahinang ito patungo sa huling bersyon ng huling tagapagambag sa pamamagitan ng isang pindot lamang.',
 'tooltip-undo' => 'Ibinabalit ng "Ibalik" ang pagbabagong ito at binubuksan ang pahinang gawaan ng pagbabago sa anyong paunang-tingin muna.  Nagpapahintulot na makapagdagdag ng dahilan sa buod.',
-'tooltip-preferences-save' => 'Itakda ang mga kagustuhan',
+'tooltip-preferences-save' => 'Sagipin ang mga nais',
 'tooltip-summary' => 'Magbigay ng maikling buod',
 
 # Stylesheets
@@ -3809,6 +3813,8 @@ O kaya, maaari mong gamitin ang maginhawang pormularyo sa ibaba. Ang iyong pagpu
 'api-error-empty-file' => 'Walang laman ang ipinasa mong talaksan.',
 'api-error-emptypage' => 'Lumilikha ng bago, hindi pinapayagan ang mga pahinang walang laman.',
 'api-error-fetchfileerror' => 'Panloob na kamalian: may naganap na pagkakamali habang kinukuha ang talaksan.',
+'api-error-fileexists-forbidden' => 'Isang talaksan na may pangalang "$1" ang umiiral na, at hindi maaaring patungan ng muling pagsusulat.',
+'api-error-fileexists-shared-forbidden' => 'Isang talaksang may pangalang "$1" ang umiiral na sa loob ng repository ng pinagsasaluhang talaksan, at hindi maaaring patungan ng muling pagsusulat.',
 'api-error-file-too-large' => 'Napakalaki ng talaksang ipinasa mo.',
 'api-error-filename-tooshort' => 'Napakaiksi ng pangalan ng talaksan.',
 'api-error-filetype-banned' => 'Ipinagbabawal ang ganitong uri ng talaksan.',
index 5b7947c..98ff709 100644 (file)
@@ -39,14 +39,14 @@ $messages = array(
 'tog-hideminor' => 'Охоминә дәгишонәдә гәдә дәгишон нишо мәдә.',
 'tog-hidepatrolled' => 'Нујә дәгишон сијоһијәдә дәвинә кардә быә дәгишон нишо мәкә.',
 'tog-newpageshidepatrolled' => 'Нијони огәтеј ноғо доә быә сәһифон бә тожә сәһифон сијоһиәдә',
-'tog-usenewrc' => 'Охоминә дәгишон ән чокә сијоһи око дој (гәрәке JavaScript)',
+'tog-usenewrc' => 'Охоминә дәгишон сәһифәдә ијән ноғо доә сијоһијәдә дәгишон бә дәстон ҹо кардеј (гәрәке JavaScript)',
 'tog-numberheadings' => 'Автоматик башлығон нумрәләмиш быкә',
 'tog-showtoc' => 'Мындәриҹоти сијоһи нишо быдә (3 сәрловһәсә веј быә сәһифон)',
-'tog-watchcreations' => 'Зијод кардеј чымы офәјә быә сәһифон бә ноғо доә сијоһи',
-'tog-watchdefault' => 'Зијод кардеј демы дәгиш кардә быә сәһифон бә ноғо доә сијоһи',
-'tog-watchmoves' => 'Зијод кардеј ном дәгиш кардә быә сәһифон бә ноғо доә сијоһи',
-'tog-watchdeletion' => 'Ð\97иÑ\98од ÐºÐ°Ñ\80деÑ\98 Ñ\81Ó\99һиÑ\84он комон аз рәдд кардәме бә ноғо доә сијоһи',
-'tog-enotifwatchlistpages' => 'Ноғо доә сијоһиәдә кејнә сәһифон дәгиш бәбен бәмы е-номә бывығанд',
+'tog-watchcreations' => 'Ð\97иÑ\98од ÐºÐ°Ñ\80деÑ\98 Ñ\87Ñ\8bмÑ\8b Ð¾Ñ\84Ó\99Ñ\98Ó\99 Ð±Ñ\8bÓ\99 Ñ\81Ó\99һиÑ\84он Ð¸Ñ\98Ó\99н Ñ\84аÑ\98лон Ð±Ó\99 Ð½Ð¾Ò\93о Ð´Ð¾Ó\99 Ñ\81иÑ\98оһи',
+'tog-watchdefault' => 'Ð\97иÑ\98од ÐºÐ°Ñ\80деÑ\98 Ð´ÐµÐ¼Ñ\8b Ð´Ó\99гиÑ\88 ÐºÐ°Ñ\80дÓ\99 Ð±Ñ\8bÓ\99 Ñ\81Ó\99һиÑ\84он Ð¸Ñ\98Ó\99н Ñ\84аÑ\98лон Ð±Ó\99 Ð½Ð¾Ò\93о Ð´Ð¾Ó\99 Ñ\81иÑ\98оһи',
+'tog-watchmoves' => 'Зијод кардеј фајлон ијән ном дәгиш кардә быә сәһифон бә ноғо доә сијоһи',
+'tog-watchdeletion' => 'Ð\97иÑ\98од ÐºÐ°Ñ\80деÑ\98 Ñ\84аÑ\98лон Ð¸Ñ\98Ó\99н Ñ\81Ó\99һиÑ\84он, комон аз рәдд кардәме бә ноғо доә сијоһи',
+'tog-enotifwatchlistpages' => 'Ноғо доә сијоһиәдә кејнә сәһифон ја фајлон дәгиш бәбен бәмы е-номә бывығанд',
 'tog-watchlisthideown' => 'Чымы дәгишон ноғо доә сијһиәдә нијо кардеј',
 'tog-watchlisthidebots' => 'Нијо кардеј ботон дәгишон ноғо доә сијоһиәдә',
 'tog-watchlisthideminor' => 'Нијо кардеј гәдә дәгишон ноғо доә сијоһиәдә',
@@ -479,7 +479,7 @@ $messages = array(
 
 # Preferences page
 'preferences' => 'Чичсә печыније',
-'mypreferences' => 'Ð\9fеÑ\87Ñ\8bниÑ\98е',
+'mypreferences' => 'Ð\9aÑ\83кон',
 'prefsnologin' => 'Ыштәни едаштәнијоне',
 'prefsnologintext' => 'Шымә бәбе <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ыштәни едәштән]</span> бо иштирокәкә пеғәндон дәгиш кардеј.',
 'changepassword' => 'Пароли дәгиш кардеј',
@@ -509,7 +509,7 @@ $messages = array(
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|дәгиши|дәгишон}}',
 'recentchanges' => 'Ән нујә дәгишон',
-'recentchanges-legend' => 'Ó\98н Ð½Ñ\83Ñ\98Ó\99 Ð´Ó\99гиÑ\88он Ð¿ÐµÑ\87Ñ\8bниÑ\98е',
+'recentchanges-legend' => 'Ó\98н Ð½Ñ\83Ñ\98Ó\99 Ð´Ó\99гиÑ\88он ÐºÑ\83кон',
 'recentchanges-summary' => 'Тәмшо быкән бы сәһифәдә че вики охоминә дәгишон нишо доә быән.',
 'recentchanges-feed-description' => 'Ым каналәдә быә охонә дәгишон дығғәтәдә огәт.',
 'recentchanges-label-newpage' => 'Де ым дәгиши тожә сәһифә сохтә бе',
@@ -737,7 +737,7 @@ $messages = array(
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Шымә иштирокәкә сәһифә',
 'tooltip-pt-mytalk' => 'Шымә мызокирон сәһифә',
-'tooltip-pt-preferences' => 'ШÑ\8bмÓ\99 Ð¿ÐµÑ\87Ñ\8bниÑ\98Ó\99Ñ\98оне',
+'tooltip-pt-preferences' => 'ШÑ\8bмÓ\99 ÐºÑ\83кон',
 'tooltip-pt-watchlist' => 'Сәһифон сијоһи, конҹо шымә де дығғәти дијә кардејдәјон бә дәгишон',
 'tooltip-pt-mycontris' => 'Шымә гәнҹон сијоһи',
 'tooltip-pt-login' => 'Ијо бәбе ыштәни ғејд кардовнијеј системәдә, интаси ым һукман ни',
index 0b9588d..5e103d6 100644 (file)
@@ -508,7 +508,7 @@ Ko e ʻuhinga loka ko e $1 ia.",
 
 # Recent changes
 'recentchanges' => 'Ngaahi toki liliu',
-'recentchangestext' => 'Fakatotolo ʻa e ngaahi toki liliu ki he wiki ʻi he pēsí ni.',
+'recentchanges-summary' => 'Fakatotolo ʻa e ngaahi toki liliu ki he wiki ʻi he pēsí ni.',
 'rcnote' => 'ʻOku ʻasi ʻi lalo ʻa e liliu fakamuimui ʻe <strong>$1</strong> lolotonga ʻa e ʻaho fakamuimui ʻe <strong>$2</strong> mei he taimi: $4, $5',
 'rcnotefrom' => "ʻOku ʻasi ʻi lalo ʻa e liliu talu mei '''$2''' (aʻu ki he '''$1''').",
 'rclistfrom' => 'ʻAsi mai ha ngaahi liliu foʻou ʻo kamata mei he $1',
index 62be8db..308fc66 100644 (file)
@@ -1258,6 +1258,7 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 
 # Diffs
 'history-title' => '"$1" sayfasının geçmişi',
+'difference-title' => '"$1" sayfasının sürümleri arasındaki fark',
 'difference-multipage' => '(Sayfalar arasındaki fark)',
 'lineno' => '$1. satır:',
 'compareselectedversions' => 'Seçilen sürümleri karşılaştır',
@@ -2142,8 +2143,9 @@ Ayrıca [[Special:WantedCategories|İstenen kategoriler]]'e bakınız.",
 'linksearch-pat' => 'Motif ara:',
 'linksearch-ns' => 'Ad alanı:',
 'linksearch-ok' => 'Ara',
-'linksearch-text' => '"*.wikipedia.org" gibi jokerler kullanılabilir.<br />
-Desteklenen iletişim kuralları: <tt>$1</tt>',
+'linksearch-text' => '"*.wikipedia.org" gibi jokerler kullanılabilir.
+En az bir üst-seviye alan gerekir, örneğin "*.org".<br />
+Desteklenen iletişim kuralları: <tt>$1</tt> (bunların hiçbirini aramanıza eklemeyin).',
 'linksearch-line' => "$1'e $2'den bağlantı verilmiş",
 'linksearch-error' => 'Jokerler sadece ana makine adının başında görünebilir.',
 
index 6dd36aa..a759d0d 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Tuvinian (Тыва дыл)
+/** Tuvinian (тыва дыл)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 4d1ce94..51e38fd 100644 (file)
@@ -362,17 +362,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Редагувати розділи при клацанні правою кнопкою мишки на заголовку (JavaScript)',
 'tog-showtoc' => 'Показувати зміст (для сторінок з більш ніж трьома заголовками)',
 'tog-rememberpassword' => "Запам'ятати мій обліковий запис для цього браузера (на строк не більше $1 {{PLURAL:$1|дня|днів}})",
-'tog-watchcreations' => 'Додавати створені мною сторінки до мого списку спостереження',
-'tog-watchdefault' => 'Додавати змінені мною сторінки до мого списку спостереження',
-'tog-watchmoves' => 'Додавати перейменовані мною сторінки до мого списку спостереження',
-'tog-watchdeletion' => 'Додавати вилучені мною сторінки до мого списку спостереження',
+'tog-watchcreations' => 'Додавати створені мною сторінки і завантажені мною файли до мого списку спостереження',
+'tog-watchdefault' => 'Додавати змінені мною сторінки та файли до мого списку спостереження',
+'tog-watchmoves' => 'Додавати перейменовані мною сторінки та файли до мого списку спостереження',
+'tog-watchdeletion' => 'Додавати вилучені мною сторінки та файли до мого списку спостереження',
 'tog-minordefault' => 'Спочатку позначати всі зміни незначними',
 'tog-previewontop' => 'Показувати попередній перегляд перед вікном редагування, а не після',
 'tog-previewonfirst' => 'Показувати попередній перегляд під час першого редагування',
 'tog-nocache' => 'Відключити кешування сторінок браузером',
-'tog-enotifwatchlistpages' => 'Повідомляти електронною поштою, коли сторінка з мого списку спостереження змінилася',
+'tog-enotifwatchlistpages' => 'Повідомляти електронною поштою при зміні сторінки або файлу з мого списку спостереження',
 'tog-enotifusertalkpages' => 'Повідомляти електронною поштою про зміну моєї сторінки обговорення',
-'tog-enotifminoredits' => 'Надсилати мені електронного листа навіть при незначних редагуваннях',
+'tog-enotifminoredits' => 'Надсилати мені електронного листа навіть при незначних редагуваннях сторінок та файлів',
 'tog-enotifrevealaddr' => 'Показувати мою поштову адресу в повідомленнях',
 'tog-shownumberswatching' => 'Показувати кількість користувачів, які додали сторінку до свого списку спостереження',
 'tog-oldsig' => 'Існуючий підпис:',
@@ -712,6 +712,8 @@ $1',
 'cannotdelete' => 'Неможливо вилучити сторінку або файл "$1".
 Можливо, її (його) вже вилучив хтось інший.',
 'cannotdelete-title' => 'Не вдається видалити сторінку «$1»',
+'delete-hook-aborted' => 'Вилучення було скасовано процедурою-перехоплювачем. 
+Ніяких поясненень надано не було.',
 'badtitle' => 'Неприпустима назва',
 'badtitletext' => 'Запитана назва сторінки неправильна, порожня, або неправильно зазначена міжмовна чи міжвікі назва.
 Можливо, в назві використовуються недопустимі символи.',
@@ -741,6 +743,7 @@ $1',
 'filereadonlyerror' => "Неможливо змінити файл «$1» тому, що файловий архів «$2» перебуває в режимі «лише для читання».
 Адміністратор, що заблокував його, залишив таке пояснення: «''$3''».",
 'invalidtitle-knownnamespace' => 'Неприйнятна назва у просторі імен «$2» і текстом «$3»',
+'invalidtitle-unknownnamespace' => 'Неправильний заголовок з невідомим номером простору імен ($1) і текстом: «$2»',
 'exception-nologin' => 'Не виконано вхід',
 'exception-nologin-text' => 'Ця сторінка чи дія потребує, щоб Ви ввійшли до цієї Вікі.',
 
@@ -1142,6 +1145,7 @@ $2
 'expansion-depth-exceeded-category' => 'Сторінки, де перевищено глибину розгортання',
 'expansion-depth-exceeded-warning' => 'На сторінці перевищено межу глибини вкладеності',
 'parser-unstrip-loop-warning' => 'Виявлено незакритий тег (такий, як <pre>)',
+'parser-unstrip-recursion-limit' => 'Перевищено межу вкладеної рекурсії ($1) для парсера.',
 
 # "Undo" feature
 'undo-success' => 'Редагування може бути скасовано.
@@ -1320,7 +1324,7 @@ $1",
 
 # Diffs
 'history-title' => '$1: Історія змін',
-'difference-title' => '$1: Відмінності між версіями',
+'difference-title' => 'Відмінності між версіями «$1»',
 'difference-title-multipage' => 'Різниця між сторінками «$1» та «$2»',
 'difference-multipage' => '(Різниця між сторінками)',
 'lineno' => 'Рядок $1:',
@@ -2169,11 +2173,11 @@ $1',
 'wantedfiletext-nocat' => 'Наступні файли використовують, але вони не існують. У цей список можуть помилково потрапити файли, що знаходяться на зовнішніх сховищах. Такі хибні моменти помічаються <del>перекреслюванням</del>.',
 'wantedtemplates' => 'Необхідні шаблони',
 'mostlinked' => 'Сторінки, на які найбільше посилань',
-'mostlinkedcategories' => 'Ð\9aаÑ\82егоÑ\80Ñ\96Ñ\97, Ð½Ð° Ñ\8fкÑ\96 Ð½Ð°Ð¹Ð±Ñ\96лÑ\8cÑ\88е Ð¿Ð¾Ñ\81иланÑ\8c',
+'mostlinkedcategories' => 'Ð\9dайбÑ\96лÑ\8cÑ\88Ñ\96 ÐºÐ°Ñ\82егоÑ\80Ñ\96Ñ\97',
 'mostlinkedtemplates' => 'Найуживаніші шаблони',
 'mostcategories' => 'Статті з найбільшою кількістю категорій',
 'mostimages' => 'Найуживаніші зображення',
-'mostrevisions' => 'СÑ\82аÑ\82Ñ\82Ñ\96 Ð· Ð½Ð°Ð¹Ð±Ñ\96лÑ\8cÑ\88оÑ\8e ÐºÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8e Ñ\80едакÑ\86Ñ\96й',
+'mostrevisions' => 'СÑ\82аÑ\82Ñ\82Ñ\96 Ð· Ð½Ð°Ð¹Ð±Ñ\96лÑ\8cÑ\88оÑ\8e ÐºÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8e Ñ\80едагÑ\83ванÑ\8c',
 'prefixindex' => 'Покажчик за початком назв сторінок',
 'prefixindex-namespace' => 'Усі сторінки з префіксом (простір назв $1)',
 'shortpages' => 'Короткі статті',
@@ -2612,8 +2616,8 @@ $1',
 'contribsub2' => 'Внесок $1 ($2)',
 'nocontribs' => 'Редагувань, що задовольняють заданим умовам не знайдено.',
 'uctop' => ' (остання)',
-'month' => 'Ð\92Ñ\96д Ð¼Ñ\96Ñ\81Ñ\8fÑ\86Ñ\8f (Ñ\96 Ñ\80анÑ\96Ñ\88е):',
-'year' => 'Ð\92Ñ\96д Ñ\80окÑ\83 (Ñ\96 Ñ\80анÑ\96Ñ\88е):',
+'month' => 'Ð\94о Ð¼Ñ\96Ñ\81Ñ\8fÑ\86Ñ\8f (вклÑ\8eÑ\87но):',
+'year' => 'Ð\94о Ñ\80окÑ\83 (вклÑ\8eÑ\87но):',
 
 'sp-contributions-newbies' => 'Показати лише внесок з нових облікових записів',
 'sp-contributions-newbies-sub' => 'Внесок новачків',
@@ -4027,6 +4031,8 @@ MediaWiki поширюється в надії, що вона буде кори
 'version-software' => 'Установлене програмне забезпечення',
 'version-software-product' => 'Продукт',
 'version-software-version' => 'Версія',
+'version-entrypoints' => 'URL-адреса точки входу',
+'version-entrypoints-header-entrypoint' => 'Точка входу',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -4189,6 +4195,8 @@ MediaWiki поширюється в надії, що вона буде кори
 'api-error-empty-file' => 'Файл, який ви надіслали, порожній.',
 'api-error-emptypage' => 'Створення нової порожньої сторінки неприпустиме.',
 'api-error-fetchfileerror' => 'Внутрішня помилка: щось пішло не так під час отримання файлу.',
+'api-error-fileexists-forbidden' => 'Файл з назвою «$1» вже існує і його не можна перезаписати.',
+'api-error-fileexists-shared-forbidden' => 'Файл з назвою «$1» вже існує в сховищі спільних файлів, його не можна перезаписати.',
 'api-error-file-too-large' => 'Файл, який ви надіслали, завеликий.',
 'api-error-filename-tooshort' => 'Назва файлу занадто коротка.',
 'api-error-filetype-banned' => 'Цей тип файлів заборонений.',
index 21ff98b..12d0b5e 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Uzbek (Oʻzbekcha)
+/** Uzbek (oʻzbekcha)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 0ae2302..49dc5d8 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Veps (Vepsän kel’)
+/** Veps (vepsän kel’)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 82292c3..7804bdb 100644 (file)
@@ -309,17 +309,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Cho phép sửa đổi đề mục bằng cách bấm chuột phải trên tên đề mục (JavaScript)',
 'tog-showtoc' => 'Hiển thị mục lục (cho trang có trên 3 đề mục)',
 'tog-rememberpassword' => 'Nhớ thông tin đăng nhập của tôi trong trình duyệt này (cho đến $1 ngày)',
-'tog-watchcreations' => 'Tự động theo dõi trang tôi viết mới',
-'tog-watchdefault' => 'Tự động theo dõi trang tôi sửa',
-'tog-watchmoves' => 'Tự động theo dõi trang tôi di chuyển',
-'tog-watchdeletion' => 'Tự động theo dõi trang tôi xóa',
+'tog-watchcreations' => 'Tự động theo dõi các trang tôi viết mới và các tập tin tôi tải lên',
+'tog-watchdefault' => 'Tự động theo dõi các trang và tập tin tôi sửa',
+'tog-watchmoves' => 'Tự động theo dõi các trang và tập tin tôi di chuyển',
+'tog-watchdeletion' => 'Tự động theo dõi các trang và tập tin tôi xóa',
 'tog-minordefault' => 'Mặc định đánh dấu tất cả sửa đổi của tôi là sửa đổi nhỏ',
 'tog-previewontop' => 'Hiển thị phần xem thử nằm trên hộp sửa đổi',
 'tog-previewonfirst' => 'Hiện xem thử tại lần sửa đầu tiên',
 'tog-nocache' => 'Không lưu trang trong bộ nhớ đệm trình duyệt',
-'tog-enotifwatchlistpages' => 'Gửi thư cho tôi khi có thay đổi tại trang tôi theo dõi',
+'tog-enotifwatchlistpages' => 'Gửi thư cho tôi khi có thay đổi tại trang hoặc tập tin tôi theo dõi',
 'tog-enotifusertalkpages' => 'Gửi thư cho tôi khi có thay đổi tại trang thảo luận của tôi',
-'tog-enotifminoredits' => 'Gửi thư cho tôi cả những thay đổi nhỏ trong trang',
+'tog-enotifminoredits' => 'Gửi thư cho tôi cả những thay đổi nhỏ trong trang và tập tin',
 'tog-enotifrevealaddr' => 'Hiện địa chỉ thư điện tử của tôi trong thư thông báo',
 'tog-shownumberswatching' => 'Hiển thị số người đang xem',
 'tog-oldsig' => 'Chữ ký hiện tại:',
@@ -652,6 +652,8 @@ Xin hãy báo nó cho một [[Special:ListUsers/sysop|bảo quản viên]], tron
 'badarticleerror' => 'Không thể thực hiện được tác vụ như thế tại trang này.',
 'cannotdelete' => 'Không thể xóa trang hay tập tin “$1”. Có thể nó đã bị ai đó xóa rồi.',
 'cannotdelete-title' => 'Không thể xóa trang “$1”',
+'delete-hook-aborted' => 'Một phần bổ trợ phần mềm đã bỏ qua việc xóa này.
+Không có lý do nào được đưa ra.',
 'badtitle' => 'Tựa trang sai',
 'badtitletext' => 'Tựa trang yêu cầu không đúng, rỗng, hoặc là một liên kết ngôn ngữ hoặc liên kết wiki sai. Nó có thể chứa một hoặc nhiều ký tự mà tựa trang không thể sử dụng.',
 'perfcached' => 'Dữ liệu sau được lấy từ bộ nhớ đệm và có thể đã lỗi thời. Tối đa có sẵn {{PLURAL:$1|một kết quả|$1 kết quả}} trong bộ nhớ đệm.',
@@ -4020,6 +4022,8 @@ Nếu không thì bạn có thể điền biểu mẫu đơn giản ở dưới.
 'api-error-empty-file' => 'Bạn đã gửi tập tin rỗng.',
 'api-error-emptypage' => 'Không cho phép tạo mới các trang rỗng.',
 'api-error-fetchfileerror' => 'Lỗi nội bộ: Việc tải tập tin bị thất bại.',
+'api-error-fileexists-forbidden' => 'Một tập tin với tên “$1” đã tồn tại; không thể ghi đè nó.',
+'api-error-fileexists-shared-forbidden' => 'Một tập tin với tên “$1” đã tồn tại ở kho tập tin dùng chung; không thể ghi đè nó.',
 'api-error-file-too-large' => 'Bạn đã gửi tập tin lớn quá hạn.',
 'api-error-filename-tooshort' => 'Tên tập tin ngắn quá.',
 'api-error-filetype-banned' => 'Kiểu tập tin này đã bị cấm.',
index 176c3f1..0185aeb 100644 (file)
@@ -10,6 +10,7 @@
  * @author 2Q
  * @author Andrijko Z.
  * @author Comp1089
+ * @author Paivud
  * @author Trần Nguyễn Minh Huy
  */
 
@@ -17,582 +18,783 @@ $fallback = 'fi';
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'Gạch chân liên kết:',
+'tog-underline' => 'Link underlining',
+
+'underline-always' => 'Alõzii',
+'underline-never' => 'Eb kõzniid',
 
 # Dates
-'january'       => 'janvaari',
-'february'      => 'fevraaľi',
-'march'         => 'martti',
-'april'         => 'aprilli',
-'may_long'      => 'mai',
-'june'          => 'juńi',
-'july'          => 'juľi',
-'august'        => 'augusti',
-'september'     => 'senťaabri',
-'october'       => 'okťaabri',
-'november'      => 'nojaabri',
-'december'      => 'dekaabri',
-'january-gen'   => 'janvaarii',
-'february-gen'  => 'fevraalii',
-'march-gen'     => 'martii',
-'april-gen'     => 'aprillii',
-'may-gen'       => 'maja',
-'june-gen'      => 'junii',
-'july-gen'      => 'juľii',
-'august-gen'    => 'augustii',
+'sunday' => 'Nätilpäivä',
+'monday' => 'Esmezarci',
+'tuesday' => 'Tõizarci',
+'wednesday' => 'Kõlmõzpäivä',
+'thursday' => 'Nelläzpäivä',
+'friday' => 'Viďďezpäivä',
+'saturday' => 'Laukopäivä',
+'sun' => 'Nät',
+'mon' => 'Esm',
+'tue' => 'Tõi',
+'wed' => 'Kõl',
+'thu' => 'Nel',
+'fri' => 'Viď',
+'sat' => 'Lau',
+'january' => 'janvaari',
+'february' => 'fevraaľi',
+'march' => 'martti',
+'april' => 'aprilli',
+'may_long' => 'mai',
+'june' => 'juńi',
+'july' => 'juľi',
+'august' => 'augusti',
+'september' => 'senťaabri',
+'october' => 'okťaabri',
+'november' => 'nojaabri',
+'december' => 'dekaabri',
+'january-gen' => 'janvaarii',
+'february-gen' => 'fevraalii',
+'march-gen' => 'martii',
+'april-gen' => 'aprillii',
+'may-gen' => 'maja',
+'june-gen' => 'junii',
+'july-gen' => 'juľii',
+'august-gen' => 'augustii',
 'september-gen' => 'senťaabrii',
-'october-gen'   => 'okťaabrii',
-'november-gen'  => 'nojaabrii',
-'december-gen'  => 'dekaabrii',
-'jan'           => 'janvaari',
-'feb'           => 'fevraali',
-'mar'           => 'martti',
-'apr'           => 'aprilli',
-'may'           => 'mai',
-'jun'           => 'juni',
-'jul'           => 'juľi',
-'aug'           => 'augusti',
-'sep'           => 'senťaabri',
-'oct'           => 'okťaabri',
-'nov'           => 'nojaabri',
-'dec'           => 'dekaabri',
+'october-gen' => 'okťaabrii',
+'november-gen' => 'nojaabrii',
+'december-gen' => 'dekaabrii',
+'jan' => 'janvaari',
+'feb' => 'fevraali',
+'mar' => 'martti',
+'apr' => 'aprilli',
+'may' => 'mai',
+'jun' => 'juni',
+'jul' => 'juľi',
+'aug' => 'augusti',
+'sep' => 'senťaabri',
+'oct' => 'okťaabri',
+'nov' => 'nojaabri',
+'dec' => 'dekaabri',
 
 # Categories related messages
-'pagecategories'         => '{{PLURAL:$1|Gruppa|Gruppad}}',
-'category_header'        => 'Tšuľľed, kummad õvad gruppaz "$1"',
-'subcategories'          => 'Alagruppad',
-'hidden-categories'      => '{{PLURAL:$1|Salautõttu gruppa|Salautõtud gruppad}}',
-'category-subcat-count'  => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava alagruppa.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 alagruppaa kuuluvad}} sihee gruppaa. Alagruppaďďe tšisla gruppaza on $2.}}',
-'category-article-count' => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava tšültši.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 tšültšiä kuuluvad}} sihee gruppaa. Tšültšije tšisla gruppaza on $2.}}',
+'pagecategories' => '{{PLURAL:$1|Gruppa|Gruppad}}',
+'category_header' => 'Cuľľed, kummad õvad gruppaz "$1"',
+'subcategories' => 'Alagruppad',
+'category-media-header' => 'Mediafailid, kummad õvad gruppaz "$1"',
+'category-empty' => "''Kase gruppa on tühjä.''",
+'hidden-categories' => '{{PLURAL:$1|Salautõttu gruppa|Salautõtud gruppad}}',
+'category-subcat-count' => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava alagruppa.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 alagruppaa kuuluvad}} sihee gruppaa. Alagruppaďďe cisla gruppaza on $2.}}',
+'category-article-count' => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava cülci.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 tšültšiä kuuluvad}} sihee gruppaa. Cülcije cisla gruppaza on $2.}}',
 'listingcontinuesabbrev' => 'ladvaub',
 
-'newwindow'  => '(avaub uuvvõza akkunaza)',
-'cancel'     => 'Otmeńoit',
-'mytalk'     => 'Minu juttu',
+'about' => 'Täätühsed',
+'newwindow' => '(avaub uuvvõza akkunaza)',
+'cancel' => 'Otmeńoit',
+'mypage' => 'Minu cülci',
+'mytalk' => 'Minu juttu',
 'navigation' => 'Valittsõmin',
+'and' => '&#32;ja',
 
 # Cologne Blue skin
 'qbfind' => 'Etsi',
-
-'errorpagetitle'   => 'Vika',
-'returnto'         => 'Mee takaz tšüľľelle $1.',
-'tagline'          => 'Lähe: {{SITENAME}}',
-'help'             => 'Api',
-'search'           => 'Ettsü',
-'searchbutton'     => 'Etsi',
-'searcharticle'    => 'Mee',
-'history'          => 'Tšüľľee istori',
-'history_short'    => 'Istori',
-'printableversion' => 'Petšatoittõva verzija',
-'permalink'        => 'Postojannoi linkki',
-'edit'             => 'Muuttaa',
-'create'           => 'Loo tšültši',
-'editthispage'     => 'Muutu sitä tšültšiä',
-'delete'           => 'Pühi',
-'protect'          => 'Varjaa',
-'protect_change'   => 'muutu',
-'newpage'          => 'Uusi tšültši',
-'talkpage'         => 'Juttu senessä tšüľľessä',
+'qbedit' => 'Muuttaa',
+'qbpageoptions' => 'Kase cülci',
+'qbspecialpages' => 'Osoobenoid cüľľed',
+'faq' => 'FAQ',
+'faqpage' => 'Project:FAQ',
+
+# Vector skin
+'vector-action-addsection' => 'Vassõn teema',
+'vector-action-delete' => 'Pühi',
+'vector-action-move' => 'Liikut',
+'vector-action-protect' => 'Varjaa',
+'vector-view-create' => 'Loo cülci',
+'vector-view-edit' => 'Muuttaa',
+'vector-view-history' => 'Istori',
+'vector-view-view' => 'Lukõa',
+'vector-view-viewsource' => 'Lähtekoodi',
+'actions' => 'Tekod',
+'namespaces' => 'Nimiruumid',
+
+'errorpagetitle' => 'Vika',
+'returnto' => 'Mee takaz cüľľelle $1.',
+'tagline' => 'Lähe: {{SITENAME}}',
+'help' => 'Api',
+'search' => 'Ettsü',
+'searchbutton' => 'Etsi',
+'go' => 'Mee',
+'searcharticle' => 'Mee',
+'history' => 'Cüľľee istori',
+'history_short' => 'Istori',
+'printableversion' => 'Pecatoittõva verzija',
+'permalink' => 'Postojannoi linkki',
+'view' => 'Prestavleńńõd',
+'edit' => 'Muuttaa',
+'create' => 'Loo cülci',
+'editthispage' => 'Muutu sitä cülciä',
+'delete' => 'Pühi',
+'deletethispage' => 'Pühi kase cülci',
+'protect' => 'Varjaa',
+'protect_change' => 'muutu',
+'newpage' => 'Uusi cülci',
+'talkpage' => 'Juttu senessä cüľľessä',
 'talkpagelinktext' => 'Juttu',
-'personaltools'    => 'Õmad tööriisõd',
-'talk'             => 'Juttu',
-'views'            => 'Prestavleńńõd',
-'toolbox'          => 'Tööriisõd',
-'otherlanguages'   => 'Muilla tšeelillä',
-'redirectedfrom'   => '(Mešaitõttu tšüľľeltä $1)',
-'redirectpagesub'  => 'Mešaituztšültši',
-'lastmodifiedat'   => 'Viimõin muutuz: $2 $1',
-'jumpto'           => 'Hüppä:',
+'specialpage' => 'Osoobennoi cülci',
+'personaltools' => 'Õmad tööriisõd',
+'talk' => 'Juttu',
+'views' => 'Prestavleńńõd',
+'toolbox' => 'Tööriisõd',
+'otherlanguages' => 'Muilla ceelillä',
+'redirectedfrom' => '(Mešaitõttu cüľľeltä $1)',
+'redirectpagesub' => 'Mešaituzcülci',
+'lastmodifiedat' => 'Viimõin muutuz: $2 $1',
+'jumpto' => 'Hüppä:',
 'jumptonavigation' => 'valittsõmisiisõ',
-'jumptosearch'     => 'ettsüse',
+'jumptosearch' => 'ettsüse',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
-'aboutsite'            => 'Tääteja {{GRAMMAR:elative|{{SITENAME}}}}',
-'aboutpage'            => 'Project:Täätühsed',
-'copyright'            => 'Sisälto on $1 litsentsii mukka svobodnoi.',
-'copyrightpage'        => '{{ns:project}}:Kopiraitti',
-'disclaimers'          => 'Tšeeltümin vassamizõõ',
-'disclaimerpage'       => 'Project:Tšeeltümin vassamizõõ',
-'edithelp'             => 'Muutuzavid',
-'edithelppage'         => 'Help:Kui muuttaa tšültšiä',
-'helppage'             => 'Help:Sisälto',
-'mainpage'             => 'Esitšültši',
+'aboutsite' => 'Tääteja {{GRAMMAR:elative|{{SITENAME}}}}',
+'aboutpage' => 'Project:Täätühsed',
+'copyright' => 'Sisälto on $1 litsentsii mukka svobodnoi.',
+'copyrightpage' => '{{ns:project}}:Kopiraitti',
+'currentevents' => 'Nücüizõd noovosťi',
+'currentevents-url' => 'Project:Nücüizõd noovosťi',
+'disclaimers' => 'Ceeltümin vassamizõõ',
+'disclaimerpage' => 'Project:Ceeltümin vassamizõõ',
+'edithelp' => 'Muutuzavid',
+'edithelppage' => 'Help:Kui muuttaa cülciä',
+'helppage' => 'Help:Sisälto',
+'mainpage' => 'Esicülci',
 'mainpage-description' => 'Esicülci',
-'privacy'              => 'Salaštrahuituz',
-'privacypage'          => 'Project:Salaštrahuituz',
+'portal' => 'Foorum',
+'portal-url' => 'Project:Foorum',
+'privacy' => 'Salaštrahuituz',
+'privacypage' => 'Project:Salaštrahuituz',
 
-'badaccess' => 'Lupa eeltistü',
+'badaccess' => 'Lupa ceeltistü',
 
-'retrievedfrom'       => 'Jältšinnü adresissa "$1"',
-'youhavenewmessages'  => 'Teill on $1 ($2).',
-'newmessageslink'     => 'Uusiit zapiskoit',
+'ok' => 'OK',
+'retrievedfrom' => 'Jälcinnü adresissa "$1"',
+'youhavenewmessages' => 'Teill on $1 ($2).',
+'newmessageslink' => 'Uusiit zapiskoit',
 'newmessagesdifflink' => 'viimõin muutuz',
-'editsection'         => 'muuttaa',
-'editold'             => 'muuttaa',
-'editlink'            => 'muuttaa',
-'viewsourcelink'      => 'lähtekoodi',
-'editsectionhint'     => 'Muutta alajakkoa $1',
-'toc'                 => 'Sisälto',
-'showtoc'             => 'näüt väľľää',
-'hidetoc'             => 'salauta',
-'site-rss-feed'       => '$1-RSS-söötte',
-'site-atom-feed'      => '$1-Atom-söötte',
-'page-rss-feed'       => '"$1" RSS-söötte',
-'page-atom-feed'      => '"$1" Atom-söötte',
-'red-link-title'      => '$1 (tšültšiä ebõõ)',
+'editsection' => 'muuttaa',
+'editold' => 'muuttaa',
+'viewsourceold' => 'lähtekoodi',
+'editlink' => 'muuttaa',
+'viewsourcelink' => 'lähtekoodi',
+'editsectionhint' => 'Muutta alajakkoa $1',
+'toc' => 'Sisälto',
+'showtoc' => 'näüt väľľää',
+'hidetoc' => 'salauta',
+'site-rss-feed' => '$1-RSS-söötte',
+'site-atom-feed' => '$1-Atom-söötte',
+'page-rss-feed' => '"$1" RSS-söötte',
+'page-atom-feed' => '"$1" Atom-söötte',
+'red-link-title' => '$1 (cülciä ebõõ)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main'     => 'Artikkeli',
-'nstab-user'     => 'Tšäüttijätšültši',
-'nstab-special'  => 'Osoobennoi tšültši',
-'nstab-project'  => 'Projektitšültši',
-'nstab-image'    => 'Faili',
+'nstab-main' => 'Artikkeli',
+'nstab-user' => 'Cäüttijäcülci',
+'nstab-special' => 'Osoobennoi cülci',
+'nstab-project' => 'Projekticülci',
+'nstab-image' => 'Faili',
+'nstab-mediawiki' => 'Ilmottamin',
 'nstab-template' => 'Šablooni',
 'nstab-category' => 'Gruppa',
 
 # General errors
-'missing-article'    => 'Tšüľľee sisältoa eb löütännü täätöbaazassa: $1 $2.
+'error' => 'Vika',
+'missing-article' => 'Cüľľee sisältoa eb löütännü täätöbaazassa: $1 $2.
 
-Ussassi se johtub ustaŕeloi sravńoi- vai istorilinkissä rootšittulõõ tšüľľelee.
+Ussassi se johtub ustaŕeloi sravńoi- vai istorilinkissä roocittulõõ cüľľelee.
 
-Kui tšüsümüssessä ebõõ rootšittu tšültši, võib õlla õlõttõ löütännü ošipkaa sistemalla. Õõ nii üvä ilmuttõma tšüľľee adressia vikii [[Special:ListUsers/sysop|praviťeľalõõ]].',
+Kui cüsümüssessä ebõõ roocittu cülci, võib õlla õlõttõ löütännü ošipkaa sistemalla. Õõ nii üvä ilmuttõma cüľľee adressia vikii [[Special:ListUsers/sysop|praviťeľalõõ]].',
 'missingarticle-rev' => '(verzija: $1)',
-'badtitletext'       => 'Tšüzüttü artikkelizagolofkka õli vilpilliin, tühjä vai väärii linkitettü tšeelijeväliin vai vikiiväliin linkki.',
-'viewsource'         => 'Lähtekoodi',
+'badtitletext' => 'Cüzüttü artikkelizagolofkka õli vilpilliin, tühjä vai väärii linkitettü ceelijeväliin vai vikiiväliin linkki.',
+'viewsource' => 'Lähtekoodi',
 
 # Login and logout pages
-'yourname'                => 'Tšäüttijänimi:',
-'yourpassword'            => 'Salasõna',
-'remembermypassword'      => 'Mäleht minuu (enintään $1 {{PLURAL:$1|päivä|päivää}})',
-'login'                   => 'Tširjut süäme',
-'nav-login-createaccount' => 'Tširjut süäme vai registriiroit tšäüttijässi',
-'userlogin'               => 'Tširjut süäme',
-'logout'                  => 'Tširjut uloz',
-'userlogout'              => 'Tširjut uloz',
-'nologin'                 => "Kui Teille veel ebõõ tšäüttijänimi, '''$1'''.",
-'nologinlink'             => 'võitta loovva luguu',
-'mailmypassword'          => 'Lähet uusi salasõna elektropoštiikaa',
+'yourname' => 'Cäüttijänimi:',
+'yourpassword' => 'Salasõna',
+'remembermypassword' => 'Mäleht minuu (enintään $1 {{PLURAL:$1|päivä|päivää}})',
+'login' => 'Cirjut süäme',
+'nav-login-createaccount' => 'Cirjut süäme vai registriiroit cäüttijässi',
+'userlogin' => 'Cirjut süäme',
+'userloginnocreate' => 'Cirjut süäme',
+'logout' => 'Cirjut uloz',
+'userlogout' => 'Cirjut uloz',
+'nologin' => "Kui Teille veel ebõõ cäüttijänimi, '''$1'''.",
+'nologinlink' => 'võitta loovva luguu',
+'gotaccountlink' => 'Cirjut süäme',
+'createaccountreason' => 'Süü:',
+'mailmypassword' => 'Lähet uusi salasõna elektropoštiikaa',
+'loginlanguagelabel' => 'Ceeli: $1',
+
+# Change password dialog
+'resetpass-submit-cancel' => 'Otmeńoit',
+
+# Special:PasswordReset
+'passwordreset-username' => 'Cäüttijänimi:',
+
+# Special:ChangeEmail
+'changeemail-newemail' => 'Vassõn e-mail:',
+'changeemail-cancel' => 'Otmeńoit',
 
 # Edit page toolbar
-'bold_sample'     => 'Pimmiä teksti',
-'bold_tip'        => 'Pimmiä teksti',
-'italic_sample'   => 'Kursiivoi teksti',
-'italic_tip'      => 'Kursiivi',
-'link_sample'     => 'Linkki',
-'link_tip'        => 'Sisipooliin linkki',
-'extlink_sample'  => 'http://www.example.com linki nimi',
-'extlink_tip'     => 'Eräpooliin linkki (mäleht http:// prefiksi)',
+'bold_sample' => 'Pimmiä teksti',
+'bold_tip' => 'Pimmiä teksti',
+'italic_sample' => 'Kursiivoi teksti',
+'italic_tip' => 'Kursiivi',
+'link_sample' => 'Linkki',
+'link_tip' => 'Sisipooliin linkki',
+'extlink_sample' => 'http://www.example.com linki nimi',
+'extlink_tip' => 'Eräpooliin linkki (mäleht http:// prefiksi)',
 'headline_sample' => 'Zagolofkka-teksti',
-'headline_tip'    => 'Zagolofkka',
-'nowiki_sample'   => 'Lissä formattimatoo teksti tänne',
-'nowiki_tip'      => 'Ignoriiroit viki formatti',
-'image_tip'       => 'Kuva',
-'media_tip'       => 'Faililinkki',
-'sig_tip'         => 'Alatširjutuz aikamerkikaa',
-'hr_tip'          => 'Gorizontalnoi viiru',
+'headline_tip' => 'Zagolofkka',
+'nowiki_sample' => 'Lissä formattimatoo teksti tänne',
+'nowiki_tip' => 'Ignoriiroit viki formatti',
+'image_tip' => 'Kuva',
+'media_tip' => 'Faililinkki',
+'sig_tip' => 'Alacirjutuz aikamerkikaa',
+'hr_tip' => 'Gorizontalnoi viiru',
 
 # Edit pages
-'summary'                          => 'Turvotuz:',
-'subject'                          => 'Teema:',
-'minoredit'                        => 'Kase on peeni muutuz',
-'watchthis'                        => 'Lissä kattsõspiiskaa',
-'savearticle'                      => 'Salvo tšültši',
-'preview'                          => 'Prestavleńńa',
-'showpreview'                      => 'Näüt prestavleńńa',
-'showdiff'                         => 'Näüt muutussõd',
-'anoneditwarning'                  => 'Että õlõ süämme tširjutõnnu. Teďďee IP-adressi tširjuttanes sene tšüľľee muutuzistorisõ.',
-'summary-preview'                  => 'Turvotuhsõ prestavleńńa',
-'newarticle'                       => '(Uusi)',
-'newarticletext'                   => 'Sitä tšültšiä veel ebõõ.
-Võitta loovva tšüľľee tširjuttamall alla õlõvasõõ tilaa. Kui että taho loovva [[{{MediaWiki:Helppage}}|tšültšiä]], menka takaz Web-brauzeraa "back"-napuukaa.',
-'noarticletext'                    => '{{GRAMMAR:inessive|{{SITENAME}}}} ebõõ sene nimissä tšültšiä.
-* Võid [[Special:Search/{{PAGENAME}}|ettsiä tšüľľee nimellä]] muilta tšüľľeltä.
-* Võid tširjuttõma uuvvõõ tšüľľee <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}|action=edit}} {{PAGENAME}}]</span>.',
-'previewnote'                      => "'''Kase on ainult prestavleńńa! Tšültšiä ebõõ veel salvotõttu!'''",
-'editing'                          => 'Muutun $1',
-'editingsection'                   => 'Muuttõmizõll on õsa tšüľľess $1',
-'copyrightwarning'                 => "Kõik {{SITENAME}}'lle formittu saatšid katsotaa julkaistussi $2 -litsentsi mukka ($1). Kui että taho, jot Teďďee tširjutussa muutõtaa armõttomassi ja svobodno tšävvää uuvvõllõõ, elä tširjuttõga.<br />Toož, Te luppattõ, jot tširjutittä Teďďee teksti ize, vai kopiiroizitta slobodnoissa tšüľľessä.<br />'''ELÄ TŠÄÜTTEGA TETŠEJÄÕIKUSÕKAA OĎĎÕLTUIT MAŤERIIT ILMA LUPPA!'''",
-'templatesused'                    => 'Sell tšüľľell {{PLURAL:$1|tšäütetüd šabloonid}}:',
-'templatesusedpreview'             => '{{PLURAL:$1|Šabloonid}} sellä prestavleńńalla:',
-'template-protected'               => '(oďďõttu)',
-'template-semiprotected'           => '(varjõttu anonüümeilt ja uusilt tšäüttijilt)',
-'hiddencategories'                 => 'Kase tšültši kuulub {{PLURAL:$1|vahtiaavaa salautõttuu gruppaa|vahtiaavii salautõttuisõõ gruppoisõõ}}:',
+'summary' => 'Turvotuz:',
+'subject' => 'Teema:',
+'minoredit' => 'Kase on peeni muutuz',
+'watchthis' => 'Lissä kattsõspiiskaa',
+'savearticle' => 'Salvo cülci',
+'preview' => 'Prestavleńńa',
+'showpreview' => 'Näüt prestavleńńa',
+'showdiff' => 'Näüt muutussõd',
+'anoneditwarning' => 'Että õlõ süämme cirjutõnnu. Teďďee IP-adressi cirjuttanes sene cüľľee muutuzistorisõ.',
+'summary-preview' => 'Turvotuhsõ prestavleńńa',
+'loginreqlink' => 'cirjut süäme',
+'newarticle' => '(Uusi)',
+'newarticletext' => 'Sitä cülciä veel ebõõ.
+Võitta loovva cüľľee cirjuttamall alla õlõvasõõ tilaa. Kui että taho loovva [[{{MediaWiki:Helppage}}|cülciä]], menka takaz Web-brauzeraa "back"-napuukaa.',
+'noarticletext' => '{{GRAMMAR:inessive|{{SITENAME}}}} ebõõ sene nimissä cülciä.
+* Võid [[Special:Search/{{PAGENAME}}|ettsiä cüľľee nimellä]] muilta cüľľeltä.
+* Võid cirjuttõma uuvvõõ cüľľee <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}|action=edit}} {{PAGENAME}}]</span>.',
+'previewnote' => "'''Kase on ainult prestavleńńa.''' Cülciä ebõõ veel salvotõttu!",
+'editing' => 'Muutun $1',
+'editingsection' => 'Muuttõmizõll on õsa cüľľess $1',
+'copyrightwarning' => "Kõik {{SITENAME}}'lle formittu saacid katsotaa julkaistussi $2 -litsentsi mukka ($1). Kui että taho, jot Teďďee cirjutussa muutõtaa armõttomassi ja svobodno cävvää uuvvõllõõ, elä cirjuttõga.<br />Toož, Te luppattõ, jot cirjutittä Teďďee teksti ize, vai kopiiroizitta slobodnoissa cüľľessä.<br />'''ELÄ CÄÜTTEGA TECEJÄÕIKUSÕKAA OĎĎÕLTUIT MAŤERIIT ILMA LUPPA!'''",
+'templatesused' => 'Sell cüľľell {{PLURAL:$1|cäütetüd šabloonid}}:',
+'templatesusedpreview' => '{{PLURAL:$1|Šabloonid}} sellä prestavleńńalla:',
+'template-protected' => '(oďďõttu)',
+'template-semiprotected' => '(varjõttu anonüümeilt ja uusilt cäüttijilt)',
+'hiddencategories' => 'Kase cülci kuulub {{PLURAL:$1|vahtiaavaa salautõttuu gruppaa|vahtiaavii salautõttuisõõ gruppoisõõ}}:',
 'permissionserrorstext-withaction' => 'Teill ebõõ luppa $2 {{PLURAL:$1|vahtiaavass süüss|vahtiaaviss süiss}} peräss:',
-'moveddeleted-notice'              => "Kase tšültši on pühittü. Alla on sene tšüľľee pühi'istori.",
+'moveddeleted-notice' => "Kase cülci on pühittü. Alla on sene cüľľee pühi'istori.",
 
 # History pages
-'viewpagelogs'           => 'Näüt sene tšüľľee logid',
-'currentrev-asof'        => 'Nütšüin verzija $1',
-'revisionasof'           => 'Verzija $1',
-'previousrevision'       => '← Vanõpi verzija',
-'nextrevision'           => 'Uuvvõpi verzija →',
-'currentrevisionlink'    => 'Nütšüin verzija',
-'cur'                    => 'nütš.',
-'last'                   => 'entin',
-'histlegend'             => "Merkid: ({{int:cur}}) = vahõ nütšüizese verzijaa, ({{int:last}}) = vahõ entiizese verzijaa, '''{{int:minoreditletter}}''' = peeni muutuz",
+'viewpagelogs' => 'Näüt sene cüľľee logid',
+'currentrev' => 'Nücüin verzija',
+'currentrev-asof' => 'Nücüin verzija $1',
+'revisionasof' => 'Verzija $1',
+'previousrevision' => '← Vanõpi verzija',
+'nextrevision' => 'Uuvvõpi verzija →',
+'currentrevisionlink' => 'Nücüin verzija',
+'cur' => 'nüc.',
+'last' => 'entin',
+'histlegend' => "Merkid: ({{int:cur}}) = vahõ nütšüizese verzijaa, ({{int:last}}) = vahõ entiizese verzijaa, '''{{int:minoreditletter}}''' = peeni muutuz",
 'history-fieldset-title' => 'Ľistvoit muutuzistoria',
-'histfirst'              => 'Kõikkõa varaizõpid',
-'histlast'               => 'Kõikkõa viimõizõpid',
+'histfirst' => 'Kõikkõa varaizõpid',
+'histlast' => 'Kõikkõa viimõizõpid',
 
 # Revision deletion
-'rev-delundel'   => 'näüt/salauta',
-'revdel-restore' => 'muutu nätšüvüss',
+'rev-delundel' => 'näüt/salauta',
+'rev-showdeleted' => 'näüt väľľää',
+'revdelete-show-file-submit' => 'Daa',
+'revdelete-radio-set' => 'Daa',
+'revdelete-radio-unset' => 'Eb',
+'revdelete-log' => 'Süü:',
+'revdel-restore' => 'muutu näcüvüss',
+'pagehist' => 'Cüľľee istori',
+'revdelete-reasonotherlist' => 'Muu süü',
+
+# History merging
+'mergehistory-reason' => 'Süü:',
 
 # Merge log
 'revertmerge' => 'Kummut ühesüz',
 
 # Diffs
-'history-title'           => 'Tšüľľee $1 muutuzistori',
-'difference'              => '(Vahõd verzijoďďee väliz)',
-'lineno'                  => 'Viiru $1:',
+'history-title' => 'Cüľľee $1 muutuzistori',
+'lineno' => 'Viiru $1:',
 'compareselectedversions' => 'Võrrõõ valitsõttuit verzijoit',
-'editundo'                => 'kummut',
+'editundo' => 'kummut',
 
 # Search results
-'searchresults'             => 'Etsüü tulõmuhsõd',
-'searchresults-title'       => 'Etsü tulõmuhsõd ettsüsõnalõõ "$1"',
-'searchresulttext'          => 'Lisäsoobšeńńad ettsimizessä on [[{{MediaWiki:Helppage}}|praavilatšüľľellä]].',
-'searchsubtitle'            => 'Etsizid fraaza \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|kõikõd tšüľľed, kummad alkõa fraazaakaa "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|kõikõd tšüľľed näütteväd tšüľľelee "$1"]])',
-'searchsubtitleinvalid'     => "Ettsizittä: '''$1'''",
-'notitlematches'            => 'Eb löütännü miltäiss tšültšiä sene ettsüsõnaaka',
-'notextmatches'             => 'Ettsisõnaa eb löütünnü tšüľľee tekstiissä',
-'prevn'                     => '{{PLURAL:$1|edellinen|$1 entiiss}}',
-'nextn'                     => '{{PLURAL:$1|$1}} vahtiaava →',
-'viewprevnext'              => 'Näüt ($1 {{int:pipe-separator}} $2) ($3)',
-'search-result-size'        => '$1 ({{PLURAL:$2|1 sõna|$2 sõna}})',
-'search-redirect'           => '(mešaituz $1)',
-'search-section'            => '(alajako $1)',
-'search-suggest'            => 'Tähetidko: $1',
-'search-interwiki-caption'  => 'Sõzarprojektid',
-'search-interwiki-default'  => 'tulõmuhsõd $1:',
-'search-interwiki-more'     => '(lisä)',
-'search-mwsuggest-enabled'  => 'tarittsõmisijõkaa',
+'searchresults' => 'Etsüü tulõmuhsõd',
+'searchresults-title' => 'Etsü tulõmuhsõd ettsüsõnalõõ "$1"',
+'searchresulttext' => 'Lisäsoobšeńńad ettsimizessä on [[{{MediaWiki:Helppage}}|praavilacüľľellä]].',
+'searchsubtitle' => 'Etsizid fraaza \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|kõikõd cüľľed, kummad alkõa fraazaakaa "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|kõikõd cüľľed näütteväd cüľľelee "$1"]])',
+'searchsubtitleinvalid' => "Ettsizittä: '''$1'''",
+'notitlematches' => 'Eb löütännü miltäiss cülciä sene ettsüsõnaaka',
+'notextmatches' => 'Ettsisõnaa eb löütünnü cüľľee tekstiissä',
+'prevn' => '{{PLURAL:$1|edellinen|$1 entiiss}}',
+'nextn' => '{{PLURAL:$1|$1}} vahtiaava →',
+'viewprevnext' => 'Näüt ($1 {{int:pipe-separator}} $2) ($3)',
+'searchprofile-images' => 'Multimedia',
+'searchprofile-everything' => 'Kõik',
+'searchprofile-project-tooltip' => 'Etsi "$1":az',
+'search-result-size' => '$1 ({{PLURAL:$2|1 sõna|$2 sõna}})',
+'search-redirect' => '(mešaituz $1)',
+'search-section' => '(alajako $1)',
+'search-suggest' => 'Tähetidko: $1',
+'search-interwiki-caption' => 'Sõzarprojektid',
+'search-interwiki-default' => 'tulõmuhsõd $1:',
+'search-interwiki-more' => '(lisä)',
+'search-mwsuggest-enabled' => 'tarittsõmisijõkaa',
 'search-mwsuggest-disabled' => 'tarittsõmizõtta',
-'nonefound'                 => "'''Zametšańńa''': Ettsü etsib anult osiss nimiruumii.
-Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taas juttutšüľľeekaa, sablooniikaa, jne.), vai tarvittõga nimiruumi niku prefiksi.",
-'powersearch'               => 'Etenennü ettsü',
-'powersearch-legend'        => 'Etenennü ettsü',
-'powersearch-ns'            => 'Etsi nimiruumõssa:',
-'powersearch-redir'         => 'Spiiska mešaitussijõ',
-'powersearch-field'         => 'Etsi',
+'searchall' => 'kõik',
+'nonefound' => "'''Zametšańńa''': Ettsü etsib anult osiss nimiruumii.
+Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taas juttucüľľeekaa, sablooniikaa, jne.), vai tarvittõga nimiruumi niku prefiksi.",
+'powersearch' => 'Etenennü ettsü',
+'powersearch-legend' => 'Etenennü ettsü',
+'powersearch-ns' => 'Etsi nimiruumõssa:',
+'powersearch-redir' => 'Spiiska mešaitussijõ',
+'powersearch-field' => 'Etsi',
+
+# Quickbar
+'qbsettings-none' => 'Eb õõ',
 
 # Preferences page
-'preferences'   => 'Koozid',
+'preferences' => 'Koozid',
 'mypreferences' => 'Minu koozid',
+'skin-preview' => 'Prestavleńńa',
+'prefs-datetime' => 'Kuupäivä i aika',
+'prefs-user-pages' => 'Cäüttijäcülcid',
+'prefs-rc' => 'Viimõizõd muutussõd',
+'searchresultshead' => 'Etsi',
+'timezoneregion-africa' => 'Afrikka',
+'timezoneregion-america' => 'Ameerika',
+'timezoneregion-asia' => 'Aazija',
+'timezoneregion-australia' => 'Avstraaľija',
+'timezoneregion-europe' => 'Evrooppaa',
+'prefs-files' => 'Failid',
+'youremail' => 'E-mail:',
+'username' => 'Cäüttijänimi:',
+'yourrealname' => 'Minu nimi:',
+'yourlanguage' => 'Ceeli:',
+'yourgender' => 'Sukupooli',
+'gender-male' => 'Mehin',
+'gender-female' => 'Naisin',
+'email' => 'E-mail',
+
+# User rights
+'userrights-reason' => 'Süü:',
 
 # Groups
+'group-user' => 'Сäüttijäd',
 'group-sysop' => 'Praviťeľad',
 
+'group-user-member' => 'cäüttijä',
+
+'grouppage-user' => '{{ns:project}}:Сäüttijäd',
 'grouppage-sysop' => '{{ns:project}}:Praviťeľad',
 
 # User rights log
-'rightslog' => 'Tšäütteminõikuslogi',
+'rightslog' => 'Cäütteminõikuslogi',
+'rightsnone' => '(eb õõ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-edit' => 'muutu sitä tšültšiä',
+'action-edit' => 'muutu sitä cülciä',
 
 # Recent changes
-'nchanges'                       => '$1 {{PLURAL:$1|muutuz|muutussõd}}',
-'recentchanges'                  => 'Viimõizõd muutussõd',
-'recentchanges-legend'           => 'Viimass muutuhsõss valimizõd',
+'nchanges' => '$1 {{PLURAL:$1|muutuz|muutussõd}}',
+'recentchanges' => 'Viimõizõd muutussõd',
+'recentchanges-legend' => 'Viimass muutuhsõss valimizõd',
 'recentchanges-feed-description' => 'Sell sivull võib vahtia uutizijõ muutuhsiit.',
-'rcnote'                         => 'Alla on {{PLURAL:$1|ühsi muutuz|viimeiziit $1 muutussiit}} viimeize {{PLURAL:$2|ühee päivää|$2 päivää}}, $4 $5.',
-'rclistfrom'                     => 'Näüt uuvvõd muutuhsõd $1 alguss',
-'rcshowhideminor'                => '$1 peened muutussõd',
-'rcshowhidebots'                 => '$1 botid',
-'rcshowhideliu'                  => '$1 süäme tširjutõnnud tšäüttijäd',
-'rcshowhideanons'                => '$1 anonüümid tšäüttijäd',
-'rcshowhidemine'                 => '$1 õmad muutussõd',
-'rclinks'                        => 'Näüt viimõiss $1 muutuhsõiss viimõizõ $2 päivää ajalt.<br />$3',
-'diff'                           => 'vahõ',
-'hist'                           => 'istori',
-'hide'                           => 'Salauta',
-'show'                           => 'Näüt väľľää',
-'minoreditletter'                => 'p',
-'newpageletter'                  => 'U',
-'boteditletter'                  => 'b',
-'rc-enhanced-expand'             => 'Näüt detaaľiit (JavaScript on tarviz)',
-'rc-enhanced-hide'               => 'Salauta detaaľiit',
+'recentchanges-label-minor' => 'Kase on peeni muutuz',
+'rcnote' => 'Alla on {{PLURAL:$1|ühsi muutuz|viimeiziit $1 muutussiit}} viimeize {{PLURAL:$2|ühee päivää|$2 päivää}}, $4 $5.',
+'rclistfrom' => 'Näüt uuvvõd muutuhsõd $1 alguss',
+'rcshowhideminor' => '$1 peened muutussõd',
+'rcshowhidebots' => '$1 botid',
+'rcshowhideliu' => '$1 süäme cirjutõnnud cäüttijäd',
+'rcshowhideanons' => '$1 anonüümid cäüttijäd',
+'rcshowhidemine' => '$1 õmad muutussõd',
+'rclinks' => 'Näüt viimõiss $1 muutuhsõiss viimõizõ $2 päivää ajalt.<br />$3',
+'diff' => 'vahõ',
+'hist' => 'istori',
+'hide' => 'Salauta',
+'show' => 'Näüt väľľää',
+'minoreditletter' => 'p',
+'newpageletter' => 'U',
+'boteditletter' => 'b',
+'rc-enhanced-expand' => 'Näüt detaaľiit (JavaScript on tarviz)',
+'rc-enhanced-hide' => 'Salauta detaaľiit',
 
 # Recent changes linked
-'recentchangeslinked'         => 'Sukulaizõd muutussõd.',
-'recentchangeslinked-title'   => 'Tšüľľelt $1 linkitettüďďe tšültšije muutuhsõd.',
-'recentchangeslinked-summary' => "Kase osoobennoi tšültši näütteb muutusõd tšültšillä, kummalõõ on seltä tšüľľeltä näüteltü.
-Tšüľľed, kummad õmad teďďellä [[Special:Watchlist|kattsõspiizgalla]] on tširjuttõnnu '''pimmiässi'''.",
-'recentchangeslinked-page'    => 'Tšüľľee nimi:',
-'recentchangeslinked-to'      => 'Näüt muutuhsõd tšültšiisee, kummall on linkki annõttuu tšültšesee',
+'recentchangeslinked' => 'Sukulaizõd muutussõd.',
+'recentchangeslinked-feed' => 'Sukulaizõd muutussõd',
+'recentchangeslinked-toolbox' => 'Sukulaizõd muutussõd',
+'recentchangeslinked-title' => 'Cüľľelt $1 linkitettüďďe cülcije muutuhsõd.',
+'recentchangeslinked-summary' => "Kase osoobennoi cülci näütteb muutusõd cülcillä, kummalõõ on seltä cüľľeltä näüteltü.
+Cüľľed, kummad õmad teďďellä [[Special:Watchlist|kattsõspiizgalla]] on cirjuttõnnu '''pimmiässi'''.",
+'recentchangeslinked-page' => 'Cüľľee nimi:',
+'recentchangeslinked-to' => 'Näüt muutuhsõd cülciisee, kummall on linkki annõttuu cülcesee',
 
 # Upload
-'upload'        => 'Laajõngoit failia ülez',
+'upload' => 'Laajõngoit failia ülez',
+'uploadbtn' => 'Laajõngoit failia ülez',
 'uploadlogpage' => 'Faililogi',
+'filename' => 'Failinimi',
+'filedesc' => 'Turvotuz',
+'fileuploadsummary' => 'Turvotuz:',
 'uploadedimage' => '"[[$1]]" on laajõngoitõttu ülez',
 
+# Special:ListFiles
+'imgfile' => 'faili',
+'listfiles_thumb' => 'Peenikuva',
+'listfiles_date' => 'Kuupäivä',
+'listfiles_name' => 'Nimi',
+'listfiles_user' => 'Сäüttijä',
+
 # File description page
-'filehist'                  => 'Failii istori',
-'filehist-help'             => 'Štšolkoittõga Päivätšisla/Tšelloaika näe miltäin faili õli sell aiga pilkall.',
-'filehist-current'          => 'nütšüin',
-'filehist-datetime'         => 'Päivätšisla/Tšelloaika',
-'filehist-thumb'            => 'Peenikuva',
-'filehist-thumbtext'        => 'Peenikuva $1 verzijalõõ',
-'filehist-user'             => 'Tšäüttijä',
-'filehist-dimensions'       => 'Mitad',
-'filehist-comment'          => 'Zametšańńa',
-'imagelinks'                => 'Faililinkid',
-'linkstoimage'              => 'Selle kuvallõ {{PLURAL:$1|näütteeb kase tšültši|näütteväd kaned tšüľľed}}:',
-'sharedupload'              => "Kase faili on $1'lt ja muud projektõd saavad tšäüttää sitä.",
+'file-anchor-link' => 'Faili',
+'filehist' => 'Failii istori',
+'filehist-help' => 'Šcolkoittõga Päiväcisla/Celloaika näe miltäin faili õli sell aiga pilkall.',
+'filehist-deleteone' => 'pühi',
+'filehist-revert' => 'kummut',
+'filehist-current' => 'nücüin',
+'filehist-datetime' => 'Päiväсisla/Сelloaika',
+'filehist-thumb' => 'Peenikuva',
+'filehist-thumbtext' => 'Peenikuva $1 verzijalõõ',
+'filehist-user' => 'Сäüttijä',
+'filehist-dimensions' => 'Mitad',
+'filehist-comment' => 'Zametšańńa',
+'imagelinks' => 'Faililinkid',
+'linkstoimage' => 'Selle kuvallõ {{PLURAL:$1|näütteeb kase сülсi|näütteväd kaned сüľľed}}:',
+'sharedupload' => 'Kase faili on $1:lt ja muud projektõd saavad cäüttää sitä.',
 'uploadnewversion-linktext' => 'Laajõngoit uusi verzija seness failiss ülez',
 
+# File reversion
+'filerevert-comment' => 'Süü:',
+'filerevert-submit' => 'Kummut',
+
+# File deletion
+'filedelete-comment' => 'Süü:',
+'filedelete-submit' => 'Pühi',
+
+# Random page
+'randompage' => 'Satunnain lehocülci',
+
 # Statistics
 'statistics' => 'Staťisťikka',
+'statistics-pages' => 'Cülcid',
+
+'brokenredirects-edit' => 'muuttaa',
+'brokenredirects-delete' => 'pühi',
+
+'withoutinterwiki-submit' => 'Näüt väľľää',
 
 # Miscellaneous special pages
-'nbytes'        => '$1 {{PLURAL:$1|baitti|baittia}}',
-'nmembers'      => '$1 {{PLURAL:$1|selttsilain|selttsilaizõd}}',
-'prefixindex'   => 'Kõik tšüľľed prefiksiikaa',
-'newpages'      => 'Uuvvõd tšüľľed',
-'move'          => 'Liikut',
-'movethispage'  => 'Liikut kase tšültši',
+'nbytes' => '$1 {{PLURAL:$1|baitti|baittia}}',
+'nmembers' => '$1 {{PLURAL:$1|selttsilain|selttsilaizõd}}',
+'prefixindex' => 'Kõik cüľľed prefiksiikaa',
+'newpages' => 'Uuvvõd cüľľed',
+'newpages-username' => 'Cäüttijänimi:',
+'move' => 'Liikut',
+'movethispage' => 'Liikut kase cülci',
 'pager-newer-n' => '{{PLURAL:$1|uuvvõpi 1|uuvvõpad $1}}',
 'pager-older-n' => '{{PLURAL:$1|vanöpi 1|vanõpad $1}}',
 
 # Book sources
-'booksources'               => 'TÅ¡irjalähed',
-'booksources-search-legend' => 'Etsi irjalähteit',
-'booksources-go'            => 'Mee',
+'booksources' => 'Сirjalähed',
+'booksources-search-legend' => 'Etsi сirjalähteit',
+'booksources-go' => 'Mee',
 
 # Special:Log
 'log' => 'Logid',
 
 # Special:AllPages
-'allpages'       => 'Kõik artikkelid',
+'allpages' => 'Kõik artikkelid',
 'alphaindexline' => '$1 ... $2',
-'prevpage'       => 'Entin tšültši ($1)',
-'allpagesfrom'   => 'Tšüľľelt',
-'allpagesto'     => 'Tšüľľessaa',
-'allarticles'    => 'Kõikõd tšüľľed',
+'prevpage' => 'Entin сülсi ($1)',
+'allpagesfrom' => 'Сüľľelt',
+'allpagesto' => 'Сüľľessaa',
+'allarticles' => 'Kõikõd cüľľed',
 'allpagessubmit' => 'Mee',
 
+# Special:Categories
+'categories' => 'Gruppad',
+
+# Special:DeletedContributions
+'sp-deletedcontributions-contribs' => 'Minu avittamizõd',
+
 # Special:LinkSearch
 'linksearch' => 'Ulkopoolizõd linkid',
+'linksearch-ns' => 'Nimiruumi:',
+'linksearch-ok' => 'Etsi',
+
+# Special:ListUsers
+'listusers-submit' => 'Näüt väľľää',
 
 # Special:Log/newusers
-'newuserlogpage' => 'Uuvvõd äüttijäd',
+'newuserlogpage' => 'Uuvvõd cäüttijäd',
 
 # Special:ListGroupRights
 'listgrouprights-members' => '(selttsilainspiiska)',
 
 # E-mail user
-'emailuser' => 'Lähettega elektropoštia selle tšäüttijälle',
+'emailuser' => 'Lähettega elektropoštia selle cäüttijälle',
+'emailusername' => 'Cäüttijänimi:',
+'emailmessage' => 'Ilmottamin:',
 
 # Watchlist
-'watchlist'         => 'Minu kattsõspiiska',
-'mywatchlist'       => 'Minu kattsõspiiska',
-'addedwatchtext'    => "Tšültši \"[[:\$1]]\" on lisättü Teďďee [[Special:Watchlist|kattsospiizgallõ]].
-Tšültšese ja sene juttutšültšese tehäväd tulõvaizõd muutuhsõd leeväd tšisloitõtud siäll.
-Tšültši leeb tširjutõttu '''pimmiässi''' [[Special:RecentChanges|spiizgall viimeizije muutuhsijõ]].",
-'removedwatchtext'  => 'Tšültši "[[:$1]]" on pantu [[Special:Watchlist|teďďee kattsõspiizgalt]] poiz.',
-'watch'             => 'Katso',
-'watchthispage'     => 'Katso sitä tšültšiä',
-'unwatch'           => 'Lõpõt kattsõõmin',
-'watchlist-details' => 'Kattsõspiizgall on {{PLURAL:$1|$1 tšültši|$1 tšültšiä}} (ilma juttutšültšiit).',
-'wlshowlast'        => 'Näüt viimeized $1 tunnia vai $2 päivää $3',
+'watchlist' => 'Minu kattsõspiiska',
+'mywatchlist' => 'Minu kattsõspiiska',
+'addedwatchtext' => "Cülci \"[[:\$1]]\" on lisättü Teďďee [[Special:Watchlist|kattsospiizgallõ]].
+Cülcese ja sene juttucülcese tehäväd tulõvaizõd muutuhsõd leeväd cisloitõtud siäll.
+Cülci leeb cirjutõttu '''pimmiässi''' [[Special:RecentChanges|spiizgall viimeizije muutuhsijõ]].",
+'removedwatchtext' => 'Cülci "[[:$1]]" on pantu [[Special:Watchlist|teďďee kattsõspiizgalt]] poiz.',
+'watch' => 'Katso',
+'watchthispage' => 'Katso sitä cülciä',
+'unwatch' => 'Lõpõt kattsõõmin',
+'watchlist-details' => 'Kattsõspiizgall on {{PLURAL:$1|$1 cülci|$1 cülciä}} (ilma juttucülciit).',
+'wlshowlast' => 'Näüt viimeized $1 tunnia vai $2 päivää $3',
 'watchlist-options' => 'Kattsõspiizgaa valimizõd',
 
 # Displayed when you click the "watch" button and it is in the process of watching
-'watching'   => 'Kattsõõn…',
+'watching' => 'Kattsõõn…',
 'unwatching' => 'Kattsõõmizõõ lõpõttõmin…',
 
+'enotif_newpagetext' => 'Kase on vassõn cülci.',
+
 # Delete
-'deletepage'            => 'Pühi tšültši',
-'confirmdeletetext'     => 'Õlõtta pühtšimässä tšüľľee vai failii ja kõigõ sene istorii. Õlka nii üvä, kõvissõga jot tahotta sitä tehä, jot saatta arvoa sledstvijäd jot pühtšimüz on [[{{MediaWiki:Policy-url}}|poolissaa]] mukka.',
-'actioncomplete'        => 'Töö tehtü lõppuu',
-'deletedtext'           => '"$1" on pühittü.
-Tšüľľellä $2 on spiiska viimeiziss pühtšimühsiiss.',
-'dellogpage'            => 'Pühitüd tšüľľed',
-'deletecomment'         => 'Süü',
-'deleteotherreason'     => 'Muu vai lisä süü',
+'deletepage' => 'Pühi cülci',
+'delete-legend' => 'Pühi',
+'confirmdeletetext' => 'Õlõtta pühcimässä cüľľee vai failii ja kõigõ sene istorii. Õlka nii üvä, kõvissõga jot tahotta sitä tehä, jot saatta arvoa sledstvijäd jot pühcimüz on [[{{MediaWiki:Policy-url}}|poolissaa]] mukka.',
+'actioncomplete' => 'Töö tehtü lõppuu',
+'deletedtext' => '"$1" on pühittü.
+Cüľľellä $2 on spiiska viimeiziss pühcimühsiiss.',
+'dellogpage' => 'Pühitüd cüľľed',
+'deletecomment' => 'Süü',
+'deleteotherreason' => 'Muu vai lisä süü',
 'deletereasonotherlist' => 'Muu süü',
 
 # Rollback
+'rollback_short' => 'Vääntega',
 'rollbacklink' => 'vääntega',
 
 # Protect
-'protectlogpage'              => 'Varjõtud tšüľľed',
-'protectedarticle'            => '"[[$1]]" on nüd varjõttu',
-'modifiedarticleprotection'   => 'muuti tšüľľee [[$1]] varjauztasoa',
-'protectcomment'              => 'Süü',
-'protectexpiry'               => 'Lõpub:',
-'protect_expiry_invalid'      => 'Lõppuaika eb kõlpa.',
-'protect_expiry_old'          => 'Lõppuaika on meneväz.',
-'protect-text'                => "Võitta kattsoa ja muuttaa tšüľľee '''$1''' lupoit.",
-'protect-locked-access'       => "Että või muuttaa tšüľľee varjauztasoa. All on tšüľľee \"'''\$1'''\" nütšüized varjauztazod:",
-'protect-cascadeon'           => 'Kase tšültši on varjõttu, ku on sisällütettü all {{PLURAL:$1|õlõvaa jadgotussi varjõttuhõõ tšültšese|õlõvii jadgotussi varjõttuisõ tšültšiise}}. Võitta muuttaa sene tšüľľee varjuztasoa, mutta se eb vaikuta jadgotõttuu varjuhsiise.',
-'protect-default'             => 'Salli kõik tšäüttijäd',
-'protect-fallback'            => 'Treebuit $1-õikuz',
-'protect-level-autoconfirmed' => 'Piättee uuvvõd ja anonüümed tšäüttijäd',
-'protect-level-sysop'         => 'Ainult praviťeľad',
-'protect-summary-cascade'     => 'jadgotõltu',
-'protect-expiring'            => 'lõpub $1',
-'protect-cascade'             => 'Varjaa jõka tšültši, kumpa on tänne tšültšesee sisällütennü.',
-'protect-cantedit'            => 'Että või muuttaa tšüľľee varjauztasoa, ku tüü että saa muuttaa tšültšiä.',
-'restriction-type'            => 'Rajauz',
-'restriction-level'           => 'Varjauz',
+'protectlogpage' => 'Varjõtud cüľľed',
+'protectedarticle' => '"[[$1]]" on nüd varjõttu',
+'modifiedarticleprotection' => 'muuti cüľľee [[$1]] varjauztasoa',
+'protectcomment' => 'Süü',
+'protectexpiry' => 'Lõpub:',
+'protect_expiry_invalid' => 'Lõppuaika eb kõlpa.',
+'protect_expiry_old' => 'Lõppuaika on meneväz.',
+'protect-text' => "Võitta kattsoa ja muuttaa cüľľee '''$1''' lupoit.",
+'protect-locked-access' => "Että või muuttaa cüľľee varjauztasoa. All on cüľľee \"'''\$1'''\" nücüized varjauztazod:",
+'protect-cascadeon' => 'Kase cülci on varjõttu, ku on sisällütettü all {{PLURAL:$1|õlõvaa jadgotussi varjõttuhõõ cülcese|õlõvii jadgotussi varjõttuisõ cülciise}}. Võitta muuttaa sene cüľľee varjuztasoa, mutta se eb vaikuta jadgotõttuu varjuhsiise.',
+'protect-default' => 'Salli kõik cäüttijäd',
+'protect-fallback' => 'Treebuit $1-õikuz',
+'protect-level-autoconfirmed' => 'Piättee uuvvõd ja anonüümed cäüttijäd',
+'protect-level-sysop' => 'Ainult praviťeľad',
+'protect-summary-cascade' => 'jadgotõltu',
+'protect-expiring' => 'lõpub $1',
+'protect-expiry-indefinite' => 'iciin',
+'protect-cascade' => 'Varjaa jõka cülci, kumpa on tänne cülcesee sisällütennü.',
+'protect-cantedit' => 'Että või muuttaa cüľľee varjauztasoa, ku tüü että saa muuttaa cülciä.',
+'protect-otherreason-op' => 'Muu süü',
+'protect-expiry-options' => '1 tunni:1 hour,1 päivä:1 day,1 näteľi:1 week,2 näteľiä:2 weeks,1 kuu:1 month,3 kuut:3 months,6 kuut:6 months,1 voosi:1 year,iciin:infinite',
+'restriction-type' => 'Rajauz',
+'restriction-level' => 'Varjauz',
+
+# Restrictions (nouns)
+'restriction-edit' => 'Muuttaa',
+'restriction-move' => 'Liikut',
+'restriction-create' => 'Loo cülci',
 
 # Undelete
 'undeletelink' => 'näüt/vääntee',
+'undeleteviewlink' => 'prestavleńńõd',
+'undeletecomment' => 'Süü:',
+'undelete-search-submit' => 'Etsi',
+'undelete-show-file-submit' => 'Daa',
 
 # Namespace form on various pages
-'namespace'      => 'Nimiruumi:',
-'invert'         => 'Tšäänn nimiruumivalimin päävassaizõssi',
+'namespace' => 'Nimiruumi:',
+'invert' => 'Cäänn nimiruumivalimin päävassaizõssi',
 'blanknamespace' => '(Artikkelid)',
 
 # Contributions
-'contributions'       => 'Tšäüttijää avittamizõd',
-'contributions-title' => 'äüttijää $1 avittamizõd',
-'mycontris'           => 'Minu avittamizõd',
-'contribsub2'         => 'Tšäüttijää $1 ($2) avittamizõd',
-'uctop'               => '(ülez)',
-'month'               => 'Kuu',
-'year'                => 'Voosi:',
-
-'sp-contributions-newbies'  => 'Näüt uusijõõ tšäüttijee muutuhsõd',
+'contributions' => 'Cäüttijää avittamizõd',
+'contributions-title' => 'Cäüttijää $1 avittamizõd',
+'mycontris' => 'Minu avittamizõd',
+'contribsub2' => 'Cäüttijää $1 ($2) avittamizõd',
+'uctop' => '(ülez)',
+'month' => 'Kuu',
+'year' => 'Voosi:',
+
+'sp-contributions-newbies' => 'Näüt uusijõõ cäüttijee muutuhsõd',
 'sp-contributions-blocklog' => 'piättelemized',
-'sp-contributions-search'   => 'Etsi avittamisiit',
-'sp-contributions-username' => 'IP-adressi vai tšäüttijänimi',
-'sp-contributions-submit'   => 'Etsi',
+'sp-contributions-logs' => 'logid',
+'sp-contributions-talk' => 'Juttu',
+'sp-contributions-search' => 'Etsi avittamisiit',
+'sp-contributions-username' => 'IP-adressi vai cäüttijänimi',
+'sp-contributions-submit' => 'Etsi',
 
 # What links here
-'whatlinkshere'            => 'Linkid tänne',
-'whatlinkshere-title'      => 'Tšüľľed, kummad näütellä tšüľľelle "$1"',
-'whatlinkshere-page'       => 'Tšültši:',
-'linkshere'                => "Vahtiaavilt tšültšiilt on linkki tšüľľelle '''[[:$1]]''':",
-'isredirect'               => 'mešaituztšültši',
-'istemplate'               => 'sisällütüz šabloonii',
-'isimage'                  => 'kuvalinkki',
-'whatlinkshere-prev'       => '{{PLURAL:$1|entiin tšültši|$1 entiiss tšültšiä}}',
-'whatlinkshere-next'       => '{{PLURAL:$1|vahtiaava tšültši|$1 vahtiaava tšültšiä}}',
-'whatlinkshere-links'      => '← linkid',
+'whatlinkshere' => 'Linkid tänne',
+'whatlinkshere-title' => 'Cüľľed, kummad näütellä cüľľelle "$1"',
+'whatlinkshere-page' => 'Cülci:',
+'linkshere' => "Vahtiaavilt cülciilt on linkki cüľľelle '''[[:$1]]''':",
+'isredirect' => 'mešaituzcülci',
+'istemplate' => 'sisällütüz šabloonii',
+'isimage' => 'kuvalinkki',
+'whatlinkshere-prev' => '{{PLURAL:$1|entiin cülci|$1 entiiss cülciä}}',
+'whatlinkshere-next' => '{{PLURAL:$1|vahtiaava cülci|$1 vahtiaava cülciä}}',
+'whatlinkshere-links' => '← linkid',
 'whatlinkshere-hideredirs' => '$1 mešaituhsõd',
-'whatlinkshere-hidetrans'  => '$1 sisällütühsed',
-'whatlinkshere-hidelinks'  => '$1 linkid',
-'whatlinkshere-filters'    => 'Fiľtrad',
+'whatlinkshere-hidetrans' => '$1 sisällütühsed',
+'whatlinkshere-hidelinks' => '$1 linkid',
+'whatlinkshere-hideimages' => '$1 faililinkid',
+'whatlinkshere-filters' => 'Fiľtrad',
 
 # Block/unblock
-'blockip'                  => 'Piättee tšäüttijää',
-'ipboptions'               => '2 tunnia:2 hours,1 päivä:1 day,3 päivää:3 days,1 näteľi:1 week,2 näteľiä:2 weeks,1 kuu:1 month,3 kuut:3 months,6 kuut:6 months,1 voosi:1 year,itšiin:infinite',
-'ipblocklist'              => 'Piäteltüd IP-adressid ja tšäüttijänimed',
-'blocklink'                => 'piättee',
-'unblocklink'              => 'rootši piäsüss',
-'change-blocklink'         => 'muutu piätüss',
-'contribslink'             => 'avittamizõd',
-'blocklogpage'             => 'Piätüzlogi',
-'blocklogentry'            => 'piätteli tšäüttijää vai IP-tšislaa [[$1]]. Piättelemin lõpub $2 $3',
-'unblocklogentry'          => 'rootši tšäüttijält $1 muutuzpiäsüss',
+'blockip' => 'Piättee cäüttijää',
+'ipbreason' => 'Süü:',
+'ipboptions' => '2 tunnia:2 hours,1 päivä:1 day,3 päivää:3 days,1 näteľi:1 week,2 näteľiä:2 weeks,1 kuu:1 month,3 kuut:3 months,6 kuut:6 months,1 voosi:1 year,iciin:infinite',
+'ipbotheroption' => 'muu',
+'ipblocklist' => 'Piäteltüd IP-adressid ja cäüttijänimed',
+'blocklist-reason' => 'Süü',
+'ipblocklist-submit' => 'Etsi',
+'infiniteblock' => 'iciin',
+'blocklink' => 'piättee',
+'unblocklink' => 'rooci piäsüss',
+'change-blocklink' => 'muutu piätüss',
+'contribslink' => 'avittamizõd',
+'blocklogpage' => 'Piätüzlogi',
+'blocklogentry' => 'piätteli cäüttijää vai IP-cislaa [[$1]]. Piättelemin lõpub $2 $3',
+'unblocklogentry' => 'rooci cäüttijält $1 muutuzpiäsüss',
 'block-log-flags-nocreate' => 'lukuloomin piäteltü',
+'proxyblocksuccess' => 'On tehtü.',
 
 # Move page
-'movepagetext'     => "Alla õlõvall ruumõll võitta anta tšüľľelle uutt nimiä; kõik tšüľľee istori leeb liikutõttu uuvvõ nimee alle.
-Vanass tšüľľess nõizõb tulõma mešaituztšültši, kumpa näütteeb uuvvõsõ tšültšese.
-Võitta obnovoittaa tšültšese silmell lüüvvävä mešaituhsõd avtomaattisessi uuvõllõ nimelle.
-Kui että taho sitä tehävää avtomaattisessi, mälehtega ettsiää [[Special:DoubleRedirects|kahskõrtaissit]] vai [[Special:BrokenRedirects|katiit]] mešaituhsiit.
+'movepagetext' => "Alla õlõvall ruumõll võitta anta cüľľelle uutt nimiä; kõik cüľľee istori leeb liikutõttu uuvvõ nimee alle.
+Vanass cüľľess nõizõb tulõma mešaituzcülci, kumpa näütteeb uuvvõsõ cülcese.
+Võitta obnovoittaa cülcese silmell lüüvvävä mešaituhsõd avtomaattisessi uuvõllõ nimelle.
+Kui että taho sitä tehävää avtomaattisessi, mälehtega ettsiää [[Special:DoubleRedirects|kahskõrtaissit]] vai [[Special:BrokenRedirects|katciit]] mešaituhsiit.
 Õlõtta vastuussa sihee, jot linkid näütteeväd sinne, kuhõõ ned pitäiziväd näütellää.
 
-Tšültšiä '''eb''' nõizõ liikuttama, kui uusi nimi on jo tšäütennü, muut kuiva kui tšültši on tühjä vai on mešaituz, kummall ebõõ muutuzistoria.
-See täheteb sitä, jot võitta liikuttaa tšüľľee takaz vanalle nimelle kui öhsünettä, mutta että või tširjuttaa eloz õlõvaa tšüľľee päälle.
+Cülciä '''eb''' nõizõ liikuttama, kui uusi nimi on jo cäütennü, muut kuiva kui cülci on tühjä vai on mešaituz, kummall ebõõ muutuzistoria.
+See täheteb sitä, jot võitta liikuttaa cüľľee takaz vanalle nimelle kui öhsünettä, mutta että või cirjuttaa eloz õlõvaa cüľľee päälle.
 
-See saattab õlla suuri ja oottõmizõtoi muutuz populaarnoille tšüľľelle. Õlka nii üvä, obespetšoittõga, jot saatta arvoa sledstvijäd ennee kui liikutta tšüľľee.",
-'movepagetalktext' => "Tšültši ja sene juttutšültši leeväd liikutõtud ühez, '''va kui''':
-*Tseeľitšüľľell on eloz juttutšültši, kumpa ebõõ tühjä, vai
+See saattab õlla suuri ja oottõmizõtoi muutuz populaarnoille cüľľelle. Õlka nii üvä, obespecoittõga, jot saatta arvoa sledstvijäd ennee kui liikutta cüľľee.",
+'movepagetalktext' => "Cülci ja sene juttucülci leeväd liikutõtud ühez, '''va kui''':
+*Tseeľicüľľell on eloz juttucülci, kumpa ebõõ tühjä, vai
 *Jätättä all õlõvaa ruuoo merkkittämättä.
 
-Neill kõhtoill piättä liikuttaa vai ühissää tšüľľee tšäzi.",
-'movearticle'      => 'Liikut tšültši',
-'newtitle'         => 'Uusi nimi tšüľľelee',
-'move-watch'       => 'Katso sitä tšültšiä',
-'movepagebtn'      => 'Liikut tšültši',
-'pagemovedsub'     => 'Liikka tuli valmessi',
-'movepage-moved'   => '\'\'\'"$1" on liikuttu nimelee "$2"\'\'\'',
-'articleexists'    => 'Tseeľitšültši on jo eloz, vai võõbornoi nimi eb kõlpa. Õlka nii üvä ja valittsõga uusi nimi.',
-'talkexists'       => "'''Tšüľľee liikka tuli valmessi, a juttitšültšiä eb õli liikutõttu, ku uuvvõ zagolofkaa all on jo juttutšültši. Juttutšültšije sisälto piättä ühinessä tšäzi.'''",
-'movedto'          => 'liikutõttu',
-'movetalk'         => 'Liikut toož juttutšültši',
-'movelogpage'      => 'Liikkalogi',
-'movereason'       => 'Süü',
-'revertmove'       => 'kummut',
+Neill kõhtoill piättä liikuttaa vai ühissää cüľľee cäzi.",
+'movearticle' => 'Liikut cülci',
+'newtitle' => 'Uusi nimi cüľľelee',
+'move-watch' => 'Katso sitä cülciä',
+'movepagebtn' => 'Liikut cülci',
+'pagemovedsub' => 'Liikka tuli valmessi',
+'movepage-moved' => '\'\'\'"$1" on liikuttu nimelee "$2"\'\'\'',
+'articleexists' => 'Tseeľicülci on jo eloz, vai võõbornoi nimi eb kõlpa. Õlka nii üvä ja valittsõga uusi nimi.',
+'talkexists' => "'''Cüľľee liikka tuli valmessi, a jutticülciä eb õli liikutõttu, ku uuvvõ zagolofkaa all on jo juttucülci. Juttucülcije sisälto piättä ühinessä cäzi.'''",
+'movedto' => 'liikutõttu',
+'movetalk' => 'Liikut toož juttucülci',
+'movelogpage' => 'Liikkalogi',
+'movereason' => 'Süü',
+'revertmove' => 'kummut',
 
 # Export
-'export' => 'Tšültšiďďee väľľää veto',
+'export' => 'Cülciďďee väľľää veto',
+
+# Namespace 8 related
+'allmessagesname' => 'Nimi',
+'allmessages-language' => 'Ceeli:',
+'allmessages-filter-submit' => 'Mee',
 
 # Thumbnails
 'thumbnail-more' => 'Suurõt',
 
+# Special:Import
+'import-upload-filename' => 'Failinimi:',
+'import-comment' => 'Zamecańńa:',
+
 # Tooltip help for the actions
-'tooltip-pt-userpage'             => 'Teďďee tšäüttijätšültši',
-'tooltip-pt-mytalk'               => 'Teďďee juttu-tšültši',
-'tooltip-pt-preferences'          => 'Teďďee koozid',
-'tooltip-pt-watchlist'            => 'Spiiska tšültšissä, kummad muutussia kattsõõtta',
-'tooltip-pt-mycontris'            => 'Spiiska teďďee avittamisiit',
-'tooltip-pt-login'                => 'Müü taritsõmmõ teit süäme tširjuttõma, a ebõõ tarvitõttõva',
-'tooltip-pt-logout'               => 'Tširjut uloz',
-'tooltip-ca-talk'                 => 'Juttu sisällossa',
-'tooltip-ca-edit'                 => 'Tüü võittõ muuttaa sitä tšültšiä.
+'tooltip-pt-userpage' => 'Teďďee cäüttijäcülci',
+'tooltip-pt-mytalk' => 'Teďďee juttu-cülci',
+'tooltip-pt-preferences' => 'Teďďee koozid',
+'tooltip-pt-watchlist' => 'Spiiska cülcissä, kummad muutussia kattsõõtta',
+'tooltip-pt-mycontris' => 'Spiiska teďďee avittamisiit',
+'tooltip-pt-login' => 'Müü taritsõmmõ teit süäme cirjuttõma, a ebõõ tarvitõttõva',
+'tooltip-pt-logout' => 'Cirjut uloz',
+'tooltip-ca-talk' => 'Juttu sisällossa',
+'tooltip-ca-edit' => 'Tüü võittõ muuttaa sitä cülciä.
 Õõ nii üvä, ennee salvomiss, retsenziroittiga!',
-'tooltip-ca-addsection'           => 'Lissä uusi alaõsa',
-'tooltip-ca-viewsource'           => 'Kase tšültši on varjõttu.
-Että või muuttaa tšültšia, mutta võittõ kattsoa sene lähtekoodi.',
-'tooltip-ca-history'              => 'Sene tšüľľee vanad verzijad',
-'tooltip-ca-protect'              => 'Varjaa kase tšültši',
-'tooltip-ca-delete'               => 'Pühi kase tšültši',
-'tooltip-ca-move'                 => 'Liikut kase tšültši',
-'tooltip-ca-watch'                => 'Lissä kase tšültši kattsõspiiskalõõ',
-'tooltip-ca-unwatch'              => 'Paa kase tšültši Teďďee kattsõspiizgalt poiz',
-'tooltip-search'                  => 'Etsi vikissa',
-'tooltip-search-go'               => 'Mee tšüľľelee, kummall on vakurat sesama nimi (kui eloz on)',
-'tooltip-search-fulltext'         => 'Etsi tšültšiltä sitä tekstiä',
-'tooltip-n-mainpage'              => 'Mee esitšüľľelee',
-'tooltip-n-mainpage-description'  => 'Mee esitšüľľelee',
-'tooltip-n-portal'                => 'Juttua projektissa: Mitä tüü võittõ tehä, kuza levvette mitä',
-'tooltip-n-currentevents'         => 'Lugõ soobšeńńad nütšüizess kõhtoiss',
-'tooltip-n-recentchanges'         => 'Spiiska uusissa muutussissa',
-'tooltip-n-randompage'            => 'Avaa tšültšia kõhtõissi',
-'tooltip-n-help'                  => 'Praavila',
-'tooltip-t-whatlinkshere'         => 'Spiiska kõikkissa tšültšissä, kummad tänne näütellä',
-'tooltip-t-recentchangeslinked'   => 'Viimõizõd muuttussõd tšültšillä, kummalõõ on siittä näüteltü',
-'tooltip-feed-rss'                => 'RSS-söötte selle tšüľľelle',
-'tooltip-feed-atom'               => 'Atom-söötte selle tšüľľelle',
-'tooltip-t-contributions'         => 'Näüt spiiska sene tšäüttijää avittamiss',
-'tooltip-t-emailuser'             => 'Lähettega elektropoštia selle tšäüttijälle',
-'tooltip-t-upload'                => 'Laajõngoit failia ülez (загружать файл)',
-'tooltip-t-specialpages'          => 'Spiiska kõikkissa osoobenoissa tšültšissä',
-'tooltip-t-print'                 => 'Sene tšüľľee petšatoittõva verzija',
-'tooltip-t-permalink'             => 'Postojannoi linkki tšüľľee selle verzijalõõ',
-'tooltip-ca-nstab-main'           => 'Näüt artikkelia',
-'tooltip-ca-nstab-user'           => 'Näüt tšäüttijätšültši',
-'tooltip-ca-nstab-special'        => 'Kase on osoobennoi tšültši, tüü ed saa sitä muuttõma',
-'tooltip-ca-nstab-project'        => 'Näüt projektitšültši',
-'tooltip-ca-nstab-image'          => 'Näüt failitšültši',
-'tooltip-ca-nstab-template'       => 'Näüt šablooni',
-'tooltip-ca-nstab-category'       => 'Näüt gruppatšültši',
-'tooltip-minoredit'               => 'Merkit kase peenessi muutuhsõssi',
-'tooltip-save'                    => 'Salvo muutussõd',
-'tooltip-preview'                 => 'Retsenziroitta muutuss. Õõ nii üvä, ennee salvomiss, retsenziroittiga!',
-'tooltip-diff'                    => 'Näüt tehtüd muutuhsõd',
+'tooltip-ca-addsection' => 'Lissä uusi alaõsa',
+'tooltip-ca-viewsource' => 'Kase cülci on varjõttu.
+Että või muuttaa cülcia, mutta võittõ kattsoa sene lähtekoodi.',
+'tooltip-ca-history' => 'Sene cüľľee vanad verzijad',
+'tooltip-ca-protect' => 'Varjaa kase cülci',
+'tooltip-ca-delete' => 'Pühi kase cülci',
+'tooltip-ca-move' => 'Liikut kase cülci',
+'tooltip-ca-watch' => 'Lissä kase cülci kattsõspiiskalõõ',
+'tooltip-ca-unwatch' => 'Paa kase cülci Teďďee kattsõspiizgalt poiz',
+'tooltip-search' => 'Etsi vikissa',
+'tooltip-search-go' => 'Mee cüľľelee, kummall on vakurat sesama nimi (kui eloz on)',
+'tooltip-search-fulltext' => 'Etsi cülciltä sitä tekstiä',
+'tooltip-p-logo' => 'Mee esicüľľelee',
+'tooltip-n-mainpage' => 'Mee esicüľľelee',
+'tooltip-n-mainpage-description' => 'Mee esicüľľelee',
+'tooltip-n-portal' => 'Juttua projektissa: Mitä tüü võittõ tehä, kuza levvette mitä',
+'tooltip-n-currentevents' => 'Lugõ soobšeńńad nücüizess kõhtoiss',
+'tooltip-n-recentchanges' => 'Spiiska uusissa muutussissa',
+'tooltip-n-randompage' => 'Avaa cülcia kõhtõissi',
+'tooltip-n-help' => 'Praavila',
+'tooltip-t-whatlinkshere' => 'Spiiska kõikkissa cülcissä, kummad tänne näütellä',
+'tooltip-t-recentchangeslinked' => 'Viimõizõd muuttussõd cülcillä, kummalõõ on siittä näüteltü',
+'tooltip-feed-rss' => 'RSS-söötte selle cüľľelle',
+'tooltip-feed-atom' => 'Atom-söötte selle cüľľelle',
+'tooltip-t-contributions' => 'Näüt spiiska sene cäüttijää avittamiss',
+'tooltip-t-emailuser' => 'Lähettega elektropoštia selle cäüttijälle',
+'tooltip-t-upload' => 'Laajõngoit failia ülez',
+'tooltip-t-specialpages' => 'Spiiska kõikkissa osoobenoissa cülcissä',
+'tooltip-t-print' => 'Sene cüľľee pecatoittõva verzija',
+'tooltip-t-permalink' => 'Postojannoi linkki cüľľee selle verzijalõõ',
+'tooltip-ca-nstab-main' => 'Näüt artikkelia',
+'tooltip-ca-nstab-user' => 'Näüt cäüttijäcülci',
+'tooltip-ca-nstab-special' => 'Kase on osoobennoi cülci, tüü ed saa sitä muuttõma',
+'tooltip-ca-nstab-project' => 'Näüt projekticülci',
+'tooltip-ca-nstab-image' => 'Näüt failicülci',
+'tooltip-ca-nstab-template' => 'Näüt šablooni',
+'tooltip-ca-nstab-category' => 'Näüt gruppacülci',
+'tooltip-minoredit' => 'Merkit kase peenessi muutuhsõssi',
+'tooltip-save' => 'Salvo muutussõd',
+'tooltip-preview' => 'Retsenziroitta muutuss. Õõ nii üvä, ennee salvomiss, retsenziroittiga!',
+'tooltip-diff' => 'Näüt tehtüd muutuhsõd',
 'tooltip-compareselectedversions' => 'Näütää vahõd 2 valitsõttuďďõ verzijoďďõ väliz',
-'tooltip-watch'                   => 'Lissä kase tšültši kattsõspiizgallõ',
-'tooltip-rollback'                => 'Vääntega tšüľľee teksti vanõmpi verzijalõõ',
-'tooltip-undo'                    => '"Kummut" väänteeb kasene muutusõõ ja avab artikkelii prestavleńńaa.
+'tooltip-watch' => 'Lissä kase cülci kattsõspiizgallõ',
+'tooltip-rollback' => 'Vääntega cüľľee teksti vanõmpi verzijalõõ',
+'tooltip-undo' => '"Kummut" väänteeb kasene muutusõõ ja avab artikkelii prestavleńńaa.
 Toož, võittõ tširjutta väänteüssee süü.',
+'tooltip-summary' => 'Turvotuz',
+
+# Info page
+'pageinfo-subjectpage' => 'Cülci',
 
 # Browsing diffs
 'previousdiff' => '← Vanõpi muutuz',
-'nextdiff'     => 'Uuvvõpi muutuz →',
+'nextdiff' => 'Uuvvõpi muutuz →',
 
 # Media information
 'file-info-size' => '$1 × $2 px, $3, MIME-sortta: $4',
-'file-nohires'   => 'Suurõpaa kuva ebõõ.',
-'svg-long-desc'  => 'SVG-faili $1 × $2 px, failii suuruz: $3',
+'file-nohires' => 'Suurõpaa kuva ebõõ.',
+'svg-long-desc' => 'SVG-faili $1 × $2 px, failii suuruz: $3',
 'show-big-image' => 'Kõrka-rezoľuuttsiin verzija',
 
+# Special:NewFiles
+'ilsubmit' => 'Etsi',
+
 # Bad image list
 'bad_image_list' => 'Spiizgaa formatti on:
 
@@ -601,12 +803,12 @@ Esimein linkki viirulla piäb õllaa linkki kahõpäälizõlõõ faililõõ.
 Kõik muud linkid leeväd pantu panõlõõ nii ku ero.',
 
 # Metadata
-'metadata'          => 'Sisältokuvõtuz',
-'metadata-help'     => 'Kase faili sisältäb lisäinformatsijaa, mikä on lizättü tsifrovoi kamera vai skanera poolt.
+'metadata' => 'Sisältokuvõtuz',
+'metadata-help' => 'Kase faili sisältäb lisäinformatsijaa, mikä on lizättü tsifrovoi kamera vai skanera poolt.
 Kui faili on muutõttu, siiz detaaľid võivad õlla kahõllaizõd muutõtull failill.',
-'metadata-expand'   => 'Näüt lontsõkait detaaľiit',
+'metadata-expand' => 'Näüt lontsõkait detaaľiit',
 'metadata-collapse' => 'Salauta lontsõkait detaaľiit',
-'metadata-fields'   => 'Vahtiaavad platsid õvad vällez kuvatšüľľell, ku sisältotabľittsa on peenettettü.
+'metadata-fields' => 'Vahtiaavad platsid õvad vällez kuvacüľľell, ku sisältotabľittsa on peenettettü.
 * make
 * model
 * datetimeoriginal
@@ -621,21 +823,67 @@ Kui faili on muutõttu, siiz detaaľid võivad õlla kahõllaizõd muutõtull fa
 * gpslongitude
 * gpsaltitude',
 
+# EXIF tags
+'exif-gpstimestamp' => 'GPS-aika',
+'exif-languagecode' => 'Ceeli',
+'exif-iimcategory' => 'Gruppa',
+
+'exif-meteringmode-255' => 'Muu',
+
+'exif-gaincontrol-0' => 'Eb õõ',
+
+'exif-iimcategory-ace' => 'Kunsti ja kulttuuri',
+'exif-iimcategory-hth' => 'Terveüz',
+'exif-iimcategory-pol' => 'Politiikka',
+'exif-iimcategory-wea' => 'Ilma',
+
 # External editor support
-'edit-externally'      => 'Muuttaa sitä failia ulkopoolizõõ prograammiikaa.',
+'edit-externally' => 'Muuttaa sitä failia ulkopoolizõõ prograammiikaa.',
 'edit-externally-help' => '(Kattsoga [//www.mediawiki.org/wiki/Manual:External_editors praavilõd], kui tahotta lisäinformaattsia.)',
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'koko istori',
 'namespacesall' => 'kõik',
-'monthsall'     => 'kõik',
+'monthsall' => 'kõik',
+'limitall' => 'kõik',
+
+# action=purge
+'confirm_purge_button' => 'OK',
+
+# action=watch/unwatch
+'confirm-watch-button' => 'OK',
+'confirm-unwatch-button' => 'OK',
+
+# Table pager
+'table_pager_first' => 'Esimein cülci',
+'table_pager_last' => 'Viimein cülci',
+'table_pager_limit_submit' => 'Mee',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Näüt muutuhsõd',
 'watchlisttools-edit' => 'Muuttaa spiiskaa',
-'watchlisttools-raw'  => 'Muut lähtefaili',
+'watchlisttools-raw' => 'Muut lähtefaili',
+
+# Special:FilePath
+'filepath-page' => 'Faili:',
+'filepath-submit' => 'Mee',
+
+# Special:FileDuplicateSearch
+'fileduplicatesearch-filename' => 'Failinimi:',
+'fileduplicatesearch-submit' => 'Etsi',
 
 # Special:SpecialPages
-'specialpages' => 'Osoobenoid tšüľľed',
+'specialpages' => 'Osoobenoid cüľľed',
+
+# Special:Tags
+'tags-edit' => 'muuttaa',
+
+# HTML forms
+'htmlform-selectorother-other' => 'Muu',
+
+# Feedback
+'feedback-message' => 'Ilmottamin:',
+'feedback-cancel' => 'Otmeńoit',
+'feedback-close' => 'On tehtü',
 
 );
index 1e4980e..0ec7dbe 100644 (file)
@@ -1098,6 +1098,7 @@ Ciste infôrmacion serè publike po tertos.",
 'recentchanges' => 'Dierins candjmints',
 'recentchanges-legend' => 'Tchuzes po les dierins candjmints',
 'recentchanges-summary' => "Shuvoz chal les dierins candjmints k' i gn a yeu dsu {{SITENAME}}.",
+'recentchanges-feed-description' => "Shuvoz so ç' canå ci les dierins candjmints k' i gn a yeu sol wiki.",
 'recentchanges-label-newpage' => "Ci candjmint la est èn ahivaedje d' ene nouve pådje",
 'recentchanges-label-minor' => "Ci n' est k' on ptit candjmint",
 'recentchanges-label-bot' => 'Ci candjmint la a stî fwait pa on robot',
@@ -1192,6 +1193,7 @@ Rivnoz s' i vs plait en erî et s' reberwetez l' fitchî dizo èn ôte no si vos
 'upload-file-error' => 'Divintrinne aroke',
 
 'license' => 'Licince:',
+'license-header' => 'Licince',
 'nolicense' => 'Nole licince tchoezeye',
 'upload_source_file' => ' (on fitchî sol copiutrece da vosse)',
 
index 2aea831..8f77bc5 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Kalmyk (Хальмг)
+/** Kalmyk (хальмг)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
index 2d51ec6..02fd042 100644 (file)
@@ -196,15 +196,15 @@ $messages = array(
 'tog-editsectiononrightclick' => 'באמעגליך פאראגראף ענדערונגען דורכן קוועטשן אויפן רעכטן<br />אויף אפטייל קעפל (JavaScript)',
 'tog-showtoc' => 'ווייז דאס אינהאלט קעסטל<br />(פאר בלעטער מיט מער ווי 3 קעפלעך)',
 'tog-rememberpassword' => 'געדענק מיין אריינלאגירן אין דעם בלעטערער (ביז $1 {{PLURAL:$1|טאָג|טעג}})',
-'tog-watchcreations' => 'צולייגן בלעטער וואס איך באשאף צו מיין אכטונג ליסטע',
+'tog-watchcreations' => 'צ×\95×\9c×\99×\99×\92×\9f ×\91×\9c×¢×\98ער ×\95×\95×\90ס ×\90×\99×\9a ×\91×\90ש×\90×£ ×\90×\95×\9f ×\98עקעס ×\95×\95×\90ס ×\90×\99×\9a ×\9c×\90×\93 ×\90ר×\95×\99×£ ×¦×\95 ×\9e×\99×\99×\9f ×\90×\9b×\98×\95× ×\92 ×\9c×\99ס×\98×¢',
 'tog-watchdefault' => 'אויפפאסן אױטאָמאַטיש די ארטיקלען װאָס איך באַאַרבעט',
-'tog-watchmoves' => 'צולייגן בלעטער וואס איך באוועג צו מיין אכטונג ליסטע',
+'tog-watchmoves' => 'צ×\95×\9c×\99×\99×\92×\9f ×\91×\9c×¢×\98ער ×\95×\95×\90ס ×\90×\99×\9a ×\91×\90×\95×\95×¢×\92 ×\90×\95×\9f ×\98עקעס ×\95×\95×\90ס ×\90×\99×\9a ×\9c×\90×\93 ×\90ר×\95×\99×£ ×¦×\95 ×\9e×\99×\99×\9f ×\90×\9b×\98×\95× ×\92 ×\9c×\99ס×\98×¢',
 'tog-watchdeletion' => 'צולייגן בלעטער וואס איך מעק אויס צו מיין אויפפאסונג ליסטע',
 'tog-minordefault' => 'באגרענעצן אלע רעדאַקטירונגען גרונטלעך אלס מינערדיק',
 'tog-previewontop' => 'צײַג די "פֿאָרויסיגע װײַזונג" גלײַך בײַ דער ערשטער באַאַרבעטונג',
 'tog-previewonfirst' => 'ווייזן פֿאראויסדיגע ווייזונג בײַ דער ערשטער רעדאקטירונג',
 'tog-nocache' => 'מבטל זײַן האַלטן בלעטער אין זאַפאַס',
-'tog-enotifwatchlistpages' => 'שיק מיר א בליצבריוו ווען א בלאט וואס איך פאס אויף ווערט געענדערט',
+'tog-enotifwatchlistpages' => 'שיקט מיר א בליצבריוו ווען א בלאט וואס איך פאס אויף ווערט געענדערט',
 'tog-enotifusertalkpages' => 'שיקט מיר ע-פאסט ווען עס ווערט געענדערט מיין באניצער רעדן בלאט',
 'tog-enotifminoredits' => 'שיקט מיר ע-פאסט אויך פֿאַר מינערדיקע רעדאַקטירונגען פֿון בלעטער',
 'tog-enotifrevealaddr' => 'דעק אויף מיין בליצפאסט אדרעס אין פאסט מודעות',
@@ -242,9 +242,9 @@ $messages = array(
 'editfont-serif' => 'סעריף שריפֿט',
 
 # Dates
-'sunday' => '×\96×\95× ×\98×\90ג',
+'sunday' => '×\96×\95× ×\98×\99ג',
 'monday' => 'מאָנטיג',
-'tuesday' => '×\93×\99נס×\98×\90ג',
+'tuesday' => '×\93×\99נס×\98×\99ג',
 'wednesday' => 'מיטװאָך',
 'thursday' => 'דאָנערשטאג',
 'friday' => 'פרייטיג',
@@ -258,7 +258,7 @@ $messages = array(
 'sat' => 'שבת',
 'january' => 'יאַנואַר',
 'february' => 'פֿעברואַר',
-'march' => '×\9e×\90Ö·רץ',
+'march' => '×\9e×¢רץ',
 'april' => 'אַפּריל',
 'may_long' => 'מײַ',
 'june' => 'יוני',
@@ -282,7 +282,7 @@ $messages = array(
 'december-gen' => 'דעצעמבער',
 'jan' => 'יאַנ׳',
 'feb' => 'פֿעב׳',
-'mar' => '×\9e×\90Ö·ר׳',
+'mar' => '×\9e×¢ר׳',
 'apr' => 'אַפּר׳',
 'may' => 'מײַ',
 'jun' => 'יונ׳',
@@ -1064,6 +1064,7 @@ $2
 'logdelete-selected' => "'''{{PLURAL:$1| אויסדערוויילטע לאג אקציע|אויסדערוויילטע לאג אקציעס}}:'''",
 'revdelete-text' => "'''אויסגעמעקטע רעוויזיעס און געשעענישן וועלן בלייבן אין דער בלאט היסטאריע און די לאגביכער, אבער טיילן פון זייער אינהאלט וועט ווערן אומגרייכלעך צום קהל. '''
 אנדערע סיסאפן אויף {{SITENAME}} וועלן נאך האבן צוטריט צום באהאלטענעם אינהאלט און קענען אים צוריקשטעלן דורך דעם זעלבן אייבערפלאך,  אחוץ ווען מען שטעלט נאך באגרענעצונגען.",
+'revdelete-confirm' => 'זייט אזוי גוט און באשטעטיקט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט די קאנסעקווענצן, און אז איר טוט דאס לויט  [[{{MediaWiki:Policy-url}}|דער פאליסי]].',
 'revdelete-suppress-text' => "באהאלטן זאל בלויז גענוצט ווערן '''נאר''' אין די פאלגענדע פעלער:
 * אויפדעקונג פון פריוואטקייט אינפארמאציע
 * ''היים אדרעסן, טעלעפאן נומערן, אדער סאשעל סעקיורעטי, א.א.וו.:'''",
index 45c578e..e6a6d6c 100644 (file)
@@ -277,7 +277,7 @@ $messages = array(
 'tog-hidepatrolled' => '在最近更改中隐藏已巡查编辑',
 'tog-newpageshidepatrolled' => '在新页面列表中隐藏已巡查页面',
 'tog-extendwatchlist' => '扩大监视列表以显示所有更改而不仅是最近更改',
-'tog-usenewrc' => '启用增强最近更改(需要JavaScript)',
+'tog-usenewrc' => '根据页面分组最近更改和监视列表(需要JavaScript)',
 'tog-numberheadings' => '标题自动编号',
 'tog-showtoolbar' => '显示编辑工具条(需要JavaScript)',
 'tog-editondblclick' => '双击时编辑页面(需要JavaScript)',
@@ -651,6 +651,8 @@ $2',
 管理员对锁定它给出的解释是:“$3”。',
 'invalidtitle-knownnamespace' => '使用名字空间“$2”和文本“$3”的无效标题',
 'invalidtitle-unknownnamespace' => '使用未知名字空间编号$1和文本“$2”的无效标题',
+'exception-nologin' => '未登陆',
+'exception-nologin-text' => '此动作需要先登陆到此 wiki',
 
 # Virus scanner
 'virus-badscanner' => "错误的配置:未知的病毒扫描程序:''$1''",
@@ -1153,7 +1155,7 @@ $1",
 'mergelog' => '合并日志',
 'pagemerge-logentry' => '合并[[$1]]至[[$2]](版本截至$3)',
 'revertmerge' => '解除合并',
-'mergelogpagetext' => '以ä¸\8bæ\98¯ä¸\80个æ\9c\80è¿\91ç\94±ä¸\80个页é\9d¢ç\9a\84修订å\8e\86å\8f²å\90\88并å\88°å\8f¦ä¸\80个页é\9d¢的列表。',
+'mergelogpagetext' => 'ä¸\8bé\9d¢æ\98¯æ\9c\80è¿\91ç\9a\84页é\9d¢å\8e\86å\8f²å\90\88并的列表。',
 
 # Diffs
 'history-title' => '“$1”的版本历史',
@@ -1249,9 +1251,9 @@ $1",
 'changepassword' => '更改密码',
 'prefs-skin' => '皮肤',
 'skin-preview' => '预览',
-'datedefault' => '默认',
+'datedefault' => '默认格式',
 'prefs-beta' => '测试版特色',
-'prefs-datetime' => '日期时间',
+'prefs-datetime' => '日期时间',
 'prefs-labs' => '实验室特色',
 'prefs-user-pages' => '用户页面',
 'prefs-personal' => '用户资料',
@@ -1291,7 +1293,7 @@ $1",
 'timezoneuseoffset' => '其它(指定时差)',
 'timezoneoffset' => '时差¹:',
 'servertime' => '服务器时间:',
-'guesstimezone' => 'ä»\8eæµ\8fè§\88å\99¨å¡«å\86\99',
+'guesstimezone' => '使ç\94¨æµ\8fè§\88å\99¨è®¾ç½®',
 'timezoneregion-africa' => '非洲',
 'timezoneregion-america' => '美洲',
 'timezoneregion-antarctica' => '南极洲',
@@ -1347,10 +1349,10 @@ $1",
 'prefs-advancedrendering' => '高级选项',
 'prefs-advancedsearchoptions' => '高级选项',
 'prefs-advancedwatchlist' => '高级选项',
-'prefs-displayrc' => '显示选项',
-'prefs-displaysearchoptions' => '显示选项',
-'prefs-displaywatchlist' => '显示选项',
-'prefs-diffs' => '差异',
+'prefs-displayrc' => '显示',
+'prefs-displaysearchoptions' => '显示',
+'prefs-displaywatchlist' => '显示',
+'prefs-diffs' => '差异对比',
 
 # User preference: e-mail validation using jQuery
 'email-address-validity-valid' => '电子邮件地址有效',
@@ -2007,14 +2009,13 @@ $1',
 'booksources-invalid-isbn' => '提供的ISBN号码并不正确,请检查原始复制来源号码是否有误。',
 
 # Special:Log
-'specialloguserlabel' => 'æ\93\8dä½\9c者:',
+'specialloguserlabel' => 'æ\89§è¡\8c者:',
 'speciallogtitlelabel' => '目标(标题或用户):',
 'log' => '日志',
 'all-logs-page' => '所有公开日志',
-'alllogstext' => '综合显示{{SITENAME}}所有的可用日志。
-您可以选择日志类型,用户名(区分大小写)或者相关页面(区分大小写)来缩小查询范围。',
+'alllogstext' => '所有{{SITENAME}}公开日志的联合展示。你可以通过选择日志类型、输入用户名(区分大小写)或相关页面(区分大小写)筛选日志条目。',
 'logempty' => '在日志中不存在匹配项。',
-'log-title-wildcard' => 'æ\90\9c索以è¿\99个æ\96\87å­\97å¼\80å§\8b的标题',
+'log-title-wildcard' => 'æ\90\9c索以该æ\96\87å­\97å¼\80头的标题',
 'showhideselectedlogentries' => '显示/隐藏所选日志项',
 
 # Special:AllPages
@@ -2081,7 +2082,7 @@ $1',
 
 # Special:Log/newusers
 'newuserlogpage' => '用户创建日志',
-'newuserlogpagetext' => '本日志是显示新注册用户的日志',
+'newuserlogpagetext' => '这是用户创建的日志。',
 
 # Special:ListGroupRights
 'listgrouprights' => '用户组权限',
@@ -2107,8 +2108,7 @@ $1',
 'mailnologintext' => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
 'emailuser' => '电邮联系',
 'emailpage' => '电邮联系',
-'emailpagetext' => '您可以用下面的表格去寄一封电邮给这位用户。
-您在[[Special:Preferences|您的参数设置]]中所输入的电子邮箱地址将出现在邮件“发件人”一栏中,这样该用户就可以回复您。',
+'emailpagetext' => '你可以使用下面的表格向该用户发送电子邮件信息。你在[[Special:Preferences|你的系统设置]]中输入的电子邮件地址将显示为邮件的“发件人”地址,所以该用户将可以直接回复你。',
 'usermailererror' => 'Mail 对象返回错误:',
 'defemailsubject' => '{{SITENAME}}来自用户“$1”的电子邮件',
 'usermaildisabled' => '用户电邮已停用',
@@ -2225,7 +2225,7 @@ $UNWATCHURL
 'actionfailed' => '操作失败',
 'deletedtext' => '“$1”已经被删除。最近删除的记录请参见$2。',
 'dellogpage' => '删除日志',
-'dellogpagetext' => '以ä¸\8b是最近的删除的列表。',
+'dellogpagetext' => 'ä¸\8bé\9d¢是最近的删除的列表。',
 'deletionlog' => '删除记录',
 'reverted' => '恢复到早期版本',
 'deletecomment' => '原因:',
@@ -2261,9 +2261,9 @@ $UNWATCHURL
 
 # Protect
 'protectlogpage' => '保护日志',
-'protectlogtext' => '以ä¸\8bæ\98¯é¡µé\9d¢ä¿\9dæ\8a¤ç\9a\84æ\9b´æ\94¹æ\97¥å¿\97ã\80\82[[Special:ProtectedPages|ä¿\9dæ\8a¤é¡µå\88\97表]]å\88\97å\87ºç\9b®å\89\8då­\98å\9c¨ç\9a\84页é\9d¢ä¿\9dæ\8a¤。',
+'protectlogtext' => 'ä¸\8bé\9d¢æ\98¯é¡µé\9d¢ä¿\9dæ\8a¤æ\9b´æ\94¹ç\9a\84å\88\97表ã\80\82请è§\81[[Special:ProtectedPages|å\8f\97ä¿\9dæ\8a¤é¡µé\9d¢å\88\97表]]æ\9f¥ç\9c\8bç\9b®å\89\8dæ­£å\9c¨è¿\9bè¡\8cç\9a\84页é\9d¢ä¿\9dæ\8a¤ç\9a\84å\88\97表。',
 'protectedarticle' => '保护“[[$1]]”',
-'modifiedarticleprotection' => 'æ\9b´æ\94¹â\80\9c[[$1]]â\80\9dç\9a\84ä¿\9dæ\8a¤çº§å\88«',
+'modifiedarticleprotection' => 'æ\9b´æ\94¹â\80\9c[[$1]]â\80\9dç\9a\84ä¿\9dæ\8a¤ç­\89级',
 'unprotectedarticle' => '删除“[[$1]]”的保护',
 'movedarticleprotection' => '移动保护设置自“[[$2]]”至“[[$1]]”',
 'protect-title' => '更改“$1”的保护等级',
@@ -2424,7 +2424,7 @@ $1',
 'whatlinkshere-filters' => '过滤器',
 
 # Block/unblock
-'autoblockid' => '自动查封 #$1',
+'autoblockid' => '自动封禁#$1',
 'block' => '封禁用户',
 'unblock' => '解封用户',
 'blockip' => '封禁用户',
@@ -2483,26 +2483,26 @@ $1',
 'blocklist-tempblocks' => '隐藏临时封禁',
 'blocklist-addressblocks' => '隐藏单个IP封禁',
 'blocklist-rangeblocks' => '隐藏IP段封禁',
-'blocklist-timestamp' => '时间',
+'blocklist-timestamp' => '时间',
 'blocklist-target' => '目标',
-'blocklist-expiry' => '期',
-'blocklist-by' => '执行者',
-'blocklist-params' => 'å°\81ç¦\81设置',
+'blocklist-expiry' => '期',
+'blocklist-by' => '封禁管理员',
+'blocklist-params' => 'å°\81ç¦\81è\8c\83å\9b´',
 'blocklist-reason' => '原因',
 'ipblocklist-submit' => '搜索',
 'ipblocklist-localblock' => '本地封禁',
 'ipblocklist-otherblocks' => '其他{{PLURAL:$1|封禁}}',
 'infiniteblock' => '无限期',
 'expiringblock' => '$1 $2到期',
-'anononlyblock' => '仅匿名用户',
-'noautoblockblock' => '禁用自动封禁',
-'createaccountblock' => '禁止创建账户',
-'emailblock' => 'ç¦\81æ­¢ç\94µå­\90é\82®ä»¶',
-'blocklist-nousertalk' => '禁止编辑自己的用户讨论页',
+'anononlyblock' => '仅匿名用户',
+'noautoblockblock' => '自动封禁停用',
+'createaccountblock' => '账户创建停用',
+'emailblock' => 'ç\94µå­\90é\82®ä»¶å\81\9cç\94¨',
+'blocklist-nousertalk' => '不能编辑自己的讨论页面',
 'ipblocklist-empty' => '封禁列表为空。',
 'ipblocklist-no-results' => '请求的IP地址或用户名没有被封禁。',
 'blocklink' => '封禁',
-'unblocklink' => '解é\99¤å°\81ç¦\81',
+'unblocklink' => '解å°\81',
 'change-blocklink' => '更改封禁',
 'contribslink' => '贡献',
 'emaillink' => '发送电邮',
@@ -2510,16 +2510,16 @@ $1',
 $1被封禁的理由是:“$2”',
 'blocklogpage' => '封禁日志',
 'blocklog-showlog' => '该用户曾被封禁。下面提供封禁日志以供参考:',
-'blocklog-showsuppresslog' => '此用户曾被封禁并隐藏。以下列出隐藏日志以供参考:',
-'blocklogentry' => '封禁[[$1]],终止时间为$2$3',
-'reblock-logentry' => '更改[[$1]]的封禁终止时间 $2 $3',
-'blocklogtext' => '此处给出了封禁和解封用户的操作日志,被自动封禁的IP地址不在此表。请查看[[Special:BlockList|封禁列表]]获知当前被封禁的用户和IP地址。',
-'unblocklogentry' => '已解封 $1',
+'blocklog-showsuppresslog' => '该用户曾被封禁并隐藏。下面提供封锁日志以供参考:',
+'blocklogentry' => '封禁[[$1]],到期时间为$2后$3',
+'reblock-logentry' => '更改[[$1]]的封禁设置,到期时间为$2后$3',
+'blocklogtext' => '这是用户封禁和解封操作的日志。自动封禁IP地址没有列出。请见[[Special:BlockList|封禁列表]]查看目前正在进行的阻止和封禁的列表。',
+'unblocklogentry' => '解封$1',
 'block-log-flags-anononly' => '仅限匿名用户',
-'block-log-flags-nocreate' => '停用账户创建',
-'block-log-flags-noautoblock' => '禁用自动封禁',
-'block-log-flags-noemail' => 'ç¦\81æ­¢ç\94µå­\90é\82®ä»¶',
-'block-log-flags-nousertalk' => '禁止编辑自己的用户讨论页',
+'block-log-flags-nocreate' => '账户创建停用',
+'block-log-flags-noautoblock' => '自动封禁停用',
+'block-log-flags-noemail' => 'ç\94µå­\90é\82®ä»¶å\81\9cç\94¨',
+'block-log-flags-nousertalk' => '不能编辑自己的讨论页面',
 'block-log-flags-angry-autoblock' => '已启用增强型自动封禁',
 'block-log-flags-hiddenname' => '隐藏用户名',
 'range_block_disabled' => '管理员执行段封禁的权限已被禁用。',
@@ -2757,10 +2757,10 @@ $1被封禁的理由是:“$2”',
 
 # Import log
 'importlogpage' => '导入日志',
-'importlogpagetext' => 'ç\94±ç®¡ç\90\86å\91\98ä»\8eå\85¶ä»\96wiki导å\85¥ç\9a\84带æ\9c\89ç¼\96è¾\91å\8e\86å\8f²ç\9a\84页é\9d¢。',
+'importlogpagetext' => '管ç\90\86æ\80§ç\9a\84æ\9c\89ç¼\96è¾\91å\8e\86å\8f²ç\9a\84页é\9d¢è\87ªå\85¶ä»\96ç»´å\9fºç\9a\84导å\85¥。',
 'import-logentry-upload' => '以文件上传导入[[$1]]',
 'import-logentry-upload-detail' => '$1个版本',
-'import-logentry-interwiki' => 'è·¨ç«\99导å\85¥ $1',
+'import-logentry-interwiki' => '跨维å\9fº$1',
 'import-logentry-interwiki-detail' => '来自$2的$1个修订',
 
 # JavaScriptTest
@@ -2932,7 +2932,7 @@ $1被封禁的理由是:“$2”',
 
 # Patrol log
 'patrol-log-page' => '巡查日志',
-'patrol-log-header' => 'è¿\99æ\98¯å·²å·¡æ\9f¥ç\9a\84修订ç\89\88æ\9c¬ç\9a\84æ\97¥å¿\97ã\80\82',
+'patrol-log-header' => '这是已巡查版本的日志。',
 'log-show-hide-patrol' => '$1巡查纪录',
 
 # Image deletion
@@ -3652,9 +3652,8 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 # Special:SpecialPages
 'specialpages' => '特殊页面',
 'specialpages-note' => '----
-* 常规特殊页面。
-* <span class="mw-specialpagerestricted">受限特殊页面。</span>
-* <span class="mw-specialpagecached">已缓存特殊页面(可能已过时)。</span>',
+*普通特殊页面。
+*<span class="mw-specialpagerestricted">非公开特殊页面。</span>',
 'specialpages-group-maintenance' => '维护报告',
 'specialpages-group-other' => '其它特殊页面',
 'specialpages-group-login' => '登录/注册',
@@ -3673,27 +3672,27 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'intentionallyblankpage' => '这个页面被故意留为空白',
 
 # External image whitelist
-'external_image_whitelist' => ' #请保留此行文本<pre>
-#在下方书写正则表达式(//中间的部份)
+'external_image_whitelist' => ' #请原样保留本行文字<pre>
+#在下方书写正则表达式片段(//中间的部份)
 #这些规则将与外部(盗链)图像的URL匹配
 #匹配的URL将被显示为图像,否则只会显示链向图像的链接
-#以#开头的行会被视为注释
-#大小写不敏感
+#以#开头的行视为评论
+#不区分大小写
 
-#å\9c¨æ­¤è¡\8cä¸\8aæ\96¹è¾\93å\85¥æ\89\80æ\9c\89ç\9a\84æ­£å\88\99表达å¼\8fã\80\82请ä¿\9dç\95\99æ­¤è¡\8cæ\96\87æ\9c¬</pre>',
+#å\9c¨æ\9c¬è¡\8cä¸\8aé\9d¢è¾\93å\85¥æ\89\80æ\9c\89æ­£å\88\99表达å¼\8fã\80\82请å\8e\9fæ ·ä¿\9dç\95\99æ\9c¬è¡\8cæ\96\87å­\97</pre>',
 
 # Special:Tags
 'tags' => '有效的更改标签',
 'tag-filter' => '[[Special:Tags|标签]]过滤器:',
 'tag-filter-submit' => '过滤器',
 'tags-title' => '标签',
-'tags-intro' => '本页面列出了建站软件可能用来标记编辑的标签及它们的含义。',
+'tags-intro' => '本页面列出了软件可能用于标记编辑的标签和它们的含义。',
 'tags-tag' => '标签名称',
 'tags-display-header' => '更改列表中的表现形式',
 'tags-description-header' => '完整含义说明',
-'tags-hitcount-header' => '标记的更改',
+'tags-hitcount-header' => '标记的更改',
 'tags-edit' => '编辑',
-'tags-hitcount' => '$1更改',
+'tags-hitcount' => '$1更改',
 
 # Special:ComparePages
 'comparepages' => '对比页面',
@@ -3829,4 +3828,6 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'duration-centuries' => '$1个世纪',
 'duration-millennia' => '$1千年',
 
+# Unknown messages
+'lockmanager-fail-svr-acquire' => '无法在服务器 $1 上获得锁',
 );
index 3e567b1..59045cd 100644 (file)
@@ -224,17 +224,17 @@ $messages = array(
 'tog-editsectiononrightclick' => '允許右擊標題編輯段落 (需要JavaScript)',
 'tog-showtoc' => '顯示目錄 (針對一頁超過3個標題的頁面)',
 'tog-rememberpassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})',
-'tog-watchcreations' => '將我建立的頁面添加到我的監視列表中',
-'tog-watchdefault' => '將我更改的頁面添加到我的監視列表中',
-'tog-watchmoves' => 'å°\87æ\88\91移å\8b\95ç\9a\84é \81é\9d¢å\8a å\85¥我的監視列表',
-'tog-watchdeletion' => 'å°\87æ\88\91å\88ªé\99¤ç\9a\84é \81é\9d¢å\8a å\85¥我的監視列表',
+'tog-watchcreations' => '將我建立的頁面和檔案添加到我的監視列表中',
+'tog-watchdefault' => '將我更改的頁面和檔案添加到我的監視列表中',
+'tog-watchmoves' => 'å°\87æ\88\91移å\8b\95ç\9a\84é \81é\9d¢å\92\8cæª\94æ¡\88æ·»å\8a å\88°我的監視列表',
+'tog-watchdeletion' => 'å°\87æ\88\91å\88ªé\99¤ç\9a\84é \81é\9d¢å\92\8cæª\94æ¡\88æ·»å\8a å\88°我的監視列表',
 'tog-minordefault' => '預設將編輯設定為小編輯',
 'tog-previewontop' => '在編輯框上方顯示預覽',
 'tog-previewonfirst' => '第一次編輯時顯示原文內容的預覽',
 'tog-nocache' => '禁止瀏覽器頁面快取',
-'tog-enotifwatchlistpages' => '當在我的監視列表中的頁面改變時發電子郵件給我',
+'tog-enotifwatchlistpages' => 'ç\95¶å\9c¨æ\88\91ç\9a\84ç\9b£è¦\96å\88\97表中ç\9a\84é \81é\9d¢æ\88\96æª\94æ¡\88æ\94¹è®\8aæ\99\82ç\99¼é\9b»å­\90é\83µä»¶çµ¦æ\88\91',
 'tog-enotifusertalkpages' => '當我的對話頁發生改變時發電子郵件給我',
-'tog-enotifminoredits' => '即使是頁面的小修改也向我發電子郵件',
+'tog-enotifminoredits' => '即使是頁面和檔案的小修改也向我發電子郵件',
 'tog-enotifrevealaddr' => '在通知電子郵件中顯示我的電子郵件位址',
 'tog-shownumberswatching' => '顯示監視用戶的數目',
 'tog-oldsig' => '原有簽名:',
@@ -596,6 +596,8 @@ $2',
 管理員鎖定它的解釋是:" $3 "。',
 'invalidtitle-knownnamespace' => '使用名字空間“$2”和文本“$3”的無效標題',
 'invalidtitle-unknownnamespace' => '使用未知名字空間編號$1和文本“$2”的無效標題',
+'exception-nologin' => '未登入',
+'exception-nologin-text' => '你需要登錄此wiki查閲此頁或進行操作。',
 
 # Virus scanner
 'virus-badscanner' => "損壞設定: 未知的病毒掃瞄器: ''$1''",
@@ -1999,7 +2001,7 @@ Template:消除歧義',
 'specialloguserlabel' => '操作者:',
 'speciallogtitlelabel' => '目標(標題或用戶):',
 'log' => '日誌',
-'all-logs-page' => '所有公日誌',
+'all-logs-page' => '所有公日誌',
 'alllogstext' => '綜合顯示 {{SITENAME}} 的上傳、刪除、保護、查封以及站務日誌。',
 'logempty' => '在日誌中不存在匹配項。',
 'log-title-wildcard' => '搜尋以這個文字開始的標題',
@@ -3800,6 +3802,8 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'api-error-empty-file' => '您提交的檔案是空的。',
 'api-error-emptypage' => '不許創建沒有內容的新頁面。',
 'api-error-fetchfileerror' => '內部錯誤:獲取文件時發生錯誤。',
+'api-error-fileexists-forbidden' => '以" $1 "命名的檔案已經存在,並且不能被重寫。',
+'api-error-fileexists-shared-forbidden' => '以" $1 "命名的檔案已經存在於共用檔案儲存庫上,並且不能被重寫。',
 'api-error-file-too-large' => '您提交的檔案太大了。',
 'api-error-filename-tooshort' => '檔案名過短。',
 'api-error-filetype-banned' => '這種類型的檔案是被禁止的。',
index 56d7698..d449d6c 100644 (file)
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to cleans up old database tables, dropping old indexes
+ * and fields.
+ *
+ * @ingroup Maintenance
+ */
 class CleanupAncientTables extends Maintenance {
 
        public function __construct() {
index 6f8e180..b61f6ff 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to clean up broken page links when somebody turns on $wgCapitalLinks.
+ * Clean up broken page links when somebody turns on $wgCapitalLinks.
  *
  * Usage: php cleanupCaps.php [--dry-run]
  * Options:
 
 require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
 
+/**
+ * Maintenance script to clean up broken page links when somebody turns on $wgCapitalLinks.
+ *
+ * @ingroup Maintenance
+ */
 class CapsCleanup extends TableCleanup {
        public function __construct() {
                parent::__construct();
index 687a95c..2beed72 100644 (file)
@@ -1,12 +1,12 @@
 <?php
 /**
- * Script to clean up broken, unparseable upload filenames.
+ * Clean up broken, unparseable upload filenames.
  *
  * Usage: php cleanupImages.php [--fix]
  * Options:
  *   --fix  Actually clean up titles; otherwise just checks for them
  *
- * Copyright (C) 2005-2006 Brion Vibber <brion@pobox.com>
+ * Copyright © 2005-2006 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
 
 require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
 
+/**
+ * Maintenance script to clean up broken, unparseable upload filenames.
+ *
+ * @ingroup Maintenance
+ */
 class ImageCleanup extends TableCleanup {
        protected $defaultParams = array(
                'table' => 'image',
diff --git a/maintenance/cleanupPreferences.php b/maintenance/cleanupPreferences.php
new file mode 100755 (executable)
index 0000000..706f87f
--- /dev/null
@@ -0,0 +1,52 @@
+<?php\r
+/**\r
+ * Remove hidden preferences from the database.\r
+ *\r
+ * This program is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License along\r
+ * with this program; if not, write to the Free Software Foundation, Inc.,\r
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\r
+ * http://www.gnu.org/copyleft/gpl.html\r
+ *\r
+ * @file\r
+ * @author TyA <tya.wiki@gmail.com>\r
+ * @see [[bugzilla:30976]]\r
+ * @ingroup Maintenance\r
+ */\r
+\r
+require_once( dirname( __FILE__ ) . '/Maintenance.php' );\r
+\r
+/**\r
+ * Maintenance script that removes hidden preferences from the database.\r
+ *\r
+ * @ingroup Maintenance\r
+ */\r
+class CleanupPreferences extends Maintenance {\r
+       public function execute() {\r
+               global $wgHiddenPrefs;\r
+\r
+               $dbw = wfGetDB( DB_MASTER );\r
+               $dbw->begin();\r
+               foreach( $wgHiddenPrefs as $item ) {\r
+                       $dbw->delete(\r
+                               'user_properties',\r
+                               array( 'up_property' => $item ),\r
+                               __METHOD__\r
+                       );\r
+               };\r
+               $dbw->commit();\r
+               $this->output( "Finished!\n" );\r
+       }\r
+}\r
+\r
+$maintClass = 'CleanupPreferences'; // Tells it to run the class\r
+require_once( RUN_MAINTENANCE_IF_MAIN );\r
index fb8afd2..b339bfc 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
- * Maintenance script to remove cache entries for removed ResourceLoader modules
- * from the database
+ * Remove cache entries for removed ResourceLoader modules from the database.
  *
  * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to remove cache entries for removed ResourceLoader modules
+ * from the database.
+ *
+ * @ingroup Maintenance
+ */
 class CleanupRemovedModules extends Maintenance {
 
        public function __construct() {
index f104899..42d8440 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Cleanup all spam from a given hostname
+ * Cleanup all spam from a given hostname.
  *
  * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to cleanup all spam from a given hostname.
+ *
+ * @ingroup Maintenance
+ */
 class CleanupSpam extends Maintenance {
 
        public function __construct() {
index 1c27976..898bdf4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Generic table cleanup class. Already subclasses maintenance
+ * Generic class to cleanup a database table.
  *
  * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Generic class to cleanup a database table. Already subclasses Maintenance.
+ *
+ * @ingroup Maintenance
+ */
 class TableCleanup extends Maintenance {
        protected $defaultParams = array(
                'table' => 'page',
index 4fc6415..a2dc3a3 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to clean up broken, unparseable titles.
+ * Clean up broken, unparseable titles.
  *
  * Usage: php cleanupTitles.php [--fix]
  * Options:
 
 require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
 
+/**
+ * Maintenance script to clean up broken, unparseable titles.
+ *
+ * @ingroup Maintenance
+ */
 class TitleCleanup extends TableCleanup {
        public function __construct() {
                parent::__construct();
index c8d8924..32377b6 100644 (file)
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to remove old or broken uploads from temporary uploaded
+ * file storage and clean up associated database records.
+ *
+ * @ingroup Maintenance
+ */
 class UploadStashCleanup extends Maintenance {
 
        public function __construct() {
index a9b20fe..840337c 100644 (file)
@@ -1,12 +1,12 @@
 <?php
 /**
- * Script to remove broken, unparseable titles in the Watchlist.
+ * Remove broken, unparseable titles in the watchlist table.
  *
  * Usage: php cleanupWatchlist.php [--fix]
  * Options:
  *   --fix  Actually remove entries; without will only report.
  *
- * Copyright (C) 2005,2006 Brion Vibber <brion@pobox.com>
+ * Copyright © 2005,2006 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
 
 require_once( dirname( __FILE__ ) . '/cleanupTable.inc' );
 
+/**
+ * Maintenance script to remove broken, unparseable titles in the watchlist table.
+ *
+ * @ingroup Maintenance
+ */
 class WatchlistCleanup extends TableCleanup {
        protected $defaultParams = array(
                'table' => 'watchlist',
index 953bd4c..638a475 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
- * This script is used to clear the interwiki links for ALL languages in
- * the cache.
+ * Clear the cache of interwiki prefixes for all local wikis.
  *
  * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to clear the cache of interwiki prefixes for all local wikis.
+ *
+ * @ingroup Maintenance
+ */
 class ClearInterwikiCache extends Maintenance {
 
        public function __construct() {
index 61314e6..2ed5a67 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * This script remove all statistics tracking from the cache
+ * Removes all statistics tracking from the cache.
  *
  * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to remove all statistics tracking from the cache.
+ *
+ * @ingroup Maintenance
+ */
 class clear_stats extends Maintenance {
 
        public function __construct() {
index 4fe4e4d..9d7f5c7 100644 (file)
@@ -6,8 +6,9 @@
  *
  * Templates etc are pulled from the local wiki database, not from the dump.
  *
- * Copyright (C) 2011 Platonides - http://www.mediawiki.org/
- * 
+ * Copyright © 2011 Platonides
+ * 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
  * @file
  * @ingroup Maintenance
  */
+
 require_once( dirname( __FILE__ ) . '/dumpIterator.php' );
 
+/**
+ * Maintenance script to take page text out of an XML dump file and render
+ * basic HTML out to files.
+ *
+ * @ingroup Maintenance
+ */
 class CompareParsers extends DumpIterator {
 
        private $count = 0;
@@ -51,10 +58,10 @@ class CompareParsers extends DumpIterator {
                if ( $this->hasOption('save-failed') ) {
                        $this->saveFailed = $this->getOption('save-failed');
                }
-               
+
                $this->stripParametersEnabled = $this->hasOption( 'strip-parameters' );
                $this->showParsedOutput = $this->hasOption( 'show-parsed-output' );
-               
+
                $this->showDiff = $this->hasOption( 'show-diff' );
                if ( $this->showDiff ) {
                        $bin = $this->getOption( 'diff-bin', getenv( 'DIFF' ) );
@@ -63,10 +70,10 @@ class CompareParsers extends DumpIterator {
                                $wgDiff = $bin;
                        }
                }
-               
-               $user = new User();             
+
+               $user = new User();
                $this->options = ParserOptions::newFromUser( $user );
-               
+
                if ( $this->hasOption( 'tidy' ) ) {
                        global $wgUseTidy;
                        if ( !$wgUseTidy ) {
@@ -74,46 +81,46 @@ class CompareParsers extends DumpIterator {
                        }
                        $this->options->setTidy( true );
                }
-               
+
                $this->failed = 0;
        }
-       
-       public function conclusions() { 
+
+       public function conclusions() {
                $this->error( "{$this->failed} failed revisions out of {$this->count}" );
                if ($this->count > 0)
                        $this->output( " (" . ( $this->failed / $this->count ) . "%)\n" );
        }
-       
+
        function stripParameters( $text ) {
                if ( !$this->stripParametersEnabled ) {
                        return $text;
                }
                return preg_replace( '/(<a) [^>]+>/', '$1>', $text );
        }
-       
+
        /**
         * Callback function for each revision, parse with both parsers and compare
         * @param $rev Revision
         */
        public function processRevision( $rev ) {
                $title = $rev->getTitle();
-                               
+
                $parser1Name = $this->getOption( 'parser1' );
                $parser2Name = $this->getOption( 'parser2' );
-               
+
                self::checkParserLocally( $parser1Name );
                self::checkParserLocally( $parser2Name );
-               
+
                $parser1 = new $parser1Name();
                $parser2 = new $parser2Name();
-               
+
                $output1 = $parser1->parse( $rev->getText(), $title, $this->options );
                $output2 = $parser2->parse( $rev->getText(), $title, $this->options );
 
                if ( $output1->getText() != $output2->getText() ) {
                        $this->failed++;
                        $this->error( "Parsing for {$title->getPrefixedText()} differs\n" );
-                       
+
                        if ( $this->saveFailed ) {
                                file_put_contents( $this->saveFailed . '/' . rawurlencode( $title->getPrefixedText() ) . ".txt", $rev->getText());
                        }
@@ -127,7 +134,7 @@ class CompareParsers extends DumpIterator {
                        }
                }
        }
-       
+
        private static function checkParserLocally( $parserName ) {
                /* Look for the parser in a file appropiately named in the current folder */
                if ( !class_exists( $parserName ) && file_exists( "$parserName.php" ) ) {
index 530b5ca..548a33b 100644 (file)
@@ -42,6 +42,9 @@ class CopyFileBackend extends Maintenance {
                $this->addOption( 'dst', 'Backend where files should be copied to', true, true );
                $this->addOption( 'containers', 'Pipe separated list of containers', true, true );
                $this->addOption( 'subdir', 'Only do items in this child directory', false, true );
+               $this->addOption( 'ratefile', 'File to check periodically for batch size', false, true );
+               $this->addOption( 'skiphash', 'Skip SHA-1 sync checks for files' );
+               $this->addOption( 'missingonly', 'Only copy files missing from destination listing' );
                $this->setBatchSize( 50 );
        }
 
@@ -51,6 +54,8 @@ class CopyFileBackend extends Maintenance {
                $containers = explode( '|', $this->getOption( 'containers' ) );
                $subDir = $this->getOption( rtrim( 'subdir', '/' ), '' );
 
+               $rateFile = $this->getOption( 'ratefile' );
+
                $count = 0;
                foreach ( $containers as $container ) {
                        if ( $subDir != '' ) {
@@ -61,14 +66,39 @@ class CopyFileBackend extends Maintenance {
                                $this->output( "Doing container '$container'...\n" );
                        }
 
-                       $dir = $src->getRootStoragePath() . "/$backendRel";
-                       $srcPathsRel = $src->getFileList( array( 'dir' => $dir ) );
+                       $srcPathsRel = $src->getFileList( array(
+                               'dir' => $src->getRootStoragePath() . "/$backendRel" ) );
                        if ( $srcPathsRel === null ) {
                                $this->error( "Could not list files in $container.", 1 ); // die
                        }
 
+                       // Do a listing comparison if specified
+                       if ( $this->hasOption( 'missingonly' ) ) {
+                               $relFilesSrc = array();
+                               $relFilesDst = array();
+                               foreach ( $srcPathsRel as $srcPathRel ) {
+                                       $relFilesSrc[] = $srcPathRel;
+                               }
+                               $dstPathsRel = $dst->getFileList( array(
+                                       'dir' => $dst->getRootStoragePath() . "/$backendRel" ) );
+                               if ( $dstPathsRel === null ) {
+                                       $this->error( "Could not list files in $container.", 1 ); // die
+                               }
+                               foreach ( $dstPathsRel as $dstPathRel ) {
+                                       $relFilesDst[] = $dstPathRel;
+                               }
+                               // Only copy the missing files over in the next loop
+                               $srcPathsRel = array_diff( $relFilesSrc, $relFilesDst );
+                               $this->output( count( $srcPathsRel ) . " file(s) need to be copied.\n" );
+                       }
+
                        $batchPaths = array();
                        foreach ( $srcPathsRel as $srcPathRel ) {
+                               // Check up on the rate file periodically to adjust the concurrency
+                               if ( $rateFile && ( !$count || ( $count % 500 ) == 0 ) ) {
+                                       $this->mBatchSize = max( 1, (int)file_get_contents( $rateFile ) );
+                                       $this->output( "Batch size is now {$this->mBatchSize}.\n" );
+                               }
                                $batchPaths[$srcPathRel] = 1; // remove duplicates
                                if ( count( $batchPaths ) >= $this->mBatchSize ) {
                                        $this->copyFileBatch( array_keys( $batchPaths ), $backendRel, $src, $dst );
@@ -96,6 +126,7 @@ class CopyFileBackend extends Maintenance {
        ) {
                $ops = array();
                $fsFiles = array();
+               $copiedRel = array(); // for output message
                foreach ( $srcPathsRel as $srcPathRel ) {
                        $srcPath = $src->getRootStoragePath() . "/$backendRel/$srcPathRel";
                        $dstPath = $dst->getRootStoragePath() . "/$backendRel/$srcPathRel";
@@ -117,26 +148,35 @@ class CopyFileBackend extends Maintenance {
                        }
                        $ops[] = array( 'op' => 'store',
                                'src' => $fsFile->getPath(), 'dst' => $dstPath, 'overwrite' => 1 );
+                       $copiedRel[] = $srcPathRel;
                }
 
-               $status = $dst->doOperations( $ops, array( 'nonJournaled' => 1 ) );
+               $t_start = microtime( true );
+               $status = $dst->doQuickOperations( $ops );
+               if ( !$status->isOK() ) {
+                       sleep( 10 ); // wait and retry copy again
+                       $status = $dst->doQuickOperations( $ops );
+               }
+               $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( !$status->isOK() ) {
                        $this->error( print_r( $status->getErrorsArray(), true ) );
                        $this->error( "Could not copy file batch.", 1 ); // die
-               } else {
-                       $this->output( "Copied these file(s):\n" . implode( "\n", $srcPathsRel ) . "\n\n" );
+               } elseif ( count( $copiedRel ) ) {
+                       $this->output( "\nCopied these file(s) [{$ellapsed_ms}ms]:\n" .
+                               implode( "\n", $copiedRel ) . "\n\n" );
                }
        }
 
        protected function filesAreSame( FileBackend $src, FileBackend $dst, $sPath, $dPath ) {
+               $skipHash = $this->hasOption( 'skiphash' );
                return (
                        ( $src->fileExists( array( 'src' => $sPath, 'latest' => 1 ) )
                                === $dst->fileExists( array( 'src' => $dPath, 'latest' => 1 ) ) // short-circuit
                        ) && ( $src->getFileSize( array( 'src' => $sPath, 'latest' => 1 ) )
                                === $dst->getFileSize( array( 'src' => $dPath, 'latest' => 1 ) ) // short-circuit
-                       ) && ( $src->getFileSha1Base36( array( 'src' => $sPath, 'latest' => 1 ) )
+                       ) && ( $skipHash || ( $src->getFileSha1Base36( array( 'src' => $sPath, 'latest' => 1 ) )
                                === $dst->getFileSha1Base36( array( 'src' => $dPath, 'latest' => 1 ) )
-                       )
+                       ) )
                );
        }
 }
index 197ffab..414d41a 100644 (file)
@@ -1,7 +1,6 @@
 <?php
-
 /**
- * Delete archived (deleted from public) revisions from the database
+ * Helper methods for the deleteArchivedRevisions.php maintenance script.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
+/**
+ * Helper methods for the deleteArchivedRevisions.php maintenance script.
+ *
+ * @ingroup Maintenance
+ */
 class DeleteArchivedRevisionsImplementation {
 
        /**
index 8963ae1..2a99fa1 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to delete a batch of pages.
+ *
+ * @ingroup Maintenance
+ */
 class DeleteBatch extends Maintenance {
 
        public function __construct() {
index 4f5889b..540d225 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that deletes all pages in the MediaWiki namespace
+ * which were last edited by "MediaWiki default".
+ *
+ * @ingroup Maintenance
+ */
 class DeleteDefaultMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
index 007f0d1..2029b57 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * This script delete image information from the cache.
+ * Delete image information from the object cache.
  *
  * Usage example:
  * php deleteImageMemcached.php --until "2005-09-05 00:00:00" --sleep 0
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that deletes image information from the object cache.
+ *
+ * @ingroup Maintenance
+ */
 class DeleteImageCache extends Maintenance {
        public function __construct() {
                parent::__construct();
index 8347a29..45a6b34 100644 (file)
@@ -1,5 +1,4 @@
 <?php
-
 /**
  * Delete old (non-current) revisions from the database
  *
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Rob Church <robchur@gmail.com>
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that deletes old (non-current) revisions from the database.
+ *
+ * @ingroup Maintenance
+ */
 class DeleteOldRevisions extends Maintenance {
        public function __construct() {
                parent::__construct();
index 9fe5794..13b9c91 100644 (file)
@@ -1,8 +1,7 @@
 <?php
-
 /**
- * Maintenance script to delete revisions which refer to a nonexisting page
- * Sometimes manual deletion done in a rush leaves crap in the database
+ * Delete revisions which refer to a nonexisting page.
+ * Sometimes manual deletion done in a rush leaves crap in the database.
  *
  * 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
@@ -19,6 +18,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  * @author Rob Church <robchur@gmail.com>
  * @todo More efficient cleanup of text records
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that deletes revisions which refer to a nonexisting page.
+ *
+ * @ingroup Maintenance
+ */
 class DeleteOrphanedRevisions extends Maintenance {
        public function __construct() {
                parent::__construct();
index 5e8ecaa..fe3b515 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that deletes one or more revisions by moving them
+ * to the archive table.
+ *
+ * @ingroup Maintenance
+ */
 class DeleteRevision extends Maintenance {
 
        public function __construct() {
index 447d3bd..162dcb4 100644 (file)
@@ -1,10 +1,6 @@
 <?php
 /**
- * We want to make this whole thing as seamless as possible to the
- * end-user. Unfortunately, we can't do _all_ of the work in the class
- * because A) included files are not in global scope, but in the scope
- * of their caller, and B) MediaWiki has way too many globals. So instead
- * we'll kinda fake it, and do the requires() inline. <3 PHP
+ * Delete self-references to $wgServer from the externallinks table.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
-
+/**
+ * Maintenance script that deletes self-references to $wgServer
+ * from the externallinks table.
+ *
+ * @ingroup Maintenance
+ */
 class DeleteSelfExternals extends Maintenance {
        public function __construct() {
                parent::__construct();
index 470bc56..4c04d86 100644 (file)
@@ -4,7 +4,8 @@
  * Used as a base class for CompareParsers and PreprocessDump.
  * We implement below the simple task of searching inside a dump.
  *
- * Copyright (C) 2011 Platonides - http://www.mediawiki.org/
+ * Copyright © 2011 Platonides
+ * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Base class for interating over a dump.
+ *
+ * @ingroup Maintenance
+ */
 abstract class DumpIterator extends Maintenance {
 
        private $count = 0;
@@ -141,6 +147,11 @@ abstract class DumpIterator extends Maintenance {
        abstract public function processRevision( $rev );
 }
 
+/**
+ * Maintenance script that runs a regex in the revisions from a dump.
+ *
+ * @ingroup Maintenance
+ */
 class SearchDump extends DumpIterator {
 
        public function __construct() {
index 0101dc8..ad440e7 100644 (file)
@@ -1,8 +1,5 @@
 <?php
 /**
- * Copyright (C) 2005 Brion Vibber <brion@pobox.com>
- * http://www.mediawiki.org/
- *
  * Quick demo hack to generate a plaintext link dump,
  * per the proposed wiki link database standard:
  * http://www.usemod.com/cgi-bin/mb.pl?LinkDatabase
@@ -11,6 +8,9 @@
  * Does not include interwiki or URL links.
  * Dumps ASCII text to stdout; command-line.
  *
+ * Copyright © 2005 Brion Vibber <brion@pobox.com>
+ * http://www.mediawiki.org/
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that generates a plaintext link dump.
+ *
+ * @ingroup Maintenance
+ */
 class DumpLinks extends Maintenance {
        public function __construct() {
                parent::__construct();
index f5abcd1..5dbb5e2 100644 (file)
@@ -3,7 +3,7 @@
  * Quickie page name dump script for SisterSites usage.
  * http://www.eekim.com/cgi-bin/wiki.pl?SisterSites
  *
- * Copyright (C) 2006 Brion Vibber <brion@pobox.com>
+ * Copyright © 2006 Brion Vibber <brion@pobox.com>
  * http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that generates a page name dump for SisterSites usage.
+ *
+ * @ingroup Maintenance
+ */
 class DumpSisterSites extends Maintenance {
        public function __construct() {
                parent::__construct();
index 919bb4d..b16b0c2 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Dump a the list of files uploaded, for feeding to tar or similar
+ * Dump a the list of files uploaded, for feeding to tar or similar.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to dump a the list of files uploaded,
+ * for feeding to tar or similar.
+ *
+ * @ingroup Maintenance
+ */
 class UploadDumper extends Maintenance {
        public function __construct() {
                parent::__construct();
index 8857371..211dc4e 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Make an edit
+ * Make a page edit.
  *
  * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to make a page edit.
+ *
+ * @ingroup Maintenance
+ */
 class EditCLI extends Maintenance {
        public function __construct() {
                parent::__construct();
index 3b43bcd..2833081 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Communications protocol...
+ * Communications protocol.
  * This is used by dumpTextPass.php when the --spawn option is present.
  *
  * This program is free software; you can redistribute it and/or modify
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script used to fetch page text in a subprocess.
+ *
+ * @ingroup Maintenance
+ */
 class FetchText extends Maintenance {
        public function __construct() {
                parent::__construct();
index b16bd95..69a2a78 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Maintenance script to test fileop performance
+ * Test for fileop performance.
  *
  * 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
@@ -27,6 +27,11 @@ error_reporting( E_ALL );
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script to test fileop performance.
+ *
+ * @ingroup Maintenance
+ */
 class TestFileOpPerformance extends Maintenance {
        public function __construct() {
                parent::__construct();
index b8512e5..e4fa5de 100644 (file)
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that compares documented and actually present mismatches.
+ *
+ * @ingroup Maintenance
+ */
 class FindHooks extends Maintenance {
        public function __construct() {
                parent::__construct();
index c1d14dd..e52c6c3 100644 (file)
@@ -1,8 +1,8 @@
 <?php
 /**
- * Script to fix double redirects.
+ * Fix double redirects.
  *
- * Copyright (C) 2011 Ilmari Karonen <nospam@vyznev.net>
+ * Copyright © 2011 Ilmari Karonen <nospam@vyznev.net>
  * http://www.mediawiki.org/
  *
  * This program is free software; you can redistribute it and/or modify
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that fixes double redirects.
+ *
+ * @ingroup Maintenance
+ */
 class FixDoubleRedirects extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Script to fix double redirects";
                $this->addOption( 'async', 'Don\'t fix anything directly, just queue the jobs' );
                $this->addOption( 'title', 'Fix only redirects pointing to this page', false, true );
-               $this->addOption( 'dry-run', 'Perform a dry run, fix nothing' );                
+               $this->addOption( 'dry-run', 'Perform a dry run, fix nothing' );
        }
 
        public function execute() {
index 0cabe81..d247862 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that fixes any entriy for protocol-relative URLs
+ * in the externallinks table.
+ *
+ * @ingroup Maintenance
+ */
 class FixExtLinksProtocolRelative extends LoggedUpdateMaintenance {
        public function __construct() {
                parent::__construct();
index 7731d3e..de6f652 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Fix erroneous page_latest values due to slave desynchronisation.
+ *
  * 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
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that fixes erroneous page_latest values
+ * due to slave desynchronisation.
+ *
+ * @ingroup Maintenance
+ */
 class FixSlaveDesync extends Maintenance {
        public function __construct() {
                parent::__construct();
index 3e3bd0a..3a95251 100644 (file)
@@ -1,10 +1,10 @@
 <?php
 /**
- * This script fixes timestamp corruption caused by one or more webservers
- * temporarily being set to the wrong time. The time offset must be known and
- * consistent. Start and end times (in 14-character format) restrict the search,
- * and must bracket the damage. There must be a majority of good timestamps in the
- * search period.
+ * Fixes timestamp corruption caused by one or more webservers temporarily
+ * being set to the wrong time.
+ * The time offset must be known and consistent. Start and end times
+ * (in 14-character format) restrict the search, and must bracket the damage.
+ * There must be a majority of good timestamps in the search period.
  *
  * 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
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that fixes timestamp corruption caused by one or
+ * more webservers temporarily being set to the wrong time.
+ *
+ * @ingroup Maintenance
+ */
 class FixTimestamps extends Maintenance {
        public function __construct() {
                parent::__construct();
index d4ff7c2..4eca396 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 require_once( dirname( __FILE__ ) . '/Maintenance.php' );
 
+/**
+ * Maintenance script that fixes the user_registration field.
+ *
+ * @ingroup Maintenance
+ */
 class FixUserRegistration extends Maintenance {
        public function __construct() {
                parent::__construct();
index fa98813..474caab 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Format RELEASE-NOTE file to wiki text or HTML markup.
+ *
  * 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
 
 require_once( dirname( __FILE__ ) .'/Maintenance.php' );
 
+/**
+ * Maintenance script that formats RELEASE-NOTE file to wiki text or HTML markup.
+ *
+ * @ingroup Maintenance
+ */
 class MaintenanceFormatInstallDoc extends Maintenance {
        function __construct() {
                parent::__construct();
index da6798e..2c38ed9 100644 (file)
@@ -35,7 +35,7 @@ class JSParseHelper extends Maintenance {
                if ( $this->hasArg() ) {
                        $files = $this->mArgs;
                } else {
-                       $this->maybeHelp( true ); // @fixme this is a lame API :)
+                       $this->maybeHelp( true ); // @todo fixme this is a lame API :)
                        exit( 1 ); // it should exit from the above first...
                }
 
index befff60..2e381aa 100644 (file)
@@ -387,6 +387,7 @@ $wgMessageStructure = array(
                'badarticleerror',
                'cannotdelete',
                'cannotdelete-title',
+               'delete-hook-aborted',
                'badtitle',
                'badtitletext',
                'perfcached',
@@ -3701,6 +3702,8 @@ $wgMessageStructure = array(
                'api-error-empty-file',
                'api-error-emptypage',
                'api-error-fetchfileerror',
+               'api-error-fileexists-forbidden',
+               'api-error-fileexists-shared-forbidden',
                'api-error-file-too-large',
                'api-error-filename-tooshort',
                'api-error-filetype-banned',
index 876f28e..464de10 100644 (file)
@@ -66,7 +66,8 @@ class CLIParser extends Maintenance {
                $input_file = $this->getArg( 0, $php_stdin );
 
                if( $input_file === $php_stdin ) {
-                       $this->error( basename(__FILE__) .": warning: reading wikitext from STDIN\n" );
+                       $ctrl = wfIsWindows() ? 'CTRL+Z' : 'CTRL+D';
+                       $this->error( basename(__FILE__) .": warning: reading wikitext from STDIN. Press $ctrl to parse.\n" );
                }
 
                return file_get_contents( $input_file );
index fe3b35c..7e3d8c4 100644 (file)
@@ -189,7 +189,7 @@ class ImageBuilder extends Maintenance {
                                $filename = $altname;
                                $this->output( "Estimating transcoding... $altname\n" );
                        } else {
-                               # @FIXME: create renameFile()
+                               # @todo FIXME: create renameFile()
                                $filename = $this->renameFile( $filename );
                        }
                }
index 0d5c9de..1af33e6 100644 (file)
@@ -39,12 +39,11 @@ class SyncFileBackend extends Maintenance {
                $src = FileBackendGroup::singleton()->get( $this->getOption( 'src' ) );
                $dst = FileBackendGroup::singleton()->get( $this->getOption( 'dst' ) );
 
-               $posFile = $this->getOption( 'posdir' )
-                       ? $this->getOption( 'posdir' ) . '/' . wfWikiID()
-                       : false;
+               $posDir = $this->getOption( 'posdir' );
+               $posFile = $posDir ? $posDir . '/' . wfWikiID() : false;
 
                $start = $this->getOption( 'start', 0 );
-               if ( !$start && $posFile ) {
+               if ( !$start && $posFile && is_dir( $posDir ) ) {
                        $start = is_file( $posFile )
                                ? (int)trim( file_get_contents( $posFile ) )
                                : 0;
@@ -66,8 +65,11 @@ class SyncFileBackend extends Maintenance {
 
                // Update the sync position file
                if ( $startFromPosFile && $lastOKPos >= $start ) { // successfully advanced
-                       file_put_contents( $posFile, $lastOKPos, LOCK_EX );
-                       $this->output( "Updated journal position file.\n" );
+                       if ( file_put_contents( $posFile, $lastOKPos, LOCK_EX ) !== false ) {
+                               $this->output( "Updated journal position file.\n" );
+                       } else {
+                               $this->output( "Could not update journal position file.\n" );
+                       }
                }
 
                if ( $lastOKPos === false ) {
@@ -198,10 +200,13 @@ class SyncFileBackend extends Maintenance {
                        }
                }
 
+               $t_start = microtime( true );
                $status->merge( $dst->doOperations( $ops,
                        array( 'nonLocking' => 1, 'nonJournaled' => 1 ) ) );
+               $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( $status->isOK() && $this->getOption( 'verbose' ) ) {
-                       $this->output( "Synchronized these file(s):\n" . implode( "\n", $dPaths ) . "\n" );
+                       $this->output( "Synchronized these file(s) [{$ellapsed_ms}ms]:\n" .
+                               implode( "\n", $dPaths ) . "\n" );
                }
 
                return $status;
index 6160a30..fd425fe 100644 (file)
@@ -79,13 +79,19 @@ TEXT;
                                        $collationConds,
                                        __METHOD__
                                );
-
-                               if ( $count == 0 ) {
-                                       $this->output( "Collations up-to-date.\n" );
-                                       return;
-                               }
-                               $this->output( "Fixing collation for $count rows.\n" );
+                       } else {
+                               $count = $dbw->estimateRowCount(
+                                       'categorylinks',
+                                       '',
+                                       $collationConds,
+                                       __METHOD__
+                               );
+                       }
+                       if ( $count == 0 ) {
+                               $this->output( "Collations up-to-date.\n" );
+                               return;
                        }
+                       $this->output( "Fixing collation for $count rows.\n" );
                }
 
                $count = 0;
index 9a80e94..fef8c4b 100644 (file)
Binary files a/resources/jquery.tipsy/images/tipsy.png and b/resources/jquery.tipsy/images/tipsy.png differ
index e46467b..28eb1fc 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-disabled-blue.png and b/resources/jquery.ui/themes/vector/images/button-disabled-blue.png differ
index 7125691..0e29d85 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-disabled-green.png and b/resources/jquery.ui/themes/vector/images/button-disabled-green.png differ
index 9d01bbc..ede6998 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-disabled-red.png and b/resources/jquery.ui/themes/vector/images/button-disabled-red.png differ
index bfaf84e..e4e4ec1 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-disabled.png and b/resources/jquery.ui/themes/vector/images/button-disabled.png differ
index 781a281..766e574 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-down-blue.png and b/resources/jquery.ui/themes/vector/images/button-down-blue.png differ
index 60bba29..90969c3 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-down-green.png and b/resources/jquery.ui/themes/vector/images/button-down-green.png differ
index 54c847d..f625729 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-down-red.png and b/resources/jquery.ui/themes/vector/images/button-down-red.png differ
index 29508a0..c646757 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-down.png and b/resources/jquery.ui/themes/vector/images/button-down.png differ
index a5fdd7d..109907f 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-off-green.png and b/resources/jquery.ui/themes/vector/images/button-off-green.png differ
index 89a0e9a..cc5eb11 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-off.png and b/resources/jquery.ui/themes/vector/images/button-off.png differ
index fbde737..47a0b1b 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-over-green.png and b/resources/jquery.ui/themes/vector/images/button-over-green.png differ
index b2d4c0b..a244536 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-over-red.png and b/resources/jquery.ui/themes/vector/images/button-over-red.png differ
index 2400f62..558f1f8 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/button-over.png and b/resources/jquery.ui/themes/vector/images/button-over.png differ
index b36dafb..ef0dd9e 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/close.png and b/resources/jquery.ui/themes/vector/images/close.png differ
index 2146cb0..09de537 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_flat_15_cd0a0a_40x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_flat_15_cd0a0a_40x100.png differ
index 6ff03d5..c06dd56 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_flat_70_000000_40x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_flat_70_000000_40x100.png differ
index 28b566c..5308b46 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png differ
index dac8462..0c8997f 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_80_d7ebf9_1x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-hard_80_d7ebf9_1x100.png differ
index ad7f982..3149255 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_e4f1fb_1x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_e4f1fb_1x100.png differ
index 8169ec3..09b2376 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_ffffff_1x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_100_ffffff_1x100.png differ
index 54aff0c..66627c1 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_25_ffef8f_1x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_highlight-soft_25_ffef8f_1x100.png differ
index 3d87ac7..ccb6dc0 100644 (file)
Binary files a/resources/jquery.ui/themes/vector/images/ui-bg_inset-hard_100_f0f0f0_1x100.png and b/resources/jquery.ui/themes/vector/images/ui-bg_inset-hard_100_f0f0f0_1x100.png differ
index 2af4c94..83d6ff8 100644 (file)
Binary files a/resources/jquery/images/jquery.arrowSteps.divider-ltr.png and b/resources/jquery/images/jquery.arrowSteps.divider-ltr.png differ
index 6aba7f2..529d7b8 100644 (file)
Binary files a/resources/jquery/images/jquery.arrowSteps.divider-rtl.png and b/resources/jquery/images/jquery.arrowSteps.divider-rtl.png differ
index 45df39a..d8f4bfc 100644 (file)
                        // that affects the next each() iteration as well.
                        elLimit = limit === undefined ? $el.prop( 'maxLength' ) : limit;
        
+                       // If there is no (valid) limit passed or found in the property,
+                       // skip this. The < 0 check is required for Firefox, which returns
+                       // -1  (instead of undefined) for maxLength if it is not set.
+                       if ( !elLimit || elLimit < 0 ) {
+                               return;
+                       }
+
                        // Update/set attribute value, but only if there is no callback set.
                        // If there's a callback set, it's possible that the limit being enforced
                        // is too low (ie. if the callback would return "Foo" for "User:Foo").
                                $el.removeProp( 'maxLength' );
                        }
        
-                       // Nothing passed and/or empty attribute, return without binding an event.
-                       if ( elLimit === undefined ) {
-                               return;
-                       }
-       
                        // Save function for reference
                        $el.data( 'byteLimit-callback', fn );
        
index 79317f7..6d5974a 100644 (file)
@@ -1,96 +1,47 @@
-/**
- * Cookie plugin
+/*!
+ * jQuery Cookie Plugin
+ * https://github.com/carhartl/jquery-cookie
  *
- * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
- * Dual licensed under the MIT and GPL licenses:
+ * Copyright 2011, Klaus Hartl
+ * Dual licensed under the MIT or GPL Version 2 licenses.
  * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- *
+ * http://www.opensource.org/licenses/GPL-2.0
  */
+(function($) {
+    $.cookie = function(key, value, options) {
 
-/**
- * Create a cookie with the given name and value and other optional parameters.
- *
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Set the value of a cookie.
- * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
- * @desc Create a cookie with all available options.
- * @example $.cookie('the_cookie', 'the_value');
- * @desc Create a session cookie.
- * @example $.cookie('the_cookie', null);
- * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
- *       used when the cookie was set.
- *
- * @param String name The name of the cookie.
- * @param String value The value of the cookie.
- * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
- * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
- *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
- *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
- *                             when the the browser exits.
- * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
- * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
- * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
- *                        require a secure protocol (like HTTPS).
- * @type undefined
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
+        // key and at least value given, set cookie...
+        if (arguments.length > 1 && (!/Object/.test(Object.prototype.toString.call(value)) || value === null || value === undefined)) {
+            options = $.extend({}, options);
 
-/**
- * Get the value of a cookie with the given name.
- *
- * @example $.cookie('the_cookie');
- * @desc Get the value of a cookie.
- *
- * @param String name The name of the cookie.
- * @return The value of the cookie.
- * @type String
- *
- * @name $.cookie
- * @cat Plugins/Cookie
- * @author Klaus Hartl/klaus.hartl@stilbuero.de
- */
-jQuery.cookie = function(name, value, options) {
-    if (typeof value != 'undefined') { // name and value given, set cookie
-        options = options || {};
-        if (value === null) {
-            value = '';
-            options.expires = -1;
-        }
-        var expires = '';
-        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
-            var date;
-            if (typeof options.expires == 'number') {
-                date = new Date();
-                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
-            } else {
-                date = options.expires;
+            if (value === null || value === undefined) {
+                options.expires = -1;
             }
-            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
-        }
-        // CAUTION: Needed to parenthesize options.path and options.domain
-        // in the following expressions, otherwise they evaluate to undefined
-        // in the packed version for some reason...
-        var path = options.path ? '; path=' + (options.path) : '';
-        var domain = options.domain ? '; domain=' + (options.domain) : '';
-        var secure = options.secure ? '; secure' : '';
-        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
-    } else { // only name given, get cookie
-        var cookieValue = null;
-        if (document.cookie && document.cookie != '') {
-            var cookies = document.cookie.split(';');
-            for (var i = 0; i < cookies.length; i++) {
-                var cookie = jQuery.trim(cookies[i]);
-                // Does this cookie string begin with the name we want?
-                if (cookie.substring(0, name.length + 1) == (name + '=')) {
-                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
-                    break;
-                }
+
+            if (typeof options.expires === 'number') {
+                var days = options.expires, t = options.expires = new Date();
+                t.setDate(t.getDate() + days);
             }
+
+            value = String(value);
+
+            return (document.cookie = [
+                encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value),
+                options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+                options.path    ? '; path=' + options.path : '',
+                options.domain  ? '; domain=' + options.domain : '',
+                options.secure  ? '; secure' : ''
+            ].join(''));
+        }
+
+        // key and possibly options given, get cookie...
+        options = value || {};
+        var decode = options.raw ? function(s) { return s; } : decodeURIComponent;
+
+        var pairs = document.cookie.split('; ');
+        for (var i = 0, pair; pair = pairs[i] && pairs[i].split('='); i++) {
+            if (decode(pair[0]) === key) return decode(pair[1] || ''); // IE saves cookies with empty string as "c; ", e.g. without "=" as opposed to EOMB, thus pair[1] may be undefined
         }
-        return cookieValue;
-    }
-};
+        return null;
+    };
+})(jQuery);
index ea86b64..08272a5 100644 (file)
@@ -60,7 +60,7 @@
 
        /* Local scope */
 
-       var     ts,
+       var ts,
                parsers = [];
 
        /* Parser utility functions */
 
        function getElementText( node ) {
                var $node = $( node ),
-                       data = $node.attr( 'data-sort-value' );
-               if ( data !== undefined ) {
-                       return data;
+                       // Use data-sort-value attribute.
+                       // Use data() instead of attr() so that live value changes
+                       // are processed as well (bug 38152).
+                       data = $node.data( 'sortValue' );
+
+               if ( data !== null && data !== undefined ) {
+                       // Cast any numbers or other stuff to a string, methods
+                       // like charAt, toLowerCase and split are expected.
+                       return String( data );
                } else {
                        return $node.text();
                }
 
        function buildDateTable() {
                var regex = [];
-               ts.monthNames = [
-                       [],
-                       []
-               ];
+               ts.monthNames = {};
 
                for ( var i = 1; i < 13; i++ ) {
-                       ts.monthNames[0][i] = mw.config.get( 'wgMonthNames' )[i].toLowerCase();
-                       ts.monthNames[1][i] = mw.config.get( 'wgMonthNamesShort' )[i].toLowerCase().replace( '.', '' );
-                       regex.push( $.escapeRE( ts.monthNames[0][i] ) );
-                       regex.push( $.escapeRE( ts.monthNames[1][i] ) );
+                       var name = mw.config.get( 'wgMonthNames' )[i].toLowerCase();
+                       ts.monthNames[name] = i;
+                       regex.push( $.escapeRE( name ) );
+                       name = mw.config.get( 'wgMonthNamesShort' )[i].toLowerCase().replace( '.', '' );
+                       ts.monthNames[name] = i;
+                       regex.push( $.escapeRE( name ) );
                }
 
                // Build piped string
 
                // Build RegEx
                // Any date formated with . , ' - or /
-               ts.dateRegex[0] = new RegExp( /^\s*\d{1,2}[\,\.\-\/'\s]{1,2}\d{1,2}[\,\.\-\/'\s]{1,2}\d{2,4}\s*?/i);
+               ts.dateRegex[0] = new RegExp( /^\s*(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{1,2})[\,\.\-\/'\s]{1,2}(\d{2,4})\s*?/i);
 
                // Written Month name, dmy
-               ts.dateRegex[1] = new RegExp( '^\\s*\\d{1,2}[\\,\\.\\-\\/\'\\s]*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]*\\d{2,4}\\s*$', 'i' );
+               ts.dateRegex[1] = new RegExp( '^\\s*(\\d{1,2})[\\,\\.\\-\\/\'\\s]*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]*(\\d{2,4})\\s*$', 'i' );
 
                // Written Month name, mdy
-               ts.dateRegex[2] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]*\\d{1,2}[\\,\\.\\-\\/\'\\s]*\\d{2,4}\\s*$', 'i' );
+               ts.dateRegex[2] = new RegExp( '^\\s*(' + regex + ')' + '[\\,\\.\\-\\/\'\\s]*(\\d{1,2})[\\,\\.\\-\\/\'\\s]*(\\d{2,4})\\s*$', 'i' );
 
        }
 
                        },
 
                        dateRegex: [],
-                       monthNames: [],
+                       monthNames: {},
 
                        /**
                         * @param $tables {jQuery}
                                                        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
-                                                       cache = buildCache( table );
                                                }
+
+                                               // 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
+                                               // that sort values change. Shouldn't be too expensive, but if it becomes
+                                               // too slow an event based system should be implemented somehow where
+                                               // cells get event .change() and bubbles up to the <table> here
+                                               cache = buildCache( table );
+
                                                var totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
                                                if ( !table.sortDisabled && totalRows > 0 ) {
 
                format: function( s, table ) {
                        s = $.trim( s.toLowerCase() );
 
-                       for ( var i = 1, j = 0; i < 13 && j < 2; i++ ) {
-                               s = s.replace( ts.monthNames[j][i], i );
-                               if ( i == 12 ) {
-                                       j++;
-                                       i = 0;
+                       var match;
+                       if ( ( match = s.match( ts.dateRegex[0] ) ) !== null ) {
+                               if ( mw.config.get( 'wgDefaultDateFormat' ) == 'mdy' || mw.config.get( 'wgContentLanguage' ) == 'en' ) {
+                                       s = [ match[3], match[1], match[2] ];
+                               } else if ( mw.config.get( 'wgDefaultDateFormat' ) == 'dmy' ) {
+                                       s = [ match[3], match[2], match[1] ];
                                }
+                       } else if ( ( match = s.match( ts.dateRegex[1] ) ) !== null ) {
+                               s = [ match[3], '' + ts.monthNames[match[2]], match[1] ];
+                       } else if ( ( match = s.match( ts.dateRegex[2] ) ) !== null ) {
+                               s = [ match[3], '' + ts.monthNames[match[1]], match[2] ];
+                       } else {
+                               // Should never get here
+                               return '99999999';
                        }
 
-                       s = s.replace( /[\-\.\,' ]/g, '/' );
-
-                       // Replace double slashes
-                       s = s.replace( /\/\//g, '/' );
-                       s = s.replace( /\/\//g, '/' );
-                       s = s.split( '/' );
-
                        // Pad Month and Day
-                       if ( s[0] && s[0].length == 1 ) {
-                               s[0] = '0' + s[0];
-                       }
-                       if ( s[1] && s[1].length == 1 ) {
+                       if ( s[1].length == 1 ) {
                                s[1] = '0' + s[1];
                        }
-                       var y;
+                       if ( s[2].length == 1 ) {
+                               s[2] = '0' + s[2];
+                       }
 
-                       if ( !s[2] ) {
-                               // Fix yearless dates
-                               s[2] = 2000;
-                       } else if ( ( y = parseInt( s[2], 10) ) < 100 ) {
+                       var y;
+                       if ( ( y = parseInt( s[0], 10) ) < 100 ) {
                                // Guestimate years without centuries
                                if ( y < 30 ) {
-                                       s[2] = 2000 + y;
+                                       s[0] = 2000 + y;
                                } else {
-                                       s[2] = 1900 + y;
+                                       s[0] = 1900 + y;
                                }
                        }
-                       // Resort array depending on preferences
-                       if ( mw.config.get( 'wgDefaultDateFormat' ) == 'mdy' || mw.config.get( 'wgContentLanguage' ) == 'en' ) {
-                               s.push( s.shift() );
-                               s.push( s.shift() );
-                       } else if ( mw.config.get( 'wgDefaultDateFormat' ) == 'dmy' ) {
-                               var d = s.shift();
-                               s.push( s.shift() );
-                               s.push(d);
+                       while ( s[0].length < 4 ) {
+                               s[0] = '0' + s[0];
                        }
                        return parseInt( s.join( '' ), 10 );
                },
index e685ca9..14b845d 100644 (file)
@@ -92,7 +92,7 @@
                isReady = true;
 
                // Make sure edit summary does not exceed byte limit
-               $( '#wpSummary' ).byteLimit( 250 );
+               $( '#wpSummary' ).byteLimit( 255 );
 
                /**
                 * Restore the edit box scroll state following a preview operation,
index a9d488a..5197396 100644 (file)
                 */
                getEditToken: function( tokenCallback, err ) {
                        var parameters = {
-                                       prop: 'info',
-                                       intoken: 'edit',
-                                       // we need some kind of dummy page to get a token from. This will return a response
-                                       // complaining that the page is missing, but we should also get an edit token
-                                       titles: 'DummyPageForEditToken'
+                                       action: 'tokens',
+                                       type: 'edit'
                                },
                                ok = function( data ) {
                                        var token;
-                                       $.each( data.query.pages, function( i, page ) {
-                                               if ( page.edittoken ) {
-                                                       token = page.edittoken;
-                                                       return false;
-                                               }
-                                       } );
-                                       if ( token !== undefined ) {
+                                       // If token type is not available for this user,
+                                       // key 'edittoken' is missing or can contain Boolean false
+                                       if ( data.tokens && data.tokens.edittoken ) {
+                                               token = data.tokens.edittoken;
                                                cachedToken = token;
                                                tokenCallback( token );
                                        } else {
index 74306d5..88b92ee 100644 (file)
@@ -1,5 +1,6 @@
-/* mw.Api objects represent the API of a particular MediaWiki server. */
-
+/**
+ * mw.Api objects represent the API of a particular MediaWiki server.
+ */
 ( function( $, mw, undefined ) {
 
        /**
                        ajax: {
                                url: mw.util.wikiScript( 'api' ),
 
-                               ok: function() {},
-
-                               // caller can supply handlers for http transport error or api errors
-                               err: function( code, result ) {
-                                       mw.log( 'mw.Api error: ' + code, 'debug' );
-                               },
-
-                               timeout: 30000, // 30 seconds
+                               timeout: 30 * 1000, // 30 seconds
 
                                dataType: 'json'
                        }
        mw.Api.prototype = {
 
                /**
-                * For api queries, in simple cases the caller just passes a success callback.
-                * In complex cases they pass an object with a success property as callback and
-                * probably other options.
-                * Normalize the argument so that it's always the latter case.
+                * Normalize the ajax options for compatibility and/or convenience methods.
                 *
-                * @param {Object|Function} An object contaning one or more of options.ajax,
+                * @param {undefined|Object|Function} An object contaning one or more of options.ajax,
                 * or just a success function (options.ajax.ok).
                 * @return {Object} Normalized ajax options.
                 */
-               normalizeAjaxOptions: function( arg ) {
-                       var opt = arg;
+               normalizeAjaxOptions: function ( arg ) {
+                       // Arg argument is usually empty
+                       // (before MW 1.20 it was often used to pass ok/err callbacks)
+                       var opts = arg || {};
+                       // Options can also be a success callback handler
                        if ( typeof arg === 'function' ) {
-                               opt = { 'ok': arg };
+                               opts = { ok: arg };
                        }
-                       if ( !opt.ok ) {
-                               throw new Error( 'ajax options must include ok callback' );
-                       }
-                       return opt;
+                       return opts;
                },
 
                /**
                 * Perform API get request
                 *
                 * @param {Object} request parameters
-                * @param {Object|Function} ajax options, or just a success function
-                * @return {jqXHR}
+                * @param {Object|Function} [optional] ajax options
+                * @return {jQuery.Promise}
                 */
                get: function( parameters, ajaxOptions ) {
                        ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
                 * @todo Post actions for nonlocal will need proxy
                 *
                 * @param {Object} request parameters
-                * @param {Object|Function} ajax options, or just a success function
-                * @return {jqXHR}
+                * @param {Object|Function} [optional] ajax options
+                * @return {jQuery.Promise}
                 */
                post: function( parameters, ajaxOptions ) {
                        ajaxOptions = this.normalizeAjaxOptions( ajaxOptions );
                 *
                 * @param {Object} request parameters
                 * @param {Object} ajax options
-                * @return {jqXHR}
+                * @return {jQuery.Promise}
+                * - done: API response data as first argument
+                * - fail: errorcode as first arg, details (string or object) as second arg.
                 */
                ajax: function( parameters, ajaxOptions ) {
-                       var token;
+                       var token,
+                               apiDeferred = $.Deferred();
+
                        parameters = $.extend( {}, this.defaults.parameters, parameters );
                        ajaxOptions = $.extend( {}, this.defaults.ajax, ajaxOptions );
 
                        // So let's escape them here. See bug #28235
                        // This works because jQuery accepts data as a query string or as an Object
                        ajaxOptions.data = $.param( parameters ).replace( /\./g, '%2E' );
+
                        // If we extracted a token parameter, add it back in.
                        if ( token ) {
                                ajaxOptions.data += '&token=' + encodeURIComponent( token );
                        }
-                       ajaxOptions.error = function( xhr, textStatus, exception ) {
-                               ajaxOptions.err( 'http', {
-                                       xhr: xhr,
-                                       textStatus: textStatus,
-                                       exception: exception
+
+                       // Backwards compatibility: Before MediaWiki 1.20,
+                       // callbacks were done with the 'ok' and 'err' property in ajaxOptions.
+                       if ( ajaxOptions.ok ) {
+                               apiDeferred.done( ajaxOptions.ok );
+                               delete ajaxOptions.ok;
+                       }
+                       if ( ajaxOptions.err ) {
+                               apiDeferred.fail( ajaxOptions.err );
+                               delete ajaxOptions.err;
+                       }
+
+                       // Make the AJAX request
+                       $.ajax( ajaxOptions )
+                               // If AJAX fails, reject API call with error code 'http'
+                               // and details in second argument.
+                               .fail( function ( xhr, textStatus, exception ) {
+                                       apiDeferred.reject( 'http', {
+                                               xhr: xhr,
+                                               textStatus: textStatus,
+                                               exception: exception
+                                       } );
+                               } )
+                               // AJAX success just means "200 OK" response, also check API error codes
+                               .done( function ( result ) {
+                                       if ( result === undefined || result === null || result === '' ) {
+                                               apiDeferred.reject( 'ok-but-empty',
+                                                       'OK response but empty result (check HTTP headers?)'
+                                               );
+                                       } else if ( result.error ) {
+                                               var code = result.error.code === undefined ? 'unknown' : result.error.code;
+                                               apiDeferred.reject( code, result );
+                                       } else {
+                                               apiDeferred.resolve( result );
+                                       }
                                } );
-                       };
-
-                       // Success just means 200 OK; also check for output and API errors
-                       ajaxOptions.success = function( result ) {
-                               if ( result === undefined || result === null || result === '' ) {
-                                       ajaxOptions.err( 'ok-but-empty',
-                                               'OK response but empty result (check HTTP headers?)' );
-                               } else if ( result.error ) {
-                                       var code = result.error.code === undefined ? 'unknown' : result.error.code;
-                                       ajaxOptions.err( code, result );
-                               } else {
-                                       ajaxOptions.ok( result );
-                               }
-                       };
-
-                       return $.ajax( ajaxOptions );
+
+                       // Return the Promise
+                       return apiDeferred.promise().fail( function ( code, details ) {
+                               mw.log( 'mw.Api error: ', code, details );
+                       });
                }
 
        };
index 1cc68f2..e784ef7 100644 (file)
@@ -1,31 +1,42 @@
 /**
- * Additional mw.Api methods to assist with API calls related to parsing wikitext.
+ * mw.Api methods for parsing wikitext.
  */
-
-( function( $, mw ) {
+( function ( mw, $ ) {
 
        $.extend( mw.Api.prototype, {
                /**
                 * Convinience method for 'action=parse'. Parses wikitext into HTML.
                 *
                 * @param wikiText {String}
-                * @param success {Function} callback to which to pass success HTML
-                * @param err {Function} callback if error (optional)
-                * @return {jqXHR}
+                * @param ok {Function} [optional] deprecated (success callback)
+                * @param err {Function} [optional] deprecated (error callback)
+                * @return {jQuery.Promise}
                 */
-               parse: function( wikiText, success, err ) {
-                       var params = {
-                                       text: wikiText,
-                                       action: 'parse'
-                               },
-                               ok = function( data ) {
+               parse: function( wikiText, ok, err ) {
+                       var apiDeferred = $.Deferred();
+
+                       // Backwards compatibility (< MW 1.20)
+                       if ( ok ) {
+                               apiDeferred.done( ok );
+                       }
+                       if ( err ) {
+                               apiDeferred.fail( err );
+                       }
+
+                       this.get( {
+                                       action: 'parse',
+                                       text: wikiText
+                               } )
+                               .done( function ( data ) {
                                        if ( data.parse && data.parse.text && data.parse.text['*'] ) {
-                                               success( data.parse.text['*'] );
+                                               apiDeferred.resolve( data.parse.text['*'] );
                                        }
-                               };
-                       return this.get( params, { ok: ok, err: err } );
-               }
+                               } )
+                               .fail( apiDeferred.reject );
 
+                       // Return the promise
+                       return apiDeferred.promise();
+               }
        } );
 
-} )( jQuery, mediaWiki );
+} )( mediaWiki, jQuery );
index cdc9704..8a5421e 100644 (file)
@@ -57,3 +57,7 @@ table.mw-enhanced-rc td.mw-enhanced-rc-nested {
        /* @embed */
        background: url(images/arrow-expanded.png) no-repeat left center;
 }
+
+.mw-changeslist-line-watched .mw-title {
+       font-weight: bold;
+}
index e9df83c..0804825 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * JavaScript for Special:Preferences
  */
-jQuery( document ).ready( function( $ ) {
+jQuery( document ).ready( function ( $ ) {
 $( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
 var $preftoc = $('<ul id="preftoc"></ul>');
 var $preferences = $( '#preferences' )
@@ -15,8 +15,35 @@ var $fieldsets = $preferences.children( 'fieldset' )
 var $legends = $fieldsets.children( 'legend' )
        .addClass( 'mainLegend' );
 
+/**
+ * It uses document.getElementById for security reasons (html injections in
+ * jQuery()).
+ *
+ * @param String name: the name of a tab without the prefix ("mw-prefsection-")
+ * @param String mode: [optional] A hash will be set according to the current
+ * open section. Set mode 'noHash' to surpress this.
+ */
+function switchPrefTab( name, mode ) {
+       var $tab, scrollTop;
+       // Handle hash manually to prevent jumping,
+       // therefore save and restore scrollTop to prevent jumping.
+       scrollTop = $( window ).scrollTop();
+       if ( mode !== 'noHash' ) {
+               window.location.hash = '#mw-prefsection-' + name;
+       }
+       $( window ).scrollTop( scrollTop );
+
+       $preftoc.find( 'li' ).removeClass( 'selected' );
+       $tab = $( document.getElementById( 'preftab-' + name ) );
+       if ( $tab.length ) {
+               $tab.parent().addClass( 'selected' );
+               $preferences.children( 'fieldset' ).hide();
+               $( document.getElementById( 'mw-prefsection-' + name ) ).show();
+       }
+}
+
 // Populate the prefToc
-$legends.each( function( i, legend ) {
+$legends.each( function ( i, legend ) {
        var $legend = $(legend);
        if ( i === 0 ) {
                $legend.parent().show();
@@ -30,18 +57,6 @@ $legends.each( function( i, legend ) {
                text : $legend.text(),
                id : ident.replace( 'mw-prefsection', 'preftab' ),
                href : '#' + ident
-       }).click( function( e ) {
-               e.preventDefault();
-               // Handle hash manually to prevent jumping
-               // Therefore save and restore scrollTop to prevent jumping
-               var scrollTop = $(window).scrollTop();
-               window.location.hash = $(this).attr('href');
-               $(window).scrollTop(scrollTop);
-
-               $preftoc.find( 'li' ).removeClass( 'selected' );
-               $(this).parent().addClass( 'selected' );
-               $( '#preferences > fieldset' ).hide();
-               $( '#' + ident ).show();
        });
        $li.append( $a );
        $preftoc.append( $li );
@@ -50,11 +65,34 @@ $legends.each( function( i, legend ) {
 // If we've reloaded the page or followed an open-in-new-window,
 // make the selected tab visible.
 var hash = window.location.hash;
-if( hash.match( /^#mw-prefsection-[\w-]+/ ) ) {
-       var $tab = $( hash.replace( 'mw-prefsection', 'preftab' ) );
-       $tab.click();
+if ( hash.match( /^#mw-prefsection-[\w-]+/ ) ) {
+       switchPrefTab( hash.replace( '#mw-prefsection-' , '' ) );
 }
 
+// In browsers that support the onhashchange event we will not bind click
+// handlers and instead let the browser do the default behavior (clicking the
+// <a href="#.."> will naturally set the hash, handled by onhashchange.
+// But other things that change the hash will also be catched (e.g. using
+// the Back and Forward browser navigation).
+if ( 'onhashchange' in window ) {
+       $(window).on( 'hashchange' , function () {
+               var hash = window.location.hash;
+               if ( hash.match( /^#mw-prefsection-[\w-]+/ ) ) {
+                       switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
+               } else if ( hash === '' ) {
+                       switchPrefTab( 'personal', 'noHash' );
+               }
+       });
+// In older browsers we'll bind a click handler as fallback.
+// We must not have onhashchange *and* the click handlers, other wise
+// the click handler calls switchPrefTab() which sets the hash value,
+// which triggers onhashcange and calls switchPrefTab() again.
+} else {
+       $preftoc.on( 'click', 'li a', function ( e ) {
+               switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
+               e.preventDefault();
+       });
+}
 
 /**
 * Timezone functions.
@@ -68,7 +106,7 @@ var $localtimeHolder = $( '#wpLocalTime' );
 var servertime = parseInt( $( 'input[name=wpServerTime]' ).val(), 10 );
 var minuteDiff = 0;
 
-var minutesToHours = function( min ) {
+var minutesToHours = function ( min ) {
        var tzHour = Math.floor( Math.abs( min ) / 60 );
        var tzMin = Math.abs( min ) % 60;
        var tzString = ( ( min >= 0 ) ? '' : '-' ) + ( ( tzHour < 10 ) ? '0' : '' ) + tzHour +
@@ -76,7 +114,7 @@ var minutesToHours = function( min ) {
        return tzString;
 };
 
-var hoursToMinutes = function( hour ) {
+var hoursToMinutes = function ( hour ) {
        var arr = hour.split( ':' );
        arr[0] = parseInt( arr[0], 10 );
 
@@ -99,7 +137,7 @@ var hoursToMinutes = function( hour ) {
        }
 };
 
-var updateTimezoneSelection = function() {
+var updateTimezoneSelection = function () {
        var type = $tzSelect.val();
        if ( type == 'guess' ) {
                // Get browser timezone & fill it in
@@ -130,8 +168,8 @@ var updateTimezoneSelection = function() {
 };
 
 if ( $tzSelect.length && $tzTextbox.length ) {
-       $tzSelect.change( function() { updateTimezoneSelection(); } );
-       $tzTextbox.blur( function() { updateTimezoneSelection(); } );
+       $tzSelect.change( function () { updateTimezoneSelection(); } );
+       $tzTextbox.blur( function () { updateTimezoneSelection(); } );
        updateTimezoneSelection();
 }
 } );
index 043ebce..f690a1d 100644 (file)
                return function( args ) {
                        var key = args[0];
                        var argsArray = $.isArray( args[1] ) ? args[1] : $.makeArray( args ).slice( 1 ); 
-                       var escapedArgsArray = $.map( argsArray, function( arg ) { 
-                               return typeof arg === 'string' ? mw.html.escape( arg ) : arg;
-                       } );
                        try {
-                               return parser.parse( key, escapedArgsArray );
+                               return parser.parse( key, argsArray );
                        } catch ( e ) {
-                               return $( '<span></span>' ).append( key + ': ' + e.message );
+                               return $( '<span>' ).append( key + ': ' + e.message );
                        }
                };
        }
                },
 
                /**
-                * Fetch the message string associated with a key, return parsed structure. Memoized.
+                * Fetch the message string associated with a key, return parsed structure. Memoized.
                 * Note that we pass '[' + key + ']' back for a missing message here. 
-                * @param {String} key
+                * @param {String} key
                 * @return {String|Array} string of '[key]' if message missing, simple string if possible, array of arrays if needs parsing
                 */
                getAst: function( key ) {
 
 
                        var regularLiteral = makeRegexParser( /^[^{}[\]$\\]/ );
-                       var regularLiteralWithoutBar = makeRegexParser(/^[^{}[\]$\\|]/);
-                       var regularLiteralWithoutSpace = makeRegexParser(/^[^{}[\]$\s]/);
+                       var regularLiteralWithoutBar = makeRegexParser(/^[^{}[\]$\\|]/);
+                       var regularLiteralWithoutSpace = makeRegexParser(/^[^{}[\]$\s]/);
 
                        var backslash = makeStringParser( "\\" );
                        var anyCharacter = makeRegexParser( /^./ );
                                return result;
                        }
 
+                       // this is the same as the above extlink, except that the url is being passed on as a parameter
+                       function extLinkParam() {
+                               var result = sequence( [
+                                       openExtlink,
+                                       dollar,
+                                       digits,
+                                       whitespace,
+                                       expression,
+                                       closeExtlink
+                               ] );
+                               if ( result === null ) {
+                                       return null;
+                               }
+                               return [ 'LINKPARAM', parseInt( result[2], 10 ) - 1, result[4] ];
+                       }
+
                        var openLink = makeStringParser( '[[' );
                        var closeLink = makeStringParser( ']]' );
 
                        }
 
                        var nonWhitespaceExpression = choice( [
-                               template,        
+                               template,
                                link,
+                               extLinkParam,
                                extlink,
                                replacement,
                                literalWithoutSpace
                        ] );
 
                        var paramExpression = choice( [
-                               template,        
+                               template,
                                link,
+                               extLinkParam,
                                extlink,
                                replacement,
                                literalWithoutBar
                        var expression = choice( [ 
                                template,
                                link,
+                               extLinkParam,
                                extlink,
                                replacement,
                                literal 
                },
 
                /**
-                * Return replacement of correct index, or string if unavailable.
+                * Return escaped replacement of correct index, or string if unavailable.
                 * Note that we expect the parsed parameter to be zero-based. i.e. $1 should have become [ 0 ].
                 * if the specified parameter is not found return the same string
                 * (e.g. "$99" -> parameter 98 -> not found -> return "$99" )
                 */
                replace: function( nodes, replacements ) {
                        var index = parseInt( nodes[0], 10 );
-                       return index < replacements.length ? replacements[index] : '$' + ( index + 1 ); 
+                       
+                       if ( index < replacements.length ) {
+                               if ( typeof arg === 'string' ) {
+                                       // replacement is a string, escape it
+                                       return mw.html.escape( replacements[index] );
+                               } else {
+                                       // replacement is no string, don't touch!
+                                       return replacements[index];
+                               }
+                       } else {
+                               // index not found, fallback to displaying variable
+                               return '$' + ( index + 1 );
+                       }
                },
 
                /** 
                        return $el;
                },
 
+               /**
+                * This is basically use a combination of replace + link (link with parameter
+                * as url), but we don't want to run the regular replace here-on: inserting a
+                * url as href-attribute of a link will automatically escape it already, so
+                * we don't want replace to (manually) escape it as well.
+                * TODO throw error if nodes.length > 1 ?
+                * @param {Array} of one element, integer, n >= 0
+                * @return {String} replacement
+                */
+               linkparam: function( nodes, replacements ) {
+                       var replacement,
+                               index = parseInt( nodes[0], 10 );
+                       if ( index < replacements.length) {
+                               replacement = replacements[index];
+                       } else {
+                               replacement = '$' + ( index + 1 );
+                       }
+                       return this.link( [ replacement, nodes[1] ] );
+               },
+
                /**
                 * Transform parsed structure into pluralization
                 * n.b. The first node may be a non-integer (for instance, a string representing an Arabic number).
index f29a9bd..deb7795 100644 (file)
@@ -351,7 +351,7 @@ var mw = ( function ( $, undefined ) {
                         *              }
                         *      }
                         */
-                       var     registry = {},
+                       var registry = {},
                                /**
                                 * Mapping of sources, keyed by source-id, values are objects.
                                 * Format:
@@ -368,17 +368,9 @@ var mw = ( function ( $, undefined ) {
                                queue = [],
                                // List of callback functions waiting for modules to be ready to be called
                                jobs = [],
-                               // Flag indicating that document ready has occured
-                               ready = false,
                                // Selector cache for the marker element. Use getMarker() to get/use the marker!
                                $marker = null;
 
-                       /* Cache document ready status */
-
-                       $(document).ready( function () {
-                               ready = true;
-                       } );
-
                        /* Private methods */
 
                        function getMarker() {
@@ -725,8 +717,12 @@ var mw = ( function ( $, undefined ) {
                         * @param callback Function: Optional callback which will be run when the script is done
                         */
                        function addScript( src, callback, async ) {
-                               var done = false, script, head;
-                               if ( ready || async ) {
+                               var script, head,
+                                       done = false;
+
+                               // Using isReady directly instead of storing it locally from
+                               // a $.fn.ready callback (bug 31895).
+                               if ( $.isReady || async ) {
                                        // jQuery's getScript method is NOT better than doing this the old-fashioned way
                                        // because jQuery will eval the script's code, and errors will not have sane
                                        // line numbers.
index 7f881b0..7a15e29 100644 (file)
@@ -25,7 +25,7 @@
                 * Generates a random user session ID (32 alpha-numeric characters).
                 *
                 * This information would potentially be stored in a cookie to identify a user during a
-                * session or series of sessions. It's uniqueness should not be depended on.
+                * session or series of sessions. Its uniqueness should not be depended on.
                 *
                 * @return String: Random set of 32 alpha-numeric characters
                 */
        // This is kind of ugly but we're stuck with this for b/c reasons
        mw.user = new User( mw.user.options, mw.user.tokens );
 
-})(jQuery);
\ No newline at end of file
+})(jQuery);
index 9202d2e..541c77a 100644 (file)
                                        return null;
                                }
                                // Select the first (most likely only) unordered list inside the portlet
-                               $ul = $portlet.find( 'ul' );
+                               $ul = $portlet.find( 'ul' ).eq( 0 );
 
                                // If it didn't have an unordered list yet, create it
                                if ( $ul.length === 0 ) {
+
+                                       $ul = $( '<ul>' );
+
                                        // If there's no <div> inside, append it to the portlet directly
                                        if ( $portlet.find( 'div:first' ).length === 0 ) {
-                                               $portlet.append( '<ul></ul>' );
+                                               $portlet.append( $ul );
                                        } else {
                                                // otherwise if there's a div (such as div.body or div.pBody)
                                                // append the <ul> to last (most likely only) div
-                                               $portlet.find( 'div' ).eq( -1 ).append( '<ul></ul>' );
+                                               $portlet.find( 'div' ).eq( -1 ).append( $ul );
                                        }
-                                       // Select the created element
-                                       $ul = $portlet.find( 'ul' ).eq( 0 );
                                }
                                // Just in case..
                                if ( $ul.length === 0 ) {
index 6ac3f08..be07ba8 100644 (file)
@@ -103,7 +103,7 @@ class VectorTemplate extends BaseTemplate {
                $nav = $this->data['content_navigation'];
 
                if ( $wgVectorUseIconWatch ) {
-                       $mode = $this->getSkin()->getRelevantTitle()->userIsWatching() ? 'unwatch' : 'watch';
+                       $mode = $this->getSkin()->getUser()->isWatched( $this->getSkin()->getRelevantTitle() ) ? 'unwatch' : 'watch';
                        if ( isset( $nav['actions'][$mode] ) ) {
                                $nav['views'][$mode] = $nav['actions'][$mode];
                                $nav['views'][$mode]['class'] = rtrim( 'icon ' . $nav['views'][$mode]['class'], ' ' );
index 08296a9..bc67a4b 100644 (file)
Binary files a/skins/common/images/Arr_.png and b/skins/common/images/Arr_.png differ
index 5fc956d..e524f6c 100644 (file)
Binary files a/skins/common/images/ar/button_bold.png and b/skins/common/images/ar/button_bold.png differ
index 4888e73..c9c63f6 100644 (file)
Binary files a/skins/common/images/ar/button_link.png and b/skins/common/images/ar/button_link.png differ
index 5283179..12b986b 100644 (file)
Binary files a/skins/common/images/ar/button_nowiki.png and b/skins/common/images/ar/button_nowiki.png differ
index d02aeee..5c10cfe 100644 (file)
Binary files a/skins/common/images/be-tarask/button_bold.png and b/skins/common/images/be-tarask/button_bold.png differ
index 26e0192..19e4ad4 100644 (file)
Binary files a/skins/common/images/button_hr.png and b/skins/common/images/button_hr.png differ
index 24e0095..ff7348a 100644 (file)
Binary files a/skins/common/images/button_sig.png and b/skins/common/images/button_sig.png differ
index 51951c6..53b6f92 100644 (file)
Binary files a/skins/common/images/button_template.png and b/skins/common/images/button_template.png differ
index cd262c4..990702e 100644 (file)
Binary files a/skins/common/images/closewindow.png and b/skins/common/images/closewindow.png differ
index 348e548..c96d9ff 100644 (file)
Binary files a/skins/common/images/closewindow19x19.png and b/skins/common/images/closewindow19x19.png differ
index 3c2666e..b958d22 100644 (file)
Binary files a/skins/common/images/cyrl/button_italic.png and b/skins/common/images/cyrl/button_italic.png differ
index 4008cb9..33f91ed 100644 (file)
Binary files a/skins/common/images/fa/button_italic.png and b/skins/common/images/fa/button_italic.png differ
index 5283179..12b986b 100644 (file)
Binary files a/skins/common/images/fa/button_nowiki.png and b/skins/common/images/fa/button_nowiki.png differ
index af869d2..cd657c3 100644 (file)
Binary files a/skins/common/images/nextredirectltr.png and b/skins/common/images/nextredirectltr.png differ
index c9bf355..b788f33 100644 (file)
Binary files a/skins/common/images/nextredirectrtl.png and b/skins/common/images/nextredirectrtl.png differ
index 96a2e9a..ba5718a 100644 (file)
Binary files a/skins/common/images/tooltip_icon.png and b/skins/common/images/tooltip_icon.png differ
index 3b3cf81..ee46a50 100644 (file)
Binary files a/skins/modern/document.png and b/skins/modern/document.png differ
index dfc8e62..72b8724 100644 (file)
Binary files a/skins/modern/footer-grad.png and b/skins/modern/footer-grad.png differ
index b8f5abb..4d3cb47 100644 (file)
Binary files a/skins/modern/news_icon.png and b/skins/modern/news_icon.png differ
index dff165e..e535c0c 100644 (file)
Binary files a/skins/modern/video.png and b/skins/modern/video.png differ
index 3b3cf81..ee46a50 100644 (file)
Binary files a/skins/monobook/document.png and b/skins/monobook/document.png differ
index b8f5abb..4d3cb47 100644 (file)
Binary files a/skins/monobook/news_icon.png and b/skins/monobook/news_icon.png differ
index 3286583..d86dbe0 100644 (file)
Binary files a/skins/monobook/video.png and b/skins/monobook/video.png differ
index f500c9e..7640bd1 100644 (file)
Binary files a/skins/vector/images/arrow-down-focus-icon.png and b/skins/vector/images/arrow-down-focus-icon.png differ
index 255c7d1..12e3b93 100644 (file)
Binary files a/skins/vector/images/arrow-down-icon.png and b/skins/vector/images/arrow-down-icon.png differ
index b32678f..5a1d2f4 100644 (file)
Binary files a/skins/vector/images/audio-icon.png and b/skins/vector/images/audio-icon.png differ
index 0cf02db..f9ca8cc 100644 (file)
Binary files a/skins/vector/images/border.png and b/skins/vector/images/border.png differ
index bd429c2..7bae98f 100644 (file)
Binary files a/skins/vector/images/bullet-icon.png and b/skins/vector/images/bullet-icon.png differ
index 9148bdb..b70efaa 100644 (file)
Binary files a/skins/vector/images/link-icon.png and b/skins/vector/images/link-icon.png differ
index 5fa9e82..a9ba8a7 100644 (file)
Binary files a/skins/vector/images/lock-icon.png and b/skins/vector/images/lock-icon.png differ
index 16002f7..9823d72 100644 (file)
Binary files a/skins/vector/images/mail-icon.png and b/skins/vector/images/mail-icon.png differ
index 4ca31da..b3ecd30 100644 (file)
Binary files a/skins/vector/images/page-base.png and b/skins/vector/images/page-base.png differ
index b93c027..1436cda 100644 (file)
Binary files a/skins/vector/images/page-fade.png and b/skins/vector/images/page-fade.png differ
index 3ef0b26..90c3918 100644 (file)
Binary files a/skins/vector/images/portal-break.png and b/skins/vector/images/portal-break.png differ
index 696135b..8e0082b 100644 (file)
Binary files a/skins/vector/images/preferences-base.png and b/skins/vector/images/preferences-base.png differ
index 7e25a05..e59f578 100644 (file)
Binary files a/skins/vector/images/preferences-break.png and b/skins/vector/images/preferences-break.png differ
index 7963b76..411a1aa 100644 (file)
Binary files a/skins/vector/images/preferences-edge.png and b/skins/vector/images/preferences-edge.png differ
index 3996fb4..638084d 100644 (file)
Binary files a/skins/vector/images/preferences-fade.png and b/skins/vector/images/preferences-fade.png differ
index 140feae..6cb7d28 100644 (file)
Binary files a/skins/vector/images/search-fade.png and b/skins/vector/images/search-fade.png differ
index d6eabd5..b8f772f 100644 (file)
Binary files a/skins/vector/images/tab-current-fade.png and b/skins/vector/images/tab-current-fade.png differ
index 1bedd33..57f9f8d 100644 (file)
Binary files a/skins/vector/images/user-icon.png and b/skins/vector/images/user-icon.png differ
index 1ec8456..e934a0f 100644 (file)
Binary files a/skins/vector/images/video-icon.png and b/skins/vector/images/video-icon.png differ
index f0ec2e5..6d324e4 100644 (file)
@@ -2716,20 +2716,58 @@ Failing to transform badly formed HTML into correct XHTML
 </p>
 !!end
 
-!! test 
+!! test
 Horizontal ruler (should it add that extra space?)
-!! input 
+!! input
 <hr>
 <hr >
 foo <hr
 > bar
-!! result 
+!! result
 <hr />
 <hr />
 foo <hr /> bar
 
 !! end
 
+!! test
+Horizontal ruler -- 4+ dashes render hr
+!! input
+----
+!! result
+<hr />
+
+!! end
+
+!! test
+Horizontal ruler -- eats additional dashes on the same line
+!! input
+---------
+!! result
+<hr />
+
+!! end
+
+!! test
+Horizontal ruler -- does not collaps dashes on consecutive lines
+!! input
+----
+----
+!! result
+<hr />
+<hr />
+
+!! end
+
+!! test
+Horizontal ruler -- <4 dashes render as plain text
+!! input
+---
+!! result
+<p>---
+</p>
+!! end
+
 ###
 ### Block-level elements
 ###
index 3729796..8f18d6e 100644 (file)
@@ -387,6 +387,35 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->assertFalse( $r, "found extra row (after #$i)" );
        }
 
+       /**
+        * Assert that two arrays are equal. By default this means that both arrays need to hold
+        * the same set of values. Using additional arguments, order and associated key can also
+        * be set as relevant.
+        *
+        * @since 1.20
+        *
+        * @param array $expected
+        * @param array $actual
+        * @param boolean $ordered If the order of the values should match
+        * @param boolean $named If the keys should match
+        */
+       protected function assertArrayEquals( array $expected, array $actual, $ordered = false, $named = false ) {
+               if ( !$named ) {
+                       $expected = array_values( $expected );
+                       $actual = array_values( $actual );
+               }
+
+               if ( !$ordered ) {
+                       asort( $expected );
+                       asort( $actual );
+               }
+
+               call_user_func_array(
+                       array( $this, 'assertEquals' ),
+                       array_merge( array( $expected, $actual ), array_slice( func_get_args(), 4 ) )
+               );
+       }
+
        /**
         * Utility function for eliminating all string keys from an array.
         * Useful to turn a database result row as returned by fetchRow() into
index da36ffd..3b05d67 100644 (file)
@@ -437,6 +437,36 @@ class MWNamespaceTest extends MediaWikiTestCase {
                $wgContentNamespaces = $saved;
        }
 
+       /**
+        */
+       public function testGetSubjectNamespaces() {
+               $subjectsNS = MWNamespace::getSubjectNamespaces();
+               $this->assertContains(    NS_MAIN, $subjectsNS,
+                       "Talk namespaces should have NS_MAIN" );
+               $this->assertNotContains( NS_TALK, $subjectsNS,
+                       "Talk namespaces should have NS_TALK" );
+
+               $this->assertNotContains( NS_MEDIA, $subjectsNS,
+                       "Talk namespaces should not have NS_MEDIA" );
+               $this->assertNotContains( NS_SPECIAL, $subjectsNS,
+                       "Talk namespaces should not have NS_SPECIAL" );
+       }
+
+       /**
+        */
+       public function testGetTalkNamespaces() {
+               $talkNS = MWNamespace::getTalkNamespaces();
+               $this->assertContains(    NS_TALK, $talkNS,
+                       "Subject namespaces should have NS_TALK" );
+               $this->assertNotContains( NS_MAIN, $talkNS,
+                       "Subject namespaces should not have NS_MAIN" );
+
+               $this->assertNotContains( NS_MEDIA, $talkNS,
+                       "Subject namespaces should not have NS_MEDIA" );
+               $this->assertNotContains( NS_SPECIAL, $talkNS,
+                       "Subject namespaces should not have NS_SPECIAL" );
+       }
+
        /**
         * Some namespaces are always capitalized per code definition
         * in MWNamespace::$alwaysCapitalizedNamespaces
index b76aa5c..c929989 100644 (file)
@@ -110,21 +110,37 @@ class SanitizerTest extends MediaWikiTestCase {
                $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&foobar;' ), array( 'foo' => '&foobar;' ), 'Entity-like items are accepted' );
        }
 
-       function testDeprecatedAttributes() {
-               $GLOBALS['wgCleanupPresentationalAttributes'] = true;
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'clear="left"', 'br' ), ' style="clear: left;"', 'Deprecated attributes are converted to styles when enabled.' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'clear="all"', 'br' ), ' style="clear: both;"', 'clear=all is converted to clear: both; not clear: all;' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'CLEAR="ALL"', 'br' ), ' style="clear: both;"', 'clear=ALL is not treated differently from clear=all' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'width="100"', 'td' ), ' style="width: 100px;"', 'Numeric sizes use pixels instead of numbers.' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'width="100%"', 'td' ), ' style="width: 100%;"', 'Units are allowed in sizes.' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'WIDTH="100%"', 'td' ), ' style="width: 100%;"', 'Uppercase WIDTH is treated as lowercase width.' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'WiDTh="100%"', 'td' ), ' style="width: 100%;"', 'Mixed case does not break WiDTh.' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'nowrap="true"', 'td' ), ' style="white-space: nowrap;"', 'nowrap attribute is output as white-space: nowrap; not something else.' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'nowrap=""', 'td' ), ' style="white-space: nowrap;"', 'nowrap="" is considered true, not false' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'NOWRAP="true"', 'td' ), ' style="white-space: nowrap;"', 'nowrap attribute works when uppercase.' );
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'NoWrAp="true"', 'td' ), ' style="white-space: nowrap;"', 'nowrap attribute works when mixed-case.' );
+       function testDeprecatedAttributesDisabled() {
                $GLOBALS['wgCleanupPresentationalAttributes'] = false;
-               $this->assertEquals( Sanitizer::fixTagAttributes( 'clear="left"', 'br' ), ' clear="left"', 'Deprecated attributes are not converted to styles when enabled.' );
+               $this->assertEquals( ' clear="left"', Sanitizer::fixTagAttributes( 'clear="left"', 'br' ), 'Deprecated attributes are not converted to styles when enabled.' );
+       }
+
+       /**
+        * @dataProvider provideDeprecatedAttributes
+        */
+       function testDeprecatedAttributes( $input, $tag, $expected, $message = null ) {
+               $GLOBALS['wgCleanupPresentationalAttributes'] = true;
+               $this->assertEquals( $expected, Sanitizer::fixTagAttributes( $input, $tag ), $message );
+       }
+
+       function provideDeprecatedAttributes() {
+               return array(
+                       array( 'clear="left"', 'br', ' style="clear: left;"', 'Deprecated attributes are converted to styles when enabled.' ),
+                       array( 'clear="all"', 'br', ' style="clear: both;"', 'clear=all is converted to clear: both; not clear: all;' ),
+                       array( 'CLEAR="ALL"', 'br', ' style="clear: both;"', 'clear=ALL is not treated differently from clear=all' ),
+                       array( 'width="100"', 'td', ' style="width: 100px;"', 'Numeric sizes use pixels instead of numbers.' ),
+                       array( 'width="100%"', 'td', ' style="width: 100%;"', 'Units are allowed in sizes.' ),
+                       array( 'WIDTH="100%"', 'td', ' style="width: 100%;"', 'Uppercase WIDTH is treated as lowercase width.' ),
+                       array( 'WiDTh="100%"', 'td', ' style="width: 100%;"', 'Mixed case does not break WiDTh.' ),
+                       array( 'nowrap="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute is output as white-space: nowrap; not something else.' ),
+                       array( 'nowrap=""', 'td', ' style="white-space: nowrap;"', 'nowrap="" is considered true, not false' ),
+                       array( 'NOWRAP="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when uppercase.' ),
+                       array( 'NoWrAp="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when mixed-case.' ),
+                       array( 'align="right"', 'td', ' style="text-align: right;"', 'align on table cells gets converted to text-align' ),
+                       array( 'align="center"', 'td', ' style="text-align: center;"', 'align on table cells gets converted to text-align' ),
+                       array( 'align="left"', 'div', ' style="float: left;"', 'align=(left|right) on non-cells gets converted to float' ),
+                       array( 'align="center"', 'div', ' style="margin-left: auto; margin-right: auto;"', 'align="center" on non-cells' ),
+               );
        }
 
        /**
index b72a5cd..2949a3a 100644 (file)
@@ -478,7 +478,7 @@ more stuff
                $this->assertEquals( $expected, $text );
        }
 
-       /* @FIXME: fix this!
+       /* @todo FIXME: fix this!
        public function testGetUndoText() {
                global $wgDiff3;
 
index 1d4a36f..93ed3dc 100644 (file)
@@ -251,6 +251,15 @@ class XmlTest extends MediaWikiTestCase {
                );
        }
 
+       function testLanguageSelector() {
+               $select = Xml::languageSelector( 'en', true, null,
+                       array( 'id' => 'testlang' ), wfMessage( 'yourlanguage' ) );
+               $this->assertEquals(
+                       '<label for="testlang">Language:</label>',
+                       $select[0]
+               );
+       }
+
        #
        # JS
        #
index f3a14e5..b22eccd 100644 (file)
@@ -10,10 +10,14 @@ $IP = dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) );
 
 // Start up MediaWiki in command-line mode
 require_once( "$IP/maintenance/Maintenance.php" );
-require("RandomImageGenerator.php");
+require(  dirname( __FILE__ ) . "/RandomImageGenerator.php" );
 
 class GenerateRandomImages extends Maintenance {
 
+       public function getDbType() {
+               return Maintenance::DB_NONE;
+       }
+
        public function execute() {
 
                $getOptSpec = array(
diff --git a/tests/phpunit/includes/cache/ProcessCacheLRUTest.php b/tests/phpunit/includes/cache/ProcessCacheLRUTest.php
new file mode 100644 (file)
index 0000000..30bfb12
--- /dev/null
@@ -0,0 +1,239 @@
+<?php
+
+/**
+ * Test for ProcessCacheLRU class.
+ *
+ * Note that it uses the ProcessCacheLRUTestable class which extends some
+ * properties and methods visibility. That class is defined at the end of the
+ * file containing this class.
+ *
+ * @group Cache
+ */
+class ProcessCacheLRUTest extends MediaWikiTestCase {
+
+       /**
+        * Helper to verify emptiness of a cache object.
+        * Compare against an array so we get the cache content difference.
+        */
+       function assertCacheEmpty( $cache, $msg = 'Cache should be empty' ) {
+               $this->assertAttributeEquals( array(), 'cache', $cache, $msg );
+       }
+
+       /**
+        * Helper to fill a cache object passed by reference
+        */
+       function fillCache( &$cache, $numEntries ) {
+               // Fill cache with three values
+               for( $i=1; $i<=$numEntries; $i++) {
+                       $cache->set( "cache-key-$i", "prop-$i", "value-$i" );
+               }
+       }
+
+       /**
+        * Generates an array of what would be expected in cache for a given cache
+        * size and a number of entries filled in sequentially
+        */
+       function getExpectedCache( $cacheMaxEntries, $entryToFill ) {
+               $expected = array();
+
+               if( $entryToFill === 0 ) {
+                       # The cache is empty!
+                       return array();
+               } elseif( $entryToFill <= $cacheMaxEntries ) {
+                       # Cache is not fully filled
+                       $firstKey = 1;
+               } else {
+                       # Cache overflowed
+                       $firstKey = 1 + $entryToFill - $cacheMaxEntries;
+               }
+
+               $lastKey  = $entryToFill;
+
+               for( $i=$firstKey; $i<=$lastKey; $i++ ) {
+                       $expected["cache-key-$i"] = array( "prop-$i" => "value-$i" );
+               }
+               return $expected;
+       }
+
+       /**
+        * Highlight diff between assertEquals and assertNotSame
+        */
+       function testPhpUnitArrayEquality() {
+               $one = array( 'A' => 1, 'B' => 2 );
+               $two = array( 'B' => 2, 'A' => 1 );
+               $this->assertEquals( $one, $two );  // ==
+               $this->assertNotSame( $one, $two ); // ===
+       }
+
+       /**
+        * @dataProvider provideInvalidConstructorArg
+        * @expectedException MWException
+        */
+       function testConstructorGivenInvalidValue( $maxSize ) {
+               $c = new ProcessCacheLRUTestable( $maxSize );
+       }
+
+       /**
+        * Value which are forbidden by the constructor
+        */
+       function provideInvalidConstructorArg() {
+               return array(
+                       array( null ),
+                       array( array() ),
+                       array( new stdClass() ),
+                       array( 0 ),
+                       array( '5' ),
+                       array( -1 ),
+               );
+       }
+
+       function testAddAndGetAKey() {
+               $oneCache = new ProcessCacheLRUTestable( 1 );
+               $this->assertCacheEmpty( $oneCache );
+
+               // First set just one value
+               $oneCache->set( 'cache-key', 'prop1', 'value1' );
+               $this->assertEquals( 1, $oneCache->getEntriesCount() );
+               $this->assertTrue( $oneCache->has( 'cache-key', 'prop1' ) );
+               $this->assertEquals( 'value1', $oneCache->get( 'cache-key', 'prop1' ) );
+       }
+
+       function testDeleteOldKey() {
+               $oneCache = new ProcessCacheLRUTestable( 1 );
+               $this->assertCacheEmpty( $oneCache );
+
+               $oneCache->set( 'cache-key', 'prop1', 'value1' );
+               $oneCache->set( 'cache-key', 'prop1', 'value2' );
+               $this->assertEquals( 'value2', $oneCache->get( 'cache-key', 'prop1' ) );
+       }
+
+       /**
+        * This test that we properly overflow when filling a cache with
+        * a sequence of always different cache-keys. Meant to verify we correclty
+        * delete the older key.
+        *
+        * @dataProvider provideCacheFilling
+        * @param $cacheMaxEntries Maximum entry the created cache will hold
+        * @param $entryToFill Number of entries to insert in the created cache.
+        */
+       function testFillingCache( $cacheMaxEntries, $entryToFill, $msg = '' ) {
+               $cache = new ProcessCacheLRUTestable( $cacheMaxEntries );
+               $this->fillCache( $cache, $entryToFill);
+
+               $this->assertSame(
+                       $this->getExpectedCache( $cacheMaxEntries, $entryToFill ),
+                       $cache->getCache(),
+                       "Filling a $cacheMaxEntries entries cache with $entryToFill entries"
+               );
+
+       }
+
+       /**
+        * Provider for testFillingCache
+        */
+       function provideCacheFilling() {
+               // ($cacheMaxEntries, $entryToFill, $msg='')
+               return array(
+                       array( 1,  0 ),
+                       array( 1,  1 ),
+                       array( 1,  2 ), # overflow
+                       array( 5, 33 ), # overflow
+               );
+
+       }
+
+       /**
+        * Create a cache with only one remaining entry then update
+        * the first inserted entry. Should bump it to the top.
+        */
+       function testReplaceExistingKeyShouldBumpEntryToTop() {
+               $maxEntries = 3;
+
+               $cache = new ProcessCacheLRUTestable( $maxEntries );
+               // Fill cache leaving just one remaining slot
+               $this->fillCache( $cache, $maxEntries - 1 );
+
+               // Set an existing cache key
+               $cache->set( "cache-key-1", "prop-1", "new-value-for-1" );
+
+               $this->assertSame(
+                       array(
+                               'cache-key-2' => array( 'prop-2' => 'value-2' ),
+                               'cache-key-1' => array( 'prop-1' => 'new-value-for-1' ),
+                       ),
+                       $cache->getCache()
+               );
+       }
+
+       function testRecentlyAccessedKeyStickIn() {
+               $cache = new ProcessCacheLRUTestable( 2 );
+               $cache->set( 'first' , 'prop1', 'value1' );
+               $cache->set( 'second', 'prop2', 'value2' );
+
+               // Get first
+               $cache->get( 'first', 'prop1' );
+               // Cache a third value, should invalidate the least used one
+               $cache->set( 'third', 'prop3', 'value3' );
+
+               $this->assertFalse( $cache->has( 'second', 'prop2' ) );
+       }
+
+       /**
+        * This first create a full cache then update the value for the 2nd
+        * filled entry.
+        * Given a cache having 1,2,3 as key, updating 2 should bump 2 to
+        * the top of the queue with the new value: 1,3,2* (* = updated).
+        */
+       function testReplaceExistingKeyInAFullCacheShouldBumpToTop() {
+               $maxEntries = 3;
+
+               $cache = new ProcessCacheLRUTestable( $maxEntries );
+               $this->fillCache( $cache, $maxEntries );
+
+               // Set an existing cache key
+               $cache->set( "cache-key-2", "prop-2", "new-value-for-2" );
+               $this->assertSame(
+                       array(
+                               'cache-key-1' => array( 'prop-1' => 'value-1' ),
+                               'cache-key-3' => array( 'prop-3' => 'value-3' ),
+                               'cache-key-2' => array( 'prop-2' => 'new-value-for-2' ),
+                       ),
+                       $cache->getCache()
+               );
+               $this->assertEquals( 'new-value-for-2',
+                       $cache->get( 'cache-key-2', 'prop-2' )
+               );
+       }
+
+       function testBumpExistingKeyToTop() {
+               $cache = new ProcessCacheLRUTestable( 3 );
+               $this->fillCache( $cache, 3 );
+
+               // Set the very first cache key to a new value
+               $cache->set( "cache-key-1", "prop-1", "new value for 1" );
+               $this->assertEquals(
+                       array(
+                               'cache-key-2' => array( 'prop-2' => 'value-2' ),
+                               'cache-key-3' => array( 'prop-3' => 'value-3' ),
+                               'cache-key-1' => array( 'prop-1' => 'new value for 1' ),
+                       ),
+                       $cache->getCache()
+               );
+
+       }
+
+}
+
+/**
+ * Overrides some ProcessCacheLRU methods and properties accessibility.
+ */
+class ProcessCacheLRUTestable extends ProcessCacheLRU {
+       public $cache = array();
+
+       public function getCache() {
+               return $this->cache;
+       }
+       public function getEntriesCount() {
+               return count( $this->cache );
+       }
+}
index 710ad83..61507f5 100644 (file)
@@ -26,6 +26,9 @@ class FileBackendTest extends MediaWikiTestCase {
                                        }
                                }
                                $useConfig['name'] = 'localtesting'; // swap name
+                               $useConfig['shardViaHashLevels'] = array( // test sharding
+                                       'unittest-cont1' => array( 'levels' => 1, 'base' => 16, 'repeat' => 1 )
+                               );
                                $class = $useConfig['class'];
                                self::$backendToUse = new $class( $useConfig );
                                $this->singleBackend = self::$backendToUse;
@@ -246,7 +249,7 @@ class FileBackendTest extends MediaWikiTestCase {
                $cases = array();
 
                $tmpName = TempFSFile::factory( "unittests_", 'txt' )->getPath();
-               $toPath = $this->baseStorePath() . '/unittest-cont1/fun/obj1.txt';
+               $toPath = $this->baseStorePath() . '/unittest-cont1/e/fun/obj1.txt';
                $op = array( 'op' => 'store', 'src' => $tmpName, 'dst' => $toPath );
                $cases[] = array(
                        $op, // operation
@@ -332,8 +335,8 @@ class FileBackendTest extends MediaWikiTestCase {
        public function provider_testCopy() {
                $cases = array();
 
-               $source = $this->baseStorePath() . '/unittest-cont1/file.txt';
-               $dest = $this->baseStorePath() . '/unittest-cont2/fileMoved.txt';
+               $source = $this->baseStorePath() . '/unittest-cont1/e/file.txt';
+               $dest = $this->baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
 
                $op = array( 'op' => 'copy', 'src' => $source, 'dst' => $dest );
                $cases[] = array(
@@ -421,8 +424,8 @@ class FileBackendTest extends MediaWikiTestCase {
        public function provider_testMove() {
                $cases = array();
 
-               $source = $this->baseStorePath() . '/unittest-cont1/file.txt';
-               $dest = $this->baseStorePath() . '/unittest-cont2/fileMoved.txt';
+               $source = $this->baseStorePath() . '/unittest-cont1/e/file.txt';
+               $dest = $this->baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
 
                $op = array( 'op' => 'move', 'src' => $source, 'dst' => $dest );
                $cases[] = array(
@@ -506,7 +509,7 @@ class FileBackendTest extends MediaWikiTestCase {
        public function provider_testDelete() {
                $cases = array();
 
-               $source = $this->baseStorePath() . '/unittest-cont1/myfacefile.txt';
+               $source = $this->baseStorePath() . '/unittest-cont1/e/myfacefile.txt';
 
                $op = array( 'op' => 'delete', 'src' => $source );
                $cases[] = array(
@@ -600,7 +603,7 @@ class FileBackendTest extends MediaWikiTestCase {
        public function provider_testCreate() {
                $cases = array();
 
-               $dest = $this->baseStorePath() . '/unittest-cont2/myspacefile.txt';
+               $dest = $this->baseStorePath() . '/unittest-cont2/a/myspacefile.txt';
 
                $op = array( 'op' => 'create', 'content' => 'test test testing', 'dst' => $dest );
                $cases[] = array(
@@ -666,9 +669,9 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $base = $this->baseStorePath();
                $files = array(
-                       "$base/unittest-cont1/fileA.a",
-                       "$base/unittest-cont1/fileB.a",
-                       "$base/unittest-cont1/fileC.a"
+                       "$base/unittest-cont1/e/fileA.a",
+                       "$base/unittest-cont1/e/fileB.a",
+                       "$base/unittest-cont1/e/fileC.a"
                );
                $ops = array();
                $purgeOps = array();
@@ -786,16 +789,16 @@ class FileBackendTest extends MediaWikiTestCase {
                $rand = mt_rand( 0, 2000000000 ) . time();
                $dest = wfTempDir() . "/randomfile!$rand.txt";
                $srcs = array(
-                       $this->baseStorePath() . '/unittest-cont1/file1.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file2.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file3.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file4.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file5.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file6.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file7.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file8.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file9.txt',
-                       $this->baseStorePath() . '/unittest-cont1/file10.txt'
+                       $this->baseStorePath() . '/unittest-cont1/e/file1.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file2.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file3.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file4.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file5.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file6.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file7.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file8.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file9.txt',
+                       $this->baseStorePath() . '/unittest-cont1/e/file10.txt'
                );
                $content = array(
                        'egfage',
@@ -884,9 +887,9 @@ class FileBackendTest extends MediaWikiTestCase {
                $cases = array();
 
                $base = $this->baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/b/z/some_file.txt", "some file contents", true );
-               $cases[] = array( "$base/unittest-cont1/b/some-other_file.txt", "", true );
-               $cases[] = array( "$base/unittest-cont1/b/some-diff_file.txt", null, false );
+               $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents", true );
+               $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "", true );
+               $cases[] = array( "$base/unittest-cont1/e/b/some-diff_file.txt", null, false );
 
                return $cases;
        }
@@ -930,8 +933,8 @@ class FileBackendTest extends MediaWikiTestCase {
                $cases = array();
 
                $base = $this->baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/b/z/some_file.txt", "some file contents" );
-               $cases[] = array( "$base/unittest-cont1/b/some-other_file.txt", "more file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "more file contents" );
 
                return $cases;
        }
@@ -973,8 +976,8 @@ class FileBackendTest extends MediaWikiTestCase {
                $cases = array();
 
                $base = $this->baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/a/z/some_file.txt", "some file contents" );
-               $cases[] = array( "$base/unittest-cont1/a/some-other_file.txt", "more file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/z/some_file.txt", "some file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/some-other_file.txt", "more file contents" );
 
                return $cases;
        }
@@ -1015,8 +1018,8 @@ class FileBackendTest extends MediaWikiTestCase {
                $cases = array();
 
                $base = $this->baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/a/z/some_file.txt", "some file contents" );
-               $cases[] = array( "$base/unittest-cont1/a/some-other_file.txt", "more file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/z/some_file.txt", "some file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/some-other_file.txt", "more file contents" );
 
                return $cases;
        }
@@ -1037,7 +1040,7 @@ class FileBackendTest extends MediaWikiTestCase {
        function provider_testPrepareAndClean() {
                $base = $this->baseStorePath();
                return array(
-                       array( "$base/unittest-cont1/a/z/some_file1.txt", true ),
+                       array( "$base/unittest-cont1/e/a/z/some_file1.txt", true ),
                        array( "$base/unittest-cont2/a/z/some_file2.txt", true ),
                        # Specific to FS backend with no basePath field set
                        #array( "$base/unittest-cont3/a/z/some_file3.txt", false ),
@@ -1085,18 +1088,18 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $base = $this->baseStorePath();
                $dirs = array(
-                       "$base/unittest-cont1/a",
-                       "$base/unittest-cont1/a/b",
-                       "$base/unittest-cont1/a/b/c",
-                       "$base/unittest-cont1/a/b/c/d0",
-                       "$base/unittest-cont1/a/b/c/d1",
-                       "$base/unittest-cont1/a/b/c/d2",
-                       "$base/unittest-cont1/a/b/c/d0/1",
-                       "$base/unittest-cont1/a/b/c/d0/2",
-                       "$base/unittest-cont1/a/b/c/d1/3",
-                       "$base/unittest-cont1/a/b/c/d1/4",
-                       "$base/unittest-cont1/a/b/c/d2/5",
-                       "$base/unittest-cont1/a/b/c/d2/6"
+                       "$base/unittest-cont1/e/a",
+                       "$base/unittest-cont1/e/a/b",
+                       "$base/unittest-cont1/e/a/b/c",
+                       "$base/unittest-cont1/e/a/b/c/d0",
+                       "$base/unittest-cont1/e/a/b/c/d1",
+                       "$base/unittest-cont1/e/a/b/c/d2",
+                       "$base/unittest-cont1/e/a/b/c/d0/1",
+                       "$base/unittest-cont1/e/a/b/c/d0/2",
+                       "$base/unittest-cont1/e/a/b/c/d1/3",
+                       "$base/unittest-cont1/e/a/b/c/d1/4",
+                       "$base/unittest-cont1/e/a/b/c/d2/5",
+                       "$base/unittest-cont1/e/a/b/c/d2/6"
                );
                foreach ( $dirs as $dir ) {
                        $status = $this->prepare( array( 'dir' => $dir ) );
@@ -1159,13 +1162,13 @@ class FileBackendTest extends MediaWikiTestCase {
        private function doTestDoOperations() {
                $base = $this->baseStorePath();
 
-               $fileA = "$base/unittest-cont1/a/b/fileA.txt";
+               $fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
                $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
-               $fileB = "$base/unittest-cont1/a/b/fileB.txt";
+               $fileB = "$base/unittest-cont1/e/a/b/fileB.txt";
                $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
-               $fileC = "$base/unittest-cont1/a/b/fileC.txt";
+               $fileC = "$base/unittest-cont1/e/a/b/fileC.txt";
                $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
-               $fileD = "$base/unittest-cont1/a/b/fileD.txt";
+               $fileD = "$base/unittest-cont1/e/a/b/fileD.txt";
 
                $this->prepare( array( 'dir' => dirname( $fileA ) ) );
                $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
@@ -1248,10 +1251,10 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->filesToPrune[] = $tmpNameB; # avoid file leaking
                $this->filesToPrune[] = $tmpNameC; # avoid file leaking
 
-               $fileA = "$base/unittest-cont1/a/b/fileA.txt";
-               $fileB = "$base/unittest-cont1/a/b/fileB.txt";
-               $fileC = "$base/unittest-cont1/a/b/fileC.txt";
-               $fileD = "$base/unittest-cont1/a/b/fileD.txt";
+               $fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
+               $fileB = "$base/unittest-cont1/e/a/b/fileB.txt";
+               $fileC = "$base/unittest-cont1/e/a/b/fileC.txt";
+               $fileD = "$base/unittest-cont1/e/a/b/fileD.txt";
 
                $this->prepare( array( 'dir' => dirname( $fileA ) ) );
                $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
@@ -1398,20 +1401,20 @@ class FileBackendTest extends MediaWikiTestCase {
                $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont-notexists" ) );
 
                $files = array(
-                       "$base/unittest-cont1/test1.txt",
-                       "$base/unittest-cont1/test2.txt",
-                       "$base/unittest-cont1/test3.txt",
-                       "$base/unittest-cont1/subdir1/test1.txt",
-                       "$base/unittest-cont1/subdir1/test2.txt",
-                       "$base/unittest-cont1/subdir2/test3.txt",
-                       "$base/unittest-cont1/subdir2/test4.txt",
-                       "$base/unittest-cont1/subdir2/subdir/test1.txt",
-                       "$base/unittest-cont1/subdir2/subdir/test2.txt",
-                       "$base/unittest-cont1/subdir2/subdir/test3.txt",
-                       "$base/unittest-cont1/subdir2/subdir/test4.txt",
-                       "$base/unittest-cont1/subdir2/subdir/test5.txt",
-                       "$base/unittest-cont1/subdir2/subdir/sub/test0.txt",
-                       "$base/unittest-cont1/subdir2/subdir/sub/120-px-file.txt",
+                       "$base/unittest-cont1/e/test1.txt",
+                       "$base/unittest-cont1/e/test2.txt",
+                       "$base/unittest-cont1/e/test3.txt",
+                       "$base/unittest-cont1/e/subdir1/test1.txt",
+                       "$base/unittest-cont1/e/subdir1/test2.txt",
+                       "$base/unittest-cont1/e/subdir2/test3.txt",
+                       "$base/unittest-cont1/e/subdir2/test4.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test1.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test2.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test3.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test4.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test5.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/sub/test0.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/sub/120-px-file.txt",
                );
 
                // Add the files
@@ -1428,20 +1431,20 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Expected listing
                $expected = array(
-                       "test1.txt",
-                       "test2.txt",
-                       "test3.txt",
-                       "subdir1/test1.txt",
-                       "subdir1/test2.txt",
-                       "subdir2/test3.txt",
-                       "subdir2/test4.txt",
-                       "subdir2/subdir/test1.txt",
-                       "subdir2/subdir/test2.txt",
-                       "subdir2/subdir/test3.txt",
-                       "subdir2/subdir/test4.txt",
-                       "subdir2/subdir/test5.txt",
-                       "subdir2/subdir/sub/test0.txt",
-                       "subdir2/subdir/sub/120-px-file.txt",
+                       "e/test1.txt",
+                       "e/test2.txt",
+                       "e/test3.txt",
+                       "e/subdir1/test1.txt",
+                       "e/subdir1/test2.txt",
+                       "e/subdir2/test3.txt",
+                       "e/subdir2/test4.txt",
+                       "e/subdir2/subdir/test1.txt",
+                       "e/subdir2/subdir/test2.txt",
+                       "e/subdir2/subdir/test3.txt",
+                       "e/subdir2/subdir/test4.txt",
+                       "e/subdir2/subdir/test5.txt",
+                       "e/subdir2/subdir/sub/test0.txt",
+                       "e/subdir2/subdir/sub/120-px-file.txt",
                );
                sort( $expected );
 
@@ -1479,7 +1482,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Actual listing (no trailing slash)
                $list = array();
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/subdir2/subdir" ) );
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
@@ -1489,7 +1492,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Actual listing (with trailing slash)
                $list = array();
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/subdir2/subdir/" ) );
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir/" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
@@ -1518,7 +1521,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Actual listing (top files only)
                $list = array();
-               $iter = $this->backend->getTopFileList( array( 'dir' => "$base/unittest-cont1/subdir2/subdir" ) );
+               $iter = $this->backend->getTopFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
@@ -1551,20 +1554,20 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $base = $this->baseStorePath();
                $files = array(
-                       "$base/unittest-cont1/test1.txt",
-                       "$base/unittest-cont1/test2.txt",
-                       "$base/unittest-cont1/test3.txt",
-                       "$base/unittest-cont1/subdir1/test1.txt",
-                       "$base/unittest-cont1/subdir1/test2.txt",
-                       "$base/unittest-cont1/subdir2/test3.txt",
-                       "$base/unittest-cont1/subdir2/test4.txt",
-                       "$base/unittest-cont1/subdir2/subdir/test1.txt",
-                       "$base/unittest-cont1/subdir3/subdir/test2.txt",
-                       "$base/unittest-cont1/subdir4/subdir/test3.txt",
-                       "$base/unittest-cont1/subdir4/subdir/test4.txt",
-                       "$base/unittest-cont1/subdir4/subdir/test5.txt",
-                       "$base/unittest-cont1/subdir4/subdir/sub/test0.txt",
-                       "$base/unittest-cont1/subdir4/subdir/sub/120-px-file.txt",
+                       "$base/unittest-cont1/e/test1.txt",
+                       "$base/unittest-cont1/e/test2.txt",
+                       "$base/unittest-cont1/e/test3.txt",
+                       "$base/unittest-cont1/e/subdir1/test1.txt",
+                       "$base/unittest-cont1/e/subdir1/test2.txt",
+                       "$base/unittest-cont1/e/subdir2/test3.txt",
+                       "$base/unittest-cont1/e/subdir2/test4.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test1.txt",
+                       "$base/unittest-cont1/e/subdir3/subdir/test2.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/test3.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/test4.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/test5.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/sub/test0.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/sub/120-px-file.txt",
                );
 
                // Add the files
@@ -1579,6 +1582,32 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->assertEquals( true, $status->isOK(),
                        "Creation of files succeeded with OK status ($backendName)." );
 
+               $this->assertEquals( true,
+                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir1" ) ),
+                       "Directory exists in ($backendName)." );
+               $this->assertEquals( true,
+                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) ),
+                       "Directory exists in ($backendName)." );
+               $this->assertEquals( false,
+                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir2/test1.txt" ) ),
+                       "Directory does not exists in ($backendName)." );
+
+               // Expected listing
+               $expected = array(
+                       "e",
+               );
+               sort( $expected );
+
+               // Actual listing (no trailing slash)
+               $list = array();
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
+
                // Expected listing
                $expected = array(
                        "subdir1",
@@ -1588,19 +1617,9 @@ class FileBackendTest extends MediaWikiTestCase {
                );
                sort( $expected );
 
-               $this->assertEquals( true,
-                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/subdir1" ) ),
-                       "Directory exists in ($backendName)." );
-               $this->assertEquals( true,
-                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/subdir2/subdir" ) ),
-                       "Directory exists in ($backendName)." );
-               $this->assertEquals( false,
-                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/subdir2/test1.txt" ) ),
-                       "Directory does not exists in ($backendName)." );
-
                // Actual listing (no trailing slash)
                $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1" ) );
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
@@ -1610,7 +1629,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Actual listing (with trailing slash)
                $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/" ) );
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
@@ -1626,7 +1645,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Actual listing (no trailing slash)
                $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/subdir2" ) );
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir2" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
@@ -1636,7 +1655,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Actual listing (with trailing slash)
                $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/subdir2/" ) );
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir2/" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
@@ -1655,14 +1674,15 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Expected listing (recursive)
                $expected = array(
-                       "subdir1",
-                       "subdir2",
-                       "subdir3",
-                       "subdir4",
-                       "subdir2/subdir",
-                       "subdir3/subdir",
-                       "subdir4/subdir",
-                       "subdir4/subdir/sub",
+                       "e",
+                       "e/subdir1",
+                       "e/subdir2",
+                       "e/subdir3",
+                       "e/subdir4",
+                       "e/subdir2/subdir",
+                       "e/subdir3/subdir",
+                       "e/subdir4/subdir",
+                       "e/subdir4/subdir/sub",
                );
                sort( $expected );
 
@@ -1685,7 +1705,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                // Actual listing (recursive)
                $list = array();
-               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/subdir4" ) );
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir4" ) );
                foreach ( $iter as $file ) {
                        $list[] = $file;
                }
index d9b1671..11f9471 100644 (file)
@@ -596,7 +596,7 @@ class NewParserTest extends MediaWikiTestCase {
         * Run a fuzz test series
         * Draw input from a set of test files
         *
-        * @todo @fixme Needs some work to not eat memory until the world explodes
+        * @todo fixme Needs some work to not eat memory until the world explodes
         *
         * @group ParserFuzz
         */
index 6ec802c..965d7be 100644 (file)
@@ -209,7 +209,6 @@ class BaseDumpTest extends MediaWikiTestCase {
     <id>2</id>
     <revision>
       <id>2</id>
-      <parentid>5</parentid>
       <timestamp>2012-04-01T16:46:05Z</timestamp>
       <contributor>
         <ip>127.0.0.1</ip>
@@ -220,6 +219,7 @@ class BaseDumpTest extends MediaWikiTestCase {
     </revision>
     <revision>
       <id>5</id>
+      <parentid>2</parentid>
       <timestamp>2012-04-01T16:46:05Z</timestamp>
       <contributor>
         <ip>127.0.0.1</ip>
index 8b5928d..24186fb 100644 (file)
@@ -114,16 +114,16 @@ class TextPassDumperTest extends DumpTestCase {
                $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
                $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
                        $this->textId2_1, false, "jprywrymfhysqllua29tj3sc7z39dl2",
-                       "BackupDumperTestP2Text1", $this->revId2_2 );
+                       "BackupDumperTestP2Text1" );
                $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
                        $this->textId2_2, false, "b7vj5ks32po5m1z1t1br4o7scdwwy95",
-                       "BackupDumperTestP2Text2", $this->revId2_3 );
+                       "BackupDumperTestP2Text2", $this->revId2_1 );
                $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
                        $this->textId2_3, false, "jfunqmh1ssfb8rs43r19w98k28gg56r",
-                       "BackupDumperTestP2Text3", $this->revId2_4 );
+                       "BackupDumperTestP2Text3", $this->revId2_2 );
                $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
                        $this->textId2_4, false, "6o1ciaxa6pybnqprmungwofc4lv00wv",
-                       "BackupDumperTestP2Text4 some additional Text" );
+                       "BackupDumperTestP2Text4 some additional Text", $this->revId2_3 );
                $this->assertPageEnd();
 
                // Page 3
@@ -180,18 +180,18 @@ class TextPassDumperTest extends DumpTestCase {
                $this->assertPageStart( $this->pageId2, NS_MAIN, "BackupDumperTestP2" );
                $this->assertRevision( $this->revId2_1, "BackupDumperTestP2Summary1",
                        $this->textId2_1, false, "jprywrymfhysqllua29tj3sc7z39dl2",
-                       "BackupDumperTestP2Text1", $this->revId2_2 );
+                       "BackupDumperTestP2Text1" );
                $this->assertRevision( $this->revId2_2, "BackupDumperTestP2Summary2",
                        $this->textId2_2, false, "b7vj5ks32po5m1z1t1br4o7scdwwy95",
-                       "BackupDumperTestP2Text2", $this->revId2_3 );
+                       "BackupDumperTestP2Text2", $this->revId2_1 );
                // Prefetch kicks in. This is still the SHA-1 of the original text,
                // But the actual text (with different SHA-1) comes from prefetch.
                $this->assertRevision( $this->revId2_3, "BackupDumperTestP2Summary3",
                        $this->textId2_3, false, "jfunqmh1ssfb8rs43r19w98k28gg56r",
-                       "Prefetch_________2Text3", $this->revId2_4 );
+                       "Prefetch_________2Text3", $this->revId2_2 );
                $this->assertRevision( $this->revId2_4, "BackupDumperTestP2Summary4 extra",
                        $this->textId2_4, false, "6o1ciaxa6pybnqprmungwofc4lv00wv",
-                       "BackupDumperTestP2Text4 some additional Text" );
+                       "BackupDumperTestP2Text4 some additional Text", $this->revId2_3 );
                $this->assertPageEnd();
 
                // Page 3
@@ -332,17 +332,18 @@ class TextPassDumperTest extends DumpTestCase {
                                        "BackupDumperTestP2" );
                                $this->assertRevision( $this->revId2_1 + $i * self::$numOfRevs, "BackupDumperTestP2Summary1",
                                        $this->textId2_1, false, "jprywrymfhysqllua29tj3sc7z39dl2",
-                                       "BackupDumperTestP2Text1", $this->revId2_2 + $i * self::$numOfRevs );
+                                       "BackupDumperTestP2Text1" );
                                $this->assertRevision( $this->revId2_2 + $i * self::$numOfRevs, "BackupDumperTestP2Summary2",
                                        $this->textId2_2, false, "b7vj5ks32po5m1z1t1br4o7scdwwy95",
-                                       "BackupDumperTestP2Text2", $this->revId2_3 + $i * self::$numOfRevs );
+                                       "BackupDumperTestP2Text2", $this->revId2_1 + $i * self::$numOfRevs );
                                $this->assertRevision( $this->revId2_3 + $i * self::$numOfRevs, "BackupDumperTestP2Summary3",
                                        $this->textId2_3, false, "jfunqmh1ssfb8rs43r19w98k28gg56r",
-                                       "BackupDumperTestP2Text3", $this->revId2_4 + $i * self::$numOfRevs );
+                                       "BackupDumperTestP2Text3", $this->revId2_2 + $i * self::$numOfRevs );
                                $this->assertRevision( $this->revId2_4 + $i * self::$numOfRevs,
                                        "BackupDumperTestP2Summary4 extra",
                                        $this->textId2_4, false, "6o1ciaxa6pybnqprmungwofc4lv00wv",
-                                       "BackupDumperTestP2Text4 some additional Text" );
+                                       "BackupDumperTestP2Text4 some additional Text",
+                                       $this->revId2_3 + $i * self::$numOfRevs );
                                $this->assertPageEnd();
 
                                $lookingForPage = 4;
@@ -419,10 +420,10 @@ class TextPassDumperTest extends DumpTestCase {
         *           file is generated that is automatically removed upon
         *           tearDown.
         * @param $iterations integer: (Optional) specifies how often the block
-        *           of 3 pages should go into the stub file. The page id
-        *           increase further and further, while the revision and text
-        *           ids of the first iteration are reused. The pages of
-        *           iteration > 1 have no corresponding representation in the
+        *           of 3 pages should go into the stub file. The page and
+        *           revision id increase further and further, while the text
+        *           id of the first iteration is reused. The pages and revision
+        *           of iteration > 1 have no corresponding representation in the
         *           database.
         * @return string absolute filename of the stub
         */
@@ -490,7 +491,6 @@ class TextPassDumperTest extends DumpTestCase {
     <id>' . ( $this->pageId2 + $i * self::$numOfPages ) . '</id>
     <revision>
       <id>' . ( $this->revId2_1 + $i * self::$numOfRevs ) . '</id>
-      <parentid>' . ( $this->revId2_2 + $i * self::$numOfRevs ) . '</parentid>
       <timestamp>2012-04-01T16:46:05Z</timestamp>
       <contributor>
         <ip>127.0.0.1</ip>
@@ -501,7 +501,7 @@ class TextPassDumperTest extends DumpTestCase {
     </revision>
     <revision>
       <id>' . ( $this->revId2_2 + $i * self::$numOfRevs ) . '</id>
-      <parentid>' . ( $this->revId2_3 + $i * self::$numOfRevs ) . '</parentid>
+      <parentid>' . ( $this->revId2_1 + $i * self::$numOfRevs ) . '</parentid>
       <timestamp>2012-04-01T16:46:05Z</timestamp>
       <contributor>
         <ip>127.0.0.1</ip>
@@ -512,7 +512,7 @@ class TextPassDumperTest extends DumpTestCase {
     </revision>
     <revision>
       <id>' . ( $this->revId2_3 + $i * self::$numOfRevs ) . '</id>
-      <parentid>' . ( $this->revId2_4 + $i * self::$numOfRevs ) . '</parentid>
+      <parentid>' . ( $this->revId2_2 + $i * self::$numOfRevs ) . '</parentid>
       <timestamp>2012-04-01T16:46:05Z</timestamp>
       <contributor>
         <ip>127.0.0.1</ip>
@@ -523,6 +523,7 @@ class TextPassDumperTest extends DumpTestCase {
     </revision>
     <revision>
       <id>' . ( $this->revId2_4 + $i * self::$numOfRevs ) . '</id>
+      <parentid>' . ( $this->revId2_3 + $i * self::$numOfRevs ) . '</parentid>
       <timestamp>2012-04-01T16:46:05Z</timestamp>
       <contributor>
         <ip>127.0.0.1</ip>
index adfd111..1cd085f 100644 (file)
@@ -19,14 +19,16 @@ return array(
                        'tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.textSelection.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.jscompat.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.Uri.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js',
+                       'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js',
+                       'tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js',
                        'tests/qunit/suites/resources/mediawiki.special/mediawiki.special.recentchanges.test.js',
-                       'tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js',
                ),
                'dependencies' => array(
@@ -44,13 +46,15 @@ return array(
                        'jquery.tablesorter',
                        'jquery.textSelection',
                        'mediawiki',
+                       'mediawiki.api',
+                       'mediawiki.api.parse',
+                       'mediawiki.jqueryMsg',
                        'mediawiki.Title',
                        'mediawiki.Uri',
                        'mediawiki.user',
                        'mediawiki.util',
                        'mediawiki.special.recentchanges',
-                       'mediawiki.jqueryMsg',
-                       'mediawiki.language'
+                       'mediawiki.language',
                ),
                'position' => 'top',
        )
diff --git a/tests/qunit/data/load.mock.php b/tests/qunit/data/load.mock.php
new file mode 100644 (file)
index 0000000..1c18970
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Mock load.php with pre-defined test modules.
+ *
+ * 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
+ * @package MediaWiki
+ * @author Lupo
+ * @since 1.20
+ */
+header( 'Content-Type: text/javascript; charset=utf-8' );
+
+require_once '../../../includes/Xml.php';
+
+$moduleImplementations = array(
+       'testUsesMissing' => "
+mw.loader.implement( 'testUsesMissing', function () {
+       QUnit.ok( false, 'Module test.usesMissing script should not run.');
+       QUnit.start();
+}, {}, {});
+",
+
+       'testUsesNestedMissing' => "
+mw.loader.implement( 'testUsesNestedMissing', function () {
+       QUnit.ok( false, 'Module testUsesNestedMissing script should not run.');
+}, {}, {});
+",
+);
+
+$response = '';
+
+// Only support for non-encoded module names, full module names expected
+if ( isset( $_GET['modules'] ) ) {
+       $modules = explode( ',', $_GET['modules'] );
+       foreach ( $modules as $module ) {
+               if ( isset( $moduleImplementations[$module] ) ) {
+                       $response .= $moduleImplementations[$module];
+               } else {
+                       $response .= Xml::encodeJsCall( 'mw.loader.state', array( $module, 'missing' ) );
+               }
+       }
+}
+
+echo $response;
diff --git a/tests/qunit/data/testloader.php b/tests/qunit/data/testloader.php
deleted file mode 100644 (file)
index 7f4c48d..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-/**
- * ResourceLoader stub working with pre-defined test modules.
- *
- * 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
- * @package MediaWiki
- * @author Lupo
- * @since 1.20
- */
-header( 'Content-Type: text/javascript; charset=utf-8' );\r
-
-require_once "../../../includes/Xml.php";
-
-$modules = array (
-       'test.use_missing' => array (
-               'src' => 'mw.loader.implement("test.use_missing", function () {start(); ok(false, "Module test.use_missing should not run.");}, {}, {});',
-               'deps' => array ( 'test.missing' )
-       ),
-       'test.use_missing2' => array (
-               'src' => 'mw.loader.implement("test.use_missing2", function () {start(); ok(false, "Module test.use_missing2 should not run.");}, {}, {});',
-               'deps' => array ( 'test.missing2' )
-       )
-);
-
-// Copied from ResourceLoaderContext
-function expandModuleNames( $modules ) {\r
-       $retval = array();\r
-       // For backwards compatibility with an earlier hack, replace ! with .\r
-       $modules = str_replace( '!', '.', $modules );\r
-       $exploded = explode( '|', $modules );\r
-       foreach ( $exploded as $group ) {\r
-               if ( strpos( $group, ',' ) === false ) {\r
-                       // This is not a set of modules in foo.bar,baz notation\r
-                       // but a single module\r
-                       $retval[] = $group;\r
-               } else {\r
-                       // This is a set of modules in foo.bar,baz notation\r
-                       $pos = strrpos( $group, '.' );\r
-                       if ( $pos === false ) {\r
-                               // Prefixless modules, i.e. without dots\r
-                               $retval = explode( ',', $group );\r
-                       } else {\r
-                               // We have a prefix and a bunch of suffixes\r
-                               $prefix = substr( $group, 0, $pos ); // 'foo'\r
-                               $suffixes = explode( ',', substr( $group, $pos + 1 ) ); // array( 'bar', 'baz' )\r
-                               foreach ( $suffixes as $suffix ) {\r
-                                       $retval[] = "$prefix.$suffix";\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       return $retval;\r
-}
-
-function addModule ( $moduleName, &$gotten ) {
-       global $modules;
-
-       $result = "";
-       if ( isset( $gotten[$moduleName] ) ) {
-               return $result;
-       }
-       $gotten[$moduleName] = true;
-       if ( isset( $modules[$moduleName] ) ) {
-               $deps = $modules[$moduleName]['deps'];
-               foreach ( $deps as $depName ) {
-                       $result .= addModule( $depName, $gotten ) . "\n";
-               }
-               $result .= $modules[$moduleName]['src'] . "\n";
-       } else {
-               $result .= 'mw.loader.state( ' . Xml::encodeJsVar( $moduleName ) . ', "missing" );' . "\n";
-       }
-       return $result . "\n";
-}
-
-$result = "";
-
-if ( isset( $_GET['modules'] ) ) {
-       $toGet = expandModuleNames( $_GET['modules'] );
-       $gotten = array();
-       foreach ( $toGet as $moduleName ) {
-               $result .= addModule( $moduleName, $gotten );
-       }
-}
-
-echo $result;
index f3176ab..848384b 100644 (file)
@@ -147,6 +147,24 @@ QUnit.newMwEnvironment = ( function () {
        };
 }() );
 
+// $.when stops as soon as one fails, which makes sense in most
+// practical scenarios, but not in a unit test where we really do
+// need to wait until all of them are finished.
+QUnit.whenPromisesComplete = function () {
+       var altPromises = [];
+
+       $.each( arguments, function ( i, arg ) {
+               var alt = $.Deferred();
+               altPromises.push( alt );
+
+               // Whether this one fails or not, forwards it to
+               // the 'done' (resolve) callback of the alternative promise.
+               arg.always( alt.resolve );
+       });
+
+       return $.when.apply( $, altPromises );
+};
+
 /**
  * Add-on assertion helpers
  */
index 21effdb..2cb94d1 100644 (file)
                expected: simpleSample
        });
 
+       byteLimitTest({
+               description: 'Plain text input. Calling byteLimit with no parameters and no maxLength property (bug 36310)',
+               $input: $( '<input>' )
+                       .attr( 'type', 'text' )
+                       .byteLimit(),
+               sample: simpleSample,
+               hasLimit: false,
+               expected: simpleSample
+       });
+
        byteLimitTest({
                description: 'Limit using the maxlength attribute',
                $input: $( '<input>' )
index f028dbc..df0144c 100644 (file)
@@ -408,7 +408,8 @@ test( 'bug 32047 - caption must be before thead', function() {
 test( 'data-sort-value attribute, when available, should override sorting position', function() {
        var $table, data;
 
-       // Simple example, one without data-sort-value which should be sorted at it's text.
+       // Example 1: All cells except one cell without data-sort-value,
+       // which should be sorted at it's text content value.
        $table = $(
                '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
                        '<tbody>' +
@@ -424,30 +425,33 @@ test( 'data-sort-value attribute, when available, should override sorting positi
        data = [];
        $table.find( 'tbody > tr' ).each( function( i, tr ) {
                $( tr ).find( 'td' ).each( function( i, td ) {
-                       data.push( { data: $( td ).data( 'sort-value' ), text: $( td ).text() } );
+                       data.push( {
+                               data: $( td ).data( 'sortValue' ),
+                               text: $( td ).text()
+                       } );
                });
        });
 
        deepEqual( data, [
                {
-                       "data": "Apple",
-                       "text": "Bird"
+                       data: 'Apple',
+                       text: 'Bird'
                }, {
-                       "data": "Bananna",
-                       "text": "Ferret"
+                       data: 'Bananna',
+                       text: 'Ferret'
                }, {
-                       "data": undefined,
-                       "text": "Cheetah"
+                       data: undefined,
+                       text: 'Cheetah'
                }, {
-                       "data": "Cherry",
-                       "text": "Dolphin"
+                       data: 'Cherry',
+                       text: 'Dolphin'
                }, {
-                       "data": "Drupe",
-                       "text": "Elephant"
+                       data: 'Drupe',
+                       text: 'Elephant'
                }
-       ] );
+       ], 'Order matches expected order (based on data-sort-value attribute values)' );
 
-       // Another example
+       // Example 2
        $table = $(
                '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
                        '<tbody>' +
@@ -463,28 +467,89 @@ test( 'data-sort-value attribute, when available, should override sorting positi
        data = [];
        $table.find( 'tbody > tr' ).each( function( i, tr ) {
                $( tr ).find( 'td' ).each( function( i, td ) {
-                       data.push( { data: $( td ).data( 'sort-value' ), text: $( td ).text() } );
+                       data.push( {
+                               data: $( td ).data( 'sortValue' ),
+                               text: $( td ).text()
+                       } );
                });
        });
 
        deepEqual( data, [
                {
-                       "data": undefined,
-                       "text": "B"
+                       data: undefined,
+                       text: 'B'
                }, {
-                       "data": undefined,
-                       "text": "D"
+                       data: undefined,
+                       text: 'D'
                }, {
-                       "data": "E",
-                       "text": "A"
+                       data: 'E',
+                       text: 'A'
                }, {
-                       "data": "F",
-                       "text": "C"
+                       data: 'F',
+                       text: 'C'
                }, {
-                       "data": undefined,
-                       "text": "G"
+                       data: undefined,
+                       text: 'G'
                }
-       ] );
+       ], 'Order matches expected order (based on data-sort-value attribute values)' );
+
+       // Example 3: Test that live changes are used from data-sort-value,
+       // even if they change after the tablesorter is constructed (bug 38152).
+       $table = $(
+               '<table class="sortable"><thead><tr><th>Data</th></tr></thead>' +
+                       '<tbody>' +
+                       '<tr><td>D</td></tr>' +
+                       '<tr><td data-sort-value="1">A</td></tr>' +
+                       '<tr><td>B</td></tr>' +
+                       '<tr><td data-sort-value="2">G</td></tr>' +
+                       '<tr><td>C</td></tr>' +
+               '</tbody></table>'
+       );
+       // initialize table sorter and sort once
+       $table
+               .tablesorter()
+               .find( '.headerSort:eq(0)' ).click();
+
+       // Change the sortValue data properties (bug 38152)
+       // - change data
+       $table.find( 'td:contains(A)' ).data( 'sortValue', 3 );
+       // - add data
+       $table.find( 'td:contains(B)' ).data( 'sortValue', 1 );
+       // - remove data, bring back attribute: 2
+       $table.find( 'td:contains(G)' ).removeData( 'sortValue' );
+
+       // Now sort again (twice, so it is back at Ascending)
+       $table.find( '.headerSort:eq(0)' ).click();
+       $table.find( '.headerSort:eq(0)' ).click();
+
+       data = [];
+       $table.find( 'tbody > tr' ).each( function( i, tr ) {
+               $( tr ).find( 'td' ).each( function( i, td ) {
+                       data.push( {
+                               data: $( td ).data( 'sortValue' ),
+                               text: $( td ).text()
+                       } );
+               });
+       });
+
+       deepEqual( data, [
+               {
+                       data: 1,
+                       text: "B"
+               }, {
+                       data: 2,
+                       text: "G"
+               }, {
+                       data: 3,
+                       text: "A"
+               }, {
+                       data: undefined,
+                       text: "C"
+               }, {
+                       data: undefined,
+                       text: "D"
+               }
+       ], 'Order matches expected order, using the current sortValue in $.data()' );
 
 });
 
@@ -527,8 +592,8 @@ test( 'bug 32888 - Tables inside a tableheader cell', function() {
 
        var $table;
        $table = $(
-               '<table class="sortable" id="32888">' +
-               '<tr><th>header<table id="32888-2">'+
+               '<table class="sortable" id="mw-bug-32888">' +
+               '<tr><th>header<table id="mw-bug-32888-2">'+
                        '<tr><th>1</th><th>2</th></tr>' +
                '</table></th></tr>' +
                '<tr><td>A</td></tr>' +
@@ -543,10 +608,61 @@ test( 'bug 32888 - Tables inside a tableheader cell', function() {
                'Child tables inside a headercell should not interfere with sortable headers (bug 32888)'
        );
        equals(
-               $('#32888-2').find('th.headerSort').length,
+               $( '#mw-bug-32888-2' ).find('th.headerSort').length,
                0,
                'The headers of child tables inside a headercell should not be sortable themselves (bug 32888)'
        );
 });
 
+
+var correctDateSorting1 = [
+       ['01 January 2010'],
+       ['05 February 2010'],
+       ['16 January 2010'],
+];
+
+var correctDateSortingSorted1 = [
+       ['01 January 2010'],
+       ['16 January 2010'],
+       ['05 February 2010'],
+];
+
+tableTest(
+       'Correct date sorting I',
+       ['date'],
+       correctDateSorting1,
+       correctDateSortingSorted1,
+       function ( $table ) {
+               mw.config.set( 'wgDefaultDateFormat', 'mdy' );
+
+               $table.tablesorter();
+               $table.find( '.headerSort:eq(0)' ).click();
+       }
+);
+
+var correctDateSorting2 = [
+       ['January 01 2010'],
+       ['February 05 2010'],
+       ['January 16 2010'],
+];
+
+var correctDateSortingSorted2 = [
+       ['January 01 2010'],
+       ['January 16 2010'],
+       ['February 05 2010'],
+];
+
+tableTest(
+       'Correct date sorting II',
+       ['date'],
+       correctDateSorting2,
+       correctDateSortingSorted2,
+       function ( $table ) {
+               mw.config.set( 'wgDefaultDateFormat', 'dmy' );
+
+               $table.tablesorter();
+               $table.find( '.headerSort:eq(0)' ).click();
+       }
+);
+
 })( jQuery );
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
new file mode 100644 (file)
index 0000000..246b74a
--- /dev/null
@@ -0,0 +1,18 @@
+QUnit.module( 'mediawiki.api.parse', QUnit.newMwEnvironment() );
+
+QUnit.asyncTest( 'Simple', function ( assert ) {
+       var api;
+       QUnit.expect( 1 );
+
+       api = new mw.Api();
+
+       api.parse( "'''Hello world'''" )
+               .done( function ( html ) {
+                       // Html also contains "NewPP report", so only check the first part
+                       assert.equal( html.substr( 0, 26 ), '<p><b>Hello world</b>\n</p>',
+                               'Wikitext to html parsing works.'
+                       );
+
+                       QUnit.start();
+               });
+});
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
new file mode 100644 (file)
index 0000000..79bd730
--- /dev/null
@@ -0,0 +1,59 @@
+QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment() );
+
+QUnit.asyncTest( 'Basic functionality', function ( assert ) {
+       var api, d1, d2, d3;
+       QUnit.expect( 3 );
+
+       api = new mw.Api();
+
+       d1 = api.get( {} )
+               .done( function ( data ) {
+                       assert.deepEqual( data, [], 'If request succeeds without errors, resolve deferred' );
+               });
+
+       d2 = api.get({
+                       action: 'doesntexist'
+               })
+               .fail( function ( errorCode, details ) {
+                       assert.equal( errorCode, 'unknown_action', 'API error (e.g. "unknown_action") should reject the deferred' );
+               });
+
+       d3 = api.post( {} )
+               .done( function ( data ) {
+                       assert.deepEqual( data, [], 'Simple POST request' );
+               });
+
+       // After all are completed, continue the test suite.
+       QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
+               QUnit.start();
+       });
+});
+
+QUnit.asyncTest( 'Deprecated callback methods', function ( assert ) {
+       var api, d1, d2, d3;
+       QUnit.expect( 3 );
+
+       api = new mw.Api();
+
+       d1 = api.get( {}, function () {
+               assert.ok( true, 'Function argument treated as success callback.' );
+       });
+
+       d2 = api.get( {}, {
+               ok: function ( data ) {
+                       assert.ok( true, '"ok" property treated as success callback.' );
+               }
+       });
+
+       d3 = api.get({
+                       action: 'doesntexist'
+               }, {
+               err: function ( data ) {
+                       assert.ok( true, '"err" property treated as error callback.' );
+               }
+       });
+
+       QUnit.whenPromisesComplete( d1, d2, d3 ).always( function () {
+               QUnit.start();
+       });
+});
index 2abe016..481a5bb 100644 (file)
 module( 'mediawiki.jqueryMsg' );
 
-test( '-- Initial check', function() {
+test( '-- Initial check', function () {
        expect( 1 );
        ok( mw.jqueryMsg, 'mw.jqueryMsg defined' );
 } );
 
-test( 'mw.jqueryMsg Plural', function() {
-       expect( 5 );
+test( 'mw.jqueryMsg Plural', function () {
+       expect( 3 );
        var parser = mw.jqueryMsg.getMessageFunction();
-       ok( parser, 'Parser Function initialized' );
-       ok( mw.messages.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' ), 'mw.messages.set: Register' );
-       equal( parser( 'plural-msg', 0 ) , 'Found 0 items', 'Plural test for english with zero as count' );
-       equal( parser( 'plural-msg', 1 ) , 'Found 1 item', 'Singular test for english' );
-       equal( parser( 'plural-msg', 2 ) , 'Found 2 items', 'Plural test for english' );
+
+       mw.messages.set( 'plural-msg', 'Found $1 {{PLURAL:$1|item|items}}' );
+       equal( parser( 'plural-msg', 0 ), 'Found 0 items', 'Plural test for english with zero as count' );
+       equal( parser( 'plural-msg', 1 ), 'Found 1 item', 'Singular test for english' );
+       equal( parser( 'plural-msg', 2 ), 'Found 2 items', 'Plural test for english' );
 } );
 
 
-test( 'mw.jqueryMsg Gender', function() {
-       expect( 16 );
-       //TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
-       var user = mw.user;
+test( 'mw.jqueryMsg Gender', function () {
+       expect( 11 );
+       // TODO: These tests should be for mw.msg once mw.msg integrated with mw.jqueryMsg
+       // TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
+       var user = mw.user,
+               parser = mw.jqueryMsg.getMessageFunction();
+
+       // The values here are not significant,
+       // what matters is which of the values is choosen by the parser
+       mw.messages.set( 'gender-msg', '$1: {{GENDER:$2|blue|pink|green}}' );
+
        user.options.set( 'gender', 'male' );
-       var parser = mw.jqueryMsg.getMessageFunction();
-       ok( parser, 'Parser Function initialized' );
-       //TODO: English may not be the best language for these tests. Use a language like Arabic or Russian
-       ok( mw.messages.set( 'gender-msg', '$1 reverted {{GENDER:$2|his|her|their}} last edit' ), 'mw.messages.set: Register' );
-       equal( parser( 'gender-msg', 'Bob', 'male' ) , 'Bob reverted his last edit', 'Gender masculine' );
-       equal( parser( 'gender-msg', 'Bob', user ) , 'Bob reverted his last edit', 'Gender masculine' );
+       equal(
+               parser( 'gender-msg', 'Bob', 'male' ),
+               'Bob: blue',
+               'Masculine from string "male"'
+       );
+       equal(
+               parser( 'gender-msg', 'Bob', user ),
+               'Bob: blue',
+               'Masculine from mw.user object'
+       );
+
        user.options.set( 'gender', 'unknown' );
-       equal( parser( 'gender-msg', 'They', user ) , 'They reverted their last edit', 'Gender neutral or unknown' );
-       equal( parser( 'gender-msg', 'Alice', 'female' ) , 'Alice reverted her last edit', 'Gender feminine' );
-       equal( parser( 'gender-msg', 'User' ) , 'User reverted their last edit', 'Gender neutral' );
-       equal( parser( 'gender-msg', 'User', 'unknown' ) , 'User reverted their last edit', 'Gender neutral' );
-       ok( mw.messages.set( 'gender-msg-one-form', '{{GENDER:$1|User}} reverted last $2 {{PLURAL:$2|edit|edits}}' ), 'mw.messages.set: Register' );
-       equal( parser( 'gender-msg-one-form', 'male', 10 ) , 'User reverted last 10 edits', 'Gender neutral and plural form' );
-       equal( parser( 'gender-msg-one-form', 'female', 1 ) , 'User reverted last 1 edit', 'Gender neutral and singular form' );
-       ok( mw.messages.set( 'gender-msg-lowercase', '{{gender:$1|he|she}} is awesome' ), 'mw.messages.set: Register' );
-       equal( parser( 'gender-msg-lowercase', 'male' ) , 'he is awesome', 'Gender masculine' );
-       equal( parser( 'gender-msg-lowercase', 'female' ) , 'she is awesome', 'Gender feminine' );
-       ok( mw.messages.set( 'gender-msg-wrong', '{{gender}} is awesome' ), 'mw.messages.set: Register' );
-       equal( parser( 'gender-msg-wrong', 'female' ) , ' is awesome', 'Wrong syntax used, but ignore the {{gender}}' );
+       equal(
+               parser( 'gender-msg', 'Foo', user ),
+               'Foo: green',
+               'Neutral from mw.user object' );
+       equal(
+               parser( 'gender-msg', 'Alice', 'female' ),
+               'Alice: pink',
+               'Feminine from string "female"' );
+       equal(
+               parser( 'gender-msg', 'User' ),
+               'User: green',
+               'Neutral when no parameter given' );
+       equal(
+               parser( 'gender-msg', 'User', 'unknown' ),
+               'User: green',
+               'Neutral from string "unknown"'
+       );
+
+       mw.messages.set( 'gender-msg-one-form', '{{GENDER:$1|User}}: $2 {{PLURAL:$2|edit|edits}}' );
+
+       equal(
+               parser( 'gender-msg-one-form', 'male', 10 ),
+               'User: 10 edits',
+               'Gender neutral and plural form'
+       );
+       equal(
+               parser( 'gender-msg-one-form', 'female', 1 ),
+               'User: 1 edit',
+               'Gender neutral and singular form'
+       );
+
+       mw.messages.set( 'gender-msg-lowercase', '{{gender:$1|he|she}} is awesome' );
+       equal(
+               parser( 'gender-msg-lowercase', 'male' ),
+               'he is awesome',
+               'Gender masculine'
+       );
+       equal(
+               parser( 'gender-msg-lowercase', 'female' ),
+               'she is awesome',
+               'Gender feminine'
+       );
+
+       mw.messages.set( 'gender-msg-wrong', '{{gender}} test' );
+       equal(
+               parser( 'gender-msg-wrong', 'female' ),
+               ' test',
+               'Invalid syntax should result in {{gender}} simply being stripped away'
+       );
 } );
 
 
-test( 'mw.jqueryMsg Grammar', function() {
-       expect( 5 );
+test( 'mw.jqueryMsg Grammar', function () {
+       expect( 2 );
        var parser = mw.jqueryMsg.getMessageFunction();
-       ok( parser, 'Parser Function initialized' );
-       // Hope the grammar form grammar_case_foo is not valid in any language
-       ok( mw.messages.set( 'grammar-msg', 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}' ), 'mw.messages.set: Register' );
-       equal( parser( 'grammar-msg' ) , 'Przeszukaj ' + mw.config.get( 'wgSiteName' ) , 'Grammar Test with sitename' );
-       ok( mw.messages.set( 'grammar-msg-wrong-syntax', 'Przeszukaj {{GRAMMAR:grammar_case_xyz}}' ), 'mw.messages.set: Register' );
-       equal( parser( 'grammar-msg-wrong-syntax' ) , 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
+
+       // Assume the grammar form grammar_case_foo is not valid in any language
+       mw.messages.set( 'grammar-msg', 'Przeszukaj {{GRAMMAR:grammar_case_foo|{{SITENAME}}}}' );
+       equal( parser( 'grammar-msg' ), 'Przeszukaj ' + mw.config.get( 'wgSiteName' ), 'Grammar Test with sitename' );
+
+       mw.messages.set( 'grammar-msg-wrong-syntax', 'Przeszukaj {{GRAMMAR:grammar_case_xyz}}' );
+       equal( parser( 'grammar-msg-wrong-syntax' ), 'Przeszukaj ' , 'Grammar Test with wrong grammar template syntax' );
 } );
index 2f11521..00fcf38 100644 (file)
@@ -343,43 +343,50 @@ test( 'mw.loader missing dependency', function() {
        );
 } );
 
-test( 'mw.loader real missing dependency', function() {
-       expect( 6 );
+test( 'mw.loader dependency handling', function () {
+       expect( 5 );
 
        mw.loader.addSource(
-               'test',
-               {'loadScript' : QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/testloader.php' )}
+               'testloader',
+               {
+                       loadScript: QUnit.fixurl( mw.config.get( 'wgScriptPath' ) + '/tests/qunit/data/load.mock.php' )
+               }
        );
+
        mw.loader.register( [
-               ['test.missing', '0', [], null, 'test'], ['test.missing2', '0', [], null, 'test'],
-               ['test.use_missing', '0', ['test.missing'], null, 'test'],
-               ['test.use_missing2', '0', ['test.missing2'], null, 'test']
+               // [module, version, dependencies, group, source]
+               ['testMissing', '1', [], null, 'testloader'],
+               ['testUsesMissing', '1', ['testMissing'], null, 'testloader'],
+               ['testUsesNestedMissing', '1', ['testUsesMissing'], null, 'testloader']
        ] );
 
+       function verifyModuleStates() {
+               equal( mw.loader.getState( 'testMissing' ), 'missing', 'Module not known to server must have state "missing"' );
+               equal( mw.loader.getState( 'testUsesMissing' ), 'error', 'Module with missing dependency must have state "error"' );
+               equal( mw.loader.getState( 'testUsesNestedMissing' ), 'error', 'Module with indirect missing dependency must have state "error"' );
+       }
+
        stop();
-       // Asynch ahead
 
-       mw.loader.load( ['test.use_missing'] );
+       mw.loader.using( ['testUsesNestedMissing'],
+               function () {
+                       ok( false, 'Error handler should be invoked.' );
+                       ok( true ); // Dummy to reach QUnit expect()
 
-       function verifyModuleStates() {
-               strictEqual( mw.loader.getState( 'test.missing' ), 'missing', 'Module "test.missing" must have state "missing"' );
-               strictEqual( mw.loader.getState( 'test.missing2' ), 'missing', 'Module "test.missing2" must have state "missing"' );
-               strictEqual( mw.loader.getState( 'test.use_missing' ), 'error', 'Module "test.use_missing" must have state "error"' );
-               strictEqual( mw.loader.getState( 'test.use_missing2' ), 'error', 'Module "test.use_missing2" must have state "error"' );
-       }
+                       verifyModuleStates();
 
-       mw.loader.using( ['test.use_missing2'],
-               function() {
                        start();
-                       ok( false, "Success called wrongly." );
-                       ok( true , "QUnit expected() count dummy" );
-                       verifyModuleStates();
                },
-               function( e, dependencies ) {
-                       start();
-                       ok( true, "Error handler called correctly." );
-                       deepEqual( dependencies, ['test.missing2'], "Dependencies correct." );
+               function ( e, badmodules ) {
+                       ok( true, 'Error handler should be invoked.' );
+                       // As soon as server spits out state('testMissing', 'missing');
+                       // it will bubble up and trigger the error callback.
+                       // Therefor the badmodules array is not testUsesMissing or testUsesNestedMissing.
+                       deepEqual( badmodules, ['testMissing'], 'Bad modules as expected.' );
+
                        verifyModuleStates();
+
+                       start();
                }
        );
 } );
index d396b04..86beb5f 100644 (file)
@@ -141,20 +141,33 @@ test( '$content', function() {
  * one element can have a given id. 
  */
 test( 'addPortletLink', function () {
-       var pTestTb, vectorTabs, tbRL, tbMW, $tbMW, tbRLDM, caFoo;
-       expect(7);
+       var pTestTb, vectorTabs, tbRL, cuQuux, $cuQuux, tbMW, $tbMW, tbRLDM, caFoo;
+       expect( 8 );
 
        pTestTb = '\
        <div class="portlet" id="p-test-tb">\
+               <h5>Toolbox</h5>\
                <ul class="body"></ul>\
        </div>';
+       pCustom = '\
+       <div class="portlet" id="p-test-custom">\
+               <h5>Views</h5>\
+               <ul class="body">\
+                       <li id="c-foo"><a href="#">Foo</a></li>\
+                       <li id="c-barmenu">\
+                               <ul>\
+                                       <li id="c-bar-baz"><a href="#">Baz</a></a>\
+                               </ul>\
+                       </li>\
+               </ul>\
+       </div>';
        vectorTabs = '\
        <div id="p-test-views" class="vectorTabs">\
                <h5>Views</h5>\
                <ul></ul>\
        </div>';
 
-       $('#qunit-fixture').append(pTestTb, vectorTabs);
+       $( '#qunit-fixture' ).append( pTestTb, pCustom, vectorTabs );
 
        tbRL = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/ResourceLoader',
                'ResourceLoader', 't-rl', 'More info about ResourceLoader on MediaWiki.org ', 'l' );
@@ -170,6 +183,15 @@ test( 'addPortletLink', function () {
        equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
        equal( $tbMW.next().attr( 'id' ), 't-rl', 'Link is in the correct position (by passing nextnode)' );
 
+       cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux' );
+       $cuQuux = $(cuQuux);
+
+       equal(
+               $( '#p-test-custom #c-barmenu ul li' ).length,
+               1,
+               'addPortletLink did not add the item to all <ul> elements in the portlet (bug 35082)'
+       );
+
        tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );